import nodeResolve from "@rollup/plugin-node-resolve"; import babel from "@rollup/plugin-babel"; import { rollupPluginHTML as html } from "@web/rollup-plugin-html"; import { importMetaAssets } from "@web/rollup-plugin-import-meta-assets"; import esbuild from "rollup-plugin-esbuild"; import { generateSW } from "rollup-plugin-workbox"; import { paths } from "./bs/dev/paths.js"; import { join } from "node:path"; const pathDist = join.bind(null, paths.dist); export default { input: "index.html", output: { entryFileNames: "[hash].js", chunkFileNames: "[hash].js", assetFileNames: "[hash][extname]", format: "es", dir: pathDist(), }, preserveEntrySignatures: false, plugins: [ /** Enable using HTML as rollup entrypoint */ html({ minify: true, injectServiceWorker: true, serviceWorkerPath: pathDist("sw.js"), }), /** Resolve bare module imports */ nodeResolve(), /** Minify JS, compile JS to a lower language target */ esbuild({ minify: true, target: ["chrome64", "firefox67", "safari11.1"], }), /** Bundle assets references via import.meta.url */ importMetaAssets(), /** Minify html and css tagged template literals */ babel({ babelHelpers: "bundled", plugins: [ [ "babel-plugin-template-html-minifier", { modules: { lit: ["html", { name: "css", encapsulation: "style" }] }, failOnError: false, strictCSS: true, htmlMinifier: { collapseWhitespace: true, conservativeCollapse: true, removeComments: true, caseSensitive: true, minifyCSS: true, }, }, ], ], }), /** Create and inject a service worker */ generateSW({ globIgnores: ["polyfills/*.js", "nomodule-*.js"], navigateFallback: "/index.html", // where to output the generated sw swDest: pathDist("sw.js"), // directory to match patterns against to be precached globDirectory: pathDist(), // cache any html js and css by default globPatterns: ["**/*.{html,js,css,webmanifest}"], skipWaiting: true, clientsClaim: true, runtimeCaching: [{ urlPattern: "polyfills/*.js", handler: "CacheFirst" }], }), ], };