1 | 'use strict';
|
---|
2 | var $ = require('../internals/export');
|
---|
3 | var getBuiltIn = require('../internals/get-built-in');
|
---|
4 | var isObject = require('../internals/is-object');
|
---|
5 | var classof = require('../internals/classof');
|
---|
6 | var fails = require('../internals/fails');
|
---|
7 |
|
---|
8 | var ERROR = 'Error';
|
---|
9 | var DOM_EXCEPTION = 'DOMException';
|
---|
10 | // eslint-disable-next-line es/no-object-setprototypeof, no-proto -- safe
|
---|
11 | var PROTOTYPE_SETTING_AVAILABLE = Object.setPrototypeOf || ({}).__proto__;
|
---|
12 |
|
---|
13 | var DOMException = getBuiltIn(DOM_EXCEPTION);
|
---|
14 | var $Error = Error;
|
---|
15 | var $isError = $Error.isError;
|
---|
16 |
|
---|
17 | var FORCED = !$isError || !PROTOTYPE_SETTING_AVAILABLE || fails(function () {
|
---|
18 | // Bun, isNativeError-based implementations, some buggy structuredClone-based implementations, etc.
|
---|
19 | // https://github.com/oven-sh/bun/issues/15821
|
---|
20 | return (DOMException && !$isError(new DOMException(DOM_EXCEPTION))) ||
|
---|
21 | // structuredClone-based implementations
|
---|
22 | // eslint-disable-next-line es/no-error-cause -- detection
|
---|
23 | !$isError(new $Error(ERROR, { cause: function () { /* empty */ } })) ||
|
---|
24 | // instanceof-based and FF Error#stack-based implementations
|
---|
25 | $isError(getBuiltIn('Object', 'create')($Error.prototype));
|
---|
26 | });
|
---|
27 |
|
---|
28 | // `Error.isError` method
|
---|
29 | // https://github.com/tc39/proposal-is-error
|
---|
30 | $({ target: 'Error', stat: true, sham: true, forced: FORCED }, {
|
---|
31 | isError: function isError(arg) {
|
---|
32 | if (!isObject(arg)) return false;
|
---|
33 | var tag = classof(arg);
|
---|
34 | return tag === ERROR || tag === DOM_EXCEPTION;
|
---|
35 | }
|
---|
36 | });
|
---|