@css-modules-kit/core 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/checker.d.ts.map +1 -1
- package/dist/checker.js +37 -54
- package/dist/checker.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +0 -1
- package/dist/config.js.map +1 -1
- package/dist/dts-generator.d.ts +3 -0
- package/dist/dts-generator.d.ts.map +1 -1
- package/dist/dts-generator.js +205 -72
- package/dist/dts-generator.js.map +1 -1
- package/dist/parser/rule-parser.d.ts.map +1 -1
- package/dist/parser/rule-parser.js +13 -3
- package/dist/parser/rule-parser.js.map +1 -1
- package/dist/resolver.d.ts.map +1 -1
- package/dist/resolver.js +3 -4
- package/dist/resolver.js.map +1 -1
- package/dist/util.d.ts +12 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +26 -8
- package/dist/util.js.map +1 -1
- package/package.json +1 -1
- package/src/checker.ts +38 -57
- package/src/config.ts +0 -1
- package/src/dts-generator.ts +221 -70
- package/src/parser/rule-parser.ts +13 -3
- package/src/resolver.ts +3 -4
- package/src/typing/typescript.d.ts +1 -1
- package/src/util.ts +32 -8
|
@@ -85,14 +85,24 @@ export function parseRule(rule) {
|
|
|
85
85
|
column: rule.source.start.column + className.source.start.column,
|
|
86
86
|
offset: rule.source.start.offset + className.sourceIndex + 1,
|
|
87
87
|
};
|
|
88
|
+
/**
|
|
89
|
+
* When there is a selector like `.\31 backslash`, `className.value` becomes `"1backslash"`.
|
|
90
|
+
* In other words, it is the string after escape sequences have been interpreted.
|
|
91
|
+
* However, here we need the raw string as written in the CSS source code.
|
|
92
|
+
* So we use `className.toString()`.
|
|
93
|
+
*
|
|
94
|
+
* The return value of `className.toString()` may contain leading dots and spaces like `" .1backslash"`.
|
|
95
|
+
* Therefore, we remove the leading spaces and dot with a regular expression.
|
|
96
|
+
*/
|
|
97
|
+
const rawClassName = className.toString().replace(/^\s*\./u, '');
|
|
88
98
|
const end = {
|
|
89
99
|
// The end line is always the same as the start line, as a class selector cannot break in the middle.
|
|
90
100
|
line: start.line,
|
|
91
|
-
column: start.column +
|
|
92
|
-
offset: start.offset +
|
|
101
|
+
column: start.column + rawClassName.length,
|
|
102
|
+
offset: start.offset + rawClassName.length,
|
|
93
103
|
};
|
|
94
104
|
return {
|
|
95
|
-
name:
|
|
105
|
+
name: rawClassName,
|
|
96
106
|
loc: { start, end },
|
|
97
107
|
declarationLoc: { start: rule.source.start, end: rule.positionBy({ index: rule.toString().length }) },
|
|
98
108
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rule-parser.js","sourceRoot":"","sources":["../../src/parser/rule-parser.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"rule-parser.js","sourceRoot":"","sources":["../../src/parser/rule-parser.ts"],"names":[],"mappings":"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"}
|
package/dist/resolver.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,QAAQ,EAAmB,MAAM,WAAW,CAAC;AAG3D,wBAAgB,cAAc,CAC5B,eAAe,EAAE,eAAe,EAChC,qBAAqB,EAAE,EAAE,CAAC,qBAAqB,GAAG,SAAS,GAC1D,QAAQ,
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,MAAM,YAAY,CAAC;AAC5B,OAAO,KAAK,EAAE,QAAQ,EAAmB,MAAM,WAAW,CAAC;AAG3D,wBAAgB,cAAc,CAC5B,eAAe,EAAE,eAAe,EAChC,qBAAqB,EAAE,EAAE,CAAC,qBAAqB,GAAG,SAAS,GAC1D,QAAQ,CAwBV"}
|
package/dist/resolver.js
CHANGED
|
@@ -7,16 +7,15 @@ export function createResolver(compilerOptions, moduleResolutionCache) {
|
|
|
7
7
|
const host = {
|
|
8
8
|
...ts.sys,
|
|
9
9
|
fileExists: (fileName) => {
|
|
10
|
-
if (fileName.endsWith('.
|
|
11
|
-
return ts.sys.fileExists(fileName.replace(/\.
|
|
10
|
+
if (fileName.endsWith('.d.css.ts')) {
|
|
11
|
+
return ts.sys.fileExists(fileName.replace(/\.d\.css\.ts$/u, '.css'));
|
|
12
12
|
}
|
|
13
13
|
return ts.sys.fileExists(fileName);
|
|
14
14
|
},
|
|
15
15
|
};
|
|
16
16
|
const { resolvedModule } = ts.resolveModuleName(specifier, options.request, compilerOptions, host, moduleResolutionCache);
|
|
17
17
|
if (resolvedModule) {
|
|
18
|
-
|
|
19
|
-
return resolvedModule.resolvedFileName.replace(/\.module\.d\.css\.ts$/u, '.module.css');
|
|
18
|
+
return resolvedModule.resolvedFileName.replace(/\.d\.css\.ts$/u, '.css');
|
|
20
19
|
}
|
|
21
20
|
return undefined;
|
|
22
21
|
};
|
package/dist/resolver.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,UAAU,cAAc,CAC5B,eAAgC,EAChC,qBAA2D;IAE3D,OAAO,CAAC,SAAiB,EAAE,OAAwB,EAAE,EAAE;QACrD,IAAI,cAAc,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QAChD,MAAM,IAAI,GAA4B;YACpC,GAAG,EAAE,CAAC,GAAG;YACT,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACvB,IAAI,QAAQ,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAE3C,MAAM,UAAU,cAAc,CAC5B,eAAgC,EAChC,qBAA2D;IAE3D,OAAO,CAAC,SAAiB,EAAE,OAAwB,EAAE,EAAE;QACrD,IAAI,cAAc,CAAC,SAAS,CAAC;YAAE,OAAO,SAAS,CAAC;QAChD,MAAM,IAAI,GAA4B;YACpC,GAAG,EAAE,CAAC,GAAG;YACT,UAAU,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACvB,IAAI,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;oBACnC,OAAO,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC;gBACvE,CAAC;gBACD,OAAO,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YACrC,CAAC;SACF,CAAC;QACF,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAC7C,SAAS,EACT,OAAO,CAAC,OAAO,EACf,eAAe,EACf,IAAI,EACJ,qBAAqB,CACtB,CAAC;QACF,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,cAAc,CAAC,gBAAgB,CAAC,OAAO,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/util.d.ts
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
export declare function isPosixRelativePath(path: string): boolean;
|
|
2
|
-
|
|
2
|
+
/** The type of token name violation. */
|
|
3
|
+
export type TokenNameViolation = 'invalid-js-identifier' | 'proto-not-allowed' | 'default-not-allowed' | 'backslash-not-allowed';
|
|
4
|
+
export interface ValidateTokenNameOptions {
|
|
5
|
+
namedExports: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Validates a token name and returns the violation if any.
|
|
9
|
+
* @param name The token name to validate.
|
|
10
|
+
* @param options The validation options.
|
|
11
|
+
* @returns The violation, or `undefined` if the name is valid.
|
|
12
|
+
*/
|
|
13
|
+
export declare function validateTokenName(name: string, options: ValidateTokenNameOptions): TokenNameViolation | undefined;
|
|
3
14
|
export declare function findUsedTokenNames(componentText: string): Set<string>;
|
|
4
15
|
export declare function isURLSpecifier(specifier: string): boolean;
|
|
5
16
|
//# sourceMappingURL=util.d.ts.map
|
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;AAID,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD;AAID,wCAAwC;AACxC,MAAM,MAAM,kBAAkB,GAC1B,uBAAuB,GACvB,mBAAmB,GACnB,qBAAqB,GACrB,uBAAuB,CAAC;AAE5B,MAAM,WAAW,wBAAwB;IACvC,YAAY,EAAE,OAAO,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB,GAAG,kBAAkB,GAAG,SAAS,CASjH;AAWD,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAOrE;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAEzD"}
|
package/dist/util.js
CHANGED
|
@@ -2,22 +2,40 @@ export function isPosixRelativePath(path) {
|
|
|
2
2
|
return path.startsWith(`./`) || path.startsWith(`../`);
|
|
3
3
|
}
|
|
4
4
|
const JS_IDENTIFIER_PATTERN = /^[$_\p{ID_Start}][$\u200c\u200d\p{ID_Continue}]*$/u;
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
/**
|
|
6
|
+
* Validates a token name and returns the violation if any.
|
|
7
|
+
* @param name The token name to validate.
|
|
8
|
+
* @param options The validation options.
|
|
9
|
+
* @returns The violation, or `undefined` if the name is valid.
|
|
10
|
+
*/
|
|
11
|
+
export function validateTokenName(name, options) {
|
|
12
|
+
if (name === '__proto__')
|
|
13
|
+
return 'proto-not-allowed';
|
|
14
|
+
if (options.namedExports) {
|
|
15
|
+
if (name === 'default')
|
|
16
|
+
return 'default-not-allowed';
|
|
17
|
+
if (!JS_IDENTIFIER_PATTERN.test(name))
|
|
18
|
+
return 'invalid-js-identifier';
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
if (name.includes('\\'))
|
|
22
|
+
return 'backslash-not-allowed';
|
|
23
|
+
}
|
|
24
|
+
return undefined;
|
|
7
25
|
}
|
|
8
26
|
/**
|
|
9
27
|
* The syntax pattern for consuming tokens imported from CSS Module.
|
|
10
|
-
* @example `styles.foo`
|
|
28
|
+
* @example `styles.foo`, `styles['foo']`, `styles["foo"]`
|
|
11
29
|
*/
|
|
12
|
-
// TODO(#125): Support `styles['foo']` and `styles["foo"]`
|
|
13
30
|
// MEMO: The `xxxStyles.foo` format is not supported, because the css module file for current component file is usually imported with `styles`.
|
|
14
31
|
// It is sufficient to support only the `styles.foo` format.
|
|
15
|
-
const TOKEN_CONSUMER_PATTERN = /styles
|
|
32
|
+
const TOKEN_CONSUMER_PATTERN = /styles(?:\.([$_\p{ID_Start}][$\u200c\u200d\p{ID_Continue}]*)|\['([^']*?)'\]|\["([^"]*?)"\])/gu;
|
|
16
33
|
export function findUsedTokenNames(componentText) {
|
|
17
34
|
const usedClassNames = new Set();
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
35
|
+
for (const match of componentText.matchAll(TOKEN_CONSUMER_PATTERN)) {
|
|
36
|
+
const name = match[1] ?? match[2] ?? match[3];
|
|
37
|
+
if (name)
|
|
38
|
+
usedClassNames.add(name);
|
|
21
39
|
}
|
|
22
40
|
return usedClassNames;
|
|
23
41
|
}
|
package/dist/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,qBAAqB,GAAG,oDAAoD,CAAC;
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,qBAAqB,GAAG,oDAAoD,CAAC;AAanF;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAY,EAAE,OAAiC;IAC/E,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,mBAAmB,CAAC;IACrD,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;QACzB,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO,qBAAqB,CAAC;QACrD,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,uBAAuB,CAAC;IACxE,CAAC;SAAM,CAAC;QACN,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,OAAO,uBAAuB,CAAC;IAC1D,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,+IAA+I;AAC/I,kEAAkE;AAClE,MAAM,sBAAsB,GAC1B,+FAA+F,CAAC;AAElG,MAAM,UAAU,kBAAkB,CAAC,aAAqB;IACtD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IACzC,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACnE,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;QAC9C,IAAI,IAAI;YAAE,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,SAAiB;IAC9C,OAAO,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC"}
|
package/package.json
CHANGED
package/src/checker.ts
CHANGED
|
@@ -10,7 +10,7 @@ import type {
|
|
|
10
10
|
Resolver,
|
|
11
11
|
TokenImporter,
|
|
12
12
|
} from './type.js';
|
|
13
|
-
import { isURLSpecifier,
|
|
13
|
+
import { isURLSpecifier, type TokenNameViolation, validateTokenName } from './util.js';
|
|
14
14
|
|
|
15
15
|
export interface CheckerArgs {
|
|
16
16
|
config: CMKConfig;
|
|
@@ -20,21 +20,15 @@ export interface CheckerArgs {
|
|
|
20
20
|
getCSSModule: (path: string) => CSSModule | undefined;
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
// eslint-disable-next-line complexity
|
|
24
23
|
export function checkCSSModule(cssModule: CSSModule, args: CheckerArgs): Diagnostic[] {
|
|
25
24
|
const { config } = args;
|
|
26
25
|
const diagnostics: Diagnostic[] = [];
|
|
27
26
|
|
|
28
27
|
for (const token of cssModule.localTokens) {
|
|
29
28
|
// Reject special names as they may break .d.ts files
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
if (token.name === '__proto__') {
|
|
34
|
-
diagnostics.push(createProtoIsNotAllowedDiagnostic(cssModule, token.loc));
|
|
35
|
-
}
|
|
36
|
-
if (config.namedExports && token.name === 'default') {
|
|
37
|
-
diagnostics.push(createDefaultIsNotAllowedDiagnostic(cssModule, token.loc));
|
|
29
|
+
const violation = validateTokenName(token.name, { namedExports: config.namedExports });
|
|
30
|
+
if (violation) {
|
|
31
|
+
diagnostics.push(createTokenNameDiagnostic(cssModule, token.loc, violation));
|
|
38
32
|
}
|
|
39
33
|
}
|
|
40
34
|
|
|
@@ -55,24 +49,14 @@ export function checkCSSModule(cssModule: CSSModule, args: CheckerArgs): Diagnos
|
|
|
55
49
|
if (!exportRecord.allTokens.includes(value.name)) {
|
|
56
50
|
diagnostics.push(createModuleHasNoExportedTokenDiagnostic(cssModule, tokenImporter, value));
|
|
57
51
|
}
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
if (value.localName && !isValidAsJSIdentifier(value.localName)) {
|
|
62
|
-
diagnostics.push(createInvalidNameAsJSIdentifiersDiagnostic(cssModule, value.localLoc!));
|
|
63
|
-
}
|
|
64
|
-
if (value.name === '__proto__') {
|
|
65
|
-
diagnostics.push(createProtoIsNotAllowedDiagnostic(cssModule, value.loc));
|
|
66
|
-
}
|
|
67
|
-
if (value.localName === '__proto__') {
|
|
68
|
-
diagnostics.push(createProtoIsNotAllowedDiagnostic(cssModule, value.localLoc!));
|
|
52
|
+
const nameViolation = validateTokenName(value.name, { namedExports: config.namedExports });
|
|
53
|
+
if (nameViolation) {
|
|
54
|
+
diagnostics.push(createTokenNameDiagnostic(cssModule, value.loc, nameViolation));
|
|
69
55
|
}
|
|
70
|
-
if (
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
if (value.localName === 'default') {
|
|
75
|
-
diagnostics.push(createDefaultIsNotAllowedDiagnostic(cssModule, value.localLoc!));
|
|
56
|
+
if (value.localName) {
|
|
57
|
+
const localNameViolation = validateTokenName(value.localName, { namedExports: config.namedExports });
|
|
58
|
+
if (localNameViolation) {
|
|
59
|
+
diagnostics.push(createTokenNameDiagnostic(cssModule, value.localLoc!, localNameViolation));
|
|
76
60
|
}
|
|
77
61
|
}
|
|
78
62
|
}
|
|
@@ -81,6 +65,33 @@ export function checkCSSModule(cssModule: CSSModule, args: CheckerArgs): Diagnos
|
|
|
81
65
|
return diagnostics;
|
|
82
66
|
}
|
|
83
67
|
|
|
68
|
+
function createTokenNameDiagnostic(cssModule: CSSModule, loc: Location, violation: TokenNameViolation): Diagnostic {
|
|
69
|
+
let text: string;
|
|
70
|
+
switch (violation) {
|
|
71
|
+
case 'invalid-js-identifier':
|
|
72
|
+
text = `Token names must be valid JavaScript identifiers when \`cmkOptions.namedExports\` is set to \`true\`.`;
|
|
73
|
+
break;
|
|
74
|
+
case 'proto-not-allowed':
|
|
75
|
+
text = `\`__proto__\` is not allowed as names.`;
|
|
76
|
+
break;
|
|
77
|
+
case 'default-not-allowed':
|
|
78
|
+
text = `\`default\` is not allowed as names when \`cmkOptions.namedExports\` is set to \`true\`.`;
|
|
79
|
+
break;
|
|
80
|
+
case 'backslash-not-allowed':
|
|
81
|
+
text = `Backslash (\\) is not allowed in names when \`cmkOptions.namedExports\` is set to \`false\`.`;
|
|
82
|
+
break;
|
|
83
|
+
default:
|
|
84
|
+
throw new Error('unreachable: unknown TokenNameViolation');
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
text,
|
|
88
|
+
category: 'error',
|
|
89
|
+
file: { fileName: cssModule.fileName, text: cssModule.text },
|
|
90
|
+
start: { line: loc.start.line, column: loc.start.column },
|
|
91
|
+
length: loc.end.offset - loc.start.offset,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
|
|
84
95
|
function createCannotImportModuleDiagnostic(cssModule: CSSModule, tokenImporter: TokenImporter): Diagnostic {
|
|
85
96
|
return {
|
|
86
97
|
text: `Cannot import module '${tokenImporter.from}'`,
|
|
@@ -104,33 +115,3 @@ function createModuleHasNoExportedTokenDiagnostic(
|
|
|
104
115
|
length: value.loc.end.offset - value.loc.start.offset,
|
|
105
116
|
};
|
|
106
117
|
}
|
|
107
|
-
|
|
108
|
-
function createInvalidNameAsJSIdentifiersDiagnostic(cssModule: CSSModule, loc: Location): Diagnostic {
|
|
109
|
-
return {
|
|
110
|
-
text: `css-modules-kit does not support invalid names as JavaScript identifiers.`,
|
|
111
|
-
category: 'error',
|
|
112
|
-
file: { fileName: cssModule.fileName, text: cssModule.text },
|
|
113
|
-
start: { line: loc.start.line, column: loc.start.column },
|
|
114
|
-
length: loc.end.offset - loc.start.offset,
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
function createProtoIsNotAllowedDiagnostic(cssModule: CSSModule, loc: Location): Diagnostic {
|
|
119
|
-
return {
|
|
120
|
-
text: `\`__proto__\` is not allowed as names.`,
|
|
121
|
-
category: 'error',
|
|
122
|
-
file: { fileName: cssModule.fileName, text: cssModule.text },
|
|
123
|
-
start: { line: loc.start.line, column: loc.start.column },
|
|
124
|
-
length: loc.end.offset - loc.start.offset,
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
function createDefaultIsNotAllowedDiagnostic(cssModule: CSSModule, loc: Location): Diagnostic {
|
|
129
|
-
return {
|
|
130
|
-
text: `\`default\` is not allowed as names when \`cmkOptions.namedExports\` is set to \`true\`.`,
|
|
131
|
-
category: 'error',
|
|
132
|
-
file: { fileName: cssModule.fileName, text: cssModule.text },
|
|
133
|
-
start: { line: loc.start.line, column: loc.start.column },
|
|
134
|
-
length: loc.end.offset - loc.start.offset,
|
|
135
|
-
};
|
|
136
|
-
}
|
package/src/config.ts
CHANGED
|
@@ -101,7 +101,6 @@ function isTsConfigFileExists(fileName: string): boolean {
|
|
|
101
101
|
return ts.findConfigFile(dirname(fileName), ts.sys.fileExists.bind(ts.sys), basename(fileName)) !== undefined;
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
-
// eslint-disable-next-line complexity
|
|
105
104
|
function parseRawData(raw: unknown, tsConfigSourceFile: ts.TsConfigSourceFile): ParsedRawData {
|
|
106
105
|
const result: ParsedRawData = {
|
|
107
106
|
config: {},
|