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