UNPKG

@onesy/utils

Version:
45 lines (34 loc) 1.4 kB
import is from './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 (is('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 (is('object-like', value) && is('not-array-object', value) && value !== null) value = { ...value }; } catch (error) {} if (is('object', value)) return "{".concat(Object.keys(value).sort().map(key => "\"".concat(key, "\":").concat(serializeValue(value[key], method))).filter(item => item.slice(-1) !== ':').join(','), "}"); if (is('array', value)) return "[".concat(value.map(value__ => serializeValue(value__, method)).filter(Boolean).join(','), "]"); if (is('string', value)) return "\"".concat(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); }; export default serialize;