@medplum/core 4.5.0 → 4.5.1

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,7 +1,7 @@
1
1
  "use strict";var jr=Object.defineProperty;var us=Object.getOwnPropertyDescriptor;var ls=Object.getOwnPropertyNames;var ps=Object.prototype.hasOwnProperty;var ds=(r,e)=>{for(var t in e)jr(r,t,{get:e[t],enumerable:!0})},fs=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of ls(e))!ps.call(r,i)&&i!==t&&jr(r,i,{get:()=>e[i],enumerable:!(n=us(e,i))||n.enumerable});return r};var hs=r=>fs(jr({},"__esModule",{value:!0}),r);var Kl={};ds(Kl,{AccessPolicyInteraction:()=>Se,AckCode:()=>Cl,AndAtom:()=>Rt,ArithemticOperatorAtom:()=>V,AsAtom:()=>pe,BooleanInfixOperatorAtom:()=>C,CPT:()=>xs,ClientStorage:()=>Xe,ConcatAtom:()=>gt,ContainsAtom:()=>xt,ContentType:()=>A,DEFAULT_ACCEPT:()=>Lo,DEFAULT_MAX_SEARCH_COUNT:()=>Dc,DEFAULT_SEARCH_COUNT:()=>Vc,DataSampler:()=>kr,DotAtom:()=>le,EmptySetAtom:()=>mt,EqualsAtom:()=>Tt,EquivalentAtom:()=>bt,EventTarget:()=>Er,ExternalSecretSystems:()=>Mu,FHIRCAST_EVENT_NAMES:()=>Rr,FHIRCAST_EVENT_RESOURCES:()=>Po,FHIRCAST_EVENT_VERSION_REQUIRED:()=>Cr,FHIRCAST_RESOURCE_TYPES:()=>Co,FhirFilterComparison:()=>jt,FhirFilterConnective:()=>Gt,FhirFilterNegation:()=>$t,FhirPathAtom:()=>Ve,FhircastConnection:()=>Dt,FileBuilder:()=>li,FunctionAtom:()=>Z,HTTP_HL7_ORG:()=>Gr,HTTP_TERMINOLOGY_HL7_ORG:()=>Ss,Hl7Context:()=>fe,Hl7Field:()=>Q,Hl7Message:()=>di,Hl7Segment:()=>et,ICD10:()=>vs,ImpliesAtom:()=>wt,InAtom:()=>vt,IndexerAtom:()=>Te,InfixOperatorAtom:()=>re,IsAtom:()=>ve,LOINC:()=>ms,LRUCache:()=>Re,LiteralAtom:()=>F,LogLevel:()=>Fe,LogLevelNames:()=>ns,Logger:()=>fi,MEDPLUM_CLI_CLIENT_ID:()=>bu,MEDPLUM_RELEASES_URL:()=>ss,MEDPLUM_VERSION:()=>Ir,MedplumClient:()=>Ut,MedplumKeyValueClient:()=>Lt,MemoryStorage:()=>Ar,MockAsyncClientStorage:()=>Yn,NDC:()=>Ts,NotEqualsAtom:()=>St,NotEquivalentAtom:()=>Et,OAuthClientAssertionType:()=>No,OAuthGrantType:()=>_e,OAuthTokenAuthMethod:()=>Ou,OAuthTokenType:()=>Fo,OperationOutcomeError:()=>d,Operator:()=>f,OperatorPrecedence:()=>g,OrAtom:()=>Ct,Parser:()=>Qt,ParserBuilder:()=>rt,PrefixOperatorAtom:()=>tt,PropertyType:()=>l,RXNORM:()=>gs,ReadablePromise:()=>M,ReconnectingWebSocket:()=>Ft,SNOMED:()=>ys,SearchParameterType:()=>te,SubscriptionEmitter:()=>Ze,SubscriptionManager:()=>Nt,SymbolAtom:()=>j,Tokenizer:()=>de,TransformMapCollection:()=>Lr,TypedEventTarget:()=>H,UCUM:()=>$r,UnaryOperatorAtom:()=>yt,UnionAtom:()=>xe,VALID_HOSTNAME_REGEX:()=>Xi,XorAtom:()=>Pt,accepted:()=>Is,accessPolicySupportsInteraction:()=>jn,addProfileToResource:()=>$a,allOk:()=>bs,append:()=>ae,applyDefaultValuesToElement:()=>Gu,applyDefaultValuesToResource:()=>$u,applyFixedOrPatternValue:()=>Wt,arrayBufferToBase64:()=>On,arrayBufferToHex:()=>An,arrayify:()=>Be,assert:()=>ko,assertContextVersionOptional:()=>Qn,assertOk:()=>js,assertReleaseManifest:()=>as,badRequest:()=>b,booleanToTypedValue:()=>h,buildElementsContext:()=>Dr,buildTypeName:()=>oo,businessRule:()=>Ms,calculateAge:()=>pt,calculateAgeString:()=>ya,canReadResourceType:()=>ru,canWriteResource:()=>iu,canWriteResourceType:()=>nu,capitalize:()=>I,checkForNull:()=>hi,checkIfValidMedplumVersion:()=>Ql,clearReleaseCache:()=>Hl,compressElement:()=>Gs,concatUrls:()=>W,conceptMapTranslate:()=>si,conflict:()=>ks,convertContainedResourcesToBundle:()=>du,convertToSearchableDates:()=>Nn,convertToSearchableNumbers:()=>Cc,convertToSearchableQuantities:()=>Pc,convertToSearchableReferences:()=>Bn,convertToSearchableStrings:()=>Un,convertToSearchableTokens:()=>Wn,convertToSearchableUris:()=>wc,convertToTransactionBundle:()=>bo,crawlTypedValue:()=>ir,crawlTypedValueAsync:()=>Zs,createConstraintIssue:()=>rn,createFhircastMessagePayload:()=>wr,createOperationOutcomeIssue:()=>he,createProcessingIssue:()=>nn,createReference:()=>me,createStructureIssue:()=>T,created:()=>Es,decodeBase64:()=>So,decodeBase64Url:()=>$n,deepClone:()=>ge,deepEquals:()=>oe,deepIncludes:()=>We,encodeBase64:()=>Vt,encodeBase64Url:()=>cu,encryptSHA256:()=>Gn,ensureNoLeadingSlash:()=>Ki,ensureTrailingSlash:()=>yr,escapeHtml:()=>za,evalFhirPath:()=>Rc,evalFhirPathTyped:()=>E,evalSqlOnFhir:()=>Wl,expandSampledData:()=>ti,expandSampledObservation:()=>Nu,fetchLatestVersionString:()=>zl,fetchVersionManifest:()=>qr,fhirPathArrayEquals:()=>Tn,fhirPathArrayEquivalent:()=>ur,fhirPathArrayNotEquals:()=>Sn,fhirPathEquals:()=>qe,fhirPathEquivalent:()=>Fi,fhirPathIs:()=>ct,fhirPathNot:()=>vn,fhirTypeToJsType:()=>or,findCodeBySystem:()=>Oa,findObservationInterval:()=>Va,findObservationReferenceRange:()=>Da,findObservationReferenceRanges:()=>Hi,findResourceByCode:()=>Wa,findResourceInBundle:()=>fu,flatMapFilter:()=>Qa,forbidden:()=>Cs,formatAddress:()=>Zi,formatCodeableConcept:()=>je,formatCoding:()=>Ln,formatDate:()=>Xa,formatDateTime:()=>gr,formatFamilyName:()=>Ka,formatGivenName:()=>Ja,formatHl7DateTime:()=>rs,formatHumanName:()=>Ge,formatMoney:()=>oc,formatObservationValue:()=>to,formatPeriod:()=>Ya,formatQuantity:()=>ce,formatRange:()=>ic,formatReferenceString:()=>Yi,formatSearchQuery:()=>jc,formatTime:()=>eo,formatTiming:()=>rc,generateId:()=>be,getAllDataTypes:()=>un,getAllQuestionnaireAnswers:()=>xa,getBuffer:()=>Sr,getCodeBySystem:()=>dr,getDataType:()=>ne,getDateProperty:()=>ma,getDefaultValuesForNewSliceEntry:()=>Hu,getDisplayString:()=>Bi,getElementDefinition:()=>lt,getElementDefinitionFromElements:()=>ao,getElementDefinitionTypeName:()=>Zt,getExpressionForResourceType:()=>Ul,getExpressionsForResourceType:()=>mi,getExtension:()=>ie,getExtensionValue:()=>Ta,getIdentifier:()=>ji,getImageSrc:()=>ha,getNestedProperty:()=>Ae,getParsedExpressionForResourceType:()=>os,getPathDifference:()=>se,getPathDisplayName:()=>dc,getPropertyDisplayName:()=>so,getQueryString:()=>Mn,getQuestionnaireAnswers:()=>ga,getRandomString:()=>br,getReferenceString:()=>D,getResourceTypes:()=>uc,getSearchParameter:()=>pc,getSearchParameterDetails:()=>Dl,getSearchParameters:()=>lc,getStatus:()=>qs,getTypedPropertyValue:()=>P,getTypedPropertyValueWithPath:()=>ki,getTypedPropertyValueWithSchema:()=>_i,getTypedPropertyValueWithoutSchema:()=>Li,getValueSliceName:()=>ni,getWebSocketUrl:()=>Dn,getWindow:()=>au,globalSchema:()=>L,gone:()=>Ps,indexConceptMapCodings:()=>qo,indexDefaultSearchParameters:()=>hn,indexSearchParameter:()=>vr,indexSearchParameterBundle:()=>cc,indexStructureDefinitionBundle:()=>tr,inflateBaseSchema:()=>on,inflateElement:()=>Ri,initFhirPathParserBuilder:()=>Qe,isAccepted:()=>Ls,isBrowserEnvironment:()=>N,isCodeableConcept:()=>pr,isCoding:()=>lr,isCompletedSubscriptionRequest:()=>zn,isComplexTypeCode:()=>fr,isConflict:()=>Us,isContextVersionRequired:()=>Hn,isCreated:()=>_s,isDataTypeLoaded:()=>ln,isDateString:()=>bn,isDateTimeString:()=>Oe,isEmpty:()=>S,isError:()=>Xt,isFhirCriteriaMet:()=>Vo,isFhircastResourceType:()=>wo,isGone:()=>Bs,isJwt:()=>Jn,isLowerCase:()=>Ia,isMedplumAccessToken:()=>Kn,isNodeEnvironment:()=>su,isNotFound:()=>Ns,isObject:()=>R,isOk:()=>Yt,isOperationOutcome:()=>nt,isPeriod:()=>En,isPopulated:()=>K,isPrimitiveType:()=>ot,isProfileLoaded:()=>dn,isProfileResource:()=>Ui,isQuantity:()=>w,isQuantityEquivalent:()=>Rn,isRedirect:()=>Fs,isReference:()=>B,isResource:()=>O,isResourceType:()=>pn,isResourceTypeSchema:()=>nr,isResourceWithId:()=>$e,isSliceDefinitionWithTypes:()=>ri,isString:()=>ft,isStringArray:()=>wn,isTextObject:()=>$i,isTypedValue:()=>mc,isUUID:()=>Aa,isUnauthenticated:()=>Ws,isValidDate:()=>xr,isValidHostname:()=>ja,isValidMedplumSemver:()=>cs,lazy:()=>Vn,loadDataType:()=>rr,locationUtils:()=>ee,mapByIdentifier:()=>Ga,matchDiscriminant:()=>ar,matchesRange:()=>kn,matchesSearchRequest:()=>kt,multipleMatches:()=>As,normalizeArrayBufferView:()=>In,normalizeCreateBinaryOptions:()=>ei,normalizeCreatePdfOptions:()=>Uo,normalizeErrorString:()=>Pe,normalizeOperationOutcome:()=>it,notFound:()=>Yr,notModified:()=>Rs,operationOutcomeIssueToString:()=>Ei,operationOutcomeToString:()=>tn,parseFhirPath:()=>It,parseFilterParameter:()=>Rl,parseHl7DateTime:()=>wl,parseJWTPayload:()=>_t,parseLogLevel:()=>Ol,parseMappingLanguage:()=>el,parseParameter:()=>mo,parseReference:()=>pa,parseSearchRequest:()=>ze,parseStructureDefinition:()=>er,parseXFhirQuery:()=>qc,preciseEquals:()=>Na,preciseGreaterThan:()=>Ba,preciseGreaterThanOrEquals:()=>Ji,preciseLessThan:()=>Ua,preciseLessThanOrEquals:()=>zi,preciseRound:()=>Fa,preconditionFailed:()=>ws,projectAdminResourceTypes:()=>go,protectedResourceTypes:()=>yo,readInteractions:()=>xo,redirect:()=>Ds,removeDuplicates:()=>at,removeProfileFromResource:()=>Ha,reorderBundle:()=>Eo,resolveId:()=>ye,resourceMatchesSubscriptionCriteria:()=>Tu,satisfiedAccessPolicy:()=>vo,serializeError:()=>Ht,serializeFhircastSubscriptionRequest:()=>Pr,serverError:()=>en,serverTimeout:()=>Vs,setCodeBySystem:()=>ka,setIdentifier:()=>va,singleton:()=>G,singularize:()=>qa,sleep:()=>hr,sortStringArray:()=>ht,splitN:()=>mr,splitSearchOnComma:()=>Je,streamToBuffer:()=>Bl,stringify:()=>dt,stringifyTypedValue:()=>Fn,structureMapTransform:()=>tl,subsetResource:()=>zs,summarizeObservations:()=>_u,toJsBoolean:()=>_,toPeriod:()=>ut,toTypedValue:()=>x,tooManyRequests:()=>Os,trimTrailingEmptyElements:()=>Ea,tryGetDataType:()=>Ue,tryGetJwtExpiration:()=>Xn,tryGetProfile:()=>fn,typedValueToString:()=>_n,unauthorized:()=>Ce,unauthorizedTokenAudience:()=>Kt,unauthorizedTokenExpired:()=>Zr,validateFhircastSubscriptionRequest:()=>Mt,validateResource:()=>na,validateResourceType:()=>Il,validateTypedValue:()=>ia,validationError:()=>y,validationRegexes:()=>st,warnIfNewerVersionAvailable:()=>Jl,wordWrap:()=>es});module.exports=hs(Kl);var tt=class{constructor(e,t){this.operator=e,this.child=t}toString(){return`${this.operator}(${this.child.toString()})`}},re=class{constructor(e,t,n){this.operator=e,this.left=t,this.right=n}toString(){return`(${this.left.toString()} ${this.operator} ${this.right.toString()})`}},rt=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 Qt(e,this.prefixParselets,this.infixParselets)}},Qt=class{constructor(e,t,n){this.tokens=e,this.prefixParselets=t,this.infixParselets=n}hasMore(){return this.tokens.length>0}match(e){return this.peek()?.id!==e?!1:(this.consume(),!0)}consumeAndParse(e=1/0){let t=this.consume(),n=this.prefixParselets[t.id];if(!n)throw Error(`Parse error at "${t.value}" (line ${t.line}, column ${t.column}). No matching prefix parselet.`);let i=n.parse(this,t);for(;e>this.getPrecedence();){let o=this.consume();i=this.getInfixParselet(o).parse(this,i,o)}return i}getPrecedence(){let e=this.peek();if(!e)return 1/0;let t=this.getInfixParselet(e);return t?t.precedence:1/0}consume(e,t){if(!this.tokens.length)throw Error("Cant consume unknown more tokens.");if(e&&this.peek()?.id!==e){let n=this.peek();throw Error(`Expected ${e} but got "${n.id}" (${n.value}) at line ${n.line} column ${n.column}.`)}if(t&&this.peek()?.value!==t){let n=this.peek();throw Error(`Expected "${t}" but got "${n.value}" at line ${n.line} column ${n.column}.`)}return this.tokens.shift()}peek(){return this.tokens.length>0?this.tokens[0]:void 0}removeComments(){this.tokens=this.tokens.filter(e=>e.id!=="Comment")}getInfixParselet(e){return this.infixParselets[e.id==="Symbol"?e.value:e.id]}};var Re=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 $r="http://unitsofmeasure.org",ms="http://loinc.org",ys="http://snomed.info/sct",gs="http://www.nlm.nih.gov/research/umls/rxnorm",xs="http://www.ama-assn.org/go/cpt",vs="http://hl7.org/fhir/sid/icd-10",Ts="http://hl7.org/fhir/sid/ndc",Gr="http://hl7.org",Ss="http://terminology.hl7.org";var zt="created",Hr="gone",Qr="not-modified",zr="found",Jr="not-found",Kr="conflict",Xr="unauthorized",gi="forbidden",xi="precondition-failed",vi="multiple-matches",Ti="too-many-requests",Jt="accepted",Si="server-timeout",bi="business-rule",bs={resourceType:"OperationOutcome",id:"ok",issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},Es={resourceType:"OperationOutcome",id:zt,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},Rs={resourceType:"OperationOutcome",id:Qr,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},Yr={resourceType:"OperationOutcome",id:Jr,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},Ce={resourceType:"OperationOutcome",id:Xr,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},Zr={...Ce,issue:[...Ce.issue,{severity:"error",code:"expired",details:{text:"Token expired"}}]},Kt={...Ce,issue:[...Ce.issue,{severity:"error",code:"invalid",details:{text:"Token not issued for this audience"}}]},Cs={resourceType:"OperationOutcome",id:gi,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},Ps={resourceType:"OperationOutcome",id:Hr,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},ws={resourceType:"OperationOutcome",id:xi,issue:[{severity:"error",code:"processing",details:{text:"Precondition Failed"}}]},As={resourceType:"OperationOutcome",id:vi,issue:[{severity:"error",code:"multiple-matches",details:{text:"Multiple resources found matching condition"}}]},Os={resourceType:"OperationOutcome",id:Ti,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function Is(r){return{resourceType:"OperationOutcome",id:Jt,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:r}]}}function b(r,e){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:r},...e?{expression:[e]}:void 0}]}}function ks(r,e){return{resourceType:"OperationOutcome",id:Kr,issue:[{severity:"error",code:"conflict",details:{coding:e?[{code:e}]:void 0,text:r}}]}}function y(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"structure",details:{text:r}}]}}function en(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:r.toString()}]}}function Vs(r){return{resourceType:"OperationOutcome",id:Si,issue:[{severity:"error",code:"timeout",details:{text:r??"Server timeout"}}]}}function Ds(r){let e=r.toString();return{resourceType:"OperationOutcome",id:zr,issue:[{severity:"information",code:"informational",details:{coding:[{system:"urn:ietf:rfc:3986",code:e}],text:"Redirect to "+e}}]}}function Ms(r,e){return{resourceType:"OperationOutcome",id:bi,issue:[{severity:"error",code:"business-rule",details:{id:r,text:e}}]}}function Xt(r){return!r||typeof r!="object"?!1:r instanceof Error||typeof DOMException<"u"&&r instanceof DOMException?!0:Object.prototype.toString.call(r)==="[object Error]"}function nt(r){return typeof r=="object"&&r!==null&&r.resourceType==="OperationOutcome"}function Yt(r){return r.id==="ok"||r.id===zt||r.id===Qr||r.id===Jt}function _s(r){return r.id===zt}function Ls(r){return r.id===Jt}function Fs(r){return r.id===zr}function Ns(r){return r.id===Jr}function Us(r){return r.id===Kr}function Bs(r){return r.id===Hr}function Ws(r){return r.id===Xr}function qs(r){switch(r.id){case"ok":return 200;case zt:return 201;case Jt:return 202;case zr:return 302;case Qr:return 304;case Xr:return 401;case gi:return 403;case Jr:return 404;case Kr:return 409;case Hr:return 410;case xi:case vi:return 412;case bi:return 422;case Ti:return 429;case Si:return 504;default:return r.issue?.[0]?.code==="exception"?500:400}}function js(r,e){if(!Yt(r)||e===void 0)throw new d(r)}var d=class extends Error{constructor(e,t){super(tn(e)),this.outcome=e,this.cause=t}};function it(r){return r instanceof d?r.outcome:nt(r)?r:b(Pe(r))}function Pe(r){return r?typeof r=="string"?r:Xt(r)?r.message:nt(r)?tn(r):typeof r=="object"&&"code"in r&&typeof r.code=="string"?r.code:JSON.stringify(r):"Unknown error"}function tn(r){let e=r.issue?.map(Ei)??[];return e.length>0?e.join("; "):"Unknown error"}function Ei(r){let e;return r.details?.text?r.diagnostics?e=`${r.details.text} (${r.diagnostics})`:e=r.details.text:r.diagnostics?e=r.diagnostics:e="Unknown error",r.expression?.length&&(e+=` (${r.expression.join(", ")})`),e}function he(r,e,t,n,i){let o={severity:r,code:e,details:{text:t},expression:[n]};return i&&(o.diagnostics=JSON.stringify(i)),o}function T(r,e){return he("error","structure",e,r)}function rn(r,e){return he("error","invariant",`Constraint ${e.key} not met: ${e.description}`,r,{fhirpath:e.expression})}function nn(r,e,t,n){return he("error","processing",e,r,{...n,error:t})}var $s={"http://hl7.org/fhirpath/System.String":"string"};function Gs(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:$s[t.code]??t.code})),e}function Ri(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 on(r){let e=Object.create(null);for(let[t,n]of Object.entries(r))e[t]={name:t,type:t,path:t,elements:Object.fromEntries(Object.entries(n.elements).map(([i,o])=>[i,Ri(i,o)])),constraints:[],innerTypes:[]};return e}var Ci={Element:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]}}},BackboneElement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]}}},Address:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"code"}]},text:{type:[{code:"string"}]},line:{max:9007199254740991,type:[{code:"string"}]},city:{type:[{code:"string"}]},district:{type:[{code:"string"}]},state:{type:[{code:"string"}]},postalCode:{type:[{code:"string"}]},country:{type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Age:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Annotation:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"author[x]":{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Organization"]},{code:"string"}]},time:{type:[{code:"dateTime"}]},text:{min:1,type:[{code:"markdown"}]}}},Attachment:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},contentType:{type:[{code:"code"}]},language:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]},url:{type:[{code:"url"}]},size:{type:[{code:"unsignedInt"}]},hash:{type:[{code:"base64Binary"}]},title:{type:[{code:"string"}]},creation:{type:[{code:"dateTime"}]}}},CodeableConcept:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},coding:{max:9007199254740991,type:[{code:"Coding"}]},text:{type:[{code:"string"}]}}},Coding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"uri"}]},version:{type:[{code:"string"}]},code:{type:[{code:"code"}]},display:{type:[{code:"string"}]},userSelected:{type:[{code:"boolean"}]}}},ContactDetail:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"string"}]},telecom:{max:9007199254740991,type:[{code:"ContactPoint"}]}}},ContactPoint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"code"}]},value:{type:[{code:"string"}]},use:{type:[{code:"code"}]},rank:{type:[{code:"positiveInt"}]},period:{type:[{code:"Period"}]}}},Contributor:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{min:1,type:[{code:"string"}]},contact:{max:9007199254740991,type:[{code:"ContactDetail"}]}}},Count:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},DataRequirement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},"subject[x]":{type:[{code:"CodeableConcept"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Group"]}]},mustSupport:{max:9007199254740991,type:[{code:"string"}]},codeFilter:{max:9007199254740991,type:[{code:"DataRequirementCodeFilter"}]},dateFilter:{max:9007199254740991,type:[{code:"DataRequirementDateFilter"}]},limit:{type:[{code:"positiveInt"}]},sort:{max:9007199254740991,type:[{code:"DataRequirementSort"}]}}},DataRequirementCodeFilter:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]},code:{max:9007199254740991,type:[{code:"Coding"}]}}},DataRequirementDateFilter:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},"value[x]":{type:[{code:"dateTime"},{code:"Period"},{code:"Duration"}]}}},DataRequirementSort:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},direction:{min:1,type:[{code:"code"}]}}},Distance:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Dosage:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},sequence:{type:[{code:"integer"}]},text:{type:[{code:"string"}]},additionalInstruction:{max:9007199254740991,type:[{code:"CodeableConcept"}]},patientInstruction:{type:[{code:"string"}]},timing:{type:[{code:"Timing"}]},"asNeeded[x]":{type:[{code:"boolean"},{code:"CodeableConcept"}]},site:{type:[{code:"CodeableConcept"}]},route:{type:[{code:"CodeableConcept"}]},method:{type:[{code:"CodeableConcept"}]},doseAndRate:{max:9007199254740991,type:[{code:"DosageDoseAndRate"}]},maxDosePerPeriod:{type:[{code:"Ratio"}]},maxDosePerAdministration:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},maxDosePerLifetime:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},DosageDoseAndRate:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{type:[{code:"CodeableConcept"}]},"dose[x]":{type:[{code:"Range"},{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},"rate[x]":{type:[{code:"Ratio"},{code:"Range"},{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},Duration:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},ElementDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},representation:{max:9007199254740991,type:[{code:"code"}]},sliceName:{type:[{code:"string"}]},sliceIsConstraining:{type:[{code:"boolean"}]},label:{type:[{code:"string"}]},code:{max:9007199254740991,type:[{code:"Coding"}]},slicing:{type:[{code:"ElementDefinitionSlicing"}]},short:{type:[{code:"string"}]},definition:{type:[{code:"markdown"}]},comment:{type:[{code:"markdown"}]},requirements:{type:[{code:"markdown"}]},alias:{max:9007199254740991,type:[{code:"string"}]},min:{type:[{code:"unsignedInt"}]},max:{type:[{code:"string"}]},base:{type:[{code:"ElementDefinitionBase"}]},contentReference:{type:[{code:"uri"}]},type:{max:9007199254740991,type:[{code:"ElementDefinitionType"}]},"defaultValue[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},meaningWhenMissing:{type:[{code:"markdown"}]},orderMeaning:{type:[{code:"string"}]},"fixed[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},"pattern[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},example:{max:9007199254740991,type:[{code:"ElementDefinitionExample"}]},"minValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},"maxValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},maxLength:{type:[{code:"integer"}]},condition:{max:9007199254740991,type:[{code:"id"}]},constraint:{max:9007199254740991,type:[{code:"ElementDefinitionConstraint"}]},mustSupport:{type:[{code:"boolean"}]},isModifier:{type:[{code:"boolean"}]},isModifierReason:{type:[{code:"string"}]},isSummary:{type:[{code:"boolean"}]},binding:{type:[{code:"ElementDefinitionBinding"}]},mapping:{max:9007199254740991,type:[{code:"ElementDefinitionMapping"}]}}},ElementDefinitionSlicingDiscriminator:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},path:{min:1,type:[{code:"string"}]}}},ElementDefinitionSlicing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},discriminator:{max:9007199254740991,type:[{code:"ElementDefinitionSlicingDiscriminator"}]},description:{type:[{code:"string"}]},ordered:{type:[{code:"boolean"}]},rules:{min:1,type:[{code:"code"}]}}},ElementDefinitionBase:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},min:{min:1,type:[{code:"unsignedInt"}]},max:{min:1,type:[{code:"string"}]}}},ElementDefinitionType:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"uri"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},targetProfile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},aggregation:{max:9007199254740991,type:[{code:"code"}]},versioning:{type:[{code:"code"}]}}},ElementDefinitionExample:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},label:{min:1,type:[{code:"string"}]},"value[x]":{min:1,type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]}}},ElementDefinitionConstraint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},key:{min:1,type:[{code:"id"}]},requirements:{type:[{code:"string"}]},severity:{min:1,type:[{code:"code"}]},human:{min:1,type:[{code:"string"}]},expression:{type:[{code:"string"}]},xpath:{type:[{code:"string"}]},source:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]}}},ElementDefinitionBinding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},strength:{min:1,type:[{code:"code"}]},description:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]}}},ElementDefinitionMapping:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},identity:{min:1,type:[{code:"id"}]},language:{type:[{code:"code"}]},map:{min:1,type:[{code:"string"}]},comment:{type:[{code:"string"}]}}},Expression:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},description:{type:[{code:"string"}]},name:{type:[{code:"id"}]},language:{min:1,type:[{code:"code"}]},expression:{type:[{code:"string"}]},reference:{type:[{code:"uri"}]}}},Extension:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},url:{min:1,type:[{code:"uri"}]},"value[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]}}},HumanName:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},text:{type:[{code:"string"}]},family:{type:[{code:"string"}]},given:{max:9007199254740991,type:[{code:"string"}]},prefix:{max:9007199254740991,type:[{code:"string"}]},suffix:{max:9007199254740991,type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Identifier:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"CodeableConcept"}]},system:{type:[{code:"uri"}]},value:{type:[{code:"string"}]},period:{type:[{code:"Period"}]},assigner:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MarketingStatus:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},country:{min:1,type:[{code:"CodeableConcept"}]},jurisdiction:{type:[{code:"CodeableConcept"}]},status:{min:1,type:[{code:"CodeableConcept"}]},dateRange:{min:1,type:[{code:"Period"}]},restoreDate:{type:[{code:"dateTime"}]}}},Meta:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},versionId:{type:[{code:"id"}]},lastUpdated:{type:[{code:"instant"}]},source:{type:[{code:"uri"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},security:{max:9007199254740991,type:[{code:"Coding"}]},tag:{max:9007199254740991,type:[{code:"Coding"}]},project:{type:[{code:"uri"}]},author:{type:[{code:"Reference"}]},onBehalfOf:{type:[{code:"Reference"}]},account:{type:[{code:"Reference"}]},accounts:{max:9007199254740991,type:[{code:"Reference"}]},compartment:{max:9007199254740991,type:[{code:"Reference"}]}}},Money:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},currency:{type:[{code:"code"}]}}},Narrative:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},status:{min:1,type:[{code:"code"}]},div:{min:1,type:[{code:"xhtml"}]}}},ParameterDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"code"}]},use:{min:1,type:[{code:"code"}]},min:{type:[{code:"integer"}]},max:{type:[{code:"string"}]},documentation:{type:[{code:"string"}]},type:{min:1,type:[{code:"code"}]},profile:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]}}},Period:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},start:{type:[{code:"dateTime"}]},end:{type:[{code:"dateTime"}]}}},Population:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"age[x]":{type:[{code:"Range"},{code:"CodeableConcept"}]},gender:{type:[{code:"CodeableConcept"}]},race:{type:[{code:"CodeableConcept"}]},physiologicalCondition:{type:[{code:"CodeableConcept"}]}}},ProdCharacteristic:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},height:{type:[{code:"Quantity"}]},width:{type:[{code:"Quantity"}]},depth:{type:[{code:"Quantity"}]},weight:{type:[{code:"Quantity"}]},nominalVolume:{type:[{code:"Quantity"}]},externalDiameter:{type:[{code:"Quantity"}]},shape:{type:[{code:"string"}]},color:{max:9007199254740991,type:[{code:"string"}]},imprint:{max:9007199254740991,type:[{code:"string"}]},image:{max:9007199254740991,type:[{code:"Attachment"}]},scoring:{type:[{code:"CodeableConcept"}]}}},ProductShelfLife:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},identifier:{type:[{code:"Identifier"}]},type:{min:1,type:[{code:"CodeableConcept"}]},period:{min:1,type:[{code:"Quantity"}]},specialPrecautionsForStorage:{max:9007199254740991,type:[{code:"CodeableConcept"}]}}},Quantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Range:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},low:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},high:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},Ratio:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},numerator:{type:[{code:"Quantity"}]},denominator:{type:[{code:"Quantity"}]}}},Reference:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},reference:{type:[{code:"string"}]},type:{type:[{code:"uri"}]},identifier:{type:[{code:"Identifier"}]},display:{type:[{code:"string"}]}}},RelatedArtifact:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},label:{type:[{code:"string"}]},display:{type:[{code:"string"}]},citation:{type:[{code:"markdown"}]},url:{type:[{code:"url"}]},document:{type:[{code:"Attachment"}]},resource:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/Resource"]}]}}},SampledData:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},origin:{min:1,type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},period:{min:1,type:[{code:"decimal"}]},factor:{type:[{code:"decimal"}]},lowerLimit:{type:[{code:"decimal"}]},upperLimit:{type:[{code:"decimal"}]},dimensions:{min:1,type:[{code:"positiveInt"}]},data:{type:[{code:"string"}]}}},Signature:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,max:9007199254740991,type:[{code:"Coding"}]},when:{min:1,type:[{code:"instant"}]},who:{min:1,type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},onBehalfOf:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},targetFormat:{type:[{code:"code"}]},sigFormat:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]}}},SubstanceAmount:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"amount[x]":{type:[{code:"Quantity"},{code:"Range"},{code:"string"}]},amountType:{type:[{code:"CodeableConcept"}]},amountText:{type:[{code:"string"}]},referenceRange:{type:[{code:"SubstanceAmountReferenceRange"}]}}},SubstanceAmountReferenceRange:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},lowLimit:{type:[{code:"Quantity"}]},highLimit:{type:[{code:"Quantity"}]}}},Timing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},event:{max:9007199254740991,type:[{code:"dateTime"}]},repeat:{type:[{code:"TimingRepeat"}]},code:{type:[{code:"CodeableConcept"}]}}},TimingRepeat:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"bounds[x]":{type:[{code:"Duration"},{code:"Range"},{code:"Period"}]},count:{type:[{code:"positiveInt"}]},countMax:{type:[{code:"positiveInt"}]},duration:{type:[{code:"decimal"}]},durationMax:{type:[{code:"decimal"}]},durationUnit:{type:[{code:"code"}]},frequency:{type:[{code:"positiveInt"}]},frequencyMax:{type:[{code:"positiveInt"}]},period:{type:[{code:"decimal"}]},periodMax:{type:[{code:"decimal"}]},periodUnit:{type:[{code:"code"}]},dayOfWeek:{max:9007199254740991,type:[{code:"code"}]},timeOfDay:{max:9007199254740991,type:[{code:"time"}]},when:{max:9007199254740991,type:[{code:"code"}]},offset:{type:[{code:"unsignedInt"}]}}},TriggerDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{type:[{code:"string"}]},"timing[x]":{type:[{code:"Timing"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Schedule"]},{code:"date"},{code:"dateTime"}]},data:{max:9007199254740991,type:[{code:"DataRequirement"}]},condition:{type:[{code:"Expression"}]}}},UsageContext:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"Coding"}]},"value[x]":{min:1,type:[{code:"CodeableConcept"},{code:"Quantity"},{code:"Range"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/PlanDefinition","http://hl7.org/fhir/StructureDefinition/ResearchStudy","http://hl7.org/fhir/StructureDefinition/InsurancePlan","http://hl7.org/fhir/StructureDefinition/HealthcareService","http://hl7.org/fhir/StructureDefinition/Group","http://hl7.org/fhir/StructureDefinition/Location","http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MoneyQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},SimpleQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{max:0,type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},IdentityProvider:{elements:{authorizeUrl:{min:1,type:[{code:"string"}]},tokenUrl:{min:1,type:[{code:"string"}]},tokenAuthMethod:{type:[{code:"code"}]},userInfoUrl:{min:1,type:[{code:"string"}]},clientId:{min:1,type:[{code:"string"}]},clientSecret:{min:1,type:[{code:"string"}]},usePkce:{type:[{code:"boolean"}]},useSubject:{type:[{code:"boolean"}]}}}};function er(r){return new an(r).parse()}var we=on(Ci),cn=Object.create(null),Pi=Object.create(null),Qs={"http://hl7.org/fhir/StructureDefinition/MoneyQuantity":"MoneyQuantity","http://hl7.org/fhir/StructureDefinition/SimpleQuantity":"SimpleQuantity","http://hl7.org/fhir/uv/sql-on-fhir/StructureDefinition/ViewDefinition":"ViewDefinition"};function Ii(r){let e;return e=Pi[r],e||(e=Pi[r]=Object.create(null)),e}function tr(r){let t=(Array.isArray(r)?r:r.entry?.map(n=>n.resource)??[]).filter(n=>n?.resourceType==="StructureDefinition");hn(t);for(let n of t)rr(n)}function rr(r){if(!r?.name)throw new Error("Failed loading StructureDefinition from bundle");if(r.resourceType!=="StructureDefinition")return;let e=er(r),t=Qs[r.url],n,i;t?(n=we,i=t):r.url===`http://hl7.org/fhir/StructureDefinition/${r.type}`||r.url===`https://medplum.com/fhir/StructureDefinition/${r.type}`||r.type?.startsWith("http://")||r.type?.startsWith("https://")?(n=we,i=r.type):(n=Ii(r.url),i=r.type),n[i]=e;for(let o of e.innerTypes)o.parentType=e,n[o.name]=o;cn[r.url]=e}function un(){return we}function ln(r){return!!we[r]}function Ue(r,e){if(e){let t=Ii(e)[r];if(t)return t}return we[r]}function ne(r,e){let t=Ue(r,e);if(!t)throw new d(b("Unknown data type: "+r));return t}function pn(r){let e=we[r];return e&&nr(e)}function dn(r){return!!cn[r]}function fn(r){return cn[r]}var an=class{constructor(e){if(!e.snapshot?.element||e.snapshot.element.length===0)throw new Error(`No snapshot defined for StructureDefinition '${e.name}'`);this.root=e.snapshot.element[0],this.elements=e.snapshot.element.slice(1),this.elementIndex=Object.create(null),this.index=0,this.resourceSchema={name:e.name,path:this.root.path,title:e.title,type:e.type,url:e.url,version:e.version,kind:e.kind,description:Ys(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=sn(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[sn(e,n.path)]=t;break}n=n.parent}if(!n){let i=sn(e,this.root.path);e.isSummary&&this.resourceSchema.summaryProperties?.add(i.replace("[x]","")),t.min>0&&this.resourceSchema.mandatoryProperties?.add(i.replace("[x]","")),this.resourceSchema.elements[i]=t}this.checkFieldExit(e)}e=this.next()}return this.checkFieldExit(),this.innerTypes.length>0&&(this.resourceSchema.innerTypes=this.innerTypes),this.resourceSchema}checkFieldEnter(e,t){this.isInnerType(e)&&this.enterInnerType(e),this.slicingContext&&!Ne(this.slicingContext.path,e?.path)&&(this.slicingContext=void 0),e.slicing&&!this.slicingContext&&this.enterSlice(e,t)}enterInnerType(e){for(;this.backboneContext&&!Ne(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;let t=Zt(e);this.backboneContext={type:{name:t,type:t,path:e.path,title:e.label,description:e.definition,elements:{},constraints:this.parseElementDefinition(e).constraints,innerTypes:[]},path:e.path,parent:Ne(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,t){Xs(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&&!Ne(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!Ne(this.backboneContext.path,e?.path));else this.innerTypes.push(this.backboneContext.type),this.backboneContext=void 0}next(){let e=this.peek();if(e)return this.index++,e}peek(){let e=this.elements[this.index];if(e){if(this.elementIndex[e.path??""]=e,e.contentReference){let t=e.contentReference.slice(e.contentReference.indexOf("#")+1),n=this.elementIndex[t];return n?{...n,id:e.id,path:e.path,min:e.min??n.min,max:e.max??n.max,base:{path:n.base?.path??t,min:e.base?.min??n.base?.min??n.min,max:e.base?.max??n.base?.max??n.max},contentReference:e.contentReference,definition:e.definition}:void 0}return e}}isInnerType(e){let t=this.peek();return!!(Ne(e?.path,t?.path)&&e.type?.some(n=>["BackboneElement","Element"].includes(n.code)))}parseSliceStart(e){if(!this.slicingContext)throw new Error(`Invalid slice start before discriminator: ${e.sliceName} (${e.id})`);this.slicingContext.current={...this.parseElementDefinition(e),name:e.sliceName??"",definition:e.definition,elements:{}},this.slicingContext.field.slices.push(this.slicingContext.current)}parseElementDefinitionType(e){return(e.type??[]).map(t=>{let n;return(t.code==="BackboneElement"||t.code==="Element")&&(n=Zt(e)),n||(n=ie(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=Ai(e.max),n=e.base?.max?Ai(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:Oi(P(i,"fixed[x]")),pattern:Oi(P(i,"pattern[x]")),binding:e.binding}}};function zs(r,e){if(!r)return;let t=[];for(let n of e){t.push("_"+n);let i=we[r.resourceType].elements[n+"[x]"];i&&t.push(...i.type.map(o=>n+I(o.code)))}for(let n of Object.getOwnPropertyNames(r))!e.includes(n)&&!t.includes(n)&&!Js.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(wi):[wi]},r}var wi={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},Js=["resourceType","id","meta"];function Ai(r){return r==="*"?Number.POSITIVE_INFINITY:Number.parseInt(r,10)}function sn(r,e=""){return Ks(r.path,e)}function Ks(r,e){return r?e&&r.startsWith(e)?r.substring(e.length+1):r:""}function Ne(r,e){return!r||!e?!1:e.startsWith(r+".")||e===r}function Oi(r){return Array.isArray(r)&&r.length>0?r[0]:S(r)?void 0:r}function Xs(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 Ys(r){let e=r.description;return e?.startsWith(`Base StructureDefinition for ${r.name} Type: `)&&(e=e.substring(`Base StructureDefinition for ${r.name} Type: `.length)),e}function ir(r,e,t){new mn(r,e,t).crawl()}function Zs(r,e,t){return new yn(r,e,t).crawl()}var mn=class{constructor(e,t,n){this.root=e,this.visitor=t,this.schema=n?.schema??ne(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}crawl(){this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}crawlObject(e,t,n){let i=O(e.value);if(i&&this.visitor.onEnterResource&&this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties)for(let o of Object.keys(e.value))this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&this.visitor.onExitResource(n,e,t)}crawlProperty(e,t,n,i){let o=Ae(e,t,{withPath:!0});this.visitor.visitProperty&&this.visitor.visitProperty(e,t,i,o,n);for(let s of o)if(s)for(let a of Be(s))this.crawlPropertyValue(a,i)}crawlPropertyValue(e,t){if(!ot(e.type)){let n=ne(e.type);this.crawlObject(e,n,t)}}},yn=class{constructor(e,t,n){this.root=e,this.visitor=t,this.schema=n?.schema??ne(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}async crawl(){return this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}async crawlObject(e,t,n){let i=O(e.value);if(i&&this.visitor.onEnterResource&&await this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&await this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties&&e.value)for(let o of Object.keys(e.value))await this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))await this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&await this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&await this.visitor.onExitResource(n,e,t)}async crawlProperty(e,t,n,i){let o=Ae(e,t,{withPath:!0});if(this.visitor.visitPropertyAsync)for(let s of o)await this.visitor.visitPropertyAsync(e,t,i,s,n);for(let s of o)if(s)for(let a of Be(s))await this.crawlPropertyValue(a,i)}async crawlPropertyValue(e,t){if(!ot(e.type)){let n=ne(e.type);await this.crawlObject(e,n,t)}}};function Ae(r,e,t){if(r===void 0)return[void 0];if(e==="$this")return[r];let n=t?.withPath?ki:P,[i,...o]=e.split("."),s=[n(r,i,t)];for(let a of o){let c=[];for(let u of s)if(Array.isArray(u))for(let p of u)c.push(n(p,a,t));else(t?.withPath&&u&&u.value!==void 0||!t?.withPath&&u!==void 0)&&c.push(n(u,a,t));s=c}return s}function ki(r,e,t){let n=r.path;return ea(P(r,e,t),n,e)}function ea(r,e,t){let n=e?e+".":"";return r===void 0?{type:"undefined",value:void 0,path:`${n}${t}`}:Array.isArray(r)?r.map((i,o)=>({...i,path:`${n}${t}[${o}]`})):{...r,path:`${n}${t}`}}var or={base64Binary:"string",boolean:"boolean",canonical:"string",code:"string",date:"string",dateTime:"string",decimal:"number",id:"string",instant:"string",integer:"number",integer64:"string",markdown:"string",oid:"string",positiveInt:"number",string:"string",time:"string",unsignedInt:"number",uri:"string",url:"string",uuid:"string",xhtml:"string","http://hl7.org/fhirpath/System.String":"string"},ta=new Re(1e3);function ot(r){return r==="undefined"||r in or}var st={base64Binary:/^([A-Za-z\d+/]{4})*([A-Za-z\d+/]{2}==|[A-Za-z\d+/]{3}=)?$/,canonical:/^\S*$/,code:/^[^\s]+( [^\s]+)*$/,date:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1]))?)?$/,dateTime:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1])(T([01]\d|2[0-3])(:[0-5]\d:([0-5]\d|60)(\.\d{1,9})?)?)?)?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00)?)?)?$/,id:/^[A-Za-z0-9\-.]{1,64}$/,instant:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])T([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00))$/,markdown:/^[\r\n\t\u0020-\uFFFF]+$/,oid:/^urn:oid:[0-2](\.(0|[1-9]\d*))+$/,string:/^[\r\n\t\u0020-\uFFFF]+$/,time:/^([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?$/,uri:/^\S*$/,url:/^\S*$/,uuid:/^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,xhtml:/.*/},ra={"ele-1":!0,"dom-3":!0,"org-1":!0,"sdf-19":!0};function na(r,e){if(!r.resourceType)throw new d(y("Missing resource type"));return new sr(x(r),e).validate()}function ia(r,e){return new sr(r,e).validate()}var sr=class{constructor(e,t){this.issues=[],this.root=e,this.currentResource=[],O(e.value)&&this.currentResource.push(e.value),t?.profile?this.schema=er(t.profile):this.schema=ne(e.type)}validate(){this.constraintsCheck({...this.root,path:this.schema.path},this.schema),gn(this.root.value,this.schema.path,this.issues),ir(this.root,this,{schema:this.schema,initialPath:this.schema.path});let e=this.issues,t=!1;for(let n of e)n.severity==="error"&&(t=!0);if(t)throw new d({resourceType:"OperationOutcome",issue:e});return e}onExitObject(e,t,n){this.checkAdditionalProperties(t,n.elements,t.path)}onEnterResource(e,t){this.currentResource.push(t.value)}onExitResource(){this.currentResource.pop()}visitProperty(e,t,n,i,o){let s=o.elements[t];if(!s)throw new Error(`Missing element validation schema for ${t}`);for(let a of i){if(!this.checkPresence(a,s,n))return;let c;if(s.isArray){if(!Array.isArray(a)){this.issues.push(T(n,"Expected array of values for property"));return}c=a}else{if(Array.isArray(a)){this.issues.push(T(n,"Expected single value for property"));return}c=[a]}(c.length<s.min||c.length>s.max)&&this.issues.push(T(s.path,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${c.length}`)),aa(a,s)||this.issues.push(T(n,"Value did not match expected pattern"));let u=s.slicing?Object.fromEntries(s.slicing.slices.map(p=>[p.name,0])):void 0;for(let p of c){this.constraintsCheck(p,s),this.referenceTypeCheck(p,s),this.checkPropertyValue(p);let m=ca(p,s.slicing);m&&u&&(u[m]+=1)}this.validateSlices(s.slicing?.slices,u,n)}}checkPresence(e,t,n){return!Array.isArray(e)&&e.value===void 0?(t.min>0&&this.issues.push(T(e.path,"Missing required property")),!1):S(e)?(this.issues.push(T(n,"Invalid empty value")),!1):!0}checkPropertyValue(e){ot(e.type)?this.validatePrimitiveType(e):S(e.value)&&this.issues.push(T(e.path,"Invalid empty non-primitive value"))}validateSlices(e,t,n){if(!(!e||!t))for(let i of e){let o=t[i.name];(o<i.min||o>i.max)&&this.issues.push(T(n,`Incorrect number of values provided for slice '${i.name}': expected ${i.min}..${Number.isFinite(i.max)?i.max:"*"}, but found ${o}`))}}checkAdditionalProperties(e,t,n){let i=e.value;if(!i)return;let o={};for(let s of Object.keys(i)){if(s==="resourceType")continue;let a=sa(e,s,t);if(a){let c,u;a.startsWith("_")?(c=a.slice(1),u=s.slice(1)):(c="_"+a,u="_"+s),c in o&&o[c]!==u&&this.issues.push(he("warning","structure",`Type of primitive extension does not match the type of property "${a.startsWith("_")?a.slice(1):a}"`,a)),o[a]&&this.issues.push(he("warning","structure",`Conflicting choice of type properties: "${s}", "${o[a]}"`,s)),o[a]=s;continue}!(s in t)&&!(s.startsWith("_")&&s.slice(1)in t)&&this.issues.push(T(`${n}.${s}`,`Invalid additional property "${s}"`))}}constraintsCheck(e,t){let n=t.constraints;if(n){for(let i of n)if(i.severity==="error"&&!(i.key in ra)&&!this.isExpressionTrue(i,e)){this.issues.push(rn(e.path,i));return}}}referenceTypeCheck(e,t){if(e.type!=="Reference")return;let n=e.value;if(!B(n)||n.reference.startsWith("#"))return;let i=n.reference.includes("?")?n.reference.split("?")[0]:n.reference.split("/")[0];if(!i)return;let o=t.type.find(m=>m.code==="Reference")?.targetProfile;if(!o)return;let s=Gr+"/fhir/StructureDefinition/",a=s+"Resource",c=s+i,u="https://medplum.com/fhir/StructureDefinition/",p=u+i;for(let m of o)if(m===a||m===c||m===p||!m.startsWith(s)&&!m.startsWith(u))return;this.issues.push(he("warning","structure",`Invalid reference: got "${i}", expected "${o.join('", "')}"`,e.path))}isExpressionTrue(e,t){let n={"%context":t,"%ucum":x($r)};this.currentResource.length>0&&(n["%resource"]=x(this.currentResource[this.currentResource.length-1])),O(this.root.value)&&(n["%rootResource"]=this.root);try{let i=E(e.expression,[t],n,ta);return i.length===1&&i[0].value===!0}catch(i){return this.issues.push(nn(t.path,"Error evaluating invariant expression",i,{fhirpath:e.expression})),!1}}validatePrimitiveType(e){let[t,n]=ua(e),i=e.path;if(t){let{type:o,value:s}=t;if(!(o in or)){this.issues.push(T(i,`Invalid JSON type: ${o} is not a valid FHIR type`));return}let a=or[o];if(typeof s!==a){s!==null&&this.issues.push(T(i,`Invalid JSON type: expected ${a}, but got ${typeof s}`));return}a==="string"?this.validateString(s,o,i):a==="number"&&this.validateNumber(s,o,i)}n&&ir(n,this,{schema:ne("Element"),initialPath:i})}validateString(e,t,n){if(!e.trim()){this.issues.push(T(n,"String must contain non-whitespace content"));return}if(e.length>1024*1024){this.issues.push(T(n,"String cannot be larger than 1 MB"));return}let i=st[t];i&&!i.exec(e)&&this.issues.push(T(n,"Invalid "+t+" format"))}validateNumber(e,t,n){Number.isNaN(e)||!Number.isFinite(e)?this.issues.push(T(n,"Invalid numeric value")):oa(t)&&!Number.isInteger(e)?this.issues.push(T(n,"Expected number to be an integer")):t===l.positiveInt&&e<=0?this.issues.push(T(n,"Expected number to be positive")):t===l.unsignedInt&&e<0&&this.issues.push(T(n,"Expected number to be non-negative"))}};function oa(r){return r===l.integer||r===l.positiveInt||r===l.unsignedInt}function sa(r,e,t){let n="";e.startsWith("_")&&(e=e.slice(1),n="_");let i=e.split(/(?=[A-Z])/g),o="";for(let s of i){o+=s;let a=o+"[x]";if(t[a])return P(r,o)?n+a:void 0}}function gn(r,e,t){for(let[n,i]of Object.entries(r)){let o=`${e}.${n}`,s=n.startsWith("_")?n.slice(1):`_${n}`;if(i===null)t.push(T(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?t.push(T(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!r[s]?.[a]?t.push(T(`${o}[${a}]`,"Invalid null value")):i[a]&&gn(i[a],`${o}[${a}]`,t);else typeof i=="object"&&gn(i,o,t)}}function aa(r,e){let t=Array.isArray(r)?r.map(n=>({type:n.type,value:n.value})):{type:r.type,value:r.value};return!(e.pattern&&!We(t,e.pattern)||e.fixed&&!oe(t,e.fixed))}function ar(r,e,t,n){if(Array.isArray(r))return!1;let i;e.path==="$this"?i=t:i=(n??t.elements)[e.path];let o=t.type;switch(e.type){case"value":case"pattern":if(!r||!i)return!1;if(i.pattern)return We(r,i.pattern);if(i.fixed)return oe(r,i.fixed);if(i.binding?.strength==="required"&&i.binding.valueSet)return!0;break;case"type":return!r||!o?.length?!1:o.some(s=>s.code===r.type)}return!1}function ca(r,e){if(e){for(let t of e.slices)if(e.discriminator.every(n=>Be(Ae(r,n.path))?.some(i=>ar(i,n,t))))return t.name}}function ua(r){if(typeof r.value!="object"||!r.value)return[r,void 0];let e=r.value.valueOf();if(e===r.value)return[void 0,{type:"Element",value:r.value}];let t=new Set(Object.keys(e)),n=Object.entries(r.value).filter(([o,s])=>!t.has(o)),i=n.length>0?Object.fromEntries(n):void 0;return[{type:r.type,value:e},{type:"Element",value:i}]}function h(r){return[{type:l.boolean,value:r}]}function x(r){return r==null?{type:"undefined",value:void 0}:Number.isSafeInteger(r)?{type:l.integer,value:r}:typeof r=="number"?{type:l.decimal,value:r}:typeof r=="boolean"?{type:l.boolean,value:r}:typeof r=="string"?{type:l.string,value:r}:w(r)?{type:l.Quantity,value:r}:O(r)?{type:r.resourceType,value:r}:pr(r)?{type:l.CodeableConcept,value:r}:lr(r)?{type:l.Coding,value:r}:{type:l.BackboneElement,value:r}}function _(r){return r.length===0?!1:!!r[0].value}function G(r,e){if(r.length!==0){if(r.length===1&&(!e||r[0].type===e))return r[0];throw new Error(`Expected singleton of type ${e}, but found ${JSON.stringify(r)}`)}}function P(r,e,t){if(!r.value)return;let n=lt(r.type,e,t?.profileUrl);return n?_i(r,e,n):Li(r,e)}function _i(r,e,t){let n=r.value,i=t.type;if(!i||i.length===0)return;let o,s="undefined",a,c=t.path.lastIndexOf("."),u=t.path.substring(c+1);for(let p of i){let m=u.replace("[x]",I(p.code));if(o=n[m],a=n["_"+m],o!==void 0||a!==void 0){s=p.code;break}}if(a)if(Array.isArray(o)){o=o.slice();for(let p=0;p<Math.max(o.length,a.length);p++)o[p]=xn(o[p],a[p])}else if(!o&&Array.isArray(a)){o=a.slice();for(let p=0;p<a.length;p++)o[p]=xn(void 0,a[p])}else o=xn(o,a);if(!S(o))return(s==="Element"||s==="BackboneElement")&&(s=t.type[0].code),Array.isArray(o)?o.map(p=>Vi(p,s)):Vi(o,s)}function Vi(r,e){return e==="Resource"&&O(r)&&(e=r.resourceType),{type:e,value:r}}function Li(r,e){let t=r.value;if(!t||typeof t!="object")return;let n;if(e in t){let i=t[e];Array.isArray(i)?n=i.map(x):n=x(i)}else{let i=e.endsWith("[x]")?e.substring(0,e.length-3):e;for(let o of Object.values(l)){let s=i+I(o);if(s in t){let a=t[s];Array.isArray(a)?n=a.map(c=>({type:o,value:c})):n={type:o,value:a};break}}}if(Array.isArray(n)){if(n.length===0||S(n[0]))return}else if(S(n))return;return n}function at(r){let e=[];for(let t of r){let n=!1;for(let i of e)if(_(qe(t,i))){n=!0;break}n||e.push(t)}return e}function vn(r){return h(!_(r))}function Tn(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?h(!1):h(r.every((t,n)=>_(qe(t,e[n]))))}function Sn(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?h(!0):h(r.some((t,n)=>!_(qe(t,e[n]))))}function qe(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?h(Math.abs(t-n)<1e-8):w(t)&&w(n)?h(Rn(t,n)):h(typeof t=="object"&&typeof n=="object"?Cn(r,e):t===n)}function ur(r,e){return r.length===0&&e.length===0?h(!0):r.length!==e.length?h(!1):(r.sort(Di),e.sort(Di),h(r.every((t,n)=>_(Fi(t,e[n])))))}function Fi(r,e){let{type:t,value:n}=r,{type:i,value:o}=e,s=n?.valueOf(),a=o?.valueOf();return typeof s=="number"&&typeof a=="number"?h(Math.abs(s-a)<.01):w(s)&&w(a)?h(Rn(s,a)):h(t==="Coding"&&i==="Coding"?typeof s!="object"||typeof a!="object"?!1:s.code===a.code&&s.system===a.system:typeof s=="object"&&typeof a=="object"?Cn({...s,id:void 0},{...a,id:void 0}):typeof s=="string"&&typeof a=="string"?s.toLowerCase()===a.toLowerCase():s===a)}function Di(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 ct(r,e){let{value:t}=r;if(t==null)return!1;let n=e;switch(n.startsWith("System.")&&(n=n.substring(7)),n.startsWith("FHIR.")&&(n=n.substring(5)),n){case"Boolean":return typeof t=="boolean";case"Decimal":case"Integer":return typeof t=="number";case"Date":return bn(t);case"DateTime":return Oe(t);case"Time":return typeof t=="string"&&!!/^T\d/.exec(t);case"Period":return En(t);case"Quantity":return w(t);default:return r.type===n||typeof t=="object"&&t?.resourceType===n}}function bn(r){return typeof r=="string"&&!!st.date.exec(r)}function Oe(r){return typeof r=="string"&&!!st.dateTime.exec(r)}function En(r){return!!(r&&typeof r=="object"&&("start"in r&&Oe(r.start)||"end"in r&&Oe(r.end)))}function ut(r){if(r){if(bn(r)||Oe(r))return{start:cr(r,"0000-01-01T00:00:00.000"),end:cr(r,"xxxx-12-31T23:59:59.999")};if(En(r))return{start:r.start?cr(r.start,"0000-01-01T00:00:00.000"):void 0,end:r.end?cr(r.end,"xxxx-12-31T23:59:59.999"):void 0}}}function cr(r,e){let t="Z",n=Math.max(r.indexOf("+",10),r.indexOf("-",10));n>-1?(t=r.substring(n),r=r.substring(0,n)):r.endsWith("Z")&&(r=r.substring(0,r.length-1));let i=r+e.substring(r.length)+t;return new Date(i).toISOString()}function w(r){return!!(r&&typeof r=="object"&&"value"in r&&typeof r.value=="number")}function Rn(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 Cn(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(Mi(o)&&Mi(s)){if(!Cn(o,s))return!1}else if(o!==s)return!1}return!0}function Mi(r){return r!==null&&typeof r=="object"}function xn(r,e){if(e){if(typeof e!="object")throw new Error("Primitive extension must be an object");return la(r??{},e)}return r}function la(r,e){return delete e.__proto__,delete e.constructor,Object.assign(r,e)}function $e(r,e){return O(r,e)&&"id"in r&&typeof r.id=="string"}function me(r){let e=D(r)??"undefined/undefined",t=Bi(r);return t===e?{reference:e}:{reference:e,display:t}}function D(r){if(B(r))return r.reference;if($e(r))return`${r.resourceType}/${r.id}`}function ye(r){if(r)return B(r)?r.reference.split("/")[1]:r.id}function pa(r){if(r?.reference===void 0)throw new d(y("Reference missing reference property."));let[e,t]=r.reference.split("/");if(e===""||t===""||t===void 0)throw new d(y("Unable to parse reference string."));return[e,t]}function Ui(r){return r.resourceType==="Patient"||r.resourceType==="Practitioner"||r.resourceType==="RelatedPerson"}function Bi(r){if(Ui(r)){let e=da(r);if(e)return e}if(r.resourceType==="Device"){let e=fa(r);if(e)return e}if(r.resourceType==="MedicationRequest"&&r.medicationCodeableConcept)return je(r.medicationCodeableConcept);if(r.resourceType==="Subscription"&&r.criteria)return r.criteria;if(r.resourceType==="User"&&r.email)return r.email;if("name"in r&&r.name&&typeof r.name=="string")return r.name;if("code"in r&&r.code){let e=r.code;if(Array.isArray(e)&&(e=e[0]),pr(e))return je(e);if($i(e))return e.text}return D(r)??""}function da(r){let e=r.name;if(e&&e.length>0)return Ge(e[0])}function fa(r){let e=r.deviceName;if(e&&e.length>0)return e[0].name}function ha(r){if(!("photo"in r))return;let e=r.photo;if(e)if(Array.isArray(e))for(let t of e){let n=Ni(t);if(n)return n}else return Ni(e)}function Ni(r){if(r.url&&r.contentType?.startsWith("image/"))return r.url}function ma(r){return r?new Date(r):void 0}function pt(r,e){let t=new Date(r);t.setUTCHours(0,0,0,0);let n=e?new Date(e):new Date;n.setUTCHours(0,0,0,0);let i=t.getUTCFullYear(),o=t.getUTCMonth(),s=t.getUTCDate(),a=n.getUTCFullYear(),c=n.getUTCMonth(),u=n.getUTCDate(),p=a-i;(c<o||c===o&&u<s)&&p--;let m=a*12+c-(i*12+o);u<s&&m--;let v=Math.floor((n.getTime()-t.getTime())/(1e3*60*60*24));return{years:p,months:m,days:v}}function ya(r,e){let{years:t,months:n,days:i}=pt(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 ga(r){let e={};return Wi(r.item,e),e}function Wi(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer[0]),Wi(t.item,e)}function xa(r){let e={};return qi(r.item,e),e}function qi(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]?e[t.linkId]=[...e[t.linkId],...t.answer]:e[t.linkId]=t.answer),qi(t.item,e)}function ji(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 va(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 Ta(r,...e){let t=ie(r,...e);if(!t)return;let n=P({type:"Extension",value:t},"value[x]");if(n)return Array.isArray(n)?n[0].value:n.value}function ie(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 dt(r,e){let t=Pn(r);return JSON.stringify(t,null,e?2:void 0)??""}function Pn(r){if(!(r==null||r===""))return typeof r=="object"?Array.isArray(r)?Sa(r):ba(r):r}function Sa(r){let e=r.length;if(e===0)return;let t,n=0;for(let i=0;i<e;i++){let o=r[i],s=Pn(o);s!==o&&!t&&(t=Array.from(r)),s===void 0?t&&(t[i]=null):(t&&(t[i]=s),n++)}if(n!==0)return t??r}function ba(r){let e,t=0;for(let n in r){let i=r[n],o=Pn(i);o!==i&&!e&&(e={...r}),o===void 0?e&&delete e[n]:(e&&(e[n]=o),t++)}if(t!==0)return e??r}function S(r){if(r==null)return!0;let e=typeof r;return e==="string"||e==="object"?!K(r):!1}function K(r){if(r==null)return!1;let e=typeof r;return e==="string"&&r!==""||e==="object"&&("length"in r&&r.length>0||Object.keys(r).length>0)}function Ea(r){if(!r)return;let e=r.length-1;for(;e>=0&&S(r[e]);)e--;return e>=0?r.slice(0,e+1):void 0}function oe(r,e,t){return r===e||S(r)&&S(e)?!0:S(r)||S(e)?!1:Array.isArray(r)&&Array.isArray(e)?Ra(r,e):Array.isArray(r)||Array.isArray(e)?!1:R(r)&&R(e)?Ca(r,e,t):(R(r)||R(e),!1)}function Ra(r,e){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(!oe(r[t],e[t]))return!1;return!0}function Ca(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(!oe(o,s,i))return!1}return!0}function We(r,e){return S(r)?!0:S(e)?!1:Array.isArray(r)&&Array.isArray(e)?Pa(r,e):Array.isArray(r)||Array.isArray(e)?!1:R(r)&&R(e)?wa(r,e):R(r)||R(e)?!1:r===e}function Pa(r,e){return e.every(t=>r.some(n=>We(n,t)))}function wa(r,e){return Object.entries(e).every(([t,n])=>t in r&&We(r[t],n))}function ge(r){return r===void 0?r:JSON.parse(JSON.stringify(r))}function Aa(r){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(r)}function R(r){return r!==null&&typeof r=="object"}function wn(r){return r.every(ft)}function ft(r){return typeof r=="string"}function lr(r){return R(r)&&"code"in r&&typeof r.code=="string"}function pr(r){return R(r)&&"coding"in r&&Array.isArray(r.coding)&&r.coding.every(lr)}function Oa(r,e){if(r){for(let t of r)if(t.coding){for(let n of t.coding)if(n.system===e)return n.code}}}function $i(r){return R(r)&&"text"in r&&typeof r.text=="string"}var Gi=[];for(let r=0;r<256;r++)Gi.push(r.toString(16).padStart(2,"0"));function An(r){let e=In(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=Gi[t[i]];return n.join("")}function On(r){let e=In(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=String.fromCharCode(t[i]);return window.btoa(n.join(""))}function In(r){return ArrayBuffer.isView(r)?r.buffer:r}function I(r){return r?r.charAt(0).toUpperCase()+r.substring(1):""}function Ia(r){return r===r.toLowerCase()&&r!==r.toUpperCase()}function fr(r){return r.length>0&&r.startsWith(r[0].toUpperCase())}function se(r,e){let t=r+".";if(e.startsWith(t))return e.slice(t.length)}function dr(r,e){return r.coding?.find(t=>t.system===e)?.code}function ka(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 Va(r,e,t,n){return r.qualifiedInterval?.find(i=>Qi(i,e)&&La(i,t,r.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function Da(r,e,t){return Hi(r,e,t)[0]}function Hi(r,e,t){return r.qualifiedInterval?.filter(n=>Qi(n,e)&&(!t||t.includes(n.condition)))??[]}function Qi(r,e){return Ma(r,e)&&_a(r,e)}function Ma(r,e){return!r.gender||r.gender===e.gender}function _a(r,e){return!r.age||kn(pt(e.birthDate).years,r.age)}function La(r,e,t){return!!r.range&&kn(e,r.range,t)}function kn(r,e,t){return(e.low?.value===void 0||Ji(r,e.low.value,t))&&(e.high?.value===void 0||zi(r,e.high.value,t))}function Fa(r,e){return parseFloat(r.toFixed(e))}function Na(r,e,t){return J(r,t)===J(e,t)}function Ua(r,e,t){return J(r,t)<J(e,t)}function Ba(r,e,t){return J(r,t)>J(e,t)}function zi(r,e,t){return J(r,t)<=J(e,t)}function Ji(r,e,t){return J(r,t)>=J(e,t)}function J(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}function Wa(r,e,t){return r.find(n=>typeof e=="string"?dr(n.code||{},t)===e:dr(n.code||{},t)===dr(e,t))}function Be(r){if(r!==void 0)return Array.isArray(r)?r:[r]}function qa(r){return Array.isArray(r)?r[0]:r}var hr=r=>new Promise(e=>{setTimeout(e,r)});function mr(r,e,t){let n=[];for(let i=0;i<t-1;i++){let o=r.indexOf(e);if(o<0)break;n.push(r.slice(0,o)),r=r.slice(o+e.length)}return n.push(r),n}function Vn(r){let e,t=!1;return function(){return t||(e=r(),t=!0),e}}function ae(r,e){return r?(r.push(e),r):[e]}function ht(r){return r.sort((e,t)=>e.localeCompare(t))}function yr(r){return r.endsWith("/")?r:r+"/"}function Ki(r){return r.startsWith("/")?r.slice(1):r}function W(r,e){return new URL(Ki(e),yr(r.toString())).toString()}function Dn(r,e){return W(r,e).toString().replace("http://","ws://").replace("https://","wss://")}function Mn(r){return typeof r=="object"&&!Array.isArray(r)&&!(r instanceof URLSearchParams)&&(r=Object.fromEntries(Object.entries(r).filter(e=>e[1]!==void 0))),new URLSearchParams(r).toString()}var Xi=/^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-_]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-_]*[A-Za-z0-9])$/;function ja(r){return Xi.test(r)}function $a(r,e){return r?.meta?.profile?.includes(e)||(r.meta=r.meta??{},r.meta.profile=r.meta.profile??[],r.meta.profile.push(e)),r}function Ga(r,e){return new Map(r.entry?.filter(n=>!!n.resource).map(n=>[ji(n.resource,e),n.resource]).filter(([n])=>n!==void 0))}function Ha(r,e){if(r?.meta?.profile?.includes(e)){let t=r.meta.profile.indexOf(e);r.meta.profile.splice(t,1)}return r}function Qa(r,e){let t=[];if(!r)return t;for(let n=0;n<r.length;n++){let i=e(r[n],n);Array.isArray(i)?t.push(...i):i!==void 0&&t.push(i)}return t}function za(r){return r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/“/g,"&ldquo;").replace(/”/g,"&rdquo;").replace(/‘/g,"&lsquo;").replace(/’/g,"&rsquo;").replace(/…/g,"&hellip;")}function _n(r){if(!r)return"";switch(r.type){case"Address":return Zi(r.value);case"CodeableConcept":return je(r.value);case"Coding":return Ln(r.value);case"ContactPoint":return r.value.value;case"HumanName":return Ge(r.value);case"Quantity":return ce(r.value);case"Reference":return Yi(r.value);default:return r.value?.toString()??""}}function Yi(r){return r?r.display??r.reference??dt(r):""}function Zi(r,e){if(!r)return"";let t=[];if(r.line&&t.push(...r.line),r.city||r.state||r.postalCode){let n=[];r.city&&n.push(r.city),r.state&&n.push(r.state),r.postalCode&&n.push(r.postalCode),t.push(n.join(", "))}return r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.join(e?.lineSeparator??", ").trim()}function Ge(r,e){if(!r)return"";let t=[];if(r.prefix&&e?.prefix!==!1&&t.push(...r.prefix),r.given&&t.push(...r.given),r.family&&t.push(r.family),r.suffix&&e?.suffix!==!1&&t.push(...r.suffix),r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.length===0){let n=Ie(r.text);if(n)return n}return t.join(" ").trim()}function Ja(r){let e=[];return r.given&&e.push(...r.given),e.join(" ").trim()}function Ka(r){return Ie(r.family)??""}function xr(r){return r instanceof Date&&!isNaN(r.getTime())}function Xa(r,e,t){if(!r)return"";let n=new Date(r);return xr(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...t})):""}function eo(r,e,t){if(!r)return"";let n=new Date("2000-01-01T"+r+"Z");return xr(n)?n.toLocaleTimeString(e,t):""}function gr(r,e,t){if(!r)return"";let n=new Date(r);return xr(n)?n.toLocaleString(e,t):""}function Ya(r,e,t){return!r||!r.start&&!r.end?"":gr(r.start,e,t)+" - "+gr(r.end,e,t)}var Za={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},ec={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},tc={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function rc(r){if(!r)return"";let e=[];return nc(e,r.repeat),r.event&&e.push(r.event.map(t=>gr(t)).join(", ")),I(e.join(" ").trim())}function nc(r,e){if(!e?.periodUnit)return;let t=e.frequency??1,n=e.period??1,i=e.periodUnit;t===1&&n===1?r.push(Za[i]):(t===1?r.push("once"):r.push(t+" times"),n===1?r.push("per "+ec[i]):r.push("per "+n+" "+tc[i])),e.dayOfWeek&&r.push("on "+e.dayOfWeek.map(I).join(", ")),e.timeOfDay&&r.push("at "+e.timeOfDay.map(o=>eo(o)).join(", "))}function ic(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=ac(n.value,e),`> ${ce(n,e)}`):`>= ${ce(n,e)}`:n?.value===void 0&&i?.value!==void 0?t&&e!==void 0?(i.value=sc(i.value,e),`< ${ce(i,e)}`):`<= ${ce(i,e)}`:(n?.unit===i?.unit&&delete n?.unit,`${ce(n,e)} - ${ce(i,e)}`)}function ce(r,e){if(!r)return"";let t=[];return r.comparator&&(t.push(r.comparator),t.push(" ")),r.value!==void 0&&(e!==void 0?t.push(r.value.toFixed(e)):t.push(r.value)),r.unit&&(r.unit!=="%"&&t[t.length-1]!==" "&&t.push(" "),t.push(r.unit)),t.join("").trim()}function oc(r){return r?.value===void 0?"":r.value.toLocaleString(void 0,{style:"currency",currency:r.currency??"USD",currencyDisplay:"narrowSymbol"})}function je(r){if(!r)return"";let e=Ie(r.text);return e||(r.coding?r.coding.map(t=>Ln(t)).join(", "):"")}function Ln(r,e){let t=Ie(r?.display);if(t){let n=e?Ie(r?.code):void 0;return`${t}${n?" ("+n+")":""}`}return Ie(r?.code)??""}function to(r){if(!r)return"";let e=[];if(r.valueQuantity)e.push(ce(r.valueQuantity));else if(r.valueCodeableConcept)e.push(je(r.valueCodeableConcept));else{let t=Ie(r.valueString);t&&e.push(t)}return"component"in r&&e.push(r.component.map(t=>to(t)).join(" / ")),e.join(" / ").trim()}function Ie(r){return typeof r=="string"?r:void 0}function sc(r,e,t=1){return(ro(r,e)+t)*Math.pow(10,-e)}function ac(r,e,t=1){return(ro(r,e)-t)*Math.pow(10,-e)}function ro(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}var l={Address:"Address",Age:"Age",Annotation:"Annotation",Attachment:"Attachment",BackboneElement:"BackboneElement",CodeableConcept:"CodeableConcept",Coding:"Coding",ContactDetail:"ContactDetail",ContactPoint:"ContactPoint",Contributor:"Contributor",Count:"Count",DataRequirement:"DataRequirement",Distance:"Distance",Dosage:"Dosage",Duration:"Duration",Expression:"Expression",Extension:"Extension",HumanName:"HumanName",Identifier:"Identifier",MarketingStatus:"MarketingStatus",Meta:"Meta",Money:"Money",Narrative:"Narrative",ParameterDefinition:"ParameterDefinition",Period:"Period",Population:"Population",ProdCharacteristic:"ProdCharacteristic",ProductShelfLife:"ProductShelfLife",Quantity:"Quantity",Range:"Range",Ratio:"Ratio",Reference:"Reference",RelatedArtifact:"RelatedArtifact",SampledData:"SampledData",Signature:"Signature",SubstanceAmount:"SubstanceAmount",SystemString:"http://hl7.org/fhirpath/System.String",Timing:"Timing",TriggerDefinition:"TriggerDefinition",UsageContext:"UsageContext",base64Binary:"base64Binary",boolean:"boolean",canonical:"canonical",code:"code",date:"date",dateTime:"dateTime",decimal:"decimal",id:"id",instant:"instant",integer:"integer",markdown:"markdown",oid:"oid",positiveInt:"positiveInt",string:"string",time:"time",unsignedInt:"unsignedInt",uri:"uri",url:"url",uuid:"uuid"};function cc(r){for(let e of r.entry??[]){let t=e.resource;t.resourceType==="SearchParameter"&&vr(t)}}function hn(r){let e=Array.isArray(r)?r:r.entry?.map(t=>t.resource)??[];for(let t of e)t?.resourceType==="StructureDefinition"&&t.kind==="resource"&&io(t.type)}function io(r){let e=L.types[r];return e||(e={searchParamsDetails:{}},L.types[r]=e),!e.searchParams&&r!=="Binary"&&(e.searchParams={_id:{base:[r],code:"_id",type:"token",expression:r+".id"},_lastUpdated:{base:[r],code:"_lastUpdated",type:"date",expression:r+".meta.lastUpdated"},_compartment:{base:[r],code:"_compartment",type:"reference",expression:r+".meta.compartment"},_profile:{base:[r],code:"_profile",type:"uri",expression:r+".meta.profile"},_security:{base:[r],code:"_security",type:"token",expression:r+".meta.security"},_source:{base:[r],code:"_source",type:"uri",expression:r+".meta.source"},_tag:{base:[r],code:"_tag",type:"token",expression:r+".meta.tag"}}),e}function vr(r){for(let e of r.base??[]){let t=io(e);t.searchParams||(t.searchParams={}),t.searchParams[r.code]=r}}function Zt(r){let e=r.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?oo((r.base?.path??r.path)?.split(".")):e}function oo(r){return r.length===1?r[0]:r.map(I).join("")}function nr(r){return r.kind==="resource"&&r.name!=="Resource"&&r.name!=="DomainResource"}function uc(){return Object.values(un()).filter(nr).map(r=>r.name)}function lc(r){return L.types[r]?.searchParams}function pc(r,e){return L.types[r]?.searchParams?.[e]}function dc(r){let e=r.replaceAll("[x]","").split(".").pop();return so(e)}function so(r){let e;return r.length<100?e=r.match(/[A-Z]+(?![a-z])|[A-Z]?[a-z]+|\d+/g)??[]:e=r.split(/(?=[A-Z])/),e.map(hc).join(" ").replace("_"," ").replace(/\s+/g," ")}var fc=new Set(["ID","IP","PKCE","JWKS","URI","URL","OMB","UDI"]);function hc(r){let e=r.toUpperCase();return r===e?r:fc.has(e)?e:e.charAt(0)+r.slice(1)}function lt(r,e,t){let n=Ue(r,t);if(n)return ao(n.elements,e)}function ao(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 mc(r){return!!(r&&typeof r=="object"&&"type"in r&&"value"in r)}function O(r,e){return!(!r||typeof r!="object"||!("resourceType"in r)||e&&r.resourceType!==e)}function B(r,e){return r&&typeof r=="object"&&"reference"in r&&typeof r.reference=="string"?e?r.reference.match(new RegExp(`^${e}(/|\\?)`))!==null:!0:!1}var L={types:{}};function Fn(r){switch(r.type){case l.uuid:case l.uri:case l.url:case l.string:case l.oid:case l.markdown:case l.id:case l.code:case l.canonical:case l.base64Binary:case l.SystemString:case l.date:case l.dateTime:case l.instant:return r.value;case l.Identifier:return`${r.value.system??""}|${r.value.value}`;case l.Coding:return no(r.value);case l.CodeableConcept:return r.value.coding?.map(no).join(",")??r.value.text;case l.HumanName:return r.value.text?r.value.text:Ge(r.value);case l.unsignedInt:case l.positiveInt:case l.integer:case l.decimal:return r.value.toString();case l.boolean:return r.value?"true":"false";case l.Extension:return r.value.url;case l.ContactPoint:return r.value.value;case l.Quantity:case l.Age:case l.Count:case l.Duration:return`${r.value.value}|${r.value.system??""}|${r.value.code??r.value.unit??""}`;case l.Reference:return r.value.reference;default:return $e(r.value)?D(r.value):JSON.stringify(r)}}function no(r){return r?`${r.system??""}|${r.code}`:""}function He(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 ue=()=>[],k={empty:(r,e)=>h(e.length===0||e.every(t=>S(t.value))),hasValue:(r,e)=>h(e.length!==0),exists:(r,e,t)=>t?h(e.filter(n=>_(t.eval(r,[n]))).length>0):h(e.length>0&&e.every(n=>!S(n.value))),all:(r,e,t)=>h(e.every(n=>_(t.eval(r,[n])))),allTrue:(r,e)=>{for(let t of e)if(!t.value)return h(!1);return h(!0)},anyTrue:(r,e)=>{for(let t of e)if(t.value)return h(!0);return h(!1)},allFalse:(r,e)=>{for(let t of e)if(t.value)return h(!1);return h(!0)},anyFalse:(r,e)=>{for(let t of e)if(!t.value)return h(!0);return h(!1)},subsetOf:(r,e,t)=>{if(e.length===0)return h(!0);let n=t.eval(r,ke(r));return n.length===0?h(!1):h(e.every(i=>n.some(o=>o.value===i.value)))},supersetOf:(r,e,t)=>{let n=t.eval(r,ke(r));return n.length===0?h(!0):e.length===0?h(!1):h(n.every(i=>e.some(o=>o.value===i.value)))},count:(r,e)=>[{type:l.integer,value:e.length}],distinct:(r,e)=>{let t=[];for(let n of e)t.some(i=>i.value===n.value)||t.push(n);return t},isDistinct:(r,e)=>h(e.length===k.distinct(r,e).length),where:(r,e,t)=>e.filter(n=>_(t.eval(r,[n]))),select:(r,e,t)=>e.map(n=>t.eval({parent:r,variables:{$this:n}},[n])).flat(),repeat:ue,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,ke(r)),i=[];for(let o of e)!i.some(s=>s.value===o.value)&&n.some(s=>s.value===o.value)&&i.push(o);return i},exclude:(r,e,t)=>{if(!t)return e;let n=t.eval(r,ke(r)),i=[];for(let o of e)n.some(s=>s.value===o.value)||i.push(o);return i},union:(r,e,t)=>{if(!t)return e;let n=t.eval(r,ke(r));return at([...e,...n])},combine:(r,e,t)=>{if(!t)return e;let n=t.eval(r,ke(r));return[...e,...n]},htmlChecks:(r,e,t)=>[x(!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 _(o)?n.eval(r,e):i?i.eval(r,e):[]},toBoolean:(r,e)=>{if(e.length===0)return[];let[{value:t}]=Y(e,1);if(typeof t=="boolean")return[{type:l.boolean,value:t}];if(typeof t=="number"&&(t===0||t===1))return h(!!t);if(typeof t=="string"){let n=t.toLowerCase();if(["true","t","yes","y","1","1.0"].includes(n))return h(!0);if(["false","f","no","n","0","0.0"].includes(n))return h(!1)}return[]},convertsToBoolean:(r,e)=>e.length===0?[]:h(k.toBoolean(r,e).length===1),toInteger:(r,e)=>{if(e.length===0)return[];let[{value:t}]=Y(e,1);return typeof t=="number"?[{type:l.integer,value:t}]:typeof t=="string"&&/^[+-]?\d+$/.exec(t)?[{type:l.integer,value:parseInt(t,10)}]:typeof t=="boolean"?[{type:l.integer,value:t?1:0}]:[]},convertsToInteger:(r,e)=>e.length===0?[]:h(k.toInteger(r,e).length===1),toDate:(r,e)=>{if(e.length===0)return[];let[{value:t}]=Y(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:l.date,value:He(t)}]:[]},convertsToDate:(r,e)=>e.length===0?[]:h(k.toDate(r,e).length===1),toDateTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=Y(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:l.dateTime,value:He(t)}]:[]},convertsToDateTime:(r,e)=>e.length===0?[]:h(k.toDateTime(r,e).length===1),toDecimal:(r,e)=>{if(e.length===0)return[];let[{value:t}]=Y(e,1);return typeof t=="number"?[{type:l.decimal,value:t}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(t)?[{type:l.decimal,value:parseFloat(t)}]:typeof t=="boolean"?[{type:l.decimal,value:t?1:0}]:[]},convertsToDecimal:(r,e)=>e.length===0?[]:h(k.toDecimal(r,e).length===1),toQuantity:(r,e)=>{if(e.length===0)return[];let[{value:t}]=Y(e,1);return w(t)?[{type:l.Quantity,value:t}]:typeof t=="number"?[{type:l.Quantity,value:{value:t,unit:"1"}}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(t)?[{type:l.Quantity,value:{value:parseFloat(t),unit:"1"}}]:typeof t=="boolean"?[{type:l.Quantity,value:{value:t?1:0,unit:"1"}}]:[]},convertsToQuantity:(r,e)=>e.length===0?[]:h(k.toQuantity(r,e).length===1),toString:(r,e)=>{if(e.length===0)return[];let[{value:t}]=Y(e,1);return t==null?[]:w(t)?[{type:l.string,value:`${t.value} '${t.unit}'`}]:[{type:l.string,value:t.toString()}]},convertsToString:(r,e)=>e.length===0?[]:h(k.toString(r,e).length===1),toTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=Y(e,1);if(typeof t=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(t);if(n)return[{type:l.time,value:He("T"+n[1])}]}return[]},convertsToTime:(r,e)=>e.length===0?[]:h(k.toTime(r,e).length===1),indexOf:(r,e,t)=>q((n,i)=>n.indexOf(i),r,e,t),substring:(r,e,t,n)=>q((i,o,s)=>{let a=o,c=s?a+s:i.length;return a<0||a>=i.length?void 0:i.substring(a,c)},r,e,t,n),startsWith:(r,e,t)=>q((n,i)=>n.startsWith(i),r,e,t),endsWith:(r,e,t)=>q((n,i)=>n.endsWith(i),r,e,t),contains:(r,e,t)=>q((n,i)=>n.includes(i),r,e,t),upper:(r,e)=>q(t=>t.toUpperCase(),r,e),lower:(r,e)=>q(t=>t.toLowerCase(),r,e),replace:(r,e,t,n)=>q((i,o,s)=>i.replaceAll(o,s),r,e,t,n),matches:(r,e,t)=>q((n,i)=>!!new RegExp(i).exec(n),r,e,t),replaceMatches:(r,e,t,n)=>q((i,o,s)=>i.replaceAll(new RegExp(o,"g"),s.replaceAll(/\$\{(\w+)\}/g,"$<$1>")),r,e,t,n),length:(r,e)=>q(t=>t.length,r,e),toChars:(r,e)=>q(t=>t?t.split(""):void 0,r,e),encode:ue,decode:ue,escape:ue,unescape:ue,trim:ue,split:ue,join:(r,e,t)=>{let n=t?.eval(r,ke(r))[0]?.value??"";if(typeof n!="string")throw new Error("Separator must be a string.");return[{type:l.string,value:e.map(i=>i.value?.toString()??"").join(n)}]},abs:(r,e)=>X(Math.abs,r,e),ceiling:(r,e)=>X(Math.ceil,r,e),exp:(r,e)=>X(Math.exp,r,e),floor:(r,e)=>X(Math.floor,r,e),ln:(r,e)=>X(Math.log,r,e),log:(r,e,t)=>X((n,i)=>Math.log(n)/Math.log(i),r,e,t),power:(r,e,t)=>X(Math.pow,r,e,t),round:(r,e,...t)=>X((n,i=0)=>{if(typeof i!="number"||i<0)throw new Error("Invalid precision provided to round()");let o=Math.pow(10,i);return Math.round(n*o)/o},r,e,...t),sqrt:(r,e)=>X(Math.sqrt,r,e),truncate:(r,e)=>X(t=>t|0,r,e),children:ue,descendants:ue,trace:(r,e,t)=>e,now:()=>[{type:l.dateTime,value:new Date().toISOString()}],timeOfDay:()=>[{type:l.time,value:new Date().toISOString().substring(11)}],today:()=>[{type:l.date,value:new Date().toISOString().substring(0,10)}],between:(r,e,t,n,i)=>{let o=k.toDateTime(r,t.eval(r,e));if(o.length===0)throw new Error("Invalid start date");let s=k.toDateTime(r,n.eval(r,e));if(s.length===0)throw new Error("Invalid end date");let a=i.eval(r,e)[0]?.value;if(a!=="years"&&a!=="months"&&a!=="days")throw new Error("Invalid units");let c=pt(o[0].value,s[0].value);return[{type:l.Quantity,value:{value:c[a],unit:a}}]},is:(r,e,t)=>{let n="";return t instanceof j?n=t.name:t instanceof le&&(n=t.left.name+"."+t.right.name),n?e.map(i=>({type:l.boolean,value:ct(i,n)})):[]},not:(r,e)=>k.toBoolean(r,e).map(t=>({type:l.boolean,value:!t.value})),resolve:(r,e)=>e.map(t=>{let n=t.value,i;if(typeof n=="string")i=n;else if(typeof n=="object"){let o=n;if(o.resource)return x(o.resource);o.reference?i=o.reference:o.type&&o.identifier&&(i=`${o.type}?identifier=${o.identifier.system}|${o.identifier.value}`)}if(i?.includes("?")){let[o]=i.split("?");return{type:o,value:{resourceType:o}}}if(i?.includes("/")){let[o,s]=i.split("/");return{type:o,value:{resourceType:o,id:s}}}return{type:l.BackboneElement,value:void 0}}).filter(t=>!!t.value),as:(r,e)=>e,type:(r,e)=>e.map(({value:t})=>typeof t=="boolean"?{type:l.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof t=="number"?{type:l.BackboneElement,value:{namespace:"System",name:"Integer"}}:O(t)?{type:l.BackboneElement,value:{namespace:"FHIR",name:t.resourceType}}:{type:l.BackboneElement,value:null}),conformsTo:(r,e,t)=>{let n=t.eval(r,e)[0].value;if(!n.startsWith("http://hl7.org/fhir/StructureDefinition/"))throw new Error("Expected a StructureDefinition URL");let i=n.replace("http://hl7.org/fhir/StructureDefinition/","");return e.map(o=>({type:l.boolean,value:o.value?.resourceType===i}))},getResourceKey:(r,e)=>{let t=e[0].value;return t?.id?[{type:l.id,value:t.id}]:[]},getReferenceKey:(r,e,t)=>{let n=e[0].value;if(!n?.reference)return[];let i="";return t instanceof j&&(i=t.name),i&&!n.reference.startsWith(i+"/")?[]:[{type:l.id,value:ye(n)}]},extension:(r,e,t)=>{let n=t.eval(r,e)[0].value,i=e?.[0]?.value;if(i){let o=ie(i,n);if(o)return[{type:l.Extension,value:o}]}return[]}};function q(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=Y(t,1);if(typeof i!="string")throw new Error("String function cannot be called with non-string");let o=n.map(a=>a?.eval(e,t)[0]?.value),s=r(i,...o);return s===void 0?[]:Array.isArray(s)?s.map(x):[x(s)]}function X(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=Y(t,1),o=w(i),s=o?i.value:i;if(typeof s!="number")throw new Error("Math function cannot be called with non-number");let a=r(s,...n.map(p=>p.eval(e,t)[0]?.value)),c=o?l.Quantity:t[0].type,u=o?{...i,value:a}:a;return[{type:c,value:u}]}function Y(r,e){if(r.length!==e)throw new Error(`Expected ${e} arguments`);for(let t of r)if(t==null)throw new Error("Expected non-null argument");return r}function ke(r){let e=r;for(;e.parent?.variables.$this;)e=e.parent;return[e.variables.$this]}var Ve=class{constructor(e,t){this.original=e,this.child=t}eval(e,t){try{if(t.length>0){let n=[];for(let i of t)n.push(this.child.eval({parent:e,variables:{$this:i}},[i]));return n.flat()}else return this.child.eval(e,[])}catch(n){throw new Error(`FhirPathError on "${this.original}": ${n}`,{cause:n})}}toString(){return this.child.toString()}},F=class{constructor(e){this.value=e}eval(){return[this.value]}toString(){let e=this.value.value;return typeof e=="string"?`'${e}'`:e.toString()}},j=class{constructor(e){this.name=e}eval(e,t){if(this.name==="$this")return t;let n=this.getVariable(e);if(n)return[n];if(this.name.startsWith("%"))throw new Error(`Undefined variable ${this.name}`);return t.flatMap(i=>this.evalValue(i)).filter(i=>i?.value!==void 0)}getVariable(e){let t=e.variables[this.name];if(t!==void 0)return t;if(e.parent)return this.getVariable(e.parent)}evalValue(e){let t=e.value;if(!(!t||typeof t!="object"))return O(t,this.name)?e:P(e,this.name)}toString(){return this.name}},mt=class{eval(){return[]}toString(){return"{}"}},yt=class extends tt{constructor(e,t,n){super(e,t),this.impl=n}eval(e,t){return this.impl(this.child.eval(e,t))}toString(){return this.operator+this.child.toString()}},pe=class extends re{constructor(e,t){super("as",e,t)}eval(e,t){return k.ofType(e,this.left.eval(e,t),this.right)}},C=class extends re{},V=class extends C{constructor(e,t,n,i){super(e,t,n),this.impl=i}eval(e,t){let n=this.left.eval(e,t);if(n.length!==1)return[];let i=this.right.eval(e,t);if(i.length!==1)return[];let o=n[0].value,s=i[0].value,a=w(o)?o.value:o,c=w(s)?s.value:s,u=this.impl(a,c);return typeof u=="boolean"?h(u):w(o)?[{type:l.Quantity,value:{...o,value:u}}]:[x(u)]}},gt=class extends re{constructor(e,t){super("&",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t),o=[...n,...i];return o.length>0&&o.every(s=>typeof s.value=="string")?[{type:l.string,value:o.map(s=>s.value).join("")}]:o}},xt=class extends C{constructor(e,t){super("contains",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return h(n.some(o=>o.value===i[0].value))}},vt=class extends C{constructor(e,t){super("in",e,t)}eval(e,t){let n=G(this.left.eval(e,t)),i=this.right.eval(e,t);return n?h(i.some(o=>qe(n,o)[0].value)):[]}},le=class extends re{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()}`}},xe=class extends re{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])}},Tt=class extends C{constructor(e,t){super("=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Tn(n,i)}},St=class extends C{constructor(e,t){super("!=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Sn(n,i)}},bt=class extends C{constructor(e,t){super("~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return ur(n,i)}},Et=class extends C{constructor(e,t){super("!~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return vn(ur(n,i))}},ve=class extends C{constructor(e,t){super("is",e,t)}eval(e,t){let n=this.left.eval(e,t);if(n.length!==1)return[];let i=this.right.name;return h(ct(n[0],i))}},Rt=class extends C{constructor(e,t){super("and",e,t)}eval(e,t){let n=G(this.left.eval(e,t),"boolean"),i=G(this.right.eval(e,t),"boolean");return n?.value===!0&&i?.value===!0?h(!0):n?.value===!1||i?.value===!1?h(!1):[]}},Ct=class extends C{constructor(e,t){super("or",e,t)}eval(e,t){let n=G(this.left.eval(e,t),"boolean"),i=G(this.right.eval(e,t),"boolean");return n?.value===!1&&i?.value===!1?h(!1):n?.value||i?.value?h(!0):[]}},Pt=class extends C{constructor(e,t){super("xor",e,t)}eval(e,t){let n=G(this.left.eval(e,t),"boolean"),i=G(this.right.eval(e,t),"boolean");return!n||!i?[]:h(n.value!==i.value)}},wt=class extends C{constructor(e,t){super("implies",e,t)}eval(e,t){let n=G(this.left.eval(e,t),"boolean"),i=G(this.right.eval(e,t),"boolean");return i?.value===!0||n?.value===!1?h(!0):!n||!i?[]:h(!1)}},Z=class{constructor(e,t){this.name=e,this.args=t}eval(e,t){let n=k[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(", ")})`}},Te=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 yc=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],gc={"'":"'",'"':'"',"`":"`",r:"\r",n:`
2
2
  `,t:" ",f:"\f","\\":"\\"},de=class{constructor(e,t,n,i){this.result=[];this.pos={index:0,line:1,column:0};this.markStack=[];this.str=e,this.keywords=t,this.operators=n,this.dateTimeLiterals=!!i?.dateTimeLiterals,this.symbolRegex=i?.symbolRegex??/[$\w%]/}tokenize(){for(;this.pos.index<this.str.length;){let e=this.consumeToken();e&&this.result.push(e)}return this.result}prevToken(){return this.result.slice(-1)[0]}peekToken(){this.mark();let e=this.consumeToken();return this.reset(),e}consumeToken(){this.consumeWhitespace();let e=this.curr();if(!e)return;this.mark();let t=this.peek();return e==="/"&&t==="*"?this.consumeMultiLineComment():e==="/"&&t==="/"?this.consumeSingleLineComment():e==="'"||e==='"'||e==="`"?this.consumeString(e):e==="@"?this.consumeDateTime():/\d/.exec(e)?this.consumeNumber():/\w/.exec(e)?this.consumeSymbol():(e==="$"||e==="%")&&/\w/.exec(t)?this.consumeSymbol():(e==="$"||e==="%")&&(t==="'"||t==='"'||t==="`")?this.consumeQuotedSymbol(t):this.consumeOperator()}consumeWhitespace(){this.consumeWhile(()=>/\s/.exec(this.curr()))}consumeMultiLineComment(){let e=this.pos.index;return this.consumeWhile(()=>this.curr()!=="*"||this.peek()!=="/"),this.advance(),this.advance(),this.buildToken("Comment",this.str.substring(e,this.pos.index))}consumeSingleLineComment(){return this.buildToken("Comment",this.consumeWhile(()=>this.curr()!==`
3
3
  `))}consumeString(e){this.advance();let t="",n;for(;n=this.consumeChar(e);)t+=n;let i=this.buildToken(e==="`"?"Symbol":"String",t);return this.advance(),i}consumeChar(e){let t=this.curr();if(t==="\\"){this.advance();let n=this.curr(),i=gc[n];if(i!==void 0)return this.advance(),i;if(n==="u"){this.advance();let o=/^[0-9a-fA-F]{4}$/.exec(this.str.substring(this.pos.index,this.pos.index+4))?.[0];return o?(this.advance(),this.advance(),this.advance(),this.advance(),String.fromCodePoint(parseInt(o,16))):"u"}return this.consumeChar(e)}return t===e||!t?"":(this.advance(),t)}consumeQuotedSymbol(e){this.mark();let t=this.pos.index;this.advance(),this.consumeString(e);let n=this.str.substring(t,this.pos.index);return this.buildToken("Symbol",n)}consumeDateTime(){this.advance();let e=this.pos.index;this.consumeWhile(()=>/[\d-]/.exec(this.curr()));let t=!1,n=!1;if(this.curr()==="T"&&(t=!0,this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())),this.curr()==="."&&/\d/.exec(this.peek())&&(this.advance(),this.consumeWhile(()=>/\d/.exec(this.curr()))),this.curr()==="Z"?(n=!0,this.advance()):(this.curr()==="+"||this.curr()==="-")&&(n=!0,this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())))),this.pos.index===e)throw new Error("Invalid DateTime literal");let i=this.str.substring(e,this.pos.index);return i.endsWith("T")?i=i.substring(0,i.length-1):!i.startsWith("T")&&t&&!n&&(i+="Z"),this.buildToken("DateTime",i)}consumeNumber(){let e=this.pos.index,t="Number";return this.consumeWhile(()=>/\d/.exec(this.curr())),this.curr()==="."&&/\d/.exec(this.peek())&&(this.advance(),this.consumeWhile(()=>/\d/.exec(this.curr()))),this.curr()==="-"&&this.dateTimeLiterals?(this.pos.index=e-1,this.consumeDateTime()):(this.curr()===" "&&xc(this.peekToken())&&(t="Quantity",this.consumeToken()),this.buildToken(t,this.str.substring(e,this.pos.index)))}consumeSymbol(){let e=this.consumeWhile(()=>this.symbolRegex.exec(this.curr()));return this.prevToken()?.value!=="."&&this.keywords.includes(e)?this.buildToken(e,e):this.buildToken("Symbol",e)}consumeOperator(){let e=this.curr(),t=this.peek(),n=e+t;return this.operators.includes(n)?(this.advance(),this.advance(),this.buildToken(n,n)):(this.advance(),this.buildToken(e,e))}consumeWhile(e){let t=this.pos.index;for(;this.pos.index<this.str.length&&e();)this.advance();return this.str.substring(t,this.pos.index)}curr(){return this.str[this.pos.index]}peek(){return this.str[this.pos.index+1]??""}mark(){this.markStack.push({...this.pos})}reset(){let e=this.markStack.pop();if(!e)throw new Error("No mark to reset to");this.pos.index=e.index,this.pos.line=e.line,this.pos.column=e.column}advance(){this.pos.index++,this.curr()===`
4
- `?(this.pos.line++,this.pos.column=0):this.pos.column++}buildToken(e,t){let n=this.markStack.pop();if(!n)throw new Error("No mark for token");return{id:e,value:t,...n}}};function xc(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&yc.includes(r.value)))}var At=["true","false"],Ot=["!=","!~","<=",">=","{}","->"];function co(r){return new de(r,At,Ot).tokenize()}var g={FunctionCall:0,Dot:1,Indexer:2,UnaryAdd:3,UnarySubtract:3,Multiply:4,Divide:4,IntegerDivide:4,Modulo:4,Add:5,Subtract:5,Ampersand:5,Is:6,As:6,Union:7,GreaterThan:8,GreaterThanOrEquals:8,LessThan:8,LessThanOrEquals:8,Equals:9,Equivalent:9,NotEquals:9,NotEquivalent:9,In:10,Contains:10,And:11,Xor:12,Or:12,Implies:13,Arrow:100,Semicolon:200},vc={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},Tc={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new Te(e,t)},precedence:g.Indexer},Sc={parse(r,e){if(!(e instanceof j))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new Z(e.name,t)},precedence:g.FunctionCall};function bc(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 Qe(){return new rt().registerPrefix("String",{parse:(r,e)=>new F({type:l.string,value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new F({type:l.dateTime,value:He(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new F({type:l.Quantity,value:bc(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new F({type:e.value.includes(".")?l.decimal:l.integer,value:parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new F({type:l.boolean,value:!0})}).registerPrefix("false",{parse:()=>new F({type:l.boolean,value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new j(e.value)}).registerPrefix("{}",{parse:()=>new mt}).registerPrefix("(",vc).registerInfix("[",Tc).registerInfix("(",Sc).prefix("+",g.UnaryAdd,(r,e)=>new yt("+",e,t=>t)).prefix("-",g.UnarySubtract,(r,e)=>new V("-",e,e,(t,n)=>-n)).infixLeft(".",g.Dot,(r,e,t)=>new le(r,t)).infixLeft("/",g.Divide,(r,e,t)=>new V("/",r,t,(n,i)=>n/i)).infixLeft("*",g.Multiply,(r,e,t)=>new V("*",r,t,(n,i)=>n*i)).infixLeft("+",g.Add,(r,e,t)=>new V("+",r,t,(n,i)=>n+i)).infixLeft("-",g.Subtract,(r,e,t)=>new V("-",r,t,(n,i)=>n-i)).infixLeft("|",g.Union,(r,e,t)=>new xe(r,t)).infixLeft("=",g.Equals,(r,e,t)=>new Tt(r,t)).infixLeft("!=",g.NotEquals,(r,e,t)=>new St(r,t)).infixLeft("~",g.Equivalent,(r,e,t)=>new bt(r,t)).infixLeft("!~",g.NotEquivalent,(r,e,t)=>new Et(r,t)).infixLeft("<",g.LessThan,(r,e,t)=>new V("<",r,t,(n,i)=>n<i)).infixLeft("<=",g.LessThanOrEquals,(r,e,t)=>new V("<=",r,t,(n,i)=>n<=i)).infixLeft(">",g.GreaterThan,(r,e,t)=>new V(">",r,t,(n,i)=>n>i)).infixLeft(">=",g.GreaterThanOrEquals,(r,e,t)=>new V(">=",r,t,(n,i)=>n>=i)).infixLeft("&",g.Ampersand,(r,e,t)=>new gt(r,t)).infixLeft("and",g.And,(r,e,t)=>new Rt(r,t)).infixLeft("as",g.As,(r,e,t)=>new pe(r,t)).infixLeft("contains",g.Contains,(r,e,t)=>new xt(r,t)).infixLeft("div",g.Divide,(r,e,t)=>new V("div",r,t,(n,i)=>n/i|0)).infixLeft("in",g.In,(r,e,t)=>new vt(r,t)).infixLeft("is",g.Is,(r,e,t)=>new ve(r,t)).infixLeft("mod",g.Modulo,(r,e,t)=>new V("mod",r,t,(n,i)=>n%i)).infixLeft("or",g.Or,(r,e,t)=>new Ct(r,t)).infixLeft("xor",g.Xor,(r,e,t)=>new Pt(r,t)).infixLeft("implies",g.Implies,(r,e,t)=>new wt(r,t))}var Ec=Qe();function It(r){return new Ve(r,Ec.construct(co(r)).consumeAndParse())}function Rc(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]=x(t[n]))}return E(r,t).map(n=>n.value)}function E(r,e,t={},n=void 0){let i;if(typeof r=="string"){let o=n?.get(r);i=o??It(r),n&&!o&&n.set(r,i)}else i=r;return i.eval({variables:t},e).map(o=>({type:o.type,value:o.value?.valueOf()}))}function Cc(r){let e=[];for(let t of r)t.type===l.Range?e.push([t.value?.low?.value,t.value?.high?.value]):typeof t.value=="number"&&e.push([t.value,t.value]);return e}function Nn(r){let e=[];for(let t of r){let n=ut(t.value);n&&e.push(n)}return e}function Un(r){let e=new Set;for(let t of r){let n=_n(t);n&&e.add(n)}return Array.from(e)}function Bn(r){let e=new Set;for(let t of r){let{value:n}=t;n&&(ft(n)?e.add(n):B(n)?e.add(n.reference):$e(n)?e.add(D(n)):typeof n.identifier=="object"&&e.add(`identifier:${n.identifier.system}|${n.identifier.value}`))}return Array.from(e)}function Pc(r){let e=[];for(let t of r){let{value:n}=t;typeof n=="number"?e.push({value:n}):w(n)&&e.push(n)}return e}function wc(r){let e=new Set;for(let t of r)ft(t.value)&&e.add(t.value);return Array.from(e)}function Wn(r,e={}){let t=[];for(let n of r)Ac(e,t,n);return t}function Ac(r,e,t){let{type:n,value:i}=t;switch(n){case l.Identifier:Oc(e,r,i);break;case l.CodeableConcept:Ic(e,r,i);break;case l.Coding:uo(e,r,i);break;case l.ContactPoint:kc(e,r,i);break;default:De(e,r,void 0,i?.toString())}}function Oc(r,e,t){t?.type?.text&&De(r,e,e.textSearchSystem,t.type.text),De(r,e,t?.system,t?.value)}function Ic(r,e,t){if(t?.text&&De(r,e,e.textSearchSystem,t.text),t?.coding)for(let n of t.coding)uo(r,e,n)}function uo(r,e,t){t&&(t.display&&De(r,e,e.textSearchSystem,t.display),De(r,e,t.system,t.code))}function kc(r,e,t){t&&De(r,e,t.system,t.value?.toLocaleLowerCase())}function De(r,e,t,n){(t||n)&&!r.some(i=>i.system===t&&i.value===n)&&r.push({system:t,value:n&&e.caseInsensitive?n.toLocaleLowerCase():n})}var Vc=20,Dc=1e3,f={EQUALS:"eq",NOT_EQUALS:"ne",GREATER_THAN:"gt",LESS_THAN:"lt",GREATER_THAN_OR_EQUALS:"ge",LESS_THAN_OR_EQUALS:"le",STARTS_AFTER:"sa",ENDS_BEFORE:"eb",APPROXIMATELY:"ap",CONTAINS:"contains",STARTS_WITH:"sw",EXACT:"exact",TEXT:"text",NOT:"not",ABOVE:"above",BELOW:"below",IN:"in",NOT_IN:"not-in",OF_TYPE:"of-type",MISSING:"missing",PRESENT:"present",IDENTIFIER:"identifier",ITERATE:"iterate"},ho={contains:f.CONTAINS,exact:f.EXACT,above:f.ABOVE,below:f.BELOW,text:f.TEXT,not:f.NOT,in:f.IN,"not-in":f.NOT_IN,"of-type":f.OF_TYPE,missing:f.MISSING,identifier:f.IDENTIFIER,iterate:f.ITERATE},qn={eq:f.EQUALS,ne:f.NOT_EQUALS,lt:f.LESS_THAN,le:f.LESS_THAN_OR_EQUALS,gt:f.GREATER_THAN,ge:f.GREATER_THAN_OR_EQUALS,sa:f.STARTS_AFTER,eb:f.ENDS_BEFORE,ap:f.APPROXIMATELY,sw:f.STARTS_WITH};function ze(r,e){if(!r)throw new Error("Invalid search URL");let t="",n;if(typeof r=="string")if(r.includes("?")){let[s,a]=r.split("?");t=s,n=new URLSearchParams(a)}else t=r;else typeof r=="object"&&(t=r.pathname,n=r.searchParams);let i;t.includes("/")?i=t.split("/").filter(Boolean).pop():i=t;let o=[];if(n&&o.push(...n.entries()),e)for(let[s,a]of Object.entries(e))if(Array.isArray(a))for(let c of a)o.push([s,c]);else o.push([s,a??""]);return Mc(i,o)}function Mc(r,e){let t={resourceType:r};for(let[n,i]of e)_c(t,n,i);return t}function _c(r,e,t){let n,i,o=e.indexOf(":");if(o>=0?(n=e.substring(0,o),i=e.substring(o+1)):(n=e,i=""),n!=="_"){if(n==="_has"||e.includes(".")){r.filters=ae(r.filters,{code:e,operator:f.EQUALS,value:t});return}switch(n){case"_sort":Lc(r,t);break;case"_cursor":r.cursor=t;break;case"_count":r.count=parseInt(t,10);break;case"_offset":r.offset=parseInt(t,10);break;case"_total":r.total=t;break;case"_summary":t==="count"?(r.total="accurate",r.count=0):(t==="true"||t==="data"||t==="text")&&(r.summary=t);break;case"_include":{let s=lo(t);i==="iterate"&&(s.modifier=f.ITERATE),r.include=ae(r.include,s);break}case"_revinclude":{let s=lo(t);i==="iterate"&&(s.modifier=f.ITERATE),r.revInclude=ae(r.revInclude,s);break}case"_fields":case"_elements":r.fields=t.split(",");break;case"_type":r.types=t.split(",");break;case"_format":r.format=t;break;case"_pretty":r.pretty=t==="true";break;default:{let s=L.types[r.resourceType]?.searchParams?.[n];s?r.filters=ae(r.filters,mo(s,i,t)):r.filters=ae(r.filters,Nc(n,i,t))}}}}function Lc(r,e){for(let t of e.split(",")){let n,i=!1;t.startsWith("-")?(n=t.substring(1),i=!0):n=t,r.sortRules||(r.sortRules=[]),r.sortRules.push({code:n,descending:i})}}var Fc=[f.MISSING,f.PRESENT];function mo(r,e,t){if(Fc.includes(e))return{code:r.code,operator:e,value:t};switch(r.type){case"number":case"date":case"quantity":{let{operator:n,value:i}=Uc(t);if(!po(r,i))throw new d(b(`Invalid format for ${r.type} search parameter: ${i}`));return{code:r.code,operator:n,value:i}}case"reference":case"string":case"token":case"uri":if(!po(r,t))throw new d(b(`Invalid format for ${r.type} search parameter: ${t}`));return{code:r.code,operator:Bc(e),value:t};default:throw new Error("Unrecognized search parameter type: "+r.type)}}function Nc(r,e,t){let n=f.EQUALS;if(e)n=e;else if(t.length>=2){let i=t.substring(0,2);i in qn&&(t.length===2||t.at(2)?.match(/\d/))&&(n=i,t=t.substring(i.length))}return{code:r,operator:n,value:t}}function Uc(r){let e=r.substring(0,2),t=qn[e];return t?{operator:t,value:r.substring(2)}:{operator:f.EQUALS,value:r}}function Bc(r){return ho[r]??f.EQUALS}function lo(r){let e=r.split(":");if(e.includes("*"))throw new d(b("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new d(b(`Invalid include value '${r}': must be of the form ResourceType:search-parameter`));if(e.length===2)return{resourceType:e[0],searchParam:e[1]};if(e.length===3)return{resourceType:e[0],searchParam:e[1],targetType:e[2]};throw new d(b(`Invalid include value '${r}'`))}function po(r,e){switch(r.type){case"date":return Oe(e);default:return!0}}var Wc=/{{([^{}]+)}}/g;function qc(r,e){return r=r.replaceAll(Wc,(t,n)=>{let i=E(n,[],e);return i.length!==1?"":Fn(i[0])}),ze(r)}function jc(r){let e=[];return r.fields&&e.push("_fields="+r.fields.join(",")),r.filters&&r.filters.forEach(t=>e.push($c(t))),r.sortRules&&r.sortRules.length>0&&e.push(Gc(r.sortRules)),r.cursor!==void 0&&e.push("_cursor="+encodeURIComponent(r.cursor)),r.offset!==void 0&&r.offset!==0&&e.push("_offset="+r.offset),r.count!==void 0&&e.push("_count="+r.count),r.total!==void 0&&e.push("_total="+r.total),r.types&&r.types.length>0&&e.push("_type="+r.types.join(",")),r.include&&r.include.forEach(t=>e.push(fo("_include",t))),r.revInclude&&r.revInclude.forEach(t=>e.push(fo("_revinclude",t))),e.length===0?"":(ht(e),"?"+e.join("&"))}function $c(r){let e=r.operator in ho?":"+r.operator:"",t=r.operator!==f.EQUALS&&r.operator in qn?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function Gc(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function fo(r,e){return r+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function Je(r){let e=[],t="",n=!1;for(let i of r)n?(t+=i,n=!1):i==="\\"?n=!0:i===","?(e.push(t),t=""):t+=i;return e.push(t),e}function kt(r,e){if(e.resourceType!==r.resourceType)return!1;if(e.filters){for(let t of e.filters)if(!Hc(r,e,t))return!1}return!0}function Hc(r,e,t){let n=L.types[e.resourceType]?.searchParams?.[t.code];if(!n)return!1;let i=E(n.expression,[x(r)]);if(t.operator===f.MISSING||t.operator===f.PRESENT)return Qc(i,t);switch(n.type){case"reference":return zc(i,t);case"string":case"uri":return Xc(i,t);case"token":return Jc(i,t);case"date":return Zc(i,t);default:return!1}}function Qc(r,e){let t=r.length>0;return(e.operator===f.MISSING&&e.value==="false"||e.operator===f.PRESENT&&e.value==="true")===t}function zc(r,e){let t=Tr(e.operator);if(e.value===""&&r.length===0)return e.operator===f.EQUALS;let n=Bn(r);for(let i of Je(e.value)){let o=n.includes(i);if(!o&&e.code==="_compartment"&&(o=n.some(s=>s?.endsWith("/"+i))),o)return!t}return t}function Jc(r,e){let t=Wn(r),n=Je(e.value),i=Tr(e.operator);for(let o of t)for(let s of n)if(Kc(o,s))return!i;return i}function Kc(r,e){if(e.includes("|")){let[t,n]=e.split("|").map(i=>i.toLowerCase());return!t&&!n?!1:t?r.system?.toLowerCase()===t&&(!n||r.value?.toLowerCase()===n):!r.system&&r.value?.toLowerCase()===n}return r.value?.toLowerCase()===e.toLowerCase()}function Xc(r,e){let t=Un(r),n=Je(e.value),i=Tr(e.operator);for(let o of t)for(let s of n)if(Yc(o,s))return!i;return i}function Yc(r,e){return r.toLowerCase().includes(e.toLowerCase())}function Zc(r,e){let t=Nn(r),n=Je(e.value),i=Tr(e.operator);for(let o of t)for(let s of n)if(eu(o,e.operator,s))return!i;return i}function eu(r,e,t){if(!r)return!1;let n=ut(t);if(!n)return!1;let i=r.start??"0000",o=r.end??"9999",s=n.start,a=n.end;switch(e){case f.APPROXIMATELY:case f.EQUALS:case f.NOT_EQUALS:return i<a&&o>s;case f.LESS_THAN:return i<s;case f.GREATER_THAN:return o>a;case f.LESS_THAN_OR_EQUALS:return i<=a;case f.GREATER_THAN_OR_EQUALS:return o>=s;case f.STARTS_AFTER:return i>a;case f.ENDS_BEFORE:return o<s;default:return!1}}function Tr(r){return r===f.NOT_EQUALS||r===f.NOT}var tu={resourceType:"*"},yo=["DomainConfiguration","JsonWebKey","Login"],go=["PasswordChangeRequest","UserSecurityRequest","Project","ProjectMembership","User"],Se={READ:"read",VREAD:"vread",UPDATE:"update",DELETE:"delete",HISTORY:"history",CREATE:"create",SEARCH:"search"},xo=[Se.READ,Se.VREAD,Se.HISTORY,Se.SEARCH];function ru(r,e){return jn(r,Se.SEARCH,e)}function nu(r,e){return yo.includes(e)?!1:jn(r,Se.UPDATE,e)}function jn(r,e,t){return!!r.resource?.some(n=>To(n,t,e))}function iu(r,e){return!!vo(e,Se.UPDATE,r)}function vo(r,e,t){return t?t.resource?.find(n=>ou(r,e,n)):tu}function ou(r,e,t){let n=r.resourceType;return To(t,n,e)?n==="Binary"?!0:!(t.compartment&&!r.meta?.compartment?.some(i=>i.reference===t.compartment?.reference)||t.criteria&&!kt(r,ze(t.criteria))):!1}function To(r,e,t){return r.resourceType!==e&&(r.resourceType!=="*"||go.includes(e))?!1:r.interaction?r.interaction.includes(t):!r.readonly||xo.includes(t)}function N(){return typeof window<"u"}function su(){return typeof Buffer<"u"}function au(){return typeof window<"u"?window:void 0}function Sr(){return typeof Buffer<"u"?Buffer:void 0}var ee={assign(r){N()&&globalThis.location.assign(r)},reload(){N()&&globalThis.location.reload()},getSearch(){return N()?globalThis.location.search:""},getPathname(){return N()?globalThis.location.pathname:""},getLocation(){return N()?globalThis.location.toString():""},getOrigin(){return N()?globalThis.location.protocol+"//"+globalThis.location.host+"/":""}};function So(r){if(N()){let t=window.atob(r),n=Uint8Array.from(t,i=>i.charCodeAt(0));return new window.TextDecoder().decode(n)}let e=Sr();if(e)return e.from(r,"base64").toString("utf-8");throw new Error("Unable to decode base64")}function Vt(r){if(N()){let t=new window.TextEncoder().encode(r),n=String.fromCharCode.apply(null,t);return window.btoa(n)}let e=Sr();if(e)return e.from(r,"utf8").toString("base64");throw new Error("Unable to encode base64")}function cu(r){return Vt(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/[=]{1,2}$/,"")}function $n(r){r=r.padEnd(r.length+(4-r.length%4)%4,"=");let e=r.replace(/-/g,"+").replace(/_/g,"/");return So(e)}function br(){let r=new Uint32Array(28);return crypto.getRandomValues(r),An(r.buffer)}async function Gn(r){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(r))}function be(){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 bo(r){let e={};r=ge(r);for(let i of r.entry||[]){let o=i.resource;if(!o)continue;o.meta!==void 0&&(delete o.meta.author,delete o.meta.compartment,delete o.meta.lastUpdated,delete o.meta.project,delete o.meta.versionId,Object.keys(o.meta).length===0&&delete o.meta);let s=o?.id;s&&(e[s]=be(),i.fullUrl="urn:uuid:"+e[s],delete i.resource?.id)}let t=r.entry,n=JSON.stringify({resourceType:"Bundle",type:"transaction",entry:t?.map(i=>({fullUrl:i.fullUrl,request:{method:"POST",url:i.resource?.resourceType},resource:i.resource}))},(i,o)=>uu(i,o,e),2);return Eo(JSON.parse(n))}function uu(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 Eo(r){let e=pu(r),{sorted:t,cycles:n}=lu(e),i={};for(let s of r.entry??[])s.fullUrl&&(i[s.fullUrl]=s);let o=t.map(s=>i[s]);for(let s of n)for(let a of s){let c=i[a],u={...c,request:{...c.request,method:"PUT"}};o.push(u)}return{...r,entry:o}}var Ke={NotVisited:"NotVisited",Visiting:"Visiting",Visited:"Visited"};function lu(r){let e=[],t={},n=[];for(let o of Object.keys(r))t[o]=Ke.NotVisited;function i(o,s){if(t[o]===Ke.Visited)return!0;if(t[o]===Ke.Visiting){let c=s.lastIndexOf(o);return c!==-1&&n.push(s.slice(c)),!0}t[o]=Ke.Visiting,s.push(o);let a=!1;for(let c of r[o])i(c,s)||(a=!0);return t[o]=Ke.Visited,s.pop(),e.unshift(o),!a}for(let o in r)t[o]===Ke.NotVisited&&i(o,[]);return{sorted:e,cycles:n}}function Ro(r,e){for(let t in r)if(r[t]&&typeof r[t]=="object"){let n=r[t];if(B(n)){let i=n.reference;i.startsWith("urn:uuid:")&&e(i)}else Ro(n,e)}}function pu(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&&Ro(t.resource,i=>{e[i]&&e[i].push(n)})}return e}function du(r){r=ge(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=be());return bo(e)}function fu(r,e,t){return r.entry?.find(({resource:n})=>n?.resourceType===e&&n?.id===t)?.resource}var A={CSS:"text/css",DICOM:"application/dicom",FAVICON:"image/vnd.microsoft.icon",FHIR_JSON:"application/fhir+json",FORM_URL_ENCODED:"application/x-www-form-urlencoded",HL7_V2:"x-application/hl7-v2+er7",HTML:"text/html",JAVASCRIPT:"text/javascript",JSON:"application/json",JSON_PATCH:"application/json-patch+json",JWT:"application/jwt",MULTIPART_FORM_DATA:"multipart/form-data",PNG:"image/png",SCIM_JSON:"application/scim+json",SVG:"image/svg+xml",TEXT:"text/plain",TYPESCRIPT:"text/typescript",PING:"x-application/ping",XML:"text/xml",CDA_XML:"application/cda+xml",OCTET_STREAM:"application/octet-stream"};var Er=class{constructor(){this.listeners={}}addEventListener(e,t){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)}removeEventListener(e,t){let n=this.listeners[e];if(n){for(let i=0;i<n.length;i++)if(n[i]===t){n.splice(i,1);return}}}dispatchEvent(e){let t=this.listeners[e.type];if(t)for(let n of t)n.call(this,e);return!e.defaultPrevented}removeAllListeners(){this.listeners={}}},H=class{constructor(){this.emitter=new Er}dispatchEvent(e){this.emitter.dispatchEvent(e)}addEventListener(e,t){this.emitter.addEventListener(e,t)}removeEventListener(e,t){this.emitter.removeEventListener(e,t)}removeAllListeners(){this.emitter.removeAllListeners()}};var Rr={"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"},Co=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],Cr=["DiagnosticReport-update"];function Hn(r){return Cr.includes(r)}function Qn(r){if(Cr.includes(r))throw new d(y(`'context.version' is required for '${r}'.`))}var Po={"Patient-open":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"Patient-close":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"ImagingStudy-open":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"ImagingStudy-close":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"Encounter-open":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"Encounter-close":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"DiagnosticReport-open":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-close":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-select":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},select:{resourceType:"*",reference:!0,manyAllowed:!0}},"DiagnosticReport-update":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},updates:{resourceType:"Bundle"}},syncerror:{operationoutcome:{resourceType:"OperationOutcome"}}};function wo(r){return Co.includes(r)}function zn(r){return!!r.endpoint}function Pr(r){if(!Mt(r))throw new d(y("subscriptionRequest must be an object conforming to SubscriptionRequest type."));let{channelType:e,mode:t,topic:n,events:i}=r,o={"hub.channel.type":e,"hub.mode":t,"hub.topic":n,"hub.events":i.join(",")};return zn(r)&&(o.endpoint=r.endpoint),new URLSearchParams(o).toString()}function Mt(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(!Rr[o])return!1;return!(zn(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function hu(r,e,t,n){if(typeof e!="object")throw new d(y(`context[${t}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.id&&typeof e.id=="string"))throw new d(y(`context[${t}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new d(y(`context[${t}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!wo(e.resourceType))throw new d(y(`context[${t}] is invalid. Resource must contain a valid FHIRcast resource type. Resource type is not a known resource type.`));if(i&&e.resourceType!==i)throw new d(y(`context[${t}] is invalid. context[${t}] for the '${r}' event should contain resource of type ${i}.`))}}function mu(r,e,t,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),n.reference){if(!B(e.reference))throw new d(y(`context[${t}] is invalid. Expected key '${e.key}' to be a reference.`))}else hu(r,e.resource,t,n)}function yu(r,e){let t=new Map,n=Po[r];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new d(y(`Key '${o}' not found for event '${r}'. Make sure to add only valid keys.`));mu(r,e[i],i,n[o],t)}for(let[i,o]of Object.entries(n)){if(!(o.optional||t.has(i)))throw new d(y(`Missing required key '${i}' on context for '${r}' event.`));if(!o.manyAllowed&&(t.get(i)??0)>1)throw new d(y(`${t.get(i)} context entries with key '${i}' found for the '${r}' event when schema only allows for 1.`))}}function wr(r,e,t,n){if(!(r&&typeof r=="string"))throw new d(y("Must provide a topic."));if(!Rr[e])throw new d(y(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(Rr).join(", ")}`));if(typeof t!="object")throw new d(y("context must be a context object or array of context objects."));if(Cr.includes(e)&&!n)throw new d(y(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(t)?t:[t];return yu(e,i),{timestamp:new Date().toISOString(),id:be(),event:{"hub.topic":r,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var Dt=class extends H{constructor(e){if(super(),this.subRequest=e,!e.endpoint)throw new d(y("Subscription request should contain an endpoint."));if(!Mt(e))throw new d(y("Subscription request failed validation."));let t=new WebSocket(e.endpoint);t.addEventListener("open",()=>{this.dispatchEvent({type:"connect"}),t.addEventListener("message",n=>{let i=JSON.parse(n.data);if(i["hub.topic"])return;let o=i;o.event["hub.event"]!=="heartbeat"&&(this.dispatchEvent({type:"message",payload:o}),t.send(JSON.stringify({id:i?.id,timestamp:new Date().toISOString()})))}),t.addEventListener("close",()=>{this.dispatchEvent({type:"disconnect"})})}),this.websocket=t}disconnect(){this.websocket.close()}};function gu(r){return JSON.parse($n(r))}function Jn(r){return r.split(".").length===3}function _t(r){let[e,t,n]=r.split(".");return gu(t)}function Kn(r){try{return typeof _t(r).login_id=="string"}catch{return!1}}function Xn(r){try{let t=_t(r).exp;return typeof t=="number"?t*1e3:void 0}catch{return}}var Lt=class{constructor(e){this.medplum=e}async get(e){return this.medplum.get(`keyvalue/v1/${e}`)}async set(e,t){await this.medplum.put(`keyvalue/v1/${e}`,t,A.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var Ao;Ao=Symbol.toStringTag;var M=class{constructor(e){this[Ao]="ReadablePromise";this.status="pending";this.suspender=e.then(t=>(this.status="success",this.response=t,t),t=>{throw this.status="error",this.error=t,t})}isPending(){return this.status==="pending"}isOk(){return this.status==="success"}read(){switch(this.status){case"pending":throw this.suspender;case"error":throw this.error;default:return this.response}}then(e,t){return this.suspender.then(e,t)}catch(e){return this.suspender.catch(e)}finally(e){return this.suspender.finally(e)}};var Xe=class{constructor(e){this.storage=e??(typeof localStorage<"u"?localStorage:new Ar)}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?dt(t):void 0)}},Ar=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]}},Yn=class extends Xe{constructor(){super();this.initResolve=()=>{};this.initialized=!1,this.initPromise=new Promise(t=>{this.initResolve=t})}setInitialized(){this.initialized||(this.initResolve(),this.initialized=!0)}getInitPromise(){return this.initPromise}get isInitialized(){return this.initialized}};var Ye={Event:typeof globalThis.Event<"u"?globalThis.Event:void 0,ErrorEvent:void 0,CloseEvent:void 0},Oo=!1;function xu(){if(typeof globalThis.Event>"u")throw new Error("Unable to lazy init events for ReconnectingWebSocket. globalThis.Event is not defined yet");Ye.Event=globalThis.Event,Ye.ErrorEvent=class extends Event{constructor(e,t){super("error",t),this.message=e.message,this.error=e}},Ye.CloseEvent=class extends Event{constructor(t=1e3,n="",i){super("close",i);this.wasClean=!0;this.code=t,this.reason=n}}}function ko(r,e){if(!r)throw new Error(e)}function Or(r){return new r.constructor(r.type,r)}var Me={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},Io=!1,Ft=class r extends H{constructor(t,n,i={}){Oo||(xu(),Oo=!0);super();this._retryCount=-1;this._shouldReconnect=!0;this._connectLock=!1;this._closeCalled=!1;this._messageQueue=[];this._debugLogger=console.log.bind(console);this.onclose=null;this.onerror=null;this.onmessage=null;this.onopen=null;this._handleOpen=t=>{this._debug("open event");let{minUptime:n=Me.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),n),ko(this._ws,"WebSocket is not defined"),this._ws.binaryType=this._binaryType,this._messageQueue.forEach(i=>this._ws?.send(i)),this._messageQueue=[],this.onopen&&this.onopen(t),this.dispatchEvent(Or(t))};this._handleMessage=t=>{this._debug("message event"),this.onmessage&&this.onmessage(t),this.dispatchEvent(Or(t))};this._handleError=t=>{this._debug("error event",t.message),this._disconnect(void 0,t.message==="TIMEOUT"?"timeout":void 0),this.onerror&&this.onerror(t),this._debug("exec error listeners"),this.dispatchEvent(Or(t)),this._connect()};this._handleClose=t=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(t),this.dispatchEvent(Or(t))};this._url=t,this._protocols=n,this._options=i,this._options.startClosed&&(this._shouldReconnect=!1),this._options.binaryType?this._binaryType=this._options.binaryType:this._binaryType="blob",this._options.debugLogger&&(this._debugLogger=this._options.debugLogger),this._connect()}static get CONNECTING(){return 0}static get OPEN(){return 1}static get CLOSING(){return 2}static get CLOSED(){return 3}get CONNECTING(){return r.CONNECTING}get OPEN(){return r.OPEN}get CLOSING(){return r.CLOSING}get CLOSED(){return r.CLOSED}get binaryType(){return this._ws?this._ws.binaryType:this._binaryType}set binaryType(t){this._binaryType=t,this._ws&&(this._ws.binaryType=t)}get retryCount(){return Math.max(this._retryCount,0)}get bufferedAmount(){return this._messageQueue.reduce((n,i)=>(typeof i=="string"?n+=i.length:i instanceof Blob?n+=i.size:n+=i.byteLength,n),0)+(this._ws?.bufferedAmount??0)}get extensions(){return this._ws?.extensions??""}get protocol(){return this._ws?.protocol??""}get readyState(){return this._ws?this._ws.readyState:this._options.startClosed?r.CLOSED:r.CONNECTING}get url(){return this._ws?this._ws.url:""}get shouldReconnect(){return this._shouldReconnect}close(t=1e3,n){if(this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),!this._ws){this._debug("close enqueued: no ws instance");return}if(this._ws.readyState===this.CLOSED){this._debug("close: already closed");return}this._ws.close(t,n)}reconnect(t,n){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED?this._connect():(this._disconnect(t,n),this._connect())}send(t){if(this._ws&&this._ws.readyState===this.OPEN)this._debug("send",t),this._ws.send(t);else{let{maxEnqueuedMessages:n=Me.maxEnqueuedMessages}=this._options;this._messageQueue.length<n&&(this._debug("enqueue",t),this._messageQueue.push(t))}}_debug(...t){this._options.debug&&this._debugLogger("RWS>",...t)}_getNextDelay(){let{reconnectionDelayGrowFactor:t=Me.reconnectionDelayGrowFactor,minReconnectionDelay:n=Me.minReconnectionDelay,maxReconnectionDelay:i=Me.maxReconnectionDelay}=this._options,o=0;return this._retryCount>0&&(o=n*Math.pow(t,this._retryCount-1),o>i&&(o=i)),this._debug("next delay",o),o}_wait(){return new Promise(t=>{setTimeout(t,this._getNextDelay())})}_connect(){if(this._connectLock||!this._shouldReconnect)return;this._connectLock=!0;let{maxRetries:t=Me.maxRetries,connectionTimeout:n=Me.connectionTimeout}=this._options;if(this._retryCount>=t){this._debug("max retries reached",this._retryCount,">=",t);return}this._retryCount++,this._debug("connect",this._retryCount),this._removeListeners(),this._wait().then(()=>{if(this._closeCalled){this._connectLock=!1;return}!this._options.WebSocket&&typeof WebSocket>"u"&&!Io&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),Io=!0);let i=this._options.WebSocket||WebSocket;this._debug("connect",{url:this._url,protocols:this._protocols}),this._ws=this._protocols?new i(this._url,this._protocols):new i(this._url),this._ws.binaryType=this._binaryType,this._connectLock=!1,this._addListeners(),this._connectTimeout=setTimeout(()=>this._handleTimeout(),n)}).catch(i=>{this._connectLock=!1,this._handleError(new Ye.ErrorEvent(Error(i.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new Ye.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(t=1e3,n){if(this._clearTimeouts(),!!this._ws){this._removeListeners();try{this._ws.close(t,n),this._handleClose(new Ye.CloseEvent(t,n,this))}catch{}}}_acceptOpen(){this._debug("accept open"),this._retryCount=0}_removeListeners(){this._ws&&(this._debug("removeListeners"),this._ws.removeEventListener("open",this._handleOpen),this._ws.removeEventListener("close",this._handleClose),this._ws.removeEventListener("message",this._handleMessage),this._ws.removeEventListener("error",this._handleError))}_addListeners(){this._ws&&(this._debug("addListeners"),this._ws.addEventListener("open",this._handleOpen),this._ws.addEventListener("close",this._handleClose),this._ws.addEventListener("message",this._handleMessage),this._ws.addEventListener("error",this._handleError))}_clearTimeouts(){clearTimeout(this._connectTimeout),clearTimeout(this._uptimeTimeout)}};var vu=5e3,Ze=class extends H{constructor(...e){super(),this.criteria=new Set(e)}getCriteria(){return this.criteria}_addCriteria(e){this.criteria.add(e)}_removeCriteria(e){this.criteria.delete(e)}},Zn=class{constructor(e,t){this.connecting=!1;this.criteria=e,this.emitter=new Ze(e),this.refCount=1,this.subscriptionProps=t?{...t}:void 0}clearAttachedSubscription(){this.subscriptionId=void 0,this.token=void 0}},Nt=class{constructor(e,t,n){this.pingTimer=void 0;this.waitingForPong=!1;if(!(e instanceof Ut))throw new d(y("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(t).toString()}catch{throw new d(y("Not a valid URL"))}let o=n?.ReconnectingWebSocket?new n.ReconnectingWebSocket(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger}):new Ft(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger});this.medplum=e,this.ws=o,this.masterSubEmitter=new Ze,this.criteriaEntries=new Map,this.criteriaEntriesBySubscriptionId=new Map,this.wsClosed=!1,this.pingIntervalMs=n?.pingIntervalMs??vu,this.currentProfile=e.getProfile(),this.setupListeners()}setupListeners(){let e=this.ws;e.addEventListener("message",t=>{try{let n=JSON.parse(t.data);if(n.type==="pong"){this.waitingForPong=!1;return}let i=n,o=i?.entry?.[0]?.resource;if(o.type==="heartbeat"){this.masterSubEmitter?.dispatchEvent({type:"heartbeat",payload:i});return}if(o.type==="handshake"){let a=ye(o.subscription),c={type:"connect",payload:{subscriptionId:a}};this.masterSubEmitter?.dispatchEvent(c);let u=this.criteriaEntriesBySubscriptionId.get(a);if(!u){console.warn("Received handshake for criteria the SubscriptionManager is not listening for yet");return}u.connecting=!1,u.emitter.dispatchEvent({...c});return}this.masterSubEmitter?.dispatchEvent({type:"message",payload:i});let s=this.criteriaEntriesBySubscriptionId.get(ye(o.subscription));if(!s){console.warn("Received notification for criteria the SubscriptionManager is not listening for");return}s.emitter.dispatchEvent({type:"message",payload:i})}catch(n){console.error(n);let i={type:"error",payload:n};this.masterSubEmitter?.dispatchEvent(i);for(let o of this.getAllCriteriaEmitters())o.dispatchEvent({...i})}}),e.addEventListener("error",()=>{let t={type:"error",payload:new d(en(new Error("WebSocket error")))};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t})}),e.addEventListener("close",()=>{let t={type:"close"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=void 0,this.waitingForPong=!1),this.wsClosed&&(this.criteriaEntries.clear(),this.criteriaEntriesBySubscriptionId.clear(),this.masterSubEmitter?.removeAllListeners())}),e.addEventListener("open",()=>{let t={type:"open"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.refreshAllSubscriptions().catch(console.error),this.pingTimer||(this.pingTimer=setInterval(()=>{if(this.waitingForPong){this.waitingForPong=!1,e.reconnect();return}e.send(JSON.stringify({type:"ping"})),this.waitingForPong=!0},this.pingIntervalMs))}),this.medplum.addEventListener("change",()=>{let t=this.medplum.getProfile();this.currentProfile&&t===void 0?this.ws.close():t&&this.currentProfile?.id!==t.id&&this.ws.reconnect(),this.currentProfile=t})}emitError(e,t){let n={type:"error",payload:t};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}maybeEmitDisconnect(e){let{subscriptionId:t}=e;if(t){let n={type:"disconnect",payload:{subscriptionId:t}};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}else console.warn("Called disconnect for `CriteriaEntry` before `subscriptionId` was present.")}async getTokenForCriteria(e){let t=e?.subscriptionId;t||(t=(await this.medplum.createResource({...e.subscriptionProps,resourceType:"Subscription",status:"active",reason:`WebSocket subscription for ${D(this.medplum.getProfile())}`,channel:{type:"websocket"},criteria:e.criteria})).id);let{parameter:n}=await this.medplum.get(`fhir/R4/Subscription/${t}/$get-ws-binding-token`),i=n?.find(s=>s.name==="token")?.valueString,o=n?.find(s=>s.name==="websocket-url")?.valueUrl;if(!i)throw new d(y("Failed to get token"));if(!o)throw new d(y("Failed to get URL from $get-ws-binding-token"));return[t,i]}maybeGetCriteriaEntry(e,t){let n=this.criteriaEntries.get(e);if(n){if(!t)return n.bareCriteria;for(let i of n.criteriaWithProps)if(oe(t,i.subscriptionProps))return i}}getAllCriteriaEmitters(){let e=[];for(let t of this.criteriaEntries.values()){t.bareCriteria&&e.push(t.bareCriteria.emitter);for(let n of t.criteriaWithProps)e.push(n.emitter)}return e}addCriteriaEntry(e){let{criteria:t,subscriptionProps:n}=e,i;this.criteriaEntries.has(t)?i=this.criteriaEntries.get(t):(i={criteriaWithProps:[]},this.criteriaEntries.set(t,i)),n?i.criteriaWithProps.push(e):i.bareCriteria=e}removeCriteriaEntry(e){let{criteria:t,subscriptionProps:n,subscriptionId:i,token:o}=e;if(!this.criteriaEntries.has(t))return;let s=this.criteriaEntries.get(t);n?s.criteriaWithProps=s.criteriaWithProps.filter(a=>{let c=a.subscriptionProps;return!oe(n,c)}):s.bareCriteria=void 0,!s.bareCriteria&&s.criteriaWithProps.length===0&&(this.criteriaEntries.delete(t),this.masterSubEmitter?._removeCriteria(t)),i&&this.criteriaEntriesBySubscriptionId.delete(i),o&&this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"unbind-from-token",payload:{token:o}}))}async subscribeToCriteria(e){if(!(this.ws.readyState!==WebSocket.OPEN||e.connecting)){e.connecting=!0;try{let[t,n]=await this.getTokenForCriteria(e);e.subscriptionId=t,e.token=n,this.criteriaEntriesBySubscriptionId.set(t,e),this.ws.send(JSON.stringify({type:"bind-with-token",payload:{token:n}}))}catch(t){console.error(Pe(t)),this.emitError(e,t),this.removeCriteriaEntry(e)}}}async refreshAllSubscriptions(){this.criteriaEntriesBySubscriptionId.clear();for(let e of this.criteriaEntries.values())for(let t of[...e.bareCriteria?[e.bareCriteria]:[],...e.criteriaWithProps])t.clearAttachedSubscription(),await this.subscribeToCriteria(t)}addCriteria(e,t){this.masterSubEmitter&&this.masterSubEmitter._addCriteria(e);let n=this.maybeGetCriteriaEntry(e,t);if(n)return n.refCount+=1,n.emitter;let i=new Zn(e,t);return this.addCriteriaEntry(i),this.subscribeToCriteria(i).catch(console.error),i.emitter}removeCriteria(e,t){let n=this.maybeGetCriteriaEntry(e,t);if(!n){console.warn("Criteria not known to `SubscriptionManager`. Possibly called remove too many times.");return}n.refCount-=1,!(n.refCount>0)&&(this.maybeEmitDisconnect(n),this.removeCriteriaEntry(n))}getWebSocket(){return this.ws}closeWebSocket(){this.wsClosed||(this.wsClosed=!0,this.ws.close())}reconnectWebSocket(){this.ws.reconnect(),this.wsClosed=!1}getCriteriaCount(){return this.getAllCriteriaEmitters().length}getMasterEmitter(){return this.masterSubEmitter||(this.masterSubEmitter=new Ze(...Array.from(this.criteriaEntries.keys()))),this.masterSubEmitter}};async function Tu({resource:r,subscription:e,context:t,getPreviousResource:n,logger:i}){if(!Su(e,i))return i?.debug("Ignore subscription without recognized channel type"),!1;let o=e.criteria;if(!o)return i?.debug("Ignore rest hook missing criteria"),!1;let s=ze(o);if(r.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${r.resourceType}")`),!1;if(!await Vo(e,r,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let c=ie(e,"https://medplum.com/fhir/StructureDefinition/subscription-supported-interaction");return c&&c.valueCode!==t.interaction?(i?.debug(`Ignore rest hook for different interaction (wanted "${c.valueCode}", received "${t.interaction}")`),!1):kt(r,s)?e.meta?.account&&r.meta?.account?.reference!==e.meta.account.reference?(i?.warn("Subscription suppressed due to mismatched meta.account",{subscriptionId:e.id,resourceId:r.id}),!1):!0:!1}function Su(r,e){let t=r.channel?.type;return t==="rest-hook"?r.channel?.endpoint?!0:(e?.debug("Ignore rest-hook missing URL"),!1):t==="websocket"}async function Vo(r,e,t){let n=ie(r,"https://medplum.com/fhir/StructureDefinition/fhir-path-criteria-expression");if(!n?.valueString)return!0;let i=await t(e),o={"%current":x(e),"%previous":x(i??{})};return E(n.valueString,[x(e)],o)?.[0]?.value===!0}var Ir="4.5.0-e2f7d4ec4",bu="medplum-cli",Lo=A.FHIR_JSON+", */*; q=0.1",Eu="https://api.medplum.com/",Ru=1e3,Cu=6e4,Pu=0,wu=3e5,Au="Binary/",Do={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},_e={ClientCredentials:"client_credentials",AuthorizationCode:"authorization_code",RefreshToken:"refresh_token",JwtBearer:"urn:ietf:params:oauth:grant-type:jwt-bearer",TokenExchange:"urn:ietf:params:oauth:grant-type:token-exchange"},Fo={AccessToken:"urn:ietf:params:oauth:token-type:access_token",RefreshToken:"urn:ietf:params:oauth:token-type:refresh_token",IdToken:"urn:ietf:params:oauth:token-type:id_token",Saml1Token:"urn:ietf:params:oauth:token-type:saml1",Saml2Token:"urn:ietf:params:oauth:token-type:saml2"},Ou={ClientSecretBasic:"client_secret_basic",ClientSecretPost:"client_secret_post",ClientSecretJwt:"client_secret_jwt",PrivateKeyJwt:"private_key_jwt",None:"none"},No={JwtBearer:"urn:ietf:params:oauth:client-assertion-type:jwt-bearer"},Ut=class extends H{constructor(t){super();this.initComplete=!0;if(t?.baseUrl&&!t.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");this.options=t??{},this.fetch=t?.fetch??Iu(),this.storage=t?.storage??new Xe,this.createPdfImpl=t?.createPdf,this.baseUrl=yr(t?.baseUrl??Eu),this.fhirBaseUrl=W(this.baseUrl,t?.fhirUrlPath??"fhir/R4"),this.authorizeUrl=W(this.baseUrl,t?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=W(this.baseUrl,t?.tokenUrl??"oauth2/token"),this.logoutUrl=W(this.baseUrl,t?.logoutUrl??"oauth2/logout"),this.fhircastHubUrl=W(this.baseUrl,t?.fhircastHubUrl??"fhircast/STU3"),this.clientId=t?.clientId??"",this.clientSecret=t?.clientSecret??"",this.credentialsInHeader=t?.authCredentialsMethod==="header",this.defaultHeaders=t?.defaultHeaders??{},this.onUnauthenticated=t?.onUnauthenticated,this.refreshGracePeriod=t?.refreshGracePeriod??wu,this.cacheTime=t?.cacheTime??(N()?Cu:Pu),this.cacheTime>0?this.requestCache=new Re(t?.resourceCacheSize??Ru):this.requestCache=void 0,t?.autoBatchTime?(this.autoBatchTime=t.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0),t?.accessToken&&this.setAccessToken(t.accessToken),this.storage.getInitPromise===void 0?(t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initPromise=Promise.resolve(),this.dispatchEvent({type:"storageInitialized"})):(this.initComplete=!1,this.initPromise=this.storage.getInitPromise(),this.initPromise.then(()=>{t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initComplete=!0,this.dispatchEvent({type:"storageInitialized"})}).catch(n=>{console.error(n),this.initComplete=!0,this.dispatchEvent({type:"storageInitFailed",payload:{error:n}})})),this.setupStorageListener()}get isInitialized(){return this.initComplete}getInitPromise(){return this.initPromise}async attemptResumeActiveLogin(){let t=this.getActiveLogin();t&&(this.setAccessToken(t.accessToken,t.refreshToken),await this.refreshProfile())}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}getFhircastHubUrl(){return this.fhircastHubUrl}getDefaultHeaders(){return this.defaultHeaders}clear(){this.storage.clear(),N()&&sessionStorage.clear(),this.clearActiveLogin()}clearActiveLogin(){this.storage.setString("activeLogin",void 0),this.requestCache?.clear(),this.accessToken=void 0,this.refreshToken=void 0,this.refreshPromise=void 0,this.accessTokenExpires=void 0,this.sessionDetails=void 0,this.medplumServer=void 0,this.dispatchEvent({type:"change"})}invalidateUrl(t){t=t.toString(),this.requestCache?.delete(t)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(t){let n=W(this.fhirBaseUrl,t);if(this.requestCache)for(let i of this.requestCache.keys())(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache.delete(i)}get(t,n={}){t=t.toString();let i=this.getCacheEntry(t,n);if(i)return i.value;let o;t.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue&&!n.disableAutoBatch?o=new Promise((a,c)=>{this.autoBatchQueue.push({method:"GET",url:t.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:c}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):o=this.request("GET",t,n);let s=new M(o);return this.setCacheEntry(t,s),s}post(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("POST",t,o)}put(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("PUT",t,o)}patch(t,n,i={}){return t=t.toString(),this.setRequestBody(i,n),this.setRequestContentType(i,A.JSON_PATCH),this.invalidateUrl(t),this.request("PATCH",t,i)}delete(t,n){return t=t.toString(),this.invalidateUrl(t),this.request("DELETE",t,n)}async startNewUser(t,n){let{codeChallengeMethod:i,codeChallenge:o}=await this.startPkce();return this.post("auth/newuser",{...t,clientId:t.clientId??this.clientId,codeChallengeMethod:i,codeChallenge:o},void 0,n)}async startNewProject(t,n){return this.post("auth/newproject",t,void 0,n)}async startNewPatient(t,n){return this.post("auth/newpatient",t,void 0,n)}async startLogin(t,n){return this.post("auth/login",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async startGoogleLogin(t,n){return this.post("auth/google",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async ensureCodeChallenge(t){return t.codeChallenge?t:{...t,...await this.startPkce()}}async signOut(){await this.post(this.logoutUrl,{}),this.clear()}async signInWithRedirect(t){let i=new URLSearchParams(ee.getSearch()).get("code");if(!i){await this.requestAuthorization(t);return}return this.processCode(i)}signOutWithRedirect(){ee.assign(this.logoutUrl)}async signInWithExternalAuth(t,n,i,o,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),ee.assign(this.getExternalAuthRedirectUri(t,n,i,a,s))}async exchangeExternalAccessToken(t,n){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");return this.fetchTokens({grant_type:_e.TokenExchange,subject_token_type:Fo.AccessToken,client_id:n,subject_token:t})}getExternalAuthRedirectUri(t,n,i,o,s=!0){let a=new URL(t);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",n),a.searchParams.set("redirect_uri",i),a.searchParams.set("scope",o.scope??"openid profile email"),a.searchParams.set("state",JSON.stringify(o)),s){let{codeChallenge:c,codeChallengeMethod:u}=o;if(!u)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!c)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");a.searchParams.set("code_challenge_method",u),a.searchParams.set("code_challenge",c)}return a.toString()}fhirUrl(...t){return new URL(W(this.fhirBaseUrl,t.join("/")))}fhirSearchUrl(t,n){let i=this.fhirUrl(t);return n&&(i.search=Mn(n)),i}search(t,n,i){let o=this.fhirSearchUrl(t,n),s="search-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=this.getBundle(o,i);return this.setCacheEntry(s,c),c}searchOne(t,n,i){let o=this.fhirSearchUrl(t,n);o.searchParams.set("_count","1"),o.searchParams.sort();let s="searchOne-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=new M(this.search(t,o.searchParams,i).then(u=>u.entry?.[0]?.resource));return this.setCacheEntry(s,c),c}searchResources(t,n,i){let s="searchResources-"+this.fhirSearchUrl(t,n).toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=new M(this.search(t,n,i).then(_o));return this.setCacheEntry(s,c),c}async*searchResourcePages(t,n,i){let o=this.fhirSearchUrl(t,n);for(;o;){let s=new URL(o).searchParams;s.has("_count")||s.set("_count","1000");let a=await this.search(t,s,i),c=a.link?.find(u=>u.relation==="next");if(!a.entry?.length&&!c)break;yield _o(a),o=c?.url?new URL(c.url):void 0}}valueSetExpand(t,n){let i=this.fhirUrl("ValueSet","$expand");return i.search=new URLSearchParams(t).toString(),this.get(i.toString(),n)}getCached(t,n){let i=this.requestCache?.get(this.fhirUrl(t,n).toString())?.value;return i?.isOk()?i.read():void 0}getCachedReference(t){let n=t.reference;if(!n)return;if(n==="system")return Do;let[i,o]=n.split("/");if(!(!i||!o))return this.getCached(i,o)}readResource(t,n,i){if(!n)throw new Error('The "id" parameter cannot be null, undefined, or an empty string.');return this.get(this.fhirUrl(t,n),i)}readReference(t,n){let i=t.reference;if(!i)return new M(Promise.reject(new Error("Missing reference")));if(i==="system")return new M(Promise.resolve(Do));let[o,s]=i.split("/");return!o||!s?new M(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}requestSchema(t){if(ln(t))return Promise.resolve();let n=t+"-requestSchema",i=this.getCacheEntry(n,void 0);if(i)return i.value;let o=new M((async()=>{let s=`{
4
+ `?(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 xc(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&yc.includes(r.value)))}var At=["true","false"],Ot=["!=","!~","<=",">=","{}","->"];function co(r){return new de(r,At,Ot).tokenize()}var g={FunctionCall:0,Dot:1,Indexer:2,UnaryAdd:3,UnarySubtract:3,Multiply:4,Divide:4,IntegerDivide:4,Modulo:4,Add:5,Subtract:5,Ampersand:5,Is:6,As:6,Union:7,GreaterThan:8,GreaterThanOrEquals:8,LessThan:8,LessThanOrEquals:8,Equals:9,Equivalent:9,NotEquals:9,NotEquivalent:9,In:10,Contains:10,And:11,Xor:12,Or:12,Implies:13,Arrow:100,Semicolon:200},vc={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},Tc={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new Te(e,t)},precedence:g.Indexer},Sc={parse(r,e){if(!(e instanceof j))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new Z(e.name,t)},precedence:g.FunctionCall};function bc(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 Qe(){return new rt().registerPrefix("String",{parse:(r,e)=>new F({type:l.string,value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new F({type:l.dateTime,value:He(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new F({type:l.Quantity,value:bc(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new F({type:e.value.includes(".")?l.decimal:l.integer,value:parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new F({type:l.boolean,value:!0})}).registerPrefix("false",{parse:()=>new F({type:l.boolean,value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new j(e.value)}).registerPrefix("{}",{parse:()=>new mt}).registerPrefix("(",vc).registerInfix("[",Tc).registerInfix("(",Sc).prefix("+",g.UnaryAdd,(r,e)=>new yt("+",e,t=>t)).prefix("-",g.UnarySubtract,(r,e)=>new V("-",e,e,(t,n)=>-n)).infixLeft(".",g.Dot,(r,e,t)=>new le(r,t)).infixLeft("/",g.Divide,(r,e,t)=>new V("/",r,t,(n,i)=>n/i)).infixLeft("*",g.Multiply,(r,e,t)=>new V("*",r,t,(n,i)=>n*i)).infixLeft("+",g.Add,(r,e,t)=>new V("+",r,t,(n,i)=>n+i)).infixLeft("-",g.Subtract,(r,e,t)=>new V("-",r,t,(n,i)=>n-i)).infixLeft("|",g.Union,(r,e,t)=>new xe(r,t)).infixLeft("=",g.Equals,(r,e,t)=>new Tt(r,t)).infixLeft("!=",g.NotEquals,(r,e,t)=>new St(r,t)).infixLeft("~",g.Equivalent,(r,e,t)=>new bt(r,t)).infixLeft("!~",g.NotEquivalent,(r,e,t)=>new Et(r,t)).infixLeft("<",g.LessThan,(r,e,t)=>new V("<",r,t,(n,i)=>n<i)).infixLeft("<=",g.LessThanOrEquals,(r,e,t)=>new V("<=",r,t,(n,i)=>n<=i)).infixLeft(">",g.GreaterThan,(r,e,t)=>new V(">",r,t,(n,i)=>n>i)).infixLeft(">=",g.GreaterThanOrEquals,(r,e,t)=>new V(">=",r,t,(n,i)=>n>=i)).infixLeft("&",g.Ampersand,(r,e,t)=>new gt(r,t)).infixLeft("and",g.And,(r,e,t)=>new Rt(r,t)).infixLeft("as",g.As,(r,e,t)=>new pe(r,t)).infixLeft("contains",g.Contains,(r,e,t)=>new xt(r,t)).infixLeft("div",g.Divide,(r,e,t)=>new V("div",r,t,(n,i)=>n/i|0)).infixLeft("in",g.In,(r,e,t)=>new vt(r,t)).infixLeft("is",g.Is,(r,e,t)=>new ve(r,t)).infixLeft("mod",g.Modulo,(r,e,t)=>new V("mod",r,t,(n,i)=>n%i)).infixLeft("or",g.Or,(r,e,t)=>new Ct(r,t)).infixLeft("xor",g.Xor,(r,e,t)=>new Pt(r,t)).infixLeft("implies",g.Implies,(r,e,t)=>new wt(r,t))}var Ec=Qe();function It(r){return new Ve(r,Ec.construct(co(r)).consumeAndParse())}function Rc(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]=x(t[n]))}return E(r,t).map(n=>n.value)}function E(r,e,t={},n=void 0){let i;if(typeof r=="string"){let o=n?.get(r);i=o??It(r),n&&!o&&n.set(r,i)}else i=r;return i.eval({variables:t},e).map(o=>({type:o.type,value:o.value?.valueOf()}))}function Cc(r){let e=[];for(let t of r)t.type===l.Range?e.push([t.value?.low?.value,t.value?.high?.value]):typeof t.value=="number"&&e.push([t.value,t.value]);return e}function Nn(r){let e=[];for(let t of r){let n=ut(t.value);n&&e.push(n)}return e}function Un(r){let e=new Set;for(let t of r){let n=_n(t);n&&e.add(n)}return Array.from(e)}function Bn(r){let e=new Set;for(let t of r){let{value:n}=t;n&&(ft(n)?e.add(n):B(n)?e.add(n.reference):$e(n)?e.add(D(n)):typeof n.identifier=="object"&&e.add(`identifier:${n.identifier.system}|${n.identifier.value}`))}return Array.from(e)}function Pc(r){let e=[];for(let t of r){let{value:n}=t;typeof n=="number"?e.push({value:n}):w(n)&&e.push(n)}return e}function wc(r){let e=new Set;for(let t of r)ft(t.value)&&e.add(t.value);return Array.from(e)}function Wn(r,e={}){let t=[];for(let n of r)Ac(e,t,n);return t}function Ac(r,e,t){let{type:n,value:i}=t;switch(n){case l.Identifier:Oc(e,r,i);break;case l.CodeableConcept:Ic(e,r,i);break;case l.Coding:uo(e,r,i);break;case l.ContactPoint:kc(e,r,i);break;default:De(e,r,void 0,i?.toString())}}function Oc(r,e,t){t?.type?.text&&De(r,e,e.textSearchSystem,t.type.text),De(r,e,t?.system,t?.value)}function Ic(r,e,t){if(t?.text&&De(r,e,e.textSearchSystem,t.text),t?.coding)for(let n of t.coding)uo(r,e,n)}function uo(r,e,t){t&&(t.display&&De(r,e,e.textSearchSystem,t.display),De(r,e,t.system,t.code))}function kc(r,e,t){t&&De(r,e,t.system,t.value?.toLocaleLowerCase())}function De(r,e,t,n){(t||n)&&!r.some(i=>i.system===t&&i.value===n)&&r.push({system:t,value:n&&e.caseInsensitive?n.toLocaleLowerCase():n})}var Vc=20,Dc=1e3,f={EQUALS:"eq",NOT_EQUALS:"ne",GREATER_THAN:"gt",LESS_THAN:"lt",GREATER_THAN_OR_EQUALS:"ge",LESS_THAN_OR_EQUALS:"le",STARTS_AFTER:"sa",ENDS_BEFORE:"eb",APPROXIMATELY:"ap",CONTAINS:"contains",STARTS_WITH:"sw",EXACT:"exact",TEXT:"text",NOT:"not",ABOVE:"above",BELOW:"below",IN:"in",NOT_IN:"not-in",OF_TYPE:"of-type",MISSING:"missing",PRESENT:"present",IDENTIFIER:"identifier",ITERATE:"iterate"},ho={contains:f.CONTAINS,exact:f.EXACT,above:f.ABOVE,below:f.BELOW,text:f.TEXT,not:f.NOT,in:f.IN,"not-in":f.NOT_IN,"of-type":f.OF_TYPE,missing:f.MISSING,identifier:f.IDENTIFIER,iterate:f.ITERATE},qn={eq:f.EQUALS,ne:f.NOT_EQUALS,lt:f.LESS_THAN,le:f.LESS_THAN_OR_EQUALS,gt:f.GREATER_THAN,ge:f.GREATER_THAN_OR_EQUALS,sa:f.STARTS_AFTER,eb:f.ENDS_BEFORE,ap:f.APPROXIMATELY,sw:f.STARTS_WITH};function ze(r,e){if(!r)throw new Error("Invalid search URL");let t="",n;if(typeof r=="string")if(r.includes("?")){let[s,a]=r.split("?");t=s,n=new URLSearchParams(a)}else t=r;else typeof r=="object"&&(t=r.pathname,n=r.searchParams);let i;t.includes("/")?i=t.split("/").filter(Boolean).pop():i=t;let o=[];if(n&&o.push(...n.entries()),e)for(let[s,a]of Object.entries(e))if(Array.isArray(a))for(let c of a)o.push([s,c]);else o.push([s,a??""]);return Mc(i,o)}function Mc(r,e){let t={resourceType:r};for(let[n,i]of e)_c(t,n,i);return t}function _c(r,e,t){let n,i,o=e.indexOf(":");if(o>=0?(n=e.substring(0,o),i=e.substring(o+1)):(n=e,i=""),n!=="_"){if(n==="_has"||e.includes(".")){r.filters=ae(r.filters,{code:e,operator:f.EQUALS,value:t});return}switch(n){case"_sort":Lc(r,t);break;case"_cursor":r.cursor=t;break;case"_count":r.count=parseInt(t,10);break;case"_offset":r.offset=parseInt(t,10);break;case"_total":r.total=t;break;case"_summary":t==="count"?(r.total="accurate",r.count=0):(t==="true"||t==="data"||t==="text")&&(r.summary=t);break;case"_include":{let s=lo(t);i==="iterate"&&(s.modifier=f.ITERATE),r.include=ae(r.include,s);break}case"_revinclude":{let s=lo(t);i==="iterate"&&(s.modifier=f.ITERATE),r.revInclude=ae(r.revInclude,s);break}case"_fields":case"_elements":r.fields=t.split(",");break;case"_type":r.types=t.split(",");break;case"_format":r.format=t;break;case"_pretty":r.pretty=t==="true";break;default:{let s=L.types[r.resourceType]?.searchParams?.[n];s?r.filters=ae(r.filters,mo(s,i,t)):r.filters=ae(r.filters,Nc(n,i,t))}}}}function Lc(r,e){for(let t of e.split(",")){let n,i=!1;t.startsWith("-")?(n=t.substring(1),i=!0):n=t,r.sortRules||(r.sortRules=[]),r.sortRules.push({code:n,descending:i})}}var Fc=[f.MISSING,f.PRESENT];function mo(r,e,t){if(Fc.includes(e))return{code:r.code,operator:e,value:t};switch(r.type){case"number":case"date":case"quantity":{let{operator:n,value:i}=Uc(t);if(!po(r,i))throw new d(b(`Invalid format for ${r.type} search parameter: ${i}`));return{code:r.code,operator:n,value:i}}case"reference":case"string":case"token":case"uri":if(!po(r,t))throw new d(b(`Invalid format for ${r.type} search parameter: ${t}`));return{code:r.code,operator:Bc(e),value:t};default:throw new Error("Unrecognized search parameter type: "+r.type)}}function Nc(r,e,t){let n=f.EQUALS;if(e)n=e;else if(t.length>=2){let i=t.substring(0,2);i in qn&&(t.length===2||t.at(2)?.match(/\d/))&&(n=i,t=t.substring(i.length))}return{code:r,operator:n,value:t}}function Uc(r){let e=r.substring(0,2),t=qn[e];return t?{operator:t,value:r.substring(2)}:{operator:f.EQUALS,value:r}}function Bc(r){return ho[r]??f.EQUALS}function lo(r){let e=r.split(":");if(e.includes("*"))throw new d(b("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new d(b(`Invalid include value '${r}': must be of the form ResourceType:search-parameter`));if(e.length===2)return{resourceType:e[0],searchParam:e[1]};if(e.length===3)return{resourceType:e[0],searchParam:e[1],targetType:e[2]};throw new d(b(`Invalid include value '${r}'`))}function po(r,e){switch(r.type){case"date":return Oe(e);default:return!0}}var Wc=/{{([^{}]+)}}/g;function qc(r,e){return r=r.replaceAll(Wc,(t,n)=>{let i=E(n,[],e);return i.length!==1?"":Fn(i[0])}),ze(r)}function jc(r){let e=[];return r.fields&&e.push("_fields="+r.fields.join(",")),r.filters&&r.filters.forEach(t=>e.push($c(t))),r.sortRules&&r.sortRules.length>0&&e.push(Gc(r.sortRules)),r.cursor!==void 0&&e.push("_cursor="+encodeURIComponent(r.cursor)),r.offset!==void 0&&r.offset!==0&&e.push("_offset="+r.offset),r.count!==void 0&&e.push("_count="+r.count),r.total!==void 0&&e.push("_total="+r.total),r.types&&r.types.length>0&&e.push("_type="+r.types.join(",")),r.include&&r.include.forEach(t=>e.push(fo("_include",t))),r.revInclude&&r.revInclude.forEach(t=>e.push(fo("_revinclude",t))),e.length===0?"":(ht(e),"?"+e.join("&"))}function $c(r){let e=r.operator in ho?":"+r.operator:"",t=r.operator!==f.EQUALS&&r.operator in qn?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function Gc(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function fo(r,e){return r+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function Je(r){let e=[],t="",n=!1;for(let i of r)n?(t+=i,n=!1):i==="\\"?n=!0:i===","?(e.push(t),t=""):t+=i;return e.push(t),e}function kt(r,e){if(e.resourceType!==r.resourceType)return!1;if(e.filters){for(let t of e.filters)if(!Hc(r,e,t))return!1}return!0}function Hc(r,e,t){let n=L.types[e.resourceType]?.searchParams?.[t.code];if(!n)return!1;let i=E(n.expression,[x(r)]);if(t.operator===f.MISSING||t.operator===f.PRESENT)return Qc(i,t);switch(n.type){case"reference":return zc(i,t);case"string":case"uri":return Xc(i,t);case"token":return Jc(i,t);case"date":return Zc(i,t);default:return!1}}function Qc(r,e){let t=r.length>0;return(e.operator===f.MISSING&&e.value==="false"||e.operator===f.PRESENT&&e.value==="true")===t}function zc(r,e){let t=Tr(e.operator);if(e.value===""&&r.length===0)return e.operator===f.EQUALS;let n=Bn(r);for(let i of Je(e.value)){let o=n.includes(i);if(!o&&e.code==="_compartment"&&(o=n.some(s=>s?.endsWith("/"+i))),o)return!t}return t}function Jc(r,e){let t=Wn(r),n=Je(e.value),i=Tr(e.operator);for(let o of t)for(let s of n)if(Kc(o,s))return!i;return i}function Kc(r,e){if(e.includes("|")){let[t,n]=e.split("|").map(i=>i.toLowerCase());return!t&&!n?!1:t?r.system?.toLowerCase()===t&&(!n||r.value?.toLowerCase()===n):!r.system&&r.value?.toLowerCase()===n}return r.value?.toLowerCase()===e.toLowerCase()}function Xc(r,e){let t=Un(r),n=Je(e.value),i=Tr(e.operator);for(let o of t)for(let s of n)if(Yc(o,s))return!i;return i}function Yc(r,e){return r.toLowerCase().includes(e.toLowerCase())}function Zc(r,e){let t=Nn(r),n=Je(e.value),i=Tr(e.operator);for(let o of t)for(let s of n)if(eu(o,e.operator,s))return!i;return i}function eu(r,e,t){if(!r)return!1;let n=ut(t);if(!n)return!1;let i=r.start??"0000",o=r.end??"9999",s=n.start,a=n.end;switch(e){case f.APPROXIMATELY:case f.EQUALS:case f.NOT_EQUALS:return i<a&&o>s;case f.LESS_THAN:return i<s;case f.GREATER_THAN:return o>a;case f.LESS_THAN_OR_EQUALS:return i<=a;case f.GREATER_THAN_OR_EQUALS:return o>=s;case f.STARTS_AFTER:return i>a;case f.ENDS_BEFORE:return o<s;default:return!1}}function Tr(r){return r===f.NOT_EQUALS||r===f.NOT}var tu={resourceType:"*"},yo=["DomainConfiguration","JsonWebKey","Login"],go=["PasswordChangeRequest","UserSecurityRequest","Project","ProjectMembership","User"],Se={READ:"read",VREAD:"vread",UPDATE:"update",DELETE:"delete",HISTORY:"history",CREATE:"create",SEARCH:"search"},xo=[Se.READ,Se.VREAD,Se.HISTORY,Se.SEARCH];function ru(r,e){return jn(r,Se.SEARCH,e)}function nu(r,e){return yo.includes(e)?!1:jn(r,Se.UPDATE,e)}function jn(r,e,t){return!!r.resource?.some(n=>To(n,t,e))}function iu(r,e){return!!vo(e,Se.UPDATE,r)}function vo(r,e,t){return t?t.resource?.find(n=>ou(r,e,n)):tu}function ou(r,e,t){let n=r.resourceType;return To(t,n,e)?n==="Binary"?!0:!(t.compartment&&!r.meta?.compartment?.some(i=>i.reference===t.compartment?.reference)||t.criteria&&!kt(r,ze(t.criteria))):!1}function To(r,e,t){return r.resourceType!==e&&(r.resourceType!=="*"||go.includes(e))?!1:r.interaction?r.interaction.includes(t):!r.readonly||xo.includes(t)}function N(){return typeof window<"u"}function su(){return typeof Buffer<"u"}function au(){return typeof window<"u"?window:void 0}function Sr(){return typeof Buffer<"u"?Buffer:void 0}var ee={assign(r){N()&&globalThis.location.assign(r)},reload(){N()&&globalThis.location.reload()},getSearch(){return N()?globalThis.location.search:""},getPathname(){return N()?globalThis.location.pathname:""},getLocation(){return N()?globalThis.location.toString():""},getOrigin(){return N()?globalThis.location.protocol+"//"+globalThis.location.host+"/":""}};function So(r){if(N()){let t=window.atob(r),n=Uint8Array.from(t,i=>i.charCodeAt(0));return new window.TextDecoder().decode(n)}let e=Sr();if(e)return e.from(r,"base64").toString("utf-8");throw new Error("Unable to decode base64")}function Vt(r){if(N()){let t=new window.TextEncoder().encode(r),n=String.fromCharCode.apply(null,t);return window.btoa(n)}let e=Sr();if(e)return e.from(r,"utf8").toString("base64");throw new Error("Unable to encode base64")}function cu(r){return Vt(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/[=]{1,2}$/,"")}function $n(r){r=r.padEnd(r.length+(4-r.length%4)%4,"=");let e=r.replace(/-/g,"+").replace(/_/g,"/");return So(e)}function br(){let r=new Uint32Array(28);return crypto.getRandomValues(r),An(r.buffer)}async function Gn(r){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(r))}function be(){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 bo(r){let e={};r=ge(r);for(let i of r.entry||[]){let o=i.resource;if(!o)continue;o.meta!==void 0&&(delete o.meta.author,delete o.meta.compartment,delete o.meta.lastUpdated,delete o.meta.project,delete o.meta.versionId,Object.keys(o.meta).length===0&&delete o.meta);let s=o?.id;s&&(e[s]=be(),i.fullUrl="urn:uuid:"+e[s],delete i.resource?.id)}let t=r.entry,n=JSON.stringify({resourceType:"Bundle",type:"transaction",entry:t?.map(i=>({fullUrl:i.fullUrl,request:{method:"POST",url:i.resource?.resourceType},resource:i.resource}))},(i,o)=>uu(i,o,e),2);return Eo(JSON.parse(n))}function uu(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 Eo(r){let e=pu(r),{sorted:t,cycles:n}=lu(e),i={};for(let s of r.entry??[])s.fullUrl&&(i[s.fullUrl]=s);let o=t.map(s=>i[s]);for(let s of n)for(let a of s){let c=i[a],u={...c,request:{...c.request,method:"PUT"}};o.push(u)}return{...r,entry:o}}var Ke={NotVisited:"NotVisited",Visiting:"Visiting",Visited:"Visited"};function lu(r){let e=[],t={},n=[];for(let o of Object.keys(r))t[o]=Ke.NotVisited;function i(o,s){if(t[o]===Ke.Visited)return!0;if(t[o]===Ke.Visiting){let c=s.lastIndexOf(o);return c!==-1&&n.push(s.slice(c)),!0}t[o]=Ke.Visiting,s.push(o);let a=!1;for(let c of r[o])i(c,s)||(a=!0);return t[o]=Ke.Visited,s.pop(),e.unshift(o),!a}for(let o in r)t[o]===Ke.NotVisited&&i(o,[]);return{sorted:e,cycles:n}}function Ro(r,e){for(let t in r)if(r[t]&&typeof r[t]=="object"){let n=r[t];if(B(n)){let i=n.reference;i.startsWith("urn:uuid:")&&e(i)}else Ro(n,e)}}function pu(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&&Ro(t.resource,i=>{e[i]&&e[i].push(n)})}return e}function du(r){r=ge(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=be());return bo(e)}function fu(r,e,t){return r.entry?.find(({resource:n})=>n?.resourceType===e&&n?.id===t)?.resource}var A={CSS:"text/css",DICOM:"application/dicom",FAVICON:"image/vnd.microsoft.icon",FHIR_JSON:"application/fhir+json",FORM_URL_ENCODED:"application/x-www-form-urlencoded",HL7_V2:"x-application/hl7-v2+er7",HTML:"text/html",JAVASCRIPT:"text/javascript",JSON:"application/json",JSON_PATCH:"application/json-patch+json",JWT:"application/jwt",MULTIPART_FORM_DATA:"multipart/form-data",PNG:"image/png",SCIM_JSON:"application/scim+json",SVG:"image/svg+xml",TEXT:"text/plain",TYPESCRIPT:"text/typescript",PING:"x-application/ping",XML:"text/xml",CDA_XML:"application/cda+xml",OCTET_STREAM:"application/octet-stream"};var Er=class{constructor(){this.listeners={}}addEventListener(e,t){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)}removeEventListener(e,t){let n=this.listeners[e];if(n){for(let i=0;i<n.length;i++)if(n[i]===t){n.splice(i,1);return}}}dispatchEvent(e){let t=this.listeners[e.type];if(t)for(let n of t)n.call(this,e);return!e.defaultPrevented}removeAllListeners(){this.listeners={}}},H=class{constructor(){this.emitter=new Er}dispatchEvent(e){this.emitter.dispatchEvent(e)}addEventListener(e,t){this.emitter.addEventListener(e,t)}removeEventListener(e,t){this.emitter.removeEventListener(e,t)}removeAllListeners(){this.emitter.removeAllListeners()}};var Rr={"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"},Co=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],Cr=["DiagnosticReport-update"];function Hn(r){return Cr.includes(r)}function Qn(r){if(Cr.includes(r))throw new d(y(`'context.version' is required for '${r}'.`))}var Po={"Patient-open":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"Patient-close":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"ImagingStudy-open":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"ImagingStudy-close":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"Encounter-open":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"Encounter-close":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"DiagnosticReport-open":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-close":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-select":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},select:{resourceType:"*",reference:!0,manyAllowed:!0}},"DiagnosticReport-update":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},updates:{resourceType:"Bundle"}},syncerror:{operationoutcome:{resourceType:"OperationOutcome"}}};function wo(r){return Co.includes(r)}function zn(r){return!!r.endpoint}function Pr(r){if(!Mt(r))throw new d(y("subscriptionRequest must be an object conforming to SubscriptionRequest type."));let{channelType:e,mode:t,topic:n,events:i}=r,o={"hub.channel.type":e,"hub.mode":t,"hub.topic":n,"hub.events":i.join(",")};return zn(r)&&(o.endpoint=r.endpoint),new URLSearchParams(o).toString()}function Mt(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(!Rr[o])return!1;return!(zn(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function hu(r,e,t,n){if(typeof e!="object")throw new d(y(`context[${t}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.id&&typeof e.id=="string"))throw new d(y(`context[${t}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new d(y(`context[${t}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!wo(e.resourceType))throw new d(y(`context[${t}] is invalid. Resource must contain a valid FHIRcast resource type. Resource type is not a known resource type.`));if(i&&e.resourceType!==i)throw new d(y(`context[${t}] is invalid. context[${t}] for the '${r}' event should contain resource of type ${i}.`))}}function mu(r,e,t,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),n.reference){if(!B(e.reference))throw new d(y(`context[${t}] is invalid. Expected key '${e.key}' to be a reference.`))}else hu(r,e.resource,t,n)}function yu(r,e){let t=new Map,n=Po[r];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new d(y(`Key '${o}' not found for event '${r}'. Make sure to add only valid keys.`));mu(r,e[i],i,n[o],t)}for(let[i,o]of Object.entries(n)){if(!(o.optional||t.has(i)))throw new d(y(`Missing required key '${i}' on context for '${r}' event.`));if(!o.manyAllowed&&(t.get(i)??0)>1)throw new d(y(`${t.get(i)} context entries with key '${i}' found for the '${r}' event when schema only allows for 1.`))}}function wr(r,e,t,n){if(!(r&&typeof r=="string"))throw new d(y("Must provide a topic."));if(!Rr[e])throw new d(y(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(Rr).join(", ")}`));if(typeof t!="object")throw new d(y("context must be a context object or array of context objects."));if(Cr.includes(e)&&!n)throw new d(y(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(t)?t:[t];return yu(e,i),{timestamp:new Date().toISOString(),id:be(),event:{"hub.topic":r,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var Dt=class extends H{constructor(e){if(super(),this.subRequest=e,!e.endpoint)throw new d(y("Subscription request should contain an endpoint."));if(!Mt(e))throw new d(y("Subscription request failed validation."));let t=new WebSocket(e.endpoint);t.addEventListener("open",()=>{this.dispatchEvent({type:"connect"}),t.addEventListener("message",n=>{let i=JSON.parse(n.data);if(i["hub.topic"])return;let o=i;o.event["hub.event"]!=="heartbeat"&&(this.dispatchEvent({type:"message",payload:o}),t.send(JSON.stringify({id:i?.id,timestamp:new Date().toISOString()})))}),t.addEventListener("close",()=>{this.dispatchEvent({type:"disconnect"})})}),this.websocket=t}disconnect(){this.websocket.close()}};function gu(r){return JSON.parse($n(r))}function Jn(r){return r.split(".").length===3}function _t(r){let[e,t,n]=r.split(".");return gu(t)}function Kn(r){try{return typeof _t(r).login_id=="string"}catch{return!1}}function Xn(r){try{let t=_t(r).exp;return typeof t=="number"?t*1e3:void 0}catch{return}}var Lt=class{constructor(e){this.medplum=e}async get(e){return this.medplum.get(`keyvalue/v1/${e}`)}async set(e,t){await this.medplum.put(`keyvalue/v1/${e}`,t,A.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var Ao;Ao=Symbol.toStringTag;var M=class{constructor(e){this[Ao]="ReadablePromise";this.status="pending";this.suspender=e.then(t=>(this.status="success",this.response=t,t),t=>{throw this.status="error",this.error=t,t})}isPending(){return this.status==="pending"}isOk(){return this.status==="success"}read(){switch(this.status){case"pending":throw this.suspender;case"error":throw this.error;default:return this.response}}then(e,t){return this.suspender.then(e,t)}catch(e){return this.suspender.catch(e)}finally(e){return this.suspender.finally(e)}};var Xe=class{constructor(e){this.storage=e??(typeof localStorage<"u"?localStorage:new Ar)}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?dt(t):void 0)}},Ar=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]}},Yn=class extends Xe{constructor(){super();this.initResolve=()=>{};this.initialized=!1,this.initPromise=new Promise(t=>{this.initResolve=t})}setInitialized(){this.initialized||(this.initResolve(),this.initialized=!0)}getInitPromise(){return this.initPromise}get isInitialized(){return this.initialized}};var Ye={Event:typeof globalThis.Event<"u"?globalThis.Event:void 0,ErrorEvent:void 0,CloseEvent:void 0},Oo=!1;function xu(){if(typeof globalThis.Event>"u")throw new Error("Unable to lazy init events for ReconnectingWebSocket. globalThis.Event is not defined yet");Ye.Event=globalThis.Event,Ye.ErrorEvent=class extends Event{constructor(e,t){super("error",t),this.message=e.message,this.error=e}},Ye.CloseEvent=class extends Event{constructor(t=1e3,n="",i){super("close",i);this.wasClean=!0;this.code=t,this.reason=n}}}function ko(r,e){if(!r)throw new Error(e)}function Or(r){return new r.constructor(r.type,r)}var Me={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},Io=!1,Ft=class r extends H{constructor(t,n,i={}){Oo||(xu(),Oo=!0);super();this._retryCount=-1;this._shouldReconnect=!0;this._connectLock=!1;this._closeCalled=!1;this._messageQueue=[];this._debugLogger=console.log.bind(console);this.onclose=null;this.onerror=null;this.onmessage=null;this.onopen=null;this._handleOpen=t=>{this._debug("open event");let{minUptime:n=Me.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),n),ko(this._ws,"WebSocket is not defined"),this._ws.binaryType=this._binaryType,this._messageQueue.forEach(i=>this._ws?.send(i)),this._messageQueue=[],this.onopen&&this.onopen(t),this.dispatchEvent(Or(t))};this._handleMessage=t=>{this._debug("message event"),this.onmessage&&this.onmessage(t),this.dispatchEvent(Or(t))};this._handleError=t=>{this._debug("error event",t.message),this._disconnect(void 0,t.message==="TIMEOUT"?"timeout":void 0),this.onerror&&this.onerror(t),this._debug("exec error listeners"),this.dispatchEvent(Or(t)),this._connect()};this._handleClose=t=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(t),this.dispatchEvent(Or(t))};this._url=t,this._protocols=n,this._options=i,this._options.startClosed&&(this._shouldReconnect=!1),this._options.binaryType?this._binaryType=this._options.binaryType:this._binaryType="blob",this._options.debugLogger&&(this._debugLogger=this._options.debugLogger),this._connect()}static get CONNECTING(){return 0}static get OPEN(){return 1}static get CLOSING(){return 2}static get CLOSED(){return 3}get CONNECTING(){return r.CONNECTING}get OPEN(){return r.OPEN}get CLOSING(){return r.CLOSING}get CLOSED(){return r.CLOSED}get binaryType(){return this._ws?this._ws.binaryType:this._binaryType}set binaryType(t){this._binaryType=t,this._ws&&(this._ws.binaryType=t)}get retryCount(){return Math.max(this._retryCount,0)}get bufferedAmount(){return this._messageQueue.reduce((n,i)=>(typeof i=="string"?n+=i.length:i instanceof Blob?n+=i.size:n+=i.byteLength,n),0)+(this._ws?.bufferedAmount??0)}get extensions(){return this._ws?.extensions??""}get protocol(){return this._ws?.protocol??""}get readyState(){return this._ws?this._ws.readyState:this._options.startClosed?r.CLOSED:r.CONNECTING}get url(){return this._ws?this._ws.url:""}get shouldReconnect(){return this._shouldReconnect}close(t=1e3,n){if(this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),!this._ws){this._debug("close enqueued: no ws instance");return}if(this._ws.readyState===this.CLOSED){this._debug("close: already closed");return}this._ws.close(t,n)}reconnect(t,n){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED?this._connect():(this._disconnect(t,n),this._connect())}send(t){if(this._ws&&this._ws.readyState===this.OPEN)this._debug("send",t),this._ws.send(t);else{let{maxEnqueuedMessages:n=Me.maxEnqueuedMessages}=this._options;this._messageQueue.length<n&&(this._debug("enqueue",t),this._messageQueue.push(t))}}_debug(...t){this._options.debug&&this._debugLogger("RWS>",...t)}_getNextDelay(){let{reconnectionDelayGrowFactor:t=Me.reconnectionDelayGrowFactor,minReconnectionDelay:n=Me.minReconnectionDelay,maxReconnectionDelay:i=Me.maxReconnectionDelay}=this._options,o=0;return this._retryCount>0&&(o=n*Math.pow(t,this._retryCount-1),o>i&&(o=i)),this._debug("next delay",o),o}_wait(){return new Promise(t=>{setTimeout(t,this._getNextDelay())})}_connect(){if(this._connectLock||!this._shouldReconnect)return;this._connectLock=!0;let{maxRetries:t=Me.maxRetries,connectionTimeout:n=Me.connectionTimeout}=this._options;if(this._retryCount>=t){this._debug("max retries reached",this._retryCount,">=",t);return}this._retryCount++,this._debug("connect",this._retryCount),this._removeListeners(),this._wait().then(()=>{if(this._closeCalled){this._connectLock=!1;return}!this._options.WebSocket&&typeof WebSocket>"u"&&!Io&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),Io=!0);let i=this._options.WebSocket||WebSocket;this._debug("connect",{url:this._url,protocols:this._protocols}),this._ws=this._protocols?new i(this._url,this._protocols):new i(this._url),this._ws.binaryType=this._binaryType,this._connectLock=!1,this._addListeners(),this._connectTimeout=setTimeout(()=>this._handleTimeout(),n)}).catch(i=>{this._connectLock=!1,this._handleError(new Ye.ErrorEvent(Error(i.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new Ye.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(t=1e3,n){if(this._clearTimeouts(),!!this._ws){this._removeListeners();try{this._ws.close(t,n),this._handleClose(new Ye.CloseEvent(t,n,this))}catch{}}}_acceptOpen(){this._debug("accept open"),this._retryCount=0}_removeListeners(){this._ws&&(this._debug("removeListeners"),this._ws.removeEventListener("open",this._handleOpen),this._ws.removeEventListener("close",this._handleClose),this._ws.removeEventListener("message",this._handleMessage),this._ws.removeEventListener("error",this._handleError))}_addListeners(){this._ws&&(this._debug("addListeners"),this._ws.addEventListener("open",this._handleOpen),this._ws.addEventListener("close",this._handleClose),this._ws.addEventListener("message",this._handleMessage),this._ws.addEventListener("error",this._handleError))}_clearTimeouts(){clearTimeout(this._connectTimeout),clearTimeout(this._uptimeTimeout)}};var vu=5e3,Ze=class extends H{constructor(...e){super(),this.criteria=new Set(e)}getCriteria(){return this.criteria}_addCriteria(e){this.criteria.add(e)}_removeCriteria(e){this.criteria.delete(e)}},Zn=class{constructor(e,t){this.connecting=!1;this.criteria=e,this.emitter=new Ze(e),this.refCount=1,this.subscriptionProps=t?{...t}:void 0}clearAttachedSubscription(){this.subscriptionId=void 0,this.token=void 0}},Nt=class{constructor(e,t,n){this.pingTimer=void 0;this.waitingForPong=!1;if(!(e instanceof Ut))throw new d(y("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(t).toString()}catch{throw new d(y("Not a valid URL"))}let o=n?.ReconnectingWebSocket?new n.ReconnectingWebSocket(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger}):new Ft(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger});this.medplum=e,this.ws=o,this.masterSubEmitter=new Ze,this.criteriaEntries=new Map,this.criteriaEntriesBySubscriptionId=new Map,this.wsClosed=!1,this.pingIntervalMs=n?.pingIntervalMs??vu,this.currentProfile=e.getProfile(),this.setupListeners()}setupListeners(){let e=this.ws;e.addEventListener("message",t=>{try{let n=JSON.parse(t.data);if(n.type==="pong"){this.waitingForPong=!1;return}let i=n,o=i?.entry?.[0]?.resource;if(o.type==="heartbeat"){this.masterSubEmitter?.dispatchEvent({type:"heartbeat",payload:i});return}if(o.type==="handshake"){let a=ye(o.subscription),c={type:"connect",payload:{subscriptionId:a}};this.masterSubEmitter?.dispatchEvent(c);let u=this.criteriaEntriesBySubscriptionId.get(a);if(!u){console.warn("Received handshake for criteria the SubscriptionManager is not listening for yet");return}u.connecting=!1,u.emitter.dispatchEvent({...c});return}this.masterSubEmitter?.dispatchEvent({type:"message",payload:i});let s=this.criteriaEntriesBySubscriptionId.get(ye(o.subscription));if(!s){console.warn("Received notification for criteria the SubscriptionManager is not listening for");return}s.emitter.dispatchEvent({type:"message",payload:i})}catch(n){console.error(n);let i={type:"error",payload:n};this.masterSubEmitter?.dispatchEvent(i);for(let o of this.getAllCriteriaEmitters())o.dispatchEvent({...i})}}),e.addEventListener("error",()=>{let t={type:"error",payload:new d(en(new Error("WebSocket error")))};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t})}),e.addEventListener("close",()=>{let t={type:"close"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=void 0,this.waitingForPong=!1),this.wsClosed&&(this.criteriaEntries.clear(),this.criteriaEntriesBySubscriptionId.clear(),this.masterSubEmitter?.removeAllListeners())}),e.addEventListener("open",()=>{let t={type:"open"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.refreshAllSubscriptions().catch(console.error),this.pingTimer||(this.pingTimer=setInterval(()=>{if(this.waitingForPong){this.waitingForPong=!1,e.reconnect();return}e.send(JSON.stringify({type:"ping"})),this.waitingForPong=!0},this.pingIntervalMs))}),this.medplum.addEventListener("change",()=>{let t=this.medplum.getProfile();this.currentProfile&&t===void 0?this.ws.close():t&&this.currentProfile?.id!==t.id&&this.ws.reconnect(),this.currentProfile=t})}emitError(e,t){let n={type:"error",payload:t};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}maybeEmitDisconnect(e){let{subscriptionId:t}=e;if(t){let n={type:"disconnect",payload:{subscriptionId:t}};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}else console.warn("Called disconnect for `CriteriaEntry` before `subscriptionId` was present.")}async getTokenForCriteria(e){let t=e?.subscriptionId;t||(t=(await this.medplum.createResource({...e.subscriptionProps,resourceType:"Subscription",status:"active",reason:`WebSocket subscription for ${D(this.medplum.getProfile())}`,channel:{type:"websocket"},criteria:e.criteria})).id);let{parameter:n}=await this.medplum.get(`fhir/R4/Subscription/${t}/$get-ws-binding-token`),i=n?.find(s=>s.name==="token")?.valueString,o=n?.find(s=>s.name==="websocket-url")?.valueUrl;if(!i)throw new d(y("Failed to get token"));if(!o)throw new d(y("Failed to get URL from $get-ws-binding-token"));return[t,i]}maybeGetCriteriaEntry(e,t){let n=this.criteriaEntries.get(e);if(n){if(!t)return n.bareCriteria;for(let i of n.criteriaWithProps)if(oe(t,i.subscriptionProps))return i}}getAllCriteriaEmitters(){let e=[];for(let t of this.criteriaEntries.values()){t.bareCriteria&&e.push(t.bareCriteria.emitter);for(let n of t.criteriaWithProps)e.push(n.emitter)}return e}addCriteriaEntry(e){let{criteria:t,subscriptionProps:n}=e,i;this.criteriaEntries.has(t)?i=this.criteriaEntries.get(t):(i={criteriaWithProps:[]},this.criteriaEntries.set(t,i)),n?i.criteriaWithProps.push(e):i.bareCriteria=e}removeCriteriaEntry(e){let{criteria:t,subscriptionProps:n,subscriptionId:i,token:o}=e;if(!this.criteriaEntries.has(t))return;let s=this.criteriaEntries.get(t);n?s.criteriaWithProps=s.criteriaWithProps.filter(a=>{let c=a.subscriptionProps;return!oe(n,c)}):s.bareCriteria=void 0,!s.bareCriteria&&s.criteriaWithProps.length===0&&(this.criteriaEntries.delete(t),this.masterSubEmitter?._removeCriteria(t)),i&&this.criteriaEntriesBySubscriptionId.delete(i),o&&this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"unbind-from-token",payload:{token:o}}))}async subscribeToCriteria(e){if(!(this.ws.readyState!==WebSocket.OPEN||e.connecting)){e.connecting=!0;try{let[t,n]=await this.getTokenForCriteria(e);e.subscriptionId=t,e.token=n,this.criteriaEntriesBySubscriptionId.set(t,e),this.ws.send(JSON.stringify({type:"bind-with-token",payload:{token:n}}))}catch(t){console.error(Pe(t)),this.emitError(e,t),this.removeCriteriaEntry(e)}}}async refreshAllSubscriptions(){this.criteriaEntriesBySubscriptionId.clear();for(let e of this.criteriaEntries.values())for(let t of[...e.bareCriteria?[e.bareCriteria]:[],...e.criteriaWithProps])t.clearAttachedSubscription(),await this.subscribeToCriteria(t)}addCriteria(e,t){this.masterSubEmitter&&this.masterSubEmitter._addCriteria(e);let n=this.maybeGetCriteriaEntry(e,t);if(n)return n.refCount+=1,n.emitter;let i=new Zn(e,t);return this.addCriteriaEntry(i),this.subscribeToCriteria(i).catch(console.error),i.emitter}removeCriteria(e,t){let n=this.maybeGetCriteriaEntry(e,t);if(!n){console.warn("Criteria not known to `SubscriptionManager`. Possibly called remove too many times.");return}n.refCount-=1,!(n.refCount>0)&&(this.maybeEmitDisconnect(n),this.removeCriteriaEntry(n))}getWebSocket(){return this.ws}closeWebSocket(){this.wsClosed||(this.wsClosed=!0,this.ws.close())}reconnectWebSocket(){this.ws.reconnect(),this.wsClosed=!1}getCriteriaCount(){return this.getAllCriteriaEmitters().length}getMasterEmitter(){return this.masterSubEmitter||(this.masterSubEmitter=new Ze(...Array.from(this.criteriaEntries.keys()))),this.masterSubEmitter}};async function Tu({resource:r,subscription:e,context:t,getPreviousResource:n,logger:i}){if(!Su(e,i))return i?.debug("Ignore subscription without recognized channel type"),!1;let o=e.criteria;if(!o)return i?.debug("Ignore rest hook missing criteria"),!1;let s=ze(o);if(r.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${r.resourceType}")`),!1;if(!await Vo(e,r,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let c=ie(e,"https://medplum.com/fhir/StructureDefinition/subscription-supported-interaction");return c&&c.valueCode!==t.interaction?(i?.debug(`Ignore rest hook for different interaction (wanted "${c.valueCode}", received "${t.interaction}")`),!1):kt(r,s)?e.meta?.account&&r.meta?.account?.reference!==e.meta.account.reference?(i?.warn("Subscription suppressed due to mismatched meta.account",{subscriptionId:e.id,resourceId:r.id}),!1):!0:!1}function Su(r,e){let t=r.channel?.type;return t==="rest-hook"?r.channel?.endpoint?!0:(e?.debug("Ignore rest-hook missing URL"),!1):t==="websocket"}async function Vo(r,e,t){let n=ie(r,"https://medplum.com/fhir/StructureDefinition/fhir-path-criteria-expression");if(!n?.valueString)return!0;let i=await t(e),o={"%current":x(e),"%previous":x(i??{})};return E(n.valueString,[x(e)],o)?.[0]?.value===!0}var Ir="4.5.1-199a27ba6",bu="medplum-cli",Lo=A.FHIR_JSON+", */*; q=0.1",Eu="https://api.medplum.com/",Ru=1e3,Cu=6e4,Pu=0,wu=3e5,Au="Binary/",Do={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},_e={ClientCredentials:"client_credentials",AuthorizationCode:"authorization_code",RefreshToken:"refresh_token",JwtBearer:"urn:ietf:params:oauth:grant-type:jwt-bearer",TokenExchange:"urn:ietf:params:oauth:grant-type:token-exchange"},Fo={AccessToken:"urn:ietf:params:oauth:token-type:access_token",RefreshToken:"urn:ietf:params:oauth:token-type:refresh_token",IdToken:"urn:ietf:params:oauth:token-type:id_token",Saml1Token:"urn:ietf:params:oauth:token-type:saml1",Saml2Token:"urn:ietf:params:oauth:token-type:saml2"},Ou={ClientSecretBasic:"client_secret_basic",ClientSecretPost:"client_secret_post",ClientSecretJwt:"client_secret_jwt",PrivateKeyJwt:"private_key_jwt",None:"none"},No={JwtBearer:"urn:ietf:params:oauth:client-assertion-type:jwt-bearer"},Ut=class extends H{constructor(t){super();this.initComplete=!0;if(t?.baseUrl&&!t.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");this.options=t??{},this.fetch=t?.fetch??Iu(),this.storage=t?.storage??new Xe,this.createPdfImpl=t?.createPdf,this.baseUrl=yr(t?.baseUrl??Eu),this.fhirBaseUrl=W(this.baseUrl,t?.fhirUrlPath??"fhir/R4"),this.authorizeUrl=W(this.baseUrl,t?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=W(this.baseUrl,t?.tokenUrl??"oauth2/token"),this.logoutUrl=W(this.baseUrl,t?.logoutUrl??"oauth2/logout"),this.fhircastHubUrl=W(this.baseUrl,t?.fhircastHubUrl??"fhircast/STU3"),this.clientId=t?.clientId??"",this.clientSecret=t?.clientSecret??"",this.credentialsInHeader=t?.authCredentialsMethod==="header",this.defaultHeaders=t?.defaultHeaders??{},this.onUnauthenticated=t?.onUnauthenticated,this.refreshGracePeriod=t?.refreshGracePeriod??wu,this.cacheTime=t?.cacheTime??(N()?Cu:Pu),this.cacheTime>0?this.requestCache=new Re(t?.resourceCacheSize??Ru):this.requestCache=void 0,t?.autoBatchTime?(this.autoBatchTime=t.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0),t?.accessToken&&this.setAccessToken(t.accessToken),this.storage.getInitPromise===void 0?(t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initPromise=Promise.resolve(),this.dispatchEvent({type:"storageInitialized"})):(this.initComplete=!1,this.initPromise=this.storage.getInitPromise(),this.initPromise.then(()=>{t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initComplete=!0,this.dispatchEvent({type:"storageInitialized"})}).catch(n=>{console.error(n),this.initComplete=!0,this.dispatchEvent({type:"storageInitFailed",payload:{error:n}})})),this.setupStorageListener()}get isInitialized(){return this.initComplete}getInitPromise(){return this.initPromise}async attemptResumeActiveLogin(){let t=this.getActiveLogin();t&&(this.setAccessToken(t.accessToken,t.refreshToken),await this.refreshProfile())}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}getFhircastHubUrl(){return this.fhircastHubUrl}getDefaultHeaders(){return this.defaultHeaders}clear(){this.storage.clear(),N()&&sessionStorage.clear(),this.clearActiveLogin()}clearActiveLogin(){this.storage.setString("activeLogin",void 0),this.requestCache?.clear(),this.accessToken=void 0,this.refreshToken=void 0,this.refreshPromise=void 0,this.accessTokenExpires=void 0,this.sessionDetails=void 0,this.medplumServer=void 0,this.dispatchEvent({type:"change"})}invalidateUrl(t){t=t.toString(),this.requestCache?.delete(t)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(t){let n=W(this.fhirBaseUrl,t);if(this.requestCache)for(let i of this.requestCache.keys())(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache.delete(i)}get(t,n={}){t=t.toString();let i=this.getCacheEntry(t,n);if(i)return i.value;let o;t.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue&&!n.disableAutoBatch?o=new Promise((a,c)=>{this.autoBatchQueue.push({method:"GET",url:t.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:c}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):o=this.request("GET",t,n);let s=new M(o);return this.setCacheEntry(t,s),s}post(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("POST",t,o)}put(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("PUT",t,o)}patch(t,n,i={}){return t=t.toString(),this.setRequestBody(i,n),this.setRequestContentType(i,A.JSON_PATCH),this.invalidateUrl(t),this.request("PATCH",t,i)}delete(t,n){return t=t.toString(),this.invalidateUrl(t),this.request("DELETE",t,n)}async startNewUser(t,n){let{codeChallengeMethod:i,codeChallenge:o}=await this.startPkce();return this.post("auth/newuser",{...t,clientId:t.clientId??this.clientId,codeChallengeMethod:i,codeChallenge:o},void 0,n)}async startNewProject(t,n){return this.post("auth/newproject",t,void 0,n)}async startNewPatient(t,n){return this.post("auth/newpatient",t,void 0,n)}async startLogin(t,n){return this.post("auth/login",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async startGoogleLogin(t,n){return this.post("auth/google",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async ensureCodeChallenge(t){return t.codeChallenge?t:{...t,...await this.startPkce()}}async signOut(){await this.post(this.logoutUrl,{}),this.clear()}async signInWithRedirect(t){let i=new URLSearchParams(ee.getSearch()).get("code");if(!i){await this.requestAuthorization(t);return}return this.processCode(i)}signOutWithRedirect(){ee.assign(this.logoutUrl)}async signInWithExternalAuth(t,n,i,o,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),ee.assign(this.getExternalAuthRedirectUri(t,n,i,a,s))}async exchangeExternalAccessToken(t,n){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");return this.fetchTokens({grant_type:_e.TokenExchange,subject_token_type:Fo.AccessToken,client_id:n,subject_token:t})}getExternalAuthRedirectUri(t,n,i,o,s=!0){let a=new URL(t);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",n),a.searchParams.set("redirect_uri",i),a.searchParams.set("scope",o.scope??"openid profile email"),a.searchParams.set("state",JSON.stringify(o)),s){let{codeChallenge:c,codeChallengeMethod:u}=o;if(!u)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!c)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");a.searchParams.set("code_challenge_method",u),a.searchParams.set("code_challenge",c)}return a.toString()}fhirUrl(...t){return new URL(W(this.fhirBaseUrl,t.join("/")))}fhirSearchUrl(t,n){let i=this.fhirUrl(t);return n&&(i.search=Mn(n)),i}search(t,n,i){let o=this.fhirSearchUrl(t,n),s="search-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=this.getBundle(o,i);return this.setCacheEntry(s,c),c}searchOne(t,n,i){let o=this.fhirSearchUrl(t,n);o.searchParams.set("_count","1"),o.searchParams.sort();let s="searchOne-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=new M(this.search(t,o.searchParams,i).then(u=>u.entry?.[0]?.resource));return this.setCacheEntry(s,c),c}searchResources(t,n,i){let s="searchResources-"+this.fhirSearchUrl(t,n).toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=new M(this.search(t,n,i).then(_o));return this.setCacheEntry(s,c),c}async*searchResourcePages(t,n,i){let o=this.fhirSearchUrl(t,n);for(;o;){let s=new URL(o).searchParams;s.has("_count")||s.set("_count","1000");let a=await this.search(t,s,i),c=a.link?.find(u=>u.relation==="next");if(!a.entry?.length&&!c)break;yield _o(a),o=c?.url?new URL(c.url):void 0}}valueSetExpand(t,n){let i=this.fhirUrl("ValueSet","$expand");return i.search=new URLSearchParams(t).toString(),this.get(i.toString(),n)}getCached(t,n){let i=this.requestCache?.get(this.fhirUrl(t,n).toString())?.value;return i?.isOk()?i.read():void 0}getCachedReference(t){let n=t.reference;if(!n)return;if(n==="system")return Do;let[i,o]=n.split("/");if(!(!i||!o))return this.getCached(i,o)}readResource(t,n,i){if(!n)throw new Error('The "id" parameter cannot be null, undefined, or an empty string.');return this.get(this.fhirUrl(t,n),i)}readReference(t,n){let i=t.reference;if(!i)return new M(Promise.reject(new Error("Missing reference")));if(i==="system")return new M(Promise.resolve(Do));let[o,s]=i.split("/");return!o||!s?new M(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}requestSchema(t){if(ln(t))return Promise.resolve();let n=t+"-requestSchema",i=this.getCacheEntry(n,void 0);if(i)return i.value;let o=new M((async()=>{let s=`{
5
5
  StructureDefinitionList(_filter: "name eq ${t}") {
6
6
  resourceType,
7
7
  name,
@@ -1,7 +1,7 @@
1
1
  var ot=class{constructor(e,t){this.operator=e,this.child=t}toString(){return`${this.operator}(${this.child.toString()})`}},ne=class{constructor(e,t,n){this.operator=e,this.left=t,this.right=n}toString(){return`(${this.left.toString()} ${this.operator} ${this.right.toString()})`}},st=class{constructor(){this.prefixParselets={};this.infixParselets={}}registerInfix(e,t){return this.infixParselets[e]=t,this}registerPrefix(e,t){return this.prefixParselets[e]=t,this}prefix(e,t,n){return this.registerPrefix(e,{parse(i,o){let s=i.consumeAndParse(t);return n(o,s)}})}infixLeft(e,t,n){return this.registerInfix(e,{parse(i,o,s){let a=i.consumeAndParse(t);return n(o,s,a)},precedence:t})}construct(e){return new ar(e,this.prefixParselets,this.infixParselets)}},ar=class{constructor(e,t,n){this.tokens=e,this.prefixParselets=t,this.infixParselets=n}hasMore(){return this.tokens.length>0}match(e){return this.peek()?.id!==e?!1:(this.consume(),!0)}consumeAndParse(e=1/0){let t=this.consume(),n=this.prefixParselets[t.id];if(!n)throw Error(`Parse error at "${t.value}" (line ${t.line}, column ${t.column}). No matching prefix parselet.`);let i=n.parse(this,t);for(;e>this.getPrecedence();){let o=this.consume();i=this.getInfixParselet(o).parse(this,i,o)}return i}getPrecedence(){let e=this.peek();if(!e)return 1/0;let t=this.getInfixParselet(e);return t?t.precedence:1/0}consume(e,t){if(!this.tokens.length)throw Error("Cant consume unknown more tokens.");if(e&&this.peek()?.id!==e){let n=this.peek();throw Error(`Expected ${e} but got "${n.id}" (${n.value}) at line ${n.line} column ${n.column}.`)}if(t&&this.peek()?.value!==t){let n=this.peek();throw Error(`Expected "${t}" but got "${n.value}" at line ${n.line} column ${n.column}.`)}return this.tokens.shift()}peek(){return this.tokens.length>0?this.tokens[0]:void 0}removeComments(){this.tokens=this.tokens.filter(e=>e.id!=="Comment")}getInfixParselet(e){return this.infixParselets[e.id==="Symbol"?e.value:e.id]}};var Ie=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 hn="http://unitsofmeasure.org",Uc="http://loinc.org",Bc="http://snomed.info/sct",Wc="http://www.nlm.nih.gov/research/umls/rxnorm",qc="http://www.ama-assn.org/go/cpt",jc="http://hl7.org/fhir/sid/icd-10",$c="http://hl7.org/fhir/sid/ndc",mn="http://hl7.org",Gc="http://terminology.hl7.org";var at="created",cr="gone",ur="not-modified",lr="found",pr="not-found",dr="conflict",fr="unauthorized",yn="forbidden",gn="precondition-failed",xn="multiple-matches",vn="too-many-requests",ct="accepted",Tn="server-timeout",Sn="business-rule",Qc={resourceType:"OperationOutcome",id:"ok",issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},zc={resourceType:"OperationOutcome",id:at,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},Jc={resourceType:"OperationOutcome",id:ur,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},bn={resourceType:"OperationOutcome",id:pr,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},ke={resourceType:"OperationOutcome",id:fr,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},En={...ke,issue:[...ke.issue,{severity:"error",code:"expired",details:{text:"Token expired"}}]},hr={...ke,issue:[...ke.issue,{severity:"error",code:"invalid",details:{text:"Token not issued for this audience"}}]},Kc={resourceType:"OperationOutcome",id:yn,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},Xc={resourceType:"OperationOutcome",id:cr,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},Yc={resourceType:"OperationOutcome",id:gn,issue:[{severity:"error",code:"processing",details:{text:"Precondition Failed"}}]},Zc={resourceType:"OperationOutcome",id:xn,issue:[{severity:"error",code:"multiple-matches",details:{text:"Multiple resources found matching condition"}}]},eu={resourceType:"OperationOutcome",id:vn,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function tu(r){return{resourceType:"OperationOutcome",id:ct,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:r}]}}function b(r,e){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:r},...e?{expression:[e]}:void 0}]}}function ru(r,e){return{resourceType:"OperationOutcome",id:dr,issue:[{severity:"error",code:"conflict",details:{coding:e?[{code:e}]:void 0,text:r}}]}}function y(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"structure",details:{text:r}}]}}function Rn(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:r.toString()}]}}function nu(r){return{resourceType:"OperationOutcome",id:Tn,issue:[{severity:"error",code:"timeout",details:{text:r??"Server timeout"}}]}}function iu(r){let e=r.toString();return{resourceType:"OperationOutcome",id:lr,issue:[{severity:"information",code:"informational",details:{coding:[{system:"urn:ietf:rfc:3986",code:e}],text:"Redirect to "+e}}]}}function ou(r,e){return{resourceType:"OperationOutcome",id:Sn,issue:[{severity:"error",code:"business-rule",details:{id:r,text:e}}]}}function mr(r){return!r||typeof r!="object"?!1:r instanceof Error||typeof DOMException<"u"&&r instanceof DOMException?!0:Object.prototype.toString.call(r)==="[object Error]"}function ut(r){return typeof r=="object"&&r!==null&&r.resourceType==="OperationOutcome"}function yr(r){return r.id==="ok"||r.id===at||r.id===ur||r.id===ct}function su(r){return r.id===at}function au(r){return r.id===ct}function cu(r){return r.id===lr}function uu(r){return r.id===pr}function lu(r){return r.id===dr}function pu(r){return r.id===cr}function du(r){return r.id===fr}function fu(r){switch(r.id){case"ok":return 200;case at:return 201;case ct:return 202;case lr:return 302;case ur:return 304;case fr:return 401;case yn:return 403;case pr:return 404;case dr:return 409;case cr:return 410;case gn:case xn:return 412;case Sn:return 422;case vn:return 429;case Tn:return 504;default:return r.issue?.[0]?.code==="exception"?500:400}}function hu(r,e){if(!yr(r)||e===void 0)throw new d(r)}var d=class extends Error{constructor(e,t){super(Cn(e)),this.outcome=e,this.cause=t}};function lt(r){return r instanceof d?r.outcome:ut(r)?r:b(Ve(r))}function Ve(r){return r?typeof r=="string"?r:mr(r)?r.message:ut(r)?Cn(r):typeof r=="object"&&"code"in r&&typeof r.code=="string"?r.code:JSON.stringify(r):"Unknown error"}function Cn(r){let e=r.issue?.map(mo)??[];return e.length>0?e.join("; "):"Unknown error"}function mo(r){let e;return r.details?.text?r.diagnostics?e=`${r.details.text} (${r.diagnostics})`:e=r.details.text:r.diagnostics?e=r.diagnostics:e="Unknown error",r.expression?.length&&(e+=` (${r.expression.join(", ")})`),e}function me(r,e,t,n,i){let o={severity:r,code:e,details:{text:t},expression:[n]};return i&&(o.diagnostics=JSON.stringify(i)),o}function T(r,e){return me("error","structure",e,r)}function Pn(r,e){return me("error","invariant",`Constraint ${e.key} not met: ${e.description}`,r,{fhirpath:e.expression})}function wn(r,e,t,n){return me("error","processing",e,r,{...n,error:t})}var yo={"http://hl7.org/fhirpath/System.String":"string"};function yu(r){let e={};return r.min!==0&&(e.min=r.min),r.max!==1&&Number.isFinite(r.max)?e.max=r.max:r.max===Number.POSITIVE_INFINITY&&(e.max=Number.MAX_SAFE_INTEGER),e.type=r.type?.map(t=>({...t,extension:void 0,code:yo[t.code]??t.code})),e}function go(r,e){let t=e.max&&e.max===Number.MAX_SAFE_INTEGER?Number.POSITIVE_INFINITY:e.max;return{path:r,description:"",type:e.type??[],min:e.min??0,max:t??1,isArray:!!t&&t>1,constraints:[]}}function An(r){let e=Object.create(null);for(let[t,n]of Object.entries(r))e[t]={name:t,type:t,path:t,elements:Object.fromEntries(Object.entries(n.elements).map(([i,o])=>[i,go(i,o)])),constraints:[],innerTypes:[]};return e}var On={Element:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]}}},BackboneElement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]}}},Address:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"code"}]},text:{type:[{code:"string"}]},line:{max:9007199254740991,type:[{code:"string"}]},city:{type:[{code:"string"}]},district:{type:[{code:"string"}]},state:{type:[{code:"string"}]},postalCode:{type:[{code:"string"}]},country:{type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Age:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Annotation:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"author[x]":{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Organization"]},{code:"string"}]},time:{type:[{code:"dateTime"}]},text:{min:1,type:[{code:"markdown"}]}}},Attachment:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},contentType:{type:[{code:"code"}]},language:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]},url:{type:[{code:"url"}]},size:{type:[{code:"unsignedInt"}]},hash:{type:[{code:"base64Binary"}]},title:{type:[{code:"string"}]},creation:{type:[{code:"dateTime"}]}}},CodeableConcept:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},coding:{max:9007199254740991,type:[{code:"Coding"}]},text:{type:[{code:"string"}]}}},Coding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"uri"}]},version:{type:[{code:"string"}]},code:{type:[{code:"code"}]},display:{type:[{code:"string"}]},userSelected:{type:[{code:"boolean"}]}}},ContactDetail:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"string"}]},telecom:{max:9007199254740991,type:[{code:"ContactPoint"}]}}},ContactPoint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"code"}]},value:{type:[{code:"string"}]},use:{type:[{code:"code"}]},rank:{type:[{code:"positiveInt"}]},period:{type:[{code:"Period"}]}}},Contributor:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{min:1,type:[{code:"string"}]},contact:{max:9007199254740991,type:[{code:"ContactDetail"}]}}},Count:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},DataRequirement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},"subject[x]":{type:[{code:"CodeableConcept"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Group"]}]},mustSupport:{max:9007199254740991,type:[{code:"string"}]},codeFilter:{max:9007199254740991,type:[{code:"DataRequirementCodeFilter"}]},dateFilter:{max:9007199254740991,type:[{code:"DataRequirementDateFilter"}]},limit:{type:[{code:"positiveInt"}]},sort:{max:9007199254740991,type:[{code:"DataRequirementSort"}]}}},DataRequirementCodeFilter:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]},code:{max:9007199254740991,type:[{code:"Coding"}]}}},DataRequirementDateFilter:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},"value[x]":{type:[{code:"dateTime"},{code:"Period"},{code:"Duration"}]}}},DataRequirementSort:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},direction:{min:1,type:[{code:"code"}]}}},Distance:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Dosage:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},sequence:{type:[{code:"integer"}]},text:{type:[{code:"string"}]},additionalInstruction:{max:9007199254740991,type:[{code:"CodeableConcept"}]},patientInstruction:{type:[{code:"string"}]},timing:{type:[{code:"Timing"}]},"asNeeded[x]":{type:[{code:"boolean"},{code:"CodeableConcept"}]},site:{type:[{code:"CodeableConcept"}]},route:{type:[{code:"CodeableConcept"}]},method:{type:[{code:"CodeableConcept"}]},doseAndRate:{max:9007199254740991,type:[{code:"DosageDoseAndRate"}]},maxDosePerPeriod:{type:[{code:"Ratio"}]},maxDosePerAdministration:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},maxDosePerLifetime:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},DosageDoseAndRate:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{type:[{code:"CodeableConcept"}]},"dose[x]":{type:[{code:"Range"},{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},"rate[x]":{type:[{code:"Ratio"},{code:"Range"},{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},Duration:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},ElementDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},representation:{max:9007199254740991,type:[{code:"code"}]},sliceName:{type:[{code:"string"}]},sliceIsConstraining:{type:[{code:"boolean"}]},label:{type:[{code:"string"}]},code:{max:9007199254740991,type:[{code:"Coding"}]},slicing:{type:[{code:"ElementDefinitionSlicing"}]},short:{type:[{code:"string"}]},definition:{type:[{code:"markdown"}]},comment:{type:[{code:"markdown"}]},requirements:{type:[{code:"markdown"}]},alias:{max:9007199254740991,type:[{code:"string"}]},min:{type:[{code:"unsignedInt"}]},max:{type:[{code:"string"}]},base:{type:[{code:"ElementDefinitionBase"}]},contentReference:{type:[{code:"uri"}]},type:{max:9007199254740991,type:[{code:"ElementDefinitionType"}]},"defaultValue[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},meaningWhenMissing:{type:[{code:"markdown"}]},orderMeaning:{type:[{code:"string"}]},"fixed[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},"pattern[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},example:{max:9007199254740991,type:[{code:"ElementDefinitionExample"}]},"minValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},"maxValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},maxLength:{type:[{code:"integer"}]},condition:{max:9007199254740991,type:[{code:"id"}]},constraint:{max:9007199254740991,type:[{code:"ElementDefinitionConstraint"}]},mustSupport:{type:[{code:"boolean"}]},isModifier:{type:[{code:"boolean"}]},isModifierReason:{type:[{code:"string"}]},isSummary:{type:[{code:"boolean"}]},binding:{type:[{code:"ElementDefinitionBinding"}]},mapping:{max:9007199254740991,type:[{code:"ElementDefinitionMapping"}]}}},ElementDefinitionSlicingDiscriminator:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},path:{min:1,type:[{code:"string"}]}}},ElementDefinitionSlicing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},discriminator:{max:9007199254740991,type:[{code:"ElementDefinitionSlicingDiscriminator"}]},description:{type:[{code:"string"}]},ordered:{type:[{code:"boolean"}]},rules:{min:1,type:[{code:"code"}]}}},ElementDefinitionBase:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},min:{min:1,type:[{code:"unsignedInt"}]},max:{min:1,type:[{code:"string"}]}}},ElementDefinitionType:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"uri"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},targetProfile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},aggregation:{max:9007199254740991,type:[{code:"code"}]},versioning:{type:[{code:"code"}]}}},ElementDefinitionExample:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},label:{min:1,type:[{code:"string"}]},"value[x]":{min:1,type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]}}},ElementDefinitionConstraint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},key:{min:1,type:[{code:"id"}]},requirements:{type:[{code:"string"}]},severity:{min:1,type:[{code:"code"}]},human:{min:1,type:[{code:"string"}]},expression:{type:[{code:"string"}]},xpath:{type:[{code:"string"}]},source:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]}}},ElementDefinitionBinding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},strength:{min:1,type:[{code:"code"}]},description:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]}}},ElementDefinitionMapping:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},identity:{min:1,type:[{code:"id"}]},language:{type:[{code:"code"}]},map:{min:1,type:[{code:"string"}]},comment:{type:[{code:"string"}]}}},Expression:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},description:{type:[{code:"string"}]},name:{type:[{code:"id"}]},language:{min:1,type:[{code:"code"}]},expression:{type:[{code:"string"}]},reference:{type:[{code:"uri"}]}}},Extension:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},url:{min:1,type:[{code:"uri"}]},"value[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]}}},HumanName:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},text:{type:[{code:"string"}]},family:{type:[{code:"string"}]},given:{max:9007199254740991,type:[{code:"string"}]},prefix:{max:9007199254740991,type:[{code:"string"}]},suffix:{max:9007199254740991,type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Identifier:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"CodeableConcept"}]},system:{type:[{code:"uri"}]},value:{type:[{code:"string"}]},period:{type:[{code:"Period"}]},assigner:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MarketingStatus:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},country:{min:1,type:[{code:"CodeableConcept"}]},jurisdiction:{type:[{code:"CodeableConcept"}]},status:{min:1,type:[{code:"CodeableConcept"}]},dateRange:{min:1,type:[{code:"Period"}]},restoreDate:{type:[{code:"dateTime"}]}}},Meta:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},versionId:{type:[{code:"id"}]},lastUpdated:{type:[{code:"instant"}]},source:{type:[{code:"uri"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},security:{max:9007199254740991,type:[{code:"Coding"}]},tag:{max:9007199254740991,type:[{code:"Coding"}]},project:{type:[{code:"uri"}]},author:{type:[{code:"Reference"}]},onBehalfOf:{type:[{code:"Reference"}]},account:{type:[{code:"Reference"}]},accounts:{max:9007199254740991,type:[{code:"Reference"}]},compartment:{max:9007199254740991,type:[{code:"Reference"}]}}},Money:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},currency:{type:[{code:"code"}]}}},Narrative:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},status:{min:1,type:[{code:"code"}]},div:{min:1,type:[{code:"xhtml"}]}}},ParameterDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"code"}]},use:{min:1,type:[{code:"code"}]},min:{type:[{code:"integer"}]},max:{type:[{code:"string"}]},documentation:{type:[{code:"string"}]},type:{min:1,type:[{code:"code"}]},profile:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]}}},Period:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},start:{type:[{code:"dateTime"}]},end:{type:[{code:"dateTime"}]}}},Population:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"age[x]":{type:[{code:"Range"},{code:"CodeableConcept"}]},gender:{type:[{code:"CodeableConcept"}]},race:{type:[{code:"CodeableConcept"}]},physiologicalCondition:{type:[{code:"CodeableConcept"}]}}},ProdCharacteristic:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},height:{type:[{code:"Quantity"}]},width:{type:[{code:"Quantity"}]},depth:{type:[{code:"Quantity"}]},weight:{type:[{code:"Quantity"}]},nominalVolume:{type:[{code:"Quantity"}]},externalDiameter:{type:[{code:"Quantity"}]},shape:{type:[{code:"string"}]},color:{max:9007199254740991,type:[{code:"string"}]},imprint:{max:9007199254740991,type:[{code:"string"}]},image:{max:9007199254740991,type:[{code:"Attachment"}]},scoring:{type:[{code:"CodeableConcept"}]}}},ProductShelfLife:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},identifier:{type:[{code:"Identifier"}]},type:{min:1,type:[{code:"CodeableConcept"}]},period:{min:1,type:[{code:"Quantity"}]},specialPrecautionsForStorage:{max:9007199254740991,type:[{code:"CodeableConcept"}]}}},Quantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Range:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},low:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},high:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},Ratio:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},numerator:{type:[{code:"Quantity"}]},denominator:{type:[{code:"Quantity"}]}}},Reference:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},reference:{type:[{code:"string"}]},type:{type:[{code:"uri"}]},identifier:{type:[{code:"Identifier"}]},display:{type:[{code:"string"}]}}},RelatedArtifact:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},label:{type:[{code:"string"}]},display:{type:[{code:"string"}]},citation:{type:[{code:"markdown"}]},url:{type:[{code:"url"}]},document:{type:[{code:"Attachment"}]},resource:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/Resource"]}]}}},SampledData:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},origin:{min:1,type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},period:{min:1,type:[{code:"decimal"}]},factor:{type:[{code:"decimal"}]},lowerLimit:{type:[{code:"decimal"}]},upperLimit:{type:[{code:"decimal"}]},dimensions:{min:1,type:[{code:"positiveInt"}]},data:{type:[{code:"string"}]}}},Signature:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,max:9007199254740991,type:[{code:"Coding"}]},when:{min:1,type:[{code:"instant"}]},who:{min:1,type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},onBehalfOf:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},targetFormat:{type:[{code:"code"}]},sigFormat:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]}}},SubstanceAmount:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"amount[x]":{type:[{code:"Quantity"},{code:"Range"},{code:"string"}]},amountType:{type:[{code:"CodeableConcept"}]},amountText:{type:[{code:"string"}]},referenceRange:{type:[{code:"SubstanceAmountReferenceRange"}]}}},SubstanceAmountReferenceRange:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},lowLimit:{type:[{code:"Quantity"}]},highLimit:{type:[{code:"Quantity"}]}}},Timing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},event:{max:9007199254740991,type:[{code:"dateTime"}]},repeat:{type:[{code:"TimingRepeat"}]},code:{type:[{code:"CodeableConcept"}]}}},TimingRepeat:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"bounds[x]":{type:[{code:"Duration"},{code:"Range"},{code:"Period"}]},count:{type:[{code:"positiveInt"}]},countMax:{type:[{code:"positiveInt"}]},duration:{type:[{code:"decimal"}]},durationMax:{type:[{code:"decimal"}]},durationUnit:{type:[{code:"code"}]},frequency:{type:[{code:"positiveInt"}]},frequencyMax:{type:[{code:"positiveInt"}]},period:{type:[{code:"decimal"}]},periodMax:{type:[{code:"decimal"}]},periodUnit:{type:[{code:"code"}]},dayOfWeek:{max:9007199254740991,type:[{code:"code"}]},timeOfDay:{max:9007199254740991,type:[{code:"time"}]},when:{max:9007199254740991,type:[{code:"code"}]},offset:{type:[{code:"unsignedInt"}]}}},TriggerDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{type:[{code:"string"}]},"timing[x]":{type:[{code:"Timing"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Schedule"]},{code:"date"},{code:"dateTime"}]},data:{max:9007199254740991,type:[{code:"DataRequirement"}]},condition:{type:[{code:"Expression"}]}}},UsageContext:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"Coding"}]},"value[x]":{min:1,type:[{code:"CodeableConcept"},{code:"Quantity"},{code:"Range"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/PlanDefinition","http://hl7.org/fhir/StructureDefinition/ResearchStudy","http://hl7.org/fhir/StructureDefinition/InsurancePlan","http://hl7.org/fhir/StructureDefinition/HealthcareService","http://hl7.org/fhir/StructureDefinition/Group","http://hl7.org/fhir/StructureDefinition/Location","http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MoneyQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},SimpleQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{max:0,type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},IdentityProvider:{elements:{authorizeUrl:{min:1,type:[{code:"string"}]},tokenUrl:{min:1,type:[{code:"string"}]},tokenAuthMethod:{type:[{code:"code"}]},userInfoUrl:{min:1,type:[{code:"string"}]},clientId:{min:1,type:[{code:"string"}]},clientSecret:{min:1,type:[{code:"string"}]},usePkce:{type:[{code:"boolean"}]},useSubject:{type:[{code:"boolean"}]}}}};function Tr(r){return new xr(r).parse()}var ye=An(On),Sr=Object.create(null),In=Object.create(null),vo={"http://hl7.org/fhir/StructureDefinition/MoneyQuantity":"MoneyQuantity","http://hl7.org/fhir/StructureDefinition/SimpleQuantity":"SimpleQuantity","http://hl7.org/fhir/uv/sql-on-fhir/StructureDefinition/ViewDefinition":"ViewDefinition"};function Mn(r){let e;return e=In[r],e||(e=In[r]=Object.create(null)),e}function br(r){let t=(Array.isArray(r)?r:r.entry?.map(n=>n.resource)??[]).filter(n=>n?.resourceType==="StructureDefinition");Bn(t);for(let n of t)Er(n)}function Er(r){if(!r?.name)throw new Error("Failed loading StructureDefinition from bundle");if(r.resourceType!=="StructureDefinition")return;let e=Tr(r),t=vo[r.url],n,i;t?(n=ye,i=t):r.url===`http://hl7.org/fhir/StructureDefinition/${r.type}`||r.url===`https://medplum.com/fhir/StructureDefinition/${r.type}`||r.type?.startsWith("http://")||r.type?.startsWith("https://")?(n=ye,i=r.type):(n=Mn(r.url),i=r.type),n[i]=e;for(let o of e.innerTypes)o.parentType=e,n[o.name]=o;Sr[r.url]=e}function _n(){return ye}function Ln(r){return!!ye[r]}function qe(r,e){if(e){let t=Mn(e)[r];if(t)return t}return ye[r]}function ie(r,e){let t=qe(r,e);if(!t)throw new d(b("Unknown data type: "+r));return t}function Fn(r){let e=ye[r];return e&&Rr(e)}function Nn(r){return!!Sr[r]}function Un(r){return Sr[r]}var xr=class{constructor(e){if(!e.snapshot?.element||e.snapshot.element.length===0)throw new Error(`No snapshot defined for StructureDefinition '${e.name}'`);this.root=e.snapshot.element[0],this.elements=e.snapshot.element.slice(1),this.elementIndex=Object.create(null),this.index=0,this.resourceSchema={name:e.name,path:this.root.path,title:e.title,type:e.type,url:e.url,version:e.version,kind:e.kind,description:Eo(e),elements:{},constraints:this.parseElementDefinition(this.root).constraints,innerTypes:[],summaryProperties:new Set,mandatoryProperties:new Set},this.innerTypes=[]}parse(){let e=this.next();for(;e;){if(e.sliceName)this.parseSliceStart(e);else if(e.id?.includes(":")){if(this.slicingContext?.current){let t=gr(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[gr(e,n.path)]=t;break}n=n.parent}if(!n){let i=gr(e,this.root.path);e.isSummary&&this.resourceSchema.summaryProperties?.add(i.replace("[x]","")),t.min>0&&this.resourceSchema.mandatoryProperties?.add(i.replace("[x]","")),this.resourceSchema.elements[i]=t}this.checkFieldExit(e)}e=this.next()}return this.checkFieldExit(),this.innerTypes.length>0&&(this.resourceSchema.innerTypes=this.innerTypes),this.resourceSchema}checkFieldEnter(e,t){this.isInnerType(e)&&this.enterInnerType(e),this.slicingContext&&!De(this.slicingContext.path,e?.path)&&(this.slicingContext=void 0),e.slicing&&!this.slicingContext&&this.enterSlice(e,t)}enterInnerType(e){for(;this.backboneContext&&!De(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;let t=vr(e);this.backboneContext={type:{name:t,type:t,path:e.path,title:e.label,description:e.definition,elements:{},constraints:this.parseElementDefinition(e).constraints,innerTypes:[]},path:e.path,parent:De(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,t){bo(e)&&!this.peek()?.sliceName||(t.slicing={discriminator:(e.slicing?.discriminator??[]).map(n=>{if(n.type!=="value"&&n.type!=="pattern"&&n.type!=="type")throw new Error(`Unsupported slicing discriminator type: ${n.type}`);return{path:n.path,type:n.type}}),slices:[],ordered:e.slicing?.ordered??!1,rule:e.slicing?.rules},this.slicingContext={field:t.slicing,path:e.path??""})}checkFieldExit(e=void 0){if(this.backboneContext&&!De(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!De(this.backboneContext.path,e?.path));else this.innerTypes.push(this.backboneContext.type),this.backboneContext=void 0}next(){let e=this.peek();if(e)return this.index++,e}peek(){let e=this.elements[this.index];if(e){if(this.elementIndex[e.path??""]=e,e.contentReference){let t=e.contentReference.slice(e.contentReference.indexOf("#")+1),n=this.elementIndex[t];return n?{...n,id:e.id,path:e.path,min:e.min??n.min,max:e.max??n.max,base:{path:n.base?.path??t,min:e.base?.min??n.base?.min??n.min,max:e.base?.max??n.base?.max??n.max},contentReference:e.contentReference,definition:e.definition}:void 0}return e}}isInnerType(e){let t=this.peek();return!!(De(e?.path,t?.path)&&e.type?.some(n=>["BackboneElement","Element"].includes(n.code)))}parseSliceStart(e){if(!this.slicingContext)throw new Error(`Invalid slice start before discriminator: ${e.sliceName} (${e.id})`);this.slicingContext.current={...this.parseElementDefinition(e),name:e.sliceName??"",definition:e.definition,elements:{}},this.slicingContext.field.slices.push(this.slicingContext.current)}parseElementDefinitionType(e){return(e.type??[]).map(t=>{let n;return(t.code==="BackboneElement"||t.code==="Element")&&(n=vr(e)),n||(n=oe(t,"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type")?.valueUrl),n||(n=t.code??""),{code:n,targetProfile:t.targetProfile,profile:t.profile}})}parseElementDefinition(e){let t=Vn(e.max),n=e.base?.max?Vn(e.base.max):t,i={type:"ElementDefinition",value:e};return{description:e.definition||"",path:e.path||e.base?.path||"",min:e.min??0,max:t,isArray:n>1,constraints:(e.constraint??[]).map(o=>({key:o.key??"",severity:o.severity??"error",expression:o.expression??"",description:o.human??""})),type:this.parseElementDefinitionType(e),fixed:Dn(P(i,"fixed[x]")),pattern:Dn(P(i,"pattern[x]")),binding:e.binding}}};function Cu(r,e){if(!r)return;let t=[];for(let n of e){t.push("_"+n);let i=ye[r.resourceType].elements[n+"[x]"];i&&t.push(...i.type.map(o=>n+k(o.code)))}for(let n of Object.getOwnPropertyNames(r))!e.includes(n)&&!t.includes(n)&&!To.includes(n)&&Object.defineProperty(r,n,{enumerable:!1,writable:!1,value:void 0});return r.meta={...r.meta,tag:r.meta?.tag?r.meta.tag.concat(kn):[kn]},r}var kn={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},To=["resourceType","id","meta"];function Vn(r){return r==="*"?Number.POSITIVE_INFINITY:Number.parseInt(r,10)}function gr(r,e=""){return So(r.path,e)}function So(r,e){return r?e&&r.startsWith(e)?r.substring(e.length+1):r:""}function De(r,e){return!r||!e?!1:e.startsWith(r+".")||e===r}function Dn(r){return Array.isArray(r)&&r.length>0?r[0]:S(r)?void 0:r}function bo(r){let e=r.slicing?.discriminator;return!!(r.type?.some(t=>t.code==="Extension")&&e?.length===1&&e[0].type==="value"&&e[0].path==="url")}function Eo(r){let e=r.description;return e?.startsWith(`Base StructureDefinition for ${r.name} Type: `)&&(e=e.substring(`Base StructureDefinition for ${r.name} Type: `.length)),e}function wr(r,e,t){new Cr(r,e,t).crawl()}function Vu(r,e,t){return new Pr(r,e,t).crawl()}var Cr=class{constructor(e,t,n){this.root=e,this.visitor=t,this.schema=n?.schema??ie(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}crawl(){this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}crawlObject(e,t,n){let i=O(e.value);if(i&&this.visitor.onEnterResource&&this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties)for(let o of Object.keys(e.value))this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&this.visitor.onExitResource(n,e,t)}crawlProperty(e,t,n,i){let o=Me(e,t,{withPath:!0});this.visitor.visitProperty&&this.visitor.visitProperty(e,t,i,o,n);for(let s of o)if(s)for(let a of je(s))this.crawlPropertyValue(a,i)}crawlPropertyValue(e,t){if(!pt(e.type)){let n=ie(e.type);this.crawlObject(e,n,t)}}},Pr=class{constructor(e,t,n){this.root=e,this.visitor=t,this.schema=n?.schema??ie(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}async crawl(){return this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}async crawlObject(e,t,n){let i=O(e.value);if(i&&this.visitor.onEnterResource&&await this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&await this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties&&e.value)for(let o of Object.keys(e.value))await this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))await this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&await this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&await this.visitor.onExitResource(n,e,t)}async crawlProperty(e,t,n,i){let o=Me(e,t,{withPath:!0});if(this.visitor.visitPropertyAsync)for(let s of o)await this.visitor.visitPropertyAsync(e,t,i,s,n);for(let s of o)if(s)for(let a of je(s))await this.crawlPropertyValue(a,i)}async crawlPropertyValue(e,t){if(!pt(e.type)){let n=ie(e.type);await this.crawlObject(e,n,t)}}};function Me(r,e,t){if(r===void 0)return[void 0];if(e==="$this")return[r];let n=t?.withPath?Ro:P,[i,...o]=e.split("."),s=[n(r,i,t)];for(let a of o){let c=[];for(let u of s)if(Array.isArray(u))for(let p of u)c.push(n(p,a,t));else(t?.withPath&&u&&u.value!==void 0||!t?.withPath&&u!==void 0)&&c.push(n(u,a,t));s=c}return s}function Ro(r,e,t){let n=r.path;return Co(P(r,e,t),n,e)}function Co(r,e,t){let n=e?e+".":"";return r===void 0?{type:"undefined",value:void 0,path:`${n}${t}`}:Array.isArray(r)?r.map((i,o)=>({...i,path:`${n}${t}[${o}]`})):{...r,path:`${n}${t}`}}var Ar={base64Binary:"string",boolean:"boolean",canonical:"string",code:"string",date:"string",dateTime:"string",decimal:"number",id:"string",instant:"string",integer:"number",integer64:"string",markdown:"string",oid:"string",positiveInt:"number",string:"string",time:"string",unsignedInt:"number",uri:"string",url:"string",uuid:"string",xhtml:"string","http://hl7.org/fhirpath/System.String":"string"},Po=new Ie(1e3);function pt(r){return r==="undefined"||r in Ar}var ft={base64Binary:/^([A-Za-z\d+/]{4})*([A-Za-z\d+/]{2}==|[A-Za-z\d+/]{3}=)?$/,canonical:/^\S*$/,code:/^[^\s]+( [^\s]+)*$/,date:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1]))?)?$/,dateTime:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1])(T([01]\d|2[0-3])(:[0-5]\d:([0-5]\d|60)(\.\d{1,9})?)?)?)?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00)?)?)?$/,id:/^[A-Za-z0-9\-.]{1,64}$/,instant:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])T([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00))$/,markdown:/^[\r\n\t\u0020-\uFFFF]+$/,oid:/^urn:oid:[0-2](\.(0|[1-9]\d*))+$/,string:/^[\r\n\t\u0020-\uFFFF]+$/,time:/^([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?$/,uri:/^\S*$/,url:/^\S*$/,uuid:/^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,xhtml:/.*/},wo={"ele-1":!0,"dom-3":!0,"org-1":!0,"sdf-19":!0};function ju(r,e){if(!r.resourceType)throw new d(y("Missing resource type"));return new dt(v(r),e).validate()}function $u(r,e){return new dt(r,e).validate()}var dt=class{constructor(e,t){this.issues=[],this.root=e,this.currentResource=[],O(e.value)&&this.currentResource.push(e.value),t?.profile?this.schema=Tr(t.profile):this.schema=ie(e.type)}validate(){this.constraintsCheck({...this.root,path:this.schema.path},this.schema),Or(this.root.value,this.schema.path,this.issues),wr(this.root,this,{schema:this.schema,initialPath:this.schema.path});let e=this.issues,t=!1;for(let n of e)n.severity==="error"&&(t=!0);if(t)throw new d({resourceType:"OperationOutcome",issue:e});return e}onExitObject(e,t,n){this.checkAdditionalProperties(t,n.elements,t.path)}onEnterResource(e,t){this.currentResource.push(t.value)}onExitResource(){this.currentResource.pop()}visitProperty(e,t,n,i,o){let s=o.elements[t];if(!s)throw new Error(`Missing element validation schema for ${t}`);for(let a of i){if(!this.checkPresence(a,s,n))return;let c;if(s.isArray){if(!Array.isArray(a)){this.issues.push(T(n,"Expected array of values for property"));return}c=a}else{if(Array.isArray(a)){this.issues.push(T(n,"Expected single value for property"));return}c=[a]}(c.length<s.min||c.length>s.max)&&this.issues.push(T(s.path,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${c.length}`)),Io(a,s)||this.issues.push(T(n,"Value did not match expected pattern"));let u=s.slicing?Object.fromEntries(s.slicing.slices.map(p=>[p.name,0])):void 0;for(let p of c){this.constraintsCheck(p,s),this.referenceTypeCheck(p,s),this.checkPropertyValue(p);let m=ko(p,s.slicing);m&&u&&(u[m]+=1)}this.validateSlices(s.slicing?.slices,u,n)}}checkPresence(e,t,n){return!Array.isArray(e)&&e.value===void 0?(t.min>0&&this.issues.push(T(e.path,"Missing required property")),!1):S(e)?(this.issues.push(T(n,"Invalid empty value")),!1):!0}checkPropertyValue(e){pt(e.type)?this.validatePrimitiveType(e):S(e.value)&&this.issues.push(T(e.path,"Invalid empty non-primitive value"))}validateSlices(e,t,n){if(!(!e||!t))for(let i of e){let o=t[i.name];(o<i.min||o>i.max)&&this.issues.push(T(n,`Incorrect number of values provided for slice '${i.name}': expected ${i.min}..${Number.isFinite(i.max)?i.max:"*"}, but found ${o}`))}}checkAdditionalProperties(e,t,n){let i=e.value;if(!i)return;let o={};for(let s of Object.keys(i)){if(s==="resourceType")continue;let a=Oo(e,s,t);if(a){let c,u;a.startsWith("_")?(c=a.slice(1),u=s.slice(1)):(c="_"+a,u="_"+s),c in o&&o[c]!==u&&this.issues.push(me("warning","structure",`Type of primitive extension does not match the type of property "${a.startsWith("_")?a.slice(1):a}"`,a)),o[a]&&this.issues.push(me("warning","structure",`Conflicting choice of type properties: "${s}", "${o[a]}"`,s)),o[a]=s;continue}!(s in t)&&!(s.startsWith("_")&&s.slice(1)in t)&&this.issues.push(T(`${n}.${s}`,`Invalid additional property "${s}"`))}}constraintsCheck(e,t){let n=t.constraints;if(n){for(let i of n)if(i.severity==="error"&&!(i.key in wo)&&!this.isExpressionTrue(i,e)){this.issues.push(Pn(e.path,i));return}}}referenceTypeCheck(e,t){if(e.type!=="Reference")return;let n=e.value;if(!q(n)||n.reference.startsWith("#"))return;let i=n.reference.includes("?")?n.reference.split("?")[0]:n.reference.split("/")[0];if(!i)return;let o=t.type.find(m=>m.code==="Reference")?.targetProfile;if(!o)return;let s=mn+"/fhir/StructureDefinition/",a=s+"Resource",c=s+i,u="https://medplum.com/fhir/StructureDefinition/",p=u+i;for(let m of o)if(m===a||m===c||m===p||!m.startsWith(s)&&!m.startsWith(u))return;this.issues.push(me("warning","structure",`Invalid reference: got "${i}", expected "${o.join('", "')}"`,e.path))}isExpressionTrue(e,t){let n={"%context":t,"%ucum":v(hn)};this.currentResource.length>0&&(n["%resource"]=v(this.currentResource[this.currentResource.length-1])),O(this.root.value)&&(n["%rootResource"]=this.root);try{let i=E(e.expression,[t],n,Po);return i.length===1&&i[0].value===!0}catch(i){return this.issues.push(wn(t.path,"Error evaluating invariant expression",i,{fhirpath:e.expression})),!1}}validatePrimitiveType(e){let[t,n]=Vo(e),i=e.path;if(t){let{type:o,value:s}=t;if(!(o in Ar)){this.issues.push(T(i,`Invalid JSON type: ${o} is not a valid FHIR type`));return}let a=Ar[o];if(typeof s!==a){s!==null&&this.issues.push(T(i,`Invalid JSON type: expected ${a}, but got ${typeof s}`));return}a==="string"?this.validateString(s,o,i):a==="number"&&this.validateNumber(s,o,i)}n&&wr(n,this,{schema:ie("Element"),initialPath:i})}validateString(e,t,n){if(!e.trim()){this.issues.push(T(n,"String must contain non-whitespace content"));return}if(e.length>1024*1024){this.issues.push(T(n,"String cannot be larger than 1 MB"));return}let i=ft[t];i&&!i.exec(e)&&this.issues.push(T(n,"Invalid "+t+" format"))}validateNumber(e,t,n){Number.isNaN(e)||!Number.isFinite(e)?this.issues.push(T(n,"Invalid numeric value")):Ao(t)&&!Number.isInteger(e)?this.issues.push(T(n,"Expected number to be an integer")):t===l.positiveInt&&e<=0?this.issues.push(T(n,"Expected number to be positive")):t===l.unsignedInt&&e<0&&this.issues.push(T(n,"Expected number to be non-negative"))}};function Ao(r){return r===l.integer||r===l.positiveInt||r===l.unsignedInt}function Oo(r,e,t){let n="";e.startsWith("_")&&(e=e.slice(1),n="_");let i=e.split(/(?=[A-Z])/g),o="";for(let s of i){o+=s;let a=o+"[x]";if(t[a])return P(r,o)?n+a:void 0}}function Or(r,e,t){for(let[n,i]of Object.entries(r)){let o=`${e}.${n}`,s=n.startsWith("_")?n.slice(1):`_${n}`;if(i===null)t.push(T(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?t.push(T(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!r[s]?.[a]?t.push(T(`${o}[${a}]`,"Invalid null value")):i[a]&&Or(i[a],`${o}[${a}]`,t);else typeof i=="object"&&Or(i,o,t)}}function Io(r,e){let t=Array.isArray(r)?r.map(n=>({type:n.type,value:n.value})):{type:r.type,value:r.value};return!(e.pattern&&!$e(t,e.pattern)||e.fixed&&!se(t,e.fixed))}function Ir(r,e,t,n){if(Array.isArray(r))return!1;let i;e.path==="$this"?i=t:i=(n??t.elements)[e.path];let o=t.type;switch(e.type){case"value":case"pattern":if(!r||!i)return!1;if(i.pattern)return $e(r,i.pattern);if(i.fixed)return se(r,i.fixed);if(i.binding?.strength==="required"&&i.binding.valueSet)return!0;break;case"type":return!r||!o?.length?!1:o.some(s=>s.code===r.type)}return!1}function ko(r,e){if(e){for(let t of e.slices)if(e.discriminator.every(n=>je(Me(r,n.path))?.some(i=>Ir(i,n,t))))return t.name}}function Vo(r){if(typeof r.value!="object"||!r.value)return[r,void 0];let e=r.value.valueOf();if(e===r.value)return[void 0,{type:"Element",value:r.value}];let t=new Set(Object.keys(e)),n=Object.entries(r.value).filter(([o,s])=>!t.has(o)),i=n.length>0?Object.fromEntries(n):void 0;return[{type:r.type,value:e},{type:"Element",value:i}]}function h(r){return[{type:l.boolean,value:r}]}function v(r){return r==null?{type:"undefined",value:void 0}:Number.isSafeInteger(r)?{type:l.integer,value:r}:typeof r=="number"?{type:l.decimal,value:r}:typeof r=="boolean"?{type:l.boolean,value:r}:typeof r=="string"?{type:l.string,value:r}:w(r)?{type:l.Quantity,value:r}:O(r)?{type:r.resourceType,value:r}:_r(r)?{type:l.CodeableConcept,value:r}:Mr(r)?{type:l.Coding,value:r}:{type:l.BackboneElement,value:r}}function L(r){return r.length===0?!1:!!r[0].value}function H(r,e){if(r.length!==0){if(r.length===1&&(!e||r[0].type===e))return r[0];throw new Error(`Expected singleton of type ${e}, but found ${JSON.stringify(r)}`)}}function P(r,e,t){if(!r.value)return;let n=xt(r.type,e,t?.profileUrl);return n?Do(r,e,n):Mo(r,e)}function Do(r,e,t){let n=r.value,i=t.type;if(!i||i.length===0)return;let o,s="undefined",a,c=t.path.lastIndexOf("."),u=t.path.substring(c+1);for(let p of i){let m=u.replace("[x]",k(p.code));if(o=n[m],a=n["_"+m],o!==void 0||a!==void 0){s=p.code;break}}if(a)if(Array.isArray(o)){o=o.slice();for(let p=0;p<Math.max(o.length,a.length);p++)o[p]=kr(o[p],a[p])}else if(!o&&Array.isArray(a)){o=a.slice();for(let p=0;p<a.length;p++)o[p]=kr(void 0,a[p])}else o=kr(o,a);if(!S(o))return(s==="Element"||s==="BackboneElement")&&(s=t.type[0].code),Array.isArray(o)?o.map(p=>Wn(p,s)):Wn(o,s)}function Wn(r,e){return e==="Resource"&&O(r)&&(e=r.resourceType),{type:e,value:r}}function Mo(r,e){let t=r.value;if(!t||typeof t!="object")return;let n;if(e in t){let i=t[e];Array.isArray(i)?n=i.map(v):n=v(i)}else{let i=e.endsWith("[x]")?e.substring(0,e.length-3):e;for(let o of Object.values(l)){let s=i+k(o);if(s in t){let a=t[s];Array.isArray(a)?n=a.map(c=>({type:o,value:c})):n={type:o,value:a};break}}}if(Array.isArray(n)){if(n.length===0||S(n[0]))return}else if(S(n))return;return n}function mt(r){let e=[];for(let t of r){let n=!1;for(let i of e)if(L(Ge(t,i))){n=!0;break}n||e.push(t)}return e}function $n(r){return h(!L(r))}function Gn(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?h(!1):h(r.every((t,n)=>L(Ge(t,e[n]))))}function Hn(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?h(!0):h(r.some((t,n)=>!L(Ge(t,e[n]))))}function Ge(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?h(Math.abs(t-n)<1e-8):w(t)&&w(n)?h(Jn(t,n)):h(typeof t=="object"&&typeof n=="object"?Dr(r,e):t===n)}function Vr(r,e){return r.length===0&&e.length===0?h(!0):r.length!==e.length?h(!1):(r.sort(qn),e.sort(qn),h(r.every((t,n)=>L(_o(t,e[n])))))}function _o(r,e){let{type:t,value:n}=r,{type:i,value:o}=e,s=n?.valueOf(),a=o?.valueOf();return typeof s=="number"&&typeof a=="number"?h(Math.abs(s-a)<.01):w(s)&&w(a)?h(Jn(s,a)):h(t==="Coding"&&i==="Coding"?typeof s!="object"||typeof a!="object"?!1:s.code===a.code&&s.system===a.system:typeof s=="object"&&typeof a=="object"?Dr({...s,id:void 0},{...a,id:void 0}):typeof s=="string"&&typeof a=="string"?s.toLowerCase()===a.toLowerCase():s===a)}function qn(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?t-n:typeof t=="string"&&typeof n=="string"?t.localeCompare(n):0}function yt(r,e){let{value:t}=r;if(t==null)return!1;let n=e;switch(n.startsWith("System.")&&(n=n.substring(7)),n.startsWith("FHIR.")&&(n=n.substring(5)),n){case"Boolean":return typeof t=="boolean";case"Decimal":case"Integer":return typeof t=="number";case"Date":return Qn(t);case"DateTime":return _e(t);case"Time":return typeof t=="string"&&!!/^T\d/.exec(t);case"Period":return zn(t);case"Quantity":return w(t);default:return r.type===n||typeof t=="object"&&t?.resourceType===n}}function Qn(r){return typeof r=="string"&&!!ft.date.exec(r)}function _e(r){return typeof r=="string"&&!!ft.dateTime.exec(r)}function zn(r){return!!(r&&typeof r=="object"&&("start"in r&&_e(r.start)||"end"in r&&_e(r.end)))}function gt(r){if(r){if(Qn(r)||_e(r))return{start:ht(r,"0000-01-01T00:00:00.000"),end:ht(r,"xxxx-12-31T23:59:59.999")};if(zn(r))return{start:r.start?ht(r.start,"0000-01-01T00:00:00.000"):void 0,end:r.end?ht(r.end,"xxxx-12-31T23:59:59.999"):void 0}}}function ht(r,e){let t="Z",n=Math.max(r.indexOf("+",10),r.indexOf("-",10));n>-1?(t=r.substring(n),r=r.substring(0,n)):r.endsWith("Z")&&(r=r.substring(0,r.length-1));let i=r+e.substring(r.length)+t;return new Date(i).toISOString()}function w(r){return!!(r&&typeof r=="object"&&"value"in r&&typeof r.value=="number")}function Jn(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 Dr(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(jn(o)&&jn(s)){if(!Dr(o,s))return!1}else if(o!==s)return!1}return!0}function jn(r){return r!==null&&typeof r=="object"}function kr(r,e){if(e){if(typeof e!="object")throw new Error("Primitive extension must be an object");return Lo(r??{},e)}return r}function Lo(r,e){return delete e.__proto__,delete e.constructor,Object.assign(r,e)}function Qe(r,e){return O(r,e)&&"id"in r&&typeof r.id=="string"}function ge(r){let e=D(r)??"undefined/undefined",t=No(r);return t===e?{reference:e}:{reference:e,display:t}}function D(r){if(q(r))return r.reference;if(Qe(r))return`${r.resourceType}/${r.id}`}function xe(r){if(r)return q(r)?r.reference.split("/")[1]:r.id}function el(r){if(r?.reference===void 0)throw new d(y("Reference missing reference property."));let[e,t]=r.reference.split("/");if(e===""||t===""||t===void 0)throw new d(y("Unable to parse reference string."));return[e,t]}function Fo(r){return r.resourceType==="Patient"||r.resourceType==="Practitioner"||r.resourceType==="RelatedPerson"}function No(r){if(Fo(r)){let e=Uo(r);if(e)return e}if(r.resourceType==="Device"){let e=Bo(r);if(e)return e}if(r.resourceType==="MedicationRequest"&&r.medicationCodeableConcept)return He(r.medicationCodeableConcept);if(r.resourceType==="Subscription"&&r.criteria)return r.criteria;if(r.resourceType==="User"&&r.email)return r.email;if("name"in r&&r.name&&typeof r.name=="string")return r.name;if("code"in r&&r.code){let e=r.code;if(Array.isArray(e)&&(e=e[0]),_r(e))return He(e);if(zo(e))return e.text}return D(r)??""}function Uo(r){let e=r.name;if(e&&e.length>0)return ze(e[0])}function Bo(r){let e=r.deviceName;if(e&&e.length>0)return e[0].name}function tl(r){if(!("photo"in r))return;let e=r.photo;if(e)if(Array.isArray(e))for(let t of e){let n=Kn(t);if(n)return n}else return Kn(e)}function Kn(r){if(r.url&&r.contentType?.startsWith("image/"))return r.url}function rl(r){return r?new Date(r):void 0}function vt(r,e){let t=new Date(r);t.setUTCHours(0,0,0,0);let n=e?new Date(e):new Date;n.setUTCHours(0,0,0,0);let i=t.getUTCFullYear(),o=t.getUTCMonth(),s=t.getUTCDate(),a=n.getUTCFullYear(),c=n.getUTCMonth(),u=n.getUTCDate(),p=a-i;(c<o||c===o&&u<s)&&p--;let m=a*12+c-(i*12+o);u<s&&m--;let x=Math.floor((n.getTime()-t.getTime())/(1e3*60*60*24));return{years:p,months:m,days:x}}function nl(r,e){let{years:t,months:n,days:i}=vt(r,e);return t>=2?t.toString().padStart(3,"0")+"Y":n>=1?n.toString().padStart(3,"0")+"M":i.toString().padStart(3,"0")+"D"}function il(r){let e={};return Xn(r.item,e),e}function Xn(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer[0]),Xn(t.item,e)}function ol(r){let e={};return Yn(r.item,e),e}function Yn(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]?e[t.linkId]=[...e[t.linkId],...t.answer]:e[t.linkId]=t.answer),Yn(t.item,e)}function Wo(r,e){let t=r.identifier;if(!t)return;let n=Array.isArray(t)?t:[t];for(let i of n)if(i.system===e)return i.value}function sl(r,e,t){let n=r.identifier;if(!n){r.identifier=[{system:e,value:t}];return}for(let i of n)if(i.system===e){i.value=t;return}n.push({system:e,value:t})}function al(r,...e){let t=oe(r,...e);if(!t)return;let n=P({type:"Extension",value:t},"value[x]");if(n)return Array.isArray(n)?n[0].value:n.value}function oe(r,...e){let t=r;for(let n=0;n<e.length&&t;n++)t=t?.extension?.find(i=>i.url===e[n]);return t}function Tt(r,e){let t=Fr(r);return JSON.stringify(t,null,e?2:void 0)??""}function Fr(r){if(!(r==null||r===""))return typeof r=="object"?Array.isArray(r)?qo(r):jo(r):r}function qo(r){let e=r.length;if(e===0)return;let t,n=0;for(let i=0;i<e;i++){let o=r[i],s=Fr(o);s!==o&&!t&&(t=Array.from(r)),s===void 0?t&&(t[i]=null):(t&&(t[i]=s),n++)}if(n!==0)return t??r}function jo(r){let e,t=0;for(let n in r){let i=r[n],o=Fr(i);o!==i&&!e&&(e={...r}),o===void 0?e&&delete e[n]:(e&&(e[n]=o),t++)}if(t!==0)return e??r}function S(r){if(r==null)return!0;let e=typeof r;return e==="string"||e==="object"?!Y(r):!1}function Y(r){if(r==null)return!1;let e=typeof r;return e==="string"&&r!==""||e==="object"&&("length"in r&&r.length>0||Object.keys(r).length>0)}function cl(r){if(!r)return;let e=r.length-1;for(;e>=0&&S(r[e]);)e--;return e>=0?r.slice(0,e+1):void 0}function se(r,e,t){return r===e||S(r)&&S(e)?!0:S(r)||S(e)?!1:Array.isArray(r)&&Array.isArray(e)?$o(r,e):Array.isArray(r)||Array.isArray(e)?!1:R(r)&&R(e)?Go(r,e,t):(R(r)||R(e),!1)}function $o(r,e){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(!se(r[t],e[t]))return!1;return!0}function Go(r,e,t){let n=new Set;Object.keys(r).forEach(i=>n.add(i)),Object.keys(e).forEach(i=>n.add(i)),t==="meta"&&(n.delete("versionId"),n.delete("lastUpdated"),n.delete("author"));for(let i of n){let o=r[i],s=e[i];if(!se(o,s,i))return!1}return!0}function $e(r,e){return S(r)?!0:S(e)?!1:Array.isArray(r)&&Array.isArray(e)?Ho(r,e):Array.isArray(r)||Array.isArray(e)?!1:R(r)&&R(e)?Qo(r,e):R(r)||R(e)?!1:r===e}function Ho(r,e){return e.every(t=>r.some(n=>$e(n,t)))}function Qo(r,e){return Object.entries(e).every(([t,n])=>t in r&&$e(r[t],n))}function ve(r){return r===void 0?r:JSON.parse(JSON.stringify(r))}function ul(r){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(r)}function R(r){return r!==null&&typeof r=="object"}function Zn(r){return r.every(St)}function St(r){return typeof r=="string"}function Mr(r){return R(r)&&"code"in r&&typeof r.code=="string"}function _r(r){return R(r)&&"coding"in r&&Array.isArray(r.coding)&&r.coding.every(Mr)}function ll(r,e){if(r){for(let t of r)if(t.coding){for(let n of t.coding)if(n.system===e)return n.code}}}function zo(r){return R(r)&&"text"in r&&typeof r.text=="string"}var ei=[];for(let r=0;r<256;r++)ei.push(r.toString(16).padStart(2,"0"));function ti(r){let e=ni(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=ei[t[i]];return n.join("")}function ri(r){let e=ni(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=String.fromCharCode(t[i]);return window.btoa(n.join(""))}function ni(r){return ArrayBuffer.isView(r)?r.buffer:r}function k(r){return r?r.charAt(0).toUpperCase()+r.substring(1):""}function pl(r){return r===r.toLowerCase()&&r!==r.toUpperCase()}function Nr(r){return r.length>0&&r.startsWith(r[0].toUpperCase())}function ae(r,e){let t=r+".";if(e.startsWith(t))return e.slice(t.length)}function Lr(r,e){return r.coding?.find(t=>t.system===e)?.code}function dl(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 fl(r,e,t,n){return r.qualifiedInterval?.find(i=>ii(i,e)&&Yo(i,t,r.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function hl(r,e,t){return Jo(r,e,t)[0]}function Jo(r,e,t){return r.qualifiedInterval?.filter(n=>ii(n,e)&&(!t||t.includes(n.condition)))??[]}function ii(r,e){return Ko(r,e)&&Xo(r,e)}function Ko(r,e){return!r.gender||r.gender===e.gender}function Xo(r,e){return!r.age||oi(vt(e.birthDate).years,r.age)}function Yo(r,e,t){return!!r.range&&oi(e,r.range,t)}function oi(r,e,t){return(e.low?.value===void 0||es(r,e.low.value,t))&&(e.high?.value===void 0||Zo(r,e.high.value,t))}function ml(r,e){return parseFloat(r.toFixed(e))}function yl(r,e,t){return Q(r,t)===Q(e,t)}function gl(r,e,t){return Q(r,t)<Q(e,t)}function xl(r,e,t){return Q(r,t)>Q(e,t)}function Zo(r,e,t){return Q(r,t)<=Q(e,t)}function es(r,e,t){return Q(r,t)>=Q(e,t)}function Q(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}function vl(r,e,t){return r.find(n=>typeof e=="string"?Lr(n.code||{},t)===e:Lr(n.code||{},t)===Lr(e,t))}function je(r){if(r!==void 0)return Array.isArray(r)?r:[r]}function Tl(r){return Array.isArray(r)?r[0]:r}var Ur=r=>new Promise(e=>{setTimeout(e,r)});function Br(r,e,t){let n=[];for(let i=0;i<t-1;i++){let o=r.indexOf(e);if(o<0)break;n.push(r.slice(0,o)),r=r.slice(o+e.length)}return n.push(r),n}function si(r){let e,t=!1;return function(){return t||(e=r(),t=!0),e}}function ce(r,e){return r?(r.push(e),r):[e]}function bt(r){return r.sort((e,t)=>e.localeCompare(t))}function Wr(r){return r.endsWith("/")?r:r+"/"}function ts(r){return r.startsWith("/")?r.slice(1):r}function j(r,e){return new URL(ts(e),Wr(r.toString())).toString()}function ai(r,e){return j(r,e).toString().replace("http://","ws://").replace("https://","wss://")}function ci(r){return typeof r=="object"&&!Array.isArray(r)&&!(r instanceof URLSearchParams)&&(r=Object.fromEntries(Object.entries(r).filter(e=>e[1]!==void 0))),new URLSearchParams(r).toString()}var rs=/^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-_]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-_]*[A-Za-z0-9])$/;function Sl(r){return rs.test(r)}function bl(r,e){return r?.meta?.profile?.includes(e)||(r.meta=r.meta??{},r.meta.profile=r.meta.profile??[],r.meta.profile.push(e)),r}function El(r,e){return new Map(r.entry?.filter(n=>!!n.resource).map(n=>[Wo(n.resource,e),n.resource]).filter(([n])=>n!==void 0))}function Rl(r,e){if(r?.meta?.profile?.includes(e)){let t=r.meta.profile.indexOf(e);r.meta.profile.splice(t,1)}return r}function Cl(r,e){let t=[];if(!r)return t;for(let n=0;n<r.length;n++){let i=e(r[n],n);Array.isArray(i)?t.push(...i):i!==void 0&&t.push(i)}return t}function Pl(r){return r.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/“/g,"&ldquo;").replace(/”/g,"&rdquo;").replace(/‘/g,"&lsquo;").replace(/’/g,"&rsquo;").replace(/…/g,"&hellip;")}function ui(r){if(!r)return"";switch(r.type){case"Address":return is(r.value);case"CodeableConcept":return He(r.value);case"Coding":return li(r.value);case"ContactPoint":return r.value.value;case"HumanName":return ze(r.value);case"Quantity":return ue(r.value);case"Reference":return ns(r.value);default:return r.value?.toString()??""}}function ns(r){return r?r.display??r.reference??Tt(r):""}function is(r,e){if(!r)return"";let t=[];if(r.line&&t.push(...r.line),r.city||r.state||r.postalCode){let n=[];r.city&&n.push(r.city),r.state&&n.push(r.state),r.postalCode&&n.push(r.postalCode),t.push(n.join(", "))}return r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.join(e?.lineSeparator??", ").trim()}function ze(r,e){if(!r)return"";let t=[];if(r.prefix&&e?.prefix!==!1&&t.push(...r.prefix),r.given&&t.push(...r.given),r.family&&t.push(r.family),r.suffix&&e?.suffix!==!1&&t.push(...r.suffix),r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.length===0){let n=Te(r.text);if(n)return n}return t.join(" ").trim()}function Ol(r){let e=[];return r.given&&e.push(...r.given),e.join(" ").trim()}function Il(r){return Te(r.family)??""}function jr(r){return r instanceof Date&&!isNaN(r.getTime())}function kl(r,e,t){if(!r)return"";let n=new Date(r);return jr(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...t})):""}function os(r,e,t){if(!r)return"";let n=new Date("2000-01-01T"+r+"Z");return jr(n)?n.toLocaleTimeString(e,t):""}function qr(r,e,t){if(!r)return"";let n=new Date(r);return jr(n)?n.toLocaleString(e,t):""}function Vl(r,e,t){return!r||!r.start&&!r.end?"":qr(r.start,e,t)+" - "+qr(r.end,e,t)}var ss={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},as={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},cs={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function Dl(r){if(!r)return"";let e=[];return us(e,r.repeat),r.event&&e.push(r.event.map(t=>qr(t)).join(", ")),k(e.join(" ").trim())}function us(r,e){if(!e?.periodUnit)return;let t=e.frequency??1,n=e.period??1,i=e.periodUnit;t===1&&n===1?r.push(ss[i]):(t===1?r.push("once"):r.push(t+" times"),n===1?r.push("per "+as[i]):r.push("per "+n+" "+cs[i])),e.dayOfWeek&&r.push("on "+e.dayOfWeek.map(k).join(", ")),e.timeOfDay&&r.push("at "+e.timeOfDay.map(o=>os(o)).join(", "))}function Ml(r,e,t=!1){if(t&&e===void 0)throw new Error("Precision must be specified for exclusive ranges");let n=r?.low&&{...r.low,comparator:void 0},i=r?.high&&{...r.high,comparator:void 0};return n?.value===void 0&&i?.value===void 0?"":n?.value!==void 0&&i?.value===void 0?t&&e!==void 0?(n.value=ds(n.value,e),`> ${ue(n,e)}`):`>= ${ue(n,e)}`:n?.value===void 0&&i?.value!==void 0?t&&e!==void 0?(i.value=ps(i.value,e),`< ${ue(i,e)}`):`<= ${ue(i,e)}`:(n?.unit===i?.unit&&delete n?.unit,`${ue(n,e)} - ${ue(i,e)}`)}function ue(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 _l(r){return r?.value===void 0?"":r.value.toLocaleString(void 0,{style:"currency",currency:r.currency??"USD",currencyDisplay:"narrowSymbol"})}function He(r){if(!r)return"";let e=Te(r.text);return e||(r.coding?r.coding.map(t=>li(t)).join(", "):"")}function li(r,e){let t=Te(r?.display);if(t){let n=e?Te(r?.code):void 0;return`${t}${n?" ("+n+")":""}`}return Te(r?.code)??""}function ls(r){if(!r)return"";let e=[];if(r.valueQuantity)e.push(ue(r.valueQuantity));else if(r.valueCodeableConcept)e.push(He(r.valueCodeableConcept));else{let t=Te(r.valueString);t&&e.push(t)}return"component"in r&&e.push(r.component.map(t=>ls(t)).join(" / ")),e.join(" / ").trim()}function Te(r){return typeof r=="string"?r:void 0}function ps(r,e,t=1){return(pi(r,e)+t)*Math.pow(10,-e)}function ds(r,e,t=1){return(pi(r,e)-t)*Math.pow(10,-e)}function pi(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}var l={Address:"Address",Age:"Age",Annotation:"Annotation",Attachment:"Attachment",BackboneElement:"BackboneElement",CodeableConcept:"CodeableConcept",Coding:"Coding",ContactDetail:"ContactDetail",ContactPoint:"ContactPoint",Contributor:"Contributor",Count:"Count",DataRequirement:"DataRequirement",Distance:"Distance",Dosage:"Dosage",Duration:"Duration",Expression:"Expression",Extension:"Extension",HumanName:"HumanName",Identifier:"Identifier",MarketingStatus:"MarketingStatus",Meta:"Meta",Money:"Money",Narrative:"Narrative",ParameterDefinition:"ParameterDefinition",Period:"Period",Population:"Population",ProdCharacteristic:"ProdCharacteristic",ProductShelfLife:"ProductShelfLife",Quantity:"Quantity",Range:"Range",Ratio:"Ratio",Reference:"Reference",RelatedArtifact:"RelatedArtifact",SampledData:"SampledData",Signature:"Signature",SubstanceAmount:"SubstanceAmount",SystemString:"http://hl7.org/fhirpath/System.String",Timing:"Timing",TriggerDefinition:"TriggerDefinition",UsageContext:"UsageContext",base64Binary:"base64Binary",boolean:"boolean",canonical:"canonical",code:"code",date:"date",dateTime:"dateTime",decimal:"decimal",id:"id",instant:"instant",integer:"integer",markdown:"markdown",oid:"oid",positiveInt:"positiveInt",string:"string",time:"time",unsignedInt:"unsignedInt",uri:"uri",url:"url",uuid:"uuid"};function Bl(r){for(let e of r.entry??[]){let t=e.resource;t.resourceType==="SearchParameter"&&$r(t)}}function Bn(r){let e=Array.isArray(r)?r:r.entry?.map(t=>t.resource)??[];for(let t of e)t?.resourceType==="StructureDefinition"&&t.kind==="resource"&&fi(t.type)}function fi(r){let e=F.types[r];return e||(e={searchParamsDetails:{}},F.types[r]=e),!e.searchParams&&r!=="Binary"&&(e.searchParams={_id:{base:[r],code:"_id",type:"token",expression:r+".id"},_lastUpdated:{base:[r],code:"_lastUpdated",type:"date",expression:r+".meta.lastUpdated"},_compartment:{base:[r],code:"_compartment",type:"reference",expression:r+".meta.compartment"},_profile:{base:[r],code:"_profile",type:"uri",expression:r+".meta.profile"},_security:{base:[r],code:"_security",type:"token",expression:r+".meta.security"},_source:{base:[r],code:"_source",type:"uri",expression:r+".meta.source"},_tag:{base:[r],code:"_tag",type:"token",expression:r+".meta.tag"}}),e}function $r(r){for(let e of r.base??[]){let t=fi(e);t.searchParams||(t.searchParams={}),t.searchParams[r.code]=r}}function vr(r){let e=r.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?fs((r.base?.path??r.path)?.split(".")):e}function fs(r){return r.length===1?r[0]:r.map(k).join("")}function Rr(r){return r.kind==="resource"&&r.name!=="Resource"&&r.name!=="DomainResource"}function Wl(){return Object.values(_n()).filter(Rr).map(r=>r.name)}function ql(r){return F.types[r]?.searchParams}function jl(r,e){return F.types[r]?.searchParams?.[e]}function $l(r){let e=r.replaceAll("[x]","").split(".").pop();return hs(e)}function hs(r){let e;return r.length<100?e=r.match(/[A-Z]+(?![a-z])|[A-Z]?[a-z]+|\d+/g)??[]:e=r.split(/(?=[A-Z])/),e.map(ys).join(" ").replace("_"," ").replace(/\s+/g," ")}var ms=new Set(["ID","IP","PKCE","JWKS","URI","URL","OMB","UDI"]);function ys(r){let e=r.toUpperCase();return r===e?r:ms.has(e)?e:e.charAt(0)+r.slice(1)}function xt(r,e,t){let n=qe(r,t);if(n)return gs(n.elements,e)}function gs(r,e){let t=r[e]??r[e+"[x]"];if(t)return t;for(let n=0;n<e.length;n++){let i=e[n];if(i>="A"&&i<="Z"){let o=e.slice(0,n)+"[x]",s=r[o];if(s)return s}}}function Gl(r){return!!(r&&typeof r=="object"&&"type"in r&&"value"in r)}function O(r,e){return!(!r||typeof r!="object"||!("resourceType"in r)||e&&r.resourceType!==e)}function q(r,e){return r&&typeof r=="object"&&"reference"in r&&typeof r.reference=="string"?e?r.reference.match(new RegExp(`^${e}(/|\\?)`))!==null:!0:!1}var F={types:{}};function hi(r){switch(r.type){case l.uuid:case l.uri:case l.url:case l.string:case l.oid:case l.markdown:case l.id:case l.code:case l.canonical:case l.base64Binary:case l.SystemString:case l.date:case l.dateTime:case l.instant:return r.value;case l.Identifier:return`${r.value.system??""}|${r.value.value}`;case l.Coding:return di(r.value);case l.CodeableConcept:return r.value.coding?.map(di).join(",")??r.value.text;case l.HumanName:return r.value.text?r.value.text:ze(r.value);case l.unsignedInt:case l.positiveInt:case l.integer:case l.decimal:return r.value.toString();case l.boolean:return r.value?"true":"false";case l.Extension:return r.value.url;case l.ContactPoint:return r.value.value;case l.Quantity:case l.Age:case l.Count:case l.Duration:return`${r.value.value}|${r.value.system??""}|${r.value.code??r.value.unit??""}`;case l.Reference:return r.value.reference;default:return Qe(r.value)?D(r.value):JSON.stringify(r)}}function di(r){return r?`${r.system??""}|${r.code}`:""}function Le(r){if(r.startsWith("T"))return r+"T00:00:00.000Z".substring(r.length);if(r.length<=10)return r;try{return new Date(r).toISOString()}catch{return r}}var Z=()=>[],I={empty:(r,e)=>h(e.length===0||e.every(t=>S(t.value))),hasValue:(r,e)=>h(e.length!==0),exists:(r,e,t)=>t?h(e.filter(n=>L(t.eval(r,[n]))).length>0):h(e.length>0&&e.every(n=>!S(n.value))),all:(r,e,t)=>h(e.every(n=>L(t.eval(r,[n])))),allTrue:(r,e)=>{for(let t of e)if(!t.value)return h(!1);return h(!0)},anyTrue:(r,e)=>{for(let t of e)if(t.value)return h(!0);return h(!1)},allFalse:(r,e)=>{for(let t of e)if(t.value)return h(!1);return h(!0)},anyFalse:(r,e)=>{for(let t of e)if(!t.value)return h(!0);return h(!1)},subsetOf:(r,e,t)=>{if(e.length===0)return h(!0);let n=t.eval(r,Se(r));return n.length===0?h(!1):h(e.every(i=>n.some(o=>o.value===i.value)))},supersetOf:(r,e,t)=>{let n=t.eval(r,Se(r));return n.length===0?h(!0):e.length===0?h(!1):h(n.every(i=>e.some(o=>o.value===i.value)))},count:(r,e)=>[{type:l.integer,value:e.length}],distinct:(r,e)=>{let t=[];for(let n of e)t.some(i=>i.value===n.value)||t.push(n);return t},isDistinct:(r,e)=>h(e.length===I.distinct(r,e).length),where:(r,e,t)=>e.filter(n=>L(t.eval(r,[n]))),select:(r,e,t)=>e.map(n=>t.eval({parent:r,variables:{$this:n}},[n])).flat(),repeat:Z,ofType:(r,e,t)=>e.filter(n=>n.type===t.name),single:(r,e)=>{if(e.length>1)throw new Error("Expected input length one for single()");return e.length===0?[]:e.slice(0,1)},first:(r,e)=>e.length===0?[]:e.slice(0,1),last:(r,e)=>e.length===0?[]:e.slice(e.length-1,e.length),tail:(r,e)=>e.length===0?[]:e.slice(1,e.length),skip:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new Error("Expected a number for skip(num)");return n>=e.length?[]:n<=0?e:e.slice(n,e.length)},take:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new Error("Expected a number for take(num)");return n>=e.length?e:n<=0?[]:e.slice(0,n)},intersect:(r,e,t)=>{if(!t)return e;let n=t.eval(r,Se(r)),i=[];for(let o of e)!i.some(s=>s.value===o.value)&&n.some(s=>s.value===o.value)&&i.push(o);return i},exclude:(r,e,t)=>{if(!t)return e;let n=t.eval(r,Se(r)),i=[];for(let o of e)n.some(s=>s.value===o.value)||i.push(o);return i},union:(r,e,t)=>{if(!t)return e;let n=t.eval(r,Se(r));return mt([...e,...n])},combine:(r,e,t)=>{if(!t)return e;let n=t.eval(r,Se(r));return[...e,...n]},htmlChecks:(r,e,t)=>[v(!0)],iif:(r,e,t,n,i)=>{let o=t.eval(r,e);if(o.length>1||o.length===1&&typeof o[0].value!="boolean")throw new Error("Expected criterion to evaluate to a Boolean");return L(o)?n.eval(r,e):i?i.eval(r,e):[]},toBoolean:(r,e)=>{if(e.length===0)return[];let[{value:t}]=J(e,1);if(typeof t=="boolean")return[{type:l.boolean,value:t}];if(typeof t=="number"&&(t===0||t===1))return h(!!t);if(typeof t=="string"){let n=t.toLowerCase();if(["true","t","yes","y","1","1.0"].includes(n))return h(!0);if(["false","f","no","n","0","0.0"].includes(n))return h(!1)}return[]},convertsToBoolean:(r,e)=>e.length===0?[]:h(I.toBoolean(r,e).length===1),toInteger:(r,e)=>{if(e.length===0)return[];let[{value:t}]=J(e,1);return typeof t=="number"?[{type:l.integer,value:t}]:typeof t=="string"&&/^[+-]?\d+$/.exec(t)?[{type:l.integer,value:parseInt(t,10)}]:typeof t=="boolean"?[{type:l.integer,value:t?1:0}]:[]},convertsToInteger:(r,e)=>e.length===0?[]:h(I.toInteger(r,e).length===1),toDate:(r,e)=>{if(e.length===0)return[];let[{value:t}]=J(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:l.date,value:Le(t)}]:[]},convertsToDate:(r,e)=>e.length===0?[]:h(I.toDate(r,e).length===1),toDateTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=J(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:l.dateTime,value:Le(t)}]:[]},convertsToDateTime:(r,e)=>e.length===0?[]:h(I.toDateTime(r,e).length===1),toDecimal:(r,e)=>{if(e.length===0)return[];let[{value:t}]=J(e,1);return typeof t=="number"?[{type:l.decimal,value:t}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(t)?[{type:l.decimal,value:parseFloat(t)}]:typeof t=="boolean"?[{type:l.decimal,value:t?1:0}]:[]},convertsToDecimal:(r,e)=>e.length===0?[]:h(I.toDecimal(r,e).length===1),toQuantity:(r,e)=>{if(e.length===0)return[];let[{value:t}]=J(e,1);return w(t)?[{type:l.Quantity,value:t}]:typeof t=="number"?[{type:l.Quantity,value:{value:t,unit:"1"}}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(t)?[{type:l.Quantity,value:{value:parseFloat(t),unit:"1"}}]:typeof t=="boolean"?[{type:l.Quantity,value:{value:t?1:0,unit:"1"}}]:[]},convertsToQuantity:(r,e)=>e.length===0?[]:h(I.toQuantity(r,e).length===1),toString:(r,e)=>{if(e.length===0)return[];let[{value:t}]=J(e,1);return t==null?[]:w(t)?[{type:l.string,value:`${t.value} '${t.unit}'`}]:[{type:l.string,value:t.toString()}]},convertsToString:(r,e)=>e.length===0?[]:h(I.toString(r,e).length===1),toTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=J(e,1);if(typeof t=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(t);if(n)return[{type:l.time,value:Le("T"+n[1])}]}return[]},convertsToTime:(r,e)=>e.length===0?[]:h(I.toTime(r,e).length===1),indexOf:(r,e,t)=>N((n,i)=>n.indexOf(i),r,e,t),substring:(r,e,t,n)=>N((i,o,s)=>{let a=o,c=s?a+s:i.length;return a<0||a>=i.length?void 0:i.substring(a,c)},r,e,t,n),startsWith:(r,e,t)=>N((n,i)=>n.startsWith(i),r,e,t),endsWith:(r,e,t)=>N((n,i)=>n.endsWith(i),r,e,t),contains:(r,e,t)=>N((n,i)=>n.includes(i),r,e,t),upper:(r,e)=>N(t=>t.toUpperCase(),r,e),lower:(r,e)=>N(t=>t.toLowerCase(),r,e),replace:(r,e,t,n)=>N((i,o,s)=>i.replaceAll(o,s),r,e,t,n),matches:(r,e,t)=>N((n,i)=>!!new RegExp(i).exec(n),r,e,t),replaceMatches:(r,e,t,n)=>N((i,o,s)=>i.replaceAll(new RegExp(o,"g"),s.replaceAll(/\$\{(\w+)\}/g,"$<$1>")),r,e,t,n),length:(r,e)=>N(t=>t.length,r,e),toChars:(r,e)=>N(t=>t?t.split(""):void 0,r,e),encode:Z,decode:Z,escape:Z,unescape:Z,trim:Z,split:Z,join:(r,e,t)=>{let n=t?.eval(r,Se(r))[0]?.value??"";if(typeof n!="string")throw new Error("Separator must be a string.");return[{type:l.string,value:e.map(i=>i.value?.toString()??"").join(n)}]},abs:(r,e)=>z(Math.abs,r,e),ceiling:(r,e)=>z(Math.ceil,r,e),exp:(r,e)=>z(Math.exp,r,e),floor:(r,e)=>z(Math.floor,r,e),ln:(r,e)=>z(Math.log,r,e),log:(r,e,t)=>z((n,i)=>Math.log(n)/Math.log(i),r,e,t),power:(r,e,t)=>z(Math.pow,r,e,t),round:(r,e,...t)=>z((n,i=0)=>{if(typeof i!="number"||i<0)throw new Error("Invalid precision provided to round()");let o=Math.pow(10,i);return Math.round(n*o)/o},r,e,...t),sqrt:(r,e)=>z(Math.sqrt,r,e),truncate:(r,e)=>z(t=>t|0,r,e),children:Z,descendants:Z,trace:(r,e,t)=>e,now:()=>[{type:l.dateTime,value:new Date().toISOString()}],timeOfDay:()=>[{type:l.time,value:new Date().toISOString().substring(11)}],today:()=>[{type:l.date,value:new Date().toISOString().substring(0,10)}],between:(r,e,t,n,i)=>{let o=I.toDateTime(r,t.eval(r,e));if(o.length===0)throw new Error("Invalid start date");let s=I.toDateTime(r,n.eval(r,e));if(s.length===0)throw new Error("Invalid end date");let a=i.eval(r,e)[0]?.value;if(a!=="years"&&a!=="months"&&a!=="days")throw new Error("Invalid units");let c=vt(o[0].value,s[0].value);return[{type:l.Quantity,value:{value:c[a],unit:a}}]},is:(r,e,t)=>{let n="";return t instanceof $?n=t.name:t instanceof le&&(n=t.left.name+"."+t.right.name),n?e.map(i=>({type:l.boolean,value:yt(i,n)})):[]},not:(r,e)=>I.toBoolean(r,e).map(t=>({type:l.boolean,value:!t.value})),resolve:(r,e)=>e.map(t=>{let n=t.value,i;if(typeof n=="string")i=n;else if(typeof n=="object"){let o=n;if(o.resource)return v(o.resource);o.reference?i=o.reference:o.type&&o.identifier&&(i=`${o.type}?identifier=${o.identifier.system}|${o.identifier.value}`)}if(i?.includes("?")){let[o]=i.split("?");return{type:o,value:{resourceType:o}}}if(i?.includes("/")){let[o,s]=i.split("/");return{type:o,value:{resourceType:o,id:s}}}return{type:l.BackboneElement,value:void 0}}).filter(t=>!!t.value),as:(r,e)=>e,type:(r,e)=>e.map(({value:t})=>typeof t=="boolean"?{type:l.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof t=="number"?{type:l.BackboneElement,value:{namespace:"System",name:"Integer"}}:O(t)?{type:l.BackboneElement,value:{namespace:"FHIR",name:t.resourceType}}:{type:l.BackboneElement,value:null}),conformsTo:(r,e,t)=>{let n=t.eval(r,e)[0].value;if(!n.startsWith("http://hl7.org/fhir/StructureDefinition/"))throw new Error("Expected a StructureDefinition URL");let i=n.replace("http://hl7.org/fhir/StructureDefinition/","");return e.map(o=>({type:l.boolean,value:o.value?.resourceType===i}))},getResourceKey:(r,e)=>{let t=e[0].value;return t?.id?[{type:l.id,value:t.id}]:[]},getReferenceKey:(r,e,t)=>{let n=e[0].value;if(!n?.reference)return[];let i="";return t instanceof $&&(i=t.name),i&&!n.reference.startsWith(i+"/")?[]:[{type:l.id,value:xe(n)}]},extension:(r,e,t)=>{let n=t.eval(r,e)[0].value,i=e?.[0]?.value;if(i){let o=oe(i,n);if(o)return[{type:l.Extension,value:o}]}return[]}};function N(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=J(t,1);if(typeof i!="string")throw new Error("String function cannot be called with non-string");let o=n.map(a=>a?.eval(e,t)[0]?.value),s=r(i,...o);return s===void 0?[]:Array.isArray(s)?s.map(v):[v(s)]}function z(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=J(t,1),o=w(i),s=o?i.value:i;if(typeof s!="number")throw new Error("Math function cannot be called with non-number");let a=r(s,...n.map(p=>p.eval(e,t)[0]?.value)),c=o?l.Quantity:t[0].type,u=o?{...i,value:a}:a;return[{type:c,value:u}]}function J(r,e){if(r.length!==e)throw new Error(`Expected ${e} arguments`);for(let t of r)if(t==null)throw new Error("Expected non-null argument");return r}function Se(r){let e=r;for(;e.parent?.variables.$this;)e=e.parent;return[e.variables.$this]}var Fe=class{constructor(e,t){this.original=e,this.child=t}eval(e,t){try{if(t.length>0){let n=[];for(let i of t)n.push(this.child.eval({parent:e,variables:{$this:i}},[i]));return n.flat()}else return this.child.eval(e,[])}catch(n){throw new Error(`FhirPathError on "${this.original}": ${n}`,{cause:n})}}toString(){return this.child.toString()}},U=class{constructor(e){this.value=e}eval(){return[this.value]}toString(){let e=this.value.value;return typeof e=="string"?`'${e}'`:e.toString()}},$=class{constructor(e){this.name=e}eval(e,t){if(this.name==="$this")return t;let n=this.getVariable(e);if(n)return[n];if(this.name.startsWith("%"))throw new Error(`Undefined variable ${this.name}`);return t.flatMap(i=>this.evalValue(i)).filter(i=>i?.value!==void 0)}getVariable(e){let t=e.variables[this.name];if(t!==void 0)return t;if(e.parent)return this.getVariable(e.parent)}evalValue(e){let t=e.value;if(!(!t||typeof t!="object"))return O(t,this.name)?e:P(e,this.name)}toString(){return this.name}},Et=class{eval(){return[]}toString(){return"{}"}},Rt=class extends ot{constructor(e,t,n){super(e,t),this.impl=n}eval(e,t){return this.impl(this.child.eval(e,t))}toString(){return this.operator+this.child.toString()}},pe=class extends ne{constructor(e,t){super("as",e,t)}eval(e,t){return I.ofType(e,this.left.eval(e,t),this.right)}},C=class extends ne{},V=class extends C{constructor(e,t,n,i){super(e,t,n),this.impl=i}eval(e,t){let n=this.left.eval(e,t);if(n.length!==1)return[];let i=this.right.eval(e,t);if(i.length!==1)return[];let o=n[0].value,s=i[0].value,a=w(o)?o.value:o,c=w(s)?s.value:s,u=this.impl(a,c);return typeof u=="boolean"?h(u):w(o)?[{type:l.Quantity,value:{...o,value:u}}]:[v(u)]}},Ct=class extends ne{constructor(e,t){super("&",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t),o=[...n,...i];return o.length>0&&o.every(s=>typeof s.value=="string")?[{type:l.string,value:o.map(s=>s.value).join("")}]:o}},Pt=class extends C{constructor(e,t){super("contains",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return h(n.some(o=>o.value===i[0].value))}},wt=class extends C{constructor(e,t){super("in",e,t)}eval(e,t){let n=H(this.left.eval(e,t)),i=this.right.eval(e,t);return n?h(i.some(o=>Ge(n,o)[0].value)):[]}},le=class extends ne{constructor(e,t){super(".",e,t)}eval(e,t){return this.right.eval(e,this.left.eval(e,t))}toString(){return`${this.left.toString()}.${this.right.toString()}`}},be=class extends ne{constructor(e,t){super("|",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return mt([...n,...i])}},At=class extends C{constructor(e,t){super("=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Gn(n,i)}},Ot=class extends C{constructor(e,t){super("!=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Hn(n,i)}},It=class extends C{constructor(e,t){super("~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Vr(n,i)}},kt=class extends C{constructor(e,t){super("!~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return $n(Vr(n,i))}},Ee=class extends C{constructor(e,t){super("is",e,t)}eval(e,t){let n=this.left.eval(e,t);if(n.length!==1)return[];let i=this.right.name;return h(yt(n[0],i))}},Vt=class extends C{constructor(e,t){super("and",e,t)}eval(e,t){let n=H(this.left.eval(e,t),"boolean"),i=H(this.right.eval(e,t),"boolean");return n?.value===!0&&i?.value===!0?h(!0):n?.value===!1||i?.value===!1?h(!1):[]}},Dt=class extends C{constructor(e,t){super("or",e,t)}eval(e,t){let n=H(this.left.eval(e,t),"boolean"),i=H(this.right.eval(e,t),"boolean");return n?.value===!1&&i?.value===!1?h(!1):n?.value||i?.value?h(!0):[]}},Mt=class extends C{constructor(e,t){super("xor",e,t)}eval(e,t){let n=H(this.left.eval(e,t),"boolean"),i=H(this.right.eval(e,t),"boolean");return!n||!i?[]:h(n.value!==i.value)}},_t=class extends C{constructor(e,t){super("implies",e,t)}eval(e,t){let n=H(this.left.eval(e,t),"boolean"),i=H(this.right.eval(e,t),"boolean");return i?.value===!0||n?.value===!1?h(!0):!n||!i?[]:h(!1)}},ee=class{constructor(e,t){this.name=e,this.args=t}eval(e,t){let n=I[this.name];if(!n)throw new Error("Unrecognized function: "+this.name);return n(e,t,...this.args)}toString(){return`${this.name}(${this.args.map(e=>e.toString()).join(", ")})`}},Re=class{constructor(e,t){this.left=e,this.expr=t}eval(e,t){let n=this.expr.eval(e,t);if(n.length!==1)return[];let i=n[0].value;if(typeof i!="number")throw new Error("Invalid indexer expression: should return integer}");let o=this.left.eval(e,t);return i in o?[o[i]]:[]}toString(){return`${this.left.toString()}[${this.expr.toString()}]`}};var xs=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],vs={"'":"'",'"':'"',"`":"`",r:"\r",n:`
2
2
  `,t:" ",f:"\f","\\":"\\"},de=class{constructor(e,t,n,i){this.result=[];this.pos={index:0,line:1,column:0};this.markStack=[];this.str=e,this.keywords=t,this.operators=n,this.dateTimeLiterals=!!i?.dateTimeLiterals,this.symbolRegex=i?.symbolRegex??/[$\w%]/}tokenize(){for(;this.pos.index<this.str.length;){let e=this.consumeToken();e&&this.result.push(e)}return this.result}prevToken(){return this.result.slice(-1)[0]}peekToken(){this.mark();let e=this.consumeToken();return this.reset(),e}consumeToken(){this.consumeWhitespace();let e=this.curr();if(!e)return;this.mark();let t=this.peek();return e==="/"&&t==="*"?this.consumeMultiLineComment():e==="/"&&t==="/"?this.consumeSingleLineComment():e==="'"||e==='"'||e==="`"?this.consumeString(e):e==="@"?this.consumeDateTime():/\d/.exec(e)?this.consumeNumber():/\w/.exec(e)?this.consumeSymbol():(e==="$"||e==="%")&&/\w/.exec(t)?this.consumeSymbol():(e==="$"||e==="%")&&(t==="'"||t==='"'||t==="`")?this.consumeQuotedSymbol(t):this.consumeOperator()}consumeWhitespace(){this.consumeWhile(()=>/\s/.exec(this.curr()))}consumeMultiLineComment(){let e=this.pos.index;return this.consumeWhile(()=>this.curr()!=="*"||this.peek()!=="/"),this.advance(),this.advance(),this.buildToken("Comment",this.str.substring(e,this.pos.index))}consumeSingleLineComment(){return this.buildToken("Comment",this.consumeWhile(()=>this.curr()!==`
3
3
  `))}consumeString(e){this.advance();let t="",n;for(;n=this.consumeChar(e);)t+=n;let i=this.buildToken(e==="`"?"Symbol":"String",t);return this.advance(),i}consumeChar(e){let t=this.curr();if(t==="\\"){this.advance();let n=this.curr(),i=vs[n];if(i!==void 0)return this.advance(),i;if(n==="u"){this.advance();let o=/^[0-9a-fA-F]{4}$/.exec(this.str.substring(this.pos.index,this.pos.index+4))?.[0];return o?(this.advance(),this.advance(),this.advance(),this.advance(),String.fromCodePoint(parseInt(o,16))):"u"}return this.consumeChar(e)}return t===e||!t?"":(this.advance(),t)}consumeQuotedSymbol(e){this.mark();let t=this.pos.index;this.advance(),this.consumeString(e);let n=this.str.substring(t,this.pos.index);return this.buildToken("Symbol",n)}consumeDateTime(){this.advance();let e=this.pos.index;this.consumeWhile(()=>/[\d-]/.exec(this.curr()));let t=!1,n=!1;if(this.curr()==="T"&&(t=!0,this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())),this.curr()==="."&&/\d/.exec(this.peek())&&(this.advance(),this.consumeWhile(()=>/\d/.exec(this.curr()))),this.curr()==="Z"?(n=!0,this.advance()):(this.curr()==="+"||this.curr()==="-")&&(n=!0,this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())))),this.pos.index===e)throw new Error("Invalid DateTime literal");let i=this.str.substring(e,this.pos.index);return i.endsWith("T")?i=i.substring(0,i.length-1):!i.startsWith("T")&&t&&!n&&(i+="Z"),this.buildToken("DateTime",i)}consumeNumber(){let e=this.pos.index,t="Number";return this.consumeWhile(()=>/\d/.exec(this.curr())),this.curr()==="."&&/\d/.exec(this.peek())&&(this.advance(),this.consumeWhile(()=>/\d/.exec(this.curr()))),this.curr()==="-"&&this.dateTimeLiterals?(this.pos.index=e-1,this.consumeDateTime()):(this.curr()===" "&&Ts(this.peekToken())&&(t="Quantity",this.consumeToken()),this.buildToken(t,this.str.substring(e,this.pos.index)))}consumeSymbol(){let e=this.consumeWhile(()=>this.symbolRegex.exec(this.curr()));return this.prevToken()?.value!=="."&&this.keywords.includes(e)?this.buildToken(e,e):this.buildToken("Symbol",e)}consumeOperator(){let e=this.curr(),t=this.peek(),n=e+t;return this.operators.includes(n)?(this.advance(),this.advance(),this.buildToken(n,n)):(this.advance(),this.buildToken(e,e))}consumeWhile(e){let t=this.pos.index;for(;this.pos.index<this.str.length&&e();)this.advance();return this.str.substring(t,this.pos.index)}curr(){return this.str[this.pos.index]}peek(){return this.str[this.pos.index+1]??""}mark(){this.markStack.push({...this.pos})}reset(){let e=this.markStack.pop();if(!e)throw new Error("No mark to reset to");this.pos.index=e.index,this.pos.line=e.line,this.pos.column=e.column}advance(){this.pos.index++,this.curr()===`
4
- `?(this.pos.line++,this.pos.column=0):this.pos.column++}buildToken(e,t){let n=this.markStack.pop();if(!n)throw new Error("No mark for token");return{id:e,value:t,...n}}};function Ts(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&xs.includes(r.value)))}var Je=["true","false"],Ke=["!=","!~","<=",">=","{}","->"];function mi(r){return new de(r,Je,Ke).tokenize()}var g={FunctionCall:0,Dot:1,Indexer:2,UnaryAdd:3,UnarySubtract:3,Multiply:4,Divide:4,IntegerDivide:4,Modulo:4,Add:5,Subtract:5,Ampersand:5,Is:6,As:6,Union:7,GreaterThan:8,GreaterThanOrEquals:8,LessThan:8,LessThanOrEquals:8,Equals:9,Equivalent:9,NotEquals:9,NotEquivalent:9,In:10,Contains:10,And:11,Xor:12,Or:12,Implies:13,Arrow:100,Semicolon:200},Ss={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},bs={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new Re(e,t)},precedence:g.Indexer},Es={parse(r,e){if(!(e instanceof $))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new ee(e.name,t)},precedence:g.FunctionCall};function Rs(r){let e=r.split(" "),t=parseFloat(e[0]),n=e[1];return n?.startsWith("'")&&n.endsWith("'")?n=n.substring(1,n.length-1):n="{"+n+"}",{value:t,unit:n}}function Xe(){return new st().registerPrefix("String",{parse:(r,e)=>new U({type:l.string,value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new U({type:l.dateTime,value:Le(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new U({type:l.Quantity,value:Rs(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new U({type:e.value.includes(".")?l.decimal:l.integer,value:parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new U({type:l.boolean,value:!0})}).registerPrefix("false",{parse:()=>new U({type:l.boolean,value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new $(e.value)}).registerPrefix("{}",{parse:()=>new Et}).registerPrefix("(",Ss).registerInfix("[",bs).registerInfix("(",Es).prefix("+",g.UnaryAdd,(r,e)=>new Rt("+",e,t=>t)).prefix("-",g.UnarySubtract,(r,e)=>new V("-",e,e,(t,n)=>-n)).infixLeft(".",g.Dot,(r,e,t)=>new le(r,t)).infixLeft("/",g.Divide,(r,e,t)=>new V("/",r,t,(n,i)=>n/i)).infixLeft("*",g.Multiply,(r,e,t)=>new V("*",r,t,(n,i)=>n*i)).infixLeft("+",g.Add,(r,e,t)=>new V("+",r,t,(n,i)=>n+i)).infixLeft("-",g.Subtract,(r,e,t)=>new V("-",r,t,(n,i)=>n-i)).infixLeft("|",g.Union,(r,e,t)=>new be(r,t)).infixLeft("=",g.Equals,(r,e,t)=>new At(r,t)).infixLeft("!=",g.NotEquals,(r,e,t)=>new Ot(r,t)).infixLeft("~",g.Equivalent,(r,e,t)=>new It(r,t)).infixLeft("!~",g.NotEquivalent,(r,e,t)=>new kt(r,t)).infixLeft("<",g.LessThan,(r,e,t)=>new V("<",r,t,(n,i)=>n<i)).infixLeft("<=",g.LessThanOrEquals,(r,e,t)=>new V("<=",r,t,(n,i)=>n<=i)).infixLeft(">",g.GreaterThan,(r,e,t)=>new V(">",r,t,(n,i)=>n>i)).infixLeft(">=",g.GreaterThanOrEquals,(r,e,t)=>new V(">=",r,t,(n,i)=>n>=i)).infixLeft("&",g.Ampersand,(r,e,t)=>new Ct(r,t)).infixLeft("and",g.And,(r,e,t)=>new Vt(r,t)).infixLeft("as",g.As,(r,e,t)=>new pe(r,t)).infixLeft("contains",g.Contains,(r,e,t)=>new Pt(r,t)).infixLeft("div",g.Divide,(r,e,t)=>new V("div",r,t,(n,i)=>n/i|0)).infixLeft("in",g.In,(r,e,t)=>new wt(r,t)).infixLeft("is",g.Is,(r,e,t)=>new Ee(r,t)).infixLeft("mod",g.Modulo,(r,e,t)=>new V("mod",r,t,(n,i)=>n%i)).infixLeft("or",g.Or,(r,e,t)=>new Dt(r,t)).infixLeft("xor",g.Xor,(r,e,t)=>new Mt(r,t)).infixLeft("implies",g.Implies,(r,e,t)=>new _t(r,t))}var Cs=Xe();function Lt(r){return new Fe(r,Cs.construct(mi(r)).consumeAndParse())}function hp(r,e){let t=Array.isArray(e)?e:[e];for(let n=0;n<t.length;n++){let i=t[n];typeof i=="object"&&"type"in i&&"value"in i||(t[n]=v(t[n]))}return E(r,t).map(n=>n.value)}function E(r,e,t={},n=void 0){let i;if(typeof r=="string"){let o=n?.get(r);i=o??Lt(r),n&&!o&&n.set(r,i)}else i=r;return i.eval({variables:t},e).map(o=>({type:o.type,value:o.value?.valueOf()}))}function Tp(r){let e=[];for(let t of r)t.type===l.Range?e.push([t.value?.low?.value,t.value?.high?.value]):typeof t.value=="number"&&e.push([t.value,t.value]);return e}function yi(r){let e=[];for(let t of r){let n=gt(t.value);n&&e.push(n)}return e}function gi(r){let e=new Set;for(let t of r){let n=ui(t);n&&e.add(n)}return Array.from(e)}function xi(r){let e=new Set;for(let t of r){let{value:n}=t;n&&(St(n)?e.add(n):q(n)?e.add(n.reference):Qe(n)?e.add(D(n)):typeof n.identifier=="object"&&e.add(`identifier:${n.identifier.system}|${n.identifier.value}`))}return Array.from(e)}function Sp(r){let e=[];for(let t of r){let{value:n}=t;typeof n=="number"?e.push({value:n}):w(n)&&e.push(n)}return e}function bp(r){let e=new Set;for(let t of r)St(t.value)&&e.add(t.value);return Array.from(e)}function vi(r,e={}){let t=[];for(let n of r)Ps(e,t,n);return t}function Ps(r,e,t){let{type:n,value:i}=t;switch(n){case l.Identifier:ws(e,r,i);break;case l.CodeableConcept:As(e,r,i);break;case l.Coding:Ti(e,r,i);break;case l.ContactPoint:Os(e,r,i);break;default:Ce(e,r,void 0,i?.toString())}}function ws(r,e,t){t?.type?.text&&Ce(r,e,e.textSearchSystem,t.type.text),Ce(r,e,t?.system,t?.value)}function As(r,e,t){if(t?.text&&Ce(r,e,e.textSearchSystem,t.text),t?.coding)for(let n of t.coding)Ti(r,e,n)}function Ti(r,e,t){t&&(t.display&&Ce(r,e,e.textSearchSystem,t.display),Ce(r,e,t.system,t.code))}function Os(r,e,t){t&&Ce(r,e,t.system,t.value?.toLocaleLowerCase())}function Ce(r,e,t,n){(t||n)&&!r.some(i=>i.system===t&&i.value===n)&&r.push({system:t,value:n&&e.caseInsensitive?n.toLocaleLowerCase():n})}var Op=20,Ip=1e3,f={EQUALS:"eq",NOT_EQUALS:"ne",GREATER_THAN:"gt",LESS_THAN:"lt",GREATER_THAN_OR_EQUALS:"ge",LESS_THAN_OR_EQUALS:"le",STARTS_AFTER:"sa",ENDS_BEFORE:"eb",APPROXIMATELY:"ap",CONTAINS:"contains",STARTS_WITH:"sw",EXACT:"exact",TEXT:"text",NOT:"not",ABOVE:"above",BELOW:"below",IN:"in",NOT_IN:"not-in",OF_TYPE:"of-type",MISSING:"missing",PRESENT:"present",IDENTIFIER:"identifier",ITERATE:"iterate"},Ri={contains:f.CONTAINS,exact:f.EXACT,above:f.ABOVE,below:f.BELOW,text:f.TEXT,not:f.NOT,in:f.IN,"not-in":f.NOT_IN,"of-type":f.OF_TYPE,missing:f.MISSING,identifier:f.IDENTIFIER,iterate:f.ITERATE},Gr={eq:f.EQUALS,ne:f.NOT_EQUALS,lt:f.LESS_THAN,le:f.LESS_THAN_OR_EQUALS,gt:f.GREATER_THAN,ge:f.GREATER_THAN_OR_EQUALS,sa:f.STARTS_AFTER,eb:f.ENDS_BEFORE,ap:f.APPROXIMATELY,sw:f.STARTS_WITH};function Ye(r,e){if(!r)throw new Error("Invalid search URL");let t="",n;if(typeof r=="string")if(r.includes("?")){let[s,a]=r.split("?");t=s,n=new URLSearchParams(a)}else t=r;else typeof r=="object"&&(t=r.pathname,n=r.searchParams);let i;t.includes("/")?i=t.split("/").filter(Boolean).pop():i=t;let o=[];if(n&&o.push(...n.entries()),e)for(let[s,a]of Object.entries(e))if(Array.isArray(a))for(let c of a)o.push([s,c]);else o.push([s,a??""]);return Is(i,o)}function Is(r,e){let t={resourceType:r};for(let[n,i]of e)ks(t,n,i);return t}function ks(r,e,t){let n,i,o=e.indexOf(":");if(o>=0?(n=e.substring(0,o),i=e.substring(o+1)):(n=e,i=""),n!=="_"){if(n==="_has"||e.includes(".")){r.filters=ce(r.filters,{code:e,operator:f.EQUALS,value:t});return}switch(n){case"_sort":Vs(r,t);break;case"_cursor":r.cursor=t;break;case"_count":r.count=parseInt(t,10);break;case"_offset":r.offset=parseInt(t,10);break;case"_total":r.total=t;break;case"_summary":t==="count"?(r.total="accurate",r.count=0):(t==="true"||t==="data"||t==="text")&&(r.summary=t);break;case"_include":{let s=Si(t);i==="iterate"&&(s.modifier=f.ITERATE),r.include=ce(r.include,s);break}case"_revinclude":{let s=Si(t);i==="iterate"&&(s.modifier=f.ITERATE),r.revInclude=ce(r.revInclude,s);break}case"_fields":case"_elements":r.fields=t.split(",");break;case"_type":r.types=t.split(",");break;case"_format":r.format=t;break;case"_pretty":r.pretty=t==="true";break;default:{let s=F.types[r.resourceType]?.searchParams?.[n];s?r.filters=ce(r.filters,Ms(s,i,t)):r.filters=ce(r.filters,_s(n,i,t))}}}}function Vs(r,e){for(let t of e.split(",")){let n,i=!1;t.startsWith("-")?(n=t.substring(1),i=!0):n=t,r.sortRules||(r.sortRules=[]),r.sortRules.push({code:n,descending:i})}}var Ds=[f.MISSING,f.PRESENT];function Ms(r,e,t){if(Ds.includes(e))return{code:r.code,operator:e,value:t};switch(r.type){case"number":case"date":case"quantity":{let{operator:n,value:i}=Ls(t);if(!bi(r,i))throw new d(b(`Invalid format for ${r.type} search parameter: ${i}`));return{code:r.code,operator:n,value:i}}case"reference":case"string":case"token":case"uri":if(!bi(r,t))throw new d(b(`Invalid format for ${r.type} search parameter: ${t}`));return{code:r.code,operator:Fs(e),value:t};default:throw new Error("Unrecognized search parameter type: "+r.type)}}function _s(r,e,t){let n=f.EQUALS;if(e)n=e;else if(t.length>=2){let i=t.substring(0,2);i in Gr&&(t.length===2||t.at(2)?.match(/\d/))&&(n=i,t=t.substring(i.length))}return{code:r,operator:n,value:t}}function Ls(r){let e=r.substring(0,2),t=Gr[e];return t?{operator:t,value:r.substring(2)}:{operator:f.EQUALS,value:r}}function Fs(r){return Ri[r]??f.EQUALS}function Si(r){let e=r.split(":");if(e.includes("*"))throw new d(b("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new d(b(`Invalid include value '${r}': must be of the form ResourceType:search-parameter`));if(e.length===2)return{resourceType:e[0],searchParam:e[1]};if(e.length===3)return{resourceType:e[0],searchParam:e[1],targetType:e[2]};throw new d(b(`Invalid include value '${r}'`))}function bi(r,e){switch(r.type){case"date":return _e(e);default:return!0}}var Ns=/{{([^{}]+)}}/g;function kp(r,e){return r=r.replaceAll(Ns,(t,n)=>{let i=E(n,[],e);return i.length!==1?"":hi(i[0])}),Ye(r)}function Vp(r){let e=[];return r.fields&&e.push("_fields="+r.fields.join(",")),r.filters&&r.filters.forEach(t=>e.push(Us(t))),r.sortRules&&r.sortRules.length>0&&e.push(Bs(r.sortRules)),r.cursor!==void 0&&e.push("_cursor="+encodeURIComponent(r.cursor)),r.offset!==void 0&&r.offset!==0&&e.push("_offset="+r.offset),r.count!==void 0&&e.push("_count="+r.count),r.total!==void 0&&e.push("_total="+r.total),r.types&&r.types.length>0&&e.push("_type="+r.types.join(",")),r.include&&r.include.forEach(t=>e.push(Ei("_include",t))),r.revInclude&&r.revInclude.forEach(t=>e.push(Ei("_revinclude",t))),e.length===0?"":(bt(e),"?"+e.join("&"))}function Us(r){let e=r.operator in Ri?":"+r.operator:"",t=r.operator!==f.EQUALS&&r.operator in Gr?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function Bs(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function Ei(r,e){return r+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function Ze(r){let e=[],t="",n=!1;for(let i of r)n?(t+=i,n=!1):i==="\\"?n=!0:i===","?(e.push(t),t=""):t+=i;return e.push(t),e}function Ft(r,e){if(e.resourceType!==r.resourceType)return!1;if(e.filters){for(let t of e.filters)if(!Ws(r,e,t))return!1}return!0}function Ws(r,e,t){let n=F.types[e.resourceType]?.searchParams?.[t.code];if(!n)return!1;let i=E(n.expression,[v(r)]);if(t.operator===f.MISSING||t.operator===f.PRESENT)return qs(i,t);switch(n.type){case"reference":return js(i,t);case"string":case"uri":return Hs(i,t);case"token":return $s(i,t);case"date":return zs(i,t);default:return!1}}function qs(r,e){let t=r.length>0;return(e.operator===f.MISSING&&e.value==="false"||e.operator===f.PRESENT&&e.value==="true")===t}function js(r,e){let t=Nt(e.operator);if(e.value===""&&r.length===0)return e.operator===f.EQUALS;let n=xi(r);for(let i of Ze(e.value)){let o=n.includes(i);if(!o&&e.code==="_compartment"&&(o=n.some(s=>s?.endsWith("/"+i))),o)return!t}return t}function $s(r,e){let t=vi(r),n=Ze(e.value),i=Nt(e.operator);for(let o of t)for(let s of n)if(Gs(o,s))return!i;return i}function Gs(r,e){if(e.includes("|")){let[t,n]=e.split("|").map(i=>i.toLowerCase());return!t&&!n?!1:t?r.system?.toLowerCase()===t&&(!n||r.value?.toLowerCase()===n):!r.system&&r.value?.toLowerCase()===n}return r.value?.toLowerCase()===e.toLowerCase()}function Hs(r,e){let t=gi(r),n=Ze(e.value),i=Nt(e.operator);for(let o of t)for(let s of n)if(Qs(o,s))return!i;return i}function Qs(r,e){return r.toLowerCase().includes(e.toLowerCase())}function zs(r,e){let t=yi(r),n=Ze(e.value),i=Nt(e.operator);for(let o of t)for(let s of n)if(Js(o,e.operator,s))return!i;return i}function Js(r,e,t){if(!r)return!1;let n=gt(t);if(!n)return!1;let i=r.start??"0000",o=r.end??"9999",s=n.start,a=n.end;switch(e){case f.APPROXIMATELY:case f.EQUALS:case f.NOT_EQUALS:return i<a&&o>s;case f.LESS_THAN:return i<s;case f.GREATER_THAN:return o>a;case f.LESS_THAN_OR_EQUALS:return i<=a;case f.GREATER_THAN_OR_EQUALS:return o>=s;case f.STARTS_AFTER:return i>a;case f.ENDS_BEFORE:return o<s;default:return!1}}function Nt(r){return r===f.NOT_EQUALS||r===f.NOT}var Ks={resourceType:"*"},Xs=["DomainConfiguration","JsonWebKey","Login"],Ys=["PasswordChangeRequest","UserSecurityRequest","Project","ProjectMembership","User"],Pe={READ:"read",VREAD:"vread",UPDATE:"update",DELETE:"delete",HISTORY:"history",CREATE:"create",SEARCH:"search"},Zs=[Pe.READ,Pe.VREAD,Pe.HISTORY,Pe.SEARCH];function qp(r,e){return Ci(r,Pe.SEARCH,e)}function jp(r,e){return Xs.includes(e)?!1:Ci(r,Pe.UPDATE,e)}function Ci(r,e,t){return!!r.resource?.some(n=>Pi(n,t,e))}function $p(r,e){return!!ea(e,Pe.UPDATE,r)}function ea(r,e,t){return t?t.resource?.find(n=>ta(r,e,n)):Ks}function ta(r,e,t){let n=r.resourceType;return Pi(t,n,e)?n==="Binary"?!0:!(t.compartment&&!r.meta?.compartment?.some(i=>i.reference===t.compartment?.reference)||t.criteria&&!Ft(r,Ye(t.criteria))):!1}function Pi(r,e,t){return r.resourceType!==e&&(r.resourceType!=="*"||Ys.includes(e))?!1:r.interaction?r.interaction.includes(t):!r.readonly||Zs.includes(t)}function B(){return typeof window<"u"}function Hp(){return typeof Buffer<"u"}function Qp(){return typeof window<"u"?window:void 0}function Hr(){return typeof Buffer<"u"?Buffer:void 0}var te={assign(r){B()&&globalThis.location.assign(r)},reload(){B()&&globalThis.location.reload()},getSearch(){return B()?globalThis.location.search:""},getPathname(){return B()?globalThis.location.pathname:""},getLocation(){return B()?globalThis.location.toString():""},getOrigin(){return B()?globalThis.location.protocol+"//"+globalThis.location.host+"/":""}};function ra(r){if(B()){let t=window.atob(r),n=Uint8Array.from(t,i=>i.charCodeAt(0));return new window.TextDecoder().decode(n)}let e=Hr();if(e)return e.from(r,"base64").toString("utf-8");throw new Error("Unable to decode base64")}function Ut(r){if(B()){let t=new window.TextEncoder().encode(r),n=String.fromCharCode.apply(null,t);return window.btoa(n)}let e=Hr();if(e)return e.from(r,"utf8").toString("base64");throw new Error("Unable to encode base64")}function Kp(r){return Ut(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/[=]{1,2}$/,"")}function wi(r){r=r.padEnd(r.length+(4-r.length%4)%4,"=");let e=r.replace(/-/g,"+").replace(/_/g,"/");return ra(e)}function Qr(){let r=new Uint32Array(28);return crypto.getRandomValues(r),ti(r.buffer)}async function Ai(r){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(r))}function we(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,r=>{let e=Math.random()*16|0;return(r==="x"?e:e&3|8).toString(16)})}function na(r){let e={};r=ve(r);for(let i of r.entry||[]){let o=i.resource;if(!o)continue;o.meta!==void 0&&(delete o.meta.author,delete o.meta.compartment,delete o.meta.lastUpdated,delete o.meta.project,delete o.meta.versionId,Object.keys(o.meta).length===0&&delete o.meta);let s=o?.id;s&&(e[s]=we(),i.fullUrl="urn:uuid:"+e[s],delete i.resource?.id)}let t=r.entry,n=JSON.stringify({resourceType:"Bundle",type:"transaction",entry:t?.map(i=>({fullUrl:i.fullUrl,request:{method:"POST",url:i.resource?.resourceType},resource:i.resource}))},(i,o)=>ia(i,o,e),2);return oa(JSON.parse(n))}function ia(r,e,t){if(r==="reference"&&typeof e=="string"){let n;if(e.includes("/")?n=e.split("/")[1]:e.startsWith("urn:uuid:")?n=e.slice(9):e.startsWith("#")&&(n=e.slice(1)),n){let i=t[n];if(i)return"urn:uuid:"+i}}return e}function oa(r){let e=aa(r),{sorted:t,cycles:n}=sa(e),i={};for(let s of r.entry??[])s.fullUrl&&(i[s.fullUrl]=s);let o=t.map(s=>i[s]);for(let s of n)for(let a of s){let c=i[a],u={...c,request:{...c.request,method:"PUT"}};o.push(u)}return{...r,entry:o}}var Ne={NotVisited:"NotVisited",Visiting:"Visiting",Visited:"Visited"};function sa(r){let e=[],t={},n=[];for(let o of Object.keys(r))t[o]=Ne.NotVisited;function i(o,s){if(t[o]===Ne.Visited)return!0;if(t[o]===Ne.Visiting){let c=s.lastIndexOf(o);return c!==-1&&n.push(s.slice(c)),!0}t[o]=Ne.Visiting,s.push(o);let a=!1;for(let c of r[o])i(c,s)||(a=!0);return t[o]=Ne.Visited,s.pop(),e.unshift(o),!a}for(let o in r)t[o]===Ne.NotVisited&&i(o,[]);return{sorted:e,cycles:n}}function Oi(r,e){for(let t in r)if(r[t]&&typeof r[t]=="object"){let n=r[t];if(q(n)){let i=n.reference;i.startsWith("urn:uuid:")&&e(i)}else Oi(n,e)}}function aa(r){let e={};for(let t of r.entry||[])t.fullUrl&&(e[t.fullUrl]=[]);for(let t of r.entry||[]){let n=t.fullUrl;t.resource&&Oi(t.resource,i=>{e[i]&&e[i].push(n)})}return e}function nd(r){r=ve(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=we());return na(e)}function id(r,e,t){return r.entry?.find(({resource:n})=>n?.resourceType===e&&n?.id===t)?.resource}var A={CSS:"text/css",DICOM:"application/dicom",FAVICON:"image/vnd.microsoft.icon",FHIR_JSON:"application/fhir+json",FORM_URL_ENCODED:"application/x-www-form-urlencoded",HL7_V2:"x-application/hl7-v2+er7",HTML:"text/html",JAVASCRIPT:"text/javascript",JSON:"application/json",JSON_PATCH:"application/json-patch+json",JWT:"application/jwt",MULTIPART_FORM_DATA:"multipart/form-data",PNG:"image/png",SCIM_JSON:"application/scim+json",SVG:"image/svg+xml",TEXT:"text/plain",TYPESCRIPT:"text/typescript",PING:"x-application/ping",XML:"text/xml",CDA_XML:"application/cda+xml",OCTET_STREAM:"application/octet-stream"};var zr=class{constructor(){this.listeners={}}addEventListener(e,t){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)}removeEventListener(e,t){let n=this.listeners[e];if(n){for(let i=0;i<n.length;i++)if(n[i]===t){n.splice(i,1);return}}}dispatchEvent(e){let t=this.listeners[e.type];if(t)for(let n of t)n.call(this,e);return!e.defaultPrevented}removeAllListeners(){this.listeners={}}},K=class{constructor(){this.emitter=new zr}dispatchEvent(e){this.emitter.dispatchEvent(e)}addEventListener(e,t){this.emitter.addEventListener(e,t)}removeEventListener(e,t){this.emitter.removeEventListener(e,t)}removeAllListeners(){this.emitter.removeAllListeners()}};var Jr={"Patient-open":"Patient-open","Patient-close":"Patient-close","ImagingStudy-open":"ImagingStudy-open","ImagingStudy-close":"ImagingStudy-close","Encounter-open":"Encounter-open","Encounter-close":"Encounter-close","DiagnosticReport-open":"DiagnosticReport-open","DiagnosticReport-close":"DiagnosticReport-close","DiagnosticReport-select":"DiagnosticReport-select","DiagnosticReport-update":"DiagnosticReport-update",syncerror:"syncerror"},ca=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],Kr=["DiagnosticReport-update"];function Ii(r){return Kr.includes(r)}function ki(r){if(Kr.includes(r))throw new d(y(`'context.version' is required for '${r}'.`))}var ua={"Patient-open":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"Patient-close":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"ImagingStudy-open":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"ImagingStudy-close":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"Encounter-open":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"Encounter-close":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"DiagnosticReport-open":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-close":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-select":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},select:{resourceType:"*",reference:!0,manyAllowed:!0}},"DiagnosticReport-update":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},updates:{resourceType:"Bundle"}},syncerror:{operationoutcome:{resourceType:"OperationOutcome"}}};function la(r){return ca.includes(r)}function Vi(r){return!!r.endpoint}function Xr(r){if(!Wt(r))throw new d(y("subscriptionRequest must be an object conforming to SubscriptionRequest type."));let{channelType:e,mode:t,topic:n,events:i}=r,o={"hub.channel.type":e,"hub.mode":t,"hub.topic":n,"hub.events":i.join(",")};return Vi(r)&&(o.endpoint=r.endpoint),new URLSearchParams(o).toString()}function Wt(r){if(typeof r!="object")return!1;let{channelType:e,mode:t,topic:n,events:i}=r;if(!(e&&t&&n&&i)||typeof n!="string"||typeof i!="object"||!Array.isArray(i)||i.length<1||e!=="websocket"||t!=="subscribe"&&t!=="unsubscribe")return!1;for(let o of i)if(!Jr[o])return!1;return!(Vi(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function pa(r,e,t,n){if(typeof e!="object")throw new d(y(`context[${t}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.id&&typeof e.id=="string"))throw new d(y(`context[${t}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new d(y(`context[${t}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!la(e.resourceType))throw new d(y(`context[${t}] is invalid. Resource must contain a valid FHIRcast resource type. Resource type is not a known resource type.`));if(i&&e.resourceType!==i)throw new d(y(`context[${t}] is invalid. context[${t}] for the '${r}' event should contain resource of type ${i}.`))}}function da(r,e,t,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),n.reference){if(!q(e.reference))throw new d(y(`context[${t}] is invalid. Expected key '${e.key}' to be a reference.`))}else pa(r,e.resource,t,n)}function fa(r,e){let t=new Map,n=ua[r];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new d(y(`Key '${o}' not found for event '${r}'. Make sure to add only valid keys.`));da(r,e[i],i,n[o],t)}for(let[i,o]of Object.entries(n)){if(!(o.optional||t.has(i)))throw new d(y(`Missing required key '${i}' on context for '${r}' event.`));if(!o.manyAllowed&&(t.get(i)??0)>1)throw new d(y(`${t.get(i)} context entries with key '${i}' found for the '${r}' event when schema only allows for 1.`))}}function Yr(r,e,t,n){if(!(r&&typeof r=="string"))throw new d(y("Must provide a topic."));if(!Jr[e])throw new d(y(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(Jr).join(", ")}`));if(typeof t!="object")throw new d(y("context must be a context object or array of context objects."));if(Kr.includes(e)&&!n)throw new d(y(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(t)?t:[t];return fa(e,i),{timestamp:new Date().toISOString(),id:we(),event:{"hub.topic":r,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var Bt=class extends K{constructor(e){if(super(),this.subRequest=e,!e.endpoint)throw new d(y("Subscription request should contain an endpoint."));if(!Wt(e))throw new d(y("Subscription request failed validation."));let t=new WebSocket(e.endpoint);t.addEventListener("open",()=>{this.dispatchEvent({type:"connect"}),t.addEventListener("message",n=>{let i=JSON.parse(n.data);if(i["hub.topic"])return;let o=i;o.event["hub.event"]!=="heartbeat"&&(this.dispatchEvent({type:"message",payload:o}),t.send(JSON.stringify({id:i?.id,timestamp:new Date().toISOString()})))}),t.addEventListener("close",()=>{this.dispatchEvent({type:"disconnect"})})}),this.websocket=t}disconnect(){this.websocket.close()}};function ha(r){return JSON.parse(wi(r))}function Di(r){return r.split(".").length===3}function qt(r){let[e,t,n]=r.split(".");return ha(t)}function Mi(r){try{return typeof qt(r).login_id=="string"}catch{return!1}}function _i(r){try{let t=qt(r).exp;return typeof t=="number"?t*1e3:void 0}catch{return}}var jt=class{constructor(e){this.medplum=e}async get(e){return this.medplum.get(`keyvalue/v1/${e}`)}async set(e,t){await this.medplum.put(`keyvalue/v1/${e}`,t,A.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var Li;Li=Symbol.toStringTag;var M=class{constructor(e){this[Li]="ReadablePromise";this.status="pending";this.suspender=e.then(t=>(this.status="success",this.response=t,t),t=>{throw this.status="error",this.error=t,t})}isPending(){return this.status==="pending"}isOk(){return this.status==="success"}read(){switch(this.status){case"pending":throw this.suspender;case"error":throw this.error;default:return this.response}}then(e,t){return this.suspender.then(e,t)}catch(e){return this.suspender.catch(e)}finally(e){return this.suspender.finally(e)}};var et=class{constructor(e){this.storage=e??(typeof localStorage<"u"?localStorage:new Zr)}clear(){this.storage.clear()}getString(e){return this.storage.getItem(e)??void 0}setString(e,t){t?this.storage.setItem(e,t):this.storage.removeItem(e)}getObject(e){let t=this.getString(e);return t?JSON.parse(t):void 0}setObject(e,t){this.setString(e,t?Tt(t):void 0)}},Zr=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]}},Fi=class extends et{constructor(){super();this.initResolve=()=>{};this.initialized=!1,this.initPromise=new Promise(t=>{this.initResolve=t})}setInitialized(){this.initialized||(this.initResolve(),this.initialized=!0)}getInitPromise(){return this.initPromise}get isInitialized(){return this.initialized}};var Ue={Event:typeof globalThis.Event<"u"?globalThis.Event:void 0,ErrorEvent:void 0,CloseEvent:void 0},Ni=!1;function ma(){if(typeof globalThis.Event>"u")throw new Error("Unable to lazy init events for ReconnectingWebSocket. globalThis.Event is not defined yet");Ue.Event=globalThis.Event,Ue.ErrorEvent=class extends Event{constructor(e,t){super("error",t),this.message=e.message,this.error=e}},Ue.CloseEvent=class extends Event{constructor(t=1e3,n="",i){super("close",i);this.wasClean=!0;this.code=t,this.reason=n}}}function ya(r,e){if(!r)throw new Error(e)}function $t(r){return new r.constructor(r.type,r)}var Ae={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},Ui=!1,Gt=class r extends K{constructor(t,n,i={}){Ni||(ma(),Ni=!0);super();this._retryCount=-1;this._shouldReconnect=!0;this._connectLock=!1;this._closeCalled=!1;this._messageQueue=[];this._debugLogger=console.log.bind(console);this.onclose=null;this.onerror=null;this.onmessage=null;this.onopen=null;this._handleOpen=t=>{this._debug("open event");let{minUptime:n=Ae.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),n),ya(this._ws,"WebSocket is not defined"),this._ws.binaryType=this._binaryType,this._messageQueue.forEach(i=>this._ws?.send(i)),this._messageQueue=[],this.onopen&&this.onopen(t),this.dispatchEvent($t(t))};this._handleMessage=t=>{this._debug("message event"),this.onmessage&&this.onmessage(t),this.dispatchEvent($t(t))};this._handleError=t=>{this._debug("error event",t.message),this._disconnect(void 0,t.message==="TIMEOUT"?"timeout":void 0),this.onerror&&this.onerror(t),this._debug("exec error listeners"),this.dispatchEvent($t(t)),this._connect()};this._handleClose=t=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(t),this.dispatchEvent($t(t))};this._url=t,this._protocols=n,this._options=i,this._options.startClosed&&(this._shouldReconnect=!1),this._options.binaryType?this._binaryType=this._options.binaryType:this._binaryType="blob",this._options.debugLogger&&(this._debugLogger=this._options.debugLogger),this._connect()}static get CONNECTING(){return 0}static get OPEN(){return 1}static get CLOSING(){return 2}static get CLOSED(){return 3}get CONNECTING(){return r.CONNECTING}get OPEN(){return r.OPEN}get CLOSING(){return r.CLOSING}get CLOSED(){return r.CLOSED}get binaryType(){return this._ws?this._ws.binaryType:this._binaryType}set binaryType(t){this._binaryType=t,this._ws&&(this._ws.binaryType=t)}get retryCount(){return Math.max(this._retryCount,0)}get bufferedAmount(){return this._messageQueue.reduce((n,i)=>(typeof i=="string"?n+=i.length:i instanceof Blob?n+=i.size:n+=i.byteLength,n),0)+(this._ws?.bufferedAmount??0)}get extensions(){return this._ws?.extensions??""}get protocol(){return this._ws?.protocol??""}get readyState(){return this._ws?this._ws.readyState:this._options.startClosed?r.CLOSED:r.CONNECTING}get url(){return this._ws?this._ws.url:""}get shouldReconnect(){return this._shouldReconnect}close(t=1e3,n){if(this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),!this._ws){this._debug("close enqueued: no ws instance");return}if(this._ws.readyState===this.CLOSED){this._debug("close: already closed");return}this._ws.close(t,n)}reconnect(t,n){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED?this._connect():(this._disconnect(t,n),this._connect())}send(t){if(this._ws&&this._ws.readyState===this.OPEN)this._debug("send",t),this._ws.send(t);else{let{maxEnqueuedMessages:n=Ae.maxEnqueuedMessages}=this._options;this._messageQueue.length<n&&(this._debug("enqueue",t),this._messageQueue.push(t))}}_debug(...t){this._options.debug&&this._debugLogger("RWS>",...t)}_getNextDelay(){let{reconnectionDelayGrowFactor:t=Ae.reconnectionDelayGrowFactor,minReconnectionDelay:n=Ae.minReconnectionDelay,maxReconnectionDelay:i=Ae.maxReconnectionDelay}=this._options,o=0;return this._retryCount>0&&(o=n*Math.pow(t,this._retryCount-1),o>i&&(o=i)),this._debug("next delay",o),o}_wait(){return new Promise(t=>{setTimeout(t,this._getNextDelay())})}_connect(){if(this._connectLock||!this._shouldReconnect)return;this._connectLock=!0;let{maxRetries:t=Ae.maxRetries,connectionTimeout:n=Ae.connectionTimeout}=this._options;if(this._retryCount>=t){this._debug("max retries reached",this._retryCount,">=",t);return}this._retryCount++,this._debug("connect",this._retryCount),this._removeListeners(),this._wait().then(()=>{if(this._closeCalled){this._connectLock=!1;return}!this._options.WebSocket&&typeof WebSocket>"u"&&!Ui&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),Ui=!0);let i=this._options.WebSocket||WebSocket;this._debug("connect",{url:this._url,protocols:this._protocols}),this._ws=this._protocols?new i(this._url,this._protocols):new i(this._url),this._ws.binaryType=this._binaryType,this._connectLock=!1,this._addListeners(),this._connectTimeout=setTimeout(()=>this._handleTimeout(),n)}).catch(i=>{this._connectLock=!1,this._handleError(new Ue.ErrorEvent(Error(i.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new Ue.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(t=1e3,n){if(this._clearTimeouts(),!!this._ws){this._removeListeners();try{this._ws.close(t,n),this._handleClose(new Ue.CloseEvent(t,n,this))}catch{}}}_acceptOpen(){this._debug("accept open"),this._retryCount=0}_removeListeners(){this._ws&&(this._debug("removeListeners"),this._ws.removeEventListener("open",this._handleOpen),this._ws.removeEventListener("close",this._handleClose),this._ws.removeEventListener("message",this._handleMessage),this._ws.removeEventListener("error",this._handleError))}_addListeners(){this._ws&&(this._debug("addListeners"),this._ws.addEventListener("open",this._handleOpen),this._ws.addEventListener("close",this._handleClose),this._ws.addEventListener("message",this._handleMessage),this._ws.addEventListener("error",this._handleError))}_clearTimeouts(){clearTimeout(this._connectTimeout),clearTimeout(this._uptimeTimeout)}};var ga=5e3,tt=class extends K{constructor(...e){super(),this.criteria=new Set(e)}getCriteria(){return this.criteria}_addCriteria(e){this.criteria.add(e)}_removeCriteria(e){this.criteria.delete(e)}},en=class{constructor(e,t){this.connecting=!1;this.criteria=e,this.emitter=new tt(e),this.refCount=1,this.subscriptionProps=t?{...t}:void 0}clearAttachedSubscription(){this.subscriptionId=void 0,this.token=void 0}},Ht=class{constructor(e,t,n){this.pingTimer=void 0;this.waitingForPong=!1;if(!(e instanceof Qt))throw new d(y("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(t).toString()}catch{throw new d(y("Not a valid URL"))}let o=n?.ReconnectingWebSocket?new n.ReconnectingWebSocket(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger}):new Gt(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger});this.medplum=e,this.ws=o,this.masterSubEmitter=new tt,this.criteriaEntries=new Map,this.criteriaEntriesBySubscriptionId=new Map,this.wsClosed=!1,this.pingIntervalMs=n?.pingIntervalMs??ga,this.currentProfile=e.getProfile(),this.setupListeners()}setupListeners(){let e=this.ws;e.addEventListener("message",t=>{try{let n=JSON.parse(t.data);if(n.type==="pong"){this.waitingForPong=!1;return}let i=n,o=i?.entry?.[0]?.resource;if(o.type==="heartbeat"){this.masterSubEmitter?.dispatchEvent({type:"heartbeat",payload:i});return}if(o.type==="handshake"){let a=xe(o.subscription),c={type:"connect",payload:{subscriptionId:a}};this.masterSubEmitter?.dispatchEvent(c);let u=this.criteriaEntriesBySubscriptionId.get(a);if(!u){console.warn("Received handshake for criteria the SubscriptionManager is not listening for yet");return}u.connecting=!1,u.emitter.dispatchEvent({...c});return}this.masterSubEmitter?.dispatchEvent({type:"message",payload:i});let s=this.criteriaEntriesBySubscriptionId.get(xe(o.subscription));if(!s){console.warn("Received notification for criteria the SubscriptionManager is not listening for");return}s.emitter.dispatchEvent({type:"message",payload:i})}catch(n){console.error(n);let i={type:"error",payload:n};this.masterSubEmitter?.dispatchEvent(i);for(let o of this.getAllCriteriaEmitters())o.dispatchEvent({...i})}}),e.addEventListener("error",()=>{let t={type:"error",payload:new d(Rn(new Error("WebSocket error")))};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t})}),e.addEventListener("close",()=>{let t={type:"close"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=void 0,this.waitingForPong=!1),this.wsClosed&&(this.criteriaEntries.clear(),this.criteriaEntriesBySubscriptionId.clear(),this.masterSubEmitter?.removeAllListeners())}),e.addEventListener("open",()=>{let t={type:"open"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.refreshAllSubscriptions().catch(console.error),this.pingTimer||(this.pingTimer=setInterval(()=>{if(this.waitingForPong){this.waitingForPong=!1,e.reconnect();return}e.send(JSON.stringify({type:"ping"})),this.waitingForPong=!0},this.pingIntervalMs))}),this.medplum.addEventListener("change",()=>{let t=this.medplum.getProfile();this.currentProfile&&t===void 0?this.ws.close():t&&this.currentProfile?.id!==t.id&&this.ws.reconnect(),this.currentProfile=t})}emitError(e,t){let n={type:"error",payload:t};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}maybeEmitDisconnect(e){let{subscriptionId:t}=e;if(t){let n={type:"disconnect",payload:{subscriptionId:t}};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}else console.warn("Called disconnect for `CriteriaEntry` before `subscriptionId` was present.")}async getTokenForCriteria(e){let t=e?.subscriptionId;t||(t=(await this.medplum.createResource({...e.subscriptionProps,resourceType:"Subscription",status:"active",reason:`WebSocket subscription for ${D(this.medplum.getProfile())}`,channel:{type:"websocket"},criteria:e.criteria})).id);let{parameter:n}=await this.medplum.get(`fhir/R4/Subscription/${t}/$get-ws-binding-token`),i=n?.find(s=>s.name==="token")?.valueString,o=n?.find(s=>s.name==="websocket-url")?.valueUrl;if(!i)throw new d(y("Failed to get token"));if(!o)throw new d(y("Failed to get URL from $get-ws-binding-token"));return[t,i]}maybeGetCriteriaEntry(e,t){let n=this.criteriaEntries.get(e);if(n){if(!t)return n.bareCriteria;for(let i of n.criteriaWithProps)if(se(t,i.subscriptionProps))return i}}getAllCriteriaEmitters(){let e=[];for(let t of this.criteriaEntries.values()){t.bareCriteria&&e.push(t.bareCriteria.emitter);for(let n of t.criteriaWithProps)e.push(n.emitter)}return e}addCriteriaEntry(e){let{criteria:t,subscriptionProps:n}=e,i;this.criteriaEntries.has(t)?i=this.criteriaEntries.get(t):(i={criteriaWithProps:[]},this.criteriaEntries.set(t,i)),n?i.criteriaWithProps.push(e):i.bareCriteria=e}removeCriteriaEntry(e){let{criteria:t,subscriptionProps:n,subscriptionId:i,token:o}=e;if(!this.criteriaEntries.has(t))return;let s=this.criteriaEntries.get(t);n?s.criteriaWithProps=s.criteriaWithProps.filter(a=>{let c=a.subscriptionProps;return!se(n,c)}):s.bareCriteria=void 0,!s.bareCriteria&&s.criteriaWithProps.length===0&&(this.criteriaEntries.delete(t),this.masterSubEmitter?._removeCriteria(t)),i&&this.criteriaEntriesBySubscriptionId.delete(i),o&&this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"unbind-from-token",payload:{token:o}}))}async subscribeToCriteria(e){if(!(this.ws.readyState!==WebSocket.OPEN||e.connecting)){e.connecting=!0;try{let[t,n]=await this.getTokenForCriteria(e);e.subscriptionId=t,e.token=n,this.criteriaEntriesBySubscriptionId.set(t,e),this.ws.send(JSON.stringify({type:"bind-with-token",payload:{token:n}}))}catch(t){console.error(Ve(t)),this.emitError(e,t),this.removeCriteriaEntry(e)}}}async refreshAllSubscriptions(){this.criteriaEntriesBySubscriptionId.clear();for(let e of this.criteriaEntries.values())for(let t of[...e.bareCriteria?[e.bareCriteria]:[],...e.criteriaWithProps])t.clearAttachedSubscription(),await this.subscribeToCriteria(t)}addCriteria(e,t){this.masterSubEmitter&&this.masterSubEmitter._addCriteria(e);let n=this.maybeGetCriteriaEntry(e,t);if(n)return n.refCount+=1,n.emitter;let i=new en(e,t);return this.addCriteriaEntry(i),this.subscribeToCriteria(i).catch(console.error),i.emitter}removeCriteria(e,t){let n=this.maybeGetCriteriaEntry(e,t);if(!n){console.warn("Criteria not known to `SubscriptionManager`. Possibly called remove too many times.");return}n.refCount-=1,!(n.refCount>0)&&(this.maybeEmitDisconnect(n),this.removeCriteriaEntry(n))}getWebSocket(){return this.ws}closeWebSocket(){this.wsClosed||(this.wsClosed=!0,this.ws.close())}reconnectWebSocket(){this.ws.reconnect(),this.wsClosed=!1}getCriteriaCount(){return this.getAllCriteriaEmitters().length}getMasterEmitter(){return this.masterSubEmitter||(this.masterSubEmitter=new tt(...Array.from(this.criteriaEntries.keys()))),this.masterSubEmitter}};async function Dd({resource:r,subscription:e,context:t,getPreviousResource:n,logger:i}){if(!xa(e,i))return i?.debug("Ignore subscription without recognized channel type"),!1;let o=e.criteria;if(!o)return i?.debug("Ignore rest hook missing criteria"),!1;let s=Ye(o);if(r.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${r.resourceType}")`),!1;if(!await va(e,r,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let c=oe(e,"https://medplum.com/fhir/StructureDefinition/subscription-supported-interaction");return c&&c.valueCode!==t.interaction?(i?.debug(`Ignore rest hook for different interaction (wanted "${c.valueCode}", received "${t.interaction}")`),!1):Ft(r,s)?e.meta?.account&&r.meta?.account?.reference!==e.meta.account.reference?(i?.warn("Subscription suppressed due to mismatched meta.account",{subscriptionId:e.id,resourceId:r.id}),!1):!0:!1}function xa(r,e){let t=r.channel?.type;return t==="rest-hook"?r.channel?.endpoint?!0:(e?.debug("Ignore rest-hook missing URL"),!1):t==="websocket"}async function va(r,e,t){let n=oe(r,"https://medplum.com/fhir/StructureDefinition/fhir-path-criteria-expression");if(!n?.valueString)return!0;let i=await t(e),o={"%current":v(e),"%previous":v(i??{})};return E(n.valueString,[v(e)],o)?.[0]?.value===!0}var tn="4.5.0-e2f7d4ec4",Xd="medplum-cli",Ta=A.FHIR_JSON+", */*; q=0.1",Sa="https://api.medplum.com/",ba=1e3,Ea=6e4,Ra=0,Ca=3e5,Pa="Binary/",Bi={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},Be={ClientCredentials:"client_credentials",AuthorizationCode:"authorization_code",RefreshToken:"refresh_token",JwtBearer:"urn:ietf:params:oauth:grant-type:jwt-bearer",TokenExchange:"urn:ietf:params:oauth:grant-type:token-exchange"},wa={AccessToken:"urn:ietf:params:oauth:token-type:access_token",RefreshToken:"urn:ietf:params:oauth:token-type:refresh_token",IdToken:"urn:ietf:params:oauth:token-type:id_token",Saml1Token:"urn:ietf:params:oauth:token-type:saml1",Saml2Token:"urn:ietf:params:oauth:token-type:saml2"},Yd={ClientSecretBasic:"client_secret_basic",ClientSecretPost:"client_secret_post",ClientSecretJwt:"client_secret_jwt",PrivateKeyJwt:"private_key_jwt",None:"none"},Aa={JwtBearer:"urn:ietf:params:oauth:client-assertion-type:jwt-bearer"},Qt=class extends K{constructor(t){super();this.initComplete=!0;if(t?.baseUrl&&!t.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");this.options=t??{},this.fetch=t?.fetch??Oa(),this.storage=t?.storage??new et,this.createPdfImpl=t?.createPdf,this.baseUrl=Wr(t?.baseUrl??Sa),this.fhirBaseUrl=j(this.baseUrl,t?.fhirUrlPath??"fhir/R4"),this.authorizeUrl=j(this.baseUrl,t?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=j(this.baseUrl,t?.tokenUrl??"oauth2/token"),this.logoutUrl=j(this.baseUrl,t?.logoutUrl??"oauth2/logout"),this.fhircastHubUrl=j(this.baseUrl,t?.fhircastHubUrl??"fhircast/STU3"),this.clientId=t?.clientId??"",this.clientSecret=t?.clientSecret??"",this.credentialsInHeader=t?.authCredentialsMethod==="header",this.defaultHeaders=t?.defaultHeaders??{},this.onUnauthenticated=t?.onUnauthenticated,this.refreshGracePeriod=t?.refreshGracePeriod??Ca,this.cacheTime=t?.cacheTime??(B()?Ea:Ra),this.cacheTime>0?this.requestCache=new Ie(t?.resourceCacheSize??ba):this.requestCache=void 0,t?.autoBatchTime?(this.autoBatchTime=t.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0),t?.accessToken&&this.setAccessToken(t.accessToken),this.storage.getInitPromise===void 0?(t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initPromise=Promise.resolve(),this.dispatchEvent({type:"storageInitialized"})):(this.initComplete=!1,this.initPromise=this.storage.getInitPromise(),this.initPromise.then(()=>{t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initComplete=!0,this.dispatchEvent({type:"storageInitialized"})}).catch(n=>{console.error(n),this.initComplete=!0,this.dispatchEvent({type:"storageInitFailed",payload:{error:n}})})),this.setupStorageListener()}get isInitialized(){return this.initComplete}getInitPromise(){return this.initPromise}async attemptResumeActiveLogin(){let t=this.getActiveLogin();t&&(this.setAccessToken(t.accessToken,t.refreshToken),await this.refreshProfile())}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}getFhircastHubUrl(){return this.fhircastHubUrl}getDefaultHeaders(){return this.defaultHeaders}clear(){this.storage.clear(),B()&&sessionStorage.clear(),this.clearActiveLogin()}clearActiveLogin(){this.storage.setString("activeLogin",void 0),this.requestCache?.clear(),this.accessToken=void 0,this.refreshToken=void 0,this.refreshPromise=void 0,this.accessTokenExpires=void 0,this.sessionDetails=void 0,this.medplumServer=void 0,this.dispatchEvent({type:"change"})}invalidateUrl(t){t=t.toString(),this.requestCache?.delete(t)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(t){let n=j(this.fhirBaseUrl,t);if(this.requestCache)for(let i of this.requestCache.keys())(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache.delete(i)}get(t,n={}){t=t.toString();let i=this.getCacheEntry(t,n);if(i)return i.value;let o;t.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue&&!n.disableAutoBatch?o=new Promise((a,c)=>{this.autoBatchQueue.push({method:"GET",url:t.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:c}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):o=this.request("GET",t,n);let s=new M(o);return this.setCacheEntry(t,s),s}post(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("POST",t,o)}put(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("PUT",t,o)}patch(t,n,i={}){return t=t.toString(),this.setRequestBody(i,n),this.setRequestContentType(i,A.JSON_PATCH),this.invalidateUrl(t),this.request("PATCH",t,i)}delete(t,n){return t=t.toString(),this.invalidateUrl(t),this.request("DELETE",t,n)}async startNewUser(t,n){let{codeChallengeMethod:i,codeChallenge:o}=await this.startPkce();return this.post("auth/newuser",{...t,clientId:t.clientId??this.clientId,codeChallengeMethod:i,codeChallenge:o},void 0,n)}async startNewProject(t,n){return this.post("auth/newproject",t,void 0,n)}async startNewPatient(t,n){return this.post("auth/newpatient",t,void 0,n)}async startLogin(t,n){return this.post("auth/login",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async startGoogleLogin(t,n){return this.post("auth/google",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async ensureCodeChallenge(t){return t.codeChallenge?t:{...t,...await this.startPkce()}}async signOut(){await this.post(this.logoutUrl,{}),this.clear()}async signInWithRedirect(t){let i=new URLSearchParams(te.getSearch()).get("code");if(!i){await this.requestAuthorization(t);return}return this.processCode(i)}signOutWithRedirect(){te.assign(this.logoutUrl)}async signInWithExternalAuth(t,n,i,o,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),te.assign(this.getExternalAuthRedirectUri(t,n,i,a,s))}async exchangeExternalAccessToken(t,n){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");return this.fetchTokens({grant_type:Be.TokenExchange,subject_token_type:wa.AccessToken,client_id:n,subject_token:t})}getExternalAuthRedirectUri(t,n,i,o,s=!0){let a=new URL(t);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",n),a.searchParams.set("redirect_uri",i),a.searchParams.set("scope",o.scope??"openid profile email"),a.searchParams.set("state",JSON.stringify(o)),s){let{codeChallenge:c,codeChallengeMethod:u}=o;if(!u)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!c)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");a.searchParams.set("code_challenge_method",u),a.searchParams.set("code_challenge",c)}return a.toString()}fhirUrl(...t){return new URL(j(this.fhirBaseUrl,t.join("/")))}fhirSearchUrl(t,n){let i=this.fhirUrl(t);return n&&(i.search=ci(n)),i}search(t,n,i){let o=this.fhirSearchUrl(t,n),s="search-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=this.getBundle(o,i);return this.setCacheEntry(s,c),c}searchOne(t,n,i){let o=this.fhirSearchUrl(t,n);o.searchParams.set("_count","1"),o.searchParams.sort();let s="searchOne-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=new M(this.search(t,o.searchParams,i).then(u=>u.entry?.[0]?.resource));return this.setCacheEntry(s,c),c}searchResources(t,n,i){let s="searchResources-"+this.fhirSearchUrl(t,n).toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=new M(this.search(t,n,i).then(qi));return this.setCacheEntry(s,c),c}async*searchResourcePages(t,n,i){let o=this.fhirSearchUrl(t,n);for(;o;){let s=new URL(o).searchParams;s.has("_count")||s.set("_count","1000");let a=await this.search(t,s,i),c=a.link?.find(u=>u.relation==="next");if(!a.entry?.length&&!c)break;yield qi(a),o=c?.url?new URL(c.url):void 0}}valueSetExpand(t,n){let i=this.fhirUrl("ValueSet","$expand");return i.search=new URLSearchParams(t).toString(),this.get(i.toString(),n)}getCached(t,n){let i=this.requestCache?.get(this.fhirUrl(t,n).toString())?.value;return i?.isOk()?i.read():void 0}getCachedReference(t){let n=t.reference;if(!n)return;if(n==="system")return Bi;let[i,o]=n.split("/");if(!(!i||!o))return this.getCached(i,o)}readResource(t,n,i){if(!n)throw new Error('The "id" parameter cannot be null, undefined, or an empty string.');return this.get(this.fhirUrl(t,n),i)}readReference(t,n){let i=t.reference;if(!i)return new M(Promise.reject(new Error("Missing reference")));if(i==="system")return new M(Promise.resolve(Bi));let[o,s]=i.split("/");return!o||!s?new M(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}requestSchema(t){if(Ln(t))return Promise.resolve();let n=t+"-requestSchema",i=this.getCacheEntry(n,void 0);if(i)return i.value;let o=new M((async()=>{let s=`{
4
+ `?(this.pos.line++,this.pos.column=0):this.pos.column++}buildToken(e,t){let n=this.markStack.pop();if(!n)throw new Error("No mark for token");return{id:e,value:t,...n}}};function Ts(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&xs.includes(r.value)))}var Je=["true","false"],Ke=["!=","!~","<=",">=","{}","->"];function mi(r){return new de(r,Je,Ke).tokenize()}var g={FunctionCall:0,Dot:1,Indexer:2,UnaryAdd:3,UnarySubtract:3,Multiply:4,Divide:4,IntegerDivide:4,Modulo:4,Add:5,Subtract:5,Ampersand:5,Is:6,As:6,Union:7,GreaterThan:8,GreaterThanOrEquals:8,LessThan:8,LessThanOrEquals:8,Equals:9,Equivalent:9,NotEquals:9,NotEquivalent:9,In:10,Contains:10,And:11,Xor:12,Or:12,Implies:13,Arrow:100,Semicolon:200},Ss={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},bs={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new Re(e,t)},precedence:g.Indexer},Es={parse(r,e){if(!(e instanceof $))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new ee(e.name,t)},precedence:g.FunctionCall};function Rs(r){let e=r.split(" "),t=parseFloat(e[0]),n=e[1];return n?.startsWith("'")&&n.endsWith("'")?n=n.substring(1,n.length-1):n="{"+n+"}",{value:t,unit:n}}function Xe(){return new st().registerPrefix("String",{parse:(r,e)=>new U({type:l.string,value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new U({type:l.dateTime,value:Le(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new U({type:l.Quantity,value:Rs(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new U({type:e.value.includes(".")?l.decimal:l.integer,value:parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new U({type:l.boolean,value:!0})}).registerPrefix("false",{parse:()=>new U({type:l.boolean,value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new $(e.value)}).registerPrefix("{}",{parse:()=>new Et}).registerPrefix("(",Ss).registerInfix("[",bs).registerInfix("(",Es).prefix("+",g.UnaryAdd,(r,e)=>new Rt("+",e,t=>t)).prefix("-",g.UnarySubtract,(r,e)=>new V("-",e,e,(t,n)=>-n)).infixLeft(".",g.Dot,(r,e,t)=>new le(r,t)).infixLeft("/",g.Divide,(r,e,t)=>new V("/",r,t,(n,i)=>n/i)).infixLeft("*",g.Multiply,(r,e,t)=>new V("*",r,t,(n,i)=>n*i)).infixLeft("+",g.Add,(r,e,t)=>new V("+",r,t,(n,i)=>n+i)).infixLeft("-",g.Subtract,(r,e,t)=>new V("-",r,t,(n,i)=>n-i)).infixLeft("|",g.Union,(r,e,t)=>new be(r,t)).infixLeft("=",g.Equals,(r,e,t)=>new At(r,t)).infixLeft("!=",g.NotEquals,(r,e,t)=>new Ot(r,t)).infixLeft("~",g.Equivalent,(r,e,t)=>new It(r,t)).infixLeft("!~",g.NotEquivalent,(r,e,t)=>new kt(r,t)).infixLeft("<",g.LessThan,(r,e,t)=>new V("<",r,t,(n,i)=>n<i)).infixLeft("<=",g.LessThanOrEquals,(r,e,t)=>new V("<=",r,t,(n,i)=>n<=i)).infixLeft(">",g.GreaterThan,(r,e,t)=>new V(">",r,t,(n,i)=>n>i)).infixLeft(">=",g.GreaterThanOrEquals,(r,e,t)=>new V(">=",r,t,(n,i)=>n>=i)).infixLeft("&",g.Ampersand,(r,e,t)=>new Ct(r,t)).infixLeft("and",g.And,(r,e,t)=>new Vt(r,t)).infixLeft("as",g.As,(r,e,t)=>new pe(r,t)).infixLeft("contains",g.Contains,(r,e,t)=>new Pt(r,t)).infixLeft("div",g.Divide,(r,e,t)=>new V("div",r,t,(n,i)=>n/i|0)).infixLeft("in",g.In,(r,e,t)=>new wt(r,t)).infixLeft("is",g.Is,(r,e,t)=>new Ee(r,t)).infixLeft("mod",g.Modulo,(r,e,t)=>new V("mod",r,t,(n,i)=>n%i)).infixLeft("or",g.Or,(r,e,t)=>new Dt(r,t)).infixLeft("xor",g.Xor,(r,e,t)=>new Mt(r,t)).infixLeft("implies",g.Implies,(r,e,t)=>new _t(r,t))}var Cs=Xe();function Lt(r){return new Fe(r,Cs.construct(mi(r)).consumeAndParse())}function hp(r,e){let t=Array.isArray(e)?e:[e];for(let n=0;n<t.length;n++){let i=t[n];typeof i=="object"&&"type"in i&&"value"in i||(t[n]=v(t[n]))}return E(r,t).map(n=>n.value)}function E(r,e,t={},n=void 0){let i;if(typeof r=="string"){let o=n?.get(r);i=o??Lt(r),n&&!o&&n.set(r,i)}else i=r;return i.eval({variables:t},e).map(o=>({type:o.type,value:o.value?.valueOf()}))}function Tp(r){let e=[];for(let t of r)t.type===l.Range?e.push([t.value?.low?.value,t.value?.high?.value]):typeof t.value=="number"&&e.push([t.value,t.value]);return e}function yi(r){let e=[];for(let t of r){let n=gt(t.value);n&&e.push(n)}return e}function gi(r){let e=new Set;for(let t of r){let n=ui(t);n&&e.add(n)}return Array.from(e)}function xi(r){let e=new Set;for(let t of r){let{value:n}=t;n&&(St(n)?e.add(n):q(n)?e.add(n.reference):Qe(n)?e.add(D(n)):typeof n.identifier=="object"&&e.add(`identifier:${n.identifier.system}|${n.identifier.value}`))}return Array.from(e)}function Sp(r){let e=[];for(let t of r){let{value:n}=t;typeof n=="number"?e.push({value:n}):w(n)&&e.push(n)}return e}function bp(r){let e=new Set;for(let t of r)St(t.value)&&e.add(t.value);return Array.from(e)}function vi(r,e={}){let t=[];for(let n of r)Ps(e,t,n);return t}function Ps(r,e,t){let{type:n,value:i}=t;switch(n){case l.Identifier:ws(e,r,i);break;case l.CodeableConcept:As(e,r,i);break;case l.Coding:Ti(e,r,i);break;case l.ContactPoint:Os(e,r,i);break;default:Ce(e,r,void 0,i?.toString())}}function ws(r,e,t){t?.type?.text&&Ce(r,e,e.textSearchSystem,t.type.text),Ce(r,e,t?.system,t?.value)}function As(r,e,t){if(t?.text&&Ce(r,e,e.textSearchSystem,t.text),t?.coding)for(let n of t.coding)Ti(r,e,n)}function Ti(r,e,t){t&&(t.display&&Ce(r,e,e.textSearchSystem,t.display),Ce(r,e,t.system,t.code))}function Os(r,e,t){t&&Ce(r,e,t.system,t.value?.toLocaleLowerCase())}function Ce(r,e,t,n){(t||n)&&!r.some(i=>i.system===t&&i.value===n)&&r.push({system:t,value:n&&e.caseInsensitive?n.toLocaleLowerCase():n})}var Op=20,Ip=1e3,f={EQUALS:"eq",NOT_EQUALS:"ne",GREATER_THAN:"gt",LESS_THAN:"lt",GREATER_THAN_OR_EQUALS:"ge",LESS_THAN_OR_EQUALS:"le",STARTS_AFTER:"sa",ENDS_BEFORE:"eb",APPROXIMATELY:"ap",CONTAINS:"contains",STARTS_WITH:"sw",EXACT:"exact",TEXT:"text",NOT:"not",ABOVE:"above",BELOW:"below",IN:"in",NOT_IN:"not-in",OF_TYPE:"of-type",MISSING:"missing",PRESENT:"present",IDENTIFIER:"identifier",ITERATE:"iterate"},Ri={contains:f.CONTAINS,exact:f.EXACT,above:f.ABOVE,below:f.BELOW,text:f.TEXT,not:f.NOT,in:f.IN,"not-in":f.NOT_IN,"of-type":f.OF_TYPE,missing:f.MISSING,identifier:f.IDENTIFIER,iterate:f.ITERATE},Gr={eq:f.EQUALS,ne:f.NOT_EQUALS,lt:f.LESS_THAN,le:f.LESS_THAN_OR_EQUALS,gt:f.GREATER_THAN,ge:f.GREATER_THAN_OR_EQUALS,sa:f.STARTS_AFTER,eb:f.ENDS_BEFORE,ap:f.APPROXIMATELY,sw:f.STARTS_WITH};function Ye(r,e){if(!r)throw new Error("Invalid search URL");let t="",n;if(typeof r=="string")if(r.includes("?")){let[s,a]=r.split("?");t=s,n=new URLSearchParams(a)}else t=r;else typeof r=="object"&&(t=r.pathname,n=r.searchParams);let i;t.includes("/")?i=t.split("/").filter(Boolean).pop():i=t;let o=[];if(n&&o.push(...n.entries()),e)for(let[s,a]of Object.entries(e))if(Array.isArray(a))for(let c of a)o.push([s,c]);else o.push([s,a??""]);return Is(i,o)}function Is(r,e){let t={resourceType:r};for(let[n,i]of e)ks(t,n,i);return t}function ks(r,e,t){let n,i,o=e.indexOf(":");if(o>=0?(n=e.substring(0,o),i=e.substring(o+1)):(n=e,i=""),n!=="_"){if(n==="_has"||e.includes(".")){r.filters=ce(r.filters,{code:e,operator:f.EQUALS,value:t});return}switch(n){case"_sort":Vs(r,t);break;case"_cursor":r.cursor=t;break;case"_count":r.count=parseInt(t,10);break;case"_offset":r.offset=parseInt(t,10);break;case"_total":r.total=t;break;case"_summary":t==="count"?(r.total="accurate",r.count=0):(t==="true"||t==="data"||t==="text")&&(r.summary=t);break;case"_include":{let s=Si(t);i==="iterate"&&(s.modifier=f.ITERATE),r.include=ce(r.include,s);break}case"_revinclude":{let s=Si(t);i==="iterate"&&(s.modifier=f.ITERATE),r.revInclude=ce(r.revInclude,s);break}case"_fields":case"_elements":r.fields=t.split(",");break;case"_type":r.types=t.split(",");break;case"_format":r.format=t;break;case"_pretty":r.pretty=t==="true";break;default:{let s=F.types[r.resourceType]?.searchParams?.[n];s?r.filters=ce(r.filters,Ms(s,i,t)):r.filters=ce(r.filters,_s(n,i,t))}}}}function Vs(r,e){for(let t of e.split(",")){let n,i=!1;t.startsWith("-")?(n=t.substring(1),i=!0):n=t,r.sortRules||(r.sortRules=[]),r.sortRules.push({code:n,descending:i})}}var Ds=[f.MISSING,f.PRESENT];function Ms(r,e,t){if(Ds.includes(e))return{code:r.code,operator:e,value:t};switch(r.type){case"number":case"date":case"quantity":{let{operator:n,value:i}=Ls(t);if(!bi(r,i))throw new d(b(`Invalid format for ${r.type} search parameter: ${i}`));return{code:r.code,operator:n,value:i}}case"reference":case"string":case"token":case"uri":if(!bi(r,t))throw new d(b(`Invalid format for ${r.type} search parameter: ${t}`));return{code:r.code,operator:Fs(e),value:t};default:throw new Error("Unrecognized search parameter type: "+r.type)}}function _s(r,e,t){let n=f.EQUALS;if(e)n=e;else if(t.length>=2){let i=t.substring(0,2);i in Gr&&(t.length===2||t.at(2)?.match(/\d/))&&(n=i,t=t.substring(i.length))}return{code:r,operator:n,value:t}}function Ls(r){let e=r.substring(0,2),t=Gr[e];return t?{operator:t,value:r.substring(2)}:{operator:f.EQUALS,value:r}}function Fs(r){return Ri[r]??f.EQUALS}function Si(r){let e=r.split(":");if(e.includes("*"))throw new d(b("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new d(b(`Invalid include value '${r}': must be of the form ResourceType:search-parameter`));if(e.length===2)return{resourceType:e[0],searchParam:e[1]};if(e.length===3)return{resourceType:e[0],searchParam:e[1],targetType:e[2]};throw new d(b(`Invalid include value '${r}'`))}function bi(r,e){switch(r.type){case"date":return _e(e);default:return!0}}var Ns=/{{([^{}]+)}}/g;function kp(r,e){return r=r.replaceAll(Ns,(t,n)=>{let i=E(n,[],e);return i.length!==1?"":hi(i[0])}),Ye(r)}function Vp(r){let e=[];return r.fields&&e.push("_fields="+r.fields.join(",")),r.filters&&r.filters.forEach(t=>e.push(Us(t))),r.sortRules&&r.sortRules.length>0&&e.push(Bs(r.sortRules)),r.cursor!==void 0&&e.push("_cursor="+encodeURIComponent(r.cursor)),r.offset!==void 0&&r.offset!==0&&e.push("_offset="+r.offset),r.count!==void 0&&e.push("_count="+r.count),r.total!==void 0&&e.push("_total="+r.total),r.types&&r.types.length>0&&e.push("_type="+r.types.join(",")),r.include&&r.include.forEach(t=>e.push(Ei("_include",t))),r.revInclude&&r.revInclude.forEach(t=>e.push(Ei("_revinclude",t))),e.length===0?"":(bt(e),"?"+e.join("&"))}function Us(r){let e=r.operator in Ri?":"+r.operator:"",t=r.operator!==f.EQUALS&&r.operator in Gr?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function Bs(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function Ei(r,e){return r+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function Ze(r){let e=[],t="",n=!1;for(let i of r)n?(t+=i,n=!1):i==="\\"?n=!0:i===","?(e.push(t),t=""):t+=i;return e.push(t),e}function Ft(r,e){if(e.resourceType!==r.resourceType)return!1;if(e.filters){for(let t of e.filters)if(!Ws(r,e,t))return!1}return!0}function Ws(r,e,t){let n=F.types[e.resourceType]?.searchParams?.[t.code];if(!n)return!1;let i=E(n.expression,[v(r)]);if(t.operator===f.MISSING||t.operator===f.PRESENT)return qs(i,t);switch(n.type){case"reference":return js(i,t);case"string":case"uri":return Hs(i,t);case"token":return $s(i,t);case"date":return zs(i,t);default:return!1}}function qs(r,e){let t=r.length>0;return(e.operator===f.MISSING&&e.value==="false"||e.operator===f.PRESENT&&e.value==="true")===t}function js(r,e){let t=Nt(e.operator);if(e.value===""&&r.length===0)return e.operator===f.EQUALS;let n=xi(r);for(let i of Ze(e.value)){let o=n.includes(i);if(!o&&e.code==="_compartment"&&(o=n.some(s=>s?.endsWith("/"+i))),o)return!t}return t}function $s(r,e){let t=vi(r),n=Ze(e.value),i=Nt(e.operator);for(let o of t)for(let s of n)if(Gs(o,s))return!i;return i}function Gs(r,e){if(e.includes("|")){let[t,n]=e.split("|").map(i=>i.toLowerCase());return!t&&!n?!1:t?r.system?.toLowerCase()===t&&(!n||r.value?.toLowerCase()===n):!r.system&&r.value?.toLowerCase()===n}return r.value?.toLowerCase()===e.toLowerCase()}function Hs(r,e){let t=gi(r),n=Ze(e.value),i=Nt(e.operator);for(let o of t)for(let s of n)if(Qs(o,s))return!i;return i}function Qs(r,e){return r.toLowerCase().includes(e.toLowerCase())}function zs(r,e){let t=yi(r),n=Ze(e.value),i=Nt(e.operator);for(let o of t)for(let s of n)if(Js(o,e.operator,s))return!i;return i}function Js(r,e,t){if(!r)return!1;let n=gt(t);if(!n)return!1;let i=r.start??"0000",o=r.end??"9999",s=n.start,a=n.end;switch(e){case f.APPROXIMATELY:case f.EQUALS:case f.NOT_EQUALS:return i<a&&o>s;case f.LESS_THAN:return i<s;case f.GREATER_THAN:return o>a;case f.LESS_THAN_OR_EQUALS:return i<=a;case f.GREATER_THAN_OR_EQUALS:return o>=s;case f.STARTS_AFTER:return i>a;case f.ENDS_BEFORE:return o<s;default:return!1}}function Nt(r){return r===f.NOT_EQUALS||r===f.NOT}var Ks={resourceType:"*"},Xs=["DomainConfiguration","JsonWebKey","Login"],Ys=["PasswordChangeRequest","UserSecurityRequest","Project","ProjectMembership","User"],Pe={READ:"read",VREAD:"vread",UPDATE:"update",DELETE:"delete",HISTORY:"history",CREATE:"create",SEARCH:"search"},Zs=[Pe.READ,Pe.VREAD,Pe.HISTORY,Pe.SEARCH];function qp(r,e){return Ci(r,Pe.SEARCH,e)}function jp(r,e){return Xs.includes(e)?!1:Ci(r,Pe.UPDATE,e)}function Ci(r,e,t){return!!r.resource?.some(n=>Pi(n,t,e))}function $p(r,e){return!!ea(e,Pe.UPDATE,r)}function ea(r,e,t){return t?t.resource?.find(n=>ta(r,e,n)):Ks}function ta(r,e,t){let n=r.resourceType;return Pi(t,n,e)?n==="Binary"?!0:!(t.compartment&&!r.meta?.compartment?.some(i=>i.reference===t.compartment?.reference)||t.criteria&&!Ft(r,Ye(t.criteria))):!1}function Pi(r,e,t){return r.resourceType!==e&&(r.resourceType!=="*"||Ys.includes(e))?!1:r.interaction?r.interaction.includes(t):!r.readonly||Zs.includes(t)}function B(){return typeof window<"u"}function Hp(){return typeof Buffer<"u"}function Qp(){return typeof window<"u"?window:void 0}function Hr(){return typeof Buffer<"u"?Buffer:void 0}var te={assign(r){B()&&globalThis.location.assign(r)},reload(){B()&&globalThis.location.reload()},getSearch(){return B()?globalThis.location.search:""},getPathname(){return B()?globalThis.location.pathname:""},getLocation(){return B()?globalThis.location.toString():""},getOrigin(){return B()?globalThis.location.protocol+"//"+globalThis.location.host+"/":""}};function ra(r){if(B()){let t=window.atob(r),n=Uint8Array.from(t,i=>i.charCodeAt(0));return new window.TextDecoder().decode(n)}let e=Hr();if(e)return e.from(r,"base64").toString("utf-8");throw new Error("Unable to decode base64")}function Ut(r){if(B()){let t=new window.TextEncoder().encode(r),n=String.fromCharCode.apply(null,t);return window.btoa(n)}let e=Hr();if(e)return e.from(r,"utf8").toString("base64");throw new Error("Unable to encode base64")}function Kp(r){return Ut(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/[=]{1,2}$/,"")}function wi(r){r=r.padEnd(r.length+(4-r.length%4)%4,"=");let e=r.replace(/-/g,"+").replace(/_/g,"/");return ra(e)}function Qr(){let r=new Uint32Array(28);return crypto.getRandomValues(r),ti(r.buffer)}async function Ai(r){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(r))}function we(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,r=>{let e=Math.random()*16|0;return(r==="x"?e:e&3|8).toString(16)})}function na(r){let e={};r=ve(r);for(let i of r.entry||[]){let o=i.resource;if(!o)continue;o.meta!==void 0&&(delete o.meta.author,delete o.meta.compartment,delete o.meta.lastUpdated,delete o.meta.project,delete o.meta.versionId,Object.keys(o.meta).length===0&&delete o.meta);let s=o?.id;s&&(e[s]=we(),i.fullUrl="urn:uuid:"+e[s],delete i.resource?.id)}let t=r.entry,n=JSON.stringify({resourceType:"Bundle",type:"transaction",entry:t?.map(i=>({fullUrl:i.fullUrl,request:{method:"POST",url:i.resource?.resourceType},resource:i.resource}))},(i,o)=>ia(i,o,e),2);return oa(JSON.parse(n))}function ia(r,e,t){if(r==="reference"&&typeof e=="string"){let n;if(e.includes("/")?n=e.split("/")[1]:e.startsWith("urn:uuid:")?n=e.slice(9):e.startsWith("#")&&(n=e.slice(1)),n){let i=t[n];if(i)return"urn:uuid:"+i}}return e}function oa(r){let e=aa(r),{sorted:t,cycles:n}=sa(e),i={};for(let s of r.entry??[])s.fullUrl&&(i[s.fullUrl]=s);let o=t.map(s=>i[s]);for(let s of n)for(let a of s){let c=i[a],u={...c,request:{...c.request,method:"PUT"}};o.push(u)}return{...r,entry:o}}var Ne={NotVisited:"NotVisited",Visiting:"Visiting",Visited:"Visited"};function sa(r){let e=[],t={},n=[];for(let o of Object.keys(r))t[o]=Ne.NotVisited;function i(o,s){if(t[o]===Ne.Visited)return!0;if(t[o]===Ne.Visiting){let c=s.lastIndexOf(o);return c!==-1&&n.push(s.slice(c)),!0}t[o]=Ne.Visiting,s.push(o);let a=!1;for(let c of r[o])i(c,s)||(a=!0);return t[o]=Ne.Visited,s.pop(),e.unshift(o),!a}for(let o in r)t[o]===Ne.NotVisited&&i(o,[]);return{sorted:e,cycles:n}}function Oi(r,e){for(let t in r)if(r[t]&&typeof r[t]=="object"){let n=r[t];if(q(n)){let i=n.reference;i.startsWith("urn:uuid:")&&e(i)}else Oi(n,e)}}function aa(r){let e={};for(let t of r.entry||[])t.fullUrl&&(e[t.fullUrl]=[]);for(let t of r.entry||[]){let n=t.fullUrl;t.resource&&Oi(t.resource,i=>{e[i]&&e[i].push(n)})}return e}function nd(r){r=ve(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=we());return na(e)}function id(r,e,t){return r.entry?.find(({resource:n})=>n?.resourceType===e&&n?.id===t)?.resource}var A={CSS:"text/css",DICOM:"application/dicom",FAVICON:"image/vnd.microsoft.icon",FHIR_JSON:"application/fhir+json",FORM_URL_ENCODED:"application/x-www-form-urlencoded",HL7_V2:"x-application/hl7-v2+er7",HTML:"text/html",JAVASCRIPT:"text/javascript",JSON:"application/json",JSON_PATCH:"application/json-patch+json",JWT:"application/jwt",MULTIPART_FORM_DATA:"multipart/form-data",PNG:"image/png",SCIM_JSON:"application/scim+json",SVG:"image/svg+xml",TEXT:"text/plain",TYPESCRIPT:"text/typescript",PING:"x-application/ping",XML:"text/xml",CDA_XML:"application/cda+xml",OCTET_STREAM:"application/octet-stream"};var zr=class{constructor(){this.listeners={}}addEventListener(e,t){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)}removeEventListener(e,t){let n=this.listeners[e];if(n){for(let i=0;i<n.length;i++)if(n[i]===t){n.splice(i,1);return}}}dispatchEvent(e){let t=this.listeners[e.type];if(t)for(let n of t)n.call(this,e);return!e.defaultPrevented}removeAllListeners(){this.listeners={}}},K=class{constructor(){this.emitter=new zr}dispatchEvent(e){this.emitter.dispatchEvent(e)}addEventListener(e,t){this.emitter.addEventListener(e,t)}removeEventListener(e,t){this.emitter.removeEventListener(e,t)}removeAllListeners(){this.emitter.removeAllListeners()}};var Jr={"Patient-open":"Patient-open","Patient-close":"Patient-close","ImagingStudy-open":"ImagingStudy-open","ImagingStudy-close":"ImagingStudy-close","Encounter-open":"Encounter-open","Encounter-close":"Encounter-close","DiagnosticReport-open":"DiagnosticReport-open","DiagnosticReport-close":"DiagnosticReport-close","DiagnosticReport-select":"DiagnosticReport-select","DiagnosticReport-update":"DiagnosticReport-update",syncerror:"syncerror"},ca=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],Kr=["DiagnosticReport-update"];function Ii(r){return Kr.includes(r)}function ki(r){if(Kr.includes(r))throw new d(y(`'context.version' is required for '${r}'.`))}var ua={"Patient-open":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"Patient-close":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"ImagingStudy-open":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"ImagingStudy-close":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"Encounter-open":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"Encounter-close":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"DiagnosticReport-open":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-close":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-select":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},select:{resourceType:"*",reference:!0,manyAllowed:!0}},"DiagnosticReport-update":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},updates:{resourceType:"Bundle"}},syncerror:{operationoutcome:{resourceType:"OperationOutcome"}}};function la(r){return ca.includes(r)}function Vi(r){return!!r.endpoint}function Xr(r){if(!Wt(r))throw new d(y("subscriptionRequest must be an object conforming to SubscriptionRequest type."));let{channelType:e,mode:t,topic:n,events:i}=r,o={"hub.channel.type":e,"hub.mode":t,"hub.topic":n,"hub.events":i.join(",")};return Vi(r)&&(o.endpoint=r.endpoint),new URLSearchParams(o).toString()}function Wt(r){if(typeof r!="object")return!1;let{channelType:e,mode:t,topic:n,events:i}=r;if(!(e&&t&&n&&i)||typeof n!="string"||typeof i!="object"||!Array.isArray(i)||i.length<1||e!=="websocket"||t!=="subscribe"&&t!=="unsubscribe")return!1;for(let o of i)if(!Jr[o])return!1;return!(Vi(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function pa(r,e,t,n){if(typeof e!="object")throw new d(y(`context[${t}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.id&&typeof e.id=="string"))throw new d(y(`context[${t}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new d(y(`context[${t}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!la(e.resourceType))throw new d(y(`context[${t}] is invalid. Resource must contain a valid FHIRcast resource type. Resource type is not a known resource type.`));if(i&&e.resourceType!==i)throw new d(y(`context[${t}] is invalid. context[${t}] for the '${r}' event should contain resource of type ${i}.`))}}function da(r,e,t,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),n.reference){if(!q(e.reference))throw new d(y(`context[${t}] is invalid. Expected key '${e.key}' to be a reference.`))}else pa(r,e.resource,t,n)}function fa(r,e){let t=new Map,n=ua[r];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new d(y(`Key '${o}' not found for event '${r}'. Make sure to add only valid keys.`));da(r,e[i],i,n[o],t)}for(let[i,o]of Object.entries(n)){if(!(o.optional||t.has(i)))throw new d(y(`Missing required key '${i}' on context for '${r}' event.`));if(!o.manyAllowed&&(t.get(i)??0)>1)throw new d(y(`${t.get(i)} context entries with key '${i}' found for the '${r}' event when schema only allows for 1.`))}}function Yr(r,e,t,n){if(!(r&&typeof r=="string"))throw new d(y("Must provide a topic."));if(!Jr[e])throw new d(y(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(Jr).join(", ")}`));if(typeof t!="object")throw new d(y("context must be a context object or array of context objects."));if(Kr.includes(e)&&!n)throw new d(y(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(t)?t:[t];return fa(e,i),{timestamp:new Date().toISOString(),id:we(),event:{"hub.topic":r,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var Bt=class extends K{constructor(e){if(super(),this.subRequest=e,!e.endpoint)throw new d(y("Subscription request should contain an endpoint."));if(!Wt(e))throw new d(y("Subscription request failed validation."));let t=new WebSocket(e.endpoint);t.addEventListener("open",()=>{this.dispatchEvent({type:"connect"}),t.addEventListener("message",n=>{let i=JSON.parse(n.data);if(i["hub.topic"])return;let o=i;o.event["hub.event"]!=="heartbeat"&&(this.dispatchEvent({type:"message",payload:o}),t.send(JSON.stringify({id:i?.id,timestamp:new Date().toISOString()})))}),t.addEventListener("close",()=>{this.dispatchEvent({type:"disconnect"})})}),this.websocket=t}disconnect(){this.websocket.close()}};function ha(r){return JSON.parse(wi(r))}function Di(r){return r.split(".").length===3}function qt(r){let[e,t,n]=r.split(".");return ha(t)}function Mi(r){try{return typeof qt(r).login_id=="string"}catch{return!1}}function _i(r){try{let t=qt(r).exp;return typeof t=="number"?t*1e3:void 0}catch{return}}var jt=class{constructor(e){this.medplum=e}async get(e){return this.medplum.get(`keyvalue/v1/${e}`)}async set(e,t){await this.medplum.put(`keyvalue/v1/${e}`,t,A.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var Li;Li=Symbol.toStringTag;var M=class{constructor(e){this[Li]="ReadablePromise";this.status="pending";this.suspender=e.then(t=>(this.status="success",this.response=t,t),t=>{throw this.status="error",this.error=t,t})}isPending(){return this.status==="pending"}isOk(){return this.status==="success"}read(){switch(this.status){case"pending":throw this.suspender;case"error":throw this.error;default:return this.response}}then(e,t){return this.suspender.then(e,t)}catch(e){return this.suspender.catch(e)}finally(e){return this.suspender.finally(e)}};var et=class{constructor(e){this.storage=e??(typeof localStorage<"u"?localStorage:new Zr)}clear(){this.storage.clear()}getString(e){return this.storage.getItem(e)??void 0}setString(e,t){t?this.storage.setItem(e,t):this.storage.removeItem(e)}getObject(e){let t=this.getString(e);return t?JSON.parse(t):void 0}setObject(e,t){this.setString(e,t?Tt(t):void 0)}},Zr=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]}},Fi=class extends et{constructor(){super();this.initResolve=()=>{};this.initialized=!1,this.initPromise=new Promise(t=>{this.initResolve=t})}setInitialized(){this.initialized||(this.initResolve(),this.initialized=!0)}getInitPromise(){return this.initPromise}get isInitialized(){return this.initialized}};var Ue={Event:typeof globalThis.Event<"u"?globalThis.Event:void 0,ErrorEvent:void 0,CloseEvent:void 0},Ni=!1;function ma(){if(typeof globalThis.Event>"u")throw new Error("Unable to lazy init events for ReconnectingWebSocket. globalThis.Event is not defined yet");Ue.Event=globalThis.Event,Ue.ErrorEvent=class extends Event{constructor(e,t){super("error",t),this.message=e.message,this.error=e}},Ue.CloseEvent=class extends Event{constructor(t=1e3,n="",i){super("close",i);this.wasClean=!0;this.code=t,this.reason=n}}}function ya(r,e){if(!r)throw new Error(e)}function $t(r){return new r.constructor(r.type,r)}var Ae={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},Ui=!1,Gt=class r extends K{constructor(t,n,i={}){Ni||(ma(),Ni=!0);super();this._retryCount=-1;this._shouldReconnect=!0;this._connectLock=!1;this._closeCalled=!1;this._messageQueue=[];this._debugLogger=console.log.bind(console);this.onclose=null;this.onerror=null;this.onmessage=null;this.onopen=null;this._handleOpen=t=>{this._debug("open event");let{minUptime:n=Ae.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),n),ya(this._ws,"WebSocket is not defined"),this._ws.binaryType=this._binaryType,this._messageQueue.forEach(i=>this._ws?.send(i)),this._messageQueue=[],this.onopen&&this.onopen(t),this.dispatchEvent($t(t))};this._handleMessage=t=>{this._debug("message event"),this.onmessage&&this.onmessage(t),this.dispatchEvent($t(t))};this._handleError=t=>{this._debug("error event",t.message),this._disconnect(void 0,t.message==="TIMEOUT"?"timeout":void 0),this.onerror&&this.onerror(t),this._debug("exec error listeners"),this.dispatchEvent($t(t)),this._connect()};this._handleClose=t=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(t),this.dispatchEvent($t(t))};this._url=t,this._protocols=n,this._options=i,this._options.startClosed&&(this._shouldReconnect=!1),this._options.binaryType?this._binaryType=this._options.binaryType:this._binaryType="blob",this._options.debugLogger&&(this._debugLogger=this._options.debugLogger),this._connect()}static get CONNECTING(){return 0}static get OPEN(){return 1}static get CLOSING(){return 2}static get CLOSED(){return 3}get CONNECTING(){return r.CONNECTING}get OPEN(){return r.OPEN}get CLOSING(){return r.CLOSING}get CLOSED(){return r.CLOSED}get binaryType(){return this._ws?this._ws.binaryType:this._binaryType}set binaryType(t){this._binaryType=t,this._ws&&(this._ws.binaryType=t)}get retryCount(){return Math.max(this._retryCount,0)}get bufferedAmount(){return this._messageQueue.reduce((n,i)=>(typeof i=="string"?n+=i.length:i instanceof Blob?n+=i.size:n+=i.byteLength,n),0)+(this._ws?.bufferedAmount??0)}get extensions(){return this._ws?.extensions??""}get protocol(){return this._ws?.protocol??""}get readyState(){return this._ws?this._ws.readyState:this._options.startClosed?r.CLOSED:r.CONNECTING}get url(){return this._ws?this._ws.url:""}get shouldReconnect(){return this._shouldReconnect}close(t=1e3,n){if(this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),!this._ws){this._debug("close enqueued: no ws instance");return}if(this._ws.readyState===this.CLOSED){this._debug("close: already closed");return}this._ws.close(t,n)}reconnect(t,n){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED?this._connect():(this._disconnect(t,n),this._connect())}send(t){if(this._ws&&this._ws.readyState===this.OPEN)this._debug("send",t),this._ws.send(t);else{let{maxEnqueuedMessages:n=Ae.maxEnqueuedMessages}=this._options;this._messageQueue.length<n&&(this._debug("enqueue",t),this._messageQueue.push(t))}}_debug(...t){this._options.debug&&this._debugLogger("RWS>",...t)}_getNextDelay(){let{reconnectionDelayGrowFactor:t=Ae.reconnectionDelayGrowFactor,minReconnectionDelay:n=Ae.minReconnectionDelay,maxReconnectionDelay:i=Ae.maxReconnectionDelay}=this._options,o=0;return this._retryCount>0&&(o=n*Math.pow(t,this._retryCount-1),o>i&&(o=i)),this._debug("next delay",o),o}_wait(){return new Promise(t=>{setTimeout(t,this._getNextDelay())})}_connect(){if(this._connectLock||!this._shouldReconnect)return;this._connectLock=!0;let{maxRetries:t=Ae.maxRetries,connectionTimeout:n=Ae.connectionTimeout}=this._options;if(this._retryCount>=t){this._debug("max retries reached",this._retryCount,">=",t);return}this._retryCount++,this._debug("connect",this._retryCount),this._removeListeners(),this._wait().then(()=>{if(this._closeCalled){this._connectLock=!1;return}!this._options.WebSocket&&typeof WebSocket>"u"&&!Ui&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),Ui=!0);let i=this._options.WebSocket||WebSocket;this._debug("connect",{url:this._url,protocols:this._protocols}),this._ws=this._protocols?new i(this._url,this._protocols):new i(this._url),this._ws.binaryType=this._binaryType,this._connectLock=!1,this._addListeners(),this._connectTimeout=setTimeout(()=>this._handleTimeout(),n)}).catch(i=>{this._connectLock=!1,this._handleError(new Ue.ErrorEvent(Error(i.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new Ue.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(t=1e3,n){if(this._clearTimeouts(),!!this._ws){this._removeListeners();try{this._ws.close(t,n),this._handleClose(new Ue.CloseEvent(t,n,this))}catch{}}}_acceptOpen(){this._debug("accept open"),this._retryCount=0}_removeListeners(){this._ws&&(this._debug("removeListeners"),this._ws.removeEventListener("open",this._handleOpen),this._ws.removeEventListener("close",this._handleClose),this._ws.removeEventListener("message",this._handleMessage),this._ws.removeEventListener("error",this._handleError))}_addListeners(){this._ws&&(this._debug("addListeners"),this._ws.addEventListener("open",this._handleOpen),this._ws.addEventListener("close",this._handleClose),this._ws.addEventListener("message",this._handleMessage),this._ws.addEventListener("error",this._handleError))}_clearTimeouts(){clearTimeout(this._connectTimeout),clearTimeout(this._uptimeTimeout)}};var ga=5e3,tt=class extends K{constructor(...e){super(),this.criteria=new Set(e)}getCriteria(){return this.criteria}_addCriteria(e){this.criteria.add(e)}_removeCriteria(e){this.criteria.delete(e)}},en=class{constructor(e,t){this.connecting=!1;this.criteria=e,this.emitter=new tt(e),this.refCount=1,this.subscriptionProps=t?{...t}:void 0}clearAttachedSubscription(){this.subscriptionId=void 0,this.token=void 0}},Ht=class{constructor(e,t,n){this.pingTimer=void 0;this.waitingForPong=!1;if(!(e instanceof Qt))throw new d(y("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(t).toString()}catch{throw new d(y("Not a valid URL"))}let o=n?.ReconnectingWebSocket?new n.ReconnectingWebSocket(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger}):new Gt(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger});this.medplum=e,this.ws=o,this.masterSubEmitter=new tt,this.criteriaEntries=new Map,this.criteriaEntriesBySubscriptionId=new Map,this.wsClosed=!1,this.pingIntervalMs=n?.pingIntervalMs??ga,this.currentProfile=e.getProfile(),this.setupListeners()}setupListeners(){let e=this.ws;e.addEventListener("message",t=>{try{let n=JSON.parse(t.data);if(n.type==="pong"){this.waitingForPong=!1;return}let i=n,o=i?.entry?.[0]?.resource;if(o.type==="heartbeat"){this.masterSubEmitter?.dispatchEvent({type:"heartbeat",payload:i});return}if(o.type==="handshake"){let a=xe(o.subscription),c={type:"connect",payload:{subscriptionId:a}};this.masterSubEmitter?.dispatchEvent(c);let u=this.criteriaEntriesBySubscriptionId.get(a);if(!u){console.warn("Received handshake for criteria the SubscriptionManager is not listening for yet");return}u.connecting=!1,u.emitter.dispatchEvent({...c});return}this.masterSubEmitter?.dispatchEvent({type:"message",payload:i});let s=this.criteriaEntriesBySubscriptionId.get(xe(o.subscription));if(!s){console.warn("Received notification for criteria the SubscriptionManager is not listening for");return}s.emitter.dispatchEvent({type:"message",payload:i})}catch(n){console.error(n);let i={type:"error",payload:n};this.masterSubEmitter?.dispatchEvent(i);for(let o of this.getAllCriteriaEmitters())o.dispatchEvent({...i})}}),e.addEventListener("error",()=>{let t={type:"error",payload:new d(Rn(new Error("WebSocket error")))};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t})}),e.addEventListener("close",()=>{let t={type:"close"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=void 0,this.waitingForPong=!1),this.wsClosed&&(this.criteriaEntries.clear(),this.criteriaEntriesBySubscriptionId.clear(),this.masterSubEmitter?.removeAllListeners())}),e.addEventListener("open",()=>{let t={type:"open"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.refreshAllSubscriptions().catch(console.error),this.pingTimer||(this.pingTimer=setInterval(()=>{if(this.waitingForPong){this.waitingForPong=!1,e.reconnect();return}e.send(JSON.stringify({type:"ping"})),this.waitingForPong=!0},this.pingIntervalMs))}),this.medplum.addEventListener("change",()=>{let t=this.medplum.getProfile();this.currentProfile&&t===void 0?this.ws.close():t&&this.currentProfile?.id!==t.id&&this.ws.reconnect(),this.currentProfile=t})}emitError(e,t){let n={type:"error",payload:t};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}maybeEmitDisconnect(e){let{subscriptionId:t}=e;if(t){let n={type:"disconnect",payload:{subscriptionId:t}};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}else console.warn("Called disconnect for `CriteriaEntry` before `subscriptionId` was present.")}async getTokenForCriteria(e){let t=e?.subscriptionId;t||(t=(await this.medplum.createResource({...e.subscriptionProps,resourceType:"Subscription",status:"active",reason:`WebSocket subscription for ${D(this.medplum.getProfile())}`,channel:{type:"websocket"},criteria:e.criteria})).id);let{parameter:n}=await this.medplum.get(`fhir/R4/Subscription/${t}/$get-ws-binding-token`),i=n?.find(s=>s.name==="token")?.valueString,o=n?.find(s=>s.name==="websocket-url")?.valueUrl;if(!i)throw new d(y("Failed to get token"));if(!o)throw new d(y("Failed to get URL from $get-ws-binding-token"));return[t,i]}maybeGetCriteriaEntry(e,t){let n=this.criteriaEntries.get(e);if(n){if(!t)return n.bareCriteria;for(let i of n.criteriaWithProps)if(se(t,i.subscriptionProps))return i}}getAllCriteriaEmitters(){let e=[];for(let t of this.criteriaEntries.values()){t.bareCriteria&&e.push(t.bareCriteria.emitter);for(let n of t.criteriaWithProps)e.push(n.emitter)}return e}addCriteriaEntry(e){let{criteria:t,subscriptionProps:n}=e,i;this.criteriaEntries.has(t)?i=this.criteriaEntries.get(t):(i={criteriaWithProps:[]},this.criteriaEntries.set(t,i)),n?i.criteriaWithProps.push(e):i.bareCriteria=e}removeCriteriaEntry(e){let{criteria:t,subscriptionProps:n,subscriptionId:i,token:o}=e;if(!this.criteriaEntries.has(t))return;let s=this.criteriaEntries.get(t);n?s.criteriaWithProps=s.criteriaWithProps.filter(a=>{let c=a.subscriptionProps;return!se(n,c)}):s.bareCriteria=void 0,!s.bareCriteria&&s.criteriaWithProps.length===0&&(this.criteriaEntries.delete(t),this.masterSubEmitter?._removeCriteria(t)),i&&this.criteriaEntriesBySubscriptionId.delete(i),o&&this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"unbind-from-token",payload:{token:o}}))}async subscribeToCriteria(e){if(!(this.ws.readyState!==WebSocket.OPEN||e.connecting)){e.connecting=!0;try{let[t,n]=await this.getTokenForCriteria(e);e.subscriptionId=t,e.token=n,this.criteriaEntriesBySubscriptionId.set(t,e),this.ws.send(JSON.stringify({type:"bind-with-token",payload:{token:n}}))}catch(t){console.error(Ve(t)),this.emitError(e,t),this.removeCriteriaEntry(e)}}}async refreshAllSubscriptions(){this.criteriaEntriesBySubscriptionId.clear();for(let e of this.criteriaEntries.values())for(let t of[...e.bareCriteria?[e.bareCriteria]:[],...e.criteriaWithProps])t.clearAttachedSubscription(),await this.subscribeToCriteria(t)}addCriteria(e,t){this.masterSubEmitter&&this.masterSubEmitter._addCriteria(e);let n=this.maybeGetCriteriaEntry(e,t);if(n)return n.refCount+=1,n.emitter;let i=new en(e,t);return this.addCriteriaEntry(i),this.subscribeToCriteria(i).catch(console.error),i.emitter}removeCriteria(e,t){let n=this.maybeGetCriteriaEntry(e,t);if(!n){console.warn("Criteria not known to `SubscriptionManager`. Possibly called remove too many times.");return}n.refCount-=1,!(n.refCount>0)&&(this.maybeEmitDisconnect(n),this.removeCriteriaEntry(n))}getWebSocket(){return this.ws}closeWebSocket(){this.wsClosed||(this.wsClosed=!0,this.ws.close())}reconnectWebSocket(){this.ws.reconnect(),this.wsClosed=!1}getCriteriaCount(){return this.getAllCriteriaEmitters().length}getMasterEmitter(){return this.masterSubEmitter||(this.masterSubEmitter=new tt(...Array.from(this.criteriaEntries.keys()))),this.masterSubEmitter}};async function Dd({resource:r,subscription:e,context:t,getPreviousResource:n,logger:i}){if(!xa(e,i))return i?.debug("Ignore subscription without recognized channel type"),!1;let o=e.criteria;if(!o)return i?.debug("Ignore rest hook missing criteria"),!1;let s=Ye(o);if(r.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${r.resourceType}")`),!1;if(!await va(e,r,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let c=oe(e,"https://medplum.com/fhir/StructureDefinition/subscription-supported-interaction");return c&&c.valueCode!==t.interaction?(i?.debug(`Ignore rest hook for different interaction (wanted "${c.valueCode}", received "${t.interaction}")`),!1):Ft(r,s)?e.meta?.account&&r.meta?.account?.reference!==e.meta.account.reference?(i?.warn("Subscription suppressed due to mismatched meta.account",{subscriptionId:e.id,resourceId:r.id}),!1):!0:!1}function xa(r,e){let t=r.channel?.type;return t==="rest-hook"?r.channel?.endpoint?!0:(e?.debug("Ignore rest-hook missing URL"),!1):t==="websocket"}async function va(r,e,t){let n=oe(r,"https://medplum.com/fhir/StructureDefinition/fhir-path-criteria-expression");if(!n?.valueString)return!0;let i=await t(e),o={"%current":v(e),"%previous":v(i??{})};return E(n.valueString,[v(e)],o)?.[0]?.value===!0}var tn="4.5.1-199a27ba6",Xd="medplum-cli",Ta=A.FHIR_JSON+", */*; q=0.1",Sa="https://api.medplum.com/",ba=1e3,Ea=6e4,Ra=0,Ca=3e5,Pa="Binary/",Bi={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},Be={ClientCredentials:"client_credentials",AuthorizationCode:"authorization_code",RefreshToken:"refresh_token",JwtBearer:"urn:ietf:params:oauth:grant-type:jwt-bearer",TokenExchange:"urn:ietf:params:oauth:grant-type:token-exchange"},wa={AccessToken:"urn:ietf:params:oauth:token-type:access_token",RefreshToken:"urn:ietf:params:oauth:token-type:refresh_token",IdToken:"urn:ietf:params:oauth:token-type:id_token",Saml1Token:"urn:ietf:params:oauth:token-type:saml1",Saml2Token:"urn:ietf:params:oauth:token-type:saml2"},Yd={ClientSecretBasic:"client_secret_basic",ClientSecretPost:"client_secret_post",ClientSecretJwt:"client_secret_jwt",PrivateKeyJwt:"private_key_jwt",None:"none"},Aa={JwtBearer:"urn:ietf:params:oauth:client-assertion-type:jwt-bearer"},Qt=class extends K{constructor(t){super();this.initComplete=!0;if(t?.baseUrl&&!t.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");this.options=t??{},this.fetch=t?.fetch??Oa(),this.storage=t?.storage??new et,this.createPdfImpl=t?.createPdf,this.baseUrl=Wr(t?.baseUrl??Sa),this.fhirBaseUrl=j(this.baseUrl,t?.fhirUrlPath??"fhir/R4"),this.authorizeUrl=j(this.baseUrl,t?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=j(this.baseUrl,t?.tokenUrl??"oauth2/token"),this.logoutUrl=j(this.baseUrl,t?.logoutUrl??"oauth2/logout"),this.fhircastHubUrl=j(this.baseUrl,t?.fhircastHubUrl??"fhircast/STU3"),this.clientId=t?.clientId??"",this.clientSecret=t?.clientSecret??"",this.credentialsInHeader=t?.authCredentialsMethod==="header",this.defaultHeaders=t?.defaultHeaders??{},this.onUnauthenticated=t?.onUnauthenticated,this.refreshGracePeriod=t?.refreshGracePeriod??Ca,this.cacheTime=t?.cacheTime??(B()?Ea:Ra),this.cacheTime>0?this.requestCache=new Ie(t?.resourceCacheSize??ba):this.requestCache=void 0,t?.autoBatchTime?(this.autoBatchTime=t.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0),t?.accessToken&&this.setAccessToken(t.accessToken),this.storage.getInitPromise===void 0?(t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initPromise=Promise.resolve(),this.dispatchEvent({type:"storageInitialized"})):(this.initComplete=!1,this.initPromise=this.storage.getInitPromise(),this.initPromise.then(()=>{t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initComplete=!0,this.dispatchEvent({type:"storageInitialized"})}).catch(n=>{console.error(n),this.initComplete=!0,this.dispatchEvent({type:"storageInitFailed",payload:{error:n}})})),this.setupStorageListener()}get isInitialized(){return this.initComplete}getInitPromise(){return this.initPromise}async attemptResumeActiveLogin(){let t=this.getActiveLogin();t&&(this.setAccessToken(t.accessToken,t.refreshToken),await this.refreshProfile())}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}getFhircastHubUrl(){return this.fhircastHubUrl}getDefaultHeaders(){return this.defaultHeaders}clear(){this.storage.clear(),B()&&sessionStorage.clear(),this.clearActiveLogin()}clearActiveLogin(){this.storage.setString("activeLogin",void 0),this.requestCache?.clear(),this.accessToken=void 0,this.refreshToken=void 0,this.refreshPromise=void 0,this.accessTokenExpires=void 0,this.sessionDetails=void 0,this.medplumServer=void 0,this.dispatchEvent({type:"change"})}invalidateUrl(t){t=t.toString(),this.requestCache?.delete(t)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(t){let n=j(this.fhirBaseUrl,t);if(this.requestCache)for(let i of this.requestCache.keys())(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache.delete(i)}get(t,n={}){t=t.toString();let i=this.getCacheEntry(t,n);if(i)return i.value;let o;t.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue&&!n.disableAutoBatch?o=new Promise((a,c)=>{this.autoBatchQueue.push({method:"GET",url:t.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:c}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):o=this.request("GET",t,n);let s=new M(o);return this.setCacheEntry(t,s),s}post(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("POST",t,o)}put(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("PUT",t,o)}patch(t,n,i={}){return t=t.toString(),this.setRequestBody(i,n),this.setRequestContentType(i,A.JSON_PATCH),this.invalidateUrl(t),this.request("PATCH",t,i)}delete(t,n){return t=t.toString(),this.invalidateUrl(t),this.request("DELETE",t,n)}async startNewUser(t,n){let{codeChallengeMethod:i,codeChallenge:o}=await this.startPkce();return this.post("auth/newuser",{...t,clientId:t.clientId??this.clientId,codeChallengeMethod:i,codeChallenge:o},void 0,n)}async startNewProject(t,n){return this.post("auth/newproject",t,void 0,n)}async startNewPatient(t,n){return this.post("auth/newpatient",t,void 0,n)}async startLogin(t,n){return this.post("auth/login",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async startGoogleLogin(t,n){return this.post("auth/google",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async ensureCodeChallenge(t){return t.codeChallenge?t:{...t,...await this.startPkce()}}async signOut(){await this.post(this.logoutUrl,{}),this.clear()}async signInWithRedirect(t){let i=new URLSearchParams(te.getSearch()).get("code");if(!i){await this.requestAuthorization(t);return}return this.processCode(i)}signOutWithRedirect(){te.assign(this.logoutUrl)}async signInWithExternalAuth(t,n,i,o,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),te.assign(this.getExternalAuthRedirectUri(t,n,i,a,s))}async exchangeExternalAccessToken(t,n){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");return this.fetchTokens({grant_type:Be.TokenExchange,subject_token_type:wa.AccessToken,client_id:n,subject_token:t})}getExternalAuthRedirectUri(t,n,i,o,s=!0){let a=new URL(t);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",n),a.searchParams.set("redirect_uri",i),a.searchParams.set("scope",o.scope??"openid profile email"),a.searchParams.set("state",JSON.stringify(o)),s){let{codeChallenge:c,codeChallengeMethod:u}=o;if(!u)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!c)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");a.searchParams.set("code_challenge_method",u),a.searchParams.set("code_challenge",c)}return a.toString()}fhirUrl(...t){return new URL(j(this.fhirBaseUrl,t.join("/")))}fhirSearchUrl(t,n){let i=this.fhirUrl(t);return n&&(i.search=ci(n)),i}search(t,n,i){let o=this.fhirSearchUrl(t,n),s="search-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=this.getBundle(o,i);return this.setCacheEntry(s,c),c}searchOne(t,n,i){let o=this.fhirSearchUrl(t,n);o.searchParams.set("_count","1"),o.searchParams.sort();let s="searchOne-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=new M(this.search(t,o.searchParams,i).then(u=>u.entry?.[0]?.resource));return this.setCacheEntry(s,c),c}searchResources(t,n,i){let s="searchResources-"+this.fhirSearchUrl(t,n).toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=new M(this.search(t,n,i).then(qi));return this.setCacheEntry(s,c),c}async*searchResourcePages(t,n,i){let o=this.fhirSearchUrl(t,n);for(;o;){let s=new URL(o).searchParams;s.has("_count")||s.set("_count","1000");let a=await this.search(t,s,i),c=a.link?.find(u=>u.relation==="next");if(!a.entry?.length&&!c)break;yield qi(a),o=c?.url?new URL(c.url):void 0}}valueSetExpand(t,n){let i=this.fhirUrl("ValueSet","$expand");return i.search=new URLSearchParams(t).toString(),this.get(i.toString(),n)}getCached(t,n){let i=this.requestCache?.get(this.fhirUrl(t,n).toString())?.value;return i?.isOk()?i.read():void 0}getCachedReference(t){let n=t.reference;if(!n)return;if(n==="system")return Bi;let[i,o]=n.split("/");if(!(!i||!o))return this.getCached(i,o)}readResource(t,n,i){if(!n)throw new Error('The "id" parameter cannot be null, undefined, or an empty string.');return this.get(this.fhirUrl(t,n),i)}readReference(t,n){let i=t.reference;if(!i)return new M(Promise.reject(new Error("Missing reference")));if(i==="system")return new M(Promise.resolve(Bi));let[o,s]=i.split("/");return!o||!s?new M(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}requestSchema(t){if(Ln(t))return Promise.resolve();let n=t+"-requestSchema",i=this.getCacheEntry(n,void 0);if(i)return i.value;let o=new M((async()=>{let s=`{
5
5
  StructureDefinitionList(_filter: "name eq ${t}") {
6
6
  resourceType,
7
7
  name,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@medplum/core",
3
- "version": "4.5.0",
3
+ "version": "4.5.1",
4
4
  "description": "Medplum TS/JS Library",
5
5
  "keywords": [
6
6
  "medplum",
@@ -57,8 +57,8 @@
57
57
  "test": "jest"
58
58
  },
59
59
  "devDependencies": {
60
- "@medplum/definitions": "4.5.0",
61
- "@medplum/fhirtypes": "4.5.0",
60
+ "@medplum/definitions": "4.5.1",
61
+ "@medplum/fhirtypes": "4.5.1",
62
62
  "jest-websocket-mock": "2.5.0"
63
63
  },
64
64
  "peerDependencies": {