@dipscope/type-manager
Version:
Transform JSON strings or plain objects into JS class instances.
251 lines • 11.4 kB
JavaScript
var SerializerContext = (function () {
function SerializerContext($, referenceMap, referenceCallbackMap, parentSerializerContext, jsonPathKey, typeState, genericMetadatas, propertyState, referenceValueSetter) {
this.$ = $;
this.referenceMap = referenceMap,
this.referenceCallbackMap = referenceCallbackMap;
this.parentSerializerContext = parentSerializerContext;
this.jsonPathKey = jsonPathKey;
this.typeState = typeState;
this.genericMetadatas = genericMetadatas;
this.propertyState = propertyState;
this.referenceValueSetter = referenceValueSetter;
return;
}
Object.defineProperty(SerializerContext.prototype, "jsonPath", {
get: function () {
var jsonPathKey = this.jsonPathKey;
var parentSerializerContext = this.parentSerializerContext;
if (parentSerializerContext === undefined) {
return "".concat(jsonPathKey);
}
if (typeof jsonPathKey === 'number') {
return "".concat(parentSerializerContext.jsonPath, "[").concat(jsonPathKey, "]");
}
return "".concat(parentSerializerContext.jsonPath, "['").concat(jsonPathKey, "']");
},
enumerable: false,
configurable: true
});
Object.defineProperty(SerializerContext.prototype, "serializedNullValue", {
get: function () {
if (this.preserveNull) {
return null;
}
return this.serializedDefaultValue;
},
enumerable: false,
configurable: true
});
Object.defineProperty(SerializerContext.prototype, "serializedDefaultValue", {
get: function () {
var _a, _b;
if (this.useDefaultValue) {
return (_b = (_a = this.propertyState) === null || _a === void 0 ? void 0 : _a.serializedDefaultValueResolver()) !== null && _b !== void 0 ? _b : this.typeState.serializedDefaultValueResolver();
}
return undefined;
},
enumerable: false,
configurable: true
});
Object.defineProperty(SerializerContext.prototype, "deserializedNullValue", {
get: function () {
if (this.preserveNull) {
return null;
}
return this.deserializedDefaultValue;
},
enumerable: false,
configurable: true
});
Object.defineProperty(SerializerContext.prototype, "deserializedDefaultValue", {
get: function () {
var _a, _b;
if (this.useDefaultValue) {
return (_b = (_a = this.propertyState) === null || _a === void 0 ? void 0 : _a.deserializedDefaultValueResolver()) !== null && _b !== void 0 ? _b : this.typeState.deserializedDefaultValueResolver();
}
return undefined;
},
enumerable: false,
configurable: true
});
Object.defineProperty(SerializerContext.prototype, "discriminant", {
get: function () {
return this.typeState.discriminant;
},
enumerable: false,
configurable: true
});
Object.defineProperty(SerializerContext.prototype, "discriminator", {
get: function () {
return this.typeState.discriminator;
},
enumerable: false,
configurable: true
});
Object.defineProperty(SerializerContext.prototype, "factory", {
get: function () {
return this.typeState.factory;
},
enumerable: false,
configurable: true
});
Object.defineProperty(SerializerContext.prototype, "injector", {
get: function () {
return this.typeState.injector;
},
enumerable: false,
configurable: true
});
Object.defineProperty(SerializerContext.prototype, "logger", {
get: function () {
return this.typeState.logger;
},
enumerable: false,
configurable: true
});
Object.defineProperty(SerializerContext.prototype, "polymorphic", {
get: function () {
return this.typeState.polymorphic;
},
enumerable: false,
configurable: true
});
Object.defineProperty(SerializerContext.prototype, "preserveDiscriminator", {
get: function () {
return this.typeState.preserveDiscriminator;
},
enumerable: false,
configurable: true
});
Object.defineProperty(SerializerContext.prototype, "referenceHandler", {
get: function () {
var _a, _b;
return (_b = (_a = this.propertyState) === null || _a === void 0 ? void 0 : _a.referenceHandler) !== null && _b !== void 0 ? _b : this.typeState.referenceHandler;
},
enumerable: false,
configurable: true
});
Object.defineProperty(SerializerContext.prototype, "serializer", {
get: function () {
var _a, _b;
return (_b = (_a = this.propertyState) === null || _a === void 0 ? void 0 : _a.serializer) !== null && _b !== void 0 ? _b : this.typeState.serializer;
},
enumerable: false,
configurable: true
});
Object.defineProperty(SerializerContext.prototype, "typeMetadata", {
get: function () {
return this.typeState.typeMetadata;
},
enumerable: false,
configurable: true
});
Object.defineProperty(SerializerContext.prototype, "preserveNull", {
get: function () {
var _a, _b;
return (_b = (_a = this.propertyState) === null || _a === void 0 ? void 0 : _a.preserveNull) !== null && _b !== void 0 ? _b : this.typeState.preserveNull;
},
enumerable: false,
configurable: true
});
Object.defineProperty(SerializerContext.prototype, "useDefaultValue", {
get: function () {
var _a, _b;
return (_b = (_a = this.propertyState) === null || _a === void 0 ? void 0 : _a.useDefaultValue) !== null && _b !== void 0 ? _b : this.typeState.useDefaultValue;
},
enumerable: false,
configurable: true
});
Object.defineProperty(SerializerContext.prototype, "useImplicitConversion", {
get: function () {
var _a, _b;
return (_b = (_a = this.propertyState) === null || _a === void 0 ? void 0 : _a.useImplicitConversion) !== null && _b !== void 0 ? _b : this.typeState.useImplicitConversion;
},
enumerable: false,
configurable: true
});
SerializerContext.prototype.serialize = function (x) {
return this.serializer.serialize(x, this);
};
SerializerContext.prototype.deserialize = function (x) {
return this.serializer.deserialize(x, this);
};
SerializerContext.prototype.defineReference = function (referenceKey, referenceValueGetter) {
return this.referenceHandler.define(this, referenceKey, referenceValueGetter);
};
SerializerContext.prototype.restoreReference = function (referenceKey, referenceValueGetter) {
return this.referenceHandler.restore(this, referenceKey, referenceValueGetter);
};
SerializerContext.prototype.registerReferenceCallback = function (referenceKey) {
var _this = this;
var referenceValueSetter = this.referenceValueSetter;
if (referenceValueSetter === undefined) {
return;
}
var jsonPathKey = this.jsonPathKey;
this.pushReferenceCallback(referenceKey, function () {
var referenceValue = _this.referenceMap.get(referenceKey);
referenceValueSetter(referenceValue, jsonPathKey);
});
return;
};
SerializerContext.prototype.pushReferenceCallback = function (referenceKey, referenceCallback) {
var referenceCallbacks = this.referenceCallbackMap.get(referenceKey);
if (referenceCallbacks === undefined) {
referenceCallbacks = new Array();
this.referenceCallbackMap.set(referenceKey, referenceCallbacks);
}
referenceCallbacks.push(referenceCallback);
return;
};
SerializerContext.prototype.resolveReferenceCallbacks = function (referenceKey) {
var referenceCallbacks = this.referenceCallbackMap.get(referenceKey);
if (referenceCallbacks === undefined) {
return;
}
for (var i = 0; i < referenceCallbacks.length; i++) {
referenceCallbacks[i]();
}
return;
};
SerializerContext.prototype.defineChildSerializerContext = function () {
return new SerializerContext(this.$, this.referenceMap, this.referenceCallbackMap, this, this.jsonPathKey, this.typeState, this.genericMetadatas, this.propertyState, this.referenceValueSetter);
};
SerializerContext.prototype.defineGenericSerializerContext = function (genericIndex) {
var genericMetadata = this.genericMetadatas[genericIndex];
if (genericMetadata === undefined) {
throw new Error("".concat(this.jsonPath, ": cannot define generic metadata for index ").concat(genericIndex, ". This is usually caused by invalid configuration."));
}
var typeMetadata = genericMetadata[0];
var genericMetadatas = genericMetadata[1];
return new SerializerContext(this.$, this.referenceMap, this.referenceCallbackMap, this.parentSerializerContext, this.jsonPath, typeMetadata.typeState, genericMetadatas, undefined, this.referenceValueSetter);
};
SerializerContext.prototype.definePolymorphicSerializerContext = function (x) {
if (typeof x === 'function') {
return this.definePolymorphicSerializerContextByTypeFn(x);
}
return this.definePolymorphicSerializerContextByDiscriminant(x);
};
SerializerContext.prototype.definePolymorphicSerializerContextByTypeFn = function (x) {
var typeFn = x;
var typeMetadata = this.typeState.typeMetadataMap.get(typeFn);
if (typeMetadata === undefined) {
throw new Error("".concat(this.jsonPath, ": cannot define discriminant of polymorphic type. This is usually caused by invalid configuration."));
}
return new SerializerContext(this.$, this.referenceMap, this.referenceCallbackMap, this.parentSerializerContext, this.jsonPathKey, typeMetadata.typeState, this.genericMetadatas, this.propertyState, this.referenceValueSetter);
};
SerializerContext.prototype.definePolymorphicSerializerContextByDiscriminant = function (x) {
var record = x;
var childTypeMetadatas = this.typeState.childTypeMetadatas;
for (var i = 0; i < childTypeMetadatas.length; i++) {
var childTypeState = childTypeMetadatas[i].typeState;
if (record[childTypeState.discriminator] === childTypeState.discriminant) {
return new SerializerContext(this.$, this.referenceMap, this.referenceCallbackMap, this.parentSerializerContext, this.jsonPathKey, childTypeState, this.genericMetadatas, this.propertyState, this.referenceValueSetter);
}
}
throw new Error("".concat(this.jsonPath, ": cannot define discriminant of polymorphic type. This is usually caused by invalid configuration."));
};
return SerializerContext;
}());
export { SerializerContext };
//# sourceMappingURL=serializer-context.js.map