71 lines
2.1 KiB
JavaScript
71 lines
2.1 KiB
JavaScript
/*
|
|
Generate a caching service worker for HA
|
|
|
|
Will be called as part of build_frontend.
|
|
|
|
Expects home-assistant-polymer repo as submodule of HA repo.
|
|
Creates a caching service worker based on the CURRENT content of HA repo.
|
|
Output service worker to build/service_worker.js
|
|
*/
|
|
var crypto = require('crypto');
|
|
var fs = require('fs');
|
|
var path = require('path');
|
|
var swPrecache = require('sw-precache');
|
|
|
|
var rootDir = '..';
|
|
|
|
function md5(filename) {
|
|
return crypto.createHash('md5')
|
|
.update(fs.readFileSync(filename)).digest('hex');
|
|
}
|
|
|
|
var appPaths = {
|
|
'/': [],
|
|
'/states': [],
|
|
'/logbook': [],
|
|
'/history': [],
|
|
'/map': ['/partial-map.html'],
|
|
'/devService': ['/dev-tools.html'],
|
|
'/devState': ['/dev-tools.html'],
|
|
'/devEvent': ['/dev-tools.html'],
|
|
'/devInfo': ['/dev-tools.html'],
|
|
'/devTemplate': ['/dev-tools.html'],
|
|
};
|
|
|
|
var fingerprinted = ['frontend.html', 'mdi.html', 'core.js', 'partial-map.html',
|
|
'dev-tools.html'];
|
|
|
|
var dynamicUrlToDependencies = {};
|
|
|
|
// Have all app paths be refreshed based on if their dependencies changed
|
|
Object.keys(appPaths).forEach(ap => {
|
|
dynamicUrlToDependencies[ap] = [
|
|
rootDir + '/frontend.html', rootDir + '/core.js',
|
|
] + appPaths[ap].map(val => rootDir + val);
|
|
});
|
|
|
|
// Create fingerprinted versions of our dependencies.
|
|
fingerprinted.forEach(fn => {
|
|
var parts = path.parse(fn);
|
|
|
|
var hash = md5(rootDir + '/' + parts.name + parts.ext);
|
|
var url = '/static/' + parts.name + '-' + hash + parts.ext;
|
|
var fpath = rootDir + '/' + parts.name + parts.ext;
|
|
dynamicUrlToDependencies[url] = [fpath];
|
|
});
|
|
|
|
swPrecache.write(path.join('build', 'service_worker.js'), {
|
|
dynamicUrlToDependencies: dynamicUrlToDependencies,
|
|
staticFileGlobs: [
|
|
rootDir + '/favicon-192x192.png',
|
|
rootDir + '/webcomponents-lite.min.js',
|
|
rootDir + '/fonts/roboto/Roboto-Light.ttf',
|
|
rootDir + '/fonts/roboto/Roboto-Medium.ttf',
|
|
rootDir + '/fonts/roboto/Roboto-Regular.ttf',
|
|
rootDir + '/fonts/roboto/Roboto-Bold.ttf',
|
|
rootDir + '/images/card_media_player_bg.png',
|
|
],
|
|
stripPrefix: '..',
|
|
replacePrefix: 'static',
|
|
});
|