@codesandbox/sdk
Version:
The CodeSandbox SDK
57 lines (56 loc) • 2.11 kB
TypeScript
import { IDisposable } from "./disposable";
/**
* The response from a barrier. If the barrier is disposed, the status is "disposed".
* If the barrier is opened, the status is "resolved" and the value is the value passed to open().
* This is used instead of rejecting a barrier promise so that error state is explicitly handled.
*/
export type BarrierResponse<T> = {
status: "disposed";
} | {
status: "resolved";
value: T;
};
/**
* A barrier that is initially closed and then becomes opened permanently.
* You can wait for the barrier to open, but you cannot close it again.
*/
export declare class Barrier<T> implements IDisposable {
protected _isOpen: boolean;
protected _promise: Promise<BarrierResponse<T>>;
protected _completePromise: (v: BarrierResponse<T>) => void;
constructor();
/**
* Returns true if the barrier is open, false if it is closed
* @returns true if the barrier is open, false if it is closed
*/
isOpen(): boolean;
/**
* Opens the barrier. If the barrier is already open, this method does nothing.
* @param value the value to return when the barrier is opened
* @returns
*/
open(value: T): void;
/**
*
* @returns a promise that resolves when the barrier is opened. If the barrier is already open, the promise resolves immediately.
*/
wait(): Promise<BarrierResponse<T>>;
/**
* DO NOT USE THIS METHOD in production code. This is only for tests.
* This is a convenience method that waits for the barrier to open and then returns the value.
* If the Barrier is disposed while waiting to open, an error is thrown.
* @returns the value if the barrier is open, otherwise throws an error
*/
__waitAndThrowIfDisposed(): Promise<T>;
/**
* Disposes the barrier.
* If there is a promise waiting for the barrier to open, it will be resolved with a status of "disposed".
*/
dispose(): void;
}
/**
* Like Barrier, but you can close the barrier again
*/
export declare class ClosableBarrier<T> extends Barrier<T> {
close(): void;
}