@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 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
-
@@ -1,165 +1,180 @@
1
- const nestingAtRules = new Set(['container', 'document', 'layer', 'media', 'scope', 'starting-style', 'supports']);
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
- return char === ' ' || char === '\n' || char === '\r' || char === '\t' || char === '\f';
11
+ return char === " " || char === "\n" || char === "\r" || char === " " || char === "\f";
4
12
  }
5
13
  function isKeyframesAtRule(name) {
6
- return name.toLowerCase().endsWith('keyframes');
14
+ return name.toLowerCase().endsWith("keyframes");
7
15
  }
8
16
  function readString(css, start) {
9
- const quote = css[start];
10
- let idx = start + 1;
11
- while (idx < css.length) {
12
- const char = css[idx];
13
- if (char === '\\') {
14
- idx += 2;
15
- } else if (char === quote) {
16
- return idx + 1;
17
- } else {
18
- idx += 1;
19
- }
20
- }
21
- return css.length;
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
- const end = css.indexOf('*/', start + 2);
25
- return end === -1 ? css.length : end + 2;
32
+ const end = css.indexOf("*/", start + 2);
33
+ return end === -1 ? css.length : end + 2;
26
34
  }
27
35
  function findAtRuleTerminator(css, start) {
28
- let idx = start;
29
- let parenDepth = 0;
30
- let bracketDepth = 0;
31
- while (idx < css.length) {
32
- const char = css[idx];
33
- if (char === '/' && css[idx + 1] === '*') {
34
- idx = readComment(css, idx);
35
- } else if (char === '"' || char === "'") {
36
- idx = readString(css, idx);
37
- } else {
38
- if (char === '(') parenDepth += 1;else if (char === ')' && parenDepth > 0) parenDepth -= 1;else if (char === '[') bracketDepth += 1;else if (char === ']' && bracketDepth > 0) bracketDepth -= 1;
39
- if (parenDepth === 0 && bracketDepth === 0 && (char === ';' || char === '{')) {
40
- return idx;
41
- }
42
- idx += 1;
43
- }
44
- }
45
- return css.length;
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
- let idx = openBraceIdx + 1;
49
- let depth = 1;
50
- while (idx < css.length) {
51
- const char = css[idx];
52
- if (char === '/' && css[idx + 1] === '*') {
53
- idx = readComment(css, idx);
54
- } else if (char === '"' || char === "'") {
55
- idx = readString(css, idx);
56
- } else {
57
- if (char === '{') depth += 1;else if (char === '}') {
58
- depth -= 1;
59
- if (depth === 0) return idx;
60
- }
61
- idx += 1;
62
- }
63
- }
64
- return -1;
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
- const parts = [];
68
- let start = 0;
69
- let idx = 0;
70
- let parenDepth = 0;
71
- let bracketDepth = 0;
72
- while (idx < selectorText.length) {
73
- const char = selectorText[idx];
74
- if (char === '/' && selectorText[idx + 1] === '*') {
75
- idx = readComment(selectorText, idx);
76
- } else if (char === '"' || char === "'") {
77
- idx = readString(selectorText, idx);
78
- } else {
79
- if (char === '(') parenDepth += 1;else if (char === ')' && parenDepth > 0) parenDepth -= 1;else if (char === '[') bracketDepth += 1;else if (char === ']' && bracketDepth > 0) bracketDepth -= 1;
80
- if (parenDepth === 0 && bracketDepth === 0 && char === ',') {
81
- parts.push(selectorText.slice(start, idx));
82
- start = idx + 1;
83
- }
84
- idx += 1;
85
- }
86
- }
87
- parts.push(selectorText.slice(start));
88
- return parts;
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
- const selectors = splitSelectorList(selectorText).map(s => s.trim()).filter(Boolean);
92
- return selectors.map(selector => `:global(${selector})`).join(', ');
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
- let idx = 0;
96
- let out = '';
97
- while (idx < css.length) {
98
- const char = css[idx];
99
- if (isWhitespace(char)) {
100
- out += char;
101
- idx += 1;
102
- } else if (char === '/' && css[idx + 1] === '*') {
103
- const end = readComment(css, idx);
104
- out += css.slice(idx, end);
105
- idx = end;
106
- } else if (char === '"' || char === "'") {
107
- const end = readString(css, idx);
108
- out += css.slice(idx, end);
109
- idx = end;
110
- } else if (char === '@') {
111
- const nameStart = idx + 1;
112
- let nameEnd = nameStart;
113
- while (nameEnd < css.length && /[A-Za-z0-9_-]/.test(css[nameEnd])) {
114
- nameEnd += 1;
115
- }
116
- const atRuleName = css.slice(nameStart, nameEnd);
117
- const terminatorIdx = findAtRuleTerminator(css, nameEnd);
118
- const terminator = css[terminatorIdx];
119
- const prelude = css.slice(nameEnd, terminatorIdx);
120
- if (terminator === ';') {
121
- out += css.slice(idx, terminatorIdx + 1);
122
- idx = terminatorIdx + 1;
123
- } else if (terminator !== '{') {
124
- out += css.slice(idx);
125
- break;
126
- } else {
127
- const blockEndIdx = findMatchingBrace(css, terminatorIdx);
128
- if (blockEndIdx === -1) {
129
- out += css.slice(idx);
130
- break;
131
- }
132
- const blockBody = css.slice(terminatorIdx + 1, blockEndIdx);
133
- if (isKeyframesAtRule(atRuleName)) {
134
- out += `@${atRuleName}${prelude}{${blockBody}}`;
135
- } else if (nestingAtRules.has(atRuleName.toLowerCase())) {
136
- out += `@${atRuleName}${prelude}{${makeCssModuleGlobalInner(blockBody)}}`;
137
- } else {
138
- out += `@${atRuleName}${prelude}{${blockBody}}`;
139
- }
140
- idx = blockEndIdx + 1;
141
- }
142
- } else {
143
- // A selector rule: read until '{' at top-level.
144
- const openIdx = css.indexOf('{', idx);
145
- if (openIdx === -1) {
146
- out += css.slice(idx);
147
- break;
148
- }
149
- const selectorText = css.slice(idx, openIdx).trim();
150
- const blockEndIdx = findMatchingBrace(css, openIdx);
151
- if (blockEndIdx === -1) {
152
- out += css.slice(idx);
153
- break;
154
- }
155
- const blockBody = css.slice(openIdx + 1, blockEndIdx);
156
- out += `${wrapSelector(selectorText)}{${blockBody}}`;
157
- idx = blockEndIdx + 1;
158
- }
159
- }
160
- return out;
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
- return makeCssModuleGlobalInner(cssText);
178
+ return makeCssModuleGlobalInner(cssText);
164
179
  }
