Skip to content

Commit 156215d

Browse files
felixfbeckersindresorhus
authored andcommitted
Support plain objects (#3)
1 parent 7ae39e2 commit 156215d

File tree

3 files changed

+31
-6
lines changed

3 files changed

+31
-6
lines changed

index.js

+10-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,16 @@ class AggregateError extends Error {
1111
throw new TypeError(`Expected input to be iterable, got ${typeof errors}`);
1212
}
1313

14-
errors = Array.from(errors).map(err => err instanceof Error ? err : new Error(err));
14+
errors = Array.from(errors).map(err => {
15+
if (err instanceof Error) {
16+
return err;
17+
}
18+
if (err && typeof err === 'object') {
19+
// Handle plain error objects with message property and/or possibly other metadata
20+
return Object.assign(new Error(err.message), err);
21+
}
22+
return new Error(err);
23+
});
1524

1625
let message = errors.map(err => cleanInternalStack(cleanStack(err.stack))).join('\n');
1726
message = '\n' + indentString(message, 4);

readme.md

+9-3
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ $ npm install --save aggregate-error
1515
```js
1616
const AggregateError = require('aggregate-error');
1717

18-
const err = new AggregateError([new Error('foo'), 'bar']);
18+
const err = new AggregateError([new Error('foo'), 'bar', {message: 'baz'}]);
1919

2020
throw err;
2121
/*
@@ -24,6 +24,8 @@ AggregateError:
2424
at Object.<anonymous> (/Users/sindresorhus/dev/aggregate-error/example.js:3:33)
2525
Error: bar
2626
at Object.<anonymous> (/Users/sindresorhus/dev/aggregate-error/example.js:3:13)
27+
Error: baz
28+
at Object.<anonymous> (/Users/sindresorhus/dev/aggregate-error/example.js:3:13)
2729
at AggregateError (/Users/sindresorhus/dev/aggregate-error/index.js:19:3)
2830
at Object.<anonymous> (/Users/sindresorhus/dev/aggregate-error/example.js:3:13)
2931
at Module._compile (module.js:556:32)
@@ -41,18 +43,22 @@ for (const el of err) {
4143
}
4244
//=> [Error: foo]
4345
//=> [Error: bar]
46+
//=> [Error: baz]
4447
```
4548

4649

4750
## API
4851

4952
### AggregateError(errors)
5053

51-
Returns an `Error` that is also an [`iterator`](https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Iterators_and_Generators) for the individual errors.
54+
Returns an `Error` that is also an [`Iterable`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators#Iterables) for the individual errors.
5255

5356
#### errors
5457

55-
Type: `Iterable<Error|string>`
58+
Type: `Iterable<Error|Object|string>`
59+
60+
If a string, a new `Error` is created with the string as the error message.<br>
61+
If a non-Error object, a new `Error` is created with all properties from the object copied over.
5662

5763

5864
## License

test.js

+12-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,19 @@ import test from 'ava';
22
import AggregateError from './';
33

44
test(t => {
5-
const err = new AggregateError([new Error('foo'), 'bar']);
5+
const err = new AggregateError([
6+
new Error('foo'),
7+
'bar',
8+
{message: 'baz', code: 'EBAZ'},
9+
{code: 'EQUX'}
10+
]);
611
console.log(err);
712
t.regex(err.message, /Error: foo\n {8}at /);
813
t.regex(err.message, /Error: bar\n {8}at /);
9-
t.deepEqual(Array.from(err), [new Error('foo'), new Error('bar')]);
14+
t.deepEqual(Array.from(err), [
15+
new Error('foo'),
16+
new Error('bar'),
17+
Object.assign(new Error('baz'), {code: 'EBAZ'}),
18+
Object.assign(new Error(), {code: 'EQUX'})
19+
]);
1020
});

0 commit comments

Comments
 (0)