@css-modules-kit/core 0.3.0 → 0.5.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 (38) hide show
  1. package/dist/checker.d.ts +2 -1
  2. package/dist/checker.d.ts.map +1 -1
  3. package/dist/checker.js +62 -1
  4. package/dist/checker.js.map +1 -1
  5. package/dist/dts-creator.d.ts +7 -2
  6. package/dist/dts-creator.d.ts.map +1 -1
  7. package/dist/dts-creator.js +38 -8
  8. package/dist/dts-creator.js.map +1 -1
  9. package/dist/parser/at-value-parser.d.ts +5 -0
  10. package/dist/parser/at-value-parser.d.ts.map +1 -1
  11. package/dist/parser/at-value-parser.js +9 -1
  12. package/dist/parser/at-value-parser.js.map +1 -1
  13. package/dist/parser/css-module-parser.d.ts.map +1 -1
  14. package/dist/parser/css-module-parser.js +15 -5
  15. package/dist/parser/css-module-parser.js.map +1 -1
  16. package/dist/parser/key-frame-parser.d.ts +27 -0
  17. package/dist/parser/key-frame-parser.d.ts.map +1 -0
  18. package/dist/parser/key-frame-parser.js +58 -0
  19. package/dist/parser/key-frame-parser.js.map +1 -0
  20. package/dist/parser/rule-parser.d.ts +9 -1
  21. package/dist/parser/rule-parser.d.ts.map +1 -1
  22. package/dist/parser/rule-parser.js +4 -17
  23. package/dist/parser/rule-parser.js.map +1 -1
  24. package/dist/type.d.ts +2 -0
  25. package/dist/type.d.ts.map +1 -1
  26. package/dist/util.d.ts +1 -0
  27. package/dist/util.d.ts.map +1 -1
  28. package/dist/util.js +5 -0
  29. package/dist/util.js.map +1 -1
  30. package/package.json +2 -2
  31. package/src/checker.ts +68 -0
  32. package/src/dts-creator.ts +47 -9
  33. package/src/parser/at-value-parser.ts +14 -1
  34. package/src/parser/css-module-parser.ts +16 -5
  35. package/src/parser/key-frame-parser.ts +75 -0
  36. package/src/parser/rule-parser.ts +14 -22
  37. package/src/type.ts +2 -0
  38. package/src/util.ts +6 -0
package/dist/checker.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { CMKConfig } from './config.js';
1
2
  import type { CSSModule, Diagnostic, ExportBuilder, MatchesPattern, Resolver } from './type.js';
2
- export declare function checkCSSModule(cssModule: CSSModule, exportBuilder: ExportBuilder, matchesPattern: MatchesPattern, resolver: Resolver, getCSSModule: (path: string) => CSSModule | undefined): Diagnostic[];
3
+ export declare function checkCSSModule(cssModule: CSSModule, config: CMKConfig, exportBuilder: ExportBuilder, matchesPattern: MatchesPattern, resolver: Resolver, getCSSModule: (path: string) => CSSModule | undefined): Diagnostic[];
3
4
  //# sourceMappingURL=checker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../src/checker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,SAAS,EACT,UAAU,EACV,aAAa,EACb,cAAc,EACd,QAAQ,EAET,MAAM,WAAW,CAAC;AAEnB,wBAAgB,cAAc,CAC5B,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,GACpD,UAAU,EAAE,CAsBd"}
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,aAAa,EAEb,cAAc,EACd,QAAQ,EAET,MAAM,WAAW,CAAC;AAInB,wBAAgB,cAAc,CAC5B,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,SAAS,EACjB,aAAa,EAAE,aAAa,EAC5B,cAAc,EAAE,cAAc,EAC9B,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,GAAG,SAAS,GACpD,UAAU,EAAE,CAuDd"}
package/dist/checker.js CHANGED
@@ -1,8 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.checkCSSModule = checkCSSModule;
4
- function checkCSSModule(cssModule, exportBuilder, matchesPattern, resolver, getCSSModule) {
4
+ const util_js_1 = require("./util.js");
5
+ // eslint-disable-next-line max-params, complexity
6
+ function checkCSSModule(cssModule, config, exportBuilder, matchesPattern, resolver, getCSSModule) {
5
7
  const diagnostics = [];
8
+ for (const token of cssModule.localTokens) {
9
+ // Reject special names as they may break .d.ts files
10
+ if (!(0, util_js_1.isValidAsJSIdentifier)(token.name)) {
11
+ diagnostics.push(createInvalidNameAsJSIdentifiersDiagnostic(cssModule, token.loc));
12
+ }
13
+ if (token.name === '__proto__') {
14
+ diagnostics.push(createProtoIsNotAllowedDiagnostic(cssModule, token.loc));
15
+ }
16
+ if (config.namedExports && token.name === 'default') {
17
+ diagnostics.push(createDefaultIsNotAllowedDiagnostic(cssModule, token.loc));
18
+ }
19
+ }
6
20
  for (const tokenImporter of cssModule.tokenImporters) {
7
21
  const from = resolver(tokenImporter.from, { request: cssModule.fileName });
8
22
  if (!from || !matchesPattern(from))
@@ -18,6 +32,26 @@ function checkCSSModule(cssModule, exportBuilder, matchesPattern, resolver, getC
18
32
  if (!exportRecord.allTokens.includes(value.name)) {
19
33
  diagnostics.push(createModuleHasNoExportedTokenDiagnostic(cssModule, tokenImporter, value));
20
34
  }
35
+ if (!(0, util_js_1.isValidAsJSIdentifier)(value.name)) {
36
+ diagnostics.push(createInvalidNameAsJSIdentifiersDiagnostic(cssModule, value.loc));
37
+ }
38
+ if (value.localName && !(0, util_js_1.isValidAsJSIdentifier)(value.localName)) {
39
+ diagnostics.push(createInvalidNameAsJSIdentifiersDiagnostic(cssModule, value.localLoc));
40
+ }
41
+ if (value.name === '__proto__') {
42
+ diagnostics.push(createProtoIsNotAllowedDiagnostic(cssModule, value.loc));
43
+ }
44
+ if (value.localName === '__proto__') {
45
+ diagnostics.push(createProtoIsNotAllowedDiagnostic(cssModule, value.localLoc));
46
+ }
47
+ if (config.namedExports) {
48
+ if (value.name === 'default') {
49
+ diagnostics.push(createDefaultIsNotAllowedDiagnostic(cssModule, value.loc));
50
+ }
51
+ if (value.localName === 'default') {
52
+ diagnostics.push(createDefaultIsNotAllowedDiagnostic(cssModule, value.localLoc));
53
+ }
54
+ }
21
55
  }
22
56
  }
23
57
  }
@@ -41,4 +75,31 @@ function createModuleHasNoExportedTokenDiagnostic(cssModule, tokenImporter, valu
41
75
  length: value.loc.end.offset - value.loc.start.offset,
42
76
  };
43
77
  }
