matrix-react-sdk
Version:
SDK for matrix.org using React
58 lines (52 loc) • 4.45 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.LazyValue = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
/*
Copyright 2024 New Vector Ltd.
Copyright 2021 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
/**
* Utility class for lazily getting a variable.
*/
class LazyValue {
constructor(getFn) {
(0, _defineProperty2.default)(this, "val", void 0);
(0, _defineProperty2.default)(this, "prom", void 0);
(0, _defineProperty2.default)(this, "done", false);
this.getFn = getFn;
}
/**
* Whether or not a cached value is present.
*/
get present() {
// we use a tracking variable just in case the final value is falsy
return this.done;
}
/**
* Gets the value without invoking a get. May be undefined until the
* value is fetched properly.
*/
get cachedValue() {
return this.val;
}
/**
* Gets a promise which resolves to the value, eventually.
*/
get value() {
if (this.prom) return this.prom;
this.prom = this.getFn();
return this.prom.then(v => {
this.val = v;
this.done = true;
return v;
});
}
}
exports.LazyValue = LazyValue;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMYXp5VmFsdWUiLCJjb25zdHJ1Y3RvciIsImdldEZuIiwiX2RlZmluZVByb3BlcnR5MiIsImRlZmF1bHQiLCJwcmVzZW50IiwiZG9uZSIsImNhY2hlZFZhbHVlIiwidmFsIiwidmFsdWUiLCJwcm9tIiwidGhlbiIsInYiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL0xhenlWYWx1ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAyMSBUaGUgTWF0cml4Lm9yZyBGb3VuZGF0aW9uIEMuSS5DLlxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4qL1xuXG4vKipcbiAqIFV0aWxpdHkgY2xhc3MgZm9yIGxhemlseSBnZXR0aW5nIGEgdmFyaWFibGUuXG4gKi9cbmV4cG9ydCBjbGFzcyBMYXp5VmFsdWU8VD4ge1xuICAgIHByaXZhdGUgdmFsPzogVDtcbiAgICBwcml2YXRlIHByb20/OiBQcm9taXNlPFQ+O1xuICAgIHByaXZhdGUgZG9uZSA9IGZhbHNlO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgZ2V0Rm46ICgpID0+IFByb21pc2U8VD4pIHt9XG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCBhIGNhY2hlZCB2YWx1ZSBpcyBwcmVzZW50LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgcHJlc2VudCgpOiBib29sZWFuIHtcbiAgICAgICAgLy8gd2UgdXNlIGEgdHJhY2tpbmcgdmFyaWFibGUganVzdCBpbiBjYXNlIHRoZSBmaW5hbCB2YWx1ZSBpcyBmYWxzeVxuICAgICAgICByZXR1cm4gdGhpcy5kb25lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIHZhbHVlIHdpdGhvdXQgaW52b2tpbmcgYSBnZXQuIE1heSBiZSB1bmRlZmluZWQgdW50aWwgdGhlXG4gICAgICogdmFsdWUgaXMgZmV0Y2hlZCBwcm9wZXJseS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0IGNhY2hlZFZhbHVlKCk6IFQgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy52YWw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogR2V0cyBhIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgdG8gdGhlIHZhbHVlLCBldmVudHVhbGx5LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgdmFsdWUoKTogUHJvbWlzZTxUPiB7XG4gICAgICAgIGlmICh0aGlzLnByb20pIHJldHVybiB0aGlzLnByb207XG4gICAgICAgIHRoaXMucHJvbSA9IHRoaXMuZ2V0Rm4oKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5wcm9tLnRoZW4oKHYpID0+IHtcbiAgICAgICAgICAgIHRoaXMudmFsID0gdjtcbiAgICAgICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfSk7XG4gICAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNPLE1BQU1BLFNBQVMsQ0FBSTtFQUtmQyxXQUFXQSxDQUFTQyxLQUF1QixFQUFFO0lBQUEsSUFBQUMsZ0JBQUEsQ0FBQUMsT0FBQTtJQUFBLElBQUFELGdCQUFBLENBQUFDLE9BQUE7SUFBQSxJQUFBRCxnQkFBQSxDQUFBQyxPQUFBLGdCQUZyQyxLQUFLO0lBQUEsS0FFT0YsS0FBdUIsR0FBdkJBLEtBQXVCO0VBQUc7O0VBRXJEO0FBQ0o7QUFDQTtFQUNJLElBQVdHLE9BQU9BLENBQUEsRUFBWTtJQUMxQjtJQUNBLE9BQU8sSUFBSSxDQUFDQyxJQUFJO0VBQ3BCOztFQUVBO0FBQ0o7QUFDQTtBQUNBO0VBQ0ksSUFBV0MsV0FBV0EsQ0FBQSxFQUFrQjtJQUNwQyxPQUFPLElBQUksQ0FBQ0MsR0FBRztFQUNuQjs7RUFFQTtBQUNKO0FBQ0E7RUFDSSxJQUFXQyxLQUFLQSxDQUFBLEVBQWU7SUFDM0IsSUFBSSxJQUFJLENBQUNDLElBQUksRUFBRSxPQUFPLElBQUksQ0FBQ0EsSUFBSTtJQUMvQixJQUFJLENBQUNBLElBQUksR0FBRyxJQUFJLENBQUNSLEtBQUssQ0FBQyxDQUFDO0lBRXhCLE9BQU8sSUFBSSxDQUFDUSxJQUFJLENBQUNDLElBQUksQ0FBRUMsQ0FBQyxJQUFLO01BQ3pCLElBQUksQ0FBQ0osR0FBRyxHQUFHSSxDQUFDO01BQ1osSUFBSSxDQUFDTixJQUFJLEdBQUcsSUFBSTtNQUNoQixPQUFPTSxDQUFDO0lBQ1osQ0FBQyxDQUFDO0VBQ047QUFDSjtBQUFDQyxPQUFBLENBQUFiLFNBQUEsR0FBQUEsU0FBQSIsImlnbm9yZUxpc3QiOltdfQ==