UNPKG

17.7 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
5Object.defineProperty(exports, "__esModule", {
6 value: true
7});
8exports["default"] = getRollupConfig;
9
10var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
12var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
13
14var _path = _interopRequireDefault(require("path"));
15
16var _rollupPluginTerser = require("rollup-plugin-terser");
17
18var _pluginUrl = _interopRequireDefault(require("@rollup/plugin-url"));
19
20var _pluginAlias = _interopRequireDefault(require("@rollup/plugin-alias"));
21
22var _rollup = _interopRequireDefault(require("@svgr/rollup"));
23
24var _pluginJson = _interopRequireDefault(require("@rollup/plugin-json"));
25
26var _pluginInject = _interopRequireDefault(require("@rollup/plugin-inject"));
27
28var _pluginBabel = _interopRequireDefault(require("@rollup/plugin-babel"));
29
30var _pluginNodeResolve = _interopRequireDefault(require("@rollup/plugin-node-resolve"));
31
32var _pluginReplace = _interopRequireDefault(require("@rollup/plugin-replace"));
33
34var _pluginCommonjs = _interopRequireDefault(require("@rollup/plugin-commonjs"));
35
36var _builtinModules = _interopRequireDefault(require("builtin-modules"));
37
38var _rollupPluginVisualizer = _interopRequireDefault(require("rollup-plugin-visualizer"));
39
40var _rollupPluginPostcss = _interopRequireDefault(require("rollup-plugin-postcss"));
41
42var _lessPluginNpmImport = _interopRequireDefault(require("less-plugin-npm-import"));
43
44var _cssnano = _interopRequireDefault(require("cssnano"));
45
46var _autoprefixer = _interopRequireDefault(require("autoprefixer"));
47
48var _stanUtils = require("stan-utils");
49
50var _getBabelConfig = _interopRequireDefault(require("./get-babel-config"));
51
52var _utils = require("./utils");
53
54function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
55
56function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
57
58function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
59
60function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
61
62function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
63
64function getRollupConfig(opts) {
65 var _umd$cjs$esm$system, _moduleOpts$target, _moduleOpts$sourcemap, _moduleOpts$file, _moduleOpts$runtimeHe, _ref, _ref2;
66
67 var format = opts.type,
68 cwd = opts.cwd,
69 bundleOpt = opts.bundleOpt,
70 verbose = opts.verbose;
71 var entry = bundleOpt.entry,
72 esm = bundleOpt.esm,
73 cjs = bundleOpt.cjs,
74 umd = bundleOpt.umd,
75 system = bundleOpt.system,
76 file = bundleOpt.file,
77 _bundleOpt$target = bundleOpt.target,
78 target = _bundleOpt$target === void 0 ? 'browser' : _bundleOpt$target,
79 _bundleOpt$extractCSS = bundleOpt.extractCSS,
80 extractCSS = _bundleOpt$extractCSS === void 0 ? false : _bundleOpt$extractCSS,
81 _bundleOpt$injectCSS = bundleOpt.injectCSS,
82 injectCSS = _bundleOpt$injectCSS === void 0 ? true : _bundleOpt$injectCSS,
83 analyze = bundleOpt.analyze,
84 disableTypeCheck = bundleOpt.disableTypeCheck,
85 minify = bundleOpt.minify,
86 minifyOnly = bundleOpt.minifyOnly,
87 _runtimeHelpers = bundleOpt.runtimeHelpers,
88 sourcemap = bundleOpt.sourcemap,
89 _bundleOpt$babelPlugi = bundleOpt.babelPlugins,
90 babelPlugins = _bundleOpt$babelPlugi === void 0 ? [] : _bundleOpt$babelPlugi,
91 _bundleOpt$extraBabel = bundleOpt.extraBabelPlugins,
92 extraBabelPlugins = _bundleOpt$extraBabel === void 0 ? [] : _bundleOpt$extraBabel,
93 _bundleOpt$babelPrese = bundleOpt.babelPresets,
94 babelPresets = _bundleOpt$babelPrese === void 0 ? [] : _bundleOpt$babelPrese,
95 _bundleOpt$extraBabel2 = bundleOpt.extraBabelPresets,
96 extraBabelPresets = _bundleOpt$extraBabel2 === void 0 ? [] : _bundleOpt$extraBabel2,
97 injectOpts = bundleOpt.injectOpts,
98 terserOpts = bundleOpt.terserOpts,
99 replaceOpts = bundleOpt.replaceOpts,
100 commonjsOpts = bundleOpt.commonjsOpts,
101 nodeResolveOpts = bundleOpt.nodeResolveOpts,
102 typescript2Opts = bundleOpt.typescript2Opts,
103 postcssOpts = bundleOpt.postcssOpts,
104 aliasOpts = bundleOpt.aliasOpts,
105 visualizerOpts = bundleOpt.visualizerOpts,
106 _bundleOpt$extraExter = bundleOpt.extraExternals,
107 extraExternals = _bundleOpt$extraExter === void 0 ? [] : _bundleOpt$extraExter,
108 _bundleOpt$externalsE = bundleOpt.externalsExclude,
109 externalsExclude = _bundleOpt$externalsE === void 0 ? [] : _bundleOpt$externalsE,
110 _bundleOpt$extraRollu = bundleOpt.extraRollupPlugins,
111 extraRollupPlugins = _bundleOpt$extraRollu === void 0 ? [] : _bundleOpt$extraRollu,
112 _bundleOpt$externalPe = bundleOpt.externalPeerDependenciesOnly,
113 externalPeerDependenciesOnly = _bundleOpt$externalPe === void 0 ? false : _bundleOpt$externalPe,
114 vuePluginOpts = bundleOpt.vuePluginOpts;
115
116 var input = _path["default"].join(cwd, entry);
117
118 var entryExt = _path["default"].extname(entry);
119
120 var isTypeScript = entryExt === '.ts' || entryExt === '.tsx' || (0, _utils.checkTSConfigIsExist)(cwd);
121 var extensions = ['.js', '.jsx', '.ts', '.tsx', '.es6', '.es', '.mjs'];
122 var moduleOpts = (_umd$cjs$esm$system = {
123 umd: umd,
124 cjs: cjs,
125 esm: esm,
126 system: system
127 }) === null || _umd$cjs$esm$system === void 0 ? void 0 : _umd$cjs$esm$system[format];
128 var pkg = {};
129
130 try {
131 pkg = require(_path["default"].join(cwd, 'package.json'));
132 } catch (e) {}
133
134 var _target = (_moduleOpts$target = moduleOpts === null || moduleOpts === void 0 ? void 0 : moduleOpts.target) !== null && _moduleOpts$target !== void 0 ? _moduleOpts$target : target;
135
136 var _sourcemap = (_moduleOpts$sourcemap = moduleOpts === null || moduleOpts === void 0 ? void 0 : moduleOpts.sourcemap) !== null && _moduleOpts$sourcemap !== void 0 ? _moduleOpts$sourcemap : sourcemap;
137
138 var _minifyOnly = (moduleOpts === null || moduleOpts === void 0 ? void 0 : moduleOpts.minifyOnly) || minifyOnly;
139
140 var _minify = _minifyOnly || (moduleOpts === null || moduleOpts === void 0 ? void 0 : moduleOpts.minify) || minify;
141
142 var _file = (_moduleOpts$file = moduleOpts === null || moduleOpts === void 0 ? void 0 : moduleOpts.file) !== null && _moduleOpts$file !== void 0 ? _moduleOpts$file : file;
143
144 var browser = _target === 'browser';
145
146 if (['.tsx', '.jsx'].includes(_path["default"].extname(entry))) {
147 browser = true;
148 }
149
150 var runtimeHelpers = (_moduleOpts$runtimeHe = moduleOpts === null || moduleOpts === void 0 ? void 0 : moduleOpts.runtimeHelpers) !== null && _moduleOpts$runtimeHe !== void 0 ? _moduleOpts$runtimeHe : _runtimeHelpers;
151 var babelHelpers = runtimeHelpers ? 'runtime' : 'bundled';
152
153 var babelOptions = _objectSpread(_objectSpread({}, (0, _getBabelConfig["default"])({
154 type: format,
155 typescript: true,
156 target: _target,
157 runtimeHelpers: runtimeHelpers,
158 cwd: cwd
159 })), {}, {
160 babelrc: false,
161 configFile: false,
162 exclude: /\/node_modules\//,
163 babelHelpers: babelHelpers,
164 extensions: extensions
165 });
166
167 if (babelPresets.length) babelOptions.presets = babelPresets;
168 if (babelPlugins.length) babelOptions.plugins = babelPlugins;
169
170 (_ref = babelOptions.presets).push.apply(_ref, (0, _toConsumableArray2["default"])(extraBabelPresets));
171
172 (_ref2 = babelOptions.plugins).push.apply(_ref2, (0, _toConsumableArray2["default"])(extraBabelPlugins));
173
174 function getPlugins(format, isMin) {
175 var _RollupPluginVue$defa, _postcssOpts$use;
176
177 var RollupPluginVue = (0, _utils.getNodeModulePKG)('rollup-plugin-vue');
178 var isUMD = format === 'umd';
179 return [(_RollupPluginVue$defa = RollupPluginVue["default"]) === null || _RollupPluginVue$defa === void 0 ? void 0 : _RollupPluginVue$defa.call(RollupPluginVue, _objectSpread(_objectSpread({
180 css: true
181 }, RollupPluginVue.version.includes('6') ? {
182 compileTemplate: true
183 } : {}), vuePluginOpts)), aliasOpts && (0, _pluginAlias["default"])(aliasOpts), (0, _rollup["default"])(), (0, _pluginUrl["default"])(), (0, _pluginJson["default"])(), (0, _rollupPluginPostcss["default"])(_objectSpread(_objectSpread({
184 extract: extractCSS,
185 inject: injectCSS,
186 minimize: !!isMin
187 }, postcssOpts), {}, {
188 use: _objectSpread(_objectSpread({
189 stylus: {},
190 sass: {}
191 }, postcssOpts === null || postcssOpts === void 0 ? void 0 : postcssOpts.use), {}, {
192 // less can't use ~
193 less: _objectSpread({
194 plugins: [new _lessPluginNpmImport["default"]({
195 prefix: '~'
196 })],
197 javascriptEnabled: true
198 }, postcssOpts === null || postcssOpts === void 0 ? void 0 : (_postcssOpts$use = postcssOpts.use) === null || _postcssOpts$use === void 0 ? void 0 : _postcssOpts$use['less'])
199 }),
200 plugins: [].concat((0, _toConsumableArray2["default"])((postcssOpts === null || postcssOpts === void 0 ? void 0 : postcssOpts.plugins) || []), [isMin && (0, _cssnano["default"])({
201 preset: 'default'
202 }), (0, _autoprefixer["default"])()]).filter(Boolean)
203 })), injectOpts && (0, _pluginInject["default"])(injectOpts), (replaceOpts || isUMD) && (0, _pluginReplace["default"])(_objectSpread({
204 'process.env.NODE_ENV': JSON.stringify('production')
205 }, replaceOpts)), isTypeScript && require('rollup-plugin-typescript2')(_objectSpread({
206 cwd: cwd,
207 clean: true,
208 tsconfigDefaults: {
209 compilerOptions: {
210 declaration: true,
211 sourceMap: _sourcemap,
212 jsx: 'preserve'
213 }
214 },
215 verbosity: verbose ? 3 : 1,
216 cacheRoot: "./node_modules/.cache/.ts2_cache_".concat(format),
217 typescript: require('typescript'),
218 useTsconfigDeclarationDir: true,
219 check: !disableTypeCheck
220 }, typescript2Opts)), (0, _pluginCommonjs["default"])(commonjsOpts), (0, _pluginNodeResolve["default"])(_objectSpread({
221 mainFields: ['module', 'jsnext:main', 'main'],
222 browser: browser,
223 extensions: extensions,
224 preferBuiltins: target === 'node'
225 }, nodeResolveOpts)), (0, _pluginBabel["default"])(babelOptions), isMin && (0, _rollupPluginTerser.terser)(_objectSpread({
226 compress: {
227 pure_getters: true,
228 unsafe: true,
229 unsafe_comps: true
230 }
231 }, terserOpts)), (analyze || !_stanUtils.lodash.isEmpty(visualizerOpts)) && (0, _rollupPluginVisualizer["default"])(visualizerOpts)].concat((0, _toConsumableArray2["default"])(extraRollupPlugins)).filter(Boolean);
232 }
233
234 function getExternal() {
235 var _pkg;
236
237 var PKGs = (0, _toConsumableArray2["default"])(extraExternals);
238 PKGs.push.apply(PKGs, (0, _toConsumableArray2["default"])(Object.keys(((_pkg = pkg) === null || _pkg === void 0 ? void 0 : _pkg.peerDependencies) || {})));
239
240 if (format !== 'umd') {
241 if (!externalPeerDependenciesOnly) {
242 var _pkg2;
243
244 PKGs.push.apply(PKGs, (0, _toConsumableArray2["default"])(Object.keys(((_pkg2 = pkg) === null || _pkg2 === void 0 ? void 0 : _pkg2.dependencies) || {})));
245 }
246
247 if (runtimeHelpers) {
248 PKGs.push(/@babel\/runtime/);
249 }
250 } // @see https://github.com/rollup/plugins/tree/master/packages/node-resolve/#resolving-built-ins-like-fs
251
252
253 if (!browser) {
254 PKGs.concat(_builtinModules["default"]);
255 }
256
257 return PKGs.filter(function (v) {
258 return !externalsExclude.includes(v);
259 });
260 }
261
262 function getOutputFilePath() {
263 var isMin = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
264 var isMJS = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
265
266 function getExt() {
267 return [''].concat((0, _toConsumableArray2["default"])([format, isMin && 'min', isMJS ? 'mjs' : 'js'].filter(function (v) {
268 return v;
269 }))).join('.');
270 }
271
272 var fileName = _file || _path["default"].basename(entry, entryExt);
273
274 return _path["default"].join(cwd, "dist/".concat(fileName + getExt()));
275 }
276
277 var output = {
278 format: format,
279 sourcemap: _sourcemap,
280 file: getOutputFilePath(),
281 freeze: false
282 };
283 var externalArr = getExternal();
284
285 if (format === 'cjs') {
286 output.esModule = false;
287 output.exports = 'auto';
288 } // process globals and name
289
290
291 if (format === 'umd') {
292 var _umd = umd;
293 var global = externalArr.reduce(function (globals, name) {
294 if (name instanceof RegExp) name = name.source;
295
296 if (name.match(/^[a-z_$][a-z0-9_\-$]*$/)) {
297 globals[name] = _stanUtils.lodash.camelCase(name);
298 }
299
300 return globals;
301 }, {});
302
303 if (typeof (_umd === null || _umd === void 0 ? void 0 : _umd.globals) === 'string') {
304 Object.assign(global, (0, _utils.parseMappingArgument)(_umd === null || _umd === void 0 ? void 0 : _umd.globals));
305 } else {
306 Object.assign(global, (_umd === null || _umd === void 0 ? void 0 : _umd.globals) || {});
307 }
308
309 output.globals = global;
310 output.name = ((_umd === null || _umd === void 0 ? void 0 : _umd.name) || pkg.name && _stanUtils.lodash.camelCase(_path["default"].basename(pkg.name)) || '').replace(/^global\./, '');
311 }
312
313 var onwarn = function onwarn(warning, next) {};
314
315 var external = function external(source) {
316 var isMatch = function () {
317 function test(arr, id) {
318 var generated = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
319
320 var _iterator = _createForOfIteratorHelper(arr),
321 _step;
322
323 try {
324 for (_iterator.s(); !(_step = _iterator.n()).done;) {
325 var exp = _step.value;
326 if (exp === id) return true;
327
328 if (_stanUtils.lodash.isRegExp(exp) && exp.test(id)) {
329 if (verbose) {
330 console.log(_stanUtils.chalk.yellow("WARN The rule \"".concat(exp, "\" takes effect and the file \"").concat((0, _stanUtils.relativeNormalize)(id), "\" ").concat(generated ? 'will be compiled' : 'will not be compiled', ".")));
331 }
332
333 return true;
334 }
335 }
336 } catch (err) {
337 _iterator.e(err);
338 } finally {
339 _iterator.f();
340 }
341
342 return false;
343 }
344
345 if (test(externalsExclude, source, true)) return false;
346 return test(externalArr, source);
347 }();
348
349 if (isMatch && source === input) {
350 console.log(_stanUtils.chalk.red("The parameter \"externalArr\" matches the entry file, force mismatch, please check configuration"));
351 return false;
352 }
353
354 return isMatch;
355 };
356
357 switch (format) {
358 case 'system':
359 case 'umd':
360 case 'esm':
361 case 'cjs':
362 var plugins = getPlugins(format);
363 return [!_minifyOnly && {
364 input: input,
365 output: output,
366 inlineDynamicImports: true,
367 plugins: plugins,
368 external: external,
369 onwarn: onwarn
370 }, !_minifyOnly && (moduleOpts === null || moduleOpts === void 0 ? void 0 : moduleOpts.mjs) && {
371 input: input,
372 output: _objectSpread(_objectSpread({}, output), {}, {
373 file: getOutputFilePath(false, true)
374 }),
375 inlineDynamicImports: true,
376 plugins: plugins,
377 onwarn: onwarn,
378 external: external
379 }, (_minifyOnly || _minify) && {
380 input: input,
381 output: _objectSpread(_objectSpread({}, output), {}, {
382 file: getOutputFilePath(true)
383 }),
384 inlineDynamicImports: true,
385 plugins: getPlugins(format, true),
386 external: external,
387 onwarn: onwarn
388 }].filter(Boolean);
389
390 default:
391 throw new Error("Unsupported type ".concat(format));
392 }
393}
\No newline at end of file