44 lines
1.3 KiB
TypeScript
44 lines
1.3 KiB
TypeScript
import type { Argv, InferredOptionTypes } from "yargs"
|
|
import { Config } from "../config/config"
|
|
|
|
const options = {
|
|
port: {
|
|
type: "number" as const,
|
|
describe: "port to listen on",
|
|
default: 0,
|
|
},
|
|
hostname: {
|
|
type: "string" as const,
|
|
describe: "hostname to listen on",
|
|
default: "127.0.0.1",
|
|
},
|
|
mdns: {
|
|
type: "boolean" as const,
|
|
describe: "enable mDNS service discovery (defaults hostname to 0.0.0.0)",
|
|
default: false,
|
|
},
|
|
}
|
|
|
|
export type NetworkOptions = InferredOptionTypes<typeof options>
|
|
|
|
export function withNetworkOptions<T>(yargs: Argv<T>) {
|
|
return yargs.options(options)
|
|
}
|
|
|
|
export async function resolveNetworkOptions(args: NetworkOptions) {
|
|
const config = await Config.global()
|
|
const portExplicitlySet = process.argv.includes("--port")
|
|
const hostnameExplicitlySet = process.argv.includes("--hostname")
|
|
const mdnsExplicitlySet = process.argv.includes("--mdns")
|
|
|
|
const mdns = mdnsExplicitlySet ? args.mdns : (config?.server?.mdns ?? args.mdns)
|
|
const port = portExplicitlySet ? args.port : (config?.server?.port ?? args.port)
|
|
const hostname = hostnameExplicitlySet
|
|
? args.hostname
|
|
: mdns && !config?.server?.hostname
|
|
? "0.0.0.0"
|
|
: (config?.server?.hostname ?? args.hostname)
|
|
|
|
return { hostname, port, mdns }
|
|
}
|