1 | 'use strict';
|
2 |
|
3 | var builtinModules = require('builtin-modules');
|
4 | var readPkg = require('read-pkg');
|
5 | var path = require('path');
|
6 | var babel = require('rollup-plugin-babel');
|
7 | var buble = require('rollup-plugin-buble');
|
8 | var commonjs = require('rollup-plugin-commonjs');
|
9 | var exportEquals = require('rollup-plugin-export-equals');
|
10 | var json = require('rollup-plugin-json');
|
11 | var nodeResolve = require('rollup-plugin-node-resolve');
|
12 | var rollupPluginTerser = require('rollup-plugin-terser');
|
13 | var ts2 = require('rollup-plugin-typescript2');
|
14 | var events = require('events');
|
15 | var rollup = require('rollup');
|
16 |
|
17 | var resolvePath = function (filename, cwd) { return path.resolve(cwd, filename); };
|
18 |
|
19 | function log(pattern) {
|
20 | var args = [], len = arguments.length - 1;
|
21 | while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];
|
22 |
|
23 |
|
24 | console.log.apply(console, [ pattern ].concat( args ));
|
25 | }
|
26 | function logFilename(filename, cwd, pattern) {
|
27 | log(pattern, path.relative(cwd, filename));
|
28 | }
|
29 |
|
30 | function error(msg) {
|
31 | return new TypeError(msg);
|
32 | }
|
33 | function invalidPkgField(fieldName) {
|
34 | return error(("Invalid package.json " + fieldName + " field."));
|
35 | }
|
36 | function invalidOption(optionName) {
|
37 | return error(("Invalid " + optionName + " options."));
|
38 | }
|
39 |
|
40 | function isNull(value) {
|
41 | return value == null;
|
42 | }
|
43 | function isObject(value) {
|
44 | return typeof value === "object" && !!value;
|
45 | }
|
46 | function isString(value) {
|
47 | return typeof value === "string";
|
48 | }
|
49 | function isBool(value) {
|
50 | return value === true || value === false;
|
51 | }
|
52 | var isArray = Array.isArray;
|
53 |
|
54 | function isBrowserFormat(value) {
|
55 | return !!value && (value === "iife" || value === "amd" || value === "umd");
|
56 | }
|
57 |
|
58 | function isValidMin(value) {
|
59 | return !!value && (value === "main" || value === "module" || value === "browser");
|
60 | }
|
61 | function isValidMinOption(value) {
|
62 | return isBool(value) || isValidMin(value) || isArray(value) && value.every(function (item) { return isValidMin(item); });
|
63 | }
|
64 |
|
65 | function _await(value, then, direct) {
|
66 | if (direct) {
|
67 | return then ? then(value) : value;
|
68 | }
|
69 |
|
70 | if (!value || !value.then) {
|
71 | value = Promise.resolve(value);
|
72 | }
|
73 |
|
74 | return then ? value.then(then) : value;
|
75 | }
|
76 |
|
77 | var analizePkg = _async(function (cwd, pkg) {
|
78 | return _await(pkg || readPkg({
|
79 | cwd: cwd
|
80 | }), function (resolvedPkg) {
|
81 | var obj;
|
82 |
|
83 | var pkgName = resolvedPkg.name;
|
84 | var cjsModuleFile = resolvedPkg.main;
|
85 | var esModuleFile = resolvedPkg.module;
|
86 | var browserFile = resolvedPkg.browser;
|
87 | var pkgTypes = resolvedPkg.types;
|
88 | var typings = resolvedPkg.typings;
|
89 | var runtimeDependencies = resolvedPkg.dependencies;
|
90 | var peerDependencies = resolvedPkg.peerDependencies;
|
91 | var bundledDependencies = resolvedPkg.bundledDependencies;
|
92 | var bundleDependencies = resolvedPkg.bundleDependencies;
|
93 | var bundlibOptions = resolvedPkg.bundlib;
|
94 |
|
95 | if (browserFile && !isString(browserFile)) {
|
96 | throw invalidPkgField("browser");
|
97 | }
|
98 |
|
99 | if (!isNull(bundlibOptions) && (!isObject(bundlibOptions) || isArray(bundlibOptions))) {
|
100 | throw invalidPkgField("bundlib");
|
101 | }
|
102 |
|
103 | var ref = bundlibOptions || {};
|
104 | var pkgInput = ref.input;
|
105 | var sourcemapFlag = ref.sourcemap;
|
106 | var esModuleFlag = ref.esModule;
|
107 | var interopFlag = ref.interop;
|
108 | var extendFlag = ref.extend;
|
109 | var equalsFlag = ref.equals;
|
110 | var pkgBrowserFormat = ref.browser;
|
111 | var browserName = ref.name;
|
112 | var amdId = ref.id;
|
113 | var browserGlobals = ref.globals;
|
114 | var iife = ref.iife;
|
115 | var amd = ref.amd;
|
116 | var umd = ref.umd;
|
117 | var min = ref.min;
|
118 |
|
119 | if (!isNull(pkgInput) && !isString(pkgInput)) {
|
120 | throw invalidOption("input");
|
121 | }
|
122 |
|
123 | if (!isNull(pkgBrowserFormat) && !isBrowserFormat(pkgBrowserFormat)) {
|
124 | throw invalidOption("browser");
|
125 | }
|
126 |
|
127 | if (!isNull(browserName) && !isString(browserName)) {
|
128 | throw invalidOption("name");
|
129 | }
|
130 |
|
131 | if (!isNull(amdId) && !isString(amdId)) {
|
132 | throw invalidOption("id");
|
133 | }
|
134 |
|
135 | if (!isNull(browserGlobals) && !isObject(browserGlobals)) {
|
136 | throw invalidOption("globals");
|
137 | }
|
138 |
|
139 | if (!isNull(min) && !isValidMinOption(min)) {
|
140 | throw invalidOption("min");
|
141 | }
|
142 |
|
143 |
|
144 | if (iife && amd || iife && umd || amd && umd) {
|
145 | throw error("multiple browser builds are no longer supported in bundlib >= 0.3.");
|
146 | }
|
147 |
|
148 | if (iife || amd || umd) {
|
149 |
|
150 | log("options iife, amd & umd are deprecated in version >= 0.3");
|
151 | }
|
152 |
|
153 | var deprecatedBrowserFormat = iife ? "iife" : amd ? "amd" : null;
|
154 |
|
155 | var browserFormat = pkgBrowserFormat || deprecatedBrowserFormat || "umd";
|
156 |
|
157 | var input = resolvePath(pkgInput || "src/index.ts", cwd);
|
158 | var typesPath = pkgTypes || typings;
|
159 | var output = {
|
160 | main: cjsModuleFile ? resolvePath(cjsModuleFile, cwd) : null,
|
161 | module: esModuleFile ? resolvePath(esModuleFile, cwd) : null,
|
162 | browser: browserFile ? resolvePath(browserFile, cwd) : null,
|
163 | types: typesPath ? resolvePath(typesPath, cwd) : null
|
164 | };
|
165 | var dependencies = {
|
166 | builtin: builtinModules,
|
167 | runtime: runtimeDependencies ? Object.keys(runtimeDependencies) : [],
|
168 | peer: peerDependencies ? Object.keys(peerDependencies) : [],
|
169 | bundled: bundledDependencies || bundleDependencies || []
|
170 | };
|
171 | var buildName = browserName || pkgName || null;
|
172 | var minify = !min ? {} : min === true ? {
|
173 | main: true,
|
174 | module: true,
|
175 | browser: true
|
176 | } : isArray(min) ? min.reduce(function (result, value) {
|
177 | result[value] = true;
|
178 | return result;
|
179 | }, {}) : ( obj = {}, obj[min] = true, obj );
|
180 | var globals = !browserGlobals ? null : isArray(browserGlobals) ? browserGlobals.reduce(function (result, value) {
|
181 | if (isString(value)) {
|
182 | result[value] = value;
|
183 | }
|
184 |
|
185 | return result;
|
186 | }, {}) : browserGlobals;
|
187 | var browser = {
|
188 | format: browserFormat,
|
189 | name: buildName,
|
190 | id: amdId || null,
|
191 | globals: globals
|
192 | };
|
193 | var options = {
|
194 | sourcemap: sourcemapFlag !== false,
|
195 | esModule: !!esModuleFlag,
|
196 | interop: !!interopFlag,
|
197 | extend: !!extendFlag,
|
198 | equals: !!equalsFlag
|
199 | };
|
200 | return {
|
201 | cwd: cwd,
|
202 | pkg: resolvedPkg,
|
203 | dependencies: dependencies,
|
204 | input: input,
|
205 | output: output,
|
206 | minify: minify,
|
207 | browser: browser,
|
208 | options: options
|
209 | };
|
210 | }, pkg);
|
211 | });
|
212 |
|
213 | function _async(f) {
|
214 | return function () {
|
215 | var arguments$1 = arguments;
|
216 |
|
217 | for (var args = [], i = 0; i < arguments.length; i++) {
|
218 | args[i] = arguments$1[i];
|
219 | }
|
220 |
|
221 | try {
|
222 | return Promise.resolve(f.apply(this, args));
|
223 | } catch (e) {
|
224 | return Promise.reject(e);
|
225 | }
|
226 | };
|
227 | }
|
228 |
|
229 | var BUILDING = "BUILDING";
|
230 | var BUILT = "BUILT";
|
231 | var WRITING = "WRITING";
|
232 | var WRITTEN = "WRITTEN";
|
233 | var ERROR = "ERROR";
|
234 |
|
235 | function createOutput(format, file, sourcemap, esModule, interop, extra) {
|
236 | var output = Object.assign({}, {file: file,
|
237 | format: format,
|
238 | sourcemap: sourcemap,
|
239 | esModule: esModule,
|
240 | interop: interop},
|
241 | extra);
|
242 | return output;
|
243 | }
|
244 | function createConfig(input, output, external, plugins, extra) {
|
245 | var config = Object.assign({}, {input: input,
|
246 | output: output,
|
247 | external: external,
|
248 | plugins: plugins.filter(Boolean)},
|
249 | extra);
|
250 | return config;
|
251 | }
|
252 | function createModuleConfig(input, format, file, sourcemap, esModule, interop, external, plugins) {
|
253 | var output = createOutput(format, file, sourcemap, esModule, interop);
|
254 | return createConfig(input, output, external, plugins);
|
255 | }
|
256 | function createBrowserConfig(input, format, file, sourcemap, esModule, interop, plugins, name, extend, globals, id) {
|
257 | var output = createOutput(format, file, sourcemap, esModule, interop, {
|
258 | name: name,
|
259 | extend: extend,
|
260 | globals: globals
|
261 | });
|
262 |
|
263 | if (id && (format === "umd" || format === "amd")) {
|
264 | output.amd = {
|
265 | id: id
|
266 | };
|
267 | }
|
268 |
|
269 | var external = globals ? Object.keys(globals) : [];
|
270 | return createConfig(input, output, external, plugins);
|
271 | }
|
272 |
|
273 | function renameMin(filename) {
|
274 | var ref = path.parse(filename);
|
275 | var dir = ref.dir;
|
276 | var name = ref.name;
|
277 | var ext = ref.ext;
|
278 | return path.join(dir, name + ".min" + ext);
|
279 | }
|
280 |
|
281 | var pkgToConfigs = function (ref, dev) {
|
282 | var cwd = ref.cwd;
|
283 | var apiInput = ref.input;
|
284 | var output = ref.output;
|
285 | var minify = ref.minify;
|
286 | var dependencies = ref.dependencies;
|
287 | var browserOptions = ref.browser;
|
288 | var options = ref.options;
|
289 |
|
290 | var apiFolder = path.dirname(apiInput);
|
291 | var cjsOutputFile = output.main;
|
292 | var esOutputFile = output.module;
|
293 | var browserOutputFile = output.browser;
|
294 | var typesOutputFile = output.types;
|
295 | var builtinDependencies = dependencies.builtin;
|
296 | var runtimeDependencies = dependencies.runtime;
|
297 | var peerDependencies = dependencies.peer;
|
298 | var sourcemap = options.sourcemap;
|
299 | var esModule = options.esModule;
|
300 | var interop = options.interop;
|
301 | var extend = options.extend;
|
302 | var equals = options.equals;
|
303 | var browserFormat = browserOptions.format;
|
304 | var pkgName = browserOptions.name;
|
305 | var id = browserOptions.id;
|
306 | var globals = browserOptions.globals;
|
307 | var prod = !dev;
|
308 | var configs = [];
|
309 | var typesOutputDir = typesOutputFile;
|
310 |
|
311 | if (typesOutputDir && path.extname(typesOutputDir) === ".ts") {
|
312 | typesOutputDir = path.dirname(typesOutputDir);
|
313 | }
|
314 |
|
315 | var modulePlugins = function (mini) {
|
316 | var declarationDir = !configs.length && typesOutputDir;
|
317 | var srcFolderContent = resolvePath("**/*.ts", apiFolder);
|
318 | return [ts2({
|
319 | include: srcFolderContent,
|
320 | cacheRoot: resolvePath(".cache/rpt2", cwd),
|
321 | useTsconfigDeclarationDir: true,
|
322 | tsconfigDefaults: {
|
323 | include: [srcFolderContent],
|
324 | exclude: []
|
325 | },
|
326 | tsconfigOverride: {
|
327 | compilerOptions: {
|
328 | target: "esnext",
|
329 | module: "esnext",
|
330 | moduleResolution: "node",
|
331 | sourceMap: sourcemap,
|
332 | declaration: !!declarationDir,
|
333 | declarationDir: declarationDir || "",
|
334 | emitDeclarationOnly: false
|
335 | }
|
336 | }
|
337 | }), json(), declarationDir && equals && exportEquals({
|
338 | file: resolvePath(path.join(declarationDir, "index.d.ts"), cwd)
|
339 | }) || null, babel({
|
340 | extensions: [".ts", ".js"],
|
341 | exclude: /node_modules/,
|
342 | babelrc: false,
|
343 | plugins: [require.resolve("babel-plugin-transform-async-to-promises")]
|
344 | }), buble({
|
345 | exclude: /node_modules/,
|
346 | target: {
|
347 | node: 0.12
|
348 | },
|
349 | objectAssign: true
|
350 | }), mini && rollupPluginTerser.terser({
|
351 | sourcemap: sourcemap,
|
352 | toplevel: true,
|
353 | module: true
|
354 | })];
|
355 | };
|
356 |
|
357 | var browserPlugins = function (mini) { return [nodeResolve(), commonjs() ].concat( modulePlugins(mini)); };
|
358 |
|
359 | var external = builtinDependencies.concat( runtimeDependencies, peerDependencies);
|
360 |
|
361 | if (esOutputFile) {
|
362 | var config = createModuleConfig(apiInput, "es", esOutputFile, sourcemap, true, false, external, modulePlugins(prod && !minify.module));
|
363 | configs.push(config);
|
364 |
|
365 | if (minify.module) {
|
366 | var configMin = createModuleConfig(apiInput, "es", renameMin(esOutputFile), sourcemap, true, false, external, modulePlugins(true));
|
367 | configs.push(configMin);
|
368 | }
|
369 | }
|
370 |
|
371 | if (cjsOutputFile) {
|
372 | var config$1 = createModuleConfig(apiInput, "cjs", cjsOutputFile, sourcemap, esModule, interop, external, modulePlugins(prod && !minify.main));
|
373 | configs.push(config$1);
|
374 |
|
375 | if (minify.main) {
|
376 | var configMin$1 = createModuleConfig(apiInput, "cjs", renameMin(cjsOutputFile), sourcemap, esModule, interop, external, modulePlugins(true));
|
377 | configs.push(configMin$1);
|
378 | }
|
379 | }
|
380 |
|
381 | if (!pkgName && browserOutputFile) {
|
382 | throw new Error("name option is required for IIFE and UMD builds");
|
383 | }
|
384 |
|
385 | if (browserOutputFile) {
|
386 | var config$2 = createBrowserConfig(apiInput, browserFormat, browserOutputFile, sourcemap, esModule, interop, browserPlugins(prod && !minify.browser), pkgName, extend, globals || {}, id);
|
387 | configs.push(config$2);
|
388 |
|
389 | if (minify.browser) {
|
390 | var configMin$2 = createBrowserConfig(apiInput, browserFormat, renameMin(browserOutputFile), sourcemap, esModule, interop, browserPlugins(true), pkgName, extend, globals || {}, id);
|
391 | configs.push(configMin$2);
|
392 | }
|
393 | }
|
394 |
|
395 | return configs;
|
396 | };
|
397 |
|
398 | function _async$1(f) {
|
399 | return function () {
|
400 | var arguments$1 = arguments;
|
401 |
|
402 | for (var args = [], i = 0; i < arguments.length; i++) {
|
403 | args[i] = arguments$1[i];
|
404 | }
|
405 |
|
406 | try {
|
407 | return Promise.resolve(f.apply(this, args));
|
408 | } catch (e) {
|
409 | return Promise.reject(e);
|
410 | }
|
411 | };
|
412 | }
|
413 |
|
414 | function createNext(arr, callback) {
|
415 | var index = 0;
|
416 |
|
417 | var next = _async$1(function (err) {
|
418 | if (!(index in arr)) {
|
419 | return;
|
420 | }
|
421 |
|
422 | var currentIndex = index++;
|
423 | var item = arr[currentIndex];
|
424 | callback(item, next, currentIndex);
|
425 | });
|
426 |
|
427 | return next;
|
428 | }
|
429 |
|
430 | function oneByOne(arr, callback) {
|
431 | var next = createNext(arr, callback);
|
432 | next();
|
433 | }
|
434 |
|
435 | function _async$2(f) {
|
436 | return function () {
|
437 | var arguments$1 = arguments;
|
438 |
|
439 | for (var args = [], i = 0; i < arguments.length; i++) {
|
440 | args[i] = arguments$1[i];
|
441 | }
|
442 |
|
443 | try {
|
444 | return Promise.resolve(f.apply(this, args));
|
445 | } catch (e) {
|
446 | return Promise.reject(e);
|
447 | }
|
448 | };
|
449 | }
|
450 |
|
451 | var build = _async$2(function (configs) {
|
452 | var result = new events.EventEmitter();
|
453 | setImmediate(function () {
|
454 | result.emit(BUILDING);
|
455 | oneByOne(configs, _async$2(function (config, next, index) {
|
456 | var output = config.output;
|
457 | var filename = output.file;
|
458 | result.emit(WRITING, filename);
|
459 | return _await$1(rollup.rollup(config), function (buildResult) {
|
460 | return _await$1(buildResult.write(output), function () {
|
461 | result.emit(WRITTEN, filename);
|
462 | next();
|
463 |
|
464 | if (index + 1 >= configs.length) {
|
465 | result.emit(BUILT);
|
466 | }
|
467 | });
|
468 | });
|
469 | }));
|
470 | });
|
471 | return result;
|
472 | });
|
473 |
|
474 | function _await$1(value, then, direct) {
|
475 | if (direct) {
|
476 | return then ? then(value) : value;
|
477 | }
|
478 |
|
479 | if (!value || !value.then) {
|
480 | value = Promise.resolve(value);
|
481 | }
|
482 |
|
483 | return then ? value.then(then) : value;
|
484 | }
|
485 |
|
486 | var ERR = function (result, ref) {
|
487 | var error = ref.error;
|
488 |
|
489 | result.emit(ERROR, error);
|
490 | };
|
491 |
|
492 | var map = {
|
493 | START: function START(result) {
|
494 | result.emit(BUILDING);
|
495 | },
|
496 |
|
497 | END: function END(result) {
|
498 | result.emit(BUILT);
|
499 | },
|
500 |
|
501 | BUNDLE_START: function BUNDLE_START(result, ref) {
|
502 | var output = ref.output;
|
503 |
|
504 | for (var filename of output) {
|
505 | result.emit(WRITING, filename);
|
506 | }
|
507 | },
|
508 |
|
509 | BUNDLE_END: function BUNDLE_END(result, ref) {
|
510 | var output = ref.output;
|
511 |
|
512 | for (var filename of output) {
|
513 | result.emit(WRITTEN, filename);
|
514 | }
|
515 | },
|
516 |
|
517 | ERROR: ERR,
|
518 | FATAL: ERR
|
519 | };
|
520 |
|
521 | var watch = function (configs) {
|
522 | var watcher = rollup.watch(configs);
|
523 | var result = new events.EventEmitter();
|
524 | watcher.on("event", function (event) {
|
525 | var code = event.code;
|
526 | var emit = map[code];
|
527 |
|
528 | if (emit) {
|
529 | emit(result, event);
|
530 | }
|
531 | });
|
532 | return result;
|
533 | };
|
534 |
|
535 | var rollItUp = function (configs, watch$1) {
|
536 | return watch$1 ? watch(configs) : build(configs);
|
537 | };
|
538 |
|
539 |
|
540 |
|
541 |
|
542 | function _await$2(value, then, direct) {
|
543 | if (direct) {
|
544 | return then ? then(value) : value;
|
545 | }
|
546 |
|
547 | if (!value || !value.then) {
|
548 | value = Promise.resolve(value);
|
549 | }
|
550 |
|
551 | return then ? value.then(then) : value;
|
552 | }
|
553 |
|
554 | var version = 0.4;
|
555 |
|
556 | function _async$3(f) {
|
557 | return function () {
|
558 | var arguments$1 = arguments;
|
559 |
|
560 | for (var args = [], i = 0; i < arguments.length; i++) {
|
561 | args[i] = arguments$1[i];
|
562 | }
|
563 |
|
564 | try {
|
565 | return Promise.resolve(f.apply(this, args));
|
566 | } catch (e) {
|
567 | return Promise.reject(e);
|
568 | }
|
569 | };
|
570 | }
|
571 |
|
572 | var bundlib = _async$3(function (cwd, ref) {
|
573 | if ( ref === void 0 ) ref = {};
|
574 | var dev = ref.dev;
|
575 | var watch = ref.watch;
|
576 | var silent = ref.silent;
|
577 |
|
578 | if (!silent) {
|
579 | log("bundlib v%s\r\n", version);
|
580 | log("> reading package.json...");
|
581 | }
|
582 |
|
583 | return _await$2(analizePkg(cwd), function (pkg) {
|
584 | var configs = pkgToConfigs(pkg, dev);
|
585 | return _await$2(rollItUp(configs, watch), function (buildProcess) {
|
586 | if (!silent) {
|
587 | buildProcess.on(WRITING, function (filename) {
|
588 | logFilename(filename, cwd, "building > %s...");
|
589 | });
|
590 | buildProcess.on(WRITTEN, function (filename) {
|
591 | logFilename(filename, cwd, "built > %s");
|
592 | });
|
593 | buildProcess.on(ERROR, function (err) {
|
594 | log(err);
|
595 | });
|
596 |
|
597 | if (watch) {
|
598 | buildProcess.on(BUILT, function () {
|
599 | log("> watching for changes...");
|
600 | });
|
601 | }
|
602 | }
|
603 |
|
604 | return buildProcess;
|
605 | });
|
606 | });
|
607 | });
|
608 |
|
609 | exports.analizePkg = analizePkg;
|
610 | exports.bundlib = bundlib;
|
611 | exports.pkgToConfigs = pkgToConfigs;
|
612 | exports.rollItUp = rollItUp;
|
613 |
|