UNPKG

@selfage/once

Version:

Calling functions only once.

45 lines 4.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.OnceOrErrorCaller = exports.OnceCaller = void 0; class OnceCaller { constructor(func, altFunc) { this.func = func; this.altFunc = altFunc; this.call = this.callFirstTime; } callFirstTime(...args) { this.result = this.func(...args); if (this.altFunc) { this.call = this.altFunc; } else { this.call = this.callNoop; } return this.result; } callNoop() { return this.result; } reset() { this.call = this.callFirstTime; } } exports.OnceCaller = OnceCaller; class OnceOrErrorCaller { constructor(func) { this.func = func; // this.fail can be passed directly because it doesn't use any class member. this.onceCaller = new OnceCaller(this.func, this.fail); } call(...args) { return this.onceCaller.call(...args); } fail() { throw new Error("Function is expected to be called only once."); } reset() { this.onceCaller.reset(); } } exports.OnceOrErrorCaller = OnceOrErrorCaller; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiY2FsbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVBLE1BQWEsVUFBVTtJQUtyQixZQUNVLElBQXVCLEVBQ3ZCLE9BQTJCO1FBRDNCLFNBQUksR0FBSixJQUFJLENBQW1CO1FBQ3ZCLFlBQU8sR0FBUCxPQUFPLENBQW9CO1FBTjlCLFNBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBTzlCLENBQUM7SUFFSSxhQUFhLENBQUMsR0FBRyxJQUFPO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2pDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2pCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUMzQixDQUFDO2FBQU0sQ0FBQztZQUNOLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUM1QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFTyxRQUFRO1FBQ2QsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxLQUFLO1FBQ1YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQ2pDLENBQUM7Q0FDRjtBQTNCRCxnQ0EyQkM7QUFFRCxNQUFhLGlCQUFpQjtJQUk1QixZQUEyQixJQUF1QjtRQUF2QixTQUFJLEdBQUosSUFBSSxDQUFtQjtRQUhsRCw0RUFBNEU7UUFDcEUsZUFBVSxHQUFHLElBQUksVUFBVSxDQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRVgsQ0FBQztJQUUvQyxJQUFJLENBQUMsR0FBRyxJQUFPO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU8sSUFBSTtRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsOENBQThDLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDMUIsQ0FBQztDQUNGO0FBakJELDhDQWlCQyIsInNvdXJjZXNDb250ZW50IjpbInR5cGUgQXJyID0gcmVhZG9ubHkgdW5rbm93bltdO1xyXG5cclxuZXhwb3J0IGNsYXNzIE9uY2VDYWxsZXI8VCBleHRlbmRzIEFyciwgUj4ge1xyXG4gIHB1YmxpYyBjYWxsID0gdGhpcy5jYWxsRmlyc3RUaW1lO1xyXG5cclxuICBwcml2YXRlIHJlc3VsdDogUjtcclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmdW5jOiAoLi4uYXJnczogVCkgPT4gUixcclxuICAgIHByaXZhdGUgYWx0RnVuYz86ICguLi5hcmdzOiBUKSA9PiBSXHJcbiAgKSB7fVxyXG5cclxuICBwcml2YXRlIGNhbGxGaXJzdFRpbWUoLi4uYXJnczogVCk6IFIge1xyXG4gICAgdGhpcy5yZXN1bHQgPSB0aGlzLmZ1bmMoLi4uYXJncyk7XHJcbiAgICBpZiAodGhpcy5hbHRGdW5jKSB7XHJcbiAgICAgIHRoaXMuY2FsbCA9IHRoaXMuYWx0RnVuYztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY2FsbCA9IHRoaXMuY2FsbE5vb3A7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5yZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNhbGxOb29wKCk6IFIge1xyXG4gICAgcmV0dXJuIHRoaXMucmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlc2V0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jYWxsID0gdGhpcy5jYWxsRmlyc3RUaW1lO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE9uY2VPckVycm9yQ2FsbGVyPFQgZXh0ZW5kcyBBcnIsIFI+IHtcclxuICAvLyB0aGlzLmZhaWwgY2FuIGJlIHBhc3NlZCBkaXJlY3RseSBiZWNhdXNlIGl0IGRvZXNuJ3QgdXNlIGFueSBjbGFzcyBtZW1iZXIuXHJcbiAgcHJpdmF0ZSBvbmNlQ2FsbGVyID0gbmV3IE9uY2VDYWxsZXI8VCwgUj4odGhpcy5mdW5jLCB0aGlzLmZhaWwpO1xyXG5cclxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBmdW5jOiAoLi4uYXJnczogVCkgPT4gUikge31cclxuXHJcbiAgcHVibGljIGNhbGwoLi4uYXJnczogVCk6IFIge1xyXG4gICAgcmV0dXJuIHRoaXMub25jZUNhbGxlci5jYWxsKC4uLmFyZ3MpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmYWlsKCk6IFIge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRnVuY3Rpb24gaXMgZXhwZWN0ZWQgdG8gYmUgY2FsbGVkIG9ubHkgb25jZS5cIik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzZXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uY2VDYWxsZXIucmVzZXQoKTtcclxuICB9XHJcbn1cclxuIl19