//#region src/_utils.ts function resolvePortAndHost(opts) { const _port = opts.port ?? globalThis.process?.env.PORT ?? 3e3; const port = typeof _port === "number" ? _port : Number.parseInt(_port, 10); if (port < 0 || port > 65535) throw new RangeError(`Port must be between 0 and 65535 (got "${port}").`); return { port, hostname: opts.hostname ?? globalThis.process?.env.HOST }; } function fmtURL(host, port, secure) { if (!host || !port) return; if (host.includes(":")) host = `[${host}]`; return `http${secure ? "s" : ""}://${host}:${port}/`; } function printListening(opts, url) { if (!url || (opts.silent ?? globalThis.process?.env?.TEST)) return; const _url = new URL(url); const allInterfaces = _url.hostname === "[::]" || _url.hostname === "0.0.0.0"; if (allInterfaces) { _url.hostname = "localhost"; url = _url.href; } let listeningOn = `➜ Listening on:`; let additionalInfo = allInterfaces ? " (all interfaces)" : ""; if (globalThis.process.stdout?.isTTY) { listeningOn = `\u001B[32m${listeningOn}\u001B[0m`; url = `\u001B[36m${url}\u001B[0m`; additionalInfo = `\u001B[2m${additionalInfo}\u001B[0m`; } console.log(`${listeningOn} ${url}${additionalInfo}`); } function resolveTLSOptions(opts) { if (!opts.tls || opts.protocol === "http") return; const cert = resolveCertOrKey(opts.tls.cert); const key = resolveCertOrKey(opts.tls.key); if (!cert && !key) { if (opts.protocol === "https") throw new TypeError("TLS `cert` and `key` must be provided for `https` protocol."); return; } if (!cert || !key) throw new TypeError("TLS `cert` and `key` must be provided together."); return { cert, key, passphrase: opts.tls.passphrase }; } function resolveCertOrKey(value) { if (!value) return; if (typeof value !== "string") throw new TypeError("TLS certificate and key must be strings in PEM format or file paths."); if (value.startsWith("-----BEGIN ")) return value; const { readFileSync } = process.getBuiltinModule("node:fs"); return readFileSync(value, "utf8"); } function createWaitUntil() { const promises = /* @__PURE__ */ new Set(); return { waitUntil: (promise) => { if (typeof promise?.then !== "function") return; promises.add(Promise.resolve(promise).catch(console.error).finally(() => { promises.delete(promise); })); }, wait: () => { return Promise.all(promises); } }; } //#endregion export { resolveTLSOptions as a, resolvePortAndHost as i, fmtURL as n, printListening as r, createWaitUntil as t };