1 | "use strict";
|
2 | var path = require("path");
|
3 | var rollup = require("rollup");
|
4 | var hypothetical = require("rollup-plugin-hypothetical");
|
5 | var fableLib = require("./lib");
|
6 | var constants = require("./constants");
|
7 | var build_1 = require("./build");
|
8 |
|
9 | var bundleCache = null;
|
10 | var fullRebuildTriggered = false;
|
11 | function normalizeProjectName(opts) {
|
12 | var projName = path.basename(opts.projFile[opts.projFile.length - 1]);
|
13 | return projName.substr(0, projName.indexOf(".")).replace(/[^A-Z_]/ig, "_");
|
14 | }
|
15 | function readRollupOptions(opts) {
|
16 | if (!opts.rollup) {
|
17 | return opts;
|
18 | }
|
19 | var rollupOpts = opts.rollup;
|
20 | var outDir = fableLib.pathJoin(opts.workingDir, opts.outDir);
|
21 | rollupOpts = typeof rollupOpts === "boolean" ? {} : rollupOpts;
|
22 | rollupOpts = typeof rollupOpts === "string" ? { dest: fableLib.pathJoin(outDir, rollupOpts) } : rollupOpts;
|
23 | rollupOpts.plugins = fableLib.resolvePlugins(rollupOpts.plugins, opts.workingDir, "rollup-plugin-");
|
24 | var plugins = [], nodeResolve = 'rollup-plugin-node-resolve', commonjs = 'rollup-plugin-commonjs';
|
25 |
|
26 | if (!rollupOpts.plugins.some(function (kv) { return kv[0].indexOf(nodeResolve) >= 0; })) {
|
27 | plugins.push(require(nodeResolve)({ ignoreGlobal: true }));
|
28 | }
|
29 | if (!rollupOpts.plugins.some(function (kv) { return kv[0].indexOf(commonjs) >= 0; })) {
|
30 | plugins.push(require(commonjs)({ jsnext: true, main: true, browser: true }));
|
31 | }
|
32 |
|
33 | for (var i = 0; i < rollupOpts.plugins.length; i++) {
|
34 | var kv = rollupOpts.plugins[i];
|
35 | plugins.push(require(kv[0])(kv[1]));
|
36 | }
|
37 | rollupOpts.plugins = plugins;
|
38 |
|
39 | rollupOpts.format = rollupOpts.format == null ? constants.JS_MODULES[opts.module] : rollupOpts.format;
|
40 | rollupOpts.sourceMap = rollupOpts.sourceMap == null ? opts.sourceMaps : rollupOpts.sourceMap;
|
41 | rollupOpts.moduleName = rollupOpts.moduleName || normalizeProjectName(opts);
|
42 | rollupOpts.dest = rollupOpts.dest == null
|
43 | ? fableLib.pathJoin(outDir, "bundle.js")
|
44 | : fableLib.pathJoin(opts.workingDir, rollupOpts.dest);
|
45 | if (!opts.verbose) {
|
46 | rollupOpts.onwarn = function (warning) { };
|
47 | }
|
48 | opts.rollup = rollupOpts;
|
49 | return opts;
|
50 | }
|
51 | exports.readRollupOptions = readRollupOptions;
|
52 | function clearBundleCache() {
|
53 | bundleCache = null;
|
54 | }
|
55 | exports.clearBundleCache = clearBundleCache;
|
56 | function bundle(jsFiles, opts, fableProc, continuation) {
|
57 | var rollupOpts = Object.assign({}, opts.rollup);
|
58 | rollupOpts.cache = bundleCache;
|
59 | rollupOpts.plugins.splice(0, 0, hypothetical({
|
60 | files: jsFiles, allowRealFiles: true, allowExternalModules: true
|
61 | }));
|
62 | if (rollupOpts.entry == null) {
|
63 | rollupOpts.entry = Object.getOwnPropertyNames(jsFiles)
|
64 | .find(function (f) { return jsFiles[f].isEntry; });
|
65 | }
|
66 | fableLib.stdoutLog("Bundling...");
|
67 | rollup.rollup(rollupOpts)
|
68 | .then(function (bundle) {
|
69 | var parsed = bundle.generate(rollupOpts);
|
70 | if (opts.watch) {
|
71 | bundleCache = bundle;
|
72 | }
|
73 |
|
74 |
|
75 | fableLib.writeFile(rollupOpts.dest, parsed.code, rollupOpts.sourceMap === true ? parsed.map : null);
|
76 | fableLib.stdoutLog("Bundled " + path.relative(opts.workingDir, rollupOpts.dest) + " at " + (new Date()).toLocaleTimeString());
|
77 | build_1.postbuild(opts, "SUCCESS", fableProc, continuation);
|
78 | })
|
79 | .catch(function (err) {
|
80 |
|
81 | fableLib.stderrLog(err.message);
|
82 | bundleCache = null;
|
83 | var buildResult = null;
|
84 | if (!fullRebuildTriggered) {
|
85 | fullRebuildTriggered = true;
|
86 | buildResult = "NEEDS_FULL_REBUILD";
|
87 | }
|
88 | else {
|
89 | fullRebuildTriggered = false;
|
90 | buildResult = "FAIL";
|
91 | }
|
92 | build_1.postbuild(opts, buildResult, fableProc, continuation);
|
93 | });
|
94 | }
|
95 | exports.bundle = bundle;
|