happy-css-modules 4.0.0 → 5.0.0

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.
Files changed (114) hide show
  1. package/LICENSE.txt +23 -0
  2. package/README.md +307 -2
  3. package/bin/hcm.js +1 -1
  4. package/dist/cli.d.ts +0 -4
  5. package/dist/cli.js +111 -118
  6. package/dist/cli.js.map +1 -1
  7. package/dist/emitter/dts.js +3 -4
  8. package/dist/emitter/dts.js.map +1 -1
  9. package/dist/emitter/dts.test.js +12 -12
  10. package/dist/emitter/file-system.js +2 -2
  11. package/dist/emitter/file-system.js.map +1 -1
  12. package/dist/emitter/file-system.test.js +1 -1
  13. package/dist/emitter/file-system.test.js.map +1 -1
  14. package/dist/emitter/index.js +1 -1
  15. package/dist/emitter/index.js.map +1 -1
  16. package/dist/emitter/index.test.js +1 -2
  17. package/dist/emitter/index.test.js.map +1 -1
  18. package/dist/emitter/source-map.js +1 -1
  19. package/dist/emitter/source-map.js.map +1 -1
  20. package/dist/emitter/source-map.test.js +1 -1
  21. package/dist/emitter/source-map.test.js.map +1 -1
  22. package/dist/integration-test/go-to-definition.test.js +403 -105
  23. package/dist/integration-test/go-to-definition.test.js.map +1 -1
  24. package/dist/locator/index.js +10 -8
  25. package/dist/locator/index.js.map +1 -1
  26. package/dist/locator/index.test.js +303 -169
  27. package/dist/locator/index.test.js.map +1 -1
  28. package/dist/locator/postcss.js +2 -3
  29. package/dist/locator/postcss.js.map +1 -1
  30. package/dist/locator/postcss.test.js +317 -73
  31. package/dist/locator/postcss.test.js.map +1 -1
  32. package/dist/logger.js +7 -6
  33. package/dist/logger.js.map +1 -1
  34. package/dist/regression-test/issue-168.test.js +2 -3
  35. package/dist/regression-test/issue-168.test.js.map +1 -1
  36. package/dist/resolver/index.d.ts +1 -1
  37. package/dist/resolver/index.js +3 -3
  38. package/dist/resolver/index.js.map +1 -1
  39. package/dist/resolver/node-resolver.js +1 -1
  40. package/dist/resolver/node-resolver.js.map +1 -1
  41. package/dist/resolver/relative-resolver.js +1 -1
  42. package/dist/resolver/relative-resolver.js.map +1 -1
  43. package/dist/resolver/webpack-resolver.d.ts +1 -1
  44. package/dist/resolver/webpack-resolver.js +4 -4
  45. package/dist/resolver/webpack-resolver.js.map +1 -1
  46. package/dist/runner.js +50 -18
  47. package/dist/runner.js.map +1 -1
  48. package/dist/runner.test.js +47 -32
  49. package/dist/runner.test.js.map +1 -1
  50. package/dist/test-util/line-column.d.ts +9 -0
  51. package/dist/test-util/line-column.js +16 -0
  52. package/dist/test-util/line-column.js.map +1 -0
  53. package/dist/test-util/line-column.test.d.ts +1 -0
  54. package/dist/test-util/line-column.test.js +21 -0
  55. package/dist/test-util/line-column.test.js.map +1 -0
  56. package/dist/test-util/tsserver.js +11 -12
  57. package/dist/test-util/tsserver.js.map +1 -1
  58. package/dist/test-util/util.d.ts +6 -0
  59. package/dist/test-util/util.js +22 -5
  60. package/dist/test-util/util.js.map +1 -1
  61. package/dist/transformer/index.js +1 -1
  62. package/dist/transformer/index.js.map +1 -1
  63. package/dist/transformer/index.test.js +17 -17
  64. package/dist/transformer/index.test.js.map +1 -1
  65. package/dist/transformer/less-transformer.js +4 -4
  66. package/dist/transformer/less-transformer.js.map +1 -1
  67. package/dist/transformer/less-transformer.test.js +75 -49
  68. package/dist/transformer/less-transformer.test.js.map +1 -1
  69. package/dist/transformer/postcss-transformer.test.js +56 -50
  70. package/dist/transformer/postcss-transformer.test.js.map +1 -1
  71. package/dist/transformer/scss-transformer.js +0 -1
  72. package/dist/transformer/scss-transformer.js.map +1 -1
  73. package/dist/transformer/scss-transformer.test.js +105 -52
  74. package/dist/transformer/scss-transformer.test.js.map +1 -1
  75. package/dist/util.js +6 -8
  76. package/dist/util.js.map +1 -1
  77. package/dist/util.test.js +2 -2
  78. package/dist/util.test.js.map +1 -1
  79. package/package.json +58 -34
  80. package/src/cli.ts +119 -117
  81. package/src/emitter/dts.test.ts +12 -12
  82. package/src/emitter/dts.ts +25 -26
  83. package/src/emitter/file-system.test.ts +1 -1
  84. package/src/emitter/file-system.ts +2 -2
  85. package/src/emitter/index.test.ts +1 -2
  86. package/src/emitter/index.ts +1 -1
  87. package/src/emitter/source-map.test.ts +1 -1
  88. package/src/emitter/source-map.ts +1 -1
  89. package/src/integration-test/go-to-definition.test.ts +405 -105
  90. package/src/locator/index.test.ts +303 -169
  91. package/src/locator/index.ts +6 -6
  92. package/src/locator/postcss.test.ts +317 -73
  93. package/src/locator/postcss.ts +2 -3
  94. package/src/logger.ts +6 -6
  95. package/src/regression-test/issue-168.test.ts +2 -3
  96. package/src/resolver/index.ts +4 -4
  97. package/src/resolver/node-resolver.ts +1 -1
  98. package/src/resolver/relative-resolver.ts +1 -1
  99. package/src/resolver/webpack-resolver.ts +5 -5
  100. package/src/runner.test.ts +54 -32
  101. package/src/runner.ts +51 -19
  102. package/src/test-util/line-column.test.ts +21 -0
  103. package/src/test-util/line-column.ts +15 -0
  104. package/src/test-util/tsserver.ts +11 -12
  105. package/src/test-util/util.ts +23 -5
  106. package/src/transformer/index.test.ts +17 -17
  107. package/src/transformer/index.ts +1 -1
  108. package/src/transformer/less-transformer.test.ts +73 -45
  109. package/src/transformer/less-transformer.ts +1 -3
  110. package/src/transformer/postcss-transformer.test.ts +56 -50
  111. package/src/transformer/scss-transformer.test.ts +107 -52
  112. package/src/transformer/scss-transformer.ts +0 -1
  113. package/src/util.test.ts +2 -2
  114. package/src/util.ts +6 -8
