happy-css-modules 0.4.0 → 0.6.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 +172 -53
- package/dist/cli.js +45 -11
- package/dist/cli.js.map +1 -1
- package/dist/cli.test.js +20 -4
- package/dist/cli.test.js.map +1 -1
- package/dist/emitter/dts.d.ts +3 -4
- package/dist/emitter/dts.js +13 -15
- package/dist/emitter/dts.js.map +1 -1
- package/dist/emitter/dts.test.js +7 -10
- package/dist/emitter/dts.test.js.map +1 -1
- package/dist/emitter/index.d.ts +6 -15
- package/dist/emitter/index.js +18 -13
- package/dist/emitter/index.js.map +1 -1
- package/dist/emitter/index.test.js +0 -50
- package/dist/emitter/index.test.js.map +1 -1
- package/dist/emitter/source-map.d.ts +1 -3
- package/dist/emitter/source-map.js +2 -3
- package/dist/emitter/source-map.js.map +1 -1
- package/dist/emitter/source-map.test.js +1 -4
- package/dist/emitter/source-map.test.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/integration-test/go-to-definition.test.js +1 -0
- package/dist/integration-test/go-to-definition.test.js.map +1 -1
- package/dist/{loader → locator}/index.d.ts +6 -4
- package/dist/{loader → locator}/index.js +13 -5
- package/dist/locator/index.js.map +1 -0
- package/dist/{loader → locator}/index.test.d.ts +0 -0
- package/dist/{loader → locator}/index.test.js +100 -14
- package/dist/locator/index.test.js.map +1 -0
- package/dist/{loader → locator}/postcss.d.ts +5 -1
- package/dist/{loader → locator}/postcss.js +26 -30
- package/dist/{loader → locator}/postcss.js.map +1 -1
- package/dist/{loader → locator}/postcss.test.d.ts +0 -0
- package/dist/{loader → locator}/postcss.test.js +0 -0
- package/dist/locator/postcss.test.js.map +1 -0
- package/dist/resolver/webpack-resolver.d.ts +12 -2
- package/dist/resolver/webpack-resolver.js +12 -3
- package/dist/resolver/webpack-resolver.js.map +1 -1
- package/dist/resolver/webpack-resolver.test.js +43 -7
- package/dist/resolver/webpack-resolver.test.js.map +1 -1
- package/dist/runner.d.ts +23 -1
- package/dist/runner.js +62 -23
- package/dist/runner.js.map +1 -1
- package/dist/runner.test.js +90 -11
- package/dist/runner.test.js.map +1 -1
- package/dist/test/util.d.ts +2 -2
- package/dist/test/util.js +16 -9
- package/dist/test/util.js.map +1 -1
- package/dist/transformer/index.d.ts +4 -2
- package/dist/transformer/index.js +7 -3
- package/dist/transformer/index.js.map +1 -1
- package/dist/transformer/index.test.d.ts +1 -0
- package/dist/transformer/index.test.js +66 -0
- package/dist/transformer/index.test.js.map +1 -0
- package/dist/transformer/less-transformer.test.js +14 -14
- package/dist/transformer/less-transformer.test.js.map +1 -1
- package/dist/transformer/postcss-transformer.d.ts +12 -0
- package/dist/transformer/postcss-transformer.js +32 -0
- package/dist/transformer/postcss-transformer.js.map +1 -0
- package/dist/transformer/postcss-transformer.test.d.ts +1 -0
- package/dist/transformer/postcss-transformer.test.js +176 -0
- package/dist/transformer/postcss-transformer.test.js.map +1 -0
- package/dist/transformer/scss-transformer.js +19 -17
- package/dist/transformer/scss-transformer.js.map +1 -1
- package/dist/transformer/scss-transformer.test.js +16 -16
- package/dist/transformer/scss-transformer.test.js.map +1 -1
- package/dist/util.d.ts +2 -0
- package/dist/util.js +19 -2
- package/dist/util.js.map +1 -1
- package/package.json +10 -9
- package/src/cli.test.ts +24 -4
- package/src/cli.ts +44 -12
- package/src/emitter/dts.test.ts +7 -12
- package/src/emitter/dts.ts +15 -15
- package/src/emitter/index.test.ts +0 -52
- package/src/emitter/index.ts +22 -29
- package/src/emitter/source-map.test.ts +1 -6
- package/src/emitter/source-map.ts +3 -4
- package/src/index.ts +9 -2
- package/src/integration-test/go-to-definition.test.ts +1 -0
- package/src/{loader → locator}/index.test.ts +101 -14
- package/src/{loader → locator}/index.ts +16 -8
- package/src/{loader → locator}/postcss.test.ts +0 -0
- package/src/{loader → locator}/postcss.ts +42 -40
- package/src/resolver/webpack-resolver.test.ts +63 -7
- package/src/resolver/webpack-resolver.ts +26 -5
- package/src/runner.test.ts +103 -11
- package/src/runner.ts +83 -25
- package/src/test/util.ts +16 -10
- package/src/transformer/index.test.ts +71 -0
- package/src/transformer/index.ts +12 -4
- package/src/transformer/less-transformer.test.ts +14 -14
- package/src/transformer/postcss-transformer.test.ts +188 -0
- package/src/transformer/postcss-transformer.ts +57 -0
- package/src/transformer/scss-transformer.test.ts +16 -16
- package/src/transformer/scss-transformer.ts +25 -27
- package/src/util.ts +21 -2
- package/dist/loader/index.js.map +0 -1
- package/dist/loader/index.test.js.map +0 -1
- package/dist/loader/postcss.test.js.map +0 -1
package/dist/emitter/index.d.ts
CHANGED
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
import { type Token } from '../
|
|
1
|
+
import { type Token } from '../locator/index.js';
|
|
2
2
|
import { type LocalsConvention } from '../runner.js';
|
|
3
3
|
export declare function getRelativePath(fromFilePath: string, toFilePath: string): string;
|
|
4
4
|
export declare function isSubDirectoryFile(fromDirectory: string, toFilePath: string): boolean;
|
|
5
|
-
/** The distribution option. */
|
|
6
|
-
export declare type DistOptions = {
|
|
7
|
-
/** Root directory. It is absolute. */
|
|
8
|
-
rootDir: string;
|
|
9
|
-
/** The path to the output directory. It is absolute. */
|
|
10
|
-
outDir: string;
|
|
11
|
-
};
|
|
12
5
|
export declare type DtsFormatOptions = {
|
|
13
6
|
localsConvention?: LocalsConvention;
|
|
14
7
|
};
|
|
@@ -18,17 +11,15 @@ export declare type EmitterOptions = {
|
|
|
18
11
|
filePath: string;
|
|
19
12
|
/** The tokens exported by the source file. */
|
|
20
13
|
tokens: Token[];
|
|
21
|
-
/** The distribution option. */
|
|
22
|
-
distOptions: DistOptions | undefined;
|
|
23
14
|
/** Whether to output declaration map (i.e. `/dir/foo.css.d.ts.map`) or not. */
|
|
24
15
|
emitDeclarationMap: boolean | undefined;
|
|
25
16
|
/** The options for formatting the type definition. */
|
|
26
17
|
dtsFormatOptions: DtsFormatOptions | undefined;
|
|
27
|
-
/** Silent output. Do not show "files written" messages */
|
|
28
|
-
silent: boolean;
|
|
29
|
-
/** Working directory path. */
|
|
30
|
-
cwd: string;
|
|
31
18
|
/** Whether the file is from an external library or not. */
|
|
32
19
|
isExternalFile: (filePath: string) => boolean;
|
|
33
20
|
};
|
|
34
|
-
export declare function emitGeneratedFiles({ filePath, tokens,
|
|
21
|
+
export declare function emitGeneratedFiles({ filePath, tokens, emitDeclarationMap, dtsFormatOptions, isExternalFile, }: EmitterOptions): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Returns true if .d.ts (and .d.ts.map) files are generated for the given file.
|
|
24
|
+
*/
|
|
25
|
+
export declare function isGeneratedFilesExist(filePath: string, emitDeclarationMap: boolean | undefined): Promise<boolean>;
|
package/dist/emitter/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { dirname, isAbsolute, relative } from 'path';
|
|
2
|
-
import
|
|
2
|
+
import { exists } from '../util.js';
|
|
3
3
|
import { generateDtsContentWithSourceMap, getDtsFilePath } from './dts.js';
|
|
4
4
|
import { writeFileIfChanged } from './file-system.js';
|
|
5
5
|
import { generateSourceMappingURLComment, getSourceMapFilePath } from './source-map.js';
|
|
@@ -15,28 +15,33 @@ export function getRelativePath(fromFilePath, toFilePath) {
|
|
|
15
15
|
export function isSubDirectoryFile(fromDirectory, toFilePath) {
|
|
16
16
|
return isAbsolute(toFilePath) && toFilePath.startsWith(fromDirectory);
|
|
17
17
|
}
|
|
18
|
-
function
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
export async function emitGeneratedFiles({ filePath, tokens, distOptions, emitDeclarationMap, dtsFormatOptions, silent, cwd, isExternalFile, }) {
|
|
22
|
-
const dtsFilePath = getDtsFilePath(filePath, distOptions);
|
|
23
|
-
const sourceMapFilePath = getSourceMapFilePath(filePath, distOptions);
|
|
18
|
+
export async function emitGeneratedFiles({ filePath, tokens, emitDeclarationMap, dtsFormatOptions, isExternalFile, }) {
|
|
19
|
+
const dtsFilePath = getDtsFilePath(filePath);
|
|
20
|
+
const sourceMapFilePath = getSourceMapFilePath(filePath);
|
|
24
21
|
const { dtsContent, sourceMap } = generateDtsContentWithSourceMap(filePath, dtsFilePath, sourceMapFilePath, tokens, dtsFormatOptions, isExternalFile);
|
|
25
22
|
if (emitDeclarationMap) {
|
|
26
23
|
const sourceMappingURLComment = generateSourceMappingURLComment(dtsFilePath, sourceMapFilePath);
|
|
27
24
|
await writeFileIfChanged(dtsFilePath, dtsContent + sourceMappingURLComment);
|
|
28
|
-
if (!silent)
|
|
29
|
-
outputWriteLog(cwd, dtsFilePath);
|
|
30
25
|
// NOTE: tsserver does not support inline declaration maps. Therefore, sourcemap files must be output.
|
|
31
26
|
// blocked by: https://github.com/microsoft/TypeScript/issues/38966
|
|
32
27
|
await writeFileIfChanged(sourceMapFilePath, sourceMap.toString());
|
|
33
|
-
if (!silent)
|
|
34
|
-
outputWriteLog(cwd, sourceMapFilePath);
|
|
35
28
|
}
|
|
36
29
|
else {
|
|
37
30
|
await writeFileIfChanged(dtsFilePath, dtsContent);
|
|
38
|
-
if (!silent)
|
|
39
|
-
outputWriteLog(cwd, dtsFilePath);
|
|
40
31
|
}
|
|
41
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Returns true if .d.ts (and .d.ts.map) files are generated for the given file.
|
|
35
|
+
*/
|
|
36
|
+
export async function isGeneratedFilesExist(filePath, emitDeclarationMap) {
|
|
37
|
+
const dtsFilePath = getDtsFilePath(filePath);
|
|
38
|
+
const sourceMapFilePath = getSourceMapFilePath(filePath);
|
|
39
|
+
if (emitDeclarationMap && !(await exists(sourceMapFilePath))) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
if (!(await exists(dtsFilePath))) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
42
47
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/emitter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/emitter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGrD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,+BAA+B,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,+BAA+B,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAExF,MAAM,UAAU,eAAe,CAAC,YAAoB,EAAE,UAAkB;IACtE,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,CAAC;IAC7D,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QAC7B,OAAO,QAAQ,CAAC;KACjB;SAAM;QACL,OAAO,IAAI,GAAG,QAAQ,CAAC;KACxB;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,aAAqB,EAAE,UAAkB;IAC1E,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACxE,CAAC;AAoBD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EACvC,QAAQ,EACR,MAAM,EACN,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACC;IACf,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,+BAA+B,CAC/D,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,MAAM,EACN,gBAAgB,EAChB,cAAc,CACf,CAAC;IAEF,IAAI,kBAAkB,EAAE;QACtB,MAAM,uBAAuB,GAAG,+BAA+B,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;QAChG,MAAM,kBAAkB,CAAC,WAAW,EAAE,UAAU,GAAG,uBAAuB,CAAC,CAAC;QAC5E,sGAAsG;QACtG,mEAAmE;QACnE,MAAM,kBAAkB,CAAC,iBAAiB,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;KACnE;SAAM;QACL,MAAM,kBAAkB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;KACnD;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAgB,EAChB,kBAAuC;IAEvC,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACzD,IAAI,kBAAkB,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE;QAC5D,OAAO,KAAK,CAAC;KACd;IACD,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE;QAChC,OAAO,KAAK,CAAC;KACd;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { readFile, stat } from 'fs/promises';
|
|
2
2
|
import { jest } from '@jest/globals';
|
|
3
|
-
import chalk from 'chalk';
|
|
4
3
|
import { createFixtures, exists, fakeToken, getFixturePath, waitForAsyncTask } from '../test/util.js';
|
|
5
4
|
import { emitGeneratedFiles, getRelativePath, isSubDirectoryFile } from './index.js';
|
|
6
5
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
@@ -22,10 +21,8 @@ describe('emitGeneratedFiles', () => {
|
|
|
22
21
|
const defaultArgs = {
|
|
23
22
|
filePath: getFixturePath('/test/1.css'),
|
|
24
23
|
tokens: [fakeToken({ name: 'foo', originalLocations: [{ start: { line: 1, column: 1 } }] })],
|
|
25
|
-
distOptions: undefined,
|
|
26
24
|
emitDeclarationMap: true,
|
|
27
25
|
dtsFormatOptions: undefined,
|
|
28
|
-
silent: true,
|
|
29
26
|
cwd: getFixturePath('/test'),
|
|
30
27
|
isExternalFile: () => false,
|
|
31
28
|
};
|
|
@@ -67,52 +64,5 @@ describe('emitGeneratedFiles', () => {
|
|
|
67
64
|
expect(mtimeForDts1).not.toEqual(mtimeForDts3); // not skipped
|
|
68
65
|
expect(mtimeForSourceMap1).not.toEqual(mtimeForSourceMap3); // not skipped
|
|
69
66
|
});
|
|
70
|
-
test('outputs write log', async () => {
|
|
71
|
-
await emitGeneratedFiles({
|
|
72
|
-
...defaultArgs,
|
|
73
|
-
filePath: getFixturePath('/test/1.css'),
|
|
74
|
-
emitDeclarationMap: true,
|
|
75
|
-
silent: false,
|
|
76
|
-
});
|
|
77
|
-
expect(consoleLogSpy).toHaveBeenCalledTimes(2);
|
|
78
|
-
expect(consoleLogSpy).toHaveBeenNthCalledWith(1, `Wrote ${chalk.green('1.css.d.ts')}`);
|
|
79
|
-
expect(consoleLogSpy).toHaveBeenNthCalledWith(2, `Wrote ${chalk.green('1.css.d.ts.map')}`);
|
|
80
|
-
consoleLogSpy.mockClear();
|
|
81
|
-
await emitGeneratedFiles({
|
|
82
|
-
...defaultArgs,
|
|
83
|
-
filePath: getFixturePath('/test/2.css'),
|
|
84
|
-
emitDeclarationMap: false,
|
|
85
|
-
silent: false,
|
|
86
|
-
});
|
|
87
|
-
expect(consoleLogSpy).toHaveBeenCalledTimes(1);
|
|
88
|
-
expect(consoleLogSpy).toHaveBeenNthCalledWith(1, `Wrote ${chalk.green('2.css.d.ts')}`);
|
|
89
|
-
consoleLogSpy.mockClear();
|
|
90
|
-
await emitGeneratedFiles({
|
|
91
|
-
...defaultArgs,
|
|
92
|
-
filePath: getFixturePath('/test/3.css'),
|
|
93
|
-
emitDeclarationMap: false,
|
|
94
|
-
silent: true,
|
|
95
|
-
});
|
|
96
|
-
expect(consoleLogSpy).toHaveBeenCalledTimes(0);
|
|
97
|
-
});
|
|
98
|
-
test('changes working directory by cwd', async () => {
|
|
99
|
-
await emitGeneratedFiles({
|
|
100
|
-
...defaultArgs,
|
|
101
|
-
filePath: getFixturePath('/test/1.css'),
|
|
102
|
-
emitDeclarationMap: false,
|
|
103
|
-
silent: false,
|
|
104
|
-
cwd: getFixturePath('/test'),
|
|
105
|
-
});
|
|
106
|
-
await emitGeneratedFiles({
|
|
107
|
-
...defaultArgs,
|
|
108
|
-
filePath: getFixturePath('/test/1.css'),
|
|
109
|
-
emitDeclarationMap: false,
|
|
110
|
-
silent: false,
|
|
111
|
-
cwd: getFixturePath('/'),
|
|
112
|
-
});
|
|
113
|
-
expect(consoleLogSpy).toHaveBeenCalledTimes(2);
|
|
114
|
-
expect(consoleLogSpy).toHaveBeenNthCalledWith(1, `Wrote ${chalk.green('1.css.d.ts')}`);
|
|
115
|
-
expect(consoleLogSpy).toHaveBeenNthCalledWith(2, `Wrote ${chalk.green('test/1.css.d.ts')}`);
|
|
116
|
-
});
|
|
117
67
|
});
|
|
118
68
|
//# sourceMappingURL=index.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/emitter/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACrC,OAAO,
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/emitter/index.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import { type DistOptions } from './index.js';
|
|
2
1
|
/**
|
|
3
2
|
* Get .d.ts.map file path.
|
|
4
3
|
* @param filePath The path to the source file (i.e. `foo.css`). It is absolute.
|
|
5
|
-
* @param distOptions The distribution option.
|
|
6
4
|
* @returns The path to the .d.ts.map file. It is absolute.
|
|
7
5
|
*/
|
|
8
|
-
export declare function getSourceMapFilePath(filePath: string
|
|
6
|
+
export declare function getSourceMapFilePath(filePath: string): string;
|
|
9
7
|
export declare function generateSourceMappingURLComment(dtsFilePath: string, sourceMapFilePath: string): string;
|
|
@@ -4,11 +4,10 @@ import { getRelativePath } from './index.js';
|
|
|
4
4
|
/**
|
|
5
5
|
* Get .d.ts.map file path.
|
|
6
6
|
* @param filePath The path to the source file (i.e. `foo.css`). It is absolute.
|
|
7
|
-
* @param distOptions The distribution option.
|
|
8
7
|
* @returns The path to the .d.ts.map file. It is absolute.
|
|
9
8
|
*/
|
|
10
|
-
export function getSourceMapFilePath(filePath
|
|
11
|
-
return getDtsFilePath(filePath
|
|
9
|
+
export function getSourceMapFilePath(filePath) {
|
|
10
|
+
return getDtsFilePath(filePath) + '.map';
|
|
12
11
|
}
|
|
13
12
|
export function generateSourceMappingURLComment(dtsFilePath, sourceMapFilePath) {
|
|
14
13
|
return `//# sourceMappingURL=${getRelativePath(dtsFilePath, sourceMapFilePath)}` + EOL;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source-map.js","sourceRoot":"","sources":["../../src/emitter/source-map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"source-map.js","sourceRoot":"","sources":["../../src/emitter/source-map.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE7C;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB;IACnD,OAAO,cAAc,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,WAAmB,EAAE,iBAAyB;IAC5F,OAAO,wBAAwB,eAAe,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE,GAAG,GAAG,CAAC;AACzF,CAAC"}
|
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
import { EOL } from 'os';
|
|
2
2
|
import { getSourceMapFilePath, generateSourceMappingURLComment } from './source-map.js';
|
|
3
3
|
test('getSourceMapFilePath', () => {
|
|
4
|
-
expect(getSourceMapFilePath('/app/src/dir/1.css'
|
|
5
|
-
expect(getSourceMapFilePath('/app/src/dir/1.css', { rootDir: '/app', outDir: '/app/dist' })).toBe('/app/dist/src/dir/1.css.d.ts.map');
|
|
6
|
-
expect(() => getSourceMapFilePath('/tmp/src/dir/1.css', { rootDir: '/app', outDir: '/app/dist' })).toThrow();
|
|
7
|
-
expect(() => getSourceMapFilePath('/app/src/dir/1.css', { rootDir: '/app', outDir: '/tmp/dist' })).toThrow();
|
|
4
|
+
expect(getSourceMapFilePath('/app/src/dir/1.css')).toBe('/app/src/dir/1.css.d.ts.map');
|
|
8
5
|
});
|
|
9
6
|
test('generateSourceMappingURLComment', () => {
|
|
10
7
|
expect(generateSourceMappingURLComment('/app/src/dir/1.css.d.ts', '/app/src/dir/1.css.d.ts.map')).toBe('//# sourceMappingURL=./1.css.d.ts.map' + EOL);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source-map.test.js","sourceRoot":"","sources":["../../src/emitter/source-map.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAExF,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE;IAChC,MAAM,CAAC,oBAAoB,CAAC,oBAAoB,
|
|
1
|
+
{"version":3,"file":"source-map.test.js","sourceRoot":"","sources":["../../src/emitter/source-map.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,oBAAoB,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAExF,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE;IAChC,MAAM,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;AACzF,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC3C,MAAM,CAAC,+BAA+B,CAAC,yBAAyB,EAAE,6BAA6B,CAAC,CAAC,CAAC,IAAI,CACpG,uCAAuC,GAAG,GAAG,CAC9C,CAAC;IACF,MAAM,CAAC,+BAA+B,CAAC,0BAA0B,EAAE,8BAA8B,CAAC,CAAC,CAAC,IAAI,CACtG,6CAA6C,GAAG,GAAG,CACpD,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { parseArgv } from './cli.js';
|
|
2
|
-
export { run } from './runner.js';
|
|
3
|
-
export { type Transformer } from './transformer/index.js';
|
|
2
|
+
export { run, type LocalsConvention } from './runner.js';
|
|
3
|
+
export { type Transformer, type TransformerOptions, type TransformResult, createDefaultTransformer, } from './transformer/index.js';
|
|
4
|
+
export { type Resolver, type ResolverOptions, createDefaultResolver } from './resolver/index.js';
|
|
5
|
+
export { Locator, type LocatorOptions, type LoadResult, type Token, type Location } from './locator/index.js';
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
export { parseArgv } from './cli.js';
|
|
2
2
|
export { run } from './runner.js';
|
|
3
|
+
export { createDefaultTransformer, } from './transformer/index.js';
|
|
4
|
+
export { createDefaultResolver } from './resolver/index.js';
|
|
5
|
+
export { Locator } from './locator/index.js';
|
|
3
6
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,GAAG,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,GAAG,EAAyB,MAAM,aAAa,CAAC;AACzD,OAAO,EAIL,wBAAwB,GACzB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAuC,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AACjG,OAAO,EAAE,OAAO,EAAmE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"go-to-definition.test.js","sourceRoot":"","sources":["../../src/integration-test/go-to-definition.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjE,MAAM,MAAM,GAAG,MAAM,cAAc,EAAE,CAAC;AAEtC,MAAM,cAAc,GAAG;IACrB,OAAO,EAAE,sBAAsB;IAC/B,MAAM,EAAE,IAAI;IACZ,cAAc,EAAE,IAAI;IACpB,GAAG,EAAE,cAAc,CAAC,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"go-to-definition.test.js","sourceRoot":"","sources":["../../src/integration-test/go-to-definition.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,14 +9,14 @@ export declare type Token = {
|
|
|
9
9
|
/** The original locations of the token in the source file. */
|
|
10
10
|
originalLocations: Location[];
|
|
11
11
|
};
|
|
12
|
-
/** The result of `
|
|
12
|
+
/** The result of `Locator#load`. */
|
|
13
13
|
export declare type LoadResult = {
|
|
14
14
|
/** The path of the file imported from the source file with `@import` or `composes`. */
|
|
15
15
|
dependencies: string[];
|
|
16
16
|
/** The tokens exported by the source file. */
|
|
17
17
|
tokens: Token[];
|
|
18
18
|
};
|
|
19
|
-
export declare type
|
|
19
|
+
export declare type LocatorOptions = {
|
|
20
20
|
/** The function to transform source code. */
|
|
21
21
|
transformer?: Transformer | undefined;
|
|
22
22
|
/** The function to resolve the path of the imported file. */
|
|
@@ -25,11 +25,12 @@ export declare type LoaderOptions = {
|
|
|
25
25
|
/** The resolver that throws an exception if resolving fails. */
|
|
26
26
|
export declare type StrictlyResolver = (...args: Parameters<Resolver>) => Promise<string>;
|
|
27
27
|
/** This class collects information on tokens exported from CSS Modules files. */
|
|
28
|
-
export declare class
|
|
28
|
+
export declare class Locator {
|
|
29
29
|
private readonly cache;
|
|
30
30
|
private readonly transformer;
|
|
31
31
|
private readonly resolver;
|
|
32
|
-
|
|
32
|
+
private loading;
|
|
33
|
+
constructor(options?: LocatorOptions);
|
|
33
34
|
/** Returns `true` if the cache is outdated. */
|
|
34
35
|
private isCacheOutdated;
|
|
35
36
|
/**
|
|
@@ -39,4 +40,5 @@ export declare class Loader {
|
|
|
39
40
|
private readCSS;
|
|
40
41
|
/** Returns information about the tokens exported from the CSS Modules file. */
|
|
41
42
|
load(filePath: string): Promise<LoadResult>;
|
|
43
|
+
private _load;
|
|
42
44
|
}
|
|
@@ -23,9 +23,10 @@ function normalizeTokens(tokens) {
|
|
|
23
23
|
}));
|
|
24
24
|
}
|
|
25
25
|
/** This class collects information on tokens exported from CSS Modules files. */
|
|
26
|
-
export class
|
|
26
|
+
export class Locator {
|
|
27
27
|
constructor(options) {
|
|
28
28
|
this.cache = new Map();
|
|
29
|
+
this.loading = false;
|
|
29
30
|
this.transformer = options?.transformer ?? createDefaultTransformer();
|
|
30
31
|
this.resolver = async (specifier, resolverOptions) => {
|
|
31
32
|
const resolver = options?.resolver ?? createDefaultResolver();
|
|
@@ -86,8 +87,15 @@ export class Loader {
|
|
|
86
87
|
}
|
|
87
88
|
/** Returns information about the tokens exported from the CSS Modules file. */
|
|
88
89
|
async load(filePath) {
|
|
89
|
-
|
|
90
|
-
|
|
90
|
+
if (this.loading)
|
|
91
|
+
throw new Error('Cannot call `Locator#load` concurrently.');
|
|
92
|
+
this.loading = true;
|
|
93
|
+
const result = await this._load(filePath).finally(() => {
|
|
94
|
+
this.loading = false;
|
|
95
|
+
});
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
async _load(filePath) {
|
|
91
99
|
if (!(await this.isCacheOutdated(filePath))) {
|
|
92
100
|
const cacheEntry = this.cache.get(filePath);
|
|
93
101
|
return cacheEntry.result;
|
|
@@ -108,7 +116,7 @@ export class Loader {
|
|
|
108
116
|
if (isIgnoredSpecifier(importedSheetPath))
|
|
109
117
|
continue;
|
|
110
118
|
const from = await this.resolver(importedSheetPath, { request: filePath });
|
|
111
|
-
const result = await this.
|
|
119
|
+
const result = await this._load(from);
|
|
112
120
|
const externalTokens = result.tokens;
|
|
113
121
|
dependencies.push(from, ...result.dependencies);
|
|
114
122
|
tokens.push(...externalTokens);
|
|
@@ -133,7 +141,7 @@ export class Loader {
|
|
|
133
141
|
if (isIgnoredSpecifier(declarationDetail.from))
|
|
134
142
|
continue;
|
|
135
143
|
const from = await this.resolver(declarationDetail.from, { request: filePath });
|
|
136
|
-
const result = await this.
|
|
144
|
+
const result = await this._load(from);
|
|
137
145
|
const externalTokens = result.tokens.filter((token) => declarationDetail.tokenNames.includes(token.name));
|
|
138
146
|
dependencies.push(from, ...result.dependencies);
|
|
139
147
|
tokens.push(...externalTokens);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/locator/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,wBAAwB,EAAoB,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EACL,mBAAmB,EACnB,uBAAuB,EACvB,aAAa,EAEb,mCAAmC,EACnC,YAAY,GACb,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,YAAY,EAAiB,MAAM,cAAc,CAAC;AAE3D;;;GAGG;AACH,SAAS,kBAAkB,CAAC,SAAiB;IAC3C,OAAO,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;AAC7E,CAAC;AAuBD,SAAS,eAAe,CAAC,MAAe;IACtC,MAAM,4BAA4B,GAAG,IAAI,GAAG,EAAsB,CAAC;IACnE,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;QAC1B,4BAA4B,CAAC,GAAG,CAC9B,KAAK,CAAC,IAAI,EACV,QAAQ,CAAC,CAAC,GAAG,CAAC,4BAA4B,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,EAAE,CAC3G,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CACzB,CACF,CAAC;KACH;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,iBAAiB,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5F,IAAI;QACJ,iBAAiB;KAClB,CAAC,CAAC,CAAC;AACN,CAAC;AAYD,iFAAiF;AACjF,MAAM,OAAO,OAAO;IAMlB,YAAY,OAAwB;QALnB,UAAK,GAA4B,IAAI,GAAG,EAAE,CAAC;QAGpD,YAAO,GAAG,KAAK,CAAC;QAGtB,IAAI,CAAC,WAAW,GAAG,OAAO,EAAE,WAAW,IAAI,wBAAwB,EAAE,CAAC;QACtE,IAAI,CAAC,QAAQ,GAAG,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,EAAE;YACnD,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,qBAAqB,EAAE,CAAC;YAC9D,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC;YAC5D,IAAI,QAAQ,KAAK,KAAK;gBAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,SAAS,SAAS,eAAe,CAAC,OAAO,IAAI,CAAC,CAAC;YAC7G,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC;IACJ,CAAC;IAED,+CAA+C;IACvC,KAAK,CAAC,eAAe,CAAC,QAAgB;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACrD,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;QAEvC,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC;QACtC,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE;YACrC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YACzC,IAAI,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;YACxB,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACvD,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK;gBAAE,OAAO,IAAI,CAAC;SACxC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,OAAO,CACnB,QAAgB;QAKhB,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAC5G,IAAI,MAAM,KAAK,KAAK;YAAE,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC;QACvE,OAAO;YACL,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,YAAY,EAAE,MAAM,CAAC,YAAY;iBAC9B,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACX,IAAI,OAAO,GAAG,KAAK,QAAQ;oBAAE,OAAO,GAAG,CAAC;gBACxC,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO;oBAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;gBACvF,OAAO,GAAG,CAAC,QAAQ,CAAC;YACtB,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;gBACd,4EAA4E;gBAC5E,wGAAwG;gBACxG,kEAAkE;gBAClE,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAClC,CAAC,CAAC;SACL,CAAC;IACJ,CAAC;IAED,+EAA+E;IAC/E,KAAK,CAAC,IAAI,CAAC,QAAgB;QACzB,IAAI,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9E,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YACrD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACvB,CAAC,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,QAAgB;QAClC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,EAAE;YAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAE,CAAC;YAC7C,OAAO,UAAU,CAAC,MAAM,CAAC;SAC1B;QAED,MAAM,KAAK,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAErD,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAEhE,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QAEhH,oDAAoD;QACpD,yDAAyD;QACzD,MAAM,eAAe,GAAG,MAAM,uBAAuB,CAAC,GAAG,CAAC,CAAC;QAE3D,MAAM,MAAM,GAAY,EAAE,CAAC;QAE3B,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,oBAAoB,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;QAE9E,oCAAoC;QACpC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;YAChC,MAAM,iBAAiB,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,CAAC,iBAAiB;gBAAE,SAAS;YACjC,IAAI,kBAAkB,CAAC,iBAAiB,CAAC;gBAAE,SAAS;YACpD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC3E,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC;YACrC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;SAChC;QAED,kFAAkF;QAClF,KAAK,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,cAAc,EAAE;YACpD,0GAA0G;YAC1G,sFAAsF;YACtF,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC;gBAAE,SAAS;YAE7D,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;YAElE,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,aAAa,CAAC,KAAK;gBACzB,iBAAiB,EAAE,CAAC,gBAAgB,CAAC;aACtC,CAAC,CAAC;SACJ;QAED,iDAAiD;QACjD,KAAK,MAAM,mBAAmB,IAAI,oBAAoB,EAAE;YACtD,MAAM,iBAAiB,GAAG,mCAAmC,CAAC,mBAAmB,CAAC,CAAC;YACnF,IAAI,CAAC,iBAAiB;gBAAE,SAAS;YACjC,IAAI,kBAAkB,CAAC,iBAAiB,CAAC,IAAI,CAAC;gBAAE,SAAS;YACzD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtC,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1G,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;SAChC;QAED,MAAM,MAAM,GAAe;YACzB,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,QAAQ,CAAC;YACpE,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC;SAChC,CAAC;QACF,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"}
|
|
File without changes
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import fs, { readFile, writeFile } from 'fs/promises';
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
2
3
|
import { jest } from '@jest/globals';
|
|
3
4
|
import dedent from 'dedent';
|
|
5
|
+
import { createDefaultTransformer } from '../index.js';
|
|
4
6
|
import { createFixtures, FIXTURE_DIR_PATH, getFixturePath } from '../test/util.js';
|
|
5
7
|
import { sleepSync } from '../util.js';
|
|
6
8
|
const readFileSpy = jest.spyOn(fs, 'readFile');
|
|
@@ -11,9 +13,9 @@ jest.unstable_mockModule('fs/promises', () => ({
|
|
|
11
13
|
}));
|
|
12
14
|
// After the mock of fs/promises is complete, . /index.js after the mock of fs/promises is complete.
|
|
13
15
|
// ref: https://www.coolcomputerclub.com/posts/jest-hoist-await/
|
|
14
|
-
const {
|
|
16
|
+
const { Locator } = await import('./index.js');
|
|
15
17
|
// NOTE: ../test/util.js depends on . /index.js, so it must also be imported dynamically...
|
|
16
|
-
const
|
|
18
|
+
const locator = new Locator();
|
|
17
19
|
afterEach(() => {
|
|
18
20
|
readFileSpy.mockClear();
|
|
19
21
|
});
|
|
@@ -24,7 +26,7 @@ test('basic', async () => {
|
|
|
24
26
|
.b {}
|
|
25
27
|
`,
|
|
26
28
|
});
|
|
27
|
-
const result = await
|
|
29
|
+
const result = await locator.load(getFixturePath('/test/1.css'));
|
|
28
30
|
expect(result).toMatchInlineSnapshot(`
|
|
29
31
|
{
|
|
30
32
|
dependencies: [],
|
|
@@ -69,7 +71,7 @@ test('tracks other files when `@import` is present', async () => {
|
|
|
69
71
|
.d {}
|
|
70
72
|
`,
|
|
71
73
|
});
|
|
72
|
-
const result = await
|
|
74
|
+
const result = await locator.load(getFixturePath('/test/1.css'));
|
|
73
75
|
expect(result).toMatchInlineSnapshot(`
|
|
74
76
|
{
|
|
75
77
|
dependencies: [
|
|
@@ -128,7 +130,7 @@ test('tracks other files when `composes` is present', async () => {
|
|
|
128
130
|
.e {}
|
|
129
131
|
`,
|
|
130
132
|
});
|
|
131
|
-
const result = await
|
|
133
|
+
const result = await locator.load(getFixturePath('/test/1.css'));
|
|
132
134
|
expect(result).toMatchInlineSnapshot(`
|
|
133
135
|
{
|
|
134
136
|
dependencies: ["<fixtures>/test/2.css", "<fixtures>/test/3.css", "<fixtures>/test/4.css"],
|
|
@@ -191,7 +193,7 @@ test('normalizes tokens', async () => {
|
|
|
191
193
|
.c {}
|
|
192
194
|
`,
|
|
193
195
|
});
|
|
194
|
-
const result = await
|
|
196
|
+
const result = await locator.load(getFixturePath('/test/1.css'));
|
|
195
197
|
expect(result).toMatchInlineSnapshot(`
|
|
196
198
|
{
|
|
197
199
|
dependencies: ["<fixtures>/test/2.css", "<fixtures>/test/3.css"],
|
|
@@ -239,7 +241,7 @@ test.failing('returns the result from the cache when the file has not been modif
|
|
|
239
241
|
.d {}
|
|
240
242
|
`,
|
|
241
243
|
});
|
|
242
|
-
await
|
|
244
|
+
await locator.load(getFixturePath('/test/1.css'));
|
|
243
245
|
expect(readFileSpy).toHaveBeenCalledTimes(3);
|
|
244
246
|
expect(readFileSpy).toHaveBeenNthCalledWith(1, '/test/1.css', 'utf-8');
|
|
245
247
|
expect(readFileSpy).toHaveBeenNthCalledWith(2, '/test/2.css', 'utf-8');
|
|
@@ -249,15 +251,15 @@ test.failing('returns the result from the cache when the file has not been modif
|
|
|
249
251
|
sleepSync(1); // wait for the file system to update the mtime
|
|
250
252
|
await writeFile(getFixturePath('/test/2.css'), await readFile(getFixturePath('/test/2.css'), 'utf-8'));
|
|
251
253
|
// `3.css` is not updated, so the cache is used. Therefore, `readFile` is not called.
|
|
252
|
-
await
|
|
254
|
+
await locator.load(getFixturePath('/test/3.css'));
|
|
253
255
|
expect(readFileSpy).toHaveBeenCalledTimes(0);
|
|
254
256
|
// `1.css` is not updated, but dependencies are updated, so the cache is used. Therefore, `readFile` is called.
|
|
255
|
-
await
|
|
257
|
+
await locator.load(getFixturePath('/test/1.css'));
|
|
256
258
|
expect(readFileSpy).toHaveBeenCalledTimes(2);
|
|
257
259
|
expect(readFileSpy).toHaveBeenNthCalledWith(1, '/test/1.css', 'utf-8');
|
|
258
260
|
expect(readFileSpy).toHaveBeenNthCalledWith(2, '/test/2.css', 'utf-8');
|
|
259
261
|
// ``2.css` is updated, but the cache is already available because it was updated in the previous step. Therefore, `readFile` is not called.
|
|
260
|
-
await
|
|
262
|
+
await locator.load(getFixturePath('/test/2.css'));
|
|
261
263
|
expect(readFileSpy).toHaveBeenCalledTimes(2);
|
|
262
264
|
});
|
|
263
265
|
test('ignores the composition of non-existent tokens', async () => {
|
|
@@ -275,7 +277,7 @@ test('ignores the composition of non-existent tokens', async () => {
|
|
|
275
277
|
.b {}
|
|
276
278
|
`,
|
|
277
279
|
});
|
|
278
|
-
const result = await
|
|
280
|
+
const result = await locator.load(getFixturePath('/test/1.css'));
|
|
279
281
|
expect(result.tokens.map((t) => t.name)).toStrictEqual(['a', 'b']);
|
|
280
282
|
});
|
|
281
283
|
test('throws error the composition of non-existent file', async () => {
|
|
@@ -289,13 +291,89 @@ test('throws error the composition of non-existent file', async () => {
|
|
|
289
291
|
`,
|
|
290
292
|
});
|
|
291
293
|
await expect(async () => {
|
|
292
|
-
await
|
|
294
|
+
await locator.load(getFixturePath('/test/1.css')).catch((e) => {
|
|
293
295
|
e.message = e.message.replace(FIXTURE_DIR_PATH, '<fixtures>');
|
|
294
296
|
throw e;
|
|
295
297
|
});
|
|
296
298
|
}).rejects.toThrowError(`Could not resolve './2.css' in '<fixtures>/test/1.css'`);
|
|
297
299
|
});
|
|
298
|
-
|
|
300
|
+
describe('supports sourcemap', () => {
|
|
301
|
+
test('restores original locations from sourcemap', async () => {
|
|
302
|
+
const transformer = createDefaultTransformer();
|
|
303
|
+
const locator = new Locator({ transformer });
|
|
304
|
+
createFixtures({
|
|
305
|
+
'/test/1.scss': dedent `
|
|
306
|
+
.nesting {
|
|
307
|
+
dummy: '';
|
|
308
|
+
.nesting_child {
|
|
309
|
+
dummy: '';
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
`,
|
|
313
|
+
});
|
|
314
|
+
const result = await locator.load(getFixturePath('/test/1.scss'));
|
|
315
|
+
expect(result).toMatchInlineSnapshot(`
|
|
316
|
+
{
|
|
317
|
+
dependencies: [],
|
|
318
|
+
tokens: [
|
|
319
|
+
{
|
|
320
|
+
name: "nesting",
|
|
321
|
+
originalLocations: [
|
|
322
|
+
{ filePath: "<fixtures>/test/1.scss", start: { line: 1, column: 1 }, end: { line: 1, column: 8 } },
|
|
323
|
+
{ filePath: "<fixtures>/test/1.scss", start: { line: 3, column: 3 }, end: { line: 3, column: 10 } },
|
|
324
|
+
],
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
name: "nesting_child",
|
|
328
|
+
originalLocations: [
|
|
329
|
+
{ filePath: "<fixtures>/test/1.scss", start: { line: 3, column: 3 }, end: { line: 3, column: 16 } },
|
|
330
|
+
],
|
|
331
|
+
},
|
|
332
|
+
],
|
|
333
|
+
}
|
|
334
|
+
`);
|
|
335
|
+
});
|
|
336
|
+
test('treats originalLocation as empty if sourcemap is broken', async () => {
|
|
337
|
+
const uuid = randomUUID();
|
|
338
|
+
createFixtures({
|
|
339
|
+
[`/${uuid}/postcss.config.js`]: dedent `
|
|
340
|
+
module.exports = {
|
|
341
|
+
plugins: [],
|
|
342
|
+
};
|
|
343
|
+
`,
|
|
344
|
+
'/test/1.css': dedent `
|
|
345
|
+
.selector_list_a_1, .selector_list_a_2 {}
|
|
346
|
+
/* In postcss, including newlines in the selector list breaks the sourcemap. */
|
|
347
|
+
.selector_list_b_1,
|
|
348
|
+
.selector_list_b_2 {}
|
|
349
|
+
`,
|
|
350
|
+
});
|
|
351
|
+
const transformer = createDefaultTransformer({ postcssConfig: getFixturePath(`/${uuid}/postcss.config.js`) });
|
|
352
|
+
const locator = new Locator({ transformer });
|
|
353
|
+
const result = await locator.load(getFixturePath('/test/1.css'));
|
|
354
|
+
expect(result).toMatchInlineSnapshot(`
|
|
355
|
+
{
|
|
356
|
+
dependencies: [],
|
|
357
|
+
tokens: [
|
|
358
|
+
{
|
|
359
|
+
name: "selector_list_a_1",
|
|
360
|
+
originalLocations: [
|
|
361
|
+
{ filePath: "<fixtures>/test/1.css", start: { line: 1, column: 1 }, end: { line: 1, column: 18 } },
|
|
362
|
+
],
|
|
363
|
+
},
|
|
364
|
+
{
|
|
365
|
+
name: "selector_list_a_2",
|
|
366
|
+
originalLocations: [
|
|
367
|
+
{ filePath: "<fixtures>/test/1.css", start: { line: 1, column: 1 }, end: { line: 1, column: 18 } },
|
|
368
|
+
],
|
|
369
|
+
},
|
|
370
|
+
{ name: "selector_list_b_1", originalLocations: [{}] },
|
|
371
|
+
{ name: "selector_list_b_2", originalLocations: [{}] },
|
|
372
|
+
],
|
|
373
|
+
}
|
|
374
|
+
`);
|
|
375
|
+
});
|
|
376
|
+
});
|
|
299
377
|
test('ignores http(s) protocol file', async () => {
|
|
300
378
|
createFixtures({
|
|
301
379
|
'/test/1.css': dedent `
|
|
@@ -303,7 +381,15 @@ test('ignores http(s) protocol file', async () => {
|
|
|
303
381
|
@import 'https://example.com/path/https.css';
|
|
304
382
|
`,
|
|
305
383
|
});
|
|
306
|
-
const result = await
|
|
384
|
+
const result = await locator.load(getFixturePath('/test/1.css'));
|
|
307
385
|
expect(result.dependencies).toStrictEqual([]);
|
|
308
386
|
});
|
|
387
|
+
test('block concurrent calls to load method', async () => {
|
|
388
|
+
createFixtures({
|
|
389
|
+
'/test/1.css': `.a {}`,
|
|
390
|
+
});
|
|
391
|
+
await expect(async () => {
|
|
392
|
+
await Promise.all([locator.load(getFixturePath('/test/1.css')), locator.load(getFixturePath('/test/1.css'))]);
|
|
393
|
+
}).rejects.toThrowError('Cannot call `Locator#load` concurrently.');
|
|
394
|
+
});
|
|
309
395
|
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/locator/index.test.ts"],"names":[],"mappings":"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"}
|