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: 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 = function tryExtensions(filepath) {
|
38 | var ext = EXTENSIONS.find(function (ext) {
|
39 | return fs.existsSync(filepath + ext);
|
40 | });
|
41 | return ext ? filepath + ext : filepath;
|
42 | };
|
43 |
|
44 | var configBase = function configBase() {
|
45 | var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
46 | formats = _ref.formats,
|
47 | monorepo = _ref.monorepo,
|
48 | input = _ref.input,
|
49 | _ref$outputDir = _ref.outputDir,
|
50 | outputDir = _ref$outputDir === void 0 ? 'lib' : _ref$outputDir,
|
51 | exports = _ref.exports,
|
52 | _ref$externals = _ref.externals,
|
53 | externals = _ref$externals === void 0 ? [] : _ref$externals,
|
54 | umdGlobals = _ref.globals,
|
55 | _ref$prod = _ref.prod,
|
56 | prod = _ref$prod === void 0 ? process.env.NODE_ENV === PRODUCTION : _ref$prod;
|
57 |
|
58 | var pkgsPath = path.resolve(typeof monorepo === 'string' ? monorepo : 'packages');
|
59 |
|
60 | if (monorepo !== false) {
|
61 | monorepo = fs.existsSync(pkgsPath);
|
62 | }
|
63 |
|
64 | var pkgs = monorepo ? fs.readdirSync(pkgsPath) : [''];
|
65 | var globals = getGlobals({
|
66 | globals: umdGlobals
|
67 | });
|
68 | var configs = flatMap(pkgs, function (pkg) {
|
69 | var pkgPath = path.resolve(monorepo ? pkgsPath : '', pkg);
|
70 | var srcPath = path.resolve(pkgPath, 'src');
|
71 | var pkgInput = input;
|
72 | var pkgOutputDir = outputDir;
|
73 |
|
74 | if (!fs.existsSync(srcPath) && pkgInput == null) {
|
75 | pkgInput = 'index';
|
76 | }
|
77 |
|
78 | pkgInput = tryExtensions(path.resolve(pkgPath, pkgInput || 'src/index'));
|
79 | var isAbsolute = path.isAbsolute(pkgInput);
|
80 |
|
81 | if (pkgOutputDir && !pkgOutputDir.endsWith('/')) {
|
82 | pkgOutputDir = pkgOutputDir + '/';
|
83 | }
|
84 |
|
85 | if (!fs.existsSync(pkgInput) || isAbsolute && !pkgInput.startsWith(pkgPath)) {
|
86 | return [];
|
87 | }
|
88 |
|
89 | var _require = require(path.resolve(pkgPath, 'package.json')),
|
90 | name = _require.name,
|
91 | _require$engines = _require.engines;
|
92 |
|
93 | _require$engines = _require$engines === void 0 ? {} : _require$engines;
|
94 | var node = _require$engines.node,
|
95 | _require$dependencies = _require.dependencies,
|
96 | dependencies = _require$dependencies === void 0 ? {} : _require$dependencies,
|
97 | _require$peerDependen = _require.peerDependencies,
|
98 | peerDependencies = _require$peerDependen === void 0 ? {} : _require$peerDependen;
|
99 |
|
100 | var _external = externals.concat(Object.keys(peerDependencies), node ? Object.keys(dependencies).concat(builtins) : []);
|
101 |
|
102 | var isTsInput = /\.tsx?/.test(pkgInput);
|
103 | var pkgFormats = formats && formats.length ? formats : DEFAULT_FORMATS.concat(node ? [] : 'umd');
|
104 |
|
105 | var pkgGlobals = _external.reduce(function (pkgGlobals, pkg) {
|
106 | if (pkgGlobals[pkg] == null) {
|
107 | pkgGlobals[pkg] = upperCamelCase(normalizePkg(pkg));
|
108 | }
|
109 |
|
110 | return pkgGlobals;
|
111 | }, globals);
|
112 |
|
113 | return pkgFormats.map(function (format) {
|
114 | var isEsVersion = /^es(\d+|next)$/.test(format) && format !== 'es5';
|
115 | return {
|
116 | input: pkgInput,
|
117 | output: {
|
118 | file: path.resolve(pkgPath, "".concat(pkgOutputDir).concat(format).concat(prod ? '.min' : '', ".js")),
|
119 | format: isEsVersion ? 'esm' : format,
|
120 | name: pkgGlobals[name] || upperCamelCase(normalizePkg(name)),
|
121 | globals: globals,
|
122 | exports: exports
|
123 | },
|
124 | external: function external(id) {
|
125 | return _external.some(function (pkg) {
|
126 | return id === pkg || id.startsWith(pkg + '/');
|
127 | });
|
128 | },
|
129 | plugins: [isTsAvailable && isTsInput ? typescript({
|
130 | target: isEsVersion ? format : 'es5'
|
131 | }) : babel({
|
132 | exclude: ['*.min.js', '*.production.js'],
|
133 | presets: [['@babel/preset-env', isEsVersion ? {
|
134 | targets: {
|
135 | esmodules: true
|
136 | }
|
137 | } : undefined]]
|
138 | })].concat(BASIC_PLUGINS, prod ? [replace({
|
139 | 'process.env.NODE_ENV': JSON.stringify(PRODUCTION)
|
140 | }), terser()] : [])
|
141 | };
|
142 | });
|
143 | });
|
144 | console.assert(configs.length, "No configuration resolved, mark sure you've setup correctly");
|
145 | return configs;
|
146 | };
|
147 |
|
148 | var config = (function () {
|
149 | var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
150 | var configs = configBase(options).concat(options.prod ? configBase(Object.assign({}, options, {
|
151 | prod: false
|
152 | })) : []);
|
153 | info('configs: %O', configs);
|
154 | return configs;
|
155 | });
|
156 |
|
157 | export default config;
|