@treeviz/gedcom-parser 2.0.5 → 2.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,5 @@
1
1
  import type { Locale } from "date-fns";
2
+ import type { ConvertOptions } from "../interfaces/common";
2
3
  import type { IdType, MultiTag } from "../types/types";
3
4
  import type { Range } from "../utils/range";
4
5
  import { Common } from "./common";
@@ -20,6 +21,7 @@ export declare class CommonDate extends Common<string> {
20
21
  toNote(short?: boolean): string | undefined;
21
22
  toValue(dateFormat?: string, locale?: Locale | null): string | undefined;
22
23
  exportValue(): string | undefined;
24
+ toGedcomLines(tag?: MultiTag, level?: number, options?: ConvertOptions): string[];
23
25
  inRange(range: Range, trueIfNoYear?: boolean): boolean;
24
26
  }
25
27
  export declare const createCommonDate: (gedcom?: GedComType, id?: IdType, main?: Common, parent?: Common) => ProxyOriginal<CommonDate>;
@@ -1 +1 @@
1
- {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/classes/date.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIvC,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAGvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAE,MAAM,EAA6B,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAoDnC,qBAAa,UAAW,SAAQ,MAAM,CAAC,MAAM,CAAC;IAC7C,OAAO,CAAC,KAAK,CAAC,CAAO;IAErB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;gBAGb,MAAM,CAAC,EAAE,UAAU,EACnB,EAAE,CAAC,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM;IAOhB,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EA0ElC;IAED,IAAI,KAAK,IA5EQ,MAAM,GAAG,SAAS,CA+FlC;IAED,IAAI,QAAQ,qBAEX;IAED,MAAM,CAAC,CAAC,SAAS,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,EAC7C,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,CAAC,EACR,MAAM,UAAQ;IAUf,OAAO,CAAC,iBAAiB;IAgBzB,MAAM,CAAC,KAAK,UAAO,GAAG,MAAM,GAAG,SAAS;IAUxC,OAAO,CACN,UAAU,SAAgB,EAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GACpB,MAAM,GAAG,SAAS;IAuBrB,WAAW;IAIX,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,UAAQ;CAG1C;AAED,eAAO,MAAM,gBAAgB,GAC5B,SAAS,UAAU,EACnB,KAAK,MAAM,EACX,OAAO,MAAM,EACb,SAAS,MAAM,KACb,aAAa,CAAC,UAAU,CAI1B,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,QAAQ,OAAO,KAAG,KAAK,IAAI,UAOvD,CAAC"}
1
+ {"version":3,"file":"date.d.ts","sourceRoot":"","sources":["../../src/classes/date.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAIvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAGvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,EAAE,MAAM,EAA6B,MAAM,UAAU,CAAC;AAC7D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AA2EnC,qBAAa,UAAW,SAAQ,MAAM,CAAC,MAAM,CAAC;IAC7C,OAAO,CAAC,KAAK,CAAC,CAAO;IAErB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;gBAGb,MAAM,CAAC,EAAE,UAAU,EACnB,EAAE,CAAC,EAAE,MAAM,EACX,IAAI,CAAC,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM;IAOhB,IAAI,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EA6FlC;IAED,IAAI,KAAK,IA/FQ,MAAM,GAAG,SAAS,CAkHlC;IAED,IAAI,QAAQ,qBAEX;IAED,MAAM,CAAC,CAAC,SAAS,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,EAC7C,IAAI,EAAE,QAAQ,EACd,KAAK,EAAE,CAAC,EACR,MAAM,UAAQ;IAUf,OAAO,CAAC,iBAAiB;IAgBzB,MAAM,CAAC,KAAK,UAAO,GAAG,MAAM,GAAG,SAAS;IAUxC,OAAO,CACN,UAAU,SAAgB,EAC1B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,GACpB,MAAM,GAAG,SAAS;IAuBrB,WAAW;IAmBX,aAAa,CAAC,GAAG,CAAC,EAAE,QAAQ,EAAE,KAAK,SAAI,EAAE,OAAO,CAAC,EAAE,cAAc;IAajE,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,YAAY,UAAQ;CAG1C;AAED,eAAO,MAAM,gBAAgB,GAC5B,SAAS,UAAU,EACnB,KAAK,MAAM,EACX,OAAO,MAAM,EACb,SAAS,MAAM,KACb,aAAa,CAAC,UAAU,CAI1B,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,QAAQ,OAAO,KAAG,KAAK,IAAI,UAOvD,CAAC"}
@@ -17,6 +17,11 @@ import type { SourType } from "./sour";
17
17
  import type { Sources } from "./sours";
18
18
  import type { SubmType } from "./subm";
19
19
  import type { Submitters } from "./subms";
20
+ type GedcomObjectPrimitive = string | number | boolean;
21
+ export interface GedcomObjectPatch {
22
+ [key: string]: GedcomObjectPatchValue;
23
+ }
24
+ export type GedcomObjectPatchValue = GedcomObjectPrimitive | GedcomObjectPatch | GedcomObjectPatchValue[] | null | undefined;
20
25
  export declare class GedCom extends Common implements IGedcom {
21
26
  tagMembers: Record<string, {
22
27
  tag: Common;
@@ -27,6 +32,9 @@ export declare class GedCom extends Common implements IGedcom {
27
32
  constructor();
28
33
  private getMain;
29
34
  getList<T extends List = List>(type: MultiTag): T | undefined;
35
+ private createNodeFromPatchValue;
36
+ private applyObjectToCommon;
37
+ applyObject(patch: GedcomObjectPatch): this;
30
38
  indis(): Individuals | undefined;
31
39
  cloneIndis(target?: IndiKey | IndiType, source?: IndiKey | IndiType, avoidKeys?: MultiTag[], removeFromOriginalList?: boolean): this | undefined;
32
40
  mergeIndis(target?: IndiKey | IndiType, source?: IndiKey | IndiType, removeFromOriginalList?: boolean): this | undefined;
@@ -145,4 +153,5 @@ export declare const validateGedcomContent: (content?: string) => {
145
153
  * - All family relationships (FAMS/FAMC) are preserved with updated ID references
146
154
  */
147
155
  export declare const mergeGedcoms: (targetGedcom: GedComType, sourceGedcom: GedComType, strategy?: MultiTag | "id") => GedComType;
156
+ export {};
148
157
  //# sourceMappingURL=gedcom.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gedcom.d.ts","sourceRoot":"","sources":["../../src/classes/gedcom.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gedcom.d.ts","sourceRoot":"","sources":["../../src/classes/gedcom.ts"],"names":[],"mappings":"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"}
@@ -2862,6 +2862,20 @@ var LONG_NOTES = {
2862
2862
  "Bef.": "Before",
2863
2863
  "Aft.": "After"
2864
2864
  };
2865
+ var STANDARD_QUALIFIERS = {
2866
+ ABT: "Abt.",
2867
+ ABOUT: "Abt.",
2868
+ BEF: "Bef.",
2869
+ BEFORE: "Bef.",
2870
+ AFT: "Aft.",
2871
+ AFTER: "Aft."
2872
+ };
2873
+ var EXPORT_QUALIFIERS = {
2874
+ "Abt.": "ABT",
2875
+ "Bef.": "BEF",
2876
+ "Aft.": "AFT"
2877
+ };
2878
+ var GEDCOM_MONTHS = /\b(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\b/g;
2865
2879
  var NOTE_MARKER = "####";
2866
2880
  var formatDateWithComponents = (date, hasDay, hasMonth, hasYear, noteValue, baseFormat = "dd MMM yyyy", locale) => {
2867
2881
  const hasNote = baseFormat.includes("NOTE");
@@ -2895,6 +2909,17 @@ var CommonDate = class extends Common {
2895
2909
  this.NOTE = this.NOTE || createCommon(this._gedcom, void 0, this.main);
2896
2910
  this.NOTE.value = noteMatch?.note;
2897
2911
  validValue = value.replace(noteRegExp, "");
2912
+ } else {
2913
+ const qualifierMatch = value.match(
2914
+ /^(?<qualifier>ABT|ABOUT|BEF|BEFORE|AFT|AFTER)\b\s*/i
2915
+ );
2916
+ const qualifier = qualifierMatch?.groups?.qualifier?.toUpperCase();
2917
+ const note = qualifier ? STANDARD_QUALIFIERS[qualifier] : void 0;
2918
+ if (note) {
2919
+ this.NOTE = this.NOTE || createCommon(this._gedcom, void 0, this.main);
2920
+ this.NOTE.value = note;
2921
+ validValue = value.slice(qualifierMatch[0].length);
2922
+ }
2898
2923
  }
2899
2924
  const acceptedDate = this.isValidDateFormat(validValue);
2900
2925
  if (acceptedDate) {
@@ -3000,7 +3025,23 @@ var CommonDate = class extends Common {
3000
3025
  );
3001
3026
  }
3002
3027
  exportValue() {
3003
- return this.toValue("NOTE dd MMM yyyy", null);
3028
+ const formatted = this.toValue("NOTE dd MMM yyyy", null);
3029
+ if (!formatted) {
3030
+ return formatted;
3031
+ }
3032
+ const note = this.NOTE?.value?.trim();
3033
+ const qualifier = note ? EXPORT_QUALIFIERS[note] : void 0;
3034
+ const standardized = qualifier ? formatted.replace(note, qualifier) : formatted;
3035
+ return standardized.replace(
3036
+ GEDCOM_MONTHS,
3037
+ (month) => month.toUpperCase()
3038
+ );
3039
+ }
3040
+ toGedcomLines(tag, level = 0, options) {
3041
+ const internal = new RegExp(
3042
+ `^${level} (DAY|MONTH|YEAR)( |$)|^${level} NOTE (Abt\\.|Bef\\.|Aft\\.)$`
3043
+ );
3044
+ return super.toGedcomLines(tag, level, options).filter((line) => !internal.test(line));
3004
3045
  }
3005
3046
  inRange(range, trueIfNoYear = false) {
3006
3047
  return inRange(this.YEAR?.value, range, trueIfNoYear);
@@ -6253,12 +6294,15 @@ var createIndi = (gedcom, id, main, parent) => {
6253
6294
 
6254
6295
  // package.json
6255
6296
  var package_default = {
6256
- version: "2.0.5"};
6297
+ version: "2.0.8"};
6257
6298
 
6258
6299
  // src/utils/get-product-details.ts
6259
6300
  var getVersion = () => package_default.version;
6260
6301
 
6261
6302
  // src/classes/gedcom.ts
6303
+ var isObjectPatch = (value) => {
6304
+ return !!value && typeof value === "object" && !Array.isArray(value);
6305
+ };
6262
6306
  var GedCom = class extends Common {
6263
6307
  constructor() {
6264
6308
  super();
@@ -6283,6 +6327,77 @@ var GedCom = class extends Common {
6283
6327
  getList(type) {
6284
6328
  return this.get(type);
6285
6329
  }
6330
+ createNodeFromPatchValue(value, main) {
6331
+ if (value === void 0 || value === null) {
6332
+ return void 0;
6333
+ }
6334
+ const node = createCommon(this, void 0, main);
6335
+ if (Array.isArray(value)) {
6336
+ value.forEach((item) => {
6337
+ const childNode = this.createNodeFromPatchValue(item, node);
6338
+ if (childNode) {
6339
+ node.assign("DATA", childNode);
6340
+ }
6341
+ });
6342
+ return node;
6343
+ }
6344
+ if (isObjectPatch(value)) {
6345
+ this.applyObjectToCommon(node, value);
6346
+ return node;
6347
+ }
6348
+ node.value = String(value);
6349
+ return node;
6350
+ }
6351
+ applyObjectToCommon(target, patch) {
6352
+ Object.entries(patch).forEach(([rawTag, value]) => {
6353
+ if (rawTag === "value") {
6354
+ if (value === null || value === void 0 || Array.isArray(value) || isObjectPatch(value)) {
6355
+ return;
6356
+ }
6357
+ target.value = String(value);
6358
+ return;
6359
+ }
6360
+ if (rawTag === "id") {
6361
+ if (typeof value === "string") {
6362
+ target.id = value;
6363
+ }
6364
+ return;
6365
+ }
6366
+ const tag = rawTag;
6367
+ if (value === void 0) {
6368
+ return;
6369
+ }
6370
+ if (value === null) {
6371
+ target.remove(tag);
6372
+ return;
6373
+ }
6374
+ if (Array.isArray(value)) {
6375
+ target.remove(tag);
6376
+ value.forEach((item) => {
6377
+ const listNode = this.createNodeFromPatchValue(
6378
+ item,
6379
+ target.main ?? this
6380
+ );
6381
+ if (listNode) {
6382
+ target.assign(tag, listNode);
6383
+ }
6384
+ });
6385
+ return;
6386
+ }
6387
+ if (isObjectPatch(value)) {
6388
+ const existing = target.get(tag);
6389
+ const objectNode = existing ?? createCommon(this, void 0, target.main ?? this);
6390
+ this.applyObjectToCommon(objectNode, value);
6391
+ target.set(tag, objectNode);
6392
+ return;
6393
+ }
6394
+ target.set(tag, String(value));
6395
+ });
6396
+ }
6397
+ applyObject(patch) {
6398
+ this.applyObjectToCommon(this, patch);
6399
+ return this;
6400
+ }
6286
6401
  indis() {
6287
6402
  return this.getList("@@INDI");
6288
6403
  }
package/dist/cli/index.js CHANGED
@@ -5306,6 +5306,20 @@ var LONG_NOTES = {
5306
5306
  "Bef.": "Before",
5307
5307
  "Aft.": "After"
5308
5308
  };
5309
+ var STANDARD_QUALIFIERS = {
5310
+ ABT: "Abt.",
5311
+ ABOUT: "Abt.",
5312
+ BEF: "Bef.",
5313
+ BEFORE: "Bef.",
5314
+ AFT: "Aft.",
5315
+ AFTER: "Aft."
5316
+ };
5317
+ var EXPORT_QUALIFIERS = {
5318
+ "Abt.": "ABT",
5319
+ "Bef.": "BEF",
5320
+ "Aft.": "AFT"
5321
+ };
5322
+ var GEDCOM_MONTHS = /\b(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\b/g;
5309
5323
  var NOTE_MARKER = "####";
5310
5324
  var formatDateWithComponents = (date, hasDay, hasMonth, hasYear, noteValue, baseFormat = "dd MMM yyyy", locale) => {
5311
5325
  const hasNote = baseFormat.includes("NOTE");
@@ -5339,6 +5353,17 @@ var CommonDate = class extends Common {
5339
5353
  this.NOTE = this.NOTE || createCommon(this._gedcom, void 0, this.main);
5340
5354
  this.NOTE.value = noteMatch?.note;
5341
5355
  validValue = value.replace(noteRegExp, "");
5356
+ } else {
5357
+ const qualifierMatch = value.match(
5358
+ /^(?<qualifier>ABT|ABOUT|BEF|BEFORE|AFT|AFTER)\b\s*/i
5359
+ );
5360
+ const qualifier = qualifierMatch?.groups?.qualifier?.toUpperCase();
5361
+ const note = qualifier ? STANDARD_QUALIFIERS[qualifier] : void 0;
5362
+ if (note) {
5363
+ this.NOTE = this.NOTE || createCommon(this._gedcom, void 0, this.main);
5364
+ this.NOTE.value = note;
5365
+ validValue = value.slice(qualifierMatch[0].length);
5366
+ }
5342
5367
  }
5343
5368
  const acceptedDate = this.isValidDateFormat(validValue);
5344
5369
  if (acceptedDate) {
@@ -5444,7 +5469,23 @@ var CommonDate = class extends Common {
5444
5469
  );
5445
5470
  }
5446
5471
  exportValue() {
5447
- return this.toValue("NOTE dd MMM yyyy", null);
5472
+ const formatted = this.toValue("NOTE dd MMM yyyy", null);
5473
+ if (!formatted) {
5474
+ return formatted;
5475
+ }
5476
+ const note = this.NOTE?.value?.trim();
5477
+ const qualifier = note ? EXPORT_QUALIFIERS[note] : void 0;
5478
+ const standardized = qualifier ? formatted.replace(note, qualifier) : formatted;
5479
+ return standardized.replace(
5480
+ GEDCOM_MONTHS,
5481
+ (month) => month.toUpperCase()
5482
+ );
5483
+ }
5484
+ toGedcomLines(tag, level = 0, options) {
5485
+ const internal = new RegExp(
5486
+ `^${level} (DAY|MONTH|YEAR)( |$)|^${level} NOTE (Abt\\.|Bef\\.|Aft\\.)$`
5487
+ );
5488
+ return super.toGedcomLines(tag, level, options).filter((line) => !internal.test(line));
5448
5489
  }
5449
5490
  inRange(range, trueIfNoYear = false) {
5450
5491
  return inRange(this.YEAR?.value, range, trueIfNoYear);
@@ -6247,7 +6288,7 @@ var Families = class _Families extends List {
6247
6288
 
6248
6289
  // package.json
6249
6290
  var package_default = {
6250
- version: "2.0.5"};
6291
+ version: "2.0.8"};
6251
6292
 
6252
6293
  // src/utils/get-product-details.ts
6253
6294
  var isDevelopment = () => {
@@ -6256,6 +6297,9 @@ var isDevelopment = () => {
6256
6297
  var getVersion = () => package_default.version;
6257
6298
 
6258
6299
  // src/classes/gedcom.ts
6300
+ var isObjectPatch = (value) => {
6301
+ return !!value && typeof value === "object" && !Array.isArray(value);
6302
+ };
6259
6303
  var GedCom = class extends Common {
6260
6304
  constructor() {
6261
6305
  super();
@@ -6280,6 +6324,77 @@ var GedCom = class extends Common {
6280
6324
  getList(type) {
6281
6325
  return this.get(type);
6282
6326
  }
6327
+ createNodeFromPatchValue(value, main) {
6328
+ if (value === void 0 || value === null) {
6329
+ return void 0;
6330
+ }
6331
+ const node = createCommon(this, void 0, main);
6332
+ if (Array.isArray(value)) {
6333
+ value.forEach((item) => {
6334
+ const childNode = this.createNodeFromPatchValue(item, node);
6335
+ if (childNode) {
6336
+ node.assign("DATA", childNode);
6337
+ }
6338
+ });
6339
+ return node;
6340
+ }
6341
+ if (isObjectPatch(value)) {
6342
+ this.applyObjectToCommon(node, value);
6343
+ return node;
6344
+ }
6345
+ node.value = String(value);
6346
+ return node;
6347
+ }
6348
+ applyObjectToCommon(target, patch) {
6349
+ Object.entries(patch).forEach(([rawTag, value]) => {
6350
+ if (rawTag === "value") {
6351
+ if (value === null || value === void 0 || Array.isArray(value) || isObjectPatch(value)) {
6352
+ return;
6353
+ }
6354
+ target.value = String(value);
6355
+ return;
6356
+ }
6357
+ if (rawTag === "id") {
6358
+ if (typeof value === "string") {
6359
+ target.id = value;
6360
+ }
6361
+ return;
6362
+ }
6363
+ const tag = rawTag;
6364
+ if (value === void 0) {
6365
+ return;
6366
+ }
6367
+ if (value === null) {
6368
+ target.remove(tag);
6369
+ return;
6370
+ }
6371
+ if (Array.isArray(value)) {
6372
+ target.remove(tag);
6373
+ value.forEach((item) => {
6374
+ const listNode = this.createNodeFromPatchValue(
6375
+ item,
6376
+ target.main ?? this
6377
+ );
6378
+ if (listNode) {
6379
+ target.assign(tag, listNode);
6380
+ }
6381
+ });
6382
+ return;
6383
+ }
6384
+ if (isObjectPatch(value)) {
6385
+ const existing = target.get(tag);
6386
+ const objectNode = existing ?? createCommon(this, void 0, target.main ?? this);
6387
+ this.applyObjectToCommon(objectNode, value);
6388
+ target.set(tag, objectNode);
6389
+ return;
6390
+ }
6391
+ target.set(tag, String(value));
6392
+ });
6393
+ }
6394
+ applyObject(patch) {
6395
+ this.applyObjectToCommon(this, patch);
6396
+ return this;
6397
+ }
6283
6398
  indis() {
6284
6399
  return this.getList("@@INDI");
6285
6400
  }
@@ -5900,6 +5900,20 @@ var LONG_NOTES = {
5900
5900
  "Bef.": "Before",
5901
5901
  "Aft.": "After"
5902
5902
  };
5903
+ var STANDARD_QUALIFIERS = {
5904
+ ABT: "Abt.",
5905
+ ABOUT: "Abt.",
5906
+ BEF: "Bef.",
5907
+ BEFORE: "Bef.",
5908
+ AFT: "Aft.",
5909
+ AFTER: "Aft."
5910
+ };
5911
+ var EXPORT_QUALIFIERS = {
5912
+ "Abt.": "ABT",
5913
+ "Bef.": "BEF",
5914
+ "Aft.": "AFT"
5915
+ };
5916
+ var GEDCOM_MONTHS = /\b(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\b/g;
5903
5917
  var NOTE_MARKER = "####";
5904
5918
  var formatDateWithComponents = (date, hasDay, hasMonth, hasYear, noteValue, baseFormat = "dd MMM yyyy", locale) => {
5905
5919
  const hasNote = baseFormat.includes("NOTE");
@@ -5933,6 +5947,17 @@ var CommonDate = class extends Common {
5933
5947
  this.NOTE = this.NOTE || createCommon(this._gedcom, void 0, this.main);
5934
5948
  this.NOTE.value = noteMatch?.note;
5935
5949
  validValue = value.replace(noteRegExp, "");
5950
+ } else {
5951
+ const qualifierMatch = value.match(
5952
+ /^(?<qualifier>ABT|ABOUT|BEF|BEFORE|AFT|AFTER)\b\s*/i
5953
+ );
5954
+ const qualifier = qualifierMatch?.groups?.qualifier?.toUpperCase();
5955
+ const note = qualifier ? STANDARD_QUALIFIERS[qualifier] : void 0;
5956
+ if (note) {
5957
+ this.NOTE = this.NOTE || createCommon(this._gedcom, void 0, this.main);
5958
+ this.NOTE.value = note;
5959
+ validValue = value.slice(qualifierMatch[0].length);
5960
+ }
5936
5961
  }
5937
5962
  const acceptedDate = this.isValidDateFormat(validValue);
5938
5963
  if (acceptedDate) {
@@ -6038,7 +6063,23 @@ var CommonDate = class extends Common {
6038
6063
  );
6039
6064
  }
6040
6065
  exportValue() {
6041
- return this.toValue("NOTE dd MMM yyyy", null);
6066
+ const formatted = this.toValue("NOTE dd MMM yyyy", null);
6067
+ if (!formatted) {
6068
+ return formatted;
6069
+ }
6070
+ const note = this.NOTE?.value?.trim();
6071
+ const qualifier = note ? EXPORT_QUALIFIERS[note] : void 0;
6072
+ const standardized = qualifier ? formatted.replace(note, qualifier) : formatted;
6073
+ return standardized.replace(
6074
+ GEDCOM_MONTHS,
6075
+ (month) => month.toUpperCase()
6076
+ );
6077
+ }
6078
+ toGedcomLines(tag, level = 0, options) {
6079
+ const internal = new RegExp(
6080
+ `^${level} (DAY|MONTH|YEAR)( |$)|^${level} NOTE (Abt\\.|Bef\\.|Aft\\.)$`
6081
+ );
6082
+ return super.toGedcomLines(tag, level, options).filter((line) => !internal.test(line));
6042
6083
  }
6043
6084
  inRange(range, trueIfNoYear = false) {
6044
6085
  return inRange(this.YEAR?.value, range, trueIfNoYear);
@@ -1394,6 +1394,20 @@ var LONG_NOTES = {
1394
1394
  "Bef.": "Before",
1395
1395
  "Aft.": "After"
1396
1396
  };
1397
+ var STANDARD_QUALIFIERS = {
1398
+ ABT: "Abt.",
1399
+ ABOUT: "Abt.",
1400
+ BEF: "Bef.",
1401
+ BEFORE: "Bef.",
1402
+ AFT: "Aft.",
1403
+ AFTER: "Aft."
1404
+ };
1405
+ var EXPORT_QUALIFIERS = {
1406
+ "Abt.": "ABT",
1407
+ "Bef.": "BEF",
1408
+ "Aft.": "AFT"
1409
+ };
1410
+ var GEDCOM_MONTHS = /\b(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\b/g;
1397
1411
  var NOTE_MARKER = "####";
1398
1412
  var formatDateWithComponents = (date, hasDay, hasMonth, hasYear, noteValue, baseFormat = "dd MMM yyyy", locale) => {
1399
1413
  const hasNote = baseFormat.includes("NOTE");
@@ -1427,6 +1441,17 @@ var CommonDate = class extends Common {
1427
1441
  this.NOTE = this.NOTE || createCommon(this._gedcom, void 0, this.main);
1428
1442
  this.NOTE.value = noteMatch?.note;
1429
1443
  validValue = value.replace(noteRegExp, "");
1444
+ } else {
1445
+ const qualifierMatch = value.match(
1446
+ /^(?<qualifier>ABT|ABOUT|BEF|BEFORE|AFT|AFTER)\b\s*/i
1447
+ );
1448
+ const qualifier = qualifierMatch?.groups?.qualifier?.toUpperCase();
1449
+ const note = qualifier ? STANDARD_QUALIFIERS[qualifier] : void 0;
1450
+ if (note) {
1451
+ this.NOTE = this.NOTE || createCommon(this._gedcom, void 0, this.main);
1452
+ this.NOTE.value = note;
1453
+ validValue = value.slice(qualifierMatch[0].length);
1454
+ }
1430
1455
  }
1431
1456
  const acceptedDate = this.isValidDateFormat(validValue);
1432
1457
  if (acceptedDate) {
@@ -1532,7 +1557,23 @@ var CommonDate = class extends Common {
1532
1557
  );
1533
1558
  }
1534
1559
  exportValue() {
1535
- return this.toValue("NOTE dd MMM yyyy", null);
1560
+ const formatted = this.toValue("NOTE dd MMM yyyy", null);
1561
+ if (!formatted) {
1562
+ return formatted;
1563
+ }
1564
+ const note = this.NOTE?.value?.trim();
1565
+ const qualifier = note ? EXPORT_QUALIFIERS[note] : void 0;
1566
+ const standardized = qualifier ? formatted.replace(note, qualifier) : formatted;
1567
+ return standardized.replace(
1568
+ GEDCOM_MONTHS,
1569
+ (month) => month.toUpperCase()
1570
+ );
1571
+ }
1572
+ toGedcomLines(tag, level = 0, options) {
1573
+ const internal = new RegExp(
1574
+ `^${level} (DAY|MONTH|YEAR)( |$)|^${level} NOTE (Abt\\.|Bef\\.|Aft\\.)$`
1575
+ );
1576
+ return super.toGedcomLines(tag, level, options).filter((line) => !internal.test(line));
1536
1577
  }
1537
1578
  inRange(range, trueIfNoYear = false) {
1538
1579
  return inRange(this.YEAR?.value, range, trueIfNoYear);
package/dist/index.js CHANGED
@@ -5651,6 +5651,20 @@ var LONG_NOTES = {
5651
5651
  "Bef.": "Before",
5652
5652
  "Aft.": "After"
5653
5653
  };
5654
+ var STANDARD_QUALIFIERS = {
5655
+ ABT: "Abt.",
5656
+ ABOUT: "Abt.",
5657
+ BEF: "Bef.",
5658
+ BEFORE: "Bef.",
5659
+ AFT: "Aft.",
5660
+ AFTER: "Aft."
5661
+ };
5662
+ var EXPORT_QUALIFIERS = {
5663
+ "Abt.": "ABT",
5664
+ "Bef.": "BEF",
5665
+ "Aft.": "AFT"
5666
+ };
5667
+ var GEDCOM_MONTHS = /\b(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\b/g;
5654
5668
  var NOTE_MARKER = "####";
5655
5669
  var formatDateWithComponents = (date, hasDay, hasMonth, hasYear, noteValue, baseFormat = "dd MMM yyyy", locale) => {
5656
5670
  const hasNote = baseFormat.includes("NOTE");
@@ -5684,6 +5698,17 @@ var CommonDate = class extends Common {
5684
5698
  this.NOTE = this.NOTE || createCommon(this._gedcom, void 0, this.main);
5685
5699
  this.NOTE.value = noteMatch?.note;
5686
5700
  validValue = value.replace(noteRegExp, "");
5701
+ } else {
5702
+ const qualifierMatch = value.match(
5703
+ /^(?<qualifier>ABT|ABOUT|BEF|BEFORE|AFT|AFTER)\b\s*/i
5704
+ );
5705
+ const qualifier = qualifierMatch?.groups?.qualifier?.toUpperCase();
5706
+ const note = qualifier ? STANDARD_QUALIFIERS[qualifier] : void 0;
5707
+ if (note) {
5708
+ this.NOTE = this.NOTE || createCommon(this._gedcom, void 0, this.main);
5709
+ this.NOTE.value = note;
5710
+ validValue = value.slice(qualifierMatch[0].length);
5711
+ }
5687
5712
  }
5688
5713
  const acceptedDate = this.isValidDateFormat(validValue);
5689
5714
  if (acceptedDate) {
@@ -5789,7 +5814,23 @@ var CommonDate = class extends Common {
5789
5814
  );
5790
5815
  }
5791
5816
  exportValue() {
5792
- return this.toValue("NOTE dd MMM yyyy", null);
5817
+ const formatted = this.toValue("NOTE dd MMM yyyy", null);
5818
+ if (!formatted) {
5819
+ return formatted;
5820
+ }
5821
+ const note = this.NOTE?.value?.trim();
5822
+ const qualifier = note ? EXPORT_QUALIFIERS[note] : void 0;
5823
+ const standardized = qualifier ? formatted.replace(note, qualifier) : formatted;
5824
+ return standardized.replace(
5825
+ GEDCOM_MONTHS,
5826
+ (month) => month.toUpperCase()
5827
+ );
5828
+ }
5829
+ toGedcomLines(tag, level = 0, options) {
5830
+ const internal = new RegExp(
5831
+ `^${level} (DAY|MONTH|YEAR)( |$)|^${level} NOTE (Abt\\.|Bef\\.|Aft\\.)$`
5832
+ );
5833
+ return super.toGedcomLines(tag, level, options).filter((line) => !internal.test(line));
5793
5834
  }
5794
5835
  inRange(range, trueIfNoYear = false) {
5795
5836
  return inRange(this.YEAR?.value, range, trueIfNoYear);
@@ -6653,7 +6694,7 @@ var Families = class _Families extends List {
6653
6694
  // package.json
6654
6695
  var package_default = {
6655
6696
  name: "@treeviz/gedcom-parser",
6656
- version: "2.0.5"};
6697
+ version: "2.0.8"};
6657
6698
 
6658
6699
  // src/utils/get-product-details.ts
6659
6700
  var isDevelopment = () => {
@@ -6663,6 +6704,9 @@ var getVersion = () => package_default.version;
6663
6704
  var getName = () => package_default.name;
6664
6705
 
6665
6706
  // src/classes/gedcom.ts
6707
+ var isObjectPatch = (value) => {
6708
+ return !!value && typeof value === "object" && !Array.isArray(value);
6709
+ };
6666
6710
  var GedCom = class extends Common {
6667
6711
  constructor() {
6668
6712
  super();
@@ -6687,6 +6731,77 @@ var GedCom = class extends Common {
6687
6731
  getList(type) {
6688
6732
  return this.get(type);
6689
6733
  }
6734
+ createNodeFromPatchValue(value, main) {
6735
+ if (value === void 0 || value === null) {
6736
+ return void 0;
6737
+ }
6738
+ const node = createCommon(this, void 0, main);
6739
+ if (Array.isArray(value)) {
6740
+ value.forEach((item) => {
6741
+ const childNode = this.createNodeFromPatchValue(item, node);
6742
+ if (childNode) {
6743
+ node.assign("DATA", childNode);
6744
+ }
6745
+ });
6746
+ return node;
6747
+ }
6748
+ if (isObjectPatch(value)) {
6749
+ this.applyObjectToCommon(node, value);
6750
+ return node;
6751
+ }
6752
+ node.value = String(value);
6753
+ return node;
6754
+ }
6755
+ applyObjectToCommon(target, patch) {
6756
+ Object.entries(patch).forEach(([rawTag, value]) => {
6757
+ if (rawTag === "value") {
6758
+ if (value === null || value === void 0 || Array.isArray(value) || isObjectPatch(value)) {
6759
+ return;
6760
+ }
6761
+ target.value = String(value);
6762
+ return;
6763
+ }
6764
+ if (rawTag === "id") {
6765
+ if (typeof value === "string") {
6766
+ target.id = value;
6767
+ }
6768
+ return;
6769
+ }
6770
+ const tag = rawTag;
6771
+ if (value === void 0) {
6772
+ return;
6773
+ }
6774
+ if (value === null) {
6775
+ target.remove(tag);
6776
+ return;
6777
+ }
6778
+ if (Array.isArray(value)) {
6779
+ target.remove(tag);
6780
+ value.forEach((item) => {
6781
+ const listNode = this.createNodeFromPatchValue(
6782
+ item,
6783
+ target.main ?? this
6784
+ );
6785
+ if (listNode) {
6786
+ target.assign(tag, listNode);
6787
+ }
6788
+ });
6789
+ return;
6790
+ }
6791
+ if (isObjectPatch(value)) {
6792
+ const existing = target.get(tag);
6793
+ const objectNode = existing ?? createCommon(this, void 0, target.main ?? this);
6794
+ this.applyObjectToCommon(objectNode, value);
6795
+ target.set(tag, objectNode);
6796
+ return;
6797
+ }
6798
+ target.set(tag, String(value));
6799
+ });
6800
+ }
6801
+ applyObject(patch) {
6802
+ this.applyObjectToCommon(this, patch);
6803
+ return this;
6804
+ }
6690
6805
  indis() {
6691
6806
  return this.getList("@@INDI");
6692
6807
  }
@@ -12,6 +12,11 @@ import type { Sources } from "../classes/sours";
12
12
  import type { SubmType } from "../classes/subm";
13
13
  import type { Submitters } from "../classes/subms";
14
14
  import type { FamKey, IndiKey, ObjeKey, RepoKey, SourKey, SubmKey } from "../types/types";
15
+ type GedcomObjectPrimitive = string | number | boolean;
16
+ export interface GedcomObjectPatch {
17
+ [key: string]: GedcomObjectPatchValue;
18
+ }
19
+ export type GedcomObjectPatchValue = GedcomObjectPrimitive | GedcomObjectPatch | GedcomObjectPatchValue[] | null | undefined;
15
20
  interface IGedcom extends Common {
16
21
  indis: () => Individuals | undefined;
17
22
  fams: () => Families | undefined;
@@ -25,6 +30,7 @@ interface IGedcom extends Common {
25
30
  sour: (index: number | SourKey) => SourType | undefined;
26
31
  repo: (index: number | RepoKey) => RepoType | undefined;
27
32
  subm: (index: number | SubmKey) => SubmType | undefined;
33
+ applyObject: (patch: GedcomObjectPatch) => IGedcom;
28
34
  }
29
35
  export default IGedcom;
30
36
  //# sourceMappingURL=gedcom.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"gedcom.d.ts","sourceRoot":"","sources":["../../src/interfaces/gedcom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EACX,MAAM,EACN,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,MAAM,gBAAgB,CAAC;AAExB,UAAU,OAAQ,SAAQ,MAAM;IAC/B,KAAK,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IAErC,IAAI,EAAE,MAAM,QAAQ,GAAG,SAAS,CAAC;IAEjC,KAAK,EAAE,MAAM,OAAO,GAAG,SAAS,CAAC;IAEjC,KAAK,EAAE,MAAM,OAAO,GAAG,SAAS,CAAC;IAEjC,KAAK,EAAE,MAAM,YAAY,GAAG,SAAS,CAAC;IAEtC,KAAK,EAAE,MAAM,UAAU,GAAG,SAAS,CAAC;IAEpC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,KAAK,QAAQ,GAAG,SAAS,CAAC;IAExD,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC;IAErD,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,KAAK,QAAQ,GAAG,SAAS,CAAC;IAExD,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,KAAK,QAAQ,GAAG,SAAS,CAAC;IAExD,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,KAAK,QAAQ,GAAG,SAAS,CAAC;IAExD,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,KAAK,QAAQ,GAAG,SAAS,CAAC;CACxD;AAED,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"gedcom.d.ts","sourceRoot":"","sources":["../../src/interfaces/gedcom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EACX,MAAM,EACN,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,OAAO,EACP,MAAM,gBAAgB,CAAC;AAExB,KAAK,qBAAqB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AACvD,MAAM,WAAW,iBAAiB;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,sBAAsB,CAAC;CACtC;AACD,MAAM,MAAM,sBAAsB,GAC/B,qBAAqB,GACrB,iBAAiB,GACjB,sBAAsB,EAAE,GACxB,IAAI,GACJ,SAAS,CAAC;AAEb,UAAU,OAAQ,SAAQ,MAAM;IAC/B,KAAK,EAAE,MAAM,WAAW,GAAG,SAAS,CAAC;IAErC,IAAI,EAAE,MAAM,QAAQ,GAAG,SAAS,CAAC;IAEjC,KAAK,EAAE,MAAM,OAAO,GAAG,SAAS,CAAC;IAEjC,KAAK,EAAE,MAAM,OAAO,GAAG,SAAS,CAAC;IAEjC,KAAK,EAAE,MAAM,YAAY,GAAG,SAAS,CAAC;IAEtC,KAAK,EAAE,MAAM,UAAU,GAAG,SAAS,CAAC;IAEpC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,KAAK,QAAQ,GAAG,SAAS,CAAC;IAExD,GAAG,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC;IAErD,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,KAAK,QAAQ,GAAG,SAAS,CAAC;IAExD,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,KAAK,QAAQ,GAAG,SAAS,CAAC;IAExD,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,KAAK,QAAQ,GAAG,SAAS,CAAC;IAExD,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,KAAK,QAAQ,GAAG,SAAS,CAAC;IAExD,WAAW,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,OAAO,CAAC;CACnD;AAED,eAAe,OAAO,CAAC"}
@@ -2586,6 +2586,20 @@ var LONG_NOTES = {
2586
2586
  "Bef.": "Before",
2587
2587
  "Aft.": "After"
2588
2588
  };
2589
+ var STANDARD_QUALIFIERS = {
2590
+ ABT: "Abt.",
2591
+ ABOUT: "Abt.",
2592
+ BEF: "Bef.",
2593
+ BEFORE: "Bef.",
2594
+ AFT: "Aft.",
2595
+ AFTER: "Aft."
2596
+ };
2597
+ var EXPORT_QUALIFIERS = {
2598
+ "Abt.": "ABT",
2599
+ "Bef.": "BEF",
2600
+ "Aft.": "AFT"
2601
+ };
2602
+ var GEDCOM_MONTHS = /\b(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\b/g;
2589
2603
  var NOTE_MARKER = "####";
2590
2604
  var formatDateWithComponents = (date, hasDay, hasMonth, hasYear, noteValue, baseFormat = "dd MMM yyyy", locale) => {
2591
2605
  const hasNote = baseFormat.includes("NOTE");
@@ -2619,6 +2633,17 @@ var CommonDate = class extends Common {
2619
2633
  this.NOTE = this.NOTE || createCommon(this._gedcom, void 0, this.main);
2620
2634
  this.NOTE.value = noteMatch?.note;
2621
2635
  validValue = value.replace(noteRegExp, "");
2636
+ } else {
2637
+ const qualifierMatch = value.match(
2638
+ /^(?<qualifier>ABT|ABOUT|BEF|BEFORE|AFT|AFTER)\b\s*/i
2639
+ );
2640
+ const qualifier = qualifierMatch?.groups?.qualifier?.toUpperCase();
2641
+ const note = qualifier ? STANDARD_QUALIFIERS[qualifier] : void 0;
2642
+ if (note) {
2643
+ this.NOTE = this.NOTE || createCommon(this._gedcom, void 0, this.main);
2644
+ this.NOTE.value = note;
2645
+ validValue = value.slice(qualifierMatch[0].length);
2646
+ }
2622
2647
  }
2623
2648
  const acceptedDate = this.isValidDateFormat(validValue);
2624
2649
  if (acceptedDate) {
@@ -2724,7 +2749,23 @@ var CommonDate = class extends Common {
2724
2749
  );
2725
2750
  }
2726
2751
  exportValue() {
2727
- return this.toValue("NOTE dd MMM yyyy", null);
2752
+ const formatted = this.toValue("NOTE dd MMM yyyy", null);
2753
+ if (!formatted) {
2754
+ return formatted;
2755
+ }
2756
+ const note = this.NOTE?.value?.trim();
2757
+ const qualifier = note ? EXPORT_QUALIFIERS[note] : void 0;
2758
+ const standardized = qualifier ? formatted.replace(note, qualifier) : formatted;
2759
+ return standardized.replace(
2760
+ GEDCOM_MONTHS,
2761
+ (month) => month.toUpperCase()
2762
+ );
2763
+ }
2764
+ toGedcomLines(tag, level = 0, options) {
2765
+ const internal = new RegExp(
2766
+ `^${level} (DAY|MONTH|YEAR)( |$)|^${level} NOTE (Abt\\.|Bef\\.|Aft\\.)$`
2767
+ );
2768
+ return super.toGedcomLines(tag, level, options).filter((line) => !internal.test(line));
2728
2769
  }
2729
2770
  inRange(range, trueIfNoYear = false) {
2730
2771
  return inRange(this.YEAR?.value, range, trueIfNoYear);
@@ -6333,6 +6333,20 @@ var LONG_NOTES = {
6333
6333
  "Bef.": "Before",
6334
6334
  "Aft.": "After"
6335
6335
  };
6336
+ var STANDARD_QUALIFIERS = {
6337
+ ABT: "Abt.",
6338
+ ABOUT: "Abt.",
6339
+ BEF: "Bef.",
6340
+ BEFORE: "Bef.",
6341
+ AFT: "Aft.",
6342
+ AFTER: "Aft."
6343
+ };
6344
+ var EXPORT_QUALIFIERS = {
6345
+ "Abt.": "ABT",
6346
+ "Bef.": "BEF",
6347
+ "Aft.": "AFT"
6348
+ };
6349
+ var GEDCOM_MONTHS = /\b(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\b/g;
6336
6350
  var NOTE_MARKER = "####";
6337
6351
  var formatDateWithComponents = (date, hasDay, hasMonth, hasYear, noteValue, baseFormat = "dd MMM yyyy", locale) => {
6338
6352
  const hasNote = baseFormat.includes("NOTE");
@@ -6366,6 +6380,17 @@ var CommonDate = class extends Common {
6366
6380
  this.NOTE = this.NOTE || createCommon(this._gedcom, void 0, this.main);
6367
6381
  this.NOTE.value = noteMatch?.note;
6368
6382
  validValue = value.replace(noteRegExp, "");
6383
+ } else {
6384
+ const qualifierMatch = value.match(
6385
+ /^(?<qualifier>ABT|ABOUT|BEF|BEFORE|AFT|AFTER)\b\s*/i
6386
+ );
6387
+ const qualifier = qualifierMatch?.groups?.qualifier?.toUpperCase();
6388
+ const note = qualifier ? STANDARD_QUALIFIERS[qualifier] : void 0;
6389
+ if (note) {
6390
+ this.NOTE = this.NOTE || createCommon(this._gedcom, void 0, this.main);
6391
+ this.NOTE.value = note;
6392
+ validValue = value.slice(qualifierMatch[0].length);
6393
+ }
6369
6394
  }
6370
6395
  const acceptedDate = this.isValidDateFormat(validValue);
6371
6396
  if (acceptedDate) {
@@ -6471,7 +6496,23 @@ var CommonDate = class extends Common {
6471
6496
  );
6472
6497
  }
6473
6498
  exportValue() {
6474
- return this.toValue("NOTE dd MMM yyyy", null);
6499
+ const formatted = this.toValue("NOTE dd MMM yyyy", null);
6500
+ if (!formatted) {
6501
+ return formatted;
6502
+ }
6503
+ const note = this.NOTE?.value?.trim();
6504
+ const qualifier = note ? EXPORT_QUALIFIERS[note] : void 0;
6505
+ const standardized = qualifier ? formatted.replace(note, qualifier) : formatted;
6506
+ return standardized.replace(
6507
+ GEDCOM_MONTHS,
6508
+ (month) => month.toUpperCase()
6509
+ );
6510
+ }
6511
+ toGedcomLines(tag, level = 0, options) {
6512
+ const internal = new RegExp(
6513
+ `^${level} (DAY|MONTH|YEAR)( |$)|^${level} NOTE (Abt\\.|Bef\\.|Aft\\.)$`
6514
+ );
6515
+ return super.toGedcomLines(tag, level, options).filter((line) => !internal.test(line));
6475
6516
  }
6476
6517
  inRange(range, trueIfNoYear = false) {
6477
6518
  return inRange(this.YEAR?.value, range, trueIfNoYear);
@@ -6489,7 +6530,7 @@ var isCommonDate = (value) => {
6489
6530
  // package.json
6490
6531
  var package_default = {
6491
6532
  name: "@treeviz/gedcom-parser",
6492
- version: "2.0.5"};
6533
+ version: "2.0.8"};
6493
6534
 
6494
6535
  // src/utils/get-product-details.ts
6495
6536
  var isDevelopment = () => {
@@ -6499,6 +6540,9 @@ var getVersion = () => package_default.version;
6499
6540
  var getName = () => package_default.name;
6500
6541
 
6501
6542
  // src/classes/gedcom.ts
6543
+ var isObjectPatch = (value) => {
6544
+ return !!value && typeof value === "object" && !Array.isArray(value);
6545
+ };
6502
6546
  var GedCom = class extends Common {
6503
6547
  constructor() {
6504
6548
  super();
@@ -6523,6 +6567,77 @@ var GedCom = class extends Common {
6523
6567
  getList(type) {
6524
6568
  return this.get(type);
6525
6569
  }
6570
+ createNodeFromPatchValue(value, main) {
6571
+ if (value === void 0 || value === null) {
6572
+ return void 0;
6573
+ }
6574
+ const node = createCommon(this, void 0, main);
6575
+ if (Array.isArray(value)) {
6576
+ value.forEach((item) => {
6577
+ const childNode = this.createNodeFromPatchValue(item, node);
6578
+ if (childNode) {
6579
+ node.assign("DATA", childNode);
6580
+ }
6581
+ });
6582
+ return node;
6583
+ }
6584
+ if (isObjectPatch(value)) {
6585
+ this.applyObjectToCommon(node, value);
6586
+ return node;
6587
+ }
6588
+ node.value = String(value);
6589
+ return node;
6590
+ }
6591
+ applyObjectToCommon(target, patch) {
6592
+ Object.entries(patch).forEach(([rawTag, value]) => {
6593
+ if (rawTag === "value") {
6594
+ if (value === null || value === void 0 || Array.isArray(value) || isObjectPatch(value)) {
6595
+ return;
6596
+ }
6597
+ target.value = String(value);
6598
+ return;
6599
+ }
6600
+ if (rawTag === "id") {
6601
+ if (typeof value === "string") {
6602
+ target.id = value;
6603
+ }
6604
+ return;
6605
+ }
6606
+ const tag = rawTag;
6607
+ if (value === void 0) {
6608
+ return;
6609
+ }
6610
+ if (value === null) {
6611
+ target.remove(tag);
6612
+ return;
6613
+ }
6614
+ if (Array.isArray(value)) {
6615
+ target.remove(tag);
6616
+ value.forEach((item) => {
6617
+ const listNode = this.createNodeFromPatchValue(
6618
+ item,
6619
+ target.main ?? this
6620
+ );
6621
+ if (listNode) {
6622
+ target.assign(tag, listNode);
6623
+ }
6624
+ });
6625
+ return;
6626
+ }
6627
+ if (isObjectPatch(value)) {
6628
+ const existing = target.get(tag);
6629
+ const objectNode = existing ?? createCommon(this, void 0, target.main ?? this);
6630
+ this.applyObjectToCommon(objectNode, value);
6631
+ target.set(tag, objectNode);
6632
+ return;
6633
+ }
6634
+ target.set(tag, String(value));
6635
+ });
6636
+ }
6637
+ applyObject(patch) {
6638
+ this.applyObjectToCommon(this, patch);
6639
+ return this;
6640
+ }
6526
6641
  indis() {
6527
6642
  return this.getList("@@INDI");
6528
6643
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@treeviz/gedcom-parser",
3
- "version": "2.0.5",
3
+ "version": "2.0.8",
4
4
  "description": "Lightweight, pluggable GEDCOM parser for JavaScript/TypeScript with optional caching and place matching. Zero browser dependencies.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",