Skip to content

Commit 92fc6be

Browse files
committed
wip: add time option for Logger#logMessage
1 parent 79b88f3 commit 92fc6be

File tree

4 files changed

+34
-5
lines changed

4 files changed

+34
-5
lines changed

packages/codegen/src/logger/formatter.test.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import dedent from 'dedent';
22
import ts from 'typescript';
33
import { describe, expect, test } from 'vitest';
4-
import { formatDiagnostics } from './formatter';
4+
import { formatDiagnostics, formatTime } from './formatter';
55

66
describe('formatDiagnostics', () => {
77
const file = ts.createSourceFile(
@@ -66,3 +66,13 @@ describe('formatDiagnostics', () => {
6666
`);
6767
});
6868
});
69+
70+
test('formatTime', () => {
71+
const date = new Date('2023-01-01T00:00:00Z');
72+
expect(formatTime(date, true)).toMatchInlineSnapshot(`
73+
"[12:00:00 AM]"
74+
`);
75+
expect(formatTime(date, false)).toMatchInlineSnapshot(`
76+
"[12:00:00 AM]"
77+
`);
78+
});

packages/codegen/src/logger/formatter.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
import ts from 'typescript';
22

3+
const GRAY = '\u001b[90m';
4+
const RESET = '\u001b[0m';
5+
36
export function formatDiagnostics(
47
diagnostics: ts.Diagnostic[],
58
host: ts.FormatDiagnosticsHost,
@@ -12,3 +15,12 @@ export function formatDiagnostics(
1215
}
1316
return result;
1417
}
18+
19+
export function formatTime(date: Date, pretty: boolean): string {
20+
const text = date.toLocaleTimeString('en-US', { timeZone: 'UTC' });
21+
if (pretty) {
22+
return `[${GRAY}${text}${RESET}]`;
23+
} else {
24+
return `[${text}]`;
25+
}
26+
}

packages/codegen/src/logger/logger.test.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ import { createLogger } from './logger.js';
77
const stdoutWriteSpy = vi.spyOn(process.stdout, 'write').mockImplementation(() => true);
88
const stderrWriteSpy = vi.spyOn(process.stderr, 'write').mockImplementation(() => true);
99

10+
const date = new Date('2023-01-01T00:00:00Z');
11+
vi.useRealTimers();
12+
vi.setSystemTime(date);
13+
1014
const cwd = '/app';
1115

1216
describe('createLogger', () => {
@@ -58,5 +62,7 @@ describe('createLogger', () => {
5862
const logger = createLogger(cwd, false);
5963
logger.logMessage('message');
6064
expect(stdoutWriteSpy).toHaveBeenCalledWith('message\n');
65+
logger.logMessage('message with time', { time: true });
66+
expect(stdoutWriteSpy).toHaveBeenCalledWith('[12:00:00 AM] message with time\n');
6167
});
6268
});

packages/codegen/src/logger/logger.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ import { inspect } from 'node:util';
22
import type { DiagnosticSourceFile } from '@css-modules-kit/core';
33
import { convertDiagnostic, convertSystemError, type Diagnostic, SystemError } from '@css-modules-kit/core';
44
import ts from 'typescript';
5-
import { formatDiagnostics } from './formatter.js';
5+
import { formatDiagnostics, formatTime } from './formatter.js';
66

77
export interface Logger {
88
logDiagnostics(diagnostics: Diagnostic[]): void;
99
logError(error: unknown): void;
10-
logMessage(message: string): void;
10+
logMessage(message: string, options?: { time?: boolean }): void;
1111
clearScreen(): void;
1212
}
1313

@@ -43,8 +43,9 @@ export function createLogger(cwd: string, pretty: boolean): Logger {
4343
process.stderr.write(`${inspect(error, { colors: pretty })}\n`);
4444
}
4545
},
46-
logMessage(message: string): void {
47-
process.stdout.write(`${message}\n`);
46+
logMessage(message: string, options?: { time?: boolean }): void {
47+
const header = options?.time ? `${formatTime(new Date(), pretty)} ` : '';
48+
process.stdout.write(`${header}${message}\n`);
4849
},
4950
clearScreen(): void {
5051
process.stdout.write('\x1B[2J\x1B[3J\x1B[H');

0 commit comments

Comments
 (0)