@metamesh/generator-sdk 0.5.2 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +156 -152
  3. package/dist/authoring.d.ts +57 -0
  4. package/dist/authoring.d.ts.map +1 -0
  5. package/dist/authoring.js +33 -0
  6. package/dist/authoring.js.map +1 -0
  7. package/dist/contracts.d.ts +34 -99
  8. package/dist/contracts.d.ts.map +1 -1
  9. package/dist/execute-generator.d.ts +22 -28
  10. package/dist/execute-generator.d.ts.map +1 -1
  11. package/dist/execute-generator.js +27 -32
  12. package/dist/execute-generator.js.map +1 -1
  13. package/dist/generated-parts.d.ts +1 -2
  14. package/dist/generated-parts.d.ts.map +1 -1
  15. package/dist/generated-parts.js +7 -31
  16. package/dist/generated-parts.js.map +1 -1
  17. package/dist/generator-module.d.ts +18 -40
  18. package/dist/generator-module.d.ts.map +1 -1
  19. package/dist/generator-module.js +4 -111
  20. package/dist/generator-module.js.map +1 -1
  21. package/dist/generator-package/constants.d.ts +2 -2
  22. package/dist/generator-package/constants.js +2 -2
  23. package/dist/generator-package/schemas/definition.schema.d.ts +3 -0
  24. package/dist/generator-package/schemas/definition.schema.d.ts.map +1 -1
  25. package/dist/generator-package/schemas/manifest.schema.d.ts +5 -8422
  26. package/dist/generator-package/schemas/manifest.schema.d.ts.map +1 -1
  27. package/dist/generator-package/schemas/parameter.schema.d.ts +7 -0
  28. package/dist/generator-package/schemas/parameter.schema.d.ts.map +1 -1
  29. package/dist/generator-package/schemas/parameter.schema.js +2 -0
  30. package/dist/generator-package/schemas/parameter.schema.js.map +1 -1
  31. package/dist/generator-package/schemas/preset.schema.d.ts +2 -13
  32. package/dist/generator-package/schemas/preset.schema.d.ts.map +1 -1
  33. package/dist/generator-package/schemas/preset.schema.js.map +1 -1
  34. package/dist/generator-package/validate-definition.d.ts.map +1 -1
  35. package/dist/generator-package/validate-definition.js +18 -0
  36. package/dist/generator-package/validate-definition.js.map +1 -1
  37. package/dist/generator-package/validate-manifest.d.ts.map +1 -1
  38. package/dist/generator-package/validate-manifest.js +2 -13
  39. package/dist/generator-package/validate-manifest.js.map +1 -1
  40. package/dist/generator-services.d.ts +1 -1
  41. package/dist/generator-services.d.ts.map +1 -1
  42. package/dist/index.d.ts +8 -15
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +2 -6
  45. package/dist/index.js.map +1 -1
  46. package/dist/parameter-contracts.d.ts +121 -0
  47. package/dist/parameter-contracts.d.ts.map +1 -0
  48. package/dist/parameter-contracts.js +2 -0
  49. package/dist/parameter-contracts.js.map +1 -0
  50. package/dist/parameters/issues.d.ts +14 -0
  51. package/dist/parameters/issues.d.ts.map +1 -0
  52. package/dist/parameters/issues.js +262 -0
  53. package/dist/parameters/issues.js.map +1 -0
  54. package/dist/parameters/preparation.d.ts +13 -0
  55. package/dist/parameters/preparation.d.ts.map +1 -0
  56. package/dist/parameters/preparation.js +35 -0
  57. package/dist/parameters/preparation.js.map +1 -0
  58. package/dist/parameters/recovery.d.ts +10 -0
  59. package/dist/parameters/recovery.d.ts.map +1 -0
  60. package/dist/parameters/recovery.js +124 -0
  61. package/dist/parameters/recovery.js.map +1 -0
  62. package/dist/parameters/strict.d.ts +30 -0
  63. package/dist/parameters/strict.d.ts.map +1 -0
  64. package/dist/parameters/strict.js +116 -0
  65. package/dist/parameters/strict.js.map +1 -0
  66. package/dist/parameters/values.d.ts +13 -0
  67. package/dist/parameters/values.d.ts.map +1 -0
  68. package/dist/parameters/values.js +73 -0
  69. package/dist/parameters/values.js.map +1 -0
  70. package/dist/parameters.d.ts +7 -69
  71. package/dist/parameters.d.ts.map +1 -1
  72. package/dist/parameters.js +5 -592
  73. package/dist/parameters.js.map +1 -1
  74. package/dist/parse-generator-module.d.ts +29 -0
  75. package/dist/parse-generator-module.d.ts.map +1 -0
  76. package/dist/parse-generator-module.js +137 -0
  77. package/dist/parse-generator-module.js.map +1 -0
  78. package/dist/runtime.d.ts +10 -0
  79. package/dist/runtime.d.ts.map +1 -0
  80. package/dist/runtime.js +5 -0
  81. package/dist/runtime.js.map +1 -0
  82. package/dist/worker-contracts.d.ts +80 -0
  83. package/dist/worker-contracts.d.ts.map +1 -0
  84. package/dist/worker-contracts.js +12 -0
  85. package/dist/worker-contracts.js.map +1 -0
  86. package/package.json +14 -1
  87. package/dist/prepared-generator-module.d.ts +0 -24
  88. package/dist/prepared-generator-module.d.ts.map +0 -1
  89. package/dist/prepared-generator-module.js +0 -124
  90. package/dist/prepared-generator-module.js.map +0 -1
