chore: sync backend and deployment changes

This commit is contained in:
2026-05-25 17:25:52 +09:00
parent d38d022872
commit fb5ec649cd
58 changed files with 17575 additions and 378 deletions

View File

@@ -25,6 +25,53 @@ const mimeTypes = {
'.woff2': 'font/woff2',
};
function canListenOnPort(candidatePort, host = '0.0.0.0') {
return new Promise((resolve, reject) => {
const probeServer = createServer();
probeServer.once('error', (error) => {
probeServer.close(() => {
if (error && typeof error === 'object' && 'code' in error && error.code === 'EADDRINUSE') {
resolve(false);
return;
}
reject(error);
});
});
probeServer.once('listening', () => {
probeServer.close((closeError) => {
if (closeError) {
reject(closeError);
return;
}
resolve(true);
});
});
probeServer.listen(candidatePort, host);
});
}
async function findAvailablePort(initialPort, host = '0.0.0.0', maxAttempts = 20) {
for (let offset = 0; offset < maxAttempts; offset += 1) {
const candidatePort = initialPort + offset;
const available = await canListenOnPort(candidatePort, host);
if (available) {
return candidatePort;
}
if (offset === 0) {
console.warn(`Port ${initialPort} is in use, trying another one...`);
}
}
throw new Error(`No available port found from ${initialPort} to ${initialPort + maxAttempts - 1}.`);
}
function resolveCacheControl(resolvedPath, extension) {
const normalizedPath = resolvedPath.replace(/\\/g, '/');
@@ -218,6 +265,9 @@ server.on('upgrade', (request, socket, head) => {
});
});
server.listen(port, '0.0.0.0', () => {
console.log(`${distDirName} server listening on http://0.0.0.0:${port}`);
const host = '0.0.0.0';
const resolvedPort = await findAvailablePort(port, host);
server.listen(resolvedPort, host, () => {
console.log(`${distDirName} server listening on http://${host}:${resolvedPort}`);
});