UNPKG

2.62 kBJavaScriptView Raw
1// TODO: ES2015 maybe, baby?
2var path = require('path');
3
4var rollup = require('rollup');
5var babel = require('rollup-plugin-babel');
6var json = require('rollup-plugin-json');
7var localResolve = require('rollup-plugin-local-resolve');
8var camelCase = require('camel-case');
9var objectAssign = require('object-assign');
10
11var Promise = (typeof Promise === 'undefined') ? require('pinkie-promise') : Promise;
12
13module.exports = function rollupLib(options) {
14 var rollupOptions = objectAssign({}, options);
15 var babelOptions;
16
17 var baseConfig = {};
18 var builds = [];
19
20 rollupOptions.name = rollupOptions.name || 'mylibrary';
21 rollupOptions.moduleName = rollupOptions.moduleName || camelCase(rollupOptions.name);
22 rollupOptions.dest = rollupOptions.dest || 'dist';
23 rollupOptions.entry = rollupOptions.entry || 'index.js';
24 rollupOptions.format = rollupOptions.format || ['es6', 'cjs', 'umd'];
25 rollupOptions.babel = rollupOptions.babel || 'inherit';
26
27 babelOptions = (rollupOptions.babel === 'inherit') ? void 0 : rollupOptions.babel;
28
29 if (babelOptions && babelOptions.presets) {
30 babelOptions.presets = babelOptions.presets.map(function mapPreset(preset) {
31 return require('babel-preset-' + preset);
32 });
33 }
34
35 if (babelOptions && babelOptions.plugins) {
36 babelOptions.plugins = babelOptions.plugins.map(function mapPlugin(plugin) {
37 return require('babel-plugin-' + plugin);
38 });
39 }
40
41 if (rollupOptions.format.length === 0) {
42 rollupOptions.format = ['es6', 'cjs', 'umd'];
43 }
44
45 rollupOptions.plugins = rollupOptions.plugins || [babel(babelOptions), json(), localResolve()];
46
47 baseConfig = {
48 entry: rollupOptions.entry,
49 plugins: rollupOptions.plugins
50 };
51
52 builds = rollupOptions.format.map(function buildFormat(format) {
53 var startTime = Date.now();
54 var config = objectAssign({}, baseConfig);
55
56 config.format = format;
57 config.dest = path.join(rollupOptions.dest, rollupOptions.name);
58
59 if (format === 'es6') {
60 config.dest += '.es2015';
61 }
62
63 if (format === 'umd') {
64 config.dest += '.umd';
65 config.moduleName = rollupOptions.moduleName;
66 }
67
68 if (format === 'iife') {
69 config.dest += '.iife';
70 config.moduleName = rollupOptions.moduleName;
71 }
72
73 config.dest += '.js';
74
75 return rollup.rollup(config).then(function rollupBundle(bundle) {
76 var endTime = 0;
77
78 bundle.write(config);
79
80 endTime = Date.now();
81
82 return {
83 format: format,
84 name: rollupOptions.name,
85 startTime: startTime,
86 endTime: endTime
87 };
88 });
89 });
90
91 return Promise.all(builds);
92};