@ontologie/schema 0.1.0-preview.1

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 (70) hide show
  1. package/README.md +149 -0
  2. package/dist/compiler/compile.d.ts +36 -0
  3. package/dist/compiler/compile.d.ts.map +1 -0
  4. package/dist/compiler/compile.js +295 -0
  5. package/dist/compiler/compile.js.map +1 -0
  6. package/dist/compiler/resolve.d.ts +14 -0
  7. package/dist/compiler/resolve.d.ts.map +1 -0
  8. package/dist/compiler/resolve.js +132 -0
  9. package/dist/compiler/resolve.js.map +1 -0
  10. package/dist/compiler/validate.d.ts +15 -0
  11. package/dist/compiler/validate.d.ts.map +1 -0
  12. package/dist/compiler/validate.js +188 -0
  13. package/dist/compiler/validate.js.map +1 -0
  14. package/dist/diff/diff.d.ts +20 -0
  15. package/dist/diff/diff.d.ts.map +1 -0
  16. package/dist/diff/diff.js +393 -0
  17. package/dist/diff/diff.js.map +1 -0
  18. package/dist/diff/format.d.ts +21 -0
  19. package/dist/diff/format.d.ts.map +1 -0
  20. package/dist/diff/format.js +88 -0
  21. package/dist/diff/format.js.map +1 -0
  22. package/dist/dsl/action.d.ts +148 -0
  23. package/dist/dsl/action.d.ts.map +1 -0
  24. package/dist/dsl/action.js +330 -0
  25. package/dist/dsl/action.js.map +1 -0
  26. package/dist/dsl/interface.d.ts +32 -0
  27. package/dist/dsl/interface.d.ts.map +1 -0
  28. package/dist/dsl/interface.js +77 -0
  29. package/dist/dsl/interface.js.map +1 -0
  30. package/dist/dsl/link.d.ts +34 -0
  31. package/dist/dsl/link.d.ts.map +1 -0
  32. package/dist/dsl/link.js +95 -0
  33. package/dist/dsl/link.js.map +1 -0
  34. package/dist/dsl/object-type.d.ts +35 -0
  35. package/dist/dsl/object-type.d.ts.map +1 -0
  36. package/dist/dsl/object-type.js +102 -0
  37. package/dist/dsl/object-type.js.map +1 -0
  38. package/dist/dsl/property.d.ts +43 -0
  39. package/dist/dsl/property.d.ts.map +1 -0
  40. package/dist/dsl/property.js +125 -0
  41. package/dist/dsl/property.js.map +1 -0
  42. package/dist/index.d.ts +47 -0
  43. package/dist/index.d.ts.map +1 -0
  44. package/dist/index.js +63 -0
  45. package/dist/index.js.map +1 -0
  46. package/dist/lock/lockfile.d.ts +31 -0
  47. package/dist/lock/lockfile.d.ts.map +1 -0
  48. package/dist/lock/lockfile.js +86 -0
  49. package/dist/lock/lockfile.js.map +1 -0
  50. package/dist/model-assurance.d.ts +27 -0
  51. package/dist/model-assurance.d.ts.map +1 -0
  52. package/dist/model-assurance.js +194 -0
  53. package/dist/model-assurance.js.map +1 -0
  54. package/dist/pull/emit-schema.d.ts +24 -0
  55. package/dist/pull/emit-schema.d.ts.map +1 -0
  56. package/dist/pull/emit-schema.js +476 -0
  57. package/dist/pull/emit-schema.js.map +1 -0
  58. package/dist/push/execute.d.ts +34 -0
  59. package/dist/push/execute.d.ts.map +1 -0
  60. package/dist/push/execute.js +119 -0
  61. package/dist/push/execute.js.map +1 -0
  62. package/dist/push/plan.d.ts +37 -0
  63. package/dist/push/plan.d.ts.map +1 -0
  64. package/dist/push/plan.js +484 -0
  65. package/dist/push/plan.js.map +1 -0
  66. package/dist/types.d.ts +330 -0
  67. package/dist/types.d.ts.map +1 -0
  68. package/dist/types.js +5 -0
  69. package/dist/types.js.map +1 -0
  70. package/package.json +45 -0
