forked from mystiq/hydrogen-web
add theme assets to offline definition
This commit is contained in:
parent
fc8d2efaf2
commit
e1a5c362dc
2 changed files with 19 additions and 6 deletions
|
@ -89,7 +89,7 @@ async function build() {
|
||||||
}
|
}
|
||||||
await buildCssBundles(legacy ? buildCssLegacy : buildCss, themes);
|
await buildCssBundles(legacy ? buildCssLegacy : buildCss, themes);
|
||||||
if (offline) {
|
if (offline) {
|
||||||
await buildOffline(version, bundleName);
|
await buildOffline(version, bundleName, themeAssets);
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(`built ${PROJECT_ID}${legacy ? " legacy" : ""} ${version} successfully`);
|
console.log(`built ${PROJECT_ID}${legacy ? " legacy" : ""} ${version} successfully`);
|
||||||
|
@ -196,9 +196,17 @@ async function buildJsLegacy(bundleName) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
async function buildOffline(version, bundleName) {
|
async function buildOffline(version, bundleName, themeAssets) {
|
||||||
|
const {offlineAssets, cacheAssets} = themeAssets.reduce((result, asset) => {
|
||||||
|
if (asset.endsWith(".css")) {
|
||||||
|
result.offlineAssets.push(asset);
|
||||||
|
} else {
|
||||||
|
result.cacheAssets.push(asset);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}, {offlineAssets: [], cacheAssets: []});
|
||||||
// write offline availability
|
// write offline availability
|
||||||
const offlineFiles = [bundleName, `${PROJECT_ID}.css`, "index.html", "icon-192.png"];
|
const offlineFiles = [bundleName, `${PROJECT_ID}.css`, "index.html", "icon-192.png"].concat(offlineAssets);
|
||||||
|
|
||||||
// write appcache manifest
|
// write appcache manifest
|
||||||
const manifestLines = [
|
const manifestLines = [
|
||||||
|
@ -214,7 +222,8 @@ async function buildOffline(version, bundleName) {
|
||||||
// write service worker
|
// write service worker
|
||||||
let swSource = await fs.readFile(path.join(projectDir, "src/service-worker.template.js"), "utf8");
|
let swSource = await fs.readFile(path.join(projectDir, "src/service-worker.template.js"), "utf8");
|
||||||
swSource = swSource.replace(`"%%VERSION%%"`, `"${version}"`);
|
swSource = swSource.replace(`"%%VERSION%%"`, `"${version}"`);
|
||||||
swSource = swSource.replace(`"%%FILES%%"`, JSON.stringify(offlineFiles));
|
swSource = swSource.replace(`"%%OFFLINE_FILES%%"`, JSON.stringify(offlineFiles));
|
||||||
|
swSource = swSource.replace(`"%%CACHE_FILES%%"`, JSON.stringify(cacheAssets));
|
||||||
await fs.writeFile(path.join(targetDir, "sw.js"), swSource, "utf8");
|
await fs.writeFile(path.join(targetDir, "sw.js"), swSource, "utf8");
|
||||||
// write web manifest
|
// write web manifest
|
||||||
const webManifest = {
|
const webManifest = {
|
||||||
|
|
|
@ -15,13 +15,17 @@ limitations under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const VERSION = "%%VERSION%%";
|
const VERSION = "%%VERSION%%";
|
||||||
const FILES = "%%FILES%%";
|
|
||||||
const cacheName = `brawl-${VERSION}`;
|
const cacheName = `brawl-${VERSION}`;
|
||||||
|
const OFFLINE_FILES = "%%OFFLINE_FILES%%";
|
||||||
|
// TODO: cache these files when requested
|
||||||
|
// The difficulty is that these are relative filenames, and we don't have access to document.baseURI
|
||||||
|
// Clients.match({type: "window"}).url and assume they are all the same? they really should be ... safari doesn't support this though
|
||||||
|
const CACHE_FILES = "%%CACHE_FILES%%";
|
||||||
|
|
||||||
self.addEventListener('install', function(e) {
|
self.addEventListener('install', function(e) {
|
||||||
e.waitUntil(
|
e.waitUntil(
|
||||||
caches.open(cacheName).then(function(cache) {
|
caches.open(cacheName).then(function(cache) {
|
||||||
return cache.addAll(FILES);
|
return cache.addAll(OFFLINE_FILES);
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue