@css-modules-kit/core 0.4.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.map +1 -1
- package/dist/dts-creator.js +30 -4
- package/dist/dts-creator.js.map +1 -1
- package/dist/parser/css-module-parser.d.ts.map +1 -1
- package/dist/parser/css-module-parser.js +11 -0
- 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.map +1 -1
- package/dist/parser/rule-parser.js +3 -17
- package/dist/parser/rule-parser.js.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 +1 -1
- package/src/checker.ts +68 -0
- package/src/dts-creator.ts +34 -7
- package/src/parser/css-module-parser.ts +12 -0
- package/src/parser/key-frame-parser.ts +75 -0
- package/src/parser/rule-parser.ts +3 -20
- 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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"}
|
|
@@ -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
10
|
function createDts(cssModules, host, options) {
|
|
10
|
-
//
|
|
11
|
-
const
|
|
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) => {
|
|
12
29
|
const resolved = host.resolver(tokenImporter.from, { request: cssModules.fileName });
|
|
13
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
|
/**
|
|
@@ -193,4 +210,13 @@ function createDefaultExportDts(localTokens, tokenImporters) {
|
|
|
193
210
|
text += `};\nexport default ${exports.STYLES_EXPORT_NAME};\n`;
|
|
194
211
|
return { text, mapping, linkedCodeMapping };
|
|
195
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
|
+
}
|
|
196
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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"}
|
|
@@ -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
|
}
|
|
@@ -47,6 +51,13 @@ function collectTokens(ast) {
|
|
|
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);
|
|
@@ -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"}
|
|
@@ -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] };
|
|
@@ -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/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
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,4 +1,5 @@
|
|
|
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
|
|
|
@@ -46,15 +47,34 @@ interface CreateDtsResult {
|
|
|
46
47
|
* Create a d.ts file.
|
|
47
48
|
*/
|
|
48
49
|
export function createDts(cssModules: CSSModule, host: CreateDtsHost, options: CreateDtsOptions): CreateDtsResult {
|
|
49
|
-
//
|
|
50
|
-
const
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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
|
+
|
|
54
74
|
if (options.namedExports) {
|
|
55
|
-
return createNamedExportsDts(
|
|
75
|
+
return createNamedExportsDts(localTokens, tokenImporters, options);
|
|
56
76
|
} else {
|
|
57
|
-
return createDefaultExportDts(
|
|
77
|
+
return createDefaultExportDts(localTokens, tokenImporters);
|
|
58
78
|
}
|
|
59
79
|
}
|
|
60
80
|
|
|
@@ -242,3 +262,10 @@ function createDefaultExportDts(
|
|
|
242
262
|
text += `};\nexport default ${STYLES_EXPORT_NAME};\n`;
|
|
243
263
|
return { text, mapping, linkedCodeMapping };
|
|
244
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
|
+
}
|
|
@@ -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
|
}
|
|
@@ -53,6 +59,12 @@ function collectTokens(ast: Root) {
|
|
|
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);
|
|
@@ -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] };
|
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`
|