Files
asciidisco.com/build/tasks/serviceworker.js
2023-08-01 13:49:46 +02:00

61 lines
2.7 KiB
JavaScript

const fs = require('fs')
const path = require('path')
const generateServiceWorkers = require('generate-service-worker')
const zopfli = require('node-zopfli')
const brotli = require('iltorb')
const compile = require('google-closure-compiler-js').compile
const uglify = require('uglify-js').minify
const sw = require('sw-precache').generate
const chalk = require('chalk')
const log = console.log;
/*
module.exports = (config, result) => {
const destination_path = path.join(config.basepath, config.dist_path, config.javascipt_path, config.serviceworker.file)
const options = {
'staticFileGlobs': config.serviceworker.statics.map(static => path.join(config.basepath, config.dist_path, static)),
'stripPrefix': path.join(config.basepath, config.dist_path),
}
return new Promise((resolve, reject) => {
log(' ', chalk.green('>>'), 'Creating serviceworker code')
sw(options, async (err, code) => {
let create_promises = []
try {
const flags = {jsCode: [{src: code}]}
log(' ', chalk.green('>>'), 'Running closure compiler')
const compile_result = compile(flags)
log(' ', chalk.green('>>'), 'Running UgifyJS')
const uglify_result = uglify(compile_result.compiledCode)
// write plain minified file
log(' ', chalk.green('>>'), 'Writing minified file')
create_promises.push(new Promise((res, rej) => fs.writeFile(destination_path, uglify_result.code, err => err ? rej(err) : res())))
// write zopfli compressed file
log(' ', chalk.green('>>'), 'Writing zopfli compressed file')
create_promises.push(new Promise((res, rej) => zopfli.gzip(new Buffer(uglify_result.code), (err, output) => fs.writeFile(destination_path + '.gz', output, err => err ? rej(err) : res()))))
// write brotli compressed file
log(' ', chalk.green('>>'), 'Writing brotli compressed file')
create_promises.push(new Promise((res, rej) => brotli.compress(new Buffer(uglify_result.code), (err, output) => fs.writeFile(destination_path + '.br', output, err => err ? rej(err) : res()))))
await Promise.all(create_promises)
resolve(uglify_result.code)
} catch(err) {
reject(err)
}
})
})
}*/
// create cache
const create_cache_map = (config, result) => {
return {
offline: true,
precache: result.css.map(item => path.join(path.dirname(item.include), item.hash.substr(0, 6) + '.' + path.basename(item.include))),
strategy: [{type: 'prefer-cache', matches: ['\\' + path.extname(result.css[0].include)]}],
}
}
module.exports = async (config, result) => {
const cache = create_cache_map(config, result)
const serviceWorkers = generateServiceWorkers({cache})
console.log(serviceWorkers.main)
return {}
}