@dipscope/type-manager
Version:
Transform JSON strings or plain objects into JS class instances.
53 lines • 2.6 kB
JavaScript
export class ArraySerializer {
serialize(x, serializerContext) {
if (x === undefined) {
return serializerContext.serializedDefaultValue;
}
if (x === null) {
return serializerContext.serializedNullValue;
}
if (Array.isArray(x)) {
return serializerContext.defineReference(x, () => {
const arrayInput = x;
const arrayOutput = new Array(x.length);
const genericSerializerContext = serializerContext.defineGenericSerializerContext(0);
const valueSerializerContext = genericSerializerContext.defineChildSerializerContext();
const serializer = valueSerializerContext.serializer;
valueSerializerContext.referenceValueSetter = (v, k) => arrayOutput[k] = v;
for (let i = 0; i < arrayInput.length; i++) {
valueSerializerContext.jsonPathKey = i;
arrayOutput[i] = serializer.serialize(arrayInput[i], valueSerializerContext);
}
return arrayOutput;
});
}
serializerContext.logger.error('ArraySerializer', `${serializerContext.jsonPath}: cannot serialize value as array.`, x);
return undefined;
}
deserialize(x, serializerContext) {
if (x === undefined) {
return serializerContext.deserializedDefaultValue;
}
if (x === null) {
return serializerContext.deserializedNullValue;
}
if (Array.isArray(x)) {
return serializerContext.restoreReference(x, () => {
const arrayInput = x;
const arrayOutput = new Array(x.length);
const genericSerializerContext = serializerContext.defineGenericSerializerContext(0);
const valueSerializerContext = genericSerializerContext.defineChildSerializerContext();
const serializer = valueSerializerContext.serializer;
valueSerializerContext.referenceValueSetter = (v, k) => arrayOutput[k] = v;
for (let i = 0; i < arrayInput.length; i++) {
valueSerializerContext.jsonPathKey = i;
arrayOutput[i] = serializer.deserialize(arrayInput[i], valueSerializerContext);
}
return arrayOutput;
});
}
serializerContext.logger.error('ArraySerializer', `${serializerContext.jsonPath}: cannot deserialize value as array.`, x);
return undefined;
}
}
//# sourceMappingURL=array-serializer.js.map