happy-css-modules 0.2.1 → 0.4.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/README.md +15 -18
- package/dist/cli.js +15 -4
- package/dist/cli.js.map +1 -1
- package/dist/cli.test.js +10 -0
- package/dist/cli.test.js.map +1 -1
- package/dist/emitter/dts.js +3 -4
- package/dist/emitter/dts.js.map +1 -1
- package/dist/integration-test/go-to-definition.test.js +9 -8
- package/dist/integration-test/go-to-definition.test.js.map +1 -1
- package/dist/loader/index.js +6 -10
- package/dist/loader/index.js.map +1 -1
- package/dist/loader/index.test.js +22 -3
- package/dist/loader/index.test.js.map +1 -1
- package/dist/resolver/index.d.ts +3 -1
- package/dist/resolver/index.js +17 -14
- package/dist/resolver/index.js.map +1 -1
- package/dist/resolver/webpack-resolver.d.ts +13 -1
- package/dist/resolver/webpack-resolver.js +73 -59
- package/dist/resolver/webpack-resolver.js.map +1 -1
- package/dist/resolver/webpack-resolver.test.js +34 -7
- package/dist/resolver/webpack-resolver.test.js.map +1 -1
- package/dist/runner.d.ts +12 -0
- package/dist/runner.js +16 -14
- package/dist/runner.js.map +1 -1
- package/dist/runner.test.js +41 -11
- package/dist/runner.test.js.map +1 -1
- package/dist/test/tsserver.d.ts +10 -6
- package/dist/test/tsserver.js +94 -85
- package/dist/test/tsserver.js.map +1 -1
- package/dist/test/util.js +9 -12
- package/dist/test/util.js.map +1 -1
- package/dist/transformer/index.js +11 -9
- package/dist/transformer/index.js.map +1 -1
- package/dist/transformer/less-transformer.js +7 -5
- package/dist/transformer/less-transformer.js.map +1 -1
- package/dist/transformer/less-transformer.test.js +11 -6
- package/dist/transformer/less-transformer.test.js.map +1 -1
- package/dist/transformer/scss-transformer.js +1 -48
- package/dist/transformer/scss-transformer.js.map +1 -1
- package/dist/transformer/scss-transformer.test.js +11 -5
- package/dist/transformer/scss-transformer.test.js.map +1 -1
- package/package.json +3 -3
- package/src/cli.test.ts +14 -0
- package/src/cli.ts +15 -4
- package/src/integration-test/go-to-definition.test.ts +10 -8
- package/src/loader/index.test.ts +22 -3
- package/src/loader/index.ts +3 -4
- package/src/resolver/index.ts +21 -12
- package/src/resolver/webpack-resolver.test.ts +44 -8
- package/src/resolver/webpack-resolver.ts +90 -57
- package/src/runner.test.ts +45 -12
- package/src/runner.ts +29 -10
- package/src/test/tsserver.ts +106 -129
- package/src/transformer/index.ts +10 -8
- package/src/transformer/less-transformer.test.ts +12 -6
- package/src/transformer/less-transformer.ts +6 -4
- package/src/transformer/scss-transformer.test.ts +12 -5
- package/src/transformer/scss-transformer.ts +0 -51
package/dist/test/tsserver.js
CHANGED
|
@@ -1,104 +1,113 @@
|
|
|
1
1
|
import { readFileSync } from 'fs';
|
|
2
|
+
import { mkdir, writeFile as nativeWriteFile } from 'fs/promises';
|
|
3
|
+
import { dirname } from 'path';
|
|
2
4
|
import { fileURLToPath } from 'url';
|
|
5
|
+
import { promisify } from 'util';
|
|
3
6
|
import serverHarness from '@typescript/server-harness';
|
|
7
|
+
import _glob from 'glob';
|
|
4
8
|
import { resolve } from 'import-meta-resolve';
|
|
5
9
|
import lineColumn from 'line-column';
|
|
6
10
|
import { getFixturePath } from './util.js';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
11
|
+
const glob = promisify(_glob);
|
|
12
|
+
async function writeFile(path, content) {
|
|
13
|
+
await mkdir(dirname(path), { recursive: true });
|
|
14
|
+
return nativeWriteFile(path, content, 'utf8');
|
|
10
15
|
}
|
|
11
|
-
export async function
|
|
16
|
+
export async function createTSServer() {
|
|
12
17
|
const server = serverHarness.launchServer(fileURLToPath(await resolve('typescript/lib/tsserver.js', import.meta.url)), [
|
|
13
18
|
// ATA generates some extra network traffic and isn't usually relevant when profiling
|
|
14
19
|
'--disableAutomaticTypingAcquisition',
|
|
15
20
|
]);
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
21
|
+
return {
|
|
22
|
+
async getIdentifierDefinitions(filePath, identifier) {
|
|
23
|
+
const results = await this.getMultipleIdentifierDefinitions(filePath, [identifier]);
|
|
24
|
+
return results[0].definitions;
|
|
25
|
+
},
|
|
26
|
+
async getMultipleIdentifierDefinitions(filePath, identifiers) {
|
|
27
|
+
const tmpFilePath = getFixturePath('/server-harness/tmp.ts');
|
|
28
|
+
const tmpFileContent = [
|
|
29
|
+
`import styles from '${filePath}';`,
|
|
30
|
+
...identifiers.map((identifier) => `styles.${identifier};`),
|
|
31
|
+
].join('\n');
|
|
32
|
+
await writeFile(tmpFilePath, tmpFileContent);
|
|
33
|
+
await this.refreshCache();
|
|
34
|
+
const results = [];
|
|
35
|
+
for (let i = 0; i < identifiers.length; i++) {
|
|
36
|
+
const response = await server.message({
|
|
37
|
+
seq: 0,
|
|
38
|
+
type: 'request',
|
|
39
|
+
command: 'definition',
|
|
40
|
+
arguments: {
|
|
41
|
+
file: tmpFilePath,
|
|
42
|
+
line: i + 2,
|
|
43
|
+
offset: 8, // column, 1-based
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
const definitions = response.body.map((definition) => {
|
|
47
|
+
const { file, start, end } = definition;
|
|
48
|
+
const fileContent = readFileSync(file, 'utf-8');
|
|
49
|
+
const startIndex = lineColumn(fileContent).toIndex(start.line, start.offset);
|
|
50
|
+
const endIndex = lineColumn(fileContent).toIndex(end.line, end.offset);
|
|
51
|
+
const text = fileContent.slice(startIndex, endIndex);
|
|
52
|
+
return { file, text, start, end };
|
|
53
|
+
});
|
|
54
|
+
results.push({ identifier: identifiers[i], definitions });
|
|
55
|
+
}
|
|
56
|
+
return results;
|
|
57
|
+
},
|
|
58
|
+
async getModuleDefinitions(filePath) {
|
|
59
|
+
await this.refreshCache();
|
|
60
|
+
const tmpFilePath = getFixturePath('/server-harness/tmp.ts');
|
|
61
|
+
const tmpFileContent = `import styles from '${filePath}';`;
|
|
62
|
+
await writeFile(tmpFilePath, tmpFileContent);
|
|
63
|
+
await this.refreshCache();
|
|
64
|
+
const response = await server.message({
|
|
65
|
+
seq: 0,
|
|
66
|
+
type: 'request',
|
|
67
|
+
command: 'definition',
|
|
68
|
+
arguments: {
|
|
29
69
|
file: tmpFilePath,
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
scriptKindName: 'TS', // It's easy to get this wrong when copy-pasting
|
|
70
|
+
line: 1,
|
|
71
|
+
offset: 20, // column, 1-based
|
|
33
72
|
},
|
|
34
|
-
|
|
73
|
+
});
|
|
74
|
+
const definitions = response.body.map((definition) => {
|
|
75
|
+
const { file, start, end } = definition;
|
|
76
|
+
const fileContent = readFileSync(file, 'utf-8');
|
|
77
|
+
const startIndex = lineColumn(fileContent).toIndex(start.line, start.offset);
|
|
78
|
+
const endIndex = lineColumn(fileContent).toIndex(end.line, end.offset);
|
|
79
|
+
const text = fileContent.slice(startIndex, endIndex);
|
|
80
|
+
return { file, text, start, end };
|
|
81
|
+
});
|
|
82
|
+
return definitions;
|
|
35
83
|
},
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
file:
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
}
|
|
58
|
-
await server.message({ command: 'exit' });
|
|
59
|
-
return results;
|
|
60
|
-
}
|
|
61
|
-
export async function getModuleDefinitions(filePath) {
|
|
62
|
-
const server = serverHarness.launchServer(fileURLToPath(await resolve('typescript/lib/tsserver.js', import.meta.url)), [
|
|
63
|
-
// ATA generates some extra network traffic and isn't usually relevant when profiling
|
|
64
|
-
'--disableAutomaticTypingAcquisition',
|
|
65
|
-
]);
|
|
66
|
-
const tmpFilePath = getFixturePath('/server-harness/tmp.ts');
|
|
67
|
-
const tmpFileContent = `import styles from '${filePath}';`;
|
|
68
|
-
await server.message({
|
|
69
|
-
type: 'request',
|
|
70
|
-
command: 'updateOpen',
|
|
71
|
-
arguments: {
|
|
72
|
-
changedFiles: [],
|
|
73
|
-
closedFiles: [],
|
|
74
|
-
openFiles: [
|
|
75
|
-
{
|
|
76
|
-
file: tmpFilePath,
|
|
77
|
-
fileContent: tmpFileContent,
|
|
78
|
-
projectRootPath: getFixturePath('/server-harness'),
|
|
79
|
-
scriptKindName: 'TS', // It's easy to get this wrong when copy-pasting
|
|
84
|
+
async refreshCache() {
|
|
85
|
+
// tsserver caches the contents of opened files.
|
|
86
|
+
// When a file is updated, its cache remains with the old content.
|
|
87
|
+
// Therefore we need to overwrite the cache with the latest content.
|
|
88
|
+
const fixtureFilePaths = await glob(getFixturePath('/**/*.ts'), { dot: true });
|
|
89
|
+
// latest contents
|
|
90
|
+
const openFiles = fixtureFilePaths.map((filePath) => ({
|
|
91
|
+
file: filePath,
|
|
92
|
+
fileContent: readFileSync(filePath, 'utf-8'),
|
|
93
|
+
projectRootPath: getFixturePath('/server-harness'),
|
|
94
|
+
scriptKindName: 'TS', // It's easy to get this wrong when copy-pasting
|
|
95
|
+
}));
|
|
96
|
+
// override the cache
|
|
97
|
+
await server.message({
|
|
98
|
+
seq: 0,
|
|
99
|
+
type: 'request',
|
|
100
|
+
command: 'updateOpen',
|
|
101
|
+
arguments: {
|
|
102
|
+
changedFiles: [],
|
|
103
|
+
closedFiles: [],
|
|
104
|
+
openFiles,
|
|
80
105
|
},
|
|
81
|
-
|
|
106
|
+
});
|
|
82
107
|
},
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
type: 'request',
|
|
86
|
-
command: 'definition',
|
|
87
|
-
arguments: {
|
|
88
|
-
file: tmpFilePath,
|
|
89
|
-
line: 1,
|
|
90
|
-
offset: 20, // column, 1-based
|
|
108
|
+
exit: async () => {
|
|
109
|
+
await server.message({ command: 'exit' });
|
|
91
110
|
},
|
|
92
|
-
}
|
|
93
|
-
const definitions = response.body.map((definition) => {
|
|
94
|
-
const { file, start, end } = definition;
|
|
95
|
-
const fileContent = readFileSync(file, 'utf-8');
|
|
96
|
-
const startIndex = lineColumn(fileContent).toIndex(start.line, start.offset);
|
|
97
|
-
const endIndex = lineColumn(fileContent).toIndex(end.line, end.offset);
|
|
98
|
-
const text = fileContent.slice(startIndex, endIndex);
|
|
99
|
-
return { file, text, start, end };
|
|
100
|
-
});
|
|
101
|
-
await server.message({ command: 'exit' });
|
|
102
|
-
return definitions;
|
|
111
|
+
};
|
|
103
112
|
}
|
|
104
113
|
//# sourceMappingURL=tsserver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tsserver.js","sourceRoot":"","sources":["../../src/test/tsserver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,aAAa,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,UAAU,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"tsserver.js","sourceRoot":"","sources":["../../src/test/tsserver.ts"],"names":[],"mappings":"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"}
|
package/dist/test/util.js
CHANGED
|
@@ -21,21 +21,18 @@ export function createComposesDeclarations(root) {
|
|
|
21
21
|
export function fakeToken(args) {
|
|
22
22
|
return {
|
|
23
23
|
name: args.name,
|
|
24
|
-
originalLocations: args.originalLocations.map((location) => {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
},
|
|
33
|
-
});
|
|
34
|
-
}),
|
|
24
|
+
originalLocations: args.originalLocations.map((location) => ({
|
|
25
|
+
filePath: location.filePath ?? getFixturePath('/test/1.css'),
|
|
26
|
+
start: location.start,
|
|
27
|
+
end: {
|
|
28
|
+
line: location.start.line,
|
|
29
|
+
column: location.start.column + args.name.length - 1,
|
|
30
|
+
},
|
|
31
|
+
})),
|
|
35
32
|
};
|
|
36
33
|
}
|
|
37
34
|
export async function waitForAsyncTask(ms) {
|
|
38
|
-
await new Promise((resolve) => setTimeout(resolve, ms
|
|
35
|
+
await new Promise((resolve) => setTimeout(resolve, ms ?? 0));
|
|
39
36
|
}
|
|
40
37
|
export async function exists(path) {
|
|
41
38
|
try {
|
package/dist/test/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/test/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,OAAgE,MAAM,SAAS,CAAC;AAEvF,OAAO,EAAc,YAAY,EAAiB,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CACrC,YAAY,CAAC,MAAM,EAAE,CAAC,EACtB,4BAA4B,EAC5B,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAE,CAC/B,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,IAAa;IACpD,OAAO,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,IAAI,gBAAgB,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAU;IACxC,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC;AACtC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAU;IAC7C,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,IAAU;IACnD,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC,oBAAoB,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAGzB;IACC,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/test/util.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,16 +4,18 @@ export const handleImportError = (packageName) => (e) => {
|
|
|
4
4
|
console.error(`${packageName} import failed. Did you forget to \`npm install -D ${packageName}\`?`);
|
|
5
5
|
throw e;
|
|
6
6
|
};
|
|
7
|
-
export const createDefaultTransformer = () =>
|
|
7
|
+
export const createDefaultTransformer = () => {
|
|
8
8
|
const scssTransformer = createScssTransformer();
|
|
9
9
|
const lessTransformer = createLessTransformer();
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
10
|
+
return async (source, options) => {
|
|
11
|
+
if (options.from.endsWith('.scss')) {
|
|
12
|
+
return scssTransformer(source, options);
|
|
13
|
+
}
|
|
14
|
+
else if (options.from.endsWith('.less')) {
|
|
15
|
+
return lessTransformer(source, options);
|
|
16
|
+
}
|
|
17
|
+
// TODO: support postcss
|
|
18
|
+
return false;
|
|
19
|
+
};
|
|
18
20
|
};
|
|
19
21
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transformer/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AA+B9D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,WAAmB,EAAE,EAAE,CAAC,CAAC,CAAU,EAAE,EAAE;IACvE,OAAO,CAAC,KAAK,CAAC,GAAG,WAAW,sDAAsD,WAAW,KAAK,CAAC,CAAC;IACpG,MAAM,CAAC,CAAC;AACV,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAsB,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transformer/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AA+B9D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,WAAmB,EAAE,EAAE,CAAC,CAAC,CAAU,EAAE,EAAE;IACvE,OAAO,CAAC,KAAK,CAAC,GAAG,WAAW,sDAAsD,WAAW,KAAK,CAAC,CAAC;IACpG,MAAM,CAAC,CAAC;AACV,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAsB,GAAG,EAAE;IAC9D,MAAM,eAAe,GAAG,qBAAqB,EAAE,CAAC;IAChD,MAAM,eAAe,GAAG,qBAAqB,EAAE,CAAC;IAChD,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAC/B,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAClC,OAAO,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACzC;aAAM,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YACzC,OAAO,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACzC;QACD,wBAAwB;QACxB,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { handleImportError } from './index.js';
|
|
2
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
2
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
3
3
|
function createLessPluginResolver(Less, options) {
|
|
4
4
|
class ResolverFileManager extends Less.FileManager {
|
|
5
5
|
constructor(options) {
|
|
6
6
|
super();
|
|
7
7
|
this.options = options;
|
|
8
8
|
}
|
|
9
|
-
supports(
|
|
10
|
-
return
|
|
9
|
+
supports() {
|
|
10
|
+
return true;
|
|
11
11
|
}
|
|
12
12
|
async loadFile(filename, currentDirectory, options, environment) {
|
|
13
|
+
// The http/https file is treated as an empty file.
|
|
14
|
+
if (this.options.isIgnoredSpecifier(filename))
|
|
15
|
+
return { contents: '', filename };
|
|
13
16
|
const resolved = await this.options.resolver(filename, { request: currentDirectory });
|
|
14
17
|
return super.loadFile(resolved, currentDirectory, options, environment);
|
|
15
18
|
}
|
|
@@ -26,10 +29,9 @@ function createLessPluginResolver(Less, options) {
|
|
|
26
29
|
return new LessPluginResolver(options);
|
|
27
30
|
}
|
|
28
31
|
export const createLessTransformer = () => {
|
|
29
|
-
// eslint-disable-next-line @typescript-eslint/consistent-type-imports
|
|
30
32
|
let less;
|
|
31
33
|
return async (source, options) => {
|
|
32
|
-
less
|
|
34
|
+
less ??= (await import('less').catch(handleImportError('less'))).default;
|
|
33
35
|
const result = await less.render(source, {
|
|
34
36
|
filename: options.from,
|
|
35
37
|
sourceMap: {},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"less-transformer.js","sourceRoot":"","sources":["../../src/transformer/less-transformer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,
|
|
1
|
+
{"version":3,"file":"less-transformer.js","sourceRoot":"","sources":["../../src/transformer/less-transformer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,gEAAgE;AAChE,SAAS,wBAAwB,CAAC,IAA2B,EAAE,OAA2B;IACxF,MAAM,mBAAoB,SAAQ,IAAI,CAAC,WAAW;QAEhD,YAAY,OAA2B;YACrC,KAAK,EAAE,CAAC;YACR,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACzB,CAAC;QACe,QAAQ;YACtB,OAAO,IAAI,CAAC;QACd,CAAC;QACe,KAAK,CAAC,QAAQ,CAC5B,QAAgB,EAChB,gBAAwB,EACxB,OAA6B,EAC7B,WAA6B;YAE7B,mDAAmD;YACnD,IAAI,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,QAAQ,CAAC;gBAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;YAEjF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;YACtF,OAAO,KAAK,CAAC,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;QAC1E,CAAC;KACF;IAED,MAAM,kBAAkB;QAEtB,YAAY,OAA2B;YAMhC,eAAU,GAA6B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YALtD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACzB,CAAC;QACM,OAAO,CAAC,IAAgB,EAAE,aAAiC;YAChE,aAAa,CAAC,cAAc,CAAC,IAAI,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACtE,CAAC;KAEF;IAED,OAAO,IAAI,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAsB,GAAG,EAAE;IAC3D,IAAI,IAA2B,CAAC;IAChC,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAC/B,IAAI,KAAK,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACzE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACvC,QAAQ,EAAE,OAAO,CAAC,IAAI;YACtB,SAAS,EAAE,EAAE;YACb,OAAO,EAAE,CAAC,wBAAwB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YAClD,UAAU,EAAE,KAAK,EAAE,6CAA6C;SACjE,CAAC,CAAC;QACH,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,YAAY,EAAE,MAAM,CAAC,OAAO,EAAE,CAAC;IAC5E,CAAC,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -108,12 +108,6 @@ test('resolves specifier using resolver', async () => {
|
|
|
108
108
|
'/test/1.less': dedent `
|
|
109
109
|
@import 'package-1';
|
|
110
110
|
@import 'package-2';
|
|
111
|
-
// NOTE: less does not resolve files that are http(s) protocol.
|
|
112
|
-
// Therefore, the resolver will not be called for those files,
|
|
113
|
-
// and they will not be included in result.dependencies.
|
|
114
|
-
@import url('https://mizdra.net/css/index.css');
|
|
115
|
-
// However, if Content-Type is set to text/css, less will try to resolve it and inline it.
|
|
116
|
-
@import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,900;1,900&display=swap');
|
|
117
111
|
`,
|
|
118
112
|
'/node_modules/package-1/index.css': `.a {}`,
|
|
119
113
|
'/node_modules/package-2/index.less': `.a {}`,
|
|
@@ -124,4 +118,15 @@ test('resolves specifier using resolver', async () => {
|
|
|
124
118
|
// eslint-disable-next-line @typescript-eslint/require-array-sort-compare
|
|
125
119
|
[getFixturePath('/node_modules/package-1/index.css'), getFixturePath('/node_modules/package-2/index.less')].sort());
|
|
126
120
|
});
|
|
121
|
+
test('ignores http(s) protocol file', async () => {
|
|
122
|
+
createFixtures({
|
|
123
|
+
'/test/1.less': dedent `
|
|
124
|
+
@import 'http://example.com/path/http.css';
|
|
125
|
+
@import 'https://example.com/path/https.css';
|
|
126
|
+
@import 'https://example.com/path/less.less';
|
|
127
|
+
`,
|
|
128
|
+
});
|
|
129
|
+
const result = await loader.load(getFixturePath('/test/1.less'));
|
|
130
|
+
expect(result.dependencies).toStrictEqual([]);
|
|
131
|
+
});
|
|
127
132
|
//# sourceMappingURL=less-transformer.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"less-transformer.test.js","sourceRoot":"","sources":["../../src/transformer/less-transformer.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,EAAE,CAAC,CAAC;AACpE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE3C,SAAS,CAAC,GAAG,EAAE;IACb,OAAO,CAAC,SAAS,EAAE,CAAC;AACtB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;IACvC,cAAc,CAAC;QACb,cAAc,EAAE,MAAM,CAAA;;;;;;;;;;;;;OAanB;QACH,cAAc,EAAE,MAAM,CAAA;;;OAGnB;QACH,cAAc,EAAE,MAAM,CAAA;;OAEnB;KACJ,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC;IAEjE,mDAAmD;IACnD,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CpC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;IACjF,cAAc,CAAC;QACb,cAAc,EAAE,MAAM,CAAA;;;KAGrB;QACD,cAAc,EAAE,MAAM,CAAA;KACrB;QACD,cAAc,EAAE,MAAM,CAAA;;KAErB;QACD,cAAc,EAAE,MAAM,CAAA;KACrB;KACF,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC;IAEjE,oEAAoE;IACpE,iEAAiE;IACjE,MAAM,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,CAAC,OAAO,CAAC,CAAC,uBAAuB,CAAC,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC;IAE3E,mFAAmF;IACnF,yEAAyE;IACzE,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,aAAa;IAC9C,yEAAyE;IACzE,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,IAAI,EAAE,CAC5E,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;IACnD,cAAc,CAAC;QACb,cAAc,EAAE,MAAM,CAAA
|
|
1
|
+
{"version":3,"file":"less-transformer.test.js","sourceRoot":"","sources":["../../src/transformer/less-transformer.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,45 +3,6 @@
|
|
|
3
3
|
// Therefore, the workaround is now disabled. See
|
|
4
4
|
// https://github.com/mizdra/happy-css-modules/issues/65#issuecomment-1229471950 for more information.
|
|
5
5
|
import { handleImportError } from './index.js';
|
|
6
|
-
// const IS_JEST_ENVIRONMENT = process.env.JEST_WORKER_ID !== undefined;
|
|
7
|
-
// function verifyJestEnvironment() {
|
|
8
|
-
// if (
|
|
9
|
-
// !(
|
|
10
|
-
// 'window' in global &&
|
|
11
|
-
// 'location' in global &&
|
|
12
|
-
// // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
13
|
-
// 'href' in (global as any).location &&
|
|
14
|
-
// // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
15
|
-
// typeof (global as any).location.href === 'string' &&
|
|
16
|
-
// // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
17
|
-
// (global as any).location.href.startsWith('http://')
|
|
18
|
-
// )
|
|
19
|
-
// ) {
|
|
20
|
-
// throw new Error(
|
|
21
|
-
// 'To use dart-sass with jest, dummy `global.window` and `global.location.href` must be set. See https://github.com/sass/dart-sass/issues/1692#issuecomment-1229219993 .',
|
|
22
|
-
// );
|
|
23
|
-
// }
|
|
24
|
-
// }
|
|
25
|
-
// const createImporterForJest: (from: string) => Importer<'async'> = (from) => ({
|
|
26
|
-
// canonicalize(url) {
|
|
27
|
-
// // NOTE: The format of `url` changes depending on the import source.
|
|
28
|
-
// //
|
|
29
|
-
// // - When `from === '/test/1.scss'` and `@import './2.scss'` in `/test/1.scss` is resolved, `url === '2.scss'`.
|
|
30
|
-
// // - When `from === '/test/1.scss'` and `@import './3.scss'` in `/test/2.scss` is resolved, `url === 'file:///test/3.scss'`.
|
|
31
|
-
// //
|
|
32
|
-
// // That is, the paths of @import statements written to the `from` file is passed through unresolved,
|
|
33
|
-
// // but paths written to other files is passed through resolved to absolute paths.
|
|
34
|
-
// return new URL(url, pathToFileURL(from));
|
|
35
|
-
// },
|
|
36
|
-
// async load(canonicalUrl) {
|
|
37
|
-
// return {
|
|
38
|
-
// contents: await readFile(fileURLToPath(canonicalUrl.href), 'utf8'),
|
|
39
|
-
// syntax: 'scss',
|
|
40
|
-
// sourceMapUrl: canonicalUrl,
|
|
41
|
-
// };
|
|
42
|
-
// },
|
|
43
|
-
// });
|
|
44
|
-
// eslint-disable-next-line @typescript-eslint/consistent-type-imports
|
|
45
6
|
async function renderSass(sass, source, options) {
|
|
46
7
|
return new Promise((resolve, reject) => {
|
|
47
8
|
sass.render({
|
|
@@ -66,19 +27,11 @@ async function renderSass(sass, source, options) {
|
|
|
66
27
|
});
|
|
67
28
|
}
|
|
68
29
|
export const createScssTransformer = () => {
|
|
69
|
-
// eslint-disable-next-line @typescript-eslint/consistent-type-imports
|
|
70
30
|
let sass;
|
|
71
31
|
return async (source, options) => {
|
|
72
|
-
sass
|
|
32
|
+
sass ??= (await import('sass').catch(handleImportError('sass'))).default;
|
|
73
33
|
const result = await renderSass(sass, source, options);
|
|
74
34
|
return { css: result.css.toString(), map: result.map.toString(), dependencies: result.stats.includedFiles };
|
|
75
|
-
// if (IS_JEST_ENVIRONMENT) verifyJestEnvironment();
|
|
76
|
-
// const result = await sass.default.compileStringAsync(source, {
|
|
77
|
-
// url: pathToFileURL(from),
|
|
78
|
-
// sourceMap: true,
|
|
79
|
-
// importers: IS_JEST_ENVIRONMENT ? [createImporterForJest(from)] : [],
|
|
80
|
-
// });
|
|
81
|
-
// return { css: result.css, map: result.sourceMap!, dependencies: result.loadedUrls };
|
|
82
35
|
};
|
|
83
36
|
};
|
|
84
37
|
//# sourceMappingURL=scss-transformer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scss-transformer.js","sourceRoot":"","sources":["../../src/transformer/scss-transformer.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,8FAA8F;AAC9F,iDAAiD;AACjD,sGAAsG;AAItG,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,
|
|
1
|
+
{"version":3,"file":"scss-transformer.js","sourceRoot":"","sources":["../../src/transformer/scss-transformer.ts"],"names":[],"mappings":"AAAA,4FAA4F;AAC5F,8FAA8F;AAC9F,iDAAiD;AACjD,sGAAsG;AAItG,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C,KAAK,UAAU,UAAU,CAAC,IAA2B,EAAE,MAAc,EAAE,OAA2B;IAChG,OAAO,IAAI,OAAO,CAAe,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACnD,IAAI,CAAC,MAAM,CACT;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,OAAO,EAAE,OAAO;YAChB,SAAS,EAAE,IAAI;YACf,QAAQ,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE;gBAC5B,OAAO;qBACJ,QAAQ,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;qBAChC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;qBAC5C,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,CAAC;SACF,EACD,CAAC,SAAS,EAAE,MAAM,EAAE,EAAE;YACpB,IAAI,SAAS,EAAE;gBACb,MAAM,CAAC,SAAS,CAAC,CAAC;aACnB;iBAAM;gBACL,OAAO,CAAC,MAAO,CAAC,CAAC;aAClB;QACH,CAAC,CACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAsB,GAAG,EAAE;IAC3D,IAAI,IAA2B,CAAC;IAChC,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAC/B,IAAI,KAAK,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACzE,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAI,CAAC,QAAQ,EAAE,EAAE,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;IAC/G,CAAC,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -117,11 +117,6 @@ test('resolves specifier using resolver', async () => {
|
|
|
117
117
|
'/test/1.scss': dedent `
|
|
118
118
|
@import 'package-1';
|
|
119
119
|
@import 'package-2';
|
|
120
|
-
// NOTE: sass does not resolve files that are http(s) protocol.
|
|
121
|
-
// Therefore, the resolver will not be called for those files,
|
|
122
|
-
// and they will not be included in result.dependencies.
|
|
123
|
-
@import 'http://example.com/path/1.css';
|
|
124
|
-
@import 'https://example.com/path/1.css';
|
|
125
120
|
`,
|
|
126
121
|
'/node_modules/package-1/index.css': `.a {}`,
|
|
127
122
|
'/node_modules/package-2/index.scss': `.a {}`,
|
|
@@ -129,4 +124,15 @@ test('resolves specifier using resolver', async () => {
|
|
|
129
124
|
const result = await loader.load(getFixturePath('/test/1.scss'));
|
|
130
125
|
expect(result.dependencies).toStrictEqual(['/node_modules/package-1/index.css', '/node_modules/package-2/index.scss'].map(getFixturePath));
|
|
131
126
|
});
|
|
127
|
+
test('ignores http(s) protocol file', async () => {
|
|
128
|
+
createFixtures({
|
|
129
|
+
'/test/1.scss': dedent `
|
|
130
|
+
@import 'http://example.com/path/http.css';
|
|
131
|
+
@import 'https://example.com/path/https.css';
|
|
132
|
+
@import 'https://example.com/path/scss.scss';
|
|
133
|
+
`,
|
|
134
|
+
});
|
|
135
|
+
const result = await loader.load(getFixturePath('/test/1.scss'));
|
|
136
|
+
expect(result.dependencies).toStrictEqual([]);
|
|
137
|
+
});
|
|
132
138
|
//# sourceMappingURL=scss-transformer.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scss-transformer.test.js","sourceRoot":"","sources":["../../src/transformer/scss-transformer.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,WAAW,EAAE,qBAAqB,EAAE,EAAE,CAAC,CAAC;AACpE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE3C,SAAS,CAAC,GAAG,EAAE;IACb,OAAO,CAAC,SAAS,EAAE,CAAC;AACtB,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;IACvC,cAAc,CAAC;QACb,cAAc,EAAE,MAAM,CAAA;;;;;;;;;;;;OAYnB;QACH,cAAc,EAAE,MAAM,CAAA;;;OAGnB;QACH,cAAc,EAAE,MAAM,CAAA;;OAEnB;QACH,cAAc,EAAE,MAAM,CAAA;;OAEnB;KACJ,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC;IAEjE,sFAAsF;IACtF,8EAA8E;IAC9E,uEAAuE;IAEvE,mDAAmD;IACnD,MAAM,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDpC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;IACjF,cAAc,CAAC;QACb,cAAc,EAAE,MAAM,CAAA;;;KAGrB;QACD,cAAc,EAAE,MAAM,CAAA;KACrB;QACD,cAAc,EAAE,MAAM,CAAA;;KAErB;QACD,cAAc,EAAE,MAAM,CAAA;KACrB;KACF,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC;IAEjE,oEAAoE;IACpE,iEAAiE;IACjE,MAAM,CAAC,OAAO,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,CAAC,OAAO,CAAC,CAAC,uBAAuB,CAAC,CAAC,EAAE,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC;IAE3E,mFAAmF;IACnF,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,aAAa,CAAC,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC;AAClH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;IACnD,cAAc,CAAC;QACb,cAAc,EAAE,MAAM,CAAA
|
|
1
|
+
{"version":3,"file":"scss-transformer.test.js","sourceRoot":"","sources":["../../src/transformer/scss-transformer.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "happy-css-modules",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Creates .d.ts files from CSS Modules .css files",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"author": "mizdra",
|
|
25
25
|
"license": "MIT",
|
|
26
26
|
"engines": {
|
|
27
|
-
"node": "
|
|
27
|
+
"node": ">=16.0.0"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
30
|
"camelcase": "^7.0.0",
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
"typescript": "^4.7.4"
|
|
78
78
|
},
|
|
79
79
|
"peerDependencies": {
|
|
80
|
-
"less": "^4.0.0",
|
|
80
|
+
"less": "^3.0.0 || ^4.0.0",
|
|
81
81
|
"postcss": "^8.0.0",
|
|
82
82
|
"sass": "^1.0.0"
|
|
83
83
|
},
|
package/src/cli.test.ts
CHANGED
|
@@ -31,6 +31,20 @@ describe('parseArgv', () => {
|
|
|
31
31
|
expect(parseArgv([...baseArgs, '1.css', '--declarationMap']).declarationMap).toBe(true);
|
|
32
32
|
expect(parseArgv([...baseArgs, '1.css', '--no-declarationMap']).declarationMap).toBe(false);
|
|
33
33
|
});
|
|
34
|
+
test('--sassLoadPaths', () => {
|
|
35
|
+
expect(
|
|
36
|
+
parseArgv([...baseArgs, '1.css', '--sassLoadPaths', 'dir1', '--sassLoadPaths', 'dir2']).sassLoadPaths,
|
|
37
|
+
).toStrictEqual(['dir1', 'dir2']);
|
|
38
|
+
// Passing a number is treated as a string
|
|
39
|
+
expect(parseArgv([...baseArgs, '1.css', '--sassLoadPaths', '1']).sassLoadPaths).toStrictEqual(['1']);
|
|
40
|
+
});
|
|
41
|
+
test('--lessIncludePaths', () => {
|
|
42
|
+
expect(
|
|
43
|
+
parseArgv([...baseArgs, '1.css', '--lessIncludePaths', 'dir1', '--lessIncludePaths', 'dir2']).lessIncludePaths,
|
|
44
|
+
).toStrictEqual(['dir1', 'dir2']);
|
|
45
|
+
// Passing a number is treated as a string
|
|
46
|
+
expect(parseArgv([...baseArgs, '1.css', '--lessIncludePaths', '1']).lessIncludePaths).toStrictEqual(['1']);
|
|
47
|
+
});
|
|
34
48
|
test('--silent', () => {
|
|
35
49
|
expect(parseArgv([...baseArgs, '1.css', '--silent']).silent).toBe(true);
|
|
36
50
|
expect(parseArgv([...baseArgs, '1.css', '--no-silent']).silent).toBe(false);
|
package/src/cli.ts
CHANGED
|
@@ -13,16 +13,15 @@ const pkgJson = JSON.parse(readFileSync(resolve(dirname(fileURLToPath(import.met
|
|
|
13
13
|
*/
|
|
14
14
|
export function parseArgv(argv: string[]): RunnerOptions {
|
|
15
15
|
const parsedArgv = yargs(hideBin(argv))
|
|
16
|
-
.
|
|
17
|
-
// workaround for https://github.com/yargs/yargs/issues/1318
|
|
18
|
-
'duplicate-arguments-array': false,
|
|
19
|
-
})
|
|
16
|
+
.wrap(Math.min(120, process.stdout.columns))
|
|
20
17
|
.scriptName('hcm')
|
|
21
18
|
.usage('Create .d.ts and .d.ts.map from CSS modules *.css files.\n\n$0 [options] <glob>')
|
|
22
19
|
.example("$0 'src/**/*.module.css'", 'Generate .d.ts and .d.ts.map.')
|
|
23
20
|
.example("$0 'src/**/*.module.{css,scss,less}'", 'Also generate files for sass and less.')
|
|
24
21
|
.example("$0 'src/**/*.module.css' --watch", 'Watch for changes and generate .d.ts and .d.ts.map.')
|
|
25
22
|
.example("$0 'src/**/*.module.css' --declarationMap=false", 'Generate .d.ts only.')
|
|
23
|
+
.example("$0 'src/**/*.module.css' --sassLoadPaths=src/style", "Run with sass's `--load-path`.")
|
|
24
|
+
.example("$0 'src/**/*.module.css' --lessIncludePaths=src/style", "Run with less's `--include-path`.")
|
|
26
25
|
.detectLocale(false)
|
|
27
26
|
.option('outDir', {
|
|
28
27
|
type: 'string',
|
|
@@ -43,6 +42,16 @@ export function parseArgv(argv: string[]): RunnerOptions {
|
|
|
43
42
|
default: true,
|
|
44
43
|
describe: 'Create sourcemaps for d.ts files',
|
|
45
44
|
})
|
|
45
|
+
.option('sassLoadPaths', {
|
|
46
|
+
array: true,
|
|
47
|
+
nargs: 1,
|
|
48
|
+
describe: "The option compatible with sass's `--load-path`.",
|
|
49
|
+
})
|
|
50
|
+
.option('lessIncludePaths', {
|
|
51
|
+
array: true,
|
|
52
|
+
nargs: 1,
|
|
53
|
+
describe: "The option compatible with less's `--include-path`.",
|
|
54
|
+
})
|
|
46
55
|
.option('silent', {
|
|
47
56
|
type: 'boolean',
|
|
48
57
|
default: false,
|
|
@@ -65,6 +74,8 @@ export function parseArgv(argv: string[]): RunnerOptions {
|
|
|
65
74
|
watch: parsedArgv.watch,
|
|
66
75
|
localsConvention: parsedArgv.localsConvention,
|
|
67
76
|
declarationMap: parsedArgv.declarationMap,
|
|
77
|
+
sassLoadPaths: parsedArgv.sassLoadPaths?.map((item) => item.toString()),
|
|
78
|
+
lessIncludePaths: parsedArgv.lessIncludePaths?.map((item) => item.toString()),
|
|
68
79
|
silent: parsedArgv.silent,
|
|
69
80
|
};
|
|
70
81
|
}
|