Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e3c1574

Browse files
ikonstmjameswh
andauthored
fix(bundler): Pass Webpack output to logger in a single record (temporalio#1414)
Co-authored-by: James Watkins-Harvey <[email protected]>
1 parent 61398a5 commit e3c1574

File tree

5 files changed

+55
-6
lines changed

5 files changed

+55
-6
lines changed

package-lock.json

Lines changed: 19 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
"@types/ms": "^0.7.34",
5959
"@types/node": "^20.10.8",
6060
"@types/stack-utils": "^2.0.3",
61+
"@types/supports-color": "^8.1.3",
6162
"@typescript-eslint/eslint-plugin": "^6.18.1",
6263
"@typescript-eslint/parser": "^6.18.1",
6364
"arg": "^5.0.2",

packages/worker/package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,14 @@
2626
"rxjs": "^7.8.1",
2727
"source-map": "^0.7.4",
2828
"source-map-loader": "^4.0.2",
29+
"supports-color": "^8.1.1",
2930
"swc-loader": "^0.2.3",
3031
"unionfs": "^4.5.1",
3132
"webpack": "^5.89.0"
3233
},
34+
"devDependencies": {
35+
"@types/supports-color": "^8.1.3"
36+
},
3337
"bugs": {
3438
"url": "https://github.com/temporalio/sdk-typescript/issues"
3539
},

packages/worker/src/logger.ts

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { formatWithOptions } from 'node:util';
2+
import * as supportsColor from 'supports-color';
23
import { getTimeOfDay } from '@temporalio/core-bridge';
34
import { LogLevel, LogMetadata, Logger } from '@temporalio/common';
45

@@ -13,11 +14,23 @@ export interface LogEntry {
1314
meta?: LogMetadata;
1415
}
1516

17+
/**
18+
* @internal
19+
*/
20+
interface LoggerWithColorSupport extends Logger {
21+
[loggerHasColorsSymbol]?: boolean;
22+
}
23+
1624
export const LogTimestamp = Symbol.for('log_timestamp');
1725

1826
const severities: LogLevel[] = ['TRACE', 'DEBUG', 'INFO', 'WARN', 'ERROR'];
1927

20-
const format = formatWithOptions.bind(undefined, { colors: true });
28+
/**
29+
* @internal
30+
*/
31+
const loggerHasColorsSymbol = Symbol.for('logger_has_colors');
32+
const stderrHasColors = !!supportsColor.stderr;
33+
const format = formatWithOptions.bind(undefined, { colors: stderrHasColors });
2134

2235
/**
2336
* Log messages to `stderr` using basic formatting
@@ -53,6 +66,8 @@ export class DefaultLogger implements Logger {
5366
protected readonly logFunction = defaultLogFunction
5467
) {
5568
this.severity = severities.indexOf(this.level);
69+
(this as LoggerWithColorSupport)[loggerHasColorsSymbol] =
70+
(logFunction === defaultLogFunction && stderrHasColors) ?? false;
5671
}
5772

5873
log(level: LogLevel, message: string, meta?: LogMetadata): void {
@@ -88,6 +103,13 @@ export class DefaultLogger implements Logger {
88103
}
89104
}
90105

106+
/**
107+
* @internal
108+
*/
109+
export function hasColorSupport(logger: Logger): boolean {
110+
return (logger as LoggerWithColorSupport)[loggerHasColorsSymbol] ?? false;
111+
}
112+
91113
export function withMetadata(logger: Logger, meta: LogMetadata | (() => LogMetadata)): Logger {
92114
return new LoggerWithMetadata(logger, meta);
93115
}
@@ -105,6 +127,7 @@ class LoggerWithMetadata implements Logger {
105127
this.parentLogger = parent;
106128
this.metaChain = [meta];
107129
}
130+
(this as LoggerWithColorSupport)[loggerHasColorsSymbol] = hasColorSupport(parent);
108131
}
109132

110133
log(level: LogLevel, message: string, meta?: LogMetadata): void {

packages/worker/src/workflow/bundler.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import util from 'node:util';
55
import * as unionfs from 'unionfs';
66
import * as memfs from 'memfs';
77
import { Configuration, webpack } from 'webpack';
8-
import { DefaultLogger, Logger } from '../logger';
8+
import { DefaultLogger, Logger, hasColorSupport } from '../logger';
99
import { toMB } from '../utils';
1010

1111
export const defaultWorkflowInterceptorModules = [require.resolve('../workflow-log-interceptor')];
@@ -262,10 +262,12 @@ exports.importInterceptors = function importInterceptors() {
262262
const hasError = stats.hasErrors();
263263
// To debug webpack build:
264264
// const lines = stats.toString({ preset: 'verbose' }).split('\n');
265-
const lines = stats.toString({ chunks: false, colors: true, errorDetails: true }).split('\n');
266-
for (const line of lines) {
267-
this.logger[hasError ? 'error' : 'info'](line);
268-
}
265+
const webpackOutput = stats.toString({
266+
chunks: false,
267+
colors: hasColorSupport(this.logger),
268+
errorDetails: true,
269+
});
270+
this.logger[hasError ? 'error' : 'info'](webpackOutput);
269271
if (hasError) {
270272
reject(
271273
new Error(

0 commit comments

Comments
 (0)