mirror of
https://github.com/vector-im/element-web.git
synced 2026-03-06 05:52:19 +01:00
* Add commercial licence and update config files * Update license in headers * Revert "Update license in headers" This reverts commit 7ed7949485e88889a9ffc8075a9df1f8e936777e. * Update only spdx id * Remove LicenseRef- from package.json LicenseRef- no longer allowed in npm v3 package.json This fixes the warning in the logs and failing build check.
49 lines
1.2 KiB
TypeScript
49 lines
1.2 KiB
TypeScript
/*
|
|
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 OR LicenseRef-Element-Commercial
|
|
Please see LICENSE files in the repository root for full details.
|
|
*/
|
|
|
|
/**
|
|
* Utility class for lazily getting a variable.
|
|
*/
|
|
export class LazyValue<T> {
|
|
private val?: T;
|
|
private prom?: Promise<T>;
|
|
private done = false;
|
|
|
|
public constructor(private getFn: () => Promise<T>) {}
|
|
|
|
/**
|
|
* Whether or not a cached value is present.
|
|
*/
|
|
public get present(): boolean {
|
|
// 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.
|
|
*/
|
|
public get cachedValue(): T | undefined {
|
|
return this.val;
|
|
}
|
|
|
|
/**
|
|
* Gets a promise which resolves to the value, eventually.
|
|
*/
|
|
public get value(): Promise<T> {
|
|
if (this.prom) return this.prom;
|
|
this.prom = this.getFn();
|
|
|
|
return this.prom.then((v) => {
|
|
this.val = v;
|
|
this.done = true;
|
|
return v;
|
|
});
|
|
}
|
|
}
|