@sxl-studio/token-transformer 1.0.0 → 2.0.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 (93) hide show
  1. package/README.en.md +77 -608
  2. package/README.md +77 -685
  3. package/config/sxl-transform.config.yaml +120 -0
  4. package/dist/cli.d.ts +1 -1
  5. package/dist/cli.js +411 -141
  6. package/dist/cli.js.map +1 -1
  7. package/dist/config/loader.d.ts +6 -0
  8. package/dist/config/loader.js +160 -0
  9. package/dist/config/loader.js.map +1 -0
  10. package/dist/config/schema.d.ts +847 -0
  11. package/dist/config/schema.js +123 -0
  12. package/dist/config/schema.js.map +1 -0
  13. package/dist/core/color-modifiers.d.ts +31 -0
  14. package/dist/core/color-modifiers.js +289 -0
  15. package/dist/core/color-modifiers.js.map +1 -0
  16. package/dist/core/color-parser.d.ts +24 -0
  17. package/dist/core/color-parser.js +281 -0
  18. package/dist/core/color-parser.js.map +1 -0
  19. package/dist/core/debug-report.d.ts +11 -0
  20. package/dist/core/debug-report.js +161 -0
  21. package/dist/core/debug-report.js.map +1 -0
  22. package/dist/core/incremental.d.ts +18 -0
  23. package/dist/core/incremental.js +105 -0
  24. package/dist/core/incremental.js.map +1 -0
  25. package/dist/core/math.d.ts +3 -0
  26. package/dist/core/math.js +261 -0
  27. package/dist/core/math.js.map +1 -0
  28. package/dist/core/parser.d.ts +4 -3
  29. package/dist/core/parser.js +68 -172
  30. package/dist/core/parser.js.map +1 -1
  31. package/dist/core/resolver.d.ts +26 -0
  32. package/dist/core/resolver.js +431 -0
  33. package/dist/core/resolver.js.map +1 -0
  34. package/dist/core/token-loader.d.ts +11 -0
  35. package/dist/core/token-loader.js +380 -0
  36. package/dist/core/token-loader.js.map +1 -0
  37. package/dist/core/token-parser.d.ts +9 -0
  38. package/dist/core/token-parser.js +138 -0
  39. package/dist/core/token-parser.js.map +1 -0
  40. package/dist/core/token-types.d.ts +7 -0
  41. package/dist/core/token-types.js +132 -0
  42. package/dist/core/token-types.js.map +1 -0
  43. package/dist/core/types.d.ts +154 -63
  44. package/dist/core/writer.d.ts +18 -5
  45. package/dist/core/writer.js +545 -91
  46. package/dist/core/writer.js.map +1 -1
  47. package/dist/emit/css.d.ts +2 -0
  48. package/dist/emit/css.js +538 -0
  49. package/dist/emit/css.js.map +1 -0
  50. package/dist/emit/kotlin.d.ts +2 -0
  51. package/dist/emit/kotlin.js +406 -0
  52. package/dist/emit/kotlin.js.map +1 -0
  53. package/dist/emit/shared.d.ts +13 -0
  54. package/dist/emit/shared.js +127 -0
  55. package/dist/emit/shared.js.map +1 -0
  56. package/dist/emit/swift.d.ts +2 -0
  57. package/dist/emit/swift.js +432 -0
  58. package/dist/emit/swift.js.map +1 -0
  59. package/dist/emit/typography.d.ts +17 -0
  60. package/dist/emit/typography.js +132 -0
  61. package/dist/emit/typography.js.map +1 -0
  62. package/dist/emit/xml.d.ts +2 -0
  63. package/dist/emit/xml.js +311 -0
  64. package/dist/emit/xml.js.map +1 -0
  65. package/dist/index.d.ts +15 -6
  66. package/dist/index.js +13 -5
  67. package/dist/index.js.map +1 -1
  68. package/dist/transformers/css.d.ts +1 -1
  69. package/dist/transformers/css.js +13 -482
  70. package/dist/transformers/css.js.map +1 -1
  71. package/dist/transformers/kotlin.d.ts +2 -2
  72. package/dist/transformers/kotlin.js +14 -442
  73. package/dist/transformers/kotlin.js.map +1 -1
  74. package/dist/transformers/swiftui.d.ts +2 -2
  75. package/dist/transformers/swiftui.js +14 -433
  76. package/dist/transformers/swiftui.js.map +1 -1
  77. package/dist/utils/color.d.ts +7 -5
  78. package/dist/utils/color.js +90 -86
  79. package/dist/utils/color.js.map +1 -1
  80. package/dist/utils/dimension.d.ts +8 -5
  81. package/dist/utils/dimension.js +54 -52
  82. package/dist/utils/dimension.js.map +1 -1
  83. package/dist/utils/naming.d.ts +10 -12
  84. package/dist/utils/naming.js +102 -44
  85. package/dist/utils/naming.js.map +1 -1
  86. package/package.json +30 -10
  87. package/config.example.json +0 -45
  88. package/dist/core/loader.d.ts +0 -8
  89. package/dist/core/loader.js +0 -105
  90. package/dist/core/loader.js.map +0 -1
  91. package/dist/transformers/vue3.d.ts +0 -28
  92. package/dist/transformers/vue3.js +0 -534
  93. package/dist/transformers/vue3.js.map +0 -1
