aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/inspector.js2
-rw-r--r--lib/internal/bootstrap/node.js12
-rw-r--r--lib/internal/console/inspector.js52
-rw-r--r--lib/internal/util/inspector.js51
4 files changed, 55 insertions, 62 deletions
diff --git a/lib/inspector.js b/lib/inspector.js
index 565b3aa972..cc8f86ee46 100644
--- a/lib/inspector.js
+++ b/lib/inspector.js
@@ -106,6 +106,6 @@ module.exports = {
url: url,
// This is dynamically added during bootstrap,
// where the console from the VM is still available
- console: require('internal/console/inspector').consoleFromVM,
+ console: require('internal/util/inspector').consoleFromVM,
Session
};
diff --git a/lib/internal/bootstrap/node.js b/lib/internal/bootstrap/node.js
index 8f38bff448..bb07bee6f4 100644
--- a/lib/internal/bootstrap/node.js
+++ b/lib/internal/bootstrap/node.js
@@ -710,13 +710,17 @@ function setupGlobalConsole() {
value: consoleFromNode,
writable: true
});
- // TODO(joyeecheung): can we skip this if inspector is not active?
+
if (config.hasInspector) {
- const inspector =
- NativeModule.require('internal/console/inspector');
- inspector.addInspectorApis(consoleFromNode, consoleFromVM);
+ const inspector = NativeModule.require('internal/util/inspector');
// This will be exposed by `require('inspector').console` later.
inspector.consoleFromVM = consoleFromVM;
+ // TODO(joyeecheung): postpone this until the first time inspector
+ // is activated.
+ inspector.wrapConsole(consoleFromNode, consoleFromVM);
+ const { setConsoleExtensionInstaller } = internalBinding('inspector');
+ // Setup inspector command line API.
+ setConsoleExtensionInstaller(inspector.installConsoleExtensions);
}
}
diff --git a/lib/internal/console/inspector.js b/lib/internal/console/inspector.js
deleted file mode 100644
index 3dbc68a193..0000000000
--- a/lib/internal/console/inspector.js
+++ /dev/null
@@ -1,52 +0,0 @@
-'use strict';
-
-const CJSModule = require('internal/modules/cjs/loader');
-const { makeRequireFunction } = require('internal/modules/cjs/helpers');
-const { tryGetCwd } = require('internal/process/execution');
-const { addCommandLineAPI, consoleCall } = internalBinding('inspector');
-
-// Wrap a console implemented by Node.js with features from the VM inspector
-function addInspectorApis(consoleFromNode, consoleFromVM) {
- // Setup inspector command line API.
- const cwd = tryGetCwd();
- const consoleAPIModule = new CJSModule('<inspector console>');
- consoleAPIModule.paths =
- CJSModule._nodeModulePaths(cwd).concat(CJSModule.globalPaths);
- addCommandLineAPI('require', makeRequireFunction(consoleAPIModule));
- const config = {};
-
- // If global console has the same method as inspector console,
- // then wrap these two methods into one. Native wrapper will preserve
- // the original stack.
- for (const key of Object.keys(consoleFromNode)) {
- if (!consoleFromVM.hasOwnProperty(key))
- continue;
- consoleFromNode[key] = consoleCall.bind(consoleFromNode,
- consoleFromVM[key],
- consoleFromNode[key],
- config);
- }
-
- // Add additional console APIs from the inspector
- for (const key of Object.keys(consoleFromVM)) {
- if (consoleFromNode.hasOwnProperty(key))
- continue;
- consoleFromNode[key] = consoleFromVM[key];
- }
-}
-
-module.exports = {
- addInspectorApis
-};
-
-// Stores the console from VM, should be set during bootstrap.
-let consoleFromVM;
-
-Object.defineProperty(module.exports, 'consoleFromVM', {
- get() {
- return consoleFromVM;
- },
- set(val) {
- consoleFromVM = val;
- }
-});
diff --git a/lib/internal/util/inspector.js b/lib/internal/util/inspector.js
index face748ab0..68c20108bd 100644
--- a/lib/internal/util/inspector.js
+++ b/lib/internal/util/inspector.js
@@ -1,11 +1,9 @@
'use strict';
-const { hasInspector } = internalBinding('config');
-const inspector = hasInspector ? require('inspector') : undefined;
-
let session;
-
function sendInspectorCommand(cb, onError) {
+ const { hasInspector } = internalBinding('config');
+ const inspector = hasInspector ? require('inspector') : undefined;
if (!hasInspector) return onError();
if (session === undefined) session = new inspector.Session();
try {
@@ -20,6 +18,49 @@ function sendInspectorCommand(cb, 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 = {
- sendInspectorCommand
+ installConsoleExtensions,
+ sendInspectorCommand,
+ wrapConsole,
+ get consoleFromVM() {
+ return consoleFromVM;
+ },
+ set consoleFromVM(val) {
+ consoleFromVM = val;
+ }
};