@treeviz/gedcom-parser 1.0.1 → 1.0.3
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/README.md +176 -0
- package/bin/gedcom-parser.js +3 -0
- package/dist/classes/common.js +7 -7
- package/dist/classes/date.js +4 -4
- package/dist/classes/fam.js +3 -3
- package/dist/classes/fams.js +3 -3
- package/dist/classes/gedcom.d.ts +29 -0
- package/dist/classes/gedcom.d.ts.map +1 -1
- package/dist/classes/gedcom.js +180 -4
- package/dist/classes/index.js +18 -18
- package/dist/classes/indi.js +13 -13
- package/dist/classes/indis.d.ts.map +1 -1
- package/dist/classes/indis.js +42 -24
- package/dist/classes/list.js +6 -6
- package/dist/classes/name.js +2 -2
- package/dist/classes/note.js +2 -2
- package/dist/classes/obje.js +1 -1
- package/dist/classes/objes.js +1 -1
- package/dist/classes/repo.js +1 -1
- package/dist/classes/repos.js +1 -1
- package/dist/classes/sour.js +1 -1
- package/dist/classes/sours.js +1 -1
- package/dist/classes/subm.js +1 -1
- package/dist/classes/subms.js +1 -1
- package/dist/cli/commands/convert.d.ts +3 -0
- package/dist/cli/commands/convert.d.ts.map +1 -0
- package/dist/cli/commands/convert.js +83 -0
- package/dist/cli/commands/extract.d.ts +3 -0
- package/dist/cli/commands/extract.d.ts.map +1 -0
- package/dist/cli/commands/extract.js +85 -0
- package/dist/cli/commands/find.d.ts +3 -0
- package/dist/cli/commands/find.d.ts.map +1 -0
- package/dist/cli/commands/find.js +97 -0
- package/dist/cli/commands/info.d.ts +3 -0
- package/dist/cli/commands/info.d.ts.map +1 -0
- package/dist/cli/commands/info.js +80 -0
- package/dist/cli/commands/merge.d.ts +3 -0
- package/dist/cli/commands/merge.d.ts.map +1 -0
- package/dist/cli/commands/merge.js +93 -0
- package/dist/cli/commands/relatives.d.ts +3 -0
- package/dist/cli/commands/relatives.d.ts.map +1 -0
- package/dist/cli/commands/relatives.js +107 -0
- package/dist/cli/commands/show.d.ts +3 -0
- package/dist/cli/commands/show.d.ts.map +1 -0
- package/dist/cli/commands/show.js +176 -0
- package/dist/cli/commands/stats.d.ts +3 -0
- package/dist/cli/commands/stats.d.ts.map +1 -0
- package/dist/cli/commands/stats.js +59 -0
- package/dist/cli/commands/validate.d.ts +3 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +148 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +40 -0
- package/dist/cli/utils/formatters.d.ts +69 -0
- package/dist/cli/utils/formatters.d.ts.map +1 -0
- package/dist/cli/utils/formatters.js +125 -0
- package/dist/cli/utils/helpers.d.ts +21 -0
- package/dist/cli/utils/helpers.d.ts.map +1 -0
- package/dist/cli/utils/helpers.js +58 -0
- package/dist/constants/filters.js +1 -1
- package/dist/constants/index.js +3 -3
- package/dist/constants/orders.js +2 -2
- package/dist/factories/cache-factory.js +1 -1
- package/dist/factories/date-locale-factory.js +1 -1
- package/dist/factories/i18n-factory.js +1 -1
- package/dist/factories/index.js +4 -4
- package/dist/factories/kinship-factory.js +2 -2
- package/dist/factories/place-parser-provider.js +1 -1
- package/dist/factories/place-translator-provider.js +1 -1
- package/dist/index.js +37 -37
- package/dist/kinship-translator/index.js +9 -9
- package/dist/kinship-translator/kinship-translator.de.js +3 -3
- package/dist/kinship-translator/kinship-translator.en.js +4 -4
- package/dist/kinship-translator/kinship-translator.es.js +4 -4
- package/dist/kinship-translator/kinship-translator.fr.js +4 -4
- package/dist/kinship-translator/kinship-translator.hu.js +4 -4
- package/dist/kinship-translator/kinship-translator.js +1 -1
- package/dist/kinship-translator/translators.js +5 -5
- package/dist/types/index.js +3 -3
- package/dist/utils/cache.js +2 -2
- package/dist/utils/common-creator.js +11 -11
- package/dist/utils/date-formatter.js +3 -3
- package/dist/utils/get-places.js +1 -1
- package/dist/utils/get-product-details.js +1 -1
- package/dist/utils/index.js +16 -16
- package/dist/utils/name-formatter.js +2 -2
- package/dist/utils/nested-group.js +3 -3
- package/dist/utils/parser.js +14 -14
- package/package.json +13 -4
package/README.md
CHANGED
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
# @treeviz/gedcom-parser
|
|
2
2
|
|
|
3
|
+
> Part of the [@treeviz](https://www.npmjs.com/org/treeviz) organization - A collection of tools for genealogy data processing and visualization.
|
|
4
|
+
|
|
3
5
|
A lightweight, pluggable GEDCOM parser library for JavaScript/TypeScript applications. Originally part of [TreeViz](https://treeviz.com), extracted as a standalone package for reusability.
|
|
4
6
|
|
|
5
7
|
## Features
|
|
6
8
|
|
|
7
9
|
- 🚀 **Parse GEDCOM files** - Full GEDCOM 5.5.1 support
|
|
10
|
+
- 🖥️ **Command-Line Interface** - CLI tools for common GEDCOM operations
|
|
8
11
|
- 🔌 **Pluggable Architecture** - Zero dependencies on browser-specific APIs
|
|
9
12
|
- 💾 **Optional Caching** - Provide your own cache implementation (IndexedDB, localStorage, Redis, etc.)
|
|
10
13
|
- 🌍 **Optional Place Matching** - Provide your own country/place data
|
|
@@ -39,6 +42,179 @@ individuals.forEach(indi => {
|
|
|
39
42
|
});
|
|
40
43
|
```
|
|
41
44
|
|
|
45
|
+
## Command-Line Interface (CLI)
|
|
46
|
+
|
|
47
|
+
The package includes a powerful CLI for working with GEDCOM files directly from the terminal.
|
|
48
|
+
|
|
49
|
+
### Installation
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
# Install globally
|
|
53
|
+
npm install -g @treeviz/gedcom-parser
|
|
54
|
+
|
|
55
|
+
# Or use npx
|
|
56
|
+
npx @treeviz/gedcom-parser --help
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Available Commands
|
|
60
|
+
|
|
61
|
+
#### `info` - Display file information
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
gedcom-parser info <file> [options]
|
|
65
|
+
|
|
66
|
+
# Show basic statistics
|
|
67
|
+
gedcom-parser info family.ged
|
|
68
|
+
|
|
69
|
+
# Show detailed information
|
|
70
|
+
gedcom-parser info family.ged --verbose
|
|
71
|
+
|
|
72
|
+
# Output as JSON
|
|
73
|
+
gedcom-parser info family.ged --json
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
#### `find` - Search for individuals
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
gedcom-parser find <file> [query] [options]
|
|
80
|
+
|
|
81
|
+
# Find by name
|
|
82
|
+
gedcom-parser find family.ged "John Smith"
|
|
83
|
+
|
|
84
|
+
# Find by ID
|
|
85
|
+
gedcom-parser find family.ged --id @I123@
|
|
86
|
+
|
|
87
|
+
# Find with filters
|
|
88
|
+
gedcom-parser find family.ged --birth-year 1850 --death-year 1920
|
|
89
|
+
|
|
90
|
+
# Output as JSON
|
|
91
|
+
gedcom-parser find family.ged "Smith" --json
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
#### `show` - Display individual details
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
gedcom-parser show <file> <id> [options]
|
|
98
|
+
|
|
99
|
+
# Show individual details
|
|
100
|
+
gedcom-parser show family.ged @I123@
|
|
101
|
+
|
|
102
|
+
# Output as JSON
|
|
103
|
+
gedcom-parser show family.ged @I123@ --json
|
|
104
|
+
|
|
105
|
+
# Output as Markdown
|
|
106
|
+
gedcom-parser show family.ged @I123@ --format markdown
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
#### `validate` - Validate GEDCOM file
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
gedcom-parser validate <file> [options]
|
|
113
|
+
|
|
114
|
+
# Validate file
|
|
115
|
+
gedcom-parser validate family.ged
|
|
116
|
+
|
|
117
|
+
# Strict validation
|
|
118
|
+
gedcom-parser validate family.ged --strict
|
|
119
|
+
|
|
120
|
+
# Output as JSON
|
|
121
|
+
gedcom-parser validate family.ged --json
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
#### `relatives` - Extract family tree
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
gedcom-parser relatives <file> <id> [options]
|
|
128
|
+
|
|
129
|
+
# Get ancestors
|
|
130
|
+
gedcom-parser relatives family.ged @I123@ --ancestors
|
|
131
|
+
|
|
132
|
+
# Get descendants
|
|
133
|
+
gedcom-parser relatives family.ged @I123@ --descendants
|
|
134
|
+
|
|
135
|
+
# Get full tree (ancestors and descendants)
|
|
136
|
+
gedcom-parser relatives family.ged @I123@ --tree
|
|
137
|
+
|
|
138
|
+
# Limit depth
|
|
139
|
+
gedcom-parser relatives family.ged @I123@ --ancestors --depth 3
|
|
140
|
+
|
|
141
|
+
# Save to file
|
|
142
|
+
gedcom-parser relatives family.ged @I123@ --tree --output subset.ged
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
#### `extract` - Create filtered subset
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
gedcom-parser extract <file> --output <output> [options]
|
|
149
|
+
|
|
150
|
+
# Extract by surname
|
|
151
|
+
gedcom-parser extract family.ged --surname Smith --output smiths.ged
|
|
152
|
+
|
|
153
|
+
# Extract by birth year range
|
|
154
|
+
gedcom-parser extract family.ged --birth-after 1900 --birth-before 2000 --output 20th-century.ged
|
|
155
|
+
|
|
156
|
+
# Combine filters
|
|
157
|
+
gedcom-parser extract family.ged --surname "Johnson" --birth-after 1850 --output johnsons.ged
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
#### `stats` - Generate statistics
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
gedcom-parser stats <file> [options]
|
|
164
|
+
|
|
165
|
+
# Show statistics
|
|
166
|
+
gedcom-parser stats family.ged
|
|
167
|
+
|
|
168
|
+
# Output as JSON
|
|
169
|
+
gedcom-parser stats family.ged --json
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
#### `merge` - Combine GEDCOM files
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
gedcom-parser merge <files...> --output <output> [options]
|
|
176
|
+
|
|
177
|
+
# Merge multiple files
|
|
178
|
+
gedcom-parser merge file1.ged file2.ged file3.ged --output merged.ged
|
|
179
|
+
|
|
180
|
+
# Merge with deduplication
|
|
181
|
+
gedcom-parser merge file1.ged file2.ged --output merged.ged --dedupe
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
#### `convert` - Convert to other formats
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
gedcom-parser convert <file> --format <format> [options]
|
|
188
|
+
|
|
189
|
+
# Convert to JSON
|
|
190
|
+
gedcom-parser convert family.ged --format json --output data.json
|
|
191
|
+
|
|
192
|
+
# Convert to CSV
|
|
193
|
+
gedcom-parser convert family.ged --format csv --output individuals.csv
|
|
194
|
+
|
|
195
|
+
# Convert to Markdown
|
|
196
|
+
gedcom-parser convert family.ged --format markdown --output tree.md
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### CLI Examples
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
# Find all individuals with surname "Smith" born after 1900
|
|
203
|
+
gedcom-parser find family.ged --surname Smith --birth-after 1900
|
|
204
|
+
|
|
205
|
+
# Show detailed information about an individual
|
|
206
|
+
gedcom-parser show family.ged @I123@
|
|
207
|
+
|
|
208
|
+
# Extract all descendants of an individual
|
|
209
|
+
gedcom-parser relatives family.ged @I123@ --descendants --output descendants.ged
|
|
210
|
+
|
|
211
|
+
# Generate statistics in JSON format
|
|
212
|
+
gedcom-parser stats family.ged --json > stats.json
|
|
213
|
+
|
|
214
|
+
# Validate and check for errors
|
|
215
|
+
gedcom-parser validate family.ged
|
|
216
|
+
```
|
|
217
|
+
|
|
42
218
|
## Factory Providers
|
|
43
219
|
|
|
44
220
|
The package uses factory patterns to allow customization of core functionality. All factories are **optional** - the package provides sensible defaults.
|
package/dist/classes/common.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import get from "lodash/get";
|
|
2
|
-
import set from "lodash/set";
|
|
3
|
-
import uniqBy from "lodash/uniqBy";
|
|
4
|
-
import unset from "lodash/unset";
|
|
5
|
-
import { ID_GETTER_REG, ID_REG } from "../constants/constants";
|
|
6
|
-
import { List } from "./list";
|
|
7
|
-
// import GedcomTree from "../../../utils/parser";
|
|
1
|
+
import get from "lodash-es/get.js";
|
|
2
|
+
import set from "lodash-es/set.js";
|
|
3
|
+
import uniqBy from "lodash-es/uniqBy.js";
|
|
4
|
+
import unset from "lodash-es/unset.js";
|
|
5
|
+
import { ID_GETTER_REG, ID_REG } from "../constants/constants.js";
|
|
6
|
+
import { List } from "./list.js";
|
|
7
|
+
// import GedcomTree from "../../../utils/parser.js";
|
|
8
8
|
export class Common {
|
|
9
9
|
constructor(gedcom, id, main, parent) {
|
|
10
10
|
this.isListable = true;
|
package/dist/classes/date.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { format, isValid, parse } from "date-fns";
|
|
2
|
-
import { ACCEPTED_DATE_FORMATS } from "../utils/date-formatter";
|
|
3
|
-
import { inRange } from "../utils/range";
|
|
4
|
-
import { Common, createCommon, createProxy } from "./common";
|
|
5
|
-
import { getDateLocale } from "../factories";
|
|
2
|
+
import { ACCEPTED_DATE_FORMATS } from "../utils/date-formatter.js";
|
|
3
|
+
import { inRange } from "../utils/range.js";
|
|
4
|
+
import { Common, createCommon, createProxy } from "./common.js";
|
|
5
|
+
import { getDateLocale } from "../factories/index.js";
|
|
6
6
|
const LONG_NOTES = {
|
|
7
7
|
"Abt.": "About",
|
|
8
8
|
"Bef.": "Before",
|
package/dist/classes/fam.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Common, createProxy } from "./common";
|
|
2
|
-
import { Families } from "./fams";
|
|
3
|
-
import { Individuals } from "./indis";
|
|
1
|
+
import { Common, createProxy } from "./common.js";
|
|
2
|
+
import { Families } from "./fams.js";
|
|
3
|
+
import { Individuals } from "./indis.js";
|
|
4
4
|
export class Fam extends Common {
|
|
5
5
|
getFamilyMembers(type) {
|
|
6
6
|
const familyMembers = new Individuals();
|
package/dist/classes/fams.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { Fam } from "./fam";
|
|
2
|
-
import { Individuals } from "./indis";
|
|
3
|
-
import { List } from "./list";
|
|
1
|
+
import { Fam } from "./fam.js";
|
|
2
|
+
import { Individuals } from "./indis.js";
|
|
3
|
+
import { List } from "./list.js";
|
|
4
4
|
export class Families extends List {
|
|
5
5
|
copy() {
|
|
6
6
|
return super.copy(Families);
|
package/dist/classes/gedcom.d.ts
CHANGED
|
@@ -73,6 +73,35 @@ export declare class GedCom extends Common implements IGedcom {
|
|
|
73
73
|
* @returns Record mapping place names to arrays of individual IDs
|
|
74
74
|
*/
|
|
75
75
|
getAllPlacesWithIndis(usedIndis?: IndiKey[]): Record<string, (`@I${number}@` | `@P${number}@` | `@XI${number}@` | `@XXI${number}@`)[]>;
|
|
76
|
+
/**
|
|
77
|
+
* Generate statistics about the GEDCOM file
|
|
78
|
+
* @param individuals Optional list of individuals to calculate statistics for. If not provided, all individuals from the GEDCOM will be used.
|
|
79
|
+
* @returns Object containing various statistics about the GEDCOM data
|
|
80
|
+
*/
|
|
81
|
+
stats(individuals?: Individuals): {
|
|
82
|
+
totalIndividuals: number;
|
|
83
|
+
totalFamilies: number;
|
|
84
|
+
byGender: {
|
|
85
|
+
males: number;
|
|
86
|
+
females: number;
|
|
87
|
+
unknown: number;
|
|
88
|
+
};
|
|
89
|
+
dateRange: {
|
|
90
|
+
earliest: number;
|
|
91
|
+
latest: number;
|
|
92
|
+
};
|
|
93
|
+
averageLifespan: number;
|
|
94
|
+
topSurnames: {
|
|
95
|
+
surname: string;
|
|
96
|
+
count: number;
|
|
97
|
+
}[];
|
|
98
|
+
topBirthPlaces: {
|
|
99
|
+
place: string;
|
|
100
|
+
count: number;
|
|
101
|
+
}[];
|
|
102
|
+
firstPersonEvent: any;
|
|
103
|
+
lastPersonEvent: any;
|
|
104
|
+
};
|
|
76
105
|
}
|
|
77
106
|
export type GedComType = GedCom & IGedComStructure;
|
|
78
107
|
export declare const createGedCom: () => GedComType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gedcom.d.ts","sourceRoot":"","sources":["../../src/classes/gedcom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAC;AAChD,OAAO,KAAK,gBAAgB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"gedcom.d.ts","sourceRoot":"","sources":["../../src/classes/gedcom.ts"],"names":[],"mappings":"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"}
|
package/dist/classes/gedcom.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { getVersion } from "../utils/get-product-details";
|
|
2
|
-
import { Common, createCommon } from "./common";
|
|
3
|
-
import { CustomTags } from "./indi";
|
|
4
|
-
import { List } from "./list";
|
|
1
|
+
import { getVersion } from "../utils/get-product-details.js";
|
|
2
|
+
import { Common, createCommon } from "./common.js";
|
|
3
|
+
import { CustomTags } from "./indi.js";
|
|
4
|
+
import { List } from "./list.js";
|
|
5
5
|
export class GedCom extends Common {
|
|
6
6
|
constructor() {
|
|
7
7
|
super();
|
|
@@ -356,6 +356,182 @@ export class GedCom extends Common {
|
|
|
356
356
|
});
|
|
357
357
|
return allPlaces;
|
|
358
358
|
}
|
|
359
|
+
/**
|
|
360
|
+
* Generate statistics about the GEDCOM file
|
|
361
|
+
* @param individuals Optional list of individuals to calculate statistics for. If not provided, all individuals from the GEDCOM will be used.
|
|
362
|
+
* @returns Object containing various statistics about the GEDCOM data
|
|
363
|
+
*/
|
|
364
|
+
stats(individuals) {
|
|
365
|
+
const indis = individuals ?? this.indis();
|
|
366
|
+
// Build families list based on whether individuals filter is provided
|
|
367
|
+
let families;
|
|
368
|
+
if (individuals) {
|
|
369
|
+
// If individuals filter is provided, filter families by references
|
|
370
|
+
const familyIds = new Set();
|
|
371
|
+
indis?.forEach((indi) => {
|
|
372
|
+
// Add spouse families
|
|
373
|
+
indi.FAMS?.toList()?.forEach((famRef) => {
|
|
374
|
+
const famId = famRef.value;
|
|
375
|
+
if (famId)
|
|
376
|
+
familyIds.add(famId);
|
|
377
|
+
});
|
|
378
|
+
// Add parent families
|
|
379
|
+
indi.FAMC?.toList()?.forEach((famRef) => {
|
|
380
|
+
const famId = famRef.value;
|
|
381
|
+
if (famId)
|
|
382
|
+
familyIds.add(famId);
|
|
383
|
+
});
|
|
384
|
+
});
|
|
385
|
+
families = this.fams()?.filter((fam) => fam.id ? familyIds.has(fam.id) : false);
|
|
386
|
+
}
|
|
387
|
+
else {
|
|
388
|
+
// No filter provided, use all families directly
|
|
389
|
+
families = this.fams();
|
|
390
|
+
} // Calculate statistics
|
|
391
|
+
const totalIndividuals = indis?.length || 0;
|
|
392
|
+
const totalFamilies = families?.length || 0;
|
|
393
|
+
// Count by sex
|
|
394
|
+
let males = 0;
|
|
395
|
+
let females = 0;
|
|
396
|
+
let unknownSex = 0;
|
|
397
|
+
indis?.forEach((indi) => {
|
|
398
|
+
const sex = indi.SEX?.value;
|
|
399
|
+
if (sex === "M")
|
|
400
|
+
males++;
|
|
401
|
+
else if (sex === "F")
|
|
402
|
+
females++;
|
|
403
|
+
else
|
|
404
|
+
unknownSex++;
|
|
405
|
+
});
|
|
406
|
+
// Most common surnames
|
|
407
|
+
const surnames = new Map();
|
|
408
|
+
indis?.forEach((indi) => {
|
|
409
|
+
const name = indi.NAME?.toValue();
|
|
410
|
+
if (name) {
|
|
411
|
+
const match = name.match(/\/(.+?)\//);
|
|
412
|
+
if (match) {
|
|
413
|
+
const surname = match[1];
|
|
414
|
+
surnames.set(surname, (surnames.get(surname) || 0) + 1);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
});
|
|
418
|
+
const topSurnames = Array.from(surnames.entries())
|
|
419
|
+
.sort((a, b) => b[1] - a[1])
|
|
420
|
+
.slice(0, 10)
|
|
421
|
+
.map(([surname, count]) => ({ surname, count }));
|
|
422
|
+
// Most common birth places
|
|
423
|
+
const birthPlaces = new Map();
|
|
424
|
+
indis?.forEach((indi) => {
|
|
425
|
+
const place = indi.BIRT?.PLAC?.value;
|
|
426
|
+
if (place) {
|
|
427
|
+
birthPlaces.set(place, (birthPlaces.get(place) || 0) + 1);
|
|
428
|
+
}
|
|
429
|
+
});
|
|
430
|
+
const topBirthPlaces = Array.from(birthPlaces.entries())
|
|
431
|
+
.sort((a, b) => b[1] - a[1])
|
|
432
|
+
.slice(0, 10)
|
|
433
|
+
.map(([place, count]) => ({ place, count }));
|
|
434
|
+
// Date range
|
|
435
|
+
const years = [];
|
|
436
|
+
indis?.forEach((indi) => {
|
|
437
|
+
const birthDate = indi.BIRT?.DATE?.toValue();
|
|
438
|
+
if (birthDate) {
|
|
439
|
+
const match = birthDate.match(/\d{4}/);
|
|
440
|
+
if (match) {
|
|
441
|
+
years.push(parseInt(match[0], 10));
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
const deathDate = indi.DEAT?.DATE?.toValue();
|
|
445
|
+
if (deathDate) {
|
|
446
|
+
const match = deathDate.match(/\d{4}/);
|
|
447
|
+
if (match) {
|
|
448
|
+
years.push(parseInt(match[0], 10));
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
});
|
|
452
|
+
const minYear = years.length > 0 ? Math.min(...years) : null;
|
|
453
|
+
const maxYear = years.length > 0 ? Math.max(...years) : null;
|
|
454
|
+
// Average lifespan
|
|
455
|
+
const lifespans = [];
|
|
456
|
+
indis?.forEach((indi) => {
|
|
457
|
+
const birthDate = indi.BIRT?.DATE?.toValue();
|
|
458
|
+
const deathDate = indi.DEAT?.DATE?.toValue();
|
|
459
|
+
if (birthDate && deathDate) {
|
|
460
|
+
const birthMatch = birthDate.match(/\d{4}/);
|
|
461
|
+
const deathMatch = deathDate.match(/\d{4}/);
|
|
462
|
+
if (birthMatch && deathMatch) {
|
|
463
|
+
const birthYear = parseInt(birthMatch[0], 10);
|
|
464
|
+
const deathYear = parseInt(deathMatch[0], 10);
|
|
465
|
+
if (deathYear > birthYear) {
|
|
466
|
+
lifespans.push(deathYear - birthYear);
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
});
|
|
471
|
+
const avgLifespan = lifespans.length > 0
|
|
472
|
+
? lifespans.reduce((sum, age) => sum + age, 0) /
|
|
473
|
+
lifespans.length
|
|
474
|
+
: null;
|
|
475
|
+
// First and last person events with type information
|
|
476
|
+
const firstPerson = indis?.getFirstEvent();
|
|
477
|
+
const firstBirth = firstPerson?.BIRT?.toList().index(0);
|
|
478
|
+
const firstDeath = firstPerson?.DEAT?.toList().index(0);
|
|
479
|
+
let firstPersonEvent = null;
|
|
480
|
+
const firstBirthDate = firstBirth?.DATE
|
|
481
|
+
?.rawValue;
|
|
482
|
+
const firstDeathDate = firstDeath?.DATE
|
|
483
|
+
?.rawValue;
|
|
484
|
+
if (firstBirthDate || firstDeathDate) {
|
|
485
|
+
const isBirth = !firstBirthDate ||
|
|
486
|
+
(firstDeathDate && firstDeathDate < firstBirthDate)
|
|
487
|
+
? false
|
|
488
|
+
: true;
|
|
489
|
+
firstPersonEvent = {
|
|
490
|
+
type: isBirth ? "BIRT" : "DEAT",
|
|
491
|
+
event: isBirth ? firstBirth : firstDeath,
|
|
492
|
+
person: firstPerson,
|
|
493
|
+
};
|
|
494
|
+
}
|
|
495
|
+
const lastPerson = indis?.getLastEvent();
|
|
496
|
+
const lastBirth = lastPerson?.BIRT?.toList().index(0);
|
|
497
|
+
const lastDeath = lastPerson?.DEAT?.toList().index(0);
|
|
498
|
+
let lastPersonEvent = null;
|
|
499
|
+
const lastBirthDate = lastBirth
|
|
500
|
+
?.DATE?.rawValue;
|
|
501
|
+
const lastDeathDate = lastDeath
|
|
502
|
+
?.DATE?.rawValue;
|
|
503
|
+
if (lastBirthDate || lastDeathDate) {
|
|
504
|
+
const isBirth = !lastDeathDate ||
|
|
505
|
+
(lastBirthDate && lastDeathDate < lastBirthDate)
|
|
506
|
+
? true
|
|
507
|
+
: false;
|
|
508
|
+
lastPersonEvent = {
|
|
509
|
+
type: isBirth ? "BIRT" : "DEAT",
|
|
510
|
+
event: isBirth ? lastBirth : lastDeath,
|
|
511
|
+
person: lastPerson,
|
|
512
|
+
};
|
|
513
|
+
}
|
|
514
|
+
return {
|
|
515
|
+
totalIndividuals,
|
|
516
|
+
totalFamilies,
|
|
517
|
+
byGender: {
|
|
518
|
+
males,
|
|
519
|
+
females,
|
|
520
|
+
unknown: unknownSex,
|
|
521
|
+
},
|
|
522
|
+
dateRange: {
|
|
523
|
+
earliest: minYear,
|
|
524
|
+
latest: maxYear,
|
|
525
|
+
},
|
|
526
|
+
averageLifespan: avgLifespan
|
|
527
|
+
? Math.round(avgLifespan * 10) / 10
|
|
528
|
+
: null,
|
|
529
|
+
topSurnames,
|
|
530
|
+
topBirthPlaces,
|
|
531
|
+
firstPersonEvent,
|
|
532
|
+
lastPersonEvent,
|
|
533
|
+
};
|
|
534
|
+
}
|
|
359
535
|
}
|
|
360
536
|
export const createGedCom = () => {
|
|
361
537
|
return new GedCom();
|
package/dist/classes/index.js
CHANGED
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
// Classes exports - barrel file for easier imports
|
|
2
|
-
export * from "./common";
|
|
3
|
-
export * from "./date";
|
|
4
|
-
export * from "./fam";
|
|
5
|
-
export * from "./fams";
|
|
6
|
-
export * from "./gedcom";
|
|
7
|
-
export * from "./indi";
|
|
8
|
-
export * from "./indis";
|
|
9
|
-
export * from "./list";
|
|
10
|
-
export * from "./name";
|
|
11
|
-
export * from "./note";
|
|
12
|
-
export * from "./obje";
|
|
13
|
-
export * from "./objes";
|
|
14
|
-
export * from "./repo";
|
|
15
|
-
export * from "./repos";
|
|
16
|
-
export * from "./sour";
|
|
17
|
-
export * from "./sours";
|
|
18
|
-
export * from "./subm";
|
|
19
|
-
export * from "./subms";
|
|
2
|
+
export * from "./common.js";
|
|
3
|
+
export * from "./date.js";
|
|
4
|
+
export * from "./fam.js";
|
|
5
|
+
export * from "./fams.js";
|
|
6
|
+
export * from "./gedcom.js";
|
|
7
|
+
export * from "./indi.js";
|
|
8
|
+
export * from "./indis.js";
|
|
9
|
+
export * from "./list.js";
|
|
10
|
+
export * from "./name.js";
|
|
11
|
+
export * from "./note.js";
|
|
12
|
+
export * from "./obje.js";
|
|
13
|
+
export * from "./objes.js";
|
|
14
|
+
export * from "./repo.js";
|
|
15
|
+
export * from "./repos.js";
|
|
16
|
+
export * from "./sour.js";
|
|
17
|
+
export * from "./sours.js";
|
|
18
|
+
export * from "./subm.js";
|
|
19
|
+
export * from "./subms.js";
|
package/dist/classes/indi.js
CHANGED
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import * as Filters from "../constants/filters";
|
|
2
|
-
import { BIRTH_ASC, DATE_ASC, getMarriageAscAndChildBirth, } from "../constants/orders";
|
|
3
|
-
import { getKinshipTranslatorClass } from "../factories/kinship-factory";
|
|
4
|
-
import { RelationType, PartnerType } from "../types/types";
|
|
5
|
-
import { pathCache, relativesCache } from "../utils/cache";
|
|
6
|
-
import { dateFormatter } from "../utils/date-formatter";
|
|
7
|
-
import { PlaceType, getPlaces } from "../utils/get-places";
|
|
8
|
-
import { implemented } from "../utils/logger";
|
|
9
|
-
import { Common, createCommon, createProxy } from "./common";
|
|
10
|
-
import { Families } from "./fams";
|
|
11
|
-
import { Individuals } from "./indis";
|
|
12
|
-
import { List } from "./list";
|
|
13
|
-
import { CommonName, createCommonName } from "./name";
|
|
1
|
+
import * as Filters from "../constants/filters.js";
|
|
2
|
+
import { BIRTH_ASC, DATE_ASC, getMarriageAscAndChildBirth, } from "../constants/orders.js";
|
|
3
|
+
import { getKinshipTranslatorClass } from "../factories/kinship-factory.js";
|
|
4
|
+
import { RelationType, PartnerType } from "../types/types.js";
|
|
5
|
+
import { pathCache, relativesCache } from "../utils/cache.js";
|
|
6
|
+
import { dateFormatter } from "../utils/date-formatter.js";
|
|
7
|
+
import { PlaceType, getPlaces } from "../utils/get-places.js";
|
|
8
|
+
import { implemented } from "../utils/logger.js";
|
|
9
|
+
import { Common, createCommon, createProxy } from "./common.js";
|
|
10
|
+
import { Families } from "./fams.js";
|
|
11
|
+
import { Individuals } from "./indis.js";
|
|
12
|
+
import { List } from "./list.js";
|
|
13
|
+
import { CommonName, createCommonName } from "./name.js";
|
|
14
14
|
export var Existed;
|
|
15
15
|
(function (Existed) {
|
|
16
16
|
Existed["SPOUSE"] = "spouse";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indis.d.ts","sourceRoot":"","sources":["../../src/classes/indis.ts"],"names":[],"mappings":"AAUA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EACN,KAAK,OAAO,EACZ,KAAK,MAAM,EAEX,KAAK,aAAa,EAElB,KAAK,EACL,KAAK,WAAW,EAChB,KAAK,KAAK,EACV,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,KAAK,EACV,MAAM,gBAAgB,CAAC;AAQxB,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,QAAQ,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,qBAAa,WACZ,SAAQ,IAAI,CAAC,OAAO,EAAE,QAAQ,CAC9B,YAAW,YAAY;IAEvB,IAAI,IAAI,WAAW;IAInB,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,WAAW;IAInC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,WAAW;IAIxE,IAAI,CACH,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,GACjD,QAAQ,GAAG,SAAS;IAIvB,gBAAgB,CAAC,aAAa,EAAE,OAAO;IAQvC,OAAO,CAAC,MAAM,EAAE,KAAK,GAAG,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,GAAG,WAAW;IAItE,aAAa;
|
|
1
|
+
{"version":3,"file":"indis.d.ts","sourceRoot":"","sources":["../../src/classes/indis.ts"],"names":[],"mappings":"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"}
|
package/dist/classes/indis.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import difference from "lodash/difference";
|
|
2
|
-
import { BIRTH_ASC, BIRTH_DESC, DEATH_ASC, DEATH_DESC, } from "../constants/orders";
|
|
3
|
-
import { getPlaceParserProvider } from "../factories/place-parser-provider";
|
|
4
|
-
import { getPlaceTranslatorProvider } from "../factories/place-translator-provider";
|
|
5
|
-
import { Range, } from "../types/types";
|
|
6
|
-
import { nameFormatter } from "../utils/name-formatter";
|
|
7
|
-
import { setNestedGroup } from "../utils/nested-group";
|
|
8
|
-
import { getPlaceParts } from "../utils/place-parser";
|
|
9
|
-
import { placeTranslator } from "../utils/place-translator";
|
|
10
|
-
import { List } from "./list";
|
|
1
|
+
import difference from "lodash-es/difference.js";
|
|
2
|
+
import { BIRTH_ASC, BIRTH_DESC, DEATH_ASC, DEATH_DESC, } from "../constants/orders.js";
|
|
3
|
+
import { getPlaceParserProvider } from "../factories/place-parser-provider.js";
|
|
4
|
+
import { getPlaceTranslatorProvider } from "../factories/place-translator-provider.js";
|
|
5
|
+
import { Range, } from "../types/types.js";
|
|
6
|
+
import { nameFormatter } from "../utils/name-formatter.js";
|
|
7
|
+
import { setNestedGroup } from "../utils/nested-group.js";
|
|
8
|
+
import { getPlaceParts } from "../utils/place-parser.js";
|
|
9
|
+
import { placeTranslator } from "../utils/place-translator.js";
|
|
10
|
+
import { List } from "./list.js";
|
|
11
11
|
export class Individuals extends List {
|
|
12
12
|
copy() {
|
|
13
13
|
return super.copy(Individuals);
|
|
@@ -31,24 +31,42 @@ export class Individuals extends List {
|
|
|
31
31
|
return super.orderBy(orders, Individuals);
|
|
32
32
|
}
|
|
33
33
|
getFirstEvent() {
|
|
34
|
-
const
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
return
|
|
34
|
+
const firstBirthPerson = this.getFirstBirth();
|
|
35
|
+
const firstDeathPerson = this.getFirstDeath();
|
|
36
|
+
const firstBirth = firstBirthPerson?.BIRT?.toList().index(0);
|
|
37
|
+
const firstDeath = firstDeathPerson?.DEAT?.toList().index(0);
|
|
38
|
+
if (!firstBirth?.DATE?.rawValue && !firstDeath?.DATE?.rawValue) {
|
|
39
|
+
return undefined;
|
|
40
40
|
}
|
|
41
|
-
|
|
41
|
+
if (!firstBirth?.DATE?.rawValue) {
|
|
42
|
+
return firstDeathPerson;
|
|
43
|
+
}
|
|
44
|
+
if (!firstDeath?.DATE?.rawValue) {
|
|
45
|
+
return firstBirthPerson;
|
|
46
|
+
}
|
|
47
|
+
if (firstDeath.DATE.rawValue < firstBirth.DATE.rawValue) {
|
|
48
|
+
return firstDeathPerson;
|
|
49
|
+
}
|
|
50
|
+
return firstBirthPerson;
|
|
42
51
|
}
|
|
43
52
|
getLastEvent() {
|
|
44
|
-
const
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
return
|
|
53
|
+
const lastDeathPerson = this.getLastDeath();
|
|
54
|
+
const lastBirthPerson = this.getLastBirth();
|
|
55
|
+
const lastBirth = lastBirthPerson?.BIRT?.toList().index(0);
|
|
56
|
+
const lastDeath = lastDeathPerson?.DEAT?.toList().index(0);
|
|
57
|
+
if (!lastBirth?.DATE?.rawValue && !lastDeath?.DATE?.rawValue) {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
if (!lastDeath?.DATE?.rawValue) {
|
|
61
|
+
return lastBirthPerson;
|
|
62
|
+
}
|
|
63
|
+
if (!lastBirth?.DATE?.rawValue) {
|
|
64
|
+
return lastDeathPerson;
|
|
65
|
+
}
|
|
66
|
+
if (lastDeath.DATE.rawValue < lastBirth.DATE.rawValue) {
|
|
67
|
+
return lastBirthPerson;
|
|
50
68
|
}
|
|
51
|
-
return
|
|
69
|
+
return lastDeathPerson;
|
|
52
70
|
}
|
|
53
71
|
getFirstBirth() {
|
|
54
72
|
return this.filter((item) => {
|