@medplum/core 4.4.0 → 4.4.2
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/LICENSE.txt +176 -0
- package/dist/cjs/index.cjs +8 -8
- package/dist/cjs/index.cjs.map +4 -4
- package/dist/cjs/index.d.ts +115 -61
- package/dist/esm/index.d.ts +115 -61
- package/dist/esm/index.mjs +8 -8
- package/dist/esm/index.mjs.map +4 -4
- package/package.json +3 -3
package/dist/esm/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
var it=class{constructor(e,t){this.operator=e,this.child=t}toString(){return`${this.operator}(${this.child.toString()})`}},te=class{constructor(e,t,n){this.operator=e,this.left=t,this.right=n}toString(){return`(${this.left.toString()} ${this.operator} ${this.right.toString()})`}},ot=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 or(e,this.prefixParselets,this.infixParselets)}},or=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 we=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 dn="http://unitsofmeasure.org",Uc="http://loinc.org",Bc="http://snomed.info/sct",Wc="http://www.nlm.nih.gov/research/umls/rxnorm",qc="http://www.ama-assn.org/go/cpt",jc="http://hl7.org/fhir/sid/icd-10",$c="http://hl7.org/fhir/sid/ndc",pn="http://hl7.org",Gc="http://terminology.hl7.org";var sr="ok",st="created",ar="gone",cr="not-modified",ur="found",lr="not-found",dr="conflict",pr="unauthorized",fn="forbidden",hn="precondition-failed",mn="multiple-matches",yn="too-many-requests",at="accepted",gn="server-timeout",xn="business-rule",Qc={resourceType:"OperationOutcome",id:sr,issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},zc={resourceType:"OperationOutcome",id:st,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},Jc={resourceType:"OperationOutcome",id:cr,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},vn={resourceType:"OperationOutcome",id:lr,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},Ae={resourceType:"OperationOutcome",id:pr,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},Tn={...Ae,issue:[...Ae.issue,{severity:"error",code:"expired",details:{text:"Token expired"}}]},fr={...Ae,issue:[...Ae.issue,{severity:"error",code:"invalid",details:{text:"Token not issued for this audience"}}]},Kc={resourceType:"OperationOutcome",id:fn,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},Xc={resourceType:"OperationOutcome",id:ar,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},Yc={resourceType:"OperationOutcome",id:hn,issue:[{severity:"error",code:"processing",details:{text:"Precondition Failed"}}]},Zc={resourceType:"OperationOutcome",id:mn,issue:[{severity:"error",code:"multiple-matches",details:{text:"Multiple resources found matching condition"}}]},eu={resourceType:"OperationOutcome",id:yn,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function tu(r){return{resourceType:"OperationOutcome",id:at,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:r}]}}function b(r,e){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:r},...e?{expression:[e]}:void 0}]}}function ru(r,e){return{resourceType:"OperationOutcome",id:dr,issue:[{severity:"error",code:"conflict",details:{coding:e?[{code:e}]:void 0,text:r}}]}}function y(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"structure",details:{text:r}}]}}function Sn(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:r.toString()}]}}function nu(r){return{resourceType:"OperationOutcome",id:gn,issue:[{severity:"error",code:"timeout",details:{text:r??"Server timeout"}}]}}function iu(r){let e=r.toString();return{resourceType:"OperationOutcome",id:ur,issue:[{severity:"information",code:"informational",details:{coding:[{system:"urn:ietf:rfc:3986",code:e}],text:"Redirect to "+e}}]}}function ou(r,e){return{resourceType:"OperationOutcome",id:xn,issue:[{severity:"error",code:"business-rule",details:{id:r,text:e}}]}}function fo(r){return!r||typeof r!="object"?!1:r instanceof Error||typeof DOMException<"u"&&r instanceof DOMException?!0:Object.prototype.toString.call(r)==="[object Error]"}function Oe(r){return typeof r=="object"&&r!==null&&r.resourceType==="OperationOutcome"}function hr(r){return r.id===sr||r.id===st||r.id===cr||r.id===at}function su(r){return r.id===st}function au(r){return r.id===at}function cu(r){return r.id===ur}function uu(r){return r.id===lr}function lu(r){return r.id===dr}function du(r){return r.id===ar}function pu(r){return r.id===pr}function fu(r){switch(r.id){case sr:return 200;case st:return 201;case at:return 202;case ur:return 302;case cr:return 304;case pr:return 401;case fn:return 403;case lr:return 404;case dr:return 409;case ar:return 410;case hn:case mn:return 412;case xn:return 422;case yn:return 429;case gn:return 504;default:return r.issue?.[0]?.code==="exception"?500:400}}function hu(r,e){if(!hr(r)||e===void 0)throw new p(r)}var p=class extends Error{constructor(e,t){super(bn(e)),this.outcome=e,this.cause=t}};function ct(r){return r instanceof p?r.outcome:Oe(r)?r:b(Ie(r))}function Ie(r){return r?typeof r=="string"?r:fo(r)?r.message:Oe(r)?bn(r):typeof r=="object"&&"code"in r&&typeof r.code=="string"?r.code:JSON.stringify(r):"Unknown error"}function bn(r){let e=r.issue?.map(ho)??[];return e.length>0?e.join("; "):"Unknown error"}function ho(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 pe(r,e,t,n,i){let o={severity:r,code:e,details:{text:t},expression:[n]};return i&&(o.diagnostics=JSON.stringify(i)),o}function T(r,e){return pe("error","structure",e,r)}function En(r,e){return pe("error","invariant",`Constraint ${e.key} not met: ${e.description}`,r,{fhirpath:e.expression})}function Rn(r,e,t,n){return pe("error","processing",e,r,{...n,error:t})}var mo={"http://hl7.org/fhirpath/System.String":"string"};function yu(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:mo[t.code]??t.code})),e}function yo(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 Cn(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,yo(i,o)])),constraints:[],innerTypes:[]};return e}var Pn={Element:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]}}},BackboneElement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]}}},Address:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"code"}]},text:{type:[{code:"string"}]},line:{max:9007199254740991,type:[{code:"string"}]},city:{type:[{code:"string"}]},district:{type:[{code:"string"}]},state:{type:[{code:"string"}]},postalCode:{type:[{code:"string"}]},country:{type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Age:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Annotation:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"author[x]":{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Organization"]},{code:"string"}]},time:{type:[{code:"dateTime"}]},text:{min:1,type:[{code:"markdown"}]}}},Attachment:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},contentType:{type:[{code:"code"}]},language:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]},url:{type:[{code:"url"}]},size:{type:[{code:"unsignedInt"}]},hash:{type:[{code:"base64Binary"}]},title:{type:[{code:"string"}]},creation:{type:[{code:"dateTime"}]}}},CodeableConcept:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},coding:{max:9007199254740991,type:[{code:"Coding"}]},text:{type:[{code:"string"}]}}},Coding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"uri"}]},version:{type:[{code:"string"}]},code:{type:[{code:"code"}]},display:{type:[{code:"string"}]},userSelected:{type:[{code:"boolean"}]}}},ContactDetail:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"string"}]},telecom:{max:9007199254740991,type:[{code:"ContactPoint"}]}}},ContactPoint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"code"}]},value:{type:[{code:"string"}]},use:{type:[{code:"code"}]},rank:{type:[{code:"positiveInt"}]},period:{type:[{code:"Period"}]}}},Contributor:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{min:1,type:[{code:"string"}]},contact:{max:9007199254740991,type:[{code:"ContactDetail"}]}}},Count:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},DataRequirement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},"subject[x]":{type:[{code:"CodeableConcept"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Group"]}]},mustSupport:{max:9007199254740991,type:[{code:"string"}]},codeFilter:{max:9007199254740991,type:[{code:"DataRequirementCodeFilter"}]},dateFilter:{max:9007199254740991,type:[{code:"DataRequirementDateFilter"}]},limit:{type:[{code:"positiveInt"}]},sort:{max:9007199254740991,type:[{code:"DataRequirementSort"}]}}},DataRequirementCodeFilter:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]},code:{max:9007199254740991,type:[{code:"Coding"}]}}},DataRequirementDateFilter:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},"value[x]":{type:[{code:"dateTime"},{code:"Period"},{code:"Duration"}]}}},DataRequirementSort:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},direction:{min:1,type:[{code:"code"}]}}},Distance:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Dosage:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},sequence:{type:[{code:"integer"}]},text:{type:[{code:"string"}]},additionalInstruction:{max:9007199254740991,type:[{code:"CodeableConcept"}]},patientInstruction:{type:[{code:"string"}]},timing:{type:[{code:"Timing"}]},"asNeeded[x]":{type:[{code:"boolean"},{code:"CodeableConcept"}]},site:{type:[{code:"CodeableConcept"}]},route:{type:[{code:"CodeableConcept"}]},method:{type:[{code:"CodeableConcept"}]},doseAndRate:{max:9007199254740991,type:[{code:"DosageDoseAndRate"}]},maxDosePerPeriod:{type:[{code:"Ratio"}]},maxDosePerAdministration:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},maxDosePerLifetime:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},DosageDoseAndRate:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{type:[{code:"CodeableConcept"}]},"dose[x]":{type:[{code:"Range"},{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},"rate[x]":{type:[{code:"Ratio"},{code:"Range"},{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},Duration:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},ElementDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},representation:{max:9007199254740991,type:[{code:"code"}]},sliceName:{type:[{code:"string"}]},sliceIsConstraining:{type:[{code:"boolean"}]},label:{type:[{code:"string"}]},code:{max:9007199254740991,type:[{code:"Coding"}]},slicing:{type:[{code:"ElementDefinitionSlicing"}]},short:{type:[{code:"string"}]},definition:{type:[{code:"markdown"}]},comment:{type:[{code:"markdown"}]},requirements:{type:[{code:"markdown"}]},alias:{max:9007199254740991,type:[{code:"string"}]},min:{type:[{code:"unsignedInt"}]},max:{type:[{code:"string"}]},base:{type:[{code:"ElementDefinitionBase"}]},contentReference:{type:[{code:"uri"}]},type:{max:9007199254740991,type:[{code:"ElementDefinitionType"}]},"defaultValue[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},meaningWhenMissing:{type:[{code:"markdown"}]},orderMeaning:{type:[{code:"string"}]},"fixed[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},"pattern[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},example:{max:9007199254740991,type:[{code:"ElementDefinitionExample"}]},"minValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},"maxValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},maxLength:{type:[{code:"integer"}]},condition:{max:9007199254740991,type:[{code:"id"}]},constraint:{max:9007199254740991,type:[{code:"ElementDefinitionConstraint"}]},mustSupport:{type:[{code:"boolean"}]},isModifier:{type:[{code:"boolean"}]},isModifierReason:{type:[{code:"string"}]},isSummary:{type:[{code:"boolean"}]},binding:{type:[{code:"ElementDefinitionBinding"}]},mapping:{max:9007199254740991,type:[{code:"ElementDefinitionMapping"}]}}},ElementDefinitionSlicingDiscriminator:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},path:{min:1,type:[{code:"string"}]}}},ElementDefinitionSlicing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},discriminator:{max:9007199254740991,type:[{code:"ElementDefinitionSlicingDiscriminator"}]},description:{type:[{code:"string"}]},ordered:{type:[{code:"boolean"}]},rules:{min:1,type:[{code:"code"}]}}},ElementDefinitionBase:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},min:{min:1,type:[{code:"unsignedInt"}]},max:{min:1,type:[{code:"string"}]}}},ElementDefinitionType:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"uri"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},targetProfile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},aggregation:{max:9007199254740991,type:[{code:"code"}]},versioning:{type:[{code:"code"}]}}},ElementDefinitionExample:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},label:{min:1,type:[{code:"string"}]},"value[x]":{min:1,type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]}}},ElementDefinitionConstraint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},key:{min:1,type:[{code:"id"}]},requirements:{type:[{code:"string"}]},severity:{min:1,type:[{code:"code"}]},human:{min:1,type:[{code:"string"}]},expression:{type:[{code:"string"}]},xpath:{type:[{code:"string"}]},source:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]}}},ElementDefinitionBinding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},strength:{min:1,type:[{code:"code"}]},description:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]}}},ElementDefinitionMapping:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},identity:{min:1,type:[{code:"id"}]},language:{type:[{code:"code"}]},map:{min:1,type:[{code:"string"}]},comment:{type:[{code:"string"}]}}},Expression:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},description:{type:[{code:"string"}]},name:{type:[{code:"id"}]},language:{min:1,type:[{code:"code"}]},expression:{type:[{code:"string"}]},reference:{type:[{code:"uri"}]}}},Extension:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},url:{min:1,type:[{code:"uri"}]},"value[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]}}},HumanName:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},text:{type:[{code:"string"}]},family:{type:[{code:"string"}]},given:{max:9007199254740991,type:[{code:"string"}]},prefix:{max:9007199254740991,type:[{code:"string"}]},suffix:{max:9007199254740991,type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Identifier:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"CodeableConcept"}]},system:{type:[{code:"uri"}]},value:{type:[{code:"string"}]},period:{type:[{code:"Period"}]},assigner:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MarketingStatus:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},country:{min:1,type:[{code:"CodeableConcept"}]},jurisdiction:{type:[{code:"CodeableConcept"}]},status:{min:1,type:[{code:"CodeableConcept"}]},dateRange:{min:1,type:[{code:"Period"}]},restoreDate:{type:[{code:"dateTime"}]}}},Meta:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},versionId:{type:[{code:"id"}]},lastUpdated:{type:[{code:"instant"}]},source:{type:[{code:"uri"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},security:{max:9007199254740991,type:[{code:"Coding"}]},tag:{max:9007199254740991,type:[{code:"Coding"}]},project:{type:[{code:"uri"}]},author:{type:[{code:"Reference"}]},onBehalfOf:{type:[{code:"Reference"}]},account:{type:[{code:"Reference"}]},accounts:{max:9007199254740991,type:[{code:"Reference"}]},compartment:{max:9007199254740991,type:[{code:"Reference"}]}}},Money:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},currency:{type:[{code:"code"}]}}},Narrative:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},status:{min:1,type:[{code:"code"}]},div:{min:1,type:[{code:"xhtml"}]}}},ParameterDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"code"}]},use:{min:1,type:[{code:"code"}]},min:{type:[{code:"integer"}]},max:{type:[{code:"string"}]},documentation:{type:[{code:"string"}]},type:{min:1,type:[{code:"code"}]},profile:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]}}},Period:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},start:{type:[{code:"dateTime"}]},end:{type:[{code:"dateTime"}]}}},Population:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"age[x]":{type:[{code:"Range"},{code:"CodeableConcept"}]},gender:{type:[{code:"CodeableConcept"}]},race:{type:[{code:"CodeableConcept"}]},physiologicalCondition:{type:[{code:"CodeableConcept"}]}}},ProdCharacteristic:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},height:{type:[{code:"Quantity"}]},width:{type:[{code:"Quantity"}]},depth:{type:[{code:"Quantity"}]},weight:{type:[{code:"Quantity"}]},nominalVolume:{type:[{code:"Quantity"}]},externalDiameter:{type:[{code:"Quantity"}]},shape:{type:[{code:"string"}]},color:{max:9007199254740991,type:[{code:"string"}]},imprint:{max:9007199254740991,type:[{code:"string"}]},image:{max:9007199254740991,type:[{code:"Attachment"}]},scoring:{type:[{code:"CodeableConcept"}]}}},ProductShelfLife:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},identifier:{type:[{code:"Identifier"}]},type:{min:1,type:[{code:"CodeableConcept"}]},period:{min:1,type:[{code:"Quantity"}]},specialPrecautionsForStorage:{max:9007199254740991,type:[{code:"CodeableConcept"}]}}},Quantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Range:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},low:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},high:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},Ratio:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},numerator:{type:[{code:"Quantity"}]},denominator:{type:[{code:"Quantity"}]}}},Reference:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},reference:{type:[{code:"string"}]},type:{type:[{code:"uri"}]},identifier:{type:[{code:"Identifier"}]},display:{type:[{code:"string"}]}}},RelatedArtifact:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},label:{type:[{code:"string"}]},display:{type:[{code:"string"}]},citation:{type:[{code:"markdown"}]},url:{type:[{code:"url"}]},document:{type:[{code:"Attachment"}]},resource:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/Resource"]}]}}},SampledData:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},origin:{min:1,type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},period:{min:1,type:[{code:"decimal"}]},factor:{type:[{code:"decimal"}]},lowerLimit:{type:[{code:"decimal"}]},upperLimit:{type:[{code:"decimal"}]},dimensions:{min:1,type:[{code:"positiveInt"}]},data:{type:[{code:"string"}]}}},Signature:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,max:9007199254740991,type:[{code:"Coding"}]},when:{min:1,type:[{code:"instant"}]},who:{min:1,type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},onBehalfOf:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},targetFormat:{type:[{code:"code"}]},sigFormat:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]}}},SubstanceAmount:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"amount[x]":{type:[{code:"Quantity"},{code:"Range"},{code:"string"}]},amountType:{type:[{code:"CodeableConcept"}]},amountText:{type:[{code:"string"}]},referenceRange:{type:[{code:"SubstanceAmountReferenceRange"}]}}},SubstanceAmountReferenceRange:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},lowLimit:{type:[{code:"Quantity"}]},highLimit:{type:[{code:"Quantity"}]}}},Timing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},event:{max:9007199254740991,type:[{code:"dateTime"}]},repeat:{type:[{code:"TimingRepeat"}]},code:{type:[{code:"CodeableConcept"}]}}},TimingRepeat:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"bounds[x]":{type:[{code:"Duration"},{code:"Range"},{code:"Period"}]},count:{type:[{code:"positiveInt"}]},countMax:{type:[{code:"positiveInt"}]},duration:{type:[{code:"decimal"}]},durationMax:{type:[{code:"decimal"}]},durationUnit:{type:[{code:"code"}]},frequency:{type:[{code:"positiveInt"}]},frequencyMax:{type:[{code:"positiveInt"}]},period:{type:[{code:"decimal"}]},periodMax:{type:[{code:"decimal"}]},periodUnit:{type:[{code:"code"}]},dayOfWeek:{max:9007199254740991,type:[{code:"code"}]},timeOfDay:{max:9007199254740991,type:[{code:"time"}]},when:{max:9007199254740991,type:[{code:"code"}]},offset:{type:[{code:"unsignedInt"}]}}},TriggerDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{type:[{code:"string"}]},"timing[x]":{type:[{code:"Timing"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Schedule"]},{code:"date"},{code:"dateTime"}]},data:{max:9007199254740991,type:[{code:"DataRequirement"}]},condition:{type:[{code:"Expression"}]}}},UsageContext:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"Coding"}]},"value[x]":{min:1,type:[{code:"CodeableConcept"},{code:"Quantity"},{code:"Range"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/PlanDefinition","http://hl7.org/fhir/StructureDefinition/ResearchStudy","http://hl7.org/fhir/StructureDefinition/InsurancePlan","http://hl7.org/fhir/StructureDefinition/HealthcareService","http://hl7.org/fhir/StructureDefinition/Group","http://hl7.org/fhir/StructureDefinition/Location","http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MoneyQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},SimpleQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{max:0,type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},IdentityProvider:{elements:{authorizeUrl:{min:1,type:[{code:"string"}]},tokenUrl:{min:1,type:[{code:"string"}]},tokenAuthMethod:{type:[{code:"code"}]},userInfoUrl:{min:1,type:[{code:"string"}]},clientId:{min:1,type:[{code:"string"}]},clientSecret:{min:1,type:[{code:"string"}]},usePkce:{type:[{code:"boolean"}]},useSubject:{type:[{code:"boolean"}]}}}};function xr(r){return new yr(r).parse()}var fe=Cn(Pn),vr=Object.create(null),wn=Object.create(null),xo={"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 kn(r){let e;return e=wn[r],e||(e=wn[r]=Object.create(null)),e}function Tr(r){let t=(Array.isArray(r)?r:r.entry?.map(n=>n.resource)??[]).filter(n=>n?.resourceType==="StructureDefinition");Fn(t);for(let n of t)Sr(n)}function Sr(r){if(!r?.name)throw new Error("Failed loading StructureDefinition from bundle");if(r.resourceType!=="StructureDefinition")return;let e=xr(r),t=xo[r.url],n,i;t?(n=fe,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=fe,i=r.type):(n=kn(r.url),i=r.type),n[i]=e;for(let o of e.innerTypes)o.parentType=e,n[o.name]=o;vr[r.url]=e}function Vn(){return fe}function Dn(r){return!!fe[r]}function We(r,e){if(e){let t=kn(e)[r];if(t)return t}return fe[r]}function re(r,e){let t=We(r,e);if(!t)throw new p(b("Unknown data type: "+r));return t}function Mn(r){let e=fe[r];return e&&br(e)}function _n(r){return!!vr[r]}function Ln(r){return vr[r]}var yr=class{constructor(e){if(!e.snapshot?.element||e.snapshot.element.length===0)throw new Error(`No snapshot defined for StructureDefinition '${e.name}'`);this.root=e.snapshot.element[0],this.elements=e.snapshot.element.slice(1),this.elementIndex=Object.create(null),this.index=0,this.resourceSchema={name:e.name,path:this.root.path,title:e.title,type:e.type,url:e.url,version:e.version,kind:e.kind,description:bo(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=mr(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[mr(e,n.path)]=t;break}n=n.parent}if(!n){let i=mr(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&&!ke(this.slicingContext.path,e?.path)&&(this.slicingContext=void 0),e.slicing&&!this.slicingContext&&this.enterSlice(e,t)}enterInnerType(e){for(;this.backboneContext&&!ke(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;let t=gr(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:ke(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,t){So(e)&&!this.peek()?.sliceName||(t.slicing={discriminator:(e.slicing?.discriminator??[]).map(n=>{if(n.type!=="value"&&n.type!=="pattern"&&n.type!=="type")throw new Error(`Unsupported slicing discriminator type: ${n.type}`);return{path:n.path,type:n.type}}),slices:[],ordered:e.slicing?.ordered??!1,rule:e.slicing?.rules},this.slicingContext={field:t.slicing,path:e.path??""})}checkFieldExit(e=void 0){if(this.backboneContext&&!ke(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!ke(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!!(ke(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=gr(e)),n||(n=ne(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=On(e.max),n=e.base?.max?On(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:In(P(i,"fixed[x]")),pattern:In(P(i,"pattern[x]")),binding:e.binding}}};function wu(r,e){if(!r)return;let t=[];for(let n of e){t.push("_"+n);let i=fe[r.resourceType].elements[n+"[x]"];i&&t.push(...i.type.map(o=>n+k(o.code)))}for(let n of Object.getOwnPropertyNames(r))!e.includes(n)&&!t.includes(n)&&!vo.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(An):[An]},r}var An={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},vo=["resourceType","id","meta"];function On(r){return r==="*"?Number.POSITIVE_INFINITY:Number.parseInt(r,10)}function mr(r,e=""){return To(r.path,e)}function To(r,e){return r?e&&r.startsWith(e)?r.substring(e.length+1):r:""}function ke(r,e){return!r||!e?!1:e.startsWith(r+".")||e===r}function In(r){return Array.isArray(r)&&r.length>0?r[0]:S(r)?void 0:r}function So(r){let e=r.slicing?.discriminator;return!!(r.type?.some(t=>t.code==="Extension")&&e?.length===1&&e[0].type==="value"&&e[0].path==="url")}function bo(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 Cr(r,e,t){new Er(r,e,t).crawl()}function Fu(r,e,t){return new Rr(r,e,t).crawl()}var Er=class{constructor(e,t,n){this.root=e,this.visitor=t,this.schema=n?.schema??re(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}crawl(){this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}crawlObject(e,t,n){let i=O(e.value);if(i&&this.visitor.onEnterResource&&this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties)for(let o of Object.keys(e.value))this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&this.visitor.onExitResource(n,e,t)}crawlProperty(e,t,n,i){let o=Ve(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 qe(s))this.crawlPropertyValue(a,i)}crawlPropertyValue(e,t){if(!ut(e.type)){let n=re(e.type);this.crawlObject(e,n,t)}}},Rr=class{constructor(e,t,n){this.root=e,this.visitor=t,this.schema=n?.schema??re(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}async crawl(){return this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}async crawlObject(e,t,n){let i=O(e.value);if(i&&this.visitor.onEnterResource&&await this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&await this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties&&e.value)for(let o of Object.keys(e.value))await this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))await this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&await this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&await this.visitor.onExitResource(n,e,t)}async crawlProperty(e,t,n,i){let o=Ve(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 qe(s))await this.crawlPropertyValue(a,i)}async crawlPropertyValue(e,t){if(!ut(e.type)){let n=re(e.type);await this.crawlObject(e,n,t)}}};function Ve(r,e,t){if(r===void 0)return[void 0];if(e==="$this")return[r];let n=t?.withPath?Eo: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 d of u)c.push(n(d,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 Eo(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 Pr={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"},Co=new we(1e3);function ut(r){return r==="undefined"||r in Pr}var dt={base64Binary:/^([A-Za-z\d+/]{4})*([A-Za-z\d+/]{2}==|[A-Za-z\d+/]{3}=)?$/,canonical:/^\S*$/,code:/^[^\s]+( [^\s]+)*$/,date:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1]))?)?$/,dateTime:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1])(T([01]\d|2[0-3])(:[0-5]\d:([0-5]\d|60)(\.\d{1,9})?)?)?)?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00)?)?)?$/,id:/^[A-Za-z0-9\-.]{1,64}$/,instant:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])T([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00))$/,markdown:/^[\r\n\t\u0020-\uFFFF]+$/,oid:/^urn:oid:[0-2](\.(0|[1-9]\d*))+$/,string:/^[\r\n\t\u0020-\uFFFF]+$/,time:/^([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?$/,uri:/^\S*$/,url:/^\S*$/,uuid:/^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,xhtml:/.*/},Po={"ele-1":!0,"dom-3":!0,"org-1":!0,"sdf-19":!0};function nl(r,e){if(!r.resourceType)throw new p(y("Missing resource type"));return new lt(v(r),e).validate()}function il(r,e){return new lt(r,e).validate()}var lt=class{constructor(e,t){this.issues=[],this.root=e,this.currentResource=[],O(e.value)&&this.currentResource.push(e.value),t?.profile?this.schema=xr(t.profile):this.schema=re(e.type)}validate(){this.constraintsCheck({...this.root,path:this.schema.path},this.schema),wr(this.root.value,this.schema.path,this.issues),Cr(this.root,this,{schema:this.schema,initialPath:this.schema.path});let e=this.issues,t=!1;for(let n of e)n.severity==="error"&&(t=!0);if(t)throw new p({resourceType:"OperationOutcome",issue:e});return e}onExitObject(e,t,n){this.checkAdditionalProperties(t,n.elements,t.path)}onEnterResource(e,t){this.currentResource.push(t.value)}onExitResource(){this.currentResource.pop()}visitProperty(e,t,n,i,o){let s=o.elements[t];if(!s)throw new Error(`Missing element validation schema for ${t}`);for(let a of i){if(!this.checkPresence(a,s,n))return;let c;if(s.isArray){if(!Array.isArray(a)){this.issues.push(T(n,"Expected array of values for property"));return}c=a}else{if(Array.isArray(a)){this.issues.push(T(n,"Expected single value for property"));return}c=[a]}(c.length<s.min||c.length>s.max)&&this.issues.push(T(s.path,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${c.length}`)),Oo(a,s)||this.issues.push(T(n,"Value did not match expected pattern"));let u=s.slicing?Object.fromEntries(s.slicing.slices.map(d=>[d.name,0])):void 0;for(let d of c){this.constraintsCheck(d,s),this.referenceTypeCheck(d,s),this.checkPropertyValue(d);let m=Io(d,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(T(e.path,"Missing required property")),!1):S(e)?(this.issues.push(T(n,"Invalid empty value")),!1):!0}checkPropertyValue(e){ut(e.type)?this.validatePrimitiveType(e):S(e.value)&&this.issues.push(T(e.path,"Invalid empty non-primitive value"))}validateSlices(e,t,n){if(!(!e||!t))for(let i of e){let o=t[i.name];(o<i.min||o>i.max)&&this.issues.push(T(n,`Incorrect number of values provided for slice '${i.name}': expected ${i.min}..${Number.isFinite(i.max)?i.max:"*"}, but found ${o}`))}}checkAdditionalProperties(e,t,n){let i=e.value;if(!i)return;let o={};for(let s of Object.keys(i)){if(s==="resourceType")continue;let a=Ao(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(pe("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(pe("warning","structure",`Conflicting choice of type properties: "${s}", "${o[a]}"`,s)),o[a]=s;continue}!(s in t)&&!(s.startsWith("_")&&s.slice(1)in t)&&this.issues.push(T(`${n}.${s}`,`Invalid additional property "${s}"`))}}constraintsCheck(e,t){let n=t.constraints;if(n){for(let i of n)if(i.severity==="error"&&!(i.key in Po)&&!this.isExpressionTrue(i,e)){this.issues.push(En(e.path,i));return}}}referenceTypeCheck(e,t){if(e.type!=="Reference")return;let n=e.value;if(!W(n)||n.reference.startsWith("#"))return;let i=n.reference.includes("?")?n.reference.split("?")[0]:n.reference.split("/")[0];if(!i)return;let o=t.type.find(m=>m.code==="Reference")?.targetProfile;if(!o)return;let s=pn+"/fhir/StructureDefinition/",a=s+"Resource",c=s+i,u="https://medplum.com/fhir/StructureDefinition/",d=u+i;for(let m of o)if(m===a||m===c||m===d||!m.startsWith(s)&&!m.startsWith(u))return;this.issues.push(pe("warning","structure",`Invalid reference: got "${i}", expected "${o.join('", "')}"`,e.path))}isExpressionTrue(e,t){let n={"%context":t,"%ucum":v(dn)};this.currentResource.length>0&&(n["%resource"]=v(this.currentResource[this.currentResource.length-1])),O(this.root.value)&&(n["%rootResource"]=this.root);try{let i=E(e.expression,[t],n,Co);return i.length===1&&i[0].value===!0}catch(i){return this.issues.push(Rn(t.path,"Error evaluating invariant expression",i,{fhirpath:e.expression})),!1}}validatePrimitiveType(e){let[t,n]=ko(e),i=e.path;if(t){let{type:o,value:s}=t;if(!(o in Pr)){this.issues.push(T(i,`Invalid JSON type: ${o} is not a valid FHIR type`));return}let a=Pr[o];if(typeof s!==a){s!==null&&this.issues.push(T(i,`Invalid JSON type: expected ${a}, but got ${typeof s}`));return}a==="string"?this.validateString(s,o,i):a==="number"&&this.validateNumber(s,o,i)}n&&Cr(n,this,{schema:re("Element"),initialPath:i})}validateString(e,t,n){if(!e.trim()){this.issues.push(T(n,"String must contain non-whitespace content"));return}if(e.length>1024*1024){this.issues.push(T(n,"String cannot be larger than 1 MB"));return}let i=dt[t];i&&!i.exec(e)&&this.issues.push(T(n,"Invalid "+t+" format"))}validateNumber(e,t,n){Number.isNaN(e)||!Number.isFinite(e)?this.issues.push(T(n,"Invalid numeric value")):wo(t)&&!Number.isInteger(e)?this.issues.push(T(n,"Expected number to be an integer")):t===l.positiveInt&&e<=0?this.issues.push(T(n,"Expected number to be positive")):t===l.unsignedInt&&e<0&&this.issues.push(T(n,"Expected number to be non-negative"))}};function wo(r){return r===l.integer||r===l.positiveInt||r===l.unsignedInt}function Ao(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 wr(r,e,t){for(let[n,i]of Object.entries(r)){let o=`${e}.${n}`,s=n.startsWith("_")?n.slice(1):`_${n}`;if(i===null)t.push(T(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?t.push(T(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!r[s]?.[a]?t.push(T(`${o}[${a}]`,"Invalid null value")):i[a]&&wr(i[a],`${o}[${a}]`,t);else typeof i=="object"&&wr(i,o,t)}}function Oo(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&&!je(t,e.pattern)||e.fixed&&!ie(t,e.fixed))}function Ar(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 je(r,i.pattern);if(i.fixed)return ie(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 Io(r,e){if(e){for(let t of e.slices)if(e.discriminator.every(n=>qe(Ve(r,n.path))?.some(i=>Ar(i,n,t))))return t.name}}function ko(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 h(r){return[{type:l.boolean,value:r}]}function v(r){return r==null?{type:"undefined",value:void 0}:Number.isSafeInteger(r)?{type:l.integer,value:r}:typeof r=="number"?{type:l.decimal,value:r}:typeof r=="boolean"?{type:l.boolean,value:r}:typeof r=="string"?{type:l.string,value:r}:w(r)?{type:l.Quantity,value:r}:O(r)?{type:r.resourceType,value:r}:Dr(r)?{type:l.CodeableConcept,value:r}:Vr(r)?{type:l.Coding,value:r}:{type:l.BackboneElement,value:r}}function L(r){return r.length===0?!1:!!r[0].value}function G(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=yt(r.type,e,t?.profileUrl);return n?Vo(r,e,n):Do(r,e)}function Vo(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 d of i){let m=u.replace("[x]",k(d.code));if(o=n[m],a=n["_"+m],o!==void 0||a!==void 0){s=d.code;break}}if(a)if(Array.isArray(o)){o=o.slice();for(let d=0;d<Math.max(o.length,a.length);d++)o[d]=Or(o[d],a[d])}else if(!o&&Array.isArray(a)){o=a.slice();for(let d=0;d<a.length;d++)o[d]=Or(void 0,a[d])}else o=Or(o,a);if(!S(o))return(s==="Element"||s==="BackboneElement")&&(s=t.type[0].code),Array.isArray(o)?o.map(d=>Nn(d,s)):Nn(o,s)}function Nn(r,e){return e==="Resource"&&O(r)&&(e=r.resourceType),{type:e,value:r}}function Do(r,e){let t=r.value;if(!t||typeof t!="object")return;let n;if(e in t){let i=t[e];Array.isArray(i)?n=i.map(v):n=v(i)}else{let i=e.endsWith("[x]")?e.substring(0,e.length-3):e;for(let o of Object.values(l)){let s=i+k(o);if(s in t){let a=t[s];Array.isArray(a)?n=a.map(c=>({type:o,value:c})):n={type:o,value:a};break}}}if(Array.isArray(n)){if(n.length===0||S(n[0]))return}else if(S(n))return;return n}function ft(r){let e=[];for(let t of r){let n=!1;for(let i of e)if(L($e(t,i))){n=!0;break}n||e.push(t)}return e}function Wn(r){return h(!L(r))}function qn(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?h(!1):h(r.every((t,n)=>L($e(t,e[n]))))}function jn(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?h(!0):h(r.some((t,n)=>!L($e(t,e[n]))))}function $e(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?h(Math.abs(t-n)<1e-8):w(t)&&w(n)?h(Hn(t,n)):h(typeof t=="object"&&typeof n=="object"?kr(r,e):t===n)}function Ir(r,e){return r.length===0&&e.length===0?h(!0):r.length!==e.length?h(!1):(r.sort(Un),e.sort(Un),h(r.every((t,n)=>L(Mo(t,e[n])))))}function Mo(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"?h(Math.abs(s-a)<.01):w(s)&&w(a)?h(Hn(s,a)):h(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"?kr({...s,id:void 0},{...a,id:void 0}):typeof s=="string"&&typeof a=="string"?s.toLowerCase()===a.toLowerCase():s===a)}function Un(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 ht(r,e){let{value:t}=r;if(t==null)return!1;let n=e;switch(n.startsWith("System.")&&(n=n.substring(7)),n.startsWith("FHIR.")&&(n=n.substring(5)),n){case"Boolean":return typeof t=="boolean";case"Decimal":case"Integer":return typeof t=="number";case"Date":return $n(t);case"DateTime":return De(t);case"Time":return typeof t=="string"&&!!/^T\d/.exec(t);case"Period":return Gn(t);case"Quantity":return w(t);default:return r.type===n||typeof t=="object"&&t?.resourceType===n}}function $n(r){return typeof r=="string"&&!!dt.date.exec(r)}function De(r){return typeof r=="string"&&!!dt.dateTime.exec(r)}function Gn(r){return!!(r&&typeof r=="object"&&("start"in r&&De(r.start)||"end"in r&&De(r.end)))}function mt(r){if(r){if($n(r)||De(r))return{start:pt(r,"0000-01-01T00:00:00.000"),end:pt(r,"xxxx-12-31T23:59:59.999")};if(Gn(r))return{start:r.start?pt(r.start,"0000-01-01T00:00:00.000"):void 0,end:r.end?pt(r.end,"xxxx-12-31T23:59:59.999"):void 0}}}function pt(r,e){let t="Z",n=Math.max(r.indexOf("+",10),r.indexOf("-",10));n>-1?(t=r.substring(n),r=r.substring(0,n)):r.endsWith("Z")&&(r=r.substring(0,r.length-1));let i=r+e.substring(r.length)+t;return new Date(i).toISOString()}function w(r){return!!(r&&typeof r=="object"&&"value"in r&&typeof r.value=="number")}function Hn(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 kr(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(!kr(o,s))return!1}else if(o!==s)return!1}return!0}function Bn(r){return r!==null&&typeof r=="object"}function Or(r,e){if(e){if(typeof e!="object")throw new Error("Primitive extension must be an object");return _o(r??{},e)}return r}function _o(r,e){return delete e.__proto__,delete e.constructor,Object.assign(r,e)}function He(r,e){return O(r,e)&&"id"in r&&typeof r.id=="string"}function he(r){let e=D(r)??"undefined/undefined",t=Fo(r);return t===e?{reference:e}:{reference:e,display:t}}function D(r){if(W(r))return r.reference;if(He(r))return`${r.resourceType}/${r.id}`}function me(r){if(r)return W(r)?r.reference.split("/")[1]:r.id}function ml(r){if(r?.reference===void 0)throw new p(y("Reference missing reference property."));let[e,t]=r.reference.split("/");if(e===""||t===""||t===void 0)throw new p(y("Unable to parse reference string."));return[e,t]}function Lo(r){return r.resourceType==="Patient"||r.resourceType==="Practitioner"||r.resourceType==="RelatedPerson"}function Fo(r){if(Lo(r)){let e=No(r);if(e)return e}if(r.resourceType==="Device"){let e=Uo(r);if(e)return e}if(r.resourceType==="MedicationRequest"&&r.medicationCodeableConcept)return Ge(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]),Dr(e))return Ge(e);if(Qo(e))return e.text}return D(r)??""}function No(r){let e=r.name;if(e&&e.length>0)return Qe(e[0])}function Uo(r){let e=r.deviceName;if(e&&e.length>0)return e[0].name}function yl(r){if(!("photo"in r))return;let e=r.photo;if(e)if(Array.isArray(e))for(let t of e){let n=Qn(t);if(n)return n}else return Qn(e)}function Qn(r){if(r.url&&r.contentType?.startsWith("image/"))return r.url}function gl(r){return r?new Date(r):void 0}function gt(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(),d=a-i;(c<o||c===o&&u<s)&&d--;let m=a*12+c-(i*12+o);u<s&&m--;let x=Math.floor((n.getTime()-t.getTime())/(1e3*60*60*24));return{years:d,months:m,days:x}}function xl(r,e){let{years:t,months:n,days:i}=gt(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 vl(r){let e={};return zn(r.item,e),e}function zn(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer[0]),zn(t.item,e)}function Tl(r){let e={};return Jn(r.item,e),e}function Jn(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]?e[t.linkId]=[...e[t.linkId],...t.answer]:e[t.linkId]=t.answer),Jn(t.item,e)}function Bo(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 Sl(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 bl(r,...e){let t=ne(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 ne(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 xt(r,e){let t=_r(r);return JSON.stringify(t,null,e?2:void 0)??""}function _r(r){if(!(r==null||r===""))return typeof r=="object"?Array.isArray(r)?Wo(r):qo(r):r}function Wo(r){let e=r.length;if(e===0)return;let t,n=0;for(let i=0;i<e;i++){let o=r[i],s=_r(o);s!==o&&!t&&(t=Array.from(r)),s===void 0?t&&(t[i]=null):(t&&(t[i]=s),n++)}if(n!==0)return t??r}function qo(r){let e,t=0;for(let n in r){let i=r[n],o=_r(i);o!==i&&!e&&(e={...r}),o===void 0?e&&delete e[n]:(e&&(e[n]=o),t++)}if(t!==0)return e??r}function S(r){if(r==null)return!0;let e=typeof r;return e==="string"||e==="object"?!X(r):!1}function X(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 ie(r,e,t){return r===e||S(r)&&S(e)?!0:S(r)||S(e)?!1:Array.isArray(r)&&Array.isArray(e)?jo(r,e):Array.isArray(r)||Array.isArray(e)?!1:R(r)&&R(e)?$o(r,e,t):(R(r)||R(e),!1)}function jo(r,e){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(!ie(r[t],e[t]))return!1;return!0}function $o(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(!ie(o,s,i))return!1}return!0}function je(r,e){return S(r)?!0:S(e)?!1:Array.isArray(r)&&Array.isArray(e)?Go(r,e):Array.isArray(r)||Array.isArray(e)?!1:R(r)&&R(e)?Ho(r,e):R(r)||R(e)?!1:r===e}function Go(r,e){return e.every(t=>r.some(n=>je(n,t)))}function Ho(r,e){return Object.entries(e).every(([t,n])=>t in r&&je(r[t],n))}function ye(r){return r===void 0?r:JSON.parse(JSON.stringify(r))}function El(r){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(r)}function R(r){return r!==null&&typeof r=="object"}function Kn(r){return r.every(vt)}function vt(r){return typeof r=="string"}function Vr(r){return R(r)&&"code"in r&&typeof r.code=="string"}function Dr(r){return R(r)&&"coding"in r&&Array.isArray(r.coding)&&r.coding.every(Vr)}function Rl(r,e){if(r){for(let t of r)if(t.coding){for(let n of t.coding)if(n.system===e)return n.code}}}function Qo(r){return R(r)&&"text"in r&&typeof r.text=="string"}var Xn=[];for(let r=0;r<256;r++)Xn.push(r.toString(16).padStart(2,"0"));function Yn(r){let e=ei(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=Xn[t[i]];return n.join("")}function Zn(r){let e=ei(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=String.fromCharCode(t[i]);return window.btoa(n.join(""))}function ei(r){return ArrayBuffer.isView(r)?r.buffer:r}function k(r){return r?r.charAt(0).toUpperCase()+r.substring(1):""}function Cl(r){return r===r.toLowerCase()&&r!==r.toUpperCase()}function Lr(r){return r.length>0&&r.startsWith(r[0].toUpperCase())}function oe(r,e){let t=r+".";if(e.startsWith(t))return e.slice(t.length)}function Mr(r,e){return r.coding?.find(t=>t.system===e)?.code}function Pl(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 wl(r,e,t,n){return r.qualifiedInterval?.find(i=>ti(i,e)&&Xo(i,t,r.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function Al(r,e,t){return zo(r,e,t)[0]}function zo(r,e,t){return r.qualifiedInterval?.filter(n=>ti(n,e)&&(!t||t.includes(n.condition)))??[]}function ti(r,e){return Jo(r,e)&&Ko(r,e)}function Jo(r,e){return!r.gender||r.gender===e.gender}function Ko(r,e){return!r.age||ri(gt(e.birthDate).years,r.age)}function Xo(r,e,t){return!!r.range&&ri(e,r.range,t)}function ri(r,e,t){return(e.low?.value===void 0||Zo(r,e.low.value,t))&&(e.high?.value===void 0||Yo(r,e.high.value,t))}function Ol(r,e){return parseFloat(r.toFixed(e))}function Il(r,e,t){return H(r,t)===H(e,t)}function kl(r,e,t){return H(r,t)<H(e,t)}function Vl(r,e,t){return H(r,t)>H(e,t)}function Yo(r,e,t){return H(r,t)<=H(e,t)}function Zo(r,e,t){return H(r,t)>=H(e,t)}function H(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}function Dl(r,e,t){return r.find(n=>typeof e=="string"?Mr(n.code||{},t)===e:Mr(n.code||{},t)===Mr(e,t))}function qe(r){if(r!==void 0)return Array.isArray(r)?r:[r]}function Ml(r){return Array.isArray(r)?r[0]:r}var Fr=r=>new Promise(e=>{setTimeout(e,r)});function Nr(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 ni(r){let e,t=!1;return function(){return t||(e=r(),t=!0),e}}function Me(r,e){return r?(r.push(e),r):[e]}function Tt(r){return r.sort((e,t)=>e.localeCompare(t))}function Ur(r){return r.endsWith("/")?r:r+"/"}function es(r){return r.startsWith("/")?r.slice(1):r}function q(r,e){return new URL(es(e),Ur(r.toString())).toString()}function ii(r,e){return q(r,e).toString().replace("http://","ws://").replace("https://","wss://")}function oi(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 ts=/^(([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 _l(r){return ts.test(r)}function Ll(r,e){return r?.meta?.profile?.includes(e)||(r.meta=r.meta??{},r.meta.profile=r.meta.profile??[],r.meta.profile.push(e)),r}function Fl(r,e){return new Map(r.entry?.filter(n=>!!n.resource).map(n=>[Bo(n.resource,e),n.resource]).filter(([n])=>n!==void 0))}function Nl(r,e){if(r?.meta?.profile?.includes(e)){let t=r.meta.profile.indexOf(e);r.meta.profile.splice(t,1)}return r}function Ul(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):i!==void 0&&t.push(i)}return t}function Bl(r){return r.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/“/g,"“").replace(/”/g,"”").replace(/‘/g,"‘").replace(/’/g,"’").replace(/…/g,"…")}function si(r){if(!r)return"";switch(r.type){case"Address":return ns(r.value);case"CodeableConcept":return Ge(r.value);case"Coding":return ai(r.value);case"ContactPoint":return r.value.value;case"HumanName":return Qe(r.value);case"Quantity":return se(r.value);case"Reference":return rs(r.value);default:return r.value?.toString()??""}}function rs(r){return r?r.display??r.reference??xt(r):""}function ns(r,e){if(!r)return"";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 Qe(r,e){if(!r)return"";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=ge(r.text);if(n)return n}return t.join(" ").trim()}function jl(r){let e=[];return r.given&&e.push(...r.given),e.join(" ").trim()}function $l(r){return ge(r.family)??""}function Wr(r){return r instanceof Date&&!isNaN(r.getTime())}function Gl(r,e,t){if(!r)return"";let n=new Date(r);return Wr(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...t})):""}function is(r,e,t){if(!r)return"";let n=new Date("2000-01-01T"+r+"Z");return Wr(n)?n.toLocaleTimeString(e,t):""}function Br(r,e,t){if(!r)return"";let n=new Date(r);return Wr(n)?n.toLocaleString(e,t):""}function Hl(r,e,t){return!r||!r.start&&!r.end?"":Br(r.start,e,t)+" - "+Br(r.end,e,t)}var os={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},ss={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},as={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function Ql(r){if(!r)return"";let e=[];return cs(e,r.repeat),r.event&&e.push(r.event.map(t=>Br(t)).join(", ")),k(e.join(" ").trim())}function cs(r,e){if(!e?.periodUnit)return;let t=e.frequency??1,n=e.period??1,i=e.periodUnit;t===1&&n===1?r.push(os[i]):(t===1?r.push("once"):r.push(t+" times"),n===1?r.push("per "+ss[i]):r.push("per "+n+" "+as[i])),e.dayOfWeek&&r.push("on "+e.dayOfWeek.map(k).join(", ")),e.timeOfDay&&r.push("at "+e.timeOfDay.map(o=>is(o)).join(", "))}function zl(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=ds(n.value,e),`> ${se(n,e)}`):`>= ${se(n,e)}`:n?.value===void 0&&i?.value!==void 0?t&&e!==void 0?(i.value=ls(i.value,e),`< ${se(i,e)}`):`<= ${se(i,e)}`:(n?.unit===i?.unit&&delete n?.unit,`${se(n,e)} - ${se(i,e)}`)}function se(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 Jl(r){return r?.value===void 0?"":r.value.toLocaleString(void 0,{style:"currency",currency:r.currency??"USD",currencyDisplay:"narrowSymbol"})}function Ge(r){if(!r)return"";let e=ge(r.text);return e||(r.coding?r.coding.map(t=>ai(t)).join(", "):"")}function ai(r,e){let t=ge(r?.display);if(t){let n=e?ge(r?.code):void 0;return`${t}${n?" ("+n+")":""}`}return ge(r?.code)??""}function us(r){if(!r)return"";let e=[];if(r.valueQuantity)e.push(se(r.valueQuantity));else if(r.valueCodeableConcept)e.push(Ge(r.valueCodeableConcept));else{let t=ge(r.valueString);t&&e.push(t)}return"component"in r&&e.push(r.component.map(t=>us(t)).join(" / ")),e.join(" / ").trim()}function ge(r){return typeof r=="string"?r:void 0}function ls(r,e,t=1){return(ci(r,e)+t)*Math.pow(10,-e)}function ds(r,e,t=1){return(ci(r,e)-t)*Math.pow(10,-e)}function ci(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}var l={Address:"Address",Age:"Age",Annotation:"Annotation",Attachment:"Attachment",BackboneElement:"BackboneElement",CodeableConcept:"CodeableConcept",Coding:"Coding",ContactDetail:"ContactDetail",ContactPoint:"ContactPoint",Contributor:"Contributor",Count:"Count",DataRequirement:"DataRequirement",Distance:"Distance",Dosage:"Dosage",Duration:"Duration",Expression:"Expression",Extension:"Extension",HumanName:"HumanName",Identifier:"Identifier",MarketingStatus:"MarketingStatus",Meta:"Meta",Money:"Money",Narrative:"Narrative",ParameterDefinition:"ParameterDefinition",Period:"Period",Population:"Population",ProdCharacteristic:"ProdCharacteristic",ProductShelfLife:"ProductShelfLife",Quantity:"Quantity",Range:"Range",Ratio:"Ratio",Reference:"Reference",RelatedArtifact:"RelatedArtifact",SampledData:"SampledData",Signature:"Signature",SubstanceAmount:"SubstanceAmount",SystemString:"http://hl7.org/fhirpath/System.String",Timing:"Timing",TriggerDefinition:"TriggerDefinition",UsageContext:"UsageContext",base64Binary:"base64Binary",boolean:"boolean",canonical:"canonical",code:"code",date:"date",dateTime:"dateTime",decimal:"decimal",id:"id",instant:"instant",integer:"integer",markdown:"markdown",oid:"oid",positiveInt:"positiveInt",string:"string",time:"time",unsignedInt:"unsignedInt",uri:"uri",url:"url",uuid:"uuid"};function rd(r){for(let e of r.entry??[]){let t=e.resource;t.resourceType==="SearchParameter"&&qr(t)}}function Fn(r){let e=Array.isArray(r)?r:r.entry?.map(t=>t.resource)??[];for(let t of e)t?.resourceType==="StructureDefinition"&&t.kind==="resource"&&li(t.type)}function li(r){let e=F.types[r];return e||(e={searchParamsDetails:{}},F.types[r]=e),!e.searchParams&&r!=="Binary"&&(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 qr(r){for(let e of r.base??[]){let t=li(e);t.searchParams||(t.searchParams={}),t.searchParams[r.code]=r}}function gr(r){let e=r.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?ps((r.base?.path??r.path)?.split(".")):e}function ps(r){return r.length===1?r[0]:r.map(k).join("")}function br(r){return r.kind==="resource"&&r.name!=="Resource"&&r.name!=="DomainResource"}function nd(){return Object.values(Vn()).filter(br).map(r=>r.name)}function id(r){return F.types[r]?.searchParams}function od(r,e){return F.types[r]?.searchParams?.[e]}function sd(r){let e=r.replaceAll("[x]","").split(".").pop();return fs(e)}function fs(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(ms).join(" ").replace("_"," ").replace(/\s+/g," ")}var hs=new Set(["ID","IP","PKCE","JWKS","URI","URL","OMB","UDI"]);function ms(r){let e=r.toUpperCase();return r===e?r:hs.has(e)?e:e.charAt(0)+r.slice(1)}function yt(r,e,t){let n=We(r,t);if(n)return ys(n.elements,e)}function ys(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 ad(r){return!!(r&&typeof r=="object"&&"type"in r&&"value"in r)}function O(r,e){return!(!r||typeof r!="object"||!("resourceType"in r)||e&&r.resourceType!==e)}function W(r){return!!(r&&typeof r=="object"&&"reference"in r&&typeof r.reference=="string")}var F={types:{}};function di(r){switch(r.type){case l.uuid:case l.uri:case l.url:case l.string:case l.oid:case l.markdown:case l.id:case l.code:case l.canonical:case l.base64Binary:case l.SystemString:case l.date:case l.dateTime:case l.instant:return r.value;case l.Identifier:return`${r.value.system??""}|${r.value.value}`;case l.Coding:return ui(r.value);case l.CodeableConcept:return r.value.coding?.map(ui).join(",")??r.value.text;case l.HumanName:return r.value.text?r.value.text:Qe(r.value);case l.unsignedInt:case l.positiveInt:case l.integer:case l.decimal:return r.value.toString();case l.boolean:return r.value?"true":"false";case l.Extension:return r.value.url;case l.ContactPoint:return r.value.value;case l.Quantity:case l.Age:case l.Count:case l.Duration:return`${r.value.value}|${r.value.system??""}|${r.value.code??r.value.unit??""}`;case l.Reference:return r.value.reference;default:return He(r.value)?D(r.value):JSON.stringify(r)}}function ui(r){return r?`${r.system??""}|${r.code}`:""}function _e(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 Y=()=>[],I={empty:(r,e)=>h(e.length===0||e.every(t=>S(t.value))),hasValue:(r,e)=>h(e.length!==0),exists:(r,e,t)=>t?h(e.filter(n=>L(t.eval(r,[n]))).length>0):h(e.length>0&&e.every(n=>!S(n.value))),all:(r,e,t)=>h(e.every(n=>L(t.eval(r,[n])))),allTrue:(r,e)=>{for(let t of e)if(!t.value)return h(!1);return h(!0)},anyTrue:(r,e)=>{for(let t of e)if(t.value)return h(!0);return h(!1)},allFalse:(r,e)=>{for(let t of e)if(t.value)return h(!1);return h(!0)},anyFalse:(r,e)=>{for(let t of e)if(!t.value)return h(!0);return h(!1)},subsetOf:(r,e,t)=>{if(e.length===0)return h(!0);let n=t.eval(r,xe(r));return n.length===0?h(!1):h(e.every(i=>n.some(o=>o.value===i.value)))},supersetOf:(r,e,t)=>{let n=t.eval(r,xe(r));return n.length===0?h(!0):e.length===0?h(!1):h(n.every(i=>e.some(o=>o.value===i.value)))},count:(r,e)=>[{type:l.integer,value:e.length}],distinct:(r,e)=>{let t=[];for(let n of e)t.some(i=>i.value===n.value)||t.push(n);return t},isDistinct:(r,e)=>h(e.length===I.distinct(r,e).length),where:(r,e,t)=>e.filter(n=>L(t.eval(r,[n]))),select:(r,e,t)=>e.map(n=>t.eval({parent:r,variables:{$this:n}},[n])).flat(),repeat:Y,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,xe(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,xe(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,xe(r));return ft([...e,...n])},combine:(r,e,t)=>{if(!t)return e;let n=t.eval(r,xe(r));return[...e,...n]},htmlChecks:(r,e,t)=>[v(!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 L(o)?n.eval(r,e):i?i.eval(r,e):[]},toBoolean:(r,e)=>{if(e.length===0)return[];let[{value:t}]=z(e,1);if(typeof t=="boolean")return[{type:l.boolean,value:t}];if(typeof t=="number"&&(t===0||t===1))return h(!!t);if(typeof t=="string"){let n=t.toLowerCase();if(["true","t","yes","y","1","1.0"].includes(n))return h(!0);if(["false","f","no","n","0","0.0"].includes(n))return h(!1)}return[]},convertsToBoolean:(r,e)=>e.length===0?[]:h(I.toBoolean(r,e).length===1),toInteger:(r,e)=>{if(e.length===0)return[];let[{value:t}]=z(e,1);return typeof t=="number"?[{type:l.integer,value:t}]:typeof t=="string"&&/^[+-]?\d+$/.exec(t)?[{type:l.integer,value:parseInt(t,10)}]:typeof t=="boolean"?[{type:l.integer,value:t?1:0}]:[]},convertsToInteger:(r,e)=>e.length===0?[]:h(I.toInteger(r,e).length===1),toDate:(r,e)=>{if(e.length===0)return[];let[{value:t}]=z(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:l.date,value:_e(t)}]:[]},convertsToDate:(r,e)=>e.length===0?[]:h(I.toDate(r,e).length===1),toDateTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=z(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:l.dateTime,value:_e(t)}]:[]},convertsToDateTime:(r,e)=>e.length===0?[]:h(I.toDateTime(r,e).length===1),toDecimal:(r,e)=>{if(e.length===0)return[];let[{value:t}]=z(e,1);return typeof t=="number"?[{type:l.decimal,value:t}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(t)?[{type:l.decimal,value:parseFloat(t)}]:typeof t=="boolean"?[{type:l.decimal,value:t?1:0}]:[]},convertsToDecimal:(r,e)=>e.length===0?[]:h(I.toDecimal(r,e).length===1),toQuantity:(r,e)=>{if(e.length===0)return[];let[{value:t}]=z(e,1);return w(t)?[{type:l.Quantity,value:t}]:typeof t=="number"?[{type:l.Quantity,value:{value:t,unit:"1"}}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(t)?[{type:l.Quantity,value:{value:parseFloat(t),unit:"1"}}]:typeof t=="boolean"?[{type:l.Quantity,value:{value:t?1:0,unit:"1"}}]:[]},convertsToQuantity:(r,e)=>e.length===0?[]:h(I.toQuantity(r,e).length===1),toString:(r,e)=>{if(e.length===0)return[];let[{value:t}]=z(e,1);return t==null?[]:w(t)?[{type:l.string,value:`${t.value} '${t.unit}'`}]:[{type:l.string,value:t.toString()}]},convertsToString:(r,e)=>e.length===0?[]:h(I.toString(r,e).length===1),toTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=z(e,1);if(typeof t=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(t);if(n)return[{type:l.time,value:_e("T"+n[1])}]}return[]},convertsToTime:(r,e)=>e.length===0?[]:h(I.toTime(r,e).length===1),indexOf:(r,e,t)=>N((n,i)=>n.indexOf(i),r,e,t),substring:(r,e,t,n)=>N((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)=>N((n,i)=>n.startsWith(i),r,e,t),endsWith:(r,e,t)=>N((n,i)=>n.endsWith(i),r,e,t),contains:(r,e,t)=>N((n,i)=>n.includes(i),r,e,t),upper:(r,e)=>N(t=>t.toUpperCase(),r,e),lower:(r,e)=>N(t=>t.toLowerCase(),r,e),replace:(r,e,t,n)=>N((i,o,s)=>i.replaceAll(o,s),r,e,t,n),matches:(r,e,t)=>N((n,i)=>!!new RegExp(i).exec(n),r,e,t),replaceMatches:(r,e,t,n)=>N((i,o,s)=>i.replaceAll(new RegExp(o,"g"),s.replaceAll(/\$\{(\w+)\}/g,"$<$1>")),r,e,t,n),length:(r,e)=>N(t=>t.length,r,e),toChars:(r,e)=>N(t=>t?t.split(""):void 0,r,e),encode:Y,decode:Y,escape:Y,unescape:Y,trim:Y,split:Y,join:(r,e,t)=>{let n=t?.eval(r,xe(r))[0]?.value??"";if(typeof n!="string")throw new Error("Separator must be a string.");return[{type:l.string,value:e.map(i=>i.value?.toString()??"").join(n)}]},abs:(r,e)=>Q(Math.abs,r,e),ceiling:(r,e)=>Q(Math.ceil,r,e),exp:(r,e)=>Q(Math.exp,r,e),floor:(r,e)=>Q(Math.floor,r,e),ln:(r,e)=>Q(Math.log,r,e),log:(r,e,t)=>Q((n,i)=>Math.log(n)/Math.log(i),r,e,t),power:(r,e,t)=>Q(Math.pow,r,e,t),round:(r,e,...t)=>Q((n,i=0)=>{if(typeof i!="number"||i<0)throw new Error("Invalid precision provided to round()");let o=Math.pow(10,i);return Math.round(n*o)/o},r,e,...t),sqrt:(r,e)=>Q(Math.sqrt,r,e),truncate:(r,e)=>Q(t=>t|0,r,e),children:Y,descendants:Y,trace:(r,e,t)=>e,now:()=>[{type:l.dateTime,value:new Date().toISOString()}],timeOfDay:()=>[{type:l.time,value:new Date().toISOString().substring(11)}],today:()=>[{type:l.date,value:new Date().toISOString().substring(0,10)}],between:(r,e,t,n,i)=>{let o=I.toDateTime(r,t.eval(r,e));if(o.length===0)throw new Error("Invalid start date");let s=I.toDateTime(r,n.eval(r,e));if(s.length===0)throw new Error("Invalid end date");let a=i.eval(r,e)[0]?.value;if(a!=="years"&&a!=="months"&&a!=="days")throw new Error("Invalid units");let c=gt(o[0].value,s[0].value);return[{type:l.Quantity,value:{value:c[a],unit:a}}]},is:(r,e,t)=>{let n="";return t instanceof j?n=t.name:t instanceof ae&&(n=t.left.name+"."+t.right.name),n?e.map(i=>({type:l.boolean,value:ht(i,n)})):[]},not:(r,e)=>I.toBoolean(r,e).map(t=>({type:l.boolean,value:!t.value})),resolve:(r,e)=>e.map(t=>{let n=t.value,i;if(typeof n=="string")i=n;else if(typeof n=="object"){let o=n;if(o.resource)return v(o.resource);o.reference?i=o.reference:o.type&&o.identifier&&(i=`${o.type}?identifier=${o.identifier.system}|${o.identifier.value}`)}if(i?.includes("?")){let[o]=i.split("?");return{type:o,value:{resourceType:o}}}if(i?.includes("/")){let[o,s]=i.split("/");return{type:o,value:{resourceType:o,id:s}}}return{type:l.BackboneElement,value:void 0}}).filter(t=>!!t.value),as:(r,e)=>e,type:(r,e)=>e.map(({value:t})=>typeof t=="boolean"?{type:l.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof t=="number"?{type:l.BackboneElement,value:{namespace:"System",name:"Integer"}}:O(t)?{type:l.BackboneElement,value:{namespace:"FHIR",name:t.resourceType}}:{type:l.BackboneElement,value:null}),conformsTo:(r,e,t)=>{let n=t.eval(r,e)[0].value;if(!n.startsWith("http://hl7.org/fhir/StructureDefinition/"))throw new Error("Expected a StructureDefinition URL");let i=n.replace("http://hl7.org/fhir/StructureDefinition/","");return e.map(o=>({type:l.boolean,value:o.value?.resourceType===i}))},getResourceKey:(r,e)=>{let t=e[0].value;return t?.id?[{type:l.id,value:t.id}]:[]},getReferenceKey:(r,e,t)=>{let n=e[0].value;if(!n?.reference)return[];let i="";return t instanceof j&&(i=t.name),i&&!n.reference.startsWith(i+"/")?[]:[{type:l.id,value:me(n)}]},extension:(r,e,t)=>{let n=t.eval(r,e)[0].value,i=e?.[0]?.value;if(i){let o=ne(i,n);if(o)return[{type:l.Extension,value:o}]}return[]}};function N(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=z(t,1);if(typeof i!="string")throw new Error("String function cannot be called with non-string");let o=n.map(a=>a?.eval(e,t)[0]?.value),s=r(i,...o);return s===void 0?[]:Array.isArray(s)?s.map(v):[v(s)]}function Q(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=z(t,1),o=w(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(d=>d.eval(e,t)[0]?.value)),c=o?l.Quantity:t[0].type,u=o?{...i,value:a}:a;return[{type:c,value:u}]}function z(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 xe(r){let e=r;for(;e.parent?.variables.$this;)e=e.parent;return[e.variables.$this]}var Le=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()}},j=class{constructor(e){this.name=e}eval(e,t){if(this.name==="$this")return t;let n=this.getVariable(e);if(n)return[n];if(this.name.startsWith("%"))throw new Error(`Undefined variable ${this.name}`);return t.flatMap(i=>this.evalValue(i)).filter(i=>i?.value!==void 0)}getVariable(e){let t=e.variables[this.name];if(t!==void 0)return t;if(e.parent)return this.getVariable(e.parent)}evalValue(e){let t=e.value;if(!(!t||typeof t!="object"))return O(t,this.name)?e:P(e,this.name)}toString(){return this.name}},St=class{eval(){return[]}toString(){return"{}"}},bt=class extends it{constructor(e,t,n){super(e,t),this.impl=n}eval(e,t){return this.impl(this.child.eval(e,t))}toString(){return this.operator+this.child.toString()}},ce=class extends te{constructor(e,t){super("as",e,t)}eval(e,t){return I.ofType(e,this.left.eval(e,t),this.right)}},C=class extends te{},V=class extends C{constructor(e,t,n,i){super(e,t,n),this.impl=i}eval(e,t){let n=this.left.eval(e,t);if(n.length!==1)return[];let i=this.right.eval(e,t);if(i.length!==1)return[];let o=n[0].value,s=i[0].value,a=w(o)?o.value:o,c=w(s)?s.value:s,u=this.impl(a,c);return typeof u=="boolean"?h(u):w(o)?[{type:l.Quantity,value:{...o,value:u}}]:[v(u)]}},Et=class extends te{constructor(e,t){super("&",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t),o=[...n,...i];return o.length>0&&o.every(s=>typeof s.value=="string")?[{type:l.string,value:o.map(s=>s.value).join("")}]:o}},Rt=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 h(n.some(o=>o.value===i[0].value))}},Ct=class extends C{constructor(e,t){super("in",e,t)}eval(e,t){let n=G(this.left.eval(e,t)),i=this.right.eval(e,t);return n?h(i.some(o=>$e(n,o)[0].value)):[]}},ae=class extends te{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()}`}},ve=class extends te{constructor(e,t){super("|",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return ft([...n,...i])}},Pt=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 qn(n,i)}},wt=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 jn(n,i)}},At=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 Ir(n,i)}},Ot=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(Ir(n,i))}},Te=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 h(ht(n[0],i))}},It=class extends C{constructor(e,t){super("and",e,t)}eval(e,t){let n=G(this.left.eval(e,t),"boolean"),i=G(this.right.eval(e,t),"boolean");return n?.value===!0&&i?.value===!0?h(!0):n?.value===!1||i?.value===!1?h(!1):[]}},kt=class extends C{constructor(e,t){super("or",e,t)}eval(e,t){let n=G(this.left.eval(e,t),"boolean"),i=G(this.right.eval(e,t),"boolean");return n?.value===!1&&i?.value===!1?h(!1):n?.value||i?.value?h(!0):[]}},Vt=class extends C{constructor(e,t){super("xor",e,t)}eval(e,t){let n=G(this.left.eval(e,t),"boolean"),i=G(this.right.eval(e,t),"boolean");return!n||!i?[]:h(n.value!==i.value)}},Dt=class extends C{constructor(e,t){super("implies",e,t)}eval(e,t){let n=G(this.left.eval(e,t),"boolean"),i=G(this.right.eval(e,t),"boolean");return i?.value===!0||n?.value===!1?h(!0):!n||!i?[]:h(!1)}},Z=class{constructor(e,t){this.name=e,this.args=t}eval(e,t){let n=I[this.name];if(!n)throw new Error("Unrecognized function: "+this.name);return n(e,t,...this.args)}toString(){return`${this.name}(${this.args.map(e=>e.toString()).join(", ")})`}},Se=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 gs=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],xs={"'":"'",'"':'"',"`":"`",r:"\r",n:`
|
|
2
|
-
`,t:" ",f:"\f","\\":"\\"},
|
|
3
|
-
`))}consumeString(e){this.advance();let t="",n;for(;n=this.consumeChar(e);)t+=n;let i=this.buildToken(e==="`"?"Symbol":"String",t);return this.advance(),i}consumeChar(e){let t=this.curr();if(t==="\\"){this.advance();let n=this.curr(),i=
|
|
4
|
-
`?(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 vs(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&gs.includes(r.value)))}var ze=["true","false"],Je=["!=","!~","<=",">=","{}","->"];function pi(r){return new ue(r,ze,Je).tokenize()}var g={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},Ts={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},Ss={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new Se(e,t)},precedence:g.Indexer},bs={parse(r,e){if(!(e instanceof j))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new Z(e.name,t)},precedence:g.FunctionCall};function Es(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 Ke(){return new ot().registerPrefix("String",{parse:(r,e)=>new U({type:l.string,value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new U({type:l.dateTime,value:_e(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new U({type:l.Quantity,value:Es(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new U({type:e.value.includes(".")?l.decimal:l.integer,value:parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new U({type:l.boolean,value:!0})}).registerPrefix("false",{parse:()=>new U({type:l.boolean,value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new j(e.value)}).registerPrefix("{}",{parse:()=>new St}).registerPrefix("(",Ts).registerInfix("[",Ss).registerInfix("(",bs).prefix("+",g.UnaryAdd,(r,e)=>new bt("+",e,t=>t)).prefix("-",g.UnarySubtract,(r,e)=>new V("-",e,e,(t,n)=>-n)).infixLeft(".",g.Dot,(r,e,t)=>new ae(r,t)).infixLeft("/",g.Divide,(r,e,t)=>new V("/",r,t,(n,i)=>n/i)).infixLeft("*",g.Multiply,(r,e,t)=>new V("*",r,t,(n,i)=>n*i)).infixLeft("+",g.Add,(r,e,t)=>new V("+",r,t,(n,i)=>n+i)).infixLeft("-",g.Subtract,(r,e,t)=>new V("-",r,t,(n,i)=>n-i)).infixLeft("|",g.Union,(r,e,t)=>new ve(r,t)).infixLeft("=",g.Equals,(r,e,t)=>new Pt(r,t)).infixLeft("!=",g.NotEquals,(r,e,t)=>new wt(r,t)).infixLeft("~",g.Equivalent,(r,e,t)=>new At(r,t)).infixLeft("!~",g.NotEquivalent,(r,e,t)=>new Ot(r,t)).infixLeft("<",g.LessThan,(r,e,t)=>new V("<",r,t,(n,i)=>n<i)).infixLeft("<=",g.LessThanOrEquals,(r,e,t)=>new V("<=",r,t,(n,i)=>n<=i)).infixLeft(">",g.GreaterThan,(r,e,t)=>new V(">",r,t,(n,i)=>n>i)).infixLeft(">=",g.GreaterThanOrEquals,(r,e,t)=>new V(">=",r,t,(n,i)=>n>=i)).infixLeft("&",g.Ampersand,(r,e,t)=>new Et(r,t)).infixLeft("and",g.And,(r,e,t)=>new It(r,t)).infixLeft("as",g.As,(r,e,t)=>new ce(r,t)).infixLeft("contains",g.Contains,(r,e,t)=>new Rt(r,t)).infixLeft("div",g.Divide,(r,e,t)=>new V("div",r,t,(n,i)=>n/i|0)).infixLeft("in",g.In,(r,e,t)=>new Ct(r,t)).infixLeft("is",g.Is,(r,e,t)=>new Te(r,t)).infixLeft("mod",g.Modulo,(r,e,t)=>new V("mod",r,t,(n,i)=>n%i)).infixLeft("or",g.Or,(r,e,t)=>new kt(r,t)).infixLeft("xor",g.Xor,(r,e,t)=>new Vt(r,t)).infixLeft("implies",g.Implies,(r,e,t)=>new Dt(r,t))}var Rs=Ke();function Mt(r){return new Le(r,Rs.construct(pi(r)).consumeAndParse())}function Bd(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]=v(t[n]))}return E(r,t).map(n=>n.value)}function E(r,e,t={},n=void 0){let i;if(typeof r=="string"){let o=n?.get(r);i=o??Mt(r),n&&!o&&n.set(r,i)}else i=r;return i.eval({variables:t},e).map(o=>({type:o.type,value:o.value?.valueOf()}))}function Qd(r){let e=[];for(let t of r)t.type===l.Range?e.push([t.value?.low?.value,t.value?.high?.value]):typeof t.value=="number"&&e.push([t.value,t.value]);return e}function fi(r){let e=[];for(let t of r){let n=mt(t.value);n&&e.push(n)}return e}function hi(r){let e=[];for(let t of r){let n=si(t);n&&e.push(n)}return e}function mi(r){let e=[];for(let t of r){let{value:n}=t;n&&(vt(n)?e.push(n):W(n)?e.push(n.reference):He(n)?e.push(D(n)):typeof n.identifier=="object"&&e.push(`identifier:${n.identifier.system}|${n.identifier.value}`))}return e}function zd(r){let e=[];for(let t of r){let{value:n}=t;typeof n=="number"?e.push({value:n}):w(n)&&e.push(n)}return e}function Jd(r){let e=[];for(let t of r)vt(t.value)&&e.push(t.value);return e}function yi(r,e={}){let t=[];for(let n of r)Cs(e,t,n);return t}function Cs(r,e,t){let{type:n,value:i}=t;switch(n){case l.Identifier:Ps(e,r,i);break;case l.CodeableConcept:ws(e,r,i);break;case l.Coding:gi(e,r,i);break;case l.ContactPoint:As(e,r,i);break;default:be(e,r,void 0,i?.toString())}}function Ps(r,e,t){t?.type?.text&&be(r,e,e.textSearchSystem,t.type.text),be(r,e,t?.system,t?.value)}function ws(r,e,t){if(t?.text&&be(r,e,e.textSearchSystem,t.text),t?.coding)for(let n of t.coding)gi(r,e,n)}function gi(r,e,t){t&&(t.display&&be(r,e,e.textSearchSystem,t.display),be(r,e,t.system,t.code))}function As(r,e,t){t&&be(r,e,t.system,t.value?.toLocaleLowerCase())}function be(r,e,t,n){(t||n)&&!r.some(i=>i.system===t&&i.value===n)&&r.push({system:t,value:n&&e.caseInsensitive?n.toLocaleLowerCase():n})}var np=20,ip=1e3,f={EQUALS:"eq",NOT_EQUALS:"ne",GREATER_THAN:"gt",LESS_THAN:"lt",GREATER_THAN_OR_EQUALS:"ge",LESS_THAN_OR_EQUALS:"le",STARTS_AFTER:"sa",ENDS_BEFORE:"eb",APPROXIMATELY:"ap",CONTAINS:"contains",STARTS_WITH:"sw",EXACT:"exact",TEXT:"text",NOT:"not",ABOVE:"above",BELOW:"below",IN:"in",NOT_IN:"not-in",OF_TYPE:"of-type",MISSING:"missing",PRESENT:"present",IDENTIFIER:"identifier",ITERATE:"iterate"},Si={contains:f.CONTAINS,exact:f.EXACT,above:f.ABOVE,below:f.BELOW,text:f.TEXT,not:f.NOT,in:f.IN,"not-in":f.NOT_IN,"of-type":f.OF_TYPE,missing:f.MISSING,identifier:f.IDENTIFIER,iterate:f.ITERATE},jr={eq:f.EQUALS,ne:f.NOT_EQUALS,lt:f.LESS_THAN,le:f.LESS_THAN_OR_EQUALS,gt:f.GREATER_THAN,ge:f.GREATER_THAN_OR_EQUALS,sa:f.STARTS_AFTER,eb:f.ENDS_BEFORE,ap:f.APPROXIMATELY,sw:f.STARTS_WITH};function Xe(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 Os(i,o)}function Os(r,e){let t={resourceType:r};for(let[n,i]of e)Is(t,n,i);return t}function Is(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=Me(r.filters,{code:e,operator:f.EQUALS,value:t});return}switch(n){case"_sort":ks(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=xi(t);i==="iterate"&&(s.modifier=f.ITERATE),r.include=Me(r.include,s);break}case"_revinclude":{let s=xi(t);i==="iterate"&&(s.modifier=f.ITERATE),r.revInclude=Me(r.revInclude,s);break}case"_fields":case"_elements":r.fields=t.split(",");break;case"_type":r.types=t.split(",");break;case"_format":r.format=t;break;case"_pretty":r.pretty=t==="true";break;default:{let s=F.types[r.resourceType]?.searchParams?.[n];s?r.filters=Me(r.filters,Ds(s,i,t)):r.filters=Me(r.filters,Ms(n,i,t))}}}}function ks(r,e){for(let t of e.split(",")){let n,i=!1;t.startsWith("-")?(n=t.substring(1),i=!0):n=t,r.sortRules||(r.sortRules=[]),r.sortRules.push({code:n,descending:i})}}var Vs=[f.MISSING,f.PRESENT];function Ds(r,e,t){if(Vs.includes(e))return{code:r.code,operator:e,value:t};switch(r.type){case"number":case"date":case"quantity":{let{operator:n,value:i}=_s(t);if(!vi(r,i))throw new p(b(`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(!vi(r,t))throw new p(b(`Invalid format for ${r.type} search parameter: ${t}`));return{code:r.code,operator:Ls(e),value:t};default:throw new Error("Unrecognized search parameter type: "+r.type)}}function Ms(r,e,t){let n=f.EQUALS;if(e)n=e;else if(t.length>=2){let i=t.substring(0,2);i in jr&&(t.length===2||t.at(2)?.match(/\d/))&&(n=i,t=t.substring(i.length))}return{code:r,operator:n,value:t}}function _s(r){let e=r.substring(0,2),t=jr[e];return t?{operator:t,value:r.substring(2)}:{operator:f.EQUALS,value:r}}function Ls(r){return Si[r]??f.EQUALS}function xi(r){let e=r.split(":");if(e.includes("*"))throw new p(b("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new p(b(`Invalid include value '${r}': must be of the form ResourceType:search-parameter`));if(e.length===2)return{resourceType:e[0],searchParam:e[1]};if(e.length===3)return{resourceType:e[0],searchParam:e[1],targetType:e[2]};throw new p(b(`Invalid include value '${r}'`))}function vi(r,e){switch(r.type){case"date":return De(e);default:return!0}}var Fs=/{{([^{}]+)}}/g;function op(r,e){return r=r.replaceAll(Fs,(t,n)=>{let i=E(n,[],e);return i.length!==1?"":di(i[0])}),Xe(r)}function sp(r){let e=[];return r.fields&&e.push("_fields="+r.fields.join(",")),r.filters&&r.filters.forEach(t=>e.push(Ns(t))),r.sortRules&&r.sortRules.length>0&&e.push(Us(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.types&&r.types.length>0&&e.push("_type="+r.types.join(",")),r.include&&r.include.forEach(t=>e.push(Ti("_include",t))),r.revInclude&&r.revInclude.forEach(t=>e.push(Ti("_revinclude",t))),e.length===0?"":(Tt(e),"?"+e.join("&"))}function Ns(r){let e=r.operator in Si?":"+r.operator:"",t=r.operator!==f.EQUALS&&r.operator in jr?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function Us(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function Ti(r,e){return r+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function Ye(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 _t(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=F.types[e.resourceType]?.searchParams?.[t.code];if(!n)return!1;let i=E(n.expression,[v(r)]);if(t.operator===f.MISSING||t.operator===f.PRESENT)return Ws(i,t);switch(n.type){case"reference":return qs(i,t);case"string":case"uri":return Gs(i,t);case"token":return js(i,t);case"date":return Qs(i,t);default:return!1}}function Ws(r,e){let t=r.length>0;return(e.operator===f.MISSING&&e.value==="false"||e.operator===f.PRESENT&&e.value==="true")===t}function qs(r,e){let t=Lt(e.operator);if(e.value===""&&r.length===0)return e.operator===f.EQUALS;let n=mi(r);for(let i of Ye(e.value)){let o=n.includes(i);if(!o&&e.code==="_compartment"&&(o=n.some(s=>s?.endsWith("/"+i))),o)return!t}return t}function js(r,e){let t=yi(r),n=Ye(e.value),i=Lt(e.operator);for(let o of t)for(let s of n)if($s(o,s))return!i;return i}function $s(r,e){if(e.includes("|")){let[t,n]=e.split("|").map(i=>i.toLowerCase());return!t&&!n?!1:t?r.system?.toLowerCase()===t&&(!n||r.value?.toLowerCase()===n):!r.system&&r.value?.toLowerCase()===n}return r.value?.toLowerCase()===e.toLowerCase()}function Gs(r,e){let t=hi(r),n=Ye(e.value),i=Lt(e.operator);for(let o of t)for(let s of n)if(Hs(o,s))return!i;return i}function Hs(r,e){return r.toLowerCase().includes(e.toLowerCase())}function Qs(r,e){let t=fi(r),n=Ye(e.value),i=Lt(e.operator);for(let o of t)for(let s of n)if(zs(o,e.operator,s))return!i;return i}function zs(r,e,t){if(!r)return!1;let n=mt(t);if(!n)return!1;let i=r.start??"0000",o=r.end??"9999",s=n.start,a=n.end;switch(e){case f.APPROXIMATELY:case f.EQUALS:case f.NOT_EQUALS:return i<a&&o>s;case f.LESS_THAN:return i<s;case f.GREATER_THAN:return o>a;case f.LESS_THAN_OR_EQUALS:return i<=a;case f.GREATER_THAN_OR_EQUALS:return o>=s;case f.STARTS_AFTER:return i>a;case f.ENDS_BEFORE:return o<s;default:return!1}}function Lt(r){return r===f.NOT_EQUALS||r===f.NOT}var Js={resourceType:"*"},Ks=["DomainConfiguration","JsonWebKey","Login"],Xs=["PasswordChangeRequest","UserSecurityRequest","Project","ProjectMembership","User"],Ee={READ:"read",VREAD:"vread",UPDATE:"update",DELETE:"delete",HISTORY:"history",CREATE:"create",SEARCH:"search"},Ys=[Ee.READ,Ee.VREAD,Ee.HISTORY,Ee.SEARCH];function Tp(r,e){return bi(r,Ee.SEARCH,e)}function Sp(r,e){return Ks.includes(e)?!1:bi(r,Ee.UPDATE,e)}function bi(r,e,t){return!!r.resource?.some(n=>Ei(n,t,e))}function bp(r,e){return!!Zs(e,Ee.UPDATE,r)}function Zs(r,e,t){return t?t.resource?.find(n=>ea(r,e,n)):Js}function ea(r,e,t){let n=r.resourceType;return Ei(t,n,e)?n==="Binary"?!0:!(t.compartment&&!r.meta?.compartment?.some(i=>i.reference===t.compartment?.reference)||t.criteria&&!_t(r,Xe(t.criteria))):!1}function Ei(r,e,t){return r.resourceType!==e&&(r.resourceType!=="*"||Xs.includes(e))?!1:r.interaction?r.interaction.includes(t):!r.readonly||Ys.includes(t)}function ta(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 Ft(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 Rp(r){return Ft(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/[=]{1,2}$/,"")}function Ri(r){r=r.padEnd(r.length+(4-r.length%4)%4,"=");let e=r.replace(/-/g,"+").replace(/_/g,"/");return ta(e)}function $r(){let r=new Uint32Array(28);return crypto.getRandomValues(r),Yn(r.buffer)}async function Ci(r){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(r))}function Re(){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 ra(r){let e={};r=ye(r);for(let i of r.entry||[]){let o=i.resource;if(!o)continue;o.meta!==void 0&&(delete o.meta.author,delete o.meta.compartment,delete o.meta.lastUpdated,delete o.meta.project,delete o.meta.versionId,Object.keys(o.meta).length===0&&delete o.meta);let s=o?.id;s&&(e[s]=Re(),i.fullUrl="urn:uuid:"+e[s],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)=>na(i,o,e),2);return ia(JSON.parse(n))}function na(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 ia(r){let e=sa(r),{sorted:t,cycles:n}=oa(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}}var Fe={NotVisited:"NotVisited",Visiting:"Visiting",Visited:"Visited"};function oa(r){let e=[],t={},n=[];for(let o of Object.keys(r))t[o]=Fe.NotVisited;function i(o,s){if(t[o]===Fe.Visited)return!0;if(t[o]===Fe.Visiting){let c=s.lastIndexOf(o);return c!==-1&&n.push(s.slice(c)),!0}t[o]=Fe.Visiting,s.push(o);let a=!1;for(let c of r[o])i(c,s)||(a=!0);return t[o]=Fe.Visited,s.pop(),e.unshift(o),!a}for(let o in r)t[o]===Fe.NotVisited&&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(W(n)){let i=n.reference;i.startsWith("urn:uuid:")&&e(i)}else Pi(n,e)}}function sa(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 kp(r){r=ye(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=Re());return ra(e)}function Vp(r,e,t){return r.entry?.find(({resource:n})=>n?.resourceType===e&&n?.id===t)?.resource}var A={CSS:"text/css",DICOM:"application/dicom",FAVICON:"image/vnd.microsoft.icon",FHIR_JSON:"application/fhir+json",FORM_URL_ENCODED:"application/x-www-form-urlencoded",HL7_V2:"x-application/hl7-v2+er7",HTML:"text/html",JAVASCRIPT:"text/javascript",JSON:"application/json",JSON_PATCH:"application/json-patch+json",JWT:"application/jwt",MULTIPART_FORM_DATA:"multipart/form-data",PNG:"image/png",SCIM_JSON:"application/scim+json",SVG:"image/svg+xml",TEXT:"text/plain",TYPESCRIPT:"text/typescript",PING:"x-application/ping",XML:"text/xml",CDA_XML:"application/cda+xml"};var Gr=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={}}},J=class{constructor(){this.emitter=new Gr}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 Hr={"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"},aa=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],Qr=["DiagnosticReport-update"];function wi(r){return Qr.includes(r)}function Ai(r){if(Qr.includes(r))throw new p(y(`'context.version' is required for '${r}'.`))}var ca={"Patient-open":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"Patient-close":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"ImagingStudy-open":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"ImagingStudy-close":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"Encounter-open":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"Encounter-close":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"DiagnosticReport-open":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-close":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-select":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},select:{resourceType:"*",reference:!0,manyAllowed:!0}},"DiagnosticReport-update":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},updates:{resourceType:"Bundle"}},syncerror:{operationoutcome:{resourceType:"OperationOutcome"}}};function ua(r){return aa.includes(r)}function Oi(r){return!!r.endpoint}function zr(r){if(!Ut(r))throw new p(y("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 Oi(r)&&(o.endpoint=r.endpoint),new URLSearchParams(o).toString()}function Ut(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(!Hr[o])return!1;return!(Oi(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function la(r,e,t,n){if(typeof e!="object")throw new p(y(`context[${t}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.id&&typeof e.id=="string"))throw new p(y(`context[${t}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new p(y(`context[${t}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!ua(e.resourceType))throw new p(y(`context[${t}] is invalid. Resource must contain a valid FHIRcast resource type. Resource type is not a known resource type.`));if(i&&e.resourceType!==i)throw new p(y(`context[${t}] is invalid. context[${t}] for the '${r}' event should contain resource of type ${i}.`))}}function da(r,e,t,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),n.reference){if(!W(e.reference))throw new p(y(`context[${t}] is invalid. Expected key '${e.key}' to be a reference.`))}else la(r,e.resource,t,n)}function pa(r,e){let t=new Map,n=ca[r];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new p(y(`Key '${o}' not found for event '${r}'. Make sure to add only valid keys.`));da(r,e[i],i,n[o],t)}for(let[i,o]of Object.entries(n)){if(!(o.optional||t.has(i)))throw new p(y(`Missing required key '${i}' on context for '${r}' event.`));if(!o.manyAllowed&&(t.get(i)??0)>1)throw new p(y(`${t.get(i)} context entries with key '${i}' found for the '${r}' event when schema only allows for 1.`))}}function Jr(r,e,t,n){if(!(r&&typeof r=="string"))throw new p(y("Must provide a topic."));if(!Hr[e])throw new p(y(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(Hr).join(", ")}`));if(typeof t!="object")throw new p(y("context must be a context object or array of context objects."));if(Qr.includes(e)&&!n)throw new p(y(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(t)?t:[t];return pa(e,i),{timestamp:new Date().toISOString(),id:Re(),event:{"hub.topic":r,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var Nt=class extends J{constructor(e){if(super(),this.subRequest=e,!e.endpoint)throw new p(y("Subscription request should contain an endpoint."));if(!Ut(e))throw new p(y("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 fa(r){return JSON.parse(Ri(r))}function Ii(r){return r.split(".").length===3}function Bt(r){let[e,t,n]=r.split(".");return fa(t)}function ki(r){try{return typeof Bt(r).login_id=="string"}catch{return!1}}function Vi(r){try{let t=Bt(r).exp;return typeof t=="number"?t*1e3:void 0}catch{return}}var Wt=class{constructor(e){this.medplum=e}async get(e){return this.medplum.get(`keyvalue/v1/${e}`)}async set(e,t){await this.medplum.put(`keyvalue/v1/${e}`,t,A.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var Di;Di=Symbol.toStringTag;var M=class{constructor(e){this[Di]="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 Ze=class{constructor(e){this.storage=e??(typeof localStorage<"u"?localStorage:new Kr)}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?xt(t):void 0)}},Kr=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]}},Mi=class extends Ze{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 Ne={Event:typeof globalThis.Event<"u"?globalThis.Event:void 0,ErrorEvent:void 0,CloseEvent:void 0},_i=!1;function ha(){if(typeof globalThis.Event>"u")throw new Error("Unable to lazy init events for ReconnectingWebSocket. globalThis.Event is not defined yet");Ne.Event=globalThis.Event,Ne.ErrorEvent=class extends Event{constructor(e,t){super("error",t),this.message=e.message,this.error=e}},Ne.CloseEvent=class extends Event{constructor(t=1e3,n="",i){super("close",i);this.wasClean=!0;this.code=t,this.reason=n}}}function ma(r,e){if(!r)throw new Error(e)}function qt(r){return new r.constructor(r.type,r)}var Ce={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},Li=!1,jt=class r extends J{constructor(t,n,i={}){_i||(ha(),_i=!0);super();this._retryCount=-1;this._shouldReconnect=!0;this._connectLock=!1;this._closeCalled=!1;this._messageQueue=[];this._debugLogger=console.log.bind(console);this.onclose=null;this.onerror=null;this.onmessage=null;this.onopen=null;this._handleOpen=t=>{this._debug("open event");let{minUptime:n=Ce.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),n),ma(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(qt(t))};this._handleMessage=t=>{this._debug("message event"),this.onmessage&&this.onmessage(t),this.dispatchEvent(qt(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(qt(t)),this._connect()};this._handleClose=t=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(t),this.dispatchEvent(qt(t))};this._url=t,this._protocols=n,this._options=i,this._options.startClosed&&(this._shouldReconnect=!1),this._options.binaryType?this._binaryType=this._options.binaryType:this._binaryType="blob",this._options.debugLogger&&(this._debugLogger=this._options.debugLogger),this._connect()}static get CONNECTING(){return 0}static get OPEN(){return 1}static get CLOSING(){return 2}static get CLOSED(){return 3}get CONNECTING(){return r.CONNECTING}get OPEN(){return r.OPEN}get CLOSING(){return r.CLOSING}get CLOSED(){return r.CLOSED}get binaryType(){return this._ws?this._ws.binaryType:this._binaryType}set binaryType(t){this._binaryType=t,this._ws&&(this._ws.binaryType=t)}get retryCount(){return Math.max(this._retryCount,0)}get bufferedAmount(){return this._messageQueue.reduce((n,i)=>(typeof i=="string"?n+=i.length:i instanceof Blob?n+=i.size:n+=i.byteLength,n),0)+(this._ws?.bufferedAmount??0)}get extensions(){return this._ws?.extensions??""}get protocol(){return this._ws?.protocol??""}get readyState(){return this._ws?this._ws.readyState:this._options.startClosed?r.CLOSED:r.CONNECTING}get url(){return this._ws?this._ws.url:""}get shouldReconnect(){return this._shouldReconnect}close(t=1e3,n){if(this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),!this._ws){this._debug("close enqueued: no ws instance");return}if(this._ws.readyState===this.CLOSED){this._debug("close: already closed");return}this._ws.close(t,n)}reconnect(t,n){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED?this._connect():(this._disconnect(t,n),this._connect())}send(t){if(this._ws&&this._ws.readyState===this.OPEN)this._debug("send",t),this._ws.send(t);else{let{maxEnqueuedMessages:n=Ce.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=Ce.reconnectionDelayGrowFactor,minReconnectionDelay:n=Ce.minReconnectionDelay,maxReconnectionDelay:i=Ce.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=Ce.maxRetries,connectionTimeout:n=Ce.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"&&!Li&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),Li=!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 Ne.ErrorEvent(Error(i.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new Ne.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(t=1e3,n){if(this._clearTimeouts(),!!this._ws){this._removeListeners();try{this._ws.close(t,n),this._handleClose(new Ne.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 ya=5e3,et=class extends J{constructor(...e){super(),this.criteria=new Set(e)}getCriteria(){return this.criteria}_addCriteria(e){this.criteria.add(e)}_removeCriteria(e){this.criteria.delete(e)}},Xr=class{constructor(e,t){this.connecting=!1;this.criteria=e,this.emitter=new et(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 Gt))throw new p(y("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(t).toString()}catch{throw new p(y("Not a valid URL"))}let o=n?.ReconnectingWebSocket?new n.ReconnectingWebSocket(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger}):new jt(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger});this.medplum=e,this.ws=o,this.masterSubEmitter=new et,this.criteriaEntries=new Map,this.criteriaEntriesBySubscriptionId=new Map,this.wsClosed=!1,this.pingIntervalMs=n?.pingIntervalMs??ya,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=me(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(me(o.subscription));if(!s){console.warn("Received notification for criteria the SubscriptionManager is not listening for");return}s.emitter.dispatchEvent({type:"message",payload:i})}catch(n){console.error(n);let i={type:"error",payload:n};this.masterSubEmitter?.dispatchEvent(i);for(let o of this.getAllCriteriaEmitters())o.dispatchEvent({...i})}}),e.addEventListener("error",()=>{let t={type:"error",payload:new p(Sn(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 ${D(this.medplum.getProfile())}`,channel:{type:"websocket"},criteria:e.criteria})).id);let{parameter:n}=await this.medplum.get(`fhir/R4/Subscription/${t}/$get-ws-binding-token`),i=n?.find(s=>s.name==="token")?.valueString,o=n?.find(s=>s.name==="websocket-url")?.valueUrl;if(!i)throw new p(y("Failed to get token"));if(!o)throw new p(y("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(ie(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!ie(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(Ie(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 Xr(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 et(...Array.from(this.criteriaEntries.keys()))),this.masterSubEmitter}};async function pf({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(!ga(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=Xe(o);if(r.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${r.resourceType}")`),!1;if(!await xa(e,r,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let c=ne(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):_t(r,s)}function ga(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 xa(r,e,t){let n=ne(r,"https://medplum.com/fhir/StructureDefinition/fhir-path-criteria-expression");if(!n?.valueString)return!0;let i=await t(e),o={"%current":v(e),"%previous":v(i??{})};return E(n.valueString,[v(e)],o)?.[0]?.value===!0}var Yr="4.4.0-1ce85f8ea",qf="medplum-cli",va=A.FHIR_JSON+", */*; q=0.1",Ta="https://api.medplum.com/",Sa=1e3,ba=6e4,Ea=0,Ra=3e5,Ca="Binary/",Fi={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},Ue={ClientCredentials:"client_credentials",AuthorizationCode:"authorization_code",RefreshToken:"refresh_token",JwtBearer:"urn:ietf:params:oauth:grant-type:jwt-bearer",TokenExchange:"urn:ietf:params:oauth:grant-type:token-exchange"},Pa={AccessToken:"urn:ietf:params:oauth:token-type:access_token",RefreshToken:"urn:ietf:params:oauth:token-type:refresh_token",IdToken:"urn:ietf:params:oauth:token-type:id_token",Saml1Token:"urn:ietf:params:oauth:token-type:saml1",Saml2Token:"urn:ietf:params:oauth:token-type:saml2"},jf={ClientSecretBasic:"client_secret_basic",ClientSecretPost:"client_secret_post",ClientSecretJwt:"client_secret_jwt",PrivateKeyJwt:"private_key_jwt",None:"none"},wa={JwtBearer:"urn:ietf:params:oauth:client-assertion-type:jwt-bearer"},Gt=class extends J{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??Aa(),this.storage=t?.storage??new Ze,this.createPdfImpl=t?.createPdf,this.baseUrl=Ur(t?.baseUrl??Ta),this.fhirBaseUrl=q(this.baseUrl,t?.fhirUrlPath??"fhir/R4"),this.authorizeUrl=q(this.baseUrl,t?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=q(this.baseUrl,t?.tokenUrl??"oauth2/token"),this.logoutUrl=q(this.baseUrl,t?.logoutUrl??"oauth2/logout"),this.fhircastHubUrl=q(this.baseUrl,t?.fhircastHubUrl??"fhircast/STU3"),this.clientId=t?.clientId??"",this.clientSecret=t?.clientSecret??"",this.credentialsInHeader=t?.authCredentialsMethod==="header",this.defaultHeaders=t?.defaultHeaders??{},this.onUnauthenticated=t?.onUnauthenticated,this.refreshGracePeriod=t?.refreshGracePeriod??Ra,this.cacheTime=t?.cacheTime??(typeof window>"u"?Ea:ba),this.cacheTime>0?this.requestCache=new we(t?.resourceCacheSize??Sa):this.requestCache=void 0,t?.autoBatchTime?(this.autoBatchTime=t.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0),t?.accessToken&&this.setAccessToken(t.accessToken),this.storage.getInitPromise===void 0?(t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initPromise=Promise.resolve(),this.dispatchEvent({type:"storageInitialized"})):(this.initComplete=!1,this.initPromise=this.storage.getInitPromise(),this.initPromise.then(()=>{t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initComplete=!0,this.dispatchEvent({type:"storageInitialized"})}).catch(n=>{console.error(n),this.initComplete=!0,this.dispatchEvent({type:"storageInitFailed",payload:{error:n}})})),this.setupStorageListener()}get isInitialized(){return this.initComplete}getInitPromise(){return this.initPromise}async attemptResumeActiveLogin(){let t=this.getActiveLogin();t&&(this.setAccessToken(t.accessToken,t.refreshToken),await this.refreshProfile())}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}getFhircastHubUrl(){return this.fhircastHubUrl}getDefaultHeaders(){return this.defaultHeaders}clear(){this.storage.clear(),typeof window<"u"&&sessionStorage.clear(),this.clearActiveLogin()}clearActiveLogin(){this.storage.setString("activeLogin",void 0),this.requestCache?.clear(),this.accessToken=void 0,this.refreshToken=void 0,this.refreshPromise=void 0,this.accessTokenExpires=void 0,this.sessionDetails=void 0,this.medplumServer=void 0,this.dispatchEvent({type:"change"})}invalidateUrl(t){t=t.toString(),this.requestCache?.delete(t)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(t){let n=q(this.fhirBaseUrl,t);if(this.requestCache)for(let i of this.requestCache.keys())(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache.delete(i)}get(t,n={}){t=t.toString();let i=this.getCacheEntry(t,n);if(i)return i.value;let o;t.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue&&!n.disableAutoBatch?o=new Promise((a,c)=>{this.autoBatchQueue.push({method:"GET",url:t.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:c}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):o=this.request("GET",t,n);let s=new M(o);return this.setCacheEntry(t,s),s}post(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("POST",t,o)}put(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("PUT",t,o)}patch(t,n,i={}){return t=t.toString(),this.setRequestBody(i,n),this.setRequestContentType(i,A.JSON_PATCH),this.invalidateUrl(t),this.request("PATCH",t,i)}delete(t,n){return t=t.toString(),this.invalidateUrl(t),this.request("DELETE",t,n)}async startNewUser(t,n){let{codeChallengeMethod:i,codeChallenge:o}=await this.startPkce();return this.post("auth/newuser",{...t,clientId:t.clientId??this.clientId,codeChallengeMethod:i,codeChallenge:o},void 0,n)}async startNewProject(t,n){return this.post("auth/newproject",t,void 0,n)}async startNewPatient(t,n){return this.post("auth/newpatient",t,void 0,n)}async startLogin(t,n){return this.post("auth/login",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async startGoogleLogin(t,n){return this.post("auth/google",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async ensureCodeChallenge(t){return t.codeChallenge?t:{...t,...await this.startPkce()}}async signOut(){await this.post(this.logoutUrl,{}),this.clear()}async signInWithRedirect(t){let i=new URLSearchParams(window.location.search).get("code");if(!i){await this.requestAuthorization(t);return}return this.processCode(i)}signOutWithRedirect(){window.location.assign(this.logoutUrl)}async signInWithExternalAuth(t,n,i,o,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),window.location.assign(this.getExternalAuthRedirectUri(t,n,i,a,s))}async exchangeExternalAccessToken(t,n){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");return this.fetchTokens({grant_type:Ue.TokenExchange,subject_token_type:Pa.AccessToken,client_id:n,subject_token:t})}getExternalAuthRedirectUri(t,n,i,o,s=!0){let a=new URL(t);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",n),a.searchParams.set("redirect_uri",i),a.searchParams.set("scope",o.scope??"openid profile email"),a.searchParams.set("state",JSON.stringify(o)),s){let{codeChallenge:c,codeChallengeMethod:u}=o;if(!u)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!c)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");a.searchParams.set("code_challenge_method",u),a.searchParams.set("code_challenge",c)}return a.toString()}fhirUrl(...t){return new URL(q(this.fhirBaseUrl,t.join("/")))}fhirSearchUrl(t,n){let i=this.fhirUrl(t);return n&&(i.search=oi(n)),i}search(t,n,i){let o=this.fhirSearchUrl(t,n),s="search-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=this.getBundle(o,i);return this.setCacheEntry(s,c),c}searchOne(t,n,i){let o=this.fhirSearchUrl(t,n);o.searchParams.set("_count","1"),o.searchParams.sort();let s="searchOne-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=new M(this.search(t,o.searchParams,i).then(u=>u.entry?.[0]?.resource));return this.setCacheEntry(s,c),c}searchResources(t,n,i){let s="searchResources-"+this.fhirSearchUrl(t,n).toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=new M(this.search(t,n,i).then(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;s.has("_count")||s.set("_count","1000");let 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}}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 Fi;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(Fi));let[o,s]=i.split("/");return!o||!s?new M(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}requestSchema(t){if(Dn(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 st=class{constructor(e,t){this.operator=e,this.child=t}toString(){return`${this.operator}(${this.child.toString()})`}},ne=class{constructor(e,t,n){this.operator=e,this.left=t,this.right=n}toString(){return`(${this.left.toString()} ${this.operator} ${this.right.toString()})`}},at=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 ar(e,this.prefixParselets,this.infixParselets)}},ar=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 Oe=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 fn="http://unitsofmeasure.org",Bc="http://loinc.org",Wc="http://snomed.info/sct",qc="http://www.nlm.nih.gov/research/umls/rxnorm",jc="http://www.ama-assn.org/go/cpt",$c="http://hl7.org/fhir/sid/icd-10",Gc="http://hl7.org/fhir/sid/ndc",hn="http://hl7.org",Hc="http://terminology.hl7.org";var ct="created",cr="gone",ur="not-modified",lr="found",pr="not-found",dr="conflict",fr="unauthorized",mn="forbidden",yn="precondition-failed",gn="multiple-matches",xn="too-many-requests",ut="accepted",vn="server-timeout",Tn="business-rule",zc={resourceType:"OperationOutcome",id:"ok",issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},Jc={resourceType:"OperationOutcome",id:ct,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},Kc={resourceType:"OperationOutcome",id:ur,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},Sn={resourceType:"OperationOutcome",id:pr,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},Ie={resourceType:"OperationOutcome",id:fr,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},bn={...Ie,issue:[...Ie.issue,{severity:"error",code:"expired",details:{text:"Token expired"}}]},hr={...Ie,issue:[...Ie.issue,{severity:"error",code:"invalid",details:{text:"Token not issued for this audience"}}]},Xc={resourceType:"OperationOutcome",id:mn,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},Yc={resourceType:"OperationOutcome",id:cr,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},Zc={resourceType:"OperationOutcome",id:yn,issue:[{severity:"error",code:"processing",details:{text:"Precondition Failed"}}]},eu={resourceType:"OperationOutcome",id:gn,issue:[{severity:"error",code:"multiple-matches",details:{text:"Multiple resources found matching condition"}}]},tu={resourceType:"OperationOutcome",id:xn,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function ru(r){return{resourceType:"OperationOutcome",id:ut,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:r}]}}function b(r,e){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:r},...e?{expression:[e]}:void 0}]}}function nu(r,e){return{resourceType:"OperationOutcome",id:dr,issue:[{severity:"error",code:"conflict",details:{coding:e?[{code:e}]:void 0,text:r}}]}}function y(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"structure",details:{text:r}}]}}function En(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:r.toString()}]}}function iu(r){return{resourceType:"OperationOutcome",id:vn,issue:[{severity:"error",code:"timeout",details:{text:r??"Server timeout"}}]}}function ou(r){let e=r.toString();return{resourceType:"OperationOutcome",id:lr,issue:[{severity:"information",code:"informational",details:{coding:[{system:"urn:ietf:rfc:3986",code:e}],text:"Redirect to "+e}}]}}function su(r,e){return{resourceType:"OperationOutcome",id:Tn,issue:[{severity:"error",code:"business-rule",details:{id:r,text:e}}]}}function ho(r){return!r||typeof r!="object"?!1:r instanceof Error||typeof DOMException<"u"&&r instanceof DOMException?!0:Object.prototype.toString.call(r)==="[object Error]"}function ke(r){return typeof r=="object"&&r!==null&&r.resourceType==="OperationOutcome"}function mr(r){return r.id==="ok"||r.id===ct||r.id===ur||r.id===ut}function au(r){return r.id===ct}function cu(r){return r.id===ut}function uu(r){return r.id===lr}function lu(r){return r.id===pr}function pu(r){return r.id===dr}function du(r){return r.id===cr}function fu(r){return r.id===fr}function hu(r){switch(r.id){case"ok":return 200;case ct:return 201;case ut:return 202;case lr:return 302;case ur:return 304;case fr:return 401;case mn:return 403;case pr:return 404;case dr:return 409;case cr:return 410;case yn:case gn:return 412;case Tn:return 422;case xn:return 429;case vn:return 504;default:return r.issue?.[0]?.code==="exception"?500:400}}function mu(r,e){if(!mr(r)||e===void 0)throw new d(r)}var d=class extends Error{constructor(e,t){super(Rn(e)),this.outcome=e,this.cause=t}};function lt(r){return r instanceof d?r.outcome:ke(r)?r:b(Ve(r))}function Ve(r){return r?typeof r=="string"?r:ho(r)?r.message:ke(r)?Rn(r):typeof r=="object"&&"code"in r&&typeof r.code=="string"?r.code:JSON.stringify(r):"Unknown error"}function Rn(r){let e=r.issue?.map(mo)??[];return e.length>0?e.join("; "):"Unknown error"}function mo(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 he(r,e,t,n,i){let o={severity:r,code:e,details:{text:t},expression:[n]};return i&&(o.diagnostics=JSON.stringify(i)),o}function T(r,e){return he("error","structure",e,r)}function Cn(r,e){return he("error","invariant",`Constraint ${e.key} not met: ${e.description}`,r,{fhirpath:e.expression})}function Pn(r,e,t,n){return he("error","processing",e,r,{...n,error:t})}var yo={"http://hl7.org/fhirpath/System.String":"string"};function gu(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:yo[t.code]??t.code})),e}function go(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 wn(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,go(i,o)])),constraints:[],innerTypes:[]};return e}var An={Element:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]}}},BackboneElement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]}}},Address:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"code"}]},text:{type:[{code:"string"}]},line:{max:9007199254740991,type:[{code:"string"}]},city:{type:[{code:"string"}]},district:{type:[{code:"string"}]},state:{type:[{code:"string"}]},postalCode:{type:[{code:"string"}]},country:{type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Age:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Annotation:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"author[x]":{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Organization"]},{code:"string"}]},time:{type:[{code:"dateTime"}]},text:{min:1,type:[{code:"markdown"}]}}},Attachment:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},contentType:{type:[{code:"code"}]},language:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]},url:{type:[{code:"url"}]},size:{type:[{code:"unsignedInt"}]},hash:{type:[{code:"base64Binary"}]},title:{type:[{code:"string"}]},creation:{type:[{code:"dateTime"}]}}},CodeableConcept:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},coding:{max:9007199254740991,type:[{code:"Coding"}]},text:{type:[{code:"string"}]}}},Coding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"uri"}]},version:{type:[{code:"string"}]},code:{type:[{code:"code"}]},display:{type:[{code:"string"}]},userSelected:{type:[{code:"boolean"}]}}},ContactDetail:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"string"}]},telecom:{max:9007199254740991,type:[{code:"ContactPoint"}]}}},ContactPoint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"code"}]},value:{type:[{code:"string"}]},use:{type:[{code:"code"}]},rank:{type:[{code:"positiveInt"}]},period:{type:[{code:"Period"}]}}},Contributor:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{min:1,type:[{code:"string"}]},contact:{max:9007199254740991,type:[{code:"ContactDetail"}]}}},Count:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},DataRequirement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},"subject[x]":{type:[{code:"CodeableConcept"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Group"]}]},mustSupport:{max:9007199254740991,type:[{code:"string"}]},codeFilter:{max:9007199254740991,type:[{code:"DataRequirementCodeFilter"}]},dateFilter:{max:9007199254740991,type:[{code:"DataRequirementDateFilter"}]},limit:{type:[{code:"positiveInt"}]},sort:{max:9007199254740991,type:[{code:"DataRequirementSort"}]}}},DataRequirementCodeFilter:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]},code:{max:9007199254740991,type:[{code:"Coding"}]}}},DataRequirementDateFilter:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},"value[x]":{type:[{code:"dateTime"},{code:"Period"},{code:"Duration"}]}}},DataRequirementSort:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},direction:{min:1,type:[{code:"code"}]}}},Distance:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Dosage:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},sequence:{type:[{code:"integer"}]},text:{type:[{code:"string"}]},additionalInstruction:{max:9007199254740991,type:[{code:"CodeableConcept"}]},patientInstruction:{type:[{code:"string"}]},timing:{type:[{code:"Timing"}]},"asNeeded[x]":{type:[{code:"boolean"},{code:"CodeableConcept"}]},site:{type:[{code:"CodeableConcept"}]},route:{type:[{code:"CodeableConcept"}]},method:{type:[{code:"CodeableConcept"}]},doseAndRate:{max:9007199254740991,type:[{code:"DosageDoseAndRate"}]},maxDosePerPeriod:{type:[{code:"Ratio"}]},maxDosePerAdministration:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},maxDosePerLifetime:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},DosageDoseAndRate:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{type:[{code:"CodeableConcept"}]},"dose[x]":{type:[{code:"Range"},{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},"rate[x]":{type:[{code:"Ratio"},{code:"Range"},{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},Duration:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},ElementDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},representation:{max:9007199254740991,type:[{code:"code"}]},sliceName:{type:[{code:"string"}]},sliceIsConstraining:{type:[{code:"boolean"}]},label:{type:[{code:"string"}]},code:{max:9007199254740991,type:[{code:"Coding"}]},slicing:{type:[{code:"ElementDefinitionSlicing"}]},short:{type:[{code:"string"}]},definition:{type:[{code:"markdown"}]},comment:{type:[{code:"markdown"}]},requirements:{type:[{code:"markdown"}]},alias:{max:9007199254740991,type:[{code:"string"}]},min:{type:[{code:"unsignedInt"}]},max:{type:[{code:"string"}]},base:{type:[{code:"ElementDefinitionBase"}]},contentReference:{type:[{code:"uri"}]},type:{max:9007199254740991,type:[{code:"ElementDefinitionType"}]},"defaultValue[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},meaningWhenMissing:{type:[{code:"markdown"}]},orderMeaning:{type:[{code:"string"}]},"fixed[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},"pattern[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},example:{max:9007199254740991,type:[{code:"ElementDefinitionExample"}]},"minValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},"maxValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},maxLength:{type:[{code:"integer"}]},condition:{max:9007199254740991,type:[{code:"id"}]},constraint:{max:9007199254740991,type:[{code:"ElementDefinitionConstraint"}]},mustSupport:{type:[{code:"boolean"}]},isModifier:{type:[{code:"boolean"}]},isModifierReason:{type:[{code:"string"}]},isSummary:{type:[{code:"boolean"}]},binding:{type:[{code:"ElementDefinitionBinding"}]},mapping:{max:9007199254740991,type:[{code:"ElementDefinitionMapping"}]}}},ElementDefinitionSlicingDiscriminator:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},path:{min:1,type:[{code:"string"}]}}},ElementDefinitionSlicing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},discriminator:{max:9007199254740991,type:[{code:"ElementDefinitionSlicingDiscriminator"}]},description:{type:[{code:"string"}]},ordered:{type:[{code:"boolean"}]},rules:{min:1,type:[{code:"code"}]}}},ElementDefinitionBase:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},min:{min:1,type:[{code:"unsignedInt"}]},max:{min:1,type:[{code:"string"}]}}},ElementDefinitionType:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"uri"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},targetProfile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},aggregation:{max:9007199254740991,type:[{code:"code"}]},versioning:{type:[{code:"code"}]}}},ElementDefinitionExample:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},label:{min:1,type:[{code:"string"}]},"value[x]":{min:1,type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]}}},ElementDefinitionConstraint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},key:{min:1,type:[{code:"id"}]},requirements:{type:[{code:"string"}]},severity:{min:1,type:[{code:"code"}]},human:{min:1,type:[{code:"string"}]},expression:{type:[{code:"string"}]},xpath:{type:[{code:"string"}]},source:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]}}},ElementDefinitionBinding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},strength:{min:1,type:[{code:"code"}]},description:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]}}},ElementDefinitionMapping:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},identity:{min:1,type:[{code:"id"}]},language:{type:[{code:"code"}]},map:{min:1,type:[{code:"string"}]},comment:{type:[{code:"string"}]}}},Expression:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},description:{type:[{code:"string"}]},name:{type:[{code:"id"}]},language:{min:1,type:[{code:"code"}]},expression:{type:[{code:"string"}]},reference:{type:[{code:"uri"}]}}},Extension:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},url:{min:1,type:[{code:"uri"}]},"value[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]}}},HumanName:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},text:{type:[{code:"string"}]},family:{type:[{code:"string"}]},given:{max:9007199254740991,type:[{code:"string"}]},prefix:{max:9007199254740991,type:[{code:"string"}]},suffix:{max:9007199254740991,type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Identifier:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"CodeableConcept"}]},system:{type:[{code:"uri"}]},value:{type:[{code:"string"}]},period:{type:[{code:"Period"}]},assigner:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MarketingStatus:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},country:{min:1,type:[{code:"CodeableConcept"}]},jurisdiction:{type:[{code:"CodeableConcept"}]},status:{min:1,type:[{code:"CodeableConcept"}]},dateRange:{min:1,type:[{code:"Period"}]},restoreDate:{type:[{code:"dateTime"}]}}},Meta:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},versionId:{type:[{code:"id"}]},lastUpdated:{type:[{code:"instant"}]},source:{type:[{code:"uri"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},security:{max:9007199254740991,type:[{code:"Coding"}]},tag:{max:9007199254740991,type:[{code:"Coding"}]},project:{type:[{code:"uri"}]},author:{type:[{code:"Reference"}]},onBehalfOf:{type:[{code:"Reference"}]},account:{type:[{code:"Reference"}]},accounts:{max:9007199254740991,type:[{code:"Reference"}]},compartment:{max:9007199254740991,type:[{code:"Reference"}]}}},Money:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},currency:{type:[{code:"code"}]}}},Narrative:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},status:{min:1,type:[{code:"code"}]},div:{min:1,type:[{code:"xhtml"}]}}},ParameterDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"code"}]},use:{min:1,type:[{code:"code"}]},min:{type:[{code:"integer"}]},max:{type:[{code:"string"}]},documentation:{type:[{code:"string"}]},type:{min:1,type:[{code:"code"}]},profile:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]}}},Period:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},start:{type:[{code:"dateTime"}]},end:{type:[{code:"dateTime"}]}}},Population:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"age[x]":{type:[{code:"Range"},{code:"CodeableConcept"}]},gender:{type:[{code:"CodeableConcept"}]},race:{type:[{code:"CodeableConcept"}]},physiologicalCondition:{type:[{code:"CodeableConcept"}]}}},ProdCharacteristic:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},height:{type:[{code:"Quantity"}]},width:{type:[{code:"Quantity"}]},depth:{type:[{code:"Quantity"}]},weight:{type:[{code:"Quantity"}]},nominalVolume:{type:[{code:"Quantity"}]},externalDiameter:{type:[{code:"Quantity"}]},shape:{type:[{code:"string"}]},color:{max:9007199254740991,type:[{code:"string"}]},imprint:{max:9007199254740991,type:[{code:"string"}]},image:{max:9007199254740991,type:[{code:"Attachment"}]},scoring:{type:[{code:"CodeableConcept"}]}}},ProductShelfLife:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},identifier:{type:[{code:"Identifier"}]},type:{min:1,type:[{code:"CodeableConcept"}]},period:{min:1,type:[{code:"Quantity"}]},specialPrecautionsForStorage:{max:9007199254740991,type:[{code:"CodeableConcept"}]}}},Quantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Range:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},low:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},high:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},Ratio:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},numerator:{type:[{code:"Quantity"}]},denominator:{type:[{code:"Quantity"}]}}},Reference:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},reference:{type:[{code:"string"}]},type:{type:[{code:"uri"}]},identifier:{type:[{code:"Identifier"}]},display:{type:[{code:"string"}]}}},RelatedArtifact:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},label:{type:[{code:"string"}]},display:{type:[{code:"string"}]},citation:{type:[{code:"markdown"}]},url:{type:[{code:"url"}]},document:{type:[{code:"Attachment"}]},resource:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/Resource"]}]}}},SampledData:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},origin:{min:1,type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},period:{min:1,type:[{code:"decimal"}]},factor:{type:[{code:"decimal"}]},lowerLimit:{type:[{code:"decimal"}]},upperLimit:{type:[{code:"decimal"}]},dimensions:{min:1,type:[{code:"positiveInt"}]},data:{type:[{code:"string"}]}}},Signature:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,max:9007199254740991,type:[{code:"Coding"}]},when:{min:1,type:[{code:"instant"}]},who:{min:1,type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},onBehalfOf:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},targetFormat:{type:[{code:"code"}]},sigFormat:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]}}},SubstanceAmount:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"amount[x]":{type:[{code:"Quantity"},{code:"Range"},{code:"string"}]},amountType:{type:[{code:"CodeableConcept"}]},amountText:{type:[{code:"string"}]},referenceRange:{type:[{code:"SubstanceAmountReferenceRange"}]}}},SubstanceAmountReferenceRange:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},lowLimit:{type:[{code:"Quantity"}]},highLimit:{type:[{code:"Quantity"}]}}},Timing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},event:{max:9007199254740991,type:[{code:"dateTime"}]},repeat:{type:[{code:"TimingRepeat"}]},code:{type:[{code:"CodeableConcept"}]}}},TimingRepeat:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"bounds[x]":{type:[{code:"Duration"},{code:"Range"},{code:"Period"}]},count:{type:[{code:"positiveInt"}]},countMax:{type:[{code:"positiveInt"}]},duration:{type:[{code:"decimal"}]},durationMax:{type:[{code:"decimal"}]},durationUnit:{type:[{code:"code"}]},frequency:{type:[{code:"positiveInt"}]},frequencyMax:{type:[{code:"positiveInt"}]},period:{type:[{code:"decimal"}]},periodMax:{type:[{code:"decimal"}]},periodUnit:{type:[{code:"code"}]},dayOfWeek:{max:9007199254740991,type:[{code:"code"}]},timeOfDay:{max:9007199254740991,type:[{code:"time"}]},when:{max:9007199254740991,type:[{code:"code"}]},offset:{type:[{code:"unsignedInt"}]}}},TriggerDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{type:[{code:"string"}]},"timing[x]":{type:[{code:"Timing"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Schedule"]},{code:"date"},{code:"dateTime"}]},data:{max:9007199254740991,type:[{code:"DataRequirement"}]},condition:{type:[{code:"Expression"}]}}},UsageContext:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"Coding"}]},"value[x]":{min:1,type:[{code:"CodeableConcept"},{code:"Quantity"},{code:"Range"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/PlanDefinition","http://hl7.org/fhir/StructureDefinition/ResearchStudy","http://hl7.org/fhir/StructureDefinition/InsurancePlan","http://hl7.org/fhir/StructureDefinition/HealthcareService","http://hl7.org/fhir/StructureDefinition/Group","http://hl7.org/fhir/StructureDefinition/Location","http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MoneyQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},SimpleQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{max:0,type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},IdentityProvider:{elements:{authorizeUrl:{min:1,type:[{code:"string"}]},tokenUrl:{min:1,type:[{code:"string"}]},tokenAuthMethod:{type:[{code:"code"}]},userInfoUrl:{min:1,type:[{code:"string"}]},clientId:{min:1,type:[{code:"string"}]},clientSecret:{min:1,type:[{code:"string"}]},usePkce:{type:[{code:"boolean"}]},useSubject:{type:[{code:"boolean"}]}}}};function vr(r){return new gr(r).parse()}var me=wn(An),Tr=Object.create(null),On=Object.create(null),vo={"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 Dn(r){let e;return e=On[r],e||(e=On[r]=Object.create(null)),e}function Sr(r){let t=(Array.isArray(r)?r:r.entry?.map(n=>n.resource)??[]).filter(n=>n?.resourceType==="StructureDefinition");Un(t);for(let n of t)br(n)}function br(r){if(!r?.name)throw new Error("Failed loading StructureDefinition from bundle");if(r.resourceType!=="StructureDefinition")return;let e=vr(r),t=vo[r.url],n,i;t?(n=me,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=me,i=r.type):(n=Dn(r.url),i=r.type),n[i]=e;for(let o of e.innerTypes)o.parentType=e,n[o.name]=o;Tr[r.url]=e}function Mn(){return me}function _n(r){return!!me[r]}function je(r,e){if(e){let t=Dn(e)[r];if(t)return t}return me[r]}function ie(r,e){let t=je(r,e);if(!t)throw new d(b("Unknown data type: "+r));return t}function Ln(r){let e=me[r];return e&&Er(e)}function Fn(r){return!!Tr[r]}function Nn(r){return Tr[r]}var gr=class{constructor(e){if(!e.snapshot?.element||e.snapshot.element.length===0)throw new Error(`No snapshot defined for StructureDefinition '${e.name}'`);this.root=e.snapshot.element[0],this.elements=e.snapshot.element.slice(1),this.elementIndex=Object.create(null),this.index=0,this.resourceSchema={name:e.name,path:this.root.path,title:e.title,type:e.type,url:e.url,version:e.version,kind:e.kind,description:Eo(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=yr(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[yr(e,n.path)]=t;break}n=n.parent}if(!n){let i=yr(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&&!De(this.slicingContext.path,e?.path)&&(this.slicingContext=void 0),e.slicing&&!this.slicingContext&&this.enterSlice(e,t)}enterInnerType(e){for(;this.backboneContext&&!De(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;let t=xr(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:De(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,t){bo(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&&!De(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!De(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!!(De(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=xr(e)),n||(n=oe(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=kn(e.max),n=e.base?.max?kn(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:Vn(P(i,"fixed[x]")),pattern:Vn(P(i,"pattern[x]")),binding:e.binding}}};function Pu(r,e){if(!r)return;let t=[];for(let n of e){t.push("_"+n);let i=me[r.resourceType].elements[n+"[x]"];i&&t.push(...i.type.map(o=>n+k(o.code)))}for(let n of Object.getOwnPropertyNames(r))!e.includes(n)&&!t.includes(n)&&!To.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(In):[In]},r}var In={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},To=["resourceType","id","meta"];function kn(r){return r==="*"?Number.POSITIVE_INFINITY:Number.parseInt(r,10)}function yr(r,e=""){return So(r.path,e)}function So(r,e){return r?e&&r.startsWith(e)?r.substring(e.length+1):r:""}function De(r,e){return!r||!e?!1:e.startsWith(r+".")||e===r}function Vn(r){return Array.isArray(r)&&r.length>0?r[0]:S(r)?void 0:r}function bo(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 Eo(r){let e=r.description;return e?.startsWith(`Base StructureDefinition for ${r.name} Type: `)&&(e=e.substring(`Base StructureDefinition for ${r.name} Type: `.length)),e}function Pr(r,e,t){new Rr(r,e,t).crawl()}function Du(r,e,t){return new Cr(r,e,t).crawl()}var Rr=class{constructor(e,t,n){this.root=e,this.visitor=t,this.schema=n?.schema??ie(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}crawl(){this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}crawlObject(e,t,n){let i=O(e.value);if(i&&this.visitor.onEnterResource&&this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties)for(let o of Object.keys(e.value))this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&this.visitor.onExitResource(n,e,t)}crawlProperty(e,t,n,i){let o=Me(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 $e(s))this.crawlPropertyValue(a,i)}crawlPropertyValue(e,t){if(!pt(e.type)){let n=ie(e.type);this.crawlObject(e,n,t)}}},Cr=class{constructor(e,t,n){this.root=e,this.visitor=t,this.schema=n?.schema??ie(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}async crawl(){return this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}async crawlObject(e,t,n){let i=O(e.value);if(i&&this.visitor.onEnterResource&&await this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&await this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties&&e.value)for(let o of Object.keys(e.value))await this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))await this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&await this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&await this.visitor.onExitResource(n,e,t)}async crawlProperty(e,t,n,i){let o=Me(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 $e(s))await this.crawlPropertyValue(a,i)}async crawlPropertyValue(e,t){if(!pt(e.type)){let n=ie(e.type);await this.crawlObject(e,n,t)}}};function Me(r,e,t){if(r===void 0)return[void 0];if(e==="$this")return[r];let n=t?.withPath?Ro:P,[i,...o]=e.split("."),s=[n(r,i,t)];for(let a of o){let c=[];for(let u of s)if(Array.isArray(u))for(let p of u)c.push(n(p,a,t));else(t?.withPath&&u&&u.value!==void 0||!t?.withPath&&u!==void 0)&&c.push(n(u,a,t));s=c}return s}function Ro(r,e,t){let n=r.path;return Co(P(r,e,t),n,e)}function Co(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 wr={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"},Po=new Oe(1e3);function pt(r){return r==="undefined"||r in wr}var ft={base64Binary:/^([A-Za-z\d+/]{4})*([A-Za-z\d+/]{2}==|[A-Za-z\d+/]{3}=)?$/,canonical:/^\S*$/,code:/^[^\s]+( [^\s]+)*$/,date:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1]))?)?$/,dateTime:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1])(T([01]\d|2[0-3])(:[0-5]\d:([0-5]\d|60)(\.\d{1,9})?)?)?)?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00)?)?)?$/,id:/^[A-Za-z0-9\-.]{1,64}$/,instant:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])T([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00))$/,markdown:/^[\r\n\t\u0020-\uFFFF]+$/,oid:/^urn:oid:[0-2](\.(0|[1-9]\d*))+$/,string:/^[\r\n\t\u0020-\uFFFF]+$/,time:/^([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?$/,uri:/^\S*$/,url:/^\S*$/,uuid:/^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,xhtml:/.*/},wo={"ele-1":!0,"dom-3":!0,"org-1":!0,"sdf-19":!0};function $u(r,e){if(!r.resourceType)throw new d(y("Missing resource type"));return new dt(v(r),e).validate()}function Gu(r,e){return new dt(r,e).validate()}var dt=class{constructor(e,t){this.issues=[],this.root=e,this.currentResource=[],O(e.value)&&this.currentResource.push(e.value),t?.profile?this.schema=vr(t.profile):this.schema=ie(e.type)}validate(){this.constraintsCheck({...this.root,path:this.schema.path},this.schema),Ar(this.root.value,this.schema.path,this.issues),Pr(this.root,this,{schema:this.schema,initialPath:this.schema.path});let e=this.issues,t=!1;for(let n of e)n.severity==="error"&&(t=!0);if(t)throw new d({resourceType:"OperationOutcome",issue:e});return e}onExitObject(e,t,n){this.checkAdditionalProperties(t,n.elements,t.path)}onEnterResource(e,t){this.currentResource.push(t.value)}onExitResource(){this.currentResource.pop()}visitProperty(e,t,n,i,o){let s=o.elements[t];if(!s)throw new Error(`Missing element validation schema for ${t}`);for(let a of i){if(!this.checkPresence(a,s,n))return;let c;if(s.isArray){if(!Array.isArray(a)){this.issues.push(T(n,"Expected array of values for property"));return}c=a}else{if(Array.isArray(a)){this.issues.push(T(n,"Expected single value for property"));return}c=[a]}(c.length<s.min||c.length>s.max)&&this.issues.push(T(s.path,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${c.length}`)),Io(a,s)||this.issues.push(T(n,"Value did not match expected pattern"));let u=s.slicing?Object.fromEntries(s.slicing.slices.map(p=>[p.name,0])):void 0;for(let p of c){this.constraintsCheck(p,s),this.referenceTypeCheck(p,s),this.checkPropertyValue(p);let m=ko(p,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(T(e.path,"Missing required property")),!1):S(e)?(this.issues.push(T(n,"Invalid empty value")),!1):!0}checkPropertyValue(e){pt(e.type)?this.validatePrimitiveType(e):S(e.value)&&this.issues.push(T(e.path,"Invalid empty non-primitive value"))}validateSlices(e,t,n){if(!(!e||!t))for(let i of e){let o=t[i.name];(o<i.min||o>i.max)&&this.issues.push(T(n,`Incorrect number of values provided for slice '${i.name}': expected ${i.min}..${Number.isFinite(i.max)?i.max:"*"}, but found ${o}`))}}checkAdditionalProperties(e,t,n){let i=e.value;if(!i)return;let o={};for(let s of Object.keys(i)){if(s==="resourceType")continue;let a=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(he("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(he("warning","structure",`Conflicting choice of type properties: "${s}", "${o[a]}"`,s)),o[a]=s;continue}!(s in t)&&!(s.startsWith("_")&&s.slice(1)in t)&&this.issues.push(T(`${n}.${s}`,`Invalid additional property "${s}"`))}}constraintsCheck(e,t){let n=t.constraints;if(n){for(let i of n)if(i.severity==="error"&&!(i.key in wo)&&!this.isExpressionTrue(i,e)){this.issues.push(Cn(e.path,i));return}}}referenceTypeCheck(e,t){if(e.type!=="Reference")return;let n=e.value;if(!q(n)||n.reference.startsWith("#"))return;let i=n.reference.includes("?")?n.reference.split("?")[0]:n.reference.split("/")[0];if(!i)return;let o=t.type.find(m=>m.code==="Reference")?.targetProfile;if(!o)return;let s=hn+"/fhir/StructureDefinition/",a=s+"Resource",c=s+i,u="https://medplum.com/fhir/StructureDefinition/",p=u+i;for(let m of o)if(m===a||m===c||m===p||!m.startsWith(s)&&!m.startsWith(u))return;this.issues.push(he("warning","structure",`Invalid reference: got "${i}", expected "${o.join('", "')}"`,e.path))}isExpressionTrue(e,t){let n={"%context":t,"%ucum":v(fn)};this.currentResource.length>0&&(n["%resource"]=v(this.currentResource[this.currentResource.length-1])),O(this.root.value)&&(n["%rootResource"]=this.root);try{let i=E(e.expression,[t],n,Po);return i.length===1&&i[0].value===!0}catch(i){return this.issues.push(Pn(t.path,"Error evaluating invariant expression",i,{fhirpath:e.expression})),!1}}validatePrimitiveType(e){let[t,n]=Vo(e),i=e.path;if(t){let{type:o,value:s}=t;if(!(o in wr)){this.issues.push(T(i,`Invalid JSON type: ${o} is not a valid FHIR type`));return}let a=wr[o];if(typeof s!==a){s!==null&&this.issues.push(T(i,`Invalid JSON type: expected ${a}, but got ${typeof s}`));return}a==="string"?this.validateString(s,o,i):a==="number"&&this.validateNumber(s,o,i)}n&&Pr(n,this,{schema:ie("Element"),initialPath:i})}validateString(e,t,n){if(!e.trim()){this.issues.push(T(n,"String must contain non-whitespace content"));return}if(e.length>1024*1024){this.issues.push(T(n,"String cannot be larger than 1 MB"));return}let i=ft[t];i&&!i.exec(e)&&this.issues.push(T(n,"Invalid "+t+" format"))}validateNumber(e,t,n){Number.isNaN(e)||!Number.isFinite(e)?this.issues.push(T(n,"Invalid numeric value")):Ao(t)&&!Number.isInteger(e)?this.issues.push(T(n,"Expected number to be an integer")):t===l.positiveInt&&e<=0?this.issues.push(T(n,"Expected number to be positive")):t===l.unsignedInt&&e<0&&this.issues.push(T(n,"Expected number to be non-negative"))}};function Ao(r){return r===l.integer||r===l.positiveInt||r===l.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 Ar(r,e,t){for(let[n,i]of Object.entries(r)){let o=`${e}.${n}`,s=n.startsWith("_")?n.slice(1):`_${n}`;if(i===null)t.push(T(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?t.push(T(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!r[s]?.[a]?t.push(T(`${o}[${a}]`,"Invalid null value")):i[a]&&Ar(i[a],`${o}[${a}]`,t);else typeof i=="object"&&Ar(i,o,t)}}function Io(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&&!Ge(t,e.pattern)||e.fixed&&!se(t,e.fixed))}function Or(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 Ge(r,i.pattern);if(i.fixed)return se(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 ko(r,e){if(e){for(let t of e.slices)if(e.discriminator.every(n=>$e(Me(r,n.path))?.some(i=>Or(i,n,t))))return t.name}}function Vo(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 h(r){return[{type:l.boolean,value:r}]}function v(r){return r==null?{type:"undefined",value:void 0}:Number.isSafeInteger(r)?{type:l.integer,value:r}:typeof r=="number"?{type:l.decimal,value:r}:typeof r=="boolean"?{type:l.boolean,value:r}:typeof r=="string"?{type:l.string,value:r}:w(r)?{type:l.Quantity,value:r}:O(r)?{type:r.resourceType,value:r}:Mr(r)?{type:l.CodeableConcept,value:r}:Dr(r)?{type:l.Coding,value:r}:{type:l.BackboneElement,value:r}}function L(r){return r.length===0?!1:!!r[0].value}function H(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=xt(r.type,e,t?.profileUrl);return n?Do(r,e,n):Mo(r,e)}function Do(r,e,t){let n=r.value,i=t.type;if(!i||i.length===0)return;let o,s="undefined",a,c=t.path.lastIndexOf("."),u=t.path.substring(c+1);for(let p of i){let m=u.replace("[x]",k(p.code));if(o=n[m],a=n["_"+m],o!==void 0||a!==void 0){s=p.code;break}}if(a)if(Array.isArray(o)){o=o.slice();for(let p=0;p<Math.max(o.length,a.length);p++)o[p]=Ir(o[p],a[p])}else if(!o&&Array.isArray(a)){o=a.slice();for(let p=0;p<a.length;p++)o[p]=Ir(void 0,a[p])}else o=Ir(o,a);if(!S(o))return(s==="Element"||s==="BackboneElement")&&(s=t.type[0].code),Array.isArray(o)?o.map(p=>Bn(p,s)):Bn(o,s)}function Bn(r,e){return e==="Resource"&&O(r)&&(e=r.resourceType),{type:e,value:r}}function Mo(r,e){let t=r.value;if(!t||typeof t!="object")return;let n;if(e in t){let i=t[e];Array.isArray(i)?n=i.map(v):n=v(i)}else{let i=e.endsWith("[x]")?e.substring(0,e.length-3):e;for(let o of Object.values(l)){let s=i+k(o);if(s in t){let a=t[s];Array.isArray(a)?n=a.map(c=>({type:o,value:c})):n={type:o,value:a};break}}}if(Array.isArray(n)){if(n.length===0||S(n[0]))return}else if(S(n))return;return n}function mt(r){let e=[];for(let t of r){let n=!1;for(let i of e)if(L(He(t,i))){n=!0;break}n||e.push(t)}return e}function jn(r){return h(!L(r))}function $n(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?h(!1):h(r.every((t,n)=>L(He(t,e[n]))))}function Gn(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?h(!0):h(r.some((t,n)=>!L(He(t,e[n]))))}function He(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?h(Math.abs(t-n)<1e-8):w(t)&&w(n)?h(zn(t,n)):h(typeof t=="object"&&typeof n=="object"?Vr(r,e):t===n)}function kr(r,e){return r.length===0&&e.length===0?h(!0):r.length!==e.length?h(!1):(r.sort(Wn),e.sort(Wn),h(r.every((t,n)=>L(_o(t,e[n])))))}function _o(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"?h(Math.abs(s-a)<.01):w(s)&&w(a)?h(zn(s,a)):h(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 Wn(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 yt(r,e){let{value:t}=r;if(t==null)return!1;let n=e;switch(n.startsWith("System.")&&(n=n.substring(7)),n.startsWith("FHIR.")&&(n=n.substring(5)),n){case"Boolean":return typeof t=="boolean";case"Decimal":case"Integer":return typeof t=="number";case"Date":return Hn(t);case"DateTime":return _e(t);case"Time":return typeof t=="string"&&!!/^T\d/.exec(t);case"Period":return Qn(t);case"Quantity":return w(t);default:return r.type===n||typeof t=="object"&&t?.resourceType===n}}function Hn(r){return typeof r=="string"&&!!ft.date.exec(r)}function _e(r){return typeof r=="string"&&!!ft.dateTime.exec(r)}function Qn(r){return!!(r&&typeof r=="object"&&("start"in r&&_e(r.start)||"end"in r&&_e(r.end)))}function gt(r){if(r){if(Hn(r)||_e(r))return{start:ht(r,"0000-01-01T00:00:00.000"),end:ht(r,"xxxx-12-31T23:59:59.999")};if(Qn(r))return{start:r.start?ht(r.start,"0000-01-01T00:00:00.000"):void 0,end:r.end?ht(r.end,"xxxx-12-31T23:59:59.999"):void 0}}}function ht(r,e){let t="Z",n=Math.max(r.indexOf("+",10),r.indexOf("-",10));n>-1?(t=r.substring(n),r=r.substring(0,n)):r.endsWith("Z")&&(r=r.substring(0,r.length-1));let i=r+e.substring(r.length)+t;return new Date(i).toISOString()}function w(r){return!!(r&&typeof r=="object"&&"value"in r&&typeof r.value=="number")}function zn(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(qn(o)&&qn(s)){if(!Vr(o,s))return!1}else if(o!==s)return!1}return!0}function qn(r){return r!==null&&typeof r=="object"}function Ir(r,e){if(e){if(typeof e!="object")throw new Error("Primitive extension must be an object");return Lo(r??{},e)}return r}function Lo(r,e){return delete e.__proto__,delete e.constructor,Object.assign(r,e)}function ze(r,e){return O(r,e)&&"id"in r&&typeof r.id=="string"}function ye(r){let e=D(r)??"undefined/undefined",t=No(r);return t===e?{reference:e}:{reference:e,display:t}}function D(r){if(q(r))return r.reference;if(ze(r))return`${r.resourceType}/${r.id}`}function ge(r){if(r)return q(r)?r.reference.split("/")[1]:r.id}function tl(r){if(r?.reference===void 0)throw new d(y("Reference missing reference property."));let[e,t]=r.reference.split("/");if(e===""||t===""||t===void 0)throw new d(y("Unable to parse reference string."));return[e,t]}function Fo(r){return r.resourceType==="Patient"||r.resourceType==="Practitioner"||r.resourceType==="RelatedPerson"}function No(r){if(Fo(r)){let e=Uo(r);if(e)return e}if(r.resourceType==="Device"){let e=Bo(r);if(e)return e}if(r.resourceType==="MedicationRequest"&&r.medicationCodeableConcept)return Qe(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]),Mr(e))return Qe(e);if(zo(e))return e.text}return D(r)??""}function Uo(r){let e=r.name;if(e&&e.length>0)return Je(e[0])}function Bo(r){let e=r.deviceName;if(e&&e.length>0)return e[0].name}function rl(r){if(!("photo"in r))return;let e=r.photo;if(e)if(Array.isArray(e))for(let t of e){let n=Jn(t);if(n)return n}else return Jn(e)}function Jn(r){if(r.url&&r.contentType?.startsWith("image/"))return r.url}function nl(r){return r?new Date(r):void 0}function vt(r,e){let t=new Date(r);t.setUTCHours(0,0,0,0);let n=e?new Date(e):new Date;n.setUTCHours(0,0,0,0);let i=t.getUTCFullYear(),o=t.getUTCMonth(),s=t.getUTCDate(),a=n.getUTCFullYear(),c=n.getUTCMonth(),u=n.getUTCDate(),p=a-i;(c<o||c===o&&u<s)&&p--;let m=a*12+c-(i*12+o);u<s&&m--;let x=Math.floor((n.getTime()-t.getTime())/(1e3*60*60*24));return{years:p,months:m,days:x}}function il(r,e){let{years:t,months:n,days:i}=vt(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 ol(r){let e={};return Kn(r.item,e),e}function Kn(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer[0]),Kn(t.item,e)}function sl(r){let e={};return Xn(r.item,e),e}function Xn(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),Xn(t.item,e)}function Wo(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 al(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 cl(r,...e){let t=oe(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 oe(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 Tt(r,e){let t=Lr(r);return JSON.stringify(t,null,e?2:void 0)??""}function Lr(r){if(!(r==null||r===""))return typeof r=="object"?Array.isArray(r)?qo(r):jo(r):r}function qo(r){let e=r.length;if(e===0)return;let t,n=0;for(let i=0;i<e;i++){let o=r[i],s=Lr(o);s!==o&&!t&&(t=Array.from(r)),s===void 0?t&&(t[i]=null):(t&&(t[i]=s),n++)}if(n!==0)return t??r}function jo(r){let e,t=0;for(let n in r){let i=r[n],o=Lr(i);o!==i&&!e&&(e={...r}),o===void 0?e&&delete e[n]:(e&&(e[n]=o),t++)}if(t!==0)return e??r}function S(r){if(r==null)return!0;let e=typeof r;return e==="string"||e==="object"?!Y(r):!1}function Y(r){if(r==null)return!1;let e=typeof r;return e==="string"&&r!==""||e==="object"&&("length"in r&&r.length>0||Object.keys(r).length>0)}function ul(r){if(!r)return;let e=r.length-1;for(;e>=0&&S(r[e]);)e--;return e>=0?r.slice(0,e+1):void 0}function se(r,e,t){return r===e||S(r)&&S(e)?!0:S(r)||S(e)?!1:Array.isArray(r)&&Array.isArray(e)?$o(r,e):Array.isArray(r)||Array.isArray(e)?!1:R(r)&&R(e)?Go(r,e,t):(R(r)||R(e),!1)}function $o(r,e){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(!se(r[t],e[t]))return!1;return!0}function Go(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(!se(o,s,i))return!1}return!0}function Ge(r,e){return S(r)?!0:S(e)?!1:Array.isArray(r)&&Array.isArray(e)?Ho(r,e):Array.isArray(r)||Array.isArray(e)?!1:R(r)&&R(e)?Qo(r,e):R(r)||R(e)?!1:r===e}function Ho(r,e){return e.every(t=>r.some(n=>Ge(n,t)))}function Qo(r,e){return Object.entries(e).every(([t,n])=>t in r&&Ge(r[t],n))}function xe(r){return r===void 0?r:JSON.parse(JSON.stringify(r))}function ll(r){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(r)}function R(r){return r!==null&&typeof r=="object"}function Yn(r){return r.every(St)}function St(r){return typeof r=="string"}function Dr(r){return R(r)&&"code"in r&&typeof r.code=="string"}function Mr(r){return R(r)&&"coding"in r&&Array.isArray(r.coding)&&r.coding.every(Dr)}function pl(r,e){if(r){for(let t of r)if(t.coding){for(let n of t.coding)if(n.system===e)return n.code}}}function zo(r){return R(r)&&"text"in r&&typeof r.text=="string"}var Zn=[];for(let r=0;r<256;r++)Zn.push(r.toString(16).padStart(2,"0"));function ei(r){let e=ri(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=Zn[t[i]];return n.join("")}function ti(r){let e=ri(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=String.fromCharCode(t[i]);return window.btoa(n.join(""))}function ri(r){return ArrayBuffer.isView(r)?r.buffer:r}function k(r){return r?r.charAt(0).toUpperCase()+r.substring(1):""}function dl(r){return r===r.toLowerCase()&&r!==r.toUpperCase()}function Fr(r){return r.length>0&&r.startsWith(r[0].toUpperCase())}function ae(r,e){let t=r+".";if(e.startsWith(t))return e.slice(t.length)}function _r(r,e){return r.coding?.find(t=>t.system===e)?.code}function fl(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 hl(r,e,t,n){return r.qualifiedInterval?.find(i=>ni(i,e)&&Yo(i,t,r.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function ml(r,e,t){return Jo(r,e,t)[0]}function Jo(r,e,t){return r.qualifiedInterval?.filter(n=>ni(n,e)&&(!t||t.includes(n.condition)))??[]}function ni(r,e){return Ko(r,e)&&Xo(r,e)}function Ko(r,e){return!r.gender||r.gender===e.gender}function Xo(r,e){return!r.age||ii(vt(e.birthDate).years,r.age)}function Yo(r,e,t){return!!r.range&&ii(e,r.range,t)}function ii(r,e,t){return(e.low?.value===void 0||es(r,e.low.value,t))&&(e.high?.value===void 0||Zo(r,e.high.value,t))}function yl(r,e){return parseFloat(r.toFixed(e))}function gl(r,e,t){return Q(r,t)===Q(e,t)}function xl(r,e,t){return Q(r,t)<Q(e,t)}function vl(r,e,t){return Q(r,t)>Q(e,t)}function Zo(r,e,t){return Q(r,t)<=Q(e,t)}function es(r,e,t){return Q(r,t)>=Q(e,t)}function Q(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}function Tl(r,e,t){return r.find(n=>typeof e=="string"?_r(n.code||{},t)===e:_r(n.code||{},t)===_r(e,t))}function $e(r){if(r!==void 0)return Array.isArray(r)?r:[r]}function Sl(r){return Array.isArray(r)?r[0]:r}var Nr=r=>new Promise(e=>{setTimeout(e,r)});function Ur(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 oi(r){let e,t=!1;return function(){return t||(e=r(),t=!0),e}}function Le(r,e){return r?(r.push(e),r):[e]}function bt(r){return r.sort((e,t)=>e.localeCompare(t))}function Br(r){return r.endsWith("/")?r:r+"/"}function ts(r){return r.startsWith("/")?r.slice(1):r}function j(r,e){return new URL(ts(e),Br(r.toString())).toString()}function si(r,e){return j(r,e).toString().replace("http://","ws://").replace("https://","wss://")}function ai(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 rs=/^(([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 bl(r){return rs.test(r)}function El(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 Rl(r,e){return new Map(r.entry?.filter(n=>!!n.resource).map(n=>[Wo(n.resource,e),n.resource]).filter(([n])=>n!==void 0))}function Cl(r,e){if(r?.meta?.profile?.includes(e)){let t=r.meta.profile.indexOf(e);r.meta.profile.splice(t,1)}return r}function Pl(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):i!==void 0&&t.push(i)}return t}function wl(r){return r.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/“/g,"“").replace(/”/g,"”").replace(/‘/g,"‘").replace(/’/g,"’").replace(/…/g,"…")}function ci(r){if(!r)return"";switch(r.type){case"Address":return is(r.value);case"CodeableConcept":return Qe(r.value);case"Coding":return ui(r.value);case"ContactPoint":return r.value.value;case"HumanName":return Je(r.value);case"Quantity":return ce(r.value);case"Reference":return ns(r.value);default:return r.value?.toString()??""}}function ns(r){return r?r.display??r.reference??Tt(r):""}function is(r,e){if(!r)return"";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 Je(r,e){if(!r)return"";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=ve(r.text);if(n)return n}return t.join(" ").trim()}function Il(r){let e=[];return r.given&&e.push(...r.given),e.join(" ").trim()}function kl(r){return ve(r.family)??""}function qr(r){return r instanceof Date&&!isNaN(r.getTime())}function Vl(r,e,t){if(!r)return"";let n=new Date(r);return qr(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...t})):""}function os(r,e,t){if(!r)return"";let n=new Date("2000-01-01T"+r+"Z");return qr(n)?n.toLocaleTimeString(e,t):""}function Wr(r,e,t){if(!r)return"";let n=new Date(r);return qr(n)?n.toLocaleString(e,t):""}function Dl(r,e,t){return!r||!r.start&&!r.end?"":Wr(r.start,e,t)+" - "+Wr(r.end,e,t)}var ss={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},as={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},cs={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function Ml(r){if(!r)return"";let e=[];return us(e,r.repeat),r.event&&e.push(r.event.map(t=>Wr(t)).join(", ")),k(e.join(" ").trim())}function us(r,e){if(!e?.periodUnit)return;let t=e.frequency??1,n=e.period??1,i=e.periodUnit;t===1&&n===1?r.push(ss[i]):(t===1?r.push("once"):r.push(t+" times"),n===1?r.push("per "+as[i]):r.push("per "+n+" "+cs[i])),e.dayOfWeek&&r.push("on "+e.dayOfWeek.map(k).join(", ")),e.timeOfDay&&r.push("at "+e.timeOfDay.map(o=>os(o)).join(", "))}function _l(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=ds(n.value,e),`> ${ce(n,e)}`):`>= ${ce(n,e)}`:n?.value===void 0&&i?.value!==void 0?t&&e!==void 0?(i.value=ps(i.value,e),`< ${ce(i,e)}`):`<= ${ce(i,e)}`:(n?.unit===i?.unit&&delete n?.unit,`${ce(n,e)} - ${ce(i,e)}`)}function ce(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 Ll(r){return r?.value===void 0?"":r.value.toLocaleString(void 0,{style:"currency",currency:r.currency??"USD",currencyDisplay:"narrowSymbol"})}function Qe(r){if(!r)return"";let e=ve(r.text);return e||(r.coding?r.coding.map(t=>ui(t)).join(", "):"")}function ui(r,e){let t=ve(r?.display);if(t){let n=e?ve(r?.code):void 0;return`${t}${n?" ("+n+")":""}`}return ve(r?.code)??""}function ls(r){if(!r)return"";let e=[];if(r.valueQuantity)e.push(ce(r.valueQuantity));else if(r.valueCodeableConcept)e.push(Qe(r.valueCodeableConcept));else{let t=ve(r.valueString);t&&e.push(t)}return"component"in r&&e.push(r.component.map(t=>ls(t)).join(" / ")),e.join(" / ").trim()}function ve(r){return typeof r=="string"?r:void 0}function ps(r,e,t=1){return(li(r,e)+t)*Math.pow(10,-e)}function ds(r,e,t=1){return(li(r,e)-t)*Math.pow(10,-e)}function li(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}var l={Address:"Address",Age:"Age",Annotation:"Annotation",Attachment:"Attachment",BackboneElement:"BackboneElement",CodeableConcept:"CodeableConcept",Coding:"Coding",ContactDetail:"ContactDetail",ContactPoint:"ContactPoint",Contributor:"Contributor",Count:"Count",DataRequirement:"DataRequirement",Distance:"Distance",Dosage:"Dosage",Duration:"Duration",Expression:"Expression",Extension:"Extension",HumanName:"HumanName",Identifier:"Identifier",MarketingStatus:"MarketingStatus",Meta:"Meta",Money:"Money",Narrative:"Narrative",ParameterDefinition:"ParameterDefinition",Period:"Period",Population:"Population",ProdCharacteristic:"ProdCharacteristic",ProductShelfLife:"ProductShelfLife",Quantity:"Quantity",Range:"Range",Ratio:"Ratio",Reference:"Reference",RelatedArtifact:"RelatedArtifact",SampledData:"SampledData",Signature:"Signature",SubstanceAmount:"SubstanceAmount",SystemString:"http://hl7.org/fhirpath/System.String",Timing:"Timing",TriggerDefinition:"TriggerDefinition",UsageContext:"UsageContext",base64Binary:"base64Binary",boolean:"boolean",canonical:"canonical",code:"code",date:"date",dateTime:"dateTime",decimal:"decimal",id:"id",instant:"instant",integer:"integer",markdown:"markdown",oid:"oid",positiveInt:"positiveInt",string:"string",time:"time",unsignedInt:"unsignedInt",uri:"uri",url:"url",uuid:"uuid"};function Wl(r){for(let e of r.entry??[]){let t=e.resource;t.resourceType==="SearchParameter"&&jr(t)}}function Un(r){let e=Array.isArray(r)?r:r.entry?.map(t=>t.resource)??[];for(let t of e)t?.resourceType==="StructureDefinition"&&t.kind==="resource"&&di(t.type)}function di(r){let e=F.types[r];return e||(e={searchParamsDetails:{}},F.types[r]=e),!e.searchParams&&r!=="Binary"&&(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 jr(r){for(let e of r.base??[]){let t=di(e);t.searchParams||(t.searchParams={}),t.searchParams[r.code]=r}}function xr(r){let e=r.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?fs((r.base?.path??r.path)?.split(".")):e}function fs(r){return r.length===1?r[0]:r.map(k).join("")}function Er(r){return r.kind==="resource"&&r.name!=="Resource"&&r.name!=="DomainResource"}function ql(){return Object.values(Mn()).filter(Er).map(r=>r.name)}function jl(r){return F.types[r]?.searchParams}function $l(r,e){return F.types[r]?.searchParams?.[e]}function Gl(r){let e=r.replaceAll("[x]","").split(".").pop();return hs(e)}function hs(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(ys).join(" ").replace("_"," ").replace(/\s+/g," ")}var ms=new Set(["ID","IP","PKCE","JWKS","URI","URL","OMB","UDI"]);function ys(r){let e=r.toUpperCase();return r===e?r:ms.has(e)?e:e.charAt(0)+r.slice(1)}function xt(r,e,t){let n=je(r,t);if(n)return gs(n.elements,e)}function gs(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 Hl(r){return!!(r&&typeof r=="object"&&"type"in r&&"value"in r)}function O(r,e){return!(!r||typeof r!="object"||!("resourceType"in r)||e&&r.resourceType!==e)}function q(r,e){return r&&typeof r=="object"&&"reference"in r&&typeof r.reference=="string"?e?r.reference.match(new RegExp(`^${e}(/|\\?)`))!==null:!0:!1}var F={types:{}};function fi(r){switch(r.type){case l.uuid:case l.uri:case l.url:case l.string:case l.oid:case l.markdown:case l.id:case l.code:case l.canonical:case l.base64Binary:case l.SystemString:case l.date:case l.dateTime:case l.instant:return r.value;case l.Identifier:return`${r.value.system??""}|${r.value.value}`;case l.Coding:return pi(r.value);case l.CodeableConcept:return r.value.coding?.map(pi).join(",")??r.value.text;case l.HumanName:return r.value.text?r.value.text:Je(r.value);case l.unsignedInt:case l.positiveInt:case l.integer:case l.decimal:return r.value.toString();case l.boolean:return r.value?"true":"false";case l.Extension:return r.value.url;case l.ContactPoint:return r.value.value;case l.Quantity:case l.Age:case l.Count:case l.Duration:return`${r.value.value}|${r.value.system??""}|${r.value.code??r.value.unit??""}`;case l.Reference:return r.value.reference;default:return ze(r.value)?D(r.value):JSON.stringify(r)}}function pi(r){return r?`${r.system??""}|${r.code}`:""}function Fe(r){if(r.startsWith("T"))return r+"T00:00:00.000Z".substring(r.length);if(r.length<=10)return r;try{return new Date(r).toISOString()}catch{return r}}var Z=()=>[],I={empty:(r,e)=>h(e.length===0||e.every(t=>S(t.value))),hasValue:(r,e)=>h(e.length!==0),exists:(r,e,t)=>t?h(e.filter(n=>L(t.eval(r,[n]))).length>0):h(e.length>0&&e.every(n=>!S(n.value))),all:(r,e,t)=>h(e.every(n=>L(t.eval(r,[n])))),allTrue:(r,e)=>{for(let t of e)if(!t.value)return h(!1);return h(!0)},anyTrue:(r,e)=>{for(let t of e)if(t.value)return h(!0);return h(!1)},allFalse:(r,e)=>{for(let t of e)if(t.value)return h(!1);return h(!0)},anyFalse:(r,e)=>{for(let t of e)if(!t.value)return h(!0);return h(!1)},subsetOf:(r,e,t)=>{if(e.length===0)return h(!0);let n=t.eval(r,Te(r));return n.length===0?h(!1):h(e.every(i=>n.some(o=>o.value===i.value)))},supersetOf:(r,e,t)=>{let n=t.eval(r,Te(r));return n.length===0?h(!0):e.length===0?h(!1):h(n.every(i=>e.some(o=>o.value===i.value)))},count:(r,e)=>[{type:l.integer,value:e.length}],distinct:(r,e)=>{let t=[];for(let n of e)t.some(i=>i.value===n.value)||t.push(n);return t},isDistinct:(r,e)=>h(e.length===I.distinct(r,e).length),where:(r,e,t)=>e.filter(n=>L(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,Te(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,Te(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,Te(r));return mt([...e,...n])},combine:(r,e,t)=>{if(!t)return e;let n=t.eval(r,Te(r));return[...e,...n]},htmlChecks:(r,e,t)=>[v(!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 L(o)?n.eval(r,e):i?i.eval(r,e):[]},toBoolean:(r,e)=>{if(e.length===0)return[];let[{value:t}]=J(e,1);if(typeof t=="boolean")return[{type:l.boolean,value:t}];if(typeof t=="number"&&(t===0||t===1))return h(!!t);if(typeof t=="string"){let n=t.toLowerCase();if(["true","t","yes","y","1","1.0"].includes(n))return h(!0);if(["false","f","no","n","0","0.0"].includes(n))return h(!1)}return[]},convertsToBoolean:(r,e)=>e.length===0?[]:h(I.toBoolean(r,e).length===1),toInteger:(r,e)=>{if(e.length===0)return[];let[{value:t}]=J(e,1);return typeof t=="number"?[{type:l.integer,value:t}]:typeof t=="string"&&/^[+-]?\d+$/.exec(t)?[{type:l.integer,value:parseInt(t,10)}]:typeof t=="boolean"?[{type:l.integer,value:t?1:0}]:[]},convertsToInteger:(r,e)=>e.length===0?[]:h(I.toInteger(r,e).length===1),toDate:(r,e)=>{if(e.length===0)return[];let[{value:t}]=J(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:l.date,value:Fe(t)}]:[]},convertsToDate:(r,e)=>e.length===0?[]:h(I.toDate(r,e).length===1),toDateTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=J(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:l.dateTime,value:Fe(t)}]:[]},convertsToDateTime:(r,e)=>e.length===0?[]:h(I.toDateTime(r,e).length===1),toDecimal:(r,e)=>{if(e.length===0)return[];let[{value:t}]=J(e,1);return typeof t=="number"?[{type:l.decimal,value:t}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(t)?[{type:l.decimal,value:parseFloat(t)}]:typeof t=="boolean"?[{type:l.decimal,value:t?1:0}]:[]},convertsToDecimal:(r,e)=>e.length===0?[]:h(I.toDecimal(r,e).length===1),toQuantity:(r,e)=>{if(e.length===0)return[];let[{value:t}]=J(e,1);return w(t)?[{type:l.Quantity,value:t}]:typeof t=="number"?[{type:l.Quantity,value:{value:t,unit:"1"}}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(t)?[{type:l.Quantity,value:{value:parseFloat(t),unit:"1"}}]:typeof t=="boolean"?[{type:l.Quantity,value:{value:t?1:0,unit:"1"}}]:[]},convertsToQuantity:(r,e)=>e.length===0?[]:h(I.toQuantity(r,e).length===1),toString:(r,e)=>{if(e.length===0)return[];let[{value:t}]=J(e,1);return t==null?[]:w(t)?[{type:l.string,value:`${t.value} '${t.unit}'`}]:[{type:l.string,value:t.toString()}]},convertsToString:(r,e)=>e.length===0?[]:h(I.toString(r,e).length===1),toTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=J(e,1);if(typeof t=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(t);if(n)return[{type:l.time,value:Fe("T"+n[1])}]}return[]},convertsToTime:(r,e)=>e.length===0?[]:h(I.toTime(r,e).length===1),indexOf:(r,e,t)=>N((n,i)=>n.indexOf(i),r,e,t),substring:(r,e,t,n)=>N((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)=>N((n,i)=>n.startsWith(i),r,e,t),endsWith:(r,e,t)=>N((n,i)=>n.endsWith(i),r,e,t),contains:(r,e,t)=>N((n,i)=>n.includes(i),r,e,t),upper:(r,e)=>N(t=>t.toUpperCase(),r,e),lower:(r,e)=>N(t=>t.toLowerCase(),r,e),replace:(r,e,t,n)=>N((i,o,s)=>i.replaceAll(o,s),r,e,t,n),matches:(r,e,t)=>N((n,i)=>!!new RegExp(i).exec(n),r,e,t),replaceMatches:(r,e,t,n)=>N((i,o,s)=>i.replaceAll(new RegExp(o,"g"),s.replaceAll(/\$\{(\w+)\}/g,"$<$1>")),r,e,t,n),length:(r,e)=>N(t=>t.length,r,e),toChars:(r,e)=>N(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,Te(r))[0]?.value??"";if(typeof n!="string")throw new Error("Separator must be a string.");return[{type:l.string,value:e.map(i=>i.value?.toString()??"").join(n)}]},abs:(r,e)=>z(Math.abs,r,e),ceiling:(r,e)=>z(Math.ceil,r,e),exp:(r,e)=>z(Math.exp,r,e),floor:(r,e)=>z(Math.floor,r,e),ln:(r,e)=>z(Math.log,r,e),log:(r,e,t)=>z((n,i)=>Math.log(n)/Math.log(i),r,e,t),power:(r,e,t)=>z(Math.pow,r,e,t),round:(r,e,...t)=>z((n,i=0)=>{if(typeof i!="number"||i<0)throw new Error("Invalid precision provided to round()");let o=Math.pow(10,i);return Math.round(n*o)/o},r,e,...t),sqrt:(r,e)=>z(Math.sqrt,r,e),truncate:(r,e)=>z(t=>t|0,r,e),children:Z,descendants:Z,trace:(r,e,t)=>e,now:()=>[{type:l.dateTime,value:new Date().toISOString()}],timeOfDay:()=>[{type:l.time,value:new Date().toISOString().substring(11)}],today:()=>[{type:l.date,value:new Date().toISOString().substring(0,10)}],between:(r,e,t,n,i)=>{let o=I.toDateTime(r,t.eval(r,e));if(o.length===0)throw new Error("Invalid start date");let s=I.toDateTime(r,n.eval(r,e));if(s.length===0)throw new Error("Invalid end date");let a=i.eval(r,e)[0]?.value;if(a!=="years"&&a!=="months"&&a!=="days")throw new Error("Invalid units");let c=vt(o[0].value,s[0].value);return[{type:l.Quantity,value:{value:c[a],unit:a}}]},is:(r,e,t)=>{let n="";return t instanceof $?n=t.name:t instanceof ue&&(n=t.left.name+"."+t.right.name),n?e.map(i=>({type:l.boolean,value:yt(i,n)})):[]},not:(r,e)=>I.toBoolean(r,e).map(t=>({type:l.boolean,value:!t.value})),resolve:(r,e)=>e.map(t=>{let n=t.value,i;if(typeof n=="string")i=n;else if(typeof n=="object"){let o=n;if(o.resource)return v(o.resource);o.reference?i=o.reference:o.type&&o.identifier&&(i=`${o.type}?identifier=${o.identifier.system}|${o.identifier.value}`)}if(i?.includes("?")){let[o]=i.split("?");return{type:o,value:{resourceType:o}}}if(i?.includes("/")){let[o,s]=i.split("/");return{type:o,value:{resourceType:o,id:s}}}return{type:l.BackboneElement,value:void 0}}).filter(t=>!!t.value),as:(r,e)=>e,type:(r,e)=>e.map(({value:t})=>typeof t=="boolean"?{type:l.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof t=="number"?{type:l.BackboneElement,value:{namespace:"System",name:"Integer"}}:O(t)?{type:l.BackboneElement,value:{namespace:"FHIR",name:t.resourceType}}:{type:l.BackboneElement,value:null}),conformsTo:(r,e,t)=>{let n=t.eval(r,e)[0].value;if(!n.startsWith("http://hl7.org/fhir/StructureDefinition/"))throw new Error("Expected a StructureDefinition URL");let i=n.replace("http://hl7.org/fhir/StructureDefinition/","");return e.map(o=>({type:l.boolean,value:o.value?.resourceType===i}))},getResourceKey:(r,e)=>{let t=e[0].value;return t?.id?[{type:l.id,value:t.id}]:[]},getReferenceKey:(r,e,t)=>{let n=e[0].value;if(!n?.reference)return[];let i="";return t instanceof $&&(i=t.name),i&&!n.reference.startsWith(i+"/")?[]:[{type:l.id,value:ge(n)}]},extension:(r,e,t)=>{let n=t.eval(r,e)[0].value,i=e?.[0]?.value;if(i){let o=oe(i,n);if(o)return[{type:l.Extension,value:o}]}return[]}};function N(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=J(t,1);if(typeof i!="string")throw new Error("String function cannot be called with non-string");let o=n.map(a=>a?.eval(e,t)[0]?.value),s=r(i,...o);return s===void 0?[]:Array.isArray(s)?s.map(v):[v(s)]}function z(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=J(t,1),o=w(i),s=o?i.value:i;if(typeof s!="number")throw new Error("Math function cannot be called with non-number");let a=r(s,...n.map(p=>p.eval(e,t)[0]?.value)),c=o?l.Quantity:t[0].type,u=o?{...i,value:a}:a;return[{type:c,value:u}]}function J(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 Te(r){let e=r;for(;e.parent?.variables.$this;)e=e.parent;return[e.variables.$this]}var Ne=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()}},$=class{constructor(e){this.name=e}eval(e,t){if(this.name==="$this")return t;let n=this.getVariable(e);if(n)return[n];if(this.name.startsWith("%"))throw new Error(`Undefined variable ${this.name}`);return t.flatMap(i=>this.evalValue(i)).filter(i=>i?.value!==void 0)}getVariable(e){let t=e.variables[this.name];if(t!==void 0)return t;if(e.parent)return this.getVariable(e.parent)}evalValue(e){let t=e.value;if(!(!t||typeof t!="object"))return O(t,this.name)?e:P(e,this.name)}toString(){return this.name}},Et=class{eval(){return[]}toString(){return"{}"}},Rt=class extends st{constructor(e,t,n){super(e,t),this.impl=n}eval(e,t){return this.impl(this.child.eval(e,t))}toString(){return this.operator+this.child.toString()}},le=class extends ne{constructor(e,t){super("as",e,t)}eval(e,t){return I.ofType(e,this.left.eval(e,t),this.right)}},C=class extends ne{},V=class extends C{constructor(e,t,n,i){super(e,t,n),this.impl=i}eval(e,t){let n=this.left.eval(e,t);if(n.length!==1)return[];let i=this.right.eval(e,t);if(i.length!==1)return[];let o=n[0].value,s=i[0].value,a=w(o)?o.value:o,c=w(s)?s.value:s,u=this.impl(a,c);return typeof u=="boolean"?h(u):w(o)?[{type:l.Quantity,value:{...o,value:u}}]:[v(u)]}},Ct=class extends ne{constructor(e,t){super("&",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t),o=[...n,...i];return o.length>0&&o.every(s=>typeof s.value=="string")?[{type:l.string,value:o.map(s=>s.value).join("")}]:o}},Pt=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 h(n.some(o=>o.value===i[0].value))}},wt=class extends C{constructor(e,t){super("in",e,t)}eval(e,t){let n=H(this.left.eval(e,t)),i=this.right.eval(e,t);return n?h(i.some(o=>He(n,o)[0].value)):[]}},ue=class extends ne{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()}`}},Se=class extends ne{constructor(e,t){super("|",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return mt([...n,...i])}},At=class extends C{constructor(e,t){super("=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return $n(n,i)}},Ot=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 Gn(n,i)}},It=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 kr(n,i)}},kt=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 jn(kr(n,i))}},be=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 h(yt(n[0],i))}},Vt=class extends C{constructor(e,t){super("and",e,t)}eval(e,t){let n=H(this.left.eval(e,t),"boolean"),i=H(this.right.eval(e,t),"boolean");return n?.value===!0&&i?.value===!0?h(!0):n?.value===!1||i?.value===!1?h(!1):[]}},Dt=class extends C{constructor(e,t){super("or",e,t)}eval(e,t){let n=H(this.left.eval(e,t),"boolean"),i=H(this.right.eval(e,t),"boolean");return n?.value===!1&&i?.value===!1?h(!1):n?.value||i?.value?h(!0):[]}},Mt=class extends C{constructor(e,t){super("xor",e,t)}eval(e,t){let n=H(this.left.eval(e,t),"boolean"),i=H(this.right.eval(e,t),"boolean");return!n||!i?[]:h(n.value!==i.value)}},_t=class extends C{constructor(e,t){super("implies",e,t)}eval(e,t){let n=H(this.left.eval(e,t),"boolean"),i=H(this.right.eval(e,t),"boolean");return i?.value===!0||n?.value===!1?h(!0):!n||!i?[]:h(!1)}},ee=class{constructor(e,t){this.name=e,this.args=t}eval(e,t){let n=I[this.name];if(!n)throw new Error("Unrecognized function: "+this.name);return n(e,t,...this.args)}toString(){return`${this.name}(${this.args.map(e=>e.toString()).join(", ")})`}},Ee=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 xs=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],vs={"'":"'",'"':'"',"`":"`",r:"\r",n:`
|
|
2
|
+
`,t:" ",f:"\f","\\":"\\"},pe=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==='"'||e==="`"?this.consumeString(e):e==="@"?this.consumeDateTime():/\d/.exec(e)?this.consumeNumber():/\w/.exec(e)?this.consumeSymbol():(e==="$"||e==="%")&&/\w/.exec(t)?this.consumeSymbol():(e==="$"||e==="%")&&(t==="'"||t==='"'||t==="`")?this.consumeQuotedSymbol(t):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()!==`
|
|
3
|
+
`))}consumeString(e){this.advance();let t="",n;for(;n=this.consumeChar(e);)t+=n;let i=this.buildToken(e==="`"?"Symbol":"String",t);return this.advance(),i}consumeChar(e){let t=this.curr();if(t==="\\"){this.advance();let n=this.curr(),i=vs[n];if(i!==void 0)return this.advance(),i;if(n==="u"){this.advance();let o=/^[0-9a-fA-F]{4}$/.exec(this.str.substring(this.pos.index,this.pos.index+4))?.[0];return o?(this.advance(),this.advance(),this.advance(),this.advance(),String.fromCodePoint(parseInt(o,16))):"u"}return this.consumeChar(e)}return t===e||!t?"":(this.advance(),t)}consumeQuotedSymbol(e){this.mark();let t=this.pos.index;this.advance(),this.consumeString(e);let n=this.str.substring(t,this.pos.index);return this.buildToken("Symbol",n)}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]}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()===`
|
|
4
|
+
`?(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"&&xs.includes(r.value)))}var Ke=["true","false"],Xe=["!=","!~","<=",">=","{}","->"];function hi(r){return new pe(r,Ke,Xe).tokenize()}var g={FunctionCall:0,Dot:1,Indexer:2,UnaryAdd:3,UnarySubtract:3,Multiply:4,Divide:4,IntegerDivide:4,Modulo:4,Add:5,Subtract:5,Ampersand:5,Is:6,As:6,Union:7,GreaterThan:8,GreaterThanOrEquals:8,LessThan:8,LessThanOrEquals:8,Equals:9,Equivalent:9,NotEquals:9,NotEquivalent:9,In:10,Contains:10,And:11,Xor:12,Or:12,Implies:13,Arrow:100,Semicolon:200},Ss={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},bs={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new Ee(e,t)},precedence:g.Indexer},Es={parse(r,e){if(!(e instanceof $))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new ee(e.name,t)},precedence:g.FunctionCall};function Rs(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 Ye(){return new at().registerPrefix("String",{parse:(r,e)=>new U({type:l.string,value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new U({type:l.dateTime,value:Fe(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new U({type:l.Quantity,value:Rs(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new U({type:e.value.includes(".")?l.decimal:l.integer,value:parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new U({type:l.boolean,value:!0})}).registerPrefix("false",{parse:()=>new U({type:l.boolean,value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new $(e.value)}).registerPrefix("{}",{parse:()=>new Et}).registerPrefix("(",Ss).registerInfix("[",bs).registerInfix("(",Es).prefix("+",g.UnaryAdd,(r,e)=>new Rt("+",e,t=>t)).prefix("-",g.UnarySubtract,(r,e)=>new V("-",e,e,(t,n)=>-n)).infixLeft(".",g.Dot,(r,e,t)=>new ue(r,t)).infixLeft("/",g.Divide,(r,e,t)=>new V("/",r,t,(n,i)=>n/i)).infixLeft("*",g.Multiply,(r,e,t)=>new V("*",r,t,(n,i)=>n*i)).infixLeft("+",g.Add,(r,e,t)=>new V("+",r,t,(n,i)=>n+i)).infixLeft("-",g.Subtract,(r,e,t)=>new V("-",r,t,(n,i)=>n-i)).infixLeft("|",g.Union,(r,e,t)=>new Se(r,t)).infixLeft("=",g.Equals,(r,e,t)=>new At(r,t)).infixLeft("!=",g.NotEquals,(r,e,t)=>new Ot(r,t)).infixLeft("~",g.Equivalent,(r,e,t)=>new It(r,t)).infixLeft("!~",g.NotEquivalent,(r,e,t)=>new kt(r,t)).infixLeft("<",g.LessThan,(r,e,t)=>new V("<",r,t,(n,i)=>n<i)).infixLeft("<=",g.LessThanOrEquals,(r,e,t)=>new V("<=",r,t,(n,i)=>n<=i)).infixLeft(">",g.GreaterThan,(r,e,t)=>new V(">",r,t,(n,i)=>n>i)).infixLeft(">=",g.GreaterThanOrEquals,(r,e,t)=>new V(">=",r,t,(n,i)=>n>=i)).infixLeft("&",g.Ampersand,(r,e,t)=>new Ct(r,t)).infixLeft("and",g.And,(r,e,t)=>new Vt(r,t)).infixLeft("as",g.As,(r,e,t)=>new le(r,t)).infixLeft("contains",g.Contains,(r,e,t)=>new Pt(r,t)).infixLeft("div",g.Divide,(r,e,t)=>new V("div",r,t,(n,i)=>n/i|0)).infixLeft("in",g.In,(r,e,t)=>new wt(r,t)).infixLeft("is",g.Is,(r,e,t)=>new be(r,t)).infixLeft("mod",g.Modulo,(r,e,t)=>new V("mod",r,t,(n,i)=>n%i)).infixLeft("or",g.Or,(r,e,t)=>new Dt(r,t)).infixLeft("xor",g.Xor,(r,e,t)=>new Mt(r,t)).infixLeft("implies",g.Implies,(r,e,t)=>new _t(r,t))}var Cs=Ye();function Lt(r){return new Ne(r,Cs.construct(hi(r)).consumeAndParse())}function mp(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]=v(t[n]))}return E(r,t).map(n=>n.value)}function E(r,e,t={},n=void 0){let i;if(typeof r=="string"){let o=n?.get(r);i=o??Lt(r),n&&!o&&n.set(r,i)}else i=r;return i.eval({variables:t},e).map(o=>({type:o.type,value:o.value?.valueOf()}))}function Sp(r){let e=[];for(let t of r)t.type===l.Range?e.push([t.value?.low?.value,t.value?.high?.value]):typeof t.value=="number"&&e.push([t.value,t.value]);return e}function mi(r){let e=[];for(let t of r){let n=gt(t.value);n&&e.push(n)}return e}function yi(r){let e=[];for(let t of r){let n=ci(t);n&&e.push(n)}return e}function gi(r){let e=[];for(let t of r){let{value:n}=t;n&&(St(n)?e.push(n):q(n)?e.push(n.reference):ze(n)?e.push(D(n)):typeof n.identifier=="object"&&e.push(`identifier:${n.identifier.system}|${n.identifier.value}`))}return e}function bp(r){let e=[];for(let t of r){let{value:n}=t;typeof n=="number"?e.push({value:n}):w(n)&&e.push(n)}return e}function Ep(r){let e=[];for(let t of r)St(t.value)&&e.push(t.value);return e}function xi(r,e={}){let t=[];for(let n of r)Ps(e,t,n);return t}function Ps(r,e,t){let{type:n,value:i}=t;switch(n){case l.Identifier:ws(e,r,i);break;case l.CodeableConcept:As(e,r,i);break;case l.Coding:vi(e,r,i);break;case l.ContactPoint:Os(e,r,i);break;default:Re(e,r,void 0,i?.toString())}}function ws(r,e,t){t?.type?.text&&Re(r,e,e.textSearchSystem,t.type.text),Re(r,e,t?.system,t?.value)}function As(r,e,t){if(t?.text&&Re(r,e,e.textSearchSystem,t.text),t?.coding)for(let n of t.coding)vi(r,e,n)}function vi(r,e,t){t&&(t.display&&Re(r,e,e.textSearchSystem,t.display),Re(r,e,t.system,t.code))}function Os(r,e,t){t&&Re(r,e,t.system,t.value?.toLocaleLowerCase())}function Re(r,e,t,n){(t||n)&&!r.some(i=>i.system===t&&i.value===n)&&r.push({system:t,value:n&&e.caseInsensitive?n.toLocaleLowerCase():n})}var Ip=20,kp=1e3,f={EQUALS:"eq",NOT_EQUALS:"ne",GREATER_THAN:"gt",LESS_THAN:"lt",GREATER_THAN_OR_EQUALS:"ge",LESS_THAN_OR_EQUALS:"le",STARTS_AFTER:"sa",ENDS_BEFORE:"eb",APPROXIMATELY:"ap",CONTAINS:"contains",STARTS_WITH:"sw",EXACT:"exact",TEXT:"text",NOT:"not",ABOVE:"above",BELOW:"below",IN:"in",NOT_IN:"not-in",OF_TYPE:"of-type",MISSING:"missing",PRESENT:"present",IDENTIFIER:"identifier",ITERATE:"iterate"},Ei={contains:f.CONTAINS,exact:f.EXACT,above:f.ABOVE,below:f.BELOW,text:f.TEXT,not:f.NOT,in:f.IN,"not-in":f.NOT_IN,"of-type":f.OF_TYPE,missing:f.MISSING,identifier:f.IDENTIFIER,iterate:f.ITERATE},$r={eq:f.EQUALS,ne:f.NOT_EQUALS,lt:f.LESS_THAN,le:f.LESS_THAN_OR_EQUALS,gt:f.GREATER_THAN,ge:f.GREATER_THAN_OR_EQUALS,sa:f.STARTS_AFTER,eb:f.ENDS_BEFORE,ap:f.APPROXIMATELY,sw:f.STARTS_WITH};function Ze(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 Is(i,o)}function Is(r,e){let t={resourceType:r};for(let[n,i]of e)ks(t,n,i);return t}function ks(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=Le(r.filters,{code:e,operator:f.EQUALS,value:t});return}switch(n){case"_sort":Vs(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=f.ITERATE),r.include=Le(r.include,s);break}case"_revinclude":{let s=Ti(t);i==="iterate"&&(s.modifier=f.ITERATE),r.revInclude=Le(r.revInclude,s);break}case"_fields":case"_elements":r.fields=t.split(",");break;case"_type":r.types=t.split(",");break;case"_format":r.format=t;break;case"_pretty":r.pretty=t==="true";break;default:{let s=F.types[r.resourceType]?.searchParams?.[n];s?r.filters=Le(r.filters,Ms(s,i,t)):r.filters=Le(r.filters,_s(n,i,t))}}}}function Vs(r,e){for(let t of e.split(",")){let n,i=!1;t.startsWith("-")?(n=t.substring(1),i=!0):n=t,r.sortRules||(r.sortRules=[]),r.sortRules.push({code:n,descending:i})}}var Ds=[f.MISSING,f.PRESENT];function Ms(r,e,t){if(Ds.includes(e))return{code:r.code,operator:e,value:t};switch(r.type){case"number":case"date":case"quantity":{let{operator:n,value:i}=Ls(t);if(!Si(r,i))throw new d(b(`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(!Si(r,t))throw new d(b(`Invalid format for ${r.type} search parameter: ${t}`));return{code:r.code,operator:Fs(e),value:t};default:throw new Error("Unrecognized search parameter type: "+r.type)}}function _s(r,e,t){let n=f.EQUALS;if(e)n=e;else if(t.length>=2){let i=t.substring(0,2);i in $r&&(t.length===2||t.at(2)?.match(/\d/))&&(n=i,t=t.substring(i.length))}return{code:r,operator:n,value:t}}function Ls(r){let e=r.substring(0,2),t=$r[e];return t?{operator:t,value:r.substring(2)}:{operator:f.EQUALS,value:r}}function Fs(r){return Ei[r]??f.EQUALS}function Ti(r){let e=r.split(":");if(e.includes("*"))throw new d(b("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new d(b(`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(b(`Invalid include value '${r}'`))}function Si(r,e){switch(r.type){case"date":return _e(e);default:return!0}}var Ns=/{{([^{}]+)}}/g;function Vp(r,e){return r=r.replaceAll(Ns,(t,n)=>{let i=E(n,[],e);return i.length!==1?"":fi(i[0])}),Ze(r)}function Dp(r){let e=[];return r.fields&&e.push("_fields="+r.fields.join(",")),r.filters&&r.filters.forEach(t=>e.push(Us(t))),r.sortRules&&r.sortRules.length>0&&e.push(Bs(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.types&&r.types.length>0&&e.push("_type="+r.types.join(",")),r.include&&r.include.forEach(t=>e.push(bi("_include",t))),r.revInclude&&r.revInclude.forEach(t=>e.push(bi("_revinclude",t))),e.length===0?"":(bt(e),"?"+e.join("&"))}function Us(r){let e=r.operator in Ei?":"+r.operator:"",t=r.operator!==f.EQUALS&&r.operator in $r?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function Bs(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function bi(r,e){return r+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function et(r){let e=[],t="",n=!1;for(let i of r)n?(t+=i,n=!1):i==="\\"?n=!0:i===","?(e.push(t),t=""):t+=i;return e.push(t),e}function Ft(r,e){if(e.resourceType!==r.resourceType)return!1;if(e.filters){for(let t of e.filters)if(!Ws(r,e,t))return!1}return!0}function Ws(r,e,t){let n=F.types[e.resourceType]?.searchParams?.[t.code];if(!n)return!1;let i=E(n.expression,[v(r)]);if(t.operator===f.MISSING||t.operator===f.PRESENT)return qs(i,t);switch(n.type){case"reference":return js(i,t);case"string":case"uri":return Hs(i,t);case"token":return $s(i,t);case"date":return zs(i,t);default:return!1}}function qs(r,e){let t=r.length>0;return(e.operator===f.MISSING&&e.value==="false"||e.operator===f.PRESENT&&e.value==="true")===t}function js(r,e){let t=Nt(e.operator);if(e.value===""&&r.length===0)return e.operator===f.EQUALS;let n=gi(r);for(let i of et(e.value)){let o=n.includes(i);if(!o&&e.code==="_compartment"&&(o=n.some(s=>s?.endsWith("/"+i))),o)return!t}return t}function $s(r,e){let t=xi(r),n=et(e.value),i=Nt(e.operator);for(let o of t)for(let s of n)if(Gs(o,s))return!i;return i}function Gs(r,e){if(e.includes("|")){let[t,n]=e.split("|").map(i=>i.toLowerCase());return!t&&!n?!1:t?r.system?.toLowerCase()===t&&(!n||r.value?.toLowerCase()===n):!r.system&&r.value?.toLowerCase()===n}return r.value?.toLowerCase()===e.toLowerCase()}function Hs(r,e){let t=yi(r),n=et(e.value),i=Nt(e.operator);for(let o of t)for(let s of n)if(Qs(o,s))return!i;return i}function Qs(r,e){return r.toLowerCase().includes(e.toLowerCase())}function zs(r,e){let t=mi(r),n=et(e.value),i=Nt(e.operator);for(let o of t)for(let s of n)if(Js(o,e.operator,s))return!i;return i}function Js(r,e,t){if(!r)return!1;let n=gt(t);if(!n)return!1;let i=r.start??"0000",o=r.end??"9999",s=n.start,a=n.end;switch(e){case f.APPROXIMATELY:case f.EQUALS:case f.NOT_EQUALS:return i<a&&o>s;case f.LESS_THAN:return i<s;case f.GREATER_THAN:return o>a;case f.LESS_THAN_OR_EQUALS:return i<=a;case f.GREATER_THAN_OR_EQUALS:return o>=s;case f.STARTS_AFTER:return i>a;case f.ENDS_BEFORE:return o<s;default:return!1}}function Nt(r){return r===f.NOT_EQUALS||r===f.NOT}var Ks={resourceType:"*"},Xs=["DomainConfiguration","JsonWebKey","Login"],Ys=["PasswordChangeRequest","UserSecurityRequest","Project","ProjectMembership","User"],Ce={READ:"read",VREAD:"vread",UPDATE:"update",DELETE:"delete",HISTORY:"history",CREATE:"create",SEARCH:"search"},Zs=[Ce.READ,Ce.VREAD,Ce.HISTORY,Ce.SEARCH];function jp(r,e){return Ri(r,Ce.SEARCH,e)}function $p(r,e){return Xs.includes(e)?!1:Ri(r,Ce.UPDATE,e)}function Ri(r,e,t){return!!r.resource?.some(n=>Ci(n,t,e))}function Gp(r,e){return!!ea(e,Ce.UPDATE,r)}function ea(r,e,t){return t?t.resource?.find(n=>ta(r,e,n)):Ks}function ta(r,e,t){let n=r.resourceType;return Ci(t,n,e)?n==="Binary"?!0:!(t.compartment&&!r.meta?.compartment?.some(i=>i.reference===t.compartment?.reference)||t.criteria&&!Ft(r,Ze(t.criteria))):!1}function Ci(r,e,t){return r.resourceType!==e&&(r.resourceType!=="*"||Ys.includes(e))?!1:r.interaction?r.interaction.includes(t):!r.readonly||Zs.includes(t)}function B(){return typeof window<"u"}function Qp(){return typeof Buffer<"u"}function zp(){return typeof window<"u"?window:void 0}function Gr(){return typeof Buffer<"u"?Buffer:void 0}var te={assign(r){B()&&globalThis.location.assign(r)},reload(){B()&&globalThis.location.reload()},getSearch(){return B()?globalThis.location.search:""},getPathname(){return B()?globalThis.location.pathname:""},getLocation(){return B()?globalThis.location.toString():""},getOrigin(){return B()?globalThis.location.protocol+"//"+globalThis.location.host+"/":""}};function ra(r){if(B()){let t=window.atob(r),n=Uint8Array.from(t,i=>i.charCodeAt(0));return new window.TextDecoder().decode(n)}let e=Gr();if(e)return e.from(r,"base64").toString("utf-8");throw new Error("Unable to decode base64")}function Ut(r){if(B()){let t=new window.TextEncoder().encode(r),n=String.fromCharCode.apply(null,t);return window.btoa(n)}let e=Gr();if(e)return e.from(r,"utf8").toString("base64");throw new Error("Unable to encode base64")}function Xp(r){return Ut(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/[=]{1,2}$/,"")}function Pi(r){r=r.padEnd(r.length+(4-r.length%4)%4,"=");let e=r.replace(/-/g,"+").replace(/_/g,"/");return ra(e)}function Hr(){let r=new Uint32Array(28);return crypto.getRandomValues(r),ei(r.buffer)}async function wi(r){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(r))}function Pe(){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 na(r){let e={};r=xe(r);for(let i of r.entry||[]){let o=i.resource;if(!o)continue;o.meta!==void 0&&(delete o.meta.author,delete o.meta.compartment,delete o.meta.lastUpdated,delete o.meta.project,delete o.meta.versionId,Object.keys(o.meta).length===0&&delete o.meta);let s=o?.id;s&&(e[s]=Pe(),i.fullUrl="urn:uuid:"+e[s],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)=>ia(i,o,e),2);return oa(JSON.parse(n))}function ia(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 oa(r){let e=aa(r),{sorted:t,cycles:n}=sa(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}}var Ue={NotVisited:"NotVisited",Visiting:"Visiting",Visited:"Visited"};function sa(r){let e=[],t={},n=[];for(let o of Object.keys(r))t[o]=Ue.NotVisited;function i(o,s){if(t[o]===Ue.Visited)return!0;if(t[o]===Ue.Visiting){let c=s.lastIndexOf(o);return c!==-1&&n.push(s.slice(c)),!0}t[o]=Ue.Visiting,s.push(o);let a=!1;for(let c of r[o])i(c,s)||(a=!0);return t[o]=Ue.Visited,s.pop(),e.unshift(o),!a}for(let o in r)t[o]===Ue.NotVisited&&i(o,[]);return{sorted:e,cycles:n}}function Ai(r,e){for(let t in r)if(r[t]&&typeof r[t]=="object"){let n=r[t];if(q(n)){let i=n.reference;i.startsWith("urn:uuid:")&&e(i)}else Ai(n,e)}}function aa(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&&Ai(t.resource,i=>{e[i]&&e[i].push(n)})}return e}function id(r){r=xe(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=Pe());return na(e)}function od(r,e,t){return r.entry?.find(({resource:n})=>n?.resourceType===e&&n?.id===t)?.resource}var A={CSS:"text/css",DICOM:"application/dicom",FAVICON:"image/vnd.microsoft.icon",FHIR_JSON:"application/fhir+json",FORM_URL_ENCODED:"application/x-www-form-urlencoded",HL7_V2:"x-application/hl7-v2+er7",HTML:"text/html",JAVASCRIPT:"text/javascript",JSON:"application/json",JSON_PATCH:"application/json-patch+json",JWT:"application/jwt",MULTIPART_FORM_DATA:"multipart/form-data",PNG:"image/png",SCIM_JSON:"application/scim+json",SVG:"image/svg+xml",TEXT:"text/plain",TYPESCRIPT:"text/typescript",PING:"x-application/ping",XML:"text/xml",CDA_XML:"application/cda+xml",OCTET_STREAM:"application/octet-stream"};var Qr=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={}}},K=class{constructor(){this.emitter=new Qr}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 zr={"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"},ca=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],Jr=["DiagnosticReport-update"];function Oi(r){return Jr.includes(r)}function Ii(r){if(Jr.includes(r))throw new d(y(`'context.version' is required for '${r}'.`))}var ua={"Patient-open":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"Patient-close":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"ImagingStudy-open":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"ImagingStudy-close":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"Encounter-open":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"Encounter-close":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"DiagnosticReport-open":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-close":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-select":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},select:{resourceType:"*",reference:!0,manyAllowed:!0}},"DiagnosticReport-update":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},updates:{resourceType:"Bundle"}},syncerror:{operationoutcome:{resourceType:"OperationOutcome"}}};function la(r){return ca.includes(r)}function ki(r){return!!r.endpoint}function Kr(r){if(!Wt(r))throw new d(y("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 ki(r)&&(o.endpoint=r.endpoint),new URLSearchParams(o).toString()}function Wt(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(!zr[o])return!1;return!(ki(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function pa(r,e,t,n){if(typeof e!="object")throw new d(y(`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(y(`context[${t}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new d(y(`context[${t}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!la(e.resourceType))throw new d(y(`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(y(`context[${t}] is invalid. context[${t}] for the '${r}' event should contain resource of type ${i}.`))}}function da(r,e,t,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),n.reference){if(!q(e.reference))throw new d(y(`context[${t}] is invalid. Expected key '${e.key}' to be a reference.`))}else pa(r,e.resource,t,n)}function fa(r,e){let t=new Map,n=ua[r];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new d(y(`Key '${o}' not found for event '${r}'. Make sure to add only valid keys.`));da(r,e[i],i,n[o],t)}for(let[i,o]of Object.entries(n)){if(!(o.optional||t.has(i)))throw new d(y(`Missing required key '${i}' on context for '${r}' event.`));if(!o.manyAllowed&&(t.get(i)??0)>1)throw new d(y(`${t.get(i)} context entries with key '${i}' found for the '${r}' event when schema only allows for 1.`))}}function Xr(r,e,t,n){if(!(r&&typeof r=="string"))throw new d(y("Must provide a topic."));if(!zr[e])throw new d(y(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(zr).join(", ")}`));if(typeof t!="object")throw new d(y("context must be a context object or array of context objects."));if(Jr.includes(e)&&!n)throw new d(y(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(t)?t:[t];return fa(e,i),{timestamp:new Date().toISOString(),id:Pe(),event:{"hub.topic":r,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var Bt=class extends K{constructor(e){if(super(),this.subRequest=e,!e.endpoint)throw new d(y("Subscription request should contain an endpoint."));if(!Wt(e))throw new d(y("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 ha(r){return JSON.parse(Pi(r))}function Vi(r){return r.split(".").length===3}function qt(r){let[e,t,n]=r.split(".");return ha(t)}function Di(r){try{return typeof qt(r).login_id=="string"}catch{return!1}}function Mi(r){try{let t=qt(r).exp;return typeof t=="number"?t*1e3:void 0}catch{return}}var jt=class{constructor(e){this.medplum=e}async get(e){return this.medplum.get(`keyvalue/v1/${e}`)}async set(e,t){await this.medplum.put(`keyvalue/v1/${e}`,t,A.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var _i;_i=Symbol.toStringTag;var M=class{constructor(e){this[_i]="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 tt=class{constructor(e){this.storage=e??(typeof localStorage<"u"?localStorage:new Yr)}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?Tt(t):void 0)}},Yr=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]}},Li=class extends tt{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 Be={Event:typeof globalThis.Event<"u"?globalThis.Event:void 0,ErrorEvent:void 0,CloseEvent:void 0},Fi=!1;function ma(){if(typeof globalThis.Event>"u")throw new Error("Unable to lazy init events for ReconnectingWebSocket. globalThis.Event is not defined yet");Be.Event=globalThis.Event,Be.ErrorEvent=class extends Event{constructor(e,t){super("error",t),this.message=e.message,this.error=e}},Be.CloseEvent=class extends Event{constructor(t=1e3,n="",i){super("close",i);this.wasClean=!0;this.code=t,this.reason=n}}}function ya(r,e){if(!r)throw new Error(e)}function $t(r){return new r.constructor(r.type,r)}var we={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},Ni=!1,Gt=class r extends K{constructor(t,n,i={}){Fi||(ma(),Fi=!0);super();this._retryCount=-1;this._shouldReconnect=!0;this._connectLock=!1;this._closeCalled=!1;this._messageQueue=[];this._debugLogger=console.log.bind(console);this.onclose=null;this.onerror=null;this.onmessage=null;this.onopen=null;this._handleOpen=t=>{this._debug("open event");let{minUptime:n=we.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),n),ya(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($t(t))};this._handleMessage=t=>{this._debug("message event"),this.onmessage&&this.onmessage(t),this.dispatchEvent($t(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($t(t)),this._connect()};this._handleClose=t=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(t),this.dispatchEvent($t(t))};this._url=t,this._protocols=n,this._options=i,this._options.startClosed&&(this._shouldReconnect=!1),this._options.binaryType?this._binaryType=this._options.binaryType:this._binaryType="blob",this._options.debugLogger&&(this._debugLogger=this._options.debugLogger),this._connect()}static get CONNECTING(){return 0}static get OPEN(){return 1}static get CLOSING(){return 2}static get CLOSED(){return 3}get CONNECTING(){return r.CONNECTING}get OPEN(){return r.OPEN}get CLOSING(){return r.CLOSING}get CLOSED(){return r.CLOSED}get binaryType(){return this._ws?this._ws.binaryType:this._binaryType}set binaryType(t){this._binaryType=t,this._ws&&(this._ws.binaryType=t)}get retryCount(){return Math.max(this._retryCount,0)}get bufferedAmount(){return this._messageQueue.reduce((n,i)=>(typeof i=="string"?n+=i.length:i instanceof Blob?n+=i.size:n+=i.byteLength,n),0)+(this._ws?.bufferedAmount??0)}get extensions(){return this._ws?.extensions??""}get protocol(){return this._ws?.protocol??""}get readyState(){return this._ws?this._ws.readyState:this._options.startClosed?r.CLOSED:r.CONNECTING}get url(){return this._ws?this._ws.url:""}get shouldReconnect(){return this._shouldReconnect}close(t=1e3,n){if(this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),!this._ws){this._debug("close enqueued: no ws instance");return}if(this._ws.readyState===this.CLOSED){this._debug("close: already closed");return}this._ws.close(t,n)}reconnect(t,n){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED?this._connect():(this._disconnect(t,n),this._connect())}send(t){if(this._ws&&this._ws.readyState===this.OPEN)this._debug("send",t),this._ws.send(t);else{let{maxEnqueuedMessages:n=we.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=we.reconnectionDelayGrowFactor,minReconnectionDelay:n=we.minReconnectionDelay,maxReconnectionDelay:i=we.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=we.maxRetries,connectionTimeout:n=we.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"&&!Ni&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),Ni=!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 Be.ErrorEvent(Error(i.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new Be.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(t=1e3,n){if(this._clearTimeouts(),!!this._ws){this._removeListeners();try{this._ws.close(t,n),this._handleClose(new Be.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 ga=5e3,rt=class extends K{constructor(...e){super(),this.criteria=new Set(e)}getCriteria(){return this.criteria}_addCriteria(e){this.criteria.add(e)}_removeCriteria(e){this.criteria.delete(e)}},Zr=class{constructor(e,t){this.connecting=!1;this.criteria=e,this.emitter=new rt(e),this.refCount=1,this.subscriptionProps=t?{...t}:void 0}clearAttachedSubscription(){this.subscriptionId=void 0,this.token=void 0}},Ht=class{constructor(e,t,n){this.pingTimer=void 0;this.waitingForPong=!1;if(!(e instanceof Qt))throw new d(y("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(t).toString()}catch{throw new d(y("Not a valid URL"))}let o=n?.ReconnectingWebSocket?new n.ReconnectingWebSocket(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger}):new Gt(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger});this.medplum=e,this.ws=o,this.masterSubEmitter=new rt,this.criteriaEntries=new Map,this.criteriaEntriesBySubscriptionId=new Map,this.wsClosed=!1,this.pingIntervalMs=n?.pingIntervalMs??ga,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=ge(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(ge(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(En(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 ${D(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(y("Failed to get token"));if(!o)throw new d(y("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(se(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!se(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(Ve(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 Zr(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 rt(...Array.from(this.criteriaEntries.keys()))),this.masterSubEmitter}};async function Md({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(!xa(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=Ze(o);if(r.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${r.resourceType}")`),!1;if(!await va(e,r,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let c=oe(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):Ft(r,s)}function xa(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 va(r,e,t){let n=oe(r,"https://medplum.com/fhir/StructureDefinition/fhir-path-criteria-expression");if(!n?.valueString)return!0;let i=await t(e),o={"%current":v(e),"%previous":v(i??{})};return E(n.valueString,[v(e)],o)?.[0]?.value===!0}var en="4.4.2-c67b23d5c",Yd="medplum-cli",Ta=A.FHIR_JSON+", */*; q=0.1",Sa="https://api.medplum.com/",ba=1e3,Ea=6e4,Ra=0,Ca=3e5,Pa="Binary/",Ui={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},We={ClientCredentials:"client_credentials",AuthorizationCode:"authorization_code",RefreshToken:"refresh_token",JwtBearer:"urn:ietf:params:oauth:grant-type:jwt-bearer",TokenExchange:"urn:ietf:params:oauth:grant-type:token-exchange"},wa={AccessToken:"urn:ietf:params:oauth:token-type:access_token",RefreshToken:"urn:ietf:params:oauth:token-type:refresh_token",IdToken:"urn:ietf:params:oauth:token-type:id_token",Saml1Token:"urn:ietf:params:oauth:token-type:saml1",Saml2Token:"urn:ietf:params:oauth:token-type:saml2"},Zd={ClientSecretBasic:"client_secret_basic",ClientSecretPost:"client_secret_post",ClientSecretJwt:"client_secret_jwt",PrivateKeyJwt:"private_key_jwt",None:"none"},Aa={JwtBearer:"urn:ietf:params:oauth:client-assertion-type:jwt-bearer"},Qt=class extends K{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??Oa(),this.storage=t?.storage??new tt,this.createPdfImpl=t?.createPdf,this.baseUrl=Br(t?.baseUrl??Sa),this.fhirBaseUrl=j(this.baseUrl,t?.fhirUrlPath??"fhir/R4"),this.authorizeUrl=j(this.baseUrl,t?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=j(this.baseUrl,t?.tokenUrl??"oauth2/token"),this.logoutUrl=j(this.baseUrl,t?.logoutUrl??"oauth2/logout"),this.fhircastHubUrl=j(this.baseUrl,t?.fhircastHubUrl??"fhircast/STU3"),this.clientId=t?.clientId??"",this.clientSecret=t?.clientSecret??"",this.credentialsInHeader=t?.authCredentialsMethod==="header",this.defaultHeaders=t?.defaultHeaders??{},this.onUnauthenticated=t?.onUnauthenticated,this.refreshGracePeriod=t?.refreshGracePeriod??Ca,this.cacheTime=t?.cacheTime??(B()?Ea:Ra),this.cacheTime>0?this.requestCache=new Oe(t?.resourceCacheSize??ba):this.requestCache=void 0,t?.autoBatchTime?(this.autoBatchTime=t.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0),t?.accessToken&&this.setAccessToken(t.accessToken),this.storage.getInitPromise===void 0?(t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initPromise=Promise.resolve(),this.dispatchEvent({type:"storageInitialized"})):(this.initComplete=!1,this.initPromise=this.storage.getInitPromise(),this.initPromise.then(()=>{t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initComplete=!0,this.dispatchEvent({type:"storageInitialized"})}).catch(n=>{console.error(n),this.initComplete=!0,this.dispatchEvent({type:"storageInitFailed",payload:{error:n}})})),this.setupStorageListener()}get isInitialized(){return this.initComplete}getInitPromise(){return this.initPromise}async attemptResumeActiveLogin(){let t=this.getActiveLogin();t&&(this.setAccessToken(t.accessToken,t.refreshToken),await this.refreshProfile())}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}getFhircastHubUrl(){return this.fhircastHubUrl}getDefaultHeaders(){return this.defaultHeaders}clear(){this.storage.clear(),B()&&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=j(this.fhirBaseUrl,t);if(this.requestCache)for(let i of this.requestCache.keys())(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache.delete(i)}get(t,n={}){t=t.toString();let i=this.getCacheEntry(t,n);if(i)return i.value;let o;t.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue&&!n.disableAutoBatch?o=new Promise((a,c)=>{this.autoBatchQueue.push({method:"GET",url:t.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:c}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):o=this.request("GET",t,n);let s=new M(o);return this.setCacheEntry(t,s),s}post(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("POST",t,o)}put(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("PUT",t,o)}patch(t,n,i={}){return t=t.toString(),this.setRequestBody(i,n),this.setRequestContentType(i,A.JSON_PATCH),this.invalidateUrl(t),this.request("PATCH",t,i)}delete(t,n){return t=t.toString(),this.invalidateUrl(t),this.request("DELETE",t,n)}async startNewUser(t,n){let{codeChallengeMethod:i,codeChallenge:o}=await this.startPkce();return this.post("auth/newuser",{...t,clientId:t.clientId??this.clientId,codeChallengeMethod:i,codeChallenge:o},void 0,n)}async startNewProject(t,n){return this.post("auth/newproject",t,void 0,n)}async startNewPatient(t,n){return this.post("auth/newpatient",t,void 0,n)}async startLogin(t,n){return this.post("auth/login",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async startGoogleLogin(t,n){return this.post("auth/google",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async ensureCodeChallenge(t){return t.codeChallenge?t:{...t,...await this.startPkce()}}async signOut(){await this.post(this.logoutUrl,{}),this.clear()}async signInWithRedirect(t){let i=new URLSearchParams(te.getSearch()).get("code");if(!i){await this.requestAuthorization(t);return}return this.processCode(i)}signOutWithRedirect(){te.assign(this.logoutUrl)}async signInWithExternalAuth(t,n,i,o,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),te.assign(this.getExternalAuthRedirectUri(t,n,i,a,s))}async exchangeExternalAccessToken(t,n){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");return this.fetchTokens({grant_type:We.TokenExchange,subject_token_type:wa.AccessToken,client_id:n,subject_token:t})}getExternalAuthRedirectUri(t,n,i,o,s=!0){let a=new URL(t);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",n),a.searchParams.set("redirect_uri",i),a.searchParams.set("scope",o.scope??"openid profile email"),a.searchParams.set("state",JSON.stringify(o)),s){let{codeChallenge:c,codeChallengeMethod:u}=o;if(!u)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!c)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");a.searchParams.set("code_challenge_method",u),a.searchParams.set("code_challenge",c)}return a.toString()}fhirUrl(...t){return new URL(j(this.fhirBaseUrl,t.join("/")))}fhirSearchUrl(t,n){let i=this.fhirUrl(t);return n&&(i.search=ai(n)),i}search(t,n,i){let o=this.fhirSearchUrl(t,n),s="search-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=this.getBundle(o,i);return this.setCacheEntry(s,c),c}searchOne(t,n,i){let o=this.fhirSearchUrl(t,n);o.searchParams.set("_count","1"),o.searchParams.sort();let s="searchOne-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=new M(this.search(t,o.searchParams,i).then(u=>u.entry?.[0]?.resource));return this.setCacheEntry(s,c),c}searchResources(t,n,i){let s="searchResources-"+this.fhirSearchUrl(t,n).toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=new M(this.search(t,n,i).then(Wi));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;s.has("_count")||s.set("_count","1000");let a=await this.search(t,s,i),c=a.link?.find(u=>u.relation==="next");if(!a.entry?.length&&!c)break;yield Wi(a),o=c?.url?new URL(c.url):void 0}}valueSetExpand(t,n){let i=this.fhirUrl("ValueSet","$expand");return i.search=new URLSearchParams(t).toString(),this.get(i.toString(),n)}getCached(t,n){let i=this.requestCache?.get(this.fhirUrl(t,n).toString())?.value;return i?.isOk()?i.read():void 0}getCachedReference(t){let n=t.reference;if(!n)return;if(n==="system")return Ui;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(Ui));let[o,s]=i.split("/");return!o||!s?new M(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}requestSchema(t){if(_n(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=`{
|
|
5
5
|
StructureDefinitionList(_filter: "name eq ${t}") {
|
|
6
6
|
resourceType,
|
|
7
7
|
name,
|
|
@@ -41,17 +41,17 @@ var it=class{constructor(e,t){this.operator=e,this.child=t}toString(){return`${t
|
|
|
41
41
|
expression,
|
|
42
42
|
target
|
|
43
43
|
}
|
|
44
|
-
}`.replace(/\s+/g," "),a=await this.graphql(s);Tr(a.data.StructureDefinitionList);for(let c of a.data.SearchParameterList)qr(c)})());return this.setCacheEntry(n,o),o}requestProfileSchema(t,n){if(!n?.expandProfile&&_n(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(),{});Tr(c)}else{let a=await this.searchOne("StructureDefinition",{url:t,_sort:"-_lastUpdated"});if(!a){console.warn(`No StructureDefinition found for ${t}!`);return}Sr(a)}})());return this.setCacheEntry(i,s),s}readHistory(t,n,i,o){let s=this.fhirUrl(t,n,"_history");return i?.count&&s.searchParams.set("_count",i.count.toString()),i?.offset&&s.searchParams.set("_offset",i.offset.toString()),this.get(s.toString(),o)}readVersion(t,n,i,o){return this.get(this.fhirUrl(t,n,"_history",i),o)}readPatientEverything(t,n){return this.getBundle(this.fhirUrl("Patient",t,"$everything"),n)}readPatientSummary(t,n){return this.getBundle(this.fhirUrl("Patient",t,"$summary"),n)}createResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");return this.invalidateSearches(t.resourceType),this.post(this.fhirUrl(t.resourceType),t,void 0,n)}async createResourceIfNoneExist(t,n,i){let o=this.fhirUrl(t.resourceType);i?i.headers?Array.isArray(i.headers)?i.headers.push(["If-None-Exist",n]):i.headers instanceof Headers?i.headers.set("If-None-Exist",n):i.headers["If-None-Exist"]=n:i.headers={"If-None-Exist":n}:i={headers:{"If-None-Exist":n}};let s=await this.post(o,t,void 0,i);return this.cacheResource(s),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),s}async upsertResource(t,n,i){let o=this.fhirSearchUrl(t.resourceType,n),s=await this.put(o,t,void 0,i);return s||(s=t),this.cacheResource(s),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),s}async createAttachment(t,n,i,o,s){let a=Wi(t,n,i,o);if(a.contentType===A.XML){let d=a.data,m;d instanceof Blob?m=await new Promise((x,B)=>{let $=new FileReader;$.onload=()=>{if(!$.result){B(new Error("Failed to load file"));return}x($.result)},$.readAsText(d,"utf-8")}):ArrayBuffer.isView(d)?m=new TextDecoder().decode(d):m=d,m.includes("<ClinicalDocument")&&m.includes("urn:hl7-org:v3")&&(a={...a,contentType:A.CDA_XML})}let c=s??(typeof n=="object"?n:{}),u=await this.createBinary(a,c);return{contentType:a.contentType,url:u.url,title:a.filename}}createBinary(t,n,i,o,s){let a=Wi(t,n,i,o),c=s??(typeof n=="object"?n:{}),{data:u,contentType:d,filename:m,securityContext:x,onProgress:B}=a,$=this.fhirUrl("Binary");return m&&$.searchParams.set("_filename",m),x?.reference&&this.setRequestHeader(c,"X-Security-Context",x.reference),B?this.uploadwithProgress($,u,d,B,c):this.post($,u,d,c)}uploadwithProgress(t,n,i,o,s){return new Promise((a,c)=>{let u=new XMLHttpRequest,d=()=>u.abort();s?.signal?.addEventListener("abort",d);let m=x=>{s?.signal?.removeEventListener("abort",d),x instanceof Error?c(x):a(x)};if(u.responseType="json",u.onabort=()=>m(new DOMException("Request aborted","AbortError")),u.onerror=()=>m(new Error("Request error")),o&&(u.upload.onprogress=x=>o(x),u.upload.onload=x=>o(x)),u.onload=()=>{u.status>=200&&u.status<300?m(u.response):m(new p(ct(u.response||u.statusText)))},u.open("POST",t),u.withCredentials=!0,u.setRequestHeader("Authorization","Bearer "+this.accessToken),u.setRequestHeader("Cache-Control","no-cache, no-store, max-age=0"),u.setRequestHeader("Content-Type",i),this.options.extendedMode!==!1&&u.setRequestHeader("X-Medplum","extended"),s?.headers){let x=s.headers;for(let[B,$]of Object.entries(x))u.setRequestHeader(B,$)}u.send(n)})}async createPdf(t,n,i,o){if(!this.createPdfImpl)throw new Error("PDF creation not enabled");let s=ka(t,n,i,o),a=typeof n=="object"?n:{},{docDefinition:c,tableLayouts:u,fonts:d,...m}=s,x=await this.createPdfImpl(c,u,d),B={...m,data:x,contentType:"application/pdf"};return this.createBinary(B,a)}createComment(t,n,i){let o=this.getProfile(),s,a;return t.resourceType==="Encounter"&&(s=he(t),a=t.subject),t.resourceType==="ServiceRequest"&&(s=t.encounter,a=t.subject),t.resourceType==="Patient"&&(a=he(t)),this.createResource({resourceType:"Communication",status:"completed",basedOn:[he(t)],encounter:s,subject:a,sender:o?he(o):void 0,sent:new Date().toISOString(),payload:[{contentString:n}]},i)}async updateResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");if(!t.id)throw new Error("Missing id");let i=await this.put(this.fhirUrl(t.resourceType,t.id),t,void 0,n);return i||(i=t),this.cacheResource(i),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),i}async patchResource(t,n,i,o){let s=await this.patch(this.fhirUrl(t,n),i,o);return this.cacheResource(s),this.invalidateUrl(this.fhirUrl(t,n,"_history")),this.invalidateSearches(t),s}deleteResource(t,n,i){return this.deleteCacheEntry(this.fhirUrl(t,n).toString()),this.invalidateSearches(t),this.delete(this.fhirUrl(t,n),i)}validateResource(t,n){return this.post(this.fhirUrl(t.resourceType,"$validate"),t,void 0,n)}executeBot(t,n,i,o){let s;if(typeof t=="string"){let a=t;s=this.fhirUrl("Bot",a,"$execute")}else{let a=t;s=this.fhirUrl("Bot","$execute"),s.searchParams.set("identifier",a.system+"|"+a.value)}return this.post(s,n,i,o)}executeBatch(t,n){return this.post(this.fhirBaseUrl,t,void 0,n)}sendEmail(t,n){return this.post("email/v1/send",t,A.JSON,n)}graphql(t,n,i,o){return this.post(this.fhirUrl("$graphql"),{query:t,operationName:n,variables:i},A.JSON,o)}readResourceGraph(t,n,i,o){return this.get(`${this.fhirUrl(t,n)}/$graph?graph=${i}`,o)}pushToAgent(t,n,i,o,s,a){let{waitTimeout:c,...u}=a??{};return this.post(this.fhirUrl("Agent",me(t),"$push"),{destination:typeof n=="string"?n:D(n),body:i,contentType:o,waitForResponse:s,...c!==void 0?{waitTimeout:c}:void 0},A.FHIR_JSON,u)}getActiveLogin(){return this.storage.getObject("activeLogin")}async setActiveLogin(t){(!this.sessionDetails?.profile||D(this.sessionDetails.profile)!==t.profile?.reference)&&this.clearActiveLogin(),this.setAccessToken(t.accessToken,t.refreshToken),this.storage.setObject("activeLogin",t),this.addLogin(t),this.refreshPromise=void 0,await this.refreshProfile()}getAccessToken(){return this.accessToken}isAuthenticated(t){return this.accessTokenExpires!==void 0&&Date.now()<this.accessTokenExpires-(t??this.refreshGracePeriod)}setAccessToken(t,n){this.accessToken=t,this.refreshToken=n,this.accessTokenExpires=Vi(t),this.medplumServer=ki(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(Ca)&&(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=he(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 createDocumentReference(t,n){let{additionalFields:i,...o}=t,s=await this.createResource({resourceType:"DocumentReference",status:"current",content:[{attachment:{contentType:t.contentType}}],...i});o.securityContext||(o.securityContext=he(s));let a=await this.createAttachment(o,n);return this.updateResource({...s,content:[{attachment:a}]})}async bulkExport(t="",n,i,o){let s=t&&`${t}/`,a=this.fhirUrl(`${s}$export`);return n&&a.searchParams.set("_type",n),i&&a.searchParams.set("_since",i),this.startAsyncRequest(a.toString(),o)}async startAsyncRequest(t,n={}){this.addFetchOptionsDefaults(n);let i=n.headers;return i.Prefer="respond-async",this.request("POST",t,n)}get keyValue(){return this.keyValueClient||(this.keyValueClient=new Wt(this)),this.keyValueClient}getBundle(t,n){return new M((async()=>{let i=await this.get(t,n);if(i.entry)for(let o of i.entry)this.cacheResource(o.resource);return i})())}getCacheEntry(t,n){if(!this.requestCache||n?.cache==="no-cache"||n?.cache==="reload")return;let i=this.requestCache.get(t);if(!(!i||i.requestTime+this.cacheTime<Date.now()))return i}setCacheEntry(t,n){this.requestCache&&this.requestCache.set(t,{requestTime:Date.now(),value:n})}cacheResource(t){t?.id&&!t.meta?.tag?.some(n=>n.code==="SUBSETTED")&&this.setCacheEntry(this.fhirUrl(t.resourceType,t.id).toString(),new M(Promise.resolve(t)))}deleteCacheEntry(t){this.requestCache&&this.requestCache.delete(t)}async request(t,n,i={},o={}){await this.refreshIfExpired(),i.method=t,this.addFetchOptionsDefaults(i);let s=await this.fetchWithRetry(n,i);if(s.status===401)return this.handleUnauthenticated(t,n,i);if(s.status===204||s.status===304)return;let c=s.headers.get("content-type")?.includes("json");if(s.status===404&&!c)throw new p(vn);let u=await this.parseBody(s,c);if(s.status===200&&i.followRedirectOnOk||s.status===201&&i.followRedirectOnCreated){let d=await Ui(s,u);if(d)return this.request("GET",d,{...i,body:void 0})}if(s.status===202&&i.pollStatusOnAccepted){let m=await Ui(s,u)??o.statusUrl;if(m)return this.pollStatus(m,i,o)}if(s.status>=400)throw new p(ct(u));return u}async parseBody(t,n){let i;if(t.headers.get("content-length")!=="0"){if(n)try{i=await t.json()}catch(o){throw console.error("Error parsing response",t.status,o),o}else i=await t.text();return i}}async fetchWithRetry(t,n){t.startsWith("http")||(t=q(this.baseUrl,t));let i=n?.maxRetries??2;for(let o=0;o<=i;o++)try{this.options.verbose&&this.logRequest(t,n);let s=await this.fetch(t,n);if(this.options.verbose&&this.logResponse(s),this.setCurrentRateLimit(s),o>=i||!Va(s))return s;let a=this.getRetryDelay(o),c=n.maxRetryTime??2e3;if(a>c)return s;await Fr(a)}catch(s){if(s.message==="Failed to fetch"&&o===0&&this.dispatchEvent({type:"offline"}),s.name==="AbortError"||o===i)throw s}throw new Error("Unreachable")}logRequest(t,n){if(console.log(`> ${n.method} ${t}`),n.headers){let i=n.headers;for(let o of Tt(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}`))}setCurrentRateLimit(t){let n=t.headers?.get("ratelimit");n&&(this.currentRateLimits=n)}rateLimitStatus(){if(!this.currentRateLimits)return[];let t=this.currentRateLimits;return t.split(/\s*;\s*/g).map(n=>{let i=n.split(/\s*,\s*/g);if(i.length!==3)throw new Error("Could not parse RateLimit header: "+t);let o=i[0].substring(1,i[0].length-1),s=i.find(d=>d.startsWith("r=")),a=s?parseInt(s.substring(2),10):NaN,c=i.find(d=>d.startsWith("t=")),u=c?parseInt(c.substring(2),10):NaN;if(!o||Number.isNaN(a)||Number.isNaN(u))throw new Error("Could not parse RateLimit header: "+t);return{name:o,remainingUnits:a,secondsUntilReset:u}})}getRetryDelay(t){let n=this.rateLimitStatus(),i=500*Math.pow(1.5,t);for(let o of n)o.remainingUnits||(i=Math.max(i,o.secondsUntilReset*1e3));return i}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 Fr(s),i.pollCount++}return this.request("GET",t,o,i)}async executeAutoBatch(){if(this.autoBatchQueue===void 0)return;let t=[...this.autoBatchQueue];if(this.autoBatchQueue.length=0,this.autoBatchTimerId=void 0,t.length===1){let o=t[0];try{o.resolve(await this.request(o.method,q(this.fhirBaseUrl,o.url),o.options))}catch(s){o.reject(new p(ct(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&&!hr(a.response.outcome)?s.reject(new p(a.response.outcome)):s.resolve(a?.resource)}}addFetchOptionsDefaults(t){Object.entries(this.defaultHeaders).forEach(([n,i])=>{this.setRequestHeader(t,n,i)}),this.setRequestHeader(t,"Accept",va,!0),this.options.extendedMode!==!1&&this.setRequestHeader(t,"X-Medplum","extended"),t.body&&this.setRequestHeader(t,"Content-Type",A.FHIR_JSON,!0),this.accessToken?this.setRequestHeader(t,"Authorization","Bearer "+this.accessToken):this.basicAuth&&this.setRequestHeader(t,"Authorization","Basic "+this.basicAuth),t.cache||(t.cache="no-cache"),t.credentials||(t.credentials="include")}setRequestContentType(t,n){this.setRequestHeader(t,"Content-Type",n)}setRequestHeader(t,n,i,o=!1){t.headers||(t.headers={});let s=t.headers;o&&s[n]||(s[n]=i)}setRequestBody(t,n){typeof n=="string"||typeof Blob<"u"&&(n instanceof Blob||n?.constructor.name==="Blob")||typeof File<"u"&&(n instanceof File||n?.constructor.name==="File")||typeof Uint8Array<"u"&&(n instanceof Uint8Array||n?.constructor.name==="Uint8Array")?t.body=n:n&&(t.body=JSON.stringify(n))}handleUnauthenticated(t,n,i){return this.refresh()?this.request(t,n,i):(this.clear(),this.onUnauthenticated&&this.onUnauthenticated(),Promise.reject(new p(Ae)))}async startPkce(){let t=$r();sessionStorage.setItem("pkceState",t);let n=$r().slice(0,128);sessionStorage.setItem("codeVerifier",n);try{let i=await Ci(n);return{codeChallengeMethod:"S256",codeChallenge:Zn(i).replaceAll("+","-").replaceAll("/","_").replaceAll("=","")}}catch(i){return console.warn("Failed to hash code verifier. Falling back to 'plain' code challenge method",i),{codeChallengeMethod:"plain",codeChallenge:n}}}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??Ni()),i.searchParams.set("code_challenge_method",n.codeChallengeMethod),i.searchParams.set("code_challenge",n.codeChallenge),i.searchParams.set("scope",n.scope??"openid profile"),window.location.assign(i.toString())}processCode(t,n){let i={grant_type:Ue.AuthorizationCode,code:t,client_id:n?.clientId??this.clientId??"",redirect_uri:n?.redirectUri??Ni()};if(typeof sessionStorage<"u"){let o=sessionStorage.getItem("codeVerifier");o&&(i.code_verifier=o)}return this.fetchTokens(i)}refreshIfExpired(t){return!this.refreshPromise&&this.accessTokenExpires!==void 0&&!this.isAuthenticated(t)&&this.refresh(),this.refreshPromise??Promise.resolve()}refresh(){if(this.refreshPromise)return this.refreshPromise;if(this.refreshToken)return this.refreshPromise=this.fetchTokens({grant_type:Ue.RefreshToken,client_id:this.clientId??"",refresh_token:this.refreshToken}),this.refreshPromise;if(this.clientId&&this.clientSecret)return this.refreshPromise=this.startClientLogin(this.clientId,this.clientSecret),this.refreshPromise}async startClientLogin(t,n){return this.clientId=t,this.clientSecret=n,this.fetchTokens({grant_type:Ue.ClientCredentials,client_id:t,client_secret:n})}async startJwtBearerLogin(t,n,i){return this.clientId=t,this.fetchTokens({grant_type:Ue.JwtBearer,client_id:t,assertion:n,scope:i})}async startJwtAssertionLogin(t){return this.fetchTokens({grant_type:Ue.ClientCredentials,client_assertion_type:wa.JwtBearer,client_assertion:t})}setBasicAuth(t,n){this.clientId=t,this.clientSecret=n,this.basicAuth=Ft(t+":"+n)}async fhircastSubscribe(t,n){if(!(typeof t=="string"&&t!==""))throw new p(y("Invalid topic provided. Topic must be a valid string."));if(!(typeof n=="object"&&Array.isArray(n)&&n.length>0))throw new p(y("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,zr(i),A.FORM_URL_ENCODED))["hub.channel.endpoint"];if(!s)throw new Error("Invalid response!");return i.endpoint=s,i}async fhircastUnsubscribe(t){if(!Ut(t))throw new p(y("Invalid topic or subscriptionRequest. SubscriptionRequest must be an object."));if(!(t.endpoint&&typeof t.endpoint=="string"&&t.endpoint.startsWith("ws")))throw new p(y("Provided subscription request must have an endpoint in order to unsubscribe."));t.mode="unsubscribe",await this.post(this.fhircastHubUrl,zr(t),A.FORM_URL_ENCODED)}fhircastConnect(t){return new Nt(t)}async fhircastPublish(t,n,i,o){return wi(n)?this.post(this.fhircastHubUrl,Jr(t,n,i,o),A.JSON):(Ai(n),this.post(this.fhircastHubUrl,Jr(t,n,i),A.JSON))}async fhircastGetContext(t){return this.get(`${this.fhircastHubUrl}/${t}`,{cache:"no-cache"})}async invite(t,n){return this.post("admin/projects/"+t+"/invite",n)}async fetchTokens(t){let n=new URLSearchParams(t),i={...this.defaultHeaders,"Content-Type":A.FORM_URL_ENCODED};this.basicAuth&&(i.Authorization=`Basic ${this.basicAuth}`),this.credentialsInHeader&&(n.delete("client_id"),n.delete("client_secret"),!this.basicAuth&&t.client_id&&t.client_secret&&(i.Authorization=`Basic ${Ft(t.client_id+":"+t.client_secret)}`));let o={method:"POST",headers:i,body:n.toString(),credentials:"include"},s;try{s=await this.fetchWithRetry(this.tokenUrl,o)}catch(c){throw this.refreshPromise=void 0,c}if(!s.ok){this.clearActiveLogin();try{let c=await s.json();throw new p(b(c.error_description))}catch(c){throw new p(b("Failed to fetch tokens"),c)}}let a=await s.json();return await this.verifyTokens(a),this.getProfile()}async verifyTokens(t){let n=t.access_token;if(Ii(n)){let i=Bt(n);if(Date.now()>=i.exp*1e3)throw this.clearActiveLogin(),new p(Tn);if(i.cid){if(i.cid!==this.clientId)throw this.clearActiveLogin(),new p(fr)}else if(this.clientId&&i.client_id!==this.clientId)throw this.clearActiveLogin(),new p(fr)}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,ii(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 Aa(){if(!globalThis.fetch)throw new Error("Fetch not available in this environment");return globalThis.fetch.bind(globalThis)}function Ni(){return typeof window>"u"?"":window.location.protocol+"//"+window.location.host+"/"}async function Ui(r,e){let t=r.headers.get("content-location");if(t)return t;let n=r.headers.get("location");if(n)return n;if(Oe(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 Oa(r){return R(r)&&"data"in r&&"contentType"in r}function Wi(r,e,t,n){return Oa(r)?r:{data:r,filename:e,contentType:t,onProgress:n}}function Ia(r){return R(r)&&"docDefinition"in r}function ka(r,e,t,n){return Ia(r)?r:{docDefinition:r,filename:e,tableLayouts:t,fonts:n}}function Va(r){return r.status===429||r.status>=500}var Gf={aws_ssm_parameter_store:"aws_ssm_parameter_store"};function zf(r,e,t){let n=new Zr;Array.isArray(r)||(r=r.entry?.map(i=>i.resource)??[]);for(let i of r)n.addObservation(i);return n.summarize(e,t)}var Zr=class{constructor(e){this.dataPoints=[],this.code=e?.code,this.unit=e?.unit,this.sampling=e?.sampling}addObservation(e){if(!this.code)this.code=e.code;else if(!Da(this.code,e.code))throw new Error("Observation does not match code of sampled data");e.valueQuantity?.value!==void 0?(this.checkUnit(e.valueQuantity),this.addData(e.valueQuantity.value)):e.valueInteger!==void 0?this.addData(e.valueInteger):e.valueSampledData?.data&&(this.checkUnit(e.valueSampledData.origin),this.addData(...ji(e.valueSampledData)))}addData(...e){this.dataPoints.push(...e)}checkUnit(e){if(!this.unit)this.unit=e;else if(e.code&&e.system){if(this.unit.system!==e.system||this.unit.code!==e.code)throw new Error("Incorrect unit for Observation")}else if(e.unit&&this.unit.unit!==e.unit)throw new Error("Incorrect unit for Observation")}summarize(e,t){if(!this.code)throw new Error("Code is required for data points");let n=t(this.dataPoints);return{resourceType:"Observation",status:"final",code:e,valueQuantity:typeof n=="number"?{...this.unit,value:n}:n,component:[{code:this.code,valueSampledData:{origin:{...this.unit,value:0},dimensions:1,period:0,...this.sampling,data:Ma(this.dataPoints,this.sampling)}}]}}};function Da(r,e){return!!r.coding?.some(t=>e.coding?.some(n=>t.system===n.system&&t.code===n.code))}function ji(r){return r.data?.split(" ").map(e=>parseFloat(e)*(r.factor??1)+(r.origin.value??0))??[]}function Ma(r,e){if(r.length)return r.map(t=>(t-(e?.origin.value??0))/(e?.factor??1)).join(" ")}function Jf(r){let e=[],t=r.effectiveInstant??r.effectiveDateTime??r.effectivePeriod?.start,n=t?Date.parse(t).valueOf():0;if(r.valueSampledData&&e.push(...qi(r.valueSampledData,n,r)),r.component)for(let i of r.component)i.valueSampledData&&e.push(...qi(i.valueSampledData,n,{...r,...i}));return e}function qi(r,e,t){let n=[],i=ji(r),o=D(t);for(let s=0;s<i.length;s++){let a=i[s],c=e+Math.floor(s/r.dimensions)*r.period;n.push({...t,id:void 0,effectiveInstant:void 0,effectivePeriod:void 0,effectiveTiming:void 0,effectiveDateTime:c?new Date(c).toISOString():void 0,valueQuantity:{...r.origin,value:a},valueSampledData:void 0,component:void 0,derivedFrom:o?[...t.derivedFrom??[],{reference:o}]:t.derivedFrom})}return n}function en({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=_a(e,t,r,!!i),a=Nr(e,".",2)[1];s=La(s,o,a),s=Fa(s,o,a);let c=Object.create(null);for(let[d,m]of Object.entries(s))c[e+"."+d]=m;let u;if(r&&!r.isDefaultContext)u=r.getExtendedProps;else{let d=Object.create(null);u=m=>{let x=Nr(m,".",2)[1];if(x){if(!d[x]){let B=Ht(x,o?.hiddenFields);d[x]={hidden:B,readonly:B||Ht(x,o?.readonlyFields)}}return d[x]}}}return{path:e,elements:s,elementsByPath:c,profileUrl:n??r?.profileUrl,debugMode:i,getExtendedProps:u,accessPolicyResource:o}}function _a(r,e,t,n){let i=Object.create(null);if(t)for(let[s,a]of Object.entries(t.elementsByPath)){let c=oe(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 La(r,e,t){if(!e?.hiddenFields?.length)return r;let n=t?t+".":"";return Object.fromEntries(Object.entries(r).filter(([i])=>!Ht(n+i,e.hiddenFields)))}function Fa(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))Ht(i+o,e.readonlyFields)?n[o]={...s,readonly:!0}:n[o]=s;return n}function Ht(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 $i(r){return r.type!==void 0&&r.type.length>0}function Na(r,e,t,n){let i=Ve(r,e.path,{profileUrl:n});if(i){let o=t.typeSchema?.elements??t.elements;return i.some(s=>Ar(s,e,t,o))??!1}return console.assert(!1,"getNestedProperty[%s] in isDiscriminatorComponentMatch missed",e.path),!1}function Gi(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=>Na(o,s,i,i.typeSchema?.url??n)))return i.name}}var tt=class{constructor(e,t,n){if(e.type===void 0)throw new Error("schema must include a type");this.rootSchema=e;let i=en({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(!X(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=Ua(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);X(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(!$i(o))continue;let s=o.type.find(a=>X(a.profile))?.profile?.[0];if(X(s)){let a=Ln(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;X(s)&&(o=en({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 Ua(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 Qt="__sliceName";function vh(r,e){let t=new zt(r,r.resourceType,"resource");return new tt(e,t).crawlResource(),t.getDefaultValue()}function Th(r,e,t){for(let[n,i]of Object.entries(e)){if(t===void 0||t===n){Jt(r,n,i,e);continue}let o=oe(t,n);o!==void 0&&Jt(r,o,i,e)}return r}function Sh(r,e,t,n){let i=new zt([{[Qt]:e.name}],e.path,"element");return new tt(n,i).crawlSlice(r,e,t),i.getDefaultValue()[0]}var zt=class{constructor(e,t,n){this.schemaStack=[],this.valueStack=[],this.rootValue=ye(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=oe(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=oe(n.path,o),d=Array.isArray(c)?c:[c];for(let m of d){Ba(m,s,t,n.elements,u),Jt(m,s,t,n.elements);let x=rn(m,s,n.elements,u);x!==void 0&&a.push(x)}}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=oe(this.value.path,e);if(o===void 0)throw new Error(`Expected ${e} to be prefixed by ${this.value.path}`);let s=oe(n.path,this.value.path);for(let a of this.value.values){let c=rn(a,o,n.elements,s);if(Array.isArray(c))for(let u=c.length-1;u>=0;u--){let d=c[u];X(d)||c.splice(u,1)}S(c)&&tn(a,void 0,o,t)}}onEnterSlice(e,t,n){let i=this.value.values,o=[];for(let s of i)if(s!==void 0){let a=Array.isArray(s)?s:[s],c=this.getMatchingSliceValues(a,t,n);o.push(c)}this.valueStack.push({type:"slice",path:e,values:o})}getMatchingSliceValues(e,t,n){let i=[];for(let o of e)(o[Qt]??Gi(o,[t],n.discriminator,this.schema.url))===t.name&&i.push(o);for(let o=i.length;o<t.min;o++)if(Lr(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];Qt in i&&delete i[Qt]}}getDefaultValue(){return this.rootValue}};function Ba(r,e,t,n,i){let o=rn(r,e,n,i);t.min>0&&o===void 0&&Lr(t.type[0].code)&&(t.isArray?tn(r,[Object.create(null)],e,t):tn(r,Object.create(null),e,t))}function tn(r,e,t,n){if(t.includes("."))throw new Error("key cannot be nested");let i=t;if(t.includes("[x]")){let o=n.type[0].code;i=t.replace("[x]",k(o))}e===void 0?delete r[i]:r[i]=e}function rn(r,e,t,n){let i=e.split("."),o=r,s;for(let a=0;a<i.length;a++){let c=i[a];if(c.includes("[x]")){let u=(n?n+".":"")+i.slice(0,a+1).join("."),m=t[u].type[0].code;c=c.replace("[x]",k(m))}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 Jt(r,e,t,n){if(!(t.fixed||t.pattern))return r;if(Array.isArray(r))return r.map(a=>Jt(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 d=n[o.slice(0,a+1).join(".")].type[0].code;c=c.replace("[x]",k(d))}if(a===o.length-1){let u=Array.isArray(s)?s:[s];for(let d of u)t.fixed?d[c]??=t.fixed.value:t.pattern&&(d[c]=Hi(d[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 Hi(r,e){if(Array.isArray(e)&&(Array.isArray(r)||r===void 0))return(r?.length??0)>0?r:ye(e);if(R(e)&&(R(r)&&!Array.isArray(r)||r===void 0)){let t=ye(r)??Object.create(null);for(let n of Object.keys(e))t[n]=Hi(t[n],e[n]);return t}return r}function Qi(r,e){if(!r.group)throw new p(b("ConceptMap does not specify a mapping group","ConceptMap.group"));let t=Wa(e);if(Oe(t))throw new p(t);let n=ja(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 Wa(r){return r.code&&!r.coding&&!r.codeableConcept?r.system===void 0?b("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?qa(r.codeableConcept):r.code||r.coding||r.codeableConcept?b("Ambiguous input: multiple source codings provided"):b("No source provided: 'code'+'system', 'coding', or 'codeableConcept' input parameter is required")}function qa(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 ja(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=$a(i,o)),s&&t.push(...s)}return t}function $a(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 Ga=[...Je,"->","<<",">>","=="];function zi(r){return new ue(r,ze,Ga).tokenize()}var Ha={"-":"disjoint","==":"equal"},nn=class{constructor(e){this.structureMap={resourceType:"StructureMap",status:"active"};this.parser=e}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(g.Arrow);e.condition=i.toString()}if(this.parser.peek()?.value==="check"){this.parser.consume("Symbol","check");let i=this.parser.consumeAndParse(g.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(g.As);t instanceof Z?(e.transform=t.name,e.parameter=t.args?.map(Ji)):t instanceof U||t instanceof j?(e.transform="copy",e.parameter=[Ji(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(g.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=Ha[this.parser.consume().value],a=this.parser.consume().value,c=t[a];this.parser.consume(":");let u=this.parser.consume().value,d=e?.group?.find(m=>m.source===i&&m.target===c);d||(d={source:i,target:c,element:[]},e.group||(e.group=[]),e.group.push(d)),d.element||(d.element=[]),d.element.push({code:o,target:[{code:u,equivalence:s}]})}};function Ji(r){if(r instanceof j)return{valueId:r.name};if(r instanceof U)return Qa(r);throw new Error(`Unknown parameter atom type: ${r.constructor.name} (${r.toString()})`)}function Qa(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 za=Ke().registerInfix("->",{precedence:g.Arrow}).registerInfix(";",{precedence:g.Semicolon});function Vh(r){let e=za.construct(zi(r));return e.removeComments(),new nn(e).parse()}var on=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 Bh(r,e,t=new on){return Ja({root:r,transformMaps:t},r,e)}function Ja(r,e,t){return Ka(r,e),Xi(r,e),an(r,e.group[0],t)}function Ka(r,e){let t=Xt(r);if(t&&e.import)for(let n of e.import){let i=t.get("StructureMap",n);for(let o of i)Xi(r,o)}}function Xi(r,e){let t=Xt(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)Kt(r,n.name,{type:"StructureMapGroup",value:n})}function an(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)rt(o,u.name,t[a++]);for(let u of i){let d=t[a++]??{type:u.type??"BackboneElement",value:{}};rt(o,u.name,d),s.push(d)}let c={root:r.root,parent:r,variables:o};if(e.rule)for(let u of e.rule)Yi(c,u);return s}function Yi(r,e){e.source&&Zi(r,e,0)}function Zi(r,e,t){let n=e.source[t];for(let i of ec(r,n))Kt(r,"_",i),n.variable&&Kt(r,n.variable,i),t<e.source.length-1?Zi(r,e,t+1):Xa(r,e)}function Xa(r,e){if(!Ya(r,e)){if(e.target)for(let t of e.target)eo(r,t);if(e.rule)for(let t of e.rule)Yi(r,t);if(e.dependent)for(let t of e.dependent)lc(r,t)}}function Ya(r,e){if(!e.target||e.target.length!==1||e.target[0].transform||e.rule||e.dependent)return!1;let t=le(r,"_");if(Array.isArray(t)&&(t=t[0]),!t)return!1;let n=Za(r,t);if(!n)return eo(r,{...e.target[0],transform:"copy",parameter:[{valueId:"_"}]}),!0;let i=e.target[0],o=le(r,i.context),s=o.value[i.element],a=ro(o,i.element)||Array.isArray(s),c={root:r.root,parent:r,variables:{}},u=an(c,n,[t]);return to(r,i,o,u,a,s),!0}function Za(r,e){let t=r;for(;t;){if(t.variables)for(let n of Object.values(t.variables)){let i=sn(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 ec(r,e){let t=le(r,e.context);if(!t)return[];let n=e.element;if(!n)return[t];let i=E(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=tc(e,i)),i}function Ki(r,e,t){return L(E(t,[r],e))}function tc(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 eo(r,e){let t=le(r,e.context);if(!t)throw new Error("Target not found: "+e.context);let n=t.value[e.element],i,o=ro(t,e.element)||Array.isArray(n);if(e.transform)switch(e.transform){case"append":i=rc(r,e);break;case"cast":i=nc(r,e);break;case"cc":i=ic(r,e);break;case"copy":i=oc(r,e);break;case"create":i=sc(r,e);break;case"evaluate":i=ac(r,e);break;case"translate":i=cc(r,e);break;case"truncate":i=uc(r,e);break;case"uuid":i=[{type:"string",value:Re()}];break;default:throw new Error(`Unsupported transform: ${e.transform}`)}else{let s=no(t,e.element)?.type,a=s?.length===1?s[0].code:void 0;o||n===void 0?i=[a?{type:a,value:{}}:v({})]:i=[a?{type:a,value:n}:v(n)]}to(r,e,t,i,o,n)}function to(r,e,t,n,i,o){if(n.length!==0){if(i){o||(o=[],rt(t.value,e.element,o));for(let s of n)o.push(s.value)}else rt(t.value,e.element,n[0].value);e.variable&&Kt(r,e.variable,dc(n))}}function ro(r,e){return no(r,e)?.isArray}function no(r,e){return We(r.type)?.elements?.[e]}function rc(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 nc(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 ic(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 oc(r,e){return e.parameter.flatMap(t=>_(r,t))}function sc(r,e){let t={};return e.parameter&&e.parameter.length>0&&(t.resourceType=_(r,e.parameter?.[0])?.[0]?.value),[v(t)]}function ac(r,e){let n=_(r,e.parameter?.[0])[0].value;return E(n,[],io(r))}function cc(r,e){let t=e.parameter.flatMap(c=>_(r,c)),n=t[0].value,i=t[1].value,s=Xt(r)?.get("ConceptMap",i)[0];if(!s)throw new Error("ConceptMap not found: "+i);let a=Qi(s,{system:s.group?.[0]?.source,code:n});return[v(a.match?.[0]?.concept?.code)]}function uc(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 lc(r,e){let t=le(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=le(r,s);if(!a)throw new Error("Dependent variable not found: "+s);i.push(a)}let o={root:r.root,parent:r,variables:{}};an(o,t.value,i)}function Xt(r){if(r.transformMaps)return r.transformMaps;if(r.parent)return Xt(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=sn(n),n.length===1&&n[0].type==="id"){let i=le(r,n[0].value);if(!i)throw new Error("Variable not found: "+n[0].value);return sn(i)}return n}function le(r,e){let t=r.variables?.[e];if(t)return t;if(r.parent)return le(r.parent,e)}function io(r,e={}){if(r.parent&&io(r.parent,e),r.variables)for(let[t,n]of Object.entries(r.variables))e[t]=n,e["%"+t]=n;return e}function Kt(r,e,t){r.variables||(r.variables={}),rt(r.variables,e,t)}function rt(r,e,t){if(e==="__proto__"||e==="constructor"||e==="prototype")throw new Error("Invalid key: "+e);r[e]=t}function sn(r){return Array.isArray(r)?r:[r]}function dc(r){return r.length===1?r[0]:r}var pc=" ".repeat(2),oo=class{constructor(e=pc,t=!0){this.indent=e,this.b=[],this.indentCount=0,t&&(this.appendNoWrap("// SPDX-FileCopyrightText: Copyright Orangebot, Inc. and Medplum contributors"),this.appendNoWrap("// SPDX-License-Identifier: Apache-2.0"),this.appendNoWrap("/*"),this.appendNoWrap(" * This is a generated file"),this.appendNoWrap(" * Do not edit manually."),this.appendNoWrap(" */"),this.newLine())}newLine(){this.b.push(`
|
|
44
|
+
}`.replace(/\s+/g," "),a=await this.graphql(s);Sr(a.data.StructureDefinitionList);for(let c of a.data.SearchParameterList)jr(c)})());return this.setCacheEntry(n,o),o}requestProfileSchema(t,n){if(!n?.expandProfile&&Fn(t))return Promise.resolve();let i=t+"-requestSchema"+(n?.expandProfile?"-nested":""),o=this.getCacheEntry(i,void 0);if(o)return o.value;let s=new M((async()=>{if(n?.expandProfile){let a=this.fhirUrl("StructureDefinition","$expand-profile");a.search=new URLSearchParams({url:t}).toString();let c=await this.post(a.toString(),{});Sr(c)}else{let a=await this.searchOne("StructureDefinition",{url:t,_sort:"-_lastUpdated"});if(!a){console.warn(`No StructureDefinition found for ${t}!`);return}br(a)}})());return this.setCacheEntry(i,s),s}readHistory(t,n,i,o){let s=this.fhirUrl(t,n,"_history");return i?.count&&s.searchParams.set("_count",i.count.toString()),i?.offset&&s.searchParams.set("_offset",i.offset.toString()),this.get(s.toString(),o)}readVersion(t,n,i,o){return this.get(this.fhirUrl(t,n,"_history",i),o)}readPatientEverything(t,n){return this.getBundle(this.fhirUrl("Patient",t,"$everything"),n)}readPatientSummary(t,n){return this.getBundle(this.fhirUrl("Patient",t,"$summary"),n)}createResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");return this.invalidateSearches(t.resourceType),this.post(this.fhirUrl(t.resourceType),t,void 0,n)}async createResourceIfNoneExist(t,n,i){let o=this.fhirUrl(t.resourceType);i?i.headers?Array.isArray(i.headers)?i.headers.push(["If-None-Exist",n]):i.headers instanceof Headers?i.headers.set("If-None-Exist",n):i.headers["If-None-Exist"]=n:i.headers={"If-None-Exist":n}:i={headers:{"If-None-Exist":n}};let s=await this.post(o,t,void 0,i);return this.cacheResource(s),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),s}async upsertResource(t,n,i){let o=this.fhirSearchUrl(t.resourceType,n),s=await this.put(o,t,void 0,i);return s||(s=t),this.cacheResource(s),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),s}async createAttachment(t,n,i,o,s){let a=qi(t,n,i,o);if(a.contentType===A.XML){let p=a.data,m;p instanceof Blob?m=await new Promise((x,W)=>{let G=new FileReader;G.onload=()=>{if(!G.result){W(new Error("Failed to load file"));return}x(G.result)},G.readAsText(p,"utf-8")}):ArrayBuffer.isView(p)?m=new TextDecoder().decode(p):m=p,m.includes("<ClinicalDocument")&&m.includes("urn:hl7-org:v3")&&(a={...a,contentType:A.CDA_XML})}let c=s??(typeof n=="object"?n:{}),u=await this.createBinary(a,c);return{contentType:a.contentType,url:u.url,title:a.filename}}createBinary(t,n,i,o,s){let a=qi(t,n,i,o),c=s??(typeof n=="object"?n:{}),{data:u,contentType:p,filename:m,securityContext:x,onProgress:W}=a,G=this.fhirUrl("Binary");return m&&G.searchParams.set("_filename",m),x?.reference&&this.setRequestHeader(c,"X-Security-Context",x.reference),W?this.uploadwithProgress(G,u,p,W,c):this.post(G,u,p,c)}uploadwithProgress(t,n,i,o,s){return new Promise((a,c)=>{let u=new XMLHttpRequest,p=()=>u.abort();s?.signal?.addEventListener("abort",p);let m=x=>{s?.signal?.removeEventListener("abort",p),x instanceof Error?c(x):a(x)};if(u.responseType="json",u.onabort=()=>m(new DOMException("Request aborted","AbortError")),u.onerror=()=>m(new Error("Request error")),o&&(u.upload.onprogress=x=>o(x),u.upload.onload=x=>o(x)),u.onload=()=>{u.status>=200&&u.status<300?m(u.response):m(new d(lt(u.response||u.statusText)))},u.open("POST",t),u.withCredentials=!0,u.setRequestHeader("Authorization","Bearer "+this.accessToken),u.setRequestHeader("Cache-Control","no-cache, no-store, max-age=0"),u.setRequestHeader("Content-Type",i),this.options.extendedMode!==!1&&u.setRequestHeader("X-Medplum","extended"),s?.headers){let x=s.headers;for(let[W,G]of Object.entries(x))u.setRequestHeader(W,G)}u.send(n)})}async createPdf(t,n,i,o){if(!this.createPdfImpl)throw new Error("PDF creation not enabled");let s=Va(t,n,i,o),a=typeof n=="object"?n:{},{docDefinition:c,tableLayouts:u,fonts:p,...m}=s,x=await this.createPdfImpl(c,u,p),W={...m,data:x,contentType:"application/pdf"};return this.createBinary(W,a)}createComment(t,n,i){let o=this.getProfile(),s,a;return t.resourceType==="Encounter"&&(s=ye(t),a=t.subject),t.resourceType==="ServiceRequest"&&(s=t.encounter,a=t.subject),t.resourceType==="Patient"&&(a=ye(t)),this.createResource({resourceType:"Communication",status:"completed",basedOn:[ye(t)],encounter:s,subject:a,sender:o?ye(o):void 0,sent:new Date().toISOString(),payload:[{contentString:n}]},i)}async updateResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");if(!t.id)throw new Error("Missing id");let i=await this.put(this.fhirUrl(t.resourceType,t.id),t,void 0,n);return i||(i=t),this.cacheResource(i),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),i}async patchResource(t,n,i,o){let s=await this.patch(this.fhirUrl(t,n),i,o);return this.cacheResource(s),this.invalidateUrl(this.fhirUrl(t,n,"_history")),this.invalidateSearches(t),s}deleteResource(t,n,i){return this.deleteCacheEntry(this.fhirUrl(t,n).toString()),this.invalidateSearches(t),this.delete(this.fhirUrl(t,n),i)}validateResource(t,n){return this.post(this.fhirUrl(t.resourceType,"$validate"),t,void 0,n)}executeBot(t,n,i,o){let s;if(typeof t=="string"){let a=t;s=this.fhirUrl("Bot",a,"$execute")}else{let a=t;s=this.fhirUrl("Bot","$execute"),s.searchParams.set("identifier",a.system+"|"+a.value)}return this.post(s,n,i,o)}executeBatch(t,n){return this.post(this.fhirBaseUrl,t,void 0,n)}sendEmail(t,n){return this.post("email/v1/send",t,A.JSON,n)}graphql(t,n,i,o){return this.post(this.fhirUrl("$graphql"),{query:t,operationName:n,variables:i},A.JSON,o)}readResourceGraph(t,n,i,o){return this.get(`${this.fhirUrl(t,n)}/$graph?graph=${i}`,o)}pushToAgent(t,n,i,o,s,a){let{waitTimeout:c,...u}=a??{};return this.post(this.fhirUrl("Agent",ge(t),"$push"),{destination:typeof n=="string"?n:D(n),body:i,contentType:o,waitForResponse:s,...c!==void 0?{waitTimeout:c}:void 0},A.FHIR_JSON,u)}getActiveLogin(){return this.storage.getObject("activeLogin")}async setActiveLogin(t){(!this.sessionDetails?.profile||D(this.sessionDetails.profile)!==t.profile?.reference)&&this.clearActiveLogin(),this.setAccessToken(t.accessToken,t.refreshToken),this.storage.setObject("activeLogin",t),this.addLogin(t),this.refreshPromise=void 0,await this.refreshProfile()}getAccessToken(){return this.accessToken}isAuthenticated(t){return this.accessTokenExpires!==void 0&&Date.now()<this.accessTokenExpires-(t??this.refreshGracePeriod)}setAccessToken(t,n){this.accessToken=t,this.refreshToken=n,this.accessTokenExpires=Mi(t),this.medplumServer=Di(t)}getLogins(){return this.storage.getObject("logins")??[]}addLogin(t){let n=this.getLogins().filter(i=>i.profile?.reference!==t.profile?.reference);n.push(t),this.storage.setObject("logins",n)}async refreshProfile(){return this.medplumServer?(this.profilePromise=new Promise((t,n)=>{this.get("auth/me",{cache:"no-cache"}).then(i=>{this.profilePromise=void 0;let o=this.sessionDetails?.profile?.id!==i.profile.id;this.sessionDetails=i,o&&this.dispatchEvent({type:"change"}),t(i.profile),this.dispatchEvent({type:"profileRefreshed"})}).catch(n)}),this.dispatchEvent({type:"profileRefreshing"}),this.profilePromise):Promise.resolve(void 0)}isLoading(){return!this.isInitialized||!!this.profilePromise&&!this.sessionDetails?.profile}isSuperAdmin(){return!!this.sessionDetails?.project.superAdmin}isProjectAdmin(){return!!this.sessionDetails?.membership.admin}getProject(){return this.sessionDetails?.project}getProjectMembership(){return this.sessionDetails?.membership}getProfile(){return this.sessionDetails?.profile}async getProfileAsync(){return this.profilePromise?this.profilePromise:this.sessionDetails?this.sessionDetails.profile:this.refreshProfile()}getUserConfiguration(){return this.sessionDetails?.config}getAccessPolicy(){return this.sessionDetails?.accessPolicy}async download(t,n={}){this.refreshPromise&&await this.refreshPromise;let i=t.toString();i.startsWith(Pa)&&(t=this.fhirUrl(i));let o=n.headers;return o||(o={},n.headers=o),o.Accept||(o.Accept="*/*"),this.addFetchOptionsDefaults(n),(await this.fetchWithRetry(t.toString(),n)).blob()}async createMedia(t,n){let{additionalFields:i,...o}=t,s=await this.createResource({resourceType:"Media",status:"preparation",content:{contentType:t.contentType},...i});o.securityContext||(o.securityContext=ye(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 createDocumentReference(t,n){let{additionalFields:i,...o}=t,s=await this.createResource({resourceType:"DocumentReference",status:"current",content:[{attachment:{contentType:t.contentType}}],...i});o.securityContext||(o.securityContext=ye(s));let a=await this.createAttachment(o,n);return this.updateResource({...s,content:[{attachment:a}]})}async bulkExport(t="",n,i,o){let s=t&&`${t}/`,a=this.fhirUrl(`${s}$export`);return n&&a.searchParams.set("_type",n),i&&a.searchParams.set("_since",i),this.startAsyncRequest(a.toString(),o)}async startAsyncRequest(t,n={}){this.addFetchOptionsDefaults(n);let i=n.headers;return i.Prefer="respond-async",this.request("POST",t,n)}get keyValue(){return this.keyValueClient||(this.keyValueClient=new jt(this)),this.keyValueClient}getBundle(t,n){return new M((async()=>{let i=await this.get(t,n);if(i.entry)for(let o of i.entry)this.cacheResource(o.resource);return i})())}getCacheEntry(t,n){if(!this.requestCache||n?.cache==="no-cache"||n?.cache==="reload")return;let i=this.requestCache.get(t);if(!(!i||i.requestTime+this.cacheTime<Date.now()))return i}setCacheEntry(t,n){this.requestCache&&this.requestCache.set(t,{requestTime:Date.now(),value:n})}cacheResource(t){t?.id&&!t.meta?.tag?.some(n=>n.code==="SUBSETTED")&&this.setCacheEntry(this.fhirUrl(t.resourceType,t.id).toString(),new M(Promise.resolve(t)))}deleteCacheEntry(t){this.requestCache&&this.requestCache.delete(t)}async request(t,n,i={},o={}){await this.refreshIfExpired(),i.method=t,this.addFetchOptionsDefaults(i);let s=await this.fetchWithRetry(n,i);if(s.status===401)return this.handleUnauthenticated(t,n,i);if(s.status===204||s.status===304)return;let c=s.headers.get("content-type")?.includes("json");if(s.status===404&&!c)throw new d(Sn);let u=await this.parseBody(s,c);if(s.status===200&&i.followRedirectOnOk||s.status===201&&i.followRedirectOnCreated){let p=await Bi(s,u);if(p)return this.request("GET",p,{...i,body:void 0})}if(s.status===202&&i.pollStatusOnAccepted){let m=await Bi(s,u)??o.statusUrl;if(m)return this.pollStatus(m,i,o)}if(s.status>=400)throw new d(lt(u));return u}async parseBody(t,n){let i;if(t.headers.get("content-length")!=="0"){if(n)try{i=await t.json()}catch(o){throw console.error("Error parsing response",t.status,o),o}else i=await t.text();return i}}async fetchWithRetry(t,n){t.startsWith("http")||(t=j(this.baseUrl,t));let i=n?.maxRetries??2;for(let o=0;o<=i;o++)try{this.options.verbose&&this.logRequest(t,n);let s=await this.fetch(t,n);if(this.options.verbose&&this.logResponse(s),this.setCurrentRateLimit(s),o>=i||!Da(s))return s;let a=this.getRetryDelay(o),c=n.maxRetryTime??2e3;if(a>c)return s;await Nr(a)}catch(s){if(s.message==="Failed to fetch"&&o===0&&this.dispatchEvent({type:"offline"}),s.name==="AbortError"||o===i)throw s}throw new Error("Unreachable")}logRequest(t,n){if(console.log(`> ${n.method} ${t}`),n.headers){let i=n.headers;for(let o of bt(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}`))}setCurrentRateLimit(t){if(!t?.headers||typeof t.headers.get!="function")return;let n=t.headers.get("ratelimit");n&&(this.currentRateLimits=n)}rateLimitStatus(){if(!this.currentRateLimits)return[];let t=this.currentRateLimits;return t.split(/\s*;\s*/g).map(n=>{let i=n.split(/\s*,\s*/g);if(i.length!==3)throw new Error("Could not parse RateLimit header: "+t);let o=i[0].substring(1,i[0].length-1),s=i.find(p=>p.startsWith("r=")),a=s?parseInt(s.substring(2),10):NaN,c=i.find(p=>p.startsWith("t=")),u=c?parseInt(c.substring(2),10):NaN;if(!o||Number.isNaN(a)||Number.isNaN(u))throw new Error("Could not parse RateLimit header: "+t);return{name:o,remainingUnits:a,secondsUntilReset:u}})}getRetryDelay(t){let n=this.rateLimitStatus(),i=500*Math.pow(1.5,t);for(let o of n)o.remainingUnits||(i=Math.max(i,o.secondsUntilReset*1e3));return i}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 Nr(s),i.pollCount++}return this.request("GET",t,o,i)}async executeAutoBatch(){if(this.autoBatchQueue===void 0)return;let t=[...this.autoBatchQueue];if(this.autoBatchQueue.length=0,this.autoBatchTimerId=void 0,t.length===1){let o=t[0];try{o.resolve(await this.request(o.method,j(this.fhirBaseUrl,o.url),o.options))}catch(s){o.reject(new d(lt(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&&!mr(a.response.outcome)?s.reject(new d(a.response.outcome)):s.resolve(a?.resource)}}addFetchOptionsDefaults(t){Object.entries(this.defaultHeaders).forEach(([n,i])=>{this.setRequestHeader(t,n,i)}),this.setRequestHeader(t,"Accept",Ta,!0),this.options.extendedMode!==!1&&this.setRequestHeader(t,"X-Medplum","extended"),t.body&&this.setRequestHeader(t,"Content-Type",A.FHIR_JSON,!0),this.accessToken?this.setRequestHeader(t,"Authorization","Bearer "+this.accessToken):this.basicAuth&&this.setRequestHeader(t,"Authorization","Basic "+this.basicAuth),t.cache||(t.cache="no-cache"),t.credentials||(t.credentials="include")}setRequestContentType(t,n){this.setRequestHeader(t,"Content-Type",n)}setRequestHeader(t,n,i,o=!1){t.headers||(t.headers={});let s=t.headers;o&&s[n]||(s[n]=i)}setRequestBody(t,n){typeof n=="string"||typeof Blob<"u"&&(n instanceof Blob||n?.constructor.name==="Blob")||typeof File<"u"&&(n instanceof File||n?.constructor.name==="File")||typeof Uint8Array<"u"&&(n instanceof Uint8Array||n?.constructor.name==="Uint8Array")?t.body=n:n&&(t.body=JSON.stringify(n))}handleUnauthenticated(t,n,i){return this.refresh()?this.request(t,n,i):(this.clear(),this.onUnauthenticated&&this.onUnauthenticated(),Promise.reject(new d(Ie)))}async startPkce(){let t=Hr();sessionStorage.setItem("pkceState",t);let n=Hr().slice(0,128);sessionStorage.setItem("codeVerifier",n);try{let i=await wi(n);return{codeChallengeMethod:"S256",codeChallenge:ti(i).replaceAll("+","-").replaceAll("/","_").replaceAll("=","")}}catch(i){return console.warn("Failed to hash code verifier. Falling back to 'plain' code challenge method",i),{codeChallengeMethod:"plain",codeChallenge:n}}}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??te.getOrigin()),i.searchParams.set("code_challenge_method",n.codeChallengeMethod),i.searchParams.set("code_challenge",n.codeChallenge),i.searchParams.set("scope",n.scope??"openid profile"),te.assign(i.toString())}processCode(t,n){let i={grant_type:We.AuthorizationCode,code:t,client_id:n?.clientId??this.clientId??"",redirect_uri:n?.redirectUri??te.getOrigin()};if(typeof sessionStorage<"u"){let o=sessionStorage.getItem("codeVerifier");o&&(i.code_verifier=o)}return this.fetchTokens(i)}refreshIfExpired(t){return!this.refreshPromise&&this.accessTokenExpires!==void 0&&!this.isAuthenticated(t)&&this.refresh(),this.refreshPromise??Promise.resolve()}refresh(){if(this.refreshPromise)return this.refreshPromise;if(this.refreshToken)return this.refreshPromise=this.fetchTokens({grant_type:We.RefreshToken,client_id:this.clientId??"",refresh_token:this.refreshToken}),this.refreshPromise;if(this.clientId&&this.clientSecret)return this.refreshPromise=this.startClientLogin(this.clientId,this.clientSecret),this.refreshPromise}async startClientLogin(t,n){return this.clientId=t,this.clientSecret=n,this.fetchTokens({grant_type:We.ClientCredentials,client_id:t,client_secret:n})}async startJwtBearerLogin(t,n,i){return this.clientId=t,this.fetchTokens({grant_type:We.JwtBearer,client_id:t,assertion:n,scope:i})}async startJwtAssertionLogin(t){return this.fetchTokens({grant_type:We.ClientCredentials,client_assertion_type:Aa.JwtBearer,client_assertion:t})}setBasicAuth(t,n){this.clientId=t,this.clientSecret=n,this.basicAuth=Ut(t+":"+n)}async fhircastSubscribe(t,n){if(!(typeof t=="string"&&t!==""))throw new d(y("Invalid topic provided. Topic must be a valid string."));if(!(typeof n=="object"&&Array.isArray(n)&&n.length>0))throw new d(y("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,Kr(i),A.FORM_URL_ENCODED))["hub.channel.endpoint"];if(!s)throw new Error("Invalid response!");return i.endpoint=s,i}async fhircastUnsubscribe(t){if(!Wt(t))throw new d(y("Invalid topic or subscriptionRequest. SubscriptionRequest must be an object."));if(!(t.endpoint&&typeof t.endpoint=="string"&&t.endpoint.startsWith("ws")))throw new d(y("Provided subscription request must have an endpoint in order to unsubscribe."));t.mode="unsubscribe",await this.post(this.fhircastHubUrl,Kr(t),A.FORM_URL_ENCODED)}fhircastConnect(t){return new Bt(t)}async fhircastPublish(t,n,i,o){return Oi(n)?this.post(this.fhircastHubUrl,Xr(t,n,i,o),A.JSON):(Ii(n),this.post(this.fhircastHubUrl,Xr(t,n,i),A.JSON))}async fhircastGetContext(t){return this.get(`${this.fhircastHubUrl}/${t}`,{cache:"no-cache"})}async invite(t,n){return this.post("admin/projects/"+t+"/invite",n)}async fetchTokens(t){let n=new URLSearchParams(t),i={...this.defaultHeaders,"Content-Type":A.FORM_URL_ENCODED};this.basicAuth&&(i.Authorization=`Basic ${this.basicAuth}`),this.credentialsInHeader&&(n.delete("client_id"),n.delete("client_secret"),!this.basicAuth&&t.client_id&&t.client_secret&&(i.Authorization=`Basic ${Ut(t.client_id+":"+t.client_secret)}`));let o={method:"POST",headers:i,body:n.toString(),credentials:"include"},s;try{s=await this.fetchWithRetry(this.tokenUrl,o)}catch(c){throw this.refreshPromise=void 0,c}if(!s.ok){this.clearActiveLogin();try{let c=await s.json();throw new d(b(c.error_description))}catch(c){throw new d(b("Failed to fetch tokens"),c)}}let a=await s.json();return await this.verifyTokens(a),this.getProfile()}async verifyTokens(t){let n=t.access_token;if(Vi(n)){let i=qt(n);if(Date.now()>=i.exp*1e3)throw this.clearActiveLogin(),new d(bn);if(i.cid){if(i.cid!==this.clientId)throw this.clearActiveLogin(),new d(hr)}else if(this.clientId&&i.client_id!==this.clientId)throw this.clearActiveLogin(),new d(hr)}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)te.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)?te.reload():i?this.setAccessToken(i.accessToken,i.refreshToken):this.clear()}})}catch{}}getSubscriptionManager(){return this.subscriptionManager||(this.subscriptionManager=new Ht(this,si(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 Oa(){if(!globalThis.fetch)throw new Error("Fetch not available in this environment");return globalThis.fetch.bind(globalThis)}async function Bi(r,e){let t=r.headers.get("content-location");if(t)return t;let n=r.headers.get("location");if(n)return n;if(ke(e)&&e.issue?.[0]?.diagnostics)return e.issue[0].diagnostics}function Wi(r){let e=r.entry?.map(t=>t.resource)??[];return Object.assign(e,{bundle:r})}function Ia(r){return R(r)&&"data"in r&&"contentType"in r}function qi(r,e,t,n){return Ia(r)?r:{data:r,filename:e,contentType:t,onProgress:n}}function ka(r){return R(r)&&"docDefinition"in r}function Va(r,e,t,n){return ka(r)?r:{docDefinition:r,filename:e,tableLayouts:t,fonts:n}}function Da(r){return r.status===429||r.status>=500}var tf={aws_ssm_parameter_store:"aws_ssm_parameter_store"};function of(r,e,t){let n=new tn;Array.isArray(r)||(r=r.entry?.map(i=>i.resource)??[]);for(let i of r)n.addObservation(i);return n.summarize(e,t)}var tn=class{constructor(e){this.dataPoints=[],this.code=e?.code,this.unit=e?.unit,this.sampling=e?.sampling}addObservation(e){if(!this.code)this.code=e.code;else if(!Ma(this.code,e.code))throw new Error("Observation does not match code of sampled data");e.valueQuantity?.value!==void 0?(this.checkUnit(e.valueQuantity),this.addData(e.valueQuantity.value)):e.valueInteger!==void 0?this.addData(e.valueInteger):e.valueSampledData?.data&&(this.checkUnit(e.valueSampledData.origin),this.addData(...$i(e.valueSampledData)))}addData(...e){this.dataPoints.push(...e)}checkUnit(e){if(!this.unit)this.unit=e;else if(e.code&&e.system){if(this.unit.system!==e.system||this.unit.code!==e.code)throw new Error("Incorrect unit for Observation")}else if(e.unit&&this.unit.unit!==e.unit)throw new Error("Incorrect unit for Observation")}summarize(e,t){if(!this.code)throw new Error("Code is required for data points");let n=t(this.dataPoints);return{resourceType:"Observation",status:"final",code:e,valueQuantity:typeof n=="number"?{...this.unit,value:n}:n,component:[{code:this.code,valueSampledData:{origin:{...this.unit,value:0},dimensions:1,period:0,...this.sampling,data:_a(this.dataPoints,this.sampling)}}]}}};function Ma(r,e){return!!r.coding?.some(t=>e.coding?.some(n=>t.system===n.system&&t.code===n.code))}function $i(r){return r.data?.split(" ").map(e=>parseFloat(e)*(r.factor??1)+(r.origin.value??0))??[]}function _a(r,e){if(r.length)return r.map(t=>(t-(e?.origin.value??0))/(e?.factor??1)).join(" ")}function sf(r){let e=[],t=r.effectiveInstant??r.effectiveDateTime??r.effectivePeriod?.start,n=t?Date.parse(t).valueOf():0;if(r.valueSampledData&&e.push(...ji(r.valueSampledData,n,r)),r.component)for(let i of r.component)i.valueSampledData&&e.push(...ji(i.valueSampledData,n,{...r,...i}));return e}function ji(r,e,t){let n=[],i=$i(r),o=D(t);for(let s=0;s<i.length;s++){let a=i[s],c=e+Math.floor(s/r.dimensions)*r.period;n.push({...t,id:void 0,effectiveInstant:void 0,effectivePeriod:void 0,effectiveTiming:void 0,effectiveDateTime:c?new Date(c).toISOString():void 0,valueQuantity:{...r.origin,value:a},valueSampledData:void 0,component:void 0,derivedFrom:o?[...t.derivedFrom??[],{reference:o}]:t.derivedFrom})}return n}function rn({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=La(e,t,r,!!i),a=Ur(e,".",2)[1];s=Fa(s,o,a),s=Na(s,o,a);let c=Object.create(null);for(let[p,m]of Object.entries(s))c[e+"."+p]=m;let u;if(r&&!r.isDefaultContext)u=r.getExtendedProps;else{let p=Object.create(null);u=m=>{let x=Ur(m,".",2)[1];if(x){if(!p[x]){let W=zt(x,o?.hiddenFields);p[x]={hidden:W,readonly:W||zt(x,o?.readonlyFields)}}return p[x]}}}return{path:e,elements:s,elementsByPath:c,profileUrl:n??r?.profileUrl,debugMode:i,getExtendedProps:u,accessPolicyResource:o}}function La(r,e,t,n){let i=Object.create(null);if(t)for(let[s,a]of Object.entries(t.elementsByPath)){let c=ae(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 Fa(r,e,t){if(!e?.hiddenFields?.length)return r;let n=t?t+".":"";return Object.fromEntries(Object.entries(r).filter(([i])=>!zt(n+i,e.hiddenFields)))}function Na(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))zt(i+o,e.readonlyFields)?n[o]={...s,readonly:!0}:n[o]=s;return n}function zt(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 Gi(r){return r.type!==void 0&&r.type.length>0}function Ua(r,e,t,n){let i=Me(r,e.path,{profileUrl:n});if(i){let o=t.typeSchema?.elements??t.elements;return i.some(s=>Or(s,e,t,o))??!1}return console.assert(!1,"getNestedProperty[%s] in isDiscriminatorComponentMatch missed",e.path),!1}function Hi(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=>Ua(o,s,i,i.typeSchema?.url??n)))return i.name}}var nt=class{constructor(e,t,n){if(e.type===void 0)throw new Error("schema must include a type");this.rootSchema=e;let i=rn({parentContext:void 0,path:this.rootSchema.type,elements:n??this.rootSchema.elements,profileUrl:this.rootSchema.name===this.rootSchema.type?void 0:this.rootSchema.url});if(i===void 0)throw new Error("Could not create root elements context");this.elementsContextStack=[i],this.visitor=t}get elementsContext(){return this.elementsContextStack[this.elementsContextStack.length-1]}crawlElement(e,t,n){this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema);let i=Object.fromEntries(Object.entries(this.elementsContext.elements).filter(([o])=>o.startsWith(t)));this.crawlElementsImpl(i,n),this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlSlice(e,t,n){let i=this.prepareSlices(n.slices,n);if(!Y(i.slices))throw new Error(`cannot crawl slice ${t.name} since it has no type information`);this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema),this.sliceAllowList=[t],this.crawlSliceImpl(i.slices[0],t.path,i),this.sliceAllowList=void 0,this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlResource(){this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema),this.crawlElementsImpl(this.rootSchema.elements,this.rootSchema.type),this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlElementsImpl(e,t){let n=Ba(e);for(let i of n)this.crawlElementNode(i,t)}crawlElementNode(e,t){let n=t+"."+e.key;this.visitor.onEnterElement&&this.visitor.onEnterElement(n,e.element,this.elementsContext);for(let i of e.children)this.crawlElementNode(i,t);Y(e.element?.slicing?.slices)&&this.crawlSlicingImpl(e.element.slicing,n),this.visitor.onExitElement&&this.visitor.onExitElement(n,e.element,this.elementsContext)}prepareSlices(e,t){let n=[];for(let o of e){if(!Gi(o))continue;let s=o.type.find(a=>Y(a.profile))?.profile?.[0];if(Y(s)){let a=Nn(s);a&&(o.typeSchema=a)}n.push(o)}return{...t,slices:n}}crawlSlicingImpl(e,t){let n=this.prepareSlices(e.slices,e);for(let i of n.slices)(this.sliceAllowList===void 0||this.sliceAllowList.includes(i))&&this.crawlSliceImpl(i,t,n)}crawlSliceImpl(e,t,n){let i=e.typeSchema;i&&this.visitor.onEnterSchema&&this.visitor.onEnterSchema(i),this.visitor.onEnterSlice&&this.visitor.onEnterSlice(t,e,n);let o,s=i?.elements??e.elements;Y(s)&&(o=rn({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 Ba(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 Jt="__sliceName";function Sf(r,e){let t=new Kt(r,r.resourceType,"resource");return new nt(e,t).crawlResource(),t.getDefaultValue()}function bf(r,e,t){for(let[n,i]of Object.entries(e)){if(t===void 0||t===n){Xt(r,n,i,e);continue}let o=ae(t,n);o!==void 0&&Xt(r,o,i,e)}return r}function Ef(r,e,t,n){let i=new Kt([{[Jt]:e.name}],e.path,"element");return new nt(n,i).crawlSlice(r,e,t),i.getDefaultValue()[0]}var Kt=class{constructor(e,t,n){this.schemaStack=[],this.valueStack=[],this.rootValue=xe(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=ae(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=ae(n.path,o),p=Array.isArray(c)?c:[c];for(let m of p){Wa(m,s,t,n.elements,u),Xt(m,s,t,n.elements);let x=on(m,s,n.elements,u);x!==void 0&&a.push(x)}}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=ae(this.value.path,e);if(o===void 0)throw new Error(`Expected ${e} to be prefixed by ${this.value.path}`);let s=ae(n.path,this.value.path);for(let a of this.value.values){let c=on(a,o,n.elements,s);if(Array.isArray(c))for(let u=c.length-1;u>=0;u--){let p=c[u];Y(p)||c.splice(u,1)}S(c)&&nn(a,void 0,o,t)}}onEnterSlice(e,t,n){let i=this.value.values,o=[];for(let s of i)if(s!==void 0){let a=Array.isArray(s)?s:[s],c=this.getMatchingSliceValues(a,t,n);o.push(c)}this.valueStack.push({type:"slice",path:e,values:o})}getMatchingSliceValues(e,t,n){let i=[];for(let o of e)(o[Jt]??Hi(o,[t],n.discriminator,this.schema.url))===t.name&&i.push(o);for(let o=i.length;o<t.min;o++)if(Fr(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];Jt in i&&delete i[Jt]}}getDefaultValue(){return this.rootValue}};function Wa(r,e,t,n,i){let o=on(r,e,n,i);t.min>0&&o===void 0&&Fr(t.type[0].code)&&(t.isArray?nn(r,[Object.create(null)],e,t):nn(r,Object.create(null),e,t))}function nn(r,e,t,n){if(t.includes("."))throw new Error("key cannot be nested");let i=t;if(t.includes("[x]")){let o=n.type[0].code;i=t.replace("[x]",k(o))}e===void 0?delete r[i]:r[i]=e}function on(r,e,t,n){let i=e.split("."),o=r,s;for(let a=0;a<i.length;a++){let c=i[a];if(c.includes("[x]")){let u=(n?n+".":"")+i.slice(0,a+1).join("."),m=t[u].type[0].code;c=c.replace("[x]",k(m))}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 Xt(r,e,t,n){if(!(t.fixed||t.pattern))return r;if(Array.isArray(r))return r.map(a=>Xt(a,e,t,n));r==null&&(r=Object.create(null));let i=r,o=e.split("."),s=i;for(let a=0;a<o.length;a++){let c=o[a];if(c.includes("[x]")){let p=n[o.slice(0,a+1).join(".")].type[0].code;c=c.replace("[x]",k(p))}if(a===o.length-1){let u=Array.isArray(s)?s:[s];for(let p of u)t.fixed?p[c]??=t.fixed.value:t.pattern&&(p[c]=Qi(p[c],t.pattern.value))}else{if(!(c in s)){let u=o.slice(0,a+1).join(".");s[c]=n[u].isArray?[Object.create(null)]:Object.create(null)}s=s[c]}}return i}function Qi(r,e){if(Array.isArray(e)&&(Array.isArray(r)||r===void 0))return(r?.length??0)>0?r:xe(e);if(R(e)&&(R(r)&&!Array.isArray(r)||r===void 0)){let t=xe(r)??Object.create(null);for(let n of Object.keys(e))t[n]=Qi(t[n],e[n]);return t}return r}function zi(r,e){if(!r.group)throw new d(b("ConceptMap does not specify a mapping group","ConceptMap.group"));let t=qa(e);if(ke(t))throw new d(t);let n=$a(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 qa(r){return r.code&&!r.coding&&!r.codeableConcept?r.system===void 0?b("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?ja(r.codeableConcept):r.code||r.coding||r.codeableConcept?b("Ambiguous input: multiple source codings provided"):b("No source provided: 'code'+'system', 'coding', or 'codeableConcept' input parameter is required")}function ja(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 $a(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=Ga(i,o)),s&&t.push(...s)}return t}function Ga(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 Ha=[...Xe,"->","<<",">>","=="];function Ji(r){return new pe(r,Ke,Ha).tokenize()}var Qa={"-":"disjoint","==":"equal"},sn=class{constructor(e){this.structureMap={resourceType:"StructureMap",status:"active"};this.parser=e}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(g.Arrow);e.condition=i.toString()}if(this.parser.peek()?.value==="check"){this.parser.consume("Symbol","check");let i=this.parser.consumeAndParse(g.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(g.As);t instanceof ee?(e.transform=t.name,e.parameter=t.args?.map(Ki)):t instanceof U||t instanceof $?(e.transform="copy",e.parameter=[Ki(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(g.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=Qa[this.parser.consume().value],a=this.parser.consume().value,c=t[a];this.parser.consume(":");let u=this.parser.consume().value,p=e?.group?.find(m=>m.source===i&&m.target===c);p||(p={source:i,target:c,element:[]},e.group||(e.group=[]),e.group.push(p)),p.element||(p.element=[]),p.element.push({code:o,target:[{code:u,equivalence:s}]})}};function Ki(r){if(r instanceof $)return{valueId:r.name};if(r instanceof U)return za(r);throw new Error(`Unknown parameter atom type: ${r.constructor.name} (${r.toString()})`)}function za(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 Ja=Ye().registerInfix("->",{precedence:g.Arrow}).registerInfix(";",{precedence:g.Semicolon});function Df(r){let e=Ja.construct(Ji(r));return e.removeComments(),new sn(e).parse()}var an=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 Bf(r,e,t=new an){return Ka({root:r,transformMaps:t},r,e)}function Ka(r,e,t){return Xa(r,e),Yi(r,e),un(r,e.group[0],t)}function Xa(r,e){let t=Zt(r);if(t&&e.import)for(let n of e.import){let i=t.get("StructureMap",n);for(let o of i)Yi(r,o)}}function Yi(r,e){let t=Zt(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)Yt(r,n.name,{type:"StructureMapGroup",value:n})}function un(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)it(o,u.name,t[a++]);for(let u of i){let p=t[a++]??{type:u.type??"BackboneElement",value:{}};it(o,u.name,p),s.push(p)}let c={root:r.root,parent:r,variables:o};if(e.rule)for(let u of e.rule)Zi(c,u);return s}function Zi(r,e){e.source&&eo(r,e,0)}function eo(r,e,t){let n=e.source[t];for(let i of tc(r,n))Yt(r,"_",i),n.variable&&Yt(r,n.variable,i),t<e.source.length-1?eo(r,e,t+1):Ya(r,e)}function Ya(r,e){if(!Za(r,e)){if(e.target)for(let t of e.target)to(r,t);if(e.rule)for(let t of e.rule)Zi(r,t);if(e.dependent)for(let t of e.dependent)pc(r,t)}}function Za(r,e){if(!e.target||e.target.length!==1||e.target[0].transform||e.rule||e.dependent)return!1;let t=de(r,"_");if(Array.isArray(t)&&(t=t[0]),!t)return!1;let n=ec(r,t);if(!n)return to(r,{...e.target[0],transform:"copy",parameter:[{valueId:"_"}]}),!0;let i=e.target[0],o=de(r,i.context),s=o.value[i.element],a=no(o,i.element)||Array.isArray(s),c={root:r.root,parent:r,variables:{}},u=un(c,n,[t]);return ro(r,i,o,u,a,s),!0}function ec(r,e){let t=r;for(;t;){if(t.variables)for(let n of Object.values(t.variables)){let i=cn(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 tc(r,e){let t=de(r,e.context);if(!t)return[];let n=e.element;if(!n)return[t];let i=E(n,[t]);if(!i||i.length===0)return[];if(e.condition&&!Xi(t,{[e.variable]:i[0]},e.condition))return[];if(e.check&&!Xi(t,{[e.variable]:i[0]},e.check))throw new Error("Check failed: "+e.check);return e.listMode&&(i=rc(e,i)),i}function Xi(r,e,t){return L(E(t,[r],e))}function rc(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 to(r,e){let t=de(r,e.context);if(!t)throw new Error("Target not found: "+e.context);let n=t.value[e.element],i,o=no(t,e.element)||Array.isArray(n);if(e.transform)switch(e.transform){case"append":i=nc(r,e);break;case"cast":i=ic(r,e);break;case"cc":i=oc(r,e);break;case"copy":i=sc(r,e);break;case"create":i=ac(r,e);break;case"evaluate":i=cc(r,e);break;case"translate":i=uc(r,e);break;case"truncate":i=lc(r,e);break;case"uuid":i=[{type:"string",value:Pe()}];break;default:throw new Error(`Unsupported transform: ${e.transform}`)}else{let s=io(t,e.element)?.type,a=s?.length===1?s[0].code:void 0;o||n===void 0?i=[a?{type:a,value:{}}:v({})]:i=[a?{type:a,value:n}:v(n)]}ro(r,e,t,i,o,n)}function ro(r,e,t,n,i,o){if(n.length!==0){if(i){o||(o=[],it(t.value,e.element,o));for(let s of n)o.push(s.value)}else it(t.value,e.element,n[0].value);e.variable&&Yt(r,e.variable,dc(n))}}function no(r,e){return io(r,e)?.isArray}function io(r,e){return je(r.type)?.elements?.[e]}function nc(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 ic(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 oc(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 sc(r,e){return e.parameter.flatMap(t=>_(r,t))}function ac(r,e){let t={};return e.parameter&&e.parameter.length>0&&(t.resourceType=_(r,e.parameter?.[0])?.[0]?.value),[v(t)]}function cc(r,e){let n=_(r,e.parameter?.[0])[0].value;return E(n,[],oo(r))}function uc(r,e){let t=e.parameter.flatMap(c=>_(r,c)),n=t[0].value,i=t[1].value,s=Zt(r)?.get("ConceptMap",i)[0];if(!s)throw new Error("ConceptMap not found: "+i);let a=zi(s,{system:s.group?.[0]?.source,code:n});return[v(a.match?.[0]?.concept?.code)]}function lc(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 pc(r,e){let t=de(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=de(r,s);if(!a)throw new Error("Dependent variable not found: "+s);i.push(a)}let o={root:r.root,parent:r,variables:{}};un(o,t.value,i)}function Zt(r){if(r.transformMaps)return r.transformMaps;if(r.parent)return Zt(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=cn(n),n.length===1&&n[0].type==="id"){let i=de(r,n[0].value);if(!i)throw new Error("Variable not found: "+n[0].value);return cn(i)}return n}function de(r,e){let t=r.variables?.[e];if(t)return t;if(r.parent)return de(r.parent,e)}function oo(r,e={}){if(r.parent&&oo(r.parent,e),r.variables)for(let[t,n]of Object.entries(r.variables))e[t]=n,e["%"+t]=n;return e}function Yt(r,e,t){r.variables||(r.variables={}),it(r.variables,e,t)}function it(r,e,t){if(e==="__proto__"||e==="constructor"||e==="prototype")throw new Error("Invalid key: "+e);r[e]=t}function cn(r){return Array.isArray(r)?r:[r]}function dc(r){return r.length===1?r[0]:r}var fc=" ".repeat(2),so=class{constructor(e=fc,t=!0){this.indent=e,this.b=[],this.indentCount=0,t&&(this.appendNoWrap("// SPDX-FileCopyrightText: Copyright Orangebot, Inc. and Medplum contributors"),this.appendNoWrap("// SPDX-License-Identifier: Apache-2.0"),this.appendNoWrap("/*"),this.appendNoWrap(" * This is a generated file"),this.appendNoWrap(" * Do not edit manually."),this.appendNoWrap(" */"),this.newLine())}newLine(){this.b.push(`
|
|
45
45
|
`)}appendNoWrap(e){this.b.push(this.indent.repeat(this.indentCount)),this.b.push(e),this.b.push(`
|
|
46
46
|
`)}append(e){let t=this.indent.repeat(this.indentCount)+e;if(t.length<160)this.b.push(t),this.b.push(`
|
|
47
|
-
`);else{let n=!0;for(let i of
|
|
47
|
+
`);else{let n=!0;for(let i of hc(t,120-this.indent.length*this.indentCount))n?this.b.push(this.indent.repeat(this.indentCount)):this.b.push(this.indent.repeat(this.indentCount+2)),this.b.push(i.trim()),this.b.push(`
|
|
48
48
|
`),n=!1}}toString(){return this.b.join("").replaceAll(`
|
|
49
49
|
|
|
50
50
|
|
|
51
51
|
`,`
|
|
52
52
|
|
|
53
|
-
`)}};function
|
|
54
|
-
`)};r.name&&r.name!=="Error"&&(n.name=r.name),r.message&&(n.message=r.message),"cause"in r&&r.cause!==void 0&&(r.cause instanceof Error?n.cause=tr(r.cause,e+1,t):n.cause=r.cause);let i=Object.getOwnPropertyNames(r).filter(o=>!["name","message","stack","cause"].includes(o));for(let o of i)try{let s=r[o];s instanceof Error?n[o]=tr(s,e+1,t):n[o]=s}catch{}return n}function lm(r){if(!r)throw new p(y("Resource type is null"));if(!Mn(r))throw new p(y("Unknown resource type"))}function uo(r,e,t){r===null?t.push(T(e,"Invalid null value")):Array.isArray(r)?bc(r,e,t):typeof r=="object"&&Ec(r,e,t)}function bc(r,e,t){for(let n=0;n<r.length;n++)r[n]===void 0?t.push(T(`${e}[${n}]`,"Invalid undefined value")):uo(r[n],`${e}[${n}]`,t)}function Ec(r,e,t){for(let[n,i]of Object.entries(r))uo(i,`${e}${e?".":""}${n}`,t)}var ee={BOOLEAN:"BOOLEAN",NUMBER:"NUMBER",QUANTITY:"QUANTITY",TEXT:"TEXT",REFERENCE:"REFERENCE",CANONICAL:"CANONICAL",DATE:"DATE",DATETIME:"DATETIME",PERIOD:"PERIOD",UUID:"UUID"};function ym(r,e){let t=F.types[r]?.searchParamsDetails?.[e.code];return t||(t=Cc(r,e)),t}function Rc(r,e,t){let n=F.types[r];n||(n={},F.types[r]=n),n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=t}function Cc(r,e){let t=e.code,n=po(r,e.expression),i={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let s of n){let a=rr(s),c=ni(()=>a.join("."));a.length===1&&a[0]instanceof C?i.propertyTypes.add("boolean"):e.code.endsWith(":identifier")?i.propertyTypes.add("Identifier"):c().endsWith("extension.value.code")||c().endsWith("extension.value.coding.code")?(i.array=!0,i.propertyTypes.clear(),i.propertyTypes.add("code")):lo(i,a,r,1),c().endsWith("extension.valueDateTime")&&(i.array=!1,i.propertyTypes.clear(),i.propertyTypes.add("dateTime"))}let o={type:Ac(e,i.propertyTypes),elementDefinitions:i.elementDefinitions.map(s=>({...s,type:s.type?.filter(a=>i.propertyTypes.has(a.code))})).filter(s=>s.type&&s.type.length>0),parsedExpression:Oc(r,e.expression),array:i.array};return Rc(r,t,o),o}function lo(r,e,t,n){let i=e[n];if(i instanceof ce){r.propertyTypes.add(i.right.toString());return}if(i instanceof Z){Pc(r,i);return}let o=i.toString(),s=yt(t,o);if(!s)throw new Error(`Element definition not found for ${t} ${o}`);let a=!1,c=n+1;c<e.length&&e[c]instanceof Se&&(a=!0,c++);let u=e[c];if(s.isArray&&!a&&(r.array=!0),c===e.length-1&&u instanceof ce){r.elementDefinitions.push(s),r.propertyTypes.add(u.right.toString());return}if(c>=e.length){r.elementDefinitions.push(s);for(let d of s.type)r.propertyTypes.add(d.code);return}for(let d of s.type){let m=d.code;wc(m)&&(m=s.type[0].code),lo(r,e,m,c)}}function Pc(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 Te){r.propertyTypes.add(e.args[0].right.toString());return}throw new Error(`Unhandled FHIRPath function: ${e.name}`)}function wc(r){return r==="Element"||r==="BackboneElement"}function Ac(r,e){switch(r.type){case"date":return e.size===1&&e.has(l.date)?ee.DATE:ee.DATETIME;case"number":return ee.NUMBER;case"quantity":return ee.QUANTITY;case"reference":return e.has(l.canonical)?ee.CANONICAL:ee.REFERENCE;case"token":return e.size===1&&e.has(l.boolean)?ee.BOOLEAN:ee.TEXT;default:return ee.TEXT}}function po(r,e){let t=[],n=Mt(e);return nr(r,n.child,t),t}function gm(r,e){let t=po(r,e);if(t.length!==0)return t.map(n=>n.toString()).join(" | ")}function Oc(r,e){let t=[],n=Mt(e);if(nr(r,n.child,t),t.length===0)return n;let i=t[0];for(let o=1;o<t.length;o++)i=new ve(i,t[o]);return new Le("<original-not-available>",i)}function nr(r,e,t){e instanceof ve?(nr(r,e.left,t),nr(r,e.right,t)):e.toString().includes(r+".")&&t.push(e)}function rr(r){if(r instanceof ce||r instanceof Se)return[rr(r.left),r].flat();if(r instanceof C)return[r];if(r instanceof ae)return[rr(r.left),rr(r.right)].flat();if(r instanceof Z){if(r.name==="where"&&!(r.args[0]instanceof Te))return[];if(r.name==="last")return[]}return[r]}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(...Ic(r,n));return t}function Ic(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=v(e);if(r.where)for(let i of r.where){let o=E(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 un(r,n,t)}function un(r,e,t){let n=[],i;r.forEach?i=E(r.forEach,[e],t):r.forEachOrNull?i=E(r.forEachOrNull,[e],t):i=[e];for(let o of i){let s=[];for(let a of r.column??[]){let c=E(a.path,[o],t),u;if(c.length===0)u={[a.name]:null};else if(a.collection)u={[a.name]:c.map(d=>d.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=un(a,o,t);s.push(c)}if(r.unionAll){let a=[];for(let c of r.unionAll)for(let u of un(c,o,t))a.push(u);s.push(a)}n.push(...kc(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 kc(r){if(r.length===0)return[];let e=r[0];for(let t=1;t<r.length;t++)e=Vc(e,r[t]);return e}function Vc(r,e){let t=[];for(let n of r)for(let i of e)t.push(Dc(n,i));return t}function Dc(r,e){let t={};return Object.assign(t,r),Object.assign(t,e),t}var Mc="https://meta.medplum.com/releases",ir=new Map;function wm(){ir.clear()}function _c(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 ln(r,e,t){let n=ir.get(e??"latest");if(!n){let i=e?`v${e}`:"latest",o=new URL(`${Mc}/${i}.json`);if(o.searchParams.set("a",r),o.searchParams.set("c",Yr),t)for(let[c,u]of Object.entries(t))o.searchParams.set(c,u);let s=await fetch(o.toString());if(s.status!==200){let c;try{c=(await s.json()).message}catch(u){console.error(`Failed to parse message from body: ${Ie(u)}`)}throw new Error(`Received status code ${s.status} while fetching manifest for version '${e??"latest"}'. Message: ${c}`)}let a=await s.json();_c(a),n=a,ir.set(e??"latest",n),e||ir.set(n.tag_name.slice(1),n)}return n}function Lc(r){return/^\d+\.\d+\.\d+(-[0-9a-z]{7})?$/.test(r)}async function Am(r,e){if(!Lc(e))return!1;try{await ln(r,e)}catch{return!1}return!0}async function Om(r){let e=await ln(r);if(!e.tag_name.startsWith("v"))throw new Error(`Invalid release name found. Release tag '${e.tag_name}' did not start with 'v'`);return e.tag_name.slice(1)}async function Im(r,e){try{let t=Yr.split("-")[0],i=(await ln(r,void 0,e)).tag_name.slice(1);t!==i&&console.warn(`A new version (v${i}) of Medplum is available. Your current version (v${t}) may be missing important updates and bug fixes.`)}catch(t){console.warn(`Failed to check for newer version: ${Ie(t)}`)}}export{Ee as AccessPolicyInteraction,nm as AckCode,It as AndAtom,V as ArithemticOperatorAtom,ce as AsAtom,C as BooleanInfixOperatorAtom,qc as CPT,Ze as ClientStorage,Et as ConcatAtom,Rt as ContainsAtom,A as ContentType,va as DEFAULT_ACCEPT,ip as DEFAULT_MAX_SEARCH_COUNT,np as DEFAULT_SEARCH_COUNT,Zr as DataSampler,ae as DotAtom,St as EmptySetAtom,Pt as EqualsAtom,At as EquivalentAtom,Gr as EventTarget,Gf as ExternalSecretSystems,Hr as FHIRCAST_EVENT_NAMES,ca as FHIRCAST_EVENT_RESOURCES,Qr as FHIRCAST_EVENT_VERSION_REQUIRED,aa as FHIRCAST_RESOURCE_TYPES,Yt as FhirFilterComparison,er as FhirFilterConnective,Zt as FhirFilterNegation,Le as FhirPathAtom,Nt as FhircastConnection,oo as FileBuilder,Z as FunctionAtom,pn as HTTP_HL7_ORG,Gc as HTTP_TERMINOLOGY_HL7_ORG,de as Hl7Context,K as Hl7Field,ao as Hl7Message,nt as Hl7Segment,jc as ICD10,Dt as ImpliesAtom,Ct as InAtom,Se as IndexerAtom,te as InfixOperatorAtom,Te as IsAtom,Uc as LOINC,we as LRUCache,U as LiteralAtom,Be as LogLevel,Sc as LogLevelNames,co as Logger,qf as MEDPLUM_CLI_CLIENT_ID,Mc as MEDPLUM_RELEASES_URL,Yr as MEDPLUM_VERSION,Gt as MedplumClient,Wt as MedplumKeyValueClient,Kr as MemoryStorage,Mi as MockAsyncClientStorage,$c as NDC,wt as NotEqualsAtom,Ot as NotEquivalentAtom,wa as OAuthClientAssertionType,Ue as OAuthGrantType,jf as OAuthTokenAuthMethod,Pa as OAuthTokenType,p as OperationOutcomeError,f as Operator,g as OperatorPrecedence,kt as OrAtom,or as Parser,ot as ParserBuilder,it as PrefixOperatorAtom,l as PropertyType,Wc as RXNORM,M as ReadablePromise,jt as ReconnectingWebSocket,Bc as SNOMED,ee as SearchParameterType,et as SubscriptionEmitter,$t as SubscriptionManager,j as SymbolAtom,ue as Tokenizer,on as TransformMapCollection,J as TypedEventTarget,dn as UCUM,bt as UnaryOperatorAtom,ve as UnionAtom,ts as VALID_HOSTNAME_REGEX,Vt as XorAtom,tu as accepted,bi as accessPolicySupportsInteraction,Ll as addProfileToResource,Qc as allOk,Me as append,Th as applyDefaultValuesToElement,vh as applyDefaultValuesToResource,Jt as applyFixedOrPatternValue,Zn as arrayBufferToBase64,Yn as arrayBufferToHex,qe as arrayify,ma as assert,Ai as assertContextVersionOptional,hu as assertOk,_c as assertReleaseManifest,b as badRequest,h as booleanToTypedValue,en as buildElementsContext,ps as buildTypeName,ou as businessRule,gt as calculateAge,xl as calculateAgeString,Tp as canReadResourceType,bp as canWriteResource,Sp as canWriteResourceType,k as capitalize,uo as checkForNull,Am as checkIfValidMedplumVersion,wm as clearReleaseCache,yu as compressElement,q as concatUrls,Qi as conceptMapTranslate,ru as conflict,kp as convertContainedResourcesToBundle,fi as convertToSearchableDates,Qd as convertToSearchableNumbers,zd as convertToSearchableQuantities,mi as convertToSearchableReferences,hi as convertToSearchableStrings,yi as convertToSearchableTokens,Jd as convertToSearchableUris,ra as convertToTransactionBundle,Cr as crawlTypedValue,Fu as crawlTypedValueAsync,En as createConstraintIssue,Jr as createFhircastMessagePayload,pe as createOperationOutcomeIssue,Rn as createProcessingIssue,he as createReference,T as createStructureIssue,zc as created,ta as decodeBase64,Ri as decodeBase64Url,ye as deepClone,ie as deepEquals,je as deepIncludes,Ft as encodeBase64,Rp as encodeBase64Url,Ci as encryptSHA256,es as ensureNoLeadingSlash,Ur as ensureTrailingSlash,Bl as escapeHtml,Bd as evalFhirPath,E as evalFhirPathTyped,Em as evalSqlOnFhir,ji as expandSampledData,Jf as expandSampledObservation,Om as fetchLatestVersionString,ln as fetchVersionManifest,qn as fhirPathArrayEquals,Ir as fhirPathArrayEquivalent,jn as fhirPathArrayNotEquals,$e as fhirPathEquals,Mo as fhirPathEquivalent,ht as fhirPathIs,Wn as fhirPathNot,Pr as fhirTypeToJsType,Rl as findCodeBySystem,wl as findObservationInterval,Al as findObservationReferenceRange,zo as findObservationReferenceRanges,Dl as findResourceByCode,Vp as findResourceInBundle,Ul as flatMapFilter,Kc as forbidden,ns as formatAddress,Ge as formatCodeableConcept,ai as formatCoding,Gl as formatDate,Br as formatDateTime,$l as formatFamilyName,jl as formatGivenName,Tc as formatHl7DateTime,Qe as formatHumanName,Jl as formatMoney,us as formatObservationValue,Hl as formatPeriod,se as formatQuantity,zl as formatRange,rs as formatReferenceString,sp as formatSearchQuery,is as formatTime,Ql as formatTiming,Re as generateId,Vn as getAllDataTypes,Tl as getAllQuestionnaireAnswers,Mr as getCodeBySystem,re as getDataType,gl as getDateProperty,Sh as getDefaultValuesForNewSliceEntry,Fo as getDisplayString,yt as getElementDefinition,ys as getElementDefinitionFromElements,gr as getElementDefinitionTypeName,gm as getExpressionForResourceType,po as getExpressionsForResourceType,ne as getExtension,bl as getExtensionValue,Bo as getIdentifier,yl as getImageSrc,Ve as getNestedProperty,Oc as getParsedExpressionForResourceType,oe as getPathDifference,sd as getPathDisplayName,fs as getPropertyDisplayName,oi as getQueryString,vl as getQuestionnaireAnswers,$r as getRandomString,D as getReferenceString,nd as getResourceTypes,od as getSearchParameter,ym as getSearchParameterDetails,id as getSearchParameters,fu as getStatus,P as getTypedPropertyValue,Eo as getTypedPropertyValueWithPath,Vo as getTypedPropertyValueWithSchema,Do as getTypedPropertyValueWithoutSchema,Gi as getValueSliceName,ii as getWebSocketUrl,F as globalSchema,Xc as gone,Fn as indexDefaultSearchParameters,qr as indexSearchParameter,rd as indexSearchParameterBundle,Tr as indexStructureDefinitionBundle,Cn as inflateBaseSchema,yo as inflateElement,Ke as initFhirPathParserBuilder,au as isAccepted,Dr as isCodeableConcept,Vr as isCoding,Oi as isCompletedSubscriptionRequest,Lr as isComplexTypeCode,lu as isConflict,wi as isContextVersionRequired,su as isCreated,Dn as isDataTypeLoaded,$n as isDateString,De as isDateTimeString,S as isEmpty,fo as isError,xa as isFhirCriteriaMet,ua as isFhircastResourceType,du as isGone,Ii as isJwt,Cl as isLowerCase,ki as isMedplumAccessToken,uu as isNotFound,R as isObject,hr as isOk,Oe as isOperationOutcome,Gn as isPeriod,X as isPopulated,ut as isPrimitiveType,_n as isProfileLoaded,Lo as isProfileResource,w as isQuantity,Hn as isQuantityEquivalent,cu as isRedirect,W as isReference,O as isResource,Mn as isResourceType,br as isResourceTypeSchema,He as isResourceWithId,$i as isSliceDefinitionWithTypes,vt as isString,Kn as isStringArray,Qo as isTextObject,ad as isTypedValue,El as isUUID,pu as isUnauthenticated,Wr as isValidDate,_l as isValidHostname,Lc as isValidMedplumSemver,ni as lazy,Sr as loadDataType,Fl as mapByIdentifier,Ar as matchDiscriminant,ri as matchesRange,_t as matchesSearchRequest,Zc as multipleMatches,ei as normalizeArrayBufferView,Wi as normalizeCreateBinaryOptions,ka as normalizeCreatePdfOptions,Ie as normalizeErrorString,ct as normalizeOperationOutcome,vn as notFound,Jc as notModified,ho as operationOutcomeIssueToString,bn as operationOutcomeToString,Mt as parseFhirPath,em as parseFilterParameter,im as parseHl7DateTime,Bt as parseJWTPayload,sm as parseLogLevel,Vh as parseMappingLanguage,Ds as parseParameter,ml as parseReference,Xe as parseSearchRequest,xr as parseStructureDefinition,op as parseXFhirQuery,Il as preciseEquals,Vl as preciseGreaterThan,Zo as preciseGreaterThanOrEquals,kl as preciseLessThan,Yo as preciseLessThanOrEquals,Ol as preciseRound,Yc as preconditionFailed,Xs as projectAdminResourceTypes,Ks as protectedResourceTypes,Ys as readInteractions,iu as redirect,ft as removeDuplicates,Nl as removeProfileFromResource,ia as reorderBundle,me as resolveId,pf as resourceMatchesSubscriptionCriteria,Zs as satisfiedAccessPolicy,tr as serializeError,zr as serializeFhircastSubscriptionRequest,Sn as serverError,nu as serverTimeout,Pl as setCodeBySystem,Sl as setIdentifier,G as singleton,Ml as singularize,Fr as sleep,Tt as sortStringArray,Nr as splitN,Ye as splitSearchOnComma,vm as streamToBuffer,xt as stringify,di as stringifyTypedValue,Bh as structureMapTransform,wu as subsetResource,zf as summarizeObservations,L as toJsBoolean,mt as toPeriod,v as toTypedValue,eu as tooManyRequests,We as tryGetDataType,Vi as tryGetJwtExpiration,Ln as tryGetProfile,si as typedValueToString,Ae as unauthorized,fr as unauthorizedTokenAudience,Tn as unauthorizedTokenExpired,Ut as validateFhircastSubscriptionRequest,nl as validateResource,lm as validateResourceType,il as validateTypedValue,y as validationError,dt as validationRegexes,Im as warnIfNewerVersionAvailable,fc as wordWrap};
|
|
53
|
+
`)}};function hc(r,e){let t=[],n=[],i=0;return r.split(" ").forEach(function(o){i+o.length>e&&(t.push(n.join(" ").trim()),n=[],i=0),i+=o.length+1,n.push(o)}),n.length>0&&t.push(n.join(" ").trim()),t}var mc=[...Xe,"eq","ne","co"];function ao(r){return new pe(r,Ke,mc,{dateTimeLiterals:!0,symbolRegex:/[^\s\])]/}).tokenize()}var er=class{constructor(e,t,n){this.path=e,this.operator=t,this.value=n}},tr=class{constructor(e){this.child=e}},rr=class{constructor(e,t,n){this.keyword=e,this.left=t,this.right=n}};var yc={eq:f.EXACT,ne:f.NOT_EQUALS,co:f.CONTAINS,sw:f.STARTS_WITH,ew:void 0,gt:f.GREATER_THAN,lt:f.LESS_THAN,ge:f.GREATER_THAN_OR_EQUALS,le:f.LESS_THAN_OR_EQUALS,ap:f.APPROXIMATELY,sa:f.STARTS_AFTER,eb:f.ENDS_BEFORE,pr:f.PRESENT,po:void 0,ss:void 0,sb:void 0,in:f.IN,ni:f.NOT_IN,re:f.EQUALS,identifier:f.IDENTIFIER};function gc(r){let e=yc[r];if(!e)throw new d(b("Invalid operator: "+r));return e}var ln=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 tr(this.parse()),this.parser.consume(")")):e=new er(this.parser.consume("Symbol").value,gc(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 rr(t,e,this.parse())):e}},xc=Ye();function Yf(r){let e=xc.construct(ao(r));return e.removeComments(),new ln(e).parse()}var th={AA:"AA",AE:"AE",AR:"AR",CA:"CA",CE:"CE",CR:"CR"},vc={AA:"OK",AE:"Application Error",AR:"Application Reject",CA:"Commit Accept",CE:"Commit Error",CR:"Commit Reject"},fe=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}},co=class r{constructor(e,t=new fe){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(e){let t=new Date,n=this.getSegment("MSH"),i=n?.getField(3)?.toString()??"",o=n?.getField(4)?.toString()??"",s=n?.getField(5)?.toString()??"",a=n?.getField(6)?.toString()??"",c=n?.getField(10)?.toString()??"",u=n?.getField(12)?.toString()??"2.5.1",p=e?.ackCode??"AA";return new r([new ot(["MSH",this.context.getMsh2(),s,a,i,o,Sc(t),"",this.buildAckMessageType(n),t.getTime().toString(),"P",u],this.context),new ot(["MSA",p,c,vc[p]],this.context),...e?.errSegment?[e.errSegment]:[]])}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 fe("\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=>ot.parse(n,t)),t)}setSegment(e,t){if(t.name==="MSH"){if(typeof e=="number"){if(e!==0)return!1}else if(this.segments.findIndex(o=>o.name===e)!==0)return!1}else if(typeof e=="number"&&e===0&&t.name!=="MSH")return!1;if(typeof e=="number")return e>=this.segments.length?(this.segments.push(t),!0):(this.segments[e]=t,!0);let n=this.segments.findIndex(i=>i.name===e);return n===0&&t.name!=="MSH"?!1:n!==-1?(this.segments[n]=t,!0):!1}},ot=class r{constructor(e,t=new fe){this.context=t,Yn(e)?this.fields=e.map(n=>X.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 X([[this.context.getMsh1()]],this.context);if(e===2)return new X([[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 fe){return new r(e.split(t.fieldSeparator).map(n=>X.parse(n,t)),t)}setField(e,t){if(this.name==="MSH"){if(e===1||e===2)return!1;if(e>2){let n=e-1;for(;this.fields.length<=n;)this.fields.push(new X([[""]],this.context));return this.fields[n]=typeof t=="string"?X.parse(t,this.context):t,!0}}for(;this.fields.length<=e;)this.fields.push(new X([[""]],this.context));return this.fields[e]=typeof t=="string"?X.parse(t,this.context):t,!0}setComponent(e,t,n,i,o=0){let s=this.getField(e);return s?s.setComponent(t,n,i,o):!1}},X=class r{constructor(e,t=new fe){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 fe){return new r(e.split(t.repetitionSeparator).map(n=>n.split(t.componentSeparator)),t)}setComponent(e,t,n,i=0){if(e<1)return!1;if(i>=this.components.length)for(;this.components.length<=i;)this.components.push([""]);if(n!==void 0){if(n<0)return!1;let s=(this.components[i][e-1]||"").split(this.context.subcomponentSeparator);for(;s.length<=n;)s.push("");s[n]=t,this.components[i][e-1]=s.join(this.context.subcomponentSeparator)}else this.components[i][e-1]=t;return!0}};function rh(r,e){if(!r)return;let t=Ae(r.slice(0,4),0),n=Ae(r.slice(4,6),1)-1,i=Ae(r.slice(6,8),1),o=Ae(r.slice(8,10),0),s=Ae(r.slice(10,12),0),a=Ae(r.slice(12,14),0),c=0;r.includes(".")&&(c=Ae(r.slice(15,19),0));let u=new Date(Date.UTC(t,n,i,o,s,a,c)),p=Tc(r,e?.tzOffset);return p!==0&&(u=new Date(u.getTime()-p)),u.toISOString()}function Ae(r,e){let t=parseInt(r,10);return isNaN(t)?e:t}function Tc(r,e){let t=e,n=r.indexOf("+");n!==-1&&(t=r.slice(n));let i=r.indexOf("-");if(i!==-1&&(t=r.slice(i)),!t)return 0;let o=t.startsWith("-")?-1:1;t=t.slice(1).replace(":","");let s=parseInt(t.slice(0,2),10),a=parseInt(t.slice(2,4),10);return o*(s*60*60*1e3+a*60*1e3)}function Sc(r){let e=r instanceof Date?r:new Date(r),n=e.toISOString().replace(/[-:T]/g,"").replace(/(\.\d+)?Z$/,""),i=e.getUTCMilliseconds();return i>0&&(n+="."+i.toString()),n}var qe={NONE:0,ERROR:1,WARN:2,INFO:3,DEBUG:4},bc=["NONE","ERROR","WARN","INFO","DEBUG"],uo=class r{constructor(e,t={},n=qe.INFO,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(qe.ERROR,e,t)}warn(e,t){this.log(qe.WARN,e,t)}info(e,t){this.log(qe.INFO,e,t)}debug(e,t){this.log(qe.DEBUG,e,t)}log(e,t,n){if(e>this.level)return;let i;if(n instanceof Error)i=nr(n);else if(n){i={...n};for(let[o,s]of Object.entries(i))s instanceof Error&&(i[o]=nr(s))}this.write(JSON.stringify({level:bc[e],timestamp:new Date().toISOString(),msg:this.prefix?`${this.prefix}${t}`:t,...i,...this.metadata}))}};function ih(r){let e=qe[r.toUpperCase()];if(e===void 0)throw new Error(`Invalid log level: ${r}`);return e}function nr(r,e=0,t=10){if(e>=t)return{error:"Max error depth reached"};let n={error:r.toString(),stack:r.stack?.split(`
|
|
54
|
+
`)};r.name&&r.name!=="Error"&&(n.name=r.name),r.message&&(n.message=r.message),"cause"in r&&r.cause!==void 0&&(r.cause instanceof Error?n.cause=nr(r.cause,e+1,t):n.cause=r.cause);let i=Object.getOwnPropertyNames(r).filter(o=>!["name","message","stack","cause"].includes(o));for(let o of i)try{let s=r[o];s instanceof Error?n[o]=nr(s,e+1,t):n[o]=s}catch{}return n}function ch(r){if(!r)throw new d(y("Resource type is null"));if(!Ln(r))throw new d(y("Unknown resource type"))}function lo(r,e,t){r===null?t.push(T(e,"Invalid null value")):Array.isArray(r)?Ec(r,e,t):typeof r=="object"&&Rc(r,e,t)}function Ec(r,e,t){for(let n=0;n<r.length;n++)r[n]===void 0?t.push(T(`${e}[${n}]`,"Invalid undefined value")):lo(r[n],`${e}[${n}]`,t)}function Rc(r,e,t){for(let[n,i]of Object.entries(r))lo(i,`${e}${e?".":""}${n}`,t)}var re={BOOLEAN:"BOOLEAN",NUMBER:"NUMBER",QUANTITY:"QUANTITY",TEXT:"TEXT",REFERENCE:"REFERENCE",CANONICAL:"CANONICAL",DATE:"DATE",DATETIME:"DATETIME",PERIOD:"PERIOD",UUID:"UUID"};function hh(r,e){let t=F.types[r]?.searchParamsDetails?.[e.code];return t||(t=Pc(r,e)),t}function Cc(r,e,t){let n=F.types[r];n||(n={},F.types[r]=n),n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=t}function Pc(r,e){let t=e.code,n=fo(r,e.expression),i={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let s of n){let a=ir(s),c=oi(()=>a.join("."));a.length===1&&a[0]instanceof C?i.propertyTypes.add("boolean"):e.code.endsWith(":identifier")?i.propertyTypes.add("Identifier"):c().endsWith("extension.value.code")||c().endsWith("extension.value.coding.code")?(i.array=!0,i.propertyTypes.clear(),i.propertyTypes.add("code")):po(i,a,r,1),c().endsWith("extension.valueDateTime")&&(i.array=!1,i.propertyTypes.clear(),i.propertyTypes.add("dateTime"))}let o={type:Oc(e,i.propertyTypes),elementDefinitions:i.elementDefinitions.map(s=>({...s,type:s.type?.filter(a=>i.propertyTypes.has(a.code))})).filter(s=>s.type&&s.type.length>0),parsedExpression:Ic(r,e.expression),array:i.array};return Cc(r,t,o),o}function po(r,e,t,n){let i=e[n];if(i instanceof le){r.propertyTypes.add(i.right.toString());return}if(i instanceof ee){wc(r,i);return}let o=i.toString(),s=xt(t,o);if(!s)throw new Error(`Element definition not found for ${t} ${o}`);let a=!1,c=n+1;c<e.length&&e[c]instanceof Ee&&(a=!0,c++);let u=e[c];if(s.isArray&&!a&&(r.array=!0),c===e.length-1&&u instanceof le){r.elementDefinitions.push(s),r.propertyTypes.add(u.right.toString());return}if(c>=e.length){r.elementDefinitions.push(s);for(let p of s.type)r.propertyTypes.add(p.code);return}for(let p of s.type){let m=p.code;Ac(m)&&(m=s.type[0].code),po(r,e,m,c)}}function wc(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 be){r.propertyTypes.add(e.args[0].right.toString());return}throw new Error(`Unhandled FHIRPath function: ${e.name}`)}function Ac(r){return r==="Element"||r==="BackboneElement"}function Oc(r,e){switch(r.type){case"date":return e.size===1&&e.has(l.date)?re.DATE:re.DATETIME;case"number":return re.NUMBER;case"quantity":return re.QUANTITY;case"reference":return e.has(l.canonical)?re.CANONICAL:re.REFERENCE;case"token":return e.size===1&&e.has(l.boolean)?re.BOOLEAN:re.TEXT;default:return re.TEXT}}function fo(r,e){let t=[],n=Lt(e);return or(r,n.child,t),t}function mh(r,e){let t=fo(r,e);if(t.length!==0)return t.map(n=>n.toString()).join(" | ")}function Ic(r,e){let t=[],n=Lt(e);if(or(r,n.child,t),t.length===0)return n;let i=t[0];for(let o=1;o<t.length;o++)i=new Se(i,t[o]);return new Ne("<original-not-available>",i)}function or(r,e,t){e instanceof Se?(or(r,e.left,t),or(r,e.right,t)):e.toString().includes(r+".")&&t.push(e)}function ir(r){if(r instanceof le||r instanceof Ee)return[ir(r.left),r].flat();if(r instanceof C)return[r];if(r instanceof ue)return[ir(r.left),ir(r.right)].flat();if(r instanceof ee){if(r.name==="where"&&!(r.args[0]instanceof be))return[];if(r.name==="last")return[]}return[r]}function gh(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 Sh(r,e){let t=[];for(let n of e)t.push(...kc(r,n));return t}function kc(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=v(e);if(r.where)for(let i of r.where){let o=E(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 pn(r,n,t)}function pn(r,e,t){let n=[],i;r.forEach?i=E(r.forEach,[e],t):r.forEachOrNull?i=E(r.forEachOrNull,[e],t):i=[e];for(let o of i){let s=[];for(let a of r.column??[]){let c=E(a.path,[o],t),u;if(c.length===0)u={[a.name]:null};else if(a.collection)u={[a.name]:c.map(p=>p.value)};else if(c.length===1)u={[a.name]:c[0].value};else throw new Error("Multiple values found but not expected for column");s.push([u])}for(let a of r.select??[]){let c=pn(a,o,t);s.push(c)}if(r.unionAll){let a=[];for(let c of r.unionAll)for(let u of pn(c,o,t))a.push(u);s.push(a)}n.push(...Vc(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 Vc(r){if(r.length===0)return[];let e=r[0];for(let t=1;t<r.length;t++)e=Dc(e,r[t]);return e}function Dc(r,e){let t=[];for(let n of r)for(let i of e)t.push(Mc(n,i));return t}function Mc(r,e){let t={};return Object.assign(t,r),Object.assign(t,e),t}var _c="https://meta.medplum.com/releases",sr=new Map;function Ch(){sr.clear()}function Lc(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 dn(r,e,t){let n=sr.get(e??"latest");if(!n){let i=e?`v${e}`:"latest",o=new URL(`${_c}/${i}.json`);if(o.searchParams.set("a",r),o.searchParams.set("c",en),t)for(let[c,u]of Object.entries(t))o.searchParams.set(c,u);let s=await fetch(o.toString());if(s.status!==200){let c;try{c=(await s.json()).message}catch(u){console.error(`Failed to parse message from body: ${Ve(u)}`)}throw new Error(`Received status code ${s.status} while fetching manifest for version '${e??"latest"}'. Message: ${c}`)}let a=await s.json();Lc(a),n=a,sr.set(e??"latest",n),e||sr.set(n.tag_name.slice(1),n)}return n}function Fc(r){return/^\d+\.\d+\.\d+(-[0-9a-z]{7})?$/.test(r)}async function Ph(r,e){if(!Fc(e))return!1;try{await dn(r,e)}catch{return!1}return!0}async function wh(r){let e=await dn(r);if(!e.tag_name.startsWith("v"))throw new Error(`Invalid release name found. Release tag '${e.tag_name}' did not start with 'v'`);return e.tag_name.slice(1)}async function Ah(r,e){try{let t=en.split("-")[0],i=(await dn(r,void 0,e)).tag_name.slice(1);t!==i&&console.warn(`A new version (v${i}) of Medplum is available. Your current version (v${t}) may be missing important updates and bug fixes.`)}catch(t){console.warn(`Failed to check for newer version: ${Ve(t)}`)}}export{Ce as AccessPolicyInteraction,th as AckCode,Vt as AndAtom,V as ArithemticOperatorAtom,le as AsAtom,C as BooleanInfixOperatorAtom,jc as CPT,tt as ClientStorage,Ct as ConcatAtom,Pt as ContainsAtom,A as ContentType,Ta as DEFAULT_ACCEPT,kp as DEFAULT_MAX_SEARCH_COUNT,Ip as DEFAULT_SEARCH_COUNT,tn as DataSampler,ue as DotAtom,Et as EmptySetAtom,At as EqualsAtom,It as EquivalentAtom,Qr as EventTarget,tf as ExternalSecretSystems,zr as FHIRCAST_EVENT_NAMES,ua as FHIRCAST_EVENT_RESOURCES,Jr as FHIRCAST_EVENT_VERSION_REQUIRED,ca as FHIRCAST_RESOURCE_TYPES,er as FhirFilterComparison,rr as FhirFilterConnective,tr as FhirFilterNegation,Ne as FhirPathAtom,Bt as FhircastConnection,so as FileBuilder,ee as FunctionAtom,hn as HTTP_HL7_ORG,Hc as HTTP_TERMINOLOGY_HL7_ORG,fe as Hl7Context,X as Hl7Field,co as Hl7Message,ot as Hl7Segment,$c as ICD10,_t as ImpliesAtom,wt as InAtom,Ee as IndexerAtom,ne as InfixOperatorAtom,be as IsAtom,Bc as LOINC,Oe as LRUCache,U as LiteralAtom,qe as LogLevel,bc as LogLevelNames,uo as Logger,Yd as MEDPLUM_CLI_CLIENT_ID,_c as MEDPLUM_RELEASES_URL,en as MEDPLUM_VERSION,Qt as MedplumClient,jt as MedplumKeyValueClient,Yr as MemoryStorage,Li as MockAsyncClientStorage,Gc as NDC,Ot as NotEqualsAtom,kt as NotEquivalentAtom,Aa as OAuthClientAssertionType,We as OAuthGrantType,Zd as OAuthTokenAuthMethod,wa as OAuthTokenType,d as OperationOutcomeError,f as Operator,g as OperatorPrecedence,Dt as OrAtom,ar as Parser,at as ParserBuilder,st as PrefixOperatorAtom,l as PropertyType,qc as RXNORM,M as ReadablePromise,Gt as ReconnectingWebSocket,Wc as SNOMED,re as SearchParameterType,rt as SubscriptionEmitter,Ht as SubscriptionManager,$ as SymbolAtom,pe as Tokenizer,an as TransformMapCollection,K as TypedEventTarget,fn as UCUM,Rt as UnaryOperatorAtom,Se as UnionAtom,rs as VALID_HOSTNAME_REGEX,Mt as XorAtom,ru as accepted,Ri as accessPolicySupportsInteraction,El as addProfileToResource,zc as allOk,Le as append,bf as applyDefaultValuesToElement,Sf as applyDefaultValuesToResource,Xt as applyFixedOrPatternValue,ti as arrayBufferToBase64,ei as arrayBufferToHex,$e as arrayify,ya as assert,Ii as assertContextVersionOptional,mu as assertOk,Lc as assertReleaseManifest,b as badRequest,h as booleanToTypedValue,rn as buildElementsContext,fs as buildTypeName,su as businessRule,vt as calculateAge,il as calculateAgeString,jp as canReadResourceType,Gp as canWriteResource,$p as canWriteResourceType,k as capitalize,lo as checkForNull,Ph as checkIfValidMedplumVersion,Ch as clearReleaseCache,gu as compressElement,j as concatUrls,zi as conceptMapTranslate,nu as conflict,id as convertContainedResourcesToBundle,mi as convertToSearchableDates,Sp as convertToSearchableNumbers,bp as convertToSearchableQuantities,gi as convertToSearchableReferences,yi as convertToSearchableStrings,xi as convertToSearchableTokens,Ep as convertToSearchableUris,na as convertToTransactionBundle,Pr as crawlTypedValue,Du as crawlTypedValueAsync,Cn as createConstraintIssue,Xr as createFhircastMessagePayload,he as createOperationOutcomeIssue,Pn as createProcessingIssue,ye as createReference,T as createStructureIssue,Jc as created,ra as decodeBase64,Pi as decodeBase64Url,xe as deepClone,se as deepEquals,Ge as deepIncludes,Ut as encodeBase64,Xp as encodeBase64Url,wi as encryptSHA256,ts as ensureNoLeadingSlash,Br as ensureTrailingSlash,wl as escapeHtml,mp as evalFhirPath,E as evalFhirPathTyped,Sh as evalSqlOnFhir,$i as expandSampledData,sf as expandSampledObservation,wh as fetchLatestVersionString,dn as fetchVersionManifest,$n as fhirPathArrayEquals,kr as fhirPathArrayEquivalent,Gn as fhirPathArrayNotEquals,He as fhirPathEquals,_o as fhirPathEquivalent,yt as fhirPathIs,jn as fhirPathNot,wr as fhirTypeToJsType,pl as findCodeBySystem,hl as findObservationInterval,ml as findObservationReferenceRange,Jo as findObservationReferenceRanges,Tl as findResourceByCode,od as findResourceInBundle,Pl as flatMapFilter,Xc as forbidden,is as formatAddress,Qe as formatCodeableConcept,ui as formatCoding,Vl as formatDate,Wr as formatDateTime,kl as formatFamilyName,Il as formatGivenName,Sc as formatHl7DateTime,Je as formatHumanName,Ll as formatMoney,ls as formatObservationValue,Dl as formatPeriod,ce as formatQuantity,_l as formatRange,ns as formatReferenceString,Dp as formatSearchQuery,os as formatTime,Ml as formatTiming,Pe as generateId,Mn as getAllDataTypes,sl as getAllQuestionnaireAnswers,Gr as getBuffer,_r as getCodeBySystem,ie as getDataType,nl as getDateProperty,Ef as getDefaultValuesForNewSliceEntry,No as getDisplayString,xt as getElementDefinition,gs as getElementDefinitionFromElements,xr as getElementDefinitionTypeName,mh as getExpressionForResourceType,fo as getExpressionsForResourceType,oe as getExtension,cl as getExtensionValue,Wo as getIdentifier,rl as getImageSrc,Me as getNestedProperty,Ic as getParsedExpressionForResourceType,ae as getPathDifference,Gl as getPathDisplayName,hs as getPropertyDisplayName,ai as getQueryString,ol as getQuestionnaireAnswers,Hr as getRandomString,D as getReferenceString,ql as getResourceTypes,$l as getSearchParameter,hh as getSearchParameterDetails,jl as getSearchParameters,hu as getStatus,P as getTypedPropertyValue,Ro as getTypedPropertyValueWithPath,Do as getTypedPropertyValueWithSchema,Mo as getTypedPropertyValueWithoutSchema,Hi as getValueSliceName,si as getWebSocketUrl,zp as getWindow,F as globalSchema,Yc as gone,Un as indexDefaultSearchParameters,jr as indexSearchParameter,Wl as indexSearchParameterBundle,Sr as indexStructureDefinitionBundle,wn as inflateBaseSchema,go as inflateElement,Ye as initFhirPathParserBuilder,cu as isAccepted,B as isBrowserEnvironment,Mr as isCodeableConcept,Dr as isCoding,ki as isCompletedSubscriptionRequest,Fr as isComplexTypeCode,pu as isConflict,Oi as isContextVersionRequired,au as isCreated,_n as isDataTypeLoaded,Hn as isDateString,_e as isDateTimeString,S as isEmpty,ho as isError,va as isFhirCriteriaMet,la as isFhircastResourceType,du as isGone,Vi as isJwt,dl as isLowerCase,Di as isMedplumAccessToken,Qp as isNodeEnvironment,lu as isNotFound,R as isObject,mr as isOk,ke as isOperationOutcome,Qn as isPeriod,Y as isPopulated,pt as isPrimitiveType,Fn as isProfileLoaded,Fo as isProfileResource,w as isQuantity,zn as isQuantityEquivalent,uu as isRedirect,q as isReference,O as isResource,Ln as isResourceType,Er as isResourceTypeSchema,ze as isResourceWithId,Gi as isSliceDefinitionWithTypes,St as isString,Yn as isStringArray,zo as isTextObject,Hl as isTypedValue,ll as isUUID,fu as isUnauthenticated,qr as isValidDate,bl as isValidHostname,Fc as isValidMedplumSemver,oi as lazy,br as loadDataType,te as locationUtils,Rl as mapByIdentifier,Or as matchDiscriminant,ii as matchesRange,Ft as matchesSearchRequest,eu as multipleMatches,ri as normalizeArrayBufferView,qi as normalizeCreateBinaryOptions,Va as normalizeCreatePdfOptions,Ve as normalizeErrorString,lt as normalizeOperationOutcome,Sn as notFound,Kc as notModified,mo as operationOutcomeIssueToString,Rn as operationOutcomeToString,Lt as parseFhirPath,Yf as parseFilterParameter,rh as parseHl7DateTime,qt as parseJWTPayload,ih as parseLogLevel,Df as parseMappingLanguage,Ms as parseParameter,tl as parseReference,Ze as parseSearchRequest,vr as parseStructureDefinition,Vp as parseXFhirQuery,gl as preciseEquals,vl as preciseGreaterThan,es as preciseGreaterThanOrEquals,xl as preciseLessThan,Zo as preciseLessThanOrEquals,yl as preciseRound,Zc as preconditionFailed,Ys as projectAdminResourceTypes,Xs as protectedResourceTypes,Zs as readInteractions,ou as redirect,mt as removeDuplicates,Cl as removeProfileFromResource,oa as reorderBundle,ge as resolveId,Md as resourceMatchesSubscriptionCriteria,ea as satisfiedAccessPolicy,nr as serializeError,Kr as serializeFhircastSubscriptionRequest,En as serverError,iu as serverTimeout,fl as setCodeBySystem,al as setIdentifier,H as singleton,Sl as singularize,Nr as sleep,bt as sortStringArray,Ur as splitN,et as splitSearchOnComma,gh as streamToBuffer,Tt as stringify,fi as stringifyTypedValue,Bf as structureMapTransform,Pu as subsetResource,of as summarizeObservations,L as toJsBoolean,gt as toPeriod,v as toTypedValue,tu as tooManyRequests,ul as trimTrailingEmptyElements,je as tryGetDataType,Mi as tryGetJwtExpiration,Nn as tryGetProfile,ci as typedValueToString,Ie as unauthorized,hr as unauthorizedTokenAudience,bn as unauthorizedTokenExpired,Wt as validateFhircastSubscriptionRequest,$u as validateResource,ch as validateResourceType,Gu as validateTypedValue,y as validationError,ft as validationRegexes,Ah as warnIfNewerVersionAvailable,hc as wordWrap};
|
|
55
55
|
/*!
|
|
56
56
|
* Reconnecting WebSocket
|
|
57
57
|
* by Pedro Ladaria <pedro.ladaria@gmail.com>
|