@medplum/core 4.0.0 → 4.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
- var ze=class{constructor(e,t){this.operator=e;this.child=t}toString(){return`${this.operator}(${this.child.toString()})`}},Z=class{constructor(e,t,n){this.operator=e;this.left=t;this.right=n}toString(){return`${this.left.toString()} ${this.operator} ${this.right.toString()}`}},Je=class{constructor(){this.prefixParselets={};this.infixParselets={}}registerInfix(e,t){return this.infixParselets[e]=t,this}registerPrefix(e,t){return this.prefixParselets[e]=t,this}prefix(e,t,n){return this.registerPrefix(e,{parse(i,o){let s=i.consumeAndParse(t);return n(o,s)}})}infixLeft(e,t,n){return this.registerInfix(e,{parse(i,o,s){let a=i.consumeAndParse(t);return n(o,s,a)},precedence:t})}construct(e){return new Gt(e,this.prefixParselets,this.infixParselets)}},Gt=class{constructor(e,t,n){this.tokens=e,this.prefixParselets=t,this.infixParselets=n}hasMore(){return this.tokens.length>0}match(e){return this.peek()?.id!==e?!1:(this.consume(),!0)}consumeAndParse(e=1/0){let t=this.consume(),n=this.prefixParselets[t.id];if(!n)throw Error(`Parse error at "${t.value}" (line ${t.line}, column ${t.column}). No matching prefix parselet.`);let i=n.parse(this,t);for(;e>this.getPrecedence();){let o=this.consume();i=this.getInfixParselet(o).parse(this,i,o)}return i}getPrecedence(){let e=this.peek();if(!e)return 1/0;let t=this.getInfixParselet(e);return t?t.precedence:1/0}consume(e,t){if(!this.tokens.length)throw Error("Cant consume unknown more tokens.");if(e&&this.peek()?.id!==e){let n=this.peek();throw Error(`Expected ${e} but got "${n.id}" (${n.value}) at line ${n.line} column ${n.column}.`)}if(t&&this.peek()?.value!==t){let n=this.peek();throw Error(`Expected "${t}" but got "${n.value}" at line ${n.line} column ${n.column}.`)}return this.tokens.shift()}peek(){return this.tokens.length>0?this.tokens[0]:void 0}removeComments(){this.tokens=this.tokens.filter(e=>e.id!=="Comment")}getInfixParselet(e){return this.infixParselets[e.id==="Symbol"?e.value:e.id]}};var rn="http://unitsofmeasure.org",hc="http://loinc.org",mc="http://snomed.info/sct",yc="http://www.nlm.nih.gov/research/umls/rxnorm",gc="http://www.ama-assn.org/go/cpt",xc="http://hl7.org/fhir/sid/icd-10",vc="http://hl7.org/fhir/sid/ndc",nn="http://hl7.org",Tc="http://terminology.hl7.org";var Ht="ok",Ke="created",Qt="gone",zt="not-modified",Jt="found",Kt="not-found",Yt="conflict",Zt="unauthorized",on="forbidden",sn="precondition-failed",an="multiple-matches",cn="too-many-requests",Ye="accepted",un="server-timeout",bc={resourceType:"OperationOutcome",id:Ht,issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},Ec={resourceType:"OperationOutcome",id:Ke,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},Rc={resourceType:"OperationOutcome",id:zt,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},ln={resourceType:"OperationOutcome",id:Kt,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},Te={resourceType:"OperationOutcome",id:Zt,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},pn={...Te,issue:[...Te.issue,{severity:"error",code:"expired",details:{text:"Token expired"}}]},Xt={...Te,issue:[...Te.issue,{severity:"error",code:"invalid",details:{text:"Token not issued for this audience"}}]},Cc={resourceType:"OperationOutcome",id:on,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},Pc={resourceType:"OperationOutcome",id:Qt,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},wc={resourceType:"OperationOutcome",id:sn,issue:[{severity:"error",code:"processing",details:{text:"Precondition Failed"}}]},Ac={resourceType:"OperationOutcome",id:an,issue:[{severity:"error",code:"multiple-matches",details:{text:"Multiple resources found matching condition"}}]},Oc={resourceType:"OperationOutcome",id:cn,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function Ic(r){return{resourceType:"OperationOutcome",id:Ye,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:r}]}}function S(r,e){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:r},...e?{expression:[e]}:void 0}]}}function kc(r,e){return{resourceType:"OperationOutcome",id:Yt,issue:[{severity:"error",code:"conflict",details:{coding:e?[{code:e}]:void 0,text:r}}]}}function m(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"structure",details:{text:r}}]}}function dn(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:r.toString()}]}}function Dc(r){return{resourceType:"OperationOutcome",id:un,issue:[{severity:"error",code:"timeout",details:{text:r??"Server timeout"}}]}}function Vc(r){let e=r.toString();return{resourceType:"OperationOutcome",id:Jt,issue:[{severity:"information",code:"informational",details:{coding:[{system:"urn:ietf:rfc:3986",code:e}],text:"Redirect to "+e}}]}}function Se(r){return typeof r=="object"&&r!==null&&r.resourceType==="OperationOutcome"}function er(r){return r.id===Ht||r.id===Ke||r.id===zt||r.id===Ye}function Mc(r){return r.id===Ke}function _c(r){return r.id===Ye}function Nc(r){return r.id===Jt}function Fc(r){return r.id===Kt}function Lc(r){return r.id===Yt}function Uc(r){return r.id===Qt}function Bc(r){return r.id===Zt}function Wc(r){switch(r.id){case Ht:return 200;case Ke:return 201;case Ye:return 202;case Jt:return 302;case zt:return 304;case Zt:return 401;case on:return 403;case Kt:return 404;case Yt:return 409;case Qt:return 410;case sn:case an:return 412;case cn:return 429;case un:return 504;default:return r.issue?.[0]?.code==="exception"?500:400}}function qc(r,e){if(!er(r)||e===void 0)throw new d(r)}var d=class extends Error{constructor(e,t){super(fn(e)),this.outcome=e,this.cause=t}};function Ze(r){return r instanceof d?r.outcome:Se(r)?r:S(be(r))}function be(r){return r?typeof r=="string"?r:r instanceof Error?r.message:Se(r)?fn(r):typeof r=="object"&&"code"in r&&typeof r.code=="string"?r.code:JSON.stringify(r):"Unknown error"}function fn(r){let e=r.issue?.map(Xi)??[];return e.length>0?e.join("; "):"Unknown error"}function Xi(r){let e;return r.details?.text?r.diagnostics?e=`${r.details.text} (${r.diagnostics})`:e=r.details.text:r.diagnostics?e=r.diagnostics:e="Unknown error",r.expression?.length&&(e+=` (${r.expression.join(", ")})`),e}function ce(r,e,t,n,i){let o={severity:r,code:e,details:{text:t},expression:[n]};return i&&(o.diagnostics=JSON.stringify(i)),o}function v(r,e){return ce("error","structure",e,r)}function hn(r,e){return ce("error","invariant",`Constraint ${e.key} not met: ${e.description}`,r,{fhirpath:e.expression})}function mn(r,e,t,n){return ce("error","processing",e,r,{...n,error:t})}var eo={"http://hl7.org/fhirpath/System.String":"string"};function jc(r){let e={};return r.min!==0&&(e.min=r.min),r.max!==1&&Number.isFinite(r.max)?e.max=r.max:r.max===Number.POSITIVE_INFINITY&&(e.max=Number.MAX_SAFE_INTEGER),e.type=r.type?.map(t=>({...t,extension:void 0,code:eo[t.code]??t.code})),e}function to(r,e){let t=e.max&&e.max===Number.MAX_SAFE_INTEGER?Number.POSITIVE_INFINITY:e.max;return{path:r,description:"",type:e.type??[],min:e.min??0,max:t??1,isArray:!!t&&t>1,constraints:[]}}function yn(r){let e=Object.create(null);for(let[t,n]of Object.entries(r))e[t]={name:t,type:t,path:t,elements:Object.fromEntries(Object.entries(n.elements).map(([i,o])=>[i,to(i,o)])),constraints:[],innerTypes:[]};return e}var gn={Element:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]}}},BackboneElement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]}}},Address:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"code"}]},text:{type:[{code:"string"}]},line:{max:9007199254740991,type:[{code:"string"}]},city:{type:[{code:"string"}]},district:{type:[{code:"string"}]},state:{type:[{code:"string"}]},postalCode:{type:[{code:"string"}]},country:{type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Age:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Annotation:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"author[x]":{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Organization"]},{code:"string"}]},time:{type:[{code:"dateTime"}]},text:{min:1,type:[{code:"markdown"}]}}},Attachment:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},contentType:{type:[{code:"code"}]},language:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]},url:{type:[{code:"url"}]},size:{type:[{code:"unsignedInt"}]},hash:{type:[{code:"base64Binary"}]},title:{type:[{code:"string"}]},creation:{type:[{code:"dateTime"}]}}},CodeableConcept:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},coding:{max:9007199254740991,type:[{code:"Coding"}]},text:{type:[{code:"string"}]}}},Coding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"uri"}]},version:{type:[{code:"string"}]},code:{type:[{code:"code"}]},display:{type:[{code:"string"}]},userSelected:{type:[{code:"boolean"}]}}},ContactDetail:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"string"}]},telecom:{max:9007199254740991,type:[{code:"ContactPoint"}]}}},ContactPoint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"code"}]},value:{type:[{code:"string"}]},use:{type:[{code:"code"}]},rank:{type:[{code:"positiveInt"}]},period:{type:[{code:"Period"}]}}},Contributor:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{min:1,type:[{code:"string"}]},contact:{max:9007199254740991,type:[{code:"ContactDetail"}]}}},Count:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},DataRequirement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},"subject[x]":{type:[{code:"CodeableConcept"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Group"]}]},mustSupport:{max:9007199254740991,type:[{code:"string"}]},codeFilter:{max:9007199254740991,type:[{code:"DataRequirementCodeFilter"}]},dateFilter:{max:9007199254740991,type:[{code:"DataRequirementDateFilter"}]},limit:{type:[{code:"positiveInt"}]},sort:{max:9007199254740991,type:[{code:"DataRequirementSort"}]}}},DataRequirementCodeFilter:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]},code:{max:9007199254740991,type:[{code:"Coding"}]}}},DataRequirementDateFilter:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},"value[x]":{type:[{code:"dateTime"},{code:"Period"},{code:"Duration"}]}}},DataRequirementSort:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},direction:{min:1,type:[{code:"code"}]}}},Distance:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Dosage:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},sequence:{type:[{code:"integer"}]},text:{type:[{code:"string"}]},additionalInstruction:{max:9007199254740991,type:[{code:"CodeableConcept"}]},patientInstruction:{type:[{code:"string"}]},timing:{type:[{code:"Timing"}]},"asNeeded[x]":{type:[{code:"boolean"},{code:"CodeableConcept"}]},site:{type:[{code:"CodeableConcept"}]},route:{type:[{code:"CodeableConcept"}]},method:{type:[{code:"CodeableConcept"}]},doseAndRate:{max:9007199254740991,type:[{code:"DosageDoseAndRate"}]},maxDosePerPeriod:{type:[{code:"Ratio"}]},maxDosePerAdministration:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},maxDosePerLifetime:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},DosageDoseAndRate:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{type:[{code:"CodeableConcept"}]},"dose[x]":{type:[{code:"Range"},{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},"rate[x]":{type:[{code:"Ratio"},{code:"Range"},{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},Duration:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},ElementDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},representation:{max:9007199254740991,type:[{code:"code"}]},sliceName:{type:[{code:"string"}]},sliceIsConstraining:{type:[{code:"boolean"}]},label:{type:[{code:"string"}]},code:{max:9007199254740991,type:[{code:"Coding"}]},slicing:{type:[{code:"ElementDefinitionSlicing"}]},short:{type:[{code:"string"}]},definition:{type:[{code:"markdown"}]},comment:{type:[{code:"markdown"}]},requirements:{type:[{code:"markdown"}]},alias:{max:9007199254740991,type:[{code:"string"}]},min:{type:[{code:"unsignedInt"}]},max:{type:[{code:"string"}]},base:{type:[{code:"ElementDefinitionBase"}]},contentReference:{type:[{code:"uri"}]},type:{max:9007199254740991,type:[{code:"ElementDefinitionType"}]},"defaultValue[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},meaningWhenMissing:{type:[{code:"markdown"}]},orderMeaning:{type:[{code:"string"}]},"fixed[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},"pattern[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},example:{max:9007199254740991,type:[{code:"ElementDefinitionExample"}]},"minValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},"maxValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},maxLength:{type:[{code:"integer"}]},condition:{max:9007199254740991,type:[{code:"id"}]},constraint:{max:9007199254740991,type:[{code:"ElementDefinitionConstraint"}]},mustSupport:{type:[{code:"boolean"}]},isModifier:{type:[{code:"boolean"}]},isModifierReason:{type:[{code:"string"}]},isSummary:{type:[{code:"boolean"}]},binding:{type:[{code:"ElementDefinitionBinding"}]},mapping:{max:9007199254740991,type:[{code:"ElementDefinitionMapping"}]}}},ElementDefinitionSlicingDiscriminator:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},path:{min:1,type:[{code:"string"}]}}},ElementDefinitionSlicing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},discriminator:{max:9007199254740991,type:[{code:"ElementDefinitionSlicingDiscriminator"}]},description:{type:[{code:"string"}]},ordered:{type:[{code:"boolean"}]},rules:{min:1,type:[{code:"code"}]}}},ElementDefinitionBase:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},min:{min:1,type:[{code:"unsignedInt"}]},max:{min:1,type:[{code:"string"}]}}},ElementDefinitionType:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"uri"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},targetProfile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},aggregation:{max:9007199254740991,type:[{code:"code"}]},versioning:{type:[{code:"code"}]}}},ElementDefinitionExample:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},label:{min:1,type:[{code:"string"}]},"value[x]":{min:1,type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]}}},ElementDefinitionConstraint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},key:{min:1,type:[{code:"id"}]},requirements:{type:[{code:"string"}]},severity:{min:1,type:[{code:"code"}]},human:{min:1,type:[{code:"string"}]},expression:{type:[{code:"string"}]},xpath:{type:[{code:"string"}]},source:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]}}},ElementDefinitionBinding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},strength:{min:1,type:[{code:"code"}]},description:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]}}},ElementDefinitionMapping:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},identity:{min:1,type:[{code:"id"}]},language:{type:[{code:"code"}]},map:{min:1,type:[{code:"string"}]},comment:{type:[{code:"string"}]}}},Expression:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},description:{type:[{code:"string"}]},name:{type:[{code:"id"}]},language:{min:1,type:[{code:"code"}]},expression:{type:[{code:"string"}]},reference:{type:[{code:"uri"}]}}},Extension:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},url:{min:1,type:[{code:"uri"}]},"value[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]}}},HumanName:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},text:{type:[{code:"string"}]},family:{type:[{code:"string"}]},given:{max:9007199254740991,type:[{code:"string"}]},prefix:{max:9007199254740991,type:[{code:"string"}]},suffix:{max:9007199254740991,type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Identifier:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"CodeableConcept"}]},system:{type:[{code:"uri"}]},value:{type:[{code:"string"}]},period:{type:[{code:"Period"}]},assigner:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MarketingStatus:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},country:{min:1,type:[{code:"CodeableConcept"}]},jurisdiction:{type:[{code:"CodeableConcept"}]},status:{min:1,type:[{code:"CodeableConcept"}]},dateRange:{min:1,type:[{code:"Period"}]},restoreDate:{type:[{code:"dateTime"}]}}},Meta:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},versionId:{type:[{code:"id"}]},lastUpdated:{type:[{code:"instant"}]},source:{type:[{code:"uri"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},security:{max:9007199254740991,type:[{code:"Coding"}]},tag:{max:9007199254740991,type:[{code:"Coding"}]},project:{type:[{code:"uri"}]},author:{type:[{code:"Reference"}]},onBehalfOf:{type:[{code:"Reference"}]},account:{type:[{code:"Reference"}]},accounts:{max:9007199254740991,type:[{code:"Reference"}]},compartment:{max:9007199254740991,type:[{code:"Reference"}]}}},Money:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},currency:{type:[{code:"code"}]}}},Narrative:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},status:{min:1,type:[{code:"code"}]},div:{min:1,type:[{code:"xhtml"}]}}},ParameterDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"code"}]},use:{min:1,type:[{code:"code"}]},min:{type:[{code:"integer"}]},max:{type:[{code:"string"}]},documentation:{type:[{code:"string"}]},type:{min:1,type:[{code:"code"}]},profile:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]}}},Period:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},start:{type:[{code:"dateTime"}]},end:{type:[{code:"dateTime"}]}}},Population:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"age[x]":{type:[{code:"Range"},{code:"CodeableConcept"}]},gender:{type:[{code:"CodeableConcept"}]},race:{type:[{code:"CodeableConcept"}]},physiologicalCondition:{type:[{code:"CodeableConcept"}]}}},ProdCharacteristic:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},height:{type:[{code:"Quantity"}]},width:{type:[{code:"Quantity"}]},depth:{type:[{code:"Quantity"}]},weight:{type:[{code:"Quantity"}]},nominalVolume:{type:[{code:"Quantity"}]},externalDiameter:{type:[{code:"Quantity"}]},shape:{type:[{code:"string"}]},color:{max:9007199254740991,type:[{code:"string"}]},imprint:{max:9007199254740991,type:[{code:"string"}]},image:{max:9007199254740991,type:[{code:"Attachment"}]},scoring:{type:[{code:"CodeableConcept"}]}}},ProductShelfLife:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},identifier:{type:[{code:"Identifier"}]},type:{min:1,type:[{code:"CodeableConcept"}]},period:{min:1,type:[{code:"Quantity"}]},specialPrecautionsForStorage:{max:9007199254740991,type:[{code:"CodeableConcept"}]}}},Quantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Range:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},low:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},high:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},Ratio:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},numerator:{type:[{code:"Quantity"}]},denominator:{type:[{code:"Quantity"}]}}},Reference:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},reference:{type:[{code:"string"}]},type:{type:[{code:"uri"}]},identifier:{type:[{code:"Identifier"}]},display:{type:[{code:"string"}]}}},RelatedArtifact:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},label:{type:[{code:"string"}]},display:{type:[{code:"string"}]},citation:{type:[{code:"markdown"}]},url:{type:[{code:"url"}]},document:{type:[{code:"Attachment"}]},resource:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/Resource"]}]}}},SampledData:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},origin:{min:1,type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},period:{min:1,type:[{code:"decimal"}]},factor:{type:[{code:"decimal"}]},lowerLimit:{type:[{code:"decimal"}]},upperLimit:{type:[{code:"decimal"}]},dimensions:{min:1,type:[{code:"positiveInt"}]},data:{type:[{code:"string"}]}}},Signature:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,max:9007199254740991,type:[{code:"Coding"}]},when:{min:1,type:[{code:"instant"}]},who:{min:1,type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},onBehalfOf:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},targetFormat:{type:[{code:"code"}]},sigFormat:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]}}},SubstanceAmount:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"amount[x]":{type:[{code:"Quantity"},{code:"Range"},{code:"string"}]},amountType:{type:[{code:"CodeableConcept"}]},amountText:{type:[{code:"string"}]},referenceRange:{type:[{code:"SubstanceAmountReferenceRange"}]}}},SubstanceAmountReferenceRange:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},lowLimit:{type:[{code:"Quantity"}]},highLimit:{type:[{code:"Quantity"}]}}},Timing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},event:{max:9007199254740991,type:[{code:"dateTime"}]},repeat:{type:[{code:"TimingRepeat"}]},code:{type:[{code:"CodeableConcept"}]}}},TimingRepeat:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"bounds[x]":{type:[{code:"Duration"},{code:"Range"},{code:"Period"}]},count:{type:[{code:"positiveInt"}]},countMax:{type:[{code:"positiveInt"}]},duration:{type:[{code:"decimal"}]},durationMax:{type:[{code:"decimal"}]},durationUnit:{type:[{code:"code"}]},frequency:{type:[{code:"positiveInt"}]},frequencyMax:{type:[{code:"positiveInt"}]},period:{type:[{code:"decimal"}]},periodMax:{type:[{code:"decimal"}]},periodUnit:{type:[{code:"code"}]},dayOfWeek:{max:9007199254740991,type:[{code:"code"}]},timeOfDay:{max:9007199254740991,type:[{code:"time"}]},when:{max:9007199254740991,type:[{code:"code"}]},offset:{type:[{code:"unsignedInt"}]}}},TriggerDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{type:[{code:"string"}]},"timing[x]":{type:[{code:"Timing"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Schedule"]},{code:"date"},{code:"dateTime"}]},data:{max:9007199254740991,type:[{code:"DataRequirement"}]},condition:{type:[{code:"Expression"}]}}},UsageContext:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"Coding"}]},"value[x]":{min:1,type:[{code:"CodeableConcept"},{code:"Quantity"},{code:"Range"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/PlanDefinition","http://hl7.org/fhir/StructureDefinition/ResearchStudy","http://hl7.org/fhir/StructureDefinition/InsurancePlan","http://hl7.org/fhir/StructureDefinition/HealthcareService","http://hl7.org/fhir/StructureDefinition/Group","http://hl7.org/fhir/StructureDefinition/Location","http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MoneyQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},SimpleQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{max:0,type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},IdentityProvider:{elements:{authorizeUrl:{min:1,type:[{code:"string"}]},tokenUrl:{min:1,type:[{code:"string"}]},tokenAuthMethod:{type:[{code:"code"}]},userInfoUrl:{min:1,type:[{code:"string"}]},clientId:{min:1,type:[{code:"string"}]},clientSecret:{min:1,type:[{code:"string"}]},usePkce:{type:[{code:"boolean"}]},useSubject:{type:[{code:"boolean"}]}}}};function ir(r){return new rr(r).parse()}var ue=yn(gn),or=Object.create(null),xn=Object.create(null),no={"http://hl7.org/fhir/StructureDefinition/MoneyQuantity":"MoneyQuantity","http://hl7.org/fhir/StructureDefinition/SimpleQuantity":"SimpleQuantity","http://hl7.org/fhir/uv/sql-on-fhir/StructureDefinition/ViewDefinition":"ViewDefinition"};function bn(r){let e;return e=xn[r],e||(e=xn[r]=Object.create(null)),e}function sr(r){let t=(Array.isArray(r)?r:r.entry?.map(n=>n.resource)??[]).filter(n=>n?.resourceType==="StructureDefinition");An(t);for(let n of t)ar(n)}function ar(r){if(!r?.name)throw new Error("Failed loading StructureDefinition from bundle");if(r.resourceType!=="StructureDefinition")return;let e=ir(r),t=no[r.url],n,i;t?(n=ue,i=t):r.url===`http://hl7.org/fhir/StructureDefinition/${r.type}`||r.url===`https://medplum.com/fhir/StructureDefinition/${r.type}`||r.type?.startsWith("http://")||r.type?.startsWith("https://")?(n=ue,i=r.type):(n=bn(r.url),i=r.type),n[i]=e;for(let o of e.innerTypes)o.parentType=e,n[o.name]=o;or[r.url]=e}function En(){return ue}function Rn(r){return!!ue[r]}function Ve(r,e){if(e){let t=bn(e)[r];if(t)return t}return ue[r]}function X(r,e){let t=Ve(r,e);if(!t)throw new d(S("Unknown data type: "+r));return t}function Cn(r){let e=ue[r];return e&&cr(e)}function Pn(r){return!!or[r]}function wn(r){return or[r]}var rr=class{constructor(e){if(!e.snapshot?.element||e.snapshot.element.length===0)throw new Error(`No snapshot defined for StructureDefinition '${e.name}'`);this.root=e.snapshot.element[0],this.elements=e.snapshot.element.slice(1),this.elementIndex=Object.create(null),this.index=0,this.resourceSchema={name:e.name,path:this.root.path,title:e.title,type:e.type,url:e.url,version:e.version,kind:e.kind,description:ao(e),elements:{},constraints:this.parseElementDefinition(this.root).constraints,innerTypes:[],summaryProperties:new Set,mandatoryProperties:new Set},this.innerTypes=[]}parse(){let e=this.next();for(;e;){if(e.sliceName)this.parseSliceStart(e);else if(e.id?.includes(":")){if(this.slicingContext?.current){let t=tr(e,this.slicingContext.path);this.slicingContext.current.elements[t]=this.parseElementDefinition(e)}}else{let t=this.parseElementDefinition(e);this.checkFieldEnter(e,t);let n=this.backboneContext;for(;n;){if(e.path?.startsWith(n.path+".")){n.type.elements[tr(e,n.path)]=t;break}n=n.parent}if(!n){let i=tr(e,this.root.path);e.isSummary&&this.resourceSchema.summaryProperties?.add(i.replace("[x]","")),t.min>0&&this.resourceSchema.mandatoryProperties?.add(i.replace("[x]","")),this.resourceSchema.elements[i]=t}this.checkFieldExit(e)}e=this.next()}return this.checkFieldExit(),this.innerTypes.length>0&&(this.resourceSchema.innerTypes=this.innerTypes),this.resourceSchema}checkFieldEnter(e,t){this.isInnerType(e)&&this.enterInnerType(e),this.slicingContext&&!Ee(this.slicingContext.path,e?.path)&&(this.slicingContext=void 0),e.slicing&&!this.slicingContext&&this.enterSlice(e,t)}enterInnerType(e){for(;this.backboneContext&&!Ee(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;let t=nr(e);this.backboneContext={type:{name:t,type:t,path:e.path,title:e.label,description:e.definition,elements:{},constraints:this.parseElementDefinition(e).constraints,innerTypes:[]},path:e.path,parent:Ee(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,t){so(e)&&!this.peek()?.sliceName||(t.slicing={discriminator:(e.slicing?.discriminator??[]).map(n=>{if(n.type!=="value"&&n.type!=="pattern"&&n.type!=="type")throw new Error(`Unsupported slicing discriminator type: ${n.type}`);return{path:n.path,type:n.type}}),slices:[],ordered:e.slicing?.ordered??!1,rule:e.slicing?.rules},this.slicingContext={field:t.slicing,path:e.path??""})}checkFieldExit(e=void 0){if(this.backboneContext&&!Ee(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!Ee(this.backboneContext.path,e?.path));else this.innerTypes.push(this.backboneContext.type),this.backboneContext=void 0}next(){let e=this.peek();if(e)return this.index++,e}peek(){let e=this.elements[this.index];if(e){if(this.elementIndex[e.path??""]=e,e.contentReference){let t=e.contentReference.slice(e.contentReference.indexOf("#")+1),n=this.elementIndex[t];return n?{...n,id:e.id,path:e.path,min:e.min??n.min,max:e.max??n.max,base:{path:n.base?.path??t,min:e.base?.min??n.base?.min??n.min,max:e.base?.max??n.base?.max??n.max},contentReference:e.contentReference,definition:e.definition}:void 0}return e}}isInnerType(e){let t=this.peek();return!!(Ee(e?.path,t?.path)&&e.type?.some(n=>["BackboneElement","Element"].includes(n.code)))}parseSliceStart(e){if(!this.slicingContext)throw new Error(`Invalid slice start before discriminator: ${e.sliceName} (${e.id})`);this.slicingContext.current={...this.parseElementDefinition(e),name:e.sliceName??"",definition:e.definition,elements:{}},this.slicingContext.field.slices.push(this.slicingContext.current)}parseElementDefinitionType(e){return(e.type??[]).map(t=>{let n;return(t.code==="BackboneElement"||t.code==="Element")&&(n=nr(e)),n||(n=ee(t,"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type")?.valueUrl),n||(n=t.code??""),{code:n,targetProfile:t.targetProfile,profile:t.profile}})}parseElementDefinition(e){let t=Tn(e.max),n=e.base?.max?Tn(e.base.max):t,i={type:"ElementDefinition",value:e};return{description:e.definition||"",path:e.path||e.base?.path||"",min:e.min??0,max:t,isArray:n>1,constraints:(e.constraint??[]).map(o=>({key:o.key??"",severity:o.severity??"error",expression:o.expression??"",description:o.human??""})),type:this.parseElementDefinitionType(e),fixed:Sn(P(i,"fixed[x]")),pattern:Sn(P(i,"pattern[x]")),binding:e.binding}}};function tu(r,e){if(!r)return;let t=[];for(let n of e){t.push("_"+n);let i=ue[r.resourceType].elements[n+"[x]"];i&&t.push(...i.type.map(o=>n+k(o.code)))}for(let n of Object.getOwnPropertyNames(r))!e.includes(n)&&!t.includes(n)&&!io.includes(n)&&Object.defineProperty(r,n,{enumerable:!1,writable:!1,value:void 0});return r.meta={...r.meta,tag:r.meta?.tag?r.meta.tag.concat(vn):[vn]},r}var vn={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},io=["resourceType","id","meta"];function Tn(r){return r==="*"?Number.POSITIVE_INFINITY:Number.parseInt(r,10)}function tr(r,e=""){return oo(r.path,e)}function oo(r,e){return r?e&&r.startsWith(e)?r.substring(e.length+1):r:""}function Ee(r,e){return!r||!e?!1:e.startsWith(r+".")||e===r}function Sn(r){return Array.isArray(r)&&r.length>0?r[0]:b(r)?void 0:r}function so(r){let e=r.slicing?.discriminator;return!!(r.type?.some(t=>t.code==="Extension")&&e?.length===1&&e[0].type==="value"&&e[0].path==="url")}function ao(r){let e=r.description;return e?.startsWith(`Base StructureDefinition for ${r.name} Type: `)&&(e=e.substring(`Base StructureDefinition for ${r.name} Type: `.length)),e}function pr(r,e,t){new ur(r,e,t).crawl()}function pu(r,e,t){return new lr(r,e,t).crawl()}var ur=class{constructor(e,t,n){this.root=e,this.visitor=t,this.schema=n?.schema??X(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}crawl(){this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}crawlObject(e,t,n){let i=O(e.value);if(i&&this.visitor.onEnterResource&&this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties)for(let o of Object.keys(e.value))this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&this.visitor.onExitResource(n,e,t)}crawlProperty(e,t,n,i){let o=Re(e,t,{withPath:!0});this.visitor.visitProperty&&this.visitor.visitProperty(e,t,i,o,n);for(let s of o)if(s)for(let a of Me(s))this.crawlPropertyValue(a,i)}crawlPropertyValue(e,t){if(!Xe(e.type)){let n=X(e.type);this.crawlObject(e,n,t)}}},lr=class{constructor(e,t,n){this.root=e,this.visitor=t,this.schema=n?.schema??X(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}async crawl(){return this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}async crawlObject(e,t,n){let i=O(e.value);if(i&&this.visitor.onEnterResource&&await this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&await this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties&&e.value)for(let o of Object.keys(e.value))await this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))await this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&await this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&await this.visitor.onExitResource(n,e,t)}async crawlProperty(e,t,n,i){let o=Re(e,t,{withPath:!0});if(this.visitor.visitPropertyAsync)for(let s of o)await this.visitor.visitPropertyAsync(e,t,i,s,n);for(let s of o)if(s)for(let a of Me(s))await this.crawlPropertyValue(a,i)}async crawlPropertyValue(e,t){if(!Xe(e.type)){let n=X(e.type);await this.crawlObject(e,n,t)}}};function Re(r,e,t){if(r===void 0)return[void 0];if(e==="$this")return[r];let n=t?.withPath?co:P,[i,...o]=e.split("."),s=[n(r,i,t)];for(let a of o){let c=[];for(let u of s)if(Array.isArray(u))for(let p of u)c.push(n(p,a,t));else(t?.withPath&&u&&u.value!==void 0||!t?.withPath&&u!==void 0)&&c.push(n(u,a,t));s=c}return s}function co(r,e,t){let n=r.path;return uo(P(r,e,t),n,e)}function uo(r,e,t){let n=e?e+".":"";return r===void 0?{type:"undefined",value:void 0,path:`${n}${t}`}:Array.isArray(r)?r.map((i,o)=>({...i,path:`${n}${t}[${o}]`})):{...r,path:`${n}${t}`}}var dr={base64Binary:"string",boolean:"boolean",canonical:"string",code:"string",date:"string",dateTime:"string",decimal:"number",id:"string",instant:"string",integer:"number",integer64:"string",markdown:"string",oid:"string",positiveInt:"number",string:"string",time:"string",unsignedInt:"number",uri:"string",url:"string",uuid:"string",xhtml:"string","http://hl7.org/fhirpath/System.String":"string"};function Xe(r){return r==="undefined"||r in dr}var tt={base64Binary:/^([A-Za-z\d+/]{4})*([A-Za-z\d+/]{2}==|[A-Za-z\d+/]{3}=)?$/,canonical:/^\S*$/,code:/^[^\s]+( [^\s]+)*$/,date:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1]))?)?$/,dateTime:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1])(T([01]\d|2[0-3])(:[0-5]\d:([0-5]\d|60)(\.\d{1,9})?)?)?)?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00)?)?)?$/,id:/^[A-Za-z0-9\-.]{1,64}$/,instant:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])T([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00))$/,markdown:/^[\r\n\t\u0020-\uFFFF]+$/,oid:/^urn:oid:[0-2](\.(0|[1-9]\d*))+$/,string:/^[\r\n\t\u0020-\uFFFF]+$/,time:/^([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?$/,uri:/^\S*$/,url:/^\S*$/,uuid:/^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,xhtml:/.*/},lo={"ele-1":!0,"dom-3":!0,"org-1":!0,"sdf-19":!0};function Iu(r,e){if(!r.resourceType)throw new d(m("Missing resource type"));return new et(g(r),e).validate()}function ku(r,e){return new et(r,e).validate()}var et=class{constructor(e,t){this.issues=[],this.root=e,this.currentResource=[],O(e.value)&&this.currentResource.push(e.value),t?.profile?this.schema=ir(t.profile):this.schema=X(e.type)}validate(){this.constraintsCheck({...this.root,path:this.schema.path},this.schema),fr(this.root.value,this.schema.path,this.issues),pr(this.root,this,{schema:this.schema,initialPath:this.schema.path});let e=this.issues,t=!1;for(let n of e)n.severity==="error"&&(t=!0);if(t)throw new d({resourceType:"OperationOutcome",issue:e});return e}onExitObject(e,t,n){this.checkAdditionalProperties(t,n.elements,t.path)}onEnterResource(e,t){this.currentResource.push(t.value)}onExitResource(){this.currentResource.pop()}visitProperty(e,t,n,i,o){let s=o.elements[t];if(!s)throw new Error(`Missing element validation schema for ${t}`);for(let a of i){if(!this.checkPresence(a,s,n))return;let c;if(s.isArray){if(!Array.isArray(a)){this.issues.push(v(n,"Expected array of values for property"));return}c=a}else{if(Array.isArray(a)){this.issues.push(v(n,"Expected single value for property"));return}c=[a]}(c.length<s.min||c.length>s.max)&&this.issues.push(v(s.path,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${c.length}`)),ho(a,s)||this.issues.push(v(n,"Value did not match expected pattern"));let u=s.slicing?Object.fromEntries(s.slicing.slices.map(p=>[p.name,0])):void 0;for(let p of c){this.constraintsCheck(p,s),this.referenceTypeCheck(p,s),this.checkPropertyValue(p);let h=mo(p,s.slicing);h&&u&&(u[h]+=1)}this.validateSlices(s.slicing?.slices,u,n)}}checkPresence(e,t,n){return!Array.isArray(e)&&e.value===void 0?(t.min>0&&this.issues.push(v(e.path,"Missing required property")),!1):b(e)?(this.issues.push(v(n,"Invalid empty value")),!1):!0}checkPropertyValue(e){Xe(e.type)&&this.validatePrimitiveType(e)}validateSlices(e,t,n){if(!(!e||!t))for(let i of e){let o=t[i.name];(o<i.min||o>i.max)&&this.issues.push(v(n,`Incorrect number of values provided for slice '${i.name}': expected ${i.min}..${Number.isFinite(i.max)?i.max:"*"}, but found ${o}`))}}checkAdditionalProperties(e,t,n){let i=e.value;if(!i)return;let o={};for(let s of Object.keys(i)){if(s==="resourceType")continue;let a=fo(e,s,t);if(a){let c,u;a.startsWith("_")?(c=a.slice(1),u=s.slice(1)):(c="_"+a,u="_"+s),c in o&&o[c]!==u&&this.issues.push(ce("warning","structure",`Type of primitive extension does not match the type of property "${a.startsWith("_")?a.slice(1):a}"`,a)),o[a]&&this.issues.push(ce("warning","structure",`Conflicting choice of type properties: "${s}", "${o[a]}"`,s)),o[a]=s;continue}!(s in t)&&!(s.startsWith("_")&&s.slice(1)in t)&&this.issues.push(v(`${n}.${s}`,`Invalid additional property "${s}"`))}}constraintsCheck(e,t){let n=t.constraints;if(n){for(let i of n)if(i.severity==="error"&&!(i.key in lo)&&!this.isExpressionTrue(i,e)){this.issues.push(hn(e.path,i));return}}}referenceTypeCheck(e,t){if(e.type!=="Reference")return;let n=e.value;if(!q(n))return;let i=n.reference.split("/")[0];if(!i)return;let o=t.type.find(h=>h.code==="Reference")?.targetProfile;if(!o)return;let s=nn+"/fhir/StructureDefinition/",a=s+"Resource",c=s+i,u="https://medplum.com/fhir/StructureDefinition/",p=u+i;for(let h of o)if(h===a||h===c||h===p||!h.startsWith(s)&&!h.startsWith(u))return;this.issues.push(ce("warning","structure",`Invalid reference: got "${i}", expected "${o.join('", "')}"`,e.path))}isExpressionTrue(e,t){let n={"%context":t,"%ucum":g(rn)};this.currentResource.length>0&&(n["%resource"]=g(this.currentResource[this.currentResource.length-1])),O(this.root.value)&&(n["%rootResource"]=this.root);try{let i=w(e.expression,[t],n);return i.length===1&&i[0].value===!0}catch(i){return this.issues.push(mn(t.path,"Error evaluating invariant expression",i,{fhirpath:e.expression})),!1}}validatePrimitiveType(e){let[t,n]=yo(e),i=e.path;if(t){let{type:o,value:s}=t;if(!(o in dr)){this.issues.push(v(i,`Invalid JSON type: ${o} is not a valid FHIR type`));return}let a=dr[o];if(typeof s!==a){s!==null&&this.issues.push(v(i,`Invalid JSON type: expected ${a}, but got ${typeof s}`));return}a==="string"?this.validateString(s,o,i):a==="number"&&this.validateNumber(s,o,i)}n&&pr(n,this,{schema:X("Element"),initialPath:i})}validateString(e,t,n){if(!e.trim()){this.issues.push(v(n,"String must contain non-whitespace content"));return}let i=tt[t];i&&!i.exec(e)&&this.issues.push(v(n,"Invalid "+t+" format"))}validateNumber(e,t,n){Number.isNaN(e)||!Number.isFinite(e)?this.issues.push(v(n,"Invalid numeric value")):po(t)&&!Number.isInteger(e)?this.issues.push(v(n,"Expected number to be an integer")):t===l.positiveInt&&e<=0?this.issues.push(v(n,"Expected number to be positive")):t===l.unsignedInt&&e<0&&this.issues.push(v(n,"Expected number to be non-negative"))}};function po(r){return r===l.integer||r===l.positiveInt||r===l.unsignedInt}function fo(r,e,t){let n="";e.startsWith("_")&&(e=e.slice(1),n="_");let i=e.split(/(?=[A-Z])/g),o="";for(let s of i){o+=s;let a=o+"[x]";if(t[a])return P(r,o)?n+a:void 0}}function fr(r,e,t){for(let[n,i]of Object.entries(r)){let o=`${e}.${n}`,s=n.startsWith("_")?n.slice(1):`_${n}`;if(i===null)t.push(v(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?t.push(v(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!r[s]?.[a]?t.push(v(`${o}[${a}]`,"Invalid null value")):i[a]&&fr(i[a],`${o}[${a}]`,t);else typeof i=="object"&&fr(i,o,t)}}function ho(r,e){let t=Array.isArray(r)?r.map(n=>({type:n.type,value:n.value})):{type:r.type,value:r.value};return!(e.pattern&&!_e(t,e.pattern)||e.fixed&&!te(t,e.fixed))}function hr(r,e,t,n){if(Array.isArray(r))return!1;let i;e.path==="$this"?i=t:i=(n??t.elements)[e.path];let o=t.type;switch(e.type){case"value":case"pattern":if(!r||!i)return!1;if(i.pattern)return _e(r,i.pattern);if(i.fixed)return te(r,i.fixed);if(i.binding?.strength==="required"&&i.binding.valueSet)return!0;break;case"type":return!r||!o?.length?!1:o.some(s=>s.code===r.type)}return!1}function mo(r,e){if(e){for(let t of e.slices)if(e.discriminator.every(n=>Me(Re(r,n.path))?.some(i=>hr(i,n,t))))return t.name}}function yo(r){if(typeof r.value!="object"||!r.value)return[r,void 0];let e=r.value.valueOf();if(e===r.value)return[void 0,{type:"Element",value:r.value}];let t=new Set(Object.keys(e)),n=Object.entries(r.value).filter(([o,s])=>!t.has(o)),i=n.length>0?Object.fromEntries(n):void 0;return[{type:r.type,value:e},{type:"Element",value:i}]}function f(r){return[{type:l.boolean,value:r}]}function g(r){return r==null?{type:"undefined",value:void 0}:Number.isSafeInteger(r)?{type:l.integer,value:r}:typeof r=="number"?{type:l.decimal,value:r}:typeof r=="boolean"?{type:l.boolean,value:r}:typeof r=="string"?{type:l.string,value:r}:D(r)?{type:l.Quantity,value:r}:O(r)?{type:r.resourceType,value:r}:vr(r)?{type:l.CodeableConcept,value:r}:xr(r)?{type:l.Coding,value:r}:{type:l.BackboneElement,value:r}}function N(r){return r.length===0?!1:!!r[0].value}function $(r,e){if(r.length!==0){if(r.length===1&&(!e||r[0].type===e))return r[0];throw new Error(`Expected singleton of type ${e}, but found ${JSON.stringify(r)}`)}}function P(r,e,t){if(!r.value)return;let n=it(r.type,e,t?.profileUrl);return n?go(r,e,n):xo(r,e)}function go(r,e,t){let n=r.value,i=t.type;if(!i||i.length===0)return;let o,s="undefined",a,c=t.path.lastIndexOf("."),u=t.path.substring(c+1);for(let p of i){let h=u.replace("[x]",k(p.code));if(o=n[h],a=n["_"+h],o!==void 0||a!==void 0){s=p.code;break}}if(a)if(Array.isArray(o)){o=o.slice();for(let p=0;p<Math.max(o.length,a.length);p++)o[p]=Vn(o[p],a[p])}else o=Vn(o,a);if(!b(o))return(s==="Element"||s==="BackboneElement")&&(s=t.type[0].code),Array.isArray(o)?o.map(p=>On(p,s)):On(o,s)}function On(r,e){return e==="Resource"&&O(r)&&(e=r.resourceType),{type:e,value:r}}function xo(r,e){let t=r.value;if(!t||typeof t!="object")return;let n;if(e in t){let i=t[e];Array.isArray(i)?n=i.map(g):n=g(i)}else{let i=e.endsWith("[x]")?e.substring(0,e.length-3):e;for(let o of Object.values(l)){let s=i+k(o);if(s in t){let a=t[s];Array.isArray(a)?n=a.map(c=>({type:o,value:c})):n={type:o,value:a};break}}}if(Array.isArray(n)){if(n.length===0||b(n[0]))return}else if(b(n))return;return n}function rt(r){let e=[];for(let t of r){let n=!1;for(let i of e)if(N(mr(t,i))){n=!0;break}n||e.push(t)}return e}function Mn(r){return f(!N(r))}function _n(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?f(!1):f(r.every((t,n)=>N(mr(t,e[n]))))}function Nn(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?f(!0):f(r.some((t,n)=>!N(mr(t,e[n]))))}function mr(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?f(Math.abs(t-n)<1e-8):D(t)&&D(n)?f(Un(t,n)):f(typeof t=="object"&&typeof n=="object"?gr(r,e):t===n)}function yr(r,e){return r.length===0&&e.length===0?f(!0):r.length!==e.length?f(!1):(r.sort(In),e.sort(In),f(r.every((t,n)=>N(vo(t,e[n])))))}function vo(r,e){let{type:t,value:n}=r,{type:i,value:o}=e,s=n?.valueOf(),a=o?.valueOf();return typeof s=="number"&&typeof a=="number"?f(Math.abs(s-a)<.01):D(s)&&D(a)?f(Un(s,a)):f(t==="Coding"&&i==="Coding"?typeof s!="object"||typeof a!="object"?!1:s.code===a.code&&s.system===a.system:typeof s=="object"&&typeof a=="object"?gr({...s,id:void 0},{...a,id:void 0}):typeof s=="string"&&typeof a=="string"?s.toLowerCase()===a.toLowerCase():s===a)}function In(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?t-n:typeof t=="string"&&typeof n=="string"?t.localeCompare(n):0}function nt(r,e){let{value:t}=r;if(t==null)return!1;switch(e){case"Boolean":return typeof t=="boolean";case"Decimal":case"Integer":return typeof t=="number";case"Date":return Fn(t);case"DateTime":return Ce(t);case"Time":return typeof t=="string"&&!!/^T\d/.exec(t);case"Period":return Ln(t);case"Quantity":return D(t);default:return r.type===e||typeof t=="object"&&t?.resourceType===e}}function Fn(r){return typeof r=="string"&&!!tt.date.exec(r)}function Ce(r){return typeof r=="string"&&!!tt.dateTime.exec(r)}function Ln(r){return!!(r&&typeof r=="object"&&("start"in r&&Ce(r.start)||"end"in r&&Ce(r.end)))}function Fu(r){if(r){if(Fn(r))return{start:kn(r,"0000-00-00T00:00:00.000Z"),end:kn(r,"xxxx-12-31T23:59:59.999Z")};if(Ce(r))return{start:r,end:r};if(Ln(r))return r}}function kn(r,e){return r+e.substring(r.length)}function D(r){return!!(r&&typeof r=="object"&&"value"in r&&typeof r.value=="number")}function Un(r,e){return Math.abs(r.value-e.value)<.01&&(r.unit===e.unit||r.code===e.code||r.unit===e.code||r.code===e.unit)}function gr(r,e){let t=Object.keys(r),n=Object.keys(e);if(t.length!==n.length)return!1;for(let i of t){let o=r[i],s=e[i];if(Dn(o)&&Dn(s)){if(!gr(o,s))return!1}else if(o!==s)return!1}return!0}function Dn(r){return r!==null&&typeof r=="object"}function Vn(r,e){if(e){if(typeof e!="object")throw new Error("Primitive extension must be an object");return To(r??{},e)}return r}function To(r,e){return delete e.__proto__,delete e.constructor,Object.assign(r,e)}function Sr(r,e){return O(r,e)&&"id"in r&&typeof r.id=="string"}function Pe(r){let e=z(r)??"undefined/undefined",t=bo(r);return t===e?{reference:e}:{reference:e,display:t}}function z(r){if(q(r))return r.reference;if(Sr(r))return`${r.resourceType}/${r.id}`}function le(r){if(r)return q(r)?r.reference.split("/")[1]:r.id}function $u(r){if(r?.reference===void 0)throw new d(m("Reference missing reference property."));let[e,t]=r.reference.split("/");if(e===""||t===""||t===void 0)throw new d(m("Unable to parse reference string."));return[e,t]}function So(r){return r.resourceType==="Patient"||r.resourceType==="Practitioner"||r.resourceType==="RelatedPerson"}function bo(r){if(So(r)){let e=Eo(r);if(e)return e}if(r.resourceType==="Device"){let e=Ro(r);if(e)return e}if(r.resourceType==="MedicationRequest"&&r.medicationCodeableConcept)return Ne(r.medicationCodeableConcept);if(r.resourceType==="Subscription"&&r.criteria)return r.criteria;if(r.resourceType==="User"&&r.email)return r.email;if("name"in r&&r.name&&typeof r.name=="string")return r.name;if("code"in r&&r.code){let e=r.code;if(Array.isArray(e)&&(e=e[0]),vr(e))return Ne(e);if(Vo(e))return e.text}return z(r)??""}function Eo(r){let e=r.name;if(e&&e.length>0)return Fe(e[0])}function Ro(r){let e=r.deviceName;if(e&&e.length>0)return e[0].name}function ju(r){if(!("photo"in r))return;let e=r.photo;if(e)if(Array.isArray(e))for(let t of e){let n=Bn(t);if(n)return n}else return Bn(e)}function Bn(r){if(r.url&&r.contentType?.startsWith("image/"))return r.url}function Gu(r){return r?new Date(r):void 0}function ot(r,e){let t=new Date(r);t.setUTCHours(0,0,0,0);let n=e?new Date(e):new Date;n.setUTCHours(0,0,0,0);let i=t.getUTCFullYear(),o=t.getUTCMonth(),s=t.getUTCDate(),a=n.getUTCFullYear(),c=n.getUTCMonth(),u=n.getUTCDate(),p=a-i;(c<o||c===o&&u<s)&&p--;let h=a*12+c-(i*12+o);u<s&&h--;let T=Math.floor((n.getTime()-t.getTime())/(1e3*60*60*24));return{years:p,months:h,days:T}}function Hu(r,e){let{years:t,months:n,days:i}=ot(r,e);return t>=2?t.toString().padStart(3,"0")+"Y":n>=1?n.toString().padStart(3,"0")+"M":i.toString().padStart(3,"0")+"D"}function Qu(r){let e={};return Wn(r.item,e),e}function Wn(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer[0]),Wn(t.item,e)}function zu(r){let e={};return qn(r.item,e),e}function qn(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]?e[t.linkId]=[...e[t.linkId],...t.answer]:e[t.linkId]=t.answer),qn(t.item,e)}function Co(r,e){let t=r.identifier;if(!t)return;let n=Array.isArray(t)?t:[t];for(let i of n)if(i.system===e)return i.value}function Ju(r,e,t){let n=r.identifier;if(!n){r.identifier=[{system:e,value:t}];return}for(let i of n)if(i.system===e){i.value=t;return}n.push({system:e,value:t})}function Ku(r,...e){let t=ee(r,...e);if(!t)return;let n=P({type:"Extension",value:t},"value[x]");if(n)return Array.isArray(n)?n[0].value:n.value}function ee(r,...e){let t=r;for(let n=0;n<e.length&&t;n++)t=t?.extension?.find(i=>i.url===e[n]);return t}function st(r,e){let t=br(r);return JSON.stringify(t,null,e?2:void 0)??""}function br(r){if(!(r==null||r===""))return typeof r=="object"?Array.isArray(r)?Po(r):wo(r):r}function Po(r){let e=r.length;if(e===0)return;let t,n=0;for(let i=0;i<e;i++){let o=r[i],s=br(o);s!==o&&!t&&(t=Array.from(r)),s===void 0?t&&(t[i]=null):(t&&(t[i]=s),n++)}if(n!==0)return t??r}function wo(r){let e,t=0;for(let n in r){let i=r[n],o=br(i);o!==i&&!e&&(e={...r}),o===void 0?e&&delete e[n]:(e&&(e[n]=o),t++)}if(t!==0)return e??r}function b(r){if(r==null)return!0;let e=typeof r;return e==="string"||e==="object"?!J(r):!1}function J(r){if(r==null)return!1;let e=typeof r;return e==="string"&&r!==""||e==="object"&&("length"in r&&r.length>0||Object.keys(r).length>0)}function te(r,e,t){return r===e||b(r)&&b(e)?!0:b(r)||b(e)?!1:Array.isArray(r)&&Array.isArray(e)?Ao(r,e):Array.isArray(r)||Array.isArray(e)?!1:R(r)&&R(e)?Oo(r,e,t):(R(r)||R(e),!1)}function Ao(r,e){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(!te(r[t],e[t]))return!1;return!0}function Oo(r,e,t){let n=new Set;Object.keys(r).forEach(i=>n.add(i)),Object.keys(e).forEach(i=>n.add(i)),t==="meta"&&(n.delete("versionId"),n.delete("lastUpdated"),n.delete("author"));for(let i of n){let o=r[i],s=e[i];if(!te(o,s,i))return!1}return!0}function _e(r,e){return b(r)?!0:b(e)?!1:Array.isArray(r)&&Array.isArray(e)?Io(r,e):Array.isArray(r)||Array.isArray(e)?!1:R(r)&&R(e)?ko(r,e):R(r)||R(e)?!1:r===e}function Io(r,e){return e.every(t=>r.some(n=>_e(n,t)))}function ko(r,e){return Object.entries(e).every(([t,n])=>t in r&&_e(r[t],n))}function pe(r){return r===void 0?r:JSON.parse(JSON.stringify(r))}function Yu(r){return!!/^\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/i.exec(r)}function R(r){return r!==null&&typeof r=="object"}function $n(r){return r.every(Do)}function Do(r){return typeof r=="string"}function xr(r){return R(r)&&"code"in r&&typeof r.code=="string"}function vr(r){return R(r)&&"coding"in r&&Array.isArray(r.coding)&&r.coding.every(xr)}function Vo(r){return R(r)&&"text"in r&&typeof r.text=="string"}var jn=[];for(let r=0;r<256;r++)jn.push(r.toString(16).padStart(2,"0"));function Gn(r){let e=Qn(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=jn[t[i]];return n.join("")}function Hn(r){let e=Qn(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=String.fromCharCode(t[i]);return window.btoa(n.join(""))}function Qn(r){return ArrayBuffer.isView(r)?r.buffer:r}function k(r){return r?r.charAt(0).toUpperCase()+r.substring(1):""}function Zu(r){return r===r.toLowerCase()&&r!==r.toUpperCase()}function Er(r){return r.length>0&&r.startsWith(r[0].toUpperCase())}function re(r,e){let t=r+".";if(e.startsWith(t))return e.slice(t.length)}function Tr(r,e){return r.coding?.find(t=>t.system===e)?.code}function Xu(r,e,t){r.coding||(r.coding=[]);let n=r.coding.find(i=>i.system===e);n?n.code=t:r.coding.push({system:e,code:t})}function el(r,e,t,n){return r.qualifiedInterval?.find(i=>zn(i,e)&&No(i,t,r.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function tl(r,e,t){return r.qualifiedInterval?.find(n=>zn(n,e)&&t.includes(n.condition))}function zn(r,e){return Mo(r,e)&&_o(r,e)}function Mo(r,e){return!r.gender||r.gender===e.gender}function _o(r,e){return!r.age||Jn(ot(e.birthDate).years,r.age)}function No(r,e,t){return!!r.range&&Jn(e,r.range,t)}function Jn(r,e,t){return(e.low?.value===void 0||Lo(r,e.low.value,t))&&(e.high?.value===void 0||Fo(r,e.high.value,t))}function rl(r,e){return parseFloat(r.toFixed(e))}function nl(r,e,t){return j(r,t)===j(e,t)}function il(r,e,t){return j(r,t)<j(e,t)}function ol(r,e,t){return j(r,t)>j(e,t)}function Fo(r,e,t){return j(r,t)<=j(e,t)}function Lo(r,e,t){return j(r,t)>=j(e,t)}function j(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}function sl(r,e,t){return r.find(n=>typeof e=="string"?Tr(n.code||{},t)===e:Tr(n.code||{},t)===Tr(e,t))}function Me(r){if(r!==void 0)return Array.isArray(r)?r:[r]}function al(r){return Array.isArray(r)?r[0]:r}var Rr=r=>new Promise(e=>{setTimeout(e,r)});function Cr(r,e,t){let n=[];for(let i=0;i<t-1;i++){let o=r.indexOf(e);if(o<0)break;n.push(r.slice(0,o)),r=r.slice(o+e.length)}return n.push(r),n}function Kn(r){let e,t=!1;return function(){return t||(e=r(),t=!0),e}}function we(r,e){return r?(r.push(e),r):[e]}function at(r){return r.sort((e,t)=>e.localeCompare(t))}function Pr(r){return r.endsWith("/")?r:r+"/"}function Uo(r){return r.startsWith("/")?r.slice(1):r}function B(r,e){return new URL(Uo(e),Pr(r.toString())).toString()}function Yn(r,e){return B(r,e).toString().replace("http://","ws://").replace("https://","wss://")}function Zn(r){return typeof r=="object"&&!Array.isArray(r)&&!(r instanceof URLSearchParams)&&(r=Object.fromEntries(Object.entries(r).filter(e=>e[1]!==void 0))),new URLSearchParams(r).toString()}var Bo=/^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-_]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-_]*[A-Za-z0-9])$/;function cl(r){return Bo.test(r)}function ul(r,e){return r?.meta?.profile?.includes(e)||(r.meta=r.meta??{},r.meta.profile=r.meta.profile??[],r.meta.profile.push(e)),r}function ll(r,e){return new Map(r.entry?.filter(n=>!!n.resource).map(n=>[Co(n.resource,e),n.resource]).filter(([n])=>n!==void 0))}function pl(r,e){if(r?.meta?.profile?.includes(e)){let t=r.meta.profile.indexOf(e);r.meta.profile.splice(t,1)}return r}function dl(r,e){let t=[];if(!r)return t;for(let n=0;n<r.length;n++){let i=e(r[n],n);Array.isArray(i)?t.push(...i.flat()):i!==void 0&&t.push(i)}return t}function ml(r){if(!r)return"";switch(r.type){case"Address":return qo(r.value);case"CodeableConcept":return Ne(r.value);case"Coding":return Xn(r.value);case"ContactPoint":return r.value.value;case"HumanName":return Fe(r.value);case"Quantity":return ne(r.value);case"Reference":return Wo(r.value);default:return r.value.toString()}}function Wo(r){return r?r.display??r.reference??st(r):""}function qo(r,e){let t=[];if(r.line&&t.push(...r.line),r.city||r.state||r.postalCode){let n=[];r.city&&n.push(r.city),r.state&&n.push(r.state),r.postalCode&&n.push(r.postalCode),t.push(n.join(", "))}return r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.join(e?.lineSeparator??", ").trim()}function Fe(r,e){let t=[];if(r.prefix&&e?.prefix!==!1&&t.push(...r.prefix),r.given&&t.push(...r.given),r.family&&t.push(r.family),r.suffix&&e?.suffix!==!1&&t.push(...r.suffix),r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.length===0){let n=de(r.text);if(n)return n}return t.join(" ").trim()}function yl(r){let e=[];return r.given&&e.push(...r.given),e.join(" ").trim()}function gl(r){return de(r.family)??""}function Ar(r){return r instanceof Date&&!isNaN(r.getTime())}function xl(r,e,t){if(!r)return"";let n=new Date(r);return Ar(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...t})):""}function $o(r,e,t){if(!r)return"";let n=new Date("2000-01-01T"+r+"Z");return Ar(n)?n.toLocaleTimeString(e,t):""}function wr(r,e,t){if(!r)return"";let n=new Date(r);return Ar(n)?n.toLocaleString(e,t):""}function vl(r,e,t){return!r||!r.start&&!r.end?"":wr(r.start,e,t)+" - "+wr(r.end,e,t)}var jo={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},Go={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},Ho={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function Tl(r){if(!r)return"";let e=[];return Qo(e,r.repeat),r.event&&e.push(r.event.map(t=>wr(t)).join(", ")),k(e.join(" ").trim())}function Qo(r,e){if(!e?.periodUnit)return;let t=e.frequency??1,n=e.period??1,i=e.periodUnit;t===1&&n===1?r.push(jo[i]):(t===1?r.push("once"):r.push(t+" times"),n===1?r.push("per "+Go[i]):r.push("per "+n+" "+Ho[i])),e.dayOfWeek&&r.push("on "+e.dayOfWeek.map(k).join(", ")),e.timeOfDay&&r.push("at "+e.timeOfDay.map(o=>$o(o)).join(", "))}function Sl(r,e,t=!1){if(t&&e===void 0)throw new Error("Precision must be specified for exclusive ranges");let n=r?.low&&{...r.low,comparator:void 0},i=r?.high&&{...r.high,comparator:void 0};return n?.value===void 0&&i?.value===void 0?"":n?.value!==void 0&&i?.value===void 0?t&&e!==void 0?(n.value=Ko(n.value,e),`> ${ne(n,e)}`):`>= ${ne(n,e)}`:n?.value===void 0&&i?.value!==void 0?t&&e!==void 0?(i.value=Jo(i.value,e),`< ${ne(i,e)}`):`<= ${ne(i,e)}`:(n?.unit===i?.unit&&delete n?.unit,`${ne(n,e)} - ${ne(i,e)}`)}function ne(r,e){if(!r)return"";let t=[];return r.comparator&&(t.push(r.comparator),t.push(" ")),r.value!==void 0&&(e!==void 0?t.push(r.value.toFixed(e)):t.push(r.value)),r.unit&&(r.unit!=="%"&&t[t.length-1]!==" "&&t.push(" "),t.push(r.unit)),t.join("").trim()}function bl(r){return r?.value===void 0?"":r.value.toLocaleString(void 0,{style:"currency",currency:r.currency??"USD",currencyDisplay:"narrowSymbol"})}function Ne(r){if(!r)return"";let e=de(r.text);return e||(r.coding?r.coding.map(t=>Xn(t)).join(", "):"")}function Xn(r,e){let t=de(r?.display);if(t){let n=e?de(r?.code):void 0;return`${t}${n?" ("+n+")":""}`}return de(r?.code)??""}function zo(r){if(!r)return"";let e=[];if(r.valueQuantity)e.push(ne(r.valueQuantity));else if(r.valueCodeableConcept)e.push(Ne(r.valueCodeableConcept));else{let t=de(r.valueString);t&&e.push(t)}return"component"in r&&e.push(r.component.map(t=>zo(t)).join(" / ")),e.join(" / ").trim()}function de(r){return typeof r=="string"?r:void 0}function Jo(r,e,t=1){return(ei(r,e)+t)*Math.pow(10,-e)}function Ko(r,e,t=1){return(ei(r,e)-t)*Math.pow(10,-e)}function ei(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}var l={Address:"Address",Age:"Age",Annotation:"Annotation",Attachment:"Attachment",BackboneElement:"BackboneElement",CodeableConcept:"CodeableConcept",Coding:"Coding",ContactDetail:"ContactDetail",ContactPoint:"ContactPoint",Contributor:"Contributor",Count:"Count",DataRequirement:"DataRequirement",Distance:"Distance",Dosage:"Dosage",Duration:"Duration",Expression:"Expression",Extension:"Extension",HumanName:"HumanName",Identifier:"Identifier",MarketingStatus:"MarketingStatus",Meta:"Meta",Money:"Money",Narrative:"Narrative",ParameterDefinition:"ParameterDefinition",Period:"Period",Population:"Population",ProdCharacteristic:"ProdCharacteristic",ProductShelfLife:"ProductShelfLife",Quantity:"Quantity",Range:"Range",Ratio:"Ratio",Reference:"Reference",RelatedArtifact:"RelatedArtifact",SampledData:"SampledData",Signature:"Signature",SubstanceAmount:"SubstanceAmount",SystemString:"http://hl7.org/fhirpath/System.String",Timing:"Timing",TriggerDefinition:"TriggerDefinition",UsageContext:"UsageContext",base64Binary:"base64Binary",boolean:"boolean",canonical:"canonical",code:"code",date:"date",dateTime:"dateTime",decimal:"decimal",id:"id",instant:"instant",integer:"integer",markdown:"markdown",oid:"oid",positiveInt:"positiveInt",string:"string",time:"time",unsignedInt:"unsignedInt",uri:"uri",url:"url",uuid:"uuid"};function Ol(r){for(let e of r.entry??[]){let t=e.resource;t.resourceType==="SearchParameter"&&Or(t)}}function An(r){let e=Array.isArray(r)?r:r.entry?.map(t=>t.resource)??[];for(let t of e)t?.resourceType==="StructureDefinition"&&t.kind==="resource"&&ri(t.type)}function ri(r){let e=F.types[r];return e||(e={searchParamsDetails:{}},F.types[r]=e),e.searchParams||(e.searchParams={_id:{base:[r],code:"_id",type:"token",expression:r+".id"},_lastUpdated:{base:[r],code:"_lastUpdated",type:"date",expression:r+".meta.lastUpdated"},_compartment:{base:[r],code:"_compartment",type:"reference",expression:r+".meta.compartment"},_profile:{base:[r],code:"_profile",type:"uri",expression:r+".meta.profile"},_security:{base:[r],code:"_security",type:"token",expression:r+".meta.security"},_source:{base:[r],code:"_source",type:"uri",expression:r+".meta.source"},_tag:{base:[r],code:"_tag",type:"token",expression:r+".meta.tag"}}),e}function Or(r){for(let e of r.base??[]){let t=ri(e);t.searchParams||(t.searchParams={}),t.searchParams[r.code]=r}}function nr(r){let e=r.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?Yo((r.base?.path??r.path)?.split(".")):e}function Yo(r){return r.length===1?r[0]:r.map(k).join("")}function cr(r){return r.kind==="resource"&&r.name!=="Resource"&&r.name!=="DomainResource"}function Il(){return Object.values(En()).filter(cr).map(r=>r.name)}function kl(r){return F.types[r]?.searchParams}function Dl(r,e){return F.types[r]?.searchParams?.[e]}function Vl(r){let e=r.replaceAll("[x]","").split(".").pop();return Zo(e)}function Zo(r){let e;return r.length<100?e=r.match(/[A-Z]+(?![a-z])|[A-Z]?[a-z]+|\d+/g)??[]:e=r.split(/(?=[A-Z])/),e.map(es).join(" ").replace("_"," ").replace(/\s+/g," ")}var Xo=new Set(["ID","IP","PKCE","JWKS","URI","URL","OMB","UDI"]);function es(r){let e=r.toUpperCase();return r===e?r:Xo.has(e)?e:e.charAt(0)+r.slice(1)}function it(r,e,t){let n=Ve(r,t);if(n)return ts(n.elements,e)}function ts(r,e){let t=r[e]??r[e+"[x]"];if(t)return t;for(let n=0;n<e.length;n++){let i=e[n];if(i>="A"&&i<="Z"){let o=e.slice(0,n)+"[x]",s=r[o];if(s)return s}}}function O(r,e){return!(!r||typeof r!="object"||!("resourceType"in r)||e&&r.resourceType!==e)}function q(r){return!!(r&&typeof r=="object"&&"reference"in r&&typeof r.reference=="string")}var F={types:{}};function ni(r){switch(r.type){case l.uuid:case l.uri:case l.url:case l.string:case l.oid:case l.markdown:case l.id:case l.code:case l.canonical:case l.base64Binary:case l.SystemString:case l.date:case l.dateTime:case l.instant:return r.value;case l.Identifier:return`${r.value.system??""}|${r.value.value}`;case l.Coding:return ti(r.value);case l.CodeableConcept:return r.value.coding?.map(ti).join(",")??r.value.text;case l.HumanName:return r.value.text?r.value.text:Fe(r.value);case l.unsignedInt:case l.positiveInt:case l.integer:case l.decimal:return r.value.toString();case l.boolean:return r.value?"true":"false";case l.Extension:return r.value.url;case l.ContactPoint:return r.value.value;case l.Quantity:case l.Age:case l.Count:case l.Duration:return`${r.value.value}|${r.value.system??""}|${r.value.code??r.value.unit??""}`;case l.Reference:return r.value.reference;default:return Sr(r.value)?z(r.value):JSON.stringify(r)}}function ti(r){return r?`${r.system??""}|${r.code}`:""}function Ae(r){if(r.startsWith("T"))return r+"T00:00:00.000Z".substring(r.length);if(r.length<=10)return r;try{return new Date(r).toISOString()}catch{return r}}var K=()=>[],I={empty:(r,e)=>f(e.length===0||e.every(t=>b(t.value))),hasValue:(r,e)=>f(e.length!==0),exists:(r,e,t)=>t?f(e.filter(n=>N(t.eval(r,[n]))).length>0):f(e.length>0&&e.every(n=>!b(n.value))),all:(r,e,t)=>f(e.every(n=>N(t.eval(r,[n])))),allTrue:(r,e)=>{for(let t of e)if(!t.value)return f(!1);return f(!0)},anyTrue:(r,e)=>{for(let t of e)if(t.value)return f(!0);return f(!1)},allFalse:(r,e)=>{for(let t of e)if(t.value)return f(!1);return f(!0)},anyFalse:(r,e)=>{for(let t of e)if(!t.value)return f(!0);return f(!1)},subsetOf:(r,e,t)=>{if(e.length===0)return f(!0);let n=t.eval(r,fe(r));return n.length===0?f(!1):f(e.every(i=>n.some(o=>o.value===i.value)))},supersetOf:(r,e,t)=>{let n=t.eval(r,fe(r));return n.length===0?f(!0):e.length===0?f(!1):f(n.every(i=>e.some(o=>o.value===i.value)))},count:(r,e)=>[{type:l.integer,value:e.length}],distinct:(r,e)=>{let t=[];for(let n of e)t.some(i=>i.value===n.value)||t.push(n);return t},isDistinct:(r,e)=>f(e.length===I.distinct(r,e).length),where:(r,e,t)=>e.filter(n=>N(t.eval(r,[n]))),select:(r,e,t)=>e.map(n=>t.eval({parent:r,variables:{$this:n}},[n])).flat(),repeat:K,ofType:(r,e,t)=>e.filter(n=>n.type===t.name),single:(r,e)=>{if(e.length>1)throw new Error("Expected input length one for single()");return e.length===0?[]:e.slice(0,1)},first:(r,e)=>e.length===0?[]:e.slice(0,1),last:(r,e)=>e.length===0?[]:e.slice(e.length-1,e.length),tail:(r,e)=>e.length===0?[]:e.slice(1,e.length),skip:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new Error("Expected a number for skip(num)");return n>=e.length?[]:n<=0?e:e.slice(n,e.length)},take:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new Error("Expected a number for take(num)");return n>=e.length?e:n<=0?[]:e.slice(0,n)},intersect:(r,e,t)=>{if(!t)return e;let n=t.eval(r,fe(r)),i=[];for(let o of e)!i.some(s=>s.value===o.value)&&n.some(s=>s.value===o.value)&&i.push(o);return i},exclude:(r,e,t)=>{if(!t)return e;let n=t.eval(r,fe(r)),i=[];for(let o of e)n.some(s=>s.value===o.value)||i.push(o);return i},union:(r,e,t)=>{if(!t)return e;let n=t.eval(r,fe(r));return rt([...e,...n])},combine:(r,e,t)=>{if(!t)return e;let n=t.eval(r,fe(r));return[...e,...n]},htmlChecks:(r,e,t)=>[g(!0)],iif:(r,e,t,n,i)=>{let o=t.eval(r,e);if(o.length>1||o.length===1&&typeof o[0].value!="boolean")throw new Error("Expected criterion to evaluate to a Boolean");return N(o)?n.eval(r,e):i?i.eval(r,e):[]},toBoolean:(r,e)=>{if(e.length===0)return[];let[{value:t}]=H(e,1);if(typeof t=="boolean")return[{type:l.boolean,value:t}];if(typeof t=="number"&&(t===0||t===1))return f(!!t);if(typeof t=="string"){let n=t.toLowerCase();if(["true","t","yes","y","1","1.0"].includes(n))return f(!0);if(["false","f","no","n","0","0.0"].includes(n))return f(!1)}return[]},convertsToBoolean:(r,e)=>e.length===0?[]:f(I.toBoolean(r,e).length===1),toInteger:(r,e)=>{if(e.length===0)return[];let[{value:t}]=H(e,1);return typeof t=="number"?[{type:l.integer,value:t}]:typeof t=="string"&&/^[+-]?\d+$/.exec(t)?[{type:l.integer,value:parseInt(t,10)}]:typeof t=="boolean"?[{type:l.integer,value:t?1:0}]:[]},convertsToInteger:(r,e)=>e.length===0?[]:f(I.toInteger(r,e).length===1),toDate:(r,e)=>{if(e.length===0)return[];let[{value:t}]=H(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:l.date,value:Ae(t)}]:[]},convertsToDate:(r,e)=>e.length===0?[]:f(I.toDate(r,e).length===1),toDateTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=H(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:l.dateTime,value:Ae(t)}]:[]},convertsToDateTime:(r,e)=>e.length===0?[]:f(I.toDateTime(r,e).length===1),toDecimal:(r,e)=>{if(e.length===0)return[];let[{value:t}]=H(e,1);return typeof t=="number"?[{type:l.decimal,value:t}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(t)?[{type:l.decimal,value:parseFloat(t)}]:typeof t=="boolean"?[{type:l.decimal,value:t?1:0}]:[]},convertsToDecimal:(r,e)=>e.length===0?[]:f(I.toDecimal(r,e).length===1),toQuantity:(r,e)=>{if(e.length===0)return[];let[{value:t}]=H(e,1);return D(t)?[{type:l.Quantity,value:t}]:typeof t=="number"?[{type:l.Quantity,value:{value:t,unit:"1"}}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(t)?[{type:l.Quantity,value:{value:parseFloat(t),unit:"1"}}]:typeof t=="boolean"?[{type:l.Quantity,value:{value:t?1:0,unit:"1"}}]:[]},convertsToQuantity:(r,e)=>e.length===0?[]:f(I.toQuantity(r,e).length===1),toString:(r,e)=>{if(e.length===0)return[];let[{value:t}]=H(e,1);return t==null?[]:D(t)?[{type:l.string,value:`${t.value} '${t.unit}'`}]:[{type:l.string,value:t.toString()}]},convertsToString:(r,e)=>e.length===0?[]:f(I.toString(r,e).length===1),toTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=H(e,1);if(typeof t=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(t);if(n)return[{type:l.time,value:Ae("T"+n[1])}]}return[]},convertsToTime:(r,e)=>e.length===0?[]:f(I.toTime(r,e).length===1),indexOf:(r,e,t)=>L((n,i)=>n.indexOf(i),r,e,t),substring:(r,e,t,n)=>L((i,o,s)=>{let a=o,c=s?a+s:i.length;return a<0||a>=i.length?void 0:i.substring(a,c)},r,e,t,n),startsWith:(r,e,t)=>L((n,i)=>n.startsWith(i),r,e,t),endsWith:(r,e,t)=>L((n,i)=>n.endsWith(i),r,e,t),contains:(r,e,t)=>L((n,i)=>n.includes(i),r,e,t),upper:(r,e)=>L(t=>t.toUpperCase(),r,e),lower:(r,e)=>L(t=>t.toLowerCase(),r,e),replace:(r,e,t,n)=>L((i,o,s)=>i.replaceAll(o,s),r,e,t,n),matches:(r,e,t)=>L((n,i)=>!!new RegExp(i).exec(n),r,e,t),replaceMatches:(r,e,t,n)=>L((i,o,s)=>i.replaceAll(o,s),r,e,t,n),length:(r,e)=>L(t=>t.length,r,e),toChars:(r,e)=>L(t=>t?t.split(""):void 0,r,e),encode:K,decode:K,escape:K,unescape:K,trim:K,split:K,join:(r,e,t)=>{let n=t?.eval(r,fe(r))[0]?.value??"";if(typeof n!="string")throw new Error("Separator must be a string.");return[{type:l.string,value:e.map(i=>i.value?.toString()??"").join(n)}]},abs:(r,e)=>G(Math.abs,r,e),ceiling:(r,e)=>G(Math.ceil,r,e),exp:(r,e)=>G(Math.exp,r,e),floor:(r,e)=>G(Math.floor,r,e),ln:(r,e)=>G(Math.log,r,e),log:(r,e,t)=>G((n,i)=>Math.log(n)/Math.log(i),r,e,t),power:(r,e,t)=>G(Math.pow,r,e,t),round:(r,e)=>G(Math.round,r,e),sqrt:(r,e)=>G(Math.sqrt,r,e),truncate:(r,e)=>G(t=>t|0,r,e),children:K,descendants:K,trace:(r,e,t)=>e,now:()=>[{type:l.dateTime,value:new Date().toISOString()}],timeOfDay:()=>[{type:l.time,value:new Date().toISOString().substring(11)}],today:()=>[{type:l.date,value:new Date().toISOString().substring(0,10)}],between:(r,e,t,n,i)=>{let o=I.toDateTime(r,t.eval(r,e));if(o.length===0)throw new Error("Invalid start date");let s=I.toDateTime(r,n.eval(r,e));if(s.length===0)throw new Error("Invalid end date");let a=i.eval(r,e)[0]?.value;if(a!=="years"&&a!=="months"&&a!=="days")throw new Error("Invalid units");let c=ot(o[0].value,s[0].value);return[{type:l.Quantity,value:{value:c[a],unit:a}}]},is:(r,e,t)=>{let n="";return t instanceof W?n=t.name:t instanceof ie&&(n=t.left.name+"."+t.right.name),n?e.map(i=>({type:l.boolean,value:nt(i,n)})):[]},not:(r,e)=>I.toBoolean(r,e).map(t=>({type:l.boolean,value:!t.value})),resolve:(r,e)=>e.map(t=>{let n=t.value,i;if(typeof n=="string")i=n;else if(typeof n=="object"){let o=n;if(o.resource)return g(o.resource);o.reference?i=o.reference:o.type&&o.identifier&&(i=`${o.type}?identifier=${o.identifier.system}|${o.identifier.value}`)}if(i?.includes("?")){let[o]=i.split("?");return{type:o,value:{resourceType:o}}}if(i?.includes("/")){let[o,s]=i.split("/");return{type:o,value:{resourceType:o,id:s}}}return{type:l.BackboneElement,value:void 0}}).filter(t=>!!t.value),as:(r,e)=>e,type:(r,e)=>e.map(({value:t})=>typeof t=="boolean"?{type:l.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof t=="number"?{type:l.BackboneElement,value:{namespace:"System",name:"Integer"}}:O(t)?{type:l.BackboneElement,value:{namespace:"FHIR",name:t.resourceType}}:{type:l.BackboneElement,value:null}),conformsTo:(r,e,t)=>{let n=t.eval(r,e)[0].value;if(!n.startsWith("http://hl7.org/fhir/StructureDefinition/"))throw new Error("Expected a StructureDefinition URL");let i=n.replace("http://hl7.org/fhir/StructureDefinition/","");return e.map(o=>({type:l.boolean,value:o.value?.resourceType===i}))},getResourceKey:(r,e)=>{let t=e[0].value;return t?.id?[{type:l.id,value:t.id}]:[]},getReferenceKey:(r,e,t)=>{let n=e[0].value;if(!n?.reference)return[];let i="";return t instanceof W&&(i=t.name),i&&!n.reference.startsWith(i+"/")?[]:[{type:l.id,value:le(n)}]},extension:(r,e,t)=>{let n=t.eval(r,e)[0].value,i=e?.[0]?.value;if(i){let o=ee(i,n);if(o)return[{type:l.Extension,value:o}]}return[]}};function L(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=H(t,1);if(typeof i!="string")throw new Error("String function cannot be called with non-string");let o=r(i,...n.map(s=>s?.eval(e,t)[0]?.value));return o===void 0?[]:Array.isArray(o)?o.map(g):[g(o)]}function G(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=H(t,1),o=D(i),s=o?i.value:i;if(typeof s!="number")throw new Error("Math function cannot be called with non-number");let a=r(s,...n.map(p=>p.eval(e,t)[0]?.value)),c=o?l.Quantity:t[0].type,u=o?{...i,value:a}:a;return[{type:c,value:u}]}function H(r,e){if(r.length!==e)throw new Error(`Expected ${e} arguments`);for(let t of r)if(t==null)throw new Error("Expected non-null argument");return r}function fe(r){let e=r;for(;e.parent?.variables.$this;)e=e.parent;return[e.variables.$this]}var ct=class{constructor(e,t){this.original=e;this.child=t}eval(e,t){try{if(t.length>0){let n=[];for(let i of t)n.push(this.child.eval({parent:e,variables:{$this:i}},[i]));return n.flat()}else return this.child.eval(e,[])}catch(n){throw new Error(`FhirPathError on "${this.original}": ${n}`,{cause:n})}}toString(){return this.child.toString()}},U=class{constructor(e){this.value=e}eval(){return[this.value]}toString(){let e=this.value.value;return typeof e=="string"?`'${e}'`:e.toString()}},W=class{constructor(e){this.name=e}eval(e,t){if(this.name==="$this")return t;let n=this.getVariable(e);if(n)return[n];if(this.name.startsWith("%"))throw new Error(`Undefined variable ${this.name}`);return t.flatMap(i=>this.evalValue(i)).filter(i=>i?.value!==void 0)}getVariable(e){let t=e.variables[this.name];if(t!==void 0)return t;if(e.parent)return this.getVariable(e.parent)}evalValue(e){let t=e.value;if(!(!t||typeof t!="object"))return O(t,this.name)?e:P(e,this.name)}toString(){return this.name}},ut=class{eval(){return[]}toString(){return"{}"}},lt=class extends ze{constructor(t,n,i){super(t,n);this.impl=i}eval(t,n){return this.impl(this.child.eval(t,n))}toString(){return this.operator+this.child.toString()}},he=class extends Z{constructor(e,t){super("as",e,t)}eval(e,t){return I.ofType(e,this.left.eval(e,t),this.right)}},C=class extends Z{},V=class extends C{constructor(t,n,i,o){super(t,n,i);this.impl=o}eval(t,n){let i=this.left.eval(t,n);if(i.length!==1)return[];let o=this.right.eval(t,n);if(o.length!==1)return[];let s=i[0].value,a=o[0].value,c=D(s)?s.value:s,u=D(a)?a.value:a,p=this.impl(c,u);return typeof p=="boolean"?f(p):D(s)?[{type:l.Quantity,value:{...s,value:p}}]:[g(p)]}},pt=class extends Z{constructor(e,t){super("&",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t),o=[...n,...i];return o.length>0&&o.every(s=>typeof s.value=="string")?[{type:l.string,value:o.map(s=>s.value).join("")}]:o}},dt=class extends C{constructor(e,t){super("contains",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return f(n.some(o=>o.value===i[0].value))}},ft=class extends C{constructor(e,t){super("in",e,t)}eval(e,t){let n=$(this.left.eval(e,t)),i=this.right.eval(e,t);return n?f(i.some(o=>o.value===n.value)):[]}},ie=class extends Z{constructor(e,t){super(".",e,t)}eval(e,t){return this.right.eval(e,this.left.eval(e,t))}toString(){return`${this.left.toString()}.${this.right.toString()}`}},Oe=class extends Z{constructor(e,t){super("|",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return rt([...n,...i])}},ht=class extends C{constructor(e,t){super("=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return _n(n,i)}},mt=class extends C{constructor(e,t){super("!=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Nn(n,i)}},yt=class extends C{constructor(e,t){super("~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return yr(n,i)}},gt=class extends C{constructor(e,t){super("!~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Mn(yr(n,i))}},me=class extends C{constructor(e,t){super("is",e,t)}eval(e,t){let n=this.left.eval(e,t);if(n.length!==1)return[];let i=this.right.name;return f(nt(n[0],i))}},xt=class extends C{constructor(e,t){super("and",e,t)}eval(e,t){let n=$(this.left.eval(e,t),"boolean"),i=$(this.right.eval(e,t),"boolean");return n?.value===!0&&i?.value===!0?f(!0):n?.value===!1||i?.value===!1?f(!1):[]}},vt=class extends C{constructor(e,t){super("or",e,t)}eval(e,t){let n=$(this.left.eval(e,t),"boolean"),i=$(this.right.eval(e,t),"boolean");return n?.value===!1&&i?.value===!1?f(!1):n?.value||i?.value?f(!0):[]}},Tt=class extends C{constructor(e,t){super("xor",e,t)}eval(e,t){let n=$(this.left.eval(e,t),"boolean"),i=$(this.right.eval(e,t),"boolean");return!n||!i?[]:f(n.value!==i.value)}},St=class extends C{constructor(e,t){super("implies",e,t)}eval(e,t){let n=$(this.left.eval(e,t),"boolean"),i=$(this.right.eval(e,t),"boolean");return i?.value===!0||n?.value===!1?f(!0):!n||!i?[]:f(!1)}},Y=class{constructor(e,t){this.name=e;this.args=t}eval(e,t){let n=I[this.name];if(!n)throw new Error("Unrecognized function: "+this.name);return n(e,t,...this.args)}toString(){return`${this.name}(${this.args.map(e=>e.toString()).join(", ")})`}},ye=class{constructor(e,t){this.left=e;this.expr=t}eval(e,t){let n=this.expr.eval(e,t);if(n.length!==1)return[];let i=n[0].value;if(typeof i!="number")throw new Error("Invalid indexer expression: should return integer}");let o=this.left.eval(e,t);return i in o?[o[i]]:[]}toString(){return`${this.left.toString()}[${this.expr.toString()}]`}};var rs=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],oe=class{constructor(e,t,n,i){this.result=[];this.pos={index:0,line:1,column:0};this.markStack=[];this.str=e,this.keywords=t,this.operators=n,this.dateTimeLiterals=!!i?.dateTimeLiterals,this.symbolRegex=i?.symbolRegex??/[$\w%]/}tokenize(){for(;this.pos.index<this.str.length;){let e=this.consumeToken();e&&this.result.push(e)}return this.result}prevToken(){return this.result.slice(-1)[0]}peekToken(){this.mark();let e=this.consumeToken();return this.reset(),e}consumeToken(){this.consumeWhitespace();let e=this.curr();if(!e)return;this.mark();let t=this.peek();return e==="/"&&t==="*"?this.consumeMultiLineComment():e==="/"&&t==="/"?this.consumeSingleLineComment():e==="'"||e==='"'?this.consumeString(e):e==="`"?this.consumeBacktickSymbol():e==="@"?this.consumeDateTime():/\d/.exec(e)?this.consumeNumber():/\w/.exec(e)?this.consumeSymbol():(e==="$"||e==="%")&&/\w/.exec(t)?this.consumeSymbol():this.consumeOperator()}consumeWhitespace(){this.consumeWhile(()=>/\s/.exec(this.curr()))}consumeMultiLineComment(){let e=this.pos.index;return this.consumeWhile(()=>this.curr()!=="*"||this.peek()!=="/"),this.advance(),this.advance(),this.buildToken("Comment",this.str.substring(e,this.pos.index))}consumeSingleLineComment(){return this.buildToken("Comment",this.consumeWhile(()=>this.curr()!==`
2
- `))}consumeString(e){this.advance();let t=this.buildToken("String",this.consumeWhile(()=>this.prev()==="\\"||this.curr()!==e));return this.advance(),t}consumeBacktickSymbol(){this.advance();let e=this.buildToken("Symbol",this.consumeWhile(()=>this.curr()!=="`"));return this.advance(),e}consumeDateTime(){this.advance();let e=this.pos.index;this.consumeWhile(()=>/[\d-]/.exec(this.curr()));let t=!1,n=!1;if(this.curr()==="T"&&(t=!0,this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())),this.curr()==="."&&/\d/.exec(this.peek())&&(this.advance(),this.consumeWhile(()=>/\d/.exec(this.curr()))),this.curr()==="Z"?(n=!0,this.advance()):(this.curr()==="+"||this.curr()==="-")&&(n=!0,this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())))),this.pos.index===e)throw new Error("Invalid DateTime literal");let i=this.str.substring(e,this.pos.index);return i.endsWith("T")?i=i.substring(0,i.length-1):!i.startsWith("T")&&t&&!n&&(i+="Z"),this.buildToken("DateTime",i)}consumeNumber(){let e=this.pos.index,t="Number";return this.consumeWhile(()=>/\d/.exec(this.curr())),this.curr()==="."&&/\d/.exec(this.peek())&&(this.advance(),this.consumeWhile(()=>/\d/.exec(this.curr()))),this.curr()==="-"&&this.dateTimeLiterals?(this.pos.index=e-1,this.consumeDateTime()):(this.curr()===" "&&ns(this.peekToken())&&(t="Quantity",this.consumeToken()),this.buildToken(t,this.str.substring(e,this.pos.index)))}consumeSymbol(){let e=this.consumeWhile(()=>this.symbolRegex.exec(this.curr()));return this.prevToken()?.value!=="."&&this.keywords.includes(e)?this.buildToken(e,e):this.buildToken("Symbol",e)}consumeOperator(){let e=this.curr(),t=this.peek(),n=e+t;return this.operators.includes(n)?(this.advance(),this.advance(),this.buildToken(n,n)):(this.advance(),this.buildToken(e,e))}consumeWhile(e){let t=this.pos.index;for(;this.pos.index<this.str.length&&e();)this.advance();return this.str.substring(t,this.pos.index)}curr(){return this.str[this.pos.index]}prev(){return this.str[this.pos.index-1]??""}peek(){return this.str[this.pos.index+1]??""}mark(){this.markStack.push({...this.pos})}reset(){let e=this.markStack.pop();if(!e)throw new Error("No mark to reset to");this.pos.index=e.index,this.pos.line=e.line,this.pos.column=e.column}advance(){this.pos.index++,this.curr()===`
3
- `?(this.pos.line++,this.pos.column=0):this.pos.column++}buildToken(e,t){let n=this.markStack.pop();if(!n)throw new Error("No mark for token");return{id:e,value:t,...n}}};function ns(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&rs.includes(r.value)))}var Le=["true","false"],Ue=["!=","!~","<=",">=","{}","->"];function ii(r){return new oe(r,Le,Ue).tokenize()}var y={FunctionCall:0,Dot:1,Indexer:2,UnaryAdd:3,UnarySubtract:3,Multiply:4,Divide:4,IntegerDivide:4,Modulo:4,Add:5,Subtract:5,Ampersand:5,Is:6,As:6,Union:7,GreaterThan:8,GreaterThanOrEquals:8,LessThan:8,LessThanOrEquals:8,Equals:9,Equivalent:9,NotEquals:9,NotEquivalent:9,In:10,Contains:10,And:11,Xor:12,Or:12,Implies:13,Arrow:100,Semicolon:200},is={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},os={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new ye(e,t)},precedence:y.Indexer},ss={parse(r,e){if(!(e instanceof W))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new Y(e.name,t)},precedence:y.FunctionCall};function as(r){let e=r.split(" "),t=parseFloat(e[0]),n=e[1];return n?.startsWith("'")&&n.endsWith("'")?n=n.substring(1,n.length-1):n="{"+n+"}",{value:t,unit:n}}function Be(){return new Je().registerPrefix("String",{parse:(r,e)=>new U({type:l.string,value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new U({type:l.dateTime,value:Ae(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new U({type:l.Quantity,value:as(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new U({type:e.value.includes(".")?l.decimal:l.integer,value:parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new U({type:l.boolean,value:!0})}).registerPrefix("false",{parse:()=>new U({type:l.boolean,value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new W(e.value)}).registerPrefix("{}",{parse:()=>new ut}).registerPrefix("(",is).registerInfix("[",os).registerInfix("(",ss).prefix("+",y.UnaryAdd,(r,e)=>new lt("+",e,t=>t)).prefix("-",y.UnarySubtract,(r,e)=>new V("-",e,e,(t,n)=>-n)).infixLeft(".",y.Dot,(r,e,t)=>new ie(r,t)).infixLeft("/",y.Divide,(r,e,t)=>new V("/",r,t,(n,i)=>n/i)).infixLeft("*",y.Multiply,(r,e,t)=>new V("*",r,t,(n,i)=>n*i)).infixLeft("+",y.Add,(r,e,t)=>new V("+",r,t,(n,i)=>n+i)).infixLeft("-",y.Subtract,(r,e,t)=>new V("-",r,t,(n,i)=>n-i)).infixLeft("|",y.Union,(r,e,t)=>new Oe(r,t)).infixLeft("=",y.Equals,(r,e,t)=>new ht(r,t)).infixLeft("!=",y.NotEquals,(r,e,t)=>new mt(r,t)).infixLeft("~",y.Equivalent,(r,e,t)=>new yt(r,t)).infixLeft("!~",y.NotEquivalent,(r,e,t)=>new gt(r,t)).infixLeft("<",y.LessThan,(r,e,t)=>new V("<",r,t,(n,i)=>n<i)).infixLeft("<=",y.LessThanOrEquals,(r,e,t)=>new V("<=",r,t,(n,i)=>n<=i)).infixLeft(">",y.GreaterThan,(r,e,t)=>new V(">",r,t,(n,i)=>n>i)).infixLeft(">=",y.GreaterThanOrEquals,(r,e,t)=>new V(">=",r,t,(n,i)=>n>=i)).infixLeft("&",y.Ampersand,(r,e,t)=>new pt(r,t)).infixLeft("and",y.And,(r,e,t)=>new xt(r,t)).infixLeft("as",y.As,(r,e,t)=>new he(r,t)).infixLeft("contains",y.Contains,(r,e,t)=>new dt(r,t)).infixLeft("div",y.Divide,(r,e,t)=>new V("div",r,t,(n,i)=>n/i|0)).infixLeft("in",y.In,(r,e,t)=>new ft(r,t)).infixLeft("is",y.Is,(r,e,t)=>new me(r,t)).infixLeft("mod",y.Modulo,(r,e,t)=>new V("mod",r,t,(n,i)=>n%i)).infixLeft("or",y.Or,(r,e,t)=>new vt(r,t)).infixLeft("xor",y.Xor,(r,e,t)=>new Tt(r,t)).infixLeft("implies",y.Implies,(r,e,t)=>new St(r,t))}var cs=Be();function Ir(r){return new ct(r,cs.construct(ii(r)).consumeAndParse())}function Ie(r,e){let t=Array.isArray(e)?e:[e];for(let n=0;n<t.length;n++){let i=t[n];typeof i=="object"&&"type"in i&&"value"in i||(t[n]=g(t[n]))}return w(r,t).map(n=>n.value)}function w(r,e,t={}){return Ir(r).eval({variables:t},e).map(i=>({type:i.type,value:i.value?.valueOf()}))}var oi=(p=>(p.BOOLEAN="BOOLEAN",p.NUMBER="NUMBER",p.QUANTITY="QUANTITY",p.TEXT="TEXT",p.REFERENCE="REFERENCE",p.CANONICAL="CANONICAL",p.DATE="DATE",p.DATETIME="DATETIME",p.PERIOD="PERIOD",p.UUID="UUID",p))(oi||{});function Dr(r,e){let t=F.types[r]?.searchParamsDetails?.[e.code];return t||(t=ls(r,e)),t}function us(r,e,t){let n=F.types[r];n||(n={},F.types[r]=n),n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=t}function ls(r,e){let t=e.code,n=ai(r,e.expression),i={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let s of n){let a=bt(s),c=Kn(()=>a.join("."));a.length===1&&a[0]instanceof C?i.propertyTypes.add("boolean"):e.code.endsWith(":identifier")?i.propertyTypes.add("Identifier"):c().endsWith("extension.value.code")||c().endsWith("extension.value.coding.code")?(i.array=!0,i.propertyTypes.add("code")):si(i,a,r,1),c().endsWith("extension.valueDateTime")&&(i.array=!1)}let o={type:fs(e,i.propertyTypes),elementDefinitions:i.elementDefinitions,array:i.array};return us(r,t,o),o}function si(r,e,t,n){let i=e[n];if(i instanceof he){r.propertyTypes.add(i.right.toString());return}if(i instanceof Y){ps(r,i);return}let o=i.toString(),s=it(t,o);if(!s)throw new Error(`Element definition not found for ${t} ${o}`);let a=!1,c=n+1;if(c<e.length&&e[c]instanceof ye&&(a=!0,c++),s.isArray&&!a&&(r.array=!0),c>=e.length){r.elementDefinitions.push(s);for(let u of s.type)r.propertyTypes.add(u.code);return}for(let u of s.type){let p=u.code;ds(p)&&(p=s.type[0].code),si(r,e,p,c)}}function ps(r,e){if(e.name==="as"){r.propertyTypes.add(e.args[0].toString());return}if(e.name==="ofType"){r.propertyTypes.add(e.args[0].toString());return}if(e.name==="resolve"){r.propertyTypes.add("string");return}if(e.name==="where"&&e.args[0]instanceof me){r.propertyTypes.add(e.args[0].right.toString());return}throw new Error(`Unhandled FHIRPath function: ${e.name}`)}function ds(r){return r==="Element"||r==="BackboneElement"}function fs(r,e){switch(r.type){case"date":return e.size===1&&e.has(l.date)?"DATE":"DATETIME";case"number":return"NUMBER";case"quantity":return"QUANTITY";case"reference":return e.has(l.canonical)?"CANONICAL":"REFERENCE";case"token":return e.size===1&&e.has(l.boolean)?"BOOLEAN":"TEXT";default:return"TEXT"}}function ai(r,e){let t=[],n=Ir(e);return kr(r,n.child,t),t}function gp(r,e){let t=ai(r,e);if(t.length!==0)return t.map(n=>n.toString()).join(" | ")}function kr(r,e,t){e instanceof Oe?(kr(r,e.left,t),kr(r,e.right,t)):e.toString().startsWith(r+".")&&t.push(e)}function bt(r){if(r instanceof he||r instanceof ye)return[bt(r.left),r].flat();if(r instanceof C)return[r];if(r instanceof ie)return[bt(r.left),bt(r.right)].flat();if(r instanceof Y){if(r.name==="where"&&!(r.args[0]instanceof me))return[];if(r.name==="last")return[]}return[r]}var Cp=20,Pp=1e3,pi=(x=>(x.EQUALS="eq",x.NOT_EQUALS="ne",x.GREATER_THAN="gt",x.LESS_THAN="lt",x.GREATER_THAN_OR_EQUALS="ge",x.LESS_THAN_OR_EQUALS="le",x.STARTS_AFTER="sa",x.ENDS_BEFORE="eb",x.APPROXIMATELY="ap",x.CONTAINS="contains",x.STARTS_WITH="sw",x.EXACT="exact",x.TEXT="text",x.NOT="not",x.ABOVE="above",x.BELOW="below",x.IN="in",x.NOT_IN="not-in",x.OF_TYPE="of-type",x.MISSING="missing",x.PRESENT="present",x.IDENTIFIER="identifier",x.ITERATE="iterate",x))(pi||{}),di={contains:"contains",exact:"exact",above:"above",below:"below",text:"text",not:"not",in:"in","not-in":"not-in","of-type":"of-type",missing:"missing",identifier:"identifier",iterate:"iterate"},Vr={eq:"eq",ne:"ne",lt:"lt",le:"le",gt:"gt",ge:"ge",sa:"sa",eb:"eb",ap:"ap",sw:"sw"};function We(r,e){if(!r)throw new Error("Invalid search URL");let t="",n;if(typeof r=="string")if(r.includes("?")){let[s,a]=r.split("?");t=s,n=new URLSearchParams(a)}else t=r;else typeof r=="object"&&(t=r.pathname,n=r.searchParams);let i;t.includes("/")?i=t.split("/").filter(Boolean).pop():i=t;let o=[];if(n&&o.push(...n.entries()),e)for(let[s,a]of Object.entries(e))if(Array.isArray(a))for(let c of a)o.push([s,c]);else o.push([s,a??""]);return hs(i,o)}function hs(r,e){let t={resourceType:r};for(let[n,i]of e)ms(t,n,i);return t}function ms(r,e,t){let n,i,o=e.indexOf(":");if(o>=0?(n=e.substring(0,o),i=e.substring(o+1)):(n=e,i=""),n!=="_"){if(n==="_has"||e.includes(".")){r.filters=we(r.filters,{code:e,operator:"eq",value:t});return}switch(n){case"_sort":ys(r,t);break;case"_cursor":r.cursor=t;break;case"_count":r.count=parseInt(t,10);break;case"_offset":r.offset=parseInt(t,10);break;case"_total":r.total=t;break;case"_summary":t==="count"?(r.total="accurate",r.count=0):(t==="true"||t==="data"||t==="text")&&(r.summary=t);break;case"_include":{let s=ci(t);i==="iterate"&&(s.modifier="iterate"),r.include=we(r.include,s);break}case"_revinclude":{let s=ci(t);i==="iterate"&&(s.modifier="iterate"),r.revInclude=we(r.revInclude,s);break}case"_fields":case"_elements":r.fields=t.split(",");break;case"_type":r.types=t.split(",");break;case"_format":r.format=t;break;case"_pretty":r.pretty=t==="true";break;default:{let s=F.types[r.resourceType]?.searchParams?.[n];s?r.filters=we(r.filters,xs(s,i,t)):r.filters=we(r.filters,vs(n,i,t))}}}}function ys(r,e){for(let t of e.split(",")){let n,i=!1;t.startsWith("-")?(n=t.substring(1),i=!0):n=t,r.sortRules||(r.sortRules=[]),r.sortRules.push({code:n,descending:i})}}var gs=["missing","present"];function xs(r,e,t){if(gs.includes(e))return{code:r.code,operator:e,value:t};switch(r.type){case"number":case"date":case"quantity":{let{operator:n,value:i}=Ts(t);if(!ui(r,i))throw new d(S(`Invalid format for ${r.type} search parameter: ${i}`));return{code:r.code,operator:n,value:i}}case"reference":case"string":case"token":case"uri":if(!ui(r,t))throw new d(S(`Invalid format for ${r.type} search parameter: ${t}`));return{code:r.code,operator:Ss(e),value:t};default:throw new Error("Unrecognized search parameter type: "+r.type)}}function vs(r,e,t){let n="eq";if(e)n=e;else if(t.length>=2){let i=t.substring(0,2);i in Vr&&(t.length===2||t.at(2)?.match(/\d/))&&(n=i,t=t.substring(i.length))}return{code:r,operator:n,value:t}}function Ts(r){let e=r.substring(0,2),t=Vr[e];return t?{operator:t,value:r.substring(2)}:{operator:"eq",value:r}}function Ss(r){return di[r]??"eq"}function ci(r){let e=r.split(":");if(e.includes("*"))throw new d(S("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new d(S(`Invalid include value '${r}': must be of the form ResourceType:search-parameter`));if(e.length===2)return{resourceType:e[0],searchParam:e[1]};if(e.length===3)return{resourceType:e[0],searchParam:e[1],targetType:e[2]};throw new d(S(`Invalid include value '${r}'`))}function ui(r,e){switch(r.type){case"date":return Ce(e);default:return!0}}var bs=/{{([^{}]+)}}/g;function wp(r,e){return r=r.replaceAll(bs,(t,n)=>{let i=w(n,[],e);return i.length!==1?"":ni(i[0])}),We(r)}function Ap(r){let e=[];return r.fields&&e.push("_fields="+r.fields.join(",")),r.filters&&r.filters.forEach(t=>e.push(Es(t))),r.sortRules&&r.sortRules.length>0&&e.push(Rs(r.sortRules)),r.cursor!==void 0&&e.push("_cursor="+encodeURIComponent(r.cursor)),r.offset!==void 0&&r.offset!==0&&e.push("_offset="+r.offset),r.count!==void 0&&e.push("_count="+r.count),r.total!==void 0&&e.push("_total="+r.total),r.include&&r.include.forEach(t=>e.push(li("_include",t))),r.revInclude&&r.revInclude.forEach(t=>e.push(li("_revinclude",t))),e.length===0?"":(at(e),"?"+e.join("&"))}function Es(r){let e=r.operator in di?":"+r.operator:"",t=r.operator!=="eq"&&r.operator in Vr?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function Rs(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function li(r,e){return r+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function Et(r){let e=[],t="",n=!1;for(let i of r)n?(t+=i,n=!1):i==="\\"?n=!0:i===","?(e.push(t),t=""):t+=i;return e.push(t),e}function Rt(r,e){if(e.resourceType!==r.resourceType)return!1;if(e.filters){for(let t of e.filters)if(!Cs(r,e,t))return!1}return!0}function Cs(r,e,t){let n=F.types[e.resourceType]?.searchParams?.[t.code];if(!n)return!1;if(t.operator==="missing"||t.operator==="present")return Ps(r,t,n);switch(n.type){case"reference":return ws(r,t,n);case"string":case"uri":return fi(r,t,n);case"token":return As(r,t,n);case"date":return Ds(r,t,n);default:return!1}}function Ps(r,e,t){let i=Ie(t.expression,r).length>0;return(e.operator==="missing"&&e.value==="false"||e.operator==="present"&&e.value==="true")===i}function ws(r,e,t){let n=Ie(t.expression,r),i=Ct(e.operator);if(e.value===""&&n.length===0)return e.operator==="eq";let o=n.map(s=>typeof s=="string"?s:s.reference);for(let s of Et(e.value)){let a=o.includes(s);if(!a&&e.code==="_compartment"&&(a=o.some(c=>c?.endsWith("/"+s))),a)return!i}return i}function As(r,e,t){return Dr(r.resourceType,t).type==="BOOLEAN"?Os(r,e,t):fi(r,e,t,!0)}function Os(r,e,t){let n=Ie(t.expression,r),i=e.value==="true",o=n.includes(i);return Ct(e.operator)?!o:o}function fi(r,e,t,n){let o=Dr(r.resourceType,t).elementDefinitions?.[0]?.type?.[0]?.code,s=Ie(t.expression,r),a=Et(e.value),c=Ct(e.operator);for(let u of s)for(let p of a){let h;if(o===l.Identifier?h=Is(u,e.operator,p):o===l.CodeableConcept?h=ks(u,e.operator,p):h=Mr(u,e.operator,p,n),h)return!c}return c}function Mr(r,e,t,n){if(n&&t.includes("|")){let[o,s]=t.split("|");return Mr(r,e,o,!1)&&(!s||Mr(r,e,s,!1))}let i="";return r&&(typeof r=="string"?i=r:typeof r=="object"&&(i=JSON.stringify(r))),i.toLowerCase().includes(t.toLowerCase())}function Is(r,e,t){if(t.includes("|")){let[n,i]=t.split("|").map(o=>o.toLowerCase());return!n&&!i?!1:n?r.system?.toLowerCase()===n&&(!i||r.value?.toLowerCase()===i):!r.system&&r.value?.toLowerCase()===i}return r.value?.toLowerCase()===t.toLowerCase()}function ks(r,e,t){if(t.includes("|")){let[n,i]=t.split("|").map(o=>o.toLowerCase());return!n&&!i?!1:n?r.coding?.some(o=>o.system?.toLowerCase()===n&&(!i||o.code?.toLowerCase()===i))??!1:r.coding?.some(o=>!o.system&&o.code?.toLowerCase()===i)??!1}return r.text?.toLowerCase()===t.toLowerCase()||(r.coding?.some(n=>n.code?.toLowerCase()===t.toLowerCase())??!1)}function Ds(r,e,t){let n=Ie(t.expression,r),i=Et(e.value),o=Ct(e.operator);for(let s of n)for(let a of i)if(Vs(s,e.operator,a))return!o;return o}function Vs(r,e,t){switch(e){case"sa":case"gt":return r>t;case"ge":return r>=t;case"eb":case"lt":return r<t;case"le":return r<=t;case"eq":case"ne":return r===t;default:return!1}}function Ct(r){return r==="ne"||r==="not"}var Ms={resourceType:"*"},_s=["DomainConfiguration","JsonWebKey","Login"],Ns=["PasswordChangeRequest","UserSecurityRequest","Project","ProjectMembership","User"],Fs=(E=>(E.READ="read",E.VREAD="vread",E.UPDATE="update",E.PATCH="patch",E.DELETE="delete",E.HISTORY="history",E.HISTORY_INSTANCE="history-instance",E.HISTORY_TYPE="history-type",E.HISTORY_SYSTEM="history-system",E.CREATE="create",E.SEARCH="search",E.SEARCH_TYPE="search-type",E.SEARCH_SYSTEM="search-system",E.SEARCH_COMPARTMENT="search-compartment",E.CAPABILITIES="capabilities",E.TRANSACTION="transaction",E.BATCH="batch",E.OPERATION="operation",E))(Fs||{}),Ls=["read","vread","history","history-instance"];function Up(r,e){if(r.resource){for(let t of r.resource)if(_r(t.resourceType,e))return!0}return!1}function Us(r,e){if(_s.includes(e))return!1;if(r.resource){for(let t of r.resource)if(_r(t.resourceType,e)&&!t.readonly)return!0}return!1}function Bp(r,e){let t=e.resourceType;return Us(r,t)?!!Bs(e,"update",r):!1}function Bs(r,e,t){if(!t)return Ms;if(t.resource){for(let n of t.resource)if(Ws(r,e,n))return n}}function Ws(r,e,t){let n=r.resourceType;return!(!_r(t.resourceType,n)||t.readonly&&!Ls.includes(e)||t.compartment&&!r.meta?.compartment?.find(i=>i.reference===t.compartment?.reference)||t.criteria&&!Rt(r,We(t.criteria)))}function _r(r,e){return r===e||r==="*"&&!Ns.includes(e)}function hi(r){if(typeof window<"u"){let e=window.atob(r),t=Uint8Array.from(e,n=>n.charCodeAt(0));return new window.TextDecoder().decode(t)}if(typeof Buffer<"u")return Buffer.from(r,"base64").toString("utf-8");throw new Error("Unable to decode base64")}function mi(r){if(typeof window<"u"){let e=new window.TextEncoder().encode(r),t=String.fromCharCode.apply(null,e);return window.btoa(t)}if(typeof Buffer<"u")return Buffer.from(r,"utf8").toString("base64");throw new Error("Unable to encode base64")}function Nr(){let r=new Uint32Array(28);return crypto.getRandomValues(r),Gn(r.buffer)}async function yi(r){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(r))}function ge(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,r=>{let e=Math.random()*16|0;return(r==="x"?e:e&3|8).toString(16)})}function qs(r){let e={};r=pe(r);for(let i of r.entry||[]){i.resource?.meta!==void 0&&(delete i.resource.meta.author,delete i.resource.meta.compartment,delete i.resource.meta.lastUpdated,delete i.resource.meta.project,delete i.resource.meta.versionId);let o=i.resource?.id;o&&(e[o]=ge(),i.fullUrl="urn:uuid:"+e[o],delete i.resource?.id)}let t=r.entry,n=JSON.stringify({resourceType:"Bundle",type:"transaction",entry:t?.map(i=>({fullUrl:i.fullUrl,request:{method:"POST",url:i.resource.resourceType},resource:i.resource}))},(i,o)=>$s(i,o,e),2);return js(JSON.parse(n))}function $s(r,e,t){if(r==="reference"&&typeof e=="string"){let n;if(e.includes("/")?n=e.split("/")[1]:e.startsWith("urn:uuid:")?n=e.slice(9):e.startsWith("#")&&(n=e.slice(1)),n){let i=t[n];if(i)return"urn:uuid:"+i}}return e}function js(r){let e=Hs(r),{sorted:t,cycles:n}=Gs(e),i={};for(let s of r.entry??[])s.fullUrl&&(i[s.fullUrl]=s);let o=t.map(s=>i[s]);for(let s of n)for(let a of s){let c=i[a],u={...c,request:{...c.request,method:"PUT"}};o.push(u)}return{...r,entry:o}}function Gs(r){let e=[],t={},n=[];for(let o of Object.keys(r))t[o]=0;function i(o,s){if(t[o]===2)return!0;if(t[o]===1){let c=s.lastIndexOf(o);return c!==-1&&n.push(s.slice(c)),!0}t[o]=1,s.push(o);let a=!1;for(let c of r[o])i(c,s)||(a=!0);return t[o]=2,s.pop(),e.unshift(o),!a}for(let o in r)t[o]===0&&i(o,[]);return{sorted:e,cycles:n}}function gi(r,e){for(let t in r)if(r[t]&&typeof r[t]=="object"){let n=r[t];if(q(n)){let i=n.reference;i.startsWith("urn:uuid:")&&e(i)}else gi(n,e)}}function Hs(r){let e={};for(let t of r.entry||[])t.fullUrl&&(e[t.fullUrl]=[]);for(let t of r.entry||[]){let n=t.fullUrl;t.resource&&gi(t.resource,i=>{e[i]&&e[i].push(n)})}return e}function zp(r){r=pe(r);let e={resourceType:"Bundle",type:"transaction",entry:[{resource:r}]};if(r.contained){for(let t of r.contained)e.entry.push({resource:t});r.contained=void 0}for(let t of e.entry)t.resource&&!t.resource.id&&(t.resource.id=ge());return qs(e)}var Pt=class{constructor(e=10){this.max=e,this.cache=new Map}clear(){this.cache.clear()}get(e){let t=this.cache.get(e);return t&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size>=this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}delete(e){this.cache.delete(e)}keys(){return this.cache.keys()}first(){return this.cache.keys().next().value}};var A={CSS:"text/css",DICOM:"application/dicom",FAVICON:"image/vnd.microsoft.icon",FHIR_JSON:"application/fhir+json",FORM_URL_ENCODED:"application/x-www-form-urlencoded",HL7_V2:"x-application/hl7-v2+er7",HTML:"text/html",JAVASCRIPT:"text/javascript",JSON:"application/json",JSON_PATCH:"application/json-patch+json",PNG:"image/png",SCIM_JSON:"application/scim+json",SVG:"image/svg+xml",TEXT:"text/plain",TYPESCRIPT:"text/typescript",PING:"x-application/ping",XML:"text/xml",CDA_XML:"application/cda+xml"};var Fr=class{constructor(){this.listeners={}}addEventListener(e,t){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)}removeEventListener(e,t){let n=this.listeners[e];if(n){for(let i=0;i<n.length;i++)if(n[i]===t){n.splice(i,1);return}}}dispatchEvent(e){let t=this.listeners[e.type];if(t)for(let n of t)n.call(this,e);return!e.defaultPrevented}removeAllListeners(){this.listeners={}}},Q=class{constructor(){this.emitter=new Fr}dispatchEvent(e){this.emitter.dispatchEvent(e)}addEventListener(e,t){this.emitter.addEventListener(e,t)}removeEventListener(e,t){this.emitter.removeEventListener(e,t)}removeAllListeners(){this.emitter.removeAllListeners()}};var Lr={"Patient-open":"Patient-open","Patient-close":"Patient-close","ImagingStudy-open":"ImagingStudy-open","ImagingStudy-close":"ImagingStudy-close","Encounter-open":"Encounter-open","Encounter-close":"Encounter-close","DiagnosticReport-open":"DiagnosticReport-open","DiagnosticReport-close":"DiagnosticReport-close","DiagnosticReport-select":"DiagnosticReport-select","DiagnosticReport-update":"DiagnosticReport-update",syncerror:"syncerror"},Qs=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],Ur=["DiagnosticReport-update"];function xi(r){return Ur.includes(r)}function vi(r){if(Ur.includes(r))throw new d(m(`'context.version' is required for '${r}'.`))}var zs={"Patient-open":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"Patient-close":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"ImagingStudy-open":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"ImagingStudy-close":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"Encounter-open":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"Encounter-close":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"DiagnosticReport-open":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-close":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-select":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},select:{resourceType:"*",array:!0,reference:!0}},"DiagnosticReport-update":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},updates:{resourceType:"Bundle"}},syncerror:{operationoutcome:{resourceType:"OperationOutcome"}}};function Js(r){return Qs.includes(r)}function Ti(r){return!!r.endpoint}function Br(r){if(!At(r))throw new d(m("subscriptionRequest must be an object conforming to SubscriptionRequest type."));let{channelType:e,mode:t,topic:n,events:i}=r,o={"hub.channel.type":e,"hub.mode":t,"hub.topic":n,"hub.events":i.join(",")};return Ti(r)&&(o.endpoint=r.endpoint),new URLSearchParams(o).toString()}function At(r){if(typeof r!="object")return!1;let{channelType:e,mode:t,topic:n,events:i}=r;if(!(e&&t&&n&&i)||typeof n!="string"||typeof i!="object"||!Array.isArray(i)||i.length<1||e!=="websocket"||t!=="subscribe"&&t!=="unsubscribe")return!1;for(let o of i)if(!Lr[o])return!1;return!(Ti(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function Ks(r,e,t,n){if(typeof e!="object")throw new d(m(`context[${t}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.id&&typeof e.id=="string"))throw new d(m(`context[${t}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new d(m(`context[${t}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!Js(e.resourceType))throw new d(m(`context[${t}] is invalid. Resource must contain a valid FHIRcast resource type. Resource type is not a known resource type.`));if(i&&e.resourceType!==i)throw new d(m(`context[${t}] is invalid. context[${t}] for the '${r}' event should contain resource of type ${i}.`))}}function Ys(r,e,t,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),n.reference){if(n.array){if(!(typeof e.reference=="object"&&Array.isArray(e.reference)))throw new d(m(`context[${t}] is invalid. Expected key '${e.key}' to be an array of references.`));for(let o of e.reference)if(!q(o))throw new d(m(`context[${t}] is invalid. Expected key '${e.key}' to be an array of valid references.`))}else if(!q(e.reference))throw new d(m(`context[${t}] is invalid. Expected key '${e.key}' to be a reference.`))}else Ks(r,e.resource,t,n)}function Zs(r,e){let t=new Map,n=zs[r];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new d(m(`Key '${o}' not found for event '${r}'. Make sure to add only valid keys.`));Ys(r,e[i],i,n[o],t)}for(let[i,o]of Object.entries(n)){if(!(o.optional||t.has(i)))throw new d(m(`Missing required key '${i}' on context for '${r}' event.`));if(!o.manyAllowed&&(t.get(i)||0)>1)throw new d(m(`${t.get(i)} context entries with key '${i}' found for the '${r}' event when schema only allows for 1.`))}}function Wr(r,e,t,n){if(!(r&&typeof r=="string"))throw new d(m("Must provide a topic."));if(!Lr[e])throw new d(m(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(Lr).join(", ")}`));if(typeof t!="object")throw new d(m("context must be a context object or array of context objects."));if(Ur.includes(e)&&!n)throw new d(m(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(t)?t:[t];return Zs(e,i),{timestamp:new Date().toISOString(),id:ge(),event:{"hub.topic":r,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var wt=class extends Q{constructor(e){if(super(),this.subRequest=e,!e.endpoint)throw new d(m("Subscription request should contain an endpoint."));if(!At(e))throw new d(m("Subscription request failed validation."));let t=new WebSocket(e.endpoint);t.addEventListener("open",()=>{this.dispatchEvent({type:"connect"}),t.addEventListener("message",n=>{let i=JSON.parse(n.data);if(i["hub.topic"])return;let o=i;o.event["hub.event"]!=="heartbeat"&&(this.dispatchEvent({type:"message",payload:o}),t.send(JSON.stringify({id:i?.id,timestamp:new Date().toISOString()})))}),t.addEventListener("close",()=>{this.dispatchEvent({type:"disconnect"})})}),this.websocket=t}disconnect(){this.websocket.close()}};function Xs(r){let e=r.replace(/-/g,"+").replace(/_/g,"/"),t=hi(e),n=Array.from(t).reduce((o,s)=>{let a=("00"+s.charCodeAt(0).toString(16)).slice(-2);return`${o}%${a}`},""),i=decodeURIComponent(n);return JSON.parse(i)}function Si(r){return r.split(".").length===3}function Ot(r){let[e,t,n]=r.split(".");return Xs(t)}function bi(r){try{return typeof Ot(r).login_id=="string"}catch{return!1}}function Ei(r){try{let t=Ot(r).exp;return typeof t=="number"?t*1e3:void 0}catch{return}}var It=class{constructor(e){this.medplum=e}async get(e){return this.medplum.get(`keyvalue/v1/${e}`)}async set(e,t){await this.medplum.put(`keyvalue/v1/${e}`,t,A.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var Ri;Ri=Symbol.toStringTag;var M=class{constructor(e){this[Ri]="ReadablePromise";this.status="pending";this.suspender=e.then(t=>(this.status="success",this.response=t,t),t=>{throw this.status="error",this.error=t,t})}isPending(){return this.status==="pending"}isOk(){return this.status==="success"}read(){switch(this.status){case"pending":throw this.suspender;case"error":throw this.error;default:return this.response}}then(e,t){return this.suspender.then(e,t)}catch(e){return this.suspender.catch(e)}finally(e){return this.suspender.finally(e)}};var qe=class{constructor(e){this.storage=e??(typeof localStorage<"u"?localStorage:new qr)}clear(){this.storage.clear()}getString(e){return this.storage.getItem(e)??void 0}setString(e,t){t?this.storage.setItem(e,t):this.storage.removeItem(e)}getObject(e){let t=this.getString(e);return t?JSON.parse(t):void 0}setObject(e,t){this.setString(e,t?st(t):void 0)}},qr=class{constructor(){this.data=new Map}get length(){return this.data.size}clear(){this.data.clear()}getItem(e){return this.data.get(e)??null}setItem(e,t){t?this.data.set(e,t):this.data.delete(e)}removeItem(e){this.data.delete(e)}key(e){return Array.from(this.data.keys())[e]}},Ci=class extends qe{constructor(){super();this.initResolve=()=>{};this.initialized=!1,this.initPromise=new Promise(t=>{this.initResolve=t})}setInitialized(){this.initialized||(this.initResolve(),this.initialized=!0)}getInitPromise(){return this.initPromise}get isInitialized(){return this.initialized}};var ke={Event:typeof globalThis.Event<"u"?globalThis.Event:void 0,ErrorEvent:void 0,CloseEvent:void 0},Pi=!1;function ea(){if(typeof globalThis.Event>"u")throw new Error("Unable to lazy init events for ReconnectingWebSocket. globalThis.Event is not defined yet");ke.Event=globalThis.Event,ke.ErrorEvent=class extends Event{constructor(e,t){super("error",t),this.message=e.message,this.error=e}},ke.CloseEvent=class extends Event{constructor(t=1e3,n="",i){super("close",i);this.wasClean=!0;this.code=t,this.reason=n}}}function ta(r,e){if(!r)throw new Error(e)}function kt(r){return new r.constructor(r.type,r)}var xe={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},wi=!1,Dt=class r extends Q{constructor(t,n,i={}){Pi||(ea(),Pi=!0);super();this._retryCount=-1;this._shouldReconnect=!0;this._connectLock=!1;this._closeCalled=!1;this._messageQueue=[];this._debugLogger=console.log.bind(console);this.onclose=null;this.onerror=null;this.onmessage=null;this.onopen=null;this._handleOpen=t=>{this._debug("open event");let{minUptime:n=xe.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),n),ta(this._ws,"WebSocket is not defined"),this._ws.binaryType=this._binaryType,this._messageQueue.forEach(i=>this._ws?.send(i)),this._messageQueue=[],this.onopen&&this.onopen(t),this.dispatchEvent(kt(t))};this._handleMessage=t=>{this._debug("message event"),this.onmessage&&this.onmessage(t),this.dispatchEvent(kt(t))};this._handleError=t=>{this._debug("error event",t.message),this._disconnect(void 0,t.message==="TIMEOUT"?"timeout":void 0),this.onerror&&this.onerror(t),this._debug("exec error listeners"),this.dispatchEvent(kt(t)),this._connect()};this._handleClose=t=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(t),this.dispatchEvent(kt(t))};this._url=t,this._protocols=n,this._options=i,this._options.startClosed&&(this._shouldReconnect=!1),this._options.binaryType?this._binaryType=this._options.binaryType:this._binaryType="blob",this._options.debugLogger&&(this._debugLogger=this._options.debugLogger),this._connect()}static get CONNECTING(){return 0}static get OPEN(){return 1}static get CLOSING(){return 2}static get CLOSED(){return 3}get CONNECTING(){return r.CONNECTING}get OPEN(){return r.OPEN}get CLOSING(){return r.CLOSING}get CLOSED(){return r.CLOSED}get binaryType(){return this._ws?this._ws.binaryType:this._binaryType}set binaryType(t){this._binaryType=t,this._ws&&(this._ws.binaryType=t)}get retryCount(){return Math.max(this._retryCount,0)}get bufferedAmount(){return this._messageQueue.reduce((n,i)=>(typeof i=="string"?n+=i.length:i instanceof Blob?n+=i.size:n+=i.byteLength,n),0)+(this._ws?.bufferedAmount??0)}get extensions(){return this._ws?.extensions??""}get protocol(){return this._ws?.protocol??""}get readyState(){return this._ws?this._ws.readyState:this._options.startClosed?r.CLOSED:r.CONNECTING}get url(){return this._ws?this._ws.url:""}get shouldReconnect(){return this._shouldReconnect}close(t=1e3,n){if(this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),!this._ws){this._debug("close enqueued: no ws instance");return}if(this._ws.readyState===this.CLOSED){this._debug("close: already closed");return}this._ws.close(t,n)}reconnect(t,n){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED?this._connect():(this._disconnect(t,n),this._connect())}send(t){if(this._ws&&this._ws.readyState===this.OPEN)this._debug("send",t),this._ws.send(t);else{let{maxEnqueuedMessages:n=xe.maxEnqueuedMessages}=this._options;this._messageQueue.length<n&&(this._debug("enqueue",t),this._messageQueue.push(t))}}_debug(...t){this._options.debug&&this._debugLogger("RWS>",...t)}_getNextDelay(){let{reconnectionDelayGrowFactor:t=xe.reconnectionDelayGrowFactor,minReconnectionDelay:n=xe.minReconnectionDelay,maxReconnectionDelay:i=xe.maxReconnectionDelay}=this._options,o=0;return this._retryCount>0&&(o=n*Math.pow(t,this._retryCount-1),o>i&&(o=i)),this._debug("next delay",o),o}_wait(){return new Promise(t=>{setTimeout(t,this._getNextDelay())})}_connect(){if(this._connectLock||!this._shouldReconnect)return;this._connectLock=!0;let{maxRetries:t=xe.maxRetries,connectionTimeout:n=xe.connectionTimeout}=this._options;if(this._retryCount>=t){this._debug("max retries reached",this._retryCount,">=",t);return}this._retryCount++,this._debug("connect",this._retryCount),this._removeListeners(),this._wait().then(()=>{if(this._closeCalled){this._connectLock=!1;return}!this._options.WebSocket&&typeof WebSocket>"u"&&!wi&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),wi=!0);let i=this._options.WebSocket||WebSocket;this._debug("connect",{url:this._url,protocols:this._protocols}),this._ws=this._protocols?new i(this._url,this._protocols):new i(this._url),this._ws.binaryType=this._binaryType,this._connectLock=!1,this._addListeners(),this._connectTimeout=setTimeout(()=>this._handleTimeout(),n)}).catch(i=>{this._connectLock=!1,this._handleError(new ke.ErrorEvent(Error(i.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new ke.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(t=1e3,n){if(this._clearTimeouts(),!!this._ws){this._removeListeners();try{this._ws.close(t,n),this._handleClose(new ke.CloseEvent(t,n,this))}catch{}}}_acceptOpen(){this._debug("accept open"),this._retryCount=0}_removeListeners(){this._ws&&(this._debug("removeListeners"),this._ws.removeEventListener("open",this._handleOpen),this._ws.removeEventListener("close",this._handleClose),this._ws.removeEventListener("message",this._handleMessage),this._ws.removeEventListener("error",this._handleError))}_addListeners(){this._ws&&(this._debug("addListeners"),this._ws.addEventListener("open",this._handleOpen),this._ws.addEventListener("close",this._handleClose),this._ws.addEventListener("message",this._handleMessage),this._ws.addEventListener("error",this._handleError))}_clearTimeouts(){clearTimeout(this._connectTimeout),clearTimeout(this._uptimeTimeout)}};var ra=5e3,$e=class extends Q{constructor(...e){super(),this.criteria=new Set(e)}getCriteria(){return this.criteria}_addCriteria(e){this.criteria.add(e)}_removeCriteria(e){this.criteria.delete(e)}},$r=class{constructor(e,t){this.connecting=!1;this.criteria=e,this.emitter=new $e(e),this.refCount=1,this.subscriptionProps=t?{...t}:void 0}clearAttachedSubscription(){this.subscriptionId=void 0,this.token=void 0}},Vt=class{constructor(e,t,n){this.pingTimer=void 0;this.waitingForPong=!1;if(!(e instanceof Mt))throw new d(m("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(t).toString()}catch{throw new d(m("Not a valid URL"))}let o=n?.ReconnectingWebSocket?new n.ReconnectingWebSocket(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger}):new Dt(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger});this.medplum=e,this.ws=o,this.masterSubEmitter=new $e,this.criteriaEntries=new Map,this.criteriaEntriesBySubscriptionId=new Map,this.wsClosed=!1,this.pingIntervalMs=n?.pingIntervalMs??ra,this.currentProfile=e.getProfile(),this.setupListeners()}setupListeners(){let e=this.ws;e.addEventListener("message",t=>{try{let n=JSON.parse(t.data);if(n.type==="pong"){this.waitingForPong=!1;return}let i=n,o=i?.entry?.[0]?.resource;if(o.type==="heartbeat"){this.masterSubEmitter?.dispatchEvent({type:"heartbeat",payload:i});return}if(o.type==="handshake"){let a=le(o.subscription),c={type:"connect",payload:{subscriptionId:a}};this.masterSubEmitter?.dispatchEvent(c);let u=this.criteriaEntriesBySubscriptionId.get(a);if(!u){console.warn("Received handshake for criteria the SubscriptionManager is not listening for yet");return}u.connecting=!1,u.emitter.dispatchEvent({...c});return}this.masterSubEmitter?.dispatchEvent({type:"message",payload:i});let s=this.criteriaEntriesBySubscriptionId.get(le(o.subscription));if(!s){console.warn("Received notification for criteria the SubscriptionManager is not listening for");return}s.emitter.dispatchEvent({type:"message",payload:i})}catch(n){console.error(n);let i={type:"error",payload:n};this.masterSubEmitter?.dispatchEvent(i);for(let o of this.getAllCriteriaEmitters())o.dispatchEvent({...i})}}),e.addEventListener("error",()=>{let t={type:"error",payload:new d(dn(new Error("WebSocket error")))};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t})}),e.addEventListener("close",()=>{let t={type:"close"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=void 0,this.waitingForPong=!1),this.wsClosed&&(this.criteriaEntries.clear(),this.criteriaEntriesBySubscriptionId.clear(),this.masterSubEmitter?.removeAllListeners())}),e.addEventListener("open",()=>{let t={type:"open"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.refreshAllSubscriptions().catch(console.error),this.pingTimer||(this.pingTimer=setInterval(()=>{if(this.waitingForPong){this.waitingForPong=!1,e.reconnect();return}e.send(JSON.stringify({type:"ping"})),this.waitingForPong=!0},this.pingIntervalMs))}),this.medplum.addEventListener("change",()=>{let t=this.medplum.getProfile();this.currentProfile&&t===void 0?this.ws.close():t&&this.currentProfile?.id!==t.id&&this.ws.reconnect(),this.currentProfile=t})}emitError(e,t){let n={type:"error",payload:t};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}maybeEmitDisconnect(e){let{subscriptionId:t}=e;if(t){let n={type:"disconnect",payload:{subscriptionId:t}};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}else console.warn("Called disconnect for `CriteriaEntry` before `subscriptionId` was present.")}async getTokenForCriteria(e){let t=e?.subscriptionId;t||(t=(await this.medplum.createResource({...e.subscriptionProps,resourceType:"Subscription",status:"active",reason:`WebSocket subscription for ${z(this.medplum.getProfile())}`,channel:{type:"websocket"},criteria:e.criteria})).id);let{parameter:n}=await this.medplum.get(`fhir/R4/Subscription/${t}/$get-ws-binding-token`),i=n?.find(s=>s.name==="token")?.valueString,o=n?.find(s=>s.name==="websocket-url")?.valueUrl;if(!i)throw new d(m("Failed to get token"));if(!o)throw new d(m("Failed to get URL from $get-ws-binding-token"));return[t,i]}maybeGetCriteriaEntry(e,t){let n=this.criteriaEntries.get(e);if(n){if(!t)return n.bareCriteria;for(let i of n.criteriaWithProps)if(te(t,i.subscriptionProps))return i}}getAllCriteriaEmitters(){let e=[];for(let t of this.criteriaEntries.values()){t.bareCriteria&&e.push(t.bareCriteria.emitter);for(let n of t.criteriaWithProps)e.push(n.emitter)}return e}addCriteriaEntry(e){let{criteria:t,subscriptionProps:n}=e,i;this.criteriaEntries.has(t)?i=this.criteriaEntries.get(t):(i={criteriaWithProps:[]},this.criteriaEntries.set(t,i)),n?i.criteriaWithProps.push(e):i.bareCriteria=e}removeCriteriaEntry(e){let{criteria:t,subscriptionProps:n,subscriptionId:i,token:o}=e;if(!this.criteriaEntries.has(t))return;let s=this.criteriaEntries.get(t);n?s.criteriaWithProps=s.criteriaWithProps.filter(a=>{let c=a.subscriptionProps;return!te(n,c)}):s.bareCriteria=void 0,!s.bareCriteria&&s.criteriaWithProps.length===0&&(this.criteriaEntries.delete(t),this.masterSubEmitter?._removeCriteria(t)),i&&this.criteriaEntriesBySubscriptionId.delete(i),o&&this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"unbind-from-token",payload:{token:o}}))}async subscribeToCriteria(e){if(!(this.ws.readyState!==WebSocket.OPEN||e.connecting)){e.connecting=!0;try{let[t,n]=await this.getTokenForCriteria(e);e.subscriptionId=t,e.token=n,this.criteriaEntriesBySubscriptionId.set(t,e),this.ws.send(JSON.stringify({type:"bind-with-token",payload:{token:n}}))}catch(t){console.error(be(t)),this.emitError(e,t),this.removeCriteriaEntry(e)}}}async refreshAllSubscriptions(){this.criteriaEntriesBySubscriptionId.clear();for(let e of this.criteriaEntries.values())for(let t of[...e.bareCriteria?[e.bareCriteria]:[],...e.criteriaWithProps])t.clearAttachedSubscription(),await this.subscribeToCriteria(t)}addCriteria(e,t){this.masterSubEmitter&&this.masterSubEmitter._addCriteria(e);let n=this.maybeGetCriteriaEntry(e,t);if(n)return n.refCount+=1,n.emitter;let i=new $r(e,t);return this.addCriteriaEntry(i),this.subscribeToCriteria(i).catch(console.error),i.emitter}removeCriteria(e,t){let n=this.maybeGetCriteriaEntry(e,t);if(!n){console.warn("Criteria not known to `SubscriptionManager`. Possibly called remove too many times.");return}n.refCount-=1,!(n.refCount>0)&&(this.maybeEmitDisconnect(n),this.removeCriteriaEntry(n))}getWebSocket(){return this.ws}closeWebSocket(){this.wsClosed||(this.wsClosed=!0,this.ws.close())}reconnectWebSocket(){this.ws.reconnect(),this.wsClosed=!1}getCriteriaCount(){return this.getAllCriteriaEmitters().length}getMasterEmitter(){return this.masterSubEmitter||(this.masterSubEmitter=new $e(...Array.from(this.criteriaEntries.keys()))),this.masterSubEmitter}};async function wd({resource:r,subscription:e,context:t,getPreviousResource:n,logger:i}){if(e.meta?.account&&r.meta?.account?.reference!==e.meta.account.reference)return i?.debug("Ignore resource in different account compartment"),!1;if(!na(e,i))return i?.debug("Ignore subscription without recognized channel type"),!1;let o=e.criteria;if(!o)return i?.debug("Ignore rest hook missing criteria"),!1;let s=We(o);if(r.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${r.resourceType}")`),!1;if(!await ia(e,r,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let c=ee(e,"https://medplum.com/fhir/StructureDefinition/subscription-supported-interaction");return c&&c.valueCode!==t.interaction?(i?.debug(`Ignore rest hook for different interaction (wanted "${c.valueCode}", received "${t.interaction}")`),!1):Rt(r,s)}function na(r,e){let t=r.channel?.type;return t==="rest-hook"?r.channel?.endpoint?!0:(e?.debug("Ignore rest-hook missing URL"),!1):t==="websocket"}async function ia(r,e,t){let n=ee(r,"https://medplum.com/fhir/StructureDefinition/fhir-path-criteria-expression");if(!n?.valueString)return!0;let i=await t(e),o={"%current":g(e),"%previous":g(i??{})};return w(n.valueString,[g(e)],o)?.[0]?.value===!0}var jr="4.0.0-cacf0021b",nf="medplum-cli",oa=A.FHIR_JSON+", */*; q=0.1",sa="https://api.medplum.com/",aa=1e3,ca=6e4,ua=0,la=3e5,pa="Binary/",Ai={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},da=(o=>(o.ClientCredentials="client_credentials",o.AuthorizationCode="authorization_code",o.RefreshToken="refresh_token",o.JwtBearer="urn:ietf:params:oauth:grant-type:jwt-bearer",o.TokenExchange="urn:ietf:params:oauth:grant-type:token-exchange",o))(da||{}),fa=(o=>(o.AccessToken="urn:ietf:params:oauth:token-type:access_token",o.RefreshToken="urn:ietf:params:oauth:token-type:refresh_token",o.IdToken="urn:ietf:params:oauth:token-type:id_token",o.Saml1Token="urn:ietf:params:oauth:token-type:saml1",o.Saml2Token="urn:ietf:params:oauth:token-type:saml2",o))(fa||{}),ha=(o=>(o.ClientSecretBasic="client_secret_basic",o.ClientSecretPost="client_secret_post",o.ClientSecretJwt="client_secret_jwt",o.PrivateKeyJwt="private_key_jwt",o.None="none",o))(ha||{}),ma=(e=>(e.JwtBearer="urn:ietf:params:oauth:client-assertion-type:jwt-bearer",e))(ma||{}),Mt=class extends Q{constructor(t){super();this.initComplete=!0;if(t?.baseUrl&&!t.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");this.options=t??{},this.fetch=t?.fetch??ya(),this.storage=t?.storage??new qe,this.createPdfImpl=t?.createPdf,this.baseUrl=Pr(t?.baseUrl??sa),this.fhirBaseUrl=B(this.baseUrl,t?.fhirUrlPath??"fhir/R4"),this.authorizeUrl=B(this.baseUrl,t?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=B(this.baseUrl,t?.tokenUrl??"oauth2/token"),this.logoutUrl=B(this.baseUrl,t?.logoutUrl??"oauth2/logout"),this.fhircastHubUrl=B(this.baseUrl,t?.fhircastHubUrl??"fhircast/STU3"),this.clientId=t?.clientId??"",this.clientSecret=t?.clientSecret??"",this.defaultHeaders=t?.defaultHeaders??{},this.onUnauthenticated=t?.onUnauthenticated,this.refreshGracePeriod=t?.refreshGracePeriod??la,this.cacheTime=t?.cacheTime??(typeof window>"u"?ua:ca),this.cacheTime>0?this.requestCache=new Pt(t?.resourceCacheSize??aa):this.requestCache=void 0,t?.autoBatchTime?(this.autoBatchTime=t.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0),t?.accessToken&&this.setAccessToken(t.accessToken),this.storage.getInitPromise===void 0?(t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initPromise=Promise.resolve(),this.dispatchEvent({type:"storageInitialized"})):(this.initComplete=!1,this.initPromise=this.storage.getInitPromise(),this.initPromise.then(()=>{t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initComplete=!0,this.dispatchEvent({type:"storageInitialized"})}).catch(n=>{console.error(n),this.initComplete=!0,this.dispatchEvent({type:"storageInitFailed",payload:{error:n}})})),this.setupStorageListener()}get isInitialized(){return this.initComplete}getInitPromise(){return this.initPromise}async attemptResumeActiveLogin(){let t=this.getActiveLogin();t&&(this.setAccessToken(t.accessToken,t.refreshToken),await this.refreshProfile())}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}getFhircastHubUrl(){return this.fhircastHubUrl}getDefaultHeaders(){return this.defaultHeaders}clear(){this.storage.clear(),typeof window<"u"&&sessionStorage.clear(),this.clearActiveLogin()}clearActiveLogin(){this.storage.setString("activeLogin",void 0),this.requestCache?.clear(),this.accessToken=void 0,this.refreshToken=void 0,this.refreshPromise=void 0,this.accessTokenExpires=void 0,this.sessionDetails=void 0,this.medplumServer=void 0,this.dispatchEvent({type:"change"})}invalidateUrl(t){t=t.toString(),this.requestCache?.delete(t)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(t){let n=B(this.fhirBaseUrl,t);if(this.requestCache)for(let i of this.requestCache.keys())(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache.delete(i)}get(t,n={}){t=t.toString();let i=this.getCacheEntry(t,n);if(i)return i.value;let o;t.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue&&!n.disableAutoBatch?o=new Promise((a,c)=>{this.autoBatchQueue.push({method:"GET",url:t.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:c}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):o=this.request("GET",t,n);let s=new M(o);return this.setCacheEntry(t,s),s}post(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("POST",t,o)}put(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("PUT",t,o)}patch(t,n,i={}){return t=t.toString(),this.setRequestBody(i,n),this.setRequestContentType(i,A.JSON_PATCH),this.invalidateUrl(t),this.request("PATCH",t,i)}delete(t,n){return t=t.toString(),this.invalidateUrl(t),this.request("DELETE",t,n)}async startNewUser(t,n){let{codeChallengeMethod:i,codeChallenge:o}=await this.startPkce();return this.post("auth/newuser",{...t,clientId:t.clientId??this.clientId,codeChallengeMethod:i,codeChallenge:o},void 0,n)}async startNewProject(t,n){return this.post("auth/newproject",t,void 0,n)}async startNewPatient(t,n){return this.post("auth/newpatient",t,void 0,n)}async startLogin(t,n){return this.post("auth/login",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async startGoogleLogin(t,n){return this.post("auth/google",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async ensureCodeChallenge(t){return t.codeChallenge?t:{...t,...await this.startPkce()}}async signOut(){await this.post(this.logoutUrl,{}),this.clear()}async signInWithRedirect(t){let i=new URLSearchParams(window.location.search).get("code");if(!i){await this.requestAuthorization(t);return}return this.processCode(i)}signOutWithRedirect(){window.location.assign(this.logoutUrl)}async signInWithExternalAuth(t,n,i,o,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),window.location.assign(this.getExternalAuthRedirectUri(t,n,i,a,s))}async exchangeExternalAccessToken(t,n){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");let i=new URLSearchParams;return i.set("grant_type","urn:ietf:params:oauth:grant-type:token-exchange"),i.set("subject_token_type","urn:ietf:params:oauth:token-type:access_token"),i.set("client_id",n),i.set("subject_token",t),this.fetchTokens(i)}getExternalAuthRedirectUri(t,n,i,o,s=!0){let a=new URL(t);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",n),a.searchParams.set("redirect_uri",i),a.searchParams.set("scope",o.scope??"openid profile email"),a.searchParams.set("state",JSON.stringify(o)),s){let{codeChallenge:c,codeChallengeMethod:u}=o;if(!u)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!c)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");a.searchParams.set("code_challenge_method",u),a.searchParams.set("code_challenge",c)}return a.toString()}fhirUrl(...t){return new URL(B(this.fhirBaseUrl,t.join("/")))}fhirSearchUrl(t,n){let i=this.fhirUrl(t);return n&&(i.search=Zn(n)),i}search(t,n,i){let o=this.fhirSearchUrl(t,n),s="search-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=this.getBundle(o,i);return this.setCacheEntry(s,c),c}searchOne(t,n,i){let o=this.fhirSearchUrl(t,n);o.searchParams.set("_count","1"),o.searchParams.sort();let s="searchOne-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=new M(this.search(t,o.searchParams,i).then(u=>u.entry?.[0]?.resource));return this.setCacheEntry(s,c),c}searchResources(t,n,i){let s="searchResources-"+this.fhirSearchUrl(t,n).toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=new M(this.search(t,n,i).then(ki));return this.setCacheEntry(s,c),c}async*searchResourcePages(t,n,i){let o=this.fhirSearchUrl(t,n);for(;o;){let s=new URL(o).searchParams,a=await this.search(t,s,i),c=a.link?.find(u=>u.relation==="next");if(!a.entry?.length&&!c)break;yield ki(a),o=c?.url?new URL(c.url):void 0}}valueSetExpand(t,n){let i=this.fhirUrl("ValueSet","$expand");return i.search=new URLSearchParams(t).toString(),this.get(i.toString(),n)}getCached(t,n){let i=this.requestCache?.get(this.fhirUrl(t,n).toString())?.value;return i?.isOk()?i.read():void 0}getCachedReference(t){let n=t.reference;if(!n)return;if(n==="system")return Ai;let[i,o]=n.split("/");if(!(!i||!o))return this.getCached(i,o)}readResource(t,n,i){if(!n)throw new Error('The "id" parameter cannot be null, undefined, or an empty string.');return this.get(this.fhirUrl(t,n),i)}readReference(t,n){let i=t.reference;if(!i)return new M(Promise.reject(new Error("Missing reference")));if(i==="system")return new M(Promise.resolve(Ai));let[o,s]=i.split("/");return!o||!s?new M(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}requestSchema(t){if(Rn(t))return Promise.resolve();let n=t+"-requestSchema",i=this.getCacheEntry(n,void 0);if(i)return i.value;let o=new M((async()=>{let s=`{
1
+ var Je=class{constructor(e,t){this.operator=e;this.child=t}toString(){return`${this.operator}(${this.child.toString()})`}},ee=class{constructor(e,t,n){this.operator=e;this.left=t;this.right=n}toString(){return`${this.left.toString()} ${this.operator} ${this.right.toString()}`}},Ke=class{constructor(){this.prefixParselets={};this.infixParselets={}}registerInfix(e,t){return this.infixParselets[e]=t,this}registerPrefix(e,t){return this.prefixParselets[e]=t,this}prefix(e,t,n){return this.registerPrefix(e,{parse(i,o){let s=i.consumeAndParse(t);return n(o,s)}})}infixLeft(e,t,n){return this.registerInfix(e,{parse(i,o,s){let a=i.consumeAndParse(t);return n(o,s,a)},precedence:t})}construct(e){return new Ht(e,this.prefixParselets,this.infixParselets)}},Ht=class{constructor(e,t,n){this.tokens=e,this.prefixParselets=t,this.infixParselets=n}hasMore(){return this.tokens.length>0}match(e){return this.peek()?.id!==e?!1:(this.consume(),!0)}consumeAndParse(e=1/0){let t=this.consume(),n=this.prefixParselets[t.id];if(!n)throw Error(`Parse error at "${t.value}" (line ${t.line}, column ${t.column}). No matching prefix parselet.`);let i=n.parse(this,t);for(;e>this.getPrecedence();){let o=this.consume();i=this.getInfixParselet(o).parse(this,i,o)}return i}getPrecedence(){let e=this.peek();if(!e)return 1/0;let t=this.getInfixParselet(e);return t?t.precedence:1/0}consume(e,t){if(!this.tokens.length)throw Error("Cant consume unknown more tokens.");if(e&&this.peek()?.id!==e){let n=this.peek();throw Error(`Expected ${e} but got "${n.id}" (${n.value}) at line ${n.line} column ${n.column}.`)}if(t&&this.peek()?.value!==t){let n=this.peek();throw Error(`Expected "${t}" but got "${n.value}" at line ${n.line} column ${n.column}.`)}return this.tokens.shift()}peek(){return this.tokens.length>0?this.tokens[0]:void 0}removeComments(){this.tokens=this.tokens.filter(e=>e.id!=="Comment")}getInfixParselet(e){return this.infixParselets[e.id==="Symbol"?e.value:e.id]}};var on="http://unitsofmeasure.org",gc="http://loinc.org",xc="http://snomed.info/sct",vc="http://www.nlm.nih.gov/research/umls/rxnorm",Tc="http://www.ama-assn.org/go/cpt",Sc="http://hl7.org/fhir/sid/icd-10",bc="http://hl7.org/fhir/sid/ndc",sn="http://hl7.org",Ec="http://terminology.hl7.org";var Qt="ok",Ye="created",zt="gone",Jt="not-modified",Kt="found",Yt="not-found",Zt="conflict",Xt="unauthorized",an="forbidden",cn="precondition-failed",un="multiple-matches",ln="too-many-requests",Ze="accepted",dn="server-timeout",Cc={resourceType:"OperationOutcome",id:Qt,issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},Pc={resourceType:"OperationOutcome",id:Ye,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},wc={resourceType:"OperationOutcome",id:Jt,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},pn={resourceType:"OperationOutcome",id:Yt,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},be={resourceType:"OperationOutcome",id:Xt,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},fn={...be,issue:[...be.issue,{severity:"error",code:"expired",details:{text:"Token expired"}}]},er={...be,issue:[...be.issue,{severity:"error",code:"invalid",details:{text:"Token not issued for this audience"}}]},Ac={resourceType:"OperationOutcome",id:an,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},Oc={resourceType:"OperationOutcome",id:zt,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},Ic={resourceType:"OperationOutcome",id:cn,issue:[{severity:"error",code:"processing",details:{text:"Precondition Failed"}}]},kc={resourceType:"OperationOutcome",id:un,issue:[{severity:"error",code:"multiple-matches",details:{text:"Multiple resources found matching condition"}}]},Dc={resourceType:"OperationOutcome",id:ln,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function Vc(r){return{resourceType:"OperationOutcome",id:Ze,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:r}]}}function S(r,e){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:r},...e?{expression:[e]}:void 0}]}}function Mc(r,e){return{resourceType:"OperationOutcome",id:Zt,issue:[{severity:"error",code:"conflict",details:{coding:e?[{code:e}]:void 0,text:r}}]}}function m(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"structure",details:{text:r}}]}}function hn(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:r.toString()}]}}function _c(r){return{resourceType:"OperationOutcome",id:dn,issue:[{severity:"error",code:"timeout",details:{text:r??"Server timeout"}}]}}function Nc(r){let e=r.toString();return{resourceType:"OperationOutcome",id:Kt,issue:[{severity:"information",code:"informational",details:{coding:[{system:"urn:ietf:rfc:3986",code:e}],text:"Redirect to "+e}}]}}function Ee(r){return typeof r=="object"&&r!==null&&r.resourceType==="OperationOutcome"}function tr(r){return r.id===Qt||r.id===Ye||r.id===Jt||r.id===Ze}function Fc(r){return r.id===Ye}function Lc(r){return r.id===Ze}function Uc(r){return r.id===Kt}function Bc(r){return r.id===Yt}function Wc(r){return r.id===Zt}function qc(r){return r.id===zt}function jc(r){return r.id===Xt}function $c(r){switch(r.id){case Qt:return 200;case Ye:return 201;case Ze:return 202;case Kt:return 302;case Jt:return 304;case Xt:return 401;case an:return 403;case Yt:return 404;case Zt:return 409;case zt:return 410;case cn:case un:return 412;case ln:return 429;case dn:return 504;default:return r.issue?.[0]?.code==="exception"?500:400}}function Gc(r,e){if(!tr(r)||e===void 0)throw new p(r)}var p=class extends Error{constructor(e,t){super(mn(e)),this.outcome=e,this.cause=t}};function Xe(r){return r instanceof p?r.outcome:Ee(r)?r:S(Re(r))}function Re(r){return r?typeof r=="string"?r:r instanceof Error?r.message:Ee(r)?mn(r):typeof r=="object"&&"code"in r&&typeof r.code=="string"?r.code:JSON.stringify(r):"Unknown error"}function mn(r){let e=r.issue?.map(eo)??[];return e.length>0?e.join("; "):"Unknown error"}function eo(r){let e;return r.details?.text?r.diagnostics?e=`${r.details.text} (${r.diagnostics})`:e=r.details.text:r.diagnostics?e=r.diagnostics:e="Unknown error",r.expression?.length&&(e+=` (${r.expression.join(", ")})`),e}function le(r,e,t,n,i){let o={severity:r,code:e,details:{text:t},expression:[n]};return i&&(o.diagnostics=JSON.stringify(i)),o}function T(r,e){return le("error","structure",e,r)}function yn(r,e){return le("error","invariant",`Constraint ${e.key} not met: ${e.description}`,r,{fhirpath:e.expression})}function gn(r,e,t,n){return le("error","processing",e,r,{...n,error:t})}var to={"http://hl7.org/fhirpath/System.String":"string"};function Qc(r){let e={};return r.min!==0&&(e.min=r.min),r.max!==1&&Number.isFinite(r.max)?e.max=r.max:r.max===Number.POSITIVE_INFINITY&&(e.max=Number.MAX_SAFE_INTEGER),e.type=r.type?.map(t=>({...t,extension:void 0,code:to[t.code]??t.code})),e}function ro(r,e){let t=e.max&&e.max===Number.MAX_SAFE_INTEGER?Number.POSITIVE_INFINITY:e.max;return{path:r,description:"",type:e.type??[],min:e.min??0,max:t??1,isArray:!!t&&t>1,constraints:[]}}function xn(r){let e=Object.create(null);for(let[t,n]of Object.entries(r))e[t]={name:t,type:t,path:t,elements:Object.fromEntries(Object.entries(n.elements).map(([i,o])=>[i,ro(i,o)])),constraints:[],innerTypes:[]};return e}var vn={Element:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]}}},BackboneElement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]}}},Address:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"code"}]},text:{type:[{code:"string"}]},line:{max:9007199254740991,type:[{code:"string"}]},city:{type:[{code:"string"}]},district:{type:[{code:"string"}]},state:{type:[{code:"string"}]},postalCode:{type:[{code:"string"}]},country:{type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Age:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Annotation:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"author[x]":{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Organization"]},{code:"string"}]},time:{type:[{code:"dateTime"}]},text:{min:1,type:[{code:"markdown"}]}}},Attachment:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},contentType:{type:[{code:"code"}]},language:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]},url:{type:[{code:"url"}]},size:{type:[{code:"unsignedInt"}]},hash:{type:[{code:"base64Binary"}]},title:{type:[{code:"string"}]},creation:{type:[{code:"dateTime"}]}}},CodeableConcept:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},coding:{max:9007199254740991,type:[{code:"Coding"}]},text:{type:[{code:"string"}]}}},Coding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"uri"}]},version:{type:[{code:"string"}]},code:{type:[{code:"code"}]},display:{type:[{code:"string"}]},userSelected:{type:[{code:"boolean"}]}}},ContactDetail:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"string"}]},telecom:{max:9007199254740991,type:[{code:"ContactPoint"}]}}},ContactPoint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"code"}]},value:{type:[{code:"string"}]},use:{type:[{code:"code"}]},rank:{type:[{code:"positiveInt"}]},period:{type:[{code:"Period"}]}}},Contributor:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{min:1,type:[{code:"string"}]},contact:{max:9007199254740991,type:[{code:"ContactDetail"}]}}},Count:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},DataRequirement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},"subject[x]":{type:[{code:"CodeableConcept"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Group"]}]},mustSupport:{max:9007199254740991,type:[{code:"string"}]},codeFilter:{max:9007199254740991,type:[{code:"DataRequirementCodeFilter"}]},dateFilter:{max:9007199254740991,type:[{code:"DataRequirementDateFilter"}]},limit:{type:[{code:"positiveInt"}]},sort:{max:9007199254740991,type:[{code:"DataRequirementSort"}]}}},DataRequirementCodeFilter:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]},code:{max:9007199254740991,type:[{code:"Coding"}]}}},DataRequirementDateFilter:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},"value[x]":{type:[{code:"dateTime"},{code:"Period"},{code:"Duration"}]}}},DataRequirementSort:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},direction:{min:1,type:[{code:"code"}]}}},Distance:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Dosage:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},sequence:{type:[{code:"integer"}]},text:{type:[{code:"string"}]},additionalInstruction:{max:9007199254740991,type:[{code:"CodeableConcept"}]},patientInstruction:{type:[{code:"string"}]},timing:{type:[{code:"Timing"}]},"asNeeded[x]":{type:[{code:"boolean"},{code:"CodeableConcept"}]},site:{type:[{code:"CodeableConcept"}]},route:{type:[{code:"CodeableConcept"}]},method:{type:[{code:"CodeableConcept"}]},doseAndRate:{max:9007199254740991,type:[{code:"DosageDoseAndRate"}]},maxDosePerPeriod:{type:[{code:"Ratio"}]},maxDosePerAdministration:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},maxDosePerLifetime:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},DosageDoseAndRate:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{type:[{code:"CodeableConcept"}]},"dose[x]":{type:[{code:"Range"},{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},"rate[x]":{type:[{code:"Ratio"},{code:"Range"},{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},Duration:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},ElementDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},representation:{max:9007199254740991,type:[{code:"code"}]},sliceName:{type:[{code:"string"}]},sliceIsConstraining:{type:[{code:"boolean"}]},label:{type:[{code:"string"}]},code:{max:9007199254740991,type:[{code:"Coding"}]},slicing:{type:[{code:"ElementDefinitionSlicing"}]},short:{type:[{code:"string"}]},definition:{type:[{code:"markdown"}]},comment:{type:[{code:"markdown"}]},requirements:{type:[{code:"markdown"}]},alias:{max:9007199254740991,type:[{code:"string"}]},min:{type:[{code:"unsignedInt"}]},max:{type:[{code:"string"}]},base:{type:[{code:"ElementDefinitionBase"}]},contentReference:{type:[{code:"uri"}]},type:{max:9007199254740991,type:[{code:"ElementDefinitionType"}]},"defaultValue[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},meaningWhenMissing:{type:[{code:"markdown"}]},orderMeaning:{type:[{code:"string"}]},"fixed[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},"pattern[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},example:{max:9007199254740991,type:[{code:"ElementDefinitionExample"}]},"minValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},"maxValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},maxLength:{type:[{code:"integer"}]},condition:{max:9007199254740991,type:[{code:"id"}]},constraint:{max:9007199254740991,type:[{code:"ElementDefinitionConstraint"}]},mustSupport:{type:[{code:"boolean"}]},isModifier:{type:[{code:"boolean"}]},isModifierReason:{type:[{code:"string"}]},isSummary:{type:[{code:"boolean"}]},binding:{type:[{code:"ElementDefinitionBinding"}]},mapping:{max:9007199254740991,type:[{code:"ElementDefinitionMapping"}]}}},ElementDefinitionSlicingDiscriminator:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},path:{min:1,type:[{code:"string"}]}}},ElementDefinitionSlicing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},discriminator:{max:9007199254740991,type:[{code:"ElementDefinitionSlicingDiscriminator"}]},description:{type:[{code:"string"}]},ordered:{type:[{code:"boolean"}]},rules:{min:1,type:[{code:"code"}]}}},ElementDefinitionBase:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},min:{min:1,type:[{code:"unsignedInt"}]},max:{min:1,type:[{code:"string"}]}}},ElementDefinitionType:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"uri"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},targetProfile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},aggregation:{max:9007199254740991,type:[{code:"code"}]},versioning:{type:[{code:"code"}]}}},ElementDefinitionExample:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},label:{min:1,type:[{code:"string"}]},"value[x]":{min:1,type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]}}},ElementDefinitionConstraint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},key:{min:1,type:[{code:"id"}]},requirements:{type:[{code:"string"}]},severity:{min:1,type:[{code:"code"}]},human:{min:1,type:[{code:"string"}]},expression:{type:[{code:"string"}]},xpath:{type:[{code:"string"}]},source:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]}}},ElementDefinitionBinding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},strength:{min:1,type:[{code:"code"}]},description:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]}}},ElementDefinitionMapping:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},identity:{min:1,type:[{code:"id"}]},language:{type:[{code:"code"}]},map:{min:1,type:[{code:"string"}]},comment:{type:[{code:"string"}]}}},Expression:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},description:{type:[{code:"string"}]},name:{type:[{code:"id"}]},language:{min:1,type:[{code:"code"}]},expression:{type:[{code:"string"}]},reference:{type:[{code:"uri"}]}}},Extension:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},url:{min:1,type:[{code:"uri"}]},"value[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]}}},HumanName:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},text:{type:[{code:"string"}]},family:{type:[{code:"string"}]},given:{max:9007199254740991,type:[{code:"string"}]},prefix:{max:9007199254740991,type:[{code:"string"}]},suffix:{max:9007199254740991,type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Identifier:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"CodeableConcept"}]},system:{type:[{code:"uri"}]},value:{type:[{code:"string"}]},period:{type:[{code:"Period"}]},assigner:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MarketingStatus:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},country:{min:1,type:[{code:"CodeableConcept"}]},jurisdiction:{type:[{code:"CodeableConcept"}]},status:{min:1,type:[{code:"CodeableConcept"}]},dateRange:{min:1,type:[{code:"Period"}]},restoreDate:{type:[{code:"dateTime"}]}}},Meta:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},versionId:{type:[{code:"id"}]},lastUpdated:{type:[{code:"instant"}]},source:{type:[{code:"uri"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},security:{max:9007199254740991,type:[{code:"Coding"}]},tag:{max:9007199254740991,type:[{code:"Coding"}]},project:{type:[{code:"uri"}]},author:{type:[{code:"Reference"}]},onBehalfOf:{type:[{code:"Reference"}]},account:{type:[{code:"Reference"}]},accounts:{max:9007199254740991,type:[{code:"Reference"}]},compartment:{max:9007199254740991,type:[{code:"Reference"}]}}},Money:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},currency:{type:[{code:"code"}]}}},Narrative:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},status:{min:1,type:[{code:"code"}]},div:{min:1,type:[{code:"xhtml"}]}}},ParameterDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"code"}]},use:{min:1,type:[{code:"code"}]},min:{type:[{code:"integer"}]},max:{type:[{code:"string"}]},documentation:{type:[{code:"string"}]},type:{min:1,type:[{code:"code"}]},profile:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]}}},Period:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},start:{type:[{code:"dateTime"}]},end:{type:[{code:"dateTime"}]}}},Population:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"age[x]":{type:[{code:"Range"},{code:"CodeableConcept"}]},gender:{type:[{code:"CodeableConcept"}]},race:{type:[{code:"CodeableConcept"}]},physiologicalCondition:{type:[{code:"CodeableConcept"}]}}},ProdCharacteristic:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},height:{type:[{code:"Quantity"}]},width:{type:[{code:"Quantity"}]},depth:{type:[{code:"Quantity"}]},weight:{type:[{code:"Quantity"}]},nominalVolume:{type:[{code:"Quantity"}]},externalDiameter:{type:[{code:"Quantity"}]},shape:{type:[{code:"string"}]},color:{max:9007199254740991,type:[{code:"string"}]},imprint:{max:9007199254740991,type:[{code:"string"}]},image:{max:9007199254740991,type:[{code:"Attachment"}]},scoring:{type:[{code:"CodeableConcept"}]}}},ProductShelfLife:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},identifier:{type:[{code:"Identifier"}]},type:{min:1,type:[{code:"CodeableConcept"}]},period:{min:1,type:[{code:"Quantity"}]},specialPrecautionsForStorage:{max:9007199254740991,type:[{code:"CodeableConcept"}]}}},Quantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Range:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},low:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},high:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},Ratio:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},numerator:{type:[{code:"Quantity"}]},denominator:{type:[{code:"Quantity"}]}}},Reference:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},reference:{type:[{code:"string"}]},type:{type:[{code:"uri"}]},identifier:{type:[{code:"Identifier"}]},display:{type:[{code:"string"}]}}},RelatedArtifact:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},label:{type:[{code:"string"}]},display:{type:[{code:"string"}]},citation:{type:[{code:"markdown"}]},url:{type:[{code:"url"}]},document:{type:[{code:"Attachment"}]},resource:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/Resource"]}]}}},SampledData:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},origin:{min:1,type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},period:{min:1,type:[{code:"decimal"}]},factor:{type:[{code:"decimal"}]},lowerLimit:{type:[{code:"decimal"}]},upperLimit:{type:[{code:"decimal"}]},dimensions:{min:1,type:[{code:"positiveInt"}]},data:{type:[{code:"string"}]}}},Signature:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,max:9007199254740991,type:[{code:"Coding"}]},when:{min:1,type:[{code:"instant"}]},who:{min:1,type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},onBehalfOf:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},targetFormat:{type:[{code:"code"}]},sigFormat:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]}}},SubstanceAmount:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"amount[x]":{type:[{code:"Quantity"},{code:"Range"},{code:"string"}]},amountType:{type:[{code:"CodeableConcept"}]},amountText:{type:[{code:"string"}]},referenceRange:{type:[{code:"SubstanceAmountReferenceRange"}]}}},SubstanceAmountReferenceRange:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},lowLimit:{type:[{code:"Quantity"}]},highLimit:{type:[{code:"Quantity"}]}}},Timing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},event:{max:9007199254740991,type:[{code:"dateTime"}]},repeat:{type:[{code:"TimingRepeat"}]},code:{type:[{code:"CodeableConcept"}]}}},TimingRepeat:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"bounds[x]":{type:[{code:"Duration"},{code:"Range"},{code:"Period"}]},count:{type:[{code:"positiveInt"}]},countMax:{type:[{code:"positiveInt"}]},duration:{type:[{code:"decimal"}]},durationMax:{type:[{code:"decimal"}]},durationUnit:{type:[{code:"code"}]},frequency:{type:[{code:"positiveInt"}]},frequencyMax:{type:[{code:"positiveInt"}]},period:{type:[{code:"decimal"}]},periodMax:{type:[{code:"decimal"}]},periodUnit:{type:[{code:"code"}]},dayOfWeek:{max:9007199254740991,type:[{code:"code"}]},timeOfDay:{max:9007199254740991,type:[{code:"time"}]},when:{max:9007199254740991,type:[{code:"code"}]},offset:{type:[{code:"unsignedInt"}]}}},TriggerDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{type:[{code:"string"}]},"timing[x]":{type:[{code:"Timing"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Schedule"]},{code:"date"},{code:"dateTime"}]},data:{max:9007199254740991,type:[{code:"DataRequirement"}]},condition:{type:[{code:"Expression"}]}}},UsageContext:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"Coding"}]},"value[x]":{min:1,type:[{code:"CodeableConcept"},{code:"Quantity"},{code:"Range"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/PlanDefinition","http://hl7.org/fhir/StructureDefinition/ResearchStudy","http://hl7.org/fhir/StructureDefinition/InsurancePlan","http://hl7.org/fhir/StructureDefinition/HealthcareService","http://hl7.org/fhir/StructureDefinition/Group","http://hl7.org/fhir/StructureDefinition/Location","http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MoneyQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},SimpleQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{max:0,type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},IdentityProvider:{elements:{authorizeUrl:{min:1,type:[{code:"string"}]},tokenUrl:{min:1,type:[{code:"string"}]},tokenAuthMethod:{type:[{code:"code"}]},userInfoUrl:{min:1,type:[{code:"string"}]},clientId:{min:1,type:[{code:"string"}]},clientSecret:{min:1,type:[{code:"string"}]},usePkce:{type:[{code:"boolean"}]},useSubject:{type:[{code:"boolean"}]}}}};function or(r){return new nr(r).parse()}var de=xn(vn),sr=Object.create(null),Tn=Object.create(null),io={"http://hl7.org/fhir/StructureDefinition/MoneyQuantity":"MoneyQuantity","http://hl7.org/fhir/StructureDefinition/SimpleQuantity":"SimpleQuantity","http://hl7.org/fhir/uv/sql-on-fhir/StructureDefinition/ViewDefinition":"ViewDefinition"};function Rn(r){let e;return e=Tn[r],e||(e=Tn[r]=Object.create(null)),e}function ar(r){let t=(Array.isArray(r)?r:r.entry?.map(n=>n.resource)??[]).filter(n=>n?.resourceType==="StructureDefinition");In(t);for(let n of t)cr(n)}function cr(r){if(!r?.name)throw new Error("Failed loading StructureDefinition from bundle");if(r.resourceType!=="StructureDefinition")return;let e=or(r),t=io[r.url],n,i;t?(n=de,i=t):r.url===`http://hl7.org/fhir/StructureDefinition/${r.type}`||r.url===`https://medplum.com/fhir/StructureDefinition/${r.type}`||r.type?.startsWith("http://")||r.type?.startsWith("https://")?(n=de,i=r.type):(n=Rn(r.url),i=r.type),n[i]=e;for(let o of e.innerTypes)o.parentType=e,n[o.name]=o;sr[r.url]=e}function Cn(){return de}function Pn(r){return!!de[r]}function _e(r,e){if(e){let t=Rn(e)[r];if(t)return t}return de[r]}function te(r,e){let t=_e(r,e);if(!t)throw new p(S("Unknown data type: "+r));return t}function wn(r){let e=de[r];return e&&ur(e)}function An(r){return!!sr[r]}function On(r){return sr[r]}var nr=class{constructor(e){if(!e.snapshot?.element||e.snapshot.element.length===0)throw new Error(`No snapshot defined for StructureDefinition '${e.name}'`);this.root=e.snapshot.element[0],this.elements=e.snapshot.element.slice(1),this.elementIndex=Object.create(null),this.index=0,this.resourceSchema={name:e.name,path:this.root.path,title:e.title,type:e.type,url:e.url,version:e.version,kind:e.kind,description:co(e),elements:{},constraints:this.parseElementDefinition(this.root).constraints,innerTypes:[],summaryProperties:new Set,mandatoryProperties:new Set},this.innerTypes=[]}parse(){let e=this.next();for(;e;){if(e.sliceName)this.parseSliceStart(e);else if(e.id?.includes(":")){if(this.slicingContext?.current){let t=rr(e,this.slicingContext.path);this.slicingContext.current.elements[t]=this.parseElementDefinition(e)}}else{let t=this.parseElementDefinition(e);this.checkFieldEnter(e,t);let n=this.backboneContext;for(;n;){if(e.path?.startsWith(n.path+".")){n.type.elements[rr(e,n.path)]=t;break}n=n.parent}if(!n){let i=rr(e,this.root.path);e.isSummary&&this.resourceSchema.summaryProperties?.add(i.replace("[x]","")),t.min>0&&this.resourceSchema.mandatoryProperties?.add(i.replace("[x]","")),this.resourceSchema.elements[i]=t}this.checkFieldExit(e)}e=this.next()}return this.checkFieldExit(),this.innerTypes.length>0&&(this.resourceSchema.innerTypes=this.innerTypes),this.resourceSchema}checkFieldEnter(e,t){this.isInnerType(e)&&this.enterInnerType(e),this.slicingContext&&!Ce(this.slicingContext.path,e?.path)&&(this.slicingContext=void 0),e.slicing&&!this.slicingContext&&this.enterSlice(e,t)}enterInnerType(e){for(;this.backboneContext&&!Ce(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;let t=ir(e);this.backboneContext={type:{name:t,type:t,path:e.path,title:e.label,description:e.definition,elements:{},constraints:this.parseElementDefinition(e).constraints,innerTypes:[]},path:e.path,parent:Ce(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,t){ao(e)&&!this.peek()?.sliceName||(t.slicing={discriminator:(e.slicing?.discriminator??[]).map(n=>{if(n.type!=="value"&&n.type!=="pattern"&&n.type!=="type")throw new Error(`Unsupported slicing discriminator type: ${n.type}`);return{path:n.path,type:n.type}}),slices:[],ordered:e.slicing?.ordered??!1,rule:e.slicing?.rules},this.slicingContext={field:t.slicing,path:e.path??""})}checkFieldExit(e=void 0){if(this.backboneContext&&!Ce(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!Ce(this.backboneContext.path,e?.path));else this.innerTypes.push(this.backboneContext.type),this.backboneContext=void 0}next(){let e=this.peek();if(e)return this.index++,e}peek(){let e=this.elements[this.index];if(e){if(this.elementIndex[e.path??""]=e,e.contentReference){let t=e.contentReference.slice(e.contentReference.indexOf("#")+1),n=this.elementIndex[t];return n?{...n,id:e.id,path:e.path,min:e.min??n.min,max:e.max??n.max,base:{path:n.base?.path??t,min:e.base?.min??n.base?.min??n.min,max:e.base?.max??n.base?.max??n.max},contentReference:e.contentReference,definition:e.definition}:void 0}return e}}isInnerType(e){let t=this.peek();return!!(Ce(e?.path,t?.path)&&e.type?.some(n=>["BackboneElement","Element"].includes(n.code)))}parseSliceStart(e){if(!this.slicingContext)throw new Error(`Invalid slice start before discriminator: ${e.sliceName} (${e.id})`);this.slicingContext.current={...this.parseElementDefinition(e),name:e.sliceName??"",definition:e.definition,elements:{}},this.slicingContext.field.slices.push(this.slicingContext.current)}parseElementDefinitionType(e){return(e.type??[]).map(t=>{let n;return(t.code==="BackboneElement"||t.code==="Element")&&(n=ir(e)),n||(n=re(t,"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type")?.valueUrl),n||(n=t.code??""),{code:n,targetProfile:t.targetProfile,profile:t.profile}})}parseElementDefinition(e){let t=bn(e.max),n=e.base?.max?bn(e.base.max):t,i={type:"ElementDefinition",value:e};return{description:e.definition||"",path:e.path||e.base?.path||"",min:e.min??0,max:t,isArray:n>1,constraints:(e.constraint??[]).map(o=>({key:o.key??"",severity:o.severity??"error",expression:o.expression??"",description:o.human??""})),type:this.parseElementDefinitionType(e),fixed:En(P(i,"fixed[x]")),pattern:En(P(i,"pattern[x]")),binding:e.binding}}};function iu(r,e){if(!r)return;let t=[];for(let n of e){t.push("_"+n);let i=de[r.resourceType].elements[n+"[x]"];i&&t.push(...i.type.map(o=>n+k(o.code)))}for(let n of Object.getOwnPropertyNames(r))!e.includes(n)&&!t.includes(n)&&!oo.includes(n)&&Object.defineProperty(r,n,{enumerable:!1,writable:!1,value:void 0});return r.meta={...r.meta,tag:r.meta?.tag?r.meta.tag.concat(Sn):[Sn]},r}var Sn={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},oo=["resourceType","id","meta"];function bn(r){return r==="*"?Number.POSITIVE_INFINITY:Number.parseInt(r,10)}function rr(r,e=""){return so(r.path,e)}function so(r,e){return r?e&&r.startsWith(e)?r.substring(e.length+1):r:""}function Ce(r,e){return!r||!e?!1:e.startsWith(r+".")||e===r}function En(r){return Array.isArray(r)&&r.length>0?r[0]:b(r)?void 0:r}function ao(r){let e=r.slicing?.discriminator;return!!(r.type?.some(t=>t.code==="Extension")&&e?.length===1&&e[0].type==="value"&&e[0].path==="url")}function co(r){let e=r.description;return e?.startsWith(`Base StructureDefinition for ${r.name} Type: `)&&(e=e.substring(`Base StructureDefinition for ${r.name} Type: `.length)),e}function pr(r,e,t){new lr(r,e,t).crawl()}function hu(r,e,t){return new dr(r,e,t).crawl()}var lr=class{constructor(e,t,n){this.root=e,this.visitor=t,this.schema=n?.schema??te(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}crawl(){this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}crawlObject(e,t,n){let i=O(e.value);if(i&&this.visitor.onEnterResource&&this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties)for(let o of Object.keys(e.value))this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&this.visitor.onExitResource(n,e,t)}crawlProperty(e,t,n,i){let o=Pe(e,t,{withPath:!0});this.visitor.visitProperty&&this.visitor.visitProperty(e,t,i,o,n);for(let s of o)if(s)for(let a of Ne(s))this.crawlPropertyValue(a,i)}crawlPropertyValue(e,t){if(!et(e.type)){let n=te(e.type);this.crawlObject(e,n,t)}}},dr=class{constructor(e,t,n){this.root=e,this.visitor=t,this.schema=n?.schema??te(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}async crawl(){return this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}async crawlObject(e,t,n){let i=O(e.value);if(i&&this.visitor.onEnterResource&&await this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&await this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties&&e.value)for(let o of Object.keys(e.value))await this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))await this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&await this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&await this.visitor.onExitResource(n,e,t)}async crawlProperty(e,t,n,i){let o=Pe(e,t,{withPath:!0});if(this.visitor.visitPropertyAsync)for(let s of o)await this.visitor.visitPropertyAsync(e,t,i,s,n);for(let s of o)if(s)for(let a of Ne(s))await this.crawlPropertyValue(a,i)}async crawlPropertyValue(e,t){if(!et(e.type)){let n=te(e.type);await this.crawlObject(e,n,t)}}};function Pe(r,e,t){if(r===void 0)return[void 0];if(e==="$this")return[r];let n=t?.withPath?uo:P,[i,...o]=e.split("."),s=[n(r,i,t)];for(let a of o){let c=[];for(let u of s)if(Array.isArray(u))for(let l of u)c.push(n(l,a,t));else(t?.withPath&&u&&u.value!==void 0||!t?.withPath&&u!==void 0)&&c.push(n(u,a,t));s=c}return s}function uo(r,e,t){let n=r.path;return lo(P(r,e,t),n,e)}function lo(r,e,t){let n=e?e+".":"";return r===void 0?{type:"undefined",value:void 0,path:`${n}${t}`}:Array.isArray(r)?r.map((i,o)=>({...i,path:`${n}${t}[${o}]`})):{...r,path:`${n}${t}`}}var fr={base64Binary:"string",boolean:"boolean",canonical:"string",code:"string",date:"string",dateTime:"string",decimal:"number",id:"string",instant:"string",integer:"number",integer64:"string",markdown:"string",oid:"string",positiveInt:"number",string:"string",time:"string",unsignedInt:"number",uri:"string",url:"string",uuid:"string",xhtml:"string","http://hl7.org/fhirpath/System.String":"string"};function et(r){return r==="undefined"||r in fr}var rt={base64Binary:/^([A-Za-z\d+/]{4})*([A-Za-z\d+/]{2}==|[A-Za-z\d+/]{3}=)?$/,canonical:/^\S*$/,code:/^[^\s]+( [^\s]+)*$/,date:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1]))?)?$/,dateTime:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1])(T([01]\d|2[0-3])(:[0-5]\d:([0-5]\d|60)(\.\d{1,9})?)?)?)?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00)?)?)?$/,id:/^[A-Za-z0-9\-.]{1,64}$/,instant:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])T([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00))$/,markdown:/^[\r\n\t\u0020-\uFFFF]+$/,oid:/^urn:oid:[0-2](\.(0|[1-9]\d*))+$/,string:/^[\r\n\t\u0020-\uFFFF]+$/,time:/^([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?$/,uri:/^\S*$/,url:/^\S*$/,uuid:/^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,xhtml:/.*/},po={"ele-1":!0,"dom-3":!0,"org-1":!0,"sdf-19":!0};function Vu(r,e){if(!r.resourceType)throw new p(m("Missing resource type"));return new tt(x(r),e).validate()}function Mu(r,e){return new tt(r,e).validate()}var tt=class{constructor(e,t){this.issues=[],this.root=e,this.currentResource=[],O(e.value)&&this.currentResource.push(e.value),t?.profile?this.schema=or(t.profile):this.schema=te(e.type)}validate(){this.constraintsCheck({...this.root,path:this.schema.path},this.schema),hr(this.root.value,this.schema.path,this.issues),pr(this.root,this,{schema:this.schema,initialPath:this.schema.path});let e=this.issues,t=!1;for(let n of e)n.severity==="error"&&(t=!0);if(t)throw new p({resourceType:"OperationOutcome",issue:e});return e}onExitObject(e,t,n){this.checkAdditionalProperties(t,n.elements,t.path)}onEnterResource(e,t){this.currentResource.push(t.value)}onExitResource(){this.currentResource.pop()}visitProperty(e,t,n,i,o){let s=o.elements[t];if(!s)throw new Error(`Missing element validation schema for ${t}`);for(let a of i){if(!this.checkPresence(a,s,n))return;let c;if(s.isArray){if(!Array.isArray(a)){this.issues.push(T(n,"Expected array of values for property"));return}c=a}else{if(Array.isArray(a)){this.issues.push(T(n,"Expected single value for property"));return}c=[a]}(c.length<s.min||c.length>s.max)&&this.issues.push(T(s.path,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${c.length}`)),mo(a,s)||this.issues.push(T(n,"Value did not match expected pattern"));let u=s.slicing?Object.fromEntries(s.slicing.slices.map(l=>[l.name,0])):void 0;for(let l of c){this.constraintsCheck(l,s),this.referenceTypeCheck(l,s),this.checkPropertyValue(l);let h=yo(l,s.slicing);h&&u&&(u[h]+=1)}this.validateSlices(s.slicing?.slices,u,n)}}checkPresence(e,t,n){return!Array.isArray(e)&&e.value===void 0?(t.min>0&&this.issues.push(T(e.path,"Missing required property")),!1):b(e)?(this.issues.push(T(n,"Invalid empty value")),!1):!0}checkPropertyValue(e){et(e.type)&&this.validatePrimitiveType(e)}validateSlices(e,t,n){if(!(!e||!t))for(let i of e){let o=t[i.name];(o<i.min||o>i.max)&&this.issues.push(T(n,`Incorrect number of values provided for slice '${i.name}': expected ${i.min}..${Number.isFinite(i.max)?i.max:"*"}, but found ${o}`))}}checkAdditionalProperties(e,t,n){let i=e.value;if(!i)return;let o={};for(let s of Object.keys(i)){if(s==="resourceType")continue;let a=ho(e,s,t);if(a){let c,u;a.startsWith("_")?(c=a.slice(1),u=s.slice(1)):(c="_"+a,u="_"+s),c in o&&o[c]!==u&&this.issues.push(le("warning","structure",`Type of primitive extension does not match the type of property "${a.startsWith("_")?a.slice(1):a}"`,a)),o[a]&&this.issues.push(le("warning","structure",`Conflicting choice of type properties: "${s}", "${o[a]}"`,s)),o[a]=s;continue}!(s in t)&&!(s.startsWith("_")&&s.slice(1)in t)&&this.issues.push(T(`${n}.${s}`,`Invalid additional property "${s}"`))}}constraintsCheck(e,t){let n=t.constraints;if(n){for(let i of n)if(i.severity==="error"&&!(i.key in po)&&!this.isExpressionTrue(i,e)){this.issues.push(yn(e.path,i));return}}}referenceTypeCheck(e,t){if(e.type!=="Reference")return;let n=e.value;if(!J(n))return;let i=n.reference.split("/")[0];if(!i)return;let o=t.type.find(h=>h.code==="Reference")?.targetProfile;if(!o)return;let s=sn+"/fhir/StructureDefinition/",a=s+"Resource",c=s+i,u="https://medplum.com/fhir/StructureDefinition/",l=u+i;for(let h of o)if(h===a||h===c||h===l||!h.startsWith(s)&&!h.startsWith(u))return;this.issues.push(le("warning","structure",`Invalid reference: got "${i}", expected "${o.join('", "')}"`,e.path))}isExpressionTrue(e,t){let n={"%context":t,"%ucum":x(on)};this.currentResource.length>0&&(n["%resource"]=x(this.currentResource[this.currentResource.length-1])),O(this.root.value)&&(n["%rootResource"]=this.root);try{let i=w(e.expression,[t],n);return i.length===1&&i[0].value===!0}catch(i){return this.issues.push(gn(t.path,"Error evaluating invariant expression",i,{fhirpath:e.expression})),!1}}validatePrimitiveType(e){let[t,n]=go(e),i=e.path;if(t){let{type:o,value:s}=t;if(!(o in fr)){this.issues.push(T(i,`Invalid JSON type: ${o} is not a valid FHIR type`));return}let a=fr[o];if(typeof s!==a){s!==null&&this.issues.push(T(i,`Invalid JSON type: expected ${a}, but got ${typeof s}`));return}a==="string"?this.validateString(s,o,i):a==="number"&&this.validateNumber(s,o,i)}n&&pr(n,this,{schema:te("Element"),initialPath:i})}validateString(e,t,n){if(!e.trim()){this.issues.push(T(n,"String must contain non-whitespace content"));return}let i=rt[t];i&&!i.exec(e)&&this.issues.push(T(n,"Invalid "+t+" format"))}validateNumber(e,t,n){Number.isNaN(e)||!Number.isFinite(e)?this.issues.push(T(n,"Invalid numeric value")):fo(t)&&!Number.isInteger(e)?this.issues.push(T(n,"Expected number to be an integer")):t===d.positiveInt&&e<=0?this.issues.push(T(n,"Expected number to be positive")):t===d.unsignedInt&&e<0&&this.issues.push(T(n,"Expected number to be non-negative"))}};function fo(r){return r===d.integer||r===d.positiveInt||r===d.unsignedInt}function ho(r,e,t){let n="";e.startsWith("_")&&(e=e.slice(1),n="_");let i=e.split(/(?=[A-Z])/g),o="";for(let s of i){o+=s;let a=o+"[x]";if(t[a])return P(r,o)?n+a:void 0}}function hr(r,e,t){for(let[n,i]of Object.entries(r)){let o=`${e}.${n}`,s=n.startsWith("_")?n.slice(1):`_${n}`;if(i===null)t.push(T(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?t.push(T(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!r[s]?.[a]?t.push(T(`${o}[${a}]`,"Invalid null value")):i[a]&&hr(i[a],`${o}[${a}]`,t);else typeof i=="object"&&hr(i,o,t)}}function mo(r,e){let t=Array.isArray(r)?r.map(n=>({type:n.type,value:n.value})):{type:r.type,value:r.value};return!(e.pattern&&!Fe(t,e.pattern)||e.fixed&&!ne(t,e.fixed))}function mr(r,e,t,n){if(Array.isArray(r))return!1;let i;e.path==="$this"?i=t:i=(n??t.elements)[e.path];let o=t.type;switch(e.type){case"value":case"pattern":if(!r||!i)return!1;if(i.pattern)return Fe(r,i.pattern);if(i.fixed)return ne(r,i.fixed);if(i.binding?.strength==="required"&&i.binding.valueSet)return!0;break;case"type":return!r||!o?.length?!1:o.some(s=>s.code===r.type)}return!1}function yo(r,e){if(e){for(let t of e.slices)if(e.discriminator.every(n=>Ne(Pe(r,n.path))?.some(i=>mr(i,n,t))))return t.name}}function go(r){if(typeof r.value!="object"||!r.value)return[r,void 0];let e=r.value.valueOf();if(e===r.value)return[void 0,{type:"Element",value:r.value}];let t=new Set(Object.keys(e)),n=Object.entries(r.value).filter(([o,s])=>!t.has(o)),i=n.length>0?Object.fromEntries(n):void 0;return[{type:r.type,value:e},{type:"Element",value:i}]}function f(r){return[{type:d.boolean,value:r}]}function x(r){return r==null?{type:"undefined",value:void 0}:Number.isSafeInteger(r)?{type:d.integer,value:r}:typeof r=="number"?{type:d.decimal,value:r}:typeof r=="boolean"?{type:d.boolean,value:r}:typeof r=="string"?{type:d.string,value:r}:D(r)?{type:d.Quantity,value:r}:O(r)?{type:r.resourceType,value:r}:Tr(r)?{type:d.CodeableConcept,value:r}:vr(r)?{type:d.Coding,value:r}:{type:d.BackboneElement,value:r}}function N(r){return r.length===0?!1:!!r[0].value}function $(r,e){if(r.length!==0){if(r.length===1&&(!e||r[0].type===e))return r[0];throw new Error(`Expected singleton of type ${e}, but found ${JSON.stringify(r)}`)}}function P(r,e,t){if(!r.value)return;let n=ot(r.type,e,t?.profileUrl);return n?xo(r,e,n):vo(r,e)}function xo(r,e,t){let n=r.value,i=t.type;if(!i||i.length===0)return;let o,s="undefined",a,c=t.path.lastIndexOf("."),u=t.path.substring(c+1);for(let l of i){let h=u.replace("[x]",k(l.code));if(o=n[h],a=n["_"+h],o!==void 0||a!==void 0){s=l.code;break}}if(a)if(Array.isArray(o)){o=o.slice();for(let l=0;l<Math.max(o.length,a.length);l++)o[l]=_n(o[l],a[l])}else o=_n(o,a);if(!b(o))return(s==="Element"||s==="BackboneElement")&&(s=t.type[0].code),Array.isArray(o)?o.map(l=>kn(l,s)):kn(o,s)}function kn(r,e){return e==="Resource"&&O(r)&&(e=r.resourceType),{type:e,value:r}}function vo(r,e){let t=r.value;if(!t||typeof t!="object")return;let n;if(e in t){let i=t[e];Array.isArray(i)?n=i.map(x):n=x(i)}else{let i=e.endsWith("[x]")?e.substring(0,e.length-3):e;for(let o of Object.values(d)){let s=i+k(o);if(s in t){let a=t[s];Array.isArray(a)?n=a.map(c=>({type:o,value:c})):n={type:o,value:a};break}}}if(Array.isArray(n)){if(n.length===0||b(n[0]))return}else if(b(n))return;return n}function nt(r){let e=[];for(let t of r){let n=!1;for(let i of e)if(N(yr(t,i))){n=!0;break}n||e.push(t)}return e}function Nn(r){return f(!N(r))}function Fn(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?f(!1):f(r.every((t,n)=>N(yr(t,e[n]))))}function Ln(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?f(!0):f(r.some((t,n)=>!N(yr(t,e[n]))))}function yr(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?f(Math.abs(t-n)<1e-8):D(t)&&D(n)?f(Wn(t,n)):f(typeof t=="object"&&typeof n=="object"?xr(r,e):t===n)}function gr(r,e){return r.length===0&&e.length===0?f(!0):r.length!==e.length?f(!1):(r.sort(Dn),e.sort(Dn),f(r.every((t,n)=>N(To(t,e[n])))))}function To(r,e){let{type:t,value:n}=r,{type:i,value:o}=e,s=n?.valueOf(),a=o?.valueOf();return typeof s=="number"&&typeof a=="number"?f(Math.abs(s-a)<.01):D(s)&&D(a)?f(Wn(s,a)):f(t==="Coding"&&i==="Coding"?typeof s!="object"||typeof a!="object"?!1:s.code===a.code&&s.system===a.system:typeof s=="object"&&typeof a=="object"?xr({...s,id:void 0},{...a,id:void 0}):typeof s=="string"&&typeof a=="string"?s.toLowerCase()===a.toLowerCase():s===a)}function Dn(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?t-n:typeof t=="string"&&typeof n=="string"?t.localeCompare(n):0}function it(r,e){let{value:t}=r;if(t==null)return!1;switch(e){case"Boolean":return typeof t=="boolean";case"Decimal":case"Integer":return typeof t=="number";case"Date":return Un(t);case"DateTime":return we(t);case"Time":return typeof t=="string"&&!!/^T\d/.exec(t);case"Period":return Bn(t);case"Quantity":return D(t);default:return r.type===e||typeof t=="object"&&t?.resourceType===e}}function Un(r){return typeof r=="string"&&!!rt.date.exec(r)}function we(r){return typeof r=="string"&&!!rt.dateTime.exec(r)}function Bn(r){return!!(r&&typeof r=="object"&&("start"in r&&we(r.start)||"end"in r&&we(r.end)))}function Bu(r){if(r){if(Un(r))return{start:Vn(r,"0000-00-00T00:00:00.000Z"),end:Vn(r,"xxxx-12-31T23:59:59.999Z")};if(we(r))return{start:r,end:r};if(Bn(r))return r}}function Vn(r,e){return r+e.substring(r.length)}function D(r){return!!(r&&typeof r=="object"&&"value"in r&&typeof r.value=="number")}function Wn(r,e){return Math.abs(r.value-e.value)<.01&&(r.unit===e.unit||r.code===e.code||r.unit===e.code||r.code===e.unit)}function xr(r,e){let t=Object.keys(r),n=Object.keys(e);if(t.length!==n.length)return!1;for(let i of t){let o=r[i],s=e[i];if(Mn(o)&&Mn(s)){if(!xr(o,s))return!1}else if(o!==s)return!1}return!0}function Mn(r){return r!==null&&typeof r=="object"}function _n(r,e){if(e){if(typeof e!="object")throw new Error("Primitive extension must be an object");return So(r??{},e)}return r}function So(r,e){return delete e.__proto__,delete e.constructor,Object.assign(r,e)}function br(r,e){return O(r,e)&&"id"in r&&typeof r.id=="string"}function Ae(r){let e=K(r)??"undefined/undefined",t=Eo(r);return t===e?{reference:e}:{reference:e,display:t}}function K(r){if(J(r))return r.reference;if(br(r))return`${r.resourceType}/${r.id}`}function pe(r){if(r)return J(r)?r.reference.split("/")[1]:r.id}function Hu(r){if(r?.reference===void 0)throw new p(m("Reference missing reference property."));let[e,t]=r.reference.split("/");if(e===""||t===""||t===void 0)throw new p(m("Unable to parse reference string."));return[e,t]}function bo(r){return r.resourceType==="Patient"||r.resourceType==="Practitioner"||r.resourceType==="RelatedPerson"}function Eo(r){if(bo(r)){let e=Ro(r);if(e)return e}if(r.resourceType==="Device"){let e=Co(r);if(e)return e}if(r.resourceType==="MedicationRequest"&&r.medicationCodeableConcept)return Le(r.medicationCodeableConcept);if(r.resourceType==="Subscription"&&r.criteria)return r.criteria;if(r.resourceType==="User"&&r.email)return r.email;if("name"in r&&r.name&&typeof r.name=="string")return r.name;if("code"in r&&r.code){let e=r.code;if(Array.isArray(e)&&(e=e[0]),Tr(e))return Le(e);if(Mo(e))return e.text}return K(r)??""}function Ro(r){let e=r.name;if(e&&e.length>0)return Ue(e[0])}function Co(r){let e=r.deviceName;if(e&&e.length>0)return e[0].name}function Qu(r){if(!("photo"in r))return;let e=r.photo;if(e)if(Array.isArray(e))for(let t of e){let n=qn(t);if(n)return n}else return qn(e)}function qn(r){if(r.url&&r.contentType?.startsWith("image/"))return r.url}function zu(r){return r?new Date(r):void 0}function st(r,e){let t=new Date(r);t.setUTCHours(0,0,0,0);let n=e?new Date(e):new Date;n.setUTCHours(0,0,0,0);let i=t.getUTCFullYear(),o=t.getUTCMonth(),s=t.getUTCDate(),a=n.getUTCFullYear(),c=n.getUTCMonth(),u=n.getUTCDate(),l=a-i;(c<o||c===o&&u<s)&&l--;let h=a*12+c-(i*12+o);u<s&&h--;let g=Math.floor((n.getTime()-t.getTime())/(1e3*60*60*24));return{years:l,months:h,days:g}}function Ju(r,e){let{years:t,months:n,days:i}=st(r,e);return t>=2?t.toString().padStart(3,"0")+"Y":n>=1?n.toString().padStart(3,"0")+"M":i.toString().padStart(3,"0")+"D"}function Ku(r){let e={};return jn(r.item,e),e}function jn(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer[0]),jn(t.item,e)}function Yu(r){let e={};return $n(r.item,e),e}function $n(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]?e[t.linkId]=[...e[t.linkId],...t.answer]:e[t.linkId]=t.answer),$n(t.item,e)}function Po(r,e){let t=r.identifier;if(!t)return;let n=Array.isArray(t)?t:[t];for(let i of n)if(i.system===e)return i.value}function Zu(r,e,t){let n=r.identifier;if(!n){r.identifier=[{system:e,value:t}];return}for(let i of n)if(i.system===e){i.value=t;return}n.push({system:e,value:t})}function Xu(r,...e){let t=re(r,...e);if(!t)return;let n=P({type:"Extension",value:t},"value[x]");if(n)return Array.isArray(n)?n[0].value:n.value}function re(r,...e){let t=r;for(let n=0;n<e.length&&t;n++)t=t?.extension?.find(i=>i.url===e[n]);return t}function at(r,e){let t=Er(r);return JSON.stringify(t,null,e?2:void 0)??""}function Er(r){if(!(r==null||r===""))return typeof r=="object"?Array.isArray(r)?wo(r):Ao(r):r}function wo(r){let e=r.length;if(e===0)return;let t,n=0;for(let i=0;i<e;i++){let o=r[i],s=Er(o);s!==o&&!t&&(t=Array.from(r)),s===void 0?t&&(t[i]=null):(t&&(t[i]=s),n++)}if(n!==0)return t??r}function Ao(r){let e,t=0;for(let n in r){let i=r[n],o=Er(i);o!==i&&!e&&(e={...r}),o===void 0?e&&delete e[n]:(e&&(e[n]=o),t++)}if(t!==0)return e??r}function b(r){if(r==null)return!0;let e=typeof r;return e==="string"||e==="object"?!Y(r):!1}function Y(r){if(r==null)return!1;let e=typeof r;return e==="string"&&r!==""||e==="object"&&("length"in r&&r.length>0||Object.keys(r).length>0)}function ne(r,e,t){return r===e||b(r)&&b(e)?!0:b(r)||b(e)?!1:Array.isArray(r)&&Array.isArray(e)?Oo(r,e):Array.isArray(r)||Array.isArray(e)?!1:R(r)&&R(e)?Io(r,e,t):(R(r)||R(e),!1)}function Oo(r,e){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(!ne(r[t],e[t]))return!1;return!0}function Io(r,e,t){let n=new Set;Object.keys(r).forEach(i=>n.add(i)),Object.keys(e).forEach(i=>n.add(i)),t==="meta"&&(n.delete("versionId"),n.delete("lastUpdated"),n.delete("author"));for(let i of n){let o=r[i],s=e[i];if(!ne(o,s,i))return!1}return!0}function Fe(r,e){return b(r)?!0:b(e)?!1:Array.isArray(r)&&Array.isArray(e)?ko(r,e):Array.isArray(r)||Array.isArray(e)?!1:R(r)&&R(e)?Do(r,e):R(r)||R(e)?!1:r===e}function ko(r,e){return e.every(t=>r.some(n=>Fe(n,t)))}function Do(r,e){return Object.entries(e).every(([t,n])=>t in r&&Fe(r[t],n))}function fe(r){return r===void 0?r:JSON.parse(JSON.stringify(r))}function el(r){return!!/^\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/i.exec(r)}function R(r){return r!==null&&typeof r=="object"}function Gn(r){return r.every(Vo)}function Vo(r){return typeof r=="string"}function vr(r){return R(r)&&"code"in r&&typeof r.code=="string"}function Tr(r){return R(r)&&"coding"in r&&Array.isArray(r.coding)&&r.coding.every(vr)}function Mo(r){return R(r)&&"text"in r&&typeof r.text=="string"}var Hn=[];for(let r=0;r<256;r++)Hn.push(r.toString(16).padStart(2,"0"));function Qn(r){let e=Jn(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=Hn[t[i]];return n.join("")}function zn(r){let e=Jn(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=String.fromCharCode(t[i]);return window.btoa(n.join(""))}function Jn(r){return ArrayBuffer.isView(r)?r.buffer:r}function k(r){return r?r.charAt(0).toUpperCase()+r.substring(1):""}function tl(r){return r===r.toLowerCase()&&r!==r.toUpperCase()}function Rr(r){return r.length>0&&r.startsWith(r[0].toUpperCase())}function ie(r,e){let t=r+".";if(e.startsWith(t))return e.slice(t.length)}function Sr(r,e){return r.coding?.find(t=>t.system===e)?.code}function rl(r,e,t){r.coding||(r.coding=[]);let n=r.coding.find(i=>i.system===e);n?n.code=t:r.coding.push({system:e,code:t})}function nl(r,e,t,n){return r.qualifiedInterval?.find(i=>Kn(i,e)&&Lo(i,t,r.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function il(r,e,t){return _o(r,e,t)[0]}function _o(r,e,t){return r.qualifiedInterval?.filter(n=>Kn(n,e)&&(!t||t.includes(n.condition)))??[]}function Kn(r,e){return No(r,e)&&Fo(r,e)}function No(r,e){return!r.gender||r.gender===e.gender}function Fo(r,e){return!r.age||Yn(st(e.birthDate).years,r.age)}function Lo(r,e,t){return!!r.range&&Yn(e,r.range,t)}function Yn(r,e,t){return(e.low?.value===void 0||Bo(r,e.low.value,t))&&(e.high?.value===void 0||Uo(r,e.high.value,t))}function ol(r,e){return parseFloat(r.toFixed(e))}function sl(r,e,t){return G(r,t)===G(e,t)}function al(r,e,t){return G(r,t)<G(e,t)}function cl(r,e,t){return G(r,t)>G(e,t)}function Uo(r,e,t){return G(r,t)<=G(e,t)}function Bo(r,e,t){return G(r,t)>=G(e,t)}function G(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}function ul(r,e,t){return r.find(n=>typeof e=="string"?Sr(n.code||{},t)===e:Sr(n.code||{},t)===Sr(e,t))}function Ne(r){if(r!==void 0)return Array.isArray(r)?r:[r]}function ll(r){return Array.isArray(r)?r[0]:r}var Cr=r=>new Promise(e=>{setTimeout(e,r)});function Pr(r,e,t){let n=[];for(let i=0;i<t-1;i++){let o=r.indexOf(e);if(o<0)break;n.push(r.slice(0,o)),r=r.slice(o+e.length)}return n.push(r),n}function Zn(r){let e,t=!1;return function(){return t||(e=r(),t=!0),e}}function Oe(r,e){return r?(r.push(e),r):[e]}function ct(r){return r.sort((e,t)=>e.localeCompare(t))}function wr(r){return r.endsWith("/")?r:r+"/"}function Wo(r){return r.startsWith("/")?r.slice(1):r}function W(r,e){return new URL(Wo(e),wr(r.toString())).toString()}function Xn(r,e){return W(r,e).toString().replace("http://","ws://").replace("https://","wss://")}function ei(r){return typeof r=="object"&&!Array.isArray(r)&&!(r instanceof URLSearchParams)&&(r=Object.fromEntries(Object.entries(r).filter(e=>e[1]!==void 0))),new URLSearchParams(r).toString()}var qo=/^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-_]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-_]*[A-Za-z0-9])$/;function dl(r){return qo.test(r)}function pl(r,e){return r?.meta?.profile?.includes(e)||(r.meta=r.meta??{},r.meta.profile=r.meta.profile??[],r.meta.profile.push(e)),r}function fl(r,e){return new Map(r.entry?.filter(n=>!!n.resource).map(n=>[Po(n.resource,e),n.resource]).filter(([n])=>n!==void 0))}function hl(r,e){if(r?.meta?.profile?.includes(e)){let t=r.meta.profile.indexOf(e);r.meta.profile.splice(t,1)}return r}function ml(r,e){let t=[];if(!r)return t;for(let n=0;n<r.length;n++){let i=e(r[n],n);Array.isArray(i)?t.push(...i.flat()):i!==void 0&&t.push(i)}return t}function xl(r){if(!r)return"";switch(r.type){case"Address":return $o(r.value);case"CodeableConcept":return Le(r.value);case"Coding":return ti(r.value);case"ContactPoint":return r.value.value;case"HumanName":return Ue(r.value);case"Quantity":return oe(r.value);case"Reference":return jo(r.value);default:return r.value.toString()}}function jo(r){return r?r.display??r.reference??at(r):""}function $o(r,e){let t=[];if(r.line&&t.push(...r.line),r.city||r.state||r.postalCode){let n=[];r.city&&n.push(r.city),r.state&&n.push(r.state),r.postalCode&&n.push(r.postalCode),t.push(n.join(", "))}return r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.join(e?.lineSeparator??", ").trim()}function Ue(r,e){let t=[];if(r.prefix&&e?.prefix!==!1&&t.push(...r.prefix),r.given&&t.push(...r.given),r.family&&t.push(r.family),r.suffix&&e?.suffix!==!1&&t.push(...r.suffix),r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.length===0){let n=he(r.text);if(n)return n}return t.join(" ").trim()}function vl(r){let e=[];return r.given&&e.push(...r.given),e.join(" ").trim()}function Tl(r){return he(r.family)??""}function Or(r){return r instanceof Date&&!isNaN(r.getTime())}function Sl(r,e,t){if(!r)return"";let n=new Date(r);return Or(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...t})):""}function Go(r,e,t){if(!r)return"";let n=new Date("2000-01-01T"+r+"Z");return Or(n)?n.toLocaleTimeString(e,t):""}function Ar(r,e,t){if(!r)return"";let n=new Date(r);return Or(n)?n.toLocaleString(e,t):""}function bl(r,e,t){return!r||!r.start&&!r.end?"":Ar(r.start,e,t)+" - "+Ar(r.end,e,t)}var Ho={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},Qo={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},zo={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function El(r){if(!r)return"";let e=[];return Jo(e,r.repeat),r.event&&e.push(r.event.map(t=>Ar(t)).join(", ")),k(e.join(" ").trim())}function Jo(r,e){if(!e?.periodUnit)return;let t=e.frequency??1,n=e.period??1,i=e.periodUnit;t===1&&n===1?r.push(Ho[i]):(t===1?r.push("once"):r.push(t+" times"),n===1?r.push("per "+Qo[i]):r.push("per "+n+" "+zo[i])),e.dayOfWeek&&r.push("on "+e.dayOfWeek.map(k).join(", ")),e.timeOfDay&&r.push("at "+e.timeOfDay.map(o=>Go(o)).join(", "))}function Rl(r,e,t=!1){if(t&&e===void 0)throw new Error("Precision must be specified for exclusive ranges");let n=r?.low&&{...r.low,comparator:void 0},i=r?.high&&{...r.high,comparator:void 0};return n?.value===void 0&&i?.value===void 0?"":n?.value!==void 0&&i?.value===void 0?t&&e!==void 0?(n.value=Zo(n.value,e),`> ${oe(n,e)}`):`>= ${oe(n,e)}`:n?.value===void 0&&i?.value!==void 0?t&&e!==void 0?(i.value=Yo(i.value,e),`< ${oe(i,e)}`):`<= ${oe(i,e)}`:(n?.unit===i?.unit&&delete n?.unit,`${oe(n,e)} - ${oe(i,e)}`)}function oe(r,e){if(!r)return"";let t=[];return r.comparator&&(t.push(r.comparator),t.push(" ")),r.value!==void 0&&(e!==void 0?t.push(r.value.toFixed(e)):t.push(r.value)),r.unit&&(r.unit!=="%"&&t[t.length-1]!==" "&&t.push(" "),t.push(r.unit)),t.join("").trim()}function Cl(r){return r?.value===void 0?"":r.value.toLocaleString(void 0,{style:"currency",currency:r.currency??"USD",currencyDisplay:"narrowSymbol"})}function Le(r){if(!r)return"";let e=he(r.text);return e||(r.coding?r.coding.map(t=>ti(t)).join(", "):"")}function ti(r,e){let t=he(r?.display);if(t){let n=e?he(r?.code):void 0;return`${t}${n?" ("+n+")":""}`}return he(r?.code)??""}function Ko(r){if(!r)return"";let e=[];if(r.valueQuantity)e.push(oe(r.valueQuantity));else if(r.valueCodeableConcept)e.push(Le(r.valueCodeableConcept));else{let t=he(r.valueString);t&&e.push(t)}return"component"in r&&e.push(r.component.map(t=>Ko(t)).join(" / ")),e.join(" / ").trim()}function he(r){return typeof r=="string"?r:void 0}function Yo(r,e,t=1){return(ri(r,e)+t)*Math.pow(10,-e)}function Zo(r,e,t=1){return(ri(r,e)-t)*Math.pow(10,-e)}function ri(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}var d={Address:"Address",Age:"Age",Annotation:"Annotation",Attachment:"Attachment",BackboneElement:"BackboneElement",CodeableConcept:"CodeableConcept",Coding:"Coding",ContactDetail:"ContactDetail",ContactPoint:"ContactPoint",Contributor:"Contributor",Count:"Count",DataRequirement:"DataRequirement",Distance:"Distance",Dosage:"Dosage",Duration:"Duration",Expression:"Expression",Extension:"Extension",HumanName:"HumanName",Identifier:"Identifier",MarketingStatus:"MarketingStatus",Meta:"Meta",Money:"Money",Narrative:"Narrative",ParameterDefinition:"ParameterDefinition",Period:"Period",Population:"Population",ProdCharacteristic:"ProdCharacteristic",ProductShelfLife:"ProductShelfLife",Quantity:"Quantity",Range:"Range",Ratio:"Ratio",Reference:"Reference",RelatedArtifact:"RelatedArtifact",SampledData:"SampledData",Signature:"Signature",SubstanceAmount:"SubstanceAmount",SystemString:"http://hl7.org/fhirpath/System.String",Timing:"Timing",TriggerDefinition:"TriggerDefinition",UsageContext:"UsageContext",base64Binary:"base64Binary",boolean:"boolean",canonical:"canonical",code:"code",date:"date",dateTime:"dateTime",decimal:"decimal",id:"id",instant:"instant",integer:"integer",markdown:"markdown",oid:"oid",positiveInt:"positiveInt",string:"string",time:"time",unsignedInt:"unsignedInt",uri:"uri",url:"url",uuid:"uuid"};function Dl(r){for(let e of r.entry??[]){let t=e.resource;t.resourceType==="SearchParameter"&&Ir(t)}}function In(r){let e=Array.isArray(r)?r:r.entry?.map(t=>t.resource)??[];for(let t of e)t?.resourceType==="StructureDefinition"&&t.kind==="resource"&&ii(t.type)}function ii(r){let e=F.types[r];return e||(e={searchParamsDetails:{}},F.types[r]=e),e.searchParams||(e.searchParams={_id:{base:[r],code:"_id",type:"token",expression:r+".id"},_lastUpdated:{base:[r],code:"_lastUpdated",type:"date",expression:r+".meta.lastUpdated"},_compartment:{base:[r],code:"_compartment",type:"reference",expression:r+".meta.compartment"},_profile:{base:[r],code:"_profile",type:"uri",expression:r+".meta.profile"},_security:{base:[r],code:"_security",type:"token",expression:r+".meta.security"},_source:{base:[r],code:"_source",type:"uri",expression:r+".meta.source"},_tag:{base:[r],code:"_tag",type:"token",expression:r+".meta.tag"}}),e}function Ir(r){for(let e of r.base??[]){let t=ii(e);t.searchParams||(t.searchParams={}),t.searchParams[r.code]=r}}function ir(r){let e=r.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?Xo((r.base?.path??r.path)?.split(".")):e}function Xo(r){return r.length===1?r[0]:r.map(k).join("")}function ur(r){return r.kind==="resource"&&r.name!=="Resource"&&r.name!=="DomainResource"}function Vl(){return Object.values(Cn()).filter(ur).map(r=>r.name)}function Ml(r){return F.types[r]?.searchParams}function _l(r,e){return F.types[r]?.searchParams?.[e]}function Nl(r){let e=r.replaceAll("[x]","").split(".").pop();return es(e)}function es(r){let e;return r.length<100?e=r.match(/[A-Z]+(?![a-z])|[A-Z]?[a-z]+|\d+/g)??[]:e=r.split(/(?=[A-Z])/),e.map(rs).join(" ").replace("_"," ").replace(/\s+/g," ")}var ts=new Set(["ID","IP","PKCE","JWKS","URI","URL","OMB","UDI"]);function rs(r){let e=r.toUpperCase();return r===e?r:ts.has(e)?e:e.charAt(0)+r.slice(1)}function ot(r,e,t){let n=_e(r,t);if(n)return ns(n.elements,e)}function ns(r,e){let t=r[e]??r[e+"[x]"];if(t)return t;for(let n=0;n<e.length;n++){let i=e[n];if(i>="A"&&i<="Z"){let o=e.slice(0,n)+"[x]",s=r[o];if(s)return s}}}function O(r,e){return!(!r||typeof r!="object"||!("resourceType"in r)||e&&r.resourceType!==e)}function J(r){return!!(r&&typeof r=="object"&&"reference"in r&&typeof r.reference=="string")}var F={types:{}};function oi(r){switch(r.type){case d.uuid:case d.uri:case d.url:case d.string:case d.oid:case d.markdown:case d.id:case d.code:case d.canonical:case d.base64Binary:case d.SystemString:case d.date:case d.dateTime:case d.instant:return r.value;case d.Identifier:return`${r.value.system??""}|${r.value.value}`;case d.Coding:return ni(r.value);case d.CodeableConcept:return r.value.coding?.map(ni).join(",")??r.value.text;case d.HumanName:return r.value.text?r.value.text:Ue(r.value);case d.unsignedInt:case d.positiveInt:case d.integer:case d.decimal:return r.value.toString();case d.boolean:return r.value?"true":"false";case d.Extension:return r.value.url;case d.ContactPoint:return r.value.value;case d.Quantity:case d.Age:case d.Count:case d.Duration:return`${r.value.value}|${r.value.system??""}|${r.value.code??r.value.unit??""}`;case d.Reference:return r.value.reference;default:return br(r.value)?K(r.value):JSON.stringify(r)}}function ni(r){return r?`${r.system??""}|${r.code}`:""}function Ie(r){if(r.startsWith("T"))return r+"T00:00:00.000Z".substring(r.length);if(r.length<=10)return r;try{return new Date(r).toISOString()}catch{return r}}var Z=()=>[],I={empty:(r,e)=>f(e.length===0||e.every(t=>b(t.value))),hasValue:(r,e)=>f(e.length!==0),exists:(r,e,t)=>t?f(e.filter(n=>N(t.eval(r,[n]))).length>0):f(e.length>0&&e.every(n=>!b(n.value))),all:(r,e,t)=>f(e.every(n=>N(t.eval(r,[n])))),allTrue:(r,e)=>{for(let t of e)if(!t.value)return f(!1);return f(!0)},anyTrue:(r,e)=>{for(let t of e)if(t.value)return f(!0);return f(!1)},allFalse:(r,e)=>{for(let t of e)if(t.value)return f(!1);return f(!0)},anyFalse:(r,e)=>{for(let t of e)if(!t.value)return f(!0);return f(!1)},subsetOf:(r,e,t)=>{if(e.length===0)return f(!0);let n=t.eval(r,me(r));return n.length===0?f(!1):f(e.every(i=>n.some(o=>o.value===i.value)))},supersetOf:(r,e,t)=>{let n=t.eval(r,me(r));return n.length===0?f(!0):e.length===0?f(!1):f(n.every(i=>e.some(o=>o.value===i.value)))},count:(r,e)=>[{type:d.integer,value:e.length}],distinct:(r,e)=>{let t=[];for(let n of e)t.some(i=>i.value===n.value)||t.push(n);return t},isDistinct:(r,e)=>f(e.length===I.distinct(r,e).length),where:(r,e,t)=>e.filter(n=>N(t.eval(r,[n]))),select:(r,e,t)=>e.map(n=>t.eval({parent:r,variables:{$this:n}},[n])).flat(),repeat:Z,ofType:(r,e,t)=>e.filter(n=>n.type===t.name),single:(r,e)=>{if(e.length>1)throw new Error("Expected input length one for single()");return e.length===0?[]:e.slice(0,1)},first:(r,e)=>e.length===0?[]:e.slice(0,1),last:(r,e)=>e.length===0?[]:e.slice(e.length-1,e.length),tail:(r,e)=>e.length===0?[]:e.slice(1,e.length),skip:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new Error("Expected a number for skip(num)");return n>=e.length?[]:n<=0?e:e.slice(n,e.length)},take:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new Error("Expected a number for take(num)");return n>=e.length?e:n<=0?[]:e.slice(0,n)},intersect:(r,e,t)=>{if(!t)return e;let n=t.eval(r,me(r)),i=[];for(let o of e)!i.some(s=>s.value===o.value)&&n.some(s=>s.value===o.value)&&i.push(o);return i},exclude:(r,e,t)=>{if(!t)return e;let n=t.eval(r,me(r)),i=[];for(let o of e)n.some(s=>s.value===o.value)||i.push(o);return i},union:(r,e,t)=>{if(!t)return e;let n=t.eval(r,me(r));return nt([...e,...n])},combine:(r,e,t)=>{if(!t)return e;let n=t.eval(r,me(r));return[...e,...n]},htmlChecks:(r,e,t)=>[x(!0)],iif:(r,e,t,n,i)=>{let o=t.eval(r,e);if(o.length>1||o.length===1&&typeof o[0].value!="boolean")throw new Error("Expected criterion to evaluate to a Boolean");return N(o)?n.eval(r,e):i?i.eval(r,e):[]},toBoolean:(r,e)=>{if(e.length===0)return[];let[{value:t}]=Q(e,1);if(typeof t=="boolean")return[{type:d.boolean,value:t}];if(typeof t=="number"&&(t===0||t===1))return f(!!t);if(typeof t=="string"){let n=t.toLowerCase();if(["true","t","yes","y","1","1.0"].includes(n))return f(!0);if(["false","f","no","n","0","0.0"].includes(n))return f(!1)}return[]},convertsToBoolean:(r,e)=>e.length===0?[]:f(I.toBoolean(r,e).length===1),toInteger:(r,e)=>{if(e.length===0)return[];let[{value:t}]=Q(e,1);return typeof t=="number"?[{type:d.integer,value:t}]:typeof t=="string"&&/^[+-]?\d+$/.exec(t)?[{type:d.integer,value:parseInt(t,10)}]:typeof t=="boolean"?[{type:d.integer,value:t?1:0}]:[]},convertsToInteger:(r,e)=>e.length===0?[]:f(I.toInteger(r,e).length===1),toDate:(r,e)=>{if(e.length===0)return[];let[{value:t}]=Q(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:d.date,value:Ie(t)}]:[]},convertsToDate:(r,e)=>e.length===0?[]:f(I.toDate(r,e).length===1),toDateTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=Q(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:d.dateTime,value:Ie(t)}]:[]},convertsToDateTime:(r,e)=>e.length===0?[]:f(I.toDateTime(r,e).length===1),toDecimal:(r,e)=>{if(e.length===0)return[];let[{value:t}]=Q(e,1);return typeof t=="number"?[{type:d.decimal,value:t}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(t)?[{type:d.decimal,value:parseFloat(t)}]:typeof t=="boolean"?[{type:d.decimal,value:t?1:0}]:[]},convertsToDecimal:(r,e)=>e.length===0?[]:f(I.toDecimal(r,e).length===1),toQuantity:(r,e)=>{if(e.length===0)return[];let[{value:t}]=Q(e,1);return D(t)?[{type:d.Quantity,value:t}]:typeof t=="number"?[{type:d.Quantity,value:{value:t,unit:"1"}}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(t)?[{type:d.Quantity,value:{value:parseFloat(t),unit:"1"}}]:typeof t=="boolean"?[{type:d.Quantity,value:{value:t?1:0,unit:"1"}}]:[]},convertsToQuantity:(r,e)=>e.length===0?[]:f(I.toQuantity(r,e).length===1),toString:(r,e)=>{if(e.length===0)return[];let[{value:t}]=Q(e,1);return t==null?[]:D(t)?[{type:d.string,value:`${t.value} '${t.unit}'`}]:[{type:d.string,value:t.toString()}]},convertsToString:(r,e)=>e.length===0?[]:f(I.toString(r,e).length===1),toTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=Q(e,1);if(typeof t=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(t);if(n)return[{type:d.time,value:Ie("T"+n[1])}]}return[]},convertsToTime:(r,e)=>e.length===0?[]:f(I.toTime(r,e).length===1),indexOf:(r,e,t)=>L((n,i)=>n.indexOf(i),r,e,t),substring:(r,e,t,n)=>L((i,o,s)=>{let a=o,c=s?a+s:i.length;return a<0||a>=i.length?void 0:i.substring(a,c)},r,e,t,n),startsWith:(r,e,t)=>L((n,i)=>n.startsWith(i),r,e,t),endsWith:(r,e,t)=>L((n,i)=>n.endsWith(i),r,e,t),contains:(r,e,t)=>L((n,i)=>n.includes(i),r,e,t),upper:(r,e)=>L(t=>t.toUpperCase(),r,e),lower:(r,e)=>L(t=>t.toLowerCase(),r,e),replace:(r,e,t,n)=>L((i,o,s)=>i.replaceAll(o,s),r,e,t,n),matches:(r,e,t)=>L((n,i)=>!!new RegExp(i).exec(n),r,e,t),replaceMatches:(r,e,t,n)=>L((i,o,s)=>i.replaceAll(o,s),r,e,t,n),length:(r,e)=>L(t=>t.length,r,e),toChars:(r,e)=>L(t=>t?t.split(""):void 0,r,e),encode:Z,decode:Z,escape:Z,unescape:Z,trim:Z,split:Z,join:(r,e,t)=>{let n=t?.eval(r,me(r))[0]?.value??"";if(typeof n!="string")throw new Error("Separator must be a string.");return[{type:d.string,value:e.map(i=>i.value?.toString()??"").join(n)}]},abs:(r,e)=>H(Math.abs,r,e),ceiling:(r,e)=>H(Math.ceil,r,e),exp:(r,e)=>H(Math.exp,r,e),floor:(r,e)=>H(Math.floor,r,e),ln:(r,e)=>H(Math.log,r,e),log:(r,e,t)=>H((n,i)=>Math.log(n)/Math.log(i),r,e,t),power:(r,e,t)=>H(Math.pow,r,e,t),round:(r,e)=>H(Math.round,r,e),sqrt:(r,e)=>H(Math.sqrt,r,e),truncate:(r,e)=>H(t=>t|0,r,e),children:Z,descendants:Z,trace:(r,e,t)=>e,now:()=>[{type:d.dateTime,value:new Date().toISOString()}],timeOfDay:()=>[{type:d.time,value:new Date().toISOString().substring(11)}],today:()=>[{type:d.date,value:new Date().toISOString().substring(0,10)}],between:(r,e,t,n,i)=>{let o=I.toDateTime(r,t.eval(r,e));if(o.length===0)throw new Error("Invalid start date");let s=I.toDateTime(r,n.eval(r,e));if(s.length===0)throw new Error("Invalid end date");let a=i.eval(r,e)[0]?.value;if(a!=="years"&&a!=="months"&&a!=="days")throw new Error("Invalid units");let c=st(o[0].value,s[0].value);return[{type:d.Quantity,value:{value:c[a],unit:a}}]},is:(r,e,t)=>{let n="";return t instanceof q?n=t.name:t instanceof se&&(n=t.left.name+"."+t.right.name),n?e.map(i=>({type:d.boolean,value:it(i,n)})):[]},not:(r,e)=>I.toBoolean(r,e).map(t=>({type:d.boolean,value:!t.value})),resolve:(r,e)=>e.map(t=>{let n=t.value,i;if(typeof n=="string")i=n;else if(typeof n=="object"){let o=n;if(o.resource)return x(o.resource);o.reference?i=o.reference:o.type&&o.identifier&&(i=`${o.type}?identifier=${o.identifier.system}|${o.identifier.value}`)}if(i?.includes("?")){let[o]=i.split("?");return{type:o,value:{resourceType:o}}}if(i?.includes("/")){let[o,s]=i.split("/");return{type:o,value:{resourceType:o,id:s}}}return{type:d.BackboneElement,value:void 0}}).filter(t=>!!t.value),as:(r,e)=>e,type:(r,e)=>e.map(({value:t})=>typeof t=="boolean"?{type:d.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof t=="number"?{type:d.BackboneElement,value:{namespace:"System",name:"Integer"}}:O(t)?{type:d.BackboneElement,value:{namespace:"FHIR",name:t.resourceType}}:{type:d.BackboneElement,value:null}),conformsTo:(r,e,t)=>{let n=t.eval(r,e)[0].value;if(!n.startsWith("http://hl7.org/fhir/StructureDefinition/"))throw new Error("Expected a StructureDefinition URL");let i=n.replace("http://hl7.org/fhir/StructureDefinition/","");return e.map(o=>({type:d.boolean,value:o.value?.resourceType===i}))},getResourceKey:(r,e)=>{let t=e[0].value;return t?.id?[{type:d.id,value:t.id}]:[]},getReferenceKey:(r,e,t)=>{let n=e[0].value;if(!n?.reference)return[];let i="";return t instanceof q&&(i=t.name),i&&!n.reference.startsWith(i+"/")?[]:[{type:d.id,value:pe(n)}]},extension:(r,e,t)=>{let n=t.eval(r,e)[0].value,i=e?.[0]?.value;if(i){let o=re(i,n);if(o)return[{type:d.Extension,value:o}]}return[]}};function L(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=Q(t,1);if(typeof i!="string")throw new Error("String function cannot be called with non-string");let o=r(i,...n.map(s=>s?.eval(e,t)[0]?.value));return o===void 0?[]:Array.isArray(o)?o.map(x):[x(o)]}function H(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=Q(t,1),o=D(i),s=o?i.value:i;if(typeof s!="number")throw new Error("Math function cannot be called with non-number");let a=r(s,...n.map(l=>l.eval(e,t)[0]?.value)),c=o?d.Quantity:t[0].type,u=o?{...i,value:a}:a;return[{type:c,value:u}]}function Q(r,e){if(r.length!==e)throw new Error(`Expected ${e} arguments`);for(let t of r)if(t==null)throw new Error("Expected non-null argument");return r}function me(r){let e=r;for(;e.parent?.variables.$this;)e=e.parent;return[e.variables.$this]}var ut=class{constructor(e,t){this.original=e;this.child=t}eval(e,t){try{if(t.length>0){let n=[];for(let i of t)n.push(this.child.eval({parent:e,variables:{$this:i}},[i]));return n.flat()}else return this.child.eval(e,[])}catch(n){throw new Error(`FhirPathError on "${this.original}": ${n}`,{cause:n})}}toString(){return this.child.toString()}},U=class{constructor(e){this.value=e}eval(){return[this.value]}toString(){let e=this.value.value;return typeof e=="string"?`'${e}'`:e.toString()}},q=class{constructor(e){this.name=e}eval(e,t){if(this.name==="$this")return t;let n=this.getVariable(e);if(n)return[n];if(this.name.startsWith("%"))throw new Error(`Undefined variable ${this.name}`);return t.flatMap(i=>this.evalValue(i)).filter(i=>i?.value!==void 0)}getVariable(e){let t=e.variables[this.name];if(t!==void 0)return t;if(e.parent)return this.getVariable(e.parent)}evalValue(e){let t=e.value;if(!(!t||typeof t!="object"))return O(t,this.name)?e:P(e,this.name)}toString(){return this.name}},lt=class{eval(){return[]}toString(){return"{}"}},dt=class extends Je{constructor(t,n,i){super(t,n);this.impl=i}eval(t,n){return this.impl(this.child.eval(t,n))}toString(){return this.operator+this.child.toString()}},ye=class extends ee{constructor(e,t){super("as",e,t)}eval(e,t){return I.ofType(e,this.left.eval(e,t),this.right)}},C=class extends ee{},V=class extends C{constructor(t,n,i,o){super(t,n,i);this.impl=o}eval(t,n){let i=this.left.eval(t,n);if(i.length!==1)return[];let o=this.right.eval(t,n);if(o.length!==1)return[];let s=i[0].value,a=o[0].value,c=D(s)?s.value:s,u=D(a)?a.value:a,l=this.impl(c,u);return typeof l=="boolean"?f(l):D(s)?[{type:d.Quantity,value:{...s,value:l}}]:[x(l)]}},pt=class extends ee{constructor(e,t){super("&",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t),o=[...n,...i];return o.length>0&&o.every(s=>typeof s.value=="string")?[{type:d.string,value:o.map(s=>s.value).join("")}]:o}},ft=class extends C{constructor(e,t){super("contains",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return f(n.some(o=>o.value===i[0].value))}},ht=class extends C{constructor(e,t){super("in",e,t)}eval(e,t){let n=$(this.left.eval(e,t)),i=this.right.eval(e,t);return n?f(i.some(o=>o.value===n.value)):[]}},se=class extends ee{constructor(e,t){super(".",e,t)}eval(e,t){return this.right.eval(e,this.left.eval(e,t))}toString(){return`${this.left.toString()}.${this.right.toString()}`}},ke=class extends ee{constructor(e,t){super("|",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return nt([...n,...i])}},mt=class extends C{constructor(e,t){super("=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Fn(n,i)}},yt=class extends C{constructor(e,t){super("!=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Ln(n,i)}},gt=class extends C{constructor(e,t){super("~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return gr(n,i)}},xt=class extends C{constructor(e,t){super("!~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Nn(gr(n,i))}},ge=class extends C{constructor(e,t){super("is",e,t)}eval(e,t){let n=this.left.eval(e,t);if(n.length!==1)return[];let i=this.right.name;return f(it(n[0],i))}},vt=class extends C{constructor(e,t){super("and",e,t)}eval(e,t){let n=$(this.left.eval(e,t),"boolean"),i=$(this.right.eval(e,t),"boolean");return n?.value===!0&&i?.value===!0?f(!0):n?.value===!1||i?.value===!1?f(!1):[]}},Tt=class extends C{constructor(e,t){super("or",e,t)}eval(e,t){let n=$(this.left.eval(e,t),"boolean"),i=$(this.right.eval(e,t),"boolean");return n?.value===!1&&i?.value===!1?f(!1):n?.value||i?.value?f(!0):[]}},St=class extends C{constructor(e,t){super("xor",e,t)}eval(e,t){let n=$(this.left.eval(e,t),"boolean"),i=$(this.right.eval(e,t),"boolean");return!n||!i?[]:f(n.value!==i.value)}},bt=class extends C{constructor(e,t){super("implies",e,t)}eval(e,t){let n=$(this.left.eval(e,t),"boolean"),i=$(this.right.eval(e,t),"boolean");return i?.value===!0||n?.value===!1?f(!0):!n||!i?[]:f(!1)}},X=class{constructor(e,t){this.name=e;this.args=t}eval(e,t){let n=I[this.name];if(!n)throw new Error("Unrecognized function: "+this.name);return n(e,t,...this.args)}toString(){return`${this.name}(${this.args.map(e=>e.toString()).join(", ")})`}},xe=class{constructor(e,t){this.left=e;this.expr=t}eval(e,t){let n=this.expr.eval(e,t);if(n.length!==1)return[];let i=n[0].value;if(typeof i!="number")throw new Error("Invalid indexer expression: should return integer}");let o=this.left.eval(e,t);return i in o?[o[i]]:[]}toString(){return`${this.left.toString()}[${this.expr.toString()}]`}};var is=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],ae=class{constructor(e,t,n,i){this.result=[];this.pos={index:0,line:1,column:0};this.markStack=[];this.str=e,this.keywords=t,this.operators=n,this.dateTimeLiterals=!!i?.dateTimeLiterals,this.symbolRegex=i?.symbolRegex??/[$\w%]/}tokenize(){for(;this.pos.index<this.str.length;){let e=this.consumeToken();e&&this.result.push(e)}return this.result}prevToken(){return this.result.slice(-1)[0]}peekToken(){this.mark();let e=this.consumeToken();return this.reset(),e}consumeToken(){this.consumeWhitespace();let e=this.curr();if(!e)return;this.mark();let t=this.peek();return e==="/"&&t==="*"?this.consumeMultiLineComment():e==="/"&&t==="/"?this.consumeSingleLineComment():e==="'"||e==='"'?this.consumeString(e):e==="`"?this.consumeBacktickSymbol():e==="@"?this.consumeDateTime():/\d/.exec(e)?this.consumeNumber():/\w/.exec(e)?this.consumeSymbol():(e==="$"||e==="%")&&/\w/.exec(t)?this.consumeSymbol():this.consumeOperator()}consumeWhitespace(){this.consumeWhile(()=>/\s/.exec(this.curr()))}consumeMultiLineComment(){let e=this.pos.index;return this.consumeWhile(()=>this.curr()!=="*"||this.peek()!=="/"),this.advance(),this.advance(),this.buildToken("Comment",this.str.substring(e,this.pos.index))}consumeSingleLineComment(){return this.buildToken("Comment",this.consumeWhile(()=>this.curr()!==`
2
+ `))}consumeString(e){this.advance();let t=this.buildToken("String",this.consumeWhile(()=>this.prev()==="\\"||this.curr()!==e));return this.advance(),t}consumeBacktickSymbol(){this.advance();let e=this.buildToken("Symbol",this.consumeWhile(()=>this.curr()!=="`"));return this.advance(),e}consumeDateTime(){this.advance();let e=this.pos.index;this.consumeWhile(()=>/[\d-]/.exec(this.curr()));let t=!1,n=!1;if(this.curr()==="T"&&(t=!0,this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())),this.curr()==="."&&/\d/.exec(this.peek())&&(this.advance(),this.consumeWhile(()=>/\d/.exec(this.curr()))),this.curr()==="Z"?(n=!0,this.advance()):(this.curr()==="+"||this.curr()==="-")&&(n=!0,this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())))),this.pos.index===e)throw new Error("Invalid DateTime literal");let i=this.str.substring(e,this.pos.index);return i.endsWith("T")?i=i.substring(0,i.length-1):!i.startsWith("T")&&t&&!n&&(i+="Z"),this.buildToken("DateTime",i)}consumeNumber(){let e=this.pos.index,t="Number";return this.consumeWhile(()=>/\d/.exec(this.curr())),this.curr()==="."&&/\d/.exec(this.peek())&&(this.advance(),this.consumeWhile(()=>/\d/.exec(this.curr()))),this.curr()==="-"&&this.dateTimeLiterals?(this.pos.index=e-1,this.consumeDateTime()):(this.curr()===" "&&os(this.peekToken())&&(t="Quantity",this.consumeToken()),this.buildToken(t,this.str.substring(e,this.pos.index)))}consumeSymbol(){let e=this.consumeWhile(()=>this.symbolRegex.exec(this.curr()));return this.prevToken()?.value!=="."&&this.keywords.includes(e)?this.buildToken(e,e):this.buildToken("Symbol",e)}consumeOperator(){let e=this.curr(),t=this.peek(),n=e+t;return this.operators.includes(n)?(this.advance(),this.advance(),this.buildToken(n,n)):(this.advance(),this.buildToken(e,e))}consumeWhile(e){let t=this.pos.index;for(;this.pos.index<this.str.length&&e();)this.advance();return this.str.substring(t,this.pos.index)}curr(){return this.str[this.pos.index]}prev(){return this.str[this.pos.index-1]??""}peek(){return this.str[this.pos.index+1]??""}mark(){this.markStack.push({...this.pos})}reset(){let e=this.markStack.pop();if(!e)throw new Error("No mark to reset to");this.pos.index=e.index,this.pos.line=e.line,this.pos.column=e.column}advance(){this.pos.index++,this.curr()===`
3
+ `?(this.pos.line++,this.pos.column=0):this.pos.column++}buildToken(e,t){let n=this.markStack.pop();if(!n)throw new Error("No mark for token");return{id:e,value:t,...n}}};function os(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&is.includes(r.value)))}var Be=["true","false"],We=["!=","!~","<=",">=","{}","->"];function si(r){return new ae(r,Be,We).tokenize()}var y={FunctionCall:0,Dot:1,Indexer:2,UnaryAdd:3,UnarySubtract:3,Multiply:4,Divide:4,IntegerDivide:4,Modulo:4,Add:5,Subtract:5,Ampersand:5,Is:6,As:6,Union:7,GreaterThan:8,GreaterThanOrEquals:8,LessThan:8,LessThanOrEquals:8,Equals:9,Equivalent:9,NotEquals:9,NotEquivalent:9,In:10,Contains:10,And:11,Xor:12,Or:12,Implies:13,Arrow:100,Semicolon:200},ss={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},as={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new xe(e,t)},precedence:y.Indexer},cs={parse(r,e){if(!(e instanceof q))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new X(e.name,t)},precedence:y.FunctionCall};function us(r){let e=r.split(" "),t=parseFloat(e[0]),n=e[1];return n?.startsWith("'")&&n.endsWith("'")?n=n.substring(1,n.length-1):n="{"+n+"}",{value:t,unit:n}}function qe(){return new Ke().registerPrefix("String",{parse:(r,e)=>new U({type:d.string,value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new U({type:d.dateTime,value:Ie(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new U({type:d.Quantity,value:us(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new U({type:e.value.includes(".")?d.decimal:d.integer,value:parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new U({type:d.boolean,value:!0})}).registerPrefix("false",{parse:()=>new U({type:d.boolean,value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new q(e.value)}).registerPrefix("{}",{parse:()=>new lt}).registerPrefix("(",ss).registerInfix("[",as).registerInfix("(",cs).prefix("+",y.UnaryAdd,(r,e)=>new dt("+",e,t=>t)).prefix("-",y.UnarySubtract,(r,e)=>new V("-",e,e,(t,n)=>-n)).infixLeft(".",y.Dot,(r,e,t)=>new se(r,t)).infixLeft("/",y.Divide,(r,e,t)=>new V("/",r,t,(n,i)=>n/i)).infixLeft("*",y.Multiply,(r,e,t)=>new V("*",r,t,(n,i)=>n*i)).infixLeft("+",y.Add,(r,e,t)=>new V("+",r,t,(n,i)=>n+i)).infixLeft("-",y.Subtract,(r,e,t)=>new V("-",r,t,(n,i)=>n-i)).infixLeft("|",y.Union,(r,e,t)=>new ke(r,t)).infixLeft("=",y.Equals,(r,e,t)=>new mt(r,t)).infixLeft("!=",y.NotEquals,(r,e,t)=>new yt(r,t)).infixLeft("~",y.Equivalent,(r,e,t)=>new gt(r,t)).infixLeft("!~",y.NotEquivalent,(r,e,t)=>new xt(r,t)).infixLeft("<",y.LessThan,(r,e,t)=>new V("<",r,t,(n,i)=>n<i)).infixLeft("<=",y.LessThanOrEquals,(r,e,t)=>new V("<=",r,t,(n,i)=>n<=i)).infixLeft(">",y.GreaterThan,(r,e,t)=>new V(">",r,t,(n,i)=>n>i)).infixLeft(">=",y.GreaterThanOrEquals,(r,e,t)=>new V(">=",r,t,(n,i)=>n>=i)).infixLeft("&",y.Ampersand,(r,e,t)=>new pt(r,t)).infixLeft("and",y.And,(r,e,t)=>new vt(r,t)).infixLeft("as",y.As,(r,e,t)=>new ye(r,t)).infixLeft("contains",y.Contains,(r,e,t)=>new ft(r,t)).infixLeft("div",y.Divide,(r,e,t)=>new V("div",r,t,(n,i)=>n/i|0)).infixLeft("in",y.In,(r,e,t)=>new ht(r,t)).infixLeft("is",y.Is,(r,e,t)=>new ge(r,t)).infixLeft("mod",y.Modulo,(r,e,t)=>new V("mod",r,t,(n,i)=>n%i)).infixLeft("or",y.Or,(r,e,t)=>new Tt(r,t)).infixLeft("xor",y.Xor,(r,e,t)=>new St(r,t)).infixLeft("implies",y.Implies,(r,e,t)=>new bt(r,t))}var ls=qe();function kr(r){return new ut(r,ls.construct(si(r)).consumeAndParse())}function De(r,e){let t=Array.isArray(e)?e:[e];for(let n=0;n<t.length;n++){let i=t[n];typeof i=="object"&&"type"in i&&"value"in i||(t[n]=x(t[n]))}return w(r,t).map(n=>n.value)}function w(r,e,t={}){return kr(r).eval({variables:t},e).map(i=>({type:i.type,value:i.value?.valueOf()}))}var ai=(l=>(l.BOOLEAN="BOOLEAN",l.NUMBER="NUMBER",l.QUANTITY="QUANTITY",l.TEXT="TEXT",l.REFERENCE="REFERENCE",l.CANONICAL="CANONICAL",l.DATE="DATE",l.DATETIME="DATETIME",l.PERIOD="PERIOD",l.UUID="UUID",l))(ai||{});function Vr(r,e){let t=F.types[r]?.searchParamsDetails?.[e.code];return t||(t=ps(r,e)),t}function ds(r,e,t){let n=F.types[r];n||(n={},F.types[r]=n),n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=t}function ps(r,e){let t=e.code,n=ui(r,e.expression),i={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let s of n){let a=Et(s),c=Zn(()=>a.join("."));a.length===1&&a[0]instanceof C?i.propertyTypes.add("boolean"):e.code.endsWith(":identifier")?i.propertyTypes.add("Identifier"):c().endsWith("extension.value.code")||c().endsWith("extension.value.coding.code")?(i.array=!0,i.propertyTypes.add("code")):ci(i,a,r,1),c().endsWith("extension.valueDateTime")&&(i.array=!1)}let o={type:ms(e,i.propertyTypes),elementDefinitions:i.elementDefinitions,array:i.array};return ds(r,t,o),o}function ci(r,e,t,n){let i=e[n];if(i instanceof ye){r.propertyTypes.add(i.right.toString());return}if(i instanceof X){fs(r,i);return}let o=i.toString(),s=ot(t,o);if(!s)throw new Error(`Element definition not found for ${t} ${o}`);let a=!1,c=n+1;if(c<e.length&&e[c]instanceof xe&&(a=!0,c++),s.isArray&&!a&&(r.array=!0),c>=e.length){r.elementDefinitions.push(s);for(let u of s.type)r.propertyTypes.add(u.code);return}for(let u of s.type){let l=u.code;hs(l)&&(l=s.type[0].code),ci(r,e,l,c)}}function fs(r,e){if(e.name==="as"){r.propertyTypes.add(e.args[0].toString());return}if(e.name==="ofType"){r.propertyTypes.add(e.args[0].toString());return}if(e.name==="resolve"){r.propertyTypes.add("string");return}if(e.name==="where"&&e.args[0]instanceof ge){r.propertyTypes.add(e.args[0].right.toString());return}throw new Error(`Unhandled FHIRPath function: ${e.name}`)}function hs(r){return r==="Element"||r==="BackboneElement"}function ms(r,e){switch(r.type){case"date":return e.size===1&&e.has(d.date)?"DATE":"DATETIME";case"number":return"NUMBER";case"quantity":return"QUANTITY";case"reference":return e.has(d.canonical)?"CANONICAL":"REFERENCE";case"token":return e.size===1&&e.has(d.boolean)?"BOOLEAN":"TEXT";default:return"TEXT"}}function ui(r,e){let t=[],n=kr(e);return Dr(r,n.child,t),t}function Td(r,e){let t=ui(r,e);if(t.length!==0)return t.map(n=>n.toString()).join(" | ")}function Dr(r,e,t){e instanceof ke?(Dr(r,e.left,t),Dr(r,e.right,t)):e.toString().startsWith(r+".")&&t.push(e)}function Et(r){if(r instanceof ye||r instanceof xe)return[Et(r.left),r].flat();if(r instanceof C)return[r];if(r instanceof se)return[Et(r.left),Et(r.right)].flat();if(r instanceof X){if(r.name==="where"&&!(r.args[0]instanceof ge))return[];if(r.name==="last")return[]}return[r]}var Ad=20,Od=1e3,fi=(v=>(v.EQUALS="eq",v.NOT_EQUALS="ne",v.GREATER_THAN="gt",v.LESS_THAN="lt",v.GREATER_THAN_OR_EQUALS="ge",v.LESS_THAN_OR_EQUALS="le",v.STARTS_AFTER="sa",v.ENDS_BEFORE="eb",v.APPROXIMATELY="ap",v.CONTAINS="contains",v.STARTS_WITH="sw",v.EXACT="exact",v.TEXT="text",v.NOT="not",v.ABOVE="above",v.BELOW="below",v.IN="in",v.NOT_IN="not-in",v.OF_TYPE="of-type",v.MISSING="missing",v.PRESENT="present",v.IDENTIFIER="identifier",v.ITERATE="iterate",v))(fi||{}),hi={contains:"contains",exact:"exact",above:"above",below:"below",text:"text",not:"not",in:"in","not-in":"not-in","of-type":"of-type",missing:"missing",identifier:"identifier",iterate:"iterate"},Mr={eq:"eq",ne:"ne",lt:"lt",le:"le",gt:"gt",ge:"ge",sa:"sa",eb:"eb",ap:"ap",sw:"sw"};function je(r,e){if(!r)throw new Error("Invalid search URL");let t="",n;if(typeof r=="string")if(r.includes("?")){let[s,a]=r.split("?");t=s,n=new URLSearchParams(a)}else t=r;else typeof r=="object"&&(t=r.pathname,n=r.searchParams);let i;t.includes("/")?i=t.split("/").filter(Boolean).pop():i=t;let o=[];if(n&&o.push(...n.entries()),e)for(let[s,a]of Object.entries(e))if(Array.isArray(a))for(let c of a)o.push([s,c]);else o.push([s,a??""]);return ys(i,o)}function ys(r,e){let t={resourceType:r};for(let[n,i]of e)gs(t,n,i);return t}function gs(r,e,t){let n,i,o=e.indexOf(":");if(o>=0?(n=e.substring(0,o),i=e.substring(o+1)):(n=e,i=""),n!=="_"){if(n==="_has"||e.includes(".")){r.filters=Oe(r.filters,{code:e,operator:"eq",value:t});return}switch(n){case"_sort":xs(r,t);break;case"_cursor":r.cursor=t;break;case"_count":r.count=parseInt(t,10);break;case"_offset":r.offset=parseInt(t,10);break;case"_total":r.total=t;break;case"_summary":t==="count"?(r.total="accurate",r.count=0):(t==="true"||t==="data"||t==="text")&&(r.summary=t);break;case"_include":{let s=li(t);i==="iterate"&&(s.modifier="iterate"),r.include=Oe(r.include,s);break}case"_revinclude":{let s=li(t);i==="iterate"&&(s.modifier="iterate"),r.revInclude=Oe(r.revInclude,s);break}case"_fields":case"_elements":r.fields=t.split(",");break;case"_type":r.types=t.split(",");break;case"_format":r.format=t;break;case"_pretty":r.pretty=t==="true";break;default:{let s=F.types[r.resourceType]?.searchParams?.[n];s?r.filters=Oe(r.filters,Ts(s,i,t)):r.filters=Oe(r.filters,Ss(n,i,t))}}}}function xs(r,e){for(let t of e.split(",")){let n,i=!1;t.startsWith("-")?(n=t.substring(1),i=!0):n=t,r.sortRules||(r.sortRules=[]),r.sortRules.push({code:n,descending:i})}}var vs=["missing","present"];function Ts(r,e,t){if(vs.includes(e))return{code:r.code,operator:e,value:t};switch(r.type){case"number":case"date":case"quantity":{let{operator:n,value:i}=bs(t);if(!di(r,i))throw new p(S(`Invalid format for ${r.type} search parameter: ${i}`));return{code:r.code,operator:n,value:i}}case"reference":case"string":case"token":case"uri":if(!di(r,t))throw new p(S(`Invalid format for ${r.type} search parameter: ${t}`));return{code:r.code,operator:Es(e),value:t};default:throw new Error("Unrecognized search parameter type: "+r.type)}}function Ss(r,e,t){let n="eq";if(e)n=e;else if(t.length>=2){let i=t.substring(0,2);i in Mr&&(t.length===2||t.at(2)?.match(/\d/))&&(n=i,t=t.substring(i.length))}return{code:r,operator:n,value:t}}function bs(r){let e=r.substring(0,2),t=Mr[e];return t?{operator:t,value:r.substring(2)}:{operator:"eq",value:r}}function Es(r){return hi[r]??"eq"}function li(r){let e=r.split(":");if(e.includes("*"))throw new p(S("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new p(S(`Invalid include value '${r}': must be of the form ResourceType:search-parameter`));if(e.length===2)return{resourceType:e[0],searchParam:e[1]};if(e.length===3)return{resourceType:e[0],searchParam:e[1],targetType:e[2]};throw new p(S(`Invalid include value '${r}'`))}function di(r,e){switch(r.type){case"date":return we(e);default:return!0}}var Rs=/{{([^{}]+)}}/g;function Id(r,e){return r=r.replaceAll(Rs,(t,n)=>{let i=w(n,[],e);return i.length!==1?"":oi(i[0])}),je(r)}function kd(r){let e=[];return r.fields&&e.push("_fields="+r.fields.join(",")),r.filters&&r.filters.forEach(t=>e.push(Cs(t))),r.sortRules&&r.sortRules.length>0&&e.push(Ps(r.sortRules)),r.cursor!==void 0&&e.push("_cursor="+encodeURIComponent(r.cursor)),r.offset!==void 0&&r.offset!==0&&e.push("_offset="+r.offset),r.count!==void 0&&e.push("_count="+r.count),r.total!==void 0&&e.push("_total="+r.total),r.include&&r.include.forEach(t=>e.push(pi("_include",t))),r.revInclude&&r.revInclude.forEach(t=>e.push(pi("_revinclude",t))),e.length===0?"":(ct(e),"?"+e.join("&"))}function Cs(r){let e=r.operator in hi?":"+r.operator:"",t=r.operator!=="eq"&&r.operator in Mr?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function Ps(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function pi(r,e){return r+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function Rt(r){let e=[],t="",n=!1;for(let i of r)n?(t+=i,n=!1):i==="\\"?n=!0:i===","?(e.push(t),t=""):t+=i;return e.push(t),e}function Ct(r,e){if(e.resourceType!==r.resourceType)return!1;if(e.filters){for(let t of e.filters)if(!ws(r,e,t))return!1}return!0}function ws(r,e,t){let n=F.types[e.resourceType]?.searchParams?.[t.code];if(!n)return!1;if(t.operator==="missing"||t.operator==="present")return As(r,t,n);switch(n.type){case"reference":return Os(r,t,n);case"string":case"uri":return mi(r,t,n);case"token":return Is(r,t,n);case"date":return Ms(r,t,n);default:return!1}}function As(r,e,t){let i=De(t.expression,r).length>0;return(e.operator==="missing"&&e.value==="false"||e.operator==="present"&&e.value==="true")===i}function Os(r,e,t){let n=De(t.expression,r),i=Pt(e.operator);if(e.value===""&&n.length===0)return e.operator==="eq";let o=n.map(s=>typeof s=="string"?s:s.reference);for(let s of Rt(e.value)){let a=o.includes(s);if(!a&&e.code==="_compartment"&&(a=o.some(c=>c?.endsWith("/"+s))),a)return!i}return i}function Is(r,e,t){return Vr(r.resourceType,t).type==="BOOLEAN"?ks(r,e,t):mi(r,e,t,!0)}function ks(r,e,t){let n=De(t.expression,r),i=e.value==="true",o=n.includes(i);return Pt(e.operator)?!o:o}function mi(r,e,t,n){let o=Vr(r.resourceType,t).elementDefinitions?.[0]?.type?.[0]?.code,s=De(t.expression,r),a=Rt(e.value),c=Pt(e.operator);for(let u of s)for(let l of a){let h;if(o===d.Identifier?h=Ds(u,e.operator,l):o===d.CodeableConcept?h=Vs(u,e.operator,l):h=_r(u,e.operator,l,n),h)return!c}return c}function _r(r,e,t,n){if(n&&t.includes("|")){let[o,s]=t.split("|");return _r(r,e,o,!1)&&(!s||_r(r,e,s,!1))}let i="";return r&&(typeof r=="string"?i=r:typeof r=="object"&&(i=JSON.stringify(r))),i.toLowerCase().includes(t.toLowerCase())}function Ds(r,e,t){if(t.includes("|")){let[n,i]=t.split("|").map(o=>o.toLowerCase());return!n&&!i?!1:n?r.system?.toLowerCase()===n&&(!i||r.value?.toLowerCase()===i):!r.system&&r.value?.toLowerCase()===i}return r.value?.toLowerCase()===t.toLowerCase()}function Vs(r,e,t){if(t.includes("|")){let[n,i]=t.split("|").map(o=>o.toLowerCase());return!n&&!i?!1:n?r.coding?.some(o=>o.system?.toLowerCase()===n&&(!i||o.code?.toLowerCase()===i))??!1:r.coding?.some(o=>!o.system&&o.code?.toLowerCase()===i)??!1}return r.text?.toLowerCase()===t.toLowerCase()||(r.coding?.some(n=>n.code?.toLowerCase()===t.toLowerCase())??!1)}function Ms(r,e,t){let n=De(t.expression,r),i=Rt(e.value),o=Pt(e.operator);for(let s of n)for(let a of i)if(_s(s,e.operator,a))return!o;return o}function _s(r,e,t){switch(e){case"sa":case"gt":return r>t;case"ge":return r>=t;case"eb":case"lt":return r<t;case"le":return r<=t;case"eq":case"ne":return r===t;default:return!1}}function Pt(r){return r==="ne"||r==="not"}var Ns={resourceType:"*"},Fs=["DomainConfiguration","JsonWebKey","Login"],Ls=["PasswordChangeRequest","UserSecurityRequest","Project","ProjectMembership","User"],Us=(E=>(E.READ="read",E.VREAD="vread",E.UPDATE="update",E.PATCH="patch",E.DELETE="delete",E.HISTORY="history",E.HISTORY_INSTANCE="history-instance",E.HISTORY_TYPE="history-type",E.HISTORY_SYSTEM="history-system",E.CREATE="create",E.SEARCH="search",E.SEARCH_TYPE="search-type",E.SEARCH_SYSTEM="search-system",E.SEARCH_COMPARTMENT="search-compartment",E.CAPABILITIES="capabilities",E.TRANSACTION="transaction",E.BATCH="batch",E.OPERATION="operation",E))(Us||{}),Bs=["read","vread","history","history-instance"];function qd(r,e){if(r.resource){for(let t of r.resource)if(Nr(t.resourceType,e))return!0}return!1}function Ws(r,e){if(Fs.includes(e))return!1;if(r.resource){for(let t of r.resource)if(Nr(t.resourceType,e)&&!t.readonly)return!0}return!1}function jd(r,e){let t=e.resourceType;return Ws(r,t)?!!qs(e,"update",r):!1}function qs(r,e,t){if(!t)return Ns;if(t.resource){for(let n of t.resource)if(js(r,e,n))return n}}function js(r,e,t){let n=r.resourceType;return!(!Nr(t.resourceType,n)||t.readonly&&!Bs.includes(e)||t.compartment&&!r.meta?.compartment?.find(i=>i.reference===t.compartment?.reference)||t.criteria&&!Ct(r,je(t.criteria)))}function Nr(r,e){return r===e||r==="*"&&!Ls.includes(e)}function yi(r){if(typeof window<"u"){let e=window.atob(r),t=Uint8Array.from(e,n=>n.charCodeAt(0));return new window.TextDecoder().decode(t)}if(typeof Buffer<"u")return Buffer.from(r,"base64").toString("utf-8");throw new Error("Unable to decode base64")}function Fr(r){if(typeof window<"u"){let e=new window.TextEncoder().encode(r),t=String.fromCharCode.apply(null,e);return window.btoa(t)}if(typeof Buffer<"u")return Buffer.from(r,"utf8").toString("base64");throw new Error("Unable to encode base64")}function Lr(){let r=new Uint32Array(28);return crypto.getRandomValues(r),Qn(r.buffer)}async function gi(r){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(r))}function ve(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,r=>{let e=Math.random()*16|0;return(r==="x"?e:e&3|8).toString(16)})}function $s(r){let e={};r=fe(r);for(let i of r.entry||[]){i.resource?.meta!==void 0&&(delete i.resource.meta.author,delete i.resource.meta.compartment,delete i.resource.meta.lastUpdated,delete i.resource.meta.project,delete i.resource.meta.versionId);let o=i.resource?.id;o&&(e[o]=ve(),i.fullUrl="urn:uuid:"+e[o],delete i.resource?.id)}let t=r.entry,n=JSON.stringify({resourceType:"Bundle",type:"transaction",entry:t?.map(i=>({fullUrl:i.fullUrl,request:{method:"POST",url:i.resource.resourceType},resource:i.resource}))},(i,o)=>Gs(i,o,e),2);return Hs(JSON.parse(n))}function Gs(r,e,t){if(r==="reference"&&typeof e=="string"){let n;if(e.includes("/")?n=e.split("/")[1]:e.startsWith("urn:uuid:")?n=e.slice(9):e.startsWith("#")&&(n=e.slice(1)),n){let i=t[n];if(i)return"urn:uuid:"+i}}return e}function Hs(r){let e=zs(r),{sorted:t,cycles:n}=Qs(e),i={};for(let s of r.entry??[])s.fullUrl&&(i[s.fullUrl]=s);let o=t.map(s=>i[s]);for(let s of n)for(let a of s){let c=i[a],u={...c,request:{...c.request,method:"PUT"}};o.push(u)}return{...r,entry:o}}function Qs(r){let e=[],t={},n=[];for(let o of Object.keys(r))t[o]=0;function i(o,s){if(t[o]===2)return!0;if(t[o]===1){let c=s.lastIndexOf(o);return c!==-1&&n.push(s.slice(c)),!0}t[o]=1,s.push(o);let a=!1;for(let c of r[o])i(c,s)||(a=!0);return t[o]=2,s.pop(),e.unshift(o),!a}for(let o in r)t[o]===0&&i(o,[]);return{sorted:e,cycles:n}}function xi(r,e){for(let t in r)if(r[t]&&typeof r[t]=="object"){let n=r[t];if(J(n)){let i=n.reference;i.startsWith("urn:uuid:")&&e(i)}else xi(n,e)}}function zs(r){let e={};for(let t of r.entry||[])t.fullUrl&&(e[t.fullUrl]=[]);for(let t of r.entry||[]){let n=t.fullUrl;t.resource&&xi(t.resource,i=>{e[i]&&e[i].push(n)})}return e}function Yd(r){r=fe(r);let e={resourceType:"Bundle",type:"transaction",entry:[{resource:r}]};if(r.contained){for(let t of r.contained)e.entry.push({resource:t});r.contained=void 0}for(let t of e.entry)t.resource&&!t.resource.id&&(t.resource.id=ve());return $s(e)}var wt=class{constructor(e=10){this.max=e,this.cache=new Map}clear(){this.cache.clear()}get(e){let t=this.cache.get(e);return t&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size>=this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}delete(e){this.cache.delete(e)}keys(){return this.cache.keys()}first(){return this.cache.keys().next().value}};var A={CSS:"text/css",DICOM:"application/dicom",FAVICON:"image/vnd.microsoft.icon",FHIR_JSON:"application/fhir+json",FORM_URL_ENCODED:"application/x-www-form-urlencoded",HL7_V2:"x-application/hl7-v2+er7",HTML:"text/html",JAVASCRIPT:"text/javascript",JSON:"application/json",JSON_PATCH:"application/json-patch+json",PNG:"image/png",SCIM_JSON:"application/scim+json",SVG:"image/svg+xml",TEXT:"text/plain",TYPESCRIPT:"text/typescript",PING:"x-application/ping",XML:"text/xml",CDA_XML:"application/cda+xml"};var Ur=class{constructor(){this.listeners={}}addEventListener(e,t){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)}removeEventListener(e,t){let n=this.listeners[e];if(n){for(let i=0;i<n.length;i++)if(n[i]===t){n.splice(i,1);return}}}dispatchEvent(e){let t=this.listeners[e.type];if(t)for(let n of t)n.call(this,e);return!e.defaultPrevented}removeAllListeners(){this.listeners={}}},z=class{constructor(){this.emitter=new Ur}dispatchEvent(e){this.emitter.dispatchEvent(e)}addEventListener(e,t){this.emitter.addEventListener(e,t)}removeEventListener(e,t){this.emitter.removeEventListener(e,t)}removeAllListeners(){this.emitter.removeAllListeners()}};var Br={"Patient-open":"Patient-open","Patient-close":"Patient-close","ImagingStudy-open":"ImagingStudy-open","ImagingStudy-close":"ImagingStudy-close","Encounter-open":"Encounter-open","Encounter-close":"Encounter-close","DiagnosticReport-open":"DiagnosticReport-open","DiagnosticReport-close":"DiagnosticReport-close","DiagnosticReport-select":"DiagnosticReport-select","DiagnosticReport-update":"DiagnosticReport-update",syncerror:"syncerror"},Js=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],Wr=["DiagnosticReport-update"];function vi(r){return Wr.includes(r)}function Ti(r){if(Wr.includes(r))throw new p(m(`'context.version' is required for '${r}'.`))}var Ks={"Patient-open":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"Patient-close":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"ImagingStudy-open":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"ImagingStudy-close":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"Encounter-open":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"Encounter-close":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"DiagnosticReport-open":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-close":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-select":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},select:{resourceType:"*",reference:!0,manyAllowed:!0}},"DiagnosticReport-update":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},updates:{resourceType:"Bundle"}},syncerror:{operationoutcome:{resourceType:"OperationOutcome"}}};function Ys(r){return Js.includes(r)}function Si(r){return!!r.endpoint}function qr(r){if(!Ot(r))throw new p(m("subscriptionRequest must be an object conforming to SubscriptionRequest type."));let{channelType:e,mode:t,topic:n,events:i}=r,o={"hub.channel.type":e,"hub.mode":t,"hub.topic":n,"hub.events":i.join(",")};return Si(r)&&(o.endpoint=r.endpoint),new URLSearchParams(o).toString()}function Ot(r){if(typeof r!="object")return!1;let{channelType:e,mode:t,topic:n,events:i}=r;if(!(e&&t&&n&&i)||typeof n!="string"||typeof i!="object"||!Array.isArray(i)||i.length<1||e!=="websocket"||t!=="subscribe"&&t!=="unsubscribe")return!1;for(let o of i)if(!Br[o])return!1;return!(Si(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function Zs(r,e,t,n){if(typeof e!="object")throw new p(m(`context[${t}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.id&&typeof e.id=="string"))throw new p(m(`context[${t}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new p(m(`context[${t}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!Ys(e.resourceType))throw new p(m(`context[${t}] is invalid. Resource must contain a valid FHIRcast resource type. Resource type is not a known resource type.`));if(i&&e.resourceType!==i)throw new p(m(`context[${t}] is invalid. context[${t}] for the '${r}' event should contain resource of type ${i}.`))}}function Xs(r,e,t,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),n.reference){if(!J(e.reference))throw new p(m(`context[${t}] is invalid. Expected key '${e.key}' to be a reference.`))}else Zs(r,e.resource,t,n)}function ea(r,e){let t=new Map,n=Ks[r];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new p(m(`Key '${o}' not found for event '${r}'. Make sure to add only valid keys.`));Xs(r,e[i],i,n[o],t)}for(let[i,o]of Object.entries(n)){if(!(o.optional||t.has(i)))throw new p(m(`Missing required key '${i}' on context for '${r}' event.`));if(!o.manyAllowed&&(t.get(i)??0)>1)throw new p(m(`${t.get(i)} context entries with key '${i}' found for the '${r}' event when schema only allows for 1.`))}}function jr(r,e,t,n){if(!(r&&typeof r=="string"))throw new p(m("Must provide a topic."));if(!Br[e])throw new p(m(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(Br).join(", ")}`));if(typeof t!="object")throw new p(m("context must be a context object or array of context objects."));if(Wr.includes(e)&&!n)throw new p(m(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(t)?t:[t];return ea(e,i),{timestamp:new Date().toISOString(),id:ve(),event:{"hub.topic":r,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var At=class extends z{constructor(e){if(super(),this.subRequest=e,!e.endpoint)throw new p(m("Subscription request should contain an endpoint."));if(!Ot(e))throw new p(m("Subscription request failed validation."));let t=new WebSocket(e.endpoint);t.addEventListener("open",()=>{this.dispatchEvent({type:"connect"}),t.addEventListener("message",n=>{let i=JSON.parse(n.data);if(i["hub.topic"])return;let o=i;o.event["hub.event"]!=="heartbeat"&&(this.dispatchEvent({type:"message",payload:o}),t.send(JSON.stringify({id:i?.id,timestamp:new Date().toISOString()})))}),t.addEventListener("close",()=>{this.dispatchEvent({type:"disconnect"})})}),this.websocket=t}disconnect(){this.websocket.close()}};function ta(r){let e=r.replace(/-/g,"+").replace(/_/g,"/"),t=yi(e),n=Array.from(t).reduce((o,s)=>{let a=("00"+s.charCodeAt(0).toString(16)).slice(-2);return`${o}%${a}`},""),i=decodeURIComponent(n);return JSON.parse(i)}function bi(r){return r.split(".").length===3}function It(r){let[e,t,n]=r.split(".");return ta(t)}function Ei(r){try{return typeof It(r).login_id=="string"}catch{return!1}}function Ri(r){try{let t=It(r).exp;return typeof t=="number"?t*1e3:void 0}catch{return}}var kt=class{constructor(e){this.medplum=e}async get(e){return this.medplum.get(`keyvalue/v1/${e}`)}async set(e,t){await this.medplum.put(`keyvalue/v1/${e}`,t,A.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var Ci;Ci=Symbol.toStringTag;var M=class{constructor(e){this[Ci]="ReadablePromise";this.status="pending";this.suspender=e.then(t=>(this.status="success",this.response=t,t),t=>{throw this.status="error",this.error=t,t})}isPending(){return this.status==="pending"}isOk(){return this.status==="success"}read(){switch(this.status){case"pending":throw this.suspender;case"error":throw this.error;default:return this.response}}then(e,t){return this.suspender.then(e,t)}catch(e){return this.suspender.catch(e)}finally(e){return this.suspender.finally(e)}};var $e=class{constructor(e){this.storage=e??(typeof localStorage<"u"?localStorage:new $r)}clear(){this.storage.clear()}getString(e){return this.storage.getItem(e)??void 0}setString(e,t){t?this.storage.setItem(e,t):this.storage.removeItem(e)}getObject(e){let t=this.getString(e);return t?JSON.parse(t):void 0}setObject(e,t){this.setString(e,t?at(t):void 0)}},$r=class{constructor(){this.data=new Map}get length(){return this.data.size}clear(){this.data.clear()}getItem(e){return this.data.get(e)??null}setItem(e,t){t?this.data.set(e,t):this.data.delete(e)}removeItem(e){this.data.delete(e)}key(e){return Array.from(this.data.keys())[e]}},Pi=class extends $e{constructor(){super();this.initResolve=()=>{};this.initialized=!1,this.initPromise=new Promise(t=>{this.initResolve=t})}setInitialized(){this.initialized||(this.initResolve(),this.initialized=!0)}getInitPromise(){return this.initPromise}get isInitialized(){return this.initialized}};var Ve={Event:typeof globalThis.Event<"u"?globalThis.Event:void 0,ErrorEvent:void 0,CloseEvent:void 0},wi=!1;function ra(){if(typeof globalThis.Event>"u")throw new Error("Unable to lazy init events for ReconnectingWebSocket. globalThis.Event is not defined yet");Ve.Event=globalThis.Event,Ve.ErrorEvent=class extends Event{constructor(e,t){super("error",t),this.message=e.message,this.error=e}},Ve.CloseEvent=class extends Event{constructor(t=1e3,n="",i){super("close",i);this.wasClean=!0;this.code=t,this.reason=n}}}function na(r,e){if(!r)throw new Error(e)}function Dt(r){return new r.constructor(r.type,r)}var Te={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},Ai=!1,Vt=class r extends z{constructor(t,n,i={}){wi||(ra(),wi=!0);super();this._retryCount=-1;this._shouldReconnect=!0;this._connectLock=!1;this._closeCalled=!1;this._messageQueue=[];this._debugLogger=console.log.bind(console);this.onclose=null;this.onerror=null;this.onmessage=null;this.onopen=null;this._handleOpen=t=>{this._debug("open event");let{minUptime:n=Te.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),n),na(this._ws,"WebSocket is not defined"),this._ws.binaryType=this._binaryType,this._messageQueue.forEach(i=>this._ws?.send(i)),this._messageQueue=[],this.onopen&&this.onopen(t),this.dispatchEvent(Dt(t))};this._handleMessage=t=>{this._debug("message event"),this.onmessage&&this.onmessage(t),this.dispatchEvent(Dt(t))};this._handleError=t=>{this._debug("error event",t.message),this._disconnect(void 0,t.message==="TIMEOUT"?"timeout":void 0),this.onerror&&this.onerror(t),this._debug("exec error listeners"),this.dispatchEvent(Dt(t)),this._connect()};this._handleClose=t=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(t),this.dispatchEvent(Dt(t))};this._url=t,this._protocols=n,this._options=i,this._options.startClosed&&(this._shouldReconnect=!1),this._options.binaryType?this._binaryType=this._options.binaryType:this._binaryType="blob",this._options.debugLogger&&(this._debugLogger=this._options.debugLogger),this._connect()}static get CONNECTING(){return 0}static get OPEN(){return 1}static get CLOSING(){return 2}static get CLOSED(){return 3}get CONNECTING(){return r.CONNECTING}get OPEN(){return r.OPEN}get CLOSING(){return r.CLOSING}get CLOSED(){return r.CLOSED}get binaryType(){return this._ws?this._ws.binaryType:this._binaryType}set binaryType(t){this._binaryType=t,this._ws&&(this._ws.binaryType=t)}get retryCount(){return Math.max(this._retryCount,0)}get bufferedAmount(){return this._messageQueue.reduce((n,i)=>(typeof i=="string"?n+=i.length:i instanceof Blob?n+=i.size:n+=i.byteLength,n),0)+(this._ws?.bufferedAmount??0)}get extensions(){return this._ws?.extensions??""}get protocol(){return this._ws?.protocol??""}get readyState(){return this._ws?this._ws.readyState:this._options.startClosed?r.CLOSED:r.CONNECTING}get url(){return this._ws?this._ws.url:""}get shouldReconnect(){return this._shouldReconnect}close(t=1e3,n){if(this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),!this._ws){this._debug("close enqueued: no ws instance");return}if(this._ws.readyState===this.CLOSED){this._debug("close: already closed");return}this._ws.close(t,n)}reconnect(t,n){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED?this._connect():(this._disconnect(t,n),this._connect())}send(t){if(this._ws&&this._ws.readyState===this.OPEN)this._debug("send",t),this._ws.send(t);else{let{maxEnqueuedMessages:n=Te.maxEnqueuedMessages}=this._options;this._messageQueue.length<n&&(this._debug("enqueue",t),this._messageQueue.push(t))}}_debug(...t){this._options.debug&&this._debugLogger("RWS>",...t)}_getNextDelay(){let{reconnectionDelayGrowFactor:t=Te.reconnectionDelayGrowFactor,minReconnectionDelay:n=Te.minReconnectionDelay,maxReconnectionDelay:i=Te.maxReconnectionDelay}=this._options,o=0;return this._retryCount>0&&(o=n*Math.pow(t,this._retryCount-1),o>i&&(o=i)),this._debug("next delay",o),o}_wait(){return new Promise(t=>{setTimeout(t,this._getNextDelay())})}_connect(){if(this._connectLock||!this._shouldReconnect)return;this._connectLock=!0;let{maxRetries:t=Te.maxRetries,connectionTimeout:n=Te.connectionTimeout}=this._options;if(this._retryCount>=t){this._debug("max retries reached",this._retryCount,">=",t);return}this._retryCount++,this._debug("connect",this._retryCount),this._removeListeners(),this._wait().then(()=>{if(this._closeCalled){this._connectLock=!1;return}!this._options.WebSocket&&typeof WebSocket>"u"&&!Ai&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),Ai=!0);let i=this._options.WebSocket||WebSocket;this._debug("connect",{url:this._url,protocols:this._protocols}),this._ws=this._protocols?new i(this._url,this._protocols):new i(this._url),this._ws.binaryType=this._binaryType,this._connectLock=!1,this._addListeners(),this._connectTimeout=setTimeout(()=>this._handleTimeout(),n)}).catch(i=>{this._connectLock=!1,this._handleError(new Ve.ErrorEvent(Error(i.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new Ve.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(t=1e3,n){if(this._clearTimeouts(),!!this._ws){this._removeListeners();try{this._ws.close(t,n),this._handleClose(new Ve.CloseEvent(t,n,this))}catch{}}}_acceptOpen(){this._debug("accept open"),this._retryCount=0}_removeListeners(){this._ws&&(this._debug("removeListeners"),this._ws.removeEventListener("open",this._handleOpen),this._ws.removeEventListener("close",this._handleClose),this._ws.removeEventListener("message",this._handleMessage),this._ws.removeEventListener("error",this._handleError))}_addListeners(){this._ws&&(this._debug("addListeners"),this._ws.addEventListener("open",this._handleOpen),this._ws.addEventListener("close",this._handleClose),this._ws.addEventListener("message",this._handleMessage),this._ws.addEventListener("error",this._handleError))}_clearTimeouts(){clearTimeout(this._connectTimeout),clearTimeout(this._uptimeTimeout)}};var ia=5e3,Ge=class extends z{constructor(...e){super(),this.criteria=new Set(e)}getCriteria(){return this.criteria}_addCriteria(e){this.criteria.add(e)}_removeCriteria(e){this.criteria.delete(e)}},Gr=class{constructor(e,t){this.connecting=!1;this.criteria=e,this.emitter=new Ge(e),this.refCount=1,this.subscriptionProps=t?{...t}:void 0}clearAttachedSubscription(){this.subscriptionId=void 0,this.token=void 0}},Mt=class{constructor(e,t,n){this.pingTimer=void 0;this.waitingForPong=!1;if(!(e instanceof _t))throw new p(m("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(t).toString()}catch{throw new p(m("Not a valid URL"))}let o=n?.ReconnectingWebSocket?new n.ReconnectingWebSocket(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger}):new Vt(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger});this.medplum=e,this.ws=o,this.masterSubEmitter=new Ge,this.criteriaEntries=new Map,this.criteriaEntriesBySubscriptionId=new Map,this.wsClosed=!1,this.pingIntervalMs=n?.pingIntervalMs??ia,this.currentProfile=e.getProfile(),this.setupListeners()}setupListeners(){let e=this.ws;e.addEventListener("message",t=>{try{let n=JSON.parse(t.data);if(n.type==="pong"){this.waitingForPong=!1;return}let i=n,o=i?.entry?.[0]?.resource;if(o.type==="heartbeat"){this.masterSubEmitter?.dispatchEvent({type:"heartbeat",payload:i});return}if(o.type==="handshake"){let a=pe(o.subscription),c={type:"connect",payload:{subscriptionId:a}};this.masterSubEmitter?.dispatchEvent(c);let u=this.criteriaEntriesBySubscriptionId.get(a);if(!u){console.warn("Received handshake for criteria the SubscriptionManager is not listening for yet");return}u.connecting=!1,u.emitter.dispatchEvent({...c});return}this.masterSubEmitter?.dispatchEvent({type:"message",payload:i});let s=this.criteriaEntriesBySubscriptionId.get(pe(o.subscription));if(!s){console.warn("Received notification for criteria the SubscriptionManager is not listening for");return}s.emitter.dispatchEvent({type:"message",payload:i})}catch(n){console.error(n);let i={type:"error",payload:n};this.masterSubEmitter?.dispatchEvent(i);for(let o of this.getAllCriteriaEmitters())o.dispatchEvent({...i})}}),e.addEventListener("error",()=>{let t={type:"error",payload:new p(hn(new Error("WebSocket error")))};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t})}),e.addEventListener("close",()=>{let t={type:"close"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=void 0,this.waitingForPong=!1),this.wsClosed&&(this.criteriaEntries.clear(),this.criteriaEntriesBySubscriptionId.clear(),this.masterSubEmitter?.removeAllListeners())}),e.addEventListener("open",()=>{let t={type:"open"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.refreshAllSubscriptions().catch(console.error),this.pingTimer||(this.pingTimer=setInterval(()=>{if(this.waitingForPong){this.waitingForPong=!1,e.reconnect();return}e.send(JSON.stringify({type:"ping"})),this.waitingForPong=!0},this.pingIntervalMs))}),this.medplum.addEventListener("change",()=>{let t=this.medplum.getProfile();this.currentProfile&&t===void 0?this.ws.close():t&&this.currentProfile?.id!==t.id&&this.ws.reconnect(),this.currentProfile=t})}emitError(e,t){let n={type:"error",payload:t};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}maybeEmitDisconnect(e){let{subscriptionId:t}=e;if(t){let n={type:"disconnect",payload:{subscriptionId:t}};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}else console.warn("Called disconnect for `CriteriaEntry` before `subscriptionId` was present.")}async getTokenForCriteria(e){let t=e?.subscriptionId;t||(t=(await this.medplum.createResource({...e.subscriptionProps,resourceType:"Subscription",status:"active",reason:`WebSocket subscription for ${K(this.medplum.getProfile())}`,channel:{type:"websocket"},criteria:e.criteria})).id);let{parameter:n}=await this.medplum.get(`fhir/R4/Subscription/${t}/$get-ws-binding-token`),i=n?.find(s=>s.name==="token")?.valueString,o=n?.find(s=>s.name==="websocket-url")?.valueUrl;if(!i)throw new p(m("Failed to get token"));if(!o)throw new p(m("Failed to get URL from $get-ws-binding-token"));return[t,i]}maybeGetCriteriaEntry(e,t){let n=this.criteriaEntries.get(e);if(n){if(!t)return n.bareCriteria;for(let i of n.criteriaWithProps)if(ne(t,i.subscriptionProps))return i}}getAllCriteriaEmitters(){let e=[];for(let t of this.criteriaEntries.values()){t.bareCriteria&&e.push(t.bareCriteria.emitter);for(let n of t.criteriaWithProps)e.push(n.emitter)}return e}addCriteriaEntry(e){let{criteria:t,subscriptionProps:n}=e,i;this.criteriaEntries.has(t)?i=this.criteriaEntries.get(t):(i={criteriaWithProps:[]},this.criteriaEntries.set(t,i)),n?i.criteriaWithProps.push(e):i.bareCriteria=e}removeCriteriaEntry(e){let{criteria:t,subscriptionProps:n,subscriptionId:i,token:o}=e;if(!this.criteriaEntries.has(t))return;let s=this.criteriaEntries.get(t);n?s.criteriaWithProps=s.criteriaWithProps.filter(a=>{let c=a.subscriptionProps;return!ne(n,c)}):s.bareCriteria=void 0,!s.bareCriteria&&s.criteriaWithProps.length===0&&(this.criteriaEntries.delete(t),this.masterSubEmitter?._removeCriteria(t)),i&&this.criteriaEntriesBySubscriptionId.delete(i),o&&this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"unbind-from-token",payload:{token:o}}))}async subscribeToCriteria(e){if(!(this.ws.readyState!==WebSocket.OPEN||e.connecting)){e.connecting=!0;try{let[t,n]=await this.getTokenForCriteria(e);e.subscriptionId=t,e.token=n,this.criteriaEntriesBySubscriptionId.set(t,e),this.ws.send(JSON.stringify({type:"bind-with-token",payload:{token:n}}))}catch(t){console.error(Re(t)),this.emitError(e,t),this.removeCriteriaEntry(e)}}}async refreshAllSubscriptions(){this.criteriaEntriesBySubscriptionId.clear();for(let e of this.criteriaEntries.values())for(let t of[...e.bareCriteria?[e.bareCriteria]:[],...e.criteriaWithProps])t.clearAttachedSubscription(),await this.subscribeToCriteria(t)}addCriteria(e,t){this.masterSubEmitter&&this.masterSubEmitter._addCriteria(e);let n=this.maybeGetCriteriaEntry(e,t);if(n)return n.refCount+=1,n.emitter;let i=new Gr(e,t);return this.addCriteriaEntry(i),this.subscribeToCriteria(i).catch(console.error),i.emitter}removeCriteria(e,t){let n=this.maybeGetCriteriaEntry(e,t);if(!n){console.warn("Criteria not known to `SubscriptionManager`. Possibly called remove too many times.");return}n.refCount-=1,!(n.refCount>0)&&(this.maybeEmitDisconnect(n),this.removeCriteriaEntry(n))}getWebSocket(){return this.ws}closeWebSocket(){this.wsClosed||(this.wsClosed=!0,this.ws.close())}reconnectWebSocket(){this.ws.reconnect(),this.wsClosed=!1}getCriteriaCount(){return this.getAllCriteriaEmitters().length}getMasterEmitter(){return this.masterSubEmitter||(this.masterSubEmitter=new Ge(...Array.from(this.criteriaEntries.keys()))),this.masterSubEmitter}};async function Ip({resource:r,subscription:e,context:t,getPreviousResource:n,logger:i}){if(e.meta?.account&&r.meta?.account?.reference!==e.meta.account.reference)return i?.debug("Ignore resource in different account compartment"),!1;if(!oa(e,i))return i?.debug("Ignore subscription without recognized channel type"),!1;let o=e.criteria;if(!o)return i?.debug("Ignore rest hook missing criteria"),!1;let s=je(o);if(r.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${r.resourceType}")`),!1;if(!await sa(e,r,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let c=re(e,"https://medplum.com/fhir/StructureDefinition/subscription-supported-interaction");return c&&c.valueCode!==t.interaction?(i?.debug(`Ignore rest hook for different interaction (wanted "${c.valueCode}", received "${t.interaction}")`),!1):Ct(r,s)}function oa(r,e){let t=r.channel?.type;return t==="rest-hook"?r.channel?.endpoint?!0:(e?.debug("Ignore rest-hook missing URL"),!1):t==="websocket"}async function sa(r,e,t){let n=re(r,"https://medplum.com/fhir/StructureDefinition/fhir-path-criteria-expression");if(!n?.valueString)return!0;let i=await t(e),o={"%current":x(e),"%previous":x(i??{})};return w(n.valueString,[x(e)],o)?.[0]?.value===!0}var Hr="4.0.1-f83455f0c",af="medplum-cli",aa=A.FHIR_JSON+", */*; q=0.1",ca="https://api.medplum.com/",ua=1e3,la=6e4,da=0,pa=3e5,fa="Binary/",Oi={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},ha=(o=>(o.ClientCredentials="client_credentials",o.AuthorizationCode="authorization_code",o.RefreshToken="refresh_token",o.JwtBearer="urn:ietf:params:oauth:grant-type:jwt-bearer",o.TokenExchange="urn:ietf:params:oauth:grant-type:token-exchange",o))(ha||{}),ma=(o=>(o.AccessToken="urn:ietf:params:oauth:token-type:access_token",o.RefreshToken="urn:ietf:params:oauth:token-type:refresh_token",o.IdToken="urn:ietf:params:oauth:token-type:id_token",o.Saml1Token="urn:ietf:params:oauth:token-type:saml1",o.Saml2Token="urn:ietf:params:oauth:token-type:saml2",o))(ma||{}),ya=(o=>(o.ClientSecretBasic="client_secret_basic",o.ClientSecretPost="client_secret_post",o.ClientSecretJwt="client_secret_jwt",o.PrivateKeyJwt="private_key_jwt",o.None="none",o))(ya||{}),ga=(e=>(e.JwtBearer="urn:ietf:params:oauth:client-assertion-type:jwt-bearer",e))(ga||{}),_t=class extends z{constructor(t){super();this.initComplete=!0;if(t?.baseUrl&&!t.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");this.options=t??{},this.fetch=t?.fetch??xa(),this.storage=t?.storage??new $e,this.createPdfImpl=t?.createPdf,this.baseUrl=wr(t?.baseUrl??ca),this.fhirBaseUrl=W(this.baseUrl,t?.fhirUrlPath??"fhir/R4"),this.authorizeUrl=W(this.baseUrl,t?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=W(this.baseUrl,t?.tokenUrl??"oauth2/token"),this.logoutUrl=W(this.baseUrl,t?.logoutUrl??"oauth2/logout"),this.fhircastHubUrl=W(this.baseUrl,t?.fhircastHubUrl??"fhircast/STU3"),this.clientId=t?.clientId??"",this.clientSecret=t?.clientSecret??"",this.credentialsInHeader=t?.authCredentialsMethod==="header",this.defaultHeaders=t?.defaultHeaders??{},this.onUnauthenticated=t?.onUnauthenticated,this.refreshGracePeriod=t?.refreshGracePeriod??pa,this.cacheTime=t?.cacheTime??(typeof window>"u"?da:la),this.cacheTime>0?this.requestCache=new wt(t?.resourceCacheSize??ua):this.requestCache=void 0,t?.autoBatchTime?(this.autoBatchTime=t.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0),t?.accessToken&&this.setAccessToken(t.accessToken),this.storage.getInitPromise===void 0?(t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initPromise=Promise.resolve(),this.dispatchEvent({type:"storageInitialized"})):(this.initComplete=!1,this.initPromise=this.storage.getInitPromise(),this.initPromise.then(()=>{t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initComplete=!0,this.dispatchEvent({type:"storageInitialized"})}).catch(n=>{console.error(n),this.initComplete=!0,this.dispatchEvent({type:"storageInitFailed",payload:{error:n}})})),this.setupStorageListener()}get isInitialized(){return this.initComplete}getInitPromise(){return this.initPromise}async attemptResumeActiveLogin(){let t=this.getActiveLogin();t&&(this.setAccessToken(t.accessToken,t.refreshToken),await this.refreshProfile())}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}getFhircastHubUrl(){return this.fhircastHubUrl}getDefaultHeaders(){return this.defaultHeaders}clear(){this.storage.clear(),typeof window<"u"&&sessionStorage.clear(),this.clearActiveLogin()}clearActiveLogin(){this.storage.setString("activeLogin",void 0),this.requestCache?.clear(),this.accessToken=void 0,this.refreshToken=void 0,this.refreshPromise=void 0,this.accessTokenExpires=void 0,this.sessionDetails=void 0,this.medplumServer=void 0,this.dispatchEvent({type:"change"})}invalidateUrl(t){t=t.toString(),this.requestCache?.delete(t)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(t){let n=W(this.fhirBaseUrl,t);if(this.requestCache)for(let i of this.requestCache.keys())(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache.delete(i)}get(t,n={}){t=t.toString();let i=this.getCacheEntry(t,n);if(i)return i.value;let o;t.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue&&!n.disableAutoBatch?o=new Promise((a,c)=>{this.autoBatchQueue.push({method:"GET",url:t.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:c}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):o=this.request("GET",t,n);let s=new M(o);return this.setCacheEntry(t,s),s}post(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("POST",t,o)}put(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("PUT",t,o)}patch(t,n,i={}){return t=t.toString(),this.setRequestBody(i,n),this.setRequestContentType(i,A.JSON_PATCH),this.invalidateUrl(t),this.request("PATCH",t,i)}delete(t,n){return t=t.toString(),this.invalidateUrl(t),this.request("DELETE",t,n)}async startNewUser(t,n){let{codeChallengeMethod:i,codeChallenge:o}=await this.startPkce();return this.post("auth/newuser",{...t,clientId:t.clientId??this.clientId,codeChallengeMethod:i,codeChallenge:o},void 0,n)}async startNewProject(t,n){return this.post("auth/newproject",t,void 0,n)}async startNewPatient(t,n){return this.post("auth/newpatient",t,void 0,n)}async startLogin(t,n){return this.post("auth/login",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async startGoogleLogin(t,n){return this.post("auth/google",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async ensureCodeChallenge(t){return t.codeChallenge?t:{...t,...await this.startPkce()}}async signOut(){await this.post(this.logoutUrl,{}),this.clear()}async signInWithRedirect(t){let i=new URLSearchParams(window.location.search).get("code");if(!i){await this.requestAuthorization(t);return}return this.processCode(i)}signOutWithRedirect(){window.location.assign(this.logoutUrl)}async signInWithExternalAuth(t,n,i,o,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),window.location.assign(this.getExternalAuthRedirectUri(t,n,i,a,s))}async exchangeExternalAccessToken(t,n){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");return this.fetchTokens({grant_type:"urn:ietf:params:oauth:grant-type:token-exchange",subject_token_type:"urn:ietf:params:oauth:token-type:access_token",client_id:n,subject_token:t})}getExternalAuthRedirectUri(t,n,i,o,s=!0){let a=new URL(t);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",n),a.searchParams.set("redirect_uri",i),a.searchParams.set("scope",o.scope??"openid profile email"),a.searchParams.set("state",JSON.stringify(o)),s){let{codeChallenge:c,codeChallengeMethod:u}=o;if(!u)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!c)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");a.searchParams.set("code_challenge_method",u),a.searchParams.set("code_challenge",c)}return a.toString()}fhirUrl(...t){return new URL(W(this.fhirBaseUrl,t.join("/")))}fhirSearchUrl(t,n){let i=this.fhirUrl(t);return n&&(i.search=ei(n)),i}search(t,n,i){let o=this.fhirSearchUrl(t,n),s="search-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=this.getBundle(o,i);return this.setCacheEntry(s,c),c}searchOne(t,n,i){let o=this.fhirSearchUrl(t,n);o.searchParams.set("_count","1"),o.searchParams.sort();let s="searchOne-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=new M(this.search(t,o.searchParams,i).then(u=>u.entry?.[0]?.resource));return this.setCacheEntry(s,c),c}searchResources(t,n,i){let s="searchResources-"+this.fhirSearchUrl(t,n).toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=new M(this.search(t,n,i).then(Di));return this.setCacheEntry(s,c),c}async*searchResourcePages(t,n,i){let o=this.fhirSearchUrl(t,n);for(;o;){let s=new URL(o).searchParams,a=await this.search(t,s,i),c=a.link?.find(u=>u.relation==="next");if(!a.entry?.length&&!c)break;yield Di(a),o=c?.url?new URL(c.url):void 0}}valueSetExpand(t,n){let i=this.fhirUrl("ValueSet","$expand");return i.search=new URLSearchParams(t).toString(),this.get(i.toString(),n)}getCached(t,n){let i=this.requestCache?.get(this.fhirUrl(t,n).toString())?.value;return i?.isOk()?i.read():void 0}getCachedReference(t){let n=t.reference;if(!n)return;if(n==="system")return Oi;let[i,o]=n.split("/");if(!(!i||!o))return this.getCached(i,o)}readResource(t,n,i){if(!n)throw new Error('The "id" parameter cannot be null, undefined, or an empty string.');return this.get(this.fhirUrl(t,n),i)}readReference(t,n){let i=t.reference;if(!i)return new M(Promise.reject(new Error("Missing reference")));if(i==="system")return new M(Promise.resolve(Oi));let[o,s]=i.split("/");return!o||!s?new M(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}requestSchema(t){if(Pn(t))return Promise.resolve();let n=t+"-requestSchema",i=this.getCacheEntry(n,void 0);if(i)return i.value;let o=new M((async()=>{let s=`{
4
4
  StructureDefinitionList(name: "${t}") {
5
5
  resourceType,
6
6
  name,
@@ -40,17 +40,17 @@ var ze=class{constructor(e,t){this.operator=e;this.child=t}toString(){return`${t
40
40
  expression,
41
41
  target
42
42
  }
43
- }`.replace(/\s+/g," "),a=await this.graphql(s);sr(a.data.StructureDefinitionList.filter(c=>c.name===t));for(let c of a.data.SearchParameterList)Or(c)})());return this.setCacheEntry(n,o),o}requestProfileSchema(t,n){if(!n?.expandProfile&&Pn(t))return Promise.resolve();let i=t+"-requestSchema"+(n?.expandProfile?"-nested":""),o=this.getCacheEntry(i,void 0);if(o)return o.value;let s=new M((async()=>{if(n?.expandProfile){let a=this.fhirUrl("StructureDefinition","$expand-profile");a.search=new URLSearchParams({url:t}).toString();let c=await this.post(a.toString(),{});sr(c)}else{let a=await this.searchOne("StructureDefinition",{url:t,_sort:"-_lastUpdated"});if(!a){console.warn(`No StructureDefinition found for ${t}!`);return}ar(a)}})());return this.setCacheEntry(i,s),s}readHistory(t,n,i){return this.get(this.fhirUrl(t,n,"_history"),i)}readVersion(t,n,i,o){return this.get(this.fhirUrl(t,n,"_history",i),o)}readPatientEverything(t,n){return this.getBundle(this.fhirUrl("Patient",t,"$everything"),n)}readPatientSummary(t,n){return this.getBundle(this.fhirUrl("Patient",t,"$summary"),n)}createResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");return this.invalidateSearches(t.resourceType),this.post(this.fhirUrl(t.resourceType),t,void 0,n)}async createResourceIfNoneExist(t,n,i){let o=this.fhirUrl(t.resourceType);i?i.headers?Array.isArray(i.headers)?i.headers.push(["If-None-Exist",n]):i.headers instanceof Headers?i.headers.set("If-None-Exist",n):i.headers["If-None-Exist"]=n:i.headers={"If-None-Exist":n}:i={headers:{"If-None-Exist":n}};let s=await this.post(o,t,void 0,i);return this.cacheResource(s),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),s}async upsertResource(t,n,i){let o=this.fhirSearchUrl(t.resourceType,n),s=await this.put(o,t,void 0,i);return s||(s=t),this.cacheResource(s),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),s}async createAttachment(t,n){if(t.contentType===A.XML){let o=t.data,s;o instanceof Blob?s=await new Promise((a,c)=>{let u=new FileReader;u.onload=()=>{if(!u.result){c(new Error("Failed to load file"));return}a(u.result)},u.readAsText(o,"utf-8")}):ArrayBuffer.isView(o)?s=new TextDecoder().decode(o):s=o,s.includes("<ClinicalDocument")&&s.includes("urn:hl7-org:v3")&&(t={...t,contentType:A.CDA_XML})}let i=await this.createBinary(t,n);return{contentType:t.contentType,url:i.url,title:t.filename}}createBinary(t,n={}){let{data:i,contentType:o,filename:s,securityContext:a,onProgress:c}=t,u=this.fhirUrl("Binary");return s&&u.searchParams.set("_filename",s),a?.reference&&this.setRequestHeader(n,"X-Security-Context",a.reference),c?this.uploadwithProgress(u,i,o,c,n):this.post(u,i,o,n)}uploadwithProgress(t,n,i,o,s){return new Promise((a,c)=>{let u=new XMLHttpRequest,p=()=>u.abort();s?.signal?.addEventListener("abort",p);let h=T=>{s?.signal?.removeEventListener("abort",p),T instanceof Error?c(T):a(T)};if(u.responseType="json",u.onabort=()=>h(new DOMException("Request aborted","AbortError")),u.onerror=()=>h(new Error("Request error")),o&&(u.upload.onprogress=T=>o(T),u.upload.onload=T=>o(T)),u.onload=()=>{u.status>=200&&u.status<300?h(u.response):h(new d(Ze(u.response||u.statusText)))},u.open("POST",t),u.withCredentials=!0,u.setRequestHeader("Authorization","Bearer "+this.accessToken),u.setRequestHeader("Cache-Control","no-cache, no-store, max-age=0"),u.setRequestHeader("Content-Type",i),this.options.extendedMode!==!1&&u.setRequestHeader("X-Medplum","extended"),s?.headers){let T=s.headers;for(let[Qe,Zi]of Object.entries(T))u.setRequestHeader(Qe,Zi)}u.send(n)})}async createPdf(t,n={}){if(!this.createPdfImpl)throw new Error("PDF creation not enabled");let{docDefinition:i,tableLayouts:o,fonts:s,...a}=t,c=await this.createPdfImpl(i,o,s),u={...a,data:c,contentType:"application/pdf"};return this.createBinary(u,n)}createComment(t,n,i){let o=this.getProfile(),s,a;return t.resourceType==="Encounter"&&(s=Pe(t),a=t.subject),t.resourceType==="ServiceRequest"&&(s=t.encounter,a=t.subject),t.resourceType==="Patient"&&(a=Pe(t)),this.createResource({resourceType:"Communication",status:"completed",basedOn:[Pe(t)],encounter:s,subject:a,sender:o?Pe(o):void 0,sent:new Date().toISOString(),payload:[{contentString:n}]},i)}async updateResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");if(!t.id)throw new Error("Missing id");let i=await this.put(this.fhirUrl(t.resourceType,t.id),t,void 0,n);return i||(i=t),this.cacheResource(i),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),i}async patchResource(t,n,i,o){let s=await this.patch(this.fhirUrl(t,n),i,o);return this.cacheResource(s),this.invalidateUrl(this.fhirUrl(t,n,"_history")),this.invalidateSearches(t),s}deleteResource(t,n,i){return this.deleteCacheEntry(this.fhirUrl(t,n).toString()),this.invalidateSearches(t),this.delete(this.fhirUrl(t,n),i)}validateResource(t,n){return this.post(this.fhirUrl(t.resourceType,"$validate"),t,void 0,n)}executeBot(t,n,i,o){let s;if(typeof t=="string"){let a=t;s=this.fhirUrl("Bot",a,"$execute")}else{let a=t;s=this.fhirUrl("Bot","$execute"),s.searchParams.set("identifier",a.system+"|"+a.value)}return this.post(s,n,i,o)}executeBatch(t,n){return this.post(this.fhirBaseUrl,t,void 0,n)}sendEmail(t,n){return this.post("email/v1/send",t,A.JSON,n)}graphql(t,n,i,o){return this.post(this.fhirUrl("$graphql"),{query:t,operationName:n,variables:i},A.JSON,o)}readResourceGraph(t,n,i,o){return this.get(`${this.fhirUrl(t,n)}/$graph?graph=${i}`,o)}pushToAgent(t,n,i,o,s,a){return this.post(this.fhirUrl("Agent",le(t),"$push"),{destination:typeof n=="string"?n:z(n),body:i,contentType:o,waitForResponse:s},A.FHIR_JSON,a)}getActiveLogin(){return this.storage.getObject("activeLogin")}async setActiveLogin(t){(!this.sessionDetails?.profile||z(this.sessionDetails.profile)!==t.profile?.reference)&&this.clearActiveLogin(),this.setAccessToken(t.accessToken,t.refreshToken),this.storage.setObject("activeLogin",t),this.addLogin(t),this.refreshPromise=void 0,await this.refreshProfile()}getAccessToken(){return this.accessToken}isAuthenticated(t){return this.accessTokenExpires!==void 0&&Date.now()<this.accessTokenExpires-(t??this.refreshGracePeriod)}setAccessToken(t,n){this.accessToken=t,this.refreshToken=n,this.accessTokenExpires=Ei(t),this.medplumServer=bi(t)}getLogins(){return this.storage.getObject("logins")??[]}addLogin(t){let n=this.getLogins().filter(i=>i.profile?.reference!==t.profile?.reference);n.push(t),this.storage.setObject("logins",n)}async refreshProfile(){return this.medplumServer?(this.profilePromise=new Promise((t,n)=>{this.get("auth/me",{cache:"no-cache"}).then(i=>{this.profilePromise=void 0;let o=this.sessionDetails?.profile?.id!==i.profile.id;this.sessionDetails=i,o&&this.dispatchEvent({type:"change"}),t(i.profile),this.dispatchEvent({type:"profileRefreshed"})}).catch(n)}),this.dispatchEvent({type:"profileRefreshing"}),this.profilePromise):Promise.resolve(void 0)}isLoading(){return!this.isInitialized||!!this.profilePromise&&!this.sessionDetails?.profile}isSuperAdmin(){return!!this.sessionDetails?.project.superAdmin}isProjectAdmin(){return!!this.sessionDetails?.membership.admin}getProject(){return this.sessionDetails?.project}getProjectMembership(){return this.sessionDetails?.membership}getProfile(){return this.sessionDetails?.profile}async getProfileAsync(){return this.profilePromise?this.profilePromise:this.sessionDetails?this.sessionDetails.profile:this.refreshProfile()}getUserConfiguration(){return this.sessionDetails?.config}getAccessPolicy(){return this.sessionDetails?.accessPolicy}async download(t,n={}){this.refreshPromise&&await this.refreshPromise;let i=t.toString();i.startsWith(pa)&&(t=this.fhirUrl(i));let o=n.headers;return o||(o={},n.headers=o),o.Accept||(o.Accept="*/*"),this.addFetchOptionsDefaults(n),(await this.fetchWithRetry(t.toString(),n)).blob()}async createMedia(t,n){let{additionalFields:i,...o}=t,s=await this.createResource({resourceType:"Media",status:"preparation",content:{contentType:t.contentType},...i});o.securityContext||(o.securityContext=Pe(s));let a=await this.createAttachment(o,n);return this.updateResource({...s,status:"completed",content:a})}async bulkExport(t="",n,i,o){let s=t&&`${t}/`,a=this.fhirUrl(`${s}$export`);return n&&a.searchParams.set("_type",n),i&&a.searchParams.set("_since",i),this.startAsyncRequest(a.toString(),o)}async startAsyncRequest(t,n={}){this.addFetchOptionsDefaults(n);let i=n.headers;return i.Prefer="respond-async",this.request("POST",t,n)}get keyValue(){return this.keyValueClient||(this.keyValueClient=new It(this)),this.keyValueClient}getBundle(t,n){return new M((async()=>{let i=await this.get(t,n);if(i.entry)for(let o of i.entry)this.cacheResource(o.resource);return i})())}getCacheEntry(t,n){if(!this.requestCache||n?.cache==="no-cache"||n?.cache==="reload")return;let i=this.requestCache.get(t);if(!(!i||i.requestTime+this.cacheTime<Date.now()))return i}setCacheEntry(t,n){this.requestCache&&this.requestCache.set(t,{requestTime:Date.now(),value:n})}cacheResource(t){t?.id&&!t.meta?.tag?.some(n=>n.code==="SUBSETTED")&&this.setCacheEntry(this.fhirUrl(t.resourceType,t.id).toString(),new M(Promise.resolve(t)))}deleteCacheEntry(t){this.requestCache&&this.requestCache.delete(t)}async request(t,n,i={},o={}){await this.refreshIfExpired(),i.method=t,this.addFetchOptionsDefaults(i);let s=await this.fetchWithRetry(n,i);if(s.status===401)return this.handleUnauthenticated(t,n,i);if(s.status===204||s.status===304)return;let c=s.headers.get("content-type")?.includes("json");if(s.status===404&&!c)throw new d(ln);let u=await this.parseBody(s,c);if(s.status===200&&i.followRedirectOnOk||s.status===201&&i.followRedirectOnCreated){let p=await Ii(s,u);if(p)return this.request("GET",p,{...i,body:void 0})}if(s.status===202&&i.pollStatusOnAccepted){let h=await Ii(s,u)??o.statusUrl;if(h)return this.pollStatus(h,i,o)}if(s.status>=400)throw new d(Ze(u));return u}async parseBody(t,n){let i;if(t.headers.get("content-length")!=="0"){if(n)try{i=await t.json()}catch(o){throw console.error("Error parsing response",t.status,o),o}else i=await t.text();return i}}async fetchWithRetry(t,n){t.startsWith("http")||(t=B(this.baseUrl,t));let i=n?.maxRetries??2,o=200;for(let s=0;s<=i;s++){try{this.options.verbose&&this.logRequest(t,n);let a=await this.fetch(t,n);if(this.options.verbose&&this.logResponse(a),a.status<500||s===i)return a}catch(a){if(a.message==="Failed to fetch"&&s===0&&this.dispatchEvent({type:"offline"}),a.name==="AbortError"||s===i)throw a}await Rr(o)}throw new Error("Unreachable")}logRequest(t,n){if(console.log(`> ${n.method} ${t}`),n.headers){let i=n.headers;for(let o of at(Object.keys(i)))console.log(`> ${o}: ${i[o]}`)}}logResponse(t){console.log(`< ${t.status} ${t.statusText}`),t.headers&&t.headers.forEach((n,i)=>console.log(`< ${i}: ${n}`))}async pollStatus(t,n,i){let o={...n,method:"GET",body:void 0,redirect:"follow"};if(i.pollCount===void 0)n.headers&&typeof n.headers=="object"&&"Prefer"in n.headers&&(o.headers={...n.headers},delete o.headers.Prefer),i.statusUrl=t,i.pollCount=1;else{let s=n.pollStatusPeriod??1e3;await Rr(s),i.pollCount++}return this.request("GET",t,o,i)}async executeAutoBatch(){if(this.autoBatchQueue===void 0)return;let t=[...this.autoBatchQueue];if(this.autoBatchQueue.length=0,this.autoBatchTimerId=void 0,t.length===1){let o=t[0];try{o.resolve(await this.request(o.method,B(this.fhirBaseUrl,o.url),o.options))}catch(s){o.reject(new d(Ze(s)))}return}let n={resourceType:"Bundle",type:"batch",entry:t.map(o=>({request:{method:o.method,url:o.url},resource:o.options.body?JSON.parse(o.options.body):void 0}))},i=await this.post(this.fhirBaseUrl,n);for(let o=0;o<t.length;o++){let s=t[o],a=i.entry?.[o];a?.response?.outcome&&!er(a.response.outcome)?s.reject(new d(a.response.outcome)):s.resolve(a?.resource)}}addFetchOptionsDefaults(t){Object.entries(this.defaultHeaders).forEach(([n,i])=>{this.setRequestHeader(t,n,i)}),this.setRequestHeader(t,"Accept",oa,!0),this.options.extendedMode!==!1&&this.setRequestHeader(t,"X-Medplum","extended"),t.body&&this.setRequestHeader(t,"Content-Type",A.FHIR_JSON,!0),this.accessToken?this.setRequestHeader(t,"Authorization","Bearer "+this.accessToken):this.basicAuth&&this.setRequestHeader(t,"Authorization","Basic "+this.basicAuth),t.cache||(t.cache="no-cache"),t.credentials||(t.credentials="include")}setRequestContentType(t,n){this.setRequestHeader(t,"Content-Type",n)}setRequestHeader(t,n,i,o=!1){t.headers||(t.headers={});let s=t.headers;o&&s[n]||(s[n]=i)}setRequestBody(t,n){typeof n=="string"||typeof Blob<"u"&&(n instanceof Blob||n?.constructor.name==="Blob")||typeof File<"u"&&(n instanceof File||n?.constructor.name==="File")||typeof Uint8Array<"u"&&(n instanceof Uint8Array||n?.constructor.name==="Uint8Array")?t.body=n:n&&(t.body=JSON.stringify(n))}handleUnauthenticated(t,n,i){return this.refresh()?this.request(t,n,i):(this.clear(),this.onUnauthenticated&&this.onUnauthenticated(),Promise.reject(new d(Te)))}async startPkce(){let t=Nr();sessionStorage.setItem("pkceState",t);let n=Nr().slice(0,128);sessionStorage.setItem("codeVerifier",n);let i=await yi(n),o=Hn(i).replaceAll("+","-").replaceAll("/","_").replaceAll("=","");return sessionStorage.setItem("codeChallenge",o),{codeChallengeMethod:"S256",codeChallenge:o}}async requestAuthorization(t){let n=await this.ensureCodeChallenge(t??{}),i=new URL(this.authorizeUrl);i.searchParams.set("response_type","code"),i.searchParams.set("state",sessionStorage.getItem("pkceState")),i.searchParams.set("client_id",n.clientId??this.clientId),i.searchParams.set("redirect_uri",n.redirectUri??Oi()),i.searchParams.set("code_challenge_method",n.codeChallengeMethod),i.searchParams.set("code_challenge",n.codeChallenge),i.searchParams.set("scope",n.scope??"openid profile"),window.location.assign(i.toString())}processCode(t,n){let i=new URLSearchParams;if(i.set("grant_type","authorization_code"),i.set("code",t),i.set("client_id",n?.clientId??this.clientId),i.set("redirect_uri",n?.redirectUri??Oi()),typeof sessionStorage<"u"){let o=sessionStorage.getItem("codeVerifier");o&&i.set("code_verifier",o)}return this.fetchTokens(i)}refreshIfExpired(t){return!this.refreshPromise&&this.accessTokenExpires!==void 0&&!this.isAuthenticated(t)&&this.refresh(),this.refreshPromise??Promise.resolve()}refresh(){if(this.refreshPromise)return this.refreshPromise;if(this.refreshToken){let t=new URLSearchParams;return t.set("grant_type","refresh_token"),t.set("client_id",this.clientId),t.set("refresh_token",this.refreshToken),this.refreshPromise=this.fetchTokens(t),this.refreshPromise}if(this.clientId&&this.clientSecret)return this.refreshPromise=this.startClientLogin(this.clientId,this.clientSecret),this.refreshPromise}async startClientLogin(t,n){this.clientId=t,this.clientSecret=n;let i=new URLSearchParams;return i.set("grant_type","client_credentials"),i.set("client_id",t),i.set("client_secret",n),this.fetchTokens(i)}async startJwtBearerLogin(t,n,i){this.clientId=t;let o=new URLSearchParams;return o.set("grant_type","urn:ietf:params:oauth:grant-type:jwt-bearer"),o.set("client_id",t),o.set("assertion",n),o.set("scope",i),this.fetchTokens(o)}async startJwtAssertionLogin(t){let n=new URLSearchParams;return n.append("grant_type","client_credentials"),n.append("client_assertion_type","urn:ietf:params:oauth:client-assertion-type:jwt-bearer"),n.append("client_assertion",t),this.fetchTokens(n)}setBasicAuth(t,n){this.clientId=t,this.clientSecret=n,this.basicAuth=mi(t+":"+n)}async fhircastSubscribe(t,n){if(!(typeof t=="string"&&t!==""))throw new d(m("Invalid topic provided. Topic must be a valid string."));if(!(typeof n=="object"&&Array.isArray(n)&&n.length>0))throw new d(m("Invalid events provided. Events must be an array of event names containing at least one event."));let i={channelType:"websocket",mode:"subscribe",topic:t,events:n},s=(await this.post(this.fhircastHubUrl,Br(i),A.FORM_URL_ENCODED))["hub.channel.endpoint"];if(!s)throw new Error("Invalid response!");return i.endpoint=s,i}async fhircastUnsubscribe(t){if(!At(t))throw new d(m("Invalid topic or subscriptionRequest. SubscriptionRequest must be an object."));if(!(t.endpoint&&typeof t.endpoint=="string"&&t.endpoint.startsWith("ws")))throw new d(m("Provided subscription request must have an endpoint in order to unsubscribe."));t.mode="unsubscribe",await this.post(this.fhircastHubUrl,Br(t),A.FORM_URL_ENCODED)}fhircastConnect(t){return new wt(t)}async fhircastPublish(t,n,i,o){return xi(n)?this.post(this.fhircastHubUrl,Wr(t,n,i,o),A.JSON):(vi(n),this.post(this.fhircastHubUrl,Wr(t,n,i),A.JSON))}async fhircastGetContext(t){return this.get(`${this.fhircastHubUrl}/${t}`)}async invite(t,n){return this.post("admin/projects/"+t+"/invite",n)}async fetchTokens(t){let n={method:"POST",headers:{"Content-Type":A.FORM_URL_ENCODED},body:t.toString(),credentials:"include"},i=n.headers;Object.assign(i,this.defaultHeaders),this.basicAuth&&(i.Authorization=`Basic ${this.basicAuth}`);let o;try{o=await this.fetchWithRetry(this.tokenUrl,n)}catch(a){throw this.refreshPromise=void 0,a}if(!o.ok){this.clearActiveLogin();try{let a=await o.json();throw new d(S(a.error_description))}catch(a){throw new d(S("Failed to fetch tokens"),a)}}let s=await o.json();return await this.verifyTokens(s),this.getProfile()}async verifyTokens(t){let n=t.access_token;if(Si(n)){let i=Ot(n);if(Date.now()>=i.exp*1e3)throw this.clearActiveLogin(),new d(pn);if(i.cid){if(i.cid!==this.clientId)throw this.clearActiveLogin(),new d(Xt)}else if(this.clientId&&i.client_id!==this.clientId)throw this.clearActiveLogin(),new d(Xt)}return this.setActiveLogin({accessToken:n,refreshToken:t.refresh_token,project:t.project,profile:t.profile})}checkSessionDetailsMatchLogin(t){return this.sessionDetails&&t?t.profile?.reference?.endsWith(this.sessionDetails.profile.id)??!1:!0}setupStorageListener(){try{window.addEventListener("storage",t=>{if(t.key===null)window.location.reload();else if(t.key==="activeLogin"){let n=t.oldValue?JSON.parse(t.oldValue):void 0,i=t.newValue?JSON.parse(t.newValue):void 0;n?.profile.reference!==i?.profile.reference||!this.checkSessionDetailsMatchLogin(i)?window.location.reload():i?this.setAccessToken(i.accessToken,i.refreshToken):this.clear()}})}catch{}}getSubscriptionManager(){return this.subscriptionManager||(this.subscriptionManager=new Vt(this,Yn(this.baseUrl,"/ws/subscriptions-r4"))),this.subscriptionManager}subscribeToCriteria(t,n){return this.getSubscriptionManager().addCriteria(t,n)}unsubscribeFromCriteria(t,n){this.subscriptionManager&&(this.subscriptionManager.removeCriteria(t,n),this.subscriptionManager.getCriteriaCount()===0&&this.subscriptionManager.closeWebSocket())}getMasterSubscriptionEmitter(){return this.getSubscriptionManager().getMasterEmitter()}};function ya(){if(!globalThis.fetch)throw new Error("Fetch not available in this environment");return globalThis.fetch.bind(globalThis)}function Oi(){return typeof window>"u"?"":window.location.protocol+"//"+window.location.host+"/"}async function Ii(r,e){let t=r.headers.get("content-location");if(t)return t;let n=r.headers.get("location");if(n)return n;if(Se(e)&&e.issue?.[0]?.diagnostics)return e.issue[0].diagnostics}function ki(r){let e=r.entry?.map(t=>t.resource)??[];return Object.assign(e,{bundle:r})}function ga(r){return R(r)&&"data"in r&&"contentType"in r}function of(r,e,t,n){return ga(r)?r:{data:r,filename:e,contentType:t,onProgress:n}}function xa(r){return R(r)&&"docDefinition"in r}function sf(r,e,t,n){return xa(r)?r:{docDefinition:r,filename:e,tableLayouts:t,fonts:n}}var cf={aws_ssm_parameter_store:"aws_ssm_parameter_store"};function Gr({parentContext:r,path:e,elements:t,profileUrl:n,debugMode:i,accessPolicyResource:o}){if(e===r?.path)return;i??=r?.debugMode??!1,o??=r?.accessPolicyResource;let s=va(e,t,r,!!i),a=Cr(e,".",2)[1];s=Ta(s,o,a),s=Sa(s,o,a);let c=Object.create(null);for(let[p,h]of Object.entries(s))c[e+"."+p]=h;let u;if(r&&!r.isDefaultContext)u=r.getExtendedProps;else{let p=Object.create(null);u=h=>{let T=Cr(h,".",2)[1];if(T){if(!p[T]){let Qe=_t(T,o?.hiddenFields);p[T]={hidden:Qe,readonly:Qe||_t(T,o?.readonlyFields)}}return p[T]}}}return{path:e,elements:s,elementsByPath:c,profileUrl:n??r?.profileUrl,debugMode:i,getExtendedProps:u,accessPolicyResource:o}}function va(r,e,t,n){let i=Object.create(null);if(t)for(let[s,a]of Object.entries(t.elementsByPath)){let c=re(r,s);c!==void 0&&(i[c]=a)}let o=!1;if(e)for(let[s,a]of Object.entries(e))s in i||(i[s]=a,o=!0);return n&&console.assert(o,"Unnecessary ElementsContext; not using any newly provided elements"),i}function Ta(r,e,t){if(!e?.hiddenFields?.length)return r;let n=t?t+".":"";return Object.fromEntries(Object.entries(r).filter(([i])=>!_t(n+i,e.hiddenFields)))}function Sa(r,e,t){if(!e?.readonlyFields?.length)return r;let n=Object.create(null),i=t?t+".":"";for(let[o,s]of Object.entries(r))_t(i+o,e.readonlyFields)?n[o]={...s,readonly:!0}:n[o]=s;return n}function _t(r,e){if(!e?.length)return!1;let t=r.split(".");for(let n=1;n<=t.length;n++){let i=t.slice(0,n).join(".");if(e.includes(i))return!0}return!1}function Di(r){return r.type!==void 0&&r.type.length>0}function ba(r,e,t,n){let i=Re(r,e.path,{profileUrl:n});if(i){let o=t.typeSchema?.elements??t.elements;return i.some(s=>hr(s,e,t,o))??!1}return console.assert(!1,"getNestedProperty[%s] in isDiscriminatorComponentMatch missed",e.path),!1}function Vi(r,e,t,n){if(r)for(let i of e){let o={value:r,type:i.typeSchema?.type??i.type?.[0].code};if(t.every(s=>ba(o,s,i,i.typeSchema?.url??n)))return i.name}}var je=class{constructor(e,t,n){if(e.type===void 0)throw new Error("schema must include a type");this.rootSchema=e;let i=Gr({parentContext:void 0,path:this.rootSchema.type,elements:n??this.rootSchema.elements,profileUrl:this.rootSchema.name===this.rootSchema.type?void 0:this.rootSchema.url});if(i===void 0)throw new Error("Could not create root elements context");this.elementsContextStack=[i],this.visitor=t}get elementsContext(){return this.elementsContextStack[this.elementsContextStack.length-1]}crawlElement(e,t,n){this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema);let i=Object.fromEntries(Object.entries(this.elementsContext.elements).filter(([o])=>o.startsWith(t)));this.crawlElementsImpl(i,n),this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlSlice(e,t,n){let i=this.prepareSlices(n.slices,n);if(!J(i.slices))throw new Error(`cannot crawl slice ${t.name} since it has no type information`);this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema),this.sliceAllowList=[t],this.crawlSliceImpl(i.slices[0],t.path,i),this.sliceAllowList=void 0,this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlResource(){this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema),this.crawlElementsImpl(this.rootSchema.elements,this.rootSchema.type),this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlElementsImpl(e,t){let n=Ea(e);for(let i of n)this.crawlElementNode(i,t)}crawlElementNode(e,t){let n=t+"."+e.key;this.visitor.onEnterElement&&this.visitor.onEnterElement(n,e.element,this.elementsContext);for(let i of e.children)this.crawlElementNode(i,t);J(e.element?.slicing?.slices)&&this.crawlSlicingImpl(e.element.slicing,n),this.visitor.onExitElement&&this.visitor.onExitElement(n,e.element,this.elementsContext)}prepareSlices(e,t){let n=[];for(let o of e){if(!Di(o))continue;let s=o.type.find(a=>J(a.profile))?.profile?.[0];if(J(s)){let a=wn(s);a&&(o.typeSchema=a)}n.push(o)}return{...t,slices:n}}crawlSlicingImpl(e,t){let n=this.prepareSlices(e.slices,e);for(let i of n.slices)(this.sliceAllowList===void 0||this.sliceAllowList.includes(i))&&this.crawlSliceImpl(i,t,n)}crawlSliceImpl(e,t,n){let i=e.typeSchema;i&&this.visitor.onEnterSchema&&this.visitor.onEnterSchema(i),this.visitor.onEnterSlice&&this.visitor.onEnterSlice(t,e,n);let o,s=i?.elements??e.elements;J(s)&&(o=Gr({path:t,parentContext:this.elementsContext,elements:s})),o&&this.elementsContextStack.push(o),this.crawlElementsImpl(s,t),o&&this.elementsContextStack.pop(),this.visitor.onExitSlice&&this.visitor.onExitSlice(t,e,n),i&&this.visitor.onExitSchema&&this.visitor.onExitSchema(i)}};function Ea(r){let e=[];function t(o,s){return s.startsWith(o+".")}function n(o,s){for(let a of o.children)if(t(a.key,s.key)){n(a,s);return}o.children.push(s)}let i=Object.entries(r);i.sort((o,s)=>o[0].localeCompare(s[0]));for(let[o,s]of i){let a={key:o,element:s,children:[]},c=!1;for(let u of e)if(t(u.key,o)){n(u,a),c=!0;break}c||e.push(a)}return e}var Nt="__sliceName";function Df(r,e){let t=new Ft(r,r.resourceType,"resource");return new je(e,t).crawlResource(),t.getDefaultValue()}function Vf(r,e,t){for(let[n,i]of Object.entries(e)){if(t===void 0||t===n){Lt(r,n,i,e);continue}let o=re(t,n);o!==void 0&&Lt(r,o,i,e)}return r}function Mf(r,e,t,n){let i=new Ft([{[Nt]:e.name}],e.path,"element");return new je(n,i).crawlSlice(r,e,t),i.getDefaultValue()[0]}var Ft=class{constructor(e,t,n){this.schemaStack=[],this.valueStack=[],this.rootValue=pe(e),this.valueStack.splice(0,this.valueStack.length,{type:n,path:t,values:[this.rootValue]})}get schema(){return this.schemaStack[this.schemaStack.length-1]}get value(){return this.valueStack[this.valueStack.length-1]}onEnterSchema(e){this.schemaStack.push(e)}onExitSchema(){this.schemaStack.pop()}onEnterElement(e,t,n){let i=this.value.values,o=this.value.path,s=re(o,e);if(s===void 0)throw new Error(`Expected ${e} to be prefixed by ${o}`);let a=[];for(let c of i){if(c===void 0)continue;let u=re(n.path,o),p=Array.isArray(c)?c:[c];for(let h of p){Ra(h,s,t,n.elements,u),Lt(h,s,t,n.elements);let T=Qr(h,s,n.elements,u);T!==void 0&&a.push(T)}}this.valueStack.push({type:"element",path:e,values:a})}onExitElement(e,t,n){if(!this.valueStack.pop())throw new Error("Expected value context to exist when exiting element");let o=re(this.value.path,e);if(o===void 0)throw new Error(`Expected ${e} to be prefixed by ${this.value.path}`);let s=re(n.path,this.value.path);for(let a of this.value.values){let c=Qr(a,o,n.elements,s);if(Array.isArray(c))for(let u=c.length-1;u>=0;u--){let p=c[u];J(p)||c.splice(u,1)}b(c)&&Hr(a,void 0,o,t)}}onEnterSlice(e,t,n){let i=this.value.values,o=[];for(let s of i)if(s!==void 0){let a=Array.isArray(s)?s:[s],c=this.getMatchingSliceValues(a,t,n);o.push(c)}this.valueStack.push({type:"slice",path:e,values:o})}getMatchingSliceValues(e,t,n){let i=[];for(let o of e)(o[Nt]??Vi(o,[t],n.discriminator,this.schema.url))===t.name&&i.push(o);for(let o=i.length;o<t.min;o++)if(Er(t.type[0].code)){let s=Object.create(null);i.push(s),e.push(s)}return i}onExitSlice(){let e=this.valueStack.pop();if(!e)throw new Error("Expected value context to exist in onExitSlice");for(let t of e.values)for(let n=t.length-1;n>=0;n--){let i=t[n];Nt in i&&delete i[Nt]}}getDefaultValue(){return this.rootValue}};function Ra(r,e,t,n,i){let o=Qr(r,e,n,i);t.min>0&&o===void 0&&Er(t.type[0].code)&&(t.isArray?Hr(r,[Object.create(null)],e,t):Hr(r,Object.create(null),e,t))}function Hr(r,e,t,n){if(t.includes("."))throw new Error("key cannot be nested");let i=t;if(t.includes("[x]")){let o=n.type[0].code;i=t.replace("[x]",k(o))}e===void 0?delete r[i]:r[i]=e}function Qr(r,e,t,n){let i=e.split("."),o=r,s;for(let a=0;a<i.length;a++){let c=i[a];if(c.includes("[x]")){let u=(n?n+".":"")+i.slice(0,a+1).join("."),h=t[u].type[0].code;c=c.replace("[x]",k(h))}if(a===i.length-1){Array.isArray(o)?s=o.map(u=>u[c]):s=o[c];continue}if(Array.isArray(o))o=o.map(u=>u[c]);else if(R(o)){if(o[c]===void 0)return;o=o[c]}else return}return s}function Lt(r,e,t,n){if(!(t.fixed||t.pattern))return r;if(Array.isArray(r))return r.map(a=>Lt(a,e,t,n));r==null&&(r=Object.create(null));let i=r,o=e.split("."),s=i;for(let a=0;a<o.length;a++){let c=o[a];if(c.includes("[x]")){let p=n[o.slice(0,a+1).join(".")].type[0].code;c=c.replace("[x]",k(p))}if(a===o.length-1){let u=Array.isArray(s)?s:[s];for(let p of u)t.fixed?p[c]??=t.fixed.value:t.pattern&&(p[c]=Mi(p[c],t.pattern.value))}else{if(!(c in s)){let u=o.slice(0,a+1).join(".");s[c]=n[u].isArray?[Object.create(null)]:Object.create(null)}s=s[c]}}return i}function Mi(r,e){if(Array.isArray(e)&&(Array.isArray(r)||r===void 0))return(r?.length??0)>0?r:pe(e);if(R(e)&&(R(r)&&!Array.isArray(r)||r===void 0)){let t=pe(r)??Object.create(null);for(let n of Object.keys(e))t[n]=Mi(t[n],e[n]);return t}return r}function _i(r,e){if(!r.group)throw new d(S("ConceptMap does not specify a mapping group","ConceptMap.group"));let t=Ca(e);if(Se(t))throw new d(t);let n=wa(t,e.targetsystem?r.group.filter(o=>o.target===e.targetsystem):r.group),i=n.length>0;return{result:i,match:i?n:void 0}}function Ca(r){return r.code&&!r.coding&&!r.codeableConcept?r.system===void 0?S("Missing required 'system' input parameter with 'code' parameter"):{[r.system]:[r.code]}:r.coding&&!r.code&&!r.codeableConcept?{[r.coding.system??""]:[r.coding.code??""]}:r.codeableConcept&&!r.code&&!r.coding?Pa(r.codeableConcept):r.code||r.coding||r.codeableConcept?S("Ambiguous input: multiple source codings provided"):S("No source provided: 'code'+'system', 'coding', or 'codeableConcept' input parameter is required")}function Pa(r){let e=Object.create(null);if(!r.coding?.length)return e;for(let{system:t,code:n}of r.coding){if(!n)continue;let i=t??"";e[i]=e[i]?[...e[i],n]:[n]}return e}function wa(r,e){let t=[];for(let[n,i]of Object.entries(r))for(let o of e.filter(s=>(s.source??"")===n)){let s=o.element?.filter(a=>i.includes(a.code)).flatMap(a=>a.target?.map(c=>({equivalence:c.equivalence,concept:{system:o.target,code:c.code,display:c.display}}))??[]);s?.length||(s=Aa(i,o)),s&&t.push(...s)}return t}function Aa(r,e){switch(e.unmapped?.mode){case"provided":return r.map(t=>({equivalence:"equal",concept:{system:e.target,code:t}}));case"fixed":return[{equivalence:"equivalent",concept:{system:e.target,code:e.unmapped.code,display:e.unmapped.display}}];default:return}}var Oa=[...Ue,"->","<<",">>","=="];function Ni(r){return new oe(r,Le,Oa).tokenize()}var Ia={"-":"disjoint","==":"equal"},zr=class{constructor(e){this.parser=e;this.structureMap={resourceType:"StructureMap",status:"active"}}parse(){for(;this.parser.hasMore();){let e=this.parser.peek()?.value;switch(e){case"map":this.parseMap();break;case"uses":this.parseUses();break;case"imports":this.parseImport();break;case"group":this.parseGroup();break;case"conceptmap":this.parseConceptMap();break;default:throw new Error(`Unexpected token: ${e}`)}}return this.structureMap}parseMap(){this.parser.consume("Symbol","map"),this.structureMap.url=this.parser.consume("String").value,this.parser.consume("="),this.structureMap.name=this.parser.consume().value}parseUses(){this.parser.consume("Symbol","uses");let e={};e.url=this.parser.consume("String").value,this.parser.peek()?.value==="alias"&&(this.parser.consume("Symbol","alias"),e.alias=this.parser.consume("Symbol").value),this.parser.consume("Symbol","as"),e.mode=this.parser.consume().value,this.structureMap.structure||(this.structureMap.structure=[]),this.structureMap.structure.push(e)}parseImport(){this.parser.consume("Symbol","imports"),this.structureMap.import||(this.structureMap.import=[]),this.structureMap.import.push(this.parser.consume("String").value)}parseGroup(){let e={};this.parser.consume("Symbol","group"),e.name=this.parser.consume("Symbol").value,e.input=this.parseParameters(),this.parser.peek()?.value==="extends"&&(this.parser.consume("Symbol","extends"),e.extends=this.parser.consume("Symbol").value),this.parser.peek()?.value==="<<"?(this.parser.consume("<<"),e.typeMode=this.parser.consume().value,this.parser.peek()?.value==="+"&&(this.parser.consume("+"),e.typeMode="type-and-types"),this.parser.consume(">>")):e.typeMode="none",e.rule=this.parseRules(),this.structureMap.group||(this.structureMap.group=[]),this.structureMap.group.push(e)}parseParameters(){let e=[];for(this.parser.consume("(");this.parser.hasMore()&&this.parser.peek()?.value!==")";)e.push(this.parseParameter()),this.parser.peek()?.value===","&&this.parser.consume(",");return this.parser.consume(")"),e}parseParameter(){let e={};return e.mode=this.parser.consume().value,e.name=this.parser.consume("Symbol").value,this.parser.peek()?.value===":"&&(this.parser.consume(":"),e.type=this.parser.consume("Symbol").value),e}parseRules(){let e=[];for(this.parser.consume("{");this.parser.hasMore()&&this.parser.peek()?.value!=="}";)e.push(this.parseRule());return this.parser.consume("}"),e}parseRule(){let e={source:this.parseRuleSources()};return this.parser.peek()?.value==="->"&&(this.parser.consume("->"),e.target=this.parseRuleTargets()),this.parser.peek()?.value==="then"&&(this.parser.consume("Symbol","then"),this.parser.peek()?.id==="{"?e.rule=this.parseRules():e.dependent=this.parseRuleDependents()),this.parser.peek()?.id==="String"?e.name=this.parser.consume().value:e.name=e.source?.[0]?.element,this.parser.consume(";"),e}parseRuleSources(){this.parser.hasMore()&&this.parser.peek()?.value==="for"&&this.parser.consume("Symbol","for");let e=[this.parseRuleSource()];for(;this.parser.hasMore()&&this.parser.peek()?.value===",";)this.parser.consume(","),e.push(this.parseRuleSource());return e}parseRuleSource(){let e={},n=this.parseRuleContext().split(".");if(e.context=n[0],e.element=n[1],this.parser.hasMore()&&this.parser.peek()?.value===":"&&(this.parser.consume(":"),e.type=this.parser.consume().value),this.parser.hasMore()&&this.parser.peek()?.value==="default"&&(this.parser.consume("Symbol","default"),e.defaultValueString=this.parser.consume("String").value),(this.parser.peek()?.value==="first"||this.parser.peek()?.value==="not_first"||this.parser.peek()?.value==="last"||this.parser.peek()?.value==="not_last"||this.parser.peek()?.value==="only_one")&&(e.listMode=this.parser.consume().value),this.parser.peek()?.value==="as"&&(this.parser.consume("Symbol","as"),e.variable=this.parser.consume().value),this.parser.peek()?.value==="log"&&(this.parser.consume("Symbol","log"),e.logMessage=this.parser.consume().value),this.parser.peek()?.value==="where"){this.parser.consume("Symbol","where");let i=this.parser.consumeAndParse(y.Arrow);e.condition=i.toString()}if(this.parser.peek()?.value==="check"){this.parser.consume("Symbol","check");let i=this.parser.consumeAndParse(y.Arrow);e.check=i.toString()}return e}parseRuleTargets(){let e=[this.parseRuleTarget()];for(;this.parser.hasMore()&&this.parser.peek()?.value===",";)this.parser.consume(","),e.push(this.parseRuleTarget());return e}parseRuleTarget(){let e={},n=this.parseRuleContext().split(".");return e.contextType="variable",e.context=n[0],e.element=n[1],this.parser.peek()?.value==="="&&(this.parser.consume("="),this.parseRuleTargetTransform(e)),this.parser.peek()?.value==="as"&&(this.parser.consume("Symbol","as"),e.variable=this.parser.consume().value),this.parser.peek()?.value==="share"&&(this.parser.consume("Symbol","share"),e.listMode=["share"],this.parser.consume("Symbol")),(this.parser.peek()?.value==="first"||this.parser.peek()?.value==="last"||this.parser.peek()?.value==="collate")&&(e.listMode=[this.parser.consume().value]),e}parseRuleTargetTransform(e){let t=this.parser.consumeAndParse(y.As);t instanceof Y?(e.transform=t.name,e.parameter=t.args?.map(Fi)):t instanceof U||t instanceof W?(e.transform="copy",e.parameter=[Fi(t)]):(e.transform="evaluate",e.parameter=[{valueString:t.toString()}])}parseRuleContext(){let e=this.parser.consume().value;for(;this.parser.peek()?.value===".";)this.parser.consume("."),e+="."+this.parser.consume().value;return e}parseRuleDependents(){let e=this.parser.consumeAndParse(y.Arrow);return[{name:e.name,variable:e.args.map(t=>t.name)}]}parseConceptMap(){this.parser.consume("Symbol","conceptmap");let e={resourceType:"ConceptMap",status:"active",url:"#"+this.parser.consume("String").value};this.parser.consume("{");let t={},n=this.parser.peek()?.value;for(;n!=="}";)n==="prefix"?this.parseConceptMapPrefix(t):this.parseConceptMapRule(e,t),n=this.parser.peek()?.value;this.parser.consume("}"),this.structureMap.contained||(this.structureMap.contained=[]),this.structureMap.contained.push(e)}parseConceptMapPrefix(e){this.parser.consume("Symbol","prefix");let t=this.parser.consume().value;this.parser.consume("=");let n=this.parser.consume().value;e[t]=n}parseConceptMapRule(e,t){let n=this.parser.consume().value,i=t[n];this.parser.consume(":");let o=this.parser.consume().value,s=Ia[this.parser.consume().value],a=this.parser.consume().value,c=t[a];this.parser.consume(":");let u=this.parser.consume().value,p=e?.group?.find(h=>h.source===i&&h.target===c);p||(p={source:i,target:c,element:[]},e.group||(e.group=[]),e.group.push(p)),p.element||(p.element=[]),p.element.push({code:o,target:[{code:u,equivalence:s}]})}};function Fi(r){if(r instanceof W)return{valueId:r.name};if(r instanceof U)return ka(r);throw new Error(`Unknown parameter atom type: ${r.constructor.name} (${r.toString()})`)}function ka(r){switch(r.value.type){case"boolean":return{valueBoolean:r.value.value};case"decimal":return{valueDecimal:r.value.value};case"integer":return{valueInteger:r.value.value};case"dateTime":case"string":return{valueString:r.value.value};default:throw new Error("Unknown target literal type: "+r.value.type)}}var Da=Be().registerInfix("->",{precedence:y.Arrow}).registerInfix(";",{precedence:y.Semicolon});function Gf(r){let e=Da.construct(Ni(r));return e.removeComments(),new zr(e).parse()}var Jr=class{constructor(e=[]){this.resources=e}get(e,t){let n=[];for(let i of this.resources)i.resourceType===e&&i.url&&this.matchesUrl(i.url,t)&&n.push(i);return n}matchesUrl(e,t){if(t.includes("*")){let n=t.split("*");return e.startsWith(n[0])&&e.endsWith(n[1])}else return e===t}};function Xf(r,e,t=new Jr){return Va({root:r,transformMaps:t},r,e)}function Va(r,e,t){return Ma(r,e),Ui(r,e),Yr(r,e.group[0],t)}function Ma(r,e){let t=Bt(r);if(t&&e.import)for(let n of e.import){let i=t.get("StructureMap",n);for(let o of i)Ui(r,o)}}function Ui(r,e){let t=Bt(r);if(t&&e.contained)for(let n of e.contained)(n.resourceType==="StructureMap"||n.resourceType==="ConceptMap")&&t.resources.push(n);if(e.group)for(let n of e.group)Ut(r,n.name,{type:"StructureMapGroup",value:n})}function Yr(r,e,t){let n=[],i=[];for(let u of e.input)u.mode==="source"&&n.push(u),u.mode==="target"&&i.push(u);if(n.length===0)throw new Error("Missing source definitions");if(i.length===0)throw new Error("Missing target definitions");if(t.length<n.length)throw new Error(`Not enough arguments (got ${t.length}, min ${n.length})`);if(t.length>n.length+i.length)throw new Error(`Too many arguments (got ${t.length}, max ${n.length+i.length})`);let o={},s=[],a=0;for(let u of n)Ge(o,u.name,t[a++]);for(let u of i){let p=t[a++]??{type:u.type??"BackboneElement",value:{}};Ge(o,u.name,p),s.push(p)}let c={root:r.root,parent:r,variables:o};if(e.rule)for(let u of e.rule)Bi(c,u);return s}function Bi(r,e){e.source&&Wi(r,e,0)}function Wi(r,e,t){let n=e.source[t];for(let i of La(r,n))Ut(r,"_",i),n.variable&&Ut(r,n.variable,i),t<e.source.length-1?Wi(r,e,t+1):_a(r,e)}function _a(r,e){if(!Na(r,e)){if(e.target)for(let t of e.target)qi(r,t);if(e.rule)for(let t of e.rule)Bi(r,t);if(e.dependent)for(let t of e.dependent)za(r,t)}}function Na(r,e){if(!e.target||e.target.length!==1||e.target[0].transform||e.rule||e.dependent)return!1;let t=se(r,"_");if(Array.isArray(t)&&(t=t[0]),!t)return!1;let n=Fa(r,t);if(!n)return qi(r,{...e.target[0],transform:"copy",parameter:[{valueId:"_"}]}),!0;let i=e.target[0],o=se(r,i.context),s=o.value[i.element],a=ji(o,i.element)||Array.isArray(s),c={root:r.root,parent:r,variables:{}},u=Yr(c,n,[t]);return $i(r,i,o,u,a,s),!0}function Fa(r,e){let t=r;for(;t;){if(t.variables)for(let n of Object.values(t.variables)){let i=Kr(n);for(let o of i)if(o.type==="StructureMapGroup"){let s=o.value;if((s.typeMode==="types"||s.typeMode==="type-and-types")&&s.input.length===2&&s.input[0].mode==="source"&&s.input[0].type===e.type&&s.input[1].mode==="target")return s}}t=t.parent}}function La(r,e){let t=se(r,e.context);if(!t)return[];let n=e.element;if(!n)return[t];let i=w(n,[t]);if(!i||i.length===0)return[];if(e.condition&&!Li(t,{[e.variable]:i[0]},e.condition))return[];if(e.check&&!Li(t,{[e.variable]:i[0]},e.check))throw new Error("Check failed: "+e.check);return e.listMode&&(i=Ua(e,i)),i}function Li(r,e,t){return N(w(t,[r],e))}function Ua(r,e){switch(r.listMode){case"first":return[e[0]];case"not_first":return e.slice(1);case"last":return[e[e.length-1]];case"not_last":return e.slice(0,e.length-1);case"only_one":if(e.length!==1)throw new Error("Expected only one value");break}return e}function qi(r,e){let t=se(r,e.context);if(!t)throw new Error("Target not found: "+e.context);let n=t.value[e.element],i,o=ji(t,e.element)||Array.isArray(n);if(e.transform)switch(e.transform){case"append":i=Ba(r,e);break;case"cast":i=Wa(r,e);break;case"cc":i=qa(r,e);break;case"copy":i=$a(r,e);break;case"create":i=ja(r,e);break;case"evaluate":i=Ga(r,e);break;case"translate":i=Ha(r,e);break;case"truncate":i=Qa(r,e);break;case"uuid":i=[{type:"string",value:ge()}];break;default:throw new Error(`Unsupported transform: ${e.transform}`)}else{let s=Gi(t,e.element)?.type,a=s?.length===1?s[0].code:void 0;o||n===void 0?i=[a?{type:a,value:{}}:g({})]:i=[a?{type:a,value:n}:g(n)]}$i(r,e,t,i,o,n)}function $i(r,e,t,n,i,o){if(n.length!==0){if(i){o||(o=[],Ge(t.value,e.element,o));for(let s of n)o.push(s.value)}else Ge(t.value,e.element,n[0].value);e.variable&&Ut(r,e.variable,Ja(n))}}function ji(r,e){return Gi(r,e)?.isArray}function Gi(r,e){return Ve(r.type)?.elements?.[e]}function Ba(r,e){let t=_(r,e.parameter?.[0])?.[0]?.value,n=_(r,e.parameter?.[1])?.[0]?.value;return[{type:"string",value:(t??"").toString()+(n??"").toString()}]}function Wa(r,e){let t=_(r,e.parameter?.[0])?.[0];return _(r,e.parameter?.[1])?.[0]?.value==="string"?[{type:"string",value:t?.value?.toString()}]:[t]}function qa(r,e){let t=e.parameter;if(t.length===2){let n=_(r,t[0])?.[0]?.value,i=_(r,t[1])?.[0]?.value;return[{type:"CodeableConcept",value:{coding:[{system:n,code:i}]}}]}else return[{type:"CodeableConcept",value:{text:_(r,t[0])?.[0]?.value}}]}function $a(r,e){return e.parameter.flatMap(t=>_(r,t))}function ja(r,e){let t={};return e.parameter&&e.parameter.length>0&&(t.resourceType=_(r,e.parameter?.[0])?.[0]?.value),[g(t)]}function Ga(r,e){let n=_(r,e.parameter?.[0])[0].value;return w(n,[],Hi(r))}function Ha(r,e){let t=e.parameter.flatMap(c=>_(r,c)),n=t[0].value,i=t[1].value,s=Bt(r)?.get("ConceptMap",i)[0];if(!s)throw new Error("ConceptMap not found: "+i);let a=_i(s,{system:s.group?.[0]?.source,code:n});return[g(a.match?.[0]?.concept?.code)]}function Qa(r,e){let t=_(r,e.parameter?.[0])?.[0],n=_(r,e.parameter?.[1])?.[0]?.value;return t.type==="string"?[{type:"string",value:t.value.substring(0,n)}]:[t]}function za(r,e){let t=se(r,e.name);if(!t)throw new Error("Dependent group not found: "+e.name);let n=e.variable,i=[];for(let s of n){let a=se(r,s);if(!a)throw new Error("Dependent variable not found: "+s);i.push(a)}let o={root:r.root,parent:r,variables:{}};Yr(o,t.value,i)}function Bt(r){if(r.transformMaps)return r.transformMaps;if(r.parent)return Bt(r.parent)}function _(r,e){let n=P({type:"StructureMapGroupRuleTargetParameter",value:e},"value");if(!n)throw new Error("Missing target parameter: "+JSON.stringify(e));if(n=Kr(n),n.length===1&&n[0].type==="id"){let i=se(r,n[0].value);if(!i)throw new Error("Variable not found: "+n[0].value);return Kr(i)}return n}function se(r,e){let t=r.variables?.[e];if(t)return t;if(r.parent)return se(r.parent,e)}function Hi(r,e={}){if(r.parent&&Hi(r.parent,e),r.variables)for(let[t,n]of Object.entries(r.variables))e[t]=n,e["%"+t]=n;return e}function Ut(r,e,t){r.variables||(r.variables={}),Ge(r.variables,e,t)}function Ge(r,e,t){if(e==="__proto__"||e==="constructor"||e==="prototype")throw new Error("Invalid key: "+e);r[e]=t}function Kr(r){return Array.isArray(r)?r:[r]}function Ja(r){return r.length===1?r[0]:r}var Ka=" ".repeat(2),Qi=class{constructor(e=Ka,t=!0){this.indent=e,this.b=[],this.indentCount=0,t&&(this.appendNoWrap("/*"),this.appendNoWrap(" * This is a generated file"),this.appendNoWrap(" * Do not edit manually."),this.appendNoWrap(" */"),this.newLine())}newLine(){this.b.push(`
43
+ }`.replace(/\s+/g," "),a=await this.graphql(s);ar(a.data.StructureDefinitionList.filter(c=>c.name===t));for(let c of a.data.SearchParameterList)Ir(c)})());return this.setCacheEntry(n,o),o}requestProfileSchema(t,n){if(!n?.expandProfile&&An(t))return Promise.resolve();let i=t+"-requestSchema"+(n?.expandProfile?"-nested":""),o=this.getCacheEntry(i,void 0);if(o)return o.value;let s=new M((async()=>{if(n?.expandProfile){let a=this.fhirUrl("StructureDefinition","$expand-profile");a.search=new URLSearchParams({url:t}).toString();let c=await this.post(a.toString(),{});ar(c)}else{let a=await this.searchOne("StructureDefinition",{url:t,_sort:"-_lastUpdated"});if(!a){console.warn(`No StructureDefinition found for ${t}!`);return}cr(a)}})());return this.setCacheEntry(i,s),s}readHistory(t,n,i){return this.get(this.fhirUrl(t,n,"_history"),i)}readVersion(t,n,i,o){return this.get(this.fhirUrl(t,n,"_history",i),o)}readPatientEverything(t,n){return this.getBundle(this.fhirUrl("Patient",t,"$everything"),n)}readPatientSummary(t,n){return this.getBundle(this.fhirUrl("Patient",t,"$summary"),n)}createResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");return this.invalidateSearches(t.resourceType),this.post(this.fhirUrl(t.resourceType),t,void 0,n)}async createResourceIfNoneExist(t,n,i){let o=this.fhirUrl(t.resourceType);i?i.headers?Array.isArray(i.headers)?i.headers.push(["If-None-Exist",n]):i.headers instanceof Headers?i.headers.set("If-None-Exist",n):i.headers["If-None-Exist"]=n:i.headers={"If-None-Exist":n}:i={headers:{"If-None-Exist":n}};let s=await this.post(o,t,void 0,i);return this.cacheResource(s),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),s}async upsertResource(t,n,i){let o=this.fhirSearchUrl(t.resourceType,n),s=await this.put(o,t,void 0,i);return s||(s=t),this.cacheResource(s),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),s}async createAttachment(t,n,i,o,s){let a=Vi(t,n,i,o);if(a.contentType===A.XML){let l=a.data,h;l instanceof Blob?h=await new Promise((g,B)=>{let j=new FileReader;j.onload=()=>{if(!j.result){B(new Error("Failed to load file"));return}g(j.result)},j.readAsText(l,"utf-8")}):ArrayBuffer.isView(l)?h=new TextDecoder().decode(l):h=l,h.includes("<ClinicalDocument")&&h.includes("urn:hl7-org:v3")&&(a={...a,contentType:A.CDA_XML})}let c=s??(typeof n=="object"?n:{}),u=await this.createBinary(a,c);return{contentType:a.contentType,url:u.url,title:a.filename}}createBinary(t,n,i,o,s){let a=Vi(t,n,i,o),c=s??(typeof n=="object"?n:{}),{data:u,contentType:l,filename:h,securityContext:g,onProgress:B}=a,j=this.fhirUrl("Binary");return h&&j.searchParams.set("_filename",h),g?.reference&&this.setRequestHeader(c,"X-Security-Context",g.reference),B?this.uploadwithProgress(j,u,l,B,c):this.post(j,u,l,c)}uploadwithProgress(t,n,i,o,s){return new Promise((a,c)=>{let u=new XMLHttpRequest,l=()=>u.abort();s?.signal?.addEventListener("abort",l);let h=g=>{s?.signal?.removeEventListener("abort",l),g instanceof Error?c(g):a(g)};if(u.responseType="json",u.onabort=()=>h(new DOMException("Request aborted","AbortError")),u.onerror=()=>h(new Error("Request error")),o&&(u.upload.onprogress=g=>o(g),u.upload.onload=g=>o(g)),u.onload=()=>{u.status>=200&&u.status<300?h(u.response):h(new p(Xe(u.response||u.statusText)))},u.open("POST",t),u.withCredentials=!0,u.setRequestHeader("Authorization","Bearer "+this.accessToken),u.setRequestHeader("Cache-Control","no-cache, no-store, max-age=0"),u.setRequestHeader("Content-Type",i),this.options.extendedMode!==!1&&u.setRequestHeader("X-Medplum","extended"),s?.headers){let g=s.headers;for(let[B,j]of Object.entries(g))u.setRequestHeader(B,j)}u.send(n)})}async createPdf(t,n,i,o){if(!this.createPdfImpl)throw new Error("PDF creation not enabled");let s=Sa(t,n,i,o),a=typeof n=="object"?n:{},{docDefinition:c,tableLayouts:u,fonts:l,...h}=s,g=await this.createPdfImpl(c,u,l),B={...h,data:g,contentType:"application/pdf"};return this.createBinary(B,a)}createComment(t,n,i){let o=this.getProfile(),s,a;return t.resourceType==="Encounter"&&(s=Ae(t),a=t.subject),t.resourceType==="ServiceRequest"&&(s=t.encounter,a=t.subject),t.resourceType==="Patient"&&(a=Ae(t)),this.createResource({resourceType:"Communication",status:"completed",basedOn:[Ae(t)],encounter:s,subject:a,sender:o?Ae(o):void 0,sent:new Date().toISOString(),payload:[{contentString:n}]},i)}async updateResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");if(!t.id)throw new Error("Missing id");let i=await this.put(this.fhirUrl(t.resourceType,t.id),t,void 0,n);return i||(i=t),this.cacheResource(i),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),i}async patchResource(t,n,i,o){let s=await this.patch(this.fhirUrl(t,n),i,o);return this.cacheResource(s),this.invalidateUrl(this.fhirUrl(t,n,"_history")),this.invalidateSearches(t),s}deleteResource(t,n,i){return this.deleteCacheEntry(this.fhirUrl(t,n).toString()),this.invalidateSearches(t),this.delete(this.fhirUrl(t,n),i)}validateResource(t,n){return this.post(this.fhirUrl(t.resourceType,"$validate"),t,void 0,n)}executeBot(t,n,i,o){let s;if(typeof t=="string"){let a=t;s=this.fhirUrl("Bot",a,"$execute")}else{let a=t;s=this.fhirUrl("Bot","$execute"),s.searchParams.set("identifier",a.system+"|"+a.value)}return this.post(s,n,i,o)}executeBatch(t,n){return this.post(this.fhirBaseUrl,t,void 0,n)}sendEmail(t,n){return this.post("email/v1/send",t,A.JSON,n)}graphql(t,n,i,o){return this.post(this.fhirUrl("$graphql"),{query:t,operationName:n,variables:i},A.JSON,o)}readResourceGraph(t,n,i,o){return this.get(`${this.fhirUrl(t,n)}/$graph?graph=${i}`,o)}pushToAgent(t,n,i,o,s,a){return this.post(this.fhirUrl("Agent",pe(t),"$push"),{destination:typeof n=="string"?n:K(n),body:i,contentType:o,waitForResponse:s},A.FHIR_JSON,a)}getActiveLogin(){return this.storage.getObject("activeLogin")}async setActiveLogin(t){(!this.sessionDetails?.profile||K(this.sessionDetails.profile)!==t.profile?.reference)&&this.clearActiveLogin(),this.setAccessToken(t.accessToken,t.refreshToken),this.storage.setObject("activeLogin",t),this.addLogin(t),this.refreshPromise=void 0,await this.refreshProfile()}getAccessToken(){return this.accessToken}isAuthenticated(t){return this.accessTokenExpires!==void 0&&Date.now()<this.accessTokenExpires-(t??this.refreshGracePeriod)}setAccessToken(t,n){this.accessToken=t,this.refreshToken=n,this.accessTokenExpires=Ri(t),this.medplumServer=Ei(t)}getLogins(){return this.storage.getObject("logins")??[]}addLogin(t){let n=this.getLogins().filter(i=>i.profile?.reference!==t.profile?.reference);n.push(t),this.storage.setObject("logins",n)}async refreshProfile(){return this.medplumServer?(this.profilePromise=new Promise((t,n)=>{this.get("auth/me",{cache:"no-cache"}).then(i=>{this.profilePromise=void 0;let o=this.sessionDetails?.profile?.id!==i.profile.id;this.sessionDetails=i,o&&this.dispatchEvent({type:"change"}),t(i.profile),this.dispatchEvent({type:"profileRefreshed"})}).catch(n)}),this.dispatchEvent({type:"profileRefreshing"}),this.profilePromise):Promise.resolve(void 0)}isLoading(){return!this.isInitialized||!!this.profilePromise&&!this.sessionDetails?.profile}isSuperAdmin(){return!!this.sessionDetails?.project.superAdmin}isProjectAdmin(){return!!this.sessionDetails?.membership.admin}getProject(){return this.sessionDetails?.project}getProjectMembership(){return this.sessionDetails?.membership}getProfile(){return this.sessionDetails?.profile}async getProfileAsync(){return this.profilePromise?this.profilePromise:this.sessionDetails?this.sessionDetails.profile:this.refreshProfile()}getUserConfiguration(){return this.sessionDetails?.config}getAccessPolicy(){return this.sessionDetails?.accessPolicy}async download(t,n={}){this.refreshPromise&&await this.refreshPromise;let i=t.toString();i.startsWith(fa)&&(t=this.fhirUrl(i));let o=n.headers;return o||(o={},n.headers=o),o.Accept||(o.Accept="*/*"),this.addFetchOptionsDefaults(n),(await this.fetchWithRetry(t.toString(),n)).blob()}async createMedia(t,n){let{additionalFields:i,...o}=t,s=await this.createResource({resourceType:"Media",status:"preparation",content:{contentType:t.contentType},...i});o.securityContext||(o.securityContext=Ae(s));let a=await this.createAttachment(o,n);return this.updateResource({...s,status:"completed",content:a})}async uploadMedia(t,n,i,o,s){return this.createMedia({data:t,contentType:n,filename:i,additionalFields:o},s)}async bulkExport(t="",n,i,o){let s=t&&`${t}/`,a=this.fhirUrl(`${s}$export`);return n&&a.searchParams.set("_type",n),i&&a.searchParams.set("_since",i),this.startAsyncRequest(a.toString(),o)}async startAsyncRequest(t,n={}){this.addFetchOptionsDefaults(n);let i=n.headers;return i.Prefer="respond-async",this.request("POST",t,n)}get keyValue(){return this.keyValueClient||(this.keyValueClient=new kt(this)),this.keyValueClient}getBundle(t,n){return new M((async()=>{let i=await this.get(t,n);if(i.entry)for(let o of i.entry)this.cacheResource(o.resource);return i})())}getCacheEntry(t,n){if(!this.requestCache||n?.cache==="no-cache"||n?.cache==="reload")return;let i=this.requestCache.get(t);if(!(!i||i.requestTime+this.cacheTime<Date.now()))return i}setCacheEntry(t,n){this.requestCache&&this.requestCache.set(t,{requestTime:Date.now(),value:n})}cacheResource(t){t?.id&&!t.meta?.tag?.some(n=>n.code==="SUBSETTED")&&this.setCacheEntry(this.fhirUrl(t.resourceType,t.id).toString(),new M(Promise.resolve(t)))}deleteCacheEntry(t){this.requestCache&&this.requestCache.delete(t)}async request(t,n,i={},o={}){await this.refreshIfExpired(),i.method=t,this.addFetchOptionsDefaults(i);let s=await this.fetchWithRetry(n,i);if(s.status===401)return this.handleUnauthenticated(t,n,i);if(s.status===204||s.status===304)return;let c=s.headers.get("content-type")?.includes("json");if(s.status===404&&!c)throw new p(pn);let u=await this.parseBody(s,c);if(s.status===200&&i.followRedirectOnOk||s.status===201&&i.followRedirectOnCreated){let l=await ki(s,u);if(l)return this.request("GET",l,{...i,body:void 0})}if(s.status===202&&i.pollStatusOnAccepted){let h=await ki(s,u)??o.statusUrl;if(h)return this.pollStatus(h,i,o)}if(s.status>=400)throw new p(Xe(u));return u}async parseBody(t,n){let i;if(t.headers.get("content-length")!=="0"){if(n)try{i=await t.json()}catch(o){throw console.error("Error parsing response",t.status,o),o}else i=await t.text();return i}}async fetchWithRetry(t,n){t.startsWith("http")||(t=W(this.baseUrl,t));let i=n?.maxRetries??2,o=200;for(let s=0;s<=i;s++){try{this.options.verbose&&this.logRequest(t,n);let a=await this.fetch(t,n);if(this.options.verbose&&this.logResponse(a),a.status<500||s===i)return a}catch(a){if(a.message==="Failed to fetch"&&s===0&&this.dispatchEvent({type:"offline"}),a.name==="AbortError"||s===i)throw a}await Cr(o)}throw new Error("Unreachable")}logRequest(t,n){if(console.log(`> ${n.method} ${t}`),n.headers){let i=n.headers;for(let o of ct(Object.keys(i)))console.log(`> ${o}: ${i[o]}`)}}logResponse(t){console.log(`< ${t.status} ${t.statusText}`),t.headers&&t.headers.forEach((n,i)=>console.log(`< ${i}: ${n}`))}async pollStatus(t,n,i){let o={...n,method:"GET",body:void 0,redirect:"follow"};if(i.pollCount===void 0)n.headers&&typeof n.headers=="object"&&"Prefer"in n.headers&&(o.headers={...n.headers},delete o.headers.Prefer),i.statusUrl=t,i.pollCount=1;else{let s=n.pollStatusPeriod??1e3;await Cr(s),i.pollCount++}return this.request("GET",t,o,i)}async executeAutoBatch(){if(this.autoBatchQueue===void 0)return;let t=[...this.autoBatchQueue];if(this.autoBatchQueue.length=0,this.autoBatchTimerId=void 0,t.length===1){let o=t[0];try{o.resolve(await this.request(o.method,W(this.fhirBaseUrl,o.url),o.options))}catch(s){o.reject(new p(Xe(s)))}return}let n={resourceType:"Bundle",type:"batch",entry:t.map(o=>({request:{method:o.method,url:o.url},resource:o.options.body?JSON.parse(o.options.body):void 0}))},i=await this.post(this.fhirBaseUrl,n);for(let o=0;o<t.length;o++){let s=t[o],a=i.entry?.[o];a?.response?.outcome&&!tr(a.response.outcome)?s.reject(new p(a.response.outcome)):s.resolve(a?.resource)}}addFetchOptionsDefaults(t){Object.entries(this.defaultHeaders).forEach(([n,i])=>{this.setRequestHeader(t,n,i)}),this.setRequestHeader(t,"Accept",aa,!0),this.options.extendedMode!==!1&&this.setRequestHeader(t,"X-Medplum","extended"),t.body&&this.setRequestHeader(t,"Content-Type",A.FHIR_JSON,!0),this.accessToken?this.setRequestHeader(t,"Authorization","Bearer "+this.accessToken):this.basicAuth&&this.setRequestHeader(t,"Authorization","Basic "+this.basicAuth),t.cache||(t.cache="no-cache"),t.credentials||(t.credentials="include")}setRequestContentType(t,n){this.setRequestHeader(t,"Content-Type",n)}setRequestHeader(t,n,i,o=!1){t.headers||(t.headers={});let s=t.headers;o&&s[n]||(s[n]=i)}setRequestBody(t,n){typeof n=="string"||typeof Blob<"u"&&(n instanceof Blob||n?.constructor.name==="Blob")||typeof File<"u"&&(n instanceof File||n?.constructor.name==="File")||typeof Uint8Array<"u"&&(n instanceof Uint8Array||n?.constructor.name==="Uint8Array")?t.body=n:n&&(t.body=JSON.stringify(n))}handleUnauthenticated(t,n,i){return this.refresh()?this.request(t,n,i):(this.clear(),this.onUnauthenticated&&this.onUnauthenticated(),Promise.reject(new p(be)))}async startPkce(){let t=Lr();sessionStorage.setItem("pkceState",t);let n=Lr().slice(0,128);sessionStorage.setItem("codeVerifier",n);let i=await gi(n),o=zn(i).replaceAll("+","-").replaceAll("/","_").replaceAll("=","");return sessionStorage.setItem("codeChallenge",o),{codeChallengeMethod:"S256",codeChallenge:o}}async requestAuthorization(t){let n=await this.ensureCodeChallenge(t??{}),i=new URL(this.authorizeUrl);i.searchParams.set("response_type","code"),i.searchParams.set("state",sessionStorage.getItem("pkceState")),i.searchParams.set("client_id",n.clientId??this.clientId),i.searchParams.set("redirect_uri",n.redirectUri??Ii()),i.searchParams.set("code_challenge_method",n.codeChallengeMethod),i.searchParams.set("code_challenge",n.codeChallenge),i.searchParams.set("scope",n.scope??"openid profile"),window.location.assign(i.toString())}processCode(t,n){let i={grant_type:"authorization_code",code:t,client_id:n?.clientId??this.clientId??"",redirect_uri:n?.redirectUri??Ii()};if(typeof sessionStorage<"u"){let o=sessionStorage.getItem("codeVerifier");o&&(i.code_verifier=o)}return this.fetchTokens(i)}refreshIfExpired(t){return!this.refreshPromise&&this.accessTokenExpires!==void 0&&!this.isAuthenticated(t)&&this.refresh(),this.refreshPromise??Promise.resolve()}refresh(){if(this.refreshPromise)return this.refreshPromise;if(this.refreshToken)return this.refreshPromise=this.fetchTokens({grant_type:"refresh_token",client_id:this.clientId??"",refresh_token:this.refreshToken}),this.refreshPromise;if(this.clientId&&this.clientSecret)return this.refreshPromise=this.startClientLogin(this.clientId,this.clientSecret),this.refreshPromise}async startClientLogin(t,n){return this.clientId=t,this.clientSecret=n,this.fetchTokens({grant_type:"client_credentials",client_id:t,client_secret:n})}async startJwtBearerLogin(t,n,i){return this.clientId=t,this.fetchTokens({grant_type:"urn:ietf:params:oauth:grant-type:jwt-bearer",client_id:t,assertion:n,scope:i})}async startJwtAssertionLogin(t){return this.fetchTokens({grant_type:"client_credentials",client_assertion_type:"urn:ietf:params:oauth:client-assertion-type:jwt-bearer",client_assertion:t})}setBasicAuth(t,n){this.clientId=t,this.clientSecret=n,this.basicAuth=Fr(t+":"+n)}async fhircastSubscribe(t,n){if(!(typeof t=="string"&&t!==""))throw new p(m("Invalid topic provided. Topic must be a valid string."));if(!(typeof n=="object"&&Array.isArray(n)&&n.length>0))throw new p(m("Invalid events provided. Events must be an array of event names containing at least one event."));let i={channelType:"websocket",mode:"subscribe",topic:t,events:n},s=(await this.post(this.fhircastHubUrl,qr(i),A.FORM_URL_ENCODED))["hub.channel.endpoint"];if(!s)throw new Error("Invalid response!");return i.endpoint=s,i}async fhircastUnsubscribe(t){if(!Ot(t))throw new p(m("Invalid topic or subscriptionRequest. SubscriptionRequest must be an object."));if(!(t.endpoint&&typeof t.endpoint=="string"&&t.endpoint.startsWith("ws")))throw new p(m("Provided subscription request must have an endpoint in order to unsubscribe."));t.mode="unsubscribe",await this.post(this.fhircastHubUrl,qr(t),A.FORM_URL_ENCODED)}fhircastConnect(t){return new At(t)}async fhircastPublish(t,n,i,o){return vi(n)?this.post(this.fhircastHubUrl,jr(t,n,i,o),A.JSON):(Ti(n),this.post(this.fhircastHubUrl,jr(t,n,i),A.JSON))}async fhircastGetContext(t){return this.get(`${this.fhircastHubUrl}/${t}`)}async invite(t,n){return this.post("admin/projects/"+t+"/invite",n)}async fetchTokens(t){let n=new URLSearchParams(t),i={...this.defaultHeaders,"Content-Type":A.FORM_URL_ENCODED};this.basicAuth&&(i.Authorization=`Basic ${this.basicAuth}`),this.credentialsInHeader&&(n.delete("client_id"),n.delete("client_secret"),!this.basicAuth&&t.client_id&&t.client_secret&&(i.Authorization=`Basic ${Fr(t.client_id+":"+t.client_secret)}`));let o={method:"POST",headers:i,body:n.toString(),credentials:"include"},s;try{s=await this.fetchWithRetry(this.tokenUrl,o)}catch(c){throw this.refreshPromise=void 0,c}if(!s.ok){this.clearActiveLogin();try{let c=await s.json();throw new p(S(c.error_description))}catch(c){throw new p(S("Failed to fetch tokens"),c)}}let a=await s.json();return await this.verifyTokens(a),this.getProfile()}async verifyTokens(t){let n=t.access_token;if(bi(n)){let i=It(n);if(Date.now()>=i.exp*1e3)throw this.clearActiveLogin(),new p(fn);if(i.cid){if(i.cid!==this.clientId)throw this.clearActiveLogin(),new p(er)}else if(this.clientId&&i.client_id!==this.clientId)throw this.clearActiveLogin(),new p(er)}return this.setActiveLogin({accessToken:n,refreshToken:t.refresh_token,project:t.project,profile:t.profile})}checkSessionDetailsMatchLogin(t){return this.sessionDetails&&t?t.profile?.reference?.endsWith(this.sessionDetails.profile.id)??!1:!0}setupStorageListener(){try{window.addEventListener("storage",t=>{if(t.key===null)window.location.reload();else if(t.key==="activeLogin"){let n=t.oldValue?JSON.parse(t.oldValue):void 0,i=t.newValue?JSON.parse(t.newValue):void 0;n?.profile.reference!==i?.profile.reference||!this.checkSessionDetailsMatchLogin(i)?window.location.reload():i?this.setAccessToken(i.accessToken,i.refreshToken):this.clear()}})}catch{}}getSubscriptionManager(){return this.subscriptionManager||(this.subscriptionManager=new Mt(this,Xn(this.baseUrl,"/ws/subscriptions-r4"))),this.subscriptionManager}subscribeToCriteria(t,n){return this.getSubscriptionManager().addCriteria(t,n)}unsubscribeFromCriteria(t,n){this.subscriptionManager&&(this.subscriptionManager.removeCriteria(t,n),this.subscriptionManager.getCriteriaCount()===0&&this.subscriptionManager.closeWebSocket())}getMasterSubscriptionEmitter(){return this.getSubscriptionManager().getMasterEmitter()}};function xa(){if(!globalThis.fetch)throw new Error("Fetch not available in this environment");return globalThis.fetch.bind(globalThis)}function Ii(){return typeof window>"u"?"":window.location.protocol+"//"+window.location.host+"/"}async function ki(r,e){let t=r.headers.get("content-location");if(t)return t;let n=r.headers.get("location");if(n)return n;if(Ee(e)&&e.issue?.[0]?.diagnostics)return e.issue[0].diagnostics}function Di(r){let e=r.entry?.map(t=>t.resource)??[];return Object.assign(e,{bundle:r})}function va(r){return R(r)&&"data"in r&&"contentType"in r}function Vi(r,e,t,n){return va(r)?r:{data:r,filename:e,contentType:t,onProgress:n}}function Ta(r){return R(r)&&"docDefinition"in r}function Sa(r,e,t,n){return Ta(r)?r:{docDefinition:r,filename:e,tableLayouts:t,fonts:n}}var uf={aws_ssm_parameter_store:"aws_ssm_parameter_store"};function Qr({parentContext:r,path:e,elements:t,profileUrl:n,debugMode:i,accessPolicyResource:o}){if(e===r?.path)return;i??=r?.debugMode??!1,o??=r?.accessPolicyResource;let s=ba(e,t,r,!!i),a=Pr(e,".",2)[1];s=Ea(s,o,a),s=Ra(s,o,a);let c=Object.create(null);for(let[l,h]of Object.entries(s))c[e+"."+l]=h;let u;if(r&&!r.isDefaultContext)u=r.getExtendedProps;else{let l=Object.create(null);u=h=>{let g=Pr(h,".",2)[1];if(g){if(!l[g]){let B=Nt(g,o?.hiddenFields);l[g]={hidden:B,readonly:B||Nt(g,o?.readonlyFields)}}return l[g]}}}return{path:e,elements:s,elementsByPath:c,profileUrl:n??r?.profileUrl,debugMode:i,getExtendedProps:u,accessPolicyResource:o}}function ba(r,e,t,n){let i=Object.create(null);if(t)for(let[s,a]of Object.entries(t.elementsByPath)){let c=ie(r,s);c!==void 0&&(i[c]=a)}let o=!1;if(e)for(let[s,a]of Object.entries(e))s in i||(i[s]=a,o=!0);return n&&console.assert(o,"Unnecessary ElementsContext; not using any newly provided elements"),i}function Ea(r,e,t){if(!e?.hiddenFields?.length)return r;let n=t?t+".":"";return Object.fromEntries(Object.entries(r).filter(([i])=>!Nt(n+i,e.hiddenFields)))}function Ra(r,e,t){if(!e?.readonlyFields?.length)return r;let n=Object.create(null),i=t?t+".":"";for(let[o,s]of Object.entries(r))Nt(i+o,e.readonlyFields)?n[o]={...s,readonly:!0}:n[o]=s;return n}function Nt(r,e){if(!e?.length)return!1;let t=r.split(".");for(let n=1;n<=t.length;n++){let i=t.slice(0,n).join(".");if(e.includes(i))return!0}return!1}function Mi(r){return r.type!==void 0&&r.type.length>0}function Ca(r,e,t,n){let i=Pe(r,e.path,{profileUrl:n});if(i){let o=t.typeSchema?.elements??t.elements;return i.some(s=>mr(s,e,t,o))??!1}return console.assert(!1,"getNestedProperty[%s] in isDiscriminatorComponentMatch missed",e.path),!1}function _i(r,e,t,n){if(r)for(let i of e){let o={value:r,type:i.typeSchema?.type??i.type?.[0].code};if(t.every(s=>Ca(o,s,i,i.typeSchema?.url??n)))return i.name}}var He=class{constructor(e,t,n){if(e.type===void 0)throw new Error("schema must include a type");this.rootSchema=e;let i=Qr({parentContext:void 0,path:this.rootSchema.type,elements:n??this.rootSchema.elements,profileUrl:this.rootSchema.name===this.rootSchema.type?void 0:this.rootSchema.url});if(i===void 0)throw new Error("Could not create root elements context");this.elementsContextStack=[i],this.visitor=t}get elementsContext(){return this.elementsContextStack[this.elementsContextStack.length-1]}crawlElement(e,t,n){this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema);let i=Object.fromEntries(Object.entries(this.elementsContext.elements).filter(([o])=>o.startsWith(t)));this.crawlElementsImpl(i,n),this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlSlice(e,t,n){let i=this.prepareSlices(n.slices,n);if(!Y(i.slices))throw new Error(`cannot crawl slice ${t.name} since it has no type information`);this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema),this.sliceAllowList=[t],this.crawlSliceImpl(i.slices[0],t.path,i),this.sliceAllowList=void 0,this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlResource(){this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema),this.crawlElementsImpl(this.rootSchema.elements,this.rootSchema.type),this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlElementsImpl(e,t){let n=Pa(e);for(let i of n)this.crawlElementNode(i,t)}crawlElementNode(e,t){let n=t+"."+e.key;this.visitor.onEnterElement&&this.visitor.onEnterElement(n,e.element,this.elementsContext);for(let i of e.children)this.crawlElementNode(i,t);Y(e.element?.slicing?.slices)&&this.crawlSlicingImpl(e.element.slicing,n),this.visitor.onExitElement&&this.visitor.onExitElement(n,e.element,this.elementsContext)}prepareSlices(e,t){let n=[];for(let o of e){if(!Mi(o))continue;let s=o.type.find(a=>Y(a.profile))?.profile?.[0];if(Y(s)){let a=On(s);a&&(o.typeSchema=a)}n.push(o)}return{...t,slices:n}}crawlSlicingImpl(e,t){let n=this.prepareSlices(e.slices,e);for(let i of n.slices)(this.sliceAllowList===void 0||this.sliceAllowList.includes(i))&&this.crawlSliceImpl(i,t,n)}crawlSliceImpl(e,t,n){let i=e.typeSchema;i&&this.visitor.onEnterSchema&&this.visitor.onEnterSchema(i),this.visitor.onEnterSlice&&this.visitor.onEnterSlice(t,e,n);let o,s=i?.elements??e.elements;Y(s)&&(o=Qr({path:t,parentContext:this.elementsContext,elements:s})),o&&this.elementsContextStack.push(o),this.crawlElementsImpl(s,t),o&&this.elementsContextStack.pop(),this.visitor.onExitSlice&&this.visitor.onExitSlice(t,e,n),i&&this.visitor.onExitSchema&&this.visitor.onExitSchema(i)}};function Pa(r){let e=[];function t(o,s){return s.startsWith(o+".")}function n(o,s){for(let a of o.children)if(t(a.key,s.key)){n(a,s);return}o.children.push(s)}let i=Object.entries(r);i.sort((o,s)=>o[0].localeCompare(s[0]));for(let[o,s]of i){let a={key:o,element:s,children:[]},c=!1;for(let u of e)if(t(u.key,o)){n(u,a),c=!0;break}c||e.push(a)}return e}var Ft="__sliceName";function Vf(r,e){let t=new Lt(r,r.resourceType,"resource");return new He(e,t).crawlResource(),t.getDefaultValue()}function Mf(r,e,t){for(let[n,i]of Object.entries(e)){if(t===void 0||t===n){Ut(r,n,i,e);continue}let o=ie(t,n);o!==void 0&&Ut(r,o,i,e)}return r}function _f(r,e,t,n){let i=new Lt([{[Ft]:e.name}],e.path,"element");return new He(n,i).crawlSlice(r,e,t),i.getDefaultValue()[0]}var Lt=class{constructor(e,t,n){this.schemaStack=[],this.valueStack=[],this.rootValue=fe(e),this.valueStack.splice(0,this.valueStack.length,{type:n,path:t,values:[this.rootValue]})}get schema(){return this.schemaStack[this.schemaStack.length-1]}get value(){return this.valueStack[this.valueStack.length-1]}onEnterSchema(e){this.schemaStack.push(e)}onExitSchema(){this.schemaStack.pop()}onEnterElement(e,t,n){let i=this.value.values,o=this.value.path,s=ie(o,e);if(s===void 0)throw new Error(`Expected ${e} to be prefixed by ${o}`);let a=[];for(let c of i){if(c===void 0)continue;let u=ie(n.path,o),l=Array.isArray(c)?c:[c];for(let h of l){wa(h,s,t,n.elements,u),Ut(h,s,t,n.elements);let g=Jr(h,s,n.elements,u);g!==void 0&&a.push(g)}}this.valueStack.push({type:"element",path:e,values:a})}onExitElement(e,t,n){if(!this.valueStack.pop())throw new Error("Expected value context to exist when exiting element");let o=ie(this.value.path,e);if(o===void 0)throw new Error(`Expected ${e} to be prefixed by ${this.value.path}`);let s=ie(n.path,this.value.path);for(let a of this.value.values){let c=Jr(a,o,n.elements,s);if(Array.isArray(c))for(let u=c.length-1;u>=0;u--){let l=c[u];Y(l)||c.splice(u,1)}b(c)&&zr(a,void 0,o,t)}}onEnterSlice(e,t,n){let i=this.value.values,o=[];for(let s of i)if(s!==void 0){let a=Array.isArray(s)?s:[s],c=this.getMatchingSliceValues(a,t,n);o.push(c)}this.valueStack.push({type:"slice",path:e,values:o})}getMatchingSliceValues(e,t,n){let i=[];for(let o of e)(o[Ft]??_i(o,[t],n.discriminator,this.schema.url))===t.name&&i.push(o);for(let o=i.length;o<t.min;o++)if(Rr(t.type[0].code)){let s=Object.create(null);i.push(s),e.push(s)}return i}onExitSlice(){let e=this.valueStack.pop();if(!e)throw new Error("Expected value context to exist in onExitSlice");for(let t of e.values)for(let n=t.length-1;n>=0;n--){let i=t[n];Ft in i&&delete i[Ft]}}getDefaultValue(){return this.rootValue}};function wa(r,e,t,n,i){let o=Jr(r,e,n,i);t.min>0&&o===void 0&&Rr(t.type[0].code)&&(t.isArray?zr(r,[Object.create(null)],e,t):zr(r,Object.create(null),e,t))}function zr(r,e,t,n){if(t.includes("."))throw new Error("key cannot be nested");let i=t;if(t.includes("[x]")){let o=n.type[0].code;i=t.replace("[x]",k(o))}e===void 0?delete r[i]:r[i]=e}function Jr(r,e,t,n){let i=e.split("."),o=r,s;for(let a=0;a<i.length;a++){let c=i[a];if(c.includes("[x]")){let u=(n?n+".":"")+i.slice(0,a+1).join("."),h=t[u].type[0].code;c=c.replace("[x]",k(h))}if(a===i.length-1){Array.isArray(o)?s=o.map(u=>u[c]):s=o[c];continue}if(Array.isArray(o))o=o.map(u=>u[c]);else if(R(o)){if(o[c]===void 0)return;o=o[c]}else return}return s}function Ut(r,e,t,n){if(!(t.fixed||t.pattern))return r;if(Array.isArray(r))return r.map(a=>Ut(a,e,t,n));r==null&&(r=Object.create(null));let i=r,o=e.split("."),s=i;for(let a=0;a<o.length;a++){let c=o[a];if(c.includes("[x]")){let l=n[o.slice(0,a+1).join(".")].type[0].code;c=c.replace("[x]",k(l))}if(a===o.length-1){let u=Array.isArray(s)?s:[s];for(let l of u)t.fixed?l[c]??=t.fixed.value:t.pattern&&(l[c]=Ni(l[c],t.pattern.value))}else{if(!(c in s)){let u=o.slice(0,a+1).join(".");s[c]=n[u].isArray?[Object.create(null)]:Object.create(null)}s=s[c]}}return i}function Ni(r,e){if(Array.isArray(e)&&(Array.isArray(r)||r===void 0))return(r?.length??0)>0?r:fe(e);if(R(e)&&(R(r)&&!Array.isArray(r)||r===void 0)){let t=fe(r)??Object.create(null);for(let n of Object.keys(e))t[n]=Ni(t[n],e[n]);return t}return r}function Fi(r,e){if(!r.group)throw new p(S("ConceptMap does not specify a mapping group","ConceptMap.group"));let t=Aa(e);if(Ee(t))throw new p(t);let n=Ia(t,e.targetsystem?r.group.filter(o=>o.target===e.targetsystem):r.group),i=n.length>0;return{result:i,match:i?n:void 0}}function Aa(r){return r.code&&!r.coding&&!r.codeableConcept?r.system===void 0?S("Missing required 'system' input parameter with 'code' parameter"):{[r.system]:[r.code]}:r.coding&&!r.code&&!r.codeableConcept?{[r.coding.system??""]:[r.coding.code??""]}:r.codeableConcept&&!r.code&&!r.coding?Oa(r.codeableConcept):r.code||r.coding||r.codeableConcept?S("Ambiguous input: multiple source codings provided"):S("No source provided: 'code'+'system', 'coding', or 'codeableConcept' input parameter is required")}function Oa(r){let e=Object.create(null);if(!r.coding?.length)return e;for(let{system:t,code:n}of r.coding){if(!n)continue;let i=t??"";e[i]=e[i]?[...e[i],n]:[n]}return e}function Ia(r,e){let t=[];for(let[n,i]of Object.entries(r))for(let o of e.filter(s=>(s.source??"")===n)){let s=o.element?.filter(a=>i.includes(a.code)).flatMap(a=>a.target?.map(c=>({equivalence:c.equivalence,concept:{system:o.target,code:c.code,display:c.display}}))??[]);s?.length||(s=ka(i,o)),s&&t.push(...s)}return t}function ka(r,e){switch(e.unmapped?.mode){case"provided":return r.map(t=>({equivalence:"equal",concept:{system:e.target,code:t}}));case"fixed":return[{equivalence:"equivalent",concept:{system:e.target,code:e.unmapped.code,display:e.unmapped.display}}];default:return}}var Da=[...We,"->","<<",">>","=="];function Li(r){return new ae(r,Be,Da).tokenize()}var Va={"-":"disjoint","==":"equal"},Kr=class{constructor(e){this.parser=e;this.structureMap={resourceType:"StructureMap",status:"active"}}parse(){for(;this.parser.hasMore();){let e=this.parser.peek()?.value;switch(e){case"map":this.parseMap();break;case"uses":this.parseUses();break;case"imports":this.parseImport();break;case"group":this.parseGroup();break;case"conceptmap":this.parseConceptMap();break;default:throw new Error(`Unexpected token: ${e}`)}}return this.structureMap}parseMap(){this.parser.consume("Symbol","map"),this.structureMap.url=this.parser.consume("String").value,this.parser.consume("="),this.structureMap.name=this.parser.consume().value}parseUses(){this.parser.consume("Symbol","uses");let e={};e.url=this.parser.consume("String").value,this.parser.peek()?.value==="alias"&&(this.parser.consume("Symbol","alias"),e.alias=this.parser.consume("Symbol").value),this.parser.consume("Symbol","as"),e.mode=this.parser.consume().value,this.structureMap.structure||(this.structureMap.structure=[]),this.structureMap.structure.push(e)}parseImport(){this.parser.consume("Symbol","imports"),this.structureMap.import||(this.structureMap.import=[]),this.structureMap.import.push(this.parser.consume("String").value)}parseGroup(){let e={};this.parser.consume("Symbol","group"),e.name=this.parser.consume("Symbol").value,e.input=this.parseParameters(),this.parser.peek()?.value==="extends"&&(this.parser.consume("Symbol","extends"),e.extends=this.parser.consume("Symbol").value),this.parser.peek()?.value==="<<"?(this.parser.consume("<<"),e.typeMode=this.parser.consume().value,this.parser.peek()?.value==="+"&&(this.parser.consume("+"),e.typeMode="type-and-types"),this.parser.consume(">>")):e.typeMode="none",e.rule=this.parseRules(),this.structureMap.group||(this.structureMap.group=[]),this.structureMap.group.push(e)}parseParameters(){let e=[];for(this.parser.consume("(");this.parser.hasMore()&&this.parser.peek()?.value!==")";)e.push(this.parseParameter()),this.parser.peek()?.value===","&&this.parser.consume(",");return this.parser.consume(")"),e}parseParameter(){let e={};return e.mode=this.parser.consume().value,e.name=this.parser.consume("Symbol").value,this.parser.peek()?.value===":"&&(this.parser.consume(":"),e.type=this.parser.consume("Symbol").value),e}parseRules(){let e=[];for(this.parser.consume("{");this.parser.hasMore()&&this.parser.peek()?.value!=="}";)e.push(this.parseRule());return this.parser.consume("}"),e}parseRule(){let e={source:this.parseRuleSources()};return this.parser.peek()?.value==="->"&&(this.parser.consume("->"),e.target=this.parseRuleTargets()),this.parser.peek()?.value==="then"&&(this.parser.consume("Symbol","then"),this.parser.peek()?.id==="{"?e.rule=this.parseRules():e.dependent=this.parseRuleDependents()),this.parser.peek()?.id==="String"?e.name=this.parser.consume().value:e.name=e.source?.[0]?.element,this.parser.consume(";"),e}parseRuleSources(){this.parser.hasMore()&&this.parser.peek()?.value==="for"&&this.parser.consume("Symbol","for");let e=[this.parseRuleSource()];for(;this.parser.hasMore()&&this.parser.peek()?.value===",";)this.parser.consume(","),e.push(this.parseRuleSource());return e}parseRuleSource(){let e={},n=this.parseRuleContext().split(".");if(e.context=n[0],e.element=n[1],this.parser.hasMore()&&this.parser.peek()?.value===":"&&(this.parser.consume(":"),e.type=this.parser.consume().value),this.parser.hasMore()&&this.parser.peek()?.value==="default"&&(this.parser.consume("Symbol","default"),e.defaultValueString=this.parser.consume("String").value),(this.parser.peek()?.value==="first"||this.parser.peek()?.value==="not_first"||this.parser.peek()?.value==="last"||this.parser.peek()?.value==="not_last"||this.parser.peek()?.value==="only_one")&&(e.listMode=this.parser.consume().value),this.parser.peek()?.value==="as"&&(this.parser.consume("Symbol","as"),e.variable=this.parser.consume().value),this.parser.peek()?.value==="log"&&(this.parser.consume("Symbol","log"),e.logMessage=this.parser.consume().value),this.parser.peek()?.value==="where"){this.parser.consume("Symbol","where");let i=this.parser.consumeAndParse(y.Arrow);e.condition=i.toString()}if(this.parser.peek()?.value==="check"){this.parser.consume("Symbol","check");let i=this.parser.consumeAndParse(y.Arrow);e.check=i.toString()}return e}parseRuleTargets(){let e=[this.parseRuleTarget()];for(;this.parser.hasMore()&&this.parser.peek()?.value===",";)this.parser.consume(","),e.push(this.parseRuleTarget());return e}parseRuleTarget(){let e={},n=this.parseRuleContext().split(".");return e.contextType="variable",e.context=n[0],e.element=n[1],this.parser.peek()?.value==="="&&(this.parser.consume("="),this.parseRuleTargetTransform(e)),this.parser.peek()?.value==="as"&&(this.parser.consume("Symbol","as"),e.variable=this.parser.consume().value),this.parser.peek()?.value==="share"&&(this.parser.consume("Symbol","share"),e.listMode=["share"],this.parser.consume("Symbol")),(this.parser.peek()?.value==="first"||this.parser.peek()?.value==="last"||this.parser.peek()?.value==="collate")&&(e.listMode=[this.parser.consume().value]),e}parseRuleTargetTransform(e){let t=this.parser.consumeAndParse(y.As);t instanceof X?(e.transform=t.name,e.parameter=t.args?.map(Ui)):t instanceof U||t instanceof q?(e.transform="copy",e.parameter=[Ui(t)]):(e.transform="evaluate",e.parameter=[{valueString:t.toString()}])}parseRuleContext(){let e=this.parser.consume().value;for(;this.parser.peek()?.value===".";)this.parser.consume("."),e+="."+this.parser.consume().value;return e}parseRuleDependents(){let e=this.parser.consumeAndParse(y.Arrow);return[{name:e.name,variable:e.args.map(t=>t.name)}]}parseConceptMap(){this.parser.consume("Symbol","conceptmap");let e={resourceType:"ConceptMap",status:"active",url:"#"+this.parser.consume("String").value};this.parser.consume("{");let t={},n=this.parser.peek()?.value;for(;n!=="}";)n==="prefix"?this.parseConceptMapPrefix(t):this.parseConceptMapRule(e,t),n=this.parser.peek()?.value;this.parser.consume("}"),this.structureMap.contained||(this.structureMap.contained=[]),this.structureMap.contained.push(e)}parseConceptMapPrefix(e){this.parser.consume("Symbol","prefix");let t=this.parser.consume().value;this.parser.consume("=");let n=this.parser.consume().value;e[t]=n}parseConceptMapRule(e,t){let n=this.parser.consume().value,i=t[n];this.parser.consume(":");let o=this.parser.consume().value,s=Va[this.parser.consume().value],a=this.parser.consume().value,c=t[a];this.parser.consume(":");let u=this.parser.consume().value,l=e?.group?.find(h=>h.source===i&&h.target===c);l||(l={source:i,target:c,element:[]},e.group||(e.group=[]),e.group.push(l)),l.element||(l.element=[]),l.element.push({code:o,target:[{code:u,equivalence:s}]})}};function Ui(r){if(r instanceof q)return{valueId:r.name};if(r instanceof U)return Ma(r);throw new Error(`Unknown parameter atom type: ${r.constructor.name} (${r.toString()})`)}function Ma(r){switch(r.value.type){case"boolean":return{valueBoolean:r.value.value};case"decimal":return{valueDecimal:r.value.value};case"integer":return{valueInteger:r.value.value};case"dateTime":case"string":return{valueString:r.value.value};default:throw new Error("Unknown target literal type: "+r.value.type)}}var _a=qe().registerInfix("->",{precedence:y.Arrow}).registerInfix(";",{precedence:y.Semicolon});function Hf(r){let e=_a.construct(Li(r));return e.removeComments(),new Kr(e).parse()}var Yr=class{constructor(e=[]){this.resources=e}get(e,t){let n=[];for(let i of this.resources)i.resourceType===e&&i.url&&this.matchesUrl(i.url,t)&&n.push(i);return n}matchesUrl(e,t){if(t.includes("*")){let n=t.split("*");return e.startsWith(n[0])&&e.endsWith(n[1])}else return e===t}};function eh(r,e,t=new Yr){return Na({root:r,transformMaps:t},r,e)}function Na(r,e,t){return Fa(r,e),Wi(r,e),Xr(r,e.group[0],t)}function Fa(r,e){let t=Wt(r);if(t&&e.import)for(let n of e.import){let i=t.get("StructureMap",n);for(let o of i)Wi(r,o)}}function Wi(r,e){let t=Wt(r);if(t&&e.contained)for(let n of e.contained)(n.resourceType==="StructureMap"||n.resourceType==="ConceptMap")&&t.resources.push(n);if(e.group)for(let n of e.group)Bt(r,n.name,{type:"StructureMapGroup",value:n})}function Xr(r,e,t){let n=[],i=[];for(let u of e.input)u.mode==="source"&&n.push(u),u.mode==="target"&&i.push(u);if(n.length===0)throw new Error("Missing source definitions");if(i.length===0)throw new Error("Missing target definitions");if(t.length<n.length)throw new Error(`Not enough arguments (got ${t.length}, min ${n.length})`);if(t.length>n.length+i.length)throw new Error(`Too many arguments (got ${t.length}, max ${n.length+i.length})`);let o={},s=[],a=0;for(let u of n)Qe(o,u.name,t[a++]);for(let u of i){let l=t[a++]??{type:u.type??"BackboneElement",value:{}};Qe(o,u.name,l),s.push(l)}let c={root:r.root,parent:r,variables:o};if(e.rule)for(let u of e.rule)qi(c,u);return s}function qi(r,e){e.source&&ji(r,e,0)}function ji(r,e,t){let n=e.source[t];for(let i of Wa(r,n))Bt(r,"_",i),n.variable&&Bt(r,n.variable,i),t<e.source.length-1?ji(r,e,t+1):La(r,e)}function La(r,e){if(!Ua(r,e)){if(e.target)for(let t of e.target)$i(r,t);if(e.rule)for(let t of e.rule)qi(r,t);if(e.dependent)for(let t of e.dependent)Ya(r,t)}}function Ua(r,e){if(!e.target||e.target.length!==1||e.target[0].transform||e.rule||e.dependent)return!1;let t=ce(r,"_");if(Array.isArray(t)&&(t=t[0]),!t)return!1;let n=Ba(r,t);if(!n)return $i(r,{...e.target[0],transform:"copy",parameter:[{valueId:"_"}]}),!0;let i=e.target[0],o=ce(r,i.context),s=o.value[i.element],a=Hi(o,i.element)||Array.isArray(s),c={root:r.root,parent:r,variables:{}},u=Xr(c,n,[t]);return Gi(r,i,o,u,a,s),!0}function Ba(r,e){let t=r;for(;t;){if(t.variables)for(let n of Object.values(t.variables)){let i=Zr(n);for(let o of i)if(o.type==="StructureMapGroup"){let s=o.value;if((s.typeMode==="types"||s.typeMode==="type-and-types")&&s.input.length===2&&s.input[0].mode==="source"&&s.input[0].type===e.type&&s.input[1].mode==="target")return s}}t=t.parent}}function Wa(r,e){let t=ce(r,e.context);if(!t)return[];let n=e.element;if(!n)return[t];let i=w(n,[t]);if(!i||i.length===0)return[];if(e.condition&&!Bi(t,{[e.variable]:i[0]},e.condition))return[];if(e.check&&!Bi(t,{[e.variable]:i[0]},e.check))throw new Error("Check failed: "+e.check);return e.listMode&&(i=qa(e,i)),i}function Bi(r,e,t){return N(w(t,[r],e))}function qa(r,e){switch(r.listMode){case"first":return[e[0]];case"not_first":return e.slice(1);case"last":return[e[e.length-1]];case"not_last":return e.slice(0,e.length-1);case"only_one":if(e.length!==1)throw new Error("Expected only one value");break}return e}function $i(r,e){let t=ce(r,e.context);if(!t)throw new Error("Target not found: "+e.context);let n=t.value[e.element],i,o=Hi(t,e.element)||Array.isArray(n);if(e.transform)switch(e.transform){case"append":i=ja(r,e);break;case"cast":i=$a(r,e);break;case"cc":i=Ga(r,e);break;case"copy":i=Ha(r,e);break;case"create":i=Qa(r,e);break;case"evaluate":i=za(r,e);break;case"translate":i=Ja(r,e);break;case"truncate":i=Ka(r,e);break;case"uuid":i=[{type:"string",value:ve()}];break;default:throw new Error(`Unsupported transform: ${e.transform}`)}else{let s=Qi(t,e.element)?.type,a=s?.length===1?s[0].code:void 0;o||n===void 0?i=[a?{type:a,value:{}}:x({})]:i=[a?{type:a,value:n}:x(n)]}Gi(r,e,t,i,o,n)}function Gi(r,e,t,n,i,o){if(n.length!==0){if(i){o||(o=[],Qe(t.value,e.element,o));for(let s of n)o.push(s.value)}else Qe(t.value,e.element,n[0].value);e.variable&&Bt(r,e.variable,Za(n))}}function Hi(r,e){return Qi(r,e)?.isArray}function Qi(r,e){return _e(r.type)?.elements?.[e]}function ja(r,e){let t=_(r,e.parameter?.[0])?.[0]?.value,n=_(r,e.parameter?.[1])?.[0]?.value;return[{type:"string",value:(t??"").toString()+(n??"").toString()}]}function $a(r,e){let t=_(r,e.parameter?.[0])?.[0];return _(r,e.parameter?.[1])?.[0]?.value==="string"?[{type:"string",value:t?.value?.toString()}]:[t]}function Ga(r,e){let t=e.parameter;if(t.length===2){let n=_(r,t[0])?.[0]?.value,i=_(r,t[1])?.[0]?.value;return[{type:"CodeableConcept",value:{coding:[{system:n,code:i}]}}]}else return[{type:"CodeableConcept",value:{text:_(r,t[0])?.[0]?.value}}]}function Ha(r,e){return e.parameter.flatMap(t=>_(r,t))}function Qa(r,e){let t={};return e.parameter&&e.parameter.length>0&&(t.resourceType=_(r,e.parameter?.[0])?.[0]?.value),[x(t)]}function za(r,e){let n=_(r,e.parameter?.[0])[0].value;return w(n,[],zi(r))}function Ja(r,e){let t=e.parameter.flatMap(c=>_(r,c)),n=t[0].value,i=t[1].value,s=Wt(r)?.get("ConceptMap",i)[0];if(!s)throw new Error("ConceptMap not found: "+i);let a=Fi(s,{system:s.group?.[0]?.source,code:n});return[x(a.match?.[0]?.concept?.code)]}function Ka(r,e){let t=_(r,e.parameter?.[0])?.[0],n=_(r,e.parameter?.[1])?.[0]?.value;return t.type==="string"?[{type:"string",value:t.value.substring(0,n)}]:[t]}function Ya(r,e){let t=ce(r,e.name);if(!t)throw new Error("Dependent group not found: "+e.name);let n=e.variable,i=[];for(let s of n){let a=ce(r,s);if(!a)throw new Error("Dependent variable not found: "+s);i.push(a)}let o={root:r.root,parent:r,variables:{}};Xr(o,t.value,i)}function Wt(r){if(r.transformMaps)return r.transformMaps;if(r.parent)return Wt(r.parent)}function _(r,e){let n=P({type:"StructureMapGroupRuleTargetParameter",value:e},"value");if(!n)throw new Error("Missing target parameter: "+JSON.stringify(e));if(n=Zr(n),n.length===1&&n[0].type==="id"){let i=ce(r,n[0].value);if(!i)throw new Error("Variable not found: "+n[0].value);return Zr(i)}return n}function ce(r,e){let t=r.variables?.[e];if(t)return t;if(r.parent)return ce(r.parent,e)}function zi(r,e={}){if(r.parent&&zi(r.parent,e),r.variables)for(let[t,n]of Object.entries(r.variables))e[t]=n,e["%"+t]=n;return e}function Bt(r,e,t){r.variables||(r.variables={}),Qe(r.variables,e,t)}function Qe(r,e,t){if(e==="__proto__"||e==="constructor"||e==="prototype")throw new Error("Invalid key: "+e);r[e]=t}function Zr(r){return Array.isArray(r)?r:[r]}function Za(r){return r.length===1?r[0]:r}var Xa=" ".repeat(2),Ji=class{constructor(e=Xa,t=!0){this.indent=e,this.b=[],this.indentCount=0,t&&(this.appendNoWrap("/*"),this.appendNoWrap(" * This is a generated file"),this.appendNoWrap(" * Do not edit manually."),this.appendNoWrap(" */"),this.newLine())}newLine(){this.b.push(`
44
44
  `)}appendNoWrap(e){this.b.push(this.indent.repeat(this.indentCount)),this.b.push(e),this.b.push(`
45
45
  `)}append(e){let t=this.indent.repeat(this.indentCount)+e;if(t.length<160)this.b.push(t),this.b.push(`
46
- `);else{let n=!0;for(let i of Ya(t,120-this.indent.length*this.indentCount))n?this.b.push(this.indent.repeat(this.indentCount)):this.b.push(this.indent.repeat(this.indentCount+2)),this.b.push(i.trim()),this.b.push(`
46
+ `);else{let n=!0;for(let i of ec(t,120-this.indent.length*this.indentCount))n?this.b.push(this.indent.repeat(this.indentCount)):this.b.push(this.indent.repeat(this.indentCount+2)),this.b.push(i.trim()),this.b.push(`
47
47
  `),n=!1}}toString(){return this.b.join("").replaceAll(`
48
48
 
49
49
 
50
50
  `,`
51
51
 
52
- `)}};function Ya(r,e){let t=[],n=[],i=0;return r.split(" ").forEach(function(o){i+o.length>e&&(t.push(n.join(" ").trim()),n=[],i=0),i+=o.length+1,n.push(o)}),n.length>0&&t.push(n.join(" ").trim()),t}var Za=[...Ue,"eq","ne","co"];function zi(r){return new oe(r,Le,Za,{dateTimeLiterals:!0,symbolRegex:/[^\s\])]/}).tokenize()}var Wt=class{constructor(e,t,n){this.path=e;this.operator=t;this.value=n}},qt=class{constructor(e){this.child=e}},$t=class{constructor(e,t,n){this.keyword=e;this.left=t;this.right=n}};var Xa={eq:"exact",ne:"ne",co:"contains",sw:"sw",ew:void 0,gt:"gt",lt:"lt",ge:"ge",le:"le",ap:"ap",sa:"sa",eb:"eb",pr:"present",po:void 0,ss:void 0,sb:void 0,in:"in",ni:"not-in",re:"eq",identifier:"identifier"};function ec(r){let e=Xa[r];if(!e)throw new d(S("Invalid operator: "+r));return e}var Zr=class{constructor(e){this.parser=e}parse(){let e;this.parser.peek()?.value==="("?(this.parser.consume("("),e=this.parse(),this.parser.consume(")")):this.parser.peek()?.value==="not"?(this.parser.consume("Symbol","not"),this.parser.consume("("),e=new qt(this.parse()),this.parser.consume(")")):e=new Wt(this.parser.consume("Symbol").value,ec(this.parser.consume("Symbol").value),this.parser.consume().value);let t=this.parser.peek()?.value;return t==="and"||t==="or"?(this.parser.consume("Symbol",t),new $t(t,e,this.parse())):e}},tc=Be();function dh(r){let e=tc.construct(zi(r));return e.removeComments(),new Zr(e).parse()}var ae=class{constructor(e="\r",t="|",n="^",i="~",o="\\",s="&"){this.segmentSeparator=e;this.fieldSeparator=t;this.componentSeparator=n;this.repetitionSeparator=i;this.escapeCharacter=o;this.subcomponentSeparator=s}getMsh1(){return this.fieldSeparator}getMsh2(){return this.componentSeparator+this.repetitionSeparator+this.escapeCharacter+this.subcomponentSeparator}},Ji=class r{constructor(e,t=new ae){this.context=t,this.segments=e}get header(){return this.segments[0]}getSegment(e){return typeof e=="number"?this.segments[e]:this.segments.find(t=>t.name===e)}getAllSegments(e){return this.segments.filter(t=>t.name===e)}toString(){return this.segments.map(e=>e.toString()).join(this.context.segmentSeparator)}buildAck(){let e=new Date,t=this.getSegment("MSH"),n=t?.getField(3)?.toString()??"",i=t?.getField(4)?.toString()??"",o=t?.getField(5)?.toString()??"",s=t?.getField(6)?.toString()??"",a=t?.getField(10)?.toString()??"",c=t?.getField(12)?.toString()??"2.5.1";return new r([new He(["MSH",this.context.getMsh2(),o,s,n,i,nc(e),"",this.buildAckMessageType(t),e.getTime().toString(),"P",c],this.context),new He(["MSA","AA",a,"OK"],this.context)])}buildAckMessageType(e){let t=e?.getField(9),n=t?.getComponent(2),i=t?.getComponent(3),o="ACK";return n&&i?o=`ACK^${n}^ACK`:n&&(o=`ACK^${n}`),o}static parse(e){if(!e.startsWith("MSH")){let n=new Error("Invalid HL7 message");throw n.type="entity.parse.failed",n}let t=new ae("\r",e.charAt(3),e.charAt(4),e.charAt(5),e.charAt(6),e.charAt(7));return new r(e.split(/[\r\n]+/).map(n=>He.parse(n,t)),t)}},He=class r{constructor(e,t=new ae){this.context=t,$n(e)?this.fields=e.map(n=>De.parse(n,t)):this.fields=e,this.name=this.fields[0].components[0][0]}getField(e){if(this.name==="MSH"){if(e===1)return new De([[this.context.getMsh1()]],this.context);if(e===2)return new De([[this.context.getMsh2()]],this.context);if(e>2)return this.fields[e-1]}return this.fields[e]}getComponent(e,t,n,i=0){return this.getField(e)?.getComponent(t,n,i)??""}toString(){return this.fields.map(e=>e.toString()).join(this.context.fieldSeparator)}static parse(e,t=new ae){return new r(e.split(t.fieldSeparator).map(n=>De.parse(n,t)),t)}},De=class r{constructor(e,t=new ae){this.context=t,this.components=e}getComponent(e,t,n=0){let i=this.components[n][e-1]??"";return t!==void 0&&(i=i.split(this.context.subcomponentSeparator)[t]??""),i}toString(){return this.components.map(e=>e.join(this.context.componentSeparator)).join(this.context.repetitionSeparator)}static parse(e,t=new ae){return new r(e.split(t.repetitionSeparator).map(n=>n.split(t.componentSeparator)),t)}};function mh(r,e){if(!r)return;let t=ve(r.slice(0,4),0),n=ve(r.slice(4,6),1)-1,i=ve(r.slice(6,8),1),o=ve(r.slice(8,10),0),s=ve(r.slice(10,12),0),a=ve(r.slice(12,14),0),c=0;r.includes(".")&&(c=ve(r.slice(15,19),0));let u=new Date(Date.UTC(t,n,i,o,s,a,c)),p=rc(r,e?.tzOffset);return p!==0&&(u=new Date(u.getTime()-p)),u.toISOString()}function ve(r,e){let t=parseInt(r,10);return isNaN(t)?e:t}function rc(r,e){let t=e,n=r.indexOf("+");n!==-1&&(t=r.slice(n));let i=r.indexOf("-");if(i!==-1&&(t=r.slice(i)),!t)return 0;let o=t.startsWith("-")?-1:1;t=t.slice(1).replace(":","");let s=parseInt(t.slice(0,2),10),a=parseInt(t.slice(2,4),10);return o*(s*60*60*1e3+a*60*1e3)}function nc(r){let e=r instanceof Date?r:new Date(r),n=e.toISOString().replace(/[-:T]/g,"").replace(/(\.\d+)?Z$/,""),i=e.getUTCMilliseconds();return i>0&&(n+="."+i.toString()),n}var Xr=(o=>(o[o.NONE=0]="NONE",o[o.ERROR=1]="ERROR",o[o.WARN=2]="WARN",o[o.INFO=3]="INFO",o[o.DEBUG=4]="DEBUG",o))(Xr||{}),Ki=class r{constructor(e,t={},n=3,i){this.write=e;this.metadata=t;this.level=n;this.options=i;i?.prefix&&(this.prefix=i.prefix),this.error=this.error.bind(this),this.warn=this.warn.bind(this),this.info=this.info.bind(this),this.debug=this.debug.bind(this),this.log=this.log.bind(this)}clone(e){let t=this.getLoggerConfig(),n=e?{...t,override:e,options:{...t.options,...e.options}}:t;return new r(n.write,n.metadata,n.level,n.options)}getLoggerConfig(){let{write:e,metadata:t,level:n,options:i}=this;return{write:e,metadata:t,level:n,options:i}}error(e,t){this.log(1,e,t)}warn(e,t){this.log(2,e,t)}info(e,t){this.log(3,e,t)}debug(e,t){this.log(4,e,t)}log(e,t,n){e>this.level||(n instanceof Error&&(n={error:n.toString(),stack:n.stack?.split(`
53
- `)}),this.write(JSON.stringify({level:Xr[e],timestamp:new Date().toISOString(),msg:this.prefix?`${this.prefix}${t}`:t,...n,...this.metadata})))}};function gh(r){let e=Xr[r.toUpperCase()];if(e===void 0)throw new Error(`Invalid log level: ${r}`);return e}function Sh(r){if(!r)throw new d(m("Resource type is null"));if(!Cn(r))throw new d(m("Unknown resource type"))}function Yi(r,e,t){r===null?t.push(v(e,"Invalid null value")):Array.isArray(r)?ic(r,e,t):typeof r=="object"&&oc(r,e,t)}function ic(r,e,t){for(let n=0;n<r.length;n++)r[n]===void 0?t.push(v(`${e}[${n}]`,"Invalid undefined value")):Yi(r[n],`${e}[${n}]`,t)}function oc(r,e,t){for(let[n,i]of Object.entries(r))Yi(i,`${e}${e?".":""}${n}`,t)}function Eh(r){let e=[];return new Promise((t,n)=>{r.on("data",i=>e.push(Buffer.from(i))),r.on("error",i=>{r.destroy(),n(i)}),r.on("end",()=>{t(Buffer.concat(e))}),r.on("close",()=>{r.destroy()})})}function wh(r,e){let t=[];for(let n of e)t.push(...sc(r,n));return t}function sc(r,e){if(!r.resource)throw new Error("Resource type is required");if(r.resource!==e.resourceType)return[];let t={};if(r.constant)for(let i of r.constant){let o={type:"ViewDefinitionConstant",value:i};t["%"+i.name]=P(o,"value")}let n=g(e);if(r.where)for(let i of r.where){let o=w(i.path,[n],t);if(o.length!==1)return[];if(o[0].type!=="boolean")throw new Error("WHERE clause must evaluate to a boolean");if(!o[0].value)return[]}return en(r,n,t)}function en(r,e,t){let n=[],i;r.forEach?i=w(r.forEach,[e],t):r.forEachOrNull?i=w(r.forEachOrNull,[e],t):i=[e];for(let o of i){let s=[];for(let a of r.column??[]){let c=w(a.path,[o],t),u;if(c.length===0)u={[a.name]:null};else if(a.collection)u={[a.name]:c.map(p=>p.value)};else if(c.length===1)u={[a.name]:c[0].value};else throw new Error("Multiple values found but not expected for column");s.push([u])}for(let a of r.select??[]){let c=en(a,o,t);s.push(c)}if(r.unionAll){let a=[];for(let c of r.unionAll)for(let u of en(c,o,t))a.push(u);s.push(a)}n.push(...ac(s))}if(i.length===0&&r.forEachOrNull){let o={};for(let s of r.column??[])o[s.name]=null;n.push(o)}return n}function ac(r){if(r.length===0)return[];let e=r[0];for(let t=1;t<r.length;t++)e=cc(e,r[t]);return e}function cc(r,e){let t=[];for(let n of r)for(let i of e)t.push(uc(n,i));return t}function uc(r,e){let t={};return Object.assign(t,r),Object.assign(t,e),t}var lc="https://meta.medplum.com/releases",jt=new Map;function kh(){jt.clear()}function pc(r){let e=r;if(!e.tag_name)throw new Error("Manifest missing tag_name");let t=e.assets;if(!t?.length)throw new Error("Manifest missing assets list");for(let n of t){if(!n.browser_download_url)throw new Error("Asset missing browser download URL");if(!n.name)throw new Error("Asset missing name")}}async function tn(r,e,t){let n=jt.get(e??"latest");if(!n){let i=e?`v${e}`:"latest",o=new URL(`${lc}/${i}.json`);if(o.searchParams.set("a",r),o.searchParams.set("c",jr),t)for(let[c,u]of Object.entries(t))o.searchParams.set(c,u);let s=await fetch(o.toString());if(s.status!==200){let c;try{c=(await s.json()).message}catch(u){console.error(`Failed to parse message from body: ${be(u)}`)}throw new Error(`Received status code ${s.status} while fetching manifest for version '${e??"latest"}'. Message: ${c}`)}let a=await s.json();pc(a),n=a,jt.set(e??"latest",n),e||jt.set(n.tag_name.slice(1),n)}return n}function dc(r){return/^\d+\.\d+\.\d+$/.test(r)}async function Dh(r,e){if(!dc(e))return!1;try{await tn(r,e)}catch{return!1}return!0}async function Vh(r){let e=await tn(r);if(!e.tag_name.startsWith("v"))throw new Error(`Invalid release name found. Release tag '${e.tag_name}' did not start with 'v'`);return e.tag_name.slice(1)}async function Mh(r,e){try{let t=jr.split("-")[0],i=(await tn(r,void 0,e)).tag_name.slice(1);t!==i&&console.warn(`A new version (v${i}) of Medplum is available. Your current version (v${t}) may be missing important updates and bug fixes.`)}catch(t){console.warn(`Failed to check for newer version: ${be(t)}`)}}export{Fs as AccessPolicyInteraction,xt as AndAtom,V as ArithemticOperatorAtom,he as AsAtom,C as BooleanInfixOperatorAtom,gc as CPT,qe as ClientStorage,pt as ConcatAtom,dt as ContainsAtom,A as ContentType,oa as DEFAULT_ACCEPT,Pp as DEFAULT_MAX_SEARCH_COUNT,Cp as DEFAULT_SEARCH_COUNT,ie as DotAtom,ut as EmptySetAtom,ht as EqualsAtom,yt as EquivalentAtom,Fr as EventTarget,cf as ExternalSecretSystems,Lr as FHIRCAST_EVENT_NAMES,zs as FHIRCAST_EVENT_RESOURCES,Ur as FHIRCAST_EVENT_VERSION_REQUIRED,Qs as FHIRCAST_RESOURCE_TYPES,Wt as FhirFilterComparison,$t as FhirFilterConnective,qt as FhirFilterNegation,ct as FhirPathAtom,wt as FhircastConnection,Qi as FileBuilder,Y as FunctionAtom,nn as HTTP_HL7_ORG,Tc as HTTP_TERMINOLOGY_HL7_ORG,ae as Hl7Context,De as Hl7Field,Ji as Hl7Message,He as Hl7Segment,xc as ICD10,St as ImpliesAtom,ft as InAtom,ye as IndexerAtom,Z as InfixOperatorAtom,me as IsAtom,hc as LOINC,Pt as LRUCache,U as LiteralAtom,Xr as LogLevel,Ki as Logger,nf as MEDPLUM_CLI_CLIENT_ID,lc as MEDPLUM_RELEASES_URL,jr as MEDPLUM_VERSION,Mt as MedplumClient,It as MedplumKeyValueClient,qr as MemoryStorage,Ci as MockAsyncClientStorage,vc as NDC,mt as NotEqualsAtom,gt as NotEquivalentAtom,ma as OAuthClientAssertionType,da as OAuthGrantType,ha as OAuthTokenAuthMethod,fa as OAuthTokenType,d as OperationOutcomeError,pi as Operator,y as OperatorPrecedence,vt as OrAtom,Gt as Parser,Je as ParserBuilder,ze as PrefixOperatorAtom,l as PropertyType,yc as RXNORM,M as ReadablePromise,Dt as ReconnectingWebSocket,mc as SNOMED,oi as SearchParameterType,$e as SubscriptionEmitter,Vt as SubscriptionManager,W as SymbolAtom,oe as Tokenizer,Jr as TransformMapCollection,Q as TypedEventTarget,rn as UCUM,lt as UnaryOperatorAtom,Oe as UnionAtom,Bo as VALID_HOSTNAME_REGEX,Tt as XorAtom,Ic as accepted,ul as addProfileToResource,bc as allOk,we as append,Vf as applyDefaultValuesToElement,Df as applyDefaultValuesToResource,Lt as applyFixedOrPatternValue,Hn as arrayBufferToBase64,Gn as arrayBufferToHex,Me as arrayify,ta as assert,vi as assertContextVersionOptional,qc as assertOk,pc as assertReleaseManifest,S as badRequest,f as booleanToTypedValue,Gr as buildElementsContext,Yo as buildTypeName,ot as calculateAge,Hu as calculateAgeString,Up as canReadResourceType,Bp as canWriteResource,Us as canWriteResourceType,k as capitalize,Yi as checkForNull,Dh as checkIfValidMedplumVersion,kh as clearReleaseCache,jc as compressElement,B as concatUrls,_i as conceptMapTranslate,kc as conflict,zp as convertContainedResourcesToBundle,qs as convertToTransactionBundle,pr as crawlTypedValue,pu as crawlTypedValueAsync,hn as createConstraintIssue,Wr as createFhircastMessagePayload,ce as createOperationOutcomeIssue,mn as createProcessingIssue,Pe as createReference,v as createStructureIssue,Ec as created,hi as decodeBase64,pe as deepClone,te as deepEquals,_e as deepIncludes,mi as encodeBase64,yi as encryptSHA256,Uo as ensureNoLeadingSlash,Pr as ensureTrailingSlash,Ie as evalFhirPath,w as evalFhirPathTyped,wh as evalSqlOnFhir,Vh as fetchLatestVersionString,tn as fetchVersionManifest,_n as fhirPathArrayEquals,yr as fhirPathArrayEquivalent,Nn as fhirPathArrayNotEquals,mr as fhirPathEquals,vo as fhirPathEquivalent,nt as fhirPathIs,Mn as fhirPathNot,dr as fhirTypeToJsType,el as findObservationInterval,tl as findObservationReferenceRange,sl as findResourceByCode,dl as flatMapFilter,Cc as forbidden,qo as formatAddress,Ne as formatCodeableConcept,Xn as formatCoding,xl as formatDate,wr as formatDateTime,gl as formatFamilyName,yl as formatGivenName,nc as formatHl7DateTime,Fe as formatHumanName,bl as formatMoney,zo as formatObservationValue,vl as formatPeriod,ne as formatQuantity,Sl as formatRange,Wo as formatReferenceString,Ap as formatSearchQuery,$o as formatTime,Tl as formatTiming,ge as generateId,En as getAllDataTypes,zu as getAllQuestionnaireAnswers,Tr as getCodeBySystem,X as getDataType,Gu as getDateProperty,Mf as getDefaultValuesForNewSliceEntry,bo as getDisplayString,it as getElementDefinition,ts as getElementDefinitionFromElements,nr as getElementDefinitionTypeName,gp as getExpressionForResourceType,ai as getExpressionsForResourceType,ee as getExtension,Ku as getExtensionValue,Co as getIdentifier,ju as getImageSrc,Re as getNestedProperty,re as getPathDifference,Vl as getPathDisplayName,Zo as getPropertyDisplayName,Zn as getQueryString,Qu as getQuestionnaireAnswers,Nr as getRandomString,z as getReferenceString,Il as getResourceTypes,Dl as getSearchParameter,Dr as getSearchParameterDetails,kl as getSearchParameters,Wc as getStatus,P as getTypedPropertyValue,co as getTypedPropertyValueWithPath,go as getTypedPropertyValueWithSchema,xo as getTypedPropertyValueWithoutSchema,Vi as getValueSliceName,Yn as getWebSocketUrl,F as globalSchema,Pc as gone,An as indexDefaultSearchParameters,Or as indexSearchParameter,Ol as indexSearchParameterBundle,sr as indexStructureDefinitionBundle,yn as inflateBaseSchema,to as inflateElement,Be as initFhirPathParserBuilder,_c as isAccepted,vr as isCodeableConcept,xr as isCoding,Ti as isCompletedSubscriptionRequest,Er as isComplexTypeCode,Lc as isConflict,xi as isContextVersionRequired,Mc as isCreated,Rn as isDataTypeLoaded,Fn as isDateString,Ce as isDateTimeString,b as isEmpty,ia as isFhirCriteriaMet,Js as isFhircastResourceType,Uc as isGone,Si as isJwt,Zu as isLowerCase,bi as isMedplumAccessToken,Fc as isNotFound,R as isObject,er as isOk,Se as isOperationOutcome,Ln as isPeriod,J as isPopulated,Xe as isPrimitiveType,Pn as isProfileLoaded,So as isProfileResource,D as isQuantity,Un as isQuantityEquivalent,Nc as isRedirect,q as isReference,O as isResource,Cn as isResourceType,cr as isResourceTypeSchema,Sr as isResourceWithId,Di as isSliceDefinitionWithTypes,Do as isString,$n as isStringArray,Vo as isTextObject,Yu as isUUID,Bc as isUnauthenticated,Ar as isValidDate,cl as isValidHostname,dc as isValidMedplumSemver,Kn as lazy,ar as loadDataType,ll as mapByIdentifier,hr as matchDiscriminant,Jn as matchesRange,Rt as matchesSearchRequest,Ac as multipleMatches,Qn as normalizeArrayBufferView,of as normalizeCreateBinaryOptions,sf as normalizeCreatePdfOptions,be as normalizeErrorString,Ze as normalizeOperationOutcome,ln as notFound,Rc as notModified,Xi as operationOutcomeIssueToString,fn as operationOutcomeToString,Ir as parseFhirPath,dh as parseFilterParameter,mh as parseHl7DateTime,Ot as parseJWTPayload,gh as parseLogLevel,Gf as parseMappingLanguage,xs as parseParameter,$u as parseReference,We as parseSearchRequest,ir as parseStructureDefinition,wp as parseXFhirQuery,nl as preciseEquals,ol as preciseGreaterThan,Lo as preciseGreaterThanOrEquals,il as preciseLessThan,Fo as preciseLessThanOrEquals,rl as preciseRound,wc as preconditionFailed,Ns as projectAdminResourceTypes,_s as protectedResourceTypes,Vc as redirect,rt as removeDuplicates,pl as removeProfileFromResource,js as reorderBundle,le as resolveId,wd as resourceMatchesSubscriptionCriteria,Bs as satisfiedAccessPolicy,Br as serializeFhircastSubscriptionRequest,dn as serverError,Dc as serverTimeout,Xu as setCodeBySystem,Ju as setIdentifier,$ as singleton,al as singularize,Rr as sleep,at as sortStringArray,Cr as splitN,Et as splitSearchOnComma,Eh as streamToBuffer,st as stringify,ni as stringifyTypedValue,Xf as structureMapTransform,tu as subsetResource,N as toJsBoolean,Fu as toPeriod,g as toTypedValue,Oc as tooManyRequests,Ve as tryGetDataType,Ei as tryGetJwtExpiration,wn as tryGetProfile,ml as typedValueToString,Te as unauthorized,Xt as unauthorizedTokenAudience,pn as unauthorizedTokenExpired,At as validateFhircastSubscriptionRequest,Iu as validateResource,Sh as validateResourceType,ku as validateTypedValue,m as validationError,tt as validationRegexes,Mh as warnIfNewerVersionAvailable,Ya as wordWrap};
52
+ `)}};function ec(r,e){let t=[],n=[],i=0;return r.split(" ").forEach(function(o){i+o.length>e&&(t.push(n.join(" ").trim()),n=[],i=0),i+=o.length+1,n.push(o)}),n.length>0&&t.push(n.join(" ").trim()),t}var tc=[...We,"eq","ne","co"];function Ki(r){return new ae(r,Be,tc,{dateTimeLiterals:!0,symbolRegex:/[^\s\])]/}).tokenize()}var qt=class{constructor(e,t,n){this.path=e;this.operator=t;this.value=n}},jt=class{constructor(e){this.child=e}},$t=class{constructor(e,t,n){this.keyword=e;this.left=t;this.right=n}};var rc={eq:"exact",ne:"ne",co:"contains",sw:"sw",ew:void 0,gt:"gt",lt:"lt",ge:"ge",le:"le",ap:"ap",sa:"sa",eb:"eb",pr:"present",po:void 0,ss:void 0,sb:void 0,in:"in",ni:"not-in",re:"eq",identifier:"identifier"};function nc(r){let e=rc[r];if(!e)throw new p(S("Invalid operator: "+r));return e}var en=class{constructor(e){this.parser=e}parse(){let e;this.parser.peek()?.value==="("?(this.parser.consume("("),e=this.parse(),this.parser.consume(")")):this.parser.peek()?.value==="not"?(this.parser.consume("Symbol","not"),this.parser.consume("("),e=new jt(this.parse()),this.parser.consume(")")):e=new qt(this.parser.consume("Symbol").value,nc(this.parser.consume("Symbol").value),this.parser.consume().value);let t=this.parser.peek()?.value;return t==="and"||t==="or"?(this.parser.consume("Symbol",t),new $t(t,e,this.parse())):e}},ic=qe();function fh(r){let e=ic.construct(Ki(r));return e.removeComments(),new en(e).parse()}var ue=class{constructor(e="\r",t="|",n="^",i="~",o="\\",s="&"){this.segmentSeparator=e;this.fieldSeparator=t;this.componentSeparator=n;this.repetitionSeparator=i;this.escapeCharacter=o;this.subcomponentSeparator=s}getMsh1(){return this.fieldSeparator}getMsh2(){return this.componentSeparator+this.repetitionSeparator+this.escapeCharacter+this.subcomponentSeparator}},Yi=class r{constructor(e,t=new ue){this.context=t,this.segments=e}get header(){return this.segments[0]}get(e){return this.getSegment(e)}getAll(e){return this.getAllSegments(e)}getSegment(e){return typeof e=="number"?this.segments[e]:this.segments.find(t=>t.name===e)}getAllSegments(e){return this.segments.filter(t=>t.name===e)}toString(){return this.segments.map(e=>e.toString()).join(this.context.segmentSeparator)}buildAck(){let e=new Date,t=this.getSegment("MSH"),n=t?.getField(3)?.toString()??"",i=t?.getField(4)?.toString()??"",o=t?.getField(5)?.toString()??"",s=t?.getField(6)?.toString()??"",a=t?.getField(10)?.toString()??"",c=t?.getField(12)?.toString()??"2.5.1";return new r([new ze(["MSH",this.context.getMsh2(),o,s,n,i,sc(e),"",this.buildAckMessageType(t),e.getTime().toString(),"P",c],this.context),new ze(["MSA","AA",a,"OK"],this.context)])}buildAckMessageType(e){let t=e?.getField(9),n=t?.getComponent(2),i=t?.getComponent(3),o="ACK";return n&&i?o=`ACK^${n}^ACK`:n&&(o=`ACK^${n}`),o}static parse(e){if(!e.startsWith("MSH")){let n=new Error("Invalid HL7 message");throw n.type="entity.parse.failed",n}let t=new ue("\r",e.charAt(3),e.charAt(4),e.charAt(5),e.charAt(6),e.charAt(7));return new r(e.split(/[\r\n]+/).map(n=>ze.parse(n,t)),t)}},ze=class r{constructor(e,t=new ue){this.context=t,Gn(e)?this.fields=e.map(n=>Me.parse(n,t)):this.fields=e,this.name=this.fields[0].components[0][0]}get(e){return this.fields[e]}getField(e){if(this.name==="MSH"){if(e===1)return new Me([[this.context.getMsh1()]],this.context);if(e===2)return new Me([[this.context.getMsh2()]],this.context);if(e>2)return this.fields[e-1]}return this.fields[e]}getComponent(e,t,n,i=0){return this.getField(e)?.getComponent(t,n,i)??""}toString(){return this.fields.map(e=>e.toString()).join(this.context.fieldSeparator)}static parse(e,t=new ue){return new r(e.split(t.fieldSeparator).map(n=>Me.parse(n,t)),t)}},Me=class r{constructor(e,t=new ue){this.context=t,this.components=e}get(e,t,n=0){return this.getComponent(e+1,t,n)}getComponent(e,t,n=0){let i=this.components[n][e-1]??"";return t!==void 0&&(i=i.split(this.context.subcomponentSeparator)[t]??""),i}toString(){return this.components.map(e=>e.join(this.context.componentSeparator)).join(this.context.repetitionSeparator)}static parse(e,t=new ue){return new r(e.split(t.repetitionSeparator).map(n=>n.split(t.componentSeparator)),t)}};function yh(r,e){if(!r)return;let t=Se(r.slice(0,4),0),n=Se(r.slice(4,6),1)-1,i=Se(r.slice(6,8),1),o=Se(r.slice(8,10),0),s=Se(r.slice(10,12),0),a=Se(r.slice(12,14),0),c=0;r.includes(".")&&(c=Se(r.slice(15,19),0));let u=new Date(Date.UTC(t,n,i,o,s,a,c)),l=oc(r,e?.tzOffset);return l!==0&&(u=new Date(u.getTime()-l)),u.toISOString()}function Se(r,e){let t=parseInt(r,10);return isNaN(t)?e:t}function oc(r,e){let t=e,n=r.indexOf("+");n!==-1&&(t=r.slice(n));let i=r.indexOf("-");if(i!==-1&&(t=r.slice(i)),!t)return 0;let o=t.startsWith("-")?-1:1;t=t.slice(1).replace(":","");let s=parseInt(t.slice(0,2),10),a=parseInt(t.slice(2,4),10);return o*(s*60*60*1e3+a*60*1e3)}function sc(r){let e=r instanceof Date?r:new Date(r),n=e.toISOString().replace(/[-:T]/g,"").replace(/(\.\d+)?Z$/,""),i=e.getUTCMilliseconds();return i>0&&(n+="."+i.toString()),n}var tn=(o=>(o[o.NONE=0]="NONE",o[o.ERROR=1]="ERROR",o[o.WARN=2]="WARN",o[o.INFO=3]="INFO",o[o.DEBUG=4]="DEBUG",o))(tn||{}),Zi=class r{constructor(e,t={},n=3,i){this.write=e;this.metadata=t;this.level=n;this.options=i;i?.prefix&&(this.prefix=i.prefix),this.error=this.error.bind(this),this.warn=this.warn.bind(this),this.info=this.info.bind(this),this.debug=this.debug.bind(this),this.log=this.log.bind(this)}clone(e){let t=this.getLoggerConfig(),n=e?{...t,override:e,options:{...t.options,...e.options}}:t;return new r(n.write,n.metadata,n.level,n.options)}getLoggerConfig(){let{write:e,metadata:t,level:n,options:i}=this;return{write:e,metadata:t,level:n,options:i}}error(e,t){this.log(1,e,t)}warn(e,t){this.log(2,e,t)}info(e,t){this.log(3,e,t)}debug(e,t){this.log(4,e,t)}log(e,t,n){e>this.level||(n instanceof Error&&(n={error:n.toString(),stack:n.stack?.split(`
53
+ `)}),this.write(JSON.stringify({level:tn[e],timestamp:new Date().toISOString(),msg:this.prefix?`${this.prefix}${t}`:t,...n,...this.metadata})))}};function xh(r){let e=tn[r.toUpperCase()];if(e===void 0)throw new Error(`Invalid log level: ${r}`);return e}function bh(r){if(!r)throw new p(m("Resource type is null"));if(!wn(r))throw new p(m("Unknown resource type"))}function Xi(r,e,t){r===null?t.push(T(e,"Invalid null value")):Array.isArray(r)?ac(r,e,t):typeof r=="object"&&cc(r,e,t)}function ac(r,e,t){for(let n=0;n<r.length;n++)r[n]===void 0?t.push(T(`${e}[${n}]`,"Invalid undefined value")):Xi(r[n],`${e}[${n}]`,t)}function cc(r,e,t){for(let[n,i]of Object.entries(r))Xi(i,`${e}${e?".":""}${n}`,t)}function Rh(r){let e=[];return new Promise((t,n)=>{r.on("data",i=>e.push(Buffer.from(i))),r.on("error",i=>{r.destroy(),n(i)}),r.on("end",()=>{t(Buffer.concat(e))}),r.on("close",()=>{r.destroy()})})}function Ah(r,e){let t=[];for(let n of e)t.push(...uc(r,n));return t}function uc(r,e){if(!r.resource)throw new Error("Resource type is required");if(r.resource!==e.resourceType)return[];let t={};if(r.constant)for(let i of r.constant){let o={type:"ViewDefinitionConstant",value:i};t["%"+i.name]=P(o,"value")}let n=x(e);if(r.where)for(let i of r.where){let o=w(i.path,[n],t);if(o.length!==1)return[];if(o[0].type!=="boolean")throw new Error("WHERE clause must evaluate to a boolean");if(!o[0].value)return[]}return rn(r,n,t)}function rn(r,e,t){let n=[],i;r.forEach?i=w(r.forEach,[e],t):r.forEachOrNull?i=w(r.forEachOrNull,[e],t):i=[e];for(let o of i){let s=[];for(let a of r.column??[]){let c=w(a.path,[o],t),u;if(c.length===0)u={[a.name]:null};else if(a.collection)u={[a.name]:c.map(l=>l.value)};else if(c.length===1)u={[a.name]:c[0].value};else throw new Error("Multiple values found but not expected for column");s.push([u])}for(let a of r.select??[]){let c=rn(a,o,t);s.push(c)}if(r.unionAll){let a=[];for(let c of r.unionAll)for(let u of rn(c,o,t))a.push(u);s.push(a)}n.push(...lc(s))}if(i.length===0&&r.forEachOrNull){let o={};for(let s of r.column??[])o[s.name]=null;n.push(o)}return n}function lc(r){if(r.length===0)return[];let e=r[0];for(let t=1;t<r.length;t++)e=dc(e,r[t]);return e}function dc(r,e){let t=[];for(let n of r)for(let i of e)t.push(pc(n,i));return t}function pc(r,e){let t={};return Object.assign(t,r),Object.assign(t,e),t}var fc="https://meta.medplum.com/releases",Gt=new Map;function Dh(){Gt.clear()}function hc(r){let e=r;if(!e.tag_name)throw new Error("Manifest missing tag_name");let t=e.assets;if(!t?.length)throw new Error("Manifest missing assets list");for(let n of t){if(!n.browser_download_url)throw new Error("Asset missing browser download URL");if(!n.name)throw new Error("Asset missing name")}}async function nn(r,e,t){let n=Gt.get(e??"latest");if(!n){let i=e?`v${e}`:"latest",o=new URL(`${fc}/${i}.json`);if(o.searchParams.set("a",r),o.searchParams.set("c",Hr),t)for(let[c,u]of Object.entries(t))o.searchParams.set(c,u);let s=await fetch(o.toString());if(s.status!==200){let c;try{c=(await s.json()).message}catch(u){console.error(`Failed to parse message from body: ${Re(u)}`)}throw new Error(`Received status code ${s.status} while fetching manifest for version '${e??"latest"}'. Message: ${c}`)}let a=await s.json();hc(a),n=a,Gt.set(e??"latest",n),e||Gt.set(n.tag_name.slice(1),n)}return n}function mc(r){return/^\d+\.\d+\.\d+$/.test(r)}async function Vh(r,e){if(!mc(e))return!1;try{await nn(r,e)}catch{return!1}return!0}async function Mh(r){let e=await nn(r);if(!e.tag_name.startsWith("v"))throw new Error(`Invalid release name found. Release tag '${e.tag_name}' did not start with 'v'`);return e.tag_name.slice(1)}async function _h(r,e){try{let t=Hr.split("-")[0],i=(await nn(r,void 0,e)).tag_name.slice(1);t!==i&&console.warn(`A new version (v${i}) of Medplum is available. Your current version (v${t}) may be missing important updates and bug fixes.`)}catch(t){console.warn(`Failed to check for newer version: ${Re(t)}`)}}export{Us as AccessPolicyInteraction,vt as AndAtom,V as ArithemticOperatorAtom,ye as AsAtom,C as BooleanInfixOperatorAtom,Tc as CPT,$e as ClientStorage,pt as ConcatAtom,ft as ContainsAtom,A as ContentType,aa as DEFAULT_ACCEPT,Od as DEFAULT_MAX_SEARCH_COUNT,Ad as DEFAULT_SEARCH_COUNT,se as DotAtom,lt as EmptySetAtom,mt as EqualsAtom,gt as EquivalentAtom,Ur as EventTarget,uf as ExternalSecretSystems,Br as FHIRCAST_EVENT_NAMES,Ks as FHIRCAST_EVENT_RESOURCES,Wr as FHIRCAST_EVENT_VERSION_REQUIRED,Js as FHIRCAST_RESOURCE_TYPES,qt as FhirFilterComparison,$t as FhirFilterConnective,jt as FhirFilterNegation,ut as FhirPathAtom,At as FhircastConnection,Ji as FileBuilder,X as FunctionAtom,sn as HTTP_HL7_ORG,Ec as HTTP_TERMINOLOGY_HL7_ORG,ue as Hl7Context,Me as Hl7Field,Yi as Hl7Message,ze as Hl7Segment,Sc as ICD10,bt as ImpliesAtom,ht as InAtom,xe as IndexerAtom,ee as InfixOperatorAtom,ge as IsAtom,gc as LOINC,wt as LRUCache,U as LiteralAtom,tn as LogLevel,Zi as Logger,af as MEDPLUM_CLI_CLIENT_ID,fc as MEDPLUM_RELEASES_URL,Hr as MEDPLUM_VERSION,_t as MedplumClient,kt as MedplumKeyValueClient,$r as MemoryStorage,Pi as MockAsyncClientStorage,bc as NDC,yt as NotEqualsAtom,xt as NotEquivalentAtom,ga as OAuthClientAssertionType,ha as OAuthGrantType,ya as OAuthTokenAuthMethod,ma as OAuthTokenType,p as OperationOutcomeError,fi as Operator,y as OperatorPrecedence,Tt as OrAtom,Ht as Parser,Ke as ParserBuilder,Je as PrefixOperatorAtom,d as PropertyType,vc as RXNORM,M as ReadablePromise,Vt as ReconnectingWebSocket,xc as SNOMED,ai as SearchParameterType,Ge as SubscriptionEmitter,Mt as SubscriptionManager,q as SymbolAtom,ae as Tokenizer,Yr as TransformMapCollection,z as TypedEventTarget,on as UCUM,dt as UnaryOperatorAtom,ke as UnionAtom,qo as VALID_HOSTNAME_REGEX,St as XorAtom,Vc as accepted,pl as addProfileToResource,Cc as allOk,Oe as append,Mf as applyDefaultValuesToElement,Vf as applyDefaultValuesToResource,Ut as applyFixedOrPatternValue,zn as arrayBufferToBase64,Qn as arrayBufferToHex,Ne as arrayify,na as assert,Ti as assertContextVersionOptional,Gc as assertOk,hc as assertReleaseManifest,S as badRequest,f as booleanToTypedValue,Qr as buildElementsContext,Xo as buildTypeName,st as calculateAge,Ju as calculateAgeString,qd as canReadResourceType,jd as canWriteResource,Ws as canWriteResourceType,k as capitalize,Xi as checkForNull,Vh as checkIfValidMedplumVersion,Dh as clearReleaseCache,Qc as compressElement,W as concatUrls,Fi as conceptMapTranslate,Mc as conflict,Yd as convertContainedResourcesToBundle,$s as convertToTransactionBundle,pr as crawlTypedValue,hu as crawlTypedValueAsync,yn as createConstraintIssue,jr as createFhircastMessagePayload,le as createOperationOutcomeIssue,gn as createProcessingIssue,Ae as createReference,T as createStructureIssue,Pc as created,yi as decodeBase64,fe as deepClone,ne as deepEquals,Fe as deepIncludes,Fr as encodeBase64,gi as encryptSHA256,Wo as ensureNoLeadingSlash,wr as ensureTrailingSlash,De as evalFhirPath,w as evalFhirPathTyped,Ah as evalSqlOnFhir,Mh as fetchLatestVersionString,nn as fetchVersionManifest,Fn as fhirPathArrayEquals,gr as fhirPathArrayEquivalent,Ln as fhirPathArrayNotEquals,yr as fhirPathEquals,To as fhirPathEquivalent,it as fhirPathIs,Nn as fhirPathNot,fr as fhirTypeToJsType,nl as findObservationInterval,il as findObservationReferenceRange,_o as findObservationReferenceRanges,ul as findResourceByCode,ml as flatMapFilter,Ac as forbidden,$o as formatAddress,Le as formatCodeableConcept,ti as formatCoding,Sl as formatDate,Ar as formatDateTime,Tl as formatFamilyName,vl as formatGivenName,sc as formatHl7DateTime,Ue as formatHumanName,Cl as formatMoney,Ko as formatObservationValue,bl as formatPeriod,oe as formatQuantity,Rl as formatRange,jo as formatReferenceString,kd as formatSearchQuery,Go as formatTime,El as formatTiming,ve as generateId,Cn as getAllDataTypes,Yu as getAllQuestionnaireAnswers,Sr as getCodeBySystem,te as getDataType,zu as getDateProperty,_f as getDefaultValuesForNewSliceEntry,Eo as getDisplayString,ot as getElementDefinition,ns as getElementDefinitionFromElements,ir as getElementDefinitionTypeName,Td as getExpressionForResourceType,ui as getExpressionsForResourceType,re as getExtension,Xu as getExtensionValue,Po as getIdentifier,Qu as getImageSrc,Pe as getNestedProperty,ie as getPathDifference,Nl as getPathDisplayName,es as getPropertyDisplayName,ei as getQueryString,Ku as getQuestionnaireAnswers,Lr as getRandomString,K as getReferenceString,Vl as getResourceTypes,_l as getSearchParameter,Vr as getSearchParameterDetails,Ml as getSearchParameters,$c as getStatus,P as getTypedPropertyValue,uo as getTypedPropertyValueWithPath,xo as getTypedPropertyValueWithSchema,vo as getTypedPropertyValueWithoutSchema,_i as getValueSliceName,Xn as getWebSocketUrl,F as globalSchema,Oc as gone,In as indexDefaultSearchParameters,Ir as indexSearchParameter,Dl as indexSearchParameterBundle,ar as indexStructureDefinitionBundle,xn as inflateBaseSchema,ro as inflateElement,qe as initFhirPathParserBuilder,Lc as isAccepted,Tr as isCodeableConcept,vr as isCoding,Si as isCompletedSubscriptionRequest,Rr as isComplexTypeCode,Wc as isConflict,vi as isContextVersionRequired,Fc as isCreated,Pn as isDataTypeLoaded,Un as isDateString,we as isDateTimeString,b as isEmpty,sa as isFhirCriteriaMet,Ys as isFhircastResourceType,qc as isGone,bi as isJwt,tl as isLowerCase,Ei as isMedplumAccessToken,Bc as isNotFound,R as isObject,tr as isOk,Ee as isOperationOutcome,Bn as isPeriod,Y as isPopulated,et as isPrimitiveType,An as isProfileLoaded,bo as isProfileResource,D as isQuantity,Wn as isQuantityEquivalent,Uc as isRedirect,J as isReference,O as isResource,wn as isResourceType,ur as isResourceTypeSchema,br as isResourceWithId,Mi as isSliceDefinitionWithTypes,Vo as isString,Gn as isStringArray,Mo as isTextObject,el as isUUID,jc as isUnauthenticated,Or as isValidDate,dl as isValidHostname,mc as isValidMedplumSemver,Zn as lazy,cr as loadDataType,fl as mapByIdentifier,mr as matchDiscriminant,Yn as matchesRange,Ct as matchesSearchRequest,kc as multipleMatches,Jn as normalizeArrayBufferView,Vi as normalizeCreateBinaryOptions,Sa as normalizeCreatePdfOptions,Re as normalizeErrorString,Xe as normalizeOperationOutcome,pn as notFound,wc as notModified,eo as operationOutcomeIssueToString,mn as operationOutcomeToString,kr as parseFhirPath,fh as parseFilterParameter,yh as parseHl7DateTime,It as parseJWTPayload,xh as parseLogLevel,Hf as parseMappingLanguage,Ts as parseParameter,Hu as parseReference,je as parseSearchRequest,or as parseStructureDefinition,Id as parseXFhirQuery,sl as preciseEquals,cl as preciseGreaterThan,Bo as preciseGreaterThanOrEquals,al as preciseLessThan,Uo as preciseLessThanOrEquals,ol as preciseRound,Ic as preconditionFailed,Ls as projectAdminResourceTypes,Fs as protectedResourceTypes,Nc as redirect,nt as removeDuplicates,hl as removeProfileFromResource,Hs as reorderBundle,pe as resolveId,Ip as resourceMatchesSubscriptionCriteria,qs as satisfiedAccessPolicy,qr as serializeFhircastSubscriptionRequest,hn as serverError,_c as serverTimeout,rl as setCodeBySystem,Zu as setIdentifier,$ as singleton,ll as singularize,Cr as sleep,ct as sortStringArray,Pr as splitN,Rt as splitSearchOnComma,Rh as streamToBuffer,at as stringify,oi as stringifyTypedValue,eh as structureMapTransform,iu as subsetResource,N as toJsBoolean,Bu as toPeriod,x as toTypedValue,Dc as tooManyRequests,_e as tryGetDataType,Ri as tryGetJwtExpiration,On as tryGetProfile,xl as typedValueToString,be as unauthorized,er as unauthorizedTokenAudience,fn as unauthorizedTokenExpired,Ot as validateFhircastSubscriptionRequest,Vu as validateResource,bh as validateResourceType,Mu as validateTypedValue,m as validationError,rt as validationRegexes,_h as warnIfNewerVersionAvailable,ec as wordWrap};
54
54
  /*!
55
55
  * Reconnecting WebSocket
56
56
  * by Pedro Ladaria <pedro.ladaria@gmail.com>