@builder.io/mitosis
Version:
Write components once, run everywhere. Compiles to Vue, React, Solid, and Liquid. Import code from Figma and Builder.io
51 lines (50 loc) • 1.45 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.stableJSONserialize = void 0;
/**
* Same as JSON.stringify, but sorts keys ensuring that the output is stable across runs.
* @param obj
* @returns JSON serialized string
*/
function stableJSONserialize(obj) {
const output = [];
_serialize(output, obj);
return output.join('');
}
exports.stableJSONserialize = stableJSONserialize;
function _serialize(output, obj) {
if (obj == null) {
output.push('null');
}
else if (typeof obj === 'object') {
if (Array.isArray(obj)) {
output.push('[');
let sep = '';
for (let i = 0; i < obj.length; i++) {
output.push(sep);
_serialize(output, obj[i]);
sep = ',';
}
output.push(']');
}
else {
const keys = Object.keys(obj).sort();
output.push('{');
let sep = '';
for (const key of keys) {
const value = obj[key];
if (value !== undefined) {
output.push(sep);
output.push(JSON.stringify(key));
output.push(':');
_serialize(output, value);
sep = ',';
}
}
output.push('}');
}
}
else {
output.push(JSON.stringify(obj));
}
}
;