@bitmagic/cli 0.1.59-dev.2 → 0.1.59-dev.4

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 (48) hide show
  1. package/README.md +99 -0
  2. package/dist/assets/materials.d.ts +165 -0
  3. package/dist/assets/materials.js +395 -0
  4. package/dist/assets/materials.js.map +1 -0
  5. package/dist/assets/vxl-summary.js +12 -5
  6. package/dist/assets/vxl-summary.js.map +1 -1
  7. package/dist/cli.d.ts +1 -0
  8. package/dist/cli.js +2 -0
  9. package/dist/cli.js.map +1 -1
  10. package/dist/commands/assets.d.ts +25 -0
  11. package/dist/commands/assets.js +245 -2
  12. package/dist/commands/assets.js.map +1 -1
  13. package/dist/commands/generate.d.ts +4 -0
  14. package/dist/commands/generate.js +33 -2
  15. package/dist/commands/generate.js.map +1 -1
  16. package/dist/commands/theme.d.ts +3 -0
  17. package/dist/commands/theme.js +201 -0
  18. package/dist/commands/theme.js.map +1 -0
  19. package/dist/scaffold/project-files.d.ts +1 -0
  20. package/dist/scaffold/project-files.js +47 -1
  21. package/dist/scaffold/project-files.js.map +1 -1
  22. package/dist/scaffold/project.js +2 -1
  23. package/dist/scaffold/project.js.map +1 -1
  24. package/dist/theme/hud-theme-catalog.d.ts +236 -0
  25. package/dist/theme/hud-theme-catalog.js +386 -0
  26. package/dist/theme/hud-theme-catalog.js.map +1 -0
  27. package/dist/theme/theme-color-math.d.ts +21 -0
  28. package/dist/theme/theme-color-math.js +99 -0
  29. package/dist/theme/theme-color-math.js.map +1 -0
  30. package/dist/theme/theme-io.d.ts +49 -0
  31. package/dist/theme/theme-io.js +190 -0
  32. package/dist/theme/theme-io.js.map +1 -0
  33. package/dist/theme/theme-merge.d.ts +36 -0
  34. package/dist/theme/theme-merge.js +81 -0
  35. package/dist/theme/theme-merge.js.map +1 -0
  36. package/dist/theme/theme-report.d.ts +28 -0
  37. package/dist/theme/theme-report.js +142 -0
  38. package/dist/theme/theme-report.js.map +1 -0
  39. package/dist/theme/theme-stored.d.ts +21 -0
  40. package/dist/theme/theme-stored.js +50 -0
  41. package/dist/theme/theme-stored.js.map +1 -0
  42. package/dist/theme/theme-validate.d.ts +41 -0
  43. package/dist/theme/theme-validate.js +406 -0
  44. package/dist/theme/theme-validate.js.map +1 -0
  45. package/dist/verify/hud-theme.d.ts +5 -3
  46. package/dist/verify/hud-theme.js +5 -3
  47. package/dist/verify/hud-theme.js.map +1 -1
  48. package/package.json +4 -4
