-
Notifications
You must be signed in to change notification settings - Fork 67
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
979805e
commit 290177d
Showing
3 changed files
with
313 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,244 @@ | ||
// Type definitions for lie 3.2 | ||
// Project: https://github.com/calvinmetcalf/lie#readme | ||
// Definitions by: Andre Wiggins <https://github.com/andrewiggins> | ||
// TypeScript Version: 2.3 | ||
|
||
// These types are copied from TypeScript's built-in Promise types | ||
// and extended with extra Lie utilities namely, finally. | ||
|
||
export as namespace Promise; | ||
|
||
/** | ||
* Represents the completion of an asynchronous operation | ||
*/ | ||
interface Promise<T> { | ||
/** | ||
* Attaches callbacks for the resolution and/or rejection of the Promise. | ||
* @param onfulfilled The callback to execute when the Promise is resolved. | ||
* @param onrejected The callback to execute when the Promise is rejected. | ||
* @returns A Promise for the completion of which ever callback is executed. | ||
*/ | ||
then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): Promise<TResult1 | TResult2>; | ||
|
||
/** | ||
* Attaches a callback for only the rejection of the Promise. | ||
* @param onrejected The callback to execute when the Promise is rejected. | ||
* @returns A Promise for the completion of the callback. | ||
*/ | ||
catch<TResult = never>(onrejected?: ((reason: any) => TResult | PromiseLike<TResult>) | undefined | null): Promise<T | TResult>; | ||
|
||
/** | ||
* When the promise is settled, whether fulfilled or rejected, execute the | ||
* specified callback function. This provides a way for code that must be | ||
* executed once the Promise has been dealt with to be run whether the promise | ||
* was fulfilled successfully or rejected. | ||
* @param onfinally Function called when the Promise is settled | ||
* @returns A Promise whose finally handler is set to the specified function, onfinally. | ||
*/ | ||
finally<TResult = never>(onfinally?: (() => TResult | PromiseLike<TResult>) | undefined | null): Promise<T | TResult>; | ||
} | ||
|
||
interface PromiseConstructor { | ||
/** | ||
* A reference to the prototype. | ||
*/ | ||
readonly prototype: Promise<any>; | ||
|
||
/** | ||
* Creates a new Promise. | ||
* @param executor A callback used to initialize the promise. This callback is passed two arguments: | ||
* a resolve callback used resolve the promise with a value or the result of another promise, | ||
* and a reject callback used to reject the promise with a provided reason or error. | ||
*/ | ||
new <T>(executor: (resolve: (value?: T | PromiseLike<T>) => void, reject: (reason?: any) => void) => void): Promise<T>; | ||
|
||
/** | ||
* Creates a Promise that is resolved with an array of results when all of the provided Promises | ||
* resolve, or rejected when any Promise is rejected. | ||
* @param values An array of Promises. | ||
* @returns A new Promise. | ||
*/ | ||
all<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>, T9 | PromiseLike<T9>, T10 | PromiseLike<T10>]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9, T10]>; | ||
|
||
/** | ||
* Creates a Promise that is resolved with an array of results when all of the provided Promises | ||
* resolve, or rejected when any Promise is rejected. | ||
* @param values An array of Promises. | ||
* @returns A new Promise. | ||
*/ | ||
all<T1, T2, T3, T4, T5, T6, T7, T8, T9>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>, T9 | PromiseLike<T9>]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8, T9]>; | ||
|
||
/** | ||
* Creates a Promise that is resolved with an array of results when all of the provided Promises | ||
* resolve, or rejected when any Promise is rejected. | ||
* @param values An array of Promises. | ||
* @returns A new Promise. | ||
*/ | ||
all<T1, T2, T3, T4, T5, T6, T7, T8>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>]): Promise<[T1, T2, T3, T4, T5, T6, T7, T8]>; | ||
|
||
/** | ||
* Creates a Promise that is resolved with an array of results when all of the provided Promises | ||
* resolve, or rejected when any Promise is rejected. | ||
* @param values An array of Promises. | ||
* @returns A new Promise. | ||
*/ | ||
all<T1, T2, T3, T4, T5, T6, T7>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>]): Promise<[T1, T2, T3, T4, T5, T6, T7]>; | ||
|
||
/** | ||
* Creates a Promise that is resolved with an array of results when all of the provided Promises | ||
* resolve, or rejected when any Promise is rejected. | ||
* @param values An array of Promises. | ||
* @returns A new Promise. | ||
*/ | ||
all<T1, T2, T3, T4, T5, T6>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>]): Promise<[T1, T2, T3, T4, T5, T6]>; | ||
|
||
/** | ||
* Creates a Promise that is resolved with an array of results when all of the provided Promises | ||
* resolve, or rejected when any Promise is rejected. | ||
* @param values An array of Promises. | ||
* @returns A new Promise. | ||
*/ | ||
all<T1, T2, T3, T4, T5>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>]): Promise<[T1, T2, T3, T4, T5]>; | ||
|
||
/** | ||
* Creates a Promise that is resolved with an array of results when all of the provided Promises | ||
* resolve, or rejected when any Promise is rejected. | ||
* @param values An array of Promises. | ||
* @returns A new Promise. | ||
*/ | ||
all<T1, T2, T3, T4>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>]): Promise<[T1, T2, T3, T4]>; | ||
|
||
/** | ||
* Creates a Promise that is resolved with an array of results when all of the provided Promises | ||
* resolve, or rejected when any Promise is rejected. | ||
* @param values An array of Promises. | ||
* @returns A new Promise. | ||
*/ | ||
all<T1, T2, T3>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>]): Promise<[T1, T2, T3]>; | ||
|
||
/** | ||
* Creates a Promise that is resolved with an array of results when all of the provided Promises | ||
* resolve, or rejected when any Promise is rejected. | ||
* @param values An array of Promises. | ||
* @returns A new Promise. | ||
*/ | ||
all<T1, T2>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>]): Promise<[T1, T2]>; | ||
|
||
/** | ||
* Creates a Promise that is resolved with an array of results when all of the provided Promises | ||
* resolve, or rejected when any Promise is rejected. | ||
* @param values An array of Promises. | ||
* @returns A new Promise. | ||
*/ | ||
all<T>(values: (T | PromiseLike<T>)[]): Promise<T[]>; | ||
|
||
/** | ||
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved | ||
* or rejected. | ||
* @param values An array of Promises. | ||
* @returns A new Promise. | ||
*/ | ||
race<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>, T9 | PromiseLike<T9>, T10 | PromiseLike<T10>]): Promise<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9 | T10>; | ||
|
||
/** | ||
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved | ||
* or rejected. | ||
* @param values An array of Promises. | ||
* @returns A new Promise. | ||
*/ | ||
race<T1, T2, T3, T4, T5, T6, T7, T8, T9>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>, T9 | PromiseLike<T9>]): Promise<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8 | T9>; | ||
|
||
/** | ||
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved | ||
* or rejected. | ||
* @param values An array of Promises. | ||
* @returns A new Promise. | ||
*/ | ||
race<T1, T2, T3, T4, T5, T6, T7, T8>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>, T8 | PromiseLike<T8>]): Promise<T1 | T2 | T3 | T4 | T5 | T6 | T7 | T8>; | ||
|
||
/** | ||
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved | ||
* or rejected. | ||
* @param values An array of Promises. | ||
* @returns A new Promise. | ||
*/ | ||
race<T1, T2, T3, T4, T5, T6, T7>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>, T7 | PromiseLike<T7>]): Promise<T1 | T2 | T3 | T4 | T5 | T6 | T7>; | ||
|
||
/** | ||
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved | ||
* or rejected. | ||
* @param values An array of Promises. | ||
* @returns A new Promise. | ||
*/ | ||
race<T1, T2, T3, T4, T5, T6>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>, T6 | PromiseLike<T6>]): Promise<T1 | T2 | T3 | T4 | T5 | T6>; | ||
|
||
/** | ||
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved | ||
* or rejected. | ||
* @param values An array of Promises. | ||
* @returns A new Promise. | ||
*/ | ||
race<T1, T2, T3, T4, T5>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>, T5 | PromiseLike<T5>]): Promise<T1 | T2 | T3 | T4 | T5>; | ||
|
||
/** | ||
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved | ||
* or rejected. | ||
* @param values An array of Promises. | ||
* @returns A new Promise. | ||
*/ | ||
race<T1, T2, T3, T4>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>, T4 | PromiseLike<T4>]): Promise<T1 | T2 | T3 | T4>; | ||
|
||
/** | ||
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved | ||
* or rejected. | ||
* @param values An array of Promises. | ||
* @returns A new Promise. | ||
*/ | ||
race<T1, T2, T3>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>, T3 | PromiseLike<T3>]): Promise<T1 | T2 | T3>; | ||
|
||
/** | ||
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved | ||
* or rejected. | ||
* @param values An array of Promises. | ||
* @returns A new Promise. | ||
*/ | ||
race<T1, T2>(values: [T1 | PromiseLike<T1>, T2 | PromiseLike<T2>]): Promise<T1 | T2>; | ||
|
||
/** | ||
* Creates a Promise that is resolved or rejected when any of the provided Promises are resolved | ||
* or rejected. | ||
* @param values An array of Promises. | ||
* @returns A new Promise. | ||
*/ | ||
race<T>(values: (T | PromiseLike<T>)[]): Promise<T>; | ||
|
||
/** | ||
* Creates a new rejected promise for the provided reason. | ||
* @param reason The reason the promise was rejected. | ||
* @returns A new rejected Promise. | ||
*/ | ||
reject(reason: any): Promise<never>; | ||
|
||
/** | ||
* Creates a new rejected promise for the provided reason. | ||
* @param reason The reason the promise was rejected. | ||
* @returns A new rejected Promise. | ||
*/ | ||
reject<T>(reason: any): Promise<T>; | ||
|
||
/** | ||
* Creates a new resolved promise for the provided value. | ||
* @param value A promise. | ||
* @returns A promise whose internal state matches the provided promise. | ||
*/ | ||
resolve<T>(value: T | PromiseLike<T>): Promise<T>; | ||
|
||
/** | ||
* Creates a new resolved promise . | ||
* @returns A resolved promise. | ||
*/ | ||
resolve(): Promise<void>; | ||
} | ||
|
||
declare const Promise: PromiseConstructor; | ||
export default Promise; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
import Promise from "../"; | ||
|
||
interface TestObject { | ||
value: string; | ||
} | ||
|
||
const testObject: TestObject = { value: "value" }; | ||
|
||
function createPromise(doReject: boolean = false): Promise<TestObject> { | ||
return new Promise((resolve, reject) => { | ||
setTimeout(() => { | ||
if (doReject) { | ||
reject(new Error("reason")); | ||
} else { | ||
// resolve should take the appropriately typed object | ||
resolve(testObject); | ||
|
||
// resolve should also be capable of taking a PromiseLike | ||
resolve(Promise.resolve(testObject)); | ||
} | ||
}, 0); | ||
}); | ||
} | ||
|
||
const p = createPromise() | ||
.then(result => console.log(result.value)) | ||
.catch(error => console.log(error)) | ||
.finally(() => console.log("finally")); | ||
|
||
Promise.resolve(testObject) | ||
.then(result => console.log(result.value)) | ||
.catch(error => console.log(error)) | ||
.finally(() => console.log("finally")); | ||
|
||
Promise.reject("reason") | ||
.then(result => console.log(result)) | ||
.catch(error => console.log(error)) | ||
.finally(() => console.log("finally")); | ||
|
||
Promise.race([ | ||
{}, | ||
createPromise(), | ||
Promise.resolve({}), | ||
Promise.reject("reason") | ||
]) | ||
.then(result => console.log(result)) | ||
.catch(error => console.log(error)) | ||
.finally(() => console.log("finally")); | ||
|
||
Promise.all([ | ||
{}, | ||
createPromise(), | ||
Promise.resolve({}), | ||
Promise.reject("reason") | ||
]) | ||
.then(results => console.log(results[1].value)) | ||
.catch(error => console.log(error)) | ||
.finally(() => console.log("finally")); | ||
|
||
Promise.race([{}, createPromise(), Promise.resolve(), Promise.reject("reason")]) | ||
.then(result => console.log(result)) | ||
.catch(error => console.log(error)) | ||
.finally(() => console.log("finally")); |