export type UsablePromise = PromiseLike & { resolved: boolean }; export function createFulfilled(value: T): UsablePromise { return { status: 'fulfilled', value, resolved: true, then( onfulfilled?: ((value: T) => any) | null, onrejected?: ((reason: any) => any) | null, ) { return Promise.resolve(value).then(onfulfilled, onrejected); }, } as any; } export function createRejected(reason: any): UsablePromise { return { status: 'rejected', reason, resolved: true, then( onfulfilled?: ((value: never) => any) | null, onrejected?: ((reason: any) => any) | null, ) { return Promise.reject(reason).then(onfulfilled, onrejected); }, } as any; }