'use strict'; const require_optional = require('require_optional'); function debugOptions(debugFields, options) { var finaloptions = {}; debugFields.forEach(function(n) { finaloptions[n] = options[n]; }); return finaloptions; } function retrieveBSON() { 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 function noSnappyWarning() { 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 function retrieveSnappy() { 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; } module.exports = { debugOptions, retrieveBSON, retrieveSnappy };