@deepkit/bson
Version:
Deepkit BSON parser
41 lines • 2.02 kB
JavaScript
;
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