constructa-core 0.9.0 → 0.9.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.
package/README.md CHANGED
@@ -4,6 +4,32 @@ UI-agnostic generator registration and execution engine for Constructa.
4
4
 
5
5
  This package contains the core runtime responsible for registering, composing, and executing generators. It defines the fundamental behavior of the Constructa generation system without making assumptions about user interfaces, persistence, transport, or application environments.
6
6
 
7
+ ## Example
8
+
9
+ Register the generator implementations your application needs, then execute a
10
+ portable definition. A seed makes the result reproducible.
11
+
12
+ ```ts
13
+ import {
14
+ createExecutor,
15
+ createRegistry,
16
+ } from "jsr:@constructa/core";
17
+ import {
18
+ registerIntegerGenerator,
19
+ registerObjectGenerator,
20
+ } from "jsr:@constructa/generators";
21
+
22
+ const registry = createRegistry();
23
+ registerIntegerGenerator(registry);
24
+ registerObjectGenerator(registry);
25
+
26
+ const generate = createExecutor(registry);
27
+ const result = generate.generate(
28
+ { type: "object", fields: { age: { type: "integer", min: 18, max: 65 } } },
29
+ { seed: "example" },
30
+ );
31
+ ```
32
+
7
33
  ## Responsibilities
8
34
 
9
35
  Current APIs define trusted generator implementations, portable typed definitions, and engine-provided generation context services. Planned areas include:
package/dist/index.d.ts CHANGED
@@ -9,8 +9,11 @@ type RandomSource = {
9
9
  integer(maxExclusive: number): number;
10
10
  bytes(length: number): Uint8Array;
11
11
  };
12
+ /** An application-provided random source validated by `createRandomSource`. */
12
13
  type RandomSourceAdapter = RandomSource;
14
+ /** A deterministic random-source seed. */
13
15
  type Seed = number | string;
