You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
272 lines
13 KiB
272 lines
13 KiB
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. |
|
*/
|
|
|