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,78 @@
1
+ import type ASTNode from "../parsing/ast_node";
2
+ /**
3
+ * One entry in the {@link Bindings} singleton. Plain bindings store
4
+ * their materialised `value` directly; refreshable bindings (created
5
+ * by `LET name = { ... } REFRESH EVERY n unit`) additionally store
6
+ * the backing `statement` and TTL so the value can be re-evaluated on
7
+ * read once stale.
8
+ */
9
+ declare class BindingEntry {
10
+ value: any;
11
+ statement: ASTNode | null;
12
+ isRefreshable: boolean;
13
+ refreshEveryMs: number | null;
14
+ cachedAt: number;
15
+ primed: boolean;
16
+ }
17
+ /**
18
+ * Singleton store for `LET`-bound values.
19
+ *
20
+ * Bindings live alongside virtual node/relationship definitions in
21
+ * {@link Database}: they are persistent across `Runner` invocations
22
+ * for the lifetime of the process.
23
+ *
24
+ * A binding's value may be any JSON-serialisable value: a primitive, an
25
+ * array, or a map. Bindings are referenced by name inside virtual
26
+ * definitions and inside `LOAD JSON FROM <name>` expressions; the
27
+ * `UPDATE` statement replaces an existing binding wholesale, while
28
+ * `MERGE INTO ... USING ...` upserts per row.
29
+ *
30
+ * `LET name = { ... } REFRESH EVERY n unit` registers a refreshable
31
+ * binding: the sub-query is evaluated eagerly and the result is
32
+ * cached, but the TTL causes the next read after expiry to re-execute
33
+ * the sub-query. Refreshable bindings cannot be silently overwritten
34
+ * by another `LET`, `UPDATE`, or `MERGE`; callers must `DROP BINDING`
35
+ * first.
36
+ */
37
+ declare class Bindings {
38
+ private static instance;
39
+ private _entries;
40
+ private _materializing;
41
+ static getInstance(): Bindings;
42
+ /**
43
+ * Eager set, used by plain `LET`, `UPDATE`, and `MERGE INTO`.
44
+ * Throws if the name is currently bound to a refreshable binding;
45
+ * the caller must `DROP BINDING` first.
46
+ */
47
+ set(name: string, value: any): void;
48
+ get(name: string): any;
49
+ has(name: string): boolean;
50
+ delete(name: string): void;
51
+ /** Replace all entries (test/teardown helper). */
52
+ clear(): void;
53
+ /** Inspect the underlying entry without materialising it. */
54
+ getEntry(name: string): BindingEntry | undefined;
55
+ isRefreshable(name: string): boolean;
56
+ /**
57
+ * Register a refreshable binding with an eagerly evaluated value
58
+ * and a backing sub-query that is re-executed when the TTL has
59
+ * elapsed. Throws if a binding with the same name already exists;
60
+ * callers must `DROP BINDING` first.
61
+ */
62
+ registerRefreshable(name: string, value: any, statement: ASTNode, refreshEveryMs: number): void;
63
+ /**
64
+ * Clear the cached value of a refreshable binding so the next
65
+ * {@link materialize} call re-executes the backing sub-query.
66
+ * No-op for plain bindings.
67
+ */
68
+ invalidate(name: string): void;
69
+ /**
70
+ * Re-evaluate a refreshable binding's backing sub-query if the
71
+ * cached value is stale (TTL elapsed or invalidated). No-op for
72
+ * plain bindings or for refreshable bindings that are still fresh.
73
+ */
74
+ materialize(name: string): Promise<void>;
75
+ }
76
+ export default Bindings;
77
+ export { BindingEntry };
78
+ //# sourceMappingURL=bindings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../../src/graph/bindings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,OAAO,MAAM,qBAAqB,CAAC;AAE/C;;;;;;GAMG;AACH,cAAM,YAAY;IACP,KAAK,EAAE,GAAG,CAAa;IACvB,SAAS,EAAE,OAAO,GAAG,IAAI,CAAQ;IACjC,aAAa,EAAE,OAAO,CAAS;IAC/B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAQ;IACrC,QAAQ,EAAE,MAAM,CAAK;IACrB,MAAM,EAAE,OAAO,CAAS;CAClC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,cAAM,QAAQ;IACV,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAW;IAClC,OAAO,CAAC,QAAQ,CAAwC;IACxD,OAAO,CAAC,cAAc,CAA0B;WAElC,WAAW,IAAI,QAAQ;IAOrC;;;;OAIG;IACI,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,IAAI;IAkBnC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;IAKtB,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI1B,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAIjC,kDAAkD;IAC3C,KAAK,IAAI,IAAI;IAIpB,6DAA6D;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIhD,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAI3C;;;;;OAKG;IACI,mBAAmB,CACtB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,OAAO,EAClB,cAAc,EAAE,MAAM,GACvB,IAAI;IAcP;;;;OAIG;IACI,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAUrC;;;;OAIG;IACU,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CA+BxD;AAED,eAAe,QAAQ,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,CAAC"}
@@ -0,0 +1,210 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.BindingEntry = void 0;
46
+ /**
47
+ * One entry in the {@link Bindings} singleton. Plain bindings store
48
+ * their materialised `value` directly; refreshable bindings (created
49
+ * by `LET name = { ... } REFRESH EVERY n unit`) additionally store
50
+ * the backing `statement` and TTL so the value can be re-evaluated on
51
+ * read once stale.
52
+ */
53
+ class BindingEntry {
54
+ constructor() {
55
+ this.value = undefined;
56
+ this.statement = null;
57
+ this.isRefreshable = false;
58
+ this.refreshEveryMs = null;
59
+ this.cachedAt = 0;
60
+ this.primed = false;
61
+ }
62
+ }
63
+ exports.BindingEntry = BindingEntry;
64
+ /**
65
+ * Singleton store for `LET`-bound values.
66
+ *
67
+ * Bindings live alongside virtual node/relationship definitions in
68
+ * {@link Database}: they are persistent across `Runner` invocations
69
+ * for the lifetime of the process.
70
+ *
71
+ * A binding's value may be any JSON-serialisable value: a primitive, an
72
+ * array, or a map. Bindings are referenced by name inside virtual
73
+ * definitions and inside `LOAD JSON FROM <name>` expressions; the
74
+ * `UPDATE` statement replaces an existing binding wholesale, while
75
+ * `MERGE INTO ... USING ...` upserts per row.
76
+ *
77
+ * `LET name = { ... } REFRESH EVERY n unit` registers a refreshable
78
+ * binding: the sub-query is evaluated eagerly and the result is
79
+ * cached, but the TTL causes the next read after expiry to re-execute
80
+ * the sub-query. Refreshable bindings cannot be silently overwritten
81
+ * by another `LET`, `UPDATE`, or `MERGE`; callers must `DROP BINDING`
82
+ * first.
83
+ */
84
+ class Bindings {
85
+ constructor() {
86
+ this._entries = new Map();
87
+ this._materializing = new Set();
88
+ }
89
+ static getInstance() {
90
+ if (!Bindings.instance) {
91
+ Bindings.instance = new Bindings();
92
+ }
93
+ return Bindings.instance;
94
+ }
95
+ /**
96
+ * Eager set, used by plain `LET`, `UPDATE`, and `MERGE INTO`.
97
+ * Throws if the name is currently bound to a refreshable binding;
98
+ * the caller must `DROP BINDING` first.
99
+ */
100
+ set(name, value) {
101
+ const existing = this._entries.get(name);
102
+ if (existing !== undefined && existing.isRefreshable) {
103
+ throw new Error(`Binding '${name}' is refreshable; DROP BINDING ${name} first`);
104
+ }
105
+ let entry = existing;
106
+ if (entry === undefined) {
107
+ entry = new BindingEntry();
108
+ this._entries.set(name, entry);
109
+ }
110
+ entry.value = value;
111
+ entry.statement = null;
112
+ entry.isRefreshable = false;
113
+ entry.refreshEveryMs = null;
114
+ entry.cachedAt = Date.now();
115
+ entry.primed = true;
116
+ }
117
+ get(name) {
118
+ const entry = this._entries.get(name);
119
+ return entry === undefined ? undefined : entry.value;
120
+ }
121
+ has(name) {
122
+ return this._entries.has(name);
123
+ }
124
+ delete(name) {
125
+ this._entries.delete(name);
126
+ }
127
+ /** Replace all entries (test/teardown helper). */
128
+ clear() {
129
+ this._entries.clear();
130
+ }
131
+ /** Inspect the underlying entry without materialising it. */
132
+ getEntry(name) {
133
+ return this._entries.get(name);
134
+ }
135
+ isRefreshable(name) {
136
+ var _a;
137
+ return ((_a = this._entries.get(name)) === null || _a === void 0 ? void 0 : _a.isRefreshable) === true;
138
+ }
139
+ /**
140
+ * Register a refreshable binding with an eagerly evaluated value
141
+ * and a backing sub-query that is re-executed when the TTL has
142
+ * elapsed. Throws if a binding with the same name already exists;
143
+ * callers must `DROP BINDING` first.
144
+ */
145
+ registerRefreshable(name, value, statement, refreshEveryMs) {
146
+ if (this._entries.has(name)) {
147
+ throw new Error(`Binding '${name}' already exists; DROP BINDING ${name} first`);
148
+ }
149
+ const entry = new BindingEntry();
150
+ entry.value = value;
151
+ entry.statement = statement;
152
+ entry.isRefreshable = true;
153
+ entry.refreshEveryMs = refreshEveryMs;
154
+ entry.primed = true;
155
+ entry.cachedAt = Date.now();
156
+ this._entries.set(name, entry);
157
+ }
158
+ /**
159
+ * Clear the cached value of a refreshable binding so the next
160
+ * {@link materialize} call re-executes the backing sub-query.
161
+ * No-op for plain bindings.
162
+ */
163
+ invalidate(name) {
164
+ const entry = this._entries.get(name);
165
+ if (entry === undefined || !entry.isRefreshable) {
166
+ return;
167
+ }
168
+ entry.value = undefined;
169
+ entry.primed = false;
170
+ entry.cachedAt = 0;
171
+ }
172
+ /**
173
+ * Re-evaluate a refreshable binding's backing sub-query if the
174
+ * cached value is stale (TTL elapsed or invalidated). No-op for
175
+ * plain bindings or for refreshable bindings that are still fresh.
176
+ */
177
+ materialize(name) {
178
+ return __awaiter(this, void 0, void 0, function* () {
179
+ const entry = this._entries.get(name);
180
+ if (entry === undefined || !entry.isRefreshable || entry.statement === null) {
181
+ return;
182
+ }
183
+ const isFresh = entry.primed &&
184
+ entry.refreshEveryMs !== null &&
185
+ Date.now() - entry.cachedAt < entry.refreshEveryMs;
186
+ if (isFresh) {
187
+ return;
188
+ }
189
+ if (this._materializing.has(name)) {
190
+ throw new Error(`Cyclic refreshable binding dependency detected while materialising '${name}'`);
191
+ }
192
+ this._materializing.add(name);
193
+ try {
194
+ // Lazy dynamic import to avoid a load-time cycle:
195
+ // bindings -> runner -> parsing -> graph (back to here).
196
+ const RunnerCtor = (yield Promise.resolve().then(() => __importStar(require("../compute/runner")))).default;
197
+ const runner = new RunnerCtor(null, entry.statement, null);
198
+ yield runner.run();
199
+ entry.value = runner.results;
200
+ entry.primed = true;
201
+ entry.cachedAt = Date.now();
202
+ }
203
+ finally {
204
+ this._materializing.delete(name);
205
+ }
206
+ });
207
+ }
208
+ }
209
+ exports.default = Bindings;
210
+ //# sourceMappingURL=bindings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../src/graph/bindings.ts"],"names":[],"mappings":"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"}
@@ -12,13 +12,15 @@ declare class Database {
12
12
  get nodes(): Map<string, PhysicalNode>;
13
13
  /** Read-only access to registered relationships (type → endpoint-key → physical). */
14
14
  get relationships(): Map<string, Map<string, PhysicalRelationship>>;
15
- addNode(node: Node, statement: ASTNode): void;
15
+ addNode(node: Node, statement: ASTNode, isStatic?: boolean, refreshEveryMs?: number | null): void;
16
16
  removeNode(node: Node): void;
17
+ refreshNode(node: Node): void;
17
18
  getNode(node: Node): PhysicalNode | null;
18
19
  /** Endpoint-only key: "Source:Target" */
19
20
  private static endpointKey;
20
- addRelationship(relationship: Relationship, statement: ASTNode): void;
21
+ addRelationship(relationship: Relationship, statement: ASTNode, isStatic?: boolean, refreshEveryMs?: number | null): void;
21
22
  removeRelationship(relationship: Relationship): void;
23
+ refreshRelationship(relationship: Relationship): void;
22
24
  getRelationship(relationship: Relationship): PhysicalRelationship | null;
23
25
  }