@@ -1,10 +1,7 @@
1
1
  import type { FontSelection } from "./fonts.js";
2
- import type { ParameterGroup, GeneratorDefinition as ParsedGeneratorDefinition } from "./generator-package/schemas/definition.schema.js";
3
- import type { ArrayParameterDefinition, BooleanParameterDefinition, ChoiceSetParameterDefinition, ColorParameterDefinition, FontParameterDefinition, NumberArrayItemDefinition, NumberArrayParameterDefinition, NumberParameterDefinition, NumericParameterDefinition, ParameterDefinition, ProfileParameterDefinition, ProfileScaleReference, SelectOption, SelectParameterDefinition, SliderParameterDefinition, StringArrayItemDefinition, StringArrayParameterDefinition, SvgParameterDefinition, TextParameterDefinition } from "./generator-package/schemas/parameter.schema.js";
4
- import type { GeneratorRuntimeReference } from "./generator-packages.js";
5
- import type { GeneratorServices } from "./generator-services.js";
2
+ import type { GeneratorDefinition, ParameterDefinition } from "./parameter-contracts.js";
6
3
  import type { ProfileValue } from "./profiles.js";
7
- export type { ArrayParameterDefinition, FontParameterDefinition, BooleanParameterDefinition, ChoiceSetParameterDefinition, ColorParameterDefinition, NumberArrayItemDefinition, NumberArrayParameterDefinition, NumberParameterDefinition, NumericParameterDefinition, ParameterDefinition, ParameterGroup, ProfileParameterDefinition, ProfileScaleReference, SelectOption, SelectParameterDefinition, StringArrayItemDefinition, StringArrayParameterDefinition, SvgParameterDefinition, SliderParameterDefinition, TextParameterDefinition, };
4
+ export type { ArrayParameterDefinition, BaseParameterDefinition, GeneratorDefinition, FontParameterDefinition, BooleanParameterDefinition, ChoiceSetParameterDefinition, ColorParameterDefinition, NumberArrayItemDefinition, NumberArrayParameterDefinition, NumberParameterDefinition, NumericParameterDefinition, ParameterDefinition, ParameterGroup, ProfileParameterDefinition, ProfileScaleReference, SelectOption, SelectParameterDefinition, StringArrayItemDefinition, StringArrayParameterDefinition, SvgParameterDefinition, SliderParameterDefinition, TextParameterDefinition, } from "./parameter-contracts.js";
8
5
  export type ScalarParameterValue = number | boolean | string;
9
6
  export type ParameterValue = ScalarParameterValue | readonly number[] | readonly string[] | FontSelection | ProfileValue;
10
7
  export type ParameterValues = Readonly<Record<string, ParameterValue>>;
@@ -38,16 +35,15 @@ export type GeneratorParams<D extends GeneratorDefinition> = {
38
35
  };
39
36
  /** The declared parameter ID union for a Generator definition. */
40
37
  export type GeneratorParamId<D extends GeneratorDefinition> = Extract<D["parameters"][number]["id"], string>;
41
- export type BaseParameterDefinition = Pick<NumericParameterDefinition, "id" | "label" | "description" | "group" | "unit" | "visibleWhen">;
42
38
  export type ParameterIssueSeverity = "error" | "warning";
43
39
  export interface ParameterIssue {
44
40
  readonly severity: ParameterIssueSeverity;
45
- readonly parameterId?: string;
41
+ readonly parameterId?: string | undefined;
46
42
  readonly message: string;
47
43
  }
48
44
  /** A validation issue whose optional parameter ID is tied to one definition. */
49
45
  export type GeneratorIssue<D extends GeneratorDefinition = GeneratorDefinition> = Omit<ParameterIssue, "parameterId"> & {
50
- readonly parameterId?: GeneratorParamId<D>;
46
+ readonly parameterId?: GeneratorParamId<D> | undefined;
51
47
  };
