import nodeResolve from '@rollup/plugin-node-resolve'; import babel from '@rollup/plugin-babel'; import html from '@web/rollup-plugin-html'; import { importMetaAssets } from '@web/rollup-plugin-import-meta-assets'; import { terser } from 'rollup-plugin-terser'; import { generateSW } from 'rollup-plugin-workbox'; import path from 'path'; export default { input: 'index.html', output: { entryFileNames: '[hash].js', chunkFileNames: '[hash].js', assetFileNames: '[hash][extname]', format: 'es', dir: 'dist', }, preserveEntrySignatures: false, plugins: [ /** Enable using HTML as rollup entrypoint */ html({ minify: true, injectServiceWorker: true, serviceWorkerPath: 'dist/sw.js', }), /** Resolve bare module imports */ nodeResolve(), /** Minify JS */ terser(), /** Bundle assets references via import.meta.url */ importMetaAssets(), /** Compile JS to a lower language target */ babel({ babelHelpers: 'bundled', presets: [ [ require.resolve('@babel/preset-env'), { targets: [ 'last 3 Chrome major versions', 'last 3 Firefox major versions', 'last 3 Edge major versions', 'last 3 Safari major versions', ], modules: false, bugfixes: true, }, ], ], plugins: [ [ require.resolve('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: path.join('dist', 'sw.js'), // directory to match patterns against to be precached globDirectory: path.join('dist'), // cache any html js and css by default globPatterns: ['**/*.{html,js,css,webmanifest}'], skipWaiting: true, clientsClaim: true, runtimeCaching: [{ urlPattern: 'polyfills/*.js', handler: 'CacheFirst' }], }), ], };