blotdev 1.5.3 → 1.6.1
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/README.md +0 -3
- package/blot.config.example.json +0 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -2
- package/dist/config.js.map +1 -1
- package/dist/detectors.d.ts.map +1 -1
- package/dist/detectors.js +2 -19
- package/dist/detectors.js.map +1 -1
- package/dist/index.js +11 -18
- package/dist/index.js.map +1 -1
- package/dist/scanner.d.ts +1 -1
- package/dist/scanner.d.ts.map +1 -1
- package/dist/scanner.js +2 -7
- package/dist/scanner.js.map +1 -1
- package/dist/types.d.ts +0 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -15,7 +15,6 @@ That's it. The first command scans your codebase and creates `blot.config.json`
|
|
|
15
15
|
|
|
16
16
|
- **Hardcoded colors** - hex values not in your config
|
|
17
17
|
- **Undefined tokens** - `var(--color-foo)` where `--color-foo` isn't defined
|
|
18
|
-
- **Tailwind colors** - `bg-foo` classes where `--color-foo` isn't a token
|
|
19
18
|
- **Non-brand fonts** - font-family declarations not in your config
|
|
20
19
|
- **Inline styles** - `style={{}}` in JSX (optional)
|
|
21
20
|
|
|
@@ -28,7 +27,6 @@ That's it. The first command scans your codebase and creates `blot.config.json`
|
|
|
28
27
|
"colors": ["#1a1a1a", "#ffffff"],
|
|
29
28
|
"fonts": ["Inter"],
|
|
30
29
|
"tokens": ["--color-ink", "--color-paper"],
|
|
31
|
-
"ignore": ["_archive", "storybook"],
|
|
32
30
|
"allowInlineStyles": true
|
|
33
31
|
}
|
|
34
32
|
```
|
|
@@ -38,7 +36,6 @@ That's it. The first command scans your codebase and creates `blot.config.json`
|
|
|
38
36
|
| `colors` | Allowed hex colors |
|
|
39
37
|
| `fonts` | Allowed font families |
|
|
40
38
|
| `tokens` | Defined CSS custom properties |
|
|
41
|
-
| `ignore` | Folders to exclude from scanning |
|
|
42
39
|
| `allowInlineStyles` | Allow `style={{}}` in JSX |
|
|
43
40
|
|
|
44
41
|
## Pre-commit
|
package/blot.config.example.json
CHANGED
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AASjC,wBAAgB,UAAU,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAsB9D"}
|
package/dist/config.js
CHANGED
|
@@ -40,7 +40,6 @@ const DEFAULT_CONFIG = {
|
|
|
40
40
|
colors: [],
|
|
41
41
|
fonts: [],
|
|
42
42
|
tokens: [],
|
|
43
|
-
ignore: [],
|
|
44
43
|
allowInlineStyles: true,
|
|
45
44
|
};
|
|
46
45
|
function loadConfig(cwd = process.cwd()) {
|
|
@@ -56,7 +55,6 @@ function loadConfig(cwd = process.cwd()) {
|
|
|
56
55
|
colors: Array.isArray(parsed.colors) ? parsed.colors : [],
|
|
57
56
|
fonts: Array.isArray(parsed.fonts) ? parsed.fonts : [],
|
|
58
57
|
tokens: Array.isArray(parsed.tokens) ? parsed.tokens : [],
|
|
59
|
-
ignore: Array.isArray(parsed.ignore) ? parsed.ignore : [],
|
|
60
58
|
allowInlineStyles: parsed.allowInlineStyles ?? true,
|
|
61
59
|
};
|
|
62
60
|
}
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,gCAsBC;AAjCD,uCAAyB;AACzB,2CAA6B;AAG7B,MAAM,cAAc,GAAW;IAC7B,MAAM,EAAE,EAAE;IACV,KAAK,EAAE,EAAE;IACT,MAAM,EAAE,EAAE;IACV,iBAAiB,EAAE,IAAI;CACxB,CAAC;AAEF,SAAgB,UAAU,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IACpD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;IAEtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACpE,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAE/B,OAAO;YACL,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACzD,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACtD,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACzD,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,IAAI,IAAI;SACpD,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAClD,OAAO,cAAc,CAAC;IACxB,CAAC;AACH,CAAC"}
|
package/dist/detectors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detectors.d.ts","sourceRoot":"","sources":["../src/detectors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"detectors.d.ts","sourceRoot":"","sources":["../src/detectors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AA0K5C,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,CAW9E"}
|
package/dist/detectors.js
CHANGED
|
@@ -51,20 +51,6 @@ const TAILWIND_BUILTINS = new Set([
|
|
|
51
51
|
"blue", "indigo", "violet", "purple", "fuchsia",
|
|
52
52
|
"pink", "rose"
|
|
53
53
|
]);
|
|
54
|
-
// Non-color Tailwind utilities (sizes, positions, etc.)
|
|
55
|
-
const TAILWIND_NON_COLORS = new Set([
|
|
56
|
-
"xs", "sm", "md", "lg", "xl", "2xl", "3xl", "4xl", "5xl",
|
|
57
|
-
"base", "none", "auto", "full", "screen", "min", "max", "fit",
|
|
58
|
-
"center", "left", "right", "top", "bottom", "start", "end",
|
|
59
|
-
"justify", "between", "around", "evenly",
|
|
60
|
-
"wrap", "nowrap", "clip", "visible", "hidden", "scroll",
|
|
61
|
-
"solid", "dashed", "dotted", "double",
|
|
62
|
-
"normal", "medium", "bold", "semibold", "light", "thin", "extrabold",
|
|
63
|
-
"italic", "underline", "overline", "strike",
|
|
64
|
-
"uppercase", "lowercase", "capitalize",
|
|
65
|
-
"primary", "secondary", "accent", "muted", "destructive",
|
|
66
|
-
"t", "b", "l", "r", "x", "y"
|
|
67
|
-
]);
|
|
68
54
|
function detectColors(lines, file, config) {
|
|
69
55
|
const violations = [];
|
|
70
56
|
const allowedColors = config.colors.map((c) => c.toLowerCase());
|
|
@@ -175,13 +161,10 @@ function detectTailwindColors(lines, file, config) {
|
|
|
175
161
|
if (seen.has(key))
|
|
176
162
|
continue;
|
|
177
163
|
seen.add(key);
|
|
178
|
-
// Skip built-in Tailwind
|
|
164
|
+
// Skip if it's a built-in Tailwind color
|
|
179
165
|
if (TAILWIND_BUILTINS.has(colorName))
|
|
180
166
|
continue;
|
|
181
|
-
// Skip
|
|
182
|
-
if (TAILWIND_NON_COLORS.has(colorName))
|
|
183
|
-
continue;
|
|
184
|
-
// Skip custom colors from tokens
|
|
167
|
+
// Skip if it's a custom color from tokens
|
|
185
168
|
if (customColors.has(colorName))
|
|
186
169
|
continue;
|
|
187
170
|
violations.push({
|
package/dist/detectors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"detectors.js","sourceRoot":"","sources":["../src/detectors.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"detectors.js","sourceRoot":"","sources":["../src/detectors.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -40,9 +40,9 @@ const config_1 = require("./config");
|
|
|
40
40
|
const scanner_1 = require("./scanner");
|
|
41
41
|
const detectors_1 = require("./detectors");
|
|
42
42
|
const output_1 = require("./output");
|
|
43
|
-
const
|
|
44
|
-
const CSS_VAR_DEF = /--(color-[a-zA-Z0-9-]+)\s*:/g;
|
|
43
|
+
const HEX_COLOR = /#([0-9a-fA-F]{3}){1,2}\b/g;
|
|
45
44
|
const FONT_FAMILY = /font-family\s*:\s*['"]?([^'";,}]+)/gi;
|
|
45
|
+
const CSS_VAR_DEF = /--([a-zA-Z0-9-]+)\s*:/g;
|
|
46
46
|
function parseArgs(args) {
|
|
47
47
|
return {
|
|
48
48
|
staged: args.includes("--staged") || args.includes("-s"),
|
|
@@ -76,23 +76,13 @@ async function createConfig() {
|
|
|
76
76
|
const colors = new Set();
|
|
77
77
|
const fonts = new Set();
|
|
78
78
|
const tokens = new Set();
|
|
79
|
-
// Only scan CSS files for token definitions
|
|
80
|
-
const cssFiles = files.filter((f) => f.endsWith(".css") || f.endsWith(".scss"));
|
|
81
|
-
for (const file of cssFiles) {
|
|
82
|
-
const lines = (0, scanner_1.readFileLines)(file);
|
|
83
|
-
for (const line of lines) {
|
|
84
|
-
// Extract --color-* definitions with their hex values
|
|
85
|
-
const colorVarMatches = line.matchAll(CSS_COLOR_VAR);
|
|
86
|
-
for (const match of colorVarMatches) {
|
|
87
|
-
tokens.add(`--color-${match[1]}`);
|
|
88
|
-
colors.add(match[2].toLowerCase());
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
// Scan all files for font declarations
|
|
93
79
|
for (const file of files) {
|
|
94
80
|
const lines = (0, scanner_1.readFileLines)(file);
|
|
95
81
|
for (const line of lines) {
|
|
82
|
+
const colorMatches = line.matchAll(HEX_COLOR);
|
|
83
|
+
for (const match of colorMatches) {
|
|
84
|
+
colors.add(match[0].toLowerCase());
|
|
85
|
+
}
|
|
96
86
|
const fontMatches = line.matchAll(FONT_FAMILY);
|
|
97
87
|
for (const match of fontMatches) {
|
|
98
88
|
const font = match[1].trim();
|
|
@@ -100,13 +90,16 @@ async function createConfig() {
|
|
|
100
90
|
fonts.add(font);
|
|
101
91
|
}
|
|
102
92
|
}
|
|
93
|
+
const tokenMatches = line.matchAll(CSS_VAR_DEF);
|
|
94
|
+
for (const match of tokenMatches) {
|
|
95
|
+
tokens.add(`--${match[1]}`);
|
|
96
|
+
}
|
|
103
97
|
}
|
|
104
98
|
}
|
|
105
99
|
const config = {
|
|
106
100
|
colors: Array.from(colors).sort(),
|
|
107
101
|
fonts: Array.from(fonts).sort(),
|
|
108
102
|
tokens: Array.from(tokens).sort(),
|
|
109
|
-
ignore: [],
|
|
110
103
|
allowInlineStyles: true,
|
|
111
104
|
};
|
|
112
105
|
fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + "\n");
|
|
@@ -124,7 +117,7 @@ async function main() {
|
|
|
124
117
|
}
|
|
125
118
|
const cwd = process.cwd();
|
|
126
119
|
const config = (0, config_1.loadConfig)(cwd);
|
|
127
|
-
const files = options.staged ? (0, scanner_1.getStagedFiles)(cwd) : await (0, scanner_1.getAllFiles)(cwd
|
|
120
|
+
const files = options.staged ? (0, scanner_1.getStagedFiles)(cwd) : await (0, scanner_1.getAllFiles)(cwd);
|
|
128
121
|
if (files.length === 0) {
|
|
129
122
|
console.log("No files found.");
|
|
130
123
|
process.exit(0);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,uCAAyB;AACzB,2CAA6B;AAC7B,qCAAsC;AACtC,uCAAuE;AACvE,2CAA+C;AAC/C,qCAA+D;AAG/D,MAAM,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/scanner.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare function getAllFiles(cwd: string
|
|
1
|
+
export declare function getAllFiles(cwd: string): Promise<string[]>;
|
|
2
2
|
export declare function getStagedFiles(cwd: string): string[];
|
|
3
3
|
export declare function readFileLines(filePath: string): string[];
|
|
4
4
|
//# sourceMappingURL=scanner.d.ts.map
|
package/dist/scanner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":"AAOA,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOhE;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAepD;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAMxD"}
|
package/dist/scanner.js
CHANGED
|
@@ -41,16 +41,11 @@ const path = __importStar(require("path"));
|
|
|
41
41
|
const child_process_1 = require("child_process");
|
|
42
42
|
const glob_1 = require("glob");
|
|
43
43
|
const EXTENSIONS = ["js", "jsx", "ts", "tsx", "css", "scss"];
|
|
44
|
-
|
|
45
|
-
async function getAllFiles(cwd, customIgnore = []) {
|
|
44
|
+
async function getAllFiles(cwd) {
|
|
46
45
|
const pattern = `**/*.{${EXTENSIONS.join(",")}}`;
|
|
47
|
-
const ignorePatterns = [
|
|
48
|
-
...DEFAULT_IGNORE,
|
|
49
|
-
...customIgnore.map((p) => (p.includes("*") ? p : `**/${p}/**`)),
|
|
50
|
-
];
|
|
51
46
|
return (0, glob_1.glob)(pattern, {
|
|
52
47
|
cwd,
|
|
53
|
-
ignore:
|
|
48
|
+
ignore: ["**/node_modules/**", "**/dist/**", "**/build/**", "**/.next/**"],
|
|
54
49
|
absolute: true,
|
|
55
50
|
});
|
|
56
51
|
}
|
package/dist/scanner.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"scanner.js","sourceRoot":"","sources":["../src/scanner.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,kCAOC;AAED,wCAeC;AAED,sCAMC;AAvCD,uCAAyB;AACzB,2CAA6B;AAC7B,iDAAyC;AACzC,+BAA4B;AAE5B,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAEtD,KAAK,UAAU,WAAW,CAAC,GAAW;IAC3C,MAAM,OAAO,GAAG,SAAS,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IACjD,OAAO,IAAA,WAAI,EAAC,OAAO,EAAE;QACnB,GAAG;QACH,MAAM,EAAE,CAAC,oBAAoB,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,CAAC;QAC1E,QAAQ,EAAE,IAAI;KACf,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,cAAc,CAAC,GAAW;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,iDAAiD,EAAE;YACzE,GAAG;YACH,QAAQ,EAAE,OAAO;SAClB,CAAC,CAAC;QAEH,OAAO,MAAM;aACV,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;aAC9D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAgB,aAAa,CAAC,QAAgB;IAC5C,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
|
package/dist/types.d.ts
CHANGED
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,cAAc,GAAG,iBAAiB,GAAG,gBAAgB,CAAC;IAC/E,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,OAAO,CAAC;CACf"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "blotdev",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.1",
|
|
4
4
|
"description": "CLI tool to scan codebases for brand consistency issues - catches hardcoded colors, fonts, and styles that should use design tokens.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|