gencow 0.1.96 → 0.1.98
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/gencow.mjs +26 -5
- package/package.json +1 -1
- package/server/index.js +3 -0
- package/server/index.js.map +2 -2
package/bin/gencow.mjs
CHANGED
|
@@ -1480,9 +1480,16 @@ ${hasPrompt ? `
|
|
|
1480
1480
|
const config = loadConfig();
|
|
1481
1481
|
log(`\n${BOLD}${CYAN}Gencow DB Generate${RESET}\n`);
|
|
1482
1482
|
info("Generating migration files from schema.ts...");
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1483
|
+
if (isMonorepo()) {
|
|
1484
|
+
runInServer("pnpm db:generate", buildEnv(config));
|
|
1485
|
+
} else {
|
|
1486
|
+
// Standalone: npx drizzle-kit generate (프롬프트 패스스루)
|
|
1487
|
+
execSync("npx drizzle-kit generate", {
|
|
1488
|
+
cwd: process.cwd(),
|
|
1489
|
+
stdio: "inherit",
|
|
1490
|
+
});
|
|
1491
|
+
}
|
|
1492
|
+
success("Migration files generated in gencow/migrations/");
|
|
1486
1493
|
},
|
|
1487
1494
|
|
|
1488
1495
|
// ── db:migrate ───────────────────────────────────────
|
|
@@ -3516,6 +3523,7 @@ process.exit(0);
|
|
|
3516
3523
|
let followFailures = 0;
|
|
3517
3524
|
let followTimer = null;
|
|
3518
3525
|
let followWs = null;
|
|
3526
|
+
let followOpenedAt = 0; // 안정 연결 판정용 (open 시각)
|
|
3519
3527
|
|
|
3520
3528
|
async function connectFollowStream() {
|
|
3521
3529
|
const wsUrl = `ws://localhost:${port}/ws`;
|
|
@@ -3531,7 +3539,8 @@ process.exit(0);
|
|
|
3531
3539
|
}
|
|
3532
3540
|
|
|
3533
3541
|
followWs.on("open", () => {
|
|
3534
|
-
|
|
3542
|
+
// 카운터 리셋은 close 이벤트에서 안정 연결 판정 후 수행
|
|
3543
|
+
followOpenedAt = Date.now();
|
|
3535
3544
|
success("Connected — streaming logs...\n");
|
|
3536
3545
|
followWs.send(JSON.stringify({ type: "log:subscribe" }));
|
|
3537
3546
|
});
|
|
@@ -3560,6 +3569,11 @@ process.exit(0);
|
|
|
3560
3569
|
});
|
|
3561
3570
|
|
|
3562
3571
|
followWs.on("close", () => {
|
|
3572
|
+
// 5초 이상 유지된 안정 연결이면 카운터 리셋 (정상 운영 중 일시 끊김)
|
|
3573
|
+
const wasStable = (Date.now() - followOpenedAt) > 5000;
|
|
3574
|
+
if (wasStable) {
|
|
3575
|
+
followFailures = 0;
|
|
3576
|
+
}
|
|
3563
3577
|
followFailures++;
|
|
3564
3578
|
if (followFailures > FOLLOW_MAX_FAILURES) {
|
|
3565
3579
|
error(`연결 불가 — 앱 상태를 확인하세요.`);
|
|
@@ -3981,6 +3995,7 @@ process.exit(0);
|
|
|
3981
3995
|
// ── WebSocket 실시간 로그 스트리밍 ─────────────────
|
|
3982
3996
|
let logWs = null;
|
|
3983
3997
|
let reconnectTimer = null;
|
|
3998
|
+
let logWsOpenedAt = 0; // 안정 연결 판정용 (open 시각)
|
|
3984
3999
|
|
|
3985
4000
|
async function connectLogStream() {
|
|
3986
4001
|
const { WebSocket: WS } = await import("ws");
|
|
@@ -3995,7 +4010,8 @@ process.exit(0);
|
|
|
3995
4010
|
}
|
|
3996
4011
|
|
|
3997
4012
|
logWs.on("open", () => {
|
|
3998
|
-
|
|
4013
|
+
// 카운터 리셋은 close 이벤트에서 안정 연결 판정 후 수행
|
|
4014
|
+
logWsOpenedAt = Date.now();
|
|
3999
4015
|
log(`${DIM}${new Date().toLocaleTimeString("en-US", { hour12: false })}${RESET} ${GREEN}[log]${RESET} 로그 스트리밍 연결됨`);
|
|
4000
4016
|
logWs.send(JSON.stringify({ type: "log:subscribe" }));
|
|
4001
4017
|
});
|
|
@@ -4013,6 +4029,11 @@ process.exit(0);
|
|
|
4013
4029
|
});
|
|
4014
4030
|
|
|
4015
4031
|
logWs.on("close", () => {
|
|
4032
|
+
// 5초 이상 유지된 안정 연결이면 카운터 리셋 (정상 운영 중 일시 끊김)
|
|
4033
|
+
const wasStable = (Date.now() - logWsOpenedAt) > 5000;
|
|
4034
|
+
if (wasStable) {
|
|
4035
|
+
reconnectFailures = 0;
|
|
4036
|
+
}
|
|
4016
4037
|
reconnectFailures++;
|
|
4017
4038
|
if (reconnectFailures > MAX_RECONNECT_FAILURES) {
|
|
4018
4039
|
warn(`[log] 로그 스트리밍 ${MAX_RECONNECT_FAILURES}회 연속 실패. 재연결 중단.`);
|
package/package.json
CHANGED
package/server/index.js
CHANGED
|
@@ -82589,6 +82589,9 @@ async function main() {
|
|
|
82589
82589
|
const hasStatic = !!appRow.staticDeployedAt;
|
|
82590
82590
|
const upgradeHeader = (c.req.header("upgrade") || "").toLowerCase();
|
|
82591
82591
|
if (upgradeHeader === "websocket" && bunServer) {
|
|
82592
|
+
if (!hasBackend) {
|
|
82593
|
+
return c.json({ error: "WebSocket not available \u2014 this app has no backend process" }, 426);
|
|
82594
|
+
}
|
|
82592
82595
|
const upgraded = bunServer.upgrade(c.req.raw, {
|
|
82593
82596
|
data: { proxyPort: appPort, proxyPath: pathname }
|
|
82594
82597
|
});
|