harn-vm 0.7.20

Async bytecode virtual machine for the Harn programming language
Documentation
/** 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
}