@@ -1,8 +1,8 @@
1
- import { readFile, writeFile } from 'fs/promises';
2
1
  import { randomUUID } from 'node:crypto';
2
+ import { readFile, writeFile } from 'node:fs/promises';
3
3
  import dedent from 'dedent';
4
4
  import { Locator, createDefaultTransformer } from '../index.js';
5
- import { createFixtures, getFixturePath } from '../test-util/util.js';
5
+ import { createFixtures, getFixturePath, replaceFixtureDir } from '../test-util/util.js';
6
6
  import { sleepSync } from '../util.js';
7
7
 
8
8
  const locator = new Locator();
@@ -10,29 +10,41 @@ const locator = new Locator();
10
10
  test('basic', async () => {
11
11
  createFixtures({
12
12
  '/test/1.css': dedent`
13
- .a {}
14
- .b {}
13
+ .a {}
14
+ .b {}
15
15
  `,
16
16
  });
17
17
  const result = await locator.load(getFixturePath('/test/1.css'));
18
- expect(result).toMatchInlineSnapshot(`
18
+ expect(replaceFixtureDir(result)).toMatchInlineSnapshot(`
19
19
  {
20
- dependencies: [],
21
- tokens: [
20
+ "dependencies": [],
21
+ "tokens": [
22
22
  {
23
- name: "a",
24
- originalLocation: {
25
- filePath: "<fixtures>/test/1.css",
26
- start: { line: 1, column: 1 },
27
- end: { line: 1, column: 2 },
23
+ "name": "a",
24
+ "originalLocation": {
25
+ "end": {
26
+ "column": 2,
27
+ "line": 1,
28
+ },
29
+ "filePath": "<fixtures>/test/1.css",
30
+ "start": {
31
+ "column": 1,
32
+ "line": 1,
33
+ },
28
34
  },
29
35
  },
30
36
  {
31
- name: "b",
32
- originalLocation: {
33
- filePath: "<fixtures>/test/1.css",
34
- start: { line: 2, column: 1 },
35
- end: { line: 2, column: 2 },
37
+ "name": "b",
38
+ "originalLocation": {
39
+ "end": {
40
+ "column": 2,
41
+ "line": 2,
42
+ },
43
+ "filePath": "<fixtures>/test/1.css",
44
+ "start": {
45
+ "column": 1,
46
+ "line": 2,
47
+ },
36
48
  },
37
49
  },
38
50
  ],
@@ -43,68 +55,92 @@ test('basic', async () => {
43
55
  test('tracks other files when `@import` is present', async () => {
44
56
  createFixtures({
45
57
  '/test/1.css': dedent`
46
- @import './2.css';
47
- @import '3.css';
48
- @import '${getFixturePath('/test/4.css')}';
49
- @import './5.css';
58
+ @import './2.css';
59
+ @import '3.css';
60
+ @import '${getFixturePath('/test/4.css')}';
61
+ @import './5.css';
50
62
  `,
51
63
  '/test/2.css': dedent`
52
- .a {}
64
+ .a {}
53
65
  `,
54
66
  '/test/3.css': dedent`
55
- .b {}
67
+ .b {}
56
68
  `,
57
69
  '/test/4.css': dedent`
58
- .c {}
70
+ .c {}
59
71
  `,
60
72
  '/test/5.css': dedent`
61
- @import './5-recursive.css';
73
+ @import './5-recursive.css';
62
74
  `,
63
75
  '/test/5-recursive.css': dedent`
64
- .d {}
76
+ .d {}
65
77
  `,
66
78
  });
67
79
  const result = await locator.load(getFixturePath('/test/1.css'));
68
- expect(result).toMatchInlineSnapshot(`
80
+ expect(replaceFixtureDir(result)).toMatchInlineSnapshot(`
69
81
  {
70
- dependencies: [
82
+ "dependencies": [
71
83
  "<fixtures>/test/2.css",
72
84
  "<fixtures>/test/3.css",
73
85
  "<fixtures>/test/4.css",
74
86
  "<fixtures>/test/5.css",
75
87
  "<fixtures>/test/5-recursive.css",
76
88
  ],
77
- tokens: [
89
+ "tokens": [
78
90
  {
79
- name: "a",
80
- originalLocation: {
81
- filePath: "<fixtures>/test/2.css",
82
- start: { line: 1, column: 1 },
83
- end: { line: 1, column: 2 },
91
+ "name": "a",
92
+ "originalLocation": {
93
+ "end": {
94
+ "column": 2,
95
+ "line": 1,
96
+ },
97
+ "filePath": "<fixtures>/test/2.css",
98
+ "start": {
99
+ "column": 1,
100
+ "line": 1,
101
+ },
84
102
  },
85
103
  },
86
104
  {
87
- name: "b",
88
- originalLocation: {
89
- filePath: "<fixtures>/test/3.css",
90
- start: { line: 1, column: 1 },
91
- end: { line: 1, column: 2 },
105
+ "name": "b",
106
+ "originalLocation": {
107
+ "end": {
108
+ "column": 2,
109
+ "line": 1,
110
+ },
111
+ "filePath": "<fixtures>/test/3.css",
112
+ "start": {
113
+ "column": 1,
114
+ "line": 1,
115
+ },
92
116
  },
93
117
  },
94
118
  {
95
- name: "c",
96
- originalLocation: {
97
- filePath: "<fixtures>/test/4.css",
98
- start: { line: 1, column: 1 },
99
- end: { line: 1, column: 2 },
119
+ "name": "c",
120
+ "originalLocation": {
121
+ "end": {
122
+ "column": 2,
123
+ "line": 1,
124
+ },
125
+ "filePath": "<fixtures>/test/4.css",
126
+ "start": {
127
+ "column": 1,
128
+ "line": 1,
129
+ },
100
130
  },
101
131
  },
102
132
  {
103
- name: "d",
104
- originalLocation: {
105
- filePath: "<fixtures>/test/5-recursive.css",
106
- start: { line: 1, column: 1 },
107
- end: { line: 1, column: 2 },
133
+ "name": "d",
134
+ "originalLocation": {
135
+ "end": {
136
+ "column": 2,
137
+ "line": 1,
138
+ },
139
+ "filePath": "<fixtures>/test/5-recursive.css",
140
+ "start": {
141
+ "column": 1,
142
+ "line": 1,
143
+ },
108
144
  },
109
145
  },
110
146
  ],
@@ -115,26 +151,32 @@ test('tracks other files when `@import` is present', async () => {
115
151
  test('does not track other files by `composes`', async () => {
116
152
  createFixtures({
117
153
  '/test/1.css': dedent`
118
- .a {
119
- composes: b from './2.css';
120
- composes: c from './3.css'; /* non-existent file */
121
- }
154
+ .a {
155
+ composes: b from './2.css';
156
+ composes: c from './3.css'; /* non-existent file */
157
+ }
122
158
  `,
123
159
  '/test/2.css': dedent`
124
- .b {}
160
+ .b {}
125
161
  `,
126
162
  });
127
163
  const result = await locator.load(getFixturePath('/test/1.css'));
128
- expect(result).toMatchInlineSnapshot(`
164
+ expect(replaceFixtureDir(result)).toMatchInlineSnapshot(`
129
165
  {
130
- dependencies: [],
131
- tokens: [
166
+ "dependencies": [],
167
+ "tokens": [
132
168
  {
133
- name: "a",
134
- originalLocation: {
135
- filePath: "<fixtures>/test/1.css",
136
- start: { line: 1, column: 1 },
137
- end: { line: 1, column: 2 },
169
+ "name": "a",
170
+ "originalLocation": {
171
+ "end": {
172
+ "column": 2,
173
+ "line": 1,
174
+ },
175
+ "filePath": "<fixtures>/test/1.css",
176
+ "start": {
177
+ "column": 1,
178
+ "line": 1,
179
+ },
138
180
  },
139
181
  },
140
182
  ],
@@ -145,47 +187,69 @@ test('does not track other files by `composes`', async () => {
145
187
  test('tracks other files when `@value` is present', async () => {
146
188
  createFixtures({
147
189
  '/test/1.css': dedent`
148
- @value a from './2.css';
149
- @value b from '3.css';
150
- @value c from '${getFixturePath('/test/4.css')}';
190
+ @value a from './2.css';
191
+ @value b from '3.css';
192
+ @value c from '${getFixturePath('/test/4.css')}';
151
193
  `,
152
194
  '/test/2.css': dedent`
153
- @value a: 1;
195
+ @value a: 1;
154
196
  `,
155
197
  '/test/3.css': dedent`
156
- @value b: 2;
198
+ @value b: 2;
157
199
  `,
158
200
  '/test/4.css': dedent`
159
- @value c: 3;
201
+ @value c: 3;
160
202
  `,
161
203
  });
162
204
  const result = await locator.load(getFixturePath('/test/1.css'));
163
- expect(result).toMatchInlineSnapshot(`
205
+ expect(replaceFixtureDir(result)).toMatchInlineSnapshot(`
164
206
  {
165
- dependencies: ["<fixtures>/test/2.css", "<fixtures>/test/3.css", "<fixtures>/test/4.css"],
166
- tokens: [
207
+ "dependencies": [
208
+ "<fixtures>/test/2.css",
209
+ "<fixtures>/test/3.css",
210
+ "<fixtures>/test/4.css",
211
+ ],
212
+ "tokens": [
167
213
  {
168
- name: "a",
169
- originalLocation: {
170
- filePath: "<fixtures>/test/2.css",
171
- start: { line: 1, column: 8 },
172
- end: { line: 1, column: 9 },
214
+ "name": "a",
215
+ "originalLocation": {
216
+ "end": {
217
+ "column": 9,
218
+ "line": 1,
219
+ },
220
+ "filePath": "<fixtures>/test/2.css",
221
+ "start": {
222
+ "column": 8,
223
+ "line": 1,
224
+ },
173
225
  },
174
226
  },
175
227
  {
176
- name: "b",
177
- originalLocation: {
178
- filePath: "<fixtures>/test/3.css",
179
- start: { line: 1, column: 8 },
180
- end: { line: 1, column: 9 },
228
+ "name": "b",
229
+ "originalLocation": {
230
+ "end": {
231
+ "column": 9,
232
+ "line": 1,
233
+ },
234
+ "filePath": "<fixtures>/test/3.css",
235
+ "start": {
236
+ "column": 8,
237
+ "line": 1,
238
+ },
181
239
  },
182
240
  },
183
241
  {
184
- name: "c",
185
- originalLocation: {
186
- filePath: "<fixtures>/test/4.css",
187
- start: { line: 1, column: 8 },
188
- end: { line: 1, column: 9 },
242
+ "name": "c",
243
+ "originalLocation": {
244
+ "end": {
245
+ "column": 9,
246
+ "line": 1,
247
+ },
248
+ "filePath": "<fixtures>/test/4.css",
249
+ "start": {
250
+ "column": 8,
251
+ "line": 1,
252
+ },
189
253
  },
190
254
  },
191
255
  ],
@@ -196,52 +260,78 @@ test('tracks other files when `@value` is present', async () => {
196
260
  test('unique tokens', async () => {
197
261
  createFixtures({
198
262
  '/test/1.css': dedent`
199
- /* duplicate import */
200
- @import './2.css';
201
- @import '2.css';
202
- .a {}
203
- .a {} /* duplicate class selector */
263
+ /* duplicate import */
264
+ @import './2.css';
265
+ @import '2.css';
266
+ .a {}
267
+ .a {} /* duplicate class selector */
204
268
  `,
205
269
  '/test/2.css': dedent`
206
- .a {} /* class selector that duplicates the import source */
207
- .b {}
270
+ .a {} /* class selector that duplicates the import source */
271
+ .b {}
208
272
  `,
209
273
  });
210
274
  const result = await locator.load(getFixturePath('/test/1.css'));
211
- expect(result).toMatchInlineSnapshot(`
275
+ expect(replaceFixtureDir(result)).toMatchInlineSnapshot(`
212
276
  {
213
- dependencies: ["<fixtures>/test/2.css"],
214
- tokens: [
277
+ "dependencies": [
278
+ "<fixtures>/test/2.css",
279
+ ],
280
+ "tokens": [
215
281
  {
216
- name: "a",
217
- originalLocation: {
218
- filePath: "<fixtures>/test/2.css",
219
- start: { line: 1, column: 1 },
220
- end: { line: 1, column: 2 },
282
+ "name": "a",
283
+ "originalLocation": {
284
+ "end": {
285
+ "column": 2,
286
+ "line": 1,
287
+ },
288
+ "filePath": "<fixtures>/test/2.css",
289
+ "start": {
290
+ "column": 1,
291
+ "line": 1,
292
+ },
221
293
  },
222
294
  },
223
295
  {
224
- name: "b",
225
- originalLocation: {
226
- filePath: "<fixtures>/test/2.css",
227
- start: { line: 2, column: 1 },
228
- end: { line: 2, column: 2 },
296
+ "name": "b",
297
+ "originalLocation": {
298
+ "end": {
299
+ "column": 2,
300
+ "line": 2,
301
+ },
302
+ "filePath": "<fixtures>/test/2.css",
303
+ "start": {
304
+ "column": 1,
305
+ "line": 2,
306
+ },
229
307
  },
230
308
  },
231
309
  {
232
- name: "a",
233
- originalLocation: {
234
- filePath: "<fixtures>/test/1.css",
235
- start: { line: 4, column: 1 },
236
- end: { line: 4, column: 2 },
310
+ "name": "a",
311
+ "originalLocation": {
312
+ "end": {
313
+ "column": 2,
314
+ "line": 4,
315
+ },
316
+ "filePath": "<fixtures>/test/1.css",
317
+ "start": {
318
+ "column": 1,
319
+ "line": 4,
320
+ },
237
321
  },
238
322
  },
239
323
  {
240
- name: "a",
241
- originalLocation: {
242
- filePath: "<fixtures>/test/1.css",
243
- start: { line: 5, column: 1 },
244
- end: { line: 5, column: 2 },
324
+ "name": "a",
325
+ "originalLocation": {
326
+ "end": {
327
+ "column": 2,
328
+ "line": 5,
329
+ },
330
+ "filePath": "<fixtures>/test/1.css",
331
+ "start": {
332
+ "column": 1,
333
+ "line": 5,
334
+ },
245
335
  },
246
336
  },
247
337
  ],
@@ -252,18 +342,18 @@ test('unique tokens', async () => {
252
342
  test('returns the result from the cache when the file has not been modified', async () => {
253
343
  createFixtures({
254
344
  '/test/1.css': dedent`
255
- @import './2.css';
256
- @import './3.css';
345
+ @import './2.css';
346
+ @import './3.css';
257
347
  `,
258
348
  '/test/2.css': dedent`
259
- .b {}
349
+ .b {}
260
350
  `,
261
351
  '/test/3.css': dedent`
262
- .c {}
263
- .d {}
352
+ .c {}
353
+ .d {}
264
354
  `,
265
355
  });
266
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
356
+ // oxlint-disable-next-line typescript/no-explicit-any
267
357
  const readCSSSpy = vi.spyOn(locator, 'readCSS' as any);
268
358
  await locator.load(getFixturePath('/test/1.css'));
269
359
  expect(readCSSSpy).toHaveBeenCalledTimes(3);
@@ -297,41 +387,59 @@ describe('supports sourcemap', () => {
297
387
  const locator = new Locator({ transformer });
298
388
  createFixtures({
299
389
  '/test/1.scss': dedent`
300
- .nesting {
301
- dummy: '';
302
- .nesting_child {
390
+ .nesting {
303
391
  dummy: '';
392
+ .nesting_child {
393
+ dummy: '';
394
+ }
304
395
  }
305
- }
306
396
  `,
307
397
  });
308
398
  const result = await locator.load(getFixturePath('/test/1.scss'));
309
- expect(result).toMatchInlineSnapshot(`
399
+ expect(replaceFixtureDir(result)).toMatchInlineSnapshot(`
310
400
  {
311
- dependencies: [],
312
- tokens: [
401
+ "dependencies": [],
402
+ "tokens": [
313
403
  {
314
- name: "nesting",
315
- originalLocation: {
316
- filePath: "<fixtures>/test/1.scss",
317
- start: { line: 1, column: 1 },
318
- end: { line: 1, column: 8 },
404
+ "name": "nesting",
405
+ "originalLocation": {
406
+ "end": {
407
+ "column": 8,
408
+ "line": 1,
409
+ },
410
+ "filePath": "<fixtures>/test/1.scss",
411
+ "start": {
412
+ "column": 1,
413
+ "line": 1,
414
+ },
319
415
  },
320
416
  },
321
417
  {
322
- name: "nesting",
323
- originalLocation: {
324
- filePath: "<fixtures>/test/1.scss",
325
- start: { line: 3, column: 3 },
326
- end: { line: 3, column: 10 },
418
+ "name": "nesting",
419
+ "originalLocation": {
420
+ "end": {
421
+ "column": 10,
422
+ "line": 3,
423
+ },
424
+ "filePath": "<fixtures>/test/1.scss",
425
+ "start": {
426
+ "column": 3,
427
+ "line": 3,
428
+ },
327
429
  },
328
430
  },
329
431
  {
330
- name: "nesting_child",
331
- originalLocation: {
332
- filePath: "<fixtures>/test/1.scss",
333
- start: { line: 3, column: 3 },
334
- end: { line: 3, column: 16 },
432
+ "name": "nesting_child",
433
+ "originalLocation": {
434
+ "end": {
435
+ "column": 16,
436
+ "line": 3,
437
+ },
438
+ "filePath": "<fixtures>/test/1.scss",
439
+ "start": {
440
+ "column": 3,
441
+ "line": 3,
442
+ },
335
443
  },
336
444
  },
337
445
  ],
@@ -342,42 +450,68 @@ describe('supports sourcemap', () => {
342
450
  const uuid = randomUUID();
343
451
  createFixtures({
344
452
  [`/${uuid}/postcss.config.js`]: dedent`
345
- module.exports = {
346
- plugins: [],
347
- };
453
+ module.exports = {
454
+ plugins: [],
455
+ };
348
456
  `,
349
457
  '/test/1.css': dedent`
350
- .selector_list_a_1, .selector_list_a_2 {}
351
- /* In postcss, including newlines in the selector list breaks the sourcemap. */
352
- .selector_list_b_1,
353
- .selector_list_b_2 {}
458
+ .selector_list_a_1, .selector_list_a_2 {}
459
+ /* In postcss, including newlines in the selector list breaks the sourcemap. */
460
+ .selector_list_b_1,
461
+ .selector_list_b_2 {}
354
462
  `,
355
463
  });
356
464
  const transformer = createDefaultTransformer({ postcssConfig: getFixturePath(`/${uuid}/postcss.config.js`) });
357
465
  const locator = new Locator({ transformer });
358
466
  const result = await locator.load(getFixturePath('/test/1.css'));
359
- expect(result).toMatchInlineSnapshot(`
467
+ expect(replaceFixtureDir(result)).toMatchInlineSnapshot(`
360
468
  {
361
- dependencies: [],
362
- tokens: [
469
+ "dependencies": [],
470
+ "tokens": [
471
+ {
472
+ "name": "selector_list_a_1",
473
+ "originalLocation": {
474
+ "end": {
475
+ "column": 18,
476
+ "line": 1,
477
+ },
478
+ "filePath": "<fixtures>/test/1.css",
479
+ "start": {
480
+ "column": 1,
481
+ "line": 1,
482
+ },
483
+ },
484
+ },
485
+ {
486
+ "name": "selector_list_a_2",
487
+ "originalLocation": {
488
+ "end": {
489
+ "column": 18,
490
+ "line": 1,
491
+ },
492
+ "filePath": "<fixtures>/test/1.css",
493
+ "start": {
494
+ "column": 1,
495
+ "line": 1,
496
+ },
497
+ },
498
+ },
363
499
  {
364
- name: "selector_list_a_1",
365
- originalLocation: {
366
- filePath: "<fixtures>/test/1.css",
367
- start: { line: 1, column: 1 },
368
- end: { line: 1, column: 18 },
500
+ "name": "selector_list_b_1",
501
+ "originalLocation": {
502
+ "end": undefined,
503
+ "filePath": undefined,
504
+ "start": undefined,
369
505
  },
370
506
  },
371
507
  {
372
- name: "selector_list_a_2",
373
- originalLocation: {
374
- filePath: "<fixtures>/test/1.css",
375
- start: { line: 1, column: 1 },
376
- end: { line: 1, column: 18 },
508
+ "name": "selector_list_b_2",
509
+ "originalLocation": {
510
+ "end": undefined,
511
+ "filePath": undefined,
512
+ "start": undefined,
377
513
  },
378
514
  },
379
- { name: "selector_list_b_1", originalLocation: {} },
380
- { name: "selector_list_b_2", originalLocation: {} },
381
515
  ],
382
516
  }
383
517
  `);
@@ -387,8 +521,8 @@ describe('supports sourcemap', () => {
387
521
  test('ignores http(s) protocol file', async () => {
388
522
  createFixtures({
389
523
  '/test/1.css': dedent`
390
- @import 'http://example.com/path/http.css';
391
- @import 'https://example.com/path/https.css';
524
+ @import 'http://example.com/path/http.css';
525
+ @import 'https://example.com/path/https.css';
392
526
  `,
393
527
  });
394
528
  const result = await locator.load(getFixturePath('/test/1.css'));
@@ -401,5 +535,5 @@ test('block concurrent calls to load method', async () => {
401
535
  });
402
536
  await expect(async () => {
403
537
  await Promise.all([locator.load(getFixturePath('/test/1.css')), locator.load(getFixturePath('/test/1.css'))]);
404
- }).rejects.toThrowError('Cannot call `Locator#load` concurrently.');
538
+ }).rejects.toThrow('Cannot call `Locator#load` concurrently.');
405
539
  });