array.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. function parsePgArrayValue(arrayString, startFrom, inQuotes) {
  2. for (let i = startFrom; i < arrayString.length; i++) {
  3. const char = arrayString[i];
  4. if (char === "\\") {
  5. i++;
  6. continue;
  7. }
  8. if (char === '"') {
  9. return [arrayString.slice(startFrom, i).replace(/\\/g, ""), i + 1];
  10. }
  11. if (inQuotes) {
  12. continue;
  13. }
  14. if (char === "," || char === "}") {
  15. return [arrayString.slice(startFrom, i).replace(/\\/g, ""), i];
  16. }
  17. }
  18. return [arrayString.slice(startFrom).replace(/\\/g, ""), arrayString.length];
  19. }
  20. function parsePgNestedArray(arrayString, startFrom = 0) {
  21. const result = [];
  22. let i = startFrom;
  23. let lastCharIsComma = false;
  24. while (i < arrayString.length) {
  25. const char = arrayString[i];
  26. if (char === ",") {
  27. if (lastCharIsComma || i === startFrom) {
  28. result.push("");
  29. }
  30. lastCharIsComma = true;
  31. i++;
  32. continue;
  33. }
  34. lastCharIsComma = false;
  35. if (char === "\\") {
  36. i += 2;
  37. continue;
  38. }
  39. if (char === '"') {
  40. const [value2, startFrom2] = parsePgArrayValue(arrayString, i + 1, true);
  41. result.push(value2);
  42. i = startFrom2;
  43. continue;
  44. }
  45. if (char === "}") {
  46. return [result, i + 1];
  47. }
  48. if (char === "{") {
  49. const [value2, startFrom2] = parsePgNestedArray(arrayString, i + 1);
  50. result.push(value2);
  51. i = startFrom2;
  52. continue;
  53. }
  54. const [value, newStartFrom] = parsePgArrayValue(arrayString, i, false);
  55. result.push(value);
  56. i = newStartFrom;
  57. }
  58. return [result, i];
  59. }
  60. function parsePgArray(arrayString) {
  61. const [result] = parsePgNestedArray(arrayString, 1);
  62. return result;
  63. }
  64. function makePgArray(array) {
  65. return `{${array.map((item) => {
  66. if (Array.isArray(item)) {
  67. return makePgArray(item);
  68. }
  69. if (typeof item === "string") {
  70. return `"${item.replace(/\\/g, "\\\\").replace(/"/g, '\\"')}"`;
  71. }
  72. return `${item}`;
  73. }).join(",")}}`;
  74. }
  75. export {
  76. makePgArray,
  77. parsePgArray,
  78. parsePgNestedArray
  79. };
  80. //# sourceMappingURL=array.js.map