mirror of
https://github.com/nodejs/node.git
synced 2025-05-05 08:53:12 +00:00

Instead of using process.config.variables.v8_enable_inspector to detect whether inspector is enabled in the build. PR-URL: https://github.com/nodejs/node/pull/25819 Refs: https://github.com/nodejs/node/issues/25343 Reviewed-By: Eugene Ostroukhov <eostroukhov@google.com> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Richard Lau <riclau@uk.ibm.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
67 lines
2.1 KiB
JavaScript
67 lines
2.1 KiB
JavaScript
'use strict';
|
|
|
|
let session;
|
|
function sendInspectorCommand(cb, onError) {
|
|
const { hasInspector } = internalBinding('config');
|
|
if (!hasInspector) return onError();
|
|
const inspector = require('inspector');
|
|
if (session === undefined) session = new inspector.Session();
|
|
try {
|
|
session.connect();
|
|
try {
|
|
return cb(session);
|
|
} finally {
|
|
session.disconnect();
|
|
}
|
|
} catch {
|
|
return onError();
|
|
}
|
|
}
|
|
|
|
// Create a special require function for the inspector command line API
|
|
function installConsoleExtensions(commandLineApi) {
|
|
if (commandLineApi.require) { return; }
|
|
const { tryGetCwd } = require('internal/process/execution');
|
|
const CJSModule = require('internal/modules/cjs/loader');
|
|
const { makeRequireFunction } = require('internal/modules/cjs/helpers');
|
|
const consoleAPIModule = new CJSModule('<inspector console>');
|
|
const cwd = tryGetCwd();
|
|
consoleAPIModule.paths =
|
|
CJSModule._nodeModulePaths(cwd).concat(CJSModule.globalPaths);
|
|
commandLineApi.require = makeRequireFunction(consoleAPIModule);
|
|
}
|
|
|
|
// Wrap a console implemented by Node.js with features from the VM inspector
|
|
function wrapConsole(consoleFromNode, consoleFromVM) {
|
|
const config = {};
|
|
const { consoleCall } = internalBinding('inspector');
|
|
for (const key of Object.keys(consoleFromVM)) {
|
|
// If global console has the same method as inspector console,
|
|
// then wrap these two methods into one. Native wrapper will preserve
|
|
// the original stack.
|
|
if (consoleFromNode.hasOwnProperty(key)) {
|
|
consoleFromNode[key] = consoleCall.bind(consoleFromNode,
|
|
consoleFromVM[key],
|
|
consoleFromNode[key],
|
|
config);
|
|
} else {
|
|
// Add additional console APIs from the inspector
|
|
consoleFromNode[key] = consoleFromVM[key];
|
|
}
|
|
}
|
|
}
|
|
|
|
// Stores the console from VM, should be set during bootstrap.
|
|
let consoleFromVM;
|
|
module.exports = {
|
|
installConsoleExtensions,
|
|
sendInspectorCommand,
|
|
wrapConsole,
|
|
get consoleFromVM() {
|
|
return consoleFromVM;
|
|
},
|
|
set consoleFromVM(val) {
|
|
consoleFromVM = val;
|
|
}
|
|
};
|