@treeviz/gedcom-parser 2.1.18 → 2.1.22

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.
@@ -870,7 +870,7 @@ var Common = class _Common {
870
870
  return this.sourStartsWith("ahnenblatt");
871
871
  }
872
872
  isGeni() {
873
- return this.sourStartsWith("geni");
873
+ return this.sourStartsWith("geni.com");
874
874
  }
875
875
  isAncestry() {
876
876
  return this.sourStartsWith("ancestry");
@@ -3167,10 +3167,12 @@ var relativesOnLevelCache = relativesCache("relativesOnLevelCache");
3167
3167
  var relativesOnDegreeCache = relativesCache("relativesOnDegreeCache");
3168
3168
  var Indi = class extends Common {
3169
3169
  toName() {
3170
- return this.get("NAME")?.toValue();
3170
+ const name = this.get("NAME");
3171
+ const value = name?.index(0)?.toValue() ?? name?.toValue();
3172
+ return typeof value === "string" ? value : void 0;
3171
3173
  }
3172
3174
  toNaturalName() {
3173
- return this.get("NAME")?.toValue()?.replaceAll("/", "");
3175
+ return this.toName()?.replaceAll("/", "");
3174
3176
  }
3175
3177
  toList() {
3176
3178
  return new Individuals().concat(
@@ -3715,17 +3717,25 @@ var Indi = class extends Common {
3715
3717
  }
3716
3718
  return list;
3717
3719
  }
3718
- myheritageLink(poolId = 0) {
3720
+ myheritageLink(poolId = 0, treeToken) {
3719
3721
  let www = (this.getFromSourceHeads("SOUR.CORP.value") || this._gedcom?.HEAD?.SOUR?.CORP?.value)?.toLowerCase().replace(/^www\./gi, "");
3720
3722
  if (!www || /treeviz/i.test(www)) {
3721
3723
  www = "myheritage.com";
3722
3724
  }
3725
+ if (!this.id) {
3726
+ return;
3727
+ }
3728
+ const id = Number(this.id.replace(/@|I/g, "")) + poolId;
3729
+ if (!Number.isFinite(id)) {
3730
+ return;
3731
+ }
3732
+ const slug = this.toNaturalName()?.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "") || String(id);
3733
+ if (treeToken) {
3734
+ return `https://www.${www}/profile-${treeToken}-${id}/${slug}`;
3735
+ }
3723
3736
  const site = this.getMyHeritageTreeId();
3724
- const file = (this.getFromSourceHeads("FILE.value") || this._gedcom?.HEAD?.get("FILE")?.toValue())?.match(/Exported by MyHeritage.com from .+ in (?<site>.+) on .+$/)?.groups?.site;
3725
- const normalizedFile = file?.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/[^a-z0-9]+/g, "-");
3726
- if (normalizedFile && this.id) {
3727
- const id = Number(this.id.replace(/@|I/g, "")) + poolId;
3728
- return `https://www.${www}/site-family-tree-${site}/${normalizedFile}#!profile-${id}-info`;
3737
+ if (site) {
3738
+ return `https://www.${www}/person-${id}_${site}_${site}/${slug}`;
3729
3739
  }
3730
3740
  }
3731
3741
  myheritageMedia() {
@@ -3774,6 +3784,14 @@ var Indi = class extends Common {
3774
3784
  });
3775
3785
  return list;
3776
3786
  }
3787
+ geniLink() {
3788
+ if (!this.id) {
3789
+ return;
3790
+ }
3791
+ const id = this.id.replace(/@|I/g, "");
3792
+ const given = this.toNaturalName()?.trim().split(/\s+/)[0] || id;
3793
+ return `https://www.geni.com/people/${given}/${id}`;
3794
+ }
3777
3795
  familySearchLink() {
3778
3796
  const wwwTags = this.get("WWW")?.toList();
3779
3797
  const wwwTag = wwwTags?.find((wwwTag2) => {
@@ -4054,12 +4072,15 @@ var Indi = class extends Common {
4054
4072
  );
4055
4073
  return void 0;
4056
4074
  }
4057
- link(poolId) {
4075
+ link(poolId, treeToken) {
4058
4076
  if (this?.isAncestry()) {
4059
4077
  return this.ancestryLink();
4060
4078
  }
4061
4079
  if (this?.isMyHeritage()) {
4062
- return this.myheritageLink(poolId);
4080
+ return this.myheritageLink(poolId, treeToken);
4081
+ }
4082
+ if (this?.isGeni()) {
4083
+ return this.geniLink();
4063
4084
  }
4064
4085
  if (this?.isFamilySearch()) {
4065
4086
  return this.familySearchLink();
@@ -5812,11 +5833,28 @@ var KinshipTranslatorBasic = class {
5812
5833
  // src/kinship-translator/patterns.hu.ts
5813
5834
  var parentRelationsHu = {
5814
5835
  step: "mostoha",
5815
- foster: "nevelt",
5836
+ foster: { ancestor: "nevel\u0151", other: "nevelt" },
5816
5837
  birth: "v\xE9rszerinti",
5817
5838
  biological: "v\xE9rszerinti",
5818
- adopted: "\xF6r\xF6kbefogadott"
5839
+ adopted: { ancestor: "\xF6r\xF6kbefogad\xF3", other: "\xF6r\xF6kbefogadott" }
5840
+ };
5841
+ var parentRelationPrefix = (relation, ancestor) => {
5842
+ const label = parentRelationsHu[relation];
5843
+ if (!label) {
5844
+ return;
5845
+ }
5846
+ if (typeof label === "string") {
5847
+ return label;
5848
+ }
5849
+ return ancestor ? label.ancestor : label.other;
5819
5850
  };
5851
+ var parentRelationModifiers = [
5852
+ ...new Set(
5853
+ Object.values(parentRelationsHu).flatMap(
5854
+ (label) => typeof label === "string" ? [label] : [label.ancestor, label.other]
5855
+ )
5856
+ )
5857
+ ].join("|");
5820
5858
  var nominativus = {
5821
5859
  apa: { nominativus: "apa", dativus: "apj\xE1nak", possessivus: "apja" },
5822
5860
  anya: { nominativus: "anya", dativus: "anyj\xE1nak", possessivus: "anyja" },
@@ -5894,15 +5932,9 @@ var casesHu = {
5894
5932
  var InLawsHu = {
5895
5933
  "gyermek feles\xE9ge": "meny",
5896
5934
  "gyermek f\xE9rje": "v\u0151",
5897
- [`(f\xE9rj|feles\xE9g) (?<mod1>(${Object.values(parentRelationsHu).join(
5898
- "|"
5899
- )}) )?anyja`]: "any\xF3s",
5900
- [`(f\xE9rj|feles\xE9g) (?<mod1>(${Object.values(parentRelationsHu).join(
5901
- "|"
5902
- )}) )?apja`]: "ap\xF3s",
5903
- [`(f\xE9rj|feles\xE9g) (?<mod1>(${Object.values(parentRelationsHu).join(
5904
- "|"
5905
- )}) )?(f\xE9l)?testv\xE9re`]: (indi) => {
5935
+ [`(f\xE9rj|feles\xE9g) (?<mod1>(${parentRelationModifiers}) )?anyja`]: "any\xF3s",
5936
+ [`(f\xE9rj|feles\xE9g) (?<mod1>(${parentRelationModifiers}) )?apja`]: "ap\xF3s",
5937
+ [`(f\xE9rj|feles\xE9g) (?<mod1>(${parentRelationModifiers}) )?(f\xE9l)?testv\xE9re`]: (indi) => {
5906
5938
  if (indi?.isMale()) {
5907
5939
  return "s\xF3gor";
5908
5940
  }
@@ -6179,7 +6211,12 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
6179
6211
  if (!relation || !this.pathN?.relation) {
6180
6212
  return relation ?? "";
6181
6213
  }
6182
- return `${parentRelationsHu[this.pathN.relation]} ${relation}`;
6214
+ const isAncestor = (this.pathN.level ?? 0) > 0 && (this.pathN.degree ?? 0) === 0;
6215
+ const prefix = parentRelationPrefix(this.pathN.relation, isAncestor);
6216
+ if (!prefix) {
6217
+ return relation;
6218
+ }
6219
+ return `${prefix} ${relation}`;
6183
6220
  }
6184
6221
  };
6185
6222
 
@@ -6379,6 +6416,10 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
6379
6416
  if (!relation || !this.pathN?.relation) {
6380
6417
  return relation ?? "";
6381
6418
  }
6419
+ if (this.pathN.relation === "adopted") {
6420
+ const isAncestor = (this.pathN.level ?? 0) > 0 && (this.pathN.degree ?? 0) === 0;
6421
+ return `${isAncestor ? "adoptive" : "adopted"} ${relation}`;
6422
+ }
6382
6423
  return `${this.pathN.relation} ${relation}`;
6383
6424
  }
6384
6425
  };
@@ -7537,6 +7578,39 @@ var lineal = (level, sex, kind) => {
7537
7578
  }
7538
7579
  return `${L - 1}\u4E16\u306E\u5B6B`;
7539
7580
  };
7581
+ var adoptedRelation = (relation) => {
7582
+ if (relation === "\u7236") {
7583
+ return "\u990A\u7236";
7584
+ }
7585
+ if (relation === "\u6BCD") {
7586
+ return "\u990A\u6BCD";
7587
+ }
7588
+ if (relation === "\u89AA") {
7589
+ return "\u990A\u89AA";
7590
+ }
7591
+ if (relation === "\u606F\u5B50" || relation === "\u5B50") {
7592
+ return "\u990A\u5B50";
7593
+ }
7594
+ if (relation === "\u5A18") {
7595
+ return "\u990A\u5973";
7596
+ }
7597
+ return `\u990A${relation}`;
7598
+ };
7599
+ var fosterRelation = (relation) => {
7600
+ if (relation === "\u7236") {
7601
+ return "\u91CC\u7236";
7602
+ }
7603
+ if (relation === "\u6BCD") {
7604
+ return "\u91CC\u6BCD";
7605
+ }
7606
+ if (relation === "\u89AA") {
7607
+ return "\u91CC\u89AA";
7608
+ }
7609
+ if (relation === "\u606F\u5B50" || relation === "\u5A18" || relation === "\u5B50") {
7610
+ return "\u91CC\u5B50";
7611
+ }
7612
+ return `\u91CC${relation}`;
7613
+ };
7540
7614
  var cousinPlain = (degree) => {
7541
7615
  if (degree <= 1) {
7542
7616
  return "\u3044\u3068\u3053";
@@ -7696,10 +7770,10 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
7696
7770
  return `\u7D99${relation}`;
7697
7771
  }
7698
7772
  if (this.pathN.relation === "adopted") {
7699
- return `\u990A\u5B50\u306E${relation}`;
7773
+ return adoptedRelation(relation);
7700
7774
  }
7701
7775
  if (this.pathN.relation === "foster") {
7702
- return `\u91CC\u89AA\u306E${relation}`;
7776
+ return fosterRelation(relation);
7703
7777
  }
7704
7778
  return relation;
7705
7779
  }
@@ -626,7 +626,7 @@ var Common = class _Common {
626
626
  return this.sourStartsWith("ahnenblatt");
627
627
  }
628
628
  isGeni() {
629
- return this.sourStartsWith("geni");
629
+ return this.sourStartsWith("geni.com");
630
630
  }
631
631
  isAncestry() {
632
632
  return this.sourStartsWith("ancestry");
@@ -3666,10 +3666,12 @@ var relativesOnLevelCache = relativesCache("relativesOnLevelCache");
3666
3666
  var relativesOnDegreeCache = relativesCache("relativesOnDegreeCache");
3667
3667
  var Indi = class extends Common {
3668
3668
  toName() {
3669
- return this.get("NAME")?.toValue();
3669
+ const name = this.get("NAME");
3670
+ const value = name?.index(0)?.toValue() ?? name?.toValue();
3671
+ return typeof value === "string" ? value : void 0;
3670
3672
  }
3671
3673
  toNaturalName() {
3672
- return this.get("NAME")?.toValue()?.replaceAll("/", "");
3674
+ return this.toName()?.replaceAll("/", "");
3673
3675
  }
3674
3676
  toList() {
3675
3677
  return new Individuals().concat(
@@ -4214,17 +4216,25 @@ var Indi = class extends Common {
4214
4216
  }
4215
4217
  return list;
4216
4218
  }
4217
- myheritageLink(poolId = 0) {
4219
+ myheritageLink(poolId = 0, treeToken) {
4218
4220
  let www = (this.getFromSourceHeads("SOUR.CORP.value") || this._gedcom?.HEAD?.SOUR?.CORP?.value)?.toLowerCase().replace(/^www\./gi, "");
4219
4221
  if (!www || /treeviz/i.test(www)) {
4220
4222
  www = "myheritage.com";
4221
4223
  }
4224
+ if (!this.id) {
4225
+ return;
4226
+ }
4227
+ const id = Number(this.id.replace(/@|I/g, "")) + poolId;
4228
+ if (!Number.isFinite(id)) {
4229
+ return;
4230
+ }
4231
+ const slug = this.toNaturalName()?.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "") || String(id);
4232
+ if (treeToken) {
4233
+ return `https://www.${www}/profile-${treeToken}-${id}/${slug}`;
4234
+ }
4222
4235
  const site = this.getMyHeritageTreeId();
4223
- const file = (this.getFromSourceHeads("FILE.value") || this._gedcom?.HEAD?.get("FILE")?.toValue())?.match(/Exported by MyHeritage.com from .+ in (?<site>.+) on .+$/)?.groups?.site;
4224
- const normalizedFile = file?.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/[^a-z0-9]+/g, "-");
4225
- if (normalizedFile && this.id) {
4226
- const id = Number(this.id.replace(/@|I/g, "")) + poolId;
4227
- return `https://www.${www}/site-family-tree-${site}/${normalizedFile}#!profile-${id}-info`;
4236
+ if (site) {
4237
+ return `https://www.${www}/person-${id}_${site}_${site}/${slug}`;
4228
4238
  }
4229
4239
  }
4230
4240
  myheritageMedia() {
@@ -4273,6 +4283,14 @@ var Indi = class extends Common {
4273
4283
  });
4274
4284
  return list;
4275
4285
  }
4286
+ geniLink() {
4287
+ if (!this.id) {
4288
+ return;
4289
+ }
4290
+ const id = this.id.replace(/@|I/g, "");
4291
+ const given = this.toNaturalName()?.trim().split(/\s+/)[0] || id;
4292
+ return `https://www.geni.com/people/${given}/${id}`;
4293
+ }
4276
4294
  familySearchLink() {
4277
4295
  const wwwTags = this.get("WWW")?.toList();
4278
4296
  const wwwTag = wwwTags?.find((wwwTag2) => {
@@ -4553,12 +4571,15 @@ var Indi = class extends Common {
4553
4571
  );
4554
4572
  return void 0;
4555
4573
  }
4556
- link(poolId) {
4574
+ link(poolId, treeToken) {
4557
4575
  if (this?.isAncestry()) {
4558
4576
  return this.ancestryLink();
4559
4577
  }
4560
4578
  if (this?.isMyHeritage()) {
4561
- return this.myheritageLink(poolId);
4579
+ return this.myheritageLink(poolId, treeToken);
4580
+ }
4581
+ if (this?.isGeni()) {
4582
+ return this.geniLink();
4562
4583
  }
4563
4584
  if (this?.isFamilySearch()) {
4564
4585
  return this.familySearchLink();
@@ -6311,11 +6332,28 @@ var KinshipTranslatorBasic = class {
6311
6332
  // src/kinship-translator/patterns.hu.ts
6312
6333
  var parentRelationsHu = {
6313
6334
  step: "mostoha",
6314
- foster: "nevelt",
6335
+ foster: { ancestor: "nevel\u0151", other: "nevelt" },
6315
6336
  birth: "v\xE9rszerinti",
6316
6337
  biological: "v\xE9rszerinti",
6317
- adopted: "\xF6r\xF6kbefogadott"
6338
+ adopted: { ancestor: "\xF6r\xF6kbefogad\xF3", other: "\xF6r\xF6kbefogadott" }
6339
+ };
6340
+ var parentRelationPrefix = (relation, ancestor) => {
6341
+ const label = parentRelationsHu[relation];
6342
+ if (!label) {
6343
+ return;
6344
+ }
6345
+ if (typeof label === "string") {
6346
+ return label;
6347
+ }
6348
+ return ancestor ? label.ancestor : label.other;
6318
6349
  };
6350
+ var parentRelationModifiers = [
6351
+ ...new Set(
6352
+ Object.values(parentRelationsHu).flatMap(
6353
+ (label) => typeof label === "string" ? [label] : [label.ancestor, label.other]
6354
+ )
6355
+ )
6356
+ ].join("|");
6319
6357
  var nominativus = {
6320
6358
  apa: { nominativus: "apa", dativus: "apj\xE1nak", possessivus: "apja" },
6321
6359
  anya: { nominativus: "anya", dativus: "anyj\xE1nak", possessivus: "anyja" },
@@ -6393,15 +6431,9 @@ var casesHu = {
6393
6431
  var InLawsHu = {
6394
6432
  "gyermek feles\xE9ge": "meny",
6395
6433
  "gyermek f\xE9rje": "v\u0151",
6396
- [`(f\xE9rj|feles\xE9g) (?<mod1>(${Object.values(parentRelationsHu).join(
6397
- "|"
6398
- )}) )?anyja`]: "any\xF3s",
6399
- [`(f\xE9rj|feles\xE9g) (?<mod1>(${Object.values(parentRelationsHu).join(
6400
- "|"
6401
- )}) )?apja`]: "ap\xF3s",
6402
- [`(f\xE9rj|feles\xE9g) (?<mod1>(${Object.values(parentRelationsHu).join(
6403
- "|"
6404
- )}) )?(f\xE9l)?testv\xE9re`]: (indi) => {
6434
+ [`(f\xE9rj|feles\xE9g) (?<mod1>(${parentRelationModifiers}) )?anyja`]: "any\xF3s",
6435
+ [`(f\xE9rj|feles\xE9g) (?<mod1>(${parentRelationModifiers}) )?apja`]: "ap\xF3s",
6436
+ [`(f\xE9rj|feles\xE9g) (?<mod1>(${parentRelationModifiers}) )?(f\xE9l)?testv\xE9re`]: (indi) => {
6405
6437
  if (indi?.isMale()) {
6406
6438
  return "s\xF3gor";
6407
6439
  }
@@ -6678,7 +6710,12 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
6678
6710
  if (!relation || !this.pathN?.relation) {
6679
6711
  return relation ?? "";
6680
6712
  }
6681
- return `${parentRelationsHu[this.pathN.relation]} ${relation}`;
6713
+ const isAncestor = (this.pathN.level ?? 0) > 0 && (this.pathN.degree ?? 0) === 0;
6714
+ const prefix = parentRelationPrefix(this.pathN.relation, isAncestor);
6715
+ if (!prefix) {
6716
+ return relation;
6717
+ }
6718
+ return `${prefix} ${relation}`;
6682
6719
  }
6683
6720
  };
6684
6721
 
@@ -6878,6 +6915,10 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
6878
6915
  if (!relation || !this.pathN?.relation) {
6879
6916
  return relation ?? "";
6880
6917
  }
6918
+ if (this.pathN.relation === "adopted") {
6919
+ const isAncestor = (this.pathN.level ?? 0) > 0 && (this.pathN.degree ?? 0) === 0;
6920
+ return `${isAncestor ? "adoptive" : "adopted"} ${relation}`;
6921
+ }
6881
6922
  return `${this.pathN.relation} ${relation}`;
6882
6923
  }
6883
6924
  };
@@ -8036,6 +8077,39 @@ var lineal = (level, sex, kind) => {
8036
8077
  }
8037
8078
  return `${L - 1}\u4E16\u306E\u5B6B`;
8038
8079
  };
8080
+ var adoptedRelation = (relation) => {
8081
+ if (relation === "\u7236") {
8082
+ return "\u990A\u7236";
8083
+ }
8084
+ if (relation === "\u6BCD") {
8085
+ return "\u990A\u6BCD";
8086
+ }
8087
+ if (relation === "\u89AA") {
8088
+ return "\u990A\u89AA";
8089
+ }
8090
+ if (relation === "\u606F\u5B50" || relation === "\u5B50") {
8091
+ return "\u990A\u5B50";
8092
+ }
8093
+ if (relation === "\u5A18") {
8094
+ return "\u990A\u5973";
8095
+ }
8096
+ return `\u990A${relation}`;
8097
+ };
8098
+ var fosterRelation = (relation) => {
8099
+ if (relation === "\u7236") {
8100
+ return "\u91CC\u7236";
8101
+ }
8102
+ if (relation === "\u6BCD") {
8103
+ return "\u91CC\u6BCD";
8104
+ }
8105
+ if (relation === "\u89AA") {
8106
+ return "\u91CC\u89AA";
8107
+ }
8108
+ if (relation === "\u606F\u5B50" || relation === "\u5A18" || relation === "\u5B50") {
8109
+ return "\u91CC\u5B50";
8110
+ }
8111
+ return `\u91CC${relation}`;
8112
+ };
8039
8113
  var cousinPlain = (degree) => {
8040
8114
  if (degree <= 1) {
8041
8115
  return "\u3044\u3068\u3053";
@@ -8195,10 +8269,10 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
8195
8269
  return `\u7D99${relation}`;
8196
8270
  }
8197
8271
  if (this.pathN.relation === "adopted") {
8198
- return `\u990A\u5B50\u306E${relation}`;
8272
+ return adoptedRelation(relation);
8199
8273
  }
8200
8274
  if (this.pathN.relation === "foster") {
8201
- return `\u91CC\u89AA\u306E${relation}`;
8275
+ return fosterRelation(relation);
8202
8276
  }
8203
8277
  return relation;
8204
8278
  }
package/dist/index.js CHANGED
@@ -967,7 +967,7 @@ var Common = class _Common {
967
967
  return this.sourStartsWith("ahnenblatt");
968
968
  }
969
969
  isGeni() {
970
- return this.sourStartsWith("geni");
970
+ return this.sourStartsWith("geni.com");
971
971
  }
972
972
  isAncestry() {
973
973
  return this.sourStartsWith("ancestry");
@@ -3669,10 +3669,12 @@ var relativesOnLevelCache = relativesCache("relativesOnLevelCache");
3669
3669
  var relativesOnDegreeCache = relativesCache("relativesOnDegreeCache");
3670
3670
  var Indi = class extends Common {
3671
3671
  toName() {
3672
- return this.get("NAME")?.toValue();
3672
+ const name = this.get("NAME");
3673
+ const value = name?.index(0)?.toValue() ?? name?.toValue();
3674
+ return typeof value === "string" ? value : void 0;
3673
3675
  }
3674
3676
  toNaturalName() {
3675
- return this.get("NAME")?.toValue()?.replaceAll("/", "");
3677
+ return this.toName()?.replaceAll("/", "");
3676
3678
  }
3677
3679
  toList() {
3678
3680
  return new Individuals().concat(
@@ -4217,17 +4219,25 @@ var Indi = class extends Common {
4217
4219
  }
4218
4220
  return list;
4219
4221
  }
4220
- myheritageLink(poolId = 0) {
4222
+ myheritageLink(poolId = 0, treeToken) {
4221
4223
  let www = (this.getFromSourceHeads("SOUR.CORP.value") || this._gedcom?.HEAD?.SOUR?.CORP?.value)?.toLowerCase().replace(/^www\./gi, "");
4222
4224
  if (!www || /treeviz/i.test(www)) {
4223
4225
  www = "myheritage.com";
4224
4226
  }
4227
+ if (!this.id) {
4228
+ return;
4229
+ }
4230
+ const id = Number(this.id.replace(/@|I/g, "")) + poolId;
4231
+ if (!Number.isFinite(id)) {
4232
+ return;
4233
+ }
4234
+ const slug = this.toNaturalName()?.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "") || String(id);
4235
+ if (treeToken) {
4236
+ return `https://www.${www}/profile-${treeToken}-${id}/${slug}`;
4237
+ }
4225
4238
  const site = this.getMyHeritageTreeId();
4226
- const file = (this.getFromSourceHeads("FILE.value") || this._gedcom?.HEAD?.get("FILE")?.toValue())?.match(/Exported by MyHeritage.com from .+ in (?<site>.+) on .+$/)?.groups?.site;
4227
- const normalizedFile = file?.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/[^a-z0-9]+/g, "-");
4228
- if (normalizedFile && this.id) {
4229
- const id = Number(this.id.replace(/@|I/g, "")) + poolId;
4230
- return `https://www.${www}/site-family-tree-${site}/${normalizedFile}#!profile-${id}-info`;
4239
+ if (site) {
4240
+ return `https://www.${www}/person-${id}_${site}_${site}/${slug}`;
4231
4241
  }
4232
4242
  }
4233
4243
  myheritageMedia() {
@@ -4276,6 +4286,14 @@ var Indi = class extends Common {
4276
4286
  });
4277
4287
  return list;
4278
4288
  }
4289
+ geniLink() {
4290
+ if (!this.id) {
4291
+ return;
4292
+ }
4293
+ const id = this.id.replace(/@|I/g, "");
4294
+ const given = this.toNaturalName()?.trim().split(/\s+/)[0] || id;
4295
+ return `https://www.geni.com/people/${given}/${id}`;
4296
+ }
4279
4297
  familySearchLink() {
4280
4298
  const wwwTags = this.get("WWW")?.toList();
4281
4299
  const wwwTag = wwwTags?.find((wwwTag2) => {
@@ -4556,12 +4574,15 @@ var Indi = class extends Common {
4556
4574
  );
4557
4575
  return void 0;
4558
4576
  }
4559
- link(poolId) {
4577
+ link(poolId, treeToken) {
4560
4578
  if (this?.isAncestry()) {
4561
4579
  return this.ancestryLink();
4562
4580
  }
4563
4581
  if (this?.isMyHeritage()) {
4564
- return this.myheritageLink(poolId);
4582
+ return this.myheritageLink(poolId, treeToken);
4583
+ }
4584
+ if (this?.isGeni()) {
4585
+ return this.geniLink();
4565
4586
  }
4566
4587
  if (this?.isFamilySearch()) {
4567
4588
  return this.familySearchLink();
@@ -6321,11 +6342,28 @@ var KinshipTranslatorBasic = class {
6321
6342
  // src/kinship-translator/patterns.hu.ts
6322
6343
  var parentRelationsHu = {
6323
6344
  step: "mostoha",
6324
- foster: "nevelt",
6345
+ foster: { ancestor: "nevel\u0151", other: "nevelt" },
6325
6346
  birth: "v\xE9rszerinti",
6326
6347
  biological: "v\xE9rszerinti",
6327
- adopted: "\xF6r\xF6kbefogadott"
6348
+ adopted: { ancestor: "\xF6r\xF6kbefogad\xF3", other: "\xF6r\xF6kbefogadott" }
6349
+ };
6350
+ var parentRelationPrefix = (relation, ancestor) => {
6351
+ const label = parentRelationsHu[relation];
6352
+ if (!label) {
6353
+ return;
6354
+ }
6355
+ if (typeof label === "string") {
6356
+ return label;
6357
+ }
6358
+ return ancestor ? label.ancestor : label.other;
6328
6359
  };
6360
+ var parentRelationModifiers = [
6361
+ ...new Set(
6362
+ Object.values(parentRelationsHu).flatMap(
6363
+ (label) => typeof label === "string" ? [label] : [label.ancestor, label.other]
6364
+ )
6365
+ )
6366
+ ].join("|");
6329
6367
  var nominativus = {
6330
6368
  apa: { nominativus: "apa", dativus: "apj\xE1nak", possessivus: "apja" },
6331
6369
  anya: { nominativus: "anya", dativus: "anyj\xE1nak", possessivus: "anyja" },
@@ -6403,15 +6441,9 @@ var casesHu = {
6403
6441
  var InLawsHu = {
6404
6442
  "gyermek feles\xE9ge": "meny",
6405
6443
  "gyermek f\xE9rje": "v\u0151",
6406
- [`(f\xE9rj|feles\xE9g) (?<mod1>(${Object.values(parentRelationsHu).join(
6407
- "|"
6408
- )}) )?anyja`]: "any\xF3s",
6409
- [`(f\xE9rj|feles\xE9g) (?<mod1>(${Object.values(parentRelationsHu).join(
6410
- "|"
6411
- )}) )?apja`]: "ap\xF3s",
6412
- [`(f\xE9rj|feles\xE9g) (?<mod1>(${Object.values(parentRelationsHu).join(
6413
- "|"
6414
- )}) )?(f\xE9l)?testv\xE9re`]: (indi) => {
6444
+ [`(f\xE9rj|feles\xE9g) (?<mod1>(${parentRelationModifiers}) )?anyja`]: "any\xF3s",
6445
+ [`(f\xE9rj|feles\xE9g) (?<mod1>(${parentRelationModifiers}) )?apja`]: "ap\xF3s",
6446
+ [`(f\xE9rj|feles\xE9g) (?<mod1>(${parentRelationModifiers}) )?(f\xE9l)?testv\xE9re`]: (indi) => {
6415
6447
  if (indi?.isMale()) {
6416
6448
  return "s\xF3gor";
6417
6449
  }
@@ -6688,7 +6720,12 @@ var KinshipTranslatorHU = class extends KinshipTranslatorBasic {
6688
6720
  if (!relation || !this.pathN?.relation) {
6689
6721
  return relation ?? "";
6690
6722
  }
6691
- return `${parentRelationsHu[this.pathN.relation]} ${relation}`;
6723
+ const isAncestor = (this.pathN.level ?? 0) > 0 && (this.pathN.degree ?? 0) === 0;
6724
+ const prefix = parentRelationPrefix(this.pathN.relation, isAncestor);
6725
+ if (!prefix) {
6726
+ return relation;
6727
+ }
6728
+ return `${prefix} ${relation}`;
6692
6729
  }
6693
6730
  };
6694
6731
 
@@ -6888,6 +6925,10 @@ var KinshipTranslatorEn = class extends KinshipTranslatorBasic {
6888
6925
  if (!relation || !this.pathN?.relation) {
6889
6926
  return relation ?? "";
6890
6927
  }
6928
+ if (this.pathN.relation === "adopted") {
6929
+ const isAncestor = (this.pathN.level ?? 0) > 0 && (this.pathN.degree ?? 0) === 0;
6930
+ return `${isAncestor ? "adoptive" : "adopted"} ${relation}`;
6931
+ }
6891
6932
  return `${this.pathN.relation} ${relation}`;
6892
6933
  }
6893
6934
  };
@@ -8046,6 +8087,39 @@ var lineal = (level, sex, kind) => {
8046
8087
  }
8047
8088
  return `${L - 1}\u4E16\u306E\u5B6B`;
8048
8089
  };
8090
+ var adoptedRelation = (relation) => {
8091
+ if (relation === "\u7236") {
8092
+ return "\u990A\u7236";
8093
+ }
8094
+ if (relation === "\u6BCD") {
8095
+ return "\u990A\u6BCD";
8096
+ }
8097
+ if (relation === "\u89AA") {
8098
+ return "\u990A\u89AA";
8099
+ }
8100
+ if (relation === "\u606F\u5B50" || relation === "\u5B50") {
8101
+ return "\u990A\u5B50";
8102
+ }
8103
+ if (relation === "\u5A18") {
8104
+ return "\u990A\u5973";
8105
+ }
8106
+ return `\u990A${relation}`;
8107
+ };
8108
+ var fosterRelation = (relation) => {
8109
+ if (relation === "\u7236") {
8110
+ return "\u91CC\u7236";
8111
+ }
8112
+ if (relation === "\u6BCD") {
8113
+ return "\u91CC\u6BCD";
8114
+ }
8115
+ if (relation === "\u89AA") {
8116
+ return "\u91CC\u89AA";
8117
+ }
8118
+ if (relation === "\u606F\u5B50" || relation === "\u5A18" || relation === "\u5B50") {
8119
+ return "\u91CC\u5B50";
8120
+ }
8121
+ return `\u91CC${relation}`;
8122
+ };
8049
8123
  var cousinPlain = (degree) => {
8050
8124
  if (degree <= 1) {
8051
8125
  return "\u3044\u3068\u3053";
@@ -8205,10 +8279,10 @@ var KinshipTranslatorJa = class extends KinshipTranslatorBasic {
8205
8279
  return `\u7D99${relation}`;
8206
8280
  }
8207
8281
  if (this.pathN.relation === "adopted") {
8208
- return `\u990A\u5B50\u306E${relation}`;
8282
+ return adoptedRelation(relation);
8209
8283
  }
8210
8284
  if (this.pathN.relation === "foster") {
8211
- return `\u91CC\u89AA\u306E${relation}`;
8285
+ return fosterRelation(relation);
8212
8286
  }
8213
8287
  return relation;
8214
8288
  }
@@ -9502,7 +9576,8 @@ var extractGedzip = async (data) => {
9502
9576
  if (!preferred) {
9503
9577
  throw new Error("No .ged file found in the archive.");
9504
9578
  }
9505
- const gedcomText = await preferred.async("string");
9579
+ const gedcomBytes = await preferred.async("uint8array");
9580
+ const gedcomText = new TextDecoder("utf-8").decode(gedcomBytes);
9506
9581
  const mediaEntries = [];
9507
9582
  for (const entry of entries) {
9508
9583
  const path = normalizeZipPath(entry.name);
@@ -10076,7 +10151,7 @@ var collectExtensionTagsFrom = (node, into = /* @__PURE__ */ new Set()) => {
10076
10151
  // package.json
10077
10152
  var package_default = {
10078
10153
  name: "@treeviz/gedcom-parser",
10079
- version: "2.1.18"};
10154
+ version: "2.1.22"};
10080
10155
 
10081
10156
  // src/utils/get-product-details.ts
10082
10157
  var isDevelopment = () => {
@@ -11489,6 +11564,7 @@ var GedcomTree = {
11489
11564
  return this.parseHierarchy(content, options);
11490
11565
  },
11491
11566
  parseHierarchy: function(content, options) {
11567
+ content = content.replace(/^\uFEFF+/, "");
11492
11568
  const { settings, filename = "" } = options ?? {};
11493
11569
  const { linkedPersons = "skip", linkingKey } = settings ?? {};
11494
11570
  const gedcom = createGedCom();