@metamesh/generator-sdk 0.3.0 → 0.4.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/CHANGELOG.md CHANGED
@@ -1,5 +1,21 @@
1
1
  # @metamesh/generator-sdk
2
2
 
3
+ ## 0.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - ad3bb49: Strengthen generator geometry with correct concave sweep caps, bounded region aggregation,
8
+ consistent finite input checks, protected copied-mesh scope exits, and shared primitive/extrusion
9
+ sampling. Add scoped hull, Minkowski sum, projection, slicing, and region revolution.
10
+
11
+ Compiled `MeshPart` now exposes `{ id, positions, indices, color? }`, directly compatible with SDK
12
+ `GeneratedPart`. Pass explicit `{ degrees }` or `{ radians }` to `rotationTransform3`, and rounded
13
+ rectangle sampling options as `{ segmentsPerCorner }` or `{ resolution }`.
14
+
15
+ Add `definePreparedGeneratorModule` for bounded, one-use validation/generation preparation while
16
+ preserving the five format-1 module exports. Authored `/v1` keeps its existing signatures and shares
17
+ the pure validation and sampling implementation with compiled modeling.
18
+
3
19
  ## 0.3.0
4
20
 
5
21
  ### Minor Changes
package/README.md CHANGED
@@ -22,6 +22,10 @@ normalization, structured validation, runtime envelopes, normalized generated-mo
22
22
  serializable catalog/package/install contracts. Project persistence belongs to Studio;
23
23
  release-state transitions belong to trusted database/tooling boundaries.
24
24
 
25
+ The optional `Export3mfRequest.partColors` map carries Project color overrides keyed by semantic
26
+ part ID. Studio validates and applies it during export; it does not enter Generator parameters or
27
+ change package generation contracts. Omitted overrides preserve generated colors.
28
+
25
29
  Zod is its only runtime dependency and is used at untrusted package-data boundaries. The package
26
30
  root owns exact exports and its strict schemas own accepted shapes. Generator package delivery
27
31
  remains a separate host responsibility.
@@ -39,10 +43,8 @@ Given a Generator `definition` and untrusted `persistedValues`:
39
43
  ```ts
40
44
  import {
41
45
  createParamCodec,
42
- decodeParameterState,
43
46
  defineGenerator,
44
47
  EMPTY_SVG_PARAMETER_DEFAULT,
45
- encodeParameterState,
46
48
  prepareParameters,
47
49
  type GeneratorParams,
48
50
  } from "@metamesh/generator-sdk";
@@ -52,20 +54,14 @@ type Parameters = GeneratorParams<typeof definition>;
52
54
 
53
55
  const { parameters, validation } = prepareParameters(definition, persistedValues);
54
56
  const strictParameters = createParamCodec(definition).parse(workerValues);
55
- const query = encodeParameterState(definition, parameters);
56
- const restored = decodeParameterState(definition, query);
57
57
  ```
58
58
 
59
59
  Normalization drops unknown parameter-value keys, fills missing or invalid values from each
60
60
  parameter's declared `default`, clamps numbers, and returns a fresh frozen map. Strict codecs instead
61
61
  reject missing, unknown, invalid, or noncanonical values and return cloned frozen arrays.
62
62
  `prepareParameters()` normalizes once and returns that same canonical map with the combined schema
63
- and Generator-owned validation result. Definitions accept only canonical parameter types. URL
64
- state is versioned and only includes known non-default values.
65
- Malformed, obsolete, or invalid URL values safely fall back to defaults. SVG runtime values remain
66
- standard strings, are limited to 256 KiB each and 512 KiB per normalized project, and are omitted
67
- from parameter URLs. URL scalars overlay a host-supplied persisted base so device-local SVG values
68
- are never erased by a shared URL.
63
+ and Generator-owned validation result. Definitions accept only canonical parameter types. SVG runtime values remain
64
+ standard strings and are limited to 256 KiB each and 512 KiB per normalized project.
69
65
 
70
66
  ```ts
71
67
  const profile = {
@@ -84,8 +80,7 @@ option values.
84
80
 
85
81
  Array definitions declare `items.type` as `number` or `string`. They may constrain `minItems` and
86
82
  `maxItems`; number items may also declare `min`, `max`, `step`, and `unit`. Array-valued controls are
87
- cloned at normalization and persistence boundaries, and URL state encodes them as deterministic
88
- JSON without changing scalar URL encoding. Conditions may compare scalar controls or test
83
+ cloned at normalization and persistence boundaries. Conditions may compare scalar controls or test
89
84
  `choice-set` membership; arbitrary arrays cannot be condition operands.
90
85
 
91
86
  ```ts
