constructa-core 0.0.7 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,7 +6,7 @@ This package contains the core runtime responsible for registering, composing, a
6
6
 
7
7
  ## Responsibilities
8
8
 
9
- Planned areas include:
9
+ Current APIs define trusted generator implementations, portable typed definitions, and engine-provided generation context services. Planned areas include:
10
10
 
11
11
  * Generator registry
12
12
  * Generator execution
@@ -15,6 +15,16 @@ Planned areas include:
15
15
  * Generator composition and lifecycle
16
16
  * Structured errors
17
17
 
18
+ ## Generator implementation contract
19
+
20
+ Use `defineGenerator()` for developer-authored executable implementations. An implementation declares a stable lowercase `type`, positive integer `version`, definition validator, optional dependency analysis hook, and `generate({ definition, context })` function. Validation returns schema `ValidationIssue` objects without imposing a validation-library dependency.
21
+
22
+ `GeneratorDefinition<Output>` carries output information only at compile time; emitted definitions remain plain JSON data. Factories should use `createGeneratorDefinition()` so literal fields are preserved and the resulting definition is portable. Implementations receive randomness and child generation through `GenerationContext`; they must not use global randomness or built-in-specific execution switches.
23
+
24
+ ## Registry
25
+
26
+ `createRegistry()` is advanced infrastructure. Register trusted implementations explicitly with `register()`. Duplicate type IDs fail without changing registry state; `replace()` is the deliberate replacement path and requires the type to already be registered. `snapshot()` returns an immutable, type-sorted record of registered generator IDs and versions for execution infrastructure. Lookup and dispatch are separate later concerns.
27
+
18
28
  ## Dependency Boundary
19
29
 
20
30
  `constructa-schema` is the only Constructa runtime dependency that `constructa-core` may depend on.
