1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- import { ClassRegistry } from './class-registry.js';
- import { Registry } from './registry.js';
- import { CustomTransformerRegistry, } from './custom-transformer-registry.js';
- import { applyReferentialEqualityAnnotations, applyValueAnnotations, generateReferentialEqualityAnnotations, walker, } from './plainer.js';
- import { copy } from 'copy-anything';
- export default class SuperJSON {
- /**
- * @param dedupeReferentialEqualities If true, SuperJSON will make sure only one instance of referentially equal objects are serialized and the rest are replaced with `null`.
- */
- constructor({ dedupe = false, } = {}) {
- this.classRegistry = new ClassRegistry();
- this.symbolRegistry = new Registry(s => s.description ?? '');
- this.customTransformerRegistry = new CustomTransformerRegistry();
- this.allowedErrorProps = [];
- this.dedupe = dedupe;
- }
- serialize(object) {
- const identities = new Map();
- const output = walker(object, identities, this, this.dedupe);
- const res = {
- json: output.transformedValue,
- };
- if (output.annotations) {
- res.meta = {
- ...res.meta,
- values: output.annotations,
- };
- }
- const equalityAnnotations = generateReferentialEqualityAnnotations(identities, this.dedupe);
- if (equalityAnnotations) {
- res.meta = {
- ...res.meta,
- referentialEqualities: equalityAnnotations,
- };
- }
- return res;
- }
- deserialize(payload) {
- const { json, meta } = payload;
- let result = copy(json);
- if (meta?.values) {
- result = applyValueAnnotations(result, meta.values, this);
- }
- if (meta?.referentialEqualities) {
- result = applyReferentialEqualityAnnotations(result, meta.referentialEqualities);
- }
- return result;
- }
- stringify(object) {
- return JSON.stringify(this.serialize(object));
- }
- parse(string) {
- return this.deserialize(JSON.parse(string));
- }
- registerClass(v, options) {
- this.classRegistry.register(v, options);
- }
- registerSymbol(v, identifier) {
- this.symbolRegistry.register(v, identifier);
- }
- registerCustom(transformer, name) {
- this.customTransformerRegistry.register({
- name,
- ...transformer,
- });
- }
- allowErrorProps(...props) {
- this.allowedErrorProps.push(...props);
- }
- }
- SuperJSON.defaultInstance = new SuperJSON();
- SuperJSON.serialize = SuperJSON.defaultInstance.serialize.bind(SuperJSON.defaultInstance);
- SuperJSON.deserialize = SuperJSON.defaultInstance.deserialize.bind(SuperJSON.defaultInstance);
- SuperJSON.stringify = SuperJSON.defaultInstance.stringify.bind(SuperJSON.defaultInstance);
- SuperJSON.parse = SuperJSON.defaultInstance.parse.bind(SuperJSON.defaultInstance);
- SuperJSON.registerClass = SuperJSON.defaultInstance.registerClass.bind(SuperJSON.defaultInstance);
- SuperJSON.registerSymbol = SuperJSON.defaultInstance.registerSymbol.bind(SuperJSON.defaultInstance);
- SuperJSON.registerCustom = SuperJSON.defaultInstance.registerCustom.bind(SuperJSON.defaultInstance);
- SuperJSON.allowErrorProps = SuperJSON.defaultInstance.allowErrorProps.bind(SuperJSON.defaultInstance);
- export { SuperJSON };
- export const serialize = SuperJSON.serialize;
- export const deserialize = SuperJSON.deserialize;
- export const stringify = SuperJSON.stringify;
- export const parse = SuperJSON.parse;
- export const registerClass = SuperJSON.registerClass;
- export const registerCustom = SuperJSON.registerCustom;
- export const registerSymbol = SuperJSON.registerSymbol;
- export const allowErrorProps = SuperJSON.allowErrorProps;
- //# sourceMappingURL=index.js.map
|