@atomic-ehr/codegen 0.0.1-canary.20251003081054.6ba9d37 → 0.0.1-canary.20251003082149.3db28b4

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
@@ -90,7 +90,7 @@ ${_.join(`
90
90
  `),void 0,"versionWarning");if(X(this,b,"f").key[D]=!0,F.alias)this.alias(D,F.alias);let u=F.deprecate||F.deprecated;if(u)this.deprecateOption(D,u);let E=F.demand||F.required||F.require;if(E)this.demand(D,E);if(F.demandOption)this.demandOption(D,typeof F.demandOption==="string"?F.demandOption:void 0);if(F.conflicts)this.conflicts(D,F.conflicts);if("default"in F)this.default(D,F.default);if(F.implies!==void 0)this.implies(D,F.implies);if(F.nargs!==void 0)this.nargs(D,F.nargs);if(F.config)this.config(D,F.configParser);if(F.normalize)this.normalize(D);if(F.choices)this.choices(D,F.choices);if(F.coerce)this.coerce(D,F.coerce);if(F.group)this.group(D,F.group);if(F.boolean||F.type==="boolean"){if(this.boolean(D),F.alias)this.boolean(F.alias)}if(F.array||F.type==="array"){if(this.array(D),F.alias)this.array(F.alias)}if(F.number||F.type==="number"){if(this.number(D),F.alias)this.number(F.alias)}if(F.string||F.type==="string"){if(this.string(D),F.alias)this.string(F.alias)}if(F.count||F.type==="count")this.count(D);if(typeof F.global==="boolean")this.global(D,F.global);if(F.defaultDescription)X(this,b,"f").defaultDescription[D]=F.defaultDescription;if(F.skipValidation)this.skipValidation(D);let B=F.describe||F.description||F.desc,C=X(this,h,"f").getDescriptions();if(!Object.prototype.hasOwnProperty.call(C,D)||typeof B==="string")this.describe(D,B);if(F.hidden)this.hide(D);if(F.requiresArg)this.requiresArg(D)}return this}options(D,F){return this.option(D,F)}parse(D,F,u){if(L("[string|array] [function|boolean|object] [function]",[D,F,u],arguments.length),this[Q3](),typeof D>"u")D=X(this,yD,"f");if(typeof F==="object")N(this,sD,F,"f"),F=u;if(typeof F==="function")N(this,HD,F,"f"),F=!1;if(!F)N(this,yD,D,"f");if(X(this,HD,"f"))N(this,_D,!1,"f");let E=this[R0](D,!!F),B=this.parsed;if(X(this,JD,"f").setParsed(this.parsed),s(E))return E.then((C)=>{if(X(this,HD,"f"))X(this,HD,"f").call(this,X(this,kD,"f"),C,X(this,XD,"f"));return C}).catch((C)=>{if(X(this,HD,"f"))X(this,HD,"f")(C,this.parsed.argv,X(this,XD,"f"));throw C}).finally(()=>{this[aF](),this.parsed=B});else{if(X(this,HD,"f"))X(this,HD,"f").call(this,X(this,kD,"f"),E,X(this,XD,"f"));this[aF](),this.parsed=B}return E}parseAsync(D,F,u){let E=this.parse(D,F,u);return!s(E)?Promise.resolve(E):E}parseSync(D,F,u){let E=this.parse(D,F,u);if(s(E))throw new DD(".parseSync() must not be used with asynchronous builders, handlers, or middleware");return E}parserConfiguration(D){return L("<object>",[D],arguments.length),N(this,c0,D,"f"),this}pkgConf(D,F){L("<string> [string]",[D,F],arguments.length);let u=null,E=this[nF](F||X(this,nD,"f"));if(E[D]&&typeof E[D]==="object")u=V0(E[D],F||X(this,nD,"f"),this[F0]()["deep-merge-config"]||!1,X(this,k,"f")),X(this,b,"f").configObjects=(X(this,b,"f").configObjects||[]).concat(u);return this}positional(D,F){L("<string> <object>",[D,F],arguments.length);let u=["default","defaultDescription","implies","normalize","choices","conflicts","coerce","type","describe","desc","description","alias"];F=vD(F,(C,$)=>{if(C==="type"&&!["string","number","boolean"].includes($))return!1;return u.includes(C)});let E=X(this,K0,"f").fullCommands[X(this,K0,"f").fullCommands.length-1],B=E?X(this,FD,"f").cmdToParseOptions(E):{array:[],alias:{},default:{},demand:{}};return z0(B).forEach((C)=>{let $=B[C];if(Array.isArray($)){if($.indexOf(D)!==-1)F[C]=!0}else if($[D]&&!(C in F))F[C]=$[D]}),this.group(D,X(this,h,"f").getPositionalGroupName()),this.option(D,F)}recommendCommands(D=!0){return L("[boolean]",[D],arguments.length),N(this,l0,D,"f"),this}required(D,F,u){return this.demand(D,F,u)}require(D,F,u){return this.demand(D,F,u)}requiresArg(D){if(L("<array|string|object> [number]",[D],arguments.length),typeof D==="string"&&X(this,b,"f").narg[D])return this;else this[J0](this.requiresArg.bind(this),"narg",D,NaN);return this}showCompletionScript(D,F){return L("[string] [string]",[D,F],arguments.length),D=D||this.$0,X(this,tD,"f").log(X(this,JD,"f").generateCompletionScript(D,F||X(this,AD,"f")||"completion")),this}showHelp(D){if(L("[string|function]",[D],arguments.length),N(this,GD,!0,"f"),!X(this,h,"f").hasCachedHelpMessage()){if(!this.parsed){let u=this[R0](X(this,yD,"f"),void 0,void 0,0,!0);if(s(u))return u.then(()=>{X(this,h,"f").showHelp(D)}),this}let F=X(this,FD,"f").runDefaultBuilderOn(this);if(s(F))return F.then(()=>{X(this,h,"f").showHelp(D)}),this}return X(this,h,"f").showHelp(D),this}scriptName(D){return this.customScriptName=!0,this.$0=D,this}showHelpOnFail(D,F){return L("[boolean|string] [string]",[D,F],arguments.length),X(this,h,"f").showHelpOnFail(D,F),this}showVersion(D){return L("[string|function]",[D],arguments.length),X(this,h,"f").showVersion(D),this}skipValidation(D){return L("<array|string>",[D],arguments.length),this[hD]("skipValidation",D),this}strict(D){return L("[boolean]",[D],arguments.length),N(this,aD,D!==!1,"f"),this}strictCommands(D){return L("[boolean]",[D],arguments.length),N(this,eD,D!==!1,"f"),this}strictOptions(D){return L("[boolean]",[D],arguments.length),N(this,D0,D!==!1,"f"),this}string(D){return L("<array|string>",[D],arguments.length),this[hD]("string",D),this[E0](D),this}terminalWidth(){return L([],0),X(this,k,"f").process.stdColumns}updateLocale(D){return this.updateStrings(D)}updateStrings(D){return L("<object>",[D],arguments.length),N(this,iD,!1,"f"),X(this,k,"f").y18n.updateLocale(D),this}usage(D,F,u,E){if(L("<string|null|undefined> [string|boolean] [function|object] [function]",[D,F,u,E],arguments.length),F!==void 0)if(OD(D,null,X(this,k,"f")),(D||"").match(/^\$0( |$)/))return this.command(D,F,u,E);else throw new DD(".usage() description must start with $0 if being used as alias for .command()");else return X(this,h,"f").usage(D),this}usageConfiguration(D){return L("<object>",[D],arguments.length),N(this,o0,D,"f"),this}version(D,F,u){if(L("[boolean|string] [string] [string]",[D,F,u],arguments.length),X(this,wD,"f"))this[lF](X(this,wD,"f")),X(this,h,"f").version(void 0),N(this,wD,null,"f");if(arguments.length===0)u=this[O3](),D="version";else if(arguments.length===1){if(D===!1)return this;u=D,D="version"}else if(arguments.length===2)u=F,F=void 0;return N(this,wD,typeof D==="string"?D:"version","f"),F=F||X(this,h,"f").deferY18nLookup("Show version number"),X(this,h,"f").version(u||void 0),this.boolean(X(this,wD,"f")),this.describe(X(this,wD,"f"),F),this}wrap(D){return L("<number|null|undefined>",[D],arguments.length),X(this,h,"f").wrap(D),this}[(FD=new WeakMap,nD=new WeakMap,K0=new WeakMap,JD=new WeakMap,AD=new WeakMap,h0=new WeakMap,kD=new WeakMap,iD=new WeakMap,d0=new WeakMap,_D=new WeakMap,p0=new WeakMap,MD=new WeakMap,ND=new WeakMap,GD=new WeakMap,VD=new WeakMap,g0=new WeakMap,tD=new WeakMap,XD=new WeakMap,b=new WeakMap,m0=new WeakMap,c0=new WeakMap,HD=new WeakMap,sD=new WeakMap,O0=new WeakMap,rD=new WeakMap,yD=new WeakMap,l0=new WeakMap,k=new WeakMap,aD=new WeakMap,eD=new WeakMap,D0=new WeakMap,h=new WeakMap,o0=new WeakMap,wD=new WeakMap,a=new WeakMap,$3)](D){if(!D._||!D["--"])return D;D._.push.apply(D._,D["--"]);try{delete D["--"]}catch(F){}return D}[Z3](){return{log:(...D)=>{if(!this[n0]())console.log(...D);if(N(this,GD,!0,"f"),X(this,XD,"f").length)N(this,XD,X(this,XD,"f")+`
91
91
  `,"f");N(this,XD,X(this,XD,"f")+D.join(" "),"f")},error:(...D)=>{if(!this[n0]())console.error(...D);if(N(this,GD,!0,"f"),X(this,XD,"f").length)N(this,XD,X(this,XD,"f")+`
92
92
  `,"f");N(this,XD,X(this,XD,"f")+D.join(" "),"f")}}}[lF](D){z0(X(this,b,"f")).forEach((F)=>{if(((E)=>E==="configObjects")(F))return;let u=X(this,b,"f")[F];if(Array.isArray(u)){if(u.includes(D))u.splice(u.indexOf(D),1)}else if(typeof u==="object")delete u[D]}),delete X(this,h,"f").getDescriptions()[D]}[X3](D,F,u){if(!X(this,d0,"f")[u])X(this,k,"f").process.emitWarning(D,F),X(this,d0,"f")[u]=!0}[Q3](){X(this,p0,"f").push({options:X(this,b,"f"),configObjects:X(this,b,"f").configObjects.slice(0),exitProcess:X(this,_D,"f"),groups:X(this,ND,"f"),strict:X(this,aD,"f"),strictCommands:X(this,eD,"f"),strictOptions:X(this,D0,"f"),completionCommand:X(this,AD,"f"),output:X(this,XD,"f"),exitError:X(this,kD,"f"),hasOutput:X(this,GD,"f"),parsed:this.parsed,parseFn:X(this,HD,"f"),parseContext:X(this,sD,"f")}),X(this,h,"f").freeze(),X(this,a,"f").freeze(),X(this,FD,"f").freeze(),X(this,MD,"f").freeze()}[z3](){let D="",F;if(/\b(node|iojs|electron)(\.exe)?$/.test(X(this,k,"f").process.argv()[0]))F=X(this,k,"f").process.argv().slice(1,2);else F=X(this,k,"f").process.argv().slice(0,1);if(D=F.map((u)=>{let E=this[R3](X(this,nD,"f"),u);return u.match(/^(\/|([a-zA-Z]:)?\\)/)&&E.length<u.length?E:u}).join(" ").trim(),X(this,k,"f").getEnv("_")&&X(this,k,"f").getProcessArgvBin()===X(this,k,"f").getEnv("_"))D=X(this,k,"f").getEnv("_").replace(`${X(this,k,"f").path.dirname(X(this,k,"f").process.execPath())}/`,"");return D}[F0](){return X(this,c0,"f")}[Y3](){return X(this,o0,"f")}[oF](){if(!X(this,iD,"f"))return;let D=X(this,k,"f").getEnv("LC_ALL")||X(this,k,"f").getEnv("LC_MESSAGES")||X(this,k,"f").getEnv("LANG")||X(this,k,"f").getEnv("LANGUAGE")||"en_US";this.locale(D.replace(/[.:].*/,""))}[O3](){return this[nF]().version||"unknown"}[J3](D){let F=D["--"]?D["--"]:D._;for(let u=0,E;(E=F[u])!==void 0;u++)if(X(this,k,"f").Parser.looksLikeNumber(E)&&Number.isSafeInteger(Math.floor(parseFloat(`${E}`))))F[u]=Number(E);return D}[nF](D){let F=D||"*";if(X(this,O0,"f")[F])return X(this,O0,"f")[F];let u={};try{let E=D||X(this,k,"f").mainFilename;if(X(this,k,"f").path.extname(E))E=X(this,k,"f").path.dirname(E);let B=X(this,k,"f").findUp(E,(C,$)=>{if($.includes("package.json"))return"package.json";else return});OD(B,void 0,X(this,k,"f")),u=JSON.parse(X(this,k,"f").readFileSync(B,"utf8"))}catch(E){}return X(this,O0,"f")[F]=u||{},X(this,O0,"f")[F]}[hD](D,F){F=[].concat(F),F.forEach((u)=>{u=this[sF](u),X(this,b,"f")[D].push(u)})}[J0](D,F,u,E){this[tF](D,F,u,E,(B,C,$)=>{X(this,b,"f")[B][C]=$})}[iF](D,F,u,E){this[tF](D,F,u,E,(B,C,$)=>{X(this,b,"f")[B][C]=(X(this,b,"f")[B][C]||[]).concat($)})}[tF](D,F,u,E,B){if(Array.isArray(u))u.forEach((C)=>{D(C,E)});else if(((C)=>typeof C==="object")(u))for(let C of z0(u))D(C,u[C]);else B(F,this[sF](u),E)}[sF](D){if(D==="__proto__")return"___proto___";return D}[rF](D,F){return this[J0](this[rF].bind(this),"key",D,F),this}[aF](){var D,F,u,E,B,C,$,Z,Q,z,O,A;let J=X(this,p0,"f").pop();OD(J,void 0,X(this,k,"f"));let W;D=this,F=this,u=this,E=this,B=this,C=this,$=this,Z=this,Q=this,z=this,O=this,A=this,{options:{set value(_){N(D,b,_,"f")}}.value,configObjects:W,exitProcess:{set value(_){N(F,_D,_,"f")}}.value,groups:{set value(_){N(u,ND,_,"f")}}.value,output:{set value(_){N(E,XD,_,"f")}}.value,exitError:{set value(_){N(B,kD,_,"f")}}.value,hasOutput:{set value(_){N(C,GD,_,"f")}}.value,parsed:this.parsed,strict:{set value(_){N($,aD,_,"f")}}.value,strictCommands:{set value(_){N(Z,eD,_,"f")}}.value,strictOptions:{set value(_){N(Q,D0,_,"f")}}.value,completionCommand:{set value(_){N(z,AD,_,"f")}}.value,parseFn:{set value(_){N(O,HD,_,"f")}}.value,parseContext:{set value(_){N(A,sD,_,"f")}}.value}=J,X(this,b,"f").configObjects=W,X(this,h,"f").unfreeze(),X(this,a,"f").unfreeze(),X(this,FD,"f").unfreeze(),X(this,MD,"f").unfreeze()}[W3](D,F){return oD(F,(u)=>{return D(u),u})}getInternalMethods(){return{getCommandInstance:this[A3].bind(this),getContext:this[G3].bind(this),getHasOutput:this[H3].bind(this),getLoggerInstance:this[q3].bind(this),getParseContext:this[_3].bind(this),getParserConfiguration:this[F0].bind(this),getUsageConfiguration:this[Y3].bind(this),getUsageInstance:this[M3].bind(this),getValidationInstance:this[V3].bind(this),hasParseCallback:this[n0].bind(this),isGlobalContext:this[K3].bind(this),postProcess:this[u0].bind(this),reset:this[eF].bind(this),runValidation:this[D2].bind(this),runYargsParserAndExecuteCommands:this[R0].bind(this),setHasOutput:this[U3].bind(this)}}[A3](){return X(this,FD,"f")}[G3](){return X(this,K0,"f")}[H3](){return X(this,GD,"f")}[q3](){return X(this,tD,"f")}[_3](){return X(this,sD,"f")||{}}[M3](){return X(this,h,"f")}[V3](){return X(this,a,"f")}[n0](){return!!X(this,HD,"f")}[K3](){return X(this,g0,"f")}[u0](D,F,u,E){if(u)return D;if(s(D))return D;if(!F)D=this[$3](D);if(this[F0]()["parse-positional-numbers"]||this[F0]()["parse-positional-numbers"]===void 0)D=this[J3](D);if(E)D=lD(D,this,X(this,MD,"f").getMiddleware(),!1);return D}[eF](D={}){N(this,b,X(this,b,"f")||{},"f");let F={};F.local=X(this,b,"f").local||[],F.configObjects=X(this,b,"f").configObjects||[];let u={};F.local.forEach((C)=>{u[C]=!0,(D[C]||[]).forEach(($)=>{u[$]=!0})}),Object.assign(X(this,rD,"f"),Object.keys(X(this,ND,"f")).reduce((C,$)=>{let Z=X(this,ND,"f")[$].filter((Q)=>!(Q in u));if(Z.length>0)C[$]=Z;return C},{})),N(this,ND,{},"f");let E=["array","boolean","string","skipValidation","count","normalize","number","hiddenOptions"],B=["narg","key","alias","default","defaultDescription","config","choices","demandedOptions","demandedCommands","deprecatedOptions"];if(E.forEach((C)=>{F[C]=(X(this,b,"f")[C]||[]).filter(($)=>!u[$])}),B.forEach((C)=>{F[C]=vD(X(this,b,"f")[C],($)=>!u[$])}),F.envPrefix=X(this,b,"f").envPrefix,N(this,b,F,"f"),N(this,h,X(this,h,"f")?X(this,h,"f").reset(u):r1(this,X(this,k,"f")),"f"),N(this,a,X(this,a,"f")?X(this,a,"f").reset(u):B3(this,X(this,h,"f"),X(this,k,"f")),"f"),N(this,FD,X(this,FD,"f")?X(this,FD,"f").reset():i1(X(this,h,"f"),X(this,a,"f"),X(this,MD,"f"),X(this,k,"f")),"f"),!X(this,JD,"f"))N(this,JD,F3(this,X(this,h,"f"),X(this,FD,"f"),X(this,k,"f")),"f");return X(this,MD,"f").reset(),N(this,AD,null,"f"),N(this,XD,"","f"),N(this,kD,null,"f"),N(this,GD,!1,"f"),this.parsed=!1,this}[R3](D,F){return X(this,k,"f").path.relative(D,F)}[R0](D,F,u,E=0,B=!1){var C,$,Z,Q;let z=!!u||B;D=D||X(this,yD,"f"),X(this,b,"f").__=X(this,k,"f").y18n.__,X(this,b,"f").configuration=this[F0]();let O=!!X(this,b,"f").configuration["populate--"],A=Object.assign({},X(this,b,"f").configuration,{"populate--":!0}),J=X(this,k,"f").Parser.detailed(D,Object.assign({},X(this,b,"f"),{configuration:{"parse-positional-numbers":!1,...A}})),W=Object.assign(J.argv,X(this,sD,"f")),_=void 0,q=J.aliases,P=!1,c=!1;if(Object.keys(W).forEach((p)=>{if(p===X(this,VD,"f")&&W[p])P=!0;else if(p===X(this,wD,"f")&&W[p])c=!0}),W.$0=this.$0,this.parsed=J,E===0)X(this,h,"f").clearCachedHelpMessage();try{if(this[oF](),F)return this[u0](W,O,!!u,!1);if(X(this,VD,"f")){if([X(this,VD,"f")].concat(q[X(this,VD,"f")]||[]).filter((j)=>j.length>1).includes(""+W._[W._.length-1]))W._.pop(),P=!0}N(this,g0,!1,"f");let p=X(this,FD,"f").getCommands(),QD=((C=X(this,JD,"f"))===null||C===void 0?void 0:C.completionKey)?[($=X(this,JD,"f"))===null||$===void 0?void 0:$.completionKey,...(Q=this.getAliases()[(Z=X(this,JD,"f"))===null||Z===void 0?void 0:Z.completionKey])!==null&&Q!==void 0?Q:[]].some((U)=>Object.prototype.hasOwnProperty.call(W,U)):!1,d=P||QD||B;if(W._.length){if(p.length){let U;for(let j=E||0,S;W._[j]!==void 0;j++)if(S=String(W._[j]),p.includes(S)&&S!==X(this,AD,"f")){let l=X(this,FD,"f").runCommand(S,this,J,j+1,B,P||c||B);return this[u0](l,O,!!u,!1)}else if(!U&&S!==X(this,AD,"f")){U=S;break}if(!X(this,FD,"f").hasDefaultCommand()&&X(this,l0,"f")&&U&&!d)X(this,a,"f").recommendCommands(U,p)}if(X(this,AD,"f")&&W._.includes(X(this,AD,"f"))&&!QD){if(X(this,_D,"f"))fD(!0);this.showCompletionScript(),this.exit(0)}}if(X(this,FD,"f").hasDefaultCommand()&&!d){let U=X(this,FD,"f").runCommand(null,this,J,0,B,P||c||B);return this[u0](U,O,!!u,!1)}if(QD){if(X(this,_D,"f"))fD(!0);D=[].concat(D);let U=D.slice(D.indexOf(`--${X(this,JD,"f").completionKey}`)+1);return X(this,JD,"f").getCompletion(U,(j,S)=>{if(j)throw new DD(j.message);(S||[]).forEach((l)=>{X(this,tD,"f").log(l)}),this.exit(0)}),this[u0](W,!O,!!u,!1)}if(!X(this,GD,"f")){if(P){if(X(this,_D,"f"))fD(!0);z=!0,this.showHelp((U)=>{X(this,tD,"f").log(U),this.exit(0)})}else if(c){if(X(this,_D,"f"))fD(!0);z=!0,X(this,h,"f").showVersion("log"),this.exit(0)}}if(!z&&X(this,b,"f").skipValidation.length>0)z=Object.keys(W).some((U)=>X(this,b,"f").skipValidation.indexOf(U)>=0&&W[U]===!0);if(!z){if(J.error)throw new DD(J.error.message);if(!QD){let U=this[D2](q,{},J.error);if(!u)_=lD(W,this,X(this,MD,"f").getMiddleware(),!0);if(_=this[W3](U,_!==null&&_!==void 0?_:W),s(_)&&!u)_=_.then(()=>{return lD(W,this,X(this,MD,"f").getMiddleware(),!1)})}}}catch(p){if(p instanceof DD)X(this,h,"f").fail(p.message,p);else throw p}return this[u0](_!==null&&_!==void 0?_:W,O,!!u,!0)}[D2](D,F,u,E){let B={...this.getDemandedOptions()};return(C)=>{if(u)throw new DD(u.message);X(this,a,"f").nonOptionCount(C),X(this,a,"f").requiredArguments(C,B);let $=!1;if(X(this,eD,"f"))$=X(this,a,"f").unknownCommands(C);if(X(this,aD,"f")&&!$)X(this,a,"f").unknownArguments(C,D,F,!!E);else if(X(this,D0,"f"))X(this,a,"f").unknownArguments(C,D,{},!1,!1);X(this,a,"f").limitedChoices(C),X(this,a,"f").implications(C),X(this,a,"f").conflicting(C)}}[U3](){N(this,GD,!0,"f")}[E0](D){if(typeof D==="string")X(this,b,"f").key[D]=!0;else for(let F of D)X(this,b,"f").key[F]=!0}}function t1(D){return!!D&&typeof D.getInternalMethods==="function"}var h8=j3(dF),L3=h8;import{performance as T3}from"node:perf_hooks";var dD=x0(u2(),1);class m8{total;message;current=0;barLength=30;startTime=T3.now();constructor(D,F){this.total=D;this.message=F}update(D,F){this.current=Math.min(D,this.total),this.render(F)}increment(D){this.update(this.current+1,D)}complete(D){this.current=this.total,this.render();let F=Math.round(T3.now()-this.startTime);console.log(dD.default.green(`✅ ${D||this.message} ${dD.default.gray(`(${F}ms)`)}`))}render(D){let F=Math.round(this.current/this.total*100),u=Math.round(this.current/this.total*this.barLength),E=this.barLength-u,B=dD.default.green("█".repeat(u))+dD.default.gray("░".repeat(E)),C=`${this.current}/${this.total}`,$=D?dD.default.gray(` ${D}`):"";if(process.stdout.clearLine(0),process.stdout.cursorTo(0),process.stdout.write(`${this.message} ${B} ${dD.default.cyan(C)} ${dD.default.yellow(`${F}%`)}${$}`),this.current===this.total)process.stdout.write(`
93
- `)}}var $D=x0(u2(),1);class s0{options;constructor(D={}){this.options={timestamp:!1,verbose:!1,...D}}formatMessage(D,F,u){let E=this.options.timestamp?`${$D.default.gray(new Date().toLocaleTimeString())} `:"",B=this.options.prefix?`${$D.default.cyan(`[${this.options.prefix}]`)} `:"";return`${E}${u(D)} ${B}${F}`}success(D){console.log(this.formatMessage("✅",D,$D.default.green))}error(D,F){if(console.error(this.formatMessage("❌",D,$D.default.red)),F&&this.options.verbose){if(console.error($D.default.red(` ${F.message}`)),F.stack)console.error($D.default.gray(F.stack))}}warn(D){console.warn(this.formatMessage("⚠️",D,$D.default.yellow))}info(D){console.log(this.formatMessage("ℹ️",D,$D.default.blue))}debug(D){if(this.options.verbose)console.log(this.formatMessage("\uD83D\uDC1B",D,$D.default.magenta))}step(D){console.log(this.formatMessage("\uD83D\uDE80",D,$D.default.cyan))}progress(D){console.log(this.formatMessage("⏳",D,$D.default.blue))}plain(D,F=(u)=>u){let u=this.options.timestamp?`${$D.default.gray(new Date().toLocaleTimeString())} `:"",E=this.options.prefix?`${$D.default.cyan(`[${this.options.prefix}]`)} `:"";console.log(`${u}${E}${F(D)}`)}dim(D){this.plain(D,$D.default.gray)}child(D){return new s0({...this.options,prefix:this.options.prefix?`${this.options.prefix}:${D}`:D})}configure(D){this.options={...this.options,...D}}}var B0=new s0;function r0(D){B0.success(D)}function KD(D,F){B0.error(D,F)}function E2(D){B0.warn(D)}function a0(D){B0.info(D)}function B2(D){B0.step(D)}function b3(D){B0.dim(D)}function C2(D){B0.configure(D)}function jD(D={}){return new s0(D)}function $2(D){console.log(),console.log($D.default.cyan($D.default.bold(`━━━ ${D} ━━━`)))}function Z2(D,F,u){let E=D;if(F)E+=` ${$D.default.gray(`(${F}ms)`)}`;if(r0(E),u)Object.entries(u).forEach(([B,C])=>{b3(` ${B}: ${C}`)})}function C0(D,F="•"){D.forEach((u)=>{console.log($D.default.gray(` ${F} ${u}`))})}import{existsSync as nu}from"node:fs";import{resolve as iu}from"node:path";import{existsSync as e0,mkdirSync as x3}from"node:fs";import{readdir as P3,readFile as c8,stat as l8,unlink as S3,writeFile as o8}from"node:fs/promises";import{join as X2}from"node:path";class $0{cache=new Map;config;cacheDir;constructor(D){if(this.config={enablePersistence:!0,cacheDir:".typeschema-cache",maxAge:86400000,validateCached:!0,...D},this.config.enablePersistence&&this.config.cacheDir)this.cacheDir=this.config.cacheDir}async set(D){let F=this.generateKey(D.identifier);if(this.cache.set(F,D),this.config.enablePersistence&&this.cacheDir)await this.persistSchema(D)}get(D){let F=this.generateKey(D);return this.cache.get(F)||null}getByUrl(D){for(let F of this.cache.values())if(F.identifier.url===D)return F;return null}has(D){let F=this.generateKey(D);return this.cache.has(F)}hasByUrl(D){for(let F of this.cache.values())if(F.identifier.url===D)return!0;return!1}delete(D){let F=this.generateKey(D);return this.cache.delete(F)}deleteByUrl(D){for(let[F,u]of this.cache.entries())if(u.identifier.url===D)return this.cache.delete(F);return!1}getByPackage(D){let F=[];for(let u of this.cache.values())if(u.identifier.package===D)F.push(u);return F}getByKind(D){let F=[];for(let u of this.cache.values())if(u.identifier.kind===D)F.push(u);return F}setMany(D){for(let F of D)this.set(F)}clear(){this.cache.clear()}generateKey(D){return`${D.package}:${D.version}:${D.kind}:${D.name}`}async initialize(){if(this.config.enablePersistence&&this.cacheDir){if(!e0(this.cacheDir))x3(this.cacheDir,{recursive:!0});await this.loadFromDisk()}}async loadFromDisk(){if(!this.cacheDir||!e0(this.cacheDir))return;try{let F=(await P3(this.cacheDir)).filter((u)=>u.endsWith(".typeschema.json"));for(let u of F){let E=X2(this.cacheDir,u),B=await l8(E);if(this.config.maxAge){if(Date.now()-B.mtimeMs>this.config.maxAge){await S3(E);continue}}try{let C=await c8(E,"utf-8"),$=JSON.parse(C);if(this.config.validateCached){if(!$.schema?.identifier)continue}let Z=this.generateKey($.schema.identifier);this.cache.set(Z,$.schema)}catch(C){console.warn(`Failed to load cached schema from ${u}:`,C)}}}catch(D){console.warn("Failed to load cached schemas from disk:",D)}}async persistSchema(D){if(!this.cacheDir)return;if(!e0(this.cacheDir))x3(this.cacheDir,{recursive:!0});let F={schema:D,timestamp:Date.now(),version:D.identifier.version},u=`${D.identifier.package}-${D.identifier.version}-${D.identifier.kind}-${D.identifier.name}.typeschema.json`.replace(/[^a-zA-Z0-9.-]/g,"_"),E=X2(this.cacheDir,u);try{await o8(E,JSON.stringify(F,null,2),"utf-8")}catch(B){console.warn(`Failed to persist schema to ${E}:`,B)}}async clearDisk(){if(!this.cacheDir||!e0(this.cacheDir))return;try{let F=(await P3(this.cacheDir)).filter((u)=>u.endsWith(".typeschema.json"));for(let u of F)await S3(X2(this.cacheDir,u))}catch(D){console.warn("Failed to clear cache directory:",D)}}}import{createHash as n8}from"crypto";var Q2=(D)=>{let F=`${D.packageName}@${D.packageVersion}:${D.filePath}`;return n8("sha256").update(F).digest("base64url")};var W0=()=>{let D={},F={};return{generateId:Q2,get:(B)=>D[B],set:(B,C)=>{if(D[B]=C,C.url){if(!F[C.url])F[C.url]=[];let $=F[C.url];if($&&!$.includes(B))$.push(B)}},has:(B)=>(B in D),clear:()=>{Object.keys(D).forEach((B)=>delete D[B]),Object.keys(F).forEach((B)=>delete F[B])},size:()=>Object.keys(D).length,getIdsByUrl:(B)=>F[B]||[],createReference:(B,C)=>({id:B,resourceType:C.resourceType}),getAllReferences:()=>D}};import*as K2 from"path";import*as o3 from"fs/promises";var v3="https://fs.get-ig.org/pkgs/";import*as DF from"fs/promises";import*as f3 from"path";var A0=async(D)=>{try{return await DF.access(D),!0}catch{return!1}},G0=async(D)=>{try{await DF.mkdir(D,{recursive:!0})}catch{}},FF=async(D)=>{let F=f3.join(D,".index.json");return A0(F)};import{exec as i8}from"child_process";import{promisify as t8}from"util";var k3=t8(i8);async function z2(){try{return await k3("bun --version"),"bun"}catch{try{return await k3("npm --version"),"npm"}catch{return null}}}import*as h3 from"fs/promises";import*as d3 from"path";import{exec as s8}from"child_process";import{promisify as r8}from"util";var y3=r8(s8),uF=async(D,F,u)=>{await G0(F);let E=d3.join(F,"package.json");if(!await A0(E))await h3.writeFile(E,JSON.stringify({name:"fhir-canonical-manager-workspace",version:"1.0.0",private:!0,dependencies:{}},null,2));let B=await z2();if(!B)throw Error("No package manager found. Please install npm or bun.");for(let C of D)try{if(B==="bun"){let $={...process.env,HOME:F,NPM_CONFIG_USERCONFIG:"/dev/null"},Z=u?`cd ${F} && bun add ${C} --registry ${u}`:`cd ${F} && bun add ${C}`;await y3(Z,{env:$,maxBuffer:10485760})}else{let $=u?`cd ${F} && npm add ${C} --registry ${u}`:`cd ${F} && npm add ${C}`;await y3($,{maxBuffer:10485760})}}catch($){throw console.error(`Failed to install package ${C}:`,$),$}};var EF=()=>{let D=W0();return{entries:{},packages:{},references:{},referenceManager:D}};import*as BF from"fs/promises";import*as J2 from"path";import*as Y2 from"fs/promises";import*as O2 from"path";import{createHash as p3}from"crypto";var U0=async(D)=>{try{let F=O2.join(D,"package-lock.json");try{let u=await Y2.readFile(F,"utf-8");return p3("sha256").update(u).digest("hex")}catch{let u=O2.join(D,"bun.lock"),E=await Y2.readFile(u,"utf-8");return p3("sha256").update(E).digest("hex")}}catch{return null}};var CF=async(D,F,u)=>{let E=await U0(u),B={entries:D.entries,packages:D.packages,references:D.referenceManager.getAllReferences(),packageLockHash:E||void 0},C=J2.join(F,"index.json");await BF.writeFile(C,JSON.stringify(B,null,2))},W2=async(D)=>{try{let F=J2.join(D,"index.json"),u=await BF.readFile(F,"utf-8");return JSON.parse(u)}catch{return null}};var g3=(D)=>{if(!D||typeof D!=="object")return!1;if(!D.filename||typeof D.filename!=="string")return!1;if(!D.resourceType||typeof D.resourceType!=="string")return!1;if(!D.id||typeof D.id!=="string")return!1;let F=["url","version","kind","type"];for(let u of F)if(D[u]!==void 0&&typeof D[u]!=="string")return!1;return!0},m3=(D)=>{if(!D||typeof D!=="object")return!1;if(!D["index-version"]||typeof D["index-version"]!=="number")return!1;if(!Array.isArray(D.files))return!1;return D.files.every((F)=>g3(F))},A2=(D,F)=>{try{let u=JSON.parse(D);if(!m3(u))return null;return u}catch{return null}};import*as c3 from"fs/promises";import*as G2 from"path";var $F=async(D,F,u)=>{let E=G2.join(D,".index.json");try{let B=await c3.readFile(E,"utf-8"),C=A2(B,E);if(!C)return;for(let $ of C.files){if(!$.url)continue;let Z=G2.join(D,$.filename),Q=u.referenceManager.generateId({packageName:F.name,packageVersion:F.version,filePath:Z});u.referenceManager.set(Q,{packageName:F.name,packageVersion:F.version,filePath:Z,resourceType:$.resourceType,url:$.url,version:$.version});let z={id:Q,resourceType:$.resourceType,indexVersion:C["index-version"],url:$.url,version:$.version,kind:$.kind,type:$.type,package:{name:F.name,version:F.version}};if(!u.entries[$.url])u.entries[$.url]=[];let O=u.entries[$.url];if(O)O.push(z)}}catch{}};import*as l3 from"fs/promises";import*as ZF from"path";var XF=async(D,F)=>{try{let u=ZF.join(D,"package.json"),E=await l3.readFile(u,"utf-8"),B=JSON.parse(E),C={id:{name:B.name,version:B.version},path:D,canonical:B.canonical,fhirVersions:B.fhirVersions};F.packages[B.name]=C,await $F(D,B,F);let $=ZF.join(D,"examples");if(await A0(ZF.join($,".index.json")))await $F($,B,F)}catch{}};import*as H2 from"fs/promises";import*as q2 from"path";var QF=async(D,F)=>{try{let u=await H2.readdir(D,{withFileTypes:!0});for(let E of u){if(!E.isDirectory())continue;let B=q2.join(D,E.name);if(E.name.startsWith("@")){let C=await H2.readdir(B,{withFileTypes:!0});for(let $ of C){if(!$.isDirectory())continue;let Z=q2.join(B,$.name);if(await FF(Z))await XF(Z,F)}}else if(await FF(B))await XF(B,F)}}catch{}};var _2=async(D,F,u,E)=>{if(F.package)try{return await E(D,{package:F.package.name,version:F.package.version})}catch{}return null};var M2={str:["structure"],struct:["structure"],def:["definition"],pati:["patient"],obs:["observation"],org:["organization"],pract:["practitioner"],med:["medication","medicinal"],req:["request"],resp:["response"],ref:["reference"],val:["value"],code:["codesystem","code"],cs:["codesystem"],vs:["valueset"],sd:["structuredefinition"]};var V2=(D,F)=>{if(F.length===0)return D;let u=F.map((E)=>E.toLowerCase());return D.filter((E)=>{if(!E.url)return!1;let C=[E.url.toLowerCase(),E.type?.toLowerCase()||"",E.resourceType?.toLowerCase()||""].join(" ");return u.every(($)=>{let Z=C.split(/[\/\-_\.\s]+/);if(Z.some((O)=>O.startsWith($)))return!0;let z=M2[$]||[];for(let O of z)if(Z.some((A)=>A.startsWith(O)))return!0;return C.includes($)})})};var pD=(D)=>{let{packages:F=[],workingDir:u}=D,E=D.registry?D.registry.endsWith("/")?D.registry:`${D.registry}/`:v3,B=K2.join(u,"node_modules"),C=K2.join(u,".fcm","cache"),$=EF(),Z=!1,Q=new Map,z=()=>{if(!Z)throw Error("CanonicalManager not initialized. Call init() first.")},O=async()=>{if(Z)return;await G0(u),await G0(C);let U=await U0(u),j=await W2(C);if(j&&j.packageLockHash===U&&U!==null)$.entries=j.entries,$.packages=j.packages,Object.entries(j.references).forEach(([l,g])=>{$.referenceManager.set(l,g)});else{if(j&&j.packageLockHash!==U)console.log("Package dependencies have changed, rebuilding index...");await uF(F,u,E),$=EF(),await QF(B,$),await CF($,C,u)}Z=!0},A=async()=>{$.entries={},$.packages={},$.referenceManager.clear(),Q.clear(),Z=!1},J=async()=>{return z(),Object.values($.packages).map((U)=>U.id)},W=async(...U)=>{if(U.length===0)return;let j=U.filter((S)=>!F.includes(S));if(j.length!==0)F.push(...j);if(!Z){await O();return}if(j.length===0)return;await uF(F,u,E),await QF(B,$),await CF($,C,u)},_=async(U,j)=>{if(z(),j?.sourceContext){let g=await _2(U,j.sourceContext,$,_);if(g)return g}let S=$.entries[U]||[];if(S.length===0)throw Error(`Cannot resolve canonical URL: ${U}`);let l=[...S];if(j?.package)l=l.filter((g)=>g.package?.name===j.package);if(j?.version)l=l.filter((g)=>g.version===j.version);if(l.length===0)throw Error(`No matching resource found for ${U} with given options`);return l[0]},q=async(U,j)=>{let S=await _(U,j);return P(S)},P=async(U)=>{z();let j=$.referenceManager.get(U.id);if(!j)throw Error(`Invalid reference ID: ${U.id}`);try{let S=await o3.readFile(j.filePath,"utf-8");return{...JSON.parse(S),id:U.id,resourceType:U.resourceType}}catch(S){throw Error(`Failed to read resource: ${S}`)}},c=async(U)=>{z();let j=[];if(U.url)j=$.entries[U.url]||[];else for(let S of Object.values($.entries))j.push(...S);if(U.kind!==void 0)j=j.filter((S)=>S.kind===U.kind);if(U.type!==void 0)j=j.filter((S)=>S.type===U.type);if(U.version!==void 0)j=j.filter((S)=>S.version===U.version);if(U.package){let S=U.package;j=j.filter((l)=>l.package?.name===S.name&&l.package?.version===S.version)}return j};return{init:O,destroy:A,packages:J,addPackages:W,resolveEntry:_,resolve:q,read:P,searchEntries:c,search:async(U)=>{let j=await c(U);return await Promise.all(j.map((l)=>P(l)))},smartSearch:async(U,j)=>{z();let S=await c({kind:j?.kind,package:j?.package});if(j?.resourceType)S=S.filter((l)=>l.resourceType===j.resourceType);if(j?.type)S=S.filter((l)=>l.type===j.type);return V2(S,U)},getSearchParametersForResource:async(U)=>{if(z(),Q.has(U))return Q.get(U);let S=(await c({})).filter((g)=>g.resourceType==="SearchParameter"),l=[];for(let g of S){let LD=await P(g),I=LD.base||[];if(Array.isArray(I)&&I.includes(U))l.push(LD)}return l.sort((g,LD)=>{let I=g.code||"",K=LD.code||"";return I.localeCompare(K)}),Q.set(U,l),l}}};function R2(D){let E=D.path.split(".").slice(1).map(($)=>({el:$}));if(E.length===0)return[];let B=E.length-1,C={};if(D.slicing){if(C.slicing={...D.slicing},D.min!==void 0)C.slicing.min=D.min;if(D.max&&D.max!=="*")C.slicing.max=parseInt(D.max)}if(D.sliceName){if(C.slice={},D.min!==void 0)C.slice.min=D.min;if(D.max&&D.max!=="*")C.slice.max=parseInt(D.max);C.sliceName=D.sliceName}return E[B]={...E[B],...C},E}function U2(D,F){let u=[],E=Math.min(D.length,F.length);for(let B=0;B<E;B++)if(D[B].el===F[B].el)u.push({el:D[B].el});else break;return u}function j2(D,F){let u=[];for(let E=0;E<F.length;E++)if(E<D.length&&D[E].el===F[E].el)u.push({...D[E],...F[E],...D[E].slicing&&!F[E].slicing&&{slicing:D[E].slicing}});else u.push(F[E]);return u}function a8(D,F){return!!(D.sliceName&&F.sliceName&&D.sliceName!==F.sliceName)}function n3(D){return{type:"exit-slice",sliceName:D.sliceName,...D.slicing&&{slicing:D.slicing},...D.slice&&{slice:D.slice}}}function e8(D,F,u,E){let B=[];for(let C=D-1;C>=F;C--){let $=u[C];if($.sliceName)B.push(n3($));B.push({type:"exit",el:$.el})}if(F>0){let C=u[F-1],$=E[F-1];if(a8(C,$))B.push(n3(C))}return B}function Du(D,F,u,E){let B=[];if(D>0&&D<=F){let C=u[D-1]||{},$=E[D-1];if($.sliceName&&(!C.sliceName||C.sliceName!==$.sliceName))B.push({type:"enter-slice",sliceName:$.sliceName});if(D===F)return B}for(let C=D;C<F;C++){let $=E[C];if(B.push({type:"enter",el:$.el}),$.sliceName)B.push({type:"enter-slice",sliceName:$.sliceName})}return B}function zF(D,F){let u=D.length,E=F.length,C=U2(D,F).length,$=e8(u,C,D,F),Z=Du(C,E,D,F);return[...$,...Z]}function t3(D,F){if(!D)return;return D.find((u)=>u.url===F)}function i3(D){return{Instant:"instant",Time:"time",Date:"date",DateTime:"dateTime",Decimal:"decimal",Boolean:"boolean",Integer:"integer",String:"string",Uri:"uri",Base64Binary:"base64Binary",Code:"code",Id:"id",Oid:"oid",UnsignedInt:"unsignedInt",PositiveInt:"positiveInt",Markdown:"markdown",Url:"url",Canonical:"canonical",Uuid:"uuid"}[D]||D}function Fu(D){let F={};for(let[u,E]of Object.entries(D))if(typeof u==="string"&&u.startsWith("pattern")){let B=i3(u.replace(/^pattern/,""));F.pattern={type:B,value:E}}else if(typeof u==="string"&&u.startsWith("fixed")){let B=i3(u.replace(/^fixed/,""));F.pattern={type:B,value:E}}else F[u]=E;if(F.pattern?.type&&!F.type)F.type=F.pattern.type;return F}function uu(D){let F=[];for(let u of D)if(u.targetProfile){let E=Array.isArray(u.targetProfile)?u.targetProfile:[u.targetProfile];F.push(...E)}return F.length>0?[...new Set(F)].sort():void 0}function Eu(D){if(!D.type||D.type.length===0)return D;if(D.type[0].code==="Reference"){let u=uu(D.type);return{...D,type:[{code:"Reference"}],...u&&{refers:u}}}return D}function Bu(D,F){let u=(C)=>{let $={strength:C.strength,...C.valueSet&&{valueSet:C.valueSet}},Z=t3(C.extension,"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName");if(Z?.valueString)$.bindingName=Z.valueString;return $};if(D.choices){let{binding:C,...$}=D;return $}if(D.choiceOf&&F.snapshot){let C=`${F.id}.${D.choiceOf}[x]`,$=F.snapshot.element.find((Z)=>Z.path===C);if($?.binding)return{...D,binding:u($.binding)}}if(D.binding?.valueSet)return{...D,binding:u(D.binding)};let{binding:E,...B}=D;return B}function Cu(D){if(!D.constraint||D.constraint.length===0)return D;let F={};for(let u of D.constraint)F[u.key]={expression:u.expression,human:u.human,severity:u.severity};return{...D,constraint:F}}function $u(D,F){if(!D.type||D.type.length===0)return D;let u=D.type[0]?.extension?.[0];if(u?.url==="http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type"&&u.valueUrl)return{...D,type:u.valueUrl};let E=D.type[0].code,B={...D,type:E};if(F.kind==="logical"){let C=t3(D.extension,"http://hl7.org/fhir/StructureDefinition/elementdefinition-defaulttype");if(C?.valueCanonical)B.defaultType=C.valueCanonical}return B}function Zu(D){if(D.type?.[0]?.code!=="Extension")return D;let u=D.type[0]?.profile?.[0];if(!u)return D;return{...D,url:u,...D.min&&{min:D.min},...D.max&&D.max!=="*"&&{max:parseInt(D.max)}}}function Xu(D){if(D.url)return D;let F=D.max==="*"||D.min&&D.min>=2||D.max&&parseInt(D.max)>=2,u=D.min===1,E={...D};if(delete E.min,delete E.max,F){if(E.array=!0,D.min&&D.min>0)E.min=D.min;if(D.max&&D.max!=="*")E.max=parseInt(D.max)}if(u)E._required=!0;return E}function Qu(D,F){let u=D.substring(1).split("."),E=[F.url];for(let B of u.slice(1))E.push("elements",B);return E}function zu(D,F){if(!D.contentReference)return D;let{contentReference:u,...E}=D;return{...E,elementReference:Qu(u,F)}}function Yu(D){let{path:F,slicing:u,sliceName:E,id:B,mapping:C,example:$,alias:Z,condition:Q,comment:z,definition:O,requirements:A,extension:J,...W}=D;return W}function I2(D,F){let u=Eu(D);return u=Yu(u),u=Bu(u,F),u=Cu(u),u=zu(u,F),u=Zu(u),u=Xu(u),u=$u(u,F),u=Fu(u),u}function L2(D){if(D.path.endsWith("[x]"))return!0;if(D.type&&D.type.length>1)return new Set(D.type.map((u)=>u.code)).size>1;return!1}function s3(D){if(!D)return D;return D.charAt(0).toUpperCase()+D.slice(1)}function r3(D){let F=D.split("/");return F[F.length-1]}function N2(D){let F=D.path.replace(/\[x\]$/,""),u=F.split(".").pop()||"";if(!D.type)return[];let E=[],B=D.type.map((z)=>u+s3(r3(z.code))),{type:C,binding:$,...Z}=D,Q={...Z,path:F,choices:B};E.push(Q);for(let z of D.type){let O=s3(r3(z.code)),A={...D,path:F+O,type:[z],choiceOf:u};if(D.binding)delete A.binding;E.push(A)}return E}function a3(D,F){let u=D[D.length-1],E=D.slice(0,-1),B=E[E.length-1],C=F(B,u);return[...E.slice(0,-1),C]}function Ou(D,F){if(!D.discriminator)return{};let u={};for(let E of D.discriminator){if(!E.type||!["pattern","value",void 0].includes(E.type))continue;let B=E.path.trim();if(B==="$this"){if(F.pattern?.value)Object.assign(u,F.pattern.value)}else{let C=B.split(".").filter((z)=>z),$=Object.keys(F).filter((z)=>z.startsWith("pattern"));for(let z of $){let O=z.replace("pattern","").toLowerCase();if(C.length===1&&C[0]===O)u[O]=F[z]}let Z=["elements"];for(let z of C)if(Z.push(z),C.indexOf(z)<C.length-1)Z.push("elements");Z.push("pattern");let Q=F;for(let z of Z)Q=Q?.[z];if(Q?.value!==void 0){let z=u;for(let O=0;O<C.length-1;O++){if(!z[C[O]])z[C[O]]={};z=z[C[O]]}z[C[C.length-1]]=Q.value}}}return u}function Ju(D,F,u){let E={match:F,schema:D};if(u?.min!==void 0&&u.min!==0)E.min=u.min;if(u?.max!==void 0)E.max=u.max;return E}function Wu(D,F,u){let E=F.slicing||D.slicing||{},B=Ou(E,u),C=Ju(u,B,D.slice);if(!F.slicing)F.slicing={};if(D.slicing)F.slicing={...F.slicing,...D.slicing};if(!F.slicing.slices)F.slicing.slices={};return F.slicing.slices[D.sliceName]=C,F}function Au(D){if(!D.slicing?.slices)return{};let F={};for(let[u,E]of Object.entries(D.slicing.slices)){let{match:B,schema:C,...$}=E,{slicing:Z,elements:Q,type:z,min:O,...A}=C||{},J={};if(B?.url)J.url=B.url;if($.min!==void 0&&$.min!==0)J.min=$.min;if($.max!==void 0)J.max=$.max;if(Object.assign(J,A),O!==void 0&&O!==0&&J.min===void 0)J.min=O;F[u]=J}return F}function Gu(D,F,u){let E={...F};if(D==="extension")E.extensions=Au(u);if(!E.elements)E.elements={};let B=u.choiceOf||D,{_required:C,...$}=u;if(E.elements[D]=$,C){if(!E.required)E.required=[];if(!E.required.includes(B))E.required.push(B)}return E}function YF(D,F,u){let E=[...D];for(let B=0;B<F.length;B++){let C=F[B],Z=F[B+1]?.type==="enter"?{}:u;switch(C.type){case"enter":E.push(Z);break;case"enter-slice":E.push(Z);break;case"exit":E=a3(E,(Q,z)=>Gu(C.el,Q,z));break;case"exit-slice":E=a3(E,(Q,z)=>Wu(C,Q,z));break}}return E}function e3(D,F){let u={};if(u.name=D.name,u.type=D.type,D.url)u.url=D.url;if(D.version)u.version=D.version;if(D.description)u.description=D.description;if(D.package_name)u.package_name=D.package_name;if(D.package_version)u.package_version=D.package_version;if(D.package_id)u.package_id=D.package_id;if(u.kind=D.kind,D.derivation)u.derivation=D.derivation;if(D.baseDefinition&&D.type!=="Element")u.base=D.baseDefinition;if(D.abstract)u.abstract=D.abstract;if(u.class=Hu(D),F?.package_meta)u.package_meta=F.package_meta;return u}function Hu(D){if(D.kind==="resource"&&D.derivation==="constraint")return"profile";if(D.type==="Extension")return"extension";return D.kind||"unknown"}function qu(D){return(D.differential?.element||[]).filter((u)=>u.path.includes("."))}function D6(D){let u=Object.entries(D).sort((B,C)=>{let $=B[1].index??1/0,Z=C[1].index??1/0;return $-Z}),E={};for(let[B,C]of u)if(C.elements)E[B]={...C,elements:D6(C.elements)};else E[B]=C;return E}function j0(D,F=new WeakSet){if(Array.isArray(D))return D.map((u)=>j0(u,F));if(D&&typeof D==="object"){if(F.has(D))return"[Circular Reference]";F.add(D);let u={},E=Object.keys(D);for(let B of E)if(B==="elements"&&D[B])u[B]=D6(j0(D[B],F));else if(B==="required"&&Array.isArray(D[B]))u[B]=[...D[B]].sort();else u[B]=j0(D[B],F);return u}return D}function I0(D,F){if(D.kind==="primitive-type")return j0(e3(D,F));let u=e3(D,F),E=qu(D),B=[u],C=[],$=[...E],Z=0;while($.length>0){let z=$.shift();if(L2(z)){let q=N2(z);$.unshift(...q),Z++;continue}let O=R2(z),A=j2(C,O),J=zF(C,A),_={...I2(z,D),index:Z++};B=YF(B,J,_),C=A}let Q=zF(C,[]);if(B=YF(B,Q,{index:Z}),B.length!==1)throw Error(`Invalid stack state: expected 1 element, got ${B.length}`);return j0(B[0])}var w2=(D,F)=>{if(!F)F={name:"undefined",version:"undefined"};return{...D,package_meta:D.package_meta||F,name:D.name,url:D.url,base:D.base}};function T2(D){return D.identifier.kind==="binding"}var b2=async(D,F,u)=>{let E=await D.search({}),B={};for(let W of E){let _=W.url;if(!_)continue;B[_]=W}let C={};for(let W of E)if(W.resourceType==="StructureDefinition"){let _=W.url;C[_]=W}let $={},Z={},[Q,z]=[0,0];for(let W of Object.values(C)){try{let _=w2(I0(W),u);$[_.url]=_,Z[_.name]=_.url,Q++}catch(_){F?.warn(`Failed to convert StructureDefinition ${W.name||W.id}: ${_ instanceof Error?_.message:String(_)}`),z++}F?.success(`FHIR Schema conversion completed: ${Q}/${Object.values(C).length} successful, ${z} failed`)}let O={};for(let W of E)if(W.resourceType==="ValueSet"){if(!W.package_meta)W.package_meta=u;O[W.url]=W}let A={};for(let W of Object.values($))if(W.kind==="complex-type")A[W.url]=W;return{...D,appendFs(W){let _=w2(W);$[_.url]=_,Z[_.name]=_.url},resolveFs:(W)=>$[W],resolveFsGenealogy:(W)=>{let _=$[W];if(_===void 0)throw Error(`Failed to resolve FHIR Schema genealogy for '${W}'`);let q=[_];while(_?.base)if(_=$[_.base]||$[Z[_.base]],q.push(_),_===void 0)throw Error(`Failed to resolve FHIR Schema genealogy for '${W}'`);return q},ensureCanonicalUrl:(W)=>Z[W]||W,allSd:()=>Object.values(C),resolveSd:(W)=>C[W],allFs:()=>Object.values($),allVs:()=>Object.values(O),resolveVs:(W)=>O[W],complexTypeDict:()=>A,resolveAny:(W)=>B[W]}};var x2=(D,F)=>{let[u,...E]=F;if(u===void 0)return[];return D.map((B)=>{if(!B.elements)return;let C=B.elements?.[u];for(let $ of E)C=C?.elements?.[$];return C}).filter((B)=>B!==void 0)};function P2(D){let F=D.reverse().reduce((u,E)=>({...u,...E}),{});return F.elements=void 0,F}function S2(D){let F=D.split("|")[0];return F?F:D}function _u(D){if(D.derivation==="constraint")return"profile";if(D.kind==="primitive-type")return"primitive-type";if(D.kind==="complex-type")return"complex-type";if(D.kind==="resource")return"resource";return"resource"}function TD(D){return{kind:_u(D),package:D.package_meta.name,version:D.package_meta.version,name:D.name,url:D.url}}function L0(D,F){let u=F.join(".");return{kind:"nested",package:D.package_meta.name,version:D.package_meta.version,name:u,url:`${D.url}#${u}`}}function N0(D,F){F=S2(F);let u=D.resolveVs(F),E="unknown",B=F.split("/"),C=B[B.length-1];if(C&&C.length>0)E=C.split(/[-_]/).map(($)=>$.charAt(0).toUpperCase()+$.slice(1).toLowerCase()).join("");if(E==="unknown"&&u?.id&&!/^[a-zA-Z0-9_-]{20,}$/.test(u.id))E=u.id;return{kind:"value-set",package:u?.package_meta.name,version:u?.package_meta.version,name:E,url:F}}function OF(D,F,u){let E=F.join("."),[B,C,$]=u?[{name:"shared",version:"1.0.0"},u,`urn:fhir:binding:${u}`]:[D.package_meta,`${D.name}.${E}_binding`,`${D.url}#${E}_binding`];return{kind:"binding",package:B.name,version:B.version,name:C,url:$}}async function u6(D,F){let u=TD(F),E=F.package_meta;if(u.kind!=="profile")throw Error(`Expected profile, got ${u.kind} for ${F.name}`);let B;if(F.base){let O=F.base.includes("/")?F.base:`http://hl7.org/fhir/StructureDefinition/${F.base}`,A=F.base.split("/").pop()||F.base,J=await Mu(O,D),W=O.startsWith("http://hl7.org/fhir/");B={kind:J,package:W?"hl7.fhir.r4.core":F.package_meta.name||"undefined",version:W?"4.0.1":F.package_meta.version||"undefined",name:A,url:O}}let C={identifier:u,base:B,dependencies:B?[B]:[]};if(F.description)C.description=F.description;let $=Vu(F);if(Object.keys($).length>0)C.metadata=$;if(F.elements){let O=await JF(D,F,[],F.elements);if(O&&Object.keys(O).length>0)C.fields=O}let Z=await Ku(F,D);if(Object.keys(Z).length>0)C.constraints=Z;let Q=await Ru(F,D);if(Q.length>0)C.extensions=Q;let z=Uu(F);if(z.length>0)C.validation=z;return C}async function Mu(D,F){try{let u=F.resolveFs(D);if(!u)return"resource";if(u){if(u.derivation==="constraint")return"profile";if(u.kind==="resource")return"resource";if(u.kind==="complex-type")return"complex-type"}}catch(u){console.warn(`Could not resolve base schema ${D}:`,u)}if(D.includes("StructureDefinition/")&&!D.startsWith("http://hl7.org/fhir/StructureDefinition/"))return"profile";return"resource"}function Vu(D){let F={},u=D.package_meta;if(D.publisher)F.publisher=D.publisher;if(D.contact)F.contact=D.contact;if(D.copyright)F.copyright=D.copyright;if(D.purpose)F.purpose=D.purpose;if(D.experimental!==void 0)F.experimental=D.experimental;if(D.date)F.date=D.date;if(D.jurisdiction)F.jurisdiction=D.jurisdiction;if(u?.name)F.package=u.name;else if(D.package_meta.name)F.package=D.package_meta.name;return F}async function Ku(D,F){let u={};if(!D.elements)return u;for(let[E,B]of Object.entries(D.elements)){let C={};if(B.min!==void 0)C.min=B.min;if(B.max!==void 0)C.max=String(B.max);if(B.mustSupport)C.mustSupport=!0;if(B.fixedValue!==void 0)C.fixedValue=B.fixedValue;if(B.patternValue!==void 0)C.patternValue=B.patternValue;if(B.binding)C.binding={strength:B.binding.strength,valueSet:B.binding.valueSet??""};if(B.type&&Array.isArray(B.type)&&B.type.length>0)C.types=B.type.map(($)=>{let Z={code:$.code};if($.profile)Z.profile=$.profile;if($.targetProfile)Z.targetProfile=$.targetProfile;return Z});if(B.slicing)C.slicing={discriminator:B.slicing.discriminator??[],rules:String(B.slicing),ordered:B.slicing.ordered};if(Object.keys(C).length>0)u[E]=C}return u}async function Ru(D,F){let u=[];if(!D.elements)return u;for(let[E,B]of Object.entries(D.elements))if(E.includes("extension")&&B.type&&Array.isArray(B.type)){for(let C of B.type)if(C.code==="Extension"&&C.profile)u.push({path:E,profile:C.profile,min:B.min,max:String(B.max),mustSupport:B.mustSupport})}return u}function Uu(D){let F=[];if(!D.elements)return F;for(let[u,E]of Object.entries(D.elements))if(E.constraint&&Array.isArray(E.constraint))for(let B of E.constraint)F.push({path:u,key:B.key,severity:B.severity,human:B.human,expression:B.expression});return F}function E6(D,F,u){let E=u[u.length-1],B=u.slice(0,-1),C=D.resolveFsGenealogy(F.url).flatMap(($)=>{if(B.length===0)return $.required||[];if(!$.elements)return[];let Z=$;for(let Q of B)Z=Z?.elements?.[Q];return Z?.required||[]});return new Set(C).has(E)}function B6(D,F,u){let E=u[u.length-1];if(!E)throw Error(`Internal error: fieldName is missing for path ${u.join("/")}`);let B=u.slice(0,-1),C=D.resolveFsGenealogy(F.url).flatMap(($)=>{if(B.length===0)return $.excluded||[];if(!$.elements)return[];let Z=$;for(let Q of B)Z=Z?.elements?.[Q];return Z?.excluded||[]});return new Set(C).has(E)}var ju=(D,F,u)=>{if(!D.refers)return;return D.refers.map((E)=>{let B=F.ensureCanonicalUrl(E),C=F.resolveFs(B);return TD(C)})};function v2(D,F,u,E,B){if(u.elementReference){let C=u.elementReference.filter(($,Z)=>Z%2===1).map(($)=>$).filter(($)=>$!=="elements");if(C.length>0)return L0(D,C)}if(u.type){let C=u.type.includes("/")?u.type:`http://hl7.org/fhir/StructureDefinition/${u.type}`,$=u.type.match(/^[a-z]/)?"primitive-type":"complex-type",Z=C.startsWith("http://hl7.org/fhir/");return{kind:$,package:Z?"hl7.fhir.r4.core":B?.name||"undefined",version:Z?"4.0.1":B?.version||"undefined",name:u.type,url:C}}return}var WF=(D,F,u,E)=>{let B,C;if(E.binding){if(B=OF(F,u,E.binding.bindingName),E.binding.strength==="required"&&E.type==="code")C=f2(E,D)}return{type:v2(F,u,E,D,F.package_meta),required:E6(D,F,u),excluded:B6(D,F,u),reference:ju(E,D,F.package_meta),array:E.array||!1,min:E.min,max:E.max,choices:E.choices,choiceOf:E.choiceOf,binding:B,enum:C}};function w0(D){let F=D.type==="BackboneElement",u=D.type==="Element"&&D.elements!==void 0&&Object.keys(D.elements).length>0,E=D.type===void 0&&D.choiceOf===void 0&&D.elements!==void 0&&Object.keys(D.elements).length>0;return F||u||E}function AF(D,F,u,E){return{type:L0(F,u),array:E.array||!1,required:E6(D,F,u),excluded:B6(D,F,u)}}function Iu(D,F){try{let u=S2(D)||D,E=F.resolveVs(u);if(!E)return;if(E.expansion?.contains)return E.expansion.contains.map((C)=>({system:C.system,code:C.code,display:C.display}));let B=[];if(E.compose?.include){for(let C of E.compose.include)if(C.concept)for(let $ of C.concept)B.push({system:C.system,code:$.code,display:$.display});else if(C.system&&!C.filter)try{let $=F.resolveAny(C.system);if($?.concept){let Z=(Q,z)=>{for(let O of Q)if(B.push({system:z,code:O.code,display:O.display}),O.concept)Z(O.concept,z)};Z($.concept,C.system)}}catch{}}return B.length>0?B:void 0}catch{return}}var C6=100;function f2(D,F){if(!D.binding)return;let{strength:u,valueSet:E}=D.binding;if(!E)return;if(!(u==="required"||u==="extensible"&&(D.type==="code"||D.type==="Coding")||u==="preferred"&&(D.type==="code"||D.type==="Coding")))return;let C=Iu(E,F);if(!C||C.length===0)return;let $=C.map((Z)=>Z.code).filter((Z)=>Z&&typeof Z==="string"&&Z.trim().length>0);if($.length>C6){console.warn(`Value set ${E} has more than ${C6} codes, which may cause issues with code generation.`);return}return $.length>0?$:void 0}async function Lu(D,F,u,E){if(!u.binding?.valueSet)return;let B=OF(D,F,u.binding.bindingName),C=v2(D,F,u,E),$=N0(E,u.binding.valueSet),Z=[];if(C)Z.push(C);Z.push($);let Q=f2(u,E);return{identifier:B,type:C,valueset:$,strength:u.binding.strength,enum:Q,dependencies:Z}}async function k2(D,F){let u=new Set;if(!F.elements)return[];let E=[];async function B(Z,Q){for(let[z,O]of Object.entries(Z)){let A=[...Q,z],J=A.join(".");if(u.has(J))continue;if(u.add(J),O.binding){let W=await Lu(F,A,O,D);if(W)E.push(W)}if(O.elements)await B(O.elements,A)}}await B(F.elements,[]),E.sort((Z,Q)=>Z.identifier.name.localeCompare(Q.identifier.name));let C=[],$=new Set;for(let Z of E)if(!$.has(Z.identifier.url))$.add(Z.identifier.url),C.push(Z);return C}function $6(D,F,u){let E=[];for(let[B,C]of Object.entries(u)){let $=[...F,B];if(w0(C))E.push([$,C]);if(C.elements)E.push(...$6(D,$,C.elements))}return E}async function Nu(D,F,u,E,B){let C={};for(let[$,Z]of Object.entries(u)){let Q=[...F,$];if(w0(Z))C[$]=AF(E,D,Q,Z);else C[$]=WF(E,D,Q,Z)}return C}async function y2(D,F){if(!F.elements)return;let E=$6(F,[],F.elements).filter(([C,$])=>$.elements&&Object.keys($.elements).length>0),B=[];for(let[C,$]of E){let Z=L0(F,C),Q;if($.type==="BackboneElement"||!$.type)Q={kind:"complex-type",package:F.package_meta.name,version:F.package_meta.version,name:"BackboneElement",url:"http://hl7.org/fhir/StructureDefinition/BackboneElement"};else Q={kind:"complex-type",package:F.package_meta.name,version:F.package_meta.version,name:$.type,url:`http://hl7.org/fhir/StructureDefinition/${$.type}`};let z=await Nu(F,C,$.elements,D,F.package_meta),O={identifier:Z,base:Q,fields:z};B.push(O)}return B.sort((C,$)=>C.identifier.url.localeCompare($.identifier.url)),B.length===0?void 0:B}function h2(D){let F=[];for(let u of D){if(u.base)F.push(u.base);for(let E of Object.values(u.fields||{})){if("type"in E&&E.type)F.push(E.type);if("binding"in E&&E.binding)F.push(E.binding)}}return F}async function JF(D,F,u,E){if(!E)return;let B=D.resolveFsGenealogy(F.url),C={};for(let[Z,Q]of Object.entries(E)){let z=[...u,Z],O=x2(B,z),A=P2(O);C[Z]={elem:Q,elemSnapshot:A,path:z}}for(let[Z,{elem:Q,elemSnapshot:z,path:O}]of Object.entries(C))for(let A of Q?.choices||[])if(!C[A]){let J=[...u,A],W=x2(B,J),_=P2(W);C[A]={elem:void 0,elemSnapshot:_,path:J}}let $={};for(let[Z,{elem:Q,elemSnapshot:z,path:O}]of Object.entries(C))if(w0(z))$[Z]=AF(D,F,O,z);else $[Z]=WF(D,F,O,z);return $}function Z6(D){let F=[];for(let u of Object.values(D)){if("type"in u&&u.type)F.push(u.type);if("binding"in u&&u.binding)F.push(u.binding)}return F}function wu(D){let F=new Set,u=[];for(let E of D){let B=E.url;if(!F.has(B))F.add(B),u.push(E)}return u.sort((E,B)=>E.name.localeCompare(B.name)),u}function Tu(D,F){if(D.base==="Extension"||D.base==="http://hl7.org/fhir/StructureDefinition/Extension")return!0;if(D.url?.includes("/extension/")||D.url?.includes("-extension"))return!0;if(D.name?.toLowerCase().includes("extension"))return!0;if(D.type==="Extension")return!0;return!1}async function bu(D,F,u){try{let E=TD(D);E.kind="value-set";let B={identifier:E,description:D.description};if(D.elements){let C=[];for(let[$,Z]of Object.entries(D.elements))if("code"in Z&&Z.code)C.push({code:Z.code,display:Z.short||Z.definition,system:Z.system});if(C.length>0)B.concept=C}return B}catch(E){return console.warn(`Failed to transform value set ${D.name}: ${E}`),null}}async function xu(D,F,u){try{let E=TD(D),B;if(D.base&&D.base!=="Extension"){let Z=D.base.includes("/")?D.base:`http://hl7.org/fhir/StructureDefinition/${D.base}`;B={kind:"complex-type",package:"hl7.fhir.r4.core",version:"4.0.1",name:D.base.split("/").pop()||D.base,url:Z}}else B={kind:"complex-type",package:"hl7.fhir.r4.core",version:"4.0.1",name:"Extension",url:"http://hl7.org/fhir/StructureDefinition/Extension"};let C={identifier:E,base:B,description:D.description,dependencies:[],metadata:{isExtension:!0}};if(B)C.dependencies.push(B);if(D.elements){let Z=await JF(F,D,[],D.elements);if(Z&&Object.keys(Z).length>0)C.fields=Z,C.dependencies.push(...Z6(Z))}let $=await y2(F,D);if($&&$.length>0)C.nested=$,C.dependencies.push(...h2($));return C.dependencies=wu(C.dependencies),C.dependencies=C.dependencies.filter((Z)=>Z.url!==E.url),C}catch(E){return console.warn(`Failed to transform extension ${D.name}: ${E}`),null}}function Pu(D,F,u,E){let B=[];if(F)B.push(F);if(u)B.push(...Z6(u));if(E)B.push(...h2(E));let C={};for(let Q of B){if(Q.url===D.url)continue;C[Q.url]=Q}let $=new Set(E?.map((Q)=>Q.identifier.url)),Z=Object.values(C).filter((Q)=>!(Q.kind==="nested"&&$.has(Q.url))).sort((Q,z)=>Q.name.localeCompare(z.name));return Z.length>0?Z:void 0}async function Su(D,F){let u=TD(F),E;if(F.base&&F.type!=="Element"){let z=D.resolveFs(D.ensureCanonicalUrl(F.base));if(!z)throw Error(`Base resource not found '${F.base}' for '${F.url}'`);E=TD(z)}let B=await JF(D,F,[],F.elements),C=await y2(D,F),$=Pu(u,E,B,C),Z={identifier:u,base:E,fields:B,nested:C,description:F.description,dependencies:$},Q=await k2(D,F);return[Z,...Q]}async function X6(D,F){let u=[],E=TD(F);if(E.kind==="profile"){let B=await u6(D,F);u.push(B);let C=await k2(D,F);return u.push(...C),u}if(E.kind==="value-set"||F.kind==="value-set"){let B=await bu(F,D,F.package_meta);if(B)u.push(B);return u}if(Tu(F,E)){let B=await xu(F,D,F.package_meta);if(B)u.push(B);return u}return await Su(D,F)}async function vu(D,F){try{let u=await F.resolve(D);if(!u||u.resourceType!=="CodeSystem")return;let E=[],B=(C,$)=>{for(let Z of C)if(E.push({system:$,code:Z.code,display:Z.display}),Z.concept)B(Z.concept,$)};if(u.concept)B(u.concept,D);return E}catch{return}}async function Q6(D,F){let u=[];if(D.concept){for(let E of D.concept)u.push({system:D.system,code:E.code,display:E.display});return u}if(D.system&&!D.filter){let E=await vu(D.system,F);if(E)u.push(...E)}if(D.valueSet)for(let E of D.valueSet)try{let B=await F.resolve(E);if(B){let C=await z6(B,F);if(C)u.push(...C)}}catch{}return u}async function z6(D,F){try{let u=[];if(D.compose){if(D.compose.include)for(let E of D.compose.include){let B=await Q6(E,F);u.push(...B)}if(D.compose.exclude){let E=new Set;for(let B of D.compose.exclude){let C=await Q6(B,F);for(let $ of C)E.add(`${$.system}|${$.code}`)}return u.filter((B)=>!E.has(`${B.system}|${B.code}`))}}return u.length>0?u:void 0}catch(u){console.error("Error extracting ValueSet concepts:",u);return}}async function Y6(D,F,u){let B={identifier:N0(D.url,D)};if(D.description)B.description=D.description;let C=await z6(D,F);if(C&&C.length>0)B.concept=C;else if(D.compose)B.compose=D.compose;if(D.compose){let $=[],Z=(Q)=>{for(let z of Q){if(z.system)$.push({kind:"value-set",package:u?.name||"undefined",version:u?.version||"undefined",name:z.system.split("/").pop()||"unknown",url:z.system});if(z.valueSet)for(let O of z.valueSet)$.push(N0(F,O))}};if(D.compose.include)Z(D.compose.include);if(D.compose.exclude)Z(D.compose.exclude)}return B}class gD{manager;options;cacheConfig;cache;logger;constructor(D={},F){this.options={verbose:!1,...D},this.manager=D.manager||pD({packages:[],workingDir:"tmp/fhir"}),this.cacheConfig=F,this.logger=D.logger||jD({verbose:this.options.verbose,prefix:"TypeSchema"})}async initializeCache(){if(this.cacheConfig&&!this.cache)this.cache=new $0(this.cacheConfig),await this.cache.initialize()}async registerFromPackageMetas(D){let F=D.map((u)=>`${u.name}${u.version}`);return this.logger.step(`Loading FHIR packages: ${F.join(", ")}`),await this.manager.init(),b2(this.manager)}generateFhirSchemas(D){this.logger.progress(`Converting ${D.length} StructureDefinitions to FHIRSchemas`);let F=this.applyStructureDefinitionTreeshaking(D),u=[],E=0,B=0;for(let C of F)try{let $=I0(C);u.push($),E++,this.logger.debug(`Converted StructureDefinition: ${C.name||C.id} (${C.resourceType})`)}catch($){B++,this.logger.warn(`Failed to convert StructureDefinition ${C.name||C.id}: ${$ instanceof Error?$.message:String($)}`)}return this.logger.success(`FHIR Schema conversion completed: ${E}/${F.length} successful, ${B} failed`),u}async generateValueSetSchemas(D,F){if(D.length>0)this.logger.debug(`${D.length} ValueSets available for enum extraction`);let u=[];if(D.length>0){this.logger.progress(`Converting ${D.length} ValueSets to TypeSchema`);let E=0,B=0;for(let C of D)try{let $=await Y6(C,await b2(this.manager),F);if($)u.push($),E++,this.logger.debug(`Converted ValueSet: ${C.name||C.id}`)}catch($){B++,this.logger.warn(`Failed to convert ValueSet ${C.name||C.id}: ${$ instanceof Error?$.message:String($)}`)}this.logger.success(`ValueSet conversion completed: ${E}/${D.length} successful, ${B} failed`)}return u}async generateFromPackage(D,F){if(await this.initializeCache(),this.cache&&!(this.cacheConfig?.forceRegenerate??!1)){let C=this.cache.getByPackage(D);if(C.length>0)return this.logger.info(`Using cached TypeSchemas for package: ${D} (${C.length} schemas)`),C}let u={name:D,version:F||"latest"},E=await this.registerFromPackageMetas([u]),B=[...(await Promise.all(E.allFs().map(async(C)=>await X6(E,C)))).flat(),...await this.generateValueSetSchemas(E.allVs(),u)];if(this.cache)for(let C of B)await this.cache.set(C);return B}applyStructureDefinitionTreeshaking(D){let F=this.options.treeshake;if(!F||F.length===0)return D;this.logger.info(`Applying treeshaking filter for ResourceTypes: ${F.join(", ")}`);let u=new Map,E=new Map,B=new Map;for(let z of D){let O=z.name||z.id;if(O)u.set(O,z),E.set(O,new Set),B.set(O,new Set)}for(let z of D){let O=z.name||z.id;if(!O)continue;let{realDeps:A,refTargets:J}=this.extractStructureDefinitionDependenciesWithReferences(z);E.set(O,new Set(A)),B.set(O,new Set(J))}let C=new Set;for(let z of F)if(u.has(z))C.add(z);else this.logger.warn(`ResourceType '${z}' not found in structure definitions`);let $=(z,O=new Set)=>{if(O.has(z)||!E.has(z))return;O.add(z);let A=E.get(z)||new Set;for(let J of Array.from(A))if(u.has(J))C.add(J),$(J,O)};for(let z of Array.from(C))$(z);let Z=D.filter((z)=>{let O=z.name||z.id;return O&&C.has(O)}),Q=new Set;for(let z of D){let O=z.name||z.id;if(O&&!C.has(O)){if(Array.from(B.values()).some((J)=>J.has(O)))Q.add(O)}}if(Q.size>0)this.logger.info(`Excluded reference-only targets: ${Array.from(Q).join(", ")}`);return this.logger.success(`Treeshaking completed: kept ${Z.length}/${D.length} structure definitions`),Z}extractStructureDefinitionDependenciesWithReferences(D){let F=new Set,u=new Set;if(D.baseDefinition){let E=this.extractResourceNameFromUrl(D.baseDefinition);if(E)F.add(E)}if(D.snapshot?.element||D.differential?.element){let E=D.snapshot?.element||D.differential?.element;for(let B of E)if(B.type)for(let C of B.type){if(C.code){if(F.add(C.code),C.code==="Reference"&&C.targetProfile)for(let $ of C.targetProfile){let Z=this.extractResourceNameFromUrl($);if(Z)u.add(Z)}}if(C.profile)for(let $ of C.profile){let Z=this.extractResourceNameFromUrl($);if(Z)F.add(Z)}}}return{realDeps:Array.from(F),refTargets:Array.from(u)}}extractResourceNameFromUrl(D){let F=D.match(/\/([^/]+)$/);return F?F[1]??null:null}}import{readFile as fu}from"node:fs/promises";class T0{options;constructor(D={}){this.options={format:"auto",validate:!0,strict:!1,...D}}async parseFromFile(D){let F=await fu(D,"utf-8"),u=this.options.format==="auto"?this.detectFormat(F,D):this.options.format;return this.parseFromString(F,u)}async parseFromString(D,F){let u=F||this.detectFormat(D),E;if(u==="ndjson")E=this.parseNDJSON(D);else E=this.parseJSON(D);if(this.options.validate)this.validateSchemas(E);return E}async parseFromFiles(D){let F=[];for(let u of D){let E=await this.parseFromFile(u);F.push(...E)}return F}parseSchema(D){if(!D.identifier)throw Error("TypeSchema must have an identifier");if(!this.isValidIdentifier(D.identifier))throw Error("TypeSchema identifier is invalid");return D}findByIdentifier(D,F){return D.filter((u)=>this.matchesIdentifier(u.identifier,F))}findByUrl(D,F){return D.find((u)=>u.identifier.url===F)}findByKind(D,F){return D.filter((u)=>u.identifier.kind===F)}findByPackage(D,F){return D.filter((u)=>u.identifier.package===F)}detectFormat(D,F){if(F){if(F.endsWith(".ndjson"))return"ndjson";if(F.endsWith(".json"))return"json"}let u=D.trim();if(u.includes(`
93
+ `)}}var $D=x0(u2(),1);class s0{options;constructor(D={}){this.options={timestamp:!1,verbose:!1,...D}}formatMessage(D,F,u){let E=this.options.timestamp?`${$D.default.gray(new Date().toLocaleTimeString())} `:"",B=this.options.prefix?`${$D.default.cyan(`[${this.options.prefix}]`)} `:"";return`${E}${u(D)} ${B}${F}`}success(D){console.log(this.formatMessage("✅",D,$D.default.green))}error(D,F){if(console.error(this.formatMessage("❌",D,$D.default.red)),F&&this.options.verbose){if(console.error($D.default.red(` ${F.message}`)),F.stack)console.error($D.default.gray(F.stack))}}warn(D){console.warn(this.formatMessage("⚠️",D,$D.default.yellow))}info(D){console.log(this.formatMessage("ℹ️",D,$D.default.blue))}debug(D){if(this.options.verbose)console.log(this.formatMessage("\uD83D\uDC1B",D,$D.default.magenta))}step(D){console.log(this.formatMessage("\uD83D\uDE80",D,$D.default.cyan))}progress(D){console.log(this.formatMessage("⏳",D,$D.default.blue))}plain(D,F=(u)=>u){let u=this.options.timestamp?`${$D.default.gray(new Date().toLocaleTimeString())} `:"",E=this.options.prefix?`${$D.default.cyan(`[${this.options.prefix}]`)} `:"";console.log(`${u}${E}${F(D)}`)}dim(D){this.plain(D,$D.default.gray)}child(D){return new s0({...this.options,prefix:this.options.prefix?`${this.options.prefix}:${D}`:D})}configure(D){this.options={...this.options,...D}}}var B0=new s0;function r0(D){B0.success(D)}function KD(D,F){B0.error(D,F)}function E2(D){B0.warn(D)}function a0(D){B0.info(D)}function B2(D){B0.step(D)}function b3(D){B0.dim(D)}function C2(D){B0.configure(D)}function jD(D={}){return new s0(D)}function $2(D){console.log(),console.log($D.default.cyan($D.default.bold(`━━━ ${D} ━━━`)))}function Z2(D,F,u){let E=D;if(F)E+=` ${$D.default.gray(`(${F}ms)`)}`;if(r0(E),u)Object.entries(u).forEach(([B,C])=>{b3(` ${B}: ${C}`)})}function C0(D,F="•"){D.forEach((u)=>{console.log($D.default.gray(` ${F} ${u}`))})}import{existsSync as nu}from"node:fs";import{resolve as iu}from"node:path";import{existsSync as e0,mkdirSync as x3}from"node:fs";import{readdir as P3,readFile as c8,stat as l8,unlink as S3,writeFile as o8}from"node:fs/promises";import{join as X2}from"node:path";class $0{cache=new Map;config;cacheDir;constructor(D){if(this.config={enablePersistence:!0,cacheDir:".typeschema-cache",maxAge:86400000,validateCached:!0,...D},this.config.enablePersistence&&this.config.cacheDir)this.cacheDir=this.config.cacheDir}async set(D){let F=this.generateKey(D.identifier);if(this.cache.set(F,D),this.config.enablePersistence&&this.cacheDir)await this.persistSchema(D)}get(D){let F=this.generateKey(D);return this.cache.get(F)||null}getByUrl(D){for(let F of this.cache.values())if(F.identifier.url===D)return F;return null}has(D){let F=this.generateKey(D);return this.cache.has(F)}hasByUrl(D){for(let F of this.cache.values())if(F.identifier.url===D)return!0;return!1}delete(D){let F=this.generateKey(D);return this.cache.delete(F)}deleteByUrl(D){for(let[F,u]of this.cache.entries())if(u.identifier.url===D)return this.cache.delete(F);return!1}getByPackage(D){let F=[];for(let u of this.cache.values())if(u.identifier.package===D)F.push(u);return F}getByKind(D){let F=[];for(let u of this.cache.values())if(u.identifier.kind===D)F.push(u);return F}setMany(D){for(let F of D)this.set(F)}clear(){this.cache.clear()}generateKey(D){return`${D.package}:${D.version}:${D.kind}:${D.name}`}async initialize(){if(this.config.enablePersistence&&this.cacheDir){if(!e0(this.cacheDir))x3(this.cacheDir,{recursive:!0});await this.loadFromDisk()}}async loadFromDisk(){if(!this.cacheDir||!e0(this.cacheDir))return;try{let F=(await P3(this.cacheDir)).filter((u)=>u.endsWith(".typeschema.json"));for(let u of F){let E=X2(this.cacheDir,u),B=await l8(E);if(this.config.maxAge){if(Date.now()-B.mtimeMs>this.config.maxAge){await S3(E);continue}}try{let C=await c8(E,"utf-8"),$=JSON.parse(C);if(this.config.validateCached){if(!$.schema?.identifier)continue}let Z=this.generateKey($.schema.identifier);this.cache.set(Z,$.schema)}catch(C){console.warn(`Failed to load cached schema from ${u}:`,C)}}}catch(D){console.warn("Failed to load cached schemas from disk:",D)}}async persistSchema(D){if(!this.cacheDir)return;if(!e0(this.cacheDir))x3(this.cacheDir,{recursive:!0});let F={schema:D,timestamp:Date.now(),version:D.identifier.version},u=`${D.identifier.package}-${D.identifier.version}-${D.identifier.kind}-${D.identifier.name}.typeschema.json`.replace(/[^a-zA-Z0-9.-]/g,"_"),E=X2(this.cacheDir,u);try{await o8(E,JSON.stringify(F,null,2),"utf-8")}catch(B){console.warn(`Failed to persist schema to ${E}:`,B)}}async clearDisk(){if(!this.cacheDir||!e0(this.cacheDir))return;try{let F=(await P3(this.cacheDir)).filter((u)=>u.endsWith(".typeschema.json"));for(let u of F)await S3(X2(this.cacheDir,u))}catch(D){console.warn("Failed to clear cache directory:",D)}}}import{createHash as n8}from"crypto";var Q2=(D)=>{let F=`${D.packageName}@${D.packageVersion}:${D.filePath}`;return n8("sha256").update(F).digest("base64url")};var W0=()=>{let D={},F={};return{generateId:Q2,get:(B)=>D[B],set:(B,C)=>{if(D[B]=C,C.url){if(!F[C.url])F[C.url]=[];let $=F[C.url];if($&&!$.includes(B))$.push(B)}},has:(B)=>(B in D),clear:()=>{Object.keys(D).forEach((B)=>delete D[B]),Object.keys(F).forEach((B)=>delete F[B])},size:()=>Object.keys(D).length,getIdsByUrl:(B)=>F[B]||[],createReference:(B,C)=>({id:B,resourceType:C.resourceType}),getAllReferences:()=>D}};import*as K2 from"path";import*as o3 from"fs/promises";var v3="https://fs.get-ig.org/pkgs/";import*as DF from"fs/promises";import*as f3 from"path";var A0=async(D)=>{try{return await DF.access(D),!0}catch{return!1}},G0=async(D)=>{try{await DF.mkdir(D,{recursive:!0})}catch{}},FF=async(D)=>{let F=f3.join(D,".index.json");return A0(F)};import{exec as i8}from"child_process";import{promisify as t8}from"util";var k3=t8(i8);async function z2(){try{return await k3("bun --version"),"bun"}catch{try{return await k3("npm --version"),"npm"}catch{return null}}}import*as h3 from"fs/promises";import*as d3 from"path";import{exec as s8}from"child_process";import{promisify as r8}from"util";var y3=r8(s8),uF=async(D,F,u)=>{await G0(F);let E=d3.join(F,"package.json");if(!await A0(E))await h3.writeFile(E,JSON.stringify({name:"fhir-canonical-manager-workspace",version:"1.0.0",private:!0,dependencies:{}},null,2));let B=await z2();if(!B)throw Error("No package manager found. Please install npm or bun.");for(let C of D)try{if(B==="bun"){let $={...process.env,HOME:F,NPM_CONFIG_USERCONFIG:"/dev/null"},Z=u?`cd ${F} && bun add ${C} --registry ${u}`:`cd ${F} && bun add ${C}`;await y3(Z,{env:$,maxBuffer:10485760})}else{let $=u?`cd ${F} && npm add ${C} --registry ${u}`:`cd ${F} && npm add ${C}`;await y3($,{maxBuffer:10485760})}}catch($){throw console.error(`Failed to install package ${C}:`,$),$}};var EF=()=>{let D=W0();return{entries:{},packages:{},references:{},referenceManager:D}};import*as BF from"fs/promises";import*as J2 from"path";import*as Y2 from"fs/promises";import*as O2 from"path";import{createHash as p3}from"crypto";var U0=async(D)=>{try{let F=O2.join(D,"package-lock.json");try{let u=await Y2.readFile(F,"utf-8");return p3("sha256").update(u).digest("hex")}catch{let u=O2.join(D,"bun.lock"),E=await Y2.readFile(u,"utf-8");return p3("sha256").update(E).digest("hex")}}catch{return null}};var CF=async(D,F,u)=>{let E=await U0(u),B={entries:D.entries,packages:D.packages,references:D.referenceManager.getAllReferences(),packageLockHash:E||void 0},C=J2.join(F,"index.json");await BF.writeFile(C,JSON.stringify(B,null,2))},W2=async(D)=>{try{let F=J2.join(D,"index.json"),u=await BF.readFile(F,"utf-8");return JSON.parse(u)}catch{return null}};var g3=(D)=>{if(!D||typeof D!=="object")return!1;if(!D.filename||typeof D.filename!=="string")return!1;if(!D.resourceType||typeof D.resourceType!=="string")return!1;if(!D.id||typeof D.id!=="string")return!1;let F=["url","version","kind","type"];for(let u of F)if(D[u]!==void 0&&typeof D[u]!=="string")return!1;return!0},m3=(D)=>{if(!D||typeof D!=="object")return!1;if(!D["index-version"]||typeof D["index-version"]!=="number")return!1;if(!Array.isArray(D.files))return!1;return D.files.every((F)=>g3(F))},A2=(D,F)=>{try{let u=JSON.parse(D);if(!m3(u))return null;return u}catch{return null}};import*as c3 from"fs/promises";import*as G2 from"path";var $F=async(D,F,u)=>{let E=G2.join(D,".index.json");try{let B=await c3.readFile(E,"utf-8"),C=A2(B,E);if(!C)return;for(let $ of C.files){if(!$.url)continue;let Z=G2.join(D,$.filename),Q=u.referenceManager.generateId({packageName:F.name,packageVersion:F.version,filePath:Z});u.referenceManager.set(Q,{packageName:F.name,packageVersion:F.version,filePath:Z,resourceType:$.resourceType,url:$.url,version:$.version});let z={id:Q,resourceType:$.resourceType,indexVersion:C["index-version"],url:$.url,version:$.version,kind:$.kind,type:$.type,package:{name:F.name,version:F.version}};if(!u.entries[$.url])u.entries[$.url]=[];let O=u.entries[$.url];if(O)O.push(z)}}catch{}};import*as l3 from"fs/promises";import*as ZF from"path";var XF=async(D,F)=>{try{let u=ZF.join(D,"package.json"),E=await l3.readFile(u,"utf-8"),B=JSON.parse(E),C={id:{name:B.name,version:B.version},path:D,canonical:B.canonical,fhirVersions:B.fhirVersions};F.packages[B.name]=C,await $F(D,B,F);let $=ZF.join(D,"examples");if(await A0(ZF.join($,".index.json")))await $F($,B,F)}catch{}};import*as H2 from"fs/promises";import*as q2 from"path";var QF=async(D,F)=>{try{let u=await H2.readdir(D,{withFileTypes:!0});for(let E of u){if(!E.isDirectory())continue;let B=q2.join(D,E.name);if(E.name.startsWith("@")){let C=await H2.readdir(B,{withFileTypes:!0});for(let $ of C){if(!$.isDirectory())continue;let Z=q2.join(B,$.name);if(await FF(Z))await XF(Z,F)}}else if(await FF(B))await XF(B,F)}}catch{}};var _2=async(D,F,u,E)=>{if(F.package)try{return await E(D,{package:F.package.name,version:F.package.version})}catch{}return null};var M2={str:["structure"],struct:["structure"],def:["definition"],pati:["patient"],obs:["observation"],org:["organization"],pract:["practitioner"],med:["medication","medicinal"],req:["request"],resp:["response"],ref:["reference"],val:["value"],code:["codesystem","code"],cs:["codesystem"],vs:["valueset"],sd:["structuredefinition"]};var V2=(D,F)=>{if(F.length===0)return D;let u=F.map((E)=>E.toLowerCase());return D.filter((E)=>{if(!E.url)return!1;let C=[E.url.toLowerCase(),E.type?.toLowerCase()||"",E.resourceType?.toLowerCase()||""].join(" ");return u.every(($)=>{let Z=C.split(/[\/\-_\.\s]+/);if(Z.some((O)=>O.startsWith($)))return!0;let z=M2[$]||[];for(let O of z)if(Z.some((A)=>A.startsWith(O)))return!0;return C.includes($)})})};var pD=(D)=>{let{packages:F=[],workingDir:u}=D,E=D.registry?D.registry.endsWith("/")?D.registry:`${D.registry}/`:v3,B=K2.join(u,"node_modules"),C=K2.join(u,".fcm","cache"),$=EF(),Z=!1,Q=new Map,z=()=>{if(!Z)throw Error("CanonicalManager not initialized. Call init() first.")},O=async()=>{if(Z)return;await G0(u),await G0(C);let U=await U0(u),j=await W2(C);if(j&&j.packageLockHash===U&&U!==null)$.entries=j.entries,$.packages=j.packages,Object.entries(j.references).forEach(([l,g])=>{$.referenceManager.set(l,g)});else{if(j&&j.packageLockHash!==U)console.log("Package dependencies have changed, rebuilding index...");await uF(F,u,E),$=EF(),await QF(B,$),await CF($,C,u)}Z=!0},A=async()=>{$.entries={},$.packages={},$.referenceManager.clear(),Q.clear(),Z=!1},J=async()=>{return z(),Object.values($.packages).map((U)=>U.id)},W=async(...U)=>{if(U.length===0)return;let j=U.filter((S)=>!F.includes(S));if(j.length!==0)F.push(...j);if(!Z){await O();return}if(j.length===0)return;await uF(F,u,E),await QF(B,$),await CF($,C,u)},_=async(U,j)=>{if(z(),j?.sourceContext){let g=await _2(U,j.sourceContext,$,_);if(g)return g}let S=$.entries[U]||[];if(S.length===0)throw Error(`Cannot resolve canonical URL: ${U}`);let l=[...S];if(j?.package)l=l.filter((g)=>g.package?.name===j.package);if(j?.version)l=l.filter((g)=>g.version===j.version);if(l.length===0)throw Error(`No matching resource found for ${U} with given options`);return l[0]},q=async(U,j)=>{let S=await _(U,j);return P(S)},P=async(U)=>{z();let j=$.referenceManager.get(U.id);if(!j)throw Error(`Invalid reference ID: ${U.id}`);try{let S=await o3.readFile(j.filePath,"utf-8");return{...JSON.parse(S),id:U.id,resourceType:U.resourceType}}catch(S){throw Error(`Failed to read resource: ${S}`)}},c=async(U)=>{z();let j=[];if(U.url)j=$.entries[U.url]||[];else for(let S of Object.values($.entries))j.push(...S);if(U.kind!==void 0)j=j.filter((S)=>S.kind===U.kind);if(U.type!==void 0)j=j.filter((S)=>S.type===U.type);if(U.version!==void 0)j=j.filter((S)=>S.version===U.version);if(U.package){let S=U.package;j=j.filter((l)=>l.package?.name===S.name&&l.package?.version===S.version)}return j};return{init:O,destroy:A,packages:J,addPackages:W,resolveEntry:_,resolve:q,read:P,searchEntries:c,search:async(U)=>{let j=await c(U);return await Promise.all(j.map((l)=>P(l)))},smartSearch:async(U,j)=>{z();let S=await c({kind:j?.kind,package:j?.package});if(j?.resourceType)S=S.filter((l)=>l.resourceType===j.resourceType);if(j?.type)S=S.filter((l)=>l.type===j.type);return V2(S,U)},getSearchParametersForResource:async(U)=>{if(z(),Q.has(U))return Q.get(U);let S=(await c({})).filter((g)=>g.resourceType==="SearchParameter"),l=[];for(let g of S){let LD=await P(g),I=LD.base||[];if(Array.isArray(I)&&I.includes(U))l.push(LD)}return l.sort((g,LD)=>{let I=g.code||"",K=LD.code||"";return I.localeCompare(K)}),Q.set(U,l),l}}};function R2(D){let E=D.path.split(".").slice(1).map(($)=>({el:$}));if(E.length===0)return[];let B=E.length-1,C={};if(D.slicing){if(C.slicing={...D.slicing},D.min!==void 0)C.slicing.min=D.min;if(D.max&&D.max!=="*")C.slicing.max=parseInt(D.max)}if(D.sliceName){if(C.slice={},D.min!==void 0)C.slice.min=D.min;if(D.max&&D.max!=="*")C.slice.max=parseInt(D.max);C.sliceName=D.sliceName}return E[B]={...E[B],...C},E}function U2(D,F){let u=[],E=Math.min(D.length,F.length);for(let B=0;B<E;B++)if(D[B].el===F[B].el)u.push({el:D[B].el});else break;return u}function j2(D,F){let u=[];for(let E=0;E<F.length;E++)if(E<D.length&&D[E].el===F[E].el)u.push({...D[E],...F[E],...D[E].slicing&&!F[E].slicing&&{slicing:D[E].slicing}});else u.push(F[E]);return u}function a8(D,F){return!!(D.sliceName&&F.sliceName&&D.sliceName!==F.sliceName)}function n3(D){return{type:"exit-slice",sliceName:D.sliceName,...D.slicing&&{slicing:D.slicing},...D.slice&&{slice:D.slice}}}function e8(D,F,u,E){let B=[];for(let C=D-1;C>=F;C--){let $=u[C];if($.sliceName)B.push(n3($));B.push({type:"exit",el:$.el})}if(F>0){let C=u[F-1],$=E[F-1];if(a8(C,$))B.push(n3(C))}return B}function Du(D,F,u,E){let B=[];if(D>0&&D<=F){let C=u[D-1]||{},$=E[D-1];if($.sliceName&&(!C.sliceName||C.sliceName!==$.sliceName))B.push({type:"enter-slice",sliceName:$.sliceName});if(D===F)return B}for(let C=D;C<F;C++){let $=E[C];if(B.push({type:"enter",el:$.el}),$.sliceName)B.push({type:"enter-slice",sliceName:$.sliceName})}return B}function zF(D,F){let u=D.length,E=F.length,C=U2(D,F).length,$=e8(u,C,D,F),Z=Du(C,E,D,F);return[...$,...Z]}function t3(D,F){if(!D)return;return D.find((u)=>u.url===F)}function i3(D){return{Instant:"instant",Time:"time",Date:"date",DateTime:"dateTime",Decimal:"decimal",Boolean:"boolean",Integer:"integer",String:"string",Uri:"uri",Base64Binary:"base64Binary",Code:"code",Id:"id",Oid:"oid",UnsignedInt:"unsignedInt",PositiveInt:"positiveInt",Markdown:"markdown",Url:"url",Canonical:"canonical",Uuid:"uuid"}[D]||D}function Fu(D){let F={};for(let[u,E]of Object.entries(D))if(typeof u==="string"&&u.startsWith("pattern")){let B=i3(u.replace(/^pattern/,""));F.pattern={type:B,value:E}}else if(typeof u==="string"&&u.startsWith("fixed")){let B=i3(u.replace(/^fixed/,""));F.pattern={type:B,value:E}}else F[u]=E;if(F.pattern?.type&&!F.type)F.type=F.pattern.type;return F}function uu(D){let F=[];for(let u of D)if(u.targetProfile){let E=Array.isArray(u.targetProfile)?u.targetProfile:[u.targetProfile];F.push(...E)}return F.length>0?[...new Set(F)].sort():void 0}function Eu(D){if(!D.type||D.type.length===0)return D;if(D.type[0].code==="Reference"){let u=uu(D.type);return{...D,type:[{code:"Reference"}],...u&&{refers:u}}}return D}function Bu(D,F){let u=(C)=>{let $={strength:C.strength,...C.valueSet&&{valueSet:C.valueSet}},Z=t3(C.extension,"http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName");if(Z?.valueString)$.bindingName=Z.valueString;return $};if(D.choices){let{binding:C,...$}=D;return $}if(D.choiceOf&&F.snapshot){let C=`${F.id}.${D.choiceOf}[x]`,$=F.snapshot.element.find((Z)=>Z.path===C);if($?.binding)return{...D,binding:u($.binding)}}if(D.binding?.valueSet)return{...D,binding:u(D.binding)};let{binding:E,...B}=D;return B}function Cu(D){if(!D.constraint||D.constraint.length===0)return D;let F={};for(let u of D.constraint)F[u.key]={expression:u.expression,human:u.human,severity:u.severity};return{...D,constraint:F}}function $u(D,F){if(!D.type||D.type.length===0)return D;let u=D.type[0]?.extension?.[0];if(u?.url==="http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type"&&u.valueUrl)return{...D,type:u.valueUrl};let E=D.type[0].code,B={...D,type:E};if(F.kind==="logical"){let C=t3(D.extension,"http://hl7.org/fhir/StructureDefinition/elementdefinition-defaulttype");if(C?.valueCanonical)B.defaultType=C.valueCanonical}return B}function Zu(D){if(D.type?.[0]?.code!=="Extension")return D;let u=D.type[0]?.profile?.[0];if(!u)return D;return{...D,url:u,...D.min&&{min:D.min},...D.max&&D.max!=="*"&&{max:parseInt(D.max)}}}function Xu(D){if(D.url)return D;let F=D.max==="*"||D.min&&D.min>=2||D.max&&parseInt(D.max)>=2,u=D.min===1,E={...D};if(delete E.min,delete E.max,F){if(E.array=!0,D.min&&D.min>0)E.min=D.min;if(D.max&&D.max!=="*")E.max=parseInt(D.max)}if(u)E._required=!0;return E}function Qu(D,F){let u=D.substring(1).split("."),E=[F.url];for(let B of u.slice(1))E.push("elements",B);return E}function zu(D,F){if(!D.contentReference)return D;let{contentReference:u,...E}=D;return{...E,elementReference:Qu(u,F)}}function Yu(D){let{path:F,slicing:u,sliceName:E,id:B,mapping:C,example:$,alias:Z,condition:Q,comment:z,definition:O,requirements:A,extension:J,...W}=D;return W}function I2(D,F){let u=Eu(D);return u=Yu(u),u=Bu(u,F),u=Cu(u),u=zu(u,F),u=Zu(u),u=Xu(u),u=$u(u,F),u=Fu(u),u}function L2(D){if(D.path.endsWith("[x]"))return!0;if(D.type&&D.type.length>1)return new Set(D.type.map((u)=>u.code)).size>1;return!1}function s3(D){if(!D)return D;return D.charAt(0).toUpperCase()+D.slice(1)}function r3(D){let F=D.split("/");return F[F.length-1]}function N2(D){let F=D.path.replace(/\[x\]$/,""),u=F.split(".").pop()||"";if(!D.type)return[];let E=[],B=D.type.map((z)=>u+s3(r3(z.code))),{type:C,binding:$,...Z}=D,Q={...Z,path:F,choices:B};E.push(Q);for(let z of D.type){let O=s3(r3(z.code)),A={...D,path:F+O,type:[z],choiceOf:u};if(D.binding)delete A.binding;E.push(A)}return E}function a3(D,F){let u=D[D.length-1],E=D.slice(0,-1),B=E[E.length-1],C=F(B,u);return[...E.slice(0,-1),C]}function Ou(D,F){if(!D.discriminator)return{};let u={};for(let E of D.discriminator){if(!E.type||!["pattern","value",void 0].includes(E.type))continue;let B=E.path.trim();if(B==="$this"){if(F.pattern?.value)Object.assign(u,F.pattern.value)}else{let C=B.split(".").filter((z)=>z),$=Object.keys(F).filter((z)=>z.startsWith("pattern"));for(let z of $){let O=z.replace("pattern","").toLowerCase();if(C.length===1&&C[0]===O)u[O]=F[z]}let Z=["elements"];for(let z of C)if(Z.push(z),C.indexOf(z)<C.length-1)Z.push("elements");Z.push("pattern");let Q=F;for(let z of Z)Q=Q?.[z];if(Q?.value!==void 0){let z=u;for(let O=0;O<C.length-1;O++){if(!z[C[O]])z[C[O]]={};z=z[C[O]]}z[C[C.length-1]]=Q.value}}}return u}function Ju(D,F,u){let E={match:F,schema:D};if(u?.min!==void 0&&u.min!==0)E.min=u.min;if(u?.max!==void 0)E.max=u.max;return E}function Wu(D,F,u){let E=F.slicing||D.slicing||{},B=Ou(E,u),C=Ju(u,B,D.slice);if(!F.slicing)F.slicing={};if(D.slicing)F.slicing={...F.slicing,...D.slicing};if(!F.slicing.slices)F.slicing.slices={};return F.slicing.slices[D.sliceName]=C,F}function Au(D){if(!D.slicing?.slices)return{};let F={};for(let[u,E]of Object.entries(D.slicing.slices)){let{match:B,schema:C,...$}=E,{slicing:Z,elements:Q,type:z,min:O,...A}=C||{},J={};if(B?.url)J.url=B.url;if($.min!==void 0&&$.min!==0)J.min=$.min;if($.max!==void 0)J.max=$.max;if(Object.assign(J,A),O!==void 0&&O!==0&&J.min===void 0)J.min=O;F[u]=J}return F}function Gu(D,F,u){let E={...F};if(D==="extension")E.extensions=Au(u);if(!E.elements)E.elements={};let B=u.choiceOf||D,{_required:C,...$}=u;if(E.elements[D]=$,C){if(!E.required)E.required=[];if(!E.required.includes(B))E.required.push(B)}return E}function YF(D,F,u){let E=[...D];for(let B=0;B<F.length;B++){let C=F[B],Z=F[B+1]?.type==="enter"?{}:u;switch(C.type){case"enter":E.push(Z);break;case"enter-slice":E.push(Z);break;case"exit":E=a3(E,(Q,z)=>Gu(C.el,Q,z));break;case"exit-slice":E=a3(E,(Q,z)=>Wu(C,Q,z));break}}return E}function e3(D,F){let u={};if(u.name=D.name,u.type=D.type,D.url)u.url=D.url;if(D.version)u.version=D.version;if(D.description)u.description=D.description;if(D.package_name)u.package_name=D.package_name;if(D.package_version)u.package_version=D.package_version;if(D.package_id)u.package_id=D.package_id;if(u.kind=D.kind,D.derivation)u.derivation=D.derivation;if(D.baseDefinition&&D.type!=="Element")u.base=D.baseDefinition;if(D.abstract)u.abstract=D.abstract;if(u.class=Hu(D),F?.package_meta)u.package_meta=F.package_meta;return u}function Hu(D){if(D.kind==="resource"&&D.derivation==="constraint")return"profile";if(D.type==="Extension")return"extension";return D.kind||"unknown"}function qu(D){return(D.differential?.element||[]).filter((u)=>u.path.includes("."))}function D6(D){let u=Object.entries(D).sort((B,C)=>{let $=B[1].index??1/0,Z=C[1].index??1/0;return $-Z}),E={};for(let[B,C]of u)if(C.elements)E[B]={...C,elements:D6(C.elements)};else E[B]=C;return E}function j0(D,F=new WeakSet){if(Array.isArray(D))return D.map((u)=>j0(u,F));if(D&&typeof D==="object"){if(F.has(D))return"[Circular Reference]";F.add(D);let u={},E=Object.keys(D);for(let B of E)if(B==="elements"&&D[B])u[B]=D6(j0(D[B],F));else if(B==="required"&&Array.isArray(D[B]))u[B]=[...D[B]].sort();else u[B]=j0(D[B],F);return u}return D}function I0(D,F){if(D.kind==="primitive-type")return j0(e3(D,F));let u=e3(D,F),E=qu(D),B=[u],C=[],$=[...E],Z=0;while($.length>0){let z=$.shift();if(L2(z)){let q=N2(z);$.unshift(...q),Z++;continue}let O=R2(z),A=j2(C,O),J=zF(C,A),_={...I2(z,D),index:Z++};B=YF(B,J,_),C=A}let Q=zF(C,[]);if(B=YF(B,Q,{index:Z}),B.length!==1)throw Error(`Invalid stack state: expected 1 element, got ${B.length}`);return j0(B[0])}var w2=(D,F)=>{if(!F)F={name:"undefined",version:"undefined"};return{...D,package_meta:D.package_meta||F,name:D.name,url:D.url,base:D.base}};function T2(D){return D.identifier.kind==="binding"}var b2=async(D,F,u)=>{let E=await D.search({}),B={};for(let W of E){let _=W.url;if(!_)continue;B[_]=W}let C={};for(let W of E)if(W.resourceType==="StructureDefinition"){let _=W.url;C[_]=W}let $={},Z={},[Q,z]=[0,0];for(let W of Object.values(C)){try{let _=w2(I0(W),u);$[_.url]=_,Z[_.name]=_.url,Q++}catch(_){F?.warn(`Failed to convert StructureDefinition ${W.name||W.id}: ${_ instanceof Error?_.message:String(_)}`),z++}F?.success(`FHIR Schema conversion completed: ${Q}/${Object.values(C).length} successful, ${z} failed`)}let O={};for(let W of E)if(W.resourceType==="ValueSet"){if(!W.package_meta)W.package_meta=u;O[W.url]=W}let A={};for(let W of Object.values($))if(W.kind==="complex-type")A[W.url]=W;return{...D,appendFs(W){let _=w2(W);$[_.url]=_,Z[_.name]=_.url},resolveFs:(W)=>$[W],resolveFsGenealogy:(W)=>{let _=$[W];if(_===void 0)throw Error(`Failed to resolve FHIR Schema genealogy for '${W}'`);let q=[_];while(_?.base)if(_=$[_.base]||$[Z[_.base]],q.push(_),_===void 0)throw Error(`Failed to resolve FHIR Schema genealogy for '${W}'`);return q},ensureCanonicalUrl:(W)=>Z[W]||W,allSd:()=>Object.values(C),resolveSd:(W)=>C[W],allFs:()=>Object.values($),allVs:()=>Object.values(O),resolveVs:(W)=>O[W],complexTypeDict:()=>A,resolveAny:(W)=>B[W]}};var x2=(D,F)=>{let[u,...E]=F;if(u===void 0)return[];return D.map((B)=>{if(!B.elements)return;let C=B.elements?.[u];for(let $ of E)C=C?.elements?.[$];return C}).filter((B)=>B!==void 0)};function P2(D){let F=D.reverse().reduce((u,E)=>({...u,...E}),{});return F.elements=void 0,F}function S2(D){let F=D.split("|")[0];return F?F:D}function _u(D){if(D.derivation==="constraint")return"profile";if(D.kind==="primitive-type")return"primitive-type";if(D.kind==="complex-type")return"complex-type";if(D.kind==="resource")return"resource";return"resource"}function TD(D){return{kind:_u(D),package:D.package_meta.name,version:D.package_meta.version,name:D.name,url:D.url}}function L0(D,F){let u=F.join(".");return{kind:"nested",package:D.package_meta.name,version:D.package_meta.version,name:u,url:`${D.url}#${u}`}}function N0(D,F){F=S2(F);let u=D.resolveVs(F),E="unknown",B=F.split("/"),C=B[B.length-1];if(C&&C.length>0)E=C.split(/[-_]/).map(($)=>$.charAt(0).toUpperCase()+$.slice(1).toLowerCase()).join("");if(E==="unknown"&&u?.id&&!/^[a-zA-Z0-9_-]{20,}$/.test(u.id))E=u.id;return{kind:"value-set",package:u?.package_meta.name,version:u?.package_meta.version,name:E,url:F}}function OF(D,F,u){let E=F.join("."),[B,C,$]=u?[{name:"shared",version:"1.0.0"},u,`urn:fhir:binding:${u}`]:[D.package_meta,`${D.name}.${E}_binding`,`${D.url}#${E}_binding`];return{kind:"binding",package:B.name,version:B.version,name:C,url:$}}async function u6(D,F){let u=TD(F),E=F.package_meta;if(u.kind!=="profile")throw Error(`Expected profile, got ${u.kind} for ${F.name}`);let B;if(F.base){let O=F.base.includes("/")?F.base:`http://hl7.org/fhir/StructureDefinition/${F.base}`,A=F.base.split("/").pop()||F.base,J=await Mu(O,D),W=O.startsWith("http://hl7.org/fhir/");B={kind:J,package:W?"hl7.fhir.r4.core":F.package_meta.name||"undefined",version:W?"4.0.1":F.package_meta.version||"undefined",name:A,url:O}}let C={identifier:u,base:B,dependencies:B?[B]:[]};if(F.description)C.description=F.description;let $=Vu(F);if(Object.keys($).length>0)C.metadata=$;if(F.elements){let O=await JF(D,F,[],F.elements);if(O&&Object.keys(O).length>0)C.fields=O}let Z=await Ku(F,D);if(Object.keys(Z).length>0)C.constraints=Z;let Q=await Ru(F,D);if(Q.length>0)C.extensions=Q;let z=Uu(F);if(z.length>0)C.validation=z;return C}async function Mu(D,F){try{let u=F.resolveFs(D);if(!u)return"resource";if(u){if(u.derivation==="constraint")return"profile";if(u.kind==="resource")return"resource";if(u.kind==="complex-type")return"complex-type"}}catch(u){console.warn(`Could not resolve base schema ${D}:`,u)}if(D.includes("StructureDefinition/")&&!D.startsWith("http://hl7.org/fhir/StructureDefinition/"))return"profile";return"resource"}function Vu(D){let F={},u=D.package_meta;if(D.publisher)F.publisher=D.publisher;if(D.contact)F.contact=D.contact;if(D.copyright)F.copyright=D.copyright;if(D.purpose)F.purpose=D.purpose;if(D.experimental!==void 0)F.experimental=D.experimental;if(D.date)F.date=D.date;if(D.jurisdiction)F.jurisdiction=D.jurisdiction;if(u?.name)F.package=u.name;else if(D.package_meta.name)F.package=D.package_meta.name;return F}async function Ku(D,F){let u={};if(!D.elements)return u;for(let[E,B]of Object.entries(D.elements)){let C={};if(B.min!==void 0)C.min=B.min;if(B.max!==void 0)C.max=String(B.max);if(B.mustSupport)C.mustSupport=!0;if(B.fixedValue!==void 0)C.fixedValue=B.fixedValue;if(B.patternValue!==void 0)C.patternValue=B.patternValue;if(B.binding)C.binding={strength:B.binding.strength,valueSet:B.binding.valueSet??""};if(B.type&&Array.isArray(B.type)&&B.type.length>0)C.types=B.type.map(($)=>{let Z={code:$.code};if($.profile)Z.profile=$.profile;if($.targetProfile)Z.targetProfile=$.targetProfile;return Z});if(B.slicing)C.slicing={discriminator:B.slicing.discriminator??[],rules:String(B.slicing),ordered:B.slicing.ordered};if(Object.keys(C).length>0)u[E]=C}return u}async function Ru(D,F){let u=[];if(!D.elements)return u;for(let[E,B]of Object.entries(D.elements))if(E.includes("extension")&&B.type&&Array.isArray(B.type)){for(let C of B.type)if(C.code==="Extension"&&C.profile)u.push({path:E,profile:C.profile,min:B.min,max:String(B.max),mustSupport:B.mustSupport})}return u}function Uu(D){let F=[];if(!D.elements)return F;for(let[u,E]of Object.entries(D.elements))if(E.constraint&&Array.isArray(E.constraint))for(let B of E.constraint)F.push({path:u,key:B.key,severity:B.severity,human:B.human,expression:B.expression});return F}function E6(D,F,u){let E=u[u.length-1],B=u.slice(0,-1),C=D.resolveFsGenealogy(F.url).flatMap(($)=>{if(B.length===0)return $.required||[];if(!$.elements)return[];let Z=$;for(let Q of B)Z=Z?.elements?.[Q];return Z?.required||[]});return new Set(C).has(E)}function B6(D,F,u){let E=u[u.length-1];if(!E)throw Error(`Internal error: fieldName is missing for path ${u.join("/")}`);let B=u.slice(0,-1),C=D.resolveFsGenealogy(F.url).flatMap(($)=>{if(B.length===0)return $.excluded||[];if(!$.elements)return[];let Z=$;for(let Q of B)Z=Z?.elements?.[Q];return Z?.excluded||[]});return new Set(C).has(E)}var ju=(D,F,u)=>{if(!D.refers)return;return D.refers.map((E)=>{let B=F.ensureCanonicalUrl(E),C=F.resolveFs(B);return TD(C)})};function v2(D,F,u){if(u.elementReference){let E=u.elementReference.filter((B,C)=>C%2===1).map((B)=>B).filter((B)=>B!=="elements");if(E.length>0)return L0(F,E)}if(u.type){let E=u.type.match(/^[a-z]/)?"primitive-type":"complex-type",B=D.ensureCanonicalUrl(u.type),C=D.resolveFs(B);if(!C)throw Error(`Could not resolve field '${u.type}'`);return{kind:E,package:C.package_meta.name,version:C.package_meta.version,name:u.type,url:B}}return}var WF=(D,F,u,E)=>{let B,C;if(E.binding){if(B=OF(F,u,E.binding.bindingName),E.binding.strength==="required"&&E.type==="code")C=f2(E,D)}return{type:v2(D,F,E),required:E6(D,F,u),excluded:B6(D,F,u),reference:ju(E,D,F.package_meta),array:E.array||!1,min:E.min,max:E.max,choices:E.choices,choiceOf:E.choiceOf,binding:B,enum:C}};function w0(D){let F=D.type==="BackboneElement",u=D.type==="Element"&&D.elements!==void 0&&Object.keys(D.elements).length>0,E=D.type===void 0&&D.choiceOf===void 0&&D.elements!==void 0&&Object.keys(D.elements).length>0;return F||u||E}function AF(D,F,u,E){return{type:L0(F,u),array:E.array||!1,required:E6(D,F,u),excluded:B6(D,F,u)}}function Iu(D,F){try{let u=S2(D)||D,E=F.resolveVs(u);if(!E)return;if(E.expansion?.contains)return E.expansion.contains.map((C)=>({system:C.system,code:C.code,display:C.display}));let B=[];if(E.compose?.include){for(let C of E.compose.include)if(C.concept)for(let $ of C.concept)B.push({system:C.system,code:$.code,display:$.display});else if(C.system&&!C.filter)try{let $=F.resolveAny(C.system);if($?.concept){let Z=(Q,z)=>{for(let O of Q)if(B.push({system:z,code:O.code,display:O.display}),O.concept)Z(O.concept,z)};Z($.concept,C.system)}}catch{}}return B.length>0?B:void 0}catch{return}}var C6=100;function f2(D,F){if(!D.binding)return;let{strength:u,valueSet:E}=D.binding;if(!E)return;if(!(u==="required"||u==="extensible"&&(D.type==="code"||D.type==="Coding")||u==="preferred"&&(D.type==="code"||D.type==="Coding")))return;let C=Iu(E,F);if(!C||C.length===0)return;let $=C.map((Z)=>Z.code).filter((Z)=>Z&&typeof Z==="string"&&Z.trim().length>0);if($.length>C6){console.warn(`Value set ${E} has more than ${C6} codes, which may cause issues with code generation.`);return}return $.length>0?$:void 0}async function Lu(D,F,u,E){if(!E.binding?.valueSet)return;let B=OF(F,u,E.binding.bindingName),C=v2(D,F,E),$=N0(D,E.binding.valueSet),Z=[];if(C)Z.push(C);Z.push($);let Q=f2(E,D);return{identifier:B,type:C,valueset:$,strength:E.binding.strength,enum:Q,dependencies:Z}}async function k2(D,F){let u=new Set;if(!F.elements)return[];let E=[];async function B(Z,Q){for(let[z,O]of Object.entries(Z)){let A=[...Q,z],J=A.join(".");if(u.has(J))continue;if(u.add(J),O.binding){let W=await Lu(D,F,A,O);if(W)E.push(W)}if(O.elements)await B(O.elements,A)}}await B(F.elements,[]),E.sort((Z,Q)=>Z.identifier.name.localeCompare(Q.identifier.name));let C=[],$=new Set;for(let Z of E)if(!$.has(Z.identifier.url))$.add(Z.identifier.url),C.push(Z);return C}function $6(D,F,u){let E=[];for(let[B,C]of Object.entries(u)){let $=[...F,B];if(w0(C))E.push([$,C]);if(C.elements)E.push(...$6(D,$,C.elements))}return E}async function Nu(D,F,u,E,B){let C={};for(let[$,Z]of Object.entries(u)){let Q=[...F,$];if(w0(Z))C[$]=AF(E,D,Q,Z);else C[$]=WF(E,D,Q,Z)}return C}async function y2(D,F){if(!F.elements)return;let E=$6(F,[],F.elements).filter(([C,$])=>$.elements&&Object.keys($.elements).length>0),B=[];for(let[C,$]of E){let Z=L0(F,C),Q;if($.type==="BackboneElement"||!$.type)Q={kind:"complex-type",package:F.package_meta.name,version:F.package_meta.version,name:"BackboneElement",url:"http://hl7.org/fhir/StructureDefinition/BackboneElement"};else Q={kind:"complex-type",package:F.package_meta.name,version:F.package_meta.version,name:$.type,url:`http://hl7.org/fhir/StructureDefinition/${$.type}`};let z=await Nu(F,C,$.elements,D,F.package_meta),O={identifier:Z,base:Q,fields:z};B.push(O)}return B.sort((C,$)=>C.identifier.url.localeCompare($.identifier.url)),B.length===0?void 0:B}function h2(D){let F=[];for(let u of D){if(u.base)F.push(u.base);for(let E of Object.values(u.fields||{})){if("type"in E&&E.type)F.push(E.type);if("binding"in E&&E.binding)F.push(E.binding)}}return F}async function JF(D,F,u,E){if(!E)return;let B=D.resolveFsGenealogy(F.url),C={};for(let[Z,Q]of Object.entries(E)){let z=[...u,Z],O=x2(B,z),A=P2(O);C[Z]={elem:Q,elemSnapshot:A,path:z}}for(let[Z,{elem:Q,elemSnapshot:z,path:O}]of Object.entries(C))for(let A of Q?.choices||[])if(!C[A]){let J=[...u,A],W=x2(B,J),_=P2(W);C[A]={elem:void 0,elemSnapshot:_,path:J}}let $={};for(let[Z,{elem:Q,elemSnapshot:z,path:O}]of Object.entries(C))if(w0(z))$[Z]=AF(D,F,O,z);else $[Z]=WF(D,F,O,z);return $}function Z6(D){let F=[];for(let u of Object.values(D)){if("type"in u&&u.type)F.push(u.type);if("binding"in u&&u.binding)F.push(u.binding)}return F}function wu(D){let F=new Set,u=[];for(let E of D){let B=E.url;if(!F.has(B))F.add(B),u.push(E)}return u.sort((E,B)=>E.name.localeCompare(B.name)),u}function Tu(D,F){if(D.base==="Extension"||D.base==="http://hl7.org/fhir/StructureDefinition/Extension")return!0;if(D.url?.includes("/extension/")||D.url?.includes("-extension"))return!0;if(D.name?.toLowerCase().includes("extension"))return!0;if(D.type==="Extension")return!0;return!1}async function bu(D,F,u){try{let E=TD(D);E.kind="value-set";let B={identifier:E,description:D.description};if(D.elements){let C=[];for(let[$,Z]of Object.entries(D.elements))if("code"in Z&&Z.code)C.push({code:Z.code,display:Z.short||Z.definition,system:Z.system});if(C.length>0)B.concept=C}return B}catch(E){return console.warn(`Failed to transform value set ${D.name}: ${E}`),null}}async function xu(D,F,u){try{let E=TD(D),B;if(D.base&&D.base!=="Extension"){let Z=D.base.includes("/")?D.base:`http://hl7.org/fhir/StructureDefinition/${D.base}`;B={kind:"complex-type",package:"hl7.fhir.r4.core",version:"4.0.1",name:D.base.split("/").pop()||D.base,url:Z}}else B={kind:"complex-type",package:"hl7.fhir.r4.core",version:"4.0.1",name:"Extension",url:"http://hl7.org/fhir/StructureDefinition/Extension"};let C={identifier:E,base:B,description:D.description,dependencies:[],metadata:{isExtension:!0}};if(B)C.dependencies.push(B);if(D.elements){let Z=await JF(F,D,[],D.elements);if(Z&&Object.keys(Z).length>0)C.fields=Z,C.dependencies.push(...Z6(Z))}let $=await y2(F,D);if($&&$.length>0)C.nested=$,C.dependencies.push(...h2($));return C.dependencies=wu(C.dependencies),C.dependencies=C.dependencies.filter((Z)=>Z.url!==E.url),C}catch(E){return console.warn(`Failed to transform extension ${D.name}: ${E}`),null}}function Pu(D,F,u,E){let B=[];if(F)B.push(F);if(u)B.push(...Z6(u));if(E)B.push(...h2(E));let C={};for(let Q of B){if(Q.url===D.url)continue;C[Q.url]=Q}let $=new Set(E?.map((Q)=>Q.identifier.url)),Z=Object.values(C).filter((Q)=>!(Q.kind==="nested"&&$.has(Q.url))).sort((Q,z)=>Q.name.localeCompare(z.name));return Z.length>0?Z:void 0}async function Su(D,F){let u=TD(F),E;if(F.base&&F.type!=="Element"){let z=D.resolveFs(D.ensureCanonicalUrl(F.base));if(!z)throw Error(`Base resource not found '${F.base}' for '${F.url}'`);E=TD(z)}let B=await JF(D,F,[],F.elements),C=await y2(D,F),$=Pu(u,E,B,C),Z={identifier:u,base:E,fields:B,nested:C,description:F.description,dependencies:$},Q=await k2(D,F);return[Z,...Q]}async function X6(D,F){let u=[],E=TD(F);if(E.kind==="profile"){let B=await u6(D,F);u.push(B);let C=await k2(D,F);return u.push(...C),u}if(E.kind==="value-set"||F.kind==="value-set"){let B=await bu(F,D,F.package_meta);if(B)u.push(B);return u}if(Tu(F,E)){let B=await xu(F,D,F.package_meta);if(B)u.push(B);return u}return await Su(D,F)}async function vu(D,F){try{let u=await F.resolve(D);if(!u||u.resourceType!=="CodeSystem")return;let E=[],B=(C,$)=>{for(let Z of C)if(E.push({system:$,code:Z.code,display:Z.display}),Z.concept)B(Z.concept,$)};if(u.concept)B(u.concept,D);return E}catch{return}}async function Q6(D,F){let u=[];if(D.concept){for(let E of D.concept)u.push({system:D.system,code:E.code,display:E.display});return u}if(D.system&&!D.filter){let E=await vu(D.system,F);if(E)u.push(...E)}if(D.valueSet)for(let E of D.valueSet)try{let B=await F.resolve(E);if(B){let C=await z6(B,F);if(C)u.push(...C)}}catch{}return u}async function z6(D,F){try{let u=[];if(D.compose){if(D.compose.include)for(let E of D.compose.include){let B=await Q6(E,F);u.push(...B)}if(D.compose.exclude){let E=new Set;for(let B of D.compose.exclude){let C=await Q6(B,F);for(let $ of C)E.add(`${$.system}|${$.code}`)}return u.filter((B)=>!E.has(`${B.system}|${B.code}`))}}return u.length>0?u:void 0}catch(u){console.error("Error extracting ValueSet concepts:",u);return}}async function Y6(D,F,u){let B={identifier:N0(D.url,D)};if(D.description)B.description=D.description;let C=await z6(D,F);if(C&&C.length>0)B.concept=C;else if(D.compose)B.compose=D.compose;if(D.compose){let $=[],Z=(Q)=>{for(let z of Q){if(z.system)$.push({kind:"value-set",package:u?.name||"undefined",version:u?.version||"undefined",name:z.system.split("/").pop()||"unknown",url:z.system});if(z.valueSet)for(let O of z.valueSet)$.push(N0(F,O))}};if(D.compose.include)Z(D.compose.include);if(D.compose.exclude)Z(D.compose.exclude)}return B}class gD{manager;options;cacheConfig;cache;logger;constructor(D={},F){this.options={verbose:!1,...D},this.manager=D.manager||pD({packages:[],workingDir:"tmp/fhir"}),this.cacheConfig=F,this.logger=D.logger||jD({verbose:this.options.verbose,prefix:"TypeSchema"})}async initializeCache(){if(this.cacheConfig&&!this.cache)this.cache=new $0(this.cacheConfig),await this.cache.initialize()}async registerFromPackageMetas(D){let F=D.map((u)=>`${u.name}${u.version}`);return this.logger.step(`Loading FHIR packages: ${F.join(", ")}`),await this.manager.init(),b2(this.manager)}generateFhirSchemas(D){this.logger.progress(`Converting ${D.length} StructureDefinitions to FHIRSchemas`);let F=this.applyStructureDefinitionTreeshaking(D),u=[],E=0,B=0;for(let C of F)try{let $=I0(C);u.push($),E++,this.logger.debug(`Converted StructureDefinition: ${C.name||C.id} (${C.resourceType})`)}catch($){B++,this.logger.warn(`Failed to convert StructureDefinition ${C.name||C.id}: ${$ instanceof Error?$.message:String($)}`)}return this.logger.success(`FHIR Schema conversion completed: ${E}/${F.length} successful, ${B} failed`),u}async generateValueSetSchemas(D,F){if(D.length>0)this.logger.debug(`${D.length} ValueSets available for enum extraction`);let u=[];if(D.length>0){this.logger.progress(`Converting ${D.length} ValueSets to TypeSchema`);let E=0,B=0;for(let C of D)try{let $=await Y6(C,await b2(this.manager),F);if($)u.push($),E++,this.logger.debug(`Converted ValueSet: ${C.name||C.id}`)}catch($){B++,this.logger.warn(`Failed to convert ValueSet ${C.name||C.id}: ${$ instanceof Error?$.message:String($)}`)}this.logger.success(`ValueSet conversion completed: ${E}/${D.length} successful, ${B} failed`)}return u}async generateFromPackage(D,F){if(await this.initializeCache(),this.cache&&!(this.cacheConfig?.forceRegenerate??!1)){let C=this.cache.getByPackage(D);if(C.length>0)return this.logger.info(`Using cached TypeSchemas for package: ${D} (${C.length} schemas)`),C}let u={name:D,version:F||"latest"},E=await this.registerFromPackageMetas([u]),B=[...(await Promise.all(E.allFs().map(async(C)=>await X6(E,C)))).flat(),...await this.generateValueSetSchemas(E.allVs(),u)];if(this.cache)for(let C of B)await this.cache.set(C);return B}applyStructureDefinitionTreeshaking(D){let F=this.options.treeshake;if(!F||F.length===0)return D;this.logger.info(`Applying treeshaking filter for ResourceTypes: ${F.join(", ")}`);let u=new Map,E=new Map,B=new Map;for(let z of D){let O=z.name||z.id;if(O)u.set(O,z),E.set(O,new Set),B.set(O,new Set)}for(let z of D){let O=z.name||z.id;if(!O)continue;let{realDeps:A,refTargets:J}=this.extractStructureDefinitionDependenciesWithReferences(z);E.set(O,new Set(A)),B.set(O,new Set(J))}let C=new Set;for(let z of F)if(u.has(z))C.add(z);else this.logger.warn(`ResourceType '${z}' not found in structure definitions`);let $=(z,O=new Set)=>{if(O.has(z)||!E.has(z))return;O.add(z);let A=E.get(z)||new Set;for(let J of Array.from(A))if(u.has(J))C.add(J),$(J,O)};for(let z of Array.from(C))$(z);let Z=D.filter((z)=>{let O=z.name||z.id;return O&&C.has(O)}),Q=new Set;for(let z of D){let O=z.name||z.id;if(O&&!C.has(O)){if(Array.from(B.values()).some((J)=>J.has(O)))Q.add(O)}}if(Q.size>0)this.logger.info(`Excluded reference-only targets: ${Array.from(Q).join(", ")}`);return this.logger.success(`Treeshaking completed: kept ${Z.length}/${D.length} structure definitions`),Z}extractStructureDefinitionDependenciesWithReferences(D){let F=new Set,u=new Set;if(D.baseDefinition){let E=this.extractResourceNameFromUrl(D.baseDefinition);if(E)F.add(E)}if(D.snapshot?.element||D.differential?.element){let E=D.snapshot?.element||D.differential?.element;for(let B of E)if(B.type)for(let C of B.type){if(C.code){if(F.add(C.code),C.code==="Reference"&&C.targetProfile)for(let $ of C.targetProfile){let Z=this.extractResourceNameFromUrl($);if(Z)u.add(Z)}}if(C.profile)for(let $ of C.profile){let Z=this.extractResourceNameFromUrl($);if(Z)F.add(Z)}}}return{realDeps:Array.from(F),refTargets:Array.from(u)}}extractResourceNameFromUrl(D){let F=D.match(/\/([^/]+)$/);return F?F[1]??null:null}}import{readFile as fu}from"node:fs/promises";class T0{options;constructor(D={}){this.options={format:"auto",validate:!0,strict:!1,...D}}async parseFromFile(D){let F=await fu(D,"utf-8"),u=this.options.format==="auto"?this.detectFormat(F,D):this.options.format;return this.parseFromString(F,u)}async parseFromString(D,F){let u=F||this.detectFormat(D),E;if(u==="ndjson")E=this.parseNDJSON(D);else E=this.parseJSON(D);if(this.options.validate)this.validateSchemas(E);return E}async parseFromFiles(D){let F=[];for(let u of D){let E=await this.parseFromFile(u);F.push(...E)}return F}parseSchema(D){if(!D.identifier)throw Error("TypeSchema must have an identifier");if(!this.isValidIdentifier(D.identifier))throw Error("TypeSchema identifier is invalid");return D}findByIdentifier(D,F){return D.filter((u)=>this.matchesIdentifier(u.identifier,F))}findByUrl(D,F){return D.find((u)=>u.identifier.url===F)}findByKind(D,F){return D.filter((u)=>u.identifier.kind===F)}findByPackage(D,F){return D.filter((u)=>u.identifier.package===F)}detectFormat(D,F){if(F){if(F.endsWith(".ndjson"))return"ndjson";if(F.endsWith(".json"))return"json"}let u=D.trim();if(u.includes(`
94
94
  `)){let E=u.split(`
95
95
  `).filter((B)=>B.trim());if(E.length>1)try{if(E[0])JSON.parse(E[0]);return"ndjson"}catch{}}return"json"}parseNDJSON(D){let F=[],u=D.split(`
96
96
  `).filter((E)=>E.trim());for(let E of u)try{let B=JSON.parse(E);F.push(this.parseSchema(B))}catch(B){if(this.options.strict)throw Error(`Failed to parse NDJSON line: ${B}`)}return F}parseJSON(D){try{let F=JSON.parse(D);if(Array.isArray(F))return F.map((u)=>this.parseSchema(u));else return[this.parseSchema(F)]}catch(F){throw Error(`Failed to parse JSON: ${F}`)}}validateSchemas(D){for(let F of D){if(!F.identifier)throw Error("Schema missing identifier");if(!this.isValidIdentifier(F.identifier))throw Error(`Invalid identifier in schema: ${JSON.stringify(F.identifier)}`)}}isValidIdentifier(D){return typeof D==="object"&&D!==null&&typeof D.kind==="string"&&typeof D.package==="string"&&typeof D.version==="string"&&typeof D.name==="string"&&typeof D.url==="string"}matchesIdentifier(D,F){return(!F.kind||D.kind===F.kind)&&(!F.package||D.package===F.package)&&(!F.version||D.version===F.version)&&(!F.name||D.name===F.name)&&(!F.url||D.url===F.url)}}b0();class m2{options;constructor(D){this.options=D}handleError(D,F){if(D instanceof ID)this.handleGeneratorError(D,F);else this.handleUnknownError(D,F)}handleBatchErrors(D){let F=D.filter((E)=>E instanceof ID),u=D.filter((E)=>!(E instanceof ID));if(F.length>0)this.reportBatchErrors(F);u.forEach((E)=>{this.handleUnknownError(E)})}handleGeneratorError(D,F){switch(this.options.outputFormat){case"json":this.reportErrorAsJson(D);break;case"structured":this.reportErrorStructured(D);break;default:this.reportErrorToConsole(D)}}handleUnknownError(D,F){if(this.options.logger.error("Unexpected error occurred:",D),this.options.verbose){if(console.error(`
@@ -12,5 +12,5 @@ export declare function extractValueSetConcepts(valueSetUrl: CanonicalUrl, regis
12
12
  display?: string;
13
13
  }[] | undefined;
14
14
  export declare function buildEnum(element: FHIRSchemaElement, register: Register): string[] | undefined;
15
- export declare function generateBindingSchema(fhirSchema: RichFHIRSchema, path: string[], element: FHIRSchemaElement, register: Register): Promise<BindingTypeSchema | undefined>;
15
+ export declare function generateBindingSchema(register: Register, fhirSchema: RichFHIRSchema, path: string[], element: FHIRSchemaElement): Promise<BindingTypeSchema | undefined>;
16
16
  export declare function collectBindingSchemas(register: Register, fhirSchema: RichFHIRSchema): Promise<BindingTypeSchema[]>;
@@ -93,11 +93,11 @@ export function buildEnum(element, register) {
93
93
  }
94
94
  return codes.length > 0 ? codes : undefined;
95
95
  }
96
- export async function generateBindingSchema(fhirSchema, path, element, register) {
96
+ export async function generateBindingSchema(register, fhirSchema, path, element) {
97
97
  if (!element.binding?.valueSet)
98
98
  return undefined;
99
99
  const identifier = mkBindingIdentifier(fhirSchema, path, element.binding.bindingName);
100
- const fieldType = buildFieldType(fhirSchema, path, element, register);
100
+ const fieldType = buildFieldType(register, fhirSchema, element);
101
101
  const valueSetIdentifier = mkValueSetIdentifier(register, element.binding.valueSet);
102
102
  const dependencies = [];
103
103
  if (fieldType) {
@@ -127,7 +127,7 @@ export async function collectBindingSchemas(register, fhirSchema) {
127
127
  continue;
128
128
  processedPaths.add(pathKey);
129
129
  if (element.binding) {
130
- const binding = await generateBindingSchema(fhirSchema, path, element, register);
130
+ const binding = await generateBindingSchema(register, fhirSchema, path, element);
131
131
  if (binding) {
132
132
  bindings.push(binding);
133
133
  }
@@ -3,14 +3,13 @@
3
3
  *
4
4
  * Functions for transforming FHIRSchema elements into TypeSchema fields
5
5
  */
6
- import type { CanonicalManager } from "@atomic-ehr/fhir-canonical-manager";
7
6
  import type { FHIRSchemaElement } from "@atomic-ehr/fhirschema";
8
7
  import type { Register } from "@root/typeschema/register";
9
8
  import type { Field, Identifier, PackageMeta, RegularField, RichFHIRSchema } from "../types";
10
9
  export declare function isRequired(register: Register, fhirSchema: RichFHIRSchema, path: string[]): boolean;
11
10
  export declare function isExcluded(register: Register, fhirSchema: RichFHIRSchema, path: string[]): boolean;
12
11
  export declare const buildReferences: (element: FHIRSchemaElement, register: Register, _packageInfo?: PackageMeta) => Identifier[] | undefined;
13
- export declare function buildFieldType(fhirSchema: RichFHIRSchema, _path: string[], element: FHIRSchemaElement, _manager: ReturnType<typeof CanonicalManager>, packageInfo?: PackageMeta): Identifier | undefined;
12
+ export declare function buildFieldType(register: Register, fhirSchema: RichFHIRSchema, element: FHIRSchemaElement): Identifier | undefined;
14
13
  export declare const mkField: (register: Register, fhirSchema: RichFHIRSchema, path: string[], element: FHIRSchemaElement) => Field;
15
14
  export declare function isNestedElement(element: FHIRSchemaElement): boolean;
16
15
  export declare function mkNestedField(register: Register, fhirSchema: RichFHIRSchema, path: string[], element: FHIRSchemaElement): RegularField;
@@ -48,7 +48,7 @@ export const buildReferences = (element, register, _packageInfo) => {
48
48
  return mkIdentifier(fs);
49
49
  });
50
50
  };
51
- export function buildFieldType(fhirSchema, _path, element, _manager, packageInfo) {
51
+ export function buildFieldType(register, fhirSchema, element) {
52
52
  // Handle element reference (for slicing)
53
53
  if (element.elementReference) {
54
54
  const refPath = element.elementReference
@@ -60,20 +60,19 @@ export function buildFieldType(fhirSchema, _path, element, _manager, packageInfo
60
60
  return mkNestedIdentifier(fhirSchema, refPath);
61
61
  }
62
62
  }
63
- // Handle normal type
64
63
  if (element.type) {
65
- const typeUrl = element.type.includes("/")
66
- ? element.type
67
- : `http://hl7.org/fhir/StructureDefinition/${element.type}`;
68
- // Always create a type identifier, even if we can't resolve
69
64
  const kind = element.type.match(/^[a-z]/) ? "primitive-type" : "complex-type";
70
- const isStandardFhir = typeUrl.startsWith("http://hl7.org/fhir/");
65
+ const url = register.ensureCanonicalUrl(element.type);
66
+ const fieldFs = register.resolveFs(url);
67
+ if (!fieldFs) {
68
+ throw new Error(`Could not resolve field '${element.type}'`);
69
+ }
71
70
  return {
72
71
  kind: kind,
73
- package: isStandardFhir ? "hl7.fhir.r4.core" : packageInfo?.name || "undefined",
74
- version: isStandardFhir ? "4.0.1" : packageInfo?.version || "undefined",
72
+ package: fieldFs.package_meta.name,
73
+ version: fieldFs.package_meta.version,
75
74
  name: element.type,
76
- url: typeUrl,
75
+ url: url,
77
76
  };
78
77
  }
79
78
  return undefined;
@@ -88,7 +87,7 @@ export const mkField = (register, fhirSchema, path, element) => {
88
87
  }
89
88
  }
90
89
  return {
91
- type: buildFieldType(fhirSchema, path, element, register, fhirSchema.package_meta),
90
+ type: buildFieldType(register, fhirSchema, element),
92
91
  required: isRequired(register, fhirSchema, path),
93
92
  excluded: isExcluded(register, fhirSchema, path),
94
93
  reference: buildReferences(element, register, fhirSchema.package_meta),
@@ -4,7 +4,7 @@ import type { CodegenLogger } from "@root/utils/codegen-logger";
4
4
  import type { CanonicalUrl, Name, PackageMeta, RichFHIRSchema } from "@typeschema/types";
5
5
  export type Register = {
6
6
  appendFs(fs: FHIRSchema): void;
7
- ensureCanonicalUrl(name: Name | CanonicalUrl): CanonicalUrl;
7
+ ensureCanonicalUrl(name: string | Name | CanonicalUrl): CanonicalUrl;
8
8
  resolveSd(canonicalUrl: CanonicalUrl): StructureDefinition | undefined;
9
9
  resolveFs(canonicalUrl: CanonicalUrl): RichFHIRSchema | undefined;
10
10
  resolveFsGenealogy(canonicalUrl: CanonicalUrl): RichFHIRSchema[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atomic-ehr/codegen",
3
- "version": "0.0.1-canary.20251003081054.6ba9d37",
3
+ "version": "0.0.1-canary.20251003082149.3db28b4",
4
4
  "description": "Code generation tools for FHIR resources and TypeSchema definitions",
5
5
  "keywords": [
6
6
  "fhir",