json-joy
Version:
Collection of libraries for building collaborative editing apps.
33 lines (32 loc) • 925 B
JavaScript
/**
* @todo Rename to `toLine`?
*/
export const stringify = (value, spacing = ' ') => {
switch (value) {
case null:
return '!n';
case undefined:
return '!u';
case true:
return '!t';
case false:
return '!f';
}
if (Array.isArray(value))
return `[${spacing}${value.map((v) => stringify(v, spacing)).join(',' + spacing)}${spacing}]`;
if (value instanceof Uint8Array)
return `${value}`;
switch (typeof value) {
case 'number':
return `${value}`;
case 'string':
return JSON.stringify(value);
case 'object': {
const keys = Object.keys(value);
return `{${spacing}${keys
.map((k) => `${k}${spacing}=${spacing}${stringify(value[k], spacing)}`)
.join(',' + spacing)}${spacing}}`;
}
}
return '?';
};