/** metadata_namespace. */
pub fn metadata_namespace(dir, namespace) {
return metadata_resolve(dir, namespace) ?? {}
}
/** metadata_local_namespace. */
pub fn metadata_local_namespace(dir, namespace) {
let normalized = if dir == "" { "." } else { dir }
for entry in metadata_entries(namespace) {
if entry.dir == normalized {
return entry.local ?? {}
}
}
return {}
}
/** project_inventory. */
pub fn project_inventory(namespace) {
return {
entries: metadata_entries(namespace),
status: metadata_status(namespace),
}
}
/** project_root_package. */
pub fn project_root_package() -> string {
var root_package = ""
let root_enrichment = metadata_get("", "enrichment")
if root_enrichment?.rootPackageName {
root_package = root_enrichment?.rootPackageName
}
if !root_package {
let src_enrichment = metadata_get("src", "enrichment")
if src_enrichment?.rootPackageName {
root_package = src_enrichment?.rootPackageName
}
}
if !root_package {
let project_root = project_root() ?? ""
if project_root {
let scan = project_scan(project_root, {tiers: ["ambient", "config"]})
if scan?.package_name {
root_package = scan.package_name
}
}
}
return root_package
}
/** project_scan. */
pub fn project_scan(path = ".", options = nil) {
return project_scan_native(path, options ?? {})
}
/** project_scan_tree. */
pub fn project_scan_tree(path = ".", options = nil) {
return project_scan_tree_native(path, options ?? {})
}
/** project_catalog. */
pub fn project_catalog() {
return project_catalog_native()
}
/** project_scan_paths. */
pub fn project_scan_paths(path = ".", options = nil) {
return project_scan_tree(path, options).keys()
}
/** project_stale. */
pub fn project_stale(namespace) {
return metadata_status(namespace).stale
}
/** project_stale_dirs. */
pub fn project_stale_dirs(namespace) {
let stale = project_stale(namespace)
var dirs = []
for dir in stale.tier1 {
dirs = dirs + [dir]
}
for dir in stale.tier2 {
dirs = dirs + [dir]
}
return dirs
}
/** project_requires_refresh. */
pub fn project_requires_refresh(namespace) {
let status = metadata_status(namespace)
if status.stale.any_stale {
return true
}
for _dir in status.missing_structure_hash {
return true
}
for _dir in status.missing_content_hash {
return true
}
return false
}