mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-02-05 09:33:07 +00:00
Extract the monolithic main.ts (~1000 lines) into focused modules: - electron/constants.ts - Window sizing, port defaults, filenames - electron/state.ts - Shared state container - electron/utils/ - Port availability and icon utilities - electron/security/ - API key management - electron/windows/ - Window bounds and main window creation - electron/server/ - Backend and static server management - electron/ipc/ - IPC handlers with shared channel constants Benefits: - Improved testability with isolated modules - Better discoverability and maintainability - Single source of truth for IPC channels (used by both main and preload) - Clear separation of concerns Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
43 lines
1.1 KiB
TypeScript
43 lines
1.1 KiB
TypeScript
/**
|
|
* Port management utilities
|
|
*
|
|
* Functions for checking port availability and finding open ports.
|
|
* No Electron dependencies - pure utility module.
|
|
*/
|
|
|
|
import net from 'net';
|
|
|
|
/**
|
|
* Check if a port is available
|
|
*/
|
|
export function isPortAvailable(port: number): Promise<boolean> {
|
|
return new Promise((resolve) => {
|
|
const server = net.createServer();
|
|
server.once('error', () => {
|
|
resolve(false);
|
|
});
|
|
server.once('listening', () => {
|
|
server.close(() => {
|
|
resolve(true);
|
|
});
|
|
});
|
|
// Use Node's default binding semantics (matches most dev servers)
|
|
// This avoids false-positives when a port is taken on IPv6/dual-stack.
|
|
server.listen(port);
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Find an available port starting from the preferred port
|
|
* Tries up to 100 ports in sequence
|
|
*/
|
|
export async function findAvailablePort(preferredPort: number): Promise<number> {
|
|
for (let offset = 0; offset < 100; offset++) {
|
|
const port = preferredPort + offset;
|
|
if (await isPortAvailable(port)) {
|
|
return port;
|
|
}
|
|
}
|
|
throw new Error(`Could not find an available port starting from ${preferredPort}`);
|
|
}
|