@wyw-in-js/turbopack-loader 1.1.0 → 2.0.0-alpha.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 +9 -1
- package/esm/css-modules.js +160 -145
- package/esm/css-modules.js.map +1 -1
- package/esm/file-utils.js +25 -27
- package/esm/file-utils.js.map +1 -1
- package/esm/index.js +105 -110
- package/esm/index.js.map +1 -1
- package/esm/insert-import.js +25 -25
- package/esm/insert-import.js.map +1 -1
- package/package.json +14 -10
- package/types/css-modules.js +1 -4
- package/types/file-utils.js +9 -15
- package/types/index.js +27 -30
- package/types/insert-import.js +1 -4
- package/lib/css-modules.js +0 -171
- package/lib/css-modules.js.map +0 -1
- package/lib/file-utils.js +0 -36
- package/lib/file-utils.js.map +0 -1
- package/lib/index.js +0 -129
- package/lib/index.js.map +0 -1
- package/lib/insert-import.js +0 -34
- package/lib/insert-import.js.map +0 -1
package/README.md
CHANGED
|
@@ -4,6 +4,15 @@ Turbopack-compatible loader for WyW-in-JS.
|
|
|
4
4
|
|
|
5
5
|
This package is designed to be used via Next.js `turbopack.rules`.
|
|
6
6
|
|
|
7
|
+
## Eval resolver modes
|
|
8
|
+
|
|
9
|
+
`eval.resolver: 'native'` and the native step of `eval.resolver: 'hybrid'` use `oxc-resolver` with automatic
|
|
10
|
+
`tsconfig.json` discovery.
|
|
11
|
+
|
|
12
|
+
When this loader is configured through `@wyw-in-js/nextjs`, string aliases from `turbopack.resolveAlias` or
|
|
13
|
+
`experimental.turbo.resolveAlias` are forwarded into native resolver options. Direct `turbopack.rules` usage should mirror
|
|
14
|
+
Turbopack-only aliases in `oxcOptions.resolver.alias` or use `hybrid` so the bundler fallback can resolve them.
|
|
15
|
+
|
|
7
16
|
## Output strategy
|
|
8
17
|
|
|
9
18
|
When a file produces CSS, the loader:
|
|
@@ -11,4 +20,3 @@ When a file produces CSS, the loader:
|
|
|
11
20
|
- writes `*.wyw-in-js.module.css` next to the source file (only if content changed, atomically);
|
|
12
21
|
- injects `import './<file>.wyw-in-js.module.css'` into the transformed module;
|
|
13
22
|
- wraps selectors in `:global(...)` so Next's CSS Modules pipeline does not rename WyW-generated class names.
|
|
14
|
-
|
package/esm/css-modules.js
CHANGED
|
@@ -1,165 +1,180 @@
|
|
|
1
|
-
const nestingAtRules = new Set([
|
|
1
|
+
const nestingAtRules = new Set([
|
|
2
|
+
"container",
|
|
3
|
+
"document",
|
|
4
|
+
"layer",
|
|
5
|
+
"media",
|
|
6
|
+
"scope",
|
|
7
|
+
"starting-style",
|
|
8
|
+
"supports"
|
|
9
|
+
]);
|
|
2
10
|
function isWhitespace(char) {
|
|
3
|
-
|
|
11
|
+
return char === " " || char === "\n" || char === "\r" || char === " " || char === "\f";
|
|
4
12
|
}
|
|
5
13
|
function isKeyframesAtRule(name) {
|
|
6
|
-
|
|
14
|
+
return name.toLowerCase().endsWith("keyframes");
|
|
7
15
|
}
|
|
8
16
|
function readString(css, start) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
17
|
+
const quote = css[start];
|
|
18
|
+
let idx = start + 1;
|
|
19
|
+
while (idx < css.length) {
|
|
20
|
+
const char = css[idx];
|
|
21
|
+
if (char === "\\") {
|
|
22
|
+
idx += 2;
|
|
23
|
+
} else if (char === quote) {
|
|
24
|
+
return idx + 1;
|
|
25
|
+
} else {
|
|
26
|
+
idx += 1;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return css.length;
|
|
22
30
|
}
|
|
23
31
|
function readComment(css, start) {
|
|
24
|
-
|
|
25
|
-
|
|
32
|
+
const end = css.indexOf("*/", start + 2);
|
|
33
|
+
return end === -1 ? css.length : end + 2;
|
|
26
34
|
}
|
|
27
35
|
function findAtRuleTerminator(css, start) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
36
|
+
let idx = start;
|
|
37
|
+
let parenDepth = 0;
|
|
38
|
+
let bracketDepth = 0;
|
|
39
|
+
while (idx < css.length) {
|
|
40
|
+
const char = css[idx];
|
|
41
|
+
if (char === "/" && css[idx + 1] === "*") {
|
|
42
|
+
idx = readComment(css, idx);
|
|
43
|
+
} else if (char === "\"" || char === "'") {
|
|
44
|
+
idx = readString(css, idx);
|
|
45
|
+
} else {
|
|
46
|
+
if (char === "(") parenDepth += 1;
|
|
47
|
+
else if (char === ")" && parenDepth > 0) parenDepth -= 1;
|
|
48
|
+
else if (char === "[") bracketDepth += 1;
|
|
49
|
+
else if (char === "]" && bracketDepth > 0) bracketDepth -= 1;
|
|
50
|
+
if (parenDepth === 0 && bracketDepth === 0 && (char === ";" || char === "{")) {
|
|
51
|
+
return idx;
|
|
52
|
+
}
|
|
53
|
+
idx += 1;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return css.length;
|
|
46
57
|
}
|
|
47
58
|
function findMatchingBrace(css, openBraceIdx) {
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
59
|
+
let idx = openBraceIdx + 1;
|
|
60
|
+
let depth = 1;
|
|
61
|
+
while (idx < css.length) {
|
|
62
|
+
const char = css[idx];
|
|
63
|
+
if (char === "/" && css[idx + 1] === "*") {
|
|
64
|
+
idx = readComment(css, idx);
|
|
65
|
+
} else if (char === "\"" || char === "'") {
|
|
66
|
+
idx = readString(css, idx);
|
|
67
|
+
} else {
|
|
68
|
+
if (char === "{") depth += 1;
|
|
69
|
+
else if (char === "}") {
|
|
70
|
+
depth -= 1;
|
|
71
|
+
if (depth === 0) return idx;
|
|
72
|
+
}
|
|
73
|
+
idx += 1;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return -1;
|
|
65
77
|
}
|
|
66
78
|
function splitSelectorList(selectorText) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
79
|
+
const parts = [];
|
|
80
|
+
let start = 0;
|
|
81
|
+
let idx = 0;
|
|
82
|
+
let parenDepth = 0;
|
|
83
|
+
let bracketDepth = 0;
|
|
84
|
+
while (idx < selectorText.length) {
|
|
85
|
+
const char = selectorText[idx];
|
|
86
|
+
if (char === "/" && selectorText[idx + 1] === "*") {
|
|
87
|
+
idx = readComment(selectorText, idx);
|
|
88
|
+
} else if (char === "\"" || char === "'") {
|
|
89
|
+
idx = readString(selectorText, idx);
|
|
90
|
+
} else {
|
|
91
|
+
if (char === "(") parenDepth += 1;
|
|
92
|
+
else if (char === ")" && parenDepth > 0) parenDepth -= 1;
|
|
93
|
+
else if (char === "[") bracketDepth += 1;
|
|
94
|
+
else if (char === "]" && bracketDepth > 0) bracketDepth -= 1;
|
|
95
|
+
if (parenDepth === 0 && bracketDepth === 0 && char === ",") {
|
|
96
|
+
parts.push(selectorText.slice(start, idx));
|
|
97
|
+
start = idx + 1;
|
|
98
|
+
}
|
|
99
|
+
idx += 1;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
parts.push(selectorText.slice(start));
|
|
103
|
+
return parts;
|
|
89
104
|
}
|
|
90
105
|
function wrapSelector(selectorText) {
|
|
91
|
-
|
|
92
|
-
|
|
106
|
+
const selectors = splitSelectorList(selectorText).map((s) => s.trim()).filter(Boolean);
|
|
107
|
+
return selectors.map((selector) => `:global(${selector})`).join(", ");
|
|
93
108
|
}
|
|
94
109
|
function makeCssModuleGlobalInner(css) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
110
|
+
let idx = 0;
|
|
111
|
+
let out = "";
|
|
112
|
+
while (idx < css.length) {
|
|
113
|
+
const char = css[idx];
|
|
114
|
+
if (isWhitespace(char)) {
|
|
115
|
+
out += char;
|
|
116
|
+
idx += 1;
|
|
117
|
+
} else if (char === "/" && css[idx + 1] === "*") {
|
|
118
|
+
const end = readComment(css, idx);
|
|
119
|
+
out += css.slice(idx, end);
|
|
120
|
+
idx = end;
|
|
121
|
+
} else if (char === "\"" || char === "'") {
|
|
122
|
+
const end = readString(css, idx);
|
|
123
|
+
out += css.slice(idx, end);
|
|
124
|
+
idx = end;
|
|
125
|
+
} else if (char === "@") {
|
|
126
|
+
const nameStart = idx + 1;
|
|
127
|
+
let nameEnd = nameStart;
|
|
128
|
+
while (nameEnd < css.length && /[A-Za-z0-9_-]/.test(css[nameEnd])) {
|
|
129
|
+
nameEnd += 1;
|
|
130
|
+
}
|
|
131
|
+
const atRuleName = css.slice(nameStart, nameEnd);
|
|
132
|
+
const terminatorIdx = findAtRuleTerminator(css, nameEnd);
|
|
133
|
+
const terminator = css[terminatorIdx];
|
|
134
|
+
const prelude = css.slice(nameEnd, terminatorIdx);
|
|
135
|
+
if (terminator === ";") {
|
|
136
|
+
out += css.slice(idx, terminatorIdx + 1);
|
|
137
|
+
idx = terminatorIdx + 1;
|
|
138
|
+
} else if (terminator !== "{") {
|
|
139
|
+
out += css.slice(idx);
|
|
140
|
+
break;
|
|
141
|
+
} else {
|
|
142
|
+
const blockEndIdx = findMatchingBrace(css, terminatorIdx);
|
|
143
|
+
if (blockEndIdx === -1) {
|
|
144
|
+
out += css.slice(idx);
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
const blockBody = css.slice(terminatorIdx + 1, blockEndIdx);
|
|
148
|
+
if (isKeyframesAtRule(atRuleName)) {
|
|
149
|
+
out += `@${atRuleName}${prelude}{${blockBody}}`;
|
|
150
|
+
} else if (nestingAtRules.has(atRuleName.toLowerCase())) {
|
|
151
|
+
out += `@${atRuleName}${prelude}{${makeCssModuleGlobalInner(blockBody)}}`;
|
|
152
|
+
} else {
|
|
153
|
+
out += `@${atRuleName}${prelude}{${blockBody}}`;
|
|
154
|
+
}
|
|
155
|
+
idx = blockEndIdx + 1;
|
|
156
|
+
}
|
|
157
|
+
} else {
|
|
158
|
+
// A selector rule: read until '{' at top-level.
|
|
159
|
+
const openIdx = css.indexOf("{", idx);
|
|
160
|
+
if (openIdx === -1) {
|
|
161
|
+
out += css.slice(idx);
|
|
162
|
+
break;
|
|
163
|
+
}
|
|
164
|
+
const selectorText = css.slice(idx, openIdx).trim();
|
|
165
|
+
const blockEndIdx = findMatchingBrace(css, openIdx);
|
|
166
|
+
if (blockEndIdx === -1) {
|
|
167
|
+
out += css.slice(idx);
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
const blockBody = css.slice(openIdx + 1, blockEndIdx);
|
|
171
|
+
out += `${wrapSelector(selectorText)}{${blockBody}}`;
|
|
172
|
+
idx = blockEndIdx + 1;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return out;
|
|
161
176
|
}
|
|
162
177
|
export function makeCssModuleGlobal(cssText) {
|
|
163
|
-
|
|
178
|
+
return makeCssModuleGlobalInner(cssText);
|
|
164
179
|
}
|
|
165
|
-
//# sourceMappingURL=css-modules.js.map
|
|
180
|
+
//# sourceMappingURL=css-modules.js.map
|
package/esm/css-modules.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"css-modules.js","names":["nestingAtRules","Set","isWhitespace","char","isKeyframesAtRule","name","toLowerCase","endsWith","readString","css","start","quote","idx","length","readComment","end","indexOf","findAtRuleTerminator","parenDepth","bracketDepth","findMatchingBrace","openBraceIdx","depth","splitSelectorList","selectorText","parts","push","slice","wrapSelector","selectors","map","s","trim","filter","Boolean","selector","join","makeCssModuleGlobalInner","out","nameStart","nameEnd","test","atRuleName","terminatorIdx","terminator","prelude","blockEndIdx","blockBody","has","openIdx","makeCssModuleGlobal","cssText"],"sources":["../src/css-modules.ts"],"sourcesContent":["const nestingAtRules = new Set([\n 'container',\n 'document',\n 'layer',\n 'media',\n 'scope',\n 'starting-style',\n 'supports',\n]);\n\nfunction isWhitespace(char: string) {\n return (\n char === ' ' ||\n char === '\\n' ||\n char === '\\r' ||\n char === '\\t' ||\n char === '\\f'\n );\n}\n\nfunction isKeyframesAtRule(name: string) {\n return name.toLowerCase().endsWith('keyframes');\n}\n\nfunction readString(css: string, start: number) {\n const quote = css[start];\n let idx = start + 1;\n\n while (idx < css.length) {\n const char = css[idx];\n\n if (char === '\\\\') {\n idx += 2;\n } else if (char === quote) {\n return idx + 1;\n } else {\n idx += 1;\n }\n }\n\n return css.length;\n}\n\nfunction readComment(css: string, start: number) {\n const end = css.indexOf('*/', start + 2);\n return end === -1 ? css.length : end + 2;\n}\n\nfunction findAtRuleTerminator(css: string, start: number) {\n let idx = start;\n let parenDepth = 0;\n let bracketDepth = 0;\n\n while (idx < css.length) {\n const char = css[idx];\n\n if (char === '/' && css[idx + 1] === '*') {\n idx = readComment(css, idx);\n } else if (char === '\"' || char === \"'\") {\n idx = readString(css, idx);\n } else {\n if (char === '(') parenDepth += 1;\n else if (char === ')' && parenDepth > 0) parenDepth -= 1;\n else if (char === '[') bracketDepth += 1;\n else if (char === ']' && bracketDepth > 0) bracketDepth -= 1;\n\n if (\n parenDepth === 0 &&\n bracketDepth === 0 &&\n (char === ';' || char === '{')\n ) {\n return idx;\n }\n\n idx += 1;\n }\n }\n\n return css.length;\n}\n\nfunction findMatchingBrace(css: string, openBraceIdx: number) {\n let idx = openBraceIdx + 1;\n let depth = 1;\n\n while (idx < css.length) {\n const char = css[idx];\n\n if (char === '/' && css[idx + 1] === '*') {\n idx = readComment(css, idx);\n } else if (char === '\"' || char === \"'\") {\n idx = readString(css, idx);\n } else {\n if (char === '{') depth += 1;\n else if (char === '}') {\n depth -= 1;\n if (depth === 0) return idx;\n }\n\n idx += 1;\n }\n }\n\n return -1;\n}\n\nfunction splitSelectorList(selectorText: string) {\n const parts: string[] = [];\n let start = 0;\n let idx = 0;\n let parenDepth = 0;\n let bracketDepth = 0;\n\n while (idx < selectorText.length) {\n const char = selectorText[idx];\n\n if (char === '/' && selectorText[idx + 1] === '*') {\n idx = readComment(selectorText, idx);\n } else if (char === '\"' || char === \"'\") {\n idx = readString(selectorText, idx);\n } else {\n if (char === '(') parenDepth += 1;\n else if (char === ')' && parenDepth > 0) parenDepth -= 1;\n else if (char === '[') bracketDepth += 1;\n else if (char === ']' && bracketDepth > 0) bracketDepth -= 1;\n\n if (parenDepth === 0 && bracketDepth === 0 && char === ',') {\n parts.push(selectorText.slice(start, idx));\n start = idx + 1;\n }\n\n idx += 1;\n }\n }\n\n parts.push(selectorText.slice(start));\n\n return parts;\n}\n\nfunction wrapSelector(selectorText: string) {\n const selectors = splitSelectorList(selectorText)\n .map((s) => s.trim())\n .filter(Boolean);\n\n return selectors.map((selector) => `:global(${selector})`).join(', ');\n}\n\nfunction makeCssModuleGlobalInner(css: string) {\n let idx = 0;\n let out = '';\n\n while (idx < css.length) {\n const char = css[idx];\n\n if (isWhitespace(char)) {\n out += char;\n idx += 1;\n } else if (char === '/' && css[idx + 1] === '*') {\n const end = readComment(css, idx);\n out += css.slice(idx, end);\n idx = end;\n } else if (char === '\"' || char === \"'\") {\n const end = readString(css, idx);\n out += css.slice(idx, end);\n idx = end;\n } else if (char === '@') {\n const nameStart = idx + 1;\n let nameEnd = nameStart;\n while (nameEnd < css.length && /[A-Za-z0-9_-]/.test(css[nameEnd])) {\n nameEnd += 1;\n }\n const atRuleName = css.slice(nameStart, nameEnd);\n const terminatorIdx = findAtRuleTerminator(css, nameEnd);\n const terminator = css[terminatorIdx];\n const prelude = css.slice(nameEnd, terminatorIdx);\n\n if (terminator === ';') {\n out += css.slice(idx, terminatorIdx + 1);\n idx = terminatorIdx + 1;\n } else if (terminator !== '{') {\n out += css.slice(idx);\n break;\n } else {\n const blockEndIdx = findMatchingBrace(css, terminatorIdx);\n if (blockEndIdx === -1) {\n out += css.slice(idx);\n break;\n }\n\n const blockBody = css.slice(terminatorIdx + 1, blockEndIdx);\n\n if (isKeyframesAtRule(atRuleName)) {\n out += `@${atRuleName}${prelude}{${blockBody}}`;\n } else if (nestingAtRules.has(atRuleName.toLowerCase())) {\n out += `@${atRuleName}${prelude}{${makeCssModuleGlobalInner(\n blockBody\n )}}`;\n } else {\n out += `@${atRuleName}${prelude}{${blockBody}}`;\n }\n\n idx = blockEndIdx + 1;\n }\n } else {\n // A selector rule: read until '{' at top-level.\n const openIdx = css.indexOf('{', idx);\n if (openIdx === -1) {\n out += css.slice(idx);\n break;\n }\n\n const selectorText = css.slice(idx, openIdx).trim();\n const blockEndIdx = findMatchingBrace(css, openIdx);\n if (blockEndIdx === -1) {\n out += css.slice(idx);\n break;\n }\n\n const blockBody = css.slice(openIdx + 1, blockEndIdx);\n out += `${wrapSelector(selectorText)}{${blockBody}}`;\n idx = blockEndIdx + 1;\n }\n }\n\n return out;\n}\n\nexport function makeCssModuleGlobal(cssText: string) {\n return makeCssModuleGlobalInner(cssText);\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"mappings":"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","names":[],"sources":["../src/css-modules.ts"],"version":3,"sourcesContent":["const nestingAtRules = new Set([\n 'container',\n 'document',\n 'layer',\n 'media',\n 'scope',\n 'starting-style',\n 'supports',\n]);\n\nfunction isWhitespace(char: string) {\n return (\n char === ' ' ||\n char === '\\n' ||\n char === '\\r' ||\n char === '\\t' ||\n char === '\\f'\n );\n}\n\nfunction isKeyframesAtRule(name: string) {\n return name.toLowerCase().endsWith('keyframes');\n}\n\nfunction readString(css: string, start: number) {\n const quote = css[start];\n let idx = start + 1;\n\n while (idx < css.length) {\n const char = css[idx];\n\n if (char === '\\\\') {\n idx += 2;\n } else if (char === quote) {\n return idx + 1;\n } else {\n idx += 1;\n }\n }\n\n return css.length;\n}\n\nfunction readComment(css: string, start: number) {\n const end = css.indexOf('*/', start + 2);\n return end === -1 ? css.length : end + 2;\n}\n\nfunction findAtRuleTerminator(css: string, start: number) {\n let idx = start;\n let parenDepth = 0;\n let bracketDepth = 0;\n\n while (idx < css.length) {\n const char = css[idx];\n\n if (char === '/' && css[idx + 1] === '*') {\n idx = readComment(css, idx);\n } else if (char === '\"' || char === \"'\") {\n idx = readString(css, idx);\n } else {\n if (char === '(') parenDepth += 1;\n else if (char === ')' && parenDepth > 0) parenDepth -= 1;\n else if (char === '[') bracketDepth += 1;\n else if (char === ']' && bracketDepth > 0) bracketDepth -= 1;\n\n if (\n parenDepth === 0 &&\n bracketDepth === 0 &&\n (char === ';' || char === '{')\n ) {\n return idx;\n }\n\n idx += 1;\n }\n }\n\n return css.length;\n}\n\nfunction findMatchingBrace(css: string, openBraceIdx: number) {\n let idx = openBraceIdx + 1;\n let depth = 1;\n\n while (idx < css.length) {\n const char = css[idx];\n\n if (char === '/' && css[idx + 1] === '*') {\n idx = readComment(css, idx);\n } else if (char === '\"' || char === \"'\") {\n idx = readString(css, idx);\n } else {\n if (char === '{') depth += 1;\n else if (char === '}') {\n depth -= 1;\n if (depth === 0) return idx;\n }\n\n idx += 1;\n }\n }\n\n return -1;\n}\n\nfunction splitSelectorList(selectorText: string) {\n const parts: string[] = [];\n let start = 0;\n let idx = 0;\n let parenDepth = 0;\n let bracketDepth = 0;\n\n while (idx < selectorText.length) {\n const char = selectorText[idx];\n\n if (char === '/' && selectorText[idx + 1] === '*') {\n idx = readComment(selectorText, idx);\n } else if (char === '\"' || char === \"'\") {\n idx = readString(selectorText, idx);\n } else {\n if (char === '(') parenDepth += 1;\n else if (char === ')' && parenDepth > 0) parenDepth -= 1;\n else if (char === '[') bracketDepth += 1;\n else if (char === ']' && bracketDepth > 0) bracketDepth -= 1;\n\n if (parenDepth === 0 && bracketDepth === 0 && char === ',') {\n parts.push(selectorText.slice(start, idx));\n start = idx + 1;\n }\n\n idx += 1;\n }\n }\n\n parts.push(selectorText.slice(start));\n\n return parts;\n}\n\nfunction wrapSelector(selectorText: string) {\n const selectors = splitSelectorList(selectorText)\n .map((s) => s.trim())\n .filter(Boolean);\n\n return selectors.map((selector) => `:global(${selector})`).join(', ');\n}\n\nfunction makeCssModuleGlobalInner(css: string) {\n let idx = 0;\n let out = '';\n\n while (idx < css.length) {\n const char = css[idx];\n\n if (isWhitespace(char)) {\n out += char;\n idx += 1;\n } else if (char === '/' && css[idx + 1] === '*') {\n const end = readComment(css, idx);\n out += css.slice(idx, end);\n idx = end;\n } else if (char === '\"' || char === \"'\") {\n const end = readString(css, idx);\n out += css.slice(idx, end);\n idx = end;\n } else if (char === '@') {\n const nameStart = idx + 1;\n let nameEnd = nameStart;\n while (nameEnd < css.length && /[A-Za-z0-9_-]/.test(css[nameEnd])) {\n nameEnd += 1;\n }\n const atRuleName = css.slice(nameStart, nameEnd);\n const terminatorIdx = findAtRuleTerminator(css, nameEnd);\n const terminator = css[terminatorIdx];\n const prelude = css.slice(nameEnd, terminatorIdx);\n\n if (terminator === ';') {\n out += css.slice(idx, terminatorIdx + 1);\n idx = terminatorIdx + 1;\n } else if (terminator !== '{') {\n out += css.slice(idx);\n break;\n } else {\n const blockEndIdx = findMatchingBrace(css, terminatorIdx);\n if (blockEndIdx === -1) {\n out += css.slice(idx);\n break;\n }\n\n const blockBody = css.slice(terminatorIdx + 1, blockEndIdx);\n\n if (isKeyframesAtRule(atRuleName)) {\n out += `@${atRuleName}${prelude}{${blockBody}}`;\n } else if (nestingAtRules.has(atRuleName.toLowerCase())) {\n out += `@${atRuleName}${prelude}{${makeCssModuleGlobalInner(\n blockBody\n )}}`;\n } else {\n out += `@${atRuleName}${prelude}{${blockBody}}`;\n }\n\n idx = blockEndIdx + 1;\n }\n } else {\n // A selector rule: read until '{' at top-level.\n const openIdx = css.indexOf('{', idx);\n if (openIdx === -1) {\n out += css.slice(idx);\n break;\n }\n\n const selectorText = css.slice(idx, openIdx).trim();\n const blockEndIdx = findMatchingBrace(css, openIdx);\n if (blockEndIdx === -1) {\n out += css.slice(idx);\n break;\n }\n\n const blockBody = css.slice(openIdx + 1, blockEndIdx);\n out += `${wrapSelector(selectorText)}{${blockBody}}`;\n idx = blockEndIdx + 1;\n }\n }\n\n return out;\n}\n\nexport function makeCssModuleGlobal(cssText: string) {\n return makeCssModuleGlobalInner(cssText);\n}\n"],"file":"css-modules.js"}
|
package/esm/file-utils.js
CHANGED
|
@@ -1,29 +1,27 @@
|
|
|
1
|
-
import fs from
|
|
2
|
-
import path from
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
3
|
export function writeFileIfChanged(filePath, content) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
return true;
|
|
4
|
+
let previous = null;
|
|
5
|
+
try {
|
|
6
|
+
previous = fs.readFileSync(filePath, "utf8");
|
|
7
|
+
} catch (err) {
|
|
8
|
+
if (err.code !== "ENOENT") {
|
|
9
|
+
throw err;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
if (previous === content) {
|
|
13
|
+
return false;
|
|
14
|
+
}
|
|
15
|
+
const dir = path.dirname(filePath);
|
|
16
|
+
const tmpPath = path.join(dir, `${path.basename(filePath)}.${process.pid}.${Date.now()}.tmp`);
|
|
17
|
+
try {
|
|
18
|
+
fs.writeFileSync(tmpPath, content);
|
|
19
|
+
fs.renameSync(tmpPath, filePath);
|
|
20
|
+
} finally {
|
|
21
|
+
try {
|
|
22
|
+
fs.unlinkSync(tmpPath);
|
|
23
|
+
} catch {}
|
|
24
|
+
}
|
|
25
|
+
return true;
|
|
28
26
|
}
|
|
29
|
-
//# sourceMappingURL=file-utils.js.map
|
|
27
|
+
//# sourceMappingURL=file-utils.js.map
|
package/esm/file-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"
|
|
1
|
+
{"mappings":"AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AAEjB,OAAO,SAAS,mBAAmB,UAAkB,SAAiB;CACpE,IAAI,WAA0B;AAE9B,KAAI;AACF,aAAW,GAAG,aAAa,UAAU,OAAO;UACrC,KAAK;AACZ,MAAK,IAA8B,SAAS,UAAU;AACpD,SAAM;;;AAIV,KAAI,aAAa,SAAS;AACxB,SAAO;;CAGT,MAAM,MAAM,KAAK,QAAQ,SAAS;CAClC,MAAM,UAAU,KAAK,KACnB,KACA,GAAG,KAAK,SAAS,SAAS,CAAC,GAAG,QAAQ,IAAI,GAAG,KAAK,KAAK,CAAC,MACzD;AAED,KAAI;AACF,KAAG,cAAc,SAAS,QAAQ;AAClC,KAAG,WAAW,SAAS,SAAS;WACxB;AACR,MAAI;AACF,MAAG,WAAW,QAAQ;UAChB;;AAKV,QAAO","names":[],"sources":["../src/file-utils.ts"],"version":3,"sourcesContent":["import fs from 'fs';\nimport path from 'path';\n\nexport function writeFileIfChanged(filePath: string, content: string) {\n let previous: string | null = null;\n\n try {\n previous = fs.readFileSync(filePath, 'utf8');\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code !== 'ENOENT') {\n throw err;\n }\n }\n\n if (previous === content) {\n return false;\n }\n\n const dir = path.dirname(filePath);\n const tmpPath = path.join(\n dir,\n `${path.basename(filePath)}.${process.pid}.${Date.now()}.tmp`\n );\n\n try {\n fs.writeFileSync(tmpPath, content);\n fs.renameSync(tmpPath, filePath);\n } finally {\n try {\n fs.unlinkSync(tmpPath);\n } catch {\n // ignore\n }\n }\n\n return true;\n}\n"],"file":"file-utils.js"}
|