@medplum/core 3.2.17 → 3.2.18
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +5 -5
- package/dist/cjs/index.cjs.map +4 -4
- package/dist/cjs/index.d.ts +73 -5
- package/dist/esm/index.d.ts +73 -5
- package/dist/esm/index.mjs +5 -5
- package/dist/esm/index.mjs.map +4 -4
- package/package.json +3 -3
package/dist/esm/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
var Qe=class{constructor(e,t){this.operator=e;this.child=t}toString(){return`${this.operator}(${this.child.toString()})`}},Y=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 Kr="http://unitsofmeasure.org",oc="http://loinc.org",sc="http://snomed.info/sct",ac="http://www.nlm.nih.gov/research/umls/rxnorm",cc="http://www.ama-assn.org/go/cpt",uc="http://hl7.org/fhir/sid/icd-10",zr="http://hl7.org",lc="http://terminology.hl7.org";var Qt="ok",ze="created",Kt="gone",zt="not-modified",Jt="not-found",Yt="conflict",Zt="unauthorized",Jr="forbidden",Yr="precondition-failed",Zr="multiple-matches",Xr="too-many-requests",Je="accepted",dc={resourceType:"OperationOutcome",id:Qt,issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},fc={resourceType:"OperationOutcome",id:ze,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},mc={resourceType:"OperationOutcome",id:zt,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},en={resourceType:"OperationOutcome",id:Jt,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},Ee={resourceType:"OperationOutcome",id:Zt,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},tn={...Ee,issue:[...Ee.issue,{severity:"error",code:"expired",details:{text:"Token expired"}}]},Xt={...Ee,issue:[...Ee.issue,{severity:"error",code:"invalid",details:{text:"Token not issued for this audience"}}]},hc={resourceType:"OperationOutcome",id:Jr,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},yc={resourceType:"OperationOutcome",id:Kt,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},gc={resourceType:"OperationOutcome",id:Yr,issue:[{severity:"error",code:"processing",details:{text:"Precondition Failed"}}]},vc={resourceType:"OperationOutcome",id:Zr,issue:[{severity:"error",code:"multiple-matches",details:{text:"Multiple resources found matching condition"}}]},xc={resourceType:"OperationOutcome",id:Xr,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function Tc(r){return{resourceType:"OperationOutcome",id:Je,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:r}]}}function R(r,e){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:r},...e?{expression:[e]}:void 0}]}}function Sc(r){return{resourceType:"OperationOutcome",id:Yt,issue:[{severity:"error",code:"conflict",details:{text:r}}]}}function h(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"structure",details:{text:r}}]}}function rn(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:r.toString()}]}}function be(r){return typeof r=="object"&&r!==null&&r.resourceType==="OperationOutcome"}function er(r){return r.id===Qt||r.id===ze||r.id===zt||r.id===Je}function Ec(r){return r.id===ze}function bc(r){return r.id===Je}function Rc(r){return r.id===Jt}function Cc(r){return r.id===Yt}function Pc(r){return r.id===Kt}function wc(r){return r.id===Zt}function Ac(r){switch(r.id){case Qt:return 200;case ze:return 201;case Je:return 202;case zt:return 304;case Zt:return 401;case Jr:return 403;case Jt:return 404;case Yt:return 409;case Kt:return 410;case Yr:case Zr:return 412;case Xr:return 429;default:return r.issue?.[0]?.code==="exception"?500:400}}function Oc(r,e){if(!er(r)||e===void 0)throw new d(r)}var d=class extends Error{constructor(e,t){super(nn(e)),this.outcome=e,this.cause=t}};function Ye(r){return r instanceof d?r.outcome:be(r)?r:R(tr(r))}function tr(r){return r?typeof r=="string"?r:r instanceof Error?r.message:be(r)?nn(r):typeof r=="object"&&"code"in r&&typeof r.code=="string"?r.code:JSON.stringify(r):"Unknown error"}function nn(r){let e=r.issue?.map(Wi)??[];return e.length>0?e.join("; "):"Unknown error"}function Wi(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 ae(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 x(r,e){return ae("error","structure",e,r)}function on(r,e){return ae("error","invariant",`Constraint ${e.key} not met: ${e.description}`,r,{fhirpath:e.expression})}function sn(r,e,t,n){return ae("error","processing",e,r,{...n,error:t})}var Gi={"http://hl7.org/fhirpath/System.String":"string"};function kc(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:Gi[t.code]??t.code})),e}function Hi(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 an(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,Hi(i,o)])),constraints:[],innerTypes:[]};return e}var cn={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"}]}}},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"]}]}}},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"}]}}},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"}]}}},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"}]}}},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 ce=an(cn),sr=Object.create(null),un=Object.create(null),Ki={"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 fn(r){let e;return e=un[r],e||(e=un[r]=Object.create(null)),e}function ar(r){let e=Array.isArray(r)?r:r.entry?.map(t=>t.resource)??[];for(let t of e)cr(t)}function cr(r){if(!r?.name)throw new Error("Failed loading StructureDefinition from bundle");if(r.resourceType!=="StructureDefinition")return;let e=or(r),t=Ki[r.url],n,i;t?(n=ce,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=ce,i=r.type):(n=fn(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 mn(){return ce}function hn(r){return!!ce[r]}function _e(r,e){if(e){let t=fn(e)[r];if(t)return t}return ce[r]}function Z(r,e){let t=_e(r,e);if(!t)throw new d(R("Unknown data type: "+r));return t}function yn(r){let e=ce[r];return e&&ur(e)}function gn(r){return!!sr[r]}function vn(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,kind:e.kind,description:Zi(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&&!Re(this.slicingContext.path,e?.path)&&(this.slicingContext=void 0),e.slicing&&!this.slicingContext&&this.enterSlice(e,t)}enterInnerType(e){for(;this.backboneContext&&!Re(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:Re(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,t){Yi(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&&!Re(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!Re(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!!(Re(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=X(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=pn(e.max),n=e.base?.max?pn(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:dn(P(i,"fixed[x]")),pattern:dn(P(i,"pattern[x]")),binding:e.binding}}};function jc(r,e){if(!r)return;let t=[];for(let n of e){t.push("_"+n);let i=ce[r.resourceType].elements[n+"[x]"];i&&t.push(...i.type.map(o=>n+w(o.code)))}for(let n of Object.getOwnPropertyNames(r))!e.includes(n)&&!t.includes(n)&&!zi.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(ln):[ln]},r}var ln={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},zi=["resourceType","id","meta"];function pn(r){return r==="*"?Number.POSITIVE_INFINITY:Number.parseInt(r,10)}function rr(r,e=""){return Ji(r.path,e)}function Ji(r,e){return r?e&&r.startsWith(e)?r.substring(e.length+1):r:""}function Re(r,e){return!r||!e?!1:e.startsWith(r+".")||e===r}function dn(r){return Array.isArray(r)&&r.length>0?r[0]:S(r)?void 0:r}function Yi(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 Zi(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 Xi(r){return"elements"in r}function eo(r){return!!r.visitPropertyAsync}function Zc(r,e,t,n){let i;return t&&Xi(t)?i={schema:t,initialPath:n}:i=t,eo(e)?xn(g(r),e,i):Ze(g(r),e,i)}async function Xc(r,e,t){return xn(g(r),e,t)}function Ze(r,e,t){new lr(r,e,t).crawl()}function xn(r,e,t){return new pr(r,e,t).crawl()}var lr=class{constructor(e,t,n){this.root=e,this.visitor=t,this.schema=n?.schema??Z(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=I(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=Ce(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(!Xe(e.type)){let n=Z(e.type);this.crawlObject(e,n,t)}}},pr=class{constructor(e,t,n){this.root=e,this.visitor=t,this.schema=n?.schema??Z(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=I(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)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=Ce(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(!Xe(e.type)){let n=Z(e.type);await this.crawlObject(e,n,t)}}};function Ce(r,e,t){if(r===void 0)return[void 0];if(e==="$this")return[r];let n=t?.withPath?to: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 to(r,e,t){let n=r.path;return ro(P(r,e,t),n,e)}function ro(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:/^[\s\S]+$/,oid:/^urn:oid:[0-2](\.(0|[1-9]\d*))+$/,string:/^[\s\S]+$/,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:/.*/},no={"ele-1":!0,"dom-3":!0,"org-1":!0,"sdf-19":!0};function vu(r,e){if(!r.resourceType)throw new d(h("Missing resource type"));return new et(g(r),e).validate()}function xu(r,e){return new et(r,e).validate()}var et=class{constructor(e,t){this.issues=[],this.root=e,this.currentResource=[],I(e.value)&&this.currentResource.push(e.value),t?.profile?this.schema=or(t.profile):this.schema=Z(e.type)}validate(){this.constraintsCheck({...this.root,path:this.schema.path},this.schema),fr(this.root.value,this.schema.path,this.issues),Ze(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(x(n,"Expected array of values for property"));return}c=a}else{if(Array.isArray(a)){this.issues.push(x(n,"Expected single value for property"));return}c=[a]}(c.length<s.min||c.length>s.max)&&this.issues.push(x(s.path,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${c.length}`)),so(a,s)||this.issues.push(x(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 m=ao(l,s.slicing);m&&u&&(u[m]+=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(x(e.path,"Missing required property")),!1):S(e)?(this.issues.push(x(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(x(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=oo(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(ae("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(ae("warning","structure",`Duplicate choice of type property "${a}"`,a)),o[a]=s;continue}!(s in t)&&!(s.startsWith("_")&&s.slice(1)in t)&&this.issues.push(x(`${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 no)&&!this.isExpressionTrue(i,e)){this.issues.push(on(e.path,i));return}}}referenceTypeCheck(e,t){if(e.type!=="Reference")return;let n=e.value;if(!ue(n))return;let i=n.reference.split("/")[0];if(!i)return;let o=t.type.find(m=>m.code==="Reference")?.targetProfile;if(!o)return;let s=zr+"/fhir/StructureDefinition/",a=s+"Resource",c=s+i,u="https://medplum.com/fhir/StructureDefinition/",l=u+i;for(let m of o)if(m===a||m===c||m===l||!m.startsWith(s)&&!m.startsWith(u))return;this.issues.push(ae("warning","structure",`Invalid reference: got "${i}", expected "${o.join('", "')}"`,e.path))}isExpressionTrue(e,t){let n={"%context":t,"%ucum":g(Kr)};this.currentResource.length>0&&(n["%resource"]=g(this.currentResource[this.currentResource.length-1])),I(this.root.value)&&(n["%rootResource"]=this.root);try{let i=A(e.expression,[t],n);return i.length===1&&i[0].value===!0}catch(i){return this.issues.push(sn(t.path,"Error evaluating invariant expression",i,{fhirpath:e.expression})),!1}}validatePrimitiveType(e){let[t,n]=co(e),i=e.path;if(t){let{type:o,value:s}=t;if(!(o in dr)){this.issues.push(x(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(x(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&&Ze(n,this,{schema:Z("Element"),initialPath:i})}validateString(e,t,n){if(!e.trim()){this.issues.push(x(n,"String must contain non-whitespace content"));return}let i=tt[t];i&&!i.exec(e)&&this.issues.push(x(n,"Invalid "+t+" format"))}validateNumber(e,t,n){Number.isNaN(e)||!Number.isFinite(e)?this.issues.push(x(n,"Invalid numeric value")):io(t)&&!Number.isInteger(e)?this.issues.push(x(n,"Expected number to be an integer")):t===p.positiveInt&&e<=0?this.issues.push(x(n,"Expected number to be positive")):t===p.unsignedInt&&e<0&&this.issues.push(x(n,"Expected number to be non-negative"))}};function io(r){return r===p.integer||r===p.positiveInt||r===p.unsignedInt}function oo(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(x(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?t.push(x(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!r[s]?.[a]?t.push(x(`${o}[${a}]`,"Invalid null value")):i[a]&&fr(i[a],`${o}[${a}]`,t);else typeof i=="object"&&fr(i,o,t)}}function so(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&&!Le(t,e.pattern)||e.fixed&&!ee(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 Le(r,i.pattern);if(i.fixed)return ee(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 ao(r,e){if(e){for(let t of e.slices)if(e.discriminator.every(n=>Ne(Ce(r,n.path))?.some(i=>mr(i,n,t))))return t.name}}function co(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:p.boolean,value:r}]}function g(r){return r==null?{type:"undefined",value:void 0}:Number.isSafeInteger(r)?{type:p.integer,value:r}:typeof r=="number"?{type:p.decimal,value:r}:typeof r=="boolean"?{type:p.boolean,value:r}:typeof r=="string"?{type:p.string,value:r}:k(r)?{type:p.Quantity,value:r}:I(r)?{type:r.resourceType,value:r}:{type:p.BackboneElement,value:r}}function N(r){return r.length===0?!1:!!r[0].value}function q(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?uo(r,e,n):lo(r,e)}function uo(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 m=u.replace("[x]",w(l.code));if(o=n[m],a=n["_"+m],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]=Rn(o[l],a[l])}else o=Rn(o,a);if(!S(o))return(s==="Element"||s==="BackboneElement")&&(s=t.type[0].code),Array.isArray(o)?o.map(l=>Tn(l,s)):Tn(o,s)}function Tn(r,e){return e==="Resource"&&I(r)&&(e=r.resourceType),{type:e,value:r}}function lo(r,e){let t=r.value;if(!t||typeof t!="object")return;let n;if(e in t)n=t[e];else for(let i in p){let o=e+w(i);if(o in t){n=t[o];break}}if(!S(n))return Array.isArray(n)?n.map(g):g(n)}function nt(r){let e=[];for(let t of r){let n=!1;for(let i of e)if(N(hr(t,i))){n=!0;break}n||e.push(t)}return e}function Cn(r){return f(!N(r))}function Pn(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?f(!1):f(r.every((t,n)=>N(hr(t,e[n]))))}function wn(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?f(!0):f(r.some((t,n)=>!N(hr(t,e[n]))))}function hr(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):k(t)&&k(n)?f(In(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(Sn),e.sort(Sn),f(r.every((t,n)=>N(po(t,e[n])))))}function po(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):k(s)&&k(a)?f(In(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 Sn(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 An(t);case"DateTime":return rt(t);case"Time":return typeof t=="string"&&!!/^T\d/.exec(t);case"Period":return On(t);case"Quantity":return k(t);default:return typeof t=="object"&&t?.resourceType===e}}function An(r){return typeof r=="string"&&!!tt.date.exec(r)}function rt(r){return typeof r=="string"&&!!tt.dateTime.exec(r)}function On(r){return!!(r&&typeof r=="object"&&("start"in r&&rt(r.start)||"end"in r&&rt(r.end)))}function Cu(r){if(r){if(An(r))return{start:En(r,"0000-00-00T00:00:00.000Z"),end:En(r,"xxxx-12-31T23:59:59.999Z")};if(rt(r))return{start:r,end:r};if(On(r))return r}}function En(r,e){return r+e.substring(r.length)}function k(r){return!!(r&&typeof r=="object"&&"value"in r&&typeof r.value=="number")}function In(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(bn(o)&&bn(s)){if(!gr(o,s))return!1}else if(o!==s)return!1}return!0}function bn(r){return r!==null&&typeof r=="object"}function Rn(r,e){if(e){if(typeof e!="object")throw new Error("Primitive extension must be an object");return fo(r??{},e)}return r}function fo(r,e){return delete e.__proto__,delete e.constructor,Object.assign(r,e)}function te(r){let e=le(r),t=ho(r);return t===e?{reference:e}:{reference:e,display:t}}function le(r){return ue(r)?r.reference:`${r.resourceType}/${r.id}`}function pe(r){if(r)return ue(r)?r.reference.split("/")[1]:r.id}function ku(r){if(r?.reference===void 0)throw new d(h("Reference missing reference property."));let[e,t]=r.reference.split("/");if(e===""||t===""||t===void 0)throw new d(h("Unable to parse reference string."));return[e,t]}function mo(r){return r.resourceType==="Patient"||r.resourceType==="Practitioner"||r.resourceType==="RelatedPerson"}function ho(r){if(mo(r)){let e=yo(r);if(e)return e}if(r.resourceType==="Device"){let e=go(r);if(e)return e}if(r.resourceType==="MedicationRequest"&&r.medicationCodeableConcept)return st(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]),wo(e))return st(e);if(Ao(e))return e.text}return le(r)}function yo(r){let e=r.name;if(e&&e.length>0)return ut(e[0])}function go(r){let e=r.deviceName;if(e&&e.length>0)return e[0].name}function Vu(r){if(!("photo"in r))return;let e=r.photo;if(e)if(Array.isArray(e))for(let t of e){let n=kn(t);if(n)return n}else return kn(e)}function kn(r){if(r.url&&r.contentType?.startsWith("image/"))return r.url}function Du(r){return r?new Date(r):void 0}function at(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 m=a*12+c-(i*12+o);u<s&&m--;let v=Math.floor((n.getTime()-t.getTime())/(1e3*60*60*24));return{years:l,months:m,days:v}}function Mu(r,e){let{years:t,months:n,days:i}=at(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 _u(r){let e={};return Vn(r.item,e),e}function Vn(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer[0]),Vn(t.item,e)}function Nu(r){let e={};return Dn(r.item,e),e}function Dn(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),Dn(t.item,e)}function vo(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 Lu(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 Fu(r,...e){let t=X(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 X(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 Mn(r,e){return JSON.stringify(r,xo,e?2:void 0)}function xo(r,e){return!To(r)&&S(e)?void 0:e}function To(r){return!!/\d+$/.exec(r)}function S(r){if(r==null)return!0;let e=typeof r;return e==="string"||e==="object"?!K(r):!1}function K(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 ee(r,e,t){return r===e||S(r)&&S(e)?!0:S(r)||S(e)?!1:Array.isArray(r)&&Array.isArray(e)?So(r,e):Array.isArray(r)||Array.isArray(e)?!1:b(r)&&b(e)?Eo(r,e,t):(b(r)||b(e),!1)}function So(r,e){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(!ee(r[t],e[t]))return!1;return!0}function Eo(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(!ee(o,s,i))return!1}return!0}function Le(r,e){return S(r)?!0:S(e)?!1:Array.isArray(r)&&Array.isArray(e)?bo(r,e):Array.isArray(r)||Array.isArray(e)?!1:b(r)&&b(e)?Ro(r,e):b(r)||b(e)?!1:r===e}function bo(r,e){return e.every(t=>r.some(n=>Le(n,t)))}function Ro(r,e){return Object.entries(e).every(([t,n])=>t in r&&Le(r[t],n))}function de(r){return r===void 0?r:JSON.parse(JSON.stringify(r))}function Uu(r){return!!/^\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/i.exec(r)}function b(r){return r!==null&&typeof r=="object"}function _n(r){return r.every(Co)}function Co(r){return typeof r=="string"}function Po(r){return b(r)&&"code"in r&&typeof r.code=="string"}function wo(r){return b(r)&&"coding"in r&&Array.isArray(r.coding)&&r.coding.every(Po)}function Ao(r){return b(r)&&"text"in r&&typeof r.text=="string"}var Nn=[];for(let r=0;r<256;r++)Nn.push(r.toString(16).padStart(2,"0"));function Ln(r){let e=new Uint8Array(r),t=new Array(e.length);for(let n=0;n<e.length;n++)t[n]=Nn[e[n]];return t.join("")}function Fn(r){let e=new Uint8Array(r),t=[];for(let n=0;n<e.length;n++)t[n]=String.fromCharCode(e[n]);return window.btoa(t.join(""))}function w(r){return r?r.charAt(0).toUpperCase()+r.substring(1):""}function Bu(r){return r===r.toLowerCase()&&r!==r.toUpperCase()}function xr(r){return r.length>0&&r.startsWith(r[0].toUpperCase())}function Pe(r,e){let t=r+".";if(e.startsWith(t))return e.slice(t.length)}function vr(r,e){return r.coding?.find(t=>t.system===e)?.code}function qu(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 ju(r,e,t,n){return r.qualifiedInterval?.find(i=>Un(i,e)&&ko(i,t,r.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function $u(r,e,t){return r.qualifiedInterval?.find(n=>Un(n,e)&&t.includes(n.condition))}function Un(r,e){return Oo(r,e)&&Io(r,e)}function Oo(r,e){return!r.gender||r.gender===e.gender}function Io(r,e){return!r.age||Bn(at(e.birthDate).years,r.age)}function ko(r,e,t){return!!r.range&&Bn(e,r.range,t)}function Bn(r,e,t){return(e.low?.value===void 0||Do(r,e.low.value,t))&&(e.high?.value===void 0||Vo(r,e.high.value,t))}function Wu(r,e){return parseFloat(r.toFixed(e))}function Gu(r,e,t){return j(r,t)===j(e,t)}function Hu(r,e,t){return j(r,t)<j(e,t)}function Qu(r,e,t){return j(r,t)>j(e,t)}function Vo(r,e,t){return j(r,t)<=j(e,t)}function Do(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 Ku(r,e,t){return r.find(n=>typeof e=="string"?vr(n.code||{},t)===e:vr(n.code||{},t)===vr(e,t))}function Ne(r){if(r!==void 0)return Array.isArray(r)?r:[r]}function zu(r){return Array.isArray(r)?r[0]:r}var Tr=r=>new Promise(e=>{setTimeout(e,r)});function Sr(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 qn(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 ct(r){return r.sort((e,t)=>e.localeCompare(t))}function Er(r){return r.endsWith("/")?r:r+"/"}function Mo(r){return r.startsWith("/")?r.slice(1):r}function $(r,e){return new URL(Mo(e),Er(r.toString())).toString()}function jn(r,e){return $(r,e).toString().replace("http://","ws://").replace("https://","wss://")}function $n(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 _o=/^(([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 Ju(r){return _o.test(r)}function Yu(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 Zu(r,e){return new Map(r.entry?.filter(n=>!!n.resource).map(n=>[vo(n.resource,e),n.resource]).filter(([n])=>n!==void 0))}function Xu(r,e){if(r?.meta?.profile?.includes(e)){let t=r.meta.profile.indexOf(e);r.meta.profile.splice(t,1)}return r}function Wn(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 rl(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 ut(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=me(r.text);if(n)return n}return t.join(" ").trim()}function nl(r){let e=[];return r.given&&e.push(...r.given),e.join(" ").trim()}function il(r){return me(r.family)??""}function Rr(r){return r instanceof Date&&!isNaN(r.getTime())}function ol(r,e,t){if(!r)return"";let n=new Date(r);return Rr(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...t})):""}function No(r,e,t){if(!r)return"";let n=new Date("2000-01-01T"+r+"Z");return Rr(n)?n.toLocaleTimeString(e,t):""}function br(r,e,t){if(!r)return"";let n=new Date(r);return Rr(n)?n.toLocaleString(e,t):""}function sl(r,e,t){return!r||!r.start&&!r.end?"":br(r.start,e,t)+" - "+br(r.end,e,t)}var Lo={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},Fo={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},Uo={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function al(r){if(!r)return"";let e=[];return Bo(e,r.repeat),r.event&&e.push(r.event.map(t=>br(t)).join(", ")),w(e.join(" ").trim())}function Bo(r,e){if(!e?.periodUnit)return;let t=e.frequency??1,n=e.period??1,i=e.periodUnit;t===1&&n===1?r.push(Lo[i]):(t===1?r.push("once"):r.push(t+" times"),n===1?r.push("per "+Fo[i]):r.push("per "+n+" "+Uo[i])),e.dayOfWeek&&r.push("on "+e.dayOfWeek.map(w).join(", ")),e.timeOfDay&&r.push("at "+e.timeOfDay.map(o=>No(o)).join(", "))}function cl(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=Wo(n.value,e),`> ${fe(n,e)}`):`>= ${fe(n,e)}`:n?.value===void 0&&i?.value!==void 0?t&&e!==void 0?(i.value=$o(i.value,e),`< ${fe(i,e)}`):`<= ${fe(i,e)}`:(n?.unit===i?.unit&&delete n?.unit,`${fe(n,e)} - ${fe(i,e)}`)}function fe(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 ul(r){return r?.value===void 0?"":r.value.toLocaleString(void 0,{style:"currency",currency:r.currency??"USD",currencyDisplay:"narrowSymbol"})}function st(r){if(!r)return"";let e=me(r.text);return e||(r.coding?r.coding.map(t=>qo(t)).join(", "):"")}function qo(r,e){let t=me(r?.display);if(t){let n=e?me(r?.code):void 0;return`${t}${n?" ("+n+")":""}`}return me(r?.code)??""}function jo(r){if(!r)return"";let e=[];if(r.valueQuantity)e.push(fe(r.valueQuantity));else if(r.valueCodeableConcept)e.push(st(r.valueCodeableConcept));else{let t=me(r.valueString);t&&e.push(t)}return"component"in r&&e.push(r.component.map(t=>jo(t)).join(" / ")),e.join(" / ").trim()}function me(r){return typeof r=="string"?r:void 0}function $o(r,e,t=1){return(Gn(r,e)+t)*Math.pow(10,-e)}function Wo(r,e,t=1){return(Gn(r,e)-t)*Math.pow(10,-e)}function Gn(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}var p={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 yl(r){for(let e of r.entry){let t=e.resource;t.resourceType==="SearchParameter"&&Cr(t)}}function gl(r){let e=Wn(r.entry,t=>t.resource?.resourceType==="StructureDefinition"?t.resource:void 0)??[];for(let t of e)Qn(t.type)}function Qn(r){let e=L.types[r];return e||(e={searchParamsDetails:{}},L.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 Cr(r){for(let e of r.base??[]){let t=Qn(e);t.searchParams||(t.searchParams={}),t.searchParams[r.code]=r}}function ir(r){let e=r.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?Go((r.base?.path??r.path)?.split(".")):e}function Go(r){return r.length===1?r[0]:r.map(w).join("")}function ur(r){return r.kind==="resource"&&r.name!=="Resource"&&r.name!=="DomainResource"}function vl(){return Object.values(mn()).filter(ur).map(r=>r.name)}function xl(r){return L.types[r]?.searchParams}function Tl(r,e){return L.types[r]?.searchParams?.[e]}function Sl(r){let e=r.replaceAll("[x]","").split(".").pop();return Ho(e)}function Ho(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(Ko).join(" ").replace("_"," ").replace(/\s+/g," ")}var Qo=new Set(["ID","IP","PKCE","JWKS","URI","URL","OMB","UDI"]);function Ko(r){let e=r.toUpperCase();return r===e?r:Qo.has(e)?e:e.charAt(0)+r.slice(1)}function ot(r,e,t){let n=_e(r,t);if(n)return zo(n.elements,e)}function zo(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 I(r){return!!(r&&typeof r=="object"&&"resourceType"in r)}function ue(r){return!!(r&&typeof r=="object"&&"reference"in r&&typeof r.reference=="string")}var L={types:{}};function Kn(r){switch(r.type){case p.uuid:case p.uri:case p.url:case p.string:case p.oid:case p.markdown:case p.id:case p.code:case p.canonical:case p.base64Binary:case p.SystemString:case p.date:case p.dateTime:case p.instant:return r.value;case p.Identifier:return`${r.value.system??""}|${r.value.value}`;case p.Coding:return Hn(r.value);case p.CodeableConcept:return r.value.coding?.map(Hn).join(",")??r.value.text;case p.HumanName:return r.value.text?r.value.text:ut(r.value);case p.unsignedInt:case p.positiveInt:case p.integer:case p.decimal:return r.value.toString();case p.boolean:return r.value?"true":"false";case p.Extension:return r.value.url;case p.ContactPoint:return r.value.value;case p.Quantity:case p.Age:case p.Count:case p.Duration:return`${r.value.value}|${r.value.system??""}|${r.value.code??r.value.unit??""}`;case p.Reference:return r.value.reference;default:return I(r.value)?te(r.value).reference:JSON.stringify(r)}}function Hn(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 z=()=>[],O={empty:(r,e)=>f(e.length===0||e.every(t=>S(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=>!S(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,he(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,he(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:p.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===O.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(r,[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,he(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,he(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,he(r));return nt([...e,...n])},combine:(r,e,t)=>{if(!t)return e;let n=t.eval(r,he(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}]=G(e,1);if(typeof t=="boolean")return[{type:p.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(O.toBoolean(r,e).length===1),toInteger:(r,e)=>{if(e.length===0)return[];let[{value:t}]=G(e,1);return typeof t=="number"?[{type:p.integer,value:t}]:typeof t=="string"&&/^[+-]?\d+$/.exec(t)?[{type:p.integer,value:parseInt(t,10)}]:typeof t=="boolean"?[{type:p.integer,value:t?1:0}]:[]},convertsToInteger:(r,e)=>e.length===0?[]:f(O.toInteger(r,e).length===1),toDate:(r,e)=>{if(e.length===0)return[];let[{value:t}]=G(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:p.date,value:Ae(t)}]:[]},convertsToDate:(r,e)=>e.length===0?[]:f(O.toDate(r,e).length===1),toDateTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=G(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:p.dateTime,value:Ae(t)}]:[]},convertsToDateTime:(r,e)=>e.length===0?[]:f(O.toDateTime(r,e).length===1),toDecimal:(r,e)=>{if(e.length===0)return[];let[{value:t}]=G(e,1);return typeof t=="number"?[{type:p.decimal,value:t}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(t)?[{type:p.decimal,value:parseFloat(t)}]:typeof t=="boolean"?[{type:p.decimal,value:t?1:0}]:[]},convertsToDecimal:(r,e)=>e.length===0?[]:f(O.toDecimal(r,e).length===1),toQuantity:(r,e)=>{if(e.length===0)return[];let[{value:t}]=G(e,1);return k(t)?[{type:p.Quantity,value:t}]:typeof t=="number"?[{type:p.Quantity,value:{value:t,unit:"1"}}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(t)?[{type:p.Quantity,value:{value:parseFloat(t),unit:"1"}}]:typeof t=="boolean"?[{type:p.Quantity,value:{value:t?1:0,unit:"1"}}]:[]},convertsToQuantity:(r,e)=>e.length===0?[]:f(O.toQuantity(r,e).length===1),toString:(r,e)=>{if(e.length===0)return[];let[{value:t}]=G(e,1);return t==null?[]:k(t)?[{type:p.string,value:`${t.value} '${t.unit}'`}]:[{type:p.string,value:t.toString()}]},convertsToString:(r,e)=>e.length===0?[]:f(O.toString(r,e).length===1),toTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=G(e,1);if(typeof t=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(t);if(n)return[{type:p.time,value:Ae("T"+n[1])}]}return[]},convertsToTime:(r,e)=>e.length===0?[]:f(O.toTime(r,e).length===1),indexOf:(r,e,t)=>F((n,i)=>n.indexOf(i),r,e,t),substring:(r,e,t,n)=>F((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)=>F((n,i)=>n.startsWith(i),r,e,t),endsWith:(r,e,t)=>F((n,i)=>n.endsWith(i),r,e,t),contains:(r,e,t)=>F((n,i)=>n.includes(i),r,e,t),upper:(r,e)=>F(t=>t.toUpperCase(),r,e),lower:(r,e)=>F(t=>t.toLowerCase(),r,e),replace:(r,e,t,n)=>F((i,o,s)=>i.replaceAll(o,s),r,e,t,n),matches:(r,e,t)=>F((n,i)=>!!new RegExp(i).exec(n),r,e,t),replaceMatches:(r,e,t,n)=>F((i,o,s)=>i.replaceAll(o,s),r,e,t,n),length:(r,e)=>F(t=>t.length,r,e),toChars:(r,e)=>F(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,he(r))[0]?.value??"";if(typeof n!="string")throw new Error("Separator must be a string.");return[{type:p.string,value:e.map(i=>i.value?.toString()??"").join(n)}]},abs:(r,e)=>W(Math.abs,r,e),ceiling:(r,e)=>W(Math.ceil,r,e),exp:(r,e)=>W(Math.exp,r,e),floor:(r,e)=>W(Math.floor,r,e),ln:(r,e)=>W(Math.log,r,e),log:(r,e,t)=>W((n,i)=>Math.log(n)/Math.log(i),r,e,t),power:(r,e,t)=>W(Math.pow,r,e,t),round:(r,e)=>W(Math.round,r,e),sqrt:(r,e)=>W(Math.sqrt,r,e),truncate:(r,e)=>W(t=>t|0,r,e),children:z,descendants:z,trace:(r,e,t)=>e,now:()=>[{type:p.dateTime,value:new Date().toISOString()}],timeOfDay:()=>[{type:p.time,value:new Date().toISOString().substring(11)}],today:()=>[{type:p.date,value:new Date().toISOString().substring(0,10)}],between:(r,e,t,n,i)=>{let o=O.toDateTime(r,t.eval(r,e));if(o.length===0)throw new Error("Invalid start date");let s=O.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=at(o[0].value,s[0].value);return[{type:p.Quantity,value:{value:c[a],unit:a}}]},is:(r,e,t)=>{let n="";return t instanceof B?n=t.name:t instanceof re&&(n=t.left.name+"."+t.right.name),n?e.map(i=>({type:p.boolean,value:it(i,n)})):[]},not:(r,e)=>O.toBoolean(r,e).map(t=>({type:p.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:p.BackboneElement,value:void 0}}).filter(t=>!!t.value),as:(r,e)=>e,type:(r,e)=>e.map(({value:t})=>typeof t=="boolean"?{type:p.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof t=="number"?{type:p.BackboneElement,value:{namespace:"System",name:"Integer"}}:I(t)?{type:p.BackboneElement,value:{namespace:"FHIR",name:t.resourceType}}:{type:p.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:p.boolean,value:o.value?.resourceType===i}))},getResourceKey:(r,e)=>{let t=e[0].value;return t?.id?[{type:p.id,value:t.id}]:[]},getReferenceKey:(r,e,t)=>{let n=e[0].value;if(!n?.reference)return[];let i="";return t instanceof B&&(i=t.name),i&&!n.reference.startsWith(i+"/")?[]:[{type:p.id,value:pe(n)}]},extension:(r,e,t)=>{let n=t.eval(r,e)[0].value,i=e?.[0]?.value;if(i){let o=X(i,n);if(o)return[{type:p.Extension,value:o}]}return[]}};function F(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=G(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 W(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=G(t,1),o=k(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?p.Quantity:t[0].type,u=o?{...i,value:a}:a;return[{type:c,value:u}]}function G(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 he(r){let e=r;for(;e.parent?.variables.$this;)e=e.parent;return[e.variables.$this]}var lt=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()}},B=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 I(t)&&t.resourceType===this.name?e:P(e,this.name)}toString(){return this.name}},pt=class{eval(){return[]}toString(){return"{}"}},dt=class extends Qe{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 Y{constructor(e,t){super("as",e,t)}eval(e,t){return O.ofType(e,this.left.eval(e,t),this.right)}},C=class extends Y{},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=k(s)?s.value:s,u=k(a)?a.value:a,l=this.impl(c,u);return typeof l=="boolean"?f(l):k(s)?[{type:p.Quantity,value:{...s,value:l}}]:[g(l)]}},ft=class extends Y{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:p.string,value:o.map(s=>s.value).join("")}]:o}},mt=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=q(this.left.eval(e,t)),i=this.right.eval(e,t);return n?f(i.some(o=>o.value===n.value)):[]}},re=class extends Y{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 Y{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])}},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 Pn(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 wn(n,i)}},vt=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)}},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 Cn(yr(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))}},Tt=class extends C{constructor(e,t){super("and",e,t)}eval(e,t){let n=q(this.left.eval(e,t),"boolean"),i=q(this.right.eval(e,t),"boolean");return n?.value===!0&&i?.value===!0?f(!0):n?.value===!1||i?.value===!1?f(!1):[]}},St=class extends C{constructor(e,t){super("or",e,t)}eval(e,t){let n=q(this.left.eval(e,t),"boolean"),i=q(this.right.eval(e,t),"boolean");return n?.value===!1&&i?.value===!1?f(!1):n?.value||i?.value?f(!0):[]}},Et=class extends C{constructor(e,t){super("xor",e,t)}eval(e,t){let n=q(this.left.eval(e,t),"boolean"),i=q(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=q(this.left.eval(e,t),"boolean"),i=q(this.right.eval(e,t),"boolean");return i?.value===!0||n?.value===!1?f(!0):!n||!i?[]:f(!1)}},J=class{constructor(e,t){this.name=e;this.args=t}eval(e,t){let n=O[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(", ")})`}},ve=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 Jo=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],ne=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()===" "&&
|
|
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 Yo(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&Jo.includes(r.value)))}var Fe=["true","false"],Ue=["!=","!~","<=",">=","{}","->"];function zn(r){return new ne(r,Fe,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},Zo={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},Xo={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new ve(e,t)},precedence:y.Indexer},es={parse(r,e){if(!(e instanceof B))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new J(e.name,t)},precedence:y.FunctionCall};function ts(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 Ke().registerPrefix("String",{parse:(r,e)=>new U({type:p.string,value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new U({type:p.dateTime,value:Ae(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new U({type:p.Quantity,value:ts(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new U({type:e.value.includes(".")?p.decimal:p.integer,value:parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new U({type:p.boolean,value:!0})}).registerPrefix("false",{parse:()=>new U({type:p.boolean,value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new B(e.value)}).registerPrefix("{}",{parse:()=>new pt}).registerPrefix("(",Zo).registerInfix("[",Xo).registerInfix("(",es).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 re(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 yt(r,t)).infixLeft("!=",y.NotEquals,(r,e,t)=>new gt(r,t)).infixLeft("~",y.Equivalent,(r,e,t)=>new vt(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 ft(r,t)).infixLeft("and",y.And,(r,e,t)=>new Tt(r,t)).infixLeft("as",y.As,(r,e,t)=>new ye(r,t)).infixLeft("contains",y.Contains,(r,e,t)=>new mt(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 St(r,t)).infixLeft("xor",y.Xor,(r,e,t)=>new Et(r,t)).infixLeft("implies",y.Implies,(r,e,t)=>new bt(r,t))}var rs=Be();function Pr(r){return new lt(r,rs.construct(zn(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 A(r,t).map(n=>n.value)}function A(r,e,t={}){return Pr(r).eval({variables:t},e).map(i=>({type:i.type,value:i.value?.valueOf()}))}var Jn=(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))(Jn||{});function Ar(r,e){let t=L.types[r]?.searchParamsDetails?.[e.code];return t||(t=is(r,e)),t}function ns(r,e,t){let n=L.types[r];n||(n={},L.types[r]=n),n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=t}function is(r,e){let t=e.code,n=as(t),i=Zn(r,e.expression),o={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let a of i){let c=qe(a),u=qn(()=>c.join("."));c.length===1&&c[0]instanceof C?o.propertyTypes.add("boolean"):u().endsWith("extension.value.code")||u().endsWith("extension.value.coding.code")?(o.array=!0,o.propertyTypes.add("code")):Yn(o,qe(a),r,1),u().endsWith("extension.valueDateTime")&&(o.array=!1)}let s={columnName:n,type:cs(e,o.propertyTypes),elementDefinitions:o.elementDefinitions,array:o.array};return ns(r,t,s),s}function Yn(r,e,t,n){let i=e[n];if(i instanceof ye){r.propertyTypes.add(i.right.toString());return}if(i instanceof J){os(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 ve&&(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;ss(l)&&(l=s.type[0].code),Yn(r,e,l,c)}}function os(r,e){if(e.name==="as"){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 ss(r){return r==="Element"||r==="BackboneElement"}function as(r){return r.split("-").reduce((e,t,n)=>e+(n?w(t):t),"")}function cs(r,e){switch(r.type){case"date":return e.size===1&&e.has(p.date)?"DATE":"DATETIME";case"number":return"NUMBER";case"quantity":return"QUANTITY";case"reference":return e.has(p.canonical)?"CANONICAL":"REFERENCE";case"token":return e.size===1&&e.has(p.boolean)?"BOOLEAN":"TEXT";default:return"TEXT"}}function Zn(r,e){let t=[],n=Pr(e);return wr(r,n.child,t),t}function op(r,e){let t=Zn(r,e);if(t.length!==0)return t.map(n=>n.toString()).join(" | ")}function wr(r,e,t){e instanceof Oe?(wr(r,e.left,t),wr(r,e.right,t)):e.toString().startsWith(r+".")&&t.push(e)}function qe(r){if(r instanceof ye||r instanceof ve)return[qe(r.left),r].flat();if(r instanceof C)return[r];if(r instanceof re)return[qe(r.left),qe(r.right)].flat();if(r instanceof J){if(r.name==="where"&&!(r.args[0]instanceof ge))return[];if(r.name==="last")return[]}return[r]}var dp=20,fp=1e3,ti=(T=>(T.EQUALS="eq",T.NOT_EQUALS="ne",T.GREATER_THAN="gt",T.LESS_THAN="lt",T.GREATER_THAN_OR_EQUALS="ge",T.LESS_THAN_OR_EQUALS="le",T.STARTS_AFTER="sa",T.ENDS_BEFORE="eb",T.APPROXIMATELY="ap",T.CONTAINS="contains",T.EXACT="exact",T.TEXT="text",T.NOT="not",T.ABOVE="above",T.BELOW="below",T.IN="in",T.NOT_IN="not-in",T.OF_TYPE="of-type",T.MISSING="missing",T.PRESENT="present",T.IDENTIFIER="identifier",T.ITERATE="iterate",T))(ti||{}),ri={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"},Or={eq:"eq",ne:"ne",lt:"lt",le:"le",gt:"gt",ge:"ge",sa:"sa",eb:"eb",ap:"ap"};function ie(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 us(i,o)}function mp(r){return ie(r)}function hp(r){return ie(r)}function yp(r){return ie(r)}function us(r,e){let t={resourceType:r};for(let[n,i]of e)ls(t,n,i);return t}function ls(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":ps(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=Xn(t);i==="iterate"&&(s.modifier="iterate"),r.include=we(r.include,s);break}case"_revinclude":{let s=Xn(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=L.types[r.resourceType]?.searchParams?.[n];s?r.filters=we(r.filters,ds(s,i,t)):r.filters=we(r.filters,hs(n,i,t))}}}}function ps(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})}}function ds(r,e,t){if(e==="missing")return{code:r.code,operator:"missing",value:t};switch(r.type){case"number":case"date":case"quantity":return fs(r,t);case"reference":case"string":case"token":case"uri":return ms(r,e,t);default:throw new Error("Unrecognized search parameter type: "+r.type)}}function fs(r,e){let{operator:t,value:n}=ys(e);return{code:r.code,operator:t,value:n}}function ms(r,e,t){return{code:r.code,operator:gs(e),value:t}}function hs(r,e,t){let n="eq";if(e)n=e;else if(t.length>=2){let i=t.substring(0,2);i in Or&&(t.length===2||t.at(2)?.match(/\d/))&&(n=i,t=t.substring(i.length))}return{code:r,operator:n,value:t}}function ys(r){let e=r.substring(0,2),t=Or[e];return t?{operator:t,value:r.substring(2)}:{operator:"eq",value:r}}function gs(r){return ri[r]??"eq"}function Xn(r){let e=r.split(":");if(e.includes("*"))throw new d(R("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new d(R(`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(R(`Invalid include value '${r}'`))}var vs=/{{([^{}]+)}}/g;function gp(r,e){return r=r.replaceAll(vs,(t,n)=>{let i=A(n,[],e);return i.length!==1?"":Kn(i[0])}),ie(r)}function vp(r){let e=[];return r.fields&&e.push("_fields="+r.fields.join(",")),r.filters&&r.filters.forEach(t=>e.push(xs(t))),r.sortRules&&r.sortRules.length>0&&e.push(Ts(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(ei("_include",t))),r.revInclude&&r.revInclude.forEach(t=>e.push(ei("_revinclude",t))),e.length===0?"":(ct(e),"?"+e.join("&"))}function xs(r){let e=r.operator in ri?":"+r.operator:"",t=r.operator!=="eq"&&r.operator in Or?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function Ts(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function ei(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(!Ss(r,e,t))return!1}return!0}function Ss(r,e,t){let n=L.types[e.resourceType]?.searchParams?.[t.code];if(!n)return!1;if(t.operator==="missing"||t.operator==="present")return Es(r,t,n);switch(n.type){case"reference":return bs(r,t,n);case"string":case"uri":return ni(r,t,n);case"token":return Rs(r,t,n);case"date":return As(r,t,n);default:return!1}}function Es(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 bs(r,e,t){let n=Ie(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 Rs(r,e,t){return Ar(r.resourceType,t).type==="BOOLEAN"?Cs(r,e,t):ni(r,e,t,!0)}function Cs(r,e,t){let n=Ie(t.expression,r),i=e.value==="true",o=n.includes(i);return Pt(e.operator)?!o:o}function ni(r,e,t,n){let o=Ar(r.resourceType,t).elementDefinitions?.[0]?.type?.[0]?.code,s=Ie(t.expression,r),a=Rt(e.value),c=Pt(e.operator);for(let u of s)for(let l of a){let m;if(o===p.Identifier?m=Ps(u,e.operator,l):o===p.CodeableConcept?m=ws(u,e.operator,l):m=Ir(u,e.operator,l,n),m)return!c}return c}function Ir(r,e,t,n){if(n&&t.includes("|")){let[o,s]=t.split("|");return Ir(r,e,o,!1)&&(!s||Ir(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 Ps(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 ws(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 As(r,e,t){let n=Ie(t.expression,r),i=Rt(e.value),o=Pt(e.operator);for(let s of n)for(let a of i)if(Os(s,e.operator,a))return!o;return o}function Os(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 Is={resourceType:"*"},ks=["DomainConfiguration","JsonWebKey","Login"],Vs=["PasswordChangeRequest","UserSecurityRequest","Project","ProjectMembership","User"],Ds=(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))(Ds||{}),Ms=["read","vread","history","history-instance"];function Op(r,e){if(r.resource){for(let t of r.resource)if(kr(t.resourceType,e))return!0}return!1}function _s(r,e){if(ks.includes(e))return!1;if(r.resource){for(let t of r.resource)if(kr(t.resourceType,e)&&!t.readonly)return!0}return!1}function Ip(r,e){let t=e.resourceType;return _s(r,t)?Ns(r,e,!1):!1}function Ns(r,e,t){if(r.resource){for(let n of r.resource)if(ii(e,t?"read":"update",n))return!0}return!1}function kp(r,e,t){if(!t)return Is;if(t.resource){for(let n of t.resource)if(ii(r,e,n))return n}}function ii(r,e,t){let n=r.resourceType;return!(!kr(t.resourceType,n)||t.readonly&&!Ms.includes(e)||t.compartment&&!r.meta?.compartment?.find(i=>i.reference===t.compartment?.reference)||t.criteria&&!Ct(r,ie(t.criteria)))}function kr(r,e){return r===e||r==="*"&&!Vs.includes(e)}function oi(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 si(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 Vr(){let r=new Uint32Array(28);return crypto.getRandomValues(r),Ln(r.buffer)}async function ai(r){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(r))}function xe(){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 Ls(r){let e={};r=de(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]=xe(),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)=>Fs(i,o,e),2);return Us(JSON.parse(n))}function Fs(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 Us(r){let e=qs(r),{sorted:t,cycles:n}=Bs(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 Bs(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 ci(r,e){for(let t in r)if(r[t]&&typeof r[t]=="object"){let n=r[t];if(ue(n)){let i=n.reference;i.startsWith("urn:uuid:")&&e(i)}else ci(n,e)}}function qs(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&&ci(t.resource,i=>{e[i]&&e[i].push(n)})}return e}function Up(r){r=de(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=xe());return Ls(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 D={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"};var Dr=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={}}},H=class{constructor(){this.emitter=new Dr}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 Mr={"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"],_r=["DiagnosticReport-update"];function li(r){return _r.includes(r)}function pi(r){if(_r.includes(r))throw new d(h(`'context.version' is required for '${r}'.`))}var $s={"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"},select:{resourceType:"*",isArray:!0}},"DiagnosticReport-update":{report:{resourceType:"DiagnosticReport"},patient:{resourceType:"Patient",optional:!0},study:{resourceType:"ImagingStudy",optional:!0},updates:{resourceType:"Bundle"}},syncerror:{operationoutcome:{resourceType:"OperationOutcome"}}};function Ws(r){return js.includes(r)}function di(r){return!!r.endpoint}function Nr(r){if(!Ot(r))throw new d(h("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 di(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(!Mr[o])return!1;return!(di(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function ui(r,e,t,n){if(typeof e!="object")throw new d(h(`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(h(`context[${t}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new d(h(`context[${t}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!Ws(e.resourceType))throw new d(h(`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(h(`context[${t}] is invalid. context[${t}] for the '${r}' event should contain resource of type ${i}.`))}}function Gs(r,e,t,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),!n.isArray)ui(r,e.resource,t,n);else{let{resources:o}=e;if(!o)throw new d(h(`context[${t}] is invalid. context[${t}] for the '${r}' with key '${String(e.key)}' should contain an array of resources on the key 'resources'.`));for(let s of o)ui(r,s,t,n)}}function Hs(r,e){let t=new Map,n=$s[r];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new d(h(`Key '${o}' not found for event '${r}'. Make sure to add only valid keys.`));Gs(r,e[i],i,n[o],t)}for(let[i,o]of Object.entries(n)){if(!(o.optional||t.has(i)))throw new d(h(`Missing required key '${i}' on context for '${r}' event.`));if(!o.manyAllowed&&(t.get(i)||0)>1)throw new d(h(`${t.get(i)} context entries with key '${i}' found for the '${r}' event when schema only allows for 1.`))}}function Lr(r,e,t,n){if(!(r&&typeof r=="string"))throw new d(h("Must provide a topic."));if(!Mr[e])throw new d(h(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(Mr).join(", ")}`));if(typeof t!="object")throw new d(h("context must be a context object or array of context objects."));if(_r.includes(e)&&!n)throw new d(h(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(t)?t:[t];return Hs(e,i),{timestamp:new Date().toISOString(),id:xe(),event:{"hub.topic":r,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var At=class extends H{constructor(e){if(super(),this.subRequest=e,!e.endpoint)throw new d(h("Subscription request should contain an endpoint."));if(!Ot(e))throw new d(h("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 Qs(r){let e=r.replace(/-/g,"+").replace(/_/g,"/"),t=oi(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 fi(r){return r.split(".").length===3}function It(r){let[e,t,n]=r.split(".");return Qs(t)}function mi(r){try{return typeof It(r).login_id=="string"}catch{return!1}}function hi(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,D.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var yi;yi=Symbol.toStringTag;var M=class{constructor(e){this[yi]="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 je=class{constructor(e){this.storage=e??(typeof localStorage<"u"?localStorage:new Fr)}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?Mn(t):void 0)}},Fr=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]}},gi=class extends je{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},vi=!1;function Ks(){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 zs(r,e){if(!r)throw new Error(e)}function Vt(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},xi=!1,Dt=class r extends H{constructor(t,n,i={}){vi||(Ks(),vi=!0);super();this._retryCount=-1;this._shouldReconnect=!0;this._connectLock=!1;this._binaryType="blob";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),zs(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(Vt(t))};this._handleMessage=t=>{this._debug("message event"),this.onmessage&&this.onmessage(t),this.dispatchEvent(Vt(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(Vt(t)),this._connect()};this._handleClose=t=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(t),this.dispatchEvent(Vt(t))};this._url=t,this._protocols=n,this._options=i,this._options.startClosed&&(this._shouldReconnect=!1),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"&&!xi&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),xi=!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 Js=5e3,$e=class extends H{constructor(...e){super(),this.criteria=new Set(e)}getCriteria(){return this.criteria}_addCriteria(e){this.criteria.add(e)}_removeCriteria(e){this.criteria.delete(e)}},Ur=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}},Mt=class{constructor(e,t,n){this.pingTimer=void 0;this.waitingForPong=!1;if(!(e instanceof _t))throw new d(h("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(t).toString()}catch{throw new d(h("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??Js,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 d(rn(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 ${le(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(h("Failed to get token"));if(!o)throw new d(h("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(ee(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!ee(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(tr(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 Ur(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 gd({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(!Ys(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=ie(o);if(r.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${r.resourceType}")`),!1;if(!await Zs(e,r,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let c=X(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 Ys(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 Zs(r,e,t){let n=X(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 A(n.valueString,[g(e)],o)?.[0]?.value===!0}var Hd="3.2.17-6cb788567",Qd="medplum-cli",Xs=D.FHIR_JSON+", */*; q=0.1",ea="https://api.medplum.com/",ta=1e3,ra=6e4,na=0,ia=3e5,oa="Binary/",Ti={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},sa=(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))(sa||{}),aa=(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))(aa||{}),ca=(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))(ca||{}),ua=(e=>(e.JwtBearer="urn:ietf:params:oauth:client-assertion-type:jwt-bearer",e))(ua||{}),_t=class extends H{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??la(),this.storage=t?.storage??new je,this.createPdfImpl=t?.createPdf,this.baseUrl=Er(t?.baseUrl??ea),this.fhirBaseUrl=$(this.baseUrl,t?.fhirUrlPath??"fhir/R4"),this.authorizeUrl=$(this.baseUrl,t?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=$(this.baseUrl,t?.tokenUrl??"oauth2/token"),this.logoutUrl=$(this.baseUrl,t?.logoutUrl??"oauth2/logout"),this.clientId=t?.clientId??"",this.clientSecret=t?.clientSecret??"",this.onUnauthenticated=t?.onUnauthenticated,this.refreshGracePeriod=t?.refreshGracePeriod??ia,this.cacheTime=t?.cacheTime??(typeof window>"u"?na:ra),this.cacheTime>0?this.requestCache=new wt(t?.resourceCacheSize??ta):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}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=$(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?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,D.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($(this.fhirBaseUrl,t.join("/")))}fhirSearchUrl(t,n){let i=this.fhirUrl(t);return n&&(i.search=$n(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=new M((async()=>{let u=await this.get(o,i);if(u.entry)for(let l of u.entry)this.cacheResource(l.resource);return u})());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(bi));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 bi(a),o=c?.url?new URL(c.url):void 0}}searchValueSet(t,n,i){return this.valueSetExpand({url:t,filter:n},i)}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 Ti;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(Ti));let[o,s]=i.split("/");return!o||!s?new M(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}requestSchema(t){if(hn(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 ze=class{constructor(e,t){this.operator=e;this.child=t}toString(){return`${this.operator}(${this.child.toString()})`}},Y=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 Kt(e,this.prefixParselets,this.infixParselets)}},Kt=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 zr="http://unitsofmeasure.org",lc="http://loinc.org",pc="http://snomed.info/sct",dc="http://www.nlm.nih.gov/research/umls/rxnorm",fc="http://www.ama-assn.org/go/cpt",mc="http://hl7.org/fhir/sid/icd-10",Jr="http://hl7.org",hc="http://terminology.hl7.org";var zt="ok",Ye="created",Jt="gone",Yt="not-modified",Zt="not-found",Xt="conflict",er="unauthorized",Yr="forbidden",Zr="precondition-failed",Xr="multiple-matches",en="too-many-requests",Ze="accepted",tn="server-timeout",gc={resourceType:"OperationOutcome",id:zt,issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},vc={resourceType:"OperationOutcome",id:Ye,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},xc={resourceType:"OperationOutcome",id:Yt,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},rn={resourceType:"OperationOutcome",id:Zt,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},Ee={resourceType:"OperationOutcome",id:er,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},nn={...Ee,issue:[...Ee.issue,{severity:"error",code:"expired",details:{text:"Token expired"}}]},tr={...Ee,issue:[...Ee.issue,{severity:"error",code:"invalid",details:{text:"Token not issued for this audience"}}]},Tc={resourceType:"OperationOutcome",id:Yr,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},Sc={resourceType:"OperationOutcome",id:Jt,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},Ec={resourceType:"OperationOutcome",id:Zr,issue:[{severity:"error",code:"processing",details:{text:"Precondition Failed"}}]},bc={resourceType:"OperationOutcome",id:Xr,issue:[{severity:"error",code:"multiple-matches",details:{text:"Multiple resources found matching condition"}}]},Rc={resourceType:"OperationOutcome",id:en,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function Cc(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 Pc(r){return{resourceType:"OperationOutcome",id:Xt,issue:[{severity:"error",code:"conflict",details:{text:r}}]}}function h(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"structure",details:{text:r}}]}}function on(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:r.toString()}]}}function wc(r){return{resourceType:"OperationOutcome",id:tn,issue:[{severity:"error",code:"timeout",details:{text:r??"Server timeout"}}]}}function be(r){return typeof r=="object"&&r!==null&&r.resourceType==="OperationOutcome"}function rr(r){return r.id===zt||r.id===Ye||r.id===Yt||r.id===Ze}function Ac(r){return r.id===Ye}function Oc(r){return r.id===Ze}function Ic(r){return r.id===Zt}function kc(r){return r.id===Xt}function Vc(r){return r.id===Jt}function Dc(r){return r.id===er}function Mc(r){switch(r.id){case zt:return 200;case Ye:return 201;case Ze:return 202;case Yt:return 304;case er:return 401;case Yr:return 403;case Zt:return 404;case Xt:return 409;case Jt:return 410;case Zr:case Xr:return 412;case en:return 429;case tn:return 504;default:return r.issue?.[0]?.code==="exception"?500:400}}function _c(r,e){if(!rr(r)||e===void 0)throw new d(r)}var d=class extends Error{constructor(e,t){super(sn(e)),this.outcome=e,this.cause=t}};function Xe(r){return r instanceof d?r.outcome:be(r)?r:S(Ne(r))}function Ne(r){return r?typeof r=="string"?r:r instanceof Error?r.message:be(r)?sn(r):typeof r=="object"&&"code"in r&&typeof r.code=="string"?r.code:JSON.stringify(r):"Unknown error"}function sn(r){let e=r.issue?.map(Ki)??[];return e.length>0?e.join("; "):"Unknown error"}function Ki(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 ae(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 x(r,e){return ae("error","structure",e,r)}function an(r,e){return ae("error","invariant",`Constraint ${e.key} not met: ${e.description}`,r,{fhirpath:e.expression})}function cn(r,e,t,n){return ae("error","processing",e,r,{...n,error:t})}var zi={"http://hl7.org/fhirpath/System.String":"string"};function Lc(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:zi[t.code]??t.code})),e}function Ji(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 un(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,Ji(i,o)])),constraints:[],innerTypes:[]};return e}var ln={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"}]}}},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"]}]}}},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"}]}}},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"}]}}},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"}]}}},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 sr(r){return new ir(r).parse()}var ce=un(ln),ar=Object.create(null),pn=Object.create(null),Zi={"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 hn(r){let e;return e=pn[r],e||(e=pn[r]=Object.create(null)),e}function cr(r){let e=Array.isArray(r)?r:r.entry?.map(t=>t.resource)??[];for(let t of e)ur(t)}function ur(r){if(!r?.name)throw new Error("Failed loading StructureDefinition from bundle");if(r.resourceType!=="StructureDefinition")return;let e=sr(r),t=Zi[r.url],n,i;t?(n=ce,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=ce,i=r.type):(n=hn(r.url),i=r.type),n[i]=e;for(let o of e.innerTypes)o.parentType=e,n[o.name]=o;ar[r.url]=e}function yn(){return ce}function gn(r){return!!ce[r]}function Le(r,e){if(e){let t=hn(e)[r];if(t)return t}return ce[r]}function Z(r,e){let t=Le(r,e);if(!t)throw new d(S("Unknown data type: "+r));return t}function vn(r){let e=ce[r];return e&&lr(e)}function xn(r){return!!ar[r]}function Tn(r){return ar[r]}var ir=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,kind:e.kind,description:ro(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=nr(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[nr(e,n.path)]=t;break}n=n.parent}if(!n){let i=nr(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&&!Re(this.slicingContext.path,e?.path)&&(this.slicingContext=void 0),e.slicing&&!this.slicingContext&&this.enterSlice(e,t)}enterInnerType(e){for(;this.backboneContext&&!Re(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;let t=or(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:Re(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,t){to(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&&!Re(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!Re(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!!(Re(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=or(e)),n||(n=X(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=fn(e.max),n=e.base?.max?fn(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:mn(P(i,"fixed[x]")),pattern:mn(P(i,"pattern[x]")),binding:e.binding}}};function Kc(r,e){if(!r)return;let t=[];for(let n of e){t.push("_"+n);let i=ce[r.resourceType].elements[n+"[x]"];i&&t.push(...i.type.map(o=>n+w(o.code)))}for(let n of Object.getOwnPropertyNames(r))!e.includes(n)&&!t.includes(n)&&!Xi.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(dn):[dn]},r}var dn={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},Xi=["resourceType","id","meta"];function fn(r){return r==="*"?Number.POSITIVE_INFINITY:Number.parseInt(r,10)}function nr(r,e=""){return eo(r.path,e)}function eo(r,e){return r?e&&r.startsWith(e)?r.substring(e.length+1):r:""}function Re(r,e){return!r||!e?!1:e.startsWith(r+".")||e===r}function mn(r){return Array.isArray(r)&&r.length>0?r[0]:E(r)?void 0:r}function to(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 ro(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 no(r){return"elements"in r}function io(r){return!!r.visitPropertyAsync}function iu(r,e,t,n){let i;return t&&no(t)?i={schema:t,initialPath:n}:i=t,io(e)?Sn(g(r),e,i):et(g(r),e,i)}async function ou(r,e,t){return Sn(g(r),e,t)}function et(r,e,t){new pr(r,e,t).crawl()}function Sn(r,e,t){return new dr(r,e,t).crawl()}var pr=class{constructor(e,t,n){this.root=e,this.visitor=t,this.schema=n?.schema??Z(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=I(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=Ce(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 Fe(s))this.crawlPropertyValue(a,i)}crawlPropertyValue(e,t){if(!tt(e.type)){let n=Z(e.type);this.crawlObject(e,n,t)}}},dr=class{constructor(e,t,n){this.root=e,this.visitor=t,this.schema=n?.schema??Z(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=I(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)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=Ce(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 Fe(s))await this.crawlPropertyValue(a,i)}async crawlPropertyValue(e,t){if(!tt(e.type)){let n=Z(e.type);await this.crawlObject(e,n,t)}}};function Ce(r,e,t){if(r===void 0)return[void 0];if(e==="$this")return[r];let n=t?.withPath?oo: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 oo(r,e,t){let n=r.path;return so(P(r,e,t),n,e)}function so(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 tt(r){return r==="undefined"||r in fr}var nt={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:/^[\s\S]+$/,oid:/^urn:oid:[0-2](\.(0|[1-9]\d*))+$/,string:/^[\s\S]+$/,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:/.*/},ao={"ele-1":!0,"dom-3":!0,"org-1":!0,"sdf-19":!0};function Ru(r,e){if(!r.resourceType)throw new d(h("Missing resource type"));return new rt(g(r),e).validate()}function Cu(r,e){return new rt(r,e).validate()}var rt=class{constructor(e,t){this.issues=[],this.root=e,this.currentResource=[],I(e.value)&&this.currentResource.push(e.value),t?.profile?this.schema=sr(t.profile):this.schema=Z(e.type)}validate(){this.constraintsCheck({...this.root,path:this.schema.path},this.schema),mr(this.root.value,this.schema.path,this.issues),et(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(x(n,"Expected array of values for property"));return}c=a}else{if(Array.isArray(a)){this.issues.push(x(n,"Expected single value for property"));return}c=[a]}(c.length<s.min||c.length>s.max)&&this.issues.push(x(s.path,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${c.length}`)),lo(a,s)||this.issues.push(x(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 m=po(l,s.slicing);m&&u&&(u[m]+=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(x(e.path,"Missing required property")),!1):E(e)?(this.issues.push(x(n,"Invalid empty value")),!1):!0}checkPropertyValue(e){tt(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(x(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=uo(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(ae("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(ae("warning","structure",`Duplicate choice of type property "${a}"`,a)),o[a]=s;continue}!(s in t)&&!(s.startsWith("_")&&s.slice(1)in t)&&this.issues.push(x(`${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 ao)&&!this.isExpressionTrue(i,e)){this.issues.push(an(e.path,i));return}}}referenceTypeCheck(e,t){if(e.type!=="Reference")return;let n=e.value;if(!ue(n))return;let i=n.reference.split("/")[0];if(!i)return;let o=t.type.find(m=>m.code==="Reference")?.targetProfile;if(!o)return;let s=Jr+"/fhir/StructureDefinition/",a=s+"Resource",c=s+i,u="https://medplum.com/fhir/StructureDefinition/",l=u+i;for(let m of o)if(m===a||m===c||m===l||!m.startsWith(s)&&!m.startsWith(u))return;this.issues.push(ae("warning","structure",`Invalid reference: got "${i}", expected "${o.join('", "')}"`,e.path))}isExpressionTrue(e,t){let n={"%context":t,"%ucum":g(zr)};this.currentResource.length>0&&(n["%resource"]=g(this.currentResource[this.currentResource.length-1])),I(this.root.value)&&(n["%rootResource"]=this.root);try{let i=A(e.expression,[t],n);return i.length===1&&i[0].value===!0}catch(i){return this.issues.push(cn(t.path,"Error evaluating invariant expression",i,{fhirpath:e.expression})),!1}}validatePrimitiveType(e){let[t,n]=fo(e),i=e.path;if(t){let{type:o,value:s}=t;if(!(o in fr)){this.issues.push(x(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(x(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&&et(n,this,{schema:Z("Element"),initialPath:i})}validateString(e,t,n){if(!e.trim()){this.issues.push(x(n,"String must contain non-whitespace content"));return}let i=nt[t];i&&!i.exec(e)&&this.issues.push(x(n,"Invalid "+t+" format"))}validateNumber(e,t,n){Number.isNaN(e)||!Number.isFinite(e)?this.issues.push(x(n,"Invalid numeric value")):co(t)&&!Number.isInteger(e)?this.issues.push(x(n,"Expected number to be an integer")):t===p.positiveInt&&e<=0?this.issues.push(x(n,"Expected number to be positive")):t===p.unsignedInt&&e<0&&this.issues.push(x(n,"Expected number to be non-negative"))}};function co(r){return r===p.integer||r===p.positiveInt||r===p.unsignedInt}function uo(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 mr(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(x(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?t.push(x(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!r[s]?.[a]?t.push(x(`${o}[${a}]`,"Invalid null value")):i[a]&&mr(i[a],`${o}[${a}]`,t);else typeof i=="object"&&mr(i,o,t)}}function lo(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&&!Ue(t,e.pattern)||e.fixed&&!ee(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 Ue(r,i.pattern);if(i.fixed)return ee(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 po(r,e){if(e){for(let t of e.slices)if(e.discriminator.every(n=>Fe(Ce(r,n.path))?.some(i=>hr(i,n,t))))return t.name}}function fo(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:p.boolean,value:r}]}function g(r){return r==null?{type:"undefined",value:void 0}:Number.isSafeInteger(r)?{type:p.integer,value:r}:typeof r=="number"?{type:p.decimal,value:r}:typeof r=="boolean"?{type:p.boolean,value:r}:typeof r=="string"?{type:p.string,value:r}:k(r)?{type:p.Quantity,value:r}:I(r)?{type:r.resourceType,value:r}:{type:p.BackboneElement,value:r}}function N(r){return r.length===0?!1:!!r[0].value}function j(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=st(r.type,e,t?.profileUrl);return n?mo(r,e,n):ho(r,e)}function mo(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 m=u.replace("[x]",w(l.code));if(o=n[m],a=n["_"+m],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]=Pn(o[l],a[l])}else o=Pn(o,a);if(!E(o))return(s==="Element"||s==="BackboneElement")&&(s=t.type[0].code),Array.isArray(o)?o.map(l=>En(l,s)):En(o,s)}function En(r,e){return e==="Resource"&&I(r)&&(e=r.resourceType),{type:e,value:r}}function ho(r,e){let t=r.value;if(!t||typeof t!="object")return;let n;if(e in t)n=t[e];else for(let i in p){let o=e+w(i);if(o in t){n=t[o];break}}if(!E(n))return Array.isArray(n)?n.map(g):g(n)}function it(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 wn(r){return f(!N(r))}function An(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 On(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):k(t)&&k(n)?f(Vn(t,n)):f(typeof t=="object"&&typeof n=="object"?vr(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(bn),e.sort(bn),f(r.every((t,n)=>N(yo(t,e[n])))))}function yo(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):k(s)&&k(a)?f(Vn(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"?vr({...s,id:void 0},{...a,id:void 0}):typeof s=="string"&&typeof a=="string"?s.toLowerCase()===a.toLowerCase():s===a)}function bn(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 ot(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 In(t);case"DateTime":return Pe(t);case"Time":return typeof t=="string"&&!!/^T\d/.exec(t);case"Period":return kn(t);case"Quantity":return k(t);default:return typeof t=="object"&&t?.resourceType===e}}function In(r){return typeof r=="string"&&!!nt.date.exec(r)}function Pe(r){return typeof r=="string"&&!!nt.dateTime.exec(r)}function kn(r){return!!(r&&typeof r=="object"&&("start"in r&&Pe(r.start)||"end"in r&&Pe(r.end)))}function ku(r){if(r){if(In(r))return{start:Rn(r,"0000-00-00T00:00:00.000Z"),end:Rn(r,"xxxx-12-31T23:59:59.999Z")};if(Pe(r))return{start:r,end:r};if(kn(r))return r}}function Rn(r,e){return r+e.substring(r.length)}function k(r){return!!(r&&typeof r=="object"&&"value"in r&&typeof r.value=="number")}function Vn(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 vr(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(Cn(o)&&Cn(s)){if(!vr(o,s))return!1}else if(o!==s)return!1}return!0}function Cn(r){return r!==null&&typeof r=="object"}function Pn(r,e){if(e){if(typeof e!="object")throw new Error("Primitive extension must be an object");return go(r??{},e)}return r}function go(r,e){return delete e.__proto__,delete e.constructor,Object.assign(r,e)}function te(r){let e=le(r),t=xo(r);return t===e?{reference:e}:{reference:e,display:t}}function le(r){return ue(r)?r.reference:`${r.resourceType}/${r.id}`}function pe(r){if(r)return ue(r)?r.reference.split("/")[1]:r.id}function Lu(r){if(r?.reference===void 0)throw new d(h("Reference missing reference property."));let[e,t]=r.reference.split("/");if(e===""||t===""||t===void 0)throw new d(h("Unable to parse reference string."));return[e,t]}function vo(r){return r.resourceType==="Patient"||r.resourceType==="Practitioner"||r.resourceType==="RelatedPerson"}function xo(r){if(vo(r)){let e=To(r);if(e)return e}if(r.resourceType==="Device"){let e=So(r);if(e)return e}if(r.resourceType==="MedicationRequest"&&r.medicationCodeableConcept)return at(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]),ko(e))return at(e);if(Vo(e))return e.text}return le(r)}function To(r){let e=r.name;if(e&&e.length>0)return lt(e[0])}function So(r){let e=r.deviceName;if(e&&e.length>0)return e[0].name}function Fu(r){if(!("photo"in r))return;let e=r.photo;if(e)if(Array.isArray(e))for(let t of e){let n=Dn(t);if(n)return n}else return Dn(e)}function Dn(r){if(r.url&&r.contentType?.startsWith("image/"))return r.url}function Uu(r){return r?new Date(r):void 0}function ct(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 m=a*12+c-(i*12+o);u<s&&m--;let v=Math.floor((n.getTime()-t.getTime())/(1e3*60*60*24));return{years:l,months:m,days:v}}function Bu(r,e){let{years:t,months:n,days:i}=ct(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 Mn(r.item,e),e}function Mn(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer[0]),Mn(t.item,e)}function ju(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 Eo(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 $u(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 Wu(r,...e){let t=X(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 X(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 Nn(r,e){return JSON.stringify(r,bo,e?2:void 0)}function bo(r,e){return!Ro(r)&&E(e)?void 0:e}function Ro(r){return!!/\d+$/.exec(r)}function E(r){if(r==null)return!0;let e=typeof r;return e==="string"||e==="object"?!K(r):!1}function K(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 ee(r,e,t){return r===e||E(r)&&E(e)?!0:E(r)||E(e)?!1:Array.isArray(r)&&Array.isArray(e)?Co(r,e):Array.isArray(r)||Array.isArray(e)?!1:R(r)&&R(e)?Po(r,e,t):(R(r)||R(e),!1)}function Co(r,e){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(!ee(r[t],e[t]))return!1;return!0}function Po(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(!ee(o,s,i))return!1}return!0}function Ue(r,e){return E(r)?!0:E(e)?!1:Array.isArray(r)&&Array.isArray(e)?wo(r,e):Array.isArray(r)||Array.isArray(e)?!1:R(r)&&R(e)?Ao(r,e):R(r)||R(e)?!1:r===e}function wo(r,e){return e.every(t=>r.some(n=>Ue(n,t)))}function Ao(r,e){return Object.entries(e).every(([t,n])=>t in r&&Ue(r[t],n))}function de(r){return r===void 0?r:JSON.parse(JSON.stringify(r))}function Gu(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 Ln(r){return r.every(Oo)}function Oo(r){return typeof r=="string"}function Io(r){return R(r)&&"code"in r&&typeof r.code=="string"}function ko(r){return R(r)&&"coding"in r&&Array.isArray(r.coding)&&r.coding.every(Io)}function Vo(r){return R(r)&&"text"in r&&typeof r.text=="string"}var Fn=[];for(let r=0;r<256;r++)Fn.push(r.toString(16).padStart(2,"0"));function Un(r){let e=new Uint8Array(r),t=new Array(e.length);for(let n=0;n<e.length;n++)t[n]=Fn[e[n]];return t.join("")}function Bn(r){let e=new Uint8Array(r),t=[];for(let n=0;n<e.length;n++)t[n]=String.fromCharCode(e[n]);return window.btoa(t.join(""))}function w(r){return r?r.charAt(0).toUpperCase()+r.substring(1):""}function Hu(r){return r===r.toLowerCase()&&r!==r.toUpperCase()}function Tr(r){return r.length>0&&r.startsWith(r[0].toUpperCase())}function we(r,e){let t=r+".";if(e.startsWith(t))return e.slice(t.length)}function xr(r,e){return r.coding?.find(t=>t.system===e)?.code}function Qu(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 Ku(r,e,t,n){return r.qualifiedInterval?.find(i=>qn(i,e)&&_o(i,t,r.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function zu(r,e,t){return r.qualifiedInterval?.find(n=>qn(n,e)&&t.includes(n.condition))}function qn(r,e){return Do(r,e)&&Mo(r,e)}function Do(r,e){return!r.gender||r.gender===e.gender}function Mo(r,e){return!r.age||jn(ct(e.birthDate).years,r.age)}function _o(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||No(r,e.high.value,t))}function Ju(r,e){return parseFloat(r.toFixed(e))}function Yu(r,e,t){return $(r,t)===$(e,t)}function Zu(r,e,t){return $(r,t)<$(e,t)}function Xu(r,e,t){return $(r,t)>$(e,t)}function No(r,e,t){return $(r,t)<=$(e,t)}function Lo(r,e,t){return $(r,t)>=$(e,t)}function $(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}function el(r,e,t){return r.find(n=>typeof e=="string"?xr(n.code||{},t)===e:xr(n.code||{},t)===xr(e,t))}function Fe(r){if(r!==void 0)return Array.isArray(r)?r:[r]}function tl(r){return Array.isArray(r)?r[0]:r}var Sr=r=>new Promise(e=>{setTimeout(e,r)});function Er(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 $n(r){let e,t=!1;return function(){return t||(e=r(),t=!0),e}}function Ae(r,e){return r?(r.push(e),r):[e]}function ut(r){return r.sort((e,t)=>e.localeCompare(t))}function br(r){return r.endsWith("/")?r:r+"/"}function Fo(r){return r.startsWith("/")?r.slice(1):r}function B(r,e){return new URL(Fo(e),br(r.toString())).toString()}function Wn(r,e){return B(r,e).toString().replace("http://","ws://").replace("https://","wss://")}function Gn(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 Uo=/^(([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 rl(r){return Uo.test(r)}function nl(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 il(r,e){return new Map(r.entry?.filter(n=>!!n.resource).map(n=>[Eo(n.resource,e),n.resource]).filter(([n])=>n!==void 0))}function ol(r,e){if(r?.meta?.profile?.includes(e)){let t=r.meta.profile.indexOf(e);r.meta.profile.splice(t,1)}return r}function Hn(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 cl(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 lt(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=me(r.text);if(n)return n}return t.join(" ").trim()}function ul(r){let e=[];return r.given&&e.push(...r.given),e.join(" ").trim()}function ll(r){return me(r.family)??""}function Cr(r){return r instanceof Date&&!isNaN(r.getTime())}function pl(r,e,t){if(!r)return"";let n=new Date(r);return Cr(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...t})):""}function Bo(r,e,t){if(!r)return"";let n=new Date("2000-01-01T"+r+"Z");return Cr(n)?n.toLocaleTimeString(e,t):""}function Rr(r,e,t){if(!r)return"";let n=new Date(r);return Cr(n)?n.toLocaleString(e,t):""}function dl(r,e,t){return!r||!r.start&&!r.end?"":Rr(r.start,e,t)+" - "+Rr(r.end,e,t)}var qo={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},jo={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},$o={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function fl(r){if(!r)return"";let e=[];return Wo(e,r.repeat),r.event&&e.push(r.event.map(t=>Rr(t)).join(", ")),w(e.join(" ").trim())}function Wo(r,e){if(!e?.periodUnit)return;let t=e.frequency??1,n=e.period??1,i=e.periodUnit;t===1&&n===1?r.push(qo[i]):(t===1?r.push("once"):r.push(t+" times"),n===1?r.push("per "+jo[i]):r.push("per "+n+" "+$o[i])),e.dayOfWeek&&r.push("on "+e.dayOfWeek.map(w).join(", ")),e.timeOfDay&&r.push("at "+e.timeOfDay.map(o=>Bo(o)).join(", "))}function ml(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),`> ${fe(n,e)}`):`>= ${fe(n,e)}`:n?.value===void 0&&i?.value!==void 0?t&&e!==void 0?(i.value=Qo(i.value,e),`< ${fe(i,e)}`):`<= ${fe(i,e)}`:(n?.unit===i?.unit&&delete n?.unit,`${fe(n,e)} - ${fe(i,e)}`)}function fe(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 hl(r){return r?.value===void 0?"":r.value.toLocaleString(void 0,{style:"currency",currency:r.currency??"USD",currencyDisplay:"narrowSymbol"})}function at(r){if(!r)return"";let e=me(r.text);return e||(r.coding?r.coding.map(t=>Go(t)).join(", "):"")}function Go(r,e){let t=me(r?.display);if(t){let n=e?me(r?.code):void 0;return`${t}${n?" ("+n+")":""}`}return me(r?.code)??""}function Ho(r){if(!r)return"";let e=[];if(r.valueQuantity)e.push(fe(r.valueQuantity));else if(r.valueCodeableConcept)e.push(at(r.valueCodeableConcept));else{let t=me(r.valueString);t&&e.push(t)}return"component"in r&&e.push(r.component.map(t=>Ho(t)).join(" / ")),e.join(" / ").trim()}function me(r){return typeof r=="string"?r:void 0}function Qo(r,e,t=1){return(Qn(r,e)+t)*Math.pow(10,-e)}function Ko(r,e,t=1){return(Qn(r,e)-t)*Math.pow(10,-e)}function Qn(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}var p={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 El(r){for(let e of r.entry){let t=e.resource;t.resourceType==="SearchParameter"&&Pr(t)}}function bl(r){let e=Hn(r.entry,t=>t.resource?.resourceType==="StructureDefinition"?t.resource:void 0)??[];for(let t of e)zn(t.type)}function zn(r){let e=L.types[r];return e||(e={searchParamsDetails:{}},L.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 Pr(r){for(let e of r.base??[]){let t=zn(e);t.searchParams||(t.searchParams={}),t.searchParams[r.code]=r}}function or(r){let e=r.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?zo((r.base?.path??r.path)?.split(".")):e}function zo(r){return r.length===1?r[0]:r.map(w).join("")}function lr(r){return r.kind==="resource"&&r.name!=="Resource"&&r.name!=="DomainResource"}function Rl(){return Object.values(yn()).filter(lr).map(r=>r.name)}function Cl(r){return L.types[r]?.searchParams}function Pl(r,e){return L.types[r]?.searchParams?.[e]}function wl(r){let e=r.replaceAll("[x]","").split(".").pop();return Jo(e)}function Jo(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(Zo).join(" ").replace("_"," ").replace(/\s+/g," ")}var Yo=new Set(["ID","IP","PKCE","JWKS","URI","URL","OMB","UDI"]);function Zo(r){let e=r.toUpperCase();return r===e?r:Yo.has(e)?e:e.charAt(0)+r.slice(1)}function st(r,e,t){let n=Le(r,t);if(n)return Xo(n.elements,e)}function Xo(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 I(r){return!!(r&&typeof r=="object"&&"resourceType"in r)}function ue(r){return!!(r&&typeof r=="object"&&"reference"in r&&typeof r.reference=="string")}var L={types:{}};function Jn(r){switch(r.type){case p.uuid:case p.uri:case p.url:case p.string:case p.oid:case p.markdown:case p.id:case p.code:case p.canonical:case p.base64Binary:case p.SystemString:case p.date:case p.dateTime:case p.instant:return r.value;case p.Identifier:return`${r.value.system??""}|${r.value.value}`;case p.Coding:return Kn(r.value);case p.CodeableConcept:return r.value.coding?.map(Kn).join(",")??r.value.text;case p.HumanName:return r.value.text?r.value.text:lt(r.value);case p.unsignedInt:case p.positiveInt:case p.integer:case p.decimal:return r.value.toString();case p.boolean:return r.value?"true":"false";case p.Extension:return r.value.url;case p.ContactPoint:return r.value.value;case p.Quantity:case p.Age:case p.Count:case p.Duration:return`${r.value.value}|${r.value.system??""}|${r.value.code??r.value.unit??""}`;case p.Reference:return r.value.reference;default:return I(r.value)?te(r.value).reference:JSON.stringify(r)}}function Kn(r){return r?`${r.system??""}|${r.code}`:""}function Oe(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=()=>[],O={empty:(r,e)=>f(e.length===0||e.every(t=>E(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=>!E(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,he(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,he(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:p.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===O.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,he(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,he(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,he(r));return it([...e,...n])},combine:(r,e,t)=>{if(!t)return e;let n=t.eval(r,he(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}]=G(e,1);if(typeof t=="boolean")return[{type:p.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(O.toBoolean(r,e).length===1),toInteger:(r,e)=>{if(e.length===0)return[];let[{value:t}]=G(e,1);return typeof t=="number"?[{type:p.integer,value:t}]:typeof t=="string"&&/^[+-]?\d+$/.exec(t)?[{type:p.integer,value:parseInt(t,10)}]:typeof t=="boolean"?[{type:p.integer,value:t?1:0}]:[]},convertsToInteger:(r,e)=>e.length===0?[]:f(O.toInteger(r,e).length===1),toDate:(r,e)=>{if(e.length===0)return[];let[{value:t}]=G(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:p.date,value:Oe(t)}]:[]},convertsToDate:(r,e)=>e.length===0?[]:f(O.toDate(r,e).length===1),toDateTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=G(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:p.dateTime,value:Oe(t)}]:[]},convertsToDateTime:(r,e)=>e.length===0?[]:f(O.toDateTime(r,e).length===1),toDecimal:(r,e)=>{if(e.length===0)return[];let[{value:t}]=G(e,1);return typeof t=="number"?[{type:p.decimal,value:t}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(t)?[{type:p.decimal,value:parseFloat(t)}]:typeof t=="boolean"?[{type:p.decimal,value:t?1:0}]:[]},convertsToDecimal:(r,e)=>e.length===0?[]:f(O.toDecimal(r,e).length===1),toQuantity:(r,e)=>{if(e.length===0)return[];let[{value:t}]=G(e,1);return k(t)?[{type:p.Quantity,value:t}]:typeof t=="number"?[{type:p.Quantity,value:{value:t,unit:"1"}}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(t)?[{type:p.Quantity,value:{value:parseFloat(t),unit:"1"}}]:typeof t=="boolean"?[{type:p.Quantity,value:{value:t?1:0,unit:"1"}}]:[]},convertsToQuantity:(r,e)=>e.length===0?[]:f(O.toQuantity(r,e).length===1),toString:(r,e)=>{if(e.length===0)return[];let[{value:t}]=G(e,1);return t==null?[]:k(t)?[{type:p.string,value:`${t.value} '${t.unit}'`}]:[{type:p.string,value:t.toString()}]},convertsToString:(r,e)=>e.length===0?[]:f(O.toString(r,e).length===1),toTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=G(e,1);if(typeof t=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(t);if(n)return[{type:p.time,value:Oe("T"+n[1])}]}return[]},convertsToTime:(r,e)=>e.length===0?[]:f(O.toTime(r,e).length===1),indexOf:(r,e,t)=>F((n,i)=>n.indexOf(i),r,e,t),substring:(r,e,t,n)=>F((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)=>F((n,i)=>n.startsWith(i),r,e,t),endsWith:(r,e,t)=>F((n,i)=>n.endsWith(i),r,e,t),contains:(r,e,t)=>F((n,i)=>n.includes(i),r,e,t),upper:(r,e)=>F(t=>t.toUpperCase(),r,e),lower:(r,e)=>F(t=>t.toLowerCase(),r,e),replace:(r,e,t,n)=>F((i,o,s)=>i.replaceAll(o,s),r,e,t,n),matches:(r,e,t)=>F((n,i)=>!!new RegExp(i).exec(n),r,e,t),replaceMatches:(r,e,t,n)=>F((i,o,s)=>i.replaceAll(o,s),r,e,t,n),length:(r,e)=>F(t=>t.length,r,e),toChars:(r,e)=>F(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,he(r))[0]?.value??"";if(typeof n!="string")throw new Error("Separator must be a string.");return[{type:p.string,value:e.map(i=>i.value?.toString()??"").join(n)}]},abs:(r,e)=>W(Math.abs,r,e),ceiling:(r,e)=>W(Math.ceil,r,e),exp:(r,e)=>W(Math.exp,r,e),floor:(r,e)=>W(Math.floor,r,e),ln:(r,e)=>W(Math.log,r,e),log:(r,e,t)=>W((n,i)=>Math.log(n)/Math.log(i),r,e,t),power:(r,e,t)=>W(Math.pow,r,e,t),round:(r,e)=>W(Math.round,r,e),sqrt:(r,e)=>W(Math.sqrt,r,e),truncate:(r,e)=>W(t=>t|0,r,e),children:z,descendants:z,trace:(r,e,t)=>e,now:()=>[{type:p.dateTime,value:new Date().toISOString()}],timeOfDay:()=>[{type:p.time,value:new Date().toISOString().substring(11)}],today:()=>[{type:p.date,value:new Date().toISOString().substring(0,10)}],between:(r,e,t,n,i)=>{let o=O.toDateTime(r,t.eval(r,e));if(o.length===0)throw new Error("Invalid start date");let s=O.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=ct(o[0].value,s[0].value);return[{type:p.Quantity,value:{value:c[a],unit:a}}]},is:(r,e,t)=>{let n="";return t instanceof q?n=t.name:t instanceof re&&(n=t.left.name+"."+t.right.name),n?e.map(i=>({type:p.boolean,value:ot(i,n)})):[]},not:(r,e)=>O.toBoolean(r,e).map(t=>({type:p.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:p.BackboneElement,value:void 0}}).filter(t=>!!t.value),as:(r,e)=>e,type:(r,e)=>e.map(({value:t})=>typeof t=="boolean"?{type:p.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof t=="number"?{type:p.BackboneElement,value:{namespace:"System",name:"Integer"}}:I(t)?{type:p.BackboneElement,value:{namespace:"FHIR",name:t.resourceType}}:{type:p.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:p.boolean,value:o.value?.resourceType===i}))},getResourceKey:(r,e)=>{let t=e[0].value;return t?.id?[{type:p.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:p.id,value:pe(n)}]},extension:(r,e,t)=>{let n=t.eval(r,e)[0].value,i=e?.[0]?.value;if(i){let o=X(i,n);if(o)return[{type:p.Extension,value:o}]}return[]}};function F(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=G(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 W(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=G(t,1),o=k(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?p.Quantity:t[0].type,u=o?{...i,value:a}:a;return[{type:c,value:u}]}function G(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 he(r){let e=r;for(;e.parent?.variables.$this;)e=e.parent;return[e.variables.$this]}var pt=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 I(t)&&t.resourceType===this.name?e:P(e,this.name)}toString(){return this.name}},dt=class{eval(){return[]}toString(){return"{}"}},ft=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()}},ye=class extends Y{constructor(e,t){super("as",e,t)}eval(e,t){return O.ofType(e,this.left.eval(e,t),this.right)}},C=class extends Y{},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=k(s)?s.value:s,u=k(a)?a.value:a,l=this.impl(c,u);return typeof l=="boolean"?f(l):k(s)?[{type:p.Quantity,value:{...s,value:l}}]:[g(l)]}},mt=class extends Y{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:p.string,value:o.map(s=>s.value).join("")}]:o}},ht=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))}},yt=class extends C{constructor(e,t){super("in",e,t)}eval(e,t){let n=j(this.left.eval(e,t)),i=this.right.eval(e,t);return n?f(i.some(o=>o.value===n.value)):[]}},re=class extends Y{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()}`}},Ie=class extends Y{constructor(e,t){super("|",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return it([...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 An(n,i)}},vt=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 On(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 gr(n,i)}},Tt=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 wn(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(ot(n[0],i))}},St=class extends C{constructor(e,t){super("and",e,t)}eval(e,t){let n=j(this.left.eval(e,t),"boolean"),i=j(this.right.eval(e,t),"boolean");return n?.value===!0&&i?.value===!0?f(!0):n?.value===!1||i?.value===!1?f(!1):[]}},Et=class extends C{constructor(e,t){super("or",e,t)}eval(e,t){let n=j(this.left.eval(e,t),"boolean"),i=j(this.right.eval(e,t),"boolean");return n?.value===!1&&i?.value===!1?f(!1):n?.value||i?.value?f(!0):[]}},bt=class extends C{constructor(e,t){super("xor",e,t)}eval(e,t){let n=j(this.left.eval(e,t),"boolean"),i=j(this.right.eval(e,t),"boolean");return!n||!i?[]:f(n.value!==i.value)}},Rt=class extends C{constructor(e,t){super("implies",e,t)}eval(e,t){let n=j(this.left.eval(e,t),"boolean"),i=j(this.right.eval(e,t),"boolean");return i?.value===!0||n?.value===!1?f(!0):!n||!i?[]:f(!1)}},J=class{constructor(e,t){this.name=e;this.args=t}eval(e,t){let n=O[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(", ")})`}},ve=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 es=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],ne=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()===" "&&ts(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 ts(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&es.includes(r.value)))}var Be=["true","false"],qe=["!=","!~","<=",">=","{}","->"];function Yn(r){return new ne(r,Be,qe).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},rs={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},ns={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new ve(e,t)},precedence:y.Indexer},is={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 J(e.name,t)},precedence:y.FunctionCall};function os(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 je(){return new Je().registerPrefix("String",{parse:(r,e)=>new U({type:p.string,value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new U({type:p.dateTime,value:Oe(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new U({type:p.Quantity,value:os(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new U({type:e.value.includes(".")?p.decimal:p.integer,value:parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new U({type:p.boolean,value:!0})}).registerPrefix("false",{parse:()=>new U({type:p.boolean,value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new q(e.value)}).registerPrefix("{}",{parse:()=>new dt}).registerPrefix("(",rs).registerInfix("[",ns).registerInfix("(",is).prefix("+",y.UnaryAdd,(r,e)=>new ft("+",e,t=>t)).prefix("-",y.UnarySubtract,(r,e)=>new V("-",e,e,(t,n)=>-n)).infixLeft(".",y.Dot,(r,e,t)=>new re(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 Ie(r,t)).infixLeft("=",y.Equals,(r,e,t)=>new gt(r,t)).infixLeft("!=",y.NotEquals,(r,e,t)=>new vt(r,t)).infixLeft("~",y.Equivalent,(r,e,t)=>new xt(r,t)).infixLeft("!~",y.NotEquivalent,(r,e,t)=>new Tt(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 mt(r,t)).infixLeft("and",y.And,(r,e,t)=>new St(r,t)).infixLeft("as",y.As,(r,e,t)=>new ye(r,t)).infixLeft("contains",y.Contains,(r,e,t)=>new ht(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 yt(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 Et(r,t)).infixLeft("xor",y.Xor,(r,e,t)=>new bt(r,t)).infixLeft("implies",y.Implies,(r,e,t)=>new Rt(r,t))}var ss=je();function wr(r){return new pt(r,ss.construct(Yn(r)).consumeAndParse())}function ke(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 A(r,t).map(n=>n.value)}function A(r,e,t={}){return wr(r).eval({variables:t},e).map(i=>({type:i.type,value:i.value?.valueOf()}))}var Zn=(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))(Zn||{});function Or(r,e){let t=L.types[r]?.searchParamsDetails?.[e.code];return t||(t=cs(r,e)),t}function as(r,e,t){let n=L.types[r];n||(n={},L.types[r]=n),n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=t}function cs(r,e){let t=e.code,n=ps(t),i=ei(r,e.expression),o={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let a of i){let c=$e(a),u=$n(()=>c.join("."));c.length===1&&c[0]instanceof C?o.propertyTypes.add("boolean"):u().endsWith("extension.value.code")||u().endsWith("extension.value.coding.code")?(o.array=!0,o.propertyTypes.add("code")):Xn(o,$e(a),r,1),u().endsWith("extension.valueDateTime")&&(o.array=!1)}let s={columnName:n,type:ds(e,o.propertyTypes),elementDefinitions:o.elementDefinitions,array:o.array};return as(r,t,s),s}function Xn(r,e,t,n){let i=e[n];if(i instanceof ye){r.propertyTypes.add(i.right.toString());return}if(i instanceof J){us(r,i);return}let o=i.toString(),s=st(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 ve&&(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;ls(l)&&(l=s.type[0].code),Xn(r,e,l,c)}}function us(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 ls(r){return r==="Element"||r==="BackboneElement"}function ps(r){return r.split("-").reduce((e,t,n)=>e+(n?w(t):t),"")}function ds(r,e){switch(r.type){case"date":return e.size===1&&e.has(p.date)?"DATE":"DATETIME";case"number":return"NUMBER";case"quantity":return"QUANTITY";case"reference":return e.has(p.canonical)?"CANONICAL":"REFERENCE";case"token":return e.size===1&&e.has(p.boolean)?"BOOLEAN":"TEXT";default:return"TEXT"}}function ei(r,e){let t=[],n=wr(e);return Ar(r,n.child,t),t}function pp(r,e){let t=ei(r,e);if(t.length!==0)return t.map(n=>n.toString()).join(" | ")}function Ar(r,e,t){e instanceof Ie?(Ar(r,e.left,t),Ar(r,e.right,t)):e.toString().startsWith(r+".")&&t.push(e)}function $e(r){if(r instanceof ye||r instanceof ve)return[$e(r.left),r].flat();if(r instanceof C)return[r];if(r instanceof re)return[$e(r.left),$e(r.right)].flat();if(r instanceof J){if(r.name==="where"&&!(r.args[0]instanceof ge))return[];if(r.name==="last")return[]}return[r]}var xp=20,Tp=1e3,ii=(T=>(T.EQUALS="eq",T.NOT_EQUALS="ne",T.GREATER_THAN="gt",T.LESS_THAN="lt",T.GREATER_THAN_OR_EQUALS="ge",T.LESS_THAN_OR_EQUALS="le",T.STARTS_AFTER="sa",T.ENDS_BEFORE="eb",T.APPROXIMATELY="ap",T.CONTAINS="contains",T.EXACT="exact",T.TEXT="text",T.NOT="not",T.ABOVE="above",T.BELOW="below",T.IN="in",T.NOT_IN="not-in",T.OF_TYPE="of-type",T.MISSING="missing",T.PRESENT="present",T.IDENTIFIER="identifier",T.ITERATE="iterate",T))(ii||{}),oi={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"},Ir={eq:"eq",ne:"ne",lt:"lt",le:"le",gt:"gt",ge:"ge",sa:"sa",eb:"eb",ap:"ap"};function ie(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 fs(i,o)}function Sp(r){return ie(r)}function Ep(r){return ie(r)}function bp(r){return ie(r)}function fs(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=Ae(r.filters,{code:e,operator:"eq",value:t});return}switch(n){case"_sort":hs(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=ti(t);i==="iterate"&&(s.modifier="iterate"),r.include=Ae(r.include,s);break}case"_revinclude":{let s=ti(t);i==="iterate"&&(s.modifier="iterate"),r.revInclude=Ae(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=L.types[r.resourceType]?.searchParams?.[n];s?r.filters=Ae(r.filters,ys(s,i,t)):r.filters=Ae(r.filters,gs(n,i,t))}}}}function hs(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})}}function ys(r,e,t){if(e==="missing")return{code:r.code,operator:"missing",value:t};switch(r.type){case"number":case"date":case"quantity":{let{operator:n,value:i}=vs(t);if(!ri(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(!ri(r,t))throw new d(S(`Invalid format for ${r.type} search parameter: ${t}`));return{code:r.code,operator:xs(e),value:t};default:throw new Error("Unrecognized search parameter type: "+r.type)}}function gs(r,e,t){let n="eq";if(e)n=e;else if(t.length>=2){let i=t.substring(0,2);i in Ir&&(t.length===2||t.at(2)?.match(/\d/))&&(n=i,t=t.substring(i.length))}return{code:r,operator:n,value:t}}function vs(r){let e=r.substring(0,2),t=Ir[e];return t?{operator:t,value:r.substring(2)}:{operator:"eq",value:r}}function xs(r){return oi[r]??"eq"}function ti(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 ri(r,e){switch(r.type){case"date":return Pe(e);default:return!0}}var Ts=/{{([^{}]+)}}/g;function Rp(r,e){return r=r.replaceAll(Ts,(t,n)=>{let i=A(n,[],e);return i.length!==1?"":Jn(i[0])}),ie(r)}function Cp(r){let e=[];return r.fields&&e.push("_fields="+r.fields.join(",")),r.filters&&r.filters.forEach(t=>e.push(Ss(t))),r.sortRules&&r.sortRules.length>0&&e.push(Es(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(ni("_include",t))),r.revInclude&&r.revInclude.forEach(t=>e.push(ni("_revinclude",t))),e.length===0?"":(ut(e),"?"+e.join("&"))}function Ss(r){let e=r.operator in oi?":"+r.operator:"",t=r.operator!=="eq"&&r.operator in Ir?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function Es(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function ni(r,e){return r+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function Ct(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 Pt(r,e){if(e.resourceType!==r.resourceType)return!1;if(e.filters){for(let t of e.filters)if(!bs(r,e,t))return!1}return!0}function bs(r,e,t){let n=L.types[e.resourceType]?.searchParams?.[t.code];if(!n)return!1;if(t.operator==="missing"||t.operator==="present")return Rs(r,t,n);switch(n.type){case"reference":return Cs(r,t,n);case"string":case"uri":return si(r,t,n);case"token":return Ps(r,t,n);case"date":return Is(r,t,n);default:return!1}}function Rs(r,e,t){let i=ke(t.expression,r).length>0;return(e.operator==="missing"&&e.value==="false"||e.operator==="present"&&e.value==="true")===i}function Cs(r,e,t){let n=ke(t.expression,r),i=wt(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 Ct(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 Ps(r,e,t){return Or(r.resourceType,t).type==="BOOLEAN"?ws(r,e,t):si(r,e,t,!0)}function ws(r,e,t){let n=ke(t.expression,r),i=e.value==="true",o=n.includes(i);return wt(e.operator)?!o:o}function si(r,e,t,n){let o=Or(r.resourceType,t).elementDefinitions?.[0]?.type?.[0]?.code,s=ke(t.expression,r),a=Ct(e.value),c=wt(e.operator);for(let u of s)for(let l of a){let m;if(o===p.Identifier?m=As(u,e.operator,l):o===p.CodeableConcept?m=Os(u,e.operator,l):m=kr(u,e.operator,l,n),m)return!c}return c}function kr(r,e,t,n){if(n&&t.includes("|")){let[o,s]=t.split("|");return kr(r,e,o,!1)&&(!s||kr(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 As(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 Os(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 Is(r,e,t){let n=ke(t.expression,r),i=Ct(e.value),o=wt(e.operator);for(let s of n)for(let a of i)if(ks(s,e.operator,a))return!o;return o}function ks(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 wt(r){return r==="ne"||r==="not"}var Vs={resourceType:"*"},Ds=["DomainConfiguration","JsonWebKey","Login"],Ms=["PasswordChangeRequest","UserSecurityRequest","Project","ProjectMembership","User"],_s=(b=>(b.READ="read",b.VREAD="vread",b.UPDATE="update",b.PATCH="patch",b.DELETE="delete",b.HISTORY="history",b.HISTORY_INSTANCE="history-instance",b.HISTORY_TYPE="history-type",b.HISTORY_SYSTEM="history-system",b.CREATE="create",b.SEARCH="search",b.SEARCH_TYPE="search-type",b.SEARCH_SYSTEM="search-system",b.SEARCH_COMPARTMENT="search-compartment",b.CAPABILITIES="capabilities",b.TRANSACTION="transaction",b.BATCH="batch",b.OPERATION="operation",b))(_s||{}),Ns=["read","vread","history","history-instance"];function Np(r,e){if(r.resource){for(let t of r.resource)if(Vr(t.resourceType,e))return!0}return!1}function Ls(r,e){if(Ds.includes(e))return!1;if(r.resource){for(let t of r.resource)if(Vr(t.resourceType,e)&&!t.readonly)return!0}return!1}function Lp(r,e){let t=e.resourceType;return Ls(r,t)?Fs(r,e,!1):!1}function Fs(r,e,t){if(r.resource){for(let n of r.resource)if(ai(e,t?"read":"update",n))return!0}return!1}function Fp(r,e,t){if(!t)return Vs;if(t.resource){for(let n of t.resource)if(ai(r,e,n))return n}}function ai(r,e,t){let n=r.resourceType;return!(!Vr(t.resourceType,n)||t.readonly&&!Ns.includes(e)||t.compartment&&!r.meta?.compartment?.find(i=>i.reference===t.compartment?.reference)||t.criteria&&!Pt(r,ie(t.criteria)))}function Vr(r,e){return r===e||r==="*"&&!Ms.includes(e)}function ci(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 ui(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 Dr(){let r=new Uint32Array(28);return crypto.getRandomValues(r),Un(r.buffer)}async function li(r){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(r))}function xe(){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 Us(r){let e={};r=de(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]=xe(),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)=>Bs(i,o,e),2);return qs(JSON.parse(n))}function Bs(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 qs(r){let e=$s(r),{sorted:t,cycles:n}=js(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 js(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 pi(r,e){for(let t in r)if(r[t]&&typeof r[t]=="object"){let n=r[t];if(ue(n)){let i=n.reference;i.startsWith("urn:uuid:")&&e(i)}else pi(n,e)}}function $s(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&&pi(t.resource,i=>{e[i]&&e[i].push(n)})}return e}function Hp(r){r=de(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=xe());return Us(e)}var At=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 D={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"};var Mr=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={}}},H=class{constructor(){this.emitter=new Mr}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 _r={"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"},Ws=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],Nr=["DiagnosticReport-update"];function fi(r){return Nr.includes(r)}function mi(r){if(Nr.includes(r))throw new d(h(`'context.version' is required for '${r}'.`))}var Gs={"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"},select:{resourceType:"*",isArray:!0}},"DiagnosticReport-update":{report:{resourceType:"DiagnosticReport"},patient:{resourceType:"Patient",optional:!0},study:{resourceType:"ImagingStudy",optional:!0},updates:{resourceType:"Bundle"}},syncerror:{operationoutcome:{resourceType:"OperationOutcome"}}};function Hs(r){return Ws.includes(r)}function hi(r){return!!r.endpoint}function Lr(r){if(!It(r))throw new d(h("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 hi(r)&&(o.endpoint=r.endpoint),new URLSearchParams(o).toString()}function It(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(!_r[o])return!1;return!(hi(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function di(r,e,t,n){if(typeof e!="object")throw new d(h(`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(h(`context[${t}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new d(h(`context[${t}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!Hs(e.resourceType))throw new d(h(`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(h(`context[${t}] is invalid. context[${t}] for the '${r}' event should contain resource of type ${i}.`))}}function Qs(r,e,t,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),!n.isArray)di(r,e.resource,t,n);else{let{resources:o}=e;if(!o)throw new d(h(`context[${t}] is invalid. context[${t}] for the '${r}' with key '${String(e.key)}' should contain an array of resources on the key 'resources'.`));for(let s of o)di(r,s,t,n)}}function Ks(r,e){let t=new Map,n=Gs[r];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new d(h(`Key '${o}' not found for event '${r}'. Make sure to add only valid keys.`));Qs(r,e[i],i,n[o],t)}for(let[i,o]of Object.entries(n)){if(!(o.optional||t.has(i)))throw new d(h(`Missing required key '${i}' on context for '${r}' event.`));if(!o.manyAllowed&&(t.get(i)||0)>1)throw new d(h(`${t.get(i)} context entries with key '${i}' found for the '${r}' event when schema only allows for 1.`))}}function Fr(r,e,t,n){if(!(r&&typeof r=="string"))throw new d(h("Must provide a topic."));if(!_r[e])throw new d(h(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(_r).join(", ")}`));if(typeof t!="object")throw new d(h("context must be a context object or array of context objects."));if(Nr.includes(e)&&!n)throw new d(h(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(t)?t:[t];return Ks(e,i),{timestamp:new Date().toISOString(),id:xe(),event:{"hub.topic":r,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var Ot=class extends H{constructor(e){if(super(),this.subRequest=e,!e.endpoint)throw new d(h("Subscription request should contain an endpoint."));if(!It(e))throw new d(h("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 zs(r){let e=r.replace(/-/g,"+").replace(/_/g,"/"),t=ci(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 yi(r){return r.split(".").length===3}function kt(r){let[e,t,n]=r.split(".");return zs(t)}function gi(r){try{return typeof kt(r).login_id=="string"}catch{return!1}}function vi(r){try{let t=kt(r).exp;return typeof t=="number"?t*1e3:void 0}catch{return}}var Vt=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,D.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var xi;xi=Symbol.toStringTag;var M=class{constructor(e){this[xi]="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 We=class{constructor(e){this.storage=e??(typeof localStorage<"u"?localStorage:new Ur)}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?Nn(t):void 0)}},Ur=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]}},Ti=class extends We{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},Si=!1;function Js(){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 Ys(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},Ei=!1,Mt=class r extends H{constructor(t,n,i={}){Si||(Js(),Si=!0);super();this._retryCount=-1;this._shouldReconnect=!0;this._connectLock=!1;this._binaryType="blob";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),Ys(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.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"&&!Ei&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),Ei=!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 Zs=5e3,Ge=class extends H{constructor(...e){super(),this.criteria=new Set(e)}getCriteria(){return this.criteria}_addCriteria(e){this.criteria.add(e)}_removeCriteria(e){this.criteria.delete(e)}},Br=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}},_t=class{constructor(e,t,n){this.pingTimer=void 0;this.waitingForPong=!1;if(!(e instanceof Nt))throw new d(h("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(t).toString()}catch{throw new d(h("Not a valid URL"))}let o=n?.ReconnectingWebSocket?new n.ReconnectingWebSocket(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger}):new Mt(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??Zs,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 d(on(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 ${le(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(h("Failed to get token"));if(!o)throw new d(h("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(ee(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!ee(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(Ne(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 Br(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 Rd({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(!Xs(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=ie(o);if(r.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${r.resourceType}")`),!1;if(!await ea(e,r,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let c=X(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):Pt(r,s)}function Xs(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 ea(r,e,t){let n=X(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 A(n.valueString,[g(e)],o)?.[0]?.value===!0}var Xd="3.2.18-8ca5b55b2",ef="medplum-cli",ta=D.FHIR_JSON+", */*; q=0.1",ra="https://api.medplum.com/",na=1e3,ia=6e4,oa=0,sa=3e5,aa="Binary/",bi={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},ca=(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))(ca||{}),ua=(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))(ua||{}),la=(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))(la||{}),pa=(e=>(e.JwtBearer="urn:ietf:params:oauth:client-assertion-type:jwt-bearer",e))(pa||{}),Nt=class extends H{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??da(),this.storage=t?.storage??new We,this.createPdfImpl=t?.createPdf,this.baseUrl=br(t?.baseUrl??ra),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.onUnauthenticated=t?.onUnauthenticated,this.refreshGracePeriod=t?.refreshGracePeriod??sa,this.cacheTime=t?.cacheTime??(typeof window>"u"?oa:ia),this.cacheTime>0?this.requestCache=new At(t?.resourceCacheSize??na):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}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?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,D.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=Gn(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=new M((async()=>{let u=await this.get(o,i);if(u.entry)for(let l of u.entry)this.cacheResource(l.resource);return u})());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(Pi));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 Pi(a),o=c?.url?new URL(c.url):void 0}}searchValueSet(t,n,i){return this.valueSetExpand({url:t,filter:n},i)}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 bi;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(bi));let[o,s]=i.split("/");return!o||!s?new M(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}requestSchema(t){if(gn(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,8 +40,8 @@ var Qe=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);ar(a.data.StructureDefinitionList);for(let c of a.data.SearchParameterList)Cr(c)})());return this.setCacheEntry(n,o),o}requestProfileSchema(t,n){if(!n?.expandProfile&&gn(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.get(this.fhirUrl("Patient",t,"$everything"),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){return await this.searchOne(t.resourceType,n,i)??this.createResource(t,i)}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=Ri(t,n,i,o),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=Ri(t,n,i,o),c=s??(typeof n=="object"?n:{}),{data:u,contentType:l,filename:m,securityContext:v,onProgress:Q}=a,Me=this.fhirUrl("Binary");return m&&Me.searchParams.set("_filename",m),v?.reference&&this.setRequestHeader(c,"X-Security-Context",v.reference),Q?this.uploadwithProgress(Me,u,l,Q,c):this.post(Me,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 m=v=>{s?.signal?.removeEventListener("abort",l),v instanceof Error?c(v):a(v)};if(u.responseType="json",u.onabort=()=>m(new DOMException("Request aborted","AbortError")),u.onerror=()=>m(new Error("Request error")),o&&(u.upload.onprogress=v=>o(v),u.upload.onload=v=>o(v)),u.onload=()=>{u.status>=200&&u.status<300?m(u.response):m(new d(Ye(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),u.setRequestHeader("X-Medplum","extended"),s?.headers){let v=s.headers;for(let[Q,Me]of Object.entries(v))u.setRequestHeader(Q,Me)}u.send(n)})}async createPdf(t,n,i,o){if(!this.createPdfImpl)throw new Error("PDF creation not enabled");let s=fa(t,n,i,o),a=typeof n=="object"?n:{},{docDefinition:c,tableLayouts:u,fonts:l,...m}=s,v=await this.createPdfImpl(c,u,l),Q={...m,data:v,contentType:"application/pdf"};return this.createBinary(Q,a)}createComment(t,n,i){let o=this.getProfile(),s,a;return t.resourceType==="Encounter"&&(s=te(t),a=t.subject),t.resourceType==="ServiceRequest"&&(s=t.encounter,a=t.subject),t.resourceType==="Patient"&&(a=te(t)),this.createResource({resourceType:"Communication",status:"completed",basedOn:[te(t)],encounter:s,subject:a,sender:o?te(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,D.JSON,n)}graphql(t,n,i,o){return this.post(this.fhirUrl("$graphql"),{query:t,operationName:n,variables:i},D.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:le(n),body:i,contentType:o,waitForResponse:s},D.FHIR_JSON,a)}getActiveLogin(){return this.storage.getObject("activeLogin")}async setActiveLogin(t){(!this.sessionDetails?.profile||le(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}setAccessToken(t,n){this.accessToken=t,this.refreshToken=n,this.accessTokenExpires=hi(t),this.medplumServer=mi(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(oa)&&(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=te(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}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(en);let u=await this.parseBody(s,c);if(s.status===200&&i.followRedirectOnOk||s.status===201&&i.followRedirectOnCreated){let l=await Ei(s,u);if(l)return this.request("GET",l,{...i,body:void 0})}if(s.status===202&&i.pollStatusOnAccepted){let m=await Ei(s,u)??o.statusUrl;if(m)return this.pollStatus(m,i,o)}if(s.status>=400)throw new d(Ye(u));return u}async parseBody(t,n){let i;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=$(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 Tr(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 Tr(s),i.pollCount++}return this.request("GET",t,o,i)}async executeAutoBatch(){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,$(this.fhirBaseUrl,o.url),o.options))}catch(s){o.reject(new d(Ye(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){this.setRequestHeader(t,"X-Medplum","extended"),this.setRequestHeader(t,"Accept",Xs,!0),t.body&&this.setRequestHeader(t,"Content-Type",D.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(Ee)))}async startPkce(){let t=Vr();sessionStorage.setItem("pkceState",t);let n=Vr().slice(0,128);sessionStorage.setItem("codeVerifier",n);let i=await ai(n),o=Fn(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??Si()),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??Si()),typeof sessionStorage<"u"){let o=sessionStorage.getItem("codeVerifier");o&&i.set("code_verifier",o)}return this.fetchTokens(i)}refreshIfExpired(t){return t===void 0&&(t=this.refreshGracePeriod),!this.refreshPromise&&this.accessTokenExpires!==void 0&&Date.now()>this.accessTokenExpires-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=si(t+":"+n)}async fhircastSubscribe(t,n){if(!(typeof t=="string"&&t!==""))throw new d(h("Invalid topic provided. Topic must be a valid string."));if(!(typeof n=="object"&&Array.isArray(n)&&n.length>0))throw new d(h("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("/fhircast/STU3",Nr(i),D.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 d(h("Invalid topic or subscriptionRequest. SubscriptionRequest must be an object."));if(!(t.endpoint&&typeof t.endpoint=="string"&&t.endpoint.startsWith("ws")))throw new d(h("Provided subscription request must have an endpoint in order to unsubscribe."));t.mode="unsubscribe",await this.post("/fhircast/STU3",Nr(t),D.FORM_URL_ENCODED)}fhircastConnect(t){return new At(t)}async fhircastPublish(t,n,i,o){return li(n)?this.post(`/fhircast/STU3/${t}`,Lr(t,n,i,o),D.JSON):(pi(n),this.post(`/fhircast/STU3/${t}`,Lr(t,n,i),D.JSON))}async fhircastGetContext(t){return this.get(`/fhircast/STU3/${t}`)}async invite(t,n){return this.post("admin/projects/"+t+"/invite",n)}async fetchTokens(t){let n={method:"POST",headers:{"Content-Type":D.FORM_URL_ENCODED},body:t.toString(),credentials:"include"},i=n.headers;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(R(a.error_description))}catch(a){throw new d(R("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(fi(n)){let i=It(n);if(Date.now()>=i.exp*1e3)throw this.clearActiveLogin(),new d(tn);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 Mt(this,jn(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 la(){if(!globalThis.fetch)throw new Error("Fetch not available in this environment");return globalThis.fetch.bind(globalThis)}function Si(){return typeof window>"u"?"":window.location.protocol+"//"+window.location.host+"/"}async function Ei(r,e){let t=r.headers.get("content-location");if(t)return t;let n=r.headers.get("location");if(n)return n;if(be(e)&&e.issue?.[0]?.diagnostics)return e.issue[0].diagnostics}function bi(r){let e=r.entry?.map(t=>t.resource)??[];return Object.assign(e,{bundle:r})}function pa(r){return b(r)&&"data"in r&&"contentType"in r}function Ri(r,e,t,n){return pa(r)?r:{data:r,filename:e,contentType:t,onProgress:n}}function da(r){return b(r)&&"docDefinition"in r}function fa(r,e,t,n){return da(r)?r:{docDefinition:r,filename:e,tableLayouts:t,fonts:n}}var zd={aws_ssm_parameter_store:"aws_ssm_parameter_store"};function Br({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=ma(e,t,r,!!i),a=Sr(e,".",2)[1];s=ha(s,o,a),s=ya(s,o,a);let c=Object.create(null);for(let[l,m]of Object.entries(s))c[e+"."+l]=m;let u;if(r&&!r.isDefaultContext)u=r.getExtendedProps;else{let l=Object.create(null);u=m=>{let v=Sr(m,".",2)[1];if(v){if(!l[v]){let Q=Nt(v,o?.hiddenFields);l[v]={hidden:Q,readonly:Q||Nt(v,o?.readonlyFields)}}return l[v]}}}return{path:e,elements:s,elementsByPath:c,profileUrl:n??r?.profileUrl,debugMode:i,getExtendedProps:u,accessPolicyResource:o}}function ma(r,e,t,n){let i=Object.create(null);if(t)for(let[s,a]of Object.entries(t.elementsByPath)){let c=Pe(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 ha(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 ya(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 Ci(r){return r.type!==void 0&&r.type.length>0}function ga(r,e,t,n){let i=Ce(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 Pi(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=>ga(o,s,i,i.typeSchema?.url??n)))return i.name}}var Ve=class{constructor(e,t,n){if(e.type===void 0)throw new Error("schema must include a type");this.rootSchema=e;let i=Br({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(!K(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=va(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);K(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(!Ci(o))continue;let s=o.type.find(a=>K(a.profile))?.profile?.[0];if(K(s)){let a=vn(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;K(s)&&(o=Br({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 va(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 Lt="__sliceName";function Tf(r,e){let t=new We(r,r.resourceType,"resource");return new Ve(e,t).crawlResource(),t.getDefaultValue()}function Sf(r,e,t){for(let[n,i]of Object.entries(e)){if(t===void 0||t===n){Bt(r,n,i,e);continue}let o=Pe(t,n);o!==void 0&&Bt(r,o,i,e)}return r}function Ef(r,e,t,n,i){let o=r??Object.create(null),[s,a]=Ta(e,"."),c=Object.create(null);Ft(c,o,a,t);let u=new We(c,s,"element");new Ve(i,u,n).crawlElement(t,a,s);let m=u.getDefaultValue();return Ut(m,a,t,n)}function bf(r,e,t,n){let i=new We([{[Lt]:e.name}],e.path,"element");return new Ve(n,i).crawlSlice(r,e,t),i.getDefaultValue()[0]}var We=class{constructor(e,t,n){this.schemaStack=[],this.valueStack=[],this.rootValue=de(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=Pe(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=Array.isArray(c)?c:[c];for(let l of u){xa(l,s,t,n.elements),Bt(l,s,t,n.elements);let m=Ut(l,s,t,n.elements);m!==void 0&&a.push(m)}}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=Pe(this.value.path,e);if(o===void 0)throw new Error(`Expected ${e} to be prefixed by ${this.value.path}`);for(let s of this.value.values){let a=Ut(s,o,t,n.elements);if(Array.isArray(a))for(let c=a.length-1;c>=0;c--){let u=a[c];K(u)||a.splice(c,1)}S(a)&&Ft(s,void 0,o,t)}}onEnterSlice(e,t,n){let i=this.value.values,o=[];for(let s of i){if(s===void 0)continue;if(!Array.isArray(s))throw new Error("Expected array value for sliced element");let a=this.getMatchingSliceValues(s,t,n);o.push(a)}this.valueStack.push({type:"slice",path:e,values:o})}getMatchingSliceValues(e,t,n){let i=[];for(let o of e)(o[Lt]??Pi(o,[t],n.discriminator,this.schema.url))===t.name&&i.push(o);for(let o=i.length;o<t.min;o++)if(xr(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];Lt in i&&delete i[Lt]}}getDefaultValue(){return this.rootValue}};function xa(r,e,t,n){let i=Ut(r,e,t,n);t.min>0&&i===void 0&&xr(t.type[0].code)&&(t.isArray?Ft(r,[Object.create(null)],e,t):Ft(r,Object.create(null),e,t))}function Ft(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]",w(o))}e===void 0?delete r[i]:r[i]=e}function Ut(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 l=n[i.slice(0,a+1).join(".")].type[0].code;c=c.replace("[x]",w(l))}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(b(o)){if(o[c]===void 0)return;o=o[c]}else return}return s}function Bt(r,e,t,n){if(!(t.fixed||t.pattern))return r;if(Array.isArray(r))return r.map(a=>Bt(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]",w(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]=wi(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 wi(r,e){if(Array.isArray(e)&&(Array.isArray(r)||r===void 0))return(r?.length??0)>0?r:de(e);if(b(e)&&(b(r)&&!Array.isArray(r)||r===void 0)){let t=de(r)??Object.create(null);for(let n of Object.keys(e))t[n]=wi(t[n],e[n]);return t}return r}function Ta(r,e){let t=r.lastIndexOf(e);if(t===-1)return["",r];let n=r.substring(0,t),i=r.substring(t+e.length);return[n,i]}function Ai(r,e){if(!r.group)throw new d(R("ConceptMap does not specify a mapping group","ConceptMap.group"));let t=Sa(e);if(be(t))throw new d(t);let n=ba(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 Sa(r){return r.code&&!r.coding&&!r.codeableConcept?r.system===void 0?R("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?Ea(r.codeableConcept):r.code||r.coding||r.codeableConcept?R("Ambiguous input: multiple source codings provided"):R("No source provided: 'code'+'system', 'coding', or 'codeableConcept' input parameter is required")}function Ea(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 ba(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=Ra(i,o)),s&&t.push(...s)}return t}function Ra(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 Ca=[...Ue,"->","<<",">>","=="];function Oi(r){return new ne(r,Fe,Ca).tokenize()}var Pa={"-":"disjoint","==":"equal"},qr=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 J?(e.transform=t.name,e.parameter=t.args?.map(Ii)):t instanceof U||t instanceof B?(e.transform="copy",e.parameter=[Ii(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=Pa[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(m=>m.source===i&&m.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 Ii(r){if(r instanceof B)return{valueId:r.name};if(r instanceof U)return wa(r);throw new Error(`Unknown parameter atom type: ${r.constructor.name} (${r.toString()})`)}function wa(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 Aa=Be().registerInfix("->",{precedence:y.Arrow}).registerInfix(";",{precedence:y.Semicolon});function Mf(r){let e=Aa.construct(Oi(r));return e.removeComments(),new qr(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 jf(r,e,t=new jr){return Oa({root:r,transformMaps:t},r,e)}function Oa(r,e,t){return Ia(r,e),Vi(r,e),Wr(r,e.group[0],t)}function Ia(r,e){let t=jt(r);if(t&&e.import)for(let n of e.import){let i=t.get("StructureMap",n);for(let o of i)Vi(r,o)}}function Vi(r,e){let t=jt(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)qt(r,n.name,{type:"StructureMapGroup",value:n})}function Wr(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 l=t[a++]??{type:u.type??"BackboneElement",value:{}};Ge(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)Di(c,u);return s}function Di(r,e){e.source&&Mi(r,e,0)}function Mi(r,e,t){let n=e.source[t];for(let i of Ma(r,n))qt(r,"_",i),n.variable&&qt(r,n.variable,i),t<e.source.length-1?Mi(r,e,t+1):ka(r,e)}function ka(r,e){if(!Va(r,e)){if(e.target)for(let t of e.target)_i(r,t);if(e.rule)for(let t of e.rule)Di(r,t);if(e.dependent)for(let t of e.dependent)Wa(r,t)}}function Va(r,e){if(!e.target||e.target.length!==1||e.target[0].transform||e.rule||e.dependent)return!1;let t=oe(r,"_");if(Array.isArray(t)&&(t=t[0]),!t)return!1;let n=Da(r,t);if(!n)return _i(r,{...e.target[0],transform:"copy",parameter:[{valueId:"_"}]}),!0;let i=e.target[0],o=oe(r,i.context),s=o.value[i.element],a=Li(o,i.element)||Array.isArray(s),c={root:r.root,parent:r,variables:{}},u=Wr(c,n,[t]);return Ni(r,i,o,u,a,s),!0}function Da(r,e){let t=r;for(;t;){if(t.variables)for(let n of Object.values(t.variables)){let i=$r(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 Ma(r,e){let t=oe(r,e.context);if(!t)return[];let n=e.element;if(!n)return[t];let i=A(n,[t]);if(!i||i.length===0)return[];if(e.condition&&!ki(t,{[e.variable]:i[0]},e.condition))return[];if(e.check&&!ki(t,{[e.variable]:i[0]},e.check))throw new Error("Check failed: "+e.check);return e.listMode&&(i=_a(e,i)),i}function ki(r,e,t){return N(A(t,[r],e))}function _a(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=oe(r,e.context);if(!t)throw new Error("Target not found: "+e.context);let n=t.value[e.element],i,o=Li(t,e.element)||Array.isArray(n);if(e.transform)switch(e.transform){case"append":i=Na(r,e);break;case"cast":i=La(r,e);break;case"cc":i=Fa(r,e);break;case"copy":i=Ua(r,e);break;case"create":i=Ba(r,e);break;case"evaluate":i=qa(r,e);break;case"translate":i=ja(r,e);break;case"truncate":i=$a(r,e);break;case"uuid":i=[{type:"string",value:xe()}];break;default:throw new Error(`Unsupported transform: ${e.transform}`)}else{let s=Fi(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)]}Ni(r,e,t,i,o,n)}function Ni(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&&qt(r,e.variable,Ga(n))}}function Li(r,e){return Fi(r,e)?.isArray}function Fi(r,e){return _e(r.type)?.elements?.[e]}function Na(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 La(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 Fa(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 Ua(r,e){return e.parameter.flatMap(t=>_(r,t))}function Ba(r,e){let t={};return e.parameter&&e.parameter.length>0&&(t.resourceType=_(r,e.parameter?.[0])?.[0]?.value),[g(t)]}function qa(r,e){let n=_(r,e.parameter?.[0])[0].value;return A(n,[],Ui(r))}function ja(r,e){let t=e.parameter.flatMap(c=>_(r,c)),n=t[0].value,i=t[1].value,s=jt(r)?.get("ConceptMap",i)[0];if(!s)throw new Error("ConceptMap not found: "+i);let a=Ai(s,{system:s.group?.[0]?.source,code:n});return[g(a.match?.[0]?.concept?.code)]}function $a(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 Wa(r,e){let t=oe(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=oe(r,s);if(!a)throw new Error("Dependent variable not found: "+s);i.push(a)}let o={root:r.root,parent:r,variables:{}};Wr(o,t.value,i)}function jt(r){if(r.transformMaps)return r.transformMaps;if(r.parent)return jt(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=$r(n),n.length===1&&n[0].type==="id"){let i=oe(r,n[0].value);if(!i)throw new Error("Variable not found: "+n[0].value);return $r(i)}return n}function oe(r,e){let t=r.variables?.[e];if(t)return t;if(r.parent)return oe(r.parent,e)}function Ui(r,e={}){if(r.parent&&Ui(r.parent,e),r.variables)for(let[t,n]of Object.entries(r.variables))e[t]=n,e["%"+t]=n;return e}function qt(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 $r(r){return Array.isArray(r)?r:[r]}function Ga(r){return r.length===1?r[0]:r}var Ha=[...Ue,"eq","ne","co"];function Bi(r){return new ne(r,Fe,Ha,{dateTimeLiterals:!0,symbolRegex:/[^\s\])]/}).tokenize()}var $t=class{constructor(e,t,n){this.path=e;this.operator=t;this.value=n}},Wt=class{constructor(e){this.child=e}},Gt=class{constructor(e,t,n){this.keyword=e;this.left=t;this.right=n}};var Qa={eq:"eq",ne:"ne",co:"contains",sw:void 0,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 Ka(r){let e=Qa[r];if(!e)throw new d(R("Invalid operator: "+r));return e}var Gr=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 Wt(this.parse()),this.parser.consume(")")):e=new $t(this.parser.consume("Symbol").value,Ka(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 Gt(t,e,this.parse())):e}},za=Be();function em(r){let e=za.construct(Bi(r));return e.removeComments(),new Gr(e).parse()}var se=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}},qi=class r{constructor(e,t=new se){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 He(["MSH",this.context.getMsh2(),o,s,n,i,Ya(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 se("\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 se){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]}get(e){return this.fields[e]}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 se){return new r(e.split(t.fieldSeparator).map(n=>De.parse(n,t)),t)}},De=class r{constructor(e,t=new se){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 se){return new r(e.split(t.repetitionSeparator).map(n=>n.split(t.componentSeparator)),t)}};function nm(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=Ja(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 Ja(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 Ya(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 Hr=(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))(Hr||{}),ji=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(`
|
|
44
|
-
`)}),this.write(JSON.stringify({level:Hr[e],timestamp:new Date().toISOString(),msg:this.prefix?`${this.prefix}${t}`:t,...n,...this.metadata})))}};function om(r){let e=Hr[r.toUpperCase()];if(e===void 0)throw new Error(`Invalid log level: ${r}`);return e}function um(r){if(!r)throw new d(h("Resource type is null"));if(!yn(r))throw new d(h("Unknown resource type"))}function $i(r,e,t){r===null?t.push(x(e,"Invalid null value")):Array.isArray(r)?Za(r,e,t):typeof r=="object"&&Xa(r,e,t)}function Za(r,e,t){for(let n=0;n<r.length;n++)r[n]===void 0?t.push(x(`${e}[${n}]`,"Invalid undefined value")):$i(r[n],`${e}[${n}]`,t)}function Xa(r,e,t){for(let[n,i]of Object.entries(r))$i(i,`${e}${e?".":""}${n}`,t)}function pm(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 hm(r,e){let t=[];for(let n of e)t.push(...ec(r,n));return t}function ec(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=A(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 Qr(r,n,t)}function Qr(r,e,t){let n=[],i;r.forEach?i=A(r.forEach,[e],t):r.forEachOrNull?i=A(r.forEachOrNull,[e],t):i=[e];for(let o of i){let s=[];for(let a of r.column??[]){let c=A(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=Qr(a,o,t);s.push(c)}if(r.unionAll){let a=[];for(let c of r.unionAll)for(let u of Qr(c,o,t))a.push(u);s.push(a)}n.push(...tc(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 tc(r){if(r.length===0)return[];let e=r[0];for(let t=1;t<r.length;t++)e=rc(e,r[t]);return e}function rc(r,e){let t=[];for(let n of r)for(let i of e)t.push(nc(n,i));return t}function nc(r,e){let t={};return Object.assign(t,r),Object.assign(t,e),t}export{Ds as AccessPolicyInteraction,Tt as AndAtom,V as ArithemticOperatorAtom,ye as AsAtom,C as BooleanInfixOperatorAtom,cc as CPT,je as ClientStorage,ft as ConcatAtom,mt as ContainsAtom,D as ContentType,Xs as DEFAULT_ACCEPT,fp as DEFAULT_MAX_SEARCH_COUNT,dp as DEFAULT_SEARCH_COUNT,re as DotAtom,pt as EmptySetAtom,yt as EqualsAtom,vt as EquivalentAtom,Dr as EventTarget,zd as ExternalSecretSystems,Mr as FHIRCAST_EVENT_NAMES,$s as FHIRCAST_EVENT_RESOURCES,_r as FHIRCAST_EVENT_VERSION_REQUIRED,js as FHIRCAST_RESOURCE_TYPES,$t as FhirFilterComparison,Gt as FhirFilterConnective,Wt as FhirFilterNegation,lt as FhirPathAtom,At as FhircastConnection,J as FunctionAtom,zr as HTTP_HL7_ORG,lc as HTTP_TERMINOLOGY_HL7_ORG,se as Hl7Context,De as Hl7Field,qi as Hl7Message,He as Hl7Segment,uc as ICD10,bt as ImpliesAtom,ht as InAtom,ve as IndexerAtom,Y as InfixOperatorAtom,ge as IsAtom,oc as LOINC,wt as LRUCache,U as LiteralAtom,Hr as LogLevel,ji as Logger,Qd as MEDPLUM_CLI_CLIENT_ID,Hd as MEDPLUM_VERSION,_t as MedplumClient,kt as MedplumKeyValueClient,Fr as MemoryStorage,gi as MockAsyncClientStorage,gt as NotEqualsAtom,xt as NotEquivalentAtom,ua as OAuthClientAssertionType,sa as OAuthGrantType,ca as OAuthTokenAuthMethod,aa as OAuthTokenType,d as OperationOutcomeError,ti as Operator,y as OperatorPrecedence,St as OrAtom,Ht as Parser,Ke as ParserBuilder,Qe as PrefixOperatorAtom,p as PropertyType,ac as RXNORM,M as ReadablePromise,Dt as ReconnectingWebSocket,sc as SNOMED,Jn as SearchParameterType,$e as SubscriptionEmitter,Mt as SubscriptionManager,B as SymbolAtom,ne as Tokenizer,jr as TransformMapCollection,H as TypedEventTarget,Kr as UCUM,dt as UnaryOperatorAtom,Oe as UnionAtom,_o as VALID_HOSTNAME_REGEX,Et as XorAtom,Tc as accepted,Yu as addProfileToResource,dc as allOk,we as append,Sf as applyDefaultValuesToElement,Ef as applyDefaultValuesToElementWithVisitor,Tf as applyDefaultValuesToResource,Bt as applyFixedOrPatternValue,Fn as arrayBufferToBase64,Ln as arrayBufferToHex,Ne as arrayify,zs as assert,pi as assertContextVersionOptional,Oc as assertOk,R as badRequest,f as booleanToTypedValue,Br as buildElementsContext,Go as buildTypeName,at as calculateAge,Mu as calculateAgeString,Op as canReadResourceType,Ip as canWriteResource,_s as canWriteResourceType,w as capitalize,$i as checkForNull,kc as compressElement,$ as concatUrls,Ai as conceptMapTranslate,Sc as conflict,Up as convertContainedResourcesToBundle,Ls as convertToTransactionBundle,Zc as crawlResource,Xc as crawlResourceAsync,Ze as crawlTypedValue,xn as crawlTypedValueAsync,on as createConstraintIssue,Lr as createFhircastMessagePayload,ae as createOperationOutcomeIssue,sn as createProcessingIssue,te as createReference,x as createStructureIssue,fc as created,oi as decodeBase64,de as deepClone,ee as deepEquals,Le as deepIncludes,si as encodeBase64,ai as encryptSHA256,Mo as ensureNoLeadingSlash,Er as ensureTrailingSlash,Ie as evalFhirPath,A as evalFhirPathTyped,hm as evalSqlOnFhir,Pn as fhirPathArrayEquals,yr as fhirPathArrayEquivalent,wn as fhirPathArrayNotEquals,hr as fhirPathEquals,po as fhirPathEquivalent,it as fhirPathIs,Cn as fhirPathNot,dr as fhirTypeToJsType,ju as findObservationInterval,$u as findObservationReferenceRange,Ku as findResourceByCode,Wn as flatMapFilter,hc as forbidden,rl as formatAddress,st as formatCodeableConcept,qo as formatCoding,ol as formatDate,br as formatDateTime,il as formatFamilyName,nl as formatGivenName,Ya as formatHl7DateTime,ut as formatHumanName,ul as formatMoney,jo as formatObservationValue,sl as formatPeriod,fe as formatQuantity,cl as formatRange,vp as formatSearchQuery,No as formatTime,al as formatTiming,xe as generateId,mn as getAllDataTypes,Nu as getAllQuestionnaireAnswers,vr as getCodeBySystem,Z as getDataType,Du as getDateProperty,bf as getDefaultValuesForNewSliceEntry,ho as getDisplayString,ot as getElementDefinition,zo as getElementDefinitionFromElements,ir as getElementDefinitionTypeName,op as getExpressionForResourceType,Zn as getExpressionsForResourceType,X as getExtension,Fu as getExtensionValue,vo as getIdentifier,Vu as getImageSrc,Ce as getNestedProperty,Pe as getPathDifference,Sl as getPathDisplayName,Ho as getPropertyDisplayName,$n as getQueryString,_u as getQuestionnaireAnswers,Vr as getRandomString,le as getReferenceString,vl as getResourceTypes,Tl as getSearchParameter,Ar as getSearchParameterDetails,xl as getSearchParameters,Ac as getStatus,P as getTypedPropertyValue,to as getTypedPropertyValueWithPath,uo as getTypedPropertyValueWithSchema,Pi as getValueSliceName,jn as getWebSocketUrl,L as globalSchema,yc as gone,gl as indexDefaultSearchParameters,Cr as indexSearchParameter,yl as indexSearchParameterBundle,ar as indexStructureDefinitionBundle,an as inflateBaseSchema,Hi as inflateElement,Be as initFhirPathParserBuilder,bc as isAccepted,wo as isCodeableConcept,Po as isCoding,di as isCompletedSubscriptionRequest,xr as isComplexTypeCode,Cc as isConflict,li as isContextVersionRequired,Ec as isCreated,hn as isDataTypeLoaded,An as isDateString,rt as isDateTimeString,S as isEmpty,Zs as isFhirCriteriaMet,Ws as isFhircastResourceType,Pc as isGone,fi as isJwt,Bu as isLowerCase,mi as isMedplumAccessToken,Rc as isNotFound,b as isObject,er as isOk,be as isOperationOutcome,On as isPeriod,K as isPopulated,Xe as isPrimitiveType,gn as isProfileLoaded,mo as isProfileResource,k as isQuantity,In as isQuantityEquivalent,ue as isReference,I as isResource,yn as isResourceType,ur as isResourceTypeSchema,Ci as isSliceDefinitionWithTypes,Co as isString,_n as isStringArray,Ao as isTextObject,Uu as isUUID,wc as isUnauthenticated,Rr as isValidDate,Ju as isValidHostname,qn as lazy,cr as loadDataType,Zu as mapByIdentifier,mr as matchDiscriminant,Ns as matchesAccessPolicy,Bn as matchesRange,Ct as matchesSearchRequest,vc as multipleMatches,Ri as normalizeCreateBinaryOptions,fa as normalizeCreatePdfOptions,tr as normalizeErrorString,Ye as normalizeOperationOutcome,en as notFound,mc as notModified,Wi as operationOutcomeIssueToString,nn as operationOutcomeToString,yp as parseCriteriaAsSearchRequest,Pr as parseFhirPath,em as parseFilterParameter,nm as parseHl7DateTime,It as parseJWTPayload,om as parseLogLevel,Mf as parseMappingLanguage,ds as parseParameter,ku as parseReference,hp as parseSearchDefinition,ie as parseSearchRequest,mp as parseSearchUrl,or as parseStructureDefinition,gp as parseXFhirQuery,Gu as preciseEquals,Qu as preciseGreaterThan,Do as preciseGreaterThanOrEquals,Hu as preciseLessThan,Vo as preciseLessThanOrEquals,Wu as preciseRound,gc as preconditionFailed,Vs as projectAdminResourceTypes,ks as protectedResourceTypes,nt as removeDuplicates,Xu as removeProfileFromResource,Us as reorderBundle,pe as resolveId,gd as resourceMatchesSubscriptionCriteria,kp as satisfiedAccessPolicy,Nr as serializeFhircastSubscriptionRequest,rn as serverError,qu as setCodeBySystem,Lu as setIdentifier,q as singleton,zu as singularize,Tr as sleep,ct as sortStringArray,Sr as splitN,Rt as splitSearchOnComma,pm as streamToBuffer,Mn as stringify,Kn as stringifyTypedValue,jf as structureMapTransform,jc as subsetResource,N as toJsBoolean,Cu as toPeriod,g as toTypedValue,xc as tooManyRequests,_e as tryGetDataType,hi as tryGetJwtExpiration,vn as tryGetProfile,Ee as unauthorized,Xt as unauthorizedTokenAudience,tn as unauthorizedTokenExpired,Ot as validateFhircastSubscriptionRequest,vu as validateResource,um as validateResourceType,xu as validateTypedValue,h as validationError,tt as validationRegexes};
|
|
43
|
+
}`.replace(/\s+/g," "),a=await this.graphql(s);cr(a.data.StructureDefinitionList);for(let c of a.data.SearchParameterList)Pr(c)})());return this.setCacheEntry(n,o),o}requestProfileSchema(t,n){if(!n?.expandProfile&&xn(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(),{});cr(c)}else{let a=await this.searchOne("StructureDefinition",{url:t,_sort:"-_lastUpdated"});if(!a){console.warn(`No StructureDefinition found for ${t}!`);return}ur(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.get(this.fhirUrl("Patient",t,"$everything"),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){return await this.searchOne(t.resourceType,n,i)??this.createResource(t,i)}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=wi(t,n,i,o),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=wi(t,n,i,o),c=s??(typeof n=="object"?n:{}),{data:u,contentType:l,filename:m,securityContext:v,onProgress:Q}=a,_e=this.fhirUrl("Binary");return m&&_e.searchParams.set("_filename",m),v?.reference&&this.setRequestHeader(c,"X-Security-Context",v.reference),Q?this.uploadwithProgress(_e,u,l,Q,c):this.post(_e,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 m=v=>{s?.signal?.removeEventListener("abort",l),v instanceof Error?c(v):a(v)};if(u.responseType="json",u.onabort=()=>m(new DOMException("Request aborted","AbortError")),u.onerror=()=>m(new Error("Request error")),o&&(u.upload.onprogress=v=>o(v),u.upload.onload=v=>o(v)),u.onload=()=>{u.status>=200&&u.status<300?m(u.response):m(new d(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),u.setRequestHeader("X-Medplum","extended"),s?.headers){let v=s.headers;for(let[Q,_e]of Object.entries(v))u.setRequestHeader(Q,_e)}u.send(n)})}async createPdf(t,n,i,o){if(!this.createPdfImpl)throw new Error("PDF creation not enabled");let s=ha(t,n,i,o),a=typeof n=="object"?n:{},{docDefinition:c,tableLayouts:u,fonts:l,...m}=s,v=await this.createPdfImpl(c,u,l),Q={...m,data:v,contentType:"application/pdf"};return this.createBinary(Q,a)}createComment(t,n,i){let o=this.getProfile(),s,a;return t.resourceType==="Encounter"&&(s=te(t),a=t.subject),t.resourceType==="ServiceRequest"&&(s=t.encounter,a=t.subject),t.resourceType==="Patient"&&(a=te(t)),this.createResource({resourceType:"Communication",status:"completed",basedOn:[te(t)],encounter:s,subject:a,sender:o?te(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,D.JSON,n)}graphql(t,n,i,o){return this.post(this.fhirUrl("$graphql"),{query:t,operationName:n,variables:i},D.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:le(n),body:i,contentType:o,waitForResponse:s},D.FHIR_JSON,a)}getActiveLogin(){return this.storage.getObject("activeLogin")}async setActiveLogin(t){(!this.sessionDetails?.profile||le(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}setAccessToken(t,n){this.accessToken=t,this.refreshToken=n,this.accessTokenExpires=vi(t),this.medplumServer=gi(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(aa)&&(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=te(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 Vt(this)),this.keyValueClient}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(rn);let u=await this.parseBody(s,c);if(s.status===200&&i.followRedirectOnOk||s.status===201&&i.followRedirectOnCreated){let l=await Ci(s,u);if(l)return this.request("GET",l,{...i,body:void 0})}if(s.status===202&&i.pollStatusOnAccepted){let m=await Ci(s,u)??o.statusUrl;if(m)return this.pollStatus(m,i,o)}if(s.status>=400)throw new d(Xe(u));return u}async parseBody(t,n){let i;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 Sr(o)}throw new Error("Unreachable")}logRequest(t,n){if(console.log(`> ${n.method} ${t}`),n.headers){let i=n.headers;for(let o of ut(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 Sr(s),i.pollCount++}return this.request("GET",t,o,i)}async executeAutoBatch(){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(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&&!rr(a.response.outcome)?s.reject(new d(a.response.outcome)):s.resolve(a?.resource)}}addFetchOptionsDefaults(t){this.setRequestHeader(t,"X-Medplum","extended"),this.setRequestHeader(t,"Accept",ta,!0),t.body&&this.setRequestHeader(t,"Content-Type",D.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(Ee)))}async startPkce(){let t=Dr();sessionStorage.setItem("pkceState",t);let n=Dr().slice(0,128);sessionStorage.setItem("codeVerifier",n);let i=await li(n),o=Bn(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??Ri()),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??Ri()),typeof sessionStorage<"u"){let o=sessionStorage.getItem("codeVerifier");o&&i.set("code_verifier",o)}return this.fetchTokens(i)}refreshIfExpired(t){return t===void 0&&(t=this.refreshGracePeriod),!this.refreshPromise&&this.accessTokenExpires!==void 0&&Date.now()>this.accessTokenExpires-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=ui(t+":"+n)}async fhircastSubscribe(t,n){if(!(typeof t=="string"&&t!==""))throw new d(h("Invalid topic provided. Topic must be a valid string."));if(!(typeof n=="object"&&Array.isArray(n)&&n.length>0))throw new d(h("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,Lr(i),D.FORM_URL_ENCODED))["hub.channel.endpoint"];if(!s)throw new Error("Invalid response!");return i.endpoint=s,i}async fhircastUnsubscribe(t){if(!It(t))throw new d(h("Invalid topic or subscriptionRequest. SubscriptionRequest must be an object."));if(!(t.endpoint&&typeof t.endpoint=="string"&&t.endpoint.startsWith("ws")))throw new d(h("Provided subscription request must have an endpoint in order to unsubscribe."));t.mode="unsubscribe",await this.post(this.fhircastHubUrl,Lr(t),D.FORM_URL_ENCODED)}fhircastConnect(t){return new Ot(t)}async fhircastPublish(t,n,i,o){return fi(n)?this.post(this.fhircastHubUrl,Fr(t,n,i,o),D.JSON):(mi(n),this.post(this.fhircastHubUrl,Fr(t,n,i),D.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":D.FORM_URL_ENCODED},body:t.toString(),credentials:"include"},i=n.headers;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(yi(n)){let i=kt(n);if(Date.now()>=i.exp*1e3)throw this.clearActiveLogin(),new d(nn);if(i.cid){if(i.cid!==this.clientId)throw this.clearActiveLogin(),new d(tr)}else if(this.clientId&&i.client_id!==this.clientId)throw this.clearActiveLogin(),new d(tr)}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 _t(this,Wn(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 da(){if(!globalThis.fetch)throw new Error("Fetch not available in this environment");return globalThis.fetch.bind(globalThis)}function Ri(){return typeof window>"u"?"":window.location.protocol+"//"+window.location.host+"/"}async function Ci(r,e){let t=r.headers.get("content-location");if(t)return t;let n=r.headers.get("location");if(n)return n;if(be(e)&&e.issue?.[0]?.diagnostics)return e.issue[0].diagnostics}function Pi(r){let e=r.entry?.map(t=>t.resource)??[];return Object.assign(e,{bundle:r})}function fa(r){return R(r)&&"data"in r&&"contentType"in r}function wi(r,e,t,n){return fa(r)?r:{data:r,filename:e,contentType:t,onProgress:n}}function ma(r){return R(r)&&"docDefinition"in r}function ha(r,e,t,n){return ma(r)?r:{docDefinition:r,filename:e,tableLayouts:t,fonts:n}}var rf={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=ya(e,t,r,!!i),a=Er(e,".",2)[1];s=ga(s,o,a),s=va(s,o,a);let c=Object.create(null);for(let[l,m]of Object.entries(s))c[e+"."+l]=m;let u;if(r&&!r.isDefaultContext)u=r.getExtendedProps;else{let l=Object.create(null);u=m=>{let v=Er(m,".",2)[1];if(v){if(!l[v]){let Q=Lt(v,o?.hiddenFields);l[v]={hidden:Q,readonly:Q||Lt(v,o?.readonlyFields)}}return l[v]}}}return{path:e,elements:s,elementsByPath:c,profileUrl:n??r?.profileUrl,debugMode:i,getExtendedProps:u,accessPolicyResource:o}}function ya(r,e,t,n){let i=Object.create(null);if(t)for(let[s,a]of Object.entries(t.elementsByPath)){let c=we(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 ga(r,e,t){if(!e?.hiddenFields?.length)return r;let n=t?t+".":"";return Object.fromEntries(Object.entries(r).filter(([i])=>!Lt(n+i,e.hiddenFields)))}function va(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))Lt(i+o,e.readonlyFields)?n[o]={...s,readonly:!0}:n[o]=s;return n}function Lt(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 Ai(r){return r.type!==void 0&&r.type.length>0}function xa(r,e,t,n){let i=Ce(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 Oi(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=>xa(o,s,i,i.typeSchema?.url??n)))return i.name}}var De=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(!K(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=Ta(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);K(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(!Ai(o))continue;let s=o.type.find(a=>K(a.profile))?.profile?.[0];if(K(s)){let a=Tn(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;K(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 Ta(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 wf(r,e){let t=new He(r,r.resourceType,"resource");return new De(e,t).crawlResource(),t.getDefaultValue()}function Af(r,e,t){for(let[n,i]of Object.entries(e)){if(t===void 0||t===n){qt(r,n,i,e);continue}let o=we(t,n);o!==void 0&&qt(r,o,i,e)}return r}function Of(r,e,t,n,i){let o=r??Object.create(null),[s,a]=Ea(e,"."),c=Object.create(null);Ut(c,o,a,t);let u=new He(c,s,"element");new De(i,u,n).crawlElement(t,a,s);let m=u.getDefaultValue();return Bt(m,a,t,n)}function If(r,e,t,n){let i=new He([{[Ft]:e.name}],e.path,"element");return new De(n,i).crawlSlice(r,e,t),i.getDefaultValue()[0]}var He=class{constructor(e,t,n){this.schemaStack=[],this.valueStack=[],this.rootValue=de(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=we(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=Array.isArray(c)?c:[c];for(let l of u){Sa(l,s,t,n.elements),qt(l,s,t,n.elements);let m=Bt(l,s,t,n.elements);m!==void 0&&a.push(m)}}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=we(this.value.path,e);if(o===void 0)throw new Error(`Expected ${e} to be prefixed by ${this.value.path}`);for(let s of this.value.values){let a=Bt(s,o,t,n.elements);if(Array.isArray(a))for(let c=a.length-1;c>=0;c--){let u=a[c];K(u)||a.splice(c,1)}E(a)&&Ut(s,void 0,o,t)}}onEnterSlice(e,t,n){let i=this.value.values,o=[];for(let s of i){if(s===void 0)continue;if(!Array.isArray(s))throw new Error("Expected array value for sliced element");let a=this.getMatchingSliceValues(s,t,n);o.push(a)}this.valueStack.push({type:"slice",path:e,values:o})}getMatchingSliceValues(e,t,n){let i=[];for(let o of e)(o[Ft]??Oi(o,[t],n.discriminator,this.schema.url))===t.name&&i.push(o);for(let o=i.length;o<t.min;o++)if(Tr(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 Sa(r,e,t,n){let i=Bt(r,e,t,n);t.min>0&&i===void 0&&Tr(t.type[0].code)&&(t.isArray?Ut(r,[Object.create(null)],e,t):Ut(r,Object.create(null),e,t))}function Ut(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]",w(o))}e===void 0?delete r[i]:r[i]=e}function Bt(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 l=n[i.slice(0,a+1).join(".")].type[0].code;c=c.replace("[x]",w(l))}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 qt(r,e,t,n){if(!(t.fixed||t.pattern))return r;if(Array.isArray(r))return r.map(a=>qt(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]",w(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]=Ii(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 Ii(r,e){if(Array.isArray(e)&&(Array.isArray(r)||r===void 0))return(r?.length??0)>0?r:de(e);if(R(e)&&(R(r)&&!Array.isArray(r)||r===void 0)){let t=de(r)??Object.create(null);for(let n of Object.keys(e))t[n]=Ii(t[n],e[n]);return t}return r}function Ea(r,e){let t=r.lastIndexOf(e);if(t===-1)return["",r];let n=r.substring(0,t),i=r.substring(t+e.length);return[n,i]}function ki(r,e){if(!r.group)throw new d(S("ConceptMap does not specify a mapping group","ConceptMap.group"));let t=ba(e);if(be(t))throw new d(t);let n=Ca(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 ba(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?Ra(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 Ra(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 Ca(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=Pa(i,o)),s&&t.push(...s)}return t}function Pa(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 wa=[...qe,"->","<<",">>","=="];function Vi(r){return new ne(r,Be,wa).tokenize()}var Aa={"-":"disjoint","==":"equal"},jr=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 J?(e.transform=t.name,e.parameter=t.args?.map(Di)):t instanceof U||t instanceof q?(e.transform="copy",e.parameter=[Di(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=Aa[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(m=>m.source===i&&m.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 Di(r){if(r instanceof q)return{valueId:r.name};if(r instanceof U)return Oa(r);throw new Error(`Unknown parameter atom type: ${r.constructor.name} (${r.toString()})`)}function Oa(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 Ia=je().registerInfix("->",{precedence:y.Arrow}).registerInfix(";",{precedence:y.Semicolon});function qf(r){let e=Ia.construct(Vi(r));return e.removeComments(),new jr(e).parse()}var $r=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 zf(r,e,t=new $r){return ka({root:r,transformMaps:t},r,e)}function ka(r,e,t){return Va(r,e),_i(r,e),Gr(r,e.group[0],t)}function Va(r,e){let t=$t(r);if(t&&e.import)for(let n of e.import){let i=t.get("StructureMap",n);for(let o of i)_i(r,o)}}function _i(r,e){let t=$t(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)jt(r,n.name,{type:"StructureMapGroup",value:n})}function Gr(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)Ni(c,u);return s}function Ni(r,e){e.source&&Li(r,e,0)}function Li(r,e,t){let n=e.source[t];for(let i of Na(r,n))jt(r,"_",i),n.variable&&jt(r,n.variable,i),t<e.source.length-1?Li(r,e,t+1):Da(r,e)}function Da(r,e){if(!Ma(r,e)){if(e.target)for(let t of e.target)Fi(r,t);if(e.rule)for(let t of e.rule)Ni(r,t);if(e.dependent)for(let t of e.dependent)Ha(r,t)}}function Ma(r,e){if(!e.target||e.target.length!==1||e.target[0].transform||e.rule||e.dependent)return!1;let t=oe(r,"_");if(Array.isArray(t)&&(t=t[0]),!t)return!1;let n=_a(r,t);if(!n)return Fi(r,{...e.target[0],transform:"copy",parameter:[{valueId:"_"}]}),!0;let i=e.target[0],o=oe(r,i.context),s=o.value[i.element],a=Bi(o,i.element)||Array.isArray(s),c={root:r.root,parent:r,variables:{}},u=Gr(c,n,[t]);return Ui(r,i,o,u,a,s),!0}function _a(r,e){let t=r;for(;t;){if(t.variables)for(let n of Object.values(t.variables)){let i=Wr(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 Na(r,e){let t=oe(r,e.context);if(!t)return[];let n=e.element;if(!n)return[t];let i=A(n,[t]);if(!i||i.length===0)return[];if(e.condition&&!Mi(t,{[e.variable]:i[0]},e.condition))return[];if(e.check&&!Mi(t,{[e.variable]:i[0]},e.check))throw new Error("Check failed: "+e.check);return e.listMode&&(i=La(e,i)),i}function Mi(r,e,t){return N(A(t,[r],e))}function La(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 Fi(r,e){let t=oe(r,e.context);if(!t)throw new Error("Target not found: "+e.context);let n=t.value[e.element],i,o=Bi(t,e.element)||Array.isArray(n);if(e.transform)switch(e.transform){case"append":i=Fa(r,e);break;case"cast":i=Ua(r,e);break;case"cc":i=Ba(r,e);break;case"copy":i=qa(r,e);break;case"create":i=ja(r,e);break;case"evaluate":i=$a(r,e);break;case"translate":i=Wa(r,e);break;case"truncate":i=Ga(r,e);break;case"uuid":i=[{type:"string",value:xe()}];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:{}}:g({})]:i=[a?{type:a,value:n}:g(n)]}Ui(r,e,t,i,o,n)}function Ui(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&&jt(r,e.variable,Qa(n))}}function Bi(r,e){return qi(r,e)?.isArray}function qi(r,e){return Le(r.type)?.elements?.[e]}function Fa(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 Ua(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 Ba(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 qa(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 $a(r,e){let n=_(r,e.parameter?.[0])[0].value;return A(n,[],ji(r))}function Wa(r,e){let t=e.parameter.flatMap(c=>_(r,c)),n=t[0].value,i=t[1].value,s=$t(r)?.get("ConceptMap",i)[0];if(!s)throw new Error("ConceptMap not found: "+i);let a=ki(s,{system:s.group?.[0]?.source,code:n});return[g(a.match?.[0]?.concept?.code)]}function Ga(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 Ha(r,e){let t=oe(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=oe(r,s);if(!a)throw new Error("Dependent variable not found: "+s);i.push(a)}let o={root:r.root,parent:r,variables:{}};Gr(o,t.value,i)}function $t(r){if(r.transformMaps)return r.transformMaps;if(r.parent)return $t(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=Wr(n),n.length===1&&n[0].type==="id"){let i=oe(r,n[0].value);if(!i)throw new Error("Variable not found: "+n[0].value);return Wr(i)}return n}function oe(r,e){let t=r.variables?.[e];if(t)return t;if(r.parent)return oe(r.parent,e)}function ji(r,e={}){if(r.parent&&ji(r.parent,e),r.variables)for(let[t,n]of Object.entries(r.variables))e[t]=n,e["%"+t]=n;return e}function jt(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 Wr(r){return Array.isArray(r)?r:[r]}function Qa(r){return r.length===1?r[0]:r}var Ka=[...qe,"eq","ne","co"];function $i(r){return new ne(r,Be,Ka,{dateTimeLiterals:!0,symbolRegex:/[^\s\])]/}).tokenize()}var Wt=class{constructor(e,t,n){this.path=e;this.operator=t;this.value=n}},Gt=class{constructor(e){this.child=e}},Ht=class{constructor(e,t,n){this.keyword=e;this.left=t;this.right=n}};var za={eq:"eq",ne:"ne",co:"contains",sw:void 0,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 Ja(r){let e=za[r];if(!e)throw new d(S("Invalid operator: "+r));return e}var Hr=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 Gt(this.parse()),this.parser.consume(")")):e=new Wt(this.parser.consume("Symbol").value,Ja(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 Ht(t,e,this.parse())):e}},Ya=je();function am(r){let e=Ya.construct($i(r));return e.removeComments(),new Hr(e).parse()}var se=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}},Wi=class r{constructor(e,t=new se){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 Ke(["MSH",this.context.getMsh2(),o,s,n,i,Xa(e),"",this.buildAckMessageType(t),e.getTime().toString(),"P",c],this.context),new Ke(["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 se("\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=>Ke.parse(n,t)),t)}},Ke=class r{constructor(e,t=new se){this.context=t,Ln(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 se){return new r(e.split(t.fieldSeparator).map(n=>Me.parse(n,t)),t)}},Me=class r{constructor(e,t=new se){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 se){return new r(e.split(t.repetitionSeparator).map(n=>n.split(t.componentSeparator)),t)}};function lm(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=Za(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 Za(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 Xa(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 Qr=(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))(Qr||{}),Gi=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(`
|
|
44
|
+
`)}),this.write(JSON.stringify({level:Qr[e],timestamp:new Date().toISOString(),msg:this.prefix?`${this.prefix}${t}`:t,...n,...this.metadata})))}};function dm(r){let e=Qr[r.toUpperCase()];if(e===void 0)throw new Error(`Invalid log level: ${r}`);return e}function ym(r){if(!r)throw new d(h("Resource type is null"));if(!vn(r))throw new d(h("Unknown resource type"))}function Hi(r,e,t){r===null?t.push(x(e,"Invalid null value")):Array.isArray(r)?ec(r,e,t):typeof r=="object"&&tc(r,e,t)}function ec(r,e,t){for(let n=0;n<r.length;n++)r[n]===void 0?t.push(x(`${e}[${n}]`,"Invalid undefined value")):Hi(r[n],`${e}[${n}]`,t)}function tc(r,e,t){for(let[n,i]of Object.entries(r))Hi(i,`${e}${e?".":""}${n}`,t)}function vm(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 Em(r,e){let t=[];for(let n of e)t.push(...rc(r,n));return t}function rc(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=A(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 Kr(r,n,t)}function Kr(r,e,t){let n=[],i;r.forEach?i=A(r.forEach,[e],t):r.forEachOrNull?i=A(r.forEachOrNull,[e],t):i=[e];for(let o of i){let s=[];for(let a of r.column??[]){let c=A(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=Kr(a,o,t);s.push(c)}if(r.unionAll){let a=[];for(let c of r.unionAll)for(let u of Kr(c,o,t))a.push(u);s.push(a)}n.push(...nc(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 nc(r){if(r.length===0)return[];let e=r[0];for(let t=1;t<r.length;t++)e=ic(e,r[t]);return e}function ic(r,e){let t=[];for(let n of r)for(let i of e)t.push(oc(n,i));return t}function oc(r,e){let t={};return Object.assign(t,r),Object.assign(t,e),t}var sc="https://api.github.com/repos/medplum/medplum/releases",Qt=new Map;function Cm(){Qt.clear()}function ac(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 Qi(r){let e=Qt.get(r??"latest");if(!e){let t=r?`tags/v${r}`:"latest",n=await fetch(`${sc}/${t}`);if(n.status!==200){let o;try{o=(await n.json()).message}catch(s){console.error(`Failed to parse message from body: ${Ne(s)}`)}throw new Error(`Received status code ${n.status} while fetching manifest for version '${r??"latest"}'. Message: ${o}`)}let i=await n.json();ac(i),e=i,Qt.set(r??"latest",e),r||Qt.set(e.tag_name.slice(1),e)}return e}function cc(r){return/^\d+\.\d+\.\d+$/.test(r)}async function Pm(r){if(!cc(r))return!1;try{await Qi(r)}catch{return!1}return!0}async function wm(){let r=await Qi();if(!r.tag_name.startsWith("v"))throw new Error(`Invalid release name found. Release tag '${r.tag_name}' did not start with 'v'`);return r.tag_name.slice(1)}export{_s as AccessPolicyInteraction,St as AndAtom,V as ArithemticOperatorAtom,ye as AsAtom,C as BooleanInfixOperatorAtom,fc as CPT,We as ClientStorage,mt as ConcatAtom,ht as ContainsAtom,D as ContentType,ta as DEFAULT_ACCEPT,Tp as DEFAULT_MAX_SEARCH_COUNT,xp as DEFAULT_SEARCH_COUNT,re as DotAtom,dt as EmptySetAtom,gt as EqualsAtom,xt as EquivalentAtom,Mr as EventTarget,rf as ExternalSecretSystems,_r as FHIRCAST_EVENT_NAMES,Gs as FHIRCAST_EVENT_RESOURCES,Nr as FHIRCAST_EVENT_VERSION_REQUIRED,Ws as FHIRCAST_RESOURCE_TYPES,Wt as FhirFilterComparison,Ht as FhirFilterConnective,Gt as FhirFilterNegation,pt as FhirPathAtom,Ot as FhircastConnection,J as FunctionAtom,sc as GITHUB_RELEASES_URL,Jr as HTTP_HL7_ORG,hc as HTTP_TERMINOLOGY_HL7_ORG,se as Hl7Context,Me as Hl7Field,Wi as Hl7Message,Ke as Hl7Segment,mc as ICD10,Rt as ImpliesAtom,yt as InAtom,ve as IndexerAtom,Y as InfixOperatorAtom,ge as IsAtom,lc as LOINC,At as LRUCache,U as LiteralAtom,Qr as LogLevel,Gi as Logger,ef as MEDPLUM_CLI_CLIENT_ID,Xd as MEDPLUM_VERSION,Nt as MedplumClient,Vt as MedplumKeyValueClient,Ur as MemoryStorage,Ti as MockAsyncClientStorage,vt as NotEqualsAtom,Tt as NotEquivalentAtom,pa as OAuthClientAssertionType,ca as OAuthGrantType,la as OAuthTokenAuthMethod,ua as OAuthTokenType,d as OperationOutcomeError,ii as Operator,y as OperatorPrecedence,Et as OrAtom,Kt as Parser,Je as ParserBuilder,ze as PrefixOperatorAtom,p as PropertyType,dc as RXNORM,M as ReadablePromise,Mt as ReconnectingWebSocket,pc as SNOMED,Zn as SearchParameterType,Ge as SubscriptionEmitter,_t as SubscriptionManager,q as SymbolAtom,ne as Tokenizer,$r as TransformMapCollection,H as TypedEventTarget,zr as UCUM,ft as UnaryOperatorAtom,Ie as UnionAtom,Uo as VALID_HOSTNAME_REGEX,bt as XorAtom,Cc as accepted,nl as addProfileToResource,gc as allOk,Ae as append,Af as applyDefaultValuesToElement,Of as applyDefaultValuesToElementWithVisitor,wf as applyDefaultValuesToResource,qt as applyFixedOrPatternValue,Bn as arrayBufferToBase64,Un as arrayBufferToHex,Fe as arrayify,Ys as assert,mi as assertContextVersionOptional,_c as assertOk,ac as assertReleaseManifest,S as badRequest,f as booleanToTypedValue,qr as buildElementsContext,zo as buildTypeName,ct as calculateAge,Bu as calculateAgeString,Np as canReadResourceType,Lp as canWriteResource,Ls as canWriteResourceType,w as capitalize,Hi as checkForNull,Pm as checkIfValidMedplumVersion,Cm as clearReleaseCache,Lc as compressElement,B as concatUrls,ki as conceptMapTranslate,Pc as conflict,Hp as convertContainedResourcesToBundle,Us as convertToTransactionBundle,iu as crawlResource,ou as crawlResourceAsync,et as crawlTypedValue,Sn as crawlTypedValueAsync,an as createConstraintIssue,Fr as createFhircastMessagePayload,ae as createOperationOutcomeIssue,cn as createProcessingIssue,te as createReference,x as createStructureIssue,vc as created,ci as decodeBase64,de as deepClone,ee as deepEquals,Ue as deepIncludes,ui as encodeBase64,li as encryptSHA256,Fo as ensureNoLeadingSlash,br as ensureTrailingSlash,ke as evalFhirPath,A as evalFhirPathTyped,Em as evalSqlOnFhir,wm as fetchLatestVersionString,Qi as fetchVersionManifest,An as fhirPathArrayEquals,gr as fhirPathArrayEquivalent,On as fhirPathArrayNotEquals,yr as fhirPathEquals,yo as fhirPathEquivalent,ot as fhirPathIs,wn as fhirPathNot,fr as fhirTypeToJsType,Ku as findObservationInterval,zu as findObservationReferenceRange,el as findResourceByCode,Hn as flatMapFilter,Tc as forbidden,cl as formatAddress,at as formatCodeableConcept,Go as formatCoding,pl as formatDate,Rr as formatDateTime,ll as formatFamilyName,ul as formatGivenName,Xa as formatHl7DateTime,lt as formatHumanName,hl as formatMoney,Ho as formatObservationValue,dl as formatPeriod,fe as formatQuantity,ml as formatRange,Cp as formatSearchQuery,Bo as formatTime,fl as formatTiming,xe as generateId,yn as getAllDataTypes,ju as getAllQuestionnaireAnswers,xr as getCodeBySystem,Z as getDataType,Uu as getDateProperty,If as getDefaultValuesForNewSliceEntry,xo as getDisplayString,st as getElementDefinition,Xo as getElementDefinitionFromElements,or as getElementDefinitionTypeName,pp as getExpressionForResourceType,ei as getExpressionsForResourceType,X as getExtension,Wu as getExtensionValue,Eo as getIdentifier,Fu as getImageSrc,Ce as getNestedProperty,we as getPathDifference,wl as getPathDisplayName,Jo as getPropertyDisplayName,Gn as getQueryString,qu as getQuestionnaireAnswers,Dr as getRandomString,le as getReferenceString,Rl as getResourceTypes,Pl as getSearchParameter,Or as getSearchParameterDetails,Cl as getSearchParameters,Mc as getStatus,P as getTypedPropertyValue,oo as getTypedPropertyValueWithPath,mo as getTypedPropertyValueWithSchema,Oi as getValueSliceName,Wn as getWebSocketUrl,L as globalSchema,Sc as gone,bl as indexDefaultSearchParameters,Pr as indexSearchParameter,El as indexSearchParameterBundle,cr as indexStructureDefinitionBundle,un as inflateBaseSchema,Ji as inflateElement,je as initFhirPathParserBuilder,Oc as isAccepted,ko as isCodeableConcept,Io as isCoding,hi as isCompletedSubscriptionRequest,Tr as isComplexTypeCode,kc as isConflict,fi as isContextVersionRequired,Ac as isCreated,gn as isDataTypeLoaded,In as isDateString,Pe as isDateTimeString,E as isEmpty,ea as isFhirCriteriaMet,Hs as isFhircastResourceType,Vc as isGone,yi as isJwt,Hu as isLowerCase,gi as isMedplumAccessToken,Ic as isNotFound,R as isObject,rr as isOk,be as isOperationOutcome,kn as isPeriod,K as isPopulated,tt as isPrimitiveType,xn as isProfileLoaded,vo as isProfileResource,k as isQuantity,Vn as isQuantityEquivalent,ue as isReference,I as isResource,vn as isResourceType,lr as isResourceTypeSchema,Ai as isSliceDefinitionWithTypes,Oo as isString,Ln as isStringArray,Vo as isTextObject,Gu as isUUID,Dc as isUnauthenticated,Cr as isValidDate,rl as isValidHostname,cc as isValidMedplumSemver,$n as lazy,ur as loadDataType,il as mapByIdentifier,hr as matchDiscriminant,Fs as matchesAccessPolicy,jn as matchesRange,Pt as matchesSearchRequest,bc as multipleMatches,wi as normalizeCreateBinaryOptions,ha as normalizeCreatePdfOptions,Ne as normalizeErrorString,Xe as normalizeOperationOutcome,rn as notFound,xc as notModified,Ki as operationOutcomeIssueToString,sn as operationOutcomeToString,bp as parseCriteriaAsSearchRequest,wr as parseFhirPath,am as parseFilterParameter,lm as parseHl7DateTime,kt as parseJWTPayload,dm as parseLogLevel,qf as parseMappingLanguage,ys as parseParameter,Lu as parseReference,Ep as parseSearchDefinition,ie as parseSearchRequest,Sp as parseSearchUrl,sr as parseStructureDefinition,Rp as parseXFhirQuery,Yu as preciseEquals,Xu as preciseGreaterThan,Lo as preciseGreaterThanOrEquals,Zu as preciseLessThan,No as preciseLessThanOrEquals,Ju as preciseRound,Ec as preconditionFailed,Ms as projectAdminResourceTypes,Ds as protectedResourceTypes,it as removeDuplicates,ol as removeProfileFromResource,qs as reorderBundle,pe as resolveId,Rd as resourceMatchesSubscriptionCriteria,Fp as satisfiedAccessPolicy,Lr as serializeFhircastSubscriptionRequest,on as serverError,wc as serverTimeout,Qu as setCodeBySystem,$u as setIdentifier,j as singleton,tl as singularize,Sr as sleep,ut as sortStringArray,Er as splitN,Ct as splitSearchOnComma,vm as streamToBuffer,Nn as stringify,Jn as stringifyTypedValue,zf as structureMapTransform,Kc as subsetResource,N as toJsBoolean,ku as toPeriod,g as toTypedValue,Rc as tooManyRequests,Le as tryGetDataType,vi as tryGetJwtExpiration,Tn as tryGetProfile,Ee as unauthorized,tr as unauthorizedTokenAudience,nn as unauthorizedTokenExpired,It as validateFhircastSubscriptionRequest,Ru as validateResource,ym as validateResourceType,Cu as validateTypedValue,h as validationError,nt as validationRegexes};
|
|
45
45
|
/*!
|
|
46
46
|
* Reconnecting WebSocket
|
|
47
47
|
* by Pedro Ladaria <pedro.ladaria@gmail.com>
|