123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- 'use strict';
- // Make a value ready for JSON.stringify() / process.send()
- module.exports = function (value) {
- if (typeof value === 'object') {
- return destroyCircular(value, []);
- }
- // People sometimes throw things besides Error objects, so...
- if (typeof value === 'function') {
- // JSON.stringify discards functions. We do to, unless a function is thrown directly.
- return '[Function: ' + (value.name || 'anonymous') + ']';
- }
- return value;
- };
- // https://www.npmjs.com/package/destroy-circular
- function destroyCircular(from, seen) {
- var to;
- if (Array.isArray(from)) {
- to = [];
- } else {
- to = {};
- }
- seen.push(from);
- Object.keys(from).forEach(function (key) {
- var value = from[key];
- if (typeof value === 'function') {
- return;
- }
- if (!value || typeof value !== 'object') {
- to[key] = value;
- return;
- }
- if (seen.indexOf(from[key]) === -1) {
- to[key] = destroyCircular(from[key], seen.slice(0));
- return;
- }
- to[key] = '[Circular]';
- });
- if (typeof from.name === 'string') {
- to.name = from.name;
- }
- if (typeof from.message === 'string') {
- to.message = from.message;
- }
- if (typeof from.stack === 'string') {
- to.stack = from.stack;
- }
- return to;
- }
|