UNPKG

@dipscope/type-manager

Version:

Transform JSON strings or plain objects into JS class instances.

53 lines 2.6 kB
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