first commit
This commit is contained in:
85
node_modules/lit-html/development/directives/private-async-helpers.js
generated
vendored
Normal file
85
node_modules/lit-html/development/directives/private-async-helpers.js
generated
vendored
Normal file
@@ -0,0 +1,85 @@
|
||||
/**
|
||||
* @license
|
||||
* Copyright 2021 Google LLC
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
// Note, this module is not included in package exports so that it's private to
|
||||
// our first-party directives. If it ends up being useful, we can open it up and
|
||||
// export it.
|
||||
/**
|
||||
* Helper to iterate an AsyncIterable in its own closure.
|
||||
* @param iterable The iterable to iterate
|
||||
* @param callback The callback to call for each value. If the callback returns
|
||||
* `false`, the loop will be broken.
|
||||
*/
|
||||
export const forAwaitOf = async (iterable, callback) => {
|
||||
for await (const v of iterable) {
|
||||
if ((await callback(v)) === false) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Holds a reference to an instance that can be disconnected and reconnected,
|
||||
* so that a closure over the ref (e.g. in a then function to a promise) does
|
||||
* not strongly hold a ref to the instance. Approximates a WeakRef but must
|
||||
* be manually connected & disconnected to the backing instance.
|
||||
*/
|
||||
export class PseudoWeakRef {
|
||||
constructor(ref) {
|
||||
this._ref = ref;
|
||||
}
|
||||
/**
|
||||
* Disassociates the ref with the backing instance.
|
||||
*/
|
||||
disconnect() {
|
||||
this._ref = undefined;
|
||||
}
|
||||
/**
|
||||
* Reassociates the ref with the backing instance.
|
||||
*/
|
||||
reconnect(ref) {
|
||||
this._ref = ref;
|
||||
}
|
||||
/**
|
||||
* Retrieves the backing instance (will be undefined when disconnected)
|
||||
*/
|
||||
deref() {
|
||||
return this._ref;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* A helper to pause and resume waiting on a condition in an async function
|
||||
*/
|
||||
export class Pauser {
|
||||
constructor() {
|
||||
this._promise = undefined;
|
||||
this._resolve = undefined;
|
||||
}
|
||||
/**
|
||||
* When paused, returns a promise to be awaited; when unpaused, returns
|
||||
* undefined. Note that in the microtask between the pauser being resumed
|
||||
* an an await of this promise resolving, the pauser could be paused again,
|
||||
* hence callers should check the promise in a loop when awaiting.
|
||||
* @returns A promise to be awaited when paused or undefined
|
||||
*/
|
||||
get() {
|
||||
return this._promise;
|
||||
}
|
||||
/**
|
||||
* Creates a promise to be awaited
|
||||
*/
|
||||
pause() {
|
||||
var _a;
|
||||
(_a = this._promise) !== null && _a !== void 0 ? _a : (this._promise = new Promise((resolve) => (this._resolve = resolve)));
|
||||
}
|
||||
/**
|
||||
* Resolves the promise which may be awaited
|
||||
*/
|
||||
resume() {
|
||||
var _a;
|
||||
(_a = this._resolve) === null || _a === void 0 ? void 0 : _a.call(this);
|
||||
this._promise = this._resolve = undefined;
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=private-async-helpers.js.map
|
Reference in New Issue
Block a user