happy-css-modules 3.1.0 → 3.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.d.ts +6 -0
- package/dist/cli.js +127 -0
- package/dist/cli.js.map +1 -0
- package/dist/cli.test.d.ts +1 -0
- package/dist/cli.test.js +66 -0
- package/dist/cli.test.js.map +1 -0
- package/dist/config.d.ts +1 -0
- package/dist/config.js +2 -0
- package/dist/config.js.map +1 -0
- package/dist/emitter/dts.d.ts +15 -0
- package/dist/emitter/dts.js +134 -0
- package/dist/emitter/dts.js.map +1 -0
- package/dist/emitter/dts.test.d.ts +1 -0
- package/dist/emitter/dts.test.js +206 -0
- package/dist/emitter/dts.test.js.map +1 -0
- package/dist/emitter/file-system.d.ts +6 -0
- package/dist/emitter/file-system.js +26 -0
- package/dist/emitter/file-system.js.map +1 -0
- package/dist/emitter/file-system.test.d.ts +1 -0
- package/dist/emitter/file-system.test.js +34 -0
- package/dist/emitter/file-system.test.js.map +1 -0
- package/dist/emitter/index.d.ts +42 -0
- package/dist/emitter/index.js +49 -0
- package/dist/emitter/index.js.map +1 -0
- package/dist/emitter/index.test.d.ts +1 -0
- package/dist/emitter/index.test.js +76 -0
- package/dist/emitter/index.test.js.map +1 -0
- package/dist/emitter/source-map.d.ts +10 -0
- package/dist/emitter/source-map.js +17 -0
- package/dist/emitter/source-map.js.map +1 -0
- package/dist/emitter/source-map.test.d.ts +1 -0
- package/dist/emitter/source-map.test.js +13 -0
- package/dist/emitter/source-map.test.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/integration-test/go-to-definition.test.d.ts +1 -0
- package/dist/integration-test/go-to-definition.test.js +334 -0
- package/dist/integration-test/go-to-definition.test.js.map +1 -0
- package/dist/locator/index.d.ts +46 -0
- package/dist/locator/index.js +173 -0
- package/dist/locator/index.js.map +1 -0
- package/dist/locator/index.test.d.ts +1 -0
- package/dist/locator/index.test.js +393 -0
- package/dist/locator/index.test.js.map +1 -0
- package/dist/locator/postcss.d.ts +91 -0
- package/dist/locator/postcss.js +241 -0
- package/dist/locator/postcss.js.map +1 -0
- package/dist/locator/postcss.test.d.ts +1 -0
- package/dist/locator/postcss.test.js +256 -0
- package/dist/locator/postcss.test.js.map +1 -0
- package/dist/logger.d.ts +9 -0
- package/dist/logger.js +28 -0
- package/dist/logger.js.map +1 -0
- package/dist/regression-test/issue-168.test.d.ts +1 -0
- package/dist/regression-test/issue-168.test.js +30 -0
- package/dist/regression-test/issue-168.test.js.map +1 -0
- package/dist/resolver/index.d.ts +22 -0
- package/dist/resolver/index.js +44 -0
- package/dist/resolver/index.js.map +1 -0
- package/dist/resolver/index.test.d.ts +1 -0
- package/dist/resolver/index.test.js +16 -0
- package/dist/resolver/index.test.js.map +1 -0
- package/dist/resolver/node-resolver.d.ts +2 -0
- package/dist/resolver/node-resolver.js +6 -0
- package/dist/resolver/node-resolver.js.map +1 -0
- package/dist/resolver/node-resolver.test.d.ts +1 -0
- package/dist/resolver/node-resolver.test.js +25 -0
- package/dist/resolver/node-resolver.test.js.map +1 -0
- package/dist/resolver/relative-resolver.d.ts +2 -0
- package/dist/resolver/relative-resolver.js +5 -0
- package/dist/resolver/relative-resolver.js.map +1 -0
- package/dist/resolver/relative-resolver.test.d.ts +1 -0
- package/dist/resolver/relative-resolver.test.js +12 -0
- package/dist/resolver/relative-resolver.test.js.map +1 -0
- package/dist/resolver/webpack-resolver.d.ts +24 -0
- package/dist/resolver/webpack-resolver.js +91 -0
- package/dist/resolver/webpack-resolver.js.map +1 -0
- package/dist/resolver/webpack-resolver.test.d.ts +1 -0
- package/dist/resolver/webpack-resolver.test.js +89 -0
- package/dist/resolver/webpack-resolver.test.js.map +1 -0
- package/dist/runner.d.ts +78 -0
- package/dist/runner.js +122 -0
- package/dist/runner.js.map +1 -0
- package/dist/runner.test.d.ts +1 -0
- package/dist/runner.test.js +304 -0
- package/dist/runner.test.js.map +1 -0
- package/dist/test-util/jest/resolver.cjs +31 -0
- package/dist/test-util/jest/resolver.cjs.map +1 -0
- package/dist/test-util/jest/resolver.d.cts +16 -0
- package/dist/test-util/tsserver.d.ts +31 -0
- package/dist/test-util/tsserver.js +112 -0
- package/dist/test-util/tsserver.js.map +1 -0
- package/dist/test-util/util.d.ts +29 -0
- package/dist/test-util/util.js +85 -0
- package/dist/test-util/util.js.map +1 -0
- package/dist/transformer/index.d.ts +30 -0
- package/dist/transformer/index.js +25 -0
- package/dist/transformer/index.js.map +1 -0
- 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.d.ts +2 -0
- package/dist/transformer/less-transformer.js +45 -0
- package/dist/transformer/less-transformer.js.map +1 -0
- package/dist/transformer/less-transformer.test.d.ts +1 -0
- package/dist/transformer/less-transformer.test.js +134 -0
- package/dist/transformer/less-transformer.test.js.map +1 -0
- 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 +178 -0
- package/dist/transformer/postcss-transformer.test.js.map +1 -0
- package/dist/transformer/scss-transformer.d.ts +2 -0
- package/dist/transformer/scss-transformer.js +40 -0
- package/dist/transformer/scss-transformer.js.map +1 -0
- package/dist/transformer/scss-transformer.test.d.ts +1 -0
- package/dist/transformer/scss-transformer.test.js +149 -0
- package/dist/transformer/scss-transformer.test.js.map +1 -0
- package/dist/util.d.ts +21 -0
- package/dist/util.js +72 -0
- package/dist/util.js.map +1 -0
- package/dist/util.test.d.ts +1 -0
- package/dist/util.test.js +74 -0
- package/dist/util.test.js.map +1 -0
- package/package.json +1 -1
- package/src/cli.ts +6 -0
- package/src/emitter/dts.test.ts +7 -4
- package/src/emitter/dts.ts +22 -10
- package/src/emitter/index.test.ts +10 -0
- package/src/emitter/index.ts +17 -4
- package/src/emitter/source-map.test.ts +4 -4
- package/src/emitter/source-map.ts +8 -2
- package/src/runner.test.ts +23 -0
- package/src/runner.ts +6 -0
- package/src/library/README.md +0 -3
- package/src/library/source-map/index.ts +0 -26
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { exists } from '../util.js';
|
|
2
|
+
import { createNodeResolver } from './node-resolver.js';
|
|
3
|
+
import { createRelativeResolver } from './relative-resolver.js';
|
|
4
|
+
import { createWebpackResolver } from './webpack-resolver.js';
|
|
5
|
+
/**
|
|
6
|
+
* The Default resolver.
|
|
7
|
+
*
|
|
8
|
+
* This resolver implements a resolve algorithm that is as compatible as possible with the major toolchains,
|
|
9
|
+
* including Node.js, webpack (css-loader, sass-loader, less-loader) and vite. It is difficult to completely
|
|
10
|
+
* mimic the behavior of these toolchains, so the behavior may differ in some cases.
|
|
11
|
+
*
|
|
12
|
+
* @param specifier The specifier to resolve (i.e. './foo.css', '~bootstrap', etc.)
|
|
13
|
+
* @param options The options to resolve
|
|
14
|
+
* @returns The resolved path (absolute). `false` means to skip resolving.
|
|
15
|
+
*/
|
|
16
|
+
export const createDefaultResolver = (defaultResolverOptions) => {
|
|
17
|
+
const relativeResolver = createRelativeResolver();
|
|
18
|
+
const nodeResolver = createNodeResolver();
|
|
19
|
+
const webpackResolver = createWebpackResolver(defaultResolverOptions);
|
|
20
|
+
// In less-loader, `relativeResolver` has priority over `webpackResolver`.
|
|
21
|
+
// happy-css-modules follows suit.
|
|
22
|
+
// ref: https://github.com/webpack-contrib/sass-loader/blob/49a578a218574ddc92a597c7e365b6c21960717e/src/utils.js#L588-L596
|
|
23
|
+
// ref: https://github.com/webpack-contrib/less-loader/tree/454e187f58046356c3d383d67fda763db8bfc528#webpack-resolver
|
|
24
|
+
const resolvers = [relativeResolver, nodeResolver, webpackResolver];
|
|
25
|
+
return async (specifier, options) => {
|
|
26
|
+
for (const resolver of resolvers) {
|
|
27
|
+
try {
|
|
28
|
+
// eslint-disable-next-line no-await-in-loop
|
|
29
|
+
const resolved = await resolver(specifier, options);
|
|
30
|
+
if (resolved !== false) {
|
|
31
|
+
// eslint-disable-next-line no-await-in-loop
|
|
32
|
+
const isExists = await exists(resolved);
|
|
33
|
+
if (isExists)
|
|
34
|
+
return resolved;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
catch (e) {
|
|
38
|
+
// noop
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return false;
|
|
42
|
+
};
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resolver/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAc9D;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAA8E,CAC9G,sBAAsB,EACtB,EAAE;IACF,MAAM,gBAAgB,GAAG,sBAAsB,EAAE,CAAC;IAClD,MAAM,YAAY,GAAG,kBAAkB,EAAE,CAAC;IAC1C,MAAM,eAAe,GAAG,qBAAqB,CAAC,sBAAsB,CAAC,CAAC;IAEtE,0EAA0E;IAC1E,kCAAkC;IAClC,2HAA2H;IAC3H,qHAAqH;IACrH,MAAM,SAAS,GAAG,CAAC,gBAAgB,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC;IAEpE,OAAO,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE;QAClC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,4CAA4C;gBAC5C,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBACpD,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;oBACvB,4CAA4C;oBAC5C,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACxC,IAAI,QAAQ;wBAAE,OAAO,QAAQ,CAAC;gBAChC,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO;YACT,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createFixtures, getFixturePath } from '../test-util/util.js';
|
|
2
|
+
import { createDefaultResolver } from './index.js';
|
|
3
|
+
const defaultResolver = createDefaultResolver();
|
|
4
|
+
const request = getFixturePath('/test/1.css');
|
|
5
|
+
test('resolve with webpackResolver when other resolvers fail to resolve', async () => {
|
|
6
|
+
createFixtures({
|
|
7
|
+
'/test/2.css': `.a {}`,
|
|
8
|
+
'/test/3.css': `.a {}`,
|
|
9
|
+
'/node_modules/3.css/index.css': `.a {}`,
|
|
10
|
+
'/node_modules/4.css/index.css': `.a {}`,
|
|
11
|
+
});
|
|
12
|
+
expect(await defaultResolver('2.css', { request })).toBe(getFixturePath('/test/2.css'));
|
|
13
|
+
expect(await defaultResolver('3.css', { request })).toBe(getFixturePath('/test/3.css'));
|
|
14
|
+
expect(await defaultResolver('~4.css', { request })).toBe(getFixturePath('/node_modules/4.css/index.css'));
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/resolver/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,eAAe,GAAG,qBAAqB,EAAE,CAAC;AAChD,MAAM,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;AAE9C,IAAI,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;IACnF,cAAc,CAAC;QACb,aAAa,EAAE,OAAO;QACtB,aAAa,EAAE,OAAO;QACtB,+BAA+B,EAAE,OAAO;QACxC,+BAA+B,EAAE,OAAO;KACzC,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,eAAe,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IACxF,MAAM,CAAC,MAAM,eAAe,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IACxF,MAAM,CAAC,MAAM,eAAe,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,+BAA+B,CAAC,CAAC,CAAC;AAC7G,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { fileURLToPath, pathToFileURL } from 'url';
|
|
2
|
+
import { resolve } from 'import-meta-resolve';
|
|
3
|
+
export const createNodeResolver = () => (specifier, options) => {
|
|
4
|
+
return fileURLToPath(resolve(specifier, pathToFileURL(options.request).href));
|
|
5
|
+
};
|
|
6
|
+
//# sourceMappingURL=node-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-resolver.js","sourceRoot":"","sources":["../../src/resolver/node-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAG9C,MAAM,CAAC,MAAM,kBAAkB,GAAmB,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE;IAC7E,OAAO,aAAa,CAAC,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAChF,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { createFixtures, getFixturePath } from '../test-util/util.js';
|
|
2
|
+
import { createNodeResolver } from './node-resolver.js';
|
|
3
|
+
const nodeResolver = createNodeResolver();
|
|
4
|
+
const request = getFixturePath('/test/1.css');
|
|
5
|
+
test('resolves specifier with node mechanism', async () => {
|
|
6
|
+
createFixtures({
|
|
7
|
+
'/test/2.css': `.a {}`,
|
|
8
|
+
'/test/dir/3.css': `.a {}`,
|
|
9
|
+
'/4.css': `.a {}`,
|
|
10
|
+
'/test/5.css': `.a {}`,
|
|
11
|
+
'/node_modules/package-1/6.css': `.a {}`,
|
|
12
|
+
'/package.json': `{ "imports": { "#subpath-1": "./test/7.css", "#subpath-2/*.css": "./test/*.css" } }`,
|
|
13
|
+
'/test/7.css': `.a {}`,
|
|
14
|
+
'/test/8.css': `.a {}`,
|
|
15
|
+
});
|
|
16
|
+
expect(await nodeResolver('./2.css', { request })).toBe(getFixturePath('/test/2.css'));
|
|
17
|
+
expect(await nodeResolver('./dir/3.css', { request })).toBe(getFixturePath('/test/dir/3.css'));
|
|
18
|
+
expect(await nodeResolver('../4.css', { request })).toBe(getFixturePath('/4.css'));
|
|
19
|
+
expect(await nodeResolver(getFixturePath('/test/5.css'), { request })).toBe(getFixturePath('/test/5.css'));
|
|
20
|
+
expect(await nodeResolver('package-1/6.css', { request })).toBe(getFixturePath('/node_modules/package-1/6.css'));
|
|
21
|
+
expect(await nodeResolver('#subpath-1', { request })).toBe(getFixturePath('/test/7.css'));
|
|
22
|
+
// FIXME: For some reason, it does not pass...
|
|
23
|
+
// expect(await nodeResolver('#subpath-2/8.css', { request })).toBe(getFixturePath('/test/8.css'));
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=node-resolver.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-resolver.test.js","sourceRoot":"","sources":["../../src/resolver/node-resolver.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,MAAM,YAAY,GAAG,kBAAkB,EAAE,CAAC;AAC1C,MAAM,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;AAE9C,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;IACxD,cAAc,CAAC;QACb,aAAa,EAAE,OAAO;QACtB,iBAAiB,EAAE,OAAO;QAC1B,QAAQ,EAAE,OAAO;QACjB,aAAa,EAAE,OAAO;QACtB,+BAA+B,EAAE,OAAO;QACxC,eAAe,EAAE,qFAAqF;QACtG,aAAa,EAAE,OAAO;QACtB,aAAa,EAAE,OAAO;KACvB,CAAC,CAAC;IACH,MAAM,CAAC,MAAM,YAAY,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IACvF,MAAM,CAAC,MAAM,YAAY,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC;IAC/F,MAAM,CAAC,MAAM,YAAY,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnF,MAAM,CAAC,MAAM,YAAY,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IAC3G,MAAM,CAAC,MAAM,YAAY,CAAC,iBAAiB,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,+BAA+B,CAAC,CAAC,CAAC;IACjH,MAAM,CAAC,MAAM,YAAY,CAAC,YAAY,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IAC1F,8CAA8C;IAC9C,mGAAmG;AACrG,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relative-resolver.js","sourceRoot":"","sources":["../../src/resolver/relative-resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAGxC,MAAM,CAAC,MAAM,sBAAsB,GAAmB,GAAG,EAAE,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE;IACjF,OAAO,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;AACtD,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { getFixturePath } from '../test-util/util.js';
|
|
2
|
+
import { createRelativeResolver } from './relative-resolver.js';
|
|
3
|
+
const relativeResolver = createRelativeResolver();
|
|
4
|
+
const request = getFixturePath('/test/1.css');
|
|
5
|
+
test('resolves specifier with relative mechanism', async () => {
|
|
6
|
+
expect(await relativeResolver('2.css', { request })).toBe(getFixturePath('/test/2.css'));
|
|
7
|
+
expect(await relativeResolver('./3.css', { request })).toBe(getFixturePath('/test/3.css'));
|
|
8
|
+
expect(await relativeResolver('dir/4.css', { request })).toBe(getFixturePath('/test/dir/4.css'));
|
|
9
|
+
expect(await relativeResolver('../5.css', { request })).toBe(getFixturePath('/5.css'));
|
|
10
|
+
expect(await relativeResolver(getFixturePath('/test/6.css'), { request })).toBe(getFixturePath('/test/6.css'));
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=relative-resolver.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relative-resolver.test.js","sourceRoot":"","sources":["../../src/resolver/relative-resolver.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAEhE,MAAM,gBAAgB,GAAG,sBAAsB,EAAE,CAAC;AAClD,MAAM,OAAO,GAAG,cAAc,CAAC,aAAa,CAAC,CAAC;AAE9C,IAAI,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;IAC5D,MAAM,CAAC,MAAM,gBAAgB,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IACzF,MAAM,CAAC,MAAM,gBAAgB,CAAC,SAAS,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;IAC3F,MAAM,CAAC,MAAM,gBAAgB,CAAC,WAAW,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACjG,MAAM,CAAC,MAAM,gBAAgB,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;IACvF,MAAM,CAAC,MAAM,gBAAgB,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAC;AACjH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { Resolver } from './index.js';
|
|
2
|
+
export type WebpackResolverOptions = {
|
|
3
|
+
/** Working directory path. */
|
|
4
|
+
cwd?: string | undefined;
|
|
5
|
+
/**
|
|
6
|
+
* The option compatible with sass's `--load-path`. It is an array of relative or absolute paths.
|
|
7
|
+
* @example ['src/styles']
|
|
8
|
+
* @example ['/home/user/repository/src/styles']
|
|
9
|
+
*/
|
|
10
|
+
sassLoadPaths?: string[] | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* The option compatible with less's `--include-path`. It is an array of relative or absolute paths.
|
|
13
|
+
* @example ['src/styles']
|
|
14
|
+
* @example ['/home/user/repository/src/styles']
|
|
15
|
+
*/
|
|
16
|
+
lessIncludePaths?: string[] | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* The option compatible with webpack's `resolve.alias`. It is an object consisting of a pair of alias names and relative or absolute paths.
|
|
19
|
+
* @example { style: 'src/styles', '@': 'src' }
|
|
20
|
+
* @example { style: '/home/user/repository/src/styles', '@': '/home/user/repository/src' }
|
|
21
|
+
*/
|
|
22
|
+
webpackResolveAlias?: Record<string, string> | undefined;
|
|
23
|
+
};
|
|
24
|
+
export declare const createWebpackResolver: (webpackResolverOptions?: WebpackResolverOptions | undefined) => Resolver;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { basename, dirname, join, resolve } from 'path';
|
|
2
|
+
import enhancedResolve from 'enhanced-resolve';
|
|
3
|
+
import { exists } from '../util.js';
|
|
4
|
+
// TODO: Support `resolve.alias` for Node.js API
|
|
5
|
+
export const createWebpackResolver = (webpackResolverOptions) => {
|
|
6
|
+
const cwd = webpackResolverOptions?.cwd ?? process.cwd();
|
|
7
|
+
const sassLoadPaths = webpackResolverOptions?.sassLoadPaths?.map((path) => resolve(cwd, path));
|
|
8
|
+
const lessIncludePaths = webpackResolverOptions?.lessIncludePaths?.map((path) => resolve(cwd, path));
|
|
9
|
+
const webpackResolveAlias = webpackResolverOptions?.webpackResolveAlias
|
|
10
|
+
? Object.fromEntries(Object.entries(webpackResolverOptions?.webpackResolveAlias).map(([key, value]) => [key, resolve(cwd, value)]))
|
|
11
|
+
: undefined;
|
|
12
|
+
/**
|
|
13
|
+
* A resolver compatible with css-loader.
|
|
14
|
+
*
|
|
15
|
+
* @see https://github.com/webpack-contrib/css-loader/blob/897e7dd250ccdb0d31e6c66d4cd0d009f2022a85/src/plugins/postcss-import-parser.js#L228-L235
|
|
16
|
+
*/
|
|
17
|
+
const cssLoaderResolver = enhancedResolve.create.sync({
|
|
18
|
+
conditionNames: ['style'],
|
|
19
|
+
// We are not sure how "..." affects behavior...
|
|
20
|
+
mainFields: ['css', 'style', 'main', '...'],
|
|
21
|
+
mainFiles: ['index', '...'],
|
|
22
|
+
extensions: ['.css', '...'],
|
|
23
|
+
preferRelative: true,
|
|
24
|
+
alias: webpackResolveAlias ?? {},
|
|
25
|
+
});
|
|
26
|
+
/**
|
|
27
|
+
* A resolver compatible with sass-loader.
|
|
28
|
+
*
|
|
29
|
+
* @see https://github.com/webpack-contrib/sass-loader/blob/49a578a218574ddc92a597c7e365b6c21960717e/src/utils.js#L531-L539
|
|
30
|
+
*/
|
|
31
|
+
const sassLoaderResolver = enhancedResolve.create.sync({
|
|
32
|
+
conditionNames: ['sass', 'style'],
|
|
33
|
+
mainFields: ['sass', 'style', 'main', '...'],
|
|
34
|
+
mainFiles: ['_index', 'index', '...'],
|
|
35
|
+
extensions: ['.sass', '.scss', '.css'],
|
|
36
|
+
restrictions: [/\.((sa|sc|c)ss)$/iu],
|
|
37
|
+
preferRelative: true,
|
|
38
|
+
alias: webpackResolveAlias ?? {},
|
|
39
|
+
modules: ['node_modules', ...(sassLoadPaths ?? [])],
|
|
40
|
+
});
|
|
41
|
+
/**
|
|
42
|
+
* A resolver compatible with less-loader.
|
|
43
|
+
*
|
|
44
|
+
* @see https://github.com/webpack-contrib/less-loader/blob/d74f740c100c4006b00dfb3e02c6d5aaf8713519/src/utils.js#L35-L42
|
|
45
|
+
*/
|
|
46
|
+
const lessLoaderResolver = enhancedResolve.create.sync({
|
|
47
|
+
conditionNames: ['less', 'style'],
|
|
48
|
+
mainFields: ['less', 'style', 'main', '...'],
|
|
49
|
+
mainFiles: ['index', '...'],
|
|
50
|
+
extensions: ['.less', '.css'],
|
|
51
|
+
preferRelative: true,
|
|
52
|
+
alias: webpackResolveAlias ?? {},
|
|
53
|
+
modules: ['node_modules', ...(lessIncludePaths ?? [])],
|
|
54
|
+
});
|
|
55
|
+
// NOTE: In theory, `sassLoaderResolver` should only be used when the resolver is called from `sassTransformer`.
|
|
56
|
+
// However, we do not implement such behavior because it is cumbersome. If someone wants it, we will implement it.
|
|
57
|
+
const resolvers = [cssLoaderResolver, sassLoaderResolver, lessLoaderResolver];
|
|
58
|
+
return async (specifier, options) => {
|
|
59
|
+
// `~` prefix is optional.
|
|
60
|
+
// ref: https://github.com/webpack-contrib/css-loader/blob/5e6cf91fd3f0c8b5fb4b91197b98dc56abdef4bf/src/utils.js#L92-L95
|
|
61
|
+
// ref: https://github.com/webpack-contrib/sass-loader/blob/49a578a218574ddc92a597c7e365b6c21960717e/src/utils.js#L368-L370
|
|
62
|
+
// ref: https://github.com/webpack-contrib/less-loader/blob/d74f740c100c4006b00dfb3e02c6d5aaf8713519/src/utils.js#L72-L75
|
|
63
|
+
// eslint-disable-next-line no-param-reassign
|
|
64
|
+
if (specifier.startsWith('~'))
|
|
65
|
+
specifier = specifier.slice(1);
|
|
66
|
+
for (const resolver of resolvers) {
|
|
67
|
+
const specifierVariants = resolver === sassLoaderResolver
|
|
68
|
+
? // Support partial import for sass
|
|
69
|
+
// https://sass-lang.com/documentation/at-rules/import#partials
|
|
70
|
+
// https://github.com/webpack-contrib/sass-loader/blob/0e9494074f69a6b6d47efea6c083a02a31a5ae84/test/sass/import-with-underscore.sass
|
|
71
|
+
[join(dirname(specifier), `_${basename(specifier)}`), specifier]
|
|
72
|
+
: [specifier];
|
|
73
|
+
for (const specifierVariant of specifierVariants) {
|
|
74
|
+
try {
|
|
75
|
+
const resolved = resolver(dirname(options.request), specifierVariant);
|
|
76
|
+
if (resolved !== false) {
|
|
77
|
+
// eslint-disable-next-line no-await-in-loop
|
|
78
|
+
const isExists = await exists(resolved);
|
|
79
|
+
if (isExists)
|
|
80
|
+
return resolved;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch (e) {
|
|
84
|
+
// noop
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return false;
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
//# sourceMappingURL=webpack-resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webpack-resolver.js","sourceRoot":"","sources":["../../src/resolver/webpack-resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { createFixtures, getFixturePath } from '../test-util/util.js';
|
|
2
|
+
import { createWebpackResolver } from './webpack-resolver.js';
|
|
3
|
+
test('resolves specifier with css-loader mechanism', async () => {
|
|
4
|
+
const webpackResolver = createWebpackResolver({
|
|
5
|
+
cwd: getFixturePath('/'),
|
|
6
|
+
webpackResolveAlias: {
|
|
7
|
+
'@relative': 'test/alias-relative',
|
|
8
|
+
'@absolute': getFixturePath('/test/alias-absolute'),
|
|
9
|
+
},
|
|
10
|
+
});
|
|
11
|
+
const request = getFixturePath('/test/1.css');
|
|
12
|
+
createFixtures({
|
|
13
|
+
'/node_modules/package-1/index.css': `.a {}`,
|
|
14
|
+
'/node_modules/package-2/index.css': `.a {}`,
|
|
15
|
+
'/node_modules/package-3/index.css': `.a {}`,
|
|
16
|
+
'/node_modules/package-4/package.json': `{ "style": "./style.css" }`,
|
|
17
|
+
'/node_modules/package-4/style.css': `.a {}`,
|
|
18
|
+
'/node_modules/@scoped/package-5/index.css': `.a {}`,
|
|
19
|
+
'/node_modules/package-6/index.css': `.a {}`,
|
|
20
|
+
'/test/alias-relative/alias.css': `.a {}`,
|
|
21
|
+
'/test/alias-absolute/alias.css': `.a {}`,
|
|
22
|
+
});
|
|
23
|
+
expect(await webpackResolver('~package-1/index.css', { request })).toBe(getFixturePath('/node_modules/package-1/index.css'));
|
|
24
|
+
expect(await webpackResolver('~package-2', { request })).toBe(getFixturePath('/node_modules/package-2/index.css'));
|
|
25
|
+
expect(await webpackResolver('~package-3/', { request })).toBe(getFixturePath('/node_modules/package-3/index.css'));
|
|
26
|
+
expect(await webpackResolver('~package-4', { request })).toBe(getFixturePath('/node_modules/package-4/style.css'));
|
|
27
|
+
expect(await webpackResolver('~@scoped/package-5/index.css', { request })).toBe(getFixturePath('/node_modules/@scoped/package-5/index.css'));
|
|
28
|
+
expect(await webpackResolver('package-6/index.css', { request })).toBe(getFixturePath('/node_modules/package-6/index.css'));
|
|
29
|
+
expect(await webpackResolver('@relative/alias.css', { request })).toBe(getFixturePath('/test/alias-relative/alias.css'));
|
|
30
|
+
expect(await webpackResolver('@absolute/alias.css', { request })).toBe(getFixturePath('/test/alias-absolute/alias.css'));
|
|
31
|
+
});
|
|
32
|
+
test('resolves specifier with sass-loader mechanism', async () => {
|
|
33
|
+
const webpackResolver = createWebpackResolver({
|
|
34
|
+
cwd: getFixturePath('/'),
|
|
35
|
+
sassLoadPaths: ['test/load-paths-relative', getFixturePath('/test/load-paths-absolute')],
|
|
36
|
+
webpackResolveAlias: {
|
|
37
|
+
'@relative': 'test/alias-relative',
|
|
38
|
+
'@absolute': getFixturePath('/test/alias-absolute'),
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
const request = getFixturePath('/test/1.scss');
|
|
42
|
+
createFixtures({
|
|
43
|
+
'/node_modules/package-1/index.scss': `.a {}`,
|
|
44
|
+
'/test/load-paths-relative/load-paths-relative.scss': `.a {}`,
|
|
45
|
+
'/test/load-paths-absolute/load-paths-absolute.scss': `.a {}`,
|
|
46
|
+
'/test/_partial-import.scss': `.a {}`,
|
|
47
|
+
'/test/alias-relative/alias.scss': `.a {}`,
|
|
48
|
+
'/test/alias-absolute/alias.scss': `.a {}`,
|
|
49
|
+
});
|
|
50
|
+
expect(await webpackResolver('~package-1/index.scss', { request })).toBe(getFixturePath('/node_modules/package-1/index.scss'));
|
|
51
|
+
expect(await webpackResolver('~package-1', { request })).toBe(getFixturePath('/node_modules/package-1/index.scss'));
|
|
52
|
+
// ref: https://github.com/webpack-contrib/sass-loader/blob/bed9fb5799a90020d43f705ea405f85b368621d7/test/scss/import-include-paths.scss#L1
|
|
53
|
+
expect(await webpackResolver('load-paths-relative', { request })).toBe(getFixturePath('/test/load-paths-relative/load-paths-relative.scss'));
|
|
54
|
+
expect(await webpackResolver('load-paths-absolute', { request })).toBe(getFixturePath('/test/load-paths-absolute/load-paths-absolute.scss'));
|
|
55
|
+
// https://sass-lang.com/documentation/at-rules/import#partials
|
|
56
|
+
// https://github.com/webpack-contrib/sass-loader/blob/0e9494074f69a6b6d47efea6c083a02a31a5ae84/test/sass/import-with-underscore.sass
|
|
57
|
+
expect(await webpackResolver('partial-import', { request: getFixturePath('/test/1.scss') })).toBe(getFixturePath('/test/_partial-import.scss'));
|
|
58
|
+
expect(await webpackResolver('test/partial-import', { request: getFixturePath('/test') })).toBe(getFixturePath('/test/_partial-import.scss'));
|
|
59
|
+
expect(await webpackResolver('@relative/alias.scss', { request })).toBe(getFixturePath('/test/alias-relative/alias.scss'));
|
|
60
|
+
expect(await webpackResolver('@absolute/alias.scss', { request })).toBe(getFixturePath('/test/alias-absolute/alias.scss'));
|
|
61
|
+
});
|
|
62
|
+
test('resolves specifier with less-loader mechanism', async () => {
|
|
63
|
+
const webpackResolver = createWebpackResolver({
|
|
64
|
+
cwd: getFixturePath('/'),
|
|
65
|
+
lessIncludePaths: ['test/include-paths-relative', getFixturePath('/test/include-paths-absolute')],
|
|
66
|
+
webpackResolveAlias: {
|
|
67
|
+
'@relative': 'test/alias-relative',
|
|
68
|
+
'@absolute': getFixturePath('/test/alias-absolute'),
|
|
69
|
+
},
|
|
70
|
+
});
|
|
71
|
+
const request = getFixturePath('/test/1.less');
|
|
72
|
+
createFixtures({
|
|
73
|
+
'/node_modules/package-1/index.less': `.a {}`,
|
|
74
|
+
'/test/include-paths-relative/include-paths-relative.less': `.a {}`,
|
|
75
|
+
'/test/include-paths-absolute/include-paths-absolute.less': `.a {}`,
|
|
76
|
+
'/test/alias-relative/alias.less': `.a {}`,
|
|
77
|
+
'/test/alias-absolute/alias.less': `.a {}`,
|
|
78
|
+
});
|
|
79
|
+
expect(await webpackResolver('~package-1/index.less', { request })).toBe(getFixturePath('/node_modules/package-1/index.less'));
|
|
80
|
+
expect(await webpackResolver('~package-1', { request })).toBe(getFixturePath('/node_modules/package-1/index.less'));
|
|
81
|
+
// ref: https://github.com/webpack-contrib/less-loader/blob/81a0d27eb6d18e5dc550a60fc1007fdc77305b78/test/loader.test.js#L248-L253
|
|
82
|
+
// ref: https://github.com/webpack-contrib/less-loader/blob/393147064672ace986ec84aca21f69f0ab819a9c/test/fixtures/import-paths.less#L1
|
|
83
|
+
// ref: https://github.com/webpack-contrib/less-loader/blob/99d80bd290dae50375db6e17c5f56ec33754e258/test/helpers/getCodeFromLess.js#L47-L54
|
|
84
|
+
expect(await webpackResolver('include-paths-relative', { request })).toBe(getFixturePath('/test/include-paths-relative/include-paths-relative.less'));
|
|
85
|
+
expect(await webpackResolver('include-paths-absolute', { request })).toBe(getFixturePath('/test/include-paths-absolute/include-paths-absolute.less'));
|
|
86
|
+
expect(await webpackResolver('@relative/alias.less', { request })).toBe(getFixturePath('/test/alias-relative/alias.less'));
|
|
87
|
+
expect(await webpackResolver('@absolute/alias.less', { request })).toBe(getFixturePath('/test/alias-absolute/alias.less'));
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=webpack-resolver.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"webpack-resolver.test.js","sourceRoot":"","sources":["../../src/resolver/webpack-resolver.test.ts"],"names":[],"mappings":"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"}
|
package/dist/runner.d.ts
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { Resolver } from './resolver/index.js';
|
|
2
|
+
import { type Transformer } from './transformer/index.js';
|
|
3
|
+
export type Watcher = {
|
|
4
|
+
close: () => Promise<void>;
|
|
5
|
+
};
|
|
6
|
+
export type LocalsConvention = 'camelCase' | 'camelCaseOnly' | 'dashes' | 'dashesOnly' | undefined;
|
|
7
|
+
export interface RunnerOptions {
|
|
8
|
+
pattern: string;
|
|
9
|
+
watch?: boolean | undefined;
|
|
10
|
+
/**
|
|
11
|
+
* Style of exported class names.
|
|
12
|
+
* @default undefined
|
|
13
|
+
*/
|
|
14
|
+
localsConvention?: LocalsConvention | undefined;
|
|
15
|
+
declarationMap?: boolean | undefined;
|
|
16
|
+
transformer?: Transformer | undefined;
|
|
17
|
+
resolver?: Resolver | undefined;
|
|
18
|
+
/**
|
|
19
|
+
* The option compatible with sass's `--load-path`. It is an array of relative or absolute paths.
|
|
20
|
+
* @example ['src/styles']
|
|
21
|
+
* @example ['/home/user/repository/src/styles']
|
|
22
|
+
*/
|
|
23
|
+
sassLoadPaths?: string[] | undefined;
|
|
24
|
+
/**
|
|
25
|
+
* The option compatible with less's `--include-path`. It is an array of relative or absolute paths.
|
|
26
|
+
* @example ['src/styles']
|
|
27
|
+
* @example ['/home/user/repository/src/styles']
|
|
28
|
+
*/
|
|
29
|
+
lessIncludePaths?: string[] | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* The option compatible with webpack's `resolve.alias`. It is an object consisting of a pair of alias names and relative or absolute paths.
|
|
32
|
+
* @example { style: 'src/styles', '@': 'src' }
|
|
33
|
+
* @example { style: '/home/user/repository/src/styles', '@': '/home/user/repository/src' }
|
|
34
|
+
*/
|
|
35
|
+
webpackResolveAlias?: Record<string, string> | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* The option compatible with postcss's `--config`. It is a relative or absolute path.
|
|
38
|
+
* @example '.'
|
|
39
|
+
* @example 'postcss.config.js'
|
|
40
|
+
* @example '/home/user/repository/src'
|
|
41
|
+
*/
|
|
42
|
+
postcssConfig?: string | undefined;
|
|
43
|
+
/**
|
|
44
|
+
* Generate `.d.css.ts` instead of `.css.d.ts`.
|
|
45
|
+
* @default false
|
|
46
|
+
*/
|
|
47
|
+
arbitraryExtensions?: boolean | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* Only generate .d.ts and .d.ts.map for changed files.
|
|
50
|
+
* @default true
|
|
51
|
+
*/
|
|
52
|
+
cache?: boolean | undefined;
|
|
53
|
+
/**
|
|
54
|
+
* Strategy for the cache to use for detecting changed files.
|
|
55
|
+
* @default 'content'
|
|
56
|
+
*/
|
|
57
|
+
cacheStrategy?: 'content' | 'metadata' | undefined;
|
|
58
|
+
/**
|
|
59
|
+
* What level of logs to report.
|
|
60
|
+
* @default 'info'
|
|
61
|
+
*/
|
|
62
|
+
logLevel?: 'debug' | 'info' | 'silent' | undefined;
|
|
63
|
+
/** Working directory path. */
|
|
64
|
+
cwd?: string | undefined;
|
|
65
|
+
/** Output directory for generated files. */
|
|
66
|
+
outDir?: string | undefined;
|
|
67
|
+
}
|
|
68
|
+
type OverrideProp<T, K extends keyof T, V extends T[K]> = Omit<T, K> & {
|
|
69
|
+
[P in K]: V;
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* Run typed-css-module.
|
|
73
|
+
* @param options Runner options.
|
|
74
|
+
* @returns Returns `Promise<Watcher>` if `options.watch` is `true`, `Promise<void>` if `false`.
|
|
75
|
+
*/
|
|
76
|
+
export declare function run(options: OverrideProp<RunnerOptions, 'watch', true>): Promise<Watcher>;
|
|
77
|
+
export declare function run(options: RunnerOptions): Promise<void>;
|
|
78
|
+
export {};
|
package/dist/runner.js
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { resolve, relative } from 'path';
|
|
2
|
+
import * as process from 'process';
|
|
3
|
+
import { createCache } from '@file-cache/core';
|
|
4
|
+
import { createNpmPackageKey } from '@file-cache/npm';
|
|
5
|
+
import AwaitLock from 'await-lock';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import * as chokidar from 'chokidar';
|
|
8
|
+
import { glob } from 'glob';
|
|
9
|
+
import { DEFAULT_ARBITRARY_EXTENSIONS } from './config.js';
|
|
10
|
+
import { isGeneratedFilesExist, emitGeneratedFiles } from './emitter/index.js';
|
|
11
|
+
import { Locator } from './locator/index.js';
|
|
12
|
+
import { Logger } from './logger.js';
|
|
13
|
+
import { createDefaultResolver } from './resolver/index.js';
|
|
14
|
+
import { createDefaultTransformer } from './transformer/index.js';
|
|
15
|
+
import { getInstalledPeerDependencies, isMatchByGlob } from './util.js';
|
|
16
|
+
export async function run(options) {
|
|
17
|
+
// eslint-disable-next-line new-cap
|
|
18
|
+
const lock = new AwaitLock.default();
|
|
19
|
+
const logger = new Logger(options.logLevel ?? 'info');
|
|
20
|
+
const cwd = options.cwd ?? process.cwd();
|
|
21
|
+
const resolver = options.resolver ??
|
|
22
|
+
createDefaultResolver({
|
|
23
|
+
cwd,
|
|
24
|
+
sassLoadPaths: options.sassLoadPaths,
|
|
25
|
+
lessIncludePaths: options.lessIncludePaths,
|
|
26
|
+
webpackResolveAlias: options.webpackResolveAlias,
|
|
27
|
+
});
|
|
28
|
+
const transformer = options.transformer ?? createDefaultTransformer({ cwd, postcssConfig: options.postcssConfig });
|
|
29
|
+
const installedPeerDependencies = getInstalledPeerDependencies();
|
|
30
|
+
const cache = await createCache({
|
|
31
|
+
name: 'happy-css-modules',
|
|
32
|
+
mode: options.cacheStrategy ?? 'content',
|
|
33
|
+
keys: [
|
|
34
|
+
() => createNpmPackageKey(['happy-css-modules', ...installedPeerDependencies]),
|
|
35
|
+
() => {
|
|
36
|
+
return JSON.stringify(options);
|
|
37
|
+
},
|
|
38
|
+
],
|
|
39
|
+
noCache: !(options.cache ?? true),
|
|
40
|
+
});
|
|
41
|
+
const locator = new Locator({ transformer, resolver });
|
|
42
|
+
const isExternalFile = (filePath) => {
|
|
43
|
+
return !isMatchByGlob(filePath, options.pattern, { cwd });
|
|
44
|
+
};
|
|
45
|
+
async function processFile(filePath) {
|
|
46
|
+
async function isChangedFile(filePath) {
|
|
47
|
+
const result = await cache.getAndUpdateCache(filePath);
|
|
48
|
+
// eslint-disable-next-line @typescript-eslint/no-throw-literal
|
|
49
|
+
if (result.error)
|
|
50
|
+
throw result.error;
|
|
51
|
+
return result.changed;
|
|
52
|
+
}
|
|
53
|
+
// Locator#load cannot be called concurrently. Therefore, it takes a lock and waits.
|
|
54
|
+
await lock.acquireAsync();
|
|
55
|
+
try {
|
|
56
|
+
const _isGeneratedFilesExist = await isGeneratedFilesExist(filePath, options.declarationMap, options.arbitraryExtensions ?? DEFAULT_ARBITRARY_EXTENSIONS, options.outDir, cwd);
|
|
57
|
+
const _isChangedFile = await isChangedFile(filePath);
|
|
58
|
+
// Generate .d.ts and .d.ts.map only when the file has been updated.
|
|
59
|
+
// However, if .d.ts or .d.ts.map has not yet been generated, always generate.
|
|
60
|
+
if (_isGeneratedFilesExist && !_isChangedFile) {
|
|
61
|
+
logger.debug(chalk.gray(`${relative(cwd, filePath)} (skipped)`));
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
const result = await locator.load(filePath);
|
|
65
|
+
await emitGeneratedFiles({
|
|
66
|
+
filePath,
|
|
67
|
+
tokens: result.tokens,
|
|
68
|
+
emitDeclarationMap: options.declarationMap,
|
|
69
|
+
dtsFormatOptions: {
|
|
70
|
+
localsConvention: options.localsConvention,
|
|
71
|
+
arbitraryExtensions: options.arbitraryExtensions,
|
|
72
|
+
},
|
|
73
|
+
isExternalFile,
|
|
74
|
+
outDir: options.outDir,
|
|
75
|
+
cwd,
|
|
76
|
+
});
|
|
77
|
+
logger.info(chalk.green(`${relative(cwd, filePath)} (generated)`));
|
|
78
|
+
await cache.reconcile(); // Update cache for the file
|
|
79
|
+
}
|
|
80
|
+
finally {
|
|
81
|
+
lock.release();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
async function processAllFiles() {
|
|
85
|
+
const filePaths = (await glob(options.pattern, { dot: true, cwd }))
|
|
86
|
+
// convert relative path to absolute path
|
|
87
|
+
.map((file) => resolve(cwd, file));
|
|
88
|
+
const errors = [];
|
|
89
|
+
for (const filePath of filePaths) {
|
|
90
|
+
// eslint-disable-next-line no-await-in-loop
|
|
91
|
+
await processFile(filePath).catch((e) => errors.push(e));
|
|
92
|
+
}
|
|
93
|
+
if (errors.length > 0) {
|
|
94
|
+
throw new AggregateError(errors, 'Failed to process files');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (!options.watch) {
|
|
98
|
+
logger.info(`Generate .d.ts for ${options.pattern}...`);
|
|
99
|
+
await processAllFiles();
|
|
100
|
+
// Write cache state to file for persistence
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
// First, watch files.
|
|
104
|
+
logger.info(`Watch ${options.pattern}...`);
|
|
105
|
+
const watcher = chokidar.watch([options.pattern.replace(/\\/gu, '/')], { cwd });
|
|
106
|
+
watcher.on('all', (eventName, relativeFilePath) => {
|
|
107
|
+
const filePath = resolve(cwd, relativeFilePath);
|
|
108
|
+
// There is a bug in chokidar that matches symlinks that do not match the pattern.
|
|
109
|
+
// ref: https://github.com/paulmillr/chokidar/issues/967
|
|
110
|
+
if (isExternalFile(filePath))
|
|
111
|
+
return;
|
|
112
|
+
if (eventName !== 'add' && eventName !== 'change')
|
|
113
|
+
return;
|
|
114
|
+
processFile(filePath).catch((e) => {
|
|
115
|
+
logger.error(e);
|
|
116
|
+
// TODO: Emit a error by `Watcher#onerror`
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
return { close: async () => watcher.close() };
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|