mirror of
https://github.com/idanoo/GoScrobble.git
synced 2024-11-23 00:45:16 +00:00
138 lines
3.0 KiB
JavaScript
138 lines
3.0 KiB
JavaScript
|
"use strict";
|
||
|
|
||
|
/*
|
||
|
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.
|
||
|
*/
|
||
|
const {
|
||
|
rollup
|
||
|
} = require('rollup');
|
||
|
|
||
|
const {
|
||
|
terser
|
||
|
} = require('rollup-plugin-terser');
|
||
|
|
||
|
const {
|
||
|
writeFile
|
||
|
} = require('fs-extra');
|
||
|
|
||
|
const babel = require('rollup-plugin-babel');
|
||
|
|
||
|
const omt = require('@surma/rollup-plugin-off-main-thread');
|
||
|
|
||
|
const upath = require('upath');
|
||
|
|
||
|
const presetEnv = require('@babel/preset-env');
|
||
|
|
||
|
const replace = require('@rollup/plugin-replace');
|
||
|
|
||
|
const resolve = require('@rollup/plugin-node-resolve');
|
||
|
|
||
|
const tempy = require('tempy');
|
||
|
|
||
|
module.exports = async ({
|
||
|
babelPresetEnvTargets,
|
||
|
inlineWorkboxRuntime,
|
||
|
mode,
|
||
|
sourcemap,
|
||
|
swDest,
|
||
|
unbundledCode
|
||
|
}) => {
|
||
|
// We need to write this to the "real" file system, as Rollup won't read from
|
||
|
// a custom file system.
|
||
|
const {
|
||
|
dir,
|
||
|
base
|
||
|
} = upath.parse(swDest);
|
||
|
const temporaryFile = tempy.file({
|
||
|
name: base
|
||
|
});
|
||
|
await writeFile(temporaryFile, unbundledCode);
|
||
|
const plugins = [resolve(), replace({
|
||
|
'process.env.NODE_ENV': JSON.stringify(mode)
|
||
|
}), babel({
|
||
|
// Disable the logic that checks for local Babel config files:
|
||
|
// https://github.com/GoogleChrome/workbox/issues/2111
|
||
|
babelrc: false,
|
||
|
configFile: false,
|
||
|
presets: [[presetEnv, {
|
||
|
targets: {
|
||
|
browsers: babelPresetEnvTargets
|
||
|
},
|
||
|
loose: true
|
||
|
}]]
|
||
|
})];
|
||
|
|
||
|
if (mode === 'production') {
|
||
|
plugins.push(terser({
|
||
|
mangle: {
|
||
|
toplevel: true,
|
||
|
properties: {
|
||
|
regex: /(^_|_$)/
|
||
|
}
|
||
|
}
|
||
|
}));
|
||
|
}
|
||
|
|
||
|
const rollupConfig = {
|
||
|
plugins,
|
||
|
input: temporaryFile
|
||
|
}; // Rollup will inline the runtime by default. If we don't want that, we need
|
||
|
// to add in some additional config.
|
||
|
|
||
|
if (!inlineWorkboxRuntime) {
|
||
|
rollupConfig.plugins.unshift(omt());
|
||
|
|
||
|
rollupConfig.manualChunks = id => {
|
||
|
return id.includes('workbox') ? 'workbox' : undefined;
|
||
|
};
|
||
|
}
|
||
|
|
||
|
const bundle = await rollup(rollupConfig);
|
||
|
const {
|
||
|
output
|
||
|
} = await bundle.generate({
|
||
|
sourcemap,
|
||
|
// Using an external Workbox runtime requires 'amd'.
|
||
|
format: inlineWorkboxRuntime ? 'es' : 'amd'
|
||
|
});
|
||
|
const files = [];
|
||
|
|
||
|
for (const chunkOrAsset of output) {
|
||
|
if (chunkOrAsset.isAsset) {
|
||
|
files.push({
|
||
|
name: chunkOrAsset.fileName,
|
||
|
contents: chunkOrAsset.source
|
||
|
});
|
||
|
} else {
|
||
|
let code = chunkOrAsset.code;
|
||
|
|
||
|
if (chunkOrAsset.map) {
|
||
|
const sourceMapFile = chunkOrAsset.fileName + '.map';
|
||
|
code += `//# sourceMappingURL=${sourceMapFile}\n`;
|
||
|
files.push({
|
||
|
name: sourceMapFile,
|
||
|
contents: chunkOrAsset.map.toString()
|
||
|
});
|
||
|
}
|
||
|
|
||
|
files.push({
|
||
|
name: chunkOrAsset.fileName,
|
||
|
contents: code
|
||
|
});
|
||
|
}
|
||
|
} // Make sure that if there was a directory portion included in swDest, it's
|
||
|
// preprended to all of the generated files.
|
||
|
|
||
|
|
||
|
return files.map(file => {
|
||
|
file.name = upath.format({
|
||
|
dir,
|
||
|
base: file.name
|
||
|
});
|
||
|
return file;
|
||
|
});
|
||
|
};
|