@@ -104,17 +99,17 @@ optional `collapsed` default. Parameters without a group render in Studio's Gene
104
99
 
105
100
  Font parameters use a `FontSelection` default with immutable `faceId`, SHA-256 `revision`, and
106
101
  integer `weight`. Structural validation does not require the font to be available locally. Valid
107
- unavailable references survive codecs, presets, URL state, and persistence. Studio prepares the
102
+ unavailable references survive codecs, presets, and persistence. Studio prepares the
108
103
  declared fonts before executable validation and generation. It supplies `GeneratorServices` as the
109
104
  second validator argument and third generation argument. `services.text.layout(text, { font,
110
105
  fontSize })` returns positioned vector curves and matching metrics in millimetres. Geometry's
111
106
  `withTextFonts(services.text, callback)` binds these services for `textContours()` and
112
107
  `textMetrics()` in compiled code. The SDK and Geometry keep their small structural text contracts
113
108
  compatible without importing each other's runtime. Font parameters and prepared text services require
114
- runtime `1.2.0` or later. Package format remains 1. See [Studio fonts](https://github.com/JasonKoolman/metamesh/blob/main/docs/studio-fonts.md).
109
+ runtime `1.2.0` or later. Package format remains 1.
115
110
 
116
111
  `GeneratorDefinition` is callback-free, JSON-safe metadata used by forms, manifests, persistence,
117
- normalization, and URL state. Its `min`, `max`, options, and other field constraints are portable
112
+ and normalization. Its `min`, `max`, options, and other field constraints are portable
118
113
  data. `defineGenerator()` preserves literal IDs and select options so `GeneratorParams`,
119
114
  `GeneratorParamId`, `GeneratorIssue`, validators, defaults, and presets derive from the definition.
120
115
  Keep derived-value, cross-parameter, warning, and geometry checks in a separate TypeScript
@@ -177,12 +172,34 @@ Hosts always invoke modules with `validate(parameters, services)` and
177
172
  font-dependent hosts prepare and pass the selected fonts before executable validation. Author
178
173
  callbacks may omit arguments they do not use.
179
174
 
175
+ Generators with expensive SVG import, font layout, encoding, or dimension resolution may use
176
+ `definePreparedGeneratorModule({ definition, prepare, generate })`. `prepare(parameters, services)`
177
+ returns `{ ok: true, value, issues }` or `{ ok: false, issues }`, with definition-derived structured
178
+ issues. Successful results may contain warnings but no errors; invalid results require an error.
179
+ The model callback receives `generate(parameters, context, services, preparedValue)`. The returned
180
+ module still exports exactly the same five fields and uses the unchanged host call signatures.
181
+
182
+ Preparation contains only finite plain objects, arrays, and scalar geometry or measurement data;
183
+ the helper checks and freezes that graph before use. Functions, accessors, cycles, promises,
184
+ class instances, typed arrays, and live WASM objects are rejected. Data traversal is bounded to
185
+ 1,000,000 values and 64 levels. The helper retains at most one successful validation result for the
186
+ exact deeply frozen parameter object and exact frozen services/provider objects, consumes it before the next
187
+ generation, and clears it on any later validation, generation, or failure. Different objects,
188
+ mutable parameters or services, and direct generation prepare afresh. This is execution-local reuse, not a
189
+ cross-execution or content cache; generators still own geometry complexity limits.
190
+
180
191
  Call `parseGeneratedParts()` on executable output before downstream mesh work. It accepts only
181
192
  non-empty arrays of uniquely identified parts backed by transferable `Float32Array` and
182
193
  `Uint32Array` storage, checks finite coordinates and valid indices, normalizes six-digit hex colors
183
194
  to lowercase, and enforces aggregate part, vertex, triangle, and backing-buffer byte limits. Closed-solid,
184
195
  manufacturing, and reconstruction checks remain Geometry or Generator responsibilities.
185
196
 
197
+ Hosts should use `executeGenerator()` as the single synchronous execution seam. It normalizes raw
198
+ values, runs schema and Generator validation, parses generated output, and returns either an explicit
199
+ `invalid` result or a `generated` result. Hosts that prepare asynchronous services first can pass the
200
+ `PreparedParameters` result to `executePreparedGenerator()`; malformed executable output remains a
201
+ thrown runtime failure.
202
+
186
203
  ## Worker boundary
187
204
 
188
205
  `ValidateRequest`, `GenerateRequest`, `Export3mfRequest`, and the `WorkerResponse` union carry
@@ -55,7 +55,7 @@ export interface ParameterValidationResult {
55
55
  /**
56
56
  * JSON-safe generator identity and parameter metadata.
57
57
  *
58
- * This is the contract used by forms, persistence, URL state, and package
58
+ * This is the contract used by forms, persistence, and package
59
59
  * manifests. Basic per-field constraints belong here; executable validation
60
60
  * deliberately does not.
61
61
  */
@@ -105,6 +105,8 @@ export interface ValidateRequest {
105
105
  readonly parameters: ParameterValues;
106
106
  }
107
107
  export interface Export3mfRequest {
108
+ /** Project appearance overrides keyed by semantic part ID; does not affect generation. */
109
+ readonly partColors?: Readonly<Record<string, string>>;
108
110
  readonly type: "export-3mf";
109
111
  readonly requestId: number;
110
112
  readonly generatorId: string;
@@ -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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"}
@@ -0,0 +1,46 @@
1
+ import type { GeneratedPart, GeneratorDefinition, GeneratorParams, ParameterValidationResult } from "./contracts.js";
2
+ import { type GeneratedPartsLimits } from "./generated-parts.js";
3
+ import type { GeneratorModule } from "./generator-module.js";
4
+ import type { GeneratorServices } from "./generator-services.js";
5
+ 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> {
9
+ readonly definition: D;
10
+ readonly parameters: Readonly<Record<string, unknown>>;
11
+ readonly module: GeneratorModuleCallbacks<D, Context>;
12
+ readonly context: Context;
13
+ readonly services: GeneratorServices;
14
+ readonly limits?: Partial<GeneratedPartsLimits>;
15
+ }
16
+ export interface ExecutePreparedGeneratorOptions<D extends GeneratorDefinition, Context> {
17
+ readonly definition: D;
18
+ readonly prepared: PreparedParameters<D>;
19
+ readonly module: GeneratorModuleCallbacks<D, Context>;
20
+ readonly context: Context;
21
+ readonly services: GeneratorServices;
22
+ readonly limits?: Partial<GeneratedPartsLimits>;
23
+ }
24
+ export interface GeneratorExecutionInvalid<D extends GeneratorDefinition = GeneratorDefinition> {
25
+ readonly type: "invalid";
26
+ readonly parameters: GeneratorParams<D>;
27
+ readonly validation: ParameterValidationResult;
28
+ }
29
+ export interface GeneratorExecutionGenerated<D extends GeneratorDefinition> {
30
+ readonly type: "generated";
31
+ readonly parameters: GeneratorParams<D>;
32
+ readonly validation: ParameterValidationResult;
33
+ readonly parts: readonly GeneratedPart[];
34
+ }
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>;
46
+ //# sourceMappingURL=execute-generator.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,41 @@
1
+ import { parseGeneratedParts } from "./generated-parts.js";
2
+ import { aggregateParameterIssues, parseParameterIssues, prepareParameters } from "./parameters.js";
3
+ function invalidResult(prepared) {
4
+ return Object.freeze({
5
+ type: "invalid",
6
+ parameters: prepared.parameters,
7
+ validation: prepared.validation,
8
+ });
9
+ }
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
+ */
17
+ 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);
34
+ return Object.freeze({
35
+ type: "generated",
36
+ parameters: prepared.parameters,
37
+ validation,
38
+ parts,
39
+ });
40
+ }
41
+ //# sourceMappingURL=execute-generator.js.map
@@ -0,0 +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"}
package/dist/index.d.ts CHANGED
@@ -5,11 +5,14 @@ export type { GeneratorServices, GeneratorTextLayout, GeneratorTextMetrics, Gene
5
5
  export type { ConditionExpression } from "./conditions.js";
6
6
  export { DEFAULT_GENERATED_PARTS_LIMITS, parseGeneratedParts } from "./generated-parts.js";
7
7
  export type { GeneratedPartsLimits } from "./generated-parts.js";
8
+ export { executeGenerator, executePreparedGenerator } from "./execute-generator.js";
9
+ export type { ExecuteGeneratorOptions, ExecutePreparedGeneratorOptions, GeneratorExecutionGenerated, GeneratorExecutionInvalid, GeneratorExecutionResult, GeneratorModuleCallbacks, } from "./execute-generator.js";
8
10
  export { defineGeneratorModule, isGeneratorModule, parseGeneratorModule, } from "./generator-module.js";
9
11
  export type { GeneratorModule, GeneratorModuleOptions, ParsedGeneratorModule, StrictGeneratorModule, } from "./generator-module.js";
12
+ export { definePreparedGeneratorModule } from "./prepared-generator-module.js";
13
+ export type { GeneratorPreparation, PreparedGeneratorModuleOptions, } from "./prepared-generator-module.js";
10
14
  export { aggregateParameterIssues, createParamCodec, defineGenerator, definePresets, defineValidator, EMPTY_SVG_PARAMETER_DEFAULT, getDefaultParameters, MAX_PARAMETER_ISSUE_MESSAGE_LENGTH, MAX_PARAMETER_ISSUES, MAX_PROJECT_SVG_PARAMETER_BYTES, MAX_SVG_PARAMETER_BYTES, normalizeParameters, ParamDecodeError, parameterValueEquals, parseParameterIssues, prepareParameters, svgParameterBytes, validateParameters, } from "./parameters.js";
11
15
  export type { ParamCodec, ParamDecodeCode, ParamDecodeIssue, ParamParseResult, PreparedParameters, } from "./parameters.js";
12
- export { decodeParameterState, encodeParameterState, PARAMETER_URL_VERSION } from "./url-state.js";
13
16
  export type { SourceVisibility } from "./source-visibility.js";
14
17
  export { compareSemanticVersions, GENERATOR_PACKAGE_FORMAT_VERSION, GeneratorPackageValidationError, isRuntimeCompatible, MAX_GENERATOR_PACKAGE_BYTES, METAMESH_RUNTIME_VERSION, parseGeneratorDescriptor, parseGeneratorPackageManifest, parseGeneratorDefinition, validateGeneratorPresets, } from "./generator-packages.js";
15
18
  export type { GeneratorAccess, GeneratorDescriptor, GeneratorPackageManifest, GeneratorPackageSource, GeneratorPreset, GeneratorRuntimeReference, InstalledGenerator, } from "./generator-packages.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AACxE,YAAY,EACV,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,8BAA8B,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3F,YAAY,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,eAAe,EACf,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,eAAe,EACf,2BAA2B,EAC3B,oBAAoB,EACpB,kCAAkC,EAClC,oBAAoB,EACpB,+BAA+B,EAC/B,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACnG,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EACL,uBAAuB,EACvB,gCAAgC,EAChC,+BAA+B,EAC/B,mBAAmB,EACnB,2BAA2B,EAC3B,wBAAwB,EACxB,wBAAwB,EACxB,6BAA6B,EAC7B,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,eAAe,EACf,mBAAmB,EACnB,wBAAwB,EACxB,sBAAsB,EACtB,eAAe,EACf,yBAAyB,EACzB,kBAAkB,GACnB,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,uBAAuB,EACvB,uBAAuB,EACvB,wBAAwB,EACxB,0BAA0B,EAC1B,4BAA4B,EAC5B,wBAAwB,EACxB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,aAAa,EACb,cAAc,EACd,aAAa,EACb,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,gBAAgB,EAChB,WAAW,EACX,UAAU,EACV,yBAAyB,EACzB,8BAA8B,EAC9B,yBAAyB,EACzB,0BAA0B,EAC1B,mBAAmB,EACnB,cAAc,EACd,cAAc,EACd,sBAAsB,EACtB,yBAAyB,EACzB,cAAc,EACd,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACZ,yBAAyB,EACzB,IAAI,EACJ,uBAAuB,EACvB,yBAAyB,EACzB,8BAA8B,EAC9B,sBAAsB,EACtB,yBAAyB,EACzB,aAAa,EACb,cAAc,EACd,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,8 +2,9 @@ export { evaluateCondition } from "./conditions.js";
2
2
  export { isFontSelection } from "./fonts.js";
3
3
  export { UNPREPARED_GENERATOR_SERVICES } from "./generator-services.js";
4
4
  export { DEFAULT_GENERATED_PARTS_LIMITS, parseGeneratedParts } from "./generated-parts.js";
5
+ export { executeGenerator, executePreparedGenerator } from "./execute-generator.js";
5
6
  export { defineGeneratorModule, isGeneratorModule, parseGeneratorModule, } from "./generator-module.js";
7
+ export { definePreparedGeneratorModule } from "./prepared-generator-module.js";
6
8
  export { aggregateParameterIssues, createParamCodec, defineGenerator, definePresets, defineValidator, EMPTY_SVG_PARAMETER_DEFAULT, getDefaultParameters, MAX_PARAMETER_ISSUE_MESSAGE_LENGTH, MAX_PARAMETER_ISSUES, MAX_PROJECT_SVG_PARAMETER_BYTES, MAX_SVG_PARAMETER_BYTES, normalizeParameters, ParamDecodeError, parameterValueEquals, parseParameterIssues, prepareParameters, svgParameterBytes, validateParameters, } from "./parameters.js";
7
- export { decodeParameterState, encodeParameterState, PARAMETER_URL_VERSION } from "./url-state.js";
8
9
  export { compareSemanticVersions, GENERATOR_PACKAGE_FORMAT_VERSION, GeneratorPackageValidationError, isRuntimeCompatible, MAX_GENERATOR_PACKAGE_BYTES, METAMESH_RUNTIME_VERSION, parseGeneratorDescriptor, parseGeneratorPackageManifest, parseGeneratorDefinition, validateGeneratorPresets, } from "./generator-packages.js";
9
10
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAsB,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAQxE,OAAO,EAAE,8BAA8B,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3F,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,eAAe,EACf,2BAA2B,EAC3B,oBAAoB,EACpB,kCAAkC,EAClC,oBAAoB,EACpB,+BAA+B,EAC/B,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AAQzB,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEnG,OAAO,EACL,uBAAuB,EACvB,gCAAgC,EAChC,+BAA+B,EAC/B,mBAAmB,EACnB,2BAA2B,EAC3B,wBAAwB,EACxB,wBAAwB,EACxB,6BAA6B,EAC7B,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAsB,MAAM,YAAY,CAAC;AACjE,OAAO,EAAE,6BAA6B,EAAE,MAAM,yBAAyB,CAAC;AAQxE,OAAO,EAAE,8BAA8B,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3F,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AASpF,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EAAE,6BAA6B,EAAE,MAAM,gCAAgC,CAAC;AAK/E,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,eAAe,EACf,2BAA2B,EAC3B,oBAAoB,EACpB,kCAAkC,EAClC,oBAAoB,EACpB,+BAA+B,EAC/B,uBAAuB,EACvB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,iBAAiB,CAAC;AASzB,OAAO,EACL,uBAAuB,EACvB,gCAAgC,EAChC,+BAA+B,EAC/B,mBAAmB,EACnB,2BAA2B,EAC3B,wBAAwB,EACxB,wBAAwB,EACxB,6BAA6B,EAC7B,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,24 @@
1
+ import type { GeneratedPart, GeneratorDefinition, GeneratorIssue, GeneratorParams } from "./contracts.js";
2
+ import { type GeneratorModule } from "./generator-module.js";
3
+ import type { GeneratorServices } from "./generator-services.js";
4
+ /** Successful preparation contains plain, immutable measurements and geometry data. */
5
+ export type GeneratorPreparation<D extends GeneratorDefinition, Prepared> = {
6
+ readonly ok: true;
7
+ readonly value: Readonly<Prepared>;
8
+ readonly issues: readonly GeneratorIssue<D>[];
9
+ } | {
10
+ readonly ok: false;
11
+ readonly issues: readonly GeneratorIssue<D>[];
12
+ };
13
+ export interface PreparedGeneratorModuleOptions<D extends GeneratorDefinition, Context, Prepared> {
14
+ readonly definition: D;
15
+ readonly prepare: (parameters: GeneratorParams<D>, services: GeneratorServices) => GeneratorPreparation<D, Prepared>;
16
+ readonly generate: (parameters: GeneratorParams<D>, context: Context, services: GeneratorServices, prepared: Readonly<Prepared>) => readonly GeneratedPart[];
17
+ }
18
+ /**
19
+ * Shares successful preparation between validation and the next generation of the exact frozen
20
+ * parameters and services. The single pending result is consumed before generation, including
21
+ * failed generation; direct calls prepare afresh. Returned modules retain the five format-1 exports.
22
+ */
23
+ export declare function definePreparedGeneratorModule<const D extends GeneratorDefinition, Context, Prepared>({ definition, prepare, generate, }: PreparedGeneratorModuleOptions<D, Context, Prepared>): GeneratorModule<D, Context>;
24
+ //# sourceMappingURL=prepared-generator-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepared-generator-module.d.ts","sourceRoot":"","sources":["../src/prepared-generator-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,eAAe,EAChB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAyB,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAGjE,uFAAuF;AACvF,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,mBAAmB,EAAE,QAAQ,IACpE;IACE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACnC,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;CAC/C,GACD;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,CAAA;CAAE,CAAC;AAE1E,MAAM,WAAW,8BAA8B,CAAC,CAAC,SAAS,mBAAmB,EAAE,OAAO,EAAE,QAAQ;IAC9F,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;IACvB,QAAQ,CAAC,OAAO,EAAE,CAChB,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,EAC9B,QAAQ,EAAE,iBAAiB,KACxB,oBAAoB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,CACjB,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,EAC9B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC,KACzB,SAAS,aAAa,EAAE,CAAC;CAC/B;AAiGD;;;;GAIG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,CAAC,CAAC,SAAS,mBAAmB,EACnC,OAAO,EACP,QAAQ,EACR,EACA,UAAU,EACV,OAAO,EACP,QAAQ,GACT,EAAE,8BAA8B,CAAC,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,OAAO,CAAC,CAsCpF"}
@@ -0,0 +1,124 @@
1
+ import { defineGeneratorModule } from "./generator-module.js";
2
+ import { parseParameterIssues } from "./parameters.js";
3
+ // Bound traversal of author data before retaining it between callbacks. This is not a geometry
4
+ // complexity policy; each generator remains responsible for its own physical sampling limits.
5
+ const MAX_PREPARATION_VALUES = 1_000_000;
6
+ const MAX_PREPARATION_DEPTH = 64;
7
+ function inspectPlainData(value, requireFrozen) {
8
+ const objects = [];
9
+ const visited = new Set();
10
+ const ancestors = new Set();
11
+ let count = 0;
12
+ const visit = (entry, depth) => {
13
+ if (++count > MAX_PREPARATION_VALUES || depth > MAX_PREPARATION_DEPTH) {
14
+ throw new TypeError("Generator preparation data exceeds the traversal limits.");
15
+ }
16
+ if (entry === null ||
17
+ entry === undefined ||
18
+ typeof entry === "boolean" ||
19
+ typeof entry === "string") {
20
+ return;
21
+ }
22
+ if (typeof entry === "number" && Number.isFinite(entry))
23
+ return;
24
+ if (typeof entry !== "object") {
25
+ throw new TypeError("Generator preparation must contain only finite, plain data values.");
26
+ }
27
+ if (ancestors.has(entry))
28
+ throw new TypeError("Generator preparation data must not contain cycles.");
29
+ if (visited.has(entry))
30
+ return;
31
+ const prototype = Object.getPrototypeOf(entry);
32
+ if ((Array.isArray(entry) && prototype !== Array.prototype) ||
33
+ (!Array.isArray(entry) && prototype !== Object.prototype && prototype !== null)) {
34
+ throw new TypeError("Generator preparation must contain only plain objects and arrays.");
35
+ }
36
+ if (requireFrozen && !Object.isFrozen(entry)) {
37
+ throw new TypeError("Generator preparation reuse requires deeply frozen parameters.");
38
+ }
39
+ visited.add(entry);
40
+ ancestors.add(entry);
41
+ objects.push(entry);
42
+ for (const key of Reflect.ownKeys(entry)) {
43
+ const descriptor = Object.getOwnPropertyDescriptor(entry, key);
44
+ if (typeof key !== "string" || descriptor === undefined || !("value" in descriptor)) {
45
+ throw new TypeError("Generator preparation data must not contain symbols or accessors.");
46
+ }
47
+ visit(descriptor.value, depth + 1);
48
+ }
49
+ ancestors.delete(entry);
50
+ };
51
+ visit(value, 0);
52
+ return objects;
53
+ }
54
+ function canReuse(parameters, services) {
55
+ try {
56
+ inspectPlainData(parameters, true);
57
+ const text = Object.getOwnPropertyDescriptor(services, "text");
58
+ const provider = text?.value;
59
+ return (Object.isFrozen(services) &&
60
+ typeof provider === "object" &&
61
+ provider !== null &&
62
+ Object.isFrozen(provider) &&
63
+ typeof Object.getOwnPropertyDescriptor(provider, "layout")?.value === "function");
64
+ }
65
+ catch {
66
+ return false;
67
+ }
68
+ }
69
+ function checkedPreparation(definition, result) {
70
+ // Inspect descriptors before reading so accidental getters, promises, and WASM handles never
71
+ // become retained preparation. Functions live in the callbacks, not in their result data.
72
+ const objects = inspectPlainData(result, false);
73
+ const issues = parseParameterIssues(definition, result.issues);
74
+ const hasErrors = issues.some((issue) => issue.severity === "error");
75
+ if (typeof result.ok !== "boolean" || result.ok === hasErrors) {
76
+ throw new TypeError("Generator preparation success must agree with its validation errors.");
77
+ }
78
+ const expected = result.ok ? ["ok", "value", "issues"] : ["ok", "issues"];
79
+ const keys = Object.keys(result);
80
+ if (keys.length !== expected.length || expected.some((key) => !keys.includes(key))) {
81
+ throw new TypeError("Generator preparation must return an explicit success or invalid result.");
82
+ }
83
+ for (const object of objects)
84
+ Object.freeze(object);
85
+ return result.ok
86
+ ? Object.freeze({ ok: true, value: result.value, issues })
87
+ : Object.freeze({ ok: false, issues });
88
+ }
89
+ /**
90
+ * Shares successful preparation between validation and the next generation of the exact frozen
91
+ * parameters and services. The single pending result is consumed before generation, including
92
+ * failed generation; direct calls prepare afresh. Returned modules retain the five format-1 exports.
93
+ */
94
+ export function definePreparedGeneratorModule({ definition, prepare, generate, }) {
95
+ let pending;
96
+ const runPreparation = (parameters, services) => checkedPreparation(definition, prepare(parameters, services));
97
+ return defineGeneratorModule({
98
+ definition,
99
+ validate(parameters, services) {
100
+ pending = undefined;
101
+ const result = runPreparation(parameters, services);
102
+ if (result.ok && canReuse(parameters, services)) {
103
+ pending = { parameters, services, value: result.value };
104
+ }
105
+ return result.issues;
106
+ },
107
+ generate(parameters, context, services) {
108
+ const previous = pending;
109
+ pending = undefined;
110
+ if (previous?.parameters === parameters && previous.services === services) {
111
+ return generate(parameters, context, services, previous.value);
112
+ }
113
+ const result = runPreparation(parameters, services);
114
+ if (!result.ok) {
115
+ throw new Error(result.issues
116
+ .filter((issue) => issue.severity === "error")
117
+ .map((issue) => issue.message)
118
+ .join(" "));
119
+ }
120
+ return generate(parameters, context, services, result.value);
121
+ },
122
+ });
123
+ }
124
+ //# sourceMappingURL=prepared-generator-module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prepared-generator-module.js","sourceRoot":"","sources":["../src/prepared-generator-module.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metamesh/generator-sdk",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "Portable contracts and helpers for MetaMesh Generators.",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -33,12 +33,12 @@
33
33
  "registry": "https://registry.npmjs.org/"
34
34
  },
35
35
  "dependencies": {
36
- "zod": "4.6.2"
36
+ "zod": "4.6.5"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@metamesh/config": "0.0.0",
40
- "@vitest/coverage-v8": "^5.0.0",
41
- "vitest": "^5.0.0"
40
+ "@vitest/coverage-v8": "^5.0.2",
41
+ "vitest": "^5.0.2"
42
42
  },
43
43
  "scripts": {
44
44
  "build": "tsc -p tsconfig.build.json",
@@ -1,13 +0,0 @@
1
- import type { GeneratorDefinition, GeneratorParams } from "./contracts.js";
2
- export declare const PARAMETER_URL_VERSION = 1;
3
- /**
4
- * Encodes declared, non-default parameters in definition order. The returned
5
- * value is a query string without a leading `?`.
6
- */
7
- export declare function encodeParameterState(definition: GeneratorDefinition, parameters: Readonly<Record<string, unknown>>): string;
8
- /**
9
- * Restores known values from a query string or URL. Malformed, unknown, and
10
- * invalid entries are ignored. Unsupported explicit versions return defaults.
11
- */
12
- export declare function decodeParameterState<const D extends GeneratorDefinition>(definition: D, query: string, base?: Readonly<Record<string, unknown>> | null): GeneratorParams<D>;
13
- //# sourceMappingURL=url-state.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"url-state.d.ts","sourceRoot":"","sources":["../src/url-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,eAAe,EAGhB,MAAM,gBAAgB,CAAC;AAIxB,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAiGvC;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,mBAAmB,EAC/B,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAC5C,MAAM,CAkBR;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,CAAC,SAAS,mBAAmB,EACtE,UAAU,EAAE,CAAC,EACb,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,IAAI,GAC9C,eAAe,CAAC,CAAC,CAAC,CA6BpB"}
package/dist/url-state.js DELETED
@@ -1,149 +0,0 @@
1
- import { isFontSelection } from "./fonts.js";
2
- import { getDefaultParameters, normalizeParameters, parameterValueEquals } from "./parameters.js";
3
- export const PARAMETER_URL_VERSION = 1;
4
- function serializeValue(value) {
5
- if (Array.isArray(value) || isFontSelection(value))
6
- return JSON.stringify(value);
7
- if (typeof value === "boolean") {
8
- return value ? "1" : "0";
9
- }
10
- return String(value);
11
- }
12
- function parseValue(parameter, value) {
13
- switch (parameter.type) {
14
- case "font": {
15
- if (value.length > 512)
16
- return undefined;
17
- try {
18
- const parsed = JSON.parse(value);
19
- return isFontSelection(parsed) ? parsed : undefined;
20
- }
21
- catch {
22
- return undefined;
23
- }
24
- }
25
- case "number":
26
- case "slider": {
27
- if (value.trim() === "") {
28
- return undefined;
29
- }
30
- const parsed = Number(value);
31
- return Number.isFinite(parsed) ? parsed : undefined;
32
- }
33
- case "boolean":
34
- if (value === "1" || value === "true") {
35
- return true;
36
- }
37
- if (value === "0" || value === "false") {
38
- return false;
39
- }
40
- return undefined;
41
- case "select":
42
- case "color":
43
- case "text":
44
- return value;
45
- case "svg":
46
- return undefined;
47
- case "choice-set":
48
- case "array": {
49
- try {
50
- const parsed = JSON.parse(value);
51
- if (!Array.isArray(parsed))
52
- return undefined;
53
- const entries = parsed;
54
- if (parameter.type === "choice-set") {
55
- return entries.every((item) => typeof item === "string") ? entries.slice() : undefined;
56
- }
57
- if (parameter.items.type === "string") {
58
- return entries.every((item) => typeof item === "string") ? entries.slice() : undefined;
59
- }
60
- return entries.every((item) => typeof item === "number" && Number.isFinite(item))
61
- ? entries.slice()
62
- : undefined;
63
- }
64
- catch {
65
- return undefined;
66
- }
67
- }
68
- }
69
- }
70
- function decodeComponent(value) {
71
- try {
72
- return decodeURIComponent(value.replace(/\+/g, " "));
73
- }
74
- catch {
75
- return undefined;
76
- }
77
- }
78
- function queryEntries(query) {
79
- const questionMark = query.indexOf("?");
80
- const queryStart = questionMark >= 0 ? questionMark + 1 : query.startsWith("?") ? 1 : 0;
81
- const hashMark = query.indexOf("#", queryStart);
82
- const body = query.slice(queryStart, hashMark >= 0 ? hashMark : undefined);
83
- const entries = [];
84
- for (const pair of body.split("&")) {
85
- if (pair === "") {
86
- continue;
87
- }
88
- const separator = pair.indexOf("=");
89
- const encodedKey = separator >= 0 ? pair.slice(0, separator) : pair;
90
- const encodedValue = separator >= 0 ? pair.slice(separator + 1) : "";
91
- const key = decodeComponent(encodedKey);
92
- const value = decodeComponent(encodedValue);
93
- if (key !== undefined && value !== undefined) {
94
- entries.push([key, value]);
95
- }
96
- }
97
- return entries;
98
- }
99
- /**
100
- * Encodes declared, non-default parameters in definition order. The returned
101
- * value is a query string without a leading `?`.
102
- */
103
- export function encodeParameterState(definition, parameters) {
104
- const normalized = normalizeParameters(definition, parameters);
105
- const defaults = getDefaultParameters(definition);
106
- const pairs = [`v=${PARAMETER_URL_VERSION}`];
107
- for (const parameter of definition.parameters) {
108
- // SVG bodies are local project data. URLs stay bounded and never replace a
109
- // device's persisted SVG with a definition default.
110
- if (parameter.type === "svg")
111
- continue;
112
- const value = normalized[parameter.id];
113
- if (value !== undefined && !parameterValueEquals(value, defaults[parameter.id])) {
114
- pairs.push(`${encodeURIComponent(parameter.id)}=${encodeURIComponent(serializeValue(value))}`);
115
- }
116
- }
117
- return pairs.join("&");
118
- }
119
- /**
120
- * Restores known values from a query string or URL. Malformed, unknown, and
121
- * invalid entries are ignored. Unsupported explicit versions return defaults.
122
- */
123
- export function decodeParameterState(definition, query, base) {
124
- const entries = queryEntries(query);
125
- const versionEntry = entries.find(([key]) => key === "v");
126
- if (versionEntry !== undefined && versionEntry[1] !== String(PARAMETER_URL_VERSION)) {
127
- return normalizeParameters(definition, base ?? getDefaultParameters(definition));
128
- }
129
- const definitions = new Map(definition.parameters.map((parameter) => [parameter.id, parameter]));
130
- const decoded = [];
131
- for (const [key, encodedValue] of entries) {
132
- const parameter = definitions.get(key);
133
- if (parameter === undefined || parameter.type === "svg") {
134
- continue;
135
- }
136
- const value = parseValue(parameter, encodedValue);
137
- if (value !== undefined) {
138
- const previousIndex = decoded.findIndex(([decodedKey]) => decodedKey === key);
139
- if (previousIndex >= 0)
140
- decoded.splice(previousIndex, 1);
141
- decoded.push([key, value]);
142
- }
143
- }
144
- return normalizeParameters(definition, {
145
- ...normalizeParameters(definition, base ?? getDefaultParameters(definition)),
146
- ...Object.fromEntries(decoded),
147
- });
148
- }
149
- //# sourceMappingURL=url-state.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"url-state.js","sourceRoot":"","sources":["../src/url-state.ts"],"names":[],"mappings":"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"}