Mirror: React hooks for accessible, common web interactions. UI super powers without the UI.
1import commonjs from '@rollup/plugin-commonjs';
2import resolve from '@rollup/plugin-node-resolve';
3import typescript from 'rollup-plugin-typescript2';
4import buble from '@rollup/plugin-buble';
5import { terser } from 'rollup-plugin-terser';
6
7const pkg = require('./package.json');
8
9export const externalModules = ['dns', 'fs', 'path', 'url'];
10if (pkg.peerDependencies)
11 externalModules.push(...Object.keys(pkg.peerDependencies));
12if (pkg.dependencies) externalModules.push(...Object.keys(pkg.dependencies));
13
14const externalPredicate = new RegExp(`^(${externalModules.join('|')})($|/)`);
15
16const config = {
17 input: {
18 [pkg.name]: './src/index.ts',
19 },
20 onwarn() {},
21 external(id) {
22 return externalPredicate.test(id);
23 },
24 treeshake: {
25 unknownGlobalSideEffects: false,
26 tryCatchDeoptimization: false,
27 moduleSideEffects: false,
28 },
29};
30
31const plugins = [
32 resolve({
33 extensions: ['.js', '.jsx', '.ts', '.tsx'],
34 mainFields: ['module', 'jsnext', 'main'],
35 preferBuiltins: false,
36 browser: true,
37 }),
38
39 commonjs({
40 ignoreGlobal: true,
41 include: /\/node_modules\//,
42 namedExports: {},
43 }),
44
45 typescript({
46 useTsconfigDeclarationDir: true,
47 tsconfigOverride: {
48 compilerOptions: {
49 sourceMap: true,
50 noEmit: false,
51 declaration: true,
52 declarationDir: './dist/types',
53 target: 'esnext',
54 },
55 },
56 }),
57
58 buble({
59 transforms: {
60 unicodeRegExp: false,
61 dangerousForOf: true,
62 dangerousTaggedTemplateString: true,
63 asyncAwait: false,
64 },
65 objectAssign: 'Object.assign',
66 }),
67
68 terser({
69 warnings: true,
70 ecma: 5,
71 keep_fnames: true,
72 ie8: false,
73 compress: {
74 pure_getters: true,
75 toplevel: true,
76 booleans_as_integers: false,
77 keep_fnames: true,
78 keep_fargs: true,
79 if_return: false,
80 ie8: false,
81 sequences: false,
82 loops: false,
83 conditionals: false,
84 join_vars: false
85 },
86 mangle: {
87 module: true,
88 keep_fnames: true,
89 },
90 output: {
91 beautify: true,
92 braces: true,
93 indent_level: 2
94 }
95 }),
96];
97
98const output = (format = 'cjs', extension = '.js') => ({
99 chunkFileNames: '[hash]' + extension,
100 entryFileNames: '[name]' + extension,
101 dir: './dist',
102 exports: 'named',
103 externalLiveBindings: false,
104 sourcemap: true,
105 esModule: false,
106 indent: false,
107 freeze: false,
108 strict: false,
109 format,
110});
111
112export default [
113 {
114 ...config,
115 shimMissingExports: true,
116 plugins,
117 output: [output('esm', '.es.js'), output('cjs', '.js')],
118 },
119];