@dsgraph/adapters 0.0.0-stage → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +29 -2
- package/dist/css-tokens.d.ts +13 -0
- package/dist/css-tokens.d.ts.map +1 -0
- package/dist/css-tokens.js +231 -0
- package/dist/css-tokens.js.map +1 -0
- package/dist/css-values.d.ts +19 -0
- package/dist/css-values.d.ts.map +1 -0
- package/dist/css-values.js +205 -0
- package/dist/css-values.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/json-values.d.ts +30 -0
- package/dist/json-values.d.ts.map +1 -0
- package/dist/json-values.js +332 -0
- package/dist/json-values.js.map +1 -0
- package/dist/styles.d.ts +20 -0
- package/dist/styles.d.ts.map +1 -0
- package/dist/styles.js +182 -0
- package/dist/styles.js.map +1 -0
- package/dist/tokens-json.d.ts +10 -0
- package/dist/tokens-json.d.ts.map +1 -0
- package/dist/tokens-json.js +499 -0
- package/dist/tokens-json.js.map +1 -0
- package/package.json +32 -4
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
import { cssColorToDtcg, evaluateExpression } from '@dsgraph/core';
|
|
2
|
+
import { cssValueToToken, splitTopLevel } from './css-values.js';
|
|
3
|
+
/** Types of token-set and value/type JSON → DTCG types. Others keep their own name. */
|
|
4
|
+
const TYPES = {
|
|
5
|
+
color: 'color',
|
|
6
|
+
dimension: 'dimension',
|
|
7
|
+
sizing: 'dimension',
|
|
8
|
+
spacing: 'dimension',
|
|
9
|
+
size: 'dimension',
|
|
10
|
+
borderRadius: 'dimension',
|
|
11
|
+
borderWidth: 'dimension',
|
|
12
|
+
fontSizes: 'dimension',
|
|
13
|
+
fontSize: 'dimension',
|
|
14
|
+
letterSpacing: 'dimension',
|
|
15
|
+
paragraphSpacing: 'dimension',
|
|
16
|
+
paragraphIndent: 'dimension',
|
|
17
|
+
opacity: 'number',
|
|
18
|
+
number: 'number',
|
|
19
|
+
fontFamilies: 'fontFamily',
|
|
20
|
+
fontFamily: 'fontFamily',
|
|
21
|
+
fontWeights: 'fontWeight',
|
|
22
|
+
fontWeight: 'fontWeight',
|
|
23
|
+
lineHeights: 'lineHeight',
|
|
24
|
+
lineHeight: 'lineHeight',
|
|
25
|
+
typography: 'typography',
|
|
26
|
+
boxShadow: 'shadow',
|
|
27
|
+
shadow: 'shadow',
|
|
28
|
+
border: 'border',
|
|
29
|
+
duration: 'duration',
|
|
30
|
+
time: 'duration',
|
|
31
|
+
easing: 'cubicBezier',
|
|
32
|
+
cubicBezier: 'cubicBezier',
|
|
33
|
+
strokeStyle: 'strokeStyle',
|
|
34
|
+
transition: 'transition',
|
|
35
|
+
gradient: 'gradient',
|
|
36
|
+
};
|
|
37
|
+
/** `border-radius` (kebab-case types) → `borderRadius`. */
|
|
38
|
+
const mapKey = (t) => t.replace(/-([a-z])/g, (_, ch) => ch.toUpperCase());
|
|
39
|
+
const mapType = (t) => TYPES[t] ?? TYPES[mapKey(t)] ?? t;
|
|
40
|
+
/** Types only the token-set format uses; their presence tells it from plain value/type JSON. */
|
|
41
|
+
export const SET_FORMAT_TYPES = new Set([
|
|
42
|
+
'sizing',
|
|
43
|
+
'spacing',
|
|
44
|
+
'borderRadius',
|
|
45
|
+
'borderWidth',
|
|
46
|
+
'fontSizes',
|
|
47
|
+
'fontFamilies',
|
|
48
|
+
'fontWeights',
|
|
49
|
+
'lineHeights',
|
|
50
|
+
'letterSpacing',
|
|
51
|
+
'paragraphSpacing',
|
|
52
|
+
'paragraphIndent',
|
|
53
|
+
'boxShadow',
|
|
54
|
+
'composition',
|
|
55
|
+
'textCase',
|
|
56
|
+
'textDecoration',
|
|
57
|
+
'opacity',
|
|
58
|
+
]);
|
|
59
|
+
const FONT_WEIGHTS = {
|
|
60
|
+
thin: 100,
|
|
61
|
+
hairline: 100,
|
|
62
|
+
extralight: 200,
|
|
63
|
+
ultralight: 200,
|
|
64
|
+
light: 300,
|
|
65
|
+
normal: 400,
|
|
66
|
+
regular: 400,
|
|
67
|
+
book: 400,
|
|
68
|
+
medium: 500,
|
|
69
|
+
semibold: 600,
|
|
70
|
+
demibold: 600,
|
|
71
|
+
bold: 700,
|
|
72
|
+
extrabold: 800,
|
|
73
|
+
ultrabold: 800,
|
|
74
|
+
black: 900,
|
|
75
|
+
heavy: 900,
|
|
76
|
+
extrablack: 950,
|
|
77
|
+
ultrablack: 950,
|
|
78
|
+
};
|
|
79
|
+
const WHOLE_REF = /^\{[^{}]+\}$/;
|
|
80
|
+
const NUM = /^\s*(-?(?:\d+\.?\d*|\.\d+))\s*([a-z%]*)\s*$/i;
|
|
81
|
+
const isObj = (v) => v !== null && typeof v === 'object' && !Array.isArray(v);
|
|
82
|
+
/**
|
|
83
|
+
* References as these tools write them, in DTCG syntax: `{a.b.value}` and `{a.b.$value}` drop the
|
|
84
|
+
* suffix, a whole-value `$a.b` (an early notation) becomes `{a.b}`.
|
|
85
|
+
*/
|
|
86
|
+
export function normalizeRefs(v) {
|
|
87
|
+
if (typeof v === 'string') {
|
|
88
|
+
const s = v.replace(/\{([^{}]+?)\.\$?value\}/g, '{$1}');
|
|
89
|
+
return /^\$[\w-]+(\.[\w-]+)+$/.test(s) ? `{${s.slice(1)}}` : s;
|
|
90
|
+
}
|
|
91
|
+
if (Array.isArray(v))
|
|
92
|
+
return v.map(normalizeRefs);
|
|
93
|
+
if (isObj(v))
|
|
94
|
+
return Object.fromEntries(Object.entries(v).map(([k, x]) => [k, normalizeRefs(x)]));
|
|
95
|
+
return v;
|
|
96
|
+
}
|
|
97
|
+
const hasRefInside = (s) => s.includes('{') && !WHOLE_REF.test(s.trim());
|
|
98
|
+
const isArithmetic = (s) => /^[\d\s.+\-*/()a-z%]+$/i.test(s) && /\d\s*[-+*/]\s*[\d(.]/.test(s);
|
|
99
|
+
/** A string that stays as text for the core: a reference or an expression with references. */
|
|
100
|
+
function deferred(s, c) {
|
|
101
|
+
if (WHOLE_REF.test(s.trim()))
|
|
102
|
+
return s.trim();
|
|
103
|
+
if (hasRefInside(s)) {
|
|
104
|
+
c.expression = true;
|
|
105
|
+
return s;
|
|
106
|
+
}
|
|
107
|
+
return undefined;
|
|
108
|
+
}
|
|
109
|
+
function dimension(v, c, percentAs) {
|
|
110
|
+
if (typeof v === 'number')
|
|
111
|
+
return { value: v, unit: v === 0 ? 'px' : c.unit };
|
|
112
|
+
if (typeof v !== 'string')
|
|
113
|
+
return v;
|
|
114
|
+
const d = deferred(v, c);
|
|
115
|
+
if (d !== undefined)
|
|
116
|
+
return d;
|
|
117
|
+
const m = NUM.exec(v);
|
|
118
|
+
if (m) {
|
|
119
|
+
const n = Number(m[1]);
|
|
120
|
+
const unit = m[2].toLowerCase();
|
|
121
|
+
if (unit === '%' && percentAs === 'em')
|
|
122
|
+
return { value: n / 100, unit: 'em' };
|
|
123
|
+
return { value: n, unit: unit || c.unit };
|
|
124
|
+
}
|
|
125
|
+
if (isArithmetic(v) || /^calc\(/i.test(v))
|
|
126
|
+
return evaluateExpression(v, 'dimension', c.unit) ?? v;
|
|
127
|
+
return v;
|
|
128
|
+
}
|
|
129
|
+
function numberValue(v, c) {
|
|
130
|
+
if (typeof v !== 'string')
|
|
131
|
+
return v;
|
|
132
|
+
const d = deferred(v, c);
|
|
133
|
+
if (d !== undefined)
|
|
134
|
+
return d;
|
|
135
|
+
const m = NUM.exec(v);
|
|
136
|
+
if (m && (m[2] === '' || m[2] === '%'))
|
|
137
|
+
return m[2] === '%' ? Number(m[1]) / 100 : Number(m[1]);
|
|
138
|
+
return evaluateExpression(v, 'number') ?? v;
|
|
139
|
+
}
|
|
140
|
+
function color(v, c) {
|
|
141
|
+
if (typeof v !== 'string')
|
|
142
|
+
return v;
|
|
143
|
+
const d = deferred(v, c);
|
|
144
|
+
if (d !== undefined)
|
|
145
|
+
return d;
|
|
146
|
+
return cssColorToDtcg(v) ?? evaluateExpression(v, 'color') ?? v;
|
|
147
|
+
}
|
|
148
|
+
function fontFamily(v) {
|
|
149
|
+
if (typeof v !== 'string' || WHOLE_REF.test(v.trim()))
|
|
150
|
+
return v;
|
|
151
|
+
const list = splitTopLevel(v, ',').map((f) => f.replace(/^["']|["']$/g, ''));
|
|
152
|
+
return list.length === 1 ? list[0] : list;
|
|
153
|
+
}
|
|
154
|
+
/** `Bold`, `Semi Bold Italic`, `700` → a number; unknown names stay as written. */
|
|
155
|
+
export function fontWeight(v) {
|
|
156
|
+
if (typeof v === 'number' || typeof v !== 'string' || WHOLE_REF.test(v.trim()))
|
|
157
|
+
return v;
|
|
158
|
+
if (/^\d+$/.test(v.trim()))
|
|
159
|
+
return Number(v);
|
|
160
|
+
const key = v
|
|
161
|
+
.toLowerCase()
|
|
162
|
+
.replace(/\b(italic|oblique|(semi|extra|ultra)?\s*(condensed|compressed|expanded|extended)|narrow|wide)\b/g, '')
|
|
163
|
+
.replace(/[\s_-]/g, '');
|
|
164
|
+
return FONT_WEIGHTS[key === '' ? 'regular' : key] ?? v;
|
|
165
|
+
}
|
|
166
|
+
/** Line height: a percentage or a small unitless number is a multiplier; a larger one is px. */
|
|
167
|
+
function lineHeight(v, c) {
|
|
168
|
+
if (typeof v === 'number')
|
|
169
|
+
return v <= 4 ? { type: 'number', value: v } : { type: 'dimension', value: { value: v, unit: c.unit } };
|
|
170
|
+
if (typeof v !== 'string')
|
|
171
|
+
return { type: 'number', value: v };
|
|
172
|
+
if (WHOLE_REF.test(v.trim()))
|
|
173
|
+
return { type: '', value: v.trim() };
|
|
174
|
+
// An expression over references is almost always a multiple of a font size: a length.
|
|
175
|
+
const d = deferred(v, c);
|
|
176
|
+
if (d !== undefined)
|
|
177
|
+
return { type: 'dimension', value: d };
|
|
178
|
+
if (/^auto$/i.test(v.trim()))
|
|
179
|
+
return undefined;
|
|
180
|
+
const m = NUM.exec(v);
|
|
181
|
+
if (!m)
|
|
182
|
+
return { type: 'number', value: evaluateExpression(v, 'number') ?? v };
|
|
183
|
+
const n = Number(m[1]);
|
|
184
|
+
const unit = m[2].toLowerCase();
|
|
185
|
+
if (unit === '%')
|
|
186
|
+
return { type: 'number', value: n / 100 };
|
|
187
|
+
if (unit === '' && n <= 4)
|
|
188
|
+
return { type: 'number', value: n };
|
|
189
|
+
return { type: 'dimension', value: { value: n, unit: unit || c.unit } };
|
|
190
|
+
}
|
|
191
|
+
function typography(v, c) {
|
|
192
|
+
if (!isObj(v))
|
|
193
|
+
return v;
|
|
194
|
+
const out = { ...v };
|
|
195
|
+
if (v.fontFamily !== undefined)
|
|
196
|
+
out.fontFamily = fontFamily(v.fontFamily);
|
|
197
|
+
if (v.fontWeight !== undefined)
|
|
198
|
+
out.fontWeight = fontWeight(v.fontWeight);
|
|
199
|
+
if (v.fontSize !== undefined)
|
|
200
|
+
out.fontSize = dimension(v.fontSize, c);
|
|
201
|
+
if (v.letterSpacing !== undefined)
|
|
202
|
+
out.letterSpacing = dimension(v.letterSpacing, c, 'em');
|
|
203
|
+
if (v.lineHeight !== undefined) {
|
|
204
|
+
const lh = lineHeight(v.lineHeight, c);
|
|
205
|
+
if (lh)
|
|
206
|
+
out.lineHeight = lh.value;
|
|
207
|
+
else
|
|
208
|
+
delete out.lineHeight;
|
|
209
|
+
}
|
|
210
|
+
for (const k of ['paragraphSpacing', 'paragraphIndent'])
|
|
211
|
+
if (v[k] !== undefined)
|
|
212
|
+
out[k] = dimension(v[k], c);
|
|
213
|
+
return out;
|
|
214
|
+
}
|
|
215
|
+
function shadowLayer(v, c) {
|
|
216
|
+
if (!isObj(v))
|
|
217
|
+
return v;
|
|
218
|
+
const out = {
|
|
219
|
+
color: color(v.color, c),
|
|
220
|
+
offsetX: dimension(v.offsetX ?? v.x ?? 0, c),
|
|
221
|
+
offsetY: dimension(v.offsetY ?? v.y ?? 0, c),
|
|
222
|
+
blur: dimension(v.blur ?? 0, c),
|
|
223
|
+
spread: dimension(v.spread ?? 0, c),
|
|
224
|
+
};
|
|
225
|
+
if (v.inset !== undefined)
|
|
226
|
+
out.inset = v.inset;
|
|
227
|
+
else if (v.type === 'innerShadow')
|
|
228
|
+
out.inset = true;
|
|
229
|
+
return out;
|
|
230
|
+
}
|
|
231
|
+
function border(v, c) {
|
|
232
|
+
if (!isObj(v))
|
|
233
|
+
return v;
|
|
234
|
+
const out = { ...v };
|
|
235
|
+
if (v.color !== undefined)
|
|
236
|
+
out.color = color(v.color, c);
|
|
237
|
+
if (v.width !== undefined)
|
|
238
|
+
out.width = dimension(v.width, c);
|
|
239
|
+
return out;
|
|
240
|
+
}
|
|
241
|
+
function duration(v) {
|
|
242
|
+
if (typeof v === 'number')
|
|
243
|
+
return { value: v, unit: 'ms' };
|
|
244
|
+
if (typeof v !== 'string')
|
|
245
|
+
return v;
|
|
246
|
+
const m = NUM.exec(v);
|
|
247
|
+
if (m && (m[2] === '' || m[2] === 'ms' || m[2] === 's'))
|
|
248
|
+
return { value: Number(m[1]), unit: m[2] || 'ms' };
|
|
249
|
+
return v;
|
|
250
|
+
}
|
|
251
|
+
/** Category/type/item naming: the first path segment says what an untyped token is. */
|
|
252
|
+
function inferType(path, v, c) {
|
|
253
|
+
const category = path[0]?.toLowerCase();
|
|
254
|
+
if (category === 'color' || category === 'colors')
|
|
255
|
+
return { type: 'color', value: color(v, c) };
|
|
256
|
+
if (category === 'size' || category === 'sizes')
|
|
257
|
+
return { type: 'dimension', value: dimension(v, { ...c, unit: 'rem' }) };
|
|
258
|
+
if (category === 'time')
|
|
259
|
+
return { type: 'duration', value: duration(v) };
|
|
260
|
+
if ((typeof v === 'string' && !v.includes('{')) || typeof v === 'number') {
|
|
261
|
+
const t = cssValueToToken(path.join('-'), String(v));
|
|
262
|
+
// `var(--x)` names a CSS property, not a token of this file: kept as text.
|
|
263
|
+
if (t.$type === undefined || t.$type === 'css-expression' || String(v).includes('var('))
|
|
264
|
+
return { type: 'other', value: v };
|
|
265
|
+
return { type: t.$type, value: t.$value };
|
|
266
|
+
}
|
|
267
|
+
return { type: 'other', value: v };
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* One token's value in DTCG form, by its (source) type. References and expressions with
|
|
271
|
+
* references stay as text for the core; everything literal becomes a DTCG value.
|
|
272
|
+
*/
|
|
273
|
+
export function convertValue(sourceType, raw, path, c) {
|
|
274
|
+
const v = normalizeRefs(raw);
|
|
275
|
+
if (sourceType === 'other' && typeof v === 'string' && WHOLE_REF.test(v.trim()))
|
|
276
|
+
return { value: v.trim() };
|
|
277
|
+
if (sourceType === 'other' && (typeof v === 'number' || (typeof v === 'string' && !v.includes('{')))) {
|
|
278
|
+
// The catch-all `other` type: the value says what it is.
|
|
279
|
+
const t = inferType(path, v, c);
|
|
280
|
+
return t.type === 'other' ? { type: 'other', value: v } : { ...t, inferred: true };
|
|
281
|
+
}
|
|
282
|
+
if (sourceType === undefined) {
|
|
283
|
+
if (typeof v === 'string' && v.includes('{')) {
|
|
284
|
+
// An untyped alias takes its type from the target.
|
|
285
|
+
deferred(v, c);
|
|
286
|
+
return { value: v };
|
|
287
|
+
}
|
|
288
|
+
return { ...inferType(path, v, c), inferred: true };
|
|
289
|
+
}
|
|
290
|
+
const type = mapType(sourceType);
|
|
291
|
+
// CSS that no DTCG value can hold (`clamp(…)`, `var(--x)`, gradients) is kept as text.
|
|
292
|
+
const css = (value) => typeof value === 'string' && !value.includes('{') ? { type: 'css-expression', value } : { type, value };
|
|
293
|
+
switch (type) {
|
|
294
|
+
case 'color':
|
|
295
|
+
if (typeof v === 'string' && /gradient\(/i.test(v))
|
|
296
|
+
return { type: 'css-expression', value: v };
|
|
297
|
+
return css(color(v, c));
|
|
298
|
+
case 'dimension':
|
|
299
|
+
return css(dimension(v, c, /letterSpacing/.test(mapKey(sourceType)) ? 'em' : undefined));
|
|
300
|
+
case 'number':
|
|
301
|
+
return { type, value: numberValue(v, c) };
|
|
302
|
+
case 'fontFamily':
|
|
303
|
+
return { type, value: fontFamily(v) };
|
|
304
|
+
case 'fontWeight':
|
|
305
|
+
return { type, value: fontWeight(v) };
|
|
306
|
+
case 'lineHeight': {
|
|
307
|
+
// A whole alias takes its type from the target (a dimension or a number).
|
|
308
|
+
const lh = lineHeight(v, c);
|
|
309
|
+
if (!lh)
|
|
310
|
+
return { type: sourceType, value: v };
|
|
311
|
+
return lh.type ? lh : { value: lh.value };
|
|
312
|
+
}
|
|
313
|
+
case 'typography':
|
|
314
|
+
return { type, value: typography(v, c) };
|
|
315
|
+
case 'shadow':
|
|
316
|
+
return { type, value: Array.isArray(v) ? v.map((l) => shadowLayer(l, c)) : shadowLayer(v, c) };
|
|
317
|
+
case 'border':
|
|
318
|
+
return { type, value: border(v, c) };
|
|
319
|
+
case 'duration':
|
|
320
|
+
return { type, value: duration(v) };
|
|
321
|
+
default:
|
|
322
|
+
if (typeof v === 'string')
|
|
323
|
+
deferred(v, c);
|
|
324
|
+
return { type, value: v };
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
/** A group's `$type` in DTCG terms; undefined when it depends on each value (line heights). */
|
|
328
|
+
export const groupType = (sourceType) => {
|
|
329
|
+
const t = mapType(sourceType);
|
|
330
|
+
return t === 'lineHeight' ? undefined : t;
|
|
331
|
+
};
|
|
332
|
+
//# sourceMappingURL=json-values.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-values.js","sourceRoot":"","sources":["../src/json-values.ts"],"names":[],"mappings":"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"}
|
package/dist/styles.d.ts
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type CodeIndex, type Source, type StyleLiteral } from '@dsgraph/core';
|
|
2
|
+
export interface StylesOptions {
|
|
3
|
+
/** Globs of style files; default every `.css` and `.scss` file. */
|
|
4
|
+
include?: string[];
|
|
5
|
+
exclude?: string[];
|
|
6
|
+
}
|
|
7
|
+
/** Every `var(--name, fallback)` in a value, nested ones included. */
|
|
8
|
+
export declare function varsIn(value: string): Array<{
|
|
9
|
+
name: string;
|
|
10
|
+
fallback?: string;
|
|
11
|
+
}>;
|
|
12
|
+
/** Colors and scale values written by hand in a declaration. */
|
|
13
|
+
export declare function literalsIn(property: string, value: string): Array<Pick<StyleLiteral, 'text' | 'type' | 'value'>>;
|
|
14
|
+
/**
|
|
15
|
+
* Reads a project's style files (CSS, SCSS, CSS modules): every `var(--…)` and every color or
|
|
16
|
+
* scale value written by hand. Definitions of custom properties and SCSS variables are where values
|
|
17
|
+
* are named, so their literals are not reported; their `var()` references are.
|
|
18
|
+
*/
|
|
19
|
+
export declare function scanStyles(source: Source, opts?: StylesOptions): Promise<CodeIndex>;
|
|
20
|
+
//# sourceMappingURL=styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EAMd,KAAK,MAAM,EACX,KAAK,YAAY,EAElB,MAAM,eAAe,CAAA;AAKtB,MAAM,WAAW,aAAa;IAC5B,mEAAmE;IACnE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CACnB;AAiDD,sEAAsE;AACtE,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBhF;AAwBD,gEAAgE;AAChE,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAgCtD;AAaD;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,SAAS,CAAC,CAqC7F"}
|
package/dist/styles.js
ADDED
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import { canonicalValue, cssColorToDtcg, DiagnosticBag, matchGlob, prefetch, } from '@dsgraph/core';
|
|
2
|
+
import postcss, {} from 'postcss';
|
|
3
|
+
import scss from 'postcss-scss';
|
|
4
|
+
import { splitTopLevel } from './css-values.js';
|
|
5
|
+
const DEFAULT_INCLUDE = ['**/*.css', '**/*.scss'];
|
|
6
|
+
const DEFAULT_EXCLUDE = [
|
|
7
|
+
'**/node_modules/**',
|
|
8
|
+
'**/.git/**',
|
|
9
|
+
'**/dist/**',
|
|
10
|
+
'**/build/**',
|
|
11
|
+
'**/out/**',
|
|
12
|
+
'**/.next/**',
|
|
13
|
+
'**/coverage/**',
|
|
14
|
+
'**/*.min.css',
|
|
15
|
+
];
|
|
16
|
+
/** Properties whose colors are worth a token. Named colors (`red`) count only here. */
|
|
17
|
+
const COLOR_PROPERTY = /^(color|background(-color)?|border(-(top|right|bottom|left|block|inline)(-(start|end))?)?(-color)?|outline(-color)?|fill|stroke|(box|text)-shadow|caret-color|accent-color|text-decoration(-color)?|column-rule(-color)?|scrollbar-color)$/i;
|
|
18
|
+
/** Properties that take values from a spacing, radius or type scale. */
|
|
19
|
+
const SCALE_PROPERTY = /^(margin|padding|inset|scroll-(margin|padding))(-(top|right|bottom|left|block|inline)(-(start|end))?)?$|^(gap|row-gap|column-gap|top|right|bottom|left|font-size)$|^border(-(top|bottom|start|end)-(left|right|start|end))?-radius$/i;
|
|
20
|
+
const NOT_A_COLOR = new Set([
|
|
21
|
+
'transparent',
|
|
22
|
+
'currentcolor',
|
|
23
|
+
'inherit',
|
|
24
|
+
'initial',
|
|
25
|
+
'unset',
|
|
26
|
+
'revert',
|
|
27
|
+
'none',
|
|
28
|
+
'auto',
|
|
29
|
+
]);
|
|
30
|
+
const COLOR_FUNCTION = /^(rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\(/i;
|
|
31
|
+
const HEX = /^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i;
|
|
32
|
+
const LENGTH = /^(-?)(\d+\.?\d*|\.\d+)(px|rem)$/i;
|
|
33
|
+
/** A parsed CSS color as the canonical value tokens hold, so code and tokens compare directly. */
|
|
34
|
+
function canonicalColor(css) {
|
|
35
|
+
const dtcg = cssColorToDtcg(css);
|
|
36
|
+
if (!dtcg)
|
|
37
|
+
return undefined;
|
|
38
|
+
const ctx = {
|
|
39
|
+
strict: false,
|
|
40
|
+
allowNonstandardUnits: true,
|
|
41
|
+
diag: new DiagnosticBag(),
|
|
42
|
+
flags: new Set(),
|
|
43
|
+
};
|
|
44
|
+
return canonicalValue('color', dtcg, ctx);
|
|
45
|
+
}
|
|
46
|
+
/** Every `var(--name, fallback)` in a value, nested ones included. */
|
|
47
|
+
export function varsIn(value) {
|
|
48
|
+
const out = [];
|
|
49
|
+
const re = /var\(\s*(--[\w-]+)\s*/gi;
|
|
50
|
+
for (let m = re.exec(value); m; m = re.exec(value)) {
|
|
51
|
+
let depth = 1;
|
|
52
|
+
let i = re.lastIndex;
|
|
53
|
+
for (; i < value.length && depth > 0; i++) {
|
|
54
|
+
if (value[i] === '(')
|
|
55
|
+
depth++;
|
|
56
|
+
else if (value[i] === ')')
|
|
57
|
+
depth--;
|
|
58
|
+
}
|
|
59
|
+
const rest = value.slice(re.lastIndex, i - 1).trim();
|
|
60
|
+
const use = { name: m[1] };
|
|
61
|
+
if (rest.startsWith(','))
|
|
62
|
+
use.fallback = rest.slice(1).trim();
|
|
63
|
+
out.push(use);
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
67
|
+
/** Value parts outside `var()`, `url()` and other functions that are not colors. */
|
|
68
|
+
function plainParts(value) {
|
|
69
|
+
const parts = [];
|
|
70
|
+
for (const item of splitTopLevel(value, ',')) {
|
|
71
|
+
for (const part of splitTopLevel(item, ' ')) {
|
|
72
|
+
const p = part.trim();
|
|
73
|
+
if (!p)
|
|
74
|
+
continue;
|
|
75
|
+
const fn = /^([\w-]+)\(/.exec(p);
|
|
76
|
+
if (fn && !COLOR_FUNCTION.test(p)) {
|
|
77
|
+
// calc(16px + var(--x)), clamp(…), min(…): look inside, but not into var(), url() or env().
|
|
78
|
+
// A color mixed from a token (`color-mix(in oklch, var(--accent), black 10%)`) is derived, not hard-coded.
|
|
79
|
+
if (/^(var|url|env|image-set|format|local|color-mix)$/i.test(fn[1]))
|
|
80
|
+
continue;
|
|
81
|
+
const inner = p.slice(fn[0].length, -1);
|
|
82
|
+
parts.push(...plainParts(/^(calc|clamp|min|max)$/i.test(fn[1]) ? inner.replace(/[+*/]/g, ' ') : inner));
|
|
83
|
+
}
|
|
84
|
+
else
|
|
85
|
+
parts.push(p);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return parts;
|
|
89
|
+
}
|
|
90
|
+
/** Colors and scale values written by hand in a declaration. */
|
|
91
|
+
export function literalsIn(property, value) {
|
|
92
|
+
const out = [];
|
|
93
|
+
const colorProperty = COLOR_PROPERTY.test(property);
|
|
94
|
+
const scaleProperty = SCALE_PROPERTY.test(property);
|
|
95
|
+
if (!colorProperty && !scaleProperty && !/^(background|border|outline)/i.test(property)) {
|
|
96
|
+
// Any property can carry an explicit color (`fill`, gradients in `mask`), but only as hex or a color function.
|
|
97
|
+
for (const p of plainParts(value))
|
|
98
|
+
if (HEX.test(p) || COLOR_FUNCTION.test(p)) {
|
|
99
|
+
const color = canonicalColor(p);
|
|
100
|
+
if (color)
|
|
101
|
+
out.push({ text: p, type: 'color', value: color });
|
|
102
|
+
}
|
|
103
|
+
return out;
|
|
104
|
+
}
|
|
105
|
+
for (const p of plainParts(value)) {
|
|
106
|
+
const lower = p.toLowerCase();
|
|
107
|
+
if (HEX.test(p) ||
|
|
108
|
+
COLOR_FUNCTION.test(p) ||
|
|
109
|
+
(colorProperty && /^[a-z]+$/.test(lower) && !NOT_A_COLOR.has(lower))) {
|
|
110
|
+
const color = canonicalColor(p);
|
|
111
|
+
if (color) {
|
|
112
|
+
out.push({ text: p, type: 'color', value: color });
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
const m = scaleProperty ? LENGTH.exec(p) : null;
|
|
117
|
+
// 0 and hairlines are not scale values.
|
|
118
|
+
if (m && Number(m[2]) !== 0 && !(m[3].toLowerCase() === 'px' && Number(m[2]) <= 1))
|
|
119
|
+
out.push({ text: p, type: 'dimension', value: { value: Number(m[2]), unit: m[3].toLowerCase() } });
|
|
120
|
+
}
|
|
121
|
+
return out;
|
|
122
|
+
}
|
|
123
|
+
function selectorOf(decl) {
|
|
124
|
+
const parent = decl.parent;
|
|
125
|
+
return parent && parent.type === 'rule' ? parent.selector.replace(/\s+/g, ' ') : undefined;
|
|
126
|
+
}
|
|
127
|
+
function parse(file, text) {
|
|
128
|
+
// postcss-scss may resolve its own copy of postcss; the tree is the same.
|
|
129
|
+
if (/\.scss$/i.test(file))
|
|
130
|
+
return scss.parse(text, { from: file });
|
|
131
|
+
return postcss.parse(text, { from: file });
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Reads a project's style files (CSS, SCSS, CSS modules): every `var(--…)` and every color or
|
|
135
|
+
* scale value written by hand. Definitions of custom properties and SCSS variables are where values
|
|
136
|
+
* are named, so their literals are not reported; their `var()` references are.
|
|
137
|
+
*/
|
|
138
|
+
export async function scanStyles(source, opts = {}) {
|
|
139
|
+
const exclude = [...DEFAULT_EXCLUDE, ...(opts.exclude ?? [])];
|
|
140
|
+
const files = (await source.list(opts.include ?? DEFAULT_INCLUDE))
|
|
141
|
+
.filter((f) => !matchGlob(f, exclude))
|
|
142
|
+
.sort();
|
|
143
|
+
await prefetch(source, files);
|
|
144
|
+
const index = { files: [], uses: [], literals: [], skipped: [] };
|
|
145
|
+
for (const file of files) {
|
|
146
|
+
let root;
|
|
147
|
+
try {
|
|
148
|
+
root = parse(file, await source.readText(file));
|
|
149
|
+
}
|
|
150
|
+
catch (e) {
|
|
151
|
+
index.skipped.push({ file, message: e.message });
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
index.files.push(file);
|
|
155
|
+
root.walkDecls((decl) => {
|
|
156
|
+
const loc = { file, line: decl.source?.start?.line ?? 0, column: decl.source?.start?.column ?? 0 };
|
|
157
|
+
const selector = selectorOf(decl);
|
|
158
|
+
const property = decl.prop;
|
|
159
|
+
for (const v of varsIn(decl.value)) {
|
|
160
|
+
const use = { ...loc, name: v.name, property };
|
|
161
|
+
if (selector)
|
|
162
|
+
use.selector = selector;
|
|
163
|
+
if (v.fallback !== undefined)
|
|
164
|
+
use.fallback = v.fallback;
|
|
165
|
+
index.uses.push(use);
|
|
166
|
+
}
|
|
167
|
+
if (property.startsWith('--') || property.startsWith('$') || property.startsWith('@'))
|
|
168
|
+
return;
|
|
169
|
+
// SCSS interpolation and function calls compute values we cannot see.
|
|
170
|
+
if (/#\{|\$[\w-]/.test(decl.value))
|
|
171
|
+
return;
|
|
172
|
+
for (const l of literalsIn(property, decl.value)) {
|
|
173
|
+
const lit = { ...loc, property, ...l };
|
|
174
|
+
if (selector)
|
|
175
|
+
lit.selector = selector;
|
|
176
|
+
index.literals.push(lit);
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
return index;
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type TokenAdapter } from '@dsgraph/core';
|
|
2
|
+
/**
|
|
3
|
+
* Token-set JSON and value/type JSON → token system (DTCG 2025.10 values).
|
|
4
|
+
* Token sets: one file each or top-level keys of one file, `$metadata.json` for
|
|
5
|
+
* set order and `$themes.json` for themes; theme groups become modifiers. Value/type JSON: every
|
|
6
|
+
* file merges into one set, untyped tokens take their type from the category (`color`, `size`,
|
|
7
|
+
* `time`) or the value. Plain DTCG files are left to the core.
|
|
8
|
+
*/
|
|
9
|
+
export declare const jsonTokens: TokenAdapter;
|
|
10
|
+
//# sourceMappingURL=tokens-json.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens-json.d.ts","sourceRoot":"","sources":["../src/tokens-json.ts"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,YAAY,EAGlB,MAAM,eAAe,CAAA;AAqetB;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,EAAE,YA4BxB,CAAA"}
|