UNPKG

gedcom-ts

Version:

TypeScript GEDCOM toolkit for browser apps: import .ged/.zip, edit typed genealogy data, and export GEDCOM or GEDZIP.

2 lines (1 loc) 17.8 kB
var w=Object.defineProperty;var fe=Object.getOwnPropertyDescriptor;var ye=Object.getOwnPropertyNames;var Le=Object.prototype.hasOwnProperty;var D=(e,n)=>()=>(e&&(n=e(e=0)),n);var Be=(e,n)=>{for(var o in n)w(e,o,{get:n[o],enumerable:!0})},$e=(e,n,o,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let c of ye(n))!Le.call(e,c)&&c!==o&&w(e,c,{get:()=>n[c],enumerable:!(a=fe(n,c))||a.enumerable});return e};var ke=e=>$e(w({},"__esModule",{value:!0}),e);var _=D(()=>{});function X(e){function n(B){let p=B.trim();return!p||p===e.unknownDate?!1:j.test(p)||V.test(p)}function o(B){let p=B.trim();if(!p||p===e.unknownDate)return e.onUnknown;if(j.test(p))return e.inYear(p);let k=V.exec(p);if(k){let R=k[1].toLowerCase(),b=k[2];switch(R){case"bef":return e.beforeYear(b);case"aft":return e.afterYear(b);case"vers":case"circa":case"environ":case"about":case"abt":case"est":case"cal":return e.aboutYear(b);default:return e.inYear(b)}}return e.onFullDate(p)}function a(B,p){let k=B.trim(),R=p.trim();return e.lifeRange(k,R,n(k))}function c(B){let p=B.trim();return j.test(p)?e.seesDayInYear(p):n(p)?e.seesDayOnPhrase(o(p)):e.seesDayOnFullDate(p)}return{BOOKLET_UNKNOWN_DATE:e.unknownDate,isYearOnlyDate:n,onDate:o,lifeDateRange:a,seesDayOn:c}}var j,V,q=D(()=>{j=/^\d{3,4}$/,V=/^(vers|circa|environ|about|ABT|BEF|AFT|EST|CAL|INT|FROM|TO)\s+(\d{3,4})$/i});function De(e){return e.normalize("NFD").replace(/\p{M}/gu,"").toLowerCase()}function Ce(e){return be.has(De(e))}function Q(e,n){function o(y){let i=y.trim();if(!i)return null;let h=i.indexOf(", ");return h>=0?{city:i.slice(0,h).trim(),country:i.slice(h+2).trim(),raw:i}:Ce(i)?{city:null,country:i,raw:i}:{city:i,country:null,raw:i}}function a(y){let i=o(y);return i?i.city&&i.country?`${i.city}, ${n.countryPhrase(i.country)}`:i.city?i.city:i.country?n.countryPhrase(i.country):i.raw:""}function c(y,i){let h=a(i);if(!h)return"";let L=n.locationPhrase(h);return e.isYearOnlyDate(y)?`,${L}`:L}function B(y){let i=a(y);return i?n.locationPhrase(i):""}function p(y,i,h,L){let A=i.trim(),N=L.trim();return A&&A===N?{birth:"",death:c(h,N)}:{birth:c(y,A),death:c(h,N)}}function k(y,i){let h=a(y),L=a(i);if(!h&&!L)return"";if(h&&L&&h===L)return n.lifeRangeSame(h);if(h&&L)return n.lifeRangeFromTo(h,L);let A=h||L;return n.lifeRangeSingle(A)}function R(y,i){let h=e.onDate(y),L=i.trim();return h===e.onDate("")&&!L?null:L?h===e.onDate("")?B(L).trim()||null:`${h}${c(y,L)}`:h}function b(y){let i=y?.trim();return!i||i===e.onDate("")?"":` ${i}`}return{parsePlaceLabel:o,placeCore:a,afterDateLocation:c,atLocation:B,birthDeathLocationPhrases:p,lifeRangeLocation:k,marriageWhenWhere:R,embedMarriageWhenWhere:b}}var be,J=D(()=>{be=new Set(["france","germany","deutschland","spain","espana","italy","italia","belgium","switzerland","united kingdom","uk","england","scotland","ireland","portugal","netherlands","holland","luxembourg","austria","poland","russia","canada","united states","usa","morocco","algeria","tunisia","allemagne","espagne","italie","belgique","suisse","royaume-uni","angleterre","\xE9cosse","irlande","pays-bas","pologne","russie","\xE9tats-unis","maroc","alg\xE9rie","tunisie","nederland","polska","\xF6sterreich","schweiz","\u0645\u0635\u0631","\u05D9\u05E9\u05E8\u05D0\u05DC"].map(e=>e.normalize("NFD").replace(/\p{M}/gu,"").toLowerCase()))});function Z(e,n){let o=e.toLowerCase();return n.some(a=>o.startsWith(a.toLowerCase()))}function I(e,n,o){return Z(e,n)?` ${e}`:`${o}${e}`}function H(e,n,o){return Z(e,n)?`, ${e}`:`,${o}${e}`}var ee=D(()=>{});function Re(e){return e!=null&&Ee.includes(e)}function P(e){return Re(e)?e:"en"}var Ee,T=D(()=>{Ee=["en","fr","de","nl","es","zh","it","pt","pl","ar","he"]});function Ae(){let e=globalThis;return e[v]??(e[v]=new Map),e[v]}function M(e){let n=Ae().get(e);if(!n)throw new Y(e);return n}var v,Y,x=D(()=>{T();v="__GEDCOM_TS_BOOKLET_LOCALE_CACHE__";Y=class extends Error{constructor(n){super(`Booklet locale "${n}" is not loaded. Call await ensureBookletLocale("${n}") before using sync booklet APIs.`),this.name="BookletLocaleNotLoadedError"}}});function Pe(e){return M(e).genderWords}function S(e,n){return Pe(P(n))[e]}function ne(e,n){let o=P(n);if(o==="en")return"";if(o==="fr")return e>1?"s":"";let a=M(o).genderPhrases;return a&&!a.usesPluralS?"":e>1?"s":""}function te(e,n){if(e<=0)return"";let o=P(n),a=M(o).genderPhrases?.recensedChildren(e);return a||(o==="en"?e===1?"1 child listed":`${e} children listed`:e===1?"1 enfant recens\xE9":`${e} enfants recens\xE9s`)}function oe(e,n){if(e<=0)return"";let o=P(n),a=M(o).genderPhrases?.otherUnions(e);return a||(o==="en"?e===1?"1 other union cited in the tree":`${e} other unions cited in the tree`:e===1?"1 autre union cit\xE9e dans l'arbre":`${e} autres unions cit\xE9es dans l'arbre`)}var re=D(()=>{T();x()});function ae(e){let n=P(e);return M(n).messages}var le=D(()=>{T();x();x()});function F(e,n=6,o){let a=ae(o);if(e.length===0)return a.childrenNone;let c=e.map(B=>B.name);return c.length<=n?c.join(", "):`${c.slice(0,n).join(", ")} ${a.childrenMore(c.length-n)}`}var se=D(()=>{T();le()});function ie(e){return e.map(n=>n.trim()).filter(Boolean).map(n=>n.endsWith(".")?n:`${n}.`).join(" ")}function C(e){let n=e.map(a=>a.trim()).filter(Boolean);return n.length===0?"":`${n.map(a=>a.endsWith(".")?a.slice(0,-1):a).join(" ; ")}.`}function U(e){return e.trim().split(/\s+/)[0]??e}function g(e,n){return e[Math.abs(n)%e.length]}function z(e,n){switch(e.length){case 0:return"";case 1:return e[0];case 2:return`${e[0]} ${n} ${e[1]}`;default:return`${e.slice(0,-1).join(", ")} ${n} ${e.at(-1)}`}}function Ne(e){let n=e.key.match(/^gen-(\d+)$/);return n?{genNum:Number(n[1]),letter:null}:{genNum:0,letter:e.key.match(/^letter-(.+)$/)?.[1]??null}}function Oe(e){return e.includes("\u2014")?e.split("\u2014").pop()?.trim()??"":""}function ce(e,n,o){let a=o.dateModule,c=o.placeModule,B=o.unknownDates;function p(t){return t!==B&&t!=="Dates inconnues"}function k(t,s){if(t.parents.length===0)return null;let r=S(t.sex,e),l=t.parents.map(d=>d.name);return l.length===1?g(n.parentsSingle(l[0],r),s+3):g(n.parentsMultiple(z(l,n.listConjunction),r),s+3)}function R(t,s){if(s.marriageLabel)return s.marriageLabel;let r=t.events.find(l=>l.kind===String("MARR"));return r?c.marriageWhenWhere(r.date,r.place):null}function b(t,s,r){let l=S(t.sex,e),d=s.coParent.name,u=[],m=c.embedMarriageWhenWhere(R(t,s));if(m?u.push(g(n.unionWithMarriage(d,m),r+7)):u.push(g(n.unionWithoutMarriage(d,l),r+7)),s.children.length>0){let f=s.children.map($=>U($.name));f.length===1?u.push(g(n.unionOneChild(f[0],l),r+11)):u.push(g(n.unionManyChildren(z(f,n.listConjunction),l),r+11))}return C(u)}function y(t,s){let r=t.events.find(m=>m.kind===String("BIRT")),l=t.events.find(m=>m.kind===String("DEAT")),d=t.name,u=S(t.sex,e);if(r&&l){let m=a.onDate(r.date),f=a.onDate(l.date),$=c.birthDeathLocationPhrases(r.date,r.place,l.date,l.place),E=c.lifeRangeLocation(r.place,l.place),O=$.birth||c.afterDateLocation(r.date,r.place);return g(n.lifeBornAndDied(d,u,m,$.birth,f,$.death,a.lifeDateRange(r.date,l.date),E,a.seesDayOn(r.date),O),s)}if(r){let m=a.onDate(r.date),f=c.afterDateLocation(r.date,r.place);return g(n.lifeBirthOnly(d,u,m,f,a.seesDayOn(r.date)),s)}if(l){let m=a.onDate(l.date),f=c.afterDateLocation(l.date,l.place);return g(n.lifeDeathOnly(d,u,m,f),s+1)}return p(t.datesLabel)?g(n.lifeApproxDates(d,u,t.datesLabel),s+2):null}function i(t,s,r){let l=a.onDate(t.date),d=c.afterDateLocation(t.date,t.place),u=S(r,e);switch(t.kind){case"MARR":return g(n.eventMarriage(l,d),s);case"DIV":return n.eventDivorce(l,d);case"BAPM":case"CHR":return g(n.eventBaptism(l,d,u),s);case"BURI":return g(n.eventBurial(l,d),s);case"CREM":return n.eventCremation(l,d);case"OCCU":return n.eventOccupation(t.date,c.atLocation(t.place));default:return`${t.label.toLowerCase()} ${l}${d}`}}let h=new Set([String("BIRT"),String("DEAT"),String("MARR")]);function L(t,s){let r=[],l=0;for(let d of t.events){if(h.has(d.kind))continue;let u=i(d,s+l,t.sex);u&&r.push(u),l+=1}return r}function A(t){let s=t.entries.length,r=Oe(t.subtitle),{genNum:l,letter:d}=Ne(t),u=ne(s,e);if(l>0){let f=l===1?n.chapterGen1(s,u):n.chapterGenN(l,s,u,r);return g(f,l)}let m=d??t.title;return g(n.chapterLetter(t.title,s,u,m,r),s)}function N(t,s){let r=t.familyId,l=t.partners[0]?.name??n.defaultAncestor,d=t.partners[1]?.name,u=t.children,m;if(d){let f=g(n.familyCouple(U(l),U(d),l,d),r),$=c.embedMarriageWhenWhere(t.marriageLabel),E=g($?n.familyUnionWithMarriage($):n.familyUnionWithoutMarriage,r+1);if(u.length===0)m=C([`${f} ${E}`,n.familyNoDescendants]);else if(u.length===1)m=C([`${f} ${E}`,g(n.familyOneChild(u[0].name),r+2)]);else if(s==="summary")m=C([`${f} ${E}`,n.familyNChildren(u.length,F(u,5,e))]);else{let O=u.map(W=>{let he=p(W.datesLabel)?` (${W.datesLabel})`:"";return`${W.name}${he}`});m=C([`${f} ${E}`,n.familyDescendantsList(z(O,n.listConjunction))])}}else m=ie([g(n.familyLoneFigure(U(l),l),r),t.marriageLabel?g(n.familyMarriageNoted(c.embedMarriageWhenWhere(t.marriageLabel)),r+1):"",u.length>0?g([...n.familyDescendantsNoted(F(u,5,e)),n.familyDescendantsRecensed(te(u.length,e),F(u,5,e))],r+2):""]);return[m]}function me(t){let s=t.indi,r=[],l=y(t,s);if(l)r.push(l);else{let m=S(t.sex,e);r.push(g(n.personBranchPresent(t.name,m),s))}let d=k(t,s);d&&r.push(d),t.unions[0]&&(r.push(b(t,t.unions[0],s)),t.unions.length>1&&r.push(oe(t.unions.length-1,e)));let u=L(t,s);return u.length>0&&r.push(C(u.slice(0,2))),t.sosa!=null&&r.length>0&&r.push(`SOSA ${t.sosa}`),r.length<=1&&t.events.length===0&&t.unions.length===0?ie([n.personFewRecords(t.name),n.personResearchHint]):C(r)}function ge(t){let s=t.indi,r=[],l=[],d=y(t,s);d&&l.push(d);let u=k(t,s);u&&l.push(u);let m=L(t,s);if(m.length>0&&l.push(C(m)),l.length>0?r.push(C(l)):r.push(n.personPortraitIncomplete(t.name)),t.unions.length>0){let f=t.unions.map(($,E)=>b(t,$,s+20+E));r.push(g(n.personUnionSection(C(f)),s+5))}else{let f=t.events.filter($=>$.kind===String("MARR"));if(f.length>0){let $=f.map((E,O)=>i(E,s+30+O,t.sex));r.push(C($))}}return t.notesPreview&&r.push(g(n.personResearchNote(t.notesPreview),s+9)),r}return{buildChapterIntroNarrative:A,buildFamilyNarrative:N,buildPersonSummaryNarrative:me,buildPersonDetailedNarratives:ge}}var ue=D(()=>{_();re();se()});var we={};Be(we,{default:()=>We});module.exports=ke(we);var Te,de,ve,xe,G,K,pe,Fe,Ue,Ge,We,_e=D(()=>{_();q();J();ee();ue();Te={BIRT:"Nacimiento",DEAT:"Fallecimiento",MARR:"Matrimonio",DIV:"Divorcio",BAPM:"Bautismo (BAPM)",CHR:"Bautismo",BURI:"Entierro",CREM:"Cremaci\xF3n",EVEN:"Evento",OCCU:"Ocupaci\xF3n"},de={unknownDates:"Fechas desconocidas",unknownDate:"Fecha desconocida",chapterUnknownDates:"Fechas desconocidas",generation1Title:"Generaci\xF3n 1 \u2014 persona de referencia",generationTitle:e=>`Generaci\xF3n ${e}`,letterTitle:e=>`Letra ${e}`,chapterSubtitle:(e,n)=>`${e} persona(s) \u2014 ${n}`,chapterDateAbout:"hacia",childrenNone:"ning\xFAn hijo registrado",childrenMore:e=>`(+ ${e} m\xE1s)`,pagesEstimate:e=>`~${e} p\xE1ginas`,pagesEmpty:"\u2014",adviceDetailed120:"Con m\xE1s de 120 personas, el modo Resumen produce un documento mucho m\xE1s legible y se genera m\xE1s r\xE1pido.",adviceDetailed50:"M\xE1s all\xE1 de 50 personas, el modo Resumen sigue siendo recomendable para una primera lectura.",adviceSummary25:"Pocas personas: el modo Detallado ofrece una bonita ficha por p\xE1gina, ideal para imprimir.",actTypeLabels:Te,spouseUnknown:"C\xF3nyuge no registrado",timelineTitle:e=>`L\xEDnea de tiempo cronol\xF3gica \u2014 ${e}`,timelineUnknownDates:"fechas desconocidas",pdf:{coverSubtitle:"Historia familiar desde su archivo GEDCOM",referencePerson:e=>`Persona de referencia (SOSA 1): ${e}`,personCount:e=>`${e} persona(s) en este folleto`,localNote:"Documento generado localmente en su navegador.",tocTitle:"\xCDndice",modeSummary:"Modo resumen - relatos breves",modeDetailed:"Modo detallado - biograf\xEDas ampliadas",contentHeading:"Contenido del folleto",introSummary:"Este folleto cuenta su \xE1rbol en prosa: nacimientos, uniones, descendencia y fallecimientos reconstruidos a partir del GEDCOM. Cada cap\xEDtulo abre con una generaci\xF3n o una letra, y despliega vidas en relatos breves.",introDetailed:"Este folleto desarrolla cada figura como biograf\xEDa narrativa, en secuencia dentro de cada cap\xEDtulo. Cada nueva generaci\xF3n comienza en una p\xE1gina dedicada.",introSosa:"Los n\xFAmeros SOSA se mencionan cuando la numeraci\xF3n est\xE1 activa. \xCDndice al final del documento.",familyHeading:e=>`La familia ${e}`,generationLabel:e=>`generaci\xF3n ${e}`,pageFooter:e=>`P\xE1gina ${e}`},timeline:{legendBirth:"nacimiento",legendDeath:"fallecimiento",legendMarriage:"matrimonio",overflow:e=>`+ ${e} m\xE1s en las p\xE1ginas siguientes`,continuation:"(l\xEDnea de tiempo continuada)"}},ve={F:{born:"nace",died:"fallece",baptized:"bautizada",present:"presente",linked:"unida",offspring:"hija",descendant:"descendiente",childOf:"hija",parentOf:"madre"},M:{born:"nace",died:"fallece",baptized:"bautizado",present:"presente",linked:"unido",offspring:"hijo",descendant:"descendiente",childOf:"hijo",parentOf:"padre"},U:{born:"nace",died:"fallece",baptized:"bautizado/a",present:"presente",linked:"unido/a",offspring:"hijo/a",descendant:"descendiente",childOf:"hijo/a",parentOf:"progenitor"},X:{born:"nace",died:"fallece",baptized:"bautizado/a",present:"presente",linked:"unido/a",offspring:"hijo/a",descendant:"descendiente",childOf:"hijo/a",parentOf:"progenitor"}},xe={usesPluralS:!1,recensedChildren:e=>e===1?"1 hijo/a registrado/a":`${e} hijos registrados`,otherUnions:e=>e===1?"1 otra uni\xF3n citada en el \xE1rbol":`${e} otras uniones citadas en el \xE1rbol`},G=["en "],K=X({unknownDate:"Fecha desconocida",onUnknown:"en fecha desconocida",inYear:e=>`en ${e}`,beforeYear:e=>`antes de ${e}`,afterYear:e=>`despu\xE9s de ${e}`,aboutYear:e=>`hacia ${e}`,onFullDate:e=>`el ${e}`,lifeRange:(e,n,o)=>o?`De ${e} a ${n}`:`Del ${e} al ${n}`,seesDayInYear:e=>`nace en ${e}`,seesDayOnPhrase:e=>`nace ${e}`,seesDayOnFullDate:e=>`nace el ${e}`}),pe=Q(K,{countryPrefixes:G,countryPhrase:e=>`en ${e}`,locationPhrase:e=>I(e,G," en "),lifeRangeSame:e=>H(e,G," en "),lifeRangeFromTo:(e,n)=>`, de ${e} a ${n}`,lifeRangeSingle:e=>H(e,G," en ")}),Fe={listConjunction:"y",defaultAncestor:"Un antepasado",parentsSingle:(e,n)=>[`hijo/a de ${e}`,`${n.childOf} de ${e}`,`${n.descendant} de ${e}`],parentsMultiple:(e,n)=>[`${n.offspring} de ${e}`,`${n.descendant} de ${e}`,`hijo/a de ${e}`],unionWithMarriage:(e,n)=>[`se casa con ${e}${n}`,`se une a ${e}${n}`,`matrimonio con ${e}${n}`],unionWithoutMarriage:(e,n)=>[`${n.linked} a ${e}`,`comparte la vida con ${e}`,`uni\xF3n registrada con ${e}`],unionOneChild:(e,n)=>[`incluido ${e}`,`con hijo/a ${e}`,`${n.parentOf} de ${e}`],unionManyChildren:(e,n)=>[`incluidos los hijos ${e}`,`con descendencia ${e}`,`${n.parentOf} de ${e}`],lifeBornAndDied:(e,n,o,a,c,B,p,k,R,b)=>[`${e}, ${n.born} ${o}${a}, falleci\xF3 ${c}${B}`,`${p}${k}, ${e} marca este linaje`,`${e} ${R}${b} y falleci\xF3 ${c}${B}`],lifeBirthOnly:(e,n,o,a,c)=>[`${e}, ${n.born} ${o}${a}`,`Nacimiento de ${e} ${o}${a}`,`${e} ${c}${a}`],lifeDeathOnly:(e,n,o,a)=>[`${e}, ${n.died} ${o}${a}`,`Fallecimiento de ${e} ${o}${a}`,`${e} falleci\xF3 ${o}${a}`],lifeApproxDates:(e,n,o)=>[`${e}, ${n.present} en los registros hacia ${o}`,`Se sit\xFAa a ${e} alrededor de ${o}`,`${e} (${o})`],eventMarriage:(e,n)=>[`matrimonio celebrado ${e}${n}`,`uni\xF3n registrada ${e}${n}`,`bodas celebradas ${e}${n}`,`se une${e}${n}`],eventDivorce:(e,n)=>`divorcio registrado ${e}${n}`,eventBaptism:(e,n,o)=>[`bautismo ${e}${n}`,`${o.baptized} ${e}${n}`,`rito bautismal ${e}${n}`],eventBurial:(e,n)=>[`entierro ${e}${n}`,`funeral ${e}${n}`,`sepultura ${e}${n}`],eventCremation:(e,n)=>`cremaci\xF3n registrada ${e}${n}`,eventOccupation:(e,n)=>`ocupaci\xF3n anotada (${e})${n}`,chapterGen1:(e,n)=>[`Punto de partida del relato: ${e} figura${n} en la ra\xEDz del \xE1rbol.`,`Aqu\xED comienza el linaje, con ${e} persona${n} de referencia.`],chapterGenN:(e,n,o,a)=>[`En la generaci\xF3n ${e}, ${n} antepasado${o} entran en escena.`,`Esta generaci\xF3n incluye ${n} persona${o}${a?` (${a})`:""}.`,`${n} vida${o} se cruzan en esta generaci\xF3n${a?`, entre ${a}`:""}.`],chapterLetter:(e,n,o,a,c)=>[`${e}: ${n} retrato${o} por descubrir.`,`${n} persona${o} para la letra ${a}${c?` (${c})`:""}.`],familyCouple:(e,n,o,a)=>[`${e} y ${n}`,`La pareja ${e} \u2013 ${n}`,`${o} y ${a}`],familyUnionWithMarriage:e=>[`se unen${e}`,`se casan${e}`,`celebran su uni\xF3n${e}`],familyUnionWithoutMarriage:["forman una uni\xF3n","est\xE1n unidos en los registros","aparecen como c\xF3nyuges"],familyNoDescendants:"sin descendencia registrada en el archivo",familyOneChild:e=>[`con hijo/a ${e}`,`dan a luz a ${e}`,`tienen un hijo/a, ${e}`],familyNChildren:(e,n)=>`${e} hijos: ${n}`,familyDescendantsList:e=>`descendencia: ${e}`,familyLoneFigure:(e,n)=>[`${e} ocupa un lugar central en este linaje`,`${n}, figura emblem\xE1tica de este cap\xEDtulo`],familyMarriageNoted:e=>[`matrimonio registrado${e}`,`uni\xF3n anotada${e}`],familyDescendantsNoted:e=>[`descendencia: ${e}`],familyDescendantsRecensed:(e,n)=>`${e}: ${n}`,personBranchPresent:(e,n)=>[`${e}, ${n.present} en esta rama`,`${e} figura en este cap\xEDtulo`],personFewRecords:e=>`${e}: pocos actos por ahora`,personResearchHint:"investigaciones futuras pueden completar este retrato",personPortraitIncomplete:e=>`${e} \u2014 retrato a\xFAn por completar en los archivos.`,personUnionSection:e=>[e,`Lado familiar: ${e}`,`En el lado conyugal: ${e}`],personResearchNote:e=>[`Nota de investigaci\xF3n: ${e}`,`Los archivos indican: ${e}`,`Cabe recordar: ${e}`]},Ue=ce("es",Fe,{dateModule:K,placeModule:pe,unknownDates:de.unknownDates}),Ge={messages:de,genderWords:ve,genderPhrases:xe,dateModule:K,placeModule:pe,narrativeModule:Ue},We=Ge});_e();