@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,261 @@
1
+ const ALIAS_RE = /\{([^}]+)\}/g;
2
+ const MATH_OPERATORS = /[+\-*/%]/;
3
+ const FUNC_NAMES = [
4
+ "floor", "ceil", "round", "trunc",
5
+ "min", "max", "clamp",
6
+ "abs", "sign", "mod", "pow", "sqrt", "hypot",
7
+ "exp", "log", "log2", "log10",
8
+ "sin", "cos", "tan", "asin", "acos", "atan", "atan2",
9
+ ];
10
+ const CONST_NAMES = {
11
+ pi: Math.PI,
12
+ e: Math.E,
13
+ };
14
+ const ALL_IDENTIFIERS = [...FUNC_NAMES, ...Object.keys(CONST_NAMES)];
15
+ const FUNC_RE = new RegExp(`\\b(${FUNC_NAMES.join("|")})\\s*\\(`, "i");
16
+ const SIMPLE_VALUE_RE = /^-?[\d.]+\s*(px|rem|%|em|pt|ms|s|vw|vh|vmin|vmax|ch|ex|cm|mm|in|pc|dp|sp)?$/i;
17
+ export function isMathExpression(value) {
18
+ const trimmed = value.trim();
19
+ if (/^\{[^}]+\}$/.test(trimmed))
20
+ return false;
21
+ if (SIMPLE_VALUE_RE.test(trimmed))
22
+ return false;
23
+ if (FUNC_RE.test(trimmed))
24
+ return true;
25
+ if (trimmed.includes("{")) {
26
+ const withoutAliases = trimmed.replace(ALIAS_RE, "0");
27
+ if (/(\d(?:\.\d+)?)\s*(px|rem|em|%|pt|ms|s|vw|vh|vmin|vmax|ch|ex|cm|mm|in|pc|dp|sp)\b/gi.test(withoutAliases)) {
28
+ return true;
29
+ }
30
+ if (MATH_OPERATORS.test(withoutAliases))
31
+ return true;
32
+ const stripped = withoutAliases.replace(/\s+/g, "");
33
+ if (stripped !== "0" && stripped.length > 0)
34
+ return true;
35
+ }
36
+ return MATH_OPERATORS.test(trimmed) && /\d/.test(trimmed);
37
+ }
38
+ function stripUnits(resolved, remBase) {
39
+ return resolved.replace(/(\d+(?:\.\d+)?)\s*(px|rem|em|%|pt|ms|s|vw|vh|vmin|vmax|ch|ex|cm|mm|in|pc|dp|sp)\b/gi, (_match, numStr, unit) => {
40
+ const n = parseFloat(numStr);
41
+ const lower = unit.toLowerCase();
42
+ if (lower === "rem" || lower === "em")
43
+ return String(n * remBase);
44
+ if (lower === "s")
45
+ return String(n * 1000);
46
+ return numStr;
47
+ });
48
+ }
49
+ export function evaluateMathExpression(expr, resolve, remBase = 16) {
50
+ try {
51
+ let resolved = expr;
52
+ let hasUnresolved = false;
53
+ resolved = resolved.replace(ALIAS_RE, (_match, path) => {
54
+ const value = resolve(path);
55
+ if (value === null || Number.isNaN(value)) {
56
+ hasUnresolved = true;
57
+ return "NaN";
58
+ }
59
+ return value < 0 ? `(${value})` : String(value);
60
+ });
61
+ if (hasUnresolved)
62
+ return null;
63
+ resolved = stripUnits(resolved, remBase);
64
+ return safeEval(resolved);
65
+ }
66
+ catch {
67
+ return null;
68
+ }
69
+ }
70
+ function safeEval(expr) {
71
+ const tokens = tokenize(expr);
72
+ if (!tokens)
73
+ return null;
74
+ const parsedTokens = tokens;
75
+ let pos = 0;
76
+ function peek() {
77
+ return pos < parsedTokens.length ? parsedTokens[pos] : null;
78
+ }
79
+ function consume() {
80
+ return parsedTokens[pos++];
81
+ }
82
+ function parseExpression() {
83
+ let left = parseTerm();
84
+ if (left === null)
85
+ return null;
86
+ while (peek() === "+" || peek() === "-") {
87
+ const op = consume();
88
+ const right = parseTerm();
89
+ if (right === null)
90
+ return null;
91
+ left = op === "+" ? left + right : left - right;
92
+ }
93
+ return left;
94
+ }
95
+ function parseTerm() {
96
+ let left = parseFactor();
97
+ if (left === null)
98
+ return null;
99
+ while (peek() === "*" || peek() === "/" || peek() === "%") {
100
+ const op = consume();
101
+ const right = parseFactor();
102
+ if (right === null)
103
+ return null;
104
+ if (op === "/") {
105
+ if (right === 0)
106
+ return null;
107
+ left = left / right;
108
+ }
109
+ else if (op === "%") {
110
+ if (right === 0)
111
+ return null;
112
+ left = left % right;
113
+ }
114
+ else {
115
+ left = left * right;
116
+ }
117
+ }
118
+ return left;
119
+ }
120
+ function parseArgList() {
121
+ if (peek() !== "(")
122
+ return null;
123
+ consume();
124
+ const args = [];
125
+ if (peek() === ")") {
126
+ consume();
127
+ return args;
128
+ }
129
+ const first = parseExpression();
130
+ if (first === null)
131
+ return null;
132
+ args.push(first);
133
+ while (peek() === ",") {
134
+ consume();
135
+ const arg = parseExpression();
136
+ if (arg === null)
137
+ return null;
138
+ args.push(arg);
139
+ }
140
+ if (peek() !== ")")
141
+ return null;
142
+ consume();
143
+ return args;
144
+ }
145
+ function parseFactor() {
146
+ const token = peek();
147
+ if (token === null)
148
+ return null;
149
+ const lower = token.toLowerCase();
150
+ if (CONST_NAMES[lower] !== undefined) {
151
+ consume();
152
+ return CONST_NAMES[lower];
153
+ }
154
+ if (FUNC_NAMES.includes(lower)) {
155
+ const funcName = consume().toLowerCase();
156
+ const args = parseArgList();
157
+ if (args === null)
158
+ return null;
159
+ switch (funcName) {
160
+ case "floor": return args.length === 1 ? Math.floor(args[0]) : null;
161
+ case "ceil": return args.length === 1 ? Math.ceil(args[0]) : null;
162
+ case "trunc": return args.length === 1 ? Math.trunc(args[0]) : null;
163
+ case "round":
164
+ if (args.length === 1)
165
+ return Math.round(args[0]);
166
+ if (args.length === 2) {
167
+ const p = Math.pow(10, args[1]);
168
+ return Math.round(args[0] * p) / p;
169
+ }
170
+ return null;
171
+ case "min": return args.length >= 1 ? Math.min(...args) : null;
172
+ case "max": return args.length >= 1 ? Math.max(...args) : null;
173
+ case "clamp": return args.length === 3 ? Math.min(Math.max(args[0], args[1]), args[2]) : null;
174
+ case "abs": return args.length === 1 ? Math.abs(args[0]) : null;
175
+ case "sign": return args.length === 1 ? Math.sign(args[0]) : null;
176
+ case "mod": return args.length === 2 && args[1] !== 0 ? ((args[0] % args[1]) + args[1]) % args[1] : null;
177
+ case "pow": return args.length === 2 ? Math.pow(args[0], args[1]) : null;
178
+ case "sqrt": return args.length === 1 ? Math.sqrt(args[0]) : null;
179
+ case "hypot": return args.length >= 1 ? Math.hypot(...args) : null;
180
+ case "exp": return args.length === 1 ? Math.exp(args[0]) : null;
181
+ case "log": return args.length === 1 ? Math.log(args[0]) : null;
182
+ case "log2": return args.length === 1 ? Math.log2(args[0]) : null;
183
+ case "log10": return args.length === 1 ? Math.log10(args[0]) : null;
184
+ case "sin": return args.length === 1 ? Math.sin(args[0]) : null;
185
+ case "cos": return args.length === 1 ? Math.cos(args[0]) : null;
186
+ case "tan": return args.length === 1 ? Math.tan(args[0]) : null;
187
+ case "asin": return args.length === 1 ? Math.asin(args[0]) : null;
188
+ case "acos": return args.length === 1 ? Math.acos(args[0]) : null;
189
+ case "atan": return args.length === 1 ? Math.atan(args[0]) : null;
190
+ case "atan2": return args.length === 2 ? Math.atan2(args[0], args[1]) : null;
191
+ default: return null;
192
+ }
193
+ }
194
+ if (token === "(") {
195
+ consume();
196
+ const value = parseExpression();
197
+ if (peek() !== ")")
198
+ return null;
199
+ consume();
200
+ return value;
201
+ }
202
+ if (token === "-") {
203
+ consume();
204
+ const value = parseFactor();
205
+ return value === null ? null : -value;
206
+ }
207
+ const number = parseFloat(token);
208
+ if (Number.isNaN(number))
209
+ return null;
210
+ consume();
211
+ return number;
212
+ }
213
+ const result = parseExpression();
214
+ if (result === null)
215
+ return null;
216
+ if (pos !== parsedTokens.length)
217
+ return null;
218
+ return result;
219
+ }
220
+ function tokenize(expr) {
221
+ const source = expr.trim();
222
+ const tokens = [];
223
+ let i = 0;
224
+ while (i < source.length) {
225
+ if (source[i] === " " || source[i] === "\t") {
226
+ i += 1;
227
+ continue;
228
+ }
229
+ if ("+-*/%(),".includes(source[i])) {
230
+ tokens.push(source[i]);
231
+ i += 1;
232
+ continue;
233
+ }
234
+ if (/[a-zA-Z_]/.test(source[i])) {
235
+ let name = "";
236
+ while (i < source.length && /[a-zA-Z_\d]/.test(source[i])) {
237
+ name += source[i];
238
+ i += 1;
239
+ }
240
+ const lower = name.toLowerCase();
241
+ if (!ALL_IDENTIFIERS.includes(lower))
242
+ return null;
243
+ tokens.push(lower);
244
+ continue;
245
+ }
246
+ if (/[\d.]/.test(source[i])) {
247
+ let value = "";
248
+ while (i < source.length && /[\d.eE]/.test(source[i])) {
249
+ value += source[i];
250
+ i += 1;
251
+ }
252
+ if (!value || Number.isNaN(parseFloat(value)))
253
+ return null;
254
+ tokens.push(value);
255
+ continue;
256
+ }
257
+ return null;
258
+ }
259
+ return tokens.length > 0 ? tokens : null;
260
+ }
261
+ //# sourceMappingURL=math.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math.js","sourceRoot":"","sources":["../../src/core/math.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
- import { FlatToken } from "./types.js";
1
+ import type { FlatToken } from "./types.js";
2
+ export type ValueMap = Map<string, FlatToken>;
2
3
  export declare function parseTokenFile(json: Record<string, unknown>, filePath: string): FlatToken[];