@@ -0,0 +1,406 @@
1
+ /**
2
+ * The strict write-time HUD theme validator.
3
+ *
4
+ * STRICTER than the engine's load-time validator on purpose, and that asymmetry
5
+ * is the design: at WRITE time a bad per-element leaf is an error the agent can
6
+ * fix in the same turn, while at LOAD time the engine must keep rendering
7
+ * already-published themes, so it warns and drops the leaf instead. Everything
8
+ * this validator accepts, the engine accepts; the reverse is not required.
9
+ *
10
+ * This replaced `lightValidateTheme`, which skipped glow keys, every numeric
11
+ * range, the whole `elements` block, decoration slot suitability and decoration
12
+ * size/position/repeat — six ways a theme could pass the write tool and then
13
+ * silently render as the DEFAULT look at engine load, which reads as "theming
14
+ * is broken" rather than "the value was wrong". Parity with the engine is
15
+ * enforced by scripts/check-hud-catalog.ts, which runs both validators over a
16
+ * fixture corpus under tsx and compares verdicts.
17
+ *
18
+ * Validation rules mirror game/src/engine/hud/validateTheme.ts; vocabulary
19
+ * comes from the drift-checked catalog next door.
20
+ */
21
+ import { HUD_DECORATIONS, HUD_DECORATION_SLOTS, HUD_ELEMENT_CLASSES, HUD_FONTS, HUD_GLOW_KEYS, HUD_ICON_KEYS, } from './hud-theme-catalog.js';
22
+ const HEX_COLOR = /^#[0-9a-fA-F]{6}$/;
23
+ // Mirrors the engine's TILE_SIZE: "<n>px|% <n>px|%", decimals allowed.
24
+ const TILE_SIZE = /^\d{1,4}(?:\.\d{1,2})?(?:px|%) \d{1,4}(?:\.\d{1,2})?(?:px|%)$/;
25
+ const POSITION_VALUES = [
26
+ 'top', 'top-right', 'right', 'bottom-right', 'bottom', 'bottom-left', 'left', 'top-left', 'center',
27
+ ];
28
+ const REPEAT_VALUES = ['no-repeat', 'repeat', 'repeat-x', 'repeat-y'];
29
+ const BORDER_REPEAT_VALUES = ['stretch', 'repeat', 'round', 'space'];
30
+ const COLOR_KEYS = [
31
+ 'primary', 'danger', 'warning', 'success', 'background', 'surface', 'text', 'textMuted', 'outline',
32
+ ];
33
+ const REQUIRED_COLOR_KEYS = ['primary', 'danger', 'background', 'surface', 'text'];
34
+ // Levenshtein, matching the engine: suggest only when the distance is small
35
+ // relative to the input. A wild guess gets the full candidate list from the
36
+ // error message, never false confidence in one arbitrary name.
37
+ function editDistance(a, b) {
38
+ let prev = Array.from({ length: b.length + 1 }, (_, i) => i);
39
+ for (let i = 1; i <= a.length; i++) {
40
+ const cur = [i];
41
+ for (let j = 1; j <= b.length; j++) {
42
+ const deletion = (prev[j] ?? 0) + 1;
43
+ const insertion = (cur[j - 1] ?? 0) + 1;
44
+ const substitution = (prev[j - 1] ?? 0) + (a[i - 1] === b[j - 1] ? 0 : 1);
45
+ cur[j] = Math.min(deletion, insertion, substitution);
46
+ }
47
+ prev = cur;
48
+ }
49
+ return prev[b.length] ?? 0;
50
+ }
51
+ export function suggestClosest(value, candidates) {
52
+ const v = value.toLowerCase();
53
+ let best;
54
+ let bestScore = Infinity;
55
+ for (const c of candidates) {
56
+ const score = editDistance(v, c.toLowerCase());
57
+ if (score < bestScore) {
58
+ bestScore = score;
59
+ best = c;
60
+ }
61
+ }
62
+ const maxDistance = Math.max(2, Math.ceil(v.length / 3));
63
+ return bestScore <= maxDistance ? best : undefined;
64
+ }
65
+ function isObject(v) {
66
+ return typeof v === 'object' && v !== null && !Array.isArray(v);
67
+ }
68
+ function checkNumber(ctx, path, value, min, max) {
69
+ if (typeof value !== 'number' || !Number.isFinite(value) || value < min || value > max) {
70
+ ctx.errors.push({ path, message: `${JSON.stringify(value)} is not a number in [${min}, ${max}]` });
71
+ }
72
+ }
73
+ function checkHexAt(ctx, path, value) {
74
+ if (typeof value !== 'string' || !HEX_COLOR.test(value)) {
75
+ ctx.errors.push({
76
+ path,
77
+ message: `${JSON.stringify(value)} is not a 6-digit hex color`,
78
+ suggestion: 'Use e.g. "#A0DAB9" — six hex digits with a leading #.',
79
+ });
80
+ }
81
+ }
82
+ function checkKeyed(ctx, path, value, allowed) {
83
+ if (typeof value === 'string' && allowed.includes(value))
84
+ return;
85
+ const close = typeof value === 'string' ? suggestClosest(value, allowed) : undefined;
86
+ ctx.errors.push({
87
+ path,
88
+ message: `${JSON.stringify(value)} is not one of: ${allowed.join(', ')}`,
89
+ ...(close ? { suggestion: `Closest match: "${close}"` } : {}),
90
+ });
91
+ }
92
+ function checkFontBlock(ctx, path, raw, required) {
93
+ if (raw === undefined) {
94
+ if (required)
95
+ ctx.errors.push({ path, message: 'font is required (object with at least { key })' });
96
+ return;
97
+ }
98
+ if (!isObject(raw)) {
99
+ ctx.errors.push({ path, message: 'font must be an object' });
100
+ return;
101
+ }
102
+ if (raw.key === undefined) {
103
+ if (required)
104
+ ctx.errors.push({ path: `${path}.key`, message: 'font.key is required (string)' });
105
+ }
106
+ else if (typeof raw.key !== 'string' || !(raw.key in HUD_FONTS)) {
107
+ const fontKeys = Object.keys(HUD_FONTS);
108
+ const close = typeof raw.key === 'string' ? suggestClosest(raw.key, fontKeys) : undefined;
109
+ ctx.errors.push({
110
+ path: `${path}.key`,
111
+ message: `${JSON.stringify(raw.key)} is not a curated font key`,
112
+ suggestion: close
113
+ ? `Closest match: "${close}". Full list: ${fontKeys.join(', ')}`
114
+ : `Full list: ${fontKeys.join(', ')}`,
115
+ });
116
+ }
117
+ else {
118
+ // Auto-correct case IN PLACE when the font doesn't support it — the
119
+ // corrected object is what gets written, and the warning explains the
120
+ // swap so the agent can mention it to the user.
121
+ //
122
+ // Only a VALID case value is eligible: the auto-correct used to run
123
+ // first and mutate any string (including "lower"/"uppercase") to
124
+ // suitsCase[0], so the enum check below then saw the corrected value and
125
+ // the kit passed with a warning where the engine hard-rejects the whole
126
+ // theme — kit-ok/engine-reject, the exact parity direction the gate
127
+ // exists to forbid.
128
+ const entry = HUD_FONTS[raw.key];
129
+ if ((raw.case === 'upper' || raw.case === 'normal')
130
+ && !entry.suitsCase.includes(raw.case)) {
131
+ const originalCase = raw.case;
132
+ const correctedCase = entry.suitsCase[0];
133
+ raw.case = correctedCase;
134
+ ctx.warnings.push({
135
+ path: `${path}.case`,
136
+ message: `font "${raw.key}" is designed for case "${correctedCase}" — auto-corrected from "${originalCase}". Pick a different font (e.g. "bebas-neue", "rubik-mono-one") if you want case "${originalCase}".`,
137
+ suggestion: `Either keep the auto-correction (case: "${correctedCase}") or change font.key.`,
138
+ });
139
+ }
140
+ }
141
+ if (raw.case !== undefined && raw.case !== 'upper' && raw.case !== 'normal') {
142
+ ctx.errors.push({ path: `${path}.case`, message: `${JSON.stringify(raw.case)} is not "upper" or "normal"` });
143
+ }
144
+ if (raw.weightBody !== undefined && ![300, 400, 500, 700].includes(raw.weightBody)) {
145
+ ctx.errors.push({ path: `${path}.weightBody`, message: `${JSON.stringify(raw.weightBody)} is not one of 300, 400, 500, 700` });
146
+ }
147
+ if (raw.weightHeading !== undefined && ![400, 500, 700, 900].includes(raw.weightHeading)) {
148
+ ctx.errors.push({ path: `${path}.weightHeading`, message: `${JSON.stringify(raw.weightHeading)} is not one of 400, 500, 700, 900` });
149
+ }
150
+ if (raw.trackingLabel !== undefined)
151
+ checkNumber(ctx, `${path}.trackingLabel`, raw.trackingLabel, 0, 4);
152
+ if (raw.outlineWidth !== undefined)
153
+ checkNumber(ctx, `${path}.outlineWidth`, raw.outlineWidth, 0, 3);
154
+ if (raw.sizeScale !== undefined)
155
+ checkNumber(ctx, `${path}.sizeScale`, raw.sizeScale, 0.85, 1.3);
156
+ }
157
+ function checkColorsBlock(ctx, path, raw, required) {
158
+ if (raw === undefined) {
159
+ if (required)
160
+ ctx.errors.push({ path, message: 'colors is required' });
161
+ return;
162
+ }
163
+ if (!isObject(raw)) {
164
+ ctx.errors.push({ path, message: 'colors must be an object' });
165
+ return;
166
+ }
167
+ if (required) {
168
+ for (const key of REQUIRED_COLOR_KEYS) {
169
+ if (raw[key] === undefined) {
170
+ ctx.errors.push({ path: `${path}.${key}`, message: `colors.${key} is required (hex string)` });
171
+ }
172
+ }
173
+ }
174
+ for (const key of Object.keys(raw)) {
175
+ if (!COLOR_KEYS.includes(key)) {
176
+ const close = suggestClosest(key, COLOR_KEYS);
177
+ ctx.errors.push({
178
+ path: `${path}.${key}`,
179
+ message: `unknown color token "${key}"`,
180
+ suggestion: close ? `Closest match: "${close}". Known: ${COLOR_KEYS.join(', ')}` : `Known: ${COLOR_KEYS.join(', ')}`,
181
+ });
182
+ continue;
183
+ }
184
+ checkHexAt(ctx, `${path}.${key}`, raw[key]);
185
+ }
186
+ }
187
+ function checkShapeBlock(ctx, path, raw) {
188
+ if (raw === undefined)
189
+ return;
190
+ if (!isObject(raw)) {
191
+ ctx.errors.push({ path, message: 'shape must be an object' });
192
+ return;
193
+ }
194
+ if (raw.radiusPill !== undefined)
195
+ checkNumber(ctx, `${path}.radiusPill`, raw.radiusPill, 0, 500);
196
+ if (raw.radiusCard !== undefined)
197
+ checkNumber(ctx, `${path}.radiusCard`, raw.radiusCard, 0, 32);
198
+ if (raw.borderWidth !== undefined)
199
+ checkNumber(ctx, `${path}.borderWidth`, raw.borderWidth, 0, 6);
200
+ if (raw.bevel !== undefined)
201
+ checkNumber(ctx, `${path}.bevel`, raw.bevel, 0, 1);
202
+ if (raw.gloss !== undefined)
203
+ checkNumber(ctx, `${path}.gloss`, raw.gloss, 0, 1);
204
+ if (raw.glow !== undefined)
205
+ checkKeyed(ctx, `${path}.glow`, raw.glow, HUD_GLOW_KEYS);
206
+ if (raw.glowColor !== undefined)
207
+ checkHexAt(ctx, `${path}.glowColor`, raw.glowColor);
208
+ if (raw.imageRendering !== undefined && raw.imageRendering !== 'auto' && raw.imageRendering !== 'pixelated') {
209
+ ctx.errors.push({ path: `${path}.imageRendering`, message: `${JSON.stringify(raw.imageRendering)} is not "auto" or "pixelated"` });
210
+ }
211
+ }
212
+ function checkDecorationValue(ctx, path, slotName, value) {
213
+ if (typeof value === 'string') {
214
+ if (!(value in HUD_DECORATIONS)) {
215
+ const decKeys = Object.keys(HUD_DECORATIONS);
216
+ const close = suggestClosest(value, decKeys);
217
+ ctx.errors.push({
218
+ path,
219
+ message: `"${value}" is not a curated decoration key`,
220
+ suggestion: close
221
+ ? `Closest match: "${close}". Full list: ${decKeys.join(', ')}`
222
+ : `Full list: ${decKeys.join(', ')}`,
223
+ });
224
+ return;
225
+ }
226
+ // Suitability is a WARNING, matching the engine: an unsuited pairing
227
+ // renders, it just usually looks wrong.
228
+ const entry = HUD_DECORATIONS[value];
229
+ if (!entry.suitsSlots.includes(slotName)) {
230
+ ctx.warnings.push({
231
+ path,
232
+ message: `decoration "${value}" isn't designed for slot "${slotName}" (suits: ${entry.suitsSlots.join(', ')})`,
233
+ });
234
+ }
235
+ return;
236
+ }
237
+ if (isObject(value)) {
238
+ if (typeof value.svg !== 'string') {
239
+ ctx.errors.push({ path: `${path}.svg`, message: 'inline decoration must have an svg string' });
240
+ return;
241
+ }
242
+ if (value.svg.length > 16384) {
243
+ ctx.errors.push({ path: `${path}.svg`, message: 'inline SVG exceeds 16kb limit' });
244
+ }
245
+ if (slotName === 'borderImage') {
246
+ if (value.borderSlice !== undefined)
247
+ checkNumber(ctx, `${path}.borderSlice`, value.borderSlice, 0, 200);
248
+ if (value.repeat !== undefined)
249
+ checkKeyed(ctx, `${path}.repeat`, value.repeat, BORDER_REPEAT_VALUES);
250
+ }
251
+ else {
252
+ if (value.size !== undefined && value.size !== 'cover' && value.size !== 'contain' && value.size !== 'auto'
253
+ && !(typeof value.size === 'string' && TILE_SIZE.test(value.size))) {
254
+ ctx.errors.push({
255
+ path: `${path}.size`,
256
+ message: `${JSON.stringify(value.size)} is not "cover", "contain", "auto", or an explicit tile size`,
257
+ suggestion: 'Use "32px 32px" for a repeating pattern (a viewBox-only SVG has no intrinsic size, so "auto" stretches one copy over the whole element), or one of the keywords.',
258
+ });
259
+ }
260
+ if (value.position !== undefined)
261
+ checkKeyed(ctx, `${path}.position`, value.position, POSITION_VALUES);
262
+ if (value.repeat !== undefined)
263
+ checkKeyed(ctx, `${path}.repeat`, value.repeat, REPEAT_VALUES);
264
+ }
265
+ return;
266
+ }
267
+ ctx.errors.push({ path, message: 'expected curated decoration key string or inline SVG object' });
268
+ }
269
+ function checkDecorationsBlock(ctx, path, raw) {
270
+ if (raw === undefined || raw === null)
271
+ return;
272
+ if (!isObject(raw)) {
273
+ ctx.errors.push({ path, message: 'decorations must be an object keyed by HUD element class' });
274
+ return;
275
+ }
276
+ for (const elementClass of Object.keys(raw)) {
277
+ if (!HUD_ELEMENT_CLASSES.includes(elementClass)) {
278
+ const close = suggestClosest(elementClass, HUD_ELEMENT_CLASSES);
279
+ ctx.errors.push({
280
+ path: `${path}.${elementClass}`,
281
+ message: `unknown HUD element class "${elementClass}"`,
282
+ suggestion: close
283
+ ? `Closest match: "${close}". Known: ${HUD_ELEMENT_CLASSES.join(', ')}`
284
+ : `Known: ${HUD_ELEMENT_CLASSES.join(', ')}`,
285
+ });
286
+ continue;
287
+ }
288
+ const slots = raw[elementClass];
289
+ if (!isObject(slots))
290
+ continue;
291
+ for (const slotName of Object.keys(slots)) {
292
+ if (!HUD_DECORATION_SLOTS.includes(slotName)) {
293
+ const close = suggestClosest(slotName, HUD_DECORATION_SLOTS);
294
+ ctx.errors.push({
295
+ path: `${path}.${elementClass}.${slotName}`,
296
+ message: `unknown slot "${slotName}"`,
297
+ suggestion: close
298
+ ? `Closest match: "${close}". Known: ${HUD_DECORATION_SLOTS.join(', ')}`
299
+ : `Known: ${HUD_DECORATION_SLOTS.join(', ')}`,
300
+ });
301
+ continue;
302
+ }
303
+ checkDecorationValue(ctx, `${path}.${elementClass}.${slotName}`, slotName, slots[slotName]);
304
+ }
305
+ }
306
+ }
307
+ function checkElementsBlock(ctx, path, raw) {
308
+ if (raw === undefined || raw === null)
309
+ return;
310
+ if (!isObject(raw)) {
311
+ ctx.errors.push({ path, message: 'elements must be an object keyed by HUD element class' });
312
+ return;
313
+ }
314
+ for (const elementClass of Object.keys(raw)) {
315
+ if (!HUD_ELEMENT_CLASSES.includes(elementClass)) {
316
+ const close = suggestClosest(elementClass, HUD_ELEMENT_CLASSES);
317
+ ctx.errors.push({
318
+ path: `${path}.${elementClass}`,
319
+ message: `unknown HUD element class "${elementClass}"`,
320
+ suggestion: close
321
+ ? `Closest match: "${close}". Known: ${HUD_ELEMENT_CLASSES.join(', ')}`
322
+ : `Known: ${HUD_ELEMENT_CLASSES.join(', ')}`,
323
+ });
324
+ continue;
325
+ }
326
+ const override = raw[elementClass];
327
+ if (!isObject(override)) {
328
+ ctx.errors.push({ path: `${path}.${elementClass}`, message: 'expected a partial theme object' });
329
+ continue;
330
+ }
331
+ // At write time these are ERRORS, unlike the engine's load-time
332
+ // warn-and-drop: the agent can fix the leaf in the same turn, and an
333
+ // override the engine would drop is an override the user asked for and
334
+ // will not get.
335
+ checkFontBlock(ctx, `${path}.${elementClass}.font`, override.font, false);
336
+ if (override.colors !== undefined)
337
+ checkColorsBlock(ctx, `${path}.${elementClass}.colors`, override.colors, false);
338
+ checkShapeBlock(ctx, `${path}.${elementClass}.shape`, override.shape);
339
+ checkDecorationsBlock(ctx, `${path}.${elementClass}.decorations`, override.decorations);
340
+ }
341
+ }
342
+ /**
343
+ * Whether an issue would make the ENGINE reject the whole theme, or only drop a
344
+ * leaf while the theme keeps rendering.
345
+ *
346
+ * This validator is deliberately stricter than the engine at two spots, and the
347
+ * difference matters when DESCRIBING a stored theme: per-element
348
+ * font/colors/shape leaves are warn-and-dropped at engine load (the theme still
349
+ * renders minus the leaf), and unknown top-level color tokens are ignored
350
+ * outright. Telling a user "the engine is falling back to the default look"
351
+ * over one droppable leaf describes a fallback that is not happening — and an
352
+ * agent acting on that "repairs" a theme the user is actually seeing.
353
+ */
354
+ export function isEngineFatalIssue(issue) {
355
+ if (/^elements\.[^.]+\.(colors|shape|font)\./.test(issue.path))
356
+ return false;
357
+ if (issue.message.startsWith('unknown color token'))
358
+ return false;
359
+ return true;
360
+ }
361
+ export function validateThemeStrict(theme) {
362
+ const ctx = { errors: [], warnings: [] };
363
+ if (!isObject(theme)) {
364
+ ctx.errors.push({ path: '', message: 'theme must be an object' });
365
+ return { ok: false, errors: ctx.errors, warnings: ctx.warnings };
366
+ }
367
+ if (typeof theme.name !== 'string' || theme.name.length === 0) {
368
+ ctx.errors.push({ path: 'name', message: 'name is required (non-empty string)' });
369
+ }
370
+ checkFontBlock(ctx, 'font', theme.font, true);
371
+ checkColorsBlock(ctx, 'colors', theme.colors, true);
372
+ checkShapeBlock(ctx, 'shape', theme.shape);
373
+ checkDecorationsBlock(ctx, 'decorations', theme.decorations);
374
+ checkElementsBlock(ctx, 'elements', theme.elements);
375
+ // icons
376
+ const icons = theme.icons;
377
+ if (icons !== undefined && icons !== null) {
378
+ if (!isObject(icons)) {
379
+ ctx.errors.push({ path: 'icons', message: 'icons must be an object keyed by slot name (heart, mouse, arrow)' });
380
+ }
381
+ else {
382
+ for (const key of Object.keys(icons)) {
383
+ if (!HUD_ICON_KEYS.includes(key)) {
384
+ ctx.errors.push({
385
+ path: `icons.${key}`,
386
+ message: `unknown icon slot "${key}"`,
387
+ suggestion: `Known: ${HUD_ICON_KEYS.join(', ')}`,
388
+ });
389
+ continue;
390
+ }
391
+ const value = icons[key];
392
+ if (value === undefined || value === null)
393
+ continue;
394
+ if (typeof value !== 'string') {
395
+ ctx.errors.push({ path: `icons.${key}`, message: 'icon SVG must be a string' });
396
+ continue;
397
+ }
398
+ if (value.length > 16384) {
399
+ ctx.errors.push({ path: `icons.${key}`, message: 'icon SVG exceeds 16kb limit' });
400
+ }
401
+ }
402
+ }
403
+ }
404
+ return { ok: ctx.errors.length === 0, errors: ctx.errors, warnings: ctx.warnings };
405
+ }
406
+ //# sourceMappingURL=theme-validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theme-validate.js","sourceRoot":"","sources":["../../src/theme/theme-validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACH,eAAe,EACf,oBAAoB,EACpB,mBAAmB,EACnB,SAAS,EACT,aAAa,EACb,aAAa,GAEhB,MAAM,wBAAwB,CAAC;AAQhC,MAAM,SAAS,GAAG,mBAAmB,CAAC;AACtC,uEAAuE;AACvE,MAAM,SAAS,GAAG,+DAA+D,CAAC;AAClF,MAAM,eAAe,GAAG;IACpB,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ;CAC5F,CAAC;AACX,MAAM,aAAa,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAU,CAAC;AAC/E,MAAM,oBAAoB,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,CAAU,CAAC;AAE9E,MAAM,UAAU,GAAG;IACf,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS;CAC5F,CAAC;AACX,MAAM,mBAAmB,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,CAAU,CAAC;AAE5F,4EAA4E;AAC5E,4EAA4E;AAC5E,+DAA+D;AAC/D,SAAS,YAAY,CAAC,CAAS,EAAE,CAAS;IACtC,IAAI,IAAI,GAAa,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;IACvE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACjC,MAAM,GAAG,GAAa,CAAC,CAAC,CAAC,CAAC;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACpC,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;YACxC,MAAM,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1E,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,GAAG,GAAG,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa,EAAE,UAAiC;IAC3E,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,IAAI,IAAwB,CAAC;IAC7B,IAAI,SAAS,GAAG,QAAQ,CAAC;IACzB,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/C,IAAI,KAAK,GAAG,SAAS,EAAE,CAAC;YACpB,SAAS,GAAG,KAAK,CAAC;YAClB,IAAI,GAAG,CAAC,CAAC;QACb,CAAC;IACL,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;IACzD,OAAO,SAAS,IAAI,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAOD,SAAS,QAAQ,CAAC,CAAU;IACxB,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC;AAED,SAAS,WAAW,CAAC,GAAQ,EAAE,IAAY,EAAE,KAAc,EAAE,GAAW,EAAE,GAAW;IACjF,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;QACrF,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,wBAAwB,GAAG,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC;IACvG,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,GAAQ,EAAE,IAAY,EAAE,KAAc;IACtD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YACZ,IAAI;YACJ,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,6BAA6B;YAC9D,UAAU,EAAE,uDAAuD;SACtE,CAAC,CAAC;IACP,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CACf,GAAQ,EACR,IAAY,EACZ,KAAc,EACd,OAAyB;IAEzB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAK,OAAiC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO;IAC5F,MAAM,KAAK,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrF,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;QACZ,IAAI;QACJ,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,mBAAmB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACxE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,mBAAmB,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChE,CAAC,CAAC;AACP,CAAC;AAED,SAAS,cAAc,CAAC,GAAQ,EAAE,IAAY,EAAE,GAAY,EAAE,QAAiB;IAC3E,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,IAAI,QAAQ;YAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,iDAAiD,EAAE,CAAC,CAAC;QACpG,OAAO;IACX,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACjB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAC,CAAC;QAC7D,OAAO;IACX,CAAC;IACD,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,EAAE,CAAC;QACxB,IAAI,QAAQ;YAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,MAAM,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC,CAAC;IACrG,CAAC;SAAM,IAAI,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,SAAS,CAAC,EAAE,CAAC;QAChE,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC1F,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;YACZ,IAAI,EAAE,GAAG,IAAI,MAAM;YACnB,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,4BAA4B;YAC/D,UAAU,EAAE,KAAK;gBACb,CAAC,CAAC,mBAAmB,KAAK,iBAAiB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;gBAChE,CAAC,CAAC,cAAc,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAC5C,CAAC,CAAC;IACP,CAAC;SAAM,CAAC;QACJ,oEAAoE;QACpE,sEAAsE;QACtE,gDAAgD;QAChD,EAAE;QACF,oEAAoE;QACpE,iEAAiE;QACjE,yEAAyE;QACzE,wEAAwE;QACxE,oEAAoE;QACpE,oBAAoB;QACpB,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,GAA6B,CAAC,CAAC;QAC3D,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC;eAC5C,CAAE,KAAK,CAAC,SAAmC,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACpE,MAAM,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC;YAC9B,MAAM,aAAa,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACzC,GAAG,CAAC,IAAI,GAAG,aAAa,CAAC;YACzB,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,GAAG,IAAI,OAAO;gBACpB,OAAO,EAAE,SAAS,GAAG,CAAC,GAAG,2BAA2B,aAAa,4BAA4B,YAAY,oFAAoF,YAAY,IAAI;gBAC7M,UAAU,EAAE,2CAA2C,aAAa,wBAAwB;aAC/F,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IACD,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC1E,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,6BAA6B,EAAE,CAAC,CAAC;IACjH,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,UAAoB,CAAC,EAAE,CAAC;QAC3F,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,aAAa,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,mCAAmC,EAAE,CAAC,CAAC;IACnI,CAAC;IACD,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS,IAAI,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,aAAuB,CAAC,EAAE,CAAC;QACjG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,gBAAgB,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,aAAa,CAAC,mCAAmC,EAAE,CAAC,CAAC;IACzI,CAAC;IACD,IAAI,GAAG,CAAC,aAAa,KAAK,SAAS;QAAE,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,gBAAgB,EAAE,GAAG,CAAC,aAAa,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACxG,IAAI,GAAG,CAAC,YAAY,KAAK,SAAS;QAAE,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,eAAe,EAAE,GAAG,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACrG,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS;QAAE,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,YAAY,EAAE,GAAG,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;AACrG,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAQ,EAAE,IAAY,EAAE,GAAY,EAAE,QAAiB;IAC7E,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACpB,IAAI,QAAQ;YAAE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,oBAAoB,EAAE,CAAC,CAAC;QACvE,OAAO;IACX,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACjB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,0BAA0B,EAAE,CAAC,CAAC;QAC/D,OAAO;IACX,CAAC;IACD,IAAI,QAAQ,EAAE,CAAC;QACX,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;YACpC,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;gBACzB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,EAAE,OAAO,EAAE,UAAU,GAAG,2BAA2B,EAAE,CAAC,CAAC;YACnG,CAAC;QACL,CAAC;IACL,CAAC;IACD,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACjC,IAAI,CAAE,UAAoC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACvD,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAC9C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE;gBACtB,OAAO,EAAE,wBAAwB,GAAG,GAAG;gBACvC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,mBAAmB,KAAK,aAAa,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aACvH,CAAC,CAAC;YACH,SAAS;QACb,CAAC;QACD,UAAU,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAChD,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,GAAQ,EAAE,IAAY,EAAE,GAAY;IACzD,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO;IAC9B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACjB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;QAC9D,OAAO;IACX,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS;QAAE,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,aAAa,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IACjG,IAAI,GAAG,CAAC,UAAU,KAAK,SAAS;QAAE,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,aAAa,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAChG,IAAI,GAAG,CAAC,WAAW,KAAK,SAAS;QAAE,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,cAAc,EAAE,GAAG,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAClG,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;QAAE,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChF,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;QAAE,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAChF,IAAI,GAAG,CAAC,IAAI,KAAK,SAAS;QAAE,UAAU,CAAC,GAAG,EAAE,GAAG,IAAI,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IACrF,IAAI,GAAG,CAAC,SAAS,KAAK,SAAS;QAAE,UAAU,CAAC,GAAG,EAAE,GAAG,IAAI,YAAY,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;IACrF,IAAI,GAAG,CAAC,cAAc,KAAK,SAAS,IAAI,GAAG,CAAC,cAAc,KAAK,MAAM,IAAI,GAAG,CAAC,cAAc,KAAK,WAAW,EAAE,CAAC;QAC1G,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,iBAAiB,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,+BAA+B,EAAE,CAAC,CAAC;IACvI,CAAC;AACL,CAAC;AAED,SAAS,oBAAoB,CAAC,GAAQ,EAAE,IAAY,EAAE,QAAgB,EAAE,KAAc;IAClF,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,CAAC,KAAK,IAAI,eAAe,CAAC,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC7C,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;gBACZ,IAAI;gBACJ,OAAO,EAAE,IAAI,KAAK,mCAAmC;gBACrD,UAAU,EAAE,KAAK;oBACb,CAAC,CAAC,mBAAmB,KAAK,iBAAiB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAC/D,CAAC,CAAC,cAAc,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC3C,CAAC,CAAC;YACH,OAAO;QACX,CAAC;QACD,qEAAqE;QACrE,wCAAwC;QACxC,MAAM,KAAK,GAAG,eAAe,CAAC,KAAqC,CAAC,CAAC;QACrE,IAAI,CAAE,KAAK,CAAC,UAAoC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClE,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACd,IAAI;gBACJ,OAAO,EAAE,eAAe,KAAK,8BAA8B,QAAQ,aAAa,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;aACjH,CAAC,CAAC;QACP,CAAC;QACD,OAAO;IACX,CAAC;IACD,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAClB,IAAI,OAAO,KAAK,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAChC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,MAAM,EAAE,OAAO,EAAE,2CAA2C,EAAE,CAAC,CAAC;YAC/F,OAAO;QACX,CAAC;QACD,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;YAC3B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,MAAM,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC,CAAC;QACvF,CAAC;QACD,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;YAC7B,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;gBAAE,WAAW,CAAC,GAAG,EAAE,GAAG,IAAI,cAAc,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;YACxG,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;gBAAE,UAAU,CAAC,GAAG,EAAE,GAAG,IAAI,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAC1G,CAAC;aAAM,CAAC;YACJ,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;mBACpG,CAAC,CAAC,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;gBACrE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,GAAG,IAAI,OAAO;oBACpB,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,8DAA8D;oBACpG,UAAU,EAAE,kKAAkK;iBACjL,CAAC,CAAC;YACP,CAAC;YACD,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS;gBAAE,UAAU,CAAC,GAAG,EAAE,GAAG,IAAI,WAAW,EAAE,KAAK,CAAC,QAAQ,EAAE,eAAe,CAAC,CAAC;YACvG,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;gBAAE,UAAU,CAAC,GAAG,EAAE,GAAG,IAAI,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QACnG,CAAC;QACD,OAAO;IACX,CAAC;IACD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,6DAA6D,EAAE,CAAC,CAAC;AACtG,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAQ,EAAE,IAAY,EAAE,GAAY;IAC/D,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO;IAC9C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACjB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,0DAA0D,EAAE,CAAC,CAAC;QAC/F,OAAO;IACX,CAAC;IACD,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAE,mBAA6C,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACzE,MAAM,KAAK,GAAG,cAAc,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;YAChE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,GAAG,IAAI,IAAI,YAAY,EAAE;gBAC/B,OAAO,EAAE,8BAA8B,YAAY,GAAG;gBACtD,UAAU,EAAE,KAAK;oBACb,CAAC,CAAC,mBAAmB,KAAK,aAAa,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACvE,CAAC,CAAC,UAAU,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aACnD,CAAC,CAAC;YACH,SAAS;QACb,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAS;QAC/B,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,IAAI,CAAE,oBAA8C,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtE,MAAM,KAAK,GAAG,cAAc,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC;gBAC7D,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,GAAG,IAAI,IAAI,YAAY,IAAI,QAAQ,EAAE;oBAC3C,OAAO,EAAE,iBAAiB,QAAQ,GAAG;oBACrC,UAAU,EAAE,KAAK;wBACb,CAAC,CAAC,mBAAmB,KAAK,aAAa,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBACxE,CAAC,CAAC,UAAU,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBACpD,CAAC,CAAC;gBACH,SAAS;YACb,CAAC;YACD,oBAAoB,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,YAAY,IAAI,QAAQ,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChG,CAAC;IACL,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAQ,EAAE,IAAY,EAAE,GAAY;IAC5D,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO;IAC9C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACjB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,uDAAuD,EAAE,CAAC,CAAC;QAC5F,OAAO;IACX,CAAC;IACD,KAAK,MAAM,YAAY,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAE,mBAA6C,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACzE,MAAM,KAAK,GAAG,cAAc,CAAC,YAAY,EAAE,mBAAmB,CAAC,CAAC;YAChE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;gBACZ,IAAI,EAAE,GAAG,IAAI,IAAI,YAAY,EAAE;gBAC/B,OAAO,EAAE,8BAA8B,YAAY,GAAG;gBACtD,UAAU,EAAE,KAAK;oBACb,CAAC,CAAC,mBAAmB,KAAK,aAAa,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACvE,CAAC,CAAC,UAAU,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aACnD,CAAC,CAAC;YACH,SAAS;QACb,CAAC;QACD,MAAM,QAAQ,GAAG,GAAG,CAAC,YAAY,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YACtB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,GAAG,IAAI,IAAI,YAAY,EAAE,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAAC,CAAC;YACjG,SAAS;QACb,CAAC;QACD,gEAAgE;QAChE,qEAAqE;QACrE,uEAAuE;QACvE,gBAAgB;QAChB,cAAc,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,YAAY,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1E,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS;YAAE,gBAAgB,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,YAAY,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACnH,eAAe,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,YAAY,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtE,qBAAqB,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,YAAY,cAAc,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC5F,CAAC;AACL,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAA6B;IAC5D,IAAI,yCAAyC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7E,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,qBAAqB,CAAC;QAAE,OAAO,KAAK,CAAC;IAClE,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAc;IAC9C,MAAM,GAAG,GAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IAE9C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACnB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;QAClE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;IACrE,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5D,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,qCAAqC,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9C,gBAAgB,CAAC,GAAG,EAAE,QAAQ,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACpD,eAAe,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3C,qBAAqB,CAAC,GAAG,EAAE,aAAa,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;IAC7D,kBAAkB,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEpD,QAAQ;IACR,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;IAC1B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACnB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,kEAAkE,EAAE,CAAC,CAAC;QACpH,CAAC;aAAM,CAAC;YACJ,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAE,aAAuC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;oBAC1D,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC;wBACZ,IAAI,EAAE,SAAS,GAAG,EAAE;wBACpB,OAAO,EAAE,sBAAsB,GAAG,GAAG;wBACrC,UAAU,EAAE,UAAU,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBACnD,CAAC,CAAC;oBACH,SAAS;gBACb,CAAC;gBACD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;gBACzB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI;oBAAE,SAAS;gBACpD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBAC5B,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,EAAE,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC,CAAC;oBAChF,SAAS;gBACb,CAAC;gBACD,IAAI,KAAK,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;oBACvB,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,EAAE,EAAE,OAAO,EAAE,6BAA6B,EAAE,CAAC,CAAC;gBACtF,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;AACvF,CAAC"}
@@ -9,9 +9,11 @@
9
9
  * it survives for as long as nobody diffs the intended look against the shipped one.
