@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
package/README.md ADDED
@@ -0,0 +1,149 @@
1
+ # @dataforge/schema
2
+
3
+ [![Version](https://img.shields.io/badge/version-0.1.0--preview.1-blue)](./) [![License](https://img.shields.io/badge/license-MIT-green)](./)
4
+
5
+ > **Schema authoring DSL for DataForge** -- define your ontology in code, compile, diff, push, and pull.
6
+
7
+ ---
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ npm install @dataforge/schema
13
+ ```
14
+
15
+ ---
16
+
17
+ ## Quick Start
18
+
19
+ Define your business model in a `dataforge.schema.ts` file:
20
+
21
+ ```typescript
22
+ import { objectType, string, number, boolean, date, link } from '@dataforge/schema';
23
+
24
+ export const Company = objectType('Company', {
25
+ name: string().required(),
26
+ industry: string(),
27
+ revenue: number(),
28
+ isActive: boolean().default(true),
29
+ });
30
+
31
+ export const Employee = objectType('Employee', {
32
+ name: string().required(),
33
+ email: string().email(),
34
+ salary: number().indexed(),
35
+ startDate: date(),
36
+ company: link.toOne(() => Company),
37
+ });
38
+ ```
39
+
40
+ Then use the CLI:
41
+
42
+ ```bash
43
+ dataforge schema diff # compare local vs remote
44
+ dataforge schema push --yes # apply changes
45
+ dataforge schema pull # generate from remote
46
+ dataforge schema check # verify lockfile integrity
47
+ ```
48
+
49
+ ---
50
+
51
+ ## API
52
+
53
+ ### Property Builders
54
+
55
+ | Builder | Type | Modifiers |
56
+ |---------|------|-----------|
57
+ | `string()` | string | `.required()`, `.indexed()`, `.unique()`, `.default(v)`, `.description(s)`, `.email()`, `.enum([...])` |
58
+ | `number()` | number | `.required()`, `.indexed()`, `.unique()`, `.default(v)`, `.min(n)`, `.max(n)` |
59
+ | `boolean()` | boolean | `.required()`, `.default(v)` |
60
+ | `date()` | date | `.required()`, `.indexed()`, `.datetime()` |
61
+ | `object()` | object | `.required()` |
62
+ | `array()` | array | `.required()` |
63
+
64
+ ### Link Builders
65
+
66
+ ```typescript
67
+ link.toOne(() => TargetType) // N:1 relationship
68
+ link.toMany(() => TargetType) // 1:N relationship
69
+ ```
70
+
71
+ Modifiers: `.inverseName(s)`, `.label(s)`, `.description(s)`
72
+
73
+ Lazy `() => Type` references support circular dependencies.
74
+
75
+ ### Object Type
76
+
77
+ ```typescript
78
+ objectType('ApiName', { ...fields })
79
+ .displayName('Human Name')
80
+ .description('A description')
81
+ .primaryKey('fieldName')
82
+ ```
83
+
84
+ ### Compiler
85
+
86
+ ```typescript
87
+ import { compile } from '@dataforge/schema';
88
+
89
+ const manifest = compile([Company, Employee]);
90
+ // -> OntologyManifest (deterministic IDs, sorted)
91
+ ```
92
+
93
+ ### Diff
94
+
95
+ ```typescript
96
+ import { diff, formatDiff } from '@dataforge/schema';
97
+
98
+ const result = diff(localManifest, remoteManifest);
99
+ console.log(formatDiff(result));
100
+ // + ObjectType: Invoice (new)
101
+ // ~ ObjectType: Employee
102
+ // + property: department (string, required)
103
+ // ~ property: salary (indexed: false -> true)
104
+ ```
105
+
106
+ ### Push
107
+
108
+ ```typescript
109
+ import { planPush, executePush } from '@dataforge/schema';
110
+
111
+ const commands = planPush(diffResult, remoteManifest, { workspaceId });
112
+ await executePush({ transport, commands, onProgress: console.log });
113
+ ```
114
+
115
+ ### Pull
116
+
117
+ ```typescript
118
+ import { emitSchema } from '@dataforge/schema';
119
+
120
+ const source = emitSchema(remoteManifest);
121
+ // -> valid TypeScript source using the DSL
122
+ ```
123
+
124
+ ### Lockfile
125
+
126
+ ```typescript
127
+ import { generateLockfile, verifyLockfile } from '@dataforge/schema';
128
+
129
+ const lock = generateLockfile(manifest);
130
+ const { drifted } = verifyLockfile(lock, currentManifest);
131
+ ```
132
+
133
+ ---
134
+
135
+ ## Dependencies
136
+
137
+ | Package | Role |
138
+ |---------|------|
139
+ | `@dataforge/sdk-types` | `OntologyManifest`, `PropertyDescriptor`, etc. |
140
+
141
+ No dependency on `@dataforge/sdk-client` -- the schema package is standalone. Only the CLI depends on both.
142
+
143
+ ---
144
+
145
+ ## See Also
146
+
147
+ - [SDK README](../../README.md) -- Getting started
148
+ - [CLI README](../cli/README.md) -- CLI commands
149
+ - [CHANGELOG](../../CHANGELOG.md) -- Version history
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Compile a set of ObjectTypeDefinitions into an OntologyManifest.
3
+ *
4
+ * Pipeline: definitions → resolve → validate → manifest
5
+ *
6
+ * Fixes over V1:
7
+ * - deterministicId uses SHA-256 truncated to 128 bits (not custom 64-bit hash)
8
+ * - espaceId included in ID seed to avoid cross-espace collisions
9
+ * - generatedAt configurable via options for test/lockfile determinism
10
+ * - relationshipType decoupled from label (uses linkName for stability)
11
+ * - interfaces array sorted on objectTypes for diff stability
12
+ * - compileProperty cleans undefined fields via compactRecord
13
+ */
14
+ import type { OntologyManifest } from '@dataforge/sdk-types';
15
+ import type { ObjectTypeDefinition, ActionDefinition, ResolvedSchema } from '../types.js';
16
+ export interface CompileOptions {
17
+ workspaceId?: string;
18
+ espaceId?: string;
19
+ actions?: ActionDefinition[];
20
+ /** Override generatedAt for deterministic output in tests/lockfiles */
21
+ generatedAt?: string;
22
+ }
23
+ /**
24
+ * Compile ObjectTypeDefinitions (and optional ActionDefinitions) into an OntologyManifest.
25
+ *
26
+ * @param definitions - Array of ObjectTypeDefinitions from DSL
27
+ * @param options - Optional workspaceId/espaceId, action definitions, generatedAt
28
+ * @throws if validation fails
29
+ */
30
+ export declare function compile(definitions: ObjectTypeDefinition[], options?: CompileOptions): OntologyManifest;
31
+ /**
32
+ * Compile an already-resolved and validated schema into a manifest.
33
+ * Exported for advanced use cases where resolve/validate are called separately.
34
+ */
35
+ export declare function compileResolved(schema: ResolvedSchema, options?: CompileOptions): OntologyManifest;
36
+ //# sourceMappingURL=compile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.d.ts","sourceRoot":"","sources":["../../src/compiler/compile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAuG,MAAM,sBAAsB,CAAC;AAClK,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA8H1F,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC7B,uEAAuE;IACvE,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CACrB,WAAW,EAAE,oBAAoB,EAAE,EACnC,OAAO,CAAC,EAAE,cAAc,GACvB,gBAAgB,CAUlB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,cAAc,GACvB,gBAAgB,CA0KlB"}
@@ -0,0 +1,295 @@
1
+ /**
2
+ * Compile a set of ObjectTypeDefinitions into an OntologyManifest.
3
+ *
4
+ * Pipeline: definitions → resolve → validate → manifest
5
+ *
6
+ * Fixes over V1:
7
+ * - deterministicId uses SHA-256 truncated to 128 bits (not custom 64-bit hash)
8
+ * - espaceId included in ID seed to avoid cross-espace collisions
9
+ * - generatedAt configurable via options for test/lockfile determinism
10
+ * - relationshipType decoupled from label (uses linkName for stability)
11
+ * - interfaces array sorted on objectTypes for diff stability
12
+ * - compileProperty cleans undefined fields via compactRecord
13
+ */
14
+ import { createHash } from 'node:crypto';
15
+ import { resolve } from './resolve.js';
16
+ import { validate } from './validate.js';
17
+ // ---------------------------------------------------------------------------
18
+ // Deterministic ID generation (SHA-256 based)
19
+ // ---------------------------------------------------------------------------
20
+ /**
21
+ * Generate a deterministic UUID from seed parts using SHA-256.
22
+ * Truncates to 128 bits and formats as RFC 4122 UUID with version 5 marker.
23
+ */
24
+ function deterministicId(parts) {
25
+ const seed = JSON.stringify(parts);
26
+ const bytes = Buffer.from(createHash('sha256').update(seed).digest().subarray(0, 16));
27
+ // UUID version 5 marker
28
+ bytes[6] = (bytes[6] & 0x0f) | 0x50;
29
+ // RFC 4122 variant
30
+ bytes[8] = (bytes[8] & 0x3f) | 0x80;
31
+ const hex = bytes.toString('hex');
32
+ return [
33
+ hex.slice(0, 8),
34
+ hex.slice(8, 12),
35
+ hex.slice(12, 16),
36
+ hex.slice(16, 20),
37
+ hex.slice(20, 32),
38
+ ].join('-');
39
+ }
40
+ /** Build the seed array for entity ID generation, including workspace + espace context */
41
+ function entityIdSeed(options, kind, ...names) {
42
+ return [
43
+ options?.workspaceId ?? '',
44
+ options?.espaceId ?? '',
45
+ kind,
46
+ ...names,
47
+ ];
48
+ }
49
+ // ---------------------------------------------------------------------------
50
+ // Helpers
51
+ // ---------------------------------------------------------------------------
52
+ function toDisplayName(apiName) {
53
+ return apiName
54
+ .replace(/_/g, ' ')
55
+ .replace(/([a-z])([A-Z])/g, '$1 $2')
56
+ .replace(/\b\w/g, c => c.toUpperCase());
57
+ }
58
+ /** Recursively sort object keys for deterministic JSON serialization */
59
+ function sortKeysDeep(val) {
60
+ if (val === null || val === undefined)
61
+ return val;
62
+ if (Array.isArray(val))
63
+ return val.map(sortKeysDeep);
64
+ if (typeof val === 'object') {
65
+ const obj = val;
66
+ const sorted = {};
67
+ for (const key of Object.keys(obj).sort()) {
68
+ const v = sortKeysDeep(obj[key]);
69
+ if (v !== undefined)
70
+ sorted[key] = v;
71
+ }
72
+ return sorted;
73
+ }
74
+ return val;
75
+ }
76
+ /** Remove undefined values for cleaner manifest output */
77
+ function compactRecord(input) {
78
+ const output = {};
79
+ for (const [key, value] of Object.entries(input)) {
80
+ if (value !== undefined) {
81
+ output[key] = value;
82
+ }
83
+ }
84
+ return output;
85
+ }
86
+ // ---------------------------------------------------------------------------
87
+ // Property compilation
88
+ // ---------------------------------------------------------------------------
89
+ function compileProperty(fieldName, prop) {
90
+ // Keep the original dataType ('string') — do NOT promote to 'enum'.
91
+ // The backend normalises 'enum' → 'string'; keeping 'string' here avoids
92
+ // permanent phantom diffs in the roundtrip (DRIFT-1 fix).
93
+ const dataType = prop.dataType;
94
+ const enumValues = (prop.constraints?.enum && Array.isArray(prop.constraints.enum))
95
+ ? prop.constraints.enum
96
+ .filter((v) => typeof v === 'string')
97
+ : undefined;
98
+ // Preserve the author's enum order. It is user-visible in generated schemas
99
+ // and keeps defaults/example docs copy-paste stable.
100
+ const constraints = prop.constraints ? { ...prop.constraints } : undefined;
101
+ if (constraints?.enum && Array.isArray(constraints.enum) && enumValues) {
102
+ constraints.enum = [...enumValues];
103
+ }
104
+ return compactRecord({
105
+ name: fieldName,
106
+ apiName: fieldName,
107
+ description: prop.description,
108
+ dataType,
109
+ semanticType: prop.semanticType,
110
+ required: prop.required,
111
+ indexed: prop.indexed,
112
+ unique: prop.unique,
113
+ defaultValue: prop.defaultValue,
114
+ constraints,
115
+ enumValues: enumValues && enumValues.length > 0 ? enumValues : undefined,
116
+ mutableBy: prop.mutableBy && prop.mutableBy.length > 0 ? [...prop.mutableBy] : undefined,
117
+ });
118
+ }
119
+ /**
120
+ * Compile ObjectTypeDefinitions (and optional ActionDefinitions) into an OntologyManifest.
121
+ *
122
+ * @param definitions - Array of ObjectTypeDefinitions from DSL
123
+ * @param options - Optional workspaceId/espaceId, action definitions, generatedAt
124
+ * @throws if validation fails
125
+ */
126
+ export function compile(definitions, options) {
127
+ const resolved = resolve(definitions, options?.actions);
128
+ const validation = validate(resolved);
129
+ if (!validation.valid) {
130
+ const messages = validation.errors.map(e => ` - ${e.path}: ${e.message}`).join('\n');
131
+ throw new Error(`Schema validation failed:\n${messages}`);
132
+ }
133
+ return compileResolved(resolved, options);
134
+ }
135
+ /**
136
+ * Compile an already-resolved and validated schema into a manifest.
137
+ * Exported for advanced use cases where resolve/validate are called separately.
138
+ */
139
+ export function compileResolved(schema, options) {
140
+ const workspaceId = options?.workspaceId ?? '';
141
+ const espaceId = options?.espaceId ?? '';
142
+ // Sort types alphabetically for determinism
143
+ const sortedTypes = [...schema.objectTypes].sort((a, b) => a.apiName.localeCompare(b.apiName));
144
+ const objectTypes = sortedTypes.map(ot => {
145
+ const properties = Object.entries(ot.properties)
146
+ .sort(([a], [b]) => a.localeCompare(b))
147
+ .map(([name, prop]) => compileProperty(name, prop));
148
+ const interfaces = [...(ot.interfaces ?? [])].sort((a, b) => a.localeCompare(b));
149
+ return compactRecord({
150
+ id: deterministicId(entityIdSeed(options, 'objectType', ot.apiName)),
151
+ apiName: ot.apiName,
152
+ displayName: ot.displayName ?? toDisplayName(ot.apiName),
153
+ description: ot.description,
154
+ status: 'active',
155
+ properties,
156
+ interfaces: interfaces.length > 0 ? interfaces : undefined,
157
+ primaryKey: ot.primaryKey,
158
+ metadata: ot.metadata && Object.keys(ot.metadata).length > 0 ? ot.metadata : undefined,
159
+ });
160
+ });
161
+ // Collect all links across types
162
+ const linkTypes = [];
163
+ for (const ot of sortedTypes) {
164
+ const sortedLinks = Object.entries(ot.links).sort(([a], [b]) => a.localeCompare(b));
165
+ for (const [linkName, linkDef] of sortedLinks) {
166
+ const linkApiName = `${ot.apiName}__${linkName}`;
167
+ linkTypes.push({
168
+ id: deterministicId(entityIdSeed(options, 'linkType', linkApiName)),
169
+ apiName: linkApiName,
170
+ sourceTypeApiName: ot.apiName,
171
+ targetTypeApiName: linkDef.targetApiName,
172
+ // Use linkName (stable identifier), not label (user-facing text)
173
+ relationshipType: linkName,
174
+ cardinality: linkDef.cardinality,
175
+ label: linkDef.label,
176
+ inverseName: linkDef.inverseName,
177
+ properties: [],
178
+ });
179
+ }
180
+ }
181
+ // Sort linkTypes for determinism
182
+ linkTypes.sort((a, b) => a.apiName.localeCompare(b.apiName));
183
+ // Compile actions
184
+ const sortedActions = [...(schema.actions ?? [])].sort((a, b) => {
185
+ const cmp = a.objectTypeApiName.localeCompare(b.objectTypeApiName);
186
+ return cmp !== 0 ? cmp : a.apiName.localeCompare(b.apiName);
187
+ });
188
+ const actions = sortedActions.map(act => {
189
+ const actRecord = act;
190
+ // Compile effects with V1 kind support
191
+ const compiledEffects = act.effects.length > 0
192
+ ? act.effects.map(e => {
193
+ const eRecord = e;
194
+ const kind = eRecord.kind;
195
+ if (kind && kind !== 'set') {
196
+ // createRelated / link / unlink effects
197
+ return compactRecord({
198
+ kind,
199
+ linkName: eRecord.linkName,
200
+ targetType: typeof eRecord.targetType === 'function'
201
+ ? eRecord.targetType().apiName
202
+ : eRecord.targetType,
203
+ fields: eRecord.fields,
204
+ ref: eRecord.ref,
205
+ });
206
+ }
207
+ // Legacy 'set' effect (field + value)
208
+ return compactRecord({ kind: kind ?? 'set', field: eRecord.field, value: eRecord.value });
209
+ })
210
+ : undefined;
211
+ // Compute definitionHash — SHA-256 of behavioral fields
212
+ const behavioralDef = {
213
+ targetType: act.objectTypeApiName,
214
+ inputSchema: act.parameters,
215
+ preconditions: act.conditions,
216
+ effects: compiledEffects,
217
+ executionMode: actRecord.executionMode ?? 'twin_apply',
218
+ limits: actRecord.limits,
219
+ risk: actRecord.risk,
220
+ requiredScopes: act.requiredScopes.length > 0
221
+ ? [...act.requiredScopes].sort((a2, b2) => a2.localeCompare(b2))
222
+ : undefined,
223
+ };
224
+ const behavioralJson = JSON.stringify(sortKeysDeep(behavioralDef));
225
+ const definitionHash = createHash('sha256').update(behavioralJson, 'utf8').digest('hex');
226
+ return compactRecord({
227
+ id: deterministicId(entityIdSeed(options, 'action', act.objectTypeApiName, act.apiName)),
228
+ apiName: act.apiName,
229
+ displayName: act.displayName ?? toDisplayName(act.apiName),
230
+ description: act.description,
231
+ objectTypeApiName: act.objectTypeApiName,
232
+ actionType: act.actionType,
233
+ trigger: act.trigger,
234
+ parameters: act.parameters.map(p => {
235
+ const pRecord = p;
236
+ return compactRecord({
237
+ name: p.name,
238
+ apiName: p.name,
239
+ dataType: p.dataType,
240
+ required: p.required,
241
+ defaultValue: p.defaultValue,
242
+ description: p.description,
243
+ sensitive: pRecord.sensitive,
244
+ ref: pRecord.ref,
245
+ });
246
+ }),
247
+ conditions: act.conditions.length > 0
248
+ ? act.conditions.map(c => ({ field: c.field, operator: c.operator, value: c.value }))
249
+ : undefined,
250
+ effects: compiledEffects,
251
+ requiredScopes: act.requiredScopes.length > 0
252
+ ? [...act.requiredScopes].sort((a2, b2) => a2.localeCompare(b2))
253
+ : undefined,
254
+ timeout: act.timeout,
255
+ // V1 DSL fields
256
+ definitionHash,
257
+ executionMode: actRecord.executionMode ?? 'twin_apply',
258
+ risk: actRecord.risk,
259
+ limits: actRecord.limits,
260
+ // Extended action fields (workflow/agent integration)
261
+ inputMapping: actRecord.inputMapping,
262
+ outputMapping: actRecord.outputMapping,
263
+ retryConfig: actRecord.retryConfig,
264
+ implementationType: actRecord.implementationType,
265
+ workflowId: actRecord.workflowId,
266
+ agentId: actRecord.agentId,
267
+ // V2 Model Assurance metadata
268
+ metadata: actRecord.metadata && typeof actRecord.metadata === 'object' && Object.keys(actRecord.metadata).length > 0
269
+ ? actRecord.metadata
270
+ : undefined,
271
+ });
272
+ });
273
+ // Compile interfaces
274
+ const sortedInterfaces = [...(schema.interfaces ?? [])].sort((a, b) => a.apiName.localeCompare(b.apiName));
275
+ const interfaces = sortedInterfaces.map(iface => compactRecord({
276
+ id: deterministicId(entityIdSeed(options, 'interface', iface.apiName)),
277
+ apiName: iface.apiName,
278
+ displayName: iface.displayName ?? toDisplayName(iface.apiName),
279
+ description: iface.description,
280
+ sharedProperties: Object.entries(iface.properties)
281
+ .sort(([a], [b]) => a.localeCompare(b))
282
+ .map(([name, prop]) => compileProperty(name, prop)),
283
+ }));
284
+ return {
285
+ version: '1.0',
286
+ generatedAt: options?.generatedAt ?? new Date().toISOString(),
287
+ workspaceId,
288
+ espaceId,
289
+ objectTypes,
290
+ linkTypes,
291
+ interfaces,
292
+ actions,
293
+ };
294
+ }
295
+ //# sourceMappingURL=compile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile.js","sourceRoot":"","sources":["../../src/compiler/compile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Resolve lazy link references and build a flat, materialized schema graph.
3
+ */
4
+ import type { ObjectTypeDefinition, ActionDefinition, ResolvedSchema } from '../types.js';
5
+ /**
6
+ * Resolve all lazy `() => Type` link references in a set of object type definitions,
7
+ * and resolve action target types.
8
+ *
9
+ * @param definitions - Array of ObjectTypeDefinitions (from DSL `objectType()` calls)
10
+ * @param actionDefs - Optional array of ActionDefinitions (from DSL `action()` calls)
11
+ * @returns ResolvedSchema with all references materialized
12
+ */
13
+ export declare function resolve(definitions: ObjectTypeDefinition[], actionDefs?: ActionDefinition[]): ResolvedSchema;
14
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/compiler/resolve.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,oBAAoB,EAGpB,gBAAgB,EAChB,cAAc,EAKf,MAAM,aAAa,CAAC;AAOrB;;;;;;;GAOG;AACH,wBAAgB,OAAO,CACrB,WAAW,EAAE,oBAAoB,EAAE,EACnC,UAAU,CAAC,EAAE,gBAAgB,EAAE,GAC9B,cAAc,CAuIhB"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Resolve lazy link references and build a flat, materialized schema graph.
3
+ */
4
+ import { materializeProperty } from '../dsl/property.js';
5
+ import { materializeLink } from '../dsl/link.js';
6
+ import { materializeAction } from '../dsl/action.js';
7
+ import { materializeInterface } from '../dsl/interface.js';
8
+ import { materializeObjectType } from '../dsl/object-type.js';
9
+ /**
10
+ * Resolve all lazy `() => Type` link references in a set of object type definitions,
11
+ * and resolve action target types.
12
+ *
13
+ * @param definitions - Array of ObjectTypeDefinitions (from DSL `objectType()` calls)
14
+ * @param actionDefs - Optional array of ActionDefinitions (from DSL `action()` calls)
15
+ * @returns ResolvedSchema with all references materialized
16
+ */
17
+ export function resolve(definitions, actionDefs) {
18
+ const materializedDefinitions = definitions.map(def => materializeObjectType(def));
19
+ const knownApiNames = new Set(materializedDefinitions.map(d => d.apiName));
20
+ // Collect all interfaces from type definitions
21
+ const interfaceMap = new Map();
22
+ const objectTypes = materializedDefinitions.map(def => {
23
+ const properties = {};
24
+ const links = {};
25
+ const implementedInterfaces = [];
26
+ // Resolve interfaces — merge their properties into this type
27
+ for (const rawIface of def.interfaces ?? []) {
28
+ const iface = materializeInterface(rawIface);
29
+ if (!interfaceMap.has(iface.apiName)) {
30
+ const ifaceProps = {};
31
+ for (const [fieldName, field] of Object.entries(iface.fields)) {
32
+ ifaceProps[fieldName] = materializeProperty(field);
33
+ }
34
+ interfaceMap.set(iface.apiName, {
35
+ apiName: iface.apiName,
36
+ displayName: iface.displayName,
37
+ description: iface.description,
38
+ properties: ifaceProps,
39
+ });
40
+ }
41
+ implementedInterfaces.push(iface.apiName);
42
+ // Merge interface properties into the type (interface props are defaults, type props override)
43
+ const resolved = interfaceMap.get(iface.apiName);
44
+ for (const [fieldName, prop] of Object.entries(resolved.properties)) {
45
+ if (!(fieldName in def.fields)) {
46
+ properties[fieldName] = prop;
47
+ }
48
+ }
49
+ }
50
+ for (const [fieldName, field] of Object.entries(def.fields)) {
51
+ const materialized = field._kind === 'link'
52
+ ? materializeLink(field)
53
+ : materializeProperty(field);
54
+ if (materialized._kind === 'property') {
55
+ properties[fieldName] = materialized;
56
+ }
57
+ else {
58
+ // Invoke the lazy thunk to get the target ObjectTypeDefinition
59
+ let targetApiName;
60
+ try {
61
+ const targetDef = materialized.target();
62
+ targetApiName = targetDef.apiName;
63
+ }
64
+ catch {
65
+ throw new Error(`Failed to resolve link "${fieldName}" on type "${def.apiName}": target thunk threw an error`);
66
+ }
67
+ if (!knownApiNames.has(targetApiName)) {
68
+ throw new Error(`Link "${fieldName}" on type "${def.apiName}" points to unknown type "${targetApiName}"`);
69
+ }
70
+ links[fieldName] = {
71
+ _kind: 'link',
72
+ targetApiName,
73
+ cardinality: materialized.cardinality,
74
+ inverseName: materialized.inverseName,
75
+ label: materialized.label,
76
+ description: materialized.description,
77
+ };
78
+ }
79
+ }
80
+ return {
81
+ apiName: def.apiName,
82
+ displayName: def.displayName,
83
+ description: def.description,
84
+ primaryKey: def.primaryKey,
85
+ properties,
86
+ links,
87
+ interfaces: implementedInterfaces,
88
+ metadata: def.metadata,
89
+ };
90
+ });
91
+ // Resolve actions
92
+ const actions = (actionDefs ?? []).map(rawAction => {
93
+ const actionDef = materializeAction(rawAction);
94
+ let objectTypeApiName;
95
+ try {
96
+ const targetDef = actionDef.objectType();
97
+ objectTypeApiName = targetDef.apiName;
98
+ }
99
+ catch {
100
+ throw new Error(`Failed to resolve action "${actionDef.apiName}": target type thunk threw an error. Did you call .on(() => Type)?`);
101
+ }
102
+ if (!knownApiNames.has(objectTypeApiName)) {
103
+ throw new Error(`Action "${actionDef.apiName}" targets unknown type "${objectTypeApiName}"`);
104
+ }
105
+ return {
106
+ apiName: actionDef.apiName,
107
+ objectTypeApiName,
108
+ displayName: actionDef.displayName,
109
+ description: actionDef.description,
110
+ actionType: actionDef.actionType,
111
+ trigger: actionDef.trigger,
112
+ parameters: actionDef.parameters,
113
+ conditions: actionDef.conditions,
114
+ effects: actionDef.effects,
115
+ requiredScopes: actionDef.requiredScopes,
116
+ timeout: actionDef.timeout,
117
+ executionMode: actionDef.executionMode,
118
+ risk: actionDef.risk,
119
+ limits: actionDef.limits,
120
+ inputMapping: actionDef.inputMapping,
121
+ outputMapping: actionDef.outputMapping,
122
+ retryConfig: actionDef.retryConfig,
123
+ implementationType: actionDef.implementationType,
124
+ workflowId: actionDef.workflowId,
125
+ agentId: actionDef.agentId,
126
+ metadata: actionDef.metadata,
127
+ };
128
+ });
129
+ const interfaces = [...interfaceMap.values()];
130
+ return { objectTypes, actions, interfaces };
131
+ }
132
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/compiler/resolve.ts"],"names":[],"mappings":"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"}