@medplum/core 2.2.2 → 2.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,12 @@
1
- "use strict";var It=Object.defineProperty;var Gn=Object.getOwnPropertyDescriptor;var zn=Object.getOwnPropertyNames;var Jn=Object.prototype.hasOwnProperty;var Yn=(r,e)=>{for(var t in e)It(r,t,{get:e[t],enumerable:!0})},Xn=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of zn(e))!Jn.call(r,i)&&i!==t&&It(r,i,{get:()=>e[i],enumerable:!(n=Gn(e,i))||n.enumerable});return r};var Zn=r=>Xn(It({},"__esModule",{value:!0}),r);var Xs={};Yn(Xs,{AccessPolicyInteraction:()=>En,AndAtom:()=>Me,ArithemticOperatorAtom:()=>R,AsAtom:()=>Y,BooleanInfixOperatorAtom:()=>v,CPT:()=>ws,ClientStorage:()=>Je,ConcatAtom:()=>Ve,ContainsAtom:()=>De,ContentType:()=>w,DEFAULT_ACCEPT:()=>Mn,DEFAULT_SEARCH_COUNT:()=>Mo,DotAtom:()=>H,EmptySetAtom:()=>ke,EqualsAtom:()=>Fe,EquivalentAtom:()=>Ue,EventTarget:()=>fe,ExternalSecretSystems:()=>Rs,FHIRCAST_EVENT_NAMES:()=>vt,FHIRCAST_EVENT_RESOURCES:()=>On,FHIRCAST_EVENT_VERSION_REQUIRED:()=>St,FHIRCAST_RESOURCE_TYPES:()=>kn,FhirFilterComparison:()=>Ye,FhirFilterConnective:()=>Ze,FhirFilterNegation:()=>Xe,FhirPathAtom:()=>Ie,FhircastConnection:()=>Ge,FunctionAtom:()=>q,Hl7Context:()=>W,Hl7Field:()=>ie,Hl7Message:()=>Pr,Hl7Segment:()=>me,ICD10:()=>Is,ImpliesAtom:()=>$e,InAtom:()=>Ne,IndexerAtom:()=>Z,InfixOperatorAtom:()=>j,IsAtom:()=>X,LOINC:()=>Ps,LRUCache:()=>Ke,LiteralAtom:()=>D,MEDPLUM_VERSION:()=>Ts,MedplumClient:()=>Sr,MemoryStorage:()=>Pt,NotEqualsAtom:()=>_e,NotEquivalentAtom:()=>Le,OAuthClientAssertionType:()=>jn,OAuthGrantType:()=>Bn,OAuthTokenAuthMethod:()=>$n,OAuthTokenType:()=>qn,OperationOutcomeError:()=>p,Operator:()=>hn,OperatorPrecedence:()=>m,OrAtom:()=>Be,Parser:()=>et,ParserBuilder:()=>ye,PrefixOperatorAtom:()=>he,PropertyType:()=>c,RXNORM:()=>Cs,ReadablePromise:()=>I,SNOMED:()=>As,SearchParameterType:()=>ir,SymbolAtom:()=>B,Tokenizer:()=>K,TypedEventTarget:()=>We,UCUM:()=>Er,UnaryOperatorAtom:()=>Oe,UnionAtom:()=>te,XorAtom:()=>qe,accepted:()=>io,allOk:()=>Yi,arrayBufferToBase64:()=>Nt,arrayBufferToHex:()=>Dt,arrayify:()=>Se,assertContextVersionOptional:()=>gr,assertOk:()=>po,badRequest:()=>C,booleanToTypedValue:()=>l,buildTypeName:()=>ln,calculateAge:()=>ge,calculateAgeString:()=>oi,canReadResourceType:()=>cs,canWriteResource:()=>us,canWriteResourceType:()=>bn,capitalize:()=>A,checkForNull:()=>Ar,compressElement:()=>Wi,convertContainedResourcesToBundle:()=>ms,convertToTransactionBundle:()=>An,crawlResource:()=>Ct,createConstraintIssue:()=>Wt,createDeferredPromise:()=>Oi,createFhircastMessagePayload:()=>bt,createProcessingIssue:()=>Gt,createReference:()=>G,createStructureIssue:()=>y,created:()=>Xi,decodeBase64:()=>fr,deepClone:()=>rt,deepEquals:()=>xe,deepIncludes:()=>Te,encodeBase64:()=>mr,encryptSHA256:()=>hr,evalFhirPath:()=>re,evalFhirPathTyped:()=>de,fhirPathArrayEquals:()=>at,fhirPathArrayEquivalent:()=>ct,fhirPathEquals:()=>Ut,fhirPathEquivalent:()=>Yr,fhirPathIs:()=>Re,fhirPathNot:()=>st,fhirTypeToJsType:()=>wr,findObservationInterval:()=>vi,findObservationReferenceRange:()=>Si,findResourceByCode:()=>Ii,forbidden:()=>to,formatAddress:()=>Vi,formatCodeableConcept:()=>qr,formatCoding:()=>$r,formatDate:()=>Fi,formatDateTime:()=>it,formatFamilyName:()=>Ni,formatGivenName:()=>Di,formatHl7DateTime:()=>Kn,formatHumanName:()=>Ee,formatMoney:()=>ji,formatObservationValue:()=>jr,formatPeriod:()=>_i,formatQuantity:()=>z,formatRange:()=>$i,formatSearchQuery:()=>Yo,formatTime:()=>Br,formatTiming:()=>Bi,generateId:()=>pe,getAllDataTypes:()=>Xt,getAllQuestionnaireAnswers:()=>ai,getCodeBySystem:()=>tt,getDataType:()=>ee,getDateProperty:()=>ii,getDisplayString:()=>Dr,getElementDefinition:()=>Pe,getElementDefinitionTypeName:()=>pt,getExpressionForResourceType:()=>Lo,getExpressionsForResourceType:()=>sr,getExtension:()=>di,getExtensionValue:()=>li,getIdentifier:()=>ci,getImageSrc:()=>ni,getNestedProperty:()=>wt,getPropertyDisplayName:()=>Eo,getQuestionnaireAnswers:()=>si,getRandomString:()=>Tt,getReferenceString:()=>oe,getResourceTypes:()=>To,getSearchParameter:()=>So,getSearchParameterDetails:()=>or,getSearchParameters:()=>vo,getStatus:()=>lo,getTypedPropertyValue:()=>k,globalSchema:()=>O,gone:()=>ro,indexSearchParameter:()=>ht,indexSearchParameterBundle:()=>xo,indexStructureDefinitionBundle:()=>Yt,inflateBaseSchema:()=>_t,inflateElement:()=>Hr,initFhirPathParserBuilder:()=>le,isAccepted:()=>ao,isCompletedSubscriptionRequest:()=>xr,isContextVersionRequired:()=>yr,isCreated:()=>so,isDataTypeLoaded:()=>Zt,isEmpty:()=>S,isFhircastResourceType:()=>Vn,isGone:()=>uo,isJwt:()=>Tr,isLowerCase:()=>ve,isMedplumAccessToken:()=>vr,isNotFound:()=>co,isObject:()=>Q,isOk:()=>dt,isOperationOutcome:()=>Ae,isPeriod:()=>Xr,isProfileResource:()=>Vr,isQuantity:()=>E,isQuantityEquivalent:()=>Lt,isReference:()=>se,isResource:()=>F,isResourceType:()=>tr,isResourceTypeSchema:()=>mt,isStringArray:()=>Vt,isUUID:()=>xi,isValidDate:()=>ot,loadDataType:()=>cn,matchesAccessPolicy:()=>Rn,matchesRange:()=>Ft,matchesSearchRequest:()=>dr,normalizeErrorString:()=>rn,normalizeOperationOutcome:()=>Ce,notFound:()=>Qt,notModified:()=>Zi,operationOutcomeIssueToString:()=>nn,operationOutcomeToString:()=>Ht,parseCriteriaAsSearchRequest:()=>gt,parseFhirPath:()=>yt,parseFilterParameter:()=>Us,parseHl7DateTime:()=>Ls,parseJWTPayload:()=>Rt,parseMappingLanguage:()=>Vs,parseParameter:()=>xn,parseReference:()=>ei,parseSearchDefinition:()=>qo,parseSearchRequest:()=>Bo,parseSearchUrl:()=>ur,parseStructureDefinition:()=>ft,parseXFhirQuery:()=>Jo,preciseEquals:()=>Ai,preciseGreaterThan:()=>wi,preciseGreaterThanOrEquals:()=>Mr,preciseLessThan:()=>Ci,preciseLessThanOrEquals:()=>Lr,preciseRound:()=>Pi,projectAdminResourceTypes:()=>Sn,protectedResourceTypes:()=>vn,removeDuplicates:()=>be,reorderBundle:()=>Cn,resolveId:()=>kt,satisfiedAccessPolicy:()=>ls,serializeFhircastSubscriptionRequest:()=>Et,serverError:()=>oo,setCodeBySystem:()=>Ti,setIdentifier:()=>ui,singleton:()=>N,sleep:()=>nt,splitN:()=>ki,streamToBuffer:()=>js,stringify:()=>Ot,stringifyTypedValue:()=>rr,subsetResource:()=>fo,toJsBoolean:()=>U,toTypedValue:()=>T,tooManyRequests:()=>no,tryGetDataType:()=>er,unauthorized:()=>eo,validateFhircastSubscriptionRequest:()=>ze,validateResource:()=>Ks,validateResourceType:()=>Bs,validationError:()=>h});module.exports=Zn(Xs);var he=class{constructor(e,t){this.operator=e;this.child=t}toString(){return`${this.operator}(${this.child.toString()})`}},j=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 G(r){let e=oe(r),t=Dr(r);return t===e?{reference:e}:{reference:e,display:t}}function oe(r){return se(r)?r.reference:`${r.resourceType}/${r.id}`}function kt(r){if(r)return se(r)?r.reference.split("/")[1]:r.id}function ei(r){if(r?.reference===void 0)return;let[e,t]=r.reference.split("/");if(!(e===""||t===""||t===void 0))return[e,t]}function Vr(r){return r.resourceType==="Patient"||r.resourceType==="Practitioner"||r.resourceType==="RelatedPerson"}function Dr(r){if(Vr(r)){let e=ti(r);if(e)return e}if(r.resourceType==="Device"){let e=ri(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:oe(r)}function ti(r){let e=r.name;if(e&&e.length>0)return Ee(e[0])}function ri(r){let e=r.deviceName;if(e&&e.length>0)return e[0].name}function ni(r){if(!("photo"in r))return;let e=r.photo;if(e)if(Array.isArray(e))for(let t of e){let n=Or(t);if(n)return n}else return Or(e)}function Or(r){if(r.url&&r.contentType&&r.contentType.startsWith("image/"))return r.url}function ii(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(),u=n.getUTCMonth(),d=n.getUTCDate(),f=a-i;(u<o||u===o&&d<s)&&f--;let P=a*12+u-(i*12+o);d<s&&P--;let $=Math.floor((n.getTime()-t.getTime())/(1e3*60*60*24));return{years:f,months:P,days:$}}function oi(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 si(r){let e={};return Nr(r.item,e),e}function Nr(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer[0]),Nr(t.item,e)}function ai(r){let e={};return Fr(r.item,e),e}function Fr(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer),Fr(t.item,e)}function ci(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 ui(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 li(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 di(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 Ot(r,e){return JSON.stringify(r,pi,e?2:void 0)}function pi(r,e){return!fi(r)&&S(e)?void 0:e}function fi(r){return!!/\d+$/.exec(r)}function S(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||S(r)&&S(e)?!0:S(r)||S(e)?!1:Array.isArray(r)&&Array.isArray(e)?mi(r,e):Array.isArray(r)||Array.isArray(e)?!1:Q(r)&&Q(e)?hi(r,e,t):(Q(r)||Q(e),!1)}function mi(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 hi(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 S(r)?!0:S(e)?!1:Array.isArray(r)&&Array.isArray(e)?yi(r,e):Array.isArray(r)||Array.isArray(e)?!1:Q(r)&&Q(e)?gi(r,e):Q(r)||Q(e)?!1:r===e}function yi(r,e){return e.every(t=>r.some(n=>Te(n,t)))}function gi(r,e){return Object.entries(e).every(([t,n])=>t in r&&Te(r[t],n))}function rt(r){return JSON.parse(JSON.stringify(r))}function xi(r){return!!/^\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/i.exec(r)}function Q(r){return r!==null&&typeof r=="object"}function Vt(r){return r.every(e=>typeof e=="string")}var _r=[];for(let r=0;r<256;r++)_r.push(r.toString(16).padStart(2,"0"));function Dt(r){let e=new Uint8Array(r),t=new Array(e.length);for(let n=0;n<e.length;n++)t[n]=_r[e[n]];return t.join("")}function Nt(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?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 Ti(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 vi(r,e,t,n){return r.qualifiedInterval?.find(i=>Ur(i,e)&&Ri(i,t,r.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function Si(r,e,t){return r.qualifiedInterval?.find(n=>Ur(n,e)&&t.includes(n.condition))}function Ur(r,e){return Ei(r,e)&&bi(r,e)}function Ei(r,e){return!r.gender||r.gender===e.gender}function bi(r,e){return!r.age||Ft(ge(e.birthDate).years,r.age)}function Ri(r,e,t){return!!r.range&&Ft(e,r.range,t)}function Ft(r,e,t){return(e.low?.value===void 0||Mr(r,e.low.value,t))&&(e.high?.value===void 0||Lr(r,e.high.value,t))}function Pi(r,e){return parseFloat(r.toFixed(e))}function Ai(r,e,t){return _(r,t)===_(e,t)}function Ci(r,e,t){return _(r,t)<_(e,t)}function wi(r,e,t){return _(r,t)>_(e,t)}function Lr(r,e,t){return _(r,t)<=_(e,t)}function Mr(r,e,t){return _(r,t)>=_(e,t)}function _(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}function Ii(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 ki(r,e,t){let n=[];for(let i=0;i<t-1;i++){let o=r.indexOf(e);o<0&&(o=r.length),n.push(r.slice(0,o)),r=r.slice(o+e.length)}return r&&n.push(r),n}function Oi(){let r,e;return{promise:new Promise((n,i)=>{r=n,e=i}),resolve:r,reject:e}}function Vi(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=[];if(r.prefix&&e?.prefix!==!1&&t.push(...r.prefix),r.given&&t.push(...r.given),r.family&&t.push(r.family),r.suffix&&e?.suffix!==!1&&t.push(...r.suffix),r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.length===0){let n=ae(r.text);if(n)return n}return t.join(" ").trim()}function Di(r){let e=[];return r.given&&e.push(...r.given),e.join(" ").trim()}function Ni(r){return ae(r.family)??""}function ot(r){return r instanceof Date&&!isNaN(r.getTime())}function Fi(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 Br(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 _i(r,e,t){return!r||!r.start&&!r.end?"":it(r.start,e,t)+" - "+it(r.end,e,t)}var Ui={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},Li={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},Mi={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function Bi(r){if(!r)return"";let e=[];return qi(e,r.repeat),r.event&&e.push(r.event.map(t=>it(t)).join(", ")),A(e.join(" ").trim())}function qi(r,e){if(!e?.periodUnit)return;let t=e.frequency??1,n=e.period??1,i=e.periodUnit;t===1&&n===1?r.push(Ui[i]):(t===1?r.push("once"):r.push(t+" times"),n===1?r.push("per "+Li[i]):r.push("per "+n+" "+Mi[i])),e.dayOfWeek&&r.push("on "+e.dayOfWeek.map(A).join(", ")),e.timeOfDay&&r.push("at "+e.timeOfDay.map(o=>Br(o)).join(", "))}function $i(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=Hi(n.value,e),`> ${z(n,e)}`):`>= ${z(n,e)}`:n?.value===void 0&&i?.value!==void 0?t&&e!==void 0?(i.value=Qi(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 ji(r){return r?.value===void 0?"":r.value.toLocaleString(void 0,{style:"currency",currency:r.currency??"USD",currencyDisplay:"narrowSymbol"})}function qr(r){if(!r)return"";let e=ae(r.text);return e||(r.coding?r.coding.map(t=>$r(t)).join(", "):"")}function $r(r){return ae(r?.display)??ae(r?.code)??""}function jr(r){if(!r)return"";if("component"in r)return r.component.map(t=>jr(t)).join(" / ");if(r.valueQuantity)return z(r.valueQuantity);if(r.valueCodeableConcept)return qr(r.valueCodeableConcept);let e=ae(r.valueString);return e||""}function ae(r){return typeof r=="string"?r:void 0}function Qi(r,e,t=1){return(Qr(r,e)+t)*Math.pow(10,-e)}function Hi(r,e,t=1){return(Qr(r,e)-t)*Math.pow(10,-e)}function Qr(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}var Ki={"http://hl7.org/fhirpath/System.String":"string"};function Wi(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:Ki[t.code]??t.code})),e}function Hr(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 _t(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,Hr(o)])),constraints:[],innerTypes:[]};return e}var Kr={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"}]},tokenAuthMethod:{type:[{code:"code"}]},userInfoUrl:{min:1,type:[{code:"string"}]},clientId:{min:1,type:[{code:"string"}]},clientSecret:{min:1,type:[{code:"string"}]},usePkce:{type:[{code:"boolean"}]},useSubject:{type:[{code:"boolean"}]}}}};function l(r){return[{type:c.boolean,value:r}]}function T(r){return r==null?{type:"undefined",value:void 0}:Number.isSafeInteger(r)?{type:c.integer,value:r}:typeof r=="number"?{type:c.decimal,value:r}:typeof r=="boolean"?{type:c.boolean,value:r}:typeof r=="string"?{type:c.string,value:r}:E(r)?{type:c.Quantity,value:r}:F(r)?{type:r.resourceType,value:r}:{type:c.BackboneElement,value:r}}function U(r){return r.length===0?!1:!!r[0].value}function N(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 k(r,e){if(!r.value)return;let t=Pe(r.type,e);return t?zi(r,e,t):Ji(r,e)}function zi(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 u=e.replace("[x]","")+A(a.code);if(u in r.value){i=r.value[u],o=a.code;break}}let s=r.value["_"+e];if(s&&(Array.isArray(i)?i=i.map((a,u)=>s[u]?Jr(a??{},s[u]):a):i=Jr(i??{},s)),!S(i))return(o==="Element"||o==="BackboneElement")&&(o=t.type[0].code),Array.isArray(i)?i.map(a=>Wr(a,o)):Wr(i,o)}function Wr(r,e){return e==="Resource"&&F(r)&&(e=r.resourceType),{type:e,value:r}}function Ji(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 c){let o=e+A(i);if(o in t){n=t[o];break}}if(!S(n))return Array.isArray(n)?n.map(T):T(n)}function be(r){let e=[];for(let t of r){let n=!1;for(let i of e)if(U(Ut(t,i))){n=!0;break}n||e.push(t)}return e}function st(r){return l(!U(r))}function at(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?l(!1):l(r.every((t,n)=>U(Ut(t,e[n]))))}function Ut(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):E(t)&&E(n)?l(Lt(t,n)):l(typeof t=="object"&&typeof n=="object"?Mt(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(Gr),e.sort(Gr),l(r.every((t,n)=>U(Yr(t,e[n])))))}function Yr(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):E(s)&&E(a)?l(Lt(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"?Mt({...s,id:void 0},{...a,id:void 0}):typeof s=="string"&&typeof a=="string"?s.toLowerCase()===a.toLowerCase():s===a)}function Gr(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 Re(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 Xr(t);case"Quantity":return E(t);default:return typeof t=="object"&&t?.resourceType===e}}function Xr(r){return!!(r&&typeof r=="object"&&"start"in r)}function E(r){return!!(r&&typeof r=="object"&&"value"in r&&typeof r.value=="number")}function Lt(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 Mt(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(zr(o)&&zr(s)){if(!Mt(o,s))return!1}else if(o!==s)return!1}return!0}function zr(r){return r!==null&&typeof r=="object"}function Jr(r,e){return delete e.__proto__,delete e.constructor,Object.assign(r,e)}var Bt="ok",ut="created",qt="gone",$t="not-modified",jt="not-found",Zr="unauthorized",en="forbidden",tn="too-many-requests",lt="accepted",Yi={resourceType:"OperationOutcome",id:Bt,issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},Xi={resourceType:"OperationOutcome",id:ut,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},Zi={resourceType:"OperationOutcome",id:$t,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},Qt={resourceType:"OperationOutcome",id:jt,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},eo={resourceType:"OperationOutcome",id:Zr,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},to={resourceType:"OperationOutcome",id:en,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},ro={resourceType:"OperationOutcome",id:qt,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},no={resourceType:"OperationOutcome",id:tn,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function io(r){return{resourceType:"OperationOutcome",id:lt,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:r}]}}function C(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 oo(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:r.toString()}]}}function Ae(r){return typeof r=="object"&&r!==null&&r.resourceType==="OperationOutcome"}function dt(r){return r.id===Bt||r.id===ut||r.id===$t||r.id===lt}function so(r){return r.id===ut}function ao(r){return r.id===lt}function co(r){return r.id===jt}function uo(r){return r.id===qt}function lo(r){switch(r.id){case Bt:return 200;case ut:return 201;case lt:return 202;case $t:return 304;case Zr:return 401;case en:return 403;case jt:return 404;case qt:return 410;case tn:return 429;default:return r.issue?.[0]?.code==="exception"?500:400}}function po(r,e){if(!dt(r)||e===void 0)throw new p(r)}var p=class extends Error{constructor(t,n){super(Ht(t));this.outcome=t,this.cause=n}};function Ce(r){return r instanceof p?r.outcome:Ae(r)?r:C(rn(r))}function rn(r){return r?typeof r=="string"?r:r instanceof Error?r.message:Ae(r)?Ht(r):typeof r=="object"&&"code"in r&&typeof r.code=="string"?r.code:JSON.stringify(r):"Unknown error"}function Ht(r){let e=r.issue?.map(nn)??[];return e.length>0?e.join("; "):"Unknown error"}function nn(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 Kt(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 Kt("structure",e,r)}function Wt(r,e){return Kt("invariant",`Constraint ${e.key} not met: ${e.description}`,r,{fhirpath:e.expression})}function Gt(r,e,t,n){return Kt("processing",e,r,{...n,error:t})}function ft(r){return new Jt(r).parse()}var J=_t(Kr);function Yt(r){let e=Array.isArray(r)?r:r.entry?.map(t=>t.resource)??[];for(let t of e)cn(t)}function cn(r){if(!r?.name)throw new Error("Failed loading StructureDefinition from bundle");if(r.resourceType!=="StructureDefinition")return;let e=ft(r);J[r.name]=e;for(let t of e.innerTypes)t.parentType=e,J[t.name]=t}function Xt(){return J}function Zt(r){return!!J[r]}function er(r){return J[r]}function ee(r){let e=J[r];if(!e)throw new p(C("Unknown data type: "+r));return e}function tr(r){let e=J[r];return e&&mt(e)}var Jt=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:go(e),elements:{},constraints:this.parseElementDefinition(this.root).constraints,innerTypes:[],summaryProperties:new Set,mandatoryProperties:new Set},this.innerTypes=[]}parse(){let e=this.next();for(;e;){if(e.sliceName)this.parseSliceStart(e);else if(e.id?.includes(":")){if(this.slicingContext?.current){let t=zt(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[zt(e,n.path)]=t;break}n=n.parent}if(!n){let i=zt(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&&!ce(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;this.backboneContext={type:{name:pt(e),description:e.definition,elements:{},constraints:this.parseElementDefinition(e).constraints,innerTypes:[]},path:e.path??"",parent:ce(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,t){yo(e)&&!this.peek()?.sliceName||(t.slicing={discriminator:(e.slicing?.discriminator??[]).map(n=>{if(n.type!=="value"&&n.type!=="pattern"&&n.type!=="type")throw new Error(`Unsupported slicing discriminator type: ${n.type}`);return{path:n.path,type:n.type}}),slices:[],ordered:e.slicing?.ordered??!1,rule:e.slicing?.rules},this.slicingContext={field:t.slicing,path:e.path??""})}checkFieldExit(e=void 0){if(this.backboneContext&&!ce(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!ce(this.backboneContext.path,e?.path));else this.innerTypes.push(this.backboneContext.type),delete this.backboneContext;this.slicingContext&&!ce(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!!(ce(e?.path,t?.path)&&e.type?.some(n=>["BackboneElement","Element"].includes(n.code)))}parseSliceStart(e){if(!this.slicingContext)throw new Error("Invalid slice start before discriminator: "+e.sliceName);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=sn(e.max),n=e.base?.max?sn(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)?pt(e):o.code??"",targetProfile:o.targetProfile})),fixed:an(k(i,"fixed")),pattern:an(k(i,"pattern")),binding:e.binding}}};function fo(r,e){if(!r)return;let t=[];for(let n of e){t.push("_"+n);let i=J[r.resourceType].elements[n+"[x]"];i&&t.push(...i.type.map(o=>n+A(o.code)))}for(let n of Object.getOwnPropertyNames(r))!e.includes(n)&&!t.includes(n)&&!mo.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(on):[on]},r}var on={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},mo=["resourceType","id","meta"];function sn(r){return r==="*"?Number.POSITIVE_INFINITY:Number.parseInt(r,10)}function zt(r,e=""){return ho(r.path,e)}function ho(r,e){return r?e&&r.startsWith(e)?r.substring(e.length+1):r:""}function ce(r,e){return!r||!e?!1:e.startsWith(r+".")||e===r}function an(r){return Array.isArray(r)&&r.length>0?r[0]:S(r)?void 0:r}function yo(r){let e=r.slicing?.discriminator;return!!(r.type?.some(t=>t.code==="Extension")&&e?.length===1&&e[0].type==="value"&&e[0].path==="url")}function go(r){let e=r.description;return e?.startsWith(`Base StructureDefinition for ${r.name} Type: `)&&(e=e.substring(`Base StructureDefinition for ${r.name} Type: `.length)),e}var c={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 xo(r){for(let e of r.entry){let t=e.resource;t.resourceType==="SearchParameter"&&ht(t)}}function ht(r){for(let e of r.base??[]){let t=O.types[e];t||(t={searchParamsDetails:{}},O.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 pt(r){let e=r.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?ln((r.base?.path??r.path)?.split(".")):e}function ln(r){return r.length===1?r[0]:r.map(A).join("")}function mt(r){return r.kind==="resource"&&r.name!=="Resource"&&r.name!=="DomainResource"}function To(){return Object.values(Xt()).filter(mt).map(r=>r.name)}function vo(r){return O.types[r]?.searchParams}function So(r,e){return O.types[r]?.searchParams?.[e]}function Eo(r){return r.replaceAll("[x]","").split(".").pop().split(/(?=[A-Z])/).map(Ro).join(" ").replace("_"," ").replace(/\s+/g," ")}var bo=new Set(["ID","IP","PKCE","JWKS","URI","URL"]);function Ro(r){let e=r.toUpperCase();return bo.has(e)?e:e.charAt(0)+r.slice(1)}function Pe(r,e){let t=er(r);if(t)return t.elements[e]??t.elements[e+"[x]"]}function F(r){return!!(r&&typeof r=="object"&&"resourceType"in r)}function se(r){return!!(r&&typeof r=="object"&&"reference"in r)}var O={types:{}};function rr(r){switch(r.type){case c.uuid:case c.uri:case c.url:case c.string:case c.oid:case c.markdown:case c.id:case c.code:case c.canonical:case c.base64Binary:case c.SystemString:case c.date:case c.dateTime:case c.instant:return r.value;case c.Identifier:return`${r.value.system??""}|${r.value.value}`;case c.Coding:return un(r.value);case c.CodeableConcept:return r.value.coding?.map(un).join(",")??r.value.text;case c.HumanName:return r.value.text?r.value.text:Ee(r.value);case c.unsignedInt:case c.positiveInt:case c.integer:case c.decimal:return r.value.toString();case c.boolean:return r.value?"true":"false";case c.Extension:return r.value.url;case c.ContactPoint:return r.value.value;case c.Quantity:case c.Age:case c.Count:case c.Duration:return`${r.value.value}|${r.value.system??""}|${r.value.code??r.value.unit??""}`;case c.Reference:return r.value.reference;default:return F(r.value)?G(r.value).reference:JSON.stringify(r)}}function un(r){return r?`${r.system??""}|${r.code}`:""}function ue(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 we=()=>[],b={empty:(r,e)=>l(e.length===0),exists:(r,e,t)=>t?l(e.filter(n=>U(t.eval(r,[n]))).length>0):l(e.length>0),all:(r,e,t)=>l(e.every(n=>U(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:we,supersetOf:we,count:(r,e)=>[{type:c.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===b.distinct(r,e).length),where:(r,e,t)=>e.filter(n=>U(t.eval(r,[n]))),select:(r,e,t)=>e.map(n=>t.eval(r,[n])).flat(),repeat:we,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 be([...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 U(o)?n.eval(r,e):i?i.eval(r,e):[]},toBoolean:(r,e)=>{if(e.length===0)return[];let[{value:t}]=M(e,1);if(typeof t=="boolean")return[{type:c.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(b.toBoolean(r,e).length===1),toInteger:(r,e)=>{if(e.length===0)return[];let[{value:t}]=M(e,1);return typeof t=="number"?[{type:c.integer,value:t}]:typeof t=="string"&&/^[+-]?\d+$/.exec(t)?[{type:c.integer,value:parseInt(t,10)}]:typeof t=="boolean"?[{type:c.integer,value:t?1:0}]:[]},convertsToInteger:(r,e)=>e.length===0?[]:l(b.toInteger(r,e).length===1),toDate:(r,e)=>{if(e.length===0)return[];let[{value:t}]=M(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:c.date,value:ue(t)}]:[]},convertsToDate:(r,e)=>e.length===0?[]:l(b.toDate(r,e).length===1),toDateTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=M(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:c.dateTime,value:ue(t)}]:[]},convertsToDateTime:(r,e)=>e.length===0?[]:l(b.toDateTime(r,e).length===1),toDecimal:(r,e)=>{if(e.length===0)return[];let[{value:t}]=M(e,1);return typeof t=="number"?[{type:c.decimal,value:t}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(t)?[{type:c.decimal,value:parseFloat(t)}]:typeof t=="boolean"?[{type:c.decimal,value:t?1:0}]:[]},convertsToDecimal:(r,e)=>e.length===0?[]:l(b.toDecimal(r,e).length===1),toQuantity:(r,e)=>{if(e.length===0)return[];let[{value:t}]=M(e,1);return E(t)?[{type:c.Quantity,value:t}]:typeof t=="number"?[{type:c.Quantity,value:{value:t,unit:"1"}}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(t)?[{type:c.Quantity,value:{value:parseFloat(t),unit:"1"}}]:typeof t=="boolean"?[{type:c.Quantity,value:{value:t?1:0,unit:"1"}}]:[]},convertsToQuantity:(r,e)=>e.length===0?[]:l(b.toQuantity(r,e).length===1),toString:(r,e)=>{if(e.length===0)return[];let[{value:t}]=M(e,1);return t==null?[]:E(t)?[{type:c.string,value:`${t.value} '${t.unit}'`}]:[{type:c.string,value:t.toString()}]},convertsToString:(r,e)=>e.length===0?[]:l(b.toString(r,e).length===1),toTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=M(e,1);if(typeof t=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(t);if(n)return[{type:c.time,value:ue("T"+n[1])}]}return[]},convertsToTime:(r,e)=>e.length===0?[]:l(b.toTime(r,e).length===1),indexOf:(r,e,t)=>V((n,i)=>n.indexOf(i),r,e,t),substring:(r,e,t,n)=>V((i,o,s)=>{let a=o,u=s?a+s:i.length;return a<0||a>=i.length?void 0:i.substring(a,u)},r,e,t,n),startsWith:(r,e,t)=>V((n,i)=>n.startsWith(i),r,e,t),endsWith:(r,e,t)=>V((n,i)=>n.endsWith(i),r,e,t),contains:(r,e,t)=>V((n,i)=>n.includes(i),r,e,t),upper:(r,e)=>V(t=>t.toUpperCase(),r,e),lower:(r,e)=>V(t=>t.toLowerCase(),r,e),replace:(r,e,t,n)=>V((i,o,s)=>i.replaceAll(o,s),r,e,t,n),matches:(r,e,t)=>V((n,i)=>!!new RegExp(i).exec(n),r,e,t),replaceMatches:(r,e,t,n)=>V((i,o,s)=>i.replaceAll(o,s),r,e,t,n),length:(r,e)=>V(t=>t.length,r,e),toChars:(r,e)=>V(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:we,descendants:we,trace:(r,e,t)=>(console.log("trace",e,t),e),now:()=>[{type:c.dateTime,value:new Date().toISOString()}],timeOfDay:()=>[{type:c.time,value:new Date().toISOString().substring(11)}],today:()=>[{type:c.date,value:new Date().toISOString().substring(0,10)}],between:(r,e,t,n,i)=>{let o=b.toDateTime(r,t.eval(r,e));if(o.length===0)throw new Error("Invalid start date");let s=b.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 u=ge(o[0].value,s[0].value);return[{type:c.Quantity,value:{value:u[a],unit:a}}]},is:(r,e,t)=>{let n="";return t instanceof B?n=t.name:t instanceof H&&(n=t.left.name+"."+t.right.name),n?e.map(i=>({type:c.boolean,value:Re(i,n)})):[]},not:(r,e)=>b.toBoolean(r,e).map(t=>({type:c.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:c.BackboneElement,value:void 0}}).filter(t=>!!t.value),as:(r,e)=>e,type:(r,e)=>e.map(({value:t})=>typeof t=="boolean"?{type:c.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof t=="number"?{type:c.BackboneElement,value:{namespace:"System",name:"Integer"}}:F(t)?{type:c.BackboneElement,value:{namespace:"FHIR",name:t.resourceType}}:{type:c.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:c.boolean,value:o.value?.resourceType===i}))}};function V(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=M(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}]=M(t,1),o=E(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(f=>f.eval(e,t)[0]?.value)),u=o?c.Quantity:t[0].type,d=o?{...i,value:a}:a;return[{type:u,value:d}]}function M(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()}},D=class{constructor(e){this.value=e}eval(){return[this.value]}toString(){let e=this.value.value;return typeof e=="string"?`'${e}'`:e.toString()}},B=class{constructor(e){this.name=e}eval(e,t){if(this.name==="$this")return t;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 F(t)&&t.resourceType===this.name?e:k(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()}},Y=class extends j{constructor(e,t){super("as",e,t)}eval(e,t){return b.ofType(e,this.left.eval(e,t),this.right)}},v=class extends j{},R=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,u=E(s)?s.value:s,d=E(a)?a.value:a,f=this.impl(u,d);return typeof f=="boolean"?l(f):E(s)?[{type:c.Quantity,value:{...s,value:f}}]:[T(f)]}},Ve=class extends j{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:c.string,value:o.map(s=>s.value).join("")}]:o}},De=class extends v{constructor(e,t){super("contains",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return l(n.some(o=>o.value===i[0].value))}},Ne=class extends v{constructor(e,t){super("in",e,t)}eval(e,t){let n=N(this.left.eval(e,t)),i=this.right.eval(e,t);return n?l(i.some(o=>o.value===n.value)):[]}},H=class extends j{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()}`}},te=class extends j{constructor(e,t){super("|",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return be([...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 at(n,i)}},_e=class extends v{constructor(e,t){super("!=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return st(at(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 ct(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(ct(n,i))}},X=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(Re(n[0],i))}},Me=class extends v{constructor(e,t){super("and",e,t)}eval(e,t){let n=N(this.left.eval(e,t),"boolean"),i=N(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=N(this.left.eval(e,t),"boolean"),i=N(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=N(this.left.eval(e,t),"boolean"),i=N(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=N(this.left.eval(e,t),"boolean"),i=N(this.right.eval(e,t),"boolean");return i?.value===!0||n?.value===!1?l(!0):!n||!i?[]:l(!1)}},q=class{constructor(e,t){this.name=e;this.args=t}eval(e,t){let n=b[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(", ")})`}},Z=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 Po=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],K=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()===" "&&Ao(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 Ao(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&Po.includes(r.value)))}var je=["true","false"],Qe=["!=","!~","<=",">=","{}","->"];function dn(r){return new K(r,je,Qe).tokenize()}var m={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},Co={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},wo={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new Z(e,t)},precedence:m.Indexer},Io={parse(r,e){if(!(e instanceof B))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new q(e.name,t)},precedence:m.FunctionCall};function ko(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 le(){return new ye().registerPrefix("String",{parse:(r,e)=>new D({type:c.string,value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new D({type:c.dateTime,value:ue(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new D({type:c.Quantity,value:ko(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new D({type:c.decimal,value:parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new D({type:c.boolean,value:!0})}).registerPrefix("false",{parse:()=>new D({type:c.boolean,value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new B(e.value)}).registerPrefix("{}",{parse:()=>new ke}).registerPrefix("(",Co).registerInfix("[",wo).registerInfix("(",Io).prefix("+",m.UnaryAdd,(r,e)=>new Oe("+",e,t=>t)).prefix("-",m.UnarySubtract,(r,e)=>new R("-",e,e,(t,n)=>-n)).infixLeft(".",m.Dot,(r,e,t)=>new H(r,t)).infixLeft("/",m.Divide,(r,e,t)=>new R("/",r,t,(n,i)=>n/i)).infixLeft("*",m.Multiply,(r,e,t)=>new R("*",r,t,(n,i)=>n*i)).infixLeft("+",m.Add,(r,e,t)=>new R("+",r,t,(n,i)=>n+i)).infixLeft("-",m.Subtract,(r,e,t)=>new R("-",r,t,(n,i)=>n-i)).infixLeft("|",m.Union,(r,e,t)=>new te(r,t)).infixLeft("=",m.Equals,(r,e,t)=>new Fe(r,t)).infixLeft("!=",m.NotEquals,(r,e,t)=>new _e(r,t)).infixLeft("~",m.Equivalent,(r,e,t)=>new Ue(r,t)).infixLeft("!~",m.NotEquivalent,(r,e,t)=>new Le(r,t)).infixLeft("<",m.LessThan,(r,e,t)=>new R("<",r,t,(n,i)=>n<i)).infixLeft("<=",m.LessThanOrEquals,(r,e,t)=>new R("<=",r,t,(n,i)=>n<=i)).infixLeft(">",m.GreaterThan,(r,e,t)=>new R(">",r,t,(n,i)=>n>i)).infixLeft(">=",m.GreaterThanOrEquals,(r,e,t)=>new R(">=",r,t,(n,i)=>n>=i)).infixLeft("&",m.Ampersand,(r,e,t)=>new Ve(r,t)).infixLeft("and",m.And,(r,e,t)=>new Me(r,t)).infixLeft("as",m.As,(r,e,t)=>new Y(r,t)).infixLeft("contains",m.Contains,(r,e,t)=>new De(r,t)).infixLeft("div",m.Divide,(r,e,t)=>new R("div",r,t,(n,i)=>n/i|0)).infixLeft("in",m.In,(r,e,t)=>new Ne(r,t)).infixLeft("is",m.Is,(r,e,t)=>new X(r,t)).infixLeft("mod",m.Modulo,(r,e,t)=>new R("mod",r,t,(n,i)=>n%i)).infixLeft("or",m.Or,(r,e,t)=>new Be(r,t)).infixLeft("xor",m.Xor,(r,e,t)=>new qe(r,t)).infixLeft("implies",m.Implies,(r,e,t)=>new $e(r,t))}var Oo=le();function yt(r){return new Ie(r,Oo.construct(dn(r)).consumeAndParse())}function re(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 de(r,t).map(n=>n.value)}function de(r,e,t){let n=t??{};return yt(r).eval({variables:n},e).map(o=>({type:o.type,value:o.value?.valueOf()}))}var ir=(f=>(f.BOOLEAN="BOOLEAN",f.NUMBER="NUMBER",f.QUANTITY="QUANTITY",f.TEXT="TEXT",f.REFERENCE="REFERENCE",f.CANONICAL="CANONICAL",f.DATE="DATE",f.DATETIME="DATETIME",f.PERIOD="PERIOD",f.UUID="UUID",f))(ir||{});function or(r,e){let t=O.types[r]?.searchParamsDetails?.[e.code];return t||(t=Do(r,e)),t}function Vo(r,e,t){let n=O.types[r];n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=t}function Do(r,e){let t=e.code,n=_o(t),i=sr(r,e.expression),o={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let a of i){let u=He(a);u.length===1&&u[0]instanceof v?o.propertyTypes.add("boolean"):pn(o,He(a),r,1)}let s={columnName:n,type:Uo(e,o.propertyTypes),elementDefinitions:o.elementDefinitions,array:o.array};return Vo(r,t,s),s}function pn(r,e,t,n){let i=e[n];if(i instanceof Y){r.propertyTypes.add(i.right.toString());return}if(i instanceof q){No(r,i);return}let o=i.toString(),s=Pe(t,o);if(!s)throw new Error(`Element definition not found for ${t} ${o}`);let a=!1,u=n+1;if(u<e.length&&e[u]instanceof Z&&(a=!0,u++),s.isArray&&!a&&(r.array=!0),u>=e.length){r.elementDefinitions.push(s);for(let d of s.type)r.propertyTypes.add(d.code);return}for(let d of s.type){let f=d.code;Fo(f)&&(f=s.type[0].code),pn(r,e,f,u)}}function No(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 X){r.propertyTypes.add(e.args[0].right.toString());return}throw new Error(`Unhandled FHIRPath function: ${e.name}`)}function Fo(r){return r==="Element"||r==="BackboneElement"}function _o(r){return r.split("-").reduce((e,t,n)=>e+(n?A(t):t),"")}function Uo(r,e){switch(r.type){case"date":return e.size===1&&e.has(c.date)?"DATE":"DATETIME";case"number":return"NUMBER";case"quantity":return"QUANTITY";case"reference":return e.has(c.canonical)?"CANONICAL":"REFERENCE";case"token":return e.size===1&&e.has(c.boolean)?"BOOLEAN":"TEXT";default:return"TEXT"}}function sr(r,e){let t=[],n=yt(e);return nr(r,n.child,t),t}function Lo(r,e){let t=sr(r,e);if(t.length!==0)return t.map(n=>n.toString()).join(" | ")}function nr(r,e,t){e instanceof te?(nr(r,e.left,t),nr(r,e.right,t)):e.toString().startsWith(r+".")&&t.push(e)}function He(r){if(r instanceof Y||r instanceof Z)return[He(r.left),r].flat();if(r instanceof v)return[r];if(r instanceof H)return[He(r.left),He(r.right)].flat();if(r instanceof q){if(r.name==="where"&&!(r.args[0]instanceof X))return[];if(r.name==="last")return[]}return[r]}var Mo=20,hn=(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))(hn||{}),yn={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"},cr={eq:"eq",ne:"ne",lt:"lt",le:"le",gt:"gt",ge:"ge",sa:"sa",eb:"eb",ap:"ap"};function Bo(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 gn(r,t)}function ur(r){let e;for(let t of r.pathname.split("/"))t&&(e=t);return gn(e,r.searchParams.entries())}function qo(r){return ur(new URL(r,"https://example.com/"))}function gt(r){return ur(new URL(r,"https://api.medplum.com/"))}function gn(r,e){let t={resourceType:r};for(let[n,i]of e)$o(t,n,i);return t}function $o(r,e,t){let n,i,o=e.indexOf(":");if(o>=0?(n=e.substring(0,o),i=e.substring(o+1)):(n=e,i=""),n==="_has"||e.includes(".")){ar(r,{code:e,operator:"eq",value:t});return}switch(n){case"_sort":jo(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=fn(t);i==="iterate"&&(s.modifier="iterate"),r.include?r.include.push(s):r.include=[s];break}case"_revinclude":{let s=fn(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=O.types[r.resourceType]?.searchParams?.[n];s?ar(r,xn(s,i,t)):ar(r,Ko(n,i,t))}}}function jo(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 xn(r,e,t){if(e==="missing")return{code:r.code,operator:"missing",value:t};switch(r.type){case"number":case"date":case"quantity":return Qo(r,t);case"reference":case"string":case"token":case"uri":return Ho(r,e,t);default:throw new Error("Unrecognized search parameter type: "+r.type)}}function Qo(r,e){let{operator:t,value:n}=Wo(e);return{code:r.code,operator:t,value:n}}function Ho(r,e,t){return{code:r.code,operator:Go(e),value:t}}function Ko(r,e,t){let n="eq";if(e)n=e;else if(t.length>=2){let i=t.substring(0,2);i in cr&&(t.length===2||t.at(2)?.match(/\d/))&&(n=i,t=t.substring(i.length))}return{code:r,operator:n,value:t}}function Wo(r){let e=r.substring(0,2),t=cr[e];return t?{operator:t,value:r.substring(2)}:{operator:"eq",value:r}}function Go(r){return yn[r]??"eq"}function fn(r){let e=r.split(":");if(e.includes("*"))throw new p(C("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new p(C(`Invalid include value '${r}': must be of the form ResourceType:search-parameter`));if(e.length===2)return{resourceType:e[0],searchParam:e[1]};if(e.length===3)return{resourceType:e[0],searchParam:e[1],targetType:e[2]};throw new p(C(`Invalid include value '${r}'`))}function ar(r,e){r.filters?r.filters.push(e):r.filters=[e]}var zo=/{{([^{}]+)}}/g;function Jo(r,e){return r=r.replaceAll(zo,(t,n)=>{let i=de(n,[],e);return i.length!==1?"":rr(i[0])}),gt(r)}function Yo(r){let e=[];return r.fields&&e.push("_fields="+r.fields.join(",")),r.filters&&r.filters.forEach(t=>e.push(Xo(t))),r.sortRules&&r.sortRules.length>0&&e.push(Zo(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(mn("_include",t))),r.revInclude&&r.revInclude.forEach(t=>e.push(mn("_revinclude",t))),e.length===0?"":(e.sort((t,n)=>t.localeCompare(n)),"?"+e.join("&"))}function Xo(r){let e=r.operator in yn?":"+r.operator:"",t=r.operator!=="eq"&&r.operator in cr?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function Zo(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function mn(r,e){return r+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function dr(r,e){if(e.resourceType!==r.resourceType)return!1;if(e.filters){for(let t of e.filters)if(!es(r,e,t))return!1}return!0}function es(r,e,t){let n=O.types[e.resourceType]?.searchParams?.[t.code];if(t.operator==="missing"&&n){let i=re(n.expression,r);return t.value==="true"?!i.length:i.length>0}switch(n?.type){case"reference":return ts(r,t,n);case"string":case"uri":return Tn(r,t,n);case"token":return rs(r,t,n);case"date":return is(r,t,n);default:return!1}}function ts(r,e,t){let n=re(t.expression,r),i=xt(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(u=>u?.endsWith("/"+s))),a)return!i}return i}function rs(r,e,t){return or(r.resourceType,t).type==="BOOLEAN"?ns(r,e,t):Tn(r,e,t,!0)}function ns(r,e,t){let n=re(t.expression,r),i=e.value==="true",o=n.includes(i);return xt(e.operator)?!o:o}function Tn(r,e,t,n){let i=re(t.expression,r),o=e.value.split(","),s=xt(e.operator);for(let a of i)for(let u of o)if(lr(a,e.operator,u,n))return!s;return s}function lr(r,e,t,n){if(n&&t.includes("|")){let[o,s]=t.split("|");return lr(r,e,o,!1)&&(!s||lr(r,e,s,!1))}let i="";return r&&(typeof r=="string"?i=r:typeof r=="object"&&(i=JSON.stringify(r))),i.toLowerCase().includes(t.toLowerCase())}function is(r,e,t){let n=re(t.expression,r),i=e.value.split(","),o=xt(e.operator);for(let s of n)for(let a of i)if(os(s,e.operator,a))return!o;return o}function os(r,e,t){switch(e){case"sa":case"gt":return r>t;case"ge":return r>=t;case"eb":case"lt":return r<t;case"le":return r<=t;case"eq":case"ne":return r===t;default:return!1}}function xt(r){return r==="ne"||r==="not"}var ss={resourceType:"*"},vn=["DomainConfiguration","JsonWebKey","Login"],Sn=["PasswordChangeRequest","Project","ProjectMembership","User"],En=(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))(En||{}),as=["read","vread","history","history-instance"];function cs(r,e){if(r.resource){for(let t of r.resource)if(pr(t.resourceType,e))return!0}return!1}function bn(r,e){if(vn.includes(e))return!1;if(r.resource){for(let t of r.resource)if(pr(t.resourceType,e)&&!t.readonly)return!0}return!1}function us(r,e){let t=e.resourceType;return bn(r,t)?Rn(r,e,!1):!1}function Rn(r,e,t){if(r.resource){for(let n of r.resource)if(Pn(e,t?"read":"update",n))return!0}return!1}function ls(r,e,t){if(!t)return ss;if(t.resource){for(let n of t.resource)if(Pn(r,e,n))return n}}function Pn(r,e,t){let n=r.resourceType;return!(!pr(t.resourceType,n)||t.readonly&&!as.includes(e)||t.compartment&&!r.meta?.compartment?.find(i=>i.reference===t.compartment?.reference)||t.criteria&&!dr(r,gt(t.criteria)))}function pr(r,e){return r===e||r==="*"&&!Sn.includes(e)}function fr(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 mr(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 Tt(){let r=new Uint32Array(28);return crypto.getRandomValues(r),Dt(r.buffer)}async function hr(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 An(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)=>ds(i,o,e),2);return Cn(JSON.parse(n))}function ds(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 Cn(r){let e=fs(r),{sorted:t,cycles:n}=ps(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 u=i[a],d={...u,request:{...u.request,method:"PUT"}};o.push(d)}return{...r,entry:o}}function ps(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 u=s.lastIndexOf(o);return u!==-1&&n.push(s.slice(u)),!0}t[o]=1,s.push(o);let a=!1;for(let u of r[o])i(u,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 wn(r,e){for(let t in r)if(r[t]&&typeof r[t]=="object"){let n=r[t];if(se(n)){let i=n.reference;i.startsWith("urn:uuid:")&&e(i)}else wn(n,e)}}function fs(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&&wn(t.resource,i=>{e[i]&&e[i].push(n)})}return e}function ms(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 An(e)}var Ke=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 w={CSS:"text/css",DICOM:"application/dicom",FAVICON:"image/vnd.microsoft.icon",FHIR_JSON:"application/fhir+json",FORM_URL_ENCODED:"application/x-www-form-urlencoded",HL7_V2:"x-application/hl7-v2+er7",HTML:"text/html",JAVASCRIPT:"text/javascript",JSON:"application/json",JSON_PATCH:"application/json-patch+json",PNG:"image/png",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 vt={"Patient-open":"Patient-open","Patient-close":"Patient-close","ImagingStudy-open":"ImagingStudy-open","ImagingStudy-close":"ImagingStudy-close","Encounter-open":"Encounter-open","Encounter-close":"Encounter-close","DiagnosticReport-open":"DiagnosticReport-open","DiagnosticReport-close":"DiagnosticReport-close","DiagnosticReport-select":"DiagnosticReport-select","DiagnosticReport-update":"DiagnosticReport-update",syncerror:"syncerror"},kn=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],St=["DiagnosticReport-update"];function yr(r){return St.includes(r)}function gr(r){if(St.includes(r))throw new p(h(`'context.version' is required for '${r}'.`))}var On={"Patient-open":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"Patient-close":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"ImagingStudy-open":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"ImagingStudy-close":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"Encounter-open":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"Encounter-close":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"DiagnosticReport-open":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-close":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-select":{report:{resourceType:"DiagnosticReport"},select:{resourceType:"*",isArray:!0}},"DiagnosticReport-update":{report:{resourceType:"DiagnosticReport"},patient:{resourceType:"Patient",optional:!0},study:{resourceType:"ImagingStudy",optional:!0},updates:{resourceType:"Bundle"}},syncerror:{operationoutcome:{resourceType:"OperationOutcome"}}};function Vn(r){return kn.includes(r)}function xr(r){return!!r.endpoint}function Et(r){if(!ze(r))throw new p(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 xr(r)&&(o.endpoint=r.endpoint),new URLSearchParams(o).toString()}function ze(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(!vt[o])return!1;return!(xr(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function In(r,e,t,n){if(typeof e!="object")throw new p(h(`context[${t}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.id&&typeof e.id=="string"))throw new p(h(`context[${t}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new p(h(`context[${t}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!Vn(e.resourceType))throw new p(h(`context[${t}] is invalid. Resource must contain a valid FHIRcast resource type. Resource type is not a known resource type.`));if(i&&e.resourceType!==i)throw new p(h(`context[${t}] is invalid. context[${t}] for the '${r}' event should contain resource of type ${i}.`))}}function hs(r,e,t,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),!n.isArray)In(r,e.resource,t,n);else{let{resources:o}=e;if(!o)throw new p(h(`context[${t}] is invalid. context[${t}] for the '${r}' with key '${String(e.key)}' should contain an array of resources on the key 'resources'.`));for(let s of o)In(r,s,t,n)}}function ys(r,e){let t=new Map,n=On[r];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new p(h(`Key '${o}' not found for event '${r}'. Make sure to add only valid keys.`));hs(r,e[i],i,n[o],t)}for(let[i,o]of Object.entries(n)){if(!(o.optional||t.has(i)))throw new p(h(`Missing required key '${i}' on context for '${r}' event.`));if(!o.manyAllowed&&(t.get(i)||0)>1)throw new p(h(`${t.get(i)} context entries with key '${i}' found for the '${r}' event when schema only allows for 1.`))}}function bt(r,e,t,n){if(!(r&&typeof r=="string"))throw new p(h("Must provide a topic."));if(!vt[e])throw new p(h(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(vt).join(", ")}`));if(typeof t!="object")throw new p(h("context must be a context object or array of context objects."));if(St.includes(e)&&!n)throw new p(h(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(t)?t:[t];return ys(e,i),{timestamp:new Date().toISOString(),id:pe(),event:{"hub.topic":r,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var Ge=class extends We{constructor(t){super();if(this.subRequest=t,!t.endpoint)throw new p(h("Subscription request should contain an endpoint."));if(!ze(t))throw new p(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;s.event["hub.event"]!=="heartbeat"&&(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 gs(r){let e=r.replace(/-/g,"+").replace(/_/g,"/"),t=fr(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 Tr(r){return r.split(".").length===3}function Rt(r){let[e,t,n]=r.split(".");return gs(t)}function vr(r){try{return typeof Rt(r).login_id=="string"}catch{return!1}}var xs,I=class{constructor(e){this[xs]="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)}};xs=Symbol.toStringTag;var Je=class{constructor(e){this.storage=e??(typeof localStorage<"u"?localStorage:new Pt)}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?Ot(t):void 0)}},Pt=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 Ts="2.2.2-e9617926",Mn=w.FHIR_JSON+", */*; q=0.1",vs="https://api.medplum.com/",Ss=1e3,Es=6e4,Dn="Binary/",Nn={resourceType:"Device",id:"system",deviceName:[{name:"System"}]},Bn=(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))(Bn||{}),qn=(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))(qn||{}),$n=(o=>(o.ClientSecretBasic="client_secret_basic",o.ClientSecretPost="client_secret_post",o.ClientSecretJwt="client_secret_jwt",o.PrivateKeyJwt="private_key_jwt",o.None="none",o))($n||{}),jn=(e=>(e.JwtBearer="urn:ietf:params:oauth:client-assertion-type:jwt-bearer",e))(jn||{}),Sr=class extends fe{constructor(t){super();this.initComplete=!0;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??bs(),this.storage=t?.storage??new Je,this.createPdfImpl=t?.createPdf,this.baseUrl=_n(t?.baseUrl??vs),this.fhirBaseUrl=_n(At(this.baseUrl,t?.fhirUrlPath??"fhir/R4/")),this.authorizeUrl=At(this.baseUrl,t?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=At(this.baseUrl,t?.tokenUrl??"oauth2/token"),this.logoutUrl=At(this.baseUrl,t?.logoutUrl??"oauth2/logout"),this.clientId=t?.clientId??"",this.clientSecret=t?.clientSecret??"",this.onUnauthenticated=t?.onUnauthenticated,this.cacheTime=t?.cacheTime??Es,this.cacheTime>0?this.requestCache=new Ke(t?.resourceCacheSize??Ss):this.requestCache=void 0,t?.autoBatchTime?(this.autoBatchTime=t.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0),t?.accessToken)this.setAccessToken(t.accessToken),this.initPromise=Promise.resolve();else if(this.storage.getInitPromise!==void 0){let n=this.storage.getInitPromise(),i=new Promise(o=>{n.then(()=>{this.attemptResumeActiveLogin().then(o).catch(console.error),this.initComplete=!0}).catch(console.error)});this.initPromise=i,this.initComplete=!1}else this.initPromise=this.attemptResumeActiveLogin().catch(console.error);this.setupStorageListener()}get isInitialized(){return this.initComplete}getInitPromise(){return this.initPromise}async attemptResumeActiveLogin(){let t=this.getActiveLogin();t&&(this.setAccessToken(t.accessToken,t.refreshToken),await this.refreshProfile())}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}clear(){this.storage.clear(),sessionStorage.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,u)=>{this.autoBatchQueue.push({method:"GET",url:t.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:u}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):o=this.request("GET",t,n);let s=new I(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,w.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,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),window.location.assign(this.getExternalAuthRedirectUri(t,n,i,a,s))}async exchangeExternalAccessToken(t,n){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");let i=new URLSearchParams;return i.set("grant_type","urn:ietf:params:oauth:grant-type:token-exchange"),i.set("subject_token_type","urn:ietf:params:oauth:token-type:access_token"),i.set("client_id",n),i.set("subject_token",t),this.fetchTokens(i)}getExternalAuthRedirectUri(t,n,i,o,s=!0){let a=new URL(t);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",n),a.searchParams.set("redirect_uri",i),a.searchParams.set("scope","openid profile email"),a.searchParams.set("state",JSON.stringify(o)),s){let{codeChallenge:u,codeChallengeMethod:d}=o;if(!d)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!u)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");a.searchParams.set("code_challenge_method",d),a.searchParams.set("code_challenge",u)}return a.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 u=new I((async()=>{let d=await this.get(o,i);if(d.entry)for(let f of d.entry)this.cacheResource(f.resource);return d})());return this.setCacheEntry(s,u),u}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 u=new I(this.search(t,o.searchParams,i).then(d=>d.entry?.[0]?.resource));return this.setCacheEntry(s,u),u}searchResources(t,n,i){let s=this.fhirSearchUrl(t,n).toString()+"-searchResources",a=this.getCacheEntry(s,i);if(a)return a.value;let u=new I(this.search(t,n,i).then(Ln));return this.setCacheEntry(s,u),u}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),u=a.link?.find(d=>d.relation==="next");if(!a.entry?.length&&!u)break;yield Ln(a),o=u?.url?new URL(u.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 Nn;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 I(Promise.reject(new Error("Missing reference")));if(i==="system")return new I(Promise.resolve(Nn));let[o,s]=i.split("/");return!o||!s?new I(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}requestSchema(t){if(Zt(t))return Promise.resolve();let n=t+"-requestSchema",i=this.getCacheEntry(n,void 0);if(i)return i.value;let o=new I((async()=>{let s=`{
1
+ "use strict";var kt=Object.defineProperty;var ni=Object.getOwnPropertyDescriptor;var ii=Object.getOwnPropertyNames;var oi=Object.prototype.hasOwnProperty;var si=(r,e)=>{for(var t in e)kt(r,t,{get:e[t],enumerable:!0})},ai=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of ii(e))!oi.call(r,i)&&i!==t&&kt(r,i,{get:()=>e[i],enumerable:!(n=ni(e,i))||n.enumerable});return r};var ci=r=>ai(kt({},"__esModule",{value:!0}),r);var oa={};si(oa,{AccessPolicyInteraction:()=>kn,AndAtom:()=>Me,ArithemticOperatorAtom:()=>R,AsAtom:()=>J,BooleanInfixOperatorAtom:()=>v,CPT:()=>_s,ClientStorage:()=>Je,ConcatAtom:()=>De,ContainsAtom:()=>Ve,ContentType:()=>I,DEFAULT_ACCEPT:()=>Wn,DEFAULT_SEARCH_COUNT:()=>Wo,DotAtom:()=>H,EmptySetAtom:()=>ke,EqualsAtom:()=>Fe,EquivalentAtom:()=>Le,EventTarget:()=>pe,ExternalSecretSystems:()=>Ds,FHIRCAST_EVENT_NAMES:()=>Et,FHIRCAST_EVENT_RESOURCES:()=>Mn,FHIRCAST_EVENT_VERSION_REQUIRED:()=>St,FHIRCAST_RESOURCE_TYPES:()=>Un,FhirFilterComparison:()=>Ye,FhirFilterConnective:()=>Ze,FhirFilterNegation:()=>Xe,FhirPathAtom:()=>Ie,FhircastConnection:()=>Ge,FunctionAtom:()=>q,Hl7Context:()=>W,Hl7Field:()=>ne,Hl7Message:()=>Ir,Hl7Segment:()=>fe,ICD10:()=>Ls,ImpliesAtom:()=>je,InAtom:()=>Ne,IndexerAtom:()=>X,InfixOperatorAtom:()=>$,IsAtom:()=>Y,LOINC:()=>Vs,LRUCache:()=>Ke,LiteralAtom:()=>V,MEDPLUM_VERSION:()=>Cs,MedplumClient:()=>Pr,MemoryStorage:()=>At,NotEqualsAtom:()=>_e,NotEquivalentAtom:()=>Ue,OAuthClientAssertionType:()=>Yn,OAuthGrantType:()=>Gn,OAuthTokenAuthMethod:()=>Jn,OAuthTokenType:()=>zn,OperationOutcomeError:()=>p,Operator:()=>bn,OperatorPrecedence:()=>m,OrAtom:()=>Be,Parser:()=>et,ParserBuilder:()=>he,PrefixOperatorAtom:()=>me,PropertyType:()=>c,RXNORM:()=>Fs,ReadablePromise:()=>P,SNOMED:()=>Ns,SearchParameterType:()=>cr,SymbolAtom:()=>B,Tokenizer:()=>K,TypedEventTarget:()=>We,UCUM:()=>Ar,UnaryOperatorAtom:()=>Oe,UnionAtom:()=>ee,XorAtom:()=>qe,accepted:()=>po,allOk:()=>io,arrayBufferToBase64:()=>_t,arrayBufferToHex:()=>Ft,arrayify:()=>ve,assertContextVersionOptional:()=>Er,assertOk:()=>To,badRequest:()=>w,booleanToTypedValue:()=>d,buildTypeName:()=>yn,calculateAge:()=>ye,calculateAgeString:()=>mi,canReadResourceType:()=>ys,canWriteResource:()=>gs,canWriteResourceType:()=>On,capitalize:()=>C,checkForNull:()=>kr,compressElement:()=>to,convertContainedResourcesToBundle:()=>Ss,convertToTransactionBundle:()=>Nn,crawlResource:()=>wt,createConstraintIssue:()=>zt,createDeferredPromise:()=>Mi,createFhircastMessagePayload:()=>Rt,createProcessingIssue:()=>Jt,createReference:()=>G,createStructureIssue:()=>y,created:()=>oo,decodeBase64:()=>gr,deepClone:()=>rt,deepEquals:()=>ge,deepIncludes:()=>xe,encodeBase64:()=>xr,encryptSHA256:()=>Tr,evalFhirPath:()=>te,evalFhirPathTyped:()=>le,fhirPathArrayEquals:()=>at,fhirPathArrayEquivalent:()=>ct,fhirPathEquals:()=>Mt,fhirPathEquivalent:()=>rn,fhirPathIs:()=>be,fhirPathNot:()=>st,fhirTypeToJsType:()=>Dr,findObservationInterval:()=>wi,findObservationReferenceRange:()=>Ii,findResourceByCode:()=>Li,forbidden:()=>co,formatAddress:()=>Bi,formatCodeableConcept:()=>Hr,formatCoding:()=>Kr,formatDate:()=>$i,formatDateTime:()=>it,formatFamilyName:()=>ji,formatGivenName:()=>qi,formatHl7DateTime:()=>ei,formatHumanName:()=>Ee,formatMoney:()=>Yi,formatObservationValue:()=>Wr,formatPeriod:()=>Qi,formatQuantity:()=>z,formatRange:()=>Ji,formatSearchQuery:()=>os,formatTime:()=>Qr,formatTiming:()=>Gi,generateId:()=>de,getAllDataTypes:()=>tr,getAllQuestionnaireAnswers:()=>yi,getCodeBySystem:()=>tt,getDataType:()=>Z,getDateProperty:()=>fi,getDisplayString:()=>Lr,getElementDefinition:()=>Re,getElementDefinitionFromElements:()=>xn,getElementDefinitionTypeName:()=>pt,getExpressionForResourceType:()=>Ko,getExpressionsForResourceType:()=>lr,getExtension:()=>Dt,getExtensionValue:()=>Ti,getIdentifier:()=>gi,getImageSrc:()=>pi,getNestedProperty:()=>It,getPathDisplayName:()=>ko,getPropertyDisplayName:()=>gn,getQuestionnaireAnswers:()=>hi,getRandomString:()=>vt,getReferenceString:()=>ie,getResourceTypes:()=>Co,getSearchParameter:()=>Io,getSearchParameterDetails:()=>ur,getSearchParameters:()=>wo,getStatus:()=>xo,getTypedPropertyValue:()=>k,getTypedPropertyValueWithSchema:()=>tn,globalSchema:()=>O,gone:()=>uo,indexSearchParameter:()=>yt,indexSearchParameterBundle:()=>Ao,indexStructureDefinitionBundle:()=>mt,inflateBaseSchema:()=>Ut,inflateElement:()=>zr,initFhirPathParserBuilder:()=>ue,isAccepted:()=>ho,isCompletedSubscriptionRequest:()=>Sr,isContextVersionRequired:()=>vr,isCreated:()=>mo,isDataTypeLoaded:()=>rr,isEmpty:()=>E,isFhircastResourceType:()=>Bn,isGone:()=>go,isJwt:()=>br,isLowerCase:()=>Te,isMedplumAccessToken:()=>Rr,isNotFound:()=>yo,isObject:()=>Q,isOk:()=>dt,isOperationOutcome:()=>Pe,isPeriod:()=>nn,isProfileLoaded:()=>or,isProfileResource:()=>_r,isQuantity:()=>S,isQuantityEquivalent:()=>Bt,isReference:()=>oe,isResource:()=>F,isResourceType:()=>ir,isResourceTypeSchema:()=>ht,isStringArray:()=>Nt,isUUID:()=>Ai,isValidDate:()=>ot,loadDataType:()=>mn,matchDiscriminant:()=>ri,matchesAccessPolicy:()=>Dn,matchesRange:()=>Lt,matchesSearchRequest:()=>hr,normalizeErrorString:()=>cn,normalizeOperationOutcome:()=>Ae,notFound:()=>Kt,notModified:()=>so,operationOutcomeIssueToString:()=>un,operationOutcomeToString:()=>Wt,parseCriteriaAsSearchRequest:()=>xt,parseFhirPath:()=>gt,parseFilterParameter:()=>Hs,parseHl7DateTime:()=>Ks,parseJWTPayload:()=>Pt,parseMappingLanguage:()=>Bs,parseParameter:()=>An,parseReference:()=>ui,parseSearchDefinition:()=>zo,parseSearchRequest:()=>Go,parseSearchUrl:()=>fr,parseStructureDefinition:()=>ft,parseXFhirQuery:()=>is,preciseEquals:()=>Ni,preciseGreaterThan:()=>_i,preciseGreaterThanOrEquals:()=>$r,preciseLessThan:()=>Fi,preciseLessThanOrEquals:()=>jr,preciseRound:()=>Vi,projectAdminResourceTypes:()=>In,protectedResourceTypes:()=>wn,removeDuplicates:()=>Se,reorderBundle:()=>Fn,resolveId:()=>Ot,satisfiedAccessPolicy:()=>xs,serializeFhircastSubscriptionRequest:()=>bt,serverError:()=>fo,setCodeBySystem:()=>Ci,setIdentifier:()=>xi,singleton:()=>N,sleep:()=>nt,splitN:()=>Ui,streamToBuffer:()=>Ys,stringify:()=>Vt,stringifyTypedValue:()=>sr,subsetResource:()=>Eo,toJsBoolean:()=>L,toTypedValue:()=>T,tooManyRequests:()=>lo,tryGetDataType:()=>nr,tryGetProfile:()=>vo,unauthorized:()=>ao,validateFhircastSubscriptionRequest:()=>ze,validateResource:()=>ea,validateResourceType:()=>Gs,validationError:()=>h});module.exports=ci(oa);var me=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()}`}},he=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 G(r){let e=ie(r),t=Lr(r);return t===e?{reference:e}:{reference:e,display:t}}function ie(r){return oe(r)?r.reference:`${r.resourceType}/${r.id}`}function Ot(r){if(r)return oe(r)?r.reference.split("/")[1]:r.id}function ui(r){if(r?.reference===void 0)return;let[e,t]=r.reference.split("/");if(!(e===""||t===""||t===void 0))return[e,t]}function _r(r){return r.resourceType==="Patient"||r.resourceType==="Practitioner"||r.resourceType==="RelatedPerson"}function Lr(r){if(_r(r)){let e=li(r);if(e)return e}if(r.resourceType==="Device"){let e=di(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:ie(r)}function li(r){let e=r.name;if(e&&e.length>0)return Ee(e[0])}function di(r){let e=r.deviceName;if(e&&e.length>0)return e[0].name}function pi(r){if(!("photo"in r))return;let e=r.photo;if(e)if(Array.isArray(e))for(let t of e){let n=Fr(t);if(n)return n}else return Fr(e)}function Fr(r){if(r.url&&r.contentType&&r.contentType.startsWith("image/"))return r.url}function fi(r){return r?new Date(r):void 0}function ye(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(),u=n.getUTCMonth(),l=n.getUTCDate(),f=a-i;(u<o||u===o&&l<s)&&f--;let A=a*12+u-(i*12+o);l<s&&A--;let j=Math.floor((n.getTime()-t.getTime())/(1e3*60*60*24));return{years:f,months:A,days:j}}function mi(r,e){let{years:t,months:n,days:i}=ye(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 hi(r){let e={};return Ur(r.item,e),e}function Ur(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer[0]),Ur(t.item,e)}function yi(r){let e={};return Mr(r.item,e),e}function Mr(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer),Mr(t.item,e)}function gi(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 xi(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 Ti(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 Dt(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 Vt(r,e){return JSON.stringify(r,vi,e?2:void 0)}function vi(r,e){return!Ei(r)&&E(e)?void 0:e}function Ei(r){return!!/\d+$/.exec(r)}function E(r){if(r==null)return!0;let e=typeof r;return e==="string"&&r===""||e==="object"&&Object.keys(r).length===0}function ge(r,e,t){return r===e||E(r)&&E(e)?!0:E(r)||E(e)?!1:Array.isArray(r)&&Array.isArray(e)?Si(r,e):Array.isArray(r)||Array.isArray(e)?!1:Q(r)&&Q(e)?bi(r,e,t):(Q(r)||Q(e),!1)}function Si(r,e){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(!ge(r[t],e[t]))return!1;return!0}function bi(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(!ge(o,s,i))return!1}return!0}function xe(r,e){return E(r)?!0:E(e)?!1:Array.isArray(r)&&Array.isArray(e)?Ri(r,e):Array.isArray(r)||Array.isArray(e)?!1:Q(r)&&Q(e)?Pi(r,e):Q(r)||Q(e)?!1:r===e}function Ri(r,e){return e.every(t=>r.some(n=>xe(n,t)))}function Pi(r,e){return Object.entries(e).every(([t,n])=>t in r&&xe(r[t],n))}function rt(r){return JSON.parse(JSON.stringify(r))}function Ai(r){return!!/^\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/i.exec(r)}function Q(r){return r!==null&&typeof r=="object"}function Nt(r){return r.every(e=>typeof e=="string")}var Br=[];for(let r=0;r<256;r++)Br.push(r.toString(16).padStart(2,"0"));function Ft(r){let e=new Uint8Array(r),t=new Array(e.length);for(let n=0;n<e.length;n++)t[n]=Br[e[n]];return t.join("")}function _t(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 C(r){return r?r.charAt(0).toUpperCase()+r.substring(1):""}function Te(r){return r===r.toLowerCase()&&r!==r.toUpperCase()}function tt(r,e){return r.coding?.find(t=>t.system===e)?.code}function Ci(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 wi(r,e,t,n){return r.qualifiedInterval?.find(i=>qr(i,e)&&Di(i,t,r.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function Ii(r,e,t){return r.qualifiedInterval?.find(n=>qr(n,e)&&t.includes(n.condition))}function qr(r,e){return ki(r,e)&&Oi(r,e)}function ki(r,e){return!r.gender||r.gender===e.gender}function Oi(r,e){return!r.age||Lt(ye(e.birthDate).years,r.age)}function Di(r,e,t){return!!r.range&&Lt(e,r.range,t)}function Lt(r,e,t){return(e.low?.value===void 0||$r(r,e.low.value,t))&&(e.high?.value===void 0||jr(r,e.high.value,t))}function Vi(r,e){return parseFloat(r.toFixed(e))}function Ni(r,e,t){return _(r,t)===_(e,t)}function Fi(r,e,t){return _(r,t)<_(e,t)}function _i(r,e,t){return _(r,t)>_(e,t)}function jr(r,e,t){return _(r,t)<=_(e,t)}function $r(r,e,t){return _(r,t)>=_(e,t)}function _(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}function Li(r,e,t){return r.find(n=>typeof e=="string"?tt(n.code||{},t)===e:tt(n.code||{},t)===tt(e,t))}function ve(r){if(r)return Array.isArray(r)?r:[r]}var nt=r=>new Promise(e=>{setTimeout(e,r)});function Ui(r,e,t){let n=[];for(let i=0;i<t-1;i++){let o=r.indexOf(e);o<0&&(o=r.length),n.push(r.slice(0,o)),r=r.slice(o+e.length)}return r&&n.push(r),n}function Mi(){let r,e;return{promise:new Promise((n,i)=>{r=n,e=i}),resolve:r,reject:e}}function Bi(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=[];if(r.prefix&&e?.prefix!==!1&&t.push(...r.prefix),r.given&&t.push(...r.given),r.family&&t.push(r.family),r.suffix&&e?.suffix!==!1&&t.push(...r.suffix),r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.length===0){let n=se(r.text);if(n)return n}return t.join(" ").trim()}function qi(r){let e=[];return r.given&&e.push(...r.given),e.join(" ").trim()}function ji(r){return se(r.family)??""}function ot(r){return r instanceof Date&&!isNaN(r.getTime())}function $i(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 Qr(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 Qi(r,e,t){return!r||!r.start&&!r.end?"":it(r.start,e,t)+" - "+it(r.end,e,t)}var Hi={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},Ki={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},Wi={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function Gi(r){if(!r)return"";let e=[];return zi(e,r.repeat),r.event&&e.push(r.event.map(t=>it(t)).join(", ")),C(e.join(" ").trim())}function zi(r,e){if(!e?.periodUnit)return;let t=e.frequency??1,n=e.period??1,i=e.periodUnit;t===1&&n===1?r.push(Hi[i]):(t===1?r.push("once"):r.push(t+" times"),n===1?r.push("per "+Ki[i]):r.push("per "+n+" "+Wi[i])),e.dayOfWeek&&r.push("on "+e.dayOfWeek.map(C).join(", ")),e.timeOfDay&&r.push("at "+e.timeOfDay.map(o=>Qr(o)).join(", "))}function Ji(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=Zi(n.value,e),`> ${z(n,e)}`):`>= ${z(n,e)}`:n?.value===void 0&&i?.value!==void 0?t&&e!==void 0?(i.value=Xi(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 Yi(r){return r?.value===void 0?"":r.value.toLocaleString(void 0,{style:"currency",currency:r.currency??"USD",currencyDisplay:"narrowSymbol"})}function Hr(r){if(!r)return"";let e=se(r.text);return e||(r.coding?r.coding.map(t=>Kr(t)).join(", "):"")}function Kr(r){return se(r?.display)??se(r?.code)??""}function Wr(r){if(!r)return"";if("component"in r)return r.component.map(t=>Wr(t)).join(" / ");if(r.valueQuantity)return z(r.valueQuantity);if(r.valueCodeableConcept)return Hr(r.valueCodeableConcept);let e=se(r.valueString);return e||""}function se(r){return typeof r=="string"?r:void 0}function Xi(r,e,t=1){return(Gr(r,e)+t)*Math.pow(10,-e)}function Zi(r,e,t=1){return(Gr(r,e)-t)*Math.pow(10,-e)}function Gr(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}var eo={"http://hl7.org/fhirpath/System.String":"string"};function to(r){let e={};return r.min!==0&&(e.min=r.min),r.max!==1&&Number.isFinite(r.max)?e.max=r.max:r.max===Number.POSITIVE_INFINITY&&(e.max=Number.MAX_SAFE_INTEGER),e.type=r.type?.map(t=>({...t,extension:void 0,code:eo[t.code]??t.code})),e}function zr(r,e){let t=e.max&&e.max===Number.MAX_SAFE_INTEGER?Number.POSITIVE_INFINITY:e.max;return{path:r,description:"",type:e.type??[],min:e.min??0,max:t??1,isArray:!!t&&t>1,constraints:[]}}function Ut(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,zr(i,o)])),constraints:[],innerTypes:[]};return e}var Jr={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"}]},tokenAuthMethod:{type:[{code:"code"}]},userInfoUrl:{min:1,type:[{code:"string"}]},clientId:{min:1,type:[{code:"string"}]},clientSecret:{min:1,type:[{code:"string"}]},usePkce:{type:[{code:"boolean"}]},useSubject:{type:[{code:"boolean"}]}}}};function d(r){return[{type:c.boolean,value:r}]}function T(r){return r==null?{type:"undefined",value:void 0}:Number.isSafeInteger(r)?{type:c.integer,value:r}:typeof r=="number"?{type:c.decimal,value:r}:typeof r=="boolean"?{type:c.boolean,value:r}:typeof r=="string"?{type:c.string,value:r}:S(r)?{type:c.Quantity,value:r}:F(r)?{type:r.resourceType,value:r}:{type:c.BackboneElement,value:r}}function L(r){return r.length===0?!1:!!r[0].value}function N(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 k(r,e){if(!r.value)return;let t=Re(r.type,e);return t?tn(r.value,e,t):no(r,e)}function tn(r,e,t){let n=t.type;if(!n||n.length===0)return;let i=e,o,s="undefined";if(t.path.endsWith("[x]")){let u=t.path.split(".").pop().replace("[x]","");for(let l of n)if(i=u+C(l.code),o=r[i],o!==void 0){s=l.code;break}}else console.assert(n.length===1,"Expected single type",t.path),o=r[e],s=n[0].code;let a=r["_"+i];if(a&&(Array.isArray(o)?o=o.map((u,l)=>a[l]?en(u??{},a[l]):u):o=en(o??{},a)),!E(o))return(s==="Element"||s==="BackboneElement")&&(s=t.type[0].code),Array.isArray(o)?o.map(u=>Yr(u,s)):Yr(o,s)}function Yr(r,e){return e==="Resource"&&F(r)&&(e=r.resourceType),{type:e,value:r}}function no(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 c){let o=e+C(i);if(o in t){n=t[o];break}}if(!E(n))return Array.isArray(n)?n.map(T):T(n)}function Se(r){let e=[];for(let t of r){let n=!1;for(let i of e)if(L(Mt(t,i))){n=!0;break}n||e.push(t)}return e}function st(r){return d(!L(r))}function at(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?d(!1):d(r.every((t,n)=>L(Mt(t,e[n]))))}function Mt(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?d(Math.abs(t-n)<1e-8):S(t)&&S(n)?d(Bt(t,n)):d(typeof t=="object"&&typeof n=="object"?qt(r,e):t===n)}function ct(r,e){return r.length===0&&e.length===0?d(!0):r.length!==e.length?d(!1):(r.sort(Xr),e.sort(Xr),d(r.every((t,n)=>L(rn(t,e[n])))))}function rn(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"?d(Math.abs(s-a)<.01):S(s)&&S(a)?d(Bt(s,a)):d(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"?qt({...s,id:void 0},{...a,id:void 0}):typeof s=="string"&&typeof a=="string"?s.toLowerCase()===a.toLowerCase():s===a)}function Xr(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 be(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 nn(t);case"Quantity":return S(t);default:return typeof t=="object"&&t?.resourceType===e}}function nn(r){return!!(r&&typeof r=="object"&&"start"in r)}function S(r){return!!(r&&typeof r=="object"&&"value"in r&&typeof r.value=="number")}function Bt(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 qt(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(Zr(o)&&Zr(s)){if(!qt(o,s))return!1}else if(o!==s)return!1}return!0}function Zr(r){return r!==null&&typeof r=="object"}function en(r,e){return delete e.__proto__,delete e.constructor,Object.assign(r,e)}var jt="ok",ut="created",$t="gone",Qt="not-modified",Ht="not-found",on="unauthorized",sn="forbidden",an="too-many-requests",lt="accepted",io={resourceType:"OperationOutcome",id:jt,issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},oo={resourceType:"OperationOutcome",id:ut,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},so={resourceType:"OperationOutcome",id:Qt,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},Kt={resourceType:"OperationOutcome",id:Ht,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},ao={resourceType:"OperationOutcome",id:on,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},co={resourceType:"OperationOutcome",id:sn,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},uo={resourceType:"OperationOutcome",id:$t,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},lo={resourceType:"OperationOutcome",id:an,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function po(r){return{resourceType:"OperationOutcome",id:lt,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:r}]}}function w(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 fo(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:r.toString()}]}}function Pe(r){return typeof r=="object"&&r!==null&&r.resourceType==="OperationOutcome"}function dt(r){return r.id===jt||r.id===ut||r.id===Qt||r.id===lt}function mo(r){return r.id===ut}function ho(r){return r.id===lt}function yo(r){return r.id===Ht}function go(r){return r.id===$t}function xo(r){switch(r.id){case jt:return 200;case ut:return 201;case lt:return 202;case Qt:return 304;case on:return 401;case sn:return 403;case Ht:return 404;case $t:return 410;case an:return 429;default:return r.issue?.[0]?.code==="exception"?500:400}}function To(r,e){if(!dt(r)||e===void 0)throw new p(r)}var p=class extends Error{constructor(t,n){super(Wt(t));this.outcome=t,this.cause=n}};function Ae(r){return r instanceof p?r.outcome:Pe(r)?r:w(cn(r))}function cn(r){return r?typeof r=="string"?r:r instanceof Error?r.message:Pe(r)?Wt(r):typeof r=="object"&&"code"in r&&typeof r.code=="string"?r.code:JSON.stringify(r):"Unknown error"}function Wt(r){let e=r.issue?.map(un)??[];return e.length>0?e.join("; "):"Unknown error"}function un(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 Gt(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 Gt("structure",e,r)}function zt(r,e){return Gt("invariant",`Constraint ${e.key} not met: ${e.description}`,r,{fhirpath:e.expression})}function Jt(r,e,t,n){return Gt("processing",e,r,{...n,error:t})}function ft(r){return new Xt(r).parse()}var Ce=Ut(Jr),Zt=Object.create(null),ln=Object.create(null);function er(r){let e;return r?(e=ln[r],e||(e=ln[r]=Object.create(null))):e=Ce,e}function mt(r,e){let t=Array.isArray(r)?r:r.entry?.map(n=>n.resource)??[];for(let n of t)mn(n,e)}function mn(r,e){if(!r?.name)throw new Error("Failed loading StructureDefinition from bundle");if(r.resourceType!=="StructureDefinition")return;let t=ft(r),n=er(e);n[r.name]=t,e&&r.url===e&&(Zt[e]=t);for(let i of t.innerTypes)i.parentType=t,n[i.name]=i}function tr(){return Ce}function rr(r){return!!Ce[r]}function nr(r,e){return er(e)[r]}function Z(r,e){let t=er(e)[r];if(!t)throw new p(w("Unknown data type: "+r));return t}function ir(r){let e=Ce[r];return e&&ht(e)}function or(r){return!!Zt[r]}function vo(r){return Zt[r]}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,title:e.title,type:e.type,url:e.url,kind:e.kind,description:Po(e),elements:{},constraints:this.parseElementDefinition(this.root).constraints,innerTypes:[],summaryProperties:new Set,mandatoryProperties:new Set},this.innerTypes=[]}parse(){let e=this.next();for(;e;){if(e.sliceName)this.parseSliceStart(e);else if(e.id?.includes(":")){if(this.slicingContext?.current){let t=Yt(e,this.slicingContext.path);this.slicingContext.current.elements[t]=this.parseElementDefinition(e)}}else{let t=this.parseElementDefinition(e);this.checkFieldEnter(e,t);let n=this.backboneContext;for(;n;){if(e.path?.startsWith(n.path+".")){n.type.elements[Yt(e,n.path)]=t;break}n=n.parent}if(!n){let i=Yt(e,this.root.path);e.isSummary&&this.resourceSchema.summaryProperties?.add(i.replace("[x]","")),t.min>0&&this.resourceSchema.mandatoryProperties?.add(i.replace("[x]","")),this.resourceSchema.elements[i]=t}this.checkFieldExit(e)}e=this.next()}return this.checkFieldExit(),this.innerTypes.length>0&&(this.resourceSchema.innerTypes=this.innerTypes),this.resourceSchema}checkFieldEnter(e,t){this.isInnerType(e)&&this.enterInnerType(e),e.slicing&&!this.slicingContext&&this.enterSlice(e,t)}enterInnerType(e){for(;this.backboneContext&&!ae(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;this.backboneContext={type:{name:pt(e),title:e.label,description:e.definition,elements:{},constraints:this.parseElementDefinition(e).constraints,innerTypes:[]},path:e.path??"",parent:ae(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,t){Ro(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&&!ae(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!ae(this.backboneContext.path,e?.path));else this.innerTypes.push(this.backboneContext.type),delete this.backboneContext;this.slicingContext&&!ae(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!!(ae(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??"",path:e.path??"",definition:e.definition,type:this.parseElementDefinitionType(e),elements:{},min:e.min??0,max:e.max==="*"?Number.POSITIVE_INFINITY:Number.parseInt(e.max,10)}}parseElementDefinitionType(e){return(e.type??[]).map(t=>{let n;return(t.code==="BackboneElement"||t.code==="Element")&&(n=pt(e)),n||(n=Dt(t,"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type")?.valueUrl),n||(n=t.code??""),{code:n,targetProfile:t.targetProfile,profile:t.profile}})}parseElementDefinition(e){let t=pn(e.max),n=e.base?.max?pn(e.base.max):t,i={type:"ElementDefinition",value:e};return{description:e.definition||"",path:e.path||e.base?.path||"",min:e.min??0,max:t,isArray:n>1,constraints:(e.constraint??[]).map(o=>({key:o.key??"",severity:o.severity??"error",expression:o.expression??"",description:o.human??""})),type:this.parseElementDefinitionType(e),fixed:fn(k(i,"fixed[x]")),pattern:fn(k(i,"pattern[x]")),binding:e.binding}}};function Eo(r,e){if(!r)return;let t=[];for(let n of e){t.push("_"+n);let i=Ce[r.resourceType].elements[n+"[x]"];i&&t.push(...i.type.map(o=>n+C(o.code)))}for(let n of Object.getOwnPropertyNames(r))!e.includes(n)&&!t.includes(n)&&!So.includes(n)&&Object.defineProperty(r,n,{enumerable:!1,writable:!1,value:void 0});return r.meta={...r.meta,tag:r.meta?.tag?r.meta.tag.concat(dn):[dn]},r}var dn={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},So=["resourceType","id","meta"];function pn(r){return r==="*"?Number.POSITIVE_INFINITY:Number.parseInt(r,10)}function Yt(r,e=""){return bo(r.path,e)}function bo(r,e){return r?e&&r.startsWith(e)?r.substring(e.length+1):r:""}function ae(r,e){return!r||!e?!1:e.startsWith(r+".")||e===r}function fn(r){return Array.isArray(r)&&r.length>0?r[0]:E(r)?void 0:r}function Ro(r){let e=r.slicing?.discriminator;return!!(r.type?.some(t=>t.code==="Extension")&&e?.length===1&&e[0].type==="value"&&e[0].path==="url")}function Po(r){let e=r.description;return e?.startsWith(`Base StructureDefinition for ${r.name} Type: `)&&(e=e.substring(`Base StructureDefinition for ${r.name} Type: `.length)),e}var c={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 Ao(r){for(let e of r.entry){let t=e.resource;t.resourceType==="SearchParameter"&&yt(t)}}function yt(r){for(let e of r.base??[]){let t=O.types[e];t||(t={searchParamsDetails:{}},O.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 pt(r){let e=r.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?yn((r.base?.path??r.path)?.split(".")):e}function yn(r){return r.length===1?r[0]:r.map(C).join("")}function ht(r){return r.kind==="resource"&&r.name!=="Resource"&&r.name!=="DomainResource"}function Co(){return Object.values(tr()).filter(ht).map(r=>r.name)}function wo(r){return O.types[r]?.searchParams}function Io(r,e){return O.types[r]?.searchParams?.[e]}function ko(r){let e=r.replaceAll("[x]","").split(".").pop();return gn(e)}function gn(r){return r.split(/(?=[A-Z])/).map(Do).join(" ").replace("_"," ").replace(/\s+/g," ")}var Oo=new Set(["ID","IP","PKCE","JWKS","URI","URL","OMB"]);function Do(r){let e=r.toUpperCase();return Oo.has(e)?e:e.charAt(0)+r.slice(1)}function Re(r,e){let t=nr(r);if(t)return xn(t.elements,e)}function xn(r,e){let t=r[e]??r[e+"[x]"];if(t)return t;for(let n=0;n<e.length;n++){let i=e[n];if(i>="A"&&i<="Z"){let o=e.slice(0,n)+"[x]",s=r[o];if(s)return s}}}function F(r){return!!(r&&typeof r=="object"&&"resourceType"in r)}function oe(r){return!!(r&&typeof r=="object"&&"reference"in r)}var O={types:{}};function sr(r){switch(r.type){case c.uuid:case c.uri:case c.url:case c.string:case c.oid:case c.markdown:case c.id:case c.code:case c.canonical:case c.base64Binary:case c.SystemString:case c.date:case c.dateTime:case c.instant:return r.value;case c.Identifier:return`${r.value.system??""}|${r.value.value}`;case c.Coding:return hn(r.value);case c.CodeableConcept:return r.value.coding?.map(hn).join(",")??r.value.text;case c.HumanName:return r.value.text?r.value.text:Ee(r.value);case c.unsignedInt:case c.positiveInt:case c.integer:case c.decimal:return r.value.toString();case c.boolean:return r.value?"true":"false";case c.Extension:return r.value.url;case c.ContactPoint:return r.value.value;case c.Quantity:case c.Age:case c.Count:case c.Duration:return`${r.value.value}|${r.value.system??""}|${r.value.code??r.value.unit??""}`;case c.Reference:return r.value.reference;default:return F(r.value)?G(r.value).reference:JSON.stringify(r)}}function hn(r){return r?`${r.system??""}|${r.code}`:""}function ce(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 we=()=>[],b={empty:(r,e)=>d(e.length===0),exists:(r,e,t)=>t?d(e.filter(n=>L(t.eval(r,[n]))).length>0):d(e.length>0),all:(r,e,t)=>d(e.every(n=>L(t.eval(r,[n])))),allTrue:(r,e)=>{for(let t of e)if(!t.value)return d(!1);return d(!0)},anyTrue:(r,e)=>{for(let t of e)if(t.value)return d(!0);return d(!1)},allFalse:(r,e)=>{for(let t of e)if(t.value)return d(!1);return d(!0)},anyFalse:(r,e)=>{for(let t of e)if(!t.value)return d(!0);return d(!1)},subsetOf:we,supersetOf:we,count:(r,e)=>[{type:c.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)=>d(e.length===b.distinct(r,e).length),where:(r,e,t)=>e.filter(n=>L(t.eval(r,[n]))),select:(r,e,t)=>e.map(n=>t.eval(r,[n])).flat(),repeat:we,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 Se([...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 L(o)?n.eval(r,e):i?i.eval(r,e):[]},toBoolean:(r,e)=>{if(e.length===0)return[];let[{value:t}]=M(e,1);if(typeof t=="boolean")return[{type:c.boolean,value:t}];if(typeof t=="number"&&(t===0||t===1))return d(!!t);if(typeof t=="string"){let n=t.toLowerCase();if(["true","t","yes","y","1","1.0"].includes(n))return d(!0);if(["false","f","no","n","0","0.0"].includes(n))return d(!1)}return[]},convertsToBoolean:(r,e)=>e.length===0?[]:d(b.toBoolean(r,e).length===1),toInteger:(r,e)=>{if(e.length===0)return[];let[{value:t}]=M(e,1);return typeof t=="number"?[{type:c.integer,value:t}]:typeof t=="string"&&/^[+-]?\d+$/.exec(t)?[{type:c.integer,value:parseInt(t,10)}]:typeof t=="boolean"?[{type:c.integer,value:t?1:0}]:[]},convertsToInteger:(r,e)=>e.length===0?[]:d(b.toInteger(r,e).length===1),toDate:(r,e)=>{if(e.length===0)return[];let[{value:t}]=M(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:c.date,value:ce(t)}]:[]},convertsToDate:(r,e)=>e.length===0?[]:d(b.toDate(r,e).length===1),toDateTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=M(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:c.dateTime,value:ce(t)}]:[]},convertsToDateTime:(r,e)=>e.length===0?[]:d(b.toDateTime(r,e).length===1),toDecimal:(r,e)=>{if(e.length===0)return[];let[{value:t}]=M(e,1);return typeof t=="number"?[{type:c.decimal,value:t}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(t)?[{type:c.decimal,value:parseFloat(t)}]:typeof t=="boolean"?[{type:c.decimal,value:t?1:0}]:[]},convertsToDecimal:(r,e)=>e.length===0?[]:d(b.toDecimal(r,e).length===1),toQuantity:(r,e)=>{if(e.length===0)return[];let[{value:t}]=M(e,1);return S(t)?[{type:c.Quantity,value:t}]:typeof t=="number"?[{type:c.Quantity,value:{value:t,unit:"1"}}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(t)?[{type:c.Quantity,value:{value:parseFloat(t),unit:"1"}}]:typeof t=="boolean"?[{type:c.Quantity,value:{value:t?1:0,unit:"1"}}]:[]},convertsToQuantity:(r,e)=>e.length===0?[]:d(b.toQuantity(r,e).length===1),toString:(r,e)=>{if(e.length===0)return[];let[{value:t}]=M(e,1);return t==null?[]:S(t)?[{type:c.string,value:`${t.value} '${t.unit}'`}]:[{type:c.string,value:t.toString()}]},convertsToString:(r,e)=>e.length===0?[]:d(b.toString(r,e).length===1),toTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=M(e,1);if(typeof t=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(t);if(n)return[{type:c.time,value:ce("T"+n[1])}]}return[]},convertsToTime:(r,e)=>e.length===0?[]:d(b.toTime(r,e).length===1),indexOf:(r,e,t)=>D((n,i)=>n.indexOf(i),r,e,t),substring:(r,e,t,n)=>D((i,o,s)=>{let a=o,u=s?a+s:i.length;return a<0||a>=i.length?void 0:i.substring(a,u)},r,e,t,n),startsWith:(r,e,t)=>D((n,i)=>n.startsWith(i),r,e,t),endsWith:(r,e,t)=>D((n,i)=>n.endsWith(i),r,e,t),contains:(r,e,t)=>D((n,i)=>n.includes(i),r,e,t),upper:(r,e)=>D(t=>t.toUpperCase(),r,e),lower:(r,e)=>D(t=>t.toLowerCase(),r,e),replace:(r,e,t,n)=>D((i,o,s)=>i.replaceAll(o,s),r,e,t,n),matches:(r,e,t)=>D((n,i)=>!!new RegExp(i).exec(n),r,e,t),replaceMatches:(r,e,t,n)=>D((i,o,s)=>i.replaceAll(o,s),r,e,t,n),length:(r,e)=>D(t=>t.length,r,e),toChars:(r,e)=>D(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:we,descendants:we,trace:(r,e,t)=>(console.log("trace",e,t),e),now:()=>[{type:c.dateTime,value:new Date().toISOString()}],timeOfDay:()=>[{type:c.time,value:new Date().toISOString().substring(11)}],today:()=>[{type:c.date,value:new Date().toISOString().substring(0,10)}],between:(r,e,t,n,i)=>{let o=b.toDateTime(r,t.eval(r,e));if(o.length===0)throw new Error("Invalid start date");let s=b.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 u=ye(o[0].value,s[0].value);return[{type:c.Quantity,value:{value:u[a],unit:a}}]},is:(r,e,t)=>{let n="";return t instanceof B?n=t.name:t instanceof H&&(n=t.left.name+"."+t.right.name),n?e.map(i=>({type:c.boolean,value:be(i,n)})):[]},not:(r,e)=>b.toBoolean(r,e).map(t=>({type:c.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:c.BackboneElement,value:void 0}}).filter(t=>!!t.value),as:(r,e)=>e,type:(r,e)=>e.map(({value:t})=>typeof t=="boolean"?{type:c.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof t=="number"?{type:c.BackboneElement,value:{namespace:"System",name:"Integer"}}:F(t)?{type:c.BackboneElement,value:{namespace:"FHIR",name:t.resourceType}}:{type:c.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:c.boolean,value:o.value?.resourceType===i}))}};function D(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=M(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}]=M(t,1),o=S(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(f=>f.eval(e,t)[0]?.value)),u=o?c.Quantity:t[0].type,l=o?{...i,value:a}:a;return[{type:u,value:l}]}function M(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()}},V=class{constructor(e){this.value=e}eval(){return[this.value]}toString(){let e=this.value.value;return typeof e=="string"?`'${e}'`:e.toString()}},B=class{constructor(e){this.name=e}eval(e,t){if(this.name==="$this")return t;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 F(t)&&t.resourceType===this.name?e:k(e,this.name)}toString(){return this.name}},ke=class{eval(){return[]}toString(){return"{}"}},Oe=class extends me{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 b.ofType(e,this.left.eval(e,t),this.right)}},v=class extends ${},R=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,u=S(s)?s.value:s,l=S(a)?a.value:a,f=this.impl(u,l);return typeof f=="boolean"?d(f):S(s)?[{type:c.Quantity,value:{...s,value:f}}]:[T(f)]}},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:c.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 d(n.some(o=>o.value===i[0].value))}},Ne=class extends v{constructor(e,t){super("in",e,t)}eval(e,t){let n=N(this.left.eval(e,t)),i=this.right.eval(e,t);return n?d(i.some(o=>o.value===n.value)):[]}},H=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()}`}},ee=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 Se([...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 at(n,i)}},_e=class extends v{constructor(e,t){super("!=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return st(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 ct(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 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 d(be(n[0],i))}},Me=class extends v{constructor(e,t){super("and",e,t)}eval(e,t){let n=N(this.left.eval(e,t),"boolean"),i=N(this.right.eval(e,t),"boolean");return n?.value===!0&&i?.value===!0?d(!0):n?.value===!1||i?.value===!1?d(!1):[]}},Be=class extends v{constructor(e,t){super("or",e,t)}eval(e,t){let n=N(this.left.eval(e,t),"boolean"),i=N(this.right.eval(e,t),"boolean");return n?.value===!1&&i?.value===!1?d(!1):n?.value||i?.value?d(!0):[]}},qe=class extends v{constructor(e,t){super("xor",e,t)}eval(e,t){let n=N(this.left.eval(e,t),"boolean"),i=N(this.right.eval(e,t),"boolean");return!n||!i?[]:d(n.value!==i.value)}},je=class extends v{constructor(e,t){super("implies",e,t)}eval(e,t){let n=N(this.left.eval(e,t),"boolean"),i=N(this.right.eval(e,t),"boolean");return i?.value===!0||n?.value===!1?d(!0):!n||!i?[]:d(!1)}},q=class{constructor(e,t){this.name=e;this.args=t}eval(e,t){let n=b[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 Vo=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],K=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()===" "&&No(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 No(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&Vo.includes(r.value)))}var $e=["true","false"],Qe=["!=","!~","<=",">=","{}","->"];function Tn(r){return new K(r,$e,Qe).tokenize()}var m={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},Fo={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},_o={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new X(e,t)},precedence:m.Indexer},Lo={parse(r,e){if(!(e instanceof B))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new q(e.name,t)},precedence:m.FunctionCall};function Uo(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 he().registerPrefix("String",{parse:(r,e)=>new V({type:c.string,value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new V({type:c.dateTime,value:ce(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new V({type:c.Quantity,value:Uo(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new V({type:c.decimal,value:parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new V({type:c.boolean,value:!0})}).registerPrefix("false",{parse:()=>new V({type:c.boolean,value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new B(e.value)}).registerPrefix("{}",{parse:()=>new ke}).registerPrefix("(",Fo).registerInfix("[",_o).registerInfix("(",Lo).prefix("+",m.UnaryAdd,(r,e)=>new Oe("+",e,t=>t)).prefix("-",m.UnarySubtract,(r,e)=>new R("-",e,e,(t,n)=>-n)).infixLeft(".",m.Dot,(r,e,t)=>new H(r,t)).infixLeft("/",m.Divide,(r,e,t)=>new R("/",r,t,(n,i)=>n/i)).infixLeft("*",m.Multiply,(r,e,t)=>new R("*",r,t,(n,i)=>n*i)).infixLeft("+",m.Add,(r,e,t)=>new R("+",r,t,(n,i)=>n+i)).infixLeft("-",m.Subtract,(r,e,t)=>new R("-",r,t,(n,i)=>n-i)).infixLeft("|",m.Union,(r,e,t)=>new ee(r,t)).infixLeft("=",m.Equals,(r,e,t)=>new Fe(r,t)).infixLeft("!=",m.NotEquals,(r,e,t)=>new _e(r,t)).infixLeft("~",m.Equivalent,(r,e,t)=>new Le(r,t)).infixLeft("!~",m.NotEquivalent,(r,e,t)=>new Ue(r,t)).infixLeft("<",m.LessThan,(r,e,t)=>new R("<",r,t,(n,i)=>n<i)).infixLeft("<=",m.LessThanOrEquals,(r,e,t)=>new R("<=",r,t,(n,i)=>n<=i)).infixLeft(">",m.GreaterThan,(r,e,t)=>new R(">",r,t,(n,i)=>n>i)).infixLeft(">=",m.GreaterThanOrEquals,(r,e,t)=>new R(">=",r,t,(n,i)=>n>=i)).infixLeft("&",m.Ampersand,(r,e,t)=>new De(r,t)).infixLeft("and",m.And,(r,e,t)=>new Me(r,t)).infixLeft("as",m.As,(r,e,t)=>new J(r,t)).infixLeft("contains",m.Contains,(r,e,t)=>new Ve(r,t)).infixLeft("div",m.Divide,(r,e,t)=>new R("div",r,t,(n,i)=>n/i|0)).infixLeft("in",m.In,(r,e,t)=>new Ne(r,t)).infixLeft("is",m.Is,(r,e,t)=>new Y(r,t)).infixLeft("mod",m.Modulo,(r,e,t)=>new R("mod",r,t,(n,i)=>n%i)).infixLeft("or",m.Or,(r,e,t)=>new Be(r,t)).infixLeft("xor",m.Xor,(r,e,t)=>new qe(r,t)).infixLeft("implies",m.Implies,(r,e,t)=>new je(r,t))}var Mo=ue();function gt(r){return new Ie(r,Mo.construct(Tn(r)).consumeAndParse())}function te(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 gt(r).eval({variables:n},e).map(o=>({type:o.type,value:o.value?.valueOf()}))}var cr=(f=>(f.BOOLEAN="BOOLEAN",f.NUMBER="NUMBER",f.QUANTITY="QUANTITY",f.TEXT="TEXT",f.REFERENCE="REFERENCE",f.CANONICAL="CANONICAL",f.DATE="DATE",f.DATETIME="DATETIME",f.PERIOD="PERIOD",f.UUID="UUID",f))(cr||{});function ur(r,e){let t=O.types[r]?.searchParamsDetails?.[e.code];return t||(t=qo(r,e)),t}function Bo(r,e,t){let n=O.types[r];n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=t}function qo(r,e){let t=e.code,n=Qo(t),i=lr(r,e.expression),o={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let a of i){let u=He(a);u.length===1&&u[0]instanceof v?o.propertyTypes.add("boolean"):vn(o,He(a),r,1)}let s={columnName:n,type:Ho(e,o.propertyTypes),elementDefinitions:o.elementDefinitions,array:o.array};return Bo(r,t,s),s}function vn(r,e,t,n){let i=e[n];if(i instanceof J){r.propertyTypes.add(i.right.toString());return}if(i instanceof q){jo(r,i);return}let o=i.toString(),s=Re(t,o);if(!s)throw new Error(`Element definition not found for ${t} ${o}`);let a=!1,u=n+1;if(u<e.length&&e[u]instanceof X&&(a=!0,u++),s.isArray&&!a&&(r.array=!0),u>=e.length){r.elementDefinitions.push(s);for(let l of s.type)r.propertyTypes.add(l.code);return}for(let l of s.type){let f=l.code;$o(f)&&(f=s.type[0].code),vn(r,e,f,u)}}function jo(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 $o(r){return r==="Element"||r==="BackboneElement"}function Qo(r){return r.split("-").reduce((e,t,n)=>e+(n?C(t):t),"")}function Ho(r,e){switch(r.type){case"date":return e.size===1&&e.has(c.date)?"DATE":"DATETIME";case"number":return"NUMBER";case"quantity":return"QUANTITY";case"reference":return e.has(c.canonical)?"CANONICAL":"REFERENCE";case"token":return e.size===1&&e.has(c.boolean)?"BOOLEAN":"TEXT";default:return"TEXT"}}function lr(r,e){let t=[],n=gt(e);return ar(r,n.child,t),t}function Ko(r,e){let t=lr(r,e);if(t.length!==0)return t.map(n=>n.toString()).join(" | ")}function ar(r,e,t){e instanceof ee?(ar(r,e.left,t),ar(r,e.right,t)):e.toString().startsWith(r+".")&&t.push(e)}function He(r){if(r instanceof J||r instanceof X)return[He(r.left),r].flat();if(r instanceof v)return[r];if(r instanceof H)return[He(r.left),He(r.right)].flat();if(r instanceof q){if(r.name==="where"&&!(r.args[0]instanceof Y))return[];if(r.name==="last")return[]}return[r]}var Wo=20,bn=(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))(bn||{}),Rn={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"},pr={eq:"eq",ne:"ne",lt:"lt",le:"le",gt:"gt",ge:"ge",sa:"sa",eb:"eb",ap:"ap"};function Go(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 Pn(r,t)}function fr(r){let e;for(let t of r.pathname.split("/"))t&&(e=t);return Pn(e,r.searchParams.entries())}function zo(r){return fr(new URL(r,"https://example.com/"))}function xt(r){return fr(new URL(r,"https://api.medplum.com/"))}function Pn(r,e){let t={resourceType:r};for(let[n,i]of e)Jo(t,n,i);return t}function Jo(r,e,t){let n,i,o=e.indexOf(":");if(o>=0?(n=e.substring(0,o),i=e.substring(o+1)):(n=e,i=""),n==="_has"||e.includes(".")){dr(r,{code:e,operator:"eq",value:t});return}switch(n){case"_sort":Yo(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=En(t);i==="iterate"&&(s.modifier="iterate"),r.include?r.include.push(s):r.include=[s];break}case"_revinclude":{let s=En(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=O.types[r.resourceType]?.searchParams?.[n];s?dr(r,An(s,i,t)):dr(r,es(n,i,t))}}}function Yo(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 An(r,e,t){if(e==="missing")return{code:r.code,operator:"missing",value:t};switch(r.type){case"number":case"date":case"quantity":return Xo(r,t);case"reference":case"string":case"token":case"uri":return Zo(r,e,t);default:throw new Error("Unrecognized search parameter type: "+r.type)}}function Xo(r,e){let{operator:t,value:n}=ts(e);return{code:r.code,operator:t,value:n}}function Zo(r,e,t){return{code:r.code,operator:rs(e),value:t}}function es(r,e,t){let n="eq";if(e)n=e;else if(t.length>=2){let i=t.substring(0,2);i in pr&&(t.length===2||t.at(2)?.match(/\d/))&&(n=i,t=t.substring(i.length))}return{code:r,operator:n,value:t}}function ts(r){let e=r.substring(0,2),t=pr[e];return t?{operator:t,value:r.substring(2)}:{operator:"eq",value:r}}function rs(r){return Rn[r]??"eq"}function En(r){let e=r.split(":");if(e.includes("*"))throw new p(w("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new p(w(`Invalid include value '${r}': must be of the form ResourceType:search-parameter`));if(e.length===2)return{resourceType:e[0],searchParam:e[1]};if(e.length===3)return{resourceType:e[0],searchParam:e[1],targetType:e[2]};throw new p(w(`Invalid include value '${r}'`))}function dr(r,e){r.filters?r.filters.push(e):r.filters=[e]}var ns=/{{([^{}]+)}}/g;function is(r,e){return r=r.replaceAll(ns,(t,n)=>{let i=le(n,[],e);return i.length!==1?"":sr(i[0])}),xt(r)}function os(r){let e=[];return r.fields&&e.push("_fields="+r.fields.join(",")),r.filters&&r.filters.forEach(t=>e.push(ss(t))),r.sortRules&&r.sortRules.length>0&&e.push(as(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(Sn("_include",t))),r.revInclude&&r.revInclude.forEach(t=>e.push(Sn("_revinclude",t))),e.length===0?"":(e.sort((t,n)=>t.localeCompare(n)),"?"+e.join("&"))}function ss(r){let e=r.operator in Rn?":"+r.operator:"",t=r.operator!=="eq"&&r.operator in pr?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function as(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function Sn(r,e){return r+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function hr(r,e){if(e.resourceType!==r.resourceType)return!1;if(e.filters){for(let t of e.filters)if(!cs(r,e,t))return!1}return!0}function cs(r,e,t){let n=O.types[e.resourceType]?.searchParams?.[t.code];if(t.operator==="missing"&&n){let i=te(n.expression,r);return t.value==="true"?!i.length:i.length>0}switch(n?.type){case"reference":return us(r,t,n);case"string":case"uri":return Cn(r,t,n);case"token":return ls(r,t,n);case"date":return ps(r,t,n);default:return!1}}function us(r,e,t){let n=te(t.expression,r),i=Tt(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(u=>u?.endsWith("/"+s))),a)return!i}return i}function ls(r,e,t){return ur(r.resourceType,t).type==="BOOLEAN"?ds(r,e,t):Cn(r,e,t,!0)}function ds(r,e,t){let n=te(t.expression,r),i=e.value==="true",o=n.includes(i);return Tt(e.operator)?!o:o}function Cn(r,e,t,n){let i=te(t.expression,r),o=e.value.split(","),s=Tt(e.operator);for(let a of i)for(let u of o)if(mr(a,e.operator,u,n))return!s;return s}function mr(r,e,t,n){if(n&&t.includes("|")){let[o,s]=t.split("|");return mr(r,e,o,!1)&&(!s||mr(r,e,s,!1))}let i="";return r&&(typeof r=="string"?i=r:typeof r=="object"&&(i=JSON.stringify(r))),i.toLowerCase().includes(t.toLowerCase())}function ps(r,e,t){let n=te(t.expression,r),i=e.value.split(","),o=Tt(e.operator);for(let s of n)for(let a of i)if(fs(s,e.operator,a))return!o;return o}function fs(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 Tt(r){return r==="ne"||r==="not"}var ms={resourceType:"*"},wn=["DomainConfiguration","JsonWebKey","Login"],In=["PasswordChangeRequest","Project","ProjectMembership","User"],kn=(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))(kn||{}),hs=["read","vread","history","history-instance"];function ys(r,e){if(r.resource){for(let t of r.resource)if(yr(t.resourceType,e))return!0}return!1}function On(r,e){if(wn.includes(e))return!1;if(r.resource){for(let t of r.resource)if(yr(t.resourceType,e)&&!t.readonly)return!0}return!1}function gs(r,e){let t=e.resourceType;return On(r,t)?Dn(r,e,!1):!1}function Dn(r,e,t){if(r.resource){for(let n of r.resource)if(Vn(e,t?"read":"update",n))return!0}return!1}function xs(r,e,t){if(!t)return ms;if(t.resource){for(let n of t.resource)if(Vn(r,e,n))return n}}function Vn(r,e,t){let n=r.resourceType;return!(!yr(t.resourceType,n)||t.readonly&&!hs.includes(e)||t.compartment&&!r.meta?.compartment?.find(i=>i.reference===t.compartment?.reference)||t.criteria&&!hr(r,xt(t.criteria)))}function yr(r,e){return r===e||r==="*"&&!In.includes(e)}function gr(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 xr(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 vt(){let r=new Uint32Array(28);return crypto.getRandomValues(r),Ft(r.buffer)}async function Tr(r){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(r))}function de(){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 Nn(r){let e={};r=rt(r);for(let i of r.entry||[]){delete i.resource?.meta;let o=i.resource?.id;o&&(e[o]=de(),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)=>Ts(i,o,e),2);return Fn(JSON.parse(n))}function Ts(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 Fn(r){let e=Es(r),{sorted:t,cycles:n}=vs(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 u=i[a],l={...u,request:{...u.request,method:"PUT"}};o.push(l)}return{...r,entry:o}}function vs(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 u=s.lastIndexOf(o);return u!==-1&&n.push(s.slice(u)),!0}t[o]=1,s.push(o);let a=!1;for(let u of r[o])i(u,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 _n(r,e){for(let t in r)if(r[t]&&typeof r[t]=="object"){let n=r[t];if(oe(n)){let i=n.reference;i.startsWith("urn:uuid:")&&e(i)}else _n(n,e)}}function Es(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&&_n(t.resource,i=>{e[i]&&e[i].push(n)})}return e}function Ss(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=de());return Nn(e)}var Ke=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 I={CSS:"text/css",DICOM:"application/dicom",FAVICON:"image/vnd.microsoft.icon",FHIR_JSON:"application/fhir+json",FORM_URL_ENCODED:"application/x-www-form-urlencoded",HL7_V2:"x-application/hl7-v2+er7",HTML:"text/html",JAVASCRIPT:"text/javascript",JSON:"application/json",JSON_PATCH:"application/json-patch+json",PNG:"image/png",SVG:"image/svg+xml",TEXT:"text/plain",TYPESCRIPT:"text/typescript"};var pe=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 pe}dispatchEvent(e){this.emitter.dispatchEvent(e)}addEventListener(e,t){this.emitter.addEventListener(e,t)}removeEventListener(e,t){this.emitter.removeEventListener(e,t)}};var Et={"Patient-open":"Patient-open","Patient-close":"Patient-close","ImagingStudy-open":"ImagingStudy-open","ImagingStudy-close":"ImagingStudy-close","Encounter-open":"Encounter-open","Encounter-close":"Encounter-close","DiagnosticReport-open":"DiagnosticReport-open","DiagnosticReport-close":"DiagnosticReport-close","DiagnosticReport-select":"DiagnosticReport-select","DiagnosticReport-update":"DiagnosticReport-update",syncerror:"syncerror"},Un=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],St=["DiagnosticReport-update"];function vr(r){return St.includes(r)}function Er(r){if(St.includes(r))throw new p(h(`'context.version' is required for '${r}'.`))}var Mn={"Patient-open":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"Patient-close":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"ImagingStudy-open":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"ImagingStudy-close":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"Encounter-open":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"Encounter-close":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"DiagnosticReport-open":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-close":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-select":{report:{resourceType:"DiagnosticReport"},select:{resourceType:"*",isArray:!0}},"DiagnosticReport-update":{report:{resourceType:"DiagnosticReport"},patient:{resourceType:"Patient",optional:!0},study:{resourceType:"ImagingStudy",optional:!0},updates:{resourceType:"Bundle"}},syncerror:{operationoutcome:{resourceType:"OperationOutcome"}}};function Bn(r){return Un.includes(r)}function Sr(r){return!!r.endpoint}function bt(r){if(!ze(r))throw new p(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 Sr(r)&&(o.endpoint=r.endpoint),new URLSearchParams(o).toString()}function ze(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(!Et[o])return!1;return!(Sr(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function Ln(r,e,t,n){if(typeof e!="object")throw new p(h(`context[${t}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.id&&typeof e.id=="string"))throw new p(h(`context[${t}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new p(h(`context[${t}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!Bn(e.resourceType))throw new p(h(`context[${t}] is invalid. Resource must contain a valid FHIRcast resource type. Resource type is not a known resource type.`));if(i&&e.resourceType!==i)throw new p(h(`context[${t}] is invalid. context[${t}] for the '${r}' event should contain resource of type ${i}.`))}}function bs(r,e,t,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),!n.isArray)Ln(r,e.resource,t,n);else{let{resources:o}=e;if(!o)throw new p(h(`context[${t}] is invalid. context[${t}] for the '${r}' with key '${String(e.key)}' should contain an array of resources on the key 'resources'.`));for(let s of o)Ln(r,s,t,n)}}function Rs(r,e){let t=new Map,n=Mn[r];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new p(h(`Key '${o}' not found for event '${r}'. Make sure to add only valid keys.`));bs(r,e[i],i,n[o],t)}for(let[i,o]of Object.entries(n)){if(!(o.optional||t.has(i)))throw new p(h(`Missing required key '${i}' on context for '${r}' event.`));if(!o.manyAllowed&&(t.get(i)||0)>1)throw new p(h(`${t.get(i)} context entries with key '${i}' found for the '${r}' event when schema only allows for 1.`))}}function Rt(r,e,t,n){if(!(r&&typeof r=="string"))throw new p(h("Must provide a topic."));if(!Et[e])throw new p(h(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(Et).join(", ")}`));if(typeof t!="object")throw new p(h("context must be a context object or array of context objects."));if(St.includes(e)&&!n)throw new p(h(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(t)?t:[t];return Rs(e,i),{timestamp:new Date().toISOString(),id:de(),event:{"hub.topic":r,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var Ge=class extends We{constructor(t){super();if(this.subRequest=t,!t.endpoint)throw new p(h("Subscription request should contain an endpoint."));if(!ze(t))throw new p(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;s.event["hub.event"]!=="heartbeat"&&(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 Ps(r){let e=r.replace(/-/g,"+").replace(/_/g,"/"),t=gr(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 br(r){return r.split(".").length===3}function Pt(r){let[e,t,n]=r.split(".");return Ps(t)}function Rr(r){try{return typeof Pt(r).login_id=="string"}catch{return!1}}var As,P=class{constructor(e){this[As]="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)}};As=Symbol.toStringTag;var Je=class{constructor(e){this.storage=e??(typeof localStorage<"u"?localStorage:new At)}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?Vt(t):void 0)}},At=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 Cs="2.2.4-6eee2069",Wn=I.FHIR_JSON+", */*; q=0.1",ws="https://api.medplum.com/",Is=1e3,ks=6e4,qn="Binary/",jn={resourceType:"Device",id:"system",deviceName:[{name:"System"}]},Gn=(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))(Gn||{}),zn=(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))(zn||{}),Jn=(o=>(o.ClientSecretBasic="client_secret_basic",o.ClientSecretPost="client_secret_post",o.ClientSecretJwt="client_secret_jwt",o.PrivateKeyJwt="private_key_jwt",o.None="none",o))(Jn||{}),Yn=(e=>(e.JwtBearer="urn:ietf:params:oauth:client-assertion-type:jwt-bearer",e))(Yn||{}),Pr=class extends pe{constructor(t){super();this.initComplete=!0;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??Os(),this.storage=t?.storage??new Je,this.createPdfImpl=t?.createPdf,this.baseUrl=Qn(t?.baseUrl??ws),this.fhirBaseUrl=Qn(Ct(this.baseUrl,t?.fhirUrlPath??"fhir/R4/")),this.authorizeUrl=Ct(this.baseUrl,t?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=Ct(this.baseUrl,t?.tokenUrl??"oauth2/token"),this.logoutUrl=Ct(this.baseUrl,t?.logoutUrl??"oauth2/logout"),this.clientId=t?.clientId??"",this.clientSecret=t?.clientSecret??"",this.onUnauthenticated=t?.onUnauthenticated,this.cacheTime=t?.cacheTime??ks,this.cacheTime>0?this.requestCache=new Ke(t?.resourceCacheSize??Is):this.requestCache=void 0,t?.autoBatchTime?(this.autoBatchTime=t.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0),t?.accessToken)this.setAccessToken(t.accessToken),this.initPromise=Promise.resolve();else if(this.storage.getInitPromise!==void 0){let n=this.storage.getInitPromise(),i=new Promise(o=>{n.then(()=>{this.attemptResumeActiveLogin().then(o).catch(console.error),this.initComplete=!0}).catch(console.error)});this.initPromise=i,this.initComplete=!1}else this.initPromise=this.attemptResumeActiveLogin().catch(console.error);this.setupStorageListener()}get isInitialized(){return this.initComplete}getInitPromise(){return this.initPromise}async attemptResumeActiveLogin(){let t=this.getActiveLogin();t&&(this.setAccessToken(t.accessToken,t.refreshToken),await this.refreshProfile())}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}clear(){this.storage.clear(),sessionStorage.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,u)=>{this.autoBatchQueue.push({method:"GET",url:t.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:u}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):o=this.request("GET",t,n);let s=new P(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,I.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,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),window.location.assign(this.getExternalAuthRedirectUri(t,n,i,a,s))}async exchangeExternalAccessToken(t,n){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");let i=new URLSearchParams;return i.set("grant_type","urn:ietf:params:oauth:grant-type:token-exchange"),i.set("subject_token_type","urn:ietf:params:oauth:token-type:access_token"),i.set("client_id",n),i.set("subject_token",t),this.fetchTokens(i)}getExternalAuthRedirectUri(t,n,i,o,s=!0){let a=new URL(t);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",n),a.searchParams.set("redirect_uri",i),a.searchParams.set("scope",o.scope??"openid profile email"),a.searchParams.set("state",JSON.stringify(o)),s){let{codeChallenge:u,codeChallengeMethod:l}=o;if(!l)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!u)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");a.searchParams.set("code_challenge_method",l),a.searchParams.set("code_challenge",u)}return a.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 u=new P((async()=>{let l=await this.get(o,i);if(l.entry)for(let f of l.entry)this.cacheResource(f.resource);return l})());return this.setCacheEntry(s,u),u}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 u=new P(this.search(t,o.searchParams,i).then(l=>l.entry?.[0]?.resource));return this.setCacheEntry(s,u),u}searchResources(t,n,i){let s=this.fhirSearchUrl(t,n).toString()+"-searchResources",a=this.getCacheEntry(s,i);if(a)return a.value;let u=new P(this.search(t,n,i).then(Kn));return this.setCacheEntry(s,u),u}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),u=a.link?.find(l=>l.relation==="next");if(!a.entry?.length&&!u)break;yield Kn(a),o=u?.url?new URL(u.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 jn;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 P(Promise.reject(new Error("Missing reference")));if(i==="system")return new P(Promise.resolve(jn));let[o,s]=i.split("/");return!o||!s?new P(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 P((async()=>{let s=`{
4
4
  StructureDefinitionList(name: "${t}") {
5
5
  resourceType,
6
6
  name,
7
7
  kind,
8
8
  description,
9
+ type,
9
10
  snapshot {
10
11
  element {
11
12
  id,
@@ -21,6 +22,7 @@
21
22
  contentReference,
22
23
  type {
23
24
  code,
25
+ profile,
24
26
  targetProfile
25
27
  },
26
28
  binding {
@@ -37,5 +39,5 @@
37
39
  expression,
38
40
  target
39
41
  }
40
- }`.replace(/\s+/g," "),a=await this.graphql(s);Yt(a.data.StructureDefinitionList);for(let u of a.data.SearchParameterList)ht(u)})());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,s){let a=await this.createBinary(t,n,i,o,s);return{contentType:i,url:a.url,title:n}}createBinary(t,n,i,o,s){let a=this.fhirUrl("Binary");return n&&a.searchParams.set("_filename",n),o?this.uploadwithProgress(a,t,i,o,s):this.post(a,t,i,s)}uploadwithProgress(t,n,i,o,s){return new Promise((a,u)=>{let d=new XMLHttpRequest,f=()=>d.abort();s?.signal?.addEventListener("abort",f);let P=$=>{s?.signal?.removeEventListener("abort",f),$ instanceof Error?u($):a($)};d.responseType="json",d.onabort=()=>P(new Error("Request aborted")),d.onerror=()=>P(new Error("Request error")),o&&(d.upload.onprogress=$=>o($),d.upload.onload=$=>o($)),d.onload=()=>{d.status>=200&&d.status<300?P(d.response):P(new p(Ce(d.response||d.statusText)))},d.open("POST",t),d.withCredentials=!0,d.setRequestHeader("Authorization","Bearer "+this.accessToken),d.setRequestHeader("Cache-Control","no-cache, no-store, max-age=0"),d.setRequestHeader("Content-Type",i),d.setRequestHeader("X-Medplum","extended"),d.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=G(t),a=t.subject),t.resourceType==="ServiceRequest"&&(s=t.encounter,a=t.subject),t.resourceType==="Patient"&&(a=G(t)),this.createResource({resourceType:"Communication",basedOn:[G(t)],encounter:s,subject:a,sender:o?G(o):void 0,sent:new Date().toISOString(),payload:[{contentString:n}]},i)}async updateResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");if(!t.id)throw new Error("Missing id");let i=await this.put(this.fhirUrl(t.resourceType,t.id),t,void 0,n);return i||(i=t),this.cacheResource(i),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),i}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,w.JSON,n)}graphql(t,n,i,o){return this.post(this.fhirUrl("$graphql"),{query:t,operationName:n,variables:i},w.JSON,o)}readResourceGraph(t,n,i,o){return this.get(`${this.fhirUrl(t,n)}/$graph?graph=${i}`,o)}pushToAgent(t,n,i,o,s,a){return this.post(this.fhirUrl("Agent",kt(t),"$push"),{destination:oe(n),body:i,contentType:o,waitForResponse:s},w.FHIR_JSON,a)}getActiveLogin(){return this.storage.getObject("activeLogin")}async setActiveLogin(t){(!this.sessionDetails?.profile||oe(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=vr(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(Dn)&&(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:Dn+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 Un(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 I(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 p(Qt);let u=t.headers.get("content-location"),d=o.redirect??this.options.redirect;if(t.status===201&&u&&d==="follow")return this.request("GET",u,{...o,body:void 0});let f;if(a)try{f=await t.json()}catch(P){throw console.error("Error parsing response",t.status,P),P}else f=await t.text();if(t.status>=400)throw new p(Ce(f));return f}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(u){this.retryCatch(a,i,u)}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 u=await Un(a);u&&(i=await this.fetchWithRetry(u,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 p(Ce(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&&!dt(a.response.outcome)?s.reject(new p(a.response.outcome)):s.resolve(a?.resource)}}addFetchOptionsDefaults(t){let n=t.headers;n||(n={},t.headers=n),n.Accept||(n.Accept=Mn),n["X-Medplum"]="extended",t.body&&!n["Content-Type"]&&(n["Content-Type"]=w.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=Tt();sessionStorage.setItem("pkceState",t);let n=Tt();sessionStorage.setItem("codeVerifier",n);let i=await hr(n),o=Nt(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??Fn()),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??Fn()),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=mr(t+":"+n)}async fhircastSubscribe(t,n){if(!(typeof t=="string"&&t!==""))throw new p(h("Invalid topic provided. Topic must be a valid string."));if(!(typeof n=="object"&&Array.isArray(n)&&n.length>0))throw new p(h("Invalid events provided. Events must be an array of event names containing at least one event."));let i={channelType:"websocket",mode:"subscribe",topic:t,events:n},s=(await this.post("/fhircast/STU3",Et(i),w.FORM_URL_ENCODED))["hub.channel.endpoint"];if(!s)throw new Error("Invalid response!");return i.endpoint=s,i}async fhircastUnsubscribe(t){if(!ze(t))throw new p(h("Invalid topic or subscriptionRequest. SubscriptionRequest must be an object."));if(!(t.endpoint&&typeof t.endpoint=="string"&&t.endpoint.startsWith("ws")))throw new p(h("Provided subscription request must have an endpoint in order to unsubscribe."));t.mode="unsubscribe",await this.post("/fhircast/STU3",Et(t),w.FORM_URL_ENCODED)}fhircastConnect(t){return new Ge(t)}async fhircastPublish(t,n,i,o){return yr(n)?this.post(`/fhircast/STU3/${t}`,bt(t,n,i,o),w.JSON):(gr(n),this.post(`/fhircast/STU3/${t}`,bt(t,n,i),w.JSON))}async fhircastGetContext(t){return this.get(`/fhircast/STU3/${t}`)}async invite(t,n){return this.post("admin/projects/"+t+"/invite",n)}async fetchTokens(t){let n={method:"POST",headers:{"Content-Type":w.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 p(C(a.error_description))}catch(a){throw new p(C("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(Tr(n)){let i=Rt(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 bs(){if(!globalThis.fetch)throw new Error("Fetch not available in this environment");return globalThis.fetch.bind(globalThis)}function Fn(){return typeof window>"u"?"":window.location.protocol+"//"+window.location.host+"/"}function _n(r){return r.endsWith("/")?r:r+"/"}function At(r,e){return new URL(e,r).toString()}async function Un(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(Ae(n)&&n.issue?.[0]?.diagnostics)return n.issue[0].diagnostics}function Ln(r){let e=r.entry?.map(t=>t.resource)??[];return Object.assign(e,{bundle:r})}var Rs={aws_ssm_parameter_store:"aws_ssm_parameter_store"};var Er="http://unitsofmeasure.org",Ps="http://loinc.org",As="http://snomed.info/sct",Cs="http://www.nlm.nih.gov/research/umls/rxnorm",ws="http://www.ama-assn.org/go/cpt",Is="http://hl7.org/fhir/sid/icd-10";var ks=[...Qe,"->","<<",">>"];function Qn(r){return new K(r,je,ks).tokenize()}var br=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(m.Arrow);e.condition=n.toString()}if(this.parser.peek()?.value==="check"){this.parser.consume("Symbol","check");let n=this.parser.consumeAndParse(m.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(m.As);if(t instanceof B)this.parseRuleTargetSymbol(e,t);else if(t instanceof q)this.parseRuleTargetFunction(e,t);else if(t instanceof D)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(m.Arrow);return[{name:e.name,variable:e.args.map(t=>t.name)}]}parseConceptMap(){for(;this.parser.peek()?.value!=="}";)this.parser.consume();this.parser.consume("}")}},Os=le().registerInfix("->",{precedence:m.Arrow}).registerInfix(";",{precedence:m.Semicolon});function Vs(r){let e=Os.construct(Qn(r));return e.removeComments(),new br(e).parse()}var Ds=[...Qe,"eq","ne","co"];function Hn(r){return new K(r,je,Ds,{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 Ns={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 Fs(r){let e=Ns[r];if(!e)throw new p(C("Invalid operator: "+r));return e}var Rr=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,Fs(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}},_s=le();function Us(r){let e=_s.construct(Hn(r));return e.removeComments(),new Rr(e).parse()}var W=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}},Pr=class r{constructor(e,t=new W){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()??"",u=t?.getField(12)?.toString()??"2.5.1";return new r([new me(["MSH",this.context.getMsh2(),o,s,n,i,Kn(e),"",this.buildAckMessageType(t),e.getTime().toString(),"P",u],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 W("\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 W){this.context=t,Vt(e)?this.fields=e.map(n=>ie.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 ie([[this.context.getMsh1()]],this.context);if(e===2)return new ie([[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 W){return new r(e.split(t.fieldSeparator).map(n=>ie.parse(n,t)),t)}},ie=class r{constructor(e,t=new W){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 W){return new r(e.split(t.repetitionSeparator).map(n=>n.split(t.componentSeparator)),t)}};function Ls(r,e){if(!r)return;let t=ne(r.slice(0,4),0),n=ne(r.slice(4,6),1)-1,i=ne(r.slice(6,8),1),o=ne(r.slice(8,10),0),s=ne(r.slice(10,12),0),a=ne(r.slice(12,14),0),u=0;r.includes(".")&&(u=ne(r.slice(15,19),0));let d=new Date(Date.UTC(t,n,i,o,s,a,u)),f=Ms(r,e?.tzOffset);return f!==0&&(d=new Date(d.getTime()-f)),d.toISOString()}function ne(r,e){let t=parseInt(r,10);return isNaN(t)?e:t}function Ms(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 Kn(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 Bs(r){if(!r)throw new p(h("Resource type is null"));if(!tr(r))throw new p(h("Unknown resource type"))}function Ar(r,e,t){r===null?t.push(y(e,"Invalid null value")):Array.isArray(r)?qs(r,e,t):typeof r=="object"&&$s(r,e,t)}function qs(r,e,t){for(let n=0;n<r.length;n++)r[n]===void 0?t.push(y(`${e}[${n}]`,"Invalid undefined value")):Ar(r[n],`${e}[${n}]`,t)}function $s(r,e,t){for(let[n,i]of Object.entries(r))Ar(i,`${e}${e?".":""}${n}`,t)}function js(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 Ct(r,e,t,n){new Cr(r,e,t,n).crawl()}var Cr=class{constructor(e,t,n,i){this.rootResource=e,this.visitor=t,n?this.schema=n:this.schema=ee(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=F(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=wt(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=ee(e.type);this.crawlObject(e,n,t)}}};function wt(r,e){if(e==="$this")return[r];let[t,...n]=e.split("."),i=[k(r,t)];for(let o of n){let s=[];for(let a of i)if(Array.isArray(a))for(let u of a)s.push(k(u,o));else a!==void 0&&s.push(k(a,o));i=s}return i}var wr={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"},Qs={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:/.*/},Hs={"ele-1":!0};function Ks(r,e){new Ir(r.resourceType,r,e).validate()}var Ir=class{constructor(e,t,n){this.issues=[],this.rootResource=t,this.currentResource=[],n?this.schema=ft(n):this.schema=ee(e)}validate(){let e=this.rootResource.resourceType;if(!e)throw new p(h("Missing resource type"));kr(this.rootResource,e,this.issues),Ct(this.rootResource,this,this.schema);let t=this.issues;if(this.issues=[],t.length>0)throw new p({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 u;if(s.isArray){if(!Array.isArray(a)){this.issues.push(y(n,"Expected array of values for property"));return}u=a}else{if(Array.isArray(a)){this.issues.push(y(n,"Expected single value for property"));return}u=[a]}(u.length<s.min||u.length>s.max)&&this.issues.push(y(n,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${u.length}`)),Wn(a,s)||this.issues.push(y(n,"Value did not match expected pattern"));let d=s.slicing?Object.fromEntries(s.slicing.slices.map(f=>[f.name,0])):void 0;for(let f of u){this.constraintsCheck(f,s,n),this.checkPropertyValue(f,n);let P=Js(f,s.slicing);P&&d&&(d[P]+=1)}this.validateSlices(s.slicing?.slices,d,n)}}checkPresence(e,t,n){return e===void 0?(t.min>0&&this.issues.push(y(n,"Missing required property")),!1):S(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)&&!Gs(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 Hs)&&!this.isExpressionTrue(o,e,n)){this.issues.push(Wt(n,o));return}}}isExpressionTrue(e,t,n){try{let i=de(e.expression,[t],{context:t,resource:T(this.currentResource[this.currentResource.length-1]),rootResource:T(this.rootResource),ucum:T(Er)});return i.length===1&&i[0].value===!0}catch(i){return this.issues.push(Gt(n,"Error evaluating invariant expression",i,{fhirpath:e.expression})),!1}}validatePrimitiveType(e,t){let[n,i]=Ys(e);if(n){let{type:o,value:s}=n;if(!(o in wr)){this.issues.push(y(t,`Invalid JSON type: ${o} is not a valid FHIR type`));return}let a=wr[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&&Ct(i.value,this,ee("Element"),t)}validateString(e,t,n){if(!e.trim()){this.issues.push(y(n,"String must contain non-whitespace content"));return}let i=Qs[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")):Ws(t)&&!Number.isInteger(e)?this.issues.push(y(n,"Expected number to be an integer")):t===c.positiveInt&&e<=0?this.issues.push(y(n,"Expected number to be positive")):t===c.unsignedInt&&e<0&&this.issues.push(y(n,"Expected number to be non-negative"))}};function Ws(r){return r===c.integer||r===c.positiveInt||r===c.unsignedInt}function Gs(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!!k(r,i);return!1}function kr(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]&&kr(i[a],`${o}[${a}]`,t);else typeof i=="object"&&kr(i,o,t)}}function Wn(r,e){return e.pattern&&!Te(r,e.pattern)?!1:!(e.fixed&&!xe(r,e.fixed))}function zs(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(Wn(r,n))return!0;break;case"type":return!r||!i?.length?!1:i.some(o=>o.code===r.type)}return!1}function Js(r,e){if(e){for(let t of e.slices)if(e.discriminator.every(n=>Se(wt(r,n.path))?.some(i=>zs(i,n,t))))return t.name}}function Ys(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}]}0&&(module.exports={AccessPolicyInteraction,AndAtom,ArithemticOperatorAtom,AsAtom,BooleanInfixOperatorAtom,CPT,ClientStorage,ConcatAtom,ContainsAtom,ContentType,DEFAULT_ACCEPT,DEFAULT_SEARCH_COUNT,DotAtom,EmptySetAtom,EqualsAtom,EquivalentAtom,EventTarget,ExternalSecretSystems,FHIRCAST_EVENT_NAMES,FHIRCAST_EVENT_RESOURCES,FHIRCAST_EVENT_VERSION_REQUIRED,FHIRCAST_RESOURCE_TYPES,FhirFilterComparison,FhirFilterConnective,FhirFilterNegation,FhirPathAtom,FhircastConnection,FunctionAtom,Hl7Context,Hl7Field,Hl7Message,Hl7Segment,ICD10,ImpliesAtom,InAtom,IndexerAtom,InfixOperatorAtom,IsAtom,LOINC,LRUCache,LiteralAtom,MEDPLUM_VERSION,MedplumClient,MemoryStorage,NotEqualsAtom,NotEquivalentAtom,OAuthClientAssertionType,OAuthGrantType,OAuthTokenAuthMethod,OAuthTokenType,OperationOutcomeError,Operator,OperatorPrecedence,OrAtom,Parser,ParserBuilder,PrefixOperatorAtom,PropertyType,RXNORM,ReadablePromise,SNOMED,SearchParameterType,SymbolAtom,Tokenizer,TypedEventTarget,UCUM,UnaryOperatorAtom,UnionAtom,XorAtom,accepted,allOk,arrayBufferToBase64,arrayBufferToHex,arrayify,assertContextVersionOptional,assertOk,badRequest,booleanToTypedValue,buildTypeName,calculateAge,calculateAgeString,canReadResourceType,canWriteResource,canWriteResourceType,capitalize,checkForNull,compressElement,convertContainedResourcesToBundle,convertToTransactionBundle,crawlResource,createConstraintIssue,createDeferredPromise,createFhircastMessagePayload,createProcessingIssue,createReference,createStructureIssue,created,decodeBase64,deepClone,deepEquals,deepIncludes,encodeBase64,encryptSHA256,evalFhirPath,evalFhirPathTyped,fhirPathArrayEquals,fhirPathArrayEquivalent,fhirPathEquals,fhirPathEquivalent,fhirPathIs,fhirPathNot,fhirTypeToJsType,findObservationInterval,findObservationReferenceRange,findResourceByCode,forbidden,formatAddress,formatCodeableConcept,formatCoding,formatDate,formatDateTime,formatFamilyName,formatGivenName,formatHl7DateTime,formatHumanName,formatMoney,formatObservationValue,formatPeriod,formatQuantity,formatRange,formatSearchQuery,formatTime,formatTiming,generateId,getAllDataTypes,getAllQuestionnaireAnswers,getCodeBySystem,getDataType,getDateProperty,getDisplayString,getElementDefinition,getElementDefinitionTypeName,getExpressionForResourceType,getExpressionsForResourceType,getExtension,getExtensionValue,getIdentifier,getImageSrc,getNestedProperty,getPropertyDisplayName,getQuestionnaireAnswers,getRandomString,getReferenceString,getResourceTypes,getSearchParameter,getSearchParameterDetails,getSearchParameters,getStatus,getTypedPropertyValue,globalSchema,gone,indexSearchParameter,indexSearchParameterBundle,indexStructureDefinitionBundle,inflateBaseSchema,inflateElement,initFhirPathParserBuilder,isAccepted,isCompletedSubscriptionRequest,isContextVersionRequired,isCreated,isDataTypeLoaded,isEmpty,isFhircastResourceType,isGone,isJwt,isLowerCase,isMedplumAccessToken,isNotFound,isObject,isOk,isOperationOutcome,isPeriod,isProfileResource,isQuantity,isQuantityEquivalent,isReference,isResource,isResourceType,isResourceTypeSchema,isStringArray,isUUID,isValidDate,loadDataType,matchesAccessPolicy,matchesRange,matchesSearchRequest,normalizeErrorString,normalizeOperationOutcome,notFound,notModified,operationOutcomeIssueToString,operationOutcomeToString,parseCriteriaAsSearchRequest,parseFhirPath,parseFilterParameter,parseHl7DateTime,parseJWTPayload,parseMappingLanguage,parseParameter,parseReference,parseSearchDefinition,parseSearchRequest,parseSearchUrl,parseStructureDefinition,parseXFhirQuery,preciseEquals,preciseGreaterThan,preciseGreaterThanOrEquals,preciseLessThan,preciseLessThanOrEquals,preciseRound,projectAdminResourceTypes,protectedResourceTypes,removeDuplicates,reorderBundle,resolveId,satisfiedAccessPolicy,serializeFhircastSubscriptionRequest,serverError,setCodeBySystem,setIdentifier,singleton,sleep,splitN,streamToBuffer,stringify,stringifyTypedValue,subsetResource,toJsBoolean,toTypedValue,tooManyRequests,tryGetDataType,unauthorized,validateFhircastSubscriptionRequest,validateResource,validateResourceType,validationError});
42
+ }`.replace(/\s+/g," "),a=await this.graphql(s);mt(a.data.StructureDefinitionList);for(let u of a.data.SearchParameterList)yt(u)})());return this.setCacheEntry(n,o),o}requestProfileSchema(t){if(or(t))return Promise.resolve();let n=t+"-requestSchema",i=this.getCacheEntry(n,void 0);if(i)return i.value;let o=new P((async()=>{let s=await this.searchOne("StructureDefinition",{url:t,_sort:"-_lastUpdated"});s?mt([s],t):console.warn(`No StructureDefinition found for ${t}!`)})());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,s){let a=await this.createBinary(t,n,i,o,s);return{contentType:i,url:a.url,title:n}}createBinary(t,n,i,o,s){let a=this.fhirUrl("Binary");return n&&a.searchParams.set("_filename",n),o?this.uploadwithProgress(a,t,i,o,s):this.post(a,t,i,s)}uploadwithProgress(t,n,i,o,s){return new Promise((a,u)=>{let l=new XMLHttpRequest,f=()=>l.abort();s?.signal?.addEventListener("abort",f);let A=j=>{s?.signal?.removeEventListener("abort",f),j instanceof Error?u(j):a(j)};l.responseType="json",l.onabort=()=>A(new Error("Request aborted")),l.onerror=()=>A(new Error("Request error")),o&&(l.upload.onprogress=j=>o(j),l.upload.onload=j=>o(j)),l.onload=()=>{l.status>=200&&l.status<300?A(l.response):A(new p(Ae(l.response||l.statusText)))},l.open("POST",t),l.withCredentials=!0,l.setRequestHeader("Authorization","Bearer "+this.accessToken),l.setRequestHeader("Cache-Control","no-cache, no-store, max-age=0"),l.setRequestHeader("Content-Type",i),l.setRequestHeader("X-Medplum","extended"),l.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=G(t),a=t.subject),t.resourceType==="ServiceRequest"&&(s=t.encounter,a=t.subject),t.resourceType==="Patient"&&(a=G(t)),this.createResource({resourceType:"Communication",basedOn:[G(t)],encounter:s,subject:a,sender:o?G(o):void 0,sent:new Date().toISOString(),payload:[{contentString:n}]},i)}async updateResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");if(!t.id)throw new Error("Missing id");let i=await this.put(this.fhirUrl(t.resourceType,t.id),t,void 0,n);return i||(i=t),this.cacheResource(i),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),i}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,I.JSON,n)}graphql(t,n,i,o){return this.post(this.fhirUrl("$graphql"),{query:t,operationName:n,variables:i},I.JSON,o)}readResourceGraph(t,n,i,o){return this.get(`${this.fhirUrl(t,n)}/$graph?graph=${i}`,o)}pushToAgent(t,n,i,o,s,a){return this.post(this.fhirUrl("Agent",Ot(t),"$push"),{destination:ie(n),body:i,contentType:o,waitForResponse:s},I.FHIR_JSON,a)}getActiveLogin(){return this.storage.getObject("activeLogin")}async setActiveLogin(t){(!this.sessionDetails?.profile||ie(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=Rr(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(qn)&&(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:qn+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 Hn(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 P(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 p(Kt);let u=t.headers.get("content-location"),l=o.redirect??this.options.redirect;if(t.status===201&&u&&l==="follow")return this.request("GET",u,{...o,body:void 0});let f;if(a)try{f=await t.json()}catch(A){throw console.error("Error parsing response",t.status,A),A}else f=await t.text();if(t.status>=400)throw new p(Ae(f));return f}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(u){this.retryCatch(a,i,u)}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 u=await Hn(a);u&&(i=await this.fetchWithRetry(u,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 p(Ae(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&&!dt(a.response.outcome)?s.reject(new p(a.response.outcome)):s.resolve(a?.resource)}}addFetchOptionsDefaults(t){let n=t.headers;n||(n={},t.headers=n),n.Accept||(n.Accept=Wn),n["X-Medplum"]="extended",t.body&&!n["Content-Type"]&&(n["Content-Type"]=I.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=vt();sessionStorage.setItem("pkceState",t);let n=vt();sessionStorage.setItem("codeVerifier",n);let i=await Tr(n),o=_t(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??$n()),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??$n()),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=xr(t+":"+n)}async fhircastSubscribe(t,n){if(!(typeof t=="string"&&t!==""))throw new p(h("Invalid topic provided. Topic must be a valid string."));if(!(typeof n=="object"&&Array.isArray(n)&&n.length>0))throw new p(h("Invalid events provided. Events must be an array of event names containing at least one event."));let i={channelType:"websocket",mode:"subscribe",topic:t,events:n},s=(await this.post("/fhircast/STU3",bt(i),I.FORM_URL_ENCODED))["hub.channel.endpoint"];if(!s)throw new Error("Invalid response!");return i.endpoint=s,i}async fhircastUnsubscribe(t){if(!ze(t))throw new p(h("Invalid topic or subscriptionRequest. SubscriptionRequest must be an object."));if(!(t.endpoint&&typeof t.endpoint=="string"&&t.endpoint.startsWith("ws")))throw new p(h("Provided subscription request must have an endpoint in order to unsubscribe."));t.mode="unsubscribe",await this.post("/fhircast/STU3",bt(t),I.FORM_URL_ENCODED)}fhircastConnect(t){return new Ge(t)}async fhircastPublish(t,n,i,o){return vr(n)?this.post(`/fhircast/STU3/${t}`,Rt(t,n,i,o),I.JSON):(Er(n),this.post(`/fhircast/STU3/${t}`,Rt(t,n,i),I.JSON))}async fhircastGetContext(t){return this.get(`/fhircast/STU3/${t}`)}async invite(t,n){return this.post("admin/projects/"+t+"/invite",n)}async fetchTokens(t){let n={method:"POST",headers:{"Content-Type":I.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 p(w(a.error_description))}catch(a){throw new p(w("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(br(n)){let i=Pt(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 Os(){if(!globalThis.fetch)throw new Error("Fetch not available in this environment");return globalThis.fetch.bind(globalThis)}function $n(){return typeof window>"u"?"":window.location.protocol+"//"+window.location.host+"/"}function Qn(r){return r.endsWith("/")?r:r+"/"}function Ct(r,e){return new URL(e,r).toString()}async function Hn(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(Pe(n)&&n.issue?.[0]?.diagnostics)return n.issue[0].diagnostics}function Kn(r){let e=r.entry?.map(t=>t.resource)??[];return Object.assign(e,{bundle:r})}var Ds={aws_ssm_parameter_store:"aws_ssm_parameter_store"};var Ar="http://unitsofmeasure.org",Vs="http://loinc.org",Ns="http://snomed.info/sct",Fs="http://www.nlm.nih.gov/research/umls/rxnorm",_s="http://www.ama-assn.org/go/cpt",Ls="http://hl7.org/fhir/sid/icd-10";var Us=[...Qe,"->","<<",">>"];function Xn(r){return new K(r,$e,Us).tokenize()}var Cr=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(m.Arrow);e.condition=n.toString()}if(this.parser.peek()?.value==="check"){this.parser.consume("Symbol","check");let n=this.parser.consumeAndParse(m.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(m.As);if(t instanceof B)this.parseRuleTargetSymbol(e,t);else if(t instanceof q)this.parseRuleTargetFunction(e,t);else if(t instanceof V)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(m.Arrow);return[{name:e.name,variable:e.args.map(t=>t.name)}]}parseConceptMap(){for(;this.parser.peek()?.value!=="}";)this.parser.consume();this.parser.consume("}")}},Ms=ue().registerInfix("->",{precedence:m.Arrow}).registerInfix(";",{precedence:m.Semicolon});function Bs(r){let e=Ms.construct(Xn(r));return e.removeComments(),new Cr(e).parse()}var qs=[...Qe,"eq","ne","co"];function Zn(r){return new K(r,$e,qs,{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 js={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 $s(r){let e=js[r];if(!e)throw new p(w("Invalid operator: "+r));return e}var wr=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,$s(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}},Qs=ue();function Hs(r){let e=Qs.construct(Zn(r));return e.removeComments(),new wr(e).parse()}var W=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}},Ir=class r{constructor(e,t=new W){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()??"",u=t?.getField(12)?.toString()??"2.5.1";return new r([new fe(["MSH",this.context.getMsh2(),o,s,n,i,ei(e),"",this.buildAckMessageType(t),e.getTime().toString(),"P",u],this.context),new fe(["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 W("\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=>fe.parse(n,t)),t)}},fe=class r{constructor(e,t=new W){this.context=t,Nt(e)?this.fields=e.map(n=>ne.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 ne([[this.context.getMsh1()]],this.context);if(e===2)return new ne([[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 W){return new r(e.split(t.fieldSeparator).map(n=>ne.parse(n,t)),t)}},ne=class r{constructor(e,t=new W){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 W){return new r(e.split(t.repetitionSeparator).map(n=>n.split(t.componentSeparator)),t)}};function Ks(r,e){if(!r)return;let t=re(r.slice(0,4),0),n=re(r.slice(4,6),1)-1,i=re(r.slice(6,8),1),o=re(r.slice(8,10),0),s=re(r.slice(10,12),0),a=re(r.slice(12,14),0),u=0;r.includes(".")&&(u=re(r.slice(15,19),0));let l=new Date(Date.UTC(t,n,i,o,s,a,u)),f=Ws(r,e?.tzOffset);return f!==0&&(l=new Date(l.getTime()-f)),l.toISOString()}function re(r,e){let t=parseInt(r,10);return isNaN(t)?e:t}function Ws(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 ei(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 Gs(r){if(!r)throw new p(h("Resource type is null"));if(!ir(r))throw new p(h("Unknown resource type"))}function kr(r,e,t){r===null?t.push(y(e,"Invalid null value")):Array.isArray(r)?zs(r,e,t):typeof r=="object"&&Js(r,e,t)}function zs(r,e,t){for(let n=0;n<r.length;n++)r[n]===void 0?t.push(y(`${e}[${n}]`,"Invalid undefined value")):kr(r[n],`${e}[${n}]`,t)}function Js(r,e,t){for(let[n,i]of Object.entries(r))kr(i,`${e}${e?".":""}${n}`,t)}function Ys(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 wt(r,e,t,n){new Or(r,e,t,n).crawl()}var Or=class{constructor(e,t,n,i){this.rootResource=e,this.visitor=t,n?this.schema=n:this.schema=Z(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=F(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=It(e,t);this.visitor.visitProperty&&this.visitor.visitProperty(e,t,i,o,n);for(let s of o)if(s)for(let a of ve(s))this.crawlPropertyValue(a,i)}crawlPropertyValue(e,t){if(!Te(e.type.charAt(0))){let n=Z(e.type);this.crawlObject(e,n,t)}}};function It(r,e){if(e==="$this")return[r];let[t,...n]=e.split("."),i=[k(r,t)];for(let o of n){let s=[];for(let a of i)if(Array.isArray(a))for(let u of a)s.push(k(u,o));else a!==void 0&&s.push(k(a,o));i=s}return i}var Dr={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"},Xs={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:/.*/},Zs={"ele-1":!0};function ea(r,e){new Vr(r.resourceType,r,e).validate()}var Vr=class{constructor(e,t,n){this.issues=[],this.rootResource=t,this.currentResource=[],n?this.schema=ft(n):this.schema=Z(e)}validate(){let e=this.rootResource.resourceType;if(!e)throw new p(h("Missing resource type"));Nr(this.rootResource,e,this.issues),wt(this.rootResource,this,this.schema);let t=this.issues;if(this.issues=[],t.length>0)throw new p({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 u;if(s.isArray){if(!Array.isArray(a)){this.issues.push(y(n,"Expected array of values for property"));return}u=a}else{if(Array.isArray(a)){this.issues.push(y(n,"Expected single value for property"));return}u=[a]}(u.length<s.min||u.length>s.max)&&this.issues.push(y(n,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${u.length}`)),ti(a,s)||this.issues.push(y(n,"Value did not match expected pattern"));let l=s.slicing?Object.fromEntries(s.slicing.slices.map(f=>[f.name,0])):void 0;for(let f of u){this.constraintsCheck(f,s,n),this.checkPropertyValue(f,n);let A=na(f,s.slicing);A&&l&&(l[A]+=1)}this.validateSlices(s.slicing?.slices,l,n)}}checkPresence(e,t,n){return e===void 0?(t.min>0&&this.issues.push(y(n,"Missing required property")),!1):E(e)?(this.issues.push(y(n,"Invalid empty value")),!1):!0}checkPropertyValue(e,t){Te(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)&&!ra(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 Zs)&&!this.isExpressionTrue(o,e,n)){this.issues.push(zt(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(Ar)});return i.length===1&&i[0].value===!0}catch(i){return this.issues.push(Jt(n,"Error evaluating invariant expression",i,{fhirpath:e.expression})),!1}}validatePrimitiveType(e,t){let[n,i]=ia(e);if(n){let{type:o,value:s}=n;if(!(o in Dr)){this.issues.push(y(t,`Invalid JSON type: ${o} is not a valid FHIR type`));return}let a=Dr[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&&wt(i.value,this,Z("Element"),t)}validateString(e,t,n){if(!e.trim()){this.issues.push(y(n,"String must contain non-whitespace content"));return}let i=Xs[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")):ta(t)&&!Number.isInteger(e)?this.issues.push(y(n,"Expected number to be an integer")):t===c.positiveInt&&e<=0?this.issues.push(y(n,"Expected number to be positive")):t===c.unsignedInt&&e<0&&this.issues.push(y(n,"Expected number to be non-negative"))}};function ta(r){return r===c.integer||r===c.positiveInt||r===c.unsignedInt}function ra(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!!k(r,i);return!1}function Nr(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]&&Nr(i[a],`${o}[${a}]`,t);else typeof i=="object"&&Nr(i,o,t)}}function ti(r,e){return e.pattern&&!xe(r,e.pattern)?!1:!(e.fixed&&!ge(r,e.fixed))}function ri(r,e,t,n){if(Array.isArray(r))return!1;let i=(n??t.elements)[e.path],o=t.type;switch(e.type){case"value":case"pattern":if(!r||!i)return!1;if(ti(r,i))return!0;break;case"type":return!r||!o?.length?!1:o.some(s=>s.code===r.type)}return!1}function na(r,e){if(e){for(let t of e.slices)if(e.discriminator.every(n=>ve(It(r,n.path))?.some(i=>ri(i,n,t))))return t.name}}function ia(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}]}0&&(module.exports={AccessPolicyInteraction,AndAtom,ArithemticOperatorAtom,AsAtom,BooleanInfixOperatorAtom,CPT,ClientStorage,ConcatAtom,ContainsAtom,ContentType,DEFAULT_ACCEPT,DEFAULT_SEARCH_COUNT,DotAtom,EmptySetAtom,EqualsAtom,EquivalentAtom,EventTarget,ExternalSecretSystems,FHIRCAST_EVENT_NAMES,FHIRCAST_EVENT_RESOURCES,FHIRCAST_EVENT_VERSION_REQUIRED,FHIRCAST_RESOURCE_TYPES,FhirFilterComparison,FhirFilterConnective,FhirFilterNegation,FhirPathAtom,FhircastConnection,FunctionAtom,Hl7Context,Hl7Field,Hl7Message,Hl7Segment,ICD10,ImpliesAtom,InAtom,IndexerAtom,InfixOperatorAtom,IsAtom,LOINC,LRUCache,LiteralAtom,MEDPLUM_VERSION,MedplumClient,MemoryStorage,NotEqualsAtom,NotEquivalentAtom,OAuthClientAssertionType,OAuthGrantType,OAuthTokenAuthMethod,OAuthTokenType,OperationOutcomeError,Operator,OperatorPrecedence,OrAtom,Parser,ParserBuilder,PrefixOperatorAtom,PropertyType,RXNORM,ReadablePromise,SNOMED,SearchParameterType,SymbolAtom,Tokenizer,TypedEventTarget,UCUM,UnaryOperatorAtom,UnionAtom,XorAtom,accepted,allOk,arrayBufferToBase64,arrayBufferToHex,arrayify,assertContextVersionOptional,assertOk,badRequest,booleanToTypedValue,buildTypeName,calculateAge,calculateAgeString,canReadResourceType,canWriteResource,canWriteResourceType,capitalize,checkForNull,compressElement,convertContainedResourcesToBundle,convertToTransactionBundle,crawlResource,createConstraintIssue,createDeferredPromise,createFhircastMessagePayload,createProcessingIssue,createReference,createStructureIssue,created,decodeBase64,deepClone,deepEquals,deepIncludes,encodeBase64,encryptSHA256,evalFhirPath,evalFhirPathTyped,fhirPathArrayEquals,fhirPathArrayEquivalent,fhirPathEquals,fhirPathEquivalent,fhirPathIs,fhirPathNot,fhirTypeToJsType,findObservationInterval,findObservationReferenceRange,findResourceByCode,forbidden,formatAddress,formatCodeableConcept,formatCoding,formatDate,formatDateTime,formatFamilyName,formatGivenName,formatHl7DateTime,formatHumanName,formatMoney,formatObservationValue,formatPeriod,formatQuantity,formatRange,formatSearchQuery,formatTime,formatTiming,generateId,getAllDataTypes,getAllQuestionnaireAnswers,getCodeBySystem,getDataType,getDateProperty,getDisplayString,getElementDefinition,getElementDefinitionFromElements,getElementDefinitionTypeName,getExpressionForResourceType,getExpressionsForResourceType,getExtension,getExtensionValue,getIdentifier,getImageSrc,getNestedProperty,getPathDisplayName,getPropertyDisplayName,getQuestionnaireAnswers,getRandomString,getReferenceString,getResourceTypes,getSearchParameter,getSearchParameterDetails,getSearchParameters,getStatus,getTypedPropertyValue,getTypedPropertyValueWithSchema,globalSchema,gone,indexSearchParameter,indexSearchParameterBundle,indexStructureDefinitionBundle,inflateBaseSchema,inflateElement,initFhirPathParserBuilder,isAccepted,isCompletedSubscriptionRequest,isContextVersionRequired,isCreated,isDataTypeLoaded,isEmpty,isFhircastResourceType,isGone,isJwt,isLowerCase,isMedplumAccessToken,isNotFound,isObject,isOk,isOperationOutcome,isPeriod,isProfileLoaded,isProfileResource,isQuantity,isQuantityEquivalent,isReference,isResource,isResourceType,isResourceTypeSchema,isStringArray,isUUID,isValidDate,loadDataType,matchDiscriminant,matchesAccessPolicy,matchesRange,matchesSearchRequest,normalizeErrorString,normalizeOperationOutcome,notFound,notModified,operationOutcomeIssueToString,operationOutcomeToString,parseCriteriaAsSearchRequest,parseFhirPath,parseFilterParameter,parseHl7DateTime,parseJWTPayload,parseMappingLanguage,parseParameter,parseReference,parseSearchDefinition,parseSearchRequest,parseSearchUrl,parseStructureDefinition,parseXFhirQuery,preciseEquals,preciseGreaterThan,preciseGreaterThanOrEquals,preciseLessThan,preciseLessThanOrEquals,preciseRound,projectAdminResourceTypes,protectedResourceTypes,removeDuplicates,reorderBundle,resolveId,satisfiedAccessPolicy,serializeFhircastSubscriptionRequest,serverError,setCodeBySystem,setIdentifier,singleton,sleep,splitN,streamToBuffer,stringify,stringifyTypedValue,subsetResource,toJsBoolean,toTypedValue,tooManyRequests,tryGetDataType,tryGetProfile,unauthorized,validateFhircastSubscriptionRequest,validateResource,validateResourceType,validationError});
41
43
  //# sourceMappingURL=index.cjs.map