UNPKG

@yuebai008/cli

Version:

Command line interface for rapid qg-minigame development

191 lines (82 loc) 9.42 kB
"use strict";var _Array$from = require("@babel/runtime-corejs2/core-js/array/from");var _Symbol = require("@babel/runtime-corejs2/core-js/symbol");var _Symbol$iterator = require("@babel/runtime-corejs2/core-js/symbol/iterator");var _Array$isArray = require("@babel/runtime-corejs2/core-js/array/is-array");var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs2/regenerator"));var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/asyncToGenerator"));var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/toConsumableArray"));var _freeze = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/freeze"));function _createForOfIteratorHelper(r, e) {var t = "undefined" != typeof _Symbol && r[_Symbol$iterator] || r["@@iterator"];if (!t) {if (_Array$isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) {t && (r = t);var _n = 0,F = function F() {};return { s: F, n: function n() {return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] };}, e: function e(r) {throw r;}, f: F };}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");}var o,a = !0,u = !1;return { s: function s() {t = t.call(r);}, n: function n() {var r = t.next();return a = r.done, r;}, e: function e(r) {u = !0, o = r;}, f: function f() {try {a || null == t["return"] || t["return"]();} finally {if (u) throw o;}} };}function _unsupportedIterableToArray(r, a) {if (r) {if ("string" == typeof r) return _arrayLikeToArray(r, a);var t = {}.toString.call(r).slice(8, -1);return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? _Array$from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0;}}function _arrayLikeToArray(r, a) {(null == a || a > r.length) && (a = r.length);for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e];return n;} /** * Copyright (c) 2015-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file at * https://github.com/facebook/create-react-app/blob/master/LICENSE */ var open = require('open'); var execa = require('execa'); var chalk = require('chalk'); var execSync = require('child_process').execSync; var chromeLauncher = require('chrome-simple-launcher'); var puppeteer = require('puppeteer'); var lookupChromeWindows = require('./sniffer-windows')["default"]; // https://github.com/sindresorhus/open#app var OSX_CHROME = 'google chrome'; var Actions = (0, _freeze["default"])({ NONE: 0, BROWSER: 1, SCRIPT: 2 }); function getBrowserEnv() { // Attempt to honor this environment variable. // It is specific to the operating system. // See https://github.com/sindresorhus/open#app for documentation. var value = process.env.BROWSER; var action; if (!value) { // Default. action = Actions.BROWSER; } else if (value.toLowerCase().endsWith('.js')) { action = Actions.SCRIPT; } else if (value.toLowerCase() === 'none') { action = Actions.NONE; } else { action = Actions.BROWSER; } return { action: action, value: value }; } function executeNodeScript(scriptPath, url) { var extraArgs = process.argv.slice(2); var child = execa('node', [scriptPath].concat((0, _toConsumableArray2["default"])(extraArgs), [url]), { stdio: 'inherit' }); child.on('close', function (code) { if (code !== 0) { console.log(); console.log( chalk.red( 'The script specified as BROWSER environment variable failed.' ) ); console.log(chalk.cyan(scriptPath) + ' exited with code ' + code + '.'); console.log(); } }); return true; } var browserDev; var chromePath;function startBrowserProcess(_x, _x2) {return _startBrowserProcess.apply(this, arguments);} /** * Reads the BROWSER environment variable and decides what to do with it. Returns * true if it opened a browser or ran a node.js script, otherwise false. */function _startBrowserProcess() {_startBrowserProcess = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee(browser, url) {var shouldTryOpenChromeWithAppleScript, _pages, _iterator, _step, _page2, currentUrl, _page, pages, page, error;return _regenerator["default"].wrap(function _callee$(_context) {while (1) switch (_context.prev = _context.next) {case 0: // If we're on OS X, the user hasn't specifically // requested a different browser, we can try opening // Chrome with AppleScript. This lets us reuse an // existing tab when possible instead of creating a new one. shouldTryOpenChromeWithAppleScript = process.platform === 'darwin' && (typeof browser !== 'string' || browser === OSX_CHROME);if (!shouldTryOpenChromeWithAppleScript) {_context.next = 10;break;}_context.prev = 2; // Try our best to reuse existing tab // on OS X Google Chrome with AppleScript execSync('ps cax | grep "Google Chrome"');execSync('osascript openChrome.applescript "' + encodeURI(url) + '"', { cwd: __dirname, stdio: 'ignore' });return _context.abrupt("return", true);case 8:_context.prev = 8;_context.t0 = _context["catch"](2);case 10: // Another special case: on OS X, check if BROWSER has been set to "open". // In this case, instead of passing the string `open` to `open` function (which won't work), // just ignore it (thus ensuring the intended behavior, i.e. opening the system browser): // https://github.com/facebook/create-react-app/pull/1690#issuecomment-283518768 if (process.platform === 'darwin' && browser === 'open') {browser = undefined;} // Fallback to open // (It will always open new tab) _context.prev = 11;_context.prev = 12;if (!browserDev) {_context.next = 55;break;}_context.next = 16;return browserDev.pages();case 16:_pages = _context.sent;if (!(_pages && _pages.length > 0)) {_context.next = 55;break;}_iterator = _createForOfIteratorHelper(_pages);_context.prev = 19;_iterator.s();case 21:if ((_step = _iterator.n()).done) {_context.next = 39;break;}_page2 = _step.value;_context.next = 25;return _page2.isClosed();case 25:if (!_context.sent) {_context.next = 27;break;}return _context.abrupt("continue", 37);case 27:_context.next = 29;return _page2.url();case 29:currentUrl = _context.sent;if (!(currentUrl === url)) {_context.next = 37;break;}console.info('刷新当前已存在的调试页面:' + url); // 刷新当前页面 _context.next = 34;return _page2.reload();case 34:_context.next = 36;return _page2.bringToFront();case 36:return _context.abrupt("return", true);case 37:_context.next = 21;break;case 39:_context.next = 44;break;case 41:_context.prev = 41;_context.t1 = _context["catch"](19);_iterator.e(_context.t1);case 44:_context.prev = 44;_iterator.f();return _context.finish(44);case 47:_context.next = 49;return browserDev.newPage();case 49:_page = _context.sent;_context.next = 52;return _page["goto"](url);case 52:_context.next = 54;return _page.bringToFront();case 54:return _context.abrupt("return", true);case 55:if (!browserDev) {_context.next = 58;break;}_context.next = 58;return browserDev.close();case 58:if (chromePath) {_context.next = 62;break;}_context.next = 61;return lookupChromeWindows();case 61:chromePath = _context.sent;case 62:_context.next = 64;return puppeteer.launch({ executablePath: chromePath, // Specify the path here headless: false, defaultViewport: null, ignoreDefaultArgs: ['--enable-automation', '--enable-blink-features=IdleDetection'], args: ['--start-maximized', '--no-default-browser-check'] });case 64:browserDev = _context.sent;_context.next = 67;return browserDev.pages();case 67:pages = _context.sent;page = pages[0];_context.next = 71;return page["goto"](url);case 71:_context.next = 73;return page.bringToFront();case 73:_context.next = 79;break;case 75:_context.prev = 75;_context.t2 = _context["catch"](12);error = function error() {var options = { app: browser, url: true };open(url, options)["catch"](function () {}); // Prevent `unhandledRejection` error. };chromeLauncher.launch(url, { onError: error })["catch"](function () {var options = { app: browser, url: true };open(url, options)["catch"](function () {}); // Prevent `unhandledRejection` error. });case 79:_context.next = 84;break;case 81:_context.prev = 81;_context.t3 = _context["catch"](11);return _context.abrupt("return", false);case 84:case "end":return _context.stop();}}, _callee, null, [[2, 8], [11, 81], [12, 75], [19, 41, 44, 47]]);}));return _startBrowserProcess.apply(this, arguments);}exports.openBrowser = function (url) {var _getBrowserEnv = getBrowserEnv(),action = _getBrowserEnv.action,value = _getBrowserEnv.value;switch (action) {case Actions.NONE: // Special case: BROWSER="none" will prevent opening completely. return false;case Actions.SCRIPT:return executeNodeScript(value, url);case Actions.BROWSER:return startBrowserProcess(value, url);default:throw new Error('Not implemented.');}};