@metamesh/generator-sdk 0.5.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +146 -147
  3. package/dist/authoring.d.ts +57 -0
  4. package/dist/authoring.d.ts.map +1 -0
  5. package/dist/authoring.js +33 -0
  6. package/dist/authoring.js.map +1 -0
  7. package/dist/contracts.d.ts +31 -99
  8. package/dist/contracts.d.ts.map +1 -1
  9. package/dist/execute-generator.d.ts +22 -28
  10. package/dist/execute-generator.d.ts.map +1 -1
  11. package/dist/execute-generator.js +27 -32
  12. package/dist/execute-generator.js.map +1 -1
  13. package/dist/generated-parts.d.ts +1 -2
  14. package/dist/generated-parts.d.ts.map +1 -1
  15. package/dist/generated-parts.js +17 -32
  16. package/dist/generated-parts.js.map +1 -1
  17. package/dist/generator-module.d.ts +18 -40
  18. package/dist/generator-module.d.ts.map +1 -1
  19. package/dist/generator-module.js +4 -111
  20. package/dist/generator-module.js.map +1 -1
  21. package/dist/generator-package/constants.d.ts +2 -2
  22. package/dist/generator-package/constants.js +2 -2
  23. package/dist/generator-package/schemas/definition.schema.d.ts +3 -0
  24. package/dist/generator-package/schemas/definition.schema.d.ts.map +1 -1
  25. package/dist/generator-package/schemas/manifest.schema.d.ts +5 -8422
  26. package/dist/generator-package/schemas/manifest.schema.d.ts.map +1 -1
  27. package/dist/generator-package/schemas/parameter.schema.d.ts +7 -0
  28. package/dist/generator-package/schemas/parameter.schema.d.ts.map +1 -1
  29. package/dist/generator-package/schemas/parameter.schema.js +2 -0
  30. package/dist/generator-package/schemas/parameter.schema.js.map +1 -1
  31. package/dist/generator-package/schemas/preset.schema.d.ts +2 -13
  32. package/dist/generator-package/schemas/preset.schema.d.ts.map +1 -1
  33. package/dist/generator-package/schemas/preset.schema.js.map +1 -1
  34. package/dist/generator-package/validate-definition.d.ts.map +1 -1
  35. package/dist/generator-package/validate-definition.js +18 -0
  36. package/dist/generator-package/validate-definition.js.map +1 -1
  37. package/dist/generator-package/validate-manifest.d.ts.map +1 -1
  38. package/dist/generator-package/validate-manifest.js +2 -13
  39. package/dist/generator-package/validate-manifest.js.map +1 -1
  40. package/dist/generator-services.d.ts +1 -1
  41. package/dist/generator-services.d.ts.map +1 -1
  42. package/dist/index.d.ts +8 -15
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +2 -6
  45. package/dist/index.js.map +1 -1
  46. package/dist/parameter-contracts.d.ts +121 -0
  47. package/dist/parameter-contracts.d.ts.map +1 -0
  48. package/dist/parameter-contracts.js +2 -0
  49. package/dist/parameter-contracts.js.map +1 -0
  50. package/dist/parameters/issues.d.ts +14 -0
  51. package/dist/parameters/issues.d.ts.map +1 -0
  52. package/dist/parameters/issues.js +262 -0
  53. package/dist/parameters/issues.js.map +1 -0
  54. package/dist/parameters/preparation.d.ts +13 -0
  55. package/dist/parameters/preparation.d.ts.map +1 -0
  56. package/dist/parameters/preparation.js +35 -0
  57. package/dist/parameters/preparation.js.map +1 -0
  58. package/dist/parameters/recovery.d.ts +10 -0
  59. package/dist/parameters/recovery.d.ts.map +1 -0
  60. package/dist/parameters/recovery.js +124 -0
  61. package/dist/parameters/recovery.js.map +1 -0
  62. package/dist/parameters/strict.d.ts +30 -0
  63. package/dist/parameters/strict.d.ts.map +1 -0
  64. package/dist/parameters/strict.js +116 -0
  65. package/dist/parameters/strict.js.map +1 -0
  66. package/dist/parameters/values.d.ts +13 -0
  67. package/dist/parameters/values.d.ts.map +1 -0
  68. package/dist/parameters/values.js +73 -0
  69. package/dist/parameters/values.js.map +1 -0
  70. package/dist/parameters.d.ts +7 -68
  71. package/dist/parameters.d.ts.map +1 -1
  72. package/dist/parameters.js +5 -566
  73. package/dist/parameters.js.map +1 -1
  74. package/dist/parse-generator-module.d.ts +29 -0
  75. package/dist/parse-generator-module.d.ts.map +1 -0
  76. package/dist/parse-generator-module.js +137 -0
  77. package/dist/parse-generator-module.js.map +1 -0
  78. package/dist/runtime.d.ts +10 -0
  79. package/dist/runtime.d.ts.map +1 -0
  80. package/dist/runtime.js +5 -0
  81. package/dist/runtime.js.map +1 -0
  82. package/dist/worker-contracts.d.ts +80 -0
  83. package/dist/worker-contracts.d.ts.map +1 -0
  84. package/dist/worker-contracts.js +12 -0
  85. package/dist/worker-contracts.js.map +1 -0
  86. package/package.json +14 -1
  87. package/dist/prepared-generator-module.d.ts +0 -24
  88. package/dist/prepared-generator-module.d.ts.map +0 -1
  89. package/dist/prepared-generator-module.js +0 -124
  90. package/dist/prepared-generator-module.js.map +0 -1
