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