@@ -0,0 +1,281 @@
1
+ /**
2
+ * CSS Color Parser — converts any CSS color format to Figma RGBA.
3
+ *
4
+ * Supports: HEX (#RGB, #RRGGBB), HEX8 (#RRGGBBAA),
5
+ * rgba(), hsla(), color(srgb ...), color(display-p3 ...),
6
+ * lch(), oklch(), named colors.
7
+ *
8
+ * All outputs are Figma-compatible { r, g, b, a } where r/g/b are 0..1.
9
+ */
10
+ const HEX3 = /^#([0-9a-f]{3})$/i;
11
+ const HEX6 = /^#([0-9a-f]{6})$/i;
12
+ const HEX8 = /^#([0-9a-f]{8})$/i;
13
+ const HEX4 = /^#([0-9a-f]{4})$/i;
14
+ const RGBA_RE = /^rgba?\(\s*(\d*\.?\d+)\s*[,\s]\s*(\d*\.?\d+)\s*[,\s]\s*(\d*\.?\d+)\s*(?:[,/]\s*(\d*\.?\d+%?))?\s*\)$/i;
15
+ const HSLA_RE = /^hsla?\(\s*(\d*\.?\d+)\s*[,\s]\s*(\d*\.?\d+)%\s*[,\s]\s*(\d*\.?\d+)%\s*(?:[,/]\s*(\d*\.?\d+%?))?\s*\)$/i;
16
+ const SRGB_RE = /^color\(\s*srgb\s+(\d*\.?\d+)\s+(\d*\.?\d+)\s+(\d*\.?\d+)\s*(?:\/\s*(\d*\.?\d+%?))?\s*\)$/i;
17
+ const P3_RE = /^color\(\s*display-p3\s+(\d*\.?\d+)\s+(\d*\.?\d+)\s+(\d*\.?\d+)\s*(?:\/\s*(\d*\.?\d+%?))?\s*\)$/i;
18
+ const LCH_RE = /^lch\(\s*(\d*\.?\d+)%?\s+(\d*\.?\d+)\s+(\d*\.?\d+)\s*(?:\/\s*(\d*\.?\d+%?))?\s*\)$/i;
19
+ const OKLCH_RE = /^oklch\(\s*(\d*\.?\d+)\s+(\d*\.?\d+)\s+(\d*\.?\d+)\s*(?:\/\s*(\d*\.?\d+%?))?\s*\)$/i;
20
+ function parseAlphaToken(s) {
21
+ if (s === undefined || s === "")
22
+ return 1;
23
+ if (s.endsWith("%"))
24
+ return parseFloat(s) / 100;
25
+ return parseFloat(s);
26
+ }
27
+ function clamp01(v) {
28
+ return Math.max(0, Math.min(1, v));
29
+ }
30
+ function parseHex(hex) {
31
+ let m = hex.match(HEX6);
32
+ if (m) {
33
+ const v = parseInt(m[1], 16);
34
+ return { r: ((v >> 16) & 0xff) / 255, g: ((v >> 8) & 0xff) / 255, b: (v & 0xff) / 255, a: 1 };
35
+ }
36
+ m = hex.match(HEX3);
37
+ if (m) {
38
+ const h = m[1];
39
+ const expanded = h[0] + h[0] + h[1] + h[1] + h[2] + h[2];
40
+ const v = parseInt(expanded, 16);
41
+ return { r: ((v >> 16) & 0xff) / 255, g: ((v >> 8) & 0xff) / 255, b: (v & 0xff) / 255, a: 1 };
42
+ }
43
+ m = hex.match(HEX8);
44
+ if (m) {
45
+ const v = parseInt(m[1], 16);
46
+ return {
47
+ r: ((v >> 24) & 0xff) / 255,
48
+ g: ((v >> 16) & 0xff) / 255,
49
+ b: ((v >> 8) & 0xff) / 255,
50
+ a: (v & 0xff) / 255,
51
+ };
52
+ }
53
+ m = hex.match(HEX4);
54
+ if (m) {
55
+ const h = m[1];
56
+ const expanded = h[0] + h[0] + h[1] + h[1] + h[2] + h[2] + h[3] + h[3];
57
+ const v = parseInt(expanded, 16);
58
+ return {
59
+ r: ((v >> 24) & 0xff) / 255,
60
+ g: ((v >> 16) & 0xff) / 255,
61
+ b: ((v >> 8) & 0xff) / 255,
62
+ a: (v & 0xff) / 255,
63
+ };
64
+ }
65
+ return null;
66
+ }
67
+ function parseRGBA(str) {
68
+ const m = str.match(RGBA_RE);
69
+ if (!m)
70
+ return null;
71
+ return {
72
+ r: clamp01(parseFloat(m[1]) / 255),
73
+ g: clamp01(parseFloat(m[2]) / 255),
74
+ b: clamp01(parseFloat(m[3]) / 255),
75
+ a: clamp01(parseAlphaToken(m[4])),
76
+ };
77
+ }
78
+ function hslToRgb(h, s, l) {
79
+ h = ((h % 360) + 360) % 360;
80
+ s = clamp01(s / 100);
81
+ l = clamp01(l / 100);
82
+ const c = (1 - Math.abs(2 * l - 1)) * s;
83
+ const x = c * (1 - Math.abs(((h / 60) % 2) - 1));
84
+ const m = l - c / 2;
85
+ let r = 0, g = 0, b = 0;
86
+ if (h < 60) {
87
+ r = c;
88
+ g = x;
89
+ b = 0;
90
+ }
91
+ else if (h < 120) {
92
+ r = x;
93
+ g = c;
94
+ b = 0;
95
+ }
96
+ else if (h < 180) {
97
+ r = 0;
98
+ g = c;
99
+ b = x;
100
+ }
101
+ else if (h < 240) {
102
+ r = 0;
103
+ g = x;
104
+ b = c;
105
+ }
106
+ else if (h < 300) {
107
+ r = x;
108
+ g = 0;
109
+ b = c;
110
+ }
111
+ else {
112
+ r = c;
113
+ g = 0;
114
+ b = x;
115
+ }
116
+ return [r + m, g + m, b + m];
117
+ }
118
+ function parseHSLA(str) {
119
+ const m = str.match(HSLA_RE);
120
+ if (!m)
121
+ return null;
122
+ const [rr, gg, bb] = hslToRgb(parseFloat(m[1]), parseFloat(m[2]), parseFloat(m[3]));
123
+ return { r: clamp01(rr), g: clamp01(gg), b: clamp01(bb), a: clamp01(parseAlphaToken(m[4])) };
124
+ }
125
+ function parseSRGB(str) {
126
+ const m = str.match(SRGB_RE);
127
+ if (!m)
128
+ return null;
129
+ return {
130
+ r: clamp01(parseFloat(m[1])),
131
+ g: clamp01(parseFloat(m[2])),
132
+ b: clamp01(parseFloat(m[3])),
133
+ a: clamp01(parseAlphaToken(m[4])),
134
+ };
135
+ }
136
+ function parseLCH(str) {
137
+ const m = str.match(LCH_RE);
138
+ if (!m)
139
+ return null;
140
+ const L = parseFloat(m[1]);
141
+ const C = parseFloat(m[2]);
142
+ const H = parseFloat(m[3]);
143
+ const a = parseAlphaToken(m[4]);
144
+ const [rr, gg, bb] = lchToSrgb(L, C, H);
145
+ return { r: clamp01(rr), g: clamp01(gg), b: clamp01(bb), a: clamp01(a) };
146
+ }
147
+ function parseOKLCH(str) {
148
+ const m = str.match(OKLCH_RE);
149
+ if (!m)
150
+ return null;
151
+ const L = parseFloat(m[1]);
152
+ const C = parseFloat(m[2]);
153
+ const H = parseFloat(m[3]);
154
+ const a = parseAlphaToken(m[4]);
155
+ const [rr, gg, bb] = oklchToSrgb(L, C, H);
156
+ return { r: clamp01(rr), g: clamp01(gg), b: clamp01(bb), a: clamp01(a) };
157
+ }
158
+ function parseP3(str) {
159
+ const m = str.match(P3_RE);
160
+ if (!m)
161
+ return null;
162
+ const r = parseFloat(m[1]);
163
+ const g = parseFloat(m[2]);
164
+ const b = parseFloat(m[3]);
165
+ const a = parseAlphaToken(m[4]);
166
+ // Approximate P3 -> sRGB gamut mapping (simple linear for now)
167
+ return {
168
+ r: clamp01(r),
169
+ g: clamp01(g),
170
+ b: clamp01(b),
171
+ a: clamp01(a),
172
+ };
173
+ }
174
+ // ─── LCH → sRGB conversion ───
175
+ function lchToLab(L, C, H) {
176
+ const hRad = (H * Math.PI) / 180;
177
+ return [L, C * Math.cos(hRad), C * Math.sin(hRad)];
178
+ }
179
+ function labToXyz(L, a, b) {
180
+ const fy = (L + 16) / 116;
181
+ const fx = a / 500 + fy;
182
+ const fz = fy - b / 200;
183
+ const eps = 216 / 24389;
184
+ const kappa = 24389 / 27;
185
+ const xr = fx ** 3 > eps ? fx ** 3 : (116 * fx - 16) / kappa;
186
+ const yr = L > kappa * eps ? ((L + 16) / 116) ** 3 : L / kappa;
187
+ const zr = fz ** 3 > eps ? fz ** 3 : (116 * fz - 16) / kappa;
188
+ // D65 white point
189
+ return [xr * 0.95047, yr * 1.0, zr * 1.08883];
190
+ }
191
+ function xyzToSrgb(x, y, z) {
192
+ let r = x * 3.2404542 + y * -1.5371385 + z * -0.4985314;
193
+ let g = x * -0.9692660 + y * 1.8760108 + z * 0.0415560;
194
+ let b = x * 0.0556434 + y * -0.2040259 + z * 1.0572252;
195
+ const gamma = (c) => c <= 0.0031308 ? 12.92 * c : 1.055 * Math.pow(c, 1 / 2.4) - 0.055;
196
+ r = gamma(r);
197
+ g = gamma(g);
198
+ b = gamma(b);
199
+ return [r, g, b];
200
+ }
201
+ function lchToSrgb(L, C, H) {
202
+ const [labL, labA, labB] = lchToLab(L, C, H);
203
+ const [x, y, z] = labToXyz(labL, labA, labB);
204
+ return xyzToSrgb(x, y, z);
205
+ }
206
+ // ─── OKLCH → sRGB conversion ───
207
+ function oklchToOklab(L, C, H) {
208
+ const hRad = (H * Math.PI) / 180;
209
+ return [L, C * Math.cos(hRad), C * Math.sin(hRad)];
210
+ }
211
+ function oklabToLinearSrgb(L, a, b) {
212
+ const l_ = L + 0.3963377774 * a + 0.2158037573 * b;
213
+ const m_ = L - 0.1055613458 * a - 0.0638541728 * b;
214
+ const s_ = L - 0.0894841775 * a - 1.2914855480 * b;
215
+ const l = l_ ** 3;
216
+ const m = m_ ** 3;
217
+ const s = s_ ** 3;
218
+ return [
219
+ +4.0767416621 * l - 3.3077115913 * m + 0.2309699292 * s,
220
+ -1.2684380046 * l + 2.6097574011 * m - 0.3413193965 * s,
221
+ -0.0041960863 * l - 0.7034186147 * m + 1.7076147010 * s,
222
+ ];
223
+ }
224
+ function linearToSrgb(c) {
225
+ return c <= 0.0031308 ? 12.92 * c : 1.055 * Math.pow(c, 1 / 2.4) - 0.055;
226
+ }
227
+ function oklchToSrgb(L, C, H) {
228
+ const [okL, okA, okB] = oklchToOklab(L, C, H);
229
+ const [lr, lg, lb] = oklabToLinearSrgb(okL, okA, okB);
230
+ return [linearToSrgb(lr), linearToSrgb(lg), linearToSrgb(lb)];
231
+ }
232
+ // ─── Main Parser ───
233
+ const parseCache = new Map();
234
+ /**
235
+ * Parse any CSS color string into Figma RGBA.
236
+ * Returns null if the format is not recognized.
237
+ */
238
+ export function parseCSSColor(value) {
239
+ const trimmed = value.trim();
240
+ if (!trimmed)
241
+ return null;
242
+ const cached = parseCache.get(trimmed);
243
+ if (cached !== undefined)
244
+ return cached;
245
+ let result = null;
246
+ if (trimmed.toLowerCase() === "transparent") {
247
+ result = { r: 0, g: 0, b: 0, a: 0.0001 };
248
+ parseCache.set(trimmed, result);
249
+ return result;
250
+ }
251
+ if (trimmed.startsWith("#")) {
252
+ result = parseHex(trimmed);
253
+ }
254
+ else if (trimmed.startsWith("rgba") || trimmed.startsWith("rgb(")) {
255
+ result = parseRGBA(trimmed);
256
+ }
257
+ else if (trimmed.startsWith("hsla") || trimmed.startsWith("hsl(")) {
258
+ result = parseHSLA(trimmed);
259
+ }
260
+ else if (trimmed.startsWith("color(srgb")) {
261
+ result = parseSRGB(trimmed);
262
+ }
263
+ else if (trimmed.startsWith("color(display-p3")) {
264
+ result = parseP3(trimmed);
265
+ }
266
+ else if (trimmed.startsWith("lch(")) {
267
+ result = parseLCH(trimmed);
268
+ }
269
+ else if (trimmed.startsWith("oklch(")) {
270
+ result = parseOKLCH(trimmed);
271
+ }
272
+ parseCache.set(trimmed, result);
273
+ return result;
274
+ }
275
+ /**
276
+ * Clear the parse cache (useful between export runs).
277
+ */
278
+ export function clearColorCache() {
279
+ parseCache.clear();
280
+ }
281
+ //# sourceMappingURL=color-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color-parser.js","sourceRoot":"","sources":["../../src/core/color-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { Diagnostic, TokenSetResolved } from "./types.js";
2
+ export type DebugReportInput = {
3
+ configPath: string;
4
+ action: string;
5
+ diagnostics: Diagnostic[];
6
+ tokenSets: TokenSetResolved[];
7
+ generatedFiles: string[];
8
+ generatedAt?: Date;
9
+ };
10
+ export declare function buildDebugReport(input: DebugReportInput): string;
11
+ export declare function defaultDebugReportPath(configPath: string): string;
@@ -0,0 +1,161 @@
1
+ import path from "node:path";
2
+ export function buildDebugReport(input) {
3
+ const generatedAt = input.generatedAt ?? new Date();
4
+ const summary = summarizeDiagnostics(input.diagnostics);
5
+ const tokenSourceIndex = buildTokenSourceIndex(input.tokenSets);
6
+ const unresolvedRows = buildUnresolvedAliasRows(input.diagnostics, tokenSourceIndex);
7
+ const syntaxRows = buildAliasSyntaxRows(input.diagnostics, tokenSourceIndex);
8
+ const lines = [];
9
+ lines.push("# Transformer Debug Report");
10
+ lines.push("");
11
+ lines.push(`- Generated: ${generatedAt.toISOString()}`);
12
+ lines.push(`- Config: \`${input.configPath}\``);
13
+ lines.push(`- Issue action: \`${input.action}\``);
14
+ lines.push(`- Output files prepared: ${input.generatedFiles.length}`);
15
+ lines.push("");
16
+ lines.push("## Summary");
17
+ lines.push("");
18
+ lines.push(`- Errors: ${summary.errors}`);
19
+ lines.push(`- Warnings: ${summary.warnings}`);
20
+ lines.push(`- Infos: ${summary.infos}`);
21
+ lines.push(`- Total diagnostics: ${input.diagnostics.length}`);
22
+ lines.push("");
23
+ if (summary.byCode.length > 0) {
24
+ lines.push("## Diagnostics By Code");
25
+ lines.push("");
26
+ lines.push("| Code | Count |");
27
+ lines.push("| --- | ---: |");
28
+ for (const entry of summary.byCode) {
29
+ lines.push(`| \`${entry.code}\` | ${entry.count} |`);
30
+ }
31
+ lines.push("");
32
+ }
33
+ if (unresolvedRows.length > 0) {
34
+ lines.push("## Unresolved Aliases");
35
+ lines.push("");
36
+ lines.push("| Alias | Affected token | Source file |");
37
+ lines.push("| --- | --- | --- |");
38
+ for (const row of unresolvedRows.slice(0, 200)) {
39
+ lines.push(`| \`${row.alias}\` | \`${row.tokenPath}\` | \`${row.sourceFile}\` |`);
40
+ }
41
+ if (unresolvedRows.length > 200) {
42
+ lines.push(`| ... | ... | ... (${unresolvedRows.length - 200} more) |`);
43
+ }
44
+ lines.push("");
45
+ }
46
+ if (syntaxRows.length > 0) {
47
+ lines.push("## Alias Syntax Issues");
48
+ lines.push("");
49
+ lines.push("| Token | Source file | Problem |");
50
+ lines.push("| --- | --- | --- |");
51
+ for (const row of syntaxRows.slice(0, 200)) {
52
+ lines.push(`| \`${row.tokenPath}\` | \`${row.sourceFile}\` | ${escapePipe(row.message)} |`);
53
+ }
54
+ if (syntaxRows.length > 200) {
55
+ lines.push(`| ... | ... | ... (${syntaxRows.length - 200} more) |`);
56
+ }
57
+ lines.push("");
58
+ }
59
+ lines.push("## How To Fix");
60
+ lines.push("");
61
+ lines.push("1. `ALIAS_UNRESOLVED`: verify that the alias path exists in included token sets and selected collection/mode refs.");
62
+ lines.push("2. `ALIAS_SYNTAX_INVALID`: fix malformed alias syntax (`{alias.name}`), remove duplicate separators (`..`, `//`), trim spaces.");
63
+ lines.push("3. If unresolved aliases are intentional for a subset, set tokenSet `unresolvedAliases: warn|ignore`.");
64
+ lines.push("4. For component styles, ensure component aliases reference project/core tokens that are present in resolver scope.");
65
+ lines.push("");
66
+ lines.push("## Raw Diagnostics");
67
+ lines.push("");
68
+ for (const item of input.diagnostics) {
69
+ const code = item.code ?? "UNKNOWN";
70
+ const tokenPart = item.tokenPath ? ` token=${item.tokenPath}` : "";
71
+ const outputPart = item.outputId ? ` output=${item.outputId}` : "";
72
+ lines.push(`- [${item.level.toUpperCase()}][${code}] ${item.message}${tokenPart}${outputPart}`);
73
+ }
74
+ lines.push("");
75
+ return `${lines.join("\n")}\n`;
76
+ }
77
+ function summarizeDiagnostics(diagnostics) {
78
+ let errors = 0;
79
+ let warnings = 0;
80
+ let infos = 0;
81
+ const byCode = new Map();
82
+ for (const item of diagnostics) {
83
+ if (item.level === "error")
84
+ errors += 1;
85
+ if (item.level === "warn")
86
+ warnings += 1;
87
+ if (item.level === "info")
88
+ infos += 1;
89
+ const code = item.code ?? "UNKNOWN";
90
+ byCode.set(code, (byCode.get(code) ?? 0) + 1);
91
+ }
92
+ return {
93
+ errors,
94
+ warnings,
95
+ infos,
96
+ byCode: [...byCode.entries()]
97
+ .map(([code, count]) => ({ code, count }))
98
+ .sort((a, b) => b.count - a.count || a.code.localeCompare(b.code)),
99
+ };
100
+ }
101
+ function buildTokenSourceIndex(tokenSets) {
102
+ const byPath = new Map();
103
+ const add = (tokenPath, sourceFile) => {
104
+ const sources = byPath.get(tokenPath) ?? new Set();
105
+ sources.add(sourceFile);
106
+ byPath.set(tokenPath, sources);
107
+ };
108
+ for (const tokenSet of tokenSets) {
109
+ for (const token of tokenSet.tokens) {
110
+ add(token.path, token.sourceFile);
111
+ }
112
+ for (const token of tokenSet.resolverTokens) {
113
+ add(token.path, token.sourceFile);
114
+ }
115
+ }
116
+ return new Map([...byPath.entries()]
117
+ .map(([tokenPath, sources]) => [tokenPath, [...sources].sort()]));
118
+ }
119
+ function buildUnresolvedAliasRows(diagnostics, tokenSourceIndex) {
120
+ const rows = [];
121
+ for (const item of diagnostics) {
122
+ if (item.code !== "ALIAS_UNRESOLVED")
123
+ continue;
124
+ const alias = extractAliasFromMessage(item.message);
125
+ const tokenPath = item.tokenPath ?? "<unknown>";
126
+ const sourceFiles = tokenSourceIndex.get(tokenPath) ?? ["<unknown>"];
127
+ for (const sourceFile of sourceFiles) {
128
+ rows.push({ alias, tokenPath, sourceFile });
129
+ }
130
+ }
131
+ return rows;
132
+ }
133
+ function buildAliasSyntaxRows(diagnostics, tokenSourceIndex) {
134
+ const rows = [];
135
+ for (const item of diagnostics) {
136
+ if (item.code !== "ALIAS_SYNTAX_INVALID" && item.code !== "ALIAS_SYNTAX_AUTOFIXED")
137
+ continue;
138
+ const tokenPath = item.tokenPath ?? "<unknown>";
139
+ const sourceFiles = tokenSourceIndex.get(tokenPath) ?? ["<unknown>"];
140
+ for (const sourceFile of sourceFiles) {
141
+ rows.push({
142
+ tokenPath,
143
+ sourceFile,
144
+ message: item.message,
145
+ });
146
+ }
147
+ }
148
+ return rows;
149
+ }
150
+ function extractAliasFromMessage(message) {
151
+ const match = message.match(/\{([^{}]+)\}/);
152
+ return match?.[1] ?? "<unknown>";
153
+ }
154
+ function escapePipe(value) {
155
+ return value.replace(/\|/g, "\\|");
156
+ }
157
+ export function defaultDebugReportPath(configPath) {
158
+ const baseName = path.basename(configPath, path.extname(configPath));
159
+ return `${baseName}.debug.md`;
160
+ }
161
+ //# sourceMappingURL=debug-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"debug-report.js","sourceRoot":"","sources":["../../src/core/debug-report.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { OutputFile, SourceFileFingerprint, SmartOutputState, SmartTransformState } from "./types.js";
2
+ export type SourceDiff = {
3
+ changed: Set<string>;
4
+ removed: Set<string>;
5
+ };
6
+ export declare function defaultStatePath(configPath: string): string;
7
+ export declare function readTransformState(statePath: string): Promise<SmartTransformState | null>;
8
+ export declare function writeTransformState(statePath: string, state: SmartTransformState): Promise<void>;
9
+ export declare function computeConfigHash(config: unknown): string;
10
+ export declare function computeContentHash(content: string): string;
11
+ export declare function diffSourceFiles(previous: Record<string, SourceFileFingerprint>, current: Record<string, SourceFileFingerprint>): SourceDiff;
12
+ export declare function buildOutputStateEntries(files: OutputFile[]): Record<string, SmartOutputState>;
13
+ export declare function createTransformState(input: {
14
+ configHash: string;
15
+ sourceFiles: Record<string, SourceFileFingerprint>;
16
+ outputs: Record<string, SmartOutputState>;
17
+ generatedAt?: Date;
18
+ }): SmartTransformState;
@@ -0,0 +1,105 @@
1
+ import crypto from "node:crypto";
2
+ import fs from "node:fs/promises";
3
+ import path from "node:path";
4
+ const STATE_VERSION = 1;
5
+ export function defaultStatePath(configPath) {
6
+ const parsed = path.parse(configPath);
7
+ return path.join(parsed.dir, `${parsed.name}.state.json`);
8
+ }
9
+ export async function readTransformState(statePath) {
10
+ try {
11
+ const raw = await fs.readFile(statePath, "utf-8");
12
+ const parsed = JSON.parse(raw);
13
+ if (!parsed || typeof parsed !== "object")
14
+ return null;
15
+ if (parsed.version !== 1)
16
+ return null;
17
+ if (typeof parsed.configHash !== "string")
18
+ return null;
19
+ if (typeof parsed.generatedAt !== "string")
20
+ return null;
21
+ if (!parsed.sourceFiles || typeof parsed.sourceFiles !== "object")
22
+ return null;
23
+ if (!parsed.outputs || typeof parsed.outputs !== "object")
24
+ return null;
25
+ return parsed;
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ export async function writeTransformState(statePath, state) {
32
+ await fs.mkdir(path.dirname(statePath), { recursive: true });
33
+ await fs.writeFile(statePath, `${JSON.stringify(state, null, 2)}\n`, "utf-8");
34
+ }
35
+ export function computeConfigHash(config) {
36
+ return hashString(stableStringify(config));
37
+ }
38
+ export function computeContentHash(content) {
39
+ return hashString(content);
40
+ }
41
+ export function diffSourceFiles(previous, current) {
42
+ const changed = new Set();
43
+ const removed = new Set();
44
+ for (const [filePath, meta] of Object.entries(current)) {
45
+ const prev = previous[filePath];
46
+ if (!prev) {
47
+ changed.add(filePath);
48
+ continue;
49
+ }
50
+ if (prev.size !== meta.size || prev.mtimeMs !== meta.mtimeMs) {
51
+ changed.add(filePath);
52
+ }
53
+ }
54
+ for (const filePath of Object.keys(previous)) {
55
+ if (!(filePath in current)) {
56
+ removed.add(filePath);
57
+ }
58
+ }
59
+ return { changed, removed };
60
+ }
61
+ export function buildOutputStateEntries(files) {
62
+ const entries = {};
63
+ for (const file of files) {
64
+ const outputId = file.outputId ?? "<unknown-output>";
65
+ entries[file.path] = {
66
+ path: file.path,
67
+ outputId,
68
+ tokenSetId: file.tokenSetId,
69
+ contentHash: computeContentHash(file.content),
70
+ sourceFiles: [...new Set(file.sourceFiles ?? [])].sort(),
71
+ };
72
+ }
73
+ return entries;
74
+ }
75
+ export function createTransformState(input) {
76
+ const generatedAt = input.generatedAt ?? new Date();
77
+ return {
78
+ version: STATE_VERSION,
79
+ configHash: input.configHash,
80
+ generatedAt: generatedAt.toISOString(),
81
+ sourceFiles: input.sourceFiles,
82
+ outputs: input.outputs,
83
+ };
84
+ }
85
+ function stableStringify(value) {
86
+ return JSON.stringify(sortDeep(value));
87
+ }
88
+ function sortDeep(value) {
89
+ if (Array.isArray(value)) {
90
+ return value.map((item) => sortDeep(item));
91
+ }
92
+ if (!value || typeof value !== "object")
93
+ return value;
94
+ const entries = Object.entries(value)
95
+ .sort(([a], [b]) => a.localeCompare(b))
96
+ .map(([key, nested]) => [key, sortDeep(nested)]);
97
+ const out = {};
98
+ for (const [key, nested] of entries)
99
+ out[key] = nested;
100
+ return out;
101
+ }
102
+ function hashString(value) {
103
+ return crypto.createHash("sha1").update(value).digest("hex");
104
+ }
105
+ //# sourceMappingURL=incremental.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"incremental.js","sourceRoot":"","sources":["../../src/core/incremental.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export type ResolveAliasFn = (path: string) => number | null;
2
+ export declare function isMathExpression(value: string): boolean;
3
+ export declare function evaluateMathExpression(expr: string, resolve: ResolveAliasFn, remBase?: number): number | null;