@treeviz/gedcom-parser 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (321) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +954 -0
  3. package/dist/classes/common.d.ts +87 -0
  4. package/dist/classes/common.d.ts.map +1 -0
  5. package/dist/classes/common.js +481 -0
  6. package/dist/classes/date.d.ts +26 -0
  7. package/dist/classes/date.d.ts.map +1 -0
  8. package/dist/classes/date.js +176 -0
  9. package/dist/classes/fam.d.ts +19 -0
  10. package/dist/classes/fam.d.ts.map +1 -0
  11. package/dist/classes/fam.js +38 -0
  12. package/dist/classes/fams.d.ts +16 -0
  13. package/dist/classes/fams.d.ts.map +1 -0
  14. package/dist/classes/fams.js +41 -0
  15. package/dist/classes/gedcom.d.ts +89 -0
  16. package/dist/classes/gedcom.d.ts.map +1 -0
  17. package/dist/classes/gedcom.js +421 -0
  18. package/dist/classes/index.d.ts +19 -0
  19. package/dist/classes/index.d.ts.map +1 -0
  20. package/dist/classes/index.js +19 -0
  21. package/dist/classes/indi.d.ts +298 -0
  22. package/dist/classes/indi.d.ts.map +1 -0
  23. package/dist/classes/indi.js +2049 -0
  24. package/dist/classes/indis.d.ts +54 -0
  25. package/dist/classes/indis.d.ts.map +1 -0
  26. package/dist/classes/indis.js +439 -0
  27. package/dist/classes/list.d.ts +55 -0
  28. package/dist/classes/list.d.ts.map +1 -0
  29. package/dist/classes/list.js +440 -0
  30. package/dist/classes/name.d.ts +20 -0
  31. package/dist/classes/name.d.ts.map +1 -0
  32. package/dist/classes/name.js +48 -0
  33. package/dist/classes/note.d.ts +12 -0
  34. package/dist/classes/note.d.ts.map +1 -0
  35. package/dist/classes/note.js +46 -0
  36. package/dist/classes/obje.d.ts +12 -0
  37. package/dist/classes/obje.d.ts.map +1 -0
  38. package/dist/classes/obje.js +81 -0
  39. package/dist/classes/objes.d.ts +8 -0
  40. package/dist/classes/objes.d.ts.map +1 -0
  41. package/dist/classes/objes.js +13 -0
  42. package/dist/classes/repo.d.ts +11 -0
  43. package/dist/classes/repo.d.ts.map +1 -0
  44. package/dist/classes/repo.js +6 -0
  45. package/dist/classes/repos.d.ts +8 -0
  46. package/dist/classes/repos.d.ts.map +1 -0
  47. package/dist/classes/repos.js +13 -0
  48. package/dist/classes/sour.d.ts +11 -0
  49. package/dist/classes/sour.d.ts.map +1 -0
  50. package/dist/classes/sour.js +6 -0
  51. package/dist/classes/sours.d.ts +8 -0
  52. package/dist/classes/sours.d.ts.map +1 -0
  53. package/dist/classes/sours.js +13 -0
  54. package/dist/classes/subm.d.ts +10 -0
  55. package/dist/classes/subm.d.ts.map +1 -0
  56. package/dist/classes/subm.js +6 -0
  57. package/dist/classes/subms.d.ts +8 -0
  58. package/dist/classes/subms.d.ts.map +1 -0
  59. package/dist/classes/subms.js +13 -0
  60. package/dist/constants/constants.d.ts +14 -0
  61. package/dist/constants/constants.d.ts.map +1 -0
  62. package/dist/constants/constants.js +13 -0
  63. package/dist/constants/filters.d.ts +17 -0
  64. package/dist/constants/filters.d.ts.map +1 -0
  65. package/dist/constants/filters.js +44 -0
  66. package/dist/constants/index.d.ts +4 -0
  67. package/dist/constants/index.d.ts.map +1 -0
  68. package/dist/constants/index.js +4 -0
  69. package/dist/constants/orders.d.ts +17 -0
  70. package/dist/constants/orders.d.ts.map +1 -0
  71. package/dist/constants/orders.js +240 -0
  72. package/dist/factories/cache-factory.d.ts +30 -0
  73. package/dist/factories/cache-factory.d.ts.map +1 -0
  74. package/dist/factories/cache-factory.js +43 -0
  75. package/dist/factories/date-locale-factory.d.ts +30 -0
  76. package/dist/factories/date-locale-factory.d.ts.map +1 -0
  77. package/dist/factories/date-locale-factory.js +34 -0
  78. package/dist/factories/i18n-factory.d.ts +40 -0
  79. package/dist/factories/i18n-factory.d.ts.map +1 -0
  80. package/dist/factories/i18n-factory.js +44 -0
  81. package/dist/factories/index.d.ts +5 -0
  82. package/dist/factories/index.d.ts.map +1 -0
  83. package/dist/factories/index.js +5 -0
  84. package/dist/factories/kinship-factory.d.ts +38 -0
  85. package/dist/factories/kinship-factory.d.ts.map +1 -0
  86. package/dist/factories/kinship-factory.js +35 -0
  87. package/dist/factories/place-parser-provider.d.ts +32 -0
  88. package/dist/factories/place-parser-provider.d.ts.map +1 -0
  89. package/dist/factories/place-parser-provider.js +35 -0
  90. package/dist/factories/place-translator-provider.d.ts +32 -0
  91. package/dist/factories/place-translator-provider.d.ts.map +1 -0
  92. package/dist/factories/place-translator-provider.js +35 -0
  93. package/dist/index.d.ts +78 -0
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +44 -0
  96. package/dist/interfaces/common.d.ts +43 -0
  97. package/dist/interfaces/common.d.ts.map +1 -0
  98. package/dist/interfaces/common.js +1 -0
  99. package/dist/interfaces/fam.d.ts +11 -0
  100. package/dist/interfaces/fam.d.ts.map +1 -0
  101. package/dist/interfaces/fam.js +1 -0
  102. package/dist/interfaces/fams.d.ts +9 -0
  103. package/dist/interfaces/fams.d.ts.map +1 -0
  104. package/dist/interfaces/fams.js +1 -0
  105. package/dist/interfaces/gedcom.d.ts +30 -0
  106. package/dist/interfaces/gedcom.d.ts.map +1 -0
  107. package/dist/interfaces/gedcom.js +1 -0
  108. package/dist/interfaces/index.d.ts +12 -0
  109. package/dist/interfaces/index.d.ts.map +1 -0
  110. package/dist/interfaces/index.js +1 -0
  111. package/dist/interfaces/indi.d.ts +109 -0
  112. package/dist/interfaces/indi.d.ts.map +1 -0
  113. package/dist/interfaces/indi.js +1 -0
  114. package/dist/interfaces/indis.d.ts +31 -0
  115. package/dist/interfaces/indis.d.ts.map +1 -0
  116. package/dist/interfaces/indis.js +1 -0
  117. package/dist/interfaces/list.d.ts +52 -0
  118. package/dist/interfaces/list.d.ts.map +1 -0
  119. package/dist/interfaces/list.js +1 -0
  120. package/dist/interfaces/obje.d.ts +7 -0
  121. package/dist/interfaces/obje.d.ts.map +1 -0
  122. package/dist/interfaces/obje.js +1 -0
  123. package/dist/interfaces/repo.d.ts +7 -0
  124. package/dist/interfaces/repo.d.ts.map +1 -0
  125. package/dist/interfaces/repo.js +1 -0
  126. package/dist/interfaces/sour.d.ts +7 -0
  127. package/dist/interfaces/sour.d.ts.map +1 -0
  128. package/dist/interfaces/sour.js +1 -0
  129. package/dist/interfaces/subm.d.ts +6 -0
  130. package/dist/interfaces/subm.d.ts.map +1 -0
  131. package/dist/interfaces/subm.js +1 -0
  132. package/dist/kinship-translator/index.d.ts +11 -0
  133. package/dist/kinship-translator/index.d.ts.map +1 -0
  134. package/dist/kinship-translator/index.js +10 -0
  135. package/dist/kinship-translator/kinship-translator.basic.d.ts +30 -0
  136. package/dist/kinship-translator/kinship-translator.basic.d.ts.map +1 -0
  137. package/dist/kinship-translator/kinship-translator.basic.js +74 -0
  138. package/dist/kinship-translator/kinship-translator.d.ts +26 -0
  139. package/dist/kinship-translator/kinship-translator.d.ts.map +1 -0
  140. package/dist/kinship-translator/kinship-translator.de.d.ts +18 -0
  141. package/dist/kinship-translator/kinship-translator.de.d.ts.map +1 -0
  142. package/dist/kinship-translator/kinship-translator.de.js +180 -0
  143. package/dist/kinship-translator/kinship-translator.en.d.ts +18 -0
  144. package/dist/kinship-translator/kinship-translator.en.d.ts.map +1 -0
  145. package/dist/kinship-translator/kinship-translator.en.js +182 -0
  146. package/dist/kinship-translator/kinship-translator.es.d.ts +18 -0
  147. package/dist/kinship-translator/kinship-translator.es.d.ts.map +1 -0
  148. package/dist/kinship-translator/kinship-translator.es.js +181 -0
  149. package/dist/kinship-translator/kinship-translator.fr.d.ts +18 -0
  150. package/dist/kinship-translator/kinship-translator.fr.d.ts.map +1 -0
  151. package/dist/kinship-translator/kinship-translator.fr.js +181 -0
  152. package/dist/kinship-translator/kinship-translator.hu.d.ts +19 -0
  153. package/dist/kinship-translator/kinship-translator.hu.d.ts.map +1 -0
  154. package/dist/kinship-translator/kinship-translator.hu.js +226 -0
  155. package/dist/kinship-translator/kinship-translator.interface.d.ts +19 -0
  156. package/dist/kinship-translator/kinship-translator.interface.d.ts.map +1 -0
  157. package/dist/kinship-translator/kinship-translator.interface.js +1 -0
  158. package/dist/kinship-translator/kinship-translator.js +103 -0
  159. package/dist/kinship-translator/patterns.de.d.ts +2 -0
  160. package/dist/kinship-translator/patterns.de.d.ts.map +1 -0
  161. package/dist/kinship-translator/patterns.de.js +14 -0
  162. package/dist/kinship-translator/patterns.en.d.ts +2 -0
  163. package/dist/kinship-translator/patterns.en.d.ts.map +1 -0
  164. package/dist/kinship-translator/patterns.en.js +14 -0
  165. package/dist/kinship-translator/patterns.es.d.ts +2 -0
  166. package/dist/kinship-translator/patterns.es.d.ts.map +1 -0
  167. package/dist/kinship-translator/patterns.es.js +14 -0
  168. package/dist/kinship-translator/patterns.fr.d.ts +2 -0
  169. package/dist/kinship-translator/patterns.fr.d.ts.map +1 -0
  170. package/dist/kinship-translator/patterns.fr.js +14 -0
  171. package/dist/kinship-translator/patterns.hu.d.ts +6 -0
  172. package/dist/kinship-translator/patterns.hu.d.ts.map +1 -0
  173. package/dist/kinship-translator/patterns.hu.js +97 -0
  174. package/dist/kinship-translator/translators.d.ts +6 -0
  175. package/dist/kinship-translator/translators.d.ts.map +1 -0
  176. package/dist/kinship-translator/translators.js +5 -0
  177. package/dist/kinship-translator/types.d.ts +9 -0
  178. package/dist/kinship-translator/types.d.ts.map +1 -0
  179. package/dist/kinship-translator/types.js +1 -0
  180. package/dist/structures/address.d.ts +14 -0
  181. package/dist/structures/address.d.ts.map +1 -0
  182. package/dist/structures/address.js +1 -0
  183. package/dist/structures/association.d.ts +13 -0
  184. package/dist/structures/association.d.ts.map +1 -0
  185. package/dist/structures/association.js +1 -0
  186. package/dist/structures/change-date.d.ts +8 -0
  187. package/dist/structures/change-date.d.ts.map +1 -0
  188. package/dist/structures/change-date.js +1 -0
  189. package/dist/structures/creation-date.d.ts +7 -0
  190. package/dist/structures/creation-date.d.ts.map +1 -0
  191. package/dist/structures/creation-date.js +1 -0
  192. package/dist/structures/date.d.ts +9 -0
  193. package/dist/structures/date.d.ts.map +1 -0
  194. package/dist/structures/date.js +1 -0
  195. package/dist/structures/event-detail-structure.d.ts +25 -0
  196. package/dist/structures/event-detail-structure.d.ts.map +1 -0
  197. package/dist/structures/event-detail-structure.js +1 -0
  198. package/dist/structures/family.d.ts +34 -0
  199. package/dist/structures/family.d.ts.map +1 -0
  200. package/dist/structures/family.js +1 -0
  201. package/dist/structures/gedcom.d.ts +60 -0
  202. package/dist/structures/gedcom.d.ts.map +1 -0
  203. package/dist/structures/gedcom.js +1 -0
  204. package/dist/structures/index.d.ts +25 -0
  205. package/dist/structures/index.d.ts.map +1 -0
  206. package/dist/structures/index.js +1 -0
  207. package/dist/structures/individual-event-detail-structure.d.ts +9 -0
  208. package/dist/structures/individual-event-detail-structure.d.ts.map +1 -0
  209. package/dist/structures/individual-event-detail-structure.js +1 -0
  210. package/dist/structures/individual-event-structure.d.ts +83 -0
  211. package/dist/structures/individual-event-structure.d.ts.map +1 -0
  212. package/dist/structures/individual-event-structure.js +1 -0
  213. package/dist/structures/individual.d.ts +40 -0
  214. package/dist/structures/individual.d.ts.map +1 -0
  215. package/dist/structures/individual.js +1 -0
  216. package/dist/structures/lds-ordinance-detail.d.ts +17 -0
  217. package/dist/structures/lds-ordinance-detail.d.ts.map +1 -0
  218. package/dist/structures/lds-ordinance-detail.js +1 -0
  219. package/dist/structures/lds-spouse-sealing.d.ts +7 -0
  220. package/dist/structures/lds-spouse-sealing.d.ts.map +1 -0
  221. package/dist/structures/lds-spouse-sealing.js +1 -0
  222. package/dist/structures/marriage-date.d.ts +11 -0
  223. package/dist/structures/marriage-date.d.ts.map +1 -0
  224. package/dist/structures/marriage-date.js +1 -0
  225. package/dist/structures/multimedia-link.d.ts +16 -0
  226. package/dist/structures/multimedia-link.d.ts.map +1 -0
  227. package/dist/structures/multimedia-link.js +1 -0
  228. package/dist/structures/non-event.d.ts +12 -0
  229. package/dist/structures/non-event.d.ts.map +1 -0
  230. package/dist/structures/non-event.js +1 -0
  231. package/dist/structures/note.d.ts +16 -0
  232. package/dist/structures/note.d.ts.map +1 -0
  233. package/dist/structures/note.js +1 -0
  234. package/dist/structures/personal-name-pieces.d.ts +11 -0
  235. package/dist/structures/personal-name-pieces.d.ts.map +1 -0
  236. package/dist/structures/personal-name-pieces.js +1 -0
  237. package/dist/structures/personal-name.d.ts +16 -0
  238. package/dist/structures/personal-name.d.ts.map +1 -0
  239. package/dist/structures/personal-name.js +1 -0
  240. package/dist/structures/place.d.ts +20 -0
  241. package/dist/structures/place.d.ts.map +1 -0
  242. package/dist/structures/place.js +1 -0
  243. package/dist/structures/repository.d.ts +6 -0
  244. package/dist/structures/repository.d.ts.map +1 -0
  245. package/dist/structures/repository.js +1 -0
  246. package/dist/structures/source-citation.d.ts +27 -0
  247. package/dist/structures/source-citation.d.ts.map +1 -0
  248. package/dist/structures/source-citation.js +1 -0
  249. package/dist/structures/source-repository-citation.d.ts +13 -0
  250. package/dist/structures/source-repository-citation.d.ts.map +1 -0
  251. package/dist/structures/source-repository-citation.js +1 -0
  252. package/dist/structures/source.d.ts +28 -0
  253. package/dist/structures/source.d.ts.map +1 -0
  254. package/dist/structures/source.js +1 -0
  255. package/dist/types/ancestry-media.d.ts +65 -0
  256. package/dist/types/ancestry-media.d.ts.map +1 -0
  257. package/dist/types/ancestry-media.js +1 -0
  258. package/dist/types/index.d.ts +4 -0
  259. package/dist/types/index.d.ts.map +1 -0
  260. package/dist/types/index.js +4 -0
  261. package/dist/types/settings.d.ts +12 -0
  262. package/dist/types/settings.d.ts.map +1 -0
  263. package/dist/types/settings.js +1 -0
  264. package/dist/types/types.d.ts +220 -0
  265. package/dist/types/types.d.ts.map +1 -0
  266. package/dist/types/types.js +26 -0
  267. package/dist/utils/cache.d.ts +22 -0
  268. package/dist/utils/cache.d.ts.map +1 -0
  269. package/dist/utils/cache.js +57 -0
  270. package/dist/utils/common-creator.d.ts +13 -0
  271. package/dist/utils/common-creator.d.ts.map +1 -0
  272. package/dist/utils/common-creator.js +72 -0
  273. package/dist/utils/date-formatter.d.ts +35 -0
  274. package/dist/utils/date-formatter.d.ts.map +1 -0
  275. package/dist/utils/date-formatter.js +207 -0
  276. package/dist/utils/get-all-prop.d.ts +4 -0
  277. package/dist/utils/get-all-prop.d.ts.map +1 -0
  278. package/dist/utils/get-all-prop.js +5 -0
  279. package/dist/utils/get-family-with.d.ts +5 -0
  280. package/dist/utils/get-family-with.d.ts.map +1 -0
  281. package/dist/utils/get-family-with.js +11 -0
  282. package/dist/utils/get-places.d.ts +21 -0
  283. package/dist/utils/get-places.d.ts.map +1 -0
  284. package/dist/utils/get-places.js +77 -0
  285. package/dist/utils/get-product-details.d.ts +4 -0
  286. package/dist/utils/get-product-details.d.ts.map +1 -0
  287. package/dist/utils/get-product-details.js +6 -0
  288. package/dist/utils/get-raw-size.d.ts +2 -0
  289. package/dist/utils/get-raw-size.d.ts.map +1 -0
  290. package/dist/utils/get-raw-size.js +3 -0
  291. package/dist/utils/index.d.ts +17 -0
  292. package/dist/utils/index.d.ts.map +1 -0
  293. package/dist/utils/index.js +18 -0
  294. package/dist/utils/logger.d.ts +3 -0
  295. package/dist/utils/logger.d.ts.map +1 -0
  296. package/dist/utils/logger.js +11 -0
  297. package/dist/utils/name-formatter.d.ts +10 -0
  298. package/dist/utils/name-formatter.d.ts.map +1 -0
  299. package/dist/utils/name-formatter.js +45 -0
  300. package/dist/utils/nested-group.d.ts +4 -0
  301. package/dist/utils/nested-group.d.ts.map +1 -0
  302. package/dist/utils/nested-group.js +34 -0
  303. package/dist/utils/ordinalize.d.ts +3 -0
  304. package/dist/utils/ordinalize.d.ts.map +1 -0
  305. package/dist/utils/ordinalize.js +104 -0
  306. package/dist/utils/parser.d.ts +17 -0
  307. package/dist/utils/parser.d.ts.map +1 -0
  308. package/dist/utils/parser.js +322 -0
  309. package/dist/utils/place-parser.d.ts +16 -0
  310. package/dist/utils/place-parser.d.ts.map +1 -0
  311. package/dist/utils/place-parser.js +46 -0
  312. package/dist/utils/place-translator.d.ts +6 -0
  313. package/dist/utils/place-translator.d.ts.map +1 -0
  314. package/dist/utils/place-translator.js +8 -0
  315. package/dist/utils/place-types.d.ts +27 -0
  316. package/dist/utils/place-types.d.ts.map +1 -0
  317. package/dist/utils/place-types.js +14 -0
  318. package/dist/utils/range.d.ts +19 -0
  319. package/dist/utils/range.d.ts.map +1 -0
  320. package/dist/utils/range.js +265 -0
  321. package/package.json +153 -0
