///|
struct DevServerConfig {
root : String
host : String
port : Int
asset_dir : String
moon_command : String
/// Directory subtree the repository picker may browse and switch to.
/// Empty means automatic: unrestricted on loopback binds, disabled on
/// every other bind.
browse_root : String
}
///|
async fn main {
let config = parse_args(@env.args()[1:])
@host.run_native_editor_server(
config.root,
host=config.host,
port=config.port,
asset_dir=config.asset_dir,
moon_command=config.moon_command,
browse_root=config.browse_root,
) catch {
error => abort("Readonly editor native server failed: \{error.to_string()}")
}
}
///|
fn parse_args(args : ArrayView[String]) -> DevServerConfig {
let mut root = "."
let mut host = "127.0.0.1"
let mut port = 5173
let mut asset_dir = "web/dist"
let mut moon_command = "moon"
let mut browse_root = ""
let mut i = 0
while i < args.length() {
match args[i] {
"--root" =>
if i + 1 < args.length() {
root = args[i + 1]
i = i + 1
}
"--port" =>
if i + 1 < args.length() {
port = parse_port(args[i + 1], port)
i = i + 1
}
"--host" =>
if i + 1 < args.length() {
host = args[i + 1]
i = i + 1
}
"--asset-dir" =>
if i + 1 < args.length() {
asset_dir = args[i + 1]
i = i + 1
}
"--moon-command" =>
if i + 1 < args.length() {
moon_command = args[i + 1]
i = i + 1
}
"--browse-root" =>
if i + 1 < args.length() {
browse_root = args[i + 1]
i = i + 1
}
_ => ()
}
i = i + 1
}
{ root, host, port, asset_dir, moon_command, browse_root }
}
///|
fn parse_port(value : String, fallback : Int) -> Int {
@string.parse_int(value, base=10) catch {
_ => fallback
}
}