1'use strict';
2
3require('../common');
4
5const { inspect } = require('util');
6
7class FoobarError extends Error {
8  status = 'Feeling good';
9}
10
11const cause1 = new TypeError('Inner error');
12const cause2 = new FoobarError('Individual message', { cause: cause1 });
13cause2.extraProperties = 'Yes!';
14const cause3 = new Error('Stack causes', { cause: cause2 });
15
16const cause4 = new Error('Number error cause', { cause: 42 });
17const cause5 = new Error('Object cause', {
18  cause: {
19    message: 'Unique',
20    name: 'Error',
21    stack: 'Error: Unique\n' +
22           '    at Module._compile (node:internal/modules/cjs/loader:827:30)',
23  },
24});
25const cause6 = new Error('undefined cause', {
26  cause: undefined,
27});
28
29console.log(cause4);
30console.log(cause5);
31console.log(cause6);
32
33process.nextTick(() => {
34  const error = new RangeError('New Stack Frames', { cause: cause2 });
35  const error2 = new RangeError('New Stack Frames', { cause: cause3 });
36
37  inspect.defaultOptions.colors = true;
38
39  console.log(inspect(error));
40  console.log(inspect(cause3));
41  console.log(inspect(error2));
42
43  inspect.defaultOptions.colors = false;
44
45  console.log(inspect(error));
46  console.log(inspect(cause3));
47  console.log(inspect(error2));
48});
49
50{
51  const error = new Error('cause that throws');
52  Reflect.defineProperty(error, 'cause', { get() { throw new Error(); } });
53  console.log(inspect(error));
54}
55