@@ -0,0 +1,176 @@
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";
6
+ const LONG_NOTES = {
7
+ "Abt.": "About",
8
+ "Bef.": "Before",
9
+ "Aft.": "After",
10
+ };
11
+ const NOTE_MARKER = "####";
12
+ /**
13
+ * Format a date based on available components (DAY, MONTH, YEAR, NOTE)
14
+ */
15
+ const formatDateWithComponents = (date, hasDay, hasMonth, hasYear, noteValue, baseFormat = "dd MMM yyyy") => {
16
+ const hasNote = baseFormat.includes("NOTE");
17
+ let validDateFormat = baseFormat.replace("NOTE", NOTE_MARKER);
18
+ if (!hasDay) {
19
+ validDateFormat = validDateFormat.replace(/d+/g, "");
20
+ }
21
+ if (!hasMonth) {
22
+ validDateFormat = validDateFormat.replace(/[.\-\s/]*M+/g, "");
23
+ }
24
+ if (!hasYear) {
25
+ validDateFormat = validDateFormat.replace(/y+[.\-\s/]*/g, "");
26
+ }
27
+ validDateFormat = validDateFormat
28
+ .replace(/([.\-\s/])\1+/g, "$1")
29
+ .replace(/^[.\-\s/]+|[.\-\s/]+$/g, "");
30
+ const formattedDate = format(date, validDateFormat, {
31
+ locale: getDateLocale(),
32
+ });
33
+ // Add NOTE prefix if it exists
34
+ return noteValue && hasNote
35
+ ? formattedDate.replace(NOTE_MARKER, noteValue).trim()
36
+ : formattedDate.replace(NOTE_MARKER, "").trim();
37
+ };
38
+ export class CommonDate extends Common {
39
+ constructor(gedcom, id, main, parent) {
40
+ super(gedcom, id, main, parent);
41
+ delete this.id;
42
+ }
43
+ set value(value) {
44
+ if (value) {
45
+ const noteRegExp = /^(?<note>[a-zA-Z]+\.)/;
46
+ const noteMatch = value.match(noteRegExp)?.groups;
47
+ let validValue = value;
48
+ if (noteMatch?.note) {
49
+ this.NOTE =
50
+ this.NOTE ||
51
+ createCommon(this._gedcom, undefined, this.main);
52
+ this.NOTE.value = noteMatch?.note;
53
+ validValue = value.replace(noteRegExp, "");
54
+ }
55
+ const acceptedDate = this.isValidDateFormat(validValue);
56
+ if (acceptedDate) {
57
+ this.DAY =
58
+ this.DAY ||
59
+ createCommon(this._gedcom, undefined, this.main);
60
+ this.DAY.value = format(acceptedDate, "dd");
61
+ this.MONTH =
62
+ this.MONTH ||
63
+ createCommon(this._gedcom, undefined, this.main);
64
+ this.MONTH.value = format(acceptedDate, "MMM");
65
+ this.YEAR =
66
+ this.YEAR ||
67
+ createCommon(this._gedcom, undefined, this.main);
68
+ this.YEAR.value = format(acceptedDate, "yyyy");
69
+ this._date = acceptedDate;
70
+ this._value = value;
71
+ }
72
+ else {
73
+ let fixedValue = validValue;
74
+ if (/\d{4} [A-Za-z]+\s*$/.test(validValue)) {
75
+ fixedValue = `${validValue} 1`;
76
+ }
77
+ else if (/^\s*[A-Za-z]+ \d{4}/.test(validValue)) {
78
+ fixedValue = `1 ${validValue}`;
79
+ }
80
+ this._date = new Date(fixedValue);
81
+ this._value = value;
82
+ if (this._date && isValid(this._date)) {
83
+ const yearMonthDay = /[\dA-Za-z]+ [\dA-Za-z]+ [\dA-Za-z]+/.test(validValue);
84
+ const yearMonth = /[\dA-Za-z]+ [\dA-Za-z]+/.test(validValue);
85
+ const year = /[\dA-Za-z]+/.test(validValue);
86
+ if (yearMonthDay) {
87
+ this.DAY =
88
+ this.DAY ||
89
+ createCommon(this._gedcom, undefined, this.main);
90
+ this.DAY.value = format(this._date, "dd");
91
+ }
92
+ if (yearMonth || yearMonthDay) {
93
+ this.MONTH =
94
+ this.MONTH ||
95
+ createCommon(this._gedcom, undefined, this.main);
96
+ this.MONTH.value = format(this._date, "MMM");
97
+ }
98
+ if (year || yearMonth || yearMonthDay) {
99
+ this.YEAR =
100
+ this.YEAR ||
101
+ createCommon(this._gedcom, undefined, this.main);
102
+ this.YEAR.value = format(this._date, "yyyy");
103
+ }
104
+ }
105
+ }
106
+ }
107
+ }
108
+ get value() {
109
+ const hasDay = !!this.DAY?.value;
110
+ const hasMonth = !!this.MONTH?.value;
111
+ const hasYear = !!this.YEAR?.value;
112
+ if (!this._date ||
113
+ !isValid(this._date) ||
114
+ (!hasDay && !hasMonth && !hasYear)) {
115
+ return this._value;
116
+ }
117
+ return formatDateWithComponents(this._date, hasDay, hasMonth, hasYear, this.NOTE?.value);
118
+ }
119
+ get rawValue() {
120
+ return this._date;
121
+ }
122
+ assign(name, value, unique = false) {
123
+ if (!["DAY", "MONTH", "YEAR"].includes(name)) {
124
+ return super.assign(name, value, unique);
125
+ }
126
+ else {
127
+ this.set(name, value);
128
+ }
129
+ return this.get(name);
130
+ }
131
+ isValidDateFormat(value) {
132
+ let validDate;
133
+ ACCEPTED_DATE_FORMATS.find((acceptedFormat) => {
134
+ const date = parse(value, acceptedFormat, new Date());
135
+ if (isValid(date)) {
136
+ validDate = date;
137
+ return true;
138
+ }
139
+ return false;
140
+ });
141
+ return validDate;
142
+ }
143
+ toNote(short = true) {
144
+ const note = this.NOTE?.value?.trim();
145
+ if (!short) {
146
+ return LONG_NOTES[note];
147
+ }
148
+ return note;
149
+ }
150
+ toValue(dateFormat = "dd MMM yyyy") {
151
+ const hasDay = !!this.DAY?.value;
152
+ const hasMonth = !!this.MONTH?.value;
153
+ const hasYear = !!this.YEAR?.value;
154
+ if (!this._date ||
155
+ !isValid(this._date) ||
156
+ (!hasDay && !hasMonth && !hasYear)) {
157
+ return this._value;
158
+ }
159
+ return formatDateWithComponents(this._date, hasDay, hasMonth, hasYear, this.NOTE?.value, dateFormat);
160
+ }
161
+ exportValue() {
162
+ return this.toValue("NOTE dd MMM yyyy");
163
+ }
164
+ inRange(range, trueIfNoYear = false) {
165
+ return inRange(this.YEAR?.value, range, trueIfNoYear);
166
+ }
167
+ }
168
+ export const createCommonDate = (gedcom, id, main, parent) => {
169
+ return createProxy(new CommonDate(gedcom, id, main, parent));
170
+ };
171
+ export const isCommonDate = (value) => {
172
+ return (!!value &&
173
+ value !== null &&
174
+ typeof value === "object" &&
175
+ "_date" in value);
176
+ };
@@ -0,0 +1,19 @@
1
+ import type IFamilyStructure from "../structures/family";
2
+ import { type FamKey } from "../types/types";
3
+ import type IFam from "../interfaces/fam";
4
+ import { Common } from "./common";
5
+ import type { ProxyOriginal } from "./common";
6
+ import { Families } from "./fams";
7
+ import { type GedComType } from "./gedcom";
8
+ import { Individuals } from "./indis";
9
+ export declare class Fam extends Common<string, FamKey> implements IFam {
10
+ private getFamilyMembers;
11
+ getChildren(): Individuals;
12
+ getHusband(): Individuals;
13
+ getWife(): Individuals;
14
+ getParents(): Individuals;
15
+ toList(): Families;
16
+ }
17
+ export type FamType = Fam & IFamilyStructure;
18
+ export declare const createFam: (gedcom: GedComType, id: FamKey, main?: Common, parent?: Common) => ProxyOriginal<FamType>;
19
+ //# sourceMappingURL=fam.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fam.d.ts","sourceRoot":"","sources":["../../src/classes/fam.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,gBAAgB,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,KAAK,MAAM,EAAgB,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,IAAI,MAAM,mBAAmB,CAAC;AAE1C,OAAO,EAAE,MAAM,EAAe,MAAM,UAAU,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC,qBAAa,GAAI,SAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAE,YAAW,IAAI;IAC9D,OAAO,CAAC,gBAAgB;IAexB,WAAW;IAIX,UAAU;IAIV,OAAO;IAIP,UAAU,IAAI,WAAW;IAIzB,MAAM;CAMN;AAED,MAAM,MAAM,OAAO,GAAG,GAAG,GAAG,gBAAgB,CAAC;AAC7C,eAAO,MAAM,SAAS,GACrB,QAAQ,UAAU,EAClB,IAAI,MAAM,EACV,OAAO,MAAM,EACb,SAAS,MAAM,KACb,aAAa,CAAC,OAAO,CAIvB,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { Common, createProxy } from "./common";
2
+ import { Families } from "./fams";
3
+ import { Individuals } from "./indis";
4
+ export class Fam extends Common {
5
+ getFamilyMembers(type) {
6
+ const familyMembers = new Individuals();
7
+ this.get(type)
8
+ ?.toList()
9
+ .forEach((item) => {
10
+ const indiId = item.value;
11
+ const indi = this._gedcom?.indi(indiId);
12
+ if (indi) {
13
+ familyMembers.item(indiId, indi);
14
+ }
15
+ });
16
+ return familyMembers;
17
+ }
18
+ getChildren() {
19
+ return this.getFamilyMembers("CHIL");
20
+ }
21
+ getHusband() {
22
+ return this.getFamilyMembers("HUSB");
23
+ }
24
+ getWife() {
25
+ return this.getFamilyMembers("WIFE");
26
+ }
27
+ getParents() {
28
+ return this.getHusband().copy().merge(this.getWife());
29
+ }
30
+ toList() {
31
+ return new Families().concat(
32
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
+ this.id ? { [this.id]: this } : { ...[this] });
34
+ }
35
+ }
36
+ export const createFam = (gedcom, id, main, parent) => {
37
+ return createProxy(new Fam(gedcom, id, main, parent));
38
+ };
@@ -0,0 +1,16 @@
1
+ import { type FamKey, type Filter, type Order, type FilterIterator, type OrderIterator } from "../types/types";
2
+ import { type IFamilies } from "../interfaces/fams";
3
+ import { type FamType } from "./fam";
4
+ import { Individuals } from "./indis";
5
+ import { List } from "./list";
6
+ export declare class Families extends List<FamKey, FamType> implements IFamilies {
7
+ copy(): Families;
8
+ except(item: FamType): Families;
9
+ filter(filters: Filter | FilterIterator<FamType, FamKey>): Families;
10
+ find(filters: Filter | FilterIterator<FamType, FamKey>): FamType | undefined;
11
+ orderBy(orders: Order | OrderIterator<FamType, FamKey>): Families;
12
+ getParents(): Individuals;
13
+ getChildren(): Individuals;
14
+ toList(): Families;
15
+ }
16
+ //# sourceMappingURL=fams.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fams.d.ts","sourceRoot":"","sources":["../../src/classes/fams.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,MAAM,EACX,KAAK,MAAM,EACX,KAAK,KAAK,EACV,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,EAAE,KAAK,OAAO,EAAO,MAAM,OAAO,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9B,qBAAa,QAAS,SAAQ,IAAI,CAAC,MAAM,EAAE,OAAO,CAAE,YAAW,SAAS;IACvE,IAAI,IAAI,QAAQ;IAIhB,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ;IAI/B,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,QAAQ;IAInE,IAAI,CACH,OAAO,EAAE,MAAM,GAAG,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,GAC/C,OAAO,GAAG,SAAS;IAItB,OAAO,CAAC,MAAM,EAAE,KAAK,GAAG,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,QAAQ;IAIjE,UAAU,IAAI,WAAW;IAYzB,WAAW,IAAI,WAAW;IAY1B,MAAM;CAGN"}
@@ -0,0 +1,41 @@
1
+ import { Fam } from "./fam";
2
+ import { Individuals } from "./indis";
3
+ import { List } from "./list";
4
+ export class Families extends List {
5
+ copy() {
6
+ return super.copy(Families);
7
+ }
8
+ except(item) {
9
+ return super.except(item, Families);
10
+ }
11
+ filter(filters) {
12
+ return super.filter(filters, Families);
13
+ }
14
+ find(filters) {
15
+ return super.find(filters, Families);
16
+ }
17
+ orderBy(orders) {
18
+ return super.orderBy(orders, Families);
19
+ }
20
+ getParents() {
21
+ const persons = new Individuals();
22
+ this.values().forEach((fam) => {
23
+ if (fam && fam instanceof Fam) {
24
+ persons.merge(fam.getParents());
25
+ }
26
+ });
27
+ return persons;
28
+ }
29
+ getChildren() {
30
+ const persons = new Individuals();
31
+ this.values().forEach((fam) => {
32
+ if (fam && fam instanceof Fam) {
33
+ persons.merge(fam.getChildren());
34
+ }
35
+ });
36
+ return persons;
37
+ }
38
+ toList() {
39
+ return new Families().concat(this.getItems());
40
+ }
41
+ }
@@ -0,0 +1,89 @@
1
+ import { type ConvertOptions } from "../interfaces/common";
2
+ import type IGedcom from "../interfaces/gedcom";
3
+ import type IGedComStructure from "../structures/gedcom";
4
+ import { type IdType, type IndiKey, type FamKey, type ObjeKey, type SourKey, type RepoKey, type SubmKey, type MultiTag } from "../types/types";
5
+ import { Common } from "./common";
6
+ import { type FamType } from "./fam";
7
+ import { type Families } from "./fams";
8
+ import { type IndiType } from "./indi";
9
+ import { type Individuals } from "./indis";
10
+ import { List } from "./list";
11
+ import { type ObjeType } from "./obje";
12
+ import { type Objects } from "./objes";
13
+ import { type RepoType } from "./repo";
14
+ import { type Repositories } from "./repos";
15
+ import { type SourType } from "./sour";
16
+ import { type Sources } from "./sours";
17
+ import { type SubmType } from "./subm";
18
+ import { type Submitters } from "./subms";
19
+ export declare class GedCom extends Common implements IGedcom {
20
+ tagMembers: Record<string, {
21
+ tag: Common;
22
+ indis: Individuals;
23
+ }>;
24
+ reflist: Record<string, Common>;
25
+ refcount: number;
26
+ constructor();
27
+ private getMain;
28
+ getList<T extends List = List>(type: MultiTag): T | undefined;
29
+ indis(): Individuals;
30
+ cloneIndis(target?: IndiKey | IndiType, source?: IndiKey | IndiType, avoidKeys?: MultiTag[], removeFromOriginalList?: boolean): this;
31
+ mergeIndis(target?: IndiKey | IndiType, source?: IndiKey | IndiType, removeFromOriginalList?: boolean): this;
32
+ fams(): Families;
33
+ objes(): Objects;
34
+ sours(): Sources;
35
+ repos(): Repositories;
36
+ subms(): Submitters;
37
+ tags(): List<IdType, Common<string, IdType>>;
38
+ customTags(): List<IdType, Common<string, IdType>>;
39
+ indi(index: number | IndiKey): IndiType;
40
+ fam(index: number | FamKey): FamType;
41
+ obje(index: number | ObjeKey): ObjeType;
42
+ sour(index: number | SourKey): SourType;
43
+ repo(index: number | RepoKey): RepoType;
44
+ subm(index: number | SubmKey): SubmType;
45
+ tag(index: number | SubmKey): Common<string, IdType>;
46
+ fromList(id?: string): Common<string, IdType>;
47
+ tagByName(name?: string): Common<string, IdType>;
48
+ customTag(index: number | SubmKey): Common<string, IdType>;
49
+ private getIndiRelatedLists;
50
+ private getDownloadHeader;
51
+ toFiltered(indis: IndiKey[]): this | GedComType;
52
+ toJson(tag?: MultiTag | undefined, options?: (ConvertOptions & {
53
+ indis?: IndiKey[];
54
+ }) | undefined): string;
55
+ toGedcom(tag?: MultiTag | undefined, level?: number, options?: (ConvertOptions & {
56
+ indis?: IndiKey[];
57
+ }) | undefined): string;
58
+ hasTag(tag?: string | Common): boolean;
59
+ hasUnknownAncestor(): boolean;
60
+ hasIgnoredMember(): boolean;
61
+ hasUnattachedMember(): boolean;
62
+ hasUnknownGivenname(): boolean;
63
+ hasUnknownSurname(): boolean;
64
+ hasNonRelevant(): boolean;
65
+ /**
66
+ * Get all places from the GEDCOM with occurrence counts
67
+ * @returns Record mapping place names to their occurrence count
68
+ */
69
+ getAllPlaces(): Record<string, number>;
70
+ /**
71
+ * Get all places from the GEDCOM with associated individual IDs
72
+ * @param usedIndis Optional array of individual IDs to filter by
73
+ * @returns Record mapping place names to arrays of individual IDs
74
+ */
75
+ getAllPlacesWithIndis(usedIndis?: IndiKey[]): Record<string, (`@I${number}@` | `@P${number}@` | `@XI${number}@` | `@XXI${number}@`)[]>;
76
+ }
77
+ export type GedComType = GedCom & IGedComStructure;
78
+ export declare const createGedCom: () => GedComType;
79
+ export declare const isGedcomString: (gedcomString?: string) => boolean;
80
+ /**
81
+ * Validates if a string is a valid GEDCOM file content
82
+ * @param content - The file content to validate
83
+ * @returns An object with `valid` boolean and optional `error` message
84
+ */
85
+ export declare const validateGedcomContent: (content?: string) => {
86
+ valid: boolean;
87
+ error?: string;
88
+ };
89
+ //# sourceMappingURL=gedcom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gedcom.d.ts","sourceRoot":"","sources":["../../src/classes/gedcom.ts"],"names":[],"mappings":"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"}