Runner.js 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. "use strict";
  2. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
  3. return new (P || (P = Promise))(function (resolve, reject) {
  4. function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
  5. function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
  6. function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
  7. step((generator = generator.apply(thisArg, _arguments || [])).next());
  8. });
  9. };
  10. var __generator = (this && this.__generator) || function (thisArg, body) {
  11. var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
  12. return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
  13. function verb(n) { return function (v) { return step([n, v]); }; }
  14. function step(op) {
  15. if (f) throw new TypeError("Generator is already executing.");
  16. while (_) try {
  17. if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
  18. if (y = 0, t) op = [op[0] & 2, t.value];
  19. switch (op[0]) {
  20. case 0: case 1: t = op; break;
  21. case 4: _.label++; return { value: op[1], done: false };
  22. case 5: _.label++; y = op[1]; op = [0]; continue;
  23. case 7: op = _.ops.pop(); _.trys.pop(); continue;
  24. default:
  25. if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
  26. if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
  27. if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
  28. if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
  29. if (t[2]) _.ops.pop();
  30. _.trys.pop(); continue;
  31. }
  32. op = body.call(thisArg, _);
  33. } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
  34. if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
  35. }
  36. };
  37. Object.defineProperty(exports, "__esModule", { value: true });
  38. var path_1 = require("path");
  39. var fs_extra_1 = require("fs-extra");
  40. var debug = require('debug')('build:runner');
  41. var Downloader_1 = require("./Downloader");
  42. var FFmpegDownloader_1 = require("./FFmpegDownloader");
  43. var config_1 = require("./config");
  44. var util_1 = require("./util");
  45. var common_1 = require("./common");
  46. var Runner = /** @class */ (function () {
  47. function Runner(options, args) {
  48. if (options === void 0) { options = {}; }
  49. this.args = args;
  50. this.options = util_1.mergeOptions(Runner.DEFAULT_OPTIONS, options);
  51. debug('in constructor', 'args', args);
  52. debug('in constructor', 'options', this.options);
  53. }
  54. Runner.prototype.run = function () {
  55. return __awaiter(this, void 0, void 0, function () {
  56. var platform, arch, pkg, config, downloader, runtimeDir, executable, _a, code, signal;
  57. return __generator(this, function (_b) {
  58. switch (_b.label) {
  59. case 0:
  60. platform = process.platform;
  61. arch = this.options.x86 || this.options.x64
  62. ? (this.options.x86 ? 'ia32' : 'x64')
  63. : process.arch;
  64. return [4 /*yield*/, fs_extra_1.readJson(path_1.resolve(this.args[0], this.options.chromeApp ? 'manifest.json' : 'package.json'))];
  65. case 1:
  66. pkg = _b.sent();
  67. config = new config_1.BuildConfig(pkg);
  68. debug('in run', 'config', config);
  69. downloader = new Downloader_1.Downloader({
  70. platform: platform, arch: arch,
  71. version: config.nwVersion,
  72. flavor: 'sdk',
  73. mirror: this.options.mirror,
  74. useCaches: true,
  75. showProgress: this.options.mute ? false : true,
  76. forceCaches: this.options.forceCaches,
  77. destination: this.options.destination,
  78. });
  79. if (!this.options.mute) {
  80. console.info('Fetching NW.js binary...', {
  81. platform: downloader.options.platform,
  82. arch: downloader.options.arch,
  83. version: downloader.options.version,
  84. flavor: downloader.options.flavor,
  85. });
  86. }
  87. return [4 /*yield*/, downloader.fetchAndExtract()];
  88. case 2:
  89. runtimeDir = _b.sent();
  90. if (config.ffmpegIntegration) {
  91. // FIXME: Integrate without overwriting extracted files.
  92. //await this.integrateFFmpeg(platform, arch, runtimeDir, pkg, config);
  93. if (!this.options.mute) {
  94. console.warn('Running with FFmpeg integration is not supported.');
  95. }
  96. }
  97. return [4 /*yield*/, util_1.findExecutable(platform, runtimeDir)];
  98. case 3:
  99. executable = _b.sent();
  100. return [4 /*yield*/, fs_extra_1.chmod(executable, 365)];
  101. case 4:
  102. _b.sent();
  103. if (!this.options.mute) {
  104. console.info('Launching NW.js app...');
  105. }
  106. return [4 /*yield*/, util_1.spawnAsync(executable, this.args, {
  107. detached: this.options.detached,
  108. })];
  109. case 5:
  110. _a = _b.sent(), code = _a.code, signal = _a.signal;
  111. if (!!this.options.mute) return [3 /*break*/, 8];
  112. if (!this.options.detached) return [3 /*break*/, 7];
  113. console.info('NW.js app detached.');
  114. return [4 /*yield*/, new Promise(function (resolve, reject) {
  115. setTimeout(resolve, 3000);
  116. })];
  117. case 6:
  118. _b.sent();
  119. return [3 /*break*/, 8];
  120. case 7:
  121. console.info("NW.js app exited with " + code + ".");
  122. _b.label = 8;
  123. case 8: return [2 /*return*/, code];
  124. }
  125. });
  126. });
  127. };
  128. Runner.prototype.integrateFFmpeg = function (platform, arch, runtimeDir, pkg, config) {
  129. return __awaiter(this, void 0, void 0, function () {
  130. var downloader, ffmpegDir, src, dest;
  131. return __generator(this, function (_a) {
  132. switch (_a.label) {
  133. case 0:
  134. downloader = new FFmpegDownloader_1.FFmpegDownloader({
  135. platform: platform, arch: arch,
  136. version: config.nwVersion,
  137. useCaches: true,
  138. showProgress: this.options.mute ? false : true,
  139. forceCaches: this.options.forceCaches,
  140. destination: this.options.destination,
  141. });
  142. if (!this.options.mute) {
  143. console.info('Fetching FFmpeg prebuilt...', {
  144. platform: downloader.options.platform,
  145. arch: downloader.options.arch,
  146. version: downloader.options.version,
  147. });
  148. }
  149. return [4 /*yield*/, downloader.fetchAndExtract()];
  150. case 1:
  151. ffmpegDir = _a.sent();
  152. return [4 /*yield*/, util_1.findFFmpeg(platform, ffmpegDir)];
  153. case 2:
  154. src = _a.sent();
  155. return [4 /*yield*/, util_1.findFFmpeg(platform, runtimeDir)];
  156. case 3:
  157. dest = _a.sent();
  158. return [4 /*yield*/, fs_extra_1.copy(src, dest)];
  159. case 4:
  160. _a.sent();
  161. return [2 /*return*/];
  162. }
  163. });
  164. });
  165. };
  166. Runner.DEFAULT_OPTIONS = {
  167. x86: false,
  168. x64: false,
  169. chromeApp: false,
  170. mirror: Downloader_1.Downloader.DEFAULT_OPTIONS.mirror,
  171. detached: false,
  172. mute: true,
  173. forceCaches: Downloader_1.Downloader.DEFAULT_OPTIONS.forceCaches,
  174. destination: common_1.DownloaderBase.DEFAULT_DESTINATION,
  175. };
  176. return Runner;
  177. }());
  178. exports.Runner = Runner;
  179. //# sourceMappingURL=Runner.js.map