2023-10-03 11:14:36 +08:00
|
|
|
"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.
|
|
|
|
*/
|
|
|
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
|
|
};
|
|
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
|
exports.bundle = void 0;
|
|
|
|
const plugin_babel_1 = require("@rollup/plugin-babel");
|
|
|
|
const plugin_node_resolve_1 = require("@rollup/plugin-node-resolve");
|
|
|
|
const rollup_1 = require("rollup");
|
|
|
|
const rollup_plugin_terser_1 = require("rollup-plugin-terser");
|
|
|
|
const fs_extra_1 = require("fs-extra");
|
|
|
|
const rollup_plugin_off_main_thread_1 = __importDefault(require("@surma/rollup-plugin-off-main-thread"));
|
|
|
|
const preset_env_1 = __importDefault(require("@babel/preset-env"));
|
|
|
|
const plugin_replace_1 = __importDefault(require("@rollup/plugin-replace"));
|
|
|
|
const tempy_1 = __importDefault(require("tempy"));
|
|
|
|
const upath_1 = __importDefault(require("upath"));
|
|
|
|
async function bundle({ 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_1.default.parse(swDest);
|
|
|
|
const temporaryFile = tempy_1.default.file({ name: base });
|
|
|
|
await (0, fs_extra_1.writeFile)(temporaryFile, unbundledCode);
|
|
|
|
const plugins = [
|
|
|
|
(0, plugin_node_resolve_1.nodeResolve)(),
|
|
|
|
(0, plugin_replace_1.default)({
|
|
|
|
// See https://github.com/GoogleChrome/workbox/issues/2769
|
|
|
|
'preventAssignment': true,
|
|
|
|
'process.env.NODE_ENV': JSON.stringify(mode),
|
|
|
|
}),
|
|
|
|
(0, plugin_babel_1.babel)({
|
|
|
|
babelHelpers: 'bundled',
|
|
|
|
// Disable the logic that checks for local Babel config files:
|
|
|
|
// https://github.com/GoogleChrome/workbox/issues/2111
|
|
|
|
babelrc: false,
|
|
|
|
configFile: false,
|
|
|
|
presets: [
|
|
|
|
[
|
|
|
|
preset_env_1.default,
|
|
|
|
{
|
|
|
|
targets: {
|
|
|
|
browsers: babelPresetEnvTargets,
|
|
|
|
},
|
|
|
|
loose: true,
|
|
|
|
},
|
|
|
|
],
|
|
|
|
],
|
|
|
|
}),
|
|
|
|
];
|
|
|
|
if (mode === 'production') {
|
|
|
|
plugins.push((0, rollup_plugin_terser_1.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) {
|
|
|
|
// No lint for omt(), library has no types.
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
|
|
rollupConfig.plugins.unshift((0, rollup_plugin_off_main_thread_1.default)());
|
|
|
|
rollupConfig.manualChunks = (id) => {
|
|
|
|
return id.includes('workbox') ? 'workbox' : undefined;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
const bundle = await (0, rollup_1.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.type === 'asset') {
|
|
|
|
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_1.default.format({
|
|
|
|
dir,
|
|
|
|
base: file.name,
|
|
|
|
ext: '',
|
|
|
|
name: '',
|
|
|
|
root: '',
|
|
|
|
});
|
|
|
|
return file;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
exports.bundle = bundle;
|