@@ -1,567 +1,6 @@
1
- import { isFontSelection } from "./fonts.js";
2
- import { MAX_ARRAY_ITEMS, MAX_METADATA_TEXT_LENGTH, MAX_PARAMETER_OPTIONS, MAX_TEXT_PARAMETER_LENGTH, } from "./generator-package/constants.js";
3
- import { cloneProfileValue, isProfileValue, profileValuesEqual } from "./profiles.js";
4
- const HEX_COLOR_PATTERN = /^#[\da-f]{6}$/i;
5
- export const MAX_SVG_PARAMETER_BYTES = 256 * 1024;
6
- export const MAX_PROJECT_SVG_PARAMETER_BYTES = 512 * 1024;
7
- export const MAX_PARAMETER_ISSUES = 100;
8
- export const MAX_PARAMETER_ISSUE_MESSAGE_LENGTH = 1_000;
9
- export const EMPTY_SVG_PARAMETER_DEFAULT = '<svg xmlns="http://www.w3.org/2000/svg" width="100mm" height="100mm" viewBox="-50 -50 100 100"></svg>';
10
- export class ParamDecodeError extends TypeError {
11
- issues;
12
- constructor(issues) {
13
- super(issues[0]?.message ?? "Generator parameters are invalid.");
14
- this.name = "ParamDecodeError";
15
- this.issues = issues;
16
- }
17
- }
18
- /** Captures literal parameter IDs and option values without adding runtime work. */
19
- export function defineGenerator(definition) {
20
- return definition;
21
- }
22
- /** Contextually types a Generator validator from its definition. */
23
- export function defineValidator(_definition, validator) {
24
- return validator;
25
- }
26
- /** Contextually types complete presets from their Generator definition. */
27
- export function definePresets(_definition, presets) {
28
- return presets;
29
- }
30
- export function svgParameterBytes(value) {
31
- return new TextEncoder().encode(value).byteLength;
32
- }
33
- function svgValueFits(value) {
34
- return (value.length <= MAX_SVG_PARAMETER_BYTES && svgParameterBytes(value) <= MAX_SVG_PARAMETER_BYTES);
35
- }
36
- function readDenseArray(value, maxLength) {
37
- if (!Array.isArray(value) || value.length > maxLength)
38
- return undefined;
39
- const entries = [];
40
- try {
41
- const keys = Reflect.ownKeys(value);
42
- if (keys.length !== value.length + 1 ||
43
- !keys.every((key) => key === "length"
44
- ? true
45
- : typeof key === "string" &&
46
- Number.isSafeInteger(Number(key)) &&
47
- Number(key) >= 0 &&
48
- Number(key) < value.length &&
49
- String(Number(key)) === key)) {
50
- return undefined;
51
- }
52
- for (let index = 0; index < value.length; index += 1) {
53
- const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
54
- if (descriptor === undefined || !("value" in descriptor))
55
- return undefined;
56
- entries.push(descriptor.value);
57
- }
58
- }
59
- catch {
60
- return undefined;
61
- }
62
- return entries;
63
- }
64
- function isBoundedStringArray(value) {
65
- return value.every((item) => typeof item === "string" && item.length <= MAX_METADATA_TEXT_LENGTH);
66
- }
67
- function isFiniteNumberArray(value) {
68
- return value.every((item) => typeof item === "number" && Number.isFinite(item));
69
- }
70
- function isParameterArray(value) {
71
- return Array.isArray(value);
72
- }
73
- export function parameterValueEquals(previous, next) {
74
- if (Object.is(previous, next))
75
- return true;
76
- if (isProfileValue(previous) && isProfileValue(next)) {
77
- return profileValuesEqual(previous, next);
78
- }
79
- if (isFontSelection(previous) && isFontSelection(next)) {
80
- return (previous.faceId === next.faceId &&
81
- previous.revision === next.revision &&
82
- previous.weight === next.weight);
83
- }
84
- if (!Array.isArray(previous) || !Array.isArray(next) || previous.length !== next.length) {
85
- return false;
86
- }
87
- return previous.every((value, index) => Object.is(value, next[index]));
88
- }
89
- function clamp(value, minimum, maximum) {
90
- const withMinimum = minimum === undefined ? value : Math.max(minimum, value);
91
- return maximum === undefined ? withMinimum : Math.min(maximum, withMinimum);
92
- }
93
- function normalizeValue(parameter, value, fallback) {
94
- const fallbackValue = isParameterArray(fallback)
95
- ? fallback.slice()
96
- : isFontSelection(fallback)
97
- ? { ...fallback }
98
- : isProfileValue(fallback)
99
- ? cloneProfileValue(fallback)
100
- : fallback;
101
- switch (parameter.type) {
102
- case "profile":
103
- return isProfileValue(value) ? cloneProfileValue(value) : fallbackValue;
104
- case "font":
105
- return isFontSelection(value)
106
- ? { faceId: value.faceId, revision: value.revision, weight: value.weight }
107
- : fallbackValue;
108
- case "number":
109
- case "slider":
110
- return typeof value === "number" && Number.isFinite(value)
111
- ? clamp(value, parameter.min, parameter.max)
112
- : fallbackValue;
113
- case "boolean":
114
- return typeof value === "boolean" ? value : fallbackValue;
115
- case "select":
116
- return typeof value === "string" && parameter.options.some((option) => option.value === value)
117
- ? value
118
- : fallbackValue;
119
- case "choice-set": {
120
- if (!Array.isArray(value) || value.length > MAX_PARAMETER_OPTIONS) {
121
- return fallbackValue;
122
- }
123
- const entries = readDenseArray(value, MAX_PARAMETER_OPTIONS);
124
- if (entries === undefined)
125
- return fallbackValue;
126
- const knownValues = new Set(parameter.options.map((option) => option.value));
127
- const selected = new Set();
128
- for (let index = 0; index < entries.length; index += 1) {
129
- const entry = entries[index];
130
- if (typeof entry !== "string" || !knownValues.has(entry) || selected.has(entry)) {
131
- return fallbackValue;
132
- }
133
- selected.add(entry);
134
- }
135
- if ((parameter.minSelections !== undefined && entries.length < parameter.minSelections) ||
136
- (parameter.maxSelections !== undefined && entries.length > parameter.maxSelections)) {
137
- return fallbackValue;
138
- }
139
- // Selection order has no meaning; option-definition order is the
140
- // canonical representation used by persistence, presets, and equality.
141
- return parameter.options
142
- .map((option) => option.value)
143
- .filter((option) => selected.has(option));
144
- }
145
- case "color":
146
- return typeof value === "string" && HEX_COLOR_PATTERN.test(value)
147
- ? value.toLowerCase()
148
- : fallbackValue;
149
- case "text":
150
- return typeof value === "string" && value.length <= MAX_TEXT_PARAMETER_LENGTH
151
- ? value
152
- : fallbackValue;
153
- case "svg":
154
- return typeof value === "string" && svgValueFits(value) ? value : fallbackValue;
155
- case "array": {
156
- if (!Array.isArray(value))
157
- return fallbackValue;
158
- if (value.length > MAX_ARRAY_ITEMS ||
159
- (parameter.minItems !== undefined && value.length < parameter.minItems) ||
160
- (parameter.maxItems !== undefined && value.length > parameter.maxItems)) {
161
- return fallbackValue;
162
- }
163
- const entries = readDenseArray(value, MAX_ARRAY_ITEMS);
164
- if (entries === undefined)
165
- return fallbackValue;
166
- if (parameter.items.type === "string") {
167
- return isBoundedStringArray(entries) ? entries : fallbackValue;
168
- }
169
- const numericItems = parameter.items;
170
- if (!isFiniteNumberArray(entries))
171
- return fallbackValue;
172
- return entries.map((item) => clamp(item, numericItems.min, numericItems.max));
173
- }
174
- }
175
- }
176
- function normalizedDefinitionDefault(parameter) {
177
- return normalizeValue(parameter, parameter.default, parameter.default);
178
- }
179
- function ownValue(input, key) {
180
- if (input === null || input === undefined || !Object.hasOwn(input, key))
181
- return undefined;
182
- const descriptor = Object.getOwnPropertyDescriptor(input, key);
183
- return descriptor !== undefined && "value" in descriptor ? descriptor.value : undefined;
184
- }
185
- /**
186
- * Returns one value per declared parameter. Unknown input keys are discarded,
187
- * missing/invalid values fall back to defaults, and numbers are clamped.
188
- */
189
- export function normalizeParameters(definition, input) {
190
- const entries = definition.parameters.map((parameter) => {
191
- const fallback = normalizedDefinitionDefault(parameter);
192
- return [
193
- parameter.id,
194
- normalizeValue(parameter, ownValue(input, parameter.id), fallback),
195
- ];
196
- });
197
- return freezeParameters(Object.fromEntries(entries));
198
- }
199
- export function getDefaultParameters(definition) {
200
- return normalizeParameters(definition);
201
- }
202
- function issue(parameterId, message) {
203
- return { severity: "error", parameterId, message };
204
- }
205
- function validateDefinitionValue(parameter, value) {
206
- switch (parameter.type) {
207
- case "profile":
208
- return isProfileValue(value)
209
- ? []
210
- : [issue(parameter.id, `${parameter.label} must be a bounded, normalized side outline.`)];
211
- case "font":
212
- return isFontSelection(value)
213
- ? []
214
- : [issue(parameter.id, `${parameter.label} must be an immutable font selection.`)];
215
- case "number":
216
- case "slider": {
217
- if (typeof value !== "number" || !Number.isFinite(value)) {
218
- return [issue(parameter.id, `${parameter.label} must be a finite number.`)];
219
- }
220
- const issues = [];
221
- if (parameter.min !== undefined && value < parameter.min) {
222
- issues.push(issue(parameter.id, `${parameter.label} must be at least ${parameter.min}.`));
223
- }
224
- if (parameter.max !== undefined && value > parameter.max) {
225
- issues.push(issue(parameter.id, `${parameter.label} must be at most ${parameter.max}.`));
226
- }
227
- return issues;
228
- }
229
- case "boolean":
230
- return typeof value === "boolean"
231
- ? []
232
- : [issue(parameter.id, `${parameter.label} must be true or false.`)];
233
- case "select":
234
- return typeof value === "string" && parameter.options.some((option) => option.value === value)
235
- ? []
236
- : [issue(parameter.id, `${parameter.label} must be one of its available options.`)];
237
- case "choice-set": {
238
- if (!Array.isArray(value)) {
239
- return [issue(parameter.id, `${parameter.label} must be a list of available choices.`)];
240
- }
241
- const issues = [];
242
- if (value.length > MAX_PARAMETER_OPTIONS) {
243
- issues.push(issue(parameter.id, `${parameter.label} must include at most ${MAX_PARAMETER_OPTIONS} choices.`));
244
- return issues;
245
- }
246
- const entries = readDenseArray(value, MAX_PARAMETER_OPTIONS);
247
- if (entries === undefined) {
248
- issues.push(issue(parameter.id, `${parameter.label} must be a dense list of data values.`));
249
- return issues;
250
- }
251
- const knownValues = new Set(parameter.options.map((option) => option.value));
252
- const seen = new Set();
253
- const inspectedLength = Math.min(entries.length, MAX_PARAMETER_OPTIONS);
254
- for (let index = 0; index < inspectedLength; index += 1) {
255
- if (issues.length === MAX_PARAMETER_ISSUES)
256
- break;
257
- const entry = entries[index];
258
- if (typeof entry !== "string" || !knownValues.has(entry)) {
259
- issues.push(issue(parameter.id, `${parameter.label} choice ${index + 1} must be available.`));
260
- continue;
261
- }
262
- if (seen.has(entry)) {
263
- issues.push(issue(parameter.id, `${parameter.label} choices must be unique.`));
264
- continue;
265
- }
266
- seen.add(entry);
267
- }
268
- if (parameter.minSelections !== undefined && entries.length < parameter.minSelections) {
269
- issues.push(issue(parameter.id, `${parameter.label} must include at least ${parameter.minSelections} choices.`));
270
- }
271
- if (parameter.maxSelections !== undefined && entries.length > parameter.maxSelections) {
272
- issues.push(issue(parameter.id, `${parameter.label} must include at most ${parameter.maxSelections} choices.`));
273
- }
274
- return issues;
275
- }
276
- case "color":
277
- return typeof value === "string" && HEX_COLOR_PATTERN.test(value)
278
- ? []
279
- : [issue(parameter.id, `${parameter.label} must be a six-digit hex color.`)];
280
- case "text":
281
- if (typeof value !== "string") {
282
- return [issue(parameter.id, `${parameter.label} must be text.`)];
283
- }
284
- return value.length <= MAX_TEXT_PARAMETER_LENGTH
285
- ? []
286
- : [
287
- issue(parameter.id, `${parameter.label} must contain at most ${MAX_TEXT_PARAMETER_LENGTH} characters.`),
288
- ];
289
- case "svg":
290
- if (typeof value !== "string")
291
- return [issue(parameter.id, `${parameter.label} must be SVG text.`)];
292
- return svgValueFits(value)
293
- ? []
294
- : [issue(parameter.id, `${parameter.label} must be 256 KiB or smaller.`)];
295
- case "array": {
296
- if (!Array.isArray(value)) {
297
- return [issue(parameter.id, `${parameter.label} must be a list.`)];
298
- }
299
- const issues = [];
300
- if (value.length > MAX_ARRAY_ITEMS) {
301
- issues.push(issue(parameter.id, `${parameter.label} must contain at most ${MAX_ARRAY_ITEMS} items.`));
302
- return issues;
303
- }
304
- if (parameter.minItems !== undefined && value.length < parameter.minItems) {
305
- issues.push(issue(parameter.id, `${parameter.label} must contain at least ${parameter.minItems} items.`));
306
- }
307
- if (parameter.maxItems !== undefined && value.length > parameter.maxItems) {
308
- issues.push(issue(parameter.id, `${parameter.label} must contain at most ${parameter.maxItems} items.`));
309
- }
310
- const entries = readDenseArray(value, MAX_ARRAY_ITEMS);
311
- if (entries === undefined) {
312
- issues.push(issue(parameter.id, `${parameter.label} must be a dense list of data values.`));
313
- return issues;
314
- }
315
- const inspectedLength = Math.min(value.length, MAX_ARRAY_ITEMS);
316
- for (let index = 0; index < inspectedLength; index += 1) {
317
- if (issues.length === MAX_PARAMETER_ISSUES)
318
- break;
319
- const item = entries[index];
320
- if (parameter.items.type === "string") {
321
- if (typeof item !== "string") {
322
- issues.push(issue(parameter.id, `${parameter.label} item ${index + 1} must be text.`));
323
- }
324
- else if (item.length > MAX_METADATA_TEXT_LENGTH) {
325
- issues.push(issue(parameter.id, `${parameter.label} item ${index + 1} must contain at most ${MAX_METADATA_TEXT_LENGTH} characters.`));
326
- }
327
- continue;
328
- }
329
- if (typeof item !== "number" || !Number.isFinite(item)) {
330
- issues.push(issue(parameter.id, `${parameter.label} item ${index + 1} must be a finite number.`));
331
- continue;
332
- }
333
- if (parameter.items.min !== undefined && item < parameter.items.min) {
334
- issues.push(issue(parameter.id, `${parameter.label} item ${index + 1} must be at least ${parameter.items.min}.`));
335
- }
336
- if (parameter.items.max !== undefined && item > parameter.items.max) {
337
- issues.push(issue(parameter.id, `${parameter.label} item ${index + 1} must be at most ${parameter.items.max}.`));
338
- }
339
- }
340
- return issues;
341
- }
342
- }
343
- }
344
- function valueMatchesCanonical(value, canonical) {
345
- if (isProfileValue(canonical)) {
346
- return isProfileValue(value) && profileValuesEqual(value, canonical);
347
- }
348
- if (isFontSelection(canonical))
349
- return isFontSelection(value) && parameterValueEquals(value, canonical);
350
- if (!Array.isArray(canonical))
351
- return Object.is(value, canonical);
352
- const entries = readDenseArray(value, MAX_ARRAY_ITEMS);
353
- if (entries === undefined || entries.length !== canonical.length)
354
- return false;
355
- return canonical.every((entry, index) => Object.is(entry, entries[index]));
356
- }
357
- function decodeIssue(code, path, message, parameterId) {
358
- return parameterId === undefined ? { code, path, message } : { code, path, parameterId, message };
359
- }
360
- function appendDecodeIssue(issues, next) {
361
- if (issues.length < MAX_PARAMETER_ISSUES)
362
- issues.push(next);
363
- }
364
- /**
365
- * Creates a strict decoder for the exact normalized parameter map described by
366
- * a definition. Unlike normalization, decoding never fills, drops, clamps, or
367
- * canonicalizes values.
368
- */
369
- export function createParamCodec(definition) {
370
- const parameterIds = new Set(definition.parameters.map((parameter) => parameter.id));
371
- if (parameterIds.size !== definition.parameters.length) {
372
- throw new TypeError("Generator parameter IDs must be unique.");
373
- }
374
- const safeParse = (input) => {
375
- if (!isRecord(input)) {
376
- return {
377
- success: false,
378
- issues: [decodeIssue("type", [], "Generator parameters must be an object.")],
379
- };
380
- }
381
- const issues = [];
382
- for (const key of Reflect.ownKeys(input)) {
383
- if (typeof key !== "string" || !parameterIds.has(key)) {
384
- const printableKey = typeof key === "string" ? key : String(key);
385
- appendDecodeIssue(issues, decodeIssue("unknown", [printableKey], `Unknown Generator parameter "${printableKey}".`));
386
- if (issues.length === MAX_PARAMETER_ISSUES)
387
- break;
388
- }
389
- }
390
- const entries = [];
391
- let svgBytes = 0;
392
- for (const parameter of definition.parameters) {
393
- if (issues.length === MAX_PARAMETER_ISSUES)
394
- break;
395
- const descriptor = Object.getOwnPropertyDescriptor(input, parameter.id);
396
- if (descriptor === undefined) {
397
- appendDecodeIssue(issues, decodeIssue("missing", [parameter.id], `${parameter.label} is required.`, parameter.id));
398
- continue;
399
- }
400
- if (!("value" in descriptor)) {
401
- appendDecodeIssue(issues, decodeIssue("invalid", [parameter.id], `${parameter.label} must be a data value.`, parameter.id));
402
- continue;
403
- }
404
- const value = descriptor.value;
405
- const fieldIssues = validateDefinitionValue(parameter, value);
406
- for (const fieldIssue of fieldIssues) {
407
- appendDecodeIssue(issues, decodeIssue("invalid", [parameter.id], fieldIssue.message, parameter.id));
408
- }
409
- if (fieldIssues.length > 0)
410
- continue;
411
- const canonical = normalizeValue(parameter, value, normalizedDefinitionDefault(parameter));
412
- if (!valueMatchesCanonical(value, canonical)) {
413
- appendDecodeIssue(issues, decodeIssue("invalid", [parameter.id], `${parameter.label} must use its canonical representation.`, parameter.id));
414
- continue;
415
- }
416
- if (parameter.type === "svg" && typeof value === "string") {
417
- svgBytes += svgParameterBytes(value);
418
- }
419
- entries.push([
420
- parameter.id,
421
- Array.isArray(canonical) ? canonical.slice() : canonical,
422
- ]);
423
- }
424
- if (svgBytes > MAX_PROJECT_SVG_PARAMETER_BYTES && issues.length < MAX_PARAMETER_ISSUES) {
425
- appendDecodeIssue(issues, decodeIssue("invalid", [], "All SVG parameters together must be 512 KiB or smaller."));
426
- }
427
- if (issues.length > 0) {
428
- return { success: false, issues: Object.freeze(issues) };
429
- }
430
- return {
431
- success: true,
432
- data: freezeParameters(Object.fromEntries(entries)),
433
- };
434
- };
435
- return {
436
- safeParse,
437
- parse(input) {
438
- const result = safeParse(input);
439
- if (!result.success)
440
- throw new ParamDecodeError(result.issues);
441
- return result.data;
442
- },
443
- };
444
- }
445
- export function aggregateParameterIssues(...issueSets) {
446
- const issues = issueSets.flatMap((set) => set).slice(0, MAX_PARAMETER_ISSUES);
447
- const errors = issues.filter((entry) => entry.severity === "error");
448
- const warnings = issues.filter((entry) => entry.severity === "warning");
449
- return {
450
- isValid: errors.length === 0,
451
- issues,
452
- errors,
453
- warnings,
454
- };
455
- }
456
- function isRecord(value) {
457
- return typeof value === "object" && value !== null && !Array.isArray(value);
458
- }
459
- /**
460
- * Parses validator output at the executable-code boundary.
461
- *
462
- * Validation issues are intentionally strict and bounded because authored and
463
- * installed generator code can return values that did not pass TypeScript.
464
- */
465
- export function parseParameterIssues(definition, value) {
466
- if (!Array.isArray(value)) {
467
- throw new TypeError("Generator validation must return an array of parameter issues.");
468
- }
469
- if (value.length > MAX_PARAMETER_ISSUES) {
470
- throw new TypeError(`Generator validation may return at most ${MAX_PARAMETER_ISSUES} issues.`);
471
- }
472
- const entries = readDenseArray(value, MAX_PARAMETER_ISSUES);
473
- if (entries === undefined) {
474
- throw new TypeError("Generator validation must return a dense array of issue data values.");
475
- }
476
- const parameterIds = new Set(definition.parameters.map((parameter) => parameter.id));
477
- const parsed = entries.map((entry, index) => {
478
- const path = `Generator validation issue ${index + 1}`;
479
- if (!isRecord(entry)) {
480
- throw new TypeError(`${path} must be an object.`);
481
- }
482
- const allowedKeys = new Set(["severity", "parameterId", "message"]);
483
- let keys;
484
- try {
485
- keys = Reflect.ownKeys(entry);
486
- }
487
- catch (cause) {
488
- throw new TypeError(`${path} fields could not be inspected.`, { cause });
489
- }
490
- const unknownKey = keys.find((key) => typeof key !== "string" || !allowedKeys.has(key));
491
- if (unknownKey !== undefined) {
492
- throw new TypeError(`${path} contains unknown field "${String(unknownKey)}".`);
493
- }
494
- const dataField = (key) => {
495
- let descriptor;
496
- try {
497
- descriptor = Object.getOwnPropertyDescriptor(entry, key);
498
- }
499
- catch (cause) {
500
- throw new TypeError(`${path}.${key} could not be inspected.`, { cause });
501
- }
502
- if (descriptor === undefined)
503
- return undefined;
504
- if (!("value" in descriptor)) {
505
- throw new TypeError(`${path}.${key} must be an own data field.`);
506
- }
507
- return descriptor.value;
508
- };
509
- const severity = dataField("severity");
510
- const message = dataField("message");
511
- const parameterId = dataField("parameterId");
512
- if (severity !== "error" && severity !== "warning") {
513
- throw new TypeError(`${path}.severity must be "error" or "warning".`);
514
- }
515
- if (typeof message !== "string" || message.trim().length === 0) {
516
- throw new TypeError(`${path}.message must be a non-empty string.`);
517
- }
518
- if (message.length > MAX_PARAMETER_ISSUE_MESSAGE_LENGTH) {
519
- throw new TypeError(`${path}.message may contain at most ${MAX_PARAMETER_ISSUE_MESSAGE_LENGTH} characters.`);
520
- }
521
- if (parameterId !== undefined &&
522
- (typeof parameterId !== "string" || !parameterIds.has(parameterId))) {
523
- throw new TypeError(`${path}.parameterId must identify a declared parameter.`);
524
- }
525
- return Object.freeze(parameterId === undefined ? { severity, message } : { severity, parameterId, message });
526
- });
527
- return Object.freeze(parsed);
528
- }
529
- function freezeParameters(parameters) {
530
- for (const value of Object.values(parameters)) {
531
- if (Array.isArray(value) || isFontSelection(value))
532
- Object.freeze(value);
533
- }
534
- return Object.freeze(parameters);
535
- }
536
- /**
537
- * Normalizes known values once, then aggregates schema and Generator-owned issues.
538
- * Obsolete keys never leak into Generator validation.
539
- */
540
- export function prepareParameters(definition, parameters, validate) {
541
- const schemaIssues = definition.parameters.flatMap((parameter) => validateDefinitionValue(parameter, ownValue(parameters, parameter.id)));
542
- const svgBytes = definition.parameters.reduce((total, parameter) => {
543
- const value = ownValue(parameters, parameter.id);
544
- return parameter.type === "svg" && typeof value === "string"
545
- ? total + svgParameterBytes(value)
546
- : total;
547
- }, 0);
548
- const projectSvgIssues = svgBytes > MAX_PROJECT_SVG_PARAMETER_BYTES
549
- ? [
550
- {
551
- severity: "error",
552
- message: "All SVG parameters together must be 512 KiB or smaller.",
553
- },
554
- ]
555
- : [];
556
- const normalized = normalizeParameters(definition, parameters);
557
- const customIssues = validate === undefined ? [] : parseParameterIssues(definition, validate(normalized));
558
- return {
559
- parameters: normalized,
560
- validation: aggregateParameterIssues(schemaIssues, projectSvgIssues, customIssues),
561
- };
562
- }
563
- /** Aggregates definition and Generator-owned validation issues. */
564
- export function validateParameters(definition, parameters, validate) {
565
- return prepareParameters(definition, parameters, validate).validation;
566
- }
1
+ export { EMPTY_SVG_PARAMETER_DEFAULT, MAX_PROJECT_SVG_PARAMETER_BYTES, MAX_SVG_PARAMETER_BYTES, parameterValueEquals, svgParameterBytes, } from "./parameters/values.js";
2
+ export { getDefaultParameters, normalizeParameters } from "./parameters/recovery.js";
3
+ export { MAX_PARAMETER_ISSUE_MESSAGE_LENGTH, MAX_PARAMETER_ISSUES, aggregateParameterIssues, parseParameterIssues, } from "./parameters/issues.js";
4
+ export { ParamDecodeError, createParamCodec } from "./parameters/strict.js";
5
+ export { prepareParameters, validateParameters } from "./parameters/preparation.js";
567
6
  //# sourceMappingURL=parameters.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parameters.js","sourceRoot":"","sources":["../src/parameters.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parameters.js","sourceRoot":"","sources":["../src/parameters.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,2BAA2B,EAC3B,+BAA+B,EAC/B,uBAAuB,EACvB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACrF,OAAO,EACL,kCAAkC,EAClC,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAO5E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,29 @@
