Spaces:
Running
Running
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 | |
} | |