@deepkit/bson
Version:
Deepkit BSON parser
96 lines • 3.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.seekElementSize = seekElementSize;
exports.findValueInObject = findValueInObject;
/*
* Deepkit Framework
* Copyright (C) 2021 Deepkit UG, Marc J. Schmidt
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the MIT License.
*
* You should have received a copy of the MIT License along with this program.
*/
const bson_parser_js_1 = require("./bson-parser.js");
/*@ts-ignore*/
var { __ΩBSONType } = require('./utils.js');
const utils_js_1 = require("./utils.js");
const model_js_1 = require("./model.js");
function seekElementSize(elementType, parser) {
switch (elementType) {
case utils_js_1.BSON_DATA_STRING: {
return parser.seek(parser.eatUInt32());
}
case utils_js_1.BSON_DATA_OID: {
return parser.seek(12);
}
case utils_js_1.BSON_DATA_INT: {
return parser.seek(4);
}
case utils_js_1.BSON_DATA_NUMBER: {
return parser.seek(8);
}
case utils_js_1.BSON_DATA_DATE: {
return parser.seek(8);
}
case utils_js_1.BSON_DATA_BOOLEAN: {
return parser.seek(1);
}
case utils_js_1.BSON_DATA_OBJECT: {
return parser.seek(parser.peekUInt32());
}
case utils_js_1.BSON_DATA_ARRAY: {
return parser.seek(parser.peekUInt32());
}
case utils_js_1.BSON_DATA_NULL: {
return;
}
case utils_js_1.BSON_DATA_LONG:
case utils_js_1.BSON_DATA_TIMESTAMP: {
return parser.seek(8);
}
case utils_js_1.BSON_DATA_UNDEFINED:
return;
case utils_js_1.BSON_DATA_BINARY:
let size = parser.eatUInt32();
const subType = parser.eatByte();
if (subType === utils_js_1.BSON_BINARY_SUBTYPE_BYTE_ARRAY) {
size = parser.eatUInt32();
}
return parser.seek(size);
case utils_js_1.BSON_DATA_DECIMAL128:
case utils_js_1.BSON_DATA_REGEXP:
case utils_js_1.BSON_DATA_SYMBOL:
case utils_js_1.BSON_DATA_MIN_KEY:
case utils_js_1.BSON_DATA_MAX_KEY:
case utils_js_1.BSON_DATA_CODE:
case utils_js_1.BSON_DATA_CODE_W_SCOPE:
case utils_js_1.BSON_DATA_DBPOINTER:
throw new model_js_1.BSONError('Unsupported BSON type ' + elementType);
default:
throw new model_js_1.BSONError('Unknown BSON type ' + elementType);
}
}
seekElementSize.__type = ['elementType', () => bson_parser_js_1.BaseParser, 'parser', 'seekElementSize', 'P\'2!P7"2#"/$'];
function findValueInObject(parser, checker) {
const offset = parser.offset;
const end = parser.eatUInt32() + parser.offset;
while (parser.offset < end) {
const elementType = parser.eatByte();
if (elementType === 0)
break;
const name = parser.eatObjectPropertyName();
if (checker(elementType, name)) {
const v = parser.parse(elementType);
parser.offset = offset;
return v;
}
else {
seekElementSize(elementType, parser);
}
}
parser.offset = offset;
return undefined;
}
findValueInObject.__type = [() => bson_parser_js_1.BaseParser, 'parser', () => __ΩBSONType, 'elementType', 'name', '', 'checker', 'findValueInObject', 'PP7!2"Pn#2$&2%)/&2\'"/('];
//# sourceMappingURL=continuation.js.map