@databehave/schema 0.1.4 → 0.3.0

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 (92) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.md +12 -1
  3. package/dist/dataset/dataset.d.ts +4 -45
  4. package/dist/dataset/dataset.d.ts.map +1 -1
  5. package/dist/dataset/dataset.js +4 -94
  6. package/dist/dataset/dataset.js.map +1 -1
  7. package/dist/dataset/generate.d.ts +49 -0
  8. package/dist/dataset/generate.d.ts.map +1 -0
  9. package/dist/dataset/generate.js +96 -0
  10. package/dist/dataset/generate.js.map +1 -0
  11. package/dist/foundation/axes.d.ts +4 -9
  12. package/dist/foundation/axes.d.ts.map +1 -1
  13. package/dist/foundation/axes.js +11 -37
  14. package/dist/foundation/axes.js.map +1 -1
  15. package/dist/foundation/errors.d.ts +7 -5
  16. package/dist/foundation/errors.d.ts.map +1 -1
  17. package/dist/foundation/errors.js +1 -1
  18. package/dist/foundation/errors.js.map +1 -1
  19. package/dist/foundation/ir.d.ts +9 -1
  20. package/dist/foundation/ir.d.ts.map +1 -1
  21. package/dist/foundation/ir.js.map +1 -1
  22. package/dist/foundation/types.d.ts.map +1 -1
  23. package/dist/foundation/types.js +9 -42
  24. package/dist/foundation/types.js.map +1 -1
  25. package/dist/foundation/walk.d.ts +7 -71
  26. package/dist/foundation/walk.d.ts.map +1 -1
  27. package/dist/foundation/walk.js +8 -264
  28. package/dist/foundation/walk.js.map +1 -1
  29. package/dist/generator/engine.d.ts +4 -35
  30. package/dist/generator/engine.d.ts.map +1 -1
  31. package/dist/generator/engine.js +3 -574
  32. package/dist/generator/engine.js.map +1 -1
  33. package/dist/generator/replay.d.ts +4 -8
  34. package/dist/generator/replay.d.ts.map +1 -1
  35. package/dist/generator/replay.js +3 -20
  36. package/dist/generator/replay.js.map +1 -1
  37. package/dist/generator/trace.d.ts +5 -0
  38. package/dist/generator/trace.d.ts.map +1 -1
  39. package/dist/generator/trace.js.map +1 -1
  40. package/dist/index.d.ts +6 -0
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +6 -0
  43. package/dist/index.js.map +1 -1
  44. package/dist/internal.d.ts +1 -1
  45. package/dist/internal.d.ts.map +1 -1
  46. package/dist/plugin.d.ts +7 -0
  47. package/dist/plugin.d.ts.map +1 -0
  48. package/dist/plugin.js +14 -0
  49. package/dist/plugin.js.map +1 -0
  50. package/dist/runtime/contracts.d.ts +101 -0
  51. package/dist/runtime/contracts.d.ts.map +1 -0
  52. package/dist/runtime/contracts.js +67 -0
  53. package/dist/runtime/contracts.js.map +1 -0
  54. package/dist/runtime/runtime.d.ts +56 -0
  55. package/dist/runtime/runtime.d.ts.map +1 -0
  56. package/dist/runtime/runtime.js +392 -0
  57. package/dist/runtime/runtime.js.map +1 -0
  58. package/dist/runtime.d.ts +7 -0
  59. package/dist/runtime.d.ts.map +1 -0
  60. package/dist/runtime.js +5 -0
  61. package/dist/runtime.js.map +1 -0
  62. package/dist/schema/decimal.d.ts +2 -2
  63. package/dist/schema/decimal.js +2 -2
  64. package/dist/standard/behaviors.d.ts +6 -0
  65. package/dist/standard/behaviors.d.ts.map +1 -0
  66. package/dist/standard/behaviors.js +358 -0
  67. package/dist/standard/behaviors.js.map +1 -0
  68. package/dist/standard/generation.d.ts +53 -0
  69. package/dist/standard/generation.d.ts.map +1 -0
  70. package/dist/standard/generation.js +359 -0
  71. package/dist/standard/generation.js.map +1 -0
  72. package/dist/standard/kinds.d.ts +6 -0
  73. package/dist/standard/kinds.d.ts.map +1 -0
  74. package/dist/standard/kinds.js +178 -0
  75. package/dist/standard/kinds.js.map +1 -0
  76. package/dist/standard/runtime.d.ts +3 -0
  77. package/dist/standard/runtime.d.ts.map +1 -0
  78. package/dist/standard/runtime.js +9 -0
  79. package/dist/standard/runtime.js.map +1 -0
  80. package/dist/standard/validation.d.ts +44 -0
  81. package/dist/standard/validation.d.ts.map +1 -0
  82. package/dist/standard/validation.js +353 -0
  83. package/dist/standard/validation.js.map +1 -0
  84. package/dist/standard.d.ts +5 -0
  85. package/dist/standard.d.ts.map +1 -0
  86. package/dist/standard.js +5 -0
  87. package/dist/standard.js.map +1 -0
  88. package/dist/validator/parse.d.ts +2 -11
  89. package/dist/validator/parse.d.ts.map +1 -1
  90. package/dist/validator/parse.js +3 -426
  91. package/dist/validator/parse.js.map +1 -1
  92. package/package.json +24 -4