@@ -0,0 +1,476 @@
1
+ /**
2
+ * Pull — generate a `dataforge.schema.ts` source file from an OntologyManifest.
3
+ *
4
+ * Performs topological sort so types without link dependencies come first,
5
+ * uses lazy `() => Type` for forward references.
6
+ *
7
+ * Fixes over V2:
8
+ * - apiName preserved exactly (no toCamelCase mangling) — round-trip safe
9
+ * - Chained declarations via pushChainedDeclaration (no fragile lastLine surgery)
10
+ * - ObjectType metadata emitted (displayName, description, primaryKey, implements)
11
+ * - All string interpolation uses JSON.stringify (injection-safe)
12
+ * - N:N cardinality maps to toMany (not toOne)
13
+ * - Variable name allocator: sanitizes identifiers, deduplicates, avoids reserved words
14
+ */
15
+ // ---------------------------------------------------------------------------
16
+ // Reserved words & identifier safety
17
+ // ---------------------------------------------------------------------------
18
+ const RESERVED_WORDS = new Set([
19
+ 'break', 'case', 'catch', 'class', 'const', 'continue', 'debugger',
20
+ 'default', 'delete', 'do', 'else', 'export', 'extends', 'finally',
21
+ 'for', 'function', 'if', 'import', 'in', 'instanceof', 'new',
22
+ 'return', 'super', 'switch', 'this', 'throw', 'try', 'typeof',
23
+ 'var', 'void', 'while', 'with', 'yield', 'let', 'static',
24
+ 'enum', 'await', 'implements', 'package', 'protected',
25
+ 'interface', 'private', 'public',
26
+ ]);
27
+ /** JSON.stringify shorthand for safe string quoting */
28
+ function q(value) {
29
+ return JSON.stringify(value);
30
+ }
31
+ function isValidIdentifier(value) {
32
+ return /^[A-Za-z_$][A-Za-z0-9_$]*$/.test(value) && !RESERVED_WORDS.has(value);
33
+ }
34
+ /** Emit an object key that preserves the exact apiName for round-trip safety */
35
+ function emitObjectKey(apiName) {
36
+ return isValidIdentifier(apiName) ? apiName : q(apiName);
37
+ }
38
+ function sanitizeIdentifier(raw, fallback) {
39
+ let value = raw
40
+ .replace(/[^A-Za-z0-9_$]/g, '_')
41
+ .replace(/^[^A-Za-z_$]+/, '');
42
+ if (!value)
43
+ value = fallback;
44
+ if (/^[0-9]/.test(value)) {
45
+ value = `_${value}`;
46
+ }
47
+ if (RESERVED_WORDS.has(value)) {
48
+ value = `${value}_`;
49
+ }
50
+ return value;
51
+ }
52
+ function uniqueIdentifier(base, used) {
53
+ let candidate = base;
54
+ let suffix = 2;
55
+ while (used.has(candidate) || RESERVED_WORDS.has(candidate)) {
56
+ candidate = `${base}${suffix}`;
57
+ suffix += 1;
58
+ }
59
+ used.add(candidate);
60
+ return candidate;
61
+ }
62
+ function allocateVarNames(items, getApiName, makeBase) {
63
+ const used = new Set();
64
+ const result = new Map();
65
+ for (const item of items) {
66
+ const apiName = getApiName(item);
67
+ const base = sanitizeIdentifier(makeBase(apiName), 'Generated');
68
+ result.set(apiName, uniqueIdentifier(base, used));
69
+ }
70
+ return result;
71
+ }
72
+ // ---------------------------------------------------------------------------
73
+ // Naming helpers (used only for variable names, NOT for apiName keys)
74
+ // ---------------------------------------------------------------------------
75
+ function toDisplayName(apiName) {
76
+ return apiName
77
+ .replace(/_/g, ' ')
78
+ .replace(/([a-z])([A-Z])/g, '$1 $2')
79
+ .replace(/\b\w/g, c => c.toUpperCase());
80
+ }
81
+ function toPascalCase(apiName) {
82
+ return apiName
83
+ .split('_')
84
+ .map(part => part.charAt(0).toUpperCase() + part.slice(1).toLowerCase())
85
+ .join('');
86
+ }
87
+ function toCamelCase(apiName) {
88
+ const pascal = toPascalCase(apiName);
89
+ return pascal.charAt(0).toLowerCase() + pascal.slice(1);
90
+ }
91
+ // ---------------------------------------------------------------------------
92
+ // Link helpers
93
+ // ---------------------------------------------------------------------------
94
+ /** Extract the field-level apiName for a link, stripping the Source__ prefix */
95
+ function linkFieldApiName(link) {
96
+ const prefix = `${link.sourceTypeApiName}__`;
97
+ if (link.apiName.startsWith(prefix)) {
98
+ return link.apiName.slice(prefix.length);
99
+ }
100
+ return link.relationshipType || link.apiName;
101
+ }
102
+ /** Map cardinality to DSL method */
103
+ function linkMethod(cardinality) {
104
+ switch (cardinality) {
105
+ case 'N:N':
106
+ return 'toManyToMany';
107
+ case '1:N':
108
+ return 'toMany';
109
+ case '1:1':
110
+ case 'N:1':
111
+ default:
112
+ return 'toOne';
113
+ }
114
+ }
115
+ // ---------------------------------------------------------------------------
116
+ // Chained declaration builder (replaces fragile lastLine surgery)
117
+ // ---------------------------------------------------------------------------
118
+ function pushChainedDeclaration(lines, firstLine, bodyLines, modifiers) {
119
+ lines.push(firstLine);
120
+ lines.push(...bodyLines);
121
+ if (modifiers.length > 0) {
122
+ lines.push('})');
123
+ for (const modifier of modifiers) {
124
+ lines.push(` ${modifier}`);
125
+ }
126
+ // Append semicolon to the last modifier line
127
+ lines[lines.length - 1] += ';';
128
+ }
129
+ else {
130
+ lines.push('});');
131
+ }
132
+ lines.push('');
133
+ }
134
+ // ---------------------------------------------------------------------------
135
+ // Property emission
136
+ // ---------------------------------------------------------------------------
137
+ /** Build the DSL call for a single property */
138
+ function emitProperty(prop) {
139
+ // money() sugar: number + semanticType 'money'
140
+ if (prop.dataType === 'number' && prop.semanticType === 'money') {
141
+ let expr = 'money()';
142
+ if (prop.required)
143
+ expr += '.required()';
144
+ if (prop.indexed && !prop.unique)
145
+ expr += '.indexed()';
146
+ if (prop.unique)
147
+ expr += '.unique()';
148
+ if (prop.defaultValue !== undefined)
149
+ expr += `.default(${JSON.stringify(prop.defaultValue)})`;
150
+ if (prop.constraints?.min !== undefined)
151
+ expr += `.min(${JSON.stringify(prop.constraints.min)})`;
152
+ if (prop.constraints?.max !== undefined)
153
+ expr += `.max(${JSON.stringify(prop.constraints.max)})`;
154
+ if (prop.description)
155
+ expr += `.description(${q(prop.description)})`;
156
+ if (prop.mutableBy && prop.mutableBy.length > 0)
157
+ expr += `.mutableBy(${JSON.stringify(prop.mutableBy)})`;
158
+ return { expr, usesMoney: true };
159
+ }
160
+ // Defense-in-depth: if dataType is 'enum' (legacy manifests), emit as string().enum(...)
161
+ const baseType = prop.dataType === 'enum' ? 'string' : prop.dataType;
162
+ let expr = `${baseType}()`;
163
+ if (prop.required)
164
+ expr += '.required()';
165
+ if (prop.indexed && !prop.unique)
166
+ expr += '.indexed()';
167
+ if (prop.unique)
168
+ expr += '.unique()';
169
+ if (prop.semanticType === 'email') {
170
+ expr += '.email()';
171
+ }
172
+ else if (prop.semanticType === 'datetime') {
173
+ expr += '.datetime()';
174
+ }
175
+ else if (prop.semanticType) {
176
+ expr += `.semantic(${q(prop.semanticType)})`;
177
+ }
178
+ if (prop.defaultValue !== undefined) {
179
+ expr += `.default(${JSON.stringify(prop.defaultValue)})`;
180
+ }
181
+ if (prop.constraints?.enum) {
182
+ const values = JSON.stringify(prop.constraints.enum);
183
+ expr += `.enum(${values})`;
184
+ }
185
+ else if (prop.dataType === 'enum' && prop.enumValues) {
186
+ // Fallback for manifests that have enumValues but no constraints.enum
187
+ expr += `.enum(${JSON.stringify(prop.enumValues)})`;
188
+ }
189
+ if (prop.constraints?.min !== undefined)
190
+ expr += `.min(${JSON.stringify(prop.constraints.min)})`;
191
+ if (prop.constraints?.max !== undefined)
192
+ expr += `.max(${JSON.stringify(prop.constraints.max)})`;
193
+ if (prop.mutableBy && prop.mutableBy.length > 0) {
194
+ expr += `.mutableBy(${JSON.stringify(prop.mutableBy)})`;
195
+ }
196
+ if (prop.description) {
197
+ expr += `.description(${q(prop.description)})`;
198
+ }
199
+ return { expr, usesMoney: false };
200
+ }
201
+ // ---------------------------------------------------------------------------
202
+ // Topological sort
203
+ // ---------------------------------------------------------------------------
204
+ /**
205
+ * Topological sort: types with no outgoing links (or only self-refs) first.
206
+ * Returns sorted apiName list.
207
+ */
208
+ function topoSort(types, links) {
209
+ const apiNames = types.map(t => t.apiName);
210
+ const nameSet = new Set(apiNames);
211
+ // Build adjacency as dependency -> dependents (excluding self-refs), so target
212
+ // object types are emitted before sources that reference them.
213
+ const deps = new Map();
214
+ for (const name of apiNames) {
215
+ deps.set(name, new Set());
216
+ }
217
+ for (const link of links) {
218
+ if (link.sourceTypeApiName !== link.targetTypeApiName && nameSet.has(link.targetTypeApiName)) {
219
+ deps.get(link.targetTypeApiName)?.add(link.sourceTypeApiName);
220
+ }
221
+ }
222
+ // Kahn's algorithm
223
+ const inDegree = new Map();
224
+ for (const name of apiNames)
225
+ inDegree.set(name, 0);
226
+ for (const [, targets] of deps) {
227
+ for (const t of targets) {
228
+ inDegree.set(t, (inDegree.get(t) ?? 0) + 1);
229
+ }
230
+ }
231
+ const queue = [];
232
+ for (const [name, deg] of inDegree) {
233
+ if (deg === 0)
234
+ queue.push(name);
235
+ }
236
+ queue.sort();
237
+ const sorted = [];
238
+ while (queue.length > 0) {
239
+ const name = queue.shift();
240
+ sorted.push(name);
241
+ for (const target of deps.get(name) ?? []) {
242
+ const newDeg = (inDegree.get(target) ?? 1) - 1;
243
+ inDegree.set(target, newDeg);
244
+ if (newDeg === 0) {
245
+ queue.push(target);
246
+ queue.sort();
247
+ }
248
+ }
249
+ }
250
+ // If cycle detected, append remaining nodes alphabetically
251
+ if (sorted.length < apiNames.length) {
252
+ const remaining = apiNames.filter(n => !sorted.includes(n)).sort();
253
+ sorted.push(...remaining);
254
+ }
255
+ return sorted;
256
+ }
257
+ // ---------------------------------------------------------------------------
258
+ // ObjectType modifier builder
259
+ // ---------------------------------------------------------------------------
260
+ function objectTypeModifiers(ot, ifaceRefs) {
261
+ const modifiers = [];
262
+ if (ot.displayName && ot.displayName !== toDisplayName(ot.apiName)) {
263
+ modifiers.push(`.displayName(${q(ot.displayName)})`);
264
+ }
265
+ if (ot.description) {
266
+ modifiers.push(`.description(${q(ot.description)})`);
267
+ }
268
+ if (ot.primaryKey) {
269
+ modifiers.push(`.primaryKey(${q(ot.primaryKey)})`);
270
+ }
271
+ if (ifaceRefs.length > 0) {
272
+ modifiers.push(`.implements(${ifaceRefs.join(', ')})`);
273
+ }
274
+ return modifiers;
275
+ }
276
+ // ---------------------------------------------------------------------------
277
+ // Main entry point
278
+ // ---------------------------------------------------------------------------
279
+ /**
280
+ * Generate TypeScript source code using the `@dataforge/schema` DSL
281
+ * from an OntologyManifest.
282
+ *
283
+ * @param manifest - The remote OntologyManifest
284
+ * @returns Valid TypeScript source string
285
+ */
286
+ export function emitSchema(manifest) {
287
+ const lines = [];
288
+ // Collect which DSL functions we need to import
289
+ const usedTypes = new Set();
290
+ let usesLink = false;
291
+ let usesMoney = false;
292
+ const hasActions = (manifest.actions ?? []).length > 0;
293
+ const hasInterfaces = (manifest.interfaces ?? []).length > 0;
294
+ for (const ot of manifest.objectTypes) {
295
+ for (const prop of ot.properties) {
296
+ if (prop.dataType === 'number' && prop.semanticType === 'money') {
297
+ usesMoney = true;
298
+ }
299
+ else {
300
+ usedTypes.add(prop.dataType === 'enum' ? 'string' : prop.dataType);
301
+ }
302
+ }
303
+ }
304
+ for (const iface of manifest.interfaces ?? []) {
305
+ for (const prop of iface.sharedProperties) {
306
+ if (prop.dataType === 'number' && prop.semanticType === 'money') {
307
+ usesMoney = true;
308
+ }
309
+ else {
310
+ usedTypes.add(prop.dataType === 'enum' ? 'string' : prop.dataType);
311
+ }
312
+ }
313
+ }
314
+ if (manifest.linkTypes.length > 0) {
315
+ usesLink = true;
316
+ }
317
+ // Build import line
318
+ const imports = ['objectType'];
319
+ if (hasInterfaces)
320
+ imports.push('defineInterface');
321
+ for (const dt of ['string', 'number', 'boolean', 'date', 'object', 'array']) {
322
+ if (usedTypes.has(dt))
323
+ imports.push(dt);
324
+ }
325
+ if (usesMoney)
326
+ imports.push('money');
327
+ if (usesLink)
328
+ imports.push('link');
329
+ if (hasActions)
330
+ imports.push('action');
331
+ lines.push(`import { ${imports.join(', ')} } from '@dataforge/schema';`);
332
+ lines.push('');
333
+ // Allocate safe, unique variable names for all entities
334
+ const objectVarNames = allocateVarNames(manifest.objectTypes, t => t.apiName, toPascalCase);
335
+ const interfaceVarNames = allocateVarNames(manifest.interfaces ?? [], i => i.apiName, toPascalCase);
336
+ const actionVarNames = allocateVarNames(manifest.actions ?? [], a => `${a.objectTypeApiName}_${a.apiName}`, key => toCamelCase(key.replace(/\./g, '_')));
337
+ // Build lookup maps
338
+ const typeMap = new Map(manifest.objectTypes.map(t => [t.apiName, t]));
339
+ // Links grouped by source type
340
+ const linksBySource = new Map();
341
+ for (const lt of manifest.linkTypes) {
342
+ const list = linksBySource.get(lt.sourceTypeApiName) ?? [];
343
+ list.push(lt);
344
+ linksBySource.set(lt.sourceTypeApiName, list);
345
+ }
346
+ // Emit interfaces before types
347
+ for (const iface of manifest.interfaces ?? []) {
348
+ const varName = interfaceVarNames.get(iface.apiName);
349
+ const propLines = [];
350
+ for (const prop of iface.sharedProperties) {
351
+ propLines.push(` ${emitObjectKey(prop.apiName)}: ${emitProperty(prop).expr},`);
352
+ }
353
+ const modifiers = [];
354
+ if (iface.displayName && iface.displayName !== toDisplayName(iface.apiName)) {
355
+ modifiers.push(`.displayName(${q(iface.displayName)})`);
356
+ }
357
+ if (iface.description) {
358
+ modifiers.push(`.description(${q(iface.description)})`);
359
+ }
360
+ pushChainedDeclaration(lines, `export const ${varName} = defineInterface(${q(iface.apiName)}, {`, propLines, modifiers);
361
+ }
362
+ // Build interface membership: type apiName -> interface apiNames
363
+ const typeInterfaces = new Map();
364
+ for (const ot of manifest.objectTypes) {
365
+ if (ot.interfaces && ot.interfaces.length > 0) {
366
+ typeInterfaces.set(ot.apiName, ot.interfaces);
367
+ }
368
+ }
369
+ // Topological sort
370
+ const sortedNames = topoSort(manifest.objectTypes, manifest.linkTypes);
371
+ for (const apiName of sortedNames) {
372
+ const ot = typeMap.get(apiName);
373
+ if (!ot)
374
+ continue;
375
+ const varName = objectVarNames.get(apiName);
376
+ const fieldLines = [];
377
+ // Properties — preserve exact apiName as key
378
+ for (const prop of ot.properties) {
379
+ fieldLines.push(` ${emitObjectKey(prop.apiName)}: ${emitProperty(prop).expr},`);
380
+ }
381
+ // Links for this type
382
+ const typeLinks = linksBySource.get(apiName) ?? [];
383
+ for (const lt of typeLinks) {
384
+ const fieldName = linkFieldApiName(lt);
385
+ const targetVar = objectVarNames.get(lt.targetTypeApiName) ?? toPascalCase(lt.targetTypeApiName);
386
+ const method = linkMethod(lt.cardinality);
387
+ let linkExpr = `link.${method}(() => ${targetVar})`;
388
+ if (lt.inverseName)
389
+ linkExpr += `.inverseName(${q(lt.inverseName)})`;
390
+ if (lt.label)
391
+ linkExpr += `.label(${q(lt.label)})`;
392
+ fieldLines.push(` ${emitObjectKey(fieldName)}: ${linkExpr},`);
393
+ }
394
+ // ObjectType modifiers (displayName, description, primaryKey, implements)
395
+ const ifaceList = typeInterfaces.get(apiName) ?? [];
396
+ const ifaceRefs = ifaceList
397
+ .map(name => interfaceVarNames.get(name))
398
+ .filter((name) => typeof name === 'string');
399
+ const modifiers = objectTypeModifiers(ot, ifaceRefs);
400
+ pushChainedDeclaration(lines, `export const ${varName} = objectType(${q(apiName)}, {`, fieldLines, modifiers);
401
+ }
402
+ // Emit actions
403
+ const actions = manifest.actions ?? [];
404
+ if (actions.length > 0) {
405
+ const sortedActions = [...actions].sort((a, b) => {
406
+ const cmp = a.objectTypeApiName.localeCompare(b.objectTypeApiName);
407
+ return cmp !== 0 ? cmp : a.apiName.localeCompare(b.apiName);
408
+ });
409
+ for (const act of sortedActions) {
410
+ const varName = actionVarNames.get(`${act.objectTypeApiName}_${act.apiName}`);
411
+ const targetVar = objectVarNames.get(act.objectTypeApiName) ?? toPascalCase(act.objectTypeApiName);
412
+ let expr = `action(${q(act.apiName)})\n .on(() => ${targetVar})`;
413
+ if (act.actionType && act.actionType !== 'CUSTOM') {
414
+ expr += `\n .type(${q(act.actionType)})`;
415
+ }
416
+ if (act.trigger && act.trigger !== 'MANUAL') {
417
+ expr += `\n .trigger(${q(act.trigger)})`;
418
+ }
419
+ if (act.parameters.length > 0) {
420
+ const inputFields = act.parameters.map(p => {
421
+ const parts = [`dataType: ${q(p.dataType)}`];
422
+ if (p.required)
423
+ parts.push('required: true');
424
+ if (p.defaultValue !== undefined)
425
+ parts.push(`defaultValue: ${JSON.stringify(p.defaultValue)}`);
426
+ if (p.description)
427
+ parts.push(`description: ${q(p.description)}`);
428
+ return ` ${emitObjectKey(p.name)}: { ${parts.join(', ')} }`;
429
+ });
430
+ expr += `\n .input({\n${inputFields.join(',\n')},\n })`;
431
+ }
432
+ if (act.conditions && act.conditions.length > 0) {
433
+ for (const cond of act.conditions) {
434
+ expr += `\n .when({ field: ${q(cond.field)}, operator: ${q(cond.operator)}, value: ${JSON.stringify(cond.value)} })`;
435
+ }
436
+ }
437
+ if (act.effects && act.effects.length > 0) {
438
+ for (const eff of act.effects) {
439
+ const effRecord = eff;
440
+ const kind = effRecord.kind ?? 'set';
441
+ switch (kind) {
442
+ case 'createRelated':
443
+ expr += `\n .createRelated(${q(String(effRecord.linkName ?? ''))}, ${q(String(effRecord.targetType ?? ''))}, ${JSON.stringify(effRecord.fields ?? {})})`;
444
+ break;
445
+ case 'link':
446
+ expr += `\n .link(${q(String(effRecord.linkName ?? ''))}, ${q(String(effRecord.targetType ?? ''))})`;
447
+ break;
448
+ case 'unlink':
449
+ expr += `\n .unlink(${q(String(effRecord.linkName ?? ''))}, ${q(String(effRecord.targetType ?? ''))})`;
450
+ break;
451
+ case 'set':
452
+ default:
453
+ expr += `\n .set({ field: ${q(String(effRecord.field ?? ''))}, value: ${JSON.stringify(effRecord.value)} })`;
454
+ break;
455
+ }
456
+ }
457
+ }
458
+ if (act.requiredScopes && act.requiredScopes.length > 0) {
459
+ expr += `\n .requires(${act.requiredScopes.map(s => q(s)).join(', ')})`;
460
+ }
461
+ if (act.timeout !== undefined) {
462
+ expr += `\n .timeout(${act.timeout})`;
463
+ }
464
+ if (act.displayName) {
465
+ expr += `\n .displayName(${q(act.displayName)})`;
466
+ }
467
+ if (act.description) {
468
+ expr += `\n .description(${q(act.description)})`;
469
+ }
470
+ lines.push(`export const ${varName} = ${expr};`);
471
+ lines.push('');
472
+ }
473
+ }
474
+ return lines.join('\n');
475
+ }
476
+ //# sourceMappingURL=emit-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-schema.js","sourceRoot":"","sources":["../../src/pull/emit-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Execute — run a list of CQRS commands against the backend.
3
+ */
4
+ import type { CqrsCommand, PushProgress } from '../types.js';
5
+ export interface HttpTransport {
6
+ request<T>(opts: {
7
+ method: string;
8
+ path: string;
9
+ body?: unknown;
10
+ }): Promise<T>;
11
+ }
12
+ export interface ExecuteOptions {
13
+ transport: HttpTransport;
14
+ commands: CqrsCommand[];
15
+ onProgress?: (progress: PushProgress) => void;
16
+ }
17
+ /**
18
+ * Execute CQRS commands sequentially via the backend command endpoint.
19
+ *
20
+ * After each successful command, captures `metadata.currentVersion` for the
21
+ * next command's `expectedVersion` (OCC chain).
22
+ *
23
+ * @returns Summary of executed commands
24
+ */
25
+ export declare function executePush(options: ExecuteOptions): Promise<{
26
+ total: number;
27
+ succeeded: number;
28
+ failed: number;
29
+ errors: Array<{
30
+ command: CqrsCommand;
31
+ error: string;
32
+ }>;
33
+ }>;
34
+ //# sourceMappingURL=execute.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute.d.ts","sourceRoot":"","sources":["../../src/push/execute.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG7D,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAChF;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,aAAa,CAAC;IACzB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,YAAY,KAAK,IAAI,CAAC;CAC/C;AAOD;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC;IAClE,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACxD,CAAC,CA0ED"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * Execute — run a list of CQRS commands against the backend.
3
+ */
4
+ import { ROUTES } from '@dataforge/sdk-types';
5
+ /**
6
+ * Execute CQRS commands sequentially via the backend command endpoint.
7
+ *
8
+ * After each successful command, captures `metadata.currentVersion` for the
9
+ * next command's `expectedVersion` (OCC chain).
10
+ *
11
+ * @returns Summary of executed commands
12
+ */
13
+ export async function executePush(options) {
14
+ const { transport, commands, onProgress } = options;
15
+ const errors = [];
16
+ let succeeded = 0;
17
+ // Bug 1.8 fix: Per-entity version tracking instead of a single global version
18
+ const entityVersions = new Map();
19
+ for (let i = 0; i < commands.length; i++) {
20
+ const command = commands[i];
21
+ onProgress?.({
22
+ total: commands.length,
23
+ completed: i,
24
+ current: `${command.type} ${describeCommand(command)}`,
25
+ errors,
26
+ });
27
+ try {
28
+ const body = {
29
+ type: command.type,
30
+ payload: command.payload,
31
+ };
32
+ // Bug 1.8 + P1-9 fix: Version tracks entity, not command type.
33
+ // Extract the correct entity ID based on command type.
34
+ const entityKey = extractEntityKey(command);
35
+ const expectedVersion = entityKey ? entityVersions.get(entityKey) : undefined;
36
+ if (expectedVersion !== undefined) {
37
+ body.expectedVersion = expectedVersion;
38
+ }
39
+ const result = await transport.request({
40
+ method: 'POST',
41
+ path: ROUTES.commands.execute,
42
+ body,
43
+ });
44
+ // Bug 1.7 fix: Treat { success: false } as an error
45
+ if (result && result.success === false) {
46
+ throw new Error(result.error?.message ?? 'Command failed');
47
+ }
48
+ if (result.metadata?.currentVersion !== undefined && entityKey) {
49
+ entityVersions.set(entityKey, result.metadata.currentVersion);
50
+ }
51
+ succeeded++;
52
+ }
53
+ catch (err) {
54
+ const message = err instanceof Error ? err.message : String(err);
55
+ errors.push({ command, error: message });
56
+ // Stop on first error
57
+ onProgress?.({
58
+ total: commands.length,
59
+ completed: i,
60
+ current: `FAILED: ${command.type}`,
61
+ errors,
62
+ });
63
+ break;
64
+ }
65
+ }
66
+ onProgress?.({
67
+ total: commands.length,
68
+ completed: succeeded,
69
+ current: succeeded === commands.length ? 'done' : 'stopped',
70
+ errors,
71
+ });
72
+ return {
73
+ total: commands.length,
74
+ succeeded,
75
+ failed: errors.length,
76
+ errors,
77
+ };
78
+ }
79
+ /** Extract the entity ID used for OCC version tracking */
80
+ function extractEntityKey(cmd) {
81
+ const payload = cmd.payload;
82
+ switch (cmd.type) {
83
+ case 'CREATE_NODE':
84
+ case 'UPDATE_NODE':
85
+ return (payload.node?.id ?? payload.id);
86
+ case 'CREATE_EDGE':
87
+ return (payload.edge?.id ?? payload.id);
88
+ case 'CREATE_ACTION':
89
+ return (payload.action?.id ?? payload.id);
90
+ case 'UPDATE_ACTION':
91
+ case 'DELETE_ACTION':
92
+ return payload.actionId;
93
+ case 'DELETE_EDGE':
94
+ case 'DELETE_NODE':
95
+ return payload.id;
96
+ default:
97
+ return payload.id;
98
+ }
99
+ }
100
+ function describeCommand(cmd) {
101
+ const payload = cmd.payload;
102
+ if (cmd.type === 'CREATE_NODE') {
103
+ const node = payload.node;
104
+ return String(node?.api_name ?? node?.name ?? '');
105
+ }
106
+ if (cmd.type === 'CREATE_EDGE') {
107
+ const edge = payload.edge;
108
+ return String(edge?.api_name ?? '');
109
+ }
110
+ if (cmd.type === 'CREATE_ACTION') {
111
+ const action = payload.action;
112
+ return String(action?.name ?? '');
113
+ }
114
+ if (cmd.type === 'UPDATE_ACTION' || cmd.type === 'DELETE_ACTION') {
115
+ return String(payload.actionId ?? '');
116
+ }
117
+ return String(payload.id ?? '');
118
+ }
119
+ //# sourceMappingURL=execute.js.map