UNPKG

@deepkit/bson

Version:
41 lines 2.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.deserializeBSON = exports.getBSONDeserializer = void 0; const type_1 = require("@deepkit/type"); const core_1 = require("@deepkit/core"); const continuation_1 = require("./continuation"); const bson_serializer_1 = require("./bson-serializer"); const bson_parser_1 = require("./bson-parser"); function createBSONDeserializer(type, serializer, namingStrategy = new type_1.NamingStrategy(), path = '', jitStack = new type_1.JitStack()) { const compiler = new core_1.CompilerContext(); compiler.context.set('seekElementSize', continuation_1.seekElementSize); const state = new type_1.TemplateState('result', '', compiler, serializer.bsonDeserializeRegistry, namingStrategy, jitStack, [path]); state.target = 'deserialize'; const code = ` let result; state = state || {}; state.parser = data; ${(0, type_1.executeTemplates)(state, type)} return result; `; return compiler.build(code, 'data', 'state'); } function getBSONDeserializer(serializer = bson_serializer_1.bsonBinarySerializer, receiveType) { const type = (0, type_1.resolveReceiveType)(receiveType); const jit = (0, type_1.getTypeJitContainer)(type); if (jit[serializer.deserializeId]) return jit[serializer.deserializeId]; const deserializer = createBSONDeserializer(type, bson_serializer_1.bsonBinarySerializer); jit[serializer.deserializeId] = function (bson, offset = 0) { const parser = new bson_parser_1.ParserV2(bson, offset); return deserializer(parser); }; (0, core_1.toFastProperties)(jit); return jit[serializer.deserializeId]; } exports.getBSONDeserializer = getBSONDeserializer; function deserializeBSON(data, offset, serializer = bson_serializer_1.bsonBinarySerializer, receiveType) { return getBSONDeserializer(serializer, receiveType)(data, offset); } exports.deserializeBSON = deserializeBSON; //# sourceMappingURL=bson-deserializer.js.map