From dd813f10a97bd0d5c59c250c4aef11aa347a0e61 Mon Sep 17 00:00:00 2001 From: Remco Haszing Date: Thu, 11 Jul 2019 22:59:46 +0200 Subject: [PATCH] Add type definitions for service-worker-mock (#36791) * Add type definitions for service-worker-mock * Fix linting issues * Process feedback --- types/service-worker-mock/index.d.ts | 56 +++++++++++++++++++ .../service-worker-mock-tests.ts | 18 ++++++ types/service-worker-mock/tsconfig.json | 24 ++++++++ types/service-worker-mock/tslint.json | 1 + 4 files changed, 99 insertions(+) create mode 100644 types/service-worker-mock/index.d.ts create mode 100644 types/service-worker-mock/service-worker-mock-tests.ts create mode 100644 types/service-worker-mock/tsconfig.json create mode 100644 types/service-worker-mock/tslint.json diff --git a/types/service-worker-mock/index.d.ts b/types/service-worker-mock/index.d.ts new file mode 100644 index 0000000000..eb844d1d45 --- /dev/null +++ b/types/service-worker-mock/index.d.ts @@ -0,0 +1,56 @@ +// Type definitions for service-worker-mock 2.0 +// Project: https://github.com/pinterest/service-workers/tree/master/packages/service-worker-mock#readme +// Definitions by: Remco Haszing +// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped +// TypeScript Version: 2.8 + +export = makeServiceWorkerEnv; +declare function makeServiceWorkerEnv(): WorkerGlobalScope; + +declare namespace makeServiceWorkerEnv { + interface Caches { + [key: string]: Cache; + } + + type Listeners = Map; + + interface Snapshot { + /** + * A key/value map of current cache contents. + */ + caches: Caches; + + /** + * A list of active clients. + */ + clients: Client[]; + + /** + * A list of active notifications. + */ + notifications: Notification[]; + } +} + +declare global { + /** + * A key/value map of active listeners (`install`/`activate`/`fetch`/etc). + */ + const listeners: makeServiceWorkerEnv.Listeners; + + /** + * Used to trigger active listeners. + */ + function trigger(type: keyof ServiceWorkerGlobalScopeEventMap): Promise; + + /** + * Used to generate a snapshot of the service worker internals. + */ + function snapshot(): makeServiceWorkerEnv.Snapshot; + + interface WorkerGlobalScope { + listeners: typeof listeners; + trigger: typeof trigger; + snapshot: typeof snapshot; + } +} diff --git a/types/service-worker-mock/service-worker-mock-tests.ts b/types/service-worker-mock/service-worker-mock-tests.ts new file mode 100644 index 0000000000..2e3f2fd6ee --- /dev/null +++ b/types/service-worker-mock/service-worker-mock-tests.ts @@ -0,0 +1,18 @@ +import makeServiceWorkerEnv = require('service-worker-mock'); + +const mock = makeServiceWorkerEnv(); + +Object.assign(self, mock); + +trigger('install'); +mock.trigger('install'); +trigger('fetch'); +mock.trigger('fetch'); + +const emitFetch = listeners.get('fetch') as EventListener; +emitFetch(new Event('fetch')); + +mock.caches.open('OLD_CACHE'); +console.log(snapshot().caches.OLD_CACHE); +console.log(self.snapshot().clients[0].id); +console.log(mock.snapshot().notifications[0].body); diff --git a/types/service-worker-mock/tsconfig.json b/types/service-worker-mock/tsconfig.json new file mode 100644 index 0000000000..cb6786d336 --- /dev/null +++ b/types/service-worker-mock/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "module": "commonjs", + "lib": [ + "es6", + "webworker" + ], + "noImplicitAny": true, + "noImplicitThis": true, + "strictFunctionTypes": true, + "strictNullChecks": true, + "baseUrl": "../", + "typeRoots": [ + "../" + ], + "types": [], + "noEmit": true, + "forceConsistentCasingInFileNames": true + }, + "files": [ + "index.d.ts", + "service-worker-mock-tests.ts" + ] +} diff --git a/types/service-worker-mock/tslint.json b/types/service-worker-mock/tslint.json new file mode 100644 index 0000000000..3db14f85ea --- /dev/null +++ b/types/service-worker-mock/tslint.json @@ -0,0 +1 @@ +{ "extends": "dtslint/dt.json" }