errors: add support for cause in aborterror

Signed-off-by: James M Snell <jasnell@gmail.com>

PR-URL: https://github.com/nodejs/node/pull/41008
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Robert Nagy <ronagy@icloud.com>
Reviewed-By: Benjamin Gruenbaum <benjamingr@gmail.com>
pull/40909/head
James M Snell 2021-11-28 12:22:29 -08:00
parent 1086468aa3
commit 36c0ac05e6
No known key found for this signature in database
GPG Key ID: 7341B15C070877AC
2 changed files with 36 additions and 2 deletions

View File

@ -821,8 +821,11 @@ function hideInternalStackFrames(error) {
// to make usage of the error in userland and readable-stream easier.
// It is a regular error with `.code` and `.name`.
class AbortError extends Error {
constructor() {
super('The operation was aborted');
constructor(message = 'The operation was aborted', options = undefined) {
if (options !== undefined && typeof options !== 'object') {
throw new codes.ERR_INVALID_ARG_TYPE('options', 'Object', options);
}
super(message, options);
this.code = 'ABORT_ERR';
this.name = 'AbortError';
}

View File

@ -0,0 +1,31 @@
// Flags: --expose-internals
'use strict';
require('../common');
const {
strictEqual,
throws,
} = require('assert');
const { AbortError } = require('internal/errors');
{
const err = new AbortError();
strictEqual(err.message, 'The operation was aborted');
strictEqual(err.cause, undefined);
}
{
const cause = new Error('boom');
const err = new AbortError('bang', { cause });
strictEqual(err.message, 'bang');
strictEqual(err.cause, cause);
}
{
throws(() => new AbortError('', false), {
code: 'ERR_INVALID_ARG_TYPE'
});
throws(() => new AbortError('', ''), {
code: 'ERR_INVALID_ARG_TYPE'
});
}