debug-server-next
Version:
Dev server for hippy-core.
92 lines (91 loc) • 3.69 kB
JavaScript
;
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 [];
}
});