From 955c617583d37e0bc85bf4fe241bdded8ccd25ff Mon Sep 17 00:00:00 2001 From: Dimitri Benin Date: Mon, 18 Mar 2019 17:00:52 +0000 Subject: [PATCH] Require Node.js 8, add TypeScript definition (#14) --- .travis.yml | 1 - index.d.ts | 13 +++++++++++++ index.js | 10 +++++----- index.test-d.ts | 7 +++++++ package.json | 15 ++++++++++----- 5 files changed, 35 insertions(+), 11 deletions(-) create mode 100644 index.d.ts create mode 100644 index.test-d.ts diff --git a/.travis.yml b/.travis.yml index 2ae9d62..f3fa8cd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,4 +2,3 @@ language: node_js node_js: - '10' - '8' - - '6' diff --git a/index.d.ts b/index.d.ts new file mode 100644 index 0000000..dbec894 --- /dev/null +++ b/index.d.ts @@ -0,0 +1,13 @@ +import {Primitive, JsonObject} from 'type-fest'; + +export type ErrorObject = { + name?: string; + stack?: string; + message?: string; + code?: string; +} & JsonObject; + +/** +Serialize an error into a plain object. +*/ +export default function serializeError(error: ErrorType): ErrorType extends Primitive ? ErrorType : ErrorObject; diff --git a/index.js b/index.js index 304c5ce..c55073a 100644 --- a/index.js +++ b/index.js @@ -5,10 +5,7 @@ const destroyCircular = (from, seen) => { seen.push(from); - // TODO: Use `Object.entries() when targeting Node.js 8 - for (const key of Object.keys(from)) { - const value = from[key]; - + for (const [key, value] of Object.entries(from)) { if (typeof value === 'function') { continue; } @@ -37,7 +34,7 @@ const destroyCircular = (from, seen) => { return to; }; -module.exports = value => { +const serializeError = value => { if (typeof value === 'object') { return destroyCircular(value, []); } @@ -50,3 +47,6 @@ module.exports = value => { return value; }; + +module.exports = serializeError; +module.exports.default = serializeError; diff --git a/index.test-d.ts b/index.test-d.ts new file mode 100644 index 0000000..09e0562 --- /dev/null +++ b/index.test-d.ts @@ -0,0 +1,7 @@ +import {expectType} from 'tsd-check'; +import serializeError, {ErrorObject} from '.'; + +const error = new Error('unicorn'); + +expectType(serializeError(1)); +expectType(serializeError(error)); diff --git a/package.json b/package.json index 223f14c..6bb6fba 100644 --- a/package.json +++ b/package.json @@ -10,13 +10,14 @@ "url": "sindresorhus.com" }, "engines": { - "node": ">=6" + "node": ">=8" }, "scripts": { - "test": "xo && ava" + "test": "xo && ava && tsd-check" }, "files": [ - "index.js" + "index.js", + "index.d.ts" ], "keywords": [ "error", @@ -28,8 +29,12 @@ "process", "send" ], + "dependencies": { + "type-fest": "^0.3.0" + }, "devDependencies": { - "ava": "^0.25.0", - "xo": "^0.23.0" + "ava": "^1.3.1", + "tsd-check": "^0.5.0", + "xo": "^0.24.0" } }