Skip to content

Commit d0959b6

Browse files
committed
chore(postcss): replace css-modules-loader-core
1 parent ad6d535 commit d0959b6

File tree

8 files changed

+283
-728
lines changed

8 files changed

+283
-728
lines changed

__tests__/__snapshots__/main.test.ts.snap

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export declare const nestedClass: string;
99
export declare const nestedStyles: string;
1010
export declare const number1: string;
1111
export declare const someStyles: string;
12+
export declare const whereSelector: string;
1213
",
1314
"path": "../__generated__/__tests__/dummy-styles/alias-prefixes.scss.d.ts",
1415
},
@@ -19,6 +20,7 @@ export declare const nestedClass: string;
1920
export declare const number1: string;
2021
export declare const someClass: string;
2122
export declare const someStyles: string;
23+
export declare const whereSelector: string;
2224
",
2325
"path": "../__generated__/__tests__/dummy-styles/aliases.scss.d.ts",
2426
},
@@ -27,6 +29,7 @@ export declare const someStyles: string;
2729
export declare const nestedClass: string;
2830
export declare const number1: string;
2931
export declare const someStyles: string;
32+
export declare const whereSelector: string;
3033
",
3134
"path": "../__generated__/__tests__/dummy-styles/complex.scss.d.ts",
3235
},
@@ -75,6 +78,7 @@ Array [
7578
nestedStyles: string;
7679
number1: string;
7780
someStyles: string;
81+
whereSelector: string;
7882
};
7983
8084
export type ClassNames = keyof Styles;
@@ -93,6 +97,7 @@ export default styles;
9397
number1: string;
9498
someClass: string;
9599
someStyles: string;
100+
whereSelector: string;
96101
};
97102
98103
export type ClassNames = keyof Styles;
@@ -109,6 +114,7 @@ export default styles;
109114
nestedClass: string;
110115
number1: string;
111116
someStyles: string;
117+
whereSelector: string;
112118
};
113119
114120
export type ClassNames = keyof Styles;
@@ -211,6 +217,7 @@ export declare const nestedClass: string;
211217
export declare const nestedStyles: string;
212218
export declare const number1: string;
213219
export declare const someStyles: string;
220+
export declare const whereSelector: string;
214221
",
215222
"path": "../__generated__/__tests__/dummy-styles/alias-prefixes.scss.d.ts",
216223
},
@@ -221,6 +228,7 @@ export declare const nestedClass: string;
221228
export declare const number1: string;
222229
export declare const someClass: string;
223230
export declare const someStyles: string;
231+
export declare const whereSelector: string;
224232
",
225233
"path": "../__generated__/__tests__/dummy-styles/aliases.scss.d.ts",
226234
},
@@ -229,6 +237,7 @@ export declare const someStyles: string;
229237
export declare const nestedClass: string;
230238
export declare const number1: string;
231239
export declare const someStyles: string;
240+
export declare const whereSelector: string;
232241
",
233242
"path": "../__generated__/__tests__/dummy-styles/complex.scss.d.ts",
234243
},
@@ -277,6 +286,7 @@ Array [
277286
nestedStyles: string;
278287
number1: string;
279288
someStyles: string;
289+
whereSelector: string;
280290
};
281291
282292
export type ClassNames = keyof Styles;
@@ -295,6 +305,7 @@ export default styles;
295305
number1: string;
296306
someClass: string;
297307
someStyles: string;
308+
whereSelector: string;
298309
};
299310
300311
export type ClassNames = keyof Styles;
@@ -311,6 +322,7 @@ export default styles;
311322
nestedClass: string;
312323
number1: string;
313324
someStyles: string;
325+
whereSelector: string;
314326
};
315327
316328
export type ClassNames = keyof Styles;

__tests__/dummy-styles/complex.scss

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,7 @@
1515
border: 1px;
1616
}
1717
}
18+
19+
:where(.where-selector) {
20+
color: blue;
21+
}

