type MaybePromise = T | Promise | HybridPromise; type HybridPromiseState = | { mode: "sync"; status: "fulfilled"; value: T } | { mode: "sync"; status: "rejected"; reason: unknown } | { mode: "async"; promise: Promise }; export class HybridPromise implements PromiseLike { private isConsumed = false; private constructor(private readonly state: HybridPromiseState) { if (state.mode === "sync" && state.status === "rejected") { queueMicrotask(() => { if (!this.isConsumed) { throw state.reason; } }); } } isSync(): boolean { return this.state.mode === "sync"; } toPromise(): Promise { this.isConsumed = true; if (this.state.mode === "async") return this.state.promise; return this.state.status === "fulfilled" ? Promise.resolve(this.state.value) : Promise.reject(this.state.reason); } static resolve(value: MaybePromise): HybridPromise { if (value instanceof HybridPromise) return value; return new HybridPromise( value instanceof Promise ? { mode: "async", promise: value } : { mode: "sync", status: "fulfilled", value }, ); } static reject(reason?: unknown): HybridPromise { return new HybridPromise({ mode: "sync", status: "rejected", reason }); } then( onfulfilled?: ((value: T) => MaybePromise) | null | undefined, onrejected?: ((reason: unknown) => MaybePromise) | null | undefined, ): HybridPromise { this.isConsumed = true; if (this.state.mode === "async") { return new HybridPromise({ mode: "async", promise: this.state.promise.then(onfulfilled, onrejected) as any, }); } try { if (this.state.status === "fulfilled") { if (!onfulfilled) return HybridPromise.resolve(this.state.value as any); return HybridPromise.resolve(onfulfilled(this.state.value)); } else { if (!onrejected) return HybridPromise.reject(this.state.reason); return HybridPromise.resolve(onrejected(this.state.reason)); } } catch (e) { return HybridPromise.reject(e); } } catch( onrejected?: ((reason: unknown) => MaybePromise) | null | undefined, ): HybridPromise { return this.then(null, onrejected); } finally(onfinally?: (() => void) | null | undefined): HybridPromise { this.isConsumed = true; if (this.state.mode === "async") { return new HybridPromise({ mode: "async", promise: this.state.promise.finally(onfinally) }); } try { onfinally?.(); return new HybridPromise(this.state); } catch (e) { return HybridPromise.reject(e); } } }