@treeviz/gedcom-parser 2.0.8 → 2.0.10

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.
Files changed (37) hide show
  1. package/dist/classes/index.js +627 -159
  2. package/dist/classes/indi.d.ts.map +1 -1
  3. package/dist/cli/index.js +627 -159
  4. package/dist/constants/index.js +626 -158
  5. package/dist/factories/index.js +626 -158
  6. package/dist/index.js +628 -160
  7. package/dist/kinship-translator/index.d.ts +1 -0
  8. package/dist/kinship-translator/index.d.ts.map +1 -1
  9. package/dist/kinship-translator/index.js +627 -159
  10. package/dist/kinship-translator/kinship-translator.basic.d.ts +11 -0
  11. package/dist/kinship-translator/kinship-translator.basic.d.ts.map +1 -1
  12. package/dist/kinship-translator/kinship-translator.d.ts.map +1 -1
  13. package/dist/kinship-translator/kinship-translator.de.d.ts +2 -1
  14. package/dist/kinship-translator/kinship-translator.de.d.ts.map +1 -1
  15. package/dist/kinship-translator/kinship-translator.en.d.ts +2 -1
  16. package/dist/kinship-translator/kinship-translator.en.d.ts.map +1 -1
  17. package/dist/kinship-translator/kinship-translator.es.d.ts +2 -1
  18. package/dist/kinship-translator/kinship-translator.es.d.ts.map +1 -1
  19. package/dist/kinship-translator/kinship-translator.fr.d.ts +2 -1
  20. package/dist/kinship-translator/kinship-translator.fr.d.ts.map +1 -1
  21. package/dist/kinship-translator/kinship-translator.hu.d.ts +8 -1
  22. package/dist/kinship-translator/kinship-translator.hu.d.ts.map +1 -1
  23. package/dist/kinship-translator/kinship-translator.interface.d.ts +1 -0
  24. package/dist/kinship-translator/kinship-translator.interface.d.ts.map +1 -1
  25. package/dist/kinship-translator/kinship-translator.ru.d.ts +18 -0
  26. package/dist/kinship-translator/kinship-translator.ru.d.ts.map +1 -0
  27. package/dist/kinship-translator/patterns.es.d.ts.map +1 -1
  28. package/dist/kinship-translator/patterns.ru.d.ts +2 -0
  29. package/dist/kinship-translator/patterns.ru.d.ts.map +1 -0
  30. package/dist/kinship-translator/translators.d.ts +1 -0
  31. package/dist/kinship-translator/translators.d.ts.map +1 -1
  32. package/dist/kinship-translator/types.d.ts +1 -1
  33. package/dist/kinship-translator/types.d.ts.map +1 -1
  34. package/dist/utils/cache.d.ts +14 -1
  35. package/dist/utils/cache.d.ts.map +1 -1
  36. package/dist/utils/index.js +628 -160
  37. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1119,7 +1119,8 @@ __export(translators_exports, {
1119
1119
  en: () => KinshipTranslatorEn,
1120
1120
  es: () => KinshipTranslatorEs,
1121
1121
  fr: () => KinshipTranslatorFr,
1122
- hu: () => KinshipTranslatorHU
1122
+ hu: () => KinshipTranslatorHU,
1123
+ ru: () => KinshipTranslatorRu
1123
1124
  });
1124
1125
 
1125
1126
  // src/types/types.ts
@@ -1332,6 +1333,135 @@ var profilePictureCache = (gedcom, key, value) => {
1332
1333
  const cached = caches.profilePictureCache?.[fullKey];
1333
1334
  return cached;
1334
1335
  };
1336
+ var isNonBiologicalPath = (path) => path.some(
1337
+ (item) => item.relation && item.relation !== "biological" /* BIOLOGICAL */
1338
+ );
1339
+ var invertHop = (kinship) => {
1340
+ if (kinship === "parent") {
1341
+ return "child";
1342
+ }
1343
+ if (kinship === "child") {
1344
+ return "parent";
1345
+ }
1346
+ return kinship;
1347
+ };
1348
+ var hopRelation = (from, toIndi, kinship, inherited) => {
1349
+ if (kinship === "parent" || kinship === "child") {
1350
+ const parent = kinship === "parent" ? toIndi : from.indi;
1351
+ const child = kinship === "parent" ? from.indi : toIndi;
1352
+ const currentRelation = child.getParentType(parent);
1353
+ if (currentRelation && currentRelation !== "biological" /* BIOLOGICAL */) {
1354
+ return currentRelation;
1355
+ }
1356
+ }
1357
+ if (inherited && inherited !== "biological" /* BIOLOGICAL */) {
1358
+ return inherited;
1359
+ }
1360
+ return void 0;
1361
+ };
1362
+ var rebuildPathFromHops = (hops, skipRelation = false) => {
1363
+ if (hops.length === 0) {
1364
+ return [];
1365
+ }
1366
+ const path = [
1367
+ {
1368
+ indi: hops[0].indi,
1369
+ kinship: "self",
1370
+ level: 0,
1371
+ levelUp: 0,
1372
+ levelDown: 0,
1373
+ degree: 0
1374
+ }
1375
+ ];
1376
+ for (let i = 1; i < hops.length; i++) {
1377
+ const prev = path[i - 1];
1378
+ const { indi, kinship } = hops[i];
1379
+ const relation = skipRelation ? void 0 : hopRelation(prev, indi, kinship, prev.relation);
1380
+ if (kinship === "parent") {
1381
+ path.push({
1382
+ indi,
1383
+ kinship,
1384
+ relation,
1385
+ level: prev.level + 1,
1386
+ levelUp: prev.levelUp + 1,
1387
+ levelDown: prev.levelDown,
1388
+ degree: prev.degree
1389
+ });
1390
+ continue;
1391
+ }
1392
+ if (kinship === "child") {
1393
+ path.push({
1394
+ indi,
1395
+ kinship,
1396
+ relation,
1397
+ level: prev.level - 1,
1398
+ levelUp: prev.levelUp,
1399
+ levelDown: prev.levelDown + 1,
1400
+ degree: prev.levelUp ? prev.level > 0 ? prev.levelUp - prev.level + 1 : prev.levelDown - Math.abs(prev.level) : 0
1401
+ });
1402
+ continue;
1403
+ }
1404
+ path.push({
1405
+ indi,
1406
+ kinship,
1407
+ relation,
1408
+ level: prev.level,
1409
+ levelUp: prev.levelUp,
1410
+ levelDown: prev.levelDown,
1411
+ degree: prev.degree
1412
+ });
1413
+ }
1414
+ return path;
1415
+ };
1416
+ var storePathIfBetter = (gedcom, fromId, toId, path) => {
1417
+ const key = `${fromId}|${toId}`;
1418
+ const existing = pathCache(gedcom, key);
1419
+ if (existing && (!isNonBiologicalPath(existing) || isNonBiologicalPath(path))) {
1420
+ return;
1421
+ }
1422
+ pathCache(gedcom, key, path);
1423
+ };
1424
+ var cacheDiscoveredPath = (gedcom, path) => {
1425
+ const n = path.length;
1426
+ if (n < 2) {
1427
+ return;
1428
+ }
1429
+ for (let i = 0; i < n; i++) {
1430
+ const fromId = path[i].indi.id;
1431
+ if (!fromId) {
1432
+ continue;
1433
+ }
1434
+ for (let j = i + 1; j < n; j++) {
1435
+ const toId = path[j].indi.id;
1436
+ if (!toId) {
1437
+ continue;
1438
+ }
1439
+ const isOriginalPair = i === 0 && j === n - 1;
1440
+ const isDirectHop = j === i + 1;
1441
+ const slice = path.slice(i, j + 1);
1442
+ const sliceMixed = isNonBiologicalPath(slice);
1443
+ if (!isOriginalPair && !isDirectHop && sliceMixed) {
1444
+ continue;
1445
+ }
1446
+ const forward = i === 0 ? slice : rebuildPathFromHops(slice, !sliceMixed);
1447
+ const reverseHops = [
1448
+ {
1449
+ indi: slice[slice.length - 1].indi,
1450
+ kinship: "self"
1451
+ }
1452
+ ];
1453
+ for (let k = slice.length - 2; k >= 0; k--) {
1454
+ reverseHops.push({
1455
+ indi: slice[k].indi,
1456
+ kinship: invertHop(slice[k + 1].kinship)
1457
+ });
1458
+ }
1459
+ const reverse = rebuildPathFromHops(reverseHops, !sliceMixed);
1460
+ storePathIfBetter(gedcom, fromId, toId, forward);
1461
+ storePathIfBetter(gedcom, toId, fromId, reverse);
1462
+ }
1463
+ }
1464
+ };
1335
1465
 
