@treeviz/gedcom-parser 1.0.18 → 1.0.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- export { ao as Common, az as CommonDate, aQ as CommonName, aS as CommonNote, an as CustomTags, am as Existed, aC as Fam, aj as FamType, aE as Families, aL as FamilySearchMatch, aM as FamilySearchSource, aF as GedCom, ak as GedComType, a3 as GenealogyMember, aa as GenerationIndiType, a9 as GenerationSpouseType, aK as Indi, a5 as IndiGenealogy, ab as IndiGenealogyGenerations, ac as IndiGenealogyResult, a6 as IndiMarker, a4 as IndiTree, a1 as IndiType, aO as Individuals, aP as List, a8 as MemberMain, a7 as MemberSide, ad as NonNullIndiGenealogyResult, aU as Obje, al as ObjeType, aW as Objects, af as Path, ae as PathItem, Z as ProxyOriginal, ai as Queue, ah as QueueItem, ag as ReducedPath, aX as Repo, $ as RepoType, aZ as Repositories, a_ as Sour, _ as SourType, b0 as Sources, b1 as Subm, a0 as SubmType, b3 as Submitters, a2 as TreeMember, aq as createCommon, aA as createCommonDate, aR as createCommonName, aT as createCommonNote, aD as createFam, aG as createGedCom, aN as createIndi, aV as createObje, ap as createProxy, aY as createRepo, a$ as createSour, b2 as createSubm, av as getListTag, aw as getValidKey, at as getValidKeys, au as getValidTag, ay as idGetter, aB as isCommonDate, aH as isGedcomString, ax as isId, ar as isOnlyMainProp, as as isValidKey, aJ as mergeGedcoms, aI as validateGedcomContent } from '../index-DFTsiD5J.js';
1
+ export { ao as Common, az as CommonDate, aQ as CommonName, aS as CommonNote, an as CustomTags, am as Existed, aC as Fam, aj as FamType, aE as Families, aL as FamilySearchMatch, aM as FamilySearchSource, aF as GedCom, ak as GedComType, a3 as GenealogyMember, aa as GenerationIndiType, a9 as GenerationSpouseType, aK as Indi, a5 as IndiGenealogy, ab as IndiGenealogyGenerations, ac as IndiGenealogyResult, a6 as IndiMarker, a4 as IndiTree, a1 as IndiType, aO as Individuals, aP as List, a8 as MemberMain, a7 as MemberSide, ad as NonNullIndiGenealogyResult, aU as Obje, al as ObjeType, aW as Objects, af as Path, ae as PathItem, Z as ProxyOriginal, ai as Queue, ah as QueueItem, ag as ReducedPath, aX as Repo, $ as RepoType, aZ as Repositories, a_ as Sour, _ as SourType, b0 as Sources, b1 as Subm, a0 as SubmType, b3 as Submitters, a2 as TreeMember, aq as createCommon, aA as createCommonDate, aR as createCommonName, aT as createCommonNote, aD as createFam, aG as createGedCom, aN as createIndi, aV as createObje, ap as createProxy, aY as createRepo, a$ as createSour, b2 as createSubm, av as getListTag, aw as getValidKey, at as getValidKeys, au as getValidTag, ay as idGetter, aB as isCommonDate, aH as isGedcomString, ax as isId, ar as isOnlyMainProp, as as isValidKey, aJ as mergeGedcoms, aI as validateGedcomContent } from '../index-DOapi7nN.js';
2
2
  import 'date-fns';
@@ -4440,13 +4440,28 @@ var Indi = class extends Common {
4440
4440
  return list;
4441
4441
  }
4442
4442
  familySearchLink() {
4443
+ const wwwTags = this.get("WWW")?.toList();
4444
+ const wwwTag = wwwTags?.find((wwwTag2) => {
4445
+ const fsSourceMarker = wwwTag2.get("_IS_FS")?.toValue();
4446
+ return fsSourceMarker === "Y";
4447
+ })?.toValue();
4448
+ if (wwwTag) {
4449
+ return wwwTag;
4450
+ }
4443
4451
  return this.get("_FS_LINK")?.toValue();
4444
4452
  }
4445
4453
  hasFamilySearchMatches() {
4454
+ const matchTags = this.get("MATCH")?.toList();
4455
+ if (matchTags && matchTags.length > 0) {
4456
+ return true;
4457
+ }
4446
4458
  return this.get("_FS_MATCH") !== void 0;
4447
4459
  }
4448
4460
  getFamilySearchMatches() {
4449
- const matchTags = this.get("_FS_MATCH")?.toList();
4461
+ let matchTags = this.get("MATCH")?.toList();
4462
+ if (!matchTags?.length) {
4463
+ matchTags = this.get("_FS_MATCH")?.toList();
4464
+ }
4450
4465
  if (!matchTags?.length) {
4451
4466
  return [];
4452
4467
  }
@@ -4473,11 +4488,25 @@ var Indi = class extends Common {
4473
4488
  });
4474
4489
  }
4475
4490
  hasFamilySearchSources() {
4491
+ const sourTags = this.get("SOUR")?.toList();
4492
+ const sourTag = sourTags?.find((sourTag2) => {
4493
+ const fsSourceMarker = sourTag2.get("_IS_FS")?.toValue();
4494
+ return fsSourceMarker === "Y";
4495
+ });
4496
+ if (sourTag) {
4497
+ return true;
4498
+ }
4476
4499
  return this.get("_FS_SOUR") !== void 0;
4477
4500
  }
