///|
/// Run from the repository root with an optional module directory or ZIP.
fn run() -> Unit raise @resources.ResourceError {
let args = arguments()
let path = if !args.is_empty() { args[0] } else { "pkgs/artifact-resources" }
guard @resources.RepositoryLocation::parse(path) is Some(location) else {
raise @resources.ResourceError(
@resources.UnsafePath,
@resources.Provenance::repository_reference(
@resources.RepositoryId::parse("moonrockz/artifact-resources").unwrap(),
),
"Expected a nonempty, control-free module source location",
)
}
let registry = @local_resources.register(@resources.Registry::new()).add_repository({
id: @resources.RepositoryId::parse("moonrockz/artifact-resources").unwrap(),
provider: @resources.ProviderId::parse("local").unwrap(),
location,
},
)
let artifact = registry.resolve({
repository: @resources.RepositoryId::parse("moonrockz/artifact-resources").unwrap(),
key: @resources.ArtifactKey::parse(".").unwrap(),
})
let selection = @resources.Selection::new(
@resources.ResourceRoot::parse("examples/local/data").unwrap(),
[@resources.Matching(@resources.GlobPattern::parse("**/*.txt").unwrap())],
).unwrap()
let loaded = @resources.select_resources(artifact.tree, selection)
for resource in loaded {
println(resource.name.to_string() + ": " + resource.text())
println(resource.provenance)
}
}
///|
fn main {
run() catch {
@resources.ResourceError(code, origin, message) => {
eprintln(
"[" + code.to_string() + "] " + origin.to_string() + ": " + message,
)
@sys.exit(1)
}
}
}
///|
#cfg(target="js")
fn arguments() -> Array[String] {
@env.args()[2:].to_owned()
}
///|
#cfg(not(target="js"))
fn arguments() -> Array[String] {
@env.args()[1:].to_owned()
}