165
- //# sourceMappingURL=css-modules.js.map
180
+ //# sourceMappingURL=css-modules.js.map
@@ -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 'fs';
2
- import path from 'path';
1
+ import fs from "fs";
2
+ import path from "path";
3
3
  export function writeFileIfChanged(filePath, content) {
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
- // ignore
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
@@ -1 +1 @@
1
- {"version":3,"file":"file-utils.js","names":["fs","path","writeFileIfChanged","filePath","content","previous","readFileSync","err","code","dir","dirname","tmpPath","join","basename","process","pid","Date","now","writeFileSync","renameSync","unlinkSync"],"sources":["../src/file-utils.ts"],"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"],"mappings":"AAAA,OAAOA,EAAE,MAAM,IAAI;AACnB,OAAOC,IAAI,MAAM,MAAM;AAEvB,OAAO,SAASC,kBAAkBA,CAACC,QAAgB,EAAEC,OAAe,EAAE;EACpE,IAAIC,QAAuB,GAAG,IAAI;EAElC,IAAI;IACFA,QAAQ,GAAGL,EAAE,CAACM,YAAY,CAACH,QAAQ,EAAE,MAAM,CAAC;EAC9C,CAAC,CAAC,OAAOI,GAAG,EAAE;IACZ,IAAKA,GAAG,CAA2BC,IAAI,KAAK,QAAQ,EAAE;MACpD,MAAMD,GAAG;IACX;EACF;EAEA,IAAIF,QAAQ,KAAKD,OAAO,EAAE;IACxB,OAAO,KAAK;EACd;EAEA,MAAMK,GAAG,GAAGR,IAAI,CAACS,OAAO,CAACP,QAAQ,CAAC;EAClC,MAAMQ,OAAO,GAAGV,IAAI,CAACW,IAAI,CACvBH,GAAG,EACH,GAAGR,IAAI,CAACY,QAAQ,CAACV,QAAQ,CAAC,IAAIW,OAAO,CAACC,GAAG,IAAIC,IAAI,CAACC,GAAG,CAAC,CAAC,MACzD,CAAC;EAED,IAAI;IACFjB,EAAE,CAACkB,aAAa,CAACP,OAAO,EAAEP,OAAO,CAAC;IAClCJ,EAAE,CAACmB,UAAU,CAACR,OAAO,EAAER,QAAQ,CAAC;EAClC,CAAC,SAAS;IACR,IAAI;MACFH,EAAE,CAACoB,UAAU,CAACT,OAAO,CAAC;IACxB,CAAC,CAAC,MAAM;MACN;IAAA;EAEJ;EAEA,OAAO,IAAI;AACb","ignoreList":[]}
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"}