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