Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/codegen/bin/cmk.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ try {
process.exit(0);
}

await runCMK(args.project, args.clean, logger);
await runCMK(args, logger);
} catch (e) {
if (e instanceof SystemError) {
logger.logSystemError(e);
Expand Down
25 changes: 13 additions & 12 deletions packages/codegen/src/runner.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,11 @@ import dedent from 'dedent';
import { describe, expect, test } from 'vitest';
import { ReadCSSModuleFileError } from './error.js';
import { runCMK } from './runner.js';
import { fakeParsedArgs } from './test/faker.js';
import { createIFF } from './test/fixture.js';
import { createLoggerSpy } from './test/logger.js';
import { mockProcessExit, ProcessExitError } from './test/process.js';

const clean = false;

function formatDiagnostic(diagnostic: Diagnostic, rootDir: string) {
return {
text: diagnostic.text.replace(rootDir, '<rootDir>'),
Expand Down Expand Up @@ -40,7 +39,7 @@ describe('runCMK', () => {
'src/a.module.css': '.a1 { color: red; }',
'src/b.module.css': '.b1 { color: blue; }',
});
await runCMK(iff.rootDir, clean, createLoggerSpy());
await runCMK(fakeParsedArgs({ project: iff.rootDir }), createLoggerSpy());
expect(await iff.readFile('generated/src/a.module.css.d.ts')).toMatchInlineSnapshot(`
"// @ts-nocheck
declare const styles = {
Expand Down Expand Up @@ -68,7 +67,7 @@ describe('runCMK', () => {
'src/a.module.css': '.a1 { color: red; }',
'src/b.css': '.b1 { color: red; }',
});
await runCMK(iff.rootDir, clean, createLoggerSpy());
await runCMK(fakeParsedArgs({ project: iff.rootDir }), createLoggerSpy());
await expect(access(iff.join('generated/src/a.module.css.d.ts'))).resolves.not.toThrow();
await expect(access(iff.join('generated/src/b.css.d.ts'))).rejects.toThrow();
});
Expand All @@ -83,7 +82,7 @@ describe('runCMK', () => {
'src/b.module.css': '.b1 { color: blue; }',
'src/c.css': '.c1 { color: red; }',
});
await runCMK(iff.rootDir, clean, createLoggerSpy());
await runCMK(fakeParsedArgs({ project: iff.rootDir }), createLoggerSpy());
expect(await iff.readFile('generated/src/a.module.css.d.ts')).toMatchInlineSnapshot(`
"// @ts-nocheck
declare const styles = {
Expand All @@ -102,7 +101,7 @@ describe('runCMK', () => {
`,
});
const loggerSpy = createLoggerSpy();
await runCMK(iff.rootDir, clean, loggerSpy);
await runCMK(fakeParsedArgs({ project: iff.rootDir }), loggerSpy);
expect(loggerSpy.logDiagnostics).toHaveBeenCalledTimes(1);
expect(formatDiagnostics(loggerSpy.logDiagnostics.mock.calls[0]![0], iff.rootDir)).toMatchInlineSnapshot(`
[
Expand All @@ -123,7 +122,9 @@ describe('runCMK', () => {
'src/a.module.css': '.a1 { color: red; }',
});
await chmod(iff.paths['src/a.module.css'], 0o200); // Remove read permission
await expect(runCMK(iff.rootDir, clean, createLoggerSpy())).rejects.toThrow(ReadCSSModuleFileError);
await expect(runCMK(fakeParsedArgs({ project: iff.rootDir }), createLoggerSpy())).rejects.toThrow(
ReadCSSModuleFileError,
);
});
test('support ./ in `pattern`', async () => {
const iff = await createIFF({
Expand All @@ -135,7 +136,7 @@ describe('runCMK', () => {
'src/a.module.css': `@import './b.css'; .a1 { color: red; }`,
'src/b.css': '.b1 { color: red; }',
});
await runCMK(iff.rootDir, clean, createLoggerSpy());
await runCMK(fakeParsedArgs({ project: iff.rootDir }), createLoggerSpy());
expect(await iff.readFile('generated/src/a.module.css.d.ts')).toMatchInlineSnapshot(`
"// @ts-nocheck
declare const styles = {
Expand All @@ -155,7 +156,7 @@ describe('runCMK', () => {
`,
});
const loggerSpy = createLoggerSpy();
await expect(runCMK(iff.rootDir, clean, loggerSpy)).rejects.toThrow(ProcessExitError);
await expect(runCMK(fakeParsedArgs({ project: iff.rootDir }), loggerSpy)).rejects.toThrow(ProcessExitError);
expect(loggerSpy.logDiagnostics).toHaveBeenCalledTimes(1);
expect(formatDiagnostics(loggerSpy.logDiagnostics.mock.calls[0]![0], iff.rootDir)).toMatchInlineSnapshot(`
[
Expand All @@ -177,7 +178,7 @@ describe('runCMK', () => {
'src/b.module.css': '@value;',
});
const loggerSpy = createLoggerSpy();
await expect(runCMK(iff.rootDir, clean, loggerSpy)).rejects.toThrow(ProcessExitError);
await expect(runCMK(fakeParsedArgs({ project: iff.rootDir }), loggerSpy)).rejects.toThrow(ProcessExitError);
expect(loggerSpy.logDiagnostics).toHaveBeenCalledTimes(1);
expect(formatDiagnostics(loggerSpy.logDiagnostics.mock.calls[0]![0], iff.rootDir)).toMatchInlineSnapshot(`
[
Expand Down Expand Up @@ -220,7 +221,7 @@ describe('runCMK', () => {
`,
});
const loggerSpy = createLoggerSpy();
await expect(runCMK(iff.rootDir, clean, loggerSpy)).rejects.toThrow(ProcessExitError);
await expect(runCMK(fakeParsedArgs({ project: iff.rootDir }), loggerSpy)).rejects.toThrow(ProcessExitError);
expect(loggerSpy.logDiagnostics).toHaveBeenCalledTimes(1);
expect(formatDiagnostics(loggerSpy.logDiagnostics.mock.calls[0]![0], iff.rootDir)).toMatchInlineSnapshot(`
[
Expand Down Expand Up @@ -259,7 +260,7 @@ test('removes output directory before generating files when `clean` is true', as
'src/a.module.css': '.a1 { color: red; }',
'generated/src/old.module.css.d.ts': '',
});
await runCMK(iff.rootDir, true, createLoggerSpy());
await runCMK(fakeParsedArgs({ project: iff.rootDir, clean: true }), createLoggerSpy());
await expect(access(iff.join('generated/src/a.module.css.d.ts'))).resolves.not.toThrow();
await expect(access(iff.join('generated/src/old.module.css.d.ts'))).rejects.toThrow();
});
7 changes: 4 additions & 3 deletions packages/codegen/src/runner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import {
readConfigFile,
} from '@css-modules-kit/core';
import ts from 'typescript';
import type { ParsedArgs } from './cli.js';
import { writeDtsFile } from './dts-writer.js';
import { ReadCSSModuleFileError } from './error.js';
import type { Logger } from './logger/logger.js';
Expand Down Expand Up @@ -63,8 +64,8 @@ async function writeDtsByCSSModule(
* @throws {ReadCSSModuleFileError} When failed to read CSS Module file.
* @throws {WriteDtsFileError}
*/
export async function runCMK(project: string, clean: boolean, logger: Logger): Promise<void> {
const config = readConfigFile(project);
export async function runCMK(args: ParsedArgs, logger: Logger): Promise<void> {
const config = readConfigFile(args.project);
if (config.diagnostics.length > 0) {
logger.logDiagnostics(config.diagnostics);
// eslint-disable-next-line n/no-process-exit
Expand Down Expand Up @@ -120,7 +121,7 @@ export async function runCMK(project: string, clean: boolean, logger: Logger): P
process.exit(1);
}

if (clean) {
if (args.clean) {
await rm(config.dtsOutDir, { recursive: true, force: true });
}
await Promise.all(
Expand Down
12 changes: 12 additions & 0 deletions packages/codegen/src/test/faker.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import type { ParsedArgs } from '../cli.js';

export function fakeParsedArgs(args?: Partial<ParsedArgs>): ParsedArgs {
return {
help: false,
version: false,
project: '.',
pretty: undefined,
clean: false,
...args,
};
}