happy-css-modules 3.0.0 → 3.0.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/dist/integration-test/go-to-definition.test.js +0 -35
- package/dist/integration-test/go-to-definition.test.js.map +1 -1
- package/dist/locator/index.d.ts +1 -1
- package/dist/locator/index.js +2 -17
- package/dist/locator/index.js.map +1 -1
- package/dist/locator/index.test.js +23 -119
- package/dist/locator/index.test.js.map +1 -1
- package/dist/locator/postcss.d.ts +1 -12
- package/dist/locator/postcss.js +3 -42
- package/dist/locator/postcss.js.map +1 -1
- package/dist/locator/postcss.test.js +7 -53
- package/dist/locator/postcss.test.js.map +1 -1
- package/dist/test-util/util.d.ts +1 -2
- package/dist/test-util/util.js +0 -3
- package/dist/test-util/util.js.map +1 -1
- package/dist/transformer/less-transformer.test.js +1 -9
- package/dist/transformer/less-transformer.test.js.map +1 -1
- package/dist/transformer/scss-transformer.test.js +1 -9
- package/dist/transformer/scss-transformer.test.js.map +1 -1
- package/dist/util.js +1 -1
- package/dist/util.js.map +1 -1
- package/package.json +1 -1
- package/src/integration-test/go-to-definition.test.ts +0 -35
- package/src/locator/index.test.ts +23 -124
- package/src/locator/index.ts +3 -24
- package/src/locator/postcss.test.ts +7 -74
- package/src/locator/postcss.ts +3 -44
- package/src/test-util/util.ts +1 -5
- package/src/transformer/less-transformer.test.ts +1 -9
- package/src/transformer/scss-transformer.test.ts +1 -9
- package/src/util.ts +1 -1
|
@@ -36,10 +36,6 @@ test('basic', async () => {
|
|
|
36
36
|
.local_class_name_3 {}
|
|
37
37
|
}
|
|
38
38
|
:local(.local_class_name_4) {}
|
|
39
|
-
.composes_target {}
|
|
40
|
-
.composes {
|
|
41
|
-
composes: composes_target;
|
|
42
|
-
}
|
|
43
39
|
`,
|
|
44
40
|
});
|
|
45
41
|
await run({ ...defaultOptions });
|
|
@@ -60,8 +56,6 @@ test('basic', async () => {
|
|
|
60
56
|
'local_class_name_2',
|
|
61
57
|
'local_class_name_3',
|
|
62
58
|
'local_class_name_4',
|
|
63
|
-
'composes_target',
|
|
64
|
-
'composes',
|
|
65
59
|
]);
|
|
66
60
|
// FIXME: Fix an issue where the text at definition destination was incorrect.
|
|
67
61
|
expect(results).toMatchInlineSnapshot(`
|
|
@@ -203,23 +197,6 @@ test('basic', async () => {
|
|
|
203
197
|
],
|
|
204
198
|
"identifier": "local_class_name_4",
|
|
205
199
|
},
|
|
206
|
-
{
|
|
207
|
-
"definitions": [
|
|
208
|
-
{
|
|
209
|
-
file: "<fixtures>/test/1.css",
|
|
210
|
-
text: ".composes_target ",
|
|
211
|
-
start: { line: 21, offset: 1 },
|
|
212
|
-
end: { line: 21, offset: 18 },
|
|
213
|
-
},
|
|
214
|
-
],
|
|
215
|
-
"identifier": "composes_target",
|
|
216
|
-
},
|
|
217
|
-
{
|
|
218
|
-
"definitions": [
|
|
219
|
-
{ file: "<fixtures>/test/1.css", text: ".composes ", start: { line: 22, offset: 1 }, end: { line: 22, offset: 11 } },
|
|
220
|
-
],
|
|
221
|
-
"identifier": "composes",
|
|
222
|
-
},
|
|
223
200
|
]
|
|
224
201
|
`);
|
|
225
202
|
const moduleDefinitions = await server.getModuleDefinitions(getFixturePath('/test/1.css'));
|
|
@@ -288,8 +265,6 @@ test('with transformer', async () => {
|
|
|
288
265
|
// sass feature test (nesting)
|
|
289
266
|
.nesting_1 { dummy: ''; }
|
|
290
267
|
&_2 { dummy: ''; }
|
|
291
|
-
composes: basic; // css module feature test (composes)
|
|
292
|
-
composes: d from './4.scss'; // css module feature test (composes from other file)
|
|
293
268
|
}
|
|
294
269
|
`,
|
|
295
270
|
'/test/2.scss': dedent `
|
|
@@ -298,9 +273,6 @@ test('with transformer', async () => {
|
|
|
298
273
|
`,
|
|
299
274
|
'/test/3.scss': dedent `
|
|
300
275
|
.c { dummy: ''; }
|
|
301
|
-
`,
|
|
302
|
-
'/test/4.scss': dedent `
|
|
303
|
-
.d { dummy: ''; }
|
|
304
276
|
`,
|
|
305
277
|
});
|
|
306
278
|
await run({ ...defaultOptions });
|
|
@@ -312,7 +284,6 @@ test('with transformer', async () => {
|
|
|
312
284
|
'b_1',
|
|
313
285
|
'b_2',
|
|
314
286
|
'c',
|
|
315
|
-
'd',
|
|
316
287
|
]);
|
|
317
288
|
expect(results).toMatchInlineSnapshot(`
|
|
318
289
|
[
|
|
@@ -357,12 +328,6 @@ test('with transformer', async () => {
|
|
|
357
328
|
],
|
|
358
329
|
"identifier": "c",
|
|
359
330
|
},
|
|
360
|
-
{
|
|
361
|
-
"definitions": [
|
|
362
|
-
{ file: "<fixtures>/test/4.scss", text: ".d ", start: { line: 1, offset: 1 }, end: { line: 1, offset: 4 } },
|
|
363
|
-
],
|
|
364
|
-
"identifier": "d",
|
|
365
|
-
},
|
|
366
331
|
]
|
|
367
332
|
`);
|
|
368
333
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"go-to-definition.test.js","sourceRoot":"","sources":["../../src/integration-test/go-to-definition.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtE,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;AAEhC,MAAM,cAAc,GAAkB;IACpC,OAAO,EAAE,sBAAsB;IAC/B,QAAQ,EAAE,QAAQ;IAClB,cAAc,EAAE,IAAI;IACpB,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC;IACxB,KAAK,EAAE,KAAK;CACb,CAAC;AAEF,QAAQ,CAAC,KAAK,IAAI,EAAE;IAClB,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;IACvB,cAAc,CAAC;QACb,aAAa,EAAE,MAAM,CAAA
|
|
1
|
+
{"version":3,"file":"go-to-definition.test.js","sourceRoot":"","sources":["../../src/integration-test/go-to-definition.test.ts"],"names":[],"mappings":"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"}
|
package/dist/locator/index.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export type Token = {
|
|
|
11
11
|
};
|
|
12
12
|
/** The result of `Locator#load`. */
|
|
13
13
|
export type LoadResult = {
|
|
14
|
-
/** The path of the file imported from the source file with `@import
|
|
14
|
+
/** The path of the file imported from the source file with `@import`. */
|
|
15
15
|
dependencies: string[];
|
|
16
16
|
/** The tokens exported by the source file. */
|
|
17
17
|
tokens: Token[];
|
package/dist/locator/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import postcss from 'postcss';
|
|
|
3
3
|
import { createDefaultResolver } from '../resolver/index.js';
|
|
4
4
|
import { createDefaultTransformer } from '../transformer/index.js';
|
|
5
5
|
import { unique, uniqueBy } from '../util.js';
|
|
6
|
-
import { getOriginalLocation, generateLocalTokenNames, parseAtImport,
|
|
6
|
+
import { getOriginalLocation, generateLocalTokenNames, parseAtImport, collectNodes } from './postcss.js';
|
|
7
7
|
export { collectNodes } from './postcss.js';
|
|
8
8
|
/**
|
|
9
9
|
* Whether the specifier should be ignored.
|
|
@@ -108,7 +108,7 @@ export class Locator {
|
|
|
108
108
|
// The tokens are fetched using `postcss-modules` plugin.
|
|
109
109
|
const localTokenNames = await generateLocalTokenNames(ast);
|
|
110
110
|
const tokens = [];
|
|
111
|
-
const { atImports, classSelectors
|
|
111
|
+
const { atImports, classSelectors } = collectNodes(ast);
|
|
112
112
|
// Load imported sheets recursively.
|
|
113
113
|
for (const atImport of atImports) {
|
|
114
114
|
const importedSheetPath = parseAtImport(atImport);
|
|
@@ -136,21 +136,6 @@ export class Locator {
|
|
|
136
136
|
originalLocations: [originalLocation],
|
|
137
137
|
});
|
|
138
138
|
}
|
|
139
|
-
// Load imported tokens by the names recursively.
|
|
140
|
-
for (const composesDeclaration of composesDeclarations) {
|
|
141
|
-
const declarationDetail = parseComposesDeclarationWithFromUrl(composesDeclaration);
|
|
142
|
-
if (!declarationDetail)
|
|
143
|
-
continue;
|
|
144
|
-
if (isIgnoredSpecifier(declarationDetail.from))
|
|
145
|
-
continue;
|
|
146
|
-
// eslint-disable-next-line no-await-in-loop
|
|
147
|
-
const from = await this.resolver(declarationDetail.from, { request: filePath });
|
|
148
|
-
// eslint-disable-next-line no-await-in-loop
|
|
149
|
-
const result = await this._load(from);
|
|
150
|
-
const externalTokens = result.tokens.filter((token) => declarationDetail.tokenNames.includes(token.name));
|
|
151
|
-
dependencies.push(from, ...result.dependencies);
|
|
152
|
-
tokens.push(...externalTokens);
|
|
153
|
-
}
|
|
154
139
|
const result = {
|
|
155
140
|
dependencies: unique(dependencies).filter((dep) => dep !== filePath),
|
|
156
141
|
tokens: normalizeTokens(tokens),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/locator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAoB,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/locator/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,11 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { readFile, writeFile } from 'fs/promises';
|
|
2
2
|
import { randomUUID } from 'node:crypto';
|
|
3
3
|
import { jest } from '@jest/globals';
|
|
4
4
|
import dedent from 'dedent';
|
|
5
|
-
import { createDefaultTransformer } from '../index.js';
|
|
6
|
-
import { createFixtures,
|
|
5
|
+
import { Locator, createDefaultTransformer } from '../index.js';
|
|
6
|
+
import { createFixtures, getFixturePath } from '../test-util/util.js';
|
|
7
7
|
import { sleepSync } from '../util.js';
|
|
8
|
-
const readFileSpy = jest.spyOn(fs, 'readFile');
|
|
9
|
-
// In ESM, for some reason, we need to explicitly mock module
|
|
10
|
-
jest.unstable_mockModule('fs/promises', () => ({
|
|
11
|
-
...fs, // Inherit native functions (e.g., fs.stat)
|
|
12
|
-
readFile: readFileSpy,
|
|
13
|
-
}));
|
|
14
|
-
// After the mock of fs/promises is complete, . /index.js after the mock of fs/promises is complete.
|
|
15
|
-
// ref: https://www.coolcomputerclub.com/posts/jest-hoist-await/
|
|
16
|
-
const { Locator } = await import('./index.js');
|
|
17
|
-
// NOTE: ../test/util.js depends on . /index.js, so it must also be imported dynamically...
|
|
18
8
|
const locator = new Locator();
|
|
19
|
-
afterEach(() => {
|
|
20
|
-
readFileSpy.mockClear();
|
|
21
|
-
});
|
|
22
9
|
test('basic', async () => {
|
|
23
10
|
createFixtures({
|
|
24
11
|
'/test/1.css': dedent `
|
|
@@ -110,30 +97,22 @@ test('tracks other files when `@import` is present', async () => {
|
|
|
110
97
|
}
|
|
111
98
|
`);
|
|
112
99
|
});
|
|
113
|
-
test('
|
|
100
|
+
test('does not track other files by `composes`', async () => {
|
|
114
101
|
createFixtures({
|
|
115
102
|
'/test/1.css': dedent `
|
|
116
103
|
.a {
|
|
117
104
|
composes: b from './2.css';
|
|
118
|
-
composes: c
|
|
119
|
-
composes: e from '${getFixturePath('/test/4.css')}';
|
|
105
|
+
composes: c from './3.css'; /* non-existent file */
|
|
120
106
|
}
|
|
121
107
|
`,
|
|
122
108
|
'/test/2.css': dedent `
|
|
123
109
|
.b {}
|
|
124
|
-
`,
|
|
125
|
-
'/test/3.css': dedent `
|
|
126
|
-
.c {}
|
|
127
|
-
.d {}
|
|
128
|
-
`,
|
|
129
|
-
'/test/4.css': dedent `
|
|
130
|
-
.e {}
|
|
131
110
|
`,
|
|
132
111
|
});
|
|
133
112
|
const result = await locator.load(getFixturePath('/test/1.css'));
|
|
134
113
|
expect(result).toMatchInlineSnapshot(`
|
|
135
114
|
{
|
|
136
|
-
dependencies: [
|
|
115
|
+
dependencies: [],
|
|
137
116
|
tokens: [
|
|
138
117
|
{
|
|
139
118
|
name: "a",
|
|
@@ -141,30 +120,6 @@ test('tracks other files when `composes` is present', async () => {
|
|
|
141
120
|
{ filePath: "<fixtures>/test/1.css", start: { line: 1, column: 1 }, end: { line: 1, column: 2 } },
|
|
142
121
|
],
|
|
143
122
|
},
|
|
144
|
-
{
|
|
145
|
-
name: "b",
|
|
146
|
-
originalLocations: [
|
|
147
|
-
{ filePath: "<fixtures>/test/2.css", start: { line: 1, column: 1 }, end: { line: 1, column: 2 } },
|
|
148
|
-
],
|
|
149
|
-
},
|
|
150
|
-
{
|
|
151
|
-
name: "c",
|
|
152
|
-
originalLocations: [
|
|
153
|
-
{ filePath: "<fixtures>/test/3.css", start: { line: 1, column: 1 }, end: { line: 1, column: 2 } },
|
|
154
|
-
],
|
|
155
|
-
},
|
|
156
|
-
{
|
|
157
|
-
name: "d",
|
|
158
|
-
originalLocations: [
|
|
159
|
-
{ filePath: "<fixtures>/test/3.css", start: { line: 2, column: 1 }, end: { line: 2, column: 2 } },
|
|
160
|
-
],
|
|
161
|
-
},
|
|
162
|
-
{
|
|
163
|
-
name: "e",
|
|
164
|
-
originalLocations: [
|
|
165
|
-
{ filePath: "<fixtures>/test/4.css", start: { line: 1, column: 1 }, end: { line: 1, column: 2 } },
|
|
166
|
-
],
|
|
167
|
-
},
|
|
168
123
|
],
|
|
169
124
|
}
|
|
170
125
|
`);
|
|
@@ -175,14 +130,7 @@ test('normalizes tokens', async () => {
|
|
|
175
130
|
/* duplicate import */
|
|
176
131
|
@import './2.css';
|
|
177
132
|
@import '2.css';
|
|
178
|
-
.a {
|
|
179
|
-
/* duplicate composes */
|
|
180
|
-
composes: c from './3.css';
|
|
181
|
-
composes: c from '3.css';
|
|
182
|
-
composes: c c from './3.css';
|
|
183
|
-
/* duplicate import and composes */
|
|
184
|
-
composes: b from './2.css';
|
|
185
|
-
}
|
|
133
|
+
.a {}
|
|
186
134
|
.a {} /* duplicate class selector */
|
|
187
135
|
`,
|
|
188
136
|
'/test/2.css': dedent `
|
|
@@ -196,14 +144,14 @@ test('normalizes tokens', async () => {
|
|
|
196
144
|
const result = await locator.load(getFixturePath('/test/1.css'));
|
|
197
145
|
expect(result).toMatchInlineSnapshot(`
|
|
198
146
|
{
|
|
199
|
-
dependencies: ["<fixtures>/test/2.css"
|
|
147
|
+
dependencies: ["<fixtures>/test/2.css"],
|
|
200
148
|
tokens: [
|
|
201
149
|
{
|
|
202
150
|
name: "a",
|
|
203
151
|
originalLocations: [
|
|
204
152
|
{ filePath: "<fixtures>/test/2.css", start: { line: 1, column: 1 }, end: { line: 1, column: 2 } },
|
|
205
153
|
{ filePath: "<fixtures>/test/1.css", start: { line: 4, column: 1 }, end: { line: 4, column: 2 } },
|
|
206
|
-
{ filePath: "<fixtures>/test/1.css", start: { line:
|
|
154
|
+
{ filePath: "<fixtures>/test/1.css", start: { line: 5, column: 1 }, end: { line: 5, column: 2 } },
|
|
207
155
|
],
|
|
208
156
|
},
|
|
209
157
|
{
|
|
@@ -212,26 +160,15 @@ test('normalizes tokens', async () => {
|
|
|
212
160
|
{ filePath: "<fixtures>/test/2.css", start: { line: 2, column: 1 }, end: { line: 2, column: 2 } },
|
|
213
161
|
],
|
|
214
162
|
},
|
|
215
|
-
{
|
|
216
|
-
name: "c",
|
|
217
|
-
originalLocations: [
|
|
218
|
-
{ filePath: "<fixtures>/test/3.css", start: { line: 1, column: 1 }, end: { line: 1, column: 2 } },
|
|
219
|
-
],
|
|
220
|
-
},
|
|
221
163
|
],
|
|
222
164
|
}
|
|
223
165
|
`);
|
|
224
166
|
});
|
|
225
|
-
test
|
|
167
|
+
test('returns the result from the cache when the file has not been modified', async () => {
|
|
226
168
|
createFixtures({
|
|
227
169
|
'/test/1.css': dedent `
|
|
228
170
|
@import './2.css';
|
|
229
|
-
@import './
|
|
230
|
-
.a {
|
|
231
|
-
composes: b from './2.css';
|
|
232
|
-
composes: c from './3.css';
|
|
233
|
-
composes: d from './3.css';
|
|
234
|
-
}
|
|
171
|
+
@import './3.css';
|
|
235
172
|
`,
|
|
236
173
|
'/test/2.css': dedent `
|
|
237
174
|
.b {}
|
|
@@ -241,61 +178,28 @@ test.failing('returns the result from the cache when the file has not been modif
|
|
|
241
178
|
.d {}
|
|
242
179
|
`,
|
|
243
180
|
});
|
|
181
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
182
|
+
const readCSSSpy = jest.spyOn(locator, 'readCSS');
|
|
244
183
|
await locator.load(getFixturePath('/test/1.css'));
|
|
245
|
-
expect(
|
|
246
|
-
expect(
|
|
247
|
-
expect(
|
|
248
|
-
expect(
|
|
249
|
-
|
|
184
|
+
expect(readCSSSpy).toHaveBeenCalledTimes(3);
|
|
185
|
+
expect(readCSSSpy).toHaveBeenNthCalledWith(1, getFixturePath('/test/1.css'));
|
|
186
|
+
expect(readCSSSpy).toHaveBeenNthCalledWith(2, getFixturePath('/test/2.css'));
|
|
187
|
+
expect(readCSSSpy).toHaveBeenNthCalledWith(3, getFixturePath('/test/3.css'));
|
|
188
|
+
readCSSSpy.mockClear();
|
|
250
189
|
// update `/test/2.css`
|
|
251
190
|
sleepSync(1); // wait for the file system to update the mtime
|
|
252
191
|
await writeFile(getFixturePath('/test/2.css'), await readFile(getFixturePath('/test/2.css'), 'utf-8'));
|
|
253
192
|
// `3.css` is not updated, so the cache is used. Therefore, `readFile` is not called.
|
|
254
193
|
await locator.load(getFixturePath('/test/3.css'));
|
|
255
|
-
expect(
|
|
194
|
+
expect(readCSSSpy).toHaveBeenCalledTimes(0);
|
|
256
195
|
// `1.css` is not updated, but dependencies are updated, so the cache is used. Therefore, `readFile` is called.
|
|
257
196
|
await locator.load(getFixturePath('/test/1.css'));
|
|
258
|
-
expect(
|
|
259
|
-
expect(
|
|
260
|
-
expect(
|
|
197
|
+
expect(readCSSSpy).toHaveBeenCalledTimes(2);
|
|
198
|
+
expect(readCSSSpy).toHaveBeenNthCalledWith(1, getFixturePath('/test/1.css'));
|
|
199
|
+
expect(readCSSSpy).toHaveBeenNthCalledWith(2, getFixturePath('/test/2.css'));
|
|
261
200
|
// ``2.css` is updated, but the cache is already available because it was updated in the previous step. Therefore, `readFile` is not called.
|
|
262
201
|
await locator.load(getFixturePath('/test/2.css'));
|
|
263
|
-
expect(
|
|
264
|
-
});
|
|
265
|
-
test('ignores the composition of non-existent tokens', async () => {
|
|
266
|
-
// In css-loader and postcss-modules, compositions of non-existent tokens are simply ignored.
|
|
267
|
-
// Therefore, happy-css-modules follows suit.
|
|
268
|
-
// It may be preferable to warn rather than ignore, but for now, we will focus on compatibility.
|
|
269
|
-
// ref: https://github.com/css-modules/css-modules/issues/356
|
|
270
|
-
createFixtures({
|
|
271
|
-
'/test/1.css': dedent `
|
|
272
|
-
.a {
|
|
273
|
-
composes: b c from './2.css';
|
|
274
|
-
}
|
|
275
|
-
`,
|
|
276
|
-
'/test/2.css': dedent `
|
|
277
|
-
.b {}
|
|
278
|
-
`,
|
|
279
|
-
});
|
|
280
|
-
const result = await locator.load(getFixturePath('/test/1.css'));
|
|
281
|
-
expect(result.tokens.map((t) => t.name)).toStrictEqual(['a', 'b']);
|
|
282
|
-
});
|
|
283
|
-
test('throws error the composition of non-existent file', async () => {
|
|
284
|
-
// In postcss-modules, compositions of non-existent file are causes an error.
|
|
285
|
-
// Therefore, happy-css-modules follows suit.
|
|
286
|
-
createFixtures({
|
|
287
|
-
'/test/1.css': dedent `
|
|
288
|
-
.a {
|
|
289
|
-
composes: a from './2.css';
|
|
290
|
-
}
|
|
291
|
-
`,
|
|
292
|
-
});
|
|
293
|
-
await expect(async () => {
|
|
294
|
-
await locator.load(getFixturePath('/test/1.css')).catch((e) => {
|
|
295
|
-
e.message = e.message.replace(FIXTURE_DIR_PATH, '<fixtures>');
|
|
296
|
-
throw e;
|
|
297
|
-
});
|
|
298
|
-
}).rejects.toThrowError(`Could not resolve './2.css' in '<fixtures>/test/1.css'`);
|
|
202
|
+
expect(readCSSSpy).toHaveBeenCalledTimes(2);
|
|
299
203
|
});
|
|
300
204
|
describe('supports sourcemap', () => {
|
|
301
205
|
test('restores original locations from sourcemap', async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/locator/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/locator/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;IACvB,cAAc,CAAC;QACb,aAAa,EAAE,MAAM,CAAA;;;KAGpB;KACF,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IACjE,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;GAkBpC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;IAC9D,cAAc,CAAC;QACb,aAAa,EAAE,MAAM,CAAA;;;eAGV,cAAc,CAAC,aAAa,CAAC;;KAEvC;QACD,aAAa,EAAE,MAAM,CAAA;;KAEpB;QACD,aAAa,EAAE,MAAM,CAAA;;KAEpB;QACD,aAAa,EAAE,MAAM,CAAA;;KAEpB;QACD,aAAa,EAAE,MAAM,CAAA;;KAEpB;QACD,uBAAuB,EAAE,MAAM,CAAA;;KAE9B;KACF,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IACjE,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCpC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;IAC1D,cAAc,CAAC;QACb,aAAa,EAAE,MAAM,CAAA;;;;;KAKpB;QACD,aAAa,EAAE,MAAM,CAAA;;KAEpB;KACF,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IACjE,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;GAYpC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mBAAmB,EAAE,KAAK,IAAI,EAAE;IACnC,cAAc,CAAC;QACb,aAAa,EAAE,MAAM,CAAA;;;;;;KAMpB;QACD,aAAa,EAAE,MAAM,CAAA;;;KAGpB;QACD,aAAa,EAAE,MAAM,CAAA;;KAEpB;KACF,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IACjE,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;;GAoBpC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uEAAuE,EAAE,KAAK,IAAI,EAAE;IACvF,cAAc,CAAC;QACb,aAAa,EAAE,MAAM,CAAA;;;KAGpB;QACD,aAAa,EAAE,MAAM,CAAA;;KAEpB;QACD,aAAa,EAAE,MAAM,CAAA;;;KAGpB;KACF,CAAC,CAAC;IACH,8DAA8D;IAC9D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,SAAgB,CAAC,CAAC;IACzD,MAAM,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IAClD,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,CAAC,UAAU,CAAC,CAAC,uBAAuB,CAAC,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IAC7E,MAAM,CAAC,UAAU,CAAC,CAAC,uBAAuB,CAAC,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IAC7E,MAAM,CAAC,UAAU,CAAC,CAAC,uBAAuB,CAAC,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IAC7E,UAAU,CAAC,SAAS,EAAE,CAAC;IAEvB,uBAAuB;IACvB,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,+CAA+C;IAC7D,MAAM,SAAS,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,MAAM,QAAQ,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IAEvG,qFAAqF;IACrF,MAAM,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IAClD,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAE5C,+GAA+G;IAC/G,MAAM,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IAClD,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC5C,MAAM,CAAC,UAAU,CAAC,CAAC,uBAAuB,CAAC,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IAC7E,MAAM,CAAC,UAAU,CAAC,CAAC,uBAAuB,CAAC,CAAC,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IAE7E,4IAA4I;IAC5I,MAAM,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IAClD,MAAM,CAAC,UAAU,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;AAC9C,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,IAAI,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,WAAW,GAAG,wBAAwB,EAAE,CAAC;QAC/C,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QAC7C,cAAc,CAAC;YACb,cAAc,EAAE,MAAM,CAAA;;;;;;;OAOrB;SACF,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC;QAClE,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;KAmBpC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,yDAAyD,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;QAC1B,cAAc,CAAC;YACb,CAAC,IAAI,IAAI,oBAAoB,CAAC,EAAE,MAAM,CAAA;;;;OAIrC;YACD,aAAa,EAAE,MAAM,CAAA;;;;;OAKpB;SACF,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,wBAAwB,CAAC,EAAE,aAAa,EAAE,cAAc,CAAC,IAAI,IAAI,oBAAoB,CAAC,EAAE,CAAC,CAAC;QAC9G,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;;KAoBpC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;IAC/C,cAAc,CAAC;QACb,aAAa,EAAE,MAAM,CAAA;;;KAGpB;KACF,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IACjE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;IACvD,cAAc,CAAC;QACb,aAAa,EAAE,OAAO;KACvB,CAAC,CAAC;IACH,MAAM,MAAM,CAAC,KAAK,IAAI,EAAE;QACtB,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC;IAChH,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,0CAA0C,CAAC,CAAC;AACtE,CAAC,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type Rule, type AtRule, type Root
|
|
1
|
+
import { type Rule, type AtRule, type Root } from 'postcss';
|
|
2
2
|
import { type ClassName } from 'postcss-selector-parser';
|
|
3
3
|
/** The pair of line number and column number. */
|
|
4
4
|
export type Position = {
|
|
@@ -38,7 +38,6 @@ type CollectNodesResult = {
|
|
|
38
38
|
rule: Rule;
|
|
39
39
|
classSelector: ClassName;
|
|
40
40
|
}[];
|
|
41
|
-
composesDeclarations: Declaration[];
|
|
42
41
|
};
|
|
43
42
|
/**
|
|
44
43
|
* Collect nodes from the AST.
|
|
@@ -51,14 +50,4 @@ export declare function collectNodes(ast: Root): CollectNodesResult;
|
|
|
51
50
|
* @returns The imported sheet path.
|
|
52
51
|
*/
|
|
53
52
|
export declare function parseAtImport(atImport: AtRule): string | undefined;
|
|
54
|
-
/**
|
|
55
|
-
* Parse `composes` declaration with `from <url>`.
|
|
56
|
-
* If the declaration is not found or do not have `from <url>`, return `undefined`.
|
|
57
|
-
* @param composesDeclaration The `composes` declaration to parse.
|
|
58
|
-
* @returns The information of the declaration.
|
|
59
|
-
*/
|
|
60
|
-
export declare function parseComposesDeclarationWithFromUrl(composesDeclaration: Declaration): {
|
|
61
|
-
from: string;
|
|
62
|
-
tokenNames: string[];
|
|
63
|
-
} | undefined;
|
|
64
53
|
export {};
|
package/dist/locator/postcss.js
CHANGED
|
@@ -29,9 +29,9 @@ export async function generateLocalTokenNames(ast) {
|
|
|
29
29
|
postcss
|
|
30
30
|
.default()
|
|
31
31
|
// postcss-modules collects tokens (i.e., includes external tokens) by following
|
|
32
|
-
// the dependencies specified in the @import
|
|
32
|
+
// the dependencies specified in the @import.
|
|
33
33
|
// However, we do not want `generateLocalTokenNames` to return external tokens.
|
|
34
|
-
// So we remove the @import
|
|
34
|
+
// So we remove the @import beforehand.
|
|
35
35
|
.use(removeDependenciesPlugin())
|
|
36
36
|
.use(modules({
|
|
37
37
|
getJSON: (_cssFileName, json) => {
|
|
@@ -122,7 +122,6 @@ function isComposesDeclaration(node) {
|
|
|
122
122
|
export function collectNodes(ast) {
|
|
123
123
|
const atImports = [];
|
|
124
124
|
const classSelectors = [];
|
|
125
|
-
const composesDeclarations = [];
|
|
126
125
|
ast.walk((node) => {
|
|
127
126
|
if (isAtImportNode(node)) {
|
|
128
127
|
atImports.push(node);
|
|
@@ -143,11 +142,8 @@ export function collectNodes(ast) {
|
|
|
143
142
|
});
|
|
144
143
|
}).processSync(node);
|
|
145
144
|
}
|
|
146
|
-
else if (isComposesDeclaration(node)) {
|
|
147
|
-
composesDeclarations.push(node);
|
|
148
|
-
}
|
|
149
145
|
});
|
|
150
|
-
return { atImports, classSelectors
|
|
146
|
+
return { atImports, classSelectors };
|
|
151
147
|
}
|
|
152
148
|
/**
|
|
153
149
|
* Parse the `@import` rule.
|
|
@@ -170,39 +166,4 @@ export function parseAtImport(atImport) {
|
|
|
170
166
|
}
|
|
171
167
|
return undefined;
|
|
172
168
|
}
|
|
173
|
-
/**
|
|
174
|
-
* Parse `composes` declaration with `from <url>`.
|
|
175
|
-
* If the declaration is not found or do not have `from <url>`, return `undefined`.
|
|
176
|
-
* @param composesDeclaration The `composes` declaration to parse.
|
|
177
|
-
* @returns The information of the declaration.
|
|
178
|
-
*/
|
|
179
|
-
export function parseComposesDeclarationWithFromUrl(composesDeclaration) {
|
|
180
|
-
// NOTE: `composes` property syntax is...
|
|
181
|
-
// - syntax: `composes: <class-name> [...<class-name>] [from <url>];`
|
|
182
|
-
// - variables:
|
|
183
|
-
// - `<class-name>`: `<sting>`
|
|
184
|
-
// - `<url>`: `<string>`
|
|
185
|
-
// - ref:
|
|
186
|
-
// - https://github.com/css-modules/css-modules#composition
|
|
187
|
-
// - https://github.com/css-modules/css-modules#composing-from-other-files
|
|
188
|
-
// - https://github.com/css-modules/postcss-modules-extract-imports#specification
|
|
189
|
-
const nodes = valueParser(composesDeclaration.value).nodes;
|
|
190
|
-
if (nodes.length < 5)
|
|
191
|
-
return undefined;
|
|
192
|
-
const classNamesOrSpaces = nodes.slice(0, -3);
|
|
193
|
-
const [from, , url] = nodes.slice(-3);
|
|
194
|
-
const classNames = classNamesOrSpaces.filter((node) => node.type === 'word');
|
|
195
|
-
// validate nodes
|
|
196
|
-
if (from === undefined)
|
|
197
|
-
return undefined;
|
|
198
|
-
if (from.type !== 'word' || from.value !== 'from')
|
|
199
|
-
return undefined;
|
|
200
|
-
if (url === undefined)
|
|
201
|
-
return undefined;
|
|
202
|
-
if (url.type !== 'string')
|
|
203
|
-
return undefined;
|
|
204
|
-
if (classNames.length === 0)
|
|
205
|
-
return undefined;
|
|
206
|
-
return { from: url.value, tokenNames: classNames.map((node) => node.value) };
|
|
207
|
-
}
|
|
208
169
|
//# sourceMappingURL=postcss.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postcss.js","sourceRoot":"","sources":["../../src/locator/postcss.ts"],"names":[],"mappings":"AAAA,OAAO,OAAwF,MAAM,SAAS,CAAC;AAC/G,OAAO,OAAO,MAAM,iBAAiB,CAAC;AACtC,OAAO,cAAkC,MAAM,yBAAyB,CAAC;AACzE,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAyB/C,SAAS,wBAAwB;IAC/B,OAAO;QACL,aAAa,EAAE,qBAAqB;QACpC,gEAAgE;QAChE,MAAM,CAAC,MAAM;YACX,IAAI,cAAc,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC;gBACpD,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,CAAC;QACH,CAAC;QACD,gEAAgE;QAChE,WAAW,CAAC,WAAW;YACrB,IAAI,qBAAqB,CAAC,WAAW,CAAC,EAAE,CAAC;gBACvC,WAAW,CAAC,MAAM,EAAE,CAAC;YACvB,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,GAAS;IACrD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,OAAO;aACJ,OAAO,EAAE;YACV,gFAAgF;YAChF,
|
|
1
|
+
{"version":3,"file":"postcss.js","sourceRoot":"","sources":["../../src/locator/postcss.ts"],"names":[],"mappings":"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"}
|