@dipscope/type-manager
Version:
Transform JSON strings or plain objects into JS class instances.
35 lines • 1.49 kB
JavaScript
export class CircularReferenceHandler {
define(serializerContext, referenceKey, referenceValueGetter) {
const referenceMap = serializerContext.referenceMap;
const referenceValue = referenceMap.get(referenceKey);
if (referenceValue === undefined) {
referenceMap.set(referenceKey, referenceKey);
const value = referenceValueGetter();
referenceMap.set(referenceKey, value);
serializerContext.resolveReferenceCallbacks(referenceKey);
return value;
}
if (referenceValue === referenceKey) {
serializerContext.registerReferenceCallback(referenceKey);
return undefined;
}
return referenceValue;
}
restore(serializerContext, referenceKey, referenceValueGetter) {
const referenceMap = serializerContext.referenceMap;
const referenceValue = referenceMap.get(referenceKey);
if (referenceValue === undefined) {
referenceMap.set(referenceKey, referenceKey);
const value = referenceValueGetter();
referenceMap.set(referenceKey, value);
serializerContext.resolveReferenceCallbacks(referenceKey);
return value;
}
if (referenceValue === referenceKey) {
serializerContext.registerReferenceCallback(referenceKey);
return undefined;
}
return referenceValue;
}
}
//# sourceMappingURL=circular-reference-handler.js.map