package/dist/index.d.ts CHANGED
@@ -1 +1,58 @@
1
- export {}
1
+ import { GeneratorDefinition, GeneratorDefinition as GeneratorDefinition$1, Infer, ValidationIssue, ValidationIssue as ValidationIssue$1, ValidationPath, ValidationPath as ValidationPath$1 } from "constructa-schema";
2
+ //#region src/index.d.ts
3
+ type RandomSource = {
4
+ next(): number;
5
+ };
6
+ /** Services supplied by the engine. Implementations must not use global randomness. */
7
+ type GenerationContext = {
8
+ readonly random: RandomSource;
9
+ readonly generateChild: <Output>(definition: GeneratorDefinition$1<Output>) => Output;
10
+ };
11
+ type GeneratorDependency = {
12
+ readonly typeId: string;
13
+ readonly path: ValidationPath$1;
14
+ };
15
+ type GeneratorImplementation<Definition extends GeneratorDefinition$1<Output>, Output> = {
16
+ readonly type: string;
17
+ readonly version: number;
18
+ readonly validateDefinition: (definition: unknown) => readonly ValidationIssue$1[];
19
+ readonly analyzeDependencies?: (definition: Definition) => readonly GeneratorDependency[];
20
+ readonly generate: (input: {
21
+ readonly definition: Definition;
22
+ readonly context: GenerationContext;
23
+ }) => Output;
24
+ };
25
+ type RegisteredGenerator = {
26
+ readonly type: string;
27
+ readonly version: number;
28
+ };
29
+ type GeneratorRegistrySnapshot = {
30
+ readonly generators: readonly RegisteredGenerator[];
31
+ };
32
+ type GeneratorRegistry = {
33
+ register: <Definition extends GeneratorDefinition$1<Output>, Output>(implementation: GeneratorImplementation<Definition, Output>) => void;
34
+ replace: <Definition extends GeneratorDefinition$1<Output>, Output>(implementation: GeneratorImplementation<Definition, Output>) => void;
35
+ snapshot: () => GeneratorRegistrySnapshot;
36
+ };
37
+ /** Creates advanced registry infrastructure. Normal factories do not require it. */
38
+ declare function createRegistry(): GeneratorRegistry;
39
+ /**
40
+ * Defines a trusted, developer-authored generator implementation. This API has
41
+ * no dependency on a particular validation library.
42
+ */
43
+ declare function defineGenerator<const Definition extends GeneratorDefinition$1<Output>, Output>(implementation: GeneratorImplementation<Definition, Output>): GeneratorImplementation<Definition, Output>;
44
+ /** Builds a portable definition while preserving literal fields and output inference. */
45
+ declare function createGeneratorDefinition<Output, const Definition extends GeneratorDefinition$1<Output>>(definition: Definition): Definition;
46
+ /**
47
+ * Invokes one validated implementation. Registry lookup and dispatch are added
48
+ * later; this function keeps validation and execution failure normalization in
49
+ * the same shared contract today.
50
+ */
51
+ declare function invokeGeneratorImplementation<Definition extends GeneratorDefinition$1<Output>, Output>(implementation: GeneratorImplementation<Definition, Output>, input: {
52
+ readonly definition: Definition;
53
+ readonly context: GenerationContext;
54
+ readonly path?: ValidationPath$1;
55
+ }): Output;
56
+ //#endregion
57
+ export { GenerationContext, type GeneratorDefinition, GeneratorDependency, GeneratorImplementation, GeneratorRegistry, GeneratorRegistrySnapshot, type Infer, RandomSource, RegisteredGenerator, type ValidationIssue, type ValidationPath, createGeneratorDefinition, createRegistry, defineGenerator, invokeGeneratorImplementation };
58
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/index.ts"],"mappings":";;KAgBY;EACV;;;KAIU;WACD,QAAQ;WACR,gBAAgB,QACvB,YAAY,sBAAoB,YAC7B;;KAGK;WACD;WACA,MAAM;;KAGL,wBACV,mBAAmB,sBAAoB,SACvC;WAES;WACA;WACA,qBACP,iCACY;WACL,uBACP,YAAY,wBACA;WACL,WAAW;aACT,YAAY;aACZ,SAAS;QACd;;KAGI;WACD;WACA;;KAGC;WACD,qBAAqB;;KAGpB;EACV,WAAW,mBAAmB,sBAAoB,SAAS,QACzD,gBAAgB,wBAAwB,YAAY;EAEtD,UAAU,mBAAmB,sBAAoB,SAAS,QACxD,gBAAgB,wBAAwB,YAAY;EAEtD,gBAAgB;;;iBAUF,kBAAkB;;;;;iBAoDlB,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
@@ -0,0 +1,124 @@
1
+ import { ConstructaError, assertGeneratorDefinition, normalizeConstructaError } from "constructa-schema";
2
+ //#region src/index.ts
3
+ const RESERVED_GENERATOR_TYPE_IDS = /* @__PURE__ */ new Set([
4
+ "__proto__",
5
+ "constructor",
6
+ "prototype"
7
+ ]);
8
+ /** Creates advanced registry infrastructure. Normal factories do not require it. */
9
+ function createRegistry() {
10
+ const implementations = /* @__PURE__ */ new Map();
11
+ return {
12
+ register(implementation) {
13
+ assertRegistryImplementation(implementation);
14
+ if (implementations.has(implementation.type)) throw registryError("DUPLICATE_GENERATOR", ["type"], `A generator with type "${implementation.type}" is already registered.`);
15
+ implementations.set(implementation.type, freezeImplementation(implementation));
16
+ },
17
+ replace(implementation) {
18
+ assertRegistryImplementation(implementation);
19
+ if (!implementations.has(implementation.type)) throw registryError("UNKNOWN_GENERATOR", ["type"], `No generator with type "${implementation.type}" is registered.`);
20
+ implementations.set(implementation.type, freezeImplementation(implementation));
21
+ },
22
+ snapshot() {
23
+ const generators = [...implementations.values()].map(({ type, version }) => Object.freeze({
24
+ type,
25
+ version
26
+ })).sort((left, right) => left.type.localeCompare(right.type));
27
+ return Object.freeze({ generators: Object.freeze(generators) });
28
+ }
29
+ };
30
+ }
31
+ /**
32
+ * Defines a trusted, developer-authored generator implementation. This API has
33
+ * no dependency on a particular validation library.
34
+ */
35
+ function defineGenerator(implementation) {
36
+ assertGeneratorImplementation(implementation);
37
+ return implementation;
38
+ }
39
+ /** Builds a portable definition while preserving literal fields and output inference. */
40
+ function createGeneratorDefinition(definition) {
41
+ assertGeneratorDefinition(definition);
42
+ return definition;
43
+ }
44
+ /**
45
+ * Invokes one validated implementation. Registry lookup and dispatch are added
46
+ * later; this function keeps validation and execution failure normalization in
47
+ * the same shared contract today.
48
+ */
49
+ function invokeGeneratorImplementation(implementation, input) {
50
+ const path = input.path ?? [];
51
+ let issues;
52
+ try {
53
+ issues = implementation.validateDefinition(input.definition);
54
+ } catch (cause) {
55
+ throw normalizeConstructaError(cause, {
56
+ kind: "configuration",
57
+ code: "INVALID_CONFIGURATION",
58
+ path,
59
+ message: "Generator definition validation failed."
60
+ });
61
+ }
62
+ if (issues.length > 0) {
63
+ const [issue] = issues;
64
+ if (issue !== void 0) throw new ConstructaError({
65
+ kind: "configuration",
66
+ code: "INVALID_CONFIGURATION",
67
+ path: [...path, ...issue.path],
68
+ message: issue.message,
69
+ details: { issueCode: issue.code }
70
+ });
71
+ throw new ConstructaError({
72
+ kind: "system",
73
+ code: "EXECUTION_FAILED",
74
+ path,
75
+ message: "Generator validation returned an invalid result."
76
+ });
77
+ }
78
+ try {
79
+ return implementation.generate({
80
+ definition: input.definition,
81
+ context: input.context
82
+ });
83
+ } catch (cause) {
84
+ throw normalizeConstructaError(cause, {
85
+ kind: "execution",
86
+ code: "EXECUTION_FAILED",
87
+ path,
88
+ message: "Generator execution failed."
89
+ });
90
+ }
91
+ }
92
+ function assertGeneratorImplementation(implementation) {
93
+ if (!isStableTypeId(implementation.type)) throw new TypeError("generator type must be a stable lowercase identifier");
94
+ if (!Number.isSafeInteger(implementation.version) || implementation.version < 1) throw new TypeError("generator version must be a positive safe integer");
95
+ if (typeof implementation.validateDefinition !== "function") throw new TypeError("validateDefinition must be a function");
96
+ if (typeof implementation.generate !== "function") throw new TypeError("generate must be a function");
97
+ if (implementation.analyzeDependencies !== void 0 && typeof implementation.analyzeDependencies !== "function") throw new TypeError("analyzeDependencies must be a function when present");
98
+ }
99
+ function assertRegistryImplementation(implementation) {
100
+ try {
101
+ assertGeneratorImplementation(implementation);
102
+ } catch {
103
+ throw registryError("INVALID_CONFIGURATION", ["implementation"], "Generator implementation is invalid.");
104
+ }
105
+ if (RESERVED_GENERATOR_TYPE_IDS.has(implementation.type)) throw registryError("INVALID_CONFIGURATION", ["type"], `Generator type "${implementation.type}" is reserved.`);
106
+ }
107
+ function freezeImplementation(implementation) {
108
+ return Object.freeze({ ...implementation });
109
+ }
110
+ function registryError(code, path, message) {
111
+ return new ConstructaError({
112
+ kind: "configuration",
113
+ code,
114
+ path,
115
+ message
116
+ });
117
+ }
118
+ function isStableTypeId(value) {
119
+ return /^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/u.test(value);
120
+ }
121
+ //#endregion
122
+ export { createGeneratorDefinition, createRegistry, defineGenerator, invokeGeneratorImplementation };
123
+
124
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/index.ts"],"sourcesContent":["import {\n assertGeneratorDefinition,\n ConstructaError,\n type GeneratorDefinition,\n normalizeConstructaError,\n type ValidationIssue,\n type ValidationPath,\n} from \"constructa-schema\";\n\nexport type {\n GeneratorDefinition,\n Infer,\n ValidationIssue,\n ValidationPath,\n} from \"constructa-schema\";\n\nexport type RandomSource = {\n next(): number;\n};\n\n/** Services supplied by the engine. Implementations must not use global randomness. */\nexport type GenerationContext = {\n readonly random: RandomSource;\n readonly generateChild: <Output>(\n definition: GeneratorDefinition<Output>,\n ) => Output;\n};\n\nexport type GeneratorDependency = {\n readonly typeId: string;\n readonly path: ValidationPath;\n};\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 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};\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 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 snapshot() {\n const generators = [...implementations.values()]\n .map(({ type, version }) => Object.freeze({ type, version }))\n .sort((left, right) => left.type.localeCompare(right.type));\n return Object.freeze({ generators: Object.freeze(generators) });\n },\n };\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: \"INVALID_CONFIGURATION\",\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\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 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 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.0.7",
3
+ "version": "0.2.0",
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.1.0"
29
+ "constructa-schema": "2.2.0"
30
30
  },
31
31
  "devDependencies": {
32
32
  "typescript": "^6.0.3",