123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- "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;
|