From 29fc3e073559cb4a1b7a56601ca81536d00f308e Mon Sep 17 00:00:00 2001 From: Dimitri Benin Date: Sat, 22 Jul 2017 04:01:23 +0200 Subject: [PATCH] [p-queue] introduce typings (#18303) --- types/p-queue/index.d.ts | 50 ++++++++++++++++++++++++++++++++++ types/p-queue/p-queue-tests.ts | 42 ++++++++++++++++++++++++++++ types/p-queue/tsconfig.json | 22 +++++++++++++++ types/p-queue/tslint.json | 1 + 4 files changed, 115 insertions(+) create mode 100644 types/p-queue/index.d.ts create mode 100644 types/p-queue/p-queue-tests.ts create mode 100644 types/p-queue/tsconfig.json create mode 100644 types/p-queue/tslint.json diff --git a/types/p-queue/index.d.ts b/types/p-queue/index.d.ts new file mode 100644 index 0000000000..3cc6acef53 --- /dev/null +++ b/types/p-queue/index.d.ts @@ -0,0 +1,50 @@ +// Type definitions for p-queue 1.1 +// Project: https://github.com/sindresorhus/p-queue#readme +// Definitions by: BendingBender +// Evan Shortiss +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.3 + +export = PQueue; + +declare class PQueue { + size: number; + pending: number; + + constructor(opts?: PQueue.Options); + + add(fn: PQueue.Task, opts?: O): Promise; + + onEmpty(): Promise; + + clear(): void; +} + +declare namespace PQueue { + interface QueueAddOptions { + [key: string]: any; + } + + interface QueueClassConstructor { + new(): QueueClass; + } + + interface QueueClass { + size: number; + + enqueue(run: () => void, options?: O): void; + + dequeue(): (() => void) | undefined; + } + + interface Options { + queueClass?: QueueClassConstructor; + concurrency?: number; + } + + interface DefaultAddOptions { + priority?: number; + } + + type Task = () => Promise; +} diff --git a/types/p-queue/p-queue-tests.ts b/types/p-queue/p-queue-tests.ts new file mode 100644 index 0000000000..6a63e9e607 --- /dev/null +++ b/types/p-queue/p-queue-tests.ts @@ -0,0 +1,42 @@ +import PQueue = require('p-queue'); + +const queue = new PQueue({concurrency: 1}); + +queue.add(() => Promise.resolve('sindresorhus.com')).then((sindre) => { + const str: string = sindre; +}); + +Promise.resolve((): Promise => Promise.resolve('unicorn')) + .then(task => queue.add(task, {priority: 5})) + .then(unicorn => { + const str: string = unicorn; + }); + +queue.onEmpty().then(() => { +}); +queue.clear(); + +let num: number; +num = queue.size; +num = queue.pending; + +class QueueClass implements PQueue.QueueClass<{ any: string }> { + private queue: Array<() => void>; + + size = 0; + + constructor() { + this.queue = []; + } + + enqueue(run: () => void, options: { any: string }) { + this.queue.push(run); + } + + dequeue() { + return this.queue.shift(); + } +} + +const queue2 = new PQueue({queueClass: QueueClass}); +queue2.add(() => Promise.resolve(), {any: 'hi'}); diff --git a/types/p-queue/tsconfig.json b/types/p-queue/tsconfig.json new file mode 100644 index 0000000000..6fd210c82f --- /dev/null +++ b/types/p-queue/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", + "p-queue-tests.ts" + ] +} diff --git a/types/p-queue/tslint.json b/types/p-queue/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/p-queue/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" }