Spaces:
Sleeping
Sleeping
File size: 4,579 Bytes
2a1c46d | 1 | {"version":3,"file":"index.mjs","names":["#executor","#decorate"],"sources":["../src/create-deferred-executor.ts","../src/deferred-promise.ts"],"sourcesContent":["export type PromiseState = 'pending' | 'fulfilled' | 'rejected'\n\nexport type Executor<Value> = ConstructorParameters<typeof Promise<Value>>[0]\nexport type ResolveFunction<Value> = Parameters<Executor<Value>>[0]\nexport type RejectFunction<Reason> = Parameters<Executor<Reason>>[1]\n\nexport type DeferredPromiseExecutor<Input = never, Output = Input> = {\n (resolve?: ResolveFunction<Input>, reject?: RejectFunction<any>): void\n\n resolve: ResolveFunction<Input>\n reject: RejectFunction<any>\n result?: Output\n state: PromiseState\n rejectionReason?: unknown\n}\nexport function createDeferredExecutor<\n Input = never,\n Output = Input\n>(): DeferredPromiseExecutor<Input, Output> {\n const executor = <DeferredPromiseExecutor<Input, Output>>((\n resolve,\n reject\n ) => {\n executor.state = 'pending'\n\n executor.resolve = (data) => {\n if (executor.state !== 'pending') {\n return\n }\n\n executor.result = data as Output\n\n const onFulfilled = <Value>(value: Value) => {\n executor.state = 'fulfilled'\n return value\n }\n\n return resolve(\n data instanceof Promise ? data : Promise.resolve(data).then(onFulfilled)\n )\n }\n\n executor.reject = (reason) => {\n if (executor.state !== 'pending') {\n return\n }\n\n queueMicrotask(() => {\n executor.state = 'rejected'\n })\n\n return reject((executor.rejectionReason = reason))\n }\n })\n\n return executor\n}\n","import {\n type Executor,\n type RejectFunction,\n type ResolveFunction,\n type DeferredPromiseExecutor,\n createDeferredExecutor,\n} from './create-deferred-executor'\n\nexport class DeferredPromise<Input, Output = Input> extends Promise<Input> {\n #executor: DeferredPromiseExecutor\n\n public resolve: ResolveFunction<Output>\n public reject: RejectFunction<Output>\n\n constructor(executor: Executor<Input> | null = null) {\n const deferredExecutor = createDeferredExecutor()\n super((originalResolve, originalReject) => {\n deferredExecutor(originalResolve, originalReject)\n executor?.(deferredExecutor.resolve, deferredExecutor.reject)\n })\n\n this.#executor = deferredExecutor\n this.resolve = this.#executor.resolve\n this.reject = this.#executor.reject\n }\n\n public get state() {\n return this.#executor.state\n }\n\n public get rejectionReason() {\n return this.#executor.rejectionReason\n }\n\n public then<ThenResult = Input, CatchResult = never>(\n onFulfilled?: (value: Input) => ThenResult | PromiseLike<ThenResult>,\n onRejected?: (reason: any) => CatchResult | PromiseLike<CatchResult>,\n ) {\n return this.#decorate(super.then(onFulfilled, onRejected))\n }\n\n public catch<CatchResult = never>(\n onRejected?: (reason: any) => CatchResult | PromiseLike<CatchResult>,\n ) {\n return this.#decorate(super.catch(onRejected))\n }\n\n public finally(onfinally?: () => void | Promise<any>) {\n return this.#decorate(super.finally(onfinally))\n }\n\n #decorate<ChildInput>(\n promise: Promise<ChildInput>,\n ): DeferredPromise<ChildInput, Output> {\n return Object.defineProperties(promise, {\n resolve: { configurable: true, value: this.resolve },\n reject: { configurable: true, value: this.reject },\n }) as DeferredPromise<ChildInput, Output>\n }\n}\n"],"mappings":";AAeA,SAAgB,yBAG4B;CAC1C,MAAM,aACJ,SACA,WACG;AACH,WAAS,QAAQ;AAEjB,WAAS,WAAW,SAAS;AAC3B,OAAI,SAAS,UAAU,UACrB;AAGF,YAAS,SAAS;GAElB,MAAM,eAAsB,UAAiB;AAC3C,aAAS,QAAQ;AACjB,WAAO;;AAGT,UAAO,QACL,gBAAgB,UAAU,OAAO,QAAQ,QAAQ,KAAK,CAAC,KAAK,YAAY,CACzE;;AAGH,WAAS,UAAU,WAAW;AAC5B,OAAI,SAAS,UAAU,UACrB;AAGF,wBAAqB;AACnB,aAAS,QAAQ;KACjB;AAEF,UAAO,OAAQ,SAAS,kBAAkB,OAAQ;;;AAItD,QAAO;;;;AC/CT,IAAa,kBAAb,cAA4D,QAAe;CACzE;CAEA;CACA;CAEA,YAAY,WAAmC,MAAM;EACnD,MAAM,mBAAmB,wBAAwB;AACjD,SAAO,iBAAiB,mBAAmB;AACzC,oBAAiB,iBAAiB,eAAe;AACjD,cAAW,iBAAiB,SAAS,iBAAiB,OAAO;IAC7D;AAEF,QAAA,WAAiB;AACjB,OAAK,UAAU,MAAA,SAAe;AAC9B,OAAK,SAAS,MAAA,SAAe;;CAG/B,IAAW,QAAQ;AACjB,SAAO,MAAA,SAAe;;CAGxB,IAAW,kBAAkB;AAC3B,SAAO,MAAA,SAAe;;CAGxB,KACE,aACA,YACA;AACA,SAAO,MAAA,SAAe,MAAM,KAAK,aAAa,WAAW,CAAC;;CAG5D,MACE,YACA;AACA,SAAO,MAAA,SAAe,MAAM,MAAM,WAAW,CAAC;;CAGhD,QAAe,WAAuC;AACpD,SAAO,MAAA,SAAe,MAAM,QAAQ,UAAU,CAAC;;CAGjD,UACE,SACqC;AACrC,SAAO,OAAO,iBAAiB,SAAS;GACtC,SAAS;IAAE,cAAc;IAAM,OAAO,KAAK;IAAS;GACpD,QAAQ;IAAE,cAAc;IAAM,OAAO,KAAK;IAAQ;GACnD,CAAC"} |