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.

40 lines
1.3 KiB

4 years ago
"use strict";
/*
Copyright 2018 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.
*/
const stringify = require('json-stable-stringify');
/**
* The variable name that workbox-sw expects manifest entries to be assigned.
* @type {String}
* @private
*/
const PRECACHE_MANIFEST_VAR = '__precacheManifest';
/**
* Generates a template string from an array of manifest entries that can be
* written to a manifest file.
*
* @function generateManifestWithWebpack
* @param {Array<module:workbox-build.ManifestEntry>} manifestEntries
* @return {string} service worker manifest file string
*
* @private
*/
module.exports = manifestEntries => {
const sortedEntries = manifestEntries.sort((a, b) => a.url === b.url ? 0 : a.url > b.url ? 1 : -1); // json-stable-stringify ensures that we get a consistent output, with all
// the properties of each object sorted.
// There's a hash created of the serialized JSON data, and we want the hash to
// be the same if the data is the same, without any sort-order variation.
const entriesJson = stringify(sortedEntries, {
space: 2
});
return `self.${PRECACHE_MANIFEST_VAR} = (self.${PRECACHE_MANIFEST_VAR} || ` + `[]).concat(${entriesJson});`;
};