UNPKG

75.5 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', { value: true });
4
5function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
6
7var tslib = require('tslib');
8var chalk = _interopDefault(require('chalk'));
9var events = require('events');
10var fs = require('fs');
11var fs__default = _interopDefault(fs);
12var nodePath = require('path');
13var nodePath__default = _interopDefault(nodePath);
14var write = _interopDefault(require('write'));
15var resolve = _interopDefault(require('@rollup/plugin-node-resolve'));
16var commonjs = _interopDefault(require('@rollup/plugin-commonjs'));
17var json = _interopDefault(require('@rollup/plugin-json'));
18var copyDir = _interopDefault(require('@zhangfuxing/copydir'));
19var simplyGetFiles = _interopDefault(require('simply-get-files'));
20var rollup = require('rollup');
21var pupa = _interopDefault(require('pupa'));
22var makeDir = _interopDefault(require('make-dir'));
23var spawn = _interopDefault(require('cross-spawn'));
24
25var appName = "driza";
26var levels = ["info", "notice", "warn", "error", "fatal"];
27var timestamp = Date.now();
28var currentLogger = console.log;
29var currentLevel = 0;
30var setLogger = function (customLogger) {
31 currentLogger = customLogger;
32};
33var setLevel = function (customLevel) {
34 currentLevel = levels.findIndex(function (l) { return l === customLevel; });
35};
36var debug = (function (job) {
37 var log = function (messageLevel) {
38 var messages = [];
39 for (var _i = 1; _i < arguments.length; _i++) {
40 messages[_i - 1] = arguments[_i];
41 }
42 var messageLevelIndex = levels.findIndex(function (l) { return l === messageLevel; });
43 if (messageLevelIndex >= currentLevel) {
44 currentLogger.apply(void 0, tslib.__spreadArrays([chalk.blue.bold(appName + ":" + job)], messages, [chalk.blue.bold("+" + (Date.now() - timestamp) + "ms")]));
45 }
46 };
47 function fatal() {
48 var message = [];
49 for (var _i = 0; _i < arguments.length; _i++) {
50 message[_i] = arguments[_i];
51 }
52 log.apply(void 0, tslib.__spreadArrays(["fatal", chalk.black.bgRed(' FATAL ERROR ')], message));
53 notice('Fatal error. Exiting with code 1.');
54 process.exit(1);
55 }
56 function error() {
57 var message = [];
58 for (var _i = 0; _i < arguments.length; _i++) {
59 message[_i] = arguments[_i];
60 }
61 log.apply(void 0, tslib.__spreadArrays(["error", chalk.black.bgRed(' ERROR ')], message));
62 }
63 function warn() {
64 var message = [];
65 for (var _i = 0; _i < arguments.length; _i++) {
66 message[_i] = arguments[_i];
67 }
68 log.apply(void 0, tslib.__spreadArrays(["warn", chalk.black.bgYellow(' WARN ')], message));
69 }
70 function notice() {
71 var message = [];
72 for (var _i = 0; _i < arguments.length; _i++) {
73 message[_i] = arguments[_i];
74 }
75 log.apply(void 0, tslib.__spreadArrays(["notice", chalk.black.bgCyan(' NOTICE ')], message));
76 }
77 function info() {
78 var message = [];
79 for (var _i = 0; _i < arguments.length; _i++) {
80 message[_i] = arguments[_i];
81 }
82 log.apply(void 0, tslib.__spreadArrays(["info", chalk.black.bgGreen(' INFO ')], message));
83 }
84 return {
85 fatal: fatal,
86 error: error,
87 warn: warn,
88 notice: notice,
89 info: info,
90 };
91});
92
93var PromiseEmitter = /** @class */ (function (_super) {
94 tslib.__extends(PromiseEmitter, _super);
95 function PromiseEmitter() {
96 return _super !== null && _super.apply(this, arguments) || this;
97 }
98 PromiseEmitter.prototype.set = function (fn) {
99 this.func = fn;
100 };
101 PromiseEmitter.prototype.run = function () {
102 return tslib.__awaiter(this, void 0, Promise, function () {
103 return tslib.__generator(this, function (_a) {
104 return [2 /*return*/, this.func()];
105 });
106 });
107 };
108 return PromiseEmitter;
109}(events.EventEmitter));
110
111var log = debug('read-files');
112var read = function () {
113 var paths = [];
114 for (var _i = 0; _i < arguments.length; _i++) {
115 paths[_i] = arguments[_i];
116 }
117 return new Promise(function (resolve) {
118 var path = nodePath__default.join.apply(nodePath__default, paths);
119 fs__default.readFile(path, 'utf-8', function (err, data) {
120 if (err)
121 return resolve("");
122 return resolve(data);
123 });
124 });
125};
126var readJSON = function () {
127 var paths = [];
128 for (var _i = 0; _i < arguments.length; _i++) {
129 paths[_i] = arguments[_i];
130 }
131 return tslib.__awaiter(void 0, void 0, Promise, function () {
132 var res;
133 return tslib.__generator(this, function (_a) {
134 switch (_a.label) {
135 case 0: return [4 /*yield*/, read.apply(void 0, paths)];
136 case 1:
137 res = _a.sent();
138 try {
139 return [2 /*return*/, JSON.parse(res.length ? res : "{}")];
140 }
141 catch (e) {
142 log.error('Failed to load JSON', e);
143 return [2 /*return*/, {}];
144 }
145 return [2 /*return*/];
146 }
147 });
148 });
149};
150
151var makeSlug = (function (str) {
152 return str
153 .replace(/\.git/g, "")
154 .replace(/[^a-zA-Z0-9]/g, "-")
155 .replace(/-+/g, "-")
156 .toLowerCase();
157});
158
159var nativeNodeModules = [
160 "process",
161 "events",
162 "stream",
163 "util",
164 "path",
165 "buffer",
166 "querystring",
167 "url",
168 "string_decoder",
169 "punycode",
170 "http",
171 "https",
172 "os",
173 "assert",
174 "constants",
175 "timers",
176 "console",
177 "vm",
178 "zlib",
179 "tty",
180 "domain",
181 "dns",
182 "dgram",
183 "child_process",
184 "cluster",
185 "module",
186 "net",
187 "readline",
188 "repl",
189 "tls",
190 "fs",
191 "crypto",
192];
193
194const img = 'data:image/png;base64,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';
195
196var bugs = {
197 url: "https://github.com/Vehmloewff/driza/issues/new"
198};
199
200var log$1 = debug('platform-keeper');
201var currentPlatform;
202var setPlatformResult = function (platform) { return (currentPlatform = platform); };
203var getPlatformResult = function () {
204 if (!currentPlatform)
205 log$1.fatal("[internal error] the platform was requested before it was set. Please consider opening an issue: " + bugs.url);
206 return currentPlatform;
207};
208
209var fileExists = (function (file) {
210 return new Promise(function (resolve) {
211 if (!file)
212 resolve();
213 fs.access(file, fs.constants.F_OK, function (err) {
214 if (err)
215 resolve();
216 else
217 resolve(file);
218 });
219 });
220});
221
222var log$2 = debug('default-options');
223var defaultBuildOptions = function (options) { return tslib.__awaiter(void 0, void 0, Promise, function () {
224 var isBuild, isCompile, isRun, dir, pkg, name, outDir, toReturn, test, invalidTypeMessage, platform, platformIsRightType, external, globals, path, e_1;
225 return tslib.__generator(this, function (_a) {
226 switch (_a.label) {
227 case 0:
228 // Set the children
229 if (!options.author)
230 options.author = {};
231 if (!options.watch)
232 options.watch = {};
233 isBuild = options.object === 'build';
234 isCompile = options.object === 'compile';
235 isRun = !isBuild && !isCompile;
236 dir = options.dir || process.cwd();
237 return [4 /*yield*/, readJSON(dir, 'package.json')];
238 case 1:
239 pkg = _a.sent();
240 if (typeof pkg.author === 'string') {
241 name = pkg.author;
242 delete pkg.author;
243 pkg.author.name = name;
244 }
245 else if (!pkg.author)
246 pkg.author = {};
247 outDir = nodePath__default.join(dir, options.outDir || "dist");
248 toReturn = {
249 platform: options.platform,
250 sourceMap: options.sourceMap || true,
251 object: options.object || 'run',
252 dir: dir,
253 name: options.name || pkg.displayName || "Driza App",
254 description: options.description || pkg.description || "",
255 version: options.version || pkg.version || "1.0.0-beta.3",
256 // id will be set later
257 // bundleId will be set later
258 author: {
259 name: options.author.name || pkg.author.name || "Mr. Awesome",
260 // devId will be set later
261 email: options.author.email || pkg.author.email || "mr.awesome@example.com",
262 url: options.author.url || pkg.author.url || "https://example.com/mrawesome",
263 },
264 icon: options.icon || {
265 width: 512,
266 height: 512,
267 // This path will be made absolute later.
268 // It is not made absolute now because options.icon.path is expected to be relative
269 path: "img/icon.png",
270 },
271 appEntry: nodePath__default.join(dir, options.appEntry || pkg.main || 'src/index.js'),
272 outDir: outDir,
273 assetsDir: options.assetsDir || "assets",
274 // rollupOptions will be set later
275 additionalPlugins: options.additionalPlugins || [],
276 // electronRollupOptions will be set later
277 // cordova will be set later
278 watch: {
279 enable: options.watch.enable || false,
280 include: options.watch.include || [],
281 exclude: options.watch.exclude || [],
282 },
283 driza: options.driza || "driza",
284 };
285 test = /^([1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;
286 if (!test.test(toReturn.version)) {
287 log$2.error("The version must be a semver (https://semver.org) string that starts with a nubmber greater than or equal to '1'. Recieved '" + toReturn.version + "'.");
288 log$2.error("Sorry, that's a requirement by android.");
289 log$2.fatal("Invalid version!");
290 }
291 // Set the id
292 toReturn.id = options.id || pkg.name || makeSlug(toReturn.name);
293 // Make the icon path relative if it is absolute
294 if (nodePath__default.isAbsolute(toReturn.icon.path))
295 toReturn.icon.path = nodePath__default.relative(toReturn.icon.path, dir);
296 // Set the devId
297 toReturn.author.devId = options.author.devId || makeSlug(toReturn.author.name).replace(/-/g, "");
298 // Set the bundleId
299 toReturn.bundleId = "com." + toReturn.author.devId + "." + toReturn.id.replace(/-/g, "");
300 // Create an appicon if it does not exist
301 return [4 /*yield*/, new Promise(function (resolve) {
302 fs.access(toReturn.icon.path, fs.constants.W_OK, function (err) {
303 if (err) {
304 // @ts-ignore
305 write(toReturn.icon.path, img.replace(/^data:image\/png;base64,/, ""), { encoding: 'base64' })
306 .then(resolve)
307 .catch(function (err) {
308 log$2.error("We encountered an error writing the default app icon.", err);
309 resolve();
310 });
311 }
312 else
313 resolve();
314 });
315 })];
316 case 2:
317 // Create an appicon if it does not exist
318 _a.sent();
319 invalidTypeMessage = "options.platform is not of the right type.";
320 if (!options.platform)
321 log$2.fatal("options.platform is required");
322 if (typeof options.platform !== 'function')
323 log$2.fatal(invalidTypeMessage, "Expected a function, but got " + typeof options.platform);
324 return [4 /*yield*/, options.platform(toReturn, debug)];
325 case 3:
326 platform = _a.sent();
327 if (!platform)
328 log$2.fatal(invalidTypeMessage, "Function did not return a defined value.");
329 platformIsRightType =
330 // buildOptions is optional
331 platform.plugin &&
332 // platform.extraBuilds is optional
333 // platform.external is optional
334 platform.isSandboxed &&
335 platform.tag &&
336 platform.bundlePath &&
337 platform.runtimePath &&
338 platform.run &&
339 // It is required that platform.run be a rollup plugin
340 platform.run().name;
341 if (!platformIsRightType)
342 log$2.fatal(invalidTypeMessage, "Not all of the required hooks were provided.");
343 setPlatformResult(platform);
344 external = tslib.__spreadArrays(nativeNodeModules, (typeof platform.external === 'function' && platform.external() ? platform.external() : []));
345 globals = {};
346 external.forEach(function (str) {
347 globals[str] = "{}";
348 });
349 // Set the rollupOptionsClient
350 toReturn.rollupOptions = options.rollupOptions || {
351 input: toReturn.appEntry,
352 output: {
353 file: nodePath__default.join(outDir, platform.tag, platform.bundlePath()),
354 format: platform.isSandboxed() ? 'iife' : 'commonjs',
355 globals: platform.isSandboxed() ? globals : {},
356 },
357 plugins: tslib.__spreadArrays(toReturn.additionalPlugins, [
358 resolve({
359 browser: platform.isSandboxed(),
360 preferBuiltins: true,
361 }),
362 commonjs(),
363 json(),
364 isRun && platform.run(),
365 ]),
366 external: external,
367 onwarn: function (warning) {
368 var containsKnown = false;
369 if (/level\-blobs/.test(warning.message))
370 containsKnown = true;
371 if (/fwd\-stream/.test(warning.message))
372 containsKnown = true;
373 if (/concat\-stream/.test(warning.message))
374 containsKnown = true;
375 if (/rollup\-plugin\-node\-builtins/.test(warning.message))
376 containsKnown = true;
377 if (/levelup/.test(warning.message))
378 containsKnown = true;
379 if (/bl/.test(warning.message))
380 containsKnown = true;
381 if (/Circular dependency:/.test(warning.message) && containsKnown)
382 return;
383 debug('bundle').warn("[Rollup bundle client]", warning.message);
384 },
385 };
386 return [4 /*yield*/, fileExists(toReturn.assetsDir)];
387 case 4:
388 if (!_a.sent()) return [3 /*break*/, 9];
389 _a.label = 5;
390 case 5:
391 _a.trys.push([5, 7, , 8]);
392 path = nodePath__default.join(toReturn.outDir, platform.tag, platform.assetsPath());
393 return [4 /*yield*/, copyDir(toReturn.assetsDir, path)];
394 case 6:
395 _a.sent();
396 log$2.info("Copied the assets to \"" + path + "\".");
397 return [3 /*break*/, 8];
398 case 7:
399 e_1 = _a.sent();
400 log$2.error("Failed to copy the assets over.", e_1);
401 return [3 /*break*/, 8];
402 case 8: return [3 /*break*/, 10];
403 case 9:
404 log$2.info("Not copying the assets over. Path \"" + toReturn.assetsDir + "\" was not found.");
405 _a.label = 10;
406 case 10: return [2 /*return*/, toReturn];
407 }
408 });
409}); };
410
411var runtime = "import * as commonjsHelpers from '\u0000commonjsHelpers.js';\n\nvar dist = commonjsHelpers.createCommonjsModule(function (module, exports) {\n'use strict';\n\nObject.defineProperty(exports, '__esModule', { value: true });\n\n/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n\r\nvar __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\n\nvar platform = \"%PLATFORM%\";\nvar buildOptions = JSON.parse('%BUILD_OPTIONS%');\nfunction createBrowserWindow(options) {\n if (options === void 0) { options = {}; }\n // @ts-ignore\n var win = new BrowserWindow(__assign({ icon: buildOptions.icon.path }, options));\n win.loadURL(\"file://\" + __dirname + \"/index.html\");\n win.webContents.on('did-finish-load', function () {\n win.webContents.send('window-id', win.id);\n });\n return win;\n}\nvar assets = [\n/*ASSETS_HERE*/\n];\n\nexports.assets = assets;\nexports.buildOptions = buildOptions;\nexports.createBrowserWindow = createBrowserWindow;\nexports.platform = platform;\n});\n\nexport default commonjsHelpers.unwrapExports(dist);\nexport { dist as __moduleExports };\nvar dist_1 = dist.assets;\nexport { dist_1 as assets };\nvar dist_2 = dist.buildOptions;\nexport { dist_2 as buildOptions };\nvar dist_3 = dist.createBrowserWindow;\nexport { dist_3 as createBrowserWindow };\nvar dist_4 = dist.platform;\nexport { dist_4 as platform };";
412
413var log$3 = debug("direct-runtime");
414var directRuntime = (function (options) {
415 var uniqueId = "driza?runtime";
416 return {
417 name: "direct-driza-runtime",
418 resolveId: function (source) {
419 if (source !== options.driza)
420 return null;
421 return uniqueId;
422 },
423 load: function (id) { return tslib.__awaiter(void 0, void 0, void 0, function () {
424 var code, platformData, importStatement, assets;
425 return tslib.__generator(this, function (_a) {
426 switch (_a.label) {
427 case 0:
428 if (id !== uniqueId)
429 return [2 /*return*/, null];
430 code = runtime;
431 platformData = getPlatformResult().data;
432 if (platformData === "electron") {
433 importStatement = "import { BrowserWindow } from 'electron';\n";
434 code = importStatement + code;
435 }
436 return [4 /*yield*/, simplyGetFiles(options.assetsDir)];
437 case 1:
438 assets = _a.sent();
439 assets.push(getPlatformResult().bundlePath());
440 if (platformData === "browser")
441 assets.push("service-worker.js");
442 assets = assets.map(function (asset) { return "'" + nodePath__default.join(getPlatformResult().assetsPath(), asset) + "'"; });
443 code = code
444 .replace("%PLATFORM%", getPlatformResult().tag)
445 .replace("%BUILD_OPTIONS%", JSON.stringify(options))
446 .replace("/*ASSETS_HERE*/", assets.join(', '));
447 log$3.info("Customized runtime.");
448 return [2 /*return*/, {
449 code: code,
450 }];
451 }
452 });
453 }); },
454 };
455});
456
457var log$4 = debug('prepare-rollup');
458function addPlugins(rollupOptions, plugins, before) {
459 var _a, _b;
460 if (!rollupOptions.plugins)
461 rollupOptions.plugins = [];
462 (_a = rollupOptions.plugins).push.apply(_a, plugins);
463 if (before) {
464 (_b = rollupOptions.plugins).unshift.apply(_b, before);
465 }
466 return rollupOptions;
467}
468var createOptions = function (options) { return tslib.__awaiter(void 0, void 0, Promise, function () {
469 var toReturn, extraBuilds, result;
470 return tslib.__generator(this, function (_a) {
471 toReturn = [];
472 extraBuilds = getPlatformResult().extraBuilds;
473 if (extraBuilds) {
474 if (typeof extraBuilds === 'function') {
475 result = extraBuilds();
476 result.forEach(function (build) {
477 toReturn.push(addPlugins(build, [], [directRuntime(options)]));
478 });
479 }
480 else
481 log$4.error("Expected platform.extraBuilds to be a function. Recieved type " + typeof extraBuilds);
482 }
483 toReturn.push(addPlugins(options.rollupOptions, [getPlatformResult().plugin()], [directRuntime(options)]));
484 return [2 /*return*/, toReturn];
485 });
486}); };
487
488var log$5 = debug('bundle');
489var build = function (options, rollupOptions) { return tslib.__awaiter(void 0, void 0, void 0, function () {
490 var params, watcher, _a, _b, _i, i, bundle, output, _c, _d, _e, x, err_1;
491 return tslib.__generator(this, function (_f) {
492 switch (_f.label) {
493 case 0:
494 params = rollupOptions.map(function (opt) { return (tslib.__assign(tslib.__assign({}, opt), { watch: options.watch.enable ? opt.watch : {} })); });
495 if (!options.watch.enable) return [3 /*break*/, 1];
496 watcher = rollup.watch(params);
497 watcher.on('event', function (event) {
498 if (event.code === 'START')
499 log$5.notice('Starting bundle generation...');
500 else if (event.code === 'BUNDLE_START')
501 log$5.notice('Starting a new section in the bundle...');
502 else if (event.code === 'BUNDLE_END')
503 log$5.notice('Finished bundle section.');
504 else if (event.code === 'END')
505 log$5.notice('Finished generating the bundle. Waiting for changes...');
506 else if (event.code === 'ERROR')
507 log$5.error('Recieved an error while bundling!', event.error.message);
508 });
509 return [3 /*break*/, 13];
510 case 1:
511 log$5.notice('Starting bundle generation...');
512 _f.label = 2;
513 case 2:
514 _f.trys.push([2, 11, , 12]);
515 _a = [];
516 for (_b in params)
517 _a.push(_b);
518 _i = 0;
519 _f.label = 3;
520 case 3:
521 if (!(_i < _a.length)) return [3 /*break*/, 10];
522 i = _a[_i];
523 log$5.notice('Starting a new section in the bundle...');
524 return [4 /*yield*/, rollup.rollup(params[i])];
525 case 4:
526 bundle = _f.sent();
527 output = params[i].output;
528 if (!Array.isArray(output)) {
529 output = [output];
530 }
531 _c = [];
532 for (_d in output)
533 _c.push(_d);
534 _e = 0;
535 _f.label = 5;
536 case 5:
537 if (!(_e < _c.length)) return [3 /*break*/, 8];
538 x = _c[_e];
539 return [4 /*yield*/, bundle.write(output[x])];
540 case 6:
541 _f.sent();
542 _f.label = 7;
543 case 7:
544 _e++;
545 return [3 /*break*/, 5];
546 case 8:
547 log$5.notice('Finished bundle section.');
548 _f.label = 9;
549 case 9:
550 _i++;
551 return [3 /*break*/, 3];
552 case 10: return [3 /*break*/, 12];
553 case 11:
554 err_1 = _f.sent();
555 log$5.error('Recieved an error while bundling!', err_1.message, err_1);
556 return [3 /*break*/, 12];
557 case 12:
558 log$5.notice('Finished generating the bundle.');
559 _f.label = 13;
560 case 13: return [2 /*return*/];
561 }
562 });
563}); };
564
565var template = "<!DOCTYPE html>\n<html lang=\"en\">\n\t<head>\n\t\t<!-- Set the default title -->\n\t\t<title>Loading...</title>\n\n\t\t<!-- Meta -->\n\t\t<meta charset=\"utf-8\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" />\n\n\t\t<!-- Build script generated by rollup -->\n\t\t<script defer src=\"{appEntry}\"></script>\n\t</head>\n\n\t<body></body>\n</html>\n";
566
567var log$6 = debug('actions');
568function writeTemplate(dir, options) {
569 return tslib.__awaiter(this, void 0, void 0, function () {
570 return tslib.__generator(this, function (_a) {
571 switch (_a.label) {
572 case 0: return [4 /*yield*/, write(nodePath__default.join(dir, 'index.html'), pupa(template, options))];
573 case 1:
574 _a.sent();
575 log$6.info("Migrated template to index.html");
576 return [2 /*return*/];
577 }
578 });
579 });
580}
581function writeJSONBuildOptions(dir, options) {
582 return tslib.__awaiter(this, void 0, void 0, function () {
583 return tslib.__generator(this, function (_a) {
584 switch (_a.label) {
585 case 0: return [4 /*yield*/, write(nodePath__default.join(dir, 'build-options.json'), JSON.stringify(options))];
586 case 1:
587 _a.sent();
588 log$6.info("Migrated options to build-options.json");
589 return [2 /*return*/];
590 }
591 });
592 });
593}
594
595var pluginCommon = /*#__PURE__*/Object.freeze({
596 __proto__: null,
597 writeTemplate: writeTemplate,
598 writeJSONBuildOptions: writeJSONBuildOptions
599});
600
601var logChild = function (errorLog, dataLog, child, fatalLog) {
602 if (fatalLog === void 0) { fatalLog = errorLog; }
603 child.stdout.on('data', function (data) { return dataLog(data.toString().trim()); });
604 child.stderr.on('data', function (data) { return errorLog(data.toString().trim()); });
605 child.on('close', function (code) {
606 if (code)
607 fatalLog("A child process exited with a non-0 exit code.");
608 });
609 process.on('exit', function () {
610 child.kill('SIGINT');
611 });
612};
613
614var configXml = "<?xml version='1.0' encoding='utf-8'?>\n<widget\n\tid=\"{bundleId}\"\n\tversion=\"{version}\"\n\txmlns=\"http://www.w3.org/ns/widgets\"\n\txmlns:cdv=\"http://cordova.apache.org/ns/1.0\"\n>\n\t<name>{name}</name>\n\t<description>{description}</description>\n\t<author email=\"{author.email}\" href=\"{author.url}\">{author.name}</author>\n\t<icon src=\"../../{icon.path}\" />\n\t<content src=\"index.html\" />\n\t<plugin name=\"cordova-plugin-whitelist\" spec=\"\" />\n\t<access origin=\"*\" />\n\t<allow-intent href=\"http://*/*\" />\n\t<allow-intent href=\"https://*/*\" />\n\t<allow-intent href=\"tel:*\" />\n\t<allow-intent href=\"sms:*\" />\n\t<allow-intent href=\"mailto:*\" />\n\t<allow-intent href=\"geo:*\" />\n\t<platform name=\"android\">\n\t\t<allow-intent href=\"market:*\" />\n\t</platform>\n\t<platform name=\"ios\">\n\t\t<allow-intent href=\"itms:*\" />\n\t\t<allow-intent href=\"itms-apps:*\" />\n\t</platform>\n</widget>\n";
615
616var log$7 = debug('prepare:cordova');
617var plugin = (function (options, runnable, platform, appEntry, dir) {
618 var didChangeThings = false;
619 function addCordovaPlatform() {
620 var _this = this;
621 didChangeThings = true;
622 return new Promise(function (resolve) {
623 log$7.notice("Adding cordova-" + platform + "...");
624 var child = spawn(runnable, ["platform", "add", platform], {
625 cwd: dir,
626 });
627 logChild(log$7.error, log$7.info, child);
628 child.on('close', function (code) { return tslib.__awaiter(_this, void 0, void 0, function () {
629 return tslib.__generator(this, function (_a) {
630 switch (_a.label) {
631 case 0:
632 if (code)
633 log$7.fatal("Failed to add cordova-" + platform + ".");
634 log$7.notice("Done!");
635 return [4 /*yield*/, install()];
636 case 1:
637 _a.sent();
638 resolve();
639 return [2 /*return*/];
640 }
641 });
642 }); });
643 function install() {
644 return tslib.__awaiter(this, void 0, void 0, function () {
645 var child, errors;
646 return tslib.__generator(this, function (_a) {
647 log$7.info("Installing dependencies via npm...");
648 child = spawn("npm", ["install"], {
649 cwd: dir,
650 });
651 errors = [];
652 logChild(function (error) { return errors.push(error); }, function () { }, child);
653 child.on('close', function (code) {
654 if (code) {
655 log$7.error("We are having trouble installing the dependencies.");
656 log$7.error(errors.join('\n'));
657 log$7.fatal("Failed install cordova-" + platform + " from npm.");
658 }
659 log$7.info("Installed dependencies.");
660 resolve();
661 });
662 return [2 /*return*/];
663 });
664 });
665 }
666 });
667 }
668 function cordovaPrepare() {
669 return new Promise(function (resolve) {
670 var child = spawn(runnable, ["prepare"], {
671 cwd: dir,
672 });
673 logChild(log$7.error, log$7.notice, child);
674 child.on('close', function (code) {
675 if (code)
676 log$7.fatal("Cordova is having problems with what we are doing. Would you consider opening an issue? " + bugs.url);
677 resolve();
678 });
679 });
680 }
681 return {
682 name: 'cordova',
683 buildStart: function () { return tslib.__awaiter(void 0, void 0, void 0, function () {
684 var pkg, actions, platformIsInstalled;
685 return tslib.__generator(this, function (_a) {
686 switch (_a.label) {
687 case 0: return [4 /*yield*/, readJSON(dir, 'package.json')];
688 case 1:
689 pkg = _a.sent();
690 actions = [
691 writeTemplate(nodePath.join(dir, 'www'), { appEntry: appEntry }),
692 writeJSONBuildOptions(dir, options),
693 makeDir(nodePath.join(dir, 'platforms')),
694 write(nodePath.join(dir, "config.xml"), pupa(configXml, options)),
695 ];
696 if (!!Object.keys(pkg).length) return [3 /*break*/, 3];
697 didChangeThings = true;
698 pkg = {
699 name: options.id,
700 };
701 return [4 /*yield*/, write(nodePath.join(dir, 'package.json'), JSON.stringify(pkg))];
702 case 2:
703 _a.sent();
704 _a.label = 3;
705 case 3:
706 platformIsInstalled = pkg.cordova && pkg.cordova.platforms && pkg.cordova.platforms.find(function (p) { return p === platform; });
707 if (!!platformIsInstalled) return [3 /*break*/, 5];
708 return [4 /*yield*/, addCordovaPlatform()];
709 case 4:
710 _a.sent();
711 _a.label = 5;
712 case 5:
713 if (!didChangeThings) return [3 /*break*/, 7];
714 return [4 /*yield*/, cordovaPrepare()];
715 case 6:
716 _a.sent();
717 _a.label = 7;
718 case 7: return [4 /*yield*/, Promise.all(actions)];
719 case 8:
720 _a.sent();
721 return [2 /*return*/];
722 }
723 });
724 }); },
725 };
726});
727
728
729
730var index = /*#__PURE__*/Object.freeze({
731 __proto__: null,
732 plugin: plugin
733});
734
735var log$8 = debug('build');
736function buildApp(options) {
737 var _this = this;
738 var emitter = new PromiseEmitter();
739 emitter.set(function () { return tslib.__awaiter(_this, void 0, Promise, function () {
740 var rollupOptions;
741 return tslib.__generator(this, function (_a) {
742 switch (_a.label) {
743 case 0:
744 log$8.notice('Starting build...');
745 return [4 /*yield*/, defaultBuildOptions(options)];
746 case 1:
747 options = _a.sent();
748 return [4 /*yield*/, createOptions(options)];
749 case 2:
750 rollupOptions = _a.sent();
751 return [4 /*yield*/, build(options, rollupOptions)];
752 case 3:
753 _a.sent();
754 return [2 /*return*/];
755 }
756 });
757 }); });
758 return emitter;
759}
760var logger = {
761 setLevel: setLevel,
762 setLogger: setLogger,
763};
764
765exports.buildApp = buildApp;
766exports.cordovaHelpers = index;
767exports.debug = debug;
768exports.logger = logger;
769exports.pluginHelpers = pluginCommon;