@onesy/utils
Version:
59 lines (58 loc) • 1.95 kB
JavaScript
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;
;