UNPKG

debug-server-next

Version:

Dev server for hippy-core.

92 lines (91 loc) 3.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.patchIOSTarget = exports.getIWDPPages = void 0; const tslib_1 = require("tslib"); /** * 缩写说明: * IWDP: ios webkit debug proxy * CDP: chrome debug protocol */ const request_promise_1 = tslib_1.__importDefault(require("request-promise")); const enum_1 = require("@/@types/enum"); const config_1 = require("@/config"); const url_1 = require("@/utils/url"); const log_1 = require("@/utils/log"); const timer_1 = require("@/utils/timer"); const log = new log_1.Logger('IWDP-util'); /** * 获取所有 usb 连接设备的 IWDP 页面列表 */ const getIWDPPages = (iWDPPort) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { if (global.debugAppArgv.isRemote) return []; try { // IWDP 检查页面列表会稍有延迟,这里简单做下 sleep yield timer_1.sleep(250); const deviceList = yield request_promise_1.default({ url: '/json', // IWDP 必定是本地启动的服务,因为必须通过 USB 连接才能检测到设备 baseUrl: `http://127.0.0.1:${iWDPPort}`, json: true, }); const debugTargets = (yield Promise.all(deviceList.map(getDeviceIWDPPages))) || []; return debugTargets.flat(); } catch (e) { log.warn('request IWDP pages error'); return []; } }); exports.getIWDPPages = getIWDPPages; /** * 用 IWDP 获取到的页面信息扩展 debugTarget */ const patchIOSTarget = (debugTarget, iOSPages) => { if (debugTarget.platform !== "1" /* IOS */) return debugTarget; const iOSPagesWithFlag = iOSPages; const iOSPage = iOSPagesWithFlag.find((iOSPage) => (debugTarget.appClientTypeList[0] === "WsAppClient" /* WS */ && debugTarget.title === iOSPage.title) || (debugTarget.appClientTypeList[0] === "TunnelAppClient" /* Tunnel */ && debugTarget.deviceName === iOSPage.device.deviceName)); if (!iOSPage) return debugTarget; iOSPage.shouldRemove = true; const iWDPWsUrl = iOSPage.webSocketDebuggerUrl; const wsUrl = url_1.makeUrl(`${config_1.config.domain}${config_1.config.wsPath}`, { clientId: debugTarget.clientId, role: enum_1.ClientRole.Devtools, }); const devtoolsFrontendUrl = url_1.makeUrl(`http://${config_1.config.domain}/front_end/inspector.html`, { remoteFrontend: true, experiments: true, ws: wsUrl, env: global.debugAppArgv.env, }); const { appClientTypeList } = debugTarget; if (appClientTypeList.indexOf("IWDPAppClient" /* IWDP */) === -1) appClientTypeList.push("IWDPAppClient" /* IWDP */); return Object.assign(Object.assign({}, debugTarget), { iWDPWsUrl, appClientTypeList, deviceName: iOSPage.device.deviceName, deviceId: iOSPage.device.deviceId, deviceOSVersion: iOSPage.device.deviceOSVersion, title: iOSPage.title, devtoolsFrontendUrl, webSocketDebuggerUrl: `ws://${wsUrl}` }); }; exports.patchIOSTarget = patchIOSTarget; /** * 获取一台设备的 IWDP 页面列表 */ const getDeviceIWDPPages = (device) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { var _a; const port = device.url.match(/:(\d+)/)[1]; try { const targets = yield request_promise_1.default({ url: '/json', baseUrl: `http://127.0.0.1:${port}`, json: true, }); targets.forEach((target) => (target.device = device)); return targets; } catch (e) { log.error('getDeviceIWDPPages error, %s', (_a = e) === null || _a === void 0 ? void 0 : _a.stack); return []; } });