ai-database 2.0.2 → 2.1.3

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 (114) hide show
  1. package/CHANGELOG.md +48 -0
  2. package/LICENSE +21 -0
  3. package/README.md +667 -1
  4. package/dist/actions.d.ts +247 -0
  5. package/dist/actions.d.ts.map +1 -0
  6. package/dist/actions.js +260 -0
  7. package/dist/actions.js.map +1 -0
  8. package/dist/ai-promise-db.d.ts +37 -2
  9. package/dist/ai-promise-db.d.ts.map +1 -1
  10. package/dist/ai-promise-db.js +530 -92
  11. package/dist/ai-promise-db.js.map +1 -1
  12. package/dist/constants.d.ts +16 -0
  13. package/dist/constants.d.ts.map +1 -0
  14. package/dist/constants.js +16 -0
  15. package/dist/constants.js.map +1 -0
  16. package/dist/events.d.ts +153 -0
  17. package/dist/events.d.ts.map +1 -0
  18. package/dist/events.js +154 -0
  19. package/dist/events.js.map +1 -0
  20. package/dist/index.d.ts +11 -2
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +20 -2
  23. package/dist/index.js.map +1 -1
  24. package/dist/memory-provider.d.ts +145 -2
  25. package/dist/memory-provider.d.ts.map +1 -1
  26. package/dist/memory-provider.js +569 -13
  27. package/dist/memory-provider.js.map +1 -1
  28. package/dist/schema/cascade.d.ts +104 -0
  29. package/dist/schema/cascade.d.ts.map +1 -0
  30. package/dist/schema/cascade.js +547 -0
  31. package/dist/schema/cascade.js.map +1 -0
  32. package/dist/schema/dependency-graph.d.ts +133 -0
  33. package/dist/schema/dependency-graph.d.ts.map +1 -0
  34. package/dist/schema/dependency-graph.js +355 -0
  35. package/dist/schema/dependency-graph.js.map +1 -0
  36. package/dist/schema/generation-context.d.ts +202 -0
  37. package/dist/schema/generation-context.d.ts.map +1 -0
  38. package/dist/schema/generation-context.js +393 -0
  39. package/dist/schema/generation-context.js.map +1 -0
  40. package/dist/schema/index.d.ts +201 -0
  41. package/dist/schema/index.d.ts.map +1 -0
  42. package/dist/schema/index.js +1221 -0
  43. package/dist/schema/index.js.map +1 -0
  44. package/dist/schema/parse.d.ts +225 -0
  45. package/dist/schema/parse.d.ts.map +1 -0
  46. package/dist/schema/parse.js +740 -0
  47. package/dist/schema/parse.js.map +1 -0
  48. package/dist/schema/provider.d.ts +177 -0
  49. package/dist/schema/provider.d.ts.map +1 -0
  50. package/dist/schema/provider.js +258 -0
  51. package/dist/schema/provider.js.map +1 -0
  52. package/dist/schema/resolve.d.ts +87 -0
  53. package/dist/schema/resolve.d.ts.map +1 -0
  54. package/dist/schema/resolve.js +549 -0
  55. package/dist/schema/resolve.js.map +1 -0
  56. package/dist/schema/semantic.d.ts +54 -0
  57. package/dist/schema/semantic.d.ts.map +1 -0
  58. package/dist/schema/semantic.js +335 -0
  59. package/dist/schema/semantic.js.map +1 -0
  60. package/dist/schema/types.d.ts +528 -0
  61. package/dist/schema/types.d.ts.map +1 -0
  62. package/dist/schema/types.js +9 -0
  63. package/dist/schema/types.js.map +1 -0
  64. package/dist/schema/union-fallback.d.ts +219 -0
  65. package/dist/schema/union-fallback.d.ts.map +1 -0
  66. package/dist/schema/union-fallback.js +325 -0
  67. package/dist/schema/union-fallback.js.map +1 -0
  68. package/dist/schema/verb-derivation.d.ts +167 -0
  69. package/dist/schema/verb-derivation.d.ts.map +1 -0
  70. package/dist/schema/verb-derivation.js +281 -0
  71. package/dist/schema/verb-derivation.js.map +1 -0
  72. package/dist/schema.d.ts +25 -867
  73. package/dist/schema.d.ts.map +1 -1
  74. package/dist/schema.js +45 -1124
  75. package/dist/schema.js.map +1 -1
  76. package/dist/semantic.d.ts +175 -0
  77. package/dist/semantic.d.ts.map +1 -0
  78. package/dist/semantic.js +338 -0
  79. package/dist/semantic.js.map +1 -0
  80. package/dist/type-guards.d.ts +167 -0
  81. package/dist/type-guards.d.ts.map +1 -0
  82. package/dist/type-guards.js +247 -0
  83. package/dist/type-guards.js.map +1 -0
  84. package/dist/types.d.ts +14 -0
  85. package/dist/types.d.ts.map +1 -1
  86. package/dist/types.js.map +1 -1
  87. package/dist/validation.d.ts +168 -0
  88. package/dist/validation.d.ts.map +1 -0
  89. package/dist/validation.js +667 -0
  90. package/dist/validation.js.map +1 -0
  91. package/package.json +21 -12
  92. package/.turbo/turbo-build.log +0 -5
  93. package/TESTING.md +0 -410
  94. package/TEST_SUMMARY.md +0 -250
  95. package/TODO.md +0 -128
  96. package/src/ai-promise-db.ts +0 -1243
  97. package/src/authorization.ts +0 -1102
  98. package/src/durable-clickhouse.ts +0 -596
  99. package/src/durable-promise.ts +0 -582
  100. package/src/execution-queue.ts +0 -608
  101. package/src/index.test.ts +0 -868
  102. package/src/index.ts +0 -337
  103. package/src/linguistic.ts +0 -404
  104. package/src/memory-provider.test.ts +0 -1036
  105. package/src/memory-provider.ts +0 -1119
  106. package/src/schema.test.ts +0 -1254
  107. package/src/schema.ts +0 -2296
  108. package/src/tests.ts +0 -725
  109. package/src/types.ts +0 -1177
  110. package/test/README.md +0 -153
  111. package/test/edge-cases.test.ts +0 -646
  112. package/test/provider-resolution.test.ts +0 -402
  113. package/tsconfig.json +0 -9
  114. package/vitest.config.ts +0 -19
