///|
fn manifest_value(moon_mod : String, key : String) -> String {
  let prefix = key + " ="
  for raw in normalized(moon_mod).split("\n") {
    let line = raw.trim().to_owned()
    if line.has_prefix(prefix) {
      let tail = line[prefix.length():].to_owned()
      return strip_quotes(tail)
    }
  }
  ""
}

///|
pub fn parse_manifest(moon_mod : String) -> PackageManifest {
  let module_name = manifest_value(moon_mod, "name")
  let version = manifest_value(moon_mod, "version")
  let readme = manifest_value(moon_mod, "readme")
  let repository = manifest_value(moon_mod, "repository")
  let license = manifest_value(moon_mod, "license")
  let description = manifest_value(moon_mod, "description")
  let owner = owner_part(module_name)
  let package_name = package_part(module_name)
  {
    module_name,
    version,
    readme,
    repository,
    license,
    description,
    owner,
    package_name,
    has_valid_name: valid_slug(owner) && valid_slug(package_name),
    has_semver: semver_like(version),
  }
}

///|
fn known_osi_license(license : String) -> Bool {
  license == "MIT" ||
  license == "Apache-2.0" ||
  license == "BSD-2-Clause" ||
  license == "BSD-3-Clause" ||
  license == "MPL-2.0" ||
  license == "ISC"
}