2025-04-02 06:50:39 -04:00

42 lines
955 B
JavaScript

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;
}