2020-10-26 02:32:04 +03:00
|
|
|
import jsan from 'jsan';
|
|
|
|
import { DATA_TYPE_KEY, DATA_REF_KEY } from '../constants/dataTypes';
|
|
|
|
|
|
|
|
function replacer(key: string, value: unknown) {
|
|
|
|
if (typeof value === 'object' && value !== null && DATA_TYPE_KEY in value) {
|
|
|
|
const __serializedType__ = (value as any)[DATA_TYPE_KEY];
|
|
|
|
const clone = { ...value };
|
|
|
|
delete (clone as any)[DATA_TYPE_KEY]; // eslint-disable-line no-param-reassign
|
|
|
|
const r = { data: clone, __serializedType__ };
|
|
|
|
if (DATA_REF_KEY in value)
|
|
|
|
(r as any).__serializedRef__ = (clone as any)[DATA_REF_KEY];
|
|
|
|
return r;
|
|
|
|
}
|
|
|
|
return value;
|
|
|
|
}
|
|
|
|
|
|
|
|
export default function stringifyJSON(
|
|
|
|
data: unknown,
|
|
|
|
serialize: boolean | undefined
|
|
|
|
) {
|
|
|
|
return serialize
|
2021-06-18 06:56:36 +03:00
|
|
|
? jsan.stringify(data, replacer, null as unknown as undefined, true)
|
2020-10-26 02:32:04 +03:00
|
|
|
: jsan.stringify(data);
|
|
|
|
}
|