@@ -10,27 +10,10 @@
10
10
  * `derivedFrom` (e.g. reading `Date.now()`).
11
11
  */
12
12
  import { isDeepStrictEqual } from 'node:util';
13
+ import { standardRuntime } from '../standard/runtime.js';
13
14
  import { mock } from './engine.js';
14
- /** Build a deterministic, repeatedly-callable generator. */
15
- export const replay = (schema, options = {}) => {
16
- const frozen = deepFreeze({ ...options });
17
- const fn = (() => mock(schema, frozen));
18
- Object.defineProperty(fn, 'options', { value: frozen, enumerable: true });
19
- return fn;
20
- };
21
- /** Recursively `Object.freeze` plain objects and arrays so callers cannot
22
- * mutate bound options through nested references (e.g. `options.input`). */
23
- const deepFreeze = (value) => {
24
- if (value === null || typeof value !== 'object')
25
- return value;
26
- if (Object.isFrozen(value))
27
- return value;
28
- Object.freeze(value);
29
- for (const k of Object.keys(value)) {
30
- deepFreeze(value[k]);
31
- }
32
- return value;
33
- };
15
+ /** Bind the standard composition; custom schemas use runtime.replay. */
16
+ export const replay = (schema, options = {}) => standardRuntime.replay(schema, options);
34
17
  /**
35
18
  * Run the generator twice with identical inputs and assert deep equality.
36
19
  * Returns the produced value on success; throws on divergence.
@@ -1 +1 @@
1
- {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/generator/replay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAE7C,OAAO,EAAE,IAAI,EAAoB,MAAM,aAAa,CAAA;AAWpD,4DAA4D;AAC5D,MAAM,CAAC,MAAM,MAAM,GAAG,CAAmB,MAAS,EAAE,UAAuB,EAAE,EAAa,EAAE;IAC1F,MAAM,MAAM,GAAG,UAAU,CAAC,EAAE,GAAG,OAAO,EAAE,CAAgB,CAAA;IACxD,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAyB,CAAA;IAC/D,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAA;IACzE,OAAO,EAAE,CAAA;AACX,CAAC,CAAA;AAED;6EAC6E;AAC7E,MAAM,UAAU,GAAG,CAAI,KAAQ,EAAK,EAAE;IACpC,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAC7D,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACxC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACpB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAgC,CAAC,EAAE,CAAC;QAC9D,UAAU,CAAE,KAAiC,CAAC,CAAC,CAAC,CAAC,CAAA;IACnD,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAmB,MAAS,EAAE,UAAuB,EAAE,EAAY,EAAE;IAC/F,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,+EAA+E;YAC7E,wFAAwF,CAC3F,CAAA;IACH,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC,CAAA"}
1
+ {"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/generator/replay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAE7C,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAExD,OAAO,EAAE,IAAI,EAAoB,MAAM,aAAa,CAAA;AAMpD,wEAAwE;AACxE,MAAM,CAAC,MAAM,MAAM,GAAG,CAAmB,MAAS,EAAE,UAAuB,EAAE,EAAa,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;AAEpI;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAmB,MAAS,EAAE,UAAuB,EAAE,EAAY,EAAE;IAC/F,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC/B,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CACb,+EAA+E;YAC7E,wFAAwF,CAC3F,CAAA;IACH,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC,CAAA"}
@@ -34,6 +34,11 @@ export type TraceEntry = {
34
34
  readonly attempts?: number;
35
35
  /** Free-form annotation (e.g. distribution kind, picked literal). */
36
36
  readonly note?: string;
37
+ /** Contracts involved in this node, captured by the selected runtime. */
38
+ readonly contracts?: {
39
+ readonly kind: import('../runtime/runtime.js').SchemaContract;
40
+ readonly behaviors: readonly import('../runtime/runtime.js').SchemaContract[];
41
+ };
37
42
  };
