lazy-eval.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. var objectAssign = require('object-assign');
  2. var memoize = require('memoizee');
  3. function _resolveOutput(func, bindThis) {
  4. var wrapped = function() {
  5. var i = arguments.length;
  6. var args = [];
  7. while (i--) args[i] = arguments[i];
  8. // lazy function eval to keep output memory pressure down, if not used
  9. if (typeof args[0] === 'function') {
  10. args[0] = args[0]();
  11. }
  12. return func.apply(bindThis, args);
  13. };
  14. objectAssign(wrapped, func);
  15. return wrapped;
  16. }
  17. function wrapEval(_debug) {
  18. var debugOrig = _debug;
  19. function debug(namespace) {
  20. function noop() {}
  21. var instance = debugOrig(namespace);
  22. /*
  23. If we're not enabled then don't attempt to log anything.
  24. Therefore when a debug namespace wraps its debug in a
  25. closure then it never allocates anything but the function itself
  26. */
  27. if (!instance.enabled) {
  28. objectAssign(noop, instance);
  29. return noop;
  30. }
  31. return _resolveOutput(instance);
  32. }
  33. var debugMemoized = memoize(debug);
  34. objectAssign(debugMemoized, debugOrig);
  35. return debugMemoized;
  36. }
  37. module.exports = wrapEval;