1 | const babel = require('rollup-plugin-babel');
|
2 | const resolve = require('rollup-plugin-node-resolve');
|
3 | const replace = require('rollup-plugin-replace');
|
4 | const commonjs = require('rollup-plugin-commonjs');
|
5 | const json = require('rollup-plugin-json');
|
6 | const { terser } = require('rollup-plugin-terser');
|
7 | const ignore = require('rollup-plugin-ignore');
|
8 | const proxyDirectories = require('rollup-plugin-proxy-directories');
|
9 | const url = require('rollup-plugin-url');
|
10 |
|
11 | const pkg = require('./package.json');
|
12 |
|
13 | const extensions = ['.ts', '.tsx', '.js', '.jsx', '.json'];
|
14 |
|
15 | const makeExternalPredicate = externalArr => {
|
16 | if (!externalArr.length) {
|
17 | return () => false;
|
18 | }
|
19 | const pattern = new RegExp(`^(${externalArr.join('|')})($|/)`);
|
20 | return id => pattern.test(id);
|
21 | };
|
22 |
|
23 | const getExternal = (umd, pkg) => {
|
24 | const external = [...Object.keys(pkg.peerDependencies), 'prop-types'];
|
25 | const allExternal = [...external, ...Object.keys(pkg.dependencies)];
|
26 | return makeExternalPredicate(umd ? external : allExternal);
|
27 | };
|
28 |
|
29 | const commonPlugins = [
|
30 | babel({
|
31 | extensions,
|
32 | exclude: ['node_modules/**', '../../node_modules/**']
|
33 | }),
|
34 | resolve({ extensions, preferBuiltins: false }),
|
35 | url()
|
36 | ];
|
37 |
|
38 | const getPlugins = umd =>
|
39 | umd
|
40 | ? [
|
41 | ...commonPlugins,
|
42 | commonjs({
|
43 | include: /node_modules/,
|
44 | namedExports: {
|
45 | '../../node_modules/react-is/index.js': ['isValidElementType', 'isElement', 'ForwardRef']
|
46 | }
|
47 | }),
|
48 | ignore(['stream', 'react-test-renderer', '**/*.svg']),
|
49 | terser(),
|
50 | replace({
|
51 | 'process.env.NODE_ENV': JSON.stringify('production')
|
52 | }),
|
53 | json()
|
54 | ]
|
55 | : commonPlugins;
|
56 |
|
57 | const getOutput = (umd, pkg) =>
|
58 | umd
|
59 | ? {
|
60 | name: 'Fannypack',
|
61 | file: pkg.unpkg,
|
62 | format: 'umd',
|
63 | exports: 'named',
|
64 | globals: {
|
65 | fannypack: 'Fannypack',
|
66 | react: 'React',
|
67 | 'react-dom': 'ReactDOM',
|
68 | 'prop-types': 'PropTypes'
|
69 | }
|
70 | }
|
71 | : [
|
72 | {
|
73 | file: pkg.main,
|
74 | format: 'cjs',
|
75 | exports: 'named'
|
76 | },
|
77 | {
|
78 | file: pkg.module,
|
79 | format: 'es'
|
80 | }
|
81 | ];
|
82 |
|
83 | const createConfig = ({ umd, pkg, plugins = [], ...config }) => ({
|
84 | external: getExternal(umd, pkg),
|
85 | plugins: [...getPlugins(umd), ...plugins],
|
86 | output: getOutput(umd, pkg),
|
87 | ...config
|
88 | });
|
89 |
|
90 | export default [
|
91 | createConfig({
|
92 | pkg,
|
93 | input: [],
|
94 | output: [
|
95 | {
|
96 | format: 'es',
|
97 | dir: 'es'
|
98 | },
|
99 | {
|
100 | format: 'cjs',
|
101 | dir: 'lib',
|
102 | exports: 'named'
|
103 | }
|
104 | ],
|
105 | plugins: [proxyDirectories(), ignore(['react-test-renderer'])]
|
106 | })
|
107 | ];
|