From 4f94222f2aa00096c6a38a693918921b8b587edb Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Tue, 22 Aug 2023 20:17:12 +0200 Subject: [PATCH 1/6] no more double error messages --- code/lib/node-logger/src/index.ts | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/code/lib/node-logger/src/index.ts b/code/lib/node-logger/src/index.ts index 09e0f2828783..75d0450b2c07 100644 --- a/code/lib/node-logger/src/index.ts +++ b/code/lib/node-logger/src/index.ts @@ -26,12 +26,29 @@ export const logger = { line: (count = 1): void => console.log(`${Array(count - 1).fill('\n')}`), warn: (message: string): void => npmLog.warn('', message), // npmLog supports anything we log, it will just stringify it - error: (message: unknown): void => npmLog.error('', message as string), + // error: (message: unknown): void => npmLog.error('', message as string), trace: ({ message, time }: { message: string; time: [number, number] }): void => npmLog.info('', `${message} (${colors.purple(prettyTime(time))})`), setLevel: (level = 'info'): void => { npmLog.level = level; }, + error: (message: Error | string): void => { + if (npmLog.levels[npmLog.level] < npmLog.levels.error) { + let msg: string; + + if (message instanceof Error && message.stack) { + msg = message.stack.toString(); + } else { + msg = message.toString(); + } + + console.log( + msg + .replaceAll(process.cwd(), '.') + .replace(message.toString(), chalk.red(message.toString())) + ); + } + }, }; export { npmLog as instance }; From 2ed74d93b41979f5b4be1411d3ad7a905dcdf838 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Tue, 22 Aug 2023 20:21:20 +0200 Subject: [PATCH 2/6] cleanup --- code/lib/node-logger/src/index.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/code/lib/node-logger/src/index.ts b/code/lib/node-logger/src/index.ts index 75d0450b2c07..b839944e20d4 100644 --- a/code/lib/node-logger/src/index.ts +++ b/code/lib/node-logger/src/index.ts @@ -25,8 +25,6 @@ export const logger = { plain: (message: string): void => console.log(message), line: (count = 1): void => console.log(`${Array(count - 1).fill('\n')}`), warn: (message: string): void => npmLog.warn('', message), - // npmLog supports anything we log, it will just stringify it - // error: (message: unknown): void => npmLog.error('', message as string), trace: ({ message, time }: { message: string; time: [number, number] }): void => npmLog.info('', `${message} (${colors.purple(prettyTime(time))})`), setLevel: (level = 'info'): void => { From 5ba01b55d56a18ee2d32d6b0c127a2f93e47fdd4 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Tue, 22 Aug 2023 20:46:56 +0200 Subject: [PATCH 3/6] fix tying issue --- code/frameworks/angular/src/builders/utils/error-handler.ts | 2 +- code/lib/core-server/src/withTelemetry.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/frameworks/angular/src/builders/utils/error-handler.ts b/code/frameworks/angular/src/builders/utils/error-handler.ts index f2ff150495cf..2673dbfd0b87 100644 --- a/code/frameworks/angular/src/builders/utils/error-handler.ts +++ b/code/frameworks/angular/src/builders/utils/error-handler.ts @@ -12,7 +12,7 @@ export const printErrorDetails = (error: any): void => { } else if ((error as any).stats && (error as any).stats.compilation.errors) { (error as any).stats.compilation.errors.forEach((e: any) => logger.plain(e)); } else { - logger.error(error as any); + logger.error(error); } } else if (error.compilation?.errors) { error.compilation.errors.forEach((e: any) => logger.plain(e)); diff --git a/code/lib/core-server/src/withTelemetry.ts b/code/lib/core-server/src/withTelemetry.ts index 49b8c6c79699..0baebb8d97cb 100644 --- a/code/lib/core-server/src/withTelemetry.ts +++ b/code/lib/core-server/src/withTelemetry.ts @@ -151,7 +151,7 @@ export async function withTelemetry( try { return await run(); - } catch (error) { + } catch (error: any) { if (canceled) { return undefined; } From 7fa28049d35a89c1348087b6731160fee183fa67 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Tue, 22 Aug 2023 21:36:59 +0200 Subject: [PATCH 4/6] fix existing test and add test for errors --- code/lib/node-logger/src/index.test.ts | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/code/lib/node-logger/src/index.test.ts b/code/lib/node-logger/src/index.test.ts index 40188dbc8ceb..475a054e0c9f 100644 --- a/code/lib/node-logger/src/index.test.ts +++ b/code/lib/node-logger/src/index.test.ts @@ -1,12 +1,28 @@ import { info, warn, error } from 'npmlog'; import { logger } from '.'; +globalThis.console = { log: jest.fn() } as any; + jest.mock('npmlog', () => ({ info: jest.fn(), warn: jest.fn(), error: jest.fn(), + levels: { + silly: -Infinity, + verbose: 1000, + info: 2000, + timing: 2500, + http: 3000, + notice: 3500, + warn: 4000, + error: 5000, + silent: Infinity, + }, + level: 'info', })); +// + describe('node-logger', () => { it('should have an info method', () => { const message = 'information'; @@ -21,6 +37,13 @@ describe('node-logger', () => { it('should have an error method', () => { const message = 'error message'; logger.error(message); - expect(error).toHaveBeenCalledWith('', message); + expect(globalThis.console.log).toHaveBeenCalledWith(expect.stringMatching('message')); + }); + it('should format errors', () => { + const message = new Error('A complete disaster'); + logger.error(message); + expect(globalThis.console.log).toHaveBeenCalledWith( + expect.stringMatching('A complete disaster') + ); }); }); From 5c95bffba01f2d5012ccfe540394c88ab9f95b31 Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Tue, 22 Aug 2023 21:47:12 +0200 Subject: [PATCH 5/6] cleanup --- code/lib/node-logger/src/index.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/lib/node-logger/src/index.test.ts b/code/lib/node-logger/src/index.test.ts index 475a054e0c9f..3cda41501ed0 100644 --- a/code/lib/node-logger/src/index.test.ts +++ b/code/lib/node-logger/src/index.test.ts @@ -1,4 +1,4 @@ -import { info, warn, error } from 'npmlog'; +import { info, warn } from 'npmlog'; import { logger } from '.'; globalThis.console = { log: jest.fn() } as any; From 7e135d22a9fc909aff3b3fe3bb9fe8276feb6ffd Mon Sep 17 00:00:00 2001 From: Norbert de Langen Date: Wed, 23 Aug 2023 11:54:21 +0200 Subject: [PATCH 6/6] Update code/lib/node-logger/src/index.ts Co-authored-by: Yann Braga --- code/lib/node-logger/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/lib/node-logger/src/index.ts b/code/lib/node-logger/src/index.ts index b839944e20d4..4ca3550cfba2 100644 --- a/code/lib/node-logger/src/index.ts +++ b/code/lib/node-logger/src/index.ts @@ -42,8 +42,8 @@ export const logger = { console.log( msg - .replaceAll(process.cwd(), '.') .replace(message.toString(), chalk.red(message.toString())) + .replaceAll(process.cwd(), '.') ); } },