3
- export declare function buildValueMap(tokens: FlatToken[]): Map<string, FlatToken>;
4
- export declare function resolveAllAliases(tokens: FlatToken[], lookup: Map<string, FlatToken>): void;
4
+ export declare function buildValueMap(tokens: FlatToken[]): ValueMap;
5
+ export declare function resolveAllAliases(tokens: FlatToken[], lookup: ValueMap): void;
5
6
  export declare function evaluateMathExpressions(tokens: FlatToken[]): void;
@@ -1,186 +1,82 @@
1
- export function parseTokenFile(json, filePath) {
2
- return collectTokens(json, undefined, "", filePath);
1
+ import { parseTokenFile as parseTokenFileStrict, canonicalTokenPath } from "./token-parser.js";
2
+ import { resolveTokens } from "./resolver.js";
3
+ import { isMathExpression, evaluateMathExpression } from "./math.js";
4
+ function appendTokenLookup(map, token) {
5
+ const canonical = canonicalTokenPath(token.path);
6
+ const dot = canonical.replace(/\//g, ".");
7
+ const slash = canonical.replace(/\./g, "/");
8
+ map.set(token.path, token);
9
+ map.set(canonical, token);
10
+ map.set(dot, token);
11
+ map.set(slash, token);
3
12
  }
4
- function collectTokens(obj, inheritedType, prefix, filePath) {
5
- const tokens = [];
6
- const groupType = obj.$type || inheritedType;
7
- for (const [key, value] of Object.entries(obj)) {
8
- if (key.startsWith("$"))
9
- continue;
10
- if (typeof value !== "object" || value === null || Array.isArray(value))
11
- continue;
12
- const node = value;
13
- const path = prefix ? `${prefix}.${key}` : key;
14
- const nodeType = node.$type || groupType;
15
- if ("$value" in node) {
16
- const val = node.$value;
17
- const isPureAlias = typeof val === "string" && /^\{[^{}]+\}$/.test(val.trim());
18
- const aliasPath = isPureAlias ? val.slice(1, -1) : undefined;
19
- const description = node.$description;
20
- const extensions = node.$extensions;
21
- tokens.push({
22
- path,
23
- name: key,
24
- type: (nodeType || inferType(val)),
25
- value: val,
26
- isAlias: isPureAlias,
27
- aliasPath,
28
- description,
29
- extensions,
30
- sourceFile: filePath,
31
- });
32
- }
33
- else {
34
- tokens.push(...collectTokens(node, nodeType, path, filePath));
35
- }
13
+ function asLookupTokens(lookup) {
14
+ const dedup = new Map();
15
+ for (const token of lookup.values()) {
16
+ const key = canonicalTokenPath(token.path);
17
+ if (dedup.has(key))
18
+ dedup.delete(key);
19
+ dedup.set(key, token);
36
20
  }
37
- return tokens;
21
+ return [...dedup.values()];
38
22
  }
39
- function inferType(value) {
40
- if (typeof value === "boolean")
41
- return "boolean";
42
- if (typeof value === "number")
43
- return "number";
44
- if (typeof value === "string") {
45
- const v = value.trim();
46
- if (/^#|^rgb|^hsl|^oklch|^lch|^color\(/.test(v))
47
- return "color";
48
- if (/^-?\d+(\.\d+)?(px|rem|em|%|pt|dp|sp)?$/.test(v))
49
- return "dimension";
50
- }
51
- if (typeof value === "object" && value !== null) {
52
- const obj = value;
53
- if ("fontFamily" in obj)
54
- return "typography";
55
- if ("offsetX" in obj || "offsetY" in obj)
56
- return "shadow";
57
- if ("color" in obj && "width" in obj && "style" in obj)
58
- return "border";
59
- if ("stops" in obj)
60
- return "gradient";
61
- if ("blur" in obj)
62
- return "blur";
63
- }
64
- return "string";
23
+ export function parseTokenFile(json, filePath) {
24
+ return parseTokenFileStrict(json, filePath).tokens;
65
25
  }
66
26
  export function buildValueMap(tokens) {
67
- const map = new Map();
68
- for (const t of tokens) {
69
- map.set(t.path, t);
70
- map.set(t.path.replace(/\./g, "/"), t);
71
- }
72
- return map;
27
+ const lookup = new Map();
28
+ for (const token of tokens)
29
+ appendTokenLookup(lookup, token);
30
+ return lookup;
73
31
  }
74
32
  export function resolveAllAliases(tokens, lookup) {
75
- for (const token of tokens) {
76
- if (token.isAlias && token.aliasPath) {
77
- token.resolvedValue = resolveAlias(token.aliasPath, lookup, new Set(), 20);
78
- }
79
- else if (hasEmbeddedAliases(token.value)) {
80
- token.resolvedValue = resolveEmbeddedAliases(token.value, lookup);
81
- }
82
- else {
83
- token.resolvedValue = token.value;
84
- }
85
- }
86
- }
87
- function resolveAlias(aliasPath, lookup, visited, maxDepth) {
88
- if (maxDepth <= 0 || visited.has(aliasPath))
89
- return `{${aliasPath}}`;
90
- visited.add(aliasPath);
91
- const normalized = aliasPath.replace(/\//g, ".");
92
- const target = lookup.get(normalized) ?? lookup.get(aliasPath);
93
- if (!target)
94
- return `{${aliasPath}}`;
95
- if (target.isAlias && target.aliasPath) {
96
- return resolveAlias(target.aliasPath, lookup, visited, maxDepth - 1);
97
- }
98
- if (hasEmbeddedAliases(target.value)) {
99
- return resolveEmbeddedAliases(target.value, lookup, visited);
100
- }
101
- return target.value;
102
- }
103
- function hasEmbeddedAliases(val) {
104
- if (typeof val === "string")
105
- return /\{[^{}]+\}/.test(val);
106
- if (Array.isArray(val))
107
- return val.some(hasEmbeddedAliases);
108
- if (typeof val === "object" && val !== null) {
109
- return Object.values(val).some(hasEmbeddedAliases);
33
+ const { tokens: resolvedTokens } = resolveTokens(tokens, {
34
+ remBase: 16,
35
+ maxDepth: 20,
36
+ unresolvedAlias: "ignore",
37
+ }, {
38
+ lookupTokens: asLookupTokens(lookup),
39
+ });
40
+ const resolvedByPath = new Map();
41
+ for (const token of resolvedTokens) {
42
+ resolvedByPath.set(canonicalTokenPath(token.path), token);
110
43
  }
111
- return false;
112
- }
113
- function resolveEmbeddedAliases(val, lookup, visited) {
114
- const seen = visited ?? new Set();
115
- if (typeof val === "string") {
116
- if (/^\{[^{}]+\}$/.test(val.trim())) {
117
- const ref = val.trim().slice(1, -1);
118
- return resolveAlias(ref, lookup, new Set(seen), 20);
119
- }
120
- return val.replace(/\{([^{}]+)\}/g, (_m, ref) => {
121
- const resolved = resolveAlias(ref, lookup, new Set(seen), 20);
122
- if (typeof resolved === "string")
123
- return resolved;
124
- if (typeof resolved === "number" || typeof resolved === "boolean")
125
- return String(resolved);
126
- try {
127
- return JSON.stringify(resolved);
128
- }
129
- catch {
130
- return `{${ref}}`;
131
- }
132
- });
133
- }
134
- if (Array.isArray(val))
135
- return val.map(item => resolveEmbeddedAliases(item, lookup, seen));
136
- if (typeof val === "object" && val !== null) {
137
- const result = {};
138
- for (const [k, v] of Object.entries(val)) {
139
- result[k] = resolveEmbeddedAliases(v, lookup, seen);
140
- }
141
- return result;
44
+ for (const token of tokens) {
45
+ const resolved = resolvedByPath.get(canonicalTokenPath(token.path));
46
+ if (!resolved)
47
+ continue;
48
+ token.resolvedValue = resolved.resolvedValue;
49
+ token.isAlias = resolved.isAlias;
50
+ token.aliasPath = resolved.aliasPath;
142
51
  }
143
- return val;
144
52
  }
145
53
  export function evaluateMathExpressions(tokens) {
146
- for (const t of tokens) {
147
- t.resolvedValue = evalMathDeep(t.resolvedValue);
148
- }
149
- }
150
- function evalMathDeep(val) {
151
- if (typeof val === "string")
152
- return tryEvalMath(val);
153
- if (Array.isArray(val))
154
- return val.map(evalMathDeep);
155
- if (typeof val === "object" && val !== null) {
156
- const result = {};
157
- for (const [k, v] of Object.entries(val)) {
158
- result[k] = evalMathDeep(v);
159
- }
160
- return result;
161
- }
162
- return val;
163
- }
164
- function tryEvalMath(val) {
165
- if (/^\d+(\.\d+)?$/.test(val.trim()))
166
- return val;
167
- const mathPattern = /^[\d.]+\s*[*/+-]\s*[\d.]+(\s*[*/+-]\s*[\d.]+)*$/;
168
- const stripped = val.replace(/px|rem|em|%|pt|dp|sp/g, "").trim();
169
- if (mathPattern.test(stripped)) {
170
- try {
171
- const result = Function(`"use strict"; return (${stripped})`)();
172
- const unit = val.match(/(px|rem|em|%|pt|dp|sp)/)?.[1] || "";
173
- return unit ? `${result}${unit}` : result;
174
- }
175
- catch { /* not math */ }
176
- }
177
- const roundMatch = val.match(/^round\((.+)\)$/);
178
- if (roundMatch) {
179
- const inner = tryEvalMath(roundMatch[1]);
180
- const num = typeof inner === "number" ? inner : parseFloat(String(inner));
181
- if (!isNaN(num))
182
- return Math.round(num);
54
+ const lookup = buildValueMap(tokens);
55
+ const resolveAliasNumber = (aliasPath) => {
56
+ const alias = canonicalTokenPath(aliasPath);
57
+ const dot = alias.replace(/\//g, ".");
58
+ const slash = alias.replace(/\./g, "/");
59
+ const token = lookup.get(aliasPath) ?? lookup.get(alias) ?? lookup.get(dot) ?? lookup.get(slash);
60
+ if (!token)
61
+ return null;
62
+ const candidate = token.resolvedValue ?? token.value;
63
+ if (typeof candidate === "number" && Number.isFinite(candidate))
64
+ return candidate;
65
+ if (typeof candidate !== "string")
66
+ return null;
67
+ const parsed = Number(candidate);
68
+ return Number.isFinite(parsed) ? parsed : null;
69
+ };
70
+ for (const token of tokens) {
71
+ const candidate = token.resolvedValue ?? token.value;
72
+ if (typeof candidate !== "string")
73
+ continue;
74
+ if (!isMathExpression(candidate))
75
+ continue;
76
+ const evaluated = evaluateMathExpression(candidate, resolveAliasNumber, 16);
77
+ if (evaluated === null)
78
+ continue;
79
+ token.resolvedValue = evaluated;
183
80
  }
184
- return val;
185
81
  }
186
82
  //# sourceMappingURL=parser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { Diagnostic, FlatToken } from "./types.js";
2
+ import type { FigmaRGBA } from "./color-parser.js";
3
+ import type { UnresolvedAliasAction } from "./types.js";
4
+ export type ResolveOptions = {
5
+ remBase: number;
6
+ maxDepth: number;
7
+ unresolvedAlias: UnresolvedAliasAction;
8
+ autoFixAliasSyntax?: boolean;
9
+ skipTokensWithIssues?: boolean;
10
+ };
11
+ export type ResolveResult = {
12
+ tokens: FlatToken[];
13
+ diagnostics: Diagnostic[];
14
+ lookup: Map<string, FlatToken>;
15
+ };
16
+ export type ResolveContext = {
17
+ lookupTokens?: FlatToken[];
18
+ };
19
+ export declare function resolveTokens(tokens: FlatToken[], options: ResolveOptions, context?: ResolveContext): ResolveResult;
20
+ export declare function buildLookup(tokens: FlatToken[]): Map<string, FlatToken>;
21
+ export declare function parseNumericValue(raw: unknown, remBase: number, tokenType?: string): number | null;
22
+ export declare function parseColorValue(raw: unknown): FigmaRGBA | null;
23
+ export declare function shouldSkipTokenType(type: string, unsupported: {
24
+ default: "skip" | "warn" | "error";
25
+ types: Record<string, "skip" | "warn" | "error">;
26
+ }): "skip" | "warn" | "error";