@medplum/core 2.1.5 → 2.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
var Ze="ok",et="created",tt="gone",rt="not-modified",nt="not-found",qt="unauthorized",$t="forbidden",jt="too-many-requests",he="accepted",To={resourceType:"OperationOutcome",id:Ze,issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},vo={resourceType:"OperationOutcome",id:et,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},So={resourceType:"OperationOutcome",id:rt,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},Ht={resourceType:"OperationOutcome",id:nt,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},bo={resourceType:"OperationOutcome",id:qt,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},Ro={resourceType:"OperationOutcome",id:$t,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},Eo={resourceType:"OperationOutcome",id:tt,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},Ao={resourceType:"OperationOutcome",id:jt,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function Po(r){return{resourceType:"OperationOutcome",id:he,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:r}]}}function O(r,e){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:r},expression:e?[e]:void 0}]}}function h(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"structure",details:{text:r}}]}}function Qt(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:r.toString()}]}}function ye(r){return typeof r=="object"&&r!==null&&r.resourceType==="OperationOutcome"}function it(r){return r.id===Ze||r.id===et||r.id===rt||r.id===he}function Co(r){return r.id===he}function wo(r){return r.id===nt}function Io(r){return r.id===tt}function ko(r){return r.id===Ze?200:r.id===et?201:r.id===he?202:r.id===rt?304:r.id===qt?401:r.id===$t?403:r.id===nt?404:r.id===tt?410:r.id===jt?429:400}function Oo(r,e){if(!it(r)||e===void 0)throw new d(r)}var d=class extends Error{constructor(t,n){super(Wt(t));this.outcome=t,this.cause=n}};function ot(r){return r instanceof d?r.outcome:ye(r)?r:O(un(r))}function un(r){return r?typeof r=="string"?r:r instanceof Error?r.message:ye(r)?Wt(r):typeof r=="object"&&"code"in r&&typeof r.code=="string"?r.code:JSON.stringify(r):"Unknown error"}function Wt(r){let e=r.issue?.map(ln)??[];return e.length>0?e.join("; "):"Unknown error"}function ln(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 st(r,e,t,n){let i={severity:"error",code:r,details:{text:e},expression:[t]};return n&&(i.diagnostics=JSON.stringify(n)),i}function y(r,e){return st("structure",e,r)}function Gt(r,e){return st("invariant",`Constraint ${e.key} not met: ${e.description}`,r,{fhirpath:e.expression})}function Kt(r,e,t,n){return st("processing",e,r,{...n,error:t})}function K(r){let e=Jt(r),t=pn(r);return t===e?{reference:e}:{reference:e,display:t}}function Jt(r){return r.resourceType+"/"+r.id}function _o(r){return r?.reference?.split("/")[1]}function Uo(r){if(r?.reference===void 0)return;let[e,t]=r.reference.split("/");if(!(e===""||t===""||t===void 0))return[e,t]}function dn(r){return r.resourceType==="Patient"||r.resourceType==="Practitioner"||r.resourceType==="RelatedPerson"}function pn(r){if(dn(r)){let e=fn(r);if(e)return e}if(r.resourceType==="Device"){let e=mn(r);if(e)return e}return r.resourceType==="Observation"&&"code"in r&&r.code?.text?r.code.text:r.resourceType==="User"&&r.email?r.email:"name"in r&&r.name&&typeof r.name=="string"?r.name:Jt(r)}function fn(r){let e=r.name;if(e&&e.length>0)return be(e[0])}function mn(r){let e=r.deviceName;if(e&&e.length>0)return e[0].name}function Lo(r){if(!("photo"in r))return;let e=r.photo;if(e)if(Array.isArray(e))for(let t of e){let n=zt(t);if(n)return n}else return zt(e)}function zt(r){if(r.url&&r.contentType&&r.contentType.startsWith("image/"))return r.url}function Fo(r){return r?new Date(r):void 0}function ge(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(),m=n.getUTCDate(),p=a-i;(c<o||c===o&&m<s)&&p--;let q=a*12+c-(i*12+o);m<s&&q--;let cn=Math.floor((n.getTime()-t.getTime())/(1e3*60*60*24));return{years:p,months:q,days:cn}}function No(r,e){let{years:t,months:n,days:i}=ge(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 Mo(r){let e={};return Yt(r.item,e),e}function Yt(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer[0]),Yt(t.item,e)}function Bo(r){let e={};return Xt(r.item,e),e}function Xt(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer),Xt(t.item,e)}function qo(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 $o(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 jo(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?.valueString}function Ho(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 Zt(r,e){return JSON.stringify(r,hn,e?2:void 0)}function hn(r,e){return!yn(r)&&b(e)?void 0:e}function yn(r){return!!/\d+$/.exec(r)}function b(r){if(r==null)return!0;let e=typeof r;return e==="string"&&r===""||e==="object"&&Object.keys(r).length===0}function xe(r,e,t){return r===e||b(r)&&b(e)?!0:b(r)||b(e)?!1:Array.isArray(r)&&Array.isArray(e)?gn(r,e):Array.isArray(r)||Array.isArray(e)?!1:$(r)&&$(e)?xn(r,e,t):($(r)||$(e),!1)}function gn(r,e){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(!xe(r[t],e[t]))return!1;return!0}function xn(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(!xe(o,s,i))return!1}return!0}function Te(r,e){return b(r)?!0:b(e)?!1:Array.isArray(r)&&Array.isArray(e)?Tn(r,e):Array.isArray(r)||Array.isArray(e)?!1:$(r)&&$(e)?vn(r,e):$(r)||$(e)?!1:r===e}function Tn(r,e){return r.every(t=>e.some(n=>Te(t,n)))}function vn(r,e){return Object.entries(r).every(([t,n])=>t in e&&Te(n,e[t]))}function ct(r){return JSON.parse(JSON.stringify(r))}function Qo(r){return!!/^\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/i.exec(r)}function $(r){return r!==null&&typeof r=="object"}function er(r){return r.every(e=>typeof e=="string")}var tr=[];for(let r=0;r<256;r++)tr.push(r.toString(16).padStart(2,"0"));function rr(r){let e=new Uint8Array(r),t=new Array(e.length);for(let n=0;n<e.length;n++)t[n]=tr[e[n]];return t.join("")}function nr(r){let e=new Uint8Array(r),t=[];for(let n=0;n<e.length;n++)t[n]=String.fromCharCode(e[n]);return window.btoa(t.join(""))}function A(r){return r.charAt(0).toUpperCase()+r.substring(1)}function ve(r){return r===r.toLowerCase()&&r!==r.toUpperCase()}function at(r,e){return r.coding?.find(t=>t.system===e)?.code}function Wo(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 Go(r,e,t,n){return r.qualifiedInterval?.find(i=>ir(i,e)&&Rn(i,t,r.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function Ko(r,e,t){return r.qualifiedInterval?.find(n=>ir(n,e)&&t.includes(n.condition))}function ir(r,e){return Sn(r,e)&&bn(r,e)}function Sn(r,e){return!r.gender||r.gender===e.gender}function bn(r,e){return!r.age||or(ge(e.birthDate).years,r.age)}function Rn(r,e,t){return!!r.range&&or(e,r.range,t)}function or(r,e,t){return(e.low?.value===void 0||An(r,e.low.value,t))&&(e.high?.value===void 0||En(r,e.high.value,t))}function zo(r,e){return parseFloat(r.toFixed(e))}function Jo(r,e,t){return D(r,t)===D(e,t)}function Yo(r,e,t){return D(r,t)<D(e,t)}function Xo(r,e,t){return D(r,t)>D(e,t)}function En(r,e,t){return D(r,t)<=D(e,t)}function An(r,e,t){return D(r,t)>=D(e,t)}function D(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}function Zo(r,e,t){return r.find(n=>typeof e=="string"?at(n.code||{},t)===e:at(n.code||{},t)===at(e,t))}function Se(r){if(r)return Array.isArray(r)?r:[r]}var ut=r=>new Promise(e=>{setTimeout(e,r)});function rs(r,e){let t=[];if(r.line&&t.push(...r.line),r.city||r.state||r.postalCode){let n=[];r.city&&n.push(r.city),r.state&&n.push(r.state),r.postalCode&&n.push(r.postalCode),t.push(n.join(", "))}return r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.join(e?.lineSeparator??", ").trim()}function be(r,e){let t=[];return 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&&r.text?r.text:t.join(" ").trim()}function ns(r){let e=[];return r.given&&e.push(...r.given),e.join(" ").trim()}function is(r){return r.family??""}function dt(r){return r instanceof Date&&!isNaN(r.getTime())}function os(r,e,t){if(!r)return"";let n=new Date(r);return dt(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...t})):""}function Pn(r,e,t){if(!r)return"";let n=new Date("2000-01-01T"+r+"Z");return dt(n)?n.toLocaleTimeString(e,t):""}function lt(r,e,t){if(!r)return"";let n=new Date(r);return dt(n)?n.toLocaleString(e,t):""}function ss(r,e,t){return!r||!r.start&&!r.end?"":lt(r.start,e,t)+" - "+lt(r.end,e,t)}var Cn={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},wn={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},In={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function as(r){if(!r)return"";let e=[];return kn(e,r.repeat),r.event&&e.push(r.event.map(t=>lt(t)).join(", ")),A(e.join(" ").trim())}function kn(r,e){if(!e?.periodUnit)return;let t=e.frequency??1,n=e.period??1,i=e.periodUnit;t===1&&n===1?r.push(Cn[i]):(t===1?r.push("once"):r.push(t+" times"),n===1?r.push("per "+wn[i]):r.push("per "+n+" "+In[i])),e.dayOfWeek&&r.push("on "+e.dayOfWeek.map(A).join(", ")),e.timeOfDay&&r.push("at "+e.timeOfDay.map(o=>Pn(o)).join(", "))}function cs(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=Un(n.value,e),`> ${z(n,e)}`):`>= ${z(n,e)}`:n?.value===void 0&&i?.value!==void 0?t&&e!==void 0?(i.value=_n(i.value,e),`< ${z(i,e)}`):`<= ${z(i,e)}`:(n?.unit===i?.unit&&delete n?.unit,`${z(n,e)} - ${z(i,e)}`)}function z(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 us(r){return r?.value===void 0?"":r.value.toLocaleString(void 0,{style:"currency",currency:r.currency??"USD",currencyDisplay:"narrowSymbol"})}function On(r){return r?r.text?r.text:r.coding?r.coding.map(e=>Dn(e)).join(", "):"":""}function Dn(r){return r?.display??r?.code??""}function Vn(r){return r?"component"in r?r.component.map(e=>Vn(e)).join(" / "):r.valueQuantity?z(r.valueQuantity):r.valueCodeableConcept?On(r.valueCodeableConcept):r.valueString?r.valueString:"":""}function _n(r,e,t=1){return(sr(r,e)+t)*Math.pow(10,-e)}function Un(r,e,t=1){return(sr(r,e)-t)*Math.pow(10,-e)}function sr(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}var Ln={"http://hl7.org/fhirpath/System.String":"string"};function ds(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:Ln[t.code]??t.code})),e}function Fn(r){let e=r.max&&r.max===Number.MAX_SAFE_INTEGER?Number.POSITIVE_INFINITY:r.max;return{path:"",description:"",type:r.type??[],min:r.min??0,max:e??1,isArray:!!e&&e>1,constraints:[]}}function ar(r){let e=Object.create(null);for(let[t,n]of Object.entries(r))e[t]={name:t,elements:Object.fromEntries(Object.entries(n.elements).map(([i,o])=>[i,Fn(o)])),constraints:[],innerTypes:[]};return e}var cr={Element:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]}}},BackboneElement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]}}},Address:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"code"}]},text:{type:[{code:"string"}]},line:{max:9007199254740991,type:[{code:"string"}]},city:{type:[{code:"string"}]},district:{type:[{code:"string"}]},state:{type:[{code:"string"}]},postalCode:{type:[{code:"string"}]},country:{type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Age:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Annotation:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"author[x]":{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Organization"]},{code:"string"}]},time:{type:[{code:"dateTime"}]},text:{min:1,type:[{code:"markdown"}]}}},Attachment:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},contentType:{type:[{code:"code"}]},language:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]},url:{type:[{code:"url"}]},size:{type:[{code:"unsignedInt"}]},hash:{type:[{code:"base64Binary"}]},title:{type:[{code:"string"}]},creation:{type:[{code:"dateTime"}]}}},CodeableConcept:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},coding:{max:9007199254740991,type:[{code:"Coding"}]},text:{type:[{code:"string"}]}}},Coding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"uri"}]},version:{type:[{code:"string"}]},code:{type:[{code:"code"}]},display:{type:[{code:"string"}]},userSelected:{type:[{code:"boolean"}]}}},ContactDetail:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"string"}]},telecom:{max:9007199254740991,type:[{code:"ContactPoint"}]}}},ContactPoint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"code"}]},value:{type:[{code:"string"}]},use:{type:[{code:"code"}]},rank:{type:[{code:"positiveInt"}]},period:{type:[{code:"Period"}]}}},Contributor:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{min:1,type:[{code:"string"}]},contact:{max:9007199254740991,type:[{code:"ContactDetail"}]}}},Count:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},DataRequirement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},"subject[x]":{type:[{code:"CodeableConcept"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Group"]}]},mustSupport:{max:9007199254740991,type:[{code:"string"}]},codeFilter:{max:9007199254740991,type:[{code:"DataRequirementCodeFilter"}]},dateFilter:{max:9007199254740991,type:[{code:"DataRequirementDateFilter"}]},limit:{type:[{code:"positiveInt"}]},sort:{max:9007199254740991,type:[{code:"DataRequirementSort"}]}}},Distance:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Dosage:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},sequence:{type:[{code:"integer"}]},text:{type:[{code:"string"}]},additionalInstruction:{max:9007199254740991,type:[{code:"CodeableConcept"}]},patientInstruction:{type:[{code:"string"}]},timing:{type:[{code:"Timing"}]},"asNeeded[x]":{type:[{code:"boolean"},{code:"CodeableConcept"}]},site:{type:[{code:"CodeableConcept"}]},route:{type:[{code:"CodeableConcept"}]},method:{type:[{code:"CodeableConcept"}]},doseAndRate:{max:9007199254740991,type:[{code:"DosageDoseAndRate"}]},maxDosePerPeriod:{type:[{code:"Ratio"}]},maxDosePerAdministration:{type:[{code:"Quantity"}]},maxDosePerLifetime:{type:[{code:"Quantity"}]}}},Duration:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},ElementDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},representation:{max:9007199254740991,type:[{code:"code"}]},sliceName:{type:[{code:"string"}]},sliceIsConstraining:{type:[{code:"boolean"}]},label:{type:[{code:"string"}]},code:{max:9007199254740991,type:[{code:"Coding"}]},slicing:{type:[{code:"ElementDefinitionSlicing"}]},short:{type:[{code:"string"}]},definition:{type:[{code:"markdown"}]},comment:{type:[{code:"markdown"}]},requirements:{type:[{code:"markdown"}]},alias:{max:9007199254740991,type:[{code:"string"}]},min:{type:[{code:"unsignedInt"}]},max:{type:[{code:"string"}]},base:{type:[{code:"ElementDefinitionBase"}]},contentReference:{type:[{code:"uri"}]},type:{max:9007199254740991,type:[{code:"ElementDefinitionType"}]},"defaultValue[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},meaningWhenMissing:{type:[{code:"markdown"}]},orderMeaning:{type:[{code:"string"}]},"fixed[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},"pattern[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},example:{max:9007199254740991,type:[{code:"ElementDefinitionExample"}]},"minValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},"maxValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},maxLength:{type:[{code:"integer"}]},condition:{max:9007199254740991,type:[{code:"id"}]},constraint:{max:9007199254740991,type:[{code:"ElementDefinitionConstraint"}]},mustSupport:{type:[{code:"boolean"}]},isModifier:{type:[{code:"boolean"}]},isModifierReason:{type:[{code:"string"}]},isSummary:{type:[{code:"boolean"}]},binding:{type:[{code:"ElementDefinitionBinding"}]},mapping:{max:9007199254740991,type:[{code:"ElementDefinitionMapping"}]}}},Expression:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},description:{type:[{code:"string"}]},name:{type:[{code:"id"}]},language:{min:1,type:[{code:"code"}]},expression:{type:[{code:"string"}]},reference:{type:[{code:"uri"}]}}},Extension:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},url:{min:1,type:[{code:"string"}]},"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"}]},account:{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"}]},high:{type:[{code:"Quantity"}]}}},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"}]},period:{min:1,type:[{code:"decimal"}]},factor:{type:[{code:"decimal"}]},lowerLimit:{type:[{code:"decimal"}]},upperLimit:{type:[{code:"decimal"}]},dimensions:{min:1,type:[{code:"positiveInt"}]},data:{type:[{code:"string"}]}}},Signature:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,max:9007199254740991,type:[{code:"Coding"}]},when:{min:1,type:[{code:"instant"}]},who:{min:1,type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},onBehalfOf:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},targetFormat:{type:[{code:"code"}]},sigFormat:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]}}},SubstanceAmount:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"amount[x]":{type:[{code:"Quantity"},{code:"Range"},{code:"string"}]},amountType:{type:[{code:"CodeableConcept"}]},amountText:{type:[{code:"string"}]},referenceRange:{type:[{code:"SubstanceAmountReferenceRange"}]}}},Timing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},event:{max:9007199254740991,type:[{code:"dateTime"}]},repeat:{type:[{code:"TimingRepeat"}]},code:{type:[{code:"CodeableConcept"}]}}},TriggerDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{type:[{code:"string"}]},"timing[x]":{type:[{code:"Timing"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Schedule"]},{code:"date"},{code:"dateTime"}]},data:{max:9007199254740991,type:[{code:"DataRequirement"}]},condition:{type:[{code:"Expression"}]}}},UsageContext:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"Coding"}]},"value[x]":{min:1,type:[{code:"CodeableConcept"},{code:"Quantity"},{code:"Range"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/PlanDefinition","http://hl7.org/fhir/StructureDefinition/ResearchStudy","http://hl7.org/fhir/StructureDefinition/InsurancePlan","http://hl7.org/fhir/StructureDefinition/HealthcareService","http://hl7.org/fhir/StructureDefinition/Group","http://hl7.org/fhir/StructureDefinition/Location","http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MoneyQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},SimpleQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{max:0,type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},MetadataResource:{elements:{id:{type:[{code:"string"}]},meta:{type:[{code:"Meta"}]},implicitRules:{type:[{code:"uri"}]},language:{type:[{code:"code"}]},text:{type:[{code:"Narrative"}]},contained:{max:9007199254740991,type:[{code:"Resource"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},url:{type:[{code:"uri"}]},version:{type:[{code:"string"}]},name:{type:[{code:"string"}]},title:{type:[{code:"string"}]},status:{min:1,type:[{code:"code"}]},experimental:{type:[{code:"boolean"}]},date:{type:[{code:"dateTime"}]},publisher:{type:[{code:"string"}]},contact:{max:9007199254740991,type:[{code:"ContactDetail"}]},description:{type:[{code:"markdown"}]},useContext:{max:9007199254740991,type:[{code:"UsageContext"}]},jurisdiction:{max:9007199254740991,type:[{code:"CodeableConcept"}]}}},IdentityProvider:{elements:{authorizeUrl:{min:1,type:[{code:"string"}]},tokenUrl:{min:1,type:[{code:"string"}]},userInfoUrl:{min:1,type:[{code:"string"}]},clientId:{min:1,type:[{code:"string"}]},clientSecret:{min:1,type:[{code:"string"}]},useSubject:{type:[{code:"boolean"}]}}}};function l(r){return[{type:u.boolean,value:r}]}function T(r){return r==null?{type:"undefined",value:void 0}:Number.isSafeInteger(r)?{type:u.integer,value:r}:typeof r=="number"?{type:u.decimal,value:r}:typeof r=="boolean"?{type:u.boolean,value:r}:typeof r=="string"?{type:u.string,value:r}:R(r)?{type:u.Quantity,value:r}:_(r)?{type:r.resourceType,value:r}:{type:u.BackboneElement,value:r}}function N(r){return r.length===0?!1:!!r[0].value}function V(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 w(r,e){if(!r.value)return;let t=Ae(r.type,e);return t?Mn(r,e,t):Bn(r,e)}function Mn(r,e,t){let n=t.type;if(!n||n.length===0)return;let i,o="undefined";if(n.length===1)i=r.value[e],o=n[0].code;else for(let a of n){let c=e.replace("[x]","")+A(a.code);if(c in r.value){i=r.value[c],o=a.code;break}}let s=r.value["_"+e];if(s&&(Array.isArray(i)?i=i.map((a,c)=>s[c]?pr(a??{},s[c]):a):i=pr(i??{},s)),!b(i))return(o==="Element"||o==="BackboneElement")&&(o=t.type[0].code),Array.isArray(i)?i.map(a=>ur(a,o)):ur(i,o)}function ur(r,e){return e==="Resource"&&_(r)&&(e=r.resourceType),{type:e,value:r}}function Bn(r,e){let t=r.value;if(!t||typeof t!="object")return;let n;if(e in t)n=t[e];else for(let i in u){let o=e+A(i);if(o in t){n=t[o];break}}if(!b(n))return Array.isArray(n)?n.map(T):T(n)}function Re(r){let e=[];for(let t of r){let n=!1;for(let i of e)if(N(fr(t,i))){n=!0;break}n||e.push(t)}return e}function pt(r){return l(!N(r))}function ft(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?l(!1):l(r.every((t,n)=>N(fr(t,e[n]))))}function fr(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?l(Math.abs(t-n)<1e-8):R(t)&&R(n)?l(mr(t,n)):l(typeof t=="object"&&typeof n=="object"?ht(r,e):t===n)}function mt(r,e){return r.length===0&&e.length===0?l(!0):r.length!==e.length?l(!1):(r.sort(lr),e.sort(lr),l(r.every((t,n)=>N(qn(t,e[n])))))}function qn(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"?l(Math.abs(s-a)<.01):R(s)&&R(a)?l(mr(s,a)):l(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"?ht({...s,id:void 0},{...a,id:void 0}):typeof s=="string"&&typeof a=="string"?s.toLowerCase()===a.toLowerCase():s===a)}function lr(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 Ee(r,e){let{value:t}=r;if(t==null)return!1;switch(e){case"Boolean":return typeof t=="boolean";case"Decimal":case"Integer":return typeof t=="number";case"Date":return typeof t=="string"&&!!/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t);case"DateTime":return typeof t=="string"&&!!/^\d{4}(-\d{2}(-\d{2})?)?T/.exec(t);case"Time":return typeof t=="string"&&!!/^T\d/.exec(t);case"Period":return $n(t);case"Quantity":return R(t);default:return typeof t=="object"&&t?.resourceType===e}}function $n(r){return!!(r&&typeof r=="object"&&"start"in r)}function R(r){return!!(r&&typeof r=="object"&&"value"in r&&typeof r.value=="number")}function mr(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 ht(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(dr(o)&&dr(s)){if(!ht(o,s))return!1}else if(o!==s)return!1}return!0}function dr(r){return r!==null&&typeof r=="object"}function pr(r,e){return delete e.__proto__,delete e.constructor,Object.assign(r,e)}function Tt(r){return new gt(r).parse()}var j=ar(cr);function xr(r){let e=Array.isArray(r)?r:r.entry?.map(t=>t.resource)??[];for(let t of e)jn(t)}function jn(r){if(!r?.name)throw new Error("Failed loading StructureDefinition from bundle");if(r.resourceType!=="StructureDefinition")return;let e=Tt(r);j[r.name]=e;for(let t of e.innerTypes)t.parentType=e,j[t.name]=t}function Tr(){return j}function vr(r){return!!j[r]}function Sr(r){return j[r]}function te(r){let e=j[r];if(!e)throw new d(Qt(Error("Unknown data type: "+r)));return e}function br(r){let e=j[r];return e&&vt(e)}var gt=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,url:e.url,kind:e.kind,description:e.description,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=yt(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[yt(e,n.path)]=t;break}n=n.parent}if(!n){let i=yt(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),e.slicing&&!this.slicingContext&&this.enterSlice(e,t)}enterInnerType(e){for(;this.backboneContext&&!ee(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;this.backboneContext={type:{name:xt(e),description:e.definition,elements:{},constraints:this.parseElementDefinition(e).constraints,innerTypes:[]},path:e.path??"",parent:ee(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,t){Wn(e)&&!this.peek()?.sliceName||(t.slicing={discriminator:(e.slicing?.discriminator??[]).map(n=>{if(n.type!=="value"&&n.type!=="pattern"&&n.type!=="type")throw new Error(`Unsupported slicing discriminator type: ${n.type}`);return{path:n.path,type:n.type}}),slices:[],ordered:e.slicing?.ordered??!1,rule:e.slicing?.rules},this.slicingContext={field:t.slicing,path:e.path??""})}checkFieldExit(e=void 0){if(this.backboneContext&&!ee(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!ee(this.backboneContext.path,e?.path));else this.innerTypes.push(this.backboneContext.type),delete this.backboneContext;this.slicingContext&&!ee(this.slicingContext.path,e?.path)&&(this.slicingContext?.current&&this.slicingContext.field.slices.push(this.slicingContext.current),delete this.slicingContext)}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=this.elementIndex[e.contentReference.slice(e.contentReference.indexOf("#")+1)];return t?{...t,id:e.id,path:e.path,min:e.min??t.min,max:e.max??t.max,contentReference:e.contentReference,definition:e.definition}:void 0}return e}}isInnerType(e){let t=this.peek();return!!(ee(e?.path,t?.path)&&e.type?.some(n=>["BackboneElement","Element"].includes(n.code)))}parseSliceStart(e){if(!this.slicingContext)throw new Error("Invalid slice start before discriminator: "+e.sliceName);this.slicingContext.current&&this.slicingContext.field.slices.push(this.slicingContext.current),this.slicingContext.current={name:e.sliceName??"",type:e.type?.map(t=>({code:t.code??"",targetProfile:t.targetProfile})),elements:{},min:e.min??0,max:e.max==="*"?Number.POSITIVE_INFINITY:Number.parseInt(e.max,10)}}parseElementDefinition(e){let t=yr(e.max),n=e.base?.max?yr(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:(e.type??[]).map(o=>({code:["BackboneElement","Element"].includes(o.code)?xt(e):o.code??"",targetProfile:o.targetProfile})),fixed:gr(w(i,"fixed")),pattern:gr(w(i,"pattern")),binding:e.binding}}};function As(r,e){if(!r)return;let t=[];for(let n of e){t.push("_"+n);let i=j[r.resourceType].elements[n+"[x]"];i&&t.push(...i.type.map(o=>n+A(o.code)))}for(let n of Object.getOwnPropertyNames(r))!e.includes(n)&&!t.includes(n)&&!Hn.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(hr):[hr]},r}var hr={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},Hn=["resourceType","id","meta"];function yr(r){return r==="*"?Number.POSITIVE_INFINITY:Number.parseInt(r,10)}function yt(r,e=""){return Qn(r.path,e)}function Qn(r,e){return r?e&&r.startsWith(e)?r.substring(e.length+1):r:""}function ee(r,e){return!r||!e?!1:e.startsWith(r+".")||e===r}function gr(r){return Array.isArray(r)&&r.length>0?r[0]:b(r)?void 0:r}function Wn(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")}var u={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 Ds(r){for(let e of r.entry){let t=e.resource;t.resourceType==="SearchParameter"&&St(t)}}function St(r){for(let e of r.base??[]){let t=I.types[e];t||(t={searchParamsDetails:{}},I.types[e]=t),t.searchParams||(t.searchParams={_id:{base:[e],code:"_id",type:"token",expression:e+".id"},_lastUpdated:{base:[e],code:"_lastUpdated",type:"date",expression:e+".meta.lastUpdated"},_compartment:{base:[e],code:"_compartment",type:"reference",expression:e+".meta.compartment"},_profile:{base:[e],code:"_profile",type:"uri",expression:e+".meta.profile"},_security:{base:[e],code:"_security",type:"token",expression:e+".meta.security"},_source:{base:[e],code:"_source",type:"uri",expression:e+".meta.source"},_tag:{base:[e],code:"_tag",type:"token",expression:e+".meta.tag"}}),t.searchParams[r.code]=r}}function xt(r){let e=r.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?Gn((r.base?.path??r.path)?.split(".")):e}function Gn(r){return r.length===1?r[0]:r.map(A).join("")}function vt(r){return r.kind==="resource"&&r.name!=="Resource"&&r.name!=="DomainResource"}function Vs(){return Object.values(Tr()).filter(vt).map(r=>r.name)}function _s(r){return I.types[r]?.searchParams}function Us(r,e){return I.types[r]?.searchParams?.[e]}function Ls(r){return r.replaceAll("[x]","").split(".").pop().split(/(?=[A-Z])/).map(zn).join(" ").replace("_"," ").replace(/\s+/g," ")}var Kn=new Set(["ID","IP","PKCE","JWKS","URI","URL"]);function zn(r){let e=r.toUpperCase();return Kn.has(e)?e:e.charAt(0)+r.slice(1)}function Ae(r,e){let t=Sr(r);if(t)return t.elements[e]??t.elements[e+"[x]"]}function _(r){return!!(r&&typeof r=="object"&&"resourceType"in r)}function Er(r){return!!(r&&typeof r=="object"&&"reference"in r)}var I={types:{}};function Ar(r){switch(r.type){case u.uuid:case u.uri:case u.url:case u.string:case u.oid:case u.markdown:case u.id:case u.code:case u.canonical:case u.base64Binary:case u.SystemString:case u.date:case u.dateTime:case u.instant:return r.value;case u.Identifier:return`${r.value.system??""}|${r.value.value}`;case u.Coding:return Rr(r.value);case u.CodeableConcept:return r.value.coding?.map(Rr).join(",")??r.value.text;case u.HumanName:return r.value.text?r.value.text:be(r.value);case u.unsignedInt:case u.positiveInt:case u.integer:case u.decimal:return r.value.toString();case u.boolean:return r.value?"true":"false";case u.Extension:return r.value.url;case u.ContactPoint:return r.value.value;case u.Quantity:case u.Age:case u.Count:case u.Duration:return`${r.value.value}|${r.value.system??""}|${r.value.code??r.value.unit??""}`;case u.Reference:return r.value.reference;default:return _(r.value)?K(r.value).reference:JSON.stringify(r)}}function Rr(r){return r?`${r.system??""}|${r.code}`:""}var Pe=class{constructor(e,t){this.operator=e;this.child=t}toString(){return`${this.operator}(${this.child.toString()})`}},H=class{constructor(e,t,n){this.operator=e;this.left=t;this.right=n}toString(){return`${this.left.toString()} ${this.operator} ${this.right.toString()}`}},Ce=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 bt(e,this.prefixParselets,this.infixParselets)}},bt=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}" 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]}};function re(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 se=()=>[],S={empty:(r,e)=>l(e.length===0),exists:(r,e,t)=>t?l(e.filter(n=>N(t.eval(r,[n]))).length>0):l(e.length>0),all:(r,e,t)=>l(e.every(n=>N(t.eval(r,[n])))),allTrue:(r,e)=>{for(let t of e)if(!t.value)return l(!1);return l(!0)},anyTrue:(r,e)=>{for(let t of e)if(t.value)return l(!0);return l(!1)},allFalse:(r,e)=>{for(let t of e)if(t.value)return l(!1);return l(!0)},anyFalse:(r,e)=>{for(let t of e)if(!t.value)return l(!0);return l(!1)},subsetOf:se,supersetOf:se,count:(r,e)=>[{type:u.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)=>l(e.length===S.distinct(r,e).length),where:(r,e,t)=>e.filter(n=>N(t.eval(r,[n]))),select:(r,e,t)=>e.map(n=>t.eval(r,[n])).flat(),repeat:se,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,e),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,e),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,e);return Re([...e,...n])},combine:(r,e,t)=>{if(!t)return e;let n=t.eval(r,e);return[...e,...n]},htmlChecks:(r,e,t)=>[T(!0)],iif:(r,e,t,n,i)=>{let o=t.eval(r,e);if(o.length>1||o.length===1&&typeof o[0].value!="boolean")throw new Error("Expected criterion to evaluate to a Boolean");return N(o)?n.eval(r,e):i?i.eval(r,e):[]},toBoolean:(r,e)=>{if(e.length===0)return[];let[{value:t}]=L(e,1);if(typeof t=="boolean")return[{type:u.boolean,value:t}];if(typeof t=="number"&&(t===0||t===1))return l(!!t);if(typeof t=="string"){let n=t.toLowerCase();if(["true","t","yes","y","1","1.0"].includes(n))return l(!0);if(["false","f","no","n","0","0.0"].includes(n))return l(!1)}return[]},convertsToBoolean:(r,e)=>e.length===0?[]:l(S.toBoolean(r,e).length===1),toInteger:(r,e)=>{if(e.length===0)return[];let[{value:t}]=L(e,1);return typeof t=="number"?[{type:u.integer,value:t}]:typeof t=="string"&&/^[+-]?\d+$/.exec(t)?[{type:u.integer,value:parseInt(t,10)}]:typeof t=="boolean"?[{type:u.integer,value:t?1:0}]:[]},convertsToInteger:(r,e)=>e.length===0?[]:l(S.toInteger(r,e).length===1),toDate:(r,e)=>{if(e.length===0)return[];let[{value:t}]=L(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:u.date,value:re(t)}]:[]},convertsToDate:(r,e)=>e.length===0?[]:l(S.toDate(r,e).length===1),toDateTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=L(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:u.dateTime,value:re(t)}]:[]},convertsToDateTime:(r,e)=>e.length===0?[]:l(S.toDateTime(r,e).length===1),toDecimal:(r,e)=>{if(e.length===0)return[];let[{value:t}]=L(e,1);return typeof t=="number"?[{type:u.decimal,value:t}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(t)?[{type:u.decimal,value:parseFloat(t)}]:typeof t=="boolean"?[{type:u.decimal,value:t?1:0}]:[]},convertsToDecimal:(r,e)=>e.length===0?[]:l(S.toDecimal(r,e).length===1),toQuantity:(r,e)=>{if(e.length===0)return[];let[{value:t}]=L(e,1);return R(t)?[{type:u.Quantity,value:t}]:typeof t=="number"?[{type:u.Quantity,value:{value:t,unit:"1"}}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(t)?[{type:u.Quantity,value:{value:parseFloat(t),unit:"1"}}]:typeof t=="boolean"?[{type:u.Quantity,value:{value:t?1:0,unit:"1"}}]:[]},convertsToQuantity:(r,e)=>e.length===0?[]:l(S.toQuantity(r,e).length===1),toString:(r,e)=>{if(e.length===0)return[];let[{value:t}]=L(e,1);return t==null?[]:R(t)?[{type:u.string,value:`${t.value} '${t.unit}'`}]:[{type:u.string,value:t.toString()}]},convertsToString:(r,e)=>e.length===0?[]:l(S.toString(r,e).length===1),toTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=L(e,1);if(typeof t=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(t);if(n)return[{type:u.time,value:re("T"+n[1])}]}return[]},convertsToTime:(r,e)=>e.length===0?[]:l(S.toTime(r,e).length===1),indexOf:(r,e,t)=>P((n,i)=>n.indexOf(i),r,e,t),substring:(r,e,t,n)=>P((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)=>P((n,i)=>n.startsWith(i),r,e,t),endsWith:(r,e,t)=>P((n,i)=>n.endsWith(i),r,e,t),contains:(r,e,t)=>P((n,i)=>n.includes(i),r,e,t),upper:(r,e)=>P(t=>t.toUpperCase(),r,e),lower:(r,e)=>P(t=>t.toLowerCase(),r,e),replace:(r,e,t,n)=>P((i,o,s)=>i.replaceAll(o,s),r,e,t,n),matches:(r,e,t)=>P((n,i)=>!!new RegExp(i).exec(n),r,e,t),replaceMatches:(r,e,t,n)=>P((i,o,s)=>i.replaceAll(o,s),r,e,t,n),length:(r,e)=>P(t=>t.length,r,e),toChars:(r,e)=>P(t=>t?t.split(""):void 0,r,e),abs:(r,e)=>U(Math.abs,r,e),ceiling:(r,e)=>U(Math.ceil,r,e),exp:(r,e)=>U(Math.exp,r,e),floor:(r,e)=>U(Math.floor,r,e),ln:(r,e)=>U(Math.log,r,e),log:(r,e,t)=>U((n,i)=>Math.log(n)/Math.log(i),r,e,t),power:(r,e,t)=>U(Math.pow,r,e,t),round:(r,e)=>U(Math.round,r,e),sqrt:(r,e)=>U(Math.sqrt,r,e),truncate:(r,e)=>U(t=>t|0,r,e),children:se,descendants:se,trace:(r,e,t)=>(console.log("trace",e,t),e),now:()=>[{type:u.dateTime,value:new Date().toISOString()}],timeOfDay:()=>[{type:u.time,value:new Date().toISOString().substring(11)}],today:()=>[{type:u.date,value:new Date().toISOString().substring(0,10)}],between:(r,e,t,n,i)=>{let o=S.toDateTime(r,t.eval(r,e));if(o.length===0)throw new Error("Invalid start date");let s=S.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=ge(o[0].value,s[0].value);return[{type:u.Quantity,value:{value:c[a],unit:a}}]},is:(r,e,t)=>{let n="";return t instanceof M?n=t.name:t instanceof Q&&(n=t.left.name+"."+t.right.name),n?e.map(i=>({type:u.boolean,value:Ee(i,n)})):[]},not:(r,e)=>S.toBoolean(r,e).map(t=>({type:u.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 T(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:u.BackboneElement,value:void 0}}).filter(t=>!!t.value),as:(r,e)=>e,type:(r,e)=>e.map(({value:t})=>typeof t=="boolean"?{type:u.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof t=="number"?{type:u.BackboneElement,value:{namespace:"System",name:"Integer"}}:_(t)?{type:u.BackboneElement,value:{namespace:"FHIR",name:t.resourceType}}:{type:u.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:u.boolean,value:o.value?.resourceType===i}))}};function P(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=L(t,1);if(typeof i!="string")throw new Error("String function cannot be called with non-string");let o=r(i,...n.map(s=>s?.eval(e,t)[0]?.value));return o===void 0?[]:Array.isArray(o)?o.map(T):[T(o)]}function U(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=L(t,1),o=R(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?u.Quantity:t[0].type,m=o?{...i,value:a}:a;return[{type:c,value:m}]}function L(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}var we=class{constructor(e,t){this.original=e;this.child=t}eval(e,t){try{return t.length>0?t.map(n=>this.child.eval(e,[n])).flat():this.child.eval(e,[])}catch(n){throw new Error(`FhirPathError on "${this.original}": ${n}`)}}toString(){return this.child.toString()}},k=class{constructor(e){this.value=e}eval(){return[this.value]}toString(){let e=this.value.value;return typeof e=="string"?`'${e}'`:e.toString()}},M=class{constructor(e){this.name=e}eval(e,t){if(this.name==="$this")return t;if(this.name.startsWith("%")){let n=e.variables[this.name.slice(1)];if(!n)throw new Error(`Undefined variable ${this.name}`);return[n]}return t.flatMap(n=>this.evalValue(n)).filter(n=>n?.value!==void 0)}evalValue(e){let t=e.value;if(!(!t||typeof t!="object"))return _(t)&&t.resourceType===this.name?e:w(e,this.name)}toString(){return this.name}},Ie=class{eval(){return[]}toString(){return"{}"}},ke=class extends Pe{constructor(t,n,i){super(t,n);this.impl=i}eval(t,n){return this.impl(this.child.eval(t,n))}toString(){return this.operator+this.child.toString()}},J=class extends H{constructor(e,t){super("as",e,t)}eval(e,t){return S.ofType(e,this.left.eval(e,t),this.right)}},v=class extends H{},E=class extends v{constructor(t,n,i,o){super(t,n,i);this.impl=o}eval(t,n){let i=this.left.eval(t,n);if(i.length!==1)return[];let o=this.right.eval(t,n);if(o.length!==1)return[];let s=i[0].value,a=o[0].value,c=R(s)?s.value:s,m=R(a)?a.value:a,p=this.impl(c,m);return typeof p=="boolean"?l(p):R(s)?[{type:u.Quantity,value:{...s,value:p}}]:[T(p)]}},Oe=class extends H{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:u.string,value:o.map(s=>s.value).join("")}]:o}},De=class extends v{constructor(e,t){super("contains",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return l(n.some(o=>o.value===i[0].value))}},Ve=class extends v{constructor(e,t){super("in",e,t)}eval(e,t){let n=V(this.left.eval(e,t)),i=this.right.eval(e,t);return n?l(i.some(o=>o.value===n.value)):[]}},Q=class extends H{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()}`}},ne=class extends H{constructor(e,t){super("|",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Re([...n,...i])}},_e=class extends v{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)}},Ue=class extends v{constructor(e,t){super("!=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return pt(ft(n,i))}},Le=class extends v{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)}},Fe=class extends v{constructor(e,t){super("!~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return pt(mt(n,i))}},Y=class extends v{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 l(Ee(n[0],i))}},Ne=class extends v{constructor(e,t){super("and",e,t)}eval(e,t){let n=V(this.left.eval(e,t),"boolean"),i=V(this.right.eval(e,t),"boolean");return n?.value===!0&&i?.value===!0?l(!0):n?.value===!1||i?.value===!1?l(!1):[]}},Me=class extends v{constructor(e,t){super("or",e,t)}eval(e,t){let n=V(this.left.eval(e,t),"boolean"),i=V(this.right.eval(e,t),"boolean");return n?.value===!1&&i?.value===!1?l(!1):n?.value||i?.value?l(!0):[]}},Be=class extends v{constructor(e,t){super("xor",e,t)}eval(e,t){let n=V(this.left.eval(e,t),"boolean"),i=V(this.right.eval(e,t),"boolean");return!n||!i?[]:l(n.value!==i.value)}},qe=class extends v{constructor(e,t){super("implies",e,t)}eval(e,t){let n=V(this.left.eval(e,t),"boolean"),i=V(this.right.eval(e,t),"boolean");return i?.value===!0||n?.value===!1?l(!0):!n||!i?[]:l(!1)}},B=class{constructor(e,t){this.name=e;this.args=t}eval(e,t){let n=S[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(", ")})`}},X=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 Jn=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],W=class{constructor(e,t,n,i){this.result=[];this.pos={index:0,line:1,column:0};this.markStack=[];this.str=e,this.keywords=t,this.operators=n,this.dateTimeLiterals=!!i?.dateTimeLiterals,this.symbolRegex=i?.symbolRegex??/[$\w%]/}tokenize(){for(;this.pos.index<this.str.length;){let e=this.consumeToken();e&&this.result.push(e)}return this.result}prevToken(){return this.result.slice(-1)[0]}peekToken(){this.mark();let e=this.consumeToken();return this.reset(),e}consumeToken(){this.consumeWhitespace();let e=this.curr();if(!e)return;this.mark();let t=this.peek();return e==="/"&&t==="*"?this.consumeMultiLineComment():e==="/"&&t==="/"?this.consumeSingleLineComment():e==="'"||e==='"'?this.consumeString(e):e==="`"?this.consumeBacktickSymbol():e==="@"?this.consumeDateTime():/\d/.exec(e)?this.consumeNumber():/\w/.exec(e)?this.consumeSymbol():(e==="$"||e==="%")&&/\w/.exec(t)?this.consumeSymbol():this.consumeOperator()}consumeWhitespace(){this.consumeWhile(()=>/\s/.exec(this.curr()))}consumeMultiLineComment(){let e=this.pos.index;return this.consumeWhile(()=>this.curr()!=="*"||this.peek()!=="/"),this.advance(),this.advance(),this.buildToken("Comment",this.str.substring(e,this.pos.index))}consumeSingleLineComment(){return this.buildToken("Comment",this.consumeWhile(()=>this.curr()!==`
|
|
1
|
+
var he=class{constructor(e,t){this.operator=e;this.child=t}toString(){return`${this.operator}(${this.child.toString()})`}},$=class{constructor(e,t,n){this.operator=e;this.left=t;this.right=n}toString(){return`${this.left.toString()} ${this.operator} ${this.right.toString()}`}},ye=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 et(e,this.prefixParselets,this.infixParselets)}},et=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}" 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]}};function K(r){let e=$t(r),t=ln(r);return t===e?{reference:e}:{reference:e,display:t}}function $t(r){return r.resourceType+"/"+r.id}function So(r){return r?.reference?.split("/")[1]}function bo(r){if(r?.reference===void 0)return;let[e,t]=r.reference.split("/");if(!(e===""||t===""||t===void 0))return[e,t]}function un(r){return r.resourceType==="Patient"||r.resourceType==="Practitioner"||r.resourceType==="RelatedPerson"}function ln(r){if(un(r)){let e=dn(r);if(e)return e}if(r.resourceType==="Device"){let e=pn(r);if(e)return e}return r.resourceType==="Observation"&&"code"in r&&r.code?.text?r.code.text:r.resourceType==="User"&&r.email?r.email:"name"in r&&r.name&&typeof r.name=="string"?r.name:$t(r)}function dn(r){let e=r.name;if(e&&e.length>0)return be(e[0])}function pn(r){let e=r.deviceName;if(e&&e.length>0)return e[0].name}function Ro(r){if(!("photo"in r))return;let e=r.photo;if(e)if(Array.isArray(e))for(let t of e){let n=qt(t);if(n)return n}else return qt(e)}function qt(r){if(r.url&&r.contentType&&r.contentType.startsWith("image/"))return r.url}function Eo(r){return r?new Date(r):void 0}function ge(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(),m=n.getUTCDate(),p=a-i;(c<o||c===o&&m<s)&&p--;let q=a*12+c-(i*12+o);m<s&&q--;let cn=Math.floor((n.getTime()-t.getTime())/(1e3*60*60*24));return{years:p,months:q,days:cn}}function Ao(r,e){let{years:t,months:n,days:i}=ge(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 Po(r){let e={};return jt(r.item,e),e}function jt(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer[0]),jt(t.item,e)}function Co(r){let e={};return Ht(r.item,e),e}function Ht(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer),Ht(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 Io(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 ko(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?.valueString}function Oo(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 Qt(r,e){return JSON.stringify(r,fn,e?2:void 0)}function fn(r,e){return!mn(r)&&b(e)?void 0:e}function mn(r){return!!/\d+$/.exec(r)}function b(r){if(r==null)return!0;let e=typeof r;return e==="string"&&r===""||e==="object"&&Object.keys(r).length===0}function xe(r,e,t){return r===e||b(r)&&b(e)?!0:b(r)||b(e)?!1:Array.isArray(r)&&Array.isArray(e)?hn(r,e):Array.isArray(r)||Array.isArray(e)?!1:j(r)&&j(e)?yn(r,e,t):(j(r)||j(e),!1)}function hn(r,e){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(!xe(r[t],e[t]))return!1;return!0}function yn(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(!xe(o,s,i))return!1}return!0}function Te(r,e){return b(r)?!0:b(e)?!1:Array.isArray(r)&&Array.isArray(e)?gn(r,e):Array.isArray(r)||Array.isArray(e)?!1:j(r)&&j(e)?xn(r,e):j(r)||j(e)?!1:r===e}function gn(r,e){return r.every(t=>e.some(n=>Te(t,n)))}function xn(r,e){return Object.entries(r).every(([t,n])=>t in e&&Te(n,e[t]))}function rt(r){return JSON.parse(JSON.stringify(r))}function Do(r){return!!/^\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/i.exec(r)}function j(r){return r!==null&&typeof r=="object"}function Wt(r){return r.every(e=>typeof e=="string")}var Gt=[];for(let r=0;r<256;r++)Gt.push(r.toString(16).padStart(2,"0"));function Kt(r){let e=new Uint8Array(r),t=new Array(e.length);for(let n=0;n<e.length;n++)t[n]=Gt[e[n]];return t.join("")}function zt(r){let e=new Uint8Array(r),t=[];for(let n=0;n<e.length;n++)t[n]=String.fromCharCode(e[n]);return window.btoa(t.join(""))}function A(r){return r.charAt(0).toUpperCase()+r.substring(1)}function ve(r){return r===r.toLowerCase()&&r!==r.toUpperCase()}function tt(r,e){return r.coding?.find(t=>t.system===e)?.code}function Vo(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 _o(r,e,t,n){return r.qualifiedInterval?.find(i=>Jt(i,e)&&Sn(i,t,r.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function Uo(r,e,t){return r.qualifiedInterval?.find(n=>Jt(n,e)&&t.includes(n.condition))}function Jt(r,e){return Tn(r,e)&&vn(r,e)}function Tn(r,e){return!r.gender||r.gender===e.gender}function vn(r,e){return!r.age||Yt(ge(e.birthDate).years,r.age)}function Sn(r,e,t){return!!r.range&&Yt(e,r.range,t)}function Yt(r,e,t){return(e.low?.value===void 0||Rn(r,e.low.value,t))&&(e.high?.value===void 0||bn(r,e.high.value,t))}function Lo(r,e){return parseFloat(r.toFixed(e))}function Fo(r,e,t){return O(r,t)===O(e,t)}function No(r,e,t){return O(r,t)<O(e,t)}function Mo(r,e,t){return O(r,t)>O(e,t)}function bn(r,e,t){return O(r,t)<=O(e,t)}function Rn(r,e,t){return O(r,t)>=O(e,t)}function O(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}function Bo(r,e,t){return r.find(n=>typeof e=="string"?tt(n.code||{},t)===e:tt(n.code||{},t)===tt(e,t))}function Se(r){if(r)return Array.isArray(r)?r:[r]}var nt=r=>new Promise(e=>{setTimeout(e,r)});function jo(r,e){let t=[];if(r.line&&t.push(...r.line),r.city||r.state||r.postalCode){let n=[];r.city&&n.push(r.city),r.state&&n.push(r.state),r.postalCode&&n.push(r.postalCode),t.push(n.join(", "))}return r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.join(e?.lineSeparator??", ").trim()}function be(r,e){let t=[];return 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&&r.text?r.text:t.join(" ").trim()}function Ho(r){let e=[];return r.given&&e.push(...r.given),e.join(" ").trim()}function Qo(r){return r.family??""}function ot(r){return r instanceof Date&&!isNaN(r.getTime())}function Wo(r,e,t){if(!r)return"";let n=new Date(r);return ot(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...t})):""}function En(r,e,t){if(!r)return"";let n=new Date("2000-01-01T"+r+"Z");return ot(n)?n.toLocaleTimeString(e,t):""}function it(r,e,t){if(!r)return"";let n=new Date(r);return ot(n)?n.toLocaleString(e,t):""}function Go(r,e,t){return!r||!r.start&&!r.end?"":it(r.start,e,t)+" - "+it(r.end,e,t)}var An={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},Pn={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},Cn={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function Ko(r){if(!r)return"";let e=[];return wn(e,r.repeat),r.event&&e.push(r.event.map(t=>it(t)).join(", ")),A(e.join(" ").trim())}function wn(r,e){if(!e?.periodUnit)return;let t=e.frequency??1,n=e.period??1,i=e.periodUnit;t===1&&n===1?r.push(An[i]):(t===1?r.push("once"):r.push(t+" times"),n===1?r.push("per "+Pn[i]):r.push("per "+n+" "+Cn[i])),e.dayOfWeek&&r.push("on "+e.dayOfWeek.map(A).join(", ")),e.timeOfDay&&r.push("at "+e.timeOfDay.map(o=>En(o)).join(", "))}function zo(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=Vn(n.value,e),`> ${z(n,e)}`):`>= ${z(n,e)}`:n?.value===void 0&&i?.value!==void 0?t&&e!==void 0?(i.value=Dn(i.value,e),`< ${z(i,e)}`):`<= ${z(i,e)}`:(n?.unit===i?.unit&&delete n?.unit,`${z(n,e)} - ${z(i,e)}`)}function z(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 Jo(r){return r?.value===void 0?"":r.value.toLocaleString(void 0,{style:"currency",currency:r.currency??"USD",currencyDisplay:"narrowSymbol"})}function In(r){return r?r.text?r.text:r.coding?r.coding.map(e=>kn(e)).join(", "):"":""}function kn(r){return r?.display??r?.code??""}function On(r){return r?"component"in r?r.component.map(e=>On(e)).join(" / "):r.valueQuantity?z(r.valueQuantity):r.valueCodeableConcept?In(r.valueCodeableConcept):r.valueString?r.valueString:"":""}function Dn(r,e,t=1){return(Xt(r,e)+t)*Math.pow(10,-e)}function Vn(r,e,t=1){return(Xt(r,e)-t)*Math.pow(10,-e)}function Xt(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}var _n={"http://hl7.org/fhirpath/System.String":"string"};function Xo(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:_n[t.code]??t.code})),e}function Un(r){let e=r.max&&r.max===Number.MAX_SAFE_INTEGER?Number.POSITIVE_INFINITY:r.max;return{path:"",description:"",type:r.type??[],min:r.min??0,max:e??1,isArray:!!e&&e>1,constraints:[]}}function Zt(r){let e=Object.create(null);for(let[t,n]of Object.entries(r))e[t]={name:t,elements:Object.fromEntries(Object.entries(n.elements).map(([i,o])=>[i,Un(o)])),constraints:[],innerTypes:[]};return e}var er={Element:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]}}},BackboneElement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]}}},Address:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"code"}]},text:{type:[{code:"string"}]},line:{max:9007199254740991,type:[{code:"string"}]},city:{type:[{code:"string"}]},district:{type:[{code:"string"}]},state:{type:[{code:"string"}]},postalCode:{type:[{code:"string"}]},country:{type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Age:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Annotation:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"author[x]":{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Organization"]},{code:"string"}]},time:{type:[{code:"dateTime"}]},text:{min:1,type:[{code:"markdown"}]}}},Attachment:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},contentType:{type:[{code:"code"}]},language:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]},url:{type:[{code:"url"}]},size:{type:[{code:"unsignedInt"}]},hash:{type:[{code:"base64Binary"}]},title:{type:[{code:"string"}]},creation:{type:[{code:"dateTime"}]}}},CodeableConcept:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},coding:{max:9007199254740991,type:[{code:"Coding"}]},text:{type:[{code:"string"}]}}},Coding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"uri"}]},version:{type:[{code:"string"}]},code:{type:[{code:"code"}]},display:{type:[{code:"string"}]},userSelected:{type:[{code:"boolean"}]}}},ContactDetail:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"string"}]},telecom:{max:9007199254740991,type:[{code:"ContactPoint"}]}}},ContactPoint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"code"}]},value:{type:[{code:"string"}]},use:{type:[{code:"code"}]},rank:{type:[{code:"positiveInt"}]},period:{type:[{code:"Period"}]}}},Contributor:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{min:1,type:[{code:"string"}]},contact:{max:9007199254740991,type:[{code:"ContactDetail"}]}}},Count:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},DataRequirement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},"subject[x]":{type:[{code:"CodeableConcept"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Group"]}]},mustSupport:{max:9007199254740991,type:[{code:"string"}]},codeFilter:{max:9007199254740991,type:[{code:"DataRequirementCodeFilter"}]},dateFilter:{max:9007199254740991,type:[{code:"DataRequirementDateFilter"}]},limit:{type:[{code:"positiveInt"}]},sort:{max:9007199254740991,type:[{code:"DataRequirementSort"}]}}},Distance:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Dosage:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},sequence:{type:[{code:"integer"}]},text:{type:[{code:"string"}]},additionalInstruction:{max:9007199254740991,type:[{code:"CodeableConcept"}]},patientInstruction:{type:[{code:"string"}]},timing:{type:[{code:"Timing"}]},"asNeeded[x]":{type:[{code:"boolean"},{code:"CodeableConcept"}]},site:{type:[{code:"CodeableConcept"}]},route:{type:[{code:"CodeableConcept"}]},method:{type:[{code:"CodeableConcept"}]},doseAndRate:{max:9007199254740991,type:[{code:"DosageDoseAndRate"}]},maxDosePerPeriod:{type:[{code:"Ratio"}]},maxDosePerAdministration:{type:[{code:"Quantity"}]},maxDosePerLifetime:{type:[{code:"Quantity"}]}}},Duration:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},ElementDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},representation:{max:9007199254740991,type:[{code:"code"}]},sliceName:{type:[{code:"string"}]},sliceIsConstraining:{type:[{code:"boolean"}]},label:{type:[{code:"string"}]},code:{max:9007199254740991,type:[{code:"Coding"}]},slicing:{type:[{code:"ElementDefinitionSlicing"}]},short:{type:[{code:"string"}]},definition:{type:[{code:"markdown"}]},comment:{type:[{code:"markdown"}]},requirements:{type:[{code:"markdown"}]},alias:{max:9007199254740991,type:[{code:"string"}]},min:{type:[{code:"unsignedInt"}]},max:{type:[{code:"string"}]},base:{type:[{code:"ElementDefinitionBase"}]},contentReference:{type:[{code:"uri"}]},type:{max:9007199254740991,type:[{code:"ElementDefinitionType"}]},"defaultValue[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},meaningWhenMissing:{type:[{code:"markdown"}]},orderMeaning:{type:[{code:"string"}]},"fixed[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},"pattern[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},example:{max:9007199254740991,type:[{code:"ElementDefinitionExample"}]},"minValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},"maxValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},maxLength:{type:[{code:"integer"}]},condition:{max:9007199254740991,type:[{code:"id"}]},constraint:{max:9007199254740991,type:[{code:"ElementDefinitionConstraint"}]},mustSupport:{type:[{code:"boolean"}]},isModifier:{type:[{code:"boolean"}]},isModifierReason:{type:[{code:"string"}]},isSummary:{type:[{code:"boolean"}]},binding:{type:[{code:"ElementDefinitionBinding"}]},mapping:{max:9007199254740991,type:[{code:"ElementDefinitionMapping"}]}}},Expression:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},description:{type:[{code:"string"}]},name:{type:[{code:"id"}]},language:{min:1,type:[{code:"code"}]},expression:{type:[{code:"string"}]},reference:{type:[{code:"uri"}]}}},Extension:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},url:{min:1,type:[{code:"string"}]},"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"}]},account:{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"}]},high:{type:[{code:"Quantity"}]}}},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"}]},period:{min:1,type:[{code:"decimal"}]},factor:{type:[{code:"decimal"}]},lowerLimit:{type:[{code:"decimal"}]},upperLimit:{type:[{code:"decimal"}]},dimensions:{min:1,type:[{code:"positiveInt"}]},data:{type:[{code:"string"}]}}},Signature:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,max:9007199254740991,type:[{code:"Coding"}]},when:{min:1,type:[{code:"instant"}]},who:{min:1,type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},onBehalfOf:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},targetFormat:{type:[{code:"code"}]},sigFormat:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]}}},SubstanceAmount:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"amount[x]":{type:[{code:"Quantity"},{code:"Range"},{code:"string"}]},amountType:{type:[{code:"CodeableConcept"}]},amountText:{type:[{code:"string"}]},referenceRange:{type:[{code:"SubstanceAmountReferenceRange"}]}}},Timing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},event:{max:9007199254740991,type:[{code:"dateTime"}]},repeat:{type:[{code:"TimingRepeat"}]},code:{type:[{code:"CodeableConcept"}]}}},TriggerDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{type:[{code:"string"}]},"timing[x]":{type:[{code:"Timing"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Schedule"]},{code:"date"},{code:"dateTime"}]},data:{max:9007199254740991,type:[{code:"DataRequirement"}]},condition:{type:[{code:"Expression"}]}}},UsageContext:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"Coding"}]},"value[x]":{min:1,type:[{code:"CodeableConcept"},{code:"Quantity"},{code:"Range"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/PlanDefinition","http://hl7.org/fhir/StructureDefinition/ResearchStudy","http://hl7.org/fhir/StructureDefinition/InsurancePlan","http://hl7.org/fhir/StructureDefinition/HealthcareService","http://hl7.org/fhir/StructureDefinition/Group","http://hl7.org/fhir/StructureDefinition/Location","http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MoneyQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},SimpleQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{max:0,type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},MetadataResource:{elements:{id:{type:[{code:"string"}]},meta:{type:[{code:"Meta"}]},implicitRules:{type:[{code:"uri"}]},language:{type:[{code:"code"}]},text:{type:[{code:"Narrative"}]},contained:{max:9007199254740991,type:[{code:"Resource"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},url:{type:[{code:"uri"}]},version:{type:[{code:"string"}]},name:{type:[{code:"string"}]},title:{type:[{code:"string"}]},status:{min:1,type:[{code:"code"}]},experimental:{type:[{code:"boolean"}]},date:{type:[{code:"dateTime"}]},publisher:{type:[{code:"string"}]},contact:{max:9007199254740991,type:[{code:"ContactDetail"}]},description:{type:[{code:"markdown"}]},useContext:{max:9007199254740991,type:[{code:"UsageContext"}]},jurisdiction:{max:9007199254740991,type:[{code:"CodeableConcept"}]}}},IdentityProvider:{elements:{authorizeUrl:{min:1,type:[{code:"string"}]},tokenUrl:{min:1,type:[{code:"string"}]},userInfoUrl:{min:1,type:[{code:"string"}]},clientId:{min:1,type:[{code:"string"}]},clientSecret:{min:1,type:[{code:"string"}]},useSubject:{type:[{code:"boolean"}]}}}};function l(r){return[{type:u.boolean,value:r}]}function T(r){return r==null?{type:"undefined",value:void 0}:Number.isSafeInteger(r)?{type:u.integer,value:r}:typeof r=="number"?{type:u.decimal,value:r}:typeof r=="boolean"?{type:u.boolean,value:r}:typeof r=="string"?{type:u.string,value:r}:R(r)?{type:u.Quantity,value:r}:V(r)?{type:r.resourceType,value:r}:{type:u.BackboneElement,value:r}}function N(r){return r.length===0?!1:!!r[0].value}function D(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 w(r,e){if(!r.value)return;let t=Ae(r.type,e);return t?Fn(r,e,t):Nn(r,e)}function Fn(r,e,t){let n=t.type;if(!n||n.length===0)return;let i,o="undefined";if(n.length===1)i=r.value[e],o=n[0].code;else for(let a of n){let c=e.replace("[x]","")+A(a.code);if(c in r.value){i=r.value[c],o=a.code;break}}let s=r.value["_"+e];if(s&&(Array.isArray(i)?i=i.map((a,c)=>s[c]?ir(a??{},s[c]):a):i=ir(i??{},s)),!b(i))return(o==="Element"||o==="BackboneElement")&&(o=t.type[0].code),Array.isArray(i)?i.map(a=>tr(a,o)):tr(i,o)}function tr(r,e){return e==="Resource"&&V(r)&&(e=r.resourceType),{type:e,value:r}}function Nn(r,e){let t=r.value;if(!t||typeof t!="object")return;let n;if(e in t)n=t[e];else for(let i in u){let o=e+A(i);if(o in t){n=t[o];break}}if(!b(n))return Array.isArray(n)?n.map(T):T(n)}function Re(r){let e=[];for(let t of r){let n=!1;for(let i of e)if(N(or(t,i))){n=!0;break}n||e.push(t)}return e}function st(r){return l(!N(r))}function at(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?l(!1):l(r.every((t,n)=>N(or(t,e[n]))))}function or(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?l(Math.abs(t-n)<1e-8):R(t)&&R(n)?l(sr(t,n)):l(typeof t=="object"&&typeof n=="object"?ut(r,e):t===n)}function ct(r,e){return r.length===0&&e.length===0?l(!0):r.length!==e.length?l(!1):(r.sort(rr),e.sort(rr),l(r.every((t,n)=>N(Mn(t,e[n])))))}function Mn(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"?l(Math.abs(s-a)<.01):R(s)&&R(a)?l(sr(s,a)):l(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"?ut({...s,id:void 0},{...a,id:void 0}):typeof s=="string"&&typeof a=="string"?s.toLowerCase()===a.toLowerCase():s===a)}function rr(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 Ee(r,e){let{value:t}=r;if(t==null)return!1;switch(e){case"Boolean":return typeof t=="boolean";case"Decimal":case"Integer":return typeof t=="number";case"Date":return typeof t=="string"&&!!/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t);case"DateTime":return typeof t=="string"&&!!/^\d{4}(-\d{2}(-\d{2})?)?T/.exec(t);case"Time":return typeof t=="string"&&!!/^T\d/.exec(t);case"Period":return Bn(t);case"Quantity":return R(t);default:return typeof t=="object"&&t?.resourceType===e}}function Bn(r){return!!(r&&typeof r=="object"&&"start"in r)}function R(r){return!!(r&&typeof r=="object"&&"value"in r&&typeof r.value=="number")}function sr(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 ut(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(nr(o)&&nr(s)){if(!ut(o,s))return!1}else if(o!==s)return!1}return!0}function nr(r){return r!==null&&typeof r=="object"}function ir(r,e){return delete e.__proto__,delete e.constructor,Object.assign(r,e)}var lt="ok",Pe="created",dt="gone",pt="not-modified",ft="not-found",ar="unauthorized",cr="forbidden",ur="too-many-requests",Ce="accepted",os={resourceType:"OperationOutcome",id:lt,issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},ss={resourceType:"OperationOutcome",id:Pe,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},as={resourceType:"OperationOutcome",id:pt,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},lr={resourceType:"OperationOutcome",id:ft,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},cs={resourceType:"OperationOutcome",id:ar,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},us={resourceType:"OperationOutcome",id:cr,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},ls={resourceType:"OperationOutcome",id:dt,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},ds={resourceType:"OperationOutcome",id:ur,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function ps(r){return{resourceType:"OperationOutcome",id:Ce,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:r}]}}function _(r,e){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:r},expression:e?[e]:void 0}]}}function h(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"structure",details:{text:r}}]}}function dr(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:r.toString()}]}}function we(r){return typeof r=="object"&&r!==null&&r.resourceType==="OperationOutcome"}function mt(r){return r.id===lt||r.id===Pe||r.id===pt||r.id===Ce}function fs(r){return r.id===Pe}function ms(r){return r.id===Ce}function hs(r){return r.id===ft}function ys(r){return r.id===dt}function gs(r){return r.id===lt?200:r.id===Pe?201:r.id===Ce?202:r.id===pt?304:r.id===ar?401:r.id===cr?403:r.id===ft?404:r.id===dt?410:r.id===ur?429:400}function xs(r,e){if(!mt(r)||e===void 0)throw new d(r)}var d=class extends Error{constructor(t,n){super(pr(t));this.outcome=t,this.cause=n}};function ht(r){return r instanceof d?r.outcome:we(r)?r:_(qn(r))}function qn(r){return r?typeof r=="string"?r:r instanceof Error?r.message:we(r)?pr(r):typeof r=="object"&&"code"in r&&typeof r.code=="string"?r.code:JSON.stringify(r):"Unknown error"}function pr(r){let e=r.issue?.map($n)??[];return e.length>0?e.join("; "):"Unknown error"}function $n(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 yt(r,e,t,n){let i={severity:"error",code:r,details:{text:e},expression:[t]};return n&&(i.diagnostics=JSON.stringify(n)),i}function y(r,e){return yt("structure",e,r)}function fr(r,e){return yt("invariant",`Constraint ${e.key} not met: ${e.description}`,r,{fhirpath:e.expression})}function mr(r,e,t,n){return yt("processing",e,r,{...n,error:t})}function vt(r){return new xt(r).parse()}var H=Zt(er);function xr(r){let e=Array.isArray(r)?r:r.entry?.map(t=>t.resource)??[];for(let t of e)jn(t)}function jn(r){if(!r?.name)throw new Error("Failed loading StructureDefinition from bundle");if(r.resourceType!=="StructureDefinition")return;let e=vt(r);H[r.name]=e;for(let t of e.innerTypes)t.parentType=e,H[t.name]=t}function Tr(){return H}function vr(r){return!!H[r]}function Sr(r){return H[r]}function te(r){let e=H[r];if(!e)throw new d(dr(Error("Unknown data type: "+r)));return e}function br(r){let e=H[r];return e&&St(e)}var xt=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,url:e.url,kind:e.kind,description:e.description,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=gt(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[gt(e,n.path)]=t;break}n=n.parent}if(!n){let i=gt(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),e.slicing&&!this.slicingContext&&this.enterSlice(e,t)}enterInnerType(e){for(;this.backboneContext&&!ee(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;this.backboneContext={type:{name:Tt(e),description:e.definition,elements:{},constraints:this.parseElementDefinition(e).constraints,innerTypes:[]},path:e.path??"",parent:ee(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,t){Wn(e)&&!this.peek()?.sliceName||(t.slicing={discriminator:(e.slicing?.discriminator??[]).map(n=>{if(n.type!=="value"&&n.type!=="pattern"&&n.type!=="type")throw new Error(`Unsupported slicing discriminator type: ${n.type}`);return{path:n.path,type:n.type}}),slices:[],ordered:e.slicing?.ordered??!1,rule:e.slicing?.rules},this.slicingContext={field:t.slicing,path:e.path??""})}checkFieldExit(e=void 0){if(this.backboneContext&&!ee(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!ee(this.backboneContext.path,e?.path));else this.innerTypes.push(this.backboneContext.type),delete this.backboneContext;this.slicingContext&&!ee(this.slicingContext.path,e?.path)&&(this.slicingContext?.current&&this.slicingContext.field.slices.push(this.slicingContext.current),delete this.slicingContext)}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=this.elementIndex[e.contentReference.slice(e.contentReference.indexOf("#")+1)];return t?{...t,id:e.id,path:e.path,min:e.min??t.min,max:e.max??t.max,contentReference:e.contentReference,definition:e.definition}:void 0}return e}}isInnerType(e){let t=this.peek();return!!(ee(e?.path,t?.path)&&e.type?.some(n=>["BackboneElement","Element"].includes(n.code)))}parseSliceStart(e){if(!this.slicingContext)throw new Error("Invalid slice start before discriminator: "+e.sliceName);this.slicingContext.current&&this.slicingContext.field.slices.push(this.slicingContext.current),this.slicingContext.current={name:e.sliceName??"",type:e.type?.map(t=>({code:t.code??"",targetProfile:t.targetProfile})),elements:{},min:e.min??0,max:e.max==="*"?Number.POSITIVE_INFINITY:Number.parseInt(e.max,10)}}parseElementDefinition(e){let t=yr(e.max),n=e.base?.max?yr(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:(e.type??[]).map(o=>({code:["BackboneElement","Element"].includes(o.code)?Tt(e):o.code??"",targetProfile:o.targetProfile})),fixed:gr(w(i,"fixed")),pattern:gr(w(i,"pattern")),binding:e.binding}}};function Cs(r,e){if(!r)return;let t=[];for(let n of e){t.push("_"+n);let i=H[r.resourceType].elements[n+"[x]"];i&&t.push(...i.type.map(o=>n+A(o.code)))}for(let n of Object.getOwnPropertyNames(r))!e.includes(n)&&!t.includes(n)&&!Hn.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(hr):[hr]},r}var hr={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},Hn=["resourceType","id","meta"];function yr(r){return r==="*"?Number.POSITIVE_INFINITY:Number.parseInt(r,10)}function gt(r,e=""){return Qn(r.path,e)}function Qn(r,e){return r?e&&r.startsWith(e)?r.substring(e.length+1):r:""}function ee(r,e){return!r||!e?!1:e.startsWith(r+".")||e===r}function gr(r){return Array.isArray(r)&&r.length>0?r[0]:b(r)?void 0:r}function Wn(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")}var u={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 _s(r){for(let e of r.entry){let t=e.resource;t.resourceType==="SearchParameter"&&bt(t)}}function bt(r){for(let e of r.base??[]){let t=I.types[e];t||(t={searchParamsDetails:{}},I.types[e]=t),t.searchParams||(t.searchParams={_id:{base:[e],code:"_id",type:"token",expression:e+".id"},_lastUpdated:{base:[e],code:"_lastUpdated",type:"date",expression:e+".meta.lastUpdated"},_compartment:{base:[e],code:"_compartment",type:"reference",expression:e+".meta.compartment"},_profile:{base:[e],code:"_profile",type:"uri",expression:e+".meta.profile"},_security:{base:[e],code:"_security",type:"token",expression:e+".meta.security"},_source:{base:[e],code:"_source",type:"uri",expression:e+".meta.source"},_tag:{base:[e],code:"_tag",type:"token",expression:e+".meta.tag"}}),t.searchParams[r.code]=r}}function Tt(r){let e=r.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?Gn((r.base?.path??r.path)?.split(".")):e}function Gn(r){return r.length===1?r[0]:r.map(A).join("")}function St(r){return r.kind==="resource"&&r.name!=="Resource"&&r.name!=="DomainResource"}function Us(){return Object.values(Tr()).filter(St).map(r=>r.name)}function Ls(r){return I.types[r]?.searchParams}function Fs(r,e){return I.types[r]?.searchParams?.[e]}function Ns(r){return r.replaceAll("[x]","").split(".").pop().split(/(?=[A-Z])/).map(zn).join(" ").replace("_"," ").replace(/\s+/g," ")}var Kn=new Set(["ID","IP","PKCE","JWKS","URI","URL"]);function zn(r){let e=r.toUpperCase();return Kn.has(e)?e:e.charAt(0)+r.slice(1)}function Ae(r,e){let t=Sr(r);if(t)return t.elements[e]??t.elements[e+"[x]"]}function V(r){return!!(r&&typeof r=="object"&&"resourceType"in r)}function Er(r){return!!(r&&typeof r=="object"&&"reference"in r)}var I={types:{}};function Ar(r){switch(r.type){case u.uuid:case u.uri:case u.url:case u.string:case u.oid:case u.markdown:case u.id:case u.code:case u.canonical:case u.base64Binary:case u.SystemString:case u.date:case u.dateTime:case u.instant:return r.value;case u.Identifier:return`${r.value.system??""}|${r.value.value}`;case u.Coding:return Rr(r.value);case u.CodeableConcept:return r.value.coding?.map(Rr).join(",")??r.value.text;case u.HumanName:return r.value.text?r.value.text:be(r.value);case u.unsignedInt:case u.positiveInt:case u.integer:case u.decimal:return r.value.toString();case u.boolean:return r.value?"true":"false";case u.Extension:return r.value.url;case u.ContactPoint:return r.value.value;case u.Quantity:case u.Age:case u.Count:case u.Duration:return`${r.value.value}|${r.value.system??""}|${r.value.code??r.value.unit??""}`;case u.Reference:return r.value.reference;default:return V(r.value)?K(r.value).reference:JSON.stringify(r)}}function Rr(r){return r?`${r.system??""}|${r.code}`:""}function re(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 se=()=>[],S={empty:(r,e)=>l(e.length===0),exists:(r,e,t)=>t?l(e.filter(n=>N(t.eval(r,[n]))).length>0):l(e.length>0),all:(r,e,t)=>l(e.every(n=>N(t.eval(r,[n])))),allTrue:(r,e)=>{for(let t of e)if(!t.value)return l(!1);return l(!0)},anyTrue:(r,e)=>{for(let t of e)if(t.value)return l(!0);return l(!1)},allFalse:(r,e)=>{for(let t of e)if(t.value)return l(!1);return l(!0)},anyFalse:(r,e)=>{for(let t of e)if(!t.value)return l(!0);return l(!1)},subsetOf:se,supersetOf:se,count:(r,e)=>[{type:u.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)=>l(e.length===S.distinct(r,e).length),where:(r,e,t)=>e.filter(n=>N(t.eval(r,[n]))),select:(r,e,t)=>e.map(n=>t.eval(r,[n])).flat(),repeat:se,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,e),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,e),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,e);return Re([...e,...n])},combine:(r,e,t)=>{if(!t)return e;let n=t.eval(r,e);return[...e,...n]},htmlChecks:(r,e,t)=>[T(!0)],iif:(r,e,t,n,i)=>{let o=t.eval(r,e);if(o.length>1||o.length===1&&typeof o[0].value!="boolean")throw new Error("Expected criterion to evaluate to a Boolean");return N(o)?n.eval(r,e):i?i.eval(r,e):[]},toBoolean:(r,e)=>{if(e.length===0)return[];let[{value:t}]=L(e,1);if(typeof t=="boolean")return[{type:u.boolean,value:t}];if(typeof t=="number"&&(t===0||t===1))return l(!!t);if(typeof t=="string"){let n=t.toLowerCase();if(["true","t","yes","y","1","1.0"].includes(n))return l(!0);if(["false","f","no","n","0","0.0"].includes(n))return l(!1)}return[]},convertsToBoolean:(r,e)=>e.length===0?[]:l(S.toBoolean(r,e).length===1),toInteger:(r,e)=>{if(e.length===0)return[];let[{value:t}]=L(e,1);return typeof t=="number"?[{type:u.integer,value:t}]:typeof t=="string"&&/^[+-]?\d+$/.exec(t)?[{type:u.integer,value:parseInt(t,10)}]:typeof t=="boolean"?[{type:u.integer,value:t?1:0}]:[]},convertsToInteger:(r,e)=>e.length===0?[]:l(S.toInteger(r,e).length===1),toDate:(r,e)=>{if(e.length===0)return[];let[{value:t}]=L(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:u.date,value:re(t)}]:[]},convertsToDate:(r,e)=>e.length===0?[]:l(S.toDate(r,e).length===1),toDateTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=L(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:u.dateTime,value:re(t)}]:[]},convertsToDateTime:(r,e)=>e.length===0?[]:l(S.toDateTime(r,e).length===1),toDecimal:(r,e)=>{if(e.length===0)return[];let[{value:t}]=L(e,1);return typeof t=="number"?[{type:u.decimal,value:t}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(t)?[{type:u.decimal,value:parseFloat(t)}]:typeof t=="boolean"?[{type:u.decimal,value:t?1:0}]:[]},convertsToDecimal:(r,e)=>e.length===0?[]:l(S.toDecimal(r,e).length===1),toQuantity:(r,e)=>{if(e.length===0)return[];let[{value:t}]=L(e,1);return R(t)?[{type:u.Quantity,value:t}]:typeof t=="number"?[{type:u.Quantity,value:{value:t,unit:"1"}}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(t)?[{type:u.Quantity,value:{value:parseFloat(t),unit:"1"}}]:typeof t=="boolean"?[{type:u.Quantity,value:{value:t?1:0,unit:"1"}}]:[]},convertsToQuantity:(r,e)=>e.length===0?[]:l(S.toQuantity(r,e).length===1),toString:(r,e)=>{if(e.length===0)return[];let[{value:t}]=L(e,1);return t==null?[]:R(t)?[{type:u.string,value:`${t.value} '${t.unit}'`}]:[{type:u.string,value:t.toString()}]},convertsToString:(r,e)=>e.length===0?[]:l(S.toString(r,e).length===1),toTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=L(e,1);if(typeof t=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(t);if(n)return[{type:u.time,value:re("T"+n[1])}]}return[]},convertsToTime:(r,e)=>e.length===0?[]:l(S.toTime(r,e).length===1),indexOf:(r,e,t)=>P((n,i)=>n.indexOf(i),r,e,t),substring:(r,e,t,n)=>P((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)=>P((n,i)=>n.startsWith(i),r,e,t),endsWith:(r,e,t)=>P((n,i)=>n.endsWith(i),r,e,t),contains:(r,e,t)=>P((n,i)=>n.includes(i),r,e,t),upper:(r,e)=>P(t=>t.toUpperCase(),r,e),lower:(r,e)=>P(t=>t.toLowerCase(),r,e),replace:(r,e,t,n)=>P((i,o,s)=>i.replaceAll(o,s),r,e,t,n),matches:(r,e,t)=>P((n,i)=>!!new RegExp(i).exec(n),r,e,t),replaceMatches:(r,e,t,n)=>P((i,o,s)=>i.replaceAll(o,s),r,e,t,n),length:(r,e)=>P(t=>t.length,r,e),toChars:(r,e)=>P(t=>t?t.split(""):void 0,r,e),abs:(r,e)=>U(Math.abs,r,e),ceiling:(r,e)=>U(Math.ceil,r,e),exp:(r,e)=>U(Math.exp,r,e),floor:(r,e)=>U(Math.floor,r,e),ln:(r,e)=>U(Math.log,r,e),log:(r,e,t)=>U((n,i)=>Math.log(n)/Math.log(i),r,e,t),power:(r,e,t)=>U(Math.pow,r,e,t),round:(r,e)=>U(Math.round,r,e),sqrt:(r,e)=>U(Math.sqrt,r,e),truncate:(r,e)=>U(t=>t|0,r,e),children:se,descendants:se,trace:(r,e,t)=>(console.log("trace",e,t),e),now:()=>[{type:u.dateTime,value:new Date().toISOString()}],timeOfDay:()=>[{type:u.time,value:new Date().toISOString().substring(11)}],today:()=>[{type:u.date,value:new Date().toISOString().substring(0,10)}],between:(r,e,t,n,i)=>{let o=S.toDateTime(r,t.eval(r,e));if(o.length===0)throw new Error("Invalid start date");let s=S.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=ge(o[0].value,s[0].value);return[{type:u.Quantity,value:{value:c[a],unit:a}}]},is:(r,e,t)=>{let n="";return t instanceof M?n=t.name:t instanceof Q&&(n=t.left.name+"."+t.right.name),n?e.map(i=>({type:u.boolean,value:Ee(i,n)})):[]},not:(r,e)=>S.toBoolean(r,e).map(t=>({type:u.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 T(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:u.BackboneElement,value:void 0}}).filter(t=>!!t.value),as:(r,e)=>e,type:(r,e)=>e.map(({value:t})=>typeof t=="boolean"?{type:u.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof t=="number"?{type:u.BackboneElement,value:{namespace:"System",name:"Integer"}}:V(t)?{type:u.BackboneElement,value:{namespace:"FHIR",name:t.resourceType}}:{type:u.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:u.boolean,value:o.value?.resourceType===i}))}};function P(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=L(t,1);if(typeof i!="string")throw new Error("String function cannot be called with non-string");let o=r(i,...n.map(s=>s?.eval(e,t)[0]?.value));return o===void 0?[]:Array.isArray(o)?o.map(T):[T(o)]}function U(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=L(t,1),o=R(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?u.Quantity:t[0].type,m=o?{...i,value:a}:a;return[{type:c,value:m}]}function L(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}var Ie=class{constructor(e,t){this.original=e;this.child=t}eval(e,t){try{return t.length>0?t.map(n=>this.child.eval(e,[n])).flat():this.child.eval(e,[])}catch(n){throw new Error(`FhirPathError on "${this.original}": ${n}`)}}toString(){return this.child.toString()}},k=class{constructor(e){this.value=e}eval(){return[this.value]}toString(){let e=this.value.value;return typeof e=="string"?`'${e}'`:e.toString()}},M=class{constructor(e){this.name=e}eval(e,t){if(this.name==="$this")return t;if(this.name.startsWith("%")){let n=e.variables[this.name.slice(1)];if(!n)throw new Error(`Undefined variable ${this.name}`);return[n]}return t.flatMap(n=>this.evalValue(n)).filter(n=>n?.value!==void 0)}evalValue(e){let t=e.value;if(!(!t||typeof t!="object"))return V(t)&&t.resourceType===this.name?e:w(e,this.name)}toString(){return this.name}},ke=class{eval(){return[]}toString(){return"{}"}},Oe=class extends he{constructor(t,n,i){super(t,n);this.impl=i}eval(t,n){return this.impl(this.child.eval(t,n))}toString(){return this.operator+this.child.toString()}},J=class extends ${constructor(e,t){super("as",e,t)}eval(e,t){return S.ofType(e,this.left.eval(e,t),this.right)}},v=class extends ${},E=class extends v{constructor(t,n,i,o){super(t,n,i);this.impl=o}eval(t,n){let i=this.left.eval(t,n);if(i.length!==1)return[];let o=this.right.eval(t,n);if(o.length!==1)return[];let s=i[0].value,a=o[0].value,c=R(s)?s.value:s,m=R(a)?a.value:a,p=this.impl(c,m);return typeof p=="boolean"?l(p):R(s)?[{type:u.Quantity,value:{...s,value:p}}]:[T(p)]}},De=class extends ${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:u.string,value:o.map(s=>s.value).join("")}]:o}},Ve=class extends v{constructor(e,t){super("contains",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return l(n.some(o=>o.value===i[0].value))}},_e=class extends v{constructor(e,t){super("in",e,t)}eval(e,t){let n=D(this.left.eval(e,t)),i=this.right.eval(e,t);return n?l(i.some(o=>o.value===n.value)):[]}},Q=class extends ${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()}`}},ne=class extends ${constructor(e,t){super("|",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Re([...n,...i])}},Ue=class extends v{constructor(e,t){super("=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return at(n,i)}},Le=class extends v{constructor(e,t){super("!=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return st(at(n,i))}},Fe=class extends v{constructor(e,t){super("~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return ct(n,i)}},Ne=class extends v{constructor(e,t){super("!~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return st(ct(n,i))}},Y=class extends v{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 l(Ee(n[0],i))}},Me=class extends v{constructor(e,t){super("and",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return n?.value===!0&&i?.value===!0?l(!0):n?.value===!1||i?.value===!1?l(!1):[]}},Be=class extends v{constructor(e,t){super("or",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return n?.value===!1&&i?.value===!1?l(!1):n?.value||i?.value?l(!0):[]}},qe=class extends v{constructor(e,t){super("xor",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return!n||!i?[]:l(n.value!==i.value)}},$e=class extends v{constructor(e,t){super("implies",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return i?.value===!0||n?.value===!1?l(!0):!n||!i?[]:l(!1)}},B=class{constructor(e,t){this.name=e;this.args=t}eval(e,t){let n=S[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(", ")})`}},X=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 Jn=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],W=class{constructor(e,t,n,i){this.result=[];this.pos={index:0,line:1,column:0};this.markStack=[];this.str=e,this.keywords=t,this.operators=n,this.dateTimeLiterals=!!i?.dateTimeLiterals,this.symbolRegex=i?.symbolRegex??/[$\w%]/}tokenize(){for(;this.pos.index<this.str.length;){let e=this.consumeToken();e&&this.result.push(e)}return this.result}prevToken(){return this.result.slice(-1)[0]}peekToken(){this.mark();let e=this.consumeToken();return this.reset(),e}consumeToken(){this.consumeWhitespace();let e=this.curr();if(!e)return;this.mark();let t=this.peek();return e==="/"&&t==="*"?this.consumeMultiLineComment():e==="/"&&t==="/"?this.consumeSingleLineComment():e==="'"||e==='"'?this.consumeString(e):e==="`"?this.consumeBacktickSymbol():e==="@"?this.consumeDateTime():/\d/.exec(e)?this.consumeNumber():/\w/.exec(e)?this.consumeSymbol():(e==="$"||e==="%")&&/\w/.exec(t)?this.consumeSymbol():this.consumeOperator()}consumeWhitespace(){this.consumeWhile(()=>/\s/.exec(this.curr()))}consumeMultiLineComment(){let e=this.pos.index;return this.consumeWhile(()=>this.curr()!=="*"||this.peek()!=="/"),this.advance(),this.advance(),this.buildToken("Comment",this.str.substring(e,this.pos.index))}consumeSingleLineComment(){return this.buildToken("Comment",this.consumeWhile(()=>this.curr()!==`
|
|
2
2
|
`))}consumeString(e){this.advance();let t=this.buildToken("String",this.consumeWhile(()=>this.prev()==="\\"||this.curr()!==e));return this.advance(),t}consumeBacktickSymbol(){this.advance();let e=this.buildToken("Symbol",this.consumeWhile(()=>this.curr()!=="`"));return this.advance(),e}consumeDateTime(){this.advance();let e=this.pos.index;return this.consumeWhile(()=>/[\d-]/.exec(this.curr())),this.curr()==="T"&&(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"?this.advance():(this.curr()==="+"||this.curr()==="-")&&(this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())))),this.buildToken("DateTime",this.str.substring(e,this.pos.index))}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()===" "&&Yn(this.peekToken())&&(t="Quantity",this.consumeToken()),this.buildToken(t,this.str.substring(e,this.pos.index)))}consumeSymbol(){let e=this.consumeWhile(()=>this.symbolRegex.exec(this.curr()));return this.prevToken()?.value!=="."&&this.keywords.includes(e)?this.buildToken(e,e):this.buildToken("Symbol",e)}consumeOperator(){let e=this.curr(),t=this.peek(),n=e+t;return this.operators.includes(n)?(this.advance(),this.advance(),this.buildToken(n,n)):(this.advance(),this.buildToken(e,e))}consumeWhile(e){let t=this.pos.index;for(;this.pos.index<this.str.length&&e();)this.advance();return this.str.substring(t,this.pos.index)}curr(){return this.str[this.pos.index]}prev(){return this.str[this.pos.index-1]??""}peek(){return this.str[this.pos.index+1]??""}mark(){this.markStack.push({...this.pos})}reset(){let e=this.markStack.pop();if(!e)throw new Error("No mark to reset to");this.pos.index=e.index,this.pos.line=e.line,this.pos.column=e.column}advance(){this.pos.index++,this.curr()===`
|
|
3
|
-
`?(this.pos.line++,this.pos.column=0):this.pos.column++}buildToken(e,t){let n=this.markStack.pop();if(!n)throw new Error("No mark for token");return{id:e,value:t,...n}}};function Yn(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&Jn.includes(r.value)))}var ae=["true","false"],ce=["!=","!~","<=",">=","{}","->"];function Pr(r){return new W(r,ae,ce).tokenize()}var f={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},Xn={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},Zn={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new X(e,t)},precedence:f.Indexer},ei={parse(r,e){if(!(e instanceof M))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new B(e.name,t)},precedence:f.FunctionCall};function ti(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 ue(){return new Ce().registerPrefix("String",{parse:(r,e)=>new k({type:u.string,value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new k({type:u.dateTime,value:re(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new k({type:u.Quantity,value:ti(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new k({type:u.decimal,value:parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new k({type:u.boolean,value:!0})}).registerPrefix("false",{parse:()=>new k({type:u.boolean,value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new M(e.value)}).registerPrefix("{}",{parse:()=>new Ie}).registerPrefix("(",Xn).registerInfix("[",Zn).registerInfix("(",ei).prefix("+",f.UnaryAdd,(r,e)=>new ke("+",e,t=>t)).prefix("-",f.UnarySubtract,(r,e)=>new E("-",e,e,(t,n)=>-n)).infixLeft(".",f.Dot,(r,e,t)=>new Q(r,t)).infixLeft("/",f.Divide,(r,e,t)=>new E("/",r,t,(n,i)=>n/i)).infixLeft("*",f.Multiply,(r,e,t)=>new E("*",r,t,(n,i)=>n*i)).infixLeft("+",f.Add,(r,e,t)=>new E("+",r,t,(n,i)=>n+i)).infixLeft("-",f.Subtract,(r,e,t)=>new E("-",r,t,(n,i)=>n-i)).infixLeft("|",f.Union,(r,e,t)=>new ne(r,t)).infixLeft("=",f.Equals,(r,e,t)=>new _e(r,t)).infixLeft("!=",f.NotEquals,(r,e,t)=>new Ue(r,t)).infixLeft("~",f.Equivalent,(r,e,t)=>new Le(r,t)).infixLeft("!~",f.NotEquivalent,(r,e,t)=>new Fe(r,t)).infixLeft("<",f.LessThan,(r,e,t)=>new E("<",r,t,(n,i)=>n<i)).infixLeft("<=",f.LessThanOrEquals,(r,e,t)=>new E("<=",r,t,(n,i)=>n<=i)).infixLeft(">",f.GreaterThan,(r,e,t)=>new E(">",r,t,(n,i)=>n>i)).infixLeft(">=",f.GreaterThanOrEquals,(r,e,t)=>new E(">=",r,t,(n,i)=>n>=i)).infixLeft("&",f.Ampersand,(r,e,t)=>new Oe(r,t)).infixLeft("and",f.And,(r,e,t)=>new Ne(r,t)).infixLeft("as",f.As,(r,e,t)=>new J(r,t)).infixLeft("contains",f.Contains,(r,e,t)=>new De(r,t)).infixLeft("div",f.Divide,(r,e,t)=>new E("div",r,t,(n,i)=>n/i|0)).infixLeft("in",f.In,(r,e,t)=>new Ve(r,t)).infixLeft("is",f.Is,(r,e,t)=>new Y(r,t)).infixLeft("mod",f.Modulo,(r,e,t)=>new E("mod",r,t,(n,i)=>n%i)).infixLeft("or",f.Or,(r,e,t)=>new Me(r,t)).infixLeft("xor",f.Xor,(r,e,t)=>new Be(r,t)).infixLeft("implies",f.Implies,(r,e,t)=>new qe(r,t))}var ri=ue();function Rt(r){return new we(r,ri.construct(Pr(r)).consumeAndParse())}function ie(r,e){let t=Array.isArray(e)?e:[e];for(let n=0;n<t.length;n++){let i=t[n];typeof i=="object"&&"type"in i&&"value"in i||(t[n]=T(t[n]))}return le(r,t).map(n=>n.value)}function le(r,e,t){let n=t??{};return Rt(r).eval({variables:n},e).map(o=>({type:o.type,value:o.value?.valueOf()}))}var Sa=20,ni=(g=>(g.EQUALS="eq",g.NOT_EQUALS="ne",g.GREATER_THAN="gt",g.LESS_THAN="lt",g.GREATER_THAN_OR_EQUALS="ge",g.LESS_THAN_OR_EQUALS="le",g.STARTS_AFTER="sa",g.ENDS_BEFORE="eb",g.APPROXIMATELY="ap",g.CONTAINS="contains",g.EXACT="exact",g.TEXT="text",g.NOT="not",g.ABOVE="above",g.BELOW="below",g.IN="in",g.NOT_IN="not-in",g.OF_TYPE="of-type",g.MISSING="missing",g.IDENTIFIER="identifier",g.ITERATE="iterate",g))(ni||{}),Ir={contains:"contains",exact:"exact",above:"above",below:"below",text:"text",not:"not",in:"in","not-in":"not-in","of-type":"of-type",missing:"missing",identifier:"identifier",iterate:"iterate"},Et={eq:"eq",ne:"ne",lt:"lt",le:"le",gt:"gt",ge:"ge",sa:"sa",eb:"eb",ap:"ap"};function ba(r,e){let t=[];for(let[n,i]of Object.entries(e))if(Array.isArray(i))for(let o of i)t.push([n,o]);else t.push([n,i??""]);return Or(r,t)}function kr(r){let e;for(let t of r.pathname.split("/"))t&&(e=t);return Or(e,r.searchParams.entries())}function Ra(r){return kr(new URL(r,"https://example.com/"))}function At(r){return kr(new URL(r,"https://api.medplum.com/"))}function Or(r,e){let t={resourceType:r};for(let[n,i]of e)ii(t,n,i);return t}function ii(r,e,t){let n,i,o=e.indexOf(":");switch(o>=0?(n=e.substring(0,o),i=e.substring(o+1)):(n=e,i=""),n){case"_sort":oi(r,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=Cr(t);i==="iterate"&&(s.modifier="iterate"),r.include?r.include.push(s):r.include=[s];break}case"_revinclude":{let s=Cr(t);i==="iterate"&&(s.modifier="iterate"),r.revInclude?r.revInclude.push(s):r.revInclude=[s];break}case"_fields":case"_elements":r.fields=t.split(",");break;default:{let s=I.types[r.resourceType]?.searchParams?.[n];s?si(r,s,i,t):ui(r,n,i,t)}}}function oi(r,e){for(let t of e.split(",")){let n,i=!1;t.startsWith("-")?(n=t.substring(1),i=!0):n=t,r.sortRules||(r.sortRules=[]),r.sortRules.push({code:n,descending:i})}}function si(r,e,t,n){if(t==="missing"){$e(r,{code:e.code,operator:"missing",value:n});return}switch(e.type){case"number":case"date":case"quantity":ai(r,e,n);break;case"reference":case"string":case"token":case"uri":ci(r,e,t,n);break;default:break}}function ai(r,e,t){let{operator:n,value:i}=li(t);$e(r,{code:e.code,operator:n,value:i})}function ci(r,e,t,n){$e(r,{code:e.code,operator:di(t),value:n})}function ui(r,e,t,n){let i="eq";if(t)i=t;else if(n.length>=2){let o=n.substring(0,2);o in Et&&(n.length===2||n.at(2)?.match(/\d/))&&(i=o,n=n.substring(o.length))}$e(r,{code:e,operator:i,value:n})}function li(r){let e=r.substring(0,2),t=Et[e];return t?{operator:t,value:r.substring(2)}:{operator:"eq",value:r}}function di(r){return Ir[r]??"eq"}function Cr(r){let e=r.split(":");if(e.includes("*"))throw new d(O("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new d(O(`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(O(`Invalid include value '${r}'`))}function $e(r,e){r.filters?r.filters.push(e):r.filters=[e]}var pi=/{{([^{}]+)}}/g;function Ea(r,e){return r=r.replaceAll(pi,(t,n)=>{let i=le(n,[],e);return i.length!==1?"":Ar(i[0])}),At(r)}function Aa(r){let e=[];return r.fields&&e.push("_fields="+r.fields.join(",")),r.filters&&r.filters.forEach(t=>e.push(fi(t))),r.sortRules&&r.sortRules.length>0&&e.push(mi(r.sortRules)),r.offset!==void 0&&e.push("_offset="+r.offset),r.count!==void 0&&e.push("_count="+r.count),r.total!==void 0&&e.push("_total="+r.total),r.include&&r.include.forEach(t=>e.push(wr("_include",t))),r.revInclude&&r.revInclude.forEach(t=>e.push(wr("_revinclude",t))),e.length===0?"":(e.sort((t,n)=>t.localeCompare(n)),"?"+e.join("&"))}function fi(r){let e=r.operator in Ir?":"+r.operator:"",t=r.operator!=="eq"&&r.operator in Et?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function mi(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function wr(r,e){return r+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}var Dr=(p=>(p.BOOLEAN="BOOLEAN",p.NUMBER="NUMBER",p.QUANTITY="QUANTITY",p.TEXT="TEXT",p.REFERENCE="REFERENCE",p.CANONICAL="CANONICAL",p.DATE="DATE",p.DATETIME="DATETIME",p.PERIOD="PERIOD",p.UUID="UUID",p))(Dr||{});function Vr(r,e){let t=I.types[r].searchParamsDetails?.[e.code];return t||(t=yi(r,e)),t}function hi(r,e,t){let n=I.types[r];n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=t}function yi(r,e){let t=e.code,n=Ti(t),i=Ur(r,e.expression),o={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let a of i){let c=de(a);c.length===1&&c[0]instanceof v?o.propertyTypes.add("boolean"):_r(o,de(a),r,1)}let s={columnName:n,type:vi(e,o.propertyTypes),elementDefinitions:o.elementDefinitions,array:o.array};return hi(r,t,s),s}function _r(r,e,t,n){let i=e[n];if(i instanceof J){r.propertyTypes.add(i.right.toString());return}if(i instanceof B){gi(r,i);return}let o=i.toString(),s=Ae(t,o);if(!s)throw new Error(`Element definition not found for ${t} ${o}`);let a=!1,c=n+1;if(c<e.length&&e[c]instanceof X&&(a=!0,c++),s.max>1&&!a&&(r.array=!0),c>=e.length){r.elementDefinitions.push(s);for(let m of s.type)r.propertyTypes.add(m.code);return}for(let m of s.type){let p=m.code;xi(p)&&(p=s.type[0].code),_r(r,e,p,c)}}function gi(r,e){if(e.name==="as"){r.propertyTypes.add(e.args[0].toString());return}if(e.name==="resolve"){r.propertyTypes.add("string");return}if(e.name==="where"&&e.args[0]instanceof Y){r.propertyTypes.add(e.args[0].right.toString());return}throw new Error(`Unhandled FHIRPath function: ${e.name}`)}function xi(r){return r==="Element"||r==="BackboneElement"}function Ti(r){return r.split("-").reduce((e,t,n)=>e+(n?A(t):t),"")}function vi(r,e){switch(r.type){case"date":return e.size===1&&e.has(u.date)?"DATE":"DATETIME";case"number":return"NUMBER";case"quantity":return"QUANTITY";case"reference":return e.has(u.canonical)?"CANONICAL":"REFERENCE";case"token":return e.size===1&&e.has(u.boolean)?"BOOLEAN":"TEXT";default:return"TEXT"}}function Ur(r,e){let t=[],n=Rt(e);return Pt(r,n.child,t),t}function Oa(r,e){let t=Ur(r,e);if(t.length!==0)return t.map(n=>n.toString()).join(" | ")}function Pt(r,e,t){e instanceof ne?(Pt(r,e.left,t),Pt(r,e.right,t)):e.toString().startsWith(r+".")&&t.push(e)}function de(r){return r instanceof J||r instanceof X?[de(r.left),r].flat():r instanceof v?[r]:r instanceof Q?[de(r.left),de(r.right)].flat():r instanceof B&&r.name==="where"&&!(r.args[0]instanceof Y)?[]:[r]}function Lr(r,e){if(e.resourceType!==r.resourceType)return!1;if(e.filters){for(let t of e.filters)if(!Si(r,e,t))return!1}return!0}function Si(r,e,t){let n=I.types[e.resourceType]?.searchParams?.[t.code];if(t.operator==="missing"&&n){let i=ie(n.expression,r);return t.value==="true"?!i.length:i.length>0}switch(n?.type){case"reference":return bi(r,t,n);case"string":case"uri":return Fr(r,t,n);case"token":return Ri(r,t,n);case"date":return Ai(r,t,n);default:return!1}}function bi(r,e,t){let n=ie(t.expression,r),i=je(e.operator);if(e.value===""&&n.length===0)return e.operator==="eq";let o=n.map(s=>typeof s=="string"?s:s.reference);for(let s of e.value.split(",")){let a=o.includes(s);if(!a&&e.code==="_compartment"&&(a=o.some(c=>c?.endsWith("/"+s))),a)return!i}return i}function Ri(r,e,t){return Vr(r.resourceType,t).type==="BOOLEAN"?Ei(r,e,t):Fr(r,e,t,!0)}function Ei(r,e,t){let n=ie(t.expression,r),i=e.value==="true",o=n.includes(i);return je(e.operator)?!o:o}function Fr(r,e,t,n){let i=ie(t.expression,r),o=e.value.split(","),s=je(e.operator);for(let a of i)for(let c of o)if(Ct(a,e.operator,c,n))return!s;return s}function Ct(r,e,t,n){if(n&&t.includes("|")){let[o,s]=t.split("|");return Ct(r,e,o,!1)&&(!s||Ct(r,e,s,!1))}let i="";return r&&(typeof r=="string"?i=r:typeof r=="object"&&(i=JSON.stringify(r))),i.toLowerCase().includes(t.toLowerCase())}function Ai(r,e,t){let n=ie(t.expression,r),i=e.value.split(","),o=je(e.operator);for(let s of n)for(let a of i)if(Pi(s,e.operator,a))return!o;return o}function Pi(r,e,t){switch(e){case"sa":case"gt":return r>t;case"ge":return r>=t;case"eb":case"lt":return r<t;case"le":return r<=t;case"eq":case"ne":return r===t;default:return!1}}function je(r){return r==="ne"||r==="not"}var Ci={resourceType:"*"},wi=["DomainConfiguration","JsonWebKey","Login","User"],Ii=["PasswordChangeRequest","Project","ProjectMembership"],ki=(x=>(x.READ="read",x.VREAD="vread",x.UPDATE="update",x.PATCH="patch",x.DELETE="delete",x.HISTORY="history",x.HISTORY_INSTANCE="history-instance",x.HISTORY_TYPE="history-type",x.HISTORY_SYSTEM="history-system",x.CREATE="create",x.SEARCH="search",x.SEARCH_TYPE="search-type",x.SEARCH_SYSTEM="search-system",x.SEARCH_COMPARTMENT="search-compartment",x.CAPABILITIES="capabilities",x.TRANSACTION="transaction",x.BATCH="batch",x.OPERATION="operation",x))(ki||{}),Oi=["read","vread","history","history-instance"];function Ma(r,e){if(r.resource){for(let t of r.resource)if(wt(t.resourceType,e))return!0}return!1}function Di(r,e){if(wi.includes(e))return!1;if(r.resource){for(let t of r.resource)if(wt(t.resourceType,e)&&!t.readonly)return!0}return!1}function Ba(r,e){let t=e.resourceType;return Di(r,t)?Vi(r,e,!1):!1}function Vi(r,e,t){if(r.resource){for(let n of r.resource)if(Nr(e,t?"read":"update",n))return!0}return!1}function qa(r,e,t){if(!t)return Ci;if(t.resource){for(let n of t.resource)if(Nr(r,e,n))return n}}function Nr(r,e,t){let n=r.resourceType;return!(!wt(t.resourceType,n)||t.readonly&&!Oi.includes(e)||t.compartment&&!r.meta?.compartment?.find(i=>i.reference===t.compartment?.reference)||t.criteria&&!Lr(r,At(t.criteria)))}function wt(r,e){return r===e||r==="*"&&!Ii.includes(e)}function Mr(r){if(typeof window<"u")return window.atob(r);if(typeof Buffer<"u")return Buffer.from(r,"base64").toString("binary");throw new Error("Unable to decode base64")}function Br(r){if(typeof window<"u")return window.btoa(r);if(typeof Buffer<"u")return Buffer.from(r,"binary").toString("base64");throw new Error("Unable to encode base64")}function It(){let r=new Uint32Array(28);return crypto.getRandomValues(r),rr(r.buffer)}async function qr(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 _i(r){let e={};r=ct(r);for(let i of r.entry||[]){delete i.resource?.meta;let o=i.resource?.id;o&&(e[o]=pe(),i.fullUrl="urn:uuid:"+e[o],delete i.resource?.id)}let t=r.entry,n=JSON.stringify({resourceType:"Bundle",type:"transaction",entry:t?.map(i=>({fullUrl:i.fullUrl,request:{method:"POST",url:i.resource.resourceType},resource:i.resource}))},(i,o)=>Ui(i,o,e),2);return Li(JSON.parse(n))}function Ui(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 Li(r){let e=Ni(r),{sorted:t,cycles:n}=Fi(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],m={...c,request:{...c.request,method:"PUT"}};o.push(m)}return{...r,entry:o}}function Fi(r){let e=[],t={},n=[];for(let o of Object.keys(r))t[o]=0;function i(o,s){if(t[o]===2)return!0;if(t[o]===1){let c=s.lastIndexOf(o);return c!==-1&&n.push(s.slice(c)),!0}t[o]=1,s.push(o);let a=!1;for(let c of r[o])i(c,s)||(a=!0);return t[o]=2,s.pop(),e.unshift(o),!a}for(let o in r)t[o]===0&&i(o,[]);return{sorted:e,cycles:n}}function $r(r,e){for(let t in r)if(r[t]&&typeof r[t]=="object"){let n=r[t];if(Er(n)){let i=n.reference;i.startsWith("urn:uuid:")&&e(i)}else $r(n,e)}}function Ni(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&&$r(t.resource,i=>{e[i]&&e[i].push(n)})}return e}function za(r){r=ct(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 _i(e)}var He=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 F={CSS:"text/css",FAVICON:"image/vnd.microsoft.icon",FHIR_JSON:"application/fhir+json",FORM_URL_ENCODED:"application/x-www-form-urlencoded",HL7_V2:"x-application/hl7-v2+er7",HTML:"text/html",JAVASCRIPT:"text/javascript",JSON:"application/json",JSON_PATCH:"application/json-patch+json",PNG:"image/png",SVG:"image/svg+xml",TEXT:"text/plain",TYPESCRIPT:"text/typescript"};var fe=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}},Qe=class{constructor(){this.emitter=new fe}dispatchEvent(e){this.emitter.dispatchEvent(e)}addEventListener(e,t){this.emitter.addEventListener(e,t)}removeEventListener(e,t){this.emitter.removeEventListener(e,t)}};var kt={"patient-open":"patient-open","patient-close":"patient-close","imagingstudy-open":"imagingstudy-open","imagingstudy-close":"imagingstudy-close"},Mi=["Patient","Encounter","ImagingStudy"],Bi={"patient-open":["Patient"],"patient-close":["Patient"],"imagingstudy-open":["Patient","ImagingStudy"],"imagingstudy-close":["Patient","ImagingStudy"]},qi={"patient-open":["Encounter"],"patient-close":["Encounter"],"imagingstudy-open":[],"imagingstudy-close":[]};function $i(r){return Mi.includes(r)}var ji={ImagingStudy:"study",Patient:"patient",Encounter:"encounter"};function jr(r){return!!r.endpoint}function Ot(r){if(!Ge(r))throw new d(h("subscriptionRequest must be an object conforming to SubscriptionRequest type."));let{channelType:e,mode:t,topic:n,events:i}=r,o={"hub.channel.type":e,"hub.mode":t,"hub.topic":n,"hub.events":i.join(",")};return jr(r)&&(o.endpoint=r.endpoint),new URLSearchParams(o).toString()}function Ge(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(!kt[o])return!1;return!(jr(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function Hi(r,e,t,n){if(!(e.key&&typeof e.key=="string"))throw new d(h(`context[${t}] is invalid. Context must contain a key.`));if(n.has(e.key))throw new d(h(`context[${t}] is invalid. Key ${e.key} has already been used in a previous context.`));if(n.add(e.key),typeof e.resource!="object")throw new d(h(`context[${t}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.resource.id&&typeof e.resource.id=="string"))throw new d(h(`context[${t}] is invalid. Resource must contain a valid string ID.`));if(!e.resource.resourceType)throw new d(h(`context[${t}] is invalid. Resource must contain a resource type. No resource type found.`));let i=e.resource.resourceType;if(!$i(i))throw new d(h(`context[${t}] is invalid. Resource must contain a valid FHIRcast resource type. Resource type is not a known resource type.`));let o=Bi[r],s=qi[r],a;if(t<o.length?a=o[t]:t-o.length<s.length&&(a=s[t-o.length]),a&&i!==a)throw new d(h(`context[${t}] is invalid. context[${t}] for the '${r}' event should contain resource of type ${a}.`));let c=ji[i];if(c!==e.key)throw new d(h(`context[${t}] is invalid. Context key for type ${i} must be ${c}.`))}function Qi(r,e){let t=new Set;for(let n=0;n<e.length;n++)Hi(r,e[n],n,t)}function Hr(r,e,t){if(!(r&&typeof r=="string"))throw new d(h("Must provide a topic."));if(!kt[e])throw new d(h(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(kt).join(", ")}`));if(typeof t!="object")throw new d(h("context must be a context object or array of context objects."));let n=Array.isArray(t)?t:[t];return Qi(e,n),{timestamp:new Date().toISOString(),id:pe(),event:{"hub.topic":r,"hub.event":e,context:n}}}var We=class extends Qe{constructor(t){super();if(this.subRequest=t,!t.endpoint)throw new d(h("Subscription request should contain an endpoint."));if(!Ge(t))throw new d(h("Subscription request failed validation."));let n=new WebSocket(t.endpoint);n.addEventListener("open",()=>{this.dispatchEvent({type:"connect"}),n.addEventListener("message",i=>{let o=JSON.parse(i.data);if(o["hub.topic"])return;let s=o;this.dispatchEvent({type:"message",payload:s}),n.send(JSON.stringify({id:o?.id,timestamp:new Date().toISOString()}))}),n.addEventListener("close",()=>{this.dispatchEvent({type:"disconnect"})})}),this.websocket=n}disconnect(){this.websocket.close()}};function Wi(r){let e=r.replace(/-/g,"+").replace(/_/g,"/"),t=Mr(e),n=Array.from(t).reduce((o,s)=>{let a=("00"+s.charCodeAt(0).toString(16)).slice(-2);return`${o}%${a}`},""),i=decodeURIComponent(n);return JSON.parse(i)}function Qr(r){return r.split(".").length===3}function Dt(r){let[e,t,n]=r.split(".");return Wi(t)}function Wr(r){try{return typeof Dt(r).login_id=="string"}catch{return!1}}var Gi,C=class{constructor(e){this[Gi]="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)}};Gi=Symbol.toStringTag;var Ke=class{constructor(){this.storage=typeof localStorage<"u"?localStorage:new Vt}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?Zt(t):void 0)}},Vt=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]}};var wc="2.1.5-703ef1a8",Ki="https://api.medplum.com/",zi=1e3,Ji=6e4,Gr="Binary/",Kr={resourceType:"Device",id:"system",deviceName:[{name:"System"}]},Yi=(o=>(o.ClientCredentials="client_credentials",o.AuthorizationCode="authorization_code",o.RefreshToken="refresh_token",o.JwtBearer="urn:ietf:params:oauth:grant-type:jwt-bearer",o.TokenExchange="urn:ietf:params:oauth:grant-type:token-exchange",o))(Yi||{}),Xi=(o=>(o.AccessToken="urn:ietf:params:oauth:token-type:access_token",o.RefreshToken="urn:ietf:params:oauth:token-type:refresh_token",o.IdToken="urn:ietf:params:oauth:token-type:id_token",o.Saml1Token="urn:ietf:params:oauth:token-type:saml1",o.Saml2Token="urn:ietf:params:oauth:token-type:saml2",o))(Xi||{}),Zi=(e=>(e.JwtBearer="urn:ietf:params:oauth:client-assertion-type:jwt-bearer",e))(Zi||{}),zr=class extends fe{constructor(t){super();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??eo(),this.storage=t?.storage??new Ke,this.createPdfImpl=t?.createPdf,this.baseUrl=Yr(t?.baseUrl??Ki),this.fhirBaseUrl=Yr(ze(this.baseUrl,t?.fhirUrlPath??"fhir/R4/")),this.authorizeUrl=ze(this.baseUrl,t?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=ze(this.baseUrl,t?.tokenUrl??"oauth2/token"),this.logoutUrl=ze(this.baseUrl,t?.logoutUrl??"oauth2/logout"),this.clientId=t?.clientId??"",this.clientSecret=t?.clientSecret??"",this.onUnauthenticated=t?.onUnauthenticated,this.cacheTime=t?.cacheTime??Ji,this.cacheTime>0?this.requestCache=new He(t?.resourceCacheSize??zi):this.requestCache=void 0,t?.autoBatchTime?(this.autoBatchTime=t.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0);let n=this.getActiveLogin();n&&(this.setAccessToken(n.accessToken,n.refreshToken),this.refreshProfile().catch(console.log)),this.setupStorageListener()}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}clear(){this.storage.clear(),this.clearActiveLogin()}clearActiveLogin(){this.storage.setString("activeLogin",void 0),this.requestCache?.clear(),this.accessToken=void 0,this.refreshToken=void 0,this.sessionDetails=void 0,this.medplumServer=void 0,this.dispatchEvent({type:"change"})}invalidateUrl(t){t=t.toString(),this.requestCache?.delete(t)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(t){let n=this.fhirBaseUrl+t;if(this.requestCache)for(let i of this.requestCache.keys())(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache.delete(i)}get(t,n={}){t=t.toString();let i=this.getCacheEntry(t,n);if(i)return i.value;let o;t.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue?o=new Promise((a,c)=>{this.autoBatchQueue.push({method:"GET",url:t.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:c}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):o=this.request("GET",t,n);let s=new C(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,F.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)return this.processCode(i);await this.requestAuthorization(t)}signOutWithRedirect(){window.location.assign(this.logoutUrl)}async signInWithExternalAuth(t,n,i,o){let s=await this.ensureCodeChallenge(o);window.location.assign(this.getExternalAuthRedirectUri(t,n,i,s))}async exchangeExternalAccessToken(t,n){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");let i=new URLSearchParams;return i.set("grant_type","urn:ietf:params:oauth:grant-type:token-exchange"),i.set("subject_token_type","urn:ietf:params:oauth:token-type:access_token"),i.set("client_id",n),i.set("subject_token",t),this.fetchTokens(i)}getExternalAuthRedirectUri(t,n,i,o){let{codeChallenge:s,codeChallengeMethod:a}=o;if(!a)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!s)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");let c=new URL(t);return c.searchParams.set("response_type","code"),c.searchParams.set("client_id",n),c.searchParams.set("redirect_uri",i),c.searchParams.set("scope","openid profile email"),c.searchParams.set("state",JSON.stringify(o)),c.searchParams.set("code_challenge_method",a),c.searchParams.set("code_challenge",s),c.toString()}fhirUrl(...t){return new URL(t.join("/"),this.fhirBaseUrl)}fhirSearchUrl(t,n){let i=this.fhirUrl(t);return n&&(i.search=new URLSearchParams(n).toString()),i}search(t,n,i){let o=this.fhirSearchUrl(t,n),s=o.toString()+"-search",a=this.getCacheEntry(s,i);if(a)return a.value;let c=new C((async()=>{let m=await this.get(o,i);if(m.entry)for(let p of m.entry)this.cacheResource(p.resource);return m})());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=o.toString()+"-searchOne",a=this.getCacheEntry(s,i);if(a)return a.value;let c=new C(this.search(t,o.searchParams,i).then(m=>m.entry?.[0]?.resource));return this.setCacheEntry(s,c),c}searchResources(t,n,i){let s=this.fhirSearchUrl(t,n).toString()+"-searchResources",a=this.getCacheEntry(s,i);if(a)return a.value;let c=new C(this.search(t,n,i).then(Zr));return this.setCacheEntry(s,c),c}async*searchResourcePages(t,n,i){let o=this.fhirSearchUrl(t,n);for(;o;){let s=new URL(o).searchParams,a=await this.search(t,s,i),c=a.link?.find(m=>m.relation==="next");if(!a.entry?.length&&!c)break;yield Zr(a),o=c?.url?new URL(c.url):void 0}}searchValueSet(t,n,i){let o=this.fhirUrl("ValueSet","$expand");return o.searchParams.set("url",t),o.searchParams.set("filter",n),this.get(o.toString(),i)}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 Kr;let[i,o]=n.split("/");if(!(!i||!o))return this.getCached(i,o)}readResource(t,n,i){return this.get(this.fhirUrl(t,n),i)}readReference(t,n){let i=t.reference;if(!i)return new C(Promise.reject(new Error("Missing reference")));if(i==="system")return new C(Promise.resolve(Kr));let[o,s]=i.split("/");return!o||!s?new C(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}requestSchema(t){if(vr(t))return Promise.resolve();let n=t+"-requestSchema",i=this.getCacheEntry(n,void 0);if(i)return i.value;let o=new C((async()=>{let s=`{
|
|
3
|
+
`?(this.pos.line++,this.pos.column=0):this.pos.column++}buildToken(e,t){let n=this.markStack.pop();if(!n)throw new Error("No mark for token");return{id:e,value:t,...n}}};function Yn(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&Jn.includes(r.value)))}var ae=["true","false"],ce=["!=","!~","<=",">=","{}","->"];function Pr(r){return new W(r,ae,ce).tokenize()}var f={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},Xn={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},Zn={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new X(e,t)},precedence:f.Indexer},ei={parse(r,e){if(!(e instanceof M))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new B(e.name,t)},precedence:f.FunctionCall};function ti(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 ue(){return new ye().registerPrefix("String",{parse:(r,e)=>new k({type:u.string,value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new k({type:u.dateTime,value:re(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new k({type:u.Quantity,value:ti(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new k({type:u.decimal,value:parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new k({type:u.boolean,value:!0})}).registerPrefix("false",{parse:()=>new k({type:u.boolean,value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new M(e.value)}).registerPrefix("{}",{parse:()=>new ke}).registerPrefix("(",Xn).registerInfix("[",Zn).registerInfix("(",ei).prefix("+",f.UnaryAdd,(r,e)=>new Oe("+",e,t=>t)).prefix("-",f.UnarySubtract,(r,e)=>new E("-",e,e,(t,n)=>-n)).infixLeft(".",f.Dot,(r,e,t)=>new Q(r,t)).infixLeft("/",f.Divide,(r,e,t)=>new E("/",r,t,(n,i)=>n/i)).infixLeft("*",f.Multiply,(r,e,t)=>new E("*",r,t,(n,i)=>n*i)).infixLeft("+",f.Add,(r,e,t)=>new E("+",r,t,(n,i)=>n+i)).infixLeft("-",f.Subtract,(r,e,t)=>new E("-",r,t,(n,i)=>n-i)).infixLeft("|",f.Union,(r,e,t)=>new ne(r,t)).infixLeft("=",f.Equals,(r,e,t)=>new Ue(r,t)).infixLeft("!=",f.NotEquals,(r,e,t)=>new Le(r,t)).infixLeft("~",f.Equivalent,(r,e,t)=>new Fe(r,t)).infixLeft("!~",f.NotEquivalent,(r,e,t)=>new Ne(r,t)).infixLeft("<",f.LessThan,(r,e,t)=>new E("<",r,t,(n,i)=>n<i)).infixLeft("<=",f.LessThanOrEquals,(r,e,t)=>new E("<=",r,t,(n,i)=>n<=i)).infixLeft(">",f.GreaterThan,(r,e,t)=>new E(">",r,t,(n,i)=>n>i)).infixLeft(">=",f.GreaterThanOrEquals,(r,e,t)=>new E(">=",r,t,(n,i)=>n>=i)).infixLeft("&",f.Ampersand,(r,e,t)=>new De(r,t)).infixLeft("and",f.And,(r,e,t)=>new Me(r,t)).infixLeft("as",f.As,(r,e,t)=>new J(r,t)).infixLeft("contains",f.Contains,(r,e,t)=>new Ve(r,t)).infixLeft("div",f.Divide,(r,e,t)=>new E("div",r,t,(n,i)=>n/i|0)).infixLeft("in",f.In,(r,e,t)=>new _e(r,t)).infixLeft("is",f.Is,(r,e,t)=>new Y(r,t)).infixLeft("mod",f.Modulo,(r,e,t)=>new E("mod",r,t,(n,i)=>n%i)).infixLeft("or",f.Or,(r,e,t)=>new Be(r,t)).infixLeft("xor",f.Xor,(r,e,t)=>new qe(r,t)).infixLeft("implies",f.Implies,(r,e,t)=>new $e(r,t))}var ri=ue();function Rt(r){return new Ie(r,ri.construct(Pr(r)).consumeAndParse())}function ie(r,e){let t=Array.isArray(e)?e:[e];for(let n=0;n<t.length;n++){let i=t[n];typeof i=="object"&&"type"in i&&"value"in i||(t[n]=T(t[n]))}return le(r,t).map(n=>n.value)}function le(r,e,t){let n=t??{};return Rt(r).eval({variables:n},e).map(o=>({type:o.type,value:o.value?.valueOf()}))}var Cr=(p=>(p.BOOLEAN="BOOLEAN",p.NUMBER="NUMBER",p.QUANTITY="QUANTITY",p.TEXT="TEXT",p.REFERENCE="REFERENCE",p.CANONICAL="CANONICAL",p.DATE="DATE",p.DATETIME="DATETIME",p.PERIOD="PERIOD",p.UUID="UUID",p))(Cr||{});function wr(r,e){let t=I.types[r].searchParamsDetails?.[e.code];return t||(t=ii(r,e)),t}function ni(r,e,t){let n=I.types[r];n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=t}function ii(r,e){let t=e.code,n=ai(t),i=kr(r,e.expression),o={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let a of i){let c=de(a);c.length===1&&c[0]instanceof v?o.propertyTypes.add("boolean"):Ir(o,de(a),r,1)}let s={columnName:n,type:ci(e,o.propertyTypes),elementDefinitions:o.elementDefinitions,array:o.array};return ni(r,t,s),s}function Ir(r,e,t,n){let i=e[n];if(i instanceof J){r.propertyTypes.add(i.right.toString());return}if(i instanceof B){oi(r,i);return}let o=i.toString(),s=Ae(t,o);if(!s)throw new Error(`Element definition not found for ${t} ${o}`);let a=!1,c=n+1;if(c<e.length&&e[c]instanceof X&&(a=!0,c++),s.max>1&&!a&&(r.array=!0),c>=e.length){r.elementDefinitions.push(s);for(let m of s.type)r.propertyTypes.add(m.code);return}for(let m of s.type){let p=m.code;si(p)&&(p=s.type[0].code),Ir(r,e,p,c)}}function oi(r,e){if(e.name==="as"){r.propertyTypes.add(e.args[0].toString());return}if(e.name==="resolve"){r.propertyTypes.add("string");return}if(e.name==="where"&&e.args[0]instanceof Y){r.propertyTypes.add(e.args[0].right.toString());return}throw new Error(`Unhandled FHIRPath function: ${e.name}`)}function si(r){return r==="Element"||r==="BackboneElement"}function ai(r){return r.split("-").reduce((e,t,n)=>e+(n?A(t):t),"")}function ci(r,e){switch(r.type){case"date":return e.size===1&&e.has(u.date)?"DATE":"DATETIME";case"number":return"NUMBER";case"quantity":return"QUANTITY";case"reference":return e.has(u.canonical)?"CANONICAL":"REFERENCE";case"token":return e.size===1&&e.has(u.boolean)?"BOOLEAN":"TEXT";default:return"TEXT"}}function kr(r,e){let t=[],n=Rt(e);return Et(r,n.child,t),t}function ba(r,e){let t=kr(r,e);if(t.length!==0)return t.map(n=>n.toString()).join(" | ")}function Et(r,e,t){e instanceof ne?(Et(r,e.left,t),Et(r,e.right,t)):e.toString().startsWith(r+".")&&t.push(e)}function de(r){return r instanceof J||r instanceof X?[de(r.left),r].flat():r instanceof v?[r]:r instanceof Q?[de(r.left),de(r.right)].flat():r instanceof B&&r.name==="where"&&!(r.args[0]instanceof Y)?[]:[r]}var wa=20,ui=(g=>(g.EQUALS="eq",g.NOT_EQUALS="ne",g.GREATER_THAN="gt",g.LESS_THAN="lt",g.GREATER_THAN_OR_EQUALS="ge",g.LESS_THAN_OR_EQUALS="le",g.STARTS_AFTER="sa",g.ENDS_BEFORE="eb",g.APPROXIMATELY="ap",g.CONTAINS="contains",g.EXACT="exact",g.TEXT="text",g.NOT="not",g.ABOVE="above",g.BELOW="below",g.IN="in",g.NOT_IN="not-in",g.OF_TYPE="of-type",g.MISSING="missing",g.IDENTIFIER="identifier",g.ITERATE="iterate",g))(ui||{}),Vr={contains:"contains",exact:"exact",above:"above",below:"below",text:"text",not:"not",in:"in","not-in":"not-in","of-type":"of-type",missing:"missing",identifier:"identifier",iterate:"iterate"},At={eq:"eq",ne:"ne",lt:"lt",le:"le",gt:"gt",ge:"ge",sa:"sa",eb:"eb",ap:"ap"};function Ia(r,e){let t=[];for(let[n,i]of Object.entries(e))if(Array.isArray(i))for(let o of i)t.push([n,o]);else t.push([n,i??""]);return Ur(r,t)}function _r(r){let e;for(let t of r.pathname.split("/"))t&&(e=t);return Ur(e,r.searchParams.entries())}function ka(r){return _r(new URL(r,"https://example.com/"))}function Pt(r){return _r(new URL(r,"https://api.medplum.com/"))}function Ur(r,e){let t={resourceType:r};for(let[n,i]of e)li(t,n,i);return t}function li(r,e,t){let n,i,o=e.indexOf(":");switch(o>=0?(n=e.substring(0,o),i=e.substring(o+1)):(n=e,i=""),n){case"_sort":di(r,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=Or(t);i==="iterate"&&(s.modifier="iterate"),r.include?r.include.push(s):r.include=[s];break}case"_revinclude":{let s=Or(t);i==="iterate"&&(s.modifier="iterate"),r.revInclude?r.revInclude.push(s):r.revInclude=[s];break}case"_fields":case"_elements":r.fields=t.split(",");break;default:{let s=I.types[r.resourceType]?.searchParams?.[n];s?pi(r,s,i,t):hi(r,n,i,t)}}}function di(r,e){for(let t of e.split(",")){let n,i=!1;t.startsWith("-")?(n=t.substring(1),i=!0):n=t,r.sortRules||(r.sortRules=[]),r.sortRules.push({code:n,descending:i})}}function pi(r,e,t,n){if(t==="missing"){je(r,{code:e.code,operator:"missing",value:n});return}switch(e.type){case"number":case"date":case"quantity":fi(r,e,n);break;case"reference":case"string":case"token":case"uri":mi(r,e,t,n);break;default:break}}function fi(r,e,t){let{operator:n,value:i}=yi(t);je(r,{code:e.code,operator:n,value:i})}function mi(r,e,t,n){je(r,{code:e.code,operator:gi(t),value:n})}function hi(r,e,t,n){let i="eq";if(t)i=t;else if(n.length>=2){let o=n.substring(0,2);o in At&&(n.length===2||n.at(2)?.match(/\d/))&&(i=o,n=n.substring(o.length))}je(r,{code:e,operator:i,value:n})}function yi(r){let e=r.substring(0,2),t=At[e];return t?{operator:t,value:r.substring(2)}:{operator:"eq",value:r}}function gi(r){return Vr[r]??"eq"}function Or(r){let e=r.split(":");if(e.includes("*"))throw new d(_("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new d(_(`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(_(`Invalid include value '${r}'`))}function je(r,e){r.filters?r.filters.push(e):r.filters=[e]}var xi=/{{([^{}]+)}}/g;function Oa(r,e){return r=r.replaceAll(xi,(t,n)=>{let i=le(n,[],e);return i.length!==1?"":Ar(i[0])}),Pt(r)}function Da(r){let e=[];return r.fields&&e.push("_fields="+r.fields.join(",")),r.filters&&r.filters.forEach(t=>e.push(Ti(t))),r.sortRules&&r.sortRules.length>0&&e.push(vi(r.sortRules)),r.offset!==void 0&&e.push("_offset="+r.offset),r.count!==void 0&&e.push("_count="+r.count),r.total!==void 0&&e.push("_total="+r.total),r.include&&r.include.forEach(t=>e.push(Dr("_include",t))),r.revInclude&&r.revInclude.forEach(t=>e.push(Dr("_revinclude",t))),e.length===0?"":(e.sort((t,n)=>t.localeCompare(n)),"?"+e.join("&"))}function Ti(r){let e=r.operator in Vr?":"+r.operator:"",t=r.operator!=="eq"&&r.operator in At?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function vi(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function Dr(r,e){return r+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function Lr(r,e){if(e.resourceType!==r.resourceType)return!1;if(e.filters){for(let t of e.filters)if(!Si(r,e,t))return!1}return!0}function Si(r,e,t){let n=I.types[e.resourceType]?.searchParams?.[t.code];if(t.operator==="missing"&&n){let i=ie(n.expression,r);return t.value==="true"?!i.length:i.length>0}switch(n?.type){case"reference":return bi(r,t,n);case"string":case"uri":return Fr(r,t,n);case"token":return Ri(r,t,n);case"date":return Ai(r,t,n);default:return!1}}function bi(r,e,t){let n=ie(t.expression,r),i=He(e.operator);if(e.value===""&&n.length===0)return e.operator==="eq";let o=n.map(s=>typeof s=="string"?s:s.reference);for(let s of e.value.split(",")){let a=o.includes(s);if(!a&&e.code==="_compartment"&&(a=o.some(c=>c?.endsWith("/"+s))),a)return!i}return i}function Ri(r,e,t){return wr(r.resourceType,t).type==="BOOLEAN"?Ei(r,e,t):Fr(r,e,t,!0)}function Ei(r,e,t){let n=ie(t.expression,r),i=e.value==="true",o=n.includes(i);return He(e.operator)?!o:o}function Fr(r,e,t,n){let i=ie(t.expression,r),o=e.value.split(","),s=He(e.operator);for(let a of i)for(let c of o)if(Ct(a,e.operator,c,n))return!s;return s}function Ct(r,e,t,n){if(n&&t.includes("|")){let[o,s]=t.split("|");return Ct(r,e,o,!1)&&(!s||Ct(r,e,s,!1))}let i="";return r&&(typeof r=="string"?i=r:typeof r=="object"&&(i=JSON.stringify(r))),i.toLowerCase().includes(t.toLowerCase())}function Ai(r,e,t){let n=ie(t.expression,r),i=e.value.split(","),o=He(e.operator);for(let s of n)for(let a of i)if(Pi(s,e.operator,a))return!o;return o}function Pi(r,e,t){switch(e){case"sa":case"gt":return r>t;case"ge":return r>=t;case"eb":case"lt":return r<t;case"le":return r<=t;case"eq":case"ne":return r===t;default:return!1}}function He(r){return r==="ne"||r==="not"}var Ci={resourceType:"*"},wi=["DomainConfiguration","JsonWebKey","Login"],Ii=["PasswordChangeRequest","Project","ProjectMembership","User"],ki=(x=>(x.READ="read",x.VREAD="vread",x.UPDATE="update",x.PATCH="patch",x.DELETE="delete",x.HISTORY="history",x.HISTORY_INSTANCE="history-instance",x.HISTORY_TYPE="history-type",x.HISTORY_SYSTEM="history-system",x.CREATE="create",x.SEARCH="search",x.SEARCH_TYPE="search-type",x.SEARCH_SYSTEM="search-system",x.SEARCH_COMPARTMENT="search-compartment",x.CAPABILITIES="capabilities",x.TRANSACTION="transaction",x.BATCH="batch",x.OPERATION="operation",x))(ki||{}),Oi=["read","vread","history","history-instance"];function Ba(r,e){if(r.resource){for(let t of r.resource)if(wt(t.resourceType,e))return!0}return!1}function Di(r,e){if(wi.includes(e))return!1;if(r.resource){for(let t of r.resource)if(wt(t.resourceType,e)&&!t.readonly)return!0}return!1}function qa(r,e){let t=e.resourceType;return Di(r,t)?Vi(r,e,!1):!1}function Vi(r,e,t){if(r.resource){for(let n of r.resource)if(Nr(e,t?"read":"update",n))return!0}return!1}function $a(r,e,t){if(!t)return Ci;if(t.resource){for(let n of t.resource)if(Nr(r,e,n))return n}}function Nr(r,e,t){let n=r.resourceType;return!(!wt(t.resourceType,n)||t.readonly&&!Oi.includes(e)||t.compartment&&!r.meta?.compartment?.find(i=>i.reference===t.compartment?.reference)||t.criteria&&!Lr(r,Pt(t.criteria)))}function wt(r,e){return r===e||r==="*"&&!Ii.includes(e)}function Mr(r){if(typeof window<"u")return window.atob(r);if(typeof Buffer<"u")return Buffer.from(r,"base64").toString("binary");throw new Error("Unable to decode base64")}function Br(r){if(typeof window<"u")return window.btoa(r);if(typeof Buffer<"u")return Buffer.from(r,"binary").toString("base64");throw new Error("Unable to encode base64")}function It(){let r=new Uint32Array(28);return crypto.getRandomValues(r),Kt(r.buffer)}async function qr(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 _i(r){let e={};r=rt(r);for(let i of r.entry||[]){delete i.resource?.meta;let o=i.resource?.id;o&&(e[o]=pe(),i.fullUrl="urn:uuid:"+e[o],delete i.resource?.id)}let t=r.entry,n=JSON.stringify({resourceType:"Bundle",type:"transaction",entry:t?.map(i=>({fullUrl:i.fullUrl,request:{method:"POST",url:i.resource.resourceType},resource:i.resource}))},(i,o)=>Ui(i,o,e),2);return Li(JSON.parse(n))}function Ui(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 Li(r){let e=Ni(r),{sorted:t,cycles:n}=Fi(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],m={...c,request:{...c.request,method:"PUT"}};o.push(m)}return{...r,entry:o}}function Fi(r){let e=[],t={},n=[];for(let o of Object.keys(r))t[o]=0;function i(o,s){if(t[o]===2)return!0;if(t[o]===1){let c=s.lastIndexOf(o);return c!==-1&&n.push(s.slice(c)),!0}t[o]=1,s.push(o);let a=!1;for(let c of r[o])i(c,s)||(a=!0);return t[o]=2,s.pop(),e.unshift(o),!a}for(let o in r)t[o]===0&&i(o,[]);return{sorted:e,cycles:n}}function $r(r,e){for(let t in r)if(r[t]&&typeof r[t]=="object"){let n=r[t];if(Er(n)){let i=n.reference;i.startsWith("urn:uuid:")&&e(i)}else $r(n,e)}}function Ni(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&&$r(t.resource,i=>{e[i]&&e[i].push(n)})}return e}function Ja(r){r=rt(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 _i(e)}var Qe=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 F={CSS:"text/css",FAVICON:"image/vnd.microsoft.icon",FHIR_JSON:"application/fhir+json",FORM_URL_ENCODED:"application/x-www-form-urlencoded",HL7_V2:"x-application/hl7-v2+er7",HTML:"text/html",JAVASCRIPT:"text/javascript",JSON:"application/json",JSON_PATCH:"application/json-patch+json",PNG:"image/png",SVG:"image/svg+xml",TEXT:"text/plain",TYPESCRIPT:"text/typescript"};var fe=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}},We=class{constructor(){this.emitter=new fe}dispatchEvent(e){this.emitter.dispatchEvent(e)}addEventListener(e,t){this.emitter.addEventListener(e,t)}removeEventListener(e,t){this.emitter.removeEventListener(e,t)}};var kt={"patient-open":"patient-open","patient-close":"patient-close","imagingstudy-open":"imagingstudy-open","imagingstudy-close":"imagingstudy-close"},Mi=["Patient","Encounter","ImagingStudy"],Bi={"patient-open":["Patient"],"patient-close":["Patient"],"imagingstudy-open":["Patient","ImagingStudy"],"imagingstudy-close":["Patient","ImagingStudy"]},qi={"patient-open":["Encounter"],"patient-close":["Encounter"],"imagingstudy-open":[],"imagingstudy-close":[]};function $i(r){return Mi.includes(r)}var ji={ImagingStudy:"study",Patient:"patient",Encounter:"encounter"};function jr(r){return!!r.endpoint}function Ot(r){if(!Ke(r))throw new d(h("subscriptionRequest must be an object conforming to SubscriptionRequest type."));let{channelType:e,mode:t,topic:n,events:i}=r,o={"hub.channel.type":e,"hub.mode":t,"hub.topic":n,"hub.events":i.join(",")};return jr(r)&&(o.endpoint=r.endpoint),new URLSearchParams(o).toString()}function Ke(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(!kt[o])return!1;return!(jr(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function Hi(r,e,t,n){if(!(e.key&&typeof e.key=="string"))throw new d(h(`context[${t}] is invalid. Context must contain a key.`));if(n.has(e.key))throw new d(h(`context[${t}] is invalid. Key ${e.key} has already been used in a previous context.`));if(n.add(e.key),typeof e.resource!="object")throw new d(h(`context[${t}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.resource.id&&typeof e.resource.id=="string"))throw new d(h(`context[${t}] is invalid. Resource must contain a valid string ID.`));if(!e.resource.resourceType)throw new d(h(`context[${t}] is invalid. Resource must contain a resource type. No resource type found.`));let i=e.resource.resourceType;if(!$i(i))throw new d(h(`context[${t}] is invalid. Resource must contain a valid FHIRcast resource type. Resource type is not a known resource type.`));let o=Bi[r],s=qi[r],a;if(t<o.length?a=o[t]:t-o.length<s.length&&(a=s[t-o.length]),a&&i!==a)throw new d(h(`context[${t}] is invalid. context[${t}] for the '${r}' event should contain resource of type ${a}.`));let c=ji[i];if(c!==e.key)throw new d(h(`context[${t}] is invalid. Context key for type ${i} must be ${c}.`))}function Qi(r,e){let t=new Set;for(let n=0;n<e.length;n++)Hi(r,e[n],n,t)}function Hr(r,e,t){if(!(r&&typeof r=="string"))throw new d(h("Must provide a topic."));if(!kt[e])throw new d(h(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(kt).join(", ")}`));if(typeof t!="object")throw new d(h("context must be a context object or array of context objects."));let n=Array.isArray(t)?t:[t];return Qi(e,n),{timestamp:new Date().toISOString(),id:pe(),event:{"hub.topic":r,"hub.event":e,context:n}}}var Ge=class extends We{constructor(t){super();if(this.subRequest=t,!t.endpoint)throw new d(h("Subscription request should contain an endpoint."));if(!Ke(t))throw new d(h("Subscription request failed validation."));let n=new WebSocket(t.endpoint);n.addEventListener("open",()=>{this.dispatchEvent({type:"connect"}),n.addEventListener("message",i=>{let o=JSON.parse(i.data);if(o["hub.topic"])return;let s=o;this.dispatchEvent({type:"message",payload:s}),n.send(JSON.stringify({id:o?.id,timestamp:new Date().toISOString()}))}),n.addEventListener("close",()=>{this.dispatchEvent({type:"disconnect"})})}),this.websocket=n}disconnect(){this.websocket.close()}};function Wi(r){let e=r.replace(/-/g,"+").replace(/_/g,"/"),t=Mr(e),n=Array.from(t).reduce((o,s)=>{let a=("00"+s.charCodeAt(0).toString(16)).slice(-2);return`${o}%${a}`},""),i=decodeURIComponent(n);return JSON.parse(i)}function Qr(r){return r.split(".").length===3}function Dt(r){let[e,t,n]=r.split(".");return Wi(t)}function Wr(r){try{return typeof Dt(r).login_id=="string"}catch{return!1}}var Gi,C=class{constructor(e){this[Gi]="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)}};Gi=Symbol.toStringTag;var ze=class{constructor(){this.storage=typeof localStorage<"u"?localStorage:new Vt}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?Qt(t):void 0)}},Vt=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]}};var Ic="2.1.6-54b1ecf5",Ki="https://api.medplum.com/",zi=1e3,Ji=6e4,Gr="Binary/",Kr={resourceType:"Device",id:"system",deviceName:[{name:"System"}]},Yi=(o=>(o.ClientCredentials="client_credentials",o.AuthorizationCode="authorization_code",o.RefreshToken="refresh_token",o.JwtBearer="urn:ietf:params:oauth:grant-type:jwt-bearer",o.TokenExchange="urn:ietf:params:oauth:grant-type:token-exchange",o))(Yi||{}),Xi=(o=>(o.AccessToken="urn:ietf:params:oauth:token-type:access_token",o.RefreshToken="urn:ietf:params:oauth:token-type:refresh_token",o.IdToken="urn:ietf:params:oauth:token-type:id_token",o.Saml1Token="urn:ietf:params:oauth:token-type:saml1",o.Saml2Token="urn:ietf:params:oauth:token-type:saml2",o))(Xi||{}),Zi=(e=>(e.JwtBearer="urn:ietf:params:oauth:client-assertion-type:jwt-bearer",e))(Zi||{}),zr=class extends fe{constructor(t){super();if(t?.baseUrl&&!t.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");if(this.options=t??{},this.fetch=t?.fetch??eo(),this.storage=t?.storage??new ze,this.createPdfImpl=t?.createPdf,this.baseUrl=Yr(t?.baseUrl??Ki),this.fhirBaseUrl=Yr(Je(this.baseUrl,t?.fhirUrlPath??"fhir/R4/")),this.authorizeUrl=Je(this.baseUrl,t?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=Je(this.baseUrl,t?.tokenUrl??"oauth2/token"),this.logoutUrl=Je(this.baseUrl,t?.logoutUrl??"oauth2/logout"),this.clientId=t?.clientId??"",this.clientSecret=t?.clientSecret??"",this.onUnauthenticated=t?.onUnauthenticated,this.cacheTime=t?.cacheTime??Ji,this.cacheTime>0?this.requestCache=new Qe(t?.resourceCacheSize??zi):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);else{let n=this.getActiveLogin();n&&(this.setAccessToken(n.accessToken,n.refreshToken),this.refreshProfile().catch(console.log))}this.setupStorageListener()}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}clear(){this.storage.clear(),this.clearActiveLogin()}clearActiveLogin(){this.storage.setString("activeLogin",void 0),this.requestCache?.clear(),this.accessToken=void 0,this.refreshToken=void 0,this.sessionDetails=void 0,this.medplumServer=void 0,this.dispatchEvent({type:"change"})}invalidateUrl(t){t=t.toString(),this.requestCache?.delete(t)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(t){let n=this.fhirBaseUrl+t;if(this.requestCache)for(let i of this.requestCache.keys())(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache.delete(i)}get(t,n={}){t=t.toString();let i=this.getCacheEntry(t,n);if(i)return i.value;let o;t.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue?o=new Promise((a,c)=>{this.autoBatchQueue.push({method:"GET",url:t.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:c}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):o=this.request("GET",t,n);let s=new C(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,F.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)return this.processCode(i);await this.requestAuthorization(t)}signOutWithRedirect(){window.location.assign(this.logoutUrl)}async signInWithExternalAuth(t,n,i,o){let s=await this.ensureCodeChallenge(o);window.location.assign(this.getExternalAuthRedirectUri(t,n,i,s))}async exchangeExternalAccessToken(t,n){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");let i=new URLSearchParams;return i.set("grant_type","urn:ietf:params:oauth:grant-type:token-exchange"),i.set("subject_token_type","urn:ietf:params:oauth:token-type:access_token"),i.set("client_id",n),i.set("subject_token",t),this.fetchTokens(i)}getExternalAuthRedirectUri(t,n,i,o){let{codeChallenge:s,codeChallengeMethod:a}=o;if(!a)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!s)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");let c=new URL(t);return c.searchParams.set("response_type","code"),c.searchParams.set("client_id",n),c.searchParams.set("redirect_uri",i),c.searchParams.set("scope","openid profile email"),c.searchParams.set("state",JSON.stringify(o)),c.searchParams.set("code_challenge_method",a),c.searchParams.set("code_challenge",s),c.toString()}fhirUrl(...t){return new URL(t.join("/"),this.fhirBaseUrl)}fhirSearchUrl(t,n){let i=this.fhirUrl(t);return n&&(i.search=new URLSearchParams(n).toString()),i}search(t,n,i){let o=this.fhirSearchUrl(t,n),s=o.toString()+"-search",a=this.getCacheEntry(s,i);if(a)return a.value;let c=new C((async()=>{let m=await this.get(o,i);if(m.entry)for(let p of m.entry)this.cacheResource(p.resource);return m})());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=o.toString()+"-searchOne",a=this.getCacheEntry(s,i);if(a)return a.value;let c=new C(this.search(t,o.searchParams,i).then(m=>m.entry?.[0]?.resource));return this.setCacheEntry(s,c),c}searchResources(t,n,i){let s=this.fhirSearchUrl(t,n).toString()+"-searchResources",a=this.getCacheEntry(s,i);if(a)return a.value;let c=new C(this.search(t,n,i).then(Zr));return this.setCacheEntry(s,c),c}async*searchResourcePages(t,n,i){let o=this.fhirSearchUrl(t,n);for(;o;){let s=new URL(o).searchParams,a=await this.search(t,s,i),c=a.link?.find(m=>m.relation==="next");if(!a.entry?.length&&!c)break;yield Zr(a),o=c?.url?new URL(c.url):void 0}}searchValueSet(t,n,i){let o=this.fhirUrl("ValueSet","$expand");return o.searchParams.set("url",t),o.searchParams.set("filter",n),this.get(o.toString(),i)}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 Kr;let[i,o]=n.split("/");if(!(!i||!o))return this.getCached(i,o)}readResource(t,n,i){return this.get(this.fhirUrl(t,n),i)}readReference(t,n){let i=t.reference;if(!i)return new C(Promise.reject(new Error("Missing reference")));if(i==="system")return new C(Promise.resolve(Kr));let[o,s]=i.split("/");return!o||!s?new C(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}requestSchema(t){if(vr(t))return Promise.resolve();let n=t+"-requestSchema",i=this.getCacheEntry(n,void 0);if(i)return i.value;let o=new C((async()=>{let s=`{
|
|
4
4
|
StructureDefinitionList(name: "${t}") {
|
|
5
5
|
resourceType,
|
|
6
6
|
name,
|
|
@@ -37,5 +37,5 @@ var Ze="ok",et="created",tt="gone",rt="not-modified",nt="not-found",qt="unauthor
|
|
|
37
37
|
expression,
|
|
38
38
|
target
|
|
39
39
|
}
|
|
40
|
-
}`.replace(/\s+/g," "),a=await this.graphql(s);xr(a.data.StructureDefinitionList);for(let c of a.data.SearchParameterList)St(c)})());return this.setCacheEntry(n,o),o}readHistory(t,n,i){return this.get(this.fhirUrl(t,n,"_history"),i)}readVersion(t,n,i,o){return this.get(this.fhirUrl(t,n,"_history",i),o)}readPatientEverything(t,n){return this.get(this.fhirUrl("Patient",t,"$everything"),n)}createResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");return this.invalidateSearches(t.resourceType),this.post(this.fhirUrl(t.resourceType),t,void 0,n)}async createResourceIfNoneExist(t,n,i){return await this.searchOne(t.resourceType,n,i)??this.createResource(t,i)}async createAttachment(t,n,i,o){let s=await this.createBinary(t,n,i,o);return{contentType:i,url:s.url,title:n}}createBinary(t,n,i,o){let s=this.fhirUrl("Binary");return n&&s.searchParams.set("_filename",n),o?this.uploadwithProgress(s,t,i,o):this.post(s,t,i)}uploadwithProgress(t,n,i,o){return new Promise((s,a)=>{let c=new XMLHttpRequest;c.responseType="json",c.onabort=()=>a(new Error("Request aborted")),c.onerror=()=>a(new Error("Request error")),o&&(c.upload.onprogress=m=>o(m),c.upload.onload=m=>o(m)),c.onload=()=>{c.status>=200&&c.status<300?s(c.response):a(new Error(c.statusText))},c.open("POST",t),c.withCredentials=!0,c.setRequestHeader("Authorization","Bearer "+this.accessToken),c.setRequestHeader("Cache-Control","no-cache, no-store, max-age=0"),c.setRequestHeader("Content-Type",i),c.setRequestHeader("X-Medplum","extended"),c.send(n)})}async createPdf(t,n,i,o){if(!this.createPdfImpl)throw new Error("PDF creation not enabled");let s=await this.createPdfImpl(t,i,o);return this.createBinary(s,n,"application/pdf")}createComment(t,n,i){let o=this.getProfile(),s,a;return t.resourceType==="Encounter"&&(s=K(t),a=t.subject),t.resourceType==="ServiceRequest"&&(s=t.encounter,a=t.subject),t.resourceType==="Patient"&&(a=K(t)),this.createResource({resourceType:"Communication",basedOn:[K(t)],encounter:s,subject:a,sender:o?K(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");this.invalidateSearches(t.resourceType);let i=await this.put(this.fhirUrl(t.resourceType,t.id),t,void 0,n);return i||(i=t),this.cacheResource(i),i}patchResource(t,n,i,o){return this.invalidateSearches(t),this.patch(this.fhirUrl(t,n),i,o)}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")+`?identifier=${a.system}|${a.value}`}return this.post(s,n,i,o)}executeBatch(t,n){return this.post(this.fhirBaseUrl.slice(0,-1),t,void 0,n)}sendEmail(t,n){return this.post("email/v1/send",t,F.JSON,n)}graphql(t,n,i,o){return this.post(this.fhirUrl("$graphql"),{query:t,operationName:n,variables:i},F.JSON,o)}readResourceGraph(t,n,i,o){return this.get(`${this.fhirUrl(t,n)}/$graph?graph=${i}`,o)}pushToAgent(t,n,i,o){return this.post(this.fhirUrl("Agent",t.id,"$push"),n,i,o)}getActiveLogin(){return this.storage.getObject("activeLogin")}async setActiveLogin(t){this.clearActiveLogin(),this.setAccessToken(t.accessToken,t.refreshToken),this.storage.setObject("activeLogin",t),this.addLogin(t),this.refreshPromise=void 0,await this.refreshProfile()}getAccessToken(){return this.accessToken}setAccessToken(t,n){this.accessToken=t,this.refreshToken=n,this.sessionDetails=void 0,this.medplumServer=Wr(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").then(i=>{this.profilePromise=void 0,this.sessionDetails=i,this.dispatchEvent({type:"change"}),t(i.profile)}).catch(n)}),this.profilePromise):Promise.resolve(void 0)}isLoading(){return!!this.profilePromise}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();return i.startsWith(Gr)&&(t=this.fhirUrl(i)),this.addFetchOptionsDefaults(n),(await this.fetchWithRetry(t.toString(),n)).blob()}async uploadMedia(t,n,i,o,s){let a=await this.createBinary(t,i,n);return this.createResource({...o,resourceType:"Media",content:{contentType:n,url:Gr+a.id,title:i}},s)}async bulkExport(t="",n,i,o){let s=t&&`${t}/`,a=this.fhirUrl(`${s}$export`);return n&&a.searchParams.set("_type",n),i&&a.searchParams.set("_since",i),this.startAsyncRequest(a.toString(),o)}async startAsyncRequest(t,n={}){this.addFetchOptionsDefaults(n);let i=n.headers;i.Prefer="respond-async";let o=await this.fetchWithRetry(t,n);if(o.status===202){let s=await Xr(o);if(s)return this.pollStatus(s)}return this.parseResponse(o,"POST",t)}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 C(Promise.resolve(t)))}deleteCacheEntry(t){this.requestCache&&this.requestCache.delete(t)}async request(t,n,i={}){this.refreshPromise&&await this.refreshPromise,i.method=t,this.addFetchOptionsDefaults(i);let o=await this.fetchWithRetry(n,i);return this.parseResponse(o,t,n,i)}async parseResponse(t,n,i,o={}){if(t.status===401)return this.handleUnauthenticated(n,i,o);if(t.status===204||t.status===304)return;let a=t.headers.get("content-type")?.includes("json");if(t.status===404&&!a)throw new d(Ht);let c=t.headers.get("content-location"),m=o.redirect??this.options.redirect;if(t.status===201&&c&&m==="follow")return this.request("GET",c,{...o,body:void 0});let p;if(a)try{p=await t.json()}catch(q){throw console.error("Error parsing response",t.status,q),q}else p=await t.text();if(t.status>=400)throw new d(ot(p));return p}async fetchWithRetry(t,n){t.startsWith("http")||(t=new URL(t,this.baseUrl).href);let i=3,o=200,s;for(let a=0;a<i;a++){try{if(this.options.verbose&&this.logRequest(t,n),s=await this.fetch(t,n),this.options.verbose&&this.logResponse(s),s.status<500)return s}catch(c){this.retryCatch(a,i,c)}await ut(o)}return s}logRequest(t,n){if(console.log(`> ${n.method} ${t}`),n.headers){let i=n.headers,o=Object.entries(i).sort((s,a)=>s[0].localeCompare(a[0]));for(let[s,a]of o)console.log(`> ${s}: ${a}`)}}logResponse(t){console.log(`< ${t.status} ${t.statusText}`),t.headers&&t.headers.forEach((n,i)=>console.log(`< ${i}: ${n}`))}async pollStatus(t){let n=!0,i,o=2e3;for(;n;){let s={};this.addFetchOptionsDefaults(s);let a=await this.fetchWithRetry(t,s);if(a.status!==202&&(n=!1,i=a,a.status===201)){let c=await Xr(a);c&&(i=await this.fetchWithRetry(c,s))}await ut(o)}return this.parseResponse(i,"POST",t)}async executeAutoBatch(){let t=[...this.autoBatchQueue];if(this.autoBatchQueue.length=0,this.autoBatchTimerId=void 0,t.length===1){let o=t[0];try{o.resolve(await this.request(o.method,this.fhirBaseUrl+o.url,o.options))}catch(s){o.reject(new d(ot(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.slice(0,-1),n);for(let o=0;o<t.length;o++){let s=t[o],a=i.entry?.[o];a?.response?.outcome&&!it(a.response.outcome)?s.reject(new d(a.response.outcome)):s.resolve(a?.resource)}}addFetchOptionsDefaults(t){let n=t.headers;n||(n={},t.headers=n),n.Accept=F.FHIR_JSON,n["X-Medplum"]="extended",t.body&&!n["Content-Type"]&&(n["Content-Type"]=F.FHIR_JSON),this.accessToken?n.Authorization="Bearer "+this.accessToken:this.basicAuth&&(n.Authorization="Basic "+this.basicAuth),t.cache||(t.cache="no-cache"),t.credentials||(t.credentials="include")}setRequestContentType(t,n){t.headers||(t.headers={});let i=t.headers;i["Content-Type"]=n}setRequestBody(t,n){typeof n=="string"||typeof Blob<"u"&&n instanceof Blob||typeof File<"u"&&n instanceof File||typeof Uint8Array<"u"&&n instanceof Uint8Array?t.body=n:n&&(t.body=JSON.stringify(n))}handleUnauthenticated(t,n,i){return this.refresh()?this.request(t,n,i):(this.clearActiveLogin(),this.onUnauthenticated&&this.onUnauthenticated(),Promise.reject(new Error("Unauthenticated")))}async startPkce(){let t=It();sessionStorage.setItem("pkceState",t);let n=It();sessionStorage.setItem("codeVerifier",n);let i=await qr(n),o=nr(i).replaceAll("+","-").replaceAll("/","_").replaceAll("=","");return sessionStorage.setItem("codeChallenge",o),{codeChallengeMethod:"S256",codeChallenge:o}}async requestAuthorization(t){let n=await this.ensureCodeChallenge(t??{}),i=new URL(this.authorizeUrl);i.searchParams.set("response_type","code"),i.searchParams.set("state",sessionStorage.getItem("pkceState")),i.searchParams.set("client_id",n.clientId??this.clientId),i.searchParams.set("redirect_uri",n.redirectUri??Jr()),i.searchParams.set("code_challenge_method",n.codeChallengeMethod),i.searchParams.set("code_challenge",n.codeChallenge),i.searchParams.set("scope",n.scope??"openid profile"),window.location.assign(i.toString())}processCode(t,n){let i=new URLSearchParams;if(i.set("grant_type","authorization_code"),i.set("code",t),i.set("client_id",n?.clientId??this.clientId),i.set("redirect_uri",n?.redirectUri??Jr()),typeof sessionStorage<"u"){let o=sessionStorage.getItem("codeVerifier");o&&i.set("code_verifier",o)}return this.fetchTokens(i)}refresh(){if(this.refreshPromise)return this.refreshPromise;if(this.refreshToken){let t=new URLSearchParams;return t.set("grant_type","refresh_token"),t.set("client_id",this.clientId),t.set("refresh_token",this.refreshToken),this.refreshPromise=this.fetchTokens(t),this.refreshPromise}if(this.clientId&&this.clientSecret)return this.refreshPromise=this.startClientLogin(this.clientId,this.clientSecret),this.refreshPromise}async startClientLogin(t,n){this.clientId=t,this.clientSecret=n;let i=new URLSearchParams;return i.set("grant_type","client_credentials"),i.set("client_id",t),i.set("client_secret",n),this.fetchTokens(i)}async startJwtBearerLogin(t,n,i){this.clientId=t;let o=new URLSearchParams;return o.set("grant_type","urn:ietf:params:oauth:grant-type:jwt-bearer"),o.set("client_id",t),o.set("assertion",n),o.set("scope",i),this.fetchTokens(o)}async startJwtAssertionLogin(t){let n=new URLSearchParams;return n.append("grant_type","client_credentials"),n.append("client_assertion_type","urn:ietf:params:oauth:client-assertion-type:jwt-bearer"),n.append("client_assertion",t),this.fetchTokens(n)}setBasicAuth(t,n){this.clientId=t,this.clientSecret=n,this.basicAuth=Br(t+":"+n)}async fhircastSubscribe(t,n){if(!(typeof t=="string"&&t!==""))throw new d(h("Invalid topic provided. Topic must be a valid string."));if(!(typeof n=="object"&&Array.isArray(n)&&n.length>0))throw new d(h("Invalid events provided. Events must be an array of event names containing at least one event."));let i={channelType:"websocket",mode:"subscribe",topic:t,events:n},s=(await this.post("/fhircast/STU2",Ot(i),F.FORM_URL_ENCODED))["hub.channel.endpoint"];if(!s)throw new Error("Invalid response!");return i.endpoint=s,i}async fhircastUnsubscribe(t){if(!Ge(t))throw new d(h("Invalid topic or subscriptionRequest. SubscriptionRequest must be an object."));if(!(t.endpoint&&typeof t.endpoint=="string"&&t.endpoint.startsWith("ws")))throw new d(h("Provided subscription request must have an endpoint in order to unsubscribe."));t.mode="unsubscribe",await this.post("/fhircast/STU2",Ot(t),F.FORM_URL_ENCODED)}fhircastConnect(t){return new We(t)}async fhircastPublish(t,n,i){return this.post(`/fhircast/STU2/${t}`,Hr(t,n,i),F.JSON)}async invite(t,n){return this.post("admin/projects/"+t+"/invite",n)}async fetchTokens(t){let n={method:"POST",headers:{"Content-Type":F.FORM_URL_ENCODED},body:t.toString(),credentials:"include"},i=n.headers;this.basicAuth&&(i.Authorization=`Basic ${this.basicAuth}`);let o=await this.fetchWithRetry(this.tokenUrl,n);if(!o.ok){this.clearActiveLogin();try{let a=await o.json();throw new d(O(a.error_description))}catch(a){throw new d(O("Failed to fetch tokens"),a)}}let s=await o.json();return await this.verifyTokens(s),this.getProfile()}async verifyTokens(t){let n=t.access_token;if(Qr(n)){let i=Dt(n);if(Date.now()>=i.exp*1e3)throw this.clearActiveLogin(),new Error("Token expired");if(i.cid){if(i.cid!==this.clientId)throw this.clearActiveLogin(),new Error("Token was not issued for this audience")}else if(this.clientId&&i.client_id!==this.clientId)throw this.clearActiveLogin(),new Error("Token was not issued for this audience")}return this.setActiveLogin({accessToken:n,refreshToken:t.refresh_token,project:t.project,profile:t.profile})}setupStorageListener(){try{window.addEventListener("storage",t=>{(t.key===null||t.key==="activeLogin")&&window.location.reload()})}catch{}}retryCatch(t,n,i){if(i.message==="Failed to fetch"&&t===1&&this.dispatchEvent({type:"offline"}),t>=n-1)throw i}};function eo(){if(!globalThis.fetch)throw new Error("Fetch not available in this environment");return globalThis.fetch.bind(globalThis)}function Jr(){return typeof window>"u"?"":window.location.protocol+"//"+window.location.host+"/"}function Yr(r){return r.endsWith("/")?r:r+"/"}function ze(r,e){return new URL(e,r).toString()}async function Xr(r){let e=r.headers.get("content-location");if(e)return e;let t=r.headers.get("location");if(t)return t;let n=await r.json();if(ye(n)&&n.issue?.[0]?.diagnostics)return n.issue[0].diagnostics}function Zr(r){let e=r.entry?.map(t=>t.resource)??[];return Object.assign(e,{bundle:r})}var en="http://unitsofmeasure.org",kc="http://loinc.org",Oc="http://snomed.info/sct",Dc="http://www.nlm.nih.gov/research/umls/rxnorm",Vc="http://www.ama-assn.org/go/cpt",_c="http://hl7.org/fhir/sid/icd-10";var to=[...ce,"->","<<",">>"];function tn(r){return new W(r,ae,to).tokenize()}var _t=class{constructor(e){this.parser=e;this.structureMap={resourceType:"StructureMap"}}parse(){for(this.parser.consume("Symbol","map"),this.structureMap.url=this.parser.consume("String").value,this.parser.consume("="),this.structureMap.name=this.parser.consume().value;this.parser.hasMore();){let e=this.parser.peek()?.value;switch(e){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}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(){let e=[this.parseRuleSource()];for(;this.parser.hasMore()&&this.parser.peek()?.value===",";)this.parser.consume(","),e.push(this.parseRuleSource());return e}parseRuleSource(){let e={},t=this.parseRuleContext();if(t.includes(".")){let n=t.split(".");e.context=n[0],e.element=n[1]}else e.context=t;if(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("default"),this.parser.consumeAndParse()),(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==="where"){this.parser.consume("Symbol","where");let n=this.parser.consumeAndParse(f.Arrow);e.condition=n.toString()}if(this.parser.peek()?.value==="check"){this.parser.consume("Symbol","check");let n=this.parser.consumeAndParse(f.Arrow);e.check=n.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={},t=this.parseRuleContext();if(t.includes(".")){let n=t.split(".");e.contextType="variable",e.context=n[0],e.element=n[1]}else e.context=t;return 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==="first"||this.parser.peek()?.value==="share"||this.parser.peek()?.value==="last"||this.parser.peek()?.value==="collate")&&(e.listMode=[this.parser.consume().value]),e}parseRuleTargetTransform(e){e.transform="copy";let t=this.parser.consumeAndParse(f.As);if(t instanceof M)this.parseRuleTargetSymbol(e,t);else if(t instanceof B)this.parseRuleTargetFunction(e,t);else if(t instanceof k)this.parseRuleTargetLiteral(e,t);else throw new Error(`Unexpected FHIRPath: ${t}`)}parseRuleTargetSymbol(e,t){e.parameter=[{valueId:t.name}]}parseRuleTargetFunction(e,t){let n=t.name;switch(n){case"create":e.parameter=[{valueString:t.args[0].value.value}];break;case"translate":e.parameter=[{}];break;default:throw new Error("Unknown target function: "+n)}}parseRuleTargetLiteral(e,t){switch(t.value.type){case"boolean":e.parameter=[{valueBoolean:t.value.value}];break;case"decimal":e.parameter=[{valueDecimal:t.value.value}];break;case"string":e.parameter=[{valueString:t.value.value}];break;default:throw new Error("Unknown target literal type: "+t.value.type)}}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(f.Arrow);return[{name:e.name,variable:e.args.map(t=>t.name)}]}parseConceptMap(){for(;this.parser.peek()?.value!=="}";)this.parser.consume();this.parser.consume("}")}},ro=ue().registerInfix("->",{precedence:f.Arrow}).registerInfix(";",{precedence:f.Semicolon});function jc(r){let e=ro.construct(tn(r));return e.removeComments(),new _t(e).parse()}var no=[...ce,"eq","ne","co"];function rn(r){return new W(r,ae,no,{dateTimeLiterals:!0,symbolRegex:/[^\s\])]/}).tokenize()}var Je=class{constructor(e,t,n){this.path=e;this.operator=t;this.value=n}},Ye=class{constructor(e){this.child=e}},Xe=class{constructor(e,t,n){this.keyword=e;this.left=t;this.right=n}};var io={eq:"eq",ne:"ne",co:"contains",sw:void 0,ew:void 0,gt:"gt",lt:"lt",ge:"ge",le:"le",ap:"ap",sa:"sa",eb:"eb",pr:"missing",po:void 0,ss:void 0,sb:void 0,in:"in",ni:"not-in",re:void 0,identifier:"identifier"};function oo(r){let e=io[r];if(!e)throw new d(O("Invalid operator: "+r));return e}var Ut=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 Ye(this.parse()),this.parser.consume(")")):e=new Je(this.parser.consume("Symbol").value,oo(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 Xe(t,e,this.parse())):e}},so=ue();function tu(r){let e=so.construct(rn(r));return e.removeComments(),new Ut(e).parse()}var G=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}},nn=class r{constructor(e,t=new G){this.context=t,this.segments=e}get header(){return this.segments[0]}get(e){return this.getSegment(e)}getAll(e){return this.getAllSegments(e)}getSegment(e){return typeof e=="number"?this.segments[e]:this.segments.find(t=>t.name===e)}getAllSegments(e){return this.segments.filter(t=>t.name===e)}toString(){return this.segments.map(e=>e.toString()).join(this.context.segmentSeparator)}buildAck(){let e=new Date,t=this.getSegment("MSH"),n=t?.getField(3)?.toString()??"",i=t?.getField(4)?.toString()??"",o=t?.getField(5)?.toString()??"",s=t?.getField(6)?.toString()??"",a=t?.getField(10)?.toString()??"",c=t?.getField(12)?.toString()??"2.5.1";return new r([new me(["MSH",this.context.getMsh2(),o,s,n,i,co(e),"",this.buildAckMessageType(t),e.getTime().toString(),"P",c],this.context),new me(["MSA","AA",a,"OK"],this.context)])}buildAckMessageType(e){let t=e?.getField(9),n=t?.getComponent(2),i=t?.getComponent(3),o="ACK";return n&&i?o=`ACK^${n}^ACK`:n&&(o=`ACK^${n}`),o}static parse(e){if(!e.startsWith("MSH")){let n=new Error("Invalid HL7 message");throw n.type="entity.parse.failed",n}let t=new G("\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=>me.parse(n,t)),t)}},me=class r{constructor(e,t=new G){this.context=t,er(e)?this.fields=e.map(n=>oe.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 oe([[this.context.getMsh1()]],this.context);if(e===2)return new oe([[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 G){return new r(e.split(t.fieldSeparator).map(n=>oe.parse(n,t)),t)}},oe=class r{constructor(e,t=new G){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 G){return new r(e.split(t.repetitionSeparator).map(n=>n.split(t.componentSeparator)),t)}};function iu(r,e){if(!r)return;let t=Z(r.slice(0,4),0),n=Z(r.slice(4,6),1)-1,i=Z(r.slice(6,8),1),o=Z(r.slice(8,10),0),s=Z(r.slice(10,12),0),a=Z(r.slice(12,14),0),c=0;r.includes(".")&&(c=Z(r.slice(15,19),0));let m=new Date(Date.UTC(t,n,i,o,s,a,c)),p=ao(r,e?.tzOffset);return p!==0&&(m=new Date(m.getTime()-p)),m.toISOString()}function Z(r,e){let t=parseInt(r,10);return isNaN(t)?e:t}function ao(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 co(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}function cu(r){if(!r)throw new d(h("Resource type is null"));if(!br(r))throw new d(h("Unknown resource type"))}function on(r,e,t){r===null?t.push(y(e,"Invalid null value")):Array.isArray(r)?uo(r,e,t):typeof r=="object"&&lo(r,e,t)}function uo(r,e,t){for(let n=0;n<r.length;n++)r[n]===void 0?t.push(y(`${e}[${n}]`,"Invalid undefined value")):on(r[n],`${e}[${n}]`,t)}function lo(r,e,t){for(let[n,i]of Object.entries(r))on(i,`${e}${e?".":""}${n}`,t)}function lu(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 Ft(r,e,t,n){new Lt(r,e,t,n).crawl()}var Lt=class{constructor(e,t,n,i){this.rootResource=e,this.visitor=t,n?this.schema=n:this.schema=te(e.resourceType),i?this.initialPath=i:this.initialPath=e.resourceType}crawl(){this.crawlObject(T(this.rootResource),this.schema,this.initialPath)}crawlObject(e,t,n){let i=_(e.value);i&&this.visitor.onEnterResource&&this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&this.visitor.onEnterObject(n,e,t);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=Nt(e,t);this.visitor.visitProperty&&this.visitor.visitProperty(e,t,i,o,n);for(let s of o)if(s)for(let a of Se(s))this.crawlPropertyValue(a,i)}crawlPropertyValue(e,t){if(!ve(e.type.charAt(0))){let n=te(e.type);this.crawlObject(e,n,t)}}};function Nt(r,e){if(e==="$this")return[r];let[t,...n]=e.split("."),i=[w(r,t)];for(let o of n){let s=[];for(let a of i)if(Array.isArray(a))for(let c of a)s.push(w(c,o));else a!==void 0&&s.push(w(a,o));i=s}return i}var sn={base64Binary:"string",boolean:"boolean",canonical:"string",code:"string",date:"string",dateTime:"string",decimal:"number",id:"string",instant:"string",integer:"number",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={base64Binary:/^([A-Za-z\d+/]{4})*([A-Za-z\d+/]{2}==|[A-Za-z\d+/]{3}=)?$/,canonical:/^\S*$/,code:/^[^\s]+( [^\s]+)*$/,date:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1]))?)?$/,dateTime:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1])(T([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?)?)?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00)?)?)?$/,id:/^[A-Za-z0-9\-.]{1,64}$/,instant:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])T([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00))$/,markdown:/^[\s\S]+$/,oid:/^urn:oid:[0-2](\.(0|[1-9]\d*))+$/,string:/^[\s\S]+$/,time:/^([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?$/,uri:/^\S*$/,url:/^\S*$/,uuid:/^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,xhtml:/.*/},fo={"ele-1":!0};function Uu(r,e){new Mt(r.resourceType,r,e).validate()}var Mt=class{constructor(e,t,n){this.issues=[],this.rootResource=t,this.currentResource=[],n?this.schema=Tt(n):this.schema=te(e)}validate(){let e=this.rootResource.resourceType;if(!e)throw new d(h("Missing resource type"));Bt(this.rootResource,e,this.issues),Ft(this.rootResource,this,this.schema);let t=this.issues;if(this.issues=[],t.length>0)throw new d({resourceType:"OperationOutcome",issue:t})}onExitObject(e,t,n){this.checkAdditionalProperties(t,n.elements,e)}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(y(n,"Expected array of values for property"));return}c=a}else{if(Array.isArray(a)){this.issues.push(y(n,"Expected single value for property"));return}c=[a]}(c.length<s.min||c.length>s.max)&&this.issues.push(y(n,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${c.length}`)),an(a,s)||this.issues.push(y(n,"Value did not match expected pattern"));let m=s.slicing?Object.fromEntries(s.slicing.slices.map(p=>[p.name,0])):void 0;for(let p of c){this.constraintsCheck(p,s,n),this.checkPropertyValue(p,n);let q=go(p,s.slicing);q&&m&&(m[q]+=1)}this.validateSlices(s.slicing?.slices,m,n)}}checkPresence(e,t,n){return e===void 0?(t.min>0&&this.issues.push(y(n,"Missing required property")),!1):b(e)?(this.issues.push(y(n,"Invalid empty value")),!1):!0}checkPropertyValue(e,t){ve(e.type.charAt(0))&&this.validatePrimitiveType(e,t)}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(y(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)for(let o of Object.keys(i))o!=="resourceType"&&!(o in t)&&!(o.startsWith("_")&&o.slice(1)in t)&&!ho(e,o,t)&&this.issues.push(y(`${n}.${o}`,`Invalid additional property "${o}"`))}constraintsCheck(e,t,n){let i=t.constraints;if(i){for(let o of i)if(o.severity==="error"&&!(o.key in fo)&&!this.isExpressionTrue(o,e,n)){this.issues.push(Gt(n,o));return}}}isExpressionTrue(e,t,n){try{let i=le(e.expression,[t],{context:t,resource:T(this.currentResource[this.currentResource.length-1]),rootResource:T(this.rootResource),ucum:T(en)});return i.length===1&&i[0].value===!0}catch(i){return this.issues.push(Kt(n,"Error evaluating invariant expression",i,{fhirpath:e.expression})),!1}}validatePrimitiveType(e,t){let[n,i]=xo(e);if(n){let{type:o,value:s}=n;if(!(o in sn)){this.issues.push(y(t,`Invalid JSON type: ${o} is not a valid FHIR type`));return}let a=sn[o];if(typeof s!==a){s!==null&&this.issues.push(y(t,`Invalid JSON type: expected ${a}, but got ${typeof s}`));return}a==="string"?this.validateString(s,o,t):a==="number"&&this.validateNumber(s,o,t)}i&&Ft(i.value,this,te("Element"),t)}validateString(e,t,n){if(!e.trim()){this.issues.push(y(n,"String must contain non-whitespace content"));return}let i=po[t];i&&!i.exec(e)&&this.issues.push(y(n,"Invalid "+t+" format"))}validateNumber(e,t,n){isNaN(e)||!isFinite(e)?this.issues.push(y(n,"Invalid numeric value")):mo(t)&&!Number.isInteger(e)?this.issues.push(y(n,"Expected number to be an integer")):t===u.positiveInt&&e<=0?this.issues.push(y(n,"Expected number to be positive")):t===u.unsignedInt&&e<0&&this.issues.push(y(n,"Expected number to be non-negative"))}};function mo(r){return r===u.integer||r===u.positiveInt||r===u.unsignedInt}function ho(r,e,t){e.startsWith("_")&&(e=e.slice(1));let n=e.split(/(?=[A-Z])/g),i="";for(let o of n)if(i+=o,t[i+"[x]"])return!!w(r,i);return!1}function Bt(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(y(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?t.push(y(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!r[s]?.[a]?t.push(y(`${o}[${a}]`,"Invalid null value")):i[a]&&Bt(i[a],`${o}[${a}]`,t);else typeof i=="object"&&Bt(i,o,t)}}function an(r,e){return e.pattern&&!Te(r,e.pattern)?!1:!(e.fixed&&!xe(r,e.fixed))}function yo(r,e,t){if(Array.isArray(r))return!1;let n=t.elements[e.path],i=t.type;switch(e.type){case"value":case"pattern":if(!r||!n)return!1;if(an(r,n))return!0;break;case"type":return!r||!i?.length?!1:i.some(o=>o.code===r.type)}return!1}function go(r,e){if(e){for(let t of e.slices)if(e.discriminator.every(n=>Se(Nt(r,n.path))?.some(i=>yo(i,n,t))))return t.name}}function xo(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}]}export{ki as AccessPolicyInteraction,Vc as CPT,Ke as ClientStorage,F as ContentType,Sa as DEFAULT_SEARCH_COUNT,fe as EventTarget,Je as FhirFilterComparison,Xe as FhirFilterConnective,Ye as FhirFilterNegation,We as FhircastConnection,G as Hl7Context,oe as Hl7Field,nn as Hl7Message,me as Hl7Segment,_c as ICD10,H as InfixOperatorAtom,kc as LOINC,He as LRUCache,wc as MEDPLUM_VERSION,zr as MedplumClient,Vt as MemoryStorage,Zi as OAuthClientAssertionType,Yi as OAuthGrantType,Xi as OAuthTokenType,d as OperationOutcomeError,ni as Operator,f as OperatorPrecedence,bt as Parser,Ce as ParserBuilder,Pe as PrefixOperatorAtom,u as PropertyType,Dc as RXNORM,C as ReadablePromise,Oc as SNOMED,Dr as SearchParameterType,Qe as TypedEventTarget,en as UCUM,Po as accepted,To as allOk,nr as arrayBufferToBase64,rr as arrayBufferToHex,Se as arrayify,Oo as assertOk,O as badRequest,l as booleanToTypedValue,Gn as buildTypeName,ge as calculateAge,No as calculateAgeString,Ma as canReadResourceType,Ba as canWriteResource,Di as canWriteResourceType,A as capitalize,on as checkForNull,ds as compressElement,za as convertContainedResourcesToBundle,_i as convertToTransactionBundle,Ft as crawlResource,Gt as createConstraintIssue,Hr as createFhircastMessagePayload,Kt as createProcessingIssue,K as createReference,y as createStructureIssue,vo as created,Mr as decodeBase64,ct as deepClone,xe as deepEquals,Te as deepIncludes,Br as encodeBase64,qr as encryptSHA256,ie as evalFhirPath,le as evalFhirPathTyped,ft as fhirPathArrayEquals,mt as fhirPathArrayEquivalent,fr as fhirPathEquals,qn as fhirPathEquivalent,Ee as fhirPathIs,pt as fhirPathNot,sn as fhirTypeToJsType,Go as findObservationInterval,Ko as findObservationReferenceRange,Zo as findResourceByCode,Ro as forbidden,rs as formatAddress,On as formatCodeableConcept,Dn as formatCoding,os as formatDate,lt as formatDateTime,is as formatFamilyName,ns as formatGivenName,co as formatHl7DateTime,be as formatHumanName,us as formatMoney,Vn as formatObservationValue,ss as formatPeriod,z as formatQuantity,cs as formatRange,Aa as formatSearchQuery,Pn as formatTime,as as formatTiming,pe as generateId,Tr as getAllDataTypes,Bo as getAllQuestionnaireAnswers,at as getCodeBySystem,te as getDataType,Fo as getDateProperty,pn as getDisplayString,Ae as getElementDefinition,xt as getElementDefinitionTypeName,Oa as getExpressionForResourceType,Ur as getExpressionsForResourceType,Ho as getExtension,jo as getExtensionValue,qo as getIdentifier,Lo as getImageSrc,Nt as getNestedProperty,Ls as getPropertyDisplayName,Mo as getQuestionnaireAnswers,It as getRandomString,Jt as getReferenceString,Vs as getResourceTypes,Us as getSearchParameter,Vr as getSearchParameterDetails,_s as getSearchParameters,ko as getStatus,w as getTypedPropertyValue,I as globalSchema,Eo as gone,St as indexSearchParameter,Ds as indexSearchParameterBundle,xr as indexStructureDefinitionBundle,ar as inflateBaseSchema,Fn as inflateElement,ue as initFhirPathParserBuilder,Co as isAccepted,jr as isCompletedSubscriptionRequest,vr as isDataTypeLoaded,b as isEmpty,$i as isFhircastResourceType,Io as isGone,Qr as isJwt,ve as isLowerCase,Wr as isMedplumAccessToken,wo as isNotFound,$ as isObject,it as isOk,ye as isOperationOutcome,$n as isPeriod,dn as isProfileResource,R as isQuantity,mr as isQuantityEquivalent,Er as isReference,_ as isResource,br as isResourceType,vt as isResourceTypeSchema,er as isStringArray,Qo as isUUID,dt as isValidDate,jn as loadDataType,Vi as matchesAccessPolicy,or as matchesRange,Lr as matchesSearchRequest,un as normalizeErrorString,ot as normalizeOperationOutcome,Ht as notFound,So as notModified,ln as operationOutcomeIssueToString,Wt as operationOutcomeToString,At as parseCriteriaAsSearchRequest,Rt as parseFhirPath,tu as parseFilterParameter,iu as parseHl7DateTime,Dt as parseJWTPayload,jc as parseMappingLanguage,Uo as parseReference,Ra as parseSearchDefinition,ba as parseSearchRequest,kr as parseSearchUrl,Tt as parseStructureDefinition,Ea as parseXFhirQuery,Jo as preciseEquals,Xo as preciseGreaterThan,An as preciseGreaterThanOrEquals,Yo as preciseLessThan,En as preciseLessThanOrEquals,zo as preciseRound,Ii as projectAdminResourceTypes,wi as protectedResourceTypes,Re as removeDuplicates,Li as reorderBundle,_o as resolveId,qa as satisfiedAccessPolicy,Ot as serializeFhircastSubscriptionRequest,Qt as serverError,Wo as setCodeBySystem,$o as setIdentifier,V as singleton,ut as sleep,lu as streamToBuffer,Zt as stringify,Ar as stringifyTypedValue,As as subsetResource,N as toJsBoolean,T as toTypedValue,Ao as tooManyRequests,Sr as tryGetDataType,bo as unauthorized,Uu as validate,Ge as validateFhircastSubscriptionRequest,cu as validateResourceType,h as validationError};
|
|
40
|
+
}`.replace(/\s+/g," "),a=await this.graphql(s);xr(a.data.StructureDefinitionList);for(let c of a.data.SearchParameterList)bt(c)})());return this.setCacheEntry(n,o),o}readHistory(t,n,i){return this.get(this.fhirUrl(t,n,"_history"),i)}readVersion(t,n,i,o){return this.get(this.fhirUrl(t,n,"_history",i),o)}readPatientEverything(t,n){return this.get(this.fhirUrl("Patient",t,"$everything"),n)}createResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");return this.invalidateSearches(t.resourceType),this.post(this.fhirUrl(t.resourceType),t,void 0,n)}async createResourceIfNoneExist(t,n,i){return await this.searchOne(t.resourceType,n,i)??this.createResource(t,i)}async createAttachment(t,n,i,o){let s=await this.createBinary(t,n,i,o);return{contentType:i,url:s.url,title:n}}createBinary(t,n,i,o){let s=this.fhirUrl("Binary");return n&&s.searchParams.set("_filename",n),o?this.uploadwithProgress(s,t,i,o):this.post(s,t,i)}uploadwithProgress(t,n,i,o){return new Promise((s,a)=>{let c=new XMLHttpRequest;c.responseType="json",c.onabort=()=>a(new Error("Request aborted")),c.onerror=()=>a(new Error("Request error")),o&&(c.upload.onprogress=m=>o(m),c.upload.onload=m=>o(m)),c.onload=()=>{c.status>=200&&c.status<300?s(c.response):a(new Error(c.statusText))},c.open("POST",t),c.withCredentials=!0,c.setRequestHeader("Authorization","Bearer "+this.accessToken),c.setRequestHeader("Cache-Control","no-cache, no-store, max-age=0"),c.setRequestHeader("Content-Type",i),c.setRequestHeader("X-Medplum","extended"),c.send(n)})}async createPdf(t,n,i,o){if(!this.createPdfImpl)throw new Error("PDF creation not enabled");let s=await this.createPdfImpl(t,i,o);return this.createBinary(s,n,"application/pdf")}createComment(t,n,i){let o=this.getProfile(),s,a;return t.resourceType==="Encounter"&&(s=K(t),a=t.subject),t.resourceType==="ServiceRequest"&&(s=t.encounter,a=t.subject),t.resourceType==="Patient"&&(a=K(t)),this.createResource({resourceType:"Communication",basedOn:[K(t)],encounter:s,subject:a,sender:o?K(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");this.invalidateSearches(t.resourceType);let i=await this.put(this.fhirUrl(t.resourceType,t.id),t,void 0,n);return i||(i=t),this.cacheResource(i),i}patchResource(t,n,i,o){return this.invalidateSearches(t),this.patch(this.fhirUrl(t,n),i,o)}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")+`?identifier=${a.system}|${a.value}`}return this.post(s,n,i,o)}executeBatch(t,n){return this.post(this.fhirBaseUrl.slice(0,-1),t,void 0,n)}sendEmail(t,n){return this.post("email/v1/send",t,F.JSON,n)}graphql(t,n,i,o){return this.post(this.fhirUrl("$graphql"),{query:t,operationName:n,variables:i},F.JSON,o)}readResourceGraph(t,n,i,o){return this.get(`${this.fhirUrl(t,n)}/$graph?graph=${i}`,o)}pushToAgent(t,n,i,o){return this.post(this.fhirUrl("Agent",t.id,"$push"),n,i,o)}getActiveLogin(){return this.storage.getObject("activeLogin")}async setActiveLogin(t){this.clearActiveLogin(),this.setAccessToken(t.accessToken,t.refreshToken),this.storage.setObject("activeLogin",t),this.addLogin(t),this.refreshPromise=void 0,await this.refreshProfile()}getAccessToken(){return this.accessToken}setAccessToken(t,n){this.accessToken=t,this.refreshToken=n,this.sessionDetails=void 0,this.medplumServer=Wr(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").then(i=>{this.profilePromise=void 0,this.sessionDetails=i,this.dispatchEvent({type:"change"}),t(i.profile)}).catch(n)}),this.profilePromise):Promise.resolve(void 0)}isLoading(){return!!this.profilePromise}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();return i.startsWith(Gr)&&(t=this.fhirUrl(i)),this.addFetchOptionsDefaults(n),(await this.fetchWithRetry(t.toString(),n)).blob()}async uploadMedia(t,n,i,o,s){let a=await this.createBinary(t,i,n);return this.createResource({...o,resourceType:"Media",content:{contentType:n,url:Gr+a.id,title:i}},s)}async bulkExport(t="",n,i,o){let s=t&&`${t}/`,a=this.fhirUrl(`${s}$export`);return n&&a.searchParams.set("_type",n),i&&a.searchParams.set("_since",i),this.startAsyncRequest(a.toString(),o)}async startAsyncRequest(t,n={}){this.addFetchOptionsDefaults(n);let i=n.headers;i.Prefer="respond-async";let o=await this.fetchWithRetry(t,n);if(o.status===202){let s=await Xr(o);if(s)return this.pollStatus(s)}return this.parseResponse(o,"POST",t)}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 C(Promise.resolve(t)))}deleteCacheEntry(t){this.requestCache&&this.requestCache.delete(t)}async request(t,n,i={}){this.refreshPromise&&await this.refreshPromise,i.method=t,this.addFetchOptionsDefaults(i);let o=await this.fetchWithRetry(n,i);return this.parseResponse(o,t,n,i)}async parseResponse(t,n,i,o={}){if(t.status===401)return this.handleUnauthenticated(n,i,o);if(t.status===204||t.status===304)return;let a=t.headers.get("content-type")?.includes("json");if(t.status===404&&!a)throw new d(lr);let c=t.headers.get("content-location"),m=o.redirect??this.options.redirect;if(t.status===201&&c&&m==="follow")return this.request("GET",c,{...o,body:void 0});let p;if(a)try{p=await t.json()}catch(q){throw console.error("Error parsing response",t.status,q),q}else p=await t.text();if(t.status>=400)throw new d(ht(p));return p}async fetchWithRetry(t,n){t.startsWith("http")||(t=new URL(t,this.baseUrl).href);let i=3,o=200,s;for(let a=0;a<i;a++){try{if(this.options.verbose&&this.logRequest(t,n),s=await this.fetch(t,n),this.options.verbose&&this.logResponse(s),s.status<500)return s}catch(c){this.retryCatch(a,i,c)}await nt(o)}return s}logRequest(t,n){if(console.log(`> ${n.method} ${t}`),n.headers){let i=n.headers,o=Object.entries(i).sort((s,a)=>s[0].localeCompare(a[0]));for(let[s,a]of o)console.log(`> ${s}: ${a}`)}}logResponse(t){console.log(`< ${t.status} ${t.statusText}`),t.headers&&t.headers.forEach((n,i)=>console.log(`< ${i}: ${n}`))}async pollStatus(t){let n=!0,i,o=2e3;for(;n;){let s={};this.addFetchOptionsDefaults(s);let a=await this.fetchWithRetry(t,s);if(a.status!==202&&(n=!1,i=a,a.status===201)){let c=await Xr(a);c&&(i=await this.fetchWithRetry(c,s))}await nt(o)}return this.parseResponse(i,"POST",t)}async executeAutoBatch(){let t=[...this.autoBatchQueue];if(this.autoBatchQueue.length=0,this.autoBatchTimerId=void 0,t.length===1){let o=t[0];try{o.resolve(await this.request(o.method,this.fhirBaseUrl+o.url,o.options))}catch(s){o.reject(new d(ht(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.slice(0,-1),n);for(let o=0;o<t.length;o++){let s=t[o],a=i.entry?.[o];a?.response?.outcome&&!mt(a.response.outcome)?s.reject(new d(a.response.outcome)):s.resolve(a?.resource)}}addFetchOptionsDefaults(t){let n=t.headers;n||(n={},t.headers=n),n.Accept=F.FHIR_JSON,n["X-Medplum"]="extended",t.body&&!n["Content-Type"]&&(n["Content-Type"]=F.FHIR_JSON),this.accessToken?n.Authorization="Bearer "+this.accessToken:this.basicAuth&&(n.Authorization="Basic "+this.basicAuth),t.cache||(t.cache="no-cache"),t.credentials||(t.credentials="include")}setRequestContentType(t,n){t.headers||(t.headers={});let i=t.headers;i["Content-Type"]=n}setRequestBody(t,n){typeof n=="string"||typeof Blob<"u"&&n instanceof Blob||typeof File<"u"&&n instanceof File||typeof Uint8Array<"u"&&n instanceof Uint8Array?t.body=n:n&&(t.body=JSON.stringify(n))}handleUnauthenticated(t,n,i){return this.refresh()?this.request(t,n,i):(this.clearActiveLogin(),this.onUnauthenticated&&this.onUnauthenticated(),Promise.reject(new Error("Unauthenticated")))}async startPkce(){let t=It();sessionStorage.setItem("pkceState",t);let n=It();sessionStorage.setItem("codeVerifier",n);let i=await qr(n),o=zt(i).replaceAll("+","-").replaceAll("/","_").replaceAll("=","");return sessionStorage.setItem("codeChallenge",o),{codeChallengeMethod:"S256",codeChallenge:o}}async requestAuthorization(t){let n=await this.ensureCodeChallenge(t??{}),i=new URL(this.authorizeUrl);i.searchParams.set("response_type","code"),i.searchParams.set("state",sessionStorage.getItem("pkceState")),i.searchParams.set("client_id",n.clientId??this.clientId),i.searchParams.set("redirect_uri",n.redirectUri??Jr()),i.searchParams.set("code_challenge_method",n.codeChallengeMethod),i.searchParams.set("code_challenge",n.codeChallenge),i.searchParams.set("scope",n.scope??"openid profile"),window.location.assign(i.toString())}processCode(t,n){let i=new URLSearchParams;if(i.set("grant_type","authorization_code"),i.set("code",t),i.set("client_id",n?.clientId??this.clientId),i.set("redirect_uri",n?.redirectUri??Jr()),typeof sessionStorage<"u"){let o=sessionStorage.getItem("codeVerifier");o&&i.set("code_verifier",o)}return this.fetchTokens(i)}refresh(){if(this.refreshPromise)return this.refreshPromise;if(this.refreshToken){let t=new URLSearchParams;return t.set("grant_type","refresh_token"),t.set("client_id",this.clientId),t.set("refresh_token",this.refreshToken),this.refreshPromise=this.fetchTokens(t),this.refreshPromise}if(this.clientId&&this.clientSecret)return this.refreshPromise=this.startClientLogin(this.clientId,this.clientSecret),this.refreshPromise}async startClientLogin(t,n){this.clientId=t,this.clientSecret=n;let i=new URLSearchParams;return i.set("grant_type","client_credentials"),i.set("client_id",t),i.set("client_secret",n),this.fetchTokens(i)}async startJwtBearerLogin(t,n,i){this.clientId=t;let o=new URLSearchParams;return o.set("grant_type","urn:ietf:params:oauth:grant-type:jwt-bearer"),o.set("client_id",t),o.set("assertion",n),o.set("scope",i),this.fetchTokens(o)}async startJwtAssertionLogin(t){let n=new URLSearchParams;return n.append("grant_type","client_credentials"),n.append("client_assertion_type","urn:ietf:params:oauth:client-assertion-type:jwt-bearer"),n.append("client_assertion",t),this.fetchTokens(n)}setBasicAuth(t,n){this.clientId=t,this.clientSecret=n,this.basicAuth=Br(t+":"+n)}async fhircastSubscribe(t,n){if(!(typeof t=="string"&&t!==""))throw new d(h("Invalid topic provided. Topic must be a valid string."));if(!(typeof n=="object"&&Array.isArray(n)&&n.length>0))throw new d(h("Invalid events provided. Events must be an array of event names containing at least one event."));let i={channelType:"websocket",mode:"subscribe",topic:t,events:n},s=(await this.post("/fhircast/STU2",Ot(i),F.FORM_URL_ENCODED))["hub.channel.endpoint"];if(!s)throw new Error("Invalid response!");return i.endpoint=s,i}async fhircastUnsubscribe(t){if(!Ke(t))throw new d(h("Invalid topic or subscriptionRequest. SubscriptionRequest must be an object."));if(!(t.endpoint&&typeof t.endpoint=="string"&&t.endpoint.startsWith("ws")))throw new d(h("Provided subscription request must have an endpoint in order to unsubscribe."));t.mode="unsubscribe",await this.post("/fhircast/STU2",Ot(t),F.FORM_URL_ENCODED)}fhircastConnect(t){return new Ge(t)}async fhircastPublish(t,n,i){return this.post(`/fhircast/STU2/${t}`,Hr(t,n,i),F.JSON)}async invite(t,n){return this.post("admin/projects/"+t+"/invite",n)}async fetchTokens(t){let n={method:"POST",headers:{"Content-Type":F.FORM_URL_ENCODED},body:t.toString(),credentials:"include"},i=n.headers;this.basicAuth&&(i.Authorization=`Basic ${this.basicAuth}`);let o=await this.fetchWithRetry(this.tokenUrl,n);if(!o.ok){this.clearActiveLogin();try{let a=await o.json();throw new d(_(a.error_description))}catch(a){throw new d(_("Failed to fetch tokens"),a)}}let s=await o.json();return await this.verifyTokens(s),this.getProfile()}async verifyTokens(t){let n=t.access_token;if(Qr(n)){let i=Dt(n);if(Date.now()>=i.exp*1e3)throw this.clearActiveLogin(),new Error("Token expired");if(i.cid){if(i.cid!==this.clientId)throw this.clearActiveLogin(),new Error("Token was not issued for this audience")}else if(this.clientId&&i.client_id!==this.clientId)throw this.clearActiveLogin(),new Error("Token was not issued for this audience")}return this.setActiveLogin({accessToken:n,refreshToken:t.refresh_token,project:t.project,profile:t.profile})}setupStorageListener(){try{window.addEventListener("storage",t=>{(t.key===null||t.key==="activeLogin")&&window.location.reload()})}catch{}}retryCatch(t,n,i){if(i.message==="Failed to fetch"&&t===1&&this.dispatchEvent({type:"offline"}),t>=n-1)throw i}};function eo(){if(!globalThis.fetch)throw new Error("Fetch not available in this environment");return globalThis.fetch.bind(globalThis)}function Jr(){return typeof window>"u"?"":window.location.protocol+"//"+window.location.host+"/"}function Yr(r){return r.endsWith("/")?r:r+"/"}function Je(r,e){return new URL(e,r).toString()}async function Xr(r){let e=r.headers.get("content-location");if(e)return e;let t=r.headers.get("location");if(t)return t;let n=await r.json();if(we(n)&&n.issue?.[0]?.diagnostics)return n.issue[0].diagnostics}function Zr(r){let e=r.entry?.map(t=>t.resource)??[];return Object.assign(e,{bundle:r})}var en="http://unitsofmeasure.org",Oc="http://loinc.org",Dc="http://snomed.info/sct",Vc="http://www.nlm.nih.gov/research/umls/rxnorm",_c="http://www.ama-assn.org/go/cpt",Uc="http://hl7.org/fhir/sid/icd-10";var to=[...ce,"->","<<",">>"];function tn(r){return new W(r,ae,to).tokenize()}var _t=class{constructor(e){this.parser=e;this.structureMap={resourceType:"StructureMap"}}parse(){for(this.parser.consume("Symbol","map"),this.structureMap.url=this.parser.consume("String").value,this.parser.consume("="),this.structureMap.name=this.parser.consume().value;this.parser.hasMore();){let e=this.parser.peek()?.value;switch(e){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}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(){let e=[this.parseRuleSource()];for(;this.parser.hasMore()&&this.parser.peek()?.value===",";)this.parser.consume(","),e.push(this.parseRuleSource());return e}parseRuleSource(){let e={},t=this.parseRuleContext();if(t.includes(".")){let n=t.split(".");e.context=n[0],e.element=n[1]}else e.context=t;if(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("default"),this.parser.consumeAndParse()),(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==="where"){this.parser.consume("Symbol","where");let n=this.parser.consumeAndParse(f.Arrow);e.condition=n.toString()}if(this.parser.peek()?.value==="check"){this.parser.consume("Symbol","check");let n=this.parser.consumeAndParse(f.Arrow);e.check=n.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={},t=this.parseRuleContext();if(t.includes(".")){let n=t.split(".");e.contextType="variable",e.context=n[0],e.element=n[1]}else e.context=t;return 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==="first"||this.parser.peek()?.value==="share"||this.parser.peek()?.value==="last"||this.parser.peek()?.value==="collate")&&(e.listMode=[this.parser.consume().value]),e}parseRuleTargetTransform(e){e.transform="copy";let t=this.parser.consumeAndParse(f.As);if(t instanceof M)this.parseRuleTargetSymbol(e,t);else if(t instanceof B)this.parseRuleTargetFunction(e,t);else if(t instanceof k)this.parseRuleTargetLiteral(e,t);else throw new Error(`Unexpected FHIRPath: ${t}`)}parseRuleTargetSymbol(e,t){e.parameter=[{valueId:t.name}]}parseRuleTargetFunction(e,t){let n=t.name;switch(n){case"create":e.parameter=[{valueString:t.args[0].value.value}];break;case"translate":e.parameter=[{}];break;default:throw new Error("Unknown target function: "+n)}}parseRuleTargetLiteral(e,t){switch(t.value.type){case"boolean":e.parameter=[{valueBoolean:t.value.value}];break;case"decimal":e.parameter=[{valueDecimal:t.value.value}];break;case"string":e.parameter=[{valueString:t.value.value}];break;default:throw new Error("Unknown target literal type: "+t.value.type)}}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(f.Arrow);return[{name:e.name,variable:e.args.map(t=>t.name)}]}parseConceptMap(){for(;this.parser.peek()?.value!=="}";)this.parser.consume();this.parser.consume("}")}},ro=ue().registerInfix("->",{precedence:f.Arrow}).registerInfix(";",{precedence:f.Semicolon});function Hc(r){let e=ro.construct(tn(r));return e.removeComments(),new _t(e).parse()}var no=[...ce,"eq","ne","co"];function rn(r){return new W(r,ae,no,{dateTimeLiterals:!0,symbolRegex:/[^\s\])]/}).tokenize()}var Ye=class{constructor(e,t,n){this.path=e;this.operator=t;this.value=n}},Xe=class{constructor(e){this.child=e}},Ze=class{constructor(e,t,n){this.keyword=e;this.left=t;this.right=n}};var io={eq:"eq",ne:"ne",co:"contains",sw:void 0,ew:void 0,gt:"gt",lt:"lt",ge:"ge",le:"le",ap:"ap",sa:"sa",eb:"eb",pr:"missing",po:void 0,ss:void 0,sb:void 0,in:"in",ni:"not-in",re:"eq",identifier:"identifier"};function oo(r){let e=io[r];if(!e)throw new d(_("Invalid operator: "+r));return e}var Ut=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 Xe(this.parse()),this.parser.consume(")")):e=new Ye(this.parser.consume("Symbol").value,oo(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 Ze(t,e,this.parse())):e}},so=ue();function ru(r){let e=so.construct(rn(r));return e.removeComments(),new Ut(e).parse()}var G=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}},nn=class r{constructor(e,t=new G){this.context=t,this.segments=e}get header(){return this.segments[0]}get(e){return this.getSegment(e)}getAll(e){return this.getAllSegments(e)}getSegment(e){return typeof e=="number"?this.segments[e]:this.segments.find(t=>t.name===e)}getAllSegments(e){return this.segments.filter(t=>t.name===e)}toString(){return this.segments.map(e=>e.toString()).join(this.context.segmentSeparator)}buildAck(){let e=new Date,t=this.getSegment("MSH"),n=t?.getField(3)?.toString()??"",i=t?.getField(4)?.toString()??"",o=t?.getField(5)?.toString()??"",s=t?.getField(6)?.toString()??"",a=t?.getField(10)?.toString()??"",c=t?.getField(12)?.toString()??"2.5.1";return new r([new me(["MSH",this.context.getMsh2(),o,s,n,i,co(e),"",this.buildAckMessageType(t),e.getTime().toString(),"P",c],this.context),new me(["MSA","AA",a,"OK"],this.context)])}buildAckMessageType(e){let t=e?.getField(9),n=t?.getComponent(2),i=t?.getComponent(3),o="ACK";return n&&i?o=`ACK^${n}^ACK`:n&&(o=`ACK^${n}`),o}static parse(e){if(!e.startsWith("MSH")){let n=new Error("Invalid HL7 message");throw n.type="entity.parse.failed",n}let t=new G("\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=>me.parse(n,t)),t)}},me=class r{constructor(e,t=new G){this.context=t,Wt(e)?this.fields=e.map(n=>oe.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 oe([[this.context.getMsh1()]],this.context);if(e===2)return new oe([[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 G){return new r(e.split(t.fieldSeparator).map(n=>oe.parse(n,t)),t)}},oe=class r{constructor(e,t=new G){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 G){return new r(e.split(t.repetitionSeparator).map(n=>n.split(t.componentSeparator)),t)}};function ou(r,e){if(!r)return;let t=Z(r.slice(0,4),0),n=Z(r.slice(4,6),1)-1,i=Z(r.slice(6,8),1),o=Z(r.slice(8,10),0),s=Z(r.slice(10,12),0),a=Z(r.slice(12,14),0),c=0;r.includes(".")&&(c=Z(r.slice(15,19),0));let m=new Date(Date.UTC(t,n,i,o,s,a,c)),p=ao(r,e?.tzOffset);return p!==0&&(m=new Date(m.getTime()-p)),m.toISOString()}function Z(r,e){let t=parseInt(r,10);return isNaN(t)?e:t}function ao(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 co(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}function uu(r){if(!r)throw new d(h("Resource type is null"));if(!br(r))throw new d(h("Unknown resource type"))}function on(r,e,t){r===null?t.push(y(e,"Invalid null value")):Array.isArray(r)?uo(r,e,t):typeof r=="object"&&lo(r,e,t)}function uo(r,e,t){for(let n=0;n<r.length;n++)r[n]===void 0?t.push(y(`${e}[${n}]`,"Invalid undefined value")):on(r[n],`${e}[${n}]`,t)}function lo(r,e,t){for(let[n,i]of Object.entries(r))on(i,`${e}${e?".":""}${n}`,t)}function du(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 Ft(r,e,t,n){new Lt(r,e,t,n).crawl()}var Lt=class{constructor(e,t,n,i){this.rootResource=e,this.visitor=t,n?this.schema=n:this.schema=te(e.resourceType),i?this.initialPath=i:this.initialPath=e.resourceType}crawl(){this.crawlObject(T(this.rootResource),this.schema,this.initialPath)}crawlObject(e,t,n){let i=V(e.value);i&&this.visitor.onEnterResource&&this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&this.visitor.onEnterObject(n,e,t);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=Nt(e,t);this.visitor.visitProperty&&this.visitor.visitProperty(e,t,i,o,n);for(let s of o)if(s)for(let a of Se(s))this.crawlPropertyValue(a,i)}crawlPropertyValue(e,t){if(!ve(e.type.charAt(0))){let n=te(e.type);this.crawlObject(e,n,t)}}};function Nt(r,e){if(e==="$this")return[r];let[t,...n]=e.split("."),i=[w(r,t)];for(let o of n){let s=[];for(let a of i)if(Array.isArray(a))for(let c of a)s.push(w(c,o));else a!==void 0&&s.push(w(a,o));i=s}return i}var sn={base64Binary:"string",boolean:"boolean",canonical:"string",code:"string",date:"string",dateTime:"string",decimal:"number",id:"string",instant:"string",integer:"number",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={base64Binary:/^([A-Za-z\d+/]{4})*([A-Za-z\d+/]{2}==|[A-Za-z\d+/]{3}=)?$/,canonical:/^\S*$/,code:/^[^\s]+( [^\s]+)*$/,date:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1]))?)?$/,dateTime:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1])(T([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?)?)?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00)?)?)?$/,id:/^[A-Za-z0-9\-.]{1,64}$/,instant:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])T([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00))$/,markdown:/^[\s\S]+$/,oid:/^urn:oid:[0-2](\.(0|[1-9]\d*))+$/,string:/^[\s\S]+$/,time:/^([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?$/,uri:/^\S*$/,url:/^\S*$/,uuid:/^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,xhtml:/.*/},fo={"ele-1":!0};function Lu(r,e){new Mt(r.resourceType,r,e).validate()}var Mt=class{constructor(e,t,n){this.issues=[],this.rootResource=t,this.currentResource=[],n?this.schema=vt(n):this.schema=te(e)}validate(){let e=this.rootResource.resourceType;if(!e)throw new d(h("Missing resource type"));Bt(this.rootResource,e,this.issues),Ft(this.rootResource,this,this.schema);let t=this.issues;if(this.issues=[],t.length>0)throw new d({resourceType:"OperationOutcome",issue:t})}onExitObject(e,t,n){this.checkAdditionalProperties(t,n.elements,e)}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(y(n,"Expected array of values for property"));return}c=a}else{if(Array.isArray(a)){this.issues.push(y(n,"Expected single value for property"));return}c=[a]}(c.length<s.min||c.length>s.max)&&this.issues.push(y(n,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${c.length}`)),an(a,s)||this.issues.push(y(n,"Value did not match expected pattern"));let m=s.slicing?Object.fromEntries(s.slicing.slices.map(p=>[p.name,0])):void 0;for(let p of c){this.constraintsCheck(p,s,n),this.checkPropertyValue(p,n);let q=go(p,s.slicing);q&&m&&(m[q]+=1)}this.validateSlices(s.slicing?.slices,m,n)}}checkPresence(e,t,n){return e===void 0?(t.min>0&&this.issues.push(y(n,"Missing required property")),!1):b(e)?(this.issues.push(y(n,"Invalid empty value")),!1):!0}checkPropertyValue(e,t){ve(e.type.charAt(0))&&this.validatePrimitiveType(e,t)}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(y(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)for(let o of Object.keys(i))o!=="resourceType"&&!(o in t)&&!(o.startsWith("_")&&o.slice(1)in t)&&!ho(e,o,t)&&this.issues.push(y(`${n}.${o}`,`Invalid additional property "${o}"`))}constraintsCheck(e,t,n){let i=t.constraints;if(i){for(let o of i)if(o.severity==="error"&&!(o.key in fo)&&!this.isExpressionTrue(o,e,n)){this.issues.push(fr(n,o));return}}}isExpressionTrue(e,t,n){try{let i=le(e.expression,[t],{context:t,resource:T(this.currentResource[this.currentResource.length-1]),rootResource:T(this.rootResource),ucum:T(en)});return i.length===1&&i[0].value===!0}catch(i){return this.issues.push(mr(n,"Error evaluating invariant expression",i,{fhirpath:e.expression})),!1}}validatePrimitiveType(e,t){let[n,i]=xo(e);if(n){let{type:o,value:s}=n;if(!(o in sn)){this.issues.push(y(t,`Invalid JSON type: ${o} is not a valid FHIR type`));return}let a=sn[o];if(typeof s!==a){s!==null&&this.issues.push(y(t,`Invalid JSON type: expected ${a}, but got ${typeof s}`));return}a==="string"?this.validateString(s,o,t):a==="number"&&this.validateNumber(s,o,t)}i&&Ft(i.value,this,te("Element"),t)}validateString(e,t,n){if(!e.trim()){this.issues.push(y(n,"String must contain non-whitespace content"));return}let i=po[t];i&&!i.exec(e)&&this.issues.push(y(n,"Invalid "+t+" format"))}validateNumber(e,t,n){isNaN(e)||!isFinite(e)?this.issues.push(y(n,"Invalid numeric value")):mo(t)&&!Number.isInteger(e)?this.issues.push(y(n,"Expected number to be an integer")):t===u.positiveInt&&e<=0?this.issues.push(y(n,"Expected number to be positive")):t===u.unsignedInt&&e<0&&this.issues.push(y(n,"Expected number to be non-negative"))}};function mo(r){return r===u.integer||r===u.positiveInt||r===u.unsignedInt}function ho(r,e,t){e.startsWith("_")&&(e=e.slice(1));let n=e.split(/(?=[A-Z])/g),i="";for(let o of n)if(i+=o,t[i+"[x]"])return!!w(r,i);return!1}function Bt(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(y(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?t.push(y(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!r[s]?.[a]?t.push(y(`${o}[${a}]`,"Invalid null value")):i[a]&&Bt(i[a],`${o}[${a}]`,t);else typeof i=="object"&&Bt(i,o,t)}}function an(r,e){return e.pattern&&!Te(r,e.pattern)?!1:!(e.fixed&&!xe(r,e.fixed))}function yo(r,e,t){if(Array.isArray(r))return!1;let n=t.elements[e.path],i=t.type;switch(e.type){case"value":case"pattern":if(!r||!n)return!1;if(an(r,n))return!0;break;case"type":return!r||!i?.length?!1:i.some(o=>o.code===r.type)}return!1}function go(r,e){if(e){for(let t of e.slices)if(e.discriminator.every(n=>Se(Nt(r,n.path))?.some(i=>yo(i,n,t))))return t.name}}function xo(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}]}export{ki as AccessPolicyInteraction,_c as CPT,ze as ClientStorage,F as ContentType,wa as DEFAULT_SEARCH_COUNT,fe as EventTarget,Ye as FhirFilterComparison,Ze as FhirFilterConnective,Xe as FhirFilterNegation,Ge as FhircastConnection,G as Hl7Context,oe as Hl7Field,nn as Hl7Message,me as Hl7Segment,Uc as ICD10,$ as InfixOperatorAtom,Oc as LOINC,Qe as LRUCache,Ic as MEDPLUM_VERSION,zr as MedplumClient,Vt as MemoryStorage,Zi as OAuthClientAssertionType,Yi as OAuthGrantType,Xi as OAuthTokenType,d as OperationOutcomeError,ui as Operator,f as OperatorPrecedence,et as Parser,ye as ParserBuilder,he as PrefixOperatorAtom,u as PropertyType,Vc as RXNORM,C as ReadablePromise,Dc as SNOMED,Cr as SearchParameterType,We as TypedEventTarget,en as UCUM,ps as accepted,os as allOk,zt as arrayBufferToBase64,Kt as arrayBufferToHex,Se as arrayify,xs as assertOk,_ as badRequest,l as booleanToTypedValue,Gn as buildTypeName,ge as calculateAge,Ao as calculateAgeString,Ba as canReadResourceType,qa as canWriteResource,Di as canWriteResourceType,A as capitalize,on as checkForNull,Xo as compressElement,Ja as convertContainedResourcesToBundle,_i as convertToTransactionBundle,Ft as crawlResource,fr as createConstraintIssue,Hr as createFhircastMessagePayload,mr as createProcessingIssue,K as createReference,y as createStructureIssue,ss as created,Mr as decodeBase64,rt as deepClone,xe as deepEquals,Te as deepIncludes,Br as encodeBase64,qr as encryptSHA256,ie as evalFhirPath,le as evalFhirPathTyped,at as fhirPathArrayEquals,ct as fhirPathArrayEquivalent,or as fhirPathEquals,Mn as fhirPathEquivalent,Ee as fhirPathIs,st as fhirPathNot,sn as fhirTypeToJsType,_o as findObservationInterval,Uo as findObservationReferenceRange,Bo as findResourceByCode,us as forbidden,jo as formatAddress,In as formatCodeableConcept,kn as formatCoding,Wo as formatDate,it as formatDateTime,Qo as formatFamilyName,Ho as formatGivenName,co as formatHl7DateTime,be as formatHumanName,Jo as formatMoney,On as formatObservationValue,Go as formatPeriod,z as formatQuantity,zo as formatRange,Da as formatSearchQuery,En as formatTime,Ko as formatTiming,pe as generateId,Tr as getAllDataTypes,Co as getAllQuestionnaireAnswers,tt as getCodeBySystem,te as getDataType,Eo as getDateProperty,ln as getDisplayString,Ae as getElementDefinition,Tt as getElementDefinitionTypeName,ba as getExpressionForResourceType,kr as getExpressionsForResourceType,Oo as getExtension,ko as getExtensionValue,wo as getIdentifier,Ro as getImageSrc,Nt as getNestedProperty,Ns as getPropertyDisplayName,Po as getQuestionnaireAnswers,It as getRandomString,$t as getReferenceString,Us as getResourceTypes,Fs as getSearchParameter,wr as getSearchParameterDetails,Ls as getSearchParameters,gs as getStatus,w as getTypedPropertyValue,I as globalSchema,ls as gone,bt as indexSearchParameter,_s as indexSearchParameterBundle,xr as indexStructureDefinitionBundle,Zt as inflateBaseSchema,Un as inflateElement,ue as initFhirPathParserBuilder,ms as isAccepted,jr as isCompletedSubscriptionRequest,fs as isCreated,vr as isDataTypeLoaded,b as isEmpty,$i as isFhircastResourceType,ys as isGone,Qr as isJwt,ve as isLowerCase,Wr as isMedplumAccessToken,hs as isNotFound,j as isObject,mt as isOk,we as isOperationOutcome,Bn as isPeriod,un as isProfileResource,R as isQuantity,sr as isQuantityEquivalent,Er as isReference,V as isResource,br as isResourceType,St as isResourceTypeSchema,Wt as isStringArray,Do as isUUID,ot as isValidDate,jn as loadDataType,Vi as matchesAccessPolicy,Yt as matchesRange,Lr as matchesSearchRequest,qn as normalizeErrorString,ht as normalizeOperationOutcome,lr as notFound,as as notModified,$n as operationOutcomeIssueToString,pr as operationOutcomeToString,Pt as parseCriteriaAsSearchRequest,Rt as parseFhirPath,ru as parseFilterParameter,ou as parseHl7DateTime,Dt as parseJWTPayload,Hc as parseMappingLanguage,bo as parseReference,ka as parseSearchDefinition,Ia as parseSearchRequest,_r as parseSearchUrl,vt as parseStructureDefinition,Oa as parseXFhirQuery,Fo as preciseEquals,Mo as preciseGreaterThan,Rn as preciseGreaterThanOrEquals,No as preciseLessThan,bn as preciseLessThanOrEquals,Lo as preciseRound,Ii as projectAdminResourceTypes,wi as protectedResourceTypes,Re as removeDuplicates,Li as reorderBundle,So as resolveId,$a as satisfiedAccessPolicy,Ot as serializeFhircastSubscriptionRequest,dr as serverError,Vo as setCodeBySystem,Io as setIdentifier,D as singleton,nt as sleep,du as streamToBuffer,Qt as stringify,Ar as stringifyTypedValue,Cs as subsetResource,N as toJsBoolean,T as toTypedValue,ds as tooManyRequests,Sr as tryGetDataType,cs as unauthorized,Ke as validateFhircastSubscriptionRequest,Lu as validateResource,uu as validateResourceType,h as validationError};
|
|
41
41
|
//# sourceMappingURL=index.mjs.map
|