happy-css-modules 3.0.1 → 3.1.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/package.json +1 -1
- package/src/emitter/dts.test.ts +3 -3
- package/src/emitter/dts.ts +59 -37
- package/src/emitter/index.test.ts +3 -3
- package/src/locator/index.test.ts +143 -48
- package/src/locator/index.ts +51 -23
- package/src/locator/postcss.test.ts +135 -26
- package/src/locator/postcss.ts +120 -36
- package/src/test-util/util.ts +23 -18
- package/src/transformer/less-transformer.test.ts +25 -15
- package/src/transformer/postcss-transformer.test.ts +5 -3
- package/src/transformer/scss-transformer.test.ts +38 -19
- package/dist/cli.d.ts +0 -6
- package/dist/cli.js +0 -121
- package/dist/cli.js.map +0 -1
- package/dist/cli.test.d.ts +0 -1
- package/dist/cli.test.js +0 -66
- package/dist/cli.test.js.map +0 -1
- package/dist/config.d.ts +0 -1
- package/dist/config.js +0 -2
- package/dist/config.js.map +0 -1
- package/dist/emitter/dts.d.ts +0 -14
- package/dist/emitter/dts.js +0 -111
- package/dist/emitter/dts.js.map +0 -1
- package/dist/emitter/dts.test.d.ts +0 -1
- package/dist/emitter/dts.test.js +0 -205
- package/dist/emitter/dts.test.js.map +0 -1
- package/dist/emitter/file-system.d.ts +0 -6
- package/dist/emitter/file-system.js +0 -26
- package/dist/emitter/file-system.js.map +0 -1
- package/dist/emitter/file-system.test.d.ts +0 -1
- package/dist/emitter/file-system.test.js +0 -34
- package/dist/emitter/file-system.test.js.map +0 -1
- package/dist/emitter/index.d.ts +0 -34
- package/dist/emitter/index.js +0 -49
- package/dist/emitter/index.js.map +0 -1
- package/dist/emitter/index.test.d.ts +0 -1
- package/dist/emitter/index.test.js +0 -68
- package/dist/emitter/index.test.js.map +0 -1
- package/dist/emitter/source-map.d.ts +0 -8
- package/dist/emitter/source-map.js +0 -16
- package/dist/emitter/source-map.js.map +0 -1
- package/dist/emitter/source-map.test.d.ts +0 -1
- package/dist/emitter/source-map.test.js +0 -13
- package/dist/emitter/source-map.test.js.map +0 -1
- package/dist/index.d.ts +0 -5
- package/dist/index.js +0 -6
- package/dist/index.js.map +0 -1
- package/dist/integration-test/go-to-definition.test.d.ts +0 -1
- package/dist/integration-test/go-to-definition.test.js +0 -334
- package/dist/integration-test/go-to-definition.test.js.map +0 -1
- package/dist/library/source-map/index.d.ts +0 -8
- package/dist/library/source-map/index.js +0 -5
- package/dist/library/source-map/index.js.map +0 -1
- package/dist/locator/index.d.ts +0 -44
- package/dist/locator/index.js +0 -147
- package/dist/locator/index.js.map +0 -1
- package/dist/locator/index.test.d.ts +0 -1
- package/dist/locator/index.test.js +0 -299
- package/dist/locator/index.test.js.map +0 -1
- package/dist/locator/postcss.d.ts +0 -53
- package/dist/locator/postcss.js +0 -169
- package/dist/locator/postcss.js.map +0 -1
- package/dist/locator/postcss.test.d.ts +0 -1
- package/dist/locator/postcss.test.js +0 -196
- package/dist/locator/postcss.test.js.map +0 -1
- package/dist/logger.d.ts +0 -9
- package/dist/logger.js +0 -28
- package/dist/logger.js.map +0 -1
- package/dist/regression-test/issue-168.test.d.ts +0 -1
- package/dist/regression-test/issue-168.test.js +0 -30
- package/dist/regression-test/issue-168.test.js.map +0 -1
- package/dist/resolver/index.d.ts +0 -22
- package/dist/resolver/index.js +0 -44
- package/dist/resolver/index.js.map +0 -1
- package/dist/resolver/index.test.d.ts +0 -1
- package/dist/resolver/index.test.js +0 -16
- package/dist/resolver/index.test.js.map +0 -1
- package/dist/resolver/node-resolver.d.ts +0 -2
- package/dist/resolver/node-resolver.js +0 -6
- package/dist/resolver/node-resolver.js.map +0 -1
- package/dist/resolver/node-resolver.test.d.ts +0 -1
- package/dist/resolver/node-resolver.test.js +0 -25
- package/dist/resolver/node-resolver.test.js.map +0 -1
- package/dist/resolver/relative-resolver.d.ts +0 -2
- package/dist/resolver/relative-resolver.js +0 -5
- package/dist/resolver/relative-resolver.js.map +0 -1
- package/dist/resolver/relative-resolver.test.d.ts +0 -1
- package/dist/resolver/relative-resolver.test.js +0 -12
- package/dist/resolver/relative-resolver.test.js.map +0 -1
- package/dist/resolver/webpack-resolver.d.ts +0 -24
- package/dist/resolver/webpack-resolver.js +0 -91
- package/dist/resolver/webpack-resolver.js.map +0 -1
- package/dist/resolver/webpack-resolver.test.d.ts +0 -1
- package/dist/resolver/webpack-resolver.test.js +0 -89
- package/dist/resolver/webpack-resolver.test.js.map +0 -1
- package/dist/runner.d.ts +0 -76
- package/dist/runner.js +0 -120
- package/dist/runner.js.map +0 -1
- package/dist/runner.test.d.ts +0 -1
- package/dist/runner.test.js +0 -287
- package/dist/runner.test.js.map +0 -1
- package/dist/test-util/jest/resolver.cjs +0 -31
- package/dist/test-util/jest/resolver.cjs.map +0 -1
- package/dist/test-util/jest/resolver.d.cts +0 -16
- package/dist/test-util/tsserver.d.ts +0 -31
- package/dist/test-util/tsserver.js +0 -112
- package/dist/test-util/tsserver.js.map +0 -1
- package/dist/test-util/util.d.ts +0 -28
- package/dist/test-util/util.js +0 -81
- package/dist/test-util/util.js.map +0 -1
- package/dist/transformer/index.d.ts +0 -30
- package/dist/transformer/index.js +0 -25
- package/dist/transformer/index.js.map +0 -1
- package/dist/transformer/index.test.d.ts +0 -1
- package/dist/transformer/index.test.js +0 -66
- package/dist/transformer/index.test.js.map +0 -1
- package/dist/transformer/less-transformer.d.ts +0 -2
- package/dist/transformer/less-transformer.js +0 -45
- package/dist/transformer/less-transformer.js.map +0 -1
- package/dist/transformer/less-transformer.test.d.ts +0 -1
- package/dist/transformer/less-transformer.test.js +0 -124
- package/dist/transformer/less-transformer.test.js.map +0 -1
- package/dist/transformer/postcss-transformer.d.ts +0 -12
- package/dist/transformer/postcss-transformer.js +0 -32
- package/dist/transformer/postcss-transformer.js.map +0 -1
- package/dist/transformer/postcss-transformer.test.d.ts +0 -1
- package/dist/transformer/postcss-transformer.test.js +0 -176
- package/dist/transformer/postcss-transformer.test.js.map +0 -1
- package/dist/transformer/scss-transformer.d.ts +0 -2
- package/dist/transformer/scss-transformer.js +0 -40
- package/dist/transformer/scss-transformer.js.map +0 -1
- package/dist/transformer/scss-transformer.test.d.ts +0 -1
- package/dist/transformer/scss-transformer.test.js +0 -130
- package/dist/transformer/scss-transformer.test.js.map +0 -1
- package/dist/util.d.ts +0 -21
- package/dist/util.js +0 -72
- package/dist/util.js.map +0 -1
- package/dist/util.test.d.ts +0 -1
- package/dist/util.test.js +0 -74
- package/dist/util.test.js.map +0 -1
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports
|
|
4
|
-
const nativeModule = require('node:module');
|
|
5
|
-
// workaround for https://github.com/facebook/jest/issues/12270#issuecomment-1194746382
|
|
6
|
-
/**
|
|
7
|
-
* @typedef {{
|
|
8
|
-
* basedir: string;
|
|
9
|
-
* conditions?: Array<string>;
|
|
10
|
-
* defaultResolver: (path: string, options: ResolverOptions) => string;
|
|
11
|
-
* extensions?: Array<string>;
|
|
12
|
-
* moduleDirectory?: Array<string>;
|
|
13
|
-
* paths?: Array<string>;
|
|
14
|
-
* packageFilter?: (pkg: any, file: string, dir: string) => any;
|
|
15
|
-
* pathFilter?: (pkg: any, path: string, relativePath: string) => string;
|
|
16
|
-
* rootDir?: string;
|
|
17
|
-
* }} ResolverOptions
|
|
18
|
-
*/
|
|
19
|
-
/** @type {(path: string, options: ResolverOptions) => string} */
|
|
20
|
-
function resolver(module, options) {
|
|
21
|
-
const { basedir, defaultResolver } = options;
|
|
22
|
-
try {
|
|
23
|
-
return defaultResolver(module, options);
|
|
24
|
-
// eslint-disable-next-line no-unused-vars
|
|
25
|
-
}
|
|
26
|
-
catch (_error) {
|
|
27
|
-
return nativeModule.createRequire(basedir).resolve(module);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
module.exports = resolver;
|
|
31
|
-
//# sourceMappingURL=resolver.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.cjs","sourceRoot":"","sources":["../../../src/test-util/jest/resolver.cjs"],"names":[],"mappings":";;AAAA,qGAAqG;AACrG,MAAM,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAE5C,uFAAuF;AAEvF;;;;;;;;;;;;GAYG;AAEH,iEAAiE;AACjE,SAAS,QAAQ,CAAC,MAAM,EAAE,OAAO;IAC/B,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC;IAC7C,IAAI,CAAC;QACH,OAAO,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACxC,0CAA0C;IAC5C,CAAC;IAAC,OAAO,MAAM,EAAE,CAAC;QAChB,OAAO,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export = resolver;
|
|
2
|
-
declare function resolver(path: string, options: ResolverOptions): string;
|
|
3
|
-
declare namespace resolver {
|
|
4
|
-
export { ResolverOptions };
|
|
5
|
-
}
|
|
6
|
-
type ResolverOptions = {
|
|
7
|
-
basedir: string;
|
|
8
|
-
conditions?: Array<string>;
|
|
9
|
-
defaultResolver: (path: string, options: ResolverOptions) => string;
|
|
10
|
-
extensions?: Array<string>;
|
|
11
|
-
moduleDirectory?: Array<string>;
|
|
12
|
-
paths?: Array<string>;
|
|
13
|
-
packageFilter?: (pkg: any, file: string, dir: string) => any;
|
|
14
|
-
pathFilter?: (pkg: any, path: string, relativePath: string) => string;
|
|
15
|
-
rootDir?: string;
|
|
16
|
-
};
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
type Definition = {
|
|
2
|
-
/** The path of the destination file */
|
|
3
|
-
file: string;
|
|
4
|
-
/** The text at definition destination */
|
|
5
|
-
text: string;
|
|
6
|
-
/** inclusive */
|
|
7
|
-
start: {
|
|
8
|
-
/** line, 1-based */
|
|
9
|
-
line: number;
|
|
10
|
-
/** column, 1-based */
|
|
11
|
-
offset: number;
|
|
12
|
-
};
|
|
13
|
-
/** exclusive */
|
|
14
|
-
end: {
|
|
15
|
-
/** line, 1-based */
|
|
16
|
-
line: number;
|
|
17
|
-
/** column, 1-based */
|
|
18
|
-
offset: number;
|
|
19
|
-
};
|
|
20
|
-
};
|
|
21
|
-
export declare function createTSServer(): {
|
|
22
|
-
getIdentifierDefinitions(filePath: string, identifier: string): Promise<Definition[]>;
|
|
23
|
-
getMultipleIdentifierDefinitions(filePath: string, identifiers: string[]): Promise<{
|
|
24
|
-
identifier: string;
|
|
25
|
-
definitions: Definition[];
|
|
26
|
-
}[]>;
|
|
27
|
-
getModuleDefinitions(filePath: string): Promise<Definition[]>;
|
|
28
|
-
refreshCache(): Promise<void>;
|
|
29
|
-
exit: () => Promise<void>;
|
|
30
|
-
};
|
|
31
|
-
export {};
|
|
@@ -1,112 +0,0 @@
|
|
|
1
|
-
import { readFileSync } from 'fs';
|
|
2
|
-
import { mkdir, writeFile as nativeWriteFile } from 'fs/promises';
|
|
3
|
-
import { dirname } from 'path';
|
|
4
|
-
import { fileURLToPath } from 'url';
|
|
5
|
-
import serverHarness from '@typescript/server-harness';
|
|
6
|
-
import { glob } from 'glob';
|
|
7
|
-
import { resolve } from 'import-meta-resolve';
|
|
8
|
-
import lineColumn from 'line-column';
|
|
9
|
-
import { getFixturePath } from './util.js';
|
|
10
|
-
async function writeFile(path, content) {
|
|
11
|
-
await mkdir(dirname(path), { recursive: true });
|
|
12
|
-
return nativeWriteFile(path, content, 'utf8');
|
|
13
|
-
}
|
|
14
|
-
export function createTSServer() {
|
|
15
|
-
const server = serverHarness.launchServer(fileURLToPath(resolve('typescript/lib/tsserver.js', import.meta.url)), [
|
|
16
|
-
// ATA generates some extra network traffic and isn't usually relevant when profiling
|
|
17
|
-
'--disableAutomaticTypingAcquisition',
|
|
18
|
-
]);
|
|
19
|
-
return {
|
|
20
|
-
async getIdentifierDefinitions(filePath, identifier) {
|
|
21
|
-
const results = await this.getMultipleIdentifierDefinitions(filePath, [identifier]);
|
|
22
|
-
return results[0].definitions;
|
|
23
|
-
},
|
|
24
|
-
async getMultipleIdentifierDefinitions(filePath, identifiers) {
|
|
25
|
-
const tmpFilePath = getFixturePath('/server-harness/tmp.ts');
|
|
26
|
-
const tmpFileContent = [
|
|
27
|
-
`import styles from '${filePath}';`,
|
|
28
|
-
...identifiers.map((identifier) => `styles.${identifier};`),
|
|
29
|
-
].join('\n');
|
|
30
|
-
await writeFile(tmpFilePath, tmpFileContent);
|
|
31
|
-
await this.refreshCache();
|
|
32
|
-
const results = [];
|
|
33
|
-
for (let i = 0; i < identifiers.length; i++) {
|
|
34
|
-
// eslint-disable-next-line no-await-in-loop
|
|
35
|
-
const response = await server.message({
|
|
36
|
-
seq: 0,
|
|
37
|
-
type: 'request',
|
|
38
|
-
command: 'definition',
|
|
39
|
-
arguments: {
|
|
40
|
-
file: tmpFilePath,
|
|
41
|
-
line: i + 2, // line, 1-based
|
|
42
|
-
offset: 8, // column, 1-based
|
|
43
|
-
},
|
|
44
|
-
});
|
|
45
|
-
const definitions = response.body.map((definition) => {
|
|
46
|
-
const { file, start, end } = definition;
|
|
47
|
-
const fileContent = readFileSync(file, 'utf-8');
|
|
48
|
-
const startIndex = lineColumn(fileContent).toIndex(start.line, start.offset);
|
|
49
|
-
const endIndex = lineColumn(fileContent).toIndex(end.line, end.offset);
|
|
50
|
-
const text = fileContent.slice(startIndex, endIndex);
|
|
51
|
-
return { file, text, start, end };
|
|
52
|
-
});
|
|
53
|
-
results.push({ identifier: identifiers[i], definitions });
|
|
54
|
-
}
|
|
55
|
-
return results;
|
|
56
|
-
},
|
|
57
|
-
async getModuleDefinitions(filePath) {
|
|
58
|
-
await this.refreshCache();
|
|
59
|
-
const tmpFilePath = getFixturePath('/server-harness/tmp.ts');
|
|
60
|
-
const tmpFileContent = `import styles from '${filePath}';`;
|
|
61
|
-
await writeFile(tmpFilePath, tmpFileContent);
|
|
62
|
-
await this.refreshCache();
|
|
63
|
-
const response = await server.message({
|
|
64
|
-
seq: 0,
|
|
65
|
-
type: 'request',
|
|
66
|
-
command: 'definition',
|
|
67
|
-
arguments: {
|
|
68
|
-
file: tmpFilePath,
|
|
69
|
-
line: 1, // line, 1-based
|
|
70
|
-
offset: 20, // column, 1-based
|
|
71
|
-
},
|
|
72
|
-
});
|
|
73
|
-
const definitions = response.body.map((definition) => {
|
|
74
|
-
const { file, start, end } = definition;
|
|
75
|
-
const fileContent = readFileSync(file, 'utf-8');
|
|
76
|
-
const startIndex = lineColumn(fileContent).toIndex(start.line, start.offset);
|
|
77
|
-
const endIndex = lineColumn(fileContent).toIndex(end.line, end.offset);
|
|
78
|
-
const text = fileContent.slice(startIndex, endIndex);
|
|
79
|
-
return { file, text, start, end };
|
|
80
|
-
});
|
|
81
|
-
return definitions;
|
|
82
|
-
},
|
|
83
|
-
async refreshCache() {
|
|
84
|
-
// tsserver caches the contents of opened files.
|
|
85
|
-
// When a file is updated, its cache remains with the old content.
|
|
86
|
-
// Therefore we need to overwrite the cache with the latest content.
|
|
87
|
-
const fixtureFilePaths = await glob(getFixturePath('/**/*.ts'), { dot: true });
|
|
88
|
-
// latest contents
|
|
89
|
-
const openFiles = fixtureFilePaths.map((filePath) => ({
|
|
90
|
-
file: filePath,
|
|
91
|
-
fileContent: readFileSync(filePath, 'utf-8'),
|
|
92
|
-
projectRootPath: getFixturePath('/server-harness'),
|
|
93
|
-
scriptKindName: 'TS', // It's easy to get this wrong when copy-pasting
|
|
94
|
-
}));
|
|
95
|
-
// override the cache
|
|
96
|
-
await server.message({
|
|
97
|
-
seq: 0,
|
|
98
|
-
type: 'request',
|
|
99
|
-
command: 'updateOpen',
|
|
100
|
-
arguments: {
|
|
101
|
-
changedFiles: [],
|
|
102
|
-
closedFiles: [],
|
|
103
|
-
openFiles,
|
|
104
|
-
},
|
|
105
|
-
});
|
|
106
|
-
},
|
|
107
|
-
exit: async () => {
|
|
108
|
-
await server.message({ command: 'exit' });
|
|
109
|
-
},
|
|
110
|
-
};
|
|
111
|
-
}
|
|
112
|
-
//# sourceMappingURL=tsserver.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tsserver.js","sourceRoot":"","sources":["../../src/test-util/tsserver.ts"],"names":[],"mappings":"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"}
|
package/dist/test-util/util.d.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { type Root, type Rule, type AtRule } from 'postcss';
|
|
2
|
-
import { type ClassName } from 'postcss-selector-parser';
|
|
3
|
-
import { type Token, type Location } from '../locator/index.js';
|
|
4
|
-
export declare const FIXTURE_DIR_PATH: string;
|
|
5
|
-
export declare function createRoot(code: string, from?: string): Root;
|
|
6
|
-
export declare function createAtImports(root: Root): AtRule[];
|
|
7
|
-
export declare function createClassSelectors(root: Root): {
|
|
8
|
-
rule: Rule;
|
|
9
|
-
classSelector: ClassName;
|
|
10
|
-
}[];
|
|
11
|
-
export declare function fakeToken(args: {
|
|
12
|
-
name: Token['name'];
|
|
13
|
-
originalLocations: {
|
|
14
|
-
filePath?: Location['filePath'];
|
|
15
|
-
start?: Location['start'];
|
|
16
|
-
}[];
|
|
17
|
-
}): Token;
|
|
18
|
-
export declare function waitForAsyncTask(ms?: number): Promise<void>;
|
|
19
|
-
export declare function exists(path: string): Promise<boolean>;
|
|
20
|
-
type File = string;
|
|
21
|
-
type DirectoryItem = File | DirectoryItems;
|
|
22
|
-
type DirectoryItems = {
|
|
23
|
-
[name: string]: DirectoryItem;
|
|
24
|
-
};
|
|
25
|
-
export declare function createFixtures(items: DirectoryItems): void;
|
|
26
|
-
export declare function removeFixtures(): void;
|
|
27
|
-
export declare function getFixturePath(path: string): string;
|
|
28
|
-
export {};
|
package/dist/test-util/util.js
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
import { constants, mkdirSync, realpathSync, rmSync, writeFileSync } from 'fs';
|
|
2
|
-
import { access } from 'fs/promises';
|
|
3
|
-
import { tmpdir } from 'os';
|
|
4
|
-
import { dirname, join, resolve } from 'path';
|
|
5
|
-
import postcss from 'postcss';
|
|
6
|
-
import { collectNodes } from '../locator/index.js';
|
|
7
|
-
import { sleepSync } from '../util.js';
|
|
8
|
-
export const FIXTURE_DIR_PATH = resolve(realpathSync(tmpdir()), 'happy-css-modules/fixtures', process.env['JEST_WORKER_ID']);
|
|
9
|
-
export function createRoot(code, from) {
|
|
10
|
-
return postcss.parse(code, { from: from || '/test/test.css' });
|
|
11
|
-
}
|
|
12
|
-
export function createAtImports(root) {
|
|
13
|
-
return collectNodes(root).atImports;
|
|
14
|
-
}
|
|
15
|
-
export function createClassSelectors(root) {
|
|
16
|
-
return collectNodes(root).classSelectors;
|
|
17
|
-
}
|
|
18
|
-
export function fakeToken(args) {
|
|
19
|
-
return {
|
|
20
|
-
name: args.name,
|
|
21
|
-
originalLocations: args.originalLocations.map((location) => {
|
|
22
|
-
if (location.filePath === undefined || location.start === undefined) {
|
|
23
|
-
return { filePath: undefined, start: undefined, end: undefined };
|
|
24
|
-
}
|
|
25
|
-
else {
|
|
26
|
-
return {
|
|
27
|
-
filePath: location.filePath ?? getFixturePath('/test/1.css'),
|
|
28
|
-
start: location.start,
|
|
29
|
-
end: {
|
|
30
|
-
line: location.start.line,
|
|
31
|
-
column: location.start.column + args.name.length - 1,
|
|
32
|
-
},
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
}),
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
export async function waitForAsyncTask(ms) {
|
|
39
|
-
await new Promise((resolve) => {
|
|
40
|
-
setTimeout(resolve, ms ?? 0);
|
|
41
|
-
});
|
|
42
|
-
}
|
|
43
|
-
export async function exists(path) {
|
|
44
|
-
try {
|
|
45
|
-
await access(path, constants.F_OK);
|
|
46
|
-
return true;
|
|
47
|
-
}
|
|
48
|
-
catch (e) {
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
function isFile(item) {
|
|
53
|
-
return typeof item === 'string';
|
|
54
|
-
}
|
|
55
|
-
export function createFixtures(items) {
|
|
56
|
-
function createFixturesImpl(items, baseDir) {
|
|
57
|
-
for (const [name, item] of Object.entries(items)) {
|
|
58
|
-
const path = join(baseDir, name);
|
|
59
|
-
if (isFile(item)) {
|
|
60
|
-
mkdirSync(dirname(path), { recursive: true });
|
|
61
|
-
if (typeof item === 'string') {
|
|
62
|
-
writeFileSync(path, item);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
mkdirSync(path, { recursive: true });
|
|
67
|
-
createFixturesImpl(item, path);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
removeFixtures();
|
|
72
|
-
sleepSync(2); // Wait 2 ms for mtime to change from the previous fixture.
|
|
73
|
-
createFixturesImpl(items, FIXTURE_DIR_PATH);
|
|
74
|
-
}
|
|
75
|
-
export function removeFixtures() {
|
|
76
|
-
rmSync(FIXTURE_DIR_PATH, { recursive: true, force: true });
|
|
77
|
-
}
|
|
78
|
-
export function getFixturePath(path) {
|
|
79
|
-
return join(FIXTURE_DIR_PATH, path);
|
|
80
|
-
}
|
|
81
|
-
//# sourceMappingURL=util.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/test-util/util.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" resolution-mode="require"/>
|
|
2
|
-
import type { StrictlyResolver } from '../locator/index.js';
|
|
3
|
-
import type { PostcssTransformerOptions } from './postcss-transformer.js';
|
|
4
|
-
/**
|
|
5
|
-
* The value returned from the transformer.
|
|
6
|
-
* `false` means to skip transpiling on that file.
|
|
7
|
-
*/
|
|
8
|
-
export type TransformResult = {
|
|
9
|
-
/** The transformed code. */
|
|
10
|
-
css: string;
|
|
11
|
-
/** The source map from the transformed code to the original code. */
|
|
12
|
-
map: string | object;
|
|
13
|
-
dependencies: (string | URL)[];
|
|
14
|
-
} | false;
|
|
15
|
-
export type TransformerOptions = {
|
|
16
|
-
/** The path of the file to transform. */
|
|
17
|
-
from: string;
|
|
18
|
-
/** The function to resolve the path of the imported file. */
|
|
19
|
-
resolver: StrictlyResolver;
|
|
20
|
-
/**
|
|
21
|
-
* Whether the specifier should be ignored.
|
|
22
|
-
* For example, specifiers starting with `http://` or `https://` should be ignored.
|
|
23
|
-
*/
|
|
24
|
-
isIgnoredSpecifier: (specifier: string) => boolean;
|
|
25
|
-
};
|
|
26
|
-
/** The function to transform source code. */
|
|
27
|
-
export type Transformer = (source: string, options: TransformerOptions) => TransformResult | Promise<TransformResult>;
|
|
28
|
-
export declare const handleImportError: (packageName: string) => (e: unknown) => never;
|
|
29
|
-
export type DefaultTransformerOptions = PostcssTransformerOptions;
|
|
30
|
-
export declare const createDefaultTransformer: (defaultTransformerOptions?: DefaultTransformerOptions) => Transformer;
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { createLessTransformer } from './less-transformer.js';
|
|
2
|
-
import { createPostcssTransformer } from './postcss-transformer.js';
|
|
3
|
-
import { createScssTransformer } from './scss-transformer.js';
|
|
4
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars -- TODO: pass `e` to Error's cause option
|
|
5
|
-
export const handleImportError = (packageName) => (e) => {
|
|
6
|
-
throw new Error(`${packageName} import failed. Did you forget to \`npm install -D ${packageName}\`?`);
|
|
7
|
-
};
|
|
8
|
-
export const createDefaultTransformer = (defaultTransformerOptions) => {
|
|
9
|
-
const scssTransformer = createScssTransformer();
|
|
10
|
-
const lessTransformer = createLessTransformer();
|
|
11
|
-
const postcssTransformer = createPostcssTransformer(defaultTransformerOptions);
|
|
12
|
-
return async (source, options) => {
|
|
13
|
-
if (options.from.endsWith('.scss')) {
|
|
14
|
-
return scssTransformer(source, options);
|
|
15
|
-
}
|
|
16
|
-
else if (options.from.endsWith('.less')) {
|
|
17
|
-
return lessTransformer(source, options);
|
|
18
|
-
}
|
|
19
|
-
else {
|
|
20
|
-
// TODO: Support multi-stage transformations by sass and less.
|
|
21
|
-
return postcssTransformer(source, options);
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transformer/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AA+B9D,uGAAuG;AACvG,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,WAAmB,EAAE,EAAE,CAAC,CAAC,CAAU,EAAE,EAAE;IACvE,MAAM,IAAI,KAAK,CAAC,GAAG,WAAW,sDAAsD,WAAW,KAAK,CAAC,CAAC;AACxG,CAAC,CAAC;AAIF,MAAM,CAAC,MAAM,wBAAwB,GAA2E,CAC9G,yBAAyB,EACzB,EAAE;IACF,MAAM,eAAe,GAAG,qBAAqB,EAAE,CAAC;IAChD,MAAM,eAAe,GAAG,qBAAqB,EAAE,CAAC;IAChD,MAAM,kBAAkB,GAAG,wBAAwB,CAAC,yBAAyB,CAAC,CAAC;IAC/E,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;QAC/B,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACnC,OAAO,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;aAAM,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1C,OAAO,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC1C,CAAC;aAAM,CAAC;YACN,8DAA8D;YAC9D,OAAO,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import { createRequire } from 'node:module';
|
|
3
|
-
import dedent from 'dedent';
|
|
4
|
-
import { Locator } from '../locator/index.js';
|
|
5
|
-
import { createFixtures, getFixturePath } from '../test-util/util.js';
|
|
6
|
-
import { createDefaultTransformer } from './index.js';
|
|
7
|
-
const require = createRequire(import.meta.url);
|
|
8
|
-
const cwd = getFixturePath('/');
|
|
9
|
-
const locator = new Locator({ transformer: createDefaultTransformer({ cwd }) });
|
|
10
|
-
test('processes .scss with scss transformer', async () => {
|
|
11
|
-
createFixtures({
|
|
12
|
-
'/test/1.scss': dedent `
|
|
13
|
-
.a {
|
|
14
|
-
// scss feature test (nesting)
|
|
15
|
-
.a_1 { dummy: ''; }
|
|
16
|
-
}
|
|
17
|
-
`,
|
|
18
|
-
});
|
|
19
|
-
const result = await locator.load(getFixturePath('/test/1.scss'));
|
|
20
|
-
expect(result.tokens.map((token) => token.name)).toStrictEqual(['a', 'a_1']);
|
|
21
|
-
});
|
|
22
|
-
test('processes .less with less transformer', async () => {
|
|
23
|
-
createFixtures({
|
|
24
|
-
'/test/1.less': dedent `
|
|
25
|
-
.a {
|
|
26
|
-
// less feature test (nesting)
|
|
27
|
-
.a_1 { dummy: ''; }
|
|
28
|
-
}
|
|
29
|
-
`,
|
|
30
|
-
});
|
|
31
|
-
const result = await locator.load(getFixturePath('/test/1.less'));
|
|
32
|
-
expect(result.tokens.map((token) => token.name)).toStrictEqual(['a', 'a_1']);
|
|
33
|
-
});
|
|
34
|
-
test('processes .css with postcss transformer if postcssrc is found', async () => {
|
|
35
|
-
// if postcssrc is not found
|
|
36
|
-
const locator1 = new Locator({ transformer: createDefaultTransformer() });
|
|
37
|
-
createFixtures({
|
|
38
|
-
'/test/1.css': dedent `
|
|
39
|
-
$prefix: foo;
|
|
40
|
-
.$(prefix)_bar {}
|
|
41
|
-
`,
|
|
42
|
-
});
|
|
43
|
-
const result1 = await locator1.load(getFixturePath('/test/1.css'));
|
|
44
|
-
expect(result1.tokens.map((token) => token.name)).toStrictEqual(['$(prefix)']);
|
|
45
|
-
// if postcssrc is found
|
|
46
|
-
const uuid = randomUUID();
|
|
47
|
-
const locator2 = new Locator({
|
|
48
|
-
transformer: createDefaultTransformer({ cwd, postcssConfig: `${uuid}/postcss.config.js` }),
|
|
49
|
-
});
|
|
50
|
-
createFixtures({
|
|
51
|
-
[`/${uuid}/postcss.config.js`]: dedent `
|
|
52
|
-
module.exports = {
|
|
53
|
-
plugins: [
|
|
54
|
-
require('${require.resolve('postcss-simple-vars')}'),
|
|
55
|
-
],
|
|
56
|
-
};
|
|
57
|
-
`,
|
|
58
|
-
'/test/1.css': dedent `
|
|
59
|
-
$prefix: foo;
|
|
60
|
-
.$(prefix)_bar {}
|
|
61
|
-
`,
|
|
62
|
-
});
|
|
63
|
-
const result2 = await locator2.load(getFixturePath('/test/1.css'));
|
|
64
|
-
expect(result2.tokens.map((token) => token.name)).toStrictEqual(['foo_bar']);
|
|
65
|
-
});
|
|
66
|
-
//# sourceMappingURL=index.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/transformer/index.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { handleImportError } from './index.js';
|
|
2
|
-
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
3
|
-
function createLessPluginResolver(Less, options) {
|
|
4
|
-
class ResolverFileManager extends Less.FileManager {
|
|
5
|
-
constructor(options) {
|
|
6
|
-
super();
|
|
7
|
-
this.options = options;
|
|
8
|
-
}
|
|
9
|
-
supports() {
|
|
10
|
-
return true;
|
|
11
|
-
}
|
|
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 };
|
|
16
|
-
const resolved = await this.options.resolver(filename, { request: currentDirectory });
|
|
17
|
-
return super.loadFile(resolved, currentDirectory, options, environment);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
class LessPluginResolver {
|
|
21
|
-
constructor(options) {
|
|
22
|
-
this.minVersion = [2, 1, 1];
|
|
23
|
-
this.options = options;
|
|
24
|
-
}
|
|
25
|
-
install(less, pluginManager) {
|
|
26
|
-
pluginManager.addFileManager(new ResolverFileManager(this.options));
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
return new LessPluginResolver(options);
|
|
30
|
-
}
|
|
31
|
-
export const createLessTransformer = () => {
|
|
32
|
-
let less;
|
|
33
|
-
return async (source, options) => {
|
|
34
|
-
// eslint-disable-next-line require-atomic-updates
|
|
35
|
-
less ??= (await import('less').catch(handleImportError('less'))).default;
|
|
36
|
-
const result = await less.render(source, {
|
|
37
|
-
filename: options.from,
|
|
38
|
-
sourceMap: {},
|
|
39
|
-
plugins: [createLessPluginResolver(less, options)],
|
|
40
|
-
syncImport: false, // Don't use `Less.FileManager#loadFileSync`.
|
|
41
|
-
});
|
|
42
|
-
return { css: result.css, map: result.map, dependencies: result.imports };
|
|
43
|
-
};
|
|
44
|
-
};
|
|
45
|
-
//# sourceMappingURL=less-transformer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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,kDAAkD;QAClD,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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
import { jest } from '@jest/globals';
|
|
2
|
-
import dedent from 'dedent';
|
|
3
|
-
import { Locator } from '../locator/index.js';
|
|
4
|
-
import { createFixtures, getFixturePath } from '../test-util/util.js';
|
|
5
|
-
import { createLessTransformer } from './less-transformer.js';
|
|
6
|
-
const locator = new Locator({ transformer: createLessTransformer() });
|
|
7
|
-
const loadSpy = jest.spyOn(locator, 'load');
|
|
8
|
-
afterEach(() => {
|
|
9
|
-
loadSpy.mockClear();
|
|
10
|
-
});
|
|
11
|
-
test('handles less features', async () => {
|
|
12
|
-
createFixtures({
|
|
13
|
-
'/test/1.less': dedent `
|
|
14
|
-
@import './2.less'; // less feature test (@use)
|
|
15
|
-
.a_1 { dummy: ''; }
|
|
16
|
-
.a_2 {
|
|
17
|
-
dummy: '';
|
|
18
|
-
// less feature test (nesting)
|
|
19
|
-
.a_2_1 { dummy: ''; }
|
|
20
|
-
&_2 { dummy: ''; }
|
|
21
|
-
.b_1();
|
|
22
|
-
.b_2();
|
|
23
|
-
}
|
|
24
|
-
`,
|
|
25
|
-
'/test/2.less': dedent `
|
|
26
|
-
.b_1 { dummy: ''; }
|
|
27
|
-
.b_2() { dummy: ''; }
|
|
28
|
-
`,
|
|
29
|
-
'/test/3.less': dedent `
|
|
30
|
-
.c { dummy: ''; }
|
|
31
|
-
`,
|
|
32
|
-
});
|
|
33
|
-
const result = await locator.load(getFixturePath('/test/1.less'));
|
|
34
|
-
// FIXME: The end position of 'a_2_2' is incorrect.
|
|
35
|
-
expect(result).toMatchInlineSnapshot(`
|
|
36
|
-
{
|
|
37
|
-
dependencies: ["<fixtures>/test/2.less"],
|
|
38
|
-
tokens: [
|
|
39
|
-
{
|
|
40
|
-
name: "b_1",
|
|
41
|
-
originalLocations: [
|
|
42
|
-
{ filePath: "<fixtures>/test/2.less", start: { line: 1, column: 1 }, end: { line: 1, column: 4 } },
|
|
43
|
-
],
|
|
44
|
-
},
|
|
45
|
-
{
|
|
46
|
-
name: "a_1",
|
|
47
|
-
originalLocations: [
|
|
48
|
-
{ filePath: "<fixtures>/test/1.less", start: { line: 2, column: 1 }, end: { line: 2, column: 4 } },
|
|
49
|
-
],
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
name: "a_2",
|
|
53
|
-
originalLocations: [
|
|
54
|
-
{ filePath: "<fixtures>/test/1.less", start: { line: 3, column: 1 }, end: { line: 3, column: 4 } },
|
|
55
|
-
],
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
name: "a_2_1",
|
|
59
|
-
originalLocations: [
|
|
60
|
-
{ filePath: "<fixtures>/test/1.less", start: { line: 6, column: 3 }, end: { line: 6, column: 8 } },
|
|
61
|
-
],
|
|
62
|
-
},
|
|
63
|
-
{
|
|
64
|
-
name: "a_2_2",
|
|
65
|
-
originalLocations: [
|
|
66
|
-
{ filePath: "<fixtures>/test/1.less", start: { line: 7, column: 3 }, end: { line: 7, column: 8 } },
|
|
67
|
-
],
|
|
68
|
-
},
|
|
69
|
-
],
|
|
70
|
-
}
|
|
71
|
-
`);
|
|
72
|
-
});
|
|
73
|
-
test('tracks dependencies that have been pre-bundled by less compiler', async () => {
|
|
74
|
-
createFixtures({
|
|
75
|
-
'/test/1.less': dedent `
|
|
76
|
-
@import './2.less';
|
|
77
|
-
@import './3.less';
|
|
78
|
-
`,
|
|
79
|
-
'/test/2.less': dedent `
|
|
80
|
-
`,
|
|
81
|
-
'/test/3.less': dedent `
|
|
82
|
-
@import './4.less';
|
|
83
|
-
`,
|
|
84
|
-
'/test/4.less': dedent `
|
|
85
|
-
`,
|
|
86
|
-
});
|
|
87
|
-
const result = await locator.load(getFixturePath('/test/1.less'));
|
|
88
|
-
// The files imported using @import are pre-bundled by the compiler.
|
|
89
|
-
// Therefore, `Locator#load` is not called to process other files.
|
|
90
|
-
expect(loadSpy).toBeCalledTimes(1);
|
|
91
|
-
expect(loadSpy).toHaveBeenNthCalledWith(1, getFixturePath('/test/1.less'));
|
|
92
|
-
// The files pre-bundled by the compiler are also included in `result.dependencies`
|
|
93
|
-
// eslint-disable-next-line @typescript-eslint/require-array-sort-compare
|
|
94
|
-
expect(result.dependencies.sort()).toStrictEqual(
|
|
95
|
-
// eslint-disable-next-line @typescript-eslint/require-array-sort-compare
|
|
96
|
-
['/test/2.less', '/test/3.less', '/test/4.less'].map(getFixturePath).sort());
|
|
97
|
-
});
|
|
98
|
-
test('resolves specifier using resolver', async () => {
|
|
99
|
-
createFixtures({
|
|
100
|
-
'/test/1.less': dedent `
|
|
101
|
-
@import 'package-1';
|
|
102
|
-
@import 'package-2';
|
|
103
|
-
`,
|
|
104
|
-
'/node_modules/package-1/index.css': `.a {}`,
|
|
105
|
-
'/node_modules/package-2/index.less': `.a {}`,
|
|
106
|
-
});
|
|
107
|
-
const result = await locator.load(getFixturePath('/test/1.less'));
|
|
108
|
-
// eslint-disable-next-line @typescript-eslint/require-array-sort-compare
|
|
109
|
-
expect(result.dependencies.sort()).toStrictEqual(
|
|
110
|
-
// eslint-disable-next-line @typescript-eslint/require-array-sort-compare
|
|
111
|
-
[getFixturePath('/node_modules/package-1/index.css'), getFixturePath('/node_modules/package-2/index.less')].sort());
|
|
112
|
-
});
|
|
113
|
-
test('ignores http(s) protocol file', async () => {
|
|
114
|
-
createFixtures({
|
|
115
|
-
'/test/1.less': dedent `
|
|
116
|
-
@import 'http://example.com/path/http.css';
|
|
117
|
-
@import 'https://example.com/path/https.css';
|
|
118
|
-
@import 'https://example.com/path/less.less';
|
|
119
|
-
`,
|
|
120
|
-
});
|
|
121
|
-
const result = await locator.load(getFixturePath('/test/1.less'));
|
|
122
|
-
expect(result.dependencies).toStrictEqual([]);
|
|
123
|
-
});
|
|
124
|
-
//# sourceMappingURL=less-transformer.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"less-transformer.test.js","sourceRoot":"","sources":["../../src/transformer/less-transformer.test.ts"],"names":[],"mappings":"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"}
|