@@ -0,0 +1,202 @@
1
+ /**
2
+ * GenerationContext - Manages state and context during cascade generation
3
+ *
4
+ * Provides context accumulation across cascading generations:
5
+ * - Parent stack tracking for nested entity context
6
+ * - Generated entities accumulation across a session
7
+ * - generatedByType index for efficient type-based lookup
8
+ * - Token counting for monitoring context size
9
+ * - Auto-compaction when exceeding token limits
10
+ * - Array generation context (previousInArray)
11
+ * - Relationship tracking between generated entities
12
+ * - Snapshot/branching for speculative generation
13
+ *
14
+ * @packageDocumentation
15
+ */
16
+ /**
17
+ * Entity type representing a generated entity
18
+ */
19
+ export interface Entity {
20
+ /** Unique identifier */
21
+ $id: string;
22
+ /** Entity type */
23
+ $type: string;
24
+ /** Additional data fields */
25
+ [key: string]: unknown;
26
+ }
27
+ /**
28
+ * Options for creating a GenerationContext
29
+ */
30
+ export interface GenerationContextOptions {
31
+ /** Maximum tokens allowed in context (default: Infinity) */
32
+ maxContextTokens?: number;
33
+ /** Auto-compact when exceeding limit (default: false) */
34
+ autoCompact?: boolean;
35
+ }
36
+ /**
37
+ * Snapshot of context state for restore/branching
38
+ */
39
+ export interface ContextSnapshot {
40
+ /** Number of generated entities at snapshot time */
41
+ generatedCount: number;
42
+ /** Depth of parent stack at snapshot time */
43
+ parentDepth: number;
44
+ /** When the snapshot was created */
45
+ timestamp: Date;
46
+ }
47
+ /**
48
+ * Context for a specific field (used in array generation)
49
+ */
50
+ export interface FieldContext {
51
+ /** Previously generated items in this array field */
52
+ previousInArray: Entity[];
53
+ }
54
+ /**
55
+ * Options for building context string
56
+ */
57
+ export interface BuildContextOptions {
58
+ /** Maximum tokens for the context string */
59
+ maxTokens?: number;
60
+ /** Types to prioritize in context */
61
+ relevantTypes?: string[];
62
+ }
63
+ /**
64
+ * Error thrown when context exceeds token limit without auto-compact
65
+ */
66
+ export declare class ContextOverflowError extends Error {
67
+ constructor(message: string);
68
+ }
69
+ /**
70
+ * Context for managing state during entity generation
71
+ */
72
+ export declare class GenerationContext {
73
+ private generated;
74
+ private generatedByType;
75
+ private parentStack;
76
+ private relationships;
77
+ private generationOrder;
78
+ private maxContextTokens;
79
+ private autoCompact;
80
+ private arrayContexts;
81
+ constructor(options?: GenerationContextOptions);
82
+ /**
83
+ * Push a parent entity onto the stack
84
+ */
85
+ pushParent(entity: Entity): void;
86
+ /**
87
+ * Pop the top parent from the stack
88
+ */
89
+ popParent(): Entity | undefined;
90
+ /**
91
+ * Get parent at specific depth (0 = immediate parent)
92
+ */
93
+ getParent(depth?: number): Entity | undefined;
94
+ /**
95
+ * Get the entire parent chain (nearest first)
96
+ */
97
+ getParentChain(): Entity[];
98
+ /**
99
+ * Get the entire parent stack (oldest first)
100
+ */
101
+ getParentStack(): Entity[];
102
+ /**
103
+ * Add a generated entity to the context
104
+ */
105
+ addGenerated(entity: Entity): void;
106
+ /**
107
+ * Get entity by ID
108
+ */
109
+ getById(id: string): Entity | undefined;
110
+ /**
111
+ * Get all entities of a specific type
112
+ */
113
+ getByType(type: string): Entity[];
114
+ /**
115
+ * Get all generated entities
116
+ */
117
+ getAllGenerated(): Entity[];
118
+ /**
119
+ * Get entities in generation order
120
+ */
121
+ getGenerationOrder(): Entity[];
122
+ /**
123
+ * Start tracking an array field generation
124
+ */
125
+ startArrayGeneration(fieldName: string): void;
126
+ /**
127
+ * Add an item to an array generation context
128
+ */
129
+ addArrayItem(fieldName: string, entity: Entity): void;
130
+ /**
131
+ * Get previously generated items in an array field
132
+ */
133
+ getPreviousInArray(fieldName: string): Entity[];
134
+ /**
135
+ * Get context for a specific field (includes previousInArray)
136
+ */
137
+ getContextForField(fieldName: string): FieldContext;
138
+ /**
139
+ * End tracking an array field generation
140
+ */
141
+ endArrayGeneration(fieldName: string): void;
142
+ /**
143
+ * Add a relationship between entities
144
+ */
145
+ addRelationship(fromId: string, toId: string, verb: string): void;
146
+ /**
147
+ * Get relationships for an entity
148
+ */
149
+ getRelationships(entityId: string): Array<{
150
+ to: string;
151
+ verb: string;
152
+ }>;
153
+ /**
154
+ * Estimate total tokens in context
155
+ */
156
+ estimateTokens(): number;
157
+ /**
158
+ * Estimate tokens for a single entity
159
+ */
160
+ estimateEntityTokens(entity: Entity): number;
161
+ /**
162
+ * Get remaining token budget
163
+ */
164
+ getRemainingTokenBudget(): number;
165
+ /**
166
+ * Compact oldest entries to free up space
167
+ */
168
+ private compactOldest;
169
+ /**
170
+ * Build context string for AI generation
171
+ */
172
+ buildContextString(options?: BuildContextOptions): string;
173
+ /**
174
+ * Create a snapshot of current state
175
+ */
176
+ createSnapshot(): ContextSnapshot;
177
+ /**
178
+ * Restore from a snapshot (clears additions after snapshot)
179
+ */
180
+ restoreSnapshot(snapshot: ContextSnapshot): void;
181
+ /**
182
+ * Create a branch (copy) of this context
183
+ */
184
+ branch(): GenerationContext;
185
+ /**
186
+ * Merge a branch back into this context
187
+ */
188
+ merge(branch: GenerationContext): void;
189
+ /**
190
+ * Serialize context to JSON
191
+ */
192
+ toJSON(): string;
193
+ /**
194
+ * Deserialize context from JSON
195
+ */
196
+ static fromJSON(json: string, options?: GenerationContextOptions): GenerationContext;
197
+ }
198
+ /**
199
+ * Create a new GenerationContext with the given options
200
+ */
201
+ export declare function createGenerationContext(options?: GenerationContextOptions): GenerationContext;
202
+ //# sourceMappingURL=generation-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generation-context.d.ts","sourceRoot":"","sources":["../../src/schema/generation-context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,393 @@
1
+ /**
2
+ * GenerationContext - Manages state and context during cascade generation
3
+ *
4
+ * Provides context accumulation across cascading generations:
5
+ * - Parent stack tracking for nested entity context
6
+ * - Generated entities accumulation across a session
7
+ * - generatedByType index for efficient type-based lookup
8
+ * - Token counting for monitoring context size
9
+ * - Auto-compaction when exceeding token limits
10
+ * - Array generation context (previousInArray)
11
+ * - Relationship tracking between generated entities
12
+ * - Snapshot/branching for speculative generation
13
+ *
14
+ * @packageDocumentation
15
+ */
16
+ // =============================================================================
17
+ // Errors
18
+ // =============================================================================
19
+ /**
20
+ * Error thrown when context exceeds token limit without auto-compact
21
+ */
22
+ export class ContextOverflowError extends Error {
23
+ constructor(message) {
24
+ super(message);
25
+ this.name = 'ContextOverflowError';
26
+ }
27
+ }
28
+ // =============================================================================
29
+ // Constants
30
+ // =============================================================================
31
+ const CHARS_PER_TOKEN = 4;
32
+ // =============================================================================
33
+ // GenerationContext Class
34
+ // =============================================================================
35
+ /**
36
+ * Context for managing state during entity generation
37
+ */
38
+ export class GenerationContext {
39
+ generated = new Map();
40
+ generatedByType = new Map();
41
+ parentStack = [];
42
+ relationships = [];
43
+ generationOrder = [];
44
+ maxContextTokens;
45
+ autoCompact;
46
+ // Array generation tracking
47
+ arrayContexts = new Map();
48
+ constructor(options = {}) {
49
+ this.maxContextTokens = options.maxContextTokens ?? Infinity;
50
+ this.autoCompact = options.autoCompact ?? false;
51
+ }
52
+ // ============================================================================
53
+ // PARENT MANAGEMENT
54
+ // ============================================================================
55
+ /**
56
+ * Push a parent entity onto the stack
57
+ */
58
+ pushParent(entity) {
59
+ this.parentStack.push(entity);
60
+ }
61
+ /**
62
+ * Pop the top parent from the stack
63
+ */
64
+ popParent() {
65
+ return this.parentStack.pop();
66
+ }
67
+ /**
68
+ * Get parent at specific depth (0 = immediate parent)
69
+ */
70
+ getParent(depth = 0) {
71
+ const index = this.parentStack.length - 1 - depth;
72
+ return index >= 0 ? this.parentStack[index] : undefined;
73
+ }
74
+ /**
75
+ * Get the entire parent chain (nearest first)
76
+ */
77
+ getParentChain() {
78
+ return [...this.parentStack].reverse();
79
+ }
80
+ /**
81
+ * Get the entire parent stack (oldest first)
82
+ */
83
+ getParentStack() {
84
+ return [...this.parentStack];
85
+ }
86
+ // ============================================================================
87
+ // GENERATED ENTITY MANAGEMENT
88
+ // ============================================================================
89
+ /**
90
+ * Add a generated entity to the context
91
+ */
92
+ addGenerated(entity) {
93
+ // Check token limit before adding
94
+ if (this.maxContextTokens !== Infinity) {
95
+ const currentTokens = this.estimateTokens();
96
+ const entityTokens = this.estimateEntityTokens(entity);
97
+ if (currentTokens + entityTokens > this.maxContextTokens) {
98
+ if (this.autoCompact) {
99
+ this.compactOldest();
100
+ }
101
+ else {
102
+ throw new ContextOverflowError(`Adding entity would exceed token limit (${currentTokens + entityTokens} > ${this.maxContextTokens})`);
103
+ }
104
+ }
105
+ }
106
+ this.generated.set(entity.$id, entity);
107
+ this.generationOrder.push(entity);
108
+ const byType = this.generatedByType.get(entity.$type) ?? [];
109
+ byType.push(entity);
110
+ this.generatedByType.set(entity.$type, byType);
111
+ }
112
+ /**
113
+ * Get entity by ID
114
+ */
115
+ getById(id) {
116
+ return this.generated.get(id);
117
+ }
118
+ /**
119
+ * Get all entities of a specific type
120
+ */
121
+ getByType(type) {
122
+ return this.generatedByType.get(type) ?? [];
123
+ }
124
+ /**
125
+ * Get all generated entities
126
+ */
127
+ getAllGenerated() {
128
+ return Array.from(this.generated.values());
129
+ }
130
+ /**
131
+ * Get entities in generation order
132
+ */
133
+ getGenerationOrder() {
134
+ return [...this.generationOrder];
135
+ }
136
+ // ============================================================================
137
+ // ARRAY GENERATION CONTEXT
138
+ // ============================================================================
139
+ /**
140
+ * Start tracking an array field generation
141
+ */
142
+ startArrayGeneration(fieldName) {
143
+ this.arrayContexts.set(fieldName, []);
144
+ }
145
+ /**
146
+ * Add an item to an array generation context
147
+ */
148
+ addArrayItem(fieldName, entity) {
149
+ const items = this.arrayContexts.get(fieldName) ?? [];
150
+ items.push(entity);
151
+ this.arrayContexts.set(fieldName, items);
152
+ }
153
+ /**
154
+ * Get previously generated items in an array field
155
+ */
156
+ getPreviousInArray(fieldName) {
157
+ return this.arrayContexts.get(fieldName) ?? [];
158
+ }
159
+ /**
160
+ * Get context for a specific field (includes previousInArray)
161
+ */
162
+ getContextForField(fieldName) {
163
+ return {
164
+ previousInArray: this.getPreviousInArray(fieldName),
165
+ };
166
+ }
167
+ /**
168
+ * End tracking an array field generation
169
+ */
170
+ endArrayGeneration(fieldName) {
171
+ this.arrayContexts.delete(fieldName);
172
+ }
173
+ // ============================================================================
174
+ // RELATIONSHIP MANAGEMENT
175
+ // ============================================================================
176
+ /**
177
+ * Add a relationship between entities
178
+ */
179
+ addRelationship(fromId, toId, verb) {
180
+ this.relationships.push({ from: fromId, to: toId, verb });
181
+ }
182
+ /**
183
+ * Get relationships for an entity
184
+ */
185
+ getRelationships(entityId) {
186
+ return this.relationships
187
+ .filter((r) => r.from === entityId)
188
+ .map((r) => ({ to: r.to, verb: r.verb }));
189
+ }
190
+ // ============================================================================
191
+ // TOKEN MANAGEMENT
192
+ // ============================================================================
193
+ /**
194
+ * Estimate total tokens in context
195
+ */
196
+ estimateTokens() {
197
+ let chars = 0;
198
+ const entities = Array.from(this.generated.values());
199
+ for (const entity of entities) {
200
+ chars += JSON.stringify(entity).length;
201
+ }
202
+ for (const parent of this.parentStack) {
203
+ chars += JSON.stringify(parent).length;
204
+ }
205
+ return Math.ceil(chars / CHARS_PER_TOKEN);
206
+ }
207
+ /**
208
+ * Estimate tokens for a single entity
209
+ */
210
+ estimateEntityTokens(entity) {
211
+ return Math.ceil(JSON.stringify(entity).length / CHARS_PER_TOKEN);
212
+ }
213
+ /**
214
+ * Get remaining token budget
215
+ */
216
+ getRemainingTokenBudget() {
217
+ return Math.max(0, this.maxContextTokens - this.estimateTokens());
218
+ }
219
+ /**
220
+ * Compact oldest entries to free up space
221
+ */
222
+ compactOldest() {
223
+ // Remove oldest entries until we have room (target 50% of max)
224
+ const targetTokens = Math.floor(this.maxContextTokens * 0.5);
225
+ while (this.estimateTokens() > targetTokens && this.generationOrder.length > 0) {
226
+ const oldest = this.generationOrder.shift();
227
+ if (oldest) {
228
+ this.generated.delete(oldest.$id);
229
+ const byType = this.generatedByType.get(oldest.$type);
230
+ if (byType) {
231
+ const idx = byType.findIndex((e) => e.$id === oldest.$id);
232
+ if (idx !== -1)
233
+ byType.splice(idx, 1);
234
+ }
235
+ }
236
+ }
237
+ }
238
+ // ============================================================================
239
+ // CONTEXT BUILDING
240
+ // ============================================================================
241
+ /**
242
+ * Build context string for AI generation
243
+ */
244
+ buildContextString(options = {}) {
245
+ const parts = [];
246
+ // 1. Parent context
247
+ if (this.parentStack.length > 0) {
248
+ const parentInfo = this.parentStack
249
+ .map((p) => `${p.$type}: ${JSON.stringify(p)}`)
250
+ .join('\n');
251
+ parts.push(`parent entities:\n${parentInfo}`);
252
+ }
253
+ // 2. Previously generated entities (prioritize relevant types)
254
+ let entities = this.getAllGenerated();
255
+ if (options.relevantTypes && options.relevantTypes.length > 0) {
256
+ const relevant = entities.filter((e) => options.relevantTypes.includes(e.$type));
257
+ const other = entities.filter((e) => !options.relevantTypes.includes(e.$type));
258
+ entities = [...relevant, ...other];
259
+ }
260
+ if (entities.length > 0) {
261
+ const entitiesJson = JSON.stringify(entities);
262
+ parts.push(`Previously generated:\n${entitiesJson}`);
263
+ }
264
+ let result = parts.join('\n\n');
265
+ // Truncate if needed
266
+ if (options.maxTokens) {
267
+ const maxChars = options.maxTokens * CHARS_PER_TOKEN;
268
+ if (result.length > maxChars) {
269
+ result = result.slice(0, maxChars - 3) + '...';
270
+ }
271
+ }
272
+ return result;
273
+ }
274
+ // ============================================================================
275
+ // SNAPSHOTS AND BRANCHING
276
+ // ============================================================================
277
+ /**
278
+ * Create a snapshot of current state
279
+ */
280
+ createSnapshot() {
281
+ return {
282
+ generatedCount: this.generated.size,
283
+ parentDepth: this.parentStack.length,
284
+ timestamp: new Date(),
285
+ };
286
+ }
287
+ /**
288
+ * Restore from a snapshot (clears additions after snapshot)
289
+ */
290
+ restoreSnapshot(snapshot) {
291
+ // Trim generated to match snapshot count
292
+ while (this.generated.size > snapshot.generatedCount) {
293
+ const lastEntity = this.generationOrder.pop();
294
+ if (lastEntity) {
295
+ this.generated.delete(lastEntity.$id);
296
+ const byType = this.generatedByType.get(lastEntity.$type);
297
+ if (byType)
298
+ byType.pop();
299
+ }
300
+ }
301
+ // Trim parent stack
302
+ while (this.parentStack.length > snapshot.parentDepth) {
303
+ this.parentStack.pop();
304
+ }
305
+ }
306
+ /**
307
+ * Create a branch (copy) of this context
308
+ */
309
+ branch() {
310
+ const branched = new GenerationContext({
311
+ maxContextTokens: this.maxContextTokens,
312
+ autoCompact: this.autoCompact,
313
+ });
314
+ // Copy state
315
+ const generatedEntries = Array.from(this.generated.entries());
316
+ for (const [id, entity] of generatedEntries) {
317
+ branched.generated.set(id, { ...entity });
318
+ }
319
+ const byTypeEntries = Array.from(this.generatedByType.entries());
320
+ for (const [type, entities] of byTypeEntries) {
321
+ branched.generatedByType.set(type, [...entities]);
322
+ }
323
+ branched.parentStack = [...this.parentStack];
324
+ branched.generationOrder = [...this.generationOrder];
325
+ branched.relationships = [...this.relationships];
326
+ // Copy array contexts
327
+ const arrayContextEntries = Array.from(this.arrayContexts.entries());
328
+ for (const [field, items] of arrayContextEntries) {
329
+ branched.arrayContexts.set(field, [...items]);
330
+ }
331
+ return branched;
332
+ }
333
+ /**
334
+ * Merge a branch back into this context
335
+ */
336
+ merge(branch) {
337
+ const branchEntities = Array.from(branch.generated.values());
338
+ for (const entity of branchEntities) {
339
+ if (!this.generated.has(entity.$id)) {
340
+ this.addGenerated(entity);
341
+ }
342
+ }
343
+ for (const rel of branch.relationships) {
344
+ const exists = this.relationships.some((r) => r.from === rel.from && r.to === rel.to && r.verb === rel.verb);
345
+ if (!exists) {
346
+ this.relationships.push(rel);
347
+ }
348
+ }
349
+ }
350
+ // ============================================================================
351
+ // SERIALIZATION
352
+ // ============================================================================
353
+ /**
354
+ * Serialize context to JSON
355
+ */
356
+ toJSON() {
357
+ return JSON.stringify({
358
+ generated: Array.from(this.generated.values()),
359
+ parents: this.parentStack,
360
+ relationships: this.relationships,
361
+ generationOrder: this.generationOrder.map((e) => e.$id),
362
+ });
363
+ }
364
+ /**
365
+ * Deserialize context from JSON
366
+ */
367
+ static fromJSON(json, options) {
368
+ const data = JSON.parse(json);
369
+ const context = new GenerationContext(options);
370
+ for (const entity of data.generated) {
371
+ context.generated.set(entity.$id, entity);
372
+ context.generationOrder.push(entity);
373
+ const byType = context.generatedByType.get(entity.$type) ?? [];
374
+ byType.push(entity);
375
+ context.generatedByType.set(entity.$type, byType);
376
+ }
377
+ for (const parent of data.parents) {
378
+ context.pushParent(parent);
379
+ }
380
+ context.relationships = data.relationships ?? [];
381
+ return context;
382
+ }
383
+ }
384
+ // =============================================================================
385
+ // Factory Function
386
+ // =============================================================================
387
+ /**
388
+ * Create a new GenerationContext with the given options
389
+ */
390
+ export function createGenerationContext(options) {
391
+ return new GenerationContext(options);
392
+ }
393
+ //# sourceMappingURL=generation-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generation-context.js","sourceRoot":"","sources":["../../src/schema/generation-context.ts"],"names":[],"mappings":"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"}