1 | "use strict";
|
2 |
|
3 | var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4 |
|
5 | var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
6 |
|
7 | const path = require('path');
|
8 |
|
9 | const replace = require('@rollup/plugin-replace');
|
10 |
|
11 | const glob = require('glob');
|
12 |
|
13 | const camelcase = require('lodash.camelcase');
|
14 |
|
15 | const rollupBabel = require('rollup-plugin-babel');
|
16 |
|
17 | const commonjs = require('rollup-plugin-commonjs');
|
18 |
|
19 | const nodeResolve = require('rollup-plugin-node-resolve');
|
20 |
|
21 | const json = require('rollup-plugin-json');
|
22 |
|
23 | const {
|
24 | terser
|
25 | } = require('rollup-plugin-terser');
|
26 |
|
27 | const nodeBuiltIns = require('rollup-plugin-node-builtins');
|
28 |
|
29 | const nodeGlobals = require('rollup-plugin-node-globals');
|
30 |
|
31 | const {
|
32 | sizeSnapshot
|
33 | } = require('rollup-plugin-size-snapshot');
|
34 |
|
35 | const omit = require('lodash.omit');
|
36 |
|
37 | const {
|
38 | pkg,
|
39 | hasFile,
|
40 | hasPkgProp,
|
41 | parseEnv,
|
42 | fromRoot,
|
43 | uniq,
|
44 | writeExtraEntry
|
45 | } = require('../utils');
|
46 |
|
47 | const here = p => path.join(__dirname, p);
|
48 |
|
49 | const capitalize = s => s[0].toUpperCase() + s.slice(1);
|
50 |
|
51 | const minify = parseEnv('BUILD_MINIFY', false);
|
52 | const format = process.env.BUILD_FORMAT;
|
53 | const isPreact = parseEnv('BUILD_PREACT', false);
|
54 | const isNode = parseEnv('BUILD_NODE', false);
|
55 | const name = process.env.BUILD_NAME || capitalize(camelcase(pkg.name));
|
56 | const useSizeSnapshot = parseEnv('BUILD_SIZE_SNAPSHOT', false);
|
57 | const esm = format === 'esm';
|
58 | const umd = format === 'umd';
|
59 | const defaultGlobals = Object.keys(pkg.peerDependencies || {}).reduce((deps, dep) => {
|
60 | deps[dep] = capitalize(camelcase(dep));
|
61 | return deps;
|
62 | }, {});
|
63 | const deps = Object.keys(pkg.dependencies || {});
|
64 | const peerDeps = Object.keys(pkg.peerDependencies || {});
|
65 | const defaultExternal = umd ? peerDeps : deps.concat(peerDeps);
|
66 | const input = glob.sync(fromRoot(process.env.BUILD_INPUT || 'src/index.js'));
|
67 | const codeSplitting = input.length > 1;
|
68 |
|
69 | if (codeSplitting && uniq(input.map(single => path.basename(single))).length !== input.length) {
|
70 | throw new Error('Filenames of code-splitted entries should be unique to get deterministic output filenames.' + `\nReceived those: ${input}.`);
|
71 | }
|
72 |
|
73 | const filenameSuffix = process.env.BUILD_FILENAME_SUFFIX || '';
|
74 | const filenamePrefix = process.env.BUILD_FILENAME_PREFIX || (isPreact ? 'preact/' : '');
|
75 | const globals = parseEnv('BUILD_GLOBALS', isPreact ? Object.assign(defaultGlobals, {
|
76 | preact: 'preact'
|
77 | }) : defaultGlobals);
|
78 | const external = parseEnv('BUILD_EXTERNAL', isPreact ? defaultExternal.concat(['preact', 'prop-types']) : defaultExternal).filter((e, i, arry) => arry.indexOf(e) === i);
|
79 |
|
80 | if (isPreact) {
|
81 | delete globals.react;
|
82 | delete globals['prop-types'];
|
83 |
|
84 | external.splice(external.indexOf('react'), 1);
|
85 | }
|
86 |
|
87 | const externalPattern = new RegExp(`^(${external.join('|')})($|/)`);
|
88 |
|
89 | function externalPredicate(id) {
|
90 | const isDep = external.length > 0 && externalPattern.test(id);
|
91 |
|
92 | if (umd) {
|
93 |
|
94 | return isDep;
|
95 | }
|
96 |
|
97 |
|
98 |
|
99 | const isNodeModule = id.includes('node_modules');
|
100 | const isRelative = id.startsWith('.');
|
101 | return isDep || !isRelative && !path.isAbsolute(id) || isNodeModule;
|
102 | }
|
103 |
|
104 | const filename = [pkg.name, filenameSuffix, `.${format}`, minify ? '.min' : null, '.js'].filter(Boolean).join('');
|
105 | const dirpath = path.join(...[filenamePrefix, 'dist'].filter(Boolean));
|
106 | const output = [(0, _extends2.default)({
|
107 | name
|
108 | }, codeSplitting ? {
|
109 | dir: path.join(dirpath, format)
|
110 | } : {
|
111 | file: path.join(dirpath, filename)
|
112 | }, {
|
113 | format: esm ? 'es' : format,
|
114 | exports: esm ? 'named' : 'auto',
|
115 | globals
|
116 | })];
|
117 | const useBuiltinConfig = !hasFile('.babelrc') && !hasFile('.babelrc.js') && !hasFile('babel.config.js') && !hasPkgProp('babel');
|
118 | const babelPresets = useBuiltinConfig ? [here('../config/babelrc.js')] : [];
|
119 | const replacements = Object.entries(umd ? process.env : omit(process.env, ['NODE_ENV'])).reduce((acc, [key, value]) => {
|
120 | let val;
|
121 |
|
122 | if (value === 'true' || value === 'false' || Number.isInteger(+value)) {
|
123 | val = value;
|
124 | } else {
|
125 | val = JSON.stringify(value);
|
126 | }
|
127 |
|
128 | acc[`process.env.${key}`] = val;
|
129 | return acc;
|
130 | }, {});
|
131 | module.exports = {
|
132 | input: codeSplitting ? input : input[0],
|
133 | output,
|
134 | external: externalPredicate,
|
135 | plugins: [isNode ? nodeBuiltIns() : null, isNode ? nodeGlobals() : null, nodeResolve({
|
136 | preferBuiltins: isNode,
|
137 | mainFields: ['module', 'main', 'jsnext', 'browser']
|
138 | }), commonjs({
|
139 | include: 'node_modules/**'
|
140 | }), json(), rollupBabel({
|
141 | presets: babelPresets,
|
142 | babelrc: !useBuiltinConfig,
|
143 | runtimeHelpers: useBuiltinConfig
|
144 | }), replace(replacements), useSizeSnapshot ? sizeSnapshot({
|
145 | printInfo: false
|
146 | }) : null, minify ? terser() : null, codeSplitting && ((writes = 0) => ({
|
147 | onwrite() {
|
148 | if (++writes !== input.length) {
|
149 | return;
|
150 | }
|
151 |
|
152 | input.filter(single => single.indexOf('index.js') === -1).forEach(single => {
|
153 | const chunk = path.basename(single);
|
154 | writeExtraEntry(chunk.replace(/\..+$/, ''), {
|
155 | cjs: `${dirpath}/cjs/${chunk}`,
|
156 | esm: `${dirpath}/esm/${chunk}`
|
157 | });
|
158 | });
|
159 | }
|
160 |
|
161 | }))()].filter(Boolean)
|
162 | }; |
\ | No newline at end of file |