@atomic-ehr/codegen 0.0.2-canary.20251119131907.723c8fd → 0.0.2-canary.20251119132946.28bff93

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/index.js CHANGED
@@ -18,7 +18,7 @@ import Ii from'yargs';import {hideBin}from'yargs/helpers';import'perf_hooks';imp
18
18
  `):(this.writeIndent(),this.write(`${e.join(" ")}
19
19
  `));}lineSM(...e){this.writeIndent(),this.write(`${e.join(" ")};
20
20
  `);}comment(...e){let t=e.join(" ").split(`
21
- `);for(let r of t)this.line(this.opts.commentLinePrefix,r);}debugComment(...e){this.opts.withDebugComment&&(e=e.map(t=>typeof t=="string"?t:JSON.stringify(t,null,2)),this.comment(...e));}disclaimer(){return ["WARNING: This file is autogenerated by @atomic-ehr/codegen.","GitHub: https://github.com/orgs/atomic-ehr/repositories","Any manual changes made to this file may be overwritten."]}generateDisclaimer(){this.disclaimer().forEach(e=>{this.comment(e);}),this.line();}indentBlock(e){this.indent(),e(),this.deindent();}curlyBlock(e,t,r){this.line(`${e.filter(Boolean).join(" ")} {`),this.indent(),t(),this.deindent(),this.line(`}${r?.filter(Boolean).join(" ")??""}`);}squareBlock(e,t,r){this.line(`${e.filter(Boolean).join(" ")} [`),this.indent(),t(),this.deindent(),this.line(`]${r?.filter(Boolean).join(" ")??""}`);}};var Jt={"!":"Not","<=":"LessOrEqual",">=":"GreaterOrEqual","<":"Less",">":"Greater","=":"Equal","-":"Dash","+":"Plus","*":"Asterisk","/":"Slash","%":"Percent","&":"And","|":"Or","^":"Xor","~":"Tilde","?":"Question",".":"Dot"};function Wr(s){return s.split("-").map(e=>E(e)).join("-")}function Jr(s){let e=s;for(let t in Jt)e=e.replaceAll(t,Jt[t]??"");return e}function Kr(s){let e=Number(s[0]);return Number.isInteger(e)&&!Number.isNaN(e)?`_${s}`:s}function Kt(s){let e=Wr(s);return e=Kr(e),e=Jr(e),e=E(e),e}function M(s){return E(qt(s.replaceAll(".","-")))}var Yr={boolean:"bool",instant:"string",time:"string",date:"string",dateTime:"string",decimal:"decimal",integer:"int",unsignedInt:"long",positiveInt:"long",integer64:"long",base64Binary:"string",uri:"string",url:"string",canonical:"string",oid:"string",uuid:"string",string:"string",code:"string",markdown:"string",id:"string",xhtml:"string"},Zr=["Reference","Expression"],Xr=s=>s.required?["required"]:[],Qr=s=>{let e=Qt(Xt(s.identifier));return E(e)},ei=s=>s.base?`: ${s.base.name}`:"",ti=(s,e=true)=>{if(!s)return;let t=s.split("/").pop();if(t&&(e&&t.includes("#")&&(t=t.split("#")[0]),!!t))return /^\d/.test(t)&&(t=`number_${t}`),M(t)},Xt=s=>{if(s.kind==="nested"){let e=s.url,t=ti(e,false);if(!t)return "";let[r,i]=t.split("#"),n=we((i??"").split(".")).join("");return M([r,n].join(""))}return M(s.name)},ri=s=>Zr.includes(s),Qt=s=>ri(s)?`Resource${s}`:s,ke=class extends K{enums={};constructor(e){super({tabSize:4,withDebugComment:false,commentLinePrefix:"//",...e});}async generate(e){let t=e.collectComplexTypes(),r=e.collectResources(),i=Array.from(new Set(r.map(n=>M(n.identifier.package))));this.generateAllFiles(t,r,i),this.copyStaticFiles();}generateAllFiles(e,t,r){this.generateUsingFile(r),this.generateBaseTypes(e),this.generateResources(t),this.generateEnumFiles(r),this.generateResourceDictionaries(t,r),this.generateHelperFile();}generateType(e,t){let r=Qr(e),i=ei(e);this.curlyBlock(["public","class",r,i],()=>{this.generateFields(e,t),this.generateNestedTypes(e,t),this.line(),this.includeHelperMethods();}),this.line();}generateFields(e,t){if(!e.fields)return;let r=Object.entries(e.fields).sort(([i],[n])=>i.localeCompare(n));for(let[i,n]of r)this.generateField(i,n,t);}generateNestedTypes(e,t){if(!(!("nested"in e)||!e.nested)){this.line();for(let r of e.nested)this.generateType(r,t);}}generateField(e,t,r){try{if(W(t))return;let i=this.buildFieldDeclaration(e,t,r);this.line(...i);}catch(i){this.logger()?.error(`Error processing field ${e}: ${i.message}`);}}buildFieldDeclaration(e,t,r){let i=this.determineFieldType(e,t,r),n=Xr(t),o=U(e);return ["public",...n,i,o,"{ get; set; }"].filter(Boolean)}determineFieldType(e,t,r){let i=this.getBaseTypeName(t);"enum"in t&&t.enum&&(i=this.registerAndGetEnumType(e,t,r)),i=Qt(i);let n="",o=t.required?"":"?",a=t.array?"[]":"";return `${n}${i}${a}${o}`}getBaseTypeName(e){if("type"in e){let t=e.type.name.toString();return e.type.kind==="nested"?t=Xt(e.type):e.type.kind==="primitive-type"&&(t=Yr[e.type.name]??"string"),t}return ""}registerAndGetEnumType(e,t,r){let n=`${M(t.binding?.name??e)}Enum`;return this.enums[r]||(this.enums[r]={}),t.enum&&(this.enums[r][n]=t.enum),n}includeHelperMethods(){this.line("public override string ToString() => "),this.line(" JsonSerializer.Serialize(this, Helper.JsonSerializerOptions);"),this.line();}generateUsingFile(e){this.cd("/",async()=>{this.cat("Usings.cs",()=>{this.generateDisclaimer(),this.generateGlobalUsings(e);});});}generateGlobalUsings(e){let t=["CSharpSDK","System.Text.Json","System.Text.Json.Serialization",this.opts.targetNamespace,...e.map(r=>`${this.opts.targetNamespace}.${r}`)];for(let r of t)this.lineSM("global","using",r);}generateBaseTypes(e){this.cd("/",async()=>{this.cat("base.cs",()=>{this.generateDisclaimer(),this.line(),this.lineSM("namespace",this.opts.targetNamespace);for(let t of e){let r=M(t.identifier.package);this.generateType(t,r);}});});}generateResources(e){for(let t of e)this.generateResourceFile(t);}generateResourceFile(e){let t=M(e.identifier.package);this.cd(`/${t}`,async()=>{this.cat(`${e.identifier.name}.cs`,()=>{this.generateDisclaimer(),this.line(),this.lineSM("namespace",`${this.opts.targetNamespace}.${t}`),this.line(),this.generateType(e,t);});});}generateEnumFiles(e){for(let t of e)this.generatePackageEnums(t);}generatePackageEnums(e){let t=this.enums[e];!t||Object.keys(t).length===0||this.cd(`/${e}`,async()=>{this.cat(`${e}Enums.cs`,()=>{this.generateDisclaimer(),this.generateEnumFileContent(e,t);});});}generateEnumFileContent(e,t){this.lineSM("using","System.ComponentModel"),this.line(),this.lineSM(`namespace ${this.opts.targetNamespace}.${e}`);for(let[r,i]of Object.entries(t))this.generateEnum(r,i);}generateEnum(e,t){this.curlyBlock(["public","enum",e],()=>{for(let r of t)this.line(`[Description("${r}")]`),this.line(`${Kt(r)},`);}),this.line();}generateResourceDictionaries(e,t){this.cd("/",async()=>{for(let r of t){let i=e.filter(n=>M(n.identifier.package)===r);if(i.length===0)return;this.cat(`${r}ResourceDictionary.cs`,()=>{this.generateDisclaimer(),this.line(),this.lineSM(`namespace ${this.opts.targetNamespace}`),this.generateResourceDictionaryClass(r,i);});}});}generateResourceDictionaryClass(e,t){this.curlyBlock(["public","static","class","ResourceDictionary"],()=>{this.curlyBlock(["public static readonly Dictionary<Type, string> Map = new()"],()=>{for(let r of t){let i=r.identifier.name;this.line(`{ typeof(${e}.${i}), "${i}" },`);}}),this.lineSM();});}copyStaticFiles(){if(!this.opts.staticSourceDir)return;let e=R__default.resolve(this.opts.staticSourceDir);F__default.cpSync(e,this.opts.outputDir,{recursive:true});}generateHelperFile(){let e="src/api/writer-generator/csharp/Helper.cs",t=R__default.join(this.opts.outputDir,"Helper.cs");F__default.copyFileSync(e,t);}};var ct=s=>{let e={};for(let t of s){let r=t.identifier.package;e[r]||(e[r]=[]),e[r].push(t);}for(let[t,r]of Object.entries(e)){let i={};for(let o of r)i[JSON.stringify(o.identifier)]=o;let n=Object.values(i);n.sort((o,a)=>o.identifier.name.localeCompare(a.identifier.name)),e[t]=n;}return e},ii=(s,e,t)=>{if(s=structuredClone(s),Ct(s)||Ft(s)||X(s))return s;for(let r of e.ignoreFields??[]){if(s.fields&&!s.fields[r])throw new Error(`Field ${r} not found`);s.fields&&delete s.fields[r];}return s.dependencies=rt(s.identifier,s.base,s.fields,s.nested),s},rr=(s,e,t)=>{let r=[];for(let[o,a]of Object.entries(e))for(let[c,l]of Object.entries(a)){let p=s.resolveByUrl(o,c);if(!p)throw new Error(`Schema not found for ${o} ${c}`);let d=ii(p,l);r.push(d);}let i=(o,a)=>{if(o.length===0)return Object.values(a);for(let l of o)a[JSON.stringify(l.identifier)]=l;let c=[];for(let l of o)if(q(l)){if(!l.dependencies)continue;if(l.dependencies.forEach(p=>{let d=s.resolve(p);if(!d)throw new Error(`Schema not found for ${p}`);let m=JSON.stringify(d.identifier);a[m]||c.push(d);}),l.nested)for(let p of l.nested){if(N(p.identifier))continue;let d=JSON.stringify(p.identifier);a[d]||c.push(p);}}return i(c,a)},n=i(r,{});return lt(n,t)},ni=s=>{let e=s.filter(n=>P(n)||O(n)),t=[];for(let n of e)n.base&&t.push({parent:n.base,child:n.identifier});let r=[...t],i=n=>{let o=t.filter(c=>c.parent.name===n.name).map(c=>c.child),a=[];for(let c of o)a.push(...i(c));return [...o,...a]};for(let n of t){let o=i(n.child);for(let a of o)t.some(c=>c.parent.name===n.parent.name&&c.child.name===a.name)||r.push({parent:n.parent,child:a});}return r},lt=(s,e)=>{let t={},r=u=>{let f=u.identifier.url,y=u.identifier.package;if(t[f]||(t[f]={}),t[f][u.identifier.package]&&y!=="shared"){let T=JSON.stringify(u.identifier,void 0,2),v=JSON.stringify(t[f][y]?.identifier,void 0,2);if(T!==v)throw new Error(`Duplicate schema: ${T} and ${v}`);return}t[f][y]=u;};for(let u of s)r(u);let i=ni(s),n=u=>t[u.url]?.[u.package],o=(u,f)=>t[f]?.[u],a=u=>i.filter(f=>f.parent.name===u.name).map(f=>f.child),c=u=>{let f=[],y=u;for(;y;){f.push(y);let T=y.base;if(T===void 0)break;let v=n(T);if(!v){e?.warn(`Failed to resolve base type: ${f.map(w=>`${w.identifier.url} (${w.identifier.kind})`).join(", ")}`);return}y=v;}return f},l=u=>{let f=c(u);if(f===void 0)throw new Error(`Failed to resolve base type: ${u.identifier.url} (${u.identifier.kind})`);return f},p=u=>{let f=l(u).find(y=>y.identifier.kind!=="profile");if(!f)throw new Error(`No non-constraint schema found in hierarchy for: ${u.identifier.name}`);return f};return {_schemaIndex:t,_relations:i,collectComplexTypes:()=>s.filter(kt),collectResources:()=>s.filter(P),collectLogicalModels:()=>s.filter(O),collectProfiles:()=>s.filter(fe),resolve:n,resolveByUrl:o,resourceChildren:a,tryHierarchy:c,hierarchy:l,findLastSpecialization:p,findLastSpecializationByIdentifier:u=>{let f=n(u);return f?p(f).identifier:u},flatProfile:u=>{let f=l(u),y=f.filter(k=>k.identifier.kind==="profile"),T=f.find(k=>k.identifier.kind!=="profile");if(!T)throw new Error(`No non-constraint schema found in hierarchy for ${u.identifier.name}`);let v={};for(let k of y.slice().reverse()){let ce=k;if(ce.fields)for(let[le,Tt]of Object.entries(ce.fields))v[le]?v[le]={...v[le],...Tt}:v[le]={...Tt};}let w={};for(let k of y.flatMap(ce=>ce.dependencies??[]))w[k.url]=k;let Z=Object.values(w);return {...u,base:T.identifier,fields:v,dependencies:Z}},isWithMetaField:u=>{let f=c(u);return f?f.filter(q).some(y=>y.fields?.meta!==void 0):false},exportTree:async u=>{let f={};for(let[T,v]of Object.entries(ct(s))){f[T]={"primitive-type":{},"complex-type":{},resource:{},"value-set":{},nested:{},binding:{},profile:{},logical:{}};for(let w of v){w.identifier;f[T][w.identifier.kind][w.identifier.url]={};}}let y=u.endsWith(".yaml")?tr.stringify(f):JSON.stringify(f,void 0,2);await A.mkdir(R.dirname(u),{recursive:true}),await A.writeFile(u,y);}}};se();var Ie=class{constructor(e){this.options=e;}handleError(e,t){e instanceof $?this.handleGeneratorError(e,t):this.handleUnknownError(e,t);}handleBatchErrors(e){let t=e.filter(i=>i instanceof $),r=e.filter(i=>!(i instanceof $));t.length>0&&this.reportBatchErrors(t),r.forEach(i=>{this.handleUnknownError(i);});}handleGeneratorError(e,t){switch(this.options.outputFormat){case "json":this.reportErrorAsJson(e);break;case "structured":this.reportErrorStructured(e);break;default:this.reportErrorToConsole(e);}}handleUnknownError(e,t){this.options.logger.error("Unexpected error occurred:",e),this.options.verbose&&(this.options.logger.error(`
21
+ `);for(let r of t)this.line(this.opts.commentLinePrefix,r);}debugComment(...e){this.opts.withDebugComment&&(e=e.map(t=>typeof t=="string"?t:JSON.stringify(t,null,2)),this.comment(...e));}disclaimer(){return ["WARNING: This file is autogenerated by @atomic-ehr/codegen.","GitHub: https://github.com/atomic-ehr/codegen","Any manual changes made to this file may be overwritten."]}generateDisclaimer(){this.disclaimer().forEach(e=>{this.comment(e);}),this.line();}indentBlock(e){this.indent(),e(),this.deindent();}curlyBlock(e,t,r){this.line(`${e.filter(Boolean).join(" ")} {`),this.indent(),t(),this.deindent(),this.line(`}${r?.filter(Boolean).join(" ")??""}`);}squareBlock(e,t,r){this.line(`${e.filter(Boolean).join(" ")} [`),this.indent(),t(),this.deindent(),this.line(`]${r?.filter(Boolean).join(" ")??""}`);}};var Jt={"!":"Not","<=":"LessOrEqual",">=":"GreaterOrEqual","<":"Less",">":"Greater","=":"Equal","-":"Dash","+":"Plus","*":"Asterisk","/":"Slash","%":"Percent","&":"And","|":"Or","^":"Xor","~":"Tilde","?":"Question",".":"Dot"};function Wr(s){return s.split("-").map(e=>E(e)).join("-")}function Jr(s){let e=s;for(let t in Jt)e=e.replaceAll(t,Jt[t]??"");return e}function Kr(s){let e=Number(s[0]);return Number.isInteger(e)&&!Number.isNaN(e)?`_${s}`:s}function Kt(s){let e=Wr(s);return e=Kr(e),e=Jr(e),e=E(e),e}function M(s){return E(qt(s.replaceAll(".","-")))}var Yr={boolean:"bool",instant:"string",time:"string",date:"string",dateTime:"string",decimal:"decimal",integer:"int",unsignedInt:"long",positiveInt:"long",integer64:"long",base64Binary:"string",uri:"string",url:"string",canonical:"string",oid:"string",uuid:"string",string:"string",code:"string",markdown:"string",id:"string",xhtml:"string"},Zr=["Reference","Expression"],Xr=s=>s.required?["required"]:[],Qr=s=>{let e=Qt(Xt(s.identifier));return E(e)},ei=s=>s.base?`: ${s.base.name}`:"",ti=(s,e=true)=>{if(!s)return;let t=s.split("/").pop();if(t&&(e&&t.includes("#")&&(t=t.split("#")[0]),!!t))return /^\d/.test(t)&&(t=`number_${t}`),M(t)},Xt=s=>{if(s.kind==="nested"){let e=s.url,t=ti(e,false);if(!t)return "";let[r,i]=t.split("#"),n=we((i??"").split(".")).join("");return M([r,n].join(""))}return M(s.name)},ri=s=>Zr.includes(s),Qt=s=>ri(s)?`Resource${s}`:s,ke=class extends K{enums={};constructor(e){super({tabSize:4,withDebugComment:false,commentLinePrefix:"//",...e});}async generate(e){let t=e.collectComplexTypes(),r=e.collectResources(),i=Array.from(new Set(r.map(n=>M(n.identifier.package))));this.generateAllFiles(t,r,i),this.copyStaticFiles();}generateAllFiles(e,t,r){this.generateUsingFile(r),this.generateBaseTypes(e),this.generateResources(t),this.generateEnumFiles(r),this.generateResourceDictionaries(t,r),this.generateHelperFile();}generateType(e,t){let r=Qr(e),i=ei(e);this.curlyBlock(["public","class",r,i],()=>{this.generateFields(e,t),this.generateNestedTypes(e,t),this.line(),this.includeHelperMethods();}),this.line();}generateFields(e,t){if(!e.fields)return;let r=Object.entries(e.fields).sort(([i],[n])=>i.localeCompare(n));for(let[i,n]of r)this.generateField(i,n,t);}generateNestedTypes(e,t){if(!(!("nested"in e)||!e.nested)){this.line();for(let r of e.nested)this.generateType(r,t);}}generateField(e,t,r){try{if(W(t))return;let i=this.buildFieldDeclaration(e,t,r);this.line(...i);}catch(i){this.logger()?.error(`Error processing field ${e}: ${i.message}`);}}buildFieldDeclaration(e,t,r){let i=this.determineFieldType(e,t,r),n=Xr(t),o=U(e);return ["public",...n,i,o,"{ get; set; }"].filter(Boolean)}determineFieldType(e,t,r){let i=this.getBaseTypeName(t);"enum"in t&&t.enum&&(i=this.registerAndGetEnumType(e,t,r)),i=Qt(i);let n="",o=t.required?"":"?",a=t.array?"[]":"";return `${n}${i}${a}${o}`}getBaseTypeName(e){if("type"in e){let t=e.type.name.toString();return e.type.kind==="nested"?t=Xt(e.type):e.type.kind==="primitive-type"&&(t=Yr[e.type.name]??"string"),t}return ""}registerAndGetEnumType(e,t,r){let n=`${M(t.binding?.name??e)}Enum`;return this.enums[r]||(this.enums[r]={}),t.enum&&(this.enums[r][n]=t.enum),n}includeHelperMethods(){this.line("public override string ToString() => "),this.line(" JsonSerializer.Serialize(this, Helper.JsonSerializerOptions);"),this.line();}generateUsingFile(e){this.cd("/",async()=>{this.cat("Usings.cs",()=>{this.generateDisclaimer(),this.generateGlobalUsings(e);});});}generateGlobalUsings(e){let t=["CSharpSDK","System.Text.Json","System.Text.Json.Serialization",this.opts.targetNamespace,...e.map(r=>`${this.opts.targetNamespace}.${r}`)];for(let r of t)this.lineSM("global","using",r);}generateBaseTypes(e){this.cd("/",async()=>{this.cat("base.cs",()=>{this.generateDisclaimer(),this.line(),this.lineSM("namespace",this.opts.targetNamespace);for(let t of e){let r=M(t.identifier.package);this.generateType(t,r);}});});}generateResources(e){for(let t of e)this.generateResourceFile(t);}generateResourceFile(e){let t=M(e.identifier.package);this.cd(`/${t}`,async()=>{this.cat(`${e.identifier.name}.cs`,()=>{this.generateDisclaimer(),this.line(),this.lineSM("namespace",`${this.opts.targetNamespace}.${t}`),this.line(),this.generateType(e,t);});});}generateEnumFiles(e){for(let t of e)this.generatePackageEnums(t);}generatePackageEnums(e){let t=this.enums[e];!t||Object.keys(t).length===0||this.cd(`/${e}`,async()=>{this.cat(`${e}Enums.cs`,()=>{this.generateDisclaimer(),this.generateEnumFileContent(e,t);});});}generateEnumFileContent(e,t){this.lineSM("using","System.ComponentModel"),this.line(),this.lineSM(`namespace ${this.opts.targetNamespace}.${e}`);for(let[r,i]of Object.entries(t))this.generateEnum(r,i);}generateEnum(e,t){this.curlyBlock(["public","enum",e],()=>{for(let r of t)this.line(`[Description("${r}")]`),this.line(`${Kt(r)},`);}),this.line();}generateResourceDictionaries(e,t){this.cd("/",async()=>{for(let r of t){let i=e.filter(n=>M(n.identifier.package)===r);if(i.length===0)return;this.cat(`${r}ResourceDictionary.cs`,()=>{this.generateDisclaimer(),this.line(),this.lineSM(`namespace ${this.opts.targetNamespace}`),this.generateResourceDictionaryClass(r,i);});}});}generateResourceDictionaryClass(e,t){this.curlyBlock(["public","static","class","ResourceDictionary"],()=>{this.curlyBlock(["public static readonly Dictionary<Type, string> Map = new()"],()=>{for(let r of t){let i=r.identifier.name;this.line(`{ typeof(${e}.${i}), "${i}" },`);}}),this.lineSM();});}copyStaticFiles(){if(!this.opts.staticSourceDir)return;let e=R__default.resolve(this.opts.staticSourceDir);F__default.cpSync(e,this.opts.outputDir,{recursive:true});}generateHelperFile(){let e="src/api/writer-generator/csharp/Helper.cs",t=R__default.join(this.opts.outputDir,"Helper.cs");F__default.copyFileSync(e,t);}};var ct=s=>{let e={};for(let t of s){let r=t.identifier.package;e[r]||(e[r]=[]),e[r].push(t);}for(let[t,r]of Object.entries(e)){let i={};for(let o of r)i[JSON.stringify(o.identifier)]=o;let n=Object.values(i);n.sort((o,a)=>o.identifier.name.localeCompare(a.identifier.name)),e[t]=n;}return e},ii=(s,e,t)=>{if(s=structuredClone(s),Ct(s)||Ft(s)||X(s))return s;for(let r of e.ignoreFields??[]){if(s.fields&&!s.fields[r])throw new Error(`Field ${r} not found`);s.fields&&delete s.fields[r];}return s.dependencies=rt(s.identifier,s.base,s.fields,s.nested),s},rr=(s,e,t)=>{let r=[];for(let[o,a]of Object.entries(e))for(let[c,l]of Object.entries(a)){let p=s.resolveByUrl(o,c);if(!p)throw new Error(`Schema not found for ${o} ${c}`);let d=ii(p,l);r.push(d);}let i=(o,a)=>{if(o.length===0)return Object.values(a);for(let l of o)a[JSON.stringify(l.identifier)]=l;let c=[];for(let l of o)if(q(l)){if(!l.dependencies)continue;if(l.dependencies.forEach(p=>{let d=s.resolve(p);if(!d)throw new Error(`Schema not found for ${p}`);let m=JSON.stringify(d.identifier);a[m]||c.push(d);}),l.nested)for(let p of l.nested){if(N(p.identifier))continue;let d=JSON.stringify(p.identifier);a[d]||c.push(p);}}return i(c,a)},n=i(r,{});return lt(n,t)},ni=s=>{let e=s.filter(n=>P(n)||O(n)),t=[];for(let n of e)n.base&&t.push({parent:n.base,child:n.identifier});let r=[...t],i=n=>{let o=t.filter(c=>c.parent.name===n.name).map(c=>c.child),a=[];for(let c of o)a.push(...i(c));return [...o,...a]};for(let n of t){let o=i(n.child);for(let a of o)t.some(c=>c.parent.name===n.parent.name&&c.child.name===a.name)||r.push({parent:n.parent,child:a});}return r},lt=(s,e)=>{let t={},r=u=>{let f=u.identifier.url,y=u.identifier.package;if(t[f]||(t[f]={}),t[f][u.identifier.package]&&y!=="shared"){let T=JSON.stringify(u.identifier,void 0,2),v=JSON.stringify(t[f][y]?.identifier,void 0,2);if(T!==v)throw new Error(`Duplicate schema: ${T} and ${v}`);return}t[f][y]=u;};for(let u of s)r(u);let i=ni(s),n=u=>t[u.url]?.[u.package],o=(u,f)=>t[f]?.[u],a=u=>i.filter(f=>f.parent.name===u.name).map(f=>f.child),c=u=>{let f=[],y=u;for(;y;){f.push(y);let T=y.base;if(T===void 0)break;let v=n(T);if(!v){e?.warn(`Failed to resolve base type: ${f.map(w=>`${w.identifier.url} (${w.identifier.kind})`).join(", ")}`);return}y=v;}return f},l=u=>{let f=c(u);if(f===void 0)throw new Error(`Failed to resolve base type: ${u.identifier.url} (${u.identifier.kind})`);return f},p=u=>{let f=l(u).find(y=>y.identifier.kind!=="profile");if(!f)throw new Error(`No non-constraint schema found in hierarchy for: ${u.identifier.name}`);return f};return {_schemaIndex:t,_relations:i,collectComplexTypes:()=>s.filter(kt),collectResources:()=>s.filter(P),collectLogicalModels:()=>s.filter(O),collectProfiles:()=>s.filter(fe),resolve:n,resolveByUrl:o,resourceChildren:a,tryHierarchy:c,hierarchy:l,findLastSpecialization:p,findLastSpecializationByIdentifier:u=>{let f=n(u);return f?p(f).identifier:u},flatProfile:u=>{let f=l(u),y=f.filter(k=>k.identifier.kind==="profile"),T=f.find(k=>k.identifier.kind!=="profile");if(!T)throw new Error(`No non-constraint schema found in hierarchy for ${u.identifier.name}`);let v={};for(let k of y.slice().reverse()){let ce=k;if(ce.fields)for(let[le,Tt]of Object.entries(ce.fields))v[le]?v[le]={...v[le],...Tt}:v[le]={...Tt};}let w={};for(let k of y.flatMap(ce=>ce.dependencies??[]))w[k.url]=k;let Z=Object.values(w);return {...u,base:T.identifier,fields:v,dependencies:Z}},isWithMetaField:u=>{let f=c(u);return f?f.filter(q).some(y=>y.fields?.meta!==void 0):false},exportTree:async u=>{let f={};for(let[T,v]of Object.entries(ct(s))){f[T]={"primitive-type":{},"complex-type":{},resource:{},"value-set":{},nested:{},binding:{},profile:{},logical:{}};for(let w of v){w.identifier;f[T][w.identifier.kind][w.identifier.url]={};}}let y=u.endsWith(".yaml")?tr.stringify(f):JSON.stringify(f,void 0,2);await A.mkdir(R.dirname(u),{recursive:true}),await A.writeFile(u,y);}}};se();var Ie=class{constructor(e){this.options=e;}handleError(e,t){e instanceof $?this.handleGeneratorError(e,t):this.handleUnknownError(e,t);}handleBatchErrors(e){let t=e.filter(i=>i instanceof $),r=e.filter(i=>!(i instanceof $));t.length>0&&this.reportBatchErrors(t),r.forEach(i=>{this.handleUnknownError(i);});}handleGeneratorError(e,t){switch(this.options.outputFormat){case "json":this.reportErrorAsJson(e);break;case "structured":this.reportErrorStructured(e);break;default:this.reportErrorToConsole(e);}}handleUnknownError(e,t){this.options.logger.error("Unexpected error occurred:",e),this.options.verbose&&(this.options.logger.error(`
22
22
  \u{1F6A8} Unexpected Error Details:`),this.options.logger.error(` Type: ${e.constructor.name}`),this.options.logger.error(` Message: ${e.message}`),e.stack&&this.options.logger.error(` Stack: ${e.stack}`),t?.schema&&this.options.logger.error(` Schema: ${t.schema.identifier.name}`),t?.filename&&this.options.logger.error(` File: ${t.filename}`)),this.options.logger.error(`
23
23
  \u{1F4A1} General troubleshooting suggestions:`),this.options.logger.error(" \u2022 Run with --verbose flag for more details"),this.options.logger.error(" \u2022 Check your input files for corruption"),this.options.logger.error(" \u2022 Update to the latest version of atomic-codegen"),this.options.logger.error(" \u2022 Report this issue at: https://github.com/atomic-ehr/codegen/issues");}reportErrorToConsole(e){if("getFormattedMessage"in e)this.options.logger.error(e.getFormattedMessage());else {this.options.logger.error(`
24
24
  \u274C ${e.constructor.name}: ${e.message}`);let t=e.getSuggestions();t.length>0&&(this.options.logger.error(`
package/dist/index.js CHANGED
@@ -3119,7 +3119,7 @@ var Writer = class extends FileSystemWriter {
3119
3119
  disclaimer() {
3120
3120
  return [
3121
3121
  "WARNING: This file is autogenerated by @atomic-ehr/codegen.",
3122
- "GitHub: https://github.com/orgs/atomic-ehr/repositories",
3122
+ "GitHub: https://github.com/atomic-ehr/codegen",
3123
3123
  "Any manual changes made to this file may be overwritten."
3124
3124
  ];
3125
3125
  }