@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 +16 -0
- package/README.md +32 -15
- package/dist/contracts.d.ts +3 -1
- package/dist/contracts.d.ts.map +1 -1
- package/dist/execute-generator.d.ts +46 -0
- package/dist/execute-generator.d.ts.map +1 -0
- package/dist/execute-generator.js +41 -0
- package/dist/execute-generator.js.map +1 -0
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/prepared-generator-module.d.ts +24 -0
- package/dist/prepared-generator-module.d.ts.map +1 -0
- package/dist/prepared-generator-module.js +124 -0
- package/dist/prepared-generator-module.js.map +1 -0
- package/package.json +4 -4
- package/dist/url-state.d.ts +0 -13
- package/dist/url-state.d.ts.map +0 -1
- package/dist/url-state.js +0 -149
- package/dist/url-state.js.map +0 -1
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.
|
|
64
|
-
|
|
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
|
|
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,
|
|
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.
|
|
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
|
-
|
|
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
|
package/dist/contracts.d.ts
CHANGED
|
@@ -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,
|
|
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;
|
package/dist/contracts.d.ts.map
CHANGED
|
@@ -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";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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,
|
|
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;
|
|
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":"AAMA,OAAO,EAAE,qBAAqB,EAAwB,MAAM,uBAAuB,CAAC;AAEpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAyBvD,+FAA+F;AAC/F,8FAA8F;AAC9F,MAAM,sBAAsB,GAAG,SAAS,CAAC;AACzC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAEjC,SAAS,gBAAgB,CAAC,KAAc,EAAE,aAAsB;IAC9D,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,KAAK,GAAG,CAAC,KAAc,EAAE,KAAa,EAAQ,EAAE;QACpD,IAAI,EAAE,KAAK,GAAG,sBAAsB,IAAI,KAAK,GAAG,qBAAqB,EAAE,CAAC;YACtE,MAAM,IAAI,SAAS,CAAC,0DAA0D,CAAC,CAAC;QAClF,CAAC;QACD,IACE,KAAK,KAAK,IAAI;YACd,KAAK,KAAK,SAAS;YACnB,OAAO,KAAK,KAAK,SAAS;YAC1B,OAAO,KAAK,KAAK,QAAQ,EACzB,CAAC;YACD,OAAO;QACT,CAAC;QACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO;QAChE,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,SAAS,CAAC,oEAAoE,CAAC,CAAC;QAC5F,CAAC;QACD,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;YACtB,MAAM,IAAI,SAAS,CAAC,qDAAqD,CAAC,CAAC;QAC7E,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,OAAO;QAC/B,MAAM,SAAS,GAAY,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACxD,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,KAAK,KAAK,CAAC,SAAS,CAAC;YACvD,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,SAAS,KAAK,IAAI,CAAC,EAC/E,CAAC;YACD,MAAM,IAAI,SAAS,CAAC,mEAAmE,CAAC,CAAC;QAC3F,CAAC;QACD,IAAI,aAAa,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,SAAS,CAAC,gEAAgE,CAAC,CAAC;QACxF,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACrB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,KAAK,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC/D,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,UAAU,KAAK,SAAS,IAAI,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC,EAAE,CAAC;gBACpF,MAAM,IAAI,SAAS,CAAC,mEAAmE,CAAC,CAAC;YAC3F,CAAC;YACD,KAAK,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC,CAAC;IACF,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAChB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,QAAQ,CAAC,UAAmB,EAAE,QAA2B;IAChE,IAAI,CAAC;QACH,gBAAgB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,MAAM,CAAC,wBAAwB,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAY,IAAI,EAAE,KAAK,CAAC;QACtC,OAAO,CACL,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACzB,OAAO,QAAQ,KAAK,QAAQ;YAC5B,QAAQ,KAAK,IAAI;YACjB,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACzB,OAAO,MAAM,CAAC,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,KAAK,KAAK,UAAU,CACjF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,UAAa,EACb,MAAyC;IAEzC,6FAA6F;IAC7F,0FAA0F;IAC1F,MAAM,OAAO,GAAG,gBAAgB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAiC,CAAC;IAC/F,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC;IACrE,IAAI,OAAO,MAAM,CAAC,EAAE,KAAK,SAAS,IAAI,MAAM,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;QAC9D,MAAM,IAAI,SAAS,CAAC,sEAAsE,CAAC,CAAC;IAC9F,CAAC;IACD,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC1E,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjC,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACnF,MAAM,IAAI,SAAS,CAAC,0EAA0E,CAAC,CAAC;IAClG,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,OAAO;QAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpD,OAAO,MAAM,CAAC,EAAE;QACd,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,CAAC;QAC1D,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,6BAA6B,CAI3C,EACA,UAAU,EACV,OAAO,EACP,QAAQ,GAC6C;IACrD,IAAI,OAMS,CAAC;IACd,MAAM,cAAc,GAAG,CAAC,UAA8B,EAAE,QAA2B,EAAE,EAAE,CACrF,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC;IAChE,OAAO,qBAAqB,CAAC;QAC3B,UAAU;QACV,QAAQ,CAAC,UAAU,EAAE,QAAQ;YAC3B,OAAO,GAAG,SAAS,CAAC;YACpB,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YACpD,IAAI,MAAM,CAAC,EAAE,IAAI,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;gBAChD,OAAO,GAAG,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1D,CAAC;YACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;QACD,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ;YACpC,MAAM,QAAQ,GAAG,OAAO,CAAC;YACzB,OAAO,GAAG,SAAS,CAAC;YACpB,IAAI,QAAQ,EAAE,UAAU,KAAK,UAAU,IAAI,QAAQ,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;gBAC1E,OAAO,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;YACjE,CAAC;YACD,MAAM,MAAM,GAAG,cAAc,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YACpD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CACb,MAAM,CAAC,MAAM;qBACV,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,OAAO,CAAC;qBAC7C,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC;qBAC7B,IAAI,CAAC,GAAG,CAAC,CACb,CAAC;YACJ,CAAC;YACD,OAAO,QAAQ,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/D,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metamesh/generator-sdk",
|
|
3
|
-
"version": "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.
|
|
36
|
+
"zod": "4.6.5"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"@metamesh/config": "0.0.0",
|
|
40
|
-
"@vitest/coverage-v8": "^5.0.
|
|
41
|
-
"vitest": "^5.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",
|
package/dist/url-state.d.ts
DELETED
|
@@ -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
|
package/dist/url-state.d.ts.map
DELETED
|
@@ -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
|
package/dist/url-state.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"url-state.js","sourceRoot":"","sources":["../src/url-state.ts"],"names":[],"mappings":"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"}
|