From a83ba299324a4c14951d14cd5c5ca78d0ded67fe Mon Sep 17 00:00:00 2001 From: sjoerdd Date: Thu, 22 Jun 2017 14:06:26 +0200 Subject: [PATCH] Initial version. --- types/promise-dag/index.d.ts | 20 +++++++++++++++ types/promise-dag/promise-dag-tests.ts | 35 ++++++++++++++++++++++++++ types/promise-dag/tsconfig.json | 22 ++++++++++++++++ types/promise-dag/tslint.json | 1 + 4 files changed, 78 insertions(+) create mode 100644 types/promise-dag/index.d.ts create mode 100644 types/promise-dag/promise-dag-tests.ts create mode 100644 types/promise-dag/tsconfig.json create mode 100644 types/promise-dag/tslint.json diff --git a/types/promise-dag/index.d.ts b/types/promise-dag/index.d.ts new file mode 100644 index 0000000000..4428e2da91 --- /dev/null +++ b/types/promise-dag/index.d.ts @@ -0,0 +1,20 @@ +// Type definitions for promise-dag 1.0 +// Project: https://github.com/vvvvalvalval/promise-dag#readme +// Definitions by: Sjoerd Diepen +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped + +export type Step = string | ((...args: any[]) => PromiseLike); + +export interface Run { + (steps: { [name: string]: Step[]; }, required?: string[]): { [name: string]: Promise; }; +} + +export interface PromiseImplementation { + resolve(value: T): PromiseLike; + reject(value: T): PromiseLike; + all(values: (T | PromiseLike)[]): PromiseLike; +} + +export const run: Run; + +export function implement(implementation: PromiseImplementation): Run; diff --git a/types/promise-dag/promise-dag-tests.ts b/types/promise-dag/promise-dag-tests.ts new file mode 100644 index 0000000000..f947f4ee75 --- /dev/null +++ b/types/promise-dag/promise-dag-tests.ts @@ -0,0 +1,35 @@ +import * as promiseDag from "promise-dag"; + +// describe the computation as steps which depend on previous steps. +// in this cooking example, functions which return a promise are prefixed with `p_`. +const mushroomPastaRecipe = { + hotWater: [(): Promise => p_boilWater("1L")], + rawPasta: [(): Promise => p_pickIngredient("pasta")], + cookedPasta: ["hotWater", "rawPasta", (hotWater: string, rawPasta: string) => p_boil(hotWater, rawPasta, "10 minutes")], + + meal: ["cookedPasta", (preparedMeal: string): Promise => Promise.resolve(preparedMeal)] +}; + +const runCustomPromise = promiseDag.implement({ + resolve: (v: any): Promise => Promise.resolve(v), + reject: (err: any): Promise => Promise.resolve(err), + all: (ps: (any | PromiseLike)[]): Promise => Promise.all(ps) +}); + +runCustomPromise(mushroomPastaRecipe, ["meal"]).meal.then(eat); + +function eat(meal: string) { + let consume = `eating ${meal}`; +} + +function p_boilWater(volume: string): Promise { + return Promise.resolve(volume); +} + +function p_pickIngredient(ingredient: string): Promise { + return Promise.resolve(ingredient); +} + +function p_boil(volume: string, ingredient: string, duration: string): Promise { + return Promise.resolve(`cooked ${ingredient} in ${volume} for ${duration}`); +} diff --git a/types/promise-dag/tsconfig.json b/types/promise-dag/tsconfig.json new file mode 100644 index 0000000000..97423097e2 --- /dev/null +++ b/types/promise-dag/tsconfig.json @@ -0,0 +1,22 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "promise-dag-tests.ts" + ] +} diff --git a/types/promise-dag/tslint.json b/types/promise-dag/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/promise-dag/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" }