@treeviz/gedcom-parser 2.0.10 → 2.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/classes/common.d.ts +6 -1
- package/dist/classes/common.d.ts.map +1 -1
- package/dist/classes/fam.d.ts +9 -1
- package/dist/classes/fam.d.ts.map +1 -1
- package/dist/classes/gedcom.d.ts +6 -2
- package/dist/classes/gedcom.d.ts.map +1 -1
- package/dist/classes/index.js +495 -50
- package/dist/classes/indi.d.ts +6 -0
- package/dist/classes/indi.d.ts.map +1 -1
- package/dist/cli/index.js +3383 -2932
- package/dist/constants/constants.d.ts +7 -0
- package/dist/constants/constants.d.ts.map +1 -1
- package/dist/constants/index.js +1287 -916
- package/dist/factories/index.js +409 -39
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5327 -4777
- package/dist/interfaces/fam.d.ts +7 -1
- package/dist/interfaces/fam.d.ts.map +1 -1
- package/dist/interfaces/gedcom.d.ts +4 -0
- package/dist/interfaces/gedcom.d.ts.map +1 -1
- package/dist/interfaces/indi.d.ts +5 -1
- package/dist/interfaces/indi.d.ts.map +1 -1
- package/dist/kinship-translator/index.js +409 -39
- package/dist/structures/gedcom.d.ts +1 -0
- package/dist/structures/gedcom.d.ts.map +1 -1
- package/dist/types/types.d.ts +10 -0
- package/dist/types/types.d.ts.map +1 -1
- package/dist/utils/fact-edit.d.ts +22 -0
- package/dist/utils/fact-edit.d.ts.map +1 -0
- package/dist/utils/family-edit.d.ts +23 -0
- package/dist/utils/family-edit.d.ts.map +1 -0
- package/dist/utils/gedcom-trailer.d.ts +6 -0
- package/dist/utils/gedcom-trailer.d.ts.map +1 -0
- package/dist/utils/index.d.ts +4 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +605 -55
- package/dist/utils/parser.d.ts +3 -0
- package/dist/utils/parser.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1846,6 +1846,11 @@ var inRange = (year, range, trueIfNoYear = false) => {
|
|
|
1846
1846
|
// src/constants/constants.ts
|
|
1847
1847
|
var ID_REG = /^@[_a-zA-Z0-9]+@/;
|
|
1848
1848
|
var ID_GETTER_REG = /^(?<at>@)?(?<letter>[A-Z])?/i;
|
|
1849
|
+
var ORIG_HEAD_TAG = "_ORIGHEAD";
|
|
1850
|
+
|
|
1851
|
+
// src/utils/gedcom-trailer.ts
|
|
1852
|
+
var GEDCOM_TRAILER_TAG = "TRLR";
|
|
1853
|
+
var isGedcomTrailerTag = (tag) => tag === GEDCOM_TRAILER_TAG;
|
|
1849
1854
|
var List = class _List {
|
|
1850
1855
|
// length = 0;
|
|
1851
1856
|
constructor(items) {
|
|
@@ -2356,6 +2361,9 @@ var Common = class _Common {
|
|
|
2356
2361
|
delete this._value;
|
|
2357
2362
|
}
|
|
2358
2363
|
set(name, value) {
|
|
2364
|
+
if (isGedcomTrailerTag(name)) {
|
|
2365
|
+
return void 0;
|
|
2366
|
+
}
|
|
2359
2367
|
if (typeof value === "string") {
|
|
2360
2368
|
const usedValue = createCommon(this._gedcom, void 0, this.main);
|
|
2361
2369
|
usedValue.value = value;
|
|
@@ -2366,6 +2374,9 @@ var Common = class _Common {
|
|
|
2366
2374
|
return get(this, name);
|
|
2367
2375
|
}
|
|
2368
2376
|
assign(name, value, unique = false) {
|
|
2377
|
+
if (isGedcomTrailerTag(name)) {
|
|
2378
|
+
return void 0;
|
|
2379
|
+
}
|
|
2369
2380
|
let curValue = this.get(name);
|
|
2370
2381
|
if (curValue?.isListable) {
|
|
2371
2382
|
if (curValue instanceof _Common) {
|
|
@@ -2588,30 +2599,47 @@ var Common = class _Common {
|
|
|
2588
2599
|
});
|
|
2589
2600
|
return gedcom;
|
|
2590
2601
|
}
|
|
2602
|
+
getHeadRecord() {
|
|
2603
|
+
return get(this, "HEAD") || get(this.getGedcom(), "HEAD");
|
|
2604
|
+
}
|
|
2605
|
+
getOriginalHeadRecord() {
|
|
2606
|
+
return get(this, ORIG_HEAD_TAG) || get(this.getGedcom(), ORIG_HEAD_TAG) || get(this.getHeadRecord(), ORIG_HEAD_TAG);
|
|
2607
|
+
}
|
|
2608
|
+
getSourceHeads() {
|
|
2609
|
+
const heads = [this.getOriginalHeadRecord(), this.getHeadRecord()];
|
|
2610
|
+
return heads.filter((head, index) => {
|
|
2611
|
+
return Boolean(head && heads.indexOf(head) === index);
|
|
2612
|
+
});
|
|
2613
|
+
}
|
|
2614
|
+
getFromSourceHeads(path) {
|
|
2615
|
+
for (const head of this.getSourceHeads()) {
|
|
2616
|
+
const value = get(head, path);
|
|
2617
|
+
if (value !== void 0 && value !== null && value !== "") {
|
|
2618
|
+
return value;
|
|
2619
|
+
}
|
|
2620
|
+
}
|
|
2621
|
+
return void 0;
|
|
2622
|
+
}
|
|
2623
|
+
sourStartsWith(prefix) {
|
|
2624
|
+
return this.getSourceHeads().some((head) => {
|
|
2625
|
+
const sour = get(head, "SOUR.value");
|
|
2626
|
+
return !!sour?.toLowerCase()?.startsWith(prefix);
|
|
2627
|
+
});
|
|
2628
|
+
}
|
|
2591
2629
|
isGenoPro() {
|
|
2592
|
-
|
|
2593
|
-
const sour = get(head, "SOUR.value");
|
|
2594
|
-
return !!sour?.toLowerCase()?.startsWith("genopro");
|
|
2630
|
+
return this.sourStartsWith("genopro");
|
|
2595
2631
|
}
|
|
2596
2632
|
isAhnenblatt() {
|
|
2597
|
-
|
|
2598
|
-
const sour = get(head, "SOUR.value");
|
|
2599
|
-
return !!sour?.toLowerCase()?.startsWith("ahnenblatt");
|
|
2633
|
+
return this.sourStartsWith("ahnenblatt");
|
|
2600
2634
|
}
|
|
2601
2635
|
isGeni() {
|
|
2602
|
-
|
|
2603
|
-
const sour = get(head, "SOUR.value");
|
|
2604
|
-
return !!sour?.toLowerCase()?.startsWith("geni");
|
|
2636
|
+
return this.sourStartsWith("geni");
|
|
2605
2637
|
}
|
|
2606
2638
|
isAncestry() {
|
|
2607
|
-
|
|
2608
|
-
const sour = get(head, "SOUR.value");
|
|
2609
|
-
return !!sour?.toLowerCase()?.startsWith("ancestry");
|
|
2639
|
+
return this.sourStartsWith("ancestry");
|
|
2610
2640
|
}
|
|
2611
2641
|
isMyHeritage() {
|
|
2612
|
-
|
|
2613
|
-
const sour = get(head, "SOUR.value");
|
|
2614
|
-
return !!sour?.toLowerCase()?.startsWith("myheritage");
|
|
2642
|
+
return this.sourStartsWith("myheritage");
|
|
2615
2643
|
}
|
|
2616
2644
|
/**
|
|
2617
2645
|
* Get the source type as a string (for prefixing tree IDs and names)
|
|
@@ -2628,22 +2656,22 @@ var Common = class _Common {
|
|
|
2628
2656
|
return void 0;
|
|
2629
2657
|
}
|
|
2630
2658
|
isFamilySearch() {
|
|
2631
|
-
|
|
2632
|
-
|
|
2633
|
-
|
|
2659
|
+
return this.getSourceHeads().some((head) => {
|
|
2660
|
+
const sourName = get(head, "SOUR.NAME.value");
|
|
2661
|
+
return sourName === "FamilySearch API";
|
|
2662
|
+
});
|
|
2634
2663
|
}
|
|
2635
2664
|
isGNO2GED() {
|
|
2636
|
-
|
|
2637
|
-
|
|
2638
|
-
|
|
2665
|
+
return this.getSourceHeads().some((head) => {
|
|
2666
|
+
const sour = get(head, "SOUR.value");
|
|
2667
|
+
return sour === "GNO2GED";
|
|
2668
|
+
});
|
|
2639
2669
|
}
|
|
2640
2670
|
getAncestryTreeId() {
|
|
2641
|
-
|
|
2642
|
-
return get(this, path) || get(this.getGedcom(), path);
|
|
2671
|
+
return this.getFromSourceHeads("SOUR._TREE.RIN.value") || (get(this, "HEAD.SOUR._TREE.RIN.value") || get(this.getGedcom(), "HEAD.SOUR._TREE.RIN.value"));
|
|
2643
2672
|
}
|
|
2644
2673
|
getMyHeritageTreeId() {
|
|
2645
|
-
|
|
2646
|
-
return get(this, path) || get(this.getGedcom(), path);
|
|
2674
|
+
return this.getFromSourceHeads("_EXPORTED_FROM_SITE_ID.value") || (get(this, "HEAD._EXPORTED_FROM_SITE_ID.value") || get(this.getGedcom(), "HEAD._EXPORTED_FROM_SITE_ID.value"));
|
|
2647
2675
|
}
|
|
2648
2676
|
getTreeId() {
|
|
2649
2677
|
if (this?.isAncestry()) {
|
|
@@ -2677,8 +2705,7 @@ var Common = class _Common {
|
|
|
2677
2705
|
return this.getUniversalTreeId();
|
|
2678
2706
|
}
|
|
2679
2707
|
getAncestryTreeName() {
|
|
2680
|
-
|
|
2681
|
-
return get(this, path) || get(this.getGedcom(), path);
|
|
2708
|
+
return this.getFromSourceHeads("SOUR._TREE.value") || (get(this, "HEAD.SOUR._TREE.value") || get(this.getGedcom(), "HEAD.SOUR._TREE.value"));
|
|
2682
2709
|
}
|
|
2683
2710
|
getMyHeritageTreeName() {
|
|
2684
2711
|
const path = "HEAD.FILE.value";
|
|
@@ -2688,14 +2715,14 @@ var Common = class _Common {
|
|
|
2688
2715
|
)?.groups?.tree;
|
|
2689
2716
|
}
|
|
2690
2717
|
getFamilySearchTreeId() {
|
|
2691
|
-
const rin = get(this, "HEAD.SOUR._TREE.RIN.value") || get(this.getGedcom(), "HEAD.SOUR._TREE.RIN.value");
|
|
2718
|
+
const rin = this.getFromSourceHeads("SOUR._TREE.RIN.value") || get(this, "HEAD.SOUR._TREE.RIN.value") || get(this.getGedcom(), "HEAD.SOUR._TREE.RIN.value");
|
|
2692
2719
|
if (rin) {
|
|
2693
2720
|
return rin;
|
|
2694
2721
|
}
|
|
2695
2722
|
return "familysearch";
|
|
2696
2723
|
}
|
|
2697
2724
|
getFamilySearchTreeName() {
|
|
2698
|
-
const treeName = get(this, "HEAD.SOUR._TREE.value") || get(this.getGedcom(), "HEAD.SOUR._TREE.value");
|
|
2725
|
+
const treeName = this.getFromSourceHeads("SOUR._TREE.value") || get(this, "HEAD.SOUR._TREE.value") || get(this.getGedcom(), "HEAD.SOUR._TREE.value");
|
|
2699
2726
|
if (treeName) {
|
|
2700
2727
|
return treeName;
|
|
2701
2728
|
}
|
|
@@ -2787,11 +2814,11 @@ var Common = class _Common {
|
|
|
2787
2814
|
const cleanName = fileName.replace(/\.ged$/i, "").replace(/_/g, " ");
|
|
2788
2815
|
return `${prefix}${cleanName}`;
|
|
2789
2816
|
}
|
|
2790
|
-
const sourName = get(this, "HEAD.SOUR.NAME.value") || get(this.getGedcom(), "HEAD.SOUR.NAME.value");
|
|
2817
|
+
const sourName = this.getFromSourceHeads("SOUR.NAME.value") || get(this, "HEAD.SOUR.NAME.value") || get(this.getGedcom(), "HEAD.SOUR.NAME.value");
|
|
2791
2818
|
if (sourName) {
|
|
2792
2819
|
return `${prefix}${sourName}`;
|
|
2793
2820
|
}
|
|
2794
|
-
const sourValue = get(this, "HEAD.SOUR.value") || get(this.getGedcom(), "HEAD.SOUR.value");
|
|
2821
|
+
const sourValue = this.getFromSourceHeads("SOUR.value") || get(this, "HEAD.SOUR.value") || get(this.getGedcom(), "HEAD.SOUR.value");
|
|
2795
2822
|
if (sourValue) {
|
|
2796
2823
|
return `${prefix}${sourValue}`;
|
|
2797
2824
|
}
|
|
@@ -2857,7 +2884,7 @@ var isOnlyMainProp = (key) => {
|
|
|
2857
2884
|
};
|
|
2858
2885
|
var isValidKey = (common, key) => {
|
|
2859
2886
|
const prop = get(common, key);
|
|
2860
|
-
return key !== "_gedcom" && key !== "_main" && key !== "_parent" && key !== "_uniqueId" && key !== "_refs" && key !== "_type" && (key === "id" || key === "_id" || key === "value" || key === "_value" || prop instanceof Common || prop instanceof List);
|
|
2887
|
+
return key !== "_gedcom" && key !== "_main" && key !== "_parent" && key !== "_uniqueId" && key !== "_refs" && key !== "_type" && !(typeof key === "string" && isGedcomTrailerTag(key)) && (key === "id" || key === "_id" || key === "value" || key === "_value" || prop instanceof Common || prop instanceof List);
|
|
2861
2888
|
};
|
|
2862
2889
|
var getValidKeys = (common) => {
|
|
2863
2890
|
return Object.keys(common).filter((key) => {
|
|
@@ -3532,6 +3559,239 @@ var cacheDiscoveredPath = (gedcom, path) => {
|
|
|
3532
3559
|
}
|
|
3533
3560
|
};
|
|
3534
3561
|
|
|
3562
|
+
// src/utils/fact-edit.ts
|
|
3563
|
+
var SINGLETON_TAGS = /* @__PURE__ */ new Set(["BIRT", "DEAT", "SSN", "SEX", "DSCR"]);
|
|
3564
|
+
var firstRecord = (node) => {
|
|
3565
|
+
if (!node) {
|
|
3566
|
+
return void 0;
|
|
3567
|
+
}
|
|
3568
|
+
if (node instanceof List) {
|
|
3569
|
+
return node.index(0);
|
|
3570
|
+
}
|
|
3571
|
+
return node.index(0) ?? node;
|
|
3572
|
+
};
|
|
3573
|
+
var setDateOn = (gedcom, owner, parent, date) => {
|
|
3574
|
+
const trimmed = date.trim();
|
|
3575
|
+
if (!trimmed) {
|
|
3576
|
+
return;
|
|
3577
|
+
}
|
|
3578
|
+
let dateNode = parent.get("DATE");
|
|
3579
|
+
if (!dateNode || dateNode instanceof List) {
|
|
3580
|
+
dateNode = createCommonDate(gedcom, void 0, owner, parent);
|
|
3581
|
+
dateNode.type = "DATE";
|
|
3582
|
+
parent.set("DATE", dateNode);
|
|
3583
|
+
}
|
|
3584
|
+
dateNode.value = trimmed;
|
|
3585
|
+
};
|
|
3586
|
+
var fillFact = (gedcom, owner, event, input) => {
|
|
3587
|
+
if (input.value?.trim()) {
|
|
3588
|
+
event.value = input.value.trim();
|
|
3589
|
+
}
|
|
3590
|
+
if (input.type?.trim()) {
|
|
3591
|
+
event.set("TYPE", input.type.trim());
|
|
3592
|
+
}
|
|
3593
|
+
if (input.date) {
|
|
3594
|
+
setDateOn(gedcom, owner, event, input.date);
|
|
3595
|
+
}
|
|
3596
|
+
if (input.place?.trim()) {
|
|
3597
|
+
event.set("PLAC", input.place.trim());
|
|
3598
|
+
}
|
|
3599
|
+
if (input.note?.trim()) {
|
|
3600
|
+
event.set("NOTE", input.note.trim());
|
|
3601
|
+
}
|
|
3602
|
+
};
|
|
3603
|
+
var addIndividualFact = (indi, input) => {
|
|
3604
|
+
const gedcom = indi.getGedcom();
|
|
3605
|
+
if (!gedcom) {
|
|
3606
|
+
return void 0;
|
|
3607
|
+
}
|
|
3608
|
+
const tag = input.tag;
|
|
3609
|
+
let event = SINGLETON_TAGS.has(tag) ? firstRecord(indi.get(tag)) : void 0;
|
|
3610
|
+
if (!event) {
|
|
3611
|
+
event = createCommon(gedcom, void 0, indi);
|
|
3612
|
+
event.type = tag;
|
|
3613
|
+
if (SINGLETON_TAGS.has(tag)) {
|
|
3614
|
+
indi.set(tag, event);
|
|
3615
|
+
} else {
|
|
3616
|
+
indi.assign(tag, event);
|
|
3617
|
+
}
|
|
3618
|
+
}
|
|
3619
|
+
fillFact(gedcom, indi, event, input);
|
|
3620
|
+
return event;
|
|
3621
|
+
};
|
|
3622
|
+
var addFamilyFact = (fam, input) => {
|
|
3623
|
+
const gedcom = fam.getGedcom();
|
|
3624
|
+
if (!gedcom) {
|
|
3625
|
+
return void 0;
|
|
3626
|
+
}
|
|
3627
|
+
const event = createCommon(gedcom, void 0, fam);
|
|
3628
|
+
event.type = input.tag;
|
|
3629
|
+
fam.assign(input.tag, event);
|
|
3630
|
+
fillFact(gedcom, fam, event, input);
|
|
3631
|
+
return event;
|
|
3632
|
+
};
|
|
3633
|
+
|
|
3634
|
+
// src/utils/family-edit.ts
|
|
3635
|
+
var PEDIGREE_VALUES = [
|
|
3636
|
+
"birth" /* BIRTH */,
|
|
3637
|
+
"adopted" /* ADOPTED */,
|
|
3638
|
+
"foster" /* FOSTER */,
|
|
3639
|
+
"step" /* STEP */,
|
|
3640
|
+
"sealing" /* SEALING */
|
|
3641
|
+
];
|
|
3642
|
+
var toGedcomPedigree = (value) => {
|
|
3643
|
+
const normalized = String(value || "birth" /* BIRTH */).toLowerCase();
|
|
3644
|
+
if (normalized === "biological" /* BIOLOGICAL */ || normalized === "birth" /* BIRTH */) {
|
|
3645
|
+
return "birth" /* BIRTH */;
|
|
3646
|
+
}
|
|
3647
|
+
const match = PEDIGREE_VALUES.find((item) => item === normalized);
|
|
3648
|
+
return match ?? "birth" /* BIRTH */;
|
|
3649
|
+
};
|
|
3650
|
+
var pointerIds = (tag) => {
|
|
3651
|
+
if (!tag) {
|
|
3652
|
+
return [];
|
|
3653
|
+
}
|
|
3654
|
+
if (tag instanceof List) {
|
|
3655
|
+
return tag.values().map((item) => item?.toValue?.()).filter((value2) => !!value2);
|
|
3656
|
+
}
|
|
3657
|
+
const value = tag.toValue?.();
|
|
3658
|
+
return value ? [String(value)] : [];
|
|
3659
|
+
};
|
|
3660
|
+
var firstPointerId = (tag) => pointerIds(tag)[0];
|
|
3661
|
+
var makePointer = (gedcom, parent, value, refType) => {
|
|
3662
|
+
const pointer = createCommon(gedcom, void 0, parent);
|
|
3663
|
+
pointer.value = value;
|
|
3664
|
+
pointer.refType = refType;
|
|
3665
|
+
return pointer;
|
|
3666
|
+
};
|
|
3667
|
+
var familyHasParent = (fam, indiId) => pointerIds(fam.get("HUSB")).includes(indiId) || pointerIds(fam.get("WIFE")).includes(indiId);
|
|
3668
|
+
var familyHasChild = (fam, indiId) => pointerIds(fam.get("CHIL")).includes(indiId);
|
|
3669
|
+
var spouseTagFor = (indi, fam) => {
|
|
3670
|
+
const husbId = firstPointerId(fam.get("HUSB"));
|
|
3671
|
+
const wifeId = firstPointerId(fam.get("WIFE"));
|
|
3672
|
+
if (husbId === indi.id) {
|
|
3673
|
+
return "HUSB";
|
|
3674
|
+
}
|
|
3675
|
+
if (wifeId === indi.id) {
|
|
3676
|
+
return "WIFE";
|
|
3677
|
+
}
|
|
3678
|
+
if (indi.isFemale()) {
|
|
3679
|
+
return wifeId && wifeId !== indi.id ? "HUSB" : "WIFE";
|
|
3680
|
+
}
|
|
3681
|
+
if (indi.isMale()) {
|
|
3682
|
+
return husbId && husbId !== indi.id ? "WIFE" : "HUSB";
|
|
3683
|
+
}
|
|
3684
|
+
return husbId ? "WIFE" : "HUSB";
|
|
3685
|
+
};
|
|
3686
|
+
var canAttachAsSpouse = (fam, indi) => {
|
|
3687
|
+
if (!indi.id) {
|
|
3688
|
+
return false;
|
|
3689
|
+
}
|
|
3690
|
+
if (familyHasParent(fam, indi.id)) {
|
|
3691
|
+
return true;
|
|
3692
|
+
}
|
|
3693
|
+
const tag = spouseTagFor(indi, fam);
|
|
3694
|
+
const occupied = firstPointerId(fam.get(tag));
|
|
3695
|
+
return !occupied || occupied === indi.id;
|
|
3696
|
+
};
|
|
3697
|
+
var pointerByValue = (tag, id) => {
|
|
3698
|
+
if (!tag) {
|
|
3699
|
+
return void 0;
|
|
3700
|
+
}
|
|
3701
|
+
const fromValues = tag.toValueList?.().item(id);
|
|
3702
|
+
if (fromValues) {
|
|
3703
|
+
return fromValues;
|
|
3704
|
+
}
|
|
3705
|
+
return tag.toList()?.values().find((item) => item?.toValue?.() === id);
|
|
3706
|
+
};
|
|
3707
|
+
var setChildPedigree = (fam, child, pedigree, parent) => {
|
|
3708
|
+
if (!fam.id || !child.id) {
|
|
3709
|
+
return;
|
|
3710
|
+
}
|
|
3711
|
+
const pedi = toGedcomPedigree(pedigree);
|
|
3712
|
+
const famc = pointerByValue(child.get("FAMC"), fam.id);
|
|
3713
|
+
if (famc) {
|
|
3714
|
+
famc.set("PEDI", pedi);
|
|
3715
|
+
}
|
|
3716
|
+
const chil = pointerByValue(fam.get("CHIL"), child.id);
|
|
3717
|
+
if (!chil) {
|
|
3718
|
+
return;
|
|
3719
|
+
}
|
|
3720
|
+
const setFather = !parent || parent.isMale() || parent.isUnknownSex();
|
|
3721
|
+
const setMother = !parent || parent.isFemale() || parent.isUnknownSex();
|
|
3722
|
+
if (setFather) {
|
|
3723
|
+
chil.set("_FREL", pedi);
|
|
3724
|
+
}
|
|
3725
|
+
if (setMother) {
|
|
3726
|
+
chil.set("_MREL", pedi);
|
|
3727
|
+
}
|
|
3728
|
+
};
|
|
3729
|
+
var attachSpouseToFamily = (fam, indi) => {
|
|
3730
|
+
const gedcom = fam.getGedcom() ?? indi.getGedcom();
|
|
3731
|
+
if (!indi.id || !fam.id || !gedcom) {
|
|
3732
|
+
return false;
|
|
3733
|
+
}
|
|
3734
|
+
if (!canAttachAsSpouse(fam, indi)) {
|
|
3735
|
+
return false;
|
|
3736
|
+
}
|
|
3737
|
+
const tag = spouseTagFor(indi, fam);
|
|
3738
|
+
if (firstPointerId(fam.get(tag)) !== indi.id) {
|
|
3739
|
+
fam.set(tag, makePointer(gedcom, fam, indi.id, "INDI"));
|
|
3740
|
+
}
|
|
3741
|
+
indi.assign("FAMS", makePointer(gedcom, indi, fam.id, "FAM"), true);
|
|
3742
|
+
return true;
|
|
3743
|
+
};
|
|
3744
|
+
var attachChildToFamily = (fam, child, pedigree, parent) => {
|
|
3745
|
+
const gedcom = fam.getGedcom() ?? child.getGedcom();
|
|
3746
|
+
if (!child.id || !fam.id || !gedcom) {
|
|
3747
|
+
return false;
|
|
3748
|
+
}
|
|
3749
|
+
if (!familyHasChild(fam, child.id)) {
|
|
3750
|
+
fam.assign("CHIL", makePointer(gedcom, fam, child.id, "INDI"), true);
|
|
3751
|
+
}
|
|
3752
|
+
const existingFamc = pointerByValue(child.get("FAMC"), fam.id);
|
|
3753
|
+
if (!existingFamc) {
|
|
3754
|
+
child.assign("FAMC", makePointer(gedcom, child, fam.id, "FAM"), true);
|
|
3755
|
+
}
|
|
3756
|
+
setChildPedigree(fam, child, pedigree, parent);
|
|
3757
|
+
return true;
|
|
3758
|
+
};
|
|
3759
|
+
var findReusableParentChildFamily = (parent, child) => {
|
|
3760
|
+
if (!parent.id || !child.id) {
|
|
3761
|
+
return void 0;
|
|
3762
|
+
}
|
|
3763
|
+
let reusableFamc;
|
|
3764
|
+
let already = false;
|
|
3765
|
+
child.getFamilies("FAMC")?.forEach((fam) => {
|
|
3766
|
+
if (!fam) {
|
|
3767
|
+
return;
|
|
3768
|
+
}
|
|
3769
|
+
if (familyHasParent(fam, parent.id) && familyHasChild(fam, child.id)) {
|
|
3770
|
+
already = true;
|
|
3771
|
+
return;
|
|
3772
|
+
}
|
|
3773
|
+
if (!reusableFamc && canAttachAsSpouse(fam, parent)) {
|
|
3774
|
+
reusableFamc = fam;
|
|
3775
|
+
}
|
|
3776
|
+
});
|
|
3777
|
+
if (already) {
|
|
3778
|
+
return "already";
|
|
3779
|
+
}
|
|
3780
|
+
if (reusableFamc) {
|
|
3781
|
+
return reusableFamc;
|
|
3782
|
+
}
|
|
3783
|
+
const parentFams = [];
|
|
3784
|
+
parent.getFamilies("FAMS")?.forEach((fam) => {
|
|
3785
|
+
if (fam) {
|
|
3786
|
+
parentFams.push(fam);
|
|
3787
|
+
}
|
|
3788
|
+
});
|
|
3789
|
+
if (parentFams.length === 1) {
|
|
3790
|
+
return parentFams[0];
|
|
3791
|
+
}
|
|
3792
|
+
return void 0;
|
|
3793
|
+
};
|
|
3794
|
+
|
|
3535
3795
|
// src/utils/get-places.ts
|
|
3536
3796
|
var getPlaces = (common, type = ["ALL" /* All */], maxLevel = 1, level = 0, mainKey) => {
|
|
3537
3797
|
const types = Array.isArray(type) ? type : [type];
|
|
@@ -4162,6 +4422,31 @@ var Fam = class extends Common {
|
|
|
4162
4422
|
getParents() {
|
|
4163
4423
|
return this.getHusband().copy().merge(this.getWife());
|
|
4164
4424
|
}
|
|
4425
|
+
hasParent(indi) {
|
|
4426
|
+
const indiId = typeof indi === "string" ? indi : indi?.id;
|
|
4427
|
+
return !!indiId && familyHasParent(this, indiId);
|
|
4428
|
+
}
|
|
4429
|
+
hasChild(indi) {
|
|
4430
|
+
const indiId = typeof indi === "string" ? indi : indi?.id;
|
|
4431
|
+
return !!indiId && familyHasChild(this, indiId);
|
|
4432
|
+
}
|
|
4433
|
+
canAddSpouse(indi) {
|
|
4434
|
+
return canAttachAsSpouse(this, indi);
|
|
4435
|
+
}
|
|
4436
|
+
addSpouse(indi) {
|
|
4437
|
+
return attachSpouseToFamily(this, indi);
|
|
4438
|
+
}
|
|
4439
|
+
addChild(child, pedigree, parent) {
|
|
4440
|
+
return attachChildToFamily(
|
|
4441
|
+
this,
|
|
4442
|
+
child,
|
|
4443
|
+
pedigree,
|
|
4444
|
+
parent
|
|
4445
|
+
);
|
|
4446
|
+
}
|
|
4447
|
+
addFact(input) {
|
|
4448
|
+
return addFamilyFact(this, input);
|
|
4449
|
+
}
|
|
4165
4450
|
toList() {
|
|
4166
4451
|
return new Families().concat(
|
|
4167
4452
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -4262,19 +4547,51 @@ var ALLOWED_FACTS = [
|
|
|
4262
4547
|
"OCCU",
|
|
4263
4548
|
"OCCUPATIONS",
|
|
4264
4549
|
"RESI",
|
|
4550
|
+
"BIRT",
|
|
4551
|
+
"DEAT",
|
|
4265
4552
|
"BAPT",
|
|
4553
|
+
"BAPM",
|
|
4266
4554
|
"CHRI",
|
|
4267
4555
|
"CHR",
|
|
4556
|
+
"CHRA",
|
|
4268
4557
|
"BURI",
|
|
4269
|
-
"
|
|
4558
|
+
"CREM",
|
|
4559
|
+
"ADOP",
|
|
4560
|
+
"BARM",
|
|
4561
|
+
"BASM",
|
|
4562
|
+
"BLES",
|
|
4563
|
+
"CONF",
|
|
4564
|
+
"FCOM",
|
|
4565
|
+
"ORDN",
|
|
4566
|
+
"NATU",
|
|
4567
|
+
"EMIG",
|
|
4568
|
+
"IMMI",
|
|
4569
|
+
"CENS",
|
|
4570
|
+
"PROB",
|
|
4571
|
+
"WILL",
|
|
4270
4572
|
"GRAD",
|
|
4573
|
+
"RETI",
|
|
4574
|
+
"EDUC",
|
|
4271
4575
|
"DIV",
|
|
4272
|
-
"IMMI",
|
|
4273
4576
|
"RELI",
|
|
4577
|
+
"CAST",
|
|
4578
|
+
"DSCR",
|
|
4579
|
+
"NATI",
|
|
4580
|
+
"PROP",
|
|
4581
|
+
"SSN",
|
|
4582
|
+
"TITL",
|
|
4583
|
+
"ADDR",
|
|
4584
|
+
"BAPL",
|
|
4585
|
+
"CONL",
|
|
4586
|
+
"ENDL",
|
|
4587
|
+
"SLGC",
|
|
4274
4588
|
"_MILT",
|
|
4275
4589
|
"_MILTID",
|
|
4276
4590
|
"FACT",
|
|
4277
|
-
"_ORIG"
|
|
4591
|
+
"_ORIG",
|
|
4592
|
+
"_WLNK",
|
|
4593
|
+
"WWW",
|
|
4594
|
+
"URL"
|
|
4278
4595
|
];
|
|
4279
4596
|
var DISALLOWED_CUSTOM_FACTS = ["DNA Test", "Newspaper"];
|
|
4280
4597
|
var CustomFactRenderers = {
|
|
@@ -4818,7 +5135,7 @@ var Indi = class extends Common {
|
|
|
4818
5135
|
return result;
|
|
4819
5136
|
}
|
|
4820
5137
|
ancestryLink() {
|
|
4821
|
-
const www = this._gedcom?.HEAD?.SOUR?.CORP?.WWW?.value;
|
|
5138
|
+
const www = this.getFromSourceHeads("SOUR.CORP.WWW.value") || this._gedcom?.HEAD?.SOUR?.CORP?.WWW?.value;
|
|
4822
5139
|
const tree = this.getAncestryTreeId();
|
|
4823
5140
|
if (this.id) {
|
|
4824
5141
|
return `https://${www}/family-tree/person/tree/${tree}/person/${this.id.replace(
|
|
@@ -4830,7 +5147,7 @@ var Indi = class extends Common {
|
|
|
4830
5147
|
async ancestryMedia(namespace) {
|
|
4831
5148
|
const list = {};
|
|
4832
5149
|
const objeList = this.get("OBJE")?.toList().copy();
|
|
4833
|
-
const www = this._gedcom?.HEAD?.SOUR?.CORP?.WWW?.value;
|
|
5150
|
+
const www = this.getFromSourceHeads("SOUR.CORP.WWW.value") || this._gedcom?.HEAD?.SOUR?.CORP?.WWW?.value;
|
|
4834
5151
|
const tree = this.getAncestryTreeId();
|
|
4835
5152
|
if (objeList) {
|
|
4836
5153
|
await Promise.all(
|
|
@@ -4890,7 +5207,7 @@ var Indi = class extends Common {
|
|
|
4890
5207
|
return list;
|
|
4891
5208
|
}
|
|
4892
5209
|
myheritageLink(poolId = 0) {
|
|
4893
|
-
const www = this._gedcom?.HEAD?.SOUR?.CORP?.value?.toLowerCase().replace(/^www\./gi, "");
|
|
5210
|
+
const www = (this.getFromSourceHeads("SOUR.CORP.value") || this._gedcom?.HEAD?.SOUR?.CORP?.value)?.toLowerCase().replace(/^www\./gi, "");
|
|
4894
5211
|
const site = this.getMyHeritageTreeId();
|
|
4895
5212
|
const file = this._gedcom?.HEAD?.get("FILE")?.toValue()?.match(/Exported by MyHeritage.com from .+ in (?<site>.+) on .+$/)?.groups?.site;
|
|
4896
5213
|
const normalizedFile = file?.normalize("NFD").replace(/[\u0300-\u036f]/g, "").toLowerCase().replace(/[^a-z0-9]+/g, "-");
|
|
@@ -5411,6 +5728,57 @@ var Indi = class extends Common {
|
|
|
5411
5728
|
isUnknownSex() {
|
|
5412
5729
|
return !this.isMale() && !this.isFemale();
|
|
5413
5730
|
}
|
|
5731
|
+
addSpouse(other) {
|
|
5732
|
+
if (!this.id || !other?.id || this.id === other.id || !this._gedcom) {
|
|
5733
|
+
return void 0;
|
|
5734
|
+
}
|
|
5735
|
+
const existing = getFamilyWith(this, other.id);
|
|
5736
|
+
if (existing) {
|
|
5737
|
+
return existing;
|
|
5738
|
+
}
|
|
5739
|
+
const fam = this._gedcom.createFamily();
|
|
5740
|
+
if (!fam.addSpouse(this) || !fam.addSpouse(other)) {
|
|
5741
|
+
return void 0;
|
|
5742
|
+
}
|
|
5743
|
+
return fam;
|
|
5744
|
+
}
|
|
5745
|
+
addChild(child, pedigree) {
|
|
5746
|
+
if (!this.id || !child?.id || this.id === child.id || !this._gedcom) {
|
|
5747
|
+
return void 0;
|
|
5748
|
+
}
|
|
5749
|
+
const existing = findReusableParentChildFamily(
|
|
5750
|
+
this,
|
|
5751
|
+
child
|
|
5752
|
+
);
|
|
5753
|
+
if (existing === "already") {
|
|
5754
|
+
const fam2 = child.getFamilies("FAMC")?.find(
|
|
5755
|
+
(item) => !!item && item.hasParent(this.id) && item.hasChild(child.id)
|
|
5756
|
+
);
|
|
5757
|
+
if (fam2) {
|
|
5758
|
+
setChildPedigree(
|
|
5759
|
+
fam2,
|
|
5760
|
+
child,
|
|
5761
|
+
pedigree,
|
|
5762
|
+
this
|
|
5763
|
+
);
|
|
5764
|
+
}
|
|
5765
|
+
return fam2;
|
|
5766
|
+
}
|
|
5767
|
+
const fam = existing ?? this._gedcom.createFamily();
|
|
5768
|
+
if (!fam.addSpouse(this)) {
|
|
5769
|
+
return void 0;
|
|
5770
|
+
}
|
|
5771
|
+
if (!fam.addChild(child, pedigree, this)) {
|
|
5772
|
+
return void 0;
|
|
5773
|
+
}
|
|
5774
|
+
return fam;
|
|
5775
|
+
}
|
|
5776
|
+
addParent(parent, pedigree) {
|
|
5777
|
+
return parent.addChild(this, pedigree);
|
|
5778
|
+
}
|
|
5779
|
+
addFact(input) {
|
|
5780
|
+
return addIndividualFact(this, input);
|
|
5781
|
+
}
|
|
5414
5782
|
getParentType(id) {
|
|
5415
5783
|
let indi;
|
|
5416
5784
|
if (typeof id === "string" || typeof id === "number") {
|
|
@@ -5611,7 +5979,9 @@ var Indi = class extends Common {
|
|
|
5611
5979
|
}
|
|
5612
5980
|
}
|
|
5613
5981
|
if (kinship !== "child" || !breakAfterSpouse) {
|
|
5614
|
-
indi.getBiologicalFathers().copy().merge(indi.getBiologicalMothers()).merge(
|
|
5982
|
+
indi.getBiologicalFathers().copy().merge(indi.getBiologicalMothers()).merge(
|
|
5983
|
+
indi.getFathers().copy().merge(indi.getMothers())
|
|
5984
|
+
).forEach((relative) => {
|
|
5615
5985
|
if (!visited.has(relative)) {
|
|
5616
5986
|
const currentRelation = indi.getParentType(relative);
|
|
5617
5987
|
const isNonBiological = !!currentRelation && currentRelation !== "biological" /* BIOLOGICAL */;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gedcom.d.ts","sourceRoot":"","sources":["../../src/structures/gedcom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE3D,OAAO,KAAK,iBAAiB,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,cAAc,MAAM,QAAQ,CAAC;AAEzC,UAAU,gBACT,SACC,MAAM,EACN,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,OAAO,CAAC,EACjC,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG;QACf,IAAI,CAAC,EAAE,MAAM,GAAG;YACf,IAAI,CAAC,EAAE,MAAM,CAAC;SACd,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,GAAG;YAChB,GAAG,CAAC,EAAE,MAAM,CAAC;SACb,CAAC;QACF,IAAI,CAAC,EAAE,MAAM,GAAG;YACf,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,GAAG;gBACf,IAAI,CAAC,EAAE,MAAM,CAAC;gBACd,KAAK,CAAC,EAAE,MAAM,CAAC;gBACf,GAAG,CAAC,EAAE,MAAM,CAAC;gBACb,GAAG,CAAC,EAAE,MAAM,CAAC;aACb,GAAG,iBAAiB,CAAC;YACtB,IAAI,CAAC,EAAE,MAAM,GAAG;gBACf,IAAI,CAAC,EAAE,MAAM,GAAG;oBACf,IAAI,CAAC,EAAE,MAAM,CAAC;iBACd,CAAC;gBACF,IAAI,CAAC,EAAE,MAAM,CAAC;aACd,CAAC;YACF,KAAK,CAAC,EAAE,MAAM,GAAG;gBAChB,GAAG,CAAC,EAAE,MAAM,CAAC;aACb,CAAC;SACF,CAAC;QAEF,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,GAAG;YACf,IAAI,CAAC,EAAE,MAAM,CAAC;SACd,CAAC;QACF,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,GAAG;YACf,IAAI,CAAC,EAAE,MAAM,CAAC;SACd,CAAC;KACF,GAAG,cAAc,CAAC;CACnB;AACD,eAAe,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"gedcom.d.ts","sourceRoot":"","sources":["../../src/structures/gedcom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAE3D,OAAO,KAAK,iBAAiB,MAAM,WAAW,CAAC;AAC/C,OAAO,KAAK,cAAc,MAAM,QAAQ,CAAC;AAEzC,UAAU,gBACT,SACC,MAAM,EACN,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,OAAO,CAAC,EACjC,OAAO,CAAC,MAAM,CAAC,GAAG,OAAO,EAAE,EAAE,IAAI,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,WAAW,CAAC;IACvB,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,GAAG;QACf,IAAI,CAAC,EAAE,MAAM,GAAG;YACf,IAAI,CAAC,EAAE,MAAM,CAAC;SACd,CAAC;QACF,KAAK,CAAC,EAAE,MAAM,GAAG;YAChB,GAAG,CAAC,EAAE,MAAM,CAAC;SACb,CAAC;QACF,IAAI,CAAC,EAAE,MAAM,GAAG;YACf,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,IAAI,CAAC,EAAE,MAAM,GAAG;gBACf,IAAI,CAAC,EAAE,MAAM,CAAC;gBACd,KAAK,CAAC,EAAE,MAAM,CAAC;gBACf,GAAG,CAAC,EAAE,MAAM,CAAC;gBACb,GAAG,CAAC,EAAE,MAAM,CAAC;aACb,GAAG,iBAAiB,CAAC;YACtB,IAAI,CAAC,EAAE,MAAM,GAAG;gBACf,IAAI,CAAC,EAAE,MAAM,GAAG;oBACf,IAAI,CAAC,EAAE,MAAM,CAAC;iBACd,CAAC;gBACF,IAAI,CAAC,EAAE,MAAM,CAAC;aACd,CAAC;YACF,KAAK,CAAC,EAAE,MAAM,GAAG;gBAChB,GAAG,CAAC,EAAE,MAAM,CAAC;aACb,CAAC;SACF,CAAC;QAEF,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,GAAG;YACf,IAAI,CAAC,EAAE,MAAM,CAAC;SACd,CAAC;QACF,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,GAAG;YACf,IAAI,CAAC,EAAE,MAAM,CAAC;SACd,CAAC;KACF,GAAG,cAAc,CAAC;CACnB;AACD,eAAe,gBAAgB,CAAC"}
|
package/dist/types/types.d.ts
CHANGED
|
@@ -50,9 +50,14 @@ interface Tags {
|
|
|
50
50
|
_MILT?: Common;
|
|
51
51
|
_MILTID?: Common;
|
|
52
52
|
_ORIG?: Common;
|
|
53
|
+
_ORIGHEAD?: Common;
|
|
53
54
|
_LABEL?: Common;
|
|
54
55
|
_WLNK?: Common;
|
|
55
56
|
_MARNM?: Common;
|
|
57
|
+
_UID?: Common;
|
|
58
|
+
_TID?: Common;
|
|
59
|
+
_TREE?: Common;
|
|
60
|
+
_ENV?: Common;
|
|
56
61
|
_INDI?: Common;
|
|
57
62
|
_GUESSEDORIGINAL?: Common;
|
|
58
63
|
_FS_LINK?: Common;
|
|
@@ -111,6 +116,7 @@ interface Tags {
|
|
|
111
116
|
DSCR?: Common;
|
|
112
117
|
EDUC?: Common;
|
|
113
118
|
EMIG?: Common;
|
|
119
|
+
EMAIL?: Common;
|
|
114
120
|
ENDL?: Common;
|
|
115
121
|
ENGA?: Common;
|
|
116
122
|
EVEN?: Common;
|
|
@@ -182,9 +188,13 @@ interface Tags {
|
|
|
182
188
|
VERS?: Common;
|
|
183
189
|
FORM?: Common;
|
|
184
190
|
WWW?: Common;
|
|
191
|
+
URL?: Common;
|
|
185
192
|
BAPT?: Common;
|
|
186
193
|
CHRI?: Common;
|
|
187
194
|
BURI?: Common;
|
|
195
|
+
CREM?: Common;
|
|
196
|
+
BLES?: Common;
|
|
197
|
+
PROP?: Common;
|
|
188
198
|
GEDC?: Common;
|
|
189
199
|
RFN?: Common;
|
|
190
200
|
}
|