happy-css-modules 0.5.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +112 -10
- package/dist/cli.js +17 -10
- package/dist/cli.js.map +1 -1
- package/dist/cli.test.js +9 -4
- package/dist/cli.test.js.map +1 -1
- package/dist/emitter/dts.d.ts +3 -4
- package/dist/emitter/dts.js +4 -14
- package/dist/emitter/dts.js.map +1 -1
- package/dist/emitter/dts.test.js +7 -10
- package/dist/emitter/dts.test.js.map +1 -1
- package/dist/emitter/index.d.ts +6 -15
- package/dist/emitter/index.js +18 -13
- package/dist/emitter/index.js.map +1 -1
- package/dist/emitter/index.test.js +0 -50
- package/dist/emitter/index.test.js.map +1 -1
- package/dist/emitter/source-map.d.ts +1 -3
- package/dist/emitter/source-map.js +2 -3
- package/dist/emitter/source-map.js.map +1 -1
- package/dist/emitter/source-map.test.js +1 -4
- package/dist/emitter/source-map.test.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/integration-test/go-to-definition.test.js +1 -0
- package/dist/integration-test/go-to-definition.test.js.map +1 -1
- package/dist/{loader → locator}/index.d.ts +6 -4
- package/dist/{loader → locator}/index.js +13 -5
- package/dist/locator/index.js.map +1 -0
- package/dist/{loader → locator}/index.test.d.ts +0 -0
- package/dist/{loader → locator}/index.test.js +25 -17
- package/dist/locator/index.test.js.map +1 -0
- package/dist/{loader → locator}/postcss.d.ts +0 -0
- package/dist/{loader → locator}/postcss.js +0 -0
- package/dist/locator/postcss.js.map +1 -0
- package/dist/{loader → locator}/postcss.test.d.ts +0 -0
- package/dist/{loader → locator}/postcss.test.js +0 -0
- package/dist/locator/postcss.test.js.map +1 -0
- package/dist/runner.d.ts +10 -1
- package/dist/runner.js +52 -18
- package/dist/runner.js.map +1 -1
- package/dist/runner.test.js +60 -3
- package/dist/runner.test.js.map +1 -1
- package/dist/test/util.d.ts +1 -1
- package/dist/test/util.js +1 -1
- package/dist/test/util.js.map +1 -1
- package/dist/transformer/index.d.ts +1 -1
- package/dist/transformer/index.test.js +8 -8
- package/dist/transformer/index.test.js.map +1 -1
- package/dist/transformer/less-transformer.test.js +8 -8
- package/dist/transformer/less-transformer.test.js.map +1 -1
- package/dist/transformer/postcss-transformer.test.js +13 -13
- package/dist/transformer/postcss-transformer.test.js.map +1 -1
- package/dist/transformer/scss-transformer.test.js +8 -8
- package/dist/transformer/scss-transformer.test.js.map +1 -1
- package/dist/util.d.ts +2 -0
- package/dist/util.js +19 -2
- package/dist/util.js.map +1 -1
- package/package.json +6 -7
- package/src/cli.test.ts +9 -4
- package/src/cli.ts +17 -11
- package/src/emitter/dts.test.ts +7 -12
- package/src/emitter/dts.ts +5 -14
- package/src/emitter/index.test.ts +0 -52
- package/src/emitter/index.ts +22 -29
- package/src/emitter/source-map.test.ts +1 -6
- package/src/emitter/source-map.ts +3 -4
- package/src/index.ts +1 -0
- package/src/integration-test/go-to-definition.test.ts +1 -0
- package/src/{loader → locator}/index.test.ts +26 -17
- package/src/{loader → locator}/index.ts +16 -8
- package/src/{loader → locator}/postcss.test.ts +0 -0
- package/src/{loader → locator}/postcss.ts +0 -0
- package/src/runner.test.ts +71 -3
- package/src/runner.ts +61 -19
- package/src/test/util.ts +1 -1
- package/src/transformer/index.test.ts +8 -8
- package/src/transformer/index.ts +1 -1
- package/src/transformer/less-transformer.test.ts +8 -8
- package/src/transformer/postcss-transformer.test.ts +13 -13
- package/src/transformer/scss-transformer.test.ts +8 -8
- package/src/util.ts +21 -2
- package/dist/loader/index.js.map +0 -1
- package/dist/loader/index.test.js.map +0 -1
- package/dist/loader/postcss.js.map +0 -1
- package/dist/loader/postcss.test.js.map +0 -1
package/README.md
CHANGED
|
@@ -2,15 +2,29 @@
|
|
|
2
2
|
<img alt="Cover image" src="./docs/cover.svg" />
|
|
3
3
|
</p>
|
|
4
4
|
|
|
5
|
-
<h2 align="center">
|
|
5
|
+
<h2 align="center">Make CSS Modules happy :)</h2>
|
|
6
6
|
|
|
7
7
|
<p align="center">
|
|
8
|
-
<em>Typed, definition jumps, and unused
|
|
8
|
+
<em>Typed, definition jumps, and unused selector detection!</em>
|
|
9
9
|
</p>
|
|
10
10
|
|
|
11
11
|
https://user-images.githubusercontent.com/9639995/189538880-872ad38d-2c9d-4c19-b257-521018963eec.mov
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
## Features
|
|
14
|
+
|
|
15
|
+
- :white_check_mark: Strict type checking
|
|
16
|
+
- Generate `.d.ts` of CSS Modules for type checking
|
|
17
|
+
- :mag: Definition jumps
|
|
18
|
+
- Clicking on a property on `.jsx`/`.tsx` will jump to the source of the definition on `.module.css`.
|
|
19
|
+
- This is accomplished by generating `.d.ts.map` (a.k.a. [Declaration Map](https://www.typescriptlang.org/tsconfig#declarationMap)).
|
|
20
|
+
- :rotating_light: Unused selector detection (**Not implemented yet**)
|
|
21
|
+
- Detect unused selectors using information from strict type checking.
|
|
22
|
+
- :handshake: High compatibility with the ecosystem
|
|
23
|
+
- Support for Postcss/Sass/Less
|
|
24
|
+
- Implement webpack-compatible resolving algorithms
|
|
25
|
+
- Also supports [`resolve.alias`](https://webpack.js.org/configuration/resolve/#resolvealias)
|
|
26
|
+
- :beginner: Easy to use
|
|
27
|
+
- No configuration file, some simple CLI options
|
|
14
28
|
|
|
15
29
|
## Installation
|
|
16
30
|
|
|
@@ -20,14 +34,21 @@ $ npm i -D happy-css-modules
|
|
|
20
34
|
|
|
21
35
|
## Usage
|
|
22
36
|
|
|
37
|
+
In the simple case, everything goes well with the following!
|
|
38
|
+
|
|
39
|
+
```console
|
|
40
|
+
$ hcm 'src/**/*.module.{css,scss,less}'
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
If you want to customize the behavior, see `--help`.
|
|
44
|
+
|
|
23
45
|
```console
|
|
24
46
|
$ hcm --help
|
|
25
|
-
|
|
47
|
+
Generate .d.ts and .d.ts.map for CSS modules.
|
|
26
48
|
|
|
27
49
|
hcm [options] <glob>
|
|
28
50
|
|
|
29
51
|
Options:
|
|
30
|
-
--outDir Output directory [string]
|
|
31
52
|
-w, --watch Watch input directory's css files or pattern [boolean] [default: false]
|
|
32
53
|
--localsConvention Style of exported class names. [choices: "camelCase", "camelCaseOnly", "dashes", "dashesOnly"]
|
|
33
54
|
--declarationMap Create sourcemaps for d.ts files [boolean] [default: true]
|
|
@@ -35,6 +56,8 @@ Options:
|
|
|
35
56
|
--lessIncludePaths The option compatible with less's `--include-path`. [array]
|
|
36
57
|
--webpackResolveAlias The option compatible with webpack's `resolve.alias`. [string]
|
|
37
58
|
--postcssConfig The option compatible with postcss's `--config`. [string]
|
|
59
|
+
--cache Only generate .d.ts and .d.ts.map for changed files. [boolean] [default: true]
|
|
60
|
+
--cacheStrategy Strategy for the cache to use for detecting changed files.[choices: "content", "metadata"] [default: "content"]
|
|
38
61
|
--silent Silent output. Do not show "files written" messages [boolean] [default: false]
|
|
39
62
|
-h, --help Show help [boolean]
|
|
40
63
|
-v, --version Show version number [boolean]
|
|
@@ -47,6 +70,7 @@ Examples:
|
|
|
47
70
|
hcm 'src/**/*.module.css' --sassLoadPaths=src/style Run with sass's `--load-path`.
|
|
48
71
|
hcm 'src/**/*.module.css' --lessIncludePaths=src/style Run with less's `--include-path`.
|
|
49
72
|
hcm 'src/**/*.module.css' --webpackResolveAlias='{"@": "src"}' Run with webpack's `resolve.alias`.
|
|
73
|
+
hcm 'src/**/*.module.css' --cache=false Disable cache.
|
|
50
74
|
```
|
|
51
75
|
|
|
52
76
|
## Node.js API (Experimental)
|
|
@@ -163,9 +187,87 @@ run({ ...runnerOptions, resolver, cwd }).catch((e) => {
|
|
|
163
187
|
});
|
|
164
188
|
```
|
|
165
189
|
|
|
166
|
-
|
|
190
|
+
### Example: Get locations for selectors exported by CSS Modules
|
|
191
|
+
|
|
192
|
+
`Locator` can be used to get location for selectors exported by CSS Modules.
|
|
193
|
+
|
|
194
|
+
```typescript
|
|
195
|
+
import { Locator } from 'happy-css-modules';
|
|
196
|
+
import { resolve } from 'path';
|
|
197
|
+
import assert from 'assert';
|
|
198
|
+
|
|
199
|
+
const locator = new Locator({
|
|
200
|
+
// You can customize the transformer and resolver used by the locator.
|
|
201
|
+
// transformer: createDefaultTransformer(),
|
|
202
|
+
// resolver: createDefaultResolver(),
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
// Process https://github.com/mizdra/happy-css-modules/blob/main/example/02-import/2.css
|
|
206
|
+
const filePath = resolve('example/02-import/2.css'); // Convert to absolute path
|
|
207
|
+
const result = await locator.load(filePath);
|
|
208
|
+
|
|
209
|
+
assert.deepEqual(result, {
|
|
210
|
+
dependencies: ['/Users/mizdra/src/github.com/mizdra/happy-css-modules/example/02-import/3.css'],
|
|
211
|
+
tokens: [
|
|
212
|
+
{
|
|
213
|
+
name: 'b',
|
|
214
|
+
originalLocations: [
|
|
215
|
+
{
|
|
216
|
+
filePath: '/Users/mizdra/src/github.com/mizdra/happy-css-modules/example/02-import/3.css',
|
|
217
|
+
start: { line: 1, column: 1 },
|
|
218
|
+
end: { line: 1, column: 2 },
|
|
219
|
+
},
|
|
220
|
+
],
|
|
221
|
+
},
|
|
222
|
+
{
|
|
223
|
+
name: 'a',
|
|
224
|
+
originalLocations: [
|
|
225
|
+
{
|
|
226
|
+
filePath: '/Users/mizdra/src/github.com/mizdra/happy-css-modules/example/02-import/2.css',
|
|
227
|
+
start: { line: 3, column: 1 },
|
|
228
|
+
end: { line: 3, column: 2 },
|
|
229
|
+
},
|
|
230
|
+
],
|
|
231
|
+
},
|
|
232
|
+
],
|
|
233
|
+
});
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## About the origins of this project
|
|
237
|
+
|
|
238
|
+
This project was born as a PoC for [Quramy/typed-css-modules#177](https://github.com/Quramy/typed-css-modules/issues/177). That is why this project forks [`Quramy/typed-css-modules`](https://github.com/Quramy/typed-css-modules). Due to refactoring, only a small amount of code now comes from `Quramy/typed-css-modules`, but its contributions can still be found in the credits of the license.
|
|
239
|
+
|
|
240
|
+
Thank you [@Quramy](https://github.com/Quramy)!
|
|
241
|
+
|
|
242
|
+
## Prior art
|
|
243
|
+
|
|
244
|
+
There are several prior art for each feature. In contrast, happy-css-modules is a comprehensive implementation of these features.
|
|
245
|
+
|
|
246
|
+
### Strict type checking
|
|
247
|
+
|
|
248
|
+
- [typed-css-modules](https://github.com/Quramy/typed-css-modules)
|
|
249
|
+
- Only `.css` can be processed.
|
|
250
|
+
- Resolving using webpack's resolve.alias is not implemented.
|
|
251
|
+
- [typed-scss-modules](https://github.com/skovy/typed-scss-modules)
|
|
252
|
+
- Only `.scss` can be processed.
|
|
253
|
+
- Resolving using webpack's resolve.alias is not implemented.
|
|
254
|
+
- [typed-less-modules](https://github.com/qiniu/typed-less-modules)
|
|
255
|
+
- Only `.less` can be processed.
|
|
256
|
+
- Resolving using webpack's resolve.alias is not implemented.
|
|
257
|
+
- [typescript-plugin-css-modules](https://github.com/mrmckeb/typescript-plugin-css-modules)
|
|
258
|
+
- This is implemented as a TypeScript language service.
|
|
259
|
+
- Therefore, warnings can be issued on the editor, but not at compile time.
|
|
260
|
+
- In addition, the setup procedure is complicated.
|
|
261
|
+
- For more information, see [the documentation](https://github.com/mrmckeb/typescript-plugin-css-modules/tree/82ba03548c3d2193508e1a4dbc47c1aa9b22943c#about-this-plugin).
|
|
262
|
+
|
|
263
|
+
### Definition jumps
|
|
264
|
+
|
|
265
|
+
- [typescript-plugin-css-modules](https://github.com/mrmckeb/typescript-plugin-css-modules)
|
|
266
|
+
- Can only jump to the top of `.css`.
|
|
267
|
+
|
|
268
|
+
### Unused selector detection
|
|
167
269
|
|
|
168
|
-
- [
|
|
169
|
-
-
|
|
170
|
-
-
|
|
171
|
-
-
|
|
270
|
+
- [stylelint-no-unused-selectors](https://github.com/nodaguti/stylelint-no-unused-selectors)
|
|
271
|
+
- Detectable patterns are limited.
|
|
272
|
+
- However, it works without `.d.ts`.
|
|
273
|
+
- For more information, see [the documentation](https://github.com/nodaguti/stylelint-no-unused-selectors/tree/57eeacaab675957aaa507f5524b9b78947e127b2/src/plugins/stylelint-no-unused-selectors-plugin-tsx#features-and-limitations)
|
package/dist/cli.js
CHANGED
|
@@ -1,18 +1,16 @@
|
|
|
1
|
-
import { readFileSync } from 'fs';
|
|
2
|
-
import { dirname, resolve } from 'path';
|
|
3
|
-
import { fileURLToPath } from 'url';
|
|
4
1
|
import yargs from 'yargs';
|
|
5
2
|
import { hideBin } from 'yargs/helpers';
|
|
6
|
-
|
|
3
|
+
import { getPackageJson } from './util.js';
|
|
7
4
|
/**
|
|
8
5
|
* Parse command line arguments.
|
|
9
6
|
* @returns Runner options.
|
|
10
7
|
*/
|
|
11
8
|
export function parseArgv(argv) {
|
|
9
|
+
const pkgJson = getPackageJson();
|
|
12
10
|
const parsedArgv = yargs(hideBin(argv))
|
|
13
11
|
.wrap(Math.min(140, process.stdout.columns))
|
|
14
12
|
.scriptName('hcm')
|
|
15
|
-
.usage('
|
|
13
|
+
.usage('Generate .d.ts and .d.ts.map for CSS modules.\n\n$0 [options] <glob>')
|
|
16
14
|
.example("$0 'src/**/*.module.css'", 'Generate .d.ts and .d.ts.map.')
|
|
17
15
|
.example("$0 'src/**/*.module.{css,scss,less}'", 'Also generate files for sass and less.')
|
|
18
16
|
.example("$0 'src/**/*.module.css' --watch", 'Watch for changes and generate .d.ts and .d.ts.map.')
|
|
@@ -20,11 +18,8 @@ export function parseArgv(argv) {
|
|
|
20
18
|
.example("$0 'src/**/*.module.css' --sassLoadPaths=src/style", "Run with sass's `--load-path`.")
|
|
21
19
|
.example("$0 'src/**/*.module.css' --lessIncludePaths=src/style", "Run with less's `--include-path`.")
|
|
22
20
|
.example('$0 \'src/**/*.module.css\' --webpackResolveAlias=\'{"@": "src"}\'', "Run with webpack's `resolve.alias`.")
|
|
21
|
+
.example("$0 'src/**/*.module.css' --cache=false", 'Disable cache.')
|
|
23
22
|
.detectLocale(false)
|
|
24
|
-
.option('outDir', {
|
|
25
|
-
type: 'string',
|
|
26
|
-
describe: 'Output directory',
|
|
27
|
-
})
|
|
28
23
|
.option('watch', {
|
|
29
24
|
type: 'boolean',
|
|
30
25
|
alias: 'w',
|
|
@@ -58,6 +53,17 @@ export function parseArgv(argv) {
|
|
|
58
53
|
.option('postcssConfig', {
|
|
59
54
|
string: true,
|
|
60
55
|
describe: "The option compatible with postcss's `--config`.",
|
|
56
|
+
})
|
|
57
|
+
.option('cache', {
|
|
58
|
+
type: 'boolean',
|
|
59
|
+
default: true,
|
|
60
|
+
describe: 'Only generate .d.ts and .d.ts.map for changed files.',
|
|
61
|
+
})
|
|
62
|
+
.option('cacheStrategy', {
|
|
63
|
+
choices: ['content', 'metadata'],
|
|
64
|
+
// NOTE: This is a workaround for `parsedArgv.cacheStrategy` type breaks.
|
|
65
|
+
default: 'content',
|
|
66
|
+
describe: 'Strategy for the cache to use for detecting changed files.',
|
|
61
67
|
})
|
|
62
68
|
.option('silent', {
|
|
63
69
|
type: 'boolean',
|
|
@@ -93,7 +99,6 @@ export function parseArgv(argv) {
|
|
|
93
99
|
const patterns = parsedArgv._.map((pattern) => pattern.toString());
|
|
94
100
|
return {
|
|
95
101
|
pattern: patterns[0],
|
|
96
|
-
outDir: parsedArgv.outDir,
|
|
97
102
|
watch: parsedArgv.watch,
|
|
98
103
|
localsConvention: parsedArgv.localsConvention,
|
|
99
104
|
declarationMap: parsedArgv.declarationMap,
|
|
@@ -101,6 +106,8 @@ export function parseArgv(argv) {
|
|
|
101
106
|
lessIncludePaths: parsedArgv.lessIncludePaths?.map((item) => item.toString()),
|
|
102
107
|
webpackResolveAlias: parsedArgv.webpackResolveAlias ? JSON.parse(parsedArgv.webpackResolveAlias) : undefined,
|
|
103
108
|
postcssConfig: parsedArgv.postcssConfig,
|
|
109
|
+
cache: parsedArgv.cache,
|
|
110
|
+
cacheStrategy: parsedArgv.cacheStrategy,
|
|
104
111
|
silent: parsedArgv.silent,
|
|
105
112
|
};
|
|
106
113
|
}
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.test.js
CHANGED
|
@@ -7,10 +7,6 @@ describe('parseArgv', () => {
|
|
|
7
7
|
// TODO: Support multiple patterns
|
|
8
8
|
// parseArgv([...baseArgs, 'foo', 'bar']);
|
|
9
9
|
});
|
|
10
|
-
test('--outDir', () => {
|
|
11
|
-
expect(parseArgv([...baseArgs, '1.css', '--outDir', 'foo']).outDir).toStrictEqual('foo');
|
|
12
|
-
expect(parseArgv([...baseArgs, '1.css', '--outDir', '1']).outDir).toStrictEqual('1');
|
|
13
|
-
});
|
|
14
10
|
test('--watch', () => {
|
|
15
11
|
expect(parseArgv([...baseArgs, '1.css', '--watch']).watch).toBe(true);
|
|
16
12
|
expect(parseArgv([...baseArgs, '1.css', '--no-watch']).watch).toBe(false);
|
|
@@ -47,6 +43,15 @@ describe('parseArgv', () => {
|
|
|
47
43
|
expect(parseArgv([...baseArgs, '1.css', '--postcssConfig', '.']).postcssConfig).toBe('.');
|
|
48
44
|
expect(parseArgv([...baseArgs, '1.css', '--postcssConfig', 'postcss.config.js']).postcssConfig).toBe('postcss.config.js');
|
|
49
45
|
});
|
|
46
|
+
test('--cache', () => {
|
|
47
|
+
expect(parseArgv([...baseArgs, '1.css']).cache).toBe(true);
|
|
48
|
+
expect(parseArgv([...baseArgs, '1.css', '--cache']).cache).toBe(true);
|
|
49
|
+
expect(parseArgv([...baseArgs, '1.css', '--no-cache']).cache).toBe(false);
|
|
50
|
+
});
|
|
51
|
+
test('--cacheStrategy', () => {
|
|
52
|
+
expect(parseArgv([...baseArgs, '1.css']).cacheStrategy).toBe('content');
|
|
53
|
+
expect(parseArgv([...baseArgs, '1.css', '--cacheStrategy', 'metadata']).cacheStrategy).toBe('metadata');
|
|
54
|
+
});
|
|
50
55
|
test('--silent', () => {
|
|
51
56
|
expect(parseArgv([...baseArgs, '1.css', '--silent']).silent).toBe(true);
|
|
52
57
|
expect(parseArgv([...baseArgs, '1.css', '--no-silent']).silent).toBe(false);
|
package/dist/cli.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../src/cli.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;AAEjC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE;QACnB,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACrE,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAEjE,kCAAkC;QAClC,0CAA0C;IAC5C,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../src/cli.test.ts"],"names":[],"mappings":"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"}
|
package/dist/emitter/dts.d.ts
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { type CodeWithSourceMap } from '../library/source-map/index.js';
|
|
2
|
-
import { type Token } from '../
|
|
3
|
-
import { type
|
|
2
|
+
import { type Token } from '../locator/index.js';
|
|
3
|
+
import { type DtsFormatOptions } from './index.js';
|
|
4
4
|
/**
|
|
5
5
|
* Get .d.ts file path.
|
|
6
6
|
* @param filePath The path to the source file (i.e. `/dir/foo.css`). It is absolute.
|
|
7
|
-
* @param distOptions The distribution option.
|
|
8
7
|
* @returns The path to the .d.ts file. It is absolute.
|
|
9
8
|
*/
|
|
10
|
-
export declare function getDtsFilePath(filePath: string
|
|
9
|
+
export declare function getDtsFilePath(filePath: string): string;
|
|
11
10
|
export declare function generateDtsContentWithSourceMap(filePath: string, dtsFilePath: string, sourceMapFilePath: string, tokens: Token[], dtsFormatOptions: DtsFormatOptions | undefined, isExternalFile: (filePath: string) => boolean): {
|
|
12
11
|
dtsContent: CodeWithSourceMap['code'];
|
|
13
12
|
sourceMap: CodeWithSourceMap['map'];
|
package/dist/emitter/dts.js
CHANGED
|
@@ -1,25 +1,15 @@
|
|
|
1
1
|
import { EOL } from 'os';
|
|
2
|
-
import {
|
|
2
|
+
import { basename } from 'path';
|
|
3
3
|
import camelcase from 'camelcase';
|
|
4
4
|
import { SourceNode } from '../library/source-map/index.js';
|
|
5
|
-
import { getRelativePath
|
|
5
|
+
import { getRelativePath } from './index.js';
|
|
6
6
|
/**
|
|
7
7
|
* Get .d.ts file path.
|
|
8
8
|
* @param filePath The path to the source file (i.e. `/dir/foo.css`). It is absolute.
|
|
9
|
-
* @param distOptions The distribution option.
|
|
10
9
|
* @returns The path to the .d.ts file. It is absolute.
|
|
11
10
|
*/
|
|
12
|
-
export function getDtsFilePath(filePath
|
|
13
|
-
|
|
14
|
-
if (!isSubDirectoryFile(distOptions.rootDir, filePath))
|
|
15
|
-
throw new Error(`The filePath(${filePath}) is not a subdirectory of rootDir(${distOptions.rootDir}).`);
|
|
16
|
-
if (!isSubDirectoryFile(distOptions.rootDir, distOptions.outDir))
|
|
17
|
-
throw new Error(`The outDir(${distOptions.outDir}) is not a subdirectory of rootDir(${distOptions.rootDir}).`);
|
|
18
|
-
return join(distOptions.outDir, relative(distOptions.rootDir, filePath) + '.d.ts');
|
|
19
|
-
}
|
|
20
|
-
else {
|
|
21
|
-
return filePath + '.d.ts';
|
|
22
|
-
}
|
|
11
|
+
export function getDtsFilePath(filePath) {
|
|
12
|
+
return filePath + '.d.ts';
|
|
23
13
|
}
|
|
24
14
|
function dashesCamelCase(str) {
|
|
25
15
|
return str.replace(/-+(\w)/g, function (match, firstLetter) {
|
package/dist/emitter/dts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dts.js","sourceRoot":"","sources":["../../src/emitter/dts.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dts.js","sourceRoot":"","sources":["../../src/emitter/dts.ts"],"names":[],"mappings":"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"}
|
package/dist/emitter/dts.test.js
CHANGED
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import dedent from 'dedent';
|
|
2
2
|
import { SourceMapConsumer } from 'source-map';
|
|
3
|
-
import {
|
|
3
|
+
import { Locator } from '../locator/index.js';
|
|
4
4
|
import { getFixturePath, createFixtures } from '../test/util.js';
|
|
5
5
|
import { generateDtsContentWithSourceMap, getDtsFilePath } from './dts.js';
|
|
6
|
-
const
|
|
6
|
+
const locator = new Locator();
|
|
7
7
|
const isExternalFile = () => false;
|
|
8
8
|
test('getDtsFilePath', () => {
|
|
9
|
-
expect(getDtsFilePath('/app/src/dir/1.css'
|
|
10
|
-
expect(getDtsFilePath('/app/src/dir/1.css', { rootDir: '/app', outDir: '/app/dist' })).toBe('/app/dist/src/dir/1.css.d.ts');
|
|
11
|
-
expect(() => getDtsFilePath('/tmp/src/dir/1.css', { rootDir: '/app', outDir: '/app/dist' })).toThrow();
|
|
12
|
-
expect(() => getDtsFilePath('/app/src/dir/1.css', { rootDir: '/app', outDir: '/tmp/dist' })).toThrow();
|
|
9
|
+
expect(getDtsFilePath('/app/src/dir/1.css')).toBe('/app/src/dir/1.css.d.ts');
|
|
13
10
|
});
|
|
14
11
|
describe('generateDtsContentWithSourceMap', () => {
|
|
15
12
|
const filePath = getFixturePath('/test/1.css');
|
|
@@ -34,7 +31,7 @@ describe('generateDtsContentWithSourceMap', () => {
|
|
|
34
31
|
.d {}
|
|
35
32
|
`,
|
|
36
33
|
});
|
|
37
|
-
const result = await
|
|
34
|
+
const result = await locator.load(filePath);
|
|
38
35
|
const { dtsContent, sourceMap } = generateDtsContentWithSourceMap(filePath, dtsFilePath, sourceMapFilePath, result.tokens, dtsFormatOptions, isExternalFile);
|
|
39
36
|
expect(dtsContent).toMatchInlineSnapshot(`
|
|
40
37
|
"declare const styles:
|
|
@@ -81,7 +78,7 @@ describe('generateDtsContentWithSourceMap', () => {
|
|
|
81
78
|
.foo_bar {}
|
|
82
79
|
`,
|
|
83
80
|
});
|
|
84
|
-
return await
|
|
81
|
+
return await locator.load(filePath);
|
|
85
82
|
}
|
|
86
83
|
test('undefined', async () => {
|
|
87
84
|
const result = await getResult(filePath);
|
|
@@ -167,7 +164,7 @@ describe('generateDtsContentWithSourceMap', () => {
|
|
|
167
164
|
createFixtures({
|
|
168
165
|
'/test/1.css': `.a {}`,
|
|
169
166
|
});
|
|
170
|
-
const result = await
|
|
167
|
+
const result = await locator.load(filePath);
|
|
171
168
|
const { dtsContent, sourceMap } = generateDtsContentWithSourceMap(getFixturePath('/test/src/1.css'), getFixturePath('/test/dist/1.css.d.ts'), getFixturePath('/test/dist/1.css.d.ts.map'), result.tokens, dtsFormatOptions, isExternalFile);
|
|
172
169
|
expect(dtsContent).toMatchInlineSnapshot(`
|
|
173
170
|
"declare const styles:
|
|
@@ -189,7 +186,7 @@ describe('generateDtsContentWithSourceMap', () => {
|
|
|
189
186
|
'/test/2.css': `.b {}`,
|
|
190
187
|
'/test/3.css': `.c {}`,
|
|
191
188
|
});
|
|
192
|
-
const result = await
|
|
189
|
+
const result = await locator.load(filePath);
|
|
193
190
|
const { dtsContent } = generateDtsContentWithSourceMap(filePath, dtsFilePath, sourceMapFilePath, result.tokens, dtsFormatOptions, (filePath) => filePath.endsWith('3.css'));
|
|
194
191
|
expect(dtsContent).toMatchInlineSnapshot(`
|
|
195
192
|
"declare const styles:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dts.test.js","sourceRoot":"","sources":["../../src/emitter/dts.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"dts.test.js","sourceRoot":"","sources":["../../src/emitter/dts.test.ts"],"names":[],"mappings":"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"}
|
package/dist/emitter/index.d.ts
CHANGED
|
@@ -1,14 +1,7 @@
|
|
|
1
|
-
import { type Token } from '../
|
|
1
|
+
import { type Token } from '../locator/index.js';
|
|
2
2
|
import { type LocalsConvention } from '../runner.js';
|
|
3
3
|
export declare function getRelativePath(fromFilePath: string, toFilePath: string): string;
|
|
4
4
|
export declare function isSubDirectoryFile(fromDirectory: string, toFilePath: string): boolean;
|
|
5
|
-
/** The distribution option. */
|
|
6
|
-
export declare type DistOptions = {
|
|
7
|
-
/** Root directory. It is absolute. */
|
|
8
|
-
rootDir: string;
|
|
9
|
-
/** The path to the output directory. It is absolute. */
|
|
10
|
-
outDir: string;
|
|
11
|
-
};
|
|
12
5
|
export declare type DtsFormatOptions = {
|
|
13
6
|
localsConvention?: LocalsConvention;
|
|
14
7
|
};
|
|
@@ -18,17 +11,15 @@ export declare type EmitterOptions = {
|
|
|
18
11
|
filePath: string;
|
|
19
12
|
/** The tokens exported by the source file. */
|
|
20
13
|
tokens: Token[];
|
|
21
|
-
/** The distribution option. */
|
|
22
|
-
distOptions: DistOptions | undefined;
|
|
23
14
|
/** Whether to output declaration map (i.e. `/dir/foo.css.d.ts.map`) or not. */
|
|
24
15
|
emitDeclarationMap: boolean | undefined;
|
|
25
16
|
/** The options for formatting the type definition. */
|
|
26
17
|
dtsFormatOptions: DtsFormatOptions | undefined;
|
|
27
|
-
/** Silent output. Do not show "files written" messages */
|
|
28
|
-
silent: boolean;
|
|
29
|
-
/** Working directory path. */
|
|
30
|
-
cwd: string;
|
|
31
18
|
/** Whether the file is from an external library or not. */
|
|
32
19
|
isExternalFile: (filePath: string) => boolean;
|
|
33
20
|
};
|
|
34
|
-
export declare function emitGeneratedFiles({ filePath, tokens,
|
|
21
|
+
export declare function emitGeneratedFiles({ filePath, tokens, emitDeclarationMap, dtsFormatOptions, isExternalFile, }: EmitterOptions): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Returns true if .d.ts (and .d.ts.map) files are generated for the given file.
|
|
24
|
+
*/
|
|
25
|
+
export declare function isGeneratedFilesExist(filePath: string, emitDeclarationMap: boolean | undefined): Promise<boolean>;
|
package/dist/emitter/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { dirname, isAbsolute, relative } from 'path';
|
|
2
|
-
import
|
|
2
|
+
import { exists } from '../util.js';
|
|
3
3
|
import { generateDtsContentWithSourceMap, getDtsFilePath } from './dts.js';
|
|
4
4
|
import { writeFileIfChanged } from './file-system.js';
|
|
5
5
|
import { generateSourceMappingURLComment, getSourceMapFilePath } from './source-map.js';
|
|
@@ -15,28 +15,33 @@ export function getRelativePath(fromFilePath, toFilePath) {
|
|
|
15
15
|
export function isSubDirectoryFile(fromDirectory, toFilePath) {
|
|
16
16
|
return isAbsolute(toFilePath) && toFilePath.startsWith(fromDirectory);
|
|
17
17
|
}
|
|
18
|
-
function
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
export async function emitGeneratedFiles({ filePath, tokens, distOptions, emitDeclarationMap, dtsFormatOptions, silent, cwd, isExternalFile, }) {
|
|
22
|
-
const dtsFilePath = getDtsFilePath(filePath, distOptions);
|
|
23
|
-
const sourceMapFilePath = getSourceMapFilePath(filePath, distOptions);
|
|
18
|
+
export async function emitGeneratedFiles({ filePath, tokens, emitDeclarationMap, dtsFormatOptions, isExternalFile, }) {
|
|
19
|
+
const dtsFilePath = getDtsFilePath(filePath);
|
|
20
|
+
const sourceMapFilePath = getSourceMapFilePath(filePath);
|
|
24
21
|
const { dtsContent, sourceMap } = generateDtsContentWithSourceMap(filePath, dtsFilePath, sourceMapFilePath, tokens, dtsFormatOptions, isExternalFile);
|
|
25
22
|
if (emitDeclarationMap) {
|
|
26
23
|
const sourceMappingURLComment = generateSourceMappingURLComment(dtsFilePath, sourceMapFilePath);
|
|
27
24
|
await writeFileIfChanged(dtsFilePath, dtsContent + sourceMappingURLComment);
|
|
28
|
-
if (!silent)
|
|
29
|
-
outputWriteLog(cwd, dtsFilePath);
|
|
30
25
|
// NOTE: tsserver does not support inline declaration maps. Therefore, sourcemap files must be output.
|
|
31
26
|
// blocked by: https://github.com/microsoft/TypeScript/issues/38966
|
|
32
27
|
await writeFileIfChanged(sourceMapFilePath, sourceMap.toString());
|
|
33
|
-
if (!silent)
|
|
34
|
-
outputWriteLog(cwd, sourceMapFilePath);
|
|
35
28
|
}
|
|
36
29
|
else {
|
|
37
30
|
await writeFileIfChanged(dtsFilePath, dtsContent);
|
|
38
|
-
if (!silent)
|
|
39
|
-
outputWriteLog(cwd, dtsFilePath);
|
|
40
31
|
}
|
|
41
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Returns true if .d.ts (and .d.ts.map) files are generated for the given file.
|
|
35
|
+
*/
|
|
36
|
+
export async function isGeneratedFilesExist(filePath, emitDeclarationMap) {
|
|
37
|
+
const dtsFilePath = getDtsFilePath(filePath);
|
|
38
|
+
const sourceMapFilePath = getSourceMapFilePath(filePath);
|
|
39
|
+
if (emitDeclarationMap && !(await exists(sourceMapFilePath))) {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
if (!(await exists(dtsFilePath))) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
42
47
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/emitter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/emitter/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAGrD,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AACpC,OAAO,EAAE,+BAA+B,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,+BAA+B,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAExF,MAAM,UAAU,eAAe,CAAC,YAAoB,EAAE,UAAkB;IACtE,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,UAAU,CAAC,CAAC;IAC7D,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;QAC7B,OAAO,QAAQ,CAAC;KACjB;SAAM;QACL,OAAO,IAAI,GAAG,QAAQ,CAAC;KACxB;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,aAAqB,EAAE,UAAkB;IAC1E,OAAO,UAAU,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC;AACxE,CAAC;AAoBD,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,EACvC,QAAQ,EACR,MAAM,EACN,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,GACC;IACf,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,+BAA+B,CAC/D,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,MAAM,EACN,gBAAgB,EAChB,cAAc,CACf,CAAC;IAEF,IAAI,kBAAkB,EAAE;QACtB,MAAM,uBAAuB,GAAG,+BAA+B,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;QAChG,MAAM,kBAAkB,CAAC,WAAW,EAAE,UAAU,GAAG,uBAAuB,CAAC,CAAC;QAC5E,sGAAsG;QACtG,mEAAmE;QACnE,MAAM,kBAAkB,CAAC,iBAAiB,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;KACnE;SAAM;QACL,MAAM,kBAAkB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;KACnD;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,QAAgB,EAChB,kBAAuC;IAEvC,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,QAAQ,CAAC,CAAC;IACzD,IAAI,kBAAkB,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC,EAAE;QAC5D,OAAO,KAAK,CAAC;KACd;IACD,IAAI,CAAC,CAAC,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,EAAE;QAChC,OAAO,KAAK,CAAC;KACd;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { readFile, stat } from 'fs/promises';
|
|
2
2
|
import { jest } from '@jest/globals';
|
|
3
|
-
import chalk from 'chalk';
|
|
4
3
|
import { createFixtures, exists, fakeToken, getFixturePath, waitForAsyncTask } from '../test/util.js';
|
|
5
4
|
import { emitGeneratedFiles, getRelativePath, isSubDirectoryFile } from './index.js';
|
|
6
5
|
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
@@ -22,10 +21,8 @@ describe('emitGeneratedFiles', () => {
|
|
|
22
21
|
const defaultArgs = {
|
|
23
22
|
filePath: getFixturePath('/test/1.css'),
|
|
24
23
|
tokens: [fakeToken({ name: 'foo', originalLocations: [{ start: { line: 1, column: 1 } }] })],
|
|
25
|
-
distOptions: undefined,
|
|
26
24
|
emitDeclarationMap: true,
|
|
27
25
|
dtsFormatOptions: undefined,
|
|
28
|
-
silent: true,
|
|
29
26
|
cwd: getFixturePath('/test'),
|
|
30
27
|
isExternalFile: () => false,
|
|
31
28
|
};
|
|
@@ -67,52 +64,5 @@ describe('emitGeneratedFiles', () => {
|
|
|
67
64
|
expect(mtimeForDts1).not.toEqual(mtimeForDts3); // not skipped
|
|
68
65
|
expect(mtimeForSourceMap1).not.toEqual(mtimeForSourceMap3); // not skipped
|
|
69
66
|
});
|
|
70
|
-
test('outputs write log', async () => {
|
|
71
|
-
await emitGeneratedFiles({
|
|
72
|
-
...defaultArgs,
|
|
73
|
-
filePath: getFixturePath('/test/1.css'),
|
|
74
|
-
emitDeclarationMap: true,
|
|
75
|
-
silent: false,
|
|
76
|
-
});
|
|
77
|
-
expect(consoleLogSpy).toHaveBeenCalledTimes(2);
|
|
78
|
-
expect(consoleLogSpy).toHaveBeenNthCalledWith(1, `Wrote ${chalk.green('1.css.d.ts')}`);
|
|
79
|
-
expect(consoleLogSpy).toHaveBeenNthCalledWith(2, `Wrote ${chalk.green('1.css.d.ts.map')}`);
|
|
80
|
-
consoleLogSpy.mockClear();
|
|
81
|
-
await emitGeneratedFiles({
|
|
82
|
-
...defaultArgs,
|
|
83
|
-
filePath: getFixturePath('/test/2.css'),
|
|
84
|
-
emitDeclarationMap: false,
|
|
85
|
-
silent: false,
|
|
86
|
-
});
|
|
87
|
-
expect(consoleLogSpy).toHaveBeenCalledTimes(1);
|
|
88
|
-
expect(consoleLogSpy).toHaveBeenNthCalledWith(1, `Wrote ${chalk.green('2.css.d.ts')}`);
|
|
89
|
-
consoleLogSpy.mockClear();
|
|
90
|
-
await emitGeneratedFiles({
|
|
91
|
-
...defaultArgs,
|
|
92
|
-
filePath: getFixturePath('/test/3.css'),
|
|
93
|
-
emitDeclarationMap: false,
|
|
94
|
-
silent: true,
|
|
95
|
-
});
|
|
96
|
-
expect(consoleLogSpy).toHaveBeenCalledTimes(0);
|
|
97
|
-
});
|
|
98
|
-
test('changes working directory by cwd', async () => {
|
|
99
|
-
await emitGeneratedFiles({
|
|
100
|
-
...defaultArgs,
|
|
101
|
-
filePath: getFixturePath('/test/1.css'),
|
|
102
|
-
emitDeclarationMap: false,
|
|
103
|
-
silent: false,
|
|
104
|
-
cwd: getFixturePath('/test'),
|
|
105
|
-
});
|
|
106
|
-
await emitGeneratedFiles({
|
|
107
|
-
...defaultArgs,
|
|
108
|
-
filePath: getFixturePath('/test/1.css'),
|
|
109
|
-
emitDeclarationMap: false,
|
|
110
|
-
silent: false,
|
|
111
|
-
cwd: getFixturePath('/'),
|
|
112
|
-
});
|
|
113
|
-
expect(consoleLogSpy).toHaveBeenCalledTimes(2);
|
|
114
|
-
expect(consoleLogSpy).toHaveBeenNthCalledWith(1, `Wrote ${chalk.green('1.css.d.ts')}`);
|
|
115
|
-
expect(consoleLogSpy).toHaveBeenNthCalledWith(2, `Wrote ${chalk.green('test/1.css.d.ts')}`);
|
|
116
|
-
});
|
|
117
67
|
});
|
|
118
68
|
//# sourceMappingURL=index.test.js.map
|