52
48
  export interface ParameterValidationResult {
53
49
  readonly isValid: boolean;
@@ -55,26 +51,38 @@ export interface ParameterValidationResult {
55
51
  readonly errors: readonly ParameterIssue[];
56
52
  readonly warnings: readonly ParameterIssue[];
57
53
  }
58
- /**
59
- * JSON-safe generator identity and parameter metadata.
60
- *
61
- * This is the contract used by forms, persistence, and package
62
- * manifests. Basic per-field constraints belong here; executable validation
63
- * deliberately does not.
64
- */
65
- export type GeneratorDefinition = ParsedGeneratorDefinition;
66
- /** Executable, generator-owned cross-parameter and geometry validation. */
67
- export type GeneratorValidator<D extends GeneratorDefinition = GeneratorDefinition> = (parameters: GeneratorParams<D>, services: GeneratorServices) => readonly GeneratorIssue<D>[];
54
+ export interface GeneratorPreset<D extends GeneratorDefinition = GeneratorDefinition> {
55
+ readonly id: string;
56
+ readonly label: string;
57
+ readonly description?: string | undefined;
58
+ readonly parameterValues: GeneratorParams<D>;
59
+ }
68
60
  export type Vec3 = readonly [number, number, number];
69
61
  export interface ModelBounds {
70
62
  readonly min: Vec3;
71
63
  readonly max: Vec3;
72
64
  }
73
65
  export interface ModelStats {
74
- readonly triangles?: number;
75
- readonly vertices?: number;
76
- readonly generationMs?: number;
77
- readonly volumeMm3?: number;
66
+ readonly triangles?: number | undefined;
67
+ readonly vertices?: number | undefined;
68
+ readonly generationMs?: number | undefined;
69
+ readonly volumeMm3?: number | undefined;
70
+ readonly timings?: ModelTimings | undefined;
71
+ }
72
+ /** Execution stages in milliseconds; total is elapsed time, not a sum of overlapping stages. */
73
+ export interface ModelTimings {
74
+ readonly compileMs: number;
75
+ readonly servicesMs: number;
76
+ readonly parametersMs: number;
77
+ readonly prepareMs: number;
78
+ readonly buildMs: number;
79
+ readonly finalizeMs: number;
80
+ readonly transferMs?: number | undefined;
81
+ /** Viewport geometry and initially enabled inspection preparation, before rendering. */
82
+ readonly viewportPrepareMs?: number | undefined;
83
+ /** Elapsed time from preparation completion through every part's first draw submission. */
84
+ readonly firstDrawMs?: number | undefined;
85
+ readonly totalMs: number;
78
86
  }
79
87
  /** Selects whether Studio preserves or locally improves final planar triangle connectivity. */
80
88
  export type MeshTopologyMode = "original" | "optimized";
@@ -82,88 +90,15 @@ export interface GeneratedPart {
82
90
  readonly id: string;
83
91
  readonly positions: Float32Array;
84
92
  readonly indices: Uint32Array;
85
- readonly normals?: Float32Array;
86
- readonly color?: string;
93
+ readonly color?: string | undefined;
87
94
  }
88
95
  export interface GeneratedModel {
96
+ /** Opaque execution identity captured by every exporter. */
97
+ readonly revisionId: string;
89
98
  readonly requestId: number;
90
99
  readonly parts: readonly GeneratedPart[];
91
100
  readonly bounds: ModelBounds;
92
- readonly stats?: ModelStats;
101
+ readonly stats?: ModelStats | undefined;
93
102
  readonly warnings: readonly ParameterIssue[];
94
103
  }
95
- export interface GenerateRequest {
96
- readonly type: "generate";
97
- readonly requestId: number;
98
- readonly generatorId: string;
99
- readonly meshTopologyMode: MeshTopologyMode;
100
- readonly runtime: GeneratorRuntimeReference;
101
- readonly parameters: ParameterValues;
102
- }
103
- export interface ValidateRequest {
104
- readonly type: "validate";
105
- readonly requestId: number;
106
- readonly generatorId: string;
107
- readonly runtime: GeneratorRuntimeReference;
108
- readonly parameters: ParameterValues;
109
- }
110
- export interface Export3mfRequest {
111
- /** Project appearance overrides keyed by semantic part ID; does not affect generation. */
112
- readonly partColors?: Readonly<Record<string, string>>;
113
- readonly type: "export-3mf";
114
- readonly requestId: number;
115
- readonly generatorId: string;
116
- readonly filename: string;
117
- readonly meshTopologyMode: MeshTopologyMode;
118
- readonly runtime: GeneratorRuntimeReference;
119
- readonly parameters: ParameterValues;
120
- }
121
- export interface ValidationSuccess {
122
- readonly type: "validation-success";
123
- readonly requestId: number;
124
- readonly validation: ParameterValidationResult;
125
- }
126
- export interface GenerationSuccess {
127
- readonly type: "generation-success";
128
- readonly requestId: number;
129
- readonly model: GeneratedModel;
130
- }
131
- export interface GenerationInvalid {
132
- readonly type: "generation-invalid";
133
- readonly requestId: number;
134
- readonly validation: ParameterValidationResult;
135
- }
136
- export interface ExportedFile {
137
- readonly bytes: ArrayBuffer;
138
- readonly filename: string;
139
- readonly mimeType: "model/3mf";
140
- }
141
- export interface ExportSuccess {
142
- readonly type: "export-success";
143
- readonly requestId: number;
144
- readonly file: ExportedFile;
145
- }
146
- export interface RuntimeError {
147
- readonly code: string;
148
- readonly message: string;
149
- readonly stack?: string;
150
- readonly recoverable?: boolean;
151
- }
152
- export interface GenerationError {
153
- readonly type: "generation-error";
154
- readonly requestId: number;
155
- readonly error: RuntimeError;
156
- }
157
- export interface ExportError {
158
- readonly type: "export-error";
159
- readonly requestId: number;
160
- readonly error: RuntimeError;
161
- }
162
- export interface ValidationError {
163
- readonly type: "validation-error";
164
- readonly requestId: number;
165
- readonly error: RuntimeError;
166
- }
167
- export type WorkerRequest = ValidateRequest | GenerateRequest | Export3mfRequest;
168
- export type WorkerResponse = ValidationSuccess | GenerationSuccess | GenerationInvalid | ExportSuccess | ValidationError | GenerationError | ExportError;
169
104
  //# sourceMappingURL=contracts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../src/contracts.ts"],"names":[],"mappings":"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"}
@@ -1,46 +1,40 @@
1
- import type { GeneratedPart, GeneratorDefinition, GeneratorParams, ParameterValidationResult } from "./contracts.js";
2
- import { type GeneratedPartsLimits } from "./generated-parts.js";
1
+ import type { GeneratorDefinition, GeneratorParams, ParameterValidationResult } from "./contracts.js";
3
2
  import type { GeneratorModule } from "./generator-module.js";
4
3
  import type { GeneratorServices } from "./generator-services.js";
5
4
  import type { PreparedParameters } from "./parameters.js";
6
- /** The canonical callback surface required to execute a Generator module. */
7
- export type GeneratorModuleCallbacks<D extends GeneratorDefinition = GeneratorDefinition, Context = unknown> = Pick<GeneratorModule<D, Context>, "validate" | "generate">;
8
- export interface ExecuteGeneratorOptions<D extends GeneratorDefinition, Context> {
5
+ import { type ParsedGeneratorModule } from "./parse-generator-module.js";
6
+ export interface PrepareGeneratorOptions<D extends GeneratorDefinition, P, Context, Output> {
9
7
  readonly definition: D;
10
8
  readonly parameters: Readonly<Record<string, unknown>>;
11
- readonly module: GeneratorModuleCallbacks<D, Context>;
12
- readonly context: Context;
9
+ /** Host-owned normalization reused after asynchronous service preparation. */
10
+ readonly parameterState?: PreparedParameters<D>;
11
+ readonly module: Pick<GeneratorModule<D, P, Context, Output>, "prepare" | "build"> | ParsedGeneratorModule<D, Context, Output>;
13
12
  readonly services: GeneratorServices;
14
- readonly limits?: Partial<GeneratedPartsLimits>;
15
13
  }
16
- export interface ExecutePreparedGeneratorOptions<D extends GeneratorDefinition, Context> {
17
- readonly definition: D;
18
- readonly prepared: PreparedParameters<D>;
19
- readonly module: GeneratorModuleCallbacks<D, Context>;
14
+ export interface ExecuteGeneratorOptions<D extends GeneratorDefinition, P, Context, Output> extends PrepareGeneratorOptions<D, P, Context, Output> {
20
15
  readonly context: Context;
21
- readonly services: GeneratorServices;
22
- readonly limits?: Partial<GeneratedPartsLimits>;
23
16
  }
24
17
  export interface GeneratorExecutionInvalid<D extends GeneratorDefinition = GeneratorDefinition> {
25
18
  readonly type: "invalid";
26
19
  readonly parameters: GeneratorParams<D>;
27
20
  readonly validation: ParameterValidationResult;
28
21
  }
29
- export interface GeneratorExecutionGenerated<D extends GeneratorDefinition> {
30
- readonly type: "generated";
22
+ export interface GeneratorExecutionPrepared<D extends GeneratorDefinition, Context, Output> {
23
+ readonly type: "prepared";
24
+ readonly parameters: GeneratorParams<D>;
25
+ readonly validation: ParameterValidationResult;
26
+ readonly build: (context: Context) => Output;
27
+ }
28
+ export interface GeneratorExecutionBuilt<D extends GeneratorDefinition, Output> {
29
+ readonly type: "built";
31
30
  readonly parameters: GeneratorParams<D>;
32
31
  readonly validation: ParameterValidationResult;
33
- readonly parts: readonly GeneratedPart[];
32
+ readonly output: Output;
34
33
  }
35
- export type GeneratorExecutionResult<D extends GeneratorDefinition> = GeneratorExecutionInvalid<D> | GeneratorExecutionGenerated<D>;
36
- /**
37
- * Executes a generator from an untrusted parameter record.
38
- *
39
- * Parameter schema failures stop before generator validation and generation. Generator callback
40
- * failures and malformed output are intentionally allowed to throw so hosts cannot mistake a
41
- * broken module for a valid generated model.
42
- */
43
- export declare function executeGenerator<const D extends GeneratorDefinition, Context>(options: ExecuteGeneratorOptions<D, Context>): GeneratorExecutionResult<D>;
44
- /** Executes an already-normalized parameter set after host services are prepared. */
45
- export declare function executePreparedGenerator<const D extends GeneratorDefinition, Context>(options: ExecutePreparedGeneratorOptions<D, Context>): GeneratorExecutionResult<D>;
34
+ export type GeneratorPreparationResult<D extends GeneratorDefinition, Context, Output> = GeneratorExecutionInvalid<D> | GeneratorExecutionPrepared<D, Context, Output>;
35
+ export type GeneratorExecutionResult<D extends GeneratorDefinition, Output> = GeneratorExecutionInvalid<D> | GeneratorExecutionBuilt<D, Output>;
36
+ /** Normalizes once, checks preparation, and captures its exact value in a one-use build closure. */
37
+ export declare function prepareGenerator<const D extends GeneratorDefinition, P, Context, Output>(options: PrepareGeneratorOptions<D, P, Context, Output>): GeneratorPreparationResult<D, Context, Output>;
38
+ /** Executes the callback pair; geometry finalization belongs to the owning host engine. */
39
+ export declare function executeGenerator<const D extends GeneratorDefinition, P, Context, Output>(options: ExecuteGeneratorOptions<D, P, Context, Output>): GeneratorExecutionResult<D, Output>;
46
40
  //# sourceMappingURL=execute-generator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"execute-generator.d.ts","sourceRoot":"","sources":["../src/execute-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,yBAAyB,EAC1B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAuB,KAAK,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACtF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,6EAA6E;AAC7E,MAAM,MAAM,wBAAwB,CAClC,CAAC,SAAS,mBAAmB,GAAG,mBAAmB,EACnD,OAAO,GAAG,OAAO,IACf,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC,CAAC;AAE/D,MAAM,WAAW,uBAAuB,CAAC,CAAC,SAAS,mBAAmB,EAAE,OAAO;IAC7E,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACtD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,+BAA+B,CAAC,CAAC,SAAS,mBAAmB,EAAE,OAAO;IACrF,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACtD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,yBAAyB,CAAC,CAAC,SAAS,mBAAmB,GAAG,mBAAmB;IAC5F,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAC;IACzB,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,yBAAyB,CAAC;CAChD;AAED,MAAM,WAAW,2BAA2B,CAAC,CAAC,SAAS,mBAAmB;IACxE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;IACxC,QAAQ,CAAC,UAAU,EAAE,yBAAyB,CAAC;IAC/C,QAAQ,CAAC,KAAK,EAAE,SAAS,aAAa,EAAE,CAAC;CAC1C;AAED,MAAM,MAAM,wBAAwB,CAAC,CAAC,SAAS,mBAAmB,IAChE,yBAAyB,CAAC,CAAC,CAAC,GAAG,2BAA2B,CAAC,CAAC,CAAC,CAAC;AAYhE;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,CAAC,CAAC,SAAS,mBAAmB,EAAE,OAAO,EAC3E,OAAO,EAAE,uBAAuB,CAAC,CAAC,EAAE,OAAO,CAAC,GAC3C,wBAAwB,CAAC,CAAC,CAAC,CAK7B;AAED,qFAAqF;AACrF,wBAAgB,wBAAwB,CAAC,KAAK,CAAC,CAAC,SAAS,mBAAmB,EAAE,OAAO,EACnF,OAAO,EAAE,+BAA+B,CAAC,CAAC,EAAE,OAAO,CAAC,GACnD,wBAAwB,CAAC,CAAC,CAAC,CAuB7B"}
1
+ {"version":3,"file":"execute-generator.d.ts","sourceRoot":"","sources":["../src/execute-generator.ts"],"names":[],"mappings":"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"}
@@ -1,41 +1,36 @@
1
- import { parseGeneratedParts } from "./generated-parts.js";
2
- import { aggregateParameterIssues, parseParameterIssues, prepareParameters } from "./parameters.js";
3
- function invalidResult(prepared) {
1
+ import { aggregateParameterIssues, prepareParameters } from "./parameters.js";
2
+ import { capturePreparation } from "./parse-generator-module.js";
3
+ /** Normalizes once, checks preparation, and captures its exact value in a one-use build closure. */
4
+ export function prepareGenerator(options) {
5
+ const { definition, module, services } = options;
6
+ const parameters = options.parameterState ?? prepareParameters(definition, options.parameters);
7
+ if (!parameters.validation.isValid) {
8
+ return Object.freeze({ type: "invalid", ...parameters });
9
+ }
10
+ const prepared = "build" in module
11
+ ? capturePreparation(definition, module.prepare(parameters.parameters, services), module.build)
12
+ : module.prepare(parameters.parameters, services);
13
+ const validation = aggregateParameterIssues(parameters.validation.issues, prepared.issues);
14
+ if (!prepared.ok || !validation.isValid) {
15
+ return Object.freeze({ type: "invalid", parameters: parameters.parameters, validation });
16
+ }
4
17
  return Object.freeze({
5
- type: "invalid",
6
- parameters: prepared.parameters,
7
- validation: prepared.validation,
18
+ type: "prepared",
19
+ parameters: parameters.parameters,
20
+ validation,
21
+ build: prepared.build,
8
22
  });
9
23
  }
10
- /**
11
- * Executes a generator from an untrusted parameter record.
12
- *
13
- * Parameter schema failures stop before generator validation and generation. Generator callback
14
- * failures and malformed output are intentionally allowed to throw so hosts cannot mistake a
15
- * broken module for a valid generated model.
16
- */
24
+ /** Executes the callback pair; geometry finalization belongs to the owning host engine. */
17
25
  export function executeGenerator(options) {
18
- return executePreparedGenerator({
19
- ...options,
20
- prepared: prepareParameters(options.definition, options.parameters),
21
- });
22
- }
23
- /** Executes an already-normalized parameter set after host services are prepared. */
24
- export function executePreparedGenerator(options) {
25
- const { definition, module, prepared, context, services, limits } = options;
26
- if (!prepared.validation.isValid)
27
- return invalidResult(prepared);
28
- const generatorIssues = parseParameterIssues(definition, module.validate(prepared.parameters, services));
29
- const validation = aggregateParameterIssues(prepared.validation.issues, generatorIssues);
30
- if (!validation.isValid) {
31
- return invalidResult({ parameters: prepared.parameters, validation });
32
- }
33
- const parts = parseGeneratedParts(module.generate(prepared.parameters, context, services), limits);
26
+ const prepared = prepareGenerator(options);
27
+ if (prepared.type === "invalid")
28
+ return prepared;
34
29
  return Object.freeze({
35
- type: "generated",
30
+ type: "built",
36
31
  parameters: prepared.parameters,
37
- validation,
38
- parts,
32
+ validation: prepared.validation,
33
+ output: prepared.build(options.context),
39
34
  });
40
35
  }
41
36
  //# sourceMappingURL=execute-generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"execute-generator.js","sourceRoot":"","sources":["../src/execute-generator.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,mBAAmB,EAA6B,MAAM,sBAAsB,CAAC;AAGtF,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AA2CpG,SAAS,aAAa,CACpB,QAA+B;IAE/B,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,SAAS;QACf,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,UAAU,EAAE,QAAQ,CAAC,UAAU;KAChC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAA4C;IAE5C,OAAO,wBAAwB,CAAC;QAC9B,GAAG,OAAO;QACV,QAAQ,EAAE,iBAAiB,CAAC,OAAO,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC;KACpE,CAAC,CAAC;AACL,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,wBAAwB,CACtC,OAAoD;IAEpD,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IAC5E,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO;QAAE,OAAO,aAAa,CAAC,QAAQ,CAAC,CAAC;IAEjE,MAAM,eAAe,GAAG,oBAAoB,CAC1C,UAAU,EACV,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAC/C,CAAC;IACF,MAAM,UAAU,GAAG,wBAAwB,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IACzF,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,OAAO,aAAa,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;IACxE,CAAC;IAED,MAAM,KAAK,GAAG,mBAAmB,CAC/B,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,EACvD,MAAM,CACP,CAAC;IACF,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,WAAW;QACjB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,UAAU;QACV,KAAK;KACN,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"execute-generator.js","sourceRoot":"","sources":["../src/execute-generator.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAE9E,OAAO,EAAE,kBAAkB,EAA8B,MAAM,6BAA6B,CAAC;AAgD7F,oGAAoG;AACpG,MAAM,UAAU,gBAAgB,CAC9B,OAAuD;IAEvD,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC;IACjD,MAAM,UAAU,GAAG,OAAO,CAAC,cAAc,IAAI,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/F,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACnC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,UAAU,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,QAAQ,GACZ,OAAO,IAAI,MAAM;QACf,CAAC,CAAC,kBAAkB,CAChB,UAAU,EACV,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,EAC/C,MAAM,CAAC,KAAK,CACb;QACH,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,wBAAwB,CAAC,UAAU,CAAC,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC3F,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxC,OAAO,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;IAC3F,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,UAAU;QAChB,UAAU,EAAE,UAAU,CAAC,UAAU;QACjC,UAAU;QACV,KAAK,EAAE,QAAQ,CAAC,KAAK;KACtB,CAAC,CAAC;AACL,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,gBAAgB,CAC9B,OAAuD;IAEvD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC3C,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,QAAQ,CAAC;IACjD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,OAAO;QACb,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;KACxC,CAAC,CAAC;AACL,CAAC"}
@@ -6,12 +6,11 @@ export interface GeneratedPartsLimits {
6
6
  readonly maxTriangles: number;
7
7
  readonly maxBytes: number;
8
8
  }
9
- export declare const DEFAULT_GENERATED_PARTS_LIMITS: GeneratedPartsLimits;
10
9
  /**
11
10
  * Strictly parses generated runtime output without copying transferable mesh buffers.
12
11
  *
13
12
  * This checks the renderer-neutral structure and aggregate resource limits. Geometric
14
13
  * validity, such as non-degenerate or closed topology, remains a Geometry concern.
15
14
  */
16
- export declare function parseGeneratedParts(value: unknown, limitOverrides?: Partial<GeneratedPartsLimits>): readonly GeneratedPart[];
15
+ export declare function parseGeneratedParts(value: unknown, limitOverrides: GeneratedPartsLimits): readonly GeneratedPart[];
17
16
  //# sourceMappingURL=generated-parts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generated-parts.d.ts","sourceRoot":"","sources":["../src/generated-parts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAOpD,wFAAwF;AACxF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,8BAA8B,EAAE,oBAK3C,CAAC;AAwLH;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,EACd,cAAc,GAAE,OAAO,CAAC,oBAAoB,CAAM,GACjD,SAAS,aAAa,EAAE,CA0C1B"}
1
+ {"version":3,"file":"generated-parts.d.ts","sourceRoot":"","sources":["../src/generated-parts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAOpD,wFAAwF;AACxF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAwJD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,oBAAoB,GACnC,SAAS,aAAa,EAAE,CA0C1B"}
@@ -1,13 +1,7 @@
1
- const GENERATED_PART_FIELDS = new Set(["id", "positions", "indices", "normals", "color"]);
1
+ const GENERATED_PART_FIELDS = new Set(["id", "positions", "indices", "color"]);
2
2
  const GENERATED_PART_ID_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
3
3
  const GENERATED_PART_COLOR_PATTERN = /^#[\da-f]{6}$/i;
4
4
  const MAX_GENERATED_PART_ID_LENGTH = 64;
5
- export const DEFAULT_GENERATED_PARTS_LIMITS = Object.freeze({
6
- maxParts: 64,
7
- maxVertices: 1_000_000,
8
- maxTriangles: 2_000_000,
9
- maxBytes: 96 * 1024 * 1024,
10
- });
11
5
  function isRecord(value) {
12
6
  return typeof value === "object" && value !== null && !Array.isArray(value);
13
7
  }
@@ -29,10 +23,10 @@ function limitMessage(limit, singular, plural = `${singular}s`) {
29
23
  }
30
24
  function resolveLimits(overrides) {
31
25
  return {
32
- maxParts: positiveInteger(overrides.maxParts ?? DEFAULT_GENERATED_PARTS_LIMITS.maxParts, "limits.maxParts"),
33
- maxVertices: positiveInteger(overrides.maxVertices ?? DEFAULT_GENERATED_PARTS_LIMITS.maxVertices, "limits.maxVertices"),
34
- maxTriangles: positiveInteger(overrides.maxTriangles ?? DEFAULT_GENERATED_PARTS_LIMITS.maxTriangles, "limits.maxTriangles"),
35
- maxBytes: positiveInteger(overrides.maxBytes ?? DEFAULT_GENERATED_PARTS_LIMITS.maxBytes, "limits.maxBytes"),
26
+ maxParts: positiveInteger(overrides.maxParts, "limits.maxParts"),
27
+ maxVertices: positiveInteger(overrides.maxVertices, "limits.maxVertices"),
28
+ maxTriangles: positiveInteger(overrides.maxTriangles, "limits.maxTriangles"),
29
+ maxBytes: positiveInteger(overrides.maxBytes, "limits.maxBytes"),
36
30
  };
37
31
  }
38
32
  function parsePart(value, index, limits, totals) {
@@ -64,16 +58,6 @@ function parsePart(value, index, limits, totals) {
64
58
  if (indices.length === 0 || indices.length % 3 !== 0) {
65
59
  throw new TypeError(`${path}.indices must contain at least one complete triangle.`);
66
60
  }
67
- const normalsValue = Object.hasOwn(value, "normals")
68
- ? ownDataValue(value, "normals", path)
69
- : undefined;
70
- if (normalsValue !== undefined && !(normalsValue instanceof Float32Array)) {
71
- throw new TypeError(`${path}.normals must be a Float32Array when provided.`);
72
- }
73
- const normals = normalsValue;
74
- if (normals !== undefined && normals.length !== positions.length) {
75
- throw new TypeError(`${path}.normals must contain one XYZ value per position vertex.`);
76
- }
77
61
  const colorValue = Object.hasOwn(value, "color") ? ownDataValue(value, "color", path) : undefined;
78
62
  let color;
79
63
  if (colorValue === undefined) {
@@ -87,7 +71,7 @@ function parsePart(value, index, limits, totals) {
87
71
  }
88
72
  const vertexCount = positions.length / 3;
89
73
  const triangleCount = indices.length / 3;
90
- const views = normals === undefined ? [positions, indices] : [positions, indices, normals];
74
+ const views = [positions, indices];
91
75
  const buffers = new Set();
92
76
  for (const view of views) {
93
77
  if (!(view.buffer instanceof ArrayBuffer)) {
@@ -111,13 +95,6 @@ function parsePart(value, index, limits, totals) {
111
95
  throw new TypeError(`${path}.positions[${coordinate}] must be finite.`);
112
96
  }
113
97
  }
114
- if (normals !== undefined) {
115
- for (let coordinate = 0; coordinate < normals.length; coordinate += 1) {
116
- if (!Number.isFinite(normals[coordinate])) {
117
- throw new TypeError(`${path}.normals[${coordinate}] must be finite.`);
118
- }
119
- }
120
- }
121
98
  for (let offset = 0; offset < indices.length; offset += 1) {
122
99
  if (indices[offset] >= vertexCount) {
123
100
  throw new TypeError(`${path}.indices[${offset}] must reference an existing vertex.`);
@@ -127,7 +104,6 @@ function parsePart(value, index, limits, totals) {
127
104
  id,
128
105
  positions,
129
106
  indices,
130
- ...(normals === undefined ? {} : { normals }),
131
107
  ...(color === undefined ? {} : { color }),
132
108
  });
133
109
  return {
@@ -144,7 +120,7 @@ function parsePart(value, index, limits, totals) {
144
120
  * This checks the renderer-neutral structure and aggregate resource limits. Geometric
145
121
  * validity, such as non-degenerate or closed topology, remains a Geometry concern.
146
122
  */
147
- export function parseGeneratedParts(value, limitOverrides = {}) {
123
+ export function parseGeneratedParts(value, limitOverrides) {
148
124
  const limits = resolveLimits(limitOverrides);
149
125
  if (!Array.isArray(value)) {
150
126
  throw new TypeError("Generated output must be an array of parts.");
@@ -1 +1 @@
1
- {"version":3,"file":"generated-parts.js","sourceRoot":"","sources":["../src/generated-parts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generated-parts.js","sourceRoot":"","sources":["../src/generated-parts.ts"],"names":[],"mappings":"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"}
@@ -1,49 +1,27 @@
1
- import type { GeneratedPart, GeneratorDefinition, GeneratorParams, GeneratorValidator, ParameterIssue, ParameterValues } from "./contracts.js";
1
+ import type { GeneratorDefinition, GeneratorIssue, GeneratorParams } from "./contracts.js";
2
2
  import { GENERATOR_PACKAGE_FORMAT_VERSION } from "./generator-package/constants.js";
3
3
  import type { GeneratorServices } from "./generator-services.js";
4
- type CanonicalGenerate<D extends GeneratorDefinition, Context> = (parameters: GeneratorParams<D>, context: Context, services: GeneratorServices) => readonly GeneratedPart[];
5
- type StrictGenerate<Context> = (parameters: ParameterValues, context: Context, services: GeneratorServices) => readonly GeneratedPart[];
6
- interface GeneratorModuleIdentity<D extends GeneratorDefinition> {
4
+ /** Preparation stays inside one request, before the host acquires modeling resources. */
5
+ export type Preparation<D extends GeneratorDefinition, P> = {
6
+ readonly ok: true;
7
+ readonly value: P;
8
+ readonly issues: readonly GeneratorIssue<D>[];
9
+ } | {
10
+ readonly ok: false;
11
+ readonly issues: readonly GeneratorIssue<D>[];
12
+ };
13
+ export interface GeneratorModule<D extends GeneratorDefinition = GeneratorDefinition, P = unknown, Context = unknown, Output = unknown> {
7
14
  readonly formatVersion: typeof GENERATOR_PACKAGE_FORMAT_VERSION;
8
15
  readonly generatorId: D["id"];
9
16
  readonly version: D["version"];
17
+ readonly prepare: (parameters: GeneratorParams<D>, services: GeneratorServices) => Preparation<D, P>;
18
+ readonly build: (prepared: P, model: Context) => Output;
10
19
  }
11
- /** The exact five-export module assembled from strongly typed author callbacks. */
12
- export interface GeneratorModule<D extends GeneratorDefinition = GeneratorDefinition, Context = unknown> extends GeneratorModuleIdentity<D> {
13
- readonly validate: GeneratorValidator<D>;
14
- readonly generate: CanonicalGenerate<D, Context>;
15
- }
16
- /** A host-owned module lane that strictly decodes parameter maps before invocation. */
17
- export interface StrictGeneratorModule<D extends GeneratorDefinition = GeneratorDefinition, Context = unknown> extends GeneratorModuleIdentity<D> {
18
- readonly validate: (parameters: ParameterValues, services: GeneratorServices) => readonly ParameterIssue[];
19
- readonly generate: StrictGenerate<Context>;
20
- }
21
- /** The canonical and strict invocation lanes captured from an evaluated module. */
22
- export interface ParsedGeneratorModule<D extends GeneratorDefinition = GeneratorDefinition, Context = unknown> {
23
- readonly canonical: GeneratorModule<D, Context>;
24
- readonly strict: StrictGeneratorModule<D, Context>;
25
- }
26
- export interface GeneratorModuleOptions<D extends GeneratorDefinition, Context> {
20
+ export interface GeneratorModuleOptions<D extends GeneratorDefinition, P, Context, Output> {
27
21
  readonly definition: D;
28
- readonly validate: GeneratorValidator<D>;
29
- readonly generate: CanonicalGenerate<D, Context>;
22
+ readonly prepare: (parameters: GeneratorParams<NoInfer<D>>, services: GeneratorServices) => Preparation<NoInfer<D>, P>;
23
+ readonly build: (prepared: P, model: Context) => Output;
30
24
  }
31
- /**
32
- * Creates the complete compiled-module surface from one typed definition.
33
- *
34
- * The returned callbacks accept canonical parameters so this authoring helper stays small in
35
- * self-contained release bundles. Hosts use `parseGeneratorModule()` at untrusted boundaries.
36
- */
37
- export declare function defineGeneratorModule<const D extends GeneratorDefinition, Context>({ definition, generate, validate, }: GeneratorModuleOptions<D, Context>): GeneratorModule<D, Context>;
38
- /** Checks an evaluated ESM namespace against its authoritative manifest definition. */
39
- export declare function isGeneratorModule<const D extends GeneratorDefinition, Context = unknown>(value: unknown, definition: D): value is GeneratorModule<D, Context>;
40
- /**
41
- * Parses an evaluated ESM namespace and snapshots both invocation lanes.
42
- *
43
- * The canonical lane is for host-prepared `GeneratorParams`; the strict lane is the only lane that
44
- * accepts boundary `ParameterValues` and decodes them before invoking evaluated code. Function
45
- * result values remain host-validated because JavaScript cannot prove them without execution.
46
- */
47
- export declare function parseGeneratorModule<const D extends GeneratorDefinition, Context = unknown>(value: unknown, definition: D): ParsedGeneratorModule<D, Context>;
48
- export {};
25
+ /** Codec-free authoring helper. Hosts check metadata and callback results. */
26
+ export declare function defineGeneratorModule<const D extends GeneratorDefinition, P, Context, Output>({ definition, prepare, build, }: GeneratorModuleOptions<D, P, Context, Output>): GeneratorModule<D, P, Context, Output>;
49
27
  //# sourceMappingURL=generator-module.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generator-module.d.ts","sourceRoot":"","sources":["../src/generator-module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator-module.d.ts","sourceRoot":"","sources":["../src/generator-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AACpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAEjE,yFAAyF;AACzF,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,mBAAmB,EAAE,CAAC,IACpD;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,CAAA;CAAE,GACvF;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,CAAA;CAAE,CAAC;AAE1E,MAAM,WAAW,eAAe,CAC9B,CAAC,SAAS,mBAAmB,GAAG,mBAAmB,EACnD,CAAC,GAAG,OAAO,EACX,OAAO,GAAG,OAAO,EACjB,MAAM,GAAG,OAAO;IAEhB,QAAQ,CAAC,aAAa,EAAE,OAAO,gCAAgC,CAAC;IAChE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,CAChB,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,EAC9B,QAAQ,EAAE,iBAAiB,KACxB,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;CACzD;AAED,MAAM,WAAW,sBAAsB,CAAC,CAAC,SAAS,mBAAmB,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM;IACvF,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,CAChB,UAAU,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EACvC,QAAQ,EAAE,iBAAiB,KACxB,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChC,QAAQ,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,KAAK,MAAM,CAAC;CACzD;AAED,8EAA8E;AAC9E,wBAAgB,qBAAqB,CAAC,KAAK,CAAC,CAAC,SAAS,mBAAmB,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,EAC7F,UAAU,EACV,OAAO,EACP,KAAK,GACN,EAAE,sBAAsB,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CAQxF"}