diff --git a/types/offscreen-canvas/create-worker.d.ts b/types/offscreen-canvas/create-worker.d.ts new file mode 100644 index 0000000000..fe03a09099 --- /dev/null +++ b/types/offscreen-canvas/create-worker.d.ts @@ -0,0 +1,11 @@ +declare function createWorker( + canvas: HTMLCanvasElement, + workerUrl: string, + listener: (ev: MessageEvent) => any, +): WorkerInterface; +interface WorkerInterface { + post(message: any, transfer: Transferable[]): void; + post(message: any, options?: PostMessageOptions): void; +} + +export = createWorker; diff --git a/types/offscreen-canvas/index.d.ts b/types/offscreen-canvas/index.d.ts new file mode 100644 index 0000000000..bd448a5c0d --- /dev/null +++ b/types/offscreen-canvas/index.d.ts @@ -0,0 +1,10 @@ +// Type definitions for offscreen-canvas 0.1 +// Project: https://github.com/ai/offscreen-canvas#readme +// Definitions by: Peter Błażejewicz +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// Minimum TypeScript Version: 3.5 + +import createWorker = require('./create-worker'); +import insideWorker = require('./inside-worker'); + +export { createWorker, insideWorker }; diff --git a/types/offscreen-canvas/inside-worker.d.ts b/types/offscreen-canvas/inside-worker.d.ts new file mode 100644 index 0000000000..1ef1e22727 --- /dev/null +++ b/types/offscreen-canvas/inside-worker.d.ts @@ -0,0 +1,8 @@ +declare function insideWorker(listener: (ev: MessageEvent) => any): WorkerInterface; +interface WorkerInterface { + post(message: any, transfer: Transferable[]): void; + post(message: any, options?: PostMessageOptions): void; + isWorker: boolean; +} + +export = insideWorker; diff --git a/types/offscreen-canvas/offscreen-canvas-tests.ts b/types/offscreen-canvas/offscreen-canvas-tests.ts new file mode 100644 index 0000000000..f54c648f4d --- /dev/null +++ b/types/offscreen-canvas/offscreen-canvas-tests.ts @@ -0,0 +1,23 @@ +// index.js +import createWorker = require('offscreen-canvas/create-worker'); +import insideWorker = require('offscreen-canvas/inside-worker'); + +const workerUrl = document.querySelector('[rel=preload][as=script]')!.href; +const canvas: HTMLCanvasElement = document.querySelector('#canvas')!; +const button: HTMLButtonElement = document.querySelector('#button')!; + +const workerOne = createWorker(canvas, workerUrl, e => { + // Messages from the worker +}); + +button.addEventListener('click', () => { + workerOne.post({ message: 'update' }); +}); + +const workerTwo = insideWorker(e => { + if (e.data.canvas) { + // Draw on the canvas + } else if (e.data.message === 'move') { + // Messages from main thread + } +}); diff --git a/types/offscreen-canvas/tsconfig.json b/types/offscreen-canvas/tsconfig.json new file mode 100644 index 0000000000..1e5f282408 --- /dev/null +++ b/types/offscreen-canvas/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6", + "DOM" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictFunctionTypes": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "offscreen-canvas-tests.ts" + ] +} diff --git a/types/offscreen-canvas/tslint.json b/types/offscreen-canvas/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/offscreen-canvas/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" }