lib: refactor console startup
PR-URL: https://github.com/nodejs/node/pull/15111 Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Michaël Zasso <targos@protonmail.com>
This commit is contained in:
parent
db2e093e05
commit
4bcb1c3f75
96
lib/internal/bootstrap_node.js
vendored
96
lib/internal/bootstrap_node.js
vendored
@ -26,13 +26,19 @@
|
||||
setupProcessICUVersions();
|
||||
|
||||
setupGlobalVariables();
|
||||
|
||||
const _process = NativeModule.require('internal/process');
|
||||
_process.setupConfig(NativeModule._source);
|
||||
NativeModule.require('internal/process/warning').setup();
|
||||
NativeModule.require('internal/process/next_tick').setup();
|
||||
NativeModule.require('internal/process/stdio').setup();
|
||||
|
||||
const browserGlobals = !process._noBrowserGlobals;
|
||||
if (browserGlobals) {
|
||||
setupGlobalTimeouts();
|
||||
setupGlobalConsole();
|
||||
}
|
||||
|
||||
const _process = NativeModule.require('internal/process');
|
||||
const perf = process.binding('performance');
|
||||
const {
|
||||
NODE_PERFORMANCE_MILESTONE_BOOTSTRAP_COMPLETE,
|
||||
@ -50,26 +56,6 @@
|
||||
_process.setup_performance();
|
||||
_process.setup_cpuUsage();
|
||||
_process.setupMemoryUsage();
|
||||
_process.setupConfig(NativeModule._source);
|
||||
NativeModule.require('internal/process/warning').setup();
|
||||
NativeModule.require('internal/process/next_tick').setup();
|
||||
NativeModule.require('internal/process/stdio').setup();
|
||||
if (browserGlobals) {
|
||||
// Instantiate eagerly in case the first call is under stack overflow
|
||||
// conditions where instantiation doesn't work.
|
||||
const console = global.console;
|
||||
console.assert;
|
||||
console.clear;
|
||||
console.count;
|
||||
console.countReset;
|
||||
console.dir;
|
||||
console.error;
|
||||
console.log;
|
||||
console.time;
|
||||
console.timeEnd;
|
||||
console.trace;
|
||||
console.warn;
|
||||
}
|
||||
_process.setupKillAndExit();
|
||||
_process.setupSignalHandlers();
|
||||
if (global.__coverage__)
|
||||
@ -319,53 +305,25 @@
|
||||
|
||||
function setupGlobalConsole() {
|
||||
const originalConsole = global.console;
|
||||
let console;
|
||||
const Module = NativeModule.require('module');
|
||||
// Setup Node.js global.console
|
||||
const wrappedConsole = NativeModule.require('console');
|
||||
Object.defineProperty(global, 'console', {
|
||||
configurable: true,
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
if (!console) {
|
||||
console = (originalConsole === undefined) ?
|
||||
NativeModule.require('console') :
|
||||
installInspectorConsole(originalConsole);
|
||||
}
|
||||
return console;
|
||||
get() {
|
||||
return wrappedConsole;
|
||||
}
|
||||
});
|
||||
setupInspectorCommandLineAPI();
|
||||
setupInspector(originalConsole, wrappedConsole, Module);
|
||||
}
|
||||
|
||||
function installInspectorConsole(globalConsole) {
|
||||
const wrappedConsole = NativeModule.require('console');
|
||||
const inspector = process.binding('inspector');
|
||||
if (!inspector.consoleCall) {
|
||||
return wrappedConsole;
|
||||
function setupInspector(originalConsole, wrappedConsole, Module) {
|
||||
const { addCommandLineAPI, consoleCall } = process.binding('inspector');
|
||||
if (!consoleCall) {
|
||||
return;
|
||||
}
|
||||
const config = {};
|
||||
for (const key of Object.keys(wrappedConsole)) {
|
||||
if (!globalConsole.hasOwnProperty(key))
|
||||
continue;
|
||||
// If global console has the same method as inspector console,
|
||||
// then wrap these two methods into one. Native wrapper will preserve
|
||||
// the original stack.
|
||||
wrappedConsole[key] = inspector.consoleCall.bind(wrappedConsole,
|
||||
globalConsole[key],
|
||||
wrappedConsole[key],
|
||||
config);
|
||||
}
|
||||
for (const key of Object.keys(globalConsole)) {
|
||||
if (wrappedConsole.hasOwnProperty(key))
|
||||
continue;
|
||||
wrappedConsole[key] = globalConsole[key];
|
||||
}
|
||||
return wrappedConsole;
|
||||
}
|
||||
|
||||
function setupInspectorCommandLineAPI() {
|
||||
const { addCommandLineAPI } = process.binding('inspector');
|
||||
if (!addCommandLineAPI) return;
|
||||
|
||||
const Module = NativeModule.require('module');
|
||||
// Setup inspector command line API
|
||||
const { makeRequireFunction } = NativeModule.require('internal/module');
|
||||
const path = NativeModule.require('path');
|
||||
const cwd = tryGetCwd(path);
|
||||
@ -373,8 +331,24 @@
|
||||
const consoleAPIModule = new Module('<inspector console>');
|
||||
consoleAPIModule.paths =
|
||||
Module._nodeModulePaths(cwd).concat(Module.globalPaths);
|
||||
|
||||
addCommandLineAPI('require', makeRequireFunction(consoleAPIModule));
|
||||
const config = {};
|
||||
for (const key of Object.keys(wrappedConsole)) {
|
||||
if (!originalConsole.hasOwnProperty(key))
|
||||
continue;
|
||||
// If global console has the same method as inspector console,
|
||||
// then wrap these two methods into one. Native wrapper will preserve
|
||||
// the original stack.
|
||||
wrappedConsole[key] = consoleCall.bind(wrappedConsole,
|
||||
originalConsole[key],
|
||||
wrappedConsole[key],
|
||||
config);
|
||||
}
|
||||
for (const key of Object.keys(originalConsole)) {
|
||||
if (wrappedConsole.hasOwnProperty(key))
|
||||
continue;
|
||||
wrappedConsole[key] = originalConsole[key];
|
||||
}
|
||||
}
|
||||
|
||||
function setupProcessFatal() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user