From dd1a1d163c62e9604de88dd63a984ff3d0ffcac8 Mon Sep 17 00:00:00 2001 From: Karol Majewski Date: Mon, 31 Dec 2018 19:32:32 +0100 Subject: [PATCH 1/4] Add definitions for task-worklet --- types/task-worklet/index.d.ts | 36 ++++++++++++++++++++++++ types/task-worklet/task-worklet-tests.ts | 23 +++++++++++++++ types/task-worklet/tsconfig.json | 24 ++++++++++++++++ types/task-worklet/tslint.json | 1 + 4 files changed, 84 insertions(+) create mode 100644 types/task-worklet/index.d.ts create mode 100644 types/task-worklet/task-worklet-tests.ts create mode 100644 types/task-worklet/tsconfig.json create mode 100644 types/task-worklet/tslint.json diff --git a/types/task-worklet/index.d.ts b/types/task-worklet/index.d.ts new file mode 100644 index 0000000000..add9b1b3dc --- /dev/null +++ b/types/task-worklet/index.d.ts @@ -0,0 +1,36 @@ +// Type definitions for task-worklet 0.1 +// Project: https://github.com/GoogleChromeLabs/task-worklet +// Definitions by: Karol Majewski +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 3.0 + +declare class TaskQueue { + constructor(options?: Options); + postTask(taskName: U['name'], ...args: Parameters): Task>; + addModule(moduleURL: string): Promise; +} + +interface Options { + size?: number; +} + +interface TaskDescriptor { + name: string; + (...args: any): any; +} + +export interface Task { + id: number; + state: State; + result: Promise; +} + +export type State = + | 'cancelled' + | 'completed' + | 'fulfilled' + | 'pending' + | 'scheduled'; + +export default TaskQueue; +export as namespace TaskQueue; diff --git a/types/task-worklet/task-worklet-tests.ts b/types/task-worklet/task-worklet-tests.ts new file mode 100644 index 0000000000..30a5072a2b --- /dev/null +++ b/types/task-worklet/task-worklet-tests.ts @@ -0,0 +1,23 @@ +import TaskQueue, { Task, State } from 'task-worklet'; + +interface Fetcher { + name: 'fetch'; + (input: RequestInfo, init?: RequestInit): Promise; +} + +const unsafe = new TaskQueue(); // $ExpectType TaskQueue +const withEmptyOptions = new TaskQueue({}); // $ExpectType TaskQueue +const withValidOptions = new TaskQueue({ size: 2 }); // $ExpectType TaskQueue + +const queue = new TaskQueue(); // $ExpectType TaskQueue +queue.addModule('/fetcher-worklet.js'); // $ExpectType Promise +const task = queue.postTask('fetch', 'https://example.com'); // $ExpectType Task> + +async () => { + const result = await task.result; // $ExpectType Response + const id = task.id; // $ExpectType number + const state = task.state; // $ExpectType State +}; + +new TaskQueue({ size: 1, excessProperty: true }); // $ExpectError +queue.postTask('incorrect-task-name'); // $ExpectError diff --git a/types/task-worklet/tsconfig.json b/types/task-worklet/tsconfig.json new file mode 100644 index 0000000000..4697c07f30 --- /dev/null +++ b/types/task-worklet/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6", + "dom" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true, + "strictFunctionTypes": true + }, + "files": [ + "index.d.ts", + "task-worklet-tests.ts" + ] +} diff --git a/types/task-worklet/tslint.json b/types/task-worklet/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/task-worklet/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" } From 0e4eb7633c0a86dd2d32ca8d3b9925e34e1572a6 Mon Sep 17 00:00:00 2001 From: Karol Majewski Date: Mon, 31 Dec 2018 20:32:24 +0100 Subject: [PATCH 2/4] Bump up the required version of TypeScript --- types/task-worklet/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/task-worklet/index.d.ts b/types/task-worklet/index.d.ts index add9b1b3dc..e1c68ffd84 100644 --- a/types/task-worklet/index.d.ts +++ b/types/task-worklet/index.d.ts @@ -2,7 +2,7 @@ // Project: https://github.com/GoogleChromeLabs/task-worklet // Definitions by: Karol Majewski // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -// TypeScript Version: 3.0 +// TypeScript Version: 3.1 declare class TaskQueue { constructor(options?: Options); From 50523db106db67cb488d1c587155cecdcd9fa7f2 Mon Sep 17 00:00:00 2001 From: Karol Majewski Date: Mon, 31 Dec 2018 23:27:20 +0100 Subject: [PATCH 3/4] Offer different version for TypeScript >3.1 --- types/task-worklet/index.d.ts | 13 +++----- types/task-worklet/package.json | 14 +++++++++ types/task-worklet/task-worklet-tests.ts | 12 ++++---- types/task-worklet/ts3.1/index.d.ts | 30 +++++++++++++++++++ .../task-worklet/ts3.1/task-worklet-tests.ts | 23 ++++++++++++++ types/task-worklet/ts3.1/tsconfig.json | 24 +++++++++++++++ types/task-worklet/ts3.1/tslint.json | 1 + 7 files changed, 102 insertions(+), 15 deletions(-) create mode 100644 types/task-worklet/package.json create mode 100644 types/task-worklet/ts3.1/index.d.ts create mode 100644 types/task-worklet/ts3.1/task-worklet-tests.ts create mode 100644 types/task-worklet/ts3.1/tsconfig.json create mode 100644 types/task-worklet/ts3.1/tslint.json diff --git a/types/task-worklet/index.d.ts b/types/task-worklet/index.d.ts index e1c68ffd84..69e52bf4ef 100644 --- a/types/task-worklet/index.d.ts +++ b/types/task-worklet/index.d.ts @@ -2,11 +2,11 @@ // Project: https://github.com/GoogleChromeLabs/task-worklet // Definitions by: Karol Majewski // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -// TypeScript Version: 3.1 +// TypeScript Version: 2.9 -declare class TaskQueue { +declare class TaskQueue { constructor(options?: Options); - postTask(taskName: U['name'], ...args: Parameters): Task>; + postTask(taskName: string, ...args: any[]): Task; addModule(moduleURL: string): Promise; } @@ -14,12 +14,7 @@ interface Options { size?: number; } -interface TaskDescriptor { - name: string; - (...args: any): any; -} - -export interface Task { +export interface Task { id: number; state: State; result: Promise; diff --git a/types/task-worklet/package.json b/types/task-worklet/package.json new file mode 100644 index 0000000000..49b3fec869 --- /dev/null +++ b/types/task-worklet/package.json @@ -0,0 +1,14 @@ +{ + "private": true, + "types": "index", + "typesVersions": { + ">=3.1.0-0": { + "*": [ + "ts3.1/*" + ] + } + }, + "dependencies": { + "typescript": ">2.9.0" + } +} diff --git a/types/task-worklet/task-worklet-tests.ts b/types/task-worklet/task-worklet-tests.ts index 30a5072a2b..c4abfe898b 100644 --- a/types/task-worklet/task-worklet-tests.ts +++ b/types/task-worklet/task-worklet-tests.ts @@ -5,16 +5,16 @@ interface Fetcher { (input: RequestInfo, init?: RequestInit): Promise; } -const unsafe = new TaskQueue(); // $ExpectType TaskQueue -const withEmptyOptions = new TaskQueue({}); // $ExpectType TaskQueue -const withValidOptions = new TaskQueue({ size: 2 }); // $ExpectType TaskQueue +const unsafe = new TaskQueue(); // $ExpectType TaskQueue +const withEmptyOptions = new TaskQueue({}); // $ExpectType TaskQueue +const withValidOptions = new TaskQueue({ size: 2 }); // $ExpectType TaskQueue -const queue = new TaskQueue(); // $ExpectType TaskQueue +const queue = new TaskQueue(); // $ExpectType TaskQueue queue.addModule('/fetcher-worklet.js'); // $ExpectType Promise -const task = queue.postTask('fetch', 'https://example.com'); // $ExpectType Task> +const task = queue.postTask('fetch', 'https://example.com'); // $ExpectType Task async () => { - const result = await task.result; // $ExpectType Response + const result = await task.result; // $ExpectType any const id = task.id; // $ExpectType number const state = task.state; // $ExpectType State }; diff --git a/types/task-worklet/ts3.1/index.d.ts b/types/task-worklet/ts3.1/index.d.ts new file mode 100644 index 0000000000..158b9b40af --- /dev/null +++ b/types/task-worklet/ts3.1/index.d.ts @@ -0,0 +1,30 @@ +declare class TaskQueue { + constructor(options?: Options); + postTask(taskName: U['name'], ...args: Parameters): Task>; + addModule(moduleURL: string): Promise; +} + +interface Options { + size?: number; +} + +interface TaskDescriptor { + name: string; + (...args: any): any; +} + +export interface Task { + id: number; + state: State; + result: Promise; +} + +export type State = + | 'cancelled' + | 'completed' + | 'fulfilled' + | 'pending' + | 'scheduled'; + +export default TaskQueue; +export as namespace TaskQueue; diff --git a/types/task-worklet/ts3.1/task-worklet-tests.ts b/types/task-worklet/ts3.1/task-worklet-tests.ts new file mode 100644 index 0000000000..30a5072a2b --- /dev/null +++ b/types/task-worklet/ts3.1/task-worklet-tests.ts @@ -0,0 +1,23 @@ +import TaskQueue, { Task, State } from 'task-worklet'; + +interface Fetcher { + name: 'fetch'; + (input: RequestInfo, init?: RequestInit): Promise; +} + +const unsafe = new TaskQueue(); // $ExpectType TaskQueue +const withEmptyOptions = new TaskQueue({}); // $ExpectType TaskQueue +const withValidOptions = new TaskQueue({ size: 2 }); // $ExpectType TaskQueue + +const queue = new TaskQueue(); // $ExpectType TaskQueue +queue.addModule('/fetcher-worklet.js'); // $ExpectType Promise +const task = queue.postTask('fetch', 'https://example.com'); // $ExpectType Task> + +async () => { + const result = await task.result; // $ExpectType Response + const id = task.id; // $ExpectType number + const state = task.state; // $ExpectType State +}; + +new TaskQueue({ size: 1, excessProperty: true }); // $ExpectError +queue.postTask('incorrect-task-name'); // $ExpectError diff --git a/types/task-worklet/ts3.1/tsconfig.json b/types/task-worklet/ts3.1/tsconfig.json new file mode 100644 index 0000000000..e5076ca083 --- /dev/null +++ b/types/task-worklet/ts3.1/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6", + "dom" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictNullChecks": true, + "baseUrl": "../../", + "typeRoots": [ + "../../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true, + "strictFunctionTypes": true + }, + "files": [ + "index.d.ts", + "task-worklet-tests.ts" + ] +} diff --git a/types/task-worklet/ts3.1/tslint.json b/types/task-worklet/ts3.1/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/task-worklet/ts3.1/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" } From 336e93f3bc77af25c7a81c4ebacd949fdd12af96 Mon Sep 17 00:00:00 2001 From: Karol Majewski Date: Wed, 2 Jan 2019 23:40:37 +0100 Subject: [PATCH 4/4] Use the correct repository URL --- types/task-worklet/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/types/task-worklet/index.d.ts b/types/task-worklet/index.d.ts index 69e52bf4ef..05128aa465 100644 --- a/types/task-worklet/index.d.ts +++ b/types/task-worklet/index.d.ts @@ -1,5 +1,5 @@ // Type definitions for task-worklet 0.1 -// Project: https://github.com/GoogleChromeLabs/task-worklet +// Project: https://github.com/developit/task-worklet // Definitions by: Karol Majewski // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.9