/node_modules/mongoose/node_modules/bson/lib/bson/bson.js
https://gitlab.com/junxianlim/twitter_clone_node · JavaScript · 321 lines · 93 code · 17 blank · 211 comment · 4 complexity · b5cbb7788f219c835457d3cac5cc3f4c MD5 · raw file
- // "use strict"
- var writeIEEE754 = require('./float_parser').writeIEEE754,
- readIEEE754 = require('./float_parser').readIEEE754,
- Long = require('./long').Long,
- Double = require('./double').Double,
- Timestamp = require('./timestamp').Timestamp,
- ObjectID = require('./objectid').ObjectID,
- BSONRegExp = require('./regexp').BSONRegExp,
- Symbol = require('./symbol').Symbol,
- Code = require('./code').Code,
- MinKey = require('./min_key').MinKey,
- MaxKey = require('./max_key').MaxKey,
- DBRef = require('./db_ref').DBRef,
- Binary = require('./binary').Binary;
- // Parts of the parser
- var deserialize = require('./parser/deserializer'),
- serializer = require('./parser/serializer'),
- calculateObjectSize = require('./parser/calculate_size');
- /**
- * @ignore
- * @api private
- */
- // Max Size
- var MAXSIZE = (1024*1024*17);
- // Max Document Buffer size
- var buffer = new Buffer(MAXSIZE);
- var BSON = function() {
- }
- /**
- * Serialize a Javascript object.
- *
- * @param {Object} object the Javascript object to serialize.
- * @param {Boolean} checkKeys the serializer will check if keys are valid.
- * @param {Boolean} asBuffer return the serialized object as a Buffer object **(ignore)**.
- * @param {Boolean} serializeFunctions serialize the javascript functions **(default:false)**.
- * @return {Buffer} returns the Buffer object containing the serialized object.
- * @api public
- */
- BSON.prototype.serialize = function serialize(object, checkKeys, asBuffer, serializeFunctions, index) {
- // Attempt to serialize
- var serializationIndex = serializer(buffer, object, checkKeys, index || 0, 0, serializeFunctions);
- // Create the final buffer
- var finishedBuffer = new Buffer(serializationIndex);
- // Copy into the finished buffer
- buffer.copy(finishedBuffer, 0, 0, finishedBuffer.length);
- // Return the buffer
- return finishedBuffer;
- }
- /**
- * Serialize a Javascript object using a predefined Buffer and index into the buffer, useful when pre-allocating the space for serialization.
- *
- * @param {Object} object the Javascript object to serialize.
- * @param {Boolean} checkKeys the serializer will check if keys are valid.
- * @param {Buffer} buffer the Buffer you pre-allocated to store the serialized BSON object.
- * @param {Number} index the index in the buffer where we wish to start serializing into.
- * @param {Boolean} serializeFunctions serialize the javascript functions **(default:false)**.
- * @return {Number} returns the new write index in the Buffer.
- * @api public
- */
- BSON.prototype.serializeWithBufferAndIndex = function(object, checkKeys, finalBuffer, startIndex, serializeFunctions) {
- // Attempt to serialize
- var serializationIndex = serializer(buffer, object, checkKeys, startIndex || 0, 0, serializeFunctions);
- buffer.copy(finalBuffer, startIndex, 0, serializationIndex);
- // Return the index
- return startIndex + serializationIndex - 1;
- }
- /**
- * Deserialize data as BSON.
- *
- * Options
- * - **evalFunctions** {Boolean, default:false}, evaluate functions in the BSON document scoped to the object deserialized.
- * - **cacheFunctions** {Boolean, default:false}, cache evaluated functions for reuse.
- * - **cacheFunctionsCrc32** {Boolean, default:false}, use a crc32 code for caching, otherwise use the string of the function.
- * - **promoteLongs** {Boolean, default:true}, when deserializing a Long will fit it into a Number if it's smaller than 53 bits
- *
- * @param {Buffer} buffer the buffer containing the serialized set of BSON documents.
- * @param {Object} [options] additional options used for the deserialization.
- * @param {Boolean} [isArray] ignore used for recursive parsing.
- * @return {Object} returns the deserialized Javascript Object.
- * @api public
- */
- BSON.prototype.deserialize = function(data, options) {
- return deserialize(data, options);
- }
- /**
- * Calculate the bson size for a passed in Javascript object.
- *
- * @param {Object} object the Javascript object to calculate the BSON byte size for.
- * @param {Boolean} [serializeFunctions] serialize all functions in the object **(default:false)**.
- * @return {Number} returns the number of bytes the BSON object will take up.
- * @api public
- */
- BSON.prototype.calculateObjectSize = function(object, serializeFunctions) {
- return calculateObjectSize(object, serializeFunctions);
- }
- /**
- * Deserialize stream data as BSON documents.
- *
- * Options
- * - **evalFunctions** {Boolean, default:false}, evaluate functions in the BSON document scoped to the object deserialized.
- * - **cacheFunctions** {Boolean, default:false}, cache evaluated functions for reuse.
- * - **cacheFunctionsCrc32** {Boolean, default:false}, use a crc32 code for caching, otherwise use the string of the function.
- * - **promoteLongs** {Boolean, default:true}, when deserializing a Long will fit it into a Number if it's smaller than 53 bits
- *
- * @param {Buffer} data the buffer containing the serialized set of BSON documents.
- * @param {Number} startIndex the start index in the data Buffer where the deserialization is to start.
- * @param {Number} numberOfDocuments number of documents to deserialize.
- * @param {Array} documents an array where to store the deserialized documents.
- * @param {Number} docStartIndex the index in the documents array from where to start inserting documents.
- * @param {Object} [options] additional options used for the deserialization.
- * @return {Number} returns the next index in the buffer after deserialization **x** numbers of documents.
- * @api public
- */
- BSON.prototype.deserializeStream = function(data, startIndex, numberOfDocuments, documents, docStartIndex, options) {
- // if(numberOfDocuments !== documents.length) throw new Error("Number of expected results back is less than the number of documents");
- options = options != null ? options : {};
- var index = startIndex;
- // Loop over all documents
- for(var i = 0; i < numberOfDocuments; i++) {
- // Find size of the document
- var size = data[index] | data[index + 1] << 8 | data[index + 2] << 16 | data[index + 3] << 24;
- // Update options with index
- options['index'] = index;
- // Parse the document at this point
- documents[docStartIndex + i] = this.deserialize(data, options);
- // Adjust index by the document size
- index = index + size;
- }
- // Return object containing end index of parsing and list of documents
- return index;
- }
- /**
- * @ignore
- * @api private
- */
- // BSON MAX VALUES
- BSON.BSON_INT32_MAX = 0x7FFFFFFF;
- BSON.BSON_INT32_MIN = -0x80000000;
- BSON.BSON_INT64_MAX = Math.pow(2, 63) - 1;
- BSON.BSON_INT64_MIN = -Math.pow(2, 63);
- // JS MAX PRECISE VALUES
- BSON.JS_INT_MAX = 0x20000000000000; // Any integer up to 2^53 can be precisely represented by a double.
- BSON.JS_INT_MIN = -0x20000000000000; // Any integer down to -2^53 can be precisely represented by a double.
- // Internal long versions
- var JS_INT_MAX_LONG = Long.fromNumber(0x20000000000000); // Any integer up to 2^53 can be precisely represented by a double.
- var JS_INT_MIN_LONG = Long.fromNumber(-0x20000000000000); // Any integer down to -2^53 can be precisely represented by a double.
- /**
- * Number BSON Type
- *
- * @classconstant BSON_DATA_NUMBER
- **/
- BSON.BSON_DATA_NUMBER = 1;
- /**
- * String BSON Type
- *
- * @classconstant BSON_DATA_STRING
- **/
- BSON.BSON_DATA_STRING = 2;
- /**
- * Object BSON Type
- *
- * @classconstant BSON_DATA_OBJECT
- **/
- BSON.BSON_DATA_OBJECT = 3;
- /**
- * Array BSON Type
- *
- * @classconstant BSON_DATA_ARRAY
- **/
- BSON.BSON_DATA_ARRAY = 4;
- /**
- * Binary BSON Type
- *
- * @classconstant BSON_DATA_BINARY
- **/
- BSON.BSON_DATA_BINARY = 5;
- /**
- * ObjectID BSON Type
- *
- * @classconstant BSON_DATA_OID
- **/
- BSON.BSON_DATA_OID = 7;
- /**
- * Boolean BSON Type
- *
- * @classconstant BSON_DATA_BOOLEAN
- **/
- BSON.BSON_DATA_BOOLEAN = 8;
- /**
- * Date BSON Type
- *
- * @classconstant BSON_DATA_DATE
- **/
- BSON.BSON_DATA_DATE = 9;
- /**
- * null BSON Type
- *
- * @classconstant BSON_DATA_NULL
- **/
- BSON.BSON_DATA_NULL = 10;
- /**
- * RegExp BSON Type
- *
- * @classconstant BSON_DATA_REGEXP
- **/
- BSON.BSON_DATA_REGEXP = 11;
- /**
- * Code BSON Type
- *
- * @classconstant BSON_DATA_CODE
- **/
- BSON.BSON_DATA_CODE = 13;
- /**
- * Symbol BSON Type
- *
- * @classconstant BSON_DATA_SYMBOL
- **/
- BSON.BSON_DATA_SYMBOL = 14;
- /**
- * Code with Scope BSON Type
- *
- * @classconstant BSON_DATA_CODE_W_SCOPE
- **/
- BSON.BSON_DATA_CODE_W_SCOPE = 15;
- /**
- * 32 bit Integer BSON Type
- *
- * @classconstant BSON_DATA_INT
- **/
- BSON.BSON_DATA_INT = 16;
- /**
- * Timestamp BSON Type
- *
- * @classconstant BSON_DATA_TIMESTAMP
- **/
- BSON.BSON_DATA_TIMESTAMP = 17;
- /**
- * Long BSON Type
- *
- * @classconstant BSON_DATA_LONG
- **/
- BSON.BSON_DATA_LONG = 18;
- /**
- * MinKey BSON Type
- *
- * @classconstant BSON_DATA_MIN_KEY
- **/
- BSON.BSON_DATA_MIN_KEY = 0xff;
- /**
- * MaxKey BSON Type
- *
- * @classconstant BSON_DATA_MAX_KEY
- **/
- BSON.BSON_DATA_MAX_KEY = 0x7f;
- /**
- * Binary Default Type
- *
- * @classconstant BSON_BINARY_SUBTYPE_DEFAULT
- **/
- BSON.BSON_BINARY_SUBTYPE_DEFAULT = 0;
- /**
- * Binary Function Type
- *
- * @classconstant BSON_BINARY_SUBTYPE_FUNCTION
- **/
- BSON.BSON_BINARY_SUBTYPE_FUNCTION = 1;
- /**
- * Binary Byte Array Type
- *
- * @classconstant BSON_BINARY_SUBTYPE_BYTE_ARRAY
- **/
- BSON.BSON_BINARY_SUBTYPE_BYTE_ARRAY = 2;
- /**
- * Binary UUID Type
- *
- * @classconstant BSON_BINARY_SUBTYPE_UUID
- **/
- BSON.BSON_BINARY_SUBTYPE_UUID = 3;
- /**
- * Binary MD5 Type
- *
- * @classconstant BSON_BINARY_SUBTYPE_MD5
- **/
- BSON.BSON_BINARY_SUBTYPE_MD5 = 4;
- /**
- * Binary User Defined Type
- *
- * @classconstant BSON_BINARY_SUBTYPE_USER_DEFINED
- **/
- BSON.BSON_BINARY_SUBTYPE_USER_DEFINED = 128;
- // Return BSON
- module.exports = BSON;
- module.exports.Code = Code;
- module.exports.Symbol = Symbol;
- module.exports.BSON = BSON;
- module.exports.DBRef = DBRef;
- module.exports.Binary = Binary;
- module.exports.ObjectID = ObjectID;
- module.exports.Long = Long;
- module.exports.Timestamp = Timestamp;
- module.exports.Double = Double;
- module.exports.MinKey = MinKey;
- module.exports.MaxKey = MaxKey;
- module.exports.BSONRegExp = BSONRegExp;