10
10
  *
11
11
  * The hosted agent is protected from this by `write-hud-theme`, which validates before it writes
12
- * and answers with a closest-match suggestion. A CLI project has no such tool: the theme is a hand
13
- * edit to a JSON file, so this is the lane where the mistake actually happens and the lane with no
14
- * check until this one.
12
+ * and answers with a closest-match suggestion. `bitmagic theme set|patch` now gives the CLI lane the
13
+ * same write-time guard over a gate-enforced mirror of that validator but only for edits made
14
+ * THROUGH it. A hand edit to world.json, a vendored engine older than the CLI's copy, or a theme
15
+ * that validates yet still fails in the browser all land here, which is why this check stays: it is
16
+ * the only one that reads what the engine itself said.
15
17
  *
16
18
  * WHY PARSE THE CONSOLE rather than validate statically here. The obvious alternative is to read
17
19
  * world.json and check it against the engine's own validator, and it is not available: the vendored
@@ -9,9 +9,11 @@
9
9
  * it survives for as long as nobody diffs the intended look against the shipped one.
10
10
  *
11
11
  * The hosted agent is protected from this by `write-hud-theme`, which validates before it writes
12
- * and answers with a closest-match suggestion. A CLI project has no such tool: the theme is a hand
13
- * edit to a JSON file, so this is the lane where the mistake actually happens and the lane with no
14
- * check until this one.
12
+ * and answers with a closest-match suggestion. `bitmagic theme set|patch` now gives the CLI lane the
13
+ * same write-time guard over a gate-enforced mirror of that validator but only for edits made
14
+ * THROUGH it. A hand edit to world.json, a vendored engine older than the CLI's copy, or a theme
15
+ * that validates yet still fails in the browser all land here, which is why this check stays: it is
16
+ * the only one that reads what the engine itself said.
15
17
  *
