@treeviz/gedcom-parser 1.0.15 → 1.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/factories/cache-factory.ts","../../src/utils/cache.ts","../../src/constants/constants.ts","../../src/classes/list.ts","../../src/classes/common.ts","../../src/factories/date-locale-factory.ts","../../src/factories/i18n-factory.ts","../../src/kinship-translator/translators.ts","../../src/constants/filters.ts","../../src/utils/get-family-with.ts","../../src/constants/orders.ts","../../src/utils/get-all-prop.ts","../../src/utils/date-formatter.ts","../../src/utils/get-places.ts","../../src/utils/logger.ts","../../src/utils/nested-group.ts","../../src/utils/place-parser.ts","../../src/utils/place-translator.ts","../../src/classes/indis.ts","../../src/classes/fam.ts","../../src/classes/fams.ts","../../src/classes/name.ts","../../src/classes/indi.ts","../../src/utils/name-formatter.ts","../../src/utils/ordinalize.ts","../../src/kinship-translator/kinship-translator.basic.ts","../../src/kinship-translator/patterns.hu.ts","../../src/kinship-translator/kinship-translator.hu.ts","../../src/kinship-translator/patterns.en.ts","../../src/kinship-translator/kinship-translator.en.ts","../../src/kinship-translator/patterns.de.ts","../../src/kinship-translator/kinship-translator.de.ts","../../src/kinship-translator/patterns.fr.ts","../../src/kinship-translator/kinship-translator.fr.ts","../../src/kinship-translator/patterns.es.ts","../../src/kinship-translator/kinship-translator.es.ts","../../src/kinship-translator/kinship-translator.ts","../../src/factories/kinship-factory.ts","../../src/utils/range.ts","../../src/classes/date.ts","../../package.json","../../src/utils/get-product-details.ts","../../src/classes/gedcom.ts","../../src/classes/note.ts","../../src/classes/obje.ts","../../src/classes/repo.ts","../../src/classes/sour.ts","../../src/classes/subm.ts","../../src/utils/common-creator.ts","../../src/utils/get-raw-size.ts","../../src/classes/objes.ts","../../src/classes/repos.ts","../../src/classes/sours.ts","../../src/classes/subms.ts","../../src/utils/parser.ts"],"names":["set","get","value","unset","format","fam","PlaceType","key","id","index","path","KinshipTranslatorClass","s","e","splitRange"],"mappings":"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","file":"index.js","sourcesContent":["import type { ICacheManager } from \"../utils/cache\";\n\n/**\n * Factory function type for creating cache manager instances.\n * This allows the main project to inject custom cache implementations (e.g., IndexedDB).\n */\nexport type CacheManagerFactory = <T>(\n\tname: string,\n\tstore: string,\n\ttype: string,\n\tencrypted: boolean\n) => ICacheManager<T>;\n\n/**\n * Default in-memory cache manager factory.\n * This is used as a fallback when no custom factory is provided.\n */\nconst defaultCacheFactory: CacheManagerFactory = <T>() => {\n\tlet cache: T | null = null;\n\treturn {\n\t\tgetItem: async () => cache,\n\t\tsetItem: async (value: T) => {\n\t\t\tcache = value;\n\t\t},\n\t};\n};\n\nlet cacheFactory: CacheManagerFactory = defaultCacheFactory;\n\n/**\n * Set a custom cache manager factory.\n * Call this from the main project to inject IndexedDB or other cache implementations.\n *\n * @example\n * ```typescript\n * import { setCacheManagerFactory } from '@treeviz/gedcom-parser/factories/cache-factory';\n * import { getInstance } from './utils/indexed-db-manager';\n *\n * setCacheManagerFactory(getInstance);\n * ```\n */\nexport const setCacheManagerFactory = (factory: CacheManagerFactory) => {\n\tcacheFactory = factory;\n};\n\n/**\n * Get the current cache manager factory.\n * Used internally by the cache utility.\n */\nexport const getCacheManagerFactory = (): CacheManagerFactory => {\n\treturn cacheFactory;\n};\n\n/**\n * Reset to default in-memory cache factory.\n * Useful for testing or when switching between projects.\n */\nexport const resetCacheManagerFactory = () => {\n\tcacheFactory = defaultCacheFactory;\n};\n","import { debounce } from \"lodash-es\";\n\nimport type {Path} from \"../classes/indi\";\nimport type {Individuals} from \"../classes/indis\";\nimport { getCacheManagerFactory } from \"../factories/cache-factory\";\nimport type {IndiKey} from \"../types/types\";\n\n/**\n * Cache manager interface for pluggable cache implementations.\n * The main project can inject custom implementations (e.g., IndexedDB) via setCacheManagerFactory.\n */\nexport interface ICacheManager<T> {\n\tgetItem: () => Promise<T | null>;\n\tsetItem: (value: T) => Promise<void>;\n}\n\ninterface Caches {\n\tpathCache: Record<`${IndiKey}|${IndiKey}`, Path> | undefined;\n\trelativesOnLevelCache:\n\t\t| Record<IndiKey, Record<number, Individuals>>\n\t\t| undefined;\n\trelativesOnDegreeCache:\n\t\t| Record<IndiKey, Record<number, Individuals>>\n\t\t| undefined;\n}\n\ntype CacheStores = {\n\t[x in keyof Caches]: (value: Caches[x]) => void;\n};\n\ntype CacheDbs = {\n\t[x in keyof Caches]: ICacheManager<Caches[x]>;\n};\n\nconst caches: Caches = {\n\tpathCache: {},\n\trelativesOnDegreeCache: {},\n\trelativesOnLevelCache: {},\n};\n\nconst getInstance = getCacheManagerFactory();\n\nconst cacheDbs: CacheDbs = {\n\tpathCache: getInstance<Caches[\"pathCache\"]>(\"ftv\", \"Main\", \"path\", true),\n\trelativesOnDegreeCache: getInstance<Caches[\"relativesOnDegreeCache\"]>(\n\t\t\"ftv\",\n\t\t\"Main\",\n\t\t\"path\",\n\t\ttrue\n\t),\n\trelativesOnLevelCache: getInstance<Caches[\"relativesOnLevelCache\"]>(\n\t\t\"ftv\",\n\t\t\"Main\",\n\t\t\"path\",\n\t\ttrue\n\t),\n};\n\nconst _storeCache: CacheStores = {\n\tpathCache: debounce((value) => {\n\t\tif (value) {\n\t\t\tcacheDbs.pathCache.setItem(value);\n\t\t}\n\t}, 50),\n\trelativesOnLevelCache: debounce((value) => {\n\t\tif (value) {\n\t\t\tcacheDbs.relativesOnLevelCache.setItem(value);\n\t\t}\n\t}, 50),\n\trelativesOnDegreeCache: debounce((value) => {\n\t\tif (value) {\n\t\t\tcacheDbs.relativesOnDegreeCache.setItem(value);\n\t\t}\n\t}, 50),\n};\n\nexport type CacheRelatives<O extends keyof Caches = \"pathCache\"> = <\n\tT extends keyof Omit<Caches, O>,\n\tK extends keyof NonNullable<Omit<Caches, O>[T]>,\n>(\n\tcacheKey: T\n) => (\n\tkey: K,\n\tsubKey: number,\n\t...values: [keyof NonNullable<Omit<Caches, O>[T]>[K]]\n) => NonNullable<Omit<Caches, O>[T]>[K];\n\nexport const resetRelativesCache = () => {\n\tcaches.relativesOnDegreeCache = {};\n\tcaches.relativesOnLevelCache = {};\n};\n\nexport const relativesCache =\n\t(cacheKey: keyof Omit<Caches, \"pathCache\">) =>\n\t<T extends Individuals | undefined>(\n\t\tkey: IndiKey,\n\t\tsubKey: number,\n\t\tvalue?: T\n\t) => {\n\t\tif (!caches[cacheKey]) {\n\t\t\tcaches[cacheKey] = {};\n\t\t}\n\n\t\tif (value && caches[cacheKey]) {\n\t\t\tif (!caches[cacheKey]![key]) {\n\t\t\t\tcaches[cacheKey]![key] = {};\n\t\t\t}\n\n\t\t\tcaches[cacheKey]![key]![subKey] = value;\n\n\t\t\treturn caches[cacheKey]![key][subKey] as Exclude<T, undefined>;\n\t\t}\n\n\t\treturn caches[cacheKey]?.[key]?.[subKey] as T;\n\t};\n\nexport const pathCache = <T extends Path | undefined>(\n\tkey: `${IndiKey}|${IndiKey}`,\n\tvalue?: T\n) => {\n\tif (!caches.pathCache) {\n\t\tcaches.pathCache = {};\n\t}\n\n\tif (value && caches.pathCache) {\n\t\tcaches.pathCache[key] = value;\n\n\t\treturn caches.pathCache[key] as Exclude<T, undefined>;\n\t}\n\n\treturn caches.pathCache?.[key] as T;\n};\n","/**\n * GEDCOM Parsing Patterns\n * Regular expressions for parsing GEDCOM files\n */\n\nexport const REF_LINE_REG =\n\t/^0 (?:(@[_a-zA-Z0-9]*@) )?(?<type>_[_A-Z][_a-zA-Z]{2,}|_?[A-Z][a-zA-Z]{2,}) ?(?<value>.*)/gm;\nexport const LINE_REG =\n\t/(?<indent>^[0-9]) (?:(@[_a-zA-Z0-9]*@) )?(?<type>_[_A-Z][_a-zA-Z]{2,}|_?[A-Z][a-zA-Z]{2,}) ?(?<value>.*)/;\nexport const ID_REG = /^@[_a-zA-Z0-9]+@/;\nexport const ID_GETTER_REG = /^(?<at>@)?(?<letter>[A-Z])?/i;\nexport const ID_SPLIT_REG = /^@[_a-zA-Z0-9]+@:/;\n\n/**\n * File size limits\n */\nexport const MAX_FILE_SIZE_TO_SYNC = 1024 * 1024 * 20; // 20MB\n\n","import { differenceBy, get, intersectionBy, set, unset } from \"lodash-es\";\n\nimport type {ConvertOptions} from \"../interfaces/common\";\nimport type {IList} from \"../interfaces/list\";\nimport type {OrderDefinition, IdType, Filter, FilterIterator, MultiTag, Order, OrderIterator, Group, GroupIterator, GroupDefinition, GroupMarker } from \"../types/types\";\n\nimport { getValidTag } from \"./common\";\nimport type {Common} from \"./common\";\n\nexport class List<\n\tK extends IdType = IdType,\n\tT extends Common = Common,\n> implements IList<K, T> {\n\tprivate items: Partial<Record<K, T>> = {};\n\tisListable = true;\n\tmarker: string | undefined = undefined;\n\t// length = 0;\n\n\tconstructor(items?: Partial<Record<K, T>> | T[]) {\n\t\tif (items) {\n\t\t\tthis.concat(items);\n\t\t}\n\t}\n\n\tget length() {\n\t\treturn this.values().length;\n\t}\n\n\thas(indi?: K | T) {\n\t\treturn !!this.item(\n\t\t\t(typeof indi === \"string\" ? indi : (indi?.id ?? \"\")) as K\n\t\t);\n\t}\n\n\tget(name: MultiTag) {\n\t\tconst propList = new List();\n\t\t(this.entries() as Array<[K, T]>).forEach(([key, item]) => {\n\t\t\tpropList.item(key, item.get(name) as T);\n\t\t});\n\n\t\treturn propList;\n\t}\n\n\tgetIf(name: MultiTag, condition: string, name2: MultiTag) {\n\t\tconst propList = new List();\n\n\t\t(this.entries() as Array<[K, T]>).forEach(([key, item]) => {\n\t\t\tconst passedItem = item.getIf(name, condition, name2) as\n\t\t\t\t| T\n\t\t\t\t| undefined;\n\n\t\t\tif (passedItem) {\n\t\t\t\tpropList.item(key, passedItem);\n\t\t\t}\n\t\t});\n\n\t\treturn propList;\n\t}\n\n\tkeys() {\n\t\t// const hasOwn = Object.prototype.hasOwnProperty;\n\t\t// const keys: K[] = [];\n\t\t// for (const k in this.items) {\n\t\t// \tif (hasOwn.call(this.items, k)) {\n\t\t// \t\tkeys.push(k);\n\t\t// \t}\n\t\t// }\n\n\t\t// return keys;\n\n\t\treturn Object.keys(this.items) as K[];\n\t}\n\n\tvalues() {\n\t\t// const hasOwn = Object.prototype.hasOwnProperty;\n\t\t// const values: Array<T | undefined> = [];\n\t\t// for (const k in this.items) {\n\t\t// \tif (hasOwn.call(this.items, k)) {\n\t\t// \t\tvalues.push(this.items[k]);\n\t\t// \t}\n\t\t// }\n\n\t\t// return values;\n\n\t\treturn Object.values(this.items) as (T | undefined)[];\n\t}\n\n\tentries() {\n\t\t// const hasOwn = Object.prototype.hasOwnProperty;\n\t\t// const entries: Array<[K, T | undefined]> = [];\n\t\t// for (const k in this.items) {\n\t\t// \tif (hasOwn.call(this.items, k)) {\n\t\t// \t\tentries.push([k, this.items[k]]);\n\t\t// \t}\n\t\t// }\n\n\t\t// return entries;\n\n\t\treturn Object.entries(this.items) as [K, T | undefined][];\n\t}\n\n\tsetLength(_type?: \"increase\" | \"decrease\") {\n\t\t// THIS IS TO SLOW\n\t\t// if (!type) {\n\t\t// \tthis.length = this.keys().length;\n\t\t// } else {\n\t\t// \tthis.length = this.length + (type === \"increase\" ? 1 : -1);\n\t\t// }\n\t}\n\n\tfirst() {\n\t\treturn this.index(0);\n\t}\n\n\tlast() {\n\t\treturn this.index(this.keys().length - 1);\n\t}\n\n\tindex(index: number) {\n\t\tconst keys = this.keys();\n\t\tconst key = keys[index];\n\n\t\treturn key && this.items[key];\n\t}\n\n\titem(name: K, value?: T) {\n\t\tif (arguments.length > 1) {\n\t\t\tset(this.items, name, value);\n\n\t\t\tthis.setLength();\n\t\t}\n\n\t\treturn get(this.items, name) as T | undefined;\n\t}\n\n\tremoveItem(name: K) {\n\t\tunset(this.items, name);\n\n\t\tthis.setLength();\n\t}\n\n\texclude(excludedList: List<K, T>) {\n\t\texcludedList.keys().forEach((itemId) => {\n\t\t\tdelete this.items[itemId as K];\n\t\t});\n\n\t\tthis.setLength();\n\n\t\treturn this;\n\t}\n\n\tconcat(items?: Partial<Record<K, T>> | T[]) {\n\t\tif (Array.isArray(items)) {\n\t\t\titems.forEach((item) => {\n\t\t\t\tthis.append(item);\n\t\t\t});\n\t\t} else {\n\t\t\tObject.assign(this.items, items ?? {});\n\t\t}\n\n\t\tthis.setLength();\n\n\t\treturn this;\n\t}\n\n\tmerge(mergedList?: List<K, T>) {\n\t\tthis.concat(mergedList?.items);\n\n\t\treturn this;\n\t}\n\n\tintersection(mergedList?: List<K, T>) {\n\t\tconst inter = intersectionBy(\n\t\t\tthis.values(),\n\t\t\tmergedList?.values() ?? [],\n\t\t\t\"id\"\n\t\t) as T[];\n\n\t\treturn new List<K, T>(inter);\n\t}\n\n\tdifference(mergedList?: List<K, T>) {\n\t\tconst inter = differenceBy(\n\t\t\tthis.values(),\n\t\t\tmergedList?.values() ?? [],\n\t\t\t\"id\"\n\t\t) as T[];\n\n\t\treturn new List<K, T>(inter);\n\t}\n\n\tprepend(item: T) {\n\t\tif (item.id) {\n\t\t\tlet increase = true;\n\t\t\tif (this.items[item.id as K]) {\n\t\t\t\tdelete this.items[item.id as K];\n\t\t\t\tincrease = false;\n\t\t\t}\n\n\t\t\tthis.items = Object.assign(\n\t\t\t\t{\n\t\t\t\t\t[item.id]: item,\n\t\t\t\t},\n\t\t\t\tthis.items\n\t\t\t);\n\n\t\t\tif (increase) {\n\t\t\t\tthis.setLength(\"increase\");\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tappend(item: T) {\n\t\tif (item.id) {\n\t\t\tlet increase = true;\n\t\t\tif (this.items[item.id as K]) {\n\t\t\t\tdelete this.items[item.id as K];\n\t\t\t\tincrease = false;\n\t\t\t}\n\n\t\t\tthis.items[item.id as K] = item;\n\n\t\t\tif (increase) {\n\t\t\t\tthis.setLength(\"increase\");\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tdelete(item: T) {\n\t\tif (item.id && this.items[item.id as K]) {\n\t\t\tdelete this.items[item.id as K];\n\n\t\t\tthis.setLength(\"decrease\");\n\t\t}\n\n\t\treturn this;\n\t}\n\n\tcopy(ClassName: typeof List<K, T> = List<K, T>) {\n\t\tconst newList = new ClassName();\n\n\t\tObject.assign(newList.items, this.items);\n\t\tnewList.setLength();\n\n\t\treturn newList;\n\t}\n\n\texcept(item: T, ClassName: typeof List<K, T> = List<K, T>) {\n\t\treturn this.copy(ClassName).delete(item);\n\t}\n\n\tforEach(iterate: (item: T, key: K, index: number) => void) {\n\t\tthis.entries().forEach(([key, item], index) => {\n\t\t\titerate(item as T, key as K, index);\n\t\t});\n\t}\n\n\tmap<R>(iterate: (item: T, key: K, index: number) => R) {\n\t\treturn this.entries().map(([key, item], index) => {\n\t\t\treturn iterate(item as T, key as K, index);\n\t\t});\n\t}\n\n\treduce<R>(\n\t\titerate: (acc: R, item: T, key: K, index: number) => R,\n\t\tinitialValue: R\n\t) {\n\t\treturn this.entries().reduce((acc, [key, item], index) => {\n\t\t\treturn iterate(acc as R, item as T, key as K, index);\n\t\t}, initialValue);\n\t}\n\n\tfilter(\n\t\tfilters: Filter | FilterIterator<T, K>,\n\t\tClassName: typeof List<K, T> = List<K, T>\n\t) {\n\t\tconst newList = new ClassName();\n\n\t\tconst isIterator = typeof filters === \"function\";\n\t\t(this.entries() as Array<[K, T]>).forEach(([itemId, item], index) => {\n\t\t\tif (isIterator) {\n\t\t\t\tfilters(item, itemId, index) && newList.item(itemId, item);\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!Object.keys(filters).length ||\n\t\t\t\tObject.entries(filters).every(([key, value]) => {\n\t\t\t\t\tlet itemValue: string | undefined;\n\n\t\t\t\t\tif (key === \"id\") {\n\t\t\t\t\t\t// id is a special prop. it's always a string\n\t\t\t\t\t\titemValue = item.toProp(\"id\") as unknown as string;\n\t\t\t\t\t} else {\n\t\t\t\t\t\titemValue = item.toProp(key as MultiTag)?.toValue();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\t\treturn value.includes(itemValue);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn itemValue === value;\n\t\t\t\t})\n\t\t\t) {\n\t\t\t\tnewList.item(itemId, item);\n\t\t\t}\n\t\t});\n\n\t\treturn newList;\n\t}\n\n\tfind(\n\t\tfilters: Filter | FilterIterator<T, K>,\n\t\t_ClassName: typeof List<K, T> = List<K, T>\n\t) {\n\t\tlet foundItem: T | undefined;\n\n\t\tconst isIterator = typeof filters === \"function\";\n\t\t(this.entries() as Array<[K, T]>).find(([itemId, item], index) => {\n\t\t\tif (isIterator) {\n\t\t\t\tif (filters(item, itemId, index)) {\n\t\t\t\t\tfoundItem = item;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!Object.keys(filters).length ||\n\t\t\t\tObject.entries(filters).every(([key, value]) => {\n\t\t\t\t\tlet itemValue: string | undefined;\n\n\t\t\t\t\tif (key === \"id\") {\n\t\t\t\t\t\t// id is a special prop. it's always a string\n\t\t\t\t\t\titemValue = item.toProp(\"id\") as unknown as string;\n\t\t\t\t\t} else {\n\t\t\t\t\t\titemValue = item.toProp(key as MultiTag)?.toValue();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\t\treturn value.includes(itemValue);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn itemValue === value;\n\t\t\t\t})\n\t\t\t) {\n\t\t\t\tfoundItem = item;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\n\t\treturn foundItem;\n\t}\n\n\torderBy(\n\t\torders: Order | OrderIterator<T, K>,\n\t\tClassName: typeof List<K, T> = List<K, T>\n\t) {\n\t\tconst newList = new ClassName();\n\n\t\tconst isIterator = typeof orders === \"function\";\n\n\t\tif (!isIterator && (!orders || !Object.keys(orders).length)) {\n\t\t\treturn newList.merge(this);\n\t\t}\n\n\t\tconst sortedItems = (this.entries() as Array<[K, T]>).toSorted(\n\t\t\t([itemAId, itemA], [itemBId, itemB]) => {\n\t\t\t\tif (isIterator) {\n\t\t\t\t\treturn orders(itemA, itemAId, itemB, itemBId);\n\t\t\t\t}\n\n\t\t\t\tconst [key, { direction, getter }] = Object.entries(\n\t\t\t\t\ttypeof orders === \"string\"\n\t\t\t\t\t\t? { [orders]: { direction: \"ASC\" } }\n\t\t\t\t\t\t: orders\n\t\t\t\t)[0] as [MultiTag, OrderDefinition];\n\n\t\t\t\tconst rawA = itemA.get<T>(key as MultiTag);\n\t\t\t\tconst rawB = itemB.get<T>(key as MultiTag);\n\t\t\t\tlet valueA: unknown | undefined = rawA?.toValue();\n\t\t\t\tlet valueB: unknown | undefined = rawB?.toValue();\n\n\t\t\t\tif (getter && typeof getter === \"function\") {\n\t\t\t\t\tvalueA = getter(valueA, rawA);\n\t\t\t\t\tvalueB = getter(valueB, rawB);\n\t\t\t\t}\n\n\t\t\t\tlet sortValue = 0;\n\n\t\t\t\tif (!valueA && valueA !== 0 && !valueB && valueB !== 0) {\n\t\t\t\t\tsortValue = 0;\n\t\t\t\t} else if (!valueB && valueB !== 0) {\n\t\t\t\t\tsortValue = 1;\n\t\t\t\t} else if (!valueA && valueA !== 0) {\n\t\t\t\t\tsortValue = -1;\n\t\t\t\t} else if (valueA < valueB) {\n\t\t\t\t\tsortValue = -1;\n\t\t\t\t} else if (valueA > valueB) {\n\t\t\t\t\tsortValue = 1;\n\t\t\t\t}\n\n\t\t\t\treturn sortValue * (direction === \"DESC\" ? -1 : 1);\n\t\t\t}\n\t\t);\n\n\t\tsortedItems.forEach(([key, value]) => {\n\t\t\tnewList.item(key, value);\n\t\t});\n\n\t\treturn newList;\n\t}\n\n\tgroupBy(\n\t\tgroups: Group | GroupIterator<T, K>,\n\t\tsort?: \"length\" | \"group\" | OrderIterator<List<K, T>, string>,\n\t\tminOccurance = -1,\n\t\tlessOccuranceLabel = \"Appearing less than 5 times\",\n\t\tClassName: typeof List<K, T> = List<K, T>\n\t) {\n\t\tconst groupped: Record<string, List<K, T>> = {};\n\n\t\tconst isIterator = typeof groups === \"function\";\n\n\t\tif (!isIterator && (!groups || !Object.keys(groups).length)) {\n\t\t\tgroupped.Unknown = new ClassName().merge(this);\n\t\t\tgroupped.Unknown.marker = \"Unknown\";\n\t\t\treturn groupped;\n\t\t}\n\n\t\tthis.forEach((item, itemId) => {\n\t\t\tconst group: (string | GroupMarker)[] = [];\n\t\t\tif (isIterator) {\n\t\t\t\tconst newGroups = groups(item, itemId);\n\n\t\t\t\tgroup.push(\n\t\t\t\t\t...(Array.isArray(newGroups) ? newGroups : [newGroups])\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tconst [key, { getter }] = Object.entries(\n\t\t\t\t\ttypeof groups === \"string\" ? { [groups]: {} } : groups\n\t\t\t\t)[0] as [MultiTag, GroupDefinition];\n\n\t\t\t\tconst raw = item\n\t\t\t\t\t.get<T>(key as MultiTag)\n\t\t\t\t\t?.toList()\n\t\t\t\t\t.index(0);\n\t\t\t\tlet value = raw?.toValue();\n\n\t\t\t\tif (getter && typeof getter === \"function\") {\n\t\t\t\t\tvalue = getter(value, raw) as typeof value;\n\t\t\t\t}\n\n\t\t\t\tif (value) {\n\t\t\t\t\tgroup.push(value);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!group.length) {\n\t\t\t\tgroup.push(\"Unknown\");\n\t\t\t}\n\n\t\t\tgroup.forEach((g) => {\n\t\t\t\tconst newGroup: GroupMarker =\n\t\t\t\t\ttypeof g === \"string\" ? { group: g } : g;\n\t\t\t\tif (!groupped[newGroup.group]) {\n\t\t\t\t\tgroupped[newGroup.group] = new ClassName();\n\t\t\t\t\tgroupped[newGroup.group].marker =\n\t\t\t\t\t\tnewGroup.marker ?? newGroup.group;\n\t\t\t\t}\n\t\t\t\tgroupped[newGroup.group]?.append(item);\n\t\t\t});\n\t\t});\n\n\t\tif (sort) {\n\t\t\treturn Object.entries(groupped)\n\t\t\t\t.toSorted(([ak, a], [bk, b]) => {\n\t\t\t\t\tif (typeof sort === \"function\") {\n\t\t\t\t\t\treturn sort(a, ak, b, bk);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (ak === \"Unknown\") {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (bk === \"Unknown\") {\n\t\t\t\t\t\treturn -1;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (sort === \"group\") {\n\t\t\t\t\t\treturn ak.localeCompare(bk);\n\t\t\t\t\t}\n\t\t\t\t\treturn (b?.length ?? 0) - (a?.length ?? 0);\n\t\t\t\t})\n\t\t\t\t.reduce<Record<string, List<K, T>>>((acc, [key, value]) => {\n\t\t\t\t\tif (\n\t\t\t\t\t\tminOccurance > -1 &&\n\t\t\t\t\t\t(value?.length ?? 0) < minOccurance\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst otherKey = lessOccuranceLabel;\n\t\t\t\t\t\tacc[otherKey] =\n\t\t\t\t\t\t\tacc[otherKey] && value\n\t\t\t\t\t\t\t\t? acc[otherKey].merge(value)\n\t\t\t\t\t\t\t\t: value;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tacc[key] = value;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn acc;\n\t\t\t\t}, {});\n\t\t}\n\n\t\treturn groupped;\n\t}\n\n\tfindIndex(item: T) {\n\t\tif (!item?.id) {\n\t\t\treturn -1;\n\t\t}\n\n\t\treturn this.keys().findIndex((key) => key === item.id);\n\t}\n\n\tgetItems() {\n\t\treturn this.items;\n\t}\n\n\ttoJson(tag: MultiTag, options?: ConvertOptions) {\n\t\tconst json = this.toObject(tag, options);\n\n\t\treturn JSON.stringify(json);\n\t}\n\n\ttoObject(tag: MultiTag, options?: ConvertOptions) {\n\t\tconst json: Record<\n\t\t\tstring,\n\t\t\t| string\n\t\t\t| undefined\n\t\t\t| ({ value?: string } & Record<string, unknown>)\n\t\t\t| Array<\n\t\t\t\t\t| string\n\t\t\t\t\t| undefined\n\t\t\t\t\t| ({ value?: string } & Record<string, unknown>)\n\t\t\t >\n\t\t> = {};\n\t\t(this.entries() as Array<[K, T]>).forEach(([_, item]) => {\n\t\t\tconst validTag = getValidTag(tag);\n\n\t\t\tif (json[validTag]) {\n\t\t\t\tif (!Array.isArray(json[validTag])) {\n\t\t\t\t\tjson[validTag] = [json[validTag]];\n\t\t\t\t}\n\n\t\t\t\tjson[validTag].push(\n\t\t\t\t\titem.toObject(validTag as MultiTag | undefined, options)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tjson[validTag] = item.toObject(\n\t\t\t\t\tvalidTag as MultiTag | undefined,\n\t\t\t\t\toptions\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\treturn json;\n\t}\n\n\ttoGedcom(tag: MultiTag, level = 0, options?: ConvertOptions) {\n\t\tconst gedcom = this.toGedcomLines(tag, level, options);\n\n\t\treturn gedcom.join(\"\\n\");\n\t}\n\n\ttoGedcomLines(tag: MultiTag, level = 0, options?: ConvertOptions) {\n\t\tconst gedcom: string[] = [];\n\n\t\t(this.entries() as Array<[K, T]>).forEach(([_, item]) => {\n\t\t\tconst validTag = getValidTag(tag);\n\t\t\tconst validKey = item.id;\n\t\t\tconst validValue = validKey ? validTag : item.exportValue();\n\t\t\tgedcom.push(\n\t\t\t\t`${level} ${validKey || validTag}${\n\t\t\t\t\tvalidValue ? ` ${validValue}` : \"\"\n\t\t\t\t}`\n\t\t\t);\n\t\t\tgedcom.push(\n\t\t\t\t...item.toGedcomLines(\n\t\t\t\t\tvalidTag as MultiTag | undefined,\n\t\t\t\t\tlevel + 1,\n\t\t\t\t\toptions\n\t\t\t\t)\n\t\t\t);\n\t\t});\n\n\t\treturn gedcom;\n\t}\n\n\ttoValue() {\n\t\tconst propList = new List();\n\t\t(this.entries() as Array<[K, T]>).forEach(([key, item]) => {\n\t\t\tpropList.item(key, item?.toValue() as unknown as T);\n\t\t});\n\n\t\treturn propList;\n\t}\n\n\t// @deprecated use get instead\n\ttoProp(tag: MultiTag) {\n\t\treturn this.get(tag);\n\t}\n\n\ttoList() {\n\t\treturn new List().concat(this.items);\n\t}\n\n\ttoValueList() {\n\t\tconst newList = new List();\n\n\t\t(this.values() as Common[]).forEach((value) => {\n\t\t\tvalue.value && newList.item(value.value as IdType, value);\n\t\t});\n\n\t\treturn newList;\n\t}\n}\n","import { get, set, uniqBy, unset } from \"lodash-es\";\n\nimport { ID_GETTER_REG, ID_REG } from \"../constants/constants\";\nimport type {ConvertOptions} from \"../interfaces/common\";\nimport type ICommon from \"../interfaces/common\";\nimport type IObje from \"../interfaces/obje\";\nimport type {Tag, IdType, MultiTag, ObjeKey, ListTag } from \"../types/types\";\n\nimport type {GedComType} from \"./gedcom\";\nimport { List } from \"./list\";\n\n// import GedcomTree from \"../../../utils/parser\";\n\nexport class Common<T = string, I extends IdType = IdType> implements ICommon<\n\tT,\n\tI\n> {\n\tprotected _gedcom?: GedComType;\n\tprotected _value?: T;\n\tprotected _id?: I;\n\tprotected _main?: Common;\n\tprotected _parent?: Common;\n\tprotected _uniqueId?: string | undefined;\n\tprotected _type?: MultiTag;\n\tprotected _refs?: List;\n\n\tisListable = true;\n\trefType?: ListTag;\n\tcloneOf?: string;\n\tclonedBy?: string;\n\n\tconstructor(gedcom?: GedComType, id?: I, main?: Common, parent?: Common) {\n\t\tthis._gedcom = gedcom;\n\t\tthis._main = main;\n\t\tthis._parent = parent;\n\n\t\tthis.initUniqueId();\n\n\t\tif (id) {\n\t\t\tthis._id = id;\n\t\t} else {\n\t\t\tdelete this._id;\n\t\t}\n\t}\n\n\tset type(type: MultiTag | undefined) {\n\t\tif (type) {\n\t\t\tthis.uniqueId = this.uniqueId?.replace(/^[^:]+/, `~${type}`);\n\t\t}\n\t\tthis._type = type;\n\t}\n\n\tget type(): MultiTag | undefined {\n\t\treturn this._type;\n\t}\n\n\tinitUniqueId() {\n\t\tif (this._gedcom) {\n\t\t\tthis.uniqueId = `~Common:${this._gedcom.refcount++}`;\n\t\t}\n\t}\n\n\tset uniqueId(id: string | undefined) {\n\t\tconst currentId = this._uniqueId;\n\t\tif (this._gedcom?.reflist && id) {\n\t\t\tthis._uniqueId = id;\n\t\t\tif (currentId && this._gedcom.reflist[currentId]) {\n\t\t\t\tdelete this._gedcom.reflist[currentId];\n\t\t\t}\n\t\t\tthis._gedcom.reflist[id] = this as Common;\n\t\t}\n\t}\n\n\tget uniqueId(): string | undefined {\n\t\treturn this._uniqueId;\n\t}\n\n\tset id(id: I | undefined) {\n\t\tthis._id = idGetter(id);\n\t}\n\n\tget id() {\n\t\treturn idGetter(this._id);\n\t}\n\n\tset value(value: T | undefined) {\n\t\tthis._value = value;\n\t}\n\n\tget value() {\n\t\treturn this._value;\n\t}\n\n\t/**\n\t * Set the gedcom reference for this object\n\t * @param gedcom - The GedComType to set as the gedcom reference\n\t */\n\tsetGedcom(gedcom: GedComType): void {\n\t\tthis._gedcom = gedcom;\n\t}\n\n\t// avoid to override\n\tget originalValue() {\n\t\treturn this._value;\n\t}\n\n\tget ref(): Common<T, I> | undefined {\n\t\tif (\n\t\t\ttypeof this.value === \"string\" &&\n\t\t\tisId(this.value) &&\n\t\t\tthis.refType\n\t\t) {\n\t\t\treturn this._gedcom?.[getListTag(this.refType!)]?.item(\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\tthis.value as any\n\t\t\t) as Common<T, I> | undefined;\n\t\t}\n\n\t\treturn this as Common<T, I>;\n\t}\n\n\tget main() {\n\t\treturn this._main;\n\t}\n\n\tget parent() {\n\t\treturn this._parent;\n\t}\n\n\taddRef(refNode: Common) {\n\t\tif (\n\t\t\ttypeof refNode.value === \"string\" &&\n\t\t\tisId(refNode.value) &&\n\t\t\trefNode.refType\n\t\t) {\n\t\t\tif (!this._refs) {\n\t\t\t\tthis._refs = new List();\n\t\t\t}\n\n\t\t\tthis._refs.item(refNode.value, refNode);\n\t\t}\n\t}\n\n\tgetRefs() {\n\t\treturn this._refs;\n\t}\n\n\texportValue() {\n\t\treturn this.value;\n\t}\n\n\tremoveValue() {\n\t\tdelete this._value;\n\t}\n\n\tset<T extends Common | List = Common | List>(\n\t\tname: MultiTag,\n\t\tvalue: T | string\n\t) {\n\t\tif (typeof value === \"string\") {\n\t\t\tconst usedValue = createCommon(this._gedcom, undefined, this.main);\n\t\t\tusedValue.value = value as string;\n\n\t\t\tset(this, name, usedValue);\n\t\t} else {\n\t\t\tset(this, name, value);\n\t\t}\n\t\treturn get(this, name) as T | undefined;\n\t}\n\n\tassign<T extends Common | List = Common | List>(\n\t\tname: MultiTag,\n\t\tvalue: T,\n\t\tunique = false\n\t) {\n\t\tlet curValue = this.get<List>(name);\n\t\tif (curValue?.isListable) {\n\t\t\tif (curValue instanceof Common) {\n\t\t\t\tcurValue = new List().concat({ ...[curValue] });\n\n\t\t\t\tthis.set(name, curValue);\n\t\t\t}\n\n\t\t\tconst values = [\n\t\t\t\t...curValue.values(),\n\t\t\t\t...(value instanceof List ? value.values() : [value]),\n\t\t\t];\n\n\t\t\tcurValue.concat({\n\t\t\t\t...(!unique\n\t\t\t\t\t? values\n\t\t\t\t\t: uniqBy(values, (value) =>\n\t\t\t\t\t\t\tvalue instanceof Common ? value?.value : undefined\n\t\t\t\t\t\t)),\n\t\t\t});\n\t\t} else {\n\t\t\tthis.set(name, value);\n\t\t}\n\t\treturn get(this, name) as T | undefined;\n\t}\n\n\tget<T extends Common | List = Common | List>(name: MultiTag) {\n\t\tif (!name.includes(\".\")) {\n\t\t\treturn get(this, name) as T | undefined;\n\t\t}\n\n\t\tconst nameParts = name.split(\".\") as Tag[];\n\t\t// eslint-disable-next-line @typescript-eslint/no-this-alias\n\t\tlet last: T | List | undefined = this as unknown as T;\n\n\t\tfor (const part of nameParts) {\n\t\t\tconst indexPart = Number(part);\n\t\t\tconst itemIndex = part.match(/items\\[(?<itemIndex>\\d+)\\]/)?.groups\n\t\t\t\t?.itemIndex;\n\t\t\tconst itemId = part.match(/items\\[(?<itemId>@[A-Z]+\\d+@)\\]/)?.groups\n\t\t\t\t?.itemId;\n\t\t\tconst usedPart = itemId || itemIndex;\n\t\t\tif (last instanceof List) {\n\t\t\t\tif (!isNaN(indexPart)) {\n\t\t\t\t\tlast = last.index(indexPart) as T | List | undefined;\n\t\t\t\t} else {\n\t\t\t\t\tif (usedPart) {\n\t\t\t\t\t\tlast = last.item(usedPart as IdType) as\n\t\t\t\t\t\t\t| T\n\t\t\t\t\t\t\t| List\n\t\t\t\t\t\t\t| undefined;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlast = last?.index(0)?.get(part) as\n\t\t\t\t\t\t\t| T\n\t\t\t\t\t\t\t| List\n\t\t\t\t\t\t\t| undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst usedIndex = Number(itemIndex ?? indexPart);\n\t\t\t\tif (!isNaN(usedIndex)) {\n\t\t\t\t\tlast = last?.toList().index(usedIndex) as\n\t\t\t\t\t\t| T\n\t\t\t\t\t\t| List\n\t\t\t\t\t\t| undefined;\n\t\t\t\t} else {\n\t\t\t\t\tlast = last?.get((itemId ?? part) as MultiTag) as\n\t\t\t\t\t\t| T\n\t\t\t\t\t\t| List\n\t\t\t\t\t\t| undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!last) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn last as T;\n\t}\n\n\tremove(name: MultiTag) {\n\t\tunset(this, name);\n\t}\n\n\tgetGedcom() {\n\t\treturn this._gedcom;\n\t}\n\n\tgetIf<T extends Common | List = Common | List>(\n\t\tname: MultiTag,\n\t\tcondition: string,\n\t\tname2: MultiTag\n\t) {\n\t\tconst nameParts = name.split(\".\");\n\t\tconst name2Parts = name2.split(\".\");\n\n\t\tif (nameParts.length !== name2Parts.length) {\n\t\t\tthrow new Error(\"Tag pathes must be of the same depth\");\n\t\t}\n\n\t\tif (nameParts.length > 1 && nameParts[0] !== name2Parts[0]) {\n\t\t\tthrow new Error(\"Final tags must be siblings\");\n\t\t}\n\n\t\tconst valueCommon = this.get<T>(name);\n\n\t\tif (valueCommon instanceof Common) {\n\t\t\treturn valueCommon?.toValue() !== condition\n\t\t\t\t? undefined\n\t\t\t\t: this.get<T>(name2);\n\t\t}\n\n\t\tconst valueCommon2 = this.get<T>(name2)?.toList();\n\t\tconst ifList = new List();\n\n\t\tvalueCommon?.forEach((item, key) => {\n\t\t\tconst pair = valueCommon2?.item(key);\n\n\t\t\tifList.item(key, item?.toValue() !== condition ? undefined : pair);\n\t\t});\n\n\t\treturn ifList as T;\n\t}\n\n\ttoString() {\n\t\treturn this.value?.toString() || \"\";\n\t}\n\n\ttoValue() {\n\t\treturn this.value;\n\t}\n\n\ttoProp(tag: MultiTag) {\n\t\tconst prop = this.get(tag);\n\n\t\treturn prop as Common<T, I> | undefined;\n\t}\n\n\ttoList() {\n\t\treturn new List().concat(\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tthis.id ? { [this.id]: this } : ({ ...[this] } as any)\n\t\t);\n\t}\n\n\ttoValueList() {\n\t\treturn new List().concat(\n\t\t\tthis.value\n\t\t\t\t? { [this.value as IdType]: this }\n\t\t\t\t: // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\t({ ...[this] } as any)\n\t\t);\n\t}\n\n\tprivate standardizeObject(tag?: MultiTag, options?: ConvertOptions) {\n\t\tif (\n\t\t\ttag === \"OBJE\" &&\n\t\t\t!options?.original &&\n\t\t\toptions?.obje?.standardize &&\n\t\t\toptions?.obje?.namespace &&\n\t\t\t\"standardizeMedia\" in this\n\t\t) {\n\t\t\tconst standardize = this.standardizeMedia as (\n\t\t\t\tn: string | number,\n\t\t\t\to?: boolean\n\t\t\t) => Common<string, ObjeKey> & IObje;\n\t\t\treturn standardize.call(\n\t\t\t\tthis,\n\t\t\t\toptions.obje.namespace,\n\t\t\t\toptions.obje.override\n\t\t\t);\n\t\t}\n\t}\n\n\ttoJson(tag?: MultiTag, options?: ConvertOptions) {\n\t\tconst json = this.toObject(tag, options);\n\n\t\treturn JSON.stringify(json);\n\t}\n\n\ttoObject(tag?: MultiTag, options?: ConvertOptions) {\n\t\tthis.standardizeObject(tag, options);\n\t\tconst validKeys = getValidKeys(this);\n\t\tlet json: Record<\n\t\t\tstring,\n\t\t\t| string\n\t\t\t| undefined\n\t\t\t| ({ value?: string } & Record<string, unknown>)\n\t\t\t| Array<\n\t\t\t\t\t| string\n\t\t\t\t\t| undefined\n\t\t\t\t\t| ({ value?: string } & Record<string, unknown>)\n\t\t\t >\n\t\t> = {};\n\n\t\tvalidKeys.forEach((key) => {\n\t\t\tif (key === \"id\" && this.id !== undefined) {\n\t\t\t\tjson.id = this.id as string;\n\t\t\t} else if (key === \"_id\" && this._id !== undefined) {\n\t\t\t\tjson.id = this._id as string;\n\t\t\t} else if (key === \"value\" && this.value !== undefined) {\n\t\t\t\tjson.value = this.value as string;\n\t\t\t} else if (key === \"_value\" && this._value !== undefined) {\n\t\t\t\tjson.value = this._value as string;\n\t\t\t} else {\n\t\t\t\tconst validKey = key as MultiTag;\n\t\t\t\tconst prop = this.get(validKey);\n\t\t\t\tif (typeof prop?.toObject === \"function\") {\n\t\t\t\t\tif (prop instanceof Common) {\n\t\t\t\t\t\tjson[validKey] = prop.toObject(validKey, options);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tjson = {\n\t\t\t\t\t\t\t...json,\n\t\t\t\t\t\t\t...prop.toObject(validKey, options),\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn json;\n\t}\n\n\tmerge(other: Common<T, I>, override = false, avoidKeys: MultiTag[] = []) {\n\t\tif (!other) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst validKeys = getValidKeys(other);\n\n\t\tvalidKeys.forEach((validKey) => {\n\t\t\tif (avoidKeys.includes(validKey as MultiTag)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst current = this.get(validKey as MultiTag);\n\t\t\tconst mergeValue = other.get(validKey as MultiTag);\n\t\t\tif (mergeValue) {\n\t\t\t\tif (current instanceof Common || current instanceof List) {\n\t\t\t\t\tthis.assign(validKey as MultiTag, mergeValue, true);\n\t\t\t\t} else if (\n\t\t\t\t\t!current ||\n\t\t\t\t\t(override && validKey !== \"id\" && validKey !== \"_id\")\n\t\t\t\t) {\n\t\t\t\t\tthis.set(validKey as MultiTag, mergeValue);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn this;\n\t}\n\n\tclone(newId = false, avoidKeys: MultiTag[] = []) {\n\t\tconst ctor = this.constructor as {\n\t\t\tnew (\n\t\t\t\tgedcom?: GedComType,\n\t\t\t\tid?: I,\n\t\t\t\tmain?: Common,\n\t\t\t\tparent?: Common\n\t\t\t): Common<T, I>;\n\t\t};\n\t\tconst instance = new ctor(\n\t\t\tthis._gedcom,\n\t\t\tthis._id,\n\t\t\tthis._main,\n\t\t\tthis._parent\n\t\t);\n\n\t\tif (newId && this._id) {\n\t\t\tinstance.id = `IFT${this._id.replace(/[^0-9]/g, \"\")}` as I;\n\t\t}\n\n\t\tconst cloned = createProxy(instance);\n\t\tcloned.merge(this, true, avoidKeys);\n\n\t\treturn cloned;\n\t}\n\n\t// fromGedcom<T = typeof this>(value: string) {\n\tfromGedcom(_value: string) {\n\t\t// Object.assign(this, GedcomTree.parse(value) as T);\n\t}\n\n\ttoGedcom(tag?: MultiTag, level = 0, options?: ConvertOptions) {\n\t\tconst gedcom = this.toGedcomLines(tag, level, options);\n\n\t\treturn gedcom.join(\"\\n\");\n\t}\n\n\ttoGedcomLines(tag?: MultiTag, level = 0, options?: ConvertOptions) {\n\t\tthis.standardizeObject(tag, options);\n\t\tconst validKeys = getValidKeys(this);\n\t\tconst gedcom: string[] = [];\n\n\t\tvalidKeys.forEach((key) => {\n\t\t\tconst validKey = key as MultiTag;\n\t\t\tconst prop = this.get(validKey);\n\t\t\tif (typeof prop?.toGedcomLines === \"function\") {\n\t\t\t\tif (prop instanceof Common) {\n\t\t\t\t\tconst value = prop.exportValue() as string | undefined;\n\t\t\t\t\tgedcom.push(\n\t\t\t\t\t\t`${level} ${validKey}${value ? ` ${value}` : \"\"}`\n\t\t\t\t\t);\n\t\t\t\t\tgedcom.push(\n\t\t\t\t\t\t...prop.toGedcomLines(validKey, level + 1, options)\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tgedcom.push(\n\t\t\t\t\t\t...prop.toGedcomLines(validKey, level, options)\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn gedcom;\n\t}\n\n\tisGenoPro() {\n\t\tconst head = get(this, \"HEAD\") || get(this.getGedcom(), \"HEAD\");\n\t\tconst sour = get(head, \"SOUR.value\") as string | undefined;\n\n\t\treturn !!sour?.toLowerCase()?.startsWith(\"genopro\");\n\t}\n\n\tisAhnenblatt() {\n\t\tconst head = get(this, \"HEAD\") || get(this.getGedcom(), \"HEAD\");\n\t\tconst sour = get(head, \"SOUR.value\") as string | undefined;\n\n\t\treturn !!sour?.toLowerCase()?.startsWith(\"ahnenblatt\");\n\t}\n\n\tisGeni() {\n\t\tconst head = get(this, \"HEAD\") || get(this.getGedcom(), \"HEAD\");\n\t\tconst sour = get(head, \"SOUR.value\") as string | undefined;\n\n\t\treturn !!sour?.toLowerCase()?.startsWith(\"geni\");\n\t}\n\n\tisAncestry() {\n\t\tconst head = get(this, \"HEAD\") || get(this.getGedcom(), \"HEAD\");\n\t\tconst sour = get(head, \"SOUR.value\") as string | undefined;\n\n\t\treturn !!sour?.toLowerCase()?.startsWith(\"ancestry\");\n\t}\n\n\tisMyHeritage() {\n\t\tconst head = get(this, \"HEAD\") || get(this.getGedcom(), \"HEAD\");\n\t\tconst sour = get(head, \"SOUR.value\") as string | undefined;\n\n\t\treturn !!sour?.toLowerCase()?.startsWith(\"myheritage\");\n\t}\n\n\tisFamilySearch() {\n\t\tconst head = get(this, \"HEAD\") || get(this.getGedcom(), \"HEAD\");\n\t\tconst sourName = get(head, \"SOUR.NAME.value\") as string | undefined;\n\n\t\treturn sourName === \"FamilySearch API\";\n\t}\n\n\tgetAncestryTreeId() {\n\t\tconst path = \"HEAD.SOUR._TREE.RIN.value\";\n\t\treturn (get(this, path) || get(this.getGedcom(), path)) as\n\t\t\t| string\n\t\t\t| undefined;\n\t}\n\n\tgetMyHeritageTreeId() {\n\t\tconst path = \"HEAD._EXPORTED_FROM_SITE_ID.value\";\n\t\treturn (get(this, path) || get(this.getGedcom(), path)) as\n\t\t\t| string\n\t\t\t| undefined;\n\t}\n\n\tgetTreeId() {\n\t\tif (this?.isAncestry()) {\n\t\t\treturn this.getAncestryTreeId();\n\t\t}\n\n\t\tif (this?.isMyHeritage()) {\n\t\t\treturn this.getMyHeritageTreeId();\n\t\t}\n\t}\n\n\tgetAncestryTreeName() {\n\t\tconst path = \"HEAD.SOUR._TREE.value\";\n\t\treturn (get(this, path) || get(this.getGedcom(), path)) as\n\t\t\t| string\n\t\t\t| undefined;\n\t}\n\n\tgetMyHeritageTreeName() {\n\t\tconst path = \"HEAD.FILE.value\";\n\n\t\tconst treeDetails = (get(this, path) || get(this.getGedcom(), path)) as\n\t\t\t| string\n\t\t\t| undefined;\n\n\t\treturn treeDetails?.match(\n\t\t\t/Exported by MyHeritage.com from (?<tree>.+) in.+$/\n\t\t)?.groups?.tree;\n\t}\n\n\tgetTreeName() {\n\t\tif (this?.isAncestry()) {\n\t\t\treturn this.getAncestryTreeName();\n\t\t}\n\n\t\tif (this?.isMyHeritage()) {\n\t\t\treturn this.getMyHeritageTreeName();\n\t\t}\n\t}\n}\n\nexport type ProxyOriginal<T extends Common> = T & { unwrapped: T };\nexport const createProxy = <T extends Common>(target: T): T => {\n\treturn new Proxy<T>(target, {\n\t\tget(t, prop: string | symbol, receiver) {\n\t\t\tif (prop === \"unwrapped\") {\n\t\t\t\treturn target;\n\t\t\t}\n\n\t\t\tif (prop in t) {\n\t\t\t\treturn Reflect.get(t, prop, receiver);\n\t\t\t}\n\t\t\tif (!isOnlyMainProp(prop)) {\n\t\t\t\tconst ref = t.ref as T;\n\t\t\t\tif (ref && prop in ref) {\n\t\t\t\t\treturn Reflect.get(ref, prop, receiver);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t});\n};\n\nexport const createCommon = (\n\tgedcom?: GedComType,\n\tid?: IdType,\n\tmain?: Common,\n\tparent?: Common\n): ProxyOriginal<Common> => {\n\treturn createProxy(\n\t\tnew Common(gedcom, id, main, parent)\n\t) as unknown as ProxyOriginal<Common>;\n};\n\nexport const isOnlyMainProp = (\n\tkey: string | symbol\n): key is MultiTag | \"_value\" | \"value\" => {\n\treturn (\n\t\tkey === \"_gedcom\" ||\n\t\tkey === \"_main\" ||\n\t\tkey === \"_parent\" ||\n\t\tkey === \"_uniqueId\" ||\n\t\tkey === \"_type\" ||\n\t\tkey === \"_refs\" ||\n\t\tkey === \"id\" ||\n\t\tkey === \"_id\"\n\t);\n};\n\nexport const isValidKey = <T>(\n\tcommon: Common<T>,\n\tkey: string | symbol\n): key is MultiTag | \"_value\" | \"value\" | \"id\" | \"_id\" => {\n\tconst prop = get(common, key);\n\treturn (\n\t\tkey !== \"_gedcom\" &&\n\t\tkey !== \"_main\" &&\n\t\tkey !== \"_parent\" &&\n\t\tkey !== \"_uniqueId\" &&\n\t\tkey !== \"_refs\" &&\n\t\tkey !== \"_type\" &&\n\t\t(key === \"id\" ||\n\t\t\tkey === \"_id\" ||\n\t\t\tkey === \"value\" ||\n\t\t\tkey === \"_value\" ||\n\t\t\tprop instanceof Common ||\n\t\t\tprop instanceof List)\n\t);\n};\n\nexport const getValidKeys = <T>(common: Common<T>) => {\n\treturn Object.keys(common).filter((key) => {\n\t\treturn isValidKey(common, key);\n\t}) as Array<MultiTag | \"_value\" | \"value\" | \"id\" | \"_id\">;\n};\n\nexport const getValidTag = (tag: string) => {\n\treturn tag.replace(/^@@/, \"\");\n};\n\nexport const getListTag = (tag: string) => {\n\treturn `@@${tag}` as ListTag;\n};\n\nexport const getValidKey = (tag: string, id: string) => {\n\treturn `${id} ${getValidTag(tag)}`;\n};\n\nexport const isId = (string: string): string is IdType => {\n\treturn ID_REG.test(string);\n};\n\nexport const idGetter = <T extends IdType>(id?: T) => {\n\tif (id === undefined) {\n\t\treturn undefined;\n\t}\n\tlet newId = `${id}` as T;\n\n\tconst parts = newId?.match(ID_GETTER_REG)?.groups as {\n\t\tat?: string;\n\t\tletter?: string;\n\t} | null;\n\tif (!parts?.at && !parts?.letter) {\n\t\tnewId = `@U${newId}` as T;\n\t} else if (!parts.at) {\n\t\tnewId = `@${newId}` as T;\n\t} else if (!parts.letter) {\n\t\tnewId = newId.replace(/^@/, \"@U\") as T;\n\t}\n\tif (!newId.endsWith(\"@\")) {\n\t\tnewId = `${newId}@` as T;\n\t}\n\treturn newId;\n};\n","import type { Locale } from \"date-fns\";\n\n/**\n * Date locale provider function type.\n * Returns the date-fns Locale object for the current language.\n */\nexport type DateLocaleProvider = () => Locale | undefined;\n\n/**\n * Default date locale provider (returns undefined, date-fns will use default behavior)\n */\nlet dateLocaleProvider: DateLocaleProvider = () => undefined;\n\n/**\n * Set a custom date locale provider.\n * This allows the main project or external projects to override the date locale logic.\n *\n * @example\n * ```typescript\n * import { setDateLocaleProvider } from '@treeviz/gedcom-parser/factories/date-locale-factory';\n * import { getDateFnsLocale } from './constants/ui-options';\n *\n * setDateLocaleProvider(getDateFnsLocale);\n * ```\n */\nexport const setDateLocaleProvider = (provider: DateLocaleProvider) => {\n dateLocaleProvider = provider;\n};\n\n/**\n * Get the current date locale.\n * Used internally by the Date class for formatting dates.\n */\nexport const getDateLocale = (): Locale | undefined => {\n const result = dateLocaleProvider();\n return result;\n};\n\n/**\n * Reset to the default date locale provider.\n * Useful for testing or when switching between projects.\n */\nexport const resetDateLocaleProvider = () => {\n dateLocaleProvider = () => undefined;\n};\n","/**\n * I18n provider factory for pluggable translation\n * This allows the main project to inject its i18n instance\n */\n\n/**\n * I18n provider function type.\n * Mimics the i18next.t() function signature.\n */\nexport type I18nProvider = (\n\tkey: string,\n\toptions?: Record<string, unknown>\n) => string;\n\n/**\n * Default i18n provider (returns the key itself as fallback)\n */\nlet i18nProvider: I18nProvider = (key: string) => key;\n\n/**\n * Set a custom i18n provider.\n * This allows the main project to inject its i18n translation function.\n *\n * @example\n * ```typescript\n * import { setI18nProvider } from '@treeviz/gedcom-parser/factories/i18n-factory';\n * import i18n from './translation/i18n';\n *\n * setI18nProvider((key, options) => i18n.t(key, options));\n * ```\n */\nexport const setI18nProvider = (provider: I18nProvider) => {\n\ti18nProvider = provider;\n};\n\n/**\n * Get the current i18n provider.\n * Used internally for translations.\n */\nexport const getI18n = (): I18nProvider => {\n\treturn i18nProvider;\n};\n\n/**\n * Reset to the default i18n provider.\n * Useful for testing.\n */\nexport const resetI18nProvider = () => {\n\ti18nProvider = (key: string) => key;\n};\n\n/**\n * Helper object that mimics i18next interface\n * Usage: i18n.t(key, options)\n */\nexport const i18n = {\n\tt: (key: string, options?: Record<string, unknown>) =>\n\t\ti18nProvider(key, options),\n};\n","export { default as hu } from \"./kinship-translator.hu\";\nexport { default as en } from \"./kinship-translator.en\";\nexport { default as de } from \"./kinship-translator.de\";\nexport { default as fr } from \"./kinship-translator.fr\";\nexport { default as es } from \"./kinship-translator.es\";\n","import {\n\t\n\t\n\tRelationType,\n\tPartnerType\n} from \"../types/types\";\nimport type {RequiredFilter, Filter} from \"../types/types\";\n\nexport const EVERY: Filter = {};\n\nexport const FEMALE: Filter = {\n\tSEX: \"F\",\n};\n\nexport const MALE: Filter = {\n\tSEX: \"M\",\n};\n\nexport const ADOPTED: RequiredFilter<\"PEDI\", RelationType> = {\n\tPEDI: RelationType.ADOPTED,\n};\n\nexport const BIRTH: RequiredFilter<\"PEDI\", RelationType> = {\n\tPEDI: RelationType.BIRTH,\n};\n\nexport const FOSTER: RequiredFilter<\"PEDI\", RelationType> = {\n\tPEDI: RelationType.FOSTER,\n};\n\nexport const SEALING: RequiredFilter<\"PEDI\", RelationType> = {\n\tPEDI: RelationType.SEALING,\n};\n\nexport const STEP: RequiredFilter<\"PEDI\", RelationType> = {\n\tPEDI: RelationType.STEP,\n};\n\nexport const BIOLOGICAL: RequiredFilter<\"PEDI\", RelationType> = {\n\tPEDI: RelationType.BIOLOGICAL,\n};\n\nexport const FRIEND: RequiredFilter<\"PART\", PartnerType> = {\n\tPART: PartnerType.FRIEND,\n};\n\nexport const OTHER: RequiredFilter<\"PART\", PartnerType> = {\n\tPART: PartnerType.OTHER,\n};\n\nexport const PARTNER: RequiredFilter<\"PART\", PartnerType> = {\n\tPART: PartnerType.PARTNER,\n};\n\nexport const SINGLE: RequiredFilter<\"PART\", PartnerType> = {\n\tPART: PartnerType.SINGLE,\n};\n\nexport const SPOUSE: RequiredFilter<\"PART\", PartnerType> = {\n\tPART: PartnerType.SPOUSE,\n};\n\nexport const UNKOWN: RequiredFilter<\"PART\", PartnerType> = {\n\tPART: PartnerType.UNKOWN,\n};\n","import type {FamType} from \"../classes/fam\";\nimport type {IndiType} from \"../classes/indi\";\nimport type {IndiKey} from \"../types/types\";\n\nexport const getFamilyWith = (\n\tperson1: IndiType,\n\tperson2?: IndiKey,\n\tfamType: \"FAMS\" | \"FAMC\" = \"FAMS\"\n) => {\n\treturn person1\n\t\t?.get(famType)\n\t\t?.toValueList()\n\t\t.find((fam) => {\n\t\t\tconst family = fam as FamType | undefined;\n\t\t\treturn (\n\t\t\t\tfamType === \"FAMC\" ||\n\t\t\t\tfamily?.HUSB?.value === person2 ||\n\t\t\t\tfamily?.WIFE?.value === person2\n\t\t\t);\n\t\t}) as FamType | undefined;\n};\n","import { isCommonDate } from \"../classes/date\";\nimport type {IndiType} from \"../classes/indi\";\nimport type IEventDetailStructure from \"../structures/event-detail-structure\";\nimport type {OrderIterator, Order, IndiKey, NameOrder} from \"../types/types\";\nimport { getFamilyWith } from \"../utils/get-family-with\";\n\nexport const DEFAULT: Order = {};\n\nexport const BIRTH_ASC: Order = {\n\t\"BIRT.DATE\": {\n\t\tdirection: \"ASC\",\n\t\tgetter: (value, raw) => {\n\t\t\tif (isCommonDate(raw) && raw.rawValue) {\n\t\t\t\treturn raw.rawValue.getTime();\n\t\t\t}\n\t\t\treturn new Date(value as string).getTime();\n\t\t},\n\t},\n};\n\nexport const BIRTH_DESC: Order = {\n\t\"BIRT.DATE\": {\n\t\tdirection: \"DESC\",\n\t\tgetter: (value, raw) => {\n\t\t\tif (isCommonDate(raw) && raw.rawValue) {\n\t\t\t\treturn raw.rawValue.getTime();\n\t\t\t}\n\t\t\treturn new Date(value as string).getTime();\n\t\t},\n\t},\n};\n\nexport const DEATH_ASC: Order = {\n\t\"DEAT.DATE\": {\n\t\tdirection: \"ASC\",\n\t\tgetter: (value, raw) => {\n\t\t\tif (isCommonDate(raw) && raw.rawValue) {\n\t\t\t\treturn raw.rawValue.getTime();\n\t\t\t}\n\t\t\treturn new Date(value as string).getTime();\n\t\t},\n\t},\n};\n\nexport const DEATH_DESC: Order = {\n\t\"DEAT.DATE\": {\n\t\tdirection: \"DESC\",\n\t\tgetter: (value, raw) => {\n\t\t\tif (isCommonDate(raw) && raw.rawValue) {\n\t\t\t\treturn raw.rawValue.getTime();\n\t\t\t}\n\t\t\treturn new Date(value as string).getTime();\n\t\t},\n\t},\n};\n\nexport const DATE_ASC: Order = {\n\tDATE: {\n\t\tdirection: \"ASC\",\n\t\tgetter: (value, raw) => {\n\t\t\tif (isCommonDate(raw) && raw.rawValue) {\n\t\t\t\treturn raw.rawValue.getTime();\n\t\t\t}\n\t\t\treturn new Date(value as string).getTime();\n\t\t},\n\t},\n};\n\nexport const DATE_DESC: Order = {\n\tDATE: {\n\t\tdirection: \"DESC\",\n\t\tgetter: (value, raw) => {\n\t\t\tif (isCommonDate(raw) && raw.rawValue) {\n\t\t\t\treturn raw.rawValue.getTime();\n\t\t\t}\n\t\t\treturn new Date(value as string).getTime();\n\t\t},\n\t},\n};\n\nconst chars = [\n\t\"a\",\n\t\"à\",\n\t\"á\",\n\t\"â\",\n\t\"ä\",\n\t\"æ\",\n\t\"ã\",\n\t\"å\",\n\t\"ā\",\n\t\"b\",\n\t\"c\",\n\t\"ç\",\n\t\"ć\",\n\t\"č\",\n\t\"cs\",\n\t\"d\",\n\t\"dz\",\n\t\"dzs\",\n\t\"e\",\n\t\"è\",\n\t\"é\",\n\t\"ê\",\n\t\"ë\",\n\t\"ē\",\n\t\"ė\",\n\t\"ę\",\n\t\"f\",\n\t\"g\",\n\t\"gy\",\n\t\"h\",\n\t\"i\",\n\t\"î\",\n\t\"ï\",\n\t\"í\",\n\t\"ī\",\n\t\"į\",\n\t\"ì\",\n\t\"j\",\n\t\"k\",\n\t\"l\",\n\t\"ł\",\n\t\"ly\",\n\t\"m\",\n\t\"n\",\n\t\"ñ\",\n\t\"ń\",\n\t\"ny\",\n\t\"o\",\n\t\"ó\",\n\t\"ö\",\n\t\"ő\",\n\t\"ô\",\n\t\"ò\",\n\t\"õ\",\n\t\"œ\",\n\t\"ø\",\n\t\"ō\",\n\t\"p\",\n\t\"q\",\n\t\"r\",\n\t\"s\",\n\t\"ś\",\n\t\"š\",\n\t\"ß\",\n\t\"sz\",\n\t\"t\",\n\t\"ty\",\n\t\"u\",\n\t\"ú\",\n\t\"ü\",\n\t\"ű\",\n\t\"û\",\n\t\"ù\",\n\t\"ū\",\n\t\"v\",\n\t\"w\",\n\t\"x\",\n\t\"y\",\n\t\"z\",\n\t\"zs\",\n];\nconst alphabets = chars.reduce<Record<string, number>>((acc, curr, idx) => {\n\tacc[curr] = idx;\n\treturn acc;\n}, {});\n\nconst convertAlphabet = (value: string) => {\n\treturn value\n\t\t.toLowerCase()\n\t\t.replace(/(dzs|cs|dz|gy|ly|ny|sz|ty|zs|.)/gi, (_, m) => {\n\t\t\tconst code = alphabets[m];\n\t\t\treturn code !== undefined\n\t\t\t\t? `${`${code}`.padStart(`${chars.length}`.length, \"0\")}`\n\t\t\t\t: m;\n\t\t});\n};\n\nconst sortValue = (valueA: string, valueB: string) => {\n\treturn convertAlphabet(valueA).localeCompare(convertAlphabet(valueB));\n};\n\nexport const getNameDesc: (\n\tnameOrder?: NameOrder\n) => OrderIterator<IndiType, IndiKey> =\n\t(nameOrder: NameOrder = \"first-last\") =>\n\t(itemA, _keyA, itemB, _keyB) => {\n\t\tconst valueA =\n\t\t\tnameOrder === \"first-last\"\n\t\t\t\t? [itemA.NAME?.GIVN || \"\", itemA.NAME?.SURN || \"\"]\n\t\t\t\t: [itemA.NAME?.SURN || \"\", itemA.NAME?.GIVN || \"\"];\n\t\tconst valueB =\n\t\t\tnameOrder === \"first-last\"\n\t\t\t\t? [itemB.NAME?.GIVN || \"\", itemB.NAME?.SURN || \"\"]\n\t\t\t\t: [itemB.NAME?.SURN || \"\", itemB.NAME?.GIVN || \"\"];\n\n\t\treturn -sortValue(\n\t\t\tvalueA.filter(Boolean).join(\" \"),\n\t\t\tvalueB.filter(Boolean).join(\" \")\n\t\t);\n\t};\n\nexport const getNameAsc: (\n\tnameOrder?: NameOrder\n) => OrderIterator<IndiType, IndiKey> =\n\t(nameOrder: NameOrder = \"first-last\") =>\n\t(itemA, _keyA, itemB, _keyB) => {\n\t\tconst valueA =\n\t\t\tnameOrder === \"first-last\"\n\t\t\t\t? [itemA.NAME?.GIVN || \"\", itemA.NAME?.SURN || \"\"]\n\t\t\t\t: [itemA.NAME?.SURN || \"\", itemA.NAME?.GIVN || \"\"];\n\t\tconst valueB =\n\t\t\tnameOrder === \"first-last\"\n\t\t\t\t? [itemB.NAME?.GIVN || \"\", itemB.NAME?.SURN || \"\"]\n\t\t\t\t: [itemB.NAME?.SURN || \"\", itemB.NAME?.GIVN || \"\"];\n\n\t\treturn sortValue(\n\t\t\tvalueA.filter(Boolean).join(\" \"),\n\t\t\tvalueB.filter(Boolean).join(\" \")\n\t\t);\n\t};\n\nexport const getBirthAsc: OrderIterator<IndiType, IndiKey> = (\n\titemA,\n\t_keyA,\n\titemB,\n\t_keyB\n) => {\n\tconst birthA = itemA?.BIRT?.toList().index(0) as\n\t\t| IEventDetailStructure\n\t\t| undefined;\n\tconst birthB = itemB?.BIRT?.toList().index(0) as\n\t\t| IEventDetailStructure\n\t\t| undefined;\n\n\tconst valueA = birthA?.DATE?.rawValue;\n\tconst valueB = birthB?.DATE?.rawValue;\n\n\tif (valueA?.getTime() === valueB?.getTime()) {\n\t\treturn 0;\n\t}\n\n\tif (!valueA || (valueB && valueA > valueB)) {\n\t\treturn 1;\n\t}\n\n\treturn -1;\n};\n\nexport const getNameAscAndBirth: (\n\tnameOrder?: NameOrder\n) => OrderIterator<IndiType, IndiKey> =\n\t(nameOrder: NameOrder = \"first-last\") =>\n\t(itemA, keyA, itemB, keyB) => {\n\t\tconst nameSort = getNameAsc(nameOrder)(itemA, keyA, itemB, keyB);\n\n\t\tif (nameSort !== 0) {\n\t\t\treturn nameSort;\n\t\t}\n\n\t\treturn getBirthAsc(itemA, keyA, itemB, keyB);\n\t};\n\nexport const getMarriageAsc: (\n\tperson?: IndiKey,\n\tfamType?: \"FAMS\" | \"FAMC\"\n) => OrderIterator<IndiType, IndiKey> =\n\t(person?: IndiKey, famType: \"FAMS\" | \"FAMC\" = \"FAMS\") =>\n\t(itemA, _keyA, itemB, _keyB) => {\n\t\tif (!person && famType === \"FAMS\") {\n\t\t\treturn 0;\n\t\t}\n\n\t\tconst familyA = getFamilyWith(itemA, person);\n\t\tconst familyB = getFamilyWith(itemB, person);\n\n\t\tconst marriageA = familyA?.MARR?.DATE?.rawValue;\n\t\tconst marriageB = familyB?.MARR?.DATE?.rawValue;\n\n\t\tif (marriageA?.getTime() === marriageB?.getTime()) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tif (!marriageA || (marriageB && marriageA > marriageB)) {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn -1;\n\t};\n\nexport const getMarriageAscAndChildBirth: (\n\tperson?: IndiKey\n) => OrderIterator<IndiType, IndiKey> =\n\t(person?: IndiKey) => (itemA, keyA, itemB, keyB) => {\n\t\tconst marriageSort = getMarriageAsc(person)(itemA, keyA, itemB, keyB);\n\n\t\tif (marriageSort !== 0) {\n\t\t\treturn marriageSort;\n\t\t}\n\n\t\tconst familyA = getFamilyWith(itemA, person);\n\t\tconst familyB = getFamilyWith(itemB, person);\n\n\t\tconst childA = familyA?.getChildren().orderBy(BIRTH_ASC).index(0);\n\t\tconst childB = familyB?.getChildren().orderBy(BIRTH_ASC).index(0);\n\n\t\treturn getBirthAsc(childA!, keyA, childB!, keyB);\n\t};\n\nexport const getMarriageAscAndBirth: (\n\tperson?: IndiKey\n) => OrderIterator<IndiType, IndiKey> =\n\t(person?: IndiKey) => (itemA, keyA, itemB, keyB) => {\n\t\tconst marriageSort = getMarriageAsc(person, \"FAMC\")(\n\t\t\titemA,\n\t\t\tkeyA,\n\t\t\titemB,\n\t\t\tkeyB\n\t\t);\n\n\t\tif (marriageSort !== 0) {\n\t\t\treturn marriageSort;\n\t\t}\n\n\t\treturn getBirthAsc(itemA, keyA, itemB, keyB);\n\t};\n","import type { IndiType } from \"../classes/indi\";\nimport type { MultiTag } from \"../types/types\";\n\nexport const getAllProp = <T>(indi?: IndiType, prop?: MultiTag) => {\n\treturn ((prop &&\n\t\t(indi?.get(prop)?.toList().values() ?? []).filter(Boolean)) ||\n\t\t[]) as T[];\n};\n","import { createCommonDate } from \"../classes/date\";\nimport type { CommonDate } from \"../classes/date\";\nimport type {FamType} from \"../classes/fam\";\nimport type {IndiType} from \"../classes/indi\";\nimport { i18n } from \"../factories/i18n-factory\";\nimport type IDateStructure from \"../structures/date\";\nimport type IEventDetailStructure from \"../structures/event-detail-structure\";\nimport type { IndiKey } from \"../types/types\";\nimport { getAllProp } from \"./get-all-prop\";\n\nexport const ACCEPTED_DATE_FORMATS = [\n\t\"yyyy.MM.dd.\",\n\t\"yyyy-MM-dd\",\n\t\"MM/dd/yyyy\",\n];\nexport const ACCEPTED_DATE_FORMATS_REGEX = new RegExp(\n\t`(${ACCEPTED_DATE_FORMATS.map((acceptedFormat) =>\n\t\tacceptedFormat.replace(/[^.\\-/]/g, \"\\\\d\")\n\t).join(\"|\")})`,\n\t\"gi\"\n);\nexport const commonDateFormatter = (\n\tdate?: IDateStructure[\"DATE\"],\n\tformat = \"yyyy\",\n\tprefix = \"\"\n) => {\n\tconst formattedDate = date?.toValue(format);\n\tif (!formattedDate) {\n\t\treturn undefined;\n\t}\n\n\treturn `${prefix}${formattedDate}`.trim();\n};\n\nexport const noteDateFormatter = (\n\tdate?: IDateStructure[\"DATE\"],\n\tformat = \"yyyy\",\n\tprefix = \"\",\n\tshortNote = true,\n\tshowNote = true\n) => {\n\tconst rawDate = commonDateFormatter(date, format, \"\");\n\n\tif (!rawDate) {\n\t\treturn undefined;\n\t}\n\n\tconst note = date?.toNote(shortNote) ?? \"\";\n\n\treturn `${prefix}${\n\t\tnote && showNote\n\t\t\t? i18n.t(`${note} {{date}}`, { date: rawDate })\n\t\t\t: rawDate\n\t}`;\n};\n\nexport const marriageDateFormatter = (\n\tfam?: FamType,\n\tshowDays = false,\n\tshowPlaces = false,\n\tshortNote = true,\n\tshowNote = true,\n\tshowDisplayTextIfNoDate = true,\n\tshowAllEvents = false,\n\tdateFormatPattern?: string\n) => {\n\t// Determine the format to use for full dates\n\tconst fullDateFormat = dateFormatPattern ?? i18n.t(\"dateFormat\");\n\n\tconst marriageDates: Array<CommonDate | undefined> = [];\n\tconst marriagePlaces: Array<string | undefined> = [];\n\tconst marriages = (fam?.toValueList().values() ?? []).flatMap((fam) => {\n\t\tconst family = fam as FamType | undefined;\n\n\t\t// Get all MARR events for this family\n\t\tconst marrEvents = (family?.MARR?.toList().values() ?? []).filter(\n\t\t\tBoolean\n\t\t);\n\n\t\tif (marrEvents.length === 0) {\n\t\t\t// Handle displayText for families without MARR events\n\t\t\tconst displayText = (family?.get(\"DISPLAYTEXT\")?.toValue() ??\n\t\t\t\t\"\") as string;\n\t\t\tif (showDisplayTextIfNoDate && displayText) {\n\t\t\t\tconst displayDate = displayText.match(\n\t\t\t\t\tACCEPTED_DATE_FORMATS_REGEX\n\t\t\t\t)?.[0] as string | undefined;\n\t\t\t\tif (displayDate) {\n\t\t\t\t\tmarriagePlaces.push(displayText.replace(displayDate, \"\"));\n\t\t\t\t\tconst marriageDate = createCommonDate(\n\t\t\t\t\t\tfam?.getGedcom(),\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tfamily\n\t\t\t\t\t);\n\t\t\t\t\tmarriageDate.value = displayDate;\n\t\t\t\t\tmarriageDates.push(marriageDate);\n\t\t\t\t} else {\n\t\t\t\t\tmarriagePlaces.push(displayText);\n\t\t\t\t\tmarriageDates.push(undefined);\n\t\t\t\t\treturn [\"∞\"];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [];\n\t\t}\n\n\t\t// Process all MARR events\n\t\tconst eventsToProcess = showAllEvents\n\t\t\t? marrEvents\n\t\t\t: marrEvents.slice(0, 1);\n\t\treturn eventsToProcess.map((marrEvent) => {\n\t\t\tconst marriageEventDetail = marrEvent as\n\t\t\t\t| IEventDetailStructure\n\t\t\t\t| undefined;\n\t\t\tconst marriageDate = marriageEventDetail?.DATE;\n\t\t\tconst marriagePlace = showPlaces\n\t\t\t\t? marriageEventDetail?.PLAC?.value\n\t\t\t\t: undefined;\n\n\t\t\tmarriagePlaces.push(marriagePlace);\n\t\t\tmarriageDates.push(marriageDate);\n\n\t\t\tconst formattedDate = noteDateFormatter(\n\t\t\t\tmarriageDate,\n\t\t\t\tshowDays ? fullDateFormat : \"yyyy\",\n\t\t\t\t\"∞\",\n\t\t\t\tshortNote,\n\t\t\t\tshowNote\n\t\t\t);\n\n\t\t\treturn formattedDate ? formattedDate : undefined;\n\t\t});\n\t}) as Array<string | undefined>;\n\n\tconst marriageArray = marriages.length\n\t\t? (marriages.filter(Boolean) as string[])\n\t\t: [];\n\tconst datesArray = marriageArray.filter(Boolean);\n\n\tconst placesArray = marriagePlaces.filter(Boolean);\n\n\tconst dates = datesArray.join(\" \").trim();\n\n\treturn {\n\t\trawArray: marriageDates,\n\t\tinArray: datesArray,\n\t\tinOrder: dates,\n\t\tplaces: placesArray,\n\t\tmarriage: marriageArray,\n\t\t...(showPlaces\n\t\t\t? {\n\t\t\t\t\tmarriages,\n\t\t\t\t\tmarriagePlaces,\n\t\t\t\t}\n\t\t\t: {}),\n\t};\n};\n\nexport const dateFormatter = (\n\tindi?: IndiType,\n\tshowMarriages = false,\n\tshowDays = false,\n\tshowPlaces = false,\n\tshortNote = true,\n\tshowNote = true,\n\tisOnStage?: (key: IndiKey) => boolean,\n\tshowAllEvents = false,\n\tdateFormatPattern?: string\n) => {\n\t// Determine the format to use for full dates\n\tconst fullDateFormat = dateFormatPattern ?? i18n.t(\"dateFormat\");\n\n\t// Get all birth events\n\tconst birthEvents = getAllProp<IEventDetailStructure>(indi, \"BIRT\");\n\tconst firstBirthValue = birthEvents[0];\n\n\t// Get all death events\n\tconst deathEvents = getAllProp<IEventDetailStructure>(indi, \"DEAT\");\n\tconst firstDeathValue = deathEvents[0];\n\n\tconst birth = commonDateFormatter(\n\t\tfirstBirthValue?.DATE,\n\t\tshowDays ? fullDateFormat : \"yyyy\"\n\t) as string | undefined;\n\tconst birthPlace = showPlaces ? firstBirthValue?.PLAC?.value : undefined;\n\tconst death = commonDateFormatter(\n\t\tfirstDeathValue?.DATE,\n\t\tshowDays ? fullDateFormat : \"yyyy\"\n\t) as string | undefined;\n\tconst deathPlace = showPlaces ? firstDeathValue?.PLAC?.value : undefined;\n\tconst marriagePlaces: Array<string | undefined> = [];\n\tconst marriages: (string | undefined)[] = [];\n\n\tif (showMarriages || isOnStage) {\n\t\t(indi?.get(\"FAMS\")?.toValueList().values() ?? []).forEach((fam) => {\n\t\t\tconst famRef = fam?.ref as FamType | undefined;\n\t\t\tif (isOnStage && famRef) {\n\t\t\t\tlet partner: IndiKey | undefined;\n\t\t\t\tif (famRef.HUSB && indi && famRef.HUSB.value === indi.id) {\n\t\t\t\t\tpartner = famRef.WIFE?.value as IndiKey | undefined;\n\t\t\t\t} else if (\n\t\t\t\t\tfamRef.WIFE &&\n\t\t\t\t\tindi &&\n\t\t\t\t\tfamRef.WIFE.value === indi.id\n\t\t\t\t) {\n\t\t\t\t\tpartner = famRef.HUSB?.value as IndiKey | undefined;\n\t\t\t\t}\n\n\t\t\t\tif (partner && isOnStage(partner)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst marriageDates = marriageDateFormatter(\n\t\t\t\tfamRef,\n\t\t\t\tshowDays,\n\t\t\t\tshowPlaces,\n\t\t\t\tshortNote,\n\t\t\t\tshowNote,\n\t\t\t\ttrue,\n\t\t\t\tshowAllEvents,\n\t\t\t\tdateFormatPattern\n\t\t\t);\n\n\t\t\tmarriages.push(...(marriageDates?.marriage ?? []));\n\t\t\tmarriagePlaces.push(...(marriageDates?.marriagePlaces ?? []));\n\t\t});\n\t}\n\n\t// Process all birth events\n\tconst birthStrings: string[] = [];\n\tconst birthPlaces: Array<string | undefined> = [];\n\tconst eventsToProcess = showAllEvents\n\t\t? birthEvents\n\t\t: birthEvents.slice(0, 1);\n\teventsToProcess.forEach((birthEvent) => {\n\t\tconst birthDate = commonDateFormatter(\n\t\t\tbirthEvent?.DATE,\n\t\t\tshowDays ? fullDateFormat : \"yyyy\"\n\t\t) as string | undefined;\n\t\tconst birthEventNote = birthEvent?.DATE?.toNote(shortNote) ?? \"\";\n\t\tconst birthEventPlace = showPlaces\n\t\t\t? birthEvent?.PLAC?.value\n\t\t\t: undefined;\n\n\t\tif (birthDate) {\n\t\t\tbirthStrings.push(\n\t\t\t\t`*${\n\t\t\t\t\tbirthEventNote && showNote\n\t\t\t\t\t\t? i18n.t(`${birthEventNote} {{date}}`, {\n\t\t\t\t\t\t\t\tdate: birthDate,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: birthDate\n\t\t\t\t}`\n\t\t\t);\n\t\t}\n\t\tbirthPlaces.push(birthEventPlace);\n\t});\n\n\t// Process all death events\n\tconst deathStrings: string[] = [];\n\tconst deathPlaces: Array<string | undefined> = [];\n\tconst deathEventsToProcess = showAllEvents\n\t\t? deathEvents\n\t\t: deathEvents.slice(0, 1);\n\tdeathEventsToProcess.forEach((deathEvent) => {\n\t\tconst deathDate = commonDateFormatter(\n\t\t\tdeathEvent?.DATE,\n\t\t\tshowDays ? fullDateFormat : \"yyyy\"\n\t\t) as string | undefined;\n\t\tconst deathEventNote = deathEvent?.DATE?.toNote(shortNote) ?? \"\";\n\t\tconst deathEventPlace = showPlaces\n\t\t\t? deathEvent?.PLAC?.value\n\t\t\t: undefined;\n\n\t\tif (deathDate) {\n\t\t\tdeathStrings.push(\n\t\t\t\t`†${\n\t\t\t\t\tdeathEventNote && showNote\n\t\t\t\t\t\t? i18n.t(`${deathEventNote} {{date}}`, {\n\t\t\t\t\t\t\t\tdate: deathDate,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: deathDate\n\t\t\t\t}`\n\t\t\t);\n\t\t}\n\t\tdeathPlaces.push(deathEventPlace);\n\t});\n\n\tconst birthString = birthStrings[0] ?? \"\";\n\tconst deathString = deathStrings[0] ?? \"\";\n\tconst marriageArray = marriages.length\n\t\t? (marriages.filter(Boolean) as string[])\n\t\t: [];\n\tconst datesArray =\n\t\t!birth && !death\n\t\t\t? marriageArray\n\t\t\t: [...birthStrings, ...marriageArray, ...deathStrings];\n\n\tconst placesArray =\n\t\t!birth && !death\n\t\t\t? marriagePlaces\n\t\t\t: [...birthPlaces, ...marriagePlaces, ...deathPlaces];\n\n\tconst nonNullDatesArray = datesArray.filter(Boolean);\n\tconst dates = nonNullDatesArray.join(\" \").trim();\n\n\treturn {\n\t\tinArray: nonNullDatesArray,\n\t\tinOrder: dates,\n\t\tplaces: placesArray,\n\t\tbirth: birthString,\n\t\tmarriage: marriageArray,\n\t\tdeath: deathString,\n\t\t...(showPlaces\n\t\t\t? {\n\t\t\t\t\tbirthPlace,\n\t\t\t\t\tdeathPlace,\n\t\t\t\t\t...(showMarriages ? { marriages, marriagePlaces } : {}),\n\t\t\t\t}\n\t\t\t: {}),\n\t\t...(showAllEvents\n\t\t\t? {\n\t\t\t\t\tbirths: birthStrings,\n\t\t\t\t\tbirthPlaces,\n\t\t\t\t\tdeaths: deathStrings,\n\t\t\t\t\tdeathPlaces,\n\t\t\t\t}\n\t\t\t: {}),\n\t};\n};\n","import type { Common } from \"../classes/common\";\nimport { List } from \"../classes/list\";\nimport type { Tag } from \"../types/types\";\n\nexport interface Place {\n\tkey: string;\n\tindex: number;\n\tobj?: Common;\n\tref?: Common;\n\tplace?: string;\n}\n\nexport enum PlaceType {\n\tAll = \"ALL\",\n\tBirth = \"BIRT\",\n\tMarriage = \"MARR\",\n\tDeath = \"DEAT\",\n\tEvents = \"EVEN\",\n\tMilitary = \"_MILT\",\n\tMilitaryId = \"_MILTID\",\n}\n\nexport const getPlaces = (\n\tcommon: Common | List,\n\ttype: PlaceType | Tag | Array<PlaceType | Tag> = [PlaceType.All],\n\tmaxLevel = 1,\n\tlevel = 0,\n\tmainKey?: string\n) => {\n\tconst types = Array.isArray(type) ? type : [type];\n\tconst places: Place[] = [];\n\tif (!common?.toList || level > maxLevel) {\n\t\treturn places;\n\t}\n\n\tconst commonList = common.toList();\n\n\tcommonList.forEach((item, _, index) => {\n\t\t(Object.entries(item) as Array<[string, Common]>).forEach(\n\t\t\t([key, value]) => {\n\t\t\t\tif (!/^[_A-Z0-9]+$/.test(key)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tlevel === 0 &&\n\t\t\t\t\t!types.includes(PlaceType.All) &&\n\t\t\t\t\t((!types.includes(key as PlaceType) &&\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\tPlaceType.Birth,\n\t\t\t\t\t\t\tPlaceType.Marriage,\n\t\t\t\t\t\t\tPlaceType.Death,\n\t\t\t\t\t\t].includes(key as PlaceType)) ||\n\t\t\t\t\t\t(!types.includes(PlaceType.Events) &&\n\t\t\t\t\t\t\t![\n\t\t\t\t\t\t\t\tPlaceType.Birth,\n\t\t\t\t\t\t\t\tPlaceType.Marriage,\n\t\t\t\t\t\t\t\tPlaceType.Death,\n\t\t\t\t\t\t\t\tPlaceType.Military,\n\t\t\t\t\t\t\t\tPlaceType.MilitaryId,\n\t\t\t\t\t\t\t].includes(key as PlaceType)) ||\n\t\t\t\t\t\t(!types.includes(PlaceType.Military) &&\n\t\t\t\t\t\t\t!types.includes(PlaceType.MilitaryId) &&\n\t\t\t\t\t\t\t![\n\t\t\t\t\t\t\t\tPlaceType.Birth,\n\t\t\t\t\t\t\t\tPlaceType.Marriage,\n\t\t\t\t\t\t\t\tPlaceType.Death,\n\t\t\t\t\t\t\t\tPlaceType.Events,\n\t\t\t\t\t\t\t].includes(key as PlaceType)))\n\t\t\t\t) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (key === \"PLAC\") {\n\t\t\t\t\tvalue.toList().forEach((place) => {\n\t\t\t\t\t\tplaces.push({\n\t\t\t\t\t\t\tindex,\n\t\t\t\t\t\t\tplace: place.toValue(),\n\t\t\t\t\t\t\tobj: place,\n\t\t\t\t\t\t\tkey: mainKey || key,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tgetPlaces(\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t\ttypes,\n\t\t\t\t\t\tmaxLevel,\n\t\t\t\t\t\tlevel + 1,\n\t\t\t\t\t\tmainKey || key\n\t\t\t\t\t).forEach((place) => {\n\t\t\t\t\t\tconst usedValue =\n\t\t\t\t\t\t\tvalue instanceof List\n\t\t\t\t\t\t\t\t? value.index(place.index)\n\t\t\t\t\t\t\t\t: value;\n\t\t\t\t\t\tplaces.push({\n\t\t\t\t\t\t\tplace: place.place,\n\t\t\t\t\t\t\tobj: usedValue,\n\t\t\t\t\t\t\tref: place.obj,\n\t\t\t\t\t\t\tindex: place.index,\n\t\t\t\t\t\t\tkey: place.key,\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t});\n\n\treturn places;\n};\n","/* eslint-disable no-console */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nconst debugAll = false;\nconst debugError = true;\n\nexport const implemented = (type: string, ...args: any[]) => {\n\tdebugAll && console.info(`[Implemented] ${type}`, ...args);\n};\n\nexport const notImplemented = (type: string, ...args: any[]) => {\n\t(debugAll || debugError) &&\n\t\tconsole.error(`[Not Implemented] ${type}`, ...args);\n};\n","import { get, set } from \"lodash-es\";\n\nimport { Individuals as IndividualsClass } from \"../classes/indis\";\nimport type { Individuals } from \"../classes/indis\";\nimport type { NestedGroup } from \"../types/types\";\n\n// Use a WeakMap to track unique items for each node without polluting the object\nconst uniqueItemsCache = new WeakMap<NestedGroup, Individuals>();\n\nexport const setNestedGroup = (\n\tobj: NestedGroup,\n\tkey: string | string[],\n\tvalue: Individuals,\n\tuniqueCounting = true\n) => {\n\tconst parts = Array.isArray(key) ? key : key.split(/,\\s*/);\n\n\t// Set items only at the leaf level (deepest level of this path)\n\tset(obj, [...parts, \"items\"], value);\n\n\t// Update lengths at all parent levels by tracking unique items incrementally\n\tparts.forEach((_, index) => {\n\t\tif (!uniqueCounting) {\n\t\t\t// If not unique counting, simply set the length to the number of items at this level\n\t\t\tconst key = [...parts.toSpliced(index + 1), \"length\"];\n\t\t\tconst length = get(obj, key);\n\t\t\tset(obj, key, (length ?? 0) + value.length);\n\t\t\treturn;\n\t\t}\n\n\t\tconst pathKey = [...parts.toSpliced(index + 1)];\n\t\tconst node = get(obj, pathKey) as NestedGroup | undefined;\n\n\t\tif (node) {\n\t\t\t// Get or create the unique items collection for this node\n\t\t\tlet uniqueItems = uniqueItemsCache.get(node);\n\t\t\tif (!uniqueItems) {\n\t\t\t\tuniqueItems = new IndividualsClass();\n\t\t\t\tuniqueItemsCache.set(node, uniqueItems);\n\t\t\t}\n\n\t\t\t// Merge the new items to track unique individuals\n\t\t\tuniqueItems.merge(value);\n\n\t\t\t// Update the length to be the count of unique items\n\t\t\tset(obj, [...pathKey, \"length\"], uniqueItems.length);\n\t\t}\n\t});\n};\n","/**\n * Minimal place parsing stub for gedcom-parser\n * This is a simplified version - consumer apps can implement full place parsing if needed\n */\n\nexport interface PlaceParts {\n\tleftParts?: string[];\n\ttown?: string;\n\tcounty?: string;\n\tcountry?: string;\n}\n\n/**\n * Simple place parser - splits by commas\n * Consumer apps can implement more sophisticated parsing if needed\n */\nexport const getPlaceParts = (\n\tplace: string | (string | undefined)[] = []\n): PlaceParts[] => {\n\tconst partsString = Array.isArray(place)\n\t\t? place.filter(Boolean).join(\", \")\n\t\t: place;\n\n\tif (!partsString) {\n\t\treturn [{}];\n\t}\n\n\t// Simple split by comma\n\tconst parts = partsString\n\t\t.split(/,\\s*/)\n\t\t.map((p) => p.trim())\n\t\t.filter(Boolean);\n\n\tif (parts.length === 0) {\n\t\treturn [{}];\n\t}\n\n\t// Simple heuristic: last part is country, second-to-last is county, rest is town/city\n\tconst result: PlaceParts = {};\n\n\tif (parts.length === 1) {\n\t\tresult.town = parts[0];\n\t} else if (parts.length === 2) {\n\t\tresult.town = parts[0];\n\t\tresult.country = parts[1];\n\t} else if (parts.length === 3) {\n\t\tresult.town = parts[0];\n\t\tresult.county = parts[1];\n\t\tresult.country = parts[2];\n\t} else {\n\t\t// More than 3 parts - put extras in leftParts\n\t\tresult.leftParts = parts.slice(0, parts.length - 3);\n\t\tresult.town = parts[parts.length - 3];\n\t\tresult.county = parts[parts.length - 2];\n\t\tresult.country = parts[parts.length - 1];\n\t}\n\n\treturn [result];\n};\n","/**\n * Place translator stub for gedcom-parser\n * This is a minimal no-op implementation - consumer apps can implement translation if needed\n */\n\nexport const placeTranslator = (place: string | string[]): string => {\n\t// No-op stub - return place as-is (join if array)\n\treturn Array.isArray(place) ? place.join(\", \") : place;\n};\n","import { difference } from \"lodash-es\";\n\nimport {\n\tBIRTH_ASC,\n\tBIRTH_DESC,\n\tDEATH_ASC,\n\tDEATH_DESC,\n} from \"../constants/orders\";\nimport { getPlaceParserProvider } from \"../factories/place-parser-provider\";\nimport { getPlaceTranslatorProvider } from \"../factories/place-translator-provider\";\nimport type {IIndividuals} from \"../interfaces/indis\";\nimport type IEventDetailStructure from \"../structures/event-detail-structure\";\nimport type {Settings} from \"../types/settings\";\nimport {\n\t\n\t\n\t\n\t\n\t\n\tRange\n\t\n\t\n\t\n\t\n\t\n} from \"../types/types\";\nimport type {IndiKey, Filter, FamKey, OrderIterator, MultiTag, NestedGroup, Order, FilterIterator, GroupIterator, Group, GroupMarker } from \"../types/types\";\nimport { nameFormatter } from \"../utils/name-formatter\";\nimport { setNestedGroup } from \"../utils/nested-group\";\nimport { getPlaceParts } from \"../utils/place-parser\";\nimport { placeTranslator } from \"../utils/place-translator\";\n\nimport type {CommonDate} from \"./date\";\nimport type {IndiType} from \"./indi\";\nimport { List } from \"./list\";\n\nexport class Individuals\n\textends List<IndiKey, IndiType>\n\timplements IIndividuals\n{\n\tcopy(): Individuals {\n\t\treturn super.copy(Individuals) as Individuals;\n\t}\n\n\texcept(item: IndiType): Individuals {\n\t\treturn super.except(item, Individuals) as Individuals;\n\t}\n\n\tfilter(filters: Filter | FilterIterator<IndiType, IndiKey>): Individuals {\n\t\treturn super.filter(filters, Individuals) as Individuals;\n\t}\n\n\tfind(\n\t\tfilters: Filter | FilterIterator<IndiType, IndiKey>\n\t): IndiType | undefined {\n\t\treturn super.find(filters, Individuals) as IndiType | undefined;\n\t}\n\n\tunattachedFilter(useUnattached: boolean) {\n\t\tif (useUnattached) {\n\t\t\treturn this;\n\t\t}\n\n\t\treturn this.filter((item) => !item.isUnattachedMember());\n\t}\n\n\torderBy(orders: Order | OrderIterator<IndiType, IndiKey>): Individuals {\n\t\treturn super.orderBy(orders, Individuals) as Individuals;\n\t}\n\n\tgetFirstEvent() {\n\t\tconst firstBirthPerson = this.getFirstBirth();\n\t\tconst firstDeathPerson = this.getFirstDeath();\n\n\t\tconst firstBirth = firstBirthPerson?.BIRT?.toList().index(0) as\n\t\t\t| IEventDetailStructure\n\t\t\t| undefined;\n\t\tconst firstDeath = firstDeathPerson?.DEAT?.toList().index(0) as\n\t\t\t| IEventDetailStructure\n\t\t\t| undefined;\n\n\t\tif (!firstBirth?.DATE?.rawValue && !firstDeath?.DATE?.rawValue) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!firstBirth?.DATE?.rawValue) {\n\t\t\treturn firstDeathPerson;\n\t\t}\n\n\t\tif (!firstDeath?.DATE?.rawValue) {\n\t\t\treturn firstBirthPerson;\n\t\t}\n\n\t\tif (firstDeath.DATE.rawValue < firstBirth.DATE.rawValue) {\n\t\t\treturn firstDeathPerson;\n\t\t}\n\n\t\treturn firstBirthPerson;\n\t}\n\n\tgetLastEvent() {\n\t\tconst lastDeathPerson = this.getLastDeath();\n\t\tconst lastBirthPerson = this.getLastBirth();\n\n\t\tconst lastBirth = lastBirthPerson?.BIRT?.toList().index(0) as\n\t\t\t| IEventDetailStructure\n\t\t\t| undefined;\n\t\tconst lastDeath = lastDeathPerson?.DEAT?.toList().index(0) as\n\t\t\t| IEventDetailStructure\n\t\t\t| undefined;\n\n\t\tif (!lastBirth?.DATE?.rawValue && !lastDeath?.DATE?.rawValue) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (!lastDeath?.DATE?.rawValue) {\n\t\t\treturn lastBirthPerson;\n\t\t}\n\n\t\tif (!lastBirth?.DATE?.rawValue) {\n\t\t\treturn lastDeathPerson;\n\t\t}\n\n\t\tif (lastDeath.DATE.rawValue < lastBirth.DATE.rawValue) {\n\t\t\treturn lastBirthPerson;\n\t\t}\n\n\t\treturn lastDeathPerson;\n\t}\n\n\tgetFirstBirth() {\n\t\treturn this.filter((item) => {\n\t\t\tconst birth = item.BIRT?.toList().index(0) as\n\t\t\t\t| IEventDetailStructure\n\t\t\t\t| undefined;\n\t\t\tif (birth?.DATE?.rawValue?.getTime() === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn !!birth?.DATE?.rawValue?.getTime();\n\t\t})\n\t\t\t.orderBy(BIRTH_ASC)\n\t\t\t.index(0);\n\t}\n\n\tgetLastBirth() {\n\t\treturn this.filter((item) => {\n\t\t\tconst birth = item.BIRT?.toList().index(0) as\n\t\t\t\t| IEventDetailStructure\n\t\t\t\t| undefined;\n\t\t\tif (birth?.DATE?.rawValue?.getTime() === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn !!birth?.DATE?.rawValue?.getTime();\n\t\t})\n\t\t\t.orderBy(BIRTH_DESC)\n\t\t\t.index(0);\n\t}\n\n\tgetFirstDeath() {\n\t\treturn this.filter((item) => {\n\t\t\tconst death = item.DEAT?.toList().index(0) as\n\t\t\t\t| IEventDetailStructure\n\t\t\t\t| undefined;\n\t\t\tif (death?.DATE?.rawValue?.getTime() === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn !!death?.DATE?.rawValue?.getTime();\n\t\t})\n\t\t\t.orderBy(DEATH_ASC)\n\t\t\t.index(0);\n\t}\n\n\tgetLastDeath() {\n\t\treturn this.filter((item) => {\n\t\t\tconst death = item.DEAT?.toList().index(0) as\n\t\t\t\t| IEventDetailStructure\n\t\t\t\t| undefined;\n\t\t\tif (death?.DATE?.rawValue?.getTime() === 0) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn !!death?.DATE?.rawValue?.getTime();\n\t\t})\n\t\t\t.orderBy(DEATH_DESC)\n\t\t\t.index(0);\n\t}\n\n\tgroupBy(\n\t\tgroup: Group | GroupIterator<IndiType, IndiKey>,\n\t\tsort?: \"length\" | \"group\" | OrderIterator<Individuals, string>,\n\t\tminOccurance = -1,\n\t\tlessOccuranceLabel?: string\n\t): Record<string, Individuals> {\n\t\treturn super.groupBy(\n\t\t\tgroup,\n\t\t\tsort as OrderIterator<List, string>,\n\t\t\tminOccurance,\n\t\t\tlessOccuranceLabel,\n\t\t\tIndividuals\n\t\t) as Record<string, Individuals>;\n\t}\n\n\tgroupByFirstLetters(\n\t\tsort: \"length\" | \"group\" | OrderIterator<Individuals, string> = \"group\",\n\t\tminOccurance = -1,\n\t\tsettings?: Settings\n\t) {\n\t\treturn this.groupBy(\n\t\t\t(item) => {\n\t\t\t\tconst { letter } = nameFormatter(item, settings);\n\n\t\t\t\treturn letter.trim() || \"Unknown\";\n\t\t\t},\n\t\t\tsort,\n\t\t\tminOccurance,\n\t\t\t\"Letters appearing less than 5 times\"\n\t\t);\n\t}\n\n\tgroupBySurnames(\n\t\tsort?: \"length\" | \"group\" | OrderIterator<Individuals, string>,\n\t\tminOccurance = -1\n\t) {\n\t\treturn this.groupBy(\n\t\t\t\"NAME.SURN\",\n\t\t\tsort,\n\t\t\tminOccurance,\n\t\t\t\"Surnames appearing less than 5 times\"\n\t\t);\n\t}\n\n\tgroupByTimeRanges(\n\t\trange: Range,\n\t\tsort: \"length\" | \"group\" | OrderIterator<Individuals, string> = \"group\",\n\t\tminOccurance = -1\n\t) {\n\t\treturn this.groupBy(\n\t\t\t{\n\t\t\t\t[\"BIRT.DATE.YEAR\" as MultiTag]: {\n\t\t\t\t\tgetter: (year: unknown) => {\n\t\t\t\t\t\tif (!Number(year)) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (range === Range.Year) {\n\t\t\t\t\t\t\treturn `${\n\t\t\t\t\t\t\t\tMath.floor(Number(year) / range) * range\n\t\t\t\t\t\t\t}`;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn `${Math.floor(Number(year) / range) * range + 1}-${\n\t\t\t\t\t\t\tMath.ceil((Number(year) + 1) / range) * range\n\t\t\t\t\t\t}`;\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tsort,\n\t\t\tminOccurance,\n\t\t\t\"Time ranges appearing less than 5 times\"\n\t\t);\n\t}\n\n\tnestedGroupByPlacesAndTimeRanges(\n\t\tsort?: \"length\" | \"group\" | OrderIterator<Individuals, string>,\n\t\tminOccurance = -1,\n\t\tuniqueCounting = true\n\t) {\n\t\tconst placesWithYear = this.groupBy(\n\t\t\t(item) =>\n\t\t\t\titem\n\t\t\t\t\t.getPlaces()\n\t\t\t\t\t.map((place) => {\n\t\t\t\t\t\tconst date = place.obj?.get(\"DATE\") as\n\t\t\t\t\t\t\t| CommonDate\n\t\t\t\t\t\t\t| undefined;\n\t\t\t\t\t\tif (date?.YEAR) {\n\t\t\t\t\t\t\treturn `${place.place}, ${date.YEAR}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn `${place.place}, Unknown`;\n\t\t\t\t\t})\n\t\t\t\t\t.filter(Boolean) as string[],\n\t\t\tsort,\n\t\t\tminOccurance,\n\t\t\t\"Places appearing less than 5 times\"\n\t\t);\n\n\t\treturn Object.entries(placesWithYear).reduce<NestedGroup>(\n\t\t\t(acc, [place, indis]) => {\n\t\t\t\tsetNestedGroup(acc, place, indis, uniqueCounting);\n\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{}\n\t\t);\n\t}\n\n\tnestedGroupByTimeRangesAndPlaces(\n\t\tsort?: \"length\" | \"group\" | OrderIterator<Individuals, string>,\n\t\tminOccurance = -1,\n\t\tuniqueCounting = true\n\t) {\n\t\tconst placesWithYear = this.groupBy(\n\t\t\t(item) =>\n\t\t\t\titem\n\t\t\t\t\t.getPlaces()\n\t\t\t\t\t.map((place) => {\n\t\t\t\t\t\tconst date = place.obj?.get(\"DATE\") as\n\t\t\t\t\t\t\t| CommonDate\n\t\t\t\t\t\t\t| undefined;\n\t\t\t\t\t\tif (date?.YEAR) {\n\t\t\t\t\t\t\treturn `${date.YEAR}, ${place.place}`;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn `Unknown, ${place.place}`;\n\t\t\t\t\t})\n\t\t\t\t\t.filter(Boolean) as string[],\n\t\t\tsort,\n\t\t\tminOccurance,\n\t\t\t\"Places appearing less than 5 times\"\n\t\t);\n\n\t\treturn Object.entries(placesWithYear).reduce<NestedGroup>(\n\t\t\t(acc, [place, indis]) => {\n\t\t\t\tsetNestedGroup(acc, place, indis, uniqueCounting);\n\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{}\n\t\t);\n\t}\n\n\tnestedGroupByPlaces(\n\t\tsort?: \"length\" | \"group\" | OrderIterator<Individuals, string>,\n\t\tminOccurance = -1,\n\t\tpartOrder: \"original\" | \"reverse\" = \"reverse\",\n\t\ttranslate = true,\n\t\tuniqueCounting = true,\n\t\tgroupKeyTranslator?: (parts: string[]) => string | undefined\n\t) {\n\t\tconst places = this.groupByPlaces(\n\t\t\tsort,\n\t\t\tminOccurance,\n\t\t\tpartOrder,\n\t\t\ttranslate,\n\t\t\tgroupKeyTranslator\n\t\t);\n\n\t\treturn Object.entries(places).reduce<NestedGroup>(\n\t\t\t(acc, [place, indis]) => {\n\t\t\t\tsetNestedGroup(acc, place, indis, uniqueCounting);\n\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{}\n\t\t);\n\t}\n\n\tgroupByPlaces(\n\t\tsort?: \"length\" | \"group\" | OrderIterator<Individuals, string>,\n\t\tminOccurance = -1,\n\t\tpartOrder: \"original\" | \"reverse\" = \"reverse\",\n\t\ttranslate = true,\n\t\tgroupKeyTranslator?: (parts: string[]) => string | undefined\n\t) {\n\t\treturn this.groupBy(\n\t\t\t(item) =>\n\t\t\t\titem\n\t\t\t\t\t.getPlaces()\n\t\t\t\t\t.map((place) => {\n\t\t\t\t\t\t// Use custom place parser if provided, otherwise use built-in\n\t\t\t\t\t\tconst customPlaceParser = getPlaceParserProvider();\n\t\t\t\t\t\tconst placeParts = customPlaceParser\n\t\t\t\t\t\t\t? customPlaceParser(place.place || \"\")\n\t\t\t\t\t\t\t: getPlaceParts(place.place || \"\");\n\n\t\t\t\t\t\tconst {\n\t\t\t\t\t\t\tleftParts = [],\n\t\t\t\t\t\t\ttown,\n\t\t\t\t\t\t\tcounty,\n\t\t\t\t\t\t\tcountry,\n\t\t\t\t\t\t} = placeParts[0] || {};\n\n\t\t\t\t\t\t// Build normalized parts array in city-to-country order\n\t\t\t\t\t\tconst normalizedParts = [\n\t\t\t\t\t\t\t...leftParts,\n\t\t\t\t\t\t\ttown,\n\t\t\t\t\t\t\tcounty,\n\t\t\t\t\t\t\tcountry,\n\t\t\t\t\t\t].filter(Boolean) as string[];\n\n\t\t\t\t\t\t// Apply the requested order\n\t\t\t\t\t\tconst orderedParts =\n\t\t\t\t\t\t\tpartOrder === \"original\"\n\t\t\t\t\t\t\t\t? normalizedParts\n\t\t\t\t\t\t\t\t: normalizedParts.toReversed();\n\n\t\t\t\t\t\tlet newPlace: string | undefined = \"\";\n\t\t\t\t\t\tif (groupKeyTranslator) {\n\t\t\t\t\t\t\t// Use custom group key translator function\n\t\t\t\t\t\t\tnewPlace = groupKeyTranslator(orderedParts);\n\t\t\t\t\t\t} else if (translate) {\n\t\t\t\t\t\t\t// Use custom place translator if provided, otherwise use built-in\n\t\t\t\t\t\t\tconst customPlaceTranslator =\n\t\t\t\t\t\t\t\tgetPlaceTranslatorProvider();\n\t\t\t\t\t\t\tif (customPlaceTranslator) {\n\t\t\t\t\t\t\t\t// Custom translator: pass as array\n\t\t\t\t\t\t\t\tnewPlace = customPlaceTranslator(orderedParts);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Built-in translator: expects string array\n\t\t\t\t\t\t\t\tnewPlace = placeTranslator(orderedParts);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// No translation, just join\n\t\t\t\t\t\t\tnewPlace = orderedParts.join(\", \");\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (!newPlace) {\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tmarker: place.place,\n\t\t\t\t\t\t\tgroup: newPlace,\n\t\t\t\t\t\t};\n\t\t\t\t\t})\n\t\t\t\t\t.filter(Boolean) as GroupMarker[],\n\t\t\tsort,\n\t\t\tminOccurance,\n\t\t\t\"Places appearing less than 5 times\"\n\t\t);\n\t}\n\n\tgetFacts() {\n\t\tconst facts = new List();\n\n\t\tthis.values().forEach((indi) => {\n\t\t\tconst indiFacts = indi?.getFacts();\n\t\t\tif (indi?.id && indiFacts) {\n\t\t\t\tfacts.merge(indiFacts);\n\t\t\t}\n\t\t});\n\n\t\treturn facts;\n\t}\n\n\tprivate isRelativeOf(\n\t\ttype:\n\t\t\t| \"sibling\"\n\t\t\t| \"parent\"\n\t\t\t| \"child\"\n\t\t\t| \"spouse\"\n\t\t\t| \"parentInLaw\"\n\t\t\t| \"childInLaw\",\n\t\tindi?: IndiKey | IndiType,\n\t\tevery = false\n\t) {\n\t\tconst usedIndi =\n\t\t\ttypeof indi === \"string\"\n\t\t\t\t? this.index(0)?.getGedcom()?.indi(indi)\n\t\t\t\t: indi;\n\n\t\tlet getter:\n\t\t\t| keyof Pick<\n\t\t\t\t\tIndiType,\n\t\t\t\t\t| \"getSiblings\"\n\t\t\t\t\t| \"getParents\"\n\t\t\t\t\t| \"getChildren\"\n\t\t\t\t\t| \"getCoParents\"\n\t\t\t\t\t| \"getParentsInLaw\"\n\t\t\t\t\t| \"getChildrenInLaw\"\n\t\t\t >\n\t\t\t| undefined;\n\t\tif (type === \"sibling\") {\n\t\t\tgetter = \"getSiblings\";\n\t\t}\n\t\tif (type === \"parent\") {\n\t\t\tgetter = \"getParents\";\n\t\t}\n\t\tif (type === \"child\") {\n\t\t\tgetter = \"getChildren\";\n\t\t}\n\t\tif (type === \"spouse\") {\n\t\t\tgetter = \"getCoParents\";\n\t\t}\n\t\tif (type === \"parentInLaw\") {\n\t\t\tgetter = \"getParentsInLaw\";\n\t\t}\n\t\tif (type === \"childInLaw\") {\n\t\t\tgetter = \"getChildrenInLaw\";\n\t\t}\n\n\t\tif (!usedIndi || !getter) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst relatives = usedIndi[getter]();\n\t\tconst thisIds = this.keys();\n\n\t\tif (relatives.length <= 0 || this.length <= 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst filtered = relatives.filter({ id: thisIds });\n\t\tif (every) {\n\t\t\treturn filtered.length === this.length\n\t\t\t\t? filtered.index(0)?.id || true\n\t\t\t\t: false;\n\t\t}\n\n\t\treturn filtered.length > 0 ? filtered.index(0)?.id || true : false;\n\t}\n\n\tisSiblingOf(indi?: IndiKey | IndiType, every = false) {\n\t\treturn this.isRelativeOf(\"sibling\", indi, every);\n\t}\n\n\tisSpouseOf(indi?: IndiKey | IndiType, every = false) {\n\t\treturn this.isRelativeOf(\"spouse\", indi, every);\n\t}\n\n\tisParentOf(indi?: IndiKey | IndiType, every = false) {\n\t\treturn this.isRelativeOf(\"parent\", indi, every);\n\t}\n\n\tisChildOf(indi?: IndiKey | IndiType, every = false) {\n\t\treturn this.isRelativeOf(\"child\", indi, every);\n\t}\n\n\tisParentInLawOf(indi?: IndiKey | IndiType, every = false) {\n\t\treturn this.isRelativeOf(\"parentInLaw\", indi, every);\n\t}\n\n\tisChildInLawOf(indi?: IndiKey | IndiType, every = false) {\n\t\treturn this.isRelativeOf(\"childInLaw\", indi, every);\n\t}\n\n\tsplitByFamily(\n\t\ttype: \"Spouses\" | \"Parents\" | \"Children\",\n\t\trelativeTo?: IndiType\n\t) {\n\t\tconst splittedList: Record<FamKey, Individuals | undefined> = {};\n\n\t\tconst familiesRelativeTo =\n\t\t\trelativeTo\n\t\t\t\t?.get(type !== \"Parents\" ? \"FAMS\" : \"FAMC\")\n\t\t\t\t?.toValueList()\n\t\t\t\t.keys() ?? [];\n\n\t\tlet lengthOfIndividuals = 0;\n\t\tthis.forEach((indi) => {\n\t\t\tconst families = indi\n\t\t\t\t.get(type === \"Spouses\" ? \"FAMS\" : \"FAMC\")\n\t\t\t\t?.toValueList();\n\n\t\t\tif (families) {\n\t\t\t\tfamilies.keys().forEach((fKey) => {\n\t\t\t\t\tconst famKey = fKey as FamKey;\n\t\t\t\t\tif (\n\t\t\t\t\t\tfamiliesRelativeTo &&\n\t\t\t\t\t\t!familiesRelativeTo.includes(famKey)\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (!splittedList[famKey]) {\n\t\t\t\t\t\tsplittedList[famKey] = new Individuals();\n\t\t\t\t\t}\n\n\t\t\t\t\tsplittedList[famKey]?.append(indi);\n\t\t\t\t\tlengthOfIndividuals++;\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\t// Handle familiy with no co parent\n\t\tif (type === \"Spouses\" && relativeTo) {\n\t\t\tconst missingFams = difference(\n\t\t\t\tfamiliesRelativeTo,\n\t\t\t\tObject.keys(splittedList)\n\t\t\t);\n\t\t\tif (missingFams.length) {\n\t\t\t\tmissingFams.forEach((fKey) => {\n\t\t\t\t\tconst famKey = fKey as FamKey;\n\n\t\t\t\t\tif (\n\t\t\t\t\t\tfamiliesRelativeTo &&\n\t\t\t\t\t\t!familiesRelativeTo.includes(famKey)\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst missingChildren = relativeTo\n\t\t\t\t\t\t.getGedcom()\n\t\t\t\t\t\t?.fam(famKey)\n\t\t\t\t\t\t?.getChildren();\n\n\t\t\t\t\tif (!splittedList[famKey] && missingChildren?.length) {\n\t\t\t\t\t\tsplittedList[famKey] = new Individuals();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\titems: splittedList,\n\t\t\tlengthOfFamily: Object.keys(splittedList).length,\n\t\t\tlengthOfIndividuals,\n\t\t};\n\t}\n\n\tgetRelativesOnDegree(degree = 0) {\n\t\tconst persons = new Individuals();\n\n\t\tthis.values().forEach((indi) => {\n\t\t\tif (indi) {\n\t\t\t\tpersons.merge(indi.getRelativesOnLevel(degree));\n\t\t\t}\n\t\t});\n\n\t\treturn persons;\n\t}\n\n\tgetRelativesOnLevel(level = 0, filter?: Filter) {\n\t\tconst persons = new Individuals();\n\n\t\tthis.values().forEach((indi) => {\n\t\t\tif (indi) {\n\t\t\t\tpersons.merge(indi.getRelativesOnLevel(level, filter));\n\t\t\t}\n\t\t});\n\n\t\treturn persons;\n\t}\n\n\tgetAscendants(level = 0, filter?: Filter) {\n\t\tconst persons = new Individuals();\n\n\t\tthis.values().forEach((indi) => {\n\t\t\tif (indi) {\n\t\t\t\tpersons.merge(indi.getAscendants(level, filter));\n\t\t\t}\n\t\t});\n\n\t\treturn persons;\n\t}\n\n\tgetDescendants(level = 0, filter?: Filter) {\n\t\tconst persons = new Individuals();\n\n\t\tthis.values().forEach((indi) => {\n\t\t\tif (indi) {\n\t\t\t\tpersons.merge(indi.getDescendants(level, filter));\n\t\t\t}\n\t\t});\n\n\t\treturn persons;\n\t}\n\n\tgetAllAscendants(individuals?: Individuals) {\n\t\tconst persons = new Individuals();\n\n\t\tthis.values().forEach((indi) => {\n\t\t\tif (indi) {\n\t\t\t\tpersons.merge(indi.getAllAscendants(individuals));\n\t\t\t}\n\t\t});\n\n\t\treturn persons;\n\t}\n\n\tgetAllDescendants(\n\t\tindividuals?: Individuals,\n\t\tcontainDescendantsInLaw = false\n\t) {\n\t\tconst persons = new Individuals();\n\n\t\tthis.values().forEach((indi) => {\n\t\t\tif (indi) {\n\t\t\t\tpersons.merge(\n\t\t\t\t\tindi.getAllDescendants(individuals, containDescendantsInLaw)\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\n\t\treturn persons;\n\t}\n\n\tgetSiblings() {\n\t\tconst persons = new Individuals();\n\n\t\tthis.values().forEach((indi) => {\n\t\t\tif (indi) {\n\t\t\t\tpersons.merge(indi.getSiblings());\n\t\t\t}\n\t\t});\n\n\t\treturn persons;\n\t}\n\n\tgetChildren() {\n\t\tconst persons = new Individuals();\n\n\t\tthis.values().forEach((indi) => {\n\t\t\tif (indi) {\n\t\t\t\tpersons.merge(indi.getChildren());\n\t\t\t}\n\t\t});\n\n\t\treturn persons;\n\t}\n\n\tgetParents() {\n\t\tconst persons = new Individuals();\n\n\t\tthis.values().forEach((indi) => {\n\t\t\tif (indi) {\n\t\t\t\tpersons.merge(indi.getParents());\n\t\t\t}\n\t\t});\n\n\t\treturn persons;\n\t}\n\n\tgetCoParents() {\n\t\tconst persons = new Individuals();\n\n\t\tthis.values().forEach((indi) => {\n\t\t\tif (indi) {\n\t\t\t\tpersons.merge(indi.getCoParents());\n\t\t\t}\n\t\t});\n\n\t\treturn persons;\n\t}\n\n\tgetSpouses() {\n\t\tconst persons = new Individuals();\n\n\t\tthis.values().forEach((indi) => {\n\t\t\tif (indi) {\n\t\t\t\tpersons.merge(indi.getCoParents());\n\t\t\t}\n\t\t});\n\n\t\treturn persons;\n\t}\n\n\ttoName() {\n\t\treturn super.toProp(\"NAME\")?.toValue();\n\t}\n\n\ttoList() {\n\t\treturn new Individuals().concat(this.getItems());\n\t}\n}\n","import type IFam from \"../interfaces/fam\";\nimport type IFamilyStructure from \"../structures/family\";\nimport type { FamKey, IndiKey } from \"../types/types\";\n\nimport { Common, createProxy } from \"./common\";\nimport type { ProxyOriginal } from \"./common\";\nimport { Families } from \"./fams\";\nimport type { GedComType } from \"./gedcom\";\nimport { Individuals } from \"./indis\";\n\nexport class Fam extends Common<string, FamKey> implements IFam {\n\tprivate getFamilyMembers(type: \"CHIL\" | \"WIFE\" | \"HUSB\"): Individuals {\n\t\tconst familyMembers = new Individuals();\n\t\tthis.get(type)\n\t\t\t?.toList()\n\t\t\t.forEach((item) => {\n\t\t\t\tconst indiId = item.value as IndiKey;\n\t\t\t\tconst indi = this._gedcom?.indi(indiId);\n\n\t\t\t\tif (indi) {\n\t\t\t\t\tfamilyMembers.item(indiId, indi);\n\t\t\t\t}\n\t\t\t});\n\t\treturn familyMembers;\n\t}\n\n\tgetChildren() {\n\t\treturn this.getFamilyMembers(\"CHIL\");\n\t}\n\n\tgetHusband() {\n\t\treturn this.getFamilyMembers(\"HUSB\");\n\t}\n\n\tgetWife() {\n\t\treturn this.getFamilyMembers(\"WIFE\");\n\t}\n\n\tgetParents(): Individuals {\n\t\treturn this.getHusband().copy().merge(this.getWife());\n\t}\n\n\ttoList() {\n\t\treturn new Families().concat(\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tthis.id ? { [this.id]: this } : ({ ...[this] } as any)\n\t\t);\n\t}\n}\n\nexport type FamType = Fam & IFamilyStructure;\nexport const createFam = (\n\tgedcom: GedComType,\n\tid: FamKey,\n\tmain?: Common,\n\tparent?: Common\n): ProxyOriginal<FamType> => {\n\treturn createProxy(\n\t\tnew Fam(gedcom, id, main, parent)\n\t) as ProxyOriginal<FamType>;\n};\n","import type {IFamilies} from \"../interfaces/fams\";\nimport type {FamKey, Filter, Order, FilterIterator, OrderIterator} from \"../types/types\";\n\nimport { Fam } from \"./fam\";\nimport type {FamType} from \"./fam\";\nimport { Individuals } from \"./indis\";\nimport { List } from \"./list\";\n\nexport class Families extends List<FamKey, FamType> implements IFamilies {\n\tcopy(): Families {\n\t\treturn super.copy(Families) as Families;\n\t}\n\n\texcept(item: FamType): Families {\n\t\treturn super.except(item, Families) as Families;\n\t}\n\n\tfilter(filters: Filter | FilterIterator<FamType, FamKey>): Families {\n\t\treturn super.filter(filters, Families) as Families;\n\t}\n\n\tfind(\n\t\tfilters: Filter | FilterIterator<FamType, FamKey>\n\t): FamType | undefined {\n\t\treturn super.find(filters, Families) as FamType | undefined;\n\t}\n\n\torderBy(orders: Order | OrderIterator<FamType, FamKey>): Families {\n\t\treturn super.orderBy(orders, Families) as Families;\n\t}\n\n\tgetParents(): Individuals {\n\t\tconst persons = new Individuals();\n\n\t\tthis.values().forEach((fam) => {\n\t\t\tif (fam && fam instanceof Fam) {\n\t\t\t\tpersons.merge(fam.getParents());\n\t\t\t}\n\t\t});\n\n\t\treturn persons;\n\t}\n\n\tgetChildren(): Individuals {\n\t\tconst persons = new Individuals();\n\n\t\tthis.values().forEach((fam) => {\n\t\t\tif (fam && fam instanceof Fam) {\n\t\t\t\tpersons.merge(fam.getChildren());\n\t\t\t}\n\t\t});\n\n\t\treturn persons;\n\t}\n\n\ttoList() {\n\t\treturn new Families().concat(this.getItems());\n\t}\n}\n","import type { IdType } from \"../types/types\";\n\nimport { Common, createCommon, createProxy } from \"./common\";\nimport type { ProxyOriginal } from \"./common\";\nimport type {GedComType} from \"./gedcom\";\nimport { Indi } from \"./indi\";\n\nexport class CommonName extends Common<string> {\n\tNPFX?: Common;\n\tGIVN?: Common;\n\tNICK?: Common;\n\tSPFX?: Common;\n\tSURN?: Common;\n\tNSFX?: Common;\n\tDISPLAY?: Common;\n\t_MARNM?: Common;\n\n\tconstructor(\n\t\tgedcom?: GedComType,\n\t\tid?: IdType,\n\t\tmain?: Common,\n\t\tparent?: Common\n\t) {\n\t\tsuper(gedcom, id, main, parent);\n\n\t\tdelete this.id;\n\t}\n\n\tset value(value: string | undefined) {\n\t\tif (value && this._main instanceof Indi) {\n\t\t\tconst nameParts = value.match(\n\t\t\t\t/(?<givenname>[^/]*)(\\/(?<surname>[^/]*)\\/)?(?<suffix>.*)$/\n\t\t\t)?.groups as null | {\n\t\t\t\tgivenname?: string;\n\t\t\t\tsurname?: string;\n\t\t\t\tsuffix?: string;\n\t\t\t};\n\n\t\t\tif (nameParts?.givenname?.trim()) {\n\t\t\t\tthis.GIVN =\n\t\t\t\t\tthis.GIVN ||\n\t\t\t\t\tcreateCommon(this._gedcom, undefined, this.main);\n\t\t\t\tthis.GIVN.isListable = false;\n\t\t\t\tthis.GIVN.value = nameParts.givenname.trim();\n\t\t\t}\n\n\t\t\tif (nameParts?.surname?.trim()) {\n\t\t\t\tthis.SURN =\n\t\t\t\t\tthis.SURN ||\n\t\t\t\t\tcreateCommon(this._gedcom, undefined, this.main);\n\t\t\t\tthis.SURN.value = nameParts.surname.trim();\n\t\t\t\tthis.SURN.isListable = false;\n\t\t\t}\n\n\t\t\tif (nameParts?.suffix?.trim()) {\n\t\t\t\tthis.NSFX =\n\t\t\t\t\tthis.NSFX ||\n\t\t\t\t\tcreateCommon(this._gedcom, undefined, this.main);\n\t\t\t\tthis.NSFX.value = nameParts.suffix.trim();\n\t\t\t\tthis.NSFX.isListable = false;\n\t\t\t}\n\t\t}\n\n\t\tthis._value = value;\n\t}\n\n\tget value() {\n\t\tif (this._value === undefined && this.DISPLAY?.value) {\n\t\t\treturn this.DISPLAY?.value;\n\t\t}\n\n\t\treturn this._value;\n\t}\n\n\tname(value: string | undefined) {\n\t\tthis.value = value;\n\n\t\treturn this;\n\t}\n}\n\nexport const createCommonName = (\n\tgedcom?: GedComType,\n\tid?: IdType,\n\tmain?: Common,\n\tparent?: Common\n): ProxyOriginal<CommonName> => {\n\treturn createProxy(\n\t\tnew CommonName(gedcom, id, main, parent)\n\t) as unknown as ProxyOriginal<CommonName>;\n};\n","import * as Filters from \"../constants/filters\";\n\nimport {\n\tBIRTH_ASC,\n\tDATE_ASC,\n\tgetMarriageAscAndChildBirth,\n} from \"../constants/orders\";\nimport { getKinshipTranslatorClass } from \"../factories/kinship-factory\";\nimport type {\n\tMediaList,\n\tGeneratedIndiMethods,\n\tGeneratorKey,\n\tGeneratorType,\n} from \"../interfaces/indi\";\nimport type IIndi from \"../interfaces/indi\";\nimport type { Kinship } from \"../kinship-translator/kinship-translator.interface\";\nimport type { Language } from \"../kinship-translator/types\";\nimport type IEventDetailStructure from \"../structures/event-detail-structure\";\nimport type IIndividualStructure from \"../structures/individual\";\nimport type { AncestryMedia } from \"../types/ancestry-media\";\nimport { RelationType, PartnerType } from \"../types/types\";\nimport type {\n\tIndiKey,\n\tFamKey,\n\tFilter,\n\tRequiredFilter,\n\tObjeKey,\n\tMultiTag,\n\tIdType,\n} from \"../types/types\";\nimport { pathCache, relativesCache } from \"../utils/cache\";\nimport { dateFormatter } from \"../utils/date-formatter\";\nimport { PlaceType, getPlaces } from \"../utils/get-places\";\nimport type { Place } from \"../utils/get-places\";\nimport { implemented } from \"../utils/logger\";\n\nimport { Common, createCommon, createProxy } from \"./common\";\nimport type { ProxyOriginal } from \"./common\";\nimport type { FamType } from \"./fam\";\nimport { Families } from \"./fams\";\nimport type { GedComType } from \"./gedcom\";\nimport { Individuals } from \"./indis\";\nimport { List } from \"./list\";\nimport { CommonName, createCommonName } from \"./name\";\nimport type { ObjeType } from \"./obje\";\n\nexport enum Existed {\n\tSPOUSE = \"spouse\",\n\tYES = \"yes\",\n}\n\nexport enum CustomTags {\n\tUnknownGivenname = \"Unknown givenname\",\n\tUnknownSurname = \"Unknown surname\",\n\tUnattachedMember = \"Unattached member\",\n\tIgnoredMember = \"Ignored member\",\n\tUnknownAncestor = \"Unknown Ancestor\",\n}\n\nconst ALLOWED_FACTS: MultiTag[] = [\n\t\"EVEN\",\n\t\"OCCU\",\n\t\"OCCUPATIONS\",\n\t\"RESI\",\n\t\"BAPT\",\n\t\"CHRI\",\n\t\"CHR\",\n\t\"BURI\",\n\t\"EDUC\",\n\t\"GRAD\",\n\t\"DIV\",\n\t\"IMMI\",\n\t\"RELI\",\n\t\"_MILT\",\n\t\"_MILTID\",\n\t\"FACT\",\n\t\"_ORIG\",\n];\n\nconst DISALLOWED_CUSTOM_FACTS: string[] = [\"DNA Test\", \"Newspaper\"];\n\nconst CustomFactRenderers: Partial<\n\tRecord<MultiTag, (label: Common, fact: Common, indi?: IndiType) => void>\n> = {\n\tAKA: (label: Common, fact: Common, indi?: IndiType) => {\n\t\tconst originalNameObj = indi?.NAME;\n\t\tconst note = fact.get(\"NOTE\");\n\t\tconst factName = note?.toValue() as string | undefined;\n\n\t\tconst name = createCommonName(fact.getGedcom(), undefined, indi);\n\t\tconst suffix = originalNameObj?.NSFX?.toValue() as string | undefined;\n\t\tconst surname = originalNameObj?.SURN?.toValue() as string | undefined;\n\t\tconst givenname = originalNameObj?.GIVN?.toValue() as\n\t\t\t| string\n\t\t\t| undefined;\n\n\t\tconst nameParts: Array<{\n\t\t\tname: string;\n\t\t\tgivenname?: boolean;\n\t\t\tsurname?: boolean;\n\t\t\tsuffix?: boolean;\n\t\t}> = [\n\t\t\t...(givenname\n\t\t\t\t?.split(\" \")\n\t\t\t\t.map((s) => ({ name: s, givenname: true })) ?? []),\n\t\t\t...(surname?.split(\" \").map((s) => ({ name: s, surname: true })) ??\n\t\t\t\t[]),\n\t\t\t...(suffix?.split(\" \").map((s) => ({ name: s, suffix: true })) ??\n\t\t\t\t[]),\n\t\t].filter(Boolean);\n\n\t\tconst factParts = factName?.split(\" \");\n\t\tif (\n\t\t\tnameParts.length === factParts?.length &&\n\t\t\t!(note instanceof CommonName)\n\t\t) {\n\t\t\tconst guessedSuffix: string[] = [];\n\t\t\tconst guessedSurname: string[] = [];\n\t\t\tconst guessedGivenname: string[] = [];\n\t\t\tfactParts.forEach((f, i) => {\n\t\t\t\tconst namePart = nameParts[i];\n\t\t\t\tif (!f) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (namePart.suffix) {\n\t\t\t\t\tguessedSuffix.push(f);\n\t\t\t\t} else if (namePart.givenname) {\n\t\t\t\t\tguessedGivenname.push(f);\n\t\t\t\t} else if (namePart.surname) {\n\t\t\t\t\tguessedSurname.push(f);\n\t\t\t\t}\n\t\t\t});\n\t\t\tconst allNamePart: string[] = [];\n\t\t\tif (guessedGivenname.length) {\n\t\t\t\tallNamePart.push(guessedGivenname.join(\" \"));\n\t\t\t}\n\t\t\tif (guessedSurname.length) {\n\t\t\t\tallNamePart.push(`/${guessedSurname.join(\" \")}/`);\n\t\t\t}\n\t\t\tif (guessedSuffix.length) {\n\t\t\t\tallNamePart.push(guessedSuffix.join(\" \"));\n\t\t\t}\n\t\t\tname.value = allNamePart.join(\" \");\n\t\t} else {\n\t\t\tname.value = factName;\n\t\t}\n\n\t\tfact.set(\"NOTE\", name);\n\n\t\tlabel.value = \"AKA\";\n\t\tfact.set(\"_LABEL\", label);\n\t},\n};\n\nconst relativesOnLevelCache = relativesCache(\"relativesOnLevelCache\");\nconst relativesOnDegreeCache = relativesCache(\"relativesOnDegreeCache\");\n\nexport class Indi extends Common<string, IndiKey> implements IIndi {\n\tprivate _isUnknownAncestor?: boolean;\n\tprivate _isUnattachedMember?: boolean;\n\tprivate _isOrphanFamilyMember?: boolean;\n\tprivate _isUnknownGivenname?: boolean;\n\tprivate _isUnknownSurname?: boolean;\n\tprivate _isIgnoredPerson?: boolean;\n\tprivate _isEmpty?: boolean;\n\tprivate readonly _places?: Record<string, Place[]>;\n\n\ttoName() {\n\t\treturn this.get<Common>(\"NAME\")?.toValue();\n\t}\n\n\ttoNaturalName() {\n\t\treturn this.get<Common>(\"NAME\")?.toValue()?.replaceAll(\"/\", \"\");\n\t}\n\n\ttoList() {\n\t\treturn new Individuals().concat(\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tthis.id ? { [this.id]: this } : ({ ...[this] } as any)\n\t\t);\n\t}\n\n\tprivate generateTree(props: {\n\t\tgenerations: IndiTree | IndiGenealogy;\n\t\tlevel: number;\n\t\tfamIndex: number;\n\t\tindex: number;\n\t\tshowDescendants?: boolean;\n\t\toffspringSpouses?: boolean;\n\t\tancestorSpouses?: boolean;\n\t\tonlyDescendants?: boolean;\n\t\tmaxLevel?: number;\n\t\tminLevel?: number;\n\t\tdrawNonBiologicalAncestors?: boolean;\n\t\tancestorSiblings?: boolean;\n\t}) {\n\t\tconst {\n\t\t\tgenerations,\n\t\t\tlevel,\n\t\t\tindex,\n\t\t\tshowDescendants,\n\t\t\toffspringSpouses,\n\t\t\tancestorSpouses,\n\t\t\tonlyDescendants,\n\t\t\tmaxLevel,\n\t\t\tminLevel,\n\t\t\tdrawNonBiologicalAncestors,\n\t\t\tancestorSiblings,\n\t\t} = props;\n\t\tif (!this.id) {\n\t\t\tthrow new Error(\"Indi must have an id\");\n\t\t}\n\t\tconst isMainDescendantLevel = showDescendants && level <= 1;\n\t\tconst isDescendantLevel = showDescendants && level < 1;\n\t\tif (level < 1 && !isDescendantLevel) {\n\t\t\tthrow new Error(\"Arguments 2 must be greater than 0.\");\n\t\t}\n\n\t\tif (\n\t\t\t(maxLevel !== undefined && maxLevel < level) ||\n\t\t\t(minLevel !== undefined && minLevel > level)\n\t\t) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// Only for debug\n\t\t// if (level > 3) {\n\t\t// \treturn this;\n\t\t// }\n\n\t\tconst gens: IndiTree = generations ?? {\n\t\t\texisted: {},\n\t\t\ttree: {},\n\t\t\thalves: {},\n\t\t\tlastItems: {},\n\t\t};\n\n\t\tconst families = this.getFamiliesBiologicalFirst(\"FAMC\");\n\t\tconst familiesAllMember = families.getParents();\n\n\t\tfamilies.forEach((fam, famKey, famIndex) => {\n\t\t\tif (!this.id) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst id = fam.id;\n\t\t\tlet father = isDescendantLevel\n\t\t\t\t? undefined\n\t\t\t\t: fam.getHusband().index(0);\n\t\t\tlet mother = isDescendantLevel ? undefined : fam.getWife().index(0);\n\n\t\t\tconst children =\n\t\t\t\tisMainDescendantLevel && famIndex > 0\n\t\t\t\t\t? this.getChildren()\n\t\t\t\t\t: undefined;\n\n\t\t\tif (\n\t\t\t\tfather?.id &&\n\t\t\t\t(gens.existed[father.id] === Existed.YES ||\n\t\t\t\t\t(!drawNonBiologicalAncestors &&\n\t\t\t\t\t\tthis.getParentType(father.id) !==\n\t\t\t\t\t\t\tRelationType.BIOLOGICAL))\n\t\t\t) {\n\t\t\t\t// console.info(\n\t\t\t\t// \t\"Father already in tree\",\n\t\t\t\t// \tfather.toName(),\n\t\t\t\t// \tfather,\n\t\t\t\t// \tgens.existed[father.id]\n\t\t\t\t// );\n\t\t\t\tfather = undefined;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tmother?.id &&\n\t\t\t\t(gens.existed[mother.id] === Existed.YES ||\n\t\t\t\t\t(!drawNonBiologicalAncestors &&\n\t\t\t\t\t\tthis.getParentType(mother.id) !==\n\t\t\t\t\t\t\tRelationType.BIOLOGICAL))\n\t\t\t) {\n\t\t\t\t// console.info(\n\t\t\t\t// \t\"Mother already in tree\",\n\t\t\t\t// \tmother.toName(),\n\t\t\t\t// \tmother,\n\t\t\t\t// \tgens.existed[mother.id]\n\t\t\t\t// );\n\t\t\t\tmother = undefined;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t!id &&\n\t\t\t\t!father &&\n\t\t\t\t!mother &&\n\t\t\t\t(!children?.length || famIndex > 0)\n\t\t\t) {\n\t\t\t\treturn this;\n\t\t\t}\n\n\t\t\tlet fatherSpouses: Individuals | undefined;\n\n\t\t\tif (father && ancestorSpouses) {\n\t\t\t\tfatherSpouses = father\n\t\t\t\t\t.getCoParents()\n\t\t\t\t\t.orderBy(getMarriageAscAndChildBirth(father.id));\n\n\t\t\t\tif (drawNonBiologicalAncestors) {\n\t\t\t\t\tfatherSpouses = fatherSpouses\n\t\t\t\t\t\t.copy()\n\t\t\t\t\t\t.exclude(familiesAllMember);\n\t\t\t\t}\n\n\t\t\t\tif (mother) {\n\t\t\t\t\tfatherSpouses = fatherSpouses.except(mother);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet motherSpouses: Individuals | undefined;\n\t\t\tif (mother && ancestorSpouses) {\n\t\t\t\tmotherSpouses = mother\n\t\t\t\t\t.getCoParents()\n\t\t\t\t\t.orderBy(getMarriageAscAndChildBirth(mother.id));\n\n\t\t\t\tif (drawNonBiologicalAncestors) {\n\t\t\t\t\tmotherSpouses = motherSpouses\n\t\t\t\t\t\t.copy()\n\t\t\t\t\t\t.exclude(familiesAllMember);\n\t\t\t\t}\n\n\t\t\t\tif (father) {\n\t\t\t\t\tmotherSpouses = motherSpouses.except(father);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tlet childIndex = 0;\n\t\t\tconst amount = Math.pow(2, level - 1);\n\t\t\tconst half = Math.floor(amount / 2);\n\t\t\tconst closers: TreeMember & {\n\t\t\t\tchildren?: IndiType[];\n\t\t\t} = {\n\t\t\t\tid: id || this.id,\n\t\t\t\tindex,\n\t\t\t\tfather: isDescendantLevel\n\t\t\t\t\t? this.isMale()\n\t\t\t\t\t\t? this\n\t\t\t\t\t\t: undefined\n\t\t\t\t\t: onlyDescendants\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: father?.generateTree({\n\t\t\t\t\t\t\t\tgenerations: gens,\n\t\t\t\t\t\t\t\tlevel: level + 1,\n\t\t\t\t\t\t\t\tfamIndex: famIndex * 2,\n\t\t\t\t\t\t\t\tindex: index * 2,\n\t\t\t\t\t\t\t\tancestorSpouses,\n\t\t\t\t\t\t\t\tancestorSiblings,\n\t\t\t\t\t\t\t\tmaxLevel,\n\t\t\t\t\t\t\t\tminLevel,\n\t\t\t\t\t\t\t\tdrawNonBiologicalAncestors,\n\t\t\t\t\t\t\t}),\n\t\t\t\tfatherSpouses:\n\t\t\t\t\tfatherSpouses &&\n\t\t\t\t\t((fatherSpouses.values() ?? []) as IndiType[]),\n\t\t\t\tmother: isDescendantLevel\n\t\t\t\t\t? this.isFemale()\n\t\t\t\t\t\t? this\n\t\t\t\t\t\t: undefined\n\t\t\t\t\t: onlyDescendants\n\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t: mother?.generateTree({\n\t\t\t\t\t\t\t\tgenerations: gens,\n\t\t\t\t\t\t\t\tlevel: level + 1,\n\t\t\t\t\t\t\t\tfamIndex: famIndex * 2,\n\t\t\t\t\t\t\t\tindex: index * 2 + (famIndex > 0 ? 0 : 1),\n\t\t\t\t\t\t\t\tancestorSpouses,\n\t\t\t\t\t\t\t\tancestorSiblings,\n\t\t\t\t\t\t\t\tmaxLevel,\n\t\t\t\t\t\t\t\tminLevel,\n\t\t\t\t\t\t\t\tdrawNonBiologicalAncestors,\n\t\t\t\t\t\t\t}),\n\t\t\t\tmotherSpouses:\n\t\t\t\t\tmotherSpouses &&\n\t\t\t\t\t((motherSpouses.values() ?? []) as IndiType[]),\n\t\t\t\tchildren: children\n\t\t\t\t\t?.map((descendant) => {\n\t\t\t\t\t\tconst descendantTree = descendant.generateTree({\n\t\t\t\t\t\t\tgenerations: gens,\n\t\t\t\t\t\t\tlevel: level === 1 ? -1 : level - 1,\n\t\t\t\t\t\t\tfamIndex: 0,\n\t\t\t\t\t\t\tindex: childIndex++,\n\t\t\t\t\t\t\tshowDescendants: true,\n\t\t\t\t\t\t\toffspringSpouses,\n\t\t\t\t\t\t\tmaxLevel,\n\t\t\t\t\t\t\tminLevel,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (offspringSpouses) {\n\t\t\t\t\t\t\tconst spousesTrees = descendant\n\t\t\t\t\t\t\t\t.getCoParents()\n\t\t\t\t\t\t\t\t.orderBy(\n\t\t\t\t\t\t\t\t\tgetMarriageAscAndChildBirth(descendant.id)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t.map((spouse) => {\n\t\t\t\t\t\t\t\t\treturn spouse.generateTree({\n\t\t\t\t\t\t\t\t\t\tgenerations: gens,\n\t\t\t\t\t\t\t\t\t\tlevel: level === 1 ? -1 : level - 1,\n\t\t\t\t\t\t\t\t\t\tfamIndex: 0,\n\t\t\t\t\t\t\t\t\t\tindex: childIndex++,\n\t\t\t\t\t\t\t\t\t\tshowDescendants: true,\n\t\t\t\t\t\t\t\t\t\toffspringSpouses,\n\t\t\t\t\t\t\t\t\t\tmaxLevel,\n\t\t\t\t\t\t\t\t\t\tminLevel,\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn [descendantTree, ...spousesTrees];\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn [descendantTree];\n\t\t\t\t\t})\n\t\t\t\t\t.flat(),\n\t\t\t};\n\n\t\t\tif (!gens.tree[level]) {\n\t\t\t\tgens.tree[level] = [];\n\t\t\t}\n\t\t\tif (level < 0) {\n\t\t\t\tgens.tree[level].push(closers);\n\t\t\t} else {\n\t\t\t\tif (index >= half && gens.halves[level] === undefined) {\n\t\t\t\t\tgens.halves[level] = gens.tree[level].length;\n\t\t\t\t}\n\n\t\t\t\tgens.tree[level].push(closers);\n\t\t\t\tgens.lastItems[level] = closers;\n\t\t\t}\n\t\t\tif (father?.id) {\n\t\t\t\tgens.existed[father.id] = Existed.YES;\n\t\t\t}\n\n\t\t\tif (mother?.id) {\n\t\t\t\tgens.existed[mother.id] = Existed.YES;\n\t\t\t}\n\n\t\t\tclosers.children?.forEach(({ id }) => {\n\t\t\t\tif (id) {\n\t\t\t\t\tgens.existed[id] = Existed.YES;\n\t\t\t\t}\n\t\t\t});\n\t\t\t[\n\t\t\t\t...(closers.fatherSpouses ?? []),\n\t\t\t\t...(closers.motherSpouses ?? []),\n\t\t\t]?.forEach(({ id }) => {\n\t\t\t\tif (id) {\n\t\t\t\t\tgens.existed[id] = Existed.SPOUSE;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn this;\n\t}\n\n\tgetPlaces(type: PlaceType | PlaceType[] = [PlaceType.All], maxLevel = 1) {\n\t\tif (!this._gedcom || !this.id) {\n\t\t\treturn [];\n\t\t}\n\n\t\tconst cacheKey = JSON.stringify(type);\n\t\tif (this._places?.[cacheKey]) {\n\t\t\treturn this._places[cacheKey];\n\t\t}\n\n\t\tlet marriages: Common | List | undefined;\n\t\tif (\n\t\t\ttype?.includes(PlaceType.Marriage) ||\n\t\t\ttype?.includes(PlaceType.All)\n\t\t) {\n\t\t\tconst families = this.getFamilies(\"FAMS\");\n\n\t\t\t// if (families.length === 1) {\n\t\t\t// \tmarriages = families.index(0);\n\t\t\t// } else\n\t\t\tif (families.length >= 1) {\n\t\t\t\tmarriages = new List();\n\t\t\t\tfamilies.forEach((fam) => {\n\t\t\t\t\tif (fam.MARR) {\n\t\t\t\t\t\tconst newMarr = createCommon(\n\t\t\t\t\t\t\tthis._gedcom,\n\t\t\t\t\t\t\tundefined,\n\t\t\t\t\t\t\tthis\n\t\t\t\t\t\t);\n\t\t\t\t\t\tObject.assign(newMarr, fam.MARR);\n\t\t\t\t\t\tnewMarr.id = fam.id;\n\t\t\t\t\t\t(marriages as List).append(newMarr);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tlet usedIndi: IndiType | undefined;\n\t\t// let usedMaxLevel = maxLevel;\n\t\tif (marriages) {\n\t\t\tusedIndi = createIndi(this._gedcom, this.id);\n\t\t\tObject.assign(usedIndi, this, {\n\t\t\t\tMARR: marriages,\n\t\t\t});\n\t\t\t// usedMaxLevel = usedMaxLevel === 1 ? 2 : usedMaxLevel;\n\t\t}\n\n\t\tconst places = getPlaces(usedIndi || this, type, maxLevel);\n\n\t\treturn places;\n\t}\n\n\tgetTree(props?: {\n\t\tdescendants?: boolean;\n\t\toffspringSpouses?: boolean;\n\t\tancestorSpouses?: boolean;\n\t\tonlyDescendants?: boolean;\n\t\tmaxGen?: number;\n\t\tminGen?: number;\n\t\tdrawNonBiologicalAncestors?: boolean;\n\t\tancestorSiblings?: boolean;\n\t}) {\n\t\tconst {\n\t\t\tdescendants,\n\t\t\toffspringSpouses,\n\t\t\tancestorSpouses,\n\t\t\tonlyDescendants,\n\t\t\tmaxGen,\n\t\t\tminGen,\n\t\t\tdrawNonBiologicalAncestors,\n\t\t\tancestorSiblings,\n\t\t} = props ?? {};\n\t\tconst newGenerations: IndiTree = {\n\t\t\texisted: {},\n\t\t\ttree: {},\n\t\t\thalves: {},\n\t\t\tlastItems: {},\n\t\t};\n\t\tthis.generateTree({\n\t\t\tgenerations: newGenerations,\n\t\t\tlevel: 1,\n\t\t\tfamIndex: 0,\n\t\t\tindex: 0,\n\t\t\tshowDescendants: descendants,\n\t\t\toffspringSpouses,\n\t\t\tancestorSpouses,\n\t\t\tonlyDescendants,\n\t\t\tmaxLevel: maxGen,\n\t\t\tminLevel: minGen,\n\t\t\tdrawNonBiologicalAncestors,\n\t\t\tancestorSiblings,\n\t\t});\n\t\treturn Object.keys(newGenerations.tree)\n\t\t\t.toSorted((a, b) => Number(a) - Number(b))\n\t\t\t.map((key) => {\n\t\t\t\tconst gen = Number(key);\n\t\t\t\treturn {\n\t\t\t\t\tgen,\n\t\t\t\t\tindis: newGenerations.tree[gen],\n\t\t\t\t\thalf: newGenerations.halves[gen],\n\t\t\t\t};\n\t\t\t});\n\t}\n\n\tgetGenealogy(onlyStraight = false, showDescendants = false) {\n\t\tconst id = this.get(\"FAMC\")?.toList().index(0)?.toValue() as\n\t\t\t| FamKey\n\t\t\t| undefined;\n\t\tif (!id) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst own = this.isMale()\n\t\t\t? {\n\t\t\t\t\tfather: this,\n\t\t\t\t\tmother: !onlyStraight\n\t\t\t\t\t\t? this.getCoParents().index(0)\n\t\t\t\t\t\t: undefined,\n\t\t\t\t}\n\t\t\t: {\n\t\t\t\t\tmother: this,\n\t\t\t\t\tfather: !onlyStraight\n\t\t\t\t\t\t? this.getCoParents().index(0)\n\t\t\t\t\t\t: undefined,\n\t\t\t\t};\n\n\t\tconst newGenerations: IndiGenealogy = {\n\t\t\texisted: {\n\t\t\t\t[this.id!]: Existed.YES,\n\t\t\t},\n\t\t\ttree: {\n\t\t\t\t0: [\n\t\t\t\t\t{\n\t\t\t\t\t\tid,\n\t\t\t\t\t\tindex: 0,\n\t\t\t\t\t\t...own,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\thalves: { 0: 0 },\n\t\t\tlastItems: {},\n\t\t};\n\n\t\tthis.generateTree({\n\t\t\tgenerations: newGenerations,\n\t\t\tlevel: 1,\n\t\t\tfamIndex: 0,\n\t\t\tindex: 0,\n\t\t\tshowDescendants,\n\t\t});\n\n\t\tconst gens = Object.keys(newGenerations.tree).toSorted(\n\t\t\t(a, b) => Number(b) - Number(a)\n\t\t);\n\n\t\tconst genealogyGenerations: IndiGenealogyGenerations = {};\n\t\tconst genealogyResult: IndiGenealogyResult = {};\n\n\t\tgens.forEach((genIndex) => {\n\t\t\tconst gen = Number(genIndex);\n\t\t\tconst generation = newGenerations.tree[gen].flat();\n\n\t\t\tif (!genealogyGenerations[gen]) {\n\t\t\t\tgenealogyGenerations[gen] = {\n\t\t\t\t\tleft: [],\n\t\t\t\t\tmain: { left: [], right: [] },\n\t\t\t\t\tright: [],\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\tif (!genealogyGenerations[gen].left) {\n\t\t\t\t\tgenealogyGenerations[gen].left = [];\n\t\t\t\t}\n\t\t\t\tif (!genealogyGenerations[gen].main) {\n\t\t\t\t\tgenealogyGenerations[gen].main = { left: [], right: [] };\n\t\t\t\t}\n\t\t\t\tif (!genealogyGenerations[gen].right) {\n\t\t\t\t\tgenealogyGenerations[gen].right = [];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tgeneration.forEach((pack, index) => {\n\t\t\t\tconst members: {\n\t\t\t\t\tleft: Array<IndiType | undefined>;\n\t\t\t\t\tright: Array<IndiType | undefined>;\n\t\t\t\t} = { left: [], right: [] };\n\n\t\t\t\t[\"father\", \"mother\"].forEach((type, mIndex) => {\n\t\t\t\t\tconst key = type as keyof Pick<\n\t\t\t\t\t\tTreeMember,\n\t\t\t\t\t\t\"father\" | \"mother\"\n\t\t\t\t\t>;\n\t\t\t\t\tconst typedPack = pack?.[key];\n\t\t\t\t\tconst validIndex = index * 2 + mIndex;\n\t\t\t\t\tconst side =\n\t\t\t\t\t\tvalidIndex >= generation.length ? \"right\" : \"left\";\n\n\t\t\t\t\tif (typedPack) {\n\t\t\t\t\t\tmembers[side].push(typedPack);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\tif (!onlyStraight) {\n\t\t\t\t\t[\"father\", \"mother\"].forEach((type, mIndex) => {\n\t\t\t\t\t\tconst key = type as keyof Pick<\n\t\t\t\t\t\t\tTreeMember,\n\t\t\t\t\t\t\t\"father\" | \"mother\"\n\t\t\t\t\t\t>;\n\t\t\t\t\t\tconst typedPack = pack?.[key];\n\t\t\t\t\t\tconst validIndex = index * 2 + mIndex;\n\t\t\t\t\t\tconst side =\n\t\t\t\t\t\t\tvalidIndex >= generation.length ? \"right\" : \"left\";\n\n\t\t\t\t\t\tconst spouse =\n\t\t\t\t\t\t\tkey === \"father\" ? pack?.mother : pack?.father;\n\n\t\t\t\t\t\tconst spouses = (\n\t\t\t\t\t\t\ttypedPack?.getCoParents().values() ?? []\n\t\t\t\t\t\t).filter((item) => {\n\t\t\t\t\t\t\tif (item?.id === spouse?.id) {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (item!.id && !newGenerations.existed[item!.id]) {\n\t\t\t\t\t\t\t\tnewGenerations.existed[item!.id] = Existed.YES;\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}) as IndiType[];\n\n\t\t\t\t\t\tconst rawSiblings =\n\t\t\t\t\t\t\ttypedPack\n\t\t\t\t\t\t\t\t?.getSiblings()\n\t\t\t\t\t\t\t\t.orderBy(BIRTH_ASC)\n\t\t\t\t\t\t\t\t.values() ?? [];\n\n\t\t\t\t\t\tconst siblings = rawSiblings.reduce<\n\t\t\t\t\t\t\tArray<IndiType | undefined>\n\t\t\t\t\t\t>((acc, item, index) => {\n\t\t\t\t\t\t\tif (item!.id && !newGenerations.existed[item!.id]) {\n\t\t\t\t\t\t\t\tnewGenerations.existed[item!.id] = Existed.YES;\n\n\t\t\t\t\t\t\t\tconst siblingSpouses = (\n\t\t\t\t\t\t\t\t\titem?.getCoParents().values() ?? []\n\t\t\t\t\t\t\t\t).filter((siblingSpouse) => {\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tsiblingSpouse!.id &&\n\t\t\t\t\t\t\t\t\t\t!newGenerations.existed[\n\t\t\t\t\t\t\t\t\t\t\tsiblingSpouse!.id\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\tnewGenerations.existed[\n\t\t\t\t\t\t\t\t\t\t\tsiblingSpouse!.id\n\t\t\t\t\t\t\t\t\t\t] = Existed.YES;\n\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}) as IndiType[];\n\n\t\t\t\t\t\t\t\tif (siblingSpouses.length) {\n\t\t\t\t\t\t\t\t\tconst newValue = item?.isMale()\n\t\t\t\t\t\t\t\t\t\t? [item, ...siblingSpouses]\n\t\t\t\t\t\t\t\t\t\t: [...siblingSpouses, item];\n\n\t\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\t\t...acc,\n\t\t\t\t\t\t\t\t\t\t...(index > 0 &&\n\t\t\t\t\t\t\t\t\t\tnewValue.length > 1 &&\n\t\t\t\t\t\t\t\t\t\tacc[acc.length - 1] !== undefined\n\t\t\t\t\t\t\t\t\t\t\t? [undefined]\n\t\t\t\t\t\t\t\t\t\t\t: []),\n\t\t\t\t\t\t\t\t\t\t...newValue,\n\t\t\t\t\t\t\t\t\t\t...(index < rawSiblings.length - 1 &&\n\t\t\t\t\t\t\t\t\t\tnewValue.length > 1\n\t\t\t\t\t\t\t\t\t\t\t? [undefined]\n\t\t\t\t\t\t\t\t\t\t\t: []),\n\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn [...acc, item];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn acc;\n\t\t\t\t\t\t}, []) as Array<IndiType | undefined>;\n\n\t\t\t\t\t\tconst spouseMethod =\n\t\t\t\t\t\t\tkey === \"father\" ? \"unshift\" : \"push\";\n\t\t\t\t\t\tconst siblingMethod =\n\t\t\t\t\t\t\tside === \"left\" ? \"unshift\" : \"push\";\n\t\t\t\t\t\tmembers[side][spouseMethod](...spouses);\n\n\t\t\t\t\t\tif (siblings.length) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t(key === \"father\" && pack?.mother) ||\n\t\t\t\t\t\t\t\t(key === \"mother\" && pack?.father)\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tmembers[side][siblingMethod](undefined);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tmembers[side][siblingMethod](...siblings);\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tgenealogyGenerations[gen].main.left.push(\n\t\t\t\t\tmembers.left.length ? members.left : undefined\n\t\t\t\t);\n\t\t\t\tgenealogyGenerations[gen].main.right.push(\n\t\t\t\t\tmembers.right.length ? members.right : undefined\n\t\t\t\t);\n\t\t\t});\n\t\t});\n\n\t\tgens.forEach((genIndex) => {\n\t\t\tconst gen = Number(genIndex);\n\t\t\tconst prevGen = gen - 1;\n\n\t\t\tif (!genealogyGenerations[prevGen]) {\n\t\t\t\tgenealogyGenerations[prevGen] = {\n\t\t\t\t\tleft: [],\n\t\t\t\t\tmain: { left: [], right: [] },\n\t\t\t\t\tright: [],\n\t\t\t\t};\n\t\t\t}\n\n\t\t\t[\"left\", \"right\"].forEach((s) => {\n\t\t\t\tconst side = s as keyof MemberSide;\n\n\t\t\t\tif (!onlyStraight) {\n\t\t\t\t\tgenealogyGenerations[gen].main[side].forEach((pack) => {\n\t\t\t\t\t\tif (!pack) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst toRight = side === \"right\";\n\t\t\t\t\t\tconst orderedPack = pack;\n\n\t\t\t\t\t\torderedPack.forEach((indi) => {\n\t\t\t\t\t\t\tif (!indi) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst rawChildren =\n\t\t\t\t\t\t\t\tindi\n\t\t\t\t\t\t\t\t\t?.getChildren()\n\t\t\t\t\t\t\t\t\t.orderBy(BIRTH_ASC)\n\t\t\t\t\t\t\t\t\t.values() ?? [];\n\n\t\t\t\t\t\t\tconst children = rawChildren.reduce<\n\t\t\t\t\t\t\t\tArray<IndiType | undefined>\n\t\t\t\t\t\t\t>((acc, item, index) => {\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\titem!.id &&\n\t\t\t\t\t\t\t\t\t!newGenerations.existed[item!.id]\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tnewGenerations.existed[item!.id] =\n\t\t\t\t\t\t\t\t\t\tExisted.YES;\n\n\t\t\t\t\t\t\t\t\tconst childSpouses = (\n\t\t\t\t\t\t\t\t\t\titem?.getCoParents().values() ?? []\n\t\t\t\t\t\t\t\t\t).filter((childSpouse) => {\n\t\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\t\tchildSpouse!.id &&\n\t\t\t\t\t\t\t\t\t\t\t!newGenerations.existed[\n\t\t\t\t\t\t\t\t\t\t\t\tchildSpouse!.id\n\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t\tnewGenerations.existed[\n\t\t\t\t\t\t\t\t\t\t\t\tchildSpouse!.id\n\t\t\t\t\t\t\t\t\t\t\t] = Existed.YES;\n\t\t\t\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}) as IndiType[];\n\n\t\t\t\t\t\t\t\t\tif (childSpouses.length) {\n\t\t\t\t\t\t\t\t\t\tconst newValue = item?.isMale()\n\t\t\t\t\t\t\t\t\t\t\t? [item, ...childSpouses]\n\t\t\t\t\t\t\t\t\t\t\t: [...childSpouses, item];\n\n\t\t\t\t\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t\t\t\t\t...acc,\n\t\t\t\t\t\t\t\t\t\t\t...(index > 0 &&\n\t\t\t\t\t\t\t\t\t\t\tnewValue.length > 1 &&\n\t\t\t\t\t\t\t\t\t\t\tacc[acc.length - 1] !== undefined\n\t\t\t\t\t\t\t\t\t\t\t\t? [undefined]\n\t\t\t\t\t\t\t\t\t\t\t\t: []),\n\t\t\t\t\t\t\t\t\t\t\t...newValue,\n\t\t\t\t\t\t\t\t\t\t\t...(index <\n\t\t\t\t\t\t\t\t\t\t\t\trawChildren.length - 1 &&\n\t\t\t\t\t\t\t\t\t\t\tnewValue.length > 1\n\t\t\t\t\t\t\t\t\t\t\t\t? [undefined]\n\t\t\t\t\t\t\t\t\t\t\t\t: []),\n\t\t\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\treturn [...acc, item];\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\treturn acc;\n\t\t\t\t\t\t\t}, []) as Array<IndiType | undefined>;\n\n\t\t\t\t\t\t\tconst childMethod = \"push\";\n\n\t\t\t\t\t\t\tconst members: Array<\n\t\t\t\t\t\t\t\tArray<IndiType | undefined> | undefined\n\t\t\t\t\t\t\t> = [];\n\t\t\t\t\t\t\tif (children.length) {\n\t\t\t\t\t\t\t\tmembers[childMethod](children);\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (toRight) {\n\t\t\t\t\t\t\t\tgenealogyGenerations[prevGen].right.push(\n\t\t\t\t\t\t\t\t\t...members\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tgenealogyGenerations[prevGen].left.push(\n\t\t\t\t\t\t\t\t\t...members\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tif (genealogyGenerations[prevGen]) {\n\t\t\t\t\tgenealogyGenerations[prevGen] = {\n\t\t\t\t\t\tleft: [],\n\t\t\t\t\t\tmain: {\n\t\t\t\t\t\t\tleft: [\n\t\t\t\t\t\t\t\t...(genealogyGenerations[prevGen]?.left ?? []),\n\t\t\t\t\t\t\t\t...(genealogyGenerations[prevGen]?.main.left ??\n\t\t\t\t\t\t\t\t\t[]),\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tright: [\n\t\t\t\t\t\t\t\t...(genealogyGenerations[prevGen]?.main.right ??\n\t\t\t\t\t\t\t\t\t[]),\n\t\t\t\t\t\t\t\t...(genealogyGenerations[prevGen]?.right ?? []),\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t\tright: [],\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tgenealogyResult[gen] = {\n\t\t\t\t\tleft: [\n\t\t\t\t\t\t...(genealogyGenerations[gen]?.left ?? []),\n\t\t\t\t\t\t...(genealogyGenerations[gen]?.main.left ?? []),\n\t\t\t\t\t],\n\t\t\t\t\tright: [\n\t\t\t\t\t\t...(genealogyGenerations[gen]?.main.right ?? []),\n\t\t\t\t\t\t...(genealogyGenerations[gen]?.right ?? []),\n\t\t\t\t\t],\n\t\t\t\t};\n\t\t\t});\n\t\t});\n\n\t\tconst result: Array<MemberSide<IndiType, { gen: number }>> = [];\n\n\t\tgens.forEach((genIndex) => {\n\t\t\tresult.unshift({\n\t\t\t\tgen: Number(genIndex),\n\t\t\t\t...genealogyResult[Number(genIndex)],\n\t\t\t});\n\t\t});\n\n\t\treturn result;\n\t}\n\n\tancestryLink() {\n\t\tconst www = this._gedcom?.HEAD?.SOUR?.CORP?.WWW?.value;\n\t\tconst tree = this.getAncestryTreeId();\n\n\t\tif (this.id) {\n\t\t\treturn `https://${www}/family-tree/person/tree/${tree}/person/${this.id.replace(\n\t\t\t\t/@|I/g,\n\t\t\t\t\"\"\n\t\t\t)}/facts`;\n\t\t}\n\t}\n\n\tasync ancestryMedia(namespace?: string | number): Promise<MediaList> {\n\t\tconst list: MediaList = {};\n\t\tconst objIds = this.get(\"OBJE\")?.toValueList().keys() ?? [];\n\t\tconst www = this._gedcom?.HEAD?.SOUR?.CORP?.WWW?.value;\n\t\tconst tree = this.getAncestryTreeId();\n\n\t\tawait Promise.all(\n\t\t\tobjIds.map(async (objId) => {\n\t\t\t\tconst key = objId as ObjeKey;\n\t\t\t\tconst obje = this._gedcom\n\t\t\t\t\t?.obje(key)\n\t\t\t\t\t?.standardizeMedia(namespace, true, (ns, iId) => {\n\t\t\t\t\t\treturn ns && iId\n\t\t\t\t\t\t\t? `https://mediasvc.ancestry.com/v2/image/namespaces/${ns}/media/${iId}?client=trees-mediaservice&imageQuality=hq`\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\t\t});\n\n\t\t\t\tconst media = obje?.RIN?.value;\n\t\t\t\tconst clone = obje?.get(\"_CLON._OID\")?.toValue() as\n\t\t\t\t\t| string\n\t\t\t\t\t| undefined;\n\t\t\t\tconst mser = obje?.get(\"_MSER._LKID\")?.toValue() as\n\t\t\t\t\t| string\n\t\t\t\t\t| undefined;\n\t\t\t\tlet url = obje?.get(\"FILE\")?.toValue() as string | undefined;\n\t\t\t\tconst title =\n\t\t\t\t\t(obje?.get(\"TITL\")?.toValue() as string | undefined) ?? \"\";\n\t\t\t\tconst type =\n\t\t\t\t\t(obje?.get(\"FORM\")?.toValue() as string | undefined) ??\n\t\t\t\t\t\"raw\";\n\n\t\t\t\tconst imgId = clone || mser;\n\n\t\t\t\tif (!www || !tree || !this.id) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!namespace && !url) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst mediaDetailsResponse = await fetch(\n\t\t\t\t\t\t\t`https://www.ancestry.com/api/media/viewer/v2/trees/${tree}/media?id=${media}`\n\t\t\t\t\t\t);\n\t\t\t\t\t\tconst mediaDetails =\n\t\t\t\t\t\t\t(await mediaDetailsResponse.json()) as AncestryMedia;\n\t\t\t\t\t\tif (mediaDetails.url) {\n\t\t\t\t\t\t\turl = `${mediaDetails.url}&imageQuality=hq`;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch (_e) {\n\t\t\t\t\t\t//\n\t\t\t\t\t}\n\n\t\t\t\t\turl =\n\t\t\t\t\t\turl ||\n\t\t\t\t\t\t`https://${www}/mediaui-viewer/tree/${tree}/media/${media}`;\n\t\t\t\t}\n\n\t\t\t\tif (url && imgId) {\n\t\t\t\t\tconst id = `${tree}-${this.id}-${imgId}`;\n\t\t\t\t\tlist[id] = {\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tid,\n\t\t\t\t\t\ttree,\n\t\t\t\t\t\timgId,\n\t\t\t\t\t\tperson: this.id!,\n\t\t\t\t\t\ttitle: title as string,\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tcontentType: type as string,\n\t\t\t\t\t\tdownloadName: `${this.id!.replaceAll(\"@\", \"\")}_${\n\t\t\t\t\t\t\tthis.toNaturalName()!.replaceAll(\" \", \"-\") || \"\"\n\t\t\t\t\t\t}_${(\n\t\t\t\t\t\t\t(title as string) ||\n\t\t\t\t\t\t\tkey.replaceAll(\"@\", \"\").toString()\n\t\t\t\t\t\t).replaceAll(\" \", \"-\")}`,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\n\t\treturn list;\n\t}\n\n\tmyheritageLink(poolId = 0) {\n\t\tconst www = this._gedcom?.HEAD?.SOUR?.CORP?.value\n\t\t\t?.toLowerCase()\n\t\t\t.replace(/^www\\./gi, \"\");\n\t\tconst site = this.getMyHeritageTreeId();\n\t\tconst file = (\n\t\t\tthis._gedcom?.HEAD?.get(\"FILE\")?.toValue() as string | undefined\n\t\t)?.match(/Exported by MyHeritage.com from .+ in (?<site>.+) on .+$/)\n\t\t\t?.groups?.site;\n\t\tconst normalizedFile = file\n\t\t\t?.normalize(\"NFD\")\n\t\t\t.replace(/[\\u0300-\\u036f]/g, \"\")\n\t\t\t.toLowerCase()\n\t\t\t.replace(/[^a-z0-9]+/g, \"-\");\n\n\t\tif (normalizedFile && this.id) {\n\t\t\tconst id = Number(this.id.replace(/@|I/g, \"\")) + poolId;\n\t\t\treturn `https://www.${www}/site-family-tree-${site}/${normalizedFile}#!profile-${id}-info`;\n\t\t}\n\t}\n\n\tmyheritageMedia() {\n\t\tconst list: MediaList = {};\n\n\t\tconst tree = this.getMyHeritageTreeId();\n\n\t\tif (!tree) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst birthObj = this.get(\"BIRT.OBJE\")?.toList().values();\n\t\tconst deathObj = this.get(\"DEAT.OBJE\")?.toValueList().values();\n\n\t\tconst familiesObj = (this.get(\"FAMS\")?.toValueList().values() ?? [])\n\t\t\t.concat(this.get(\"FAMC\")?.toValueList().values() ?? [])\n\t\t\t.map((fam) => {\n\t\t\t\treturn fam?.get(\"MARR.OBJE\") as ObjeType | undefined;\n\t\t\t});\n\n\t\t(birthObj ?? [])\n\t\t\t.concat(deathObj ?? [])\n\t\t\t.concat(familiesObj ?? [])\n\t\t\t.forEach((o, index) => {\n\t\t\t\tif (!o) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst obje = o as ObjeType;\n\t\t\t\tconst key = `@O${index}@`;\n\n\t\t\t\tobje.standardizeMedia();\n\n\t\t\t\tconst url = obje?.get(\"FILE\")?.toValue() as string | undefined;\n\t\t\t\tconst title =\n\t\t\t\t\t(obje?.get(\"NOTE\")?.toValue() as string | undefined) ?? \"\";\n\t\t\t\tconst type =\n\t\t\t\t\t(obje?.get(\"FORM\")?.toValue() as string | undefined) ??\n\t\t\t\t\t\"raw\";\n\n\t\t\t\tconst imgId = obje?.get(\"_PHOTO_RIN\")?.toValue() as\n\t\t\t\t\t| string\n\t\t\t\t\t| undefined;\n\n\t\t\t\tif (url && imgId) {\n\t\t\t\t\tconst id = `${tree}-${this.id}-${imgId}`;\n\t\t\t\t\tlist[id] = {\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tid,\n\t\t\t\t\t\ttree,\n\t\t\t\t\t\timgId,\n\t\t\t\t\t\tperson: this.id!,\n\t\t\t\t\t\ttitle: title as string,\n\t\t\t\t\t\turl,\n\t\t\t\t\t\tcontentType: type as string,\n\t\t\t\t\t\tdownloadName: `${this.id!.replaceAll(\"@\", \"\")}_${\n\t\t\t\t\t\t\tthis.toNaturalName()!.replaceAll(\" \", \"-\") || \"\"\n\t\t\t\t\t\t}_${(\n\t\t\t\t\t\t\t(title as string) ||\n\t\t\t\t\t\t\tkey.replaceAll(\"@\", \"\").toString()\n\t\t\t\t\t\t).replaceAll(\" \", \"-\")}`,\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t});\n\t\treturn list;\n\t}\n\n\tfamilySearchLink() {\n\t\t// Get the _FS_LINK custom tag value and return it as-is\n\t\treturn this.get(\"_FS_LINK\")?.toValue() as string | undefined;\n\t}\n\n\thasFamilySearchMatches() {\n\t\t// Check if this individual has any _FS_MATCH tags\n\t\treturn this.get(\"_FS_MATCH\") !== undefined;\n\t}\n\n\tgetFamilySearchMatches(): FamilySearchMatch[] {\n\t\t// Get all _FS_MATCH tags for this individual\n\t\tconst matchTags = this.get(\"_FS_MATCH\")?.toList();\n\n\t\tif (!matchTags?.length) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn matchTags.map((matchTag): FamilySearchMatch => {\n\t\t\tconst id = matchTag.toValue() as string | undefined;\n\n\t\t\t// Extract all sub-tags using get() method\n\t\t\tconst title = matchTag.get(\"TITL\")?.toValue() as string | undefined;\n\t\t\tconst type = matchTag.get(\"TYPE\")?.toValue() as string | undefined;\n\t\t\tconst ref = matchTag.get(\"REF\")?.toValue() as string | undefined;\n\t\t\tconst scoreStr = matchTag.get(\"SCORE\")?.toValue() as\n\t\t\t\t| string\n\t\t\t\t| undefined;\n\t\t\tconst text = matchTag.get(\"TEXT\")?.toValue() as string | undefined;\n\t\t\tconst www = matchTag.get(\"WWW\")?.toValue() as string | undefined;\n\n\t\t\t// Extract NOTE tags (there can be multiple)\n\t\t\tconst noteTags = matchTag.get(\"NOTE\")?.toList() || [];\n\t\t\tconst notes = noteTags\n\t\t\t\t.map((note) => note.toValue() as string)\n\t\t\t\t.filter(Boolean) as string[];\n\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\ttitle,\n\t\t\t\ttype,\n\t\t\t\tref,\n\t\t\t\tscore: scoreStr ? parseFloat(scoreStr) : undefined,\n\t\t\t\ttext,\n\t\t\t\twww,\n\t\t\t\tnotes,\n\t\t\t};\n\t\t});\n\t}\n\n\thasFamilySearchSources() {\n\t\t// Check if this individual has any _FS_SOUR tags\n\t\treturn this.get(\"_FS_SOUR\") !== undefined;\n\t}\n\n\tgetFamilySearchSources(): FamilySearchSource[] {\n\t\t// Get all _FS_SOUR tags for this individual\n\t\tconst sourceTags = this.get(\"_FS_SOUR\")?.toList();\n\n\t\tif (!sourceTags?.length) {\n\t\t\treturn [];\n\t\t}\n\n\t\treturn sourceTags.map((sourceTag): FamilySearchSource => {\n\t\t\tconst id = sourceTag.toValue() as string | undefined;\n\n\t\t\t// Extract all sub-tags using get() method\n\t\t\tconst title = sourceTag.get(\"TITL\")?.toValue() as\n\t\t\t\t| string\n\t\t\t\t| undefined;\n\t\t\tconst text = sourceTag.get(\"TEXT\")?.toValue() as string | undefined;\n\t\t\tconst www = sourceTag.get(\"WWW\")?.toValue() as string | undefined;\n\n\t\t\t// Extract NOTE tags (there can be multiple)\n\t\t\tconst noteTags = sourceTag.get(\"NOTE\")?.toList() || [];\n\t\t\tconst notes = noteTags\n\t\t\t\t.map((note) => note.toValue() as string)\n\t\t\t\t.filter(Boolean) as string[];\n\n\t\t\treturn {\n\t\t\t\tid,\n\t\t\t\ttitle,\n\t\t\t\ttext,\n\t\t\t\twww,\n\t\t\t\tnotes,\n\t\t\t};\n\t\t});\n\t}\n\n\tasync multimedia(\n\t\tnamespace?: string | number\n\t): Promise<MediaList | undefined> {\n\t\tif (this?.isAncestry()) {\n\t\t\treturn await this.ancestryMedia(namespace);\n\t\t}\n\n\t\tif (this?.isMyHeritage()) {\n\t\t\treturn this.myheritageMedia();\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tlink(poolId?: number) {\n\t\tif (this?.isAncestry()) {\n\t\t\treturn this.ancestryLink();\n\t\t}\n\n\t\tif (this?.isMyHeritage()) {\n\t\t\treturn this.myheritageLink(poolId);\n\t\t}\n\n\t\tif (this?.isFamilySearch()) {\n\t\t\treturn this.familySearchLink();\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\ttoFamilies(list?: List): Families {\n\t\tconst families = new Families();\n\n\t\tlist?.forEach((fam, famId) => {\n\t\t\tconst family = fam?.ref as FamType | undefined;\n\n\t\t\tif (family) {\n\t\t\t\tfamilies.item(famId as FamKey, family);\n\t\t\t}\n\t\t});\n\n\t\treturn families;\n\t}\n\n\tgetFamilies(type: \"FAMC\" | \"FAMS\") {\n\t\treturn this.toFamilies(this.get(type)?.toValueList());\n\t}\n\n\tgetFamiliesBiologicalFirst(type: \"FAMC\" | \"FAMS\") {\n\t\tconst families = this.toFamilies(this.get(type)?.toValueList());\n\n\t\treturn families.orderBy((famB, _famBKey, famA) => {\n\t\t\tconst husbA = famA.getHusband().index(0);\n\t\t\tconst wifeA = famA.getWife().index(0);\n\t\t\tconst husbAType = husbA && this.getParentType(husbA);\n\t\t\tconst wifeAType = wifeA && this.getParentType(wifeA);\n\n\t\t\tconst husbB = famB.getHusband().index(0);\n\t\t\tconst wifeB = famB.getWife().index(0);\n\t\t\tconst husbBType = husbB && this.getParentType(husbB);\n\t\t\tconst wifeBType = wifeB && this.getParentType(wifeB);\n\n\t\t\tif (\n\t\t\t\thusbAType === RelationType.BIOLOGICAL &&\n\t\t\t\twifeAType === RelationType.BIOLOGICAL\n\t\t\t) {\n\t\t\t\tif (\n\t\t\t\t\thusbBType === RelationType.BIOLOGICAL &&\n\t\t\t\t\twifeBType === RelationType.BIOLOGICAL\n\t\t\t\t) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\treturn 1;\n\t\t\t} else if (husbAType === RelationType.BIOLOGICAL) {\n\t\t\t\tif (\n\t\t\t\t\thusbBType === RelationType.BIOLOGICAL &&\n\t\t\t\t\twifeBType === RelationType.BIOLOGICAL\n\t\t\t\t) {\n\t\t\t\t\treturn -1;\n\t\t\t\t} else if (husbBType === RelationType.BIOLOGICAL) {\n\t\t\t\t\treturn 0;\n\t\t\t\t}\n\t\t\t\treturn 1;\n\t\t\t} else if (wifeAType === RelationType.BIOLOGICAL) {\n\t\t\t\tif (\n\t\t\t\t\thusbBType === RelationType.BIOLOGICAL &&\n\t\t\t\t\twifeBType === RelationType.BIOLOGICAL\n\t\t\t\t) {\n\t\t\t\t\treturn -1;\n\t\t\t\t} else if (husbBType === RelationType.BIOLOGICAL) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\thusbBType === RelationType.BIOLOGICAL ||\n\t\t\t\twifeBType === RelationType.BIOLOGICAL\n\t\t\t) {\n\t\t\t\treturn -1;\n\t\t\t}\n\n\t\t\treturn 0;\n\t\t});\n\t}\n\n\tgetBirthDate(showDays = false, shortNote = true, showNote = true) {\n\t\tconst dates = dateFormatter(\n\t\t\tthis,\n\t\t\tfalse,\n\t\t\tshowDays,\n\t\t\tfalse,\n\t\t\tshortNote,\n\t\t\tshowNote\n\t\t);\n\t\treturn dates.birth || undefined;\n\t}\n\n\tgetDeathDate(showDays = false, shortNote = true, showNote = true) {\n\t\tconst dates = dateFormatter(\n\t\t\tthis,\n\t\t\tfalse,\n\t\t\tshowDays,\n\t\t\tfalse,\n\t\t\tshortNote,\n\t\t\tshowNote\n\t\t);\n\t\treturn dates.death || undefined;\n\t}\n\n\tgetBirthPlace() {\n\t\tconst birthEvent = this.get(\"BIRT\")?.toList().index(0) as\n\t\t\t| IEventDetailStructure\n\t\t\t| undefined;\n\t\treturn birthEvent?.PLAC?.value;\n\t}\n\n\tgetDeathPlace() {\n\t\tconst deathEvent = this.get(\"DEAT\")?.toList().index(0) as\n\t\t\t| IEventDetailStructure\n\t\t\t| undefined;\n\t\treturn deathEvent?.PLAC?.value;\n\t}\n\n\tisDead() {\n\t\treturn (\n\t\t\tthis.get(\"DEAT.DATE\")?.toValue() !== undefined ||\n\t\t\tthis.get(\"DEAT.PLAC\")?.toValue() !== undefined\n\t\t);\n\t}\n\n\tisEmpty() {\n\t\tif (this._isEmpty !== undefined) {\n\t\t\treturn this._isEmpty;\n\t\t}\n\n\t\tconst keysLength = Object.keys(this).filter((key) => {\n\t\t\treturn (\n\t\t\t\t!key.startsWith(\"_\") &&\n\t\t\t\t![\"gedcom\", \"isListable\", \"refType\"].includes(key)\n\t\t\t);\n\t\t}).length;\n\n\t\tthis._isEmpty = !keysLength;\n\n\t\treturn this._isEmpty;\n\t}\n\n\tisUnknownAncestor() {\n\t\tif (this._isUnknownAncestor !== undefined) {\n\t\t\treturn this._isUnknownAncestor;\n\t\t}\n\n\t\tthis._isUnknownAncestor = !!this.get(\"_MTTAG\")\n\t\t\t?.toList()\n\t\t\t?.values()\n\t\t\t.find(\n\t\t\t\t(tag) =>\n\t\t\t\t\ttag?.get(\"NAME\")?.toValue() === CustomTags.UnknownAncestor\n\t\t\t);\n\n\t\treturn this._isUnknownAncestor;\n\t}\n\n\tisIgnoredMember() {\n\t\tif (this._isIgnoredPerson !== undefined) {\n\t\t\treturn this._isIgnoredPerson;\n\t\t}\n\n\t\tthis._isIgnoredPerson = !!this.get(\"_MTTAG\")\n\t\t\t?.toList()\n\t\t\t?.values()\n\t\t\t.find(\n\t\t\t\t(tag) =>\n\t\t\t\t\ttag?.get(\"NAME\")?.toValue() === CustomTags.IgnoredMember\n\t\t\t);\n\n\t\treturn this._isIgnoredPerson;\n\t}\n\n\tisUnattachedMember() {\n\t\tif (this._isUnattachedMember !== undefined) {\n\t\t\treturn this._isUnattachedMember;\n\t\t}\n\n\t\tthis._isUnattachedMember = !!this.get(\"_MTTAG\")\n\t\t\t?.toList()\n\t\t\t?.values()\n\t\t\t.find(\n\t\t\t\t(tag) =>\n\t\t\t\t\ttag?.get(\"NAME\")?.toValue() === CustomTags.UnattachedMember\n\t\t\t);\n\n\t\treturn this._isUnattachedMember;\n\t}\n\n\tisOrphanFamilyMember() {\n\t\tif (this._isOrphanFamilyMember !== undefined) {\n\t\t\treturn this._isOrphanFamilyMember;\n\t\t}\n\n\t\t// Check if any of the person's families (FAMC or FAMS) has the _IS_ORPHAN_FAMILY tag\n\t\tconst famcFamilies = this.getFamilies(\"FAMC\");\n\t\tconst famsFamilies = this.getFamilies(\"FAMS\");\n\n\t\tthis._isOrphanFamilyMember = false;\n\n\t\t// Check FAMC families\n\t\tfamcFamilies.forEach((fam) => {\n\t\t\tif (fam._IS_ORPHAN_FAMILY?.value === \"Y\") {\n\t\t\t\tthis._isOrphanFamilyMember = true;\n\t\t\t}\n\t\t});\n\n\t\t// Check FAMS families if not already found\n\t\tif (!this._isOrphanFamilyMember) {\n\t\t\tfamsFamilies.forEach((fam) => {\n\t\t\t\tif (fam._IS_ORPHAN_FAMILY?.value === \"Y\") {\n\t\t\t\t\tthis._isOrphanFamilyMember = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn this._isOrphanFamilyMember;\n\t}\n\n\tisUnknownGivenname() {\n\t\tif (this._isUnknownGivenname !== undefined) {\n\t\t\treturn this._isUnknownGivenname;\n\t\t}\n\n\t\tthis._isUnknownGivenname = !!this.get(\"_MTTAG\")\n\t\t\t?.toList()\n\t\t\t?.values()\n\t\t\t.find(\n\t\t\t\t(tag) =>\n\t\t\t\t\ttag?.get(\"NAME\")?.toValue() === CustomTags.UnknownGivenname\n\t\t\t);\n\t\treturn this._isUnknownGivenname;\n\t}\n\n\tisUnknownSurname() {\n\t\tif (this._isUnknownSurname !== undefined) {\n\t\t\treturn this._isUnknownSurname;\n\t\t}\n\n\t\tthis._isUnknownSurname = !!this.get(\"_MTTAG\")\n\t\t\t?.toList()\n\t\t\t?.values()\n\t\t\t.find(\n\t\t\t\t(tag) =>\n\t\t\t\t\ttag?.get(\"NAME\")?.toValue() === CustomTags.UnknownSurname\n\t\t\t);\n\t\treturn this._isUnknownSurname;\n\t}\n\n\tisNonRelevantMember() {\n\t\treturn this.isUnknownAncestor() || this.isUnattachedMember();\n\t}\n\n\tisMale() {\n\t\treturn this.get(\"SEX\")?.toValue() === \"M\";\n\t}\n\n\tisFemale() {\n\t\treturn this.get(\"SEX\")?.toValue() === \"F\";\n\t}\n\n\tisUnknownSex() {\n\t\treturn !this.isMale() && !this.isFemale();\n\t}\n\n\tgetParentType(id: IndiType | IndiKey) {\n\t\tlet indi: IndiType | undefined;\n\t\tif (typeof id === \"string\" || typeof id === \"number\") {\n\t\t\tindi = this._gedcom?.indi(id);\n\t\t} else {\n\t\t\tindi = id;\n\t\t}\n\n\t\tif (!indi?.id || !this.id) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst parents = this.getParents();\n\n\t\tlet parent = parents.item(indi.id) ? indi : undefined;\n\t\tlet child = this._gedcom?.indi(this.id);\n\n\t\tif (!parent?.id) {\n\t\t\tconst children = this.getChildren();\n\n\t\t\tif (children.item(indi.id)) {\n\t\t\t\tparent = this._gedcom?.indi(this.id);\n\t\t\t\tchild = indi;\n\t\t\t}\n\t\t}\n\n\t\tconst familiesOfChildren = child?.get(\"FAMC\")?.toValueList();\n\t\tif (!parent?.id || !child?.id || !familiesOfChildren) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst families = this.toFamilies(familiesOfChildren);\n\n\t\tlet childType = \"\";\n\t\tfamilies.forEach((family) => {\n\t\t\tif (childType) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst fatherId = family.get(\"HUSB\")?.toValue() as\n\t\t\t\t| IndiKey\n\t\t\t\t| undefined;\n\t\t\tconst motherId = family.get(\"WIFE\")?.toValue() as\n\t\t\t\t| IndiKey\n\t\t\t\t| undefined;\n\n\t\t\tconst usedRel =\n\t\t\t\tparent?.id === fatherId\n\t\t\t\t\t? \"_FREL\"\n\t\t\t\t\t: parent?.id === motherId\n\t\t\t\t\t\t? \"_MREL\"\n\t\t\t\t\t\t: undefined;\n\n\t\t\tif (!usedRel || !child?.id) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst famChild =\n\t\t\t\tthis.id && family.CHIL?.toValueList().item(child.id);\n\n\t\t\tif (!famChild) {\n\t\t\t\tconst childIndi = this._gedcom?.indi(child.id as IndiKey);\n\t\t\t\tconst childState = childIndi\n\t\t\t\t\t?.get(\"FAMC\")\n\t\t\t\t\t?.toList()\n\t\t\t\t\t?.filter((item) => item.value === family.id)\n\t\t\t\t\t.index(0);\n\n\t\t\t\tchildType =\n\t\t\t\t\t(childState?.get(\"PEDI\")?.toValue() as string) ||\n\t\t\t\t\tRelationType.BIOLOGICAL;\n\t\t\t} else {\n\t\t\t\tchildType =\n\t\t\t\t\t(famChild.get(usedRel)?.toValue() as string) ||\n\t\t\t\t\tRelationType.BIOLOGICAL;\n\t\t\t}\n\t\t});\n\n\t\treturn (\n\t\t\tchildType || RelationType.BIOLOGICAL\n\t\t).toLowerCase() as RelationType;\n\t}\n\n\thasFacts() {\n\t\tconst dates = dateFormatter(this, true);\n\n\t\tif (dates.inArray.length) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst facts = this.getFacts(1);\n\n\t\treturn !!facts.length;\n\t}\n\n\tgetLinks() {\n\t\treturn this.get(\"_WLNK\")?.toList() as\n\t\t\t| List<IdType, Required<IIndividualStructure>[\"_WLNK\"]>\n\t\t\t| undefined;\n\t}\n\n\tgetAkas(limit?: number) {\n\t\treturn this.getFacts(limit, \"AKA\");\n\t}\n\n\tgetFacts(limit?: number, filter?: MultiTag | MultiTag[]) {\n\t\tconst filters = (Array.isArray(filter) ? filter : [filter]).filter(\n\t\t\tBoolean\n\t\t);\n\t\tconst facts = new List();\n\t\tlet id = 0;\n\t\tALLOWED_FACTS.forEach((fact) => {\n\t\t\tconst isCustom = [\"EVEN\", \"FACT\"].includes(fact);\n\t\t\tif (filters.length && !filters.includes(fact) && !isCustom) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst factCommon = this.get(fact);\n\t\t\tconst factCommons = factCommon?.toList();\n\n\t\t\tfactCommons?.forEach((common, _, index) => {\n\t\t\t\tif (limit !== undefined && index >= limit) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (!common) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst newCommon = createCommon(\n\t\t\t\t\tthis._gedcom,\n\t\t\t\t\t`${id}` as IdType,\n\t\t\t\t\tthis\n\t\t\t\t);\n\t\t\t\tObject.assign(newCommon, common, { id: id });\n\n\t\t\t\tconst type = (\n\t\t\t\t\tisCustom ? newCommon.get(\"TYPE\")?.toValue() : fact\n\t\t\t\t) as MultiTag | undefined;\n\n\t\t\t\tif (!type || DISALLOWED_CUSTOM_FACTS.includes(type)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (filters.length && !filters.includes(type) && isCustom) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst label = createCommon(this._gedcom, undefined, this);\n\t\t\t\tconst customRenderer = CustomFactRenderers[type];\n\n\t\t\t\tif (customRenderer) {\n\t\t\t\t\tcustomRenderer(label, newCommon, this);\n\t\t\t\t} else {\n\t\t\t\t\tlabel.value = type;\n\t\t\t\t\tnewCommon.set(\"_LABEL\", label);\n\t\t\t\t}\n\t\t\t\t// common.id = common.id || (`${id}` as IdType);\n\t\t\t\tid++;\n\n\t\t\t\tfacts.append(newCommon);\n\t\t\t});\n\t\t});\n\n\t\treturn facts.orderBy(DATE_ASC);\n\t}\n\n\tcommonAncestor(\n\t\tperson?: IndiKey | IndiType,\n\t\toptions?: {\n\t\t\tbreakAfterSpouse?: boolean;\n\t\t\tbreakAfterNonBiological?: boolean;\n\t\t}\n\t): IndiType | undefined {\n\t\tconst path = this.path(person, options);\n\n\t\tlet wentUp = false;\n\t\tconst wentDown = false;\n\t\tlet lastItem: PathItem | undefined;\n\t\tlet ancestor: IndiType | undefined;\n\n\t\tpath?.forEach((item) => {\n\t\t\tif (wentDown) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (lastItem) {\n\t\t\t\tif (item.level > lastItem.level) {\n\t\t\t\t\twentUp = true;\n\t\t\t\t}\n\t\t\t\tif (item.level < lastItem.level) {\n\t\t\t\t\twentUp = true;\n\n\t\t\t\t\tif (wentUp && !ancestor) {\n\t\t\t\t\t\tancestor = lastItem.indi;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tlastItem = item;\n\t\t});\n\n\t\treturn ancestor;\n\t}\n\n\tpath(\n\t\tperson?: IndiKey | IndiType,\n\t\toptions?: {\n\t\t\tbreakAfterSpouse?: boolean;\n\t\t\tbreakAfterNonBiological?: boolean;\n\t\t}\n\t): ReducedPath | undefined {\n\t\tconst { breakAfterSpouse = true, breakAfterNonBiological } =\n\t\t\toptions ?? {};\n\t\tconst usedIndi =\n\t\t\ttypeof person === \"string\" ? this._gedcom?.indi(person) : person;\n\n\t\tif (!this.id || !usedIndi?.id) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst cacheKey = `${this.id}|${usedIndi.id}` as `${IndiKey}|${IndiKey}`;\n\t\tconst cache = pathCache(cacheKey);\n\t\tif (cache) {\n\t\t\treturn cache;\n\t\t}\n\n\t\tconst visited = new Individuals().append(this);\n\n\t\tconst mainItem: PathItem = {\n\t\t\tindi: this,\n\t\t\tlevel: 0,\n\t\t\tlevelUp: 0,\n\t\t\tlevelDown: 0,\n\t\t\tdegree: 0,\n\t\t\tkinship: \"self\",\n\t\t};\n\t\tconst path = [mainItem];\n\t\tif (this.id === usedIndi.id) {\n\t\t\treturn path;\n\t\t}\n\n\t\tconst queue: Queue = [\n\t\t\t{\n\t\t\t\t...mainItem,\n\t\t\t\tpath,\n\t\t\t},\n\t\t];\n\n\t\t// Breadth-first search to find the shortest path\n\t\tlet helper = 0;\n\t\twhile (queue.length > 0) {\n\t\t\tif (helper++ > 1000000) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tconst {\n\t\t\t\tindi,\n\t\t\t\tpath,\n\t\t\t\tkinship,\n\t\t\t\trelation,\n\t\t\t\tlevel,\n\t\t\t\tlevelUp,\n\t\t\t\tlevelDown,\n\t\t\t\tdegree,\n\t\t\t\tbreakOnNext,\n\t\t\t\tbreakAfterNext,\n\t\t\t\tinLaw,\n\t\t\t} = queue.shift() as QueueItem;\n\n\t\t\tif (usedIndi.id === indi.id) {\n\t\t\t\tif (breakOnNext) {\n\t\t\t\t\treturn undefined;\n\t\t\t\t}\n\n\t\t\t\tpathCache(cacheKey, path);\n\t\t\t\treturn path;\n\t\t\t}\n\t\t\tvisited.append(indi);\n\n\t\t\tconst additional: Partial<PathItem> = {};\n\n\t\t\tif (breakOnNext || breakAfterNext) {\n\t\t\t\tadditional.breakOnNext = breakOnNext || breakAfterNext;\n\t\t\t}\n\t\t\tif (inLaw) {\n\t\t\t\tadditional.inLaw = inLaw;\n\t\t\t}\n\n\t\t\tif (kinship === \"spouse\" && breakAfterSpouse) {\n\t\t\t\tif (path.length <= 2) {\n\t\t\t\t\tadditional.inLaw = true;\n\t\t\t\t} else {\n\t\t\t\t\tadditional.breakOnNext = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Direct relatives: Parents and Children\n\t\t\tif (kinship !== \"child\" || !breakAfterSpouse) {\n\t\t\t\tindi.getBiologicalFathers()\n\t\t\t\t\t.copy()\n\t\t\t\t\t.merge(indi.getBiologicalMothers())\n\t\t\t\t\t.merge(indi.getFathers().copy().merge(indi.getMothers()))\n\t\t\t\t\t.forEach((relative) => {\n\t\t\t\t\t\tif (!visited.has(relative)) {\n\t\t\t\t\t\t\tconst currentRelation =\n\t\t\t\t\t\t\t\tindi.getParentType(relative);\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tbreakAfterNonBiological &&\n\t\t\t\t\t\t\t\tcurrentRelation !== RelationType.BIOLOGICAL\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tadditional.breakAfterNext = true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst newItem: PathItem = {\n\t\t\t\t\t\t\t\tindi: relative,\n\t\t\t\t\t\t\t\tkinship: \"parent\",\n\t\t\t\t\t\t\t\trelation:\n\t\t\t\t\t\t\t\t\tcurrentRelation &&\n\t\t\t\t\t\t\t\t\tcurrentRelation !== RelationType.BIOLOGICAL\n\t\t\t\t\t\t\t\t\t\t? currentRelation\n\t\t\t\t\t\t\t\t\t\t: relation,\n\t\t\t\t\t\t\t\tlevel: level + 1,\n\t\t\t\t\t\t\t\tlevelUp: levelUp + 1,\n\t\t\t\t\t\t\t\tlevelDown,\n\t\t\t\t\t\t\t\tdegree,\n\t\t\t\t\t\t\t\t...additional,\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\tqueue.push({\n\t\t\t\t\t\t\t\t...newItem,\n\t\t\t\t\t\t\t\tpath: [...path, newItem],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t}\n\n\t\t\tindi.getChildren().forEach((relative) => {\n\t\t\t\tif (!visited.has(relative)) {\n\t\t\t\t\tconst currentRelation = relative.getParentType(indi);\n\t\t\t\t\tif (\n\t\t\t\t\t\tbreakAfterNonBiological &&\n\t\t\t\t\t\tcurrentRelation !== RelationType.BIOLOGICAL\n\t\t\t\t\t) {\n\t\t\t\t\t\tadditional.breakAfterNext = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tconst newItem: PathItem = {\n\t\t\t\t\t\tindi: relative,\n\t\t\t\t\t\tkinship: \"child\",\n\t\t\t\t\t\trelation:\n\t\t\t\t\t\t\tcurrentRelation &&\n\t\t\t\t\t\t\tcurrentRelation !== RelationType.BIOLOGICAL\n\t\t\t\t\t\t\t\t? currentRelation\n\t\t\t\t\t\t\t\t: relation,\n\t\t\t\t\t\tlevel: level - 1,\n\t\t\t\t\t\tlevelUp,\n\t\t\t\t\t\tlevelDown: levelDown + 1,\n\n\t\t\t\t\t\tdegree: levelUp\n\t\t\t\t\t\t\t? level > 0\n\t\t\t\t\t\t\t\t? levelUp - level + 1\n\t\t\t\t\t\t\t\t: levelDown - Math.abs(level)\n\t\t\t\t\t\t\t: 0,\n\t\t\t\t\t\t...additional,\n\t\t\t\t\t};\n\t\t\t\t\tqueue.push({\n\t\t\t\t\t\t...newItem,\n\t\t\t\t\t\tpath: [...path, newItem],\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// Spouses\n\t\t\tindi.getCoParents().forEach((relative) => {\n\t\t\t\tif (!visited.has(relative)) {\n\t\t\t\t\tconst currentAddition: Partial<PathItem> = {};\n\n\t\t\t\t\tif (relation && relation !== RelationType.BIOLOGICAL) {\n\t\t\t\t\t\tcurrentAddition.relation = relation;\n\t\t\t\t\t}\n\t\t\t\t\tif (inLaw) {\n\t\t\t\t\t\tcurrentAddition.breakOnNext = true;\n\t\t\t\t\t}\n\t\t\t\t\tconst newItem: PathItem = {\n\t\t\t\t\t\tindi: relative,\n\t\t\t\t\t\tkinship: \"spouse\",\n\t\t\t\t\t\tlevel,\n\t\t\t\t\t\tlevelUp,\n\t\t\t\t\t\tlevelDown,\n\t\t\t\t\t\tdegree,\n\t\t\t\t\t\t...additional,\n\t\t\t\t\t\t...currentAddition,\n\t\t\t\t\t};\n\t\t\t\t\tqueue.push({\n\t\t\t\t\t\t...newItem,\n\t\t\t\t\t\tpath: [...path, newItem],\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn undefined;\n\t}\n\n\tkinship<T extends boolean | undefined>(\n\t\tother?: IndiKey | IndiType,\n\t\tshowMainPerson?: boolean,\n\t\tlang: Language = \"en\",\n\t\tentirePath?: T,\n\t\tdisplayName: \"none\" | \"givenname\" | \"surname\" | \"all\" = \"givenname\"\n\t) {\n\t\tconst KinshipTranslatorClass = getKinshipTranslatorClass();\n\t\tconst translator = new KinshipTranslatorClass(\n\t\t\tthis,\n\t\t\tother,\n\t\t\tlang,\n\t\t\tentirePath,\n\t\t\tshowMainPerson ? displayName : undefined\n\t\t);\n\n\t\treturn translator.translate<T>(!!showMainPerson) as\n\t\t\t| (T extends false | undefined\n\t\t\t\t\t? string\n\t\t\t\t\t: Array<{\n\t\t\t\t\t\t\tid?: IndiKey;\n\t\t\t\t\t\t\tgen: number;\n\t\t\t\t\t\t\trelative?: string;\n\t\t\t\t\t\t\tabsolute?: string;\n\t\t\t\t\t\t}>)\n\t\t\t| undefined;\n\t}\n\n\tprivate isRelativeOf(\n\t\ttype:\n\t\t\t| \"fullsibling\"\n\t\t\t| \"halfsibling\"\n\t\t\t| \"sibling\"\n\t\t\t| \"parent\"\n\t\t\t| \"child\"\n\t\t\t| \"spouse\"\n\t\t\t| \"parentInLaw\"\n\t\t\t| \"childInLaw\"\n\t\t\t| \"siblingInLaw\",\n\t\tindi?: IndiKey | IndiType\n\t) {\n\t\tconst usedIndi =\n\t\t\ttypeof indi === \"string\" ? this._gedcom?.indi(indi) : indi;\n\n\t\tlet getter:\n\t\t\t| keyof Pick<\n\t\t\t\t\tIndiType,\n\t\t\t\t\t| \"getFullSiblings\"\n\t\t\t\t\t| \"getHalfSiblings\"\n\t\t\t\t\t| \"getSiblings\"\n\t\t\t\t\t| \"getParents\"\n\t\t\t\t\t| \"getChildren\"\n\t\t\t\t\t| \"getCoParents\"\n\t\t\t\t\t| \"getSiblingsInLaw\"\n\t\t\t\t\t| \"getParentsInLaw\"\n\t\t\t\t\t| \"getChildrenInLaw\"\n\t\t\t >\n\t\t\t| undefined;\n\t\tif (type === \"fullsibling\") {\n\t\t\tgetter = \"getFullSiblings\";\n\t\t}\n\t\tif (type === \"halfsibling\") {\n\t\t\tgetter = \"getHalfSiblings\";\n\t\t}\n\t\tif (type === \"sibling\") {\n\t\t\tgetter = \"getSiblings\";\n\t\t}\n\t\tif (type === \"parent\") {\n\t\t\tgetter = \"getParents\";\n\t\t}\n\t\tif (type === \"child\") {\n\t\t\tgetter = \"getChildren\";\n\t\t}\n\t\tif (type === \"spouse\") {\n\t\t\tgetter = \"getCoParents\";\n\t\t}\n\t\tif (type === \"siblingInLaw\") {\n\t\t\tgetter = \"getSiblingsInLaw\";\n\t\t}\n\t\tif (type === \"parentInLaw\") {\n\t\t\tgetter = \"getParentsInLaw\";\n\t\t}\n\t\tif (type === \"childInLaw\") {\n\t\t\tgetter = \"getChildrenInLaw\";\n\t\t}\n\n\t\tif (!usedIndi || !getter) {\n\t\t\treturn false;\n\t\t}\n\n\t\tconst relatives = usedIndi[getter]();\n\n\t\treturn Boolean(\n\t\t\tthis.id && relatives.item(this.id)\n\t\t\t\t? relatives.index(0)?.id || true\n\t\t\t\t: false\n\t\t);\n\t}\n\n\tisSiblingOf(indi?: IndiKey | IndiType) {\n\t\treturn this.isRelativeOf(\"sibling\", indi);\n\t}\n\n\tisFullSiblingOf(indi?: IndiKey | IndiType) {\n\t\treturn this.isRelativeOf(\"fullsibling\", indi);\n\t}\n\n\tisHalfSiblingOf(indi?: IndiKey | IndiType) {\n\t\treturn this.isRelativeOf(\"halfsibling\", indi);\n\t}\n\n\tisSpouseOf(indi?: IndiKey | IndiType) {\n\t\treturn this.isRelativeOf(\"spouse\", indi);\n\t}\n\n\tisParentOf(indi?: IndiKey | IndiType) {\n\t\treturn this.isRelativeOf(\"parent\", indi);\n\t}\n\n\tisChildOf(indi?: IndiKey | IndiType) {\n\t\treturn this.isRelativeOf(\"child\", indi);\n\t}\n\n\tisSiblingInLawOf(indi?: IndiKey | IndiType) {\n\t\treturn this.isRelativeOf(\"siblingInLaw\", indi);\n\t}\n\n\tisParentInLawOf(indi?: IndiKey | IndiType) {\n\t\treturn this.isRelativeOf(\"parentInLaw\", indi);\n\t}\n\n\tisChildInLawOf(indi?: IndiKey | IndiType) {\n\t\treturn this.isRelativeOf(\"childInLaw\", indi);\n\t}\n\n\tgetRelativesOnDegree(degree = 0) {\n\t\tthis.id = this.id || `@I${Math.random()}@`;\n\t\tconst cache = relativesOnDegreeCache(this.id, degree);\n\t\tif (cache) {\n\t\t\treturn cache;\n\t\t}\n\n\t\tlet persons = this.getRelativesOnLevel(1)\n\t\t\t.getRelativesOnDegree(-1)\n\t\t\t.copy();\n\t\tconst excludes = persons;\n\n\t\tif (!Math.abs(degree)) {\n\t\t\treturn relativesOnDegreeCache(\n\t\t\t\tthis.id,\n\t\t\t\tdegree,\n\t\t\t\tpersons.except(this)\n\t\t\t);\n\t\t}\n\n\t\tfor (let i = 1; i < Math.abs(degree) + 1; i++) {\n\t\t\tconst validDegree = i + 1;\n\t\t\texcludes.merge(persons);\n\t\t\tpersons = this.getRelativesOnLevel(validDegree)\n\t\t\t\t.getRelativesOnDegree(-validDegree)\n\t\t\t\t.copy()\n\t\t\t\t.exclude(excludes);\n\t\t}\n\n\t\treturn relativesOnDegreeCache(this.id, degree, persons);\n\t}\n\n\tgetRelativesOnLevel(level = 0, filter?: Filter) {\n\t\tthis.id = this.id || `@I${Math.random()}@`;\n\t\tconst cache = relativesOnLevelCache(this.id, level);\n\t\tif (cache) {\n\t\t\treturn cache;\n\t\t}\n\n\t\tlet persons = new Individuals();\n\n\t\tconst config = {\n\t\t\tisAscendant: level < 0,\n\t\t\tdirection: level < 0 ? -1 : 1,\n\t\t\tkey: level <= 0 ? \"FAMS\" : \"FAMC\",\n\t\t};\n\t\tlet families = this.get(config.key as MultiTag)?.toValueList();\n\n\t\tif (!families) {\n\t\t\treturn relativesOnLevelCache(this.id, level, persons);\n\t\t}\n\n\t\tif (filter) {\n\t\t\tfamilies = families.filter(filter);\n\t\t}\n\n\t\tif (config.isAscendant) {\n\t\t\tpersons = this.toFamilies(families).getChildren();\n\t\t} else {\n\t\t\tpersons = this.toFamilies(families).getParents();\n\t\t}\n\n\t\tif (level >= -1 && level <= 1) {\n\t\t\treturn relativesOnLevelCache(this.id, level, persons.except(this));\n\t\t}\n\n\t\tfor (let i = 1; i < Math.abs(level); i++) {\n\t\t\tif (config.isAscendant) {\n\t\t\t\tpersons = persons.getChildren();\n\t\t\t} else {\n\t\t\t\tpersons = persons.getParents();\n\t\t\t}\n\t\t}\n\n\t\treturn relativesOnLevelCache(this.id, level, persons.except(this));\n\t}\n\n\tgetAscendants(level = 0, filter?: Filter) {\n\t\tif (!level) {\n\t\t\treturn new Individuals();\n\t\t}\n\n\t\treturn this.getRelativesOnLevel(level, filter);\n\t}\n\n\tgetDescendants(level = 0, filter?: Filter) {\n\t\tif (!level) {\n\t\t\treturn new Individuals();\n\t\t}\n\n\t\treturn this.getRelativesOnLevel(-level, filter);\n\t}\n\n\tgetAllDescendantsRaw(\n\t\tindividuals?: Individuals,\n\t\tcontainDescendantsInLaw = false\n\t) {\n\t\tthis.id = this.id || `@I${Math.random()}@`;\n\t\tlet ownGeneration = new Individuals();\n\n\t\tif (individuals) {\n\t\t\townGeneration = individuals;\n\t\t\townGeneration.merge(this.getCoParents());\n\t\t}\n\n\t\townGeneration.append(this);\n\n\t\tconst relatives = new Individuals();\n\t\trelatives.merge(ownGeneration);\n\n\t\tconst generations: Record<number, Individuals | undefined> = {\n\t\t\t0: ownGeneration,\n\t\t};\n\n\t\tlet currentGen = 0;\n\t\tconst maxGenCheck = 100;\n\t\twhile (currentGen < maxGenCheck) {\n\t\t\tconst descentants = generations[currentGen]?.getChildren().copy();\n\t\t\tif (!descentants?.length) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (containDescendantsInLaw) {\n\t\t\t\tdescentants?.merge(descentants?.getCoParents());\n\t\t\t}\n\n\t\t\tcurrentGen++;\n\t\t\tgenerations[currentGen] = descentants;\n\n\t\t\trelativesOnLevelCache(this.id, -currentGen, descentants);\n\n\t\t\tdescentants && relatives.merge(descentants);\n\t\t}\n\n\t\treturn { relatives, generations };\n\t}\n\n\tgetAllDescendants(\n\t\tindividuals?: Individuals,\n\t\tcontainDescendantsInLaw = false\n\t) {\n\t\tconst raw = this.getAllDescendantsRaw(\n\t\t\tindividuals,\n\t\t\tcontainDescendantsInLaw\n\t\t);\n\n\t\treturn raw.relatives;\n\t}\n\n\tgetAllAscendantsRaw(individuals?: Individuals) {\n\t\tthis.id = this.id || `@I${Math.random()}@`;\n\t\tlet ownGeneration = new Individuals();\n\n\t\tif (individuals) {\n\t\t\townGeneration = individuals;\n\t\t}\n\n\t\townGeneration.append(this);\n\t\tconst relatives = new Individuals();\n\t\trelatives.merge(ownGeneration);\n\n\t\tconst generations: Record<number, Individuals | undefined> = {\n\t\t\t0: ownGeneration,\n\t\t};\n\n\t\tlet currentGen = 0;\n\t\tconst maxGenCheck = 100;\n\t\twhile (currentGen < maxGenCheck) {\n\t\t\tconst parents = generations[currentGen]?.getParents().copy();\n\t\t\tif (!parents?.length) {\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcurrentGen++;\n\t\t\tgenerations[currentGen] = parents;\n\n\t\t\trelativesOnLevelCache(this.id, currentGen, parents);\n\n\t\t\tparents && relatives.merge(parents);\n\t\t}\n\n\t\treturn { relatives, generations };\n\t}\n\n\tgetAllAscendants(individuals?: Individuals) {\n\t\tconst raw = this.getAllAscendantsRaw(individuals);\n\n\t\treturn raw.relatives;\n\t}\n\n\tgetHalfSiblings() {\n\t\tconst siblings = this.getSiblings();\n\n\t\tconst ownParents = this.getBiologicalParents();\n\n\t\tconst halfSiblings = new Individuals();\n\n\t\tsiblings.forEach((sibling) => {\n\t\t\tconst siblingsParents = sibling.getBiologicalParents();\n\n\t\t\tconst inter = ownParents.intersection(siblingsParents);\n\n\t\t\tif (inter.length < ownParents.length) {\n\t\t\t\thalfSiblings.append(sibling);\n\t\t\t}\n\t\t});\n\n\t\treturn halfSiblings;\n\t}\n\n\tgetFullSiblings() {\n\t\tconst siblings = this.getSiblings();\n\n\t\tconst ownParents = this.getBiologicalParents();\n\n\t\tconst fullSiblings = new Individuals();\n\n\t\tsiblings.forEach((sibling) => {\n\t\t\tconst siblingsParents = sibling.getBiologicalParents();\n\n\t\t\tconst inter = ownParents.intersection(siblingsParents);\n\n\t\t\tif (inter.length === ownParents.length) {\n\t\t\t\tfullSiblings.append(sibling);\n\t\t\t}\n\t\t});\n\n\t\treturn fullSiblings;\n\t}\n\n\tgetSiblings() {\n\t\timplemented(\"getSiblings\");\n\t\treturn this.getRelativesOnDegree(0);\n\t}\n\n\tgetBrothers() {\n\t\timplemented(\"getBrothers\");\n\t\treturn this.getSiblings().filter(Filters.MALE);\n\t}\n\n\tgetSisters() {\n\t\timplemented(\"getSisters\");\n\t\treturn this.getSiblings().filter(Filters.MALE);\n\t}\n\n\tgetChildren(filter?: Filter) {\n\t\timplemented(\"getChildren\");\n\t\treturn this.getDescendants(1, filter);\n\t}\n\n\tprivate getChildrenFilteredByPedigree(\n\t\tfilter: RequiredFilter<\"PEDI\", string>\n\t) {\n\t\tconst children = new Individuals();\n\t\tconst familiesOfChildrens = this.get(\"FAMS\")?.toValueList();\n\n\t\tif (!familiesOfChildrens || !this.id) {\n\t\t\treturn children;\n\t\t}\n\n\t\tconst families = this.toFamilies(familiesOfChildrens);\n\n\t\tfamilies.forEach((family) => {\n\t\t\tconst fatherId = family.get(\"HUSB\")?.toValue() as\n\t\t\t\t| IndiKey\n\t\t\t\t| undefined;\n\t\t\tconst motherId = family.get(\"WIFE\")?.toValue() as\n\t\t\t\t| IndiKey\n\t\t\t\t| undefined;\n\n\t\t\tconst usedRel =\n\t\t\t\tthis.id === fatherId\n\t\t\t\t\t? \"_FREL\"\n\t\t\t\t\t: this.id === motherId\n\t\t\t\t\t\t? \"_MREL\"\n\t\t\t\t\t\t: undefined;\n\n\t\t\tif (!usedRel) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst famChildren = this.id && family.CHIL?.toValueList();\n\n\t\t\tfamChildren?.forEach((child) => {\n\t\t\t\tconst childType = child.get(usedRel)?.toValue() as\n\t\t\t\t\t| string\n\t\t\t\t\t| undefined;\n\t\t\t\tif (\n\t\t\t\t\t(!childType && filter.PEDI === RelationType.BIOLOGICAL) ||\n\t\t\t\t\tchildType?.toLowerCase() === filter.PEDI.toLowerCase()\n\t\t\t\t) {\n\t\t\t\t\tconst childId = child?.toValue() as IndiKey | undefined;\n\t\t\t\t\tconst childIndi = childId && this._gedcom?.indi(childId);\n\t\t\t\t\tif (childIndi) {\n\t\t\t\t\t\tchildren.append(childIndi);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!famChildren?.length) {\n\t\t\t\tthis.getChildren().forEach((child) => {\n\t\t\t\t\tif (!child) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst childState = child\n\t\t\t\t\t\t?.get(\"FAMC\")\n\t\t\t\t\t\t?.toList()\n\t\t\t\t\t\t?.filter((item) => item.value === family.id)\n\t\t\t\t\t\t.index(0);\n\n\t\t\t\t\tconst childType =\n\t\t\t\t\t\t(childState?.get(\"PEDI\")?.toValue() as string) ||\n\t\t\t\t\t\tRelationType.BIOLOGICAL;\n\t\t\t\t\tif (\n\t\t\t\t\t\t(!childType &&\n\t\t\t\t\t\t\tfilter.PEDI === RelationType.BIOLOGICAL) ||\n\t\t\t\t\t\tchildType?.toLowerCase() === filter.PEDI.toLowerCase()\n\t\t\t\t\t) {\n\t\t\t\t\t\tchildren.append(child);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn children;\n\t}\n\n\tgetBiologicalChildren() {\n\t\timplemented(\"getBiologicalChildren\");\n\t\treturn this.getChildrenFilteredByPedigree(Filters.BIOLOGICAL);\n\t}\n\n\tgetAdoptedChildren() {\n\t\timplemented(\"getAdoptedChildren\");\n\t\treturn this.getChildrenFilteredByPedigree(Filters.ADOPTED);\n\t}\n\n\tgetBirthChildren() {\n\t\timplemented(\"getBirthChildren\");\n\t\treturn this.getChildrenFilteredByPedigree(Filters.BIRTH);\n\t}\n\n\tgetFosterChildren() {\n\t\timplemented(\"getFosterChildren\");\n\t\treturn this.getChildrenFilteredByPedigree(Filters.FOSTER);\n\t}\n\n\tgetSealingChildren() {\n\t\timplemented(\"getSealingChildren\");\n\t\treturn this.getChildrenFilteredByPedigree(Filters.SEALING);\n\t}\n\n\tgetStepChildren() {\n\t\timplemented(\"getStepChildren\");\n\t\treturn this.getChildrenFilteredByPedigree(Filters.STEP);\n\t}\n\n\tgetSons() {\n\t\timplemented(\"getSons\");\n\t\treturn this.getChildren().filter(Filters.MALE);\n\t}\n\n\tgetBiologicalSons() {\n\t\timplemented(\"getBiologicalSons\");\n\t\treturn this.getChildrenFilteredByPedigree(Filters.BIOLOGICAL).filter(\n\t\t\tFilters.MALE\n\t\t);\n\t}\n\n\tgetAdoptedSons() {\n\t\timplemented(\"getAdoptedSons\");\n\t\treturn this.getAdoptedChildren().filter(Filters.MALE);\n\t}\n\n\tgetBirthSons() {\n\t\timplemented(\"getBirthSons\");\n\t\treturn this.getBirthChildren().filter(Filters.MALE);\n\t}\n\n\tgetFosterSons() {\n\t\timplemented(\"getFosterSons\");\n\t\treturn this.getFosterChildren().filter(Filters.MALE);\n\t}\n\n\tgetSealingSons() {\n\t\timplemented(\"getSealingSons\");\n\t\treturn this.getSealingChildren().filter(Filters.MALE);\n\t}\n\n\tgetStepSons() {\n\t\timplemented(\"getStepSons\");\n\t\treturn this.getStepChildren().filter(Filters.MALE);\n\t}\n\n\tgetDaughters() {\n\t\timplemented(\"getDaughters\");\n\t\treturn this.getChildren().filter(Filters.FEMALE);\n\t}\n\n\tgetBiologicalDaugthers() {\n\t\timplemented(\"getBiologicalDaugthers\");\n\t\treturn this.getChildrenFilteredByPedigree(Filters.BIOLOGICAL).filter(\n\t\t\tFilters.FEMALE\n\t\t);\n\t}\n\n\tgetAdoptedDaughters() {\n\t\timplemented(\"getAdoptedDaughters\");\n\t\treturn this.getAdoptedChildren().filter(Filters.FEMALE);\n\t}\n\n\tgetBirthDaughters() {\n\t\timplemented(\"getBirthDaughters\");\n\t\treturn this.getBirthChildren().filter(Filters.FEMALE);\n\t}\n\n\tgetFosterDaughters() {\n\t\timplemented(\"getFosterDaughters\");\n\t\treturn this.getFosterChildren().filter(Filters.FEMALE);\n\t}\n\n\tgetSealingDaughters() {\n\t\timplemented(\"getSealingDaughters\");\n\t\treturn this.getSealingChildren().filter(Filters.FEMALE);\n\t}\n\n\tgetStepDaughters() {\n\t\timplemented(\"getStepDaughters\");\n\t\treturn this.getStepChildren().filter(Filters.FEMALE);\n\t}\n\n\tgetParents(filter?: Filter) {\n\t\timplemented(\"getParents\");\n\t\treturn this.getAscendants(1, filter);\n\t}\n\n\tprivate getParentsFilteredByPedigree(\n\t\tfilter: RequiredFilter<\"PEDI\", string>\n\t) {\n\t\tconst parents = new Individuals();\n\t\tconst familiesOfParents = this.get(\"FAMC\")?.toValueList();\n\n\t\tif (!familiesOfParents || !this.id) {\n\t\t\treturn parents;\n\t\t}\n\n\t\tconst families = this.toFamilies(familiesOfParents);\n\n\t\tfamilies.forEach((family) => {\n\t\t\tconst child = this.id && family.CHIL?.toValueList()?.item(this.id);\n\n\t\t\tif (!child) {\n\t\t\t\tconst childState = this?.get(\"FAMC\")\n\t\t\t\t\t?.toList()\n\t\t\t\t\t?.filter((item) => item.value === family.id)\n\t\t\t\t\t.index(0);\n\n\t\t\t\tconst parentType =\n\t\t\t\t\t(childState?.get(\"PEDI\")?.toValue() as string) ||\n\t\t\t\t\tRelationType.BIOLOGICAL;\n\t\t\t\tif (\n\t\t\t\t\t(!parentType && filter.PEDI === RelationType.BIOLOGICAL) ||\n\t\t\t\t\tparentType?.toLowerCase() === filter.PEDI.toLowerCase()\n\t\t\t\t) {\n\t\t\t\t\tparents.merge(family.getParents());\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst fatherType = child.get(\"_FREL\")?.toValue() as\n\t\t\t\t| string\n\t\t\t\t| undefined;\n\t\t\tconst motherType = child.get(\"_MREL\")?.toValue() as\n\t\t\t\t| string\n\t\t\t\t| undefined;\n\n\t\t\tif (\n\t\t\t\t(!fatherType && filter.PEDI === RelationType.BIOLOGICAL) ||\n\t\t\t\tfatherType?.toLowerCase() === filter.PEDI.toLowerCase()\n\t\t\t) {\n\t\t\t\tconst fatherId = family.get(\"HUSB\")?.toValue() as\n\t\t\t\t\t| IndiKey\n\t\t\t\t\t| undefined;\n\t\t\t\tconst father = fatherId && this._gedcom?.indi(fatherId);\n\n\t\t\t\tif (father) {\n\t\t\t\t\tparents.append(father);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\t(!motherType && filter.PEDI === RelationType.BIOLOGICAL) ||\n\t\t\t\tmotherType?.toLowerCase() === filter.PEDI.toLowerCase()\n\t\t\t) {\n\t\t\t\tconst motherId = family.get(\"WIFE\")?.toValue() as\n\t\t\t\t\t| IndiKey\n\t\t\t\t\t| undefined;\n\t\t\t\tconst mother = motherId && this._gedcom?.indi(motherId);\n\t\t\t\tif (mother) {\n\t\t\t\t\tparents.append(mother);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn parents;\n\t}\n\n\tprivate getSpousesFilteredByPartner(\n\t\tfilter: RequiredFilter<\"PART\", string>\n\t) {\n\t\tconst spouses = new Individuals();\n\t\tconst familiesOfSpouses = this.get(\"FAMS\")?.toValueList();\n\n\t\tif (!familiesOfSpouses || !this.id) {\n\t\t\treturn spouses;\n\t\t}\n\n\t\tconst families = this.toFamilies(familiesOfSpouses);\n\n\t\tfamilies.forEach((family) => {\n\t\t\tconst spouseType = family.get(\"_SREL\")?.toValue() as\n\t\t\t\t| string\n\t\t\t\t| undefined;\n\n\t\t\tif (\n\t\t\t\t(!spouseType && filter.PART === PartnerType.SPOUSE) ||\n\t\t\t\tspouseType?.toLowerCase() === filter.PART.toLowerCase()\n\t\t\t) {\n\t\t\t\tconst spouse = family.getParents().copy().except(this).index(0);\n\n\t\t\t\tif (spouse) {\n\t\t\t\t\tspouses.append(spouse);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\treturn spouses;\n\t}\n\n\tgetBiologicalParents() {\n\t\timplemented(\"getBiologicalParents\");\n\t\treturn this.getParentsFilteredByPedigree(Filters.BIOLOGICAL);\n\t}\n\n\tgetAdoptedParents() {\n\t\timplemented(\"getAdoptedParents\");\n\t\treturn this.getParentsFilteredByPedigree(Filters.ADOPTED);\n\t}\n\n\tgetBirthParents() {\n\t\timplemented(\"getBirthParents\");\n\t\treturn this.getParentsFilteredByPedigree(Filters.BIRTH);\n\t}\n\n\tgetFosterParents() {\n\t\timplemented(\"getFosterParents\");\n\t\treturn this.getParentsFilteredByPedigree(Filters.FOSTER);\n\t}\n\n\tgetSealingParents() {\n\t\timplemented(\"getSealingParents\");\n\t\treturn this.getParentsFilteredByPedigree(Filters.SEALING);\n\t}\n\n\tgetStepParents() {\n\t\timplemented(\"getStepParents\");\n\t\treturn this.getParentsFilteredByPedigree(Filters.STEP);\n\t}\n\n\tgetFathers() {\n\t\timplemented(\"getFathers\");\n\t\treturn this.getParents().filter(Filters.MALE);\n\t}\n\n\tgetBiologicalFathers() {\n\t\timplemented(\"getBiologicalFathers\");\n\t\treturn this.getParentsFilteredByPedigree(Filters.BIOLOGICAL).filter(\n\t\t\tFilters.MALE\n\t\t);\n\t}\n\n\tgetAdoptedFathers() {\n\t\timplemented(\"getAdoptedFathers\");\n\t\treturn this.getParentsFilteredByPedigree(Filters.ADOPTED).filter(\n\t\t\tFilters.MALE\n\t\t);\n\t}\n\n\tgetBirthFathers() {\n\t\timplemented(\"getBirthFathers\");\n\t\treturn this.getParentsFilteredByPedigree(Filters.BIRTH).filter(\n\t\t\tFilters.MALE\n\t\t);\n\t}\n\n\tgetFosterFathers() {\n\t\timplemented(\"getFosterFathers\");\n\t\treturn this.getParentsFilteredByPedigree(Filters.FOSTER).filter(\n\t\t\tFilters.MALE\n\t\t);\n\t}\n\n\tgetSealingFathers() {\n\t\timplemented(\"getSealingFathers\");\n\t\treturn this.getParentsFilteredByPedigree(Filters.SEALING).filter(\n\t\t\tFilters.MALE\n\t\t);\n\t}\n\n\tgetStepFathers() {\n\t\timplemented(\"getStepFathers\");\n\t\treturn this.getParentsFilteredByPedigree(Filters.STEP).filter(\n\t\t\tFilters.MALE\n\t\t);\n\t}\n\n\tgetMothers() {\n\t\timplemented(\"getMothers\");\n\t\treturn this.getParents().filter(Filters.FEMALE);\n\t}\n\n\tgetBiologicalMothers() {\n\t\timplemented(\"getBiologicalMothers\");\n\t\treturn this.getParentsFilteredByPedigree(Filters.BIOLOGICAL).filter(\n\t\t\tFilters.FEMALE\n\t\t);\n\t}\n\n\tgetAdoptedMothers() {\n\t\timplemented(\"getAdoptedMothers\");\n\t\treturn this.getParentsFilteredByPedigree(Filters.ADOPTED).filter(\n\t\t\tFilters.FEMALE\n\t\t);\n\t}\n\n\tgetBirthMothers() {\n\t\timplemented(\"getBirthMothers\");\n\t\treturn this.getParentsFilteredByPedigree(Filters.BIRTH).filter(\n\t\t\tFilters.FEMALE\n\t\t);\n\t}\n\n\tgetFosterMothers() {\n\t\timplemented(\"getFosterMothers\");\n\t\treturn this.getParentsFilteredByPedigree(Filters.FOSTER).filter(\n\t\t\tFilters.FEMALE\n\t\t);\n\t}\n\n\tgetSealingMothers() {\n\t\timplemented(\"getSealingMothers\");\n\t\treturn this.getParentsFilteredByPedigree(Filters.SEALING).filter(\n\t\t\tFilters.FEMALE\n\t\t);\n\t}\n\n\tgetStepMothers() {\n\t\timplemented(\"getStepMothers\");\n\t\treturn this.getParentsFilteredByPedigree(Filters.STEP).filter(\n\t\t\tFilters.FEMALE\n\t\t);\n\t}\n\n\tgetCoParents() {\n\t\timplemented(\"getCoParents\");\n\t\treturn this.getRelativesOnLevel(0);\n\t}\n\n\tgetSpouses() {\n\t\timplemented(\"getCertifiedSpouses\");\n\t\treturn this.getSpousesFilteredByPartner(Filters.SPOUSE);\n\t}\n\n\tgetPartners() {\n\t\timplemented(\"getPartners\");\n\t\treturn this.getSpousesFilteredByPartner(Filters.PARTNER);\n\t}\n\n\tgetFriends() {\n\t\timplemented(\"getFriends\");\n\t\treturn this.getSpousesFilteredByPartner(Filters.FRIEND);\n\t}\n\n\tgetWives() {\n\t\timplemented(\"getWives\");\n\t\treturn this.getCoParents().filter(Filters.FEMALE);\n\t}\n\n\tgetHusbands() {\n\t\timplemented(\"getHusbands\");\n\t\treturn this.getCoParents().filter(Filters.MALE);\n\t}\n\n\tgetCousins() {\n\t\timplemented(\"getCousins\");\n\t\treturn this.getRelativesOnDegree(1);\n\t}\n\n\tgetGrandParents() {\n\t\timplemented(\"getGrandParents\");\n\t\treturn this.getAscendants(2);\n\t}\n\n\tgetGrandFathers() {\n\t\timplemented(\"getGrandFathers\");\n\t\treturn this.getGrandParents().filter(Filters.MALE);\n\t}\n\n\tgetGrandMothers() {\n\t\timplemented(\"getGrandMothers\");\n\t\treturn this.getGrandParents().filter(Filters.FEMALE);\n\t}\n\n\tgetGrandChildren() {\n\t\timplemented(\"getGrandChildren\");\n\t\treturn this.getDescendants(2);\n\t}\n\n\tgetGrandSons() {\n\t\timplemented(\"getGrandSons\");\n\t\treturn this.getGrandChildren().filter(Filters.MALE);\n\t}\n\n\tgetGrandDaughters() {\n\t\timplemented(\"getGrandDaughters\");\n\t\treturn this.getGrandChildren().filter(Filters.FEMALE);\n\t}\n\n\tgetGreatGrandParents() {\n\t\timplemented(\"getGreatGrandParents\");\n\t\treturn this.getAscendants(3);\n\t}\n\n\tgetGreatGrandFathers() {\n\t\timplemented(\"getGreatGrandFathers\");\n\t\treturn this.getGreatGrandParents().filter(Filters.MALE);\n\t}\n\n\tgetGreatGrandMothers() {\n\t\timplemented(\"getGreatGrandMothers\");\n\t\treturn this.getGreatGrandParents().filter(Filters.FEMALE);\n\t}\n\n\tgetGreatGrandChildren() {\n\t\timplemented(\"getGreatGrandChildren\");\n\t\treturn this.getDescendants(3);\n\t}\n\n\tgetGreatGrandSons() {\n\t\timplemented(\"getGreatGrandSons\");\n\t\treturn this.getGreatGrandChildren().filter(Filters.MALE);\n\t}\n\n\tgetGreatGrandDaughters() {\n\t\timplemented(\"getGreatGrandDaughters\");\n\t\treturn this.getGreatGrandChildren().filter(Filters.FEMALE);\n\t}\n\n\tgetAuncles() {\n\t\timplemented(\"getAuncles\");\n\n\t\treturn this.getParents().getSiblings();\n\t}\n\n\tgetAunts() {\n\t\timplemented(\"getAunts\");\n\t\treturn this.getAuncles().filter(Filters.FEMALE);\n\t}\n\n\tgetUncles() {\n\t\timplemented(\"getUncles\");\n\t\treturn this.getAuncles().filter(Filters.MALE);\n\t}\n\n\tgetNiblings() {\n\t\timplemented(\"getNiblings\");\n\t\treturn this.getSiblings().getChildren();\n\t}\n\n\tgetNieces() {\n\t\timplemented(\"getNieces\");\n\t\treturn this.getNiblings().filter(Filters.FEMALE);\n\t}\n\n\tgetNephews() {\n\t\timplemented(\"getNephews\");\n\t\treturn this.getNiblings().filter(Filters.MALE);\n\t}\n\n\tgetParentsInLaw() {\n\t\timplemented(\"getParentsInLaw\");\n\t\treturn this.getCoParents().getParents();\n\t}\n\n\tgetFathersInLaw() {\n\t\timplemented(\"getFathersInLaw\");\n\t\treturn this.getParentsInLaw().filter(Filters.MALE);\n\t}\n\n\tgetMothersInLaw() {\n\t\timplemented(\"getMothersInLaw\");\n\t\treturn this.getParentsInLaw().filter(Filters.FEMALE);\n\t}\n\n\tgetSiblingsInLaw() {\n\t\timplemented(\"getSiblingsInLaw\");\n\t\treturn this.getCoParents()\n\t\t\t.copy()\n\t\t\t.getSiblings()\n\t\t\t.copy()\n\t\t\t.merge(this.getSiblings().getCoParents());\n\t}\n\n\tgetBrothersInLaw() {\n\t\timplemented(\"getBrothersInLaw\");\n\t\treturn this.getSiblingsInLaw().filter(Filters.MALE);\n\t}\n\n\tgetSistersInLaw() {\n\t\timplemented(\"getSistersInLaw\");\n\t\treturn this.getSiblingsInLaw().filter(Filters.FEMALE);\n\t}\n\n\tgetChildrenInLaw() {\n\t\timplemented(\"getChildrenInLaw\");\n\t\treturn this.getChildren().getCoParents();\n\t}\n\n\tgetSonsInLaw() {\n\t\timplemented(\"getSonsInLaw\");\n\t\treturn this.getChildrenInLaw().filter(Filters.MALE);\n\t}\n\n\tgetDaughtersInLaw() {\n\t\timplemented(\"getDaughtersInLaw\");\n\t\treturn this.getChildrenInLaw().filter(Filters.FEMALE);\n\t}\n\n\t// These are generated automatically\n\tget2ndCousins() {\n\t\treturn new Individuals();\n\t}\n\n\tget2ndGreatGrandParents() {\n\t\treturn new Individuals();\n\t}\n\n\tget2ndGreatGrandChildren() {\n\t\treturn new Individuals();\n\t}\n\n\tget3rdCousins() {\n\t\treturn new Individuals();\n\t}\n\n\tget3rdGreatGrandParents() {\n\t\treturn new Individuals();\n\t}\n\n\tget3rdGreatGrandChildren() {\n\t\treturn new Individuals();\n\t}\n\n\tget4thCousins() {\n\t\treturn new Individuals();\n\t}\n\n\tget4thGreatGrandParents() {\n\t\treturn new Individuals();\n\t}\n\n\tget4thGreatGrandChildren() {\n\t\treturn new Individuals();\n\t}\n\n\tget5thCousins() {\n\t\treturn new Individuals();\n\t}\n\n\tget5thGreatGrandParents() {\n\t\treturn new Individuals();\n\t}\n\n\tget5thGreatGrandChildren() {\n\t\treturn new Individuals();\n\t}\n\n\tget6thCousins() {\n\t\treturn new Individuals();\n\t}\n\n\tget6thGreatGrandParents() {\n\t\treturn new Individuals();\n\t}\n\n\tget6thGreatGrandChildren() {\n\t\treturn new Individuals();\n\t}\n\n\tget7thCousins() {\n\t\treturn new Individuals();\n\t}\n\n\tget7thGreatGrandParents() {\n\t\treturn new Individuals();\n\t}\n\n\tget7thGreatGrandChildren() {\n\t\treturn new Individuals();\n\t}\n\n\tget8thCousins() {\n\t\treturn new Individuals();\n\t}\n\n\tget8thGreatGrandParents() {\n\t\treturn new Individuals();\n\t}\n\n\tget8thGreatGrandChildren() {\n\t\treturn new Individuals();\n\t}\n\n\tget9thCousins() {\n\t\treturn new Individuals();\n\t}\n\n\tget9thGreatGrandParents() {\n\t\treturn new Individuals();\n\t}\n\n\tget9thGreatGrandChildren() {\n\t\treturn new Individuals();\n\t}\n}\n\nconst generateFunctions = () => {\n\tconst levels: number[] = [2, 3, 4, 5, 6, 7, 8, 9];\n\tconst types: Array<[GeneratorType, number, \"level\" | \"degree\"]> = [\n\t\t[\"Cousins\", 0, \"degree\"],\n\t\t[\"GreatGrandParents\", 2, \"level\"],\n\t\t[\"GreatGrandChildren\", -2, \"level\"],\n\t];\n\n\tlevels.forEach((level) => {\n\t\ttypes.forEach(([type, starting, direction]) => {\n\t\t\tlet validLevel: GeneratorKey;\n\n\t\t\tif (level === 2) {\n\t\t\t\tvalidLevel = \"2nd\";\n\t\t\t} else if (level === 3) {\n\t\t\t\tvalidLevel = \"3rd\";\n\t\t\t} else {\n\t\t\t\tvalidLevel = `${level}th` as GeneratorKey;\n\t\t\t}\n\t\t\t// eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n\t\t\tIndi.prototype[`get${validLevel}${type}`] = function (\n\t\t\t\tfilter?: Filter\n\t\t\t) {\n\t\t\t\tif (direction === \"level\" && starting < 0) {\n\t\t\t\t\treturn this.getRelativesOnLevel(-level + starting, filter);\n\t\t\t\t} else if (direction === \"level\" && starting > 0) {\n\t\t\t\t\treturn this.getRelativesOnLevel(level + starting, filter);\n\t\t\t\t}\n\n\t\t\t\treturn this.getRelativesOnDegree(level + starting);\n\t\t\t};\n\t\t});\n\t});\n};\n\ngenerateFunctions();\n\nexport type IndiType = Indi & IIndividualStructure & GeneratedIndiMethods;\n\nexport interface FamilySearchMatch {\n\tid?: string;\n\ttitle?: string;\n\ttype?: string;\n\tref?: string;\n\tscore?: number;\n\ttext?: string;\n\twww?: string;\n\tnotes?: string[];\n\t// Detailed person information from FamilySearch\n\tstatus?: string; // Match status (pending, accepted, etc.)\n\tgender?: string; // Gender display value\n\tlifespan?: string; // Lifespan string (e.g., \"1899-1960\")\n\tbirthDate?: string; // Birth date\n\tbirthPlace?: string; // Birth place\n\tdeathDate?: string; // Death date\n\tdeathPlace?: string; // Death place\n\tmarriageDate?: string; // Marriage date\n\tmarriagePlace?: string; // Marriage place\n}\n\nexport interface FamilySearchSource {\n\tid?: string;\n\ttitle?: string;\n\ttext?: string;\n\twww?: string;\n\tnotes?: string[];\n}\n\nexport interface TreeMember<T = IndiType> {\n\tid: FamKey | IndiKey;\n\tindex: number;\n\tfather?: T;\n\tmother?: T;\n\tfatherSpouses?: T[];\n\tmotherSpouses?: T[];\n}\n\nexport type GenealogyMember<T = IndiType> = TreeMember<T> & {\n\tfatherSiblings?: T[];\n\tmotherSiblings?: T[];\n};\nexport interface IndiTree<T = IndiType> {\n\texisted: Record<IndiKey, Existed | undefined>;\n\ttree: Record<number, Array<TreeMember<T> | undefined>>;\n\thalves: Record<number, number | undefined>;\n\tlastItems: Record<number, TreeMember<T> | undefined>;\n}\n\nexport type IndiGenealogy<T = IndiType> = Pick<\n\tIndiTree<T>,\n\t\"existed\" | \"halves\" | \"lastItems\"\n> & {\n\ttree: Record<number, Array<GenealogyMember<T> | undefined>>;\n};\n\nexport interface IndiMarker<T = IndiType> {\n\tisPrev?: boolean;\n\tisNext?: boolean;\n\titems: Array<T | undefined>;\n}\n\nexport type MemberSide<T = IndiType, O extends object = object> = {\n\tleft: Array<Array<T | undefined> | undefined>;\n\tright: Array<Array<T | undefined> | undefined>;\n} & O;\n\nexport type MemberMain<T = IndiType> = MemberSide<T> & {\n\tmain: MemberSide<T>;\n};\n\nexport interface GenerationSpouseType {\n\tindi: IndiType;\n\textra?: boolean;\n\tnormal?: boolean;\n}\n\nexport interface GenerationIndiType {\n\tindi: IndiType;\n\tleftSpouses?: GenerationSpouseType[];\n\trightSpouses?: GenerationSpouseType[];\n}\n\nexport type IndiGenealogyGenerations<T = IndiType> = Record<\n\tnumber,\n\tMemberMain<T>\n>;\n\nexport type IndiGenealogyResult<T = IndiType> = Record<number, MemberSide<T>>;\n\nexport type NonNullIndiGenealogyResult<T = IndiType> = Record<\n\tnumber,\n\tArray<Array<T | undefined>>\n>;\n\nexport interface PathItem {\n\tindi: IndiType;\n\tlevel: number;\n\tlevelUp: number;\n\tlevelDown: number;\n\tdegree: number;\n\tkinship: Kinship; // Kinship type with previous path item\n\trelation?: RelationType; // Parent relative type with previous path item\n\tinLaw?: boolean;\n\tbreakOnNext?: boolean;\n\tbreakAfterNext?: boolean;\n}\n\nexport type Path = PathItem[];\nexport type ReducedPath = Array<\n\tOmit<PathItem, \"breakOnNext\" | \"breakAfterNext\">\n>;\n\nexport type QueueItem = {\n\tpath: Path;\n} & PathItem;\nexport type Queue = QueueItem[];\n\nexport const createIndi = (\n\tgedcom: GedComType,\n\tid: IndiKey,\n\tmain?: Common,\n\tparent?: Common\n): ProxyOriginal<IndiType> => {\n\treturn createProxy(\n\t\tnew Indi(gedcom, id, main, parent)\n\t) as unknown as ProxyOriginal<IndiType>;\n};\n","import { Indi } from \"../classes/indi\";\nimport type {IndiType} from \"../classes/indi\";\nimport { createCommonName } from \"../classes/name\";\nimport type {CommonName} from \"../classes/name\";\nimport type { Settings } from \"../types/settings\";\n\nexport const nameFormatter = (\n\tindiName?: IndiType | string,\n\tsettings?: Partial<Settings>,\n\tletterOnAll = true,\n\tindi?: IndiType,\n\tdebug?: 3\n) => {\n\tconst {\n\t\tnameOrder = \"first-last\",\n\t\tmaxGivennames = 0,\n\t\tmaxSurnames = 0,\n\t} = settings ?? {};\n\tconst rawName =\n\t\tindiName instanceof Indi\n\t\t\t? indiName?.NAME\n\t\t\t: createCommonName(undefined, undefined, indi).name(indiName);\n\tconst name = rawName?.toList().index(0) as CommonName | undefined;\n\tlet givenname = name?.GIVN?.toValueList().first()?.value || \"\";\n\tlet surname = name?.SURN?.toValueList().first()?.value || \"\";\n\tlet suffix = name?.NSFX?.toValueList().first()?.value || \"\";\n\tconst displayedName = name?.DISPLAY?.toValueList().first()?.value || \"\";\n\n\tif (!givenname && !surname) {\n\t\tgivenname = displayedName;\n\t}\n\n\tif (maxGivennames > 0) {\n\t\tgivenname = givenname.split(\" \").slice(0, maxGivennames).join(\" \");\n\t}\n\tif (maxSurnames > 0) {\n\t\tsurname = surname.split(\" \").slice(0, maxSurnames).join(\" \");\n\t}\n\n\tif (debug) {\n\t\tsuffix = suffix || \"Dr\";\n\t\tfor (let i = 1; i < debug; i++) {\n\t\t\tgivenname = `${givenname} ${givenname}`;\n\t\t\tsurname = `${surname} ${surname}`;\n\t\t}\n\t}\n\n\tconst inOrder = [\n\t\tsuffix,\n\t\t...(nameOrder === \"last-first\"\n\t\t\t? [surname, givenname]\n\t\t\t: [givenname, surname]),\n\t] as [string, string, string];\n\n\tconst lName = (\n\t\tletterOnAll\n\t\t\t? [inOrder[1], inOrder[2]].filter(Boolean).join(\" \")\n\t\t\t: inOrder[1]\n\t).toLowerCase();\n\tconst firstLetter =\n\t\tlName.match(/^(dzs|cs|dz|gy|ly|ny|sz|ty|zs|\\w)/i)?.[0] ??\n\t\tlName.substring(0, 1) ??\n\t\t\"\";\n\tconst validFirstLetter = `${firstLetter\n\t\t.substring(0, 1)\n\t\t.toUpperCase()}${firstLetter.substring(1)}`;\n\n\treturn { suffix, givenname, surname, inOrder, letter: validFirstLetter };\n};\n","export const ordinalize = (n: number): string => {\n\tconst num = Math.round(n);\n\tconst numString = num.toString();\n\n\t// If the ten's place is 1, the suffix is always \"th\"\n\t// (10th, 11th, 12th, 13th, 14th, 111th, 112th, etc.)\n\tif (Math.floor(num / 10) % 10 === 1) {\n\t\treturn numString + \"th\";\n\t}\n\n\t// Otherwise, the suffix depends on the one's place as follows\n\t// (1st, 2nd, 3rd, 4th, 21st, 22nd, etc.)\n\tswitch (num % 10) {\n\t\tcase 1:\n\t\t\treturn numString + \"st\";\n\t\tcase 2:\n\t\t\treturn numString + \"nd\";\n\t\tcase 3:\n\t\t\treturn numString + \"rd\";\n\t\tdefault:\n\t\t\treturn numString + \"th\";\n\t}\n};\n\ntype Ordinal = string | [string, string];\ntype Ordinals = [\n\tOrdinal,\n\tOrdinal,\n\tOrdinal,\n\tOrdinal,\n\tOrdinal,\n\tOrdinal,\n\tOrdinal,\n\tOrdinal,\n\tOrdinal,\n\tOrdinal,\n];\nexport const hungarianOrdinalize = (n: number) => {\n\tconst numberPrefix = [\n\t\t\"\",\n\t\t\"\",\n\t\t\"két\",\n\t\t\"három\",\n\t\t\"négy\",\n\t\t\"öt\",\n\t\t\"hat\",\n\t\t\"hét\",\n\t\t\"nyolc\",\n\t\t\"kilenc\",\n\t];\n\tconst ordinals: Array<string | Ordinal | Ordinals> = [\n\t\t[\n\t\t\t\"\",\n\t\t\t[\"első\", \"egyed\"],\n\t\t\t[\"másod\", \"ketted\"],\n\t\t\t\"harmad\",\n\t\t\t\"negyed\",\n\t\t\t\"ötöd\",\n\t\t\t\"hatod\",\n\t\t\t\"heted\",\n\t\t\t\"nyolcad\",\n\t\t\t\"kilenced\",\n\t\t],\n\t\t[\n\t\t\t\"\",\n\t\t\t[\"tized\", \"tizen\"],\n\t\t\t[\"huszad\", \"huszon\"],\n\t\t\t\"harmincad\",\n\t\t\t\"negyvened\",\n\t\t\t\"ötvened\",\n\t\t\t\"hatvanad\",\n\t\t\t\"hetvened\",\n\t\t\t\"nyolcvanad\",\n\t\t\t\"kilencvened\",\n\t\t],\n\t\t\"század\",\n\t\t[\"ezred\", \"ezer\"],\n\t];\n\n\tconst parts = [];\n\tlet fractionIndex = 0;\n\tlet fractions = 1;\n\tlet nr = Math.abs(n);\n\tlet part;\n\tdo {\n\t\tconst nextFractions = fractions * 10;\n\t\tconst index =\n\t\t\tfractions > 1\n\t\t\t\t? (nr % nextFractions) / fractions\n\t\t\t\t: nr % nextFractions;\n\n\t\tconst ordinalList = ordinals[fractionIndex++];\n\t\tif (typeof ordinalList === \"string\") {\n\t\t\tpart = `${numberPrefix[index]}${ordinalList}`;\n\t\t} else if (ordinalList.length === 2) {\n\t\t\tpart = ordinalList;\n\t\t} else {\n\t\t\tpart = ordinalList?.[index];\n\t\t}\n\n\t\tif (Array.isArray(part)) {\n\t\t\tif (fractions === 1) {\n\t\t\t\tpart = part[nr < 10 ? 0 : 1];\n\t\t\t} else {\n\t\t\t\tpart = part[n % 10 === 0 ? 0 : 1];\n\t\t\t}\n\t\t} else if (fractions > 1 && n % 10 !== 0) {\n\t\t\tpart = part?.substring(0, part.length - 2);\n\t\t}\n\n\t\tif (part !== undefined) {\n\t\t\tparts.unshift(part);\n\t\t}\n\t\tfractions = nextFractions;\n\t\tnr = Math.floor(nr / nextFractions) * nextFractions;\n\n\t\tif (nr < nextFractions) {\n\t\t\tbreak;\n\t\t}\n\t} while (part !== undefined);\n\n\treturn parts.join(\"\");\n};\n","import type {Path} from \"../classes/indi\";\n\nimport type IKinshipTranslator from \"./kinship-translator.interface\";\n\nexport default class KinshipTranslatorBasic implements IKinshipTranslator {\n\tisOfSpouse = false;\n\tisSpouseOf = false;\n\tdisplayName: \"none\" | \"givenname\" | \"surname\" | \"all\";\n\n\tprivate readonly _path?: Path;\n\tconstructor(\n\t\tpath: Path,\n\t\tdisplayName: \"none\" | \"givenname\" | \"surname\" | \"all\" = \"givenname\"\n\t) {\n\t\tthis._path = path;\n\t\tthis.displayName = displayName;\n\t}\n\n\tprotected get path() {\n\t\treturn this._path;\n\t}\n\n\tget path0() {\n\t\treturn this.path?.[0];\n\t}\n\n\tget path1() {\n\t\treturn this.path?.[1];\n\t}\n\n\tget pathM() {\n\t\treturn this.path?.[this.path.length - 2];\n\t}\n\n\tget pathN() {\n\t\treturn this.path?.[this.path.length - 1];\n\t}\n\n\tget person1() {\n\t\tif (this.isOfSpouse) {\n\t\t\treturn this.path1?.indi;\n\t\t}\n\n\t\treturn this.path0?.indi;\n\t}\n\n\tget person2() {\n\t\treturn this.path1?.indi;\n\t}\n\n\tget personM() {\n\t\treturn this.pathM?.indi;\n\t}\n\n\tget personN() {\n\t\tif (this.isSpouseOf) {\n\t\t\treturn this.pathM?.indi;\n\t\t}\n\n\t\treturn this.pathN?.indi;\n\t}\n\n\tindirect() {\n\t\treturn \"\";\n\t}\n\n\tremoval() {\n\t\treturn \"\";\n\t}\n\n\tparent() {\n\t\treturn \"\";\n\t}\n\n\tchild() {\n\t\treturn \"\";\n\t}\n\n\tsibling() {\n\t\treturn \"\";\n\t}\n\n\tspouse() {\n\t\treturn \"\";\n\t}\n\n\tofSpouse(relation?: string | undefined) {\n\t\treturn relation ?? \"\";\n\t}\n\n\tspouseOf(relation?: string | undefined) {\n\t\treturn relation ?? \"\";\n\t}\n\n\trelationType(relation?: string | undefined) {\n\t\treturn relation ?? \"\";\n\t}\n\n\tof(relation?: string | undefined) {\n\t\treturn relation ?? \"\";\n\t}\n\n\tinLaw(relation?: string | undefined) {\n\t\treturn relation ?? \"\";\n\t}\n}\n","import type {IndiType} from \"../classes/indi\";\n\nimport type {CrossCases, CrossCase} from \"./types\";\n\nexport const parentRelationsHu: Record<string, string> = {\n\tstep: \"mostoha\",\n\tfoster: \"nevelt\",\n\tbirth: \"vérszerinti\",\n\tbiological: \"vérszerinti\",\n\tadopted: \"örökbefogadott\",\n};\n\nconst nominativus: CrossCase = {\n\tapa: { nominativus: \"apa\", dativus: \"apjának\", possessivus: \"apja\" },\n\tanya: { nominativus: \"anya\", dativus: \"anyjának\", possessivus: \"anyja\" },\n\tapós: { nominativus: \"após\", dativus: \"apósának\", possessivus: \"apósa\" },\n\tanyós: {\n\t\tnominativus: \"anyós\",\n\t\tdativus: \"anyósának\",\n\t\tpossessivus: \"anyósa\",\n\t},\n\tvő: { nominativus: \"vő\", dativus: \"vejének\", possessivus: \"veje\" },\n\tmeny: { nominativus: \"meny\", dativus: \"menyének\", possessivus: \"menye\" },\n\tsógor: {\n\t\tnominativus: \"sógor\",\n\t\tdativus: \"sógorának\",\n\t\tpossessivus: \"sógora\",\n\t},\n\tsógornő: {\n\t\tnominativus: \"sógornő\",\n\t\tdativus: \"sógornőjének\",\n\t\tpossessivus: \"sógornője\",\n\t},\n\tbácsi: {\n\t\tnominativus: \"bácsi\",\n\t\tdativus: \"bátyjának\",\n\t\tpossessivus: \"bátyja\",\n\t},\n\tnéni: { nominativus: \"néni\", dativus: \"nénjének\", possessivus: \"nénje\" },\n\ttestvér: {\n\t\tnominativus: \"testvér\",\n\t\tdativus: \"testvérének\",\n\t\tpossessivus: \"testvére\",\n\t},\n\töcs: { nominativus: \"öcs\", dativus: \"öccsének\", possessivus: \"öccse\" },\n\thúg: { nominativus: \"húg\", dativus: \"húgának\", possessivus: \"húga\" },\n\tférj: { nominativus: \"férj\", dativus: \"férjének\", possessivus: \"férje\" },\n\tfeleség: {\n\t\tnominativus: \"feleség\",\n\t\tdativus: \"feleségének\",\n\t\tpossessivus: \"felesége\",\n\t},\n\tházastárs: {\n\t\tnominativus: \"házastárs\",\n\t\tdativus: \"házastársának\",\n\t\tpossessivus: \"házastársa\",\n\t},\n\tunoka: {\n\t\tnominativus: \"unoka\",\n\t\tdativus: \"unokájának\",\n\t\tpossessivus: \"unokája\",\n\t},\n\tgyermek: {\n\t\tnominativus: \"gyermek\",\n\t\tdativus: \"gyermekének\",\n\t\tpossessivus: \"gyermeke\",\n\t},\n\tszülő: {\n\t\tnominativus: \"szülő\",\n\t\tdativus: \"szülőjének\",\n\t\tpossessivus: \"szülője\",\n\t},\n};\n\nconst dativus = Object.values(nominativus).reduce<CrossCase>((acc, val) => {\n\tacc[val.dativus] = val;\n\n\treturn acc;\n}, {});\n\nconst possessivus = Object.values(nominativus).reduce<CrossCase>((acc, val) => {\n\tacc[val.possessivus] = val;\n\n\treturn acc;\n}, {});\n\nexport const casesHu: CrossCases = {\n\tnominativus,\n\tdativus,\n\tpossessivus,\n};\n\nexport const InLawsHu: Record<\n\tstring,\n\tstring | ((indi?: IndiType) => string | undefined)\n> = {\n\t\"gyermek felesége\": \"meny\",\n\t\"gyermek férje\": \"vő\",\n\t[`(férj|feleség) (?<mod1>(${Object.values(parentRelationsHu).join(\n\t\t\"|\"\n\t)}) )?anyja`]: \"anyós\",\n\t[`(férj|feleség) (?<mod1>(${Object.values(parentRelationsHu).join(\n\t\t\"|\"\n\t)}) )?apja`]: \"após\",\n\t[`(férj|feleség) (?<mod1>(${Object.values(parentRelationsHu).join(\n\t\t\"|\"\n\t)}) )?(fél)?testvére`]: (indi?: IndiType) => {\n\t\tif (indi?.isMale()) {\n\t\t\treturn \"sógor\";\n\t\t}\n\t\tif (indi?.isFemale()) {\n\t\t\treturn \"sógornő\";\n\t\t}\n\t},\n\t[`(fél)?testvér férje`]: \"sógor\",\n\t[`(fél)?testvér felesége`]: \"sógornő\",\n};\n","import { nameFormatter } from \"../utils/name-formatter\";\nimport { hungarianOrdinalize } from \"../utils/ordinalize\";\n\nimport KinshipTranslatorBasic from \"./kinship-translator.basic\";\nimport { InLawsHu, casesHu, parentRelationsHu } from \"./patterns.hu\";\nimport type {CrossCases} from \"./types\";\n\nexport default class KinshipTranslatorHU extends KinshipTranslatorBasic {\n\tprivate directPrefix(l?: number) {\n\t\tconst level = l === undefined ? Math.abs(this.pathN?.level ?? 0) : l;\n\t\tif (level <= 1) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tif (level === 2) {\n\t\t\treturn \"nagy\";\n\t\t}\n\n\t\tif (level === 3) {\n\t\t\treturn \"déd\";\n\t\t}\n\n\t\tif (level === 4) {\n\t\t\treturn \"ük\";\n\t\t}\n\n\t\tif (level === 5) {\n\t\t\treturn \"szép\";\n\t\t}\n\n\t\tif (level === 6) {\n\t\t\treturn \"ős\";\n\t\t}\n\n\t\treturn `${level - 5}. ős`;\n\t}\n\n\tprivate caseReplacer(\n\t\trelation: string,\n\t\tto: keyof CrossCases,\n\t\tfrom: keyof CrossCases = \"nominativus\",\n\t\tmod: \" \" | \"$\" = \"$\"\n\t) {\n\t\tlet newRelation = relation;\n\t\tObject.keys(casesHu[from]).forEach((c) => {\n\t\t\tnewRelation = newRelation.replace(\n\t\t\t\tnew RegExp(`(?<word1>${c}(?<mod>${mod}))`),\n\t\t\t\t(m, ...rest) => {\n\t\t\t\t\tconst groups = rest[rest.length - 1] as\n\t\t\t\t\t\t| {\n\t\t\t\t\t\t\t\tword1?: string;\n\t\t\t\t\t\t\t\tword2?: string;\n\t\t\t\t\t\t\t\tmod?: string;\n\t\t\t\t\t\t }\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\tconst word = groups?.word1 || groups?.word2;\n\t\t\t\t\tif (!word) {\n\t\t\t\t\t\treturn m;\n\t\t\t\t\t}\n\t\t\t\t\tconst toReplace = casesHu[from][word.trim()][to];\n\t\t\t\t\treturn toReplace ? `${toReplace}${groups.mod || \"\"}` : m;\n\t\t\t\t}\n\t\t\t);\n\t\t});\n\n\t\treturn newRelation;\n\t}\n\n\tindirect() {\n\t\tlet degree = Math.abs(this.pathN?.degree ?? 0);\n\t\tif (degree > 0) {\n\t\t\tdegree = degree - 1;\n\t\t}\n\n\t\tif (degree === 1) {\n\t\t\treturn `unokatestvér`;\n\t\t}\n\n\t\treturn `${hungarianOrdinalize(degree)}unokatestvér`;\n\t}\n\n\tremoval() {\n\t\tconst level = this.pathN?.level ?? 0;\n\t\tlet degree = Math.abs(this.pathN?.degree ?? 0);\n\t\tif (degree > 0) {\n\t\t\tdegree = degree - 1;\n\t\t}\n\n\t\tif (!degree || (Math.abs(level) >= 1 && Math.abs(level) <= 6)) {\n\t\t\treturn level < 0 ? this.nibling() : this.auncle();\n\t\t}\n\n\t\treturn `${hungarianOrdinalize(\n\t\t\tdegree\n\t\t)}unokatestvér ${level}x eltávolítva`;\n\t}\n\n\tauncle() {\n\t\tconst level = this.pathN?.level ?? 0;\n\t\tconst degree = Math.abs(this.pathN?.degree ?? 0);\n\n\t\tlet degreeString = degree > 1 ? hungarianOrdinalize(degree) : \"\";\n\t\tif (degreeString) {\n\t\t\tdegreeString = `${degreeString}-`;\n\t\t}\n\n\t\tlet prefix = this.directPrefix();\n\t\tconst origPrefix = prefix;\n\n\t\tif (level === 2) {\n\t\t\tprefix = \"nagy-\";\n\t\t}\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${degreeString}${prefix}nagybácsi`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${degreeString}${prefix}nagynéni`;\n\t\t}\n\n\t\treturn `${origPrefix}szülő ${\n\t\t\tdegreeString ? `${degreeString}unoka` : \"\"\n\t\t}testvére`;\n\t}\n\n\tnibling() {\n\t\tconst level = Math.abs(this.pathN?.level ?? 0);\n\t\tconst degree = Math.abs(this.pathN?.degree ?? 0);\n\n\t\tconst ordinalized = degree > 1 ? hungarianOrdinalize(degree) : \"\";\n\t\tlet degreeString = ordinalized;\n\t\tif (degreeString) {\n\t\t\tdegreeString = `${degreeString}-`;\n\t\t}\n\t\tconst prefix = this.directPrefix(level + 1);\n\t\tconst origPrefix = this.directPrefix();\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${degreeString}${\n\t\t\t\tlevel === 1 ? origPrefix : prefix\n\t\t\t}unokaöcs`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${degreeString}${\n\t\t\t\tlevel === 1 ? origPrefix : prefix\n\t\t\t}unokahúg`;\n\t\t}\n\n\t\tif (level <= 1) {\n\t\t\treturn `${\n\t\t\t\tordinalized ? `${ordinalized}unoka` : \"\"\n\t\t\t}testvér gyermeke`;\n\t\t}\n\n\t\treturn `${\n\t\t\tordinalized ? `${ordinalized}unoka` : \"\"\n\t\t}testvér ${origPrefix.replace(/nagy$/, \"\")}unokája`;\n\t}\n\n\tparent() {\n\t\tconst prefix = this.directPrefix();\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${prefix}apa`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${prefix}anya`;\n\t\t}\n\n\t\treturn `${prefix}szülő`;\n\t}\n\n\tchild() {\n\t\tconst level = Math.abs(this.pathN?.level ?? 0);\n\n\t\tif (level <= 1) {\n\t\t\treturn \"gyermek\";\n\t\t}\n\n\t\tconst prefix = this.directPrefix();\n\n\t\treturn `${prefix.replace(/nagy$/, \"\")}unoka`;\n\t}\n\n\tsibling() {\n\t\tconst parents1 = this.person1?.getBiologicalParents();\n\t\tconst parentsN = this.personN?.getBiologicalParents();\n\n\t\tconst inter = parents1?.intersection(parentsN);\n\n\t\t// TODO if both has one parent in tree, this returns with an invalid/unsure half-blood state\n\t\tif (!inter || inter.length < 2) {\n\t\t\treturn \"féltestvér\";\n\t\t}\n\n\t\treturn \"testvér\";\n\t}\n\n\tspouse() {\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn \"férj\";\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn \"feleség\";\n\t\t}\n\n\t\treturn \"házastárs\";\n\t}\n\n\tofSpouse(relation?: string | undefined) {\n\t\tif (!relation) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst spouse = this.path?.[1].indi;\n\n\t\tlet spouseType = \"házastárs\";\n\t\tif (spouse?.isMale()) {\n\t\t\tspouseType = \"férj\";\n\t\t}\n\n\t\tif (spouse?.isFemale()) {\n\t\t\tspouseType = \"feleség\";\n\t\t}\n\n\t\treturn `${spouseType} ${this.caseReplacer(relation, \"possessivus\")}`;\n\t}\n\n\tspouseOf(relation?: string | undefined) {\n\t\tif (!relation) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst spouse = this.path?.[this.path.length - 1].indi;\n\n\t\tlet spouseType = \"házastársa\";\n\t\tif (spouse?.isMale()) {\n\t\t\tspouseType = \"férje\";\n\t\t}\n\n\t\tif (spouse?.isFemale()) {\n\t\t\tspouseType = \"felesége\";\n\t\t}\n\n\t\treturn `${this.caseReplacer(\n\t\t\trelation,\n\t\t\t\"nominativus\",\n\t\t\t\"possessivus\"\n\t\t)} ${spouseType}`;\n\t}\n\n\tof(relation?: string | undefined) {\n\t\tconst formattedName = nameFormatter(this.path?.[0]?.indi, {\n\t\t\tnameOrder: \"last-first\",\n\t\t});\n\n\t\tlet name = formattedName.inOrder.filter(Boolean).join(\" \");\n\n\t\tif (this.displayName === \"none\") {\n\t\t\tname = \"\";\n\t\t} else if (this.displayName === \"givenname\") {\n\t\t\tname = formattedName.givenname;\n\t\t} else if (this.displayName === \"surname\") {\n\t\t\tname = `${formattedName.surname}`;\n\t\t}\n\n\t\tconst isSpouse =\n\t\t\tthis.path?.[1].kinship === \"spouse\" ||\n\t\t\tthis.path?.[this.path.length - 1].kinship === \"spouse\";\n\n\t\tif (!name || !relation) {\n\t\t\treturn relation ?? \"\";\n\t\t}\n\n\t\tif (isSpouse) {\n\t\t\treturn `${name} ${this.caseReplacer(\n\t\t\t\tthis.caseReplacer(relation, \"dativus\", \"nominativus\", \" \"),\n\t\t\t\t\"possessivus\"\n\t\t\t)}`;\n\t\t}\n\n\t\treturn `${name} ${this.caseReplacer(\n\t\t\tthis.caseReplacer(relation, \"possessivus\", \"nominativus\", \" \"),\n\t\t\t\"possessivus\"\n\t\t)}`;\n\t}\n\n\tinLaw(relation?: string | undefined) {\n\t\tlet inLawRelation = relation;\n\t\tObject.keys(InLawsHu).find((pattern) => {\n\t\t\tconst regex = new RegExp(\n\t\t\t\t`(?<space> )(?<word1>${pattern})$|^(?<word2>${pattern.replace(\n\t\t\t\t\t\"?<mod1>\",\n\t\t\t\t\t\"?<mod2>\"\n\t\t\t\t)})$`\n\t\t\t);\n\n\t\t\tif (relation?.match(regex)) {\n\t\t\t\tinLawRelation = relation?.replace(regex, (m, ...rest) => {\n\t\t\t\t\tconst groups = rest[rest.length - 1] as\n\t\t\t\t\t\t| {\n\t\t\t\t\t\t\t\tword1?: string;\n\t\t\t\t\t\t\t\tword2?: string;\n\t\t\t\t\t\t\t\tspace?: string;\n\t\t\t\t\t\t\t\tmod1?: string;\n\t\t\t\t\t\t\t\tmod2?: string;\n\t\t\t\t\t\t }\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\tconst word = groups?.word1 || groups?.word2;\n\t\t\t\t\tconst mod = groups?.mod1 || groups?.mod2;\n\t\t\t\t\tif (!word) {\n\t\t\t\t\t\treturn m;\n\t\t\t\t\t}\n\t\t\t\t\tlet toReplace = InLawsHu[word.trim()] || InLawsHu[pattern];\n\n\t\t\t\t\tif (typeof toReplace === \"function\") {\n\t\t\t\t\t\ttoReplace = toReplace(this.personN) ?? \"\";\n\t\t\t\t\t}\n\n\t\t\t\t\treturn toReplace\n\t\t\t\t\t\t? `${groups.space || \"\"}${mod || \"\"}${toReplace}`\n\t\t\t\t\t\t: m;\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\n\t\treturn inLawRelation ?? \"\";\n\t}\n\n\trelationType(relation?: string | undefined) {\n\t\tif (!relation || !this.pathN?.relation) {\n\t\t\treturn relation ?? \"\";\n\t\t}\n\n\t\treturn `${parentRelationsHu[this.pathN.relation]} ${relation}`;\n\t}\n}\n","export const InLawsEn: Record<string, string> = {\n\t\"spouse of (child|daughter|son)\": \"child-in-law\",\n\t\"wife of (child|daughter|son)\": \"daughter-in-law\",\n\t\"husband of (child|daughter|son)\": \"son-in-law\",\n\t\"mother of (spouse|wife|husband)\": \"mother-in-law\",\n\t\"father of (spouse|wife|husband)\": \"father-in-law\",\n\t\"parent of (spouse|wife|husband)\": \"parent-in-law\",\n\t\"wife of (half-)?(sibling|sister|brother)\": \"sister-in-law\",\n\t\"husband of (half-)?(sibling|sister|brother)\": \"brother-in-law\",\n\t\"spouse of (half-)?(sibling|sister|brother)\": \"sibling-in-law\",\n\t\"(half-)?sister of (spouse|wife|husband)\": \"sister-in-law\",\n\t\"(half-)?brother of (spouse|wife|husband)\": \"brother-in-law\",\n\t\"(half-)?sibling of (spouse|wife|husband)\": \"sibling-in-law\",\n};\n","import { nameFormatter } from \"../utils/name-formatter\";\nimport { ordinalize } from \"../utils/ordinalize\";\n\nimport KinshipTranslatorBasic from \"./kinship-translator.basic\";\nimport { InLawsEn } from \"./patterns.en\";\n\nexport default class KinshipTranslatorEn extends KinshipTranslatorBasic {\n\tprivate directPrefix() {\n\t\tconst level = Math.abs(this.pathN?.level ?? 0);\n\t\tif (level <= 1) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tif (level === 2) {\n\t\t\treturn \"grand\";\n\t\t}\n\n\t\tif (level === 3) {\n\t\t\treturn \"great-grand\";\n\t\t}\n\n\t\treturn `${ordinalize(level - 2)} great-grand`;\n\t}\n\n\tindirect() {\n\t\tlet degree = Math.abs(this.pathN?.degree ?? 0);\n\t\tif (degree > 0) {\n\t\t\tdegree = degree - 1;\n\t\t}\n\n\t\tif (degree === 1) {\n\t\t\treturn `cousin`;\n\t\t}\n\n\t\treturn `${ordinalize(degree)} cousin`;\n\t}\n\n\tremoval() {\n\t\tconst level = this.pathN?.level ?? 0;\n\t\tlet degree = Math.abs(this.pathN?.degree ?? 0);\n\t\tif (degree > 0) {\n\t\t\tdegree = degree - 1;\n\t\t}\n\n\t\tif (!degree) {\n\t\t\treturn level < 0 ? this.nibling() : this.auncle();\n\t\t}\n\n\t\treturn `${ordinalize(degree)} cousin ${level}x removed`;\n\t}\n\n\tauncle() {\n\t\tconst prefix = this.directPrefix();\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${prefix}uncle`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${prefix}aunt`;\n\t\t}\n\n\t\treturn `${prefix}auncle`;\n\t}\n\n\tnibling() {\n\t\tconst prefix = this.directPrefix();\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${prefix}nephew`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${prefix}niece`;\n\t\t}\n\n\t\treturn `${prefix}nibling`;\n\t}\n\n\tparent() {\n\t\tconst prefix = this.directPrefix();\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${prefix}father`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${prefix}mother`;\n\t\t}\n\n\t\treturn `${prefix}parent`;\n\t}\n\n\tchild() {\n\t\tconst prefix = this.directPrefix();\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${prefix}son`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${prefix}daughter`;\n\t\t}\n\n\t\treturn `${prefix}child`;\n\t}\n\n\tsibling() {\n\t\tconst parents1 = this.person1?.getBiologicalParents();\n\t\tconst parentsN = this.personN?.getBiologicalParents();\n\n\t\tconst inter = parents1?.intersection(parentsN);\n\n\t\t// TODO if both has one parent in tree, this returns with an invalid/unsure half-blood state\n\t\tlet prefix = \"\";\n\t\tif (!inter || inter.length < 2) {\n\t\t\tprefix = \"half-\";\n\t\t}\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${prefix}brother`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${prefix}sister`;\n\t\t}\n\n\t\treturn `${prefix}sibling`;\n\t}\n\n\tspouse() {\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn \"husband\";\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn \"wife\";\n\t\t}\n\n\t\treturn \"spouse\";\n\t}\n\n\tofSpouse(relation?: string | undefined) {\n\t\tif (!relation) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst spouse = this.path?.[1].indi;\n\n\t\tlet spouseType = \"spouse\";\n\t\tif (spouse?.isMale()) {\n\t\t\tspouseType = \"husband\";\n\t\t}\n\n\t\tif (spouse?.isFemale()) {\n\t\t\tspouseType = \"wife\";\n\t\t}\n\n\t\treturn `${relation} of ${spouseType}`;\n\t}\n\n\tspouseOf(relation?: string | undefined) {\n\t\tif (!relation) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst spouse = this.path?.[this.path.length - 1].indi;\n\n\t\tlet spouseType = \"spouse\";\n\t\tif (spouse?.isMale()) {\n\t\t\tspouseType = \"husband\";\n\t\t}\n\n\t\tif (spouse?.isFemale()) {\n\t\t\tspouseType = \"wife\";\n\t\t}\n\n\t\treturn `${spouseType} of ${relation}`;\n\t}\n\n\tof(relation?: string | undefined) {\n\t\tconst formattedName = nameFormatter(this.path?.[0]?.indi, {\n\t\t\tnameOrder: \"first-last\",\n\t\t});\n\n\t\tlet name = formattedName.inOrder.filter(Boolean).join(\" \");\n\n\t\tif (this.displayName === \"none\") {\n\t\t\tname = \"\";\n\t\t} else if (this.displayName === \"givenname\") {\n\t\t\tname = formattedName.givenname;\n\t\t} else if (this.displayName === \"surname\") {\n\t\t\tname = `${formattedName.surname}`;\n\t\t}\n\n\t\tif (!name || !relation) {\n\t\t\treturn relation ?? \"\";\n\t\t}\n\n\t\tif (relation.includes(\" of \")) {\n\t\t\treturn relation.replace(\" of \", ` of ${name}'s `);\n\t\t}\n\n\t\treturn `${name}'s ${relation}`;\n\t}\n\n\tinLaw(relation?: string | undefined) {\n\t\tlet inLawRelation = relation;\n\t\tObject.keys(InLawsEn).find((pattern) => {\n\t\t\tconst regex = new RegExp(\n\t\t\t\t`(?<space> )(?<word1>${pattern})$|^(?<word2>${pattern})$`\n\t\t\t);\n\n\t\t\tif (relation?.match(regex)) {\n\t\t\t\tinLawRelation = relation?.replace(regex, (m, ...rest) => {\n\t\t\t\t\tconst groups = rest[rest.length - 1] as\n\t\t\t\t\t\t| {\n\t\t\t\t\t\t\t\tword1?: string;\n\t\t\t\t\t\t\t\tword2?: string;\n\t\t\t\t\t\t\t\tspace?: string;\n\t\t\t\t\t\t }\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\tconst word = groups?.word1 || groups?.word2;\n\t\t\t\t\tif (!word) {\n\t\t\t\t\t\treturn m;\n\t\t\t\t\t}\n\t\t\t\t\tconst toReplace =\n\t\t\t\t\t\tInLawsEn[word.trim()] || InLawsEn[pattern];\n\t\t\t\t\treturn toReplace ? `${groups.space || \"\"}${toReplace}` : m;\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\n\t\treturn inLawRelation ?? \"\";\n\t}\n\n\trelationType(relation?: string | undefined) {\n\t\tif (!relation || !this.pathN?.relation) {\n\t\t\treturn relation ?? \"\";\n\t\t}\n\n\t\treturn `${this.pathN.relation} ${relation}`;\n\t}\n}\n","export const InLawsDe: Record<string, string> = {\n\t\"Ehepartner von (kind|tochter|sohn)\": \"Schwiegerkind\",\n\t\"Ehefrau von (kind|tochter|sohn)\": \"Schwiegertochter\",\n\t\"Ehemann von (kind|tochter|sohn)\": \"Schwiegersohn\",\n\t\"mutter des (Ehepartner|Ehefrau|Ehemann)s\": \"Schwiegermutter\",\n\t\"vater des (Ehepartner|Ehefrau|Ehemann)s\": \"Schwiegervater\",\n\t\"elternteil des (Ehepartner|Ehefrau|Ehemann)s\": \"Schwiegerelternteil\",\n\t\"Ehefrau von (Halb)?(geschwister|schwester|bruder)\": \"Schwägerin\",\n\t\"Ehemann von (Halb)?(geschwister|schwester|bruder)\": \"Schwager\",\n\t\"Ehepartner von (Halb)?(geschwister|schwester|bruder)\":\n\t\t\"Schwager/Schwägerin\",\n\t\"(Halb)?schwester des (Ehepartner|Ehefrau|Ehemann)s\": \"Schwägerin\",\n\t\"(Halb)?bruder des (Ehepartner|Ehefrau|Ehemann)s\": \"Schwager\",\n\t\"(Halb)?geschwister des (Ehepartner|Ehefrau|Ehemann)s\":\n\t\t\"Schwager/Schwägerin\",\n};\n","import { nameFormatter } from \"../utils/name-formatter\";\n\nimport KinshipTranslatorBasic from \"./kinship-translator.basic\";\nimport { InLawsDe } from \"./patterns.de\";\n\nexport default class KinshipTranslatorDe extends KinshipTranslatorBasic {\n\tprivate directPrefix() {\n\t\tconst level = Math.abs(this.pathN?.level ?? 0);\n\t\tif (level <= 1) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tif (level === 2) {\n\t\t\treturn \"Groß\";\n\t\t}\n\n\t\tif (level === 3) {\n\t\t\treturn \"Urgroß\";\n\t\t}\n\n\t\treturn `Ur${level - 2}-groß`;\n\t}\n\n\tindirect() {\n\t\tlet degree = Math.abs(this.pathN?.degree ?? 0);\n\t\tif (degree > 0) {\n\t\t\tdegree = degree - 1;\n\t\t}\n\n\t\tif (degree === 1) {\n\t\t\treturn `Cousin`;\n\t\t}\n\n\t\treturn `Cousin ${degree}. Grades`;\n\t}\n\n\tremoval() {\n\t\tconst level = this.pathN?.level ?? 0;\n\t\tlet degree = Math.abs(this.pathN?.degree ?? 0);\n\t\tif (degree > 0) {\n\t\t\tdegree = degree - 1;\n\t\t}\n\n\t\tif (!degree) {\n\t\t\treturn level < 0 ? this.nibling() : this.auncle();\n\t\t}\n\n\t\treturn `Cousin ${degree}. Grades ${Math.abs(level)}× entfernt`;\n\t}\n\n\tauncle() {\n\t\tconst prefix = this.directPrefix();\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${prefix}onkel`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${prefix}tante`;\n\t\t}\n\n\t\treturn `${prefix}onkel/tante`;\n\t}\n\n\tnibling() {\n\t\tconst prefix = this.directPrefix();\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${prefix}neffe`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${prefix}nichte`;\n\t\t}\n\n\t\treturn `${prefix}neffe/nichte`;\n\t}\n\n\tparent() {\n\t\tconst prefix = this.directPrefix();\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${prefix}vater`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${prefix}mutter`;\n\t\t}\n\n\t\treturn `${prefix}elternteil`;\n\t}\n\n\tchild() {\n\t\tconst prefix = this.directPrefix();\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${prefix}sohn`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${prefix}tochter`;\n\t\t}\n\n\t\treturn `${prefix}kind`;\n\t}\n\n\tsibling() {\n\t\tconst parents1 = this.person1?.getBiologicalParents();\n\t\tconst parentsN = this.personN?.getBiologicalParents();\n\n\t\tconst inter = parents1?.intersection(parentsN);\n\n\t\tlet prefix = \"\";\n\t\tif (!inter || inter.length < 2) {\n\t\t\tprefix = \"Halb\";\n\t\t}\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${prefix}bruder`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${prefix}schwester`;\n\t\t}\n\n\t\treturn `${prefix}geschwister`;\n\t}\n\n\tspouse() {\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn \"Ehemann\";\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn \"Ehefrau\";\n\t\t}\n\n\t\treturn \"Ehepartner\";\n\t}\n\n\tofSpouse(relation?: string | undefined) {\n\t\tif (!relation) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst spouse = this.path?.[1].indi;\n\n\t\tlet spouseType = \"Ehepartner\";\n\t\tif (spouse?.isMale()) {\n\t\t\tspouseType = \"Ehemann\";\n\t\t}\n\n\t\tif (spouse?.isFemale()) {\n\t\t\tspouseType = \"Ehefrau\";\n\t\t}\n\n\t\treturn `${relation} des ${spouseType}s`;\n\t}\n\n\tspouseOf(relation?: string | undefined) {\n\t\tif (!relation) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst spouse = this.path?.[this.path.length - 1].indi;\n\n\t\tlet spouseType = \"Ehepartner\";\n\t\tif (spouse?.isMale()) {\n\t\t\tspouseType = \"Ehemann\";\n\t\t}\n\n\t\tif (spouse?.isFemale()) {\n\t\t\tspouseType = \"Ehefrau\";\n\t\t}\n\n\t\treturn `${spouseType} von ${relation}`;\n\t}\n\n\tof(relation?: string | undefined) {\n\t\tconst formattedName = nameFormatter(this.path?.[0]?.indi, {\n\t\t\tnameOrder: \"first-last\",\n\t\t});\n\n\t\tlet name = formattedName.inOrder.filter(Boolean).join(\" \");\n\n\t\tif (this.displayName === \"none\") {\n\t\t\tname = \"\";\n\t\t} else if (this.displayName === \"givenname\") {\n\t\t\tname = formattedName.givenname;\n\t\t} else if (this.displayName === \"surname\") {\n\t\t\tname = `${formattedName.surname}`;\n\t\t}\n\n\t\tif (!name || !relation) {\n\t\t\treturn relation ?? \"\";\n\t\t}\n\n\t\tif (relation.includes(\" des \") || relation.includes(\" von \")) {\n\t\t\treturn relation.replace(/ (des|von) /, ` $1 ${name}s `);\n\t\t}\n\n\t\treturn `${name}s ${relation}`;\n\t}\n\n\tinLaw(relation?: string | undefined) {\n\t\tlet inLawRelation = relation;\n\t\tObject.keys(InLawsDe).find((pattern) => {\n\t\t\tconst regex = new RegExp(\n\t\t\t\t`(?<space> )(?<word1>${pattern})$|^(?<word2>${pattern})$`\n\t\t\t);\n\n\t\t\tif (relation?.match(regex)) {\n\t\t\t\tinLawRelation = relation?.replace(regex, (m, ...rest) => {\n\t\t\t\t\tconst groups = rest[rest.length - 1] as\n\t\t\t\t\t\t| {\n\t\t\t\t\t\t\t\tword1?: string;\n\t\t\t\t\t\t\t\tword2?: string;\n\t\t\t\t\t\t\t\tspace?: string;\n\t\t\t\t\t\t }\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\tconst word = groups?.word1 || groups?.word2;\n\t\t\t\t\tif (!word) {\n\t\t\t\t\t\treturn m;\n\t\t\t\t\t}\n\t\t\t\t\tconst toReplace =\n\t\t\t\t\t\tInLawsDe[word.trim()] || InLawsDe[pattern];\n\t\t\t\t\treturn toReplace ? `${groups.space || \"\"}${toReplace}` : m;\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\n\t\treturn inLawRelation ?? \"\";\n\t}\n\n\trelationType(relation?: string | undefined) {\n\t\tif (!relation || !this.pathN?.relation) {\n\t\t\treturn relation ?? \"\";\n\t\t}\n\n\t\treturn `${this.pathN.relation} ${relation}`;\n\t}\n}\n","export const InLawsFr: Record<string, string> = {\n\t\"conjoint de (enfant|fille|fils)\": \"beau-fils/belle-fille\",\n\t\"épouse de (enfant|fille|fils)\": \"belle-fille\",\n\t\"mari de (enfant|fille|fils)\": \"gendre\",\n\t\"mère du (conjoint|épouse|mari)\": \"belle-mère\",\n\t\"père du (conjoint|épouse|mari)\": \"beau-père\",\n\t\"parent du (conjoint|épouse|mari)\": \"beau-parent\",\n\t\"épouse de (demi-)?(frère/sœur|sœur|frère)\": \"belle-sœur\",\n\t\"mari de (demi-)?(frère/sœur|sœur|frère)\": \"beau-frère\",\n\t\"conjoint de (demi-)?(frère/sœur|sœur|frère)\": \"beau-frère/belle-sœur\",\n\t\"(demi-)?sœur du (conjoint|épouse|mari)\": \"belle-sœur\",\n\t\"(demi-)?frère du (conjoint|épouse|mari)\": \"beau-frère\",\n\t\"(demi-)?frère/sœur du (conjoint|épouse|mari)\": \"beau-frère/belle-sœur\",\n};\n","import { nameFormatter } from \"../utils/name-formatter\";\nimport { ordinalize } from \"../utils/ordinalize\";\n\nimport KinshipTranslatorBasic from \"./kinship-translator.basic\";\nimport { InLawsFr } from \"./patterns.fr\";\n\nexport default class KinshipTranslatorFr extends KinshipTranslatorBasic {\n\tprivate directPrefix() {\n\t\tconst level = Math.abs(this.pathN?.level ?? 0);\n\t\tif (level <= 1) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tif (level === 2) {\n\t\t\treturn \"grand-\";\n\t\t}\n\n\t\tif (level === 3) {\n\t\t\treturn \"arrière-grand-\";\n\t\t}\n\n\t\treturn `arrière${level - 2}-grand-`;\n\t}\n\n\tindirect() {\n\t\tlet degree = Math.abs(this.pathN?.degree ?? 0);\n\t\tif (degree > 0) {\n\t\t\tdegree = degree - 1;\n\t\t}\n\n\t\tif (degree === 1) {\n\t\t\treturn `cousin`;\n\t\t}\n\n\t\treturn `cousin au ${ordinalize(degree)} degré`;\n\t}\n\n\tremoval() {\n\t\tconst level = this.pathN?.level ?? 0;\n\t\tlet degree = Math.abs(this.pathN?.degree ?? 0);\n\t\tif (degree > 0) {\n\t\t\tdegree = degree - 1;\n\t\t}\n\n\t\tif (!degree) {\n\t\t\treturn level < 0 ? this.nibling() : this.auncle();\n\t\t}\n\n\t\treturn `cousin au ${ordinalize(degree)} degré ${Math.abs(level)}× éloigné`;\n\t}\n\n\tauncle() {\n\t\tconst prefix = this.directPrefix();\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${prefix}oncle`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${prefix}tante`;\n\t\t}\n\n\t\treturn `${prefix}oncle/tante`;\n\t}\n\n\tnibling() {\n\t\tconst prefix = this.directPrefix();\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${prefix}neveu`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${prefix}nièce`;\n\t\t}\n\n\t\treturn `${prefix}neveu/nièce`;\n\t}\n\n\tparent() {\n\t\tconst prefix = this.directPrefix();\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${prefix}père`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${prefix}mère`;\n\t\t}\n\n\t\treturn `${prefix}parent`;\n\t}\n\n\tchild() {\n\t\tconst prefix = this.directPrefix();\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${prefix}fils`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${prefix}fille`;\n\t\t}\n\n\t\treturn `${prefix}enfant`;\n\t}\n\n\tsibling() {\n\t\tconst parents1 = this.person1?.getBiologicalParents();\n\t\tconst parentsN = this.personN?.getBiologicalParents();\n\n\t\tconst inter = parents1?.intersection(parentsN);\n\n\t\tlet prefix = \"\";\n\t\tif (!inter || inter.length < 2) {\n\t\t\tprefix = \"demi-\";\n\t\t}\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${prefix}frère`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${prefix}sœur`;\n\t\t}\n\n\t\treturn `${prefix}frère/sœur`;\n\t}\n\n\tspouse() {\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn \"mari\";\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn \"épouse\";\n\t\t}\n\n\t\treturn \"conjoint\";\n\t}\n\n\tofSpouse(relation?: string | undefined) {\n\t\tif (!relation) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst spouse = this.path?.[1].indi;\n\n\t\tlet spouseType = \"conjoint\";\n\t\tif (spouse?.isMale()) {\n\t\t\tspouseType = \"mari\";\n\t\t}\n\n\t\tif (spouse?.isFemale()) {\n\t\t\tspouseType = \"épouse\";\n\t\t}\n\n\t\treturn `${relation} du ${spouseType}`;\n\t}\n\n\tspouseOf(relation?: string | undefined) {\n\t\tif (!relation) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst spouse = this.path?.[this.path.length - 1].indi;\n\n\t\tlet spouseType = \"conjoint\";\n\t\tif (spouse?.isMale()) {\n\t\t\tspouseType = \"mari\";\n\t\t}\n\n\t\tif (spouse?.isFemale()) {\n\t\t\tspouseType = \"épouse\";\n\t\t}\n\n\t\treturn `${spouseType} de ${relation}`;\n\t}\n\n\tof(relation?: string | undefined) {\n\t\tconst formattedName = nameFormatter(this.path?.[0]?.indi, {\n\t\t\tnameOrder: \"first-last\",\n\t\t});\n\n\t\tlet name = formattedName.inOrder.filter(Boolean).join(\" \");\n\n\t\tif (this.displayName === \"none\") {\n\t\t\tname = \"\";\n\t\t} else if (this.displayName === \"givenname\") {\n\t\t\tname = formattedName.givenname;\n\t\t} else if (this.displayName === \"surname\") {\n\t\t\tname = `${formattedName.surname}`;\n\t\t}\n\n\t\tif (!name || !relation) {\n\t\t\treturn relation ?? \"\";\n\t\t}\n\n\t\tif (relation.includes(\" du \") || relation.includes(\" de \")) {\n\t\t\treturn relation.replace(/ (du|de) /, ` $1 ${name} `);\n\t\t}\n\n\t\treturn `${relation} de ${name}`;\n\t}\n\n\tinLaw(relation?: string | undefined) {\n\t\tlet inLawRelation = relation;\n\t\tObject.keys(InLawsFr).find((pattern) => {\n\t\t\tconst regex = new RegExp(\n\t\t\t\t`(?<space> )(?<word1>${pattern})$|^(?<word2>${pattern})$`\n\t\t\t);\n\n\t\t\tif (relation?.match(regex)) {\n\t\t\t\tinLawRelation = relation?.replace(regex, (m, ...rest) => {\n\t\t\t\t\tconst groups = rest[rest.length - 1] as\n\t\t\t\t\t\t| {\n\t\t\t\t\t\t\t\tword1?: string;\n\t\t\t\t\t\t\t\tword2?: string;\n\t\t\t\t\t\t\t\tspace?: string;\n\t\t\t\t\t\t }\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\tconst word = groups?.word1 || groups?.word2;\n\t\t\t\t\tif (!word) {\n\t\t\t\t\t\treturn m;\n\t\t\t\t\t}\n\t\t\t\t\tconst toReplace =\n\t\t\t\t\t\tInLawsFr[word.trim()] || InLawsFr[pattern];\n\t\t\t\t\treturn toReplace ? `${groups.space || \"\"}${toReplace}` : m;\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\n\t\treturn inLawRelation ?? \"\";\n\t}\n\n\trelationType(relation?: string | undefined) {\n\t\tif (!relation || !this.pathN?.relation) {\n\t\t\treturn relation ?? \"\";\n\t\t}\n\n\t\treturn `${this.pathN.relation} ${relation}`;\n\t}\n}\n","export const InLawsEs: Record<string, string> = {\n\t\"cónyuge de (hijo/hija|hija|hijo)\": \"yerno/nuera\",\n\t\"esposa de (hijo/hija|hija|hijo)\": \"nuera\",\n\t\"esposo de (hijo/hija|hija|hijo)\": \"yerno\",\n\t\"madre del (cónyuge|esposa|esposo)\": \"suegra\",\n\t\"padre del (cónyuge|esposa|esposo)\": \"suegro\",\n\t\"padre/madre del (cónyuge|esposa|esposo)\": \"suegro/suegra\",\n\t\"esposa de (medio )?(hermano/hermana|hermana|hermano)\": \"cuñada\",\n\t\"esposo de (medio )?(hermano/hermana|hermana|hermano)\": \"cuñado\",\n\t\"cónyuge de (medio )?(hermano/hermana|hermana|hermano)\": \"cuñado/cuñada\",\n\t\"(medio )?hermana del (cónyuge|esposa|esposo)\": \"cuñada\",\n\t\"(medio )?hermano del (cónyuge|esposa|esposo)\": \"cuñado\",\n\t\"(medio )?hermano/hermana del (cónyuge|esposa|esposo)\": \"cuñado/cuñada\",\n};\n","import { nameFormatter } from \"../utils/name-formatter\";\nimport { ordinalize } from \"../utils/ordinalize\";\n\nimport KinshipTranslatorBasic from \"./kinship-translator.basic\";\nimport { InLawsEs } from \"./patterns.es\";\n\nexport default class KinshipTranslatorEs extends KinshipTranslatorBasic {\n\tprivate directPrefix() {\n\t\tconst level = Math.abs(this.pathN?.level ?? 0);\n\t\tif (level <= 1) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tif (level === 2) {\n\t\t\treturn \"bisabuel\";\n\t\t}\n\n\t\tif (level === 3) {\n\t\t\treturn \"tatarabuel\";\n\t\t}\n\n\t\treturn `tátara${level - 2}-abuel`;\n\t}\n\n\tindirect() {\n\t\tlet degree = Math.abs(this.pathN?.degree ?? 0);\n\t\tif (degree > 0) {\n\t\t\tdegree = degree - 1;\n\t\t}\n\n\t\tif (degree === 1) {\n\t\t\treturn `primo`;\n\t\t}\n\n\t\treturn `primo ${ordinalize(degree)}`;\n\t}\n\n\tremoval() {\n\t\tconst level = this.pathN?.level ?? 0;\n\t\tlet degree = Math.abs(this.pathN?.degree ?? 0);\n\t\tif (degree > 0) {\n\t\t\tdegree = degree - 1;\n\t\t}\n\n\t\tif (!degree) {\n\t\t\treturn level < 0 ? this.nibling() : this.auncle();\n\t\t}\n\n\t\treturn `primo ${ordinalize(degree)} ${Math.abs(level)}× separado`;\n\t}\n\n\tauncle() {\n\t\tconst prefix = this.directPrefix();\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${prefix}tío`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${prefix}tía`;\n\t\t}\n\n\t\treturn `${prefix}tío/tía`;\n\t}\n\n\tnibling() {\n\t\tconst prefix = this.directPrefix();\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${prefix}sobrino`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${prefix}sobrina`;\n\t\t}\n\n\t\treturn `${prefix}sobrino/sobrina`;\n\t}\n\n\tparent() {\n\t\tconst prefix = this.directPrefix();\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${prefix}padre`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${prefix}madre`;\n\t\t}\n\n\t\treturn `${prefix}padre/madre`;\n\t}\n\n\tchild() {\n\t\tconst prefix = this.directPrefix();\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${prefix}hijo`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${prefix}hija`;\n\t\t}\n\n\t\treturn `${prefix}hijo/hija`;\n\t}\n\n\tsibling() {\n\t\tconst parents1 = this.person1?.getBiologicalParents();\n\t\tconst parentsN = this.personN?.getBiologicalParents();\n\n\t\tconst inter = parents1?.intersection(parentsN);\n\n\t\tlet prefix = \"\";\n\t\tif (!inter || inter.length < 2) {\n\t\t\tprefix = \"medio \";\n\t\t}\n\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn `${prefix}hermano`;\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn `${prefix}hermana`;\n\t\t}\n\n\t\treturn `${prefix}hermano/hermana`;\n\t}\n\n\tspouse() {\n\t\tif (this.personN?.isMale()) {\n\t\t\treturn \"esposo\";\n\t\t}\n\n\t\tif (this.personN?.isFemale()) {\n\t\t\treturn \"esposa\";\n\t\t}\n\n\t\treturn \"cónyuge\";\n\t}\n\n\tofSpouse(relation?: string | undefined) {\n\t\tif (!relation) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst spouse = this.path?.[1].indi;\n\n\t\tlet spouseType = \"cónyuge\";\n\t\tif (spouse?.isMale()) {\n\t\t\tspouseType = \"esposo\";\n\t\t}\n\n\t\tif (spouse?.isFemale()) {\n\t\t\tspouseType = \"esposa\";\n\t\t}\n\n\t\treturn `${relation} del ${spouseType}`;\n\t}\n\n\tspouseOf(relation?: string | undefined) {\n\t\tif (!relation) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst spouse = this.path?.[this.path.length - 1].indi;\n\n\t\tlet spouseType = \"cónyuge\";\n\t\tif (spouse?.isMale()) {\n\t\t\tspouseType = \"esposo\";\n\t\t}\n\n\t\tif (spouse?.isFemale()) {\n\t\t\tspouseType = \"esposa\";\n\t\t}\n\n\t\treturn `${spouseType} de ${relation}`;\n\t}\n\n\tof(relation?: string | undefined) {\n\t\tconst formattedName = nameFormatter(this.path?.[0]?.indi, {\n\t\t\tnameOrder: \"first-last\",\n\t\t});\n\n\t\tlet name = formattedName.inOrder.filter(Boolean).join(\" \");\n\n\t\tif (this.displayName === \"none\") {\n\t\t\tname = \"\";\n\t\t} else if (this.displayName === \"givenname\") {\n\t\t\tname = formattedName.givenname;\n\t\t} else if (this.displayName === \"surname\") {\n\t\t\tname = `${formattedName.surname}`;\n\t\t}\n\n\t\tif (!name || !relation) {\n\t\t\treturn relation ?? \"\";\n\t\t}\n\n\t\tif (relation.includes(\" del \") || relation.includes(\" de \")) {\n\t\t\treturn relation.replace(/ (del|de) /, ` $1 ${name} `);\n\t\t}\n\n\t\treturn `${relation} de ${name}`;\n\t}\n\n\tinLaw(relation?: string | undefined) {\n\t\tlet inLawRelation = relation;\n\t\tObject.keys(InLawsEs).find((pattern) => {\n\t\t\tconst regex = new RegExp(\n\t\t\t\t`(?<space> )(?<word1>${pattern})$|^(?<word2>${pattern})$`\n\t\t\t);\n\n\t\t\tif (relation?.match(regex)) {\n\t\t\t\tinLawRelation = relation?.replace(regex, (m, ...rest) => {\n\t\t\t\t\tconst groups = rest[rest.length - 1] as\n\t\t\t\t\t\t| {\n\t\t\t\t\t\t\t\tword1?: string;\n\t\t\t\t\t\t\t\tword2?: string;\n\t\t\t\t\t\t\t\tspace?: string;\n\t\t\t\t\t\t }\n\t\t\t\t\t\t| undefined;\n\t\t\t\t\tconst word = groups?.word1 || groups?.word2;\n\t\t\t\t\tif (!word) {\n\t\t\t\t\t\treturn m;\n\t\t\t\t\t}\n\t\t\t\t\tconst toReplace =\n\t\t\t\t\t\tInLawsEs[word.trim()] || InLawsEs[pattern];\n\t\t\t\t\treturn toReplace ? `${groups.space || \"\"}${toReplace}` : m;\n\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\n\t\treturn inLawRelation ?? \"\";\n\t}\n\n\trelationType(relation?: string | undefined) {\n\t\tif (!relation || !this.pathN?.relation) {\n\t\t\treturn relation ?? \"\";\n\t\t}\n\n\t\treturn `${this.pathN.relation} ${relation}`;\n\t}\n}\n","import type {Path, IndiType} from \"../classes/indi\";\nimport type {IndiKey} from \"../types/types\";\n\nimport type IKinshipTranslator from \"./kinship-translator.interface\";\nimport * as translators from \"./translators\";\nimport type { Language } from \"./types\";\n\nexport default class KinshipTranslator<T extends boolean | undefined> {\n\tprivate readonly translator?: IKinshipTranslator;\n\tprivate readonly person1: IndiType;\n\tprivate readonly person2?: IndiType;\n\tprivate readonly path?: Path;\n\tprivate readonly entirePath?: T;\n\tprivate readonly lang: Language;\n\tprivate readonly displayName: \"none\" | \"givenname\" | \"surname\" | \"all\";\n\tconstructor(\n\t\tperson1: IndiType,\n\t\tperson2?: IndiType | IndiKey,\n\t\tlang: Language = \"en\",\n\t\tentirePath?: T,\n\t\tdisplayName: \"none\" | \"givenname\" | \"surname\" | \"all\" = \"givenname\"\n\t) {\n\t\tthis.displayName = displayName;\n\t\tthis.lang = lang;\n\t\tthis.entirePath = entirePath;\n\t\tthis.person1 = person1;\n\t\tthis.person2 =\n\t\t\ttypeof person2 === \"string\"\n\t\t\t\t? this.person1.getGedcom()?.indi(person2)\n\t\t\t\t: person2;\n\n\t\tthis.path = this.person1.path(this.person2);\n\n\t\tif (translators[lang]) {\n\t\t\tthis.translator = new translators[lang](\n\t\t\t\tthis.path ?? [],\n\t\t\t\tdisplayName\n\t\t\t);\n\t\t}\n\n\t\t// Fallback\n\t\tif (!this.translator) {\n\t\t\t// eslint-disable-next-line new-cap\n\t\t\tthis.translator = new translators.en(this.path ?? [], displayName);\n\t\t}\n\t}\n\n\tget path0() {\n\t\treturn this.path?.[0];\n\t}\n\n\tget path1() {\n\t\treturn this.path?.[1];\n\t}\n\n\tget pathM() {\n\t\treturn this.path?.[this.path.length - 2];\n\t}\n\n\tget pathN() {\n\t\treturn this.path?.[this.path.length - 1];\n\t}\n\n\tdirect() {\n\t\tif (this.pathN?.level === 0 && this.pathN.degree === 0) {\n\t\t\treturn this.translator?.spouse();\n\t\t}\n\n\t\tif (this.pathN?.level === 0 && this.pathN.degree === 1) {\n\t\t\treturn this.translator?.sibling();\n\t\t}\n\n\t\tif ((this.pathN?.level ?? 0) > 0 && this.pathN?.degree === 0) {\n\t\t\treturn this.translator?.parent();\n\t\t}\n\n\t\tif ((this.pathN?.level ?? 0) < 0 && this.pathN?.degree === 0) {\n\t\t\treturn this.translator?.child();\n\t\t}\n\t}\n\n\tindirect() {\n\t\treturn this.translator?.indirect();\n\t}\n\n\tremoval() {\n\t\treturn this.translator?.removal();\n\t}\n\n\ttranslate(showMainPerson?: boolean) {\n\t\tif (this.entirePath) {\n\t\t\tconst path = this.path?.map((path, index) => ({\n\t\t\t\tid: path.indi.id,\n\t\t\t\tgen: path.level,\n\t\t\t\tabsolute: this.person1.kinship(\n\t\t\t\t\tpath.indi.id,\n\t\t\t\t\tshowMainPerson,\n\t\t\t\t\tthis.lang,\n\t\t\t\t\tfalse,\n\t\t\t\t\tthis.displayName\n\t\t\t\t),\n\t\t\t\trelative: this.path?.[index - 1]?.indi.kinship(\n\t\t\t\t\tpath.indi.id,\n\t\t\t\t\tshowMainPerson,\n\t\t\t\t\tthis.lang,\n\t\t\t\t\tfalse,\n\t\t\t\t\tthis.displayName\n\t\t\t\t),\n\t\t\t})) as\n\t\t\t\t| Array<{ id?: IndiKey; absolute?: string; relative?: string }>\n\t\t\t\t| undefined;\n\n\t\t\treturn path;\n\t\t}\n\n\t\tconst person1 = this.path0;\n\t\tconst person2 = this.path1;\n\t\tconst personM = this.pathM;\n\t\tconst personN = this.pathN;\n\t\tif (!person1 || !person2 || !personM || !personN) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tif (\n\t\t\tperson2.kinship === \"spouse\" &&\n\t\t\tperson2.indi.id !== personN.indi.id\n\t\t) {\n\t\t\tthis.translator && (this.translator.isOfSpouse = true);\n\t\t} else if (\n\t\t\tpersonN.kinship === \"spouse\" &&\n\t\t\tperson2.indi.id !== personN.indi.id\n\t\t) {\n\t\t\tthis.translator && (this.translator.isSpouseOf = true);\n\t\t}\n\n\t\tlet relation: string | undefined;\n\t\tif (\n\t\t\tpersonN.degree === 0 ||\n\t\t\t(personN.degree === 1 && personN.level === 0)\n\t\t) {\n\t\t\trelation = this.direct();\n\t\t} else if (personN.level === 0) {\n\t\t\trelation = this.indirect();\n\t\t} else if (personN.level !== 0) {\n\t\t\trelation = this.removal();\n\t\t}\n\n\t\trelation = this.translator?.relationType(relation);\n\n\t\tif (this.translator?.isOfSpouse) {\n\t\t\trelation = this.translator?.ofSpouse(relation);\n\t\t} else if (this.translator?.isSpouseOf) {\n\t\t\trelation = this.translator?.spouseOf(relation);\n\t\t}\n\n\t\trelation = this.translator?.inLaw(relation);\n\n\t\tif (showMainPerson && relation) {\n\t\t\trelation = this.translator?.of(relation);\n\t\t}\n\n\t\treturn relation ?? \"\";\n\t}\n}\n","import type { IndiType } from \"../classes/indi\";\nimport KinshipTranslator from \"../kinship-translator/kinship-translator\";\nimport type { Language } from \"../kinship-translator/types\";\nimport type { IndiKey } from \"../types/types\";\n\n/**\n * Kinship translator class constructor type\n */\nexport type KinshipTranslatorConstructor = new (\n\tperson1: IndiType,\n\tperson2?: IndiType | IndiKey,\n\tlang?: Language,\n\tentirePath?: boolean,\n\tdisplayName?: \"none\" | \"givenname\" | \"surname\" | \"all\"\n) => {\n\ttranslate: <T extends boolean | undefined>(\n\t\tshowMainPerson: boolean\n\t) =>\n\t\t| (T extends false | undefined\n\t\t\t\t? string\n\t\t\t\t: Array<{\n\t\t\t\t\t\tid?: IndiKey;\n\t\t\t\t\t\tgen: number;\n\t\t\t\t\t\trelative?: string;\n\t\t\t\t\t\tabsolute?: string;\n\t\t\t\t\t}>)\n\t\t| undefined;\n};\n\n/**\n * Default kinship translator (uses the built-in translator)\n */\nlet KinshipTranslatorClass: KinshipTranslatorConstructor =\n\tKinshipTranslator as unknown as KinshipTranslatorConstructor;\n\n/**\n * Set a custom kinship translator class.\n * This allows the main project or external projects to override the kinship translation logic.\n *\n * @example\n * ```typescript\n * import { setKinshipTranslatorClass } from '@treeviz/gedcom-parser/factories/kinship-factory';\n * import MyCustomKinshipTranslator from './my-custom-kinship-translator';\n *\n * setKinshipTranslatorClass(MyCustomKinshipTranslator);\n * ```\n */\nexport const setKinshipTranslatorClass = (\n\tTranslatorClass: KinshipTranslatorConstructor\n) => {\n\tKinshipTranslatorClass = TranslatorClass;\n};\n\n/**\n * Get the current kinship translator class.\n * Used internally by the Indi class.\n */\nexport const getKinshipTranslatorClass = (): KinshipTranslatorConstructor => {\n\treturn KinshipTranslatorClass;\n};\n\n/**\n * Reset to the default built-in kinship translator.\n * Useful for testing or when switching between projects.\n */\nexport const resetKinshipTranslatorClass = () => {\n\tKinshipTranslatorClass =\n\t\tKinshipTranslator as unknown as KinshipTranslatorConstructor;\n};\n","export type PrimitiveRange =\n\t| \"\"\n\t| \"-\"\n\t| `-${number}`\n\t| `${number}-`\n\t| `${number}-${number}`;\nexport type Range =\n\t| PrimitiveRange\n\t| [(string | number)?, (string | number)?]\n\t| [string | number, (string | number)?];\nexport interface SplitResult {\n\trange: PrimitiveRange;\n\tto?: boolean;\n\tby?: boolean;\n}\n\nconst toTuple = (r: Range): [number | undefined, number | undefined] => {\n\tif (Array.isArray(r)) {\n\t\tconst [s, e] = r;\n\t\treturn [\n\t\t\ts === undefined ? undefined : Number(s),\n\t\t\te === undefined ? undefined : Number(e),\n\t\t];\n\t}\n\tif (r === \"-\" || r === \"\") return [undefined, undefined];\n\tconst [s, e] = r.split(\"-\");\n\treturn [s ? Number(s) : undefined, e ? Number(e) : undefined];\n};\n\nexport const fromTuple = (s?: number, e?: number): PrimitiveRange => {\n\tif (s === undefined && e === undefined) return \"-\";\n\tif (s === undefined) return `-${e}` as PrimitiveRange;\n\tif (e === undefined) return `${s}-` as PrimitiveRange;\n\treturn `${s}-${e}` as PrimitiveRange;\n};\n\nconst isValidRange = (range: Range) => {\n\tif (\n\t\t!Array.isArray(range) &&\n\t\trange !== \"\" &&\n\t\trange !== \"-\" &&\n\t\t!/^\\d*-\\d*$/.test(range)\n\t) {\n\t\treturn false;\n\t}\n\n\tif (\n\t\tArray.isArray(range) &&\n\t\trange.some((r) => typeof r === \"string\" && isNaN(Number(r)))\n\t) {\n\t\treturn false;\n\t}\n\n\treturn true;\n};\n\nexport const inRange = (\n\tyear: string | number | undefined,\n\trange: Range,\n\ttrueIfNoYear = false\n) => {\n\tif (!isValidRange(range)) {\n\t\treturn false;\n\t}\n\n\tif (!year) {\n\t\treturn trueIfNoYear;\n\t}\n\n\tconst [start = -Infinity, end = Infinity] = toTuple(range);\n\n\tif (!start && !end) {\n\t\treturn true;\n\t}\n\n\tif (start && !end) {\n\t\treturn Number(year) >= Number(start);\n\t}\n\n\tif (!start && end) {\n\t\treturn Number(year) <= Number(end);\n\t}\n\n\treturn Number(start) <= Number(year) && Number(year) <= Number(end);\n};\n\nexport const isIntersectedRange = (range1: Range, range2: Range) => {\n\tif (!isValidRange(range1) || !isValidRange(range2)) {\n\t\treturn false;\n\t}\n\n\tconst [start1 = -Infinity, end1 = Infinity] = toTuple(range1);\n\tconst [start2 = -Infinity, end2 = Infinity] = toTuple(range2);\n\n\tif (!start1 && !end1) {\n\t\treturn true;\n\t}\n\n\tif (!start2 && !end2) {\n\t\treturn true;\n\t}\n\n\tif (start1 && !end1) {\n\t\tif (start2 && !end2) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif (!start2 && end2) {\n\t\t\treturn Number(start1) <= Number(end2);\n\t\t}\n\n\t\treturn Number(start1) <= Number(end2);\n\t}\n\n\tif (!start1 && end1) {\n\t\tif (start2 && !end2) {\n\t\t\treturn Number(start2) <= Number(end1);\n\t\t}\n\n\t\tif (!start2 && end2) {\n\t\t\treturn true;\n\t\t}\n\n\t\treturn Number(start2) <= Number(end1);\n\t}\n\n\tif (start1 && end1) {\n\t\tif (start2 && !end2) {\n\t\t\treturn Number(start2) <= Number(end1);\n\t\t}\n\n\t\tif (!start2 && end2) {\n\t\t\treturn Number(start1) <= Number(end2);\n\t\t}\n\n\t\treturn Number(start1) <= Number(end2) && Number(start2) <= Number(end1);\n\t}\n\n\treturn false;\n};\n\nexport const splitRange = (to: Range, by: Range): SplitResult[] => {\n\tconst [toStart, toEnd] = toTuple(to);\n\tconst [byStart, byEnd] = toTuple(by);\n\n\t// Helper to build the PrimitiveRange string from optional numeric bounds\n\tconst make = (s?: number, e?: number): PrimitiveRange => fromTuple(s, e);\n\n\t// If there is no intersection at all, return the full \"to\" range\n\tif (!isIntersectedRange(to, by)) {\n\t\treturn [{ range: fromTuple(toStart, toEnd), to: true }];\n\t}\n\n\t// Calculate overlap boundaries between the two ranges\n\tconst overlapStart = Math.max(toStart ?? -Infinity, byStart ?? -Infinity);\n\tconst overlapEnd = Math.min(toEnd ?? Infinity, byEnd ?? Infinity);\n\n\tconst results: SplitResult[] = [];\n\n\t// Lower segment of \"to\" that lies completely before the overlap\n\tif ((toStart ?? -Infinity) < overlapStart) {\n\t\tconst loEnd = overlapStart - 1;\n\t\tresults.push({\n\t\t\trange: make(toStart, loEnd),\n\t\t\tto: true,\n\t\t});\n\t}\n\n\t// The overlapping segment between \"to\" and \"by\"\n\tresults.push({\n\t\trange: make(\n\t\t\tNumber.isFinite(overlapStart) ? overlapStart : undefined,\n\t\t\tNumber.isFinite(overlapEnd) ? overlapEnd : undefined\n\t\t),\n\t\tto: true,\n\t\tby: true,\n\t});\n\n\t// Upper segment of \"to\" that lies completely after the overlap\n\tif ((toEnd ?? Infinity) > overlapEnd) {\n\t\tconst hiStart = overlapEnd + 1;\n\t\tresults.push({\n\t\t\trange: make(hiStart, toEnd),\n\t\t\tto: true,\n\t\t});\n\t}\n\n\treturn results;\n};\n\n// Additional range splitting utilities for complex operations\n\nexport function parseRangeBounds(\n\trangeKey: PrimitiveRange\n): [number | undefined, number | undefined] {\n\tconst split = rangeKey.split(\"-\");\n\tconst start = split[0] ? Number(split[0]) : undefined;\n\tconst end = split[1] ? Number(split[1]) : undefined;\n\treturn [start, end];\n}\n\nexport function isRangeContained(\n\tcontainedRange: PrimitiveRange,\n\tcontainerRange: PrimitiveRange\n): boolean {\n\tconst [containedStart, containedEnd] = parseRangeBounds(containedRange);\n\tconst [containerStart, containerEnd] = parseRangeBounds(containerRange);\n\n\tconst containedStartNum = containedStart ?? -Infinity;\n\tconst containedEndNum = containedEnd ?? Infinity;\n\tconst containerStartNum = containerStart ?? -Infinity;\n\tconst containerEndNum = containerEnd ?? Infinity;\n\n\treturn (\n\t\tcontainedStartNum >= containerStartNum &&\n\t\tcontainedEndNum <= containerEndNum\n\t);\n}\n\nexport function extractSplitPoints(ranges: PrimitiveRange[]): number[] {\n\tconst points: Set<number> = new Set();\n\n\tranges.forEach((range) => {\n\t\tconst [start, end] = parseRangeBounds(range);\n\t\tif (start !== undefined) points.add(start);\n\t\tif (end !== undefined) points.add(end + 1);\n\t});\n\n\treturn Array.from(points).sort((a, b) => a - b);\n}\n\nexport function generateSplitRanges(splitPoints: number[]): PrimitiveRange[] {\n\tconst ranges: PrimitiveRange[] = [];\n\n\tfor (let i = 0; i < splitPoints.length - 1; i++) {\n\t\tconst start = splitPoints[i];\n\t\tconst end = splitPoints[i + 1] - 1;\n\t\tranges.push(fromTuple(start, end));\n\t}\n\n\treturn ranges;\n}\n\nexport function splitOverlappingRanges<T>(\n\trangesToValues: Array<[PrimitiveRange, T]>\n): Array<[PrimitiveRange, T[]]> {\n\tif (rangesToValues.length === 0) return [];\n\n\tconst ranges = rangesToValues.map(([range]) => range);\n\tconst splitPoints = extractSplitPoints(ranges);\n\n\t// Generate split ranges including open-ended ranges\n\tconst splitRanges: PrimitiveRange[] = [];\n\n\t// Handle ranges before the first split point\n\tif (splitPoints.length > 0) {\n\t\tconst firstPoint = splitPoints[0];\n\t\t// Check if any range covers before firstPoint\n\t\tconst hasRangeBeforeFirst = ranges.some((range) => {\n\t\t\tconst [start] = parseRangeBounds(range);\n\t\t\treturn start === undefined || start < firstPoint;\n\t\t});\n\t\tif (hasRangeBeforeFirst) {\n\t\t\tsplitRanges.push(fromTuple(undefined, firstPoint - 1));\n\t\t}\n\t}\n\n\t// Generate ranges between split points\n\tfor (let i = 0; i < splitPoints.length - 1; i++) {\n\t\tconst start = splitPoints[i];\n\t\tconst end = splitPoints[i + 1] - 1;\n\t\tsplitRanges.push(fromTuple(start, end));\n\t}\n\n\t// Handle ranges after the last split point\n\tif (splitPoints.length > 0) {\n\t\tconst lastPoint = splitPoints[splitPoints.length - 1];\n\t\t// Check if any range covers after lastPoint\n\t\tconst hasRangeAfterLast = ranges.some((range) => {\n\t\t\tconst [, end] = parseRangeBounds(range);\n\t\t\treturn end === undefined || end >= lastPoint;\n\t\t});\n\t\tif (hasRangeAfterLast) {\n\t\t\tsplitRanges.push(fromTuple(lastPoint, undefined));\n\t\t}\n\t}\n\n\treturn splitRanges\n\t\t.map((splitRange) => {\n\t\t\tconst matchingValues: T[] = [];\n\n\t\t\trangesToValues.forEach(([originalRange, value]) => {\n\t\t\t\tif (isRangeContained(splitRange, originalRange)) {\n\t\t\t\t\tmatchingValues.push(value);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\treturn [splitRange, matchingValues] as [PrimitiveRange, T[]];\n\t\t})\n\t\t.filter(([, values]) => values.length > 0); // Only return ranges that have matching values\n}\n\nexport function findMatchingRangeForSplitRange<T>(\n\tsplitRange: PrimitiveRange,\n\trangesToValues: Array<[PrimitiveRange, T]>\n): T[] {\n\tconst matchingValues: T[] = [];\n\n\trangesToValues.forEach(([originalRange, value]) => {\n\t\tif (isRangeContained(splitRange, originalRange)) {\n\t\t\tmatchingValues.push(value);\n\t\t}\n\t});\n\n\treturn matchingValues;\n}\n\nexport function extractSeparationYears(\n\tchildName: string,\n\tranges: Record<string, unknown[]>,\n\tparentName: string,\n\tensureArray: (x: unknown) => unknown[]\n): number[] {\n\tconst separationYears: number[] = [];\n\n\tObject.entries(ranges).forEach(([rangeKey, entries]) => {\n\t\tif (rangeKey === \"names\" || !entries) {\n\t\t\treturn;\n\t\t}\n\t\tconst pts = entries as Array<{ town: unknown }>;\n\n\t\tpts.forEach((pt) => {\n\t\t\tconst towns = ensureArray(pt.town);\n\t\t\tconst keyDiffersFromTown = !towns.includes(childName);\n\t\t\tconst pointsToParent = towns.includes(parentName);\n\t\t\t// Only consider it a parent-child relationship if town array has EXACTLY ONE entry\n\t\t\tconst isSingleParent = towns.length === 1;\n\n\t\t\t// Check if this is a range where the child points to the parent (before separation)\n\t\t\tif (keyDiffersFromTown && pointsToParent && isSingleParent) {\n\t\t\t\t// The end of this range is when the child separates\n\t\t\t\tconst split = (rangeKey as PrimitiveRange).split(\"-\");\n\t\t\t\tconst end = split[1] ? Number(split[1]) : undefined;\n\t\t\t\tif (typeof end === \"number\") {\n\t\t\t\t\tconst separationYear = end + 1;\n\t\t\t\t\tif (!separationYears.includes(separationYear)) {\n\t\t\t\t\t\tseparationYears.push(separationYear);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Check if this is a range where the child becomes independent (after separation)\n\t\t\telse if (!keyDiffersFromTown && !pointsToParent) {\n\t\t\t\tconst split = (rangeKey as PrimitiveRange).split(\"-\");\n\t\t\t\tconst start = split[0] ? Number(split[0]) : undefined;\n\t\t\t\tif (\n\t\t\t\t\ttypeof start === \"number\" &&\n\t\t\t\t\t!separationYears.includes(start)\n\t\t\t\t) {\n\t\t\t\t\tseparationYears.push(start);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\n\treturn separationYears.sort((a, b) => a - b);\n}\n","import type { Locale } from \"date-fns\";\nimport { format, isValid, parse } from \"date-fns\";\n\nimport { getDateLocale } from \"../factories\";\nimport type { IdType, MultiTag } from \"../types/types\";\nimport { ACCEPTED_DATE_FORMATS } from \"../utils/date-formatter\";\nimport { inRange } from \"../utils/range\";\nimport type { Range } from \"../utils/range\";\n\nimport { Common, createCommon, createProxy } from \"./common\";\nimport type { ProxyOriginal } from \"./common\";\nimport type { GedComType } from \"./gedcom\";\nimport type { List } from \"./list\";\n\nconst LONG_NOTES = {\n\t\"Abt.\": \"About\",\n\t\"Bef.\": \"Before\",\n\t\"Aft.\": \"After\",\n};\n\nconst NOTE_MARKER = \"####\";\n/**\n * Format a date based on available components (DAY, MONTH, YEAR, NOTE)\n */\nconst formatDateWithComponents = (\n\tdate: Date,\n\thasDay: boolean,\n\thasMonth: boolean,\n\thasYear: boolean,\n\tnoteValue: string | undefined,\n\tbaseFormat = \"dd MMM yyyy\",\n\tlocale?: Locale | null\n): string => {\n\tconst hasNote = baseFormat.includes(\"NOTE\");\n\tlet validDateFormat = baseFormat.replace(\"NOTE\", NOTE_MARKER);\n\n\tif (!hasDay) {\n\t\tvalidDateFormat = validDateFormat.replace(/d+/g, \"\");\n\t}\n\n\tif (!hasMonth) {\n\t\tvalidDateFormat = validDateFormat.replace(/[.\\-\\s/]*M+/g, \"\");\n\t}\n\n\tif (!hasYear) {\n\t\tvalidDateFormat = validDateFormat.replace(/y+[.\\-\\s/]*/g, \"\");\n\t}\n\n\tvalidDateFormat = validDateFormat\n\t\t.replace(/([.\\-\\s/])\\1+/g, \"$1\")\n\t\t.replace(/^[.\\-\\s/]+|[.\\-\\s/]+$/g, \"\");\n\n\tconst formattedDate = format(date, validDateFormat, {\n\t\t...(locale !== null\n\t\t\t? { locale: locale ? locale : getDateLocale() }\n\t\t\t: {}),\n\t});\n\n\t// Add NOTE prefix if it exists\n\treturn noteValue && hasNote\n\t\t? formattedDate.replace(NOTE_MARKER, noteValue).trim()\n\t\t: formattedDate.replace(NOTE_MARKER, \"\").trim();\n};\n\nexport class CommonDate extends Common<string> {\n\tprivate _date?: Date;\n\n\tDAY?: Common;\n\tMONTH?: Common;\n\tYEAR?: Common;\n\tNOTE?: Common;\n\n\tconstructor(\n\t\tgedcom?: GedComType,\n\t\tid?: IdType,\n\t\tmain?: Common,\n\t\tparent?: Common\n\t) {\n\t\tsuper(gedcom, id, main, parent);\n\n\t\tdelete this.id;\n\t}\n\n\tset value(value: string | undefined) {\n\t\tif (value) {\n\t\t\tconst noteRegExp = /^(?<note>[a-zA-Z]+\\.)/;\n\t\t\tconst noteMatch = value.match(noteRegExp)?.groups;\n\t\t\tlet validValue = value;\n\t\t\tif (noteMatch?.note) {\n\t\t\t\tthis.NOTE =\n\t\t\t\t\tthis.NOTE ||\n\t\t\t\t\tcreateCommon(this._gedcom, undefined, this.main);\n\t\t\t\tthis.NOTE.value = noteMatch?.note;\n\n\t\t\t\tvalidValue = value.replace(noteRegExp, \"\");\n\t\t\t}\n\n\t\t\tconst acceptedDate = this.isValidDateFormat(validValue);\n\t\t\tif (acceptedDate) {\n\t\t\t\tthis.DAY =\n\t\t\t\t\tthis.DAY ||\n\t\t\t\t\tcreateCommon(this._gedcom, undefined, this.main);\n\t\t\t\tthis.DAY.value = format(acceptedDate, \"dd\");\n\n\t\t\t\tthis.MONTH =\n\t\t\t\t\tthis.MONTH ||\n\t\t\t\t\tcreateCommon(this._gedcom, undefined, this.main);\n\t\t\t\tthis.MONTH.value = format(acceptedDate, \"MMM\");\n\n\t\t\t\tthis.YEAR =\n\t\t\t\t\tthis.YEAR ||\n\t\t\t\t\tcreateCommon(this._gedcom, undefined, this.main);\n\t\t\t\tthis.YEAR.value = format(acceptedDate, \"yyyy\");\n\n\t\t\t\tthis._date = acceptedDate;\n\t\t\t\tthis._value = value;\n\t\t\t} else {\n\t\t\t\tlet fixedValue = validValue;\n\t\t\t\tif (/\\d{4} [A-Za-z]+\\s*$/.test(validValue)) {\n\t\t\t\t\tfixedValue = `${validValue} 1`;\n\t\t\t\t} else if (/^\\s*[A-Za-z]+ \\d{4}/.test(validValue)) {\n\t\t\t\t\tfixedValue = `1 ${validValue}`;\n\t\t\t\t}\n\n\t\t\t\tthis._date = new Date(fixedValue);\n\t\t\t\tthis._value = value;\n\n\t\t\t\tif (this._date && isValid(this._date)) {\n\t\t\t\t\tconst yearMonthDay =\n\t\t\t\t\t\t/[\\dA-Za-z]+ [\\dA-Za-z]+ [\\dA-Za-z]+/.test(validValue);\n\t\t\t\t\tconst yearMonth = /[\\dA-Za-z]+ [\\dA-Za-z]+/.test(\n\t\t\t\t\t\tvalidValue\n\t\t\t\t\t);\n\t\t\t\t\tconst year = /[\\dA-Za-z]+/.test(validValue);\n\t\t\t\t\tif (yearMonthDay) {\n\t\t\t\t\t\tthis.DAY =\n\t\t\t\t\t\t\tthis.DAY ||\n\t\t\t\t\t\t\tcreateCommon(this._gedcom, undefined, this.main);\n\t\t\t\t\t\tthis.DAY.value = format(this._date, \"dd\");\n\t\t\t\t\t}\n\n\t\t\t\t\tif (yearMonth || yearMonthDay) {\n\t\t\t\t\t\tthis.MONTH =\n\t\t\t\t\t\t\tthis.MONTH ||\n\t\t\t\t\t\t\tcreateCommon(this._gedcom, undefined, this.main);\n\t\t\t\t\t\tthis.MONTH.value = format(this._date, \"MMM\");\n\t\t\t\t\t}\n\n\t\t\t\t\tif (year || yearMonth || yearMonthDay) {\n\t\t\t\t\t\tthis.YEAR =\n\t\t\t\t\t\t\tthis.YEAR ||\n\t\t\t\t\t\t\tcreateCommon(this._gedcom, undefined, this.main);\n\t\t\t\t\t\tthis.YEAR.value = format(this._date, \"yyyy\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tget value() {\n\t\tconst hasDay = !!this.DAY?.value;\n\t\tconst hasMonth = !!this.MONTH?.value;\n\t\tconst hasYear = !!this.YEAR?.value;\n\t\tif (\n\t\t\t!this._date ||\n\t\t\t!isValid(this._date) ||\n\t\t\t(!hasDay && !hasMonth && !hasYear)\n\t\t) {\n\t\t\treturn this._value;\n\t\t}\n\n\t\treturn formatDateWithComponents(\n\t\t\tthis._date,\n\t\t\thasDay,\n\t\t\thasMonth,\n\t\t\thasYear,\n\t\t\tthis.NOTE?.value\n\t\t);\n\t}\n\n\tget rawValue() {\n\t\treturn this._date;\n\t}\n\n\tassign<T extends Common | List = Common | List>(\n\t\tname: MultiTag,\n\t\tvalue: T,\n\t\tunique = false\n\t) {\n\t\tif (![\"DAY\", \"MONTH\", \"YEAR\"].includes(name)) {\n\t\t\treturn super.assign(name, value, unique);\n\t\t} else {\n\t\t\tthis.set(name, value);\n\t\t}\n\t\treturn this.get(name) as T | undefined;\n\t}\n\n\tprivate isValidDateFormat(value: string) {\n\t\tlet validDate: Date | undefined;\n\t\tACCEPTED_DATE_FORMATS.find((acceptedFormat) => {\n\t\t\tconst date = parse(value, acceptedFormat, new Date());\n\n\t\t\tif (isValid(date)) {\n\t\t\t\tvalidDate = date;\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\n\t\treturn validDate;\n\t}\n\n\ttoNote(short = true): string | undefined {\n\t\tconst note = this.NOTE?.value?.trim() as keyof typeof LONG_NOTES;\n\n\t\tif (!short) {\n\t\t\treturn LONG_NOTES[note];\n\t\t}\n\n\t\treturn note;\n\t}\n\n\ttoValue(\n\t\tdateFormat = \"dd MMM yyyy\",\n\t\tlocale?: Locale | null\n\t): string | undefined {\n\t\tconst hasDay = !!this.DAY?.value;\n\t\tconst hasMonth = !!this.MONTH?.value;\n\t\tconst hasYear = !!this.YEAR?.value;\n\t\tif (\n\t\t\t!this._date ||\n\t\t\t!isValid(this._date) ||\n\t\t\t(!hasDay && !hasMonth && !hasYear)\n\t\t) {\n\t\t\treturn this._value;\n\t\t}\n\n\t\treturn formatDateWithComponents(\n\t\t\tthis._date,\n\t\t\thasDay,\n\t\t\thasMonth,\n\t\t\thasYear,\n\t\t\tthis.NOTE?.value,\n\t\t\tdateFormat,\n\t\t\tlocale\n\t\t);\n\t}\n\n\texportValue() {\n\t\treturn this.toValue(\"NOTE dd MMM yyyy\", null);\n\t}\n\n\tinRange(range: Range, trueIfNoYear = false) {\n\t\treturn inRange(this.YEAR?.value, range, trueIfNoYear);\n\t}\n}\n\nexport const createCommonDate = (\n\tgedcom?: GedComType,\n\tid?: IdType,\n\tmain?: Common,\n\tparent?: Common\n): ProxyOriginal<CommonDate> => {\n\treturn createProxy(\n\t\tnew CommonDate(gedcom, id, main, parent)\n\t) as unknown as ProxyOriginal<CommonDate>;\n};\n\nexport const isCommonDate = (value?: unknown): value is CommonDate => {\n\treturn (\n\t\t!!value &&\n\t\tvalue !== null &&\n\t\ttypeof value === \"object\" &&\n\t\t\"_date\" in value\n\t);\n};\n","{\n\t\"name\": \"@treeviz/gedcom-parser\",\n\t\"version\": \"1.0.15\",\n\t\"description\": \"Lightweight, pluggable GEDCOM parser for JavaScript/TypeScript with optional caching and place matching. Zero browser dependencies.\",\n\t\"type\": \"module\",\n\t\"main\": \"dist/index.js\",\n\t\"types\": \"dist/index.d.ts\",\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": \"./dist/index.d.ts\",\n\t\t\t\"import\": \"./dist/index.js\"\n\t\t},\n\t\t\"./utils\": {\n\t\t\t\"types\": \"./dist/utils/index.d.ts\",\n\t\t\t\"import\": \"./dist/utils/index.js\"\n\t\t},\n\t\t\"./utils/cache\": {\n\t\t\t\"types\": \"./dist/utils/cache.d.ts\",\n\t\t\t\"import\": \"./dist/utils/cache.js\"\n\t\t},\n\t\t\"./utils/get-raw-size\": {\n\t\t\t\"types\": \"./dist/utils/get-raw-size.d.ts\",\n\t\t\t\"import\": \"./dist/utils/get-raw-size.js\"\n\t\t},\n\t\t\"./utils/parser\": {\n\t\t\t\"types\": \"./dist/utils/parser.d.ts\",\n\t\t\t\"import\": \"./dist/utils/parser.js\"\n\t\t},\n\t\t\"./classes\": {\n\t\t\t\"types\": \"./dist/classes/index.d.ts\",\n\t\t\t\"import\": \"./dist/classes/index.js\"\n\t\t},\n\t\t\"./classes/*\": {\n\t\t\t\"types\": \"./dist/classes/*.d.ts\",\n\t\t\t\"import\": \"./dist/classes/*.js\"\n\t\t},\n\t\t\"./factories\": {\n\t\t\t\"types\": \"./dist/factories/index.d.ts\",\n\t\t\t\"import\": \"./dist/factories/index.js\"\n\t\t},\n\t\t\"./factories/*\": {\n\t\t\t\"types\": \"./dist/factories/*.d.ts\",\n\t\t\t\"import\": \"./dist/factories/*.js\"\n\t\t},\n\t\t\"./constants\": {\n\t\t\t\"types\": \"./dist/constants/index.d.ts\",\n\t\t\t\"import\": \"./dist/constants/index.js\"\n\t\t},\n\t\t\"./constants/*\": {\n\t\t\t\"types\": \"./dist/constants/*.d.ts\",\n\t\t\t\"import\": \"./dist/constants/*.js\"\n\t\t},\n\t\t\"./structures\": {\n\t\t\t\"types\": \"./dist/structures/index.d.ts\",\n\t\t\t\"import\": \"./dist/structures/index.js\"\n\t\t},\n\t\t\"./structures/*\": {\n\t\t\t\"types\": \"./dist/structures/*.d.ts\",\n\t\t\t\"import\": \"./dist/structures/*.js\"\n\t\t},\n\t\t\"./kinship-translator\": {\n\t\t\t\"types\": \"./dist/kinship-translator/index.d.ts\",\n\t\t\t\"import\": \"./dist/kinship-translator/index.js\"\n\t\t},\n\t\t\"./kinship-translator/*\": {\n\t\t\t\"types\": \"./dist/kinship-translator/*.d.ts\",\n\t\t\t\"import\": \"./dist/kinship-translator/*.js\"\n\t\t},\n\t\t\"./interfaces\": {\n\t\t\t\"types\": \"./dist/interfaces/index.d.ts\",\n\t\t\t\"import\": \"./dist/interfaces/index.js\"\n\t\t},\n\t\t\"./interfaces/*\": {\n\t\t\t\"types\": \"./dist/interfaces/*.d.ts\",\n\t\t\t\"import\": \"./dist/interfaces/*.js\"\n\t\t},\n\t\t\"./types\": {\n\t\t\t\"types\": \"./dist/types/index.d.ts\",\n\t\t\t\"import\": \"./dist/types/index.js\"\n\t\t},\n\t\t\"./types/*\": {\n\t\t\t\"types\": \"./dist/types/*.d.ts\",\n\t\t\t\"import\": \"./dist/types/*.js\"\n\t\t},\n\t\t\"./utils/*\": {\n\t\t\t\"types\": \"./dist/utils/*.d.ts\",\n\t\t\t\"import\": \"./dist/utils/*.js\"\n\t\t},\n\t\t\"./__tests__/test-utils\": {\n\t\t\t\"types\": \"./src/__tests__/test-utils/index.ts\",\n\t\t\t\"import\": \"./src/__tests__/test-utils/index.ts\"\n\t\t}\n\t},\n\t\"bin\": {\n\t\t\"gedcom-parser\": \"./bin/gedcom-parser.js\"\n\t},\n\t\"files\": [\n\t\t\"dist\",\n\t\t\"bin\",\n\t\t\"README.md\",\n\t\t\"LICENSE\"\n\t],\n\t\"scripts\": {\n\t\t\"build\": \"NODE_OPTIONS='--max-old-space-size=4096' tsup\",\n\t\t\"dev\": \"tsup --watch\",\n\t\t\"test\": \"vitest run\",\n\t\t\"test:watch\": \"vitest\",\n\t\t\"prepublishOnly\": \"npm run build\"\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/idavidka/gedcom-parser.git\"\n\t},\n\t\"bugs\": {\n\t\t\"url\": \"https://github.com/idavidka/gedcom-parser/issues\"\n\t},\n\t\"homepage\": \"https://github.com/idavidka/gedcom-parser#readme\",\n\t\"keywords\": [\n\t\t\"gedcom\",\n\t\t\"genealogy\",\n\t\t\"parser\",\n\t\t\"family-tree\",\n\t\t\"typescript\",\n\t\t\"pluggable\",\n\t\t\"gedcom-parser\",\n\t\t\"gedcom55\",\n\t\t\"gedcom-5.5.1\",\n\t\t\"family-history\",\n\t\t\"ancestry\",\n\t\t\"lineage\",\n\t\t\"pedigree\",\n\t\t\"treeviz\",\n\t\t\"cache\",\n\t\t\"place-matching\",\n\t\t\"ssr\",\n\t\t\"browser\",\n\t\t\"nodejs\",\n\t\t\"cli\",\n\t\t\"command-line\"\n\t],\n\t\"author\": {\n\t\t\"name\": \"idavidka & @treeviz contributors\",\n\t\t\"url\": \"https://github.com/idavidka\"\n\t},\n\t\"license\": \"MIT\",\n\t\"dependencies\": {\n\t\t\"chalk\": \"^5.6.2\",\n\t\t\"commander\": \"^14.0.2\",\n\t\t\"date-fns\": \"^2.30.0\",\n\t\t\"lodash-es\": \"^4.17.22\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@types/lodash\": \"^4.17.13\",\n\t\t\"@types/lodash-es\": \"^4.17.12\",\n\t\t\"@types/node\": \"^20.17.23\",\n\t\t\"tsup\": \"^8.5.1\",\n\t\t\"typescript\": \"^5.6.3\",\n\t\t\"vitest\": \"^3.0.7\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=20.0.0\"\n\t}\n}\n","import PKG from \"../../package.json\" with { type: \"json\" };\n\nexport const isDevelopment = () => {\n\treturn !process.env.NODE_ENV || process.env.NODE_ENV === \"development\";\n};\n\nexport const getVersion = () => PKG.version;\n\nexport const getName = () => PKG.name;\n","import type { ConvertOptions } from \"../interfaces/common\";\nimport type IGedcom from \"../interfaces/gedcom\";\nimport type IEventDetailStructure from \"../structures/event-detail-structure\";\nimport type IGedComStructure from \"../structures/gedcom\";\nimport type {\n\tListTag,\n\tIdType,\n\tIndiKey,\n\tFamKey,\n\tObjeKey,\n\tSourKey,\n\tRepoKey,\n\tSubmKey,\n\tMultiTag,\n} from \"../types/types\";\nimport { getVersion } from \"../utils/get-product-details\";\n\nimport { Common, createCommon } from \"./common\";\nimport type { FamType } from \"./fam\";\nimport type { Families } from \"./fams\";\nimport { CustomTags } from \"./indi\";\nimport type { IndiType } from \"./indi\";\nimport type { Individuals } from \"./indis\";\nimport { List } from \"./list\";\nimport type { ObjeType } from \"./obje\";\nimport type { Objects } from \"./objes\";\nimport type { RepoType } from \"./repo\";\nimport type { Repositories } from \"./repos\";\nimport type { SourType } from \"./sour\";\nimport type { Sources } from \"./sours\";\nimport type { SubmType } from \"./subm\";\nimport type { Submitters } from \"./subms\";\n\nexport class GedCom extends Common implements IGedcom {\n\ttagMembers: Record<string, { tag: Common; indis: Individuals }> = {};\n\treflist: Record<string, Common> = {};\n\trefcount = 0;\n\tconstructor() {\n\t\tsuper();\n\n\t\tdelete this._gedcom;\n\t\tdelete this.id;\n\n\t\tthis.removeValue();\n\t}\n\n\tprivate getMain<L extends List = List, T extends Common = Common>(\n\t\ttype: MultiTag | L | undefined,\n\t\tindex: number | string\n\t): T | undefined {\n\t\tconst list =\n\t\t\t!type || type instanceof List ? type : this.getList<L>(type);\n\n\t\tif (!list) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tif (typeof index === \"string\") {\n\t\t\treturn (list as List).item(index as IdType) as T | undefined;\n\t\t}\n\n\t\t// const keyProbe: IdType[] = [\n\t\t// \t`@I${index}@`,\n\t\t// \t`@P${index}@`,\n\t\t// \t`@XI${index}@`,\n\t\t// \t`@XXI${index}@`,\n\t\t// ];\n\n\t\t// let itemProbe: T | undefined;\n\t\t// keyProbe.find((key) => {\n\t\t// \tconst i = list.item(key);\n\t\t// \tif (i) {\n\t\t// \t\titemProbe = i as T;\n\t\t// \t\treturn true;\n\t\t// \t}\n\t\t// \treturn false;\n\t\t// });\n\n\t\t// if (itemProbe) {\n\t\t// \treturn itemProbe as T;\n\t\t// }\n\n\t\tconst keys = (list as List).keys() as IdType[];\n\t\treturn (list as List).item(keys[index]) as T | undefined;\n\t}\n\n\tgetList<T extends List = List>(type: MultiTag): T | undefined {\n\t\treturn this.get(type);\n\t}\n\n\tindis() {\n\t\treturn this.getList<Individuals>(\"@@INDI\");\n\t}\n\n\tcloneIndis(\n\t\ttarget?: IndiKey | IndiType,\n\t\tsource?: IndiKey | IndiType,\n\t\tavoidKeys: MultiTag[] = [],\n\t\tremoveFromOriginalList = true\n\t) {\n\t\tconst hasFAMS = avoidKeys.includes(\"FAMS\");\n\t\tconst targetIndi =\n\t\t\ttypeof target === \"string\" ? this.indi(target) : target;\n\t\tconst sourceIndi =\n\t\t\ttypeof source === \"string\" ? this.indi(source) : source;\n\n\t\tif (!targetIndi || !sourceIndi) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst spousesFamily = hasFAMS ? sourceIndi.FAMS?.toList() : undefined;\n\t\tconst childrenFamily = sourceIndi.FAMC?.toList();\n\t\tconst cloned = targetIndi.clone(false, avoidKeys);\n\t\tconst newCloned = sourceIndi.merge(cloned);\n\n\t\tnewCloned.cloneOf = targetIndi.id;\n\t\ttargetIndi.clonedBy = newCloned.id;\n\n\t\tif (newCloned.id) {\n\t\t\tthis.getList(\"@@INDI\")?.item(newCloned.id, newCloned);\n\n\t\t\tif (childrenFamily?.length) {\n\t\t\t\tchildrenFamily.forEach((fam) => {\n\t\t\t\t\tif (!fam.ref) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst newChild = createCommon(this, undefined, fam.ref);\n\t\t\t\t\tnewChild.value = newCloned.id;\n\t\t\t\t\tfam.ref.assign(\"CHIL\", newChild, true);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (spousesFamily?.length) {\n\t\t\t\tspousesFamily.forEach((fam) => {\n\t\t\t\t\tif (!fam.ref) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst newSpouse = createCommon(this, undefined, fam.ref);\n\t\t\t\t\tnewSpouse.value = newCloned.id;\n\n\t\t\t\t\tif (newCloned.isMale()) {\n\t\t\t\t\t\tfam.ref.assign(\"HUSB\", newSpouse, true);\n\t\t\t\t\t} else if (newCloned.isFemale()) {\n\t\t\t\t\t\tfam.ref.assign(\"WIFE\", newSpouse, true);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tremoveFromOriginalList &&\n\t\t\t\tnewCloned.type &&\n\t\t\t\tnewCloned.type !== targetIndi.type\n\t\t\t) {\n\t\t\t\tthis.getList(`@@${newCloned.type}` as ListTag)?.removeItem(\n\t\t\t\t\tnewCloned.id as IndiKey\n\t\t\t\t);\n\t\t\t}\n\t\t\tnewCloned.type = \"INDI\";\n\t\t}\n\t}\n\n\tmergeIndis(\n\t\ttarget?: IndiKey | IndiType,\n\t\tsource?: IndiKey | IndiType,\n\t\tremoveFromOriginalList = true\n\t) {\n\t\tconst targetIndi =\n\t\t\ttypeof target === \"string\" ? this.indi(target) : target;\n\t\tconst sourceIndi =\n\t\t\ttypeof source === \"string\" ? this.indi(source) : source;\n\n\t\tif (!targetIndi || !sourceIndi) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst sourceIndiId = sourceIndi.id;\n\t\tconst spousesFamily = sourceIndi.FAMS?.toList();\n\t\tconst childrenFamily = sourceIndi.FAMC?.toList();\n\t\tconst newLinked = targetIndi.merge(sourceIndi);\n\t\tconst mergedId = newLinked.id;\n\n\t\tif (sourceIndiId && (spousesFamily?.length || childrenFamily?.length)) {\n\t\t\tif (childrenFamily?.length && mergedId) {\n\t\t\t\tchildrenFamily.forEach((fam) => {\n\t\t\t\t\tif (!fam.ref) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst newChild = createCommon(this, undefined, fam.ref);\n\t\t\t\t\tnewChild.value = mergedId;\n\t\t\t\t\tfam.ref.assign(\"CHIL\", newChild, true);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (spousesFamily?.length && mergedId) {\n\t\t\t\tspousesFamily.forEach((fam) => {\n\t\t\t\t\tif (!fam.ref) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst newSpouse = createCommon(this, undefined, fam.ref);\n\t\t\t\t\tnewSpouse.value = mergedId;\n\n\t\t\t\t\tif (newLinked?.isMale()) {\n\t\t\t\t\t\tfam.ref.assign(\"HUSB\", newSpouse, true);\n\t\t\t\t\t} else if (newLinked?.isFemale()) {\n\t\t\t\t\t\tfam.ref.assign(\"WIFE\", newSpouse, true);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (removeFromOriginalList && sourceIndi?.type && sourceIndi.id) {\n\t\t\tthis.getList(`@@${sourceIndi.type}` as ListTag)?.removeItem(\n\t\t\t\tsourceIndi.id as IndiKey\n\t\t\t);\n\t\t}\n\t}\n\n\tfams() {\n\t\treturn this.getList<Families>(\"@@FAM\");\n\t}\n\n\tobjes() {\n\t\treturn this.getList<Objects>(\"@@OBJE\");\n\t}\n\n\tsours() {\n\t\treturn this.getList<Sources>(\"@@SOUR\");\n\t}\n\n\trepos() {\n\t\treturn this.getList<Repositories>(\"@@REPO\");\n\t}\n\n\tsubms() {\n\t\treturn this.getList<Submitters>(\"@@SUBM\");\n\t}\n\n\ttags() {\n\t\treturn this.getList(\"@@_MTTAG\");\n\t}\n\n\tcustomTags() {\n\t\treturn this.getList(\"@@_MTTAG\")?.filter((tag) => {\n\t\t\treturn tag?.get(\"_MTCAT.NAME\")?.toValue() === \"Custom\";\n\t\t});\n\t}\n\n\tindi(index: number | IndiKey) {\n\t\treturn this.getMain<Individuals, IndiType>(this.indis(), index);\n\t}\n\n\tfam(index: number | FamKey) {\n\t\treturn this.getMain<Families, FamType>(this.fams(), index);\n\t}\n\n\tobje(index: number | ObjeKey) {\n\t\treturn this.getMain<List, ObjeType>(this.objes(), index);\n\t}\n\n\tsour(index: number | SourKey) {\n\t\treturn this.getMain<List, SourType>(this.sours(), index);\n\t}\n\n\trepo(index: number | RepoKey) {\n\t\treturn this.getMain<List, RepoType>(this.repos(), index);\n\t}\n\n\tsubm(index: number | SubmKey) {\n\t\treturn this.getMain<List, SubmType>(this.subms(), index);\n\t}\n\n\ttag(index: number | SubmKey) {\n\t\treturn this.getMain(this.tags(), index);\n\t}\n\n\tfromList(id?: string) {\n\t\treturn id ? this.reflist?.[id] : undefined;\n\t}\n\n\ttagByName(name?: string) {\n\t\treturn this.tags()?.find((tag) => {\n\t\t\tconst tagName = tag?.get(\"NAME\")?.toValue() as string | undefined;\n\n\t\t\treturn tagName === name;\n\t\t});\n\t}\n\n\tcustomTag(index: number | SubmKey) {\n\t\treturn this.getMain(this.customTags(), index);\n\t}\n\n\tprivate getIndiRelatedLists(\n\t\tindis: IndiKey[]\n\t): Partial<Record<ListTag, List>> {\n\t\tconst refs: Record<IdType, Common> = {};\n\t\tconst individuals = this.indis()?.filter((indi, indiKey) => {\n\t\t\tif (indis.includes(indiKey as IndiKey)) {\n\t\t\t\tindi.getRefs()\n\t\t\t\t\t?.values()\n\t\t\t\t\t?.forEach((ref) => {\n\t\t\t\t\t\tconst refKey = ref?.value as IdType | undefined;\n\t\t\t\t\t\tif (ref && refKey && !refs[refKey]) {\n\t\t\t\t\t\t\trefs[refKey] = ref;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t});\n\t\tconst usedLists = Object.entries(this).filter(([prop, list]) => {\n\t\t\treturn (\n\t\t\t\tprop !== \"@@INDI\" &&\n\t\t\t\tprop.startsWith(\"@@\") &&\n\t\t\t\tlist instanceof List\n\t\t\t);\n\t\t}) as [ListTag, List][];\n\n\t\tconst lists: Partial<Record<ListTag, List>> = {};\n\n\t\tif (individuals) {\n\t\t\tlists[\"@@INDI\"] = individuals;\n\t\t}\n\n\t\tusedLists.forEach(([key, list]) => {\n\t\t\tconst validKey = key as ListTag;\n\n\t\t\tif (list) {\n\t\t\t\tlists[validKey] = list.filter((item) => {\n\t\t\t\t\treturn Boolean(item.id && refs[item.id]);\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\treturn lists;\n\t}\n\n\tprivate getDownloadHeader() {\n\t\tconst newHead = createCommon() as Required<IGedComStructure>[\"HEAD\"];\n\n\t\tObject.assign(newHead!, this.get(\"HEAD\") ?? {});\n\n\t\tconst newSour = createCommon() as Required<\n\t\t\tRequired<IGedComStructure>[\"HEAD\"]\n\t\t>[\"SOUR\"];\n\t\tnewSour.set(\"CORP\", createCommon());\n\t\tnewSour.set(\"CORP.WWW\", createCommon());\n\t\tnewSour.set(\"NAME\", createCommon());\n\t\tnewSour.set(\"VERS\", createCommon());\n\n\t\tnewSour.CORP!.value = \"TreeViz - The Family Tree Visualiser\";\n\t\tnewSour.CORP!.WWW!.value = \"treeviz.com\";\n\t\tnewSour.NAME!.value = \"TreeViz - The Family Tree Visualiser\";\n\t\tnewSour.VERS!.value = getVersion();\n\n\t\tnewHead!.set(\"SOUR\", newSour);\n\n\t\treturn newHead;\n\t}\n\n\ttoFiltered(indis: IndiKey[]) {\n\t\tif (!indis.length) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst newGedcom = createGedCom();\n\n\t\tconst newContent = this.getIndiRelatedLists(indis);\n\n\t\tObject.assign(newGedcom, this, newContent, {\n\t\t\tHEAD: this.getDownloadHeader(),\n\t\t});\n\n\t\treturn newGedcom;\n\t}\n\n\ttoJson(\n\t\ttag?: MultiTag | undefined,\n\t\toptions?:\n\t\t\t| (ConvertOptions & {\n\t\t\t\t\tindis?: IndiKey[];\n\t\t\t })\n\t\t\t| undefined\n\t): string {\n\t\tif (!options?.indis?.length) {\n\t\t\treturn super.toJson(tag, options);\n\t\t}\n\n\t\tconst newGedcom = createGedCom();\n\n\t\tconst newContent = this.getIndiRelatedLists(options.indis);\n\n\t\tObject.assign(newGedcom, this, newContent, {\n\t\t\tHEAD: this.getDownloadHeader(),\n\t\t});\n\n\t\tdelete options.indis;\n\t\treturn newGedcom.toJson(tag, options);\n\t}\n\n\ttoGedcom(\n\t\ttag?: MultiTag | undefined,\n\t\tlevel?: number,\n\t\toptions?:\n\t\t\t| (ConvertOptions & {\n\t\t\t\t\tindis?: IndiKey[];\n\t\t\t })\n\t\t\t| undefined\n\t): string {\n\t\tif (options?.super) {\n\t\t\treturn super.toGedcom(tag, level, options);\n\t\t}\n\n\t\tconst newGedcom = createGedCom();\n\n\t\tif (!options?.original) {\n\t\t\tObject.assign(newGedcom, {\n\t\t\t\tHEAD: this.getDownloadHeader(),\n\t\t\t});\n\t\t}\n\n\t\tObject.assign(newGedcom, this);\n\n\t\tif (options?.indis?.length) {\n\t\t\tconst newContent = this.getIndiRelatedLists(options.indis);\n\n\t\t\tObject.assign(newGedcom, newContent);\n\t\t}\n\n\t\treturn newGedcom.toGedcom(tag, level, { ...options, super: true });\n\t}\n\n\thasTag(tag?: string | Common) {\n\t\tconst tagName =\n\t\t\ttypeof tag === \"string\"\n\t\t\t\t? tag\n\t\t\t\t: (tag?.get(\"NAME\")?.toValue() as string | undefined);\n\t\tif (!tagName) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn !!this.tagMembers?.[tagName]?.indis?.length;\n\t}\n\n\thasUnknownAncestor() {\n\t\treturn !!this.tagMembers?.[CustomTags.UnknownAncestor]?.indis?.length;\n\t}\n\n\thasIgnoredMember() {\n\t\treturn !!this.tagMembers?.[CustomTags.IgnoredMember]?.indis?.length;\n\t}\n\n\thasUnattachedMember() {\n\t\treturn !!this.tagMembers?.[CustomTags.UnattachedMember]?.indis?.length;\n\t}\n\n\thasUnknownGivenname() {\n\t\treturn !!this.tagMembers?.[CustomTags.UnknownGivenname]?.indis?.length;\n\t}\n\n\thasUnknownSurname() {\n\t\treturn !!this.tagMembers?.[CustomTags.UnknownSurname]?.indis?.length;\n\t}\n\n\thasNonRelevant() {\n\t\treturn this.hasUnknownAncestor() || this.hasUnattachedMember();\n\t}\n\n\t/**\n\t * Get all places from the GEDCOM with occurrence counts\n\t * @returns Record mapping place names to their occurrence count\n\t */\n\tgetAllPlaces() {\n\t\tconst indis = this.indis();\n\t\tconst allPlaces: Record<string, number> = {};\n\n\t\tindis?.forEach((indi) => {\n\t\t\tif (!indi.id) return;\n\t\t\tconst places = indi.getPlaces();\n\t\t\tplaces.forEach((placeObj) => {\n\t\t\t\tconst placeName = placeObj?.place as string | undefined;\n\t\t\t\tif (placeName && typeof placeName === \"string\") {\n\t\t\t\t\tallPlaces[placeName] = (allPlaces[placeName] || 0) + 1;\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn allPlaces;\n\t}\n\n\t/**\n\t * Get all places from the GEDCOM with associated individual IDs\n\t * @param usedIndis Optional array of individual IDs to filter by\n\t * @returns Record mapping place names to arrays of individual IDs\n\t */\n\tgetAllPlacesWithIndis(usedIndis: IndiKey[] = []) {\n\t\tconst indis = this.indis();\n\t\tconst allPlaces: Record<string, IndiKey[]> = {};\n\n\t\tindis?.forEach((indi) => {\n\t\t\tif (\n\t\t\t\t!indi.id ||\n\t\t\t\t(usedIndis.length && !usedIndis.includes(indi.id))\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst places = indi.getPlaces();\n\t\t\tplaces.forEach((placeObj) => {\n\t\t\t\tconst placeName = placeObj?.place as string | undefined;\n\t\t\t\tif (placeName && typeof placeName === \"string\" && indi.id) {\n\t\t\t\t\tif (!allPlaces[placeName]) {\n\t\t\t\t\t\tallPlaces[placeName] = [];\n\t\t\t\t\t}\n\t\t\t\t\tallPlaces[placeName].push(indi.id);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\n\t\treturn allPlaces;\n\t}\n\n\t/**\n\t * Generate statistics about the GEDCOM file\n\t * @param individuals Optional list of individuals to calculate statistics for. If not provided, all individuals from the GEDCOM will be used.\n\t * @returns Object containing various statistics about the GEDCOM data\n\t */\n\tstats(individuals?: Individuals) {\n\t\tconst indis = individuals ?? this.indis();\n\n\t\t// Build families list based on whether individuals filter is provided\n\t\tlet families: Families | undefined;\n\n\t\tif (individuals) {\n\t\t\t// If individuals filter is provided, filter families by references\n\t\t\tconst familyIds = new Set<FamKey>();\n\t\t\tindis?.forEach((indi) => {\n\t\t\t\t// Add spouse families\n\t\t\t\tindi.FAMS?.toList()?.forEach((famRef) => {\n\t\t\t\t\tconst famId = famRef.value as FamKey | undefined;\n\t\t\t\t\tif (famId) familyIds.add(famId);\n\t\t\t\t});\n\t\t\t\t// Add parent families\n\t\t\t\tindi.FAMC?.toList()?.forEach((famRef) => {\n\t\t\t\t\tconst famId = famRef.value as FamKey | undefined;\n\t\t\t\t\tif (famId) familyIds.add(famId);\n\t\t\t\t});\n\t\t\t});\n\n\t\t\tfamilies = this.fams()?.filter((fam) =>\n\t\t\t\tfam.id ? familyIds.has(fam.id) : false\n\t\t\t);\n\t\t} else {\n\t\t\t// No filter provided, use all families directly\n\t\t\tfamilies = this.fams();\n\t\t} // Calculate statistics\n\t\tconst totalIndividuals = indis?.length || 0;\n\t\tconst totalFamilies = families?.length || 0;\n\n\t\t// Count by sex\n\t\tlet males = 0;\n\t\tlet females = 0;\n\t\tlet unknownSex = 0;\n\n\t\tindis?.forEach((indi) => {\n\t\t\tconst sex = indi.SEX?.value;\n\t\t\tif (sex === \"M\") males++;\n\t\t\telse if (sex === \"F\") females++;\n\t\t\telse unknownSex++;\n\t\t});\n\n\t\t// Most common surnames\n\t\tconst surnames = new Map<string, number>();\n\t\tindis?.forEach((indi) => {\n\t\t\tconst name = indi.NAME?.toValue();\n\t\t\tif (name) {\n\t\t\t\tconst match = name.match(/\\/(.+?)\\//);\n\t\t\t\tif (match) {\n\t\t\t\t\tconst surname = match[1];\n\t\t\t\t\tsurnames.set(surname, (surnames.get(surname) || 0) + 1);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tconst topSurnames = Array.from(surnames.entries())\n\t\t\t.sort((a, b) => b[1] - a[1])\n\t\t\t.slice(0, 10)\n\t\t\t.map(([surname, count]) => ({ surname, count }));\n\n\t\t// Most common birth places\n\t\tconst birthPlaces = new Map<string, number>();\n\t\tindis?.forEach((indi) => {\n\t\t\tconst place = indi.BIRT?.PLAC?.value;\n\t\t\tif (place) {\n\t\t\t\tbirthPlaces.set(place, (birthPlaces.get(place) || 0) + 1);\n\t\t\t}\n\t\t});\n\n\t\tconst topBirthPlaces = Array.from(birthPlaces.entries())\n\t\t\t.sort((a, b) => b[1] - a[1])\n\t\t\t.slice(0, 10)\n\t\t\t.map(([place, count]) => ({ place, count }));\n\n\t\t// Date range\n\t\tconst years: number[] = [];\n\t\tindis?.forEach((indi) => {\n\t\t\tconst birthDate = indi.BIRT?.DATE?.toValue();\n\t\t\tif (birthDate) {\n\t\t\t\tconst match = birthDate.match(/\\d{4}/);\n\t\t\t\tif (match) {\n\t\t\t\t\tyears.push(parseInt(match[0], 10));\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst deathDate = indi.DEAT?.DATE?.toValue();\n\t\t\tif (deathDate) {\n\t\t\t\tconst match = deathDate.match(/\\d{4}/);\n\t\t\t\tif (match) {\n\t\t\t\t\tyears.push(parseInt(match[0], 10));\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tconst minYear = years.length > 0 ? Math.min(...years) : null;\n\t\tconst maxYear = years.length > 0 ? Math.max(...years) : null;\n\n\t\t// Average lifespan\n\t\tconst lifespans: number[] = [];\n\t\tindis?.forEach((indi) => {\n\t\t\tconst birthDate = indi.BIRT?.DATE?.toValue();\n\t\t\tconst deathDate = indi.DEAT?.DATE?.toValue();\n\t\t\tif (birthDate && deathDate) {\n\t\t\t\tconst birthMatch = birthDate.match(/\\d{4}/);\n\t\t\t\tconst deathMatch = deathDate.match(/\\d{4}/);\n\t\t\t\tif (birthMatch && deathMatch) {\n\t\t\t\t\tconst birthYear = parseInt(birthMatch[0], 10);\n\t\t\t\t\tconst deathYear = parseInt(deathMatch[0], 10);\n\t\t\t\t\tif (deathYear > birthYear) {\n\t\t\t\t\t\tlifespans.push(deathYear - birthYear);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tconst avgLifespan =\n\t\t\tlifespans.length > 0\n\t\t\t\t? lifespans.reduce((sum, age) => sum + age, 0) /\n\t\t\t\t\tlifespans.length\n\t\t\t\t: null;\n\n\t\t// First and last person events with type information\n\t\tconst firstPerson = indis?.getFirstEvent();\n\t\tconst firstBirth = firstPerson?.BIRT?.toList().index(0) as\n\t\t\t| IEventDetailStructure\n\t\t\t| undefined;\n\t\tconst firstDeath = firstPerson?.DEAT?.toList().index(0) as\n\t\t\t| IEventDetailStructure\n\t\t\t| undefined;\n\n\t\tlet firstPersonEvent = null;\n\t\tconst firstBirthDate = (firstBirth as IEventDetailStructure)?.DATE\n\t\t\t?.rawValue;\n\t\tconst firstDeathDate = (firstDeath as IEventDetailStructure)?.DATE\n\t\t\t?.rawValue;\n\n\t\tif (firstBirthDate || firstDeathDate) {\n\t\t\tconst isBirth =\n\t\t\t\t!firstBirthDate ||\n\t\t\t\t(firstDeathDate && firstDeathDate < firstBirthDate)\n\t\t\t\t\t? false\n\t\t\t\t\t: true;\n\n\t\t\tfirstPersonEvent = {\n\t\t\t\ttype: isBirth ? \"BIRT\" : \"DEAT\",\n\t\t\t\tevent: isBirth ? firstBirth : firstDeath,\n\t\t\t\tperson: firstPerson,\n\t\t\t};\n\t\t}\n\n\t\tconst lastPerson = indis?.getLastEvent();\n\t\tconst lastBirth = lastPerson?.BIRT?.toList().index(0) as\n\t\t\t| (Common & IEventDetailStructure)\n\t\t\t| undefined;\n\t\tconst lastDeath = lastPerson?.DEAT?.toList().index(0) as\n\t\t\t| (Common & IEventDetailStructure)\n\t\t\t| undefined;\n\n\t\tlet lastPersonEvent = null;\n\t\tconst lastBirthDate = (lastBirth as Common & IEventDetailStructure)\n\t\t\t?.DATE?.rawValue;\n\t\tconst lastDeathDate = (lastDeath as Common & IEventDetailStructure)\n\t\t\t?.DATE?.rawValue;\n\n\t\tif (lastBirthDate || lastDeathDate) {\n\t\t\tconst isBirth =\n\t\t\t\t!lastDeathDate ||\n\t\t\t\t(lastBirthDate && lastDeathDate < lastBirthDate)\n\t\t\t\t\t? true\n\t\t\t\t\t: false;\n\n\t\t\tlastPersonEvent = {\n\t\t\t\ttype: isBirth ? \"BIRT\" : \"DEAT\",\n\t\t\t\tevent: isBirth ? lastBirth : lastDeath,\n\t\t\t\tperson: lastPerson,\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\ttotalIndividuals,\n\t\t\ttotalFamilies,\n\t\t\tbyGender: {\n\t\t\t\tmales,\n\t\t\t\tfemales,\n\t\t\t\tunknown: unknownSex,\n\t\t\t},\n\t\t\tdateRange: {\n\t\t\t\tearliest: minYear,\n\t\t\t\tlatest: maxYear,\n\t\t\t},\n\t\t\taverageLifespan: avgLifespan\n\t\t\t\t? Math.round(avgLifespan * 10) / 10\n\t\t\t\t: null,\n\t\t\ttopSurnames,\n\t\t\ttopBirthPlaces,\n\t\t\tfirstPersonEvent,\n\t\t\tlastPersonEvent,\n\t\t};\n\t}\n}\n\nexport type GedComType = GedCom & IGedComStructure;\nexport const createGedCom = (): GedComType => {\n\treturn new GedCom();\n};\n\nexport const isGedcomString = (gedcomString?: string) => {\n\treturn (\n\t\ttypeof gedcomString === \"string\" &&\n\t\tgedcomString[0] === \"0\" &&\n\t\tgedcomString\n\t\t\t.split(\"\\n\")\n\t\t\t.slice(0, 1000)\n\t\t\t.every((l) => !l || /^\\d+\\s+/.test(l))\n\t);\n};\n\n/**\n * Validates if a string is a valid GEDCOM file content\n * @param content - The file content to validate\n * @returns An object with `valid` boolean and optional `error` message\n */\nexport const validateGedcomContent = (\n\tcontent?: string\n): { valid: boolean; error?: string } => {\n\tif (!content) {\n\t\treturn { valid: false, error: \"File is empty\" };\n\t}\n\n\tconst trimmedContent = content.trim();\n\tif (!trimmedContent) {\n\t\treturn { valid: false, error: \"File is empty\" };\n\t}\n\n\t// Check for common binary file signatures\n\tconst firstBytes = trimmedContent.substring(0, 10);\n\tconst isBinary =\n\t\tfirstBytes.startsWith(\"\\x89PNG\") || // PNG\n\t\tfirstBytes.startsWith(\"\\xFF\\xD8\\xFF\") || // JPEG\n\t\tfirstBytes.startsWith(\"GIF8\") || // GIF\n\t\tfirstBytes.startsWith(\"BM\") || // BMP\n\t\tfirstBytes.startsWith(\"PK\") || // ZIP\n\t\tfirstBytes.startsWith(\"%PDF\") || // PDF\n\t\t// eslint-disable-next-line no-control-regex\n\t\t/[\\x00-\\x08\\x0E-\\x1F]/.test(firstBytes); // Other binary content\n\n\tif (isBinary) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terror: \"File appears to be a binary file (image, PDF, etc.), not a GEDCOM text file\",\n\t\t};\n\t}\n\n\t// Check if content starts with GEDCOM header\n\t// GEDCOM files must start with \"0 HEAD\" or \"0 head\" (case-insensitive)\n\tconst startsWithHeader = /^0\\s+(HEAD|head)/i.test(trimmedContent);\n\n\tif (!startsWithHeader) {\n\t\treturn {\n\t\t\tvalid: false,\n\t\t\terror: \"Invalid GEDCOM file format. File must start with '0 HEAD' record\",\n\t\t};\n\t}\n\n\t/**\n\t * Turning this off, because it's invalidating multiline gedcom property\n\t * (I know these kind of GEDCOMs are not standard, but need to allow any user files)\n\t **/\n\t// Additional check using the existing isGedcomString logic\n\t// if (!isGedcomString(trimmedContent)) {\n\t// \treturn {\n\t// \t\tvalid: false,\n\t// \t\terror: \"Invalid GEDCOM file format. File contains invalid line formats\",\n\t// \t};\n\t// }\n\n\treturn { valid: true };\n};\n\n// Constants for merge operation\nconst MERGE_ID_INCREMENT_MULTIPLIER = 1000;\n\n/**\n * Helper function to convert a Common or List value to a string for comparison\n */\nconst valueToString = (value: Common | List | undefined): string => {\n\tif (!value) return \"\";\n\treturn (\n\t\tvalue.toString?.() ||\n\t\tString((value as Common | undefined)?.toValue?.() || \"\")\n\t);\n};\n\n/**\n * Merge two GEDCOM objects into a single result using a configurable matching strategy\n * @param targetGedcom - The base GEDCOM (kept as the primary source)\n * @param sourceGedcom - The GEDCOM to be merged into the target\n * @param strategy - Matching strategy: \"id\" (default) to match by individual ID, or any MultiTag (e.g., \"NAME\", \"BIRT.DATE\") to match by that field's value\n * @returns The merged GedComType with all individuals and families combined\n *\n * @example\n * // Merge by ID (individuals with same ID are considered the same person)\n * const merged = await mergeGedcoms(target, source, \"id\");\n *\n * @example\n * // Merge by NAME (individuals with same name are considered the same person)\n * const merged = await mergeGedcoms(target, source, \"NAME\");\n *\n * @remarks\n * - Source individuals are always assigned new unique IDs to avoid conflicts\n * - When individuals match by strategy, they are merged (data and relationships combined)\n * - All family relationships (FAMS/FAMC) are preserved with updated ID references\n */\nexport const mergeGedcoms = (\n\ttargetGedcom: GedComType,\n\tsourceGedcom: GedComType,\n\tstrategy: MultiTag | \"id\" = \"id\"\n): GedComType => {\n\t// Work directly with the target GEDCOM (no serialization needed)\n\tconst mergedGedcom = targetGedcom;\n\n\t// Track ID mapping: source ID -> new ID in merged GEDCOM\n\tconst idMap = new Map<IdType, IdType>();\n\n\t// Track matching: sourceIndiId -> targetIndiId (for individuals that match by strategy)\n\tconst matchMap = new Map<IndiKey, IndiKey>();\n\n\t// Get source individuals and families\n\tconst sourceIndis = sourceGedcom.indis();\n\tconst sourceFams = sourceGedcom.fams();\n\tconst targetIndis = mergedGedcom.indis();\n\tconst targetFams = mergedGedcom.fams();\n\n\t// Step 1: Identify matches and create ID mappings for individuals\n\tsourceIndis?.forEach((sourceIndi) => {\n\t\tif (!sourceIndi.id) return;\n\n\t\tlet matchedTargetIndi: IndiType | undefined;\n\n\t\tif (strategy === \"id\") {\n\t\t\t// Match by ID directly - check if target has this exact ID\n\t\t\tmatchedTargetIndi = targetIndis?.item(sourceIndi.id);\n\t\t} else {\n\t\t\t// Match by specified MultiTag value\n\t\t\tconst sourceValueRaw = sourceIndi.get(strategy);\n\t\t\tconst sourceValue = valueToString(sourceValueRaw);\n\n\t\t\tif (sourceValue) {\n\t\t\t\t// Find target individual with same value\n\t\t\t\tmatchedTargetIndi = targetIndis?.find((targetIndi) => {\n\t\t\t\t\tconst targetValueRaw = targetIndi.get(strategy);\n\t\t\t\t\tconst targetValue = valueToString(targetValueRaw);\n\t\t\t\t\treturn Boolean(targetValue && targetValue === sourceValue);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (matchedTargetIndi && matchedTargetIndi.id) {\n\t\t\t// Found a match - map source ID to existing target ID\n\t\t\t// Note: This means source individual will merge into target individual\n\t\t\tmatchMap.set(sourceIndi.id, matchedTargetIndi.id);\n\t\t\tidMap.set(sourceIndi.id, matchedTargetIndi.id);\n\t\t} else {\n\t\t\t// No match - need to create a new unique ID\n\t\t\tconst baseId = sourceIndi.id;\n\t\t\tlet newId: IndiKey = baseId;\n\t\t\tlet counter = 1;\n\n\t\t\t// Generate unique ID that doesn't conflict with target\n\t\t\twhile (targetIndis?.item(newId) || idMap.has(newId as IdType)) {\n\t\t\t\t// Extract number from ID like @I123@ and increment\n\t\t\t\tconst numMatch = baseId.match(/\\d+/);\n\t\t\t\tconst prefix = baseId.match(/^@[A-Z]+/)?.[0] || \"@I\";\n\t\t\t\tconst baseNum = numMatch ? parseInt(numMatch[0]) : 1;\n\t\t\t\tnewId =\n\t\t\t\t\t`${prefix}${baseNum + counter * MERGE_ID_INCREMENT_MULTIPLIER}@` as IndiKey;\n\t\t\t\tcounter++;\n\t\t\t}\n\n\t\t\tidMap.set(sourceIndi.id, newId as IdType);\n\t\t}\n\t});\n\n\t// Step 2: Map family IDs and match families with same members\n\tconst famMatchMap = new Map<FamKey, FamKey>(); // source family ID -> target family ID\n\n\tsourceFams?.forEach((sourceFam) => {\n\t\tif (!sourceFam.id) return;\n\n\t\t// Get the member IDs for this source family\n\t\tconst sourceHusbId = sourceFam.HUSB?.value as IndiKey | undefined;\n\t\tconst sourceWifeId = sourceFam.WIFE?.value as IndiKey | undefined;\n\t\tconst sourceChildIds =\n\t\t\tsourceFam.CHIL?.toList()\n\t\t\t\t?.map((c) => c.value as IndiKey)\n\t\t\t\t.filter(Boolean) || [];\n\n\t\t// Map to their final IDs (after individual matching by strategy)\n\t\tconst finalHusbId = sourceHusbId\n\t\t\t? (idMap.get(sourceHusbId) as IndiKey | undefined)\n\t\t\t: undefined;\n\t\tconst finalWifeId = sourceWifeId\n\t\t\t? (idMap.get(sourceWifeId) as IndiKey | undefined)\n\t\t\t: undefined;\n\t\tconst finalChildIds = sourceChildIds\n\t\t\t.map((id) => idMap.get(id) as IndiKey | undefined)\n\t\t\t.filter(Boolean);\n\n\t\t// Try to find a matching family in target that has the same members (after remapping)\n\t\tlet matchedTargetFam: FamType | undefined;\n\n\t\ttargetFams?.forEach((targetFam) => {\n\t\t\tif (matchedTargetFam) return; // Already found a match\n\n\t\t\tconst targetHusbId = targetFam.HUSB?.value as IndiKey | undefined;\n\t\t\tconst targetWifeId = targetFam.WIFE?.value as IndiKey | undefined;\n\t\t\tconst targetChildIds =\n\t\t\t\ttargetFam.CHIL?.toList()\n\t\t\t\t\t?.map((c) => c.value as IndiKey)\n\t\t\t\t\t.filter(Boolean) || [];\n\n\t\t\t// Check if husband matches (either both undefined or same final ID)\n\t\t\tconst husbMatch =\n\t\t\t\t(!finalHusbId && !targetHusbId) || finalHusbId === targetHusbId;\n\t\t\t// Check if wife matches (either both undefined or same final ID)\n\t\t\tconst wifeMatch =\n\t\t\t\t(!finalWifeId && !targetWifeId) || finalWifeId === targetWifeId;\n\n\t\t\t// For a family to match, both husband and wife must match\n\t\t\t// (if one is undefined in both, that's also a match)\n\t\t\tif (husbMatch && wifeMatch) {\n\t\t\t\t// Also check children overlap\n\t\t\t\tconst childOverlap = finalChildIds.filter(\n\t\t\t\t\t(id) => id && targetChildIds.includes(id)\n\t\t\t\t).length;\n\t\t\t\tconst totalUniqueChildren = new Set([\n\t\t\t\t\t...finalChildIds,\n\t\t\t\t\t...targetChildIds,\n\t\t\t\t]).size;\n\n\t\t\t\t// Match if:\n\t\t\t\t// 1. At least one spouse is present (to avoid matching empty families), OR\n\t\t\t\t// 2. At least 50% of children overlap\n\t\t\t\tconst hasSpouses =\n\t\t\t\t\tfinalHusbId ||\n\t\t\t\t\tfinalWifeId ||\n\t\t\t\t\ttargetHusbId ||\n\t\t\t\t\ttargetWifeId;\n\t\t\t\tconst hasMatchingChildren =\n\t\t\t\t\ttotalUniqueChildren > 0 &&\n\t\t\t\t\tchildOverlap / totalUniqueChildren >= 0.5;\n\n\t\t\t\tif (hasSpouses || hasMatchingChildren) {\n\t\t\t\t\tmatchedTargetFam = targetFam;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (matchedTargetFam && matchedTargetFam.id) {\n\t\t\t// Found a matching family - use the target family ID\n\t\t\tfamMatchMap.set(sourceFam.id, matchedTargetFam.id);\n\t\t\tidMap.set(sourceFam.id, matchedTargetFam.id);\n\t\t} else {\n\t\t\t// No match - generate a new unique family ID\n\t\t\tconst baseId = sourceFam.id;\n\t\t\tlet newId: FamKey = baseId;\n\t\t\tlet counter = 1;\n\n\t\t\t// Generate unique family ID\n\t\t\twhile (targetFams?.item(newId) || idMap.has(newId as IdType)) {\n\t\t\t\tconst numMatch = baseId.match(/\\d+/);\n\t\t\t\tconst prefix = baseId.match(/^@[A-Z]+/)?.[0] || \"@F\";\n\t\t\t\tconst baseNum = numMatch ? parseInt(numMatch[0]) : 1;\n\t\t\t\tnewId =\n\t\t\t\t\t`${prefix}${baseNum + counter * MERGE_ID_INCREMENT_MULTIPLIER}@` as FamKey;\n\t\t\t\tcounter++;\n\t\t\t}\n\n\t\t\tidMap.set(sourceFam.id, newId as IdType);\n\t\t}\n\t});\n\n\t// Step 3: Clone and remap individuals from source\n\tconst clonedIndis = new Map<IndiKey, IndiType>();\n\tsourceIndis?.forEach((sourceIndi) => {\n\t\tif (!sourceIndi.id) return;\n\n\t\tconst newId = idMap.get(sourceIndi.id) as IndiKey | undefined;\n\t\tif (!newId) return;\n\n\t\t// Clone the individual\n\t\tconst cloned = sourceIndi.clone(false) as IndiType;\n\t\tcloned.id = newId;\n\t\tcloned.setGedcom(mergedGedcom);\n\n\t\tclonedIndis.set(sourceIndi.id, cloned);\n\t});\n\n\t// Step 4: Clone and remap families from source\n\tconst clonedFams = new Map<FamKey, FamType>();\n\tsourceFams?.forEach((sourceFam) => {\n\t\tif (!sourceFam.id) return;\n\n\t\tconst newFamId = idMap.get(sourceFam.id) as FamKey | undefined;\n\t\tif (!newFamId) return;\n\n\t\t// Clone the family\n\t\tconst clonedFam = sourceFam.clone(false) as FamType;\n\t\tclonedFam.id = newFamId;\n\t\tclonedFam.setGedcom(mergedGedcom);\n\n\t\tclonedFams.set(sourceFam.id, clonedFam);\n\t});\n\n\t// Step 5: Update FAMS and FAMC references in cloned individuals\n\tclonedIndis.forEach((clonedIndi, originalId) => {\n\t\tconst sourceIndi = sourceIndis?.item(originalId);\n\t\tif (!sourceIndi) return;\n\n\t\t// Clear and rebuild FAMS references with remapped IDs\n\t\tclonedIndi.remove(\"FAMS\");\n\t\tconst sourceFAMS = sourceIndi.FAMS?.toList();\n\t\tsourceFAMS?.forEach((famRef) => {\n\t\t\tconst oldFamId = famRef.value as FamKey | undefined;\n\t\t\tif (oldFamId) {\n\t\t\t\tconst newFamId = idMap.get(oldFamId) as FamKey | undefined;\n\t\t\t\tif (newFamId) {\n\t\t\t\t\tconst newFamRef = createCommon(\n\t\t\t\t\t\tmergedGedcom,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tclonedIndi\n\t\t\t\t\t);\n\t\t\t\t\tnewFamRef.value = newFamId;\n\t\t\t\t\tclonedIndi.assign(\"FAMS\", newFamRef, true);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t// Clear and rebuild FAMC references with remapped IDs\n\t\tclonedIndi.remove(\"FAMC\");\n\t\tconst sourceFAMC = sourceIndi.FAMC?.toList();\n\t\tsourceFAMC?.forEach((famRef) => {\n\t\t\tconst oldFamId = famRef.value as FamKey | undefined;\n\t\t\tif (oldFamId) {\n\t\t\t\tconst newFamId = idMap.get(oldFamId) as FamKey | undefined;\n\t\t\t\tif (newFamId) {\n\t\t\t\t\tconst newFamRef = createCommon(\n\t\t\t\t\t\tmergedGedcom,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tclonedIndi\n\t\t\t\t\t);\n\t\t\t\t\tnewFamRef.value = newFamId;\n\t\t\t\t\tclonedIndi.assign(\"FAMC\", newFamRef, true);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\n\t// Step 6: Update HUSB, WIFE, and CHIL references in cloned families\n\tclonedFams.forEach((clonedFam, originalFamId) => {\n\t\tconst sourceFam = sourceFams?.item(originalFamId);\n\t\tif (!sourceFam) return;\n\n\t\t// Update HUSB reference\n\t\tconst sourceHusb = sourceFam.HUSB?.value as IndiKey | undefined;\n\t\tif (sourceHusb) {\n\t\t\tconst newHusbId = idMap.get(sourceHusb) as IndiKey | undefined;\n\t\t\tif (newHusbId) {\n\t\t\t\tconst newHusbRef = createCommon(\n\t\t\t\t\tmergedGedcom,\n\t\t\t\t\tundefined,\n\t\t\t\t\tclonedFam\n\t\t\t\t);\n\t\t\t\tnewHusbRef.value = newHusbId;\n\t\t\t\tclonedFam.set(\"HUSB\", newHusbRef);\n\t\t\t}\n\t\t}\n\n\t\t// Update WIFE reference\n\t\tconst sourceWife = sourceFam.WIFE?.value as IndiKey | undefined;\n\t\tif (sourceWife) {\n\t\t\tconst newWifeId = idMap.get(sourceWife) as IndiKey | undefined;\n\t\t\tif (newWifeId) {\n\t\t\t\tconst newWifeRef = createCommon(\n\t\t\t\t\tmergedGedcom,\n\t\t\t\t\tundefined,\n\t\t\t\t\tclonedFam\n\t\t\t\t);\n\t\t\t\tnewWifeRef.value = newWifeId;\n\t\t\t\tclonedFam.set(\"WIFE\", newWifeRef);\n\t\t\t}\n\t\t}\n\n\t\t// Update CHIL references\n\t\tclonedFam.remove(\"CHIL\");\n\t\tconst sourceChildren = sourceFam.CHIL?.toList();\n\t\tsourceChildren?.forEach((childRef) => {\n\t\t\tconst oldChildId = childRef.value as IndiKey | undefined;\n\t\t\tif (oldChildId) {\n\t\t\t\tconst newChildId = idMap.get(oldChildId) as IndiKey | undefined;\n\t\t\t\tif (newChildId) {\n\t\t\t\t\tconst newChildRef = createCommon(\n\t\t\t\t\t\tmergedGedcom,\n\t\t\t\t\t\tundefined,\n\t\t\t\t\t\tclonedFam\n\t\t\t\t\t);\n\t\t\t\t\tnewChildRef.value = newChildId;\n\t\t\t\t\tclonedFam.assign(\"CHIL\", newChildRef, true);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\n\t// Step 7: Add or merge individuals into target GEDCOM\n\tclonedIndis.forEach((clonedIndi, originalId) => {\n\t\tconst matchedTargetId = matchMap.get(originalId);\n\n\t\tif (matchedTargetId) {\n\t\t\t// This individual matches an existing one - merge data and relationships\n\t\t\tconst targetIndi = mergedGedcom.indis()?.item(matchedTargetId);\n\t\t\tif (targetIndi) {\n\t\t\t\t// Merge without overriding existing data\n\t\t\t\t// If using a strategy field (not \"id\"), avoid merging that field since it's already the same\n\t\t\t\tconst avoidKeys: MultiTag[] = strategy !== \"id\" ? [strategy] : [];\n\t\t\t\ttargetIndi.merge(clonedIndi, false, avoidKeys);\n\t\t\t}\n\t\t} else {\n\t\t\t// This is a new individual - add it to merged GEDCOM\n\t\t\tif (clonedIndi.id) {\n\t\t\t\tmergedGedcom.indis()?.item(clonedIndi.id, clonedIndi);\n\t\t\t}\n\t\t}\n\t});\n\n\t// Step 8: Add or merge families into target GEDCOM\n\tclonedFams.forEach((clonedFam, originalFamId) => {\n\t\tif (!clonedFam.id) return;\n\n\t\tconst matchedTargetFamId = famMatchMap.get(originalFamId);\n\n\t\tif (matchedTargetFamId) {\n\t\t\t// This family matches an existing one - merge children and data\n\t\t\tconst targetFam = mergedGedcom.fams()?.item(matchedTargetFamId);\n\t\t\tif (targetFam) {\n\t\t\t\t// Merge family data without overriding\n\t\t\t\ttargetFam.merge(clonedFam, false);\n\n\t\t\t\t// Note: Children from clonedFam are already added via merge above\n\t\t\t\t// The CHIL references in clonedFam point to the correct remapped IDs\n\t\t\t}\n\t\t} else {\n\t\t\t// This is a new family - add it to merged GEDCOM\n\t\t\tmergedGedcom.fams()?.item(clonedFam.id, clonedFam);\n\t\t}\n\t});\n\n\treturn mergedGedcom;\n};\n","import type { IdType } from \"../types/types\";\n\nimport { Common, createCommon, createProxy } from \"./common\";\nimport type { ProxyOriginal } from \"./common\";\nimport type {GedComType} from \"./gedcom\";\nimport { List } from \"./list\";\n\nexport class CommonNote extends Common<string> {\n\tconstructor(\n\t\tgedcom?: GedComType,\n\t\tid?: IdType,\n\t\tmain?: Common,\n\t\tparent?: Common\n\t) {\n\t\tsuper(gedcom, id, main, parent);\n\n\t\tdelete this.id;\n\t}\n\n\tset value(value: string | undefined) {\n\t\tconst [note, ...contents] = value?.split(/\\r?\\n/) ?? [];\n\n\t\tthis._value = note;\n\n\t\tif (contents.length) {\n\t\t\tconst newContents = new List();\n\n\t\t\tcontents.forEach((c, i) => {\n\t\t\t\tconst newContent = createCommon(\n\t\t\t\t\tthis._gedcom,\n\t\t\t\t\tundefined,\n\t\t\t\t\tthis.main\n\t\t\t\t);\n\t\t\t\tnewContent.id = `@U${i}@`;\n\t\t\t\tnewContent.value = c;\n\t\t\t\tnewContents.append(newContent);\n\t\t\t});\n\n\t\t\tconst firstItem = newContents.index(0);\n\t\t\tif (firstItem) {\n\t\t\t\tif (newContents.length === 1) {\n\t\t\t\t\tthis.set(\"CONT\", firstItem);\n\t\t\t\t} else {\n\t\t\t\t\tthis.set(\"CONT\", newContents);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tget value() {\n\t\tconst contents = this.get(\"CONT\")\n\t\t\t?.toList()\n\t\t\t.map((content) => content.value)\n\t\t\t.join(\"\\n\");\n\n\t\tif (contents) {\n\t\t\treturn `${this._value}\\n${contents}`;\n\t\t}\n\n\t\treturn this._value;\n\t}\n\n\texportValue() {\n\t\treturn this._value;\n\t}\n}\n\nexport const createCommonNote = (\n\tgedcom?: GedComType,\n\tid?: IdType,\n\tmain?: Common,\n\tparent?: Common\n): ProxyOriginal<CommonNote> => {\n\treturn createProxy(\n\t\tnew CommonNote(gedcom, id, main, parent)\n\t) as unknown as ProxyOriginal<CommonNote>;\n};\n","import type IObje from \"../interfaces/obje\";\nimport type IMultimediaLinkStructure from \"../structures/multimedia-link\";\nimport type {ObjeKey} from \"../types/types\";\n\nimport { Common, createCommon, createProxy } from \"./common\";\nimport type { ProxyOriginal } from \"./common\";\nimport type {GedComType} from \"./gedcom\";\n\nexport class Obje extends Common<string, ObjeKey> implements IObje {\n\tstandardizeMedia(\n\t\tnamespace?: string | number,\n\t\toverride = true,\n\t\turlGetter?: (\n\t\t\tnamespace?: string | number,\n\t\t\timgId?: string\n\t\t) => string | undefined\n\t) {\n\t\tif (!this._gedcom) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst rin = this?.get(\"RIN\")?.toValue() as string | undefined;\n\t\tconst clone = this?.get(\"_CLON._OID\")?.toValue() as string | undefined;\n\t\tconst mser = this?.get(\"_MSER._LKID\")?.toValue() as string | undefined;\n\t\tconst title =\n\t\t\tthis?.get(\"FILE.TITL\")?.toValue() ??\n\t\t\tthis?.get(\"TITL\")?.toValue() ??\n\t\t\t\"\";\n\t\tconst note =\n\t\t\tthis?.get(\"FILE.NOTE\")?.toValue() ??\n\t\t\tthis?.get(\"NOTE\")?.toValue() ??\n\t\t\t\"\";\n\t\tconst form = this?.get(\"FILE.FORM\")?.toValue() as string | undefined;\n\t\tconst file = this?.get(\"FILE\")?.toValue() as string | undefined;\n\n\t\tconst imgId = rin || clone || mser;\n\n\t\tconst url = file || (namespace && urlGetter?.(namespace, imgId));\n\n\t\tif (!url) {\n\t\t\treturn this;\n\t\t}\n\n\t\tconst newObject = createObje(this._gedcom, this.id, this.main);\n\n\t\tif (!override) {\n\t\t\tObject.assign(newObject, this);\n\t\t}\n\n\t\tif (form) {\n\t\t\tif (typeof form === \"string\") {\n\t\t\t\tconst newForm = createCommon(\n\t\t\t\t\tthis._gedcom,\n\t\t\t\t\tundefined,\n\t\t\t\t\tthis.main\n\t\t\t\t);\n\t\t\t\tnewForm.value = form;\n\t\t\t\tnewObject.set(\"FORM\", newForm);\n\t\t\t} else {\n\t\t\t\tnewObject.set(\"FORM\", form);\n\t\t\t}\n\t\t}\n\n\t\tif (title) {\n\t\t\tif (typeof title === \"string\") {\n\t\t\t\tconst newTitle = createCommon(\n\t\t\t\t\tthis._gedcom,\n\t\t\t\t\tundefined,\n\t\t\t\t\tthis.main\n\t\t\t\t);\n\t\t\t\tnewTitle.value = title;\n\t\t\t\tnewObject.set(\"TITL\", newTitle);\n\n\t\t\t\tif (!note) {\n\t\t\t\t\tnewObject.set(\"NOTE\", newTitle);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnewObject.set(\"TITL\", title);\n\t\t\t\tif (!note) {\n\t\t\t\t\tnewObject.set(\"NOTE\", title);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (note) {\n\t\t\tif (typeof note === \"string\") {\n\t\t\t\tconst newNote = createCommon(\n\t\t\t\t\tthis._gedcom,\n\t\t\t\t\tundefined,\n\t\t\t\t\tthis.main\n\t\t\t\t);\n\t\t\t\tnewNote.value = note;\n\t\t\t\tnewObject.set(\"NOTE\", newNote);\n\n\t\t\t\tif (!title) {\n\t\t\t\t\tnewObject.set(\"TITL\", newNote);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnewObject.set(\"NOTE\", note);\n\t\t\t\tif (!title) {\n\t\t\t\t\tnewObject.set(\"TITL\", note);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst newUrl = createCommon(this._gedcom, undefined, this.main);\n\t\tnewUrl.value = url;\n\t\tnewObject.set(\"FILE\", newUrl);\n\n\t\tif (override) {\n\t\t\tObject.assign(this, newObject);\n\n\t\t\treturn this;\n\t\t}\n\n\t\treturn newObject;\n\t}\n}\n\nexport type ObjeType = Obje & IMultimediaLinkStructure;\nexport const createObje = (\n\tgedcom: GedComType,\n\tid?: ObjeKey,\n\tmain?: Common,\n\tparent?: Common\n): ProxyOriginal<ObjeType> => {\n\treturn createProxy(\n\t\tnew Obje(gedcom, id, main, parent)\n\t) as unknown as ProxyOriginal<ObjeType>;\n};\n","import type IRepo from \"../interfaces/repo\";\nimport type IRepositoryStructure from \"../structures/repository\";\nimport type {RepoKey} from \"../types/types\";\n\nimport { Common, createProxy } from \"./common\";\nimport type { ProxyOriginal } from \"./common\";\nimport type {GedComType} from \"./gedcom\";\n\nexport class Repo extends Common<string, RepoKey> implements IRepo {}\n\nexport type RepoType = Repo & IRepositoryStructure;\nexport const createRepo = (\n\tgedcom: GedComType,\n\tid?: RepoKey,\n\tmain?: Common,\n\tparent?: Common\n): ProxyOriginal<RepoType> => {\n\treturn createProxy(\n\t\tnew Repo(gedcom, id, main, parent)\n\t) as unknown as ProxyOriginal<RepoType>;\n};\n","import type ISour from \"../interfaces/sour\";\nimport type ISourceStructure from \"../structures/source\";\nimport type {SourKey} from \"../types/types\";\n\nimport { Common, createProxy } from \"./common\";\nimport type { ProxyOriginal } from \"./common\";\nimport type {GedComType} from \"./gedcom\";\n\nexport class Sour extends Common<string, SourKey> implements ISour {}\n\nexport type SourType = Sour & ISourceStructure;\nexport const createSour = (\n\tgedcom: GedComType,\n\tid?: SourKey,\n\tmain?: Common,\n\tparent?: Common\n): ProxyOriginal<SourType> => {\n\treturn createProxy(\n\t\tnew Sour(gedcom, id, main, parent)\n\t) as unknown as ProxyOriginal<SourType>;\n};\n","import type ISubm from \"../interfaces/subm\";\nimport type {SubmKey} from \"../types/types\";\n\nimport { Common, createProxy } from \"./common\";\nimport type { ProxyOriginal } from \"./common\";\nimport type {GedComType} from \"./gedcom\";\n\nexport class Subm extends Common<string, SubmKey> implements ISubm {}\n\nexport type SubmType = Subm & ISubm;\nexport const createSubm = (\n\tgedcom: GedComType,\n\tid?: SubmKey,\n\tmain?: Common,\n\tparent?: Common\n): ProxyOriginal<SubmType> => {\n\treturn createProxy(\n\t\tnew Subm(gedcom, id, main, parent)\n\t) as unknown as ProxyOriginal<SubmType>;\n};\n","import { createCommon } from \"../classes/common\";\nimport type { Common } from \"../classes/common\";\nimport { createCommonDate } from \"../classes/date\";\nimport { createFam } from \"../classes/fam\";\nimport { GedCom } from \"../classes/gedcom\";\nimport type { GedComType } from \"../classes/gedcom\";\nimport { createIndi, Indi } from \"../classes/indi\";\nimport { createCommonName } from \"../classes/name\";\nimport { createCommonNote } from \"../classes/note\";\nimport { createObje } from \"../classes/obje\";\nimport { createRepo } from \"../classes/repo\";\nimport { createSour } from \"../classes/sour\";\nimport { createSubm } from \"../classes/subm\";\nimport type {\n\tMultiTag,\n\tIdType,\n\tConvertType,\n\tRepoKey,\n\tSubmKey,\n\tSourKey,\n\tObjeKey,\n\tIndiKey,\n\tFamKey,\n} from \"../types/types\";\n\nexport const create = (\n\tgedcom: GedComType,\n\ttype: MultiTag,\n\tid?: string,\n\tnodes?: {\n\t\tmainNode?: Common;\n\t\tcurNode?: Common;\n\t\tprevNode?: Common;\n\t}\n) => {\n\tlet mainNode = nodes?.mainNode;\n\tconst curNode = nodes?.curNode;\n\tlet prevNode = nodes?.prevNode;\n\tif (id) {\n\t\tconst convertType = type as ConvertType;\n\t\tif (convertType === \"REPO\") {\n\t\t\tprevNode = createRepo(gedcom, id as RepoKey);\n\t\t} else if (convertType === \"SUBM\") {\n\t\t\tprevNode = createSubm(gedcom, id as SubmKey);\n\t\t} else if (convertType === \"SOUR\") {\n\t\t\tprevNode = createSour(gedcom, id as SourKey);\n\t\t} else if (convertType === \"OBJE\" && curNode instanceof GedCom) {\n\t\t\tprevNode = createObje(gedcom, id as ObjeKey);\n\t\t} else if (convertType === \"INDI\") {\n\t\t\tprevNode = createIndi(gedcom, id as IndiKey);\n\t\t} else if (convertType === \"_INDI\") {\n\t\t\tprevNode = createIndi(gedcom, id as IndiKey);\n\t\t} else if (convertType === \"FAM\") {\n\t\t\tprevNode = createFam(gedcom, id as FamKey);\n\t\t} else {\n\t\t\tprevNode = createCommon(gedcom, id as IdType);\n\t\t}\n\t\tmainNode = prevNode;\n\t} else {\n\t\tif (type === \"REPO\") {\n\t\t\tprevNode = createRepo(gedcom, undefined, mainNode, curNode);\n\t\t} else if (type === \"SUBM\") {\n\t\t\tprevNode = createSubm(gedcom, undefined, mainNode, curNode);\n\t\t} else if (type === \"SOUR\") {\n\t\t\tprevNode = createSour(gedcom, undefined, mainNode, curNode);\n\t\t} else if (type === \"OBJE\") {\n\t\t\tprevNode = createObje(gedcom, undefined, mainNode, curNode);\n\t\t} else if (type === \"DATE\") {\n\t\t\tprevNode = createCommonDate(gedcom, undefined, mainNode, curNode);\n\t\t} else if (type === \"NOTE\") {\n\t\t\tprevNode = createCommonNote(gedcom, undefined, mainNode, curNode);\n\t\t} else if (type === \"NAME\" && mainNode instanceof Indi) {\n\t\t\tprevNode = createCommonName(gedcom, undefined, mainNode, curNode);\n\t\t} else {\n\t\t\tprevNode = createCommon(gedcom, undefined, mainNode, curNode);\n\t\t}\n\t}\n\n\tprevNode.type = type;\n\n\treturn { prevNode, curNode, mainNode };\n};\n","export const getRawSize = (raw?: string) => {\n\treturn `${raw || \"\"}`?.length ?? 0;\n};\n","import type {ObjeKey} from \"../types/types\";\n\nimport { List } from \"./list\";\nimport type {ObjeType} from \"./obje\";\n\nexport class Objects extends List<ObjeKey, ObjeType> {\n\tcopy() {\n\t\tconst newList = new Objects();\n\n\t\tthis.entries().forEach(([key, value]) => {\n\t\t\tnewList.item(key as ObjeKey, value as ObjeType);\n\t\t});\n\n\t\treturn newList;\n\t}\n\n\texcept(item: ObjeType) {\n\t\treturn this.copy().delete(item);\n\t}\n}\n","import type {RepoKey} from \"../types/types\";\n\nimport { List } from \"./list\";\nimport type {RepoType} from \"./repo\";\n\nexport class Repositories extends List<RepoKey, RepoType> {\n\tcopy() {\n\t\tconst newList = new Repositories();\n\n\t\tthis.entries().forEach(([key, value]) => {\n\t\t\tnewList.item(key as RepoKey, value as RepoType);\n\t\t});\n\n\t\treturn newList;\n\t}\n\n\texcept(item: RepoType) {\n\t\treturn this.copy().delete(item);\n\t}\n}\n","import type {SourKey} from \"../types/types\";\n\nimport { List } from \"./list\";\nimport type {SourType} from \"./sour\";\n\nexport class Sources extends List<SourKey, SourType> {\n\tcopy() {\n\t\tconst newList = new Sources();\n\n\t\tthis.entries().forEach(([key, value]) => {\n\t\t\tnewList.item(key as SourKey, value as SourType);\n\t\t});\n\n\t\treturn newList;\n\t}\n\n\texcept(item: SourType) {\n\t\treturn this.copy().delete(item);\n\t}\n}\n","import type {SubmKey} from \"../types/types\";\n\nimport { List } from \"./list\";\nimport type {SubmType} from \"./subm\";\n\nexport class Submitters extends List<SubmKey, SubmType> {\n\tcopy() {\n\t\tconst newList = new Submitters();\n\n\t\tthis.entries().forEach(([key, value]) => {\n\t\t\tnewList.item(key as SubmKey, value as SubmType);\n\t\t});\n\n\t\treturn newList;\n\t}\n\n\texcept(item: SubmType) {\n\t\treturn this.copy().delete(item);\n\t}\n}\n","import { Common, getListTag, isId } from \"../classes/common\";\nimport { Families } from \"../classes/fams\";\nimport { createGedCom } from \"../classes/gedcom\";\nimport { Indi } from \"../classes/indi\";\nimport type { IndiType } from \"../classes/indi\";\nimport { Individuals } from \"../classes/indis\";\nimport { List } from \"../classes/list\";\nimport { Objects } from \"../classes/objes\";\nimport { Repositories } from \"../classes/repos\";\nimport { Sources } from \"../classes/sours\";\nimport { Submitters } from \"../classes/subms\";\nimport {\n\tLINE_REG,\n\tMAX_FILE_SIZE_TO_SYNC,\n\tREF_LINE_REG,\n} from \"../constants/constants\";\nimport type { Settings } from \"../types/settings\";\nimport type { ConvertType, IdType, MultiTag, ListTag } from \"../types/types\";\n\nimport { create } from \"./common-creator\";\nimport { isDevelopment } from \"./get-product-details\";\nimport { getRawSize } from \"./get-raw-size\";\n\nconst isDev = isDevelopment();\n\n// let lastTime: number | undefined;\n// interface Props {\n// \tindex:\n// \t\t| number\n// \t\t| `${number}.${number}`\n// \t\t| `${number}.${number}.${number}`\n// \t\t| `${number}.${number}.${number}.${number}`;\n// \tlabel?: string;\n// \tlastTime?: number;\n// }\n// const printTime = (\n// \t{\n// \t\tindex,\n// \t\tlabel = \"RunTimeTest\",\n// \t\tlastTime: lastTimeProp,\n// \t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n// \t}: Props,\n// \t...args: any[]\n// ) => {\n// \t// if (!isDev) {\n// \t// \treturn;\n// \t// }\n// \tif (lastTimeProp !== undefined) {\n// \t\tlastTime = lastTimeProp;\n// \t}\n// \tconst date = Date.now();\n// \tconst diff = lastTime === undefined ? \"Not provided\" : date - lastTime;\n// \tconst func = (\n// \t\tdiff === \"Not provided\" || diff <= 150\n// \t\t\t? console.log\n// \t\t\t: diff > 500\n// \t\t\t\t? console.error\n// \t\t\t\t: console.warn\n// \t).bind(console);\n// \tfunc(\n// \t\tlabel,\n// \t\t{\n// \t\t\tindex,\n// \t\t\tdate,\n// \t\t\tdiff,\n// \t\t},\n// \t\t...args\n// \t);\n// \tlastTime = date;\n// };\n\nconst GedcomTree = {\n\tparse: function (content: string, options?: { settings?: Settings }) {\n\t\treturn this.parseHierarchy(content, options);\n\t},\n\tparseHierarchy: function (\n\t\tcontent: string,\n\t\toptions?: { settings?: Settings }\n\t) {\n\t\t// printTime{ index: 0, label: \"[Debug]\", lastTime: Date.now() });\n\t\tconst { settings } = options ?? {};\n\t\tconst { linkedPersons = \"skip\", linkingKey } = settings ?? {};\n\n\t\tconst gedcom = createGedCom();\n\t\tgedcom.removeValue();\n\t\tconst reg = LINE_REG;\n\t\tlet key: string | undefined;\n\t\tlet type: MultiTag | ConvertType;\n\t\tlet idCheck: string;\n\t\tlet value: string | undefined;\n\t\tlet indent: number | undefined = 0;\n\t\tlet prevIndent = 0;\n\t\tlet curNode: Common = gedcom as Common;\n\t\tlet prevNode: Common;\n\t\tlet mainNode: Common | undefined;\n\t\tconst curPar: Array<Common> = [];\n\n\t\t// printTime{ index: 1, label: \"[Debug]\" });\n\t\tlet prevLineIndent = 0;\n\t\tlet prevRefLines: string[] | undefined;\n\t\tlet prevLines: string[] | undefined;\n\n\t\tconst refMatch = content.match(REF_LINE_REG);\n\t\t// printTime{ index: 2, label: \"[Debug]\" });\n\n\t\tconst refs =\n\t\t\trefMatch && Array.isArray(refMatch)\n\t\t\t\t? refMatch.reduce<Record<string, ListTag>>((acc, curr) => {\n\t\t\t\t\t\tconst [_refIndent, refId, refType] = curr.split(\" \");\n\t\t\t\t\t\tif (refId && refType) {\n\t\t\t\t\t\t\tacc[refId] = refType.toUpperCase() as ListTag;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn acc;\n\t\t\t\t\t}, {})\n\t\t\t\t: {};\n\t\tconst links = new Individuals();\n\t\tconst tags: Common[] = [];\n\t\t// printTime{ index: 3, label: \"[Debug]\" });\n\n\t\tlet lines = `${content.replace(/\\n0 TRLR(\\r?\\n)*$/, \"\")}\\n0 TRLR\\n`\n\t\t\t.split(/\\r?\\n/)\n\t\t\t.reduce<string[]>((acc, line) => {\n\t\t\t\tconst lineMatch = line.match(LINE_REG);\n\n\t\t\t\tif (lineMatch) {\n\t\t\t\t\tconst lineIndent = Number(lineMatch?.groups?.indent ?? 0);\n\t\t\t\t\tconst lineValue = lineMatch?.groups?.value ?? \"\";\n\t\t\t\t\tif (\n\t\t\t\t\t\tlineIndent > 0 &&\n\t\t\t\t\t\tlineIndent > prevLineIndent &&\n\t\t\t\t\t\tlineValue &&\n\t\t\t\t\t\tisId(lineValue)\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst refLines = lineValue\n\t\t\t\t\t\t\t.split(/,\\s*/)\n\t\t\t\t\t\t\t.map((id) => line.replace(lineValue, id));\n\t\t\t\t\t\tif (refLines.length > 1) {\n\t\t\t\t\t\t\tprevLineIndent = lineIndent;\n\t\t\t\t\t\t\tprevRefLines = refLines;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tacc.push(line);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (prevRefLines) {\n\t\t\t\t\t\t\tif (lineIndent > prevLineIndent) {\n\t\t\t\t\t\t\t\tif (!prevLines) {\n\t\t\t\t\t\t\t\t\tprevLines = [];\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tprevLines.push(line);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tprevRefLines.forEach((prevRefLine) => {\n\t\t\t\t\t\t\t\t\tacc.push(prevRefLine, ...(prevLines ?? []));\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tprevLineIndent = 0;\n\t\t\t\t\t\t\t\tprevRefLines = undefined;\n\t\t\t\t\t\t\t\tprevLines = undefined;\n\t\t\t\t\t\t\t\tacc.push(line);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tacc.push(line);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (acc[acc.length - 1] !== undefined) {\n\t\t\t\t\t\tacc[acc.length - 1] = `${acc[acc.length - 1]}${line}`;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn acc;\n\t\t\t}, []);\n\n\t\tlet linesJoined = lines.join(\"\\n\");\n\n\t\t// printTime{ index: 4, label: \"[Debug]\" }, { lines: lines.join(\"\\n\") });\n\t\tif (\n\t\t\t!linesJoined.includes(\"1 _IS_PURGED true\") &&\n\t\t\tgetRawSize(linesJoined) > MAX_FILE_SIZE_TO_SYNC\n\t\t) {\n\t\t\tlinesJoined = linesJoined\n\t\t\t\t.replace(\n\t\t\t\t\t/1\\s(NOTE|OBJE|SOUR)([^\\n]*\\n)([23456789]\\s.+\\n)*/gm,\n\t\t\t\t\t\"\"\n\t\t\t\t)\n\t\t\t\t.replace(/0\\s(@[^@]+@)(\\sSOUR[^\\n]*\\n)([123456789]\\s.+\\n)*/, \"\")\n\t\t\t\t.replace(/0 HEAD(.*)\\n/, \"0 HEAD$1\\n1 _IS_PURGED true\\n\");\n\n\t\t\tlines = linesJoined.split(\"\\n\");\n\n\t\t\t// printTime{ index: 6, label: \"[Debug]\" }, { lines: lines.join(\"\\n\") });\n\t\t}\n\n\t\tlines.forEach((line: string, index: number) => {\n\t\t\tif (line.length === 0) {\n\t\t\t\treturn; // skip empty\n\t\t\t}\n\t\t\tconst match = reg.exec(line);\n\n\t\t\tif (match?.[1] === undefined) {\n\t\t\t\tthrow new Error(`Can't parse line #${index}: ${line}`);\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tindent = Number(match[1]);\n\n\t\t\t\tif (indent > prevIndent + 1) {\n\t\t\t\t\tindent = prevIndent + 1;\n\t\t\t\t}\n\n\t\t\t\tif (match?.[2] !== undefined) {\n\t\t\t\t\tkey = match?.[3] + match?.[2];\n\t\t\t\t} else {\n\t\t\t\t\tkey = match?.[3];\n\t\t\t\t}\n\t\t\t\tvalue = match?.[4];\n\t\t\t\t[type, idCheck] = (key?.split(\"@\") ?? []) as [MultiTag, string];\n\t\t\t\ttype = type?.toUpperCase() as MultiTag;\n\t\t\t\tconst id = idCheck ? `@${idCheck}@` : undefined;\n\n\t\t\t\tif (indent > prevIndent) {\n\t\t\t\t\tcurPar.push(curNode);\n\t\t\t\t\tcurNode = prevNode;\n\t\t\t\t} else if (indent < prevIndent) {\n\t\t\t\t\tfor (let i = 0; i < prevIndent - indent; ++i) {\n\t\t\t\t\t\tcurNode = curPar.pop() as Common;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst newCommon = create(gedcom, type, id, {\n\t\t\t\t\tmainNode,\n\t\t\t\t\tcurNode,\n\t\t\t\t\tprevNode,\n\t\t\t\t});\n\t\t\t\tprevNode = newCommon.prevNode;\n\t\t\t\tmainNode = newCommon.mainNode;\n\n\t\t\t\tif (prevNode instanceof Common) {\n\t\t\t\t\tif (mainNode instanceof Indi && type === \"_MTTAG\") {\n\t\t\t\t\t\ttags.push(prevNode);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (value) {\n\t\t\t\t\t\tprevNode.value = value;\n\n\t\t\t\t\t\tif (isId(value) && refs[value]) {\n\t\t\t\t\t\t\tprevNode.refType = refs[value];\n\t\t\t\t\t\t\tmainNode?.addRef(prevNode);\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tlinkingKey &&\n\t\t\t\t\t\t\t\tlinkingKey === type &&\n\t\t\t\t\t\t\t\tcurNode instanceof Indi &&\n\t\t\t\t\t\t\t\tcurNode?.id\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tlinks.item(curNode.id, curNode);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tprevNode.removeValue();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (type && type !== \"value\") {\n\t\t\t\t\tconst curCommon = curNode as Common;\n\t\t\t\t\tif (id) {\n\t\t\t\t\t\tthis.addToList(id, type, curCommon, prevNode);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurCommon.assign(type as MultiTag, prevNode);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tprevIndent = indent;\n\t\t\t} catch (err) {\n\t\t\t\tthrow new Error(`Can't parse line #${index}: ${line}`, {\n\t\t\t\t\tcause: err,\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\n\t\tif (tags.length) {\n\t\t\tgedcom.tagMembers = tags.reduce<\n\t\t\t\tRecord<string, { tag: Common; indis: Individuals }>\n\t\t\t>((acc, tag) => {\n\t\t\t\tconst tagName = tag?.get(\"NAME\")?.toValue() as\n\t\t\t\t\t| string\n\t\t\t\t\t| undefined;\n\n\t\t\t\tif (\n\t\t\t\t\t!tagName ||\n\t\t\t\t\t!tag?.ref ||\n\t\t\t\t\t!tag?.main ||\n\t\t\t\t\t!(tag.main instanceof Indi)\n\t\t\t\t) {\n\t\t\t\t\treturn acc;\n\t\t\t\t}\n\n\t\t\t\tif (!acc[tagName]) {\n\t\t\t\t\tacc[tagName] = {\n\t\t\t\t\t\ttag: tag.ref,\n\t\t\t\t\t\tindis: new Individuals(),\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tacc[tagName].indis.append(tag.main as IndiType);\n\n\t\t\t\treturn acc;\n\t\t\t}, {});\n\t\t}\n\t\ttry {\n\t\t\tif (\"@@INDI\" in gedcom) {\n\t\t\t\tgedcom[\"@@INDI\"] = gedcom[\"@@INDI\"]?.filter((item) => {\n\t\t\t\t\treturn !item.isIgnoredMember();\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tthrow new Error(`Malformed GEDCOM`, {\n\t\t\t\tcause: err,\n\t\t\t});\n\t\t}\n\n\t\tif (linkingKey) {\n\t\t\tlinks.forEach((linkingIndi, _linkingId) => {\n\t\t\t\tconst linking = linkingIndi as IndiType | undefined;\n\t\t\t\tconst linked = (linking?.get(linkingKey) as Common | undefined)\n\t\t\t\t\t?.ref as IndiType | undefined;\n\n\t\t\t\tif (!linking) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (linkedPersons === \"merge\") {\n\t\t\t\t\tgedcom.mergeIndis(linked, linking);\n\t\t\t\t} else if (linkedPersons === \"clone\") {\n\t\t\t\t\tgedcom.cloneIndis(linked, linking, [\"FAMS\"]);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\n\t\treturn { gedcom, raw: linesJoined };\n\t},\n\taddToList: function (\n\t\tid: string,\n\t\ttype: MultiTag,\n\t\tcommon: Common,\n\t\tprev: Common\n\t) {\n\t\tconst listTag = getListTag(type);\n\t\tlet curValue = common.get<List>(listTag);\n\t\tif (type === \"INDI\" || type === \"_INDI\") {\n\t\t\tcurValue = curValue || new Individuals();\n\t\t} else if (type === \"FAM\") {\n\t\t\tcurValue = curValue || new Families();\n\t\t} else if (type === \"OBJE\") {\n\t\t\tcurValue = curValue || new Objects();\n\t\t} else if (type === \"REPO\") {\n\t\t\tcurValue = curValue || new Repositories();\n\t\t} else if (type === \"SUBM\") {\n\t\t\tcurValue = curValue || new Submitters();\n\t\t} else if (type === \"SOUR\") {\n\t\t\tcurValue = curValue || new Sources();\n\t\t} else {\n\t\t\tcurValue = curValue || new List();\n\t\t}\n\n\t\tcommon.set(listTag, curValue);\n\t\tcurValue.item(id as IdType, prev);\n\t},\n};\n\nif (isDev) {\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t(globalThis as any).GedcomTree = GedcomTree;\n}\n\nexport default GedcomTree;\n"]}