happy-css-modules 0.2.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.
- package/LICENSE.txt +23 -0
- package/README.md +124 -0
- package/bin/hcm.js +9 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.js +69 -0
- package/dist/cli.js.map +1 -0
- package/dist/cli.test.d.ts +1 -0
- package/dist/cli.test.js +34 -0
- package/dist/cli.test.js.map +1 -0
- package/dist/emitter/dts.d.ts +14 -0
- package/dist/emitter/dts.js +106 -0
- package/dist/emitter/dts.js.map +1 -0
- package/dist/emitter/dts.test.d.ts +1 -0
- package/dist/emitter/dts.test.js +205 -0
- package/dist/emitter/dts.test.js.map +1 -0
- package/dist/emitter/file-system.d.ts +6 -0
- package/dist/emitter/file-system.js +26 -0
- package/dist/emitter/file-system.js.map +1 -0
- package/dist/emitter/file-system.test.d.ts +1 -0
- package/dist/emitter/file-system.test.js +34 -0
- package/dist/emitter/file-system.test.js.map +1 -0
- package/dist/emitter/index.d.ts +34 -0
- package/dist/emitter/index.js +42 -0
- package/dist/emitter/index.js.map +1 -0
- package/dist/emitter/index.test.d.ts +1 -0
- package/dist/emitter/index.test.js +118 -0
- package/dist/emitter/index.test.js.map +1 -0
- package/dist/emitter/source-map.d.ts +9 -0
- package/dist/emitter/source-map.js +16 -0
- package/dist/emitter/source-map.js.map +1 -0
- package/dist/emitter/source-map.test.d.ts +1 -0
- package/dist/emitter/source-map.test.js +13 -0
- package/dist/emitter/source-map.test.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/integration-test/go-to-definition.test.d.ts +1 -0
- package/dist/integration-test/go-to-definition.test.js +367 -0
- package/dist/integration-test/go-to-definition.test.js.map +1 -0
- package/dist/library/source-map/index.d.ts +8 -0
- package/dist/library/source-map/index.js +5 -0
- package/dist/library/source-map/index.js.map +1 -0
- package/dist/loader/index.d.ts +42 -0
- package/dist/loader/index.js +145 -0
- package/dist/loader/index.js.map +1 -0
- package/dist/loader/index.test.d.ts +1 -0
- package/dist/loader/index.test.js +290 -0
- package/dist/loader/index.test.js.map +1 -0
- package/dist/loader/postcss.d.ts +60 -0
- package/dist/loader/postcss.js +209 -0
- package/dist/loader/postcss.js.map +1 -0
- package/dist/loader/postcss.test.d.ts +1 -0
- package/dist/loader/postcss.test.js +236 -0
- package/dist/loader/postcss.test.js.map +1 -0
- package/dist/resolver/index.d.ts +20 -0
- package/dist/resolver/index.js +39 -0
- package/dist/resolver/index.js.map +1 -0
- package/dist/resolver/index.test.d.ts +1 -0
- package/dist/resolver/index.test.js +16 -0
- package/dist/resolver/index.test.js.map +1 -0
- package/dist/resolver/node-resolver.d.ts +2 -0
- package/dist/resolver/node-resolver.js +6 -0
- package/dist/resolver/node-resolver.js.map +1 -0
- package/dist/resolver/node-resolver.test.d.ts +1 -0
- package/dist/resolver/node-resolver.test.js +25 -0
- package/dist/resolver/node-resolver.test.js.map +1 -0
- package/dist/resolver/relative-resolver.d.ts +2 -0
- package/dist/resolver/relative-resolver.js +5 -0
- package/dist/resolver/relative-resolver.js.map +1 -0
- package/dist/resolver/relative-resolver.test.d.ts +1 -0
- package/dist/resolver/relative-resolver.test.js +12 -0
- package/dist/resolver/relative-resolver.test.js.map +1 -0
- package/dist/resolver/webpack-resolver.d.ts +2 -0
- package/dist/resolver/webpack-resolver.js +69 -0
- package/dist/resolver/webpack-resolver.js.map +1 -0
- package/dist/resolver/webpack-resolver.test.d.ts +1 -0
- package/dist/resolver/webpack-resolver.test.js +26 -0
- package/dist/resolver/webpack-resolver.test.js.map +1 -0
- package/dist/runner.d.ts +33 -0
- package/dist/runner.js +75 -0
- package/dist/runner.js.map +1 -0
- package/dist/runner.test.d.ts +1 -0
- package/dist/runner.test.js +113 -0
- package/dist/runner.test.js.map +1 -0
- package/dist/test/jest/resolver.cjs +30 -0
- package/dist/test/jest/resolver.cjs.map +1 -0
- package/dist/test/jest/resolver.d.cts +30 -0
- package/dist/test/tsserver.d.ts +27 -0
- package/dist/test/tsserver.js +104 -0
- package/dist/test/tsserver.js.map +1 -0
- package/dist/test/util.d.ts +29 -0
- package/dist/test/util.js +78 -0
- package/dist/test/util.js.map +1 -0
- package/dist/transformer/index.d.ts +23 -0
- package/dist/transformer/index.js +19 -0
- package/dist/transformer/index.js.map +1 -0
- package/dist/transformer/less-transformer.d.ts +2 -0
- package/dist/transformer/less-transformer.js +43 -0
- package/dist/transformer/less-transformer.js.map +1 -0
- package/dist/transformer/less-transformer.test.d.ts +1 -0
- package/dist/transformer/less-transformer.test.js +126 -0
- package/dist/transformer/less-transformer.test.js.map +1 -0
- package/dist/transformer/scss-transformer.d.ts +2 -0
- package/dist/transformer/scss-transformer.js +84 -0
- package/dist/transformer/scss-transformer.js.map +1 -0
- package/dist/transformer/scss-transformer.test.d.ts +1 -0
- package/dist/transformer/scss-transformer.test.js +132 -0
- package/dist/transformer/scss-transformer.test.js.map +1 -0
- package/dist/util.d.ts +19 -0
- package/dist/util.js +52 -0
- package/dist/util.js.map +1 -0
- package/dist/util.test.d.ts +1 -0
- package/dist/util.test.js +75 -0
- package/dist/util.test.js.map +1 -0
- package/package.json +106 -0
- package/src/__snapshots__/runner.test.ts.snap +34 -0
- package/src/cli.test.ts +38 -0
- package/src/cli.ts +70 -0
- package/src/emitter/dts.test.ts +266 -0
- package/src/emitter/dts.ts +134 -0
- package/src/emitter/file-system.test.ts +36 -0
- package/src/emitter/file-system.ts +24 -0
- package/src/emitter/index.test.ts +130 -0
- package/src/emitter/index.ts +92 -0
- package/src/emitter/source-map.test.ts +20 -0
- package/src/emitter/source-map.ts +17 -0
- package/src/index.ts +3 -0
- package/src/integration-test/go-to-definition.test.ts +371 -0
- package/src/library/README.md +3 -0
- package/src/library/source-map/index.ts +26 -0
- package/src/loader/index.test.ts +306 -0
- package/src/loader/index.ts +199 -0
- package/src/loader/postcss.test.ts +336 -0
- package/src/loader/postcss.ts +239 -0
- package/src/resolver/index.test.ts +17 -0
- package/src/resolver/index.ts +48 -0
- package/src/resolver/node-resolver.test.ts +26 -0
- package/src/resolver/node-resolver.ts +7 -0
- package/src/resolver/relative-resolver.test.ts +13 -0
- package/src/resolver/relative-resolver.ts +6 -0
- package/src/resolver/webpack-resolver.test.ts +33 -0
- package/src/resolver/webpack-resolver.ts +71 -0
- package/src/runner.test.ts +122 -0
- package/src/runner.ts +105 -0
- package/src/test/jest/resolver.cjs +30 -0
- package/src/test/tsserver.ts +176 -0
- package/src/test/util.ts +100 -0
- package/src/transformer/index.ts +44 -0
- package/src/transformer/less-transformer.test.ts +135 -0
- package/src/transformer/less-transformer.ts +55 -0
- package/src/transformer/scss-transformer.test.ts +142 -0
- package/src/transformer/scss-transformer.ts +94 -0
- package/src/util.test.ts +89 -0
- package/src/util.ts +67 -0
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
import { jest } from '@jest/globals';
|
|
2
|
+
import dedent from 'dedent';
|
|
3
|
+
import { run } from '../runner.js';
|
|
4
|
+
import { getModuleDefinitions, getMultipleIdentifierDefinitions } from '../test/tsserver.js';
|
|
5
|
+
import { createFixtures, getFixturePath } from '../test/util.js';
|
|
6
|
+
// It is heavy test, so increase timeout.
|
|
7
|
+
jest.setTimeout(60 * 1000); // 60s
|
|
8
|
+
const defaultOptions = {
|
|
9
|
+
pattern: 'test/**/*.{css,scss}',
|
|
10
|
+
silent: true,
|
|
11
|
+
declarationMap: true,
|
|
12
|
+
cwd: getFixturePath('/'),
|
|
13
|
+
};
|
|
14
|
+
test('basic', async () => {
|
|
15
|
+
createFixtures({
|
|
16
|
+
'/test/1.css': dedent `
|
|
17
|
+
.basic {}
|
|
18
|
+
.cascading {}
|
|
19
|
+
.cascading {}
|
|
20
|
+
.pseudo_class_1 {}
|
|
21
|
+
.pseudo_class_2:hover {}
|
|
22
|
+
:not(.pseudo_class_3) {}
|
|
23
|
+
.multiple_selector_1.multiple_selector_2 {}
|
|
24
|
+
.combinator_1 + .combinator_2 {}
|
|
25
|
+
@supports (display: flex) {
|
|
26
|
+
@media screen and (min-width: 900px) {
|
|
27
|
+
.at_rule {}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
.selector_list_1, .selector_list_2 {}
|
|
31
|
+
:local .local_class_name_1 {}
|
|
32
|
+
:local {
|
|
33
|
+
.local_class_name_2 {}
|
|
34
|
+
.local_class_name_3 {}
|
|
35
|
+
}
|
|
36
|
+
:local(.local_class_name_4) {}
|
|
37
|
+
.composes_target {}
|
|
38
|
+
.composes {
|
|
39
|
+
composes: composes_target;
|
|
40
|
+
}
|
|
41
|
+
`,
|
|
42
|
+
});
|
|
43
|
+
await run({ ...defaultOptions });
|
|
44
|
+
const results = await getMultipleIdentifierDefinitions(getFixturePath(`/test/1.css`), [
|
|
45
|
+
'basic',
|
|
46
|
+
'cascading',
|
|
47
|
+
'pseudo_class_1',
|
|
48
|
+
'pseudo_class_2',
|
|
49
|
+
'pseudo_class_3',
|
|
50
|
+
'multiple_selector_1',
|
|
51
|
+
'multiple_selector_2',
|
|
52
|
+
'combinator_1',
|
|
53
|
+
'combinator_2',
|
|
54
|
+
'at_rule',
|
|
55
|
+
'selector_list_1',
|
|
56
|
+
'selector_list_2',
|
|
57
|
+
'local_class_name_1',
|
|
58
|
+
'local_class_name_2',
|
|
59
|
+
'local_class_name_3',
|
|
60
|
+
'local_class_name_4',
|
|
61
|
+
'composes_target',
|
|
62
|
+
'composes',
|
|
63
|
+
]);
|
|
64
|
+
// FIXME: Fix an issue where the text at definition destination was incorrect.
|
|
65
|
+
expect(results).toMatchInlineSnapshot(`
|
|
66
|
+
[
|
|
67
|
+
{
|
|
68
|
+
"definitions": [
|
|
69
|
+
{ file: "<fixtures>/test/1.css", text: ".basic ", start: { line: 1, offset: 1 }, end: { line: 1, offset: 8 } },
|
|
70
|
+
],
|
|
71
|
+
"identifier": "basic",
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"definitions": [
|
|
75
|
+
{ file: "<fixtures>/test/1.css", text: ".cascading ", start: { line: 2, offset: 1 }, end: { line: 2, offset: 12 } },
|
|
76
|
+
{ file: "<fixtures>/test/1.css", text: ".cascading ", start: { line: 3, offset: 1 }, end: { line: 3, offset: 12 } },
|
|
77
|
+
],
|
|
78
|
+
"identifier": "cascading",
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"definitions": [
|
|
82
|
+
{ file: "<fixtures>/test/1.css", text: ".pseudo_class_1 ", start: { line: 4, offset: 1 }, end: { line: 4, offset: 17 } },
|
|
83
|
+
],
|
|
84
|
+
"identifier": "pseudo_class_1",
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
"definitions": [
|
|
88
|
+
{ file: "<fixtures>/test/1.css", text: ".pseudo_class_2:", start: { line: 5, offset: 1 }, end: { line: 5, offset: 17 } },
|
|
89
|
+
],
|
|
90
|
+
"identifier": "pseudo_class_2",
|
|
91
|
+
},
|
|
92
|
+
{
|
|
93
|
+
"definitions": [
|
|
94
|
+
{ file: "<fixtures>/test/1.css", text: ".pseudo_class_3)", start: { line: 6, offset: 6 }, end: { line: 6, offset: 22 } },
|
|
95
|
+
],
|
|
96
|
+
"identifier": "pseudo_class_3",
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"definitions": [
|
|
100
|
+
{
|
|
101
|
+
file: "<fixtures>/test/1.css",
|
|
102
|
+
text: ".multiple_selector_1.",
|
|
103
|
+
start: { line: 7, offset: 1 },
|
|
104
|
+
end: { line: 7, offset: 22 },
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
"identifier": "multiple_selector_1",
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"definitions": [
|
|
111
|
+
{
|
|
112
|
+
file: "<fixtures>/test/1.css",
|
|
113
|
+
text: ".multiple_selector_2 ",
|
|
114
|
+
start: { line: 7, offset: 21 },
|
|
115
|
+
end: { line: 7, offset: 42 },
|
|
116
|
+
},
|
|
117
|
+
],
|
|
118
|
+
"identifier": "multiple_selector_2",
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"definitions": [
|
|
122
|
+
{ file: "<fixtures>/test/1.css", text: ".combinator_1 ", start: { line: 8, offset: 1 }, end: { line: 8, offset: 15 } },
|
|
123
|
+
],
|
|
124
|
+
"identifier": "combinator_1",
|
|
125
|
+
},
|
|
126
|
+
{
|
|
127
|
+
"definitions": [
|
|
128
|
+
{ file: "<fixtures>/test/1.css", text: ".combinator_2 ", start: { line: 8, offset: 17 }, end: { line: 8, offset: 31 } },
|
|
129
|
+
],
|
|
130
|
+
"identifier": "combinator_2",
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
"definitions": [
|
|
134
|
+
{ file: "<fixtures>/test/1.css", text: ".at_rule ", start: { line: 11, offset: 5 }, end: { line: 11, offset: 14 } },
|
|
135
|
+
],
|
|
136
|
+
"identifier": "at_rule",
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"definitions": [
|
|
140
|
+
{
|
|
141
|
+
file: "<fixtures>/test/1.css",
|
|
142
|
+
text: ".selector_list_1,",
|
|
143
|
+
start: { line: 14, offset: 1 },
|
|
144
|
+
end: { line: 14, offset: 18 },
|
|
145
|
+
},
|
|
146
|
+
],
|
|
147
|
+
"identifier": "selector_list_1",
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"definitions": [
|
|
151
|
+
{
|
|
152
|
+
file: "<fixtures>/test/1.css",
|
|
153
|
+
text: ".selector_list_2 ",
|
|
154
|
+
start: { line: 14, offset: 19 },
|
|
155
|
+
end: { line: 14, offset: 36 },
|
|
156
|
+
},
|
|
157
|
+
],
|
|
158
|
+
"identifier": "selector_list_2",
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
"definitions": [
|
|
162
|
+
{
|
|
163
|
+
file: "<fixtures>/test/1.css",
|
|
164
|
+
text: ".local_class_name_1 ",
|
|
165
|
+
start: { line: 15, offset: 8 },
|
|
166
|
+
end: { line: 15, offset: 28 },
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
"identifier": "local_class_name_1",
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
"definitions": [
|
|
173
|
+
{
|
|
174
|
+
file: "<fixtures>/test/1.css",
|
|
175
|
+
text: ".local_class_name_2 ",
|
|
176
|
+
start: { line: 17, offset: 3 },
|
|
177
|
+
end: { line: 17, offset: 23 },
|
|
178
|
+
},
|
|
179
|
+
],
|
|
180
|
+
"identifier": "local_class_name_2",
|
|
181
|
+
},
|
|
182
|
+
{
|
|
183
|
+
"definitions": [
|
|
184
|
+
{
|
|
185
|
+
file: "<fixtures>/test/1.css",
|
|
186
|
+
text: ".local_class_name_3 ",
|
|
187
|
+
start: { line: 18, offset: 3 },
|
|
188
|
+
end: { line: 18, offset: 23 },
|
|
189
|
+
},
|
|
190
|
+
],
|
|
191
|
+
"identifier": "local_class_name_3",
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"definitions": [
|
|
195
|
+
{
|
|
196
|
+
file: "<fixtures>/test/1.css",
|
|
197
|
+
text: ".local_class_name_4)",
|
|
198
|
+
start: { line: 20, offset: 8 },
|
|
199
|
+
end: { line: 20, offset: 28 },
|
|
200
|
+
},
|
|
201
|
+
],
|
|
202
|
+
"identifier": "local_class_name_4",
|
|
203
|
+
},
|
|
204
|
+
{
|
|
205
|
+
"definitions": [
|
|
206
|
+
{
|
|
207
|
+
file: "<fixtures>/test/1.css",
|
|
208
|
+
text: ".composes_target ",
|
|
209
|
+
start: { line: 21, offset: 1 },
|
|
210
|
+
end: { line: 21, offset: 18 },
|
|
211
|
+
},
|
|
212
|
+
],
|
|
213
|
+
"identifier": "composes_target",
|
|
214
|
+
},
|
|
215
|
+
{
|
|
216
|
+
"definitions": [
|
|
217
|
+
{ file: "<fixtures>/test/1.css", text: ".composes ", start: { line: 22, offset: 1 }, end: { line: 22, offset: 11 } },
|
|
218
|
+
],
|
|
219
|
+
"identifier": "composes",
|
|
220
|
+
},
|
|
221
|
+
]
|
|
222
|
+
`);
|
|
223
|
+
const moduleDefinitions = await getModuleDefinitions(getFixturePath('/test/1.css'));
|
|
224
|
+
expect(moduleDefinitions).toMatchInlineSnapshot(`
|
|
225
|
+
[
|
|
226
|
+
{ file: "<fixtures>/test/1.css", text: "", start: { line: 1, offset: 1 }, end: { line: 1, offset: 1 } },
|
|
227
|
+
]
|
|
228
|
+
`);
|
|
229
|
+
});
|
|
230
|
+
test('imported tokens', async () => {
|
|
231
|
+
createFixtures({
|
|
232
|
+
'/test/1.css': dedent `
|
|
233
|
+
@import './2.css';
|
|
234
|
+
.a {}
|
|
235
|
+
.b {}
|
|
236
|
+
.b {}
|
|
237
|
+
`,
|
|
238
|
+
'/test/2.css': dedent `
|
|
239
|
+
@import './3.css';
|
|
240
|
+
.c {}
|
|
241
|
+
`,
|
|
242
|
+
'/test/3.css': dedent `
|
|
243
|
+
.d {}
|
|
244
|
+
`,
|
|
245
|
+
});
|
|
246
|
+
await run({ ...defaultOptions });
|
|
247
|
+
const results = await getMultipleIdentifierDefinitions(getFixturePath(`/test/1.css`), ['a', 'b', 'c', 'd']);
|
|
248
|
+
expect(results).toMatchInlineSnapshot(`
|
|
249
|
+
[
|
|
250
|
+
{
|
|
251
|
+
"definitions": [
|
|
252
|
+
{ file: "<fixtures>/test/1.css", text: ".a ", start: { line: 2, offset: 1 }, end: { line: 2, offset: 4 } },
|
|
253
|
+
],
|
|
254
|
+
"identifier": "a",
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"definitions": [
|
|
258
|
+
{ file: "<fixtures>/test/1.css", text: ".b ", start: { line: 3, offset: 1 }, end: { line: 3, offset: 4 } },
|
|
259
|
+
{ file: "<fixtures>/test/1.css", text: ".b ", start: { line: 4, offset: 1 }, end: { line: 4, offset: 4 } },
|
|
260
|
+
],
|
|
261
|
+
"identifier": "b",
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
"definitions": [
|
|
265
|
+
{ file: "<fixtures>/test/2.css", text: ".c ", start: { line: 2, offset: 1 }, end: { line: 2, offset: 4 } },
|
|
266
|
+
],
|
|
267
|
+
"identifier": "c",
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
"definitions": [
|
|
271
|
+
{ file: "<fixtures>/test/3.css", text: ".d ", start: { line: 1, offset: 1 }, end: { line: 1, offset: 4 } },
|
|
272
|
+
],
|
|
273
|
+
"identifier": "d",
|
|
274
|
+
},
|
|
275
|
+
]
|
|
276
|
+
`);
|
|
277
|
+
});
|
|
278
|
+
test('with transformer', async () => {
|
|
279
|
+
createFixtures({
|
|
280
|
+
'/test/1.scss': dedent `
|
|
281
|
+
@use './2.scss' as two; // sass feature test (@use)
|
|
282
|
+
@import './3.scss'; // css feature test (@import)
|
|
283
|
+
.basic { dummy: ''; }
|
|
284
|
+
.nesting {
|
|
285
|
+
dummy: '';
|
|
286
|
+
// sass feature test (nesting)
|
|
287
|
+
.nesting_1 { dummy: ''; }
|
|
288
|
+
&_2 { dummy: ''; }
|
|
289
|
+
composes: basic; // css module feature test (composes)
|
|
290
|
+
composes: d from './4.scss'; // css module feature test (composes from other file)
|
|
291
|
+
}
|
|
292
|
+
`,
|
|
293
|
+
'/test/2.scss': dedent `
|
|
294
|
+
.b_1 { dummy: ''; }
|
|
295
|
+
@mixin b_2 { dummy: ''; }
|
|
296
|
+
`,
|
|
297
|
+
'/test/3.scss': dedent `
|
|
298
|
+
.c { dummy: ''; }
|
|
299
|
+
`,
|
|
300
|
+
'/test/4.scss': dedent `
|
|
301
|
+
.d { dummy: ''; }
|
|
302
|
+
`,
|
|
303
|
+
});
|
|
304
|
+
await run({ ...defaultOptions });
|
|
305
|
+
const results = await getMultipleIdentifierDefinitions(getFixturePath(`/test/1.scss`), [
|
|
306
|
+
'basic',
|
|
307
|
+
'nesting',
|
|
308
|
+
'nesting_1',
|
|
309
|
+
'nesting_2',
|
|
310
|
+
'b_1',
|
|
311
|
+
'b_2',
|
|
312
|
+
'c',
|
|
313
|
+
'd',
|
|
314
|
+
]);
|
|
315
|
+
expect(results).toMatchInlineSnapshot(`
|
|
316
|
+
[
|
|
317
|
+
{
|
|
318
|
+
"definitions": [
|
|
319
|
+
{ file: "<fixtures>/test/1.scss", text: ".basic ", start: { line: 3, offset: 1 }, end: { line: 3, offset: 8 } },
|
|
320
|
+
],
|
|
321
|
+
"identifier": "basic",
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
"definitions": [
|
|
325
|
+
{ file: "<fixtures>/test/1.scss", text: ".nesting ", start: { line: 4, offset: 1 }, end: { line: 4, offset: 10 } },
|
|
326
|
+
{ file: "<fixtures>/test/1.scss", text: ".nesting_", start: { line: 7, offset: 3 }, end: { line: 7, offset: 12 } },
|
|
327
|
+
],
|
|
328
|
+
"identifier": "nesting",
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
"definitions": [
|
|
332
|
+
{ file: "<fixtures>/test/1.scss", text: ".nesting_1 ", start: { line: 7, offset: 3 }, end: { line: 7, offset: 14 } },
|
|
333
|
+
],
|
|
334
|
+
"identifier": "nesting_1",
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
"definitions": [
|
|
338
|
+
{ file: "<fixtures>/test/1.scss", text: "&_2 { dummy", start: { line: 8, offset: 3 }, end: { line: 8, offset: 14 } },
|
|
339
|
+
],
|
|
340
|
+
"identifier": "nesting_2",
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
"definitions": [
|
|
344
|
+
{ file: "<fixtures>/test/2.scss", text: ".b_1 ", start: { line: 1, offset: 1 }, end: { line: 1, offset: 6 } },
|
|
345
|
+
],
|
|
346
|
+
"identifier": "b_1",
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
"definitions": [],
|
|
350
|
+
"identifier": "b_2",
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
"definitions": [
|
|
354
|
+
{ file: "<fixtures>/test/3.scss", text: ".c ", start: { line: 1, offset: 1 }, end: { line: 1, offset: 4 } },
|
|
355
|
+
],
|
|
356
|
+
"identifier": "c",
|
|
357
|
+
},
|
|
358
|
+
{
|
|
359
|
+
"definitions": [
|
|
360
|
+
{ file: "<fixtures>/test/4.scss", text: ".d ", start: { line: 1, offset: 1 }, end: { line: 1, offset: 4 } },
|
|
361
|
+
],
|
|
362
|
+
"identifier": "d",
|
|
363
|
+
},
|
|
364
|
+
]
|
|
365
|
+
`);
|
|
366
|
+
});
|
|
367
|
+
//# sourceMappingURL=go-to-definition.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"go-to-definition.test.js","sourceRoot":"","sources":["../../src/integration-test/go-to-definition.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,oBAAoB,EAAE,gCAAgC,EAAE,MAAM,qBAAqB,CAAC;AAC7F,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjE,yCAAyC;AACzC,IAAI,CAAC,UAAU,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM;AAElC,MAAM,cAAc,GAAG;IACrB,OAAO,EAAE,sBAAsB;IAC/B,MAAM,EAAE,IAAI;IACZ,cAAc,EAAE,IAAI;IACpB,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC;CACzB,CAAC;AAEF,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE;IACvB,cAAc,CAAC;QACb,aAAa,EAAE,MAAM,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;KAyBpB;KACF,CAAC,CAAC;IACH,MAAM,GAAG,CAAC,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,MAAM,gCAAgC,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE;QACpF,OAAO;QACP,WAAW;QACX,gBAAgB;QAChB,gBAAgB;QAChB,gBAAgB;QAChB,qBAAqB;QACrB,qBAAqB;QACrB,cAAc;QACd,cAAc;QACd,SAAS;QACT,iBAAiB;QACjB,iBAAiB;QACjB,oBAAoB;QACpB,oBAAoB;QACpB,oBAAoB;QACpB,oBAAoB;QACpB,iBAAiB;QACjB,UAAU;KACX,CAAC,CAAC;IACH,8EAA8E;IAC9E,MAAM,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6JrC,CAAC,CAAC;IACH,MAAM,iBAAiB,GAAG,MAAM,oBAAoB,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IACpF,MAAM,CAAC,iBAAiB,CAAC,CAAC,qBAAqB,CAAC;;;;GAI/C,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iBAAiB,EAAE,KAAK,IAAI,EAAE;IACjC,cAAc,CAAC;QACb,aAAa,EAAE,MAAM,CAAA;;;;;KAKpB;QACD,aAAa,EAAE,MAAM,CAAA;;;KAGpB;QACD,aAAa,EAAE,MAAM,CAAA;;KAEpB;KACF,CAAC,CAAC;IACH,MAAM,GAAG,CAAC,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,MAAM,gCAAgC,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;IAC5G,MAAM,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BrC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;IAClC,cAAc,CAAC;QACb,cAAc,EAAE,MAAM,CAAA;;;;;;;;;;;;KAYrB;QACD,cAAc,EAAE,MAAM,CAAA;;;KAGrB;QACD,cAAc,EAAE,MAAM,CAAA;;KAErB;QACD,cAAc,EAAE,MAAM,CAAA;;KAErB;KACF,CAAC,CAAC;IACH,MAAM,GAAG,CAAC,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,MAAM,gCAAgC,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE;QACrF,OAAO;QACP,SAAS;QACT,WAAW;QACX,WAAW;QACX,KAAK;QACL,KAAK;QACL,GAAG;QACH,GAAG;KACJ,CAAC,CAAC;IACH,MAAM,CAAC,OAAO,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDrC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { SourceNode as OriginalSourceNode, type CodeWithSourceMap } from 'source-map';
|
|
2
|
+
declare type Chunk = string | StrictlyTypedSourceNode | Chunk[];
|
|
3
|
+
interface StrictlyTypedSourceNode extends OriginalSourceNode {
|
|
4
|
+
new (line: number | null, column: number | null, source: string | null): StrictlyTypedSourceNode;
|
|
5
|
+
new (line: number | null, column: number | null, source: string | null, chunk?: Chunk, name?: string): StrictlyTypedSourceNode;
|
|
6
|
+
}
|
|
7
|
+
declare const SourceNode: StrictlyTypedSourceNode;
|
|
8
|
+
export { SourceNode, type CodeWithSourceMap };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/library/source-map/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,IAAI,kBAAkB,EAA0B,MAAM,YAAY,CAAC;AAsBtF,8DAA8D;AAC9D,MAAM,UAAU,GAA4B,kBAAyB,CAAC;AAEtE,OAAO,EAAE,UAAU,EAA0B,CAAC"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { Resolver } from '../resolver/index.js';
|
|
2
|
+
import { type Transformer } from '../transformer/index.js';
|
|
3
|
+
import { type Location } from './postcss.js';
|
|
4
|
+
export { collectNodes, type Location } from './postcss.js';
|
|
5
|
+
/** The exported token. */
|
|
6
|
+
export declare type Token = {
|
|
7
|
+
/** The token name. */
|
|
8
|
+
name: string;
|
|
9
|
+
/** The original locations of the token in the source file. */
|
|
10
|
+
originalLocations: Location[];
|
|
11
|
+
};
|
|
12
|
+
/** The result of `Loader#load`. */
|
|
13
|
+
export declare type LoadResult = {
|
|
14
|
+
/** The path of the file imported from the source file with `@import` or `composes`. */
|
|
15
|
+
dependencies: string[];
|
|
16
|
+
/** The tokens exported by the source file. */
|
|
17
|
+
tokens: Token[];
|
|
18
|
+
};
|
|
19
|
+
export declare type LoaderOptions = {
|
|
20
|
+
/** The function to transform source code. */
|
|
21
|
+
transformer?: Transformer | undefined;
|
|
22
|
+
/** The function to resolve the path of the imported file. */
|
|
23
|
+
resolver?: Resolver | undefined;
|
|
24
|
+
};
|
|
25
|
+
/** The resolver that throws an exception if resolving fails. */
|
|
26
|
+
export declare type StrictlyResolver = (...args: Parameters<Resolver>) => Promise<string>;
|
|
27
|
+
/** This class collects information on tokens exported from CSS Modules files. */
|
|
28
|
+
export declare class Loader {
|
|
29
|
+
private readonly cache;
|
|
30
|
+
private readonly transformer;
|
|
31
|
+
private readonly resolver;
|
|
32
|
+
constructor(options?: LoaderOptions);
|
|
33
|
+
/** Returns `true` if the cache is outdated. */
|
|
34
|
+
private isCacheOutdated;
|
|
35
|
+
/**
|
|
36
|
+
* Reads the source file and returns the code.
|
|
37
|
+
* If transformer is specified, the code is transformed before returning.
|
|
38
|
+
*/
|
|
39
|
+
private readCSS;
|
|
40
|
+
/** Returns information about the tokens exported from the CSS Modules file. */
|
|
41
|
+
load(filePath: string): Promise<LoadResult>;
|
|
42
|
+
}
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
import { readFile, stat } from 'fs/promises';
|
|
2
|
+
import postcss from 'postcss';
|
|
3
|
+
import { createDefaultResolver } from '../resolver/index.js';
|
|
4
|
+
import { createDefaultTransformer } from '../transformer/index.js';
|
|
5
|
+
import { unique, uniqueBy } from '../util.js';
|
|
6
|
+
import { getOriginalLocation, generateLocalTokenNames, parseAtImport, parseComposesDeclarationWithFromUrl, collectNodes, } from './postcss.js';
|
|
7
|
+
export { collectNodes } from './postcss.js';
|
|
8
|
+
/**
|
|
9
|
+
* Whether the specifier should be ignored.
|
|
10
|
+
* For example, specifiers starting with `http://` or `https://` should be ignored.
|
|
11
|
+
*/
|
|
12
|
+
function isIgnoredSpecifier(specifier) {
|
|
13
|
+
return specifier.startsWith('http://') || specifier.startsWith('https://');
|
|
14
|
+
}
|
|
15
|
+
function normalizeTokens(tokens) {
|
|
16
|
+
var _a;
|
|
17
|
+
const tokenNameToOriginalLocations = new Map();
|
|
18
|
+
for (const token of tokens) {
|
|
19
|
+
tokenNameToOriginalLocations.set(token.name, uniqueBy([...((_a = tokenNameToOriginalLocations.get(token.name)) !== null && _a !== void 0 ? _a : []), ...token.originalLocations], (location) => JSON.stringify(location)));
|
|
20
|
+
}
|
|
21
|
+
return Array.from(tokenNameToOriginalLocations.entries()).map(([name, originalLocations]) => ({
|
|
22
|
+
name,
|
|
23
|
+
originalLocations,
|
|
24
|
+
}));
|
|
25
|
+
}
|
|
26
|
+
/** This class collects information on tokens exported from CSS Modules files. */
|
|
27
|
+
export class Loader {
|
|
28
|
+
constructor(options) {
|
|
29
|
+
var _a;
|
|
30
|
+
this.cache = new Map();
|
|
31
|
+
this.transformer = (_a = options === null || options === void 0 ? void 0 : options.transformer) !== null && _a !== void 0 ? _a : createDefaultTransformer();
|
|
32
|
+
this.resolver = async (specifier, resolverOptions) => {
|
|
33
|
+
var _a;
|
|
34
|
+
const resolver = (_a = options === null || options === void 0 ? void 0 : options.resolver) !== null && _a !== void 0 ? _a : createDefaultResolver();
|
|
35
|
+
const resolved = await resolver(specifier, resolverOptions);
|
|
36
|
+
if (resolved === false)
|
|
37
|
+
throw new Error(`Could not resolve '${specifier}' in '${resolverOptions.request}'.`);
|
|
38
|
+
return resolved;
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/** Returns `true` if the cache is outdated. */
|
|
42
|
+
async isCacheOutdated(filePath) {
|
|
43
|
+
const entry = this.cache.get(filePath);
|
|
44
|
+
if (!entry)
|
|
45
|
+
return true;
|
|
46
|
+
const mtime = (await stat(filePath)).mtime.getTime();
|
|
47
|
+
if (entry.mtime !== mtime)
|
|
48
|
+
return true;
|
|
49
|
+
const { dependencies } = entry.result;
|
|
50
|
+
for (const dependency of dependencies) {
|
|
51
|
+
const entry = this.cache.get(dependency);
|
|
52
|
+
if (!entry)
|
|
53
|
+
return true;
|
|
54
|
+
const mtime = (await stat(dependency)).mtime.getTime();
|
|
55
|
+
if (entry.mtime !== mtime)
|
|
56
|
+
return true;
|
|
57
|
+
}
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Reads the source file and returns the code.
|
|
62
|
+
* If transformer is specified, the code is transformed before returning.
|
|
63
|
+
*/
|
|
64
|
+
async readCSS(filePath) {
|
|
65
|
+
const css = await readFile(filePath, 'utf-8');
|
|
66
|
+
if (!this.transformer)
|
|
67
|
+
return { css, map: undefined, dependencies: [] };
|
|
68
|
+
const result = await this.transformer(css, { from: filePath, resolver: this.resolver });
|
|
69
|
+
if (result === false)
|
|
70
|
+
return { css, map: undefined, dependencies: [] };
|
|
71
|
+
return {
|
|
72
|
+
css: result.css,
|
|
73
|
+
map: result.map,
|
|
74
|
+
dependencies: result.dependencies.map((dep) => {
|
|
75
|
+
if (typeof dep === 'string')
|
|
76
|
+
return dep;
|
|
77
|
+
if (dep.protocol !== 'file:')
|
|
78
|
+
throw new Error('Unsupported protocol: ' + dep.protocol);
|
|
79
|
+
return dep.pathname;
|
|
80
|
+
}),
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/** Returns information about the tokens exported from the CSS Modules file. */
|
|
84
|
+
async load(filePath) {
|
|
85
|
+
// NOTE: Loader does not support concurrent calls.
|
|
86
|
+
// TODO: Throw an error if called concurrently.
|
|
87
|
+
if (!(await this.isCacheOutdated(filePath))) {
|
|
88
|
+
const cacheEntry = this.cache.get(filePath);
|
|
89
|
+
return cacheEntry.result;
|
|
90
|
+
}
|
|
91
|
+
const mtime = (await stat(filePath)).mtime.getTime();
|
|
92
|
+
const { css, map, dependencies } = await this.readCSS(filePath);
|
|
93
|
+
const ast = postcss.parse(css, { from: filePath, map: map ? { inline: false, prev: map } : { inline: false } });
|
|
94
|
+
// Get the local tokens exported by the source file.
|
|
95
|
+
// The tokens are fetched using `postcss-modules` plugin.
|
|
96
|
+
const localTokenNames = await generateLocalTokenNames(ast);
|
|
97
|
+
const tokens = [];
|
|
98
|
+
const { atImports, classSelectors, composesDeclarations } = collectNodes(ast);
|
|
99
|
+
// Load imported sheets recursively.
|
|
100
|
+
for (const atImport of atImports) {
|
|
101
|
+
const importedSheetPath = parseAtImport(atImport);
|
|
102
|
+
if (!importedSheetPath)
|
|
103
|
+
continue;
|
|
104
|
+
if (isIgnoredSpecifier(importedSheetPath))
|
|
105
|
+
continue;
|
|
106
|
+
const from = await this.resolver(importedSheetPath, { request: filePath });
|
|
107
|
+
const result = await this.load(from);
|
|
108
|
+
const externalTokens = result.tokens;
|
|
109
|
+
dependencies.push(from);
|
|
110
|
+
tokens.push(...externalTokens);
|
|
111
|
+
}
|
|
112
|
+
// Traverse the source file to find a class selector that matches the local token.
|
|
113
|
+
for (const { rule, classSelector } of classSelectors) {
|
|
114
|
+
// Consider a class selector to be the origin of a token if it matches a token fetched by postcss-modules.
|
|
115
|
+
// NOTE: This method has false positives. However, it works as expected in many cases.
|
|
116
|
+
if (!localTokenNames.includes(classSelector.value))
|
|
117
|
+
continue;
|
|
118
|
+
const originalLocation = getOriginalLocation(rule, classSelector);
|
|
119
|
+
tokens.push({
|
|
120
|
+
name: classSelector.value,
|
|
121
|
+
originalLocations: [originalLocation],
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
// Load imported tokens by the names recursively.
|
|
125
|
+
for (const composesDeclaration of composesDeclarations) {
|
|
126
|
+
const declarationDetail = parseComposesDeclarationWithFromUrl(composesDeclaration);
|
|
127
|
+
if (!declarationDetail)
|
|
128
|
+
continue;
|
|
129
|
+
if (isIgnoredSpecifier(declarationDetail.from))
|
|
130
|
+
continue;
|
|
131
|
+
const from = await this.resolver(declarationDetail.from, { request: filePath });
|
|
132
|
+
const result = await this.load(from);
|
|
133
|
+
const externalTokens = result.tokens.filter((token) => declarationDetail.tokenNames.includes(token.name));
|
|
134
|
+
dependencies.push(from);
|
|
135
|
+
tokens.push(...externalTokens);
|
|
136
|
+
}
|
|
137
|
+
const result = {
|
|
138
|
+
dependencies: unique(dependencies).filter((dep) => dep !== filePath),
|
|
139
|
+
tokens: normalizeTokens(tokens),
|
|
140
|
+
};
|
|
141
|
+
this.cache.set(filePath, { mtime, result });
|
|
142
|
+
return result;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/loader/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|