@medplum/core 5.1.34 → 5.1.36

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 br=Object.defineProperty;var za=Object.getOwnPropertyDescriptor;var Ja=Object.getOwnPropertyNames;var Ka=Object.prototype.hasOwnProperty;var Ya=(t,e,r)=>e in t?br(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var Xa=(t,e)=>{for(var r in e)br(t,r,{get:e[r],enumerable:!0})},Za=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ja(e))!Ka.call(t,i)&&i!==r&&br(t,i,{get:()=>e[i],enumerable:!(n=za(e,i))||n.enumerable});return t};var ec=t=>Za(br({},"__esModule",{value:!0}),t);var c=(t,e,r)=>Ya(t,typeof e!="symbol"?e+"":e,r);var hm={};Xa(hm,{AccessPolicyInteraction:()=>Ne,AckCode:()=>Ta,AndAtom:()=>zt,ArithmeticOperatorAtom:()=>q,AsAtom:()=>Ce,CPT:()=>ic,ClientStorage:()=>yt,ConcatAtom:()=>qt,ContainsAtom:()=>Wt,ContentType:()=>V,DAYS_OF_WEEK:()=>La,DEFAULT_ACCEPT:()=>js,DEFAULT_MAX_SEARCH_COUNT:()=>Vl,DEFAULT_SEARCH_COUNT:()=>Dl,DataSampler:()=>an,DotAtom:()=>ne,EMPTY:()=>v,EmptySetAtom:()=>Ut,EqualsAtom:()=>jt,EquivalentAtom:()=>Gt,EventTarget:()=>Xr,ExternalSecretSystems:()=>zd,FHIRCAST_EVENT_NAMES:()=>en,FHIRCAST_EVENT_RESOURCES:()=>Ns,FHIRCAST_EVENT_VERSION_REQUIRED:()=>tn,FHIRCAST_RESOURCE_TYPES:()=>Ls,FhirFilterComparison:()=>yr,FhirFilterConnective:()=>vr,FhirFilterNegation:()=>xr,FhirPathAtom:()=>Re,FhircastConnection:()=>ir,FileBuilder:()=>to,FunctionAtom:()=>ie,HL7_V2_0203:()=>wn,HTTP_HL7_ORG:()=>Et,HTTP_TERMINOLOGY_HL7_ORG:()=>To,Hl7Context:()=>Ae,Hl7Field:()=>he,Hl7Message:()=>no,Hl7Segment:()=>Tt,ICD10:()=>oc,INVALID_MEDICATION_CART_RESPONSE:()=>Ma,INVALID_MEDICATION_CHECKOUT_RESPONSE:()=>Ia,INVALID_MEDICATION_ORDER_RESPONSE:()=>Ra,INVALID_MEDICATION_ORDER_SET_RESPONSE:()=>Ca,INVALID_MEDICATION_SEARCH_RESPONSE:()=>rf,ImpliesAtom:()=>Yt,InAtom:()=>$t,IndexerAtom:()=>Le,InfixOperatorAtom:()=>w,InvalidOperationError:()=>gn,IsAtom:()=>_e,LOINC:()=>tc,LRUCache:()=>ee,LiteralAtom:()=>G,LogLevel:()=>it,LogLevelNames:()=>Ea,Logger:()=>io,MEDICATION_REQUEST_STATUS_REASON_RESPONSE_NOT_RECEIVED:()=>wa,MEDICATION_REQUEST_STATUS_REASON_SYSTEM:()=>Pa,MEDPLUM_CLI_CLIENT_ID:()=>Vd,MEDPLUM_RELEASES_URL:()=>$a,MEDPLUM_SEMVER_REGEX:()=>yo,MEDPLUM_VERSION:()=>sn,MRN_IDENTIFIER_TYPE:()=>du,MedplumClient:()=>lr,MedplumKeyValueClient:()=>ar,MemoryStorage:()=>on,MissingError:()=>z,MockAsyncClientStorage:()=>_i,NDC:()=>sc,NOOP:()=>zu,NotEqualsAtom:()=>Ht,NotEquivalentAtom:()=>Qt,OAuthClientAssertionType:()=>Gs,OAuthGrantType:()=>tt,OAuthSigningAlgorithm:()=>$d,OAuthTokenAuthMethod:()=>Wd,OAuthTokenType:()=>Hs,OperationOutcomeError:()=>m,Operator:()=>g,OperatorPrecedence:()=>S,OrAtom:()=>Jt,PATIENT_PREFERRED_PHARMACY_URL:()=>Sn,PHARMACY_PREFERENCE_TYPE_SYSTEM:()=>ao,PHARMACY_TYPE_PREFERRED:()=>co,PHARMACY_TYPE_PRIMARY:()=>Tn,Parser:()=>Er,ParserBuilder:()=>bt,Pointer:()=>M,PrefixOperatorAtom:()=>St,PropertyType:()=>p,RATE_LIMIT_RESET_EXTENSION_URL:()=>Rr,RXNORM:()=>nc,ReadablePromise:()=>$,ReconnectingWebSocket:()=>et,ReturnAckCategory:()=>dd,SNOMED:()=>rc,SchedulingEncounterCodingURI:()=>If,SchedulingParametersURI:()=>Sr,SchedulingPlanDefinitionURI:()=>kf,SchedulingScheduleColorURI:()=>Mf,SearchParameterType:()=>ge,ServiceTypeReferenceURI:()=>bn,SubscriptionEmitter:()=>xt,SubscriptionManager:()=>ur,SymbolAtom:()=>F,TestError:()=>hn,TimezoneExtensionURI:()=>_a,Tokenizer:()=>Pe,TransformMapCollection:()=>pn,TypedEventTarget:()=>se,UCUM:()=>Pn,UnaryOperatorAtom:()=>Bt,UnionAtom:()=>Ve,VALID_HOSTNAME_REGEX:()=>is,XorAtom:()=>Kt,accepted:()=>vc,accessPolicySupportsInteraction:()=>Pi,add:()=>hr,addPreferredPharmacyToPatient:()=>Pf,addProfileToResource:()=>Uu,allOk:()=>ac,append:()=>ve,apply:()=>Yi,applyDefaultValuesToElement:()=>op,applyDefaultValuesToResource:()=>ip,applyFixedOrPatternValue:()=>pr,applyPatch:()=>Fp,arrayBufferToBase64:()=>ci,arrayBufferToHex:()=>ai,arrayify:()=>te,assert:()=>Vs,assertContextVersionOptional:()=>Ii,assertNever:()=>Qu,assertOk:()=>Vc,assertReleaseManifest:()=>ja,assertValidMedplumSemver:()=>Ga,badRequest:()=>A,booleanToTypedValue:()=>y,buildCdsRequest:()=>vd,buildElementsContext:()=>un,buildMedicationRequestResponseLostStatusReason:()=>nf,buildTypeName:()=>ps,businessRule:()=>Cc,calculateAge:()=>Mt,calculateAgeString:()=>cu,canReadResourceType:()=>ad,canWriteResource:()=>ud,canWriteResourceType:()=>cd,capitalize:()=>U,checkForNull:()=>uo,checkIfValidMedplumVersion:()=>dm,clearReleaseCache:()=>lm,clearScheduleParameter:()=>Ba,codeableConceptMatchesToken:()=>Ru,codingMatchesToken:()=>Ko,compareVersions:()=>Qa,compressElement:()=>Lc,concatUrls:()=>W,conceptMapTranslate:()=>$i,conflict:()=>Tc,contentTooLarge:()=>fc,convertContainedResourcesToBundle:()=>yd,convertToSearchableDates:()=>vi,convertToSearchableNumbers:()=>Pl,convertToSearchableQuantities:()=>wl,convertToSearchableReferences:()=>Si,convertToSearchableStrings:()=>Ti,convertToSearchableTokens:()=>bi,convertToSearchableUris:()=>Al,convertToTransactionBundle:()=>As,copy:()=>fa,countBy:()=>Hu,countWhere:()=>ju,crawlTypedValue:()=>Lr,crawlTypedValueAsync:()=>jc,createConstraintIssue:()=>Nn,createFhircastMessagePayload:()=>nn,createOperationOutcomeIssue:()=>ke,createPatch:()=>Bp,createPreferredPharmacyExtension:()=>Va,createProcessingIssue:()=>Fn,createReference:()=>re,createStructureIssue:()=>R,createTests:()=>qp,created:()=>cc,decodeBase64:()=>ws,decodeBase64Url:()=>nr,deepClone:()=>le,deepEquals:()=>xe,deepIncludes:()=>at,deriveIdentifierSearchParameter:()=>Gf,diffAny:()=>we,diffArrays:()=>ca,diffObjects:()=>ua,encodeBase64:()=>rr,encodeBase64Url:()=>wi,encodeSmartHealthLink:()=>rm,encryptSHA256:()=>Ai,ensureNoLeadingSlash:()=>ns,ensureTrailingSlash:()=>lt,escapeHtml:()=>Gu,escapeToken:()=>da,evalFhirPath:()=>Cl,evalFhirPathTyped:()=>k,evalSqlOnFhir:()=>om,expandSampledData:()=>Fi,expandSampledObservation:()=>Xd,extractAccountReferences:()=>jr,extractServiceTypeReferences:()=>Bf,fetchAllVersionStrings:()=>fm,fetchLatestVersionString:()=>pm,fetchVersionManifest:()=>Cn,fhirPathArrayEquals:()=>ei,fhirPathArrayEquivalent:()=>qr,fhirPathArrayNotEquals:()=>ti,fhirPathEquals:()=>ct,fhirPathEquivalent:()=>jo,fhirPathIs:()=>Qe,fhirPathNot:()=>Zn,fhirTypeToJsType:()=>Fr,fhirpathPatchTypedValue:()=>jp,findCodeBySystem:()=>Eu,findObservationInterval:()=>wu,findObservationReferenceRange:()=>Au,findObservationReferenceRanges:()=>Zo,findResourceByCode:()=>Lu,findResourceInBundle:()=>xd,flatMapFilter:()=>Wu,forbidden:()=>lc,formatAddress:()=>ss,formatCodeableConcept:()=>Te,formatCoding:()=>hi,formatDate:()=>Yu,formatDateTime:()=>ze,formatFamilyName:()=>Ku,formatGivenName:()=>Ju,formatHl7DateTime:()=>ba,formatHumanName:()=>dt,formatMoney:()=>sl,formatObservationValue:()=>cs,formatPeriod:()=>Zu,formatQuantity:()=>be,formatRange:()=>ol,formatReferenceString:()=>os,formatSearchQuery:()=>jl,formatTime:()=>Xu,formatTiming:()=>nl,formatWallTime:()=>as,generateId:()=>oe,getAllDataTypes:()=>$n,getAllQuestionnaireAnswers:()=>lu,getBuffer:()=>Kr,getCodeBySystem:()=>$r,getDataType:()=>ye,getDateProperty:()=>au,getDefaultValuesForNewSliceEntry:()=>sp,getDisplayString:()=>Qo,getElementDefinition:()=>kt,getElementDefinitionForPath:()=>yi,getElementDefinitionFromElements:()=>gi,getElementDefinitionTypeName:()=>kr,getExpressionForResourceType:()=>Zf,getExpressionsForResourceType:()=>mo,getExtension:()=>ae,getExtensionValue:()=>De,getExtensions:()=>Dt,getIdentifier:()=>Hr,getIdentifierByType:()=>pu,getImageSrc:()=>su,getInnerDerivedIdentifierExpression:()=>lo,getMedicationOrderIframeUrl:()=>cf,getNestedProperty:()=>je,getOutcomeRedirectUrl:()=>Rc,getParsedDerivedIdentifierExpression:()=>po,getParsedExpressionForResourceType:()=>fo,getPathDifference:()=>Se,getPathDisplayName:()=>pl,getPendingMedicationOrderId:()=>sf,getPendingMedicationOrderStatus:()=>af,getPreferredPharmaciesFromPatient:()=>Cf,getPropertyDisplayName:()=>ms,getQueryString:()=>fi,getQuestionnaireAnswers:()=>uu,getRandomString:()=>Yr,getRateLimitReset:()=>xc,getReferenceString:()=>I,getResourceTypes:()=>fs,getScheduleParameters:()=>Ua,getSchedulingTimezone:()=>Nf,getSearchParameter:()=>dl,getSearchParameterDetails:()=>Qf,getSearchParameters:()=>ll,getSearchResourceTypes:()=>Jl,getSmartHealthLinkId:()=>im,getStatus:()=>Dc,getTypedPropertyValue:()=>_,getTypedPropertyValueWithPath:()=>Nr,getTypedPropertyValueWithSchema:()=>Wo,getTypedPropertyValueWithoutSchema:()=>$o,getValueSliceName:()=>Bi,getWebSocketUrl:()=>pi,getWindow:()=>fd,globalSchema:()=>H,gone:()=>dc,hasSchedulingParameters:()=>Vf,indexConceptMapCodings:()=>Ks,indexDefaultSearchParameters:()=>Qn,indexSearchParameter:()=>zr,indexSearchParameterBundle:()=>ul,indexStructureDefinitionBundle:()=>Dr,inflateBaseSchema:()=>Un,inflateElement:()=>ko,initFhirPathParserBuilder:()=>ft,intersection:()=>Vp,invalidSearchOperator:()=>zl,isAccepted:()=>wc,isAckCode:()=>Sa,isAddPharmacyResponse:()=>Of,isBrowserEnvironment:()=>X,isCodeableConcept:()=>Wr,isCoding:()=>It,isCompletedSubscriptionRequest:()=>ki,isComplexTypeCode:()=>Gr,isConflict:()=>Ic,isContextVersionRequired:()=>Oi,isCreated:()=>Pc,isDataTypeLoaded:()=>jn,isDateString:()=>ri,isDateTimeString:()=>Ge,isDayOfWeek:()=>Df,isDefined:()=>Lt,isDestructive:()=>Ji,isEmpty:()=>O,isError:()=>Or,isFhirCriteriaMet:()=>Bs,isFhircastResourceType:()=>Fs,isGone:()=>kc,isJwt:()=>Mi,isLowerCase:()=>Cu,isMedicationArray:()=>of,isMedicationCartManageResponse:()=>Da,isMedicationCheckoutResponse:()=>ka,isMedicationOrderResponse:()=>Aa,isMedicationOrderSetResponse:()=>Oa,isMedplumAccessToken:()=>Di,isNodeEnvironment:()=>pd,isNotFound:()=>Oc,isObject:()=>C,isOk:()=>Ir,isOperationOutcome:()=>ot,isOrganizationArray:()=>Af,isPeriod:()=>ni,isPopulated:()=>ue,isPrimitiveType:()=>Pt,isProfileLoaded:()=>Hn,isProfileResource:()=>Go,isQuantity:()=>L,isQuantityEquivalent:()=>ii,isRedirect:()=>Ac,isReference:()=>J,isResource:()=>D,isResourceType:()=>Ct,isResourceTypeSchema:()=>_r,isResourceWithId:()=>ut,isSliceDefinitionWithTypes:()=>Ui,isString:()=>de,isStringArray:()=>bu,isTextObject:()=>Yo,isTypedValue:()=>hl,isUUID:()=>Su,isUnauthenticated:()=>Mc,isValidDate:()=>Nt,isValidHostname:()=>Fu,isValidMedplumSemver:()=>xo,lazy:()=>di,loadDataType:()=>Vr,locationUtils:()=>me,mapByIdentifier:()=>Bu,matchDiscriminant:()=>Ur,matchesRange:()=>li,matchesSearchRequest:()=>tr,medicationCartClearRequestToParameters:()=>vf,medicationCartRemoveRequestToParameters:()=>xf,medicationCheckoutRequestToParameters:()=>hf,medicationOrderRequestToParameters:()=>df,medicationOrderSetRequestToParameters:()=>ff,medicationSearchParamsToParameters:()=>uf,move:()=>vn,multipleMatches:()=>hc,normalizeArrayBufferView:()=>ui,normalizeCreateBinaryOptions:()=>Ni,normalizeCreatePdfOptions:()=>Qs,normalizeErrorEvent:()=>_s,normalizeErrorString:()=>Ie,normalizeOperationOutcome:()=>Rt,notFound:()=>Vn,notModified:()=>uc,operationOutcomeIssueToString:()=>Io,operationOutcomeToString:()=>Ln,parametersToMedicationCartManageResponse:()=>Sf,parametersToMedicationCheckoutResponse:()=>yf,parametersToMedicationOrderResponse:()=>pf,parametersToMedicationOrderSetResponse:()=>mf,parametersToOrderSetSyncResponse:()=>Ef,parseFhirPath:()=>er,parseFhirPathPatchParameters:()=>$p,parseFilterParameter:()=>Yp,parseHl7DateTime:()=>Zp,parseJWTPayload:()=>sr,parseLogLevel:()=>tf,parseMappingLanguage:()=>mp,parseParameter:()=>Ss,parseReference:()=>nu,parseSearchRequest:()=>mt,parseSmartHealthLink:()=>nm,parseStructureDefinition:()=>Mr,parseXFhirQuery:()=>$l,pathToJSONPointer:()=>He,preciseEquals:()=>Du,preciseGreaterThan:()=>_u,preciseGreaterThanOrEquals:()=>rs,preciseLessThan:()=>Vu,preciseLessThanOrEquals:()=>ts,preciseRound:()=>Mu,preconditionFailed:()=>pc,projectAdminResourceTypes:()=>Es,protectedResourceTypes:()=>bs,readInteractions:()=>Rs,redirect:()=>Oo,redirectOk:()=>Ec,remove:()=>yn,removeDuplicates:()=>At,removePreferredPharmacyFromPatient:()=>wf,removeProfileFromResource:()=>qu,reorderBundle:()=>Os,replace:()=>xn,replaceQueryVariables:()=>ks,resolveId:()=>K,resourceMatchesSubscriptionCriteria:()=>Md,satisfiedAccessPolicy:()=>Cs,schedulingDurationToMinutes:()=>Wf,serializeError:()=>Tr,serializeFhircastSubscriptionRequest:()=>rn,serverError:()=>Sc,serverTimeout:()=>bc,serviceTypeIncludesService:()=>Uf,setCodeBySystem:()=>Pu,setIdentifier:()=>fu,setRateLimitReset:()=>yc,setScheduleParameter:()=>Lf,singleton:()=>N,singularize:()=>Nu,sleep:()=>Qr,sortStringArray:()=>_t,splitN:()=>Je,splitSearchOnComma:()=>ht,streamToBuffer:()=>tm,stringify:()=>Vt,stringifyTypedValue:()=>xi,structureMapTransform:()=>hp,subsetResource:()=>Uc,subtract:()=>zi,sumBy:()=>$u,summarizeObservations:()=>Jd,test:()=>ma,toJsBoolean:()=>j,toPeriod:()=>Ot,toServiceTypeCodeableConcepts:()=>Ff,toTypedValue:()=>E,tooManyRequests:()=>gc,trimTrailingEmptyElements:()=>gu,tryGetDataType:()=>Me,tryGetJwtExpiration:()=>Vi,tryGetProfile:()=>Gn,typedValueToString:()=>mi,unauthorized:()=>We,unauthorizedTokenAudience:()=>Ar,unauthorizedTokenExpired:()=>_n,unescapeToken:()=>la,unsupportedMediaType:()=>mc,validateFhircastSubscriptionRequest:()=>or,validateResource:()=>zc,validateResourceType:()=>$f,validateTypedValue:()=>Fo,validationError:()=>T,validationRegexes:()=>wt,warnIfNewerVersionAvailable:()=>mm,wordWrap:()=>ya});module.exports=ec(hm);var ee=class{constructor(e=10){c(this,"max");c(this,"cache");this.max=e,this.cache=new Map}clear(){this.cache.clear()}get(e){let r=this.cache.get(e);return r&&(this.cache.delete(e),this.cache.set(e,r)),r}set(e,r){this.cache.has(e)?this.cache.delete(e):this.cache.size>=this.max&&this.cache.delete(this.first()),this.cache.set(e,r)}delete(e){this.cache.delete(e)}keys(){return this.cache.keys()}first(){return this.cache.keys().next().value}};var St=class{constructor(e,r){c(this,"operator");c(this,"child");this.operator=e,this.child=r}toString(){return`${this.operator}(${this.child.toString()})`}},w=class{constructor(e,r,n){c(this,"operator");c(this,"left");c(this,"right");this.operator=e,this.left=r,this.right=n}toString(){return`(${this.left.toString()} ${this.operator} ${this.right.toString()})`}},bt=class{constructor(){c(this,"prefixParselets",{});c(this,"infixParselets",{})}registerInfix(e,r){return this.infixParselets[e]=r,this}registerPrefix(e,r){return this.prefixParselets[e]=r,this}prefix(e,r,n){return this.registerPrefix(e,{parse(i,o){let s=i.consumeAndParse(r);return n(o,s)}})}infixLeft(e,r,n){return this.registerInfix(e,{parse(i,o,s){let a=i.consumeAndParse(r);return n(o,s,a)},precedence:r})}construct(e){return new Er(e,this.prefixParselets,this.infixParselets)}},Er=class{constructor(e,r,n){c(this,"tokens");c(this,"prefixParselets");c(this,"infixParselets");this.tokens=e,this.prefixParselets=r,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 r=this.consume(),n=this.prefixParselets[r.id];if(!n)throw new Error(`Parse error at "${r.value}" (line ${r.line}, column ${r.column}). No matching prefix parselet.`);let i=n.parse(this,r);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 r=this.getInfixParselet(e);return r?r.precedence:1/0}consume(e,r){if(!this.tokens.length)throw new Error("Cant consume unknown more tokens.");if(e&&this.peek()?.id!==e){let n=this.peek();throw new Error(`Expected ${e} but got "${n.id}" (${n.value}) at line ${n.line} column ${n.column}.`)}if(r&&this.peek()?.value!==r){let n=this.peek();throw new Error(`Expected "${r}" but got "${n.value}" at line ${n.line} column ${n.column}.`)}return this.tokens.shift()}peek(){return this.tokens.length>0?this.tokens[0]:void 0}removeComments(){this.tokens=this.tokens.filter(e=>e.id!=="Comment")}getInfixParselet(e){return this.infixParselets[e.id==="Symbol"?e.value:e.id]}};function te(t){if(t!==void 0)return Array.isArray(t)?t:[t]}var Pn="http://unitsofmeasure.org",tc="http://loinc.org",rc="http://snomed.info/sct",nc="http://www.nlm.nih.gov/research/umls/rxnorm",ic="http://www.ama-assn.org/go/cpt",oc="http://hl7.org/fhir/sid/icd-10",sc="http://hl7.org/fhir/sid/ndc",Et="http://hl7.org",To="http://terminology.hl7.org",wn=`${To}/CodeSystem/v2-0203`;var Cr="ok",Pr="created",An="gone",On="not-modified",In="found",kn="not-found",Mn="conflict",Dn="unauthorized",So="forbidden",bo="precondition-failed",Eo="content-too-large",Ro="unsupported-media-type",Co="multiple-matches",Po="too-many-requests",Rr="https://medplum.com/fhir/StructureDefinition/rate-limit-reset",wr="accepted",wo="server-timeout",Ao="business-rule",ac={resourceType:"OperationOutcome",id:Cr,issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},cc={resourceType:"OperationOutcome",id:Pr,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},uc={resourceType:"OperationOutcome",id:On,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},Vn={resourceType:"OperationOutcome",id:kn,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},We={resourceType:"OperationOutcome",id:Dn,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},_n={...We,issue:[...We.issue,{severity:"error",code:"expired",details:{text:"Token expired"}}]},Ar={...We,issue:[...We.issue,{severity:"error",code:"invalid",details:{text:"Token not issued for this audience"}}]},lc={resourceType:"OperationOutcome",id:So,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},dc={resourceType:"OperationOutcome",id:An,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},pc={resourceType:"OperationOutcome",id:bo,issue:[{severity:"error",code:"processing",details:{text:"Precondition Failed"}}]};function fc(t){return{resourceType:"OperationOutcome",id:Eo,issue:[{severity:"error",code:"too-long",details:{text:t}}]}}var mc={resourceType:"OperationOutcome",id:Ro,issue:[{severity:"error",code:"not-supported",details:{text:"Unsupported media type"}}]},hc={resourceType:"OperationOutcome",id:Co,issue:[{severity:"error",code:"multiple-matches",details:{text:"Multiple resources found matching condition"}}]},gc={resourceType:"OperationOutcome",id:Po,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function yc(t,e){t.extension=[...(t.extension??v).filter(r=>r.url!==Rr),{url:Rr,valueUnsignedInt:Math.ceil(e/1e3)}]}function xc(t){let e=t.extension?.find(r=>r.url===Rr)?.valueUnsignedInt;if(e!==void 0)return e*1e3;for(let r of t.issue)try{let n=JSON.parse(r.diagnostics??"");if(typeof n.msBeforeNext=="number")return n.msBeforeNext}catch{}}function vc(t){return{resourceType:"OperationOutcome",id:wr,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:t}]}}function A(t,e){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:t},...e?{expression:te(e)}:void 0}]}}function Tc(t,e){return{resourceType:"OperationOutcome",id:Mn,issue:[{severity:"error",code:"conflict",details:{coding:e?[{code:e}]:void 0,text:t}}]}}function T(t,e,r,n){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:r??"structure",details:{text:t},...e?{expression:e}:void 0,...n?{diagnostics:n}:void 0}]}}function Sc(t){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:t.toString()}]}}function bc(t){return{resourceType:"OperationOutcome",id:wo,issue:[{severity:"error",code:"timeout",details:{text:t??"Server timeout"}}]}}function Oo(t){let e=t.toString();return{resourceType:"OperationOutcome",id:In,issue:[{severity:"information",code:"informational",details:{coding:[{system:"urn:ietf:rfc:3986",code:e}],text:"Redirect to "+e}}]}}function Ec(t){return{...Oo(t),id:Cr}}function Rc(t){return t?.issue?.[0]?.details?.coding?.find(e=>e.system==="urn:ietf:rfc:3986")?.code}function Cc(t,e){return{resourceType:"OperationOutcome",id:Ao,issue:[{severity:"error",code:"business-rule",details:{id:t,text:e}}]}}function Or(t){return!t||typeof t!="object"?!1:t instanceof Error||typeof DOMException<"u"&&t instanceof DOMException?!0:Object.prototype.toString.call(t)==="[object Error]"}function ot(t){return typeof t=="object"&&t!==null&&t.resourceType==="OperationOutcome"}function Ir(t){return t.id===Cr||t.id===Pr||t.id===On||t.id===wr}function Pc(t){return t.id===Pr}function wc(t){return t.id===wr}function Ac(t){return t.id===In}function Oc(t){return t.id===kn}function Ic(t){return t.id===Mn}function kc(t){return t.id===An}function Mc(t){return t.id===Dn}function Dc(t){switch(t.id){case Cr:return 200;case Pr:return 201;case wr:return 202;case In:return 302;case On:return 304;case Dn:return 401;case So:return 403;case kn:return 404;case Mn:return 409;case An:return 410;case bo:case Co:return 412;case Eo:return 413;case Ro:return 415;case Ao:return 422;case Po:return 429;case wo:return 504;default:return t.issue?.[0]?.code==="exception"?500:400}}function Vc(t,e){if(!Ir(t)||e===void 0)throw new m(t)}var m=class extends Error{constructor(r,n){super(Ln(r),n);c(this,"outcome");this.name="OperationOutcomeError",this.outcome=r}};function Rt(t){return t instanceof m?t.outcome:ot(t)?t:A(Ie(t))}function Ie(t){return t?typeof t=="string"?t:Or(t)?t.message:ot(t)?Ln(t):typeof t=="object"&&"code"in t&&typeof t.code=="string"?t.code:JSON.stringify(t):"Unknown error"}function Ln(t){let e=t.issue?.map(Io)??[];return e.length>0?e.join("; "):"Unknown error"}function Io(t){let e;return t.details?.text?t.diagnostics?e=`${t.details.text} (${t.diagnostics})`:e=t.details.text:t.diagnostics?e=t.diagnostics:e="Unknown error",t.expression?.length&&(e+=` (${t.expression.join(", ")})`),e}function ke(t,e,r,n,i){let o={severity:t,code:e,details:{text:r},expression:[n]};return i&&(o.diagnostics=JSON.stringify(i)),o}function R(t,e){return ke("error","structure",e,t)}function Nn(t,e){return ke("error","invariant",`Constraint ${e.key} not met: ${e.description}`,t,{fhirpath:e.expression})}function Fn(t,e,r,n){return ke("error","processing",e,t,{...n,error:r})}var _c={"http://hl7.org/fhirpath/System.String":"string"};function Lc(t){let e={};return t.min!==0&&(e.min=t.min),t.max!==1&&Number.isFinite(t.max)?e.max=t.max:t.max===Number.POSITIVE_INFINITY&&(e.max=Number.MAX_SAFE_INTEGER),e.type=t.type?.map(r=>({...r,extension:void 0,code:_c[r.code]??r.code})),e}function ko(t,e){let r=e.max&&e.max===Number.MAX_SAFE_INTEGER?Number.POSITIVE_INFINITY:e.max;return{path:t,description:"",type:e.type??[],min:e.min??0,max:r??1,isArray:!!r&&r>1,constraints:[]}}function Un(t){let e=Object.create(null);for(let[r,n]of Object.entries(t))e[r]={name:r,type:r,path:r,elements:Object.fromEntries(Object.entries(n.elements).map(([i,o])=>[i,ko(i,o)])),constraints:[],innerTypes:[]};return e}var Mo={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"}]},deleted:{type:[{code:"boolean"}]}}},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:{issuer:{type:[{code:"string"}]},jwksUrl:{type:[{code:"string"}]},authorizeUrl:{type:[{code:"string"}]},tokenUrl:{type:[{code:"string"}]},tokenAuthMethod:{type:[{code:"code"}]},userInfoUrl:{type:[{code:"string"}]},userInfoMode:{type:[{code:"code"}]},userInfoApiKey:{type:[{code:"string"}]},clientId:{type:[{code:"string"}]},clientSecret:{type:[{code:"string"}]},usePkce:{type:[{code:"boolean"}]},useSubject:{type:[{code:"boolean"}]},identitySource:{type:[{code:"code"}]},identityMappingMode:{type:[{code:"code"}]}}}};function Mr(t){return new qn(t).parse()}var $e=Un(Mo),Wn=Object.create(null),Do=Object.create(null),Fc={"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 No(t){let e;return e=Do[t],e||(e=Do[t]=Object.create(null)),e}function Dr(t){let r=(Array.isArray(t)?t:t.entry?.map(n=>n.resource)??[]).filter(n=>n?.resourceType==="StructureDefinition");Qn(r);for(let n of r)Vr(n)}function Vr(t){if(!t?.name)throw new Error("Failed loading StructureDefinition from bundle");if(t.resourceType!=="StructureDefinition")return;let e=Mr(t),r=Fc[t.url],n,i;r?(n=$e,i=r):t.url===`http://hl7.org/fhir/StructureDefinition/${t.type}`||t.url===`https://medplum.com/fhir/StructureDefinition/${t.type}`||t.type?.startsWith("http://")||t.type?.startsWith("https://")?(n=$e,i=t.type):(n=No(t.url),i=t.type),n[i]=e;for(let o of e.innerTypes)o.parentType=e,n[o.name]=o;Wn[t.url]=e}function $n(){return $e}function jn(t){return!!$e[t]}function Me(t,e){if(e){let r=No(e)[t];if(r)return r}return $e[t]}function ye(t,e){let r=Me(t,e);if(!r)throw new m(A("Unknown data type: "+t));return r}function Ct(t){let e=$e[t];return e&&_r(e)}function Hn(t){return!!Wn[t]}function Gn(t){return Wn[t]}var qn=class{constructor(e){c(this,"root");c(this,"elements");c(this,"elementIndex");c(this,"index");c(this,"resourceSchema");c(this,"slicingContext");c(this,"innerTypes");c(this,"backboneContext");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:$c(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 r=Bn(e,this.slicingContext.path);this.slicingContext.current.elements[r]=this.parseElementDefinition(e)}}else{let r=this.parseElementDefinition(e);this.checkFieldEnter(e,r);let n=this.backboneContext;for(;n;){if(e.path?.startsWith(n.path+".")){n.type.elements[Bn(e,n.path)]=r;break}n=n.parent}if(!n){let i=Bn(e,this.root.path);e.isSummary&&this.resourceSchema.summaryProperties?.add(i.replace("[x]","")),r.min>0&&this.resourceSchema.mandatoryProperties?.add(i.replace("[x]","")),this.resourceSchema.elements[i]=r}this.checkFieldExit(e)}e=this.next()}return this.checkFieldExit(),this.innerTypes.length>0&&(this.resourceSchema.innerTypes=this.innerTypes),this.resourceSchema}checkFieldEnter(e,r){this.isInnerType(e)&&this.enterInnerType(e),this.slicingContext&&!st(this.slicingContext.path,e?.path)&&(this.slicingContext=void 0),e.slicing&&!this.slicingContext&&this.enterSlice(e,r)}enterInnerType(e){for(;this.backboneContext&&!st(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;let r=kr(e);this.backboneContext={type:{name:r,type:r,path:e.path,title:e.label,description:e.definition,elements:{},constraints:this.parseElementDefinition(e).constraints,innerTypes:[]},path:e.path,parent:st(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,r){Wc(e)&&!this.peek()?.sliceName||(r.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:r.slicing,path:e.path??""})}checkFieldExit(e=void 0){if(this.backboneContext&&!st(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!st(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 r=e.contentReference.slice(e.contentReference.indexOf("#")+1),n=this.elementIndex[r];return n?{...n,id:e.id,path:e.path,min:e.min??n.min,max:e.max??n.max,base:{path:n.base?.path??r,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 r=this.peek();return!!(st(e?.path,r?.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(r=>{let n;return(r.code==="BackboneElement"||r.code==="Element")&&(n=kr(e)),n||(n=ae(r,"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type")?.valueUrl),n||(n=r.code??""),{code:n,targetProfile:r.targetProfile,profile:r.profile}})}parseElementDefinition(e){let r=_o(e.max),n=e.base?.max?_o(e.base.max):r,i={type:"ElementDefinition",value:e};return{description:e.definition||"",path:e.path||e.base?.path||"",min:e.min??0,max:r,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:Lo(_(i,"fixed[x]")),pattern:Lo(_(i,"pattern[x]")),binding:e.binding}}};function Uc(t,e){if(!t)return;let r=[];for(let n of e){r.push("_"+n);let i=$e[t.resourceType].elements[n+"[x]"];i&&r.push(...i.type.map(o=>n+U(o.code)))}for(let n of Object.getOwnPropertyNames(t))!e.includes(n)&&!r.includes(n)&&!Bc.includes(n)&&Object.defineProperty(t,n,{enumerable:!1,writable:!1,value:void 0});return t.meta={...t.meta,tag:t.meta?.tag?t.meta.tag.concat(Vo):[Vo]},t}var Vo={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},Bc=["resourceType","id","meta"];function _o(t){return t==="*"?Number.POSITIVE_INFINITY:Number.parseInt(t,10)}function Bn(t,e=""){return qc(t.path,e)}function qc(t,e){return t?e&&t.startsWith(e)?t.substring(e.length+1):t:""}function st(t,e){return!t||!e?!1:e.startsWith(t+".")||e===t}function Lo(t){return Array.isArray(t)&&t.length>0?t[0]:O(t)?void 0:t}function Wc(t){let e=t.slicing?.discriminator;return!!(t.type?.some(r=>r.code==="Extension")&&e?.length===1&&e[0].type==="value"&&e[0].path==="url")}function $c(t){let e=t.description;return e?.startsWith(`Base StructureDefinition for ${t.name} Type: `)&&(e=e.substring(`Base StructureDefinition for ${t.name} Type: `.length)),e}function Lr(t,e,r){new zn(t,e,r).crawl()}function jc(t,e,r){return new Jn(t,e,r).crawl()}var zn=class{constructor(e,r,n){c(this,"root");c(this,"visitor");c(this,"schema");c(this,"initialPath");c(this,"excludeMissingProperties");this.root=e,this.visitor=r,this.schema=n?.schema??ye(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,r,n){let i=D(e.value);if(i&&this.visitor.onEnterResource&&this.visitor.onEnterResource(n,e,r),this.visitor.onEnterObject&&this.visitor.onEnterObject(n,e,r),this.excludeMissingProperties)for(let o of Object.keys(e.value))this.crawlProperty(e,o,r,`${n}.${o}`);else for(let o of Object.keys(r.elements))this.crawlProperty(e,o,r,`${n}.${o}`);this.visitor.onExitObject&&this.visitor.onExitObject(n,e,r),i&&this.visitor.onExitResource&&this.visitor.onExitResource(n,e,r)}crawlProperty(e,r,n,i){let o=je(e,r,{withPath:!0});this.visitor.visitProperty&&this.visitor.visitProperty(e,r,i,o,n);for(let s of o)for(let a of te(s))this.crawlPropertyValue(a,i,n)}crawlPropertyValue(e,r,n){if(!Pt(e.type)){let i=n.innerTypes?.find(o=>o.name===e.type)??ye(e.type);this.crawlObject(e,i,r)}}},Jn=class{constructor(e,r,n){c(this,"root");c(this,"visitor");c(this,"schema");c(this,"initialPath");c(this,"excludeMissingProperties");this.root=e,this.visitor=r,this.schema=n?.schema??ye(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,r,n){let i=D(e.value);if(i&&this.visitor.onEnterResource&&await this.visitor.onEnterResource(n,e,r),this.visitor.onEnterObject&&await this.visitor.onEnterObject(n,e,r),this.excludeMissingProperties&&e.value)for(let o of Object.keys(e.value))await this.crawlProperty(e,o,r,`${n}.${o}`);else for(let o of Object.keys(r.elements))await this.crawlProperty(e,o,r,`${n}.${o}`);this.visitor.onExitObject&&await this.visitor.onExitObject(n,e,r),i&&this.visitor.onExitResource&&await this.visitor.onExitResource(n,e,r)}async crawlProperty(e,r,n,i){let o=je(e,r,{withPath:!0});if(this.visitor.visitPropertyAsync)for(let s of o)await this.visitor.visitPropertyAsync(e,r,i,s,n);for(let s of o)for(let a of te(s))await this.crawlPropertyValue(a,i,n)}async crawlPropertyValue(e,r,n){if(!Pt(e.type)){let i=n.innerTypes?.find(o=>o.name===e.type)??ye(e.type);await this.crawlObject(e,i,r)}}};function je(t,e,r){if(t===void 0)return[void 0];if(e==="$this")return[t];let n=r?.withPath?Nr:_,[i,...o]=e.split("."),s=[n(t,i,r)];for(let a of o){let u=[];for(let l of s)if(Array.isArray(l))for(let d of l)u.push(n(d,a,r));else(r?.withPath&&l?.value!==void 0||!r?.withPath&&l!==void 0)&&u.push(n(l,a,r));s=u}return s}function Nr(t,e,r){let n=t.path;return Hc(_(t,e,r),n,e)}function Hc(t,e,r){let n=e?e+".":"";return t===void 0?{type:"undefined",value:void 0,path:`${n}${r}`}:Array.isArray(t)?t.map((i,o)=>({...i,path:`${n}${r}[${o}]`})):{...t,path:`${n}${r}`}}function He(t){if(t[0]===t[0].toUpperCase()){let e=t.indexOf(".");if(e===-1)return"";t=t.slice(e+1)}return`.${t}`.replaceAll(".","/").replaceAll(/\[(\d+)]/g,(e,r)=>`/${r}`)}var Fr={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"},Gc=new ee(1e3);function Pt(t){return t==="undefined"||t in Fr}var wt={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:/.*/},Qc={"ele-1":!0,"dom-3":!0,"org-1":!0,"sdf-19":!0};function zc(t,e){if(!Ct(t.resourceType))throw new m(T("Invalid resource type"));return Fo(E(t),e)}function Fo(t,e){return new Kn(t,e).validate()}var Kn=class{constructor(e,r){c(this,"issues");c(this,"root");c(this,"resourceStack");c(this,"schema");c(this,"base64BinaryMaxBytes");c(this,"collect");this.issues=[],this.root=e,this.resourceStack=[],D(e.value)&&this.resourceStack.push(e.value),r?.profile?this.schema=Mr(r.profile):this.schema=ye(e.type),this.base64BinaryMaxBytes=r?.base64BinaryMaxBytes??1*1024*1024,this.collect=r?.collect}currentResource(){return this.resourceStack.at(-1)}validate(){Yn(this.root.value,this.schema.path,this.issues),this.constraintsCheck({...this.root,path:this.schema.path},this.schema),Lr(this.root,this,{schema:this.schema,initialPath:this.schema.path});for(let e of this.issues)if(e.severity==="error")throw new m({resourceType:"OperationOutcome",issue:this.issues});return this.issues}onExitObject(e,r,n){this.checkAdditionalProperties(r,n.elements,r.path)}onEnterResource(e,r){this.resourceStack.push(r.value)}onExitResource(){this.resourceStack.pop()}visitProperty(e,r,n,i,o){let s=o.elements[r];if(!s)throw new Error(`Missing element validation schema for ${r}`);for(let a of i){if(!this.checkPresence(a,s,n))return;let u;if(s.isArray){if(!Array.isArray(a)){this.issues.push(R(n,"Expected array of values for property"));return}u=a}else{if(Array.isArray(a)){this.issues.push(R(n,"Expected single value for property"));return}u=[a]}(u.length<s.min||u.length>s.max)&&this.issues.push(R(s.path,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${u.length}`)),Yc(a,s)||this.issues.push(R(n,"Value did not match expected pattern"));let l=s.slicing?Object.fromEntries(s.slicing.slices.map(d=>[d.name,0])):void 0;for(let d of u){this.constraintsCheck(d,s),this.referenceTypeCheck(d,s),this.checkPropertyValue(d),this.collectValue(d,s);let f=Xc(d,s.slicing);f&&l&&(l[f]+=1)}this.validateSlices(s.slicing?.slices,l,n)}}checkPresence(e,r,n){return!Array.isArray(e)&&e.value===void 0?(r.min>0&&this.issues.push(R(e.path,"Missing required property")),!1):O(e)?(this.issues.push(R(n,"Invalid empty value")),!1):!0}checkPropertyValue(e){Pt(e.type)?this.validatePrimitiveType(e):O(e.value)&&this.issues.push(R(e.path,"Invalid empty non-primitive value"))}validateSlices(e,r,n){if(!(!e||!r))for(let i of e){let o=r[i.name];(o<i.min||o>i.max)&&this.issues.push(R(n,`Incorrect number of values provided for slice '${i.name}': expected ${i.min}..${Number.isFinite(i.max)?i.max:"*"}, but found ${o}`))}}checkAdditionalProperties(e,r,n){let i=e.value;if(!i)return;let o={};for(let s of Object.keys(i)){if(s==="resourceType")continue;let a=Kc(e,s,r);if(a){let u,l;a.startsWith("_")?(u=a.slice(1),l=s.slice(1)):(u="_"+a,l="_"+s),u in o&&o[u]!==l&&this.issues.push(ke("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(ke("warning","structure",`Conflicting choice of type properties: "${s}", "${o[a]}"`,s)),o[a]=s;continue}!(s in r)&&!(s.startsWith("_")&&s.slice(1)in r)&&i[s]!==void 0&&this.issues.push(R(`${n}.${s}`,`Invalid additional property "${s}"`))}}constraintsCheck(e,r){let n=r.constraints;for(let i of n??v)if(i.severity==="error"&&!(i.key in Qc)&&!this.isExpressionTrue(i,e)){this.issues.push(Nn(e.path,i));return}}referenceTypeCheck(e,r){if(e.type!=="Reference")return;let n=e.value;if(!J(n)||n.reference.startsWith("#"))return;let i=n.reference.includes("?")?n.reference.split("?")[0]:n.reference.split("/")[0];if(!i)return;let o=r.type.find(f=>f.code==="Reference")?.targetProfile;if(!o)return;let s=Et+"/fhir/StructureDefinition/",a=s+"Resource",u=s+i,l="https://medplum.com/fhir/StructureDefinition/",d=l+i;for(let f of o)if(f===a||f===u||f===d||!f.startsWith(s)&&!f.startsWith(l))return;this.issues.push(ke("warning","structure",`Invalid reference: got "${i}", expected "${o.join('", "')}"`,e.path))}collectValue(e,r){r.binding?.valueSet&&r.binding.strength==="required"&&eu(e.type)&&this.appendToken(r.binding.valueSet,e)}appendToken(e,r){if(!this.collect?.tokens)return;let n=this.collect.tokens[e];if(!n){let i=Object.keys(this.collect.tokens);for(let o of i)o.startsWith(e+"|")&&(n=this.collect.tokens[o])}for(let i of n??v)if(i.path===r.path)return;this.collect.tokens[e]=ve(n,r)}isExpressionTrue(e,r){let n={"%context":r,"%ucum":E(Pn)},i=this.currentResource();i&&(n["%resource"]=E(i)),D(this.root.value)&&(n["%rootResource"]=this.root);try{let o=k(e.expression,[r],n,Gc);return o.length===1&&o[0].value===!0}catch(o){return this.issues.push(Fn(r.path,"Error evaluating invariant expression",o,{fhirpath:e.expression})),!1}}validatePrimitiveType(e){let[r,n]=Zc(e),i=e.path;if(r){let{type:o,value:s}=r;if(!(o in Fr)){this.issues.push(R(i,`Invalid JSON type: ${o} is not a valid FHIR type`));return}let a=Fr[o];if(typeof s!==a){s!==null&&this.issues.push(R(i,`Invalid JSON type: expected ${a}, but got ${typeof s}`));return}o==="base64Binary"?this.validateBase64Binary(s,i):a==="string"?this.validateString(s,o,i):a==="number"&&this.validateNumber(s,o,i)}n&&Lr(n,this,{schema:ye("Element"),initialPath:i})}validateBase64Binary(e,r){if(!tu(e)){this.issues.push(R(r,"Invalid base64Binary format"));return}let n=0;e.endsWith("==")?n=2:e.endsWith("=")&&(n=1),Math.max(0,Math.floor(e.length*3/4)-n)>this.base64BinaryMaxBytes&&this.issues.push(R(r,`base64Binary exceeds ${this.base64BinaryMaxBytes} bytes`))}validateString(e,r,n){if(!e.trim()){this.issues.push(R(n,"String must contain non-whitespace content"));return}if(e.length>1024*1024){this.issues.push(R(n,"String cannot be larger than 1 MB"));return}let i=wt[r];i&&!i.exec(e)&&this.issues.push(R(n,"Invalid "+r+" format"))}validateNumber(e,r,n){Number.isNaN(e)||!Number.isFinite(e)?this.issues.push(R(n,"Invalid numeric value")):Jc(r)&&!Number.isInteger(e)?this.issues.push(R(n,"Expected number to be an integer")):r===p.positiveInt&&e<=0?this.issues.push(R(n,"Expected number to be positive")):r===p.unsignedInt&&e<0&&this.issues.push(R(n,"Expected number to be non-negative"))}};function Jc(t){return t===p.integer||t===p.positiveInt||t===p.unsignedInt}function Kc(t,e,r){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(r[a])return _(t,o)?n+a:void 0}}function Yn(t,e,r){for(let[n,i]of Object.entries(t)){let o=`${e}.${n}`,s=n.startsWith("_")?n.slice(1):`_${n}`;if(i===null)r.push(R(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?r.push(R(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!t[s]?.[a]?r.push(R(`${o}[${a}]`,"Invalid null value")):i[a]&&Yn(i[a],`${o}[${a}]`,r);else typeof i=="object"&&Yn(i,o,r)}}function Yc(t,e){let r=Array.isArray(t)?t.map(n=>({type:n.type,value:n.value})):{type:t.type,value:t.value};return!(e.pattern&&!at(r,e.pattern)||e.fixed&&!xe(r,e.fixed))}function Ur(t,e,r,n){if(Array.isArray(t))return!1;let i;e.path==="$this"?i=r:i=(n??r.elements)[e.path];let o=r.type;switch(e.type){case"value":case"pattern":if(!t||!i)return!1;if(i.pattern)return at(t,i.pattern);if(i.fixed)return xe(t,i.fixed);if(i.binding?.strength==="required"&&i.binding.valueSet)return!0;break;case"type":return!t||!o?.length?!1:o.some(s=>s.code===t.type)}return!1}function Xc(t,e){for(let r of e?.slices??v)if(e?.discriminator?.every(n=>te(je(t,n.path))?.some(i=>Ur(i,n,r))))return r.name}function Zc(t){if(typeof t.value!="object"||!t.value)return[t,void 0];let e=t.value.valueOf();if(e===t.value)return[void 0,{type:"Element",value:t.value}];let r=new Set(Object.keys(e)),n=Object.entries(t.value).filter(([o,s])=>!r.has(o)),i=n.length>0?Object.fromEntries(n):void 0;return[{type:t.type,value:e},{type:"Element",value:i}]}function eu(t){switch(t){case"CodeableConcept":case"Coding":case"code":case"Quantity":case"string":case"uri":return!0;default:return!1}}function tu(t){if(t.length===0)return!1;let e=0;t.endsWith("==")?e=2:t.endsWith("=")&&(e=1);let r=t.length-e;if(r<0||(e+r)%4!==0)return!1;let n=e>0?t.slice(0,-e):t;return/^[A-Za-z\d+/]+$/.test(n)}function y(t){return[{type:p.boolean,value:t}]}function E(t){return t==null?{type:"undefined",value:void 0}:Number.isSafeInteger(t)?{type:p.integer,value:t}:typeof t=="number"?{type:p.decimal,value:t}:typeof t=="boolean"?{type:p.boolean,value:t}:typeof t=="string"?{type:p.string,value:t}:L(t)?{type:p.Quantity,value:t}:D(t)?{type:t.resourceType,value:t}:Wr(t)?{type:p.CodeableConcept,value:t}:It(t)?{type:p.Coding,value:t}:{type:p.BackboneElement,value:t}}function j(t){return t.length===0?!1:!!t[0].value}function N(t,e){if(t.length!==0){if(t.length===1&&(!e||t[0].type===e))return t[0];{let r=e?` of type ${e}`:"";throw new Error(`Expected singleton${r}, but found ${JSON.stringify(t)}`)}}}function _(t,e,r){if(!t.value)return;let n=kt(t.type,e,r?.profileUrl);return n?Wo(t,e,n):$o(t,e)}function Wo(t,e,r){let n=t.value,i=r.type;if(!i||i.length===0)return;let o,s="undefined",a,u=r.path.lastIndexOf("."),l=r.path.substring(u+1),d=l,f=!1;l.endsWith("[x]")&&(d=l.substring(0,l.length-3),f=!0);for(let h of i){let b=d;if(f&&(b+=U(h.code)),o=n[b],a=n["_"+b],o!==void 0||a!==void 0){s=h.code;break}}if(a)if(Array.isArray(o)){o=o.slice();for(let h=0;h<Math.max(o.length,a.length);h++)o[h]=Xn(o[h],a[h])}else if(!o&&Array.isArray(a)){o=a.slice();for(let h=0;h<a.length;h++)o[h]=Xn(void 0,a[h])}else o=Xn(o,a);if(!O(o))return(s==="Element"||s==="BackboneElement")&&(s=r.type[0].code),Array.isArray(o)?o.map(h=>Uo(h,s)):Uo(o,s)}function Uo(t,e){return e==="Resource"&&D(t)&&(e=t.resourceType),{type:e,value:t}}function $o(t,e){let r=t.value;if(!r||typeof r!="object")return;let n;if(e in r){let i=r[e];Array.isArray(i)?n=i.map(E):n=E(i)}else{let i=e.endsWith("[x]")?e.substring(0,e.length-3):e;for(let o of Object.values(p)){let s=i+U(o);if(s in r){let a=r[s];Array.isArray(a)?n=a.map(u=>({type:o,value:u})):n={type:o,value:a};break}}}if(Array.isArray(n)){if(n.length===0||O(n[0]))return}else if(O(n))return;return n}function At(t){let e=[];for(let r of t){let n=!1;for(let i of e)if(j(ct(r,i))){n=!0;break}n||e.push(r)}return e}function Zn(t){return y(!j(t))}function ei(t,e){return t.length===0||e.length===0?[]:t.length!==e.length?y(!1):y(t.every((r,n)=>j(ct(r,e[n]))))}function ti(t,e){return t.length===0||e.length===0?[]:t.length!==e.length?y(!0):y(t.some((r,n)=>!j(ct(r,e[n]))))}function ct(t,e){let r=t.value?.valueOf(),n=e.value?.valueOf();return typeof r=="number"&&typeof n=="number"?y(Math.abs(r-n)<1e-8):L(r)&&L(n)?y(ii(r,n)):y(typeof r=="object"&&typeof n=="object"?oi(t,e):r===n)}function qr(t,e){return t.length===0&&e.length===0?y(!0):t.length!==e.length?y(!1):(t.sort(Bo),e.sort(Bo),y(t.every((r,n)=>j(jo(r,e[n])))))}function jo(t,e){let{type:r,value:n}=t,{type:i,value:o}=e,s=n?.valueOf(),a=o?.valueOf();return typeof s=="number"&&typeof a=="number"?y(Math.abs(s-a)<.01):L(s)&&L(a)?y(ii(s,a)):y(r==="Coding"&&i==="Coding"?typeof s!="object"||typeof a!="object"?!1:s.code===a.code&&s.system===a.system:typeof s=="object"&&typeof a=="object"?oi({...s,id:void 0},{...a,id:void 0}):typeof s=="string"&&typeof a=="string"?s.toLowerCase()===a.toLowerCase():s===a)}function Bo(t,e){let r=t.value?.valueOf(),n=e.value?.valueOf();return typeof r=="number"&&typeof n=="number"?r-n:typeof r=="string"&&typeof n=="string"?r.localeCompare(n):0}function Qe(t,e){let{value:r}=t;if(r==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 r=="boolean";case"Decimal":case"Integer":return typeof r=="number";case"Date":return ri(r);case"DateTime":return Ge(r);case"Time":return typeof r=="string"&&!!/^T\d/.exec(r);case"Period":return ni(r);case"Quantity":return L(r);default:return t.type===n||typeof r=="object"&&r?.resourceType===n}}function ri(t){return typeof t=="string"&&!!wt.date.exec(t)}function Ge(t){return typeof t=="string"&&!!wt.dateTime.exec(t)}function ni(t){return!!(t&&typeof t=="object"&&("start"in t&&Ge(t.start)||"end"in t&&Ge(t.end)))}function Ot(t){if(ri(t)||Ge(t))return{start:Br(t,"0000-01-01T00:00:00.000"),end:Br(t,"xxxx-12-31T23:59:59.999")};if(ni(t))return{start:t.start?Br(t.start,"0000-01-01T00:00:00.000"):void 0,end:t.end?Br(t.end,"xxxx-12-31T23:59:59.999"):void 0}}function Br(t,e){let r="Z",n=Math.max(t.indexOf("+",10),t.indexOf("-",10));n>-1?(r=t.substring(n),t=t.substring(0,n)):t.endsWith("Z")&&(t=t.substring(0,t.length-1));let i=t+e.substring(t.length)+r;return new Date(i).toISOString()}function L(t){return!!(t&&typeof t=="object"&&"value"in t&&typeof t.value=="number")}function ii(t,e){return Math.abs(t.value-e.value)<.01&&(t.unit===e.unit||t.code===e.code||t.unit===e.code||t.code===e.unit)}function oi(t,e){let r=Object.keys(t),n=Object.keys(e);if(r.length!==n.length)return!1;for(let i of r){let o=t[i],s=e[i];if(qo(o)&&qo(s)){if(!oi(o,s))return!1}else if(o!==s)return!1}return!0}function qo(t){return t!==null&&typeof t=="object"}function Xn(t,e){if(e){if(typeof e!="object")throw new Error("Primitive extension must be an object");return ru(t??{},e)}return t}function ru(t,e){return delete e.__proto__,delete e.constructor,Object.assign(t,e)}function ut(t,e){return D(t,e)&&"id"in t&&typeof t.id=="string"}function re(t){let e=I(t)??"undefined/undefined",r=Qo(t);return r===e?{reference:e}:{reference:e,display:r}}function I(t){if(J(t))return t.reference;if(ut(t))return`${t.resourceType}/${t.id}`}function K(t){if(t)return J(t)?t.reference.split("/")[1]:t.id}function nu(t){if(t?.reference===void 0)throw new m(T("Reference missing reference property."));let[e,r]=t.reference.split("/");if(e===""||r===""||r===void 0)throw new m(T("Unable to parse reference string."));return[e,r]}function jr(t){if(t)if(t.accounts&&t.account){let e=t.accounts;return e.some(r=>r.reference===t.account?.reference)?e:[t.account,...e]}else return te(t.accounts??t.account)}function Go(t){return t.resourceType==="Patient"||t.resourceType==="Practitioner"||t.resourceType==="RelatedPerson"}function Qo(t){if(Go(t)){let e=iu(t);if(e)return e}if(t.resourceType==="Appointment"&&t.serviceType?.[0])return Te(t.serviceType[0]);if(t.resourceType==="Device"){let e=ou(t);if(e)return e}if(t.resourceType==="DocumentReference"){if(t.description)return t.description;if(t.type)return Te(t.type)}if(t.resourceType==="MedicationRequest"&&t.medicationCodeableConcept)return Te(t.medicationCodeableConcept);if(t.resourceType==="MedicationStatement"&&t.medicationCodeableConcept)return Te(t.medicationCodeableConcept);if(t.resourceType==="Slot"&&(t.start||t.end))return`${ze(t.start)} - ${ze(t.end)}`;if(t.resourceType==="Subscription"&&t.criteria)return t.criteria;if(t.resourceType==="User"&&t.email)return t.email;if("name"in t&&t.name&&typeof t.name=="string")return t.name;if("code"in t&&t.code){let e=t.code;if(Array.isArray(e)&&(e=e[0]),Wr(e))return Te(e);if(Yo(e))return e.text}return I(t)??""}function iu(t){let e=t.name;if(e&&e.length>0)return dt(e[0])}function ou(t){let e=t.deviceName;if(e&&e.length>0)return e[0].name}function su(t){if(!("photo"in t))return;let e=t.photo;if(e)if(Array.isArray(e))for(let r of e){let n=Ho(r);if(n)return n}else return Ho(e)}function Ho(t){if(t.url&&t.contentType?.startsWith("image/"))return t.url}function au(t){return t?new Date(t):void 0}function Mt(t,e){let r=new Date(t);r.setUTCHours(0,0,0,0);let n=e?new Date(e):new Date;n.setUTCHours(0,0,0,0);let i=r.getUTCFullYear(),o=r.getUTCMonth(),s=r.getUTCDate(),a=n.getUTCFullYear(),u=n.getUTCMonth(),l=n.getUTCDate(),d=a-i;(u<o||u===o&&l<s)&&d--;let f=a*12+u-(i*12+o);l<s&&f--;let h=Math.floor((n.getTime()-r.getTime())/(1e3*60*60*24));return{years:d,months:f,days:h}}function cu(t,e){let{years:r,months:n,days:i}=Mt(t,e);return r>=2?r.toString().padStart(3,"0")+"Y":n>=1?n.toString().padStart(3,"0")+"M":i.toString().padStart(3,"0")+"D"}function uu(t){let e={};return zo(t.item,e),e}function zo(t,e){for(let r of t??v)r.linkId&&r.answer&&r.answer.length>0&&(e[r.linkId]=r.answer[0]),zo(r.item,e)}function lu(t){let e={};return Jo(t.item,e),e}function Jo(t,e){for(let r of t??v)r.linkId&&r.answer&&r.answer.length>0&&(e[r.linkId]?e[r.linkId]=[...e[r.linkId],...r.answer]:e[r.linkId]=r.answer),Jo(r.item,e)}function Hr(t,e){let r=t.identifier;if(!r)return;let n=Array.isArray(r)?r:[r];for(let i of n)if(i.system===e)return i.value}var du={system:wn,code:"MR"};function pu(t,e){let r=t.identifier;return!r||!It(e)||!e.system?void 0:(Array.isArray(r)?r:[r]).find(i=>i.type?.coding?.some(o=>o.system===e.system&&o.code===e.code))?.value}function fu(t,e,r,n){let i={system:e,value:r};n?.use&&(i.use=n.use);let o=t.identifier;if(!o){t.identifier=[i];return}for(let s of o)if(s.system===e){Object.assign(s,i);return}o.push(i)}function De(t,...e){let r=ae(t,...e);if(!r)return;let n=_({type:"Extension",value:r},"value[x]");if(n)return Array.isArray(n)?n[0].value:n.value}function ae(t,...e){let r=t;for(let n=0;n<e.length&&r;n++)r=r?.extension?.find(i=>i.url===e[n]);return r}function Dt(t,e){let[r,...n]=te(e);if(!r)return[];let i=t?.extension?.filter(o=>o.url===r)??[];return n.length>0?i.flatMap(o=>Dt(o,n)):i}function Vt(t,e){let r=si(t);return JSON.stringify(r,null,e?2:void 0)??""}function si(t){if(!(t==null||t===""))return typeof t=="object"?Array.isArray(t)?mu(t):hu(t):t}function mu(t){let e=t.length;if(e===0)return;let r,n=0;for(let i=0;i<e;i++){let o=t[i],s=si(o);s!==o&&!r&&(r=Array.from(t)),s===void 0?r&&(r[i]=null):(r&&(r[i]=s),n++)}if(n!==0)return r??t}function hu(t){let e,r=0;for(let n in t){let i=t[n],o=si(i);o!==i&&!e&&(e={...t}),o===void 0?e&&delete e[n]:(e&&(e[n]=o),r++)}if(r!==0)return e??t}function O(t){if(t==null)return!0;let e=typeof t;return e==="string"||e==="object"?!ue(t):!1}function ue(t){if(t==null)return!1;let e=typeof t;return e==="string"&&t!==""||e==="object"&&("length"in t&&t.length>0||Object.keys(t).length>0)}function gu(t){if(!t)return;let e=t.length-1;for(;e>=0&&O(t[e]);)e--;return e>=0?t.slice(0,e+1):void 0}function xe(t,e,r){return t===e||O(t)&&O(e)?!0:O(t)||O(e)?!1:Array.isArray(t)&&Array.isArray(e)?yu(t,e):Array.isArray(t)||Array.isArray(e)?!1:C(t)&&C(e)?xu(t,e,r):(C(t)||C(e),!1)}function yu(t,e){if(t.length!==e.length)return!1;for(let r=0;r<t.length;r++)if(!xe(t[r],e[r]))return!1;return!0}function xu(t,e,r){let n=new Set;for(let i of Object.keys(t))n.add(i);for(let i of Object.keys(e))n.add(i);r==="meta"&&(n.delete("versionId"),n.delete("lastUpdated"),n.delete("author"));for(let i of n){let o=t[i],s=e[i];if(!xe(o,s,i))return!1}return!0}function at(t,e){return O(t)?!0:O(e)?!1:Array.isArray(t)&&Array.isArray(e)?vu(t,e):Array.isArray(t)||Array.isArray(e)?!1:C(t)&&C(e)?Tu(t,e):C(t)||C(e)?!1:t===e}function vu(t,e){return e.every(r=>t.some(n=>at(n,r)))}function Tu(t,e){return Object.entries(e).every(([r,n])=>r in t&&at(t[r],n))}function le(t){return t===void 0?t:JSON.parse(JSON.stringify(t))}function Su(t){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(t)}function C(t){return t!==null&&typeof t=="object"}function bu(t){return t.every(de)}function de(t){return typeof t=="string"}function It(t){return C(t)&&"code"in t&&typeof t.code=="string"}function Wr(t){return C(t)&&"coding"in t&&Array.isArray(t.coding)&&t.coding.every(It)}function Eu(t,e){for(let r of t??v)for(let n of r.coding??v)if(n.system===e)return n.code}function Ko(t,e){let[r,n]=Je(e,"|",2);return n===void 0?t.code===e:r===""?t.system===void 0&&t.code===n:n===""?t.system===r:t.system===r&&t.code===n}function Ru(t,e){return(t.coding??v).some(r=>Ko(r,e))}function Yo(t){return C(t)&&"text"in t&&typeof t.text=="string"}var Xo=[];for(let t=0;t<256;t++)Xo.push(t.toString(16).padStart(2,"0"));function ai(t){let e=ui(t),r=new Uint8Array(e),n=new Array(r.length);for(let i=0;i<r.length;i++)n[i]=Xo[r[i]];return n.join("")}function ci(t){let e=ui(t),r=new Uint8Array(e),n=new Array(r.length);for(let i=0;i<r.length;i++)n[i]=String.fromCodePoint(r[i]);return window.btoa(n.join(""))}function ui(t){return ArrayBuffer.isView(t)?t.buffer:t}function U(t){return t?t.charAt(0).toUpperCase()+t.substring(1):""}function Cu(t){return t===t.toLowerCase()&&t!==t.toUpperCase()}function Gr(t){return t.length>0&&t.startsWith(t[0].toUpperCase())}function Se(t,e){let r=t+".";if(e.startsWith(r))return e.slice(r.length)}function $r(t,e){return t.coding?.find(r=>r.system===e)?.code}function Pu(t,e,r){t.coding??=[];let n=t.coding.find(i=>i.system===e);n?n.code=r:t.coding.push({system:e,code:r})}function wu(t,e,r,n){return t.qualifiedInterval?.find(i=>es(i,e)&&ku(i,r,t.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function Au(t,e,r){return Zo(t,e,r)[0]}function Zo(t,e,r){return t.qualifiedInterval?.filter(n=>es(n,e)&&(!r||r.includes(n.condition)))??[]}function es(t,e){return Ou(t,e)&&Iu(t,e)}function Ou(t,e){return!t.gender||t.gender===e.gender}function Iu(t,e){return!t.age||li(Mt(e.birthDate).years,t.age)}function ku(t,e,r){return!!t.range&&li(e,t.range,r)}function li(t,e,r){return(e.low?.value===void 0||rs(t,e.low.value,r))&&(e.high?.value===void 0||ts(t,e.high.value,r))}function Mu(t,e){return Number.parseFloat(t.toFixed(e))}function Du(t,e,r){return ce(t,r)===ce(e,r)}function Vu(t,e,r){return ce(t,r)<ce(e,r)}function _u(t,e,r){return ce(t,r)>ce(e,r)}function ts(t,e,r){return ce(t,r)<=ce(e,r)}function rs(t,e,r){return ce(t,r)>=ce(e,r)}function ce(t,e){return e===void 0?t:Math.round(t*Math.pow(10,e))}function Lu(t,e,r){return t.find(n=>typeof e=="string"?$r(n.code||{},r)===e:$r(n.code||{},r)===$r(e,r))}function Nu(t){return Array.isArray(t)?t[0]:t}var Qr=(t,e)=>new Promise((r,n)=>{e?.signal?.throwIfAborted();let i=setTimeout(r,t);e?.signal?.addEventListener("abort",()=>{clearTimeout(i),n(e.signal?.reason)},{once:!0})});function Je(t,e,r){let n=[];for(let i=0;i<r-1;i++){let o=t.indexOf(e);if(o<0)break;n.push(t.slice(0,o)),t=t.slice(o+e.length)}return n.push(t),n}function di(t){let e,r=!1;return function(){return r||(e=t(),r=!0),e}}function ve(t,e){return t?(t.push(e),t):[e]}function _t(t){return t.sort((e,r)=>e.localeCompare(r))}function lt(t){return t.endsWith("/")?t:t+"/"}function ns(t){return t.startsWith("/")?t.slice(1):t}function W(t,e){return new URL(ns(e),lt(t.toString())).toString()}function pi(t,e){return W(t,e).toString().replace("http://","ws://").replace("https://","wss://")}function fi(t){return typeof t=="object"&&!Array.isArray(t)&&!(t instanceof URLSearchParams)&&(t=Object.fromEntries(Object.entries(t).filter(e=>e[1]!==void 0))),new URLSearchParams(t).toString()}var is=/^(([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 Fu(t){return is.test(t)}function Uu(t,e){return t?.meta?.profile?.includes(e)||(t.meta=t.meta??{},t.meta.profile=t.meta.profile??[],t.meta.profile.push(e)),t}function Bu(t,e){return new Map(t.entry?.filter(n=>!!n.resource).map(n=>[Hr(n.resource,e),n.resource]).filter(([n])=>n!==void 0))}function qu(t,e){if(t?.meta?.profile?.includes(e)){let r=t.meta.profile.indexOf(e);t.meta.profile.splice(r,1)}return t}function Wu(t,e){let r=[];if(!t)return r;for(let n=0;n<t.length;n++){let i=e(t[n],n);Array.isArray(i)?r.push(...i):i!==void 0&&r.push(i)}return r}function $u(t,e){let r=0;for(let n of t)r+=e(n);return r}function ju(t,e){let r=0;for(let n of t)e(n)&&r++;return r}function Hu(t,e){let r={};for(let n of t){let i=e(n);r[i]=(r[i]??0)+1}return r}function Gu(t){return t.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("\u201C","&ldquo;").replaceAll("\u201D","&rdquo;").replaceAll("\u2018","&lsquo;").replaceAll("\u2019","&rsquo;").replaceAll("\u2026","&hellip;")}function Lt(t){return t!=null}function Qu(t){throw new Error(`Unexpected value: ${JSON.stringify(t)}`)}var v=Object.freeze([]),zu=()=>{};function mi(t){if(!t)return"";switch(t.type){case"Address":return ss(t.value);case"CodeableConcept":return Te(t.value);case"Coding":return hi(t.value);case"ContactPoint":return t.value.value;case"HumanName":return dt(t.value);case"Quantity":return be(t.value);case"Reference":return os(t.value);default:return t.value?.toString()??""}}function os(t){return t?t.display??t.reference??Vt(t):""}function ss(t,e){if(!t)return"";let r=[];if(t.line&&r.push(...t.line),t.city||t.state||t.postalCode){let n=[];t.city&&n.push(t.city),t.state&&n.push(t.state),t.postalCode&&n.push(t.postalCode),r.push(n.join(", "))}return t.use&&(e?.all||e?.use)&&r.push("["+t.use+"]"),r.join(e?.lineSeparator??", ").trim()}function dt(t,e){if(!t)return"";let r=[];if(t.prefix&&e?.prefix!==!1&&r.push(...t.prefix),t.given&&r.push(...t.given),t.family&&r.push(t.family),t.suffix&&e?.suffix!==!1&&r.push(...t.suffix),t.use&&(e?.all||e?.use)&&r.push("["+t.use+"]"),r.length===0){let n=Ke(t.text);if(n)return n}return r.join(" ").trim()}function Ju(t){let e=[];return t.given&&e.push(...t.given),e.join(" ").trim()}function Ku(t){return Ke(t.family)??""}function Nt(t){return t instanceof Date&&!Number.isNaN(t.getTime())}function Yu(t,e,r){if(!t)return"";let n=new Date(t);return Nt(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...r})):""}function Xu(t,e,r){if(!t)return"";let n=new Date("2000-01-01T"+t+"Z");return Nt(n)?n.toLocaleTimeString(e,r):""}function as(t,e,r){if(!t)return"";let[n=0,i=0,o=0]=t.split(":").map(Number),s=new Date(Date.UTC(1970,0,1,n,i,o));return Nt(s)?new Intl.DateTimeFormat(e,{hour:"numeric",minute:"2-digit",second:o===0?void 0:"numeric",...r,timeZone:"UTC"}).format(s):""}function ze(t,e,r){if(!t)return"";let n=new Date(t);return Nt(n)?n.toLocaleString(e,r):""}function Zu(t,e,r){return!t||!t.start&&!t.end?"":ze(t.start,e,r)+" - "+ze(t.end,e,r)}var el={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},tl={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},rl={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function nl(t){if(!t)return"";let e=[];return il(e,t.repeat),t.event&&e.push(t.event.map(r=>ze(r)).join(", ")),U(e.join(" ").trim())}function il(t,e){if(!e?.periodUnit)return;let r=e.frequency??1,n=e.period??1,i=e.periodUnit;r===1&&n===1?t.push(el[i]):(r===1?t.push("once"):t.push(r+" times"),n===1?t.push("per "+tl[i]):t.push("per "+n+" "+rl[i])),e.dayOfWeek&&t.push("on "+e.dayOfWeek.map(U).join(", ")),e.timeOfDay&&t.push("at "+e.timeOfDay.map(o=>as(o)).join(", "))}function ol(t,e,r=!1){if(r&&e===void 0)throw new Error("Precision must be specified for exclusive ranges");let n=t?.low&&{...t.low,comparator:void 0},i=t?.high&&{...t.high,comparator:void 0};return n?.value===void 0&&i?.value===void 0?"":n?.value!==void 0&&i?.value===void 0?r&&e!==void 0?(n.value=cl(n.value,e),`> ${be(n,e)}`):`>= ${be(n,e)}`:n?.value===void 0&&i?.value!==void 0?r&&e!==void 0?(i.value=al(i.value,e),`< ${be(i,e)}`):`<= ${be(i,e)}`:(n?.unit===i?.unit&&delete n?.unit,`${be(n,e)} - ${be(i,e)}`)}function be(t,e){if(!t)return"";let r=[];return t.comparator&&(r.push(t.comparator),r.push(" ")),t.value!==void 0&&(e!==void 0?r.push(t.value.toFixed(e)):r.push(t.value)),t.unit&&(t.unit!=="%"&&r.at(-1)!==" "&&r.push(" "),r.push(t.unit)),r.join("").trim()}function sl(t){return t?.value===void 0?"":t.value.toLocaleString(void 0,{style:"currency",currency:t.currency??"USD",currencyDisplay:"narrowSymbol"})}function Te(t){if(!t)return"";let e=Ke(t.text);return e||(t.coding?t.coding.map(r=>hi(r)).join(", "):"")}function hi(t,e){let r=Ke(t?.display);if(r){let n=e?Ke(t?.code):void 0;return`${r}${n?" ("+n+")":""}`}return Ke(t?.code)??""}function cs(t){if(!t)return"";let e=[];if(t.valueQuantity)e.push(be(t.valueQuantity));else if(t.valueCodeableConcept)e.push(Te(t.valueCodeableConcept));else{let r=Ke(t.valueString);r&&e.push(r)}return"component"in t&&e.push(t.component.map(r=>cs(r)).join(" / ")),e.join(" / ").trim()}function Ke(t){return typeof t=="string"?t:void 0}function al(t,e,r=1){return(us(t,e)+r)*Math.pow(10,-e)}function cl(t,e,r=1){return(us(t,e)-r)*Math.pow(10,-e)}function us(t,e){return e===void 0?t:Math.round(t*Math.pow(10,e))}var p={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",Element:"Element",ElementDefinition:"ElementDefinition",Expression:"Expression",Extension:"Extension",HumanName:"HumanName",Identifier:"Identifier",MarketingStatus:"MarketingStatus",Meta:"Meta",Money:"Money",MoneyQuantity:"MoneyQuantity",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",SimpleQuantity:"SimpleQuantity",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",xhtml:"xhtml"};function ul(t){for(let e of t.entry??v){let r=e.resource;r.resourceType==="SearchParameter"&&zr(r)}}function Qn(t){let e=Array.isArray(t)?t:t.entry?.map(r=>r.resource)??[];for(let r of e)r?.resourceType==="StructureDefinition"&&r.kind==="resource"&&ds(r.type)}function ds(t){let e=H.types[t];e||(e={searchParamsDetails:{}},H.types[t]=e);let r;return!e.searchParams&&t!=="Binary"&&(e.searchParams={_id:{base:[t],code:"_id",type:"token",expression:t+".id"},_lastUpdated:{base:[t],code:"_lastUpdated",type:"date",expression:t+".meta.lastUpdated"},_compartment:{base:[t],code:"_compartment",type:"reference",expression:t+".meta.compartment",get target(){return r??=fs(),r}},_profile:{base:[t],code:"_profile",type:"uri",expression:t+".meta.profile"},_security:{base:[t],code:"_security",type:"token",expression:t+".meta.security"},_source:{base:[t],code:"_source",type:"uri",expression:t+".meta.source"},_tag:{base:[t],code:"_tag",type:"token",expression:t+".meta.tag"},_project:{base:[t],code:"_project",type:"token",expression:t+".meta.project"}}),e}function zr(t){for(let e of t.base??v){let r=ds(e);r.searchParams||(r.searchParams={}),r.searchParams[t.code]=t}}function kr(t){let e=t.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?ps((t.base?.path??t.path)?.split(".")):e}function ps(t){return t.length===1?t[0]:t.map(U).join("")}function _r(t){return t.kind==="resource"&&t.name!=="Resource"&&t.name!=="DomainResource"}function fs(){return Object.values($n()).filter(_r).map(t=>t.name)}function ll(t){return H.types[t]?.searchParams}function dl(t,e){return H.types[t]?.searchParams?.[e]}function pl(t){let e=t.replaceAll("[x]","").split(".").pop();return ms(e)}function ms(t){let e;return t.length<100?e=t.match(/[A-Z]+(?![a-z])|[A-Z]?[a-z]+|\d+/g)??[]:e=t.split(/(?=[A-Z])/),e.map(ml).join(" ").replace("_"," ").replaceAll(/\s+/g," ")}var fl=new Set(["CDS","ID","IP","JWKS","PKCE","OMB","OID","SOP","UDI","UID","URI","URL"]);function ml(t){let e=t.toUpperCase();return t===e?t:fl.has(e)?e:e.charAt(0)+t.slice(1)}function kt(t,e,r){let n=Me(t,r);if(n)return gi(n.elements,e)}function gi(t,e){let r=t[e]??t[e+"[x]"];if(r)return r;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=t[o];if(s)return s}}}function yi(t,e,r){let n=e.split(/[.[\]]/g),i=Me(t,r);if(!i)return;let o=i,s;for(let a of n){let u;if(a.match(/^[a-z]/)){let l=gi(o.elements,a);if(!l)return;if(l.type.length>1)throw new Error("Multiple matching types in path "+e);u=Me(l.type[0].code),s=l}u&&(o=u)}return s}function hl(t){return!!(t&&typeof t=="object"&&"type"in t&&"value"in t)}function D(t,e){return!(!t||typeof t!="object"||!("resourceType"in t)||e&&t.resourceType!==e)}function J(t,e){return t&&typeof t=="object"&&"reference"in t&&typeof t.reference=="string"?e?t.reference.match(new RegExp(`^${e}(/|\\?)`))!==null:!0:!1}var H={types:{}};function xi(t){switch(t.type){case p.uuid:case p.uri:case p.url:case p.string:case p.oid:case p.markdown:case p.id:case p.code:case p.canonical:case p.base64Binary:case p.SystemString:case p.date:case p.dateTime:case p.instant:return t.value;case p.Identifier:return`${t.value.system??""}|${t.value.value}`;case p.Coding:return ls(t.value);case p.CodeableConcept:return t.value.coding?.map(ls).join(",")??t.value.text;case p.HumanName:return t.value.text?t.value.text:dt(t.value);case p.unsignedInt:case p.positiveInt:case p.integer:case p.decimal:return t.value.toString();case p.boolean:return t.value?"true":"false";case p.Extension:return t.value.url;case p.ContactPoint:return t.value.value;case p.Quantity:case p.Age:case p.Count:case p.Duration:return`${t.value.value}|${t.value.system??""}|${t.value.code??t.value.unit??""}`;case p.Reference:return t.value.reference;default:return ut(t.value)?I(t.value):JSON.stringify(t)}}function ls(t){return t?`${t.system??""}|${t.code}`:""}function pt(t){if(t.startsWith("T"))return t+"T00:00:00.000Z".substring(t.length);if(t.length<=10)return t;try{return new Date(t).toISOString()}catch{return t}}var Ee=()=>[];function Ft(t){return t instanceof F?t.name:t instanceof ne&&t.left instanceof F&&t.right instanceof F?t.left.name+"."+t.right.name:""}var B={empty:(t,e)=>y(e.every(r=>O(r.value))),hasValue:(t,e)=>y(e.length!==0),exists:(t,e,r)=>r?y(e.some(n=>j(r.eval(t,[n])))):y(e.length>0&&e.every(n=>!O(n.value))),all:(t,e,r)=>y(e.every(n=>j(r.eval(t,[n])))),allTrue:(t,e)=>{for(let r of e)if(!r.value)return y(!1);return y(!0)},anyTrue:(t,e)=>{for(let r of e)if(r.value)return y(!0);return y(!1)},allFalse:(t,e)=>{for(let r of e)if(r.value)return y(!1);return y(!0)},anyFalse:(t,e)=>{for(let r of e)if(!r.value)return y(!0);return y(!1)},subsetOf:(t,e,r)=>{if(e.length===0)return y(!0);let n=r.eval(t,Ye(t));return n.length===0?y(!1):y(e.every(i=>n.some(o=>o.value===i.value)))},supersetOf:(t,e,r)=>{let n=r.eval(t,Ye(t));return n.length===0?y(!0):e.length===0?y(!1):y(n.every(i=>e.some(o=>o.value===i.value)))},count:(t,e)=>[{type:p.integer,value:e.length}],distinct:(t,e)=>{let r=[];for(let n of e)r.some(i=>i.value===n.value)||r.push(n);return r},isDistinct:(t,e)=>y(e.length===B.distinct(t,e).length),where:(t,e,r)=>e.filter(n=>j(r.eval(t,[n]))),select:(t,e,r)=>e.flatMap(n=>r.eval({parent:t,variables:{$this:n}},[n])),repeat:Ee,ofType:(t,e,r)=>{let n=Ft(r);return n?e.filter(i=>Qe(i,n)):[]},single:(t,e)=>{if(e.length>1)throw new Error("Expected input length one for single()");return e.length===0?[]:e.slice(0,1)},first:(t,e)=>e.length===0?[]:e.slice(0,1),last:(t,e)=>e.length===0?[]:e.slice(-1,e.length),tail:(t,e)=>e.length===0?[]:e.slice(1,e.length),skip:(t,e,r)=>{let n=r.eval(t,e)[0]?.value;if(typeof n!="number")throw new TypeError("Expected a number for skip(num)");return n>=e.length?[]:n<=0?e:e.slice(n,e.length)},take:(t,e,r)=>{let n=r.eval(t,e)[0]?.value;if(typeof n!="number")throw new TypeError("Expected a number for take(num)");return n<=0?[]:e.slice(0,n)},intersect:(t,e,r)=>{if(!r)return e;let n=r.eval(t,Ye(t)),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:(t,e,r)=>{if(!r)return e;let n=r.eval(t,Ye(t)),i=[];for(let o of e)n.some(s=>s.value===o.value)||i.push(o);return i},union:(t,e,r)=>{if(!r)return e;let n=r.eval(t,Ye(t));return At([...e,...n])},combine:(t,e,r)=>{if(!r)return e;let n=r.eval(t,Ye(t));return[...e,...n]},htmlChecks:(t,e,r)=>[E(!0)],iif:(t,e,r,n,i)=>{let o=r.eval(t,e);if(o.length>1||o.length===1&&typeof o[0].value!="boolean")throw new Error("Expected criterion to evaluate to a Boolean");return j(o)?n.eval(t,e):i?i.eval(t,e):[]},toBoolean:(t,e)=>{if(e.length===0)return[];let[{value:r}]=fe(e,1);if(typeof r=="boolean")return[{type:p.boolean,value:r}];if(typeof r=="number"&&(r===0||r===1))return y(!!r);if(typeof r=="string"){let n=r.toLowerCase();if(["true","t","yes","y","1","1.0"].includes(n))return y(!0);if(["false","f","no","n","0","0.0"].includes(n))return y(!1)}return[]},convertsToBoolean:(t,e)=>e.length===0?[]:y(B.toBoolean(t,e).length===1),toInteger:(t,e)=>{if(e.length===0)return[];let[{value:r}]=fe(e,1);return typeof r=="number"?[{type:p.integer,value:r}]:typeof r=="string"&&/^[+-]?\d+$/.exec(r)?[{type:p.integer,value:Number.parseInt(r,10)}]:typeof r=="boolean"?[{type:p.integer,value:r?1:0}]:[]},convertsToInteger:(t,e)=>e.length===0?[]:y(B.toInteger(t,e).length===1),toDate:(t,e)=>{if(e.length===0)return[];let[{value:r}]=fe(e,1);return typeof r=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(r)?[{type:p.date,value:pt(r)}]:[]},convertsToDate:(t,e)=>e.length===0?[]:y(B.toDate(t,e).length===1),toDateTime:(t,e)=>{if(e.length===0)return[];let[{value:r}]=fe(e,1);return typeof r=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(r)?[{type:p.dateTime,value:pt(r)}]:[]},convertsToDateTime:(t,e)=>e.length===0?[]:y(B.toDateTime(t,e).length===1),toDecimal:(t,e)=>{if(e.length===0)return[];let[{value:r}]=fe(e,1);return typeof r=="number"?[{type:p.decimal,value:r}]:typeof r=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(r)?[{type:p.decimal,value:Number.parseFloat(r)}]:typeof r=="boolean"?[{type:p.decimal,value:r?1:0}]:[]},convertsToDecimal:(t,e)=>e.length===0?[]:y(B.toDecimal(t,e).length===1),toQuantity:(t,e)=>{if(e.length===0)return[];let[{value:r}]=fe(e,1);return L(r)?[{type:p.Quantity,value:r}]:typeof r=="number"?[{type:p.Quantity,value:{value:r,unit:"1"}}]:typeof r=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(r)?[{type:p.Quantity,value:{value:Number.parseFloat(r),unit:"1"}}]:typeof r=="boolean"?[{type:p.Quantity,value:{value:r?1:0,unit:"1"}}]:[]},convertsToQuantity:(t,e)=>e.length===0?[]:y(B.toQuantity(t,e).length===1),toString:(t,e)=>{if(e.length===0)return[];let[{value:r}]=fe(e,1);return r==null?[]:L(r)?[{type:p.string,value:`${r.value} '${r.unit}'`}]:[{type:p.string,value:r.toString()}]},convertsToString:(t,e)=>e.length===0?[]:y(B.toString(t,e).length===1),toTime:(t,e)=>{if(e.length===0)return[];let[{value:r}]=fe(e,1);if(typeof r=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(r);if(n)return[{type:p.time,value:pt("T"+n[1])}]}return[]},convertsToTime:(t,e)=>e.length===0?[]:y(B.toTime(t,e).length===1),indexOf:(t,e,r)=>Y((n,i)=>n.indexOf(i),t,e,r),substring:(t,e,r,n)=>Y((i,o,s)=>{let a=o,u=s?a+s:i.length;return a<0||a>=i.length?void 0:i.substring(a,u)},t,e,r,n),startsWith:(t,e,r)=>Y((n,i)=>n.startsWith(i),t,e,r),endsWith:(t,e,r)=>Y((n,i)=>n.endsWith(i),t,e,r),contains:(t,e,r)=>Y((n,i)=>n.includes(i),t,e,r),upper:(t,e)=>Y(r=>r.toUpperCase(),t,e),lower:(t,e)=>Y(r=>r.toLowerCase(),t,e),replace:(t,e,r,n)=>Y((i,o,s)=>i.replaceAll(o,s),t,e,r,n),matches:(t,e,r)=>Y((n,i)=>!!new RegExp(i).exec(n),t,e,r),replaceMatches:(t,e,r,n)=>Y((i,o,s)=>i.replaceAll(new RegExp(o,"g"),s.replaceAll(/\$\{(\w+)\}/g,"$<$1>")),t,e,r,n),length:(t,e)=>Y(r=>r.length,t,e),toChars:(t,e)=>Y(r=>r?r.split(""):void 0,t,e),encode:Ee,decode:Ee,escape:Ee,unescape:Ee,trim:Ee,split:Ee,join:(t,e,r)=>{let n=r?.eval(t,Ye(t))[0]?.value??"";if(typeof n!="string")throw new TypeError("Separator must be a string.");return[{type:p.string,value:e.map(i=>i.value?.toString()??"").join(n)}]},abs:(t,e)=>pe(Math.abs,t,e),ceiling:(t,e)=>pe(Math.ceil,t,e),exp:(t,e)=>pe(Math.exp,t,e),floor:(t,e)=>pe(Math.floor,t,e),ln:(t,e)=>pe(Math.log,t,e),log:(t,e,r)=>pe((n,i)=>Math.log(n)/Math.log(i),t,e,r),power:(t,e,r)=>pe(Math.pow,t,e,r),round:(t,e,...r)=>pe((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},t,e,...r),sqrt:(t,e)=>pe(Math.sqrt,t,e),truncate:(t,e)=>pe(r=>Math.trunc(r),t,e),children:Ee,descendants:Ee,trace:(t,e,r)=>e,now:()=>[{type:p.dateTime,value:new Date().toISOString()}],timeOfDay:()=>[{type:p.time,value:new Date().toISOString().substring(11)}],today:()=>[{type:p.date,value:new Date().toISOString().substring(0,10)}],between:(t,e,r,n,i)=>{let o=B.toDateTime(t,r.eval(t,e));if(o.length===0)throw new Error("Invalid start date");let s=B.toDateTime(t,n.eval(t,e));if(s.length===0)throw new Error("Invalid end date");let a=i.eval(t,e)[0]?.value;if(a!=="years"&&a!=="months"&&a!=="days")throw new Error("Invalid units");let u=Mt(o[0].value,s[0].value);return[{type:p.Quantity,value:{value:u[a],unit:a}}]},is:(t,e,r)=>{let n=Ft(r);return n?e.map(i=>({type:p.boolean,value:Qe(i,n)})):[]},not:(t,e)=>B.toBoolean(t,e).map(r=>({type:p.boolean,value:!r.value})),resolve:(t,e)=>e.map(r=>{let n=r.value,i;if(typeof n=="string")i=n;else if(typeof n=="object"){let o=n;if(o.resource)return E(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:p.BackboneElement,value:void 0}}).filter(r=>!!r.value),as:(t,e,r)=>{let n=Ft(r);if(!n)throw new Error(`Expected a valid type identifier as the right operand of 'as', but found ${r.toString()}`);let i=N(e);return i&&Qe(i,n)?[i]:[]},type:(t,e)=>e.map(({value:r})=>typeof r=="boolean"?{type:p.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof r=="number"?{type:p.BackboneElement,value:{namespace:"System",name:"Integer"}}:D(r)?{type:p.BackboneElement,value:{namespace:"FHIR",name:r.resourceType}}:{type:p.BackboneElement,value:null}),conformsTo:(t,e,r)=>{let n=r.eval(t,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:p.boolean,value:o.value?.resourceType===i}))},getResourceKey:(t,e)=>{let r=e[0]?.value;return r?.id?[{type:p.id,value:r.id}]:[]},getReferenceKey:(t,e,r)=>{let n=e[0]?.value;if(!n?.reference)return[];let i="";return r instanceof F&&(i=r.name),i&&!n.reference.startsWith(i+"/")?[]:[{type:p.id,value:K(n)}]},extension:(t,e,r)=>{let n=r.eval(t,e)[0].value,i=e?.[0]?.value;if(i){let o=ae(i,n);if(o)return[{type:p.Extension,value:o}]}return[]}};function Y(t,e,r,...n){if(r.length===0)return[];let[{value:i}]=fe(r,1);if(typeof i!="string")throw new TypeError("String function cannot be called with non-string");let o=n.map(a=>a?.eval(e,r)[0]?.value),s=t(i,...o);return s===void 0?[]:Array.isArray(s)?s.map(E):[E(s)]}function pe(t,e,r,...n){if(r.length===0)return[];let[{value:i}]=fe(r,1),o=L(i),s=o?i.value:i;if(typeof s!="number")throw new TypeError("Math function cannot be called with non-number");let a=t(s,...n.map(d=>d.eval(e,r)[0]?.value)),u=o?p.Quantity:r[0].type,l=o?{...i,value:a}:a;return[{type:u,value:l}]}function fe(t,e){if(t.length!==e)throw new Error(`Expected ${e} arguments`);for(let r of t)if(r==null)throw new Error("Expected non-null argument");return t}function Ye(t){let e=t;for(;e.parent?.variables.$this;)e=e.parent;return[e.variables.$this]}var Re=class{constructor(e,r){c(this,"original");c(this,"child");this.original=e,this.child=r}eval(e,r){try{if(r.length>0){let n=[];for(let i of r)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()}},G=class{constructor(e){c(this,"value");this.value=e}eval(){return[this.value]}toString(){let e=this.value.value;return typeof e=="string"?`'${e}'`:e.toString()}},F=class{constructor(e){c(this,"name");this.name=e}eval(e,r){if(this.name==="$this")return r;let n=this.getVariable(e);if(n)return[n];if(this.name.startsWith("%"))throw new Error(`Undefined variable ${this.name}`);return r.flatMap(i=>this.evalValue(i)).filter(i=>i?.value!==void 0)}getVariable(e){let r=e.variables[this.name];if(r!==void 0)return r;if(e.parent)return this.getVariable(e.parent)}evalValue(e){let r=e.value;if(!(!r||typeof r!="object"))return D(r,this.name)?("path"in e||(e.path=r.resourceType),e):Nr(e,this.name)}toString(){return this.name}},Ut=class{eval(){return[]}toString(){return"{}"}},Bt=class extends St{constructor(r,n,i){super(r,n);c(this,"impl");this.impl=i}eval(r,n){return this.impl(this.child.eval(r,n))}toString(){return this.operator+this.child.toString()}},Ce=class extends w{constructor(e,r){super("as",e,r)}eval(e,r){return B.as(e,this.left.eval(e,r),this.right)}},q=class extends w{constructor(r,n,i,o){super(r,n,i);c(this,"impl");this.impl=o}eval(r,n){let i=this.left.eval(r,n),o=this.right.eval(r,n);if(i.length<1||o.length<1)return[];let s=N(i)?.value,a=N(o)?.value,u=L(s)?s.value:s,l=L(a)?a.value:a,d=this.impl(u,l);return typeof d=="boolean"?y(d):L(s)?[{type:p.Quantity,value:{...s,value:d}}]:[E(d)]}},hs=Object.freeze({type:"string",value:""}),qt=class extends w{constructor(e,r){super("&",e,r)}eval(e,r){let n=N(this.left.eval(e,r))??hs,i=N(this.right.eval(e,r))??hs;if(typeof n.value!="string")throw new Error(`Expected string operand for &, but got ${n.type}`);if(typeof i.value!="string")throw new Error(`Expected string operand for &, but got ${i.type}`);return[{type:p.string,value:n.value+i.value}]}},Wt=class extends w{constructor(e,r){super("contains",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return y(n.some(o=>o.value===i[0].value))}},$t=class extends w{constructor(e,r){super("in",e,r)}eval(e,r){let n=N(this.left.eval(e,r)),i=this.right.eval(e,r);return n?y(i.some(o=>ct(n,o)[0].value)):[]}},ne=class extends w{constructor(e,r){super(".",e,r)}eval(e,r){return this.right.eval(e,this.left.eval(e,r))}toString(){return`${this.left.toString()}.${this.right.toString()}`}},Ve=class extends w{constructor(e,r){super("|",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return At([...n,...i])}},jt=class extends w{constructor(e,r){super("=",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return ei(n,i)}},Ht=class extends w{constructor(e,r){super("!=",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return ti(n,i)}},Gt=class extends w{constructor(e,r){super("~",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return qr(n,i)}},Qt=class extends w{constructor(e,r){super("!~",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return Zn(qr(n,i))}},_e=class extends w{constructor(e,r){super("is",e,r)}eval(e,r){let n=this.left.eval(e,r);if(n.length!==1)return[];let i=Ft(this.right);return i?y(Qe(n[0],i)):[]}},zt=class extends w{constructor(e,r){super("and",e,r)}eval(e,r){let n=N(this.left.eval(e,r),"boolean"),i=N(this.right.eval(e,r),"boolean");return n?.value===!0&&i?.value===!0?y(!0):n?.value===!1||i?.value===!1?y(!1):[]}},Jt=class extends w{constructor(e,r){super("or",e,r)}eval(e,r){let n=N(this.left.eval(e,r),"boolean"),i=N(this.right.eval(e,r),"boolean");return n?.value===!1&&i?.value===!1?y(!1):n?.value||i?.value?y(!0):[]}},Kt=class extends w{constructor(e,r){super("xor",e,r)}eval(e,r){let n=N(this.left.eval(e,r),"boolean"),i=N(this.right.eval(e,r),"boolean");return!n||!i?[]:y(n.value!==i.value)}},Yt=class extends w{constructor(e,r){super("implies",e,r)}eval(e,r){let n=N(this.left.eval(e,r),"boolean"),i=N(this.right.eval(e,r),"boolean");return i?.value===!0||n?.value===!1?y(!0):!n||!i?[]:y(!1)}},ie=class{constructor(e,r){c(this,"name");c(this,"args");this.name=e,this.args=r}eval(e,r){let n=B[this.name];if(!n)throw new Error("Unrecognized function: "+this.name);return n(e,r,...this.args)}toString(){return`${this.name}(${this.args.map(e=>e.toString()).join(", ")})`}},Le=class{constructor(e,r){c(this,"left");c(this,"expr");this.left=e,this.expr=r}eval(e,r){let n=this.expr.eval(e,r);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,r);return i in o?[o[i]]:[]}toString(){return`${this.left.toString()}[${this.expr.toString()}]`}};var gl=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],yl=/^\d{4}-\d{2}[\dT:.+\-Z]*(?=[\s)\]]|$)/,xl={"'":"'",'"':'"',"`":"`",r:"\r",n:`
2
2
  `,t:" ",f:"\f","\\":"\\"},Pe=class{constructor(e,r,n,i){c(this,"str");c(this,"keywords");c(this,"operators");c(this,"dateTimeLiterals");c(this,"symbolRegex");c(this,"result",[]);c(this,"pos",{index:0,line:1,column:0});c(this,"markStack",[]);this.str=e,this.keywords=r,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 r=this.peek();return e==="/"&&r==="*"?this.consumeMultiLineComment():e==="/"&&r==="/"?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(r)?this.consumeSymbol():(e==="$"||e==="%")&&(r==="'"||r==='"'||r==="`")?this.consumeQuotedSymbol(r):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 r="",n;for(;n=this.consumeChar(e);)r+=n;let i=this.buildToken(e==="`"?"Symbol":"String",r);return this.advance(),i}consumeChar(e){let r=this.curr();if(r==="\\"){this.advance();let n=this.curr(),i=xl[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(Number.parseInt(o,16))):"u"}return this.consumeChar(e)}return r===e||!r?"":(this.advance(),r)}consumeQuotedSymbol(e){this.mark();let r=this.pos.index;this.advance(),this.consumeString(e);let n=this.str.substring(r,this.pos.index);return this.buildToken("Symbol",n)}consumeDateTime(){this.advance();let e=this.pos.index;this.consumeWhile(()=>/[\d-]/.exec(this.curr()));let r=!1,n=!1;if(this.curr()==="T"&&(r=!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")&&r&&!n&&(i+="Z"),this.buildToken("DateTime",i)}consumeNumber(){let e=this.pos.index,r="Number";this.consumeWhile(()=>/\d/.exec(this.curr())),this.curr()==="."&&/\d/.exec(this.peek())&&(this.advance(),this.consumeWhile(()=>/\d/.exec(this.curr())));let n=this.curr();if(n==="-"&&this.dateTimeLiterals)return yl.test(this.str.substring(e))?(this.pos.index=e-1,this.consumeDateTime()):this.consumeUnquotedString(e);if(n===" ")vl(this.peekToken())&&(r="Quantity",this.consumeToken());else if(n&&/[a-zA-Z_$]/.exec(n))return this.consumeUnquotedString(e);return this.buildToken(r,this.str.substring(e,this.pos.index))}consumeUnquotedString(e){return this.pos.index=e,this.buildToken("String",this.consumeWhile(()=>this.symbolRegex.exec(this.curr())))}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(),r=this.peek(),n=e+r;return this.operators.includes(n)?(this.advance(),this.advance(),this.buildToken(n,n)):(this.advance(),this.buildToken(e,e))}consumeWhile(e){let r=this.pos.index;for(;this.pos.index<this.str.length&&e();)this.advance();return this.str.substring(r,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,r){let n=this.markStack.pop();if(!n)throw new Error("No mark for token");return{id:e,value:r,...n}}};function vl(t){return!!(t&&(t.id==="String"||t.id==="Symbol"&&gl.includes(t.value)))}var Xt=["true","false"],Zt=["!=","!~","<=",">=","{}","->"];function gs(t){return new Pe(t,Xt,Zt).tokenize()}var S={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},Tl={parse(t){let e=t.consumeAndParse();if(!t.match(")"))throw new Error("Parse error: expected `)` got `"+t.peek()?.value+"`");return e}},Sl={parse(t,e){let r=t.consumeAndParse();if(!t.match("]"))throw new Error("Parse error: expected `]`");return new Le(e,r)},precedence:S.Indexer},bl={parse(t,e){if(!(e instanceof F))throw new Error("Unexpected parentheses");let r=[];for(;!t.match(")");)r.push(t.consumeAndParse()),t.match(",");return new ie(e.name,r)},precedence:S.FunctionCall};function El(t){let e=t.split(" "),r=Number.parseFloat(e[0]),n=e[1];return n?.startsWith("'")&&n.endsWith("'")?n=n.substring(1,n.length-1):n="{"+n+"}",{value:r,unit:n}}function ft(){return new bt().registerPrefix("String",{parse:(t,e)=>new G({type:p.string,value:e.value})}).registerPrefix("DateTime",{parse:(t,e)=>new G({type:p.dateTime,value:pt(e.value)})}).registerPrefix("Quantity",{parse:(t,e)=>new G({type:p.Quantity,value:El(e.value)})}).registerPrefix("Number",{parse:(t,e)=>new G({type:e.value.includes(".")?p.decimal:p.integer,value:Number.parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new G({type:p.boolean,value:!0})}).registerPrefix("false",{parse:()=>new G({type:p.boolean,value:!1})}).registerPrefix("Symbol",{parse:(t,e)=>new F(e.value)}).registerPrefix("{}",{parse:()=>new Ut}).registerPrefix("(",Tl).registerInfix("[",Sl).registerInfix("(",bl).prefix("+",S.UnaryAdd,(t,e)=>new Bt("+",e,r=>r)).prefix("-",S.UnarySubtract,(t,e)=>new q("-",e,e,(r,n)=>-n)).infixLeft(".",S.Dot,(t,e,r)=>new ne(t,r)).infixLeft("/",S.Divide,(t,e,r)=>new q("/",t,r,(n,i)=>n/i)).infixLeft("*",S.Multiply,(t,e,r)=>new q("*",t,r,(n,i)=>n*i)).infixLeft("+",S.Add,(t,e,r)=>new q("+",t,r,(n,i)=>n+i)).infixLeft("-",S.Subtract,(t,e,r)=>new q("-",t,r,(n,i)=>n-i)).infixLeft("|",S.Union,(t,e,r)=>new Ve(t,r)).infixLeft("=",S.Equals,(t,e,r)=>new jt(t,r)).infixLeft("!=",S.NotEquals,(t,e,r)=>new Ht(t,r)).infixLeft("~",S.Equivalent,(t,e,r)=>new Gt(t,r)).infixLeft("!~",S.NotEquivalent,(t,e,r)=>new Qt(t,r)).infixLeft("<",S.LessThan,(t,e,r)=>new q("<",t,r,(n,i)=>n<i)).infixLeft("<=",S.LessThanOrEquals,(t,e,r)=>new q("<=",t,r,(n,i)=>n<=i)).infixLeft(">",S.GreaterThan,(t,e,r)=>new q(">",t,r,(n,i)=>n>i)).infixLeft(">=",S.GreaterThanOrEquals,(t,e,r)=>new q(">=",t,r,(n,i)=>n>=i)).infixLeft("&",S.Ampersand,(t,e,r)=>new qt(t,r)).infixLeft("and",S.And,(t,e,r)=>new zt(t,r)).infixLeft("as",S.As,(t,e,r)=>new Ce(t,r)).infixLeft("contains",S.Contains,(t,e,r)=>new Wt(t,r)).infixLeft("div",S.Divide,(t,e,r)=>new q("div",t,r,(n,i)=>Math.trunc(n/i))).infixLeft("in",S.In,(t,e,r)=>new $t(t,r)).infixLeft("is",S.Is,(t,e,r)=>new _e(t,r)).infixLeft("mod",S.Modulo,(t,e,r)=>new q("mod",t,r,(n,i)=>n%i)).infixLeft("or",S.Or,(t,e,r)=>new Jt(t,r)).infixLeft("xor",S.Xor,(t,e,r)=>new Kt(t,r)).infixLeft("implies",S.Implies,(t,e,r)=>new Yt(t,r))}var Rl=ft();function er(t){return new Re(t,Rl.construct(gs(t)).consumeAndParse())}function Cl(t,e,r={},n=void 0){let i=Array.isArray(e)?e:[e];for(let o=0;o<i.length;o++){let s=i[o];typeof s=="object"&&"type"in s&&"value"in s||(i[o]=E(i[o]))}return k(t,i,r,n).map(o=>o.value)}function k(t,e,r={},n=void 0){let i;if(typeof t=="string"){let o=n?.get(t);i=o??er(t),n&&!o&&n.set(t,i)}else i=t;return i.eval({variables:r},e).map(o=>{let s={type:o.type,value:o.value?.valueOf()};return"path"in o&&(s.path=o.path),s})}function Pl(t){let e=[];for(let r of t)r.type===p.Range?e.push([r.value?.low?.value,r.value?.high?.value]):typeof r.value=="number"&&e.push([r.value,r.value]);return e}function vi(t){let e=[];for(let r of t){let n=Ot(r.value);n&&e.push(n)}return e}function Ti(t){let e=new Set;for(let r of t){let n=mi(r);n&&e.add(n)}return Array.from(e)}function Si(t){let e=new Set;for(let r of t){let{value:n}=r;n&&(de(n)?e.add(n):J(n)?e.add(n.reference):ut(n)?e.add(I(n)):typeof n.identifier=="object"&&e.add(`identifier:${n.identifier.system}|${n.identifier.value}`))}return Array.from(e)}function wl(t){let e=[];for(let r of t){let{value:n}=r;typeof n=="number"?e.push({value:n}):L(n)&&e.push(n)}return e}function Al(t){let e=new Set;for(let r of t)de(r.value)&&e.add(r.value);return Array.from(e)}function bi(t,e={}){let r=[];for(let n of t)Ol(e,r,n);return r}function Ol(t,e,r){let{type:n,value:i}=r;switch(n){case p.Identifier:Il(e,t,i);break;case p.CodeableConcept:kl(e,t,i);break;case p.Coding:ys(e,t,i);break;case p.ContactPoint:Ml(e,t,i);break;default:Xe(e,t,void 0,i?.toString())}}function Il(t,e,r){r?.type?.text&&Xe(t,e,e.textSearchSystem,r.type.text),Xe(t,e,r?.system,r?.value)}function kl(t,e,r){r?.text&&Xe(t,e,e.textSearchSystem,r.text);for(let n of r?.coding??v)ys(t,e,n)}function ys(t,e,r){r&&(r.display&&Xe(t,e,e.textSearchSystem,r.display),Xe(t,e,r.system,r.code))}function Ml(t,e,r){r&&Xe(t,e,r.system,r.value?.toLocaleLowerCase())}function Xe(t,e,r,n){(r||n)&&!t.some(i=>i.system===r&&i.value===n)&&t.push({system:r,value:n&&e.caseInsensitive?n.toLocaleLowerCase():n})}var Dl=20,Vl=1e3,g={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:g.CONTAINS,exact:g.EXACT,above:g.ABOVE,below:g.BELOW,text:g.TEXT,not:g.NOT,in:g.IN,"not-in":g.NOT_IN,"of-type":g.OF_TYPE,missing:g.MISSING,identifier:g.IDENTIFIER,iterate:g.ITERATE},Ci={eq:g.EQUALS,ne:g.NOT_EQUALS,lt:g.LESS_THAN,le:g.LESS_THAN_OR_EQUALS,gt:g.GREATER_THAN,ge:g.GREATER_THAN_OR_EQUALS,sa:g.STARTS_AFTER,eb:g.ENDS_BEFORE,ap:g.APPROXIMATELY,sw:g.STARTS_WITH};function mt(t,e){if(!t)throw new Error("Invalid search URL");let r="",n;if(typeof t=="string")if(t.includes("?")){let[s,a]=t.split("?");r=s,n=new URLSearchParams(a)}else r=t;else typeof t=="object"&&(r=t.pathname,n=t.searchParams);let i;r.includes("/")?i=r.split("/").filter(Boolean).pop():i=r;let o=[];if(n)for(let s of n)o.push(s);if(e)for(let[s,a]of Object.entries(e))if(Array.isArray(a))for(let u of a)o.push([s,u]);else o.push([s,a??""]);return _l(i,o)}function _l(t,e){let r={resourceType:t},n=new Set;for(let[i,o]of e)Ll(r,n,i,o);return r}function Ei(t,e,r){let n=`${r.code}\0${r.operator}\0${r.value}`;e.has(n)||(e.add(n),t.filters=ve(t.filters,r))}function Ll(t,e,r,n){let i,o,s=r.indexOf(":");if(s>=0?(i=r.substring(0,s),o=r.substring(s+1)):(i=r,o=""),i!=="_"){if(i==="_has"||r.includes(".")){Ei(t,e,{code:r,operator:g.EQUALS,value:n});return}switch(i){case"_sort":Nl(t,n);break;case"_cursor":t.cursor=n;break;case"_count":t.count=Number.parseInt(n,10);break;case"_offset":t.offset=Number.parseInt(n,10);break;case"_total":t.total=n;break;case"_summary":n==="count"?(t.total="accurate",t.count=0):(n==="true"||n==="data"||n==="text")&&(t.summary=n);break;case"_include":{let a=xs(n);o==="iterate"&&(a.modifier=g.ITERATE),t.include=ve(t.include,a);break}case"_revinclude":{let a=xs(n);o==="iterate"&&(a.modifier=g.ITERATE),t.revInclude=ve(t.revInclude,a);break}case"_fields":case"_elements":t.fields=n.split(",");break;case"_type":t.types=n.split(",");break;case"_format":t.format=n;break;case"_pretty":t.pretty=n==="true";break;default:{let a=H.types[t.resourceType]?.searchParams?.[i];a?Ei(t,e,Ss(a,g.EQUALS,o,n)):Ei(t,e,Ul(i,o,n))}}}}function Nl(t,e){for(let r of e.split(",")){let n,i=!1;r.startsWith("-")?(n=r.substring(1),i=!0):n=r,t.sortRules||(t.sortRules=[]),t.sortRules.push({code:n,descending:i})}}var Fl=[g.MISSING,g.PRESENT];function Ss(t,e,r,n){if(Fl.includes(r||e))return{code:t.code,operator:r||e,value:n};switch(t.type){case"number":case"date":case"quantity":{let{operator:i,value:o}=Bl(n,r||g.EQUALS);if(!vs(t,o))throw new m(A(`Invalid format for ${t.type} search parameter: ${o}`));return{code:t.code,operator:i,value:o}}case"reference":case"string":case"token":case"uri":{if(!vs(t,n))throw new m(A(`Invalid format for ${t.type} search parameter: ${n}`));return{code:t.code,operator:ql(r)??e,value:n}}default:throw new Error("Unrecognized search parameter type: "+t.type)}}function Ul(t,e,r){let n=g.EQUALS;if(e)n=e;else if(r.length>=2){let i=r.substring(0,2);i in Ci&&(r.length===2||r.at(2)?.match(/\d/))&&(n=i,r=r.substring(i.length))}return{code:t,operator:n,value:r}}function Bl(t,e){let r=t.substring(0,2),n=Ci[r];return n?{operator:n,value:t.substring(2)}:{operator:e,value:t}}function ql(t){return Ri[t]}function xs(t){let e=t.split(":");if(e.includes("*"))throw new m(A("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new m(A(`Invalid include value '${t}': 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 m(A(`Invalid include value '${t}'`))}function vs(t,e){return t.type==="date"?Ge(e):!0}var Wl=/{{([^{}]+)}}/g;function $l(t,e,r=[]){return t=t.replaceAll(Wl,(n,i)=>{let o=k(i,r,e);return o.length!==1?"":xi(o[0])}),mt(t)}function jl(t){let e=[];t.fields&&e.push("_fields="+t.fields.join(","));for(let r of t.filters??v)e.push(Hl(r));t.sortRules&&t.sortRules.length>0&&e.push(Gl(t.sortRules)),t.cursor!==void 0&&e.push("_cursor="+encodeURIComponent(t.cursor)),t.offset!==void 0&&t.offset!==0&&e.push("_offset="+t.offset),t.count!==void 0&&e.push("_count="+t.count),t.total!==void 0&&e.push("_total="+t.total),t.types&&t.types.length>0&&e.push("_type="+t.types.join(","));for(let r of t.include??v)e.push(Ts("_include",r));for(let r of t.revInclude??v)e.push(Ts("_revinclude",r));return e.length===0?"":(_t(e),"?"+e.join("&"))}function Hl(t){let e=t.operator in Ri?":"+t.operator:"",r=t.operator!==g.EQUALS&&t.operator in Ci?t.operator:"";return`${t.code}${e}=${r}${encodeURIComponent(t.value)}`}function Gl(t){return"_sort="+t.map(e=>e.descending?"-"+e.code:e.code).join(",")}function Ts(t,e){return t+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function ht(t){let e=[],r="",n=!1;for(let i of t)n?(r+=i,n=!1):i==="\\"?n=!0:i===","?(e.push(r),r=""):r+=i;return e.push(r),e}function Ql(t,e){return A(`Invalid modifier :${t} for ${e}`)}function zl(t,e){return t in Ri?Ql(t,e):A(`Invalid operator ${t} for ${e}`)}function Jl(t){return t.types??[t.resourceType]}function tr(t,e){if(e.resourceType!==t.resourceType)return!1;for(let r of e.filters??v)if(!Yl(t,e,r))return!1;return!0}var Kl=new ee(1e3);function Yl(t,e,r){let n=H.types[e.resourceType]?.searchParams?.[r.code];if(!n)return!1;let i=k(n.expression,[E(t)],void 0,Kl);if(r.operator===g.MISSING||r.operator===g.PRESENT)return Xl(i,r);switch(n.type){case"reference":return Zl(n,i,r);case"string":case"uri":return rd(i,r);case"token":return ed(i,r);case"date":return id(i,r);default:return!1}}function Xl(t,e){let r=t.length>0;return(e.operator===g.MISSING&&e.value==="false"||e.operator===g.PRESENT&&e.value==="true")===r}function Zl(t,e,r){let n=Jr(r.operator);if(r.value===""&&e.length===0)return r.operator===g.EQUALS;let i=Si(e);for(let o of ht(r.value)){let s=!1;if(o.includes("/")?s=i.includes(o):(t.target?.length===1||r.code==="_compartment")&&(s=i.some(a=>a?.endsWith("/"+o))),s)return!n}return n}function ed(t,e){let r=bi(t),n=ht(e.value),i=Jr(e.operator);for(let o of r)for(let s of n)if(td(o,s))return!i;return i}function td(t,e){if(e.includes("|")){let[r,n]=e.split("|").map(i=>i.toLowerCase());return!r&&!n?!1:r?t.system?.toLowerCase()===r&&(!n||t.value?.toLowerCase()===n):!t.system&&t.value?.toLowerCase()===n}return t.value?.toLowerCase()===e.toLowerCase()}function rd(t,e){let r=Ti(t),n=ht(e.value),i=Jr(e.operator);for(let o of r)for(let s of n)if(nd(o,s))return!i;return i}function nd(t,e){return t.toLowerCase().includes(e.toLowerCase())}function id(t,e){let r=vi(t),n=ht(e.value),i=Jr(e.operator);for(let o of r)for(let s of n)if(od(o,e.operator,s))return!i;return i}function od(t,e,r){if(!t)return!1;let n=Ot(r);if(!n)return!1;let i=t.start??"0000",o=t.end??"9999",s=n.start,a=n.end;switch(e){case g.APPROXIMATELY:case g.EQUALS:case g.NOT_EQUALS:return i<a&&o>s;case g.LESS_THAN:return i<s;case g.GREATER_THAN:return o>a;case g.LESS_THAN_OR_EQUALS:return i<=a;case g.GREATER_THAN_OR_EQUALS:return o>=s;case g.STARTS_AFTER:return i>a;case g.ENDS_BEFORE:return o<s;default:return!1}}function Jr(t){return t===g.NOT_EQUALS||t===g.NOT}var sd={resourceType:"*"},bs=["DomainConfiguration","JsonWebKey","Login"],Es=["Package","PackageRelease","PackageInstallation","Project","ProjectMembership","User","UserSecurityRequest"],Ne={READ:"read",VREAD:"vread",UPDATE:"update",DELETE:"delete",HISTORY:"history",CREATE:"create",SEARCH:"search"},Rs=[Ne.READ,Ne.VREAD,Ne.HISTORY,Ne.SEARCH];function ad(t,e){return Pi(t,Ne.SEARCH,e)}function cd(t,e){return bs.includes(e)?!1:Pi(t,Ne.UPDATE,e)}function Pi(t,e,r){return!!t.resource?.some(n=>Ps(n,r,e))}function ud(t,e){return!!Cs(e,Ne.UPDATE,t)}function Cs(t,e,r){return r?r.resource?.find(n=>ld(t,e,n)):sd}function ld(t,e,r){let n=t.resourceType;return Ps(r,n,e)?n==="Binary"?!0:!(r.compartment&&!t.meta?.compartment?.some(i=>i.reference===r.compartment?.reference)||r.criteria&&!tr(t,mt(r.criteria))):!1}function Ps(t,e,r){return t.resourceType!==e&&(t.resourceType!=="*"||Es.includes(e))?!1:t.interaction?t.interaction.includes(r):!t.readonly||Rs.includes(r)}var dd={FIRST:"first",APPLICATION:"application"};function X(){return typeof window<"u"}function pd(){return typeof Buffer<"u"}function fd(){return typeof window<"u"?window:void 0}function Kr(){return typeof Buffer<"u"?Buffer:void 0}var me={assign(t){X()&&globalThis.location.assign(t)},reload(){X()&&globalThis.location.reload()},getSearch(){return X()?globalThis.location.search:""},getPathname(){return X()?globalThis.location.pathname:""},getLocation(){return X()?globalThis.location.toString():""},getOrigin(){return X()?globalThis.location.protocol+"//"+globalThis.location.host+"/":""}};function ws(t){if(X()){let r=window.atob(t),n=Uint8Array.from(r,i=>i.codePointAt(0));return new window.TextDecoder().decode(n)}let e=Kr();if(e)return e.from(t,"base64").toString("utf-8");throw new Error("Unable to decode base64")}function rr(t){if(X()){let r=new window.TextEncoder().encode(t),n=String.fromCodePoint.apply(null,r);return window.btoa(n)}let e=Kr();if(e)return e.from(t,"utf8").toString("base64");throw new Error("Unable to encode base64")}function wi(t){return rr(t).replaceAll("+","-").replaceAll("/","_").replace(/[=]{1,2}$/,"")}function nr(t){t=t.padEnd(t.length+(4-t.length%4)%4,"=");let e=t.replaceAll("-","+").replaceAll("_","/");return ws(e)}function Yr(){let t=new Uint32Array(28);return crypto.getRandomValues(t),ai(t.buffer)}async function Ai(t){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(t))}function oe(){return typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replaceAll(/[xy]/g,t=>{let e=Math.trunc(Math.random()*16);return(t==="x"?e:e&3|8).toString(16)})}function As(t){let e={};t=le(t);for(let i of t.entry??v){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;if(s)e[s]=oe(),i.fullUrl="urn:uuid:"+e[s],delete i.resource?.id;else if(i.fullUrl?.startsWith("resource:")){let a=i.fullUrl.slice(9);e[a]=oe(),i.fullUrl="urn:uuid:"+e[a]}}let r=t.entry,n=JSON.stringify({resourceType:"Bundle",type:"transaction",entry:r?.map(i=>({fullUrl:i.fullUrl,request:{method:"POST",url:i.resource?.resourceType},resource:i.resource}))},(i,o)=>md(i,o,e),2);return Os(JSON.parse(n))}function md(t,e,r){if((t==="reference"||t==="url")&&typeof e=="string"){let n;if(e.includes("/")?n=e.split("/")[1]:e.startsWith("urn:uuid:")||e.startsWith("resource:")?n=e.slice(9):e.startsWith("#")&&(n=e.slice(1)),n){let i=r[n];if(i)return"urn:uuid:"+i}}return e}function Os(t){let e=gd(t),{sorted:r,cycles:n}=hd(e),i={},o=[];for(let a of t.entry??v)a.fullUrl?i[a.fullUrl]=a:o.push(a);let s=r.map(a=>i[a]);for(let a of n)for(let u of a){let l=i[u],d={...l,request:{...l.request,method:"PUT"}};s.push(d)}return s.push(...o),{...t,entry:s}}var gt={NotVisited:"NotVisited",Visiting:"Visiting",Visited:"Visited"};function hd(t){let e=[],r={},n=[];for(let o of Object.keys(t))r[o]=gt.NotVisited;function i(o,s){if(r[o]===gt.Visited)return!0;if(r[o]===gt.Visiting){let u=s.lastIndexOf(o);return u!==-1&&n.push(s.slice(u)),!0}r[o]=gt.Visiting,s.push(o);let a=!1;for(let u of t[o]??v)i(u,s)||(a=!0);return r[o]=gt.Visited,s.pop(),e.unshift(o),!a}for(let o in t)r[o]===gt.NotVisited&&i(o,[]);return{sorted:e,cycles:n}}function Is(t,e){for(let r in t)if(t[r]&&typeof t[r]=="object"){let n=t[r];if(J(n)){let i=n.reference;(i.startsWith("urn:uuid:")||i.startsWith("resource:"))&&e(i)}else Is(n,e)}}function gd(t){let e={};for(let r of t.entry??v)r.fullUrl&&(e[r.fullUrl]=[]);for(let r of t.entry??v){let n=r.fullUrl;n&&r.resource&&Is(r.resource,i=>{i!==n&&e[i]&&e[i].push(n)})}return e}function yd(t){t=le(t);let e={resourceType:"Bundle",type:"transaction",entry:[{resource:t}]};if(t.contained){for(let r of t.contained)e.entry.push({resource:r});t.contained=void 0}for(let r of e.entry)r.resource&&!r.resource.id&&(r.resource.id=oe());return As(e)}function xd(t,e,r){return t.entry?.find(({resource:n})=>n?.resourceType===e&&n?.id===r)?.resource}async function vd(t,e,r,n){return{hook:r.hook,hookInstance:oe(),context:n,prefetch:await Td(t,e,r,n)}}async function Td(t,e,r,n){if(!r.prefetch)return{};let i={};for(let[o,s]of Object.entries(r.prefetch)){let a=await Sd(t,e,n,s);i[o]=a??null}return i}function Sd(t,e,r,n){if(n=ks(e,r,n),n.includes("{{"))return Promise.resolve(null);let i=/^(\w+)\/([0-9a-zA-Z-_]+)$/.exec(n);if(i){let[a,u]=i.slice(1);return t.readResource(a,u)}let[o,s]=Je(n,"?",2);return t.search(o,s)}var bd=new Set(["userPractitionerId","userPractitionerRoleId","userPatientId","userRelatedPersonId"]);function ks(t,e,r){return r.replaceAll(/\{\{([^}]+)\}\}/g,(n,i)=>{if(i=i.trim(),bd.has(i))return t.id;if(i.startsWith("context.")){let o=i.substring(8),s=Ed(e,o);if(de(s))return s;if(typeof s=="number"||typeof s=="boolean")return String(s)}return n})}function Ed(t,e){let r=e.split("."),n=t;for(let i of r)if(n&&C(n)&&i in n)n=n[i];else return;return n}var V={CSS:"text/css",DICOM:"application/dicom",DICOM_JSON:"application/dicom+json",EVENT_STREAM:"text/event-stream",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",JOSE:"application/jose",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 Xr=class{constructor(){c(this,"listeners");this.listeners={}}addEventListener(e,r){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(r)}removeEventListener(e,r){let n=this.listeners[e];if(n){for(let i=0;i<n.length;i++)if(n[i]===r){n.splice(i,1);return}}}dispatchEvent(e){let r=this.listeners[e.type];for(let n of r??v)try{n.call(this,e)}catch(i){console.error(`Unhandled error in "${e.type}" event listener`,i)}return!e.defaultPrevented}removeAllListeners(){this.listeners={}}listenerCount(e){return this.listeners[e]?.length??0}},se=class{constructor(){c(this,"emitter",new Xr)}dispatchEvent(e){this.emitter.dispatchEvent(e)}addEventListener(e,r){this.emitter.addEventListener(e,r)}removeEventListener(e,r){this.emitter.removeEventListener(e,r)}removeAllListeners(){this.emitter.removeAllListeners()}listenerCount(e){return this.emitter.listenerCount(e)}};var Z={Event:typeof globalThis.Event<"u"?globalThis.Event:void 0,ErrorEvent:void 0,CloseEvent:void 0},Ms=!1;function Rd(){if(typeof globalThis.Event>"u")throw new Error("Unable to lazy init events for ReconnectingWebSocket. globalThis.Event is not defined yet");Z.Event=globalThis.Event,Z.ErrorEvent=class extends Event{constructor(r,n){super("error",n);c(this,"message");c(this,"error");this.message=r.message,this.error=r}},Z.CloseEvent=class extends Event{constructor(r=1e3,n="",i){super("close",i);c(this,"code");c(this,"reason");c(this,"wasClean",!0);this.code=r,this.reason=n}}}function Vs(t,e){if(!t)throw new Error(e)}function Cd(){}function Zr(t){if(t instanceof Z.CloseEvent){let e=t;return new Z.CloseEvent(e.code,e.reason,void 0)}if(t instanceof Z.ErrorEvent){let e=t;return new Z.ErrorEvent(e.error??new Error(e.message),void 0)}return new t.constructor(t.type,t)}function _s(t,e){let r=t;return r.error instanceof Error?new Z.ErrorEvent(r.error,e):new Z.ErrorEvent(new Error(r.message||"WebSocket error"),e)}var Ze={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},Ds=!1,et=class t extends se{constructor(r,n,i={}){Ms||(Rd(),Ms=!0);super();c(this,"_ws");c(this,"_retryCount",-1);c(this,"_uptimeTimeout");c(this,"_connectTimeout");c(this,"_shouldReconnect",!0);c(this,"_connectLock",!1);c(this,"_binaryType");c(this,"_closeCalled",!1);c(this,"_messageQueue",[]);c(this,"_debugLogger",console.log.bind(console));c(this,"_url");c(this,"_protocols");c(this,"_options");c(this,"onclose",null);c(this,"onerror",null);c(this,"onmessage",null);c(this,"onopen",null);c(this,"_handleOpen",r=>{this._debug("open event");let{minUptime:n=Ze.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),n),Vs(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(r),this.dispatchEvent(Zr(r))});c(this,"_handleMessage",r=>{this._debug("message event"),this.onmessage&&this.onmessage(r),this.dispatchEvent(Zr(r))});c(this,"_handleError",r=>{let n=_s(r,this);this._debug("error event",n.message),this._disconnect(void 0,n.message==="TIMEOUT"?"timeout":void 0),this.onerror&&this.onerror(n),this._debug("exec error listeners"),this.dispatchEvent(Zr(n)),this._connect()});c(this,"_handleClose",r=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(r),this.dispatchEvent(Zr(r))});this._url=r,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 t.CONNECTING}get OPEN(){return t.OPEN}get CLOSING(){return t.CLOSING}get CLOSED(){return t.CLOSED}get binaryType(){return this._ws?this._ws.binaryType:this._binaryType}set binaryType(r){this._binaryType=r,this._ws&&(this._ws.binaryType=r)}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?t.CLOSED:t.CONNECTING}get url(){return this._ws?this._ws.url:""}get shouldReconnect(){return this._shouldReconnect}close(r=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(r,n)}reconnect(r,n){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED?this._connect():(this._disconnect(r,n),this._connect())}send(r){if(this._ws?.readyState===this.OPEN)this._debug("send",r),this._ws.send(r);else{let{maxEnqueuedMessages:n=Ze.maxEnqueuedMessages}=this._options;this._messageQueue.length<n&&(this._debug("enqueue",r),this._messageQueue.push(r))}}_debug(...r){this._options.debug&&this._debugLogger("RWS>",...r)}_getNextDelay(){let{reconnectionDelayGrowFactor:r=Ze.reconnectionDelayGrowFactor,minReconnectionDelay:n=Ze.minReconnectionDelay,maxReconnectionDelay:i=Ze.maxReconnectionDelay}=this._options,o=0;return this._retryCount>0&&(o=n*Math.pow(r,this._retryCount-1),o>i&&(o=i)),this._debug("next delay",o),o}_wait(){return new Promise(r=>{setTimeout(r,this._getNextDelay())})}_connect(){if(this._connectLock||!this._shouldReconnect)return;this._connectLock=!0;let{maxRetries:r=Ze.maxRetries,connectionTimeout:n=Ze.connectionTimeout}=this._options;if(this._retryCount>=r){this._connectLock=!1,this._debug("max retries reached",this._retryCount,">=",r);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"&&!Ds&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),Ds=!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 Z.ErrorEvent(Error(i.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new Z.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(r=1e3,n){if(this._clearTimeouts(),!this._ws)return;let i=this._ws;this._removeListeners(),i.addEventListener("error",Cd);try{i.close(r,n),this._handleClose(new Z.CloseEvent(r,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 en={"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"},Ls=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],tn=["DiagnosticReport-update"];function Oi(t){return tn.includes(t)}function Ii(t){if(tn.includes(t))throw new m(T(`'context.version' is required for '${t}'.`))}var Ns={"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 Fs(t){return Ls.includes(t)}function ki(t){return!!t.endpoint}function rn(t){if(!or(t))throw new m(T("subscriptionRequest must be an object conforming to SubscriptionRequest type."));let{channelType:e,mode:r,topic:n,events:i}=t,o={"hub.channel.type":e,"hub.mode":r,"hub.topic":n};return r==="subscribe"&&(o["hub.events"]=i.join(",")),ki(t)&&(o["hub.channel.endpoint"]=t.endpoint),new URLSearchParams(o).toString()}function or(t){if(typeof t!="object")return!1;let{channelType:e,mode:r,topic:n,events:i}=t;if(!(e&&r&&n&&i)||typeof n!="string"||typeof i!="object"||!Array.isArray(i)||i.length<1||e!=="websocket"||r!=="subscribe"&&r!=="unsubscribe")return!1;for(let o of i)if(!en[o])return!1;return!(ki(t)&&!(typeof t.endpoint=="string"&&t.endpoint.startsWith("ws")))}function Pd(t,e,r,n){if(typeof e!="object")throw new m(T(`context[${r}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.id&&typeof e.id=="string"))throw new m(T(`context[${r}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new m(T(`context[${r}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!Fs(e.resourceType))throw new m(T(`context[${r}] 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 m(T(`context[${r}] is invalid. context[${r}] for the '${t}' event should contain resource of type ${i}.`))}}function wd(t,e,r,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),n.reference){if(!J(e.reference))throw new m(T(`context[${r}] is invalid. Expected key '${e.key}' to be a reference.`))}else Pd(t,e.resource,r,n)}function Ad(t,e){let r=new Map,n=Ns[t];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new m(T(`Key '${o}' not found for event '${t}'. Make sure to add only valid keys.`));wd(t,e[i],i,n[o],r)}for(let[i,o]of Object.entries(n)){if(!(o.optional||r.has(i)))throw new m(T(`Missing required key '${i}' on context for '${t}' event.`));if(!o.manyAllowed&&(r.get(i)??0)>1)throw new m(T(`${r.get(i)} context entries with key '${i}' found for the '${t}' event when schema only allows for 1.`))}}function nn(t,e,r,n){if(!(t&&typeof t=="string"))throw new m(T("Must provide a topic."));if(!en[e])throw new m(T(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(en).join(", ")}`));if(typeof r!="object")throw new m(T("context must be a context object or array of context objects."));if(tn.includes(e)&&!n)throw new m(T(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(r)?r:[r];return Ad(e,i),{timestamp:new Date().toISOString(),id:oe(),event:{"hub.topic":t,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var ir=class extends se{constructor(r,n){super();c(this,"subRequest");c(this,"websocket");if(this.subRequest=r,!r.endpoint)throw new m(T("Subscription request should contain an endpoint."));if(!or(r))throw new m(T("Subscription request failed validation."));let{ReconnectingWebSocket:i=et,...o}=n??{},s=new i(r.endpoint,void 0,o);s.addEventListener("open",()=>{this.dispatchEvent({type:"connect"})}),s.addEventListener("message",a=>{let u=JSON.parse(a.data);if(!u.event){u["hub.mode"]==="denied"&&this.disconnect();return}let l=u;l.event["hub.event"]!=="heartbeat"&&(this.dispatchEvent({type:"message",payload:l}),s.send(JSON.stringify({id:u?.id,timestamp:new Date().toISOString()})))}),s.addEventListener("close",()=>{this.dispatchEvent({type:"disconnect"})}),this.websocket=s}disconnect(){this.websocket.close()}};function Od(t){return JSON.parse(nr(t))}function Mi(t){return t.split(".").length===3}function sr(t){let[e,r,n]=t.split(".");return Od(r)}function Di(t){try{return typeof sr(t).login_id=="string"}catch{return!1}}function Vi(t){try{let r=sr(t).exp;return typeof r=="number"?r*1e3:void 0}catch{return}}var ar=class{constructor(e){c(this,"medplum");this.medplum=e}async get(e){return this.medplum.get(`keyvalue/v1/${e}`)}async set(e,r){await this.medplum.put(`keyvalue/v1/${e}`,r,V.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var Us;Us=Symbol.toStringTag;var $=class{constructor(e){c(this,Us,"ReadablePromise");c(this,"suspender");c(this,"status","pending");c(this,"response");c(this,"error");this.suspender=e.then(r=>(this.status="success",this.response=r,r),r=>{throw this.status="error",this.error=r,r})}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,r){return this.suspender.then(e,r)}catch(e){return this.suspender.catch(e)}finally(e){return this.suspender.finally(e)}};var yt=class{constructor(e,r=""){c(this,"storage");c(this,"prefix","");this.storage=e??globalThis.localStorage??new on,this.prefix=r}makeKey(e){return this.prefix+e}clear(){if(this.storage===globalThis.localStorage&&this.prefix)for(let e=this.storage.length-1;e>=0;e--){let r=this.storage.key(e);r?.startsWith(this.prefix)&&this.storage.removeItem(r)}else this.storage.clear()}getString(e){return this.storage.getItem(this.makeKey(e))??void 0}setString(e,r){r?this.storage.setItem(this.makeKey(e),r):this.storage.removeItem(this.makeKey(e))}getObject(e){let r=this.getString(e);return r?JSON.parse(r):void 0}setObject(e,r){this.setString(e,r?Vt(r):void 0)}},on=class{constructor(){c(this,"data");this.data=new Map}get length(){return this.data.size}clear(){this.data.clear()}getItem(e){return this.data.get(e)??null}setItem(e,r){r?this.data.set(e,r):this.data.delete(e)}removeItem(e){this.data.delete(e)}key(e){return Array.from(this.data.keys())[e]}},_i=class extends yt{constructor(){super();c(this,"initialized");c(this,"initPromise");c(this,"initResolve",()=>{});this.initialized=!1,this.initPromise=new Promise(r=>{this.initResolve=r})}setInitialized(){this.initialized||(this.initResolve(),this.initialized=!0)}getInitPromise(){return this.initPromise}get isInitialized(){return this.initialized}};var Id=[WebSocket.CLOSING,WebSocket.CLOSED],xt=class extends se{constructor(...r){super();c(this,"criteria");this.criteria=new Set(r)}getCriteria(){return this.criteria}_addCriteria(r){this.criteria.add(r)}_removeCriteria(r){this.criteria.delete(r)}},Li=class{constructor(e,r){c(this,"criteria");c(this,"emitter");c(this,"refCount");c(this,"subscriptionProps");c(this,"subscriptionId");c(this,"token");c(this,"tokenExpiry");c(this,"state","idle");c(this,"generation",0);c(this,"lastUnrefTime");this.criteria=e,this.emitter=new xt(e),this.refCount=1,this.subscriptionProps=r?{...r}:void 0}nextGeneration(){return++this.generation}},ur=class{constructor(e,r,n){c(this,"medplum");c(this,"ws");c(this,"masterSubEmitter");c(this,"criteriaEntries");c(this,"criteriaEntriesBySubscriptionId");c(this,"wsClosed");c(this,"pingTimer");c(this,"tokenRefreshTimer");c(this,"pingIntervalMs");c(this,"waitingForPong",!1);c(this,"currentProfile");if(!(e instanceof lr))throw new m(T("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(r).toString()}catch{throw new m(T("Not a valid URL"))}let o=n?.ReconnectingWebSocket?new n.ReconnectingWebSocket(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger}):new et(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger});this.medplum=e,this.ws=o,this.masterSubEmitter=new xt,this.criteriaEntries=new Map,this.criteriaEntriesBySubscriptionId=new Map,this.wsClosed=!1,this.pingIntervalMs=n?.pingIntervalMs??5e3,this.currentProfile=e.getProfile(),this.setupListeners()}setupListeners(){let e=this.ws;e.addEventListener("message",r=>{try{let n=JSON.parse(r.data);if(n.type==="pong"){this.waitingForPong=!1;return}let i=n,o=i?.entry?.[0]?.resource;if(!o){console.warn("Received WebSocket message without a SubscriptionStatus resource; ignoring",i);return}if(o.type==="heartbeat"){this.masterSubEmitter?.dispatchEvent({type:"heartbeat",payload:i});return}if(o.type==="handshake"){let a=K(o.subscription),u={type:"connect",payload:{subscriptionId:a}};this.masterSubEmitter?.dispatchEvent(u);let l=this.criteriaEntriesBySubscriptionId.get(a);if(!l){console.warn("Received handshake for criteria the SubscriptionManager is not listening for yet");return}(l.state==="connecting"||l.state==="refreshing")&&(l.state="active"),l.emitter.dispatchEvent({...u});return}this.masterSubEmitter?.dispatchEvent({type:"message",payload:i});let s=this.criteriaEntriesBySubscriptionId.get(K(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",r=>{let n={type:"error",payload:new m({resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"WebSocket connection closed due to an error"},diagnostics:r.error?Ie(r.error):r.message}]})};this.masterSubEmitter?.dispatchEvent(n);for(let i of this.getAllCriteriaEmitters())i.dispatchEvent({...n})}),e.addEventListener("close",()=>{let r={type:"close"};this.masterSubEmitter?.dispatchEvent(r);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...r});this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=void 0,this.waitingForPong=!1),this.tokenRefreshTimer&&(clearInterval(this.tokenRefreshTimer),this.tokenRefreshTimer=void 0),this.wsClosed&&(this.criteriaEntries.clear(),this.criteriaEntriesBySubscriptionId.clear(),this.masterSubEmitter?.removeAllListeners())}),e.addEventListener("open",()=>{let r={type:"open"};this.masterSubEmitter?.dispatchEvent(r);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...r});this.refreshAllSubscriptions().catch(console.error),this.pingTimer??=setInterval(()=>{this.waitingForPong?(this.waitingForPong=!1,e.reconnect()):(e.send(JSON.stringify({type:"ping"})),this.waitingForPong=!0),this.gcUnrefEntries()},this.pingIntervalMs),this.tokenRefreshTimer??=setInterval(()=>{this.checkTokenExpirations(),this.gcUnrefEntries()},6e4)}),this.medplum.addEventListener("change",()=>{let r=this.medplum.getProfile();this.currentProfile&&r===void 0?this.ws.close():r&&this.currentProfile?.id!==r.id&&this.ws.reconnect(),this.currentProfile=r})}sendBind(e){this.ws.send(JSON.stringify({type:"bind-with-token",payload:{token:e}}))}sendUnbind(e){this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"unbind-from-token",payload:{token:e}}))}emitError(e,r){let n={type:"error",payload:r};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}maybeEmitDisconnect(e){let{subscriptionId:r}=e;if(r){let n={type:"disconnect",payload:{subscriptionId:r}};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}else console.warn("Called disconnect for `CriteriaEntry` before `subscriptionId` was present.")}isStale(e,r){return this.isEntryGettingRemoved(e)||e.generation!==r}maybeGetCriteriaEntry(e,r){let n=this.criteriaEntries.get(e);if(n){if(!r)return n.bareCriteria;for(let i of n.criteriaWithProps)if(xe(r,i.subscriptionProps))return i}}getAllCriteriaEmitters(){let e=[];for(let r of this.criteriaEntries.values())for(let n of cr(r))n.refCount>0&&e.push(n.emitter);return e}addCriteriaEntry(e){let{criteria:r,subscriptionProps:n}=e,i;this.criteriaEntries.has(r)?i=this.criteriaEntries.get(r):(i={criteriaWithProps:[]},this.criteriaEntries.set(r,i)),n?i.criteriaWithProps.push(e):i.bareCriteria=e}removeCriteriaEntry(e){e.state="removed",e.generation++;let{criteria:r,subscriptionProps:n,subscriptionId:i,token:o}=e;if(!this.criteriaEntries.has(r))return;let s=this.criteriaEntries.get(r);n?s.criteriaWithProps=s.criteriaWithProps.filter(a=>{let u=a.subscriptionProps;return!xe(n,u)}):s.bareCriteria=void 0,!s.bareCriteria&&s.criteriaWithProps.length===0&&(this.criteriaEntries.delete(r),this.masterSubEmitter?._removeCriteria(r)),i&&this.criteriaEntriesBySubscriptionId.delete(i),o&&this.sendUnbind(o)}async subscribeToCriteria(e){this.wsClosed&&await this.reconnectIfNeeded(),this.ws.readyState===WebSocket.OPEN&&this.medplum.getProfile()&&e.state==="idle"&&(e.state="connecting",await this.rebindCriteriaEntry(e))}async refreshAllSubscriptions(){this.criteriaEntriesBySubscriptionId.clear();let e=[],r=[];for(let n of this.criteriaEntries.values())for(let i of cr(n))i.refCount===0?r.push(i):e.push(i);for(let n of r)this.removeCriteriaEntry(n);for(let n of e)n.token&&this.sendUnbind(n.token),n.token=void 0,n.tokenExpiry=void 0,n.subscriptionId=void 0,n.state="idle",n.generation++,await this.subscribeToCriteria(n)}async rebindCriteriaEntry(e){let r=e.nextGeneration();try{if(!e.subscriptionId){let a=await this.medplum.createResource({...e.subscriptionProps,resourceType:"Subscription",status:"active",reason:`WebSocket subscription for ${I(this.medplum.getProfile())}`,channel:{type:"websocket"},criteria:e.criteria});if(e.subscriptionId??=a.id,this.isStale(e,r))return}let{parameter:n}=await this.medplum.get(`fhir/R4/Subscription/${e.subscriptionId}/$get-ws-binding-token`,{cache:"no-cache"}),i=n?.find(a=>a.name==="token")?.valueString,o=n?.find(a=>a.name==="websocket-url")?.valueUrl,s=n?.find(a=>a.name==="expiration")?.valueDateTime;if(!i)throw new m(T("Failed to get token"));if(!o)throw new m(T("Failed to get URL from $get-ws-binding-token"));if(!s)throw new m(T("Failed to get expiration from $get-ws-binding-token"));if(this.isStale(e,r))return;e.token=i,e.tokenExpiry=new Date(s).getTime(),this.criteriaEntriesBySubscriptionId.set(e.subscriptionId,e),this.sendBind(i)}catch(n){console.error(Ie(n)),e.generation===r&&!this.isEntryGettingRemoved(e)&&(e.state=e.state==="refreshing"?"active":"idle"),this.emitError(e,n)}}checkTokenExpirations(){if(!this.medplum.getProfile())return;let e=Date.now();for(let r of this.criteriaEntries.values())for(let n of cr(r))n.refCount===0||!n.tokenExpiry||n.tokenExpiry-e<=3e5&&n.state==="active"&&this.ws.readyState===WebSocket.OPEN&&(n.state="refreshing",this.rebindCriteriaEntry(n).catch(i=>{this.masterSubEmitter?.dispatchEvent({type:"error",payload:i})}))}addCriteria(e,r){this.masterSubEmitter&&this.masterSubEmitter._addCriteria(e);let n=this.maybeGetCriteriaEntry(e,r);if(n)return n.refCount===0&&(n.lastUnrefTime=void 0,n.generation++,n.state!=="active"&&(n.state=n.token?"active":"idle")),n.refCount+=1,n.state==="idle"&&this.subscribeToCriteria(n).catch(console.error),n.emitter;let i=new Li(e,r);return this.addCriteriaEntry(i),this.subscribeToCriteria(i).catch(console.error),i.emitter}removeCriteria(e,r){let n=this.maybeGetCriteriaEntry(e,r);if(!n||this.isEntryGettingRemoved(n)){console.warn("Criteria not known to `SubscriptionManager`. Possibly called remove too many times.");return}n.refCount-=1,n.refCount===0&&(n.lastUnrefTime=Date.now(),n.generation++)}gcUnrefEntries(){let e=Date.now(),r=[];for(let n of this.criteriaEntries.values())for(let i of cr(n))i.refCount===0&&i.lastUnrefTime!==void 0&&e-i.lastUnrefTime>=1e4&&r.push(i);for(let n of r)this.maybeEmitDisconnect(n),this.removeCriteriaEntry(n);r.length>0&&this.criteriaEntries.size===0&&this.closeWebSocket()}isEntryGettingRemoved(e){return e.refCount===0||e.state==="removed"}getWebSocket(){return this.ws}closeWebSocket(){if(!this.wsClosed){if(this.ws.readyState===WebSocket.OPEN)for(let e of this.criteriaEntries.values())for(let r of cr(e))r.token&&this.sendUnbind(r.token);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 xt(...Array.from(this.criteriaEntries.keys()))),this.masterSubEmitter}async reconnectIfNeeded(){Id.includes(this.getWebSocket().readyState)&&await new Promise(e=>{let r=()=>{this.getWebSocket().removeEventListener("open",r),e()};this.getWebSocket().addEventListener("open",r),this.reconnectWebSocket()})}};function cr(t){return t.bareCriteria?[t.bareCriteria,...t.criteriaWithProps]:t.criteriaWithProps}var kd=new ee(1e3);async function Md({resource:t,subscription:e,context:r,getPreviousResource:n,logger:i}){if(!Dd(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=mt(o);if(t.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${t.resourceType}")`),!1;if(!await Bs(e,t,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let u=!1,l=!1;for(let h of e.extension??v)if(h.url==="https://medplum.com/fhir/StructureDefinition/subscription-supported-interaction"&&(u=!0,h.valueCode===r.interaction)){l=!0;break}if(u&&!l)return i?.debug("Ignored rest hook for unsupported interaction",{subscription:e.id,interaction:r.interaction}),!1;if(!tr(t,s))return!1;let d=jr(e.meta)??[],f=jr(t.meta)??[];return d.length&&!d.some(h=>f.some(b=>b.reference===h.reference))?(i?.debug("Subscription suppressed due to mismatched accounts",{subscriptionId:e.id,resource:I(t)}),!1):!0}function Dd(t,e){let r=t.channel?.type;return r==="rest-hook"?t.channel?.endpoint?!0:(e?.debug("Ignore rest-hook missing URL"),!1):r==="websocket"}async function Bs(t,e,r){let n=ae(t,"https://medplum.com/fhir/StructureDefinition/fhir-path-criteria-expression");if(!n?.valueString)return!0;let i=await r(e),o={"%current":E(e),"%previous":E(i??{})};return k(n.valueString,[E(e)],o,kd)?.[0]?.value===!0}var sn="5.1.34-48893b9",Vd="medplum-cli",js=V.FHIR_JSON+", */*; q=0.1",_d="https://api.medplum.com/",Ld=1e3,Nd=6e4,Fd=0,Ud=3e5,Bd="Binary/",qs={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},qd=2,tt={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",PreAuthorizedCode:"urn:ietf:params:oauth:grant-type:pre-authorized_code"},Hs={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"},Wd={ClientSecretBasic:"client_secret_basic",ClientSecretPost:"client_secret_post",ClientSecretJwt:"client_secret_jwt",PrivateKeyJwt:"private_key_jwt",None:"none"},Gs={JwtBearer:"urn:ietf:params:oauth:client-assertion-type:jwt-bearer"},$d={ES256:"ES256",ES384:"ES384",ES512:"ES512",HS256:"HS256",RS256:"RS256",RS384:"RS384",RS512:"RS512"},lr=class extends se{constructor(r){super();c(this,"options");c(this,"fetch");c(this,"createPdfImpl");c(this,"storage");c(this,"requestCache");c(this,"cacheTime");c(this,"baseUrl");c(this,"fhirBaseUrl");c(this,"authorizeUrl");c(this,"tokenUrl");c(this,"logoutUrl");c(this,"fhircastHubUrl");c(this,"cdsServicesUrl");c(this,"defaultHeaders");c(this,"onUnauthenticated");c(this,"autoBatchTime");c(this,"autoBatchQueue");c(this,"maxRetries");c(this,"maxRetryTime");c(this,"refreshGracePeriod");c(this,"subscriptionManager");c(this,"medplumServer");c(this,"clientId");c(this,"clientSecret");c(this,"credentialsInHeader");c(this,"autoBatchTimerId");c(this,"accessToken");c(this,"accessTokenExpires");c(this,"refreshToken");c(this,"refreshPromise");c(this,"profilePromise");c(this,"sessionDetails");c(this,"currentRateLimits");c(this,"basicAuth");c(this,"initPromise");c(this,"initComplete",!0);c(this,"keyValueClient");c(this,"logLevel");if(r?.baseUrl&&!r.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");this.options=r??{},this.fetch=r?.fetch??jd(),this.storage=r?.storage??new yt(void 0,r?.storagePrefix),this.createPdfImpl=r?.createPdf,this.baseUrl=lt(r?.baseUrl??_d),this.fhirBaseUrl=W(this.baseUrl,r?.fhirUrlPath??"fhir/R4"),this.authorizeUrl=W(this.baseUrl,r?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=W(this.baseUrl,r?.tokenUrl??"oauth2/token"),this.logoutUrl=W(this.baseUrl,r?.logoutUrl??"oauth2/logout"),this.fhircastHubUrl=W(this.baseUrl,r?.fhircastHubUrl??"fhircast/STU3"),this.cdsServicesUrl=W(this.baseUrl,r?.cdsServicesUrl??"cds-services"),this.clientId=r?.clientId??"",this.clientSecret=r?.clientSecret??"",this.credentialsInHeader=r?.authCredentialsMethod==="header",this.defaultHeaders=r?.defaultHeaders??{},this.onUnauthenticated=r?.onUnauthenticated,this.refreshGracePeriod=r?.refreshGracePeriod??Ud,this.logLevel=this.initializeLogLevel(r),this.maxRetries=r?.maxRetries??2,this.maxRetryTime=r?.maxRetryTime??2e3,this.cacheTime=r?.cacheTime??(X()?Nd:Fd),this.cacheTime>0?this.requestCache=new ee(r?.resourceCacheSize??Ld):this.requestCache=void 0,r?.autoBatchTime?(this.autoBatchTime=r.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0),r?.accessToken&&this.setAccessToken(r.accessToken),this.storage.getInitPromise===void 0?(r?.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(()=>{r?.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}initializeLogLevel(r){return r?.logLevel?r.logLevel:r?.verbose!==void 0&&r.verbose?"verbose":"none"}async attemptResumeActiveLogin(){let r=this.getActiveLogin();r&&(this.setAccessToken(r.accessToken,r.refreshToken),await this.refreshProfile())}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}getFhircastHubUrl(){return this.fhircastHubUrl}getCdsServicesUrl(){return this.cdsServicesUrl}getDefaultHeaders(){return this.defaultHeaders}clear(){this.storage.clear(),this.clearActiveLogin()}clearActiveLogin(){this.storage.setString("activeLogin",void 0),this.requestCache?.clear(),this.accessToken=void 0,this.refreshToken=void 0,this.refreshPromise=void 0,this.accessTokenExpires=void 0,this.sessionDetails=void 0,this.medplumServer=void 0,this.dispatchEvent({type:"change"})}invalidateUrl(r){r=r.toString(),this.requestCache?.delete(r)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(r){let n=W(this.fhirBaseUrl,r);for(let i of this.requestCache?.keys()??v)(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache?.delete(i)}notifyResourceModified(r){r.operation!=="delete"&&r.resource?this.cacheResource(r.resource,void 0):r.id&&this.deleteCacheEntry(this.fhirUrl(r.resourceType,r.id).toString()),this.invalidateSearches(r.resourceType),this.dispatchResourceModified(r)}get(r,n={}){r=r.toString();let i=this.getCacheEntry(r,n);if(i)return i.value;let o;r.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue&&!n.disableAutoBatch?o=new Promise((a,u)=>{this.autoBatchQueue.push({method:"GET",url:r.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:u}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):(n.method="GET",o=this.request(r,n));let s=new $(o);return this.setCacheEntry(r,s,n),s}post(r,n,i,o={}){return r=r.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(r),o.method="POST",this.request(r,o)}put(r,n,i,o={}){return r=r.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(r),o.method="PUT",this.request(r,o)}patch(r,n,i={}){return r=r.toString(),this.setRequestBody(i,n),this.setRequestContentType(i,V.JSON_PATCH),this.invalidateUrl(r),i.method="PATCH",this.request(r,i)}delete(r,n={}){return r=r.toString(),this.invalidateUrl(r),n.method="DELETE",this.request(r,n)}async startNewUser(r,n){let{codeChallengeMethod:i,codeChallenge:o}=await this.startPkce();return this.post("auth/newuser",{...r,clientId:r.clientId??this.clientId,codeChallengeMethod:i,codeChallenge:o},void 0,n)}async startNewProject(r,n){return this.post("auth/newproject",r,void 0,n)}async startNewPatient(r,n){return this.post("auth/newpatient",r,void 0,n)}async startLogin(r,n){return this.post("auth/login",{...await this.ensureCodeChallenge(r),clientId:r.clientId??this.clientId,scope:r.scope},void 0,n)}async startGoogleLogin(r,n){return this.post("auth/google",{...await this.ensureCodeChallenge(r),clientId:r.clientId??this.clientId,scope:r.scope},void 0,n)}async ensureCodeChallenge(r){return r.codeChallenge?r:{...r,...await this.startPkce()}}async signOut(){await this.post(this.logoutUrl,{}),this.clear()}async signInWithRedirect(r){let i=new URLSearchParams(me.getSearch()).get("code");if(!i){await this.requestAuthorization(r);return}return this.processCode(i)}signOutWithRedirect(){me.assign(this.logoutUrl)}async signInWithExternalAuth(r,n,i,o,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),me.assign(this.getExternalAuthRedirectUri(r,n,i,a,s))}async exchangeExternalAccessToken(r,n,i){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");let o={grant_type:tt.TokenExchange,subject_token_type:Hs.AccessToken,client_id:n,subject_token:r};return i&&(o.membership_id=i),this.fetchTokens(o)}getExternalAuthRedirectUri(r,n,i,o,s=!0){let a=new URL(r);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",n),a.searchParams.set("redirect_uri",i),a.searchParams.set("scope",o.scope??"openid profile email"),a.searchParams.set("state",JSON.stringify(o)),s){let{codeChallenge:u,codeChallengeMethod:l}=o;if(!l)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!u)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");a.searchParams.set("code_challenge_method",l),a.searchParams.set("code_challenge",u)}return a.toString()}fhirUrl(...r){return new URL(W(this.fhirBaseUrl,r.join("/")))}fhirSearchUrl(r,n){let i=this.fhirUrl(r);return n&&(i.search=fi(n)),i}search(r,n,i){let o=this.fhirSearchUrl(r,n),s="search-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=this.getBundle(o,i);return this.setCacheEntry(s,u,i),u}searchOne(r,n,i){let o=this.fhirSearchUrl(r,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 u=new $(this.search(r,o.searchParams,i).then(l=>l.entry?.[0]?.resource));return this.setCacheEntry(s,u,i),u}searchResources(r,n,i){let s="searchResources-"+this.fhirSearchUrl(r,n).toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=new $(this.search(r,n,i).then($s));return this.setCacheEntry(s,u,i),u}async*searchResourcePages(r,n,i){let o=this.fhirSearchUrl(r,n);for(;o;){let s=new URL(o).searchParams;s.has("_count")||s.set("_count","1000");let a=await this.search(r,s,i),u=a.link?.find(l=>l.relation==="next");if(!a.entry?.length&&!u)break;yield $s(a),o=u?.url?new URL(u.url):void 0}}valueSetExpand(r,n){let i=this.fhirUrl("ValueSet","$expand");return i.search=new URLSearchParams(r).toString(),this.get(i.toString(),n)}getCached(r,n){let i=this.requestCache?.get(this.fhirUrl(r,n).toString())?.value;return i?.isOk()?i.read():void 0}getCachedReference(r){let n=r.reference;if(!n)return;if(n==="system")return qs;let[i,o]=n.split("/");if(!(!i||!o))return this.getCached(i,o)}readResource(r,n,i){if(!n)throw new Error('The "id" parameter cannot be null, undefined, or an empty string.');return this.get(this.fhirUrl(r,n),i)}readReference(r,n){let i=r.reference;if(!i)return new $(Promise.reject(new Error("Missing reference")));if(i==="system")return new $(Promise.resolve(qs));let[o,s]=i.split("/");return!o||!s?new $(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}readCanonical(r,n,i){return Array.isArray(r)?this.searchOne("",{_type:r.join(","),url:n},i):this.searchOne(r,"url="+n,i)}requestSchema(r,n){if(jn(r))return Promise.resolve();let i=r+"-requestSchema",o=this.getCacheEntry(i,void 0);if(o)return o.value;let s=new $((async()=>{let a=`{
4
+ `?(this.pos.line++,this.pos.column=0):this.pos.column++}buildToken(e,r){let n=this.markStack.pop();if(!n)throw new Error("No mark for token");return{id:e,value:r,...n}}};function vl(t){return!!(t&&(t.id==="String"||t.id==="Symbol"&&gl.includes(t.value)))}var Xt=["true","false"],Zt=["!=","!~","<=",">=","{}","->"];function gs(t){return new Pe(t,Xt,Zt).tokenize()}var S={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},Tl={parse(t){let e=t.consumeAndParse();if(!t.match(")"))throw new Error("Parse error: expected `)` got `"+t.peek()?.value+"`");return e}},Sl={parse(t,e){let r=t.consumeAndParse();if(!t.match("]"))throw new Error("Parse error: expected `]`");return new Le(e,r)},precedence:S.Indexer},bl={parse(t,e){if(!(e instanceof F))throw new Error("Unexpected parentheses");let r=[];for(;!t.match(")");)r.push(t.consumeAndParse()),t.match(",");return new ie(e.name,r)},precedence:S.FunctionCall};function El(t){let e=t.split(" "),r=Number.parseFloat(e[0]),n=e[1];return n?.startsWith("'")&&n.endsWith("'")?n=n.substring(1,n.length-1):n="{"+n+"}",{value:r,unit:n}}function ft(){return new bt().registerPrefix("String",{parse:(t,e)=>new G({type:p.string,value:e.value})}).registerPrefix("DateTime",{parse:(t,e)=>new G({type:p.dateTime,value:pt(e.value)})}).registerPrefix("Quantity",{parse:(t,e)=>new G({type:p.Quantity,value:El(e.value)})}).registerPrefix("Number",{parse:(t,e)=>new G({type:e.value.includes(".")?p.decimal:p.integer,value:Number.parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new G({type:p.boolean,value:!0})}).registerPrefix("false",{parse:()=>new G({type:p.boolean,value:!1})}).registerPrefix("Symbol",{parse:(t,e)=>new F(e.value)}).registerPrefix("{}",{parse:()=>new Ut}).registerPrefix("(",Tl).registerInfix("[",Sl).registerInfix("(",bl).prefix("+",S.UnaryAdd,(t,e)=>new Bt("+",e,r=>r)).prefix("-",S.UnarySubtract,(t,e)=>new q("-",e,e,(r,n)=>-n)).infixLeft(".",S.Dot,(t,e,r)=>new ne(t,r)).infixLeft("/",S.Divide,(t,e,r)=>new q("/",t,r,(n,i)=>n/i)).infixLeft("*",S.Multiply,(t,e,r)=>new q("*",t,r,(n,i)=>n*i)).infixLeft("+",S.Add,(t,e,r)=>new q("+",t,r,(n,i)=>n+i)).infixLeft("-",S.Subtract,(t,e,r)=>new q("-",t,r,(n,i)=>n-i)).infixLeft("|",S.Union,(t,e,r)=>new Ve(t,r)).infixLeft("=",S.Equals,(t,e,r)=>new jt(t,r)).infixLeft("!=",S.NotEquals,(t,e,r)=>new Ht(t,r)).infixLeft("~",S.Equivalent,(t,e,r)=>new Gt(t,r)).infixLeft("!~",S.NotEquivalent,(t,e,r)=>new Qt(t,r)).infixLeft("<",S.LessThan,(t,e,r)=>new q("<",t,r,(n,i)=>n<i)).infixLeft("<=",S.LessThanOrEquals,(t,e,r)=>new q("<=",t,r,(n,i)=>n<=i)).infixLeft(">",S.GreaterThan,(t,e,r)=>new q(">",t,r,(n,i)=>n>i)).infixLeft(">=",S.GreaterThanOrEquals,(t,e,r)=>new q(">=",t,r,(n,i)=>n>=i)).infixLeft("&",S.Ampersand,(t,e,r)=>new qt(t,r)).infixLeft("and",S.And,(t,e,r)=>new zt(t,r)).infixLeft("as",S.As,(t,e,r)=>new Ce(t,r)).infixLeft("contains",S.Contains,(t,e,r)=>new Wt(t,r)).infixLeft("div",S.Divide,(t,e,r)=>new q("div",t,r,(n,i)=>Math.trunc(n/i))).infixLeft("in",S.In,(t,e,r)=>new $t(t,r)).infixLeft("is",S.Is,(t,e,r)=>new _e(t,r)).infixLeft("mod",S.Modulo,(t,e,r)=>new q("mod",t,r,(n,i)=>n%i)).infixLeft("or",S.Or,(t,e,r)=>new Jt(t,r)).infixLeft("xor",S.Xor,(t,e,r)=>new Kt(t,r)).infixLeft("implies",S.Implies,(t,e,r)=>new Yt(t,r))}var Rl=ft();function er(t){return new Re(t,Rl.construct(gs(t)).consumeAndParse())}function Cl(t,e,r={},n=void 0){let i=Array.isArray(e)?e:[e];for(let o=0;o<i.length;o++){let s=i[o];typeof s=="object"&&"type"in s&&"value"in s||(i[o]=E(i[o]))}return k(t,i,r,n).map(o=>o.value)}function k(t,e,r={},n=void 0){let i;if(typeof t=="string"){let o=n?.get(t);i=o??er(t),n&&!o&&n.set(t,i)}else i=t;return i.eval({variables:r},e).map(o=>{let s={type:o.type,value:o.value?.valueOf()};return"path"in o&&(s.path=o.path),s})}function Pl(t){let e=[];for(let r of t)r.type===p.Range?e.push([r.value?.low?.value,r.value?.high?.value]):typeof r.value=="number"&&e.push([r.value,r.value]);return e}function vi(t){let e=[];for(let r of t){let n=Ot(r.value);n&&e.push(n)}return e}function Ti(t){let e=new Set;for(let r of t){let n=mi(r);n&&e.add(n)}return Array.from(e)}function Si(t){let e=new Set;for(let r of t){let{value:n}=r;n&&(de(n)?e.add(n):J(n)?e.add(n.reference):ut(n)?e.add(I(n)):typeof n.identifier=="object"&&e.add(`identifier:${n.identifier.system}|${n.identifier.value}`))}return Array.from(e)}function wl(t){let e=[];for(let r of t){let{value:n}=r;typeof n=="number"?e.push({value:n}):L(n)&&e.push(n)}return e}function Al(t){let e=new Set;for(let r of t)de(r.value)&&e.add(r.value);return Array.from(e)}function bi(t,e={}){let r=[];for(let n of t)Ol(e,r,n);return r}function Ol(t,e,r){let{type:n,value:i}=r;switch(n){case p.Identifier:Il(e,t,i);break;case p.CodeableConcept:kl(e,t,i);break;case p.Coding:ys(e,t,i);break;case p.ContactPoint:Ml(e,t,i);break;default:Xe(e,t,void 0,i?.toString())}}function Il(t,e,r){r?.type?.text&&Xe(t,e,e.textSearchSystem,r.type.text),Xe(t,e,r?.system,r?.value)}function kl(t,e,r){r?.text&&Xe(t,e,e.textSearchSystem,r.text);for(let n of r?.coding??v)ys(t,e,n)}function ys(t,e,r){r&&(r.display&&Xe(t,e,e.textSearchSystem,r.display),Xe(t,e,r.system,r.code))}function Ml(t,e,r){r&&Xe(t,e,r.system,r.value?.toLocaleLowerCase())}function Xe(t,e,r,n){(r||n)&&!t.some(i=>i.system===r&&i.value===n)&&t.push({system:r,value:n&&e.caseInsensitive?n.toLocaleLowerCase():n})}var Dl=20,Vl=1e3,g={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:g.CONTAINS,exact:g.EXACT,above:g.ABOVE,below:g.BELOW,text:g.TEXT,not:g.NOT,in:g.IN,"not-in":g.NOT_IN,"of-type":g.OF_TYPE,missing:g.MISSING,identifier:g.IDENTIFIER,iterate:g.ITERATE},Ci={eq:g.EQUALS,ne:g.NOT_EQUALS,lt:g.LESS_THAN,le:g.LESS_THAN_OR_EQUALS,gt:g.GREATER_THAN,ge:g.GREATER_THAN_OR_EQUALS,sa:g.STARTS_AFTER,eb:g.ENDS_BEFORE,ap:g.APPROXIMATELY,sw:g.STARTS_WITH};function mt(t,e){if(!t)throw new Error("Invalid search URL");let r="",n;if(typeof t=="string")if(t.includes("?")){let[s,a]=t.split("?");r=s,n=new URLSearchParams(a)}else r=t;else typeof t=="object"&&(r=t.pathname,n=t.searchParams);let i;r.includes("/")?i=r.split("/").filter(Boolean).pop():i=r;let o=[];if(n)for(let s of n)o.push(s);if(e)for(let[s,a]of Object.entries(e))if(Array.isArray(a))for(let u of a)o.push([s,u]);else o.push([s,a??""]);return _l(i,o)}function _l(t,e){let r={resourceType:t},n=new Set;for(let[i,o]of e)Ll(r,n,i,o);return r}function Ei(t,e,r){let n=`${r.code}\0${r.operator}\0${r.value}`;e.has(n)||(e.add(n),t.filters=ve(t.filters,r))}function Ll(t,e,r,n){let i,o,s=r.indexOf(":");if(s>=0?(i=r.substring(0,s),o=r.substring(s+1)):(i=r,o=""),i!=="_"){if(i==="_has"||r.includes(".")){Ei(t,e,{code:r,operator:g.EQUALS,value:n});return}switch(i){case"_sort":Nl(t,n);break;case"_cursor":t.cursor=n;break;case"_count":t.count=Number.parseInt(n,10);break;case"_offset":t.offset=Number.parseInt(n,10);break;case"_total":t.total=n;break;case"_summary":n==="count"?(t.total="accurate",t.count=0):(n==="true"||n==="data"||n==="text")&&(t.summary=n);break;case"_include":{let a=xs(n);o==="iterate"&&(a.modifier=g.ITERATE),t.include=ve(t.include,a);break}case"_revinclude":{let a=xs(n);o==="iterate"&&(a.modifier=g.ITERATE),t.revInclude=ve(t.revInclude,a);break}case"_fields":case"_elements":t.fields=n.split(",");break;case"_type":t.types=n.split(",");break;case"_format":t.format=n;break;case"_pretty":t.pretty=n==="true";break;default:{let a=H.types[t.resourceType]?.searchParams?.[i];a?Ei(t,e,Ss(a,g.EQUALS,o,n)):Ei(t,e,Ul(i,o,n))}}}}function Nl(t,e){for(let r of e.split(",")){let n,i=!1;r.startsWith("-")?(n=r.substring(1),i=!0):n=r,t.sortRules||(t.sortRules=[]),t.sortRules.push({code:n,descending:i})}}var Fl=[g.MISSING,g.PRESENT];function Ss(t,e,r,n){if(Fl.includes(r||e))return{code:t.code,operator:r||e,value:n};switch(t.type){case"number":case"date":case"quantity":{let{operator:i,value:o}=Bl(n,r||g.EQUALS);if(!vs(t,o))throw new m(A(`Invalid format for ${t.type} search parameter: ${o}`));return{code:t.code,operator:i,value:o}}case"reference":case"string":case"token":case"uri":{if(!vs(t,n))throw new m(A(`Invalid format for ${t.type} search parameter: ${n}`));return{code:t.code,operator:ql(r)??e,value:n}}default:throw new Error("Unrecognized search parameter type: "+t.type)}}function Ul(t,e,r){let n=g.EQUALS;if(e)n=e;else if(r.length>=2){let i=r.substring(0,2);i in Ci&&(r.length===2||r.at(2)?.match(/\d/))&&(n=i,r=r.substring(i.length))}return{code:t,operator:n,value:r}}function Bl(t,e){let r=t.substring(0,2),n=Ci[r];return n?{operator:n,value:t.substring(2)}:{operator:e,value:t}}function ql(t){return Ri[t]}function xs(t){let e=t.split(":");if(e.includes("*"))throw new m(A("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new m(A(`Invalid include value '${t}': 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 m(A(`Invalid include value '${t}'`))}function vs(t,e){return t.type==="date"?Ge(e):!0}var Wl=/{{([^{}]+)}}/g;function $l(t,e,r=[]){return t=t.replaceAll(Wl,(n,i)=>{let o=k(i,r,e);return o.length!==1?"":xi(o[0])}),mt(t)}function jl(t){let e=[];t.fields&&e.push("_fields="+t.fields.join(","));for(let r of t.filters??v)e.push(Hl(r));t.sortRules&&t.sortRules.length>0&&e.push(Gl(t.sortRules)),t.cursor!==void 0&&e.push("_cursor="+encodeURIComponent(t.cursor)),t.offset!==void 0&&t.offset!==0&&e.push("_offset="+t.offset),t.count!==void 0&&e.push("_count="+t.count),t.total!==void 0&&e.push("_total="+t.total),t.types&&t.types.length>0&&e.push("_type="+t.types.join(","));for(let r of t.include??v)e.push(Ts("_include",r));for(let r of t.revInclude??v)e.push(Ts("_revinclude",r));return e.length===0?"":(_t(e),"?"+e.join("&"))}function Hl(t){let e=t.operator in Ri?":"+t.operator:"",r=t.operator!==g.EQUALS&&t.operator in Ci?t.operator:"";return`${t.code}${e}=${r}${encodeURIComponent(t.value)}`}function Gl(t){return"_sort="+t.map(e=>e.descending?"-"+e.code:e.code).join(",")}function Ts(t,e){return t+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function ht(t){let e=[],r="",n=!1;for(let i of t)n?(r+=i,n=!1):i==="\\"?n=!0:i===","?(e.push(r),r=""):r+=i;return e.push(r),e}function Ql(t,e){return A(`Invalid modifier :${t} for ${e}`)}function zl(t,e){return t in Ri?Ql(t,e):A(`Invalid operator ${t} for ${e}`)}function Jl(t){return t.types??[t.resourceType]}function tr(t,e){if(e.resourceType!==t.resourceType)return!1;for(let r of e.filters??v)if(!Yl(t,e,r))return!1;return!0}var Kl=new ee(1e3);function Yl(t,e,r){let n=H.types[e.resourceType]?.searchParams?.[r.code];if(!n)return!1;let i=k(n.expression,[E(t)],void 0,Kl);if(r.operator===g.MISSING||r.operator===g.PRESENT)return Xl(i,r);switch(n.type){case"reference":return Zl(n,i,r);case"string":case"uri":return rd(i,r);case"token":return ed(i,r);case"date":return id(i,r);default:return!1}}function Xl(t,e){let r=t.length>0;return(e.operator===g.MISSING&&e.value==="false"||e.operator===g.PRESENT&&e.value==="true")===r}function Zl(t,e,r){let n=Jr(r.operator);if(r.value===""&&e.length===0)return r.operator===g.EQUALS;let i=Si(e);for(let o of ht(r.value)){let s=!1;if(o.includes("/")?s=i.includes(o):(t.target?.length===1||r.code==="_compartment")&&(s=i.some(a=>a?.endsWith("/"+o))),s)return!n}return n}function ed(t,e){let r=bi(t),n=ht(e.value),i=Jr(e.operator);for(let o of r)for(let s of n)if(td(o,s))return!i;return i}function td(t,e){if(e.includes("|")){let[r,n]=e.split("|").map(i=>i.toLowerCase());return!r&&!n?!1:r?t.system?.toLowerCase()===r&&(!n||t.value?.toLowerCase()===n):!t.system&&t.value?.toLowerCase()===n}return t.value?.toLowerCase()===e.toLowerCase()}function rd(t,e){let r=Ti(t),n=ht(e.value),i=Jr(e.operator);for(let o of r)for(let s of n)if(nd(o,s))return!i;return i}function nd(t,e){return t.toLowerCase().includes(e.toLowerCase())}function id(t,e){let r=vi(t),n=ht(e.value),i=Jr(e.operator);for(let o of r)for(let s of n)if(od(o,e.operator,s))return!i;return i}function od(t,e,r){if(!t)return!1;let n=Ot(r);if(!n)return!1;let i=t.start??"0000",o=t.end??"9999",s=n.start,a=n.end;switch(e){case g.APPROXIMATELY:case g.EQUALS:case g.NOT_EQUALS:return i<a&&o>s;case g.LESS_THAN:return i<s;case g.GREATER_THAN:return o>a;case g.LESS_THAN_OR_EQUALS:return i<=a;case g.GREATER_THAN_OR_EQUALS:return o>=s;case g.STARTS_AFTER:return i>a;case g.ENDS_BEFORE:return o<s;default:return!1}}function Jr(t){return t===g.NOT_EQUALS||t===g.NOT}var sd={resourceType:"*"},bs=["DomainConfiguration","JsonWebKey","Login"],Es=["Package","PackageRelease","PackageInstallation","Project","ProjectMembership","User","UserSecurityRequest"],Ne={READ:"read",VREAD:"vread",UPDATE:"update",DELETE:"delete",HISTORY:"history",CREATE:"create",SEARCH:"search"},Rs=[Ne.READ,Ne.VREAD,Ne.HISTORY,Ne.SEARCH];function ad(t,e){return Pi(t,Ne.SEARCH,e)}function cd(t,e){return bs.includes(e)?!1:Pi(t,Ne.UPDATE,e)}function Pi(t,e,r){return!!t.resource?.some(n=>Ps(n,r,e))}function ud(t,e){return!!Cs(e,Ne.UPDATE,t)}function Cs(t,e,r){return r?r.resource?.find(n=>ld(t,e,n)):sd}function ld(t,e,r){let n=t.resourceType;return Ps(r,n,e)?n==="Binary"?!0:!(r.compartment&&!t.meta?.compartment?.some(i=>i.reference===r.compartment?.reference)||r.criteria&&!tr(t,mt(r.criteria))):!1}function Ps(t,e,r){return t.resourceType!==e&&(t.resourceType!=="*"||Es.includes(e))?!1:t.interaction?t.interaction.includes(r):!t.readonly||Rs.includes(r)}var dd={FIRST:"first",APPLICATION:"application"};function X(){return typeof window<"u"}function pd(){return typeof Buffer<"u"}function fd(){return typeof window<"u"?window:void 0}function Kr(){return typeof Buffer<"u"?Buffer:void 0}var me={assign(t){X()&&globalThis.location.assign(t)},reload(){X()&&globalThis.location.reload()},getSearch(){return X()?globalThis.location.search:""},getPathname(){return X()?globalThis.location.pathname:""},getLocation(){return X()?globalThis.location.toString():""},getOrigin(){return X()?globalThis.location.protocol+"//"+globalThis.location.host+"/":""}};function ws(t){if(X()){let r=window.atob(t),n=Uint8Array.from(r,i=>i.codePointAt(0));return new window.TextDecoder().decode(n)}let e=Kr();if(e)return e.from(t,"base64").toString("utf-8");throw new Error("Unable to decode base64")}function rr(t){if(X()){let r=new window.TextEncoder().encode(t),n=String.fromCodePoint.apply(null,r);return window.btoa(n)}let e=Kr();if(e)return e.from(t,"utf8").toString("base64");throw new Error("Unable to encode base64")}function wi(t){return rr(t).replaceAll("+","-").replaceAll("/","_").replace(/[=]{1,2}$/,"")}function nr(t){t=t.padEnd(t.length+(4-t.length%4)%4,"=");let e=t.replaceAll("-","+").replaceAll("_","/");return ws(e)}function Yr(){let t=new Uint32Array(28);return crypto.getRandomValues(t),ai(t.buffer)}async function Ai(t){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(t))}function oe(){return typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replaceAll(/[xy]/g,t=>{let e=Math.trunc(Math.random()*16);return(t==="x"?e:e&3|8).toString(16)})}function As(t){let e={};t=le(t);for(let i of t.entry??v){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;if(s)e[s]=oe(),i.fullUrl="urn:uuid:"+e[s],delete i.resource?.id;else if(i.fullUrl?.startsWith("resource:")){let a=i.fullUrl.slice(9);e[a]=oe(),i.fullUrl="urn:uuid:"+e[a]}}let r=t.entry,n=JSON.stringify({resourceType:"Bundle",type:"transaction",entry:r?.map(i=>({fullUrl:i.fullUrl,request:{method:"POST",url:i.resource?.resourceType},resource:i.resource}))},(i,o)=>md(i,o,e),2);return Os(JSON.parse(n))}function md(t,e,r){if((t==="reference"||t==="url")&&typeof e=="string"){let n;if(e.includes("/")?n=e.split("/")[1]:e.startsWith("urn:uuid:")||e.startsWith("resource:")?n=e.slice(9):e.startsWith("#")&&(n=e.slice(1)),n){let i=r[n];if(i)return"urn:uuid:"+i}}return e}function Os(t){let e=gd(t),{sorted:r,cycles:n}=hd(e),i={},o=[];for(let a of t.entry??v)a.fullUrl?i[a.fullUrl]=a:o.push(a);let s=r.map(a=>i[a]);for(let a of n)for(let u of a){let l=i[u],d={...l,request:{...l.request,method:"PUT"}};s.push(d)}return s.push(...o),{...t,entry:s}}var gt={NotVisited:"NotVisited",Visiting:"Visiting",Visited:"Visited"};function hd(t){let e=[],r={},n=[];for(let o of Object.keys(t))r[o]=gt.NotVisited;function i(o,s){if(r[o]===gt.Visited)return!0;if(r[o]===gt.Visiting){let u=s.lastIndexOf(o);return u!==-1&&n.push(s.slice(u)),!0}r[o]=gt.Visiting,s.push(o);let a=!1;for(let u of t[o]??v)i(u,s)||(a=!0);return r[o]=gt.Visited,s.pop(),e.unshift(o),!a}for(let o in t)r[o]===gt.NotVisited&&i(o,[]);return{sorted:e,cycles:n}}function Is(t,e){for(let r in t)if(t[r]&&typeof t[r]=="object"){let n=t[r];if(J(n)){let i=n.reference;(i.startsWith("urn:uuid:")||i.startsWith("resource:"))&&e(i)}else Is(n,e)}}function gd(t){let e={};for(let r of t.entry??v)r.fullUrl&&(e[r.fullUrl]=[]);for(let r of t.entry??v){let n=r.fullUrl;n&&r.resource&&Is(r.resource,i=>{i!==n&&e[i]&&e[i].push(n)})}return e}function yd(t){t=le(t);let e={resourceType:"Bundle",type:"transaction",entry:[{resource:t}]};if(t.contained){for(let r of t.contained)e.entry.push({resource:r});t.contained=void 0}for(let r of e.entry)r.resource&&!r.resource.id&&(r.resource.id=oe());return As(e)}function xd(t,e,r){return t.entry?.find(({resource:n})=>n?.resourceType===e&&n?.id===r)?.resource}async function vd(t,e,r,n){return{hook:r.hook,hookInstance:oe(),context:n,prefetch:await Td(t,e,r,n)}}async function Td(t,e,r,n){if(!r.prefetch)return{};let i={};for(let[o,s]of Object.entries(r.prefetch)){let a=await Sd(t,e,n,s);i[o]=a??null}return i}function Sd(t,e,r,n){if(n=ks(e,r,n),n.includes("{{"))return Promise.resolve(null);let i=/^(\w+)\/([0-9a-zA-Z-_]+)$/.exec(n);if(i){let[a,u]=i.slice(1);return t.readResource(a,u)}let[o,s]=Je(n,"?",2);return t.search(o,s)}var bd=new Set(["userPractitionerId","userPractitionerRoleId","userPatientId","userRelatedPersonId"]);function ks(t,e,r){return r.replaceAll(/\{\{([^}]+)\}\}/g,(n,i)=>{if(i=i.trim(),bd.has(i))return t.id;if(i.startsWith("context.")){let o=i.substring(8),s=Ed(e,o);if(de(s))return s;if(typeof s=="number"||typeof s=="boolean")return String(s)}return n})}function Ed(t,e){let r=e.split("."),n=t;for(let i of r)if(n&&C(n)&&i in n)n=n[i];else return;return n}var V={CSS:"text/css",DICOM:"application/dicom",DICOM_JSON:"application/dicom+json",EVENT_STREAM:"text/event-stream",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",JOSE:"application/jose",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 Xr=class{constructor(){c(this,"listeners");this.listeners={}}addEventListener(e,r){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(r)}removeEventListener(e,r){let n=this.listeners[e];if(n){for(let i=0;i<n.length;i++)if(n[i]===r){n.splice(i,1);return}}}dispatchEvent(e){let r=this.listeners[e.type];for(let n of r??v)try{n.call(this,e)}catch(i){console.error(`Unhandled error in "${e.type}" event listener`,i)}return!e.defaultPrevented}removeAllListeners(){this.listeners={}}listenerCount(e){return this.listeners[e]?.length??0}},se=class{constructor(){c(this,"emitter",new Xr)}dispatchEvent(e){this.emitter.dispatchEvent(e)}addEventListener(e,r){this.emitter.addEventListener(e,r)}removeEventListener(e,r){this.emitter.removeEventListener(e,r)}removeAllListeners(){this.emitter.removeAllListeners()}listenerCount(e){return this.emitter.listenerCount(e)}};var Z={Event:typeof globalThis.Event<"u"?globalThis.Event:void 0,ErrorEvent:void 0,CloseEvent:void 0},Ms=!1;function Rd(){if(typeof globalThis.Event>"u")throw new Error("Unable to lazy init events for ReconnectingWebSocket. globalThis.Event is not defined yet");Z.Event=globalThis.Event,Z.ErrorEvent=class extends Event{constructor(r,n){super("error",n);c(this,"message");c(this,"error");this.message=r.message,this.error=r}},Z.CloseEvent=class extends Event{constructor(r=1e3,n="",i){super("close",i);c(this,"code");c(this,"reason");c(this,"wasClean",!0);this.code=r,this.reason=n}}}function Vs(t,e){if(!t)throw new Error(e)}function Cd(){}function Zr(t){if(t instanceof Z.CloseEvent){let e=t;return new Z.CloseEvent(e.code,e.reason,void 0)}if(t instanceof Z.ErrorEvent){let e=t;return new Z.ErrorEvent(e.error??new Error(e.message),void 0)}return new t.constructor(t.type,t)}function _s(t,e){let r=t;return r.error instanceof Error?new Z.ErrorEvent(r.error,e):new Z.ErrorEvent(new Error(r.message||"WebSocket error"),e)}var Ze={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},Ds=!1,et=class t extends se{constructor(r,n,i={}){Ms||(Rd(),Ms=!0);super();c(this,"_ws");c(this,"_retryCount",-1);c(this,"_uptimeTimeout");c(this,"_connectTimeout");c(this,"_shouldReconnect",!0);c(this,"_connectLock",!1);c(this,"_binaryType");c(this,"_closeCalled",!1);c(this,"_messageQueue",[]);c(this,"_debugLogger",console.log.bind(console));c(this,"_url");c(this,"_protocols");c(this,"_options");c(this,"onclose",null);c(this,"onerror",null);c(this,"onmessage",null);c(this,"onopen",null);c(this,"_handleOpen",r=>{this._debug("open event");let{minUptime:n=Ze.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),n),Vs(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(r),this.dispatchEvent(Zr(r))});c(this,"_handleMessage",r=>{this._debug("message event"),this.onmessage&&this.onmessage(r),this.dispatchEvent(Zr(r))});c(this,"_handleError",r=>{let n=_s(r,this);this._debug("error event",n.message),this._disconnect(void 0,n.message==="TIMEOUT"?"timeout":void 0),this.onerror&&this.onerror(n),this._debug("exec error listeners"),this.dispatchEvent(Zr(n)),this._connect()});c(this,"_handleClose",r=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(r),this.dispatchEvent(Zr(r))});this._url=r,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 t.CONNECTING}get OPEN(){return t.OPEN}get CLOSING(){return t.CLOSING}get CLOSED(){return t.CLOSED}get binaryType(){return this._ws?this._ws.binaryType:this._binaryType}set binaryType(r){this._binaryType=r,this._ws&&(this._ws.binaryType=r)}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?t.CLOSED:t.CONNECTING}get url(){return this._ws?this._ws.url:""}get shouldReconnect(){return this._shouldReconnect}close(r=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(r,n)}reconnect(r,n){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED?this._connect():(this._disconnect(r,n),this._connect())}send(r){if(this._ws?.readyState===this.OPEN)this._debug("send",r),this._ws.send(r);else{let{maxEnqueuedMessages:n=Ze.maxEnqueuedMessages}=this._options;this._messageQueue.length<n&&(this._debug("enqueue",r),this._messageQueue.push(r))}}_debug(...r){this._options.debug&&this._debugLogger("RWS>",...r)}_getNextDelay(){let{reconnectionDelayGrowFactor:r=Ze.reconnectionDelayGrowFactor,minReconnectionDelay:n=Ze.minReconnectionDelay,maxReconnectionDelay:i=Ze.maxReconnectionDelay}=this._options,o=0;return this._retryCount>0&&(o=n*Math.pow(r,this._retryCount-1),o>i&&(o=i)),this._debug("next delay",o),o}_wait(){return new Promise(r=>{setTimeout(r,this._getNextDelay())})}_connect(){if(this._connectLock||!this._shouldReconnect)return;this._connectLock=!0;let{maxRetries:r=Ze.maxRetries,connectionTimeout:n=Ze.connectionTimeout}=this._options;if(this._retryCount>=r){this._connectLock=!1,this._debug("max retries reached",this._retryCount,">=",r);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"&&!Ds&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),Ds=!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 Z.ErrorEvent(Error(i.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new Z.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(r=1e3,n){if(this._clearTimeouts(),!this._ws)return;let i=this._ws;this._removeListeners(),i.addEventListener("error",Cd);try{i.close(r,n),this._handleClose(new Z.CloseEvent(r,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 en={"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"},Ls=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],tn=["DiagnosticReport-update"];function Oi(t){return tn.includes(t)}function Ii(t){if(tn.includes(t))throw new m(T(`'context.version' is required for '${t}'.`))}var Ns={"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 Fs(t){return Ls.includes(t)}function ki(t){return!!t.endpoint}function rn(t){if(!or(t))throw new m(T("subscriptionRequest must be an object conforming to SubscriptionRequest type."));let{channelType:e,mode:r,topic:n,events:i}=t,o={"hub.channel.type":e,"hub.mode":r,"hub.topic":n};return r==="subscribe"&&(o["hub.events"]=i.join(",")),ki(t)&&(o["hub.channel.endpoint"]=t.endpoint),new URLSearchParams(o).toString()}function or(t){if(typeof t!="object")return!1;let{channelType:e,mode:r,topic:n,events:i}=t;if(!(e&&r&&n&&i)||typeof n!="string"||typeof i!="object"||!Array.isArray(i)||i.length<1||e!=="websocket"||r!=="subscribe"&&r!=="unsubscribe")return!1;for(let o of i)if(!en[o])return!1;return!(ki(t)&&!(typeof t.endpoint=="string"&&t.endpoint.startsWith("ws")))}function Pd(t,e,r,n){if(typeof e!="object")throw new m(T(`context[${r}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.id&&typeof e.id=="string"))throw new m(T(`context[${r}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new m(T(`context[${r}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!Fs(e.resourceType))throw new m(T(`context[${r}] 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 m(T(`context[${r}] is invalid. context[${r}] for the '${t}' event should contain resource of type ${i}.`))}}function wd(t,e,r,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),n.reference){if(!J(e.reference))throw new m(T(`context[${r}] is invalid. Expected key '${e.key}' to be a reference.`))}else Pd(t,e.resource,r,n)}function Ad(t,e){let r=new Map,n=Ns[t];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new m(T(`Key '${o}' not found for event '${t}'. Make sure to add only valid keys.`));wd(t,e[i],i,n[o],r)}for(let[i,o]of Object.entries(n)){if(!(o.optional||r.has(i)))throw new m(T(`Missing required key '${i}' on context for '${t}' event.`));if(!o.manyAllowed&&(r.get(i)??0)>1)throw new m(T(`${r.get(i)} context entries with key '${i}' found for the '${t}' event when schema only allows for 1.`))}}function nn(t,e,r,n){if(!(t&&typeof t=="string"))throw new m(T("Must provide a topic."));if(!en[e])throw new m(T(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(en).join(", ")}`));if(typeof r!="object")throw new m(T("context must be a context object or array of context objects."));if(tn.includes(e)&&!n)throw new m(T(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(r)?r:[r];return Ad(e,i),{timestamp:new Date().toISOString(),id:oe(),event:{"hub.topic":t,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var ir=class extends se{constructor(r,n){super();c(this,"subRequest");c(this,"websocket");if(this.subRequest=r,!r.endpoint)throw new m(T("Subscription request should contain an endpoint."));if(!or(r))throw new m(T("Subscription request failed validation."));let{ReconnectingWebSocket:i=et,...o}=n??{},s=new i(r.endpoint,void 0,o);s.addEventListener("open",()=>{this.dispatchEvent({type:"connect"})}),s.addEventListener("message",a=>{let u=JSON.parse(a.data);if(!u.event){u["hub.mode"]==="denied"&&this.disconnect();return}let l=u;l.event["hub.event"]!=="heartbeat"&&(this.dispatchEvent({type:"message",payload:l}),s.send(JSON.stringify({id:u?.id,timestamp:new Date().toISOString()})))}),s.addEventListener("close",()=>{this.dispatchEvent({type:"disconnect"})}),this.websocket=s}disconnect(){this.websocket.close()}};function Od(t){return JSON.parse(nr(t))}function Mi(t){return t.split(".").length===3}function sr(t){let[e,r,n]=t.split(".");return Od(r)}function Di(t){try{return typeof sr(t).login_id=="string"}catch{return!1}}function Vi(t){try{let r=sr(t).exp;return typeof r=="number"?r*1e3:void 0}catch{return}}var ar=class{constructor(e){c(this,"medplum");this.medplum=e}async get(e){return this.medplum.get(`keyvalue/v1/${e}`)}async set(e,r){await this.medplum.put(`keyvalue/v1/${e}`,r,V.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var Us;Us=Symbol.toStringTag;var $=class{constructor(e){c(this,Us,"ReadablePromise");c(this,"suspender");c(this,"status","pending");c(this,"response");c(this,"error");this.suspender=e.then(r=>(this.status="success",this.response=r,r),r=>{throw this.status="error",this.error=r,r})}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,r){return this.suspender.then(e,r)}catch(e){return this.suspender.catch(e)}finally(e){return this.suspender.finally(e)}};var yt=class{constructor(e,r=""){c(this,"storage");c(this,"prefix","");this.storage=e??globalThis.localStorage??new on,this.prefix=r}makeKey(e){return this.prefix+e}clear(){if(this.storage===globalThis.localStorage&&this.prefix)for(let e=this.storage.length-1;e>=0;e--){let r=this.storage.key(e);r?.startsWith(this.prefix)&&this.storage.removeItem(r)}else this.storage.clear()}getString(e){return this.storage.getItem(this.makeKey(e))??void 0}setString(e,r){r?this.storage.setItem(this.makeKey(e),r):this.storage.removeItem(this.makeKey(e))}getObject(e){let r=this.getString(e);return r?JSON.parse(r):void 0}setObject(e,r){this.setString(e,r?Vt(r):void 0)}},on=class{constructor(){c(this,"data");this.data=new Map}get length(){return this.data.size}clear(){this.data.clear()}getItem(e){return this.data.get(e)??null}setItem(e,r){r?this.data.set(e,r):this.data.delete(e)}removeItem(e){this.data.delete(e)}key(e){return Array.from(this.data.keys())[e]}},_i=class extends yt{constructor(){super();c(this,"initialized");c(this,"initPromise");c(this,"initResolve",()=>{});this.initialized=!1,this.initPromise=new Promise(r=>{this.initResolve=r})}setInitialized(){this.initialized||(this.initResolve(),this.initialized=!0)}getInitPromise(){return this.initPromise}get isInitialized(){return this.initialized}};var Id=[WebSocket.CLOSING,WebSocket.CLOSED],xt=class extends se{constructor(...r){super();c(this,"criteria");this.criteria=new Set(r)}getCriteria(){return this.criteria}_addCriteria(r){this.criteria.add(r)}_removeCriteria(r){this.criteria.delete(r)}},Li=class{constructor(e,r){c(this,"criteria");c(this,"emitter");c(this,"refCount");c(this,"subscriptionProps");c(this,"subscriptionId");c(this,"token");c(this,"tokenExpiry");c(this,"state","idle");c(this,"generation",0);c(this,"lastUnrefTime");this.criteria=e,this.emitter=new xt(e),this.refCount=1,this.subscriptionProps=r?{...r}:void 0}nextGeneration(){return++this.generation}},ur=class{constructor(e,r,n){c(this,"medplum");c(this,"ws");c(this,"masterSubEmitter");c(this,"criteriaEntries");c(this,"criteriaEntriesBySubscriptionId");c(this,"wsClosed");c(this,"pingTimer");c(this,"tokenRefreshTimer");c(this,"pingIntervalMs");c(this,"waitingForPong",!1);c(this,"currentProfile");if(!(e instanceof lr))throw new m(T("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(r).toString()}catch{throw new m(T("Not a valid URL"))}let o=n?.ReconnectingWebSocket?new n.ReconnectingWebSocket(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger}):new et(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger});this.medplum=e,this.ws=o,this.masterSubEmitter=new xt,this.criteriaEntries=new Map,this.criteriaEntriesBySubscriptionId=new Map,this.wsClosed=!1,this.pingIntervalMs=n?.pingIntervalMs??5e3,this.currentProfile=e.getProfile(),this.setupListeners()}setupListeners(){let e=this.ws;e.addEventListener("message",r=>{try{let n=JSON.parse(r.data);if(n.type==="pong"){this.waitingForPong=!1;return}let i=n,o=i?.entry?.[0]?.resource;if(!o){console.warn("Received WebSocket message without a SubscriptionStatus resource; ignoring",i);return}if(o.type==="heartbeat"){this.masterSubEmitter?.dispatchEvent({type:"heartbeat",payload:i});return}if(o.type==="handshake"){let a=K(o.subscription),u={type:"connect",payload:{subscriptionId:a}};this.masterSubEmitter?.dispatchEvent(u);let l=this.criteriaEntriesBySubscriptionId.get(a);if(!l){console.warn("Received handshake for criteria the SubscriptionManager is not listening for yet");return}(l.state==="connecting"||l.state==="refreshing")&&(l.state="active"),l.emitter.dispatchEvent({...u});return}this.masterSubEmitter?.dispatchEvent({type:"message",payload:i});let s=this.criteriaEntriesBySubscriptionId.get(K(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",r=>{let n={type:"error",payload:new m({resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"WebSocket connection closed due to an error"},diagnostics:r.error?Ie(r.error):r.message}]})};this.masterSubEmitter?.dispatchEvent(n);for(let i of this.getAllCriteriaEmitters())i.dispatchEvent({...n})}),e.addEventListener("close",()=>{let r={type:"close"};this.masterSubEmitter?.dispatchEvent(r);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...r});this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=void 0,this.waitingForPong=!1),this.tokenRefreshTimer&&(clearInterval(this.tokenRefreshTimer),this.tokenRefreshTimer=void 0),this.wsClosed&&(this.criteriaEntries.clear(),this.criteriaEntriesBySubscriptionId.clear(),this.masterSubEmitter?.removeAllListeners())}),e.addEventListener("open",()=>{let r={type:"open"};this.masterSubEmitter?.dispatchEvent(r);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...r});this.refreshAllSubscriptions().catch(console.error),this.pingTimer??=setInterval(()=>{this.waitingForPong?(this.waitingForPong=!1,e.reconnect()):(e.send(JSON.stringify({type:"ping"})),this.waitingForPong=!0),this.gcUnrefEntries()},this.pingIntervalMs),this.tokenRefreshTimer??=setInterval(()=>{this.checkTokenExpirations(),this.gcUnrefEntries()},6e4)}),this.medplum.addEventListener("change",()=>{let r=this.medplum.getProfile();this.currentProfile&&r===void 0?this.ws.close():r&&this.currentProfile?.id!==r.id&&this.ws.reconnect(),this.currentProfile=r})}sendBind(e){this.ws.send(JSON.stringify({type:"bind-with-token",payload:{token:e}}))}sendUnbind(e){this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"unbind-from-token",payload:{token:e}}))}emitError(e,r){let n={type:"error",payload:r};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}maybeEmitDisconnect(e){let{subscriptionId:r}=e;if(r){let n={type:"disconnect",payload:{subscriptionId:r}};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}else console.warn("Called disconnect for `CriteriaEntry` before `subscriptionId` was present.")}isStale(e,r){return this.isEntryGettingRemoved(e)||e.generation!==r}maybeGetCriteriaEntry(e,r){let n=this.criteriaEntries.get(e);if(n){if(!r)return n.bareCriteria;for(let i of n.criteriaWithProps)if(xe(r,i.subscriptionProps))return i}}getAllCriteriaEmitters(){let e=[];for(let r of this.criteriaEntries.values())for(let n of cr(r))n.refCount>0&&e.push(n.emitter);return e}addCriteriaEntry(e){let{criteria:r,subscriptionProps:n}=e,i;this.criteriaEntries.has(r)?i=this.criteriaEntries.get(r):(i={criteriaWithProps:[]},this.criteriaEntries.set(r,i)),n?i.criteriaWithProps.push(e):i.bareCriteria=e}removeCriteriaEntry(e){e.state="removed",e.generation++;let{criteria:r,subscriptionProps:n,subscriptionId:i,token:o}=e;if(!this.criteriaEntries.has(r))return;let s=this.criteriaEntries.get(r);n?s.criteriaWithProps=s.criteriaWithProps.filter(a=>{let u=a.subscriptionProps;return!xe(n,u)}):s.bareCriteria=void 0,!s.bareCriteria&&s.criteriaWithProps.length===0&&(this.criteriaEntries.delete(r),this.masterSubEmitter?._removeCriteria(r)),i&&this.criteriaEntriesBySubscriptionId.delete(i),o&&this.sendUnbind(o)}async subscribeToCriteria(e){this.wsClosed&&await this.reconnectIfNeeded(),this.ws.readyState===WebSocket.OPEN&&this.medplum.getProfile()&&e.state==="idle"&&(e.state="connecting",await this.rebindCriteriaEntry(e))}async refreshAllSubscriptions(){this.criteriaEntriesBySubscriptionId.clear();let e=[],r=[];for(let n of this.criteriaEntries.values())for(let i of cr(n))i.refCount===0?r.push(i):e.push(i);for(let n of r)this.removeCriteriaEntry(n);for(let n of e)n.token&&this.sendUnbind(n.token),n.token=void 0,n.tokenExpiry=void 0,n.subscriptionId=void 0,n.state="idle",n.generation++,await this.subscribeToCriteria(n)}async rebindCriteriaEntry(e){let r=e.nextGeneration();try{if(!e.subscriptionId){let a=await this.medplum.createResource({...e.subscriptionProps,resourceType:"Subscription",status:"active",reason:`WebSocket subscription for ${I(this.medplum.getProfile())}`,channel:{type:"websocket"},criteria:e.criteria});if(e.subscriptionId??=a.id,this.isStale(e,r))return}let{parameter:n}=await this.medplum.get(`fhir/R4/Subscription/${e.subscriptionId}/$get-ws-binding-token`,{cache:"no-cache"}),i=n?.find(a=>a.name==="token")?.valueString,o=n?.find(a=>a.name==="websocket-url")?.valueUrl,s=n?.find(a=>a.name==="expiration")?.valueDateTime;if(!i)throw new m(T("Failed to get token"));if(!o)throw new m(T("Failed to get URL from $get-ws-binding-token"));if(!s)throw new m(T("Failed to get expiration from $get-ws-binding-token"));if(this.isStale(e,r))return;e.token=i,e.tokenExpiry=new Date(s).getTime(),this.criteriaEntriesBySubscriptionId.set(e.subscriptionId,e),this.sendBind(i)}catch(n){console.error(Ie(n)),e.generation===r&&!this.isEntryGettingRemoved(e)&&(e.state=e.state==="refreshing"?"active":"idle"),this.emitError(e,n)}}checkTokenExpirations(){if(!this.medplum.getProfile())return;let e=Date.now();for(let r of this.criteriaEntries.values())for(let n of cr(r))n.refCount===0||!n.tokenExpiry||n.tokenExpiry-e<=3e5&&n.state==="active"&&this.ws.readyState===WebSocket.OPEN&&(n.state="refreshing",this.rebindCriteriaEntry(n).catch(i=>{this.masterSubEmitter?.dispatchEvent({type:"error",payload:i})}))}addCriteria(e,r){this.masterSubEmitter&&this.masterSubEmitter._addCriteria(e);let n=this.maybeGetCriteriaEntry(e,r);if(n)return n.refCount===0&&(n.lastUnrefTime=void 0,n.generation++,n.state!=="active"&&(n.state=n.token?"active":"idle")),n.refCount+=1,n.state==="idle"&&this.subscribeToCriteria(n).catch(console.error),n.emitter;let i=new Li(e,r);return this.addCriteriaEntry(i),this.subscribeToCriteria(i).catch(console.error),i.emitter}removeCriteria(e,r){let n=this.maybeGetCriteriaEntry(e,r);if(!n||this.isEntryGettingRemoved(n)){console.warn("Criteria not known to `SubscriptionManager`. Possibly called remove too many times.");return}n.refCount-=1,n.refCount===0&&(n.lastUnrefTime=Date.now(),n.generation++)}gcUnrefEntries(){let e=Date.now(),r=[];for(let n of this.criteriaEntries.values())for(let i of cr(n))i.refCount===0&&i.lastUnrefTime!==void 0&&e-i.lastUnrefTime>=1e4&&r.push(i);for(let n of r)this.maybeEmitDisconnect(n),this.removeCriteriaEntry(n);r.length>0&&this.criteriaEntries.size===0&&this.closeWebSocket()}isEntryGettingRemoved(e){return e.refCount===0||e.state==="removed"}getWebSocket(){return this.ws}closeWebSocket(){if(!this.wsClosed){if(this.ws.readyState===WebSocket.OPEN)for(let e of this.criteriaEntries.values())for(let r of cr(e))r.token&&this.sendUnbind(r.token);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 xt(...Array.from(this.criteriaEntries.keys()))),this.masterSubEmitter}async reconnectIfNeeded(){Id.includes(this.getWebSocket().readyState)&&await new Promise(e=>{let r=()=>{this.getWebSocket().removeEventListener("open",r),e()};this.getWebSocket().addEventListener("open",r),this.reconnectWebSocket()})}};function cr(t){return t.bareCriteria?[t.bareCriteria,...t.criteriaWithProps]:t.criteriaWithProps}var kd=new ee(1e3);async function Md({resource:t,subscription:e,context:r,getPreviousResource:n,logger:i}){if(!Dd(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=mt(o);if(t.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${t.resourceType}")`),!1;if(!await Bs(e,t,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let u=!1,l=!1;for(let h of e.extension??v)if(h.url==="https://medplum.com/fhir/StructureDefinition/subscription-supported-interaction"&&(u=!0,h.valueCode===r.interaction)){l=!0;break}if(u&&!l)return i?.debug("Ignored rest hook for unsupported interaction",{subscription:e.id,interaction:r.interaction}),!1;if(!tr(t,s))return!1;let d=jr(e.meta)??[],f=jr(t.meta)??[];return d.length&&!d.some(h=>f.some(b=>b.reference===h.reference))?(i?.debug("Subscription suppressed due to mismatched accounts",{subscriptionId:e.id,resource:I(t)}),!1):!0}function Dd(t,e){let r=t.channel?.type;return r==="rest-hook"?t.channel?.endpoint?!0:(e?.debug("Ignore rest-hook missing URL"),!1):r==="websocket"}async function Bs(t,e,r){let n=ae(t,"https://medplum.com/fhir/StructureDefinition/fhir-path-criteria-expression");if(!n?.valueString)return!0;let i=await r(e),o={"%current":E(e),"%previous":E(i??{})};return k(n.valueString,[E(e)],o,kd)?.[0]?.value===!0}var sn="5.1.36-cd2d4e5",Vd="medplum-cli",js=V.FHIR_JSON+", */*; q=0.1",_d="https://api.medplum.com/",Ld=1e3,Nd=6e4,Fd=0,Ud=3e5,Bd="Binary/",qs={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},qd=2,tt={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",PreAuthorizedCode:"urn:ietf:params:oauth:grant-type:pre-authorized_code"},Hs={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"},Wd={ClientSecretBasic:"client_secret_basic",ClientSecretPost:"client_secret_post",ClientSecretJwt:"client_secret_jwt",PrivateKeyJwt:"private_key_jwt",None:"none"},Gs={JwtBearer:"urn:ietf:params:oauth:client-assertion-type:jwt-bearer"},$d={ES256:"ES256",ES384:"ES384",ES512:"ES512",HS256:"HS256",RS256:"RS256",RS384:"RS384",RS512:"RS512"},lr=class extends se{constructor(r){super();c(this,"options");c(this,"fetch");c(this,"createPdfImpl");c(this,"storage");c(this,"requestCache");c(this,"cacheTime");c(this,"baseUrl");c(this,"fhirBaseUrl");c(this,"authorizeUrl");c(this,"tokenUrl");c(this,"logoutUrl");c(this,"fhircastHubUrl");c(this,"cdsServicesUrl");c(this,"defaultHeaders");c(this,"onUnauthenticated");c(this,"autoBatchTime");c(this,"autoBatchQueue");c(this,"maxRetries");c(this,"maxRetryTime");c(this,"refreshGracePeriod");c(this,"subscriptionManager");c(this,"medplumServer");c(this,"clientId");c(this,"clientSecret");c(this,"credentialsInHeader");c(this,"autoBatchTimerId");c(this,"accessToken");c(this,"accessTokenExpires");c(this,"refreshToken");c(this,"refreshPromise");c(this,"profilePromise");c(this,"sessionDetails");c(this,"currentRateLimits");c(this,"basicAuth");c(this,"initPromise");c(this,"initComplete",!0);c(this,"keyValueClient");c(this,"logLevel");if(r?.baseUrl&&!r.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");this.options=r??{},this.fetch=r?.fetch??jd(),this.storage=r?.storage??new yt(void 0,r?.storagePrefix),this.createPdfImpl=r?.createPdf,this.baseUrl=lt(r?.baseUrl??_d),this.fhirBaseUrl=W(this.baseUrl,r?.fhirUrlPath??"fhir/R4"),this.authorizeUrl=W(this.baseUrl,r?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=W(this.baseUrl,r?.tokenUrl??"oauth2/token"),this.logoutUrl=W(this.baseUrl,r?.logoutUrl??"oauth2/logout"),this.fhircastHubUrl=W(this.baseUrl,r?.fhircastHubUrl??"fhircast/STU3"),this.cdsServicesUrl=W(this.baseUrl,r?.cdsServicesUrl??"cds-services"),this.clientId=r?.clientId??"",this.clientSecret=r?.clientSecret??"",this.credentialsInHeader=r?.authCredentialsMethod==="header",this.defaultHeaders=r?.defaultHeaders??{},this.onUnauthenticated=r?.onUnauthenticated,this.refreshGracePeriod=r?.refreshGracePeriod??Ud,this.logLevel=this.initializeLogLevel(r),this.maxRetries=r?.maxRetries??2,this.maxRetryTime=r?.maxRetryTime??2e3,this.cacheTime=r?.cacheTime??(X()?Nd:Fd),this.cacheTime>0?this.requestCache=new ee(r?.resourceCacheSize??Ld):this.requestCache=void 0,r?.autoBatchTime?(this.autoBatchTime=r.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0),r?.accessToken&&this.setAccessToken(r.accessToken),this.storage.getInitPromise===void 0?(r?.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(()=>{r?.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}initializeLogLevel(r){return r?.logLevel?r.logLevel:r?.verbose!==void 0&&r.verbose?"verbose":"none"}async attemptResumeActiveLogin(){let r=this.getActiveLogin();r&&(this.setAccessToken(r.accessToken,r.refreshToken),await this.refreshProfile())}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}getFhircastHubUrl(){return this.fhircastHubUrl}getCdsServicesUrl(){return this.cdsServicesUrl}getDefaultHeaders(){return this.defaultHeaders}clear(){this.storage.clear(),this.clearActiveLogin()}clearActiveLogin(){this.storage.setString("activeLogin",void 0),this.requestCache?.clear(),this.accessToken=void 0,this.refreshToken=void 0,this.refreshPromise=void 0,this.accessTokenExpires=void 0,this.sessionDetails=void 0,this.medplumServer=void 0,this.dispatchEvent({type:"change"})}invalidateUrl(r){r=r.toString(),this.requestCache?.delete(r)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(r){let n=W(this.fhirBaseUrl,r);for(let i of this.requestCache?.keys()??v)(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache?.delete(i)}notifyResourceModified(r){r.operation!=="delete"&&r.resource?this.cacheResource(r.resource,void 0):r.id&&this.deleteCacheEntry(this.fhirUrl(r.resourceType,r.id).toString()),this.invalidateSearches(r.resourceType),this.dispatchResourceModified(r)}get(r,n={}){r=r.toString();let i=this.getCacheEntry(r,n);if(i)return i.value;let o;r.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue&&!n.disableAutoBatch?o=new Promise((a,u)=>{this.autoBatchQueue.push({method:"GET",url:r.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:u}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):(n.method="GET",o=this.request(r,n));let s=new $(o);return this.setCacheEntry(r,s,n),s}post(r,n,i,o={}){return r=r.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(r),o.method="POST",this.request(r,o)}put(r,n,i,o={}){return r=r.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(r),o.method="PUT",this.request(r,o)}patch(r,n,i={}){return r=r.toString(),this.setRequestBody(i,n),this.setRequestContentType(i,V.JSON_PATCH),this.invalidateUrl(r),i.method="PATCH",this.request(r,i)}delete(r,n={}){return r=r.toString(),this.invalidateUrl(r),n.method="DELETE",this.request(r,n)}async startNewUser(r,n){let{codeChallengeMethod:i,codeChallenge:o}=await this.startPkce();return this.post("auth/newuser",{...r,clientId:r.clientId??this.clientId,codeChallengeMethod:i,codeChallenge:o},void 0,n)}async startNewProject(r,n){return this.post("auth/newproject",r,void 0,n)}async startNewPatient(r,n){return this.post("auth/newpatient",r,void 0,n)}async startLogin(r,n){return this.post("auth/login",{...await this.ensureCodeChallenge(r),clientId:r.clientId??this.clientId,scope:r.scope},void 0,n)}async startGoogleLogin(r,n){return this.post("auth/google",{...await this.ensureCodeChallenge(r),clientId:r.clientId??this.clientId,scope:r.scope},void 0,n)}async ensureCodeChallenge(r){return r.codeChallenge?r:{...r,...await this.startPkce()}}async signOut(){await this.post(this.logoutUrl,{}),this.clear()}async signInWithRedirect(r){let i=new URLSearchParams(me.getSearch()).get("code");if(!i){await this.requestAuthorization(r);return}return this.processCode(i)}signOutWithRedirect(){me.assign(this.logoutUrl)}async signInWithExternalAuth(r,n,i,o,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),me.assign(this.getExternalAuthRedirectUri(r,n,i,a,s))}async exchangeExternalAccessToken(r,n,i){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");let o={grant_type:tt.TokenExchange,subject_token_type:Hs.AccessToken,client_id:n,subject_token:r};return i&&(o.membership_id=i),this.fetchTokens(o)}getExternalAuthRedirectUri(r,n,i,o,s=!0){let a=new URL(r);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",n),a.searchParams.set("redirect_uri",i),a.searchParams.set("scope",o.scope??"openid profile email"),a.searchParams.set("state",JSON.stringify(o)),s){let{codeChallenge:u,codeChallengeMethod:l}=o;if(!l)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!u)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");a.searchParams.set("code_challenge_method",l),a.searchParams.set("code_challenge",u)}return a.toString()}fhirUrl(...r){return new URL(W(this.fhirBaseUrl,r.join("/")))}fhirSearchUrl(r,n){let i=this.fhirUrl(r);return n&&(i.search=fi(n)),i}search(r,n,i){let o=this.fhirSearchUrl(r,n),s="search-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=this.getBundle(o,i);return this.setCacheEntry(s,u,i),u}searchOne(r,n,i){let o=this.fhirSearchUrl(r,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 u=new $(this.search(r,o.searchParams,i).then(l=>l.entry?.[0]?.resource));return this.setCacheEntry(s,u,i),u}searchResources(r,n,i){let s="searchResources-"+this.fhirSearchUrl(r,n).toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=new $(this.search(r,n,i).then($s));return this.setCacheEntry(s,u,i),u}async*searchResourcePages(r,n,i){let o=this.fhirSearchUrl(r,n);for(;o;){let s=new URL(o).searchParams;s.has("_count")||s.set("_count","1000");let a=await this.search(r,s,i),u=a.link?.find(l=>l.relation==="next");if(!a.entry?.length&&!u)break;yield $s(a),o=u?.url?new URL(u.url):void 0}}valueSetExpand(r,n){let i=this.fhirUrl("ValueSet","$expand");return i.search=new URLSearchParams(r).toString(),this.get(i.toString(),n)}getCached(r,n){let i=this.requestCache?.get(this.fhirUrl(r,n).toString())?.value;return i?.isOk()?i.read():void 0}getCachedReference(r){let n=r.reference;if(!n)return;if(n==="system")return qs;let[i,o]=n.split("/");if(!(!i||!o))return this.getCached(i,o)}readResource(r,n,i){if(!n)throw new Error('The "id" parameter cannot be null, undefined, or an empty string.');return this.get(this.fhirUrl(r,n),i)}readReference(r,n){let i=r.reference;if(!i)return new $(Promise.reject(new Error("Missing reference")));if(i==="system")return new $(Promise.resolve(qs));let[o,s]=i.split("/");return!o||!s?new $(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}readCanonical(r,n,i){return Array.isArray(r)?this.searchOne("",{_type:r.join(","),url:n},i):this.searchOne(r,"url="+n,i)}requestSchema(r,n){if(jn(r))return Promise.resolve();let i=r+"-requestSchema",o=this.getCacheEntry(i,void 0);if(o)return o.value;let s=new $((async()=>{let a=`{
5
5
  StructureDefinitionList(_filter: "name eq ${r}") {
6
6
  resourceType,
7
7
  name,