From c0cf47503c5a7ebbc98cfc2bda8c677b11f6f91e Mon Sep 17 00:00:00 2001 From: Chance Snow Date: Sun, 11 Oct 2015 16:35:15 -0700 Subject: [PATCH] Add pinkswear definitions --- pinkyswear/pinkyswear-tests.ts | 40 ++++++ pinkyswear/pinkyswear.d.ts | 235 +++++++++++++++++++++++++++++++++ 2 files changed, 275 insertions(+) create mode 100644 pinkyswear/pinkyswear-tests.ts create mode 100644 pinkyswear/pinkyswear.d.ts diff --git a/pinkyswear/pinkyswear-tests.ts b/pinkyswear/pinkyswear-tests.ts new file mode 100644 index 000000000..450e9bc81 --- /dev/null +++ b/pinkyswear/pinkyswear-tests.ts @@ -0,0 +1,40 @@ +/// + +var promise: PinkySwear.Promise = pinkySwear(); + +promise.then(function(value) { + console.log("Success with value " + value + "1"); +}, function(value) { + console.log("Failure with value " + value + "!"); +}); + +promise(true, [42]); + +// Promise rejected with multiple values + +promise = pinkySwear(); + +promise.then(function(...values) { + console.log("Success with value " + Array.from(values).join(',') + "1"); +}, function(...values) { + console.log("Failure with value " + Array.from(values).join(',') + "!"); +}); + +promise(false, [6, 6, 6]); + +var state: boolean = promise(); + +// A PinkySwear-powered timeout function that returns a promise: + +function promiseTimeout(timeoutMs) { + var prom = pinkySwear(); + setTimeout(function() { + prom(true, []); + }, timeoutMs); + return prom; +} + +console.log('Starting timeout now.'); +promiseTimeout(5000).then(function() { + console.log('5s have passed.'); +}); diff --git a/pinkyswear/pinkyswear.d.ts b/pinkyswear/pinkyswear.d.ts new file mode 100644 index 000000000..6cc3b9d64 --- /dev/null +++ b/pinkyswear/pinkyswear.d.ts @@ -0,0 +1,235 @@ +// Type definitions for PinkySwear v2.2.2 +// Project: https://github.com/timjansen/PinkySwear.js +// Definitions by: Chance Snow +// Definitions: https://github.com/borisyankov/DefinitelyTyped + +/* + * PinkySwear.js 2.2.2 - Minimalistic implementation of the Promises/A+ spec + * + * Public Domain. Use, modify and distribute it any way you like. No attribution required. + * + * NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK. +*/ + +declare module PinkySwear { + + interface Promise { + + /** + * Get the promise's current state; true if fulfilled, false if rejected, and undefined, otherwise. + */ + (): boolean; + + /** + * Fulfill or reject the promise. + * + * @param fulfilled true to fulfill promise, false to reject + * @param values Value(s) with which to fulfill or reject the promise + * @returns PinkySwear.Promise + */ + (fulfilled: boolean, ...values: any[]): Promise; + + /** + * Called when or if the promise is either resolved or rejected. + * + * @returns PinkySwear.Promise + */ + then(): Promise; + + /** + * Called when or if the promise is either resolved or rejected. + * + * @param onFulfilled Called when or if the promise is resolved. + * @param onRejected Called when or if the promise is rejected. + * @returns PinkySwear.Promise + */ + then(onFulfilled?: () => Promise, onRejected?: () => void): Promise; + + /** + * Called when or if the promise is either resolved or rejected. + * + * @param onFulfilled Called when or if the promise is resolved. + * @param onRejected Called when or if the promise is rejected. + * @returns PinkySwear.Promise + */ + then(onFulfilled?: () => void, onRejected?: () => void): Promise; + + /** + * Called when or if the promise is either resolved or rejected. + * + * @param onFulfilled Called when or if the promise is resolved. + * @param onRejected Called when or if the promise is rejected. + * @returns PinkySwear.Promise + */ + then(onFulfilled?: () => any, onRejected?: () => void): Promise; + + /** + * onFulfilled is called when or if the promise is resolved. + * onRejected is called when or if the promise is rejected. + * + * @param onFulfilled Called when or if the promise is resolved. + * @param onRejected Called when or if the promise is rejected. + * @returns PinkySwear.Promise + */ + then(onFulfilled?: (...values: any[]) => Promise, onRejected?: (...values: any[]) => void): Promise; + + /** + * onFulfilled is called when or if the promise is resolved. + * onRejected is called when or if the promise is rejected. + * + * @param onFulfilled Called when or if the promise is resolved. + * @param onRejected Called when or if the promise is rejected. + * @returns PinkySwear.Promise + */ + then(onFulfilled?: (...values: any[]) => void, onRejected?: (...values: any[]) => void): Promise; + + /** + * onFulfilled is called when or if the promise is resolved. + * onRejected is called when or if the promise is rejected. + * + * @param onFulfilled Called when or if the promise is resolved. + * @param onRejected Called when or if the promise is rejected. + * @returns PinkySwear.Promise + */ + then(onFulfilled?: (...values: any[]) => any, onRejected?: (...values: any[]) => void): Promise; + + /** + * onFulfilled is called when or if the promise is resolved. + * onRejected is called when or if the promise is rejected. + * + * @param onFulfilled Called when or if the promise is resolved. + * @param onRejected Called when or if the promise is rejected. + * @returns PinkySwear.Promise + */ + then(onFulfilled?: (...values: any[]) => Promise, onRejected?: (error?: TypeError) => void): Promise; + + /** + * onFulfilled is called when or if the promise is resolved. + * onRejected is called when or if the promise is rejected. + * + * @param onFulfilled Called when or if the promise is resolved. + * @param onRejected Called when or if the promise is rejected. + * @returns PinkySwear.Promise + */ + then(onFulfilled?: (...values: any[]) => void, onRejected?: (error: TypeError) => void): Promise; + + /** + * onFulfilled is called when or if the promise is resolved. + * onRejected is called when or if the promise is rejected. + * + * @param onFulfilled Called when or if the promise is resolved. + * @param onRejected Called when or if the promise is rejected. + * @returns PinkySwear.Promise + */ + then(onFulfilled?: (...values: any[]) => any, onRejected?: (error: TypeError) => void): Promise; + } + + interface GenericPromise extends Promise { + + /** + * Fulfill or reject the promise. + * + * @param fulfilled true to fulfill promise, false to reject + * @param value Value with which to fulfill or reject the promise + */ + (fulfilled: boolean, value: T): boolean; + + /** + * onFulfilled is called when or if the promise is resolved. + * onRejected is called when or if the promise is rejected. + * + * @param onFulfilled Called when or if the promise is resolved. + * @param onRejected Called when or if the promise is rejected. + * @returns PinkySwear.GenericPromise + */ + then(onFulfilled?: (value: T) => G, onRejected?: (value: T) => void): GenericPromise; + + /** + * onFulfilled is called when or if the promise is resolved. + * onRejected is called when or if the promise is rejected. + * + * @param onFulfilled Called when or if the promise is resolved. + * @param onRejected Called when or if the promise is rejected. + * @returns PinkySwear.GenericPromise + */ + then(onFulfilled?: (value: T) => GenericPromise, onRejected?: (value: T) => void): GenericPromise; + + /** + * onFulfilled is called when or if the promise is resolved. + * onRejected is called when or if the promise is rejected. + * + * @param onFulfilled Called when or if the promise is resolved. + * @param onRejected Called when or if the promise is rejected. + * @returns PinkySwear.Promise + */ + then(onFulfilled?: (value: T) => void, onRejected?: (value: T) => void): Promise; + + /** + * onFulfilled is called when or if the promise is resolved. + * onRejected is called when or if the promise is rejected. + * + * @param onFulfilled Called when or if the promise is resolved. + * @param onRejected Called when or if the promise is rejected. + * @returns PinkySwear.GenericPromise + */ + then(onFulfilled?: (value: T) => G, onRejected?: (error: TypeError) => void): GenericPromise; + + /** + * onFulfilled is called when or if the promise is resolved. + * onRejected is called when or if the promise is rejected. + * + * @param onFulfilled Called when or if the promise is resolved. + * @param onRejected Called when or if the promise is rejected. + * @returns PinkySwear.GenericPromise + */ + then(onFulfilled?: (value: T) => GenericPromise, onRejected?: (error: TypeError) => void): GenericPromise; + + /** + * onFulfilled is called when or if the promise is resolved. + * onRejected is called when or if the promise is rejected. + * + * @param onFulfilled Called when or if the promise is resolved. + * @param onRejected Called when or if the promise is rejected. + * @returns PinkySwear.Promise + */ + then(onFulfilled?: (value: T) => void, onRejected?: (error: TypeError) => void): Promise; + } +} + +interface PinkySwearStatic { + /** + * Create a new generic promise in pending state that promises a value of a specific type and that also extends + * the returned generic promise object as specified in an extend function. + * + * @param extend Called when the promise is created and is ready to be extended. + * @returns PinkySwear.GenericPromise + */ + (extend: (promise: PinkySwear.GenericPromise) => PinkySwear.GenericPromise): PinkySwear.GenericPromise; + + /** + * Create a new generic promise in pending state that promises a value of a specific type. + * + * @see PinkySwear.GenericPromise + * @returns PinkySwear.GenericPromise + */ + (): PinkySwear.GenericPromise; + + /** + * Create a new promise in pending state that promises a value of a specific type and that also extends the + * returned promise object as specified in an extend function. + * + * @param extend Called when the promise is created and is ready to be extended. + * @returns PinkySwear.Promise + */ + (extend: (promise: PinkySwear.Promise) => PinkySwear.Promise): PinkySwear.Promise; + + /** + * Create a new promise in pending state that promises a value or set of values. + * + * @see PinkySwear.Promise + * @returns PinkySwear.Promise + */ + (): PinkySwear.Promise; +} + +declare var pinkySwear: PinkySwearStatic;