38
43
  export type TraceCollector = {
39
44
  /** Append a single entry. Called by the engine — do not call from user code. */
@@ -1 +1 @@
1
- {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/generator/trace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,eAAe,GACf,eAAe,GACf,SAAS,GACT,cAAc,GACd,YAAY,GACZ,gBAAgB,GAChB,gBAAgB,GAChB,QAAQ,GACR,cAAc,GACd,MAAM,CAAA;AAEV,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IAC3C,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,uFAAuF;IACvF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,qEAAqE;IACrE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;IAC1C,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAA;IACvC,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAA;IACpF,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,WAAW,QAAO,cAuB9B,CAAA"}
1
+ {"version":3,"file":"trace.d.ts","sourceRoot":"","sources":["../../src/generator/trace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH;;;;;;;;;;;;;;GAcG;AACH,MAAM,MAAM,SAAS,GACjB,SAAS,GACT,eAAe,GACf,eAAe,GACf,SAAS,GACT,cAAc,GACd,YAAY,GACZ,gBAAgB,GAChB,gBAAgB,GAChB,QAAQ,GACR,cAAc,GACd,MAAM,CAAA;AAEV,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IAC3C,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,uFAAuF;IACvF,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,qEAAqE;IACrE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,yEAAyE;IACzE,QAAQ,CAAC,SAAS,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,uBAAuB,EAAE,cAAc,CAAC;QAAC,QAAQ,CAAC,SAAS,EAAE,SAAS,OAAO,uBAAuB,EAAE,cAAc,EAAE,CAAA;KAAE,CAAA;CACtK,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAA;IAC1C,kDAAkD;IAClD,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAA;IACvC,6CAA6C;IAC7C,QAAQ,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC,EAAE,CAAA;IACpF,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAA;CAC9B,CAAA;AAED,eAAO,MAAM,WAAW,QAAO,cAuB9B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"trace.js","sourceRoot":"","sources":["../../src/generator/trace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAkDH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAmB,EAAE;IAC9C,MAAM,OAAO,GAAiB,EAAE,CAAA;IAChC,OAAO;QACL,IAAI,CAAC,KAAK;YACR,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC;QACD,IAAI,OAAO;YACT,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,WAAW,CAAC,IAAI;YACd,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAClE,CAAC;QACD,MAAM;YACJ,OAAO,OAAO;iBACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACT,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACxD,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;gBAC1E,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;gBACvD,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAA;YACxD,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAA;QACf,CAAC;KACF,CAAA;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"trace.js","sourceRoot":"","sources":["../../src/generator/trace.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAoDH,MAAM,CAAC,MAAM,WAAW,GAAG,GAAmB,EAAE;IAC9C,MAAM,OAAO,GAAiB,EAAE,CAAA;IAChC,OAAO;QACL,IAAI,CAAC,KAAK;YACR,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC;QACD,IAAI,OAAO;YACT,OAAO,OAAO,CAAA;QAChB,CAAC;QACD,WAAW,CAAC,IAAI;YACd,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA;QAClE,CAAC;QACD,MAAM;YACJ,OAAO,OAAO;iBACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACT,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBACxD,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;gBAC1E,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAA;gBACvD,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,GAAG,QAAQ,GAAG,IAAI,EAAE,CAAA;YACxD,CAAC,CAAC;iBACD,IAAI,CAAC,IAAI,CAAC,CAAA;QACf,CAAC;KACF,CAAA;AACH,CAAC,CAAA"}
package/dist/index.d.ts CHANGED
@@ -28,4 +28,10 @@ export { relate, type RelateOptions } from './dataset/relate.js';
28
28
  export { Schema, type Infer, type Modifiers, type SchemaNode } from './foundation/types.js';
29
29
  export type { Axes, DerivedFn, Distribution, DomainConstraint, EventuallyOverride, GenContext, InvariantFn, NormalDistribution, OccasionalOverride, TypicalDistribution, WeightedDistribution, } from './foundation/axes.js';
30
30
  export { DataBehaveError, ConformError, SchemaConflictError, type Issue, type IssueCode, } from './foundation/errors.js';
31
+ export { createSchemaRuntime, IR_VERSION, type SchemaRuntime, type SchemaRuntimeOptions, type SchemaContract, type SchemaEnvelope, type SchemaVisitor, type WalkPath, type RuntimeReplay } from './runtime/runtime.js';
32
+ export { defineKind, defineBehavior, type KindDescriptor, type KindDefinition, type TypedKind, type BehaviorDescriptor, type BehaviorDefinition, type TypedBehavior, type BehaviorPhase, type SchemaChild, type GenerationContext, type GenerationNext, type SamplingContext, type ValidationContext } from './runtime/contracts.js';
33
+ export { standardKinds } from './standard/kinds.js';
34
+ export { standardBehaviors } from './standard/behaviors.js';
35
+ export { standardRuntime } from './standard/runtime.js';
36
+ export type { StandardSchemaNode } from './foundation/ir.js';
31
37
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EACL,GAAG,EACH,GAAG,EACH,GAAG,EACH,IAAI,EACJ,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,aAAa,EACb,UAAU,GACX,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EACL,GAAG,EACH,GAAG,EACH,KAAK,EACL,KAAK,EACL,OAAO,EACP,KAAK,EACL,YAAY,EACZ,WAAW,EACX,WAAW,EACX,WAAW,EACX,aAAa,EACb,UAAU,GACX,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAGvD,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACnG,YAAY,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC7E,OAAO,EACL,WAAW,EACX,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,UAAU,GAChB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAGzE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACpF,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGhE,OAAO,EAAE,MAAM,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAC3F,YAAY,EACV,IAAI,EACJ,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,sBAAsB,CAAA;AAG7B,OAAO,EACL,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,KAAK,KAAK,EACV,KAAK,SAAS,GACf,MAAM,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EACL,GAAG,EACH,GAAG,EACH,GAAG,EACH,IAAI,EACJ,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,aAAa,EACb,UAAU,GACX,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EACL,GAAG,EACH,GAAG,EACH,KAAK,EACL,KAAK,EACL,OAAO,EACP,KAAK,EACL,YAAY,EACZ,WAAW,EACX,WAAW,EACX,WAAW,EACX,aAAa,EACb,UAAU,GACX,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAGvD,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACnG,YAAY,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAC/C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC7E,OAAO,EACL,WAAW,EACX,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,UAAU,GAChB,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAGzE,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACpF,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGhE,OAAO,EAAE,MAAM,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAC3F,YAAY,EACV,IAAI,EACJ,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,sBAAsB,CAAA;AAG7B,OAAO,EACL,eAAe,EACf,YAAY,EACZ,mBAAmB,EACnB,KAAK,KAAK,EACV,KAAK,SAAS,GACf,MAAM,wBAAwB,CAAA;AAG/B,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,KAAK,aAAa,EAAE,KAAK,oBAAoB,EAAE,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACtN,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,KAAK,SAAS,EAAE,KAAK,kBAAkB,EAAE,KAAK,kBAAkB,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACpU,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA"}
package/dist/index.js CHANGED
@@ -31,4 +31,10 @@ export { relate } from './dataset/relate.js';
31
31
  export { Schema } from './foundation/types.js';
32
32
  // ── errors ────────────────────────────────────────────────────────────────
33
33
  export { DataBehaveError, ConformError, SchemaConflictError, } from './foundation/errors.js';
34
+ // Instance-local schema composition and extension contracts.
35
+ export { createSchemaRuntime, IR_VERSION } from './runtime/runtime.js';
36
+ export { defineKind, defineBehavior } from './runtime/contracts.js';
37
+ export { standardKinds } from './standard/kinds.js';
38
+ export { standardBehaviors } from './standard/behaviors.js';
39
+ export { standardRuntime } from './standard/runtime.js';
34
40
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,6EAA6E;AAC7E,OAAO,EACL,GAAG,EACH,GAAG,EACH,GAAG,EACH,IAAI,EACJ,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,aAAa,EACb,UAAU,GACX,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EACL,GAAG,EACH,GAAG,EACH,KAAK,EACL,KAAK,EACL,OAAO,EACP,KAAK,EACL,YAAY,EACZ,WAAW,EACX,WAAW,EACX,WAAW,EACX,aAAa,EACb,UAAU,GACX,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAEvD,6EAA6E;AAC7E,OAAO,EAAE,IAAI,EAAyD,MAAM,uBAAuB,CAAA;AAEnG,OAAO,EAAE,KAAK,EAAE,SAAS,EAAwB,MAAM,sBAAsB,CAAA;AAC7E,OAAO,EACL,WAAW,GAIZ,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,MAAM,EAAE,YAAY,EAAe,MAAM,uBAAuB,CAAA;AAEzE,6EAA6E;AAC7E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAuB,MAAM,sBAAsB,CAAA;AACpF,OAAO,EAAE,MAAM,EAAsB,MAAM,qBAAqB,CAAA;AAEhE,6EAA6E;AAC7E,OAAO,EAAE,MAAM,EAA+C,MAAM,uBAAuB,CAAA;AAe3F,6EAA6E;AAC7E,OAAO,EACL,eAAe,EACf,YAAY,EACZ,mBAAmB,GAGpB,MAAM,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,6EAA6E;AAC7E,OAAO,EACL,GAAG,EACH,GAAG,EACH,GAAG,EACH,IAAI,EACJ,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,SAAS,EACT,aAAa,EACb,UAAU,GACX,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAC5D,OAAO,EACL,GAAG,EACH,GAAG,EACH,KAAK,EACL,KAAK,EACL,OAAO,EACP,KAAK,EACL,YAAY,EACZ,WAAW,EACX,WAAW,EACX,WAAW,EACX,aAAa,EACb,UAAU,GACX,MAAM,wBAAwB,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAEvD,6EAA6E;AAC7E,OAAO,EAAE,IAAI,EAAyD,MAAM,uBAAuB,CAAA;AAEnG,OAAO,EAAE,KAAK,EAAE,SAAS,EAAwB,MAAM,sBAAsB,CAAA;AAC7E,OAAO,EACL,WAAW,GAIZ,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EAAE,MAAM,EAAE,YAAY,EAAe,MAAM,uBAAuB,CAAA;AAEzE,6EAA6E;AAC7E,OAAO,EAAE,WAAW,EAAE,WAAW,EAAuB,MAAM,sBAAsB,CAAA;AACpF,OAAO,EAAE,MAAM,EAAsB,MAAM,qBAAqB,CAAA;AAEhE,6EAA6E;AAC7E,OAAO,EAAE,MAAM,EAA+C,MAAM,uBAAuB,CAAA;AAe3F,6EAA6E;AAC7E,OAAO,EACL,eAAe,EACf,YAAY,EACZ,mBAAmB,GAGpB,MAAM,wBAAwB,CAAA;AAE/B,6DAA6D;AAC7D,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAkJ,MAAM,sBAAsB,CAAA;AACtN,OAAO,EAAE,UAAU,EAAE,cAAc,EAAmQ,MAAM,wBAAwB,CAAA;AACpU,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA"}
@@ -17,6 +17,6 @@ export { walkSchema, fromIR, serializeSchema, deserializeSchema, IR_VERSION, typ
17
17
  export { mulberry32, rngFromString, seedFromString, type Rng, } from './foundation/prng.js';
18
18
  export { Schema } from './foundation/types.js';
19
19
  export type { Infer } from './foundation/types.js';
20
- export type { ArrayKind, BooleanKind, DecimalKind, DiscriminatedKind, EnumKind, LiteralKind, Modifiers, NullKind, NumberKind, ObjectKind, SchemaCore, SchemaNode, StringFormat, StringKind, TupleKind, UnionKind, } from './foundation/ir.js';
20
+ export type { ArrayKind, BooleanKind, DecimalKind, DiscriminatedKind, EnumKind, LiteralKind, Modifiers, NullKind, NumberKind, ObjectKind, SchemaCore, SchemaNode, StandardSchemaNode, StringFormat, StringKind, TupleKind, UnionKind, } from './foundation/ir.js';
21
21
  export type { Axes, DerivedFn, Distribution, DomainConstraint, EventuallyOverride, GenContext, InvariantFn, NormalDistribution, OccasionalOverride, TypicalDistribution, WeightedDistribution, } from './foundation/axes.js';
22
22
  //# sourceMappingURL=internal.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,UAAU,EACV,MAAM,EACN,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,QAAQ,GACd,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,KAAK,GAAG,GACT,MAAM,sBAAsB,CAAA;AAS7B,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,YAAY,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAElD,YAAY,EAEV,SAAS,EACT,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,QAAQ,EACR,WAAW,EACX,SAAS,EACT,QAAQ,EACR,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,YAAY,EACZ,UAAU,EACV,SAAS,EACT,SAAS,GACV,MAAM,oBAAoB,CAAA;AAE3B,YAAY,EAEV,IAAI,EACJ,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,sBAAsB,CAAA"}
1
+ {"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,UAAU,EACV,MAAM,EACN,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,QAAQ,GACd,MAAM,sBAAsB,CAAA;AAC7B,OAAO,EACL,UAAU,EACV,aAAa,EACb,cAAc,EACd,KAAK,GAAG,GACT,MAAM,sBAAsB,CAAA;AAS7B,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAA;AAC9C,YAAY,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAA;AAElD,YAAY,EAEV,SAAS,EACT,WAAW,EACX,WAAW,EACX,iBAAiB,EACjB,QAAQ,EACR,WAAW,EACX,SAAS,EACT,QAAQ,EACR,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,YAAY,EACZ,UAAU,EACV,SAAS,EACT,SAAS,GACV,MAAM,oBAAoB,CAAA;AAE3B,YAAY,EAEV,IAAI,EACJ,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,sBAAsB,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { type Capability, type Plugin } from '@databehave/core';
2
+ import { type SchemaRuntime, type SchemaRuntimeOptions } from './runtime/runtime.js';
3
+ /** Optional application capability; standalone schema imports never load the host. */
4
+ export declare const schemaCapability: Capability<SchemaRuntime>;
5
+ /** Compose a new synchronous schema registry during each host's setup phase. */
6
+ export declare const schemaPlugin: (options: SchemaRuntimeOptions) => Plugin;
7
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,UAAU,EAAE,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAC3E,OAAO,EAAuB,KAAK,aAAa,EAAE,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAEzG,sFAAsF;AACtF,eAAO,MAAM,gBAAgB,EAAE,UAAU,CAAC,aAAa,CAGtD,CAAA;AAED,gFAAgF;AAChF,eAAO,MAAM,YAAY,GAAI,SAAS,oBAAoB,KAAG,MAO3D,CAAA"}
package/dist/plugin.js ADDED
@@ -0,0 +1,14 @@
1
+ import { capability } from '@databehave/core';
2
+ import { createSchemaRuntime } from './runtime/runtime.js';
3
+ /** Optional application capability; standalone schema imports never load the host. */
4
+ export const schemaCapability = capability('databehave.schema.runtime', 1);
5
+ /** Compose a new synchronous schema registry during each host's setup phase. */
6
+ export const schemaPlugin = (options) => ({
7
+ id: 'databehave.schema',
8
+ apiVersion: 1,
9
+ provides: [schemaCapability],
10
+ setup(context) {
11
+ context.provide(schemaCapability, createSchemaRuntime(options));
12
+ },
13
+ });
14
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAgC,MAAM,kBAAkB,CAAA;AAC3E,OAAO,EAAE,mBAAmB,EAAiD,MAAM,sBAAsB,CAAA;AAEzG,sFAAsF;AACtF,MAAM,CAAC,MAAM,gBAAgB,GAA8B,UAAU,CACnE,2BAA2B,EAC3B,CAAC,CACF,CAAA;AAED,gFAAgF;AAChF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAA6B,EAAU,EAAE,CAAC,CAAC;IACtE,EAAE,EAAE,mBAAmB;IACvB,UAAU,EAAE,CAAC;IACb,QAAQ,EAAE,CAAC,gBAAgB,CAAC;IAC5B,KAAK,CAAC,OAAO;QACX,OAAO,CAAC,OAAO,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAA;IACjE,CAAC;CACF,CAAC,CAAA"}
@@ -0,0 +1,101 @@
1
+ import type { GenContext } from '../foundation/axes.js';
2
+ import type { Issue } from '../foundation/errors.js';
3
+ import type { SchemaNode } from '../foundation/ir.js';
4
+ import type { Rng } from '../foundation/prng.js';
5
+ import { Schema } from '../foundation/types.js';
6
+ import type { ModifierProbs } from '../generator/engine.js';
7
+ import type { TraceEntry } from '../generator/trace.js';
8
+ /** A structural child and its traversal path segment. */
9
+ export interface SchemaChild {
10
+ readonly key: string | number;
11
+ readonly node: SchemaNode;
12
+ }
13
+ /** Candidate sampling scoped to one downstream generation continuation. */
14
+ export interface SamplingContext {
15
+ readonly candidates: readonly unknown[];
16
+ readonly fallback: () => unknown;
17
+ }
18
+ /** Continue with the current sampling scope, or override it for this call only. */
19
+ export type GenerationNext = (sampling?: SamplingContext) => unknown;
20
+ /** Services scoped to one generation call; recursion retains its runtime. */
21
+ export interface GenerationContext extends GenContext {
22
+ readonly sampling?: SamplingContext;
23
+ readonly path: readonly (string | number)[];
24
+ readonly rng: Rng;
25
+ readonly leafRng: () => Rng;
26
+ readonly modifierProbs: Required<ModifierProbs>;
27
+ readonly isDeferred: (node: SchemaNode) => boolean;
28
+ readonly generate: (node: SchemaNode, path: readonly (string | number)[], parent: Readonly<Record<string, unknown>>) => unknown;
29
+ readonly emit: (entry: TraceEntry) => void;
30
+ }
31
+ /** Validation services scoped to a node; plugins report issues or recurse. */
32
+ export interface ValidationContext extends GenContext {
33
+ readonly path: readonly (string | number)[];
34
+ readonly issues: Issue[];
35
+ readonly describe: (node: SchemaNode) => string;
36
+ readonly isDeferred: (node: SchemaNode) => boolean;
37
+ readonly check: (node: SchemaNode, value: unknown, path: readonly (string | number)[], issues: Issue[], root: unknown, parent: Readonly<Record<string, unknown>> | undefined) => unknown;
38
+ }
39
+ /** A kind owns its complete structural and value contract. */
40
+ export interface KindDescriptor {
41
+ readonly id: string;
42
+ readonly version: number;
43
+ readonly describe?: (node: SchemaNode, describeChild: (node: SchemaNode) => string) => string;
44
+ readonly checkMetadata: (node: unknown) => SchemaNode;
45
+ readonly generate: (node: SchemaNode, context: GenerationContext) => unknown;
46
+ readonly validate: (node: SchemaNode, value: unknown, context: ValidationContext) => unknown;
47
+ readonly children: (node: SchemaNode) => readonly SchemaChild[];
48
+ readonly rebuild: (node: SchemaNode, children: readonly SchemaChild[]) => SchemaNode;
49
+ }
50
+ /** Fixed phase barriers; composition order determines order within each phase. */
51
+ export type BehaviorPhase = 'modifier' | 'derived' | 'cadence' | 'invariant' | 'sample';
52
+ /** Behavior policy uses middleware so short circuits and bounded retries are explicit. */
53
+ export interface BehaviorDescriptor {
54
+ readonly id: string;
55
+ readonly version: number;
56
+ readonly phase: BehaviorPhase;
57
+ readonly read: (node: SchemaNode) => unknown;
58
+ readonly write: (node: SchemaNode, metadata: unknown) => SchemaNode;
59
+ readonly checkMetadata: (metadata: unknown) => unknown;
60
+ readonly appliesTo: (node: SchemaNode, metadata: unknown) => boolean;
61
+ readonly merge: (previous: unknown, next: unknown) => unknown;
62
+ readonly generate: (metadata: unknown, node: SchemaNode, context: GenerationContext, next: GenerationNext) => unknown;
63
+ readonly validate: (metadata: unknown, node: SchemaNode, value: unknown, context: ValidationContext, next: () => unknown) => unknown;
64
+ readonly serialize: (metadata: unknown) => unknown;
65
+ }
66
+ /** Typed public kind authoring; the parser validates every untrusted node. */
67
+ export interface KindDefinition<T, N extends SchemaNode> {
68
+ readonly id: N['kind'];
69
+ readonly version: number;
70
+ readonly describe?: (node: N, describeChild: (node: SchemaNode) => string) => string;
71
+ readonly checkMetadata: (node: unknown) => N;
72
+ readonly generate: (node: N, context: GenerationContext) => T;
73
+ readonly validate: (node: N, value: unknown, context: ValidationContext) => unknown;
74
+ readonly children: (node: N) => readonly SchemaChild[];
75
+ readonly rebuild: (node: N, children: readonly SchemaChild[]) => N;
76
+ }
77
+ /** Kind descriptor with a type-safe builder; no builder subclass is required. */
78
+ export interface TypedKind<T, N extends SchemaNode> extends KindDescriptor {
79
+ readonly schema: (metadata: Omit<N, 'kind'>) => Schema<T>;
80
+ }
81
+ /** Erase only the validated metadata type at the registry boundary. */
82
+ export declare const defineKind: <T, N extends SchemaNode>(definition: KindDefinition<T, N>) => TypedKind<T, N>;
83
+ /** Typed behavior authoring with the common instance-independent metadata carrier. */
84
+ export interface BehaviorDefinition<M> {
85
+ readonly id: string;
86
+ readonly version: number;
87
+ readonly phase: BehaviorPhase;
88
+ readonly checkMetadata: (metadata: unknown) => M;
89
+ readonly appliesTo: (node: SchemaNode, metadata: M) => boolean;
90
+ readonly merge: (previous: M, next: M) => M;
91
+ readonly generate: (metadata: M, node: SchemaNode, context: GenerationContext, next: GenerationNext) => unknown;
92
+ readonly validate: (metadata: M, node: SchemaNode, value: unknown, context: ValidationContext, next: () => unknown) => unknown;
93
+ readonly serialize: (metadata: M) => unknown;
94
+ }
95
+ /** Behavior descriptor with a typed metadata attachment helper. */
96
+ export interface TypedBehavior<M> extends BehaviorDescriptor {
97
+ readonly apply: <T>(schema: Schema<T>, metadata: M) => Schema<T>;
98
+ }
99
+ /** Adapt typed metadata to the public behavior contract. */
100
+ export declare const defineBehavior: <M>(definition: BehaviorDefinition<M>) => TypedBehavior<M>;
101
+ //# sourceMappingURL=contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/runtime/contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { Schema } from '../foundation/types.js';
2
+ /** Erase only the validated metadata type at the registry boundary. */
3
+ export const defineKind = (definition) => {
4
+ const { id, version } = definition;
5
+ const read = definition.checkMetadata.bind(definition);
6
+ const describe = definition.describe?.bind(definition);
7
+ const generate = definition.generate.bind(definition);
8
+ const validate = definition.validate.bind(definition);
9
+ const children = definition.children.bind(definition);
10
+ const rebuild = definition.rebuild.bind(definition);
11
+ return Object.freeze({
12
+ id,
13
+ version,
14
+ checkMetadata: read,
15
+ ...(describe === undefined
16
+ ? {}
17
+ : {
18
+ describe: (node, child) => describe(read(node), child),
19
+ }),
20
+ generate: (node, context) => generate(read(node), context),
21
+ validate: (node, value, context) => validate(read(node), value, context),
22
+ children: (node) => children(read(node)),
23
+ rebuild: (node, children) => rebuild(read(node), children),
24
+ schema: (metadata) => new Schema(read({ ...metadata, kind: id })),
25
+ });
26
+ };
27
+ /** Adapt typed metadata to the public behavior contract. */
28
+ export const defineBehavior = (definition) => {
29
+ const { id, version, phase } = definition;
30
+ const read = definition.checkMetadata.bind(definition);
31
+ const appliesTo = definition.appliesTo.bind(definition);
32
+ const merge = definition.merge.bind(definition);
33
+ const generate = definition.generate.bind(definition);
34
+ const validate = definition.validate.bind(definition);
35
+ const serialize = definition.serialize.bind(definition);
36
+ const descriptor = Object.freeze({
37
+ id,
38
+ version,
39
+ phase,
40
+ read: (node) => node.mods?.behaviors?.[id],
41
+ write: (node, metadata) => ({
42
+ ...node,
43
+ mods: {
44
+ ...node.mods,
45
+ behaviors: { ...node.mods?.behaviors, [id]: read(metadata) },
46
+ },
47
+ }),
48
+ checkMetadata: read,
49
+ appliesTo: (node, metadata) => appliesTo(node, read(metadata)),
50
+ merge: (previous, next) => merge(read(previous), read(next)),
51
+ generate: (metadata, node, context, next) => generate(read(metadata), node, context, next),
52
+ validate: (metadata, node, value, context, next) => validate(read(metadata), node, value, context, next),
53
+ serialize: (metadata) => serialize(read(metadata)),
54
+ });
55
+ return Object.freeze({
56
+ ...descriptor,
57
+ apply: (schema, metadata) => {
58
+ const incoming = read(metadata);
59
+ const previous = descriptor.read(schema._node);
60
+ const merged = previous === undefined ? incoming : descriptor.merge(previous, incoming);
61
+ if (!descriptor.appliesTo(schema._node, merged))
62
+ throw new TypeError(`behavior ${descriptor.id} is not applicable to ${schema._node.kind}`);
63
+ return new Schema(descriptor.write(schema._node, merged));
64
+ },
65
+ });
66
+ };
67
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/runtime/contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { type DatasetOptions } from '../dataset/generate.js';
2
+ import type { SchemaNode } from '../foundation/ir.js';
3
+ import { Schema, type Infer } from '../foundation/types.js';
4
+ import type { MockOptions } from '../generator/engine.js';
5
+ import type { SafeParseResult } from '../validator/parse.js';
6
+ import type { BehaviorDescriptor, KindDescriptor } from './contracts.js';
7
+ /** Descriptor identity included in serialized data and trace/replay evidence. */
8
+ export interface SchemaContract {
9
+ readonly id: string;
10
+ readonly version: number;
11
+ }
12
+ /** Runtime composition is explicit and sealed synchronously. */
13
+ export interface SchemaRuntimeOptions {
14
+ readonly kinds: readonly KindDescriptor[];
15
+ readonly behaviors: readonly BehaviorDescriptor[];
16
+ }
17
+ /** Traversal path relative to the root schema. */
18
+ export type WalkPath = readonly (string | number)[];
19
+ /** Traversal callbacks may skip a subtree by returning false from enter. */
20
+ export interface SchemaVisitor {
21
+ readonly enter?: (node: SchemaNode, path: WalkPath) => void | boolean;
22
+ readonly leave?: (node: SchemaNode, path: WalkPath) => void;
23
+ }
24
+ /** Version 2 records all required extension contracts. */
25
+ export declare const IR_VERSION: 2;
26
+ /** Portable schema envelope with exact kind and behavior contract versions. */
27
+ export interface SchemaEnvelope {
28
+ readonly $databehaveVersion: typeof IR_VERSION;
29
+ readonly contracts: {
30
+ readonly kinds: readonly SchemaContract[];
31
+ readonly behaviors: readonly SchemaContract[];
32
+ };
33
+ readonly node: SchemaNode;
34
+ }
35
+ /** Replay retains the runtime closure and a snapshot of caller options. */
36
+ export interface RuntimeReplay<S extends Schema> {
37
+ (): Infer<S>;
38
+ readonly options: Readonly<MockOptions>;
39
+ readonly contracts: SchemaEnvelope['contracts'];
40
+ }
41
+ /** Pure, synchronous schema operations bound to a sealed registry instance. */
42
+ export interface SchemaRuntime {
43
+ readonly mockDataset: <S extends Schema>(options: DatasetOptions<S>) => Infer<S>[];
44
+ readonly mock: <S extends Schema>(schema: S, options?: MockOptions) => Infer<S>;
45
+ readonly parse: <S extends Schema>(schema: S, value: unknown) => Infer<S>;
46
+ readonly safeParse: <S extends Schema>(schema: S, value: unknown) => SafeParseResult<Infer<S>>;
47
+ readonly withBehavior: <T>(schema: Schema<T>, id: string, metadata: unknown) => Schema<T>;
48
+ readonly walkSchema: (schema: Schema | SchemaNode, visitor: SchemaVisitor) => void;
49
+ readonly fromIR: (node: unknown) => Schema<unknown>;
50
+ readonly serializeSchema: (schema: Schema) => SchemaEnvelope;
51
+ readonly deserializeSchema: (envelope: unknown) => Schema<unknown>;
52
+ readonly replay: <S extends Schema>(schema: S, options?: MockOptions) => RuntimeReplay<S>;
53
+ }
54
+ /** Validate and snapshot descriptors; caller mutations cannot change the registry. */
55
+ export declare const createSchemaRuntime: (options: SchemaRuntimeOptions) => SchemaRuntime;
56
+ //# sourceMappingURL=runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/runtime/runtime.ts"],"names":[],"mappings":"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"}