UNPKG

probe.gl

Version:

JavaScript Console Instrumentation and Benchmarking for Browser and Node

220 lines (181 loc) 6.3 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _puppeteer = _interopRequireDefault(require("puppeteer")); var _child_process = _interopRequireDefault(require("child_process")); var _color = require("../../lib/utils/color"); var _log = _interopRequireDefault(require("../../lib/log")); var _processUtils = require("./process-utils"); var DEFAULT_SERVER_CONFIG = { command: 'webpack-dev-server', arguments: [], port: 'auto', wait: 2000, options: { maxBuffer: 5000 * 1024 } }; var DEFAULT_PUPPETEER_OPTIONS = { headless: false, defaultViewport: { width: 800, height: 600 } }; var AUTO_PORT_START = 5000; function noop() {} function normalizeServerConfig(config, logger) { var result = Object.assign({}, DEFAULT_SERVER_CONFIG); if (config.process) { result.command = config.process; logger.deprecated('process', 'command'); } if (config.parameters) { result.arguments = config.parameters; logger.deprecated('parameters', 'arguments'); } Object.assign(result, config, { options: Object.assign({}, result.options, config.options) }); return result; } var BrowserDriver = function () { function BrowserDriver() { var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref$id = _ref.id, id = _ref$id === void 0 ? 'browser-driver' : _ref$id; (0, _classCallCheck2.default)(this, BrowserDriver); this.id = id; this.logger = new _log.default({ id: id }); this.server = null; this.browser = null; this.page = null; this.port = null; } (0, _createClass2.default)(BrowserDriver, [{ key: "startBrowser", value: function startBrowser() { var _this = this; var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; options = Object.assign({}, DEFAULT_PUPPETEER_OPTIONS, options); if (this.browser) { return Promise.resolve(this.browser); } return _puppeteer.default.launch(options).then(function (browser) { _this.browser = browser; }); } }, { key: "openPage", value: function openPage() { var _this2 = this; var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref2$url = _ref2.url, url = _ref2$url === void 0 ? 'http://localhost' : _ref2$url, _ref2$exposeFunctions = _ref2.exposeFunctions, exposeFunctions = _ref2$exposeFunctions === void 0 ? {} : _ref2$exposeFunctions, _ref2$onLoad = _ref2.onLoad, onLoad = _ref2$onLoad === void 0 ? noop : _ref2$onLoad, _ref2$onConsole = _ref2.onConsole, onConsole = _ref2$onConsole === void 0 ? noop : _ref2$onConsole, _ref2$onError = _ref2.onError, onError = _ref2$onError === void 0 ? noop : _ref2$onError; if (!this.browser) { return Promise.reject(new Error('No browser instance is found. Forgot to call startBrowser()?')); } return this.browser.newPage().then(function (page) { _this2.page = page; page.on('load', onLoad); page.on('console', onConsole); page.on('error', onError); var promises = []; for (var name in exposeFunctions) { promises.push(page.exposeFunction(name, exposeFunctions[name])); } return Promise.all(promises); }).then(function (_) { return _this2.page.goto(url); }); } }, { key: "stopBrowser", value: function stopBrowser() { var _this3 = this; if (this.browser) { return this.browser.close().then(function () { _this3.browser = null; }); } return Promise.resolve(); } }, { key: "startServer", value: function startServer() { var _this4 = this; var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; config = normalizeServerConfig(config, this.logger); var getPort = config.port === 'auto' ? (0, _processUtils.getAvailablePort)(AUTO_PORT_START) : Promise.resolve(config.port); return getPort.then(function (port) { return new Promise(function (resolve, reject) { var args = (0, _toConsumableArray2.default)(config.arguments); if (port) { args.push('--port', port); } var server = _child_process.default.spawn(config.command, args, config.options); server.on('error', function (error) { reject(error); }); server.on('close', function () { return function () { _this4.server = null; }; }); _this4.server = server; _this4.port = port; setTimeout(function () { var url = "http://localhost:".concat(_this4.port); _this4.logger.log({ message: "Started ".concat(config.command, " at ").concat(url), color: _color.COLOR.BRIGHT_GREEN })(); resolve(url); }, config.wait); }); }); } }, { key: "stopServer", value: function stopServer() { if (this.server) { this.server.kill(); this.server = null; } return Promise.resolve(); } }, { key: "exit", value: function exit() { var _this5 = this; var statusCode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; this.stopBrowser().then(function () { return _this5.stopServer(); }).then(function () { return process.exit(statusCode); }).catch(function (error) { _this5.logger.error(error.message || error); process.exit(1); }); } }]); return BrowserDriver; }(); exports.default = BrowserDriver; //# sourceMappingURL=browser-driver.js.map