happy-css-modules 0.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/LICENSE.txt +23 -0
- package/README.md +124 -0
- package/bin/hcm.js +9 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.js +69 -0
- package/dist/cli.js.map +1 -0
- package/dist/cli.test.d.ts +1 -0
- package/dist/cli.test.js +34 -0
- package/dist/cli.test.js.map +1 -0
- package/dist/emitter/dts.d.ts +14 -0
- package/dist/emitter/dts.js +106 -0
- package/dist/emitter/dts.js.map +1 -0
- package/dist/emitter/dts.test.d.ts +1 -0
- package/dist/emitter/dts.test.js +205 -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 +34 -0
- package/dist/emitter/index.js +42 -0
- package/dist/emitter/index.js.map +1 -0
- package/dist/emitter/index.test.d.ts +1 -0
- package/dist/emitter/index.test.js +118 -0
- package/dist/emitter/index.test.js.map +1 -0
- package/dist/emitter/source-map.d.ts +9 -0
- package/dist/emitter/source-map.js +16 -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 +3 -0
- package/dist/index.js +3 -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 +367 -0
- package/dist/integration-test/go-to-definition.test.js.map +1 -0
- package/dist/library/source-map/index.d.ts +8 -0
- package/dist/library/source-map/index.js +5 -0
- package/dist/library/source-map/index.js.map +1 -0
- package/dist/loader/index.d.ts +42 -0
- package/dist/loader/index.js +145 -0
- package/dist/loader/index.js.map +1 -0
- package/dist/loader/index.test.d.ts +1 -0
- package/dist/loader/index.test.js +290 -0
- package/dist/loader/index.test.js.map +1 -0
- package/dist/loader/postcss.d.ts +60 -0
- package/dist/loader/postcss.js +209 -0
- package/dist/loader/postcss.js.map +1 -0
- package/dist/loader/postcss.test.d.ts +1 -0
- package/dist/loader/postcss.test.js +236 -0
- package/dist/loader/postcss.test.js.map +1 -0
- package/dist/resolver/index.d.ts +20 -0
- package/dist/resolver/index.js +39 -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 +2 -0
- package/dist/resolver/webpack-resolver.js +69 -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 +26 -0
- package/dist/resolver/webpack-resolver.test.js.map +1 -0
- package/dist/runner.d.ts +33 -0
- package/dist/runner.js +75 -0
- package/dist/runner.js.map +1 -0
- package/dist/runner.test.d.ts +1 -0
- package/dist/runner.test.js +113 -0
- package/dist/runner.test.js.map +1 -0
- package/dist/test/jest/resolver.cjs +30 -0
- package/dist/test/jest/resolver.cjs.map +1 -0
- package/dist/test/jest/resolver.d.cts +30 -0
- package/dist/test/tsserver.d.ts +27 -0
- package/dist/test/tsserver.js +104 -0
- package/dist/test/tsserver.js.map +1 -0
- package/dist/test/util.d.ts +29 -0
- package/dist/test/util.js +78 -0
- package/dist/test/util.js.map +1 -0
- package/dist/transformer/index.d.ts +23 -0
- package/dist/transformer/index.js +19 -0
- package/dist/transformer/index.js.map +1 -0
- package/dist/transformer/less-transformer.d.ts +2 -0
- package/dist/transformer/less-transformer.js +43 -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 +126 -0
- package/dist/transformer/less-transformer.test.js.map +1 -0
- package/dist/transformer/scss-transformer.d.ts +2 -0
- package/dist/transformer/scss-transformer.js +84 -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 +132 -0
- package/dist/transformer/scss-transformer.test.js.map +1 -0
- package/dist/util.d.ts +19 -0
- package/dist/util.js +52 -0
- package/dist/util.js.map +1 -0
- package/dist/util.test.d.ts +1 -0
- package/dist/util.test.js +75 -0
- package/dist/util.test.js.map +1 -0
- package/package.json +106 -0
- package/src/__snapshots__/runner.test.ts.snap +34 -0
- package/src/cli.test.ts +38 -0
- package/src/cli.ts +70 -0
- package/src/emitter/dts.test.ts +266 -0
- package/src/emitter/dts.ts +134 -0
- package/src/emitter/file-system.test.ts +36 -0
- package/src/emitter/file-system.ts +24 -0
- package/src/emitter/index.test.ts +130 -0
- package/src/emitter/index.ts +92 -0
- package/src/emitter/source-map.test.ts +20 -0
- package/src/emitter/source-map.ts +17 -0
- package/src/index.ts +3 -0
- package/src/integration-test/go-to-definition.test.ts +371 -0
- package/src/library/README.md +3 -0
- package/src/library/source-map/index.ts +26 -0
- package/src/loader/index.test.ts +306 -0
- package/src/loader/index.ts +199 -0
- package/src/loader/postcss.test.ts +336 -0
- package/src/loader/postcss.ts +239 -0
- package/src/resolver/index.test.ts +17 -0
- package/src/resolver/index.ts +48 -0
- package/src/resolver/node-resolver.test.ts +26 -0
- package/src/resolver/node-resolver.ts +7 -0
- package/src/resolver/relative-resolver.test.ts +13 -0
- package/src/resolver/relative-resolver.ts +6 -0
- package/src/resolver/webpack-resolver.test.ts +33 -0
- package/src/resolver/webpack-resolver.ts +71 -0
- package/src/runner.test.ts +122 -0
- package/src/runner.ts +105 -0
- package/src/test/jest/resolver.cjs +30 -0
- package/src/test/tsserver.ts +176 -0
- package/src/test/util.ts +100 -0
- package/src/transformer/index.ts +44 -0
- package/src/transformer/less-transformer.test.ts +135 -0
- package/src/transformer/less-transformer.ts +55 -0
- package/src/transformer/scss-transformer.test.ts +142 -0
- package/src/transformer/scss-transformer.ts +94 -0
- package/src/util.test.ts +89 -0
- package/src/util.ts +67 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { mkdir, readFile, writeFile } from 'fs/promises';
|
|
2
|
+
import { dirname } from 'path';
|
|
3
|
+
import { isSystemError } from '../util.js';
|
|
4
|
+
/**
|
|
5
|
+
* Write a file if it doesn't exist or is changed.
|
|
6
|
+
* @param filePath The file path.
|
|
7
|
+
* @param newContent The new content of the file.
|
|
8
|
+
*/
|
|
9
|
+
export async function writeFileIfChanged(filePath, newContent) {
|
|
10
|
+
try {
|
|
11
|
+
const content = await readFile(filePath, 'utf8');
|
|
12
|
+
if (content !== newContent) {
|
|
13
|
+
await writeFile(filePath, newContent, 'utf8');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
catch (e) {
|
|
17
|
+
if (isSystemError(e) && e.code === 'ENOENT') {
|
|
18
|
+
await mkdir(dirname(filePath), { recursive: true }); // if directory doesn't exist, create it
|
|
19
|
+
await writeFile(filePath, newContent, 'utf8');
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
throw e;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=file-system.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-system.js","sourceRoot":"","sources":["../../src/emitter/file-system.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,QAAgB,EAAE,UAAkB;IAC3E,IAAI;QACF,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QACjD,IAAI,OAAO,KAAK,UAAU,EAAE;YAC1B,MAAM,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;SAC/C;KACF;IAAC,OAAO,CAAC,EAAE;QACV,IAAI,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE;YAC3C,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,wCAAwC;YAC7F,MAAM,SAAS,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;SAC/C;aAAM;YACL,MAAM,CAAC,CAAC;SACT;KACF;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { readFile, rm, stat } from 'fs/promises';
|
|
2
|
+
import { createFixtures, getFixturePath } from '../test/util.js';
|
|
3
|
+
import { writeFileIfChanged } from './file-system.js';
|
|
4
|
+
const TEST_FILE_PATH = getFixturePath('/test.txt');
|
|
5
|
+
const TEST_NESTED_FILE_PATH = getFixturePath('/dir/test.txt');
|
|
6
|
+
const OLD_CONTENT = 'old';
|
|
7
|
+
const NEW_CONTENT = 'new';
|
|
8
|
+
beforeEach(async () => {
|
|
9
|
+
createFixtures({});
|
|
10
|
+
await writeFileIfChanged(TEST_FILE_PATH, OLD_CONTENT);
|
|
11
|
+
});
|
|
12
|
+
describe('writeFileIfChanged', () => {
|
|
13
|
+
test('should write file if changed', async () => {
|
|
14
|
+
await writeFileIfChanged(TEST_FILE_PATH, NEW_CONTENT);
|
|
15
|
+
expect(await readFile(TEST_FILE_PATH, 'utf8')).toBe(NEW_CONTENT);
|
|
16
|
+
});
|
|
17
|
+
test('should not write file if not changed', async () => {
|
|
18
|
+
const oldStat = await stat(TEST_FILE_PATH);
|
|
19
|
+
await writeFileIfChanged(TEST_FILE_PATH, OLD_CONTENT);
|
|
20
|
+
const newStat = await stat(TEST_FILE_PATH);
|
|
21
|
+
expect(oldStat.mtimeMs).toBe(newStat.mtimeMs);
|
|
22
|
+
});
|
|
23
|
+
test("should create new file if it doesn't exist", async () => {
|
|
24
|
+
await rm(TEST_FILE_PATH);
|
|
25
|
+
await writeFileIfChanged(TEST_FILE_PATH, NEW_CONTENT);
|
|
26
|
+
expect(await readFile(TEST_FILE_PATH, 'utf8')).toBe(NEW_CONTENT);
|
|
27
|
+
});
|
|
28
|
+
test('should write file in nested directories', async () => {
|
|
29
|
+
await writeFileIfChanged(TEST_NESTED_FILE_PATH, NEW_CONTENT);
|
|
30
|
+
expect(await readFile(TEST_NESTED_FILE_PATH, 'utf8')).toBe(NEW_CONTENT);
|
|
31
|
+
await writeFileIfChanged(TEST_NESTED_FILE_PATH, NEW_CONTENT);
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
//# sourceMappingURL=file-system.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-system.test.js","sourceRoot":"","sources":["../../src/emitter/file-system.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,cAAc,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;AACnD,MAAM,qBAAqB,GAAG,cAAc,CAAC,eAAe,CAAC,CAAC;AAC9D,MAAM,WAAW,GAAG,KAAK,CAAC;AAC1B,MAAM,WAAW,GAAG,KAAK,CAAC;AAE1B,UAAU,CAAC,KAAK,IAAI,EAAE;IACpB,cAAc,CAAC,EAAE,CAAC,CAAC;IACnB,MAAM,kBAAkB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;AACxD,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IAClC,IAAI,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC9C,MAAM,kBAAkB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,sCAAsC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3C,MAAM,kBAAkB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC;QAC3C,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,EAAE,CAAC,cAAc,CAAC,CAAC;QACzB,MAAM,kBAAkB,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;QACtD,MAAM,CAAC,MAAM,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,kBAAkB,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACxE,MAAM,kBAAkB,CAAC,qBAAqB,EAAE,WAAW,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type Token } from '../loader/index.js';
|
|
2
|
+
import { type LocalsConvention } from '../runner.js';
|
|
3
|
+
export declare function getRelativePath(fromFilePath: string, toFilePath: string): string;
|
|
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
|
+
export declare type DtsFormatOptions = {
|
|
13
|
+
localsConvention?: LocalsConvention;
|
|
14
|
+
};
|
|
15
|
+
/** The options for emitter. */
|
|
16
|
+
export declare type EmitterOptions = {
|
|
17
|
+
/** The path to the source file (i.e. `/dir/foo.css`). It is absolute. */
|
|
18
|
+
filePath: string;
|
|
19
|
+
/** The tokens exported by the source file. */
|
|
20
|
+
tokens: Token[];
|
|
21
|
+
/** The distribution option. */
|
|
22
|
+
distOptions: DistOptions | undefined;
|
|
23
|
+
/** Whether to output declaration map (i.e. `/dir/foo.css.d.ts.map`) or not. */
|
|
24
|
+
emitDeclarationMap: boolean | undefined;
|
|
25
|
+
/** The options for formatting the type definition. */
|
|
26
|
+
dtsFormatOptions: DtsFormatOptions | undefined;
|
|
27
|
+
/** Silent output. Do not show "files written" messages */
|
|
28
|
+
silent: boolean;
|
|
29
|
+
/** Working directory path. */
|
|
30
|
+
cwd: string;
|
|
31
|
+
/** Whether the file is from an external library or not. */
|
|
32
|
+
isExternalFile: (filePath: string) => boolean;
|
|
33
|
+
};
|
|
34
|
+
export declare function emitGeneratedFiles({ filePath, tokens, distOptions, emitDeclarationMap, dtsFormatOptions, silent, cwd, isExternalFile, }: EmitterOptions): Promise<void>;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { dirname, isAbsolute, relative } from 'path';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { generateDtsContentWithSourceMap, getDtsFilePath } from './dts.js';
|
|
4
|
+
import { writeFileIfChanged } from './file-system.js';
|
|
5
|
+
import { generateSourceMappingURLComment, getSourceMapFilePath } from './source-map.js';
|
|
6
|
+
export function getRelativePath(fromFilePath, toFilePath) {
|
|
7
|
+
const resolved = relative(dirname(fromFilePath), toFilePath);
|
|
8
|
+
if (resolved.startsWith('..')) {
|
|
9
|
+
return resolved;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
return './' + resolved;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export function isSubDirectoryFile(fromDirectory, toFilePath) {
|
|
16
|
+
return isAbsolute(toFilePath) && toFilePath.startsWith(fromDirectory);
|
|
17
|
+
}
|
|
18
|
+
function outputWriteLog(cwd, filePath) {
|
|
19
|
+
console.log('Wrote ' + chalk.green(relative(cwd, filePath)));
|
|
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);
|
|
24
|
+
const { dtsContent, sourceMap } = generateDtsContentWithSourceMap(filePath, dtsFilePath, sourceMapFilePath, tokens, dtsFormatOptions, isExternalFile);
|
|
25
|
+
if (emitDeclarationMap) {
|
|
26
|
+
const sourceMappingURLComment = generateSourceMappingURLComment(dtsFilePath, sourceMapFilePath);
|
|
27
|
+
await writeFileIfChanged(dtsFilePath, dtsContent + sourceMappingURLComment);
|
|
28
|
+
if (!silent)
|
|
29
|
+
outputWriteLog(cwd, dtsFilePath);
|
|
30
|
+
// NOTE: tsserver does not support inline declaration maps. Therefore, sourcemap files must be output.
|
|
31
|
+
// blocked by: https://github.com/microsoft/TypeScript/issues/38966
|
|
32
|
+
await writeFileIfChanged(sourceMapFilePath, sourceMap.toString());
|
|
33
|
+
if (!silent)
|
|
34
|
+
outputWriteLog(cwd, sourceMapFilePath);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
await writeFileIfChanged(dtsFilePath, dtsContent);
|
|
38
|
+
if (!silent)
|
|
39
|
+
outputWriteLog(cwd, dtsFilePath);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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;AACrD,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,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;AAED,SAAS,cAAc,CAAC,GAAW,EAAE,QAAgB;IACnD,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC/D,CAAC;AAkCD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EACvC,QAAQ,EACR,MAAM,EACN,WAAW,EACX,kBAAkB,EAClB,gBAAgB,EAChB,MAAM,EACN,GAAG,EACH,cAAc,GACC;IACf,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC1D,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IACtE,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,IAAI,CAAC,MAAM;YAAE,cAAc,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAE9C,sGAAsG;QACtG,mEAAmE;QACnE,MAAM,kBAAkB,CAAC,iBAAiB,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM;YAAE,cAAc,CAAC,GAAG,EAAE,iBAAiB,CAAC,CAAC;KACrD;SAAM;QACL,MAAM,kBAAkB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM;YAAE,cAAc,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;KAC/C;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { readFile, stat } from 'fs/promises';
|
|
2
|
+
import { jest } from '@jest/globals';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
import { createFixtures, exists, fakeToken, getFixturePath, waitForAsyncTask } from '../test/util.js';
|
|
5
|
+
import { emitGeneratedFiles, getRelativePath, isSubDirectoryFile } from './index.js';
|
|
6
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
7
|
+
const consoleLogSpy = jest.spyOn(console, 'log').mockImplementation(() => { });
|
|
8
|
+
beforeEach(() => {
|
|
9
|
+
consoleLogSpy.mockClear();
|
|
10
|
+
});
|
|
11
|
+
test('getRelativePath', () => {
|
|
12
|
+
expect(getRelativePath('/test/1.css.d.ts', '/test/1.css')).toBe('./1.css');
|
|
13
|
+
expect(getRelativePath('/test/1.css.d.ts', '/test/dir/1.css')).toBe('./dir/1.css');
|
|
14
|
+
expect(getRelativePath('/test/1.css.d.ts', '/1.css')).toBe('../1.css');
|
|
15
|
+
});
|
|
16
|
+
test('isSubDirectoryFile', () => {
|
|
17
|
+
expect(isSubDirectoryFile('/test', '/test/src/1.css')).toBe(true);
|
|
18
|
+
expect(isSubDirectoryFile('/test', '/test/dist/1.css')).toBe(true);
|
|
19
|
+
expect(isSubDirectoryFile('/test', '/1.css')).toBe(false);
|
|
20
|
+
});
|
|
21
|
+
describe('emitGeneratedFiles', () => {
|
|
22
|
+
const defaultArgs = {
|
|
23
|
+
filePath: getFixturePath('/test/1.css'),
|
|
24
|
+
tokens: [fakeToken({ name: 'foo', originalLocations: [{ start: { line: 1, column: 1 } }] })],
|
|
25
|
+
distOptions: undefined,
|
|
26
|
+
emitDeclarationMap: true,
|
|
27
|
+
dtsFormatOptions: undefined,
|
|
28
|
+
silent: true,
|
|
29
|
+
cwd: getFixturePath('/test'),
|
|
30
|
+
isExternalFile: () => false,
|
|
31
|
+
};
|
|
32
|
+
beforeEach(() => {
|
|
33
|
+
createFixtures({
|
|
34
|
+
'/test': {}, // empty directory
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
test('generates .d.ts and .d.ts.map', async () => {
|
|
38
|
+
await emitGeneratedFiles({ ...defaultArgs });
|
|
39
|
+
expect(await exists(getFixturePath('/test/1.css.d.ts'))).toBeTruthy();
|
|
40
|
+
// A link to the source map is embedded.
|
|
41
|
+
expect(await readFile(getFixturePath('/test/1.css.d.ts'), 'utf8')).toEqual(expect.stringContaining('//# sourceMappingURL=./1.css.d.ts.map'));
|
|
42
|
+
expect(await exists(getFixturePath('/test/1.css.d.ts.map'))).toBeTruthy();
|
|
43
|
+
});
|
|
44
|
+
test('generates only .d.ts and .d.ts.map if emitDeclarationMap is false', async () => {
|
|
45
|
+
await emitGeneratedFiles({ ...defaultArgs, emitDeclarationMap: false });
|
|
46
|
+
expect(await exists(getFixturePath('/test/1.css.d.ts'))).toBeTruthy();
|
|
47
|
+
// A link to the source map is not embedded.
|
|
48
|
+
expect(await readFile(getFixturePath('/test/1.css.d.ts'), 'utf8')).toEqual(expect.not.stringContaining('//# sourceMappingURL=1.css.d.ts.map'));
|
|
49
|
+
expect(await exists(getFixturePath('/test/1.css.d.ts.map'))).toBeFalsy();
|
|
50
|
+
});
|
|
51
|
+
test('skips writing to disk if the generated files are the same', async () => {
|
|
52
|
+
const tokens1 = [fakeToken({ name: 'foo', originalLocations: [{ start: { line: 1, column: 1 } }] })];
|
|
53
|
+
await emitGeneratedFiles({ ...defaultArgs, tokens: tokens1 });
|
|
54
|
+
const mtimeForDts1 = (await stat(getFixturePath('/test/1.css.d.ts'))).mtime;
|
|
55
|
+
const mtimeForSourceMap1 = (await stat(getFixturePath('/test/1.css.d.ts.map'))).mtime;
|
|
56
|
+
await waitForAsyncTask(1); // so that mtime changes.
|
|
57
|
+
await emitGeneratedFiles({ ...defaultArgs, tokens: tokens1 });
|
|
58
|
+
const mtimeForDts2 = (await stat(getFixturePath('/test/1.css.d.ts'))).mtime;
|
|
59
|
+
const mtimeForSourceMap2 = (await stat(getFixturePath('/test/1.css.d.ts.map'))).mtime;
|
|
60
|
+
expect(mtimeForDts1).toEqual(mtimeForDts2); // skipped
|
|
61
|
+
expect(mtimeForSourceMap1).toEqual(mtimeForSourceMap2); // skipped
|
|
62
|
+
await waitForAsyncTask(1); // so that mtime changes.
|
|
63
|
+
const tokens2 = [fakeToken({ name: 'bar', originalLocations: [{ start: { line: 1, column: 1 } }] })];
|
|
64
|
+
await emitGeneratedFiles({ ...defaultArgs, tokens: tokens2 });
|
|
65
|
+
const mtimeForDts3 = (await stat(getFixturePath('/test/1.css.d.ts'))).mtime;
|
|
66
|
+
const mtimeForSourceMap3 = (await stat(getFixturePath('/test/1.css.d.ts.map'))).mtime;
|
|
67
|
+
expect(mtimeForDts1).not.toEqual(mtimeForDts3); // not skipped
|
|
68
|
+
expect(mtimeForSourceMap1).not.toEqual(mtimeForSourceMap3); // not skipped
|
|
69
|
+
});
|
|
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
|
+
});
|
|
118
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/emitter/index.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type DistOptions } from './index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Get .d.ts.map file path.
|
|
4
|
+
* @param filePath The path to the source file (i.e. `foo.css`). It is absolute.
|
|
5
|
+
* @param distOptions The distribution option.
|
|
6
|
+
* @returns The path to the .d.ts.map file. It is absolute.
|
|
7
|
+
*/
|
|
8
|
+
export declare function getSourceMapFilePath(filePath: string, distOptions: DistOptions | undefined): string;
|
|
9
|
+
export declare function generateSourceMappingURLComment(dtsFilePath: string, sourceMapFilePath: string): string;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { EOL } from 'os';
|
|
2
|
+
import { getDtsFilePath } from './dts.js';
|
|
3
|
+
import { getRelativePath } from './index.js';
|
|
4
|
+
/**
|
|
5
|
+
* Get .d.ts.map file path.
|
|
6
|
+
* @param filePath The path to the source file (i.e. `foo.css`). It is absolute.
|
|
7
|
+
* @param distOptions The distribution option.
|
|
8
|
+
* @returns The path to the .d.ts.map file. It is absolute.
|
|
9
|
+
*/
|
|
10
|
+
export function getSourceMapFilePath(filePath, distOptions) {
|
|
11
|
+
return getDtsFilePath(filePath, distOptions) + '.map';
|
|
12
|
+
}
|
|
13
|
+
export function generateSourceMappingURLComment(dtsFilePath, sourceMapFilePath) {
|
|
14
|
+
return `//# sourceMappingURL=${getRelativePath(dtsFilePath, sourceMapFilePath)}` + EOL;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=source-map.js.map
|
|
@@ -0,0 +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,EAAoB,eAAe,EAAE,MAAM,YAAY,CAAC;AAE/D;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAAC,QAAgB,EAAE,WAAoC;IACzF,OAAO,cAAc,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,MAAM,CAAC;AACxD,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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { EOL } from 'os';
|
|
2
|
+
import { getSourceMapFilePath, generateSourceMappingURLComment } from './source-map.js';
|
|
3
|
+
test('getSourceMapFilePath', () => {
|
|
4
|
+
expect(getSourceMapFilePath('/app/src/dir/1.css', undefined)).toBe('/app/src/dir/1.css.d.ts.map');
|
|
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();
|
|
8
|
+
});
|
|
9
|
+
test('generateSourceMappingURLComment', () => {
|
|
10
|
+
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);
|
|
11
|
+
expect(generateSourceMappingURLComment('/app/src/dir1/1.css.d.ts', '/app/src/dir2/1.css.d.ts.map')).toBe('//# sourceMappingURL=../dir2/1.css.d.ts.map' + EOL);
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=source-map.test.js.map
|
|
@@ -0,0 +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,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC;IAClG,MAAM,CAAC,oBAAoB,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAC/F,kCAAkC,CACnC,CAAC;IACF,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC7G,MAAM,CAAC,GAAG,EAAE,CAAC,oBAAoB,CAAC,oBAAoB,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;AAC/G,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
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +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,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|