utils.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. "use strict";
  2. var f = require('util').format,
  3. require_optional = require('require_optional');
  4. // Set property function
  5. var setProperty = function(obj, prop, flag, values) {
  6. Object.defineProperty(obj, prop.name, {
  7. enumerable:true,
  8. set: function(value) {
  9. if(typeof value != 'boolean') throw new Error(f("%s required a boolean", prop.name));
  10. // Flip the bit to 1
  11. if(value == true) values.flags |= flag;
  12. // Flip the bit to 0 if it's set, otherwise ignore
  13. if(value == false && (values.flags & flag) == flag) values.flags ^= flag;
  14. prop.value = value;
  15. }
  16. , get: function() { return prop.value; }
  17. });
  18. }
  19. // Set property function
  20. var getProperty = function(obj, propName, fieldName, values, func) {
  21. Object.defineProperty(obj, propName, {
  22. enumerable:true,
  23. get: function() {
  24. // Not parsed yet, parse it
  25. if(values[fieldName] == null && obj.isParsed && !obj.isParsed()) {
  26. obj.parse();
  27. }
  28. // Do we have a post processing function
  29. if(typeof func == 'function') return func(values[fieldName]);
  30. // Return raw value
  31. return values[fieldName];
  32. }
  33. });
  34. }
  35. // Set simple property
  36. var getSingleProperty = function(obj, name, value) {
  37. Object.defineProperty(obj, name, {
  38. enumerable:true,
  39. get: function() {
  40. return value
  41. }
  42. });
  43. }
  44. // Shallow copy
  45. var copy = function(fObj, tObj) {
  46. tObj = tObj || {};
  47. for(var name in fObj) tObj[name] = fObj[name];
  48. return tObj;
  49. }
  50. var debugOptions = function(debugFields, options) {
  51. var finaloptions = {};
  52. debugFields.forEach(function(n) {
  53. finaloptions[n] = options[n];
  54. });
  55. return finaloptions;
  56. }
  57. var retrieveBSON = function() {
  58. var BSON = require('bson');
  59. BSON.native = false;
  60. try {
  61. try {
  62. BSON = require('bson-ext');
  63. BSON.native = true;
  64. } catch(err) {
  65. var optionalBSON = require_optional('bson-ext');
  66. if(optionalBSON) {
  67. optionalBSON.native = true;
  68. return optionalBSON;
  69. }
  70. }
  71. } catch(err) {}
  72. return BSON;
  73. }
  74. exports.setProperty = setProperty;
  75. exports.getProperty = getProperty;
  76. exports.getSingleProperty = getSingleProperty;
  77. exports.copy = copy;
  78. exports.debugOptions = debugOptions;
  79. exports.retrieveBSON = retrieveBSON;