UNPKG

@dipscope/type-manager

Version:

Transform JSON strings or plain objects into JS class instances.

55 lines 2.51 kB
export class SetSerializer { serialize(x, serializerContext) { if (x === undefined) { return serializerContext.serializedDefaultValue; } if (x === null) { return serializerContext.serializedNullValue; } if (x instanceof Set) { return serializerContext.defineReference(x, () => { const set = x; const array = new Array(set.size); const genericSerializerContext = serializerContext.defineGenericSerializerContext(0); const valueSerializerContext = genericSerializerContext.defineChildSerializerContext(); const serializer = valueSerializerContext.serializer; valueSerializerContext.referenceValueSetter = (v, k) => array[k] = v; let i = -1; for (const v of set) { i++; valueSerializerContext.jsonPathKey = i; array[i] = serializer.serialize(v, valueSerializerContext); } return array; }); } serializerContext.logger.error('SetSerializer', `${serializerContext.jsonPath}: cannot serialize value as set.`, 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 array = x; const set = new Set(); const genericSerializerContext = serializerContext.defineGenericSerializerContext(0); const valueSerializerContext = genericSerializerContext.defineChildSerializerContext(); const serializer = valueSerializerContext.serializer; valueSerializerContext.referenceValueSetter = v => set.add(v); for (let i = 0; i < array.length; i++) { valueSerializerContext.jsonPathKey = i; set.add(serializer.deserialize(array[i], valueSerializerContext)); } return set; }); } serializerContext.logger.error('SetSerializer', `${serializerContext.jsonPath}: cannot deserialize value as set.`, x); return undefined; } } //# sourceMappingURL=set-serializer.js.map