1 | import fs from 'fs';
|
2 | import path from 'path';
|
3 | import builtins from 'builtin-modules';
|
4 | import debug from 'debug';
|
5 | import { flatMap } from 'lodash';
|
6 | import { terser } from 'rollup-plugin-terser';
|
7 | import babel from 'rollup-plugin-babel';
|
8 | import commonjs from 'rollup-plugin-commonjs';
|
9 | import json from 'rollup-plugin-json';
|
10 | import replace from 'rollup-plugin-replace';
|
11 | import nodeResolve from 'rollup-plugin-node-resolve';
|
12 | import typescript from 'rollup-plugin-typescript';
|
13 | import { getGlobals, upperCamelCase, normalizePkg } from '@pkgr/umd-globals';
|
14 | import { namedExports } from '@pkgr/named-exports';
|
15 |
|
16 | var info = debug('r:info');
|
17 | var PRODUCTION = 'production';
|
18 | var BASIC_PLUGINS = [nodeResolve({
|
19 | mainFields: ['esnext', 'es2015', 'esm2015', 'fesm2015', 'esm5', 'fesm5', 'module', 'main']
|
20 | }), commonjs({
|
21 | namedExports
|
22 | }), json()];
|
23 | var DEFAULT_FORMATS = ['cjs', 'es2015', 'esm'];
|
24 | var isTsAvailable = false;
|
25 |
|
26 | try {
|
27 | isTsAvailable = !!require.resolve('typescript');
|
28 | } catch (e) {}
|
29 |
|
30 |
|
31 | var EXTENSIONS = Object.keys(require.extensions);
|
32 |
|
33 | if (isTsAvailable) {
|
34 | EXTENSIONS.unshift('.ts', '.tsx');
|
35 | }
|
36 |
|
37 | var tryExtensions = filepath => {
|
38 | var ext = EXTENSIONS.find(ext => fs.existsSync(filepath + ext));
|
39 | return ext ? filepath + ext : filepath;
|
40 | };
|
41 |
|
42 | var configBase = function configBase() {
|
43 | var {
|
44 | formats,
|
45 | monorepo,
|
46 | input,
|
47 | outputDir = 'lib',
|
48 | exports,
|
49 | externals = [],
|
50 | globals: umdGlobals,
|
51 | prod = process.env.NODE_ENV === PRODUCTION
|
52 | } = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
53 | var pkgsPath = path.resolve(typeof monorepo === 'string' ? monorepo : 'packages');
|
54 |
|
55 | if (monorepo !== false) {
|
56 | monorepo = fs.existsSync(pkgsPath);
|
57 | }
|
58 |
|
59 | var pkgs = monorepo ? fs.readdirSync(pkgsPath) : [''];
|
60 | var globals = getGlobals({
|
61 | globals: umdGlobals
|
62 | });
|
63 | var configs = flatMap(pkgs, pkg => {
|
64 | var pkgPath = path.resolve(monorepo ? pkgsPath : '', pkg);
|
65 | var srcPath = path.resolve(pkgPath, 'src');
|
66 | var pkgInput = input;
|
67 | var pkgOutputDir = outputDir;
|
68 |
|
69 | if (!fs.existsSync(srcPath) && pkgInput == null) {
|
70 | pkgInput = 'index';
|
71 | }
|
72 |
|
73 | pkgInput = tryExtensions(path.resolve(pkgPath, pkgInput || 'src/index'));
|
74 | var isAbsolute = path.isAbsolute(pkgInput);
|
75 |
|
76 | if (pkgOutputDir && !pkgOutputDir.endsWith('/')) {
|
77 | pkgOutputDir = pkgOutputDir + '/';
|
78 | }
|
79 |
|
80 | if (!fs.existsSync(pkgInput) || isAbsolute && !pkgInput.startsWith(pkgPath)) {
|
81 | return [];
|
82 | }
|
83 |
|
84 | var {
|
85 | name,
|
86 | engines: {
|
87 | node
|
88 | } = {},
|
89 | dependencies = {},
|
90 | peerDependencies = {}
|
91 | } = require(path.resolve(pkgPath, 'package.json'));
|
92 |
|
93 | var _external = externals.concat(Object.keys(peerDependencies), node ? Object.keys(dependencies).concat(builtins) : []);
|
94 |
|
95 | var isTsInput = /\.tsx?/.test(pkgInput);
|
96 | var pkgFormats = formats && formats.length ? formats : DEFAULT_FORMATS.concat(node ? [] : 'umd');
|
97 |
|
98 | var pkgGlobals = _external.reduce((pkgGlobals, pkg) => {
|
99 | if (pkgGlobals[pkg] == null) {
|
100 | pkgGlobals[pkg] = upperCamelCase(normalizePkg(pkg));
|
101 | }
|
102 |
|
103 | return pkgGlobals;
|
104 | }, globals);
|
105 |
|
106 | return pkgFormats.map(format => {
|
107 | var isEsVersion = /^es(\d+|next)$/.test(format) && format !== 'es5';
|
108 | return {
|
109 | input: pkgInput,
|
110 | output: {
|
111 | file: path.resolve(pkgPath, "".concat(pkgOutputDir).concat(format).concat(prod ? '.min' : '', ".js")),
|
112 | format: isEsVersion ? 'esm' : format,
|
113 | name: pkgGlobals[name] || upperCamelCase(normalizePkg(name)),
|
114 | globals,
|
115 | exports
|
116 | },
|
117 | external: id => _external.some(pkg => id === pkg || id.startsWith(pkg + '/')),
|
118 | plugins: [isTsAvailable && isTsInput ? typescript({
|
119 | target: isEsVersion ? format : 'es5'
|
120 | }) : babel({
|
121 | exclude: ['*.min.js', '*.production.js'],
|
122 | presets: [['@babel/preset-env', isEsVersion ? {
|
123 | targets: {
|
124 | esmodules: true
|
125 | }
|
126 | } : undefined]]
|
127 | })].concat(BASIC_PLUGINS, prod ? [replace({
|
128 | 'process.env.NODE_ENV': JSON.stringify(PRODUCTION)
|
129 | }), terser()] : [])
|
130 | };
|
131 | });
|
132 | });
|
133 | console.assert(configs.length, "No configuration resolved, mark sure you've setup correctly");
|
134 | return configs;
|
135 | };
|
136 |
|
137 | var config = (function () {
|
138 | var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
139 | var configs = configBase(options).concat(options.prod ? configBase(Object.assign({}, options, {
|
140 | prod: false
|
141 | })) : []);
|
142 | info('configs: %O', configs);
|
143 | return configs;
|
144 | });
|
145 |
|
146 | export default config;
|