flowquery 1.0.68 → 1.0.70

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.md +244 -1
  2. package/dist/compute/runner.d.ts +6 -0
  3. package/dist/compute/runner.d.ts.map +1 -1
  4. package/dist/compute/runner.js +26 -0
  5. package/dist/compute/runner.js.map +1 -1
  6. package/dist/flowquery.min.js +1 -1
  7. package/dist/graph/bindings.d.ts +78 -0
  8. package/dist/graph/bindings.d.ts.map +1 -0
  9. package/dist/graph/bindings.js +210 -0
  10. package/dist/graph/bindings.js.map +1 -0
  11. package/dist/graph/database.d.ts +4 -2
  12. package/dist/graph/database.d.ts.map +1 -1
  13. package/dist/graph/database.js +45 -9
  14. package/dist/graph/database.js.map +1 -1
  15. package/dist/graph/physical_node.d.ts +9 -0
  16. package/dist/graph/physical_node.d.ts.map +1 -1
  17. package/dist/graph/physical_node.js +70 -3
  18. package/dist/graph/physical_node.js.map +1 -1
  19. package/dist/graph/physical_relationship.d.ts +9 -0
  20. package/dist/graph/physical_relationship.d.ts.map +1 -1
  21. package/dist/graph/physical_relationship.js +70 -3
  22. package/dist/graph/physical_relationship.js.map +1 -1
  23. package/dist/parsing/ast_node.d.ts +9 -0
  24. package/dist/parsing/ast_node.d.ts.map +1 -1
  25. package/dist/parsing/ast_node.js +21 -4
  26. package/dist/parsing/ast_node.js.map +1 -1
  27. package/dist/parsing/expressions/binding_reference.d.ts +16 -0
  28. package/dist/parsing/expressions/binding_reference.d.ts.map +1 -0
  29. package/dist/parsing/expressions/binding_reference.js +34 -0
  30. package/dist/parsing/expressions/binding_reference.js.map +1 -0
  31. package/dist/parsing/operations/create_node.d.ts +5 -1
  32. package/dist/parsing/operations/create_node.d.ts.map +1 -1
  33. package/dist/parsing/operations/create_node.js +12 -2
  34. package/dist/parsing/operations/create_node.js.map +1 -1
  35. package/dist/parsing/operations/create_relationship.d.ts +5 -1
  36. package/dist/parsing/operations/create_relationship.d.ts.map +1 -1
  37. package/dist/parsing/operations/create_relationship.js +12 -2
  38. package/dist/parsing/operations/create_relationship.js.map +1 -1
  39. package/dist/parsing/operations/drop_binding.d.ts +15 -0
  40. package/dist/parsing/operations/drop_binding.d.ts.map +1 -0
  41. package/dist/parsing/operations/drop_binding.js +42 -0
  42. package/dist/parsing/operations/drop_binding.js.map +1 -0
  43. package/dist/parsing/operations/let.d.ts +36 -0
  44. package/dist/parsing/operations/let.d.ts.map +1 -0
  45. package/dist/parsing/operations/let.js +101 -0
  46. package/dist/parsing/operations/let.js.map +1 -0
  47. package/dist/parsing/operations/load.d.ts +11 -0
  48. package/dist/parsing/operations/load.d.ts.map +1 -1
  49. package/dist/parsing/operations/load.js +31 -2
  50. package/dist/parsing/operations/load.js.map +1 -1
  51. package/dist/parsing/operations/merge.d.ts +158 -0
  52. package/dist/parsing/operations/merge.d.ts.map +1 -0
  53. package/dist/parsing/operations/merge.js +338 -0
  54. package/dist/parsing/operations/merge.js.map +1 -0
  55. package/dist/parsing/operations/refresh_binding.d.ts +15 -0
  56. package/dist/parsing/operations/refresh_binding.d.ts.map +1 -0
  57. package/dist/parsing/operations/refresh_binding.js +42 -0
  58. package/dist/parsing/operations/refresh_binding.js.map +1 -0
  59. package/dist/parsing/operations/refresh_node.d.ts +11 -0
  60. package/dist/parsing/operations/refresh_node.d.ts.map +1 -0
  61. package/dist/parsing/operations/refresh_node.js +46 -0
  62. package/dist/parsing/operations/refresh_node.js.map +1 -0
  63. package/dist/parsing/operations/refresh_relationship.d.ts +11 -0
  64. package/dist/parsing/operations/refresh_relationship.d.ts.map +1 -0
  65. package/dist/parsing/operations/refresh_relationship.js +46 -0
  66. package/dist/parsing/operations/refresh_relationship.js.map +1 -0
  67. package/dist/parsing/operations/return.d.ts.map +1 -1
  68. package/dist/parsing/operations/return.js +7 -1
  69. package/dist/parsing/operations/return.js.map +1 -1
  70. package/dist/parsing/operations/update.d.ts +27 -0
  71. package/dist/parsing/operations/update.d.ts.map +1 -0
  72. package/dist/parsing/operations/update.js +88 -0
  73. package/dist/parsing/operations/update.js.map +1 -0
  74. package/dist/parsing/operations/update_delete.d.ts +43 -0
  75. package/dist/parsing/operations/update_delete.d.ts.map +1 -0
  76. package/dist/parsing/operations/update_delete.js +105 -0
  77. package/dist/parsing/operations/update_delete.js.map +1 -0
  78. package/dist/parsing/parser.d.ts +70 -1
  79. package/dist/parsing/parser.d.ts.map +1 -1
  80. package/dist/parsing/parser.js +704 -10
  81. package/dist/parsing/parser.js.map +1 -1
  82. package/dist/parsing/statement_info_crawler.d.ts +26 -0
  83. package/dist/parsing/statement_info_crawler.d.ts.map +1 -1
  84. package/dist/parsing/statement_info_crawler.js +86 -4
  85. package/dist/parsing/statement_info_crawler.js.map +1 -1
  86. package/dist/tokenization/keyword.d.ts +21 -1
  87. package/dist/tokenization/keyword.d.ts.map +1 -1
  88. package/dist/tokenization/keyword.js +20 -0
  89. package/dist/tokenization/keyword.js.map +1 -1
  90. package/dist/tokenization/token.d.ts +24 -0
  91. package/dist/tokenization/token.d.ts.map +1 -1
  92. package/dist/tokenization/token.js +73 -0
  93. package/dist/tokenization/token.js.map +1 -1
  94. package/package.json +1 -1
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const bindings_1 = __importDefault(require("../../graph/bindings"));
16
+ const operation_1 = __importDefault(require("./operation"));
17
+ /**
18
+ * `REFRESH BINDING name`: clear the cached value of a refreshable
19
+ * binding so the next read re-executes the backing sub-query. No-op
20
+ * for plain bindings.
21
+ */
22
+ class RefreshBinding extends operation_1.default {
23
+ constructor(name) {
24
+ super();
25
+ this._name = name;
26
+ }
27
+ get name() {
28
+ return this._name;
29
+ }
30
+ run() {
31
+ return __awaiter(this, void 0, void 0, function* () {
32
+ var _a;
33
+ bindings_1.default.getInstance().invalidate(this._name);
34
+ yield ((_a = this.next) === null || _a === void 0 ? void 0 : _a.run());
35
+ });
36
+ }
37
+ get results() {
38
+ return [];
39
+ }
40
+ }
41
+ exports.default = RefreshBinding;
42
+ //# sourceMappingURL=refresh_binding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh_binding.js","sourceRoot":"","sources":["../../../src/parsing/operations/refresh_binding.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,oEAA4C;AAC5C,4DAAoC;AAEpC;;;;GAIG;AACH,MAAM,cAAe,SAAQ,mBAAS;IAGlC,YAAY,IAAY;QACpB,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAEY,GAAG;;;YACZ,kBAAQ,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC9C,MAAM,CAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,GAAG,EAAE,CAAA,CAAC;QAC3B,CAAC;KAAA;IAED,IAAW,OAAO;QACd,OAAO,EAAE,CAAC;IACd,CAAC;CACJ;AAED,kBAAe,cAAc,CAAC"}
@@ -0,0 +1,11 @@
1
+ import Node from "../../graph/node";
2
+ import Operation from "./operation";
3
+ declare class RefreshNode extends Operation {
4
+ private _node;
5
+ constructor(node: Node);
6
+ get node(): Node | null;
7
+ run(): Promise<void>;
8
+ get results(): Record<string, any>[];
9
+ }
10
+ export default RefreshNode;
11
+ //# sourceMappingURL=refresh_node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh_node.d.ts","sourceRoot":"","sources":["../../../src/parsing/operations/refresh_node.ts"],"names":[],"mappings":"AACA,OAAO,IAAI,MAAM,kBAAkB,CAAC;AACpC,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,cAAM,WAAY,SAAQ,SAAS;IAC/B,OAAO,CAAC,KAAK,CAAqB;gBACtB,IAAI,EAAE,IAAI;IAItB,IAAW,IAAI,IAAI,IAAI,GAAG,IAAI,CAE7B;IACM,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B,IAAW,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAE1C;CACJ;AAED,eAAe,WAAW,CAAC"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const database_1 = __importDefault(require("../../graph/database"));
16
+ const operation_1 = __importDefault(require("./operation"));
17
+ class RefreshNode extends operation_1.default {
18
+ constructor(node) {
19
+ super();
20
+ this._node = null;
21
+ this._node = node;
22
+ }
23
+ get node() {
24
+ return this._node;
25
+ }
26
+ run() {
27
+ return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
28
+ try {
29
+ if (this._node === null) {
30
+ throw new Error("Node is null");
31
+ }
32
+ const db = database_1.default.getInstance();
33
+ db.refreshNode(this._node);
34
+ resolve();
35
+ }
36
+ catch (error) {
37
+ reject(error);
38
+ }
39
+ }));
40
+ }
41
+ get results() {
42
+ return [];
43
+ }
44
+ }
45
+ exports.default = RefreshNode;
46
+ //# sourceMappingURL=refresh_node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh_node.js","sourceRoot":"","sources":["../../../src/parsing/operations/refresh_node.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,oEAA4C;AAE5C,4DAAoC;AAEpC,MAAM,WAAY,SAAQ,mBAAS;IAE/B,YAAY,IAAU;QAClB,KAAK,EAAE,CAAC;QAFJ,UAAK,GAAgB,IAAI,CAAC;QAG9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;IACtB,CAAC;IACD,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IACM,GAAG;QACN,OAAO,IAAI,OAAO,CAAC,CAAO,OAAO,EAAE,MAAM,EAAE,EAAE;YACzC,IAAI,CAAC;gBACD,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;oBACtB,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;gBACpC,CAAC;gBACD,MAAM,EAAE,GAAa,kBAAQ,CAAC,WAAW,EAAE,CAAC;gBAC5C,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC3B,OAAO,EAAE,CAAC;YACd,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;QACL,CAAC,CAAA,CAAC,CAAC;IACP,CAAC;IACD,IAAW,OAAO;QACd,OAAO,EAAE,CAAC;IACd,CAAC;CACJ;AAED,kBAAe,WAAW,CAAC"}
@@ -0,0 +1,11 @@
1
+ import Relationship from "../../graph/relationship";
2
+ import Operation from "./operation";
3
+ declare class RefreshRelationship extends Operation {
4
+ private _relationship;
5
+ constructor(relationship: Relationship);
6
+ get relationship(): Relationship | null;
7
+ run(): Promise<void>;
8
+ get results(): Record<string, any>[];
9
+ }
10
+ export default RefreshRelationship;
11
+ //# sourceMappingURL=refresh_relationship.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh_relationship.d.ts","sourceRoot":"","sources":["../../../src/parsing/operations/refresh_relationship.ts"],"names":[],"mappings":"AACA,OAAO,YAAY,MAAM,0BAA0B,CAAC;AACpD,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC,cAAM,mBAAoB,SAAQ,SAAS;IACvC,OAAO,CAAC,aAAa,CAA6B;gBACtC,YAAY,EAAE,YAAY;IAItC,IAAW,YAAY,IAAI,YAAY,GAAG,IAAI,CAE7C;IACM,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B,IAAW,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAE1C;CACJ;AAED,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const database_1 = __importDefault(require("../../graph/database"));
16
+ const operation_1 = __importDefault(require("./operation"));
17
+ class RefreshRelationship extends operation_1.default {
18
+ constructor(relationship) {
19
+ super();
20
+ this._relationship = null;
21
+ this._relationship = relationship;
22
+ }
23
+ get relationship() {
24
+ return this._relationship;
25
+ }
26
+ run() {
27
+ return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
28
+ try {
29
+ if (this._relationship === null) {
30
+ throw new Error("Relationship is null");
31
+ }
32
+ const db = database_1.default.getInstance();
33
+ db.refreshRelationship(this._relationship);
34
+ resolve();
35
+ }
36
+ catch (error) {
37
+ reject(error);
38
+ }
39
+ }));
40
+ }
41
+ get results() {
42
+ return [];
43
+ }
44
+ }
45
+ exports.default = RefreshRelationship;
46
+ //# sourceMappingURL=refresh_relationship.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refresh_relationship.js","sourceRoot":"","sources":["../../../src/parsing/operations/refresh_relationship.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,oEAA4C;AAE5C,4DAAoC;AAEpC,MAAM,mBAAoB,SAAQ,mBAAS;IAEvC,YAAY,YAA0B;QAClC,KAAK,EAAE,CAAC;QAFJ,kBAAa,GAAwB,IAAI,CAAC;QAG9C,IAAI,CAAC,aAAa,GAAG,YAAY,CAAC;IACtC,CAAC;IACD,IAAW,YAAY;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;IACM,GAAG;QACN,OAAO,IAAI,OAAO,CAAC,CAAO,OAAO,EAAE,MAAM,EAAE,EAAE;YACzC,IAAI,CAAC;gBACD,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,EAAE,CAAC;oBAC9B,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;gBAC5C,CAAC;gBACD,MAAM,EAAE,GAAG,kBAAQ,CAAC,WAAW,EAAE,CAAC;gBAClC,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC3C,OAAO,EAAE,CAAC;YACd,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,CAAC;YAClB,CAAC;QACL,CAAC,CAAA,CAAC,CAAC;IACP,CAAC;IACD,IAAW,OAAO;QACd,OAAO,EAAE,CAAC;IACd,CAAC;CACJ;AAED,kBAAe,mBAAmB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"return.d.ts","sourceRoot":"","sources":["../../../src/parsing/operations/return.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,SAAS,CAAC;AAE5B;;;;;;;;;;GAUG;AACH,cAAM,MAAO,SAAQ,UAAU;IAC3B,SAAS,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAQ;IACtC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAM;IAC/C,OAAO,CAAC,MAAM,CAAsB;IACpC,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAQ;IAC1C,IAAW,KAAK,CAAC,KAAK,EAAE,KAAK,EAE5B;IACD,IAAW,KAAK,IAAI,OAAO,CAK1B;IACD,IAAW,KAAK,CAAC,KAAK,EAAE,KAAK,EAE5B;IACD,IAAW,OAAO,CAAC,OAAO,EAAE,OAAO,EAElC;IACY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA2BpB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAGxC,IAAW,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAS1C;CACJ;AAED,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"return.d.ts","sourceRoot":"","sources":["../../../src/parsing/operations/return.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,MAAM,SAAS,CAAC;AAE5B;;;;;;;;;;GAUG;AACH,cAAM,MAAO,SAAQ,UAAU;IAC3B,SAAS,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAQ;IACtC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAM;IAC/C,OAAO,CAAC,MAAM,CAAsB;IACpC,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAQ;IAC1C,IAAW,KAAK,CAAC,KAAK,EAAE,KAAK,EAE5B;IACD,IAAW,KAAK,IAAI,OAAO,CAK1B;IACD,IAAW,KAAK,CAAC,KAAK,EAAE,KAAK,EAE5B;IACD,IAAW,OAAO,CAAC,OAAO,EAAE,OAAO,EAElC;IACY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAiCpB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAGxC,IAAW,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAS1C;CACJ;AAED,eAAe,MAAM,CAAC"}
@@ -63,7 +63,13 @@ class Return extends projection_1.default {
63
63
  yield sq.evaluate();
64
64
  }
