@devflow-tools/plugin-css 0.9.0 → 0.11.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.
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-selectors.d.ts","sourceRoot":"","sources":["../../src/analyzers/audit-selectors.ts"],"names":[],"mappings":"AAAA,wBAAsB,cAAc,CAAC,MAAM,EAAE;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"audit-selectors.d.ts","sourceRoot":"","sources":["../../src/analyzers/audit-selectors.ts"],"names":[],"mappings":"AAAA,wBAAsB,cAAc,CAAC,MAAM,EAAE;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC,CAkF9D"}
|
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
export async function auditSelectors(params) {
|
|
2
2
|
const { existsSync, readFileSync } = await import('fs');
|
|
3
|
-
const { join } = await import('path');
|
|
3
|
+
const { extname, join } = await import('path');
|
|
4
|
+
const CSS_EXTENSIONS = new Set(['.css', '.scss', '.sass', '.less', '.styl']);
|
|
5
|
+
if (!CSS_EXTENSIONS.has(extname(params.filePath)) && !/\.module\.(css|scss)$/i.test(params.filePath)) {
|
|
6
|
+
return {
|
|
7
|
+
content: [{
|
|
8
|
+
type: "text",
|
|
9
|
+
text: JSON.stringify({
|
|
10
|
+
file: params.filePath,
|
|
11
|
+
error: "Not a CSS file",
|
|
12
|
+
selectors: [],
|
|
13
|
+
issues: [],
|
|
14
|
+
}, null, 2),
|
|
15
|
+
}],
|
|
16
|
+
};
|
|
17
|
+
}
|
|
4
18
|
const targetFile = params.filePath.startsWith('/')
|
|
5
19
|
? params.filePath
|
|
6
20
|
: join(params.projectRoot, params.filePath);
|
|
@@ -17,14 +31,28 @@ export async function auditSelectors(params) {
|
|
|
17
31
|
}],
|
|
18
32
|
};
|
|
19
33
|
}
|
|
20
|
-
|
|
34
|
+
let content = readFileSync(targetFile, 'utf-8');
|
|
35
|
+
// Strip CSS comments
|
|
36
|
+
content = content.replace(/\/\*[\s\S]*?\*\//g, '');
|
|
21
37
|
const issues = [];
|
|
22
|
-
|
|
23
|
-
|
|
38
|
+
// Extract selectors only from CSS rule blocks (before each {), not from property values
|
|
39
|
+
const ruleBlocks = content.match(/([^{]+)\{/g) || [];
|
|
40
|
+
const selectors = [];
|
|
41
|
+
for (const block of ruleBlocks) {
|
|
42
|
+
const selectorPart = block.slice(0, -1).trim();
|
|
43
|
+
// Skip at-rules (@tailwind, @layer, @apply, @media, etc.)
|
|
44
|
+
if (/^@/.test(selectorPart))
|
|
45
|
+
continue;
|
|
46
|
+
const found = selectorPart.match(/[.#][a-zA-Z_][\w-]*/g) || [];
|
|
47
|
+
selectors.push(...found);
|
|
48
|
+
}
|
|
49
|
+
// Filter numeric pseudo-selectors (e.g., .9 from "3.9%")
|
|
50
|
+
const validSelectors = selectors.filter(s => !/^\.\d+/.test(s));
|
|
51
|
+
// Basic audit checks (on stripped content)
|
|
24
52
|
if (content.includes('!important')) {
|
|
25
53
|
issues.push('Contains !important declarations — consider refactoring specificity');
|
|
26
54
|
}
|
|
27
|
-
if (
|
|
55
|
+
if (validSelectors.length > 50) {
|
|
28
56
|
issues.push('High class count — consider splitting into smaller modules');
|
|
29
57
|
}
|
|
30
58
|
if (content.includes('float:')) {
|
|
@@ -35,8 +63,8 @@ export async function auditSelectors(params) {
|
|
|
35
63
|
type: "text",
|
|
36
64
|
text: JSON.stringify({
|
|
37
65
|
file: params.filePath,
|
|
38
|
-
selectors:
|
|
39
|
-
selectorCount:
|
|
66
|
+
selectors: validSelectors.slice(0, 20),
|
|
67
|
+
selectorCount: validSelectors.length,
|
|
40
68
|
issues,
|
|
41
69
|
status: issues.length === 0 ? 'clean' : 'needs review',
|
|
42
70
|
}, null, 2),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-selectors.js","sourceRoot":"","sources":["../../src/analyzers/audit-selectors.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAGpC;IACC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"audit-selectors.js","sourceRoot":"","sources":["../../src/analyzers/audit-selectors.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@devflow-tools/plugin-css",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.11.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -26,5 +26,5 @@
|
|
|
26
26
|
"files": [
|
|
27
27
|
"dist"
|
|
28
28
|
],
|
|
29
|
-
"gitHead": "
|
|
29
|
+
"gitHead": "ff6ac69b0f3cc95cb32ffe8bcbf21b24767aa914"
|
|
30
30
|
}
|