UNPKG

@deepkit/bson

Version:
92 lines 3.09 kB
"use strict"; /* * 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. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.findValueInObject = exports.seekElementSize = void 0; const utils_1 = require("./utils"); const model_1 = require("./model"); function seekElementSize(elementType, parser) { switch (elementType) { case utils_1.BSON_DATA_STRING: { return parser.seek(parser.eatUInt32()); } case utils_1.BSON_DATA_OID: { return parser.seek(12); } case utils_1.BSON_DATA_INT: { return parser.seek(4); } case utils_1.BSON_DATA_NUMBER: { return parser.seek(8); } case utils_1.BSON_DATA_DATE: { return parser.seek(8); } case utils_1.BSON_DATA_BOOLEAN: { return parser.seek(1); } case utils_1.BSON_DATA_OBJECT: { return parser.seek(parser.peekUInt32()); } case utils_1.BSON_DATA_ARRAY: { return parser.seek(parser.peekUInt32()); } case utils_1.BSON_DATA_NULL: { return; } case utils_1.BSON_DATA_LONG: case utils_1.BSON_DATA_TIMESTAMP: { return parser.seek(8); } case utils_1.BSON_DATA_UNDEFINED: return; case utils_1.BSON_DATA_BINARY: let size = parser.eatUInt32(); const subType = parser.eatByte(); if (subType === utils_1.BSON_BINARY_SUBTYPE_BYTE_ARRAY) { size = parser.eatUInt32(); } return parser.seek(size); case utils_1.BSON_DATA_DECIMAL128: case utils_1.BSON_DATA_REGEXP: case utils_1.BSON_DATA_SYMBOL: case utils_1.BSON_DATA_MIN_KEY: case utils_1.BSON_DATA_MAX_KEY: case utils_1.BSON_DATA_CODE: case utils_1.BSON_DATA_CODE_W_SCOPE: case utils_1.BSON_DATA_DBPOINTER: throw new model_1.BSONError('Unsupported BSON type ' + elementType); default: throw new model_1.BSONError('Unknown BSON type ' + elementType); } } exports.seekElementSize = seekElementSize; 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; } exports.findValueInObject = findValueInObject; //# sourceMappingURL=continuation.js.map