@medplum/core 2.1.6 → 2.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +4 -4
- package/dist/cjs/index.cjs.map +3 -3
- package/dist/esm/index.mjs +4 -4
- package/dist/esm/index.mjs.map +3 -3
- package/dist/types/client.d.ts +4 -2
- package/dist/types/utils.d.ts +4 -4
- package/package.json +1 -1
package/dist/esm/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
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
|
-
`))}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()===" "&&
|
|
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=`{
|
|
1
|
+
var ge=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()}`}},xe=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 rt(e,this.prefixParselets,this.infixParselets)}},rt=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=se(r),t=dn(r);return t===e?{reference:e}:{reference:e,display:t}}function se(r){return ae(r)?r.reference:`${r.resourceType}/${r.id}`}function Ht(r){if(r)return ae(r)?r.reference.split("/")[1]:r.id}function Eo(r){if(r?.reference===void 0)return;let[e,t]=r.reference.split("/");if(!(e===""||t===""||t===void 0))return[e,t]}function ln(r){return r.resourceType==="Patient"||r.resourceType==="Practitioner"||r.resourceType==="RelatedPerson"}function dn(r){if(ln(r)){let e=pn(r);if(e)return e}if(r.resourceType==="Device"){let e=fn(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:se(r)}function pn(r){let e=r.name;if(e&&e.length>0)return Ee(e[0])}function fn(r){let e=r.deviceName;if(e&&e.length>0)return e[0].name}function Ao(r){if(!("photo"in r))return;let e=r.photo;if(e)if(Array.isArray(e))for(let t of e){let n=jt(t);if(n)return n}else return jt(e)}function jt(r){if(r.url&&r.contentType&&r.contentType.startsWith("image/"))return r.url}function Po(r){return r?new Date(r):void 0}function Te(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 un=Math.floor((n.getTime()-t.getTime())/(1e3*60*60*24));return{years:p,months:q,days:un}}function Co(r,e){let{years:t,months:n,days:i}=Te(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 wo(r){let e={};return Qt(r.item,e),e}function Qt(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer[0]),Qt(t.item,e)}function Io(r){let e={};return Wt(r.item,e),e}function Wt(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer),Wt(t.item,e)}function ko(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 Oo(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 Do(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 Vo(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 Gt(r,e){return JSON.stringify(r,mn,e?2:void 0)}function mn(r,e){return!hn(r)&&R(e)?void 0:e}function hn(r){return!!/\d+$/.exec(r)}function R(r){if(r==null)return!0;let e=typeof r;return e==="string"&&r===""||e==="object"&&Object.keys(r).length===0}function ve(r,e,t){return r===e||R(r)&&R(e)?!0:R(r)||R(e)?!1:Array.isArray(r)&&Array.isArray(e)?yn(r,e):Array.isArray(r)||Array.isArray(e)?!1:j(r)&&j(e)?gn(r,e,t):(j(r)||j(e),!1)}function yn(r,e){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(!ve(r[t],e[t]))return!1;return!0}function gn(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(!ve(o,s,i))return!1}return!0}function Se(r,e){return R(r)?!0:R(e)?!1:Array.isArray(r)&&Array.isArray(e)?xn(r,e):Array.isArray(r)||Array.isArray(e)?!1:j(r)&&j(e)?Tn(r,e):j(r)||j(e)?!1:r===e}function xn(r,e){return r.every(t=>e.some(n=>Se(t,n)))}function Tn(r,e){return Object.entries(r).every(([t,n])=>t in e&&Se(n,e[t]))}function it(r){return JSON.parse(JSON.stringify(r))}function _o(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 Kt(r){return r.every(e=>typeof e=="string")}var zt=[];for(let r=0;r<256;r++)zt.push(r.toString(16).padStart(2,"0"));function Jt(r){let e=new Uint8Array(r),t=new Array(e.length);for(let n=0;n<e.length;n++)t[n]=zt[e[n]];return t.join("")}function Yt(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 Re(r){return r===r.toLowerCase()&&r!==r.toUpperCase()}function nt(r,e){return r.coding?.find(t=>t.system===e)?.code}function Uo(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 Lo(r,e,t,n){return r.qualifiedInterval?.find(i=>Xt(i,e)&&Rn(i,t,r.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function Fo(r,e,t){return r.qualifiedInterval?.find(n=>Xt(n,e)&&t.includes(n.condition))}function Xt(r,e){return vn(r,e)&&Sn(r,e)}function vn(r,e){return!r.gender||r.gender===e.gender}function Sn(r,e){return!r.age||Zt(Te(e.birthDate).years,r.age)}function Rn(r,e,t){return!!r.range&&Zt(e,r.range,t)}function Zt(r,e,t){return(e.low?.value===void 0||En(r,e.low.value,t))&&(e.high?.value===void 0||bn(r,e.high.value,t))}function No(r,e){return parseFloat(r.toFixed(e))}function Mo(r,e,t){return D(r,t)===D(e,t)}function Bo(r,e,t){return D(r,t)<D(e,t)}function qo(r,e,t){return D(r,t)>D(e,t)}function bn(r,e,t){return D(r,t)<=D(e,t)}function En(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 $o(r,e,t){return r.find(n=>typeof e=="string"?nt(n.code||{},t)===e:nt(n.code||{},t)===nt(e,t))}function be(r){if(r)return Array.isArray(r)?r:[r]}var ot=r=>new Promise(e=>{setTimeout(e,r)});function Qo(r,e){let t=[];if(r.line&&t.push(...r.line),r.city||r.state||r.postalCode){let n=[];r.city&&n.push(r.city),r.state&&n.push(r.state),r.postalCode&&n.push(r.postalCode),t.push(n.join(", "))}return r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.join(e?.lineSeparator??", ").trim()}function Ee(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 Wo(r){let e=[];return r.given&&e.push(...r.given),e.join(" ").trim()}function Go(r){return r.family??""}function at(r){return r instanceof Date&&!isNaN(r.getTime())}function Ko(r,e,t){if(!r)return"";let n=new Date(r);return at(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...t})):""}function An(r,e,t){if(!r)return"";let n=new Date("2000-01-01T"+r+"Z");return at(n)?n.toLocaleTimeString(e,t):""}function st(r,e,t){if(!r)return"";let n=new Date(r);return at(n)?n.toLocaleString(e,t):""}function zo(r,e,t){return!r||!r.start&&!r.end?"":st(r.start,e,t)+" - "+st(r.end,e,t)}var Pn={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},Cn={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},wn={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function Jo(r){if(!r)return"";let e=[];return In(e,r.repeat),r.event&&e.push(r.event.map(t=>st(t)).join(", ")),A(e.join(" ").trim())}function In(r,e){if(!e?.periodUnit)return;let t=e.frequency??1,n=e.period??1,i=e.periodUnit;t===1&&n===1?r.push(Pn[i]):(t===1?r.push("once"):r.push(t+" times"),n===1?r.push("per "+Cn[i]):r.push("per "+n+" "+wn[i])),e.dayOfWeek&&r.push("on "+e.dayOfWeek.map(A).join(", ")),e.timeOfDay&&r.push("at "+e.timeOfDay.map(o=>An(o)).join(", "))}function Yo(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=_n(n.value,e),`> ${z(n,e)}`):`>= ${z(n,e)}`:n?.value===void 0&&i?.value!==void 0?t&&e!==void 0?(i.value=Vn(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 Xo(r){return r?.value===void 0?"":r.value.toLocaleString(void 0,{style:"currency",currency:r.currency??"USD",currencyDisplay:"narrowSymbol"})}function kn(r){return r?r.text?r.text:r.coding?r.coding.map(e=>On(e)).join(", "):"":""}function On(r){return r?.display??r?.code??""}function Dn(r){return r?"component"in r?r.component.map(e=>Dn(e)).join(" / "):r.valueQuantity?z(r.valueQuantity):r.valueCodeableConcept?kn(r.valueCodeableConcept):r.valueString?r.valueString:"":""}function Vn(r,e,t=1){return(er(r,e)+t)*Math.pow(10,-e)}function _n(r,e,t=1){return(er(r,e)-t)*Math.pow(10,-e)}function er(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}var Un={"http://hl7.org/fhirpath/System.String":"string"};function es(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:Un[t.code]??t.code})),e}function Ln(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 tr(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,Ln(o)])),constraints:[],innerTypes:[]};return e}var rr={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}:b(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=Ce(r.type,e);return t?Nn(r,e,t):Mn(r,e)}function Nn(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]?sr(a??{},s[c]):a):i=sr(i??{},s)),!R(i))return(o==="Element"||o==="BackboneElement")&&(o=t.type[0].code),Array.isArray(i)?i.map(a=>nr(a,o)):nr(i,o)}function nr(r,e){return e==="Resource"&&_(r)&&(e=r.resourceType),{type:e,value:r}}function Mn(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(!R(n))return Array.isArray(n)?n.map(T):T(n)}function Ae(r){let e=[];for(let t of r){let n=!1;for(let i of e)if(N(ar(t,i))){n=!0;break}n||e.push(t)}return e}function ct(r){return l(!N(r))}function ut(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?l(!1):l(r.every((t,n)=>N(ar(t,e[n]))))}function ar(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):b(t)&&b(n)?l(cr(t,n)):l(typeof t=="object"&&typeof n=="object"?dt(r,e):t===n)}function lt(r,e){return r.length===0&&e.length===0?l(!0):r.length!==e.length?l(!1):(r.sort(ir),e.sort(ir),l(r.every((t,n)=>N(Bn(t,e[n])))))}function Bn(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):b(s)&&b(a)?l(cr(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"?dt({...s,id:void 0},{...a,id:void 0}):typeof s=="string"&&typeof a=="string"?s.toLowerCase()===a.toLowerCase():s===a)}function ir(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 Pe(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 qn(t);case"Quantity":return b(t);default:return typeof t=="object"&&t?.resourceType===e}}function qn(r){return!!(r&&typeof r=="object"&&"start"in r)}function b(r){return!!(r&&typeof r=="object"&&"value"in r&&typeof r.value=="number")}function cr(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 dt(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(or(o)&&or(s)){if(!dt(o,s))return!1}else if(o!==s)return!1}return!0}function or(r){return r!==null&&typeof r=="object"}function sr(r,e){return delete e.__proto__,delete e.constructor,Object.assign(r,e)}var pt="ok",we="created",ft="gone",mt="not-modified",ht="not-found",ur="unauthorized",lr="forbidden",dr="too-many-requests",Ie="accepted",as={resourceType:"OperationOutcome",id:pt,issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},cs={resourceType:"OperationOutcome",id:we,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},us={resourceType:"OperationOutcome",id:mt,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},pr={resourceType:"OperationOutcome",id:ht,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},ls={resourceType:"OperationOutcome",id:ur,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},ds={resourceType:"OperationOutcome",id:lr,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},ps={resourceType:"OperationOutcome",id:ft,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},fs={resourceType:"OperationOutcome",id:dr,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function ms(r){return{resourceType:"OperationOutcome",id:Ie,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:r}]}}function U(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 fr(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:r.toString()}]}}function ke(r){return typeof r=="object"&&r!==null&&r.resourceType==="OperationOutcome"}function yt(r){return r.id===pt||r.id===we||r.id===mt||r.id===Ie}function hs(r){return r.id===we}function ys(r){return r.id===Ie}function gs(r){return r.id===ht}function xs(r){return r.id===ft}function Ts(r){return r.id===pt?200:r.id===we?201:r.id===Ie?202:r.id===mt?304:r.id===ur?401:r.id===lr?403:r.id===ht?404:r.id===ft?410:r.id===dr?429:400}function vs(r,e){if(!yt(r)||e===void 0)throw new d(r)}var d=class extends Error{constructor(t,n){super(mr(t));this.outcome=t,this.cause=n}};function gt(r){return r instanceof d?r.outcome:ke(r)?r:U($n(r))}function $n(r){return r?typeof r=="string"?r:r instanceof Error?r.message:ke(r)?mr(r):typeof r=="object"&&"code"in r&&typeof r.code=="string"?r.code:JSON.stringify(r):"Unknown error"}function mr(r){let e=r.issue?.map(jn)??[];return e.length>0?e.join("; "):"Unknown error"}function jn(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 xt(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 xt("structure",e,r)}function hr(r,e){return xt("invariant",`Constraint ${e.key} not met: ${e.description}`,r,{fhirpath:e.expression})}function yr(r,e,t,n){return xt("processing",e,r,{...n,error:t})}function Rt(r){return new vt(r).parse()}var H=tr(rr);function vr(r){let e=Array.isArray(r)?r:r.entry?.map(t=>t.resource)??[];for(let t of e)Hn(t)}function Hn(r){if(!r?.name)throw new Error("Failed loading StructureDefinition from bundle");if(r.resourceType!=="StructureDefinition")return;let e=Rt(r);H[r.name]=e;for(let t of e.innerTypes)t.parentType=e,H[t.name]=t}function Sr(){return H}function Rr(r){return!!H[r]}function br(r){return H[r]}function te(r){let e=H[r];if(!e)throw new d(fr(Error("Unknown data type: "+r)));return e}function Er(r){let e=H[r];return e&&bt(e)}var vt=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=Tt(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[Tt(e,n.path)]=t;break}n=n.parent}if(!n){let i=Tt(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:St(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){Gn(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=xr(e.max),n=e.base?.max?xr(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)?St(e):o.code??"",targetProfile:o.targetProfile})),fixed:Tr(w(i,"fixed")),pattern:Tr(w(i,"pattern")),binding:e.binding}}};function Is(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)&&!Qn.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(gr):[gr]},r}var gr={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},Qn=["resourceType","id","meta"];function xr(r){return r==="*"?Number.POSITIVE_INFINITY:Number.parseInt(r,10)}function Tt(r,e=""){return Wn(r.path,e)}function Wn(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 Tr(r){return Array.isArray(r)&&r.length>0?r[0]:R(r)?void 0:r}function Gn(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 Ls(r){for(let e of r.entry){let t=e.resource;t.resourceType==="SearchParameter"&&Et(t)}}function Et(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 St(r){let e=r.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?Kn((r.base?.path??r.path)?.split(".")):e}function Kn(r){return r.length===1?r[0]:r.map(A).join("")}function bt(r){return r.kind==="resource"&&r.name!=="Resource"&&r.name!=="DomainResource"}function Fs(){return Object.values(Sr()).filter(bt).map(r=>r.name)}function Ns(r){return I.types[r]?.searchParams}function Ms(r,e){return I.types[r]?.searchParams?.[e]}function Bs(r){return r.replaceAll("[x]","").split(".").pop().split(/(?=[A-Z])/).map(Jn).join(" ").replace("_"," ").replace(/\s+/g," ")}var zn=new Set(["ID","IP","PKCE","JWKS","URI","URL"]);function Jn(r){let e=r.toUpperCase();return zn.has(e)?e:e.charAt(0)+r.slice(1)}function Ce(r,e){let t=br(r);if(t)return t.elements[e]??t.elements[e+"[x]"]}function _(r){return!!(r&&typeof r=="object"&&"resourceType"in r)}function ae(r){return!!(r&&typeof r=="object"&&"reference"in r)}var I={types:{}};function Pr(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 Ar(r.value);case u.CodeableConcept:return r.value.coding?.map(Ar).join(",")??r.value.text;case u.HumanName:return r.value.text?r.value.text:Ee(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 Ar(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 ce=()=>[],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:ce,supersetOf:ce,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:ce,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 Ae([...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}]=F(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}]=F(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}]=F(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}]=F(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}]=F(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}]=F(e,1);return b(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}]=F(e,1);return t==null?[]:b(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}]=F(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)=>L(Math.abs,r,e),ceiling:(r,e)=>L(Math.ceil,r,e),exp:(r,e)=>L(Math.exp,r,e),floor:(r,e)=>L(Math.floor,r,e),ln:(r,e)=>L(Math.log,r,e),log:(r,e,t)=>L((n,i)=>Math.log(n)/Math.log(i),r,e,t),power:(r,e,t)=>L(Math.pow,r,e,t),round:(r,e)=>L(Math.round,r,e),sqrt:(r,e)=>L(Math.sqrt,r,e),truncate:(r,e)=>L(t=>t|0,r,e),children:ce,descendants:ce,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=Te(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:Pe(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}]=F(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 L(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=F(t,1),o=b(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 F(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 Oe=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}},De=class{eval(){return[]}toString(){return"{}"}},Ve=class extends ge{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=b(s)?s.value:s,m=b(a)?a.value:a,p=this.impl(c,m);return typeof p=="boolean"?l(p):b(s)?[{type:u.Quantity,value:{...s,value:p}}]:[T(p)]}},_e=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}},Ue=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))}},Le=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 ${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 Ae([...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 ut(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 ct(ut(n,i))}},Me=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 lt(n,i)}},Be=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(lt(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(Pe(n[0],i))}},qe=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):[]}},$e=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):[]}},je=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)}},He=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 Yn=["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
|
+
`))}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()===" "&&Xn(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 Xn(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&Yn.includes(r.value)))}var ue=["true","false"],le=["!=","!~","<=",">=","{}","->"];function Cr(r){return new W(r,ue,le).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},Zn={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},ei={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new X(e,t)},precedence:f.Indexer},ti={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 ri(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 de(){return new xe().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:ri(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 De}).registerPrefix("(",Zn).registerInfix("[",ei).registerInfix("(",ti).prefix("+",f.UnaryAdd,(r,e)=>new Ve("+",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 Fe(r,t)).infixLeft("!=",f.NotEquals,(r,e,t)=>new Ne(r,t)).infixLeft("~",f.Equivalent,(r,e,t)=>new Me(r,t)).infixLeft("!~",f.NotEquivalent,(r,e,t)=>new Be(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 _e(r,t)).infixLeft("and",f.And,(r,e,t)=>new qe(r,t)).infixLeft("as",f.As,(r,e,t)=>new J(r,t)).infixLeft("contains",f.Contains,(r,e,t)=>new Ue(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 Le(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 $e(r,t)).infixLeft("xor",f.Xor,(r,e,t)=>new je(r,t)).infixLeft("implies",f.Implies,(r,e,t)=>new He(r,t))}var ni=de();function At(r){return new Oe(r,ni.construct(Cr(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 pe(r,t).map(n=>n.value)}function pe(r,e,t){let n=t??{};return At(r).eval({variables:n},e).map(o=>({type:o.type,value:o.value?.valueOf()}))}var wr=(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))(wr||{});function Ir(r,e){let t=I.types[r]?.searchParamsDetails?.[e.code];return t||(t=oi(r,e)),t}function ii(r,e,t){let n=I.types[r];n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=t}function oi(r,e){let t=e.code,n=ci(t),i=Or(r,e.expression),o={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let a of i){let c=fe(a);c.length===1&&c[0]instanceof v?o.propertyTypes.add("boolean"):kr(o,fe(a),r,1)}let s={columnName:n,type:ui(e,o.propertyTypes),elementDefinitions:o.elementDefinitions,array:o.array};return ii(r,t,s),s}function kr(r,e,t,n){let i=e[n];if(i instanceof J){r.propertyTypes.add(i.right.toString());return}if(i instanceof B){si(r,i);return}let o=i.toString(),s=Ce(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;ai(p)&&(p=s.type[0].code),kr(r,e,p,c)}}function si(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 ai(r){return r==="Element"||r==="BackboneElement"}function ci(r){return r.split("-").reduce((e,t,n)=>e+(n?A(t):t),"")}function ui(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 Or(r,e){let t=[],n=At(e);return Pt(r,n.child,t),t}function Ea(r,e){let t=Or(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 fe(r){return r instanceof J||r instanceof X?[fe(r.left),r].flat():r instanceof v?[r]:r instanceof Q?[fe(r.left),fe(r.right)].flat():r instanceof B&&r.name==="where"&&!(r.args[0]instanceof Y)?[]:[r]}var ka=20,li=(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))(li||{}),_r={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"},Ct={eq:"eq",ne:"ne",lt:"lt",le:"le",gt:"gt",ge:"ge",sa:"sa",eb:"eb",ap:"ap"};function Oa(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 Lr(r,t)}function Ur(r){let e;for(let t of r.pathname.split("/"))t&&(e=t);return Lr(e,r.searchParams.entries())}function Da(r){return Ur(new URL(r,"https://example.com/"))}function wt(r){return Ur(new URL(r,"https://api.medplum.com/"))}function Lr(r,e){let t={resourceType:r};for(let[n,i]of e)di(t,n,i);return t}function di(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":pi(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=Dr(t);i==="iterate"&&(s.modifier="iterate"),r.include?r.include.push(s):r.include=[s];break}case"_revinclude":{let s=Dr(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?fi(r,s,i,t):yi(r,n,i,t)}}}function pi(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 fi(r,e,t,n){if(t==="missing"){Qe(r,{code:e.code,operator:"missing",value:n});return}switch(e.type){case"number":case"date":case"quantity":mi(r,e,n);break;case"reference":case"string":case"token":case"uri":hi(r,e,t,n);break;default:break}}function mi(r,e,t){let{operator:n,value:i}=gi(t);Qe(r,{code:e.code,operator:n,value:i})}function hi(r,e,t,n){Qe(r,{code:e.code,operator:xi(t),value:n})}function yi(r,e,t,n){let i="eq";if(t)i=t;else if(n.length>=2){let o=n.substring(0,2);o in Ct&&(n.length===2||n.at(2)?.match(/\d/))&&(i=o,n=n.substring(o.length))}Qe(r,{code:e,operator:i,value:n})}function gi(r){let e=r.substring(0,2),t=Ct[e];return t?{operator:t,value:r.substring(2)}:{operator:"eq",value:r}}function xi(r){return _r[r]??"eq"}function Dr(r){let e=r.split(":");if(e.includes("*"))throw new d(U("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new d(U(`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(U(`Invalid include value '${r}'`))}function Qe(r,e){r.filters?r.filters.push(e):r.filters=[e]}var Ti=/{{([^{}]+)}}/g;function Va(r,e){return r=r.replaceAll(Ti,(t,n)=>{let i=pe(n,[],e);return i.length!==1?"":Pr(i[0])}),wt(r)}function _a(r){let e=[];return r.fields&&e.push("_fields="+r.fields.join(",")),r.filters&&r.filters.forEach(t=>e.push(vi(t))),r.sortRules&&r.sortRules.length>0&&e.push(Si(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(Vr("_include",t))),r.revInclude&&r.revInclude.forEach(t=>e.push(Vr("_revinclude",t))),e.length===0?"":(e.sort((t,n)=>t.localeCompare(n)),"?"+e.join("&"))}function vi(r){let e=r.operator in _r?":"+r.operator:"",t=r.operator!=="eq"&&r.operator in Ct?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function Si(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function Vr(r,e){return r+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function Fr(r,e){if(e.resourceType!==r.resourceType)return!1;if(e.filters){for(let t of e.filters)if(!Ri(r,e,t))return!1}return!0}function Ri(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 Nr(r,t,n);case"token":return Ei(r,t,n);case"date":return Pi(r,t,n);default:return!1}}function bi(r,e,t){let n=ie(t.expression,r),i=We(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 Ei(r,e,t){return Ir(r.resourceType,t).type==="BOOLEAN"?Ai(r,e,t):Nr(r,e,t,!0)}function Ai(r,e,t){let n=ie(t.expression,r),i=e.value==="true",o=n.includes(i);return We(e.operator)?!o:o}function Nr(r,e,t,n){let i=ie(t.expression,r),o=e.value.split(","),s=We(e.operator);for(let a of i)for(let c of o)if(It(a,e.operator,c,n))return!s;return s}function It(r,e,t,n){if(n&&t.includes("|")){let[o,s]=t.split("|");return It(r,e,o,!1)&&(!s||It(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 Pi(r,e,t){let n=ie(t.expression,r),i=e.value.split(","),o=We(e.operator);for(let s of n)for(let a of i)if(Ci(s,e.operator,a))return!o;return o}function Ci(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 We(r){return r==="ne"||r==="not"}var wi={resourceType:"*"},Ii=["DomainConfiguration","JsonWebKey","Login"],ki=["PasswordChangeRequest","Project","ProjectMembership","User"],Oi=(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))(Oi||{}),Di=["read","vread","history","history-instance"];function $a(r,e){if(r.resource){for(let t of r.resource)if(kt(t.resourceType,e))return!0}return!1}function Vi(r,e){if(Ii.includes(e))return!1;if(r.resource){for(let t of r.resource)if(kt(t.resourceType,e)&&!t.readonly)return!0}return!1}function ja(r,e){let t=e.resourceType;return Vi(r,t)?_i(r,e,!1):!1}function _i(r,e,t){if(r.resource){for(let n of r.resource)if(Mr(e,t?"read":"update",n))return!0}return!1}function Ha(r,e,t){if(!t)return wi;if(t.resource){for(let n of t.resource)if(Mr(r,e,n))return n}}function Mr(r,e,t){let n=r.resourceType;return!(!kt(t.resourceType,n)||t.readonly&&!Di.includes(e)||t.compartment&&!r.meta?.compartment?.find(i=>i.reference===t.compartment?.reference)||t.criteria&&!Fr(r,wt(t.criteria)))}function kt(r,e){return r===e||r==="*"&&!ki.includes(e)}function Br(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 qr(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 Ot(){let r=new Uint32Array(28);return crypto.getRandomValues(r),Jt(r.buffer)}async function $r(r){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(r))}function me(){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 Ui(r){let e={};r=it(r);for(let i of r.entry||[]){delete i.resource?.meta;let o=i.resource?.id;o&&(e[o]=me(),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)=>Li(i,o,e),2);return Fi(JSON.parse(n))}function Li(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 Fi(r){let e=Mi(r),{sorted:t,cycles:n}=Ni(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 Ni(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 jr(r,e){for(let t in r)if(r[t]&&typeof r[t]=="object"){let n=r[t];if(ae(n)){let i=n.reference;i.startsWith("urn:uuid:")&&e(i)}else jr(n,e)}}function Mi(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&&jr(t.resource,i=>{e[i]&&e[i].push(n)})}return e}function Xa(r){r=it(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=me());return Ui(e)}var Ge=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 O={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 he=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}},Ke=class{constructor(){this.emitter=new he}dispatchEvent(e){this.emitter.dispatchEvent(e)}addEventListener(e,t){this.emitter.addEventListener(e,t)}removeEventListener(e,t){this.emitter.removeEventListener(e,t)}};var Dt={"patient-open":"patient-open","patient-close":"patient-close","imagingstudy-open":"imagingstudy-open","imagingstudy-close":"imagingstudy-close"},Bi=["Patient","Encounter","ImagingStudy"],qi={"patient-open":["Patient"],"patient-close":["Patient"],"imagingstudy-open":["Patient","ImagingStudy"],"imagingstudy-close":["Patient","ImagingStudy"]},$i={"patient-open":["Encounter"],"patient-close":["Encounter"],"imagingstudy-open":[],"imagingstudy-close":[]};function ji(r){return Bi.includes(r)}var Hi={ImagingStudy:"study",Patient:"patient",Encounter:"encounter"};function Hr(r){return!!r.endpoint}function Vt(r){if(!Je(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 Hr(r)&&(o.endpoint=r.endpoint),new URLSearchParams(o).toString()}function Je(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(!Dt[o])return!1;return!(Hr(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function Qi(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(!ji(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=qi[r],s=$i[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=Hi[i];if(c!==e.key)throw new d(h(`context[${t}] is invalid. Context key for type ${i} must be ${c}.`))}function Wi(r,e){let t=new Set;for(let n=0;n<e.length;n++)Qi(r,e[n],n,t)}function Qr(r,e,t){if(!(r&&typeof r=="string"))throw new d(h("Must provide a topic."));if(!Dt[e])throw new d(h(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(Dt).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 Wi(e,n),{timestamp:new Date().toISOString(),id:me(),event:{"hub.topic":r,"hub.event":e,context:n}}}var ze=class extends Ke{constructor(t){super();if(this.subRequest=t,!t.endpoint)throw new d(h("Subscription request should contain an endpoint."));if(!Je(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 Gi(r){let e=r.replace(/-/g,"+").replace(/_/g,"/"),t=Br(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 Wr(r){return r.split(".").length===3}function _t(r){let[e,t,n]=r.split(".");return Gi(t)}function Gr(r){try{return typeof _t(r).login_id=="string"}catch{return!1}}var Ki,C=class{constructor(e){this[Ki]="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)}};Ki=Symbol.toStringTag;var Ye=class{constructor(){this.storage=typeof localStorage<"u"?localStorage:new Ut}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?Gt(t):void 0)}},Ut=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 Oc="2.1.8-999a60b0",zi=O.FHIR_JSON+", */*; q=0.1",Ji="https://api.medplum.com/",Yi=1e3,Xi=6e4,Kr="Binary/",zr={resourceType:"Device",id:"system",deviceName:[{name:"System"}]},Zi=(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))(Zi||{}),eo=(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))(eo||{}),to=(e=>(e.JwtBearer="urn:ietf:params:oauth:client-assertion-type:jwt-bearer",e))(to||{}),Jr=class extends he{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??ro(),this.storage=t?.storage??new Ye,this.createPdfImpl=t?.createPdf,this.baseUrl=Xr(t?.baseUrl??Ji),this.fhirBaseUrl=Xr(Xe(this.baseUrl,t?.fhirUrlPath??"fhir/R4/")),this.authorizeUrl=Xe(this.baseUrl,t?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=Xe(this.baseUrl,t?.tokenUrl??"oauth2/token"),this.logoutUrl=Xe(this.baseUrl,t?.logoutUrl??"oauth2/logout"),this.clientId=t?.clientId??"",this.clientSecret=t?.clientSecret??"",this.onUnauthenticated=t?.onUnauthenticated,this.cacheTime=t?.cacheTime??Xi,this.cacheTime>0?this.requestCache=new Ge(t?.resourceCacheSize??Yi):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,O.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(en));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 en(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 zr;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(zr));let[o,s]=i.split("/");return!o||!s?new C(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}requestSchema(t){if(Rr(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 he=class{constructor(e,t){this.operator=e;this.child=t}toString(){return`${t
|
|
|
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)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};
|
|
40
|
+
}`.replace(/\s+/g," "),a=await this.graphql(s);vr(a.data.StructureDefinitionList);for(let c of a.data.SearchParameterList)Et(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,O.JSON,n)}graphql(t,n,i,o){return this.post(this.fhirUrl("$graphql"),{query:t,operationName:n,variables:i},O.JSON,o)}readResourceGraph(t,n,i,o){return this.get(`${this.fhirUrl(t,n)}/$graph?graph=${i}`,o)}pushToAgent(t,n,i,o,s){return this.post(this.fhirUrl("Agent",Ht(t),"$push"),{destination:se(n),body:i,contentType:o},O.FHIR_JSON,s)}getActiveLogin(){return this.storage.getObject("activeLogin")}async setActiveLogin(t){(!this.sessionDetails?.profile||se(this.sessionDetails.profile)!==t.profile?.reference)&&this.clearActiveLogin(),this.setAccessToken(t.accessToken,t.refreshToken),this.storage.setObject("activeLogin",t),this.addLogin(t),this.refreshPromise=void 0,await this.refreshProfile()}getAccessToken(){return this.accessToken}setAccessToken(t,n){this.accessToken=t,this.refreshToken=n,this.sessionDetails=void 0,this.medplumServer=Gr(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;let o=this.sessionDetails?.profile?.id!==i.profile.id;this.sessionDetails=i,o&&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(Kr)&&(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({resourceType:"Media",status:"completed",content:{contentType:n,url:Kr+a.id,title:i},...o},s)}async bulkExport(t="",n,i,o){let s=t&&`${t}/`,a=this.fhirUrl(`${s}$export`);return n&&a.searchParams.set("_type",n),i&&a.searchParams.set("_since",i),this.startAsyncRequest(a.toString(),o)}async startAsyncRequest(t,n={}){this.addFetchOptionsDefaults(n);let i=n.headers;i.Prefer="respond-async";let o=await this.fetchWithRetry(t,n);if(o.status===202){let s=await Zr(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(pr);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(gt(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 ot(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 Zr(a);c&&(i=await this.fetchWithRetry(c,s))}await ot(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(gt(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&&!yt(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||(n.Accept=zi),n["X-Medplum"]="extended",t.body&&!n["Content-Type"]&&(n["Content-Type"]=O.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=Ot();sessionStorage.setItem("pkceState",t);let n=Ot();sessionStorage.setItem("codeVerifier",n);let i=await $r(n),o=Yt(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??Yr()),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??Yr()),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=qr(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",Vt(i),O.FORM_URL_ENCODED))["hub.channel.endpoint"];if(!s)throw new Error("Invalid response!");return i.endpoint=s,i}async fhircastUnsubscribe(t){if(!Je(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",Vt(t),O.FORM_URL_ENCODED)}fhircastConnect(t){return new ze(t)}async fhircastPublish(t,n,i){return this.post(`/fhircast/STU2/${t}`,Qr(t,n,i),O.JSON)}async invite(t,n){return this.post("admin/projects/"+t+"/invite",n)}async fetchTokens(t){let n={method:"POST",headers:{"Content-Type":O.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(U(a.error_description))}catch(a){throw new d(U("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(Wr(n)){let i=_t(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 ro(){if(!globalThis.fetch)throw new Error("Fetch not available in this environment");return globalThis.fetch.bind(globalThis)}function Yr(){return typeof window>"u"?"":window.location.protocol+"//"+window.location.host+"/"}function Xr(r){return r.endsWith("/")?r:r+"/"}function Xe(r,e){return new URL(e,r).toString()}async function Zr(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(ke(n)&&n.issue?.[0]?.diagnostics)return n.issue[0].diagnostics}function en(r){let e=r.entry?.map(t=>t.resource)??[];return Object.assign(e,{bundle:r})}var tn="http://unitsofmeasure.org",Vc="http://loinc.org",_c="http://snomed.info/sct",Uc="http://www.nlm.nih.gov/research/umls/rxnorm",Lc="http://www.ama-assn.org/go/cpt",Fc="http://hl7.org/fhir/sid/icd-10";var no=[...le,"->","<<",">>"];function rn(r){return new W(r,ue,no).tokenize()}var Lt=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("}")}},io=de().registerInfix("->",{precedence:f.Arrow}).registerInfix(";",{precedence:f.Semicolon});function Wc(r){let e=io.construct(rn(r));return e.removeComments(),new Lt(e).parse()}var oo=[...le,"eq","ne","co"];function nn(r){return new W(r,ue,oo,{dateTimeLiterals:!0,symbolRegex:/[^\s\])]/}).tokenize()}var Ze=class{constructor(e,t,n){this.path=e;this.operator=t;this.value=n}},et=class{constructor(e){this.child=e}},tt=class{constructor(e,t,n){this.keyword=e;this.left=t;this.right=n}};var so={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 ao(r){let e=so[r];if(!e)throw new d(U("Invalid operator: "+r));return e}var Ft=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 et(this.parse()),this.parser.consume(")")):e=new Ze(this.parser.consume("Symbol").value,ao(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 tt(t,e,this.parse())):e}},co=de();function iu(r){let e=co.construct(nn(r));return e.removeComments(),new Ft(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}},on=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 ye(["MSH",this.context.getMsh2(),o,s,n,i,lo(e),"",this.buildAckMessageType(t),e.getTime().toString(),"P",c],this.context),new ye(["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=>ye.parse(n,t)),t)}},ye=class r{constructor(e,t=new G){this.context=t,Kt(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 au(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=uo(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 uo(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 lo(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 du(r){if(!r)throw new d(h("Resource type is null"));if(!Er(r))throw new d(h("Unknown resource type"))}function sn(r,e,t){r===null?t.push(y(e,"Invalid null value")):Array.isArray(r)?po(r,e,t):typeof r=="object"&&fo(r,e,t)}function po(r,e,t){for(let n=0;n<r.length;n++)r[n]===void 0?t.push(y(`${e}[${n}]`,"Invalid undefined value")):sn(r[n],`${e}[${n}]`,t)}function fo(r,e,t){for(let[n,i]of Object.entries(r))sn(i,`${e}${e?".":""}${n}`,t)}function fu(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 Mt(r,e,t,n){new Nt(r,e,t,n).crawl()}var Nt=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=Bt(e,t);this.visitor.visitProperty&&this.visitor.visitProperty(e,t,i,o,n);for(let s of o)if(s)for(let a of be(s))this.crawlPropertyValue(a,i)}crawlPropertyValue(e,t){if(!Re(e.type.charAt(0))){let n=te(e.type);this.crawlObject(e,n,t)}}};function Bt(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 an={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"},mo={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:/.*/},ho={"ele-1":!0};function Nu(r,e){new qt(r.resourceType,r,e).validate()}var qt=class{constructor(e,t,n){this.issues=[],this.rootResource=t,this.currentResource=[],n?this.schema=Rt(n):this.schema=te(e)}validate(){let e=this.rootResource.resourceType;if(!e)throw new d(h("Missing resource type"));$t(this.rootResource,e,this.issues),Mt(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}`)),cn(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=To(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):R(e)?(this.issues.push(y(n,"Invalid empty value")),!1):!0}checkPropertyValue(e,t){Re(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)&&!go(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 ho)&&!this.isExpressionTrue(o,e,n)){this.issues.push(hr(n,o));return}}}isExpressionTrue(e,t,n){try{let i=pe(e.expression,[t],{context:t,resource:T(this.currentResource[this.currentResource.length-1]),rootResource:T(this.rootResource),ucum:T(tn)});return i.length===1&&i[0].value===!0}catch(i){return this.issues.push(yr(n,"Error evaluating invariant expression",i,{fhirpath:e.expression})),!1}}validatePrimitiveType(e,t){let[n,i]=vo(e);if(n){let{type:o,value:s}=n;if(!(o in an)){this.issues.push(y(t,`Invalid JSON type: ${o} is not a valid FHIR type`));return}let a=an[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&&Mt(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=mo[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")):yo(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 yo(r){return r===u.integer||r===u.positiveInt||r===u.unsignedInt}function go(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 $t(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]&&$t(i[a],`${o}[${a}]`,t);else typeof i=="object"&&$t(i,o,t)}}function cn(r,e){return e.pattern&&!Se(r,e.pattern)?!1:!(e.fixed&&!ve(r,e.fixed))}function xo(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(cn(r,n))return!0;break;case"type":return!r||!i?.length?!1:i.some(o=>o.code===r.type)}return!1}function To(r,e){if(e){for(let t of e.slices)if(e.discriminator.every(n=>be(Bt(r,n.path))?.some(i=>xo(i,n,t))))return t.name}}function vo(r){if(typeof r.value!="object"||!r.value)return[r,void 0];let e=r.value.valueOf();if(e===r.value)return[void 0,{type:"Element",value:r.value}];let t=new Set(Object.keys(e)),n=Object.entries(r.value).filter(([o,s])=>!t.has(o)),i=n.length>0?Object.fromEntries(n):void 0;return[{type:r.type,value:e},{type:"Element",value:i}]}export{Oi as AccessPolicyInteraction,Lc as CPT,Ye as ClientStorage,O as ContentType,zi as DEFAULT_ACCEPT,ka as DEFAULT_SEARCH_COUNT,he as EventTarget,Ze as FhirFilterComparison,tt as FhirFilterConnective,et as FhirFilterNegation,ze as FhircastConnection,G as Hl7Context,oe as Hl7Field,on as Hl7Message,ye as Hl7Segment,Fc as ICD10,$ as InfixOperatorAtom,Vc as LOINC,Ge as LRUCache,Oc as MEDPLUM_VERSION,Jr as MedplumClient,Ut as MemoryStorage,to as OAuthClientAssertionType,Zi as OAuthGrantType,eo as OAuthTokenType,d as OperationOutcomeError,li as Operator,f as OperatorPrecedence,rt as Parser,xe as ParserBuilder,ge as PrefixOperatorAtom,u as PropertyType,Uc as RXNORM,C as ReadablePromise,_c as SNOMED,wr as SearchParameterType,Ke as TypedEventTarget,tn as UCUM,ms as accepted,as as allOk,Yt as arrayBufferToBase64,Jt as arrayBufferToHex,be as arrayify,vs as assertOk,U as badRequest,l as booleanToTypedValue,Kn as buildTypeName,Te as calculateAge,Co as calculateAgeString,$a as canReadResourceType,ja as canWriteResource,Vi as canWriteResourceType,A as capitalize,sn as checkForNull,es as compressElement,Xa as convertContainedResourcesToBundle,Ui as convertToTransactionBundle,Mt as crawlResource,hr as createConstraintIssue,Qr as createFhircastMessagePayload,yr as createProcessingIssue,K as createReference,y as createStructureIssue,cs as created,Br as decodeBase64,it as deepClone,ve as deepEquals,Se as deepIncludes,qr as encodeBase64,$r as encryptSHA256,ie as evalFhirPath,pe as evalFhirPathTyped,ut as fhirPathArrayEquals,lt as fhirPathArrayEquivalent,ar as fhirPathEquals,Bn as fhirPathEquivalent,Pe as fhirPathIs,ct as fhirPathNot,an as fhirTypeToJsType,Lo as findObservationInterval,Fo as findObservationReferenceRange,$o as findResourceByCode,ds as forbidden,Qo as formatAddress,kn as formatCodeableConcept,On as formatCoding,Ko as formatDate,st as formatDateTime,Go as formatFamilyName,Wo as formatGivenName,lo as formatHl7DateTime,Ee as formatHumanName,Xo as formatMoney,Dn as formatObservationValue,zo as formatPeriod,z as formatQuantity,Yo as formatRange,_a as formatSearchQuery,An as formatTime,Jo as formatTiming,me as generateId,Sr as getAllDataTypes,Io as getAllQuestionnaireAnswers,nt as getCodeBySystem,te as getDataType,Po as getDateProperty,dn as getDisplayString,Ce as getElementDefinition,St as getElementDefinitionTypeName,Ea as getExpressionForResourceType,Or as getExpressionsForResourceType,Vo as getExtension,Do as getExtensionValue,ko as getIdentifier,Ao as getImageSrc,Bt as getNestedProperty,Bs as getPropertyDisplayName,wo as getQuestionnaireAnswers,Ot as getRandomString,se as getReferenceString,Fs as getResourceTypes,Ms as getSearchParameter,Ir as getSearchParameterDetails,Ns as getSearchParameters,Ts as getStatus,w as getTypedPropertyValue,I as globalSchema,ps as gone,Et as indexSearchParameter,Ls as indexSearchParameterBundle,vr as indexStructureDefinitionBundle,tr as inflateBaseSchema,Ln as inflateElement,de as initFhirPathParserBuilder,ys as isAccepted,Hr as isCompletedSubscriptionRequest,hs as isCreated,Rr as isDataTypeLoaded,R as isEmpty,ji as isFhircastResourceType,xs as isGone,Wr as isJwt,Re as isLowerCase,Gr as isMedplumAccessToken,gs as isNotFound,j as isObject,yt as isOk,ke as isOperationOutcome,qn as isPeriod,ln as isProfileResource,b as isQuantity,cr as isQuantityEquivalent,ae as isReference,_ as isResource,Er as isResourceType,bt as isResourceTypeSchema,Kt as isStringArray,_o as isUUID,at as isValidDate,Hn as loadDataType,_i as matchesAccessPolicy,Zt as matchesRange,Fr as matchesSearchRequest,$n as normalizeErrorString,gt as normalizeOperationOutcome,pr as notFound,us as notModified,jn as operationOutcomeIssueToString,mr as operationOutcomeToString,wt as parseCriteriaAsSearchRequest,At as parseFhirPath,iu as parseFilterParameter,au as parseHl7DateTime,_t as parseJWTPayload,Wc as parseMappingLanguage,Eo as parseReference,Da as parseSearchDefinition,Oa as parseSearchRequest,Ur as parseSearchUrl,Rt as parseStructureDefinition,Va as parseXFhirQuery,Mo as preciseEquals,qo as preciseGreaterThan,En as preciseGreaterThanOrEquals,Bo as preciseLessThan,bn as preciseLessThanOrEquals,No as preciseRound,ki as projectAdminResourceTypes,Ii as protectedResourceTypes,Ae as removeDuplicates,Fi as reorderBundle,Ht as resolveId,Ha as satisfiedAccessPolicy,Vt as serializeFhircastSubscriptionRequest,fr as serverError,Uo as setCodeBySystem,Oo as setIdentifier,V as singleton,ot as sleep,fu as streamToBuffer,Gt as stringify,Pr as stringifyTypedValue,Is as subsetResource,N as toJsBoolean,T as toTypedValue,fs as tooManyRequests,br as tryGetDataType,ls as unauthorized,Je as validateFhircastSubscriptionRequest,Nu as validateResource,du as validateResourceType,h as validationError};
|
|
41
41
|
//# sourceMappingURL=index.mjs.map
|