-
Notifications
You must be signed in to change notification settings - Fork 2
/
rollup.config.js
99 lines (95 loc) · 2.68 KB
/
rollup.config.js
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
/**
* Copyright 2023 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import commonjs from '@rollup/plugin-commonjs';
import resolve from '@rollup/plugin-node-resolve';
import terser from '@rollup/plugin-terser';
import {importMetaAssets} from '@web/rollup-plugin-import-meta-assets';
import glob from 'glob';
import copy from 'rollup-plugin-copy';
import minifyHTML from 'rollup-plugin-minify-html-literals';
const TERSER_OPTIONS = {
warnings: true,
ecma: 2020,
compress: {
unsafe: true,
passes: 2,
},
output: {
// Allow @license and @preserve in output.
comments: 'some',
inline_script: false,
},
};
// Process locale files individually to ensure they aren't chunked together.
const locales = glob.sync('src/generated/locales/*.js').map(locale => {
return {
input: locale,
output: {
dir: 'dist/locales/',
format: 'es',
},
plugins: [resolve(), terser(TERSER_OPTIONS)],
};
});
export default [
{
input: glob.sync('site/js/*.js'),
output: {
dir: 'dist/js',
format: 'es',
// Manually split dependencies into logical chunks, to aid debugging.
manualChunks: id => {
const lib = id.replace(/^.*\\node_modules\\/, '');
if (lib.startsWith('lit')) {
return 'lit';
}
if (lib.startsWith('playground')) {
return 'playground-elements';
}
if (lib.startsWith('prettier')) {
return 'prettier';
}
if (lib.startsWith('typescript')) {
return 'typescript';
}
},
chunkFileNames: '[name].js',
},
plugins: [
// Convert typescript from CJS -> ESM.
// Ignore all `requires`, rather than including polyfills we won't use.
commonjs({
include: 'node_modules/typescript/lib/typescript.js',
ignore: () => true,
}),
resolve(),
importMetaAssets(),
// TODO: see if this is viable with sample generator templates.
minifyHTML(),
copy({
targets: [
{
src: ['site/*', '!site/js'],
dest: 'dist',
},
],
flatten: false,
}),
terser(TERSER_OPTIONS),
],
},
...locales,
];