Skip to content

Commit

Permalink
[p-queue] introduce typings (#18303)
Browse files Browse the repository at this point in the history
  • Loading branch information
BendingBender authored and weswigham committed Jul 22, 2017
1 parent 01764b6 commit 29fc3e0
Show file tree
Hide file tree
Showing 4 changed files with 115 additions and 0 deletions.
50 changes: 50 additions & 0 deletions types/p-queue/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// Type definitions for p-queue 1.1
// Project: https://github.com/sindresorhus/p-queue#readme
// Definitions by: BendingBender <https://github.com/BendingBender>
// Evan Shortiss <https://github.com/evanshortiss>
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
// TypeScript Version: 2.3

export = PQueue;

declare class PQueue<O extends PQueue.QueueAddOptions = PQueue.DefaultAddOptions> {
size: number;
pending: number;

constructor(opts?: PQueue.Options<O>);

add<T>(fn: PQueue.Task<T>, opts?: O): Promise<T>;

onEmpty(): Promise<void>;

clear(): void;
}

declare namespace PQueue {
interface QueueAddOptions {
[key: string]: any;
}

interface QueueClassConstructor<O extends QueueAddOptions> {
new(): QueueClass<O>;
}

interface QueueClass<O extends QueueAddOptions> {
size: number;

enqueue(run: () => void, options?: O): void;

dequeue(): (() => void) | undefined;
}

interface Options<O extends QueueAddOptions> {
queueClass?: QueueClassConstructor<O>;
concurrency?: number;
}

interface DefaultAddOptions {
priority?: number;
}

type Task<T> = () => Promise<T>;
}
42 changes: 42 additions & 0 deletions types/p-queue/p-queue-tests.ts
Original file line number Diff line number Diff line change
@@ -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<string> => 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'});
22 changes: 22 additions & 0 deletions types/p-queue/tsconfig.json
Original file line number Diff line number Diff line change
@@ -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"
]
}
1 change: 1 addition & 0 deletions types/p-queue/tslint.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{ "extends": "dtslint/dt.json" }

0 comments on commit 29fc3e0

Please sign in to comment.