UNPKG

5.51 kBJavaScriptView Raw
1import fs from 'fs';
2import path from 'path';
3import builtins from 'builtin-modules';
4import debug from 'debug';
5import { flatMap } from 'lodash';
6import { terser } from 'rollup-plugin-terser';
7import babel from 'rollup-plugin-babel';
8import commonjs from 'rollup-plugin-commonjs';
9import json from 'rollup-plugin-json';
10import replace from 'rollup-plugin-replace';
11import nodeResolve from 'rollup-plugin-node-resolve';
12import typescript from 'rollup-plugin-typescript';
13import { getGlobals, upperCamelCase, normalizePkg } from '@pkgr/umd-globals';
14import { namedExports } from '@pkgr/named-exports';
15
16var info = debug('r:info');
17var PRODUCTION = 'production';
18var BASIC_PLUGINS = [nodeResolve({
19 mainFields: ['esnext', 'es2015', 'esm2015', 'fesm2015', 'esm5', 'fesm5', 'module', 'main']
20}), commonjs({
21 namedExports: namedExports
22}), json()];
23var DEFAULT_FORMATS = ['cjs', 'es2015', 'esm'];
24var isTsAvailable = false;
25
26try {
27 isTsAvailable = !!require.resolve('typescript');
28} catch (e) {} // eslint-disable-next-line node/no-deprecated-api
29
30
31var EXTENSIONS = Object.keys(require.extensions);
32
33if (isTsAvailable) {
34 EXTENSIONS.unshift('.ts', '.tsx');
35}
36
37var 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
44var 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
148var 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
157export default config;