inspector: return Error objects on error
The inspector communicates errors via POJOs. This commit wraps the error information in an actual Error object. PR-URL: https://github.com/nodejs/node/pull/26255 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Eugene Ostroukhov <eostroukhov@google.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
This commit is contained in:
parent
d7a3c3cecc
commit
e3d4a7d999
@ -3,6 +3,7 @@
|
|||||||
const {
|
const {
|
||||||
ERR_INSPECTOR_ALREADY_CONNECTED,
|
ERR_INSPECTOR_ALREADY_CONNECTED,
|
||||||
ERR_INSPECTOR_CLOSED,
|
ERR_INSPECTOR_CLOSED,
|
||||||
|
ERR_INSPECTOR_COMMAND,
|
||||||
ERR_INSPECTOR_NOT_AVAILABLE,
|
ERR_INSPECTOR_NOT_AVAILABLE,
|
||||||
ERR_INSPECTOR_NOT_CONNECTED,
|
ERR_INSPECTOR_NOT_CONNECTED,
|
||||||
ERR_INVALID_ARG_TYPE,
|
ERR_INVALID_ARG_TYPE,
|
||||||
@ -48,8 +49,14 @@ class Session extends EventEmitter {
|
|||||||
if (parsed.id) {
|
if (parsed.id) {
|
||||||
const callback = this[messageCallbacksSymbol].get(parsed.id);
|
const callback = this[messageCallbacksSymbol].get(parsed.id);
|
||||||
this[messageCallbacksSymbol].delete(parsed.id);
|
this[messageCallbacksSymbol].delete(parsed.id);
|
||||||
if (callback)
|
if (callback) {
|
||||||
callback(parsed.error || null, parsed.result || null);
|
if (parsed.error) {
|
||||||
|
return callback(new ERR_INSPECTOR_COMMAND(parsed.error.code,
|
||||||
|
parsed.error.message));
|
||||||
|
}
|
||||||
|
|
||||||
|
callback(null, parsed.result);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
this.emit(parsed.method, parsed);
|
this.emit(parsed.method, parsed);
|
||||||
this.emit('inspectorNotification', parsed);
|
this.emit('inspectorNotification', parsed);
|
||||||
|
@ -5,17 +5,22 @@ const common = require('../common');
|
|||||||
common.skipIfInspectorDisabled();
|
common.skipIfInspectorDisabled();
|
||||||
|
|
||||||
(async function test() {
|
(async function test() {
|
||||||
const { strictEqual } = require('assert');
|
const assert = require('assert');
|
||||||
const { Session } = require('inspector');
|
const { Session } = require('inspector');
|
||||||
const { promisify } = require('util');
|
const { promisify } = require('util');
|
||||||
|
|
||||||
const session = new Session();
|
const session = new Session();
|
||||||
session.connect();
|
session.connect();
|
||||||
session.post = promisify(session.post);
|
session.post = promisify(session.post);
|
||||||
const result = await session.post('Runtime.evaluate', {
|
await assert.rejects(
|
||||||
expression: 'for(;;);',
|
session.post('Runtime.evaluate', {
|
||||||
timeout: 0
|
expression: 'for(;;);',
|
||||||
}).catch((e) => e);
|
timeout: 0
|
||||||
strictEqual(result.message, 'Execution was terminated');
|
}),
|
||||||
|
{
|
||||||
|
code: 'ERR_INSPECTOR_COMMAND',
|
||||||
|
message: 'Inspector error -32000: Execution was terminated'
|
||||||
|
}
|
||||||
|
);
|
||||||
session.disconnect();
|
session.disconnect();
|
||||||
})();
|
})();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user