happy-css-modules 0.4.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +172 -53
- package/dist/cli.js +45 -11
- package/dist/cli.js.map +1 -1
- package/dist/cli.test.js +20 -4
- package/dist/cli.test.js.map +1 -1
- package/dist/emitter/dts.d.ts +3 -4
- package/dist/emitter/dts.js +13 -15
- package/dist/emitter/dts.js.map +1 -1
- package/dist/emitter/dts.test.js +7 -10
- package/dist/emitter/dts.test.js.map +1 -1
- package/dist/emitter/index.d.ts +6 -15
- package/dist/emitter/index.js +18 -13
- package/dist/emitter/index.js.map +1 -1
- package/dist/emitter/index.test.js +0 -50
- package/dist/emitter/index.test.js.map +1 -1
- package/dist/emitter/source-map.d.ts +1 -3
- package/dist/emitter/source-map.js +2 -3
- package/dist/emitter/source-map.js.map +1 -1
- package/dist/emitter/source-map.test.js +1 -4
- package/dist/emitter/source-map.test.js.map +1 -1
- package/dist/index.d.ts +4 -2
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/integration-test/go-to-definition.test.js +1 -0
- package/dist/integration-test/go-to-definition.test.js.map +1 -1
- package/dist/{loader → locator}/index.d.ts +6 -4
- package/dist/{loader → locator}/index.js +13 -5
- package/dist/locator/index.js.map +1 -0
- package/dist/{loader → locator}/index.test.d.ts +0 -0
- package/dist/{loader → locator}/index.test.js +100 -14
- package/dist/locator/index.test.js.map +1 -0
- package/dist/{loader → locator}/postcss.d.ts +5 -1
- package/dist/{loader → locator}/postcss.js +26 -30
- package/dist/{loader → locator}/postcss.js.map +1 -1
- package/dist/{loader → locator}/postcss.test.d.ts +0 -0
- package/dist/{loader → locator}/postcss.test.js +0 -0
- package/dist/locator/postcss.test.js.map +1 -0
- package/dist/resolver/webpack-resolver.d.ts +12 -2
- package/dist/resolver/webpack-resolver.js +12 -3
- package/dist/resolver/webpack-resolver.js.map +1 -1
- package/dist/resolver/webpack-resolver.test.js +43 -7
- package/dist/resolver/webpack-resolver.test.js.map +1 -1
- package/dist/runner.d.ts +23 -1
- package/dist/runner.js +62 -23
- package/dist/runner.js.map +1 -1
- package/dist/runner.test.js +90 -11
- package/dist/runner.test.js.map +1 -1
- package/dist/test/util.d.ts +2 -2
- package/dist/test/util.js +16 -9
- package/dist/test/util.js.map +1 -1
- package/dist/transformer/index.d.ts +4 -2
- package/dist/transformer/index.js +7 -3
- package/dist/transformer/index.js.map +1 -1
- package/dist/transformer/index.test.d.ts +1 -0
- package/dist/transformer/index.test.js +66 -0
- package/dist/transformer/index.test.js.map +1 -0
- package/dist/transformer/less-transformer.test.js +14 -14
- package/dist/transformer/less-transformer.test.js.map +1 -1
- package/dist/transformer/postcss-transformer.d.ts +12 -0
- package/dist/transformer/postcss-transformer.js +32 -0
- package/dist/transformer/postcss-transformer.js.map +1 -0
- package/dist/transformer/postcss-transformer.test.d.ts +1 -0
- package/dist/transformer/postcss-transformer.test.js +176 -0
- package/dist/transformer/postcss-transformer.test.js.map +1 -0
- package/dist/transformer/scss-transformer.js +19 -17
- package/dist/transformer/scss-transformer.js.map +1 -1
- package/dist/transformer/scss-transformer.test.js +16 -16
- package/dist/transformer/scss-transformer.test.js.map +1 -1
- package/dist/util.d.ts +2 -0
- package/dist/util.js +19 -2
- package/dist/util.js.map +1 -1
- package/package.json +10 -9
- package/src/cli.test.ts +24 -4
- package/src/cli.ts +44 -12
- package/src/emitter/dts.test.ts +7 -12
- package/src/emitter/dts.ts +15 -15
- package/src/emitter/index.test.ts +0 -52
- package/src/emitter/index.ts +22 -29
- package/src/emitter/source-map.test.ts +1 -6
- package/src/emitter/source-map.ts +3 -4
- package/src/index.ts +9 -2
- package/src/integration-test/go-to-definition.test.ts +1 -0
- package/src/{loader → locator}/index.test.ts +101 -14
- package/src/{loader → locator}/index.ts +16 -8
- package/src/{loader → locator}/postcss.test.ts +0 -0
- package/src/{loader → locator}/postcss.ts +42 -40
- package/src/resolver/webpack-resolver.test.ts +63 -7
- package/src/resolver/webpack-resolver.ts +26 -5
- package/src/runner.test.ts +103 -11
- package/src/runner.ts +83 -25
- package/src/test/util.ts +16 -10
- package/src/transformer/index.test.ts +71 -0
- package/src/transformer/index.ts +12 -4
- package/src/transformer/less-transformer.test.ts +14 -14
- package/src/transformer/postcss-transformer.test.ts +188 -0
- package/src/transformer/postcss-transformer.ts +57 -0
- package/src/transformer/scss-transformer.test.ts +16 -16
- package/src/transformer/scss-transformer.ts +25 -27
- package/src/util.ts +21 -2
- package/dist/loader/index.js.map +0 -1
- package/dist/loader/index.test.js.map +0 -1
- package/dist/loader/postcss.test.js.map +0 -1
package/README.md
CHANGED
|
@@ -5,12 +5,26 @@
|
|
|
5
5
|
<h2 align="center">The Collection of tools to 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,30 +34,43 @@ $ 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
|
-
|
|
31
|
-
|
|
32
|
-
--
|
|
33
|
-
--
|
|
34
|
-
--
|
|
35
|
-
--
|
|
36
|
-
--
|
|
37
|
-
|
|
38
|
-
|
|
52
|
+
-w, --watch Watch input directory's css files or pattern [boolean] [default: false]
|
|
53
|
+
--localsConvention Style of exported class names. [choices: "camelCase", "camelCaseOnly", "dashes", "dashesOnly"]
|
|
54
|
+
--declarationMap Create sourcemaps for d.ts files [boolean] [default: true]
|
|
55
|
+
--sassLoadPaths The option compatible with sass's `--load-path`. [array]
|
|
56
|
+
--lessIncludePaths The option compatible with less's `--include-path`. [array]
|
|
57
|
+
--webpackResolveAlias The option compatible with webpack's `resolve.alias`. [string]
|
|
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"]
|
|
61
|
+
--silent Silent output. Do not show "files written" messages [boolean] [default: false]
|
|
62
|
+
-h, --help Show help [boolean]
|
|
63
|
+
-v, --version Show version number [boolean]
|
|
39
64
|
|
|
40
65
|
Examples:
|
|
41
|
-
hcm 'src/**/*.module.css'
|
|
42
|
-
hcm 'src/**/*.module.{css,scss,less}'
|
|
43
|
-
hcm 'src/**/*.module.css' --watch
|
|
44
|
-
hcm 'src/**/*.module.css' --declarationMap=false
|
|
45
|
-
hcm 'src/**/*.module.css' --sassLoadPaths=src/style
|
|
46
|
-
hcm 'src/**/*.module.css' --lessIncludePaths=src/style
|
|
66
|
+
hcm 'src/**/*.module.css' Generate .d.ts and .d.ts.map.
|
|
67
|
+
hcm 'src/**/*.module.{css,scss,less}' Also generate files for sass and less.
|
|
68
|
+
hcm 'src/**/*.module.css' --watch Watch for changes and generate .d.ts and .d.ts.map.
|
|
69
|
+
hcm 'src/**/*.module.css' --declarationMap=false Generate .d.ts only.
|
|
70
|
+
hcm 'src/**/*.module.css' --sassLoadPaths=src/style Run with sass's `--load-path`.
|
|
71
|
+
hcm 'src/**/*.module.css' --lessIncludePaths=src/style Run with less's `--include-path`.
|
|
72
|
+
hcm 'src/**/*.module.css' --webpackResolveAlias='{"@": "src"}' Run with webpack's `resolve.alias`.
|
|
73
|
+
hcm 'src/**/*.module.css' --cache=false Disable cache.
|
|
47
74
|
```
|
|
48
75
|
|
|
49
76
|
## Node.js API (Experimental)
|
|
@@ -55,67 +82,159 @@ Examples:
|
|
|
55
82
|
|
|
56
83
|
See [src/index.ts](https://github.com/mizdra/happy-css-modules/blob/main/src/index.ts) for available API.
|
|
57
84
|
|
|
58
|
-
### Example
|
|
85
|
+
### Example: Custom `hcm` commands
|
|
59
86
|
|
|
60
|
-
|
|
87
|
+
You can create your own customized `hcm` commands. We also provide a `parseArgv` utility that parses `process.argv` and extracts options.
|
|
61
88
|
|
|
62
89
|
```javascript
|
|
63
|
-
|
|
90
|
+
#!/usr/bin/env ts-node
|
|
91
|
+
// scripts/hcm.ts
|
|
64
92
|
|
|
65
|
-
import { run } from 'happy-css-modules';
|
|
66
|
-
|
|
67
|
-
|
|
93
|
+
import { run, parseArgv } from 'happy-css-modules';
|
|
94
|
+
|
|
95
|
+
// Write your code here...
|
|
96
|
+
|
|
97
|
+
run({
|
|
98
|
+
// Inherit default CLI options (e.g. --watch).
|
|
99
|
+
...parseArgv(process.argv),
|
|
100
|
+
// Add custom CLI options.
|
|
101
|
+
cwd: __dirname,
|
|
102
|
+
}).catch((e) => {
|
|
103
|
+
console.error(e);
|
|
104
|
+
process.exit(1);
|
|
105
|
+
});
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Example: Custom transformer
|
|
109
|
+
|
|
110
|
+
With the `transformer` option, you can use AltCSS, which is not supported by `happy-css-modules`.
|
|
111
|
+
|
|
112
|
+
```typescript
|
|
113
|
+
#!/usr/bin/env ts-node
|
|
114
|
+
|
|
115
|
+
import { run, parseArgv, createDefaultTransformer, type Transformer } from 'happy-css-modules';
|
|
68
116
|
import sass from 'sass';
|
|
117
|
+
import { promisify } from 'util';
|
|
118
|
+
|
|
119
|
+
const defaultTransformer = createDefaultTransformer();
|
|
120
|
+
const render = promisify(sass.render);
|
|
69
121
|
|
|
70
|
-
// The custom
|
|
71
|
-
|
|
72
|
-
const transformer = async (source, from) => {
|
|
122
|
+
// The custom transformer supporting sass indented syntax
|
|
123
|
+
const transformer: Transformer = async (source, options) => {
|
|
73
124
|
if (from.endsWith('.sass')) {
|
|
74
|
-
const result = await
|
|
75
|
-
// Use indented syntax
|
|
125
|
+
const result = await render({
|
|
126
|
+
// Use indented syntax.
|
|
76
127
|
// ref: https://sass-lang.com/documentation/syntax#the-indented-syntax
|
|
77
|
-
|
|
78
|
-
|
|
128
|
+
indentedSyntax: true,
|
|
129
|
+
data: source,
|
|
130
|
+
file: options.from,
|
|
131
|
+
outFile: 'DUMMY',
|
|
132
|
+
// Output sourceMap.
|
|
79
133
|
sourceMap: true,
|
|
134
|
+
// Resolve import specifier using resolver.
|
|
135
|
+
importer: (url, prev, done) => {
|
|
136
|
+
options
|
|
137
|
+
.resolver(url, { request: prev })
|
|
138
|
+
.then((resolved) => done({ file: resolved }))
|
|
139
|
+
.catch((e) => done(e));
|
|
140
|
+
},
|
|
80
141
|
});
|
|
81
142
|
return { css: result.css, map: result.sourceMap!, dependencies: result.loadedUrls };
|
|
82
143
|
}
|
|
83
|
-
|
|
144
|
+
// Fallback to default transformer.
|
|
145
|
+
return await defaultTransformer(source, from);
|
|
84
146
|
};
|
|
85
147
|
|
|
86
|
-
run({
|
|
87
|
-
pattern: 'src/**/*.css';
|
|
88
|
-
watch: false;
|
|
89
|
-
transformer,
|
|
90
|
-
}).catch((e) => {
|
|
148
|
+
run({ ...parseArgv(process.argv), transformer }).catch((e) => {
|
|
91
149
|
console.error(e);
|
|
92
150
|
process.exit(1);
|
|
93
151
|
});
|
|
94
152
|
```
|
|
95
153
|
|
|
96
|
-
|
|
154
|
+
### Example: Custom resolver
|
|
97
155
|
|
|
98
|
-
|
|
99
|
-
#!/usr/bin/env node
|
|
100
|
-
// scripts/hcm.js
|
|
101
|
-
// @ts-check
|
|
156
|
+
With the `resolver` option, you can customize the resolution algorithm for import specifier (such as `@import "specifier"`).
|
|
102
157
|
|
|
103
|
-
|
|
158
|
+
```typescript
|
|
159
|
+
#!/usr/bin/env ts-node
|
|
104
160
|
|
|
105
|
-
|
|
161
|
+
import { run, parseArgv, createDefaultResolver, type Resolver } from 'happy-css-modules';
|
|
162
|
+
import { exists } from 'fs/promises';
|
|
163
|
+
import { resolve, join } from 'path';
|
|
106
164
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
165
|
+
const cwd = process.cwd();
|
|
166
|
+
const runnerOptions = parseArgv(process.argv);
|
|
167
|
+
const { sassLoadPaths, lessIncludePaths, webpackResolveAlias } = runnerOptions;
|
|
168
|
+
// Some runner options must be passed to the default resolver.
|
|
169
|
+
const defaultResolver = createDefaultResolver({ cwd, sassLoadPaths, lessIncludePaths, webpackResolveAlias });
|
|
170
|
+
const stylesDir = resolve(__dirname, 'src/styles');
|
|
171
|
+
|
|
172
|
+
const resolver: Resolver = async (specifier, options) => {
|
|
173
|
+
// If the default resolver cannot resolve, fallback to a customized resolve algorithm.
|
|
174
|
+
const resolvedByDefaultResolver = await defaultResolver(specifier, options);
|
|
175
|
+
if (resolvedByDefaultResolver === false) {
|
|
176
|
+
// Search for files in `src/styles` directory.
|
|
177
|
+
const path = join(stylesDir, specifier);
|
|
178
|
+
if (await exists(path)) return path;
|
|
179
|
+
}
|
|
180
|
+
// Returns `false` if specifier cannot be resolved.
|
|
181
|
+
return false;
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
run({ ...runnerOptions, resolver, cwd }).catch((e) => {
|
|
111
185
|
console.error(e);
|
|
112
186
|
process.exit(1);
|
|
113
187
|
});
|
|
114
188
|
```
|
|
115
189
|
|
|
116
|
-
|
|
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.
|
|
117
239
|
|
|
118
|
-
|
|
119
|
-
- [x] Support non-inline source maps
|
|
120
|
-
- [x] Implement an interface for easy use by scss/less users
|
|
121
|
-
- [ ] Implement stylelint rule to detect unused CSS ruleset from JavaScript
|
|
240
|
+
Thank you [@Quramy](https://github.com/Quramy)!
|
package/dist/cli.js
CHANGED
|
@@ -1,29 +1,25 @@
|
|
|
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
|
-
.wrap(Math.min(
|
|
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.')
|
|
19
17
|
.example("$0 'src/**/*.module.css' --declarationMap=false", 'Generate .d.ts only.')
|
|
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`.")
|
|
20
|
+
.example('$0 \'src/**/*.module.css\' --webpackResolveAlias=\'{"@": "src"}\'', "Run with webpack's `resolve.alias`.")
|
|
21
|
+
.example("$0 'src/**/*.module.css' --cache=false", 'Disable cache.')
|
|
22
22
|
.detectLocale(false)
|
|
23
|
-
.option('outDir', {
|
|
24
|
-
type: 'string',
|
|
25
|
-
describe: 'Output directory',
|
|
26
|
-
})
|
|
27
23
|
.option('watch', {
|
|
28
24
|
type: 'boolean',
|
|
29
25
|
alias: 'w',
|
|
@@ -48,6 +44,26 @@ export function parseArgv(argv) {
|
|
|
48
44
|
array: true,
|
|
49
45
|
nargs: 1,
|
|
50
46
|
describe: "The option compatible with less's `--include-path`.",
|
|
47
|
+
})
|
|
48
|
+
.option('webpackResolveAlias', {
|
|
49
|
+
string: true,
|
|
50
|
+
describe: "The option compatible with webpack's `resolve.alias`.",
|
|
51
|
+
})
|
|
52
|
+
// TODO: Support --noPostcssConfig option.
|
|
53
|
+
.option('postcssConfig', {
|
|
54
|
+
string: true,
|
|
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.',
|
|
51
67
|
})
|
|
52
68
|
.option('silent', {
|
|
53
69
|
type: 'boolean',
|
|
@@ -62,18 +78,36 @@ export function parseArgv(argv) {
|
|
|
62
78
|
// TODO: support multiple patterns
|
|
63
79
|
if (patterns.length !== 1)
|
|
64
80
|
throw new Error('Only one pattern is allowed.');
|
|
81
|
+
if (argv.webpackResolveAlias) {
|
|
82
|
+
let parsedWebpackResolveAlias;
|
|
83
|
+
try {
|
|
84
|
+
parsedWebpackResolveAlias = JSON.parse(argv.webpackResolveAlias);
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
throw new Error('--webpackResolveAlias must be a valid JSON string.');
|
|
88
|
+
}
|
|
89
|
+
if (typeof parsedWebpackResolveAlias !== 'object' || parsedWebpackResolveAlias === null)
|
|
90
|
+
throw new Error('--webpackResolveAlias must be an object');
|
|
91
|
+
if (!Object.keys(parsedWebpackResolveAlias).every((key) => typeof key === 'string'))
|
|
92
|
+
throw new Error('--webpackResolveAlias must be an object of string keys');
|
|
93
|
+
if (!Object.values(parsedWebpackResolveAlias).every((value) => typeof value === 'string'))
|
|
94
|
+
throw new Error('--webpackResolveAlias must be an object of string values');
|
|
95
|
+
}
|
|
65
96
|
return true;
|
|
66
97
|
})
|
|
67
98
|
.parseSync();
|
|
68
99
|
const patterns = parsedArgv._.map((pattern) => pattern.toString());
|
|
69
100
|
return {
|
|
70
101
|
pattern: patterns[0],
|
|
71
|
-
outDir: parsedArgv.outDir,
|
|
72
102
|
watch: parsedArgv.watch,
|
|
73
103
|
localsConvention: parsedArgv.localsConvention,
|
|
74
104
|
declarationMap: parsedArgv.declarationMap,
|
|
75
105
|
sassLoadPaths: parsedArgv.sassLoadPaths?.map((item) => item.toString()),
|
|
76
106
|
lessIncludePaths: parsedArgv.lessIncludePaths?.map((item) => item.toString()),
|
|
107
|
+
webpackResolveAlias: parsedArgv.webpackResolveAlias ? JSON.parse(parsedArgv.webpackResolveAlias) : undefined,
|
|
108
|
+
postcssConfig: parsedArgv.postcssConfig,
|
|
109
|
+
cache: parsedArgv.cache,
|
|
110
|
+
cacheStrategy: parsedArgv.cacheStrategy,
|
|
77
111
|
silent: parsedArgv.silent,
|
|
78
112
|
};
|
|
79
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);
|
|
@@ -36,6 +32,26 @@ describe('parseArgv', () => {
|
|
|
36
32
|
// Passing a number is treated as a string
|
|
37
33
|
expect(parseArgv([...baseArgs, '1.css', '--lessIncludePaths', '1']).lessIncludePaths).toStrictEqual(['1']);
|
|
38
34
|
});
|
|
35
|
+
test('--webpackResolveAlias', () => {
|
|
36
|
+
expect(parseArgv([...baseArgs, '1.css', '--webpackResolveAlias', '{ "key1": "value1", "key2": "value2" }'])
|
|
37
|
+
.webpackResolveAlias).toStrictEqual({
|
|
38
|
+
key1: 'value1',
|
|
39
|
+
key2: 'value2',
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
test('--postcssConfig', () => {
|
|
43
|
+
expect(parseArgv([...baseArgs, '1.css', '--postcssConfig', '.']).postcssConfig).toBe('.');
|
|
44
|
+
expect(parseArgv([...baseArgs, '1.css', '--postcssConfig', 'postcss.config.js']).postcssConfig).toBe('postcss.config.js');
|
|
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
|
+
});
|
|
39
55
|
test('--silent', () => {
|
|
40
56
|
expect(parseArgv([...baseArgs, '1.css', '--silent']).silent).toBe(true);
|
|
41
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) {
|
|
@@ -56,7 +46,15 @@ function generateTokenDeclarations(filePath, sourceMapFilePath, tokens, dtsForma
|
|
|
56
46
|
// Only one original position can be associated with one generated position.
|
|
57
47
|
// This is due to the sourcemap specification. Therefore, we output multiple type definitions
|
|
58
48
|
// with the same name and assign a separate original position to each.
|
|
59
|
-
for (
|
|
49
|
+
for (let originalLocation of token.originalLocations) {
|
|
50
|
+
if (originalLocation.filePath === undefined) {
|
|
51
|
+
// If the original location is not specified, fallback to the source file.
|
|
52
|
+
originalLocation = {
|
|
53
|
+
filePath: filePath,
|
|
54
|
+
start: { line: 1, column: 1 },
|
|
55
|
+
end: { line: 1, column: 1 },
|
|
56
|
+
};
|
|
57
|
+
}
|
|
60
58
|
result.push(originalLocation.filePath === filePath || isExternalFile(originalLocation.filePath)
|
|
61
59
|
? new SourceNode(null, null, null, [
|
|
62
60
|
'& Readonly<{ ',
|
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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"}
|