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.
69 lines
2.4 KiB
69 lines
2.4 KiB
/* |
|
Copyright 2019 Google LLC |
|
|
|
Use of this source code is governed by an MIT-style |
|
license that can be found in the LICENSE file or at |
|
https://opensource.org/licenses/MIT. |
|
*/ |
|
|
|
import {logger} from 'workbox-core/_private/logger.mjs'; |
|
import {getOrCreatePrecacheController} from './utils/getOrCreatePrecacheController.mjs'; |
|
import {precachePlugins} from './utils/precachePlugins.mjs'; |
|
import './_version.mjs'; |
|
|
|
|
|
const installListener = (event) => { |
|
const precacheController = getOrCreatePrecacheController(); |
|
const plugins = precachePlugins.get(); |
|
|
|
event.waitUntil( |
|
precacheController.install({event, plugins}) |
|
.catch((error) => { |
|
if (process.env.NODE_ENV !== 'production') { |
|
logger.error(`Service worker installation failed. It will ` + |
|
`be retried automatically during the next navigation.`); |
|
} |
|
// Re-throw the error to ensure installation fails. |
|
throw error; |
|
}) |
|
); |
|
}; |
|
|
|
const activateListener = (event) => { |
|
const precacheController = getOrCreatePrecacheController(); |
|
const plugins = precachePlugins.get(); |
|
|
|
event.waitUntil(precacheController.activate({event, plugins})); |
|
}; |
|
|
|
/** |
|
* Adds items to the precache list, removing any duplicates and |
|
* stores the files in the |
|
* ["precache cache"]{@link module:workbox-core.cacheNames} when the service |
|
* worker installs. |
|
* |
|
* This method can be called multiple times. |
|
* |
|
* Please note: This method **will not** serve any of the cached files for you. |
|
* It only precaches files. To respond to a network request you call |
|
* [addRoute()]{@link module:workbox-precaching.addRoute}. |
|
* |
|
* If you have a single array of files to precache, you can just call |
|
* [precacheAndRoute()]{@link module:workbox-precaching.precacheAndRoute}. |
|
* |
|
* @param {Array<Object|string>} entries Array of entries to precache. |
|
* |
|
* @alias workbox.precaching.precache |
|
*/ |
|
export const precache = (entries) => { |
|
const precacheController = getOrCreatePrecacheController(); |
|
precacheController.addToCacheList(entries); |
|
|
|
if (entries.length > 0) { |
|
// NOTE: these listeners will only be added once (even if the `precache()` |
|
// method is called multiple times) because event listeners are implemented |
|
// as a set, where each listener must be unique. |
|
addEventListener('install', installListener); |
|
addEventListener('activate', activateListener); |
|
} |
|
};
|
|
|