78
+ function createInvalidNameAsJSIdentifiersDiagnostic(cssModule, loc) {
79
+ return {
80
+ text: `css-modules-kit does not support invalid names as JavaScript identifiers.`,
81
+ category: 'error',
82
+ file: { fileName: cssModule.fileName, text: cssModule.text },
83
+ start: { line: loc.start.line, column: loc.start.column },
84
+ length: loc.end.offset - loc.start.offset,
85
+ };
86
+ }
87
+ function createProtoIsNotAllowedDiagnostic(cssModule, loc) {
88
+ return {
89
+ text: `\`__proto__\` is not allowed as names.`,
90
+ category: 'error',
91
+ file: { fileName: cssModule.fileName, text: cssModule.text },
92
+ start: { line: loc.start.line, column: loc.start.column },
93
+ length: loc.end.offset - loc.start.offset,
94
+ };
95
+ }
96
+ function createDefaultIsNotAllowedDiagnostic(cssModule, loc) {
97
+ return {
98
+ text: `\`default\` is not allowed as names when \`cmkOptions.namedExports\` is set to \`true\`.`,
99
+ category: 'error',
100
+ file: { fileName: cssModule.fileName, text: cssModule.text },
101
+ start: { line: loc.start.line, column: loc.start.column },
102
+ length: loc.end.offset - loc.start.offset,
103
+ };
104
+ }
44
105
  //# sourceMappingURL=checker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checker.js","sourceRoot":"","sources":["../src/checker.ts"],"names":[],"mappings":";;AAWA,wCA4BC;AA5BD,SAAgB,cAAc,CAC5B,SAAoB,EACpB,aAA4B,EAC5B,cAA8B,EAC9B,QAAkB,EAClB,YAAqD;IAErD,MAAM,WAAW,GAAiB,EAAE,CAAC;IAErC,KAAK,MAAM,aAAa,IAAI,SAAS,CAAC,cAAc,EAAE,CAAC;QACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC3E,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;YAAE,SAAS;QAC7C,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,WAAW,CAAC,IAAI,CAAC,kCAAkC,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;YAC/E,SAAS;QACX,CAAC;QAED,IAAI,aAAa,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACnC,MAAM,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACnD,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,MAAM,EAAE,CAAC;gBACzC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;oBACjD,WAAW,CAAC,IAAI,CAAC,wCAAwC,CAAC,SAAS,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC;gBAC9F,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,kCAAkC,CAAC,SAAoB,EAAE,aAA4B;IAC5F,OAAO;QACL,IAAI,EAAE,yBAAyB,aAAa,CAAC,IAAI,GAAG;QACpD,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE;QAC5D,KAAK,EAAE,EAAE,IAAI,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE;QAC7F,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM;KAC9E,CAAC;AACJ,CAAC;AAED,SAAS,wCAAwC,CAC/C,SAAoB,EACpB,aAAmC,EACnC,KAAgC;IAEhC,OAAO;QACL,IAAI,EAAE,WAAW,aAAa,CAAC,IAAI,4BAA4B,KAAK,CAAC,IAAI,IAAI;QAC7E,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE;QAC5D,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE;QACrE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM;KACtD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"checker.js","sourceRoot":"","sources":["../src/checker.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,14 @@
1
1
  import type { CSSModule, MatchesPattern, Resolver } from './type.js';
2
2
  export declare const STYLES_EXPORT_NAME = "styles";
