From fb0f3f789fb20114d63678b457a62d024f5ab785 Mon Sep 17 00:00:00 2001 From: Florian Oellerich Date: Wed, 14 Feb 2018 17:16:18 +0100 Subject: [PATCH] [retry-as-promised] add type definitions --- types/retry-as-promised/index.d.ts | 27 +++++++++++++++++++ .../retry-as-promised-tests.ts | 27 +++++++++++++++++++ types/retry-as-promised/tsconfig.json | 24 +++++++++++++++++ types/retry-as-promised/tslint.json | 3 +++ 4 files changed, 81 insertions(+) create mode 100644 types/retry-as-promised/index.d.ts create mode 100644 types/retry-as-promised/retry-as-promised-tests.ts create mode 100644 types/retry-as-promised/tsconfig.json create mode 100644 types/retry-as-promised/tslint.json diff --git a/types/retry-as-promised/index.d.ts b/types/retry-as-promised/index.d.ts new file mode 100644 index 0000000000..429e0bb6d1 --- /dev/null +++ b/types/retry-as-promised/index.d.ts @@ -0,0 +1,27 @@ +// Type definitions for retry-as-promised 2.3 +// Project: https://github.com/mickhansen/retry-as-promised +// Definitions by: Florian Oellerich +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.3 + +import Promise = require('bluebird'); + +declare namespace retryAsPromised { + type MatchOption = string | RegExp | Error; + interface Options { + $current?: number; + max?: number; + timeout?: number; + match?: MatchOption[] | MatchOption; + backoffBase?: number; + backoffExponent?: number; + report?: (message: string, obj: Options, err?: any) => void; + name?: string; + } + + type RetryCallback = ({ current }: { current: Options['$current'] }) => Promise.Thenable; + type RetryAsPromisedStatic = (callback: RetryCallback, options: Options | number) => Promise; +} + +declare const retryAsPromised: retryAsPromised.RetryAsPromisedStatic; +export = retryAsPromised; diff --git a/types/retry-as-promised/retry-as-promised-tests.ts b/types/retry-as-promised/retry-as-promised-tests.ts new file mode 100644 index 0000000000..43a08b7b9f --- /dev/null +++ b/types/retry-as-promised/retry-as-promised-tests.ts @@ -0,0 +1,27 @@ +import retry = require('retry-as-promised'); + +interface Product { + name: string; +} + +const log = (...args: any[]): void => {}; + +retry(() => Promise.resolve(), {}); +retry(() => Promise.reject('Error matching values'), {}); +retry(() => Promise.reject(new Error('No matching values')), {}); +retry(() => Promise.resolve(), { + max: 100, + timeout: 60000, + match: ['Error matching values', new Error('No matching values'), new RegExp(/Deadlock/, 'i')], + backoffBase: 100, + backoffExponent: 1.1, + name: 'Source', + report: (message, options) => { + if (options.name === 'Source') { + log(options.name); + log('iteration', options.$current); + } + } +}); +retry(() => Promise.resolve({ name: 'test' }) , {}); +retry(() => Promise.reject(new Error('No matching product')), {}); diff --git a/types/retry-as-promised/tsconfig.json b/types/retry-as-promised/tsconfig.json new file mode 100644 index 0000000000..2c136c68e2 --- /dev/null +++ b/types/retry-as-promised/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true, + "esModuleInterop": true, + "strictFunctionTypes": true + }, + "files": [ + "index.d.ts", + "retry-as-promised-tests.ts" + ] +} diff --git a/types/retry-as-promised/tslint.json b/types/retry-as-promised/tslint.json new file mode 100644 index 0000000000..f93cf8562a --- /dev/null +++ b/types/retry-as-promised/tslint.json @@ -0,0 +1,3 @@ +{ + "extends": "dtslint/dt.json" +}