123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272 |
- import { TrustedScriptURL } from 'trusted-types/lib';
- import { WorkboxEventTarget } from './utils/WorkboxEventTarget.js';
- import './_version.js';
- /**
- * A class to aid in handling service worker registration, updates, and
- * reacting to service worker lifecycle events.
- *
- * @fires {@link workbox-window.Workbox#message}
- * @fires {@link workbox-window.Workbox#installed}
- * @fires {@link workbox-window.Workbox#waiting}
- * @fires {@link workbox-window.Workbox#controlling}
- * @fires {@link workbox-window.Workbox#activated}
- * @fires {@link workbox-window.Workbox#redundant}
- * @memberof workbox-window
- */
- declare class Workbox extends WorkboxEventTarget {
- private readonly _scriptURL;
- private readonly _registerOptions;
- private _updateFoundCount;
- private readonly _swDeferred;
- private readonly _activeDeferred;
- private readonly _controllingDeferred;
- private _registrationTime;
- private _isUpdate?;
- private _compatibleControllingSW?;
- private _registration?;
- private _sw?;
- private readonly _ownSWs;
- private _externalSW?;
- private _waitingTimeout?;
- /**
- * Creates a new Workbox instance with a script URL and service worker
- * options. The script URL and options are the same as those used when
- * calling [navigator.serviceWorker.register(scriptURL, options)](https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/register).
- *
- * @param {string|TrustedScriptURL} scriptURL The service worker script
- * associated with this instance. Using a
- * [`TrustedScriptURL`](https://web.dev/trusted-types/) is supported.
- * @param {Object} [registerOptions] The service worker options associated
- * with this instance.
- */
- constructor(scriptURL: string | TrustedScriptURL, registerOptions?: {});
- /**
- * Registers a service worker for this instances script URL and service
- * worker options. By default this method delays registration until after
- * the window has loaded.
- *
- * @param {Object} [options]
- * @param {Function} [options.immediate=false] Setting this to true will
- * register the service worker immediately, even if the window has
- * not loaded (not recommended).
- */
- register({ immediate }?: {
- immediate?: boolean | undefined;
- }): Promise<ServiceWorkerRegistration | undefined>;
- /**
- * Checks for updates of the registered service worker.
- */
- update(): Promise<void>;
- /**
- * Resolves to the service worker registered by this instance as soon as it
- * is active. If a service worker was already controlling at registration
- * time then it will resolve to that if the script URLs (and optionally
- * script versions) match, otherwise it will wait until an update is found
- * and activates.
- *
- * @return {Promise<ServiceWorker>}
- */
- get active(): Promise<ServiceWorker>;
- /**
- * Resolves to the service worker registered by this instance as soon as it
- * is controlling the page. If a service worker was already controlling at
- * registration time then it will resolve to that if the script URLs (and
- * optionally script versions) match, otherwise it will wait until an update
- * is found and starts controlling the page.
- * Note: the first time a service worker is installed it will active but
- * not start controlling the page unless `clients.claim()` is called in the
- * service worker.
- *
- * @return {Promise<ServiceWorker>}
- */
- get controlling(): Promise<ServiceWorker>;
- /**
- * Resolves with a reference to a service worker that matches the script URL
- * of this instance, as soon as it's available.
- *
- * If, at registration time, there's already an active or waiting service
- * worker with a matching script URL, it will be used (with the waiting
- * service worker taking precedence over the active service worker if both
- * match, since the waiting service worker would have been registered more
- * recently).
- * If there's no matching active or waiting service worker at registration
- * time then the promise will not resolve until an update is found and starts
- * installing, at which point the installing service worker is used.
- *
- * @return {Promise<ServiceWorker>}
- */
- getSW(): Promise<ServiceWorker>;
- /**
- * Sends the passed data object to the service worker registered by this
- * instance (via {@link workbox-window.Workbox#getSW}) and resolves
- * with a response (if any).
- *
- * A response can be set in a message handler in the service worker by
- * calling `event.ports[0].postMessage(...)`, which will resolve the promise
- * returned by `messageSW()`. If no response is set, the promise will never
- * resolve.
- *
- * @param {Object} data An object to send to the service worker
- * @return {Promise<Object>}
- */
- messageSW(data: object): Promise<any>;
- /**
- * Sends a `{type: 'SKIP_WAITING'}` message to the service worker that's
- * currently in the `waiting` state associated with the current registration.
- *
- * If there is no current registration or no service worker is `waiting`,
- * calling this will have no effect.
- */
- messageSkipWaiting(): void;
- /**
- * Checks for a service worker already controlling the page and returns
- * it if its script URL matches.
- *
- * @private
- * @return {ServiceWorker|undefined}
- */
- private _getControllingSWIfCompatible;
- /**
- * Registers a service worker for this instances script URL and register
- * options and tracks the time registration was complete.
- *
- * @private
- */
- private _registerScript;
- /**
- * @private
- */
- private readonly _onUpdateFound;
- /**
- * @private
- * @param {Event} originalEvent
- */
- private readonly _onStateChange;
- /**
- * @private
- * @param {Event} originalEvent
- */
- private readonly _onControllerChange;
- /**
- * @private
- * @param {Event} originalEvent
- */
- private readonly _onMessage;
- }
- export { Workbox };
- /**
- * The `message` event is dispatched any time a `postMessage` is received.
- *
- * @event workbox-window.Workbox#message
- * @type {WorkboxEvent}
- * @property {*} data The `data` property from the original `message` event.
- * @property {Event} originalEvent The original [`message`]{@link https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent}
- * event.
- * @property {string} type `message`.
- * @property {MessagePort[]} ports The `ports` value from `originalEvent`.
- * @property {Workbox} target The `Workbox` instance.
- */
- /**
- * The `installed` event is dispatched if the state of a
- * {@link workbox-window.Workbox} instance's
- * {@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-registered-sw|registered service worker}
- * changes to `installed`.
- *
- * Then can happen either the very first time a service worker is installed,
- * or after an update to the current service worker is found. In the case
- * of an update being found, the event's `isUpdate` property will be `true`.
- *
- * @event workbox-window.Workbox#installed
- * @type {WorkboxEvent}
- * @property {ServiceWorker} sw The service worker instance.
- * @property {Event} originalEvent The original [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}
- * event.
- * @property {boolean|undefined} isUpdate True if a service worker was already
- * controlling when this `Workbox` instance called `register()`.
- * @property {boolean|undefined} isExternal True if this event is associated
- * with an [external service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-window#when_an_unexpected_version_of_the_service_worker_is_found}.
- * @property {string} type `installed`.
- * @property {Workbox} target The `Workbox` instance.
- */
- /**
- * The `waiting` event is dispatched if the state of a
- * {@link workbox-window.Workbox} instance's
- * [registered service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-registered-sw}
- * changes to `installed` and then doesn't immediately change to `activating`.
- * It may also be dispatched if a service worker with the same
- * [`scriptURL`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/scriptURL}
- * was already waiting when the {@link workbox-window.Workbox#register}
- * method was called.
- *
- * @event workbox-window.Workbox#waiting
- * @type {WorkboxEvent}
- * @property {ServiceWorker} sw The service worker instance.
- * @property {Event|undefined} originalEvent The original
- * [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}
- * event, or `undefined` in the case where the service worker was waiting
- * to before `.register()` was called.
- * @property {boolean|undefined} isUpdate True if a service worker was already
- * controlling when this `Workbox` instance called `register()`.
- * @property {boolean|undefined} isExternal True if this event is associated
- * with an [external service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-window#when_an_unexpected_version_of_the_service_worker_is_found}.
- * @property {boolean|undefined} wasWaitingBeforeRegister True if a service worker with
- * a matching `scriptURL` was already waiting when this `Workbox`
- * instance called `register()`.
- * @property {string} type `waiting`.
- * @property {Workbox} target The `Workbox` instance.
- */
- /**
- * The `controlling` event is dispatched if a
- * [`controllerchange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/oncontrollerchange}
- * fires on the service worker [container]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer}
- * and the [`scriptURL`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/scriptURL}
- * of the new [controller]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/controller}
- * matches the `scriptURL` of the `Workbox` instance's
- * [registered service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-registered-sw}.
- *
- * @event workbox-window.Workbox#controlling
- * @type {WorkboxEvent}
- * @property {ServiceWorker} sw The service worker instance.
- * @property {Event} originalEvent The original [`controllerchange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorkerContainer/oncontrollerchange}
- * event.
- * @property {boolean|undefined} isUpdate True if a service worker was already
- * controlling when this service worker was registered.
- * @property {boolean|undefined} isExternal True if this event is associated
- * with an [external service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-window#when_an_unexpected_version_of_the_service_worker_is_found}.
- * @property {string} type `controlling`.
- * @property {Workbox} target The `Workbox` instance.
- */
- /**
- * The `activated` event is dispatched if the state of a
- * {@link workbox-window.Workbox} instance's
- * {@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-registered-sw|registered service worker}
- * changes to `activated`.
- *
- * @event workbox-window.Workbox#activated
- * @type {WorkboxEvent}
- * @property {ServiceWorker} sw The service worker instance.
- * @property {Event} originalEvent The original [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}
- * event.
- * @property {boolean|undefined} isUpdate True if a service worker was already
- * controlling when this `Workbox` instance called `register()`.
- * @property {boolean|undefined} isExternal True if this event is associated
- * with an [external service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-window#when_an_unexpected_version_of_the_service_worker_is_found}.
- * @property {string} type `activated`.
- * @property {Workbox} target The `Workbox` instance.
- */
- /**
- * The `redundant` event is dispatched if the state of a
- * {@link workbox-window.Workbox} instance's
- * [registered service worker]{@link https://developers.google.com/web/tools/workbox/modules/workbox-precaching#def-registered-sw}
- * changes to `redundant`.
- *
- * @event workbox-window.Workbox#redundant
- * @type {WorkboxEvent}
- * @property {ServiceWorker} sw The service worker instance.
- * @property {Event} originalEvent The original [`statechange`]{@link https://developer.mozilla.org/en-US/docs/Web/API/ServiceWorker/onstatechange}
- * event.
- * @property {boolean|undefined} isUpdate True if a service worker was already
- * controlling when this `Workbox` instance called `register()`.
- * @property {string} type `redundant`.
- * @property {Workbox} target The `Workbox` instance.
- */
|