1336
1466
  // src/utils/get-all-prop.ts
1337
1467
  var getAllProp = (indi, prop) => {
@@ -2997,7 +3127,6 @@ var Indi = class extends Common {
2997
3127
  if (cache) {
2998
3128
  return cache;
2999
3129
  }
3000
- const visited = new Individuals().append(this);
3001
3130
  const mainItem = {
3002
3131
  indi: this,
3003
3132
  level: 0,
@@ -3006,129 +3135,155 @@ var Indi = class extends Common {
3006
3135
  degree: 0,
3007
3136
  kinship: "self"
3008
3137
  };
3009
- const path = [mainItem];
3138
+ const mainPath = [mainItem];
3010
3139
  if (this.id === usedIndi.id) {
3011
- return path;
3140
+ return mainPath;
3012
3141
  }
3013
- const queue = [
3014
- {
3015
- ...mainItem,
3016
- path
3017
- }
3018
- ];
3019
- let helper = 0;
3020
- while (queue.length > 0) {
3021
- if (helper++ > 1e6) {
3022
- break;
3023
- }
3024
- const {
3025
- indi,
3026
- path: path2,
3027
- kinship,
3028
- relation,
3029
- level,
3030
- levelUp,
3031
- levelDown,
3032
- degree,
3033
- breakOnNext,
3034
- breakAfterNext,
3035
- inLaw
3036
- } = queue.shift();
3037
- if (usedIndi.id === indi.id) {
3038
- if (breakOnNext) {
3039
- return void 0;
3142
+ const bfs = (biologicalOnly) => {
3143
+ const visited = new Individuals().append(this);
3144
+ const queue = [
3145
+ {
3146
+ ...mainItem,
3147
+ path: mainPath
3040
3148
  }
3041
- pathCache(this._gedcom, cacheKey, path2);
3042
- return path2;
3043
- }
3044
- visited.append(indi);
3045
- const additional = {};
3046
- if (breakOnNext || breakAfterNext) {
3047
- additional.breakOnNext = breakOnNext || breakAfterNext;
3048
- }
3049
- if (inLaw) {
3050
- additional.inLaw = inLaw;
3051
- }
3052
- if (kinship === "spouse" && breakAfterSpouse) {
3053
- if (path2.length <= 2) {
3054
- additional.inLaw = true;
3055
- } else {
3056
- additional.breakOnNext = true;
3149
+ ];
3150
+ let helper = 0;
3151
+ while (queue.length > 0) {
3152
+ if (helper++ > 1e6) {
3153
+ break;
3057
3154
  }
3058
- }
3059
- if (kinship !== "child" || !breakAfterSpouse) {
3060
- indi.getBiologicalFathers().copy().merge(indi.getBiologicalMothers()).merge(indi.getFathers().copy().merge(indi.getMothers())).forEach((relative) => {
3155
+ const {
3156
+ indi,
3157
+ path,
3158
+ kinship,
3159
+ relation,
3160
+ level,
3161
+ levelUp,
3162
+ levelDown,
3163
+ degree,
3164
+ breakOnNext,
3165
+ breakAfterNext,
3166
+ inLaw
3167
+ } = queue.shift();
3168
+ if (usedIndi.id === indi.id) {
3169
+ if (breakOnNext) {
3170
+ return void 0;
3171
+ }
3172
+ return path;
3173
+ }
3174
+ visited.append(indi);
3175
+ const additional = {};
3176
+ if (breakOnNext || breakAfterNext) {
3177
+ additional.breakOnNext = breakOnNext || breakAfterNext;
3178
+ }
3179
+ if (inLaw) {
3180
+ additional.inLaw = inLaw;
3181
+ }
3182
+ if (!biologicalOnly && kinship === "spouse" && breakAfterSpouse) {
3183
+ if (path.length <= 2) {
3184
+ additional.inLaw = true;
3185
+ } else {
3186
+ additional.breakOnNext = true;
3187
+ }
3188
+ }
3189
+ if (kinship !== "child" || !breakAfterSpouse) {
3190
+ indi.getBiologicalFathers().copy().merge(indi.getBiologicalMothers()).merge(indi.getFathers().copy().merge(indi.getMothers())).forEach((relative) => {
3191
+ if (!visited.has(relative)) {
3192
+ const currentRelation = indi.getParentType(relative);
3193
+ const isNonBiological = !!currentRelation && currentRelation !== "biological" /* BIOLOGICAL */;
3194
+ if (biologicalOnly && isNonBiological) {
3195
+ return;
3196
+ }
3197
+ if (!biologicalOnly && breakAfterNonBiological && isNonBiological) {
3198
+ additional.breakAfterNext = true;
3199
+ }
3200
+ const newItem = {
3201
+ indi: relative,
3202
+ kinship: "parent",
3203
+ relation: isNonBiological ? currentRelation : relation,
3204
+ level: level + 1,
3205
+ levelUp: levelUp + 1,
3206
+ levelDown,
3207
+ degree,
3208
+ ...additional
3209
+ };
3210
+ queue.push({
3211
+ ...newItem,
3212
+ path: [...path, newItem]
3213
+ });
3214
+ }
3215
+ });
3216
+ }
3217
+ indi.getChildren().forEach((relative) => {
3061
3218
  if (!visited.has(relative)) {
3062
- const currentRelation = indi.getParentType(relative);
3063
- if (breakAfterNonBiological && currentRelation !== "biological" /* BIOLOGICAL */) {
3219
+ const currentRelation = relative.getParentType(indi);
3220
+ const isNonBiological = !!currentRelation && currentRelation !== "biological" /* BIOLOGICAL */;
3221
+ if (biologicalOnly && isNonBiological) {
3222
+ return;
3223
+ }
3224
+ if (!biologicalOnly && breakAfterNonBiological && isNonBiological) {
3064
3225
  additional.breakAfterNext = true;
3065
3226
  }
3066
3227
  const newItem = {
3067
3228
  indi: relative,
3068
- kinship: "parent",
3069
- relation: currentRelation && currentRelation !== "biological" /* BIOLOGICAL */ ? currentRelation : relation,
3070
- level: level + 1,
3071
- levelUp: levelUp + 1,
3072
- levelDown,
3073
- degree,
3229
+ kinship: "child",
3230
+ relation: isNonBiological ? currentRelation : relation,
3231
+ level: level - 1,
3232
+ levelUp,
3233
+ levelDown: levelDown + 1,
3234
+ degree: levelUp ? level > 0 ? levelUp - level + 1 : levelDown - Math.abs(level) : 0,
3074
3235
  ...additional
3075
3236
  };
3076
3237
  queue.push({
3077
3238
  ...newItem,
3078
- path: [...path2, newItem]
3239
+ path: [...path, newItem]
3079
3240
  });
3080
3241
  }
3081
3242
  });
3082
- }
3083
- indi.getChildren().forEach((relative) => {
3084
- if (!visited.has(relative)) {
3085
- const currentRelation = relative.getParentType(indi);
3086
- if (breakAfterNonBiological && currentRelation !== "biological" /* BIOLOGICAL */) {
3087
- additional.breakAfterNext = true;
3088
- }
3089
- const newItem = {
3090
- indi: relative,
3091
- kinship: "child",
3092
- relation: currentRelation && currentRelation !== "biological" /* BIOLOGICAL */ ? currentRelation : relation,
3093
- level: level - 1,
3094
- levelUp,
3095
- levelDown: levelDown + 1,
3096
- degree: levelUp ? level > 0 ? levelUp - level + 1 : levelDown - Math.abs(level) : 0,
3097
- ...additional
3098
- };
3099
- queue.push({
3100
- ...newItem,
3101
- path: [...path2, newItem]
3102
- });
3243
+ if (biologicalOnly) {
3244
+ continue;
3103
3245
  }
3104
- });
3105
- indi.getCoParents().forEach((relative) => {
3106
- if (!visited.has(relative)) {
3107
- const currentAddition = {};
3108
- if (relation && relation !== "biological" /* BIOLOGICAL */) {
3109
- currentAddition.relation = relation;
3110
- }
3111
- if (inLaw) {
3112
- currentAddition.breakOnNext = true;
3246
+ indi.getCoParents().forEach((relative) => {
3247
+ if (!visited.has(relative)) {
3248
+ const currentAddition = {};
3249
+ if (relation && relation !== "biological" /* BIOLOGICAL */) {
3250
+ currentAddition.relation = relation;
3251
+ }
3252
+ if (inLaw) {
3253
+ currentAddition.breakOnNext = true;
3254
+ }
3255
+ const newItem = {
3256
+ indi: relative,
3257
+ kinship: "spouse",
3258
+ level,
3259
+ levelUp,
3260
+ levelDown,
3261
+ degree,
3262
+ ...additional,
3263
+ ...currentAddition
3264
+ };
3265
+ queue.push({
3266
+ ...newItem,
3267
+ path: [...path, newItem]
3268
+ });
3113
3269
  }
3114
- const newItem = {
3115
- indi: relative,
3116
- kinship: "spouse",
3117
- level,
3118
- levelUp,
3119
- levelDown,
3120
- degree,
3121
- ...additional,
3122
- ...currentAddition
3123
- };
3124
- queue.push({
3125
- ...newItem,
3126
- path: [...path2, newItem]
3127
- });
3128
- }
3129
- });
3270
+ });
3271
+ }
3272
+ return void 0;
3273
+ };
3274
+ const foundPath = bfs(false);
3275
+ const lastItem = foundPath?.[foundPath.length - 1];
3276
+ if (lastItem?.relation && lastItem.relation !== "biological" /* BIOLOGICAL */) {
3277
+ const biologicalPath = bfs(true);
3278
+ if (biologicalPath) {
3279
+ cacheDiscoveredPath(this._gedcom, biologicalPath);
3280
+ return biologicalPath;
3281
+ }
3130
3282
  }
3131
- return void 0;
3283
+ if (foundPath) {
3284
+ cacheDiscoveredPath(this._gedcom, foundPath);
3285
+ }
3286
+ return foundPath;
3132
3287
  }
3133
3288
  kinship(other, showMainPerson, lang = "en", entirePath, displayName = "givenname") {
3134
3289
  const KinshipTranslatorClass2 = getKinshipTranslatorClass();
@@ -4107,6 +4262,44 @@ var KinshipTranslatorBasic = class {
4107
4262
  }
4108
4263
  return this.pathN?.indi;
4109
4264
  }
4265
+ /**
4266
+ * True when the path goes through a common ancestor whose two children
4267
+ * (the person we came from and the person we go to) share fewer than two
4268
+ * biological parents — i.e. they are half-siblings, so every collateral
4269
+ * relative on this path is a half-aunt/half-cousin/... too.
4270
+ *
4271
+ * Direct ancestors/descendants and paths that already use a
4272
+ * step/adopted/foster edge are never half-blood.
4273
+ */
4274
+ get isHalfBlood() {
4275
+ const path = this.path;
4276
+ if (!path || path.length < 3) {
4277
+ return false;
4278
+ }
4279
+ if (path.some(
4280
+ (item) => item.relation && item.relation !== "biological" /* BIOLOGICAL */
4281
+ )) {
4282
+ return false;
4283
+ }
4284
+ let peakIndex = -1;
4285
+ for (let i = 1; i < path.length; i++) {
4286
+ if (path[i].kinship === "parent") {
4287
+ peakIndex = i;
4288
+ }
4289
+ }
4290
+ if (peakIndex <= 0 || peakIndex >= path.length - 1) {
4291
+ return false;
4292
+ }
4293
+ if (path[peakIndex + 1].kinship !== "child") {
4294
+ return false;
4295
+ }
4296
+ const siblingA = path[peakIndex - 1].indi;
4297
+ const siblingB = path[peakIndex + 1].indi;
4298
+ const parentsA = siblingA.getBiologicalParents();
4299
+ const parentsB = siblingB.getBiologicalParents();
4300
+ const inter = parentsA.intersection(parentsB);
4301
+ return inter.length === 1 && (parentsA.length > 1 || parentsB.length > 1);
4302
+ }
4110
4303
  indirect() {
4111
4304
  return "";
4112
4305
  }
@@ -4134,6 +4327,9 @@ var KinshipTranslatorBasic = class {
4134
4327
  relationType(relation) {
4135
4328
  return relation ?? "";
4136
4329
  }
4330
+ halfBlood(relation) {
4331
+ return relation ?? "";
4332
+ }
4137
4333
  of(relation) {
4138
4334
  return relation ?? "";
4139
4335
  }
@@ -4372,14 +4568,34 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
4372
4568
  return `${prefix.replace(/nagy$/, "")}unoka`;
4373
4569
  }
4374
4570
  sibling() {
4375
- const parents1 = this.person1?.getBiologicalParents();
4376
- const parentsN = this.personN?.getBiologicalParents();
4377
- const inter = parents1?.intersection(parentsN);
4378
- if (!inter || inter.length < 2) {
4379
- return "f\xE9ltestv\xE9r";
4380
- }
4381
4571
  return "testv\xE9r";
4382
4572
  }
4573
+ halfBlood(relation) {
4574
+ if (!relation || !this.isHalfBlood) {
4575
+ return relation ?? "";
4576
+ }
4577
+ const [head, ...rest] = relation.split(" ");
4578
+ if (!head) {
4579
+ return relation;
4580
+ }
4581
+ const prefixed = this.prefixHalf(head);
4582
+ return [prefixed, ...rest].join(" ");
4583
+ }
4584
+ /**
4585
+ * AkH. 139: compounds of more than two members stay closed up to 6
4586
+ * syllables; longer ones are hyphenated at the main boundary. A head
4587
+ * that is already hyphenated also takes a hyphenated half- prefix.
4588
+ */
4589
+ prefixHalf(head) {
4590
+ if (head.includes("-") || !/[aáeéiíoóöőuúüű]/i.test(head)) {
4591
+ return `f\xE9l-${head}`;
4592
+ }
4593
+ const syllables = (head.match(/[aáeéiíoóöőuúüű]/gi) ?? []).length + 1;
4594
+ if (syllables > 6) {
4595
+ return `f\xE9l-${head}`;
4596
+ }
4597
+ return `f\xE9l${head}`;
4598
+ }
4383
4599
  spouse() {
4384
4600
  if (this.personN?.isMale()) {
4385
4601
  return "f\xE9rj";
@@ -4578,20 +4794,22 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
4578
4794
  return `${prefix}child`;
4579
4795
  }
4580
4796
  sibling() {
4581
- const parents1 = this.person1?.getBiologicalParents();
4582
- const parentsN = this.personN?.getBiologicalParents();
4583
- const inter = parents1?.intersection(parentsN);
4584
- let prefix = "";
4585
- if (!inter || inter.length < 2) {
4586
- prefix = "half-";
4587
- }
4588
4797
  if (this.personN?.isMale()) {
4589
- return `${prefix}brother`;
4798
+ return "brother";
4590
4799
  }
4591
4800
  if (this.personN?.isFemale()) {
4592
- return `${prefix}sister`;
4801
+ return "sister";
4593
4802
  }
4594
- return `${prefix}sibling`;
4803
+ return "sibling";
4804
+ }
4805
+ halfBlood(relation) {
4806
+ if (!relation || !this.isHalfBlood) {
4807
+ return relation ?? "";
4808
+ }
4809
+ if (relation.includes(" ")) {
4810
+ return `half ${relation}`;
4811
+ }
4812
+ return `half-${relation}`;
4595
4813
  }
4596
4814
  spouse() {
4597
4815
  if (this.personN?.isMale()) {
@@ -4773,20 +4991,22 @@ var KinshipTranslatorDe = class extends KinshipTranslatorBasic {
4773
4991
  return `${prefix}kind`;
4774
4992
  }
4775
4993
  sibling() {
4776
- const parents1 = this.person1?.getBiologicalParents();
4777
- const parentsN = this.personN?.getBiologicalParents();
4778
- const inter = parents1?.intersection(parentsN);
4779
- let prefix = "";
4780
- if (!inter || inter.length < 2) {
4781
- prefix = "Halb";
4782
- }
4783
4994
  if (this.personN?.isMale()) {
4784
- return `${prefix}bruder`;
4995
+ return "bruder";
4785
4996
  }
4786
4997
  if (this.personN?.isFemale()) {
4787
- return `${prefix}schwester`;
4998
+ return "schwester";
4999
+ }
5000
+ return "geschwister";
5001
+ }
5002
+ halfBlood(relation) {
5003
+ if (!relation || !this.isHalfBlood) {
5004
+ return relation ?? "";
5005
+ }
5006
+ if (/^[A-ZÄÖÜ]/.test(relation) || /[-\s]/.test(relation)) {
5007
+ return `Halb-${relation}`;
4788
5008
  }
4789
- return `${prefix}geschwister`;
5009
+ return `Halb${relation}`;
4790
5010
  }
4791
5011
  spouse() {
4792
5012
  if (this.personN?.isMale()) {
@@ -4968,20 +5188,19 @@ var KinshipTranslatorFr = class extends KinshipTranslatorBasic {
4968
5188
  return `${prefix}enfant`;
4969
5189
  }
4970
5190
  sibling() {
4971
- const parents1 = this.person1?.getBiologicalParents();
4972
- const parentsN = this.personN?.getBiologicalParents();
4973
- const inter = parents1?.intersection(parentsN);
4974
- let prefix = "";
4975
- if (!inter || inter.length < 2) {
4976
- prefix = "demi-";
4977
- }
4978
5191
  if (this.personN?.isMale()) {
4979
- return `${prefix}fr\xE8re`;
5192
+ return "fr\xE8re";
4980
5193
  }
4981
5194
  if (this.personN?.isFemale()) {
4982
- return `${prefix}s\u0153ur`;
5195
+ return "s\u0153ur";
5196
+ }
5197
+ return "fr\xE8re/s\u0153ur";
5198
+ }
5199
+ halfBlood(relation) {
5200
+ if (!relation || !this.isHalfBlood) {
5201
+ return relation ?? "";
4983
5202
  }
4984
- return `${prefix}fr\xE8re/s\u0153ur`;
5203
+ return `demi-${relation}`;
4985
5204
  }
4986
5205
  spouse() {
4987
5206
  if (this.personN?.isMale()) {
@@ -5078,12 +5297,12 @@ var InLawsEs = {
5078
5297
  "madre del (c\xF3nyuge|esposa|esposo)": "suegra",
5079
5298
  "padre del (c\xF3nyuge|esposa|esposo)": "suegro",
5080
5299
  "padre/madre del (c\xF3nyuge|esposa|esposo)": "suegro/suegra",
5081
- "esposa de (medio )?(hermano/hermana|hermana|hermano)": "cu\xF1ada",
5082
- "esposo de (medio )?(hermano/hermana|hermana|hermano)": "cu\xF1ado",
5083
- "c\xF3nyuge de (medio )?(hermano/hermana|hermana|hermano)": "cu\xF1ado/cu\xF1ada",
5084
- "(medio )?hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ada",
5085
- "(medio )?hermano del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado",
5086
- "(medio )?hermano/hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado/cu\xF1ada"
5300
+ "esposa de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ada",
5301
+ "esposo de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ado",
5302
+ "c\xF3nyuge de (medio |media |medio/a )?(hermano/hermana|hermana|hermano)": "cu\xF1ado/cu\xF1ada",
5303
+ "(medio |media |medio/a )?hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ada",
5304
+ "(medio |media |medio/a )?hermano del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado",
5305
+ "(medio |media |medio/a )?hermano/hermana del (c\xF3nyuge|esposa|esposo)": "cu\xF1ado/cu\xF1ada"
5087
5306
  };
5088
5307
 
5089
5308
  // src/kinship-translator/kinship-translator.es.ts
@@ -5163,20 +5382,25 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
5163
5382
  return `${prefix}hijo/hija`;
5164
5383
  }
5165
5384
  sibling() {
5166
- const parents1 = this.person1?.getBiologicalParents();
5167
- const parentsN = this.personN?.getBiologicalParents();
5168
- const inter = parents1?.intersection(parentsN);
5169
- let prefix = "";
5170
- if (!inter || inter.length < 2) {
5171
- prefix = "medio ";
5172
- }
5173
5385
  if (this.personN?.isMale()) {
5174
- return `${prefix}hermano`;
5386
+ return "hermano";
5175
5387
  }
5176
5388
  if (this.personN?.isFemale()) {
5177
- return `${prefix}hermana`;
5389
+ return "hermana";
5178
5390
  }
5179
- return `${prefix}hermano/hermana`;
5391
+ return "hermano/hermana";
5392
+ }
5393
+ halfBlood(relation) {
5394
+ if (!relation || !this.isHalfBlood) {
5395
+ return relation ?? "";
5396
+ }
5397
+ if (this.personN?.isFemale()) {
5398
+ return `media ${relation}`;
5399
+ }
5400
+ if (this.personN?.isMale()) {
5401
+ return `medio ${relation}`;
5402
+ }
5403
+ return `medio/a ${relation}`;
5180
5404
  }
5181
5405
  spouse() {
5182
5406
  if (this.personN?.isMale()) {
@@ -5265,6 +5489,249 @@ var KinshipTranslatorEs = class extends KinshipTranslatorBasic {
5265
5489
  }
5266
5490
  };
5267
5491
 
5492
+ // src/kinship-translator/patterns.ru.ts
5493
+ var InLawsRu = {
5494
+ "\u0441\u0443\u043F\u0440\u0443\u0433(?:\u0430)? (\u0440\u0435\u0431\u0451\u043D\u043A\u0430|\u0434\u043E\u0447\u0435\u0440\u0438|\u0441\u044B\u043D\u0430)": "\u0437\u044F\u0442\u044C/\u043D\u0435\u0432\u0435\u0441\u0442\u043A\u0430",
5495
+ "\u0436\u0435\u043D\u0430 (\u0440\u0435\u0431\u0451\u043D\u043A\u0430|\u0434\u043E\u0447\u0435\u0440\u0438|\u0441\u044B\u043D\u0430)": "\u043D\u0435\u0432\u0435\u0441\u0442\u043A\u0430",
5496
+ "\u043C\u0443\u0436 (\u0440\u0435\u0431\u0451\u043D\u043A\u0430|\u0434\u043E\u0447\u0435\u0440\u0438|\u0441\u044B\u043D\u0430)": "\u0437\u044F\u0442\u044C",
5497
+ "\u043C\u0430\u0442\u044C (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0442\u0451\u0449\u0430",
5498
+ "\u043E\u0442\u0435\u0446 (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0442\u0435\u0441\u0442\u044C",
5499
+ "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0442\u0435\u0441\u0442\u044C/\u0442\u0451\u0449\u0430",
5500
+ "\u0436\u0435\u043D\u0430 (\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?(\u0431\u0440\u0430\u0442\u0430|\u0441\u0435\u0441\u0442\u0440\u044B|\u0441\u0438\u0431\u043B\u0438\u043D\u0433\u0430)": "\u043D\u0435\u0432\u0435\u0441\u0442\u043A\u0430",
5501
+ "\u043C\u0443\u0436 (\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?(\u0431\u0440\u0430\u0442\u0430|\u0441\u0435\u0441\u0442\u0440\u044B|\u0441\u0438\u0431\u043B\u0438\u043D\u0433\u0430)": "\u0437\u044F\u0442\u044C",
5502
+ "\u0441\u0443\u043F\u0440\u0443\u0433(?:\u0430)? (\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?(\u0431\u0440\u0430\u0442\u0430|\u0441\u0435\u0441\u0442\u0440\u044B|\u0441\u0438\u0431\u043B\u0438\u043D\u0433\u0430)": "\u0437\u044F\u0442\u044C/\u043D\u0435\u0432\u0435\u0441\u0442\u043A\u0430",
5503
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0441\u0435\u0441\u0442\u0440\u0430 (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0437\u043E\u043B\u043E\u0432\u043A\u0430",
5504
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0431\u0440\u0430\u0442 (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0448\u0443\u0440\u0438\u043D",
5505
+ "(\u0441\u0432\u043E\u0434\u043D(?:\u044B\u0439|\u0430\u044F) )?\u0441\u0438\u0431\u043B\u0438\u043D\u0433 (\u0441\u0443\u043F\u0440\u0443\u0433\u0430|\u0436\u0435\u043D\u044B|\u043C\u0443\u0436\u0430)": "\u0448\u0443\u0440\u0438\u043D/\u0437\u043E\u043B\u043E\u0432\u043A\u0430"
5506
+ };
5507
+
5508
+ // src/kinship-translator/kinship-translator.ru.ts
5509
+ var GENITIVE = {
5510
+ \u0441\u044B\u043D: "\u0441\u044B\u043D\u0430",
5511
+ \u0434\u043E\u0447\u044C: "\u0434\u043E\u0447\u0435\u0440\u0438",
5512
+ \u0440\u0435\u0431\u0451\u043D\u043E\u043A: "\u0440\u0435\u0431\u0451\u043D\u043A\u0430",
5513
+ \u0431\u0440\u0430\u0442: "\u0431\u0440\u0430\u0442\u0430",
5514
+ \u0441\u0435\u0441\u0442\u0440\u0430: "\u0441\u0435\u0441\u0442\u0440\u044B",
5515
+ \u0441\u0438\u0431\u043B\u0438\u043D\u0433: "\u0441\u0438\u0431\u043B\u0438\u043D\u0433\u0430",
5516
+ \u043E\u0442\u0435\u0446: "\u043E\u0442\u0446\u0430",
5517
+ \u043C\u0430\u0442\u044C: "\u043C\u0430\u0442\u0435\u0440\u0438",
5518
+ \u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C: "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044F",
5519
+ \u043C\u0443\u0436: "\u043C\u0443\u0436\u0430",
5520
+ \u0436\u0435\u043D\u0430: "\u0436\u0435\u043D\u044B",
5521
+ \u0441\u0443\u043F\u0440\u0443\u0433: "\u0441\u0443\u043F\u0440\u0443\u0433\u0430",
5522
+ \u0441\u0443\u043F\u0440\u0443\u0433\u0430: "\u0441\u0443\u043F\u0440\u0443\u0433\u0438"
5523
+ };
5524
+ var toGenitive = (word) => GENITIVE[word] ?? word;
5525
+ var cousinWord = (degree, sex) => {
5526
+ const stem = degree <= 1 ? "\u0434\u0432\u043E\u044E\u0440\u043E\u0434\u043D" : degree === 2 ? "\u0442\u0440\u043E\u044E\u0440\u043E\u0434\u043D" : degree === 3 ? "\u0447\u0435\u0442\u0432\u0435\u0440\u043E\u044E\u0440\u043E\u0434\u043D" : `${degree + 1}-\u044E\u0440\u043E\u0434\u043D`;
5527
+ if (sex === "m") {
5528
+ return `${stem}\u044B\u0439 \u0431\u0440\u0430\u0442`;
5529
+ }
5530
+ if (sex === "f") {
5531
+ return `${stem}\u0430\u044F \u0441\u0435\u0441\u0442\u0440\u0430`;
5532
+ }
5533
+ return `${stem}\u044B\u0439 \u0431\u0440\u0430\u0442/\u0441\u0435\u0441\u0442\u0440\u0430`;
5534
+ };
5535
+ var praRepeat = (count) => count > 0 ? "\u043F\u0440\u0430".repeat(count) : "";
5536
+ var sexOf = (person) => {
5537
+ if (person?.isMale?.()) {
5538
+ return "m";
5539
+ }
5540
+ if (person?.isFemale?.()) {
5541
+ return "f";
5542
+ }
5543
+ return "n";
5544
+ };
5545
+ var KinshipTranslatorRu = class extends KinshipTranslatorBasic {
5546
+ indirect() {
5547
+ let degree = Math.abs(this.pathN?.degree ?? 0);
5548
+ if (degree > 0) {
5549
+ degree = degree - 1;
5550
+ }
5551
+ return cousinWord(degree, sexOf(this.personN));
5552
+ }
5553
+ removal() {
5554
+ const level = this.pathN?.level ?? 0;
5555
+ let degree = Math.abs(this.pathN?.degree ?? 0);
5556
+ if (degree > 0) {
5557
+ degree = degree - 1;
5558
+ }
5559
+ if (!degree) {
5560
+ return level < 0 ? this.nibling() : this.auncle();
5561
+ }
5562
+ const removed = Math.abs(level);
5563
+ return `${cousinWord(degree, sexOf(this.personN))} (${removed}\xD7 \u0447\u0435\u0440\u0435\u0437 \u043F\u043E\u043A\u043E\u043B\u0435\u043D\u0438\u0435)`;
5564
+ }
5565
+ auncle() {
5566
+ const level = Math.abs(this.pathN?.level ?? 0);
5567
+ const pra = praRepeat(Math.max(0, level - 2));
5568
+ const sex = sexOf(this.personN);
5569
+ if (sex === "m") {
5570
+ return `${pra}\u0434\u044F\u0434\u044F`;
5571
+ }
5572
+ if (sex === "f") {
5573
+ return `${pra}\u0442\u0451\u0442\u044F`;
5574
+ }
5575
+ return `${pra}\u0434\u044F\u0434\u044F/\u0442\u0451\u0442\u044F`;
5576
+ }
5577
+ nibling() {
5578
+ const level = Math.abs(this.pathN?.level ?? 0);
5579
+ const pra = praRepeat(Math.max(0, level - 2));
5580
+ const sex = sexOf(this.personN);
5581
+ if (sex === "m") {
5582
+ return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A`;
5583
+ }
5584
+ if (sex === "f") {
5585
+ return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
5586
+ }
5587
+ return `${pra}\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u043A/\u043F\u043B\u0435\u043C\u044F\u043D\u043D\u0438\u0446\u0430`;
5588
+ }
5589
+ parent() {
5590
+ const level = Math.abs(this.pathN?.level ?? 0);
5591
+ const sex = sexOf(this.personN);
5592
+ if (level <= 1) {
5593
+ if (sex === "m") {
5594
+ return "\u043E\u0442\u0435\u0446";
5595
+ }
5596
+ if (sex === "f") {
5597
+ return "\u043C\u0430\u0442\u044C";
5598
+ }
5599
+ return "\u0440\u043E\u0434\u0438\u0442\u0435\u043B\u044C";
5600
+ }
5601
+ if (level === 2) {
5602
+ if (sex === "m") {
5603
+ return "\u0434\u0435\u0434";
5604
+ }
5605
+ if (sex === "f") {
5606
+ return "\u0431\u0430\u0431\u0443\u0448\u043A\u0430";
5607
+ }
5608
+ return "\u0434\u0435\u0434/\u0431\u0430\u0431\u0443\u0448\u043A\u0430";
5609
+ }
5610
+ const pra = praRepeat(level - 2);
5611
+ if (sex === "m") {
5612
+ return `${pra}\u0434\u0435\u0434`;
5613
+ }
5614
+ if (sex === "f") {
5615
+ return `${pra}\u0431\u0430\u0431\u0443\u0448\u043A\u0430`;
5616
+ }
5617
+ return `${pra}\u0434\u0435\u0434/\u0431\u0430\u0431\u0443\u0448\u043A\u0430`;
5618
+ }
5619
+ child() {
5620
+ const level = Math.abs(this.pathN?.level ?? 0);
5621
+ const sex = sexOf(this.personN);
5622
+ if (level <= 1) {
5623
+ if (sex === "m") {
5624
+ return "\u0441\u044B\u043D";
5625
+ }
5626
+ if (sex === "f") {
5627
+ return "\u0434\u043E\u0447\u044C";
5628
+ }
5629
+ return "\u0440\u0435\u0431\u0451\u043D\u043E\u043A";
5630
+ }
5631
+ if (level === 2) {
5632
+ if (sex === "m") {
5633
+ return "\u0432\u043D\u0443\u043A";
5634
+ }
5635
+ if (sex === "f") {
5636
+ return "\u0432\u043D\u0443\u0447\u043A\u0430";
5637
+ }
5638
+ return "\u0432\u043D\u0443\u043A/\u0432\u043D\u0443\u0447\u043A\u0430";
5639
+ }
5640
+ const pra = praRepeat(level - 2);
5641
+ if (sex === "m") {
5642
+ return `${pra}\u0432\u043D\u0443\u043A`;
5643
+ }
5644
+ if (sex === "f") {
5645
+ return `${pra}\u0432\u043D\u0443\u0447\u043A\u0430`;
5646
+ }
5647
+ return `${pra}\u0432\u043D\u0443\u043A/\u0432\u043D\u0443\u0447\u043A\u0430`;
5648
+ }
5649
+ sibling() {
5650
+ const sex = sexOf(this.personN);
5651
+ if (sex === "m") {
5652
+ return "\u0431\u0440\u0430\u0442";
5653
+ }
5654
+ if (sex === "f") {
5655
+ return "\u0441\u0435\u0441\u0442\u0440\u0430";
5656
+ }
5657
+ return "\u0441\u0438\u0431\u043B\u0438\u043D\u0433";
5658
+ }
5659
+ halfBlood(relation) {
5660
+ if (!relation || !this.isHalfBlood) {
5661
+ return relation ?? "";
5662
+ }
5663
+ if (/сестра|дочь|мать|тётя|бабушка|жена|племянница|внучка/.test(
5664
+ relation
5665
+ )) {
5666
+ return `\u0441\u0432\u043E\u0434\u043D\u0430\u044F ${relation}`;
5667
+ }
5668
+ return `\u0441\u0432\u043E\u0434\u043D\u044B\u0439 ${relation}`;
5669
+ }
5670
+ spouse() {
5671
+ const sex = sexOf(this.personN);
5672
+ if (sex === "m") {
5673
+ return "\u043C\u0443\u0436";
5674
+ }
5675
+ if (sex === "f") {
5676
+ return "\u0436\u0435\u043D\u0430";
5677
+ }
5678
+ return "\u0441\u0443\u043F\u0440\u0443\u0433";
5679
+ }
5680
+ ofSpouse(relation) {
5681
+ if (!relation) {
5682
+ return "";
5683
+ }
5684
+ const spouse = this.path?.[1].indi;
5685
+ const sex = sexOf(spouse);
5686
+ const spouseType = sex === "m" ? "\u043C\u0443\u0436" : sex === "f" ? "\u0436\u0435\u043D\u0430" : "\u0441\u0443\u043F\u0440\u0443\u0433";
5687
+ return `${relation} ${toGenitive(spouseType)}`;
5688
+ }
5689
+ spouseOf(relation) {
5690
+ if (!relation) {
5691
+ return "";
5692
+ }
5693
+ const spouse = this.path?.[this.path.length - 1].indi;
5694
+ const sex = sexOf(spouse);
5695
+ const spouseType = sex === "m" ? "\u043C\u0443\u0436" : sex === "f" ? "\u0436\u0435\u043D\u0430" : "\u0441\u0443\u043F\u0440\u0443\u0433";
5696
+ return `${spouseType} ${toGenitive(relation)}`;
5697
+ }
5698
+ of(relation) {
5699
+ const formattedName = nameFormatter(this.path?.[0]?.indi, {
5700
+ nameOrder: "first-last"
5701
+ });
5702
+ let name = formattedName.inOrder.filter(Boolean).join(" ");
5703
+ if (this.displayName === "none") {
5704
+ name = "";
5705
+ } else if (this.displayName === "givenname") {
5706
+ name = formattedName.givenname;
5707
+ } else if (this.displayName === "surname") {
5708
+ name = `${formattedName.surname}`;
5709
+ }
5710
+ if (!name || !relation) {
5711
+ return relation ?? "";
5712
+ }
5713
+ return `${name}: ${relation}`;
5714
+ }
5715
+ inLaw(relation) {
5716
+ let inLawRelation = relation;
5717
+ Object.keys(InLawsRu).find((pattern) => {
5718
+ const regex = new RegExp(`^${pattern}$`);
5719
+ if (relation?.match(regex)) {
5720
+ inLawRelation = InLawsRu[pattern];
5721
+ return true;
5722
+ }
5723
+ return false;
5724
+ });
5725
+ return inLawRelation ?? "";
5726
+ }
5727
+ relationType(relation) {
5728
+ if (!relation || !this.pathN?.relation) {
5729
+ return relation ?? "";
5730
+ }
5731
+ return `${this.pathN.relation} ${relation}`;
5732
+ }
5733
+ };
5734
+
5268
5735
  // src/kinship-translator/kinship-translator.ts
5269
5736
  var KinshipTranslator = class {
5270
5737
  constructor(person1, person2, lang = "en", entirePath, displayName = "givenname") {
@@ -5358,6 +5825,7 @@ var KinshipTranslator = class {
5358
5825
  } else if (personN.level !== 0) {
5359
5826
  relation = this.removal();
5360
5827
  }
5828
+ relation = this.translator?.halfBlood(relation);
5361
5829
  relation = this.translator?.relationType(relation);
5362
5830
  if (this.translator?.isOfSpouse) {
5363
5831
  relation = this.translator?.ofSpouse(relation);
@@ -6694,7 +7162,7 @@ var Families = class _Families extends List {
6694
7162
  // package.json
6695
7163
  var package_default = {
6696
7164
  name: "@treeviz/gedcom-parser",
6697
- version: "2.0.8"};
7165
+ version: "2.0.10"};
6698
7166
 
6699
7167
  // src/utils/get-product-details.ts
6700
7168
  var isDevelopment = () => {
@@ -8031,4 +8499,4 @@ if (isDev) {
8031
8499
  }
8032
8500
  var parser_default = GedcomTree;
8033
8501
 
8034
- export { ACCEPTED_DATE_FORMATS, ACCEPTED_DATE_FORMATS_REGEX, ADOPTED, BIOLOGICAL, BIRTH, BIRTH_ASC, BIRTH_DESC, Common, CommonDate, CommonName, CommonNote, CustomTags, DATE_ASC, DATE_DESC, DEATH_ASC, DEATH_DESC, DEFAULT, EVERY, Existed, FEMALE, FOSTER, FRIEND, Fam, Families, GedCom, parser_default as GedcomTree, ID_GETTER_REG, ID_REG, ID_SPLIT_REG, Indi, Individuals, KinshipTranslator, KinshipTranslatorBasic, KinshipTranslatorDe as KinshipTranslatorDE, KinshipTranslatorEn as KinshipTranslatorEN, KinshipTranslatorEs as KinshipTranslatorES, KinshipTranslatorFr as KinshipTranslatorFR, KinshipTranslatorHU, LINE_REG, List, MALE, MAX_FILE_SIZE_TO_SYNC, OTHER, Obje, Objects, PARTNER, PartnerType, PlaceType, REF_LINE_REG, Range, RelationType, Repo, Repositories, SEALING, SINGLE, SPOUSE, STEP, Sour, Sources, Subm, Submitters, UNKOWN, commonDateFormatter, create, createCommon, createCommonDate, createCommonName, createCommonNote, createFam, createGedCom, createIndi, createObje, createProxy, createRepo, createSour, createSubm, dateFormatter, parser_default as default, extractSeparationYears, extractSplitPoints, findMatchingRangeForSplitRange, fromTuple, generateSplitRanges, getAllProp, getBirthAsc, getCacheManagerFactory, getDateLocale, getFamilyWith, getI18n, getKinshipTranslatorClass, getListTag, getMarriageAsc, getMarriageAscAndBirth, getMarriageAscAndChildBirth, getName, getNameAsc, getNameAscAndBirth, getNameDesc, getPlaceParserProvider, getPlaceParts, getPlaceTranslatorProvider, getPlaces, getRawSize, getValidKey, getValidKeys, getValidTag, getVersion, hungarianOrdinalize, i18n, idGetter, implemented, inRange, initializeCache, isCommonDate, isDevelopment, isGedcomString, isId, isIntersectedRange, isOnlyMainProp, isRangeContained, isValidKey, marriageDateFormatter, mergeGedcoms, nameFormatter, notImplemented, noteDateFormatter, ordinalize, parseRangeBounds, pathCache, placeTranslator, profilePictureCache, relativesCache, resetCacheManagerFactory, resetDateLocaleProvider, resetI18nProvider, resetKinshipTranslatorClass, resetPlaceParserProvider, resetPlaceTranslatorProvider, resetRelativesCache, setCacheManagerFactory, setDateLocaleProvider, setI18nProvider, setKinshipTranslatorClass, setNestedGroup, setPlaceParserProvider, setPlaceTranslatorProvider, splitOverlappingRanges, splitRange, translators_exports as translators, validateGedcomContent };
8502
+ export { ACCEPTED_DATE_FORMATS, ACCEPTED_DATE_FORMATS_REGEX, ADOPTED, BIOLOGICAL, BIRTH, BIRTH_ASC, BIRTH_DESC, Common, CommonDate, CommonName, CommonNote, CustomTags, DATE_ASC, DATE_DESC, DEATH_ASC, DEATH_DESC, DEFAULT, EVERY, Existed, FEMALE, FOSTER, FRIEND, Fam, Families, GedCom, parser_default as GedcomTree, ID_GETTER_REG, ID_REG, ID_SPLIT_REG, Indi, Individuals, KinshipTranslator, KinshipTranslatorBasic, KinshipTranslatorDe as KinshipTranslatorDE, KinshipTranslatorEn as KinshipTranslatorEN, KinshipTranslatorEs as KinshipTranslatorES, KinshipTranslatorFr as KinshipTranslatorFR, KinshipTranslatorHU, KinshipTranslatorRu as KinshipTranslatorRU, LINE_REG, List, MALE, MAX_FILE_SIZE_TO_SYNC, OTHER, Obje, Objects, PARTNER, PartnerType, PlaceType, REF_LINE_REG, Range, RelationType, Repo, Repositories, SEALING, SINGLE, SPOUSE, STEP, Sour, Sources, Subm, Submitters, UNKOWN, cacheDiscoveredPath, commonDateFormatter, create, createCommon, createCommonDate, createCommonName, createCommonNote, createFam, createGedCom, createIndi, createObje, createProxy, createRepo, createSour, createSubm, dateFormatter, parser_default as default, extractSeparationYears, extractSplitPoints, findMatchingRangeForSplitRange, fromTuple, generateSplitRanges, getAllProp, getBirthAsc, getCacheManagerFactory, getDateLocale, getFamilyWith, getI18n, getKinshipTranslatorClass, getListTag, getMarriageAsc, getMarriageAscAndBirth, getMarriageAscAndChildBirth, getName, getNameAsc, getNameAscAndBirth, getNameDesc, getPlaceParserProvider, getPlaceParts, getPlaceTranslatorProvider, getPlaces, getRawSize, getValidKey, getValidKeys, getValidTag, getVersion, hungarianOrdinalize, i18n, idGetter, implemented, inRange, initializeCache, isCommonDate, isDevelopment, isGedcomString, isId, isIntersectedRange, isOnlyMainProp, isRangeContained, isValidKey, marriageDateFormatter, mergeGedcoms, nameFormatter, notImplemented, noteDateFormatter, ordinalize, parseRangeBounds, pathCache, placeTranslator, profilePictureCache, relativesCache, resetCacheManagerFactory, resetDateLocaleProvider, resetI18nProvider, resetKinshipTranslatorClass, resetPlaceParserProvider, resetPlaceTranslatorProvider, resetRelativesCache, setCacheManagerFactory, setDateLocaleProvider, setI18nProvider, setKinshipTranslatorClass, setNestedGroup, setPlaceParserProvider, setPlaceTranslatorProvider, splitOverlappingRanges, splitRange, translators_exports as translators, validateGedcomContent };