@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,47 @@
1
+ /**
2
+ * @dataforge/schema — Schema authoring DSL
3
+ *
4
+ * Define, compile, diff, push, and pull ontology schemas.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * import { objectType, string, number, boolean, date, link, compile, diff } from '@dataforge/schema';
9
+ *
10
+ * const Company = objectType('Company', {
11
+ * name: string().required(),
12
+ * industry: string(),
13
+ * revenue: number(),
14
+ * isActive: boolean().default(true),
15
+ * });
16
+ *
17
+ * const Employee = objectType('Employee', {
18
+ * name: string().required(),
19
+ * email: string().email(),
20
+ * salary: number().indexed(),
21
+ * startDate: date(),
22
+ * company: link.toOne(() => Company),
23
+ * });
24
+ *
25
+ * const manifest = compile([Company, Employee]);
26
+ * ```
27
+ */
28
+ export { string, number, boolean, date, object, array, json, money } from './dsl/property.js';
29
+ import type { PropertyBuilderLike } from './dsl/property.js';
30
+ export declare function enumType(name: string, values: readonly string[]): PropertyBuilderLike;
31
+ export declare function enum_(values: readonly string[]): PropertyBuilderLike;
32
+ export { link } from './dsl/link.js';
33
+ export { objectType, materializeObjectType } from './dsl/object-type.js';
34
+ export { action, materializeAction, now, actor, target, input, workspace } from './dsl/action.js';
35
+ export { defineInterface, materializeInterface } from './dsl/interface.js';
36
+ export { sourceRef, decision, evidence, role, exceptionPath, term, lintModelAssurance, runProcessTests, modelChangePlan, } from './model-assurance.js';
37
+ export { resolve } from './compiler/resolve.js';
38
+ export { validate } from './compiler/validate.js';
39
+ export { compile } from './compiler/compile.js';
40
+ export { diff } from './diff/diff.js';
41
+ export { formatDiff } from './diff/format.js';
42
+ export { planPush } from './push/plan.js';
43
+ export { executePush } from './push/execute.js';
44
+ export { emitSchema } from './pull/emit-schema.js';
45
+ export { generateLockfile, verifyLockfile, serializeLockfile, parseLockfile } from './lock/lockfile.js';
46
+ export type { PropertyDefinition, LinkDefinition, ObjectTypeDefinition, ModelSourceRef, ModelDecision, ModelEvidence, ModelRole, ModelExceptionPath, ModelTerm, ModelAssuranceMetadata, ModelAssuranceIssue, ModelAssuranceLintResult, ProcessTestScenario, ProcessTestResult, ModelChangePlan, ActionDefinition, ActionParameterDefinition, ActionConditionDefinition, ActionEffectDefinition, ActionTrigger, ActionType, ActionRiskLevel, ActionExecutionMode, ActionEffectKind, ActionLimits, SymbolicRef, ConstValue, EffectFieldValue, ResolvedSchema, ResolvedObjectType, ResolvedLink, ResolvedAction, InterfaceDefinition, ResolvedInterface, ValidationResult, ValidationError, DiffResult, DiffChange, DiffKind, DiffEntity, CqrsCommand, PushProgress, LockfileContent, DataType, } from './types.js';
47
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG9F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,mBAAmB,CAQrF;AACD,wBAAgB,KAAK,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,mBAAmB,CAEpE;AACD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAClG,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EACL,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,aAAa,EACb,IAAI,EACJ,kBAAkB,EAClB,eAAe,EACf,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGhD,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAG9C,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGxG,YAAY,EACV,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,aAAa,EACb,aAAa,EACb,SAAS,EACT,kBAAkB,EAClB,SAAS,EACT,sBAAsB,EACtB,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,yBAAyB,EACzB,yBAAyB,EACzB,sBAAsB,EACtB,aAAa,EACb,UAAU,EACV,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,UAAU,EACV,QAAQ,EACR,UAAU,EACV,WAAW,EACX,YAAY,EACZ,eAAe,EACf,QAAQ,GACT,MAAM,YAAY,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,63 @@
1
+ /**
2
+ * @dataforge/schema — Schema authoring DSL
3
+ *
4
+ * Define, compile, diff, push, and pull ontology schemas.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * import { objectType, string, number, boolean, date, link, compile, diff } from '@dataforge/schema';
9
+ *
10
+ * const Company = objectType('Company', {
11
+ * name: string().required(),
12
+ * industry: string(),
13
+ * revenue: number(),
14
+ * isActive: boolean().default(true),
15
+ * });
16
+ *
17
+ * const Employee = objectType('Employee', {
18
+ * name: string().required(),
19
+ * email: string().email(),
20
+ * salary: number().indexed(),
21
+ * startDate: date(),
22
+ * company: link.toOne(() => Company),
23
+ * });
24
+ *
25
+ * const manifest = compile([Company, Employee]);
26
+ * ```
27
+ */
28
+ // DSL builders
29
+ export { string, number, boolean, date, object, array, json, money } from './dsl/property.js';
30
+ // Convenience re-exports for enum properties.
31
+ import { string as _stringBuilder } from './dsl/property.js';
32
+ export function enumType(name, values) {
33
+ if (typeof name !== 'string' || name.trim().length === 0) {
34
+ throw new Error('enumType(name, values) requires a non-empty enum name.');
35
+ }
36
+ if (!Array.isArray(values) || values.length === 0) {
37
+ throw new Error(`enumType("${name}") requires values. Use enumType("${name}", [...]) and reuse the returned builder.`);
38
+ }
39
+ return _stringBuilder().enum([...values]).enumName(name.trim());
40
+ }
41
+ export function enum_(values) {
42
+ return _stringBuilder().enum([...values]);
43
+ }
44
+ export { link } from './dsl/link.js';
45
+ export { objectType, materializeObjectType } from './dsl/object-type.js';
46
+ export { action, materializeAction, now, actor, target, input, workspace } from './dsl/action.js';
47
+ export { defineInterface, materializeInterface } from './dsl/interface.js';
48
+ export { sourceRef, decision, evidence, role, exceptionPath, term, lintModelAssurance, runProcessTests, modelChangePlan, } from './model-assurance.js';
49
+ // Compiler
50
+ export { resolve } from './compiler/resolve.js';
51
+ export { validate } from './compiler/validate.js';
52
+ export { compile } from './compiler/compile.js';
53
+ // Diff
54
+ export { diff } from './diff/diff.js';
55
+ export { formatDiff } from './diff/format.js';
56
+ // Push
57
+ export { planPush } from './push/plan.js';
58
+ export { executePush } from './push/execute.js';
59
+ // Pull
60
+ export { emitSchema } from './pull/emit-schema.js';
61
+ // Lockfile
62
+ export { generateLockfile, verifyLockfile, serializeLockfile, parseLockfile } from './lock/lockfile.js';
63
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,eAAe;AACf,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC9F,8CAA8C;AAC9C,OAAO,EAAE,MAAM,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAE7D,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,MAAyB;IAC9D,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzD,MAAM,IAAI,KAAK,CAAC,wDAAwD,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CAAC,aAAa,IAAI,qCAAqC,IAAI,2CAA2C,CAAC,CAAC;IACzH,CAAC;IACD,OAAO,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,CAAmC,CAAC;AACpG,CAAC;AACD,MAAM,UAAU,KAAK,CAAC,MAAyB;IAC7C,OAAO,cAAc,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAmC,CAAC;AAC9E,CAAC;AACD,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,UAAU,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAClG,OAAO,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC3E,OAAO,EACL,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,IAAI,EACJ,aAAa,EACb,IAAI,EACJ,kBAAkB,EAClB,eAAe,EACf,eAAe,GAChB,MAAM,sBAAsB,CAAC;AAE9B,WAAW;AACX,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAEhD,OAAO;AACP,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO;AACP,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO;AACP,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEnD,WAAW;AACX,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Lockfile — SHA-256 manifest hash for drift detection.
3
+ *
4
+ * `dataforge.lock` stores the hash of the last pushed/pulled manifest,
5
+ * so `schema check` can detect local drift without a network call.
6
+ */
7
+ import type { OntologyManifest } from '@dataforge/sdk-types';
8
+ import type { LockfileContent } from '../types.js';
9
+ /**
10
+ * Generate a lockfile content object from a compiled OntologyManifest.
11
+ */
12
+ export declare function generateLockfile(manifest: OntologyManifest): LockfileContent;
13
+ /**
14
+ * Verify whether a lockfile still matches a manifest.
15
+ *
16
+ * @param lockContent - Parsed lockfile content
17
+ * @param manifest - Current compiled manifest
18
+ * @returns `{ drifted: false }` if hash matches, `{ drifted: true }` otherwise
19
+ */
20
+ export declare function verifyLockfile(lockContent: LockfileContent, manifest: OntologyManifest): {
21
+ drifted: boolean;
22
+ };
23
+ /**
24
+ * Serialize a LockfileContent to a JSON string for writing to disk.
25
+ */
26
+ export declare function serializeLockfile(content: LockfileContent): string;
27
+ /**
28
+ * Parse a lockfile JSON string.
29
+ */
30
+ export declare function parseLockfile(raw: string): LockfileContent;
31
+ //# sourceMappingURL=lockfile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lockfile.d.ts","sourceRoot":"","sources":["../../src/lock/lockfile.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAiCnD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,eAAe,CAe5E;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,eAAe,EAC5B,QAAQ,EAAE,gBAAgB,GACzB;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAetB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAElE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,eAAe,CAE1D"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Lockfile — SHA-256 manifest hash for drift detection.
3
+ *
4
+ * `dataforge.lock` stores the hash of the last pushed/pulled manifest,
5
+ * so `schema check` can detect local drift without a network call.
6
+ */
7
+ import { createHash } from 'node:crypto';
8
+ /**
9
+ * Produce a deterministic JSON string from a manifest.
10
+ * Strips volatile fields (generatedAt) and sorts keys.
11
+ */
12
+ function sortKeysDeep(value) {
13
+ if (Array.isArray(value)) {
14
+ return value.map(sortKeysDeep);
15
+ }
16
+ if (value && typeof value === 'object') {
17
+ const sorted = {};
18
+ for (const key of Object.keys(value).sort()) {
19
+ sorted[key] = sortKeysDeep(value[key]);
20
+ }
21
+ return sorted;
22
+ }
23
+ return value;
24
+ }
25
+ function canonicalize(manifest) {
26
+ const stable = {
27
+ version: manifest.version,
28
+ workspaceId: manifest.workspaceId,
29
+ espaceId: manifest.espaceId,
30
+ objectTypes: manifest.objectTypes,
31
+ linkTypes: manifest.linkTypes,
32
+ interfaces: manifest.interfaces,
33
+ actions: manifest.actions,
34
+ };
35
+ return JSON.stringify(sortKeysDeep(stable));
36
+ }
37
+ /**
38
+ * Generate a lockfile content object from a compiled OntologyManifest.
39
+ */
40
+ export function generateLockfile(manifest) {
41
+ const canonical = canonicalize(manifest);
42
+ const hash = createHash('sha256').update(canonical).digest('hex');
43
+ // Use v2 when manifest has a human-readable version (e.g. "2026-04-25.1")
44
+ const isHumanVersion = manifest.version && /^\d{4}-\d{2}-\d{2}\.\d+$/.test(manifest.version);
45
+ return {
46
+ version: isHumanVersion ? '2' : '1',
47
+ ...(isHumanVersion ? { manifestVersion: manifest.version } : {}),
48
+ manifestHash: hash,
49
+ objectTypes: manifest.objectTypes.map(t => t.apiName).sort(),
50
+ linkTypes: manifest.linkTypes.map(l => l.apiName).sort(),
51
+ generatedAt: new Date().toISOString(),
52
+ };
53
+ }
54
+ /**
55
+ * Verify whether a lockfile still matches a manifest.
56
+ *
57
+ * @param lockContent - Parsed lockfile content
58
+ * @param manifest - Current compiled manifest
59
+ * @returns `{ drifted: false }` if hash matches, `{ drifted: true }` otherwise
60
+ */
61
+ export function verifyLockfile(lockContent, manifest) {
62
+ // Fast path: compare human-readable version when both sides have it
63
+ if (lockContent.version === '2' &&
64
+ lockContent.manifestVersion &&
65
+ manifest.version &&
66
+ /^\d{4}-\d{2}-\d{2}\.\d+$/.test(manifest.version)) {
67
+ return { drifted: lockContent.manifestVersion !== manifest.version };
68
+ }
69
+ // Fall back to hash comparison
70
+ const canonical = canonicalize(manifest);
71
+ const currentHash = createHash('sha256').update(canonical).digest('hex');
72
+ return { drifted: currentHash !== lockContent.manifestHash };
73
+ }
74
+ /**
75
+ * Serialize a LockfileContent to a JSON string for writing to disk.
76
+ */
77
+ export function serializeLockfile(content) {
78
+ return JSON.stringify(content, null, 2) + '\n';
79
+ }
80
+ /**
81
+ * Parse a lockfile JSON string.
82
+ */
83
+ export function parseLockfile(raw) {
84
+ return JSON.parse(raw);
85
+ }
86
+ //# sourceMappingURL=lockfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../../src/lock/lockfile.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { ModelAssuranceLintResult, ModelAssuranceMetadata, ModelChangePlan, ModelDecision, ModelEvidence, ModelExceptionPath, ModelRole, ModelSourceRef, ModelTerm, ProcessTestResult, ProcessTestScenario, ResolvedSchema } from './types.js';
2
+ type Entity = {
3
+ apiName: string;
4
+ objectTypeApiName?: string;
5
+ metadata?: Record<string, unknown>;
6
+ };
7
+ type SchemaLike = ResolvedSchema | {
8
+ objectTypes?: Entity[];
9
+ actions?: Entity[];
10
+ };
11
+ type MetadataPatch = Partial<ModelAssuranceMetadata>;
12
+ export declare function mergeModelAssuranceMetadata(existing: Record<string, unknown> | undefined, patch: MetadataPatch): Record<string, unknown> & {
13
+ modelAssurance: ModelAssuranceMetadata;
14
+ };
15
+ export declare function sourceRef(input: string | Omit<ModelSourceRef, 'kind'>): ModelSourceRef;
16
+ export declare function decision(input: string | Omit<ModelDecision, 'kind'>): ModelDecision;
17
+ export declare function evidence(input: string | Omit<ModelEvidence, 'kind' | 'required'> & {
18
+ required?: boolean;
19
+ }): ModelEvidence;
20
+ export declare function role(input: string | Omit<ModelRole, 'kind'>): ModelRole;
21
+ export declare function exceptionPath(input: string | Omit<ModelExceptionPath, 'kind'>): ModelExceptionPath;
22
+ export declare function term(input: string | Omit<ModelTerm, 'kind'>): ModelTerm;
23
+ export declare function lintModelAssurance(schema: SchemaLike): ModelAssuranceLintResult;
24
+ export declare function runProcessTests(schema: SchemaLike, scenarios: readonly ProcessTestScenario[]): ProcessTestResult;
25
+ export declare function modelChangePlan(before: SchemaLike, after: SchemaLike): ModelChangePlan;
26
+ export {};
27
+ //# sourceMappingURL=model-assurance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-assurance.d.ts","sourceRoot":"","sources":["../src/model-assurance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,wBAAwB,EACxB,sBAAsB,EACtB,eAAe,EACf,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,SAAS,EACT,cAAc,EACd,SAAS,EACT,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACf,MAAM,YAAY,CAAC;AAEpB,KAAK,MAAM,GAAG;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,CAAC;AAEF,KAAK,UAAU,GAAG,cAAc,GAAG;IACjC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,KAAK,aAAa,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAAC;AAmBrD,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC7C,KAAK,EAAE,aAAa,GACnB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,cAAc,EAAE,sBAAsB,CAAA;CAAE,CActE;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,GAAG,cAAc,CAEtF;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG,aAAa,CAInF;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,aAAa,CAIzH;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,SAAS,CAEvE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,GAAG,kBAAkB,CAIlG;AAED,wBAAgB,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,SAAS,CAIvE;AAoBD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,wBAAwB,CAkD/E;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,mBAAmB,EAAE,GAAG,iBAAiB,CAyBhH;AAgBD,wBAAgB,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,GAAG,eAAe,CAyBtF"}
@@ -0,0 +1,194 @@
1
+ import { createHash } from 'node:crypto';
2
+ function asRecord(value) {
3
+ return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
4
+ }
5
+ function asArray(value) {
6
+ return Array.isArray(value) ? value : [];
7
+ }
8
+ function modelMeta(meta) {
9
+ return asRecord(asRecord(meta).modelAssurance);
10
+ }
11
+ function append(left, right) {
12
+ const merged = [...(left ?? []), ...(right ?? [])];
13
+ return merged.length > 0 ? merged : undefined;
14
+ }
15
+ export function mergeModelAssuranceMetadata(existing, patch) {
16
+ const current = modelMeta(existing);
17
+ return {
18
+ ...(existing ?? {}),
19
+ modelAssurance: {
20
+ ...current,
21
+ sourceRefs: append(current.sourceRefs, patch.sourceRefs),
22
+ decisions: append(current.decisions, patch.decisions),
23
+ evidence: append(current.evidence, patch.evidence),
24
+ roles: append(current.roles, patch.roles),
25
+ exceptionPaths: append(current.exceptionPaths, patch.exceptionPaths),
26
+ terms: append(current.terms, patch.terms),
27
+ },
28
+ };
29
+ }
30
+ export function sourceRef(input) {
31
+ return typeof input === 'string' ? { kind: 'sourceRef', uri: input } : { kind: 'sourceRef', ...input };
32
+ }
33
+ export function decision(input) {
34
+ return typeof input === 'string'
35
+ ? { kind: 'decision', id: input, criteria: [] }
36
+ : { kind: 'decision', ...input, criteria: input.criteria ?? [] };
37
+ }
38
+ export function evidence(input) {
39
+ return typeof input === 'string'
40
+ ? { kind: 'evidence', id: input, required: true }
41
+ : { kind: 'evidence', required: input.required ?? true, ...input };
42
+ }
43
+ export function role(input) {
44
+ return typeof input === 'string' ? { kind: 'role', id: input } : { kind: 'role', ...input };
45
+ }
46
+ export function exceptionPath(input) {
47
+ return typeof input === 'string'
48
+ ? { kind: 'exceptionPath', id: input, when: input }
49
+ : { kind: 'exceptionPath', ...input };
50
+ }
51
+ export function term(input) {
52
+ return typeof input === 'string'
53
+ ? { kind: 'term', name: input, definition: input }
54
+ : { kind: 'term', ...input };
55
+ }
56
+ function issue(code, severity, path, message) {
57
+ return { code, severity, path, message };
58
+ }
59
+ function objectTypes(schema) {
60
+ return [...(schema.objectTypes ?? [])];
61
+ }
62
+ function actions(schema) {
63
+ return [...(schema.actions ?? [])];
64
+ }
65
+ function entityPath(entity, kind) {
66
+ return kind === 'action' && entity.objectTypeApiName
67
+ ? `action:${entity.objectTypeApiName}.${entity.apiName}`
68
+ : `${kind}:${entity.apiName}`;
69
+ }
70
+ export function lintModelAssurance(schema) {
71
+ const issues = [];
72
+ const allObjectTypes = objectTypes(schema);
73
+ const allActions = actions(schema);
74
+ for (const objectType of allObjectTypes) {
75
+ const meta = modelMeta(objectType.metadata);
76
+ const path = entityPath(objectType, 'objectType');
77
+ if (asArray(meta.sourceRefs).length === 0) {
78
+ issues.push(issue('MODEL_SOURCE_REF_MISSING', 'warning', path, `Object type "${objectType.apiName}" has no sourceRef`));
79
+ }
80
+ for (const t of asArray(meta.terms)) {
81
+ if (asArray(t.negativeDefinitions).length === 0) {
82
+ issues.push(issue('MODEL_TERM_NEGATIVE_DEFINITION_MISSING', 'info', `${path}.term(${t.name})`, `Term "${t.name}" has no negative definition`));
83
+ }
84
+ }
85
+ }
86
+ for (const action of allActions) {
87
+ const meta = modelMeta(action.metadata);
88
+ const path = entityPath(action, 'action');
89
+ if (asArray(meta.sourceRefs).length === 0)
90
+ issues.push(issue('MODEL_SOURCE_REF_MISSING', 'warning', path, `Action "${action.apiName}" has no sourceRef`));
91
+ if (asArray(meta.decisions).length === 0)
92
+ issues.push(issue('MODEL_DECISION_MISSING', 'warning', path, `Action "${action.apiName}" has no decision()`));
93
+ if (asArray(meta.evidence).length === 0)
94
+ issues.push(issue('MODEL_EVIDENCE_MISSING', 'warning', path, `Action "${action.apiName}" has no evidence()`));
95
+ if (asArray(meta.roles).length === 0)
96
+ issues.push(issue('MODEL_ROLE_MISSING', 'warning', path, `Action "${action.apiName}" has no role()`));
97
+ if (asArray(meta.exceptionPaths).length === 0)
98
+ issues.push(issue('MODEL_EXCEPTION_PATH_MISSING', 'info', path, `Action "${action.apiName}" has no exceptionPath()`));
99
+ }
100
+ const warningPenalty = issues.filter(i => i.severity === 'warning').length * 10;
101
+ const errorPenalty = issues.filter(i => i.severity === 'error').length * 25;
102
+ const infoPenalty = issues.filter(i => i.severity === 'info').length * 3;
103
+ const score = Math.max(0, 100 - warningPenalty - errorPenalty - infoPenalty);
104
+ const allMeta = [...allObjectTypes, ...allActions].map(e => modelMeta(e.metadata));
105
+ return {
106
+ version: 'dataforge.model-assurance.v1',
107
+ valid: !issues.some(i => i.severity === 'error'),
108
+ score,
109
+ issues,
110
+ gaps: issues.filter(i => i.severity !== 'info'),
111
+ stats: {
112
+ objectTypes: allObjectTypes.length,
113
+ actions: allActions.length,
114
+ decisions: allMeta.reduce((n, meta) => n + asArray(meta.decisions).length, 0),
115
+ evidence: allMeta.reduce((n, meta) => n + asArray(meta.evidence).length, 0),
116
+ roles: allMeta.reduce((n, meta) => n + asArray(meta.roles).length, 0),
117
+ exceptionPaths: allMeta.reduce((n, meta) => n + asArray(meta.exceptionPaths).length, 0),
118
+ terms: allMeta.reduce((n, meta) => n + asArray(meta.terms).length, 0),
119
+ },
120
+ };
121
+ }
122
+ export function runProcessTests(schema, scenarios) {
123
+ const lint = lintModelAssurance(schema);
124
+ const allActions = actions(schema);
125
+ const results = scenarios.map((scenario) => {
126
+ const action = allActions.find(a => a.apiName === scenario.action || `${a.objectTypeApiName}.${a.apiName}` === scenario.action);
127
+ const issues = [];
128
+ if (!action) {
129
+ issues.push(issue('MODEL_TEST_SCENARIO_FAILED', 'error', `scenario:${scenario.id}`, `Action "${scenario.action}" was not found`));
130
+ }
131
+ else {
132
+ const meta = modelMeta(action.metadata);
133
+ if (scenario.expect.hasDecision && asArray(meta.decisions).length === 0)
134
+ issues.push(issue('MODEL_DECISION_MISSING', 'error', `scenario:${scenario.id}`, 'Expected decision()'));
135
+ if (scenario.expect.hasEvidence && asArray(meta.evidence).length === 0)
136
+ issues.push(issue('MODEL_EVIDENCE_MISSING', 'error', `scenario:${scenario.id}`, 'Expected evidence()'));
137
+ if (scenario.expect.hasRole && asArray(meta.roles).length === 0)
138
+ issues.push(issue('MODEL_ROLE_MISSING', 'error', `scenario:${scenario.id}`, 'Expected role()'));
139
+ if (scenario.expect.hasExceptionPath && asArray(meta.exceptionPaths).length === 0)
140
+ issues.push(issue('MODEL_EXCEPTION_PATH_MISSING', 'error', `scenario:${scenario.id}`, 'Expected exceptionPath()'));
141
+ }
142
+ if (scenario.expect.maxGaps !== undefined && lint.gaps.length > scenario.expect.maxGaps) {
143
+ issues.push(issue('MODEL_TEST_SCENARIO_FAILED', 'error', `scenario:${scenario.id}`, `Expected at most ${scenario.expect.maxGaps} model gaps, got ${lint.gaps.length}`));
144
+ }
145
+ return { id: scenario.id, action: scenario.action, passed: issues.length === 0, issues };
146
+ });
147
+ return {
148
+ version: 'dataforge.process-test.v1',
149
+ passed: results.every(result => result.passed),
150
+ scenarios: results,
151
+ };
152
+ }
153
+ function stableHash(value) {
154
+ return createHash('sha256').update(JSON.stringify(sortKeys(value)), 'utf8').digest('hex');
155
+ }
156
+ function sortKeys(value) {
157
+ if (Array.isArray(value))
158
+ return value.map(sortKeys);
159
+ if (!value || typeof value !== 'object')
160
+ return value;
161
+ return Object.fromEntries(Object.entries(value).sort(([a], [b]) => a.localeCompare(b)).map(([k, v]) => [k, sortKeys(v)]));
162
+ }
163
+ function byName(items) {
164
+ return new Map(items.map(item => [item.objectTypeApiName ? `${item.objectTypeApiName}.${item.apiName}` : item.apiName, item]));
165
+ }
166
+ export function modelChangePlan(before, after) {
167
+ const changes = [];
168
+ for (const [entity, beforeItems, afterItems] of [
169
+ ['objectType', objectTypes(before), objectTypes(after)],
170
+ ['action', actions(before), actions(after)],
171
+ ]) {
172
+ const left = byName(beforeItems);
173
+ const right = byName(afterItems);
174
+ for (const [name, item] of left) {
175
+ if (!right.has(name))
176
+ changes.push({ kind: 'removed', entity, name, field: 'entity', before: item, requiresReview: true });
177
+ }
178
+ for (const [name, item] of right) {
179
+ const previous = left.get(name);
180
+ if (!previous) {
181
+ changes.push({ kind: 'added', entity, name, field: 'entity', after: item, requiresReview: true });
182
+ }
183
+ else if (stableHash(previous.metadata ?? {}) !== stableHash(item.metadata ?? {})) {
184
+ changes.push({ kind: 'modified', entity, name, field: 'metadata.modelAssurance', before: previous.metadata, after: item.metadata, requiresReview: true });
185
+ }
186
+ }
187
+ }
188
+ return {
189
+ version: 'dataforge.model-change-plan.v1',
190
+ hasBehavioralChanges: changes.some(c => c.requiresReview),
191
+ changes,
192
+ };
193
+ }
194
+ //# sourceMappingURL=model-assurance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-assurance.js","sourceRoot":"","sources":["../src/model-assurance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AA8BzC,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAgC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC7G,CAAC;AAED,SAAS,OAAO,CAAI,KAAc;IAChC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAY,CAAC,CAAC,CAAC,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,SAAS,CAAC,IAAa;IAC9B,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,cAAc,CAAsC,CAAC;AACtF,CAAC;AAED,SAAS,MAAM,CAAI,IAA8B,EAAE,KAA+B;IAChF,MAAM,MAAM,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;IACnD,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,QAA6C,EAC7C,KAAoB;IAEpB,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACpC,OAAO;QACL,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC;QACnB,cAAc,EAAE;YACd,GAAG,OAAO;YACV,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC;YACxD,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC;YACrD,QAAQ,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC;YAClD,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;YACzC,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,cAAc,CAAC;YACpE,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC;SAC1C;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAA4C;IACpE,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,KAAK,EAAE,CAAC;AACzG,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAA2C;IAClE,OAAO,OAAO,KAAK,KAAK,QAAQ;QAC9B,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;QAC/C,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAiF;IACxG,OAAO,OAAO,KAAK,KAAK,QAAQ;QAC9B,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;QACjD,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE,GAAG,KAAK,EAAE,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,KAAuC;IAC1D,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;AAC9F,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAgD;IAC5E,OAAO,OAAO,KAAK,KAAK,QAAQ;QAC9B,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;QACnD,CAAC,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,KAAK,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,KAAuC;IAC1D,OAAO,OAAO,KAAK,KAAK,QAAQ;QAC9B,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE;QAClD,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC;AACjC,CAAC;AAED,SAAS,KAAK,CAAC,IAAiC,EAAE,QAAyC,EAAE,IAAY,EAAE,OAAe;IACxH,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,WAAW,CAAC,MAAkB;IACrC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,IAAI,EAAE,CAAC,CAAa,CAAC;AACrD,CAAC;AAED,SAAS,OAAO,CAAC,MAAkB;IACjC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,CAAa,CAAC;AACjD,CAAC;AAED,SAAS,UAAU,CAAC,MAAc,EAAE,IAA6B;IAC/D,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,iBAAiB;QAClD,CAAC,CAAC,UAAU,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,OAAO,EAAE;QACxD,CAAC,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,MAAkB;IACnD,MAAM,MAAM,GAA0B,EAAE,CAAC;IACzC,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAEnC,KAAK,MAAM,UAAU,IAAI,cAAc,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAClD,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC;QAC1H,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,OAAO,CAAY,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,IAAI,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAChD,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,wCAAwC,EAAE,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC,IAAI,GAAG,EAAE,SAAS,CAAC,CAAC,IAAI,8BAA8B,CAAC,CAAC,CAAC;YACjJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC1C,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,0BAA0B,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,MAAM,CAAC,OAAO,oBAAoB,CAAC,CAAC,CAAC;QAC1J,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC;QACxJ,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,MAAM,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC;QACvJ,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,MAAM,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC;QAC5I,IAAI,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,8BAA8B,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,MAAM,CAAC,OAAO,0BAA0B,CAAC,CAAC,CAAC;IACvK,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC;IAChF,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC;IAC5E,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,CAAC,CAAC;IAE7E,MAAM,OAAO,GAAG,CAAC,GAAG,cAAc,EAAE,GAAG,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnF,OAAO;QACL,OAAO,EAAE,8BAA8B;QACvC,KAAK,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC;QAChD,KAAK;QACL,MAAM;QACN,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC;QAC/C,KAAK,EAAE;YACL,WAAW,EAAE,cAAc,CAAC,MAAM;YAClC,OAAO,EAAE,UAAU,CAAC,MAAM;YAC1B,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAC7E,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3E,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACrE,cAAc,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;YACvF,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;SACtE;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAkB,EAAE,SAAyC;IAC3F,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;QACzC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,MAAM,CAAC,CAAC;QAChI,MAAM,MAAM,GAA0B,EAAE,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,4BAA4B,EAAE,OAAO,EAAE,YAAY,QAAQ,CAAC,EAAE,EAAE,EAAE,WAAW,QAAQ,CAAC,MAAM,iBAAiB,CAAC,CAAC,CAAC;QACpI,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YACxC,IAAI,QAAQ,CAAC,MAAM,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB,EAAE,OAAO,EAAE,YAAY,QAAQ,CAAC,EAAE,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;YACjL,IAAI,QAAQ,CAAC,MAAM,CAAC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,wBAAwB,EAAE,OAAO,EAAE,YAAY,QAAQ,CAAC,EAAE,EAAE,EAAE,qBAAqB,CAAC,CAAC,CAAC;YAChL,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,oBAAoB,EAAE,OAAO,EAAE,YAAY,QAAQ,CAAC,EAAE,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC;YACjK,IAAI,QAAQ,CAAC,MAAM,CAAC,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,8BAA8B,EAAE,OAAO,EAAE,YAAY,QAAQ,CAAC,EAAE,EAAE,EAAE,0BAA0B,CAAC,CAAC,CAAC;QACxM,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACxF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,4BAA4B,EAAE,OAAO,EAAE,YAAY,QAAQ,CAAC,EAAE,EAAE,EAAE,oBAAoB,QAAQ,CAAC,MAAM,CAAC,OAAO,oBAAoB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC1K,CAAC;QACD,OAAO,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3F,CAAC,CAAC,CAAC;IACH,OAAO;QACL,OAAO,EAAE,2BAA2B;QACpC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;QAC9C,SAAS,EAAE,OAAO;KACnB,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,KAAc;IAChC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5F,CAAC;AAED,SAAS,QAAQ,CAAC,KAAc;IAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACrD,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtD,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvJ,CAAC;AAED,SAAS,MAAM,CAAC,KAAe;IAC7B,OAAO,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACjI,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAAkB,EAAE,KAAiB;IACnE,MAAM,OAAO,GAAyC,EAAE,CAAC;IACzD,KAAK,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,IAAI;QAC9C,CAAC,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAU;QAChE,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAU;KACrD,EAAE,CAAC;QACF,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;QACjC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QACjC,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7H,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;YACpG,CAAC;iBAAM,IAAI,UAAU,CAAC,QAAQ,CAAC,QAAQ,IAAI,EAAE,CAAC,KAAK,UAAU,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;gBACnF,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,yBAAyB,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5J,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO;QACL,OAAO,EAAE,gCAAgC;QACzC,oBAAoB,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC;QACzD,OAAO;KACR,CAAC;AACJ,CAAC"}
@@ -0,0 +1,24 @@
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
+ import type { OntologyManifest } from '@dataforge/sdk-types';
16
+ /**
17
+ * Generate TypeScript source code using the `@dataforge/schema` DSL
18
+ * from an OntologyManifest.
19
+ *
20
+ * @param manifest - The remote OntologyManifest
21
+ * @returns Valid TypeScript source string
22
+ */
23
+ export declare function emitSchema(manifest: OntologyManifest): string;
24
+ //# sourceMappingURL=emit-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit-schema.d.ts","sourceRoot":"","sources":["../../src/pull/emit-schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAgE,MAAM,sBAAsB,CAAC;AAmS3H;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAgO7D"}