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