import path from 'path'; import del from 'rollup-plugin-delete'; import copy from 'rollup-plugin-copy'; import { fileURLToPath } from 'url'; import ignore from "rollup-plugin-ignore" import replace from '@rollup/plugin-replace'; import resolve from '@rollup/plugin-node-resolve'; import terser from '@rollup/plugin-terser'; import commonjsImport from '@rollup/plugin-commonjs'; import summary from 'rollup-plugin-summary'; import { generateSW } from 'rollup-plugin-workbox'; import jsonImport from '@rollup/plugin-json'; import litcssImport from 'rollup-plugin-lit-css'; import { minify as minifyHtml } from 'html-minifier'; import minifyHtmlLiterals from "rollup-plugin-html-literals"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const appName = 'Öffisearch'; const appRepoUrl = 'https://git.zaphyra.eu/oeffisearch'; const appImprintUrl = 'https://katja.wtf/imprint.html'; const isDevServer = process.env.ROLLUP_WATCH; const gitVersion = process.env.GIT_VERSION; const gitCommit = process.env.GIT_COMMIT; const gitCommitDate = process.env.GIT_COMMITDATE export default { input: 'src/main.js', output: { dir: 'dist', sourcemap: !isDevServer ? false : true, }, preserveEntrySignatures: false, treeshake: isDevServer ? false : 'recommended', onwarn: warning => { if (!warning.ids.some(e => e.includes('node_modules'))) console.error(`(!) ${warning.message}`); }, plugins: [ del({ targets: [ 'dist/*' ] }), copy({ targets: [ { src: 'src/assets/favicon.png', dest: 'dist' }, { src: 'src/assets/favicon.svg', dest: 'dist' }, { src: 'src/assets/manifest.json', dest: 'dist', transform: contents => JSON.stringify(JSON.parse( contents.toString().replaceAll('{{APP_NAME}}', appName) )) }, { src: 'src/assets/index.html', dest: 'dist', transform: contents => minifyHtml(contents.toString().replaceAll('{{APP_NAME}}', appName), { collapseWhitespace: true, removeAttributeQuotes: true, minifyCSS: true }) }, ] }), // Minify HTML template literals !isDevServer && minifyHtmlLiterals(), // stub some modules ignore([ 'http', 'url', 'tls', 'stream', 'assert', 'https-proxy-agent', 'db-hafas-stations', 'events' ]), replace({ preventAssignment: true, delimiters: ['', ''], values: { 'import {createRequire} from \'module\';': '', 'const require = createRequire(import.meta.url);': '', 'process.env.DEBUG': JSON.stringify(), 'process.env.HTTPS_PROXY': JSON.stringify(), 'process.env.HTTP_PROXY': JSON.stringify(), 'process.env.LOCAL_ADDRESS': JSON.stringify(), }, }), replace({ preventAssignment: true, values: { 'node:buffer': 'buffer', 'cross-fetch': path.resolve(__dirname, 'src/shim/cross-fetch.js'), 'isDevServer': isDevServer, 'APP_NAME': JSON.stringify(appName), 'APP_REPOURL': JSON.stringify(appRepoUrl), 'APP_IMPRINTURL': JSON.stringify(appImprintUrl), 'APP_VERSION': JSON.stringify(gitVersion ? gitVersion : `0.0.0-${isDevServer ? 'dev' : 'prod'}`), 'APP_COMMIT': JSON.stringify(gitCommit ? gitCommit : 'unknown'), 'APP_COMMITDATE': JSON.stringify(gitCommitDate ? gitCommitDate : (new Date).toString()), }, }), // Resolve bare module specifiers to relative paths resolve({ browser: true, preferBuiltins: false, modulePaths: [ path.resolve(__dirname, 'src/shim') ], }), // css import support for lit litcssImport({ cssnano: true, }), // commonjs imports commonjsImport({ transformMixedEsModules: true }), // json import support jsonImport(), // Minify JS !isDevServer && terser({ ecma: 2021, module: true, warnings: true, }), // generate service-worker !isDevServer && generateSW({ swDest: 'dist/sw.js', globDirectory: 'dist/', globPatterns: [ '*' ], clientsClaim: true, skipWaiting: true, sourcemap: false }), // Print bundle summary summary({ showMinifiedSize: isDevServer ? true : false, showGzippedSize: true, showBrotliSize: true, }), ] };