@selfage/once
Version:
Calling functions only once.
30 lines • 2.82 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.toOnce = toOnce;
exports.toOnceOrError = toOnceOrError;
function toOnce(func, altFunc) {
let result;
let callNoop = () => {
return result;
};
let call = (...args) => {
result = func(...args);
if (altFunc) {
call = altFunc;
}
else {
call = callNoop;
}
return result;
};
return (...args) => {
return call(...args);
};
}
function toOnceOrError(func) {
let fail = () => {
throw new Error("Function is expected to be called only once.");
};
return toOnce(func, fail);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIm9uY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQSx3QkFvQkM7QUFFRCxzQ0FPQztBQTdCRCxTQUFnQixNQUFNLENBQ3BCLElBQXVCLEVBQ3ZCLE9BQTJCO0lBRTNCLElBQUksTUFBUyxDQUFDO0lBQ2QsSUFBSSxRQUFRLEdBQUcsR0FBTSxFQUFFO1FBQ3JCLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUMsQ0FBQztJQUNGLElBQUksSUFBSSxHQUFHLENBQUMsR0FBRyxJQUFPLEVBQUssRUFBRTtRQUMzQixNQUFNLEdBQUcsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDdkIsSUFBSSxPQUFPLEVBQUUsQ0FBQztZQUNaLElBQUksR0FBRyxPQUFPLENBQUM7UUFDakIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLEdBQUcsUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDLENBQUM7SUFDRixPQUFPLENBQUMsR0FBRyxJQUFPLEVBQUssRUFBRTtRQUN2QixPQUFPLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ3ZCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFnQixhQUFhLENBQzNCLElBQXVCO0lBRXZCLElBQUksSUFBSSxHQUFHLEdBQU0sRUFBRTtRQUNqQixNQUFNLElBQUksS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7SUFDbEUsQ0FBQyxDQUFDO0lBQ0YsT0FBTyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIEFyciA9IHJlYWRvbmx5IHVua25vd25bXTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0b09uY2U8VCBleHRlbmRzIEFyciwgUj4oXHJcbiAgZnVuYzogKC4uLmFyZ3M6IFQpID0+IFIsXHJcbiAgYWx0RnVuYz86ICguLi5hcmdzOiBUKSA9PiBSXHJcbik6ICguLi5hcmdzOiBUKSA9PiBSIHtcclxuICBsZXQgcmVzdWx0OiBSO1xyXG4gIGxldCBjYWxsTm9vcCA9ICgpOiBSID0+IHtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfTtcclxuICBsZXQgY2FsbCA9ICguLi5hcmdzOiBUKTogUiA9PiB7XHJcbiAgICByZXN1bHQgPSBmdW5jKC4uLmFyZ3MpO1xyXG4gICAgaWYgKGFsdEZ1bmMpIHtcclxuICAgICAgY2FsbCA9IGFsdEZ1bmM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjYWxsID0gY2FsbE5vb3A7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH07XHJcbiAgcmV0dXJuICguLi5hcmdzOiBUKTogUiA9PiB7XHJcbiAgICByZXR1cm4gY2FsbCguLi5hcmdzKTtcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdG9PbmNlT3JFcnJvcjxUIGV4dGVuZHMgQXJyLCBSPihcclxuICBmdW5jOiAoLi4uYXJnczogVCkgPT4gUlxyXG4pOiAoLi4uYXJnczogVCkgPT4gUiB7XHJcbiAgbGV0IGZhaWwgPSAoKTogUiA9PiB7XHJcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGdW5jdGlvbiBpcyBleHBlY3RlZCB0byBiZSBjYWxsZWQgb25seSBvbmNlLlwiKTtcclxuICB9O1xyXG4gIHJldHVybiB0b09uY2UoZnVuYywgZmFpbCk7XHJcbn1cclxuIl19