@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.
- package/dist/checker.d.ts +2 -1
- package/dist/checker.d.ts.map +1 -1
- package/dist/checker.js +62 -1
- package/dist/checker.js.map +1 -1
- package/dist/dts-creator.d.ts +7 -2
- package/dist/dts-creator.d.ts.map +1 -1
- package/dist/dts-creator.js +38 -8
- package/dist/dts-creator.js.map +1 -1
- package/dist/parser/at-value-parser.d.ts +5 -0
- package/dist/parser/at-value-parser.d.ts.map +1 -1
- package/dist/parser/at-value-parser.js +9 -1
- package/dist/parser/at-value-parser.js.map +1 -1
- package/dist/parser/css-module-parser.d.ts.map +1 -1
- package/dist/parser/css-module-parser.js +15 -5
- package/dist/parser/css-module-parser.js.map +1 -1
- package/dist/parser/key-frame-parser.d.ts +27 -0
- package/dist/parser/key-frame-parser.d.ts.map +1 -0
- package/dist/parser/key-frame-parser.js +58 -0
- package/dist/parser/key-frame-parser.js.map +1 -0
- package/dist/parser/rule-parser.d.ts +9 -1
- package/dist/parser/rule-parser.d.ts.map +1 -1
- package/dist/parser/rule-parser.js +4 -17
- package/dist/parser/rule-parser.js.map +1 -1
- package/dist/type.d.ts +2 -0
- package/dist/type.d.ts.map +1 -1
- package/dist/util.d.ts +1 -0
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +5 -0
- package/dist/util.js.map +1 -1
- package/package.json +2 -2
- package/src/checker.ts +68 -0
- package/src/dts-creator.ts +47 -9
- package/src/parser/at-value-parser.ts +14 -1
- package/src/parser/css-module-parser.ts +16 -5
- package/src/parser/key-frame-parser.ts +75 -0
- package/src/parser/rule-parser.ts +14 -22
- package/src/type.ts +2 -0
- 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
|
package/dist/checker.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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
|
package/dist/checker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checker.js","sourceRoot":"","sources":["../src/checker.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"checker.js","sourceRoot":"","sources":["../src/checker.ts"],"names":[],"mappings":"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"}
|
package/dist/dts-creator.d.ts
CHANGED
|
@@ -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
|
|
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;
|
|
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"}
|
package/dist/dts-creator.js
CHANGED
|
@@ -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
|
-
//
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
|
|
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(
|
|
33
|
+
return createNamedExportsDts(localTokens, tokenImporters, options);
|
|
17
34
|
}
|
|
18
35
|
else {
|
|
19
|
-
return createDefaultExportDts(
|
|
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
|
package/dist/dts-creator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dts-creator.js","sourceRoot":"","sources":["../src/dts-creator.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"dts-creator.js","sourceRoot":"","sources":["../src/dts-creator.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
|
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 = {
|
|
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":";;
|
|
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;
|
|
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
|
|
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
|
-
|
|
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":";;;;;
|
|
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
|
-
/**
|
|
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;
|
|
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
|
|
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
|
|
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:
|
|
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":";;;;;AAYyD,2GAAmD;
|
|
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 '...'`.
|
package/dist/type.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,MAAM,WAAW,QAAQ;IACvB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;IACf,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,mDAAmD;AACnD,MAAM,WAAW,QAAQ;IACvB;;;OAGG;IACH,KAAK,EAAE,QAAQ,CAAC;IAChB;;;OAGG;IACH,GAAG,EAAE,QAAQ,CAAC;CACf;AAED,qEAAqE;AACrE,MAAM,WAAW,KAAK;IACpB,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,GAAG,EAAE,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../src/type.ts"],"names":[],"mappings":"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"}
|
package/dist/util.d.ts
CHANGED
package/dist/util.d.ts.map
CHANGED
|
@@ -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;
|
|
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.
|
|
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.
|
|
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
|
+
}
|
package/src/dts-creator.ts
CHANGED
|
@@ -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
|
|
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
|
-
//
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
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(
|
|
75
|
+
return createNamedExportsDts(localTokens, tokenImporters, options);
|
|
50
76
|
} else {
|
|
51
|
-
return createDefaultExportDts(
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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:
|
|
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
|
-
/**
|
|
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
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`
|