@medplum/core 5.1.21 → 5.1.22

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 sr=Object.defineProperty;var ta=Object.getOwnPropertyDescriptor;var ra=Object.getOwnPropertyNames;var na=Object.prototype.hasOwnProperty;var ia=(t,e,r)=>e in t?sr(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var oa=(t,e)=>{for(var r in e)sr(t,r,{get:e[r],enumerable:!0})},sa=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of ra(e))!na.call(t,i)&&i!==r&&sr(t,i,{get:()=>e[i],enumerable:!(n=ta(e,i))||n.enumerable});return t};var aa=t=>sa(sr({},"__esModule",{value:!0}),t);var c=(t,e,r)=>ia(t,typeof e!="symbol"?e+"":e,r);var Np={};oa(Np,{AccessPolicyInteraction:()=>Ve,AckCode:()=>Gd,AndAtom:()=>Mt,ArithmeticOperatorAtom:()=>F,AsAtom:()=>Te,CPT:()=>da,ClientStorage:()=>at,ConcatAtom:()=>wt,ContainsAtom:()=>At,ContentType:()=>k,DEFAULT_ACCEPT:()=>fs,DEFAULT_MAX_SEARCH_COUNT:()=>_u,DEFAULT_SEARCH_COUNT:()=>Mu,DataSampler:()=>Gr,DotAtom:()=>Z,EMPTY:()=>y,EmptySetAtom:()=>Ct,EqualsAtom:()=>It,EquivalentAtom:()=>Vt,EventTarget:()=>Fr,ExternalSecretSystems:()=>zl,FHIRCAST_EVENT_NAMES:()=>Ur,FHIRCAST_EVENT_RESOURCES:()=>rs,FHIRCAST_EVENT_VERSION_REQUIRED:()=>Br,FHIRCAST_RESOURCE_TYPES:()=>ts,FhirFilterComparison:()=>rr,FhirFilterConnective:()=>ir,FhirFilterNegation:()=>nr,FhirPathAtom:()=>ve,FhircastConnection:()=>$t,FileBuilder:()=>Oi,FunctionAtom:()=>ee,HTTP_HL7_ORG:()=>pt,HTTP_TERMINOLOGY_HL7_ORG:()=>ma,Hl7Context:()=>be,Hl7Field:()=>de,Hl7Message:()=>ki,Hl7Segment:()=>ut,ICD10:()=>pa,INVALID_MEDICATION_ORDER_RESPONSE:()=>$s,INVALID_MEDICATION_ORDER_SET_RESPONSE:()=>js,INVALID_MEDICATION_SEARCH_RESPONSE:()=>Yd,ImpliesAtom:()=>Nt,InAtom:()=>Ot,IndexerAtom:()=>ke,InfixOperatorAtom:()=>C,IsAtom:()=>Ie,LOINC:()=>ca,LRUCache:()=>Y,LiteralAtom:()=>j,LogLevel:()=>Je,LogLevelNames:()=>qs,Logger:()=>Vi,MEDICATION_REQUEST_STATUS_REASON_RESPONSE_NOT_RECEIVED:()=>Gs,MEDICATION_REQUEST_STATUS_REASON_SYSTEM:()=>Hs,MEDPLUM_CLI_CLIENT_ID:()=>_l,MEDPLUM_RELEASES_URL:()=>Xs,MEDPLUM_VERSION:()=>Hr,MedplumClient:()=>Kt,MedplumKeyValueClient:()=>Gt,MemoryStorage:()=>$r,MockAsyncClientStorage:()=>fi,NDC:()=>fa,NOOP:()=>Jc,NotEqualsAtom:()=>kt,NotEquivalentAtom:()=>Dt,OAuthClientAssertionType:()=>hs,OAuthGrantType:()=>Qe,OAuthSigningAlgorithm:()=>$l,OAuthTokenAuthMethod:()=>ql,OAuthTokenType:()=>ms,OperationOutcomeError:()=>f,Operator:()=>m,OperatorPrecedence:()=>S,OrAtom:()=>_t,PATIENT_PREFERRED_PHARMACY_URL:()=>tn,PHARMACY_PREFERENCE_TYPE_SYSTEM:()=>_i,PHARMACY_TYPE_PREFERRED:()=>Li,PHARMACY_TYPE_PRIMARY:()=>en,Parser:()=>ar,ParserBuilder:()=>dt,PrefixOperatorAtom:()=>lt,PropertyType:()=>d,RXNORM:()=>la,ReadablePromise:()=>W,ReconnectingWebSocket:()=>Qt,ReturnAckCategory:()=>dl,SNOMED:()=>ua,SearchParameterType:()=>pe,SubscriptionEmitter:()=>ct,SubscriptionManager:()=>Jt,SymbolAtom:()=>B,Tokenizer:()=>Se,TransformMapCollection:()=>Yr,TypedEventTarget:()=>re,UCUM:()=>sn,UnaryOperatorAtom:()=>Pt,UnionAtom:()=>Oe,VALID_HOSTNAME_REGEX:()=>Ao,XorAtom:()=>Lt,accepted:()=>Ca,accessPolicySupportsInteraction:()=>ii,addPreferredPharmacyToPatient:()=>dp,addProfileToResource:()=>$c,allOk:()=>ha,append:()=>X,applyDefaultValuesToElement:()=>od,applyDefaultValuesToResource:()=>id,applyFixedOrPatternValue:()=>Xt,arrayBufferToBase64:()=>Wn,arrayBufferToHex:()=>Bn,arrayify:()=>ie,assert:()=>as,assertContextVersionOptional:()=>ci,assertOk:()=>Ba,assertReleaseManifest:()=>Zs,badRequest:()=>P,booleanToTypedValue:()=>h,buildCdsRequest:()=>Tl,buildElementsContext:()=>zr,buildMedicationRequestResponseLostStatusReason:()=>Xd,buildTypeName:()=>Lo,businessRule:()=>ka,calculateAge:()=>St,calculateAgeString:()=>mc,canReadResourceType:()=>al,canWriteResource:()=>ul,canWriteResourceType:()=>cl,capitalize:()=>L,checkForNull:()=>Ni,checkIfValidMedplumVersion:()=>Mp,clearReleaseCache:()=>Dp,codeableConceptMatchesToken:()=>Ac,codingMatchesToken:()=>To,compressElement:()=>qa,concatUrls:()=>U,conceptMapTranslate:()=>Si,conflict:()=>Pa,contentTooLarge:()=>Sa,convertContainedResourcesToBundle:()=>xl,convertToSearchableDates:()=>Xn,convertToSearchableNumbers:()=>wu,convertToSearchableQuantities:()=>Au,convertToSearchableReferences:()=>ei,convertToSearchableStrings:()=>Zn,convertToSearchableTokens:()=>ti,convertToSearchableUris:()=>Ou,convertToTransactionBundle:()=>Yo,crawlTypedValue:()=>vr,crawlTypedValueAsync:()=>Ka,createConstraintIssue:()=>gn,createFhircastMessagePayload:()=>qr,createOperationOutcomeIssue:()=>Re,createPreferredPharmacyExtension:()=>Ks,createProcessingIssue:()=>yn,createReference:()=>Pe,createStructureIssue:()=>E,created:()=>ga,decodeBase64:()=>Ko,decodeBase64Url:()=>oi,deepClone:()=>Ae,deepEquals:()=>he,deepIncludes:()=>Xe,deriveIdentifierSearchParameter:()=>xp,encodeBase64:()=>qt,encodeBase64Url:()=>ml,encryptSHA256:()=>si,ensureNoLeadingSlash:()=>wo,ensureTrailingSlash:()=>Dr,escapeHtml:()=>Qc,evalFhirPath:()=>Pu,evalFhirPathTyped:()=>A,evalSqlOnFhir:()=>Ap,expandSampledData:()=>gi,expandSampledObservation:()=>Xl,extractAccountReferences:()=>Ar,fetchLatestVersionString:()=>_p,fetchVersionManifest:()=>on,fhirPathArrayEquals:()=>Dn,fhirPathArrayEquivalent:()=>Rr,fhirPathArrayNotEquals:()=>Mn,fhirPathEquals:()=>Ze,fhirPathEquivalent:()=>mo,fhirPathIs:()=>xt,fhirPathNot:()=>Vn,fhirTypeToJsType:()=>Sr,fhirpathPatchTypedValue:()=>Fd,findCodeBySystem:()=>wc,findObservationInterval:()=>kc,findObservationReferenceRange:()=>Vc,findObservationReferenceRanges:()=>Eo,findResourceByCode:()=>Bc,findResourceInBundle:()=>vl,flatMapFilter:()=>Gc,forbidden:()=>xa,formatAddress:()=>Io,formatCodeableConcept:()=>Ue,formatCoding:()=>zn,formatDate:()=>Xc,formatDateTime:()=>Be,formatFamilyName:()=>Yc,formatGivenName:()=>Kc,formatHl7DateTime:()=>Ws,formatHumanName:()=>tt,formatMoney:()=>au,formatObservationValue:()=>Vo,formatPeriod:()=>eu,formatQuantity:()=>ye,formatRange:()=>su,formatReferenceString:()=>Oo,formatSearchQuery:()=>Hu,formatTime:()=>Zc,formatTiming:()=>iu,formatWallTime:()=>ko,generateId:()=>te,getAllDataTypes:()=>bn,getAllQuestionnaireAnswers:()=>gc,getBuffer:()=>Lr,getCodeBySystem:()=>wr,getDataType:()=>fe,getDateProperty:()=>fc,getDefaultValuesForNewSliceEntry:()=>sd,getDisplayString:()=>yo,getElementDefinition:()=>Tt,getElementDefinitionForPath:()=>Kn,getElementDefinitionFromElements:()=>Jn,getElementDefinitionTypeName:()=>mr,getExpressionForResourceType:()=>Cp,getExpressionsForResourceType:()=>Wi,getExtension:()=>me,getExtensionValue:()=>Ir,getIdentifier:()=>Or,getImageSrc:()=>pc,getInnerDerivedIdentifierExpression:()=>Fi,getMedicationOrderIframeUrl:()=>rp,getNestedProperty:()=>Le,getOutcomeRedirectUrl:()=>Ia,getParsedDerivedIdentifierExpression:()=>Ui,getParsedExpressionForResourceType:()=>Bi,getPathDifference:()=>ge,getPathDisplayName:()=>mu,getPendingMedicationOrderId:()=>ep,getPendingMedicationOrderStatus:()=>tp,getPreferredPharmaciesFromPatient:()=>lp,getPropertyDisplayName:()=>No,getQueryString:()=>Gn,getQuestionnaireAnswers:()=>hc,getRandomString:()=>Nr,getReferenceString:()=>O,getResourceTypes:()=>du,getSearchParameter:()=>fu,getSearchParameterDetails:()=>vp,getSearchParameters:()=>pu,getStatus:()=>Ua,getTypedPropertyValue:()=>_,getTypedPropertyValueWithPath:()=>Tr,getTypedPropertyValueWithSchema:()=>po,getTypedPropertyValueWithoutSchema:()=>fo,getValueSliceName:()=>xi,getWebSocketUrl:()=>Hn,getWindow:()=>fl,globalSchema:()=>$,gone:()=>va,indexConceptMapCodings:()=>vs,indexDefaultSearchParameters:()=>Pn,indexSearchParameter:()=>Mr,indexSearchParameterBundle:()=>lu,indexStructureDefinitionBundle:()=>gr,inflateBaseSchema:()=>xn,inflateElement:()=>eo,initFhirPathParserBuilder:()=>nt,invalidSearchOperator:()=>Ju,isAccepted:()=>Da,isAddPharmacyResponse:()=>mp,isBrowserEnvironment:()=>J,isCodeableConcept:()=>Pr,isCoding:()=>Cr,isCompletedSubscriptionRequest:()=>ui,isComplexTypeCode:()=>kr,isConflict:()=>La,isContextVersionRequired:()=>ai,isCreated:()=>Va,isDataTypeLoaded:()=>En,isDateString:()=>_n,isDateTimeString:()=>Fe,isDefined:()=>zc,isEmpty:()=>w,isError:()=>pr,isFhirCriteriaMet:()=>us,isFhircastResourceType:()=>ns,isGone:()=>Na,isJwt:()=>li,isLowerCase:()=>Oc,isMedicationArray:()=>Zd,isMedicationOrderResponse:()=>Qs,isMedicationOrderSetResponse:()=>zs,isMedplumAccessToken:()=>di,isNodeEnvironment:()=>pl,isNotFound:()=>_a,isObject:()=>R,isOk:()=>fr,isOperationOutcome:()=>Ke,isOrganizationArray:()=>fp,isPeriod:()=>Ln,isPopulated:()=>se,isPrimitiveType:()=>ht,isProfileLoaded:()=>Rn,isProfileResource:()=>go,isQuantity:()=>V,isQuantityEquivalent:()=>Nn,isRedirect:()=>Ma,isReference:()=>Q,isResource:()=>I,isResourceType:()=>mt,isResourceTypeSchema:()=>xr,isResourceWithId:()=>et,isSliceDefinitionWithTypes:()=>yi,isString:()=>We,isStringArray:()=>Pc,isTextObject:()=>So,isTypedValue:()=>yu,isUUID:()=>Cc,isUnauthenticated:()=>Fa,isValidDate:()=>Rt,isValidHostname:()=>qc,isValidMedplumSemver:()=>ea,lazy:()=>jn,loadDataType:()=>yr,locationUtils:()=>ue,mapByIdentifier:()=>jc,matchDiscriminant:()=>br,matchesRange:()=>$n,matchesSearchRequest:()=>Wt,medicationOrderRequestToParameters:()=>op,medicationOrderSetRequestToParameters:()=>ap,medicationSearchParamsToParameters:()=>np,multipleMatches:()=>Ea,normalizeArrayBufferView:()=>qn,normalizeCreateBinaryOptions:()=>hi,normalizeCreatePdfOptions:()=>gs,normalizeErrorEvent:()=>cs,normalizeErrorString:()=>Ee,normalizeOperationOutcome:()=>ft,notFound:()=>fn,notModified:()=>ya,operationOutcomeIssueToString:()=>Zi,operationOutcomeToString:()=>hn,parametersToMedicationOrderResponse:()=>sp,parametersToMedicationOrderSetResponse:()=>cp,parseFhirPath:()=>Bt,parseFilterParameter:()=>Hd,parseHl7DateTime:()=>zd,parseJWTPayload:()=>Ht,parseLogLevel:()=>Kd,parseMappingLanguage:()=>md,parseParameter:()=>jo,parseReference:()=>uc,parseSearchRequest:()=>it,parseStructureDefinition:()=>hr,parseXFhirQuery:()=>ju,pathToJSONPointer:()=>Ne,preciseEquals:()=>Nc,preciseGreaterThan:()=>Uc,preciseGreaterThanOrEquals:()=>Po,preciseLessThan:()=>Fc,preciseLessThanOrEquals:()=>Co,preciseRound:()=>Lc,preconditionFailed:()=>Ta,projectAdminResourceTypes:()=>Go,protectedResourceTypes:()=>Ho,readInteractions:()=>Qo,redirect:()=>Xi,redirectOk:()=>Oa,removeDuplicates:()=>yt,removePreferredPharmacyFromPatient:()=>pp,removeProfileFromResource:()=>Hc,reorderBundle:()=>Xo,replaceQueryVariables:()=>es,resolveId:()=>we,resourceMatchesSubscriptionCriteria:()=>Dl,satisfiedAccessPolicy:()=>zo,serializeError:()=>or,serializeFhircastSubscriptionRequest:()=>Wr,serverError:()=>wa,serverTimeout:()=>Aa,setCodeBySystem:()=>Ic,setIdentifier:()=>yc,singleton:()=>D,singularize:()=>Wc,sleep:()=>Vr,sortStringArray:()=>Et,splitN:()=>qe,splitSearchOnComma:()=>ot,streamToBuffer:()=>wp,stringify:()=>bt,stringifyTypedValue:()=>Yn,structureMapTransform:()=>hd,subsetResource:()=>Ha,summarizeObservations:()=>Jl,toJsBoolean:()=>q,toPeriod:()=>vt,toTypedValue:()=>b,tooManyRequests:()=>Ra,trimTrailingEmptyElements:()=>Tc,tryGetDataType:()=>Ce,tryGetJwtExpiration:()=>pi,tryGetProfile:()=>Cn,typedValueToString:()=>Qn,unauthorized:()=>Me,unauthorizedTokenAudience:()=>dr,unauthorizedTokenExpired:()=>mn,unsupportedMediaType:()=>ba,validateFhircastSubscriptionRequest:()=>jt,validateResource:()=>ec,validateResourceType:()=>hp,validateTypedValue:()=>ao,validationError:()=>T,validationRegexes:()=>gt,warnIfNewerVersionAvailable:()=>Lp,wordWrap:()=>Fs});module.exports=aa(Np);var Y=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 lt=class{constructor(e,r){c(this,"operator");c(this,"child");this.operator=e,this.child=r}toString(){return`${this.operator}(${this.child.toString()})`}},C=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()})`}},dt=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 ar(e,this.prefixParselets,this.infixParselets)}},ar=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 ie(t){if(t!==void 0)return Array.isArray(t)?t:[t]}var sn="http://unitsofmeasure.org",ca="http://loinc.org",ua="http://snomed.info/sct",la="http://www.nlm.nih.gov/research/umls/rxnorm",da="http://www.ama-assn.org/go/cpt",pa="http://hl7.org/fhir/sid/icd-10",fa="http://hl7.org/fhir/sid/ndc",pt="http://hl7.org",ma="http://terminology.hl7.org";var cr="ok",ur="created",an="gone",cn="not-modified",un="found",ln="not-found",dn="conflict",pn="unauthorized",ji="forbidden",Hi="precondition-failed",Gi="content-too-large",Qi="unsupported-media-type",zi="multiple-matches",Ji="too-many-requests",lr="accepted",Ki="server-timeout",Yi="business-rule",ha={resourceType:"OperationOutcome",id:cr,issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},ga={resourceType:"OperationOutcome",id:ur,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},ya={resourceType:"OperationOutcome",id:cn,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},fn={resourceType:"OperationOutcome",id:ln,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},Me={resourceType:"OperationOutcome",id:pn,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},mn={...Me,issue:[...Me.issue,{severity:"error",code:"expired",details:{text:"Token expired"}}]},dr={...Me,issue:[...Me.issue,{severity:"error",code:"invalid",details:{text:"Token not issued for this audience"}}]},xa={resourceType:"OperationOutcome",id:ji,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},va={resourceType:"OperationOutcome",id:an,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},Ta={resourceType:"OperationOutcome",id:Hi,issue:[{severity:"error",code:"processing",details:{text:"Precondition Failed"}}]};function Sa(t){return{resourceType:"OperationOutcome",id:Gi,issue:[{severity:"error",code:"too-long",details:{text:t}}]}}var ba={resourceType:"OperationOutcome",id:Qi,issue:[{severity:"error",code:"not-supported",details:{text:"Unsupported media type"}}]},Ea={resourceType:"OperationOutcome",id:zi,issue:[{severity:"error",code:"multiple-matches",details:{text:"Multiple resources found matching condition"}}]},Ra={resourceType:"OperationOutcome",id:Ji,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function Ca(t){return{resourceType:"OperationOutcome",id:lr,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:t}]}}function P(t,e){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:t},...e?{expression:ie(e)}:void 0}]}}function Pa(t,e){return{resourceType:"OperationOutcome",id:dn,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 wa(t){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:t.toString()}]}}function Aa(t){return{resourceType:"OperationOutcome",id:Ki,issue:[{severity:"error",code:"timeout",details:{text:t??"Server timeout"}}]}}function Xi(t){let e=t.toString();return{resourceType:"OperationOutcome",id:un,issue:[{severity:"information",code:"informational",details:{coding:[{system:"urn:ietf:rfc:3986",code:e}],text:"Redirect to "+e}}]}}function Oa(t){return{...Xi(t),id:cr}}function Ia(t){return t?.issue?.[0]?.details?.coding?.find(e=>e.system==="urn:ietf:rfc:3986")?.code}function ka(t,e){return{resourceType:"OperationOutcome",id:Yi,issue:[{severity:"error",code:"business-rule",details:{id:t,text:e}}]}}function pr(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 Ke(t){return typeof t=="object"&&t!==null&&t.resourceType==="OperationOutcome"}function fr(t){return t.id===cr||t.id===ur||t.id===cn||t.id===lr}function Va(t){return t.id===ur}function Da(t){return t.id===lr}function Ma(t){return t.id===un}function _a(t){return t.id===ln}function La(t){return t.id===dn}function Na(t){return t.id===an}function Fa(t){return t.id===pn}function Ua(t){switch(t.id){case cr:return 200;case ur:return 201;case lr:return 202;case un:return 302;case cn:return 304;case pn:return 401;case ji:return 403;case ln:return 404;case dn:return 409;case an:return 410;case Hi:case zi:return 412;case Gi:return 413;case Qi:return 415;case Yi:return 422;case Ji:return 429;case Ki:return 504;default:return t.issue?.[0]?.code==="exception"?500:400}}function Ba(t,e){if(!fr(t)||e===void 0)throw new f(t)}var f=class extends Error{constructor(r,n){super(hn(r),n);c(this,"outcome");this.name="OperationOutcomeError",this.outcome=r}};function ft(t){return t instanceof f?t.outcome:Ke(t)?t:P(Ee(t))}function Ee(t){return t?typeof t=="string"?t:pr(t)?t.message:Ke(t)?hn(t):typeof t=="object"&&"code"in t&&typeof t.code=="string"?t.code:JSON.stringify(t):"Unknown error"}function hn(t){let e=t.issue?.map(Zi)??[];return e.length>0?e.join("; "):"Unknown error"}function Zi(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 Re(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 E(t,e){return Re("error","structure",e,t)}function gn(t,e){return Re("error","invariant",`Constraint ${e.key} not met: ${e.description}`,t,{fhirpath:e.expression})}function yn(t,e,r,n){return Re("error","processing",e,t,{...n,error:r})}var Wa={"http://hl7.org/fhirpath/System.String":"string"};function qa(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:Wa[r.code]??r.code})),e}function eo(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 xn(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,eo(i,o)])),constraints:[],innerTypes:[]};return e}var to={Element:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]}}},BackboneElement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]}}},Address:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"code"}]},text:{type:[{code:"string"}]},line:{max:9007199254740991,type:[{code:"string"}]},city:{type:[{code:"string"}]},district:{type:[{code:"string"}]},state:{type:[{code:"string"}]},postalCode:{type:[{code:"string"}]},country:{type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Age:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Annotation:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"author[x]":{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Organization"]},{code:"string"}]},time:{type:[{code:"dateTime"}]},text:{min:1,type:[{code:"markdown"}]}}},Attachment:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},contentType:{type:[{code:"code"}]},language:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]},url:{type:[{code:"url"}]},size:{type:[{code:"unsignedInt"}]},hash:{type:[{code:"base64Binary"}]},title:{type:[{code:"string"}]},creation:{type:[{code:"dateTime"}]}}},CodeableConcept:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},coding:{max:9007199254740991,type:[{code:"Coding"}]},text:{type:[{code:"string"}]}}},Coding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"uri"}]},version:{type:[{code:"string"}]},code:{type:[{code:"code"}]},display:{type:[{code:"string"}]},userSelected:{type:[{code:"boolean"}]}}},ContactDetail:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"string"}]},telecom:{max:9007199254740991,type:[{code:"ContactPoint"}]}}},ContactPoint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"code"}]},value:{type:[{code:"string"}]},use:{type:[{code:"code"}]},rank:{type:[{code:"positiveInt"}]},period:{type:[{code:"Period"}]}}},Contributor:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{min:1,type:[{code:"string"}]},contact:{max:9007199254740991,type:[{code:"ContactDetail"}]}}},Count:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},DataRequirement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},"subject[x]":{type:[{code:"CodeableConcept"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Group"]}]},mustSupport:{max:9007199254740991,type:[{code:"string"}]},codeFilter:{max:9007199254740991,type:[{code:"DataRequirementCodeFilter"}]},dateFilter:{max:9007199254740991,type:[{code:"DataRequirementDateFilter"}]},limit:{type:[{code:"positiveInt"}]},sort:{max:9007199254740991,type:[{code:"DataRequirementSort"}]}}},DataRequirementCodeFilter:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]},code:{max:9007199254740991,type:[{code:"Coding"}]}}},DataRequirementDateFilter:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},"value[x]":{type:[{code:"dateTime"},{code:"Period"},{code:"Duration"}]}}},DataRequirementSort:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},direction:{min:1,type:[{code:"code"}]}}},Distance:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Dosage:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},sequence:{type:[{code:"integer"}]},text:{type:[{code:"string"}]},additionalInstruction:{max:9007199254740991,type:[{code:"CodeableConcept"}]},patientInstruction:{type:[{code:"string"}]},timing:{type:[{code:"Timing"}]},"asNeeded[x]":{type:[{code:"boolean"},{code:"CodeableConcept"}]},site:{type:[{code:"CodeableConcept"}]},route:{type:[{code:"CodeableConcept"}]},method:{type:[{code:"CodeableConcept"}]},doseAndRate:{max:9007199254740991,type:[{code:"DosageDoseAndRate"}]},maxDosePerPeriod:{type:[{code:"Ratio"}]},maxDosePerAdministration:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},maxDosePerLifetime:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},DosageDoseAndRate:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{type:[{code:"CodeableConcept"}]},"dose[x]":{type:[{code:"Range"},{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},"rate[x]":{type:[{code:"Ratio"},{code:"Range"},{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},Duration:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},ElementDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},representation:{max:9007199254740991,type:[{code:"code"}]},sliceName:{type:[{code:"string"}]},sliceIsConstraining:{type:[{code:"boolean"}]},label:{type:[{code:"string"}]},code:{max:9007199254740991,type:[{code:"Coding"}]},slicing:{type:[{code:"ElementDefinitionSlicing"}]},short:{type:[{code:"string"}]},definition:{type:[{code:"markdown"}]},comment:{type:[{code:"markdown"}]},requirements:{type:[{code:"markdown"}]},alias:{max:9007199254740991,type:[{code:"string"}]},min:{type:[{code:"unsignedInt"}]},max:{type:[{code:"string"}]},base:{type:[{code:"ElementDefinitionBase"}]},contentReference:{type:[{code:"uri"}]},type:{max:9007199254740991,type:[{code:"ElementDefinitionType"}]},"defaultValue[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},meaningWhenMissing:{type:[{code:"markdown"}]},orderMeaning:{type:[{code:"string"}]},"fixed[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},"pattern[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},example:{max:9007199254740991,type:[{code:"ElementDefinitionExample"}]},"minValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},"maxValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},maxLength:{type:[{code:"integer"}]},condition:{max:9007199254740991,type:[{code:"id"}]},constraint:{max:9007199254740991,type:[{code:"ElementDefinitionConstraint"}]},mustSupport:{type:[{code:"boolean"}]},isModifier:{type:[{code:"boolean"}]},isModifierReason:{type:[{code:"string"}]},isSummary:{type:[{code:"boolean"}]},binding:{type:[{code:"ElementDefinitionBinding"}]},mapping:{max:9007199254740991,type:[{code:"ElementDefinitionMapping"}]}}},ElementDefinitionSlicingDiscriminator:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},path:{min:1,type:[{code:"string"}]}}},ElementDefinitionSlicing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},discriminator:{max:9007199254740991,type:[{code:"ElementDefinitionSlicingDiscriminator"}]},description:{type:[{code:"string"}]},ordered:{type:[{code:"boolean"}]},rules:{min:1,type:[{code:"code"}]}}},ElementDefinitionBase:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},min:{min:1,type:[{code:"unsignedInt"}]},max:{min:1,type:[{code:"string"}]}}},ElementDefinitionType:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"uri"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},targetProfile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},aggregation:{max:9007199254740991,type:[{code:"code"}]},versioning:{type:[{code:"code"}]}}},ElementDefinitionExample:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},label:{min:1,type:[{code:"string"}]},"value[x]":{min:1,type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]}}},ElementDefinitionConstraint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},key:{min:1,type:[{code:"id"}]},requirements:{type:[{code:"string"}]},severity:{min:1,type:[{code:"code"}]},human:{min:1,type:[{code:"string"}]},expression:{type:[{code:"string"}]},xpath:{type:[{code:"string"}]},source:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]}}},ElementDefinitionBinding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},strength:{min:1,type:[{code:"code"}]},description:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]}}},ElementDefinitionMapping:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},identity:{min:1,type:[{code:"id"}]},language:{type:[{code:"code"}]},map:{min:1,type:[{code:"string"}]},comment:{type:[{code:"string"}]}}},Expression:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},description:{type:[{code:"string"}]},name:{type:[{code:"id"}]},language:{min:1,type:[{code:"code"}]},expression:{type:[{code:"string"}]},reference:{type:[{code:"uri"}]}}},Extension:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},url:{min:1,type:[{code:"uri"}]},"value[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]}}},HumanName:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},text:{type:[{code:"string"}]},family:{type:[{code:"string"}]},given:{max:9007199254740991,type:[{code:"string"}]},prefix:{max:9007199254740991,type:[{code:"string"}]},suffix:{max:9007199254740991,type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Identifier:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"CodeableConcept"}]},system:{type:[{code:"uri"}]},value:{type:[{code:"string"}]},period:{type:[{code:"Period"}]},assigner:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MarketingStatus:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},country:{min:1,type:[{code:"CodeableConcept"}]},jurisdiction:{type:[{code:"CodeableConcept"}]},status:{min:1,type:[{code:"CodeableConcept"}]},dateRange:{min:1,type:[{code:"Period"}]},restoreDate:{type:[{code:"dateTime"}]}}},Meta:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},versionId:{type:[{code:"id"}]},lastUpdated:{type:[{code:"instant"}]},source:{type:[{code:"uri"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},security:{max:9007199254740991,type:[{code:"Coding"}]},tag:{max:9007199254740991,type:[{code:"Coding"}]},project:{type:[{code:"uri"}]},author:{type:[{code:"Reference"}]},onBehalfOf:{type:[{code:"Reference"}]},account:{type:[{code:"Reference"}]},accounts:{max:9007199254740991,type:[{code:"Reference"}]},compartment:{max:9007199254740991,type:[{code:"Reference"}]}}},Money:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},currency:{type:[{code:"code"}]}}},Narrative:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},status:{min:1,type:[{code:"code"}]},div:{min:1,type:[{code:"xhtml"}]}}},ParameterDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"code"}]},use:{min:1,type:[{code:"code"}]},min:{type:[{code:"integer"}]},max:{type:[{code:"string"}]},documentation:{type:[{code:"string"}]},type:{min:1,type:[{code:"code"}]},profile:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]}}},Period:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},start:{type:[{code:"dateTime"}]},end:{type:[{code:"dateTime"}]}}},Population:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"age[x]":{type:[{code:"Range"},{code:"CodeableConcept"}]},gender:{type:[{code:"CodeableConcept"}]},race:{type:[{code:"CodeableConcept"}]},physiologicalCondition:{type:[{code:"CodeableConcept"}]}}},ProdCharacteristic:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},height:{type:[{code:"Quantity"}]},width:{type:[{code:"Quantity"}]},depth:{type:[{code:"Quantity"}]},weight:{type:[{code:"Quantity"}]},nominalVolume:{type:[{code:"Quantity"}]},externalDiameter:{type:[{code:"Quantity"}]},shape:{type:[{code:"string"}]},color:{max:9007199254740991,type:[{code:"string"}]},imprint:{max:9007199254740991,type:[{code:"string"}]},image:{max:9007199254740991,type:[{code:"Attachment"}]},scoring:{type:[{code:"CodeableConcept"}]}}},ProductShelfLife:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},identifier:{type:[{code:"Identifier"}]},type:{min:1,type:[{code:"CodeableConcept"}]},period:{min:1,type:[{code:"Quantity"}]},specialPrecautionsForStorage:{max:9007199254740991,type:[{code:"CodeableConcept"}]}}},Quantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Range:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},low:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},high:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},Ratio:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},numerator:{type:[{code:"Quantity"}]},denominator:{type:[{code:"Quantity"}]}}},Reference:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},reference:{type:[{code:"string"}]},type:{type:[{code:"uri"}]},identifier:{type:[{code:"Identifier"}]},display:{type:[{code:"string"}]}}},RelatedArtifact:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},label:{type:[{code:"string"}]},display:{type:[{code:"string"}]},citation:{type:[{code:"markdown"}]},url:{type:[{code:"url"}]},document:{type:[{code:"Attachment"}]},resource:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/Resource"]}]}}},SampledData:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},origin:{min:1,type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},period:{min:1,type:[{code:"decimal"}]},factor:{type:[{code:"decimal"}]},lowerLimit:{type:[{code:"decimal"}]},upperLimit:{type:[{code:"decimal"}]},dimensions:{min:1,type:[{code:"positiveInt"}]},data:{type:[{code:"string"}]}}},Signature:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,max:9007199254740991,type:[{code:"Coding"}]},when:{min:1,type:[{code:"instant"}]},who:{min:1,type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},onBehalfOf:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},targetFormat:{type:[{code:"code"}]},sigFormat:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]}}},SubstanceAmount:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"amount[x]":{type:[{code:"Quantity"},{code:"Range"},{code:"string"}]},amountType:{type:[{code:"CodeableConcept"}]},amountText:{type:[{code:"string"}]},referenceRange:{type:[{code:"SubstanceAmountReferenceRange"}]}}},SubstanceAmountReferenceRange:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},lowLimit:{type:[{code:"Quantity"}]},highLimit:{type:[{code:"Quantity"}]}}},Timing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},event:{max:9007199254740991,type:[{code:"dateTime"}]},repeat:{type:[{code:"TimingRepeat"}]},code:{type:[{code:"CodeableConcept"}]}}},TimingRepeat:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"bounds[x]":{type:[{code:"Duration"},{code:"Range"},{code:"Period"}]},count:{type:[{code:"positiveInt"}]},countMax:{type:[{code:"positiveInt"}]},duration:{type:[{code:"decimal"}]},durationMax:{type:[{code:"decimal"}]},durationUnit:{type:[{code:"code"}]},frequency:{type:[{code:"positiveInt"}]},frequencyMax:{type:[{code:"positiveInt"}]},period:{type:[{code:"decimal"}]},periodMax:{type:[{code:"decimal"}]},periodUnit:{type:[{code:"code"}]},dayOfWeek:{max:9007199254740991,type:[{code:"code"}]},timeOfDay:{max:9007199254740991,type:[{code:"time"}]},when:{max:9007199254740991,type:[{code:"code"}]},offset:{type:[{code:"unsignedInt"}]}}},TriggerDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{type:[{code:"string"}]},"timing[x]":{type:[{code:"Timing"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Schedule"]},{code:"date"},{code:"dateTime"}]},data:{max:9007199254740991,type:[{code:"DataRequirement"}]},condition:{type:[{code:"Expression"}]}}},UsageContext:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"Coding"}]},"value[x]":{min:1,type:[{code:"CodeableConcept"},{code:"Quantity"},{code:"Range"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/PlanDefinition","http://hl7.org/fhir/StructureDefinition/ResearchStudy","http://hl7.org/fhir/StructureDefinition/InsurancePlan","http://hl7.org/fhir/StructureDefinition/HealthcareService","http://hl7.org/fhir/StructureDefinition/Group","http://hl7.org/fhir/StructureDefinition/Location","http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MoneyQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},SimpleQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{max:0,type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},IdentityProvider:{elements:{authorizeUrl:{min:1,type:[{code:"string"}]},tokenUrl:{min:1,type:[{code:"string"}]},tokenAuthMethod:{type:[{code:"code"}]},userInfoUrl:{min:1,type:[{code:"string"}]},clientId:{min:1,type:[{code:"string"}]},clientSecret:{min:1,type:[{code:"string"}]},usePkce:{type:[{code:"boolean"}]},useSubject:{type:[{code:"boolean"}]},identitySource:{type:[{code:"code"}]},identityMappingMode:{type:[{code:"code"}]}}}};function hr(t){return new Tn(t).parse()}var _e=xn(to),Sn=Object.create(null),ro=Object.create(null),ja={"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 so(t){let e;return e=ro[t],e||(e=ro[t]=Object.create(null)),e}function gr(t){let r=(Array.isArray(t)?t:t.entry?.map(n=>n.resource)??[]).filter(n=>n?.resourceType==="StructureDefinition");Pn(r);for(let n of r)yr(n)}function yr(t){if(!t?.name)throw new Error("Failed loading StructureDefinition from bundle");if(t.resourceType!=="StructureDefinition")return;let e=hr(t),r=ja[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=so(t.url),i=t.type),n[i]=e;for(let o of e.innerTypes)o.parentType=e,n[o.name]=o;Sn[t.url]=e}function bn(){return _e}function En(t){return!!_e[t]}function Ce(t,e){if(e){let r=so(e)[t];if(r)return r}return _e[t]}function fe(t,e){let r=Ce(t,e);if(!r)throw new f(P("Unknown data type: "+t));return r}function mt(t){let e=_e[t];return e&&xr(e)}function Rn(t){return!!Sn[t]}function Cn(t){return Sn[t]}var Tn=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:Ja(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=vn(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[vn(e,n.path)]=r;break}n=n.parent}if(!n){let i=vn(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&&!Ye(this.slicingContext.path,e?.path)&&(this.slicingContext=void 0),e.slicing&&!this.slicingContext&&this.enterSlice(e,r)}enterInnerType(e){for(;this.backboneContext&&!Ye(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;let r=mr(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:Ye(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,r){za(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&&!Ye(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!Ye(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!!(Ye(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=mr(e)),n||(n=me(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=io(e.max),n=e.base?.max?io(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:oo(_(i,"fixed[x]")),pattern:oo(_(i,"pattern[x]")),binding:e.binding}}};function Ha(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+L(o.code)))}for(let n of Object.getOwnPropertyNames(t))!e.includes(n)&&!r.includes(n)&&!Ga.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(no):[no]},t}var no={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},Ga=["resourceType","id","meta"];function io(t){return t==="*"?Number.POSITIVE_INFINITY:Number.parseInt(t,10)}function vn(t,e=""){return Qa(t.path,e)}function Qa(t,e){return t?e&&t.startsWith(e)?t.substring(e.length+1):t:""}function Ye(t,e){return!t||!e?!1:e.startsWith(t+".")||e===t}function oo(t){return Array.isArray(t)&&t.length>0?t[0]:w(t)?void 0:t}function za(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 Ja(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 vr(t,e,r){new wn(t,e,r).crawl()}function Ka(t,e,r){return new An(t,e,r).crawl()}var wn=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??fe(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=I(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=Le(e,r,{withPath:!0});this.visitor.visitProperty&&this.visitor.visitProperty(e,r,i,o,n);for(let s of o)for(let a of ie(s))this.crawlPropertyValue(a,i,n)}crawlPropertyValue(e,r,n){if(!ht(e.type)){let i=n.innerTypes?.find(o=>o.name===e.type)??fe(e.type);this.crawlObject(e,i,r)}}},An=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??fe(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=I(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=Le(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 ie(s))await this.crawlPropertyValue(a,i,n)}async crawlPropertyValue(e,r,n){if(!ht(e.type)){let i=n.innerTypes?.find(o=>o.name===e.type)??fe(e.type);await this.crawlObject(e,i,r)}}};function Le(t,e,r){if(t===void 0)return[void 0];if(e==="$this")return[t];let n=r?.withPath?Tr:_,[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 p of l)u.push(n(p,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 Tr(t,e,r){let n=t.path;return Ya(_(t,e,r),n,e)}function Ya(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 Ne(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 Sr={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"},Xa=new Y(1e3);function ht(t){return t==="undefined"||t in Sr}var gt={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:/.*/},Za={"ele-1":!0,"dom-3":!0,"org-1":!0,"sdf-19":!0};function ec(t,e){if(!mt(t.resourceType))throw new f(T("Invalid resource type"));return ao(b(t),e)}function ao(t,e){return new On(t,e).validate()}var On=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=[],I(e.value)&&this.resourceStack.push(e.value),r?.profile?this.schema=hr(r.profile):this.schema=fe(e.type),this.base64BinaryMaxBytes=r?.base64BinaryMaxBytes??1*1024*1024,this.collect=r?.collect}currentResource(){return this.resourceStack.at(-1)}validate(){In(this.root.value,this.schema.path,this.issues),this.constraintsCheck({...this.root,path:this.schema.path},this.schema),vr(this.root,this,{schema:this.schema,initialPath:this.schema.path});for(let e of this.issues)if(e.severity==="error")throw new f({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(E(n,"Expected array of values for property"));return}u=a}else{if(Array.isArray(a)){this.issues.push(E(n,"Expected single value for property"));return}u=[a]}(u.length<s.min||u.length>s.max)&&this.issues.push(E(s.path,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${u.length}`)),nc(a,s)||this.issues.push(E(n,"Value did not match expected pattern"));let l=s.slicing?Object.fromEntries(s.slicing.slices.map(p=>[p.name,0])):void 0;for(let p of u){this.constraintsCheck(p,s),this.referenceTypeCheck(p,s),this.checkPropertyValue(p),this.collectValue(p,s);let g=ic(p,s.slicing);g&&l&&(l[g]+=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(E(e.path,"Missing required property")),!1):w(e)?(this.issues.push(E(n,"Invalid empty value")),!1):!0}checkPropertyValue(e){ht(e.type)?this.validatePrimitiveType(e):w(e.value)&&this.issues.push(E(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(E(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=rc(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(Re("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(Re("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)&&this.issues.push(E(`${n}.${s}`,`Invalid additional property "${s}"`))}}constraintsCheck(e,r){let n=r.constraints;for(let i of n??y)if(i.severity==="error"&&!(i.key in Za)&&!this.isExpressionTrue(i,e)){this.issues.push(gn(e.path,i));return}}referenceTypeCheck(e,r){if(e.type!=="Reference")return;let n=e.value;if(!Q(n)||n.reference.startsWith("#"))return;let i=n.reference.includes("?")?n.reference.split("?")[0]:n.reference.split("/")[0];if(!i)return;let o=r.type.find(g=>g.code==="Reference")?.targetProfile;if(!o)return;let s=pt+"/fhir/StructureDefinition/",a=s+"Resource",u=s+i,l="https://medplum.com/fhir/StructureDefinition/",p=l+i;for(let g of o)if(g===a||g===u||g===p||!g.startsWith(s)&&!g.startsWith(l))return;this.issues.push(Re("warning","structure",`Invalid reference: got "${i}", expected "${o.join('", "')}"`,e.path))}collectValue(e,r){r.binding?.valueSet&&r.binding.strength==="required"&&sc(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??y)if(i.path===r.path)return;this.collect.tokens[e]=X(n,r)}isExpressionTrue(e,r){let n={"%context":r,"%ucum":b(sn)},i=this.currentResource();i&&(n["%resource"]=b(i)),I(this.root.value)&&(n["%rootResource"]=this.root);try{let o=A(e.expression,[r],n,Xa);return o.length===1&&o[0].value===!0}catch(o){return this.issues.push(yn(r.path,"Error evaluating invariant expression",o,{fhirpath:e.expression})),!1}}validatePrimitiveType(e){let[r,n]=oc(e),i=e.path;if(r){let{type:o,value:s}=r;if(!(o in Sr)){this.issues.push(E(i,`Invalid JSON type: ${o} is not a valid FHIR type`));return}let a=Sr[o];if(typeof s!==a){s!==null&&this.issues.push(E(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&&vr(n,this,{schema:fe("Element"),initialPath:i})}validateBase64Binary(e,r){if(!ac(e)){this.issues.push(E(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(E(r,`base64Binary exceeds ${this.base64BinaryMaxBytes} bytes`))}validateString(e,r,n){if(!e.trim()){this.issues.push(E(n,"String must contain non-whitespace content"));return}if(e.length>1024*1024){this.issues.push(E(n,"String cannot be larger than 1 MB"));return}let i=gt[r];i&&!i.exec(e)&&this.issues.push(E(n,"Invalid "+r+" format"))}validateNumber(e,r,n){Number.isNaN(e)||!Number.isFinite(e)?this.issues.push(E(n,"Invalid numeric value")):tc(r)&&!Number.isInteger(e)?this.issues.push(E(n,"Expected number to be an integer")):r===d.positiveInt&&e<=0?this.issues.push(E(n,"Expected number to be positive")):r===d.unsignedInt&&e<0&&this.issues.push(E(n,"Expected number to be non-negative"))}};function tc(t){return t===d.integer||t===d.positiveInt||t===d.unsignedInt}function rc(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 In(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(E(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?r.push(E(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!t[s]?.[a]?r.push(E(`${o}[${a}]`,"Invalid null value")):i[a]&&In(i[a],`${o}[${a}]`,r);else typeof i=="object"&&In(i,o,r)}}function nc(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&&!Xe(r,e.pattern)||e.fixed&&!he(r,e.fixed))}function br(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 Xe(t,i.pattern);if(i.fixed)return he(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 ic(t,e){for(let r of e?.slices??y)if(e?.discriminator?.every(n=>ie(Le(t,n.path))?.some(i=>br(i,n,r))))return r.name}function oc(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 sc(t){switch(t){case"CodeableConcept":case"Coding":case"code":case"Quantity":case"string":case"uri":return!0;default:return!1}}function ac(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 h(t){return[{type:d.boolean,value:t}]}function b(t){return t==null?{type:"undefined",value:void 0}:Number.isSafeInteger(t)?{type:d.integer,value:t}:typeof t=="number"?{type:d.decimal,value:t}:typeof t=="boolean"?{type:d.boolean,value:t}:typeof t=="string"?{type:d.string,value:t}:V(t)?{type:d.Quantity,value:t}:I(t)?{type:t.resourceType,value:t}:Pr(t)?{type:d.CodeableConcept,value:t}:Cr(t)?{type:d.Coding,value:t}:{type:d.BackboneElement,value:t}}function q(t){return t.length===0?!1:!!t[0].value}function D(t,e){if(t.length!==0){if(t.length===1&&(!e||t[0].type===e))return t[0];throw new Error(`Expected singleton of type ${e}, but found ${JSON.stringify(t)}`)}}function _(t,e,r){if(!t.value)return;let n=Tt(t.type,e,r?.profileUrl);return n?po(t,e,n):fo(t,e)}function po(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),p=l,g=!1;l.endsWith("[x]")&&(p=l.substring(0,l.length-3),g=!0);for(let v of i){let M=p;if(g&&(M+=L(v.code)),o=n[M],a=n["_"+M],o!==void 0||a!==void 0){s=v.code;break}}if(a)if(Array.isArray(o)){o=o.slice();for(let v=0;v<Math.max(o.length,a.length);v++)o[v]=kn(o[v],a[v])}else if(!o&&Array.isArray(a)){o=a.slice();for(let v=0;v<a.length;v++)o[v]=kn(void 0,a[v])}else o=kn(o,a);if(!w(o))return(s==="Element"||s==="BackboneElement")&&(s=r.type[0].code),Array.isArray(o)?o.map(v=>co(v,s)):co(o,s)}function co(t,e){return e==="Resource"&&I(t)&&(e=t.resourceType),{type:e,value:t}}function fo(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(b):n=b(i)}else{let i=e.endsWith("[x]")?e.substring(0,e.length-3):e;for(let o of Object.values(d)){let s=i+L(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||w(n[0]))return}else if(w(n))return;return n}function yt(t){let e=[];for(let r of t){let n=!1;for(let i of e)if(q(Ze(r,i))){n=!0;break}n||e.push(r)}return e}function Vn(t){return h(!q(t))}function Dn(t,e){return t.length===0||e.length===0?[]:t.length!==e.length?h(!1):h(t.every((r,n)=>q(Ze(r,e[n]))))}function Mn(t,e){return t.length===0||e.length===0?[]:t.length!==e.length?h(!0):h(t.some((r,n)=>!q(Ze(r,e[n]))))}function Ze(t,e){let r=t.value?.valueOf(),n=e.value?.valueOf();return typeof r=="number"&&typeof n=="number"?h(Math.abs(r-n)<1e-8):V(r)&&V(n)?h(Nn(r,n)):h(typeof r=="object"&&typeof n=="object"?Fn(t,e):r===n)}function Rr(t,e){return t.length===0&&e.length===0?h(!0):t.length!==e.length?h(!1):(t.sort(uo),e.sort(uo),h(t.every((r,n)=>q(mo(r,e[n])))))}function mo(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"?h(Math.abs(s-a)<.01):V(s)&&V(a)?h(Nn(s,a)):h(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"?Fn({...s,id:void 0},{...a,id:void 0}):typeof s=="string"&&typeof a=="string"?s.toLowerCase()===a.toLowerCase():s===a)}function uo(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 xt(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 _n(r);case"DateTime":return Fe(r);case"Time":return typeof r=="string"&&!!/^T\d/.exec(r);case"Period":return Ln(r);case"Quantity":return V(r);default:return t.type===n||typeof r=="object"&&r?.resourceType===n}}function _n(t){return typeof t=="string"&&!!gt.date.exec(t)}function Fe(t){return typeof t=="string"&&!!gt.dateTime.exec(t)}function Ln(t){return!!(t&&typeof t=="object"&&("start"in t&&Fe(t.start)||"end"in t&&Fe(t.end)))}function vt(t){if(_n(t)||Fe(t))return{start:Er(t,"0000-01-01T00:00:00.000"),end:Er(t,"xxxx-12-31T23:59:59.999")};if(Ln(t))return{start:t.start?Er(t.start,"0000-01-01T00:00:00.000"):void 0,end:t.end?Er(t.end,"xxxx-12-31T23:59:59.999"):void 0}}function Er(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 V(t){return!!(t&&typeof t=="object"&&"value"in t&&typeof t.value=="number")}function Nn(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 Fn(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(lo(o)&&lo(s)){if(!Fn(o,s))return!1}else if(o!==s)return!1}return!0}function lo(t){return t!==null&&typeof t=="object"}function kn(t,e){if(e){if(typeof e!="object")throw new Error("Primitive extension must be an object");return cc(t??{},e)}return t}function cc(t,e){return delete e.__proto__,delete e.constructor,Object.assign(t,e)}function et(t,e){return I(t,e)&&"id"in t&&typeof t.id=="string"}function Pe(t){let e=O(t)??"undefined/undefined",r=yo(t);return r===e?{reference:e}:{reference:e,display:r}}function O(t){if(Q(t))return t.reference;if(et(t))return`${t.resourceType}/${t.id}`}function we(t){if(t)return Q(t)?t.reference.split("/")[1]:t.id}function uc(t){if(t?.reference===void 0)throw new f(T("Reference missing reference property."));let[e,r]=t.reference.split("/");if(e===""||r===""||r===void 0)throw new f(T("Unable to parse reference string."));return[e,r]}function Ar(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 ie(t.accounts??t.account)}function go(t){return t.resourceType==="Patient"||t.resourceType==="Practitioner"||t.resourceType==="RelatedPerson"}function yo(t){if(go(t)){let e=lc(t);if(e)return e}if(t.resourceType==="Appointment"&&t.serviceType?.[0])return Ue(t.serviceType[0]);if(t.resourceType==="Device"){let e=dc(t);if(e)return e}if(t.resourceType==="MedicationRequest"&&t.medicationCodeableConcept)return Ue(t.medicationCodeableConcept);if(t.resourceType==="Slot"&&(t.start||t.end))return`${Be(t.start)} - ${Be(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]),Pr(e))return Ue(e);if(So(e))return e.text}return O(t)??""}function lc(t){let e=t.name;if(e&&e.length>0)return tt(e[0])}function dc(t){let e=t.deviceName;if(e&&e.length>0)return e[0].name}function pc(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 fc(t){return t?new Date(t):void 0}function St(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(),p=a-i;(u<o||u===o&&l<s)&&p--;let g=a*12+u-(i*12+o);l<s&&g--;let v=Math.floor((n.getTime()-r.getTime())/(1e3*60*60*24));return{years:p,months:g,days:v}}function mc(t,e){let{years:r,months:n,days:i}=St(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 hc(t){let e={};return xo(t.item,e),e}function xo(t,e){for(let r of t??y)r.linkId&&r.answer&&r.answer.length>0&&(e[r.linkId]=r.answer[0]),xo(r.item,e)}function gc(t){let e={};return vo(t.item,e),e}function vo(t,e){for(let r of t??y)r.linkId&&r.answer&&r.answer.length>0&&(e[r.linkId]?e[r.linkId]=[...e[r.linkId],...r.answer]:e[r.linkId]=r.answer),vo(r.item,e)}function Or(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}function yc(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 Ir(t,...e){let r=me(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 me(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 bt(t,e){let r=Un(t);return JSON.stringify(r,null,e?2:void 0)??""}function Un(t){if(!(t==null||t===""))return typeof t=="object"?Array.isArray(t)?xc(t):vc(t):t}function xc(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=Un(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 vc(t){let e,r=0;for(let n in t){let i=t[n],o=Un(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 w(t){if(t==null)return!0;let e=typeof t;return e==="string"||e==="object"?!se(t):!1}function se(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 Tc(t){if(!t)return;let e=t.length-1;for(;e>=0&&w(t[e]);)e--;return e>=0?t.slice(0,e+1):void 0}function he(t,e,r){return t===e||w(t)&&w(e)?!0:w(t)||w(e)?!1:Array.isArray(t)&&Array.isArray(e)?Sc(t,e):Array.isArray(t)||Array.isArray(e)?!1:R(t)&&R(e)?bc(t,e,r):(R(t)||R(e),!1)}function Sc(t,e){if(t.length!==e.length)return!1;for(let r=0;r<t.length;r++)if(!he(t[r],e[r]))return!1;return!0}function bc(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(!he(o,s,i))return!1}return!0}function Xe(t,e){return w(t)?!0:w(e)?!1:Array.isArray(t)&&Array.isArray(e)?Ec(t,e):Array.isArray(t)||Array.isArray(e)?!1:R(t)&&R(e)?Rc(t,e):R(t)||R(e)?!1:t===e}function Ec(t,e){return e.every(r=>t.some(n=>Xe(n,r)))}function Rc(t,e){return Object.entries(e).every(([r,n])=>r in t&&Xe(t[r],n))}function Ae(t){return t===void 0?t:JSON.parse(JSON.stringify(t))}function Cc(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 R(t){return t!==null&&typeof t=="object"}function Pc(t){return t.every(We)}function We(t){return typeof t=="string"}function Cr(t){return R(t)&&"code"in t&&typeof t.code=="string"}function Pr(t){return R(t)&&"coding"in t&&Array.isArray(t.coding)&&t.coding.every(Cr)}function wc(t,e){for(let r of t??y)for(let n of r.coding??y)if(n.system===e)return n.code}function To(t,e){let[r,n]=qe(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 Ac(t,e){return(t.coding??y).some(r=>To(r,e))}function So(t){return R(t)&&"text"in t&&typeof t.text=="string"}var bo=[];for(let t=0;t<256;t++)bo.push(t.toString(16).padStart(2,"0"));function Bn(t){let e=qn(t),r=new Uint8Array(e),n=new Array(r.length);for(let i=0;i<r.length;i++)n[i]=bo[r[i]];return n.join("")}function Wn(t){let e=qn(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 qn(t){return ArrayBuffer.isView(t)?t.buffer:t}function L(t){return t?t.charAt(0).toUpperCase()+t.substring(1):""}function Oc(t){return t===t.toLowerCase()&&t!==t.toUpperCase()}function kr(t){return t.length>0&&t.startsWith(t[0].toUpperCase())}function ge(t,e){let r=t+".";if(e.startsWith(r))return e.slice(r.length)}function wr(t,e){return t.coding?.find(r=>r.system===e)?.code}function Ic(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 kc(t,e,r,n){return t.qualifiedInterval?.find(i=>Ro(i,e)&&_c(i,r,t.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function Vc(t,e,r){return Eo(t,e,r)[0]}function Eo(t,e,r){return t.qualifiedInterval?.filter(n=>Ro(n,e)&&(!r||r.includes(n.condition)))??[]}function Ro(t,e){return Dc(t,e)&&Mc(t,e)}function Dc(t,e){return!t.gender||t.gender===e.gender}function Mc(t,e){return!t.age||$n(St(e.birthDate).years,t.age)}function _c(t,e,r){return!!t.range&&$n(e,t.range,r)}function $n(t,e,r){return(e.low?.value===void 0||Po(t,e.low.value,r))&&(e.high?.value===void 0||Co(t,e.high.value,r))}function Lc(t,e){return Number.parseFloat(t.toFixed(e))}function Nc(t,e,r){return oe(t,r)===oe(e,r)}function Fc(t,e,r){return oe(t,r)<oe(e,r)}function Uc(t,e,r){return oe(t,r)>oe(e,r)}function Co(t,e,r){return oe(t,r)<=oe(e,r)}function Po(t,e,r){return oe(t,r)>=oe(e,r)}function oe(t,e){return e===void 0?t:Math.round(t*Math.pow(10,e))}function Bc(t,e,r){return t.find(n=>typeof e=="string"?wr(n.code||{},r)===e:wr(n.code||{},r)===wr(e,r))}function Wc(t){return Array.isArray(t)?t[0]:t}var Vr=(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 qe(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 jn(t){let e,r=!1;return function(){return r||(e=t(),r=!0),e}}function X(t,e){return t?(t.push(e),t):[e]}function Et(t){return t.sort((e,r)=>e.localeCompare(r))}function Dr(t){return t.endsWith("/")?t:t+"/"}function wo(t){return t.startsWith("/")?t.slice(1):t}function U(t,e){return new URL(wo(e),Dr(t.toString())).toString()}function Hn(t,e){return U(t,e).toString().replace("http://","ws://").replace("https://","wss://")}function Gn(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 Ao=/^(([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 qc(t){return Ao.test(t)}function $c(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 jc(t,e){return new Map(t.entry?.filter(n=>!!n.resource).map(n=>[Or(n.resource,e),n.resource]).filter(([n])=>n!==void 0))}function Hc(t,e){if(t?.meta?.profile?.includes(e)){let r=t.meta.profile.indexOf(e);t.meta.profile.splice(r,1)}return t}function Gc(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 Qc(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 zc(t){return t!=null}var y=Object.freeze([]),Jc=()=>{};function Qn(t){if(!t)return"";switch(t.type){case"Address":return Io(t.value);case"CodeableConcept":return Ue(t.value);case"Coding":return zn(t.value);case"ContactPoint":return t.value.value;case"HumanName":return tt(t.value);case"Quantity":return ye(t.value);case"Reference":return Oo(t.value);default:return t.value?.toString()??""}}function Oo(t){return t?t.display??t.reference??bt(t):""}function Io(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 tt(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=$e(t.text);if(n)return n}return r.join(" ").trim()}function Kc(t){let e=[];return t.given&&e.push(...t.given),e.join(" ").trim()}function Yc(t){return $e(t.family)??""}function Rt(t){return t instanceof Date&&!Number.isNaN(t.getTime())}function Xc(t,e,r){if(!t)return"";let n=new Date(t);return Rt(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...r})):""}function Zc(t,e,r){if(!t)return"";let n=new Date("2000-01-01T"+t+"Z");return Rt(n)?n.toLocaleTimeString(e,r):""}function ko(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 Rt(s)?new Intl.DateTimeFormat(e,{hour:"numeric",minute:"2-digit",second:o===0?void 0:"numeric",...r,timeZone:"UTC"}).format(s):""}function Be(t,e,r){if(!t)return"";let n=new Date(t);return Rt(n)?n.toLocaleString(e,r):""}function eu(t,e,r){return!t||!t.start&&!t.end?"":Be(t.start,e,r)+" - "+Be(t.end,e,r)}var tu={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},ru={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},nu={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function iu(t){if(!t)return"";let e=[];return ou(e,t.repeat),t.event&&e.push(t.event.map(r=>Be(r)).join(", ")),L(e.join(" ").trim())}function ou(t,e){if(!e?.periodUnit)return;let r=e.frequency??1,n=e.period??1,i=e.periodUnit;r===1&&n===1?t.push(tu[i]):(r===1?t.push("once"):t.push(r+" times"),n===1?t.push("per "+ru[i]):t.push("per "+n+" "+nu[i])),e.dayOfWeek&&t.push("on "+e.dayOfWeek.map(L).join(", ")),e.timeOfDay&&t.push("at "+e.timeOfDay.map(o=>ko(o)).join(", "))}function su(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=uu(n.value,e),`> ${ye(n,e)}`):`>= ${ye(n,e)}`:n?.value===void 0&&i?.value!==void 0?r&&e!==void 0?(i.value=cu(i.value,e),`< ${ye(i,e)}`):`<= ${ye(i,e)}`:(n?.unit===i?.unit&&delete n?.unit,`${ye(n,e)} - ${ye(i,e)}`)}function ye(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 au(t){return t?.value===void 0?"":t.value.toLocaleString(void 0,{style:"currency",currency:t.currency??"USD",currencyDisplay:"narrowSymbol"})}function Ue(t){if(!t)return"";let e=$e(t.text);return e||(t.coding?t.coding.map(r=>zn(r)).join(", "):"")}function zn(t,e){let r=$e(t?.display);if(r){let n=e?$e(t?.code):void 0;return`${r}${n?" ("+n+")":""}`}return $e(t?.code)??""}function Vo(t){if(!t)return"";let e=[];if(t.valueQuantity)e.push(ye(t.valueQuantity));else if(t.valueCodeableConcept)e.push(Ue(t.valueCodeableConcept));else{let r=$e(t.valueString);r&&e.push(r)}return"component"in t&&e.push(t.component.map(r=>Vo(r)).join(" / ")),e.join(" / ").trim()}function $e(t){return typeof t=="string"?t:void 0}function cu(t,e,r=1){return(Do(t,e)+r)*Math.pow(10,-e)}function uu(t,e,r=1){return(Do(t,e)-r)*Math.pow(10,-e)}function Do(t,e){return e===void 0?t:Math.round(t*Math.pow(10,e))}var d={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 lu(t){for(let e of t.entry??y){let r=e.resource;r.resourceType==="SearchParameter"&&Mr(r)}}function Pn(t){let e=Array.isArray(t)?t:t.entry?.map(r=>r.resource)??[];for(let r of e)r?.resourceType==="StructureDefinition"&&r.kind==="resource"&&_o(r.type)}function _o(t){let e=$.types[t];return e||(e={searchParamsDetails:{}},$.types[t]=e),!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"},_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 Mr(t){for(let e of t.base??y){let r=_o(e);r.searchParams||(r.searchParams={}),r.searchParams[t.code]=t}}function mr(t){let e=t.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?Lo((t.base?.path??t.path)?.split(".")):e}function Lo(t){return t.length===1?t[0]:t.map(L).join("")}function xr(t){return t.kind==="resource"&&t.name!=="Resource"&&t.name!=="DomainResource"}function du(){return Object.values(bn()).filter(xr).map(t=>t.name)}function pu(t){return $.types[t]?.searchParams}function fu(t,e){return $.types[t]?.searchParams?.[e]}function mu(t){let e=t.replaceAll("[x]","").split(".").pop();return No(e)}function No(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(gu).join(" ").replace("_"," ").replaceAll(/\s+/g," ")}var hu=new Set(["CDS","ID","IP","PKCE","JWKS","URI","URL","OMB","UDI"]);function gu(t){let e=t.toUpperCase();return t===e?t:hu.has(e)?e:e.charAt(0)+t.slice(1)}function Tt(t,e,r){let n=Ce(t,r);if(n)return Jn(n.elements,e)}function Jn(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 Kn(t,e,r){let n=e.split(/[.[\]]/g),i=Ce(t,r);if(!i)return;let o=i,s;for(let a of n){let u;if(a.match(/^[a-z]/)){let l=Jn(o.elements,a);if(!l)return;if(l.type.length>1)throw new Error("Multiple matching types in path "+e);u=Ce(l.type[0].code),s=l}u&&(o=u)}return s}function yu(t){return!!(t&&typeof t=="object"&&"type"in t&&"value"in t)}function I(t,e){return!(!t||typeof t!="object"||!("resourceType"in t)||e&&t.resourceType!==e)}function Q(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 $={types:{}};function Yn(t){switch(t.type){case d.uuid:case d.uri:case d.url:case d.string:case d.oid:case d.markdown:case d.id:case d.code:case d.canonical:case d.base64Binary:case d.SystemString:case d.date:case d.dateTime:case d.instant:return t.value;case d.Identifier:return`${t.value.system??""}|${t.value.value}`;case d.Coding:return Mo(t.value);case d.CodeableConcept:return t.value.coding?.map(Mo).join(",")??t.value.text;case d.HumanName:return t.value.text?t.value.text:tt(t.value);case d.unsignedInt:case d.positiveInt:case d.integer:case d.decimal:return t.value.toString();case d.boolean:return t.value?"true":"false";case d.Extension:return t.value.url;case d.ContactPoint:return t.value.value;case d.Quantity:case d.Age:case d.Count:case d.Duration:return`${t.value.value}|${t.value.system??""}|${t.value.code??t.value.unit??""}`;case d.Reference:return t.value.reference;default:return et(t.value)?O(t.value):JSON.stringify(t)}}function Mo(t){return t?`${t.system??""}|${t.code}`:""}function rt(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 xe=()=>[],N={empty:(t,e)=>h(e.every(r=>w(r.value))),hasValue:(t,e)=>h(e.length!==0),exists:(t,e,r)=>r?h(e.some(n=>q(r.eval(t,[n])))):h(e.length>0&&e.every(n=>!w(n.value))),all:(t,e,r)=>h(e.every(n=>q(r.eval(t,[n])))),allTrue:(t,e)=>{for(let r of e)if(!r.value)return h(!1);return h(!0)},anyTrue:(t,e)=>{for(let r of e)if(r.value)return h(!0);return h(!1)},allFalse:(t,e)=>{for(let r of e)if(r.value)return h(!1);return h(!0)},anyFalse:(t,e)=>{for(let r of e)if(!r.value)return h(!0);return h(!1)},subsetOf:(t,e,r)=>{if(e.length===0)return h(!0);let n=r.eval(t,je(t));return n.length===0?h(!1):h(e.every(i=>n.some(o=>o.value===i.value)))},supersetOf:(t,e,r)=>{let n=r.eval(t,je(t));return n.length===0?h(!0):e.length===0?h(!1):h(n.every(i=>e.some(o=>o.value===i.value)))},count:(t,e)=>[{type:d.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)=>h(e.length===N.distinct(t,e).length),where:(t,e,r)=>e.filter(n=>q(r.eval(t,[n]))),select:(t,e,r)=>e.flatMap(n=>r.eval({parent:t,variables:{$this:n}},[n])),repeat:xe,ofType:(t,e,r)=>e.filter(n=>n.type===r.name),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,je(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,je(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,je(t));return yt([...e,...n])},combine:(t,e,r)=>{if(!r)return e;let n=r.eval(t,je(t));return[...e,...n]},htmlChecks:(t,e,r)=>[b(!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 q(o)?n.eval(t,e):i?i.eval(t,e):[]},toBoolean:(t,e)=>{if(e.length===0)return[];let[{value:r}]=ce(e,1);if(typeof r=="boolean")return[{type:d.boolean,value:r}];if(typeof r=="number"&&(r===0||r===1))return h(!!r);if(typeof r=="string"){let n=r.toLowerCase();if(["true","t","yes","y","1","1.0"].includes(n))return h(!0);if(["false","f","no","n","0","0.0"].includes(n))return h(!1)}return[]},convertsToBoolean:(t,e)=>e.length===0?[]:h(N.toBoolean(t,e).length===1),toInteger:(t,e)=>{if(e.length===0)return[];let[{value:r}]=ce(e,1);return typeof r=="number"?[{type:d.integer,value:r}]:typeof r=="string"&&/^[+-]?\d+$/.exec(r)?[{type:d.integer,value:Number.parseInt(r,10)}]:typeof r=="boolean"?[{type:d.integer,value:r?1:0}]:[]},convertsToInteger:(t,e)=>e.length===0?[]:h(N.toInteger(t,e).length===1),toDate:(t,e)=>{if(e.length===0)return[];let[{value:r}]=ce(e,1);return typeof r=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(r)?[{type:d.date,value:rt(r)}]:[]},convertsToDate:(t,e)=>e.length===0?[]:h(N.toDate(t,e).length===1),toDateTime:(t,e)=>{if(e.length===0)return[];let[{value:r}]=ce(e,1);return typeof r=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(r)?[{type:d.dateTime,value:rt(r)}]:[]},convertsToDateTime:(t,e)=>e.length===0?[]:h(N.toDateTime(t,e).length===1),toDecimal:(t,e)=>{if(e.length===0)return[];let[{value:r}]=ce(e,1);return typeof r=="number"?[{type:d.decimal,value:r}]:typeof r=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(r)?[{type:d.decimal,value:Number.parseFloat(r)}]:typeof r=="boolean"?[{type:d.decimal,value:r?1:0}]:[]},convertsToDecimal:(t,e)=>e.length===0?[]:h(N.toDecimal(t,e).length===1),toQuantity:(t,e)=>{if(e.length===0)return[];let[{value:r}]=ce(e,1);return V(r)?[{type:d.Quantity,value:r}]:typeof r=="number"?[{type:d.Quantity,value:{value:r,unit:"1"}}]:typeof r=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(r)?[{type:d.Quantity,value:{value:Number.parseFloat(r),unit:"1"}}]:typeof r=="boolean"?[{type:d.Quantity,value:{value:r?1:0,unit:"1"}}]:[]},convertsToQuantity:(t,e)=>e.length===0?[]:h(N.toQuantity(t,e).length===1),toString:(t,e)=>{if(e.length===0)return[];let[{value:r}]=ce(e,1);return r==null?[]:V(r)?[{type:d.string,value:`${r.value} '${r.unit}'`}]:[{type:d.string,value:r.toString()}]},convertsToString:(t,e)=>e.length===0?[]:h(N.toString(t,e).length===1),toTime:(t,e)=>{if(e.length===0)return[];let[{value:r}]=ce(e,1);if(typeof r=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(r);if(n)return[{type:d.time,value:rt("T"+n[1])}]}return[]},convertsToTime:(t,e)=>e.length===0?[]:h(N.toTime(t,e).length===1),indexOf:(t,e,r)=>z((n,i)=>n.indexOf(i),t,e,r),substring:(t,e,r,n)=>z((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)=>z((n,i)=>n.startsWith(i),t,e,r),endsWith:(t,e,r)=>z((n,i)=>n.endsWith(i),t,e,r),contains:(t,e,r)=>z((n,i)=>n.includes(i),t,e,r),upper:(t,e)=>z(r=>r.toUpperCase(),t,e),lower:(t,e)=>z(r=>r.toLowerCase(),t,e),replace:(t,e,r,n)=>z((i,o,s)=>i.replaceAll(o,s),t,e,r,n),matches:(t,e,r)=>z((n,i)=>!!new RegExp(i).exec(n),t,e,r),replaceMatches:(t,e,r,n)=>z((i,o,s)=>i.replaceAll(new RegExp(o,"g"),s.replaceAll(/\$\{(\w+)\}/g,"$<$1>")),t,e,r,n),length:(t,e)=>z(r=>r.length,t,e),toChars:(t,e)=>z(r=>r?r.split(""):void 0,t,e),encode:xe,decode:xe,escape:xe,unescape:xe,trim:xe,split:xe,join:(t,e,r)=>{let n=r?.eval(t,je(t))[0]?.value??"";if(typeof n!="string")throw new TypeError("Separator must be a string.");return[{type:d.string,value:e.map(i=>i.value?.toString()??"").join(n)}]},abs:(t,e)=>ae(Math.abs,t,e),ceiling:(t,e)=>ae(Math.ceil,t,e),exp:(t,e)=>ae(Math.exp,t,e),floor:(t,e)=>ae(Math.floor,t,e),ln:(t,e)=>ae(Math.log,t,e),log:(t,e,r)=>ae((n,i)=>Math.log(n)/Math.log(i),t,e,r),power:(t,e,r)=>ae(Math.pow,t,e,r),round:(t,e,...r)=>ae((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)=>ae(Math.sqrt,t,e),truncate:(t,e)=>ae(r=>Math.trunc(r),t,e),children:xe,descendants:xe,trace:(t,e,r)=>e,now:()=>[{type:d.dateTime,value:new Date().toISOString()}],timeOfDay:()=>[{type:d.time,value:new Date().toISOString().substring(11)}],today:()=>[{type:d.date,value:new Date().toISOString().substring(0,10)}],between:(t,e,r,n,i)=>{let o=N.toDateTime(t,r.eval(t,e));if(o.length===0)throw new Error("Invalid start date");let s=N.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=St(o[0].value,s[0].value);return[{type:d.Quantity,value:{value:u[a],unit:a}}]},is:(t,e,r)=>{let n="";return r instanceof B?n=r.name:r instanceof Z&&(n=r.left.name+"."+r.right.name),n?e.map(i=>({type:d.boolean,value:xt(i,n)})):[]},not:(t,e)=>N.toBoolean(t,e).map(r=>({type:d.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 b(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:d.BackboneElement,value:void 0}}).filter(r=>!!r.value),as:(t,e,r)=>{let n=r.name,i=D(e,n);return i?[i]:[]},type:(t,e)=>e.map(({value:r})=>typeof r=="boolean"?{type:d.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof r=="number"?{type:d.BackboneElement,value:{namespace:"System",name:"Integer"}}:I(r)?{type:d.BackboneElement,value:{namespace:"FHIR",name:r.resourceType}}:{type:d.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:d.boolean,value:o.value?.resourceType===i}))},getResourceKey:(t,e)=>{let r=e[0].value;return r?.id?[{type:d.id,value:r.id}]:[]},getReferenceKey:(t,e,r)=>{let n=e[0].value;if(!n?.reference)return[];let i="";return r instanceof B&&(i=r.name),i&&!n.reference.startsWith(i+"/")?[]:[{type:d.id,value:we(n)}]},extension:(t,e,r)=>{let n=r.eval(t,e)[0].value,i=e?.[0]?.value;if(i){let o=me(i,n);if(o)return[{type:d.Extension,value:o}]}return[]}};function z(t,e,r,...n){if(r.length===0)return[];let[{value:i}]=ce(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(b):[b(s)]}function ae(t,e,r,...n){if(r.length===0)return[];let[{value:i}]=ce(r,1),o=V(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(p=>p.eval(e,r)[0]?.value)),u=o?d.Quantity:r[0].type,l=o?{...i,value:a}:a;return[{type:u,value:l}]}function ce(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 je(t){let e=t;for(;e.parent?.variables.$this;)e=e.parent;return[e.variables.$this]}var ve=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()}},j=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()}},B=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 I(r,this.name)?("path"in e||(e.path=r.resourceType),e):Tr(e,this.name)}toString(){return this.name}},Ct=class{eval(){return[]}toString(){return"{}"}},Pt=class extends lt{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()}},Te=class extends C{constructor(e,r){super("as",e,r)}eval(e,r){return N.as(e,this.left.eval(e,r),this.right)}},F=class extends C{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=D(i)?.value,a=D(o)?.value,u=V(s)?s.value:s,l=V(a)?a.value:a,p=this.impl(u,l);return typeof p=="boolean"?h(p):V(s)?[{type:d.Quantity,value:{...s,value:p}}]:[b(p)]}},Fo=Object.freeze({type:"string",value:""}),wt=class extends C{constructor(e,r){super("&",e,r)}eval(e,r){let n=D(this.left.eval(e,r))??Fo,i=D(this.right.eval(e,r))??Fo;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:d.string,value:n.value+i.value}]}},At=class extends C{constructor(e,r){super("contains",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return h(n.some(o=>o.value===i[0].value))}},Ot=class extends C{constructor(e,r){super("in",e,r)}eval(e,r){let n=D(this.left.eval(e,r)),i=this.right.eval(e,r);return n?h(i.some(o=>Ze(n,o)[0].value)):[]}},Z=class extends C{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()}`}},Oe=class extends C{constructor(e,r){super("|",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return yt([...n,...i])}},It=class extends C{constructor(e,r){super("=",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return Dn(n,i)}},kt=class extends C{constructor(e,r){super("!=",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return Mn(n,i)}},Vt=class extends C{constructor(e,r){super("~",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return Rr(n,i)}},Dt=class extends C{constructor(e,r){super("!~",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return Vn(Rr(n,i))}},Ie=class extends C{constructor(e,r){super("is",e,r)}eval(e,r){let n=this.left.eval(e,r);if(n.length!==1)return[];let i=this.right.name;return h(xt(n[0],i))}},Mt=class extends C{constructor(e,r){super("and",e,r)}eval(e,r){let n=D(this.left.eval(e,r),"boolean"),i=D(this.right.eval(e,r),"boolean");return n?.value===!0&&i?.value===!0?h(!0):n?.value===!1||i?.value===!1?h(!1):[]}},_t=class extends C{constructor(e,r){super("or",e,r)}eval(e,r){let n=D(this.left.eval(e,r),"boolean"),i=D(this.right.eval(e,r),"boolean");return n?.value===!1&&i?.value===!1?h(!1):n?.value||i?.value?h(!0):[]}},Lt=class extends C{constructor(e,r){super("xor",e,r)}eval(e,r){let n=D(this.left.eval(e,r),"boolean"),i=D(this.right.eval(e,r),"boolean");return!n||!i?[]:h(n.value!==i.value)}},Nt=class extends C{constructor(e,r){super("implies",e,r)}eval(e,r){let n=D(this.left.eval(e,r),"boolean"),i=D(this.right.eval(e,r),"boolean");return i?.value===!0||n?.value===!1?h(!0):!n||!i?[]:h(!1)}},ee=class{constructor(e,r){c(this,"name");c(this,"args");this.name=e,this.args=r}eval(e,r){let n=N[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(", ")})`}},ke=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 xu=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],vu={"'":"'",'"':'"',"`":"`",r:"\r",n:`
2
2
  `,t:" ",f:"\f","\\":"\\"},Se=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=vu[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 this.pos.index=e-1,this.consumeDateTime();if(n===" ")Tu(this.peekToken())&&(r="Quantity",this.consumeToken());else if(n&&/[a-zA-Z_$]/.exec(n))return this.pos.index=e-1,this.consumeString(" ");return this.buildToken(r,this.str.substring(e,this.pos.index))}consumeSymbol(){let e=this.consumeWhile(()=>this.symbolRegex.exec(this.curr()));return this.prevToken()?.value!=="."&&this.keywords.includes(e)?this.buildToken(e,e):this.buildToken("Symbol",e)}consumeOperator(){let e=this.curr(),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 Tu(t){return!!(t&&(t.id==="String"||t.id==="Symbol"&&xu.includes(t.value)))}var Ft=["true","false"],Ut=["!=","!~","<=",">=","{}","->"];function Uo(t){return new Se(t,Ft,Ut).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},Su={parse(t){let e=t.consumeAndParse();if(!t.match(")"))throw new Error("Parse error: expected `)` got `"+t.peek()?.value+"`");return e}},bu={parse(t,e){let r=t.consumeAndParse();if(!t.match("]"))throw new Error("Parse error: expected `]`");return new ke(e,r)},precedence:S.Indexer},Eu={parse(t,e){if(!(e instanceof B))throw new Error("Unexpected parentheses");let r=[];for(;!t.match(")");)r.push(t.consumeAndParse()),t.match(",");return new ee(e.name,r)},precedence:S.FunctionCall};function Ru(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 nt(){return new dt().registerPrefix("String",{parse:(t,e)=>new j({type:d.string,value:e.value})}).registerPrefix("DateTime",{parse:(t,e)=>new j({type:d.dateTime,value:rt(e.value)})}).registerPrefix("Quantity",{parse:(t,e)=>new j({type:d.Quantity,value:Ru(e.value)})}).registerPrefix("Number",{parse:(t,e)=>new j({type:e.value.includes(".")?d.decimal:d.integer,value:Number.parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new j({type:d.boolean,value:!0})}).registerPrefix("false",{parse:()=>new j({type:d.boolean,value:!1})}).registerPrefix("Symbol",{parse:(t,e)=>new B(e.value)}).registerPrefix("{}",{parse:()=>new Ct}).registerPrefix("(",Su).registerInfix("[",bu).registerInfix("(",Eu).prefix("+",S.UnaryAdd,(t,e)=>new Pt("+",e,r=>r)).prefix("-",S.UnarySubtract,(t,e)=>new F("-",e,e,(r,n)=>-n)).infixLeft(".",S.Dot,(t,e,r)=>new Z(t,r)).infixLeft("/",S.Divide,(t,e,r)=>new F("/",t,r,(n,i)=>n/i)).infixLeft("*",S.Multiply,(t,e,r)=>new F("*",t,r,(n,i)=>n*i)).infixLeft("+",S.Add,(t,e,r)=>new F("+",t,r,(n,i)=>n+i)).infixLeft("-",S.Subtract,(t,e,r)=>new F("-",t,r,(n,i)=>n-i)).infixLeft("|",S.Union,(t,e,r)=>new Oe(t,r)).infixLeft("=",S.Equals,(t,e,r)=>new It(t,r)).infixLeft("!=",S.NotEquals,(t,e,r)=>new kt(t,r)).infixLeft("~",S.Equivalent,(t,e,r)=>new Vt(t,r)).infixLeft("!~",S.NotEquivalent,(t,e,r)=>new Dt(t,r)).infixLeft("<",S.LessThan,(t,e,r)=>new F("<",t,r,(n,i)=>n<i)).infixLeft("<=",S.LessThanOrEquals,(t,e,r)=>new F("<=",t,r,(n,i)=>n<=i)).infixLeft(">",S.GreaterThan,(t,e,r)=>new F(">",t,r,(n,i)=>n>i)).infixLeft(">=",S.GreaterThanOrEquals,(t,e,r)=>new F(">=",t,r,(n,i)=>n>=i)).infixLeft("&",S.Ampersand,(t,e,r)=>new wt(t,r)).infixLeft("and",S.And,(t,e,r)=>new Mt(t,r)).infixLeft("as",S.As,(t,e,r)=>new Te(t,r)).infixLeft("contains",S.Contains,(t,e,r)=>new At(t,r)).infixLeft("div",S.Divide,(t,e,r)=>new F("div",t,r,(n,i)=>Math.trunc(n/i))).infixLeft("in",S.In,(t,e,r)=>new Ot(t,r)).infixLeft("is",S.Is,(t,e,r)=>new Ie(t,r)).infixLeft("mod",S.Modulo,(t,e,r)=>new F("mod",t,r,(n,i)=>n%i)).infixLeft("or",S.Or,(t,e,r)=>new _t(t,r)).infixLeft("xor",S.Xor,(t,e,r)=>new Lt(t,r)).infixLeft("implies",S.Implies,(t,e,r)=>new Nt(t,r))}var Cu=nt();function Bt(t){return new ve(t,Cu.construct(Uo(t)).consumeAndParse())}function Pu(t,e){let r=Array.isArray(e)?e:[e];for(let n=0;n<r.length;n++){let i=r[n];typeof i=="object"&&"type"in i&&"value"in i||(r[n]=b(r[n]))}return A(t,r).map(n=>n.value)}function A(t,e,r={},n=void 0){let i;if(typeof t=="string"){let o=n?.get(t);i=o??Bt(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 wu(t){let e=[];for(let r of t)r.type===d.Range?e.push([r.value?.low?.value,r.value?.high?.value]):typeof r.value=="number"&&e.push([r.value,r.value]);return e}function Xn(t){let e=[];for(let r of t){let n=vt(r.value);n&&e.push(n)}return e}function Zn(t){let e=new Set;for(let r of t){let n=Qn(r);n&&e.add(n)}return Array.from(e)}function ei(t){let e=new Set;for(let r of t){let{value:n}=r;n&&(We(n)?e.add(n):Q(n)?e.add(n.reference):et(n)?e.add(O(n)):typeof n.identifier=="object"&&e.add(`identifier:${n.identifier.system}|${n.identifier.value}`))}return Array.from(e)}function Au(t){let e=[];for(let r of t){let{value:n}=r;typeof n=="number"?e.push({value:n}):V(n)&&e.push(n)}return e}function Ou(t){let e=new Set;for(let r of t)We(r.value)&&e.add(r.value);return Array.from(e)}function ti(t,e={}){let r=[];for(let n of t)Iu(e,r,n);return r}function Iu(t,e,r){let{type:n,value:i}=r;switch(n){case d.Identifier:ku(e,t,i);break;case d.CodeableConcept:Vu(e,t,i);break;case d.Coding:Bo(e,t,i);break;case d.ContactPoint:Du(e,t,i);break;default:He(e,t,void 0,i?.toString())}}function ku(t,e,r){r?.type?.text&&He(t,e,e.textSearchSystem,r.type.text),He(t,e,r?.system,r?.value)}function Vu(t,e,r){r?.text&&He(t,e,e.textSearchSystem,r.text);for(let n of r?.coding??y)Bo(t,e,n)}function Bo(t,e,r){r&&(r.display&&He(t,e,e.textSearchSystem,r.display),He(t,e,r.system,r.code))}function Du(t,e,r){r&&He(t,e,r.system,r.value?.toLocaleLowerCase())}function He(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 Mu=20,_u=1e3,m={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:m.CONTAINS,exact:m.EXACT,above:m.ABOVE,below:m.BELOW,text:m.TEXT,not:m.NOT,in:m.IN,"not-in":m.NOT_IN,"of-type":m.OF_TYPE,missing:m.MISSING,identifier:m.IDENTIFIER,iterate:m.ITERATE},ni={eq:m.EQUALS,ne:m.NOT_EQUALS,lt:m.LESS_THAN,le:m.LESS_THAN_OR_EQUALS,gt:m.GREATER_THAN,ge:m.GREATER_THAN_OR_EQUALS,sa:m.STARTS_AFTER,eb:m.ENDS_BEFORE,ap:m.APPROXIMATELY,sw:m.STARTS_WITH};function it(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&&o.push(...n.entries()),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 Lu(i,o)}function Lu(t,e){let r={resourceType:t};for(let[n,i]of e)Nu(r,n,i);return r}function Nu(t,e,r){let n,i,o=e.indexOf(":");if(o>=0?(n=e.substring(0,o),i=e.substring(o+1)):(n=e,i=""),n!=="_"){if(n==="_has"||e.includes(".")){t.filters=X(t.filters,{code:e,operator:m.EQUALS,value:r});return}switch(n){case"_sort":Fu(t,r);break;case"_cursor":t.cursor=r;break;case"_count":t.count=Number.parseInt(r,10);break;case"_offset":t.offset=Number.parseInt(r,10);break;case"_total":t.total=r;break;case"_summary":r==="count"?(t.total="accurate",t.count=0):(r==="true"||r==="data"||r==="text")&&(t.summary=r);break;case"_include":{let s=Wo(r);i==="iterate"&&(s.modifier=m.ITERATE),t.include=X(t.include,s);break}case"_revinclude":{let s=Wo(r);i==="iterate"&&(s.modifier=m.ITERATE),t.revInclude=X(t.revInclude,s);break}case"_fields":case"_elements":t.fields=r.split(",");break;case"_type":t.types=r.split(",");break;case"_format":t.format=r;break;case"_pretty":t.pretty=r==="true";break;default:{let s=$.types[t.resourceType]?.searchParams?.[n];s?t.filters=X(t.filters,jo(s,m.EQUALS,i,r)):t.filters=X(t.filters,Bu(n,i,r))}}}}function Fu(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 Uu=[m.MISSING,m.PRESENT];function jo(t,e,r,n){if(Uu.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}=Wu(n,r||m.EQUALS);if(!qo(t,o))throw new f(P(`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(!qo(t,n))throw new f(P(`Invalid format for ${t.type} search parameter: ${n}`));return{code:t.code,operator:qu(r)??e,value:n}}default:throw new Error("Unrecognized search parameter type: "+t.type)}}function Bu(t,e,r){let n=m.EQUALS;if(e)n=e;else if(r.length>=2){let i=r.substring(0,2);i in ni&&(r.length===2||r.at(2)?.match(/\d/))&&(n=i,r=r.substring(i.length))}return{code:t,operator:n,value:r}}function Wu(t,e){let r=t.substring(0,2),n=ni[r];return n?{operator:n,value:t.substring(2)}:{operator:e,value:t}}function qu(t){return ri[t]}function Wo(t){let e=t.split(":");if(e.includes("*"))throw new f(P("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new f(P(`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 f(P(`Invalid include value '${t}'`))}function qo(t,e){return t.type==="date"?Fe(e):!0}var $u=/{{([^{}]+)}}/g;function ju(t,e,r=[]){return t=t.replaceAll($u,(n,i)=>{let o=A(i,r,e);return o.length!==1?"":Yn(o[0])}),it(t)}function Hu(t){let e=[];t.fields&&e.push("_fields="+t.fields.join(","));for(let r of t.filters??y)e.push(Gu(r));t.sortRules&&t.sortRules.length>0&&e.push(Qu(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??y)e.push($o("_include",r));for(let r of t.revInclude??y)e.push($o("_revinclude",r));return e.length===0?"":(Et(e),"?"+e.join("&"))}function Gu(t){let e=t.operator in ri?":"+t.operator:"",r=t.operator!==m.EQUALS&&t.operator in ni?t.operator:"";return`${t.code}${e}=${r}${encodeURIComponent(t.value)}`}function Qu(t){return"_sort="+t.map(e=>e.descending?"-"+e.code:e.code).join(",")}function $o(t,e){return t+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function ot(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 zu(t,e){return P(`Invalid modifier :${t} for ${e}`)}function Ju(t,e){return t in ri?zu(t,e):P(`Invalid operator ${t} for ${e}`)}function Wt(t,e){if(e.resourceType!==t.resourceType)return!1;for(let r of e.filters??y)if(!Yu(t,e,r))return!1;return!0}var Ku=new Y(1e3);function Yu(t,e,r){let n=$.types[e.resourceType]?.searchParams?.[r.code];if(!n)return!1;let i=A(n.expression,[b(t)],void 0,Ku);if(r.operator===m.MISSING||r.operator===m.PRESENT)return Xu(i,r);switch(n.type){case"reference":return Zu(n,i,r);case"string":case"uri":return rl(i,r);case"token":return el(i,r);case"date":return il(i,r);default:return!1}}function Xu(t,e){let r=t.length>0;return(e.operator===m.MISSING&&e.value==="false"||e.operator===m.PRESENT&&e.value==="true")===r}function Zu(t,e,r){let n=_r(r.operator);if(r.value===""&&e.length===0)return r.operator===m.EQUALS;let i=ei(e);for(let o of ot(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 el(t,e){let r=ti(t),n=ot(e.value),i=_r(e.operator);for(let o of r)for(let s of n)if(tl(o,s))return!i;return i}function tl(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 rl(t,e){let r=Zn(t),n=ot(e.value),i=_r(e.operator);for(let o of r)for(let s of n)if(nl(o,s))return!i;return i}function nl(t,e){return t.toLowerCase().includes(e.toLowerCase())}function il(t,e){let r=Xn(t),n=ot(e.value),i=_r(e.operator);for(let o of r)for(let s of n)if(ol(o,e.operator,s))return!i;return i}function ol(t,e,r){if(!t)return!1;let n=vt(r);if(!n)return!1;let i=t.start??"0000",o=t.end??"9999",s=n.start,a=n.end;switch(e){case m.APPROXIMATELY:case m.EQUALS:case m.NOT_EQUALS:return i<a&&o>s;case m.LESS_THAN:return i<s;case m.GREATER_THAN:return o>a;case m.LESS_THAN_OR_EQUALS:return i<=a;case m.GREATER_THAN_OR_EQUALS:return o>=s;case m.STARTS_AFTER:return i>a;case m.ENDS_BEFORE:return o<s;default:return!1}}function _r(t){return t===m.NOT_EQUALS||t===m.NOT}var sl={resourceType:"*"},Ho=["DomainConfiguration","JsonWebKey","Login"],Go=["Package","PackageRelease","PackageInstallation","Project","ProjectMembership","User","UserSecurityRequest"],Ve={READ:"read",VREAD:"vread",UPDATE:"update",DELETE:"delete",HISTORY:"history",CREATE:"create",SEARCH:"search"},Qo=[Ve.READ,Ve.VREAD,Ve.HISTORY,Ve.SEARCH];function al(t,e){return ii(t,Ve.SEARCH,e)}function cl(t,e){return Ho.includes(e)?!1:ii(t,Ve.UPDATE,e)}function ii(t,e,r){return!!t.resource?.some(n=>Jo(n,r,e))}function ul(t,e){return!!zo(e,Ve.UPDATE,t)}function zo(t,e,r){return r?r.resource?.find(n=>ll(t,e,n)):sl}function ll(t,e,r){let n=t.resourceType;return Jo(r,n,e)?n==="Binary"?!0:!(r.compartment&&!t.meta?.compartment?.some(i=>i.reference===r.compartment?.reference)||r.criteria&&!Wt(t,it(r.criteria))):!1}function Jo(t,e,r){return t.resourceType!==e&&(t.resourceType!=="*"||Go.includes(e))?!1:t.interaction?t.interaction.includes(r):!t.readonly||Qo.includes(r)}var dl={FIRST:"first",APPLICATION:"application"};function J(){return typeof window<"u"}function pl(){return typeof Buffer<"u"}function fl(){return typeof window<"u"?window:void 0}function Lr(){return typeof Buffer<"u"?Buffer:void 0}var ue={assign(t){J()&&globalThis.location.assign(t)},reload(){J()&&globalThis.location.reload()},getSearch(){return J()?globalThis.location.search:""},getPathname(){return J()?globalThis.location.pathname:""},getLocation(){return J()?globalThis.location.toString():""},getOrigin(){return J()?globalThis.location.protocol+"//"+globalThis.location.host+"/":""}};function Ko(t){if(J()){let r=window.atob(t),n=Uint8Array.from(r,i=>i.codePointAt(0));return new window.TextDecoder().decode(n)}let e=Lr();if(e)return e.from(t,"base64").toString("utf-8");throw new Error("Unable to decode base64")}function qt(t){if(J()){let r=new window.TextEncoder().encode(t),n=String.fromCodePoint.apply(null,r);return window.btoa(n)}let e=Lr();if(e)return e.from(t,"utf8").toString("base64");throw new Error("Unable to encode base64")}function ml(t){return qt(t).replaceAll("+","-").replaceAll("/","_").replace(/[=]{1,2}$/,"")}function oi(t){t=t.padEnd(t.length+(4-t.length%4)%4,"=");let e=t.replaceAll("-","+").replaceAll("_","/");return Ko(e)}function Nr(){let t=new Uint32Array(28);return crypto.getRandomValues(t),Bn(t.buffer)}async function si(t){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(t))}function te(){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 Yo(t){let e={};t=Ae(t);for(let i of t.entry??y){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]=te(),i.fullUrl="urn:uuid:"+e[s],delete i.resource?.id;else if(i.fullUrl?.startsWith("resource:")){let a=i.fullUrl.slice(9);e[a]=te(),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)=>hl(i,o,e),2);return Xo(JSON.parse(n))}function hl(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 Xo(t){let e=yl(t),{sorted:r,cycles:n}=gl(e),i={},o=[];for(let a of t.entry??y)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],p={...l,request:{...l.request,method:"PUT"}};s.push(p)}return s.push(...o),{...t,entry:s}}var st={NotVisited:"NotVisited",Visiting:"Visiting",Visited:"Visited"};function gl(t){let e=[],r={},n=[];for(let o of Object.keys(t))r[o]=st.NotVisited;function i(o,s){if(r[o]===st.Visited)return!0;if(r[o]===st.Visiting){let u=s.lastIndexOf(o);return u!==-1&&n.push(s.slice(u)),!0}r[o]=st.Visiting,s.push(o);let a=!1;for(let u of t[o]??y)i(u,s)||(a=!0);return r[o]=st.Visited,s.pop(),e.unshift(o),!a}for(let o in t)r[o]===st.NotVisited&&i(o,[]);return{sorted:e,cycles:n}}function Zo(t,e){for(let r in t)if(t[r]&&typeof t[r]=="object"){let n=t[r];if(Q(n)){let i=n.reference;(i.startsWith("urn:uuid:")||i.startsWith("resource:"))&&e(i)}else Zo(n,e)}}function yl(t){let e={};for(let r of t.entry??y)r.fullUrl&&(e[r.fullUrl]=[]);for(let r of t.entry??y){let n=r.fullUrl;n&&r.resource&&Zo(r.resource,i=>{i!==n&&e[i]&&e[i].push(n)})}return e}function xl(t){t=Ae(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=te());return Yo(e)}function vl(t,e,r){return t.entry?.find(({resource:n})=>n?.resourceType===e&&n?.id===r)?.resource}async function Tl(t,e,r,n){return{hook:r.hook,hookInstance:te(),context:n,prefetch:await Sl(t,e,r,n)}}async function Sl(t,e,r,n){if(!r.prefetch)return{};let i={};for(let[o,s]of Object.entries(r.prefetch)){let a=await bl(t,e,n,s);i[o]=a??null}return i}function bl(t,e,r,n){if(n=es(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]=qe(n,"?",2);return t.search(o,s)}var El=new Set(["userPractitionerId","userPractitionerRoleId","userPatientId","userRelatedPersonId"]);function es(t,e,r){return r.replaceAll(/\{\{([^}]+)\}\}/g,(n,i)=>{if(i=i.trim(),El.has(i))return t.id;if(i.startsWith("context.")){let o=i.substring(8),s=Rl(e,o);if(We(s))return s;if(typeof s=="number"||typeof s=="boolean")return String(s)}return n})}function Rl(t,e){let r=e.split("."),n=t;for(let i of r)if(n&&R(n)&&i in n)n=n[i];else return;return n}var k={CSS:"text/css",DICOM:"application/dicom",FAVICON:"image/vnd.microsoft.icon",FHIR_JSON:"application/fhir+json",FORM_URL_ENCODED:"application/x-www-form-urlencoded",HL7_V2:"x-application/hl7-v2+er7",HTML:"text/html",JAVASCRIPT:"text/javascript",JSON:"application/json",JSON_PATCH:"application/json-patch+json",JWT:"application/jwt",MULTIPART_FORM_DATA:"multipart/form-data",PNG:"image/png",SCIM_JSON:"application/scim+json",SVG:"image/svg+xml",TEXT:"text/plain",TYPESCRIPT:"text/typescript",PING:"x-application/ping",XML:"text/xml",CDA_XML:"application/cda+xml",OCTET_STREAM:"application/octet-stream"};var Fr=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??y)n.call(this,e);return!e.defaultPrevented}removeAllListeners(){this.listeners={}}listenerCount(e){return this.listeners[e]?.length??0}},re=class{constructor(){c(this,"emitter",new Fr)}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 Ur={"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"},ts=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],Br=["DiagnosticReport-update"];function ai(t){return Br.includes(t)}function ci(t){if(Br.includes(t))throw new f(T(`'context.version' is required for '${t}'.`))}var rs={"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 ns(t){return ts.includes(t)}function ui(t){return!!t.endpoint}function Wr(t){if(!jt(t))throw new f(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,"hub.events":i.join(",")};return ui(t)&&(o.endpoint=t.endpoint),new URLSearchParams(o).toString()}function jt(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(!Ur[o])return!1;return!(ui(t)&&!(typeof t.endpoint=="string"&&t.endpoint.startsWith("ws")))}function Cl(t,e,r,n){if(typeof e!="object")throw new f(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 f(T(`context[${r}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new f(T(`context[${r}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!ns(e.resourceType))throw new f(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 f(T(`context[${r}] is invalid. context[${r}] for the '${t}' event should contain resource of type ${i}.`))}}function Pl(t,e,r,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),n.reference){if(!Q(e.reference))throw new f(T(`context[${r}] is invalid. Expected key '${e.key}' to be a reference.`))}else Cl(t,e.resource,r,n)}function wl(t,e){let r=new Map,n=rs[t];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new f(T(`Key '${o}' not found for event '${t}'. Make sure to add only valid keys.`));Pl(t,e[i],i,n[o],r)}for(let[i,o]of Object.entries(n)){if(!(o.optional||r.has(i)))throw new f(T(`Missing required key '${i}' on context for '${t}' event.`));if(!o.manyAllowed&&(r.get(i)??0)>1)throw new f(T(`${r.get(i)} context entries with key '${i}' found for the '${t}' event when schema only allows for 1.`))}}function qr(t,e,r,n){if(!(t&&typeof t=="string"))throw new f(T("Must provide a topic."));if(!Ur[e])throw new f(T(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(Ur).join(", ")}`));if(typeof r!="object")throw new f(T("context must be a context object or array of context objects."));if(Br.includes(e)&&!n)throw new f(T(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(r)?r:[r];return wl(e,i),{timestamp:new Date().toISOString(),id:te(),event:{"hub.topic":t,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var $t=class extends re{constructor(r){super();c(this,"subRequest");c(this,"websocket");if(this.subRequest=r,!r.endpoint)throw new f(T("Subscription request should contain an endpoint."));if(!jt(r))throw new f(T("Subscription request failed validation."));let n=new WebSocket(r.endpoint);n.addEventListener("open",()=>{this.dispatchEvent({type:"connect"}),n.addEventListener("message",i=>{let o=JSON.parse(i.data);if(o["hub.topic"])return;let s=o;s.event["hub.event"]!=="heartbeat"&&(this.dispatchEvent({type:"message",payload:s}),n.send(JSON.stringify({id:o?.id,timestamp:new Date().toISOString()})))}),n.addEventListener("close",()=>{this.dispatchEvent({type:"disconnect"})})}),this.websocket=n}disconnect(){this.websocket.close()}};function Al(t){return JSON.parse(oi(t))}function li(t){return t.split(".").length===3}function Ht(t){let[e,r,n]=t.split(".");return Al(r)}function di(t){try{return typeof Ht(t).login_id=="string"}catch{return!1}}function pi(t){try{let r=Ht(t).exp;return typeof r=="number"?r*1e3:void 0}catch{return}}var Gt=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,k.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var is;is=Symbol.toStringTag;var W=class{constructor(e){c(this,is,"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 at=class{constructor(e,r=""){c(this,"storage");c(this,"prefix","");this.storage=e??globalThis.localStorage??new $r,this.prefix=r}makeKey(e){return this.prefix+e}clear(){this.storage===globalThis.localStorage&&this.prefix?Object.keys(this.storage).filter(e=>e.startsWith(this.prefix)).forEach(e=>{this.storage.removeItem(e)}):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?bt(r):void 0)}},$r=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]}},fi=class extends at{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 K={Event:typeof globalThis.Event<"u"?globalThis.Event:void 0,ErrorEvent:void 0,CloseEvent:void 0},os=!1;function Ol(){if(typeof globalThis.Event>"u")throw new Error("Unable to lazy init events for ReconnectingWebSocket. globalThis.Event is not defined yet");K.Event=globalThis.Event,K.ErrorEvent=class extends Event{constructor(r,n){super("error",n);c(this,"message");c(this,"error");this.message=r.message,this.error=r}},K.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 as(t,e){if(!t)throw new Error(e)}function Il(){}function jr(t){if(t instanceof K.CloseEvent){let e=t;return new K.CloseEvent(e.code,e.reason,void 0)}if(t instanceof K.ErrorEvent){let e=t;return new K.ErrorEvent(e.error??new Error(e.message),void 0)}return new t.constructor(t.type,t)}function cs(t,e){let r=t;return r.error instanceof Error?new K.ErrorEvent(r.error,e):new K.ErrorEvent(new Error(r.message||"WebSocket error"),e)}var Ge={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},ss=!1,Qt=class t extends re{constructor(r,n,i={}){os||(Ol(),os=!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=Ge.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),n),as(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(jr(r))});c(this,"_handleMessage",r=>{this._debug("message event"),this.onmessage&&this.onmessage(r),this.dispatchEvent(jr(r))});c(this,"_handleError",r=>{let n=cs(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(jr(n)),this._connect()});c(this,"_handleClose",r=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(r),this.dispatchEvent(jr(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=Ge.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=Ge.reconnectionDelayGrowFactor,minReconnectionDelay:n=Ge.minReconnectionDelay,maxReconnectionDelay:i=Ge.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=Ge.maxRetries,connectionTimeout:n=Ge.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"&&!ss&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),ss=!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 K.ErrorEvent(Error(i.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new K.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(r=1e3,n){if(this._clearTimeouts(),!this._ws)return;let i=this._ws;this._removeListeners(),i.addEventListener("error",Il);try{i.close(r,n),this._handleClose(new K.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 kl=[WebSocket.CLOSING,WebSocket.CLOSED],ct=class extends re{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)}},mi=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 ct(e),this.refCount=1,this.subscriptionProps=r?{...r}:void 0}nextGeneration(){return++this.generation}},Jt=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 Kt))throw new f(T("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(r).toString()}catch{throw new f(T("Not a valid URL"))}let o=n?.ReconnectingWebSocket?new n.ReconnectingWebSocket(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger}):new Qt(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger});this.medplum=e,this.ws=o,this.masterSubEmitter=new ct,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.type==="heartbeat"){this.masterSubEmitter?.dispatchEvent({type:"heartbeat",payload:i});return}if(o.type==="handshake"){let a=we(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(we(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 f({resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"WebSocket connection closed due to an error"},diagnostics:r.error?Ee(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(he(r,i.subscriptionProps))return i}}getAllCriteriaEmitters(){let e=[];for(let r of this.criteriaEntries.values())for(let n of zt(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!he(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 zt(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 ${O(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 f(T("Failed to get token"));if(!o)throw new f(T("Failed to get URL from $get-ws-binding-token"));if(!s)throw new f(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(Ee(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 zt(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 mi(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 zt(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 zt(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 ct(...Array.from(this.criteriaEntries.keys()))),this.masterSubEmitter}async reconnectIfNeeded(){kl.includes(this.getWebSocket().readyState)&&await new Promise(e=>{let r=()=>{this.getWebSocket().removeEventListener("open",r),e()};this.getWebSocket().addEventListener("open",r),this.reconnectWebSocket()})}};function zt(t){return t.bareCriteria?[t.bareCriteria,...t.criteriaWithProps]:t.criteriaWithProps}var Vl=new Y(1e3);async function Dl({resource:t,subscription:e,context:r,getPreviousResource:n,logger:i}){if(!Ml(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=it(o);if(t.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${t.resourceType}")`),!1;if(!await us(e,t,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let u=me(e,"https://medplum.com/fhir/StructureDefinition/subscription-supported-interaction");if(u&&u.valueCode!==r.interaction)return i?.debug(`Ignore rest hook for different interaction (wanted "${u.valueCode}", received "${r.interaction}")`),!1;if(!Wt(t,s))return!1;let l=Ar(e.meta)??[],p=Ar(t.meta)??[];return l.length&&!l.some(g=>p.some(v=>v.reference===g.reference))?(i?.debug("Subscription suppressed due to mismatched accounts",{subscriptionId:e.id,resource:O(t)}),!1):!0}function Ml(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 us(t,e,r){let n=me(t,"https://medplum.com/fhir/StructureDefinition/fhir-path-criteria-expression");if(!n?.valueString)return!0;let i=await r(e),o={"%current":b(e),"%previous":b(i??{})};return A(n.valueString,[b(e)],o,Vl)?.[0]?.value===!0}var Hr="5.1.21-f421bec",_l="medplum-cli",fs=k.FHIR_JSON+", */*; q=0.1",Ll="https://api.medplum.com/",Nl=1e3,Fl=6e4,Ul=0,Bl=3e5,Wl="Binary/",ls={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},Qe={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"},ms={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"},ql={ClientSecretBasic:"client_secret_basic",ClientSecretPost:"client_secret_post",ClientSecretJwt:"client_secret_jwt",PrivateKeyJwt:"private_key_jwt",None:"none"},hs={JwtBearer:"urn:ietf:params:oauth:client-assertion-type:jwt-bearer"},$l={ES256:"ES256",ES384:"ES384",ES512:"ES512",HS256:"HS256",RS256:"RS256",RS384:"RS384",RS512:"RS512"},Kt=class extends re{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??jl(),this.storage=r?.storage??new at(void 0,r?.storagePrefix),this.createPdfImpl=r?.createPdf,this.baseUrl=Dr(r?.baseUrl??Ll),this.fhirBaseUrl=U(this.baseUrl,r?.fhirUrlPath??"fhir/R4"),this.authorizeUrl=U(this.baseUrl,r?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=U(this.baseUrl,r?.tokenUrl??"oauth2/token"),this.logoutUrl=U(this.baseUrl,r?.logoutUrl??"oauth2/logout"),this.fhircastHubUrl=U(this.baseUrl,r?.fhircastHubUrl??"fhircast/STU3"),this.cdsServicesUrl=U(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??Bl,this.logLevel=this.initializeLogLevel(r),this.maxRetries=r?.maxRetries??2,this.maxRetryTime=r?.maxRetryTime??2e3,this.cacheTime=r?.cacheTime??(J()?Fl:Ul),this.cacheTime>0?this.requestCache=new Y(r?.resourceCacheSize??Nl):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=U(this.fhirBaseUrl,r);for(let i of this.requestCache?.keys()??y)(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache?.delete(i)}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 W(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,k.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(ue.getSearch()).get("code");if(!i){await this.requestAuthorization(r);return}return this.processCode(i)}signOutWithRedirect(){ue.assign(this.logoutUrl)}async signInWithExternalAuth(r,n,i,o,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),ue.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:Qe.TokenExchange,subject_token_type:ms.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(U(this.fhirBaseUrl,r.join("/")))}fhirSearchUrl(r,n){let i=this.fhirUrl(r);return n&&(i.search=Gn(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 W(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 W(this.search(r,n,i).then(ps));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 ps(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 ls;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 W(Promise.reject(new Error("Missing reference")));if(i==="system")return new W(Promise.resolve(ls));let[o,s]=i.split("/");return!o||!s?new W(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(En(r))return Promise.resolve();let i=r+"-requestSchema",o=this.getCacheEntry(i,void 0);if(o)return o.value;let s=new W((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 Tu(t){return!!(t&&(t.id==="String"||t.id==="Symbol"&&xu.includes(t.value)))}var Ft=["true","false"],Ut=["!=","!~","<=",">=","{}","->"];function Uo(t){return new Se(t,Ft,Ut).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},Su={parse(t){let e=t.consumeAndParse();if(!t.match(")"))throw new Error("Parse error: expected `)` got `"+t.peek()?.value+"`");return e}},bu={parse(t,e){let r=t.consumeAndParse();if(!t.match("]"))throw new Error("Parse error: expected `]`");return new ke(e,r)},precedence:S.Indexer},Eu={parse(t,e){if(!(e instanceof B))throw new Error("Unexpected parentheses");let r=[];for(;!t.match(")");)r.push(t.consumeAndParse()),t.match(",");return new ee(e.name,r)},precedence:S.FunctionCall};function Ru(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 nt(){return new dt().registerPrefix("String",{parse:(t,e)=>new j({type:d.string,value:e.value})}).registerPrefix("DateTime",{parse:(t,e)=>new j({type:d.dateTime,value:rt(e.value)})}).registerPrefix("Quantity",{parse:(t,e)=>new j({type:d.Quantity,value:Ru(e.value)})}).registerPrefix("Number",{parse:(t,e)=>new j({type:e.value.includes(".")?d.decimal:d.integer,value:Number.parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new j({type:d.boolean,value:!0})}).registerPrefix("false",{parse:()=>new j({type:d.boolean,value:!1})}).registerPrefix("Symbol",{parse:(t,e)=>new B(e.value)}).registerPrefix("{}",{parse:()=>new Ct}).registerPrefix("(",Su).registerInfix("[",bu).registerInfix("(",Eu).prefix("+",S.UnaryAdd,(t,e)=>new Pt("+",e,r=>r)).prefix("-",S.UnarySubtract,(t,e)=>new F("-",e,e,(r,n)=>-n)).infixLeft(".",S.Dot,(t,e,r)=>new Z(t,r)).infixLeft("/",S.Divide,(t,e,r)=>new F("/",t,r,(n,i)=>n/i)).infixLeft("*",S.Multiply,(t,e,r)=>new F("*",t,r,(n,i)=>n*i)).infixLeft("+",S.Add,(t,e,r)=>new F("+",t,r,(n,i)=>n+i)).infixLeft("-",S.Subtract,(t,e,r)=>new F("-",t,r,(n,i)=>n-i)).infixLeft("|",S.Union,(t,e,r)=>new Oe(t,r)).infixLeft("=",S.Equals,(t,e,r)=>new It(t,r)).infixLeft("!=",S.NotEquals,(t,e,r)=>new kt(t,r)).infixLeft("~",S.Equivalent,(t,e,r)=>new Vt(t,r)).infixLeft("!~",S.NotEquivalent,(t,e,r)=>new Dt(t,r)).infixLeft("<",S.LessThan,(t,e,r)=>new F("<",t,r,(n,i)=>n<i)).infixLeft("<=",S.LessThanOrEquals,(t,e,r)=>new F("<=",t,r,(n,i)=>n<=i)).infixLeft(">",S.GreaterThan,(t,e,r)=>new F(">",t,r,(n,i)=>n>i)).infixLeft(">=",S.GreaterThanOrEquals,(t,e,r)=>new F(">=",t,r,(n,i)=>n>=i)).infixLeft("&",S.Ampersand,(t,e,r)=>new wt(t,r)).infixLeft("and",S.And,(t,e,r)=>new Mt(t,r)).infixLeft("as",S.As,(t,e,r)=>new Te(t,r)).infixLeft("contains",S.Contains,(t,e,r)=>new At(t,r)).infixLeft("div",S.Divide,(t,e,r)=>new F("div",t,r,(n,i)=>Math.trunc(n/i))).infixLeft("in",S.In,(t,e,r)=>new Ot(t,r)).infixLeft("is",S.Is,(t,e,r)=>new Ie(t,r)).infixLeft("mod",S.Modulo,(t,e,r)=>new F("mod",t,r,(n,i)=>n%i)).infixLeft("or",S.Or,(t,e,r)=>new _t(t,r)).infixLeft("xor",S.Xor,(t,e,r)=>new Lt(t,r)).infixLeft("implies",S.Implies,(t,e,r)=>new Nt(t,r))}var Cu=nt();function Bt(t){return new ve(t,Cu.construct(Uo(t)).consumeAndParse())}function Pu(t,e){let r=Array.isArray(e)?e:[e];for(let n=0;n<r.length;n++){let i=r[n];typeof i=="object"&&"type"in i&&"value"in i||(r[n]=b(r[n]))}return A(t,r).map(n=>n.value)}function A(t,e,r={},n=void 0){let i;if(typeof t=="string"){let o=n?.get(t);i=o??Bt(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 wu(t){let e=[];for(let r of t)r.type===d.Range?e.push([r.value?.low?.value,r.value?.high?.value]):typeof r.value=="number"&&e.push([r.value,r.value]);return e}function Xn(t){let e=[];for(let r of t){let n=vt(r.value);n&&e.push(n)}return e}function Zn(t){let e=new Set;for(let r of t){let n=Qn(r);n&&e.add(n)}return Array.from(e)}function ei(t){let e=new Set;for(let r of t){let{value:n}=r;n&&(We(n)?e.add(n):Q(n)?e.add(n.reference):et(n)?e.add(O(n)):typeof n.identifier=="object"&&e.add(`identifier:${n.identifier.system}|${n.identifier.value}`))}return Array.from(e)}function Au(t){let e=[];for(let r of t){let{value:n}=r;typeof n=="number"?e.push({value:n}):V(n)&&e.push(n)}return e}function Ou(t){let e=new Set;for(let r of t)We(r.value)&&e.add(r.value);return Array.from(e)}function ti(t,e={}){let r=[];for(let n of t)Iu(e,r,n);return r}function Iu(t,e,r){let{type:n,value:i}=r;switch(n){case d.Identifier:ku(e,t,i);break;case d.CodeableConcept:Vu(e,t,i);break;case d.Coding:Bo(e,t,i);break;case d.ContactPoint:Du(e,t,i);break;default:He(e,t,void 0,i?.toString())}}function ku(t,e,r){r?.type?.text&&He(t,e,e.textSearchSystem,r.type.text),He(t,e,r?.system,r?.value)}function Vu(t,e,r){r?.text&&He(t,e,e.textSearchSystem,r.text);for(let n of r?.coding??y)Bo(t,e,n)}function Bo(t,e,r){r&&(r.display&&He(t,e,e.textSearchSystem,r.display),He(t,e,r.system,r.code))}function Du(t,e,r){r&&He(t,e,r.system,r.value?.toLocaleLowerCase())}function He(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 Mu=20,_u=1e3,m={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:m.CONTAINS,exact:m.EXACT,above:m.ABOVE,below:m.BELOW,text:m.TEXT,not:m.NOT,in:m.IN,"not-in":m.NOT_IN,"of-type":m.OF_TYPE,missing:m.MISSING,identifier:m.IDENTIFIER,iterate:m.ITERATE},ni={eq:m.EQUALS,ne:m.NOT_EQUALS,lt:m.LESS_THAN,le:m.LESS_THAN_OR_EQUALS,gt:m.GREATER_THAN,ge:m.GREATER_THAN_OR_EQUALS,sa:m.STARTS_AFTER,eb:m.ENDS_BEFORE,ap:m.APPROXIMATELY,sw:m.STARTS_WITH};function it(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&&o.push(...n.entries()),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 Lu(i,o)}function Lu(t,e){let r={resourceType:t};for(let[n,i]of e)Nu(r,n,i);return r}function Nu(t,e,r){let n,i,o=e.indexOf(":");if(o>=0?(n=e.substring(0,o),i=e.substring(o+1)):(n=e,i=""),n!=="_"){if(n==="_has"||e.includes(".")){t.filters=X(t.filters,{code:e,operator:m.EQUALS,value:r});return}switch(n){case"_sort":Fu(t,r);break;case"_cursor":t.cursor=r;break;case"_count":t.count=Number.parseInt(r,10);break;case"_offset":t.offset=Number.parseInt(r,10);break;case"_total":t.total=r;break;case"_summary":r==="count"?(t.total="accurate",t.count=0):(r==="true"||r==="data"||r==="text")&&(t.summary=r);break;case"_include":{let s=Wo(r);i==="iterate"&&(s.modifier=m.ITERATE),t.include=X(t.include,s);break}case"_revinclude":{let s=Wo(r);i==="iterate"&&(s.modifier=m.ITERATE),t.revInclude=X(t.revInclude,s);break}case"_fields":case"_elements":t.fields=r.split(",");break;case"_type":t.types=r.split(",");break;case"_format":t.format=r;break;case"_pretty":t.pretty=r==="true";break;default:{let s=$.types[t.resourceType]?.searchParams?.[n];s?t.filters=X(t.filters,jo(s,m.EQUALS,i,r)):t.filters=X(t.filters,Bu(n,i,r))}}}}function Fu(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 Uu=[m.MISSING,m.PRESENT];function jo(t,e,r,n){if(Uu.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}=Wu(n,r||m.EQUALS);if(!qo(t,o))throw new f(P(`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(!qo(t,n))throw new f(P(`Invalid format for ${t.type} search parameter: ${n}`));return{code:t.code,operator:qu(r)??e,value:n}}default:throw new Error("Unrecognized search parameter type: "+t.type)}}function Bu(t,e,r){let n=m.EQUALS;if(e)n=e;else if(r.length>=2){let i=r.substring(0,2);i in ni&&(r.length===2||r.at(2)?.match(/\d/))&&(n=i,r=r.substring(i.length))}return{code:t,operator:n,value:r}}function Wu(t,e){let r=t.substring(0,2),n=ni[r];return n?{operator:n,value:t.substring(2)}:{operator:e,value:t}}function qu(t){return ri[t]}function Wo(t){let e=t.split(":");if(e.includes("*"))throw new f(P("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new f(P(`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 f(P(`Invalid include value '${t}'`))}function qo(t,e){return t.type==="date"?Fe(e):!0}var $u=/{{([^{}]+)}}/g;function ju(t,e,r=[]){return t=t.replaceAll($u,(n,i)=>{let o=A(i,r,e);return o.length!==1?"":Yn(o[0])}),it(t)}function Hu(t){let e=[];t.fields&&e.push("_fields="+t.fields.join(","));for(let r of t.filters??y)e.push(Gu(r));t.sortRules&&t.sortRules.length>0&&e.push(Qu(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??y)e.push($o("_include",r));for(let r of t.revInclude??y)e.push($o("_revinclude",r));return e.length===0?"":(Et(e),"?"+e.join("&"))}function Gu(t){let e=t.operator in ri?":"+t.operator:"",r=t.operator!==m.EQUALS&&t.operator in ni?t.operator:"";return`${t.code}${e}=${r}${encodeURIComponent(t.value)}`}function Qu(t){return"_sort="+t.map(e=>e.descending?"-"+e.code:e.code).join(",")}function $o(t,e){return t+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function ot(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 zu(t,e){return P(`Invalid modifier :${t} for ${e}`)}function Ju(t,e){return t in ri?zu(t,e):P(`Invalid operator ${t} for ${e}`)}function Wt(t,e){if(e.resourceType!==t.resourceType)return!1;for(let r of e.filters??y)if(!Yu(t,e,r))return!1;return!0}var Ku=new Y(1e3);function Yu(t,e,r){let n=$.types[e.resourceType]?.searchParams?.[r.code];if(!n)return!1;let i=A(n.expression,[b(t)],void 0,Ku);if(r.operator===m.MISSING||r.operator===m.PRESENT)return Xu(i,r);switch(n.type){case"reference":return Zu(n,i,r);case"string":case"uri":return rl(i,r);case"token":return el(i,r);case"date":return il(i,r);default:return!1}}function Xu(t,e){let r=t.length>0;return(e.operator===m.MISSING&&e.value==="false"||e.operator===m.PRESENT&&e.value==="true")===r}function Zu(t,e,r){let n=_r(r.operator);if(r.value===""&&e.length===0)return r.operator===m.EQUALS;let i=ei(e);for(let o of ot(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 el(t,e){let r=ti(t),n=ot(e.value),i=_r(e.operator);for(let o of r)for(let s of n)if(tl(o,s))return!i;return i}function tl(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 rl(t,e){let r=Zn(t),n=ot(e.value),i=_r(e.operator);for(let o of r)for(let s of n)if(nl(o,s))return!i;return i}function nl(t,e){return t.toLowerCase().includes(e.toLowerCase())}function il(t,e){let r=Xn(t),n=ot(e.value),i=_r(e.operator);for(let o of r)for(let s of n)if(ol(o,e.operator,s))return!i;return i}function ol(t,e,r){if(!t)return!1;let n=vt(r);if(!n)return!1;let i=t.start??"0000",o=t.end??"9999",s=n.start,a=n.end;switch(e){case m.APPROXIMATELY:case m.EQUALS:case m.NOT_EQUALS:return i<a&&o>s;case m.LESS_THAN:return i<s;case m.GREATER_THAN:return o>a;case m.LESS_THAN_OR_EQUALS:return i<=a;case m.GREATER_THAN_OR_EQUALS:return o>=s;case m.STARTS_AFTER:return i>a;case m.ENDS_BEFORE:return o<s;default:return!1}}function _r(t){return t===m.NOT_EQUALS||t===m.NOT}var sl={resourceType:"*"},Ho=["DomainConfiguration","JsonWebKey","Login"],Go=["Package","PackageRelease","PackageInstallation","Project","ProjectMembership","User","UserSecurityRequest"],Ve={READ:"read",VREAD:"vread",UPDATE:"update",DELETE:"delete",HISTORY:"history",CREATE:"create",SEARCH:"search"},Qo=[Ve.READ,Ve.VREAD,Ve.HISTORY,Ve.SEARCH];function al(t,e){return ii(t,Ve.SEARCH,e)}function cl(t,e){return Ho.includes(e)?!1:ii(t,Ve.UPDATE,e)}function ii(t,e,r){return!!t.resource?.some(n=>Jo(n,r,e))}function ul(t,e){return!!zo(e,Ve.UPDATE,t)}function zo(t,e,r){return r?r.resource?.find(n=>ll(t,e,n)):sl}function ll(t,e,r){let n=t.resourceType;return Jo(r,n,e)?n==="Binary"?!0:!(r.compartment&&!t.meta?.compartment?.some(i=>i.reference===r.compartment?.reference)||r.criteria&&!Wt(t,it(r.criteria))):!1}function Jo(t,e,r){return t.resourceType!==e&&(t.resourceType!=="*"||Go.includes(e))?!1:t.interaction?t.interaction.includes(r):!t.readonly||Qo.includes(r)}var dl={FIRST:"first",APPLICATION:"application"};function J(){return typeof window<"u"}function pl(){return typeof Buffer<"u"}function fl(){return typeof window<"u"?window:void 0}function Lr(){return typeof Buffer<"u"?Buffer:void 0}var ue={assign(t){J()&&globalThis.location.assign(t)},reload(){J()&&globalThis.location.reload()},getSearch(){return J()?globalThis.location.search:""},getPathname(){return J()?globalThis.location.pathname:""},getLocation(){return J()?globalThis.location.toString():""},getOrigin(){return J()?globalThis.location.protocol+"//"+globalThis.location.host+"/":""}};function Ko(t){if(J()){let r=window.atob(t),n=Uint8Array.from(r,i=>i.codePointAt(0));return new window.TextDecoder().decode(n)}let e=Lr();if(e)return e.from(t,"base64").toString("utf-8");throw new Error("Unable to decode base64")}function qt(t){if(J()){let r=new window.TextEncoder().encode(t),n=String.fromCodePoint.apply(null,r);return window.btoa(n)}let e=Lr();if(e)return e.from(t,"utf8").toString("base64");throw new Error("Unable to encode base64")}function ml(t){return qt(t).replaceAll("+","-").replaceAll("/","_").replace(/[=]{1,2}$/,"")}function oi(t){t=t.padEnd(t.length+(4-t.length%4)%4,"=");let e=t.replaceAll("-","+").replaceAll("_","/");return Ko(e)}function Nr(){let t=new Uint32Array(28);return crypto.getRandomValues(t),Bn(t.buffer)}async function si(t){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(t))}function te(){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 Yo(t){let e={};t=Ae(t);for(let i of t.entry??y){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]=te(),i.fullUrl="urn:uuid:"+e[s],delete i.resource?.id;else if(i.fullUrl?.startsWith("resource:")){let a=i.fullUrl.slice(9);e[a]=te(),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)=>hl(i,o,e),2);return Xo(JSON.parse(n))}function hl(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 Xo(t){let e=yl(t),{sorted:r,cycles:n}=gl(e),i={},o=[];for(let a of t.entry??y)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],p={...l,request:{...l.request,method:"PUT"}};s.push(p)}return s.push(...o),{...t,entry:s}}var st={NotVisited:"NotVisited",Visiting:"Visiting",Visited:"Visited"};function gl(t){let e=[],r={},n=[];for(let o of Object.keys(t))r[o]=st.NotVisited;function i(o,s){if(r[o]===st.Visited)return!0;if(r[o]===st.Visiting){let u=s.lastIndexOf(o);return u!==-1&&n.push(s.slice(u)),!0}r[o]=st.Visiting,s.push(o);let a=!1;for(let u of t[o]??y)i(u,s)||(a=!0);return r[o]=st.Visited,s.pop(),e.unshift(o),!a}for(let o in t)r[o]===st.NotVisited&&i(o,[]);return{sorted:e,cycles:n}}function Zo(t,e){for(let r in t)if(t[r]&&typeof t[r]=="object"){let n=t[r];if(Q(n)){let i=n.reference;(i.startsWith("urn:uuid:")||i.startsWith("resource:"))&&e(i)}else Zo(n,e)}}function yl(t){let e={};for(let r of t.entry??y)r.fullUrl&&(e[r.fullUrl]=[]);for(let r of t.entry??y){let n=r.fullUrl;n&&r.resource&&Zo(r.resource,i=>{i!==n&&e[i]&&e[i].push(n)})}return e}function xl(t){t=Ae(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=te());return Yo(e)}function vl(t,e,r){return t.entry?.find(({resource:n})=>n?.resourceType===e&&n?.id===r)?.resource}async function Tl(t,e,r,n){return{hook:r.hook,hookInstance:te(),context:n,prefetch:await Sl(t,e,r,n)}}async function Sl(t,e,r,n){if(!r.prefetch)return{};let i={};for(let[o,s]of Object.entries(r.prefetch)){let a=await bl(t,e,n,s);i[o]=a??null}return i}function bl(t,e,r,n){if(n=es(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]=qe(n,"?",2);return t.search(o,s)}var El=new Set(["userPractitionerId","userPractitionerRoleId","userPatientId","userRelatedPersonId"]);function es(t,e,r){return r.replaceAll(/\{\{([^}]+)\}\}/g,(n,i)=>{if(i=i.trim(),El.has(i))return t.id;if(i.startsWith("context.")){let o=i.substring(8),s=Rl(e,o);if(We(s))return s;if(typeof s=="number"||typeof s=="boolean")return String(s)}return n})}function Rl(t,e){let r=e.split("."),n=t;for(let i of r)if(n&&R(n)&&i in n)n=n[i];else return;return n}var k={CSS:"text/css",DICOM:"application/dicom",FAVICON:"image/vnd.microsoft.icon",FHIR_JSON:"application/fhir+json",FORM_URL_ENCODED:"application/x-www-form-urlencoded",HL7_V2:"x-application/hl7-v2+er7",HTML:"text/html",JAVASCRIPT:"text/javascript",JSON:"application/json",JSON_PATCH:"application/json-patch+json",JWT:"application/jwt",MULTIPART_FORM_DATA:"multipart/form-data",PNG:"image/png",SCIM_JSON:"application/scim+json",SVG:"image/svg+xml",TEXT:"text/plain",TYPESCRIPT:"text/typescript",PING:"x-application/ping",XML:"text/xml",CDA_XML:"application/cda+xml",OCTET_STREAM:"application/octet-stream"};var Fr=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??y)n.call(this,e);return!e.defaultPrevented}removeAllListeners(){this.listeners={}}listenerCount(e){return this.listeners[e]?.length??0}},re=class{constructor(){c(this,"emitter",new Fr)}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 Ur={"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"},ts=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],Br=["DiagnosticReport-update"];function ai(t){return Br.includes(t)}function ci(t){if(Br.includes(t))throw new f(T(`'context.version' is required for '${t}'.`))}var rs={"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 ns(t){return ts.includes(t)}function ui(t){return!!t.endpoint}function Wr(t){if(!jt(t))throw new f(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,"hub.events":i.join(",")};return ui(t)&&(o.endpoint=t.endpoint),new URLSearchParams(o).toString()}function jt(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(!Ur[o])return!1;return!(ui(t)&&!(typeof t.endpoint=="string"&&t.endpoint.startsWith("ws")))}function Cl(t,e,r,n){if(typeof e!="object")throw new f(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 f(T(`context[${r}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new f(T(`context[${r}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!ns(e.resourceType))throw new f(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 f(T(`context[${r}] is invalid. context[${r}] for the '${t}' event should contain resource of type ${i}.`))}}function Pl(t,e,r,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),n.reference){if(!Q(e.reference))throw new f(T(`context[${r}] is invalid. Expected key '${e.key}' to be a reference.`))}else Cl(t,e.resource,r,n)}function wl(t,e){let r=new Map,n=rs[t];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new f(T(`Key '${o}' not found for event '${t}'. Make sure to add only valid keys.`));Pl(t,e[i],i,n[o],r)}for(let[i,o]of Object.entries(n)){if(!(o.optional||r.has(i)))throw new f(T(`Missing required key '${i}' on context for '${t}' event.`));if(!o.manyAllowed&&(r.get(i)??0)>1)throw new f(T(`${r.get(i)} context entries with key '${i}' found for the '${t}' event when schema only allows for 1.`))}}function qr(t,e,r,n){if(!(t&&typeof t=="string"))throw new f(T("Must provide a topic."));if(!Ur[e])throw new f(T(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(Ur).join(", ")}`));if(typeof r!="object")throw new f(T("context must be a context object or array of context objects."));if(Br.includes(e)&&!n)throw new f(T(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(r)?r:[r];return wl(e,i),{timestamp:new Date().toISOString(),id:te(),event:{"hub.topic":t,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var $t=class extends re{constructor(r){super();c(this,"subRequest");c(this,"websocket");if(this.subRequest=r,!r.endpoint)throw new f(T("Subscription request should contain an endpoint."));if(!jt(r))throw new f(T("Subscription request failed validation."));let n=new WebSocket(r.endpoint);n.addEventListener("open",()=>{this.dispatchEvent({type:"connect"}),n.addEventListener("message",i=>{let o=JSON.parse(i.data);if(o["hub.topic"])return;let s=o;s.event["hub.event"]!=="heartbeat"&&(this.dispatchEvent({type:"message",payload:s}),n.send(JSON.stringify({id:o?.id,timestamp:new Date().toISOString()})))}),n.addEventListener("close",()=>{this.dispatchEvent({type:"disconnect"})})}),this.websocket=n}disconnect(){this.websocket.close()}};function Al(t){return JSON.parse(oi(t))}function li(t){return t.split(".").length===3}function Ht(t){let[e,r,n]=t.split(".");return Al(r)}function di(t){try{return typeof Ht(t).login_id=="string"}catch{return!1}}function pi(t){try{let r=Ht(t).exp;return typeof r=="number"?r*1e3:void 0}catch{return}}var Gt=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,k.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var is;is=Symbol.toStringTag;var W=class{constructor(e){c(this,is,"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 at=class{constructor(e,r=""){c(this,"storage");c(this,"prefix","");this.storage=e??globalThis.localStorage??new $r,this.prefix=r}makeKey(e){return this.prefix+e}clear(){this.storage===globalThis.localStorage&&this.prefix?Object.keys(this.storage).filter(e=>e.startsWith(this.prefix)).forEach(e=>{this.storage.removeItem(e)}):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?bt(r):void 0)}},$r=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]}},fi=class extends at{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 K={Event:typeof globalThis.Event<"u"?globalThis.Event:void 0,ErrorEvent:void 0,CloseEvent:void 0},os=!1;function Ol(){if(typeof globalThis.Event>"u")throw new Error("Unable to lazy init events for ReconnectingWebSocket. globalThis.Event is not defined yet");K.Event=globalThis.Event,K.ErrorEvent=class extends Event{constructor(r,n){super("error",n);c(this,"message");c(this,"error");this.message=r.message,this.error=r}},K.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 as(t,e){if(!t)throw new Error(e)}function Il(){}function jr(t){if(t instanceof K.CloseEvent){let e=t;return new K.CloseEvent(e.code,e.reason,void 0)}if(t instanceof K.ErrorEvent){let e=t;return new K.ErrorEvent(e.error??new Error(e.message),void 0)}return new t.constructor(t.type,t)}function cs(t,e){let r=t;return r.error instanceof Error?new K.ErrorEvent(r.error,e):new K.ErrorEvent(new Error(r.message||"WebSocket error"),e)}var Ge={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},ss=!1,Qt=class t extends re{constructor(r,n,i={}){os||(Ol(),os=!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=Ge.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),n),as(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(jr(r))});c(this,"_handleMessage",r=>{this._debug("message event"),this.onmessage&&this.onmessage(r),this.dispatchEvent(jr(r))});c(this,"_handleError",r=>{let n=cs(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(jr(n)),this._connect()});c(this,"_handleClose",r=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(r),this.dispatchEvent(jr(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=Ge.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=Ge.reconnectionDelayGrowFactor,minReconnectionDelay:n=Ge.minReconnectionDelay,maxReconnectionDelay:i=Ge.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=Ge.maxRetries,connectionTimeout:n=Ge.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"&&!ss&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),ss=!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 K.ErrorEvent(Error(i.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new K.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(r=1e3,n){if(this._clearTimeouts(),!this._ws)return;let i=this._ws;this._removeListeners(),i.addEventListener("error",Il);try{i.close(r,n),this._handleClose(new K.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 kl=[WebSocket.CLOSING,WebSocket.CLOSED],ct=class extends re{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)}},mi=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 ct(e),this.refCount=1,this.subscriptionProps=r?{...r}:void 0}nextGeneration(){return++this.generation}},Jt=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 Kt))throw new f(T("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(r).toString()}catch{throw new f(T("Not a valid URL"))}let o=n?.ReconnectingWebSocket?new n.ReconnectingWebSocket(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger}):new Qt(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger});this.medplum=e,this.ws=o,this.masterSubEmitter=new ct,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.type==="heartbeat"){this.masterSubEmitter?.dispatchEvent({type:"heartbeat",payload:i});return}if(o.type==="handshake"){let a=we(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(we(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 f({resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"WebSocket connection closed due to an error"},diagnostics:r.error?Ee(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(he(r,i.subscriptionProps))return i}}getAllCriteriaEmitters(){let e=[];for(let r of this.criteriaEntries.values())for(let n of zt(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!he(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 zt(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 ${O(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 f(T("Failed to get token"));if(!o)throw new f(T("Failed to get URL from $get-ws-binding-token"));if(!s)throw new f(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(Ee(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 zt(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 mi(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 zt(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 zt(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 ct(...Array.from(this.criteriaEntries.keys()))),this.masterSubEmitter}async reconnectIfNeeded(){kl.includes(this.getWebSocket().readyState)&&await new Promise(e=>{let r=()=>{this.getWebSocket().removeEventListener("open",r),e()};this.getWebSocket().addEventListener("open",r),this.reconnectWebSocket()})}};function zt(t){return t.bareCriteria?[t.bareCriteria,...t.criteriaWithProps]:t.criteriaWithProps}var Vl=new Y(1e3);async function Dl({resource:t,subscription:e,context:r,getPreviousResource:n,logger:i}){if(!Ml(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=it(o);if(t.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${t.resourceType}")`),!1;if(!await us(e,t,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let u=me(e,"https://medplum.com/fhir/StructureDefinition/subscription-supported-interaction");if(u&&u.valueCode!==r.interaction)return i?.debug(`Ignore rest hook for different interaction (wanted "${u.valueCode}", received "${r.interaction}")`),!1;if(!Wt(t,s))return!1;let l=Ar(e.meta)??[],p=Ar(t.meta)??[];return l.length&&!l.some(g=>p.some(v=>v.reference===g.reference))?(i?.debug("Subscription suppressed due to mismatched accounts",{subscriptionId:e.id,resource:O(t)}),!1):!0}function Ml(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 us(t,e,r){let n=me(t,"https://medplum.com/fhir/StructureDefinition/fhir-path-criteria-expression");if(!n?.valueString)return!0;let i=await r(e),o={"%current":b(e),"%previous":b(i??{})};return A(n.valueString,[b(e)],o,Vl)?.[0]?.value===!0}var Hr="5.1.22-f378ee6",_l="medplum-cli",fs=k.FHIR_JSON+", */*; q=0.1",Ll="https://api.medplum.com/",Nl=1e3,Fl=6e4,Ul=0,Bl=3e5,Wl="Binary/",ls={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},Qe={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"},ms={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"},ql={ClientSecretBasic:"client_secret_basic",ClientSecretPost:"client_secret_post",ClientSecretJwt:"client_secret_jwt",PrivateKeyJwt:"private_key_jwt",None:"none"},hs={JwtBearer:"urn:ietf:params:oauth:client-assertion-type:jwt-bearer"},$l={ES256:"ES256",ES384:"ES384",ES512:"ES512",HS256:"HS256",RS256:"RS256",RS384:"RS384",RS512:"RS512"},Kt=class extends re{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??jl(),this.storage=r?.storage??new at(void 0,r?.storagePrefix),this.createPdfImpl=r?.createPdf,this.baseUrl=Dr(r?.baseUrl??Ll),this.fhirBaseUrl=U(this.baseUrl,r?.fhirUrlPath??"fhir/R4"),this.authorizeUrl=U(this.baseUrl,r?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=U(this.baseUrl,r?.tokenUrl??"oauth2/token"),this.logoutUrl=U(this.baseUrl,r?.logoutUrl??"oauth2/logout"),this.fhircastHubUrl=U(this.baseUrl,r?.fhircastHubUrl??"fhircast/STU3"),this.cdsServicesUrl=U(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??Bl,this.logLevel=this.initializeLogLevel(r),this.maxRetries=r?.maxRetries??2,this.maxRetryTime=r?.maxRetryTime??2e3,this.cacheTime=r?.cacheTime??(J()?Fl:Ul),this.cacheTime>0?this.requestCache=new Y(r?.resourceCacheSize??Nl):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=U(this.fhirBaseUrl,r);for(let i of this.requestCache?.keys()??y)(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache?.delete(i)}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 W(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,k.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(ue.getSearch()).get("code");if(!i){await this.requestAuthorization(r);return}return this.processCode(i)}signOutWithRedirect(){ue.assign(this.logoutUrl)}async signInWithExternalAuth(r,n,i,o,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),ue.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:Qe.TokenExchange,subject_token_type:ms.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(U(this.fhirBaseUrl,r.join("/")))}fhirSearchUrl(r,n){let i=this.fhirUrl(r);return n&&(i.search=Gn(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 W(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 W(this.search(r,n,i).then(ps));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 ps(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 ls;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 W(Promise.reject(new Error("Missing reference")));if(i==="system")return new W(Promise.resolve(ls));let[o,s]=i.split("/");return!o||!s?new W(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(En(r))return Promise.resolve();let i=r+"-requestSchema",o=this.getCacheEntry(i,void 0);if(o)return o.value;let s=new W((async()=>{let a=`{
5
5
  StructureDefinitionList(_filter: "name eq ${r}") {
6
6
  resourceType,
7
7
  name,