Skip to content

Commit 4d661a1

Browse files
authored
Add wildcardDirectories in CMKConfig (#262)
* feat(core): add `wildcardDirectories` in `CMKConfig` * add changelog
1 parent 9f8b3d4 commit 4d661a1

File tree

4 files changed

+41
-2
lines changed

4 files changed

+41
-2
lines changed

.changeset/crazy-baboons-share.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@css-modules-kit/core': minor
3+
---
4+
5+
feat: add `wildcardDirectories` in `CMKConfig`

packages/core/src/config.test.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ describe('readTsConfigFile', () => {
5050
compilerOptions: expect.objectContaining({
5151
module: ts.ModuleKind.ESNext,
5252
}),
53+
wildcardDirectories: [{ fileName: iff.join('src'), recursive: true }],
5354
diagnostics: [],
5455
});
5556
});
@@ -75,6 +76,7 @@ describe('readTsConfigFile', () => {
7576
arbitraryExtensions: true,
7677
},
7778
compilerOptions: expect.any(Object),
79+
wildcardDirectories: [{ fileName: iff.join('src'), recursive: true }],
7880
diagnostics: [],
7981
});
8082
});
@@ -105,6 +107,7 @@ describe('readTsConfigFile', () => {
105107
compilerOptions: expect.objectContaining({
106108
module: undefined,
107109
}),
110+
wildcardDirectories: [{ fileName: iff.join('src'), recursive: true }],
108111
diagnostics: [
109112
{
110113
category: 'error',
@@ -260,4 +263,26 @@ describe('readTsConfigFile', () => {
260263
});
261264
});
262265
});
266+
describe('wildcardDirectories', () => {
267+
test('set root directory if "include" is missing', async () => {
268+
const iff = await createIFF({
269+
'tsconfig.json': '{}',
270+
});
271+
expect(readTsConfigFile(iff.rootDir).wildcardDirectories).toEqual([{ fileName: iff.rootDir, recursive: true }]);
272+
});
273+
test('non-recursive "include" pattern has `recursive === false`', async () => {
274+
const iff = await createIFF({
275+
'tsconfig.json': dedent`
276+
{
277+
"include": ["src1", "src2/**/*", "src3/*"]
278+
}
279+
`,
280+
});
281+
expect(readTsConfigFile(iff.rootDir).wildcardDirectories).toEqual([
282+
{ fileName: iff.join('src1'), recursive: true },
283+
{ fileName: iff.join('src2'), recursive: true },
284+
{ fileName: iff.join('src3'), recursive: false },
285+
]);
286+
});
287+
});
263288
});

packages/core/src/config.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@ export interface CMKConfig {
5858
basePath: string;
5959
configFileName: string;
6060
compilerOptions: ts.CompilerOptions;
61+
/** The directories to watch when watch mode is enabled. */
62+
wildcardDirectories: { fileName: string; recursive: boolean }[];
6163
/** The diagnostics that occurred while reading the config file. */
6264
diagnostics: Diagnostic[];
6365
}
@@ -184,6 +186,7 @@ export function readTsConfigFile(project: string): {
184186
configFileName: string;
185187
config: UnnormalizedRawConfig;
186188
compilerOptions: ts.CompilerOptions;
189+
wildcardDirectories: { fileName: string; recursive: boolean }[];
187190
diagnostics: Diagnostic[];
188191
} {
189192
const configFileName = findTsConfigFile(project);
@@ -234,6 +237,10 @@ export function readTsConfigFile(project: string): {
234237
return {
235238
configFileName,
236239
compilerOptions: parsedCommandLine.options,
240+
wildcardDirectories: Object.entries(parsedCommandLine.wildcardDirectories ?? {}).map(([fileName, flags]) => ({
241+
fileName,
242+
recursive: (flags & ts.WatchDirectoryFlags.Recursive) !== 0,
243+
})),
237244
...parsedRawData,
238245
};
239246
}
@@ -247,7 +254,7 @@ export function readTsConfigFile(project: string): {
247254
* @throws {TsConfigFileNotFoundError}
248255
*/
249256
export function readConfigFile(project: string): CMKConfig {
250-
const { configFileName, config, compilerOptions, diagnostics } = readTsConfigFile(project);
257+
const { configFileName, config, compilerOptions, wildcardDirectories, diagnostics } = readTsConfigFile(project);
251258
const basePath = dirname(configFileName);
252259
return {
253260
// If `include` is not specified, fallback to the default include spec。
@@ -262,6 +269,7 @@ export function readConfigFile(project: string): CMKConfig {
262269
basePath,
263270
configFileName,
264271
compilerOptions,
272+
wildcardDirectories,
265273
diagnostics,
266274
};
267275
}

packages/core/src/test/faker.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import type { MatchesPattern, Resolver } from '../type.js';
44

55
export function fakeConfig(args?: Partial<CMKConfig>): CMKConfig {
66
return {
7-
includes: [],
7+
includes: ['/app/**/*'],
88
excludes: [],
99
dtsOutDir: 'generated',
1010
arbitraryExtensions: false,
@@ -14,6 +14,7 @@ export function fakeConfig(args?: Partial<CMKConfig>): CMKConfig {
1414
basePath: '/app',
1515
configFileName: '/app/tsconfig.json',
1616
compilerOptions: {},
17+
wildcardDirectories: [{ fileName: '/app', recursive: true }],
1718
diagnostics: [],
1819
...args,
1920
};

0 commit comments

Comments
 (0)