UNPKG

5.91 kBJavaScriptView Raw
1'use strict';
2
3function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
4
5var fs = _interopDefault(require('fs'));
6var path = _interopDefault(require('path'));
7var builtins = _interopDefault(require('builtin-modules'));
8var debug = _interopDefault(require('debug'));
9var lodash = require('lodash');
10var rollupPluginTerser = require('rollup-plugin-terser');
11var babel = _interopDefault(require('rollup-plugin-babel'));
12var commonjs = _interopDefault(require('rollup-plugin-commonjs'));
13var json = _interopDefault(require('rollup-plugin-json'));
14var replace = _interopDefault(require('rollup-plugin-replace'));
15var nodeResolve = _interopDefault(require('rollup-plugin-node-resolve'));
16var typescript = _interopDefault(require('rollup-plugin-typescript'));
17var umdGlobals = require('@pkgr/umd-globals');
18var namedExports = require('@pkgr/named-exports');
19
20var info = debug('r:info');
21var PRODUCTION = 'production';
22var BASIC_PLUGINS = [nodeResolve({
23 mainFields: ['esnext', 'es2015', 'esm2015', 'fesm2015', 'esm5', 'fesm5', 'module', 'main']
24}), commonjs({
25 namedExports: namedExports.namedExports
26}), json()];
27var DEFAULT_FORMATS = ['cjs', 'es2015', 'esm'];
28var isTsAvailable = false;
29
30try {
31 isTsAvailable = !!require.resolve('typescript');
32} catch (e) {} // eslint-disable-next-line node/no-deprecated-api
33
34
35var EXTENSIONS = Object.keys(require.extensions);
36
37if (isTsAvailable) {
38 EXTENSIONS.unshift('.ts', '.tsx');
39}
40
41var 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
48var 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
152var 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
161module.exports = config;