24
26
  export default Database;
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/graph/database.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,qBAAqB,CAAC;AAC1C,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAC3C,OAAO,oBAAoB,MAAM,yBAAyB,CAAC;AAC3D,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAE1C,cAAM,QAAQ;IACV,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAW;IAClC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAwC;IAC7D,OAAO,CAAC,MAAM,CAAC,cAAc,CAA6D;WAE5E,WAAW,IAAI,QAAQ;IAMrC,4CAA4C;IAC5C,IAAW,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAE5C;IACD,qFAAqF;IACrF,IAAW,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAEzE;IACM,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IAQ7C,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAM5B,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,YAAY,GAAG,IAAI;IAG/C,yCAAyC;IACzC,OAAO,CAAC,MAAM,CAAC,WAAW;IAGnB,eAAe,CAAC,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IAmBrE,kBAAkB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAepD,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,oBAAoB,GAAG,IAAI;CAclF;AAED,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../../src/graph/database.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,qBAAqB,CAAC;AAC1C,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,YAAY,MAAM,iBAAiB,CAAC;AAC3C,OAAO,oBAAoB,MAAM,yBAAyB,CAAC;AAC3D,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAE1C,cAAM,QAAQ;IACV,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAW;IAClC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAwC;IAC7D,OAAO,CAAC,MAAM,CAAC,cAAc,CAA6D;WAE5E,WAAW,IAAI,QAAQ;IAMrC,4CAA4C;IAC5C,IAAW,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAE5C;IACD,qFAAqF;IACrF,IAAW,aAAa,IAAI,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAEzE;IACM,OAAO,CACV,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,OAAO,EAClB,QAAQ,GAAE,OAAe,EACzB,cAAc,GAAE,MAAM,GAAG,IAAW,GACrC,IAAI;IAgBA,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAM5B,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAU7B,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,YAAY,GAAG,IAAI;IAG/C,yCAAyC;IACzC,OAAO,CAAC,MAAM,CAAC,WAAW;IAGnB,eAAe,CAClB,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,OAAO,EAClB,QAAQ,GAAE,OAAe,EACzB,cAAc,GAAE,MAAM,GAAG,IAAW,GACrC,IAAI;IA4BA,kBAAkB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAepD,mBAAmB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAiBrD,eAAe,CAAC,YAAY,EAAE,YAAY,GAAG,oBAAoB,GAAG,IAAI;CAclF;AAED,eAAe,QAAQ,CAAC"}
@@ -20,12 +20,18 @@ class Database {
20
20
  get relationships() {
21
21
  return Database._relationships;
22
22
  }
23
- addNode(node, statement) {
23
+ addNode(node, statement, isStatic = false, refreshEveryMs = null) {
24
24
  if (node.label === null) {
25
25
  throw new Error("Node label is null");
26
26
  }
27
+ const existing = Database._nodes.get(node.label);
28
+ if (existing !== undefined && (existing.isStatic || isStatic)) {
29
+ throw new Error(`Virtual node (:${node.label}) already exists; DROP VIRTUAL (:${node.label}) first`);
30
+ }
27
31
  const physical = new physical_node_1.default(null, node.label);
28
32
  physical.statement = statement;
33
+ physical.isStatic = isStatic;
34
+ physical.refreshEveryMs = refreshEveryMs;
29
35
  Database._nodes.set(node.label, physical);
30
36
  }
31
37
  removeNode(node) {
@@ -34,6 +40,16 @@ class Database {
34
40
  }
35
41
  Database._nodes.delete(node.label);
36
42
  }
43
+ refreshNode(node) {
44
+ if (node.label === null) {
45
+ throw new Error("Node label is null");
46
+ }
47
+ const physical = Database._nodes.get(node.label);
48
+ if (physical === undefined) {
49
+ throw new Error(`Virtual node (:${node.label}) does not exist`);
50
+ }
51
+ physical.invalidateCache();
52
+ }
37
53
  getNode(node) {
38
54
  return Database._nodes.get(node.label) || null;
39
55
  }
@@ -41,22 +57,29 @@ class Database {
41
57
  static endpointKey(sourceLabel, targetLabel) {
42
58
  return `${sourceLabel !== null && sourceLabel !== void 0 ? sourceLabel : ""}:${targetLabel !== null && targetLabel !== void 0 ? targetLabel : ""}`;
43
59
  }
44
- addRelationship(relationship, statement) {
45
- var _a, _b, _c, _d;
60
+ addRelationship(relationship, statement, isStatic = false, refreshEveryMs = null) {
61
+ var _a, _b, _c, _d, _e, _f, _g, _h;
46
62
  if (relationship.type === null) {
47
63
  throw new Error("Relationship type is null");
48
64
  }
65
+ const key = Database.endpointKey((_b = (_a = relationship.source) === null || _a === void 0 ? void 0 : _a.label) !== null && _b !== void 0 ? _b : null, (_d = (_c = relationship.target) === null || _c === void 0 ? void 0 : _c.label) !== null && _d !== void 0 ? _d : null);
66
+ const typeMap = Database._relationships.get(relationship.type);
67
+ const existing = typeMap === null || typeMap === void 0 ? void 0 : typeMap.get(key);
68
+ if (existing !== undefined && (existing.isStatic || isStatic)) {
69
+ throw new Error(`Virtual relationship [:${relationship.type}] between (:${(_f = (_e = relationship.source) === null || _e === void 0 ? void 0 : _e.label) !== null && _f !== void 0 ? _f : ""}) and (:${(_h = (_g = relationship.target) === null || _g === void 0 ? void 0 : _g.label) !== null && _h !== void 0 ? _h : ""}) already exists; DROP VIRTUAL ...-[:${relationship.type}]-... first`);
70
+ }
49
71
  const physical = new physical_relationship_1.default(null, relationship.type);
50
72
  physical.statement = statement;
51
73
  physical.source = relationship.source;
52
74
  physical.target = relationship.target;
53
- const key = Database.endpointKey((_b = (_a = relationship.source) === null || _a === void 0 ? void 0 : _a.label) !== null && _b !== void 0 ? _b : null, (_d = (_c = relationship.target) === null || _c === void 0 ? void 0 : _c.label) !== null && _d !== void 0 ? _d : null);
54
- let typeMap = Database._relationships.get(relationship.type);
55
- if (!typeMap) {
56
- typeMap = new Map();
57
- Database._relationships.set(relationship.type, typeMap);
75
+ physical.isStatic = isStatic;
76
+ physical.refreshEveryMs = refreshEveryMs;
77
+ let map = typeMap;
78
+ if (!map) {
79
+ map = new Map();
80
+ Database._relationships.set(relationship.type, map);
58
81
  }
59
- typeMap.set(key, physical);
82
+ map.set(key, physical);
60
83
  }
61
84
  removeRelationship(relationship) {
62
85
  var _a, _b, _c, _d;
@@ -72,6 +95,19 @@ class Database {
72
95
  Database._relationships.delete(relationship.type);
73
96
  }
74
97
  }
98
+ refreshRelationship(relationship) {
99
+ var _a, _b, _c, _d, _e, _f, _g, _h;
100
+ if (relationship.type === null) {
101
+ throw new Error("Relationship type is null");
102
+ }
103
+ const typeMap = Database._relationships.get(relationship.type);
104
+ const key = Database.endpointKey((_b = (_a = relationship.source) === null || _a === void 0 ? void 0 : _a.label) !== null && _b !== void 0 ? _b : null, (_d = (_c = relationship.target) === null || _c === void 0 ? void 0 : _c.label) !== null && _d !== void 0 ? _d : null);
105
+ const physical = typeMap === null || typeMap === void 0 ? void 0 : typeMap.get(key);
106
+ if (physical === undefined) {
107
+ throw new Error(`Virtual relationship [:${relationship.type}] between (:${(_f = (_e = relationship.source) === null || _e === void 0 ? void 0 : _e.label) !== null && _f !== void 0 ? _f : ""}) and (:${(_h = (_g = relationship.target) === null || _g === void 0 ? void 0 : _g.label) !== null && _h !== void 0 ? _h : ""}) does not exist`);
108
+ }
109
+ physical.invalidateCache();
110
+ }
75
111
  getRelationship(relationship) {
76
112
  var _a, _b, _c, _d, _e;
77
113
  const typeMap = Database._relationships.get(relationship.type);
@@ -1 +1 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/graph/database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../../src/graph/database.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,17 @@ import ASTNode from "../parsing/ast_node";
2
2
  import Node from "./node";
3
3
  declare class PhysicalNode extends Node {
4
4
  private _statement;
5
+ private _isStatic;
6
+ private _refreshEveryMs;
7
+ private _cache;
8
+ private _cachedAt;
5
9
  set statement(statement: ASTNode | null);
6
10
  get statement(): ASTNode | null;
11
+ get isStatic(): boolean;
12
+ set isStatic(value: boolean);
13
+ get refreshEveryMs(): number | null;
14
+ set refreshEveryMs(value: number | null);
15
+ invalidateCache(): void;
7
16
  data(args?: Record<string, any> | null): Promise<Record<string, any>[]>;
8
17
  }
9
18
  export default PhysicalNode;
@@ -1 +1 @@
1
- {"version":3,"file":"physical_node.d.ts","sourceRoot":"","sources":["../../src/graph/physical_node.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,qBAAqB,CAAC;AAC1C,OAAO,IAAI,MAAM,QAAQ,CAAC;AAE1B,cAAM,YAAa,SAAQ,IAAI;IAC3B,OAAO,CAAC,UAAU,CAAwB;IAC1C,IAAW,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,EAE7C;IACD,IAAW,SAAS,IAAI,OAAO,GAAG,IAAI,CAErC;IACY,IAAI,CAAC,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;CAY7F;AAED,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"physical_node.d.ts","sourceRoot":"","sources":["../../src/graph/physical_node.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,qBAAqB,CAAC;AAC1C,OAAO,IAAI,MAAM,QAAQ,CAAC;AAE1B,cAAM,YAAa,SAAQ,IAAI;IAC3B,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,MAAM,CAAsC;IACpD,OAAO,CAAC,SAAS,CAAa;IAE9B,IAAW,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,EAG7C;IACD,IAAW,SAAS,IAAI,OAAO,GAAG,IAAI,CAErC;IACD,IAAW,QAAQ,IAAI,OAAO,CAE7B;IACD,IAAW,QAAQ,CAAC,KAAK,EAAE,OAAO,EAEjC;IACD,IAAW,cAAc,IAAI,MAAM,GAAG,IAAI,CAEzC;IACD,IAAW,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAE7C;IACM,eAAe,IAAI,IAAI;IAIjB,IAAI,CAAC,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;CA0B7F;AAED,eAAe,YAAY,CAAC"}
@@ -1,4 +1,37 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
36
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
37
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -17,25 +50,59 @@ class PhysicalNode extends node_1.default {
17
50
  constructor() {
18
51
  super(...arguments);
19
52
  this._statement = null;
53
+ this._isStatic = false;
54
+ this._refreshEveryMs = null;
55
+ this._cache = null;
56
+ this._cachedAt = 0;
20
57
  }
21
58
  set statement(statement) {
22
59
  this._statement = statement;
60
+ this.invalidateCache();
23
61
  }
24
62
  get statement() {
25
63
  return this._statement;
26
64
  }
65
+ get isStatic() {
66
+ return this._isStatic;
67
+ }
68
+ set isStatic(value) {
69
+ this._isStatic = value;
70
+ }
71
+ get refreshEveryMs() {
72
+ return this._refreshEveryMs;
73
+ }
74
+ set refreshEveryMs(value) {
75
+ this._refreshEveryMs = value;
76
+ }
77
+ invalidateCache() {
78
+ this._cache = null;
79
+ this._cachedAt = 0;
80
+ }
27
81
  data() {
28
82
  return __awaiter(this, arguments, void 0, function* (args = null) {
29
83
  if (this._statement === null) {
30
84
  throw new Error("Statement is null");
31
85
  }
32
- // Lazy require to avoid a load-time cycle:
86
+ // Filter pass-down queries (with args) bypass the persistent cache
87
+ // because results depend on runtime parameter values.
88
+ if (args === null && this._isStatic && this._cache !== null) {
89
+ const isFresh = this._refreshEveryMs === null || Date.now() - this._cachedAt < this._refreshEveryMs;
90
+ if (isFresh) {
91
+ return this._cache;
92
+ }
93
+ }
94
+ // Lazy dynamic import to avoid a load-time cycle:
33
95
  // physical_node -> runner -> parsing -> graph (back to here).
34
96
  // Python uses the same idiom (function-local import).
35
- const RunnerCtor = require("../compute/runner").default;
97
+ const RunnerCtor = (yield Promise.resolve().then(() => __importStar(require("../compute/runner")))).default;
36
98
  const runner = new RunnerCtor(null, this._statement, args);
37
99
  yield runner.run();
38
- return runner.results;
100
+ const result = runner.results;
101
+ if (args === null && this._isStatic) {
102
+ this._cache = result;
103
+ this._cachedAt = Date.now();
104
+ }
105
+ return result;
39
106
  });
40
107
  }
41
108
  }
@@ -1 +1 @@
1
- {"version":3,"file":"physical_node.js","sourceRoot":"","sources":["../../src/graph/physical_node.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAEA,kDAA0B;AAE1B,MAAM,YAAa,SAAQ,cAAI;IAA/B;;QACY,eAAU,GAAmB,IAAI,CAAC;IAmB9C,CAAC;IAlBG,IAAW,SAAS,CAAC,SAAyB;QAC1C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;IAChC,CAAC;IACD,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IACY,IAAI;6DAAC,OAAmC,IAAI;YACrD,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACzC,CAAC;YACD,2CAA2C;YAC3C,8DAA8D;YAC9D,sDAAsD;YACtD,MAAM,UAAU,GAAkB,OAAO,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC;YACvE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC3D,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;YACnB,OAAO,MAAM,CAAC,OAAO,CAAC;QAC1B,CAAC;KAAA;CACJ;AAED,kBAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"physical_node.js","sourceRoot":"","sources":["../../src/graph/physical_node.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,kDAA0B;AAE1B,MAAM,YAAa,SAAQ,cAAI;IAA/B;;QACY,eAAU,GAAmB,IAAI,CAAC;QAClC,cAAS,GAAY,KAAK,CAAC;QAC3B,oBAAe,GAAkB,IAAI,CAAC;QACtC,WAAM,GAAiC,IAAI,CAAC;QAC5C,cAAS,GAAW,CAAC,CAAC;IAmDlC,CAAC;IAjDG,IAAW,SAAS,CAAC,SAAyB;QAC1C,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,eAAe,EAAE,CAAC;IAC3B,CAAC;IACD,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,UAAU,CAAC;IAC3B,CAAC;IACD,IAAW,QAAQ;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IAC1B,CAAC;IACD,IAAW,QAAQ,CAAC,KAAc;QAC9B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IAC3B,CAAC;IACD,IAAW,cAAc;QACrB,OAAO,IAAI,CAAC,eAAe,CAAC;IAChC,CAAC;IACD,IAAW,cAAc,CAAC,KAAoB;QAC1C,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC;IACjC,CAAC;IACM,eAAe;QAClB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,SAAS,GAAG,CAAC,CAAC;IACvB,CAAC;IACY,IAAI;6DAAC,OAAmC,IAAI;YACrD,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACzC,CAAC;YACD,mEAAmE;YACnE,sDAAsD;YACtD,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;gBAC1D,MAAM,OAAO,GACT,IAAI,CAAC,eAAe,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC;gBACxF,IAAI,OAAO,EAAE,CAAC;oBACV,OAAO,IAAI,CAAC,MAAM,CAAC;gBACvB,CAAC;YACL,CAAC;YACD,kDAAkD;YAClD,8DAA8D;YAC9D,sDAAsD;YACtD,MAAM,UAAU,GAAkB,CAAC,wDAAa,mBAAmB,GAAC,CAAC,CAAC,OAAO,CAAC;YAC9E,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC3D,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC;YACnB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;YAC9B,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAClC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;gBACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAChC,CAAC;YACD,OAAO,MAAM,CAAC;QAClB,CAAC;KAAA;CACJ;AAED,kBAAe,YAAY,CAAC"}
@@ -2,8 +2,17 @@ import ASTNode from "../parsing/ast_node";
2
2
  import Relationship from "./relationship";
3
3
  declare class PhysicalRelationship extends Relationship {
4
4
  private _statement;
5
+ private _isStatic;
6
+ private _refreshEveryMs;
7
+ private _cache;
8
+ private _cachedAt;
5
9
  set statement(statement: ASTNode | null);
6
10
  get statement(): ASTNode | null;
11
+ get isStatic(): boolean;
12
+ set isStatic(value: boolean);
13
+ get refreshEveryMs(): number | null;
14
+ set refreshEveryMs(value: number | null);
15
+ invalidateCache(): void;
7
16
  data(args?: Record<string, any> | null): Promise<Record<string, any>[]>;
8
17
  }
9
18
  export default PhysicalRelationship;
@@ -1 +1 @@
1
- {"version":3,"file":"physical_relationship.d.ts","sourceRoot":"","sources":["../../src/graph/physical_relationship.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,qBAAqB,CAAC;AAC1C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAE1C,cAAM,oBAAqB,SAAQ,YAAY;IAC3C,OAAO,CAAC,UAAU,CAAwB;IAC1C,IAAW,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,EAE7C;IACD,IAAW,SAAS,IAAI,OAAO,GAAG,IAAI,CAErC;IACY,IAAI,CAAC,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;CAY7F;AAED,eAAe,oBAAoB,CAAC"}
1
+ {"version":3,"file":"physical_relationship.d.ts","sourceRoot":"","sources":["../../src/graph/physical_relationship.ts"],"names":[],"mappings":"AACA,OAAO,OAAO,MAAM,qBAAqB,CAAC;AAC1C,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAE1C,cAAM,oBAAqB,SAAQ,YAAY;IAC3C,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,MAAM,CAAsC;IACpD,OAAO,CAAC,SAAS,CAAa;IAE9B,IAAW,SAAS,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,EAG7C;IACD,IAAW,SAAS,IAAI,OAAO,GAAG,IAAI,CAErC;IACD,IAAW,QAAQ,IAAI,OAAO,CAE7B;IACD,IAAW,QAAQ,CAAC,KAAK,EAAE,OAAO,EAEjC;IACD,IAAW,cAAc,IAAI,MAAM,GAAG,IAAI,CAEzC;IACD,IAAW,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,EAE7C;IACM,eAAe,IAAI,IAAI;IAIjB,IAAI,CAAC,IAAI,GAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAW,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC;CA0B7F;AAED,eAAe,oBAAoB,CAAC"}