UNPKG

3.6 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = build;
7
8var _package = require("../package");
9
10var _project = require("../project");
11
12var _path = _interopRequireDefault(require("path"));
13
14var _rollup = require("./rollup");
15
16var _aliases = require("./aliases");
17
18var logger = _interopRequireWildcard(require("../logger"));
19
20var fs = _interopRequireWildcard(require("fs-extra"));
21
22var _messages = require("../messages");
23
24var _errors = require("../errors");
25
26var _config = require("./config");
27
28var _workerClient = require("../worker-client");
29
30var _babel = require("../rollup-plugins/babel");
31
32function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }
33
34function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
35
36let browserPattern = /typeof\s+(window|document)/;
37
38async function buildPackage(pkg, aliases) {
39 let configs = (0, _config.getRollupConfigs)(pkg, aliases);
40 await Promise.all([fs.remove(_path.default.join(pkg.directory, "dist")), ...pkg.entrypoints.map(entrypoint => {
41 return fs.remove(_path.default.join(entrypoint.directory, "dist"));
42 })]); // TODO: Fix all this stuff to work with multiple entrypoints
43
44 let hasCheckedBrowser = pkg.entrypoints[0].browser !== null;
45 await Promise.all(configs.map(async ({
46 config,
47 outputs
48 }) => {
49 // $FlowFixMe this is not a problem with flow, i did something wrong but it's not worth fixing right now
50 let bundle = await (0, _rollup.rollup)(config);
51 let result = await Promise.all(outputs.map(outputConfig => {
52 return bundle.write(outputConfig);
53 }));
54 const nodeDevOutput = result[0].output;
55
56 if (!hasCheckedBrowser) {
57 let allCode = nodeDevOutput.map(({
58 code
59 }) => code).join("\n");
60 hasCheckedBrowser = true;
61
62 if (browserPattern.test(allCode)) {
63 throw (async () => {
64 let shouldAddBrowserField = await _messages.confirms.addBrowserField(pkg);
65
66 if (shouldAddBrowserField) {
67 pkg.setFieldOnEntrypoints("browser");
68 await Promise.all(pkg.entrypoints.map(x => x.save()));
69 } else {
70 throw new _errors.FatalError(_messages.errors.deniedWriteBrowserField, pkg.name);
71 }
72 })();
73 }
74 }
75 }));
76}
77
78async function retryableBuild(pkg, aliases) {
79 try {
80 await buildPackage(pkg, aliases);
81 } catch (err) {
82 if (err instanceof Promise) {
83 await err;
84 await retryableBuild(pkg, aliases);
85 return;
86 }
87
88 if (err instanceof _errors.FatalError) {
89 throw err;
90 }
91
92 throw new _errors.UnexpectedBuildError(err, pkg.name);
93 }
94}
95
96async function build(directory) {
97 // do more stuff with checking whether the repo is using yarn workspaces or bolt
98 try {
99 (0, _workerClient.createWorker)();
100 await _babel.hasherPromise;
101 let project = await _project.Project.create(directory);
102 logger.info("building bundles!");
103 let aliases = (0, _aliases.getAliases)(project);
104 await Promise.all(project.packages.map(pkg => retryableBuild(pkg, aliases)));
105 logger.success("built bundles!");
106 } finally {
107 (0, _workerClient.destroyWorker)();
108 }
109}
\No newline at end of file