ElectronicBabylonianLiterature/ebl-frontend

View on GitHub
src/corpus/domain/provenance.ts

Summary

Maintainability
A
3 hrs
Test Coverage
A
100%
export const Provenances = {
  'Standard Text': { name: 'Standard Text', abbreviation: 'Std', parent: null },
  Assyria: { name: 'Assyria', abbreviation: 'Assa', parent: null },
  Aššur: { name: 'Aššur', abbreviation: 'Ašš', parent: 'Assyria' },
  'Dūr-Katlimmu': {
    name: 'Dūr-Katlimmu',
    abbreviation: 'Dka',
    parent: 'Assyria',
  },
  Guzana: { name: 'Guzana', abbreviation: 'Guz', parent: 'Assyria' },
  Ḫarrān: { name: 'Ḫarrān', abbreviation: 'Har', parent: 'Assyria' },
  Ḫuzirina: { name: 'Ḫuzirina', abbreviation: 'Huz', parent: 'Assyria' },
  'Imgur-Enlil': {
    name: 'Imgur-Enlil',
    abbreviation: 'Img',
    parent: 'Assyria',
  },
  Kalḫu: { name: 'Kalḫu', abbreviation: 'Kal', parent: 'Assyria' },
  'Kār-Tukulti-Ninurta': {
    name: 'Kār-Tukulti-Ninurta',
    abbreviation: 'Ktn',
    parent: 'Assyria',
  },
  Khorsabad: { name: 'Khorsabad', abbreviation: 'Kho', parent: 'Assyria' },
  Nineveh: { name: 'Nineveh', abbreviation: 'Nin', parent: 'Assyria' },
  'Šubat-Enlil': {
    name: 'Šubat-Enlil',
    abbreviation: 'Šub',
    parent: 'Assyria',
  },
  Tarbiṣu: { name: 'Tarbiṣu', abbreviation: 'Tar', parent: 'Assyria' },
  Babylonia: { name: 'Babylonia', abbreviation: 'Baba', parent: null },
  Adab: { name: 'Adab', abbreviation: 'Adb', parent: 'Babylonia' },
  Babylon: { name: 'Babylon', abbreviation: 'Bab', parent: 'Babylonia' },
  'Bad-Tibira': {
    name: 'Bad-Tibira',
    abbreviation: 'Btb',
    parent: 'Babylonia',
  },
  Borsippa: { name: 'Borsippa', abbreviation: 'Bor', parent: 'Babylonia' },
  Cutha: { name: 'Cutha', abbreviation: 'Cut', parent: 'Babylonia' },
  Dilbat: { name: 'Dilbat', abbreviation: 'Dil', parent: 'Babylonia' },
  Diqdiqqah: { name: 'Diqdiqqah', abbreviation: 'Diqd', parent: 'Babylonia' },
  'Dūr-Kurigalzu': {
    name: 'Dūr-Kurigalzu',
    abbreviation: 'Dku',
    parent: 'Babylonia',
  },
  Eridu: { name: 'Eridu', abbreviation: 'Eri', parent: 'Babylonia' },
  Ešnunna: { name: 'Ešnunna', abbreviation: 'Ešn', parent: 'Babylonia' },
  Garšana: { name: 'Garšana', abbreviation: 'Gar', parent: 'Babylonia' },
  Girsu: { name: 'Girsu', abbreviation: 'Gir', parent: 'Babylonia' },
  Ḫursagkalama: {
    name: 'Ḫursagkalama',
    abbreviation: 'Hur',
    parent: 'Babylonia',
  },
  Irisagrig: { name: 'Irisagrig', abbreviation: 'Irs', parent: 'Babylonia' },
  'Ishān Miziyad': {
    name: 'Ishān Miziyad',
    abbreviation: 'Miz',
    parent: 'Babylonia',
  },
  Isin: { name: 'Isin', abbreviation: 'Isn', parent: 'Babylonia' },
  'Ishān Hāfudh': {
    name: 'Ishān Hāfudh',
    abbreviation: 'Haf',
    parent: 'Babylonia',
  },
  'Jamdat Naṣr': {
    name: 'Jamdat Naṣr',
    abbreviation: 'Nasr',
    parent: 'Babylonia',
  },
  Kisurra: { name: 'Kisurra', abbreviation: 'Ksr', parent: 'Babylonia' },
  Kiš: { name: 'Kiš', abbreviation: 'Kiš', parent: 'Babylonia' },
  Kutalla: { name: 'Kutalla', abbreviation: 'Kut', parent: 'Babylonia' },
  Lagaš: { name: 'Lagaš', abbreviation: 'Lag', parent: 'Babylonia' },
  Larak: { name: 'Larak', abbreviation: 'Lrk', parent: 'Babylonia' },
  Larsa: { name: 'Larsa', abbreviation: 'Lar', parent: 'Babylonia' },
  Malgium: { name: 'Malgium', abbreviation: 'Mal', parent: 'Babylonia' },
  Marad: { name: 'Marad', abbreviation: 'Mrd', parent: 'Babylonia' },
  'Maškan-šāpir': {
    name: 'Maškan-šāpir',
    abbreviation: 'Maš',
    parent: 'Babylonia',
  },
  Meturan: { name: 'Meturan', abbreviation: 'Met', parent: 'Babylonia' },
  'Meturan (Tell al-Sib)': {
    name: 'Meturan (Tell al-Sib)',
    abbreviation: 'MetS',
    parent: 'Babylonia',
  },
  Nērebtum: { name: 'Nērebtum', abbreviation: 'Nēr', parent: 'Babylonia' },
  Nigin: { name: 'Nigin', abbreviation: 'Nig', parent: 'Babylonia' },
  Nippur: { name: 'Nippur', abbreviation: 'Nip', parent: 'Babylonia' },
  'Pī-Kasî': { name: 'Pī-Kasî', abbreviation: 'Pik', parent: 'Babylonia' },
  'Puzriš-Dagān': {
    name: 'Puzriš-Dagān',
    abbreviation: 'Puz',
    parent: 'Babylonia',
  },
  Sippar: { name: 'Sippar', abbreviation: 'Sip', parent: 'Babylonia' },
  'Sippar-Amnānum': {
    name: 'Sippar-Amnānum',
    abbreviation: 'Sipam',
    parent: 'Babylonia',
  },
  Sulaiymah: { name: 'Sulaiymah', abbreviation: 'Sul', parent: 'Babylonia' },
  Šaduppûm: { name: 'Šaduppûm', abbreviation: 'Šad', parent: 'Babylonia' },
  Šaḫrīnu: { name: 'Šaḫrīnu', abbreviation: 'Šah', parent: 'Babylonia' },
  Šuruppak: { name: 'Šuruppak', abbreviation: 'Šur', parent: 'Babylonia' },
  'Tall Abū Ṣālabīkh': {
    name: 'Tall Abū Ṣālabīkh',
    abbreviation: 'Abs',
    parent: 'Babylonia',
  },
  'Tall Ajrab': {
    name: 'Tall Ajrab',
    abbreviation: 'Ajr',
    parent: 'Babylonia',
  },
  'Tall Imlīḥiyah': {
    name: 'Tall Imlīḥiyah',
    abbreviation: 'Iml',
    parent: 'Babylonia',
  },
  'Tall Jidar': {
    name: 'Tall Jidar',
    abbreviation: 'Jid',
    parent: 'Babylonia',
  },
  'Tall Khaibar': {
    name: 'Tall Khaibar',
    abbreviation: 'Kha',
    parent: 'Babylonia',
  },
  'Tall al-Laḥam': {
    name: 'Tall al-Laḥam',
    abbreviation: 'Lah',
    parent: 'Babylonia',
  },
  'Tall Muḥamad': {
    name: 'Tall Muḥamad',
    abbreviation: 'Muh',
    parent: 'Babylonia',
  },
  'Tall al-ʻUbaīd': {
    name: 'Tall al-ʻUbaīd',
    abbreviation: 'Ubd',
    parent: 'Babylonia',
  },
  'Tall Umm al-ʻAjarib': {
    name: 'Tall Umm al-ʻAjarib',
    abbreviation: 'Uaaj',
    parent: 'Babylonia',
  },
  'Tall ʻUqair': {
    name: 'Tall ʻUqair',
    abbreviation: 'Uqa',
    parent: 'Babylonia',
  },
  'Tulūl al-Baqarāt': {
    name: 'Tulūl al-Baqarāt',
    abbreviation: 'Baq',
    parent: 'Babylonia',
  },
  'Tulūl Khaṭāb': {
    name: 'Tulūl Khaṭāb',
    abbreviation: 'Khat',
    parent: 'Babylonia',
  },
  Tummal: { name: 'Tummal', abbreviation: 'Tum', parent: 'Babylonia' },
  Tutub: { name: 'Tutub', abbreviation: 'Ttb', parent: 'Babylonia' },
  Umma: { name: 'Umma', abbreviation: 'Umm', parent: 'Babylonia' },
  'Umm al-Ḥafriyāt': {
    name: 'Umm al-Ḥafriyāt',
    abbreviation: 'Hafr',
    parent: 'Babylonia',
  },
  'Umm al-Wawiya': {
    name: 'Umm al-Wawiya',
    abbreviation: 'Waw',
    parent: 'Babylonia',
  },
  Ur: { name: 'Ur', abbreviation: 'Ur', parent: 'Babylonia' },
  Uruk: { name: 'Uruk', abbreviation: 'Urk', parent: 'Babylonia' },
  Yelkhi: { name: 'Yelkhi', abbreviation: 'Ylk', parent: 'Babylonia' },
  Zabalam: { name: 'Zabalam', abbreviation: 'Zab', parent: 'Babylonia' },
  Zaralulu: { name: 'Zaralulu', abbreviation: 'Zar', parent: 'Babylonia' },
  Periphery: { name: 'Periphery', abbreviation: '', parent: null },
  Alalakh: { name: 'Alalakh', abbreviation: 'Ala', parent: 'Periphery' },
  'Tell el-Amarna': {
    name: 'Tell el-Amarna',
    abbreviation: 'Ama',
    parent: 'Periphery',
  },
  '‘Anah': { name: '‘Anah', abbreviation: 'Anh', parent: 'Periphery' },
  Anšan: { name: 'Anšan', abbreviation: 'Anš', parent: 'Periphery' },
  'Bakr Āwā': { name: 'Bakr Āwā', abbreviation: 'Bakr', parent: 'Periphery' },
  Bārah: { name: 'Bārah', abbreviation: 'Bar', parent: 'Periphery' },
  Bitwātā: { name: 'Bitwātā', abbreviation: 'Bitw', parent: 'Periphery' },
  Dēr: { name: 'Dēr', abbreviation: 'Der', parent: 'Periphery' },
  Dugirdkhan: { name: 'Dugirdkhan', abbreviation: 'Dgr', parent: 'Periphery' },
  'Dūr-Untaš': { name: 'Dūr-Untaš', abbreviation: 'Dun', parent: 'Periphery' },
  Ebla: { name: 'Ebla', abbreviation: 'Ebl', parent: 'Periphery' },
  Elam: { name: 'Elam', abbreviation: 'Elam', parent: 'Periphery' },
  Emar: { name: 'Emar', abbreviation: 'Emr', parent: 'Periphery' },
  'Glay‘a': { name: 'Glay‘a', abbreviation: 'Gla', parent: 'Periphery' },
  Hamath: { name: 'Hamath', abbreviation: 'Ham', parent: 'Periphery' },
  Ḫattuša: { name: 'Ḫattuša', abbreviation: 'Hat', parent: 'Periphery' },
  Kaneš: { name: 'Kaneš', abbreviation: 'Kan', parent: 'Periphery' },
  Karkemiš: { name: 'Karkemiš', abbreviation: 'Kar', parent: 'Periphery' },
  Kimūnah: { name: 'Kimūnah', abbreviation: 'Kmn', parent: 'Periphery' },
  Mardaman: { name: 'Mardaman', abbreviation: 'Mard', parent: 'Periphery' },
  Mari: { name: 'Mari', abbreviation: 'Mar', parent: 'Periphery' },
  Megiddo: { name: 'Megiddo', abbreviation: 'Meg', parent: 'Periphery' },
  'Mila Mergi': {
    name: 'Mila Mergi',
    abbreviation: 'Milm',
    parent: 'Periphery',
  },
  Nuzi: { name: 'Nuzi', abbreviation: 'Nuzi', parent: 'Periphery' },
  Pašime: { name: 'Pašime', abbreviation: 'Paš', parent: 'Periphery' },
  Persepolis: { name: 'Persepolis', abbreviation: 'Per', parent: 'Periphery' },
  Qatara: { name: 'Qatara', abbreviation: 'Qat', parent: 'Periphery' },
  Qaṭnā: { name: 'Qaṭnā', abbreviation: 'Qaṭ', parent: 'Periphery' },
  'Sur Jar‘a': { name: 'Sur Jar‘a', abbreviation: 'Surj', parent: 'Periphery' },
  Susa: { name: 'Susa', abbreviation: 'Sus', parent: 'Periphery' },
  Shīshīn: { name: 'Shīshīn', abbreviation: 'Shn', parent: 'Periphery' },
  Šušarra: { name: 'Šušarra', abbreviation: 'Šuš', parent: 'Periphery' },
  'Tall Bāz Musiyān': {
    name: 'Tall Bāz Musiyān',
    abbreviation: 'Bazm',
    parent: 'Periphery',
  },
  'Tall al-Fakhar': {
    name: 'Tall al-Fakhar',
    abbreviation: 'Fakh',
    parent: 'Periphery',
  },
  'Tall Ghaḍaiyrīfah': {
    name: 'Tall Ghaḍaiyrīfah',
    abbreviation: 'Ghad',
    parent: 'Periphery',
  },
  'Tall al-Hawa': {
    name: 'Tall al-Hawa',
    abbreviation: 'Haw',
    parent: 'Periphery',
  },
  'Tall Ibrāhīm Bayis': {
    name: 'Tall Ibrāhīm Bayis',
    abbreviation: 'Iba',
    parent: 'Periphery',
  },
  'Tepe Gotvand': {
    name: 'Tepe Gotvand',
    abbreviation: 'Tgo',
    parent: 'Periphery',
  },
  Terqa: { name: 'Terqa', abbreviation: 'Ter', parent: 'Periphery' },
  Tikrīt: { name: 'Tikrīt', abbreviation: 'Tikr', parent: 'Periphery' },
  Tuttul: { name: 'Tuttul', abbreviation: 'Ttl', parent: 'Periphery' },
  Ugarit: { name: 'Ugarit', abbreviation: 'Uga', parent: 'Periphery' },
  Zawiyah: { name: 'Zawiyah', abbreviation: 'Zaw', parent: 'Periphery' },
  Uncertain: { name: 'Uncertain', abbreviation: 'Unc', parent: null },
} as const
export type Provenance = typeof Provenances[keyof typeof Provenances]
export const provenances: readonly Provenance[] = Object.values(Provenances)

export function compareStandardText(
  first: Provenance,
  second: Provenance
): number {
  if (first === second) {
    return 0
  } else if (first === Provenances['Standard Text']) {
    return -1
  } else if (second === Provenances['Standard Text']) {
    return 1
  } else {
    return 0
  }
}

export function compareAssyriaAndBabylonia(
  first: Provenance,
  second: Provenance
): number {
  function isCity(provenance: Provenance): boolean {
    const nonCities: Provenance[] = [
      Provenances['Standard Text'],
      Provenances.Assyria,
      Provenances.Babylonia,
    ]
    return !nonCities.includes(provenance)
  }
  if (isCity(first) && isCity(second)) {
    return 0
  } else if (isCity(first)) {
    return 1
  } else if (isCity(second)) {
    return -1
  } else {
    return compareName(first, second)
  }
}

export function compareName(first: Provenance, second: Provenance): number {
  return first.name.localeCompare(second.name)
}