3
- export interface CreateDtsOptions {
3
+ export interface CreateDtsHost {
4
4
  resolver: Resolver;
5
5
  matchesPattern: MatchesPattern;
6
+ }
7
+ export interface CreateDtsOptions {
6
8
  namedExports: boolean;
9
+ prioritizeNamedImports: boolean;
10
+ /** Generate .d.ts for ts-plugin */
11
+ forTsPlugin: boolean;
7
12
  }
8
13
  interface CodeMapping {
9
14
  /** The source offsets of the tokens in the *.module.css file. */
@@ -32,6 +37,6 @@ interface CreateDtsResult {
32
37
  /**
33
38
  * Create a d.ts file.
34
39
  */
35
- export declare function createDts(cssModules: CSSModule, options: CreateDtsOptions): CreateDtsResult;
40
+ export declare function createDts(cssModules: CSSModule, host: CreateDtsHost, options: CreateDtsOptions): CreateDtsResult;
36
41
  export {};
37
42
  //# sourceMappingURL=dts-creator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dts-creator.d.ts","sourceRoot":"","sources":["../src/dts-creator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAwB,MAAM,WAAW,CAAC;AAE3F,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,OAAO,CAAC;CACvB;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,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,WAAW,CAAC;IACrB,iBAAiB,EAAE,iBAAiB,CAAC;CACtC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAW3F"}
1
+ {"version":3,"file":"dts-creator.d.ts","sourceRoot":"","sources":["../src/dts-creator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,EAAwB,MAAM,WAAW,CAAC;AAG3F,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,QAAQ,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;CAChC;AAED,MAAM,WAAW,gBAAgB;IAC/B,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,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,WAAW,CAAC;IACrB,iBAAiB,EAAE,iBAAiB,CAAC;CACtC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,UAAU,EAAE,SAAS,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,gBAAgB,GAAG,eAAe,CA8BhH"}
@@ -2,21 +2,38 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.STYLES_EXPORT_NAME = void 0;
4
4
  exports.createDts = createDts;
5
+ const util_js_1 = require("./util.js");
5
6
  exports.STYLES_EXPORT_NAME = 'styles';
6
7
  /**
7
8
  * Create a d.ts file.
8
9
  */
9
- function createDts(cssModules, options) {
10
- // Filter external files
11
- const tokenImporters = cssModules.tokenImporters.filter((tokenImporter) => {
12
- const resolved = options.resolver(tokenImporter.from, { request: cssModules.fileName });
13
- return resolved !== undefined && options.matchesPattern(resolved);
10
+ function createDts(cssModules, host, options) {
11
+ // Exclude invalid tokens
12
+ const localTokens = cssModules.localTokens.filter((token) => isValidName(token.name, options));
13
+ const tokenImporters = cssModules.tokenImporters
14
+ // Exclude invalid imported tokens
15
+ .map((tokenImporter) => {
16
+ if (tokenImporter.type === 'value') {
17
+ return {
18
+ ...tokenImporter,
19
+ values: tokenImporter.values.filter((value) => isValidName(value.name, options) &&
20
+ (value.localName === undefined || isValidName(value.localName, options))),
21
+ };
22
+ }
23
+ else {
24
+ return tokenImporter;
25
+ }
26
+ })
27
+ // Exclude token importers for external files
28
+ .filter((tokenImporter) => {
29
+ const resolved = host.resolver(tokenImporter.from, { request: cssModules.fileName });
30
+ return resolved !== undefined && host.matchesPattern(resolved);
14
31
  });
15
32
  if (options.namedExports) {
16
- return createNamedExportsDts(cssModules.localTokens, tokenImporters);
33
+ return createNamedExportsDts(localTokens, tokenImporters, options);
17
34
  }
18
35
  else {
19
- return createDefaultExportDts(cssModules.localTokens, tokenImporters);
36
+ return createDefaultExportDts(localTokens, tokenImporters);
20
37
  }
21
38
  }
22
39
  /**
@@ -41,7 +58,7 @@ function createDts(cssModules, options) {
41
58
  * } from './b.module.css';
42
59
  * ```
43
60
  */
44
- function createNamedExportsDts(localTokens, tokenImporters) {
61
+ function createNamedExportsDts(localTokens, tokenImporters, options) {
45
62
  const mapping = { sourceOffsets: [], lengths: [], generatedOffsets: [] };
46
63
  const linkedCodeMapping = {
47
64
  sourceOffsets: [],
@@ -105,6 +122,10 @@ function createNamedExportsDts(localTokens, tokenImporters) {
105
122
  text += `'${tokenImporter.from}';\n`;
106
123
  }
107
124
  }
125
+ if (options.forTsPlugin && !options.prioritizeNamedImports) {
126
+ // Export `styles` to appear in code completion suggestions
127
+ text += 'declare const styles: {};\nexport default styles;\n';
128
+ }
108
129
  return { text, mapping, linkedCodeMapping };
109
130
  }
110
131
  /**
@@ -189,4 +210,13 @@ function createDefaultExportDts(localTokens, tokenImporters) {
189
210
  text += `};\nexport default ${exports.STYLES_EXPORT_NAME};\n`;
190
211
  return { text, mapping, linkedCodeMapping };
191
212
  }
213
+ function isValidName(name, options) {
214
+ if (!(0, util_js_1.isValidAsJSIdentifier)(name))
215
+ return false;
216
+ if (name === '__proto__')
217
+ return false;
218
+ if (options.namedExports && name === 'default')
219
+ return false;
220
+ return true;
221
+ }
192
222
  //# sourceMappingURL=dts-creator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"dts-creator.js","sourceRoot":"","sources":["../src/dts-creator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dts-creator.js","sourceRoot":"","sources":["../src/dts-creator.ts"],"names":[],"mappings":";;;AAgDA,8BA8BC;AA7ED,uCAAkD;AAErC,QAAA,kBAAkB,GAAG,QAAQ,CAAC;AA0C3C;;GAEG;AACH,SAAgB,SAAS,CAAC,UAAqB,EAAE,IAAmB,EAAE,OAAyB;IAC7F,yBAAyB;IACzB,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAC/F,MAAM,cAAc,GAAG,UAAU,CAAC,cAAc;QAC9C,kCAAkC;SACjC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE;QACrB,IAAI,aAAa,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACnC,OAAO;gBACL,GAAG,aAAa;gBAChB,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,CACjC,CAAC,KAAK,EAAE,EAAE,CACR,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC;oBAChC,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAC3E;aACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,aAAa,CAAC;QACvB,CAAC;IACH,CAAC,CAAC;QACF,6CAA6C;SAC5C,MAAM,CAAC,CAAC,aAAa,EAAE,EAAE;QACxB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC;QACrF,OAAO,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;IAEL,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,OAAO,qBAAqB,CAAC,WAAW,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;IACrE,CAAC;SAAM,CAAC;QACN,OAAO,sBAAsB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,SAAS,qBAAqB,CAC5B,WAAoB,EACpB,cAA+B,EAC/B,OAAyB;IAEzB,MAAM,OAAO,GAAgB,EAAE,aAAa,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC;IACtF,MAAM,iBAAiB,GAAsB;QAC3C,aAAa,EAAE,EAAE;QACjB,OAAO,EAAE,EAAE;QACX,gBAAgB,EAAE,EAAE;QACpB,gBAAgB,EAAE,EAAE;KACrB,CAAC;IAEF,qHAAqH;IACrH,0HAA0H;IAC1H,EAAE;IACF,8GAA8G;IAC9G,2EAA2E;IAC3E,IAAI,IAAI,GAAG,kBAAkB,CAAC;IAE9B,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,IAAI,IAAI,aAAa,CAAC;QACtB,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,aAAa,CAAC;IACrC,CAAC;IACD,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;QAC3C,IAAI,aAAa,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpC,IAAI,IAAI,gBAAgB,CAAC;YACzB,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,IAAI,IAAI,aAAa,CAAC,IAAI,MAAM,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,IAAI,IAAI,YAAY,CAAC;YACrB,wCAAwC;YACxC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gBACrC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC;gBAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC;gBAC7C,IAAI,IAAI,IAAI,CAAC;gBACb,IAAI,WAAW,IAAI,KAAK,EAAE,CAAC;oBACzB,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBACnD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACxC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC3C,iBAAiB,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACrD,iBAAiB,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC3D,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,MAAM,CAAC;oBAC5B,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBAClD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;oBACvC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC3C,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAClD,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;oBACjD,IAAI,IAAI,GAAG,SAAS,KAAK,CAAC;gBAC5B,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;oBACnD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACxC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC3C,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC;gBAC7B,CAAC;YACH,CAAC,CAAC,CAAC;YACH,IAAI,IAAI,SAAS,CAAC;YAClB,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,IAAI,IAAI,aAAa,CAAC,IAAI,MAAM,CAAC;QACvC,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,sBAAsB,EAAE,CAAC;QAC3D,2DAA2D;QAC3D,IAAI,IAAI,qDAAqD,CAAC;IAChE,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAC9C,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,SAAS,sBAAsB,CAC7B,WAAoB,EACpB,cAA+B;IAE/B,MAAM,OAAO,GAAgB,EAAE,aAAa,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,gBAAgB,EAAE,EAAE,EAAE,CAAC;IACtF,MAAM,iBAAiB,GAAsB;QAC3C,aAAa,EAAE,EAAE;QACjB,OAAO,EAAE,EAAE;QACX,gBAAgB,EAAE,EAAE;QACpB,gBAAgB,EAAE,EAAE;KACrB,CAAC;IAEF,qHAAqH;IACrH,0HAA0H;IAC1H,EAAE;IACF,8GAA8G;IAC9G,2EAA2E;IAC3E,IAAI,IAAI,GAAG,iCAAiC,0BAAkB,QAAQ,CAAC;IAEvE,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;QAChC,IAAI,IAAI,IAAI,CAAC;QACb,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACnD,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,4BAA4B,CAAC;IACpD,CAAC;IACD,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;QAC3C,IAAI,aAAa,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACpC,IAAI,IAAI,qBAAqB,CAAC;YAC9B,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACnE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,IAAI,IAAI,aAAa,CAAC,IAAI,gBAAgB,CAAC;QACjD,CAAC;aAAM,CAAC;YACN,wCAAwC;YACxC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;gBACxC,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,IAAI,CAAC;gBAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,GAAG,CAAC;gBAE7C,IAAI,IAAI,IAAI,CAAC;gBACb,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBAClD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACvC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC3C,iBAAiB,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAClD,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBACjD,IAAI,IAAI,GAAG,SAAS,kBAAkB,CAAC;gBACvC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBACZ,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACnE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;oBACpD,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC7C,CAAC;gBACD,IAAI,IAAI,IAAI,aAAa,CAAC,IAAI,cAAc,CAAC;gBAC7C,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;gBACnD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACxC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC3C,iBAAiB,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrD,iBAAiB,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC3D,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,KAAK,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,IAAI,IAAI,sBAAsB,0BAAkB,KAAK,CAAC;IACtD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC;AAC9C,CAAC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,OAAyB;IAC1D,IAAI,CAAC,IAAA,+BAAqB,EAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,KAAK,CAAC;IACvC,IAAI,OAAO,CAAC,YAAY,IAAI,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC7D,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -4,6 +4,11 @@ interface ValueDeclaration {
4
4
  type: 'valueDeclaration';
5
5
  name: string;
6
6
  loc: Location;
7
+ /**
8
+ * NOTE: The `declarationLoc` for value declaration does not include the trailing semicolon.
9
+ * @example `@value white: #fff` has `declarationLoc` as `{ start: { line: 1, column: 1, offset: 0 }, end: { line: 1, column: 19, offset: 18 } }`.
10
+ */
11
+ declarationLoc: Location;
7
12
  }
8
13
  interface ValueImportDeclaration {
9
14
  type: 'valueImportDeclaration';
@@ -1 +1 @@
1
- {"version":3,"file":"at-value-parser.d.ts","sourceRoot":"","sources":["../../src/parser/at-value-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,EAAsB,8BAA8B,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE/F,UAAU,gBAAgB;IACxB,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IAEb,GAAG,EAAE,QAAQ,CAAC;CACf;AAED,UAAU,sBAAsB;IAC9B,IAAI,EAAE,wBAAwB,CAAC;IAC/B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,QAAQ,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC;KACrB,EAAE,CAAC;IACJ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,QAAQ,CAAC;CACnB;AAED,KAAK,aAAa,GAAG,gBAAgB,GAAG,sBAAsB,CAAC;AAE/D,UAAU,kBAAkB;IAC1B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,WAAW,EAAE,8BAA8B,EAAE,CAAC;CAC/C;AAMD;;;;;;;;;;;;;;;;GAgBG;AAGH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,CAgHhE"}
1
+ {"version":3,"file":"at-value-parser.d.ts","sourceRoot":"","sources":["../../src/parser/at-value-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,EAAsB,8BAA8B,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE/F,UAAU,gBAAgB;IACxB,IAAI,EAAE,kBAAkB,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IAEb,GAAG,EAAE,QAAQ,CAAC;IACd;;;OAGG;IACH,cAAc,EAAE,QAAQ,CAAC;CAC1B;AAED,UAAU,sBAAsB;IAC9B,IAAI,EAAE,wBAAwB,CAAC;IAC/B,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,GAAG,EAAE,QAAQ,CAAC;QACd,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC;KACrB,EAAE,CAAC;IACJ,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,QAAQ,CAAC;CACnB;AAED,KAAK,aAAa,GAAG,gBAAgB,GAAG,sBAAsB,CAAC;AAE/D,UAAU,kBAAkB;IAC1B,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,WAAW,EAAE,8BAA8B,EAAE,CAAC;CAC/C;AAMD;;;;;;;;;;;;;;;;GAgBG;AAGH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,kBAAkB,CAwHhE"}
@@ -119,7 +119,15 @@ function parseAtValue(atValue) {
119
119
  column: start.column + name.length,
120
120
  offset: start.offset + name.length,
121
121
  };
122
- const parsedAtValue = { type: 'valueDeclaration', name, loc: { start, end } };
122
+ const parsedAtValue = {
123
+ type: 'valueDeclaration',
124
+ name,
125
+ loc: { start, end },
126
+ declarationLoc: {
127
+ start: atValue.source.start,
128
+ end: atValue.positionBy({ index: atValue.toString().length }),
129
+ },
130
+ };
123
131
  return { atValue: parsedAtValue, diagnostics };
124
132
  }
125
133
  diagnostics.push({
@@ -1 +1 @@
1
- {"version":3,"file":"at-value-parser.js","sourceRoot":"","sources":["../../src/parser/at-value-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"at-value-parser.js","sourceRoot":"","sources":["../../src/parser/at-value-parser.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"css-module-parser.d.ts","sourceRoot":"","sources":["../../src/parser/css-module-parser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,SAAS,EAET,sBAAsB,EAGvB,MAAM,YAAY,CAAC;AAyDpB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,sBAAsB,EAAE,CAAC;CACvC;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,qBAAqB,GAAG,oBAAoB,CAiC5G"}
1
+ {"version":3,"file":"css-module-parser.d.ts","sourceRoot":"","sources":["../../src/parser/css-module-parser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,SAAS,EAET,sBAAsB,EAGvB,MAAM,YAAY,CAAC;AAqEpB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,EAAE,sBAAsB,EAAE,CAAC;CACvC;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,qBAAqB,GAAG,oBAAoB,CAgC5G"}
@@ -8,6 +8,7 @@ const postcss_1 = require("postcss");
8
8
  const postcss_safe_parser_1 = __importDefault(require("postcss-safe-parser"));
9
9
  const at_import_parser_js_1 = require("./at-import-parser.js");
10
10
  const at_value_parser_js_1 = require("./at-value-parser.js");
11
+ const key_frame_parser_js_1 = require("./key-frame-parser.js");
11
12
  const rule_parser_js_1 = require("./rule-parser.js");
12
13
  function isAtRuleNode(node) {
13
14
  return node.type === 'atrule';
@@ -18,6 +19,9 @@ function isAtImportNode(node) {
18
19
  function isAtValueNode(node) {
19
20
  return isAtRuleNode(node) && node.name === 'value';
20
21
  }
22
+ function isAtKeyframesNode(node) {
23
+ return isAtRuleNode(node) && node.name === 'keyframes';
24
+ }
21
25
  function isRuleNode(node) {
22
26
  return node.type === 'rule';
23
27
  }
@@ -41,12 +45,19 @@ function collectTokens(ast) {
41
45
  if (atValue === undefined)
42
46
  return;
43
47
  if (atValue.type === 'valueDeclaration') {
44
- localTokens.push({ name: atValue.name, loc: atValue.loc });
48
+ localTokens.push({ name: atValue.name, loc: atValue.loc, declarationLoc: atValue.declarationLoc });
45
49
  }
46
50
  else if (atValue.type === 'valueImportDeclaration') {
47
51
  tokenImporters.push({ ...atValue, type: 'value' });
48
52
  }
49
53
  }
54
+ else if (isAtKeyframesNode(node)) {
55
+ const { keyframe, diagnostics } = (0, key_frame_parser_js_1.parseAtKeyframes)(node);
56
+ allDiagnostics.push(...diagnostics);
57
+ if (keyframe) {
58
+ localTokens.push({ name: keyframe.name, loc: keyframe.loc, declarationLoc: keyframe.declarationLoc });
59
+ }
60
+ }
50
61
  else if (isRuleNode(node)) {
51
62
  const { classSelectors, diagnostics } = (0, rule_parser_js_1.parseRule)(node);
52
63
  allDiagnostics.push(...diagnostics);
@@ -66,15 +77,14 @@ function parseCSSModule(text, { fileName, safe }) {
66
77
  }
67
78
  catch (e) {
68
79
  if (e instanceof postcss_1.CssSyntaxError) {
69
- const start = { line: e.line ?? 1, column: e.column ?? 1 };
80
+ const { line, column, endColumn } = e.input;
70
81
  return {
71
82
  cssModule: { fileName, text, localTokens: [], tokenImporters: [] },
72
83
  diagnostics: [
73
84
  {
74
85
  file: diagnosticSourceFile,
75
- start,
76
- // TODO: Assign correct length (e.g. `e.endOffset - e.offset`)
77
- length: 1,
86
+ start: { line, column },
87
+ length: endColumn !== undefined ? endColumn - column : 1,
78
88
  text: e.reason,
79
89
  category: 'error',
80
90
  },
@@ -1 +1 @@
1
- {"version":3,"file":"css-module-parser.js","sourceRoot":"","sources":["../../src/parser/css-module-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"css-module-parser.js","sourceRoot":"","sources":["../../src/parser/css-module-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { AtRule } from 'postcss';
2
+ import type { DiagnosticWithDetachedLocation, Location } from '../type.js';
3
+ interface KeyframeDeclaration {
4
+ name: string;
5
+ loc: Location;
6
+ /**
7
+ * The location of the declaration of the keyframe in the source file.
8
+ * @example `@keyframes fadeIn { ... }` has `declarationLoc` as the entire at-rule location.
9
+ */
10
+ declarationLoc: Location;
11
+ }
12
+ interface ParseAtKeyframesResult {
13
+ keyframe?: KeyframeDeclaration;
14
+ diagnostics: DiagnosticWithDetachedLocation[];
15
+ }
16
+ /**
17
+ * Parse the `@keyframes` rule to extract keyframe name.
18
+ *
19
+ * CSS Modules treat keyframes as local tokens by default, similar to class names.
20
+ * This parser extracts the keyframe name and its location for type generation.
21
+ *
22
+ * @param atKeyframes The @keyframes at-rule to parse
23
+ * @returns Parsed keyframe information and diagnostics
24
+ */
25
+ export declare function parseAtKeyframes(atKeyframes: AtRule): ParseAtKeyframesResult;
26
+ export {};
27
+ //# sourceMappingURL=key-frame-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-frame-parser.d.ts","sourceRoot":"","sources":["../../src/parser/key-frame-parser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,KAAK,EAAE,8BAA8B,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3E,UAAU,mBAAmB;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,QAAQ,CAAC;IACd;;;OAGG;IACH,cAAc,EAAE,QAAQ,CAAC;CAC1B;AAED,UAAU,sBAAsB;IAC9B,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,WAAW,EAAE,8BAA8B,EAAE,CAAC;CAC/C;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,sBAAsB,CA+C5E"}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.parseAtKeyframes = parseAtKeyframes;
4
+ /**
5
+ * Parse the `@keyframes` rule to extract keyframe name.
6
+ *
7
+ * CSS Modules treat keyframes as local tokens by default, similar to class names.
8
+ * This parser extracts the keyframe name and its location for type generation.
9
+ *
10
+ * @param atKeyframes The @keyframes at-rule to parse
11
+ * @returns Parsed keyframe information and diagnostics
12
+ */
13
+ function parseAtKeyframes(atKeyframes) {
14
+ // Extract keyframe name from params
15
+ // e.g., "@keyframes fadeIn { ... }" -> keyframeName = "fadeIn"
16
+ // e.g., "@keyframes :local(slideOut) { ... }" -> keyframeName = ":local(slideOut)"
17
+ const keyframeName = atKeyframes.params;
18
+ // Ignore empty keyframe names
19
+ if (keyframeName === '') {
20
+ return { diagnostics: [] };
21
+ }
22
+ const keyframeNameLoc = {
23
+ start: atKeyframes.positionBy({ index: `@keyframes${atKeyframes.raws.afterName}`.length }),
24
+ end: atKeyframes.positionBy({ index: `@keyframes${atKeyframes.raws.afterName}${keyframeName}`.length }),
25
+ };
26
+ // Handle :local() and :global() wrappers
27
+ if (keyframeName.startsWith(':local(') && keyframeName.endsWith(')')) {
28
+ // For simplicity of implementation, css-modules-kit does not support `:local(...)`.
29
+ return {
30
+ diagnostics: [
31
+ {
32
+ category: 'error',
33
+ start: keyframeNameLoc.start,
34
+ length: keyframeName.length,
35
+ text: `css-modules-kit does not support \`:local()\` wrapper for keyframes. Use \`@keyframes ${keyframeName} {...}\` instead.`,
36
+ },
37
+ ],
38
+ };
39
+ }
40
+ else if (keyframeName.startsWith(':global(') && keyframeName.endsWith(')')) {
41
+ // Ignore keyframes wrapped in :global()
42
+ return { diagnostics: [] };
43
+ }
44
+ return {
45
+ keyframe: {
46
+ name: keyframeName,
47
+ loc: keyframeNameLoc,
48
+ declarationLoc: {
49
+ start: atKeyframes.source.start,
50
+ end: atKeyframes.positionBy({
51
+ index: atKeyframes.toString().length,
52
+ }),
53
+ },
54
+ },
55
+ diagnostics: [],
56
+ };
57
+ }
58
+ //# sourceMappingURL=key-frame-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"key-frame-parser.js","sourceRoot":"","sources":["../../src/parser/key-frame-parser.ts"],"names":[],"mappings":";;AA2BA,4CA+CC;AAxDD;;;;;;;;GAQG;AACH,SAAgB,gBAAgB,CAAC,WAAmB;IAClD,oCAAoC;IACpC,+DAA+D;IAC/D,mFAAmF;IACnF,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC;IAExC,8BAA8B;IAC9B,IAAI,YAAY,KAAK,EAAE,EAAE,CAAC;QACxB,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,eAAe,GAAG;QACtB,KAAK,EAAE,WAAW,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,aAAa,WAAW,CAAC,IAAI,CAAC,SAAU,EAAE,CAAC,MAAM,EAAE,CAAC;QAC3F,GAAG,EAAE,WAAW,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,aAAa,WAAW,CAAC,IAAI,CAAC,SAAU,GAAG,YAAY,EAAE,CAAC,MAAM,EAAE,CAAC;KACzG,CAAC;IAEF,yCAAyC;IACzC,IAAI,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACrE,oFAAoF;QACpF,OAAO;YACL,WAAW,EAAE;gBACX;oBACE,QAAQ,EAAE,OAAO;oBACjB,KAAK,EAAE,eAAe,CAAC,KAAK;oBAC5B,MAAM,EAAE,YAAY,CAAC,MAAM;oBAC3B,IAAI,EAAE,yFAAyF,YAAY,mBAAmB;iBAC/H;aACF;SACF,CAAC;IACJ,CAAC;SAAM,IAAI,YAAY,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7E,wCAAwC;QACxC,OAAO,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC;IAC7B,CAAC;IAED,OAAO;QACL,QAAQ,EAAE;YACR,IAAI,EAAE,YAAY;YAClB,GAAG,EAAE,eAAe;YACpB,cAAc,EAAE;gBACd,KAAK,EAAE,WAAW,CAAC,MAAO,CAAC,KAAM;gBACjC,GAAG,EAAE,WAAW,CAAC,UAAU,CAAC;oBAC1B,KAAK,EAAE,WAAW,CAAC,QAAQ,EAAE,CAAC,MAAM;iBACrC,CAAC;aACH;SACF;QACD,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC"}
@@ -9,8 +9,16 @@ export { calcDiagnosticsLocationForSelectorParserNode as calcDiagnosticsLocation
9
9
  interface ClassSelector {
10
10
  /** The class name. It does not include the leading dot. */
11
11
  name: string;
12
- /** The location of the class selector. */
12
+ /**
13
+ * The location of the class selector.
14
+ * @example `.a {}` has `loc` as `{ start: { line: 1, column: 2, offset: 1 }, end: { line: 1, column: 3, offset: 2 } }`.
15
+ */
13
16
  loc: Location;
17
+ /**
18
+ * The location of the declaration of the token in the source file.
19
+ * @example `.a {}` has `declarationLoc` as `{ start: { line: 1, column: 1, offset: 0 }, end: { line: 1, column: 6, offset: 5 } }`.
20
+ */
21
+ declarationLoc: Location;
14
22
  }
15
23
  interface ParseRuleResult {
16
24
  classSelectors: ClassSelector[];
@@ -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;AA2F/G,UAAU,aAAa;IACrB,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,GAAG,EAAE,QAAQ,CAAC;CACf;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,CAwBrD"}
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"}
@@ -20,20 +20,6 @@ function flatCollectResults(results) {
20
20
  }
21
21
  return { classNames, diagnostics };
22
22
  }
23
- const JS_IDENTIFIER_PATTERN = /^[$_\p{ID_Start}][$\u200c\u200d\p{ID_Continue}]*$/u;
24
- function convertClassNameToCollectResult(rule, node) {
25
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- `raws` property is defined if `node` has escaped characters.
26
- const name = node.raws?.value ?? node.value;
27
- if (!JS_IDENTIFIER_PATTERN.test(name)) {
28
- const diagnostic = {
29
- ...calcDiagnosticsLocationForSelectorParserNode(rule, node),
30
- text: `\`${name}\` is not allowed because it is not a valid JavaScript identifier.`,
31
- category: 'error',
32
- };
33
- return { classNames: [], diagnostics: [diagnostic] };
34
- }
35
- return { classNames: [node], diagnostics: [] };
36
- }
37
23
  /**
38
24
  * Collect local class names from the AST.
39
25
  * This function is based on the behavior of postcss-modules-local-by-default.
@@ -50,14 +36,14 @@ function collectLocalClassNames(rule, root) {
50
36
  // If the class name is wrapped by `:local(...)` or `:global(...)`,
51
37
  // the scope is determined by the wrapper.
52
38
  case ':local(...)':
53
- return convertClassNameToCollectResult(rule, node);
39
+ return { classNames: [node], diagnostics: [] };
54
40
  case ':global(...)':
55
41
  return { classNames: [], diagnostics: [] };
56
42
  // If the class name is not wrapped by `:local(...)` or `:global(...)`,
57
43
  // the scope is determined by the mode.
58
44
  default:
59
45
  // Mode is customizable in css-loader, but we don't support it for simplicity. We fix the mode to 'local'.
60
- return convertClassNameToCollectResult(rule, node);
46
+ return { classNames: [node], diagnostics: [] };
61
47
  }
62
48
  }
63
49
  else if (postcss_selector_parser_1.default.isPseudo(node) && (node.value === ':local' || node.value === ':global')) {
@@ -66,7 +52,7 @@ function collectLocalClassNames(rule, root) {
66
52
  // We don't support `:local` and `:global` (without any arguments) because they are complex.
67
53
  const diagnostic = {
68
54
  ...calcDiagnosticsLocationForSelectorParserNode(rule, node),
69
- text: `\`${node.value}\` is not supported. Use \`${node.value}(...)\` instead.`,
55
+ text: `css-modules-kit does not support \`${node.value}\`. Use \`${node.value}(...)\` instead.`,
70
56
  category: 'error',
71
57
  };
72
58
  return { classNames: [], diagnostics: [diagnostic] };
@@ -114,6 +100,7 @@ function parseRule(rule) {
114
100
  return {
115
101
  name: className.value,
116
102
  loc: { start, end },
103
+ declarationLoc: { start: rule.source.start, end: rule.positionBy({ index: rule.toString().length }) },
117
104
  };
118
105
  });
119
106
  return { classSelectors, diagnostics: result.diagnostics };
@@ -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/type.d.ts CHANGED
@@ -32,6 +32,8 @@ export interface Token {
32
32
  name: string;
33
33
  /** The location of the token in the source file. */
34
34
  loc: Location;
35
+ /** The location of the declaration of the token in the source file. */
36
+ declarationLoc?: Location;
35
37
  }
36
38
  /**
37
39
  * A token importer using `@import '...'`.
@@ -1 +1 @@
1
- {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"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"}
package/dist/util.d.ts CHANGED
@@ -1,3 +1,4 @@
1
1
  export declare function isPosixRelativePath(path: string): boolean;
2
+ export declare function isValidAsJSIdentifier(name: string): boolean;
2
3
  export declare function findUsedTokenNames(componentText: string): Set<string>;
3
4
  //# 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;AAWD,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAOrE"}
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"}
package/dist/util.js CHANGED
@@ -1,10 +1,15 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.isPosixRelativePath = isPosixRelativePath;
4
+ exports.isValidAsJSIdentifier = isValidAsJSIdentifier;
4
5
  exports.findUsedTokenNames = findUsedTokenNames;
5
6
  function isPosixRelativePath(path) {
6
7
  return path.startsWith(`./`) || path.startsWith(`../`);
7
8
  }
9
+ const JS_IDENTIFIER_PATTERN = /^[$_\p{ID_Start}][$\u200c\u200d\p{ID_Continue}]*$/u;
10
+ function isValidAsJSIdentifier(name) {
11
+ return JS_IDENTIFIER_PATTERN.test(name);
12
+ }
8
13
  /**
9
14
  * The syntax pattern for consuming tokens imported from CSS Module.
10
15
  * @example `styles.foo`
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;AAAA,kDAEC;AAWD,gDAOC;AApBD,SAAgB,mBAAmB,CAAC,IAAY;IAC9C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED;;;GAGG;AACH,0DAA0D;AAC1D,+IAA+I;AAC/I,kEAAkE;AAClE,MAAM,sBAAsB,GAAG,6DAA6D,CAAC;AAE7F,SAAgB,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"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;AAAA,kDAEC;AAID,sDAEC;AAWD,gDAOC;AA1BD,SAAgB,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,SAAgB,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,SAAgB,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"}
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.3.0",
4
+ "version": "0.5.0",
5
5
  "type": "commonjs",
6
6
  "sideEffects": false,
7
7
  "repository": {
@@ -43,7 +43,7 @@
43
43
  "dist"
44
44
  ],
45
45
  "dependencies": {
46
- "postcss": "^8.4.49",
46
+ "postcss": "^8.5.5",
47
47
  "postcss-safe-parser": "^7.0.1",
48
48
  "postcss-selector-parser": "^7.1.0",
49
49
  "postcss-value-parser": "^4.2.0"
package/src/checker.ts CHANGED
@@ -1,16 +1,21 @@
1
+ import type { CMKConfig } from './config.js';
1
2
  import type {
2
3
  AtValueTokenImporter,
3
4
  AtValueTokenImporterValue,
4
5
  CSSModule,
5
6
  Diagnostic,
6
7
  ExportBuilder,
8
+ Location,
7
9
  MatchesPattern,
8
10
  Resolver,
9
11
  TokenImporter,
10
12
  } from './type.js';
13
+ import { isValidAsJSIdentifier } from './util.js';
11
14
 
15
+ // eslint-disable-next-line max-params, complexity
12
16
  export function checkCSSModule(
13
17
  cssModule: CSSModule,
18
+ config: CMKConfig,
14
19
  exportBuilder: ExportBuilder,
15
20
  matchesPattern: MatchesPattern,
16
21
  resolver: Resolver,
@@ -18,6 +23,19 @@ export function checkCSSModule(
18
23
  ): Diagnostic[] {
19
24
  const diagnostics: Diagnostic[] = [];
20
25
 
26
+ for (const token of cssModule.localTokens) {
27
+ // Reject special names as they may break .d.ts files
28
+ if (!isValidAsJSIdentifier(token.name)) {
29
+ diagnostics.push(createInvalidNameAsJSIdentifiersDiagnostic(cssModule, token.loc));
30
+ }
31
+ if (token.name === '__proto__') {
32
+ diagnostics.push(createProtoIsNotAllowedDiagnostic(cssModule, token.loc));
33
+ }
34
+ if (config.namedExports && token.name === 'default') {
35
+ diagnostics.push(createDefaultIsNotAllowedDiagnostic(cssModule, token.loc));
36
+ }
37
+ }
38
+
21
39
  for (const tokenImporter of cssModule.tokenImporters) {
22
40
  const from = resolver(tokenImporter.from, { request: cssModule.fileName });
23
41
  if (!from || !matchesPattern(from)) continue;
@@ -33,6 +51,26 @@ export function checkCSSModule(
33
51
  if (!exportRecord.allTokens.includes(value.name)) {
34
52
  diagnostics.push(createModuleHasNoExportedTokenDiagnostic(cssModule, tokenImporter, value));
35
53
  }
54
+ if (!isValidAsJSIdentifier(value.name)) {
55
+ diagnostics.push(createInvalidNameAsJSIdentifiersDiagnostic(cssModule, value.loc));
56
+ }
57
+ if (value.localName && !isValidAsJSIdentifier(value.localName)) {
58
+ diagnostics.push(createInvalidNameAsJSIdentifiersDiagnostic(cssModule, value.localLoc!));
59
+ }
60
+ if (value.name === '__proto__') {
61
+ diagnostics.push(createProtoIsNotAllowedDiagnostic(cssModule, value.loc));
62
+ }
63
+ if (value.localName === '__proto__') {
64
+ diagnostics.push(createProtoIsNotAllowedDiagnostic(cssModule, value.localLoc!));
65
+ }
66
+ if (config.namedExports) {
67
+ if (value.name === 'default') {
68
+ diagnostics.push(createDefaultIsNotAllowedDiagnostic(cssModule, value.loc));
69
+ }
70
+ if (value.localName === 'default') {
71
+ diagnostics.push(createDefaultIsNotAllowedDiagnostic(cssModule, value.localLoc!));
72
+ }
73
+ }
36
74
  }
37
75
  }
38
76
  }
@@ -62,3 +100,33 @@ function createModuleHasNoExportedTokenDiagnostic(
62
100
  length: value.loc.end.offset - value.loc.start.offset,
63
101
  };
64
102
  }
103
+
104
+ function createInvalidNameAsJSIdentifiersDiagnostic(cssModule: CSSModule, loc: Location): Diagnostic {
105
+ return {
106
+ text: `css-modules-kit does not support invalid names as JavaScript identifiers.`,
107
+ category: 'error',
108
+ file: { fileName: cssModule.fileName, text: cssModule.text },
109
+ start: { line: loc.start.line, column: loc.start.column },
110
+ length: loc.end.offset - loc.start.offset,
111
+ };
112
+ }
113
+
114
+ function createProtoIsNotAllowedDiagnostic(cssModule: CSSModule, loc: Location): Diagnostic {
115
+ return {
116
+ text: `\`__proto__\` is not allowed as names.`,
117
+ category: 'error',
118
+ file: { fileName: cssModule.fileName, text: cssModule.text },
119
+ start: { line: loc.start.line, column: loc.start.column },
120
+ length: loc.end.offset - loc.start.offset,
121
+ };
122
+ }
123
+
124
+ function createDefaultIsNotAllowedDiagnostic(cssModule: CSSModule, loc: Location): Diagnostic {
125
+ return {
126
+ text: `\`default\` is not allowed as names when \`cmkOptions.namedExports\` is set to \`true\`.`,
127
+ category: 'error',
128
+ file: { fileName: cssModule.fileName, text: cssModule.text },
129
+ start: { line: loc.start.line, column: loc.start.column },
130
+ length: loc.end.offset - loc.start.offset,
131
+ };
132
+ }
@@ -1,11 +1,18 @@
1
1
  import type { CSSModule, MatchesPattern, Resolver, Token, TokenImporter } from './type.js';
2
+ import { isValidAsJSIdentifier } from './util.js';
2
3
 
3
4
  export const STYLES_EXPORT_NAME = 'styles';
4
5
 
5
- export interface CreateDtsOptions {
6
+ export interface CreateDtsHost {
6
7
  resolver: Resolver;
7
8
  matchesPattern: MatchesPattern;
9
+ }
10
+
11
+ export interface CreateDtsOptions {
8
12
  namedExports: boolean;
13
+ prioritizeNamedImports: boolean;
14
+ /** Generate .d.ts for ts-plugin */
15
+ forTsPlugin: boolean;
9
16
  }
10
17
 
11
18
  interface CodeMapping {
@@ -39,16 +46,35 @@ interface CreateDtsResult {
39
46
  /**
40
47
  * Create a d.ts file.
41
48
  */
42
- export function createDts(cssModules: CSSModule, options: CreateDtsOptions): CreateDtsResult {
43
- // Filter external files
44
- const tokenImporters = cssModules.tokenImporters.filter((tokenImporter) => {
45
- const resolved = options.resolver(tokenImporter.from, { request: cssModules.fileName });
46
- return resolved !== undefined && options.matchesPattern(resolved);
47
- });
49
+ export function createDts(cssModules: CSSModule, host: CreateDtsHost, options: CreateDtsOptions): CreateDtsResult {
50
+ // Exclude invalid tokens
51
+ const localTokens = cssModules.localTokens.filter((token) => isValidName(token.name, options));
52
+ const tokenImporters = cssModules.tokenImporters
53
+ // Exclude invalid imported tokens
54
+ .map((tokenImporter) => {
55
+ if (tokenImporter.type === 'value') {
56
+ return {
57
+ ...tokenImporter,
58
+ values: tokenImporter.values.filter(
59
+ (value) =>
60
+ isValidName(value.name, options) &&
61
+ (value.localName === undefined || isValidName(value.localName, options)),
62
+ ),
63
+ };
64
+ } else {
65
+ return tokenImporter;
66
+ }
67
+ })
68
+ // Exclude token importers for external files
69
+ .filter((tokenImporter) => {
70
+ const resolved = host.resolver(tokenImporter.from, { request: cssModules.fileName });
71
+ return resolved !== undefined && host.matchesPattern(resolved);
72
+ });
73
+
48
74
  if (options.namedExports) {
49
- return createNamedExportsDts(cssModules.localTokens, tokenImporters);
75
+ return createNamedExportsDts(localTokens, tokenImporters, options);
50
76
  } else {
51
- return createDefaultExportDts(cssModules.localTokens, tokenImporters);
77
+ return createDefaultExportDts(localTokens, tokenImporters);
52
78
  }
53
79
  }
54
80
 
@@ -77,6 +103,7 @@ export function createDts(cssModules: CSSModule, options: CreateDtsOptions): Cre
77
103
  function createNamedExportsDts(
78
104
  localTokens: Token[],
79
105
  tokenImporters: TokenImporter[],
106
+ options: CreateDtsOptions,
80
107
  ): { text: string; mapping: CodeMapping; linkedCodeMapping: LinkedCodeMapping } {
81
108
  const mapping: CodeMapping = { sourceOffsets: [], lengths: [], generatedOffsets: [] };
82
109
  const linkedCodeMapping: LinkedCodeMapping = {
@@ -141,6 +168,10 @@ function createNamedExportsDts(
141
168
  text += `'${tokenImporter.from}';\n`;
142
169
  }
143
170
  }
171
+ if (options.forTsPlugin && !options.prioritizeNamedImports) {
172
+ // Export `styles` to appear in code completion suggestions
173
+ text += 'declare const styles: {};\nexport default styles;\n';
174
+ }
144
175
  return { text, mapping, linkedCodeMapping };
145
176
  }
146
177
 
@@ -231,3 +262,10 @@ function createDefaultExportDts(
231
262
  text += `};\nexport default ${STYLES_EXPORT_NAME};\n`;
232
263
  return { text, mapping, linkedCodeMapping };
233
264
  }
265
+
266
+ function isValidName(name: string, options: CreateDtsOptions): boolean {
267
+ if (!isValidAsJSIdentifier(name)) return false;
268
+ if (name === '__proto__') return false;
269
+ if (options.namedExports && name === 'default') return false;
270
+ return true;
271
+ }
@@ -6,6 +6,11 @@ interface ValueDeclaration {
6
6
  name: string;
7
7
  // value: string; // unused
8
8
  loc: Location;
9
+ /**
10
+ * NOTE: The `declarationLoc` for value declaration does not include the trailing semicolon.
11
+ * @example `@value white: #fff` has `declarationLoc` as `{ start: { line: 1, column: 1, offset: 0 }, end: { line: 1, column: 19, offset: 18 } }`.
12
+ */
13
+ declarationLoc: Location;
9
14
  }
10
15
 
11
16
  interface ValueImportDeclaration {
@@ -149,7 +154,15 @@ export function parseAtValue(atValue: AtRule): ParseAtValueResult {
149
154
  column: start.column + name.length,
150
155
  offset: start.offset + name.length,
151
156
  };
152
- const parsedAtValue = { type: 'valueDeclaration', name, loc: { start, end } } as const;
157
+ const parsedAtValue: ValueDeclaration = {
158
+ type: 'valueDeclaration',
159
+ name,
160
+ loc: { start, end },
161
+ declarationLoc: {
162
+ start: atValue.source!.start!,
163
+ end: atValue.positionBy({ index: atValue.toString().length }),
164
+ },
165
+ } as const;
153
166
  return { atValue: parsedAtValue, diagnostics };
154
167
  }
155
168
  diagnostics.push({
@@ -10,10 +10,12 @@ import type {
10
10
  } from '../type.js';
11
11
  import { parseAtImport } from './at-import-parser.js';
12
12
  import { parseAtValue } from './at-value-parser.js';
13
+ import { parseAtKeyframes } from './key-frame-parser.js';
13
14
  import { parseRule } from './rule-parser.js';
14
15
 
15
16
  type AtImport = AtRule & { name: 'import' };
16
17
  type AtValue = AtRule & { name: 'value' };
18
+ type AtKeyframes = AtRule & { name: 'keyframes' };
17
19
 
18
20
  function isAtRuleNode(node: Node): node is AtRule {
19
21
  return node.type === 'atrule';
@@ -27,6 +29,10 @@ function isAtValueNode(node: Node): node is AtValue {
27
29
  return isAtRuleNode(node) && node.name === 'value';
28
30
  }
29
31
 
32
+ function isAtKeyframesNode(node: Node): node is AtKeyframes {
33
+ return isAtRuleNode(node) && node.name === 'keyframes';
34
+ }
35
+
30
36
  function isRuleNode(node: Node): node is Rule {
31
37
  return node.type === 'rule';
32
38
  }
@@ -49,10 +55,16 @@ function collectTokens(ast: Root) {
49
55
  allDiagnostics.push(...diagnostics);
50
56
  if (atValue === undefined) return;
51
57
  if (atValue.type === 'valueDeclaration') {
52
- localTokens.push({ name: atValue.name, loc: atValue.loc });
58
+ localTokens.push({ name: atValue.name, loc: atValue.loc, declarationLoc: atValue.declarationLoc });
53
59
  } else if (atValue.type === 'valueImportDeclaration') {
54
60
  tokenImporters.push({ ...atValue, type: 'value' });
55
61
  }
62
+ } else if (isAtKeyframesNode(node)) {
63
+ const { keyframe, diagnostics } = parseAtKeyframes(node);
64
+ allDiagnostics.push(...diagnostics);
65
+ if (keyframe) {
66
+ localTokens.push({ name: keyframe.name, loc: keyframe.loc, declarationLoc: keyframe.declarationLoc });
67
+ }
56
68
  } else if (isRuleNode(node)) {
57
69
  const { classSelectors, diagnostics } = parseRule(node);
58
70
  allDiagnostics.push(...diagnostics);
@@ -82,15 +94,14 @@ export function parseCSSModule(text: string, { fileName, safe }: ParseCSSModuleO
82
94
  ast = parser(text, { from: fileName });
83
95
  } catch (e) {
84
96
  if (e instanceof CssSyntaxError) {
85
- const start = { line: e.line ?? 1, column: e.column ?? 1 };
97
+ const { line, column, endColumn } = e.input!;
86
98
  return {
87
99
  cssModule: { fileName, text, localTokens: [], tokenImporters: [] },
88
100
  diagnostics: [
89
101
  {
90
102
  file: diagnosticSourceFile,
91
- start,
92
- // TODO: Assign correct length (e.g. `e.endOffset - e.offset`)
93
- length: 1,
103
+ start: { line, column },
104
+ length: endColumn !== undefined ? endColumn - column : 1,
94
105
  text: e.reason,
95
106
  category: 'error',
96
107
  },
@@ -0,0 +1,75 @@
1
+ import type { AtRule } from 'postcss';
2
+ import type { DiagnosticWithDetachedLocation, Location } from '../type.js';
3
+
4
+ interface KeyframeDeclaration {
5
+ name: string;
6
+ loc: Location;
7
+ /**
8
+ * The location of the declaration of the keyframe in the source file.
9
+ * @example `@keyframes fadeIn { ... }` has `declarationLoc` as the entire at-rule location.
10
+ */
11
+ declarationLoc: Location;
12
+ }
13
+
14
+ interface ParseAtKeyframesResult {
15
+ keyframe?: KeyframeDeclaration;
16
+ diagnostics: DiagnosticWithDetachedLocation[];
17
+ }
18
+
19
+ /**
20
+ * Parse the `@keyframes` rule to extract keyframe name.
21
+ *
22
+ * CSS Modules treat keyframes as local tokens by default, similar to class names.
23
+ * This parser extracts the keyframe name and its location for type generation.
24
+ *
25
+ * @param atKeyframes The @keyframes at-rule to parse
26
+ * @returns Parsed keyframe information and diagnostics
27
+ */
28
+ export function parseAtKeyframes(atKeyframes: AtRule): ParseAtKeyframesResult {
29
+ // Extract keyframe name from params
30
+ // e.g., "@keyframes fadeIn { ... }" -> keyframeName = "fadeIn"
31
+ // e.g., "@keyframes :local(slideOut) { ... }" -> keyframeName = ":local(slideOut)"
32
+ const keyframeName = atKeyframes.params;
33
+
34
+ // Ignore empty keyframe names
35
+ if (keyframeName === '') {
36
+ return { diagnostics: [] };
37
+ }
38
+
39
+ const keyframeNameLoc = {
40
+ start: atKeyframes.positionBy({ index: `@keyframes${atKeyframes.raws.afterName!}`.length }),
41
+ end: atKeyframes.positionBy({ index: `@keyframes${atKeyframes.raws.afterName!}${keyframeName}`.length }),
42
+ };
43
+
44
+ // Handle :local() and :global() wrappers
45
+ if (keyframeName.startsWith(':local(') && keyframeName.endsWith(')')) {
46
+ // For simplicity of implementation, css-modules-kit does not support `:local(...)`.
47
+ return {
48
+ diagnostics: [
49
+ {
50
+ category: 'error',
51
+ start: keyframeNameLoc.start,
52
+ length: keyframeName.length,
53
+ text: `css-modules-kit does not support \`:local()\` wrapper for keyframes. Use \`@keyframes ${keyframeName} {...}\` instead.`,
54
+ },
55
+ ],
56
+ };
57
+ } else if (keyframeName.startsWith(':global(') && keyframeName.endsWith(')')) {
58
+ // Ignore keyframes wrapped in :global()
59
+ return { diagnostics: [] };
60
+ }
61
+
62
+ return {
63
+ keyframe: {
64
+ name: keyframeName,
65
+ loc: keyframeNameLoc,
66
+ declarationLoc: {
67
+ start: atKeyframes.source!.start!,
68
+ end: atKeyframes.positionBy({
69
+ index: atKeyframes.toString().length,
70
+ }),
71
+ },
72
+ },
73
+ diagnostics: [],
74
+ };
75
+ }
@@ -27,23 +27,6 @@ function flatCollectResults(results: CollectResult[]): CollectResult {
27
27
  return { classNames, diagnostics };
28
28
  }
29
29
 
30
- const JS_IDENTIFIER_PATTERN = /^[$_\p{ID_Start}][$\u200c\u200d\p{ID_Continue}]*$/u;
31
-
32
- function convertClassNameToCollectResult(rule: Rule, node: selectorParser.ClassName): CollectResult {
33
- // eslint-disable-next-line @typescript-eslint/no-explicit-any -- `raws` property is defined if `node` has escaped characters.
34
- const name = (node as any).raws?.value ?? node.value;
35
-
36
- if (!JS_IDENTIFIER_PATTERN.test(name)) {
37
- const diagnostic: DiagnosticWithDetachedLocation = {
38
- ...calcDiagnosticsLocationForSelectorParserNode(rule, node),
39
- text: `\`${name}\` is not allowed because it is not a valid JavaScript identifier.`,
40
- category: 'error',
41
- };
42
- return { classNames: [], diagnostics: [diagnostic] };
43
- }
44
- return { classNames: [node], diagnostics: [] };
45
- }
46
-
47
30
  /**
48
31
  * Collect local class names from the AST.
49
32
  * This function is based on the behavior of postcss-modules-local-by-default.
@@ -61,14 +44,14 @@ function collectLocalClassNames(rule: Rule, root: selectorParser.Root): CollectR
61
44
  // If the class name is wrapped by `:local(...)` or `:global(...)`,
62
45
  // the scope is determined by the wrapper.
63
46
  case ':local(...)':
64
- return convertClassNameToCollectResult(rule, node);
47
+ return { classNames: [node], diagnostics: [] };
65
48
  case ':global(...)':
66
49
  return { classNames: [], diagnostics: [] };
67
50
  // If the class name is not wrapped by `:local(...)` or `:global(...)`,
68
51
  // the scope is determined by the mode.
69
52
  default:
70
53
  // Mode is customizable in css-loader, but we don't support it for simplicity. We fix the mode to 'local'.
71
- return convertClassNameToCollectResult(rule, node);
54
+ return { classNames: [node], diagnostics: [] };
72
55
  }
73
56
  } else if (selectorParser.isPseudo(node) && (node.value === ':local' || node.value === ':global')) {
74
57
  if (node.nodes.length === 0) {
@@ -76,7 +59,7 @@ function collectLocalClassNames(rule: Rule, root: selectorParser.Root): CollectR
76
59
  // We don't support `:local` and `:global` (without any arguments) because they are complex.
77
60
  const diagnostic: DiagnosticWithDetachedLocation = {
78
61
  ...calcDiagnosticsLocationForSelectorParserNode(rule, node),
79
- text: `\`${node.value}\` is not supported. Use \`${node.value}(...)\` instead.`,
62
+ text: `css-modules-kit does not support \`${node.value}\`. Use \`${node.value}(...)\` instead.`,
80
63
  category: 'error',
81
64
  };
82
65
  return { classNames: [], diagnostics: [diagnostic] };
@@ -104,8 +87,16 @@ function collectLocalClassNames(rule: Rule, root: selectorParser.Root): CollectR
104
87
  interface ClassSelector {
105
88
  /** The class name. It does not include the leading dot. */
106
89
  name: string;
107
- /** The location of the class selector. */
90
+ /**
91
+ * The location of the class selector.
92
+ * @example `.a {}` has `loc` as `{ start: { line: 1, column: 2, offset: 1 }, end: { line: 1, column: 3, offset: 2 } }`.
93
+ */
108
94
  loc: Location;
95
+ /**
96
+ * The location of the declaration of the token in the source file.
97
+ * @example `.a {}` has `declarationLoc` as `{ start: { line: 1, column: 1, offset: 0 }, end: { line: 1, column: 6, offset: 5 } }`.
98
+ */
99
+ declarationLoc: Location;
109
100
  }
110
101
 
111
102
  interface ParseRuleResult {
@@ -119,7 +110,7 @@ interface ParseRuleResult {
119
110
  export function parseRule(rule: Rule): ParseRuleResult {
120
111
  const root = selectorParser().astSync(rule);
121
112
  const result = collectLocalClassNames(rule, root);
122
- const classSelectors = result.classNames.map((className) => {
113
+ const classSelectors: ClassSelector[] = result.classNames.map((className) => {
123
114
  // If `rule` is `.a, .b { color: red; }` and `className` is `.b`,
124
115
  // `rule.source` is `{ start: { line: 1, column: 1 }, end: { line: 1, column: 22 } }`
125
116
  // And `className.source` is `{ start: { line: 1, column: 5 }, end: { line: 1, column: 6 } }`.
@@ -137,6 +128,7 @@ export function parseRule(rule: Rule): ParseRuleResult {
137
128
  return {
138
129
  name: className.value,
139
130
  loc: { start, end },
131
+ declarationLoc: { start: rule.source!.start!, end: rule.positionBy({ index: rule.toString().length }) },
140
132
  };
141
133
  });
142
134
  return { classSelectors, diagnostics: result.diagnostics };
package/src/type.ts CHANGED
@@ -34,6 +34,8 @@ export interface Token {
34
34
  name: string;
35
35
  /** The location of the token in the source file. */
36
36
  loc: Location;
37
+ /** The location of the declaration of the token in the source file. */
38
+ declarationLoc?: Location;
37
39
  }
38
40
 
39
41
  /**
package/src/util.ts CHANGED
@@ -2,6 +2,12 @@ export function isPosixRelativePath(path: string): boolean {
2
2
  return path.startsWith(`./`) || path.startsWith(`../`);
3
3
  }
4
4
 
5
+ const JS_IDENTIFIER_PATTERN = /^[$_\p{ID_Start}][$\u200c\u200d\p{ID_Continue}]*$/u;
6
+
7
+ export function isValidAsJSIdentifier(name: string): boolean {
8
+ return JS_IDENTIFIER_PATTERN.test(name);
9
+ }
10
+
5
11
  /**
6
12
  * The syntax pattern for consuming tokens imported from CSS Module.
7
13
  * @example `styles.foo`