UNPKG

2.67 kBJavaScriptView Raw
1const babel = require('rollup-plugin-babel');
2const resolve = require('rollup-plugin-node-resolve');
3const replace = require('rollup-plugin-replace');
4const commonjs = require('rollup-plugin-commonjs');
5const json = require('rollup-plugin-json');
6const { terser } = require('rollup-plugin-terser');
7const ignore = require('rollup-plugin-ignore');
8const proxyDirectories = require('rollup-plugin-proxy-directories');
9const url = require('rollup-plugin-url');
10
11const pkg = require('./package.json');
12
13const extensions = ['.ts', '.tsx', '.js', '.jsx', '.json'];
14
15const 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
23const 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
29const commonPlugins = [
30 babel({
31 extensions,
32 exclude: ['node_modules/**', '../../node_modules/**']
33 }),
34 resolve({ extensions, preferBuiltins: false }),
35 url()
36];
37
38const 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
57const 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
83const createConfig = ({ umd, pkg, plugins = [], ...config }) => ({
84 external: getExternal(umd, pkg),
85 plugins: [...getPlugins(umd), ...plugins],
86 output: getOutput(umd, pkg),
87 ...config
88});
89
90export 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];