You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
114 lines
2.8 KiB
114 lines
2.8 KiB
'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;
|