import 'typings-global' import * as typedPromisify from 'typed-promisify' export interface IResolve { (value?: T | Promise): void } export interface IReject { (reason?: any): void } export class Deferred { promise: Promise resolve: IResolve reject: IReject constructor() { this.promise = new Promise((resolve, reject) => { this.resolve = resolve this.reject = reject }) } } export let defer = () => { return new Deferred() } /** * Creates a new resolved promise for the provided value. */ export let resolvedPromise = (value?: T): Promise => { return Promise.resolve(value) } /** * Creates a new rejected promise for the provided reason. */ export let rejectedPromise = (err) => { return Promise.reject(err) } export let promisify = typedPromisify.promisify export let map = typedPromisify.map export let _try = typedPromisify._try