| 123456789101112131415161718192021222324252627282930313233343536373839404142 | var wrappy = require('wrappy')module.exports = wrappy(once)module.exports.strict = wrappy(onceStrict)once.proto = once(function () {  Object.defineProperty(Function.prototype, 'once', {    value: function () {      return once(this)    },    configurable: true  })  Object.defineProperty(Function.prototype, 'onceStrict', {    value: function () {      return onceStrict(this)    },    configurable: true  })})function once (fn) {  var f = function () {    if (f.called) return f.value    f.called = true    return f.value = fn.apply(this, arguments)  }  f.called = false  return f}function onceStrict (fn) {  var f = function () {    if (f.called)      throw new Error(f.onceError)    f.called = true    return f.value = fn.apply(this, arguments)  }  var name = fn.name || 'Function wrapped with `once`'  f.onceError = name + " shouldn't be called more than once"  f.called = false  return f}
 |