///|
#cfg(target="js")
extern "js" fn cli_arguments() -> FixedArray[String] =
#|() => process.argv.slice(2)
///|
#cfg(target="js")
extern "js" fn cli_read_text(path : String) -> String =
#|(path) => require("node:fs").readFileSync(path, "utf8")
///|
#cfg(target="js")
extern "js" fn cli_write_text(path : String, content : String) -> Unit =
#|(path, content) => {
#| const fs = require("node:fs")
#| const p = require("node:path")
#| fs.mkdirSync(p.dirname(path), { recursive: true })
#| fs.writeFileSync(path, content, "utf8")
#|}
///|
#cfg(target="js")
extern "js" fn cli_fail(message : String) -> Unit =
#|(message) => {
#| console.error(message)
#| process.exitCode = 1
#|}
///|
fn usage() -> String {
"Usage: moon run cmd/main --target js -- [module-name]"
}
///|
#cfg(target="js")
fn main {
let args = cli_arguments()
if args.length() < 2 || args.length() > 3 {
cli_fail(usage())
return
}
let input_path = args[0]
let output_dir = args[1]
let module_name = if args.length() == 3 {
args[2]
} else {
"generated/asyncapi"
}
let input = cli_read_text(input_path)
let options = { ..@lib.default_codegen_options(), module_name, }
match @lib.generate_from_json(input, options~) {
Err(error) => cli_fail("MoonAsyncAPI: " + error)
Ok(plan) => {
if @lib.generation_has_errors(plan) {
cli_fail("MoonAsyncAPI: generation failed")
return
}
for file in plan.files {
cli_write_text(output_dir + "/" + file.path, file.content)
}
println(
"Generated " +
plan.files.length().to_string() +
" files in " +
output_dir,
)
}
}
}
///|
#cfg(not(target="js"))
fn main {
let _ = @lib.default_codegen_options()
println("MoonAsyncAPI CLI requires the JavaScript target.")
println(usage())
}