zaphyra's git: oeffisearch

fast and simple tripplanner

1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29 
30 
31 
32 
33 
34 
35 
36 
37 
38 
39 
40 
41 
42 
43 
44 
45 
46 
47 
48 
49 
50 
51 
52 
53 
54 
55 
56 
57 
58 
59 
60 
61 
62 
63 
64 
65 
66 
67 
68 
69 
70 
71 
72 
73 
74 
75 
76 
77 
78 
79 
80 
81 
82 
83 
84 
85 
86 
87 
88 
89 
90 
91 
92 
93 
94 
95 
96 
97 
98 
99 
100 
101 
102 
103 
104 
105 
106 
107 
108 
109 
110 
111 
112 
113 
114 
115 
116 
117 
118 
119 
120 
121 
122 
123 
124 
125 
126 
127 
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://zaphyra.eu/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);': '',
				'console.log(url);': '',
				'process.browser': JSON.stringify(),
				'process.version': JSON.stringify("0.0"),
				'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()),
			},
		}),
		// css import support for lit
		litcssImport({ cssnano: true, }),
		// commonjs imports
		commonjsImport({ transformMixedEsModules: true }),
		// json import support
		jsonImport(),
		// Resolve bare module specifiers to relative paths
		resolve({
			browser: true,
			preferBuiltins: false,
			modulePaths: [ path.resolve(__dirname, 'src/shim') ],
		}),
		// 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
		!isDevServer && summary({
			showMinifiedSize: true,
			showGzippedSize: true,
			showBrotliSize: true,
		}),
 	]
};