43 lines
1 KiB
JavaScript
43 lines
1 KiB
JavaScript
import { pathToFileURL } from "node:url";
|
|
import {
|
|
checkExistingServer,
|
|
removeLockFile,
|
|
isProcessAlive,
|
|
GRACEFUL_SHUTDOWN_TIMEOUT
|
|
} from "../../core/dev/lockfile.js";
|
|
import { resolveRoot } from "../../core/config/config.js";
|
|
function formatStopOutput(result) {
|
|
return JSON.stringify(result);
|
|
}
|
|
async function stop({
|
|
flags,
|
|
logger
|
|
}) {
|
|
const root = pathToFileURL(resolveRoot(flags.root) + "/");
|
|
const existing = checkExistingServer(root);
|
|
if (!existing) {
|
|
logger.info("SKIP_FORMAT", "No dev server is running.");
|
|
return;
|
|
}
|
|
try {
|
|
process.kill(existing.pid, "SIGTERM");
|
|
} catch {
|
|
}
|
|
const deadline = Date.now() + GRACEFUL_SHUTDOWN_TIMEOUT;
|
|
while (Date.now() < deadline) {
|
|
if (!isProcessAlive(existing.pid)) break;
|
|
await new Promise((r) => setTimeout(r, 100));
|
|
}
|
|
if (isProcessAlive(existing.pid)) {
|
|
try {
|
|
process.kill(existing.pid, "SIGKILL");
|
|
} catch {
|
|
}
|
|
}
|
|
removeLockFile(root);
|
|
logger.info("SKIP_FORMAT", `Stopped dev server (pid ${existing.pid}).`);
|
|
}
|
|
export {
|
|
formatStopOutput,
|
|
stop
|
|
};
|