UNPKG

@onesy/utils

Version:
59 lines (58 loc) 1.95 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const is_1 = __importDefault(require("./is")); const resolve = (value) => { if (value === undefined) return 'undefined'; if (value instanceof Function || value instanceof Object) return value.toString(); return value; }; const clean = (value) => { if ((0, is_1.default)('string', value)) return value.replace(/(\s|\r|\n)+/, ' '); return value; }; const serializeValue = (value_, method) => { let value = method(value_); // Ref circular value if (value === undefined) return ''; // Is object-like make into an object try { if ((0, is_1.default)('object-like', value) && (0, is_1.default)('not-array-object', value) && value !== null) value = Object.assign({}, value); } catch (error) { } if ((0, is_1.default)('object', value)) return `{${Object.keys(value) .sort() .map(key => `"${key}":${serializeValue(value[key], method)}`) .filter(item => item.slice(-1) !== ':') .join(',')}}`; if ((0, is_1.default)('array', value)) return `[${value .map((value__) => serializeValue(value__, method)) .filter(Boolean) .join(',')}]`; if ((0, is_1.default)('string', value)) return `"${value}"`; return clean(JSON.stringify(resolve(value))); }; const serialize = (value) => { const values = new WeakSet(); const getValue = (value_) => { if (typeof value_ === 'object' && value_ !== null) { if (values.has(value_)) return; values.add(value_); } return value_; }; return serializeValue(value, getValue); }; exports.default = serialize;