jiuyiUniapp/service/node_modules/@react-native/community-cli-plugin/dist/utils/isDevServerRunning.js

52 lines
1.3 KiB
JavaScript

"use strict";
Object.defineProperty(exports, "__esModule", {
value: true,
});
exports.default = isDevServerRunning;
var _net = _interopRequireDefault(require("net"));
function _interopRequireDefault(e) {
return e && e.__esModule ? e : { default: e };
}
async function isDevServerRunning(devServerUrl, projectRoot) {
const { hostname, port } = new URL(devServerUrl);
try {
if (!(await isPortOccupied(hostname, port))) {
return "not_running";
}
const statusResponse = await fetch(`${devServerUrl}/status`);
const body = await statusResponse.text();
return body === "packager-status:running" &&
statusResponse.headers.get("X-React-Native-Project-Root") === projectRoot
? "matched_server_running"
: "port_taken";
} catch (e) {
return "unknown";
}
}
async function isPortOccupied(hostname, port) {
let result = false;
const server = _net.default.createServer();
return new Promise((resolve, reject) => {
server.once("error", (e) => {
server.close();
if (e.code === "EADDRINUSE") {
result = true;
} else {
reject(e);
}
});
server.once("listening", () => {
result = false;
server.close();
});
server.once("close", () => {
resolve(result);
});
server.listen({
host: hostname,
port,
});
});
}