@css-modules-kit/core 0.8.1 → 0.9.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.
@@ -1 +1 @@
1
- {"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../src/checker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAGV,SAAS,EACT,UAAU,EACV,YAAY,EAEZ,cAAc,EACd,QAAQ,EAET,MAAM,WAAW,CAAC;AAGnB,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,SAAS,CAAC;IAClB,eAAe,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,YAAY,CAAC;IACxD,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,CAAC;CACvD;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,GAAG,UAAU,EAAE,CA0DpF"}
1
+ {"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../src/checker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EAGV,SAAS,EACT,UAAU,EACV,YAAY,EAEZ,cAAc,EACd,QAAQ,EAET,MAAM,WAAW,CAAC;AAGnB,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,SAAS,CAAC;IAClB,eAAe,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,YAAY,CAAC;IACxD,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,CAAC;CACvD;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,GAAG,UAAU,EAAE,CA2CpF"}
package/dist/checker.js CHANGED
@@ -1,17 +1,12 @@
1
- import { isURLSpecifier, isValidAsJSIdentifier } from './util.js';
1
+ import { isURLSpecifier, validateTokenName } from './util.js';
2
2
  export function checkCSSModule(cssModule, args) {
3
3
  const { config } = args;
4
4
  const diagnostics = [];
5
5
  for (const token of cssModule.localTokens) {
6
6
  // Reject special names as they may break .d.ts files
7
- if (!isValidAsJSIdentifier(token.name)) {
8
- diagnostics.push(createInvalidNameAsJSIdentifiersDiagnostic(cssModule, token.loc));
9
- }
10
- if (token.name === '__proto__') {
11
- diagnostics.push(createProtoIsNotAllowedDiagnostic(cssModule, token.loc));
12
- }
13
- if (config.namedExports && token.name === 'default') {
14
- diagnostics.push(createDefaultIsNotAllowedDiagnostic(cssModule, token.loc));
7
+ const violation = validateTokenName(token.name, { namedExports: config.namedExports });
8
+ if (violation) {
9
+ diagnostics.push(createTokenNameDiagnostic(cssModule, token.loc, violation));
15
10
  }
16
11
  }
17
12
  for (const tokenImporter of cssModule.tokenImporters) {
@@ -33,24 +28,14 @@ export function checkCSSModule(cssModule, args) {
33
28
  if (!exportRecord.allTokens.includes(value.name)) {
34
29
  diagnostics.push(createModuleHasNoExportedTokenDiagnostic(cssModule, tokenImporter, value));
35
30
  }
36
- if (!isValidAsJSIdentifier(value.name)) {
37
- diagnostics.push(createInvalidNameAsJSIdentifiersDiagnostic(cssModule, value.loc));
38
- }
39
- if (value.localName && !isValidAsJSIdentifier(value.localName)) {
40
- diagnostics.push(createInvalidNameAsJSIdentifiersDiagnostic(cssModule, value.localLoc));
41
- }
42
- if (value.name === '__proto__') {
43
- diagnostics.push(createProtoIsNotAllowedDiagnostic(cssModule, value.loc));
44
- }
45
- if (value.localName === '__proto__') {
46
- diagnostics.push(createProtoIsNotAllowedDiagnostic(cssModule, value.localLoc));
31
+ const nameViolation = validateTokenName(value.name, { namedExports: config.namedExports });
32
+ if (nameViolation) {
33
+ diagnostics.push(createTokenNameDiagnostic(cssModule, value.loc, nameViolation));
47
34
  }
48
- if (config.namedExports) {
49
- if (value.name === 'default') {
50
- diagnostics.push(createDefaultIsNotAllowedDiagnostic(cssModule, value.loc));
51
- }
52
- if (value.localName === 'default') {
53
- diagnostics.push(createDefaultIsNotAllowedDiagnostic(cssModule, value.localLoc));
35
+ if (value.localName) {
36
+ const localNameViolation = validateTokenName(value.localName, { namedExports: config.namedExports });
37
+ if (localNameViolation) {
38
+ diagnostics.push(createTokenNameDiagnostic(cssModule, value.localLoc, localNameViolation));
54
39
  }
55
40
  }
56
41
  }
@@ -58,6 +43,32 @@ export function checkCSSModule(cssModule, args) {
58
43
  }
59
44
  return diagnostics;
60
45
  }
46
+ function createTokenNameDiagnostic(cssModule, loc, violation) {
47
+ let text;
48
+ switch (violation) {
49
+ case 'invalid-js-identifier':
50
+ text = `Token names must be valid JavaScript identifiers when \`cmkOptions.namedExports\` is set to \`true\`.`;
51
+ break;
52
+ case 'proto-not-allowed':
53
+ text = `\`__proto__\` is not allowed as names.`;
54
+ break;
55
+ case 'default-not-allowed':
56
+ text = `\`default\` is not allowed as names when \`cmkOptions.namedExports\` is set to \`true\`.`;
57
+ break;
58
+ case 'backslash-not-allowed':
59
+ text = `Backslash (\\) is not allowed in names when \`cmkOptions.namedExports\` is set to \`false\`.`;
60
+ break;
61
+ default:
62
+ throw new Error('unreachable: unknown TokenNameViolation');
63
+ }
64
+ return {
65
+ text,
66
+ category: 'error',
67
+ file: { fileName: cssModule.fileName, text: cssModule.text },
68
+ start: { line: loc.start.line, column: loc.start.column },
69
+ length: loc.end.offset - loc.start.offset,
70
+ };
71
+ }
61
72
  function createCannotImportModuleDiagnostic(cssModule, tokenImporter) {
62
73
  return {
63
74
  text: `Cannot import module '${tokenImporter.from}'`,
@@ -76,31 +87,4 @@ function createModuleHasNoExportedTokenDiagnostic(cssModule, tokenImporter, valu
76
87
  length: value.loc.end.offset - value.loc.start.offset,
77
88
  };
78
89
  }
79
- function createInvalidNameAsJSIdentifiersDiagnostic(cssModule, loc) {
80
- return {
81
- text: `css-modules-kit does not support invalid names as JavaScript identifiers.`,
82
- category: 'error',
83
- file: { fileName: cssModule.fileName, text: cssModule.text },
84
- start: { line: loc.start.line, column: loc.start.column },
85
- length: loc.end.offset - loc.start.offset,
86
- };
87
- }
88
- function createProtoIsNotAllowedDiagnostic(cssModule, loc) {
89
- return {
90
- text: `\`__proto__\` is not allowed as names.`,
91
- category: 'error',
92
- file: { fileName: cssModule.fileName, text: cssModule.text },
93
- start: { line: loc.start.line, column: loc.start.column },
94
- length: loc.end.offset - loc.start.offset,
95
- };
96
- }
97
- function createDefaultIsNotAllowedDiagnostic(cssModule, loc) {
98
- return {
99
- text: `\`default\` is not allowed as names when \`cmkOptions.namedExports\` is set to \`true\`.`,
100
- category: 'error',
101
- file: { fileName: cssModule.fileName, text: cssModule.text },
102
- start: { line: loc.start.line, column: loc.start.column },
103
- length: loc.end.offset - loc.start.offset,
104
- };
105
- }
106
90
  //# sourceMappingURL=checker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checker.js","sourceRoot":"","sources":["../src/checker.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checker.js","sourceRoot":"","sources":["../src/checker.ts"],"names":[],"mappings":"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"}
@@ -13,6 +13,8 @@ interface CodeMapping {
13
13
  lengths: number[];
14
14
  /** The generated offsets of the tokens in the *.d.ts file. */
15
15
  generatedOffsets: number[];
16
+ /** The lengths of the tokens in the *.d.ts file. If not provided, it is assumed to be the same as `lengths`. */
17
+ generatedLengths?: number[];
16
18
  }
17
19
  /** The map linking the two codes in *.d.ts */
18
20
  interface LinkedCodeMapping extends CodeMapping {
@@ -28,6 +30,7 @@ interface LinkedCodeMapping extends CodeMapping {
28
30
  interface GenerateDtsResult {
29
31
  text: string;
30
32
  mapping: CodeMapping;
33
+ secondaryMapping?: CodeMapping;
31
34
  linkedCodeMapping: LinkedCodeMapping;
32
35
  }
33
36
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"dts-generator.d.ts","sourceRoot":"","sources":["../src/dts-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAwB,MAAM,WAAW,CAAC;AAGjE,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,OAAO,CAAC;IACtB,sBAAsB,EAAE,OAAO,CAAC;IAChC,mCAAmC;IACnC,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,WAAW;IACnB,iEAAiE;IACjE,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,8DAA8D;IAC9D,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,8CAA8C;AAE9C,UAAU,iBAAkB,SAAQ,WAAW;IAC7C,iDAAiD;IACjD,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,iDAAiD;IACjD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kDAAkD;IAClD,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,kDAAkD;IAClD,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,WAAW,CAAC;IACrB,iBAAiB,EAAE,iBAAiB,CAAC;CACtC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,kBAAkB,GAAG,iBAAiB,CA+DhG"}
1
+ {"version":3,"file":"dts-generator.d.ts","sourceRoot":"","sources":["../src/dts-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAwB,MAAM,WAAW,CAAC;AAIjE,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,OAAO,CAAC;IACtB,sBAAsB,EAAE,OAAO,CAAC;IAChC,mCAAmC;IACnC,WAAW,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,WAAW;IACnB,iEAAiE;IACjE,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,0DAA0D;IAC1D,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,8DAA8D;IAC9D,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,gHAAgH;IAChH,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,8CAA8C;AAE9C,UAAU,iBAAkB,SAAQ,WAAW;IAC7C,iDAAiD;IACjD,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,iDAAiD;IACjD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,kDAAkD;IAClD,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,kDAAkD;IAClD,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,WAAW,CAAC;IACrB,gBAAgB,CAAC,EAAE,WAAW,CAAC;IAC/B,iBAAiB,EAAE,iBAAiB,CAAC;CACtC;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,kBAAkB,GAAG,iBAAiB,CA+DhG"}
@@ -1,19 +1,19 @@
1
- import { isURLSpecifier, isValidAsJSIdentifier } from './util.js';
1
+ import { isURLSpecifier, validateTokenName } from './util.js';
2
2
  export const STYLES_EXPORT_NAME = 'styles';
3
3
  /**
4
4
  * Generate .d.ts from `CSSModule`.
5
5
  */
6
6
  export function generateDts(cssModule, options) {
7
7
  // Exclude invalid tokens
8
- const localTokens = cssModule.localTokens.filter((token) => isValidName(token.name, options));
8
+ const localTokens = cssModule.localTokens.filter((token) => isValidTokenName(token.name, options));
9
9
  const tokenImporters = cssModule.tokenImporters
10
10
  // Exclude invalid imported tokens
11
11
  .map((tokenImporter) => {
12
12
  if (tokenImporter.type === 'value') {
13
13
  return {
14
14
  ...tokenImporter,
15
- values: tokenImporter.values.filter((value) => isValidName(value.name, options) &&
16
- (value.localName === undefined || isValidName(value.localName, options))),
15
+ values: tokenImporter.values.filter((value) => isValidTokenName(value.name, options) &&
16
+ (value.localName === undefined || isValidTokenName(value.localName, options))),
17
17
  };
18
18
  }
19
19
  else {
@@ -214,6 +214,17 @@ function generateNamedExportsDts(localTokens, tokenImporters, options) {
214
214
  /** Generate a d.ts file with a default export. */
215
215
  function generateDefaultExportDts(localTokens, tokenImporters) {
216
216
  const mapping = { sourceOffsets: [], lengths: [], generatedOffsets: [] };
217
+ /**
218
+ * In "Go to Definition", mapping only the inner part of the quotes does not work.
219
+ * Therefore, we also generate a mapping that includes the quotes.
220
+ * For more details, see https://github.com/mizdra/volar-single-quote-span-problem.
221
+ */
222
+ const secondaryMapping = {
223
+ sourceOffsets: [],
224
+ lengths: [],
225
+ generatedOffsets: [],
226
+ generatedLengths: [],
227
+ };
217
228
  const linkedCodeMapping = {
218
229
  sourceOffsets: [],
219
230
  lengths: [],
@@ -240,27 +251,33 @@ function generateDefaultExportDts(localTokens, tokenImporters) {
240
251
  * The mapping is created as follows:
241
252
  * a.module.css:
242
253
  * 1 | .a_1 { color: red; }
243
- * | ^ mapping.sourceOffsets[0]
254
+ * | ^ mapping.sourceOffsets[0], secondaryMapping.sourceOffsets[0]
244
255
  * |
245
256
  * 2 | .a_2 { color: blue; }
246
- * | ^ mapping.sourceOffsets[1]
257
+ * | ^ mapping.sourceOffsets[1], secondaryMapping.sourceOffsets[1]
247
258
  * |
248
259
  *
249
260
  * a.module.css.d.ts:
250
261
  * 1 | declare const styles = {
251
- * 2 | a_1: '' as readonly string,
252
- * | ^ mapping.generatedOffsets[0]
262
+ * 2 | 'a_1': '' as readonly string,
263
+ * | ^^ mapping.generatedOffsets[0]
264
+ * | ^ secondaryMapping.generatedOffsets[0]
253
265
  * |
254
- * 3 | a_2: '' as readonly string,
255
- * | ^ mapping.generatedOffsets[1]
266
+ * 3 | 'a_2': '' as readonly string,
267
+ * | ^^ mapping.generatedOffsets[1]
268
+ * | ^ secondaryMapping.generatedOffsets[1]
256
269
  * |
257
270
  * 4 | };
258
271
  */
259
- text += ` `;
272
+ text += ` '`;
260
273
  mapping.sourceOffsets.push(token.loc.start.offset);
261
- mapping.generatedOffsets.push(text.length);
262
274
  mapping.lengths.push(token.name.length);
263
- text += `${token.name}: '' as readonly string,\n`;
275
+ mapping.generatedOffsets.push(text.length);
276
+ secondaryMapping.sourceOffsets.push(token.loc.start.offset);
277
+ secondaryMapping.lengths.push(token.name.length);
278
+ secondaryMapping.generatedOffsets.push(text.length - 1);
279
+ secondaryMapping.generatedLengths.push(token.name.length + 2);
280
+ text += `${token.name}': '' as readonly string,\n`;
264
281
  }
265
282
  for (const tokenImporter of tokenImporters) {
266
283
  if (tokenImporter.type === 'import') {
@@ -297,31 +314,35 @@ function generateDefaultExportDts(localTokens, tokenImporters) {
297
314
  * The mapping is created as follows:
298
315
  * a.module.css:
299
316
  * 1 | @value b_1, b_2 from './b.module.css';
300
- * | ^ ^ ^ mapping.sourceOffsets[0]
301
- * | ^ ^ mapping.sourceOffsets[2]
302
- * | ^ mapping.sourceOffsets[1]
317
+ * | ^ ^ ^ mapping.sourceOffsets[1]
318
+ * | ^ ^ mapping.sourceOffsets[2], secondaryMapping.sourceOffsets[1]
319
+ * | ^ mapping.sourceOffsets[0], secondaryMapping.sourceOffsets[0]
303
320
  * |
304
321
  * 2 | @value c_1 as aliased_c_1 from './c.module.css';
305
322
  * | ^ ^ ^ mapping.sourceOffsets[4]
306
- * | ^ ^ mapping.sourceOffsets[3]
307
- * | ^ mapping.sourceOffsets[5]
323
+ * | ^ ^ mapping.sourceOffsets[3], secondaryMapping.sourceOffsets[2]
324
+ * | ^ mapping.sourceOffsets[5], secondaryMapping.sourceOffsets[3]
308
325
  * |
309
326
  *
310
327
  * a.module.css.d.ts:
311
328
  * 1 | declare const styles = {
312
- * 2 | b_1: (await import('./b.module.css')).default.b_1,
313
- * | ^ ^ ^ linkedCodeMapping.generatedOffsets[0]
314
- * | ^ ^ mapping.generatedOffsets[1]
315
- * | ^ mapping.generatedOffsets[0], linkedCodeMapping.sourceOffsets[0]
329
+ * 2 | 'b_1': (await import('./b.module.css')).default['b_1'],
330
+ * | ^^ ^ ^ linkedCodeMapping.generatedOffsets[0]
331
+ * | ^^ ^ mapping.generatedOffsets[1]
332
+ * | ^^ mapping.generatedOffsets[0]
333
+ * | ^ secondaryMapping.generatedOffsets[0], linkedCodeMapping.sourceOffsets[0]
316
334
  * |
317
- * 3 | b_2: (await import('./b.module.css')).default.b_2,
318
- * | ^ ^ linkedCodeMapping.generatedOffsets[1]
319
- * | ^ mapping.generatedOffsets[2], linkedCodeMapping.sourceOffsets[1]
335
+ * 3 | 'b_2': (await import('./b.module.css')).default['b_2'],
336
+ * | ^^ ^ linkedCodeMapping.generatedOffsets[1]
337
+ * | ^^ mapping.generatedOffsets[2]
338
+ * | ^ secondaryMapping.generatedOffsets[1], linkedCodeMapping.sourceOffsets[1]
320
339
  * |
321
- * 4 | aliased_c_1: (await import('./c.module.css')).default.c_1,
322
- * | ^ ^ ^ mapping.generatedOffsets[5], linkedCodeMapping.generatedOffsets[2]
323
- * | ^ ^ mapping.generatedOffsets[4]
324
- * | ^ mapping.generatedOffsets[3], linkedCodeMapping.sourceOffsets[2]
340
+ * 4 | 'aliased_c_1': (await import('./c.module.css')).default['c_1'],
341
+ * | ^^ ^ ^^ mapping.generatedOffsets[5]
342
+ * | ^^ ^ ^ secondaryMapping.generatedOffsets[3], linkedCodeMapping.generatedOffsets[2]
343
+ * | ^^ ^ mapping.generatedOffsets[4]
344
+ * | ^^ mapping.generatedOffsets[3]
345
+ * | ^ secondaryMapping.generatedOffsets[2], linkedCodeMapping.sourceOffsets[2]
325
346
  * |
326
347
  * 5 | };
327
348
  *
@@ -331,40 +352,42 @@ function generateDefaultExportDts(localTokens, tokenImporters) {
331
352
  tokenImporter.values.forEach((value, i) => {
332
353
  const localName = value.localName ?? value.name;
333
354
  const localLoc = value.localLoc ?? value.loc;
334
- text += ` `;
355
+ text += ` '`;
335
356
  mapping.sourceOffsets.push(localLoc.start.offset);
336
357
  mapping.lengths.push(localName.length);
337
358
  mapping.generatedOffsets.push(text.length);
338
- linkedCodeMapping.sourceOffsets.push(text.length);
339
- linkedCodeMapping.lengths.push(localName.length);
340
- text += `${localName}: (await import(`;
359
+ secondaryMapping.sourceOffsets.push(localLoc.start.offset);
360
+ secondaryMapping.lengths.push(localName.length);
361
+ secondaryMapping.generatedOffsets.push(text.length - 1);
362
+ secondaryMapping.generatedLengths.push(localName.length + 2);
363
+ linkedCodeMapping.sourceOffsets.push(text.length - 1);
364
+ linkedCodeMapping.lengths.push(localName.length + 2);
365
+ text += `${localName}': (await import(`;
341
366
  if (i === 0) {
342
367
  mapping.sourceOffsets.push(tokenImporter.fromLoc.start.offset - 1);
343
368
  mapping.lengths.push(tokenImporter.from.length + 2);
344
369
  mapping.generatedOffsets.push(text.length);
345
370
  }
346
- text += `'${tokenImporter.from}')).default.`;
371
+ text += `'${tokenImporter.from}')).default['`;
347
372
  if ('localName' in value) {
348
373
  mapping.sourceOffsets.push(value.loc.start.offset);
349
374
  mapping.lengths.push(value.name.length);
350
375
  mapping.generatedOffsets.push(text.length);
376
+ secondaryMapping.sourceOffsets.push(value.loc.start.offset);
377
+ secondaryMapping.lengths.push(value.name.length);
378
+ secondaryMapping.generatedOffsets.push(text.length - 1);
379
+ secondaryMapping.generatedLengths.push(value.name.length + 2);
351
380
  }
352
- linkedCodeMapping.generatedOffsets.push(text.length);
353
- linkedCodeMapping.generatedLengths.push(value.name.length);
354
- text += `${value.name},\n`;
381
+ linkedCodeMapping.generatedOffsets.push(text.length - 1);
382
+ linkedCodeMapping.generatedLengths.push(value.name.length + 2);
383
+ text += `${value.name}'],\n`;
355
384
  });
356
385
  }
357
386
  }
358
387
  text += `};\nexport default ${STYLES_EXPORT_NAME};\n`;
359
- return { text, mapping, linkedCodeMapping };
388
+ return { text, mapping, linkedCodeMapping, secondaryMapping };
360
389
  }
361
- function isValidName(name, options) {
362
- if (!isValidAsJSIdentifier(name))
363
- return false;
364
- if (name === '__proto__')
365
- return false;
366
- if (options.namedExports && name === 'default')
367
- return false;
368
- return true;
390
+ function isValidTokenName(name, options) {
391
+ return validateTokenName(name, options) === undefined;
369
392
  }
370
393
  //# sourceMappingURL=dts-generator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dts-generator.js","sourceRoot":"","sources":["../src/dts-generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dts-generator.js","sourceRoot":"","sources":["../src/dts-generator.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"rule-parser.d.ts","sourceRoot":"","sources":["../../src/parser/rule-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,cAAc,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,8BAA8B,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE/F,iBAAS,4CAA4C,CACnD,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,cAAc,CAAC,IAAI,GACxB;IAAE,KAAK,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAI/C;AACD,OAAO,EAAE,4CAA4C,IAAI,mDAAmD,EAAE,CAAC;AA0E/G,UAAU,aAAa;IACrB,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,GAAG,EAAE,QAAQ,CAAC;IACd;;;OAGG;IACH,cAAc,EAAE,QAAQ,CAAC;CAC1B;AAED,UAAU,eAAe;IACvB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,WAAW,EAAE,8BAA8B,EAAE,CAAC;CAC/C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,eAAe,CAyBrD"}
1
+ {"version":3,"file":"rule-parser.d.ts","sourceRoot":"","sources":["../../src/parser/rule-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,cAAc,MAAM,yBAAyB,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,8BAA8B,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE/F,iBAAS,4CAA4C,CACnD,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,cAAc,CAAC,IAAI,GACxB;IAAE,KAAK,EAAE,kBAAkB,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAI/C;AACD,OAAO,EAAE,4CAA4C,IAAI,mDAAmD,EAAE,CAAC;AA0E/G,UAAU,aAAa;IACrB,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,GAAG,EAAE,QAAQ,CAAC;IACd;;;OAGG;IACH,cAAc,EAAE,QAAQ,CAAC;CAC1B;AAED,UAAU,eAAe;IACvB,cAAc,EAAE,aAAa,EAAE,CAAC;IAChC,WAAW,EAAE,8BAA8B,EAAE,CAAC;CAC/C;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,eAAe,CAmCrD"}
@@ -85,14 +85,24 @@ export function parseRule(rule) {
85
85
  column: rule.source.start.column + className.source.start.column,
86
86
  offset: rule.source.start.offset + className.sourceIndex + 1,
87
87
  };
88
+ /**
89
+ * When there is a selector like `.\31 backslash`, `className.value` becomes `"1backslash"`.
90
+ * In other words, it is the string after escape sequences have been interpreted.
91
+ * However, here we need the raw string as written in the CSS source code.
92
+ * So we use `className.toString()`.
93
+ *
94
+ * The return value of `className.toString()` may contain leading dots and spaces like `" .1backslash"`.
95
+ * Therefore, we remove the leading spaces and dot with a regular expression.
96
+ */
97
+ const rawClassName = className.toString().replace(/^\s*\./u, '');
88
98
  const end = {
89
99
  // The end line is always the same as the start line, as a class selector cannot break in the middle.
90
100
  line: start.line,
91
- column: start.column + className.value.length,
92
- offset: start.offset + className.value.length,
101
+ column: start.column + rawClassName.length,
102
+ offset: start.offset + rawClassName.length,
93
103
  };
94
104
  return {
95
- name: className.value,
105
+ name: rawClassName,
96
106
  loc: { start, end },
97
107
  declarationLoc: { start: rule.source.start, end: rule.positionBy({ index: rule.toString().length }) },
98
108
  };
@@ -1 +1 @@
1
- {"version":3,"file":"rule-parser.js","sourceRoot":"","sources":["../../src/parser/rule-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rule-parser.js","sourceRoot":"","sources":["../../src/parser/rule-parser.ts"],"names":[],"mappings":"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"}
package/dist/util.d.ts CHANGED
@@ -1,5 +1,16 @@
1
1
  export declare function isPosixRelativePath(path: string): boolean;
2
- export declare function isValidAsJSIdentifier(name: string): boolean;
2
+ /** The type of token name violation. */
3
+ export type TokenNameViolation = 'invalid-js-identifier' | 'proto-not-allowed' | 'default-not-allowed' | 'backslash-not-allowed';
4
+ export interface ValidateTokenNameOptions {
5
+ namedExports: boolean;
6
+ }
7
+ /**
8
+ * Validates a token name and returns the violation if any.
9
+ * @param name The token name to validate.
10
+ * @param options The validation options.
11
+ * @returns The violation, or `undefined` if the name is valid.
12
+ */
13
+ export declare function validateTokenName(name: string, options: ValidateTokenNameOptions): TokenNameViolation | undefined;
3
14
  export declare function findUsedTokenNames(componentText: string): Set<string>;
4
15
  export declare function isURLSpecifier(specifier: string): boolean;
5
16
  //# sourceMappingURL=util.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAID,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3D;AAWD,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAOrE;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEzD"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAID,wCAAwC;AACxC,MAAM,MAAM,kBAAkB,GAC1B,uBAAuB,GACvB,mBAAmB,GACnB,qBAAqB,GACrB,uBAAuB,CAAC;AAE5B,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB,GAAG,kBAAkB,GAAG,SAAS,CASjH;AAWD,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAOrE;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEzD"}
package/dist/util.js CHANGED
@@ -2,22 +2,40 @@ export function isPosixRelativePath(path) {
2
2
  return path.startsWith(`./`) || path.startsWith(`../`);
3
3
  }
4
4
  const JS_IDENTIFIER_PATTERN = /^[$_\p{ID_Start}][$\u200c\u200d\p{ID_Continue}]*$/u;
5
- export function isValidAsJSIdentifier(name) {
6
- return JS_IDENTIFIER_PATTERN.test(name);
5
+ /**
6
+ * Validates a token name and returns the violation if any.
7
+ * @param name The token name to validate.
8
+ * @param options The validation options.
9
+ * @returns The violation, or `undefined` if the name is valid.
10
+ */
11
+ export function validateTokenName(name, options) {
12
+ if (name === '__proto__')
13
+ return 'proto-not-allowed';
14
+ if (options.namedExports) {
15
+ if (name === 'default')
16
+ return 'default-not-allowed';
17
+ if (!JS_IDENTIFIER_PATTERN.test(name))
18
+ return 'invalid-js-identifier';
19
+ }
20
+ else {
21
+ if (name.includes('\\'))
22
+ return 'backslash-not-allowed';
23
+ }
24
+ return undefined;
7
25
  }
8
26
  /**
9
27
  * The syntax pattern for consuming tokens imported from CSS Module.
10
- * @example `styles.foo`
28
+ * @example `styles.foo`, `styles['foo']`, `styles["foo"]`
11
29
  */
12
- // TODO(#125): Support `styles['foo']` and `styles["foo"]`
13
30
  // MEMO: The `xxxStyles.foo` format is not supported, because the css module file for current component file is usually imported with `styles`.
14
31
  // It is sufficient to support only the `styles.foo` format.
15
- const TOKEN_CONSUMER_PATTERN = /styles\.([$_\p{ID_Start}][$\u200c\u200d\p{ID_Continue}]*)/gu;
32
+ const TOKEN_CONSUMER_PATTERN = /styles(?:\.([$_\p{ID_Start}][$\u200c\u200d\p{ID_Continue}]*)|\['([^']*?)'\]|\["([^"]*?)"\])/gu;
16
33
  export function findUsedTokenNames(componentText) {
17
34
  const usedClassNames = new Set();
18
- let match;
19
- while ((match = TOKEN_CONSUMER_PATTERN.exec(componentText)) !== null) {
20
- usedClassNames.add(match[1]);
35
+ for (const match of componentText.matchAll(TOKEN_CONSUMER_PATTERN)) {
36
+ const name = match[1] ?? match[2] ?? match[3];
37
+ if (name)
38
+ usedClassNames.add(name);
21
39
  }
22
40
  return usedClassNames;
23
41
  }
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,qBAAqB,GAAG,oDAAoD,CAAC;AAEnF,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED;;;GAGG;AACH,0DAA0D;AAC1D,+IAA+I;AAC/I,kEAAkE;AAClE,MAAM,sBAAsB,GAAG,6DAA6D,CAAC;AAE7F,MAAM,UAAU,kBAAkB,CAAC,aAAqB;IACtD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,IAAI,KAAK,CAAC;IACV,OAAO,CAAC,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACrE,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAC;IAChC,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,OAAO,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,qBAAqB,GAAG,oDAAoD,CAAC;AAanF;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,OAAiC;IAC/E,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,mBAAmB,CAAC;IACrD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,qBAAqB,CAAC;QACrD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,uBAAuB,CAAC;IACxE,CAAC;SAAM,CAAC;QACN,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,uBAAuB,CAAC;IAC1D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,+IAA+I;AAC/I,kEAAkE;AAClE,MAAM,sBAAsB,GAC1B,+FAA+F,CAAC;AAElG,MAAM,UAAU,kBAAkB,CAAC,aAAqB;IACtD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,IAAI;YAAE,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,OAAO,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@css-modules-kit/core",
3
3
  "description": "The core of css-modules-kit",
4
- "version": "0.8.1",
4
+ "version": "0.9.0",
5
5
  "type": "module",
6
6
  "sideEffects": false,
7
7
  "repository": {
package/src/checker.ts CHANGED
@@ -10,7 +10,7 @@ import type {
10
10
  Resolver,
11
11
  TokenImporter,
12
12
  } from './type.js';
13
- import { isURLSpecifier, isValidAsJSIdentifier } from './util.js';
13
+ import { isURLSpecifier, type TokenNameViolation, validateTokenName } from './util.js';
14
14
 
15
15
  export interface CheckerArgs {
16
16
  config: CMKConfig;
@@ -26,14 +26,9 @@ export function checkCSSModule(cssModule: CSSModule, args: CheckerArgs): Diagnos
26
26
 
27
27
  for (const token of cssModule.localTokens) {
28
28
  // Reject special names as they may break .d.ts files
29
- if (!isValidAsJSIdentifier(token.name)) {
30
- diagnostics.push(createInvalidNameAsJSIdentifiersDiagnostic(cssModule, token.loc));
31
- }
32
- if (token.name === '__proto__') {
33
- diagnostics.push(createProtoIsNotAllowedDiagnostic(cssModule, token.loc));
34
- }
35
- if (config.namedExports && token.name === 'default') {
36
- diagnostics.push(createDefaultIsNotAllowedDiagnostic(cssModule, token.loc));
29
+ const violation = validateTokenName(token.name, { namedExports: config.namedExports });
30
+ if (violation) {
31
+ diagnostics.push(createTokenNameDiagnostic(cssModule, token.loc, violation));
37
32
  }
38
33
  }
39
34
 
@@ -54,24 +49,14 @@ export function checkCSSModule(cssModule: CSSModule, args: CheckerArgs): Diagnos
54
49
  if (!exportRecord.allTokens.includes(value.name)) {
55
50
  diagnostics.push(createModuleHasNoExportedTokenDiagnostic(cssModule, tokenImporter, value));
56
51
  }
57
- if (!isValidAsJSIdentifier(value.name)) {
58
- diagnostics.push(createInvalidNameAsJSIdentifiersDiagnostic(cssModule, value.loc));
59
- }
60
- if (value.localName && !isValidAsJSIdentifier(value.localName)) {
61
- diagnostics.push(createInvalidNameAsJSIdentifiersDiagnostic(cssModule, value.localLoc!));
62
- }
63
- if (value.name === '__proto__') {
64
- diagnostics.push(createProtoIsNotAllowedDiagnostic(cssModule, value.loc));
65
- }
66
- if (value.localName === '__proto__') {
67
- diagnostics.push(createProtoIsNotAllowedDiagnostic(cssModule, value.localLoc!));
52
+ const nameViolation = validateTokenName(value.name, { namedExports: config.namedExports });
53
+ if (nameViolation) {
54
+ diagnostics.push(createTokenNameDiagnostic(cssModule, value.loc, nameViolation));
68
55
  }
69
- if (config.namedExports) {
70
- if (value.name === 'default') {
71
- diagnostics.push(createDefaultIsNotAllowedDiagnostic(cssModule, value.loc));
72
- }
73
- if (value.localName === 'default') {
74
- diagnostics.push(createDefaultIsNotAllowedDiagnostic(cssModule, value.localLoc!));
56
+ if (value.localName) {
57
+ const localNameViolation = validateTokenName(value.localName, { namedExports: config.namedExports });
58
+ if (localNameViolation) {
59
+ diagnostics.push(createTokenNameDiagnostic(cssModule, value.localLoc!, localNameViolation));
75
60
  }
76
61
  }
77
62
  }
@@ -80,6 +65,33 @@ export function checkCSSModule(cssModule: CSSModule, args: CheckerArgs): Diagnos
80
65
  return diagnostics;
81
66
  }
82
67
 
68
+ function createTokenNameDiagnostic(cssModule: CSSModule, loc: Location, violation: TokenNameViolation): Diagnostic {
69
+ let text: string;
70
+ switch (violation) {
71
+ case 'invalid-js-identifier':
72
+ text = `Token names must be valid JavaScript identifiers when \`cmkOptions.namedExports\` is set to \`true\`.`;
73
+ break;
74
+ case 'proto-not-allowed':
75
+ text = `\`__proto__\` is not allowed as names.`;
76
+ break;
77
+ case 'default-not-allowed':
78
+ text = `\`default\` is not allowed as names when \`cmkOptions.namedExports\` is set to \`true\`.`;
79
+ break;
80
+ case 'backslash-not-allowed':
81
+ text = `Backslash (\\) is not allowed in names when \`cmkOptions.namedExports\` is set to \`false\`.`;
82
+ break;
83
+ default:
84
+ throw new Error('unreachable: unknown TokenNameViolation');
85
+ }
86
+ return {
87
+ text,
88
+ category: 'error',
89
+ file: { fileName: cssModule.fileName, text: cssModule.text },
90
+ start: { line: loc.start.line, column: loc.start.column },
91
+ length: loc.end.offset - loc.start.offset,
92
+ };
93
+ }
94
+
83
95
  function createCannotImportModuleDiagnostic(cssModule: CSSModule, tokenImporter: TokenImporter): Diagnostic {
84
96
  return {
85
97
  text: `Cannot import module '${tokenImporter.from}'`,
@@ -103,33 +115,3 @@ function createModuleHasNoExportedTokenDiagnostic(
103
115
  length: value.loc.end.offset - value.loc.start.offset,
104
116
  };
105
117
  }
106
-
107
- function createInvalidNameAsJSIdentifiersDiagnostic(cssModule: CSSModule, loc: Location): Diagnostic {
108
- return {
109
- text: `css-modules-kit does not support invalid names as JavaScript identifiers.`,
110
- category: 'error',
111
- file: { fileName: cssModule.fileName, text: cssModule.text },
112
- start: { line: loc.start.line, column: loc.start.column },
113
- length: loc.end.offset - loc.start.offset,
114
- };
115
- }
116
-
117
- function createProtoIsNotAllowedDiagnostic(cssModule: CSSModule, loc: Location): Diagnostic {
118
- return {
119
- text: `\`__proto__\` is not allowed as names.`,
120
- category: 'error',
121
- file: { fileName: cssModule.fileName, text: cssModule.text },
122
- start: { line: loc.start.line, column: loc.start.column },
123
- length: loc.end.offset - loc.start.offset,
124
- };
125
- }
126
-
127
- function createDefaultIsNotAllowedDiagnostic(cssModule: CSSModule, loc: Location): Diagnostic {
128
- return {
129
- text: `\`default\` is not allowed as names when \`cmkOptions.namedExports\` is set to \`true\`.`,
130
- category: 'error',
131
- file: { fileName: cssModule.fileName, text: cssModule.text },
132
- start: { line: loc.start.line, column: loc.start.column },
133
- length: loc.end.offset - loc.start.offset,
134
- };
135
- }
@@ -1,5 +1,6 @@
1
1
  import type { CSSModule, Token, TokenImporter } from './type.js';
2
- import { isURLSpecifier, isValidAsJSIdentifier } from './util.js';
2
+ import type { ValidateTokenNameOptions } from './util.js';
3
+ import { isURLSpecifier, validateTokenName } from './util.js';
3
4
 
4
5
  export const STYLES_EXPORT_NAME = 'styles';
5
6
 
@@ -17,6 +18,8 @@ interface CodeMapping {
17
18
  lengths: number[];
18
19
  /** The generated offsets of the tokens in the *.d.ts file. */
19
20
  generatedOffsets: number[];
21
+ /** The lengths of the tokens in the *.d.ts file. If not provided, it is assumed to be the same as `lengths`. */
22
+ generatedLengths?: number[];
20
23
  }
21
24
 
22
25
  /** The map linking the two codes in *.d.ts */
@@ -35,6 +38,7 @@ interface LinkedCodeMapping extends CodeMapping {
35
38
  interface GenerateDtsResult {
36
39
  text: string;
37
40
  mapping: CodeMapping;
41
+ secondaryMapping?: CodeMapping;
38
42
  linkedCodeMapping: LinkedCodeMapping;
39
43
  }
40
44
 
@@ -43,7 +47,7 @@ interface GenerateDtsResult {
43
47
  */
44
48
  export function generateDts(cssModule: CSSModule, options: GenerateDtsOptions): GenerateDtsResult {
45
49
  // Exclude invalid tokens
46
- const localTokens = cssModule.localTokens.filter((token) => isValidName(token.name, options));
50
+ const localTokens = cssModule.localTokens.filter((token) => isValidTokenName(token.name, options));
47
51
  const tokenImporters = cssModule.tokenImporters
48
52
  // Exclude invalid imported tokens
49
53
  .map((tokenImporter) => {
@@ -52,8 +56,8 @@ export function generateDts(cssModule: CSSModule, options: GenerateDtsOptions):
52
56
  ...tokenImporter,
53
57
  values: tokenImporter.values.filter(
54
58
  (value) =>
55
- isValidName(value.name, options) &&
56
- (value.localName === undefined || isValidName(value.localName, options)),
59
+ isValidTokenName(value.name, options) &&
60
+ (value.localName === undefined || isValidTokenName(value.localName, options)),
57
61
  ),
58
62
  };
59
63
  } else {
@@ -264,8 +268,24 @@ function generateNamedExportsDts(
264
268
  function generateDefaultExportDts(
265
269
  localTokens: Token[],
266
270
  tokenImporters: TokenImporter[],
267
- ): { text: string; mapping: CodeMapping; linkedCodeMapping: LinkedCodeMapping } {
271
+ ): {
272
+ text: string;
273
+ mapping: CodeMapping;
274
+ secondaryMapping: CodeMapping;
275
+ linkedCodeMapping: LinkedCodeMapping;
276
+ } {
268
277
  const mapping: CodeMapping = { sourceOffsets: [], lengths: [], generatedOffsets: [] };
278
+ /**
279
+ * In "Go to Definition", mapping only the inner part of the quotes does not work.
280
+ * Therefore, we also generate a mapping that includes the quotes.
281
+ * For more details, see https://github.com/mizdra/volar-single-quote-span-problem.
282
+ */
283
+ const secondaryMapping: CodeMapping & { generatedLengths: number[] } = {
284
+ sourceOffsets: [],
285
+ lengths: [],
286
+ generatedOffsets: [],
287
+ generatedLengths: [],
288
+ };
269
289
  const linkedCodeMapping: LinkedCodeMapping = {
270
290
  sourceOffsets: [],
271
291
  lengths: [],
@@ -295,28 +315,34 @@ function generateDefaultExportDts(
295
315
  * The mapping is created as follows:
296
316
  * a.module.css:
297
317
  * 1 | .a_1 { color: red; }
298
- * | ^ mapping.sourceOffsets[0]
318
+ * | ^ mapping.sourceOffsets[0], secondaryMapping.sourceOffsets[0]
299
319
  * |
300
320
  * 2 | .a_2 { color: blue; }
301
- * | ^ mapping.sourceOffsets[1]
321
+ * | ^ mapping.sourceOffsets[1], secondaryMapping.sourceOffsets[1]
302
322
  * |
303
323
  *
304
324
  * a.module.css.d.ts:
305
325
  * 1 | declare const styles = {
306
- * 2 | a_1: '' as readonly string,
307
- * | ^ mapping.generatedOffsets[0]
326
+ * 2 | 'a_1': '' as readonly string,
327
+ * | ^^ mapping.generatedOffsets[0]
328
+ * | ^ secondaryMapping.generatedOffsets[0]
308
329
  * |
309
- * 3 | a_2: '' as readonly string,
310
- * | ^ mapping.generatedOffsets[1]
330
+ * 3 | 'a_2': '' as readonly string,
331
+ * | ^^ mapping.generatedOffsets[1]
332
+ * | ^ secondaryMapping.generatedOffsets[1]
311
333
  * |
312
334
  * 4 | };
313
335
  */
314
336
 
315
- text += ` `;
337
+ text += ` '`;
316
338
  mapping.sourceOffsets.push(token.loc.start.offset);
317
- mapping.generatedOffsets.push(text.length);
318
339
  mapping.lengths.push(token.name.length);
319
- text += `${token.name}: '' as readonly string,\n`;
340
+ mapping.generatedOffsets.push(text.length);
341
+ secondaryMapping.sourceOffsets.push(token.loc.start.offset);
342
+ secondaryMapping.lengths.push(token.name.length);
343
+ secondaryMapping.generatedOffsets.push(text.length - 1);
344
+ secondaryMapping.generatedLengths.push(token.name.length + 2);
345
+ text += `${token.name}': '' as readonly string,\n`;
320
346
  }
321
347
  for (const tokenImporter of tokenImporters) {
322
348
  if (tokenImporter.type === 'import') {
@@ -353,31 +379,35 @@ function generateDefaultExportDts(
353
379
  * The mapping is created as follows:
354
380
  * a.module.css:
355
381
  * 1 | @value b_1, b_2 from './b.module.css';
356
- * | ^ ^ ^ mapping.sourceOffsets[0]
357
- * | ^ ^ mapping.sourceOffsets[2]
358
- * | ^ mapping.sourceOffsets[1]
382
+ * | ^ ^ ^ mapping.sourceOffsets[1]
383
+ * | ^ ^ mapping.sourceOffsets[2], secondaryMapping.sourceOffsets[1]
384
+ * | ^ mapping.sourceOffsets[0], secondaryMapping.sourceOffsets[0]
359
385
  * |
360
386
  * 2 | @value c_1 as aliased_c_1 from './c.module.css';
361
387
  * | ^ ^ ^ mapping.sourceOffsets[4]
362
- * | ^ ^ mapping.sourceOffsets[3]
363
- * | ^ mapping.sourceOffsets[5]
388
+ * | ^ ^ mapping.sourceOffsets[3], secondaryMapping.sourceOffsets[2]
389
+ * | ^ mapping.sourceOffsets[5], secondaryMapping.sourceOffsets[3]
364
390
  * |
365
391
  *
366
392
  * a.module.css.d.ts:
367
393
  * 1 | declare const styles = {
368
- * 2 | b_1: (await import('./b.module.css')).default.b_1,
369
- * | ^ ^ ^ linkedCodeMapping.generatedOffsets[0]
370
- * | ^ ^ mapping.generatedOffsets[1]
371
- * | ^ mapping.generatedOffsets[0], linkedCodeMapping.sourceOffsets[0]
394
+ * 2 | 'b_1': (await import('./b.module.css')).default['b_1'],
395
+ * | ^^ ^ ^ linkedCodeMapping.generatedOffsets[0]
396
+ * | ^^ ^ mapping.generatedOffsets[1]
397
+ * | ^^ mapping.generatedOffsets[0]
398
+ * | ^ secondaryMapping.generatedOffsets[0], linkedCodeMapping.sourceOffsets[0]
372
399
  * |
373
- * 3 | b_2: (await import('./b.module.css')).default.b_2,
374
- * | ^ ^ linkedCodeMapping.generatedOffsets[1]
375
- * | ^ mapping.generatedOffsets[2], linkedCodeMapping.sourceOffsets[1]
400
+ * 3 | 'b_2': (await import('./b.module.css')).default['b_2'],
401
+ * | ^^ ^ linkedCodeMapping.generatedOffsets[1]
402
+ * | ^^ mapping.generatedOffsets[2]
403
+ * | ^ secondaryMapping.generatedOffsets[1], linkedCodeMapping.sourceOffsets[1]
376
404
  * |
377
- * 4 | aliased_c_1: (await import('./c.module.css')).default.c_1,
378
- * | ^ ^ ^ mapping.generatedOffsets[5], linkedCodeMapping.generatedOffsets[2]
379
- * | ^ ^ mapping.generatedOffsets[4]
380
- * | ^ mapping.generatedOffsets[3], linkedCodeMapping.sourceOffsets[2]
405
+ * 4 | 'aliased_c_1': (await import('./c.module.css')).default['c_1'],
406
+ * | ^^ ^ ^^ mapping.generatedOffsets[5]
407
+ * | ^^ ^ ^ secondaryMapping.generatedOffsets[3], linkedCodeMapping.generatedOffsets[2]
408
+ * | ^^ ^ mapping.generatedOffsets[4]
409
+ * | ^^ mapping.generatedOffsets[3]
410
+ * | ^ secondaryMapping.generatedOffsets[2], linkedCodeMapping.sourceOffsets[2]
381
411
  * |
382
412
  * 5 | };
383
413
  *
@@ -389,37 +419,42 @@ function generateDefaultExportDts(
389
419
  const localName = value.localName ?? value.name;
390
420
  const localLoc = value.localLoc ?? value.loc;
391
421
 
392
- text += ` `;
422
+ text += ` '`;
393
423
  mapping.sourceOffsets.push(localLoc.start.offset);
394
424
  mapping.lengths.push(localName.length);
395
425
  mapping.generatedOffsets.push(text.length);
396
- linkedCodeMapping.sourceOffsets.push(text.length);
397
- linkedCodeMapping.lengths.push(localName.length);
398
- text += `${localName}: (await import(`;
426
+ secondaryMapping.sourceOffsets.push(localLoc.start.offset);
427
+ secondaryMapping.lengths.push(localName.length);
428
+ secondaryMapping.generatedOffsets.push(text.length - 1);
429
+ secondaryMapping.generatedLengths.push(localName.length + 2);
430
+ linkedCodeMapping.sourceOffsets.push(text.length - 1);
431
+ linkedCodeMapping.lengths.push(localName.length + 2);
432
+ text += `${localName}': (await import(`;
399
433
  if (i === 0) {
400
434
  mapping.sourceOffsets.push(tokenImporter.fromLoc.start.offset - 1);
401
435
  mapping.lengths.push(tokenImporter.from.length + 2);
402
436
  mapping.generatedOffsets.push(text.length);
403
437
  }
404
- text += `'${tokenImporter.from}')).default.`;
438
+ text += `'${tokenImporter.from}')).default['`;
405
439
  if ('localName' in value) {
406
440
  mapping.sourceOffsets.push(value.loc.start.offset);
407
441
  mapping.lengths.push(value.name.length);
408
442
  mapping.generatedOffsets.push(text.length);
443
+ secondaryMapping.sourceOffsets.push(value.loc.start.offset);
444
+ secondaryMapping.lengths.push(value.name.length);
445
+ secondaryMapping.generatedOffsets.push(text.length - 1);
446
+ secondaryMapping.generatedLengths.push(value.name.length + 2);
409
447
  }
410
- linkedCodeMapping.generatedOffsets.push(text.length);
411
- linkedCodeMapping.generatedLengths.push(value.name.length);
412
- text += `${value.name},\n`;
448
+ linkedCodeMapping.generatedOffsets.push(text.length - 1);
449
+ linkedCodeMapping.generatedLengths.push(value.name.length + 2);
450
+ text += `${value.name}'],\n`;
413
451
  });
414
452
  }
415
453
  }
416
454
  text += `};\nexport default ${STYLES_EXPORT_NAME};\n`;
417
- return { text, mapping, linkedCodeMapping };
455
+ return { text, mapping, linkedCodeMapping, secondaryMapping };
418
456
  }
419
457
 
420
- function isValidName(name: string, options: GenerateDtsOptions): boolean {
421
- if (!isValidAsJSIdentifier(name)) return false;
422
- if (name === '__proto__') return false;
423
- if (options.namedExports && name === 'default') return false;
424
- return true;
458
+ function isValidTokenName(name: string, options: ValidateTokenNameOptions): boolean {
459
+ return validateTokenName(name, options) === undefined;
425
460
  }
@@ -119,14 +119,24 @@ export function parseRule(rule: Rule): ParseRuleResult {
119
119
  column: rule.source!.start!.column + className.source!.start!.column,
120
120
  offset: rule.source!.start!.offset + className.sourceIndex + 1,
121
121
  };
122
+ /**
123
+ * When there is a selector like `.\31 backslash`, `className.value` becomes `"1backslash"`.
124
+ * In other words, it is the string after escape sequences have been interpreted.
125
+ * However, here we need the raw string as written in the CSS source code.
126
+ * So we use `className.toString()`.
127
+ *
128
+ * The return value of `className.toString()` may contain leading dots and spaces like `" .1backslash"`.
129
+ * Therefore, we remove the leading spaces and dot with a regular expression.
130
+ */
131
+ const rawClassName = className.toString().replace(/^\s*\./u, '');
122
132
  const end = {
123
133
  // The end line is always the same as the start line, as a class selector cannot break in the middle.
124
134
  line: start.line,
125
- column: start.column + className.value.length,
126
- offset: start.offset + className.value.length,
135
+ column: start.column + rawClassName.length,
136
+ offset: start.offset + rawClassName.length,
127
137
  };
128
138
  return {
129
- name: className.value,
139
+ name: rawClassName,
130
140
  loc: { start, end },
131
141
  declarationLoc: { start: rule.source!.start!, end: rule.positionBy({ index: rule.toString().length }) },
132
142
  };
package/src/util.ts CHANGED
@@ -4,24 +4,48 @@ export function isPosixRelativePath(path: string): boolean {
4
4
 
5
5
  const JS_IDENTIFIER_PATTERN = /^[$_\p{ID_Start}][$\u200c\u200d\p{ID_Continue}]*$/u;
6
6
 
7
- export function isValidAsJSIdentifier(name: string): boolean {
8
- return JS_IDENTIFIER_PATTERN.test(name);
7
+ /** The type of token name violation. */
8
+ export type TokenNameViolation =
9
+ | 'invalid-js-identifier' // Invalid as a JavaScript identifier
10
+ | 'proto-not-allowed' // `__proto__` is not allowed
11
+ | 'default-not-allowed' // `default` is not allowed when namedExports is true
12
+ | 'backslash-not-allowed'; // Backslash (`\`) is not allowed
13
+
14
+ export interface ValidateTokenNameOptions {
15
+ namedExports: boolean;
16
+ }
17
+
18
+ /**
19
+ * Validates a token name and returns the violation if any.
20
+ * @param name The token name to validate.
21
+ * @param options The validation options.
22
+ * @returns The violation, or `undefined` if the name is valid.
23
+ */
24
+ export function validateTokenName(name: string, options: ValidateTokenNameOptions): TokenNameViolation | undefined {
25
+ if (name === '__proto__') return 'proto-not-allowed';
26
+ if (options.namedExports) {
27
+ if (name === 'default') return 'default-not-allowed';
28
+ if (!JS_IDENTIFIER_PATTERN.test(name)) return 'invalid-js-identifier';
29
+ } else {
30
+ if (name.includes('\\')) return 'backslash-not-allowed';
31
+ }
32
+ return undefined;
9
33
  }
10
34
 
11
35
  /**
12
36
  * The syntax pattern for consuming tokens imported from CSS Module.
13
- * @example `styles.foo`
37
+ * @example `styles.foo`, `styles['foo']`, `styles["foo"]`
14
38
  */
15
- // TODO(#125): Support `styles['foo']` and `styles["foo"]`
16
39
  // MEMO: The `xxxStyles.foo` format is not supported, because the css module file for current component file is usually imported with `styles`.
17
40
  // It is sufficient to support only the `styles.foo` format.
18
- const TOKEN_CONSUMER_PATTERN = /styles\.([$_\p{ID_Start}][$\u200c\u200d\p{ID_Continue}]*)/gu;
41
+ const TOKEN_CONSUMER_PATTERN =
42
+ /styles(?:\.([$_\p{ID_Start}][$\u200c\u200d\p{ID_Continue}]*)|\['([^']*?)'\]|\["([^"]*?)"\])/gu;
19
43
 
20
44
  export function findUsedTokenNames(componentText: string): Set<string> {
21
45
  const usedClassNames = new Set<string>();
22
- let match;
23
- while ((match = TOKEN_CONSUMER_PATTERN.exec(componentText)) !== null) {
24
- usedClassNames.add(match[1]!);
46
+ for (const match of componentText.matchAll(TOKEN_CONSUMER_PATTERN)) {
47
+ const name = match[1] ?? match[2] ?? match[3];
48
+ if (name) usedClassNames.add(name);
25
49
  }
26
50
  return usedClassNames;
27
51
  }