123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- 'use strict';
- var f = require('util').format,
- require_optional = require('require_optional');
- // Set property function
- var setProperty = function(obj, prop, flag, values) {
- Object.defineProperty(obj, prop.name, {
- enumerable: true,
- set: function(value) {
- if (typeof value !== 'boolean') throw new Error(f('%s required a boolean', prop.name));
- // Flip the bit to 1
- if (value === true) values.flags |= flag;
- // Flip the bit to 0 if it's set, otherwise ignore
- if (value === false && (values.flags & flag) === flag) values.flags ^= flag;
- prop.value = value;
- },
- get: function() {
- return prop.value;
- }
- });
- };
- // Set property function
- var getProperty = function(obj, propName, fieldName, values, func) {
- Object.defineProperty(obj, propName, {
- enumerable: true,
- get: function() {
- // Not parsed yet, parse it
- if (values[fieldName] == null && obj.isParsed && !obj.isParsed()) {
- obj.parse();
- }
- // Do we have a post processing function
- if (typeof func === 'function') return func(values[fieldName]);
- // Return raw value
- return values[fieldName];
- }
- });
- };
- // Set simple property
- var getSingleProperty = function(obj, name, value) {
- Object.defineProperty(obj, name, {
- enumerable: true,
- get: function() {
- return value;
- }
- });
- };
- // Shallow copy
- var copy = function(fObj, tObj) {
- tObj = tObj || {};
- for (var name in fObj) tObj[name] = fObj[name];
- return tObj;
- };
- var debugOptions = function(debugFields, options) {
- var finaloptions = {};
- debugFields.forEach(function(n) {
- finaloptions[n] = options[n];
- });
- return finaloptions;
- };
- var retrieveBSON = function() {
- var BSON = require('bson');
- BSON.native = false;
- try {
- var optionalBSON = require_optional('bson-ext');
- if (optionalBSON) {
- optionalBSON.native = true;
- return optionalBSON;
- }
- } catch (err) {} // eslint-disable-line
- return BSON;
- };
- // Throw an error if an attempt to use Snappy is made when Snappy is not installed
- var noSnappyWarning = function() {
- throw new Error(
- 'Attempted to use Snappy compression, but Snappy is not installed. Install or disable Snappy compression and try again.'
- );
- };
- // Facilitate loading Snappy optionally
- var retrieveSnappy = function() {
- var snappy = null;
- try {
- snappy = require_optional('snappy');
- } catch (error) {} // eslint-disable-line
- if (!snappy) {
- snappy = {
- compress: noSnappyWarning,
- uncompress: noSnappyWarning,
- compressSync: noSnappyWarning,
- uncompressSync: noSnappyWarning
- };
- }
- return snappy;
- };
- exports.setProperty = setProperty;
- exports.getProperty = getProperty;
- exports.getSingleProperty = getSingleProperty;
- exports.copy = copy;
- exports.debugOptions = debugOptions;
- exports.retrieveBSON = retrieveBSON;
- exports.retrieveSnappy = retrieveSnappy;
|