65
65
  const raw = expression.value();
66
- const value = typeof raw === "object" && raw !== null ? structuredClone(raw) : raw;
66
+ let value = typeof raw === "object" && raw !== null ? structuredClone(raw) : raw;
67
+ // `_label` is an internal property attached to node records by
68
+ // the data resolver (consumed by the labels() function). Strip
69
+ // it from the projected value so it doesn't leak into results.
70
+ if (value && typeof value === "object" && !Array.isArray(value) && "_label" in value) {
71
+ delete value._label;
72
+ }
67
73
  record.set(alias, value);
68
74
  }
69
75
  // Capture sort-key values while expression bindings are still live.
@@ -1 +1 @@
1
- {"version":3,"file":"return.js","sourceRoot":"","sources":["../../../src/parsing/operations/return.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"return.js","sourceRoot":"","sources":["../../../src/parsing/operations/return.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import ASTNode from "../ast_node";
2
+ import Expression from "../expressions/expression";
3
+ import Operation from "./operation";
4
+ /**
5
+ * `UPDATE name = <rhs>` — replace the value bound to `name`.
6
+ *
7
+ * `UPDATE name` always requires `name` to already be bound — use
8
+ * `LET` to introduce a new binding. Per-row updates (key-based
9
+ * upsert, partial-field merge, conditional matched/not-matched
10
+ * branches) live on the `MERGE INTO … USING …` operation.
11
+ *
12
+ * `UPDATE name AS alias DELETE WHERE <pred>` — see {@link UpdateDelete}.
13
+ */
14
+ declare class Update extends Operation {
15
+ private _name;
16
+ private _expression;
17
+ private _subQuery;
18
+ private _value;
19
+ constructor(name: string, expression: Expression | null, subQuery: ASTNode | null);
20
+ get name(): string;
21
+ get expression(): Expression | null;
22
+ get subQuery(): ASTNode | null;
23
+ run(): Promise<void>;
24
+ get results(): Record<string, any>[];
25
+ }
26
+ export default Update;
27
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../src/parsing/operations/update.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,aAAa,CAAC;AAClC,OAAO,UAAU,MAAM,2BAA2B,CAAC;AACnD,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC;;;;;;;;;GASG;AACH,cAAM,MAAO,SAAQ,SAAS;IAC1B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAAoB;IACvC,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,MAAM,CAAkB;gBAEpB,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,EAAE,OAAO,GAAG,IAAI;IAajF,IAAW,IAAI,IAAI,MAAM,CAExB;IAED,IAAW,UAAU,IAAI,UAAU,GAAG,IAAI,CAEzC;IAED,IAAW,QAAQ,IAAI,OAAO,GAAG,IAAI,CAEpC;IAEY,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA4BjC,IAAW,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAK1C;CACJ;AAED,eAAe,MAAM,CAAC"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const bindings_1 = __importDefault(require("../../graph/bindings"));
16
+ const operation_1 = __importDefault(require("./operation"));
17
+ /**
18
+ * `UPDATE name = <rhs>` — replace the value bound to `name`.
19
+ *
20
+ * `UPDATE name` always requires `name` to already be bound — use
21
+ * `LET` to introduce a new binding. Per-row updates (key-based
22
+ * upsert, partial-field merge, conditional matched/not-matched
23
+ * branches) live on the `MERGE INTO … USING …` operation.
24
+ *
25
+ * `UPDATE name AS alias DELETE WHERE <pred>` — see {@link UpdateDelete}.
26
+ */
27
+ class Update extends operation_1.default {
28
+ constructor(name, expression, subQuery) {
29
+ super();
30
+ this._value = undefined;
31
+ this._name = name;
32
+ this._expression = expression;
33
+ this._subQuery = subQuery;
34
+ if (expression !== null) {
35
+ this.addChild(expression);
36
+ }
37
+ if (subQuery !== null) {
38
+ this.addChild(subQuery);
39
+ }
40
+ }
41
+ get name() {
42
+ return this._name;
43
+ }
44
+ get expression() {
45
+ return this._expression;
46
+ }
47
+ get subQuery() {
48
+ return this._subQuery;
49
+ }
50
+ run() {
51
+ return __awaiter(this, void 0, void 0, function* () {
52
+ var _a;
53
+ const bindings = bindings_1.default.getInstance();
54
+ if (!bindings.has(this._name)) {
55
+ throw new Error(`Binding '${this._name}' is not defined; use LET to create it`);
56
+ }
57
+ if (bindings.isRefreshable(this._name)) {
58
+ throw new Error(`Binding '${this._name}' is refreshable; use REFRESH BINDING ${this._name} to re-evaluate or DROP BINDING ${this._name} first`);
59
+ }
60
+ let value;
61
+ if (this._subQuery !== null) {
62
+ const first = this._subQuery.firstChild();
63
+ const last = this._subQuery.lastChild();
64
+ yield first.initialize();
65
+ yield first.run();
66
+ yield first.finish();
67
+ value = last.results;
68
+ }
69
+ else if (this._expression !== null) {
70
+ value = this._expression.value();
71
+ }
72
+ else {
73
+ value = null;
74
+ }
75
+ bindings.set(this._name, value);
76
+ this._value = value;
77
+ yield ((_a = this.next) === null || _a === void 0 ? void 0 : _a.run());
78
+ });
79
+ }
80
+ get results() {
81
+ if (Array.isArray(this._value)) {
82
+ return this._value;
83
+ }
84
+ return [];
85
+ }
86
+ }
87
+ exports.default = Update;
88
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/parsing/operations/update.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,oEAA4C;AAG5C,4DAAoC;AAEpC;;;;;;;;;GASG;AACH,MAAM,MAAO,SAAQ,mBAAS;IAM1B,YAAY,IAAY,EAAE,UAA6B,EAAE,QAAwB;QAC7E,KAAK,EAAE,CAAC;QAHJ,WAAM,GAAQ,SAAS,CAAC;QAI5B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;YACtB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;QAC9B,CAAC;QACD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;YACpB,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC5B,CAAC;IACL,CAAC;IAED,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,IAAW,UAAU;QACjB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC5B,CAAC;IAED,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IAEY,GAAG;;;YACZ,MAAM,QAAQ,GAAG,kBAAQ,CAAC,WAAW,EAAE,CAAC;YACxC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,CAAC,KAAK,wCAAwC,CAAC,CAAC;YACpF,CAAC;YACD,IAAI,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CACX,YAAY,IAAI,CAAC,KAAK,yCAAyC,IAAI,CAAC,KAAK,mCAAmC,IAAI,CAAC,KAAK,QAAQ,CACjI,CAAC;YACN,CAAC;YACD,IAAI,KAAU,CAAC;YACf,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,EAAE,CAAC;gBAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAe,CAAC;gBACvD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,EAAe,CAAC;gBACrD,MAAM,KAAK,CAAC,UAAU,EAAE,CAAC;gBACzB,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC;gBAClB,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;gBACrB,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC;YACzB,CAAC;iBAAM,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;gBACnC,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACJ,KAAK,GAAG,IAAI,CAAC;YACjB,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YAChC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,MAAM,CAAA,MAAA,IAAI,CAAC,IAAI,0CAAE,GAAG,EAAE,CAAA,CAAC;QAC3B,CAAC;KAAA;IAED,IAAW,OAAO;QACd,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,MAA+B,CAAC;QAChD,CAAC;QACD,OAAO,EAAE,CAAC;IACd,CAAC;CACJ;AAED,kBAAe,MAAM,CAAC"}
@@ -0,0 +1,43 @@
1
+ import Expression from "../expressions/expression";
2
+ import Operation from "./operation";
3
+ /**
4
+ * `UPDATE name AS alias DELETE WHERE <predicate>` — remove rows from a
5
+ * list-binding that satisfy the predicate.
6
+ *
7
+ * Iterates the current rows of `name`, binding each to `alias`, and
8
+ * evaluates the predicate. Rows whose predicate evaluates truthy are
9
+ * dropped; remaining rows keep their relative order. Replaces the
10
+ * binding with the filtered list.
11
+ *
12
+ * The alias is registered in the parser's variable scope so the
13
+ * predicate can reference `alias.field` (or just `alias` for scalar
14
+ * rows). At runtime, the alias resolves to the *current* row via
15
+ * {@link value}.
16
+ */
17
+ declare class UpdateDelete extends Operation {
18
+ private _name;
19
+ private _alias;
20
+ private _predicate;
21
+ private _currentRow;
22
+ private _value;
23
+ constructor(name: string, alias: string, predicate: Expression);
24
+ /**
25
+ * Replaces the predicate (used by the parser, which must register
26
+ * the operation in its variable scope *before* parsing the
27
+ * predicate so that `<alias>` references resolve to this node).
28
+ */
29
+ setPredicate(predicate: Expression): void;
30
+ get name(): string;
31
+ get alias(): string;
32
+ get predicate(): Expression;
33
+ /**
34
+ * Returns the row currently bound to the alias during predicate
35
+ * evaluation. This is what {@link Reference}.value() resolves to
36
+ * when the alias is referenced in the predicate.
37
+ */
38
+ value(): any;
39
+ run(): Promise<void>;
40
+ get results(): Record<string, any>[];
41
+ }
42
+ export default UpdateDelete;
43
+ //# sourceMappingURL=update_delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update_delete.d.ts","sourceRoot":"","sources":["../../../src/parsing/operations/update_delete.ts"],"names":[],"mappings":"AACA,OAAO,UAAU,MAAM,2BAA2B,CAAC;AACnD,OAAO,SAAS,MAAM,aAAa,CAAC;AAEpC;;;;;;;;;;;;;GAaG;AACH,cAAM,YAAa,SAAQ,SAAS;IAChC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,MAAM,CAAa;gBAEf,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU;IAQ9D;;;;OAIG;IACI,YAAY,CAAC,SAAS,EAAE,UAAU,GAAG,IAAI;IAShD,IAAW,IAAI,IAAI,MAAM,CAExB;IAED,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED,IAAW,SAAS,IAAI,UAAU,CAEjC;IAED;;;;OAIG;IACI,KAAK,IAAI,GAAG;IAIN,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA8BjC,IAAW,OAAO,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAE1C;CACJ;AAED,eAAe,YAAY,CAAC"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const bindings_1 = __importDefault(require("../../graph/bindings"));
16
+ const operation_1 = __importDefault(require("./operation"));
17
+ /**
18
+ * `UPDATE name AS alias DELETE WHERE <predicate>` — remove rows from a
19
+ * list-binding that satisfy the predicate.
20
+ *
21
+ * Iterates the current rows of `name`, binding each to `alias`, and
22
+ * evaluates the predicate. Rows whose predicate evaluates truthy are
23
+ * dropped; remaining rows keep their relative order. Replaces the
24
+ * binding with the filtered list.
25
+ *
26
+ * The alias is registered in the parser's variable scope so the
27
+ * predicate can reference `alias.field` (or just `alias` for scalar
28
+ * rows). At runtime, the alias resolves to the *current* row via
29
+ * {@link value}.
30
+ */
31
+ class UpdateDelete extends operation_1.default {
32
+ constructor(name, alias, predicate) {
33
+ super();
34
+ this._currentRow = undefined;
35
+ this._value = [];
36
+ this._name = name;
37
+ this._alias = alias;
38
+ this._predicate = predicate;
39
+ this.addChild(predicate);
40
+ }
41
+ /**
42
+ * Replaces the predicate (used by the parser, which must register
43
+ * the operation in its variable scope *before* parsing the
44
+ * predicate so that `<alias>` references resolve to this node).
45
+ */
46
+ setPredicate(predicate) {
47
+ if (this.children.length > 0) {
48
+ this.replaceChild(this._predicate, predicate);
49
+ }
50
+ else {
51
+ this.addChild(predicate);
52
+ }
53
+ this._predicate = predicate;
54
+ }
55
+ get name() {
56
+ return this._name;
57
+ }
58
+ get alias() {
59
+ return this._alias;
60
+ }
61
+ get predicate() {
62
+ return this._predicate;
63
+ }
64
+ /**
65
+ * Returns the row currently bound to the alias during predicate
66
+ * evaluation. This is what {@link Reference}.value() resolves to
67
+ * when the alias is referenced in the predicate.
68
+ */
69
+ value() {
70
+ return this._currentRow;
71
+ }
72
+ run() {
73
+ return __awaiter(this, void 0, void 0, function* () {
74
+ var _a;
75
+ const bindings = bindings_1.default.getInstance();
76
+ if (!bindings.has(this._name)) {
77
+ throw new Error(`Binding '${this._name}' is not defined; use LET to create it`);
78
+ }
79
+ if (bindings.isRefreshable(this._name)) {
80
+ throw new Error(`Binding '${this._name}' is refreshable; use REFRESH BINDING ${this._name} to re-evaluate or DROP BINDING ${this._name} first`);
81
+ }
82
+ const existing = bindings.get(this._name);
83
+ if (!Array.isArray(existing)) {
84
+ throw new Error(`UPDATE ${this._name} AS ${this._alias} DELETE WHERE … requires '${this._name}' to be a list`);
85
+ }
86
+ const result = [];
87
+ for (const row of existing) {
88
+ this._currentRow = row;
89
+ const keep = !this._predicate.value();
90
+ if (keep) {
91
+ result.push(row);
92
+ }
93
+ }
94
+ this._currentRow = undefined;
95
+ bindings.set(this._name, result);
96
+ this._value = result;
97
+ yield ((_a = this.next) === null || _a === void 0 ? void 0 : _a.run());
98
+ });
99
+ }
100
+ get results() {
101
+ return this._value;
102
+ }
103
+ }
104
+ exports.default = UpdateDelete;
105
+ //# sourceMappingURL=update_delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update_delete.js","sourceRoot":"","sources":["../../../src/parsing/operations/update_delete.ts"],"names":[],"mappings":"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"}
@@ -40,7 +40,9 @@ declare class Parser extends BaseParser {
40
40
  */
41
41
  parseStatements(statement: string): Generator<ASTNode>;
42
42
  /**
43
- * Validates that all operations in a statement are CREATE or DELETE.
43
+ * Validates that all operations in a statement are CREATE, DELETE,
44
+ * REFRESH, LET, or UPDATE — the declaration kinds that may precede the
45
+ * terminal statement in a multi-statement query.
44
46
  */
45
47
  private validateIsCreateOrDelete;
46
48
  private _parseTokenized;
@@ -53,6 +55,73 @@ declare class Parser extends BaseParser {
53
55
  private parseCall;
54
56
  private parseCreate;
55
57
  private parseDelete;
58
+ private parseRefresh;
59
+ /**
60
+ * Returns true when the current token is a clause keyword that
61
+ * starts a query pipeline (the right-hand side of a `LET name =`
62
+ * or `UPDATE name =`). Used to disambiguate between binding a
63
+ * plain expression and binding the rows produced by a sub-query.
64
+ */
65
+ private looksLikePipelineStart;
66
+ /**
67
+ * Peeks past `{` to decide whether the brace opens a sub-query
68
+ * (first significant token is a clause keyword) or a map literal
69
+ * (anything else, e.g. identifier+colon or string key).
70
+ */
71
+ private braceOpensSubQuery;
72
+ /**
73
+ * Parses the right-hand side of a `LET` / `UPDATE`. Returns the
74
+ * expression *or* the sub-query AST that was parsed.
75
+ */
76
+ private parseLetUpdateRhs;
77
+ private parseLet;
78
+ private parseUpdate;
79
+ /**
80
+ * Parses a `MERGE INTO <name> [AS <target>] USING <rhs>
81
+ * [AS <source>] ON <on-clause> <when-clauses>` statement.
82
+ */
83
+ private parseMerge;
84
+ /**
85
+ * Parses the body of the `ON` clause. Distinguishes a short-form
86
+ * key list (`ON id`, `ON (a, b, c)`) from a full predicate
87
+ * expression by looking ahead: a bare identifier (or parenthesised
88
+ * list of identifiers) followed by `WHEN` is the key form;
89
+ * anything else is parsed as an expression.
90
+ */
91
+ private parseMergeOn;
92
+ /**
93
+ * Speculatively parses `<id>` or `(<id> [, <id>]*)` followed by
94
+ * `WHEN`. Returns the key list on success, or `null` if the
95
+ * lookahead doesn't match (leaving the caller to rewind and try
96
+ * an expression).
97
+ */
98
+ private tryParseMergeKeyList;
99
+ /**
100
+ * Parses a single `WHEN [NOT] MATCHED THEN UPDATE SET … | DELETE
101
+ * | INSERT [<expr>]` clause. Caller is positioned on `WHEN`.
102
+ */
103
+ private parseMergeWhenClause;
104
+ /**
105
+ * Parses `.field [= <expr>] [, .field [= <expr>]]*` — the body of a
106
+ * `WHEN MATCHED THEN UPDATE SET` clause. An item without an
107
+ * explicit `= <expr>` defaults to `source.<field>` at run time.
108
+ */
109
+ private parseMergeSetList;
110
+ /**
111
+ * Parses the tail of `UPDATE name AS alias DELETE WHERE <pred>`,
112
+ * with `AS` already consumed by the caller's lookahead.
113
+ */
114
+ private parseUpdateDeleteTail;
115
+ /**
116
+ * Recursively replaces any unresolved {@link Reference} node in
117
+ * the given subtree with a {@link BindingReference}, which looks up
118
+ * the value from the global {@link Bindings} store at run-time.
119
+ *
120
+ * Used by `UPDATE … AS u DELETE WHERE …` so that predicates can
121
+ * reference other bindings by name, and to keep `LOAD JSON FROM …`
122
+ * behaviour consistent at arbitrary depth.
123
+ */
124
+ private convertUnresolvedReferencesToBindings;
56
125
  private parseMatch;
57
126
  private parseNode;
58
127
  private parseProperties;
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parsing/parser.ts"],"names":[],"mappings":"AAUA,OAAO,OAAO,MAAM,YAAY,CAAC;AACjC,OAAO,UAAU,MAAM,eAAe,CAAC;AA4DvC;;;;;;;;;;;;GAYG;AACH,cAAM,MAAO,SAAQ,UAAU;IAC3B,OAAO,CAAC,MAAM,CAAkC;IAEhD;;;;;;;;;;;OAWG;IACI,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAiBxC;;;;;;;;;OASG;IACK,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC;IAgC9D;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAiBhC,OAAO,CAAC,eAAe;IA6GvB,OAAO,CAAC,cAAc;IAatB,OAAO,CAAC,SAAS;IA0BjB,OAAO,CAAC,WAAW;IAiCnB,OAAO,CAAC,WAAW;IAyBnB,OAAO,CAAC,UAAU;IAkBlB,OAAO,CAAC,SAAS;IAoEjB,OAAO,CAAC,SAAS;IA0BjB,OAAO,CAAC,WAAW;IAkEnB,OAAO,CAAC,WAAW;IAsDnB,OAAO,CAAC,UAAU;IAsBlB,OAAO,CAAC,SAAS;IAyEjB,OAAO,CAAE,eAAe;IAwCxB,OAAO,CAAE,aAAa;IAgCtB,OAAO,CAAC,YAAY;IA0BpB,OAAO,CAAC,sBAAsB;IA8B9B,OAAO,CAAC,iBAAiB;IAmFzB,OAAO,CAAC,qBAAqB;IA6B7B,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,YAAY;IAyCpB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAUxB,OAAO,CAAE,iBAAiB;IAsC1B;;;OAGG;IACH,OAAO,CAAC,YAAY;IA+HpB,OAAO,CAAC,mCAAmC;IAqB3C;;;;;;;;;;OAUG;IACH,OAAO,CAAC,oBAAoB;IAyB5B,OAAO,CAAC,eAAe;IA2CvB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,qBAAqB;IAI7B,OAAO,CAAC,uBAAuB;IAY/B,OAAO,CAAC,qBAAqB;IAY7B,OAAO,CAAC,gBAAgB;IAkCxB,OAAO,CAAC,WAAW;IAkDnB,OAAO,CAAC,SAAS;IAyCjB,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,SAAS;IAejB,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,aAAa;IAoCrB;;;;;OAKG;IACH,OAAO,CAAC,kBAAkB;IA2B1B,OAAO,CAAC,sBAAsB;IA4E9B,OAAO,CAAC,oCAAoC;IAoB5C,OAAO,CAAC,YAAY;IA4BpB;;;;;;;OAOG;IACH,OAAO,CAAC,0BAA0B;IAiBlC;;;;;;;OAOG;IACH,OAAO,CAAC,sBAAsB;IA8D9B,OAAO,CAAC,SAAS;IAiBjB,OAAO,CAAC,qBAAqB;IAuC7B,OAAO,CAAC,cAAc;IAyBtB,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,kCAAkC;IAO1C,OAAO,CAAC,yBAAyB;IASjC,OAAO,CAAC,0CAA0C;IAMlD,OAAO,CAAC,2BAA2B;IAiBnC,OAAO,CAAC,uBAAuB;CAgClC;AAED,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/parsing/parser.ts"],"names":[],"mappings":"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"}