@buoy-design/scanners 0.8.10 → 0.8.11
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.
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
import type { RawSignal } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* True when every property in the style only references the design system:
|
|
4
|
+
* `style={{ color: MP.navy500, borderColor: AUDIT.border }}` or
|
|
5
|
+
* `style="color: var(--text)"`. That is token use, not drift.
|
|
6
|
+
*/
|
|
7
|
+
export declare function onlyReferencesTokens(styleContent: string, isJSX: boolean): boolean;
|
|
2
8
|
/**
|
|
3
9
|
* File-level extractor: scans for inline style= attributes
|
|
4
10
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inline-style.d.ts","sourceRoot":"","sources":["../../../src/signals/extractors/inline-style.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAY,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"inline-style.d.ts","sourceRoot":"","sources":["../../../src/signals/extractors/inline-style.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAY,MAAM,aAAa,CAAC;AAsDvD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAUlF;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,GACX,SAAS,EAAE,CAsCb"}
|
|
@@ -20,6 +20,60 @@ function countStyleProperties(styleContent, isJSX) {
|
|
|
20
20
|
}
|
|
21
21
|
return styleContent.split(';').filter(s => s.trim().includes(':')).length;
|
|
22
22
|
}
|
|
23
|
+
/** `MP.neutral400`, `theme.colors['gray-500']`, `tokens?.space` */
|
|
24
|
+
const REFERENCE = /^[A-Za-z_$][\w$]*(?:\??\.[A-Za-z_$][\w$]*|\[[^\]]+\])*$/;
|
|
25
|
+
/** `'var(--color-text)'`, `var(--space-2)`. A literal fallback (`var(--x, #fff)`) still counts as a value. */
|
|
26
|
+
const CSS_VAR = /^(['"`]?)var\(--[\w-]+\)\1$/;
|
|
27
|
+
const LITERALS = new Set(['true', 'false', 'null', 'undefined']);
|
|
28
|
+
/** Split on top-level separators, ignoring ones inside quotes, parens or brackets. */
|
|
29
|
+
function splitTopLevel(text, separator) {
|
|
30
|
+
const parts = [];
|
|
31
|
+
let depth = 0;
|
|
32
|
+
let quote = null;
|
|
33
|
+
let current = '';
|
|
34
|
+
for (const ch of text) {
|
|
35
|
+
if (quote) {
|
|
36
|
+
if (ch === quote)
|
|
37
|
+
quote = null;
|
|
38
|
+
}
|
|
39
|
+
else if (ch === "'" || ch === '"' || ch === '`') {
|
|
40
|
+
quote = ch;
|
|
41
|
+
}
|
|
42
|
+
else if (ch === '(' || ch === '[') {
|
|
43
|
+
depth++;
|
|
44
|
+
}
|
|
45
|
+
else if (ch === ')' || ch === ']') {
|
|
46
|
+
depth--;
|
|
47
|
+
}
|
|
48
|
+
else if (ch === separator && depth === 0) {
|
|
49
|
+
parts.push(current);
|
|
50
|
+
current = '';
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
current += ch;
|
|
54
|
+
}
|
|
55
|
+
parts.push(current);
|
|
56
|
+
return parts.map((p) => p.trim()).filter(Boolean);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* True when every property in the style only references the design system:
|
|
60
|
+
* `style={{ color: MP.navy500, borderColor: AUDIT.border }}` or
|
|
61
|
+
* `style="color: var(--text)"`. That is token use, not drift.
|
|
62
|
+
*/
|
|
63
|
+
export function onlyReferencesTokens(styleContent, isJSX) {
|
|
64
|
+
const declarations = splitTopLevel(styleContent, isJSX ? ',' : ';');
|
|
65
|
+
if (declarations.length === 0)
|
|
66
|
+
return false;
|
|
67
|
+
return declarations.every((declaration) => {
|
|
68
|
+
const colon = declaration.indexOf(':');
|
|
69
|
+
if (colon === -1)
|
|
70
|
+
return false;
|
|
71
|
+
const value = declaration.slice(colon + 1).trim();
|
|
72
|
+
if (CSS_VAR.test(value))
|
|
73
|
+
return true;
|
|
74
|
+
return isJSX && REFERENCE.test(value) && !LITERALS.has(value);
|
|
75
|
+
});
|
|
76
|
+
}
|
|
23
77
|
/**
|
|
24
78
|
* File-level extractor: scans for inline style= attributes
|
|
25
79
|
*/
|
|
@@ -36,6 +90,8 @@ export function extractInlineStyleSignals(content, path) {
|
|
|
36
90
|
let match;
|
|
37
91
|
while ((match = pattern.exec(line)) !== null) {
|
|
38
92
|
const styleContent = match[1];
|
|
93
|
+
if (onlyReferencesTokens(styleContent, pattern === JSX_STYLE_PATTERN))
|
|
94
|
+
continue;
|
|
39
95
|
const styleCount = countStyleProperties(styleContent, pattern === JSX_STYLE_PATTERN);
|
|
40
96
|
signals.push({
|
|
41
97
|
id: createSignalId('inline-style', path, i + 1, styleContent.slice(0, 40)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inline-style.js","sourceRoot":"","sources":["../../../src/signals/extractors/inline-style.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"inline-style.js","sourceRoot":"","sources":["../../../src/signals/extractors/inline-style.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@buoy-design/scanners",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.11",
|
|
4
4
|
"description": "Source scanners for Buoy (React, Vue, Svelte, Angular, Figma, Storybook)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -55,7 +55,7 @@
|
|
|
55
55
|
"glob": "^11.0.0",
|
|
56
56
|
"typescript": "^5.7.2",
|
|
57
57
|
"zod": "^3.24.1",
|
|
58
|
-
"@buoy-design/core": "0.8.
|
|
58
|
+
"@buoy-design/core": "0.8.11"
|
|
59
59
|
},
|
|
60
60
|
"devDependencies": {
|
|
61
61
|
"@types/node": "^22.10.2",
|