@bamboocss/vite 1.37.4 → 1.37.5
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/dist/index.cjs +20 -5
- package/dist/index.mjs +20 -5
- package/package.json +9 -9
package/dist/index.cjs
CHANGED
|
@@ -43,6 +43,19 @@ let ts_morph = require("ts-morph");
|
|
|
43
43
|
/** The generated declaration that identifies a Bamboo stylesheet after minification. */
|
|
44
44
|
const SENTINEL = "--made-with-bamboo";
|
|
45
45
|
/**
|
|
46
|
+
* A class name with its CSS escapes removed, which is the only spelling both sides agree on.
|
|
47
|
+
*
|
|
48
|
+
* The same class reaches the stylesheet either escaped or not — `--bottom-mask-size_16px` is a
|
|
49
|
+
* valid selector as written, since a CSS ident may begin with `--`, while `esc` produces the
|
|
50
|
+
* escaped `\--…` form that reachability keys are stored in. Comparing raw spellings therefore
|
|
51
|
+
* missed a rule written the other way, and pruning removed an atom whose rule was in the sheet
|
|
52
|
+
* all along. It could only ever affect names needing an escape, which is why it presented as
|
|
53
|
+
* every custom property and vendor-prefixed declaration losing its rule at once.
|
|
54
|
+
*
|
|
55
|
+
* Stripping backslashes is unambiguous here: a semantic atom name never contains a literal one.
|
|
56
|
+
*/
|
|
57
|
+
const bare = (className) => className.replaceAll("\\", "");
|
|
58
|
+
/**
|
|
46
59
|
* Remove source-graph atoms no transformed module can emit.
|
|
47
60
|
*
|
|
48
61
|
* `prunableClasses` contains only atoms extracted from the source graph. Explicit `staticCss`
|
|
@@ -52,6 +65,8 @@ const SENTINEL = "--made-with-bamboo";
|
|
|
52
65
|
const pruneStaticCss = (css, session, { prune = true } = {}) => {
|
|
53
66
|
if (!css.includes(SENTINEL)) return css;
|
|
54
67
|
const root = postcss.default.parse(css);
|
|
68
|
+
const prunable = new Set([...session.prunableClasses].map(bare));
|
|
69
|
+
const used = new Set([...session.usedClasses].map(bare));
|
|
55
70
|
const isUtilityRule = (rule) => {
|
|
56
71
|
let parent = rule.parent;
|
|
57
72
|
while (parent) {
|
|
@@ -69,7 +84,7 @@ const pruneStaticCss = (css, session, { prune = true } = {}) => {
|
|
|
69
84
|
try {
|
|
70
85
|
(0, postcss_selector_parser.default)((selectors) => {
|
|
71
86
|
selectors.walkClasses((classNode) => {
|
|
72
|
-
classes.add(classNode.toString().slice(1));
|
|
87
|
+
classes.add(bare(classNode.toString().slice(1)));
|
|
73
88
|
});
|
|
74
89
|
}).processSync(rule.selector);
|
|
75
90
|
} catch {
|
|
@@ -77,7 +92,7 @@ const pruneStaticCss = (css, session, { prune = true } = {}) => {
|
|
|
77
92
|
}
|
|
78
93
|
if (classes.size !== 1) return;
|
|
79
94
|
const [className] = classes;
|
|
80
|
-
if (!className || !
|
|
95
|
+
if (!className || !prunable.has(className) || used.has(className)) return;
|
|
81
96
|
rule.remove();
|
|
82
97
|
});
|
|
83
98
|
let removed = true;
|
|
@@ -96,7 +111,7 @@ const pruneStaticCss = (css, session, { prune = true } = {}) => {
|
|
|
96
111
|
try {
|
|
97
112
|
(0, postcss_selector_parser.default)((selectors) => {
|
|
98
113
|
selectors.walkClasses((classNode) => {
|
|
99
|
-
present.add(classNode.toString().slice(1));
|
|
114
|
+
present.add(bare(classNode.toString().slice(1)));
|
|
100
115
|
});
|
|
101
116
|
}).processSync(rule.selector);
|
|
102
117
|
} catch {}
|
|
@@ -107,8 +122,8 @@ const pruneStaticCss = (css, session, { prune = true } = {}) => {
|
|
|
107
122
|
orphaned.push(className);
|
|
108
123
|
continue;
|
|
109
124
|
}
|
|
110
|
-
if (!
|
|
111
|
-
if (present.has(className)) continue;
|
|
125
|
+
if (!prunable.has(bare(className))) continue;
|
|
126
|
+
if (present.has(bare(className))) continue;
|
|
112
127
|
orphaned.push(className);
|
|
113
128
|
}
|
|
114
129
|
if (orphaned.length) {
|
package/dist/index.mjs
CHANGED
|
@@ -13,6 +13,19 @@ import { Node, SyntaxKind, VariableDeclarationKind } from "ts-morph";
|
|
|
13
13
|
/** The generated declaration that identifies a Bamboo stylesheet after minification. */
|
|
14
14
|
const SENTINEL = "--made-with-bamboo";
|
|
15
15
|
/**
|
|
16
|
+
* A class name with its CSS escapes removed, which is the only spelling both sides agree on.
|
|
17
|
+
*
|
|
18
|
+
* The same class reaches the stylesheet either escaped or not — `--bottom-mask-size_16px` is a
|
|
19
|
+
* valid selector as written, since a CSS ident may begin with `--`, while `esc` produces the
|
|
20
|
+
* escaped `\--…` form that reachability keys are stored in. Comparing raw spellings therefore
|
|
21
|
+
* missed a rule written the other way, and pruning removed an atom whose rule was in the sheet
|
|
22
|
+
* all along. It could only ever affect names needing an escape, which is why it presented as
|
|
23
|
+
* every custom property and vendor-prefixed declaration losing its rule at once.
|
|
24
|
+
*
|
|
25
|
+
* Stripping backslashes is unambiguous here: a semantic atom name never contains a literal one.
|
|
26
|
+
*/
|
|
27
|
+
const bare = (className) => className.replaceAll("\\", "");
|
|
28
|
+
/**
|
|
16
29
|
* Remove source-graph atoms no transformed module can emit.
|
|
17
30
|
*
|
|
18
31
|
* `prunableClasses` contains only atoms extracted from the source graph. Explicit `staticCss`
|
|
@@ -22,6 +35,8 @@ const SENTINEL = "--made-with-bamboo";
|
|
|
22
35
|
const pruneStaticCss = (css, session, { prune = true } = {}) => {
|
|
23
36
|
if (!css.includes(SENTINEL)) return css;
|
|
24
37
|
const root = postcss.parse(css);
|
|
38
|
+
const prunable = new Set([...session.prunableClasses].map(bare));
|
|
39
|
+
const used = new Set([...session.usedClasses].map(bare));
|
|
25
40
|
const isUtilityRule = (rule) => {
|
|
26
41
|
let parent = rule.parent;
|
|
27
42
|
while (parent) {
|
|
@@ -39,7 +54,7 @@ const pruneStaticCss = (css, session, { prune = true } = {}) => {
|
|
|
39
54
|
try {
|
|
40
55
|
selectorParser((selectors) => {
|
|
41
56
|
selectors.walkClasses((classNode) => {
|
|
42
|
-
classes.add(classNode.toString().slice(1));
|
|
57
|
+
classes.add(bare(classNode.toString().slice(1)));
|
|
43
58
|
});
|
|
44
59
|
}).processSync(rule.selector);
|
|
45
60
|
} catch {
|
|
@@ -47,7 +62,7 @@ const pruneStaticCss = (css, session, { prune = true } = {}) => {
|
|
|
47
62
|
}
|
|
48
63
|
if (classes.size !== 1) return;
|
|
49
64
|
const [className] = classes;
|
|
50
|
-
if (!className || !
|
|
65
|
+
if (!className || !prunable.has(className) || used.has(className)) return;
|
|
51
66
|
rule.remove();
|
|
52
67
|
});
|
|
53
68
|
let removed = true;
|
|
@@ -66,7 +81,7 @@ const pruneStaticCss = (css, session, { prune = true } = {}) => {
|
|
|
66
81
|
try {
|
|
67
82
|
selectorParser((selectors) => {
|
|
68
83
|
selectors.walkClasses((classNode) => {
|
|
69
|
-
present.add(classNode.toString().slice(1));
|
|
84
|
+
present.add(bare(classNode.toString().slice(1)));
|
|
70
85
|
});
|
|
71
86
|
}).processSync(rule.selector);
|
|
72
87
|
} catch {}
|
|
@@ -77,8 +92,8 @@ const pruneStaticCss = (css, session, { prune = true } = {}) => {
|
|
|
77
92
|
orphaned.push(className);
|
|
78
93
|
continue;
|
|
79
94
|
}
|
|
80
|
-
if (!
|
|
81
|
-
if (present.has(className)) continue;
|
|
95
|
+
if (!prunable.has(bare(className))) continue;
|
|
96
|
+
if (present.has(bare(className))) continue;
|
|
82
97
|
orphaned.push(className);
|
|
83
98
|
}
|
|
84
99
|
if (orphaned.length) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bamboocss/vite",
|
|
3
|
-
"version": "1.37.
|
|
3
|
+
"version": "1.37.5",
|
|
4
4
|
"description": "Vite integration for Bamboo CSS",
|
|
5
5
|
"homepage": "https://bamboocss.com",
|
|
6
6
|
"license": "MIT",
|
|
@@ -40,18 +40,18 @@
|
|
|
40
40
|
"postcss": "8.5.26",
|
|
41
41
|
"postcss-selector-parser": "7.1.5",
|
|
42
42
|
"ts-morph": "28.0.0",
|
|
43
|
-
"@bamboocss/
|
|
44
|
-
"@bamboocss/core": "1.37.
|
|
45
|
-
"@bamboocss/
|
|
46
|
-
"@bamboocss/
|
|
47
|
-
"@bamboocss/
|
|
48
|
-
"@bamboocss/shared": "1.37.
|
|
49
|
-
"@bamboocss/types": "1.37.
|
|
43
|
+
"@bamboocss/extractor": "1.37.5",
|
|
44
|
+
"@bamboocss/core": "1.37.5",
|
|
45
|
+
"@bamboocss/config": "1.37.5",
|
|
46
|
+
"@bamboocss/logger": "1.37.5",
|
|
47
|
+
"@bamboocss/node": "1.37.5",
|
|
48
|
+
"@bamboocss/shared": "1.37.5",
|
|
49
|
+
"@bamboocss/types": "1.37.5"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@jridgewell/trace-mapping": "^0.3.31",
|
|
53
53
|
"vite": "7.2.6",
|
|
54
|
-
"@bamboocss/fixture": "1.37.
|
|
54
|
+
"@bamboocss/fixture": "1.37.5"
|
|
55
55
|
},
|
|
56
56
|
"peerDependencies": {
|
|
57
57
|
"vite": ">=5"
|