16
18
  * WHY PARSE THE CONSOLE rather than validate statically here. The obvious alternative is to read
17
19
  * world.json and check it against the engine's own validator, and it is not available: the vendored
@@ -1 +1 @@
1
- {"version":3,"file":"hud-theme.js","sourceRoot":"","sources":["../../src/verify/hud-theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,2FAA2F;AAC3F,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAExC,uFAAuF;AACvF,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAE9C,wDAAwD;AACxD,MAAM,aAAa,GAAG,gCAAgC,CAAC;AAgBvD;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,YAAsB;IACzD,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9C,IAAI,MAAM,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/B,mFAAmF;IACnF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACnE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACvE,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEtE,6FAA6F;IAC7F,0FAA0F;IAC1F,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"hud-theme.js","sourceRoot":"","sources":["../../src/verify/hud-theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,2FAA2F;AAC3F,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAExC,uFAAuF;AACvF,MAAM,cAAc,GAAG,sBAAsB,CAAC;AAE9C,wDAAwD;AACxD,MAAM,aAAa,GAAG,gCAAgC,CAAC;AAgBvD;;;;;;;;;GASG;AACH,MAAM,UAAU,oBAAoB,CAAC,YAAsB;IACzD,KAAK,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAClD,MAAM,OAAO,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC;IACvC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC9C,IAAI,MAAM,KAAK,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAE/B,mFAAmF;IACnF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACnE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,IAAI,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IACvE,IAAI,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;IAEtE,6FAA6F;IAC7F,0FAA0F;IAC1F,OAAO,IAAI,CAAC;AACd,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bitmagic/cli",
3
- "version": "0.1.59-dev.2",
3
+ "version": "0.1.59-dev.4",
4
4
  "description": "Build Bitmagic games from your own agent tool",
5
5
  "license": "SEE LICENSE IN LICENSE.md",
6
6
  "author": "Bitmagic Oy",
@@ -23,9 +23,9 @@
23
23
  "fflate": "^0.8.2",
24
24
  "playwright-core": "^1.59.1",
25
25
  "tar": "^7.4.3",
26
- "@bitmagic/animation-forger": "0.1.14-dev.2",
27
- "@bitmagic/asset-core": "0.2.14-dev.2",
28
- "@bitmagic/world-forger": "0.1.19-dev.2"
26
+ "@bitmagic/animation-forger": "0.1.14-dev.4",
27
+ "@bitmagic/world-forger": "0.1.19-dev.4",
28
+ "@bitmagic/asset-core": "0.2.14-dev.4"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@eslint/js": "^9.38.0",