Skip to content

Commit a83e956

Browse files
committed
Update datadog serializer to properly handle non-object errors
1 parent 9417c32 commit a83e956

2 files changed

Lines changed: 32 additions & 3 deletions

File tree

src/index.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
* Module dependencies.
55
*/
66

7-
const { cloneDeep, cloneDeepWith, escapeRegExp, get, set } = require('lodash');
7+
const { cloneDeep, cloneDeepWith, escapeRegExp, get, isPlainObject, set } = require('lodash');
88
const { serializeError: errorSerializer } = require('serialize-error');
99
const stringify = require('json-stringify-safe');
1010
const traverse = require('traverse');
@@ -214,6 +214,13 @@ module.exports.anonymizer = (
214214
*/
215215

216216
function datadogErrorSerializer(error) {
217+
if (!isPlainObject(error)) {
218+
return {
219+
details: error,
220+
kind: 'Error'
221+
};
222+
}
223+
217224
return {
218225
...error,
219226
kind: error.name || 'Error'

test/src/index.test.js

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -832,26 +832,48 @@ describe('Anonymizer', () => {
832832
const serializer = jest.fn(builtinSerializers.datadogError);
833833
const serializers = [
834834
{ path: 'err', serializer },
835+
{ path: 'errArr', serializer },
836+
{ path: 'errStr', serializer },
835837
{ path: 'error', serializer }
836838
];
837-
const whitelist = ['error.foo', 'error.kind', 'error.message', 'error.name', 'error.stack'];
839+
const whitelist = [
840+
'errArr.details.*',
841+
'errArr.kind',
842+
'errStr.details',
843+
'errStr.kind',
844+
'error.foo',
845+
'error.kind',
846+
'error.message',
847+
'error.name',
848+
'error.stack'
849+
];
838850
const anonymize = anonymizer({ whitelist }, { serializers });
839851

840852
const result = anonymize({
841853
e: error,
842854
err: {
843855
statusCode: 400
844856
},
857+
errArr: ['foo', 'bar'],
858+
errStr: 'foobar',
845859
error,
846860
error2: error,
847861
foo: 'bar'
848862
});
849863

850-
expect(serializer).toHaveBeenCalledTimes(2);
864+
expect(serializer).toHaveBeenCalledTimes(4);
851865
expect(result.err).toEqual({
852866
kind: '--REDACTED--',
853867
statusCode: '--REDACTED--'
854868
});
869+
expect(result.errArr).toEqual({
870+
details: ['foo', 'bar'],
871+
kind: 'Error'
872+
});
873+
expect(result.errStr).toEqual({
874+
details: 'foobar',
875+
kind: 'Error'
876+
});
855877
expect(result.error).toEqual({
856878
kind: 'Error',
857879
message: 'foobar',

0 commit comments

Comments
 (0)