@treeviz/gedcom-parser 1.0.13 → 1.0.15
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.
- package/dist/classes/index.d.ts +2 -28
- package/dist/classes/index.js +6713 -21
- package/dist/classes/index.js.map +1 -0
- package/dist/cli/index.d.ts +0 -2
- package/dist/cli/index.js +7826 -24
- package/dist/cli/index.js.map +1 -0
- package/dist/constants/index.d.ts +49 -4
- package/dist/constants/index.js +5797 -4
- package/dist/constants/index.js.map +1 -0
- package/dist/factories/index.d.ts +202 -13
- package/dist/factories/index.js +5782 -8
- package/dist/factories/index.js.map +1 -0
- package/dist/index-BvW-KWJP.d.ts +1654 -0
- package/dist/index.d.ts +9 -28
- package/dist/index.js +7380 -35
- package/dist/index.js.map +1 -0
- package/dist/interfaces/index.d.ts +2 -12
- package/dist/interfaces/index.js +3 -1
- package/dist/interfaces/index.js.map +1 -0
- package/dist/kinship-translator/index.d.ts +146 -11
- package/dist/kinship-translator/index.js +5727 -9
- package/dist/kinship-translator/index.js.map +1 -0
- package/dist/place-parser-RlXCXZ8F.d.ts +37 -0
- package/dist/structures/index.d.ts +25 -27
- package/dist/structures/index.js +3 -1
- package/dist/structures/index.js.map +1 -0
- package/dist/types/index.d.ts +69 -8
- package/dist/types/index.js +31 -6
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +91 -18
- package/dist/utils/index.js +6953 -17
- package/dist/utils/index.js.map +1 -0
- package/package.json +4 -3
- package/dist/classes/common.d.ts +0 -91
- package/dist/classes/common.d.ts.map +0 -1
- package/dist/classes/common.js +0 -488
- package/dist/classes/date.d.ts +0 -27
- package/dist/classes/date.d.ts.map +0 -1
- package/dist/classes/date.js +0 -178
- package/dist/classes/fam.d.ts +0 -19
- package/dist/classes/fam.d.ts.map +0 -1
- package/dist/classes/fam.js +0 -38
- package/dist/classes/fams.d.ts +0 -16
- package/dist/classes/fams.d.ts.map +0 -1
- package/dist/classes/fams.js +0 -41
- package/dist/classes/gedcom.d.ts +0 -139
- package/dist/classes/gedcom.d.ts.map +0 -1
- package/dist/classes/gedcom.js +0 -910
- package/dist/classes/index.d.ts.map +0 -1
- package/dist/classes/indi.d.ts +0 -323
- package/dist/classes/indi.d.ts.map +0 -1
- package/dist/classes/indi.js +0 -2131
- package/dist/classes/indis.d.ts +0 -55
- package/dist/classes/indis.d.ts.map +0 -1
- package/dist/classes/indis.js +0 -457
- package/dist/classes/list.d.ts +0 -55
- package/dist/classes/list.d.ts.map +0 -1
- package/dist/classes/list.js +0 -440
- package/dist/classes/name.d.ts +0 -20
- package/dist/classes/name.d.ts.map +0 -1
- package/dist/classes/name.js +0 -48
- package/dist/classes/note.d.ts +0 -12
- package/dist/classes/note.d.ts.map +0 -1
- package/dist/classes/note.js +0 -46
- package/dist/classes/obje.d.ts +0 -12
- package/dist/classes/obje.d.ts.map +0 -1
- package/dist/classes/obje.js +0 -81
- package/dist/classes/objes.d.ts +0 -8
- package/dist/classes/objes.d.ts.map +0 -1
- package/dist/classes/objes.js +0 -13
- package/dist/classes/repo.d.ts +0 -11
- package/dist/classes/repo.d.ts.map +0 -1
- package/dist/classes/repo.js +0 -6
- package/dist/classes/repos.d.ts +0 -8
- package/dist/classes/repos.d.ts.map +0 -1
- package/dist/classes/repos.js +0 -13
- package/dist/classes/sour.d.ts +0 -11
- package/dist/classes/sour.d.ts.map +0 -1
- package/dist/classes/sour.js +0 -6
- package/dist/classes/sours.d.ts +0 -8
- package/dist/classes/sours.d.ts.map +0 -1
- package/dist/classes/sours.js +0 -13
- package/dist/classes/subm.d.ts +0 -10
- package/dist/classes/subm.d.ts.map +0 -1
- package/dist/classes/subm.js +0 -6
- package/dist/classes/subms.d.ts +0 -8
- package/dist/classes/subms.d.ts.map +0 -1
- package/dist/classes/subms.js +0 -13
- package/dist/cli/commands/convert.d.ts +0 -3
- package/dist/cli/commands/convert.d.ts.map +0 -1
- package/dist/cli/commands/convert.js +0 -83
- package/dist/cli/commands/extract.d.ts +0 -3
- package/dist/cli/commands/extract.d.ts.map +0 -1
- package/dist/cli/commands/extract.js +0 -85
- package/dist/cli/commands/find.d.ts +0 -3
- package/dist/cli/commands/find.d.ts.map +0 -1
- package/dist/cli/commands/find.js +0 -97
- package/dist/cli/commands/info.d.ts +0 -3
- package/dist/cli/commands/info.d.ts.map +0 -1
- package/dist/cli/commands/info.js +0 -80
- package/dist/cli/commands/merge.d.ts +0 -3
- package/dist/cli/commands/merge.d.ts.map +0 -1
- package/dist/cli/commands/merge.js +0 -61
- package/dist/cli/commands/relatives.d.ts +0 -3
- package/dist/cli/commands/relatives.d.ts.map +0 -1
- package/dist/cli/commands/relatives.js +0 -107
- package/dist/cli/commands/show.d.ts +0 -3
- package/dist/cli/commands/show.d.ts.map +0 -1
- package/dist/cli/commands/show.js +0 -176
- package/dist/cli/commands/stats.d.ts +0 -3
- package/dist/cli/commands/stats.d.ts.map +0 -1
- package/dist/cli/commands/stats.js +0 -59
- package/dist/cli/commands/validate.d.ts +0 -3
- package/dist/cli/commands/validate.d.ts.map +0 -1
- package/dist/cli/commands/validate.js +0 -148
- package/dist/cli/index.d.ts.map +0 -1
- package/dist/cli/utils/formatters.d.ts +0 -69
- package/dist/cli/utils/formatters.d.ts.map +0 -1
- package/dist/cli/utils/formatters.js +0 -125
- package/dist/cli/utils/helpers.d.ts +0 -21
- package/dist/cli/utils/helpers.d.ts.map +0 -1
- package/dist/cli/utils/helpers.js +0 -58
- package/dist/constants/constants.d.ts +0 -14
- package/dist/constants/constants.d.ts.map +0 -1
- package/dist/constants/constants.js +0 -13
- package/dist/constants/filters.d.ts +0 -18
- package/dist/constants/filters.d.ts.map +0 -1
- package/dist/constants/filters.js +0 -44
- package/dist/constants/index.d.ts.map +0 -1
- package/dist/constants/orders.d.ts +0 -17
- package/dist/constants/orders.d.ts.map +0 -1
- package/dist/constants/orders.js +0 -240
- package/dist/factories/cache-factory.d.ts +0 -30
- package/dist/factories/cache-factory.d.ts.map +0 -1
- package/dist/factories/cache-factory.js +0 -43
- package/dist/factories/date-locale-factory.d.ts +0 -30
- package/dist/factories/date-locale-factory.d.ts.map +0 -1
- package/dist/factories/date-locale-factory.js +0 -34
- package/dist/factories/i18n-factory.d.ts +0 -40
- package/dist/factories/i18n-factory.d.ts.map +0 -1
- package/dist/factories/i18n-factory.js +0 -44
- package/dist/factories/index.d.ts.map +0 -1
- package/dist/factories/kinship-factory.d.ts +0 -38
- package/dist/factories/kinship-factory.d.ts.map +0 -1
- package/dist/factories/kinship-factory.js +0 -35
- package/dist/factories/place-parser-provider.d.ts +0 -32
- package/dist/factories/place-parser-provider.d.ts.map +0 -1
- package/dist/factories/place-parser-provider.js +0 -35
- package/dist/factories/place-translator-provider.d.ts +0 -32
- package/dist/factories/place-translator-provider.d.ts.map +0 -1
- package/dist/factories/place-translator-provider.js +0 -35
- package/dist/index.d.ts.map +0 -1
- package/dist/interfaces/common.d.ts +0 -43
- package/dist/interfaces/common.d.ts.map +0 -1
- package/dist/interfaces/common.js +0 -1
- package/dist/interfaces/fam.d.ts +0 -11
- package/dist/interfaces/fam.d.ts.map +0 -1
- package/dist/interfaces/fam.js +0 -1
- package/dist/interfaces/fams.d.ts +0 -9
- package/dist/interfaces/fams.d.ts.map +0 -1
- package/dist/interfaces/fams.js +0 -1
- package/dist/interfaces/gedcom.d.ts +0 -30
- package/dist/interfaces/gedcom.d.ts.map +0 -1
- package/dist/interfaces/gedcom.js +0 -1
- package/dist/interfaces/index.d.ts.map +0 -1
- package/dist/interfaces/indi.d.ts +0 -113
- package/dist/interfaces/indi.d.ts.map +0 -1
- package/dist/interfaces/indi.js +0 -1
- package/dist/interfaces/indis.d.ts +0 -31
- package/dist/interfaces/indis.d.ts.map +0 -1
- package/dist/interfaces/indis.js +0 -1
- package/dist/interfaces/list.d.ts +0 -52
- package/dist/interfaces/list.d.ts.map +0 -1
- package/dist/interfaces/list.js +0 -1
- package/dist/interfaces/obje.d.ts +0 -7
- package/dist/interfaces/obje.d.ts.map +0 -1
- package/dist/interfaces/obje.js +0 -1
- package/dist/interfaces/repo.d.ts +0 -7
- package/dist/interfaces/repo.d.ts.map +0 -1
- package/dist/interfaces/repo.js +0 -1
- package/dist/interfaces/sour.d.ts +0 -7
- package/dist/interfaces/sour.d.ts.map +0 -1
- package/dist/interfaces/sour.js +0 -1
- package/dist/interfaces/subm.d.ts +0 -6
- package/dist/interfaces/subm.d.ts.map +0 -1
- package/dist/interfaces/subm.js +0 -1
- package/dist/kinship-translator/index.d.ts.map +0 -1
- package/dist/kinship-translator/kinship-translator.basic.d.ts +0 -30
- package/dist/kinship-translator/kinship-translator.basic.d.ts.map +0 -1
- package/dist/kinship-translator/kinship-translator.basic.js +0 -74
- package/dist/kinship-translator/kinship-translator.d.ts +0 -26
- package/dist/kinship-translator/kinship-translator.d.ts.map +0 -1
- package/dist/kinship-translator/kinship-translator.de.d.ts +0 -18
- package/dist/kinship-translator/kinship-translator.de.d.ts.map +0 -1
- package/dist/kinship-translator/kinship-translator.de.js +0 -180
- package/dist/kinship-translator/kinship-translator.en.d.ts +0 -18
- package/dist/kinship-translator/kinship-translator.en.d.ts.map +0 -1
- package/dist/kinship-translator/kinship-translator.en.js +0 -182
- package/dist/kinship-translator/kinship-translator.es.d.ts +0 -18
- package/dist/kinship-translator/kinship-translator.es.d.ts.map +0 -1
- package/dist/kinship-translator/kinship-translator.es.js +0 -181
- package/dist/kinship-translator/kinship-translator.fr.d.ts +0 -18
- package/dist/kinship-translator/kinship-translator.fr.d.ts.map +0 -1
- package/dist/kinship-translator/kinship-translator.fr.js +0 -181
- package/dist/kinship-translator/kinship-translator.hu.d.ts +0 -19
- package/dist/kinship-translator/kinship-translator.hu.d.ts.map +0 -1
- package/dist/kinship-translator/kinship-translator.hu.js +0 -226
- package/dist/kinship-translator/kinship-translator.interface.d.ts +0 -19
- package/dist/kinship-translator/kinship-translator.interface.d.ts.map +0 -1
- package/dist/kinship-translator/kinship-translator.interface.js +0 -1
- package/dist/kinship-translator/kinship-translator.js +0 -103
- package/dist/kinship-translator/patterns.de.d.ts +0 -2
- package/dist/kinship-translator/patterns.de.d.ts.map +0 -1
- package/dist/kinship-translator/patterns.de.js +0 -14
- package/dist/kinship-translator/patterns.en.d.ts +0 -2
- package/dist/kinship-translator/patterns.en.d.ts.map +0 -1
- package/dist/kinship-translator/patterns.en.js +0 -14
- package/dist/kinship-translator/patterns.es.d.ts +0 -2
- package/dist/kinship-translator/patterns.es.d.ts.map +0 -1
- package/dist/kinship-translator/patterns.es.js +0 -14
- package/dist/kinship-translator/patterns.fr.d.ts +0 -2
- package/dist/kinship-translator/patterns.fr.d.ts.map +0 -1
- package/dist/kinship-translator/patterns.fr.js +0 -14
- package/dist/kinship-translator/patterns.hu.d.ts +0 -6
- package/dist/kinship-translator/patterns.hu.d.ts.map +0 -1
- package/dist/kinship-translator/patterns.hu.js +0 -97
- package/dist/kinship-translator/translators.d.ts +0 -6
- package/dist/kinship-translator/translators.d.ts.map +0 -1
- package/dist/kinship-translator/translators.js +0 -5
- package/dist/kinship-translator/types.d.ts +0 -9
- package/dist/kinship-translator/types.d.ts.map +0 -1
- package/dist/kinship-translator/types.js +0 -1
- package/dist/structures/address.d.ts +0 -14
- package/dist/structures/address.d.ts.map +0 -1
- package/dist/structures/address.js +0 -1
- package/dist/structures/association.d.ts +0 -13
- package/dist/structures/association.d.ts.map +0 -1
- package/dist/structures/association.js +0 -1
- package/dist/structures/change-date.d.ts +0 -8
- package/dist/structures/change-date.d.ts.map +0 -1
- package/dist/structures/change-date.js +0 -1
- package/dist/structures/creation-date.d.ts +0 -7
- package/dist/structures/creation-date.d.ts.map +0 -1
- package/dist/structures/creation-date.js +0 -1
- package/dist/structures/date.d.ts +0 -9
- package/dist/structures/date.d.ts.map +0 -1
- package/dist/structures/date.js +0 -1
- package/dist/structures/event-detail-structure.d.ts +0 -25
- package/dist/structures/event-detail-structure.d.ts.map +0 -1
- package/dist/structures/event-detail-structure.js +0 -1
- package/dist/structures/family.d.ts +0 -34
- package/dist/structures/family.d.ts.map +0 -1
- package/dist/structures/family.js +0 -1
- package/dist/structures/gedcom.d.ts +0 -59
- package/dist/structures/gedcom.d.ts.map +0 -1
- package/dist/structures/gedcom.js +0 -1
- package/dist/structures/index.d.ts.map +0 -1
- package/dist/structures/individual-event-detail-structure.d.ts +0 -9
- package/dist/structures/individual-event-detail-structure.d.ts.map +0 -1
- package/dist/structures/individual-event-detail-structure.js +0 -1
- package/dist/structures/individual-event-structure.d.ts +0 -83
- package/dist/structures/individual-event-structure.d.ts.map +0 -1
- package/dist/structures/individual-event-structure.js +0 -1
- package/dist/structures/individual.d.ts +0 -40
- package/dist/structures/individual.d.ts.map +0 -1
- package/dist/structures/individual.js +0 -1
- package/dist/structures/lds-ordinance-detail.d.ts +0 -17
- package/dist/structures/lds-ordinance-detail.d.ts.map +0 -1
- package/dist/structures/lds-ordinance-detail.js +0 -1
- package/dist/structures/lds-spouse-sealing.d.ts +0 -7
- package/dist/structures/lds-spouse-sealing.d.ts.map +0 -1
- package/dist/structures/lds-spouse-sealing.js +0 -1
- package/dist/structures/marriage-date.d.ts +0 -11
- package/dist/structures/marriage-date.d.ts.map +0 -1
- package/dist/structures/marriage-date.js +0 -1
- package/dist/structures/multimedia-link.d.ts +0 -16
- package/dist/structures/multimedia-link.d.ts.map +0 -1
- package/dist/structures/multimedia-link.js +0 -1
- package/dist/structures/non-event.d.ts +0 -12
- package/dist/structures/non-event.d.ts.map +0 -1
- package/dist/structures/non-event.js +0 -1
- package/dist/structures/note.d.ts +0 -16
- package/dist/structures/note.d.ts.map +0 -1
- package/dist/structures/note.js +0 -1
- package/dist/structures/personal-name-pieces.d.ts +0 -11
- package/dist/structures/personal-name-pieces.d.ts.map +0 -1
- package/dist/structures/personal-name-pieces.js +0 -1
- package/dist/structures/personal-name.d.ts +0 -16
- package/dist/structures/personal-name.d.ts.map +0 -1
- package/dist/structures/personal-name.js +0 -1
- package/dist/structures/place.d.ts +0 -20
- package/dist/structures/place.d.ts.map +0 -1
- package/dist/structures/place.js +0 -1
- package/dist/structures/repository.d.ts +0 -6
- package/dist/structures/repository.d.ts.map +0 -1
- package/dist/structures/repository.js +0 -1
- package/dist/structures/source-citation.d.ts +0 -27
- package/dist/structures/source-citation.d.ts.map +0 -1
- package/dist/structures/source-citation.js +0 -1
- package/dist/structures/source-repository-citation.d.ts +0 -13
- package/dist/structures/source-repository-citation.d.ts.map +0 -1
- package/dist/structures/source-repository-citation.js +0 -1
- package/dist/structures/source.d.ts +0 -28
- package/dist/structures/source.d.ts.map +0 -1
- package/dist/structures/source.js +0 -1
- package/dist/types/ancestry-media.d.ts +0 -65
- package/dist/types/ancestry-media.d.ts.map +0 -1
- package/dist/types/ancestry-media.js +0 -1
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/settings.d.ts +0 -12
- package/dist/types/settings.d.ts.map +0 -1
- package/dist/types/settings.js +0 -1
- package/dist/types/types.d.ts +0 -225
- package/dist/types/types.d.ts.map +0 -1
- package/dist/types/types.js +0 -26
- package/dist/utils/cache.d.ts +0 -22
- package/dist/utils/cache.d.ts.map +0 -1
- package/dist/utils/cache.js +0 -57
- package/dist/utils/common-creator.d.ts +0 -13
- package/dist/utils/common-creator.d.ts.map +0 -1
- package/dist/utils/common-creator.js +0 -72
- package/dist/utils/date-formatter.d.ts +0 -35
- package/dist/utils/date-formatter.d.ts.map +0 -1
- package/dist/utils/date-formatter.js +0 -207
- package/dist/utils/get-all-prop.d.ts +0 -4
- package/dist/utils/get-all-prop.d.ts.map +0 -1
- package/dist/utils/get-all-prop.js +0 -5
- package/dist/utils/get-family-with.d.ts +0 -5
- package/dist/utils/get-family-with.d.ts.map +0 -1
- package/dist/utils/get-family-with.js +0 -11
- package/dist/utils/get-places.d.ts +0 -21
- package/dist/utils/get-places.d.ts.map +0 -1
- package/dist/utils/get-places.js +0 -77
- package/dist/utils/get-product-details.d.ts +0 -4
- package/dist/utils/get-product-details.d.ts.map +0 -1
- package/dist/utils/get-product-details.js +0 -6
- package/dist/utils/get-raw-size.d.ts +0 -2
- package/dist/utils/get-raw-size.d.ts.map +0 -1
- package/dist/utils/get-raw-size.js +0 -3
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/logger.d.ts +0 -3
- package/dist/utils/logger.d.ts.map +0 -1
- package/dist/utils/logger.js +0 -11
- package/dist/utils/name-formatter.d.ts +0 -10
- package/dist/utils/name-formatter.d.ts.map +0 -1
- package/dist/utils/name-formatter.js +0 -45
- package/dist/utils/nested-group.d.ts +0 -4
- package/dist/utils/nested-group.d.ts.map +0 -1
- package/dist/utils/nested-group.js +0 -34
- package/dist/utils/ordinalize.d.ts +0 -3
- package/dist/utils/ordinalize.d.ts.map +0 -1
- package/dist/utils/ordinalize.js +0 -104
- package/dist/utils/parser.d.ts +0 -17
- package/dist/utils/parser.d.ts.map +0 -1
- package/dist/utils/parser.js +0 -321
- package/dist/utils/place-parser.d.ts +0 -16
- package/dist/utils/place-parser.d.ts.map +0 -1
- package/dist/utils/place-parser.js +0 -46
- package/dist/utils/place-translator.d.ts +0 -6
- package/dist/utils/place-translator.d.ts.map +0 -1
- package/dist/utils/place-translator.js +0 -8
- package/dist/utils/place-types.d.ts +0 -27
- package/dist/utils/place-types.d.ts.map +0 -1
- package/dist/utils/place-types.js +0 -14
- package/dist/utils/range.d.ts +0 -19
- package/dist/utils/range.d.ts.map +0 -1
- package/dist/utils/range.js +0 -265
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/constants/filters.ts","../../src/factories/cache-factory.ts","../../src/factories/date-locale-factory.ts","../../src/factories/i18n-factory.ts","../../src/kinship-translator/translators.ts","../../src/constants/constants.ts","../../src/classes/list.ts","../../src/classes/common.ts","../../src/classes/name.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/get-all-prop.ts","../../src/utils/date-formatter.ts","../../src/utils/range.ts","../../src/classes/date.ts","../../src/utils/get-family-with.ts","../../src/constants/orders.ts","../../src/utils/cache.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/indi.ts","../../package.json","../../src/utils/get-product-details.ts","../../src/classes/gedcom.ts","../../src/classes/note.ts","../../src/classes/obje.ts","../../src/classes/objes.ts","../../src/classes/repo.ts","../../src/classes/repos.ts","../../src/classes/sour.ts","../../src/classes/sours.ts","../../src/classes/subm.ts","../../src/classes/subms.ts"],"names":["set","get","value","unset","path","format","fam","s","e","key","Existed","CustomTags","id","index","KinshipTranslatorClass"],"mappings":"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","file":"index.js","sourcesContent":["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 { 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 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","/**\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 { 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 { 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","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","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","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 { 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","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 * 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","{\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 {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 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 {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 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 {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 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 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"]}
|