jiuyiUniapp/service/node_modules/@react-native/dev-middleware/dist/middleware/openDebuggerMiddleware.js

146 lines
4.4 KiB
JavaScript
Raw Normal View History

2025-02-13 09:59:20 +08:00
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true,
});
exports.default = openDebuggerMiddleware;
var _getDevToolsFrontendUrl = _interopRequireDefault(
require("../utils/getDevToolsFrontendUrl")
);
var _url = _interopRequireDefault(require("url"));
function _interopRequireDefault(e) {
return e && e.__esModule ? e : { default: e };
}
const LEGACY_SYNTHETIC_PAGE_TITLE =
"React Native Experimental (Improved Chrome Reloads)";
function openDebuggerMiddleware({
serverBaseUrl,
logger,
browserLauncher,
eventReporter,
experiments,
inspectorProxy,
}) {
return async (req, res, next) => {
if (
req.method === "POST" ||
(experiments.enableOpenDebuggerRedirect && req.method === "GET")
) {
const { query } = _url.default.parse(req.url, true);
const { appId, device, launchId, target: targetId } = query;
const targets = inspectorProxy
.getPageDescriptions(new URL(serverBaseUrl))
.filter(
(app) =>
app.title === LEGACY_SYNTHETIC_PAGE_TITLE ||
app.reactNative.capabilities?.nativePageReloads === true
);
let target;
const launchType = req.method === "POST" ? "launch" : "redirect";
if (
typeof targetId === "string" ||
typeof appId === "string" ||
typeof device === "string"
) {
logger?.info(
(launchType === "launch" ? "Launching" : "Redirecting to") +
" DevTools..."
);
target = targets.find(
(_target) =>
(targetId == null || _target.id === targetId) &&
(appId == null ||
(_target.appId === appId &&
_target.title === LEGACY_SYNTHETIC_PAGE_TITLE)) &&
(device == null || _target.reactNative.logicalDeviceId === device)
);
} else if (targets.length > 0) {
logger?.info(
(launchType === "launch" ? "Launching" : "Redirecting to") +
` DevTools${
targets.length === 1 ? "" : " for most recently connected target"
}...`
);
target = targets[targets.length - 1];
}
if (!target) {
res.writeHead(404);
res.end("Unable to find debugger target");
logger?.warn(
"No compatible apps connected. React Native DevTools can only be used with the Hermes engine."
);
eventReporter?.logEvent({
type: "launch_debugger_frontend",
launchType,
status: "coded_error",
errorCode: "NO_APPS_FOUND",
});
return;
}
const useFuseboxEntryPoint =
target.reactNative.capabilities?.prefersFuseboxFrontend;
try {
switch (launchType) {
case "launch":
await browserLauncher.launchDebuggerAppWindow(
(0, _getDevToolsFrontendUrl.default)(
experiments,
target.webSocketDebuggerUrl,
serverBaseUrl,
{
launchId,
useFuseboxEntryPoint,
}
)
);
res.writeHead(200);
res.end();
break;
case "redirect":
res.writeHead(302, {
Location: (0, _getDevToolsFrontendUrl.default)(
experiments,
target.webSocketDebuggerUrl,
serverBaseUrl,
{
relative: true,
launchId,
useFuseboxEntryPoint,
}
),
});
res.end();
break;
default:
}
eventReporter?.logEvent({
type: "launch_debugger_frontend",
launchType,
status: "success",
appId: appId ?? null,
deviceId: device ?? null,
resolvedTargetDescription: target.description,
resolvedTargetAppId: target.appId,
prefersFuseboxFrontend: useFuseboxEntryPoint ?? false,
});
return;
} catch (e) {
logger?.error(
"Error launching DevTools: " + e.message ?? "Unknown error"
);
res.writeHead(500);
res.end();
eventReporter?.logEvent({
type: "launch_debugger_frontend",
launchType,
status: "error",
error: e,
prefersFuseboxFrontend: useFuseboxEntryPoint ?? false,
});
return;
}
}
next();
};
}