16
+ /** Per-root-execution limits and random-source options. */
14
17
  type ExecutionOptions = {
15
18
  /** Uses a fresh deterministic source for this root execution. */
16
19
  readonly seed?: Seed;
@@ -26,15 +29,20 @@ type ExecutionOptions = {
26
29
  /** Stops execution before the next generator dispatch after this UTC epoch time. */
27
30
  readonly deadline?: number;
28
31
  };
32
+ /** Executes validated generator definitions through a registry snapshot. */
29
33
  type Executor = {
30
34
  generate: <Definition extends GeneratorDefinition$1>(definition: Definition, options?: ExecutionOptions) => import("constructa-schema").Infer<Definition>;
31
35
  };
36
+ /** The deterministic random algorithm used by `createSeededRandom`. */
32
37
  declare const SEEDED_RANDOM_ALGORITHM = "mulberry32";
38
+ /** The compatibility version of the seeded random algorithm. */
33
39
  declare const SEEDED_RANDOM_ALGORITHM_VERSION = 1;
40
+ /** Public metadata identifying the seeded random algorithm. */
34
41
  type SeededRandomMetadata = {
35
42
  readonly algorithm: typeof SEEDED_RANDOM_ALGORITHM;
36
43
  readonly version: typeof SEEDED_RANDOM_ALGORITHM_VERSION;
37
44
  };
45
+ /** Values that must remain compatible to reproduce an execution. */
38
46
  type DeterminismCompatibility = {
39
47
  readonly engineVersion: string;
40
48
  readonly generatorImplementationVersion: number;
@@ -60,6 +68,7 @@ declare function createSeededRandom(seed: Seed): RandomSource;
60
68
  /** Metadata for reproducibility diagnostics. It intentionally contains no seed. */
61
69
  declare function getSeededRandomMetadata(): SeededRandomMetadata;
62
70
  /** Services supplied by the engine. Implementations must not use global randomness. */
71
+ /** Capabilities supplied to a trusted generator implementation. */
63
72
  type GenerationContext = {
64
73
  readonly random: RandomSource;
65
74
  /** The definition path currently being generated. */
@@ -77,8 +86,10 @@ type GenerationContext = {
77
86
  readonly analyzeChildValueDependencies: (definition: GeneratorDefinition$1, pathSegment: ValidationPathSegment$1) => readonly ValueDependency[];
78
87
  };
79
88
  /** A property path relative to the object containing a reference. */
89
+ /** A property path used by an object-local template reference. */
80
90
  type ReferencePath = readonly string[];
81
91
  /** A parsed template fragment. Braces are escaped with `{{` and `}}`. */
92
+ /** One literal or reference segment of parsed template source. */
82
93
  type TemplateToken = {
83
94
  readonly type: "literal";
84
95
  readonly value: string;
@@ -86,6 +97,7 @@ type TemplateToken = {
86
97
  readonly type: "reference";
87
98
  readonly path: ReferencePath;
88
99
  };
100
+ /** Options controlling template-token parse diagnostics. */
89
101
  type ParseTemplateTokensOptions = {
90
102
  /** Definition-relative path reported for malformed template syntax. */
91
103
  readonly path?: ValidationPath$1;
@@ -101,18 +113,22 @@ declare function parseTemplateTokens(source: string, options?: ParseTemplateToke
101
113
  /** Parses one dot-separated object-local reference path. */
102
114
  declare function parseReferencePath(source: string, path?: ValidationPath$1): ReferencePath;
103
115
  /** A portable value dependency declared by a generator definition. */
116
+ /** One value dependency declared by a child generator. */
104
117
  type ValueDependency = {
105
118
  readonly path: ReferencePath;
106
119
  };
107
120
  /** Dependencies for a direct field in a composite definition. */
121
+ /** A composite child and the values it depends on. */
108
122
  type CompositeDependencyNode = {
109
123
  readonly fieldPath: readonly [string];
110
124
  readonly dependencies: readonly ValueDependency[];
111
125
  };
112
126
  /** Portable dependency data used to schedule one composite object. */
127
+ /** An immutable analysis of composite-child dependencies. */
113
128
  type CompositeDependencyAnalysis = {
114
129
  readonly nodes: readonly CompositeDependencyNode[];
115
130
  };
131
+ /** Options used to order dependent composite children. */
116
132
  type CompositeDependencySchedulingOptions = {
117
133
  /** Every reference path that exists in the containing object definition. */
118
134
  readonly referencePaths?: readonly ReferencePath[];
@@ -122,13 +138,16 @@ type CompositeDependencySchedulingOptions = {
122
138
  readonly maxEdges?: number;
123
139
  };
124
140
  /** The read-only capability supplied to generators that resolve references. */
141
+ /** Resolves values visible to an executing generator. */
125
142
  type ReferenceResolver = {
126
143
  resolve: (path: ReferencePath) => unknown;
127
144
  };
128
145
  /** Executes and records completed fields within one isolated object scope. */
146
+ /** An isolated object-field execution scope. */
129
147
  type ObjectGenerationScope = {
130
148
  executeChild: <Output>(definition: GeneratorDefinition$1<Output>, pathSegment: string) => Output;
131
149
  };
150
+ /** Inputs used to create a generator execution context. */
132
151
  type GenerationContextOptions = {
133
152
  readonly random: RandomSource;
134
153
  readonly path?: ValidationPath$1;
@@ -150,6 +169,7 @@ declare function createCompositeDependencyAnalysis(nodes: readonly CompositeDepe
150
169
  * dependency path may target a nested value below another direct field.
151
170
  */
152
171
  declare function scheduleCompositeDependencies(analysis: CompositeDependencyAnalysis, options?: CompositeDependencySchedulingOptions): readonly string[];
172
+ /** Bounds applied while parsing untrusted definitions or documents. */
153
173
  type ParseLimits = {
154
174
  readonly maxDepth?: number;
155
175
  readonly maxIssues?: number;
@@ -165,11 +185,14 @@ type ParseLimits = {
165
185
  /** Maximum parsed template references. */
166
186
  readonly maxTemplateTokens?: number;
167
187
  };
188
+ /** Options for parsing a portable generator definition. */
168
189
  type ParseDefinitionOptions = {
169
190
  readonly registry: Pick<GeneratorRegistry | GeneratorRegistrySnapshot, "lookup">;
170
191
  readonly limits?: ParseLimits;
171
192
  };
193
+ /** Options for parsing a versioned generator document. */
172
194
  type ParseDocumentOptions = ParseDefinitionOptions;
195
+ /** The success-or-failure result returned by `safeParseDefinition`. */
173
196
  type DefinitionParseResult = {
174
197
  readonly success: true;
175
198
  readonly value: ParsedGeneratorDefinition;
@@ -177,6 +200,7 @@ type DefinitionParseResult = {
177
200
  readonly success: false;
178
201
  readonly issues: readonly ConstructaError[];
179
202
  };
203
+ /** The success-or-failure result returned by `safeParseDocument`. */
180
204
  type DocumentParseResult = {
181
205
  readonly success: true;
182
206
  readonly value: import("constructa-schema").GeneratorDocumentV1;
@@ -190,15 +214,18 @@ declare function safeParseDefinition(value: unknown, options: ParseDefinitionOpt
190
214
  /** Parses a versioned document and its root definition through the same pipeline. */
191
215
  declare function parseDocument(value: unknown, options: ParseDocumentOptions): import("constructa-schema").GeneratorDocumentV1;
192
216
  declare function safeParseDocument(value: unknown, options: ParseDocumentOptions): DocumentParseResult;
217
+ /** A generator type and version required by an implementation. */
193
218
  type GeneratorDependency = {
194
219
  readonly typeId: string;
195
220
  readonly path: ValidationPath$1;
196
221
  };
197
222
  declare const parsedGeneratorDefinition: unique symbol;
198
223
  /** A runtime-validated definition accepted by an executor without revalidation. */
224
+ /** A generator definition already validated against a registry. */
199
225
  type ParsedGeneratorDefinition = GeneratorDefinition$1 & {
200
226
  readonly [parsedGeneratorDefinition]: true;
201
227
  };
228
+ /** A trusted implementation of one portable generator type. */
202
229
  type GeneratorImplementation<Definition extends GeneratorDefinition$1<Output>, Output> = {
203
230
  readonly type: string;
204
231
  readonly version: number;
@@ -211,14 +238,17 @@ type GeneratorImplementation<Definition extends GeneratorDefinition$1<Output>, O
211
238
  readonly context: GenerationContext;
212
239
  }) => Output;
213
240
  };
241
+ /** A registry entry for one generator type. */
214
242
  type RegisteredGenerator = {
215
243
  readonly type: string;
216
244
  readonly version: number;
217
245
  };
246
+ /** An immutable point-in-time view of a generator registry. */
218
247
  type GeneratorRegistrySnapshot = {
219
248
  readonly generators: readonly RegisteredGenerator[];
220
249
  readonly lookup: (type: string, path?: ValidationPath$1) => GeneratorImplementation<GeneratorDefinition$1, unknown>;
221
250
  };
251
+ /** A mutable registry of trusted generator implementations. */
222
252
  type GeneratorRegistry = {
223
253
  register: <Definition extends GeneratorDefinition$1<Output>, Output>(implementation: GeneratorImplementation<Definition, Output>) => void;
224
254
  replace: <Definition extends GeneratorDefinition$1<Output>, Output>(implementation: GeneratorImplementation<Definition, Output>) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;KAyBY;EACV;EACA,QAAQ;EACR,MAAM,iBAAiB;;KAGb,sBAAsB;KAItB;KAEA;;WAED,OAAO;;;;;WAKP,SAAS;;WAET;;WAEA,SAAS;;WAET;;KAGC;EACV,WAAW,mBAAmB,uBAC5B,YAAY,YACZ,UAAU,iDACqB,MAAM;;cAG5B;cACA;KAED;WACD,kBAAkB;WAClB,gBAAgB;;KAGf;WACD;WACA;WACA,QAAQ;WACR,YAAY;WACZ,MAAM;WACN;;;;;;iBAYK,mBAAmB,SAAS,sBAAsB;;iBA4ClD,6BAA6B;;;;;iBAwC7B,cAAc,MAAM;;iBAcpB,mBAAmB,MAAM,OAAO;;iBAuChC,2BAA2B;;KAK/B;WACD,QAAQ;;WAER,MAAM;;WAEN,eAAe,QACtB,YAAY,sBAAoB,SAChC,aAAa,4BACV;;;;;WAKI,YAAY;;WAEZ,yBAAyB;;WAEzB,gCACP,YAAY,uBACZ,aAAa,qCACD;;;KAIJ;;KAGA;WACG;WAA0B;;WAC1B;WAA4B,MAAM;;KAErC;;WAED,OAAO;;;;;;;;;iBAUF,oBACd,gBACA,UAAS,sCACC;;iBA0DI,mBACd,gBACA,OAAM,mBACL;;KAgCS;WACD,MAAM;;;KAIL;WACD;WACA,uBAAuB;;;KAItB;WACD,gBAAgB;;KAGf;;WAED,0BAA0B;;WAE1B;;WAEA;;;KAIC;EACV,UAAU,MAAM;;;KAIN;EACV,eAAe,QACb,YAAY,sBAAoB,SAChC,wBACG;;KAGK;WACD,QAAQ;WACR,OAAO;WACP,eAAe;WACf,aAAa;WACb,oBAAoB;WACpB,gCAAgC;;;;;;;iBAQ3B,wBACd,SAAS,2BACR;;iBAyFa,kCACd,gBAAgB,4BACf;;;;;iBAkCa,8BACd,UAAU,6BACV,UAAS;KA0IC;WACD;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;KAGC;WACD,UAAU,KACjB,oBAAoB;WAGb,SAAS;;KAGR,uBAAuB;KAEvB;WACG;WAAwB,OAAO;;WAC/B;WAAyB,iBAAiB;;KAE7C;WAEG;WACA,mCAAmC;;WAEnC;WAAyB,iBAAiB;;;iBAGzC,gBACd,gBACA,SAAS,yBACR;iBAea,oBACd,gBACA,SAAS,yBACR;;iBAKa,cACd,gBACA,SAAS,mDACoB;iBAMf,kBACd,gBACA,SAAS,uBACR;KAsBS;WACD;WACA,MAAM;;cAGH;;KAGF,4BAA4B;YAC5B;;KAKA,wBACV,mBAAmB,sBAAoB,SACvC;WAES;WACA;WACA,qBACP,iCACY;WACL,uBACP,YAAY,wBACA;;WAEL,4BACP,YAAY,wBACA;WACL,WAAW;aACT,YAAY;aACZ,SAAS;QACd;;KAGI;WACD;WACA;;KAGC;WACD,qBAAqB;WACrB,SACP,cACA,OAAO,qBACJ,wBAAwB;;KAGnB;EACV,WAAW,mBAAmB,sBAAoB,SAAS,QACzD,gBAAgB,wBAAwB,YAAY;EAEtD,UAAU,mBAAmB,sBAAoB,SAAS,QACxD,gBAAgB,wBAAwB,YAAY;EAEtD,SACE,cACA,OAAO,qBACJ,wBAAwB;EAC7B,gBAAgB;;;iBAUF,kBAAkB;;;;;iBAoDlB,eACd,UAAU,oBAAoB,4BAC7B;;;;;iBA4ca,sBACR,mBAAmB,sBAAoB,SAC7C,QAEA,gBAAgB,wBAAwB,YAAY,UACnD,wBAAwB,YAAY;;iBAMvB,0BACd,cACM,mBAAmB,sBAAoB,SAC7C,YAAY,aAAa;;;;;;iBAUX,8BACd,mBAAmB,sBAAoB,SACvC,QAEA,gBAAgB,wBAAwB,YAAY,SACpD;WACW,YAAY;WACZ,SAAS;WACT,OAAO;IAEjB"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;;;;;KAyBY;EACV;EACA,QAAQ;EACR,MAAM,iBAAiB;;;KAIb,sBAAsB;;KAKtB;;KAGA;;WAED,OAAO;;;;;WAKP,SAAS;;WAET;;WAEA,SAAS;;WAET;;;KAIC;EACV,WAAW,mBAAmB,uBAC5B,YAAY,YACZ,UAAU,iDACqB,MAAM;;;cAI5B;;cAEA;;KAGD;WACD,kBAAkB;WAClB,gBAAgB;;;KAIf;WACD;WACA;WACA,QAAQ;WACR,YAAY;WACZ,MAAM;WACN;;;;;;iBAYK,mBAAmB,SAAS,sBAAsB;;iBA4ClD,6BAA6B;;;;;iBAwC7B,cAAc,MAAM;;iBAcpB,mBAAmB,MAAM,OAAO;;iBAuChC,2BAA2B;;;KAM/B;WACD,QAAQ;;WAER,MAAM;;WAEN,eAAe,QACtB,YAAY,sBAAoB,SAChC,aAAa,4BACV;;;;;WAKI,YAAY;;WAEZ,yBAAyB;;WAEzB,gCACP,YAAY,uBACZ,aAAa,qCACD;;;;KAKJ;;;KAIA;WACG;WAA0B;;WAC1B;WAA4B,MAAM;;;KAGrC;;WAED,OAAO;;;;;;;;;iBAUF,oBACd,gBACA,UAAS,sCACC;;iBA0DI,mBACd,gBACA,OAAM,mBACL;;;KAiCS;WACD,MAAM;;;;KAKL;WACD;WACA,uBAAuB;;;;KAKtB;WACD,gBAAgB;;;KAIf;;WAED,0BAA0B;;WAE1B;;WAEA;;;;KAKC;EACV,UAAU,MAAM;;;;KAKN;EACV,eAAe,QACb,YAAY,sBAAoB,SAChC,wBACG;;;KAIK;WACD,QAAQ;WACR,OAAO;WACP,eAAe;WACf,aAAa;WACb,oBAAoB;WACpB,gCAAgC;;;;;;;iBAQ3B,wBACd,SAAS,2BACR;;iBAyFa,kCACd,gBAAgB,4BACf;;;;;iBAkCa,8BACd,UAAU,6BACV,UAAS;;KA2IC;WACD;WACA;WACA;;WAEA;;WAEA;;WAEA;;WAEA;;WAEA;;;KAIC;WACD,UAAU,KACjB,oBAAoB;WAGb,SAAS;;;KAIR,uBAAuB;;KAGvB;WACG;WAAwB,OAAO;;WAC/B;WAAyB,iBAAiB;;;KAG7C;WAEG;WACA,mCAAmC;;WAEnC;WAAyB,iBAAiB;;;iBAGzC,gBACd,gBACA,SAAS,yBACR;iBAea,oBACd,gBACA,SAAS,yBACR;;iBAKa,cACd,gBACA,SAAS,mDACoB;iBAMf,kBACd,gBACA,SAAS,uBACR;;KAuBS;WACD;WACA,MAAM;;cAGH;;;KAIF,4BAA4B;YAC5B;;;KAMA,wBACV,mBAAmB,sBAAoB,SACvC;WAES;WACA;WACA,qBACP,iCACY;WACL,uBACP,YAAY,wBACA;;WAEL,4BACP,YAAY,wBACA;WACL,WAAW;aACT,YAAY;aACZ,SAAS;QACd;;;KAII;WACD;WACA;;;KAIC;WACD,qBAAqB;WACrB,SACP,cACA,OAAO,qBACJ,wBAAwB;;;KAInB;EACV,WAAW,mBAAmB,sBAAoB,SAAS,QACzD,gBAAgB,wBAAwB,YAAY;EAEtD,UAAU,mBAAmB,sBAAoB,SAAS,QACxD,gBAAgB,wBAAwB,YAAY;EAEtD,SACE,cACA,OAAO,qBACJ,wBAAwB;EAC7B,gBAAgB;;;iBAUF,kBAAkB;;;;;iBAoDlB,eACd,UAAU,oBAAoB,4BAC7B;;;;;iBA4ca,sBACR,mBAAmB,sBAAoB,SAC7C,QAEA,gBAAgB,wBAAwB,YAAY,UACnD,wBAAwB,YAAY;;iBAMvB,0BACd,cACM,mBAAmB,sBAAoB,SAC7C,YAAY,aAAa;;;;;;iBAUX,8BACd,mBAAmB,sBAAoB,SACvC,QAEA,gBAAgB,wBAAwB,YAAY,SACpD;WACW,YAAY;WACZ,SAAS;WACT,OAAO;IAEjB"}
package/dist/index.js CHANGED
@@ -1,7 +1,9 @@
1
1
  import { ConstructaError, assertGeneratorDefinition, normalizeConstructaError, parseDocument as parseDocument$1, validateDocument, validateGeneratorDefinition } from "constructa-schema";
2
2
  //#region src/index.ts
3
3
  const validatedRandomSources = /* @__PURE__ */ new WeakSet();
4
+ /** The deterministic random algorithm used by `createSeededRandom`. */
4
5
  const SEEDED_RANDOM_ALGORITHM = "mulberry32";
6
+ /** The compatibility version of the seeded random algorithm. */
5
7
  const SEEDED_RANDOM_ALGORITHM_VERSION = 1;
6
8
  const SEEDED_RANDOM_METADATA = Object.freeze({
7
9
  algorithm: SEEDED_RANDOM_ALGORITHM,
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["parseSchemaDocument"],"sources":["../src/index.ts"],"sourcesContent":["import {\n assertGeneratorDefinition,\n ConstructaError,\n type GeneratorDefinition,\n normalizeConstructaError,\n parseDocument as parseSchemaDocument,\n type ValidationIssue,\n type ValidationPath,\n type ValidationPathSegment,\n validateDocument,\n validateGeneratorDefinition,\n} from \"constructa-schema\";\n\nexport type {\n GeneratorDefinition,\n Infer,\n ValidationIssue,\n ValidationPath,\n ValidationPathSegment,\n} from \"constructa-schema\";\n\n/**\n * Random values are always half-open: `float()` returns [0, 1), while\n * `integer(maxExclusive)` returns an integer in [0, maxExclusive).\n */\nexport type RandomSource = {\n float(): number;\n integer(maxExclusive: number): number;\n bytes(length: number): Uint8Array;\n};\n\nexport type RandomSourceAdapter = RandomSource;\n\nconst validatedRandomSources = new WeakSet<object>();\n\nexport type Seed = number | string;\n\nexport type ExecutionOptions = {\n /** Uses a fresh deterministic source for this root execution. */\n readonly seed?: Seed;\n /**\n * A caller-owned source consumed by this execution. The executor does not\n * reset, clone, or otherwise retain it after the call returns.\n */\n readonly random?: RandomSource;\n /** Maximum child-definition nesting below the root. Defaults to 64. */\n readonly maxDepth?: number;\n /** Stops execution before the next generator dispatch when aborted. */\n readonly signal?: AbortSignal;\n /** Stops execution before the next generator dispatch after this UTC epoch time. */\n readonly deadline?: number;\n};\n\nexport type Executor = {\n generate: <Definition extends GeneratorDefinition>(\n definition: Definition,\n options?: ExecutionOptions,\n ) => import(\"constructa-schema\").Infer<Definition>;\n};\n\nexport const SEEDED_RANDOM_ALGORITHM = \"mulberry32\";\nexport const SEEDED_RANDOM_ALGORITHM_VERSION = 1;\n\nexport type SeededRandomMetadata = {\n readonly algorithm: typeof SEEDED_RANDOM_ALGORITHM;\n readonly version: typeof SEEDED_RANDOM_ALGORITHM_VERSION;\n};\n\nexport type DeterminismCompatibility = {\n readonly engineVersion: string;\n readonly generatorImplementationVersion: number;\n readonly random: SeededRandomMetadata;\n readonly definition: GeneratorDefinition;\n readonly seed: Seed;\n readonly executionMode: string;\n};\n\nconst SEEDED_RANDOM_METADATA: SeededRandomMetadata = Object.freeze({\n algorithm: SEEDED_RANDOM_ALGORITHM,\n version: SEEDED_RANDOM_ALGORITHM_VERSION,\n});\n\n/**\n * Validates an injected source and guards every produced value. No fallback\n * randomness is used when an adapter violates its contract.\n */\nexport function createRandomSource(adapter: RandomSourceAdapter): RandomSource {\n assertRandomSourceAdapter(adapter);\n\n const source = Object.freeze({\n float() {\n const value = adapter.float();\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n value < 0 ||\n value >= 1\n ) {\n throw invalidRandomSource(\n \"float() must return a finite number in [0, 1).\",\n );\n }\n return value;\n },\n integer(maxExclusive: number) {\n assertRandomLength(maxExclusive, \"maxExclusive\");\n const value = adapter.integer(maxExclusive);\n if (!Number.isSafeInteger(value) || value < 0 || value >= maxExclusive) {\n throw invalidRandomSource(\n \"integer(maxExclusive) must return a safe integer in [0, maxExclusive).\",\n );\n }\n return value;\n },\n bytes(length: number) {\n assertByteLength(length);\n const value = adapter.bytes(length);\n if (!(value instanceof Uint8Array) || value.length !== length) {\n throw invalidRandomSource(\n \"bytes(length) must return a Uint8Array with exactly length bytes.\",\n );\n }\n return value;\n },\n });\n validatedRandomSources.add(source);\n return source;\n}\n\n/** Creates the default platform-backed random source. It makes no security claim. */\nexport function createDefaultRandomSource(): RandomSource {\n const crypto = globalThis.crypto;\n if (crypto?.getRandomValues === undefined) {\n throw new ConstructaError({\n kind: \"system\",\n code: \"SYSTEM_RANDOM_UNAVAILABLE\",\n path: [],\n message: \"Platform cryptographic random values are unavailable.\",\n });\n }\n\n const randomBytes = (length: number) => {\n const bytes = new Uint8Array(length);\n for (let offset = 0; offset < length; offset += 65_536) {\n crypto.getRandomValues(bytes.subarray(offset, offset + 65_536));\n }\n return bytes;\n };\n const uint32 = () => new DataView(randomBytes(4).buffer).getUint32(0);\n const uint53 = () => (uint32() & 0x1f_ffff) * 2 ** 32 + uint32();\n\n return createRandomSource({\n float() {\n return uint53() / 2 ** 53;\n },\n integer(maxExclusive: number) {\n const range = 2 ** 53;\n const upperLimit = range - (range % maxExclusive);\n let value = uint53();\n while (value >= upperLimit) value = uint53();\n return value % maxExclusive;\n },\n bytes: randomBytes,\n });\n}\n\n/**\n * Returns a canonical seed representation. Strings use UTF-8 exactly; finite\n * numbers use their JavaScript numeric representation, with -0 normalized to 0.\n */\nexport function normalizeSeed(seed: Seed): string {\n if (typeof seed === \"string\") return `string:${seed}`;\n if (typeof seed === \"number\" && Number.isFinite(seed)) {\n return `number:${Object.is(seed, -0) ? \"0\" : String(seed)}`;\n }\n throw new ConstructaError({\n kind: \"configuration\",\n code: \"INVALID_SEED\",\n path: [\"seed\"],\n message: \"seed must be a string or finite number.\",\n });\n}\n\n/** Creates an isolated deterministic random source for the current algorithm version. */\nexport function createSeededRandom(seed: Seed): RandomSource {\n let state = hashSeed(normalizeSeed(seed));\n const uint32 = () => {\n state = (state + 0x6d2b_79f5) >>> 0;\n let value = state;\n value = Math.imul(value ^ (value >>> 15), value | 1);\n value ^= value + Math.imul(value ^ (value >>> 7), value | 61);\n return (value ^ (value >>> 14)) >>> 0;\n };\n const uint53 = () => (uint32() & 0x1f_ffff) * 2 ** 32 + uint32();\n\n return createRandomSource({\n float() {\n return uint53() / 2 ** 53;\n },\n integer(maxExclusive: number) {\n const range = 2 ** 53;\n const upperLimit = range - (range % maxExclusive);\n let value = uint53();\n while (value >= upperLimit) value = uint53();\n return value % maxExclusive;\n },\n bytes(length: number) {\n const bytes = new Uint8Array(length);\n for (let index = 0; index < length; index += 1) {\n if (index % 4 === 0) {\n const value = uint32();\n bytes[index] = value & 0xff;\n if (index + 1 < length) bytes[index + 1] = (value >>> 8) & 0xff;\n if (index + 2 < length) bytes[index + 2] = (value >>> 16) & 0xff;\n if (index + 3 < length) bytes[index + 3] = value >>> 24;\n }\n }\n return bytes;\n },\n });\n}\n\n/** Metadata for reproducibility diagnostics. It intentionally contains no seed. */\nexport function getSeededRandomMetadata(): SeededRandomMetadata {\n return SEEDED_RANDOM_METADATA;\n}\n\n/** Services supplied by the engine. Implementations must not use global randomness. */\nexport type GenerationContext = {\n readonly random: RandomSource;\n /** The definition path currently being generated. */\n readonly path: ValidationPath;\n /** Delegates a typed child definition to the engine. */\n readonly executeChild: <Output>(\n definition: GeneratorDefinition<Output>,\n pathSegment: ValidationPathSegment,\n ) => Output;\n /**\n * Read-only values from the object currently being generated. Values are\n * available only after their field has completed.\n */\n readonly references: ReferenceResolver;\n /** Creates an isolated scope for the fields of one composite object. */\n readonly createObjectScope: () => ObjectGenerationScope;\n /** Returns value dependencies declared by one direct child definition. */\n readonly analyzeChildValueDependencies: (\n definition: GeneratorDefinition,\n pathSegment: ValidationPathSegment,\n ) => readonly ValueDependency[];\n};\n\n/** A property path relative to the object containing a reference. */\nexport type ReferencePath = readonly string[];\n\n/** A parsed template fragment. Braces are escaped with `{{` and `}}`. */\nexport type TemplateToken =\n | { readonly type: \"literal\"; readonly value: string }\n | { readonly type: \"reference\"; readonly path: ReferencePath };\n\nexport type ParseTemplateTokensOptions = {\n /** Definition-relative path reported for malformed template syntax. */\n readonly path?: ValidationPath;\n};\n\n/**\n * Parses MVP template syntax without executing or resolving references.\n *\n * `{field}` addresses a sibling and `{field.nested}` addresses a value below\n * that sibling. `{{` and `}}` emit literal braces. Whitespace, empty path\n * segments, and expression characters inside a reference are unsupported.\n */\nexport function parseTemplateTokens(\n source: string,\n options: ParseTemplateTokensOptions = {},\n): readonly TemplateToken[] {\n const path = options.path ?? [];\n if (typeof source !== \"string\") {\n throw templateTokenError(path, \"Template source must be a string.\");\n }\n assertContextPath(path);\n\n const tokens: TemplateToken[] = [];\n let literal = \"\";\n const appendLiteral = (value: string) => {\n literal += value;\n };\n const flushLiteral = () => {\n if (literal.length === 0) return;\n tokens.push(Object.freeze({ type: \"literal\", value: literal }));\n literal = \"\";\n };\n\n for (let index = 0; index < source.length; index += 1) {\n const character = source[index];\n if (character === \"{\") {\n if (source[index + 1] === \"{\") {\n appendLiteral(\"{\");\n index += 1;\n continue;\n }\n const closingIndex = source.indexOf(\"}\", index + 1);\n if (closingIndex === -1) {\n throw templateTokenError(\n path,\n \"Template reference is missing a closing brace.\",\n );\n }\n const reference = source.slice(index + 1, closingIndex);\n const referencePath = parseReferencePath(reference, path);\n flushLiteral();\n tokens.push(Object.freeze({ type: \"reference\", path: referencePath }));\n index = closingIndex;\n continue;\n }\n if (character === \"}\") {\n if (source[index + 1] === \"}\") {\n appendLiteral(\"}\");\n index += 1;\n continue;\n }\n throw templateTokenError(\n path,\n \"Template contains an unmatched closing brace.\",\n );\n }\n appendLiteral(character ?? \"\");\n }\n flushLiteral();\n return Object.freeze(tokens);\n}\n\n/** Parses one dot-separated object-local reference path. */\nexport function parseReferencePath(\n source: string,\n path: ValidationPath = [],\n): ReferencePath {\n if (typeof source !== \"string\" || source.length === 0) {\n throw templateTokenError(path, \"Template reference must not be empty.\");\n }\n assertContextPath(path);\n const segments = source.split(\".\");\n if (\n segments.some(\n (segment) => segment.length === 0 || !/^[\\p{L}\\p{N}_$-]+$/u.test(segment),\n )\n ) {\n throw templateTokenError(\n path,\n \"Template reference segments must use letters, numbers, underscores, dollar signs, or hyphens.\",\n );\n }\n return Object.freeze(segments);\n}\n\nfunction templateTokenError(\n path: ValidationPath,\n message: string,\n): ConstructaError {\n return new ConstructaError({\n kind: \"configuration\",\n code: \"INVALID_TEMPLATE_TOKEN\",\n path,\n message,\n });\n}\n\n/** A portable value dependency declared by a generator definition. */\nexport type ValueDependency = {\n readonly path: ReferencePath;\n};\n\n/** Dependencies for a direct field in a composite definition. */\nexport type CompositeDependencyNode = {\n readonly fieldPath: readonly [string];\n readonly dependencies: readonly ValueDependency[];\n};\n\n/** Portable dependency data used to schedule one composite object. */\nexport type CompositeDependencyAnalysis = {\n readonly nodes: readonly CompositeDependencyNode[];\n};\n\nexport type CompositeDependencySchedulingOptions = {\n /** Every reference path that exists in the containing object definition. */\n readonly referencePaths?: readonly ReferencePath[];\n /** Maximum fields participating in one object-local reference graph. */\n readonly maxNodes?: number;\n /** Maximum unique field dependencies in one object-local reference graph. */\n readonly maxEdges?: number;\n};\n\n/** The read-only capability supplied to generators that resolve references. */\nexport type ReferenceResolver = {\n resolve: (path: ReferencePath) => unknown;\n};\n\n/** Executes and records completed fields within one isolated object scope. */\nexport type ObjectGenerationScope = {\n executeChild: <Output>(\n definition: GeneratorDefinition<Output>,\n pathSegment: string,\n ) => Output;\n};\n\nexport type GenerationContextOptions = {\n readonly random: RandomSource;\n readonly path?: ValidationPath;\n readonly executeChild?: GenerationContext[\"executeChild\"];\n readonly references?: ReferenceResolver;\n readonly createObjectScope?: GenerationContext[\"createObjectScope\"];\n readonly analyzeChildValueDependencies?: GenerationContext[\"analyzeChildValueDependencies\"];\n};\n\n/**\n * Creates the engine-owned capability view supplied to implementations.\n * Application code normally receives this through `generate`, rather than\n * constructing one directly.\n */\nexport function createGenerationContext(\n options: GenerationContextOptions,\n): GenerationContext {\n if (typeof options !== \"object\" || options === null) {\n throw contextError(\n \"INVALID_GENERATION_CONTEXT\",\n [],\n \"Context options must be an object.\",\n );\n }\n assertContextPath(options.path ?? []);\n if (\n typeof options.executeChild !== \"undefined\" &&\n typeof options.executeChild !== \"function\"\n ) {\n throw contextError(\n \"INVALID_GENERATION_CONTEXT\",\n [],\n \"executeChild must be a function when present.\",\n );\n }\n\n // This validates the Phase 012 source contract without drawing from it.\n const random = validatedRandomSources.has(options.random)\n ? options.random\n : createRandomSource(options.random);\n const path = Object.freeze([...(options.path ?? [])]);\n const executeChild =\n options.executeChild ??\n ((definition, pathSegment) => {\n assertGeneratorDefinition(definition, [...path, pathSegment]);\n assertContextPathSegment(pathSegment);\n throw new ConstructaError({\n kind: \"execution\",\n code: \"CHILD_EXECUTION_UNAVAILABLE\",\n path: [...path, pathSegment],\n message: \"Child execution is not available in this generation context.\",\n });\n });\n\n const references = options.references ?? unavailableReferenceResolver(path);\n if (\n typeof references !== \"object\" ||\n references === null ||\n typeof references.resolve !== \"function\"\n ) {\n throw contextError(\n \"INVALID_GENERATION_CONTEXT\",\n [],\n \"references must provide a resolve function when present.\",\n );\n }\n const createObjectScope =\n options.createObjectScope ??\n (() =>\n Object.freeze({\n executeChild<Output>(\n definition: GeneratorDefinition<Output>,\n pathSegment: string,\n ): Output {\n return executeChild(definition, pathSegment);\n },\n }));\n if (typeof createObjectScope !== \"function\") {\n throw contextError(\n \"INVALID_GENERATION_CONTEXT\",\n [],\n \"createObjectScope must be a function when present.\",\n );\n }\n const analyzeChildValueDependencies =\n options.analyzeChildValueDependencies ?? (() => []);\n if (typeof analyzeChildValueDependencies !== \"function\") {\n throw contextError(\n \"INVALID_GENERATION_CONTEXT\",\n [],\n \"analyzeChildValueDependencies must be a function when present.\",\n );\n }\n\n return Object.freeze({\n random,\n path,\n executeChild,\n references: Object.freeze({ resolve: references.resolve }),\n createObjectScope,\n analyzeChildValueDependencies,\n });\n}\n\n/** Freezes direct-field dependency declarations into portable analysis data. */\nexport function createCompositeDependencyAnalysis(\n nodes: readonly CompositeDependencyNode[],\n): CompositeDependencyAnalysis {\n if (!Array.isArray(nodes)) {\n throw contextError(\n \"INVALID_COMPOSITE_DEPENDENCIES\",\n [],\n \"Composite dependency nodes must be an array.\",\n );\n }\n const names = new Set<string>();\n const normalized = nodes.map((node, index) => {\n if (!isCompositeDependencyNode(node) || names.has(node.fieldPath[0])) {\n throw contextError(\n \"INVALID_COMPOSITE_DEPENDENCIES\",\n [\"nodes\", index],\n \"Each composite dependency node must name one unique field.\",\n );\n }\n names.add(node.fieldPath[0]);\n return Object.freeze({\n fieldPath: Object.freeze([...node.fieldPath]) as readonly [string],\n dependencies: Object.freeze(\n node.dependencies.map((dependency) =>\n Object.freeze({ path: Object.freeze([...dependency.path]) }),\n ),\n ),\n });\n });\n return Object.freeze({ nodes: Object.freeze(normalized) });\n}\n\n/**\n * Returns a deterministic execution order for direct object fields. A\n * dependency path may target a nested value below another direct field.\n */\nexport function scheduleCompositeDependencies(\n analysis: CompositeDependencyAnalysis,\n options: CompositeDependencySchedulingOptions = {},\n): readonly string[] {\n const nodes = analysis.nodes;\n const maxNodes = options.maxNodes ?? 10_000;\n const maxEdges = options.maxEdges ?? 100_000;\n if (\n !Number.isSafeInteger(maxNodes) ||\n maxNodes < 1 ||\n !Number.isSafeInteger(maxEdges) ||\n maxEdges < 1\n ) {\n throw contextError(\n \"INVALID_COMPOSITE_DEPENDENCIES\",\n [],\n \"Composite graph limits must be positive safe integers.\",\n );\n }\n if (nodes.length > maxNodes) {\n throw new ConstructaError({\n kind: \"configuration\",\n code: \"REFERENCE_GRAPH_NODE_LIMIT\",\n path: [],\n message:\n \"Object reference graph exceeds the configured maximum field count.\",\n });\n }\n const byName = new Map(nodes.map((node) => [node.fieldPath[0], node]));\n const referencePaths = new Set(\n (options.referencePaths ?? nodes.map((node) => node.fieldPath)).map(\n referencePathKey,\n ),\n );\n const remaining = new Map<string, Set<string>>();\n const dependents = new Map<string, string[]>();\n let edgeCount = 0;\n\n for (const node of nodes) {\n const dependencies = new Set<string>();\n for (const dependency of node.dependencies) {\n const target = dependency.path[0];\n if (\n target === undefined ||\n !byName.has(target) ||\n !referencePaths.has(referencePathKey(dependency.path))\n ) {\n throw new ConstructaError({\n kind: \"dependency\",\n code: \"REFERENCE_NOT_FOUND\",\n path: [...node.fieldPath],\n message: \"The referenced object value could not be found.\",\n details: { referencePath: [...dependency.path] },\n });\n }\n if (!dependencies.has(target)) {\n dependencies.add(target);\n edgeCount += 1;\n }\n if (edgeCount > maxEdges) {\n throw new ConstructaError({\n kind: \"configuration\",\n code: \"REFERENCE_GRAPH_EDGE_LIMIT\",\n path: [...node.fieldPath],\n message:\n \"Object reference graph exceeds the configured maximum dependency count.\",\n });\n }\n const targets = dependents.get(target) ?? [];\n if (!targets.includes(node.fieldPath[0])) targets.push(node.fieldPath[0]);\n dependents.set(target, targets);\n }\n remaining.set(node.fieldPath[0], dependencies);\n }\n\n const ready = nodes\n .filter((node) => (remaining.get(node.fieldPath[0])?.size ?? 0) === 0)\n .map((node) => node.fieldPath[0])\n .sort();\n const ordered: string[] = [];\n while (ready.length > 0) {\n const field = ready.shift();\n if (field === undefined) continue;\n ordered.push(field);\n for (const dependent of (dependents.get(field) ?? []).sort()) {\n const dependencies = remaining.get(dependent);\n dependencies?.delete(field);\n if (dependencies?.size === 0) {\n ready.push(dependent);\n ready.sort();\n }\n }\n }\n if (ordered.length !== nodes.length) {\n const cycle = findCompositeDependencyCycle(remaining);\n throw new ConstructaError({\n kind: \"dependency\",\n code: \"CIRCULAR_REFERENCE\",\n path: cycle.slice(0, 1),\n message: `Circular object value reference detected: ${cycle.join(\" -> \")}.`,\n details: { fields: cycle },\n });\n }\n return Object.freeze(ordered);\n}\n\nfunction findCompositeDependencyCycle(\n remaining: ReadonlyMap<string, ReadonlySet<string>>,\n): string[] {\n const visited = new Set<string>();\n const active = new Set<string>();\n const stack: string[] = [];\n const visit = (field: string): string[] | undefined => {\n visited.add(field);\n active.add(field);\n stack.push(field);\n for (const dependency of [...(remaining.get(field) ?? [])].sort()) {\n if (!remaining.has(dependency)) continue;\n if (active.has(dependency)) {\n const start = stack.indexOf(dependency);\n return [...stack.slice(start), dependency];\n }\n if (!visited.has(dependency)) {\n const cycle = visit(dependency);\n if (cycle !== undefined) return cycle;\n }\n }\n active.delete(field);\n stack.pop();\n return undefined;\n };\n\n for (const field of [...remaining.keys()].sort()) {\n if (visited.has(field)) continue;\n const cycle = visit(field);\n if (cycle !== undefined) return cycle;\n }\n return [];\n}\n\nexport type ParseLimits = {\n readonly maxDepth?: number;\n readonly maxIssues?: number;\n readonly maxNodes?: number;\n /** Maximum UTF-8 encoded definition bytes. */\n readonly maxBytes?: number;\n /** Maximum properties in any input object record. */\n readonly maxObjectFields?: number;\n /** Maximum items in any input array. */\n readonly maxArrayLength?: number;\n /** Maximum template source length. */\n readonly maxTemplateLength?: number;\n /** Maximum parsed template references. */\n readonly maxTemplateTokens?: number;\n};\n\nexport type ParseDefinitionOptions = {\n readonly registry: Pick<\n GeneratorRegistry | GeneratorRegistrySnapshot,\n \"lookup\"\n >;\n readonly limits?: ParseLimits;\n};\n\nexport type ParseDocumentOptions = ParseDefinitionOptions;\n\nexport type DefinitionParseResult =\n | { readonly success: true; readonly value: ParsedGeneratorDefinition }\n | { readonly success: false; readonly issues: readonly ConstructaError[] };\n\nexport type DocumentParseResult =\n | {\n readonly success: true;\n readonly value: import(\"constructa-schema\").GeneratorDocumentV1;\n }\n | { readonly success: false; readonly issues: readonly ConstructaError[] };\n\n/** Parses untrusted runtime definition data without executing generator code. */\nexport function parseDefinition(\n value: unknown,\n options: ParseDefinitionOptions,\n): ParsedGeneratorDefinition {\n return parseDefinitionAtPath(value, [], options.registry, options.limits);\n}\n\nfunction parseDefinitionAtPath(\n value: unknown,\n path: ValidationPath,\n registry: ParseDefinitionOptions[\"registry\"],\n limits?: ParseLimits,\n): ParsedGeneratorDefinition {\n const result = parseRuntimeDefinition(value, path, { registry, limits });\n if (result.success) return result.value;\n throw result.issues[0];\n}\n\nexport function safeParseDefinition(\n value: unknown,\n options: ParseDefinitionOptions,\n): DefinitionParseResult {\n return parseRuntimeDefinition(value, [], options);\n}\n\n/** Parses a versioned document and its root definition through the same pipeline. */\nexport function parseDocument(\n value: unknown,\n options: ParseDocumentOptions,\n): import(\"constructa-schema\").GeneratorDocumentV1 {\n const result = safeParseDocument(value, options);\n if (result.success) return result.value;\n throw result.issues[0];\n}\n\nexport function safeParseDocument(\n value: unknown,\n options: ParseDocumentOptions,\n): DocumentParseResult {\n const limits = resolveParseLimits(options);\n const documentIssues = validationIssuesToErrors(\n validateDocumentSafely(value),\n [],\n limits.maxIssues,\n );\n if (documentIssues.length > 0)\n return { success: false, issues: documentIssues };\n\n // Schema parsing is now safe because validation has rejected hostile shapes.\n const document = parseSchemaDocument(value);\n const definition = parseRuntimeDefinition(\n document.definition,\n [\"definition\"],\n options,\n );\n return definition.success\n ? { success: true, value: document }\n : { success: false, issues: definition.issues };\n}\n\nexport type GeneratorDependency = {\n readonly typeId: string;\n readonly path: ValidationPath;\n};\n\ndeclare const parsedGeneratorDefinition: unique symbol;\n\n/** A runtime-validated definition accepted by an executor without revalidation. */\nexport type ParsedGeneratorDefinition = GeneratorDefinition & {\n readonly [parsedGeneratorDefinition]: true;\n};\n\nconst parsedDefinitions = new WeakSet<object>();\n\nexport type GeneratorImplementation<\n Definition extends GeneratorDefinition<Output>,\n Output,\n> = {\n readonly type: string;\n readonly version: number;\n readonly validateDefinition: (\n definition: unknown,\n ) => readonly ValidationIssue[];\n readonly analyzeDependencies?: (\n definition: Definition,\n ) => readonly GeneratorDependency[];\n /** Declares object-local value references used by this definition. */\n readonly analyzeValueDependencies?: (\n definition: Definition,\n ) => readonly ValueDependency[];\n readonly generate: (input: {\n readonly definition: Definition;\n readonly context: GenerationContext;\n }) => Output;\n};\n\nexport type RegisteredGenerator = {\n readonly type: string;\n readonly version: number;\n};\n\nexport type GeneratorRegistrySnapshot = {\n readonly generators: readonly RegisteredGenerator[];\n readonly lookup: (\n type: string,\n path?: ValidationPath,\n ) => GeneratorImplementation<GeneratorDefinition, unknown>;\n};\n\nexport type GeneratorRegistry = {\n register: <Definition extends GeneratorDefinition<Output>, Output>(\n implementation: GeneratorImplementation<Definition, Output>,\n ) => void;\n replace: <Definition extends GeneratorDefinition<Output>, Output>(\n implementation: GeneratorImplementation<Definition, Output>,\n ) => void;\n lookup: (\n type: string,\n path?: ValidationPath,\n ) => GeneratorImplementation<GeneratorDefinition, unknown>;\n snapshot: () => GeneratorRegistrySnapshot;\n};\n\nconst RESERVED_GENERATOR_TYPE_IDS = new Set([\n \"__proto__\",\n \"constructor\",\n \"prototype\",\n]);\n\n/** Creates advanced registry infrastructure. Normal factories do not require it. */\nexport function createRegistry(): GeneratorRegistry {\n const implementations = new Map<\n string,\n GeneratorImplementation<GeneratorDefinition, unknown>\n >();\n\n return {\n register(implementation) {\n assertRegistryImplementation(implementation);\n if (implementations.has(implementation.type)) {\n throw registryError(\n \"DUPLICATE_GENERATOR\",\n [\"type\"],\n `A generator with type \"${implementation.type}\" is already registered.`,\n );\n }\n implementations.set(\n implementation.type,\n freezeImplementation(\n implementation,\n ) as unknown as GeneratorImplementation<GeneratorDefinition, unknown>,\n );\n },\n replace(implementation) {\n assertRegistryImplementation(implementation);\n if (!implementations.has(implementation.type)) {\n throw registryError(\n \"UNKNOWN_GENERATOR\",\n [\"type\"],\n `No generator with type \"${implementation.type}\" is registered.`,\n );\n }\n implementations.set(\n implementation.type,\n freezeImplementation(\n implementation,\n ) as unknown as GeneratorImplementation<GeneratorDefinition, unknown>,\n );\n },\n lookup(type, path = []) {\n return lookupImplementation(implementations, type, path);\n },\n snapshot() {\n return createRegistrySnapshot(implementations);\n },\n };\n}\n\n/**\n * Creates an advanced single-value executor over an immutable registry\n * snapshot. Normal applications will receive this behavior through the SDK.\n */\nexport function createExecutor(\n registry: GeneratorRegistry | GeneratorRegistrySnapshot,\n): Executor {\n const snapshot = createExecutionSnapshot(registry);\n\n return Object.freeze({\n generate<Definition extends GeneratorDefinition>(\n definition: Definition,\n options?: ExecutionOptions,\n ): import(\"constructa-schema\").Infer<Definition> {\n const execution = resolveExecutionOptions(options);\n const parsed = parsedDefinitions.has(definition)\n ? definition\n : parseDefinition(definition, { registry: snapshot });\n return executeParsedDefinition(parsed, [], 0, {\n snapshot,\n ...execution,\n }) as import(\"constructa-schema\").Infer<Definition>;\n },\n });\n}\n\ntype ExecutionState = {\n readonly snapshot: GeneratorRegistrySnapshot;\n readonly random: RandomSource;\n readonly maxDepth: number;\n readonly signal?: AbortSignal;\n readonly deadline?: number;\n};\n\nfunction executeParsedDefinition(\n definition: GeneratorDefinition,\n path: ValidationPath,\n depth: number,\n state: ExecutionState,\n references: ReferenceResolver = unavailableReferenceResolver(path),\n): unknown {\n assertExecutionActive(state, path);\n const implementation = state.snapshot.lookup(definition.type, path);\n analyzeGeneratorDependencies(\n implementation,\n definition,\n state.snapshot,\n path,\n );\n const context = createGenerationContext({\n random: state.random,\n path,\n references,\n createObjectScope() {\n return createObjectGenerationScope(\n path,\n (child, pathSegment, scopeReferences) => {\n assertChildPathSegment(pathSegment, path);\n const childPath = [...path, pathSegment];\n if (depth >= state.maxDepth) {\n throw new ConstructaError({\n kind: \"execution\",\n code: \"MAX_EXECUTION_DEPTH\",\n path: childPath,\n message: \"Child execution exceeds the configured maximum depth.\",\n });\n }\n const parsed = parseDefinitionAtPath(\n child,\n childPath,\n state.snapshot,\n );\n return executeParsedDefinition(\n parsed,\n childPath,\n depth + 1,\n state,\n scopeReferences,\n );\n },\n );\n },\n analyzeChildValueDependencies(child, pathSegment) {\n assertChildPathSegment(pathSegment, path);\n const childPath = [...path, pathSegment];\n const parsed = parseDefinitionAtPath(child, childPath, state.snapshot);\n const childImplementation = state.snapshot.lookup(parsed.type, childPath);\n return analyzeValueDependencies(childImplementation, parsed, childPath);\n },\n executeChild<Output>(\n child: GeneratorDefinition<Output>,\n pathSegment: ValidationPathSegment,\n ): Output {\n assertChildPathSegment(pathSegment, path);\n const childPath = [...path, pathSegment];\n if (depth >= state.maxDepth) {\n throw new ConstructaError({\n kind: \"execution\",\n code: \"MAX_EXECUTION_DEPTH\",\n path: childPath,\n message: \"Child execution exceeds the configured maximum depth.\",\n });\n }\n const parsed = parseDefinitionAtPath(child, childPath, state.snapshot);\n return executeParsedDefinition(\n parsed,\n childPath,\n depth + 1,\n state,\n references,\n ) as Output;\n },\n });\n return invokeValidatedGeneratorImplementation(\n implementation,\n definition,\n context,\n path,\n );\n}\n\nfunction createObjectGenerationScope(\n path: ValidationPath,\n executeChild: (\n definition: GeneratorDefinition,\n pathSegment: string,\n references: ReferenceResolver,\n ) => unknown,\n): ObjectGenerationScope {\n const completed = new Map<string, unknown>();\n const resolver: ReferenceResolver = Object.freeze({\n resolve(referencePath: ReferencePath): unknown {\n assertReferencePath(referencePath, path);\n const key = referencePathKey(referencePath);\n if (!completed.has(key)) {\n throw new ConstructaError({\n kind: \"dependency\",\n code: \"REFERENCE_NOT_AVAILABLE\",\n path,\n message: \"The referenced object value has not completed.\",\n });\n }\n return completed.get(key);\n },\n });\n return Object.freeze({\n executeChild<Output>(\n definition: GeneratorDefinition<Output>,\n pathSegment: string,\n ): Output {\n const value = executeChild(definition, pathSegment, resolver) as Output;\n recordCompletedValue(completed, [pathSegment], value);\n return value;\n },\n });\n}\n\nfunction recordCompletedValue(\n completed: Map<string, unknown>,\n referencePath: readonly string[],\n value: unknown,\n visited = new WeakSet<object>(),\n): void {\n completed.set(referencePathKey(referencePath), value);\n if (typeof value !== \"object\" || value === null || visited.has(value)) return;\n visited.add(value);\n for (const [key, child] of Object.entries(value)) {\n recordCompletedValue(completed, [...referencePath, key], child, visited);\n }\n}\n\nfunction unavailableReferenceResolver(path: ValidationPath): ReferenceResolver {\n return Object.freeze({\n resolve(referencePath: ReferencePath): never {\n assertReferencePath(referencePath, path);\n throw new ConstructaError({\n kind: \"dependency\",\n code: \"REFERENCE_RESOLUTION_UNAVAILABLE\",\n path,\n message:\n \"Reference resolution is available only inside an object field.\",\n });\n },\n });\n}\n\nfunction assertReferencePath(\n referencePath: ReferencePath,\n contextPath: ValidationPath,\n): void {\n if (\n !Array.isArray(referencePath) ||\n referencePath.length === 0 ||\n referencePath.some(\n (segment) => typeof segment !== \"string\" || segment.length === 0,\n )\n ) {\n throw contextError(\n \"INVALID_REFERENCE_PATH\",\n contextPath,\n \"Reference paths must contain one or more non-empty string segments.\",\n );\n }\n}\n\nfunction referencePathKey(path: readonly string[]): string {\n return JSON.stringify(path);\n}\n\nfunction createExecutionSnapshot(\n registry: GeneratorRegistry | GeneratorRegistrySnapshot,\n): GeneratorRegistrySnapshot {\n if (typeof registry !== \"object\" || registry === null) {\n throw contextError(\n \"INVALID_EXECUTOR_REGISTRY\",\n [\"registry\"],\n \"Executor requires a generator registry.\",\n );\n }\n if (typeof (registry as GeneratorRegistry).snapshot === \"function\") {\n return (registry as GeneratorRegistry).snapshot();\n }\n if (typeof (registry as GeneratorRegistrySnapshot).lookup === \"function\") {\n return registry as GeneratorRegistrySnapshot;\n }\n throw contextError(\n \"INVALID_EXECUTOR_REGISTRY\",\n [\"registry\"],\n \"Executor requires a generator registry.\",\n );\n}\n\nfunction resolveExecutionOptions(\n options: ExecutionOptions | undefined,\n): Omit<ExecutionState, \"snapshot\"> {\n if (options === undefined) {\n return { random: createDefaultRandomSource(), maxDepth: 64 };\n }\n if (typeof options !== \"object\" || options === null) {\n throw contextError(\n \"INVALID_EXECUTION_OPTIONS\",\n [],\n \"Execution options must be an object.\",\n );\n }\n if (options.seed !== undefined && options.random !== undefined) {\n throw contextError(\n \"CONFLICTING_RANDOM_OPTIONS\",\n [\"seed\"],\n \"seed and random cannot be supplied together.\",\n );\n }\n const maxDepth = options.maxDepth ?? 64;\n if (!Number.isSafeInteger(maxDepth) || maxDepth < 0) {\n throw contextError(\n \"INVALID_EXECUTION_OPTIONS\",\n [\"maxDepth\"],\n \"maxDepth must be a non-negative safe integer.\",\n );\n }\n if (options.signal !== undefined && typeof options.signal !== \"object\") {\n throw contextError(\n \"INVALID_EXECUTION_OPTIONS\",\n [\"signal\"],\n \"signal must be an AbortSignal when supplied.\",\n );\n }\n if (\n options.deadline !== undefined &&\n (!Number.isFinite(options.deadline) || options.deadline < 0)\n ) {\n throw contextError(\n \"INVALID_EXECUTION_OPTIONS\",\n [\"deadline\"],\n \"deadline must be a non-negative finite UTC epoch time.\",\n );\n }\n const random =\n options.seed !== undefined\n ? createSeededRandom(options.seed)\n : options.random !== undefined\n ? createRandomSource(options.random)\n : createDefaultRandomSource();\n return {\n random,\n maxDepth,\n signal: options.signal,\n deadline: options.deadline,\n };\n}\n\nfunction assertExecutionActive(\n state: ExecutionState,\n path: ValidationPath,\n): void {\n if (state.signal?.aborted) {\n throw new ConstructaError({\n kind: \"execution\",\n code: \"EXECUTION_ABORTED\",\n path,\n message: \"Generator execution was aborted.\",\n });\n }\n if (state.deadline !== undefined && Date.now() >= state.deadline) {\n throw new ConstructaError({\n kind: \"execution\",\n code: \"EXECUTION_DEADLINE_EXCEEDED\",\n path,\n message: \"Generator execution exceeded its deadline.\",\n });\n }\n}\n\nfunction analyzeGeneratorDependencies(\n implementation: GeneratorImplementation<GeneratorDefinition, unknown>,\n definition: GeneratorDefinition,\n registry: GeneratorRegistrySnapshot,\n path: ValidationPath,\n): void {\n if (implementation.analyzeDependencies === undefined) return;\n let dependencies: readonly GeneratorDependency[];\n try {\n dependencies = implementation.analyzeDependencies(definition);\n } catch (cause) {\n throw normalizeConstructaError(cause, {\n kind: \"dependency\",\n code: \"DEPENDENCY_ANALYSIS_FAILED\",\n path,\n message: \"Generator dependency analysis failed.\",\n });\n }\n if (!Array.isArray(dependencies)) {\n throw new ConstructaError({\n kind: \"system\",\n code: \"DEPENDENCY_ANALYSIS_FAILED\",\n path,\n message: \"Generator dependency analysis returned an invalid result.\",\n });\n }\n for (const dependency of dependencies) {\n if (!isGeneratorDependency(dependency)) {\n throw new ConstructaError({\n kind: \"system\",\n code: \"DEPENDENCY_ANALYSIS_FAILED\",\n path,\n message:\n \"Generator dependency analysis returned an invalid dependency.\",\n });\n }\n registry.lookup(dependency.typeId, [...path, ...dependency.path]);\n }\n}\n\nfunction analyzeValueDependencies(\n implementation: GeneratorImplementation<GeneratorDefinition, unknown>,\n definition: GeneratorDefinition,\n path: ValidationPath,\n): readonly ValueDependency[] {\n if (implementation.analyzeValueDependencies === undefined) return [];\n let dependencies: readonly ValueDependency[];\n try {\n dependencies = implementation.analyzeValueDependencies(definition);\n } catch (cause) {\n throw normalizeConstructaError(cause, {\n kind: \"dependency\",\n code: \"DEPENDENCY_ANALYSIS_FAILED\",\n path,\n message: \"Value dependency analysis failed.\",\n });\n }\n if (!Array.isArray(dependencies) || !dependencies.every(isValueDependency)) {\n throw new ConstructaError({\n kind: \"system\",\n code: \"DEPENDENCY_ANALYSIS_FAILED\",\n path,\n message: \"Value dependency analysis returned an invalid result.\",\n });\n }\n return Object.freeze(\n dependencies.map((dependency) =>\n Object.freeze({ path: Object.freeze([...dependency.path]) }),\n ),\n );\n}\n\nfunction isGeneratorDependency(value: unknown): value is GeneratorDependency {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as GeneratorDependency).typeId === \"string\" &&\n Array.isArray((value as GeneratorDependency).path) &&\n (value as GeneratorDependency).path.every(\n (segment) => typeof segment === \"string\" || Number.isSafeInteger(segment),\n )\n );\n}\n\nfunction isValueDependency(value: unknown): value is ValueDependency {\n return (\n typeof value === \"object\" &&\n value !== null &&\n Array.isArray((value as ValueDependency).path) &&\n (value as ValueDependency).path.length > 0 &&\n (value as ValueDependency).path.every(\n (segment) => typeof segment === \"string\" && segment.length > 0,\n )\n );\n}\n\nfunction isCompositeDependencyNode(\n value: unknown,\n): value is CompositeDependencyNode {\n return (\n typeof value === \"object\" &&\n value !== null &&\n Array.isArray((value as CompositeDependencyNode).fieldPath) &&\n (value as CompositeDependencyNode).fieldPath.length === 1 &&\n typeof (value as CompositeDependencyNode).fieldPath[0] === \"string\" &&\n Array.isArray((value as CompositeDependencyNode).dependencies) &&\n (value as CompositeDependencyNode).dependencies.every(isValueDependency)\n );\n}\n\nfunction invokeValidatedGeneratorImplementation(\n implementation: GeneratorImplementation<GeneratorDefinition, unknown>,\n definition: GeneratorDefinition,\n context: GenerationContext,\n path: ValidationPath,\n): unknown {\n try {\n return implementation.generate({ definition, context });\n } catch (cause) {\n if (cause instanceof ConstructaError) {\n return throwWithExecutionPath(cause, path);\n }\n throw normalizeConstructaError(cause, {\n kind: \"execution\",\n code: \"EXECUTION_FAILED\",\n path,\n message: \"Generator execution failed.\",\n });\n }\n}\n\nfunction throwWithExecutionPath(\n error: ConstructaError,\n path: ValidationPath,\n): never {\n if (path.length === 0 || startsWithPath(error.path, path)) throw error;\n throw new ConstructaError({\n kind: error.kind,\n code: error.code,\n path: [...path, ...error.path],\n message: error.message,\n details: error.details,\n });\n}\n\nfunction startsWithPath(path: ValidationPath, prefix: ValidationPath): boolean {\n return prefix.every((segment, index) => path[index] === segment);\n}\n\n/**\n * Defines a trusted, developer-authored generator implementation. This API has\n * no dependency on a particular validation library.\n */\nexport function defineGenerator<\n const Definition extends GeneratorDefinition<Output>,\n Output,\n>(\n implementation: GeneratorImplementation<Definition, Output>,\n): GeneratorImplementation<Definition, Output> {\n assertGeneratorImplementation(implementation);\n return implementation;\n}\n\n/** Builds a portable definition while preserving literal fields and output inference. */\nexport function createGeneratorDefinition<\n Output,\n const Definition extends GeneratorDefinition<Output>,\n>(definition: Definition): Definition {\n assertGeneratorDefinition(definition);\n return definition;\n}\n\n/**\n * Invokes one validated implementation. Registry lookup and dispatch are added\n * later; this function keeps validation and execution failure normalization in\n * the same shared contract today.\n */\nexport function invokeGeneratorImplementation<\n Definition extends GeneratorDefinition<Output>,\n Output,\n>(\n implementation: GeneratorImplementation<Definition, Output>,\n input: {\n readonly definition: Definition;\n readonly context: GenerationContext;\n readonly path?: ValidationPath;\n },\n): Output {\n const path = input.path ?? [];\n let issues: readonly ValidationIssue[];\n\n try {\n issues = implementation.validateDefinition(input.definition);\n } catch (cause) {\n throw normalizeConstructaError(cause, {\n kind: \"configuration\",\n code: \"INVALID_CONFIGURATION\",\n path,\n message: \"Generator definition validation failed.\",\n });\n }\n\n if (issues.length > 0) {\n const [issue] = issues;\n if (issue !== undefined) {\n throw new ConstructaError({\n kind: \"configuration\",\n code: errorCodeForValidationIssue(issue.code),\n path: [...path, ...issue.path],\n message: issue.message,\n details: { issueCode: issue.code },\n });\n }\n\n throw new ConstructaError({\n kind: \"system\",\n code: \"EXECUTION_FAILED\",\n path,\n message: \"Generator validation returned an invalid result.\",\n });\n }\n\n try {\n return implementation.generate({\n definition: input.definition,\n context: input.context,\n });\n } catch (cause) {\n throw normalizeConstructaError(cause, {\n kind: \"execution\",\n code: \"EXECUTION_FAILED\",\n path,\n message: \"Generator execution failed.\",\n });\n }\n}\n\nconst DEFAULT_PARSE_LIMITS = Object.freeze({\n maxDepth: 64,\n maxIssues: 100,\n maxNodes: 10_000,\n maxBytes: 1_000_000,\n maxObjectFields: 10_000,\n maxArrayLength: 10_000,\n maxTemplateLength: 100_000,\n maxTemplateTokens: 10_000,\n});\n\ntype ResolvedParseLimits = {\n readonly maxDepth: number;\n readonly maxIssues: number;\n readonly maxNodes: number;\n readonly maxBytes: number;\n readonly maxObjectFields: number;\n readonly maxArrayLength: number;\n readonly maxTemplateLength: number;\n readonly maxTemplateTokens: number;\n};\n\nfunction parseRuntimeDefinition(\n value: unknown,\n path: ValidationPath,\n options: ParseDefinitionOptions,\n): DefinitionParseResult {\n const limits = resolveParseLimits(options);\n const schemaIssues = validationIssuesToErrors(\n validateDefinitionSafely(value, path),\n path,\n limits.maxIssues,\n );\n if (schemaIssues.length > 0) return { success: false, issues: schemaIssues };\n const limitIssue = findInputLimitIssue(value, path, limits);\n if (limitIssue !== undefined) return { success: false, issues: [limitIssue] };\n\n const issues: ConstructaError[] = [];\n const visited = new Set<object>();\n visitRuntimeDefinition(\n value as GeneratorDefinition,\n path,\n 0,\n options.registry,\n limits,\n visited,\n issues,\n );\n return issues.length === 0\n ? {\n success: true,\n value: markParsedDefinitions(visited, value as GeneratorDefinition),\n }\n : { success: false, issues: Object.freeze(issues) };\n}\n\nfunction markParsedDefinitions(\n definitions: ReadonlySet<object>,\n definition: GeneratorDefinition,\n): ParsedGeneratorDefinition {\n for (const parsed of definitions) parsedDefinitions.add(parsed);\n return definition as ParsedGeneratorDefinition;\n}\n\nfunction visitRuntimeDefinition(\n definition: GeneratorDefinition,\n path: ValidationPath,\n depth: number,\n registry: ParseDefinitionOptions[\"registry\"],\n limits: ResolvedParseLimits,\n visited: Set<object>,\n issues: ConstructaError[],\n): void {\n if (issues.length >= limits.maxIssues) return;\n if (depth > limits.maxDepth) {\n addParseIssue(\n issues,\n limits,\n \"PARSE_DEPTH_LIMIT\",\n path,\n \"Generator definition exceeds the maximum nesting depth.\",\n );\n return;\n }\n if (visited.size >= limits.maxNodes) {\n addParseIssue(\n issues,\n limits,\n \"PARSE_NODE_LIMIT\",\n path,\n \"Generator definition exceeds the maximum node count.\",\n );\n return;\n }\n visited.add(definition);\n\n let implementation: GeneratorImplementation<GeneratorDefinition, unknown>;\n try {\n implementation = registry.lookup(definition.type, path);\n } catch (cause) {\n const error = normalizeConstructaError(cause, {\n kind: \"dependency\",\n code: \"UNKNOWN_GENERATOR\",\n path: [...path, \"type\"],\n message: \"Generator type could not be resolved.\",\n });\n addExistingParseIssue(issues, limits, error);\n return;\n }\n\n let validationIssues: readonly ValidationIssue[];\n try {\n validationIssues = implementation.validateDefinition(definition);\n } catch (cause) {\n addExistingParseIssue(\n issues,\n limits,\n normalizeConstructaError(cause, {\n kind: \"configuration\",\n code: \"INVALID_CONFIGURATION\",\n path,\n message: \"Generator definition validation failed.\",\n }),\n );\n return;\n }\n if (!Array.isArray(validationIssues)) {\n addParseIssue(\n issues,\n limits,\n \"INVALID_CONFIGURATION\",\n path,\n \"Generator definition validation returned an invalid result.\",\n \"system\",\n );\n return;\n }\n for (const issue of validationIssues) {\n if (!isValidationIssue(issue)) {\n addParseIssue(\n issues,\n limits,\n \"INVALID_CONFIGURATION\",\n path,\n \"Generator definition validation returned an invalid issue.\",\n \"system\",\n );\n return;\n }\n addParseIssue(\n issues,\n limits,\n errorCodeForValidationIssue(issue.code),\n [...path, ...issue.path],\n issue.message,\n );\n }\n\n // Configurations are portable JSON. Every embedded object with a generator\n // discriminator is another definition and must pass the same pipeline.\n for (const [key, child] of Object.entries(definition)) {\n if (key !== \"type\")\n visitEmbeddedDefinitions(\n child,\n [...path, key],\n depth + 1,\n registry,\n limits,\n visited,\n issues,\n );\n if (issues.length >= limits.maxIssues) return;\n }\n}\n\nfunction visitEmbeddedDefinitions(\n value: unknown,\n path: ValidationPath,\n depth: number,\n registry: ParseDefinitionOptions[\"registry\"],\n limits: ResolvedParseLimits,\n visited: Set<object>,\n issues: ConstructaError[],\n): void {\n if (\n issues.length >= limits.maxIssues ||\n value === null ||\n typeof value !== \"object\"\n )\n return;\n if (Array.isArray(value)) {\n for (let index = 0; index < value.length; index += 1) {\n visitEmbeddedDefinitions(\n value[index],\n [...path, index],\n depth,\n registry,\n limits,\n visited,\n issues,\n );\n if (issues.length >= limits.maxIssues) return;\n }\n return;\n }\n if (Object.hasOwn(value, \"type\")) {\n visitRuntimeDefinition(\n value as GeneratorDefinition,\n path,\n depth,\n registry,\n limits,\n visited,\n issues,\n );\n return;\n }\n for (const [key, child] of Object.entries(value)) {\n visitEmbeddedDefinitions(\n child,\n [...path, key],\n depth,\n registry,\n limits,\n visited,\n issues,\n );\n if (issues.length >= limits.maxIssues) return;\n }\n}\n\nfunction resolveParseLimits(\n options: ParseDefinitionOptions,\n): ResolvedParseLimits {\n if (\n typeof options !== \"object\" ||\n options === null ||\n typeof options.registry !== \"object\" ||\n options.registry === null ||\n typeof options.registry.lookup !== \"function\"\n ) {\n throw contextError(\n \"INVALID_PARSE_OPTIONS\",\n [],\n \"Parsing requires a registry with a lookup function.\",\n );\n }\n const supplied = options.limits ?? {};\n const resolved = {\n maxDepth: supplied.maxDepth ?? DEFAULT_PARSE_LIMITS.maxDepth,\n maxIssues: supplied.maxIssues ?? DEFAULT_PARSE_LIMITS.maxIssues,\n maxNodes: supplied.maxNodes ?? DEFAULT_PARSE_LIMITS.maxNodes,\n maxBytes: supplied.maxBytes ?? DEFAULT_PARSE_LIMITS.maxBytes,\n maxObjectFields:\n supplied.maxObjectFields ?? DEFAULT_PARSE_LIMITS.maxObjectFields,\n maxArrayLength:\n supplied.maxArrayLength ?? DEFAULT_PARSE_LIMITS.maxArrayLength,\n maxTemplateLength:\n supplied.maxTemplateLength ?? DEFAULT_PARSE_LIMITS.maxTemplateLength,\n maxTemplateTokens:\n supplied.maxTemplateTokens ?? DEFAULT_PARSE_LIMITS.maxTemplateTokens,\n };\n for (const [name, value] of Object.entries(resolved)) {\n if (!Number.isSafeInteger(value) || value < 1) {\n throw contextError(\n \"INVALID_PARSE_LIMITS\",\n [\"limits\", name],\n `${name} must be a positive safe integer.`,\n );\n }\n }\n return resolved;\n}\n\nfunction findInputLimitIssue(\n value: unknown,\n path: ValidationPath,\n limits: ResolvedParseLimits,\n): ConstructaError | undefined {\n const bytes = new TextEncoder().encode(JSON.stringify(value)).length;\n if (bytes > limits.maxBytes) {\n return inputLimitError(\n \"PARSE_BYTE_LIMIT\",\n path,\n \"Definition exceeds the maximum serialized byte size.\",\n );\n }\n const visit = (\n candidate: unknown,\n candidatePath: ValidationPath,\n ): ConstructaError | undefined => {\n if (Array.isArray(candidate)) {\n if (candidate.length > limits.maxArrayLength) {\n return inputLimitError(\n \"PARSE_ARRAY_LIMIT\",\n candidatePath,\n \"Definition contains an array exceeding the configured maximum length.\",\n );\n }\n for (let index = 0; index < candidate.length; index += 1) {\n const issue = visit(candidate[index], [...candidatePath, index]);\n if (issue !== undefined) return issue;\n }\n return undefined;\n }\n if (typeof candidate !== \"object\" || candidate === null) return undefined;\n const record = candidate as Record<string, unknown>;\n const keys = Object.keys(record);\n if (keys.length > limits.maxObjectFields) {\n return inputLimitError(\n \"PARSE_OBJECT_FIELD_LIMIT\",\n candidatePath,\n \"Definition contains an object exceeding the configured maximum field count.\",\n );\n }\n if (record.type === \"template\" && typeof record.source === \"string\") {\n if (record.source.length > limits.maxTemplateLength) {\n return inputLimitError(\n \"PARSE_TEMPLATE_LENGTH_LIMIT\",\n [...candidatePath, \"source\"],\n \"Template source exceeds the configured maximum length.\",\n );\n }\n let tokenCount = 0;\n try {\n tokenCount = parseTemplateTokens(record.source).filter(\n (token) => token.type === \"reference\",\n ).length;\n } catch (_cause) {\n // The owning template implementation reports malformed syntax.\n }\n if (tokenCount > limits.maxTemplateTokens) {\n return inputLimitError(\n \"PARSE_TEMPLATE_TOKEN_LIMIT\",\n [...candidatePath, \"source\"],\n \"Template source exceeds the configured maximum reference count.\",\n );\n }\n }\n for (const key of keys) {\n const issue = visit(record[key], [...candidatePath, key]);\n if (issue !== undefined) return issue;\n }\n return undefined;\n };\n return visit(value, path);\n}\n\nfunction inputLimitError(\n code: string,\n path: ValidationPath,\n message: string,\n): ConstructaError {\n return new ConstructaError({\n kind: \"configuration\",\n code: code as Uppercase<string>,\n path,\n message,\n });\n}\n\nfunction validateDefinitionSafely(\n value: unknown,\n path: ValidationPath,\n): readonly ValidationIssue[] {\n try {\n return validateGeneratorDefinition(value, path);\n } catch (_cause) {\n return [\n {\n code: \"invalid_json_value\",\n path,\n message: \"Definition could not be safely inspected.\",\n },\n ];\n }\n}\n\nfunction validateDocumentSafely(value: unknown): readonly ValidationIssue[] {\n try {\n return validateDocument(value);\n } catch {\n return [\n {\n code: \"invalid_json_value\",\n path: [],\n message: \"Document could not be safely inspected.\",\n },\n ];\n }\n}\n\nfunction validationIssuesToErrors(\n issues: readonly ValidationIssue[],\n fallbackPath: ValidationPath,\n maxIssues = Number.POSITIVE_INFINITY,\n): ConstructaError[] {\n return issues.slice(0, maxIssues).map(\n (issue) =>\n new ConstructaError({\n kind: \"configuration\",\n code: isValidationIssue(issue)\n ? errorCodeForValidationIssue(issue.code)\n : \"INVALID_CONFIGURATION\",\n path: isValidationIssue(issue) ? issue.path : fallbackPath,\n message: isValidationIssue(issue)\n ? issue.message\n : \"Validation returned an invalid issue.\",\n details: isValidationIssue(issue)\n ? { issueCode: issue.code }\n : undefined,\n }),\n );\n}\n\nfunction errorCodeForValidationIssue(code: string): Uppercase<string> {\n const reservedCodes: Record<string, Uppercase<string>> = {\n empty_choice: \"EMPTY_CHOICE\",\n invalid_length: \"INVALID_LENGTH\",\n invalid_range: \"INVALID_RANGE\",\n invalid_template_token: \"INVALID_TEMPLATE_TOKEN\",\n };\n return reservedCodes[code] ?? \"INVALID_CONFIGURATION\";\n}\n\nfunction isValidationIssue(value: unknown): value is ValidationIssue {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as ValidationIssue).code === \"string\" &&\n typeof (value as ValidationIssue).message === \"string\" &&\n Array.isArray((value as ValidationIssue).path)\n );\n}\n\nfunction addParseIssue(\n issues: ConstructaError[],\n limits: ResolvedParseLimits,\n code: string,\n path: ValidationPath,\n message: string,\n kind: \"configuration\" | \"system\" = \"configuration\",\n): void {\n if (issues.length < limits.maxIssues)\n issues.push(\n new ConstructaError({\n kind,\n code: code as Uppercase<string>,\n path,\n message,\n }),\n );\n}\n\nfunction addExistingParseIssue(\n issues: ConstructaError[],\n limits: ResolvedParseLimits,\n error: ConstructaError,\n): void {\n if (issues.length < limits.maxIssues) issues.push(error);\n}\n\nfunction assertGeneratorImplementation(implementation: {\n readonly type: string;\n readonly version: number;\n readonly validateDefinition: unknown;\n readonly analyzeDependencies?: unknown;\n readonly generate: unknown;\n}): void {\n if (!isStableTypeId(implementation.type)) {\n throw new TypeError(\"generator type must be a stable lowercase identifier\");\n }\n if (\n !Number.isSafeInteger(implementation.version) ||\n implementation.version < 1\n ) {\n throw new TypeError(\"generator version must be a positive safe integer\");\n }\n if (typeof implementation.validateDefinition !== \"function\") {\n throw new TypeError(\"validateDefinition must be a function\");\n }\n if (typeof implementation.generate !== \"function\") {\n throw new TypeError(\"generate must be a function\");\n }\n if (\n implementation.analyzeDependencies !== undefined &&\n typeof implementation.analyzeDependencies !== \"function\"\n ) {\n throw new TypeError(\"analyzeDependencies must be a function when present\");\n }\n}\n\nfunction assertRegistryImplementation(implementation: {\n readonly type: string;\n readonly version: number;\n readonly validateDefinition: unknown;\n readonly analyzeDependencies?: unknown;\n readonly generate: unknown;\n}): void {\n try {\n assertGeneratorImplementation(implementation);\n } catch {\n throw registryError(\n \"INVALID_CONFIGURATION\",\n [\"implementation\"],\n \"Generator implementation is invalid.\",\n );\n }\n if (RESERVED_GENERATOR_TYPE_IDS.has(implementation.type)) {\n throw registryError(\n \"INVALID_CONFIGURATION\",\n [\"type\"],\n `Generator type \"${implementation.type}\" is reserved.`,\n );\n }\n}\n\nfunction freezeImplementation<\n Definition extends GeneratorDefinition<Output>,\n Output,\n>(\n implementation: GeneratorImplementation<Definition, Output>,\n): GeneratorImplementation<Definition, Output> {\n return Object.freeze({ ...implementation });\n}\n\nfunction createRegistrySnapshot(\n implementations: ReadonlyMap<\n string,\n GeneratorImplementation<GeneratorDefinition, unknown>\n >,\n): GeneratorRegistrySnapshot {\n const snapshotImplementations = new Map(implementations);\n const generators = [...snapshotImplementations.values()]\n .map(({ type, version }) => Object.freeze({ type, version }))\n .sort((left, right) => left.type.localeCompare(right.type));\n\n return Object.freeze({\n generators: Object.freeze(generators),\n lookup(type: string, path: ValidationPath = []) {\n return lookupImplementation(snapshotImplementations, type, path);\n },\n });\n}\n\nfunction lookupImplementation(\n implementations: ReadonlyMap<\n string,\n GeneratorImplementation<GeneratorDefinition, unknown>\n >,\n type: string,\n path: ValidationPath,\n): GeneratorImplementation<GeneratorDefinition, unknown> {\n const implementation = implementations.get(type);\n if (implementation !== undefined) return implementation;\n\n const registeredTypes = [...implementations.keys()].sort((left, right) =>\n left.localeCompare(right),\n );\n throw new ConstructaError({\n kind: \"dependency\",\n code: \"UNKNOWN_GENERATOR\",\n path: [...path, \"type\"],\n message: `No generator with type \"${type}\" is registered.`,\n details: { registeredTypes },\n });\n}\n\nfunction registryError(\n code: \"DUPLICATE_GENERATOR\" | \"INVALID_CONFIGURATION\" | \"UNKNOWN_GENERATOR\",\n path: ValidationPath,\n message: string,\n): ConstructaError {\n return new ConstructaError({ kind: \"configuration\", code, path, message });\n}\n\nfunction assertRandomSourceAdapter(adapter: RandomSourceAdapter): void {\n if (\n typeof adapter !== \"object\" ||\n adapter === null ||\n typeof adapter.float !== \"function\" ||\n typeof adapter.integer !== \"function\" ||\n typeof adapter.bytes !== \"function\"\n ) {\n throw invalidRandomSource(\n \"A random source must provide float(), integer(), and bytes() methods.\",\n );\n }\n}\n\nfunction assertRandomLength(value: number, name: string): void {\n if (!Number.isSafeInteger(value) || value < 1) {\n throw invalidRandomSource(`${name} must be a positive safe integer.`);\n }\n}\n\nfunction assertByteLength(length: number): void {\n if (!Number.isSafeInteger(length) || length < 0) {\n throw invalidRandomSource(\"length must be a non-negative safe integer.\");\n }\n}\n\nfunction invalidRandomSource(message: string): ConstructaError {\n return new ConstructaError({\n kind: \"system\",\n code: \"INVALID_RANDOM_SOURCE\",\n path: [\"random\"],\n message,\n });\n}\n\nfunction assertContextPath(path: ValidationPath): void {\n for (const segment of path) assertContextPathSegment(segment);\n}\n\nfunction assertContextPathSegment(\n segment: unknown,\n): asserts segment is ValidationPathSegment {\n if (\n typeof segment !== \"string\" &&\n (!Number.isSafeInteger(segment) || typeof segment !== \"number\")\n ) {\n throw contextError(\n \"INVALID_GENERATION_CONTEXT\",\n [\"path\"],\n \"Context path segments must be strings or safe integers.\",\n );\n }\n}\n\nfunction assertChildPathSegment(\n segment: unknown,\n path: ValidationPath,\n): asserts segment is ValidationPathSegment {\n if (\n typeof segment !== \"string\" &&\n (typeof segment !== \"number\" || !Number.isSafeInteger(segment))\n ) {\n throw contextError(\n \"INVALID_CHILD_PATH\",\n path,\n \"Child path segments must be strings or safe integers.\",\n );\n }\n}\n\nfunction contextError(\n code: string,\n path: ValidationPath,\n message: string,\n): ConstructaError {\n return new ConstructaError({\n kind: \"configuration\",\n code: code as Uppercase<string>,\n path,\n message,\n });\n}\n\nfunction hashSeed(seed: string): number {\n let hash = 0x811c_9dc5;\n for (const byte of new TextEncoder().encode(seed)) {\n hash = Math.imul(hash ^ byte, 0x0100_0193) >>> 0;\n }\n return hash;\n}\n\nfunction isStableTypeId(value: string): boolean {\n return /^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/u.test(value);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["parseSchemaDocument"],"sources":["../src/index.ts"],"sourcesContent":["import {\n assertGeneratorDefinition,\n ConstructaError,\n type GeneratorDefinition,\n normalizeConstructaError,\n parseDocument as parseSchemaDocument,\n type ValidationIssue,\n type ValidationPath,\n type ValidationPathSegment,\n validateDocument,\n validateGeneratorDefinition,\n} from \"constructa-schema\";\n\nexport type {\n GeneratorDefinition,\n Infer,\n ValidationIssue,\n ValidationPath,\n ValidationPathSegment,\n} from \"constructa-schema\";\n\n/**\n * Random values are always half-open: `float()` returns [0, 1), while\n * `integer(maxExclusive)` returns an integer in [0, maxExclusive).\n */\nexport type RandomSource = {\n float(): number;\n integer(maxExclusive: number): number;\n bytes(length: number): Uint8Array;\n};\n\n/** An application-provided random source validated by `createRandomSource`. */\nexport type RandomSourceAdapter = RandomSource;\n\nconst validatedRandomSources = new WeakSet<object>();\n\n/** A deterministic random-source seed. */\nexport type Seed = number | string;\n\n/** Per-root-execution limits and random-source options. */\nexport type ExecutionOptions = {\n /** Uses a fresh deterministic source for this root execution. */\n readonly seed?: Seed;\n /**\n * A caller-owned source consumed by this execution. The executor does not\n * reset, clone, or otherwise retain it after the call returns.\n */\n readonly random?: RandomSource;\n /** Maximum child-definition nesting below the root. Defaults to 64. */\n readonly maxDepth?: number;\n /** Stops execution before the next generator dispatch when aborted. */\n readonly signal?: AbortSignal;\n /** Stops execution before the next generator dispatch after this UTC epoch time. */\n readonly deadline?: number;\n};\n\n/** Executes validated generator definitions through a registry snapshot. */\nexport type Executor = {\n generate: <Definition extends GeneratorDefinition>(\n definition: Definition,\n options?: ExecutionOptions,\n ) => import(\"constructa-schema\").Infer<Definition>;\n};\n\n/** The deterministic random algorithm used by `createSeededRandom`. */\nexport const SEEDED_RANDOM_ALGORITHM = \"mulberry32\";\n/** The compatibility version of the seeded random algorithm. */\nexport const SEEDED_RANDOM_ALGORITHM_VERSION = 1;\n\n/** Public metadata identifying the seeded random algorithm. */\nexport type SeededRandomMetadata = {\n readonly algorithm: typeof SEEDED_RANDOM_ALGORITHM;\n readonly version: typeof SEEDED_RANDOM_ALGORITHM_VERSION;\n};\n\n/** Values that must remain compatible to reproduce an execution. */\nexport type DeterminismCompatibility = {\n readonly engineVersion: string;\n readonly generatorImplementationVersion: number;\n readonly random: SeededRandomMetadata;\n readonly definition: GeneratorDefinition;\n readonly seed: Seed;\n readonly executionMode: string;\n};\n\nconst SEEDED_RANDOM_METADATA: SeededRandomMetadata = Object.freeze({\n algorithm: SEEDED_RANDOM_ALGORITHM,\n version: SEEDED_RANDOM_ALGORITHM_VERSION,\n});\n\n/**\n * Validates an injected source and guards every produced value. No fallback\n * randomness is used when an adapter violates its contract.\n */\nexport function createRandomSource(adapter: RandomSourceAdapter): RandomSource {\n assertRandomSourceAdapter(adapter);\n\n const source = Object.freeze({\n float() {\n const value = adapter.float();\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n value < 0 ||\n value >= 1\n ) {\n throw invalidRandomSource(\n \"float() must return a finite number in [0, 1).\",\n );\n }\n return value;\n },\n integer(maxExclusive: number) {\n assertRandomLength(maxExclusive, \"maxExclusive\");\n const value = adapter.integer(maxExclusive);\n if (!Number.isSafeInteger(value) || value < 0 || value >= maxExclusive) {\n throw invalidRandomSource(\n \"integer(maxExclusive) must return a safe integer in [0, maxExclusive).\",\n );\n }\n return value;\n },\n bytes(length: number) {\n assertByteLength(length);\n const value = adapter.bytes(length);\n if (!(value instanceof Uint8Array) || value.length !== length) {\n throw invalidRandomSource(\n \"bytes(length) must return a Uint8Array with exactly length bytes.\",\n );\n }\n return value;\n },\n });\n validatedRandomSources.add(source);\n return source;\n}\n\n/** Creates the default platform-backed random source. It makes no security claim. */\nexport function createDefaultRandomSource(): RandomSource {\n const crypto = globalThis.crypto;\n if (crypto?.getRandomValues === undefined) {\n throw new ConstructaError({\n kind: \"system\",\n code: \"SYSTEM_RANDOM_UNAVAILABLE\",\n path: [],\n message: \"Platform cryptographic random values are unavailable.\",\n });\n }\n\n const randomBytes = (length: number) => {\n const bytes = new Uint8Array(length);\n for (let offset = 0; offset < length; offset += 65_536) {\n crypto.getRandomValues(bytes.subarray(offset, offset + 65_536));\n }\n return bytes;\n };\n const uint32 = () => new DataView(randomBytes(4).buffer).getUint32(0);\n const uint53 = () => (uint32() & 0x1f_ffff) * 2 ** 32 + uint32();\n\n return createRandomSource({\n float() {\n return uint53() / 2 ** 53;\n },\n integer(maxExclusive: number) {\n const range = 2 ** 53;\n const upperLimit = range - (range % maxExclusive);\n let value = uint53();\n while (value >= upperLimit) value = uint53();\n return value % maxExclusive;\n },\n bytes: randomBytes,\n });\n}\n\n/**\n * Returns a canonical seed representation. Strings use UTF-8 exactly; finite\n * numbers use their JavaScript numeric representation, with -0 normalized to 0.\n */\nexport function normalizeSeed(seed: Seed): string {\n if (typeof seed === \"string\") return `string:${seed}`;\n if (typeof seed === \"number\" && Number.isFinite(seed)) {\n return `number:${Object.is(seed, -0) ? \"0\" : String(seed)}`;\n }\n throw new ConstructaError({\n kind: \"configuration\",\n code: \"INVALID_SEED\",\n path: [\"seed\"],\n message: \"seed must be a string or finite number.\",\n });\n}\n\n/** Creates an isolated deterministic random source for the current algorithm version. */\nexport function createSeededRandom(seed: Seed): RandomSource {\n let state = hashSeed(normalizeSeed(seed));\n const uint32 = () => {\n state = (state + 0x6d2b_79f5) >>> 0;\n let value = state;\n value = Math.imul(value ^ (value >>> 15), value | 1);\n value ^= value + Math.imul(value ^ (value >>> 7), value | 61);\n return (value ^ (value >>> 14)) >>> 0;\n };\n const uint53 = () => (uint32() & 0x1f_ffff) * 2 ** 32 + uint32();\n\n return createRandomSource({\n float() {\n return uint53() / 2 ** 53;\n },\n integer(maxExclusive: number) {\n const range = 2 ** 53;\n const upperLimit = range - (range % maxExclusive);\n let value = uint53();\n while (value >= upperLimit) value = uint53();\n return value % maxExclusive;\n },\n bytes(length: number) {\n const bytes = new Uint8Array(length);\n for (let index = 0; index < length; index += 1) {\n if (index % 4 === 0) {\n const value = uint32();\n bytes[index] = value & 0xff;\n if (index + 1 < length) bytes[index + 1] = (value >>> 8) & 0xff;\n if (index + 2 < length) bytes[index + 2] = (value >>> 16) & 0xff;\n if (index + 3 < length) bytes[index + 3] = value >>> 24;\n }\n }\n return bytes;\n },\n });\n}\n\n/** Metadata for reproducibility diagnostics. It intentionally contains no seed. */\nexport function getSeededRandomMetadata(): SeededRandomMetadata {\n return SEEDED_RANDOM_METADATA;\n}\n\n/** Services supplied by the engine. Implementations must not use global randomness. */\n/** Capabilities supplied to a trusted generator implementation. */\nexport type GenerationContext = {\n readonly random: RandomSource;\n /** The definition path currently being generated. */\n readonly path: ValidationPath;\n /** Delegates a typed child definition to the engine. */\n readonly executeChild: <Output>(\n definition: GeneratorDefinition<Output>,\n pathSegment: ValidationPathSegment,\n ) => Output;\n /**\n * Read-only values from the object currently being generated. Values are\n * available only after their field has completed.\n */\n readonly references: ReferenceResolver;\n /** Creates an isolated scope for the fields of one composite object. */\n readonly createObjectScope: () => ObjectGenerationScope;\n /** Returns value dependencies declared by one direct child definition. */\n readonly analyzeChildValueDependencies: (\n definition: GeneratorDefinition,\n pathSegment: ValidationPathSegment,\n ) => readonly ValueDependency[];\n};\n\n/** A property path relative to the object containing a reference. */\n/** A property path used by an object-local template reference. */\nexport type ReferencePath = readonly string[];\n\n/** A parsed template fragment. Braces are escaped with `{{` and `}}`. */\n/** One literal or reference segment of parsed template source. */\nexport type TemplateToken =\n | { readonly type: \"literal\"; readonly value: string }\n | { readonly type: \"reference\"; readonly path: ReferencePath };\n\n/** Options controlling template-token parse diagnostics. */\nexport type ParseTemplateTokensOptions = {\n /** Definition-relative path reported for malformed template syntax. */\n readonly path?: ValidationPath;\n};\n\n/**\n * Parses MVP template syntax without executing or resolving references.\n *\n * `{field}` addresses a sibling and `{field.nested}` addresses a value below\n * that sibling. `{{` and `}}` emit literal braces. Whitespace, empty path\n * segments, and expression characters inside a reference are unsupported.\n */\nexport function parseTemplateTokens(\n source: string,\n options: ParseTemplateTokensOptions = {},\n): readonly TemplateToken[] {\n const path = options.path ?? [];\n if (typeof source !== \"string\") {\n throw templateTokenError(path, \"Template source must be a string.\");\n }\n assertContextPath(path);\n\n const tokens: TemplateToken[] = [];\n let literal = \"\";\n const appendLiteral = (value: string) => {\n literal += value;\n };\n const flushLiteral = () => {\n if (literal.length === 0) return;\n tokens.push(Object.freeze({ type: \"literal\", value: literal }));\n literal = \"\";\n };\n\n for (let index = 0; index < source.length; index += 1) {\n const character = source[index];\n if (character === \"{\") {\n if (source[index + 1] === \"{\") {\n appendLiteral(\"{\");\n index += 1;\n continue;\n }\n const closingIndex = source.indexOf(\"}\", index + 1);\n if (closingIndex === -1) {\n throw templateTokenError(\n path,\n \"Template reference is missing a closing brace.\",\n );\n }\n const reference = source.slice(index + 1, closingIndex);\n const referencePath = parseReferencePath(reference, path);\n flushLiteral();\n tokens.push(Object.freeze({ type: \"reference\", path: referencePath }));\n index = closingIndex;\n continue;\n }\n if (character === \"}\") {\n if (source[index + 1] === \"}\") {\n appendLiteral(\"}\");\n index += 1;\n continue;\n }\n throw templateTokenError(\n path,\n \"Template contains an unmatched closing brace.\",\n );\n }\n appendLiteral(character ?? \"\");\n }\n flushLiteral();\n return Object.freeze(tokens);\n}\n\n/** Parses one dot-separated object-local reference path. */\nexport function parseReferencePath(\n source: string,\n path: ValidationPath = [],\n): ReferencePath {\n if (typeof source !== \"string\" || source.length === 0) {\n throw templateTokenError(path, \"Template reference must not be empty.\");\n }\n assertContextPath(path);\n const segments = source.split(\".\");\n if (\n segments.some(\n (segment) => segment.length === 0 || !/^[\\p{L}\\p{N}_$-]+$/u.test(segment),\n )\n ) {\n throw templateTokenError(\n path,\n \"Template reference segments must use letters, numbers, underscores, dollar signs, or hyphens.\",\n );\n }\n return Object.freeze(segments);\n}\n\nfunction templateTokenError(\n path: ValidationPath,\n message: string,\n): ConstructaError {\n return new ConstructaError({\n kind: \"configuration\",\n code: \"INVALID_TEMPLATE_TOKEN\",\n path,\n message,\n });\n}\n\n/** A portable value dependency declared by a generator definition. */\n/** One value dependency declared by a child generator. */\nexport type ValueDependency = {\n readonly path: ReferencePath;\n};\n\n/** Dependencies for a direct field in a composite definition. */\n/** A composite child and the values it depends on. */\nexport type CompositeDependencyNode = {\n readonly fieldPath: readonly [string];\n readonly dependencies: readonly ValueDependency[];\n};\n\n/** Portable dependency data used to schedule one composite object. */\n/** An immutable analysis of composite-child dependencies. */\nexport type CompositeDependencyAnalysis = {\n readonly nodes: readonly CompositeDependencyNode[];\n};\n\n/** Options used to order dependent composite children. */\nexport type CompositeDependencySchedulingOptions = {\n /** Every reference path that exists in the containing object definition. */\n readonly referencePaths?: readonly ReferencePath[];\n /** Maximum fields participating in one object-local reference graph. */\n readonly maxNodes?: number;\n /** Maximum unique field dependencies in one object-local reference graph. */\n readonly maxEdges?: number;\n};\n\n/** The read-only capability supplied to generators that resolve references. */\n/** Resolves values visible to an executing generator. */\nexport type ReferenceResolver = {\n resolve: (path: ReferencePath) => unknown;\n};\n\n/** Executes and records completed fields within one isolated object scope. */\n/** An isolated object-field execution scope. */\nexport type ObjectGenerationScope = {\n executeChild: <Output>(\n definition: GeneratorDefinition<Output>,\n pathSegment: string,\n ) => Output;\n};\n\n/** Inputs used to create a generator execution context. */\nexport type GenerationContextOptions = {\n readonly random: RandomSource;\n readonly path?: ValidationPath;\n readonly executeChild?: GenerationContext[\"executeChild\"];\n readonly references?: ReferenceResolver;\n readonly createObjectScope?: GenerationContext[\"createObjectScope\"];\n readonly analyzeChildValueDependencies?: GenerationContext[\"analyzeChildValueDependencies\"];\n};\n\n/**\n * Creates the engine-owned capability view supplied to implementations.\n * Application code normally receives this through `generate`, rather than\n * constructing one directly.\n */\nexport function createGenerationContext(\n options: GenerationContextOptions,\n): GenerationContext {\n if (typeof options !== \"object\" || options === null) {\n throw contextError(\n \"INVALID_GENERATION_CONTEXT\",\n [],\n \"Context options must be an object.\",\n );\n }\n assertContextPath(options.path ?? []);\n if (\n typeof options.executeChild !== \"undefined\" &&\n typeof options.executeChild !== \"function\"\n ) {\n throw contextError(\n \"INVALID_GENERATION_CONTEXT\",\n [],\n \"executeChild must be a function when present.\",\n );\n }\n\n // This validates the Phase 012 source contract without drawing from it.\n const random = validatedRandomSources.has(options.random)\n ? options.random\n : createRandomSource(options.random);\n const path = Object.freeze([...(options.path ?? [])]);\n const executeChild =\n options.executeChild ??\n ((definition, pathSegment) => {\n assertGeneratorDefinition(definition, [...path, pathSegment]);\n assertContextPathSegment(pathSegment);\n throw new ConstructaError({\n kind: \"execution\",\n code: \"CHILD_EXECUTION_UNAVAILABLE\",\n path: [...path, pathSegment],\n message: \"Child execution is not available in this generation context.\",\n });\n });\n\n const references = options.references ?? unavailableReferenceResolver(path);\n if (\n typeof references !== \"object\" ||\n references === null ||\n typeof references.resolve !== \"function\"\n ) {\n throw contextError(\n \"INVALID_GENERATION_CONTEXT\",\n [],\n \"references must provide a resolve function when present.\",\n );\n }\n const createObjectScope =\n options.createObjectScope ??\n (() =>\n Object.freeze({\n executeChild<Output>(\n definition: GeneratorDefinition<Output>,\n pathSegment: string,\n ): Output {\n return executeChild(definition, pathSegment);\n },\n }));\n if (typeof createObjectScope !== \"function\") {\n throw contextError(\n \"INVALID_GENERATION_CONTEXT\",\n [],\n \"createObjectScope must be a function when present.\",\n );\n }\n const analyzeChildValueDependencies =\n options.analyzeChildValueDependencies ?? (() => []);\n if (typeof analyzeChildValueDependencies !== \"function\") {\n throw contextError(\n \"INVALID_GENERATION_CONTEXT\",\n [],\n \"analyzeChildValueDependencies must be a function when present.\",\n );\n }\n\n return Object.freeze({\n random,\n path,\n executeChild,\n references: Object.freeze({ resolve: references.resolve }),\n createObjectScope,\n analyzeChildValueDependencies,\n });\n}\n\n/** Freezes direct-field dependency declarations into portable analysis data. */\nexport function createCompositeDependencyAnalysis(\n nodes: readonly CompositeDependencyNode[],\n): CompositeDependencyAnalysis {\n if (!Array.isArray(nodes)) {\n throw contextError(\n \"INVALID_COMPOSITE_DEPENDENCIES\",\n [],\n \"Composite dependency nodes must be an array.\",\n );\n }\n const names = new Set<string>();\n const normalized = nodes.map((node, index) => {\n if (!isCompositeDependencyNode(node) || names.has(node.fieldPath[0])) {\n throw contextError(\n \"INVALID_COMPOSITE_DEPENDENCIES\",\n [\"nodes\", index],\n \"Each composite dependency node must name one unique field.\",\n );\n }\n names.add(node.fieldPath[0]);\n return Object.freeze({\n fieldPath: Object.freeze([...node.fieldPath]) as readonly [string],\n dependencies: Object.freeze(\n node.dependencies.map((dependency) =>\n Object.freeze({ path: Object.freeze([...dependency.path]) }),\n ),\n ),\n });\n });\n return Object.freeze({ nodes: Object.freeze(normalized) });\n}\n\n/**\n * Returns a deterministic execution order for direct object fields. A\n * dependency path may target a nested value below another direct field.\n */\nexport function scheduleCompositeDependencies(\n analysis: CompositeDependencyAnalysis,\n options: CompositeDependencySchedulingOptions = {},\n): readonly string[] {\n const nodes = analysis.nodes;\n const maxNodes = options.maxNodes ?? 10_000;\n const maxEdges = options.maxEdges ?? 100_000;\n if (\n !Number.isSafeInteger(maxNodes) ||\n maxNodes < 1 ||\n !Number.isSafeInteger(maxEdges) ||\n maxEdges < 1\n ) {\n throw contextError(\n \"INVALID_COMPOSITE_DEPENDENCIES\",\n [],\n \"Composite graph limits must be positive safe integers.\",\n );\n }\n if (nodes.length > maxNodes) {\n throw new ConstructaError({\n kind: \"configuration\",\n code: \"REFERENCE_GRAPH_NODE_LIMIT\",\n path: [],\n message:\n \"Object reference graph exceeds the configured maximum field count.\",\n });\n }\n const byName = new Map(nodes.map((node) => [node.fieldPath[0], node]));\n const referencePaths = new Set(\n (options.referencePaths ?? nodes.map((node) => node.fieldPath)).map(\n referencePathKey,\n ),\n );\n const remaining = new Map<string, Set<string>>();\n const dependents = new Map<string, string[]>();\n let edgeCount = 0;\n\n for (const node of nodes) {\n const dependencies = new Set<string>();\n for (const dependency of node.dependencies) {\n const target = dependency.path[0];\n if (\n target === undefined ||\n !byName.has(target) ||\n !referencePaths.has(referencePathKey(dependency.path))\n ) {\n throw new ConstructaError({\n kind: \"dependency\",\n code: \"REFERENCE_NOT_FOUND\",\n path: [...node.fieldPath],\n message: \"The referenced object value could not be found.\",\n details: { referencePath: [...dependency.path] },\n });\n }\n if (!dependencies.has(target)) {\n dependencies.add(target);\n edgeCount += 1;\n }\n if (edgeCount > maxEdges) {\n throw new ConstructaError({\n kind: \"configuration\",\n code: \"REFERENCE_GRAPH_EDGE_LIMIT\",\n path: [...node.fieldPath],\n message:\n \"Object reference graph exceeds the configured maximum dependency count.\",\n });\n }\n const targets = dependents.get(target) ?? [];\n if (!targets.includes(node.fieldPath[0])) targets.push(node.fieldPath[0]);\n dependents.set(target, targets);\n }\n remaining.set(node.fieldPath[0], dependencies);\n }\n\n const ready = nodes\n .filter((node) => (remaining.get(node.fieldPath[0])?.size ?? 0) === 0)\n .map((node) => node.fieldPath[0])\n .sort();\n const ordered: string[] = [];\n while (ready.length > 0) {\n const field = ready.shift();\n if (field === undefined) continue;\n ordered.push(field);\n for (const dependent of (dependents.get(field) ?? []).sort()) {\n const dependencies = remaining.get(dependent);\n dependencies?.delete(field);\n if (dependencies?.size === 0) {\n ready.push(dependent);\n ready.sort();\n }\n }\n }\n if (ordered.length !== nodes.length) {\n const cycle = findCompositeDependencyCycle(remaining);\n throw new ConstructaError({\n kind: \"dependency\",\n code: \"CIRCULAR_REFERENCE\",\n path: cycle.slice(0, 1),\n message: `Circular object value reference detected: ${cycle.join(\" -> \")}.`,\n details: { fields: cycle },\n });\n }\n return Object.freeze(ordered);\n}\n\nfunction findCompositeDependencyCycle(\n remaining: ReadonlyMap<string, ReadonlySet<string>>,\n): string[] {\n const visited = new Set<string>();\n const active = new Set<string>();\n const stack: string[] = [];\n const visit = (field: string): string[] | undefined => {\n visited.add(field);\n active.add(field);\n stack.push(field);\n for (const dependency of [...(remaining.get(field) ?? [])].sort()) {\n if (!remaining.has(dependency)) continue;\n if (active.has(dependency)) {\n const start = stack.indexOf(dependency);\n return [...stack.slice(start), dependency];\n }\n if (!visited.has(dependency)) {\n const cycle = visit(dependency);\n if (cycle !== undefined) return cycle;\n }\n }\n active.delete(field);\n stack.pop();\n return undefined;\n };\n\n for (const field of [...remaining.keys()].sort()) {\n if (visited.has(field)) continue;\n const cycle = visit(field);\n if (cycle !== undefined) return cycle;\n }\n return [];\n}\n\n/** Bounds applied while parsing untrusted definitions or documents. */\nexport type ParseLimits = {\n readonly maxDepth?: number;\n readonly maxIssues?: number;\n readonly maxNodes?: number;\n /** Maximum UTF-8 encoded definition bytes. */\n readonly maxBytes?: number;\n /** Maximum properties in any input object record. */\n readonly maxObjectFields?: number;\n /** Maximum items in any input array. */\n readonly maxArrayLength?: number;\n /** Maximum template source length. */\n readonly maxTemplateLength?: number;\n /** Maximum parsed template references. */\n readonly maxTemplateTokens?: number;\n};\n\n/** Options for parsing a portable generator definition. */\nexport type ParseDefinitionOptions = {\n readonly registry: Pick<\n GeneratorRegistry | GeneratorRegistrySnapshot,\n \"lookup\"\n >;\n readonly limits?: ParseLimits;\n};\n\n/** Options for parsing a versioned generator document. */\nexport type ParseDocumentOptions = ParseDefinitionOptions;\n\n/** The success-or-failure result returned by `safeParseDefinition`. */\nexport type DefinitionParseResult =\n | { readonly success: true; readonly value: ParsedGeneratorDefinition }\n | { readonly success: false; readonly issues: readonly ConstructaError[] };\n\n/** The success-or-failure result returned by `safeParseDocument`. */\nexport type DocumentParseResult =\n | {\n readonly success: true;\n readonly value: import(\"constructa-schema\").GeneratorDocumentV1;\n }\n | { readonly success: false; readonly issues: readonly ConstructaError[] };\n\n/** Parses untrusted runtime definition data without executing generator code. */\nexport function parseDefinition(\n value: unknown,\n options: ParseDefinitionOptions,\n): ParsedGeneratorDefinition {\n return parseDefinitionAtPath(value, [], options.registry, options.limits);\n}\n\nfunction parseDefinitionAtPath(\n value: unknown,\n path: ValidationPath,\n registry: ParseDefinitionOptions[\"registry\"],\n limits?: ParseLimits,\n): ParsedGeneratorDefinition {\n const result = parseRuntimeDefinition(value, path, { registry, limits });\n if (result.success) return result.value;\n throw result.issues[0];\n}\n\nexport function safeParseDefinition(\n value: unknown,\n options: ParseDefinitionOptions,\n): DefinitionParseResult {\n return parseRuntimeDefinition(value, [], options);\n}\n\n/** Parses a versioned document and its root definition through the same pipeline. */\nexport function parseDocument(\n value: unknown,\n options: ParseDocumentOptions,\n): import(\"constructa-schema\").GeneratorDocumentV1 {\n const result = safeParseDocument(value, options);\n if (result.success) return result.value;\n throw result.issues[0];\n}\n\nexport function safeParseDocument(\n value: unknown,\n options: ParseDocumentOptions,\n): DocumentParseResult {\n const limits = resolveParseLimits(options);\n const documentIssues = validationIssuesToErrors(\n validateDocumentSafely(value),\n [],\n limits.maxIssues,\n );\n if (documentIssues.length > 0)\n return { success: false, issues: documentIssues };\n\n // Schema parsing is now safe because validation has rejected hostile shapes.\n const document = parseSchemaDocument(value);\n const definition = parseRuntimeDefinition(\n document.definition,\n [\"definition\"],\n options,\n );\n return definition.success\n ? { success: true, value: document }\n : { success: false, issues: definition.issues };\n}\n\n/** A generator type and version required by an implementation. */\nexport type GeneratorDependency = {\n readonly typeId: string;\n readonly path: ValidationPath;\n};\n\ndeclare const parsedGeneratorDefinition: unique symbol;\n\n/** A runtime-validated definition accepted by an executor without revalidation. */\n/** A generator definition already validated against a registry. */\nexport type ParsedGeneratorDefinition = GeneratorDefinition & {\n readonly [parsedGeneratorDefinition]: true;\n};\n\nconst parsedDefinitions = new WeakSet<object>();\n\n/** A trusted implementation of one portable generator type. */\nexport type GeneratorImplementation<\n Definition extends GeneratorDefinition<Output>,\n Output,\n> = {\n readonly type: string;\n readonly version: number;\n readonly validateDefinition: (\n definition: unknown,\n ) => readonly ValidationIssue[];\n readonly analyzeDependencies?: (\n definition: Definition,\n ) => readonly GeneratorDependency[];\n /** Declares object-local value references used by this definition. */\n readonly analyzeValueDependencies?: (\n definition: Definition,\n ) => readonly ValueDependency[];\n readonly generate: (input: {\n readonly definition: Definition;\n readonly context: GenerationContext;\n }) => Output;\n};\n\n/** A registry entry for one generator type. */\nexport type RegisteredGenerator = {\n readonly type: string;\n readonly version: number;\n};\n\n/** An immutable point-in-time view of a generator registry. */\nexport type GeneratorRegistrySnapshot = {\n readonly generators: readonly RegisteredGenerator[];\n readonly lookup: (\n type: string,\n path?: ValidationPath,\n ) => GeneratorImplementation<GeneratorDefinition, unknown>;\n};\n\n/** A mutable registry of trusted generator implementations. */\nexport type GeneratorRegistry = {\n register: <Definition extends GeneratorDefinition<Output>, Output>(\n implementation: GeneratorImplementation<Definition, Output>,\n ) => void;\n replace: <Definition extends GeneratorDefinition<Output>, Output>(\n implementation: GeneratorImplementation<Definition, Output>,\n ) => void;\n lookup: (\n type: string,\n path?: ValidationPath,\n ) => GeneratorImplementation<GeneratorDefinition, unknown>;\n snapshot: () => GeneratorRegistrySnapshot;\n};\n\nconst RESERVED_GENERATOR_TYPE_IDS = new Set([\n \"__proto__\",\n \"constructor\",\n \"prototype\",\n]);\n\n/** Creates advanced registry infrastructure. Normal factories do not require it. */\nexport function createRegistry(): GeneratorRegistry {\n const implementations = new Map<\n string,\n GeneratorImplementation<GeneratorDefinition, unknown>\n >();\n\n return {\n register(implementation) {\n assertRegistryImplementation(implementation);\n if (implementations.has(implementation.type)) {\n throw registryError(\n \"DUPLICATE_GENERATOR\",\n [\"type\"],\n `A generator with type \"${implementation.type}\" is already registered.`,\n );\n }\n implementations.set(\n implementation.type,\n freezeImplementation(\n implementation,\n ) as unknown as GeneratorImplementation<GeneratorDefinition, unknown>,\n );\n },\n replace(implementation) {\n assertRegistryImplementation(implementation);\n if (!implementations.has(implementation.type)) {\n throw registryError(\n \"UNKNOWN_GENERATOR\",\n [\"type\"],\n `No generator with type \"${implementation.type}\" is registered.`,\n );\n }\n implementations.set(\n implementation.type,\n freezeImplementation(\n implementation,\n ) as unknown as GeneratorImplementation<GeneratorDefinition, unknown>,\n );\n },\n lookup(type, path = []) {\n return lookupImplementation(implementations, type, path);\n },\n snapshot() {\n return createRegistrySnapshot(implementations);\n },\n };\n}\n\n/**\n * Creates an advanced single-value executor over an immutable registry\n * snapshot. Normal applications will receive this behavior through the SDK.\n */\nexport function createExecutor(\n registry: GeneratorRegistry | GeneratorRegistrySnapshot,\n): Executor {\n const snapshot = createExecutionSnapshot(registry);\n\n return Object.freeze({\n generate<Definition extends GeneratorDefinition>(\n definition: Definition,\n options?: ExecutionOptions,\n ): import(\"constructa-schema\").Infer<Definition> {\n const execution = resolveExecutionOptions(options);\n const parsed = parsedDefinitions.has(definition)\n ? definition\n : parseDefinition(definition, { registry: snapshot });\n return executeParsedDefinition(parsed, [], 0, {\n snapshot,\n ...execution,\n }) as import(\"constructa-schema\").Infer<Definition>;\n },\n });\n}\n\ntype ExecutionState = {\n readonly snapshot: GeneratorRegistrySnapshot;\n readonly random: RandomSource;\n readonly maxDepth: number;\n readonly signal?: AbortSignal;\n readonly deadline?: number;\n};\n\nfunction executeParsedDefinition(\n definition: GeneratorDefinition,\n path: ValidationPath,\n depth: number,\n state: ExecutionState,\n references: ReferenceResolver = unavailableReferenceResolver(path),\n): unknown {\n assertExecutionActive(state, path);\n const implementation = state.snapshot.lookup(definition.type, path);\n analyzeGeneratorDependencies(\n implementation,\n definition,\n state.snapshot,\n path,\n );\n const context = createGenerationContext({\n random: state.random,\n path,\n references,\n createObjectScope() {\n return createObjectGenerationScope(\n path,\n (child, pathSegment, scopeReferences) => {\n assertChildPathSegment(pathSegment, path);\n const childPath = [...path, pathSegment];\n if (depth >= state.maxDepth) {\n throw new ConstructaError({\n kind: \"execution\",\n code: \"MAX_EXECUTION_DEPTH\",\n path: childPath,\n message: \"Child execution exceeds the configured maximum depth.\",\n });\n }\n const parsed = parseDefinitionAtPath(\n child,\n childPath,\n state.snapshot,\n );\n return executeParsedDefinition(\n parsed,\n childPath,\n depth + 1,\n state,\n scopeReferences,\n );\n },\n );\n },\n analyzeChildValueDependencies(child, pathSegment) {\n assertChildPathSegment(pathSegment, path);\n const childPath = [...path, pathSegment];\n const parsed = parseDefinitionAtPath(child, childPath, state.snapshot);\n const childImplementation = state.snapshot.lookup(parsed.type, childPath);\n return analyzeValueDependencies(childImplementation, parsed, childPath);\n },\n executeChild<Output>(\n child: GeneratorDefinition<Output>,\n pathSegment: ValidationPathSegment,\n ): Output {\n assertChildPathSegment(pathSegment, path);\n const childPath = [...path, pathSegment];\n if (depth >= state.maxDepth) {\n throw new ConstructaError({\n kind: \"execution\",\n code: \"MAX_EXECUTION_DEPTH\",\n path: childPath,\n message: \"Child execution exceeds the configured maximum depth.\",\n });\n }\n const parsed = parseDefinitionAtPath(child, childPath, state.snapshot);\n return executeParsedDefinition(\n parsed,\n childPath,\n depth + 1,\n state,\n references,\n ) as Output;\n },\n });\n return invokeValidatedGeneratorImplementation(\n implementation,\n definition,\n context,\n path,\n );\n}\n\nfunction createObjectGenerationScope(\n path: ValidationPath,\n executeChild: (\n definition: GeneratorDefinition,\n pathSegment: string,\n references: ReferenceResolver,\n ) => unknown,\n): ObjectGenerationScope {\n const completed = new Map<string, unknown>();\n const resolver: ReferenceResolver = Object.freeze({\n resolve(referencePath: ReferencePath): unknown {\n assertReferencePath(referencePath, path);\n const key = referencePathKey(referencePath);\n if (!completed.has(key)) {\n throw new ConstructaError({\n kind: \"dependency\",\n code: \"REFERENCE_NOT_AVAILABLE\",\n path,\n message: \"The referenced object value has not completed.\",\n });\n }\n return completed.get(key);\n },\n });\n return Object.freeze({\n executeChild<Output>(\n definition: GeneratorDefinition<Output>,\n pathSegment: string,\n ): Output {\n const value = executeChild(definition, pathSegment, resolver) as Output;\n recordCompletedValue(completed, [pathSegment], value);\n return value;\n },\n });\n}\n\nfunction recordCompletedValue(\n completed: Map<string, unknown>,\n referencePath: readonly string[],\n value: unknown,\n visited = new WeakSet<object>(),\n): void {\n completed.set(referencePathKey(referencePath), value);\n if (typeof value !== \"object\" || value === null || visited.has(value)) return;\n visited.add(value);\n for (const [key, child] of Object.entries(value)) {\n recordCompletedValue(completed, [...referencePath, key], child, visited);\n }\n}\n\nfunction unavailableReferenceResolver(path: ValidationPath): ReferenceResolver {\n return Object.freeze({\n resolve(referencePath: ReferencePath): never {\n assertReferencePath(referencePath, path);\n throw new ConstructaError({\n kind: \"dependency\",\n code: \"REFERENCE_RESOLUTION_UNAVAILABLE\",\n path,\n message:\n \"Reference resolution is available only inside an object field.\",\n });\n },\n });\n}\n\nfunction assertReferencePath(\n referencePath: ReferencePath,\n contextPath: ValidationPath,\n): void {\n if (\n !Array.isArray(referencePath) ||\n referencePath.length === 0 ||\n referencePath.some(\n (segment) => typeof segment !== \"string\" || segment.length === 0,\n )\n ) {\n throw contextError(\n \"INVALID_REFERENCE_PATH\",\n contextPath,\n \"Reference paths must contain one or more non-empty string segments.\",\n );\n }\n}\n\nfunction referencePathKey(path: readonly string[]): string {\n return JSON.stringify(path);\n}\n\nfunction createExecutionSnapshot(\n registry: GeneratorRegistry | GeneratorRegistrySnapshot,\n): GeneratorRegistrySnapshot {\n if (typeof registry !== \"object\" || registry === null) {\n throw contextError(\n \"INVALID_EXECUTOR_REGISTRY\",\n [\"registry\"],\n \"Executor requires a generator registry.\",\n );\n }\n if (typeof (registry as GeneratorRegistry).snapshot === \"function\") {\n return (registry as GeneratorRegistry).snapshot();\n }\n if (typeof (registry as GeneratorRegistrySnapshot).lookup === \"function\") {\n return registry as GeneratorRegistrySnapshot;\n }\n throw contextError(\n \"INVALID_EXECUTOR_REGISTRY\",\n [\"registry\"],\n \"Executor requires a generator registry.\",\n );\n}\n\nfunction resolveExecutionOptions(\n options: ExecutionOptions | undefined,\n): Omit<ExecutionState, \"snapshot\"> {\n if (options === undefined) {\n return { random: createDefaultRandomSource(), maxDepth: 64 };\n }\n if (typeof options !== \"object\" || options === null) {\n throw contextError(\n \"INVALID_EXECUTION_OPTIONS\",\n [],\n \"Execution options must be an object.\",\n );\n }\n if (options.seed !== undefined && options.random !== undefined) {\n throw contextError(\n \"CONFLICTING_RANDOM_OPTIONS\",\n [\"seed\"],\n \"seed and random cannot be supplied together.\",\n );\n }\n const maxDepth = options.maxDepth ?? 64;\n if (!Number.isSafeInteger(maxDepth) || maxDepth < 0) {\n throw contextError(\n \"INVALID_EXECUTION_OPTIONS\",\n [\"maxDepth\"],\n \"maxDepth must be a non-negative safe integer.\",\n );\n }\n if (options.signal !== undefined && typeof options.signal !== \"object\") {\n throw contextError(\n \"INVALID_EXECUTION_OPTIONS\",\n [\"signal\"],\n \"signal must be an AbortSignal when supplied.\",\n );\n }\n if (\n options.deadline !== undefined &&\n (!Number.isFinite(options.deadline) || options.deadline < 0)\n ) {\n throw contextError(\n \"INVALID_EXECUTION_OPTIONS\",\n [\"deadline\"],\n \"deadline must be a non-negative finite UTC epoch time.\",\n );\n }\n const random =\n options.seed !== undefined\n ? createSeededRandom(options.seed)\n : options.random !== undefined\n ? createRandomSource(options.random)\n : createDefaultRandomSource();\n return {\n random,\n maxDepth,\n signal: options.signal,\n deadline: options.deadline,\n };\n}\n\nfunction assertExecutionActive(\n state: ExecutionState,\n path: ValidationPath,\n): void {\n if (state.signal?.aborted) {\n throw new ConstructaError({\n kind: \"execution\",\n code: \"EXECUTION_ABORTED\",\n path,\n message: \"Generator execution was aborted.\",\n });\n }\n if (state.deadline !== undefined && Date.now() >= state.deadline) {\n throw new ConstructaError({\n kind: \"execution\",\n code: \"EXECUTION_DEADLINE_EXCEEDED\",\n path,\n message: \"Generator execution exceeded its deadline.\",\n });\n }\n}\n\nfunction analyzeGeneratorDependencies(\n implementation: GeneratorImplementation<GeneratorDefinition, unknown>,\n definition: GeneratorDefinition,\n registry: GeneratorRegistrySnapshot,\n path: ValidationPath,\n): void {\n if (implementation.analyzeDependencies === undefined) return;\n let dependencies: readonly GeneratorDependency[];\n try {\n dependencies = implementation.analyzeDependencies(definition);\n } catch (cause) {\n throw normalizeConstructaError(cause, {\n kind: \"dependency\",\n code: \"DEPENDENCY_ANALYSIS_FAILED\",\n path,\n message: \"Generator dependency analysis failed.\",\n });\n }\n if (!Array.isArray(dependencies)) {\n throw new ConstructaError({\n kind: \"system\",\n code: \"DEPENDENCY_ANALYSIS_FAILED\",\n path,\n message: \"Generator dependency analysis returned an invalid result.\",\n });\n }\n for (const dependency of dependencies) {\n if (!isGeneratorDependency(dependency)) {\n throw new ConstructaError({\n kind: \"system\",\n code: \"DEPENDENCY_ANALYSIS_FAILED\",\n path,\n message:\n \"Generator dependency analysis returned an invalid dependency.\",\n });\n }\n registry.lookup(dependency.typeId, [...path, ...dependency.path]);\n }\n}\n\nfunction analyzeValueDependencies(\n implementation: GeneratorImplementation<GeneratorDefinition, unknown>,\n definition: GeneratorDefinition,\n path: ValidationPath,\n): readonly ValueDependency[] {\n if (implementation.analyzeValueDependencies === undefined) return [];\n let dependencies: readonly ValueDependency[];\n try {\n dependencies = implementation.analyzeValueDependencies(definition);\n } catch (cause) {\n throw normalizeConstructaError(cause, {\n kind: \"dependency\",\n code: \"DEPENDENCY_ANALYSIS_FAILED\",\n path,\n message: \"Value dependency analysis failed.\",\n });\n }\n if (!Array.isArray(dependencies) || !dependencies.every(isValueDependency)) {\n throw new ConstructaError({\n kind: \"system\",\n code: \"DEPENDENCY_ANALYSIS_FAILED\",\n path,\n message: \"Value dependency analysis returned an invalid result.\",\n });\n }\n return Object.freeze(\n dependencies.map((dependency) =>\n Object.freeze({ path: Object.freeze([...dependency.path]) }),\n ),\n );\n}\n\nfunction isGeneratorDependency(value: unknown): value is GeneratorDependency {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as GeneratorDependency).typeId === \"string\" &&\n Array.isArray((value as GeneratorDependency).path) &&\n (value as GeneratorDependency).path.every(\n (segment) => typeof segment === \"string\" || Number.isSafeInteger(segment),\n )\n );\n}\n\nfunction isValueDependency(value: unknown): value is ValueDependency {\n return (\n typeof value === \"object\" &&\n value !== null &&\n Array.isArray((value as ValueDependency).path) &&\n (value as ValueDependency).path.length > 0 &&\n (value as ValueDependency).path.every(\n (segment) => typeof segment === \"string\" && segment.length > 0,\n )\n );\n}\n\nfunction isCompositeDependencyNode(\n value: unknown,\n): value is CompositeDependencyNode {\n return (\n typeof value === \"object\" &&\n value !== null &&\n Array.isArray((value as CompositeDependencyNode).fieldPath) &&\n (value as CompositeDependencyNode).fieldPath.length === 1 &&\n typeof (value as CompositeDependencyNode).fieldPath[0] === \"string\" &&\n Array.isArray((value as CompositeDependencyNode).dependencies) &&\n (value as CompositeDependencyNode).dependencies.every(isValueDependency)\n );\n}\n\nfunction invokeValidatedGeneratorImplementation(\n implementation: GeneratorImplementation<GeneratorDefinition, unknown>,\n definition: GeneratorDefinition,\n context: GenerationContext,\n path: ValidationPath,\n): unknown {\n try {\n return implementation.generate({ definition, context });\n } catch (cause) {\n if (cause instanceof ConstructaError) {\n return throwWithExecutionPath(cause, path);\n }\n throw normalizeConstructaError(cause, {\n kind: \"execution\",\n code: \"EXECUTION_FAILED\",\n path,\n message: \"Generator execution failed.\",\n });\n }\n}\n\nfunction throwWithExecutionPath(\n error: ConstructaError,\n path: ValidationPath,\n): never {\n if (path.length === 0 || startsWithPath(error.path, path)) throw error;\n throw new ConstructaError({\n kind: error.kind,\n code: error.code,\n path: [...path, ...error.path],\n message: error.message,\n details: error.details,\n });\n}\n\nfunction startsWithPath(path: ValidationPath, prefix: ValidationPath): boolean {\n return prefix.every((segment, index) => path[index] === segment);\n}\n\n/**\n * Defines a trusted, developer-authored generator implementation. This API has\n * no dependency on a particular validation library.\n */\nexport function defineGenerator<\n const Definition extends GeneratorDefinition<Output>,\n Output,\n>(\n implementation: GeneratorImplementation<Definition, Output>,\n): GeneratorImplementation<Definition, Output> {\n assertGeneratorImplementation(implementation);\n return implementation;\n}\n\n/** Builds a portable definition while preserving literal fields and output inference. */\nexport function createGeneratorDefinition<\n Output,\n const Definition extends GeneratorDefinition<Output>,\n>(definition: Definition): Definition {\n assertGeneratorDefinition(definition);\n return definition;\n}\n\n/**\n * Invokes one validated implementation. Registry lookup and dispatch are added\n * later; this function keeps validation and execution failure normalization in\n * the same shared contract today.\n */\nexport function invokeGeneratorImplementation<\n Definition extends GeneratorDefinition<Output>,\n Output,\n>(\n implementation: GeneratorImplementation<Definition, Output>,\n input: {\n readonly definition: Definition;\n readonly context: GenerationContext;\n readonly path?: ValidationPath;\n },\n): Output {\n const path = input.path ?? [];\n let issues: readonly ValidationIssue[];\n\n try {\n issues = implementation.validateDefinition(input.definition);\n } catch (cause) {\n throw normalizeConstructaError(cause, {\n kind: \"configuration\",\n code: \"INVALID_CONFIGURATION\",\n path,\n message: \"Generator definition validation failed.\",\n });\n }\n\n if (issues.length > 0) {\n const [issue] = issues;\n if (issue !== undefined) {\n throw new ConstructaError({\n kind: \"configuration\",\n code: errorCodeForValidationIssue(issue.code),\n path: [...path, ...issue.path],\n message: issue.message,\n details: { issueCode: issue.code },\n });\n }\n\n throw new ConstructaError({\n kind: \"system\",\n code: \"EXECUTION_FAILED\",\n path,\n message: \"Generator validation returned an invalid result.\",\n });\n }\n\n try {\n return implementation.generate({\n definition: input.definition,\n context: input.context,\n });\n } catch (cause) {\n throw normalizeConstructaError(cause, {\n kind: \"execution\",\n code: \"EXECUTION_FAILED\",\n path,\n message: \"Generator execution failed.\",\n });\n }\n}\n\nconst DEFAULT_PARSE_LIMITS = Object.freeze({\n maxDepth: 64,\n maxIssues: 100,\n maxNodes: 10_000,\n maxBytes: 1_000_000,\n maxObjectFields: 10_000,\n maxArrayLength: 10_000,\n maxTemplateLength: 100_000,\n maxTemplateTokens: 10_000,\n});\n\ntype ResolvedParseLimits = {\n readonly maxDepth: number;\n readonly maxIssues: number;\n readonly maxNodes: number;\n readonly maxBytes: number;\n readonly maxObjectFields: number;\n readonly maxArrayLength: number;\n readonly maxTemplateLength: number;\n readonly maxTemplateTokens: number;\n};\n\nfunction parseRuntimeDefinition(\n value: unknown,\n path: ValidationPath,\n options: ParseDefinitionOptions,\n): DefinitionParseResult {\n const limits = resolveParseLimits(options);\n const schemaIssues = validationIssuesToErrors(\n validateDefinitionSafely(value, path),\n path,\n limits.maxIssues,\n );\n if (schemaIssues.length > 0) return { success: false, issues: schemaIssues };\n const limitIssue = findInputLimitIssue(value, path, limits);\n if (limitIssue !== undefined) return { success: false, issues: [limitIssue] };\n\n const issues: ConstructaError[] = [];\n const visited = new Set<object>();\n visitRuntimeDefinition(\n value as GeneratorDefinition,\n path,\n 0,\n options.registry,\n limits,\n visited,\n issues,\n );\n return issues.length === 0\n ? {\n success: true,\n value: markParsedDefinitions(visited, value as GeneratorDefinition),\n }\n : { success: false, issues: Object.freeze(issues) };\n}\n\nfunction markParsedDefinitions(\n definitions: ReadonlySet<object>,\n definition: GeneratorDefinition,\n): ParsedGeneratorDefinition {\n for (const parsed of definitions) parsedDefinitions.add(parsed);\n return definition as ParsedGeneratorDefinition;\n}\n\nfunction visitRuntimeDefinition(\n definition: GeneratorDefinition,\n path: ValidationPath,\n depth: number,\n registry: ParseDefinitionOptions[\"registry\"],\n limits: ResolvedParseLimits,\n visited: Set<object>,\n issues: ConstructaError[],\n): void {\n if (issues.length >= limits.maxIssues) return;\n if (depth > limits.maxDepth) {\n addParseIssue(\n issues,\n limits,\n \"PARSE_DEPTH_LIMIT\",\n path,\n \"Generator definition exceeds the maximum nesting depth.\",\n );\n return;\n }\n if (visited.size >= limits.maxNodes) {\n addParseIssue(\n issues,\n limits,\n \"PARSE_NODE_LIMIT\",\n path,\n \"Generator definition exceeds the maximum node count.\",\n );\n return;\n }\n visited.add(definition);\n\n let implementation: GeneratorImplementation<GeneratorDefinition, unknown>;\n try {\n implementation = registry.lookup(definition.type, path);\n } catch (cause) {\n const error = normalizeConstructaError(cause, {\n kind: \"dependency\",\n code: \"UNKNOWN_GENERATOR\",\n path: [...path, \"type\"],\n message: \"Generator type could not be resolved.\",\n });\n addExistingParseIssue(issues, limits, error);\n return;\n }\n\n let validationIssues: readonly ValidationIssue[];\n try {\n validationIssues = implementation.validateDefinition(definition);\n } catch (cause) {\n addExistingParseIssue(\n issues,\n limits,\n normalizeConstructaError(cause, {\n kind: \"configuration\",\n code: \"INVALID_CONFIGURATION\",\n path,\n message: \"Generator definition validation failed.\",\n }),\n );\n return;\n }\n if (!Array.isArray(validationIssues)) {\n addParseIssue(\n issues,\n limits,\n \"INVALID_CONFIGURATION\",\n path,\n \"Generator definition validation returned an invalid result.\",\n \"system\",\n );\n return;\n }\n for (const issue of validationIssues) {\n if (!isValidationIssue(issue)) {\n addParseIssue(\n issues,\n limits,\n \"INVALID_CONFIGURATION\",\n path,\n \"Generator definition validation returned an invalid issue.\",\n \"system\",\n );\n return;\n }\n addParseIssue(\n issues,\n limits,\n errorCodeForValidationIssue(issue.code),\n [...path, ...issue.path],\n issue.message,\n );\n }\n\n // Configurations are portable JSON. Every embedded object with a generator\n // discriminator is another definition and must pass the same pipeline.\n for (const [key, child] of Object.entries(definition)) {\n if (key !== \"type\")\n visitEmbeddedDefinitions(\n child,\n [...path, key],\n depth + 1,\n registry,\n limits,\n visited,\n issues,\n );\n if (issues.length >= limits.maxIssues) return;\n }\n}\n\nfunction visitEmbeddedDefinitions(\n value: unknown,\n path: ValidationPath,\n depth: number,\n registry: ParseDefinitionOptions[\"registry\"],\n limits: ResolvedParseLimits,\n visited: Set<object>,\n issues: ConstructaError[],\n): void {\n if (\n issues.length >= limits.maxIssues ||\n value === null ||\n typeof value !== \"object\"\n )\n return;\n if (Array.isArray(value)) {\n for (let index = 0; index < value.length; index += 1) {\n visitEmbeddedDefinitions(\n value[index],\n [...path, index],\n depth,\n registry,\n limits,\n visited,\n issues,\n );\n if (issues.length >= limits.maxIssues) return;\n }\n return;\n }\n if (Object.hasOwn(value, \"type\")) {\n visitRuntimeDefinition(\n value as GeneratorDefinition,\n path,\n depth,\n registry,\n limits,\n visited,\n issues,\n );\n return;\n }\n for (const [key, child] of Object.entries(value)) {\n visitEmbeddedDefinitions(\n child,\n [...path, key],\n depth,\n registry,\n limits,\n visited,\n issues,\n );\n if (issues.length >= limits.maxIssues) return;\n }\n}\n\nfunction resolveParseLimits(\n options: ParseDefinitionOptions,\n): ResolvedParseLimits {\n if (\n typeof options !== \"object\" ||\n options === null ||\n typeof options.registry !== \"object\" ||\n options.registry === null ||\n typeof options.registry.lookup !== \"function\"\n ) {\n throw contextError(\n \"INVALID_PARSE_OPTIONS\",\n [],\n \"Parsing requires a registry with a lookup function.\",\n );\n }\n const supplied = options.limits ?? {};\n const resolved = {\n maxDepth: supplied.maxDepth ?? DEFAULT_PARSE_LIMITS.maxDepth,\n maxIssues: supplied.maxIssues ?? DEFAULT_PARSE_LIMITS.maxIssues,\n maxNodes: supplied.maxNodes ?? DEFAULT_PARSE_LIMITS.maxNodes,\n maxBytes: supplied.maxBytes ?? DEFAULT_PARSE_LIMITS.maxBytes,\n maxObjectFields:\n supplied.maxObjectFields ?? DEFAULT_PARSE_LIMITS.maxObjectFields,\n maxArrayLength:\n supplied.maxArrayLength ?? DEFAULT_PARSE_LIMITS.maxArrayLength,\n maxTemplateLength:\n supplied.maxTemplateLength ?? DEFAULT_PARSE_LIMITS.maxTemplateLength,\n maxTemplateTokens:\n supplied.maxTemplateTokens ?? DEFAULT_PARSE_LIMITS.maxTemplateTokens,\n };\n for (const [name, value] of Object.entries(resolved)) {\n if (!Number.isSafeInteger(value) || value < 1) {\n throw contextError(\n \"INVALID_PARSE_LIMITS\",\n [\"limits\", name],\n `${name} must be a positive safe integer.`,\n );\n }\n }\n return resolved;\n}\n\nfunction findInputLimitIssue(\n value: unknown,\n path: ValidationPath,\n limits: ResolvedParseLimits,\n): ConstructaError | undefined {\n const bytes = new TextEncoder().encode(JSON.stringify(value)).length;\n if (bytes > limits.maxBytes) {\n return inputLimitError(\n \"PARSE_BYTE_LIMIT\",\n path,\n \"Definition exceeds the maximum serialized byte size.\",\n );\n }\n const visit = (\n candidate: unknown,\n candidatePath: ValidationPath,\n ): ConstructaError | undefined => {\n if (Array.isArray(candidate)) {\n if (candidate.length > limits.maxArrayLength) {\n return inputLimitError(\n \"PARSE_ARRAY_LIMIT\",\n candidatePath,\n \"Definition contains an array exceeding the configured maximum length.\",\n );\n }\n for (let index = 0; index < candidate.length; index += 1) {\n const issue = visit(candidate[index], [...candidatePath, index]);\n if (issue !== undefined) return issue;\n }\n return undefined;\n }\n if (typeof candidate !== \"object\" || candidate === null) return undefined;\n const record = candidate as Record<string, unknown>;\n const keys = Object.keys(record);\n if (keys.length > limits.maxObjectFields) {\n return inputLimitError(\n \"PARSE_OBJECT_FIELD_LIMIT\",\n candidatePath,\n \"Definition contains an object exceeding the configured maximum field count.\",\n );\n }\n if (record.type === \"template\" && typeof record.source === \"string\") {\n if (record.source.length > limits.maxTemplateLength) {\n return inputLimitError(\n \"PARSE_TEMPLATE_LENGTH_LIMIT\",\n [...candidatePath, \"source\"],\n \"Template source exceeds the configured maximum length.\",\n );\n }\n let tokenCount = 0;\n try {\n tokenCount = parseTemplateTokens(record.source).filter(\n (token) => token.type === \"reference\",\n ).length;\n } catch (_cause) {\n // The owning template implementation reports malformed syntax.\n }\n if (tokenCount > limits.maxTemplateTokens) {\n return inputLimitError(\n \"PARSE_TEMPLATE_TOKEN_LIMIT\",\n [...candidatePath, \"source\"],\n \"Template source exceeds the configured maximum reference count.\",\n );\n }\n }\n for (const key of keys) {\n const issue = visit(record[key], [...candidatePath, key]);\n if (issue !== undefined) return issue;\n }\n return undefined;\n };\n return visit(value, path);\n}\n\nfunction inputLimitError(\n code: string,\n path: ValidationPath,\n message: string,\n): ConstructaError {\n return new ConstructaError({\n kind: \"configuration\",\n code: code as Uppercase<string>,\n path,\n message,\n });\n}\n\nfunction validateDefinitionSafely(\n value: unknown,\n path: ValidationPath,\n): readonly ValidationIssue[] {\n try {\n return validateGeneratorDefinition(value, path);\n } catch (_cause) {\n return [\n {\n code: \"invalid_json_value\",\n path,\n message: \"Definition could not be safely inspected.\",\n },\n ];\n }\n}\n\nfunction validateDocumentSafely(value: unknown): readonly ValidationIssue[] {\n try {\n return validateDocument(value);\n } catch {\n return [\n {\n code: \"invalid_json_value\",\n path: [],\n message: \"Document could not be safely inspected.\",\n },\n ];\n }\n}\n\nfunction validationIssuesToErrors(\n issues: readonly ValidationIssue[],\n fallbackPath: ValidationPath,\n maxIssues = Number.POSITIVE_INFINITY,\n): ConstructaError[] {\n return issues.slice(0, maxIssues).map(\n (issue) =>\n new ConstructaError({\n kind: \"configuration\",\n code: isValidationIssue(issue)\n ? errorCodeForValidationIssue(issue.code)\n : \"INVALID_CONFIGURATION\",\n path: isValidationIssue(issue) ? issue.path : fallbackPath,\n message: isValidationIssue(issue)\n ? issue.message\n : \"Validation returned an invalid issue.\",\n details: isValidationIssue(issue)\n ? { issueCode: issue.code }\n : undefined,\n }),\n );\n}\n\nfunction errorCodeForValidationIssue(code: string): Uppercase<string> {\n const reservedCodes: Record<string, Uppercase<string>> = {\n empty_choice: \"EMPTY_CHOICE\",\n invalid_length: \"INVALID_LENGTH\",\n invalid_range: \"INVALID_RANGE\",\n invalid_template_token: \"INVALID_TEMPLATE_TOKEN\",\n };\n return reservedCodes[code] ?? \"INVALID_CONFIGURATION\";\n}\n\nfunction isValidationIssue(value: unknown): value is ValidationIssue {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as ValidationIssue).code === \"string\" &&\n typeof (value as ValidationIssue).message === \"string\" &&\n Array.isArray((value as ValidationIssue).path)\n );\n}\n\nfunction addParseIssue(\n issues: ConstructaError[],\n limits: ResolvedParseLimits,\n code: string,\n path: ValidationPath,\n message: string,\n kind: \"configuration\" | \"system\" = \"configuration\",\n): void {\n if (issues.length < limits.maxIssues)\n issues.push(\n new ConstructaError({\n kind,\n code: code as Uppercase<string>,\n path,\n message,\n }),\n );\n}\n\nfunction addExistingParseIssue(\n issues: ConstructaError[],\n limits: ResolvedParseLimits,\n error: ConstructaError,\n): void {\n if (issues.length < limits.maxIssues) issues.push(error);\n}\n\nfunction assertGeneratorImplementation(implementation: {\n readonly type: string;\n readonly version: number;\n readonly validateDefinition: unknown;\n readonly analyzeDependencies?: unknown;\n readonly generate: unknown;\n}): void {\n if (!isStableTypeId(implementation.type)) {\n throw new TypeError(\"generator type must be a stable lowercase identifier\");\n }\n if (\n !Number.isSafeInteger(implementation.version) ||\n implementation.version < 1\n ) {\n throw new TypeError(\"generator version must be a positive safe integer\");\n }\n if (typeof implementation.validateDefinition !== \"function\") {\n throw new TypeError(\"validateDefinition must be a function\");\n }\n if (typeof implementation.generate !== \"function\") {\n throw new TypeError(\"generate must be a function\");\n }\n if (\n implementation.analyzeDependencies !== undefined &&\n typeof implementation.analyzeDependencies !== \"function\"\n ) {\n throw new TypeError(\"analyzeDependencies must be a function when present\");\n }\n}\n\nfunction assertRegistryImplementation(implementation: {\n readonly type: string;\n readonly version: number;\n readonly validateDefinition: unknown;\n readonly analyzeDependencies?: unknown;\n readonly generate: unknown;\n}): void {\n try {\n assertGeneratorImplementation(implementation);\n } catch {\n throw registryError(\n \"INVALID_CONFIGURATION\",\n [\"implementation\"],\n \"Generator implementation is invalid.\",\n );\n }\n if (RESERVED_GENERATOR_TYPE_IDS.has(implementation.type)) {\n throw registryError(\n \"INVALID_CONFIGURATION\",\n [\"type\"],\n `Generator type \"${implementation.type}\" is reserved.`,\n );\n }\n}\n\nfunction freezeImplementation<\n Definition extends GeneratorDefinition<Output>,\n Output,\n>(\n implementation: GeneratorImplementation<Definition, Output>,\n): GeneratorImplementation<Definition, Output> {\n return Object.freeze({ ...implementation });\n}\n\nfunction createRegistrySnapshot(\n implementations: ReadonlyMap<\n string,\n GeneratorImplementation<GeneratorDefinition, unknown>\n >,\n): GeneratorRegistrySnapshot {\n const snapshotImplementations = new Map(implementations);\n const generators = [...snapshotImplementations.values()]\n .map(({ type, version }) => Object.freeze({ type, version }))\n .sort((left, right) => left.type.localeCompare(right.type));\n\n return Object.freeze({\n generators: Object.freeze(generators),\n lookup(type: string, path: ValidationPath = []) {\n return lookupImplementation(snapshotImplementations, type, path);\n },\n });\n}\n\nfunction lookupImplementation(\n implementations: ReadonlyMap<\n string,\n GeneratorImplementation<GeneratorDefinition, unknown>\n >,\n type: string,\n path: ValidationPath,\n): GeneratorImplementation<GeneratorDefinition, unknown> {\n const implementation = implementations.get(type);\n if (implementation !== undefined) return implementation;\n\n const registeredTypes = [...implementations.keys()].sort((left, right) =>\n left.localeCompare(right),\n );\n throw new ConstructaError({\n kind: \"dependency\",\n code: \"UNKNOWN_GENERATOR\",\n path: [...path, \"type\"],\n message: `No generator with type \"${type}\" is registered.`,\n details: { registeredTypes },\n });\n}\n\nfunction registryError(\n code: \"DUPLICATE_GENERATOR\" | \"INVALID_CONFIGURATION\" | \"UNKNOWN_GENERATOR\",\n path: ValidationPath,\n message: string,\n): ConstructaError {\n return new ConstructaError({ kind: \"configuration\", code, path, message });\n}\n\nfunction assertRandomSourceAdapter(adapter: RandomSourceAdapter): void {\n if (\n typeof adapter !== \"object\" ||\n adapter === null ||\n typeof adapter.float !== \"function\" ||\n typeof adapter.integer !== \"function\" ||\n typeof adapter.bytes !== \"function\"\n ) {\n throw invalidRandomSource(\n \"A random source must provide float(), integer(), and bytes() methods.\",\n );\n }\n}\n\nfunction assertRandomLength(value: number, name: string): void {\n if (!Number.isSafeInteger(value) || value < 1) {\n throw invalidRandomSource(`${name} must be a positive safe integer.`);\n }\n}\n\nfunction assertByteLength(length: number): void {\n if (!Number.isSafeInteger(length) || length < 0) {\n throw invalidRandomSource(\"length must be a non-negative safe integer.\");\n }\n}\n\nfunction invalidRandomSource(message: string): ConstructaError {\n return new ConstructaError({\n kind: \"system\",\n code: \"INVALID_RANDOM_SOURCE\",\n path: [\"random\"],\n message,\n });\n}\n\nfunction assertContextPath(path: ValidationPath): void {\n for (const segment of path) assertContextPathSegment(segment);\n}\n\nfunction assertContextPathSegment(\n segment: unknown,\n): asserts segment is ValidationPathSegment {\n if (\n typeof segment !== \"string\" &&\n (!Number.isSafeInteger(segment) || typeof segment !== \"number\")\n ) {\n throw contextError(\n \"INVALID_GENERATION_CONTEXT\",\n [\"path\"],\n \"Context path segments must be strings or safe integers.\",\n );\n }\n}\n\nfunction assertChildPathSegment(\n segment: unknown,\n path: ValidationPath,\n): asserts segment is ValidationPathSegment {\n if (\n typeof segment !== \"string\" &&\n (typeof segment !== \"number\" || !Number.isSafeInteger(segment))\n ) {\n throw contextError(\n \"INVALID_CHILD_PATH\",\n path,\n \"Child path segments must be strings or safe integers.\",\n );\n }\n}\n\nfunction contextError(\n code: string,\n path: ValidationPath,\n message: string,\n): ConstructaError {\n return new ConstructaError({\n kind: \"configuration\",\n code: code as Uppercase<string>,\n path,\n message,\n });\n}\n\nfunction hashSeed(seed: string): number {\n let hash = 0x811c_9dc5;\n for (const byte of new TextEncoder().encode(seed)) {\n hash = Math.imul(hash ^ byte, 0x0100_0193) >>> 0;\n }\n return hash;\n}\n\nfunction isStableTypeId(value: string): boolean {\n return /^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/u.test(value);\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "constructa-core",
3
- "version": "0.9.0",
3
+ "version": "0.9.1",
4
4
  "description": "The UI-agnostic Constructa generator execution engine.",
5
5
  "private": false,
6
6
  "license": "MIT",
@@ -26,7 +26,7 @@
26
26
  "access": "public"
27
27
  },
28
28
  "dependencies": {
29
- "constructa-schema": "2.4.0"
29
+ "constructa-schema": "2.4.1"
30
30
  },
31
31
  "devDependencies": {
32
32
  "typescript": "^6.0.3",