Parse errors to provide a consistent metadata object across Browser and Node environments. Made for Cabin.
npm:
npm install parse-errThis package exports a function that accepts two arguments (err, props).
req(Object) - an HTTP requestprops(Array) - a list of properties to cherry-pick from the error object parsed out oferr(by default all properties are returned; even non-enumerable ones and ones on the prototype object)
This function iterates over the prototype of the error and the error itself to get all non-Function properties and returns these properties as an object.
Normally if you console.log(err) it will not show you all fields such as type, statusCode, or code (e.g. if you're using Stripe).
In our case, we wanted to store these properties in our logs with Cabin.
As of v1.0.0 it now parses err.errors Array too – which adds support for packages such as maybe-combine-errors and combine-errors. This is useful if you combine multiple errors into one Error object, and subsequently set a property of err.errors = errors where errors is an Array of the errors combined.
const parseErr = require('parse-err');
const err = new Error('Oops!');
// just a random example
err.name = 'BeepBoop';
err.code = 100;
err.statusCode = 200;
console.error(parseErr(err));{ name: 'BeepBoop',
message: 'Oops!',
stack: 'BeepBoop: Oops!\n at Object.<anonymous> (/Users/user/Projects/parse-err/test.js:3:13)\n at Module._compile (module.js:652:30)\n at Object.Module._extensions..js (module.js:663:10)\n at Module.load (module.js:565:32)\n at tryModuleLoad (module.js:505:12)\n at Function.Module._load (module.js:497:3)\n at Function.Module.runMain (module.js:693:10)\n at startup (bootstrap_node.js:188:16)\n at bootstrap_node.js:609:3',
code: 100,
statusCode: 200 }<script src="https://unpkg.com/parse-err"></script>
<script type="text/javascript">
(function() {
var err = new Error('Oops!');
err.name = 'BeepBoop';
err.statusCode = 500;
console.error(parseErr(err));
})();
</script>If you are using browserify, webpack, rollup, or another bundler, then you can follow the same usage as Node above.
-
Node: v6.x+
-
Browsers (see .browserslistrc):
npx browserslist
and_chr 107 and_ff 106 and_qq 13.1 and_uc 13.4 android 107 chrome 107 chrome 106 chrome 105 edge 107 edge 106 edge 105 firefox 107 firefox 106 firefox 105 firefox 102 ios_saf 16.1 ios_saf 16.0 ios_saf 15.6 ios_saf 15.5 ios_saf 14.5-14.8 kaios 2.5 op_mini all op_mob 72 opera 92 opera 91 safari 16.1 safari 16.0 safari 15.6 samsung 19.0 samsung 18.0
| Name | Website |
|---|---|
| Nick Baugh | http://niftylettuce.com/ |