__tests__/main.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ describeAllImplementations((implementation) => {
6060

6161
expect(fs.writeFileSync).toBeCalledWith(
6262
`${expectedDirname}/complex.scss.d.ts`,
63-
"export declare const nestedAnother: string;\nexport declare const nestedClass: string;\nexport declare const number1: string;\nexport declare const someStyles: string;\n"
63+
"export declare const nestedAnother: string;\nexport declare const nestedClass: string;\nexport declare const number1: string;\nexport declare const someStyles: string;\nexport declare const whereSelector: string;\n"
6464
);
6565
expect(fs.writeFileSync).toBeCalledWith(
6666
`${expectedDirname}/style.scss.d.ts`,
@@ -101,7 +101,7 @@ describeAllImplementations((implementation) => {
101101

102102
expect(fs.writeFileSync).toBeCalledWith(
103103
`${expectedDirname}/complex.scss.d.ts`,
104-
"export declare const nestedAnother: string;\nexport declare const nestedClass: string;\nexport declare const number1: string;\nexport declare const someStyles: string;\n"
104+
"export declare const nestedAnother: string;\nexport declare const nestedClass: string;\nexport declare const number1: string;\nexport declare const someStyles: string;\nexport declare const whereSelector: string;\n"
105105
);
106106

107107
// Files that should match the ignore pattern.

__tests__/sass/file-to-class-names.test.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ describeAllImplementations((implementation) => {
1414
"nestedClass",
1515
"number1",
1616
"someStyles",
17+
"whereSelector",
1718
]);
1819
});
1920

@@ -32,6 +33,7 @@ describeAllImplementations((implementation) => {
3233
"nested-class",
3334
"number-1",
3435
"some-styles",
36+
"where-selector",
3537
]);
3638
});
3739

@@ -49,6 +51,7 @@ describeAllImplementations((implementation) => {
4951
"nested-class",
5052
"number-1",
5153
"some-styles",
54+
"where-selector",
5255
]);
5356
});
5457

@@ -66,6 +69,7 @@ describeAllImplementations((implementation) => {
6669
"nested_class",
6770
"number_1",
6871
"some_styles",
72+
"where_selector",
6973
]);
7074
});
7175

@@ -115,6 +119,9 @@ describeAllImplementations((implementation) => {
115119
"some_styles",
116120
"some-styles",
117121
"someStyles",
122+
"where_selector",
123+
"where-selector",
124+
"whereSelector",
118125
]);
119126
});
120127

@@ -136,6 +143,8 @@ describeAllImplementations((implementation) => {
136143
"number-1",
137144
"some_styles",
138145
"some-styles",
146+
"where_selector",
147+
"where-selector",
139148
]);
140149
});
141150

@@ -153,6 +162,7 @@ describeAllImplementations((implementation) => {
153162
"nested_class",
154163
"number_1",
155164
"some_styles",
165+
"where_selector",
156166
]);
157167
});
158168
});
@@ -177,6 +187,7 @@ describeAllImplementations((implementation) => {
177187
"number1",
178188
"someClass",
179189
"someStyles",
190+
"whereSelector",
180191
]);
181192
});
182193
});
@@ -203,6 +214,7 @@ describeAllImplementations((implementation) => {
203214
"nestedStyles",
204215
"number1",
205216
"someStyles",
217+
"whereSelector",
206218
]);
207219
});
208220
});

lib/sass/file-to-class-names.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,7 @@ export const fileToClassNames = async (
7575
importer: customImporters({ aliases, aliasPrefixes, importer }),
7676
});
7777

78-
const { exportTokens } = await sourceToClassNames(result.css);
79-
80-
const classNames = Object.keys(exportTokens);
78+
const classNames = await sourceToClassNames(result.css, file);
8179
const transformers = nameFormats.map((item) => transformersMap[item]);
8280
const transformedClassNames = new Set<ClassName>([]);
8381
classNames.forEach((className: ClassName) => {

lib/sass/source-to-class-names.ts

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,20 @@
1-
import Core, { Source } from "css-modules-loader-core";
1+
import postcss from "postcss";
2+
import PostcssModulesPlugin from "postcss-modules";
23

3-
const core = new Core();
4-
5-
export const sourceToClassNames = (source: Source) => {
6-
return core.load(source, undefined, undefined, noOpPathFetcher);
4+
/**
5+
* Converts a CSS source string to a list of exports (class names, keyframes, etc.)
6+
*/
7+
export const sourceToClassNames = async (
8+
source: { toString(): string },
9+
file: string
10+
) => {
11+
let result: Record<string, string> = {};
12+
await postcss([
13+
PostcssModulesPlugin({
14+
getJSON: (_, json) => {
15+
result = json;
16+
},
17+
}),
18+
]).process(source, { from: file });
19+
return Object.keys(result);
720
};
8-
9-
const noOpPathFetcher = () => Promise.resolve({});

0 commit comments

Comments
 (0)