///|
fn package_cache_roots() -> Array[String] {
package_cache_roots_from(@pkl.sandbox_package_caches())
}
///|
fn strip_package_checksum_from_path(path : String) -> String {
let at_idx = match path.rev_find("@") {
Some(idx) => idx
None => return path
}
let before_version = String::unsafe_substring(path, start=0, end=at_idx + 1)
let after_at = String::unsafe_substring(
path,
start=at_idx + 1,
end=path.length(),
)
let (version, extra) = match after_at.find("/") {
Some(idx) =>
(
String::unsafe_substring(after_at, start=0, end=idx),
String::unsafe_substring(after_at, start=idx, end=after_at.length()),
)
None => (after_at, "")
}
before_version + strip_package_checksum_from_version(version) + extra
}
///|
fn package_uri_with_rest(uri : String, rest : String) -> String {
if rest == "" {
uri
} else if uri.find("#") is Some(_) {
if uri.has_suffix("/") {
uri + rest
} else {
uri + "/" + rest
}
} else {
uri + "#/" + rest
}
}
///|
/// Map a package URI onto a file in one of the configured package caches.
fn resolve_package_uri_to_cache(uri : String, rest : String) -> String? {
resolve_package_uri_to_cache_in_roots(uri, rest, package_cache_roots())
}