UNPKG

@selfage/once

Version:

Calling functions only once.

30 lines 2.82 kB
"use strict"; 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