4478
4501
  getFamilySearchSources() {
4479
- const sourceTags = this.get("_FS_SOUR")?.toList();
4480
- if (!sourceTags?.length) {
4502
+ let sourceTags = this.get("SOUR")?.toList()?.filter((sourTag) => {
4503
+ const fsSourceMarker = sourTag.get("_IS_FS")?.toValue();
4504
+ return fsSourceMarker === "Y";
4505
+ });
4506
+ if (!sourceTags || !sourceTags.length) {
4507
+ sourceTags = this.get("_FS_SOUR")?.toList();
4508
+ }
4509
+ if (!sourceTags || !sourceTags.length) {
4481
4510
  return [];
4482
4511
  }
4483
4512
  return sourceTags.map((sourceTag) => {
@@ -4597,6 +4626,52 @@ var Indi = class extends Common {
4597
4626
  const deathEvent = this.get("DEAT")?.index(0);
4598
4627
  return deathEvent?.PLAC?.value;
4599
4628
  }
4629
+ /**
4630
+ * Get all marriage places for this individual
4631
+ * @returns Array of marriage place strings (may include undefined for marriages without place)
4632
+ */
4633
+ getMarriagePlaces() {
4634
+ const marriagePlaces = [];
4635
+ const families = this.getFamilies("FAMS");
4636
+ families.forEach((family) => {
4637
+ const marrEvents = (family?.MARR?.toList().values() ?? []).filter(
4638
+ Boolean
4639
+ );
4640
+ if (marrEvents.length === 0) {
4641
+ marriagePlaces.push(void 0);
4642
+ } else {
4643
+ marrEvents.forEach((marrEvent) => {
4644
+ const marriageEventDetail = marrEvent;
4645
+ const marriagePlace = marriageEventDetail?.PLAC?.value;
4646
+ marriagePlaces.push(marriagePlace);
4647
+ });
4648
+ }
4649
+ });
4650
+ return marriagePlaces;
4651
+ }
4652
+ /**
4653
+ * Get all marriage dates for this individual
4654
+ * @returns Array of marriage date strings (may include undefined for marriages without date)
4655
+ */
4656
+ getMarriageDates() {
4657
+ const marriageDates = [];
4658
+ const families = this.getFamilies("FAMS");
4659
+ families.forEach((family) => {
4660
+ const marrEvents = (family?.MARR?.toList().values() ?? []).filter(
4661
+ Boolean
4662
+ );
4663
+ if (marrEvents.length === 0) {
4664
+ marriageDates.push(void 0);
4665
+ } else {
4666
+ marrEvents.forEach((marrEvent) => {
4667
+ const marriageEventDetail = marrEvent;
4668
+ const marriageDate = marriageEventDetail?.DATE?.value;
4669
+ marriageDates.push(marriageDate);
4670
+ });
4671
+ }
4672
+ });
4673
+ return marriageDates;
4674
+ }
4600
4675
  isDead() {
4601
4676
  return this.get("DEAT.DATE")?.toValue() !== void 0 || this.get("DEAT.PLAC")?.toValue() !== void 0;
4602
4677
  }
@@ -5748,7 +5823,7 @@ var createIndi = (gedcom, id, main, parent) => {
5748
5823
 
5749
5824
  // package.json
5750
5825
  var package_default = {
5751
- version: "1.0.18"};
5826
+ version: "1.0.20"};
5752
5827
 
5753
5828
  // src/utils/get-product-details.ts
5754
5829
  var getVersion = () => package_default.version;
package/dist/cli/index.js CHANGED
@@ -2006,13 +2006,28 @@ var Indi = class extends Common {
2006
2006
  return list;
2007
2007
  }
2008
2008
  familySearchLink() {
2009
+ const wwwTags = this.get("WWW")?.toList();
2010
+ const wwwTag = wwwTags?.find((wwwTag2) => {
2011
+ const fsSourceMarker = wwwTag2.get("_IS_FS")?.toValue();
2012
+ return fsSourceMarker === "Y";
2013
+ })?.toValue();
2014
+ if (wwwTag) {
2015
+ return wwwTag;
2016
+ }
2009
2017
  return this.get("_FS_LINK")?.toValue();
2010
2018
  }
2011
2019
  hasFamilySearchMatches() {
2020
+ const matchTags = this.get("MATCH")?.toList();
2021
+ if (matchTags && matchTags.length > 0) {
2022
+ return true;
2023
+ }
2012
2024
  return this.get("_FS_MATCH") !== void 0;
2013
2025
  }
2014
2026
  getFamilySearchMatches() {
2015
- const matchTags = this.get("_FS_MATCH")?.toList();
2027
+ let matchTags = this.get("MATCH")?.toList();
2028
+ if (!matchTags?.length) {
2029
+ matchTags = this.get("_FS_MATCH")?.toList();
2030
+ }
2016
2031
  if (!matchTags?.length) {
2017
2032
  return [];
2018
2033
  }
@@ -2039,11 +2054,25 @@ var Indi = class extends Common {
2039
2054
  });
2040
2055
  }
2041
2056
  hasFamilySearchSources() {
2057
+ const sourTags = this.get("SOUR")?.toList();
2058
+ const sourTag = sourTags?.find((sourTag2) => {
2059
+ const fsSourceMarker = sourTag2.get("_IS_FS")?.toValue();
2060
+ return fsSourceMarker === "Y";
2061
+ });
2062
+ if (sourTag) {
2063
+ return true;
2064
+ }
2042
2065
  return this.get("_FS_SOUR") !== void 0;
2043
2066
  }
2044
2067
  getFamilySearchSources() {
2045
- const sourceTags = this.get("_FS_SOUR")?.toList();
2046
- if (!sourceTags?.length) {
2068
+ let sourceTags = this.get("SOUR")?.toList()?.filter((sourTag) => {
2069
+ const fsSourceMarker = sourTag.get("_IS_FS")?.toValue();
2070
+ return fsSourceMarker === "Y";
2071
+ });
2072
+ if (!sourceTags || !sourceTags.length) {
2073
+ sourceTags = this.get("_FS_SOUR")?.toList();
2074
+ }
2075
+ if (!sourceTags || !sourceTags.length) {
2047
2076
  return [];
2048
2077
  }
2049
2078
  return sourceTags.map((sourceTag) => {
@@ -2163,6 +2192,52 @@ var Indi = class extends Common {
2163
2192
  const deathEvent = this.get("DEAT")?.index(0);
2164
2193
  return deathEvent?.PLAC?.value;
2165
2194
  }
2195
+ /**
2196
+ * Get all marriage places for this individual
2197
+ * @returns Array of marriage place strings (may include undefined for marriages without place)
2198
+ */
2199
+ getMarriagePlaces() {
2200
+ const marriagePlaces = [];
2201
+ const families = this.getFamilies("FAMS");
2202
+ families.forEach((family) => {
2203
+ const marrEvents = (family?.MARR?.toList().values() ?? []).filter(
2204
+ Boolean
2205
+ );
2206
+ if (marrEvents.length === 0) {
2207
+ marriagePlaces.push(void 0);
2208
+ } else {
2209
+ marrEvents.forEach((marrEvent) => {
2210
+ const marriageEventDetail = marrEvent;
2211
+ const marriagePlace = marriageEventDetail?.PLAC?.value;
2212
+ marriagePlaces.push(marriagePlace);
2213
+ });
2214
+ }
2215
+ });
2216
+ return marriagePlaces;
2217
+ }
2218
+ /**
2219
+ * Get all marriage dates for this individual
2220
+ * @returns Array of marriage date strings (may include undefined for marriages without date)
2221
+ */
2222
+ getMarriageDates() {
2223
+ const marriageDates = [];
2224
+ const families = this.getFamilies("FAMS");
2225
+ families.forEach((family) => {
2226
+ const marrEvents = (family?.MARR?.toList().values() ?? []).filter(
2227
+ Boolean
2228
+ );
2229
+ if (marrEvents.length === 0) {
2230
+ marriageDates.push(void 0);
2231
+ } else {
2232
+ marrEvents.forEach((marrEvent) => {
2233
+ const marriageEventDetail = marrEvent;
2234
+ const marriageDate = marriageEventDetail?.DATE?.value;
2235
+ marriageDates.push(marriageDate);
2236
+ });
2237
+ }
2238
+ });
2239
+ return marriageDates;
2240
+ }
2166
2241
  isDead() {
2167
2242
  return this.get("DEAT.DATE")?.toValue() !== void 0 || this.get("DEAT.PLAC")?.toValue() !== void 0;
2168
2243
  }
@@ -5741,7 +5816,7 @@ var Families = class _Families extends List {
5741
5816
 
5742
5817
  // package.json
5743
5818
  var package_default = {
5744
- version: "1.0.18"};
5819
+ version: "1.0.20"};
5745
5820
 
5746
5821
  // src/utils/get-product-details.ts
5747
5822
  var isDevelopment = () => {
@@ -1,4 +1,4 @@
1
- import { x as Filter, y as RequiredFilter, W as RelationType, X as PartnerType, A as Order, K as NameOrder, B as OrderIterator, a1 as IndiType, n as IndiKey } from '../index-DFTsiD5J.js';
1
+ import { x as Filter, y as RequiredFilter, W as RelationType, X as PartnerType, A as Order, K as NameOrder, B as OrderIterator, a1 as IndiType, n as IndiKey } from '../index-DOapi7nN.js';
2
2
  import 'date-fns';
3
3
 
4
4
  /**
@@ -2601,13 +2601,28 @@ var Indi = class extends Common {
2601
2601
  return list;
2602
2602
  }
2603
2603
  familySearchLink() {
2604
+ const wwwTags = this.get("WWW")?.toList();
2605
+ const wwwTag = wwwTags?.find((wwwTag2) => {
2606
+ const fsSourceMarker = wwwTag2.get("_IS_FS")?.toValue();
2607
+ return fsSourceMarker === "Y";
2608
+ })?.toValue();
2609
+ if (wwwTag) {
2610
+ return wwwTag;
2611
+ }
2604
2612
  return this.get("_FS_LINK")?.toValue();
2605
2613
  }
2606
2614
  hasFamilySearchMatches() {
2615
+ const matchTags = this.get("MATCH")?.toList();
2616
+ if (matchTags && matchTags.length > 0) {
2617
+ return true;
2618
+ }
2607
2619
  return this.get("_FS_MATCH") !== void 0;
2608
2620
  }
2609
2621
  getFamilySearchMatches() {
2610
- const matchTags = this.get("_FS_MATCH")?.toList();
2622
+ let matchTags = this.get("MATCH")?.toList();
2623
+ if (!matchTags?.length) {
2624
+ matchTags = this.get("_FS_MATCH")?.toList();
2625
+ }
2611
2626
  if (!matchTags?.length) {
2612
2627
  return [];
2613
2628
  }
@@ -2634,11 +2649,25 @@ var Indi = class extends Common {
2634
2649
  });
2635
2650
  }
2636
2651
  hasFamilySearchSources() {
2652
+ const sourTags = this.get("SOUR")?.toList();
2653
+ const sourTag = sourTags?.find((sourTag2) => {
2654
+ const fsSourceMarker = sourTag2.get("_IS_FS")?.toValue();
2655
+ return fsSourceMarker === "Y";
2656
+ });
2657
+ if (sourTag) {
2658
+ return true;
2659
+ }
2637
2660
  return this.get("_FS_SOUR") !== void 0;
2638
2661
  }
2639
2662
  getFamilySearchSources() {
2640
- const sourceTags = this.get("_FS_SOUR")?.toList();
2641
- if (!sourceTags?.length) {
2663
+ let sourceTags = this.get("SOUR")?.toList()?.filter((sourTag) => {
2664
+ const fsSourceMarker = sourTag.get("_IS_FS")?.toValue();
2665
+ return fsSourceMarker === "Y";
2666
+ });
2667
+ if (!sourceTags || !sourceTags.length) {
2668
+ sourceTags = this.get("_FS_SOUR")?.toList();
2669
+ }
2670
+ if (!sourceTags || !sourceTags.length) {
2642
2671
  return [];
2643
2672
  }
2644
2673
  return sourceTags.map((sourceTag) => {
@@ -2758,6 +2787,52 @@ var Indi = class extends Common {
2758
2787
  const deathEvent = this.get("DEAT")?.index(0);
2759
2788
  return deathEvent?.PLAC?.value;
2760
2789
  }
2790
+ /**
2791
+ * Get all marriage places for this individual
2792
+ * @returns Array of marriage place strings (may include undefined for marriages without place)
2793
+ */
2794
+ getMarriagePlaces() {
2795
+ const marriagePlaces = [];
2796
+ const families = this.getFamilies("FAMS");
2797
+ families.forEach((family) => {
2798
+ const marrEvents = (family?.MARR?.toList().values() ?? []).filter(
2799
+ Boolean
2800
+ );
2801
+ if (marrEvents.length === 0) {
2802
+ marriagePlaces.push(void 0);
2803
+ } else {
2804
+ marrEvents.forEach((marrEvent) => {
2805
+ const marriageEventDetail = marrEvent;
2806
+ const marriagePlace = marriageEventDetail?.PLAC?.value;
2807
+ marriagePlaces.push(marriagePlace);
2808
+ });
2809
+ }
2810
+ });
2811
+ return marriagePlaces;
2812
+ }
2813
+ /**
2814
+ * Get all marriage dates for this individual
2815
+ * @returns Array of marriage date strings (may include undefined for marriages without date)
2816
+ */
2817
+ getMarriageDates() {
2818
+ const marriageDates = [];
2819
+ const families = this.getFamilies("FAMS");
2820
+ families.forEach((family) => {
2821
+ const marrEvents = (family?.MARR?.toList().values() ?? []).filter(
2822
+ Boolean
2823
+ );
2824
+ if (marrEvents.length === 0) {
2825
+ marriageDates.push(void 0);
2826
+ } else {
2827
+ marrEvents.forEach((marrEvent) => {
2828
+ const marriageEventDetail = marrEvent;
2829
+ const marriageDate = marriageEventDetail?.DATE?.value;
2830
+ marriageDates.push(marriageDate);
2831
+ });
2832
+ }
2833
+ });
2834
+ return marriageDates;
2835
+ }
2761
2836
  isDead() {
2762
2837
  return this.get("DEAT.DATE")?.toValue() !== void 0 || this.get("DEAT.PLAC")?.toValue() !== void 0;
2763
2838
  }
@@ -1,6 +1,6 @@
1
- import { I as ICacheManager, P as PlaceParts } from '../place-parser-BsrTDadc.js';
1
+ import { I as ICacheManager, P as PlaceParts } from '../place-parser-CIplmmDd.js';
2
2
  import { Locale } from 'date-fns';
3
- import { a1 as IndiType, n as IndiKey, L as Language } from '../index-DFTsiD5J.js';
3
+ import { a1 as IndiType, n as IndiKey, L as Language } from '../index-DOapi7nN.js';
4
4
 
5
5
  /**
6
6
  * Factory function type for creating cache manager instances.
@@ -3028,13 +3028,28 @@ var Indi = class extends Common {
3028
3028
  return list;
3029
3029
  }
3030
3030
  familySearchLink() {
3031
+ const wwwTags = this.get("WWW")?.toList();
3032
+ const wwwTag = wwwTags?.find((wwwTag2) => {
3033
+ const fsSourceMarker = wwwTag2.get("_IS_FS")?.toValue();
3034
+ return fsSourceMarker === "Y";
3035
+ })?.toValue();
3036
+ if (wwwTag) {
3037
+ return wwwTag;
3038
+ }
3031
3039
  return this.get("_FS_LINK")?.toValue();
3032
3040
  }
3033
3041
  hasFamilySearchMatches() {
3042
+ const matchTags = this.get("MATCH")?.toList();
3043
+ if (matchTags && matchTags.length > 0) {
3044
+ return true;
3045
+ }
3034
3046
  return this.get("_FS_MATCH") !== void 0;
3035
3047
  }
3036
3048
  getFamilySearchMatches() {
3037
- const matchTags = this.get("_FS_MATCH")?.toList();
3049
+ let matchTags = this.get("MATCH")?.toList();
3050
+ if (!matchTags?.length) {
3051
+ matchTags = this.get("_FS_MATCH")?.toList();
3052
+ }
3038
3053
  if (!matchTags?.length) {
3039
3054
  return [];
3040
3055
  }
@@ -3061,11 +3076,25 @@ var Indi = class extends Common {
3061
3076
  });
3062
3077
  }
3063
3078
  hasFamilySearchSources() {
3079
+ const sourTags = this.get("SOUR")?.toList();
3080
+ const sourTag = sourTags?.find((sourTag2) => {
3081
+ const fsSourceMarker = sourTag2.get("_IS_FS")?.toValue();
3082
+ return fsSourceMarker === "Y";
3083
+ });
3084
+ if (sourTag) {
3085
+ return true;
3086
+ }
3064
3087
  return this.get("_FS_SOUR") !== void 0;
3065
3088
  }
3066
3089
  getFamilySearchSources() {
3067
- const sourceTags = this.get("_FS_SOUR")?.toList();
3068
- if (!sourceTags?.length) {
3090
+ let sourceTags = this.get("SOUR")?.toList()?.filter((sourTag) => {
3091
+ const fsSourceMarker = sourTag.get("_IS_FS")?.toValue();
3092
+ return fsSourceMarker === "Y";
3093
+ });
3094
+ if (!sourceTags || !sourceTags.length) {
3095
+ sourceTags = this.get("_FS_SOUR")?.toList();
3096
+ }
3097
+ if (!sourceTags || !sourceTags.length) {
3069
3098
  return [];
3070
3099
  }
3071
3100
  return sourceTags.map((sourceTag) => {
@@ -3185,6 +3214,52 @@ var Indi = class extends Common {
3185
3214
  const deathEvent = this.get("DEAT")?.index(0);
3186
3215
  return deathEvent?.PLAC?.value;
3187
3216
  }
3217
+ /**
3218
+ * Get all marriage places for this individual
3219
+ * @returns Array of marriage place strings (may include undefined for marriages without place)
3220
+ */
3221
+ getMarriagePlaces() {
3222
+ const marriagePlaces = [];
3223
+ const families = this.getFamilies("FAMS");
3224
+ families.forEach((family) => {
3225
+ const marrEvents = (family?.MARR?.toList().values() ?? []).filter(
3226
+ Boolean
3227
+ );
3228
+ if (marrEvents.length === 0) {
3229
+ marriagePlaces.push(void 0);
3230
+ } else {
3231
+ marrEvents.forEach((marrEvent) => {
3232
+ const marriageEventDetail = marrEvent;
3233
+ const marriagePlace = marriageEventDetail?.PLAC?.value;
3234
+ marriagePlaces.push(marriagePlace);
3235
+ });
3236
+ }
3237
+ });
3238
+ return marriagePlaces;
3239
+ }
3240
+ /**
3241
+ * Get all marriage dates for this individual
3242
+ * @returns Array of marriage date strings (may include undefined for marriages without date)
3243
+ */
3244
+ getMarriageDates() {
3245
+ const marriageDates = [];
3246
+ const families = this.getFamilies("FAMS");
3247
+ families.forEach((family) => {
3248
+ const marrEvents = (family?.MARR?.toList().values() ?? []).filter(
3249
+ Boolean
3250
+ );
3251
+ if (marrEvents.length === 0) {
3252
+ marriageDates.push(void 0);
3253
+ } else {
3254
+ marrEvents.forEach((marrEvent) => {
3255
+ const marriageEventDetail = marrEvent;
3256
+ const marriageDate = marriageEventDetail?.DATE?.value;
3257
+ marriageDates.push(marriageDate);
3258
+ });
3259
+ }
3260
+ });
3261
+ return marriageDates;
3262
+ }
3188
3263
  isDead() {
3189
3264
  return this.get("DEAT.DATE")?.toValue() !== void 0 || this.get("DEAT.PLAC")?.toValue() !== void 0;
3190
3265
  }
@@ -849,7 +849,7 @@ declare class Indi extends Common<string, IndiKey> implements IIndi {
849
849
  ancestryMedia(namespace?: string | number): Promise<MediaList>;
850
850
  myheritageLink(poolId?: number): string;
851
851
  myheritageMedia(): MediaList;
852
- familySearchLink(): string | undefined;
852
+ familySearchLink(): string;
853
853
  hasFamilySearchMatches(): boolean;
854
854
  getFamilySearchMatches(): FamilySearchMatch[];
855
855
  hasFamilySearchSources(): boolean;
@@ -863,6 +863,16 @@ declare class Indi extends Common<string, IndiKey> implements IIndi {
863
863
  getDeathDate(showDays?: boolean, shortNote?: boolean, showNote?: boolean): string;
864
864
  getBirthPlace(): string;
865
865
  getDeathPlace(): string;
866
+ /**
867
+ * Get all marriage places for this individual
868
+ * @returns Array of marriage place strings (may include undefined for marriages without place)
869
+ */
870
+ getMarriagePlaces(): Array<string | undefined>;
871
+ /**
872
+ * Get all marriage dates for this individual
873
+ * @returns Array of marriage date strings (may include undefined for marriages without date)
874
+ */
875
+ getMarriageDates(): Array<string | undefined>;
866
876
  isDead(): boolean;
867
877
  isEmpty(): boolean;
868
878
  isUnknownAncestor(): boolean;
@@ -1265,7 +1275,9 @@ interface Tags {
1265
1275
  _FS_ID?: Common;
1266
1276
  _FS_MATCH?: Common;
1267
1277
  _FS_SOUR?: Common;
1278
+ _IS_FS?: Common<"Y" | "N">;
1268
1279
  _IS_ORPHAN_FAMILY?: Common<"Y" | "N">;
1280
+ MATCH?: Common;
1269
1281
  SCORE?: Common;
1270
1282
  TEXT?: Common;
1271
1283
  REF?: Common;
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  export { ACCEPTED_DATE_FORMATS, ACCEPTED_DATE_FORMATS_REGEX, GedcomTree, commonDateFormatter, create, dateFormatter, GedcomTree as default, getAllProp, getFamilyWith, getName, getRawSize, getVersion, hungarianOrdinalize, implemented, isDevelopment, marriageDateFormatter, nameFormatter, notImplemented, noteDateFormatter, ordinalize, placeTranslator, setNestedGroup } from './utils/index.js';
2
2
  export { CacheManagerFactory, DateLocaleProvider, I18nProvider, KinshipTranslatorConstructor, PlaceParserFunction, PlaceTranslatorFunction, getCacheManagerFactory, getDateLocale, getI18n, getKinshipTranslatorClass, getPlaceParserProvider, getPlaceTranslatorProvider, i18n, resetCacheManagerFactory, resetDateLocaleProvider, resetI18nProvider, resetKinshipTranslatorClass, resetPlaceParserProvider, resetPlaceTranslatorProvider, setCacheManagerFactory, setDateLocaleProvider, setI18nProvider, setKinshipTranslatorClass, setPlaceParserProvider, setPlaceTranslatorProvider } from './factories/index.js';
3
- export { C as CacheRelatives, I as ICacheManager, P as PlaceParts, g as getPlaceParts, p as pathCache, a as relativesCache, r as resetRelativesCache } from './place-parser-BsrTDadc.js';
3
+ export { C as CacheRelatives, I as ICacheManager, P as PlaceParts, g as getPlaceParts, p as pathCache, a as relativesCache, r as resetRelativesCache } from './place-parser-CIplmmDd.js';
4
4
  export { KinshipTranslator, KinshipTranslatorBasic, KinshipTranslatorDE, KinshipTranslatorEN, KinshipTranslatorES, KinshipTranslatorFR, KinshipTranslatorHU, translators } from './kinship-translator/index.js';
5
- export { C as Cases, ao as Common, az as CommonDate, aQ as CommonName, aS as CommonNote, m as ConvertType, j as CrossCase, k as CrossCases, an as CustomTags, am as Existed, aC as Fam, F as FamKey, aj as FamType, aE as Families, aL as FamilySearchMatch, aM as FamilySearchSource, x as Filter, w as FilterIterator, aF as GedCom, ak as GedComType, a3 as GenealogyMember, b9 as GeneratedIndiMethods, aa as GenerationIndiType, a9 as GenerationSpouseType, D as Group, G as GroupDefinition, H as GroupIterator, E as GroupMarker, bg as IAddress, bh as IAssociation, bi as IChangeDate, b4 as ICommon, bj as ICreationDate, bk as IDate, bl as IEventDetail, bl as IEventDetailStructure, b5 as IFam, b6 as IFamilies, bm as IFamily, b7 as IGedCom, bn as IGedcomStructure, b8 as IIndi, bq as IIndividual, bp as IIndividualEvent, bo as IIndividualEventDetail, bq as IIndividualStructure, ba as IIndividuals, br as ILdsOrdinanceDetail, bs as ILdsSpouseSealing, bb as IList, bt as IMarriageDate, bu as IMultimediaLink, bv as INonEvent, bw as INote, bc as IObje, bx as IPlace, bd as IRepo, by as IRepository, be as ISour, bB as ISource, bz as ISourceCitation, bA as ISourceRepositoryCitation, bf as ISubm, t as IdType, aK as Indi, a5 as IndiGenealogy, ab as IndiGenealogyGenerations, ac as IndiGenealogyResult, n as IndiKey, a6 as IndiMarker, a4 as IndiTree, a1 as IndiType, aO as Individuals, I as KinshipTranslatorInterface, L as Language, V as LinkedPersons, aP as List, v as ListTag, a8 as MemberMain, a7 as MemberSide, M as MultiTag, K as NameOrder, J as NestedGroup, ad as NonNullIndiGenealogyResult, N as NonStandard, aU as Obje, O as ObjeKey, al as ObjeType, aW as Objects, A as Order, z as OrderDefinition, B as OrderIterator, X as PartnerType, af as Path, ae as PathItem, bC as Place, Q as PlaceOrder, bD as PlaceType, P as PrimitiveRange, Z as ProxyOriginal, ai as Queue, ah as QueueItem, Y as Range, R as RangeType, ag as ReducedPath, W as RelationType, aX as Repo, o as RepoKey, $ as RepoType, aZ as Repositories, y as RequiredFilter, l as Settings, a_ as Sour, q as SourKey, _ as SourType, b0 as Sources, S as SplitResult, b1 as Subm, r as SubmKey, a0 as SubmType, b3 as Submitters, u as Tag, T as TagKey, a2 as TreeMember, U as UnknownKey, aq as createCommon, aA as createCommonDate, aR as createCommonName, aT as createCommonNote, aD as createFam, aG as createGedCom, aN as createIndi, aV as createObje, ap as createProxy, aY as createRepo, a$ as createSour, b2 as createSubm, h as extractSeparationYears, e as extractSplitPoints, d as findMatchingRangeForSplitRange, f as fromTuple, g as generateSplitRanges, av as getListTag, bE as getPlaces, aw as getValidKey, at as getValidKeys, au as getValidTag, ay as idGetter, i as inRange, aB as isCommonDate, aH as isGedcomString, ax as isId, a as isIntersectedRange, ar as isOnlyMainProp, b as isRangeContained, as as isValidKey, aJ as mergeGedcoms, p as parseRangeBounds, c as splitOverlappingRanges, s as splitRange, aI as validateGedcomContent } from './index-DFTsiD5J.js';
5
+ export { C as Cases, ao as Common, az as CommonDate, aQ as CommonName, aS as CommonNote, m as ConvertType, j as CrossCase, k as CrossCases, an as CustomTags, am as Existed, aC as Fam, F as FamKey, aj as FamType, aE as Families, aL as FamilySearchMatch, aM as FamilySearchSource, x as Filter, w as FilterIterator, aF as GedCom, ak as GedComType, a3 as GenealogyMember, b9 as GeneratedIndiMethods, aa as GenerationIndiType, a9 as GenerationSpouseType, D as Group, G as GroupDefinition, H as GroupIterator, E as GroupMarker, bg as IAddress, bh as IAssociation, bi as IChangeDate, b4 as ICommon, bj as ICreationDate, bk as IDate, bl as IEventDetail, bl as IEventDetailStructure, b5 as IFam, b6 as IFamilies, bm as IFamily, b7 as IGedCom, bn as IGedcomStructure, b8 as IIndi, bq as IIndividual, bp as IIndividualEvent, bo as IIndividualEventDetail, bq as IIndividualStructure, ba as IIndividuals, br as ILdsOrdinanceDetail, bs as ILdsSpouseSealing, bb as IList, bt as IMarriageDate, bu as IMultimediaLink, bv as INonEvent, bw as INote, bc as IObje, bx as IPlace, bd as IRepo, by as IRepository, be as ISour, bB as ISource, bz as ISourceCitation, bA as ISourceRepositoryCitation, bf as ISubm, t as IdType, aK as Indi, a5 as IndiGenealogy, ab as IndiGenealogyGenerations, ac as IndiGenealogyResult, n as IndiKey, a6 as IndiMarker, a4 as IndiTree, a1 as IndiType, aO as Individuals, I as KinshipTranslatorInterface, L as Language, V as LinkedPersons, aP as List, v as ListTag, a8 as MemberMain, a7 as MemberSide, M as MultiTag, K as NameOrder, J as NestedGroup, ad as NonNullIndiGenealogyResult, N as NonStandard, aU as Obje, O as ObjeKey, al as ObjeType, aW as Objects, A as Order, z as OrderDefinition, B as OrderIterator, X as PartnerType, af as Path, ae as PathItem, bC as Place, Q as PlaceOrder, bD as PlaceType, P as PrimitiveRange, Z as ProxyOriginal, ai as Queue, ah as QueueItem, Y as Range, R as RangeType, ag as ReducedPath, W as RelationType, aX as Repo, o as RepoKey, $ as RepoType, aZ as Repositories, y as RequiredFilter, l as Settings, a_ as Sour, q as SourKey, _ as SourType, b0 as Sources, S as SplitResult, b1 as Subm, r as SubmKey, a0 as SubmType, b3 as Submitters, u as Tag, T as TagKey, a2 as TreeMember, U as UnknownKey, aq as createCommon, aA as createCommonDate, aR as createCommonName, aT as createCommonNote, aD as createFam, aG as createGedCom, aN as createIndi, aV as createObje, ap as createProxy, aY as createRepo, a$ as createSour, b2 as createSubm, h as extractSeparationYears, e as extractSplitPoints, d as findMatchingRangeForSplitRange, f as fromTuple, g as generateSplitRanges, av as getListTag, bE as getPlaces, aw as getValidKey, at as getValidKeys, au as getValidTag, ay as idGetter, i as inRange, aB as isCommonDate, aH as isGedcomString, ax as isId, a as isIntersectedRange, ar as isOnlyMainProp, b as isRangeContained, as as isValidKey, aJ as mergeGedcoms, p as parseRangeBounds, c as splitOverlappingRanges, s as splitRange, aI as validateGedcomContent } from './index-DOapi7nN.js';
6
6
  export { AncestryMedia } from './types/index.js';
7
7
  export { ADOPTED, BIOLOGICAL, BIRTH, BIRTH_ASC, BIRTH_DESC, DATE_ASC, DATE_DESC, DEATH_ASC, DEATH_DESC, DEFAULT, EVERY, FEMALE, FOSTER, FRIEND, ID_GETTER_REG, ID_REG, ID_SPLIT_REG, LINE_REG, MALE, MAX_FILE_SIZE_TO_SYNC, OTHER, PARTNER, REF_LINE_REG, SEALING, SINGLE, SPOUSE, STEP, UNKOWN, getBirthAsc, getMarriageAsc, getMarriageAscAndBirth, getMarriageAscAndChildBirth, getNameAsc, getNameAscAndBirth, getNameDesc } from './constants/index.js';
8
8
  export { IPersonalName, IPersonalNamePieces } from './structures/index.js';
package/dist/index.js CHANGED
@@ -2106,13 +2106,28 @@ var Indi = class extends Common {
2106
2106
  return list;
2107
2107
  }
2108
2108
  familySearchLink() {
2109
+ const wwwTags = this.get("WWW")?.toList();
2110
+ const wwwTag = wwwTags?.find((wwwTag2) => {
2111
+ const fsSourceMarker = wwwTag2.get("_IS_FS")?.toValue();
2112
+ return fsSourceMarker === "Y";
2113
+ })?.toValue();
2114
+ if (wwwTag) {
2115
+ return wwwTag;
2116
+ }
2109
2117
  return this.get("_FS_LINK")?.toValue();
2110
2118
  }
2111
2119
  hasFamilySearchMatches() {
2120
+ const matchTags = this.get("MATCH")?.toList();
2121
+ if (matchTags && matchTags.length > 0) {
2122
+ return true;
2123
+ }
2112
2124
  return this.get("_FS_MATCH") !== void 0;
2113
2125
  }
2114
2126
  getFamilySearchMatches() {
2115
- const matchTags = this.get("_FS_MATCH")?.toList();
2127
+ let matchTags = this.get("MATCH")?.toList();
2128
+ if (!matchTags?.length) {
2129
+ matchTags = this.get("_FS_MATCH")?.toList();
2130
+ }
2116
2131
  if (!matchTags?.length) {
2117
2132
  return [];
2118
2133
  }
@@ -2139,11 +2154,25 @@ var Indi = class extends Common {
2139
2154
  });
2140
2155
  }
2141
2156
  hasFamilySearchSources() {
2157
+ const sourTags = this.get("SOUR")?.toList();
2158
+ const sourTag = sourTags?.find((sourTag2) => {
2159
+ const fsSourceMarker = sourTag2.get("_IS_FS")?.toValue();
2160
+ return fsSourceMarker === "Y";
2161
+ });
2162
+ if (sourTag) {
2163
+ return true;
2164
+ }
2142
2165
  return this.get("_FS_SOUR") !== void 0;
2143
2166
  }
2144
2167
  getFamilySearchSources() {
2145
- const sourceTags = this.get("_FS_SOUR")?.toList();
2146
- if (!sourceTags?.length) {
2168
+ let sourceTags = this.get("SOUR")?.toList()?.filter((sourTag) => {
2169
+ const fsSourceMarker = sourTag.get("_IS_FS")?.toValue();
2170
+ return fsSourceMarker === "Y";
2171
+ });
2172
+ if (!sourceTags || !sourceTags.length) {
2173
+ sourceTags = this.get("_FS_SOUR")?.toList();
2174
+ }
2175
+ if (!sourceTags || !sourceTags.length) {
2147
2176
  return [];
2148
2177
  }
2149
2178
  return sourceTags.map((sourceTag) => {
@@ -2263,6 +2292,52 @@ var Indi = class extends Common {
2263
2292
  const deathEvent = this.get("DEAT")?.index(0);
2264
2293
  return deathEvent?.PLAC?.value;
2265
2294
  }
2295
+ /**
2296
+ * Get all marriage places for this individual
2297
+ * @returns Array of marriage place strings (may include undefined for marriages without place)
2298
+ */
2299
+ getMarriagePlaces() {
2300
+ const marriagePlaces = [];
2301
+ const families = this.getFamilies("FAMS");
2302
+ families.forEach((family) => {
2303
+ const marrEvents = (family?.MARR?.toList().values() ?? []).filter(
2304
+ Boolean
2305
+ );
2306
+ if (marrEvents.length === 0) {
2307
+ marriagePlaces.push(void 0);
2308
+ } else {
2309
+ marrEvents.forEach((marrEvent) => {
2310
+ const marriageEventDetail = marrEvent;
2311
+ const marriagePlace = marriageEventDetail?.PLAC?.value;
2312
+ marriagePlaces.push(marriagePlace);
2313
+ });
2314
+ }
2315
+ });
2316
+ return marriagePlaces;
2317
+ }
2318
+ /**
2319
+ * Get all marriage dates for this individual
2320
+ * @returns Array of marriage date strings (may include undefined for marriages without date)
2321
+ */
2322
+ getMarriageDates() {
2323
+ const marriageDates = [];
2324
+ const families = this.getFamilies("FAMS");
2325
+ families.forEach((family) => {
2326
+ const marrEvents = (family?.MARR?.toList().values() ?? []).filter(
2327
+ Boolean
2328
+ );
2329
+ if (marrEvents.length === 0) {
2330
+ marriageDates.push(void 0);
2331
+ } else {
2332
+ marrEvents.forEach((marrEvent) => {
2333
+ const marriageEventDetail = marrEvent;
2334
+ const marriageDate = marriageEventDetail?.DATE?.value;
2335
+ marriageDates.push(marriageDate);
2336
+ });
2337
+ }
2338
+ });
2339
+ return marriageDates;
2340
+ }
2266
2341
  isDead() {
2267
2342
  return this.get("DEAT.DATE")?.toValue() !== void 0 || this.get("DEAT.PLAC")?.toValue() !== void 0;
2268
2343
  }
@@ -6134,7 +6209,7 @@ var Families = class _Families extends List {
6134
6209
  // package.json
6135
6210
  var package_default = {
6136
6211
  name: "@treeviz/gedcom-parser",
6137
- version: "1.0.18"};
6212
+ version: "1.0.20"};
6138
6213
 
6139
6214
  // src/utils/get-product-details.ts
6140
6215
  var isDevelopment = () => {
@@ -1,2 +1,2 @@
1
- export { b9 as GeneratedIndiMethods, b4 as ICommon, b5 as IFam, b6 as IFamilies, b7 as IGedCom, b8 as IIndi, ba as IIndividuals, bb as IList, bc as IObje, bd as IRepo, be as ISour, bf as ISubm } from '../index-DFTsiD5J.js';
1
+ export { b9 as GeneratedIndiMethods, b4 as ICommon, b5 as IFam, b6 as IFamilies, b7 as IGedCom, b8 as IIndi, ba as IIndividuals, bb as IList, bc as IObje, bd as IRepo, be as ISour, bf as ISubm } from '../index-DOapi7nN.js';
2
2
  import 'date-fns';
@@ -1,5 +1,5 @@
1
- import { I as IKinshipTranslator, af as Path, ae as PathItem, a1 as IndiType, n as IndiKey, L as Language } from '../index-DFTsiD5J.js';
2
- export { C as Cases, j as CrossCase, k as CrossCases } from '../index-DFTsiD5J.js';
1
+ import { I as IKinshipTranslator, af as Path, ae as PathItem, a1 as IndiType, n as IndiKey, L as Language } from '../index-DOapi7nN.js';
2
+ export { C as Cases, j as CrossCase, k as CrossCases } from '../index-DOapi7nN.js';
3
3
  import 'date-fns';
4
4
 
5
5
  declare class KinshipTranslatorBasic implements IKinshipTranslator {
@@ -4192,13 +4192,28 @@ var Indi = class extends Common {
4192
4192
  return list;
4193
4193
  }
4194
4194
  familySearchLink() {
4195
+ const wwwTags = this.get("WWW")?.toList();
4196
+ const wwwTag = wwwTags?.find((wwwTag2) => {
4197
+ const fsSourceMarker = wwwTag2.get("_IS_FS")?.toValue();
4198
+ return fsSourceMarker === "Y";
4199
+ })?.toValue();
4200
+ if (wwwTag) {
4201
+ return wwwTag;
4202
+ }
4195
4203
  return this.get("_FS_LINK")?.toValue();
4196
4204
  }
4197
4205
  hasFamilySearchMatches() {
4206
+ const matchTags = this.get("MATCH")?.toList();
4207
+ if (matchTags && matchTags.length > 0) {
4208
+ return true;
4209
+ }
4198
4210
  return this.get("_FS_MATCH") !== void 0;
4199
4211
  }
4200
4212
  getFamilySearchMatches() {
4201
- const matchTags = this.get("_FS_MATCH")?.toList();
4213
+ let matchTags = this.get("MATCH")?.toList();
4214
+ if (!matchTags?.length) {
4215
+ matchTags = this.get("_FS_MATCH")?.toList();
4216
+ }
4202
4217
  if (!matchTags?.length) {
4203
4218
  return [];
4204
4219
  }
@@ -4225,11 +4240,25 @@ var Indi = class extends Common {
4225
4240
  });
4226
4241
  }
4227
4242
  hasFamilySearchSources() {
4243
+ const sourTags = this.get("SOUR")?.toList();
4244
+ const sourTag = sourTags?.find((sourTag2) => {
4245
+ const fsSourceMarker = sourTag2.get("_IS_FS")?.toValue();
4246
+ return fsSourceMarker === "Y";
4247
+ });
4248
+ if (sourTag) {
4249
+ return true;
4250
+ }
4228
4251
  return this.get("_FS_SOUR") !== void 0;
4229
4252
  }
4230
4253
  getFamilySearchSources() {
4231
- const sourceTags = this.get("_FS_SOUR")?.toList();
4232
- if (!sourceTags?.length) {
4254
+ let sourceTags = this.get("SOUR")?.toList()?.filter((sourTag) => {
4255
+ const fsSourceMarker = sourTag.get("_IS_FS")?.toValue();
4256
+ return fsSourceMarker === "Y";
4257
+ });
4258
+ if (!sourceTags || !sourceTags.length) {
4259
+ sourceTags = this.get("_FS_SOUR")?.toList();
4260
+ }
4261
+ if (!sourceTags || !sourceTags.length) {
4233
4262
  return [];
4234
4263
  }
4235
4264
  return sourceTags.map((sourceTag) => {
@@ -4349,6 +4378,52 @@ var Indi = class extends Common {
4349
4378
  const deathEvent = this.get("DEAT")?.index(0);
4350
4379
  return deathEvent?.PLAC?.value;
4351
4380
  }
4381
+ /**
4382
+ * Get all marriage places for this individual
4383
+ * @returns Array of marriage place strings (may include undefined for marriages without place)
4384
+ */
4385
+ getMarriagePlaces() {
4386
+ const marriagePlaces = [];
4387
+ const families = this.getFamilies("FAMS");
4388
+ families.forEach((family) => {
4389
+ const marrEvents = (family?.MARR?.toList().values() ?? []).filter(
4390
+ Boolean
4391
+ );
4392
+ if (marrEvents.length === 0) {
4393
+ marriagePlaces.push(void 0);
4394
+ } else {
4395
+ marrEvents.forEach((marrEvent) => {
4396
+ const marriageEventDetail = marrEvent;
4397
+ const marriagePlace = marriageEventDetail?.PLAC?.value;
4398
+ marriagePlaces.push(marriagePlace);
4399
+ });
4400
+ }
4401
+ });
4402
+ return marriagePlaces;
4403
+ }
4404
+ /**
4405
+ * Get all marriage dates for this individual
4406
+ * @returns Array of marriage date strings (may include undefined for marriages without date)
4407
+ */
4408
+ getMarriageDates() {
4409
+ const marriageDates = [];
4410
+ const families = this.getFamilies("FAMS");
4411
+ families.forEach((family) => {
4412
+ const marrEvents = (family?.MARR?.toList().values() ?? []).filter(
4413
+ Boolean
4414
+ );
4415
+ if (marrEvents.length === 0) {
4416
+ marriageDates.push(void 0);
4417
+ } else {
4418
+ marrEvents.forEach((marrEvent) => {
4419
+ const marriageEventDetail = marrEvent;
4420
+ const marriageDate = marriageEventDetail?.DATE?.value;
4421
+ marriageDates.push(marriageDate);
4422
+ });
4423
+ }
4424
+ });
4425
+ return marriageDates;
4426
+ }
4352
4427
  isDead() {
4353
4428
  return this.get("DEAT.DATE")?.toValue() !== void 0 || this.get("DEAT.PLAC")?.toValue() !== void 0;
4354
4429
  }
@@ -1,4 +1,4 @@
1
- import { n as IndiKey, af as Path, aO as Individuals } from './index-DFTsiD5J.js';
1
+ import { n as IndiKey, af as Path, aO as Individuals } from './index-DOapi7nN.js';
2
2
 
3
3
  /**
4
4
  * Cache manager interface for pluggable cache implementations.
@@ -1,5 +1,5 @@
1
- import { ao as Common, bw as INoteStructure, bz as ISourceCitationStructure } from '../index-DFTsiD5J.js';
2
- export { bg as IAddress, bh as IAssociation, bi as IChangeDate, bj as ICreationDate, bk as IDate, bl as IEventDetail, bl as IEventDetailStructure, bm as IFamily, bn as IGedcomStructure, bq as IIndividual, bp as IIndividualEvent, bo as IIndividualEventDetail, bq as IIndividualStructure, br as ILdsOrdinanceDetail, bs as ILdsSpouseSealing, bt as IMarriageDate, bu as IMultimediaLink, bv as INonEvent, bx as IPlace, by as IRepository, bB as ISource, bA as ISourceRepositoryCitation } from '../index-DFTsiD5J.js';
1
+ import { ao as Common, bw as INoteStructure, bz as ISourceCitationStructure } from '../index-DOapi7nN.js';
2
+ export { bg as IAddress, bh as IAssociation, bi as IChangeDate, bj as ICreationDate, bk as IDate, bl as IEventDetail, bl as IEventDetailStructure, bm as IFamily, bn as IGedcomStructure, bq as IIndividual, bp as IIndividualEvent, bo as IIndividualEventDetail, bq as IIndividualStructure, br as ILdsOrdinanceDetail, bs as ILdsSpouseSealing, bt as IMarriageDate, bu as IMultimediaLink, bv as INonEvent, bx as IPlace, by as IRepository, bB as ISource, bA as ISourceRepositoryCitation } from '../index-DOapi7nN.js';
3
3
  import 'date-fns';
4
4
 
5
5
  interface IPersonalNamePiecesStructure extends Common {
@@ -1,4 +1,4 @@
1
- export { m as ConvertType, F as FamKey, x as Filter, w as FilterIterator, D as Group, G as GroupDefinition, H as GroupIterator, E as GroupMarker, t as IdType, n as IndiKey, V as LinkedPersons, v as ListTag, M as MultiTag, K as NameOrder, J as NestedGroup, N as NonStandard, O as ObjeKey, A as Order, z as OrderDefinition, B as OrderIterator, X as PartnerType, Q as PlaceOrder, Y as Range, W as RelationType, o as RepoKey, y as RequiredFilter, l as Settings, q as SourKey, r as SubmKey, u as Tag, T as TagKey, U as UnknownKey } from '../index-DFTsiD5J.js';
1
+ export { m as ConvertType, F as FamKey, x as Filter, w as FilterIterator, D as Group, G as GroupDefinition, H as GroupIterator, E as GroupMarker, t as IdType, n as IndiKey, V as LinkedPersons, v as ListTag, M as MultiTag, K as NameOrder, J as NestedGroup, N as NonStandard, O as ObjeKey, A as Order, z as OrderDefinition, B as OrderIterator, X as PartnerType, Q as PlaceOrder, Y as Range, W as RelationType, o as RepoKey, y as RequiredFilter, l as Settings, q as SourKey, r as SubmKey, u as Tag, T as TagKey, U as UnknownKey } from '../index-DOapi7nN.js';
2
2
  import 'date-fns';
3
3
 
4
4
  interface AncestryMedia {
@@ -1,6 +1,6 @@
1
- export { C as CacheRelatives, I as ICacheManager, P as PlaceParts, g as getPlaceParts, p as pathCache, a as relativesCache, r as resetRelativesCache } from '../place-parser-BsrTDadc.js';
2
- import { l as Settings, ak as GedComType, M as MultiTag, ao as Common, t as IdType, bk as IDateStructure, aj as FamType, az as CommonDate, a1 as IndiType, n as IndiKey, J as NestedGroup, aO as Individuals } from '../index-DFTsiD5J.js';
3
- export { bC as Place, bD as PlaceType, P as PrimitiveRange, R as Range, S as SplitResult, h as extractSeparationYears, e as extractSplitPoints, d as findMatchingRangeForSplitRange, f as fromTuple, g as generateSplitRanges, bE as getPlaces, i as inRange, a as isIntersectedRange, b as isRangeContained, p as parseRangeBounds, c as splitOverlappingRanges, s as splitRange } from '../index-DFTsiD5J.js';
1
+ export { C as CacheRelatives, I as ICacheManager, P as PlaceParts, g as getPlaceParts, p as pathCache, a as relativesCache, r as resetRelativesCache } from '../place-parser-CIplmmDd.js';
2
+ import { l as Settings, ak as GedComType, M as MultiTag, ao as Common, t as IdType, bk as IDateStructure, aj as FamType, az as CommonDate, a1 as IndiType, n as IndiKey, J as NestedGroup, aO as Individuals } from '../index-DOapi7nN.js';
3
+ export { bC as Place, bD as PlaceType, P as PrimitiveRange, R as Range, S as SplitResult, h as extractSeparationYears, e as extractSplitPoints, d as findMatchingRangeForSplitRange, f as fromTuple, g as generateSplitRanges, bE as getPlaces, i as inRange, a as isIntersectedRange, b as isRangeContained, p as parseRangeBounds, c as splitOverlappingRanges, s as splitRange } from '../index-DOapi7nN.js';
4
4
  import 'date-fns';
5
5
 
6
6
  declare const GedcomTree: {
@@ -2818,13 +2818,28 @@ var Indi = class extends Common {
2818
2818
  return list;
2819
2819
  }
2820
2820
  familySearchLink() {
2821
+ const wwwTags = this.get("WWW")?.toList();
2822
+ const wwwTag = wwwTags?.find((wwwTag2) => {
2823
+ const fsSourceMarker = wwwTag2.get("_IS_FS")?.toValue();
2824
+ return fsSourceMarker === "Y";
2825
+ })?.toValue();
2826
+ if (wwwTag) {
2827
+ return wwwTag;
2828
+ }
2821
2829
  return this.get("_FS_LINK")?.toValue();
2822
2830
  }
2823
2831
  hasFamilySearchMatches() {
2832
+ const matchTags = this.get("MATCH")?.toList();
2833
+ if (matchTags && matchTags.length > 0) {
2834
+ return true;
2835
+ }
2824
2836
  return this.get("_FS_MATCH") !== void 0;
2825
2837
  }
2826
2838
  getFamilySearchMatches() {
2827
- const matchTags = this.get("_FS_MATCH")?.toList();
2839
+ let matchTags = this.get("MATCH")?.toList();
2840
+ if (!matchTags?.length) {
2841
+ matchTags = this.get("_FS_MATCH")?.toList();
2842
+ }
2828
2843
  if (!matchTags?.length) {
2829
2844
  return [];
2830
2845
  }
@@ -2851,11 +2866,25 @@ var Indi = class extends Common {
2851
2866
  });
2852
2867
  }
2853
2868
  hasFamilySearchSources() {
2869
+ const sourTags = this.get("SOUR")?.toList();
2870
+ const sourTag = sourTags?.find((sourTag2) => {
2871
+ const fsSourceMarker = sourTag2.get("_IS_FS")?.toValue();
2872
+ return fsSourceMarker === "Y";
2873
+ });
2874
+ if (sourTag) {
2875
+ return true;
2876
+ }
2854
2877
  return this.get("_FS_SOUR") !== void 0;
2855
2878
  }
2856
2879
  getFamilySearchSources() {
2857
- const sourceTags = this.get("_FS_SOUR")?.toList();
2858
- if (!sourceTags?.length) {
2880
+ let sourceTags = this.get("SOUR")?.toList()?.filter((sourTag) => {
2881
+ const fsSourceMarker = sourTag.get("_IS_FS")?.toValue();
2882
+ return fsSourceMarker === "Y";
2883
+ });
2884
+ if (!sourceTags || !sourceTags.length) {
2885
+ sourceTags = this.get("_FS_SOUR")?.toList();
2886
+ }
2887
+ if (!sourceTags || !sourceTags.length) {
2859
2888
  return [];
2860
2889
  }
2861
2890
  return sourceTags.map((sourceTag) => {
@@ -2975,6 +3004,52 @@ var Indi = class extends Common {
2975
3004
  const deathEvent = this.get("DEAT")?.index(0);
2976
3005
  return deathEvent?.PLAC?.value;
2977
3006
  }
3007
+ /**
3008
+ * Get all marriage places for this individual
3009
+ * @returns Array of marriage place strings (may include undefined for marriages without place)
3010
+ */
3011
+ getMarriagePlaces() {
3012
+ const marriagePlaces = [];
3013
+ const families = this.getFamilies("FAMS");
3014
+ families.forEach((family) => {
3015
+ const marrEvents = (family?.MARR?.toList().values() ?? []).filter(
3016
+ Boolean
3017
+ );
3018
+ if (marrEvents.length === 0) {
3019
+ marriagePlaces.push(void 0);
3020
+ } else {
3021
+ marrEvents.forEach((marrEvent) => {
3022
+ const marriageEventDetail = marrEvent;
3023
+ const marriagePlace = marriageEventDetail?.PLAC?.value;
3024
+ marriagePlaces.push(marriagePlace);
3025
+ });
3026
+ }
3027
+ });
3028
+ return marriagePlaces;
3029
+ }
3030
+ /**
3031
+ * Get all marriage dates for this individual
3032
+ * @returns Array of marriage date strings (may include undefined for marriages without date)
3033
+ */
3034
+ getMarriageDates() {
3035
+ const marriageDates = [];
3036
+ const families = this.getFamilies("FAMS");
3037
+ families.forEach((family) => {
3038
+ const marrEvents = (family?.MARR?.toList().values() ?? []).filter(
3039
+ Boolean
3040
+ );
3041
+ if (marrEvents.length === 0) {
3042
+ marriageDates.push(void 0);
3043
+ } else {
3044
+ marrEvents.forEach((marrEvent) => {
3045
+ const marriageEventDetail = marrEvent;
3046
+ const marriageDate = marriageEventDetail?.DATE?.value;
3047
+ marriageDates.push(marriageDate);
3048
+ });
3049
+ }
3050
+ });
3051
+ return marriageDates;
3052
+ }
2978
3053
  isDead() {
2979
3054
  return this.get("DEAT.DATE")?.toValue() !== void 0 || this.get("DEAT.PLAC")?.toValue() !== void 0;
2980
3055
  }
@@ -5970,7 +6045,7 @@ var isCommonDate = (value) => {
5970
6045
  // package.json
5971
6046
  var package_default = {
5972
6047
  name: "@treeviz/gedcom-parser",
5973
- version: "1.0.18"};
6048
+ version: "1.0.20"};
5974
6049
 
5975
6050
  // src/utils/get-product-details.ts
5976
6051
  var isDevelopment = () => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@treeviz/gedcom-parser",
3
- "version": "1.0.18",
3
+ "version": "1.0.20",
4
4
  "description": "Lightweight, pluggable GEDCOM parser for JavaScript/TypeScript with optional caching and place matching. Zero browser dependencies.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",