'use strict'; const parsePackageVersion = require('../../utils').parsePackageVersion; const MongoError = require('../error').MongoError; const require_optional = require('optional-require')(require); function debugOptions(debugFields, options) { const finaloptions = {}; debugFields.forEach(function(n) { finaloptions[n] = options[n]; }); return finaloptions; } function retrieveBSON() { const BSON = require('bson'); BSON.native = false; const optionalBSON = require_optional('bson-ext'); const bsonExtVersion = parsePackageVersion( require_optional('bson-ext/package.json') || { version: '0.0.0' } ); if (optionalBSON) { if (bsonExtVersion.major >= 4) { throw new MongoError( 'bson-ext version 4 and above does not work with the 3.x version of the mongodb driver' ); } optionalBSON.native = true; return optionalBSON; } return BSON; } // Throw an error if an attempt to use Snappy is made when Snappy is not installed function noSnappyWarning() { throw new Error( 'Attempted to use Snappy compression, but Snappy is not installed. Install or disable Snappy compression and try again.' ); } const PKG_VERSION = Symbol('kPkgVersion'); // Facilitate loading Snappy optionally function retrieveSnappy() { const snappy = require_optional('snappy'); if (!snappy) { return { compress: noSnappyWarning, uncompress: noSnappyWarning, compressSync: noSnappyWarning, uncompressSync: noSnappyWarning }; } const snappyPkg = require_optional('snappy/package.json') || { version: '0.0.0' }; const version = parsePackageVersion(snappyPkg); snappy[PKG_VERSION] = version; if (version.major >= 7) { const compressOriginal = snappy.compress; const uncompressOriginal = snappy.uncompress; snappy.compress = (data, callback) => { compressOriginal(data) .then(res => callback(undefined, res)) .catch(error => callback(error)); }; snappy.uncompress = (data, callback) => { uncompressOriginal(data) .then(res => callback(undefined, res)) .catch(error => callback(error)); }; } return snappy; } module.exports = { PKG_VERSION, debugOptions, retrieveBSON, retrieveSnappy };