UNPKG

@deepkit/bson

Version:
36 lines 1.76 kB
import { executeTemplates, getTypeJitContainer, JitStack, NamingStrategy, resolveReceiveType, TemplateState } from '@deepkit/type'; import { CompilerContext, toFastProperties } from '@deepkit/core'; import { seekElementSize } from './continuation'; import { bsonBinarySerializer } from './bson-serializer'; import { ParserV2 } from './bson-parser'; function createBSONDeserializer(type, serializer, namingStrategy = new NamingStrategy(), path = '', jitStack = new JitStack()) { const compiler = new CompilerContext(); compiler.context.set('seekElementSize', seekElementSize); const state = new TemplateState('result', '', compiler, serializer.bsonDeserializeRegistry, namingStrategy, jitStack, [path]); state.target = 'deserialize'; const code = ` let result; state = state || {}; state.parser = data; ${executeTemplates(state, type)} return result; `; return compiler.build(code, 'data', 'state'); } export function getBSONDeserializer(serializer = bsonBinarySerializer, receiveType) { const type = resolveReceiveType(receiveType); const jit = getTypeJitContainer(type); if (jit[serializer.deserializeId]) return jit[serializer.deserializeId]; const deserializer = createBSONDeserializer(type, bsonBinarySerializer); jit[serializer.deserializeId] = function (bson, offset = 0) { const parser = new ParserV2(bson, offset); return deserializer(parser); }; toFastProperties(jit); return jit[serializer.deserializeId]; } export function deserializeBSON(data, offset, serializer = bsonBinarySerializer, receiveType) { return getBSONDeserializer(serializer, receiveType)(data, offset); } //# sourceMappingURL=bson-deserializer.js.map