1
+ import type { GeneratorDefinition, GeneratorIssue, GeneratorParams } from "./contracts.js";
2
+ import type { Preparation } from "./generator-module.js";
3
+ import { GENERATOR_PACKAGE_FORMAT_VERSION } from "./generator-package/constants.js";
4
+ import type { GeneratorServices } from "./generator-services.js";
5
+ /** A one-use closure captures preparation without exposing arbitrary prepared-value invocation. */
6
+ export interface PreparedBuild<Context, Output> {
7
+ readonly ok: true;
8
+ readonly issues: readonly GeneratorIssue[];
9
+ readonly build: (context: Context) => Output;
10
+ }
11
+ export interface ParsedGeneratorModule<D extends GeneratorDefinition = GeneratorDefinition, Context = unknown, Output = unknown> {
12
+ readonly formatVersion: typeof GENERATOR_PACKAGE_FORMAT_VERSION;
13
+ readonly generatorId: D["id"];
14
+ readonly version: D["version"];
15
+ readonly prepare: (parameters: GeneratorParams<D>, services: GeneratorServices) => PreparedBuild<Context, Output> | {
16
+ readonly ok: false;
17
+ readonly issues: readonly GeneratorIssue<D>[];
18
+ };
19
+ }
20
+ /** Inspects only the result envelope and issues. The prepared value remains opaque. */
21
+ export declare function parsePreparation<D extends GeneratorDefinition, P>(definition: D, result: unknown): Preparation<D, P>;
22
+ export declare function capturePreparation<D extends GeneratorDefinition, P, Context, Output>(definition: D, result: unknown, build: (prepared: P, context: Context) => Output): PreparedBuild<Context, Output> | {
23
+ readonly ok: false;
24
+ readonly issues: readonly GeneratorIssue<D>[];
25
+ };
26
+ /** Captures the exact format-2 surface; unsupported formats fail before callback invocation. */
27
+ export declare function parseGeneratorModule<D extends GeneratorDefinition, Context = unknown, Output = unknown>(value: unknown, definition: D): ParsedGeneratorModule<D, Context, Output>;
28
+ export declare function isGeneratorModule<D extends GeneratorDefinition>(value: unknown, definition: D): boolean;
29
+ //# sourceMappingURL=parse-generator-module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-generator-module.d.ts","sourceRoot":"","sources":["../src/parse-generator-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAC3F,OAAO,KAAK,EAAmB,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,gCAAgC,EAAE,MAAM,kCAAkC,CAAC;AACpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAajE,mGAAmG;AACnG,MAAM,WAAW,aAAa,CAAC,OAAO,EAAE,MAAM;IAC5C,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,MAAM,CAAC;CAC9C;AAED,MAAM,WAAW,qBAAqB,CACpC,CAAC,SAAS,mBAAmB,GAAG,mBAAmB,EACnD,OAAO,GAAG,OAAO,EACjB,MAAM,GAAG,OAAO;IAEhB,QAAQ,CAAC,aAAa,EAAE,OAAO,gCAAgC,CAAC;IAChE,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,CAChB,UAAU,EAAE,eAAe,CAAC,CAAC,CAAC,EAC9B,QAAQ,EAAE,iBAAiB,KAEzB,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,GAC9B;QAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,CAAA;KAAE,CAAC;CAC3E;AAiCD,uFAAuF;AACvF,wBAAgB,gBAAgB,CAAC,CAAC,SAAS,mBAAmB,EAAE,CAAC,EAC/D,UAAU,EAAE,CAAC,EACb,MAAM,EAAE,OAAO,GACd,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAyBnB;AAED,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,mBAAmB,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAClF,UAAU,EAAE,CAAC,EACb,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,KAAK,MAAM,GAE9C,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,GAC9B;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,cAAc,CAAC,CAAC,CAAC,EAAE,CAAA;CAAE,CAkBxE;AAED,gGAAgG;AAChG,wBAAgB,oBAAoB,CAClC,CAAC,SAAS,mBAAmB,EAC7B,OAAO,GAAG,OAAO,EACjB,MAAM,GAAG,OAAO,EAChB,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,GAAG,qBAAqB,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,CA2C1E;AAED,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,mBAAmB,EAC7D,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,CAAC,GACZ,OAAO,CAOT"}