UNPKG

@deepkit/bson

Version:

Deepkit BSON parser

96 lines 3.53 kB
"use strict"; 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