Skip to content

Commit 8ce0e9a

Browse files
BridgeARjasnell
authored andcommitted
lib: refactor console startup
PR-URL: #15111 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Michaël Zasso <[email protected]>
1 parent 6a94c1a commit 8ce0e9a

File tree

1 file changed

+33
-59
lines changed

1 file changed

+33
-59
lines changed

lib/internal/bootstrap_node.js

+33-59
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,19 @@
2626
setupProcessICUVersions();
2727

2828
setupGlobalVariables();
29+
30+
const _process = NativeModule.require('internal/process');
31+
_process.setupConfig(NativeModule._source);
32+
NativeModule.require('internal/process/warning').setup();
33+
NativeModule.require('internal/process/next_tick').setup();
34+
NativeModule.require('internal/process/stdio').setup();
35+
2936
const browserGlobals = !process._noBrowserGlobals;
3037
if (browserGlobals) {
3138
setupGlobalTimeouts();
3239
setupGlobalConsole();
3340
}
3441

35-
const _process = NativeModule.require('internal/process');
3642
const perf = process.binding('performance');
3743
const {
3844
NODE_PERFORMANCE_MILESTONE_BOOTSTRAP_COMPLETE,
@@ -50,26 +56,6 @@
5056
_process.setup_performance();
5157
_process.setup_cpuUsage();
5258
_process.setupMemoryUsage();
53-
_process.setupConfig(NativeModule._source);
54-
NativeModule.require('internal/process/warning').setup();
55-
NativeModule.require('internal/process/next_tick').setup();
56-
NativeModule.require('internal/process/stdio').setup();
57-
if (browserGlobals) {
58-
// Instantiate eagerly in case the first call is under stack overflow
59-
// conditions where instantiation doesn't work.
60-
const console = global.console;
61-
console.assert;
62-
console.clear;
63-
console.count;
64-
console.countReset;
65-
console.dir;
66-
console.error;
67-
console.log;
68-
console.time;
69-
console.timeEnd;
70-
console.trace;
71-
console.warn;
72-
}
7359
_process.setupKillAndExit();
7460
_process.setupSignalHandlers();
7561
if (global.__coverage__)
@@ -319,62 +305,50 @@
319305

320306
function setupGlobalConsole() {
321307
const originalConsole = global.console;
322-
let console;
308+
const Module = NativeModule.require('module');
309+
// Setup Node.js global.console
310+
const wrappedConsole = NativeModule.require('console');
323311
Object.defineProperty(global, 'console', {
324312
configurable: true,
325313
enumerable: true,
326-
get: function() {
327-
if (!console) {
328-
console = (originalConsole === undefined) ?
329-
NativeModule.require('console') :
330-
installInspectorConsole(originalConsole);
331-
}
332-
return console;
314+
get() {
315+
return wrappedConsole;
333316
}
334317
});
335-
setupInspectorCommandLineAPI();
318+
setupInspector(originalConsole, wrappedConsole, Module);
336319
}
337320

338-
function installInspectorConsole(globalConsole) {
339-
const wrappedConsole = NativeModule.require('console');
340-
const inspector = process.binding('inspector');
341-
if (!inspector.consoleCall) {
342-
return wrappedConsole;
321+
function setupInspector(originalConsole, wrappedConsole, Module) {
322+
const { addCommandLineAPI, consoleCall } = process.binding('inspector');
323+
if (!consoleCall) {
324+
return;
343325
}
326+
// Setup inspector command line API
327+
const { makeRequireFunction } = NativeModule.require('internal/module');
328+
const path = NativeModule.require('path');
329+
const cwd = tryGetCwd(path);
330+
331+
const consoleAPIModule = new Module('<inspector console>');
332+
consoleAPIModule.paths =
333+
Module._nodeModulePaths(cwd).concat(Module.globalPaths);
334+
addCommandLineAPI('require', makeRequireFunction(consoleAPIModule));
344335
const config = {};
345336
for (const key of Object.keys(wrappedConsole)) {
346-
if (!globalConsole.hasOwnProperty(key))
337+
if (!originalConsole.hasOwnProperty(key))
347338
continue;
348339
// If global console has the same method as inspector console,
349340
// then wrap these two methods into one. Native wrapper will preserve
350341
// the original stack.
351-
wrappedConsole[key] = inspector.consoleCall.bind(wrappedConsole,
352-
globalConsole[key],
353-
wrappedConsole[key],
354-
config);
342+
wrappedConsole[key] = consoleCall.bind(wrappedConsole,
343+
originalConsole[key],
344+
wrappedConsole[key],
345+
config);
355346
}
356-
for (const key of Object.keys(globalConsole)) {
347+
for (const key of Object.keys(originalConsole)) {
357348
if (wrappedConsole.hasOwnProperty(key))
358349
continue;
359-
wrappedConsole[key] = globalConsole[key];
350+
wrappedConsole[key] = originalConsole[key];
360351
}
361-
return wrappedConsole;
362-
}
363-
364-
function setupInspectorCommandLineAPI() {
365-
const { addCommandLineAPI } = process.binding('inspector');
366-
if (!addCommandLineAPI) return;
367-
368-
const Module = NativeModule.require('module');
369-
const { makeRequireFunction } = NativeModule.require('internal/module');
370-
const path = NativeModule.require('path');
371-
const cwd = tryGetCwd(path);
372-
373-
const consoleAPIModule = new Module('<inspector console>');
374-
consoleAPIModule.paths =
375-
Module._nodeModulePaths(cwd).concat(Module.globalPaths);
376-
377-
addCommandLineAPI('require', makeRequireFunction(consoleAPIModule));
378352
}
379353

380354
function setupProcessFatal() {

0 commit comments

Comments
 (0)