@medplum/core 5.1.13 → 5.1.14

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
- "use strict";var Zt=Object.defineProperty;var ws=Object.getOwnPropertyDescriptor;var Os=Object.getOwnPropertyNames;var Is=Object.prototype.hasOwnProperty;var ks=(r,e,t)=>e in r?Zt(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var Vs=(r,e)=>{for(var t in e)Zt(r,t,{get:e[t],enumerable:!0})},Ds=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Os(e))!Is.call(r,i)&&i!==t&&Zt(r,i,{get:()=>e[i],enumerable:!(n=ws(e,i))||n.enumerable});return r};var Ms=r=>Ds(Zt({},"__esModule",{value:!0}),r);var c=(r,e,t)=>ks(r,typeof e!="symbol"?e+"":e,t);var Hd={};Vs(Hd,{AccessPolicyInteraction:()=>Pe,AckCode:()=>fd,AndAtom:()=>Ot,ArithmeticOperatorAtom:()=>F,AsAtom:()=>ge,CPT:()=>Ns,ClientStorage:()=>tt,ConcatAtom:()=>bt,ContainsAtom:()=>Et,ContentType:()=>O,DEFAULT_ACCEPT:()=>es,DEFAULT_MAX_SEARCH_COUNT:()=>lu,DEFAULT_SEARCH_COUNT:()=>uu,DataSampler:()=>Nr,DotAtom:()=>K,EMPTY:()=>y,EmptySetAtom:()=>Tt,EqualsAtom:()=>Ct,EquivalentAtom:()=>At,EventTarget:()=>Ir,ExternalSecretSystems:()=>bl,FHIRCAST_EVENT_NAMES:()=>kr,FHIRCAST_EVENT_RESOURCES:()=>$o,FHIRCAST_EVENT_VERSION_REQUIRED:()=>Vr,FHIRCAST_RESOURCE_TYPES:()=>jo,FhirFilterComparison:()=>Jt,FhirFilterConnective:()=>Yt,FhirFilterNegation:()=>Kt,FhirPathAtom:()=>he,FhircastConnection:()=>Nt,FileBuilder:()=>gi,FunctionAtom:()=>Y,HTTP_HL7_ORG:()=>at,HTTP_TERMINOLOGY_HL7_ORG:()=>qs,Hl7Context:()=>xe,Hl7Field:()=>ae,Hl7Message:()=>xi,Hl7Segment:()=>it,ICD10:()=>Us,ImpliesAtom:()=>Vt,InAtom:()=>Rt,IndexerAtom:()=>Ce,InfixOperatorAtom:()=>E,IsAtom:()=>Re,LOINC:()=>_s,LRUCache:()=>z,LiteralAtom:()=>j,LogLevel:()=>qe,LogLevelNames:()=>bs,Logger:()=>vi,MEDPLUM_CLI_CLIENT_ID:()=>ul,MEDPLUM_RELEASES_URL:()=>Cs,MEDPLUM_VERSION:()=>Fr,MedplumClient:()=>Ht,MedplumKeyValueClient:()=>qt,MemoryStorage:()=>_r,MockAsyncClientStorage:()=>ii,NDC:()=>Bs,NOOP:()=>Rc,NotEqualsAtom:()=>Pt,NotEquivalentAtom:()=>wt,OAuthClientAssertionType:()=>rs,OAuthGrantType:()=>Ue,OAuthSigningAlgorithm:()=>yl,OAuthTokenAuthMethod:()=>gl,OAuthTokenType:()=>ts,OperationOutcomeError:()=>f,Operator:()=>m,OperatorPrecedence:()=>T,OrAtom:()=>It,PATIENT_PREFERRED_PHARMACY_URL:()=>Qr,PHARMACY_PREFERENCE_TYPE_SYSTEM:()=>bi,PHARMACY_TYPE_PREFERRED:()=>Ei,PHARMACY_TYPE_PRIMARY:()=>Gr,Parser:()=>er,ParserBuilder:()=>st,PrefixOperatorAtom:()=>ot,PropertyType:()=>d,RXNORM:()=>Fs,ReadablePromise:()=>B,ReconnectingWebSocket:()=>Wt,ReturnAckCategory:()=>Bu,SNOMED:()=>Ls,SearchParameterType:()=>ce,SubscriptionEmitter:()=>nt,SubscriptionManager:()=>$t,SymbolAtom:()=>U,Tokenizer:()=>ye,TransformMapCollection:()=>jr,TypedEventTarget:()=>X,UCUM:()=>Xr,UnaryOperatorAtom:()=>St,UnionAtom:()=>Ee,VALID_HOSTNAME_REGEX:()=>ho,XorAtom:()=>kt,accepted:()=>Xs,accessPolicySupportsInteraction:()=>Jn,addPreferredPharmacyToPatient:()=>Td,addProfileToResource:()=>xc,allOk:()=>Ws,append:()=>J,applyDefaultValuesToElement:()=>Dl,applyDefaultValuesToResource:()=>Vl,applyFixedOrPatternValue:()=>Qt,arrayBufferToBase64:()=>Mn,arrayBufferToHex:()=>Dn,arrayify:()=>ee,assert:()=>Jo,assertContextVersionOptional:()=>Zn,assertOk:()=>fa,assertReleaseManifest:()=>Ps,badRequest:()=>C,booleanToTypedValue:()=>h,buildCdsRequest:()=>Ju,buildElementsContext:()=>Br,buildTypeName:()=>Eo,businessRule:()=>ia,calculateAge:()=>gt,calculateAgeString:()=>Wa,canReadResourceType:()=>Lu,canWriteResource:()=>Nu,canWriteResourceType:()=>Fu,capitalize:()=>_,checkForNull:()=>Ri,checkIfValidMedplumVersion:()=>Wd,clearReleaseCache:()=>qd,codeableConceptMatchesToken:()=>nc,codingMatchesToken:()=>so,compressElement:()=>ha,concatUrls:()=>N,conceptMapTranslate:()=>pi,conflict:()=>Zs,contentTooLarge:()=>zs,convertContainedResourcesToBundle:()=>Qu,convertToSearchableDates:()=>jn,convertToSearchableNumbers:()=>ru,convertToSearchableQuantities:()=>nu,convertToSearchableReferences:()=>Hn,convertToSearchableStrings:()=>$n,convertToSearchableTokens:()=>Gn,convertToSearchableUris:()=>iu,convertToTransactionBundle:()=>Uo,crawlTypedValue:()=>pr,crawlTypedValueAsync:()=>Ea,createConstraintIssue:()=>un,createFhircastMessagePayload:()=>Mr,createOperationOutcomeIssue:()=>ve,createPreferredPharmacyExtension:()=>Es,createProcessingIssue:()=>ln,createReference:()=>Te,createStructureIssue:()=>b,created:()=>js,decodeBase64:()=>No,decodeBase64Url:()=>Kn,deepClone:()=>be,deepEquals:()=>de,deepIncludes:()=>He,deriveIdentifierSearchParameter:()=>Ad,encodeBase64:()=>Ft,encodeBase64Url:()=>ju,encryptSHA256:()=>Yn,ensureNoLeadingSlash:()=>mo,ensureTrailingSlash:()=>Rr,escapeHtml:()=>bc,evalFhirPath:()=>tu,evalFhirPathTyped:()=>A,evalSqlOnFhir:()=>Ld,expandSampledData:()=>ai,expandSampledObservation:()=>Pl,extractAccountReferences:()=>Sr,fetchLatestVersionString:()=>jd,fetchVersionManifest:()=>Yr,fhirPathArrayEquals:()=>Pn,fhirPathArrayEquivalent:()=>yr,fhirPathArrayNotEquals:()=>An,fhirPathEquals:()=>Ge,fhirPathEquivalent:()=>Zi,fhirPathIs:()=>ft,fhirPathNot:()=>Cn,fhirTypeToJsType:()=>mr,findCodeBySystem:()=>rc,findObservationInterval:()=>sc,findObservationReferenceRange:()=>ac,findObservationReferenceRanges:()=>uo,findResourceByCode:()=>hc,findResourceInBundle:()=>zu,flatMapFilter:()=>Sc,forbidden:()=>Hs,formatAddress:()=>yo,formatCodeableConcept:()=>Qe,formatCoding:()=>qn,formatDate:()=>Ac,formatDateTime:()=>Cr,formatFamilyName:()=>Pc,formatGivenName:()=>Cc,formatHl7DateTime:()=>Ss,formatHumanName:()=>Je,formatMoney:()=>Lc,formatObservationValue:()=>vo,formatPeriod:()=>Oc,formatQuantity:()=>fe,formatRange:()=>_c,formatReferenceString:()=>go,formatSearchQuery:()=>Tu,formatTime:()=>wc,formatTiming:()=>Dc,formatWallTime:()=>xo,generateId:()=>se,getAllDataTypes:()=>hn,getAllQuestionnaireAnswers:()=>$a,getBuffer:()=>wr,getCodeBySystem:()=>Tr,getDataType:()=>ue,getDateProperty:()=>qa,getDefaultValuesForNewSliceEntry:()=>Ml,getDisplayString:()=>ro,getElementDefinition:()=>ht,getElementDefinitionFromElements:()=>Co,getElementDefinitionTypeName:()=>ar,getExpressionForResourceType:()=>Md,getExpressionsForResourceType:()=>wi,getExtension:()=>le,getExtensionValue:()=>Ga,getIdentifier:()=>oo,getImageSrc:()=>Ba,getInnerDerivedIdentifierExpression:()=>Ci,getNestedProperty:()=>ke,getOutcomeRedirectUrl:()=>na,getParsedDerivedIdentifierExpression:()=>Pi,getParsedExpressionForResourceType:()=>Ai,getPathDifference:()=>pe,getPathDisplayName:()=>jc,getPreferredPharmaciesFromPatient:()=>vd,getPropertyDisplayName:()=>Ro,getQueryString:()=>Un,getQuestionnaireAnswers:()=>ja,getRandomString:()=>Or,getReferenceString:()=>w,getResourceTypes:()=>Bc,getSearchParameter:()=>Wc,getSearchParameterDetails:()=>wd,getSearchParameters:()=>qc,getStatus:()=>pa,getTypedPropertyValue:()=>M,getTypedPropertyValueWithPath:()=>fr,getTypedPropertyValueWithSchema:()=>Yi,getTypedPropertyValueWithoutSchema:()=>Xi,getValueSliceName:()=>ui,getWebSocketUrl:()=>Nn,getWindow:()=>Wu,globalSchema:()=>W,gone:()=>Gs,indexConceptMapCodings:()=>ss,indexDefaultSearchParameters:()=>vn,indexSearchParameter:()=>Pr,indexSearchParameterBundle:()=>Uc,indexStructureDefinitionBundle:()=>ur,inflateBaseSchema:()=>dn,inflateElement:()=>Bi,initFhirPathParserBuilder:()=>Ye,invalidSearchOperator:()=>Ru,isAccepted:()=>sa,isAddPharmacyResponse:()=>Ed,isBrowserEnvironment:()=>Q,isCodeableConcept:()=>vr,isCoding:()=>xr,isCompletedSubscriptionRequest:()=>ei,isComplexTypeCode:()=>br,isConflict:()=>ua,isContextVersionRequired:()=>Xn,isCreated:()=>oa,isDataTypeLoaded:()=>gn,isDateString:()=>wn,isDateTimeString:()=>Ve,isDefined:()=>Ec,isEmpty:()=>P,isError:()=>or,isFhirCriteriaMet:()=>Ko,isFhircastResourceType:()=>Ho,isGone:()=>la,isJwt:()=>ti,isLowerCase:()=>ic,isMedplumAccessToken:()=>ri,isNodeEnvironment:()=>qu,isNotFound:()=>ca,isObject:()=>R,isOk:()=>sr,isOperationOutcome:()=>We,isOrganizationArray:()=>bd,isPeriod:()=>On,isPopulated:()=>re,isPrimitiveType:()=>lt,isProfileLoaded:()=>yn,isProfileResource:()=>to,isQuantity:()=>I,isQuantityEquivalent:()=>In,isRedirect:()=>aa,isReference:()=>H,isResource:()=>V,isResourceType:()=>ut,isResourceTypeSchema:()=>dr,isResourceWithId:()=>ze,isSliceDefinitionWithTypes:()=>ci,isString:()=>De,isStringArray:()=>tc,isTextObject:()=>ao,isTypedValue:()=>Gc,isUUID:()=>ec,isUnauthenticated:()=>da,isValidDate:()=>vt,isValidHostname:()=>yc,isValidMedplumSemver:()=>As,lazy:()=>Fn,loadDataType:()=>lr,locationUtils:()=>oe,mapByIdentifier:()=>vc,matchDiscriminant:()=>hr,matchesRange:()=>Ln,matchesSearchRequest:()=>Lt,multipleMatches:()=>Ks,normalizeArrayBufferView:()=>_n,normalizeCreateBinaryOptions:()=>si,normalizeCreatePdfOptions:()=>ns,normalizeErrorString:()=>Oe,normalizeOperationOutcome:()=>ct,notFound:()=>sn,notModified:()=>$s,operationOutcomeIssueToString:()=>Ui,operationOutcomeToString:()=>cn,parseFhirPath:()=>_t,parseFilterParameter:()=>pd,parseHl7DateTime:()=>hd,parseJWTPayload:()=>Bt,parseLogLevel:()=>yd,parseMappingLanguage:()=>Wl,parseParameter:()=>Vo,parseReference:()=>Fa,parseSearchRequest:()=>Xe,parseStructureDefinition:()=>cr,parseXFhirQuery:()=>vu,pathToJSONPointer:()=>Ca,preciseEquals:()=>pc,preciseGreaterThan:()=>mc,preciseGreaterThanOrEquals:()=>fo,preciseLessThan:()=>fc,preciseLessThanOrEquals:()=>po,preciseRound:()=>dc,preconditionFailed:()=>Qs,projectAdminResourceTypes:()=>Mo,protectedResourceTypes:()=>Do,readInteractions:()=>_o,redirect:()=>Ni,redirectOk:()=>ra,removeDuplicates:()=>pt,removePreferredPharmacyFromPatient:()=>Sd,removeProfileFromResource:()=>Tc,reorderBundle:()=>Bo,replaceQueryVariables:()=>Wo,resolveId:()=>Se,resourceMatchesSubscriptionCriteria:()=>al,satisfiedAccessPolicy:()=>Lo,serializeError:()=>Xt,serializeFhircastSubscriptionRequest:()=>Dr,serverError:()=>ea,serverTimeout:()=>ta,setCodeBySystem:()=>oc,setIdentifier:()=>Ha,singleton:()=>k,singularize:()=>gc,sleep:()=>Er,sortStringArray:()=>xt,splitN:()=>Me,splitSearchOnComma:()=>Ze,streamToBuffer:()=>_d,stringify:()=>yt,stringifyTypedValue:()=>Wn,structureMapTransform:()=>jl,subsetResource:()=>xa,summarizeObservations:()=>El,toJsBoolean:()=>q,toPeriod:()=>mt,toTypedValue:()=>S,tooManyRequests:()=>Ys,trimTrailingEmptyElements:()=>Ja,tryGetDataType:()=>$e,tryGetJwtExpiration:()=>ni,tryGetProfile:()=>xn,typedValueToString:()=>Bn,unauthorized:()=>we,unauthorizedTokenAudience:()=>ir,unauthorizedTokenExpired:()=>an,unsupportedMediaType:()=>Js,validateFhircastSubscriptionRequest:()=>Ut,validateResource:()=>wa,validateResourceType:()=>Rd,validateTypedValue:()=>Qi,validationError:()=>v,validationRegexes:()=>dt,warnIfNewerVersionAvailable:()=>$d,wordWrap:()=>xs});module.exports=Ms(Hd);var z=class{constructor(e=10){c(this,"max");c(this,"cache");this.max=e,this.cache=new Map}clear(){this.cache.clear()}get(e){let t=this.cache.get(e);return t&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size>=this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}delete(e){this.cache.delete(e)}keys(){return this.cache.keys()}first(){return this.cache.keys().next().value}};var ot=class{constructor(e,t){c(this,"operator");c(this,"child");this.operator=e,this.child=t}toString(){return`${this.operator}(${this.child.toString()})`}},E=class{constructor(e,t,n){c(this,"operator");c(this,"left");c(this,"right");this.operator=e,this.left=t,this.right=n}toString(){return`(${this.left.toString()} ${this.operator} ${this.right.toString()})`}},st=class{constructor(){c(this,"prefixParselets",{});c(this,"infixParselets",{})}registerInfix(e,t){return this.infixParselets[e]=t,this}registerPrefix(e,t){return this.prefixParselets[e]=t,this}prefix(e,t,n){return this.registerPrefix(e,{parse(i,o){let s=i.consumeAndParse(t);return n(o,s)}})}infixLeft(e,t,n){return this.registerInfix(e,{parse(i,o,s){let a=i.consumeAndParse(t);return n(o,s,a)},precedence:t})}construct(e){return new er(e,this.prefixParselets,this.infixParselets)}},er=class{constructor(e,t,n){c(this,"tokens");c(this,"prefixParselets");c(this,"infixParselets");this.tokens=e,this.prefixParselets=t,this.infixParselets=n}hasMore(){return this.tokens.length>0}match(e){return this.peek()?.id!==e?!1:(this.consume(),!0)}consumeAndParse(e=1/0){let t=this.consume(),n=this.prefixParselets[t.id];if(!n)throw new Error(`Parse error at "${t.value}" (line ${t.line}, column ${t.column}). No matching prefix parselet.`);let i=n.parse(this,t);for(;e>this.getPrecedence();){let o=this.consume();i=this.getInfixParselet(o).parse(this,i,o)}return i}getPrecedence(){let e=this.peek();if(!e)return 1/0;let t=this.getInfixParselet(e);return t?t.precedence:1/0}consume(e,t){if(!this.tokens.length)throw 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(t&&this.peek()?.value!==t){let n=this.peek();throw new Error(`Expected "${t}" but got "${n.value}" at line ${n.line} column ${n.column}.`)}return this.tokens.shift()}peek(){return this.tokens.length>0?this.tokens[0]:void 0}removeComments(){this.tokens=this.tokens.filter(e=>e.id!=="Comment")}getInfixParselet(e){return this.infixParselets[e.id==="Symbol"?e.value:e.id]}};function ee(r){if(r!==void 0)return Array.isArray(r)?r:[r]}var Xr="http://unitsofmeasure.org",_s="http://loinc.org",Ls="http://snomed.info/sct",Fs="http://www.nlm.nih.gov/research/umls/rxnorm",Ns="http://www.ama-assn.org/go/cpt",Us="http://hl7.org/fhir/sid/icd-10",Bs="http://hl7.org/fhir/sid/ndc",at="http://hl7.org",qs="http://terminology.hl7.org";var tr="ok",rr="created",Zr="gone",en="not-modified",tn="found",rn="not-found",nn="conflict",on="unauthorized",Ii="forbidden",ki="precondition-failed",Vi="content-too-large",Di="unsupported-media-type",Mi="multiple-matches",_i="too-many-requests",nr="accepted",Li="server-timeout",Fi="business-rule",Ws={resourceType:"OperationOutcome",id:tr,issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},js={resourceType:"OperationOutcome",id:rr,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},$s={resourceType:"OperationOutcome",id:en,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},sn={resourceType:"OperationOutcome",id:rn,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},we={resourceType:"OperationOutcome",id:on,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},an={...we,issue:[...we.issue,{severity:"error",code:"expired",details:{text:"Token expired"}}]},ir={...we,issue:[...we.issue,{severity:"error",code:"invalid",details:{text:"Token not issued for this audience"}}]},Hs={resourceType:"OperationOutcome",id:Ii,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},Gs={resourceType:"OperationOutcome",id:Zr,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},Qs={resourceType:"OperationOutcome",id:ki,issue:[{severity:"error",code:"processing",details:{text:"Precondition Failed"}}]};function zs(r){return{resourceType:"OperationOutcome",id:Vi,issue:[{severity:"error",code:"too-long",details:{text:r}}]}}var Js={resourceType:"OperationOutcome",id:Di,issue:[{severity:"error",code:"not-supported",details:{text:"Unsupported media type"}}]},Ks={resourceType:"OperationOutcome",id:Mi,issue:[{severity:"error",code:"multiple-matches",details:{text:"Multiple resources found matching condition"}}]},Ys={resourceType:"OperationOutcome",id:_i,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function Xs(r){return{resourceType:"OperationOutcome",id:nr,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:r}]}}function C(r,e){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:r},...e?{expression:ee(e)}:void 0}]}}function Zs(r,e){return{resourceType:"OperationOutcome",id:nn,issue:[{severity:"error",code:"conflict",details:{coding:e?[{code:e}]:void 0,text:r}}]}}function v(r,e,t,n){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:t??"structure",details:{text:r},...e?{expression:e}:void 0,...n?{diagnostics:n}:void 0}]}}function ea(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:r.toString()}]}}function ta(r){return{resourceType:"OperationOutcome",id:Li,issue:[{severity:"error",code:"timeout",details:{text:r??"Server timeout"}}]}}function Ni(r){let e=r.toString();return{resourceType:"OperationOutcome",id:tn,issue:[{severity:"information",code:"informational",details:{coding:[{system:"urn:ietf:rfc:3986",code:e}],text:"Redirect to "+e}}]}}function ra(r){return{...Ni(r),id:tr}}function na(r){return r?.issue?.[0]?.details?.coding?.find(e=>e.system==="urn:ietf:rfc:3986")?.code}function ia(r,e){return{resourceType:"OperationOutcome",id:Fi,issue:[{severity:"error",code:"business-rule",details:{id:r,text:e}}]}}function or(r){return!r||typeof r!="object"?!1:r instanceof Error||typeof DOMException<"u"&&r instanceof DOMException?!0:Object.prototype.toString.call(r)==="[object Error]"}function We(r){return typeof r=="object"&&r!==null&&r.resourceType==="OperationOutcome"}function sr(r){return r.id===tr||r.id===rr||r.id===en||r.id===nr}function oa(r){return r.id===rr}function sa(r){return r.id===nr}function aa(r){return r.id===tn}function ca(r){return r.id===rn}function ua(r){return r.id===nn}function la(r){return r.id===Zr}function da(r){return r.id===on}function pa(r){switch(r.id){case tr:return 200;case rr:return 201;case nr:return 202;case tn:return 302;case en:return 304;case on:return 401;case Ii:return 403;case rn:return 404;case nn:return 409;case Zr:return 410;case ki:case Mi:return 412;case Vi:return 413;case Di:return 415;case Fi:return 422;case _i:return 429;case Li:return 504;default:return r.issue?.[0]?.code==="exception"?500:400}}function fa(r,e){if(!sr(r)||e===void 0)throw new f(r)}var f=class extends Error{constructor(t,n){super(cn(t),n);c(this,"outcome");this.name="OperationOutcomeError",this.outcome=t}};function ct(r){return r instanceof f?r.outcome:We(r)?r:C(Oe(r))}function Oe(r){return r?typeof r=="string"?r:or(r)?r.message:We(r)?cn(r):typeof r=="object"&&"code"in r&&typeof r.code=="string"?r.code:JSON.stringify(r):"Unknown error"}function cn(r){let e=r.issue?.map(Ui)??[];return e.length>0?e.join("; "):"Unknown error"}function Ui(r){let e;return r.details?.text?r.diagnostics?e=`${r.details.text} (${r.diagnostics})`:e=r.details.text:r.diagnostics?e=r.diagnostics:e="Unknown error",r.expression?.length&&(e+=` (${r.expression.join(", ")})`),e}function ve(r,e,t,n,i){let o={severity:r,code:e,details:{text:t},expression:[n]};return i&&(o.diagnostics=JSON.stringify(i)),o}function b(r,e){return ve("error","structure",e,r)}function un(r,e){return ve("error","invariant",`Constraint ${e.key} not met: ${e.description}`,r,{fhirpath:e.expression})}function ln(r,e,t,n){return ve("error","processing",e,r,{...n,error:t})}var ma={"http://hl7.org/fhirpath/System.String":"string"};function ha(r){let e={};return r.min!==0&&(e.min=r.min),r.max!==1&&Number.isFinite(r.max)?e.max=r.max:r.max===Number.POSITIVE_INFINITY&&(e.max=Number.MAX_SAFE_INTEGER),e.type=r.type?.map(t=>({...t,extension:void 0,code:ma[t.code]??t.code})),e}function Bi(r,e){let t=e.max&&e.max===Number.MAX_SAFE_INTEGER?Number.POSITIVE_INFINITY:e.max;return{path:r,description:"",type:e.type??[],min:e.min??0,max:t??1,isArray:!!t&&t>1,constraints:[]}}function dn(r){let e=Object.create(null);for(let[t,n]of Object.entries(r))e[t]={name:t,type:t,path:t,elements:Object.fromEntries(Object.entries(n.elements).map(([i,o])=>[i,Bi(i,o)])),constraints:[],innerTypes:[]};return e}var qi={Element:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]}}},BackboneElement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]}}},Address:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"code"}]},text:{type:[{code:"string"}]},line:{max:9007199254740991,type:[{code:"string"}]},city:{type:[{code:"string"}]},district:{type:[{code:"string"}]},state:{type:[{code:"string"}]},postalCode:{type:[{code:"string"}]},country:{type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Age:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Annotation:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"author[x]":{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Organization"]},{code:"string"}]},time:{type:[{code:"dateTime"}]},text:{min:1,type:[{code:"markdown"}]}}},Attachment:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},contentType:{type:[{code:"code"}]},language:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]},url:{type:[{code:"url"}]},size:{type:[{code:"unsignedInt"}]},hash:{type:[{code:"base64Binary"}]},title:{type:[{code:"string"}]},creation:{type:[{code:"dateTime"}]}}},CodeableConcept:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},coding:{max:9007199254740991,type:[{code:"Coding"}]},text:{type:[{code:"string"}]}}},Coding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"uri"}]},version:{type:[{code:"string"}]},code:{type:[{code:"code"}]},display:{type:[{code:"string"}]},userSelected:{type:[{code:"boolean"}]}}},ContactDetail:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"string"}]},telecom:{max:9007199254740991,type:[{code:"ContactPoint"}]}}},ContactPoint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"code"}]},value:{type:[{code:"string"}]},use:{type:[{code:"code"}]},rank:{type:[{code:"positiveInt"}]},period:{type:[{code:"Period"}]}}},Contributor:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{min:1,type:[{code:"string"}]},contact:{max:9007199254740991,type:[{code:"ContactDetail"}]}}},Count:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},DataRequirement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},"subject[x]":{type:[{code:"CodeableConcept"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Group"]}]},mustSupport:{max:9007199254740991,type:[{code:"string"}]},codeFilter:{max:9007199254740991,type:[{code:"DataRequirementCodeFilter"}]},dateFilter:{max:9007199254740991,type:[{code:"DataRequirementDateFilter"}]},limit:{type:[{code:"positiveInt"}]},sort:{max:9007199254740991,type:[{code:"DataRequirementSort"}]}}},DataRequirementCodeFilter:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]},code:{max:9007199254740991,type:[{code:"Coding"}]}}},DataRequirementDateFilter:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},"value[x]":{type:[{code:"dateTime"},{code:"Period"},{code:"Duration"}]}}},DataRequirementSort:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},direction:{min:1,type:[{code:"code"}]}}},Distance:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Dosage:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},sequence:{type:[{code:"integer"}]},text:{type:[{code:"string"}]},additionalInstruction:{max:9007199254740991,type:[{code:"CodeableConcept"}]},patientInstruction:{type:[{code:"string"}]},timing:{type:[{code:"Timing"}]},"asNeeded[x]":{type:[{code:"boolean"},{code:"CodeableConcept"}]},site:{type:[{code:"CodeableConcept"}]},route:{type:[{code:"CodeableConcept"}]},method:{type:[{code:"CodeableConcept"}]},doseAndRate:{max:9007199254740991,type:[{code:"DosageDoseAndRate"}]},maxDosePerPeriod:{type:[{code:"Ratio"}]},maxDosePerAdministration:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},maxDosePerLifetime:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},DosageDoseAndRate:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{type:[{code:"CodeableConcept"}]},"dose[x]":{type:[{code:"Range"},{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},"rate[x]":{type:[{code:"Ratio"},{code:"Range"},{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},Duration:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},ElementDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},representation:{max:9007199254740991,type:[{code:"code"}]},sliceName:{type:[{code:"string"}]},sliceIsConstraining:{type:[{code:"boolean"}]},label:{type:[{code:"string"}]},code:{max:9007199254740991,type:[{code:"Coding"}]},slicing:{type:[{code:"ElementDefinitionSlicing"}]},short:{type:[{code:"string"}]},definition:{type:[{code:"markdown"}]},comment:{type:[{code:"markdown"}]},requirements:{type:[{code:"markdown"}]},alias:{max:9007199254740991,type:[{code:"string"}]},min:{type:[{code:"unsignedInt"}]},max:{type:[{code:"string"}]},base:{type:[{code:"ElementDefinitionBase"}]},contentReference:{type:[{code:"uri"}]},type:{max:9007199254740991,type:[{code:"ElementDefinitionType"}]},"defaultValue[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},meaningWhenMissing:{type:[{code:"markdown"}]},orderMeaning:{type:[{code:"string"}]},"fixed[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},"pattern[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},example:{max:9007199254740991,type:[{code:"ElementDefinitionExample"}]},"minValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},"maxValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},maxLength:{type:[{code:"integer"}]},condition:{max:9007199254740991,type:[{code:"id"}]},constraint:{max:9007199254740991,type:[{code:"ElementDefinitionConstraint"}]},mustSupport:{type:[{code:"boolean"}]},isModifier:{type:[{code:"boolean"}]},isModifierReason:{type:[{code:"string"}]},isSummary:{type:[{code:"boolean"}]},binding:{type:[{code:"ElementDefinitionBinding"}]},mapping:{max:9007199254740991,type:[{code:"ElementDefinitionMapping"}]}}},ElementDefinitionSlicingDiscriminator:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},path:{min:1,type:[{code:"string"}]}}},ElementDefinitionSlicing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},discriminator:{max:9007199254740991,type:[{code:"ElementDefinitionSlicingDiscriminator"}]},description:{type:[{code:"string"}]},ordered:{type:[{code:"boolean"}]},rules:{min:1,type:[{code:"code"}]}}},ElementDefinitionBase:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},min:{min:1,type:[{code:"unsignedInt"}]},max:{min:1,type:[{code:"string"}]}}},ElementDefinitionType:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"uri"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},targetProfile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},aggregation:{max:9007199254740991,type:[{code:"code"}]},versioning:{type:[{code:"code"}]}}},ElementDefinitionExample:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},label:{min:1,type:[{code:"string"}]},"value[x]":{min:1,type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]}}},ElementDefinitionConstraint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},key:{min:1,type:[{code:"id"}]},requirements:{type:[{code:"string"}]},severity:{min:1,type:[{code:"code"}]},human:{min:1,type:[{code:"string"}]},expression:{type:[{code:"string"}]},xpath:{type:[{code:"string"}]},source:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]}}},ElementDefinitionBinding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},strength:{min:1,type:[{code:"code"}]},description:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]}}},ElementDefinitionMapping:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},identity:{min:1,type:[{code:"id"}]},language:{type:[{code:"code"}]},map:{min:1,type:[{code:"string"}]},comment:{type:[{code:"string"}]}}},Expression:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},description:{type:[{code:"string"}]},name:{type:[{code:"id"}]},language:{min:1,type:[{code:"code"}]},expression:{type:[{code:"string"}]},reference:{type:[{code:"uri"}]}}},Extension:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},url:{min:1,type:[{code:"uri"}]},"value[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]}}},HumanName:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},text:{type:[{code:"string"}]},family:{type:[{code:"string"}]},given:{max:9007199254740991,type:[{code:"string"}]},prefix:{max:9007199254740991,type:[{code:"string"}]},suffix:{max:9007199254740991,type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Identifier:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"CodeableConcept"}]},system:{type:[{code:"uri"}]},value:{type:[{code:"string"}]},period:{type:[{code:"Period"}]},assigner:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MarketingStatus:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},country:{min:1,type:[{code:"CodeableConcept"}]},jurisdiction:{type:[{code:"CodeableConcept"}]},status:{min:1,type:[{code:"CodeableConcept"}]},dateRange:{min:1,type:[{code:"Period"}]},restoreDate:{type:[{code:"dateTime"}]}}},Meta:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},versionId:{type:[{code:"id"}]},lastUpdated:{type:[{code:"instant"}]},source:{type:[{code:"uri"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},security:{max:9007199254740991,type:[{code:"Coding"}]},tag:{max:9007199254740991,type:[{code:"Coding"}]},project:{type:[{code:"uri"}]},author:{type:[{code:"Reference"}]},onBehalfOf:{type:[{code:"Reference"}]},account:{type:[{code:"Reference"}]},accounts:{max:9007199254740991,type:[{code:"Reference"}]},compartment:{max:9007199254740991,type:[{code:"Reference"}]}}},Money:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},currency:{type:[{code:"code"}]}}},Narrative:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},status:{min:1,type:[{code:"code"}]},div:{min:1,type:[{code:"xhtml"}]}}},ParameterDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"code"}]},use:{min:1,type:[{code:"code"}]},min:{type:[{code:"integer"}]},max:{type:[{code:"string"}]},documentation:{type:[{code:"string"}]},type:{min:1,type:[{code:"code"}]},profile:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]}}},Period:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},start:{type:[{code:"dateTime"}]},end:{type:[{code:"dateTime"}]}}},Population:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"age[x]":{type:[{code:"Range"},{code:"CodeableConcept"}]},gender:{type:[{code:"CodeableConcept"}]},race:{type:[{code:"CodeableConcept"}]},physiologicalCondition:{type:[{code:"CodeableConcept"}]}}},ProdCharacteristic:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},height:{type:[{code:"Quantity"}]},width:{type:[{code:"Quantity"}]},depth:{type:[{code:"Quantity"}]},weight:{type:[{code:"Quantity"}]},nominalVolume:{type:[{code:"Quantity"}]},externalDiameter:{type:[{code:"Quantity"}]},shape:{type:[{code:"string"}]},color:{max:9007199254740991,type:[{code:"string"}]},imprint:{max:9007199254740991,type:[{code:"string"}]},image:{max:9007199254740991,type:[{code:"Attachment"}]},scoring:{type:[{code:"CodeableConcept"}]}}},ProductShelfLife:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},identifier:{type:[{code:"Identifier"}]},type:{min:1,type:[{code:"CodeableConcept"}]},period:{min:1,type:[{code:"Quantity"}]},specialPrecautionsForStorage:{max:9007199254740991,type:[{code:"CodeableConcept"}]}}},Quantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Range:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},low:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},high:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},Ratio:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},numerator:{type:[{code:"Quantity"}]},denominator:{type:[{code:"Quantity"}]}}},Reference:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},reference:{type:[{code:"string"}]},type:{type:[{code:"uri"}]},identifier:{type:[{code:"Identifier"}]},display:{type:[{code:"string"}]}}},RelatedArtifact:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},label:{type:[{code:"string"}]},display:{type:[{code:"string"}]},citation:{type:[{code:"markdown"}]},url:{type:[{code:"url"}]},document:{type:[{code:"Attachment"}]},resource:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/Resource"]}]}}},SampledData:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},origin:{min:1,type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},period:{min:1,type:[{code:"decimal"}]},factor:{type:[{code:"decimal"}]},lowerLimit:{type:[{code:"decimal"}]},upperLimit:{type:[{code:"decimal"}]},dimensions:{min:1,type:[{code:"positiveInt"}]},data:{type:[{code:"string"}]}}},Signature:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,max:9007199254740991,type:[{code:"Coding"}]},when:{min:1,type:[{code:"instant"}]},who:{min:1,type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},onBehalfOf:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},targetFormat:{type:[{code:"code"}]},sigFormat:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]}}},SubstanceAmount:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"amount[x]":{type:[{code:"Quantity"},{code:"Range"},{code:"string"}]},amountType:{type:[{code:"CodeableConcept"}]},amountText:{type:[{code:"string"}]},referenceRange:{type:[{code:"SubstanceAmountReferenceRange"}]}}},SubstanceAmountReferenceRange:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},lowLimit:{type:[{code:"Quantity"}]},highLimit:{type:[{code:"Quantity"}]}}},Timing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},event:{max:9007199254740991,type:[{code:"dateTime"}]},repeat:{type:[{code:"TimingRepeat"}]},code:{type:[{code:"CodeableConcept"}]}}},TimingRepeat:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"bounds[x]":{type:[{code:"Duration"},{code:"Range"},{code:"Period"}]},count:{type:[{code:"positiveInt"}]},countMax:{type:[{code:"positiveInt"}]},duration:{type:[{code:"decimal"}]},durationMax:{type:[{code:"decimal"}]},durationUnit:{type:[{code:"code"}]},frequency:{type:[{code:"positiveInt"}]},frequencyMax:{type:[{code:"positiveInt"}]},period:{type:[{code:"decimal"}]},periodMax:{type:[{code:"decimal"}]},periodUnit:{type:[{code:"code"}]},dayOfWeek:{max:9007199254740991,type:[{code:"code"}]},timeOfDay:{max:9007199254740991,type:[{code:"time"}]},when:{max:9007199254740991,type:[{code:"code"}]},offset:{type:[{code:"unsignedInt"}]}}},TriggerDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{type:[{code:"string"}]},"timing[x]":{type:[{code:"Timing"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Schedule"]},{code:"date"},{code:"dateTime"}]},data:{max:9007199254740991,type:[{code:"DataRequirement"}]},condition:{type:[{code:"Expression"}]}}},UsageContext:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"Coding"}]},"value[x]":{min:1,type:[{code:"CodeableConcept"},{code:"Quantity"},{code:"Range"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/PlanDefinition","http://hl7.org/fhir/StructureDefinition/ResearchStudy","http://hl7.org/fhir/StructureDefinition/InsurancePlan","http://hl7.org/fhir/StructureDefinition/HealthcareService","http://hl7.org/fhir/StructureDefinition/Group","http://hl7.org/fhir/StructureDefinition/Location","http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MoneyQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},SimpleQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{max:0,type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},IdentityProvider:{elements:{authorizeUrl:{min:1,type:[{code:"string"}]},tokenUrl:{min:1,type:[{code:"string"}]},tokenAuthMethod:{type:[{code:"code"}]},userInfoUrl:{min:1,type:[{code:"string"}]},clientId:{min:1,type:[{code:"string"}]},clientSecret:{min:1,type:[{code:"string"}]},usePkce:{type:[{code:"boolean"}]},useSubject:{type:[{code:"boolean"}]}}}};function cr(r){return new fn(r).parse()}var Ie=dn(qi),mn=Object.create(null),Wi=Object.create(null),ya={"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 Gi(r){let e;return e=Wi[r],e||(e=Wi[r]=Object.create(null)),e}function ur(r){let t=(Array.isArray(r)?r:r.entry?.map(n=>n.resource)??[]).filter(n=>n?.resourceType==="StructureDefinition");vn(t);for(let n of t)lr(n)}function lr(r){if(!r?.name)throw new Error("Failed loading StructureDefinition from bundle");if(r.resourceType!=="StructureDefinition")return;let e=cr(r),t=ya[r.url],n,i;t?(n=Ie,i=t):r.url===`http://hl7.org/fhir/StructureDefinition/${r.type}`||r.url===`https://medplum.com/fhir/StructureDefinition/${r.type}`||r.type?.startsWith("http://")||r.type?.startsWith("https://")?(n=Ie,i=r.type):(n=Gi(r.url),i=r.type),n[i]=e;for(let o of e.innerTypes)o.parentType=e,n[o.name]=o;mn[r.url]=e}function hn(){return Ie}function gn(r){return!!Ie[r]}function $e(r,e){if(e){let t=Gi(e)[r];if(t)return t}return Ie[r]}function ue(r,e){let t=$e(r,e);if(!t)throw new f(C("Unknown data type: "+r));return t}function ut(r){let e=Ie[r];return e&&dr(e)}function yn(r){return!!mn[r]}function xn(r){return mn[r]}var fn=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:ba(e),elements:{},constraints:this.parseElementDefinition(this.root).constraints,innerTypes:[],summaryProperties:new Set,mandatoryProperties:new Set},this.innerTypes=[]}parse(){let e=this.next();for(;e;){if(e.sliceName)this.parseSliceStart(e);else if(e.id?.includes(":")){if(this.slicingContext?.current){let t=pn(e,this.slicingContext.path);this.slicingContext.current.elements[t]=this.parseElementDefinition(e)}}else{let t=this.parseElementDefinition(e);this.checkFieldEnter(e,t);let n=this.backboneContext;for(;n;){if(e.path?.startsWith(n.path+".")){n.type.elements[pn(e,n.path)]=t;break}n=n.parent}if(!n){let i=pn(e,this.root.path);e.isSummary&&this.resourceSchema.summaryProperties?.add(i.replace("[x]","")),t.min>0&&this.resourceSchema.mandatoryProperties?.add(i.replace("[x]","")),this.resourceSchema.elements[i]=t}this.checkFieldExit(e)}e=this.next()}return this.checkFieldExit(),this.innerTypes.length>0&&(this.resourceSchema.innerTypes=this.innerTypes),this.resourceSchema}checkFieldEnter(e,t){this.isInnerType(e)&&this.enterInnerType(e),this.slicingContext&&!je(this.slicingContext.path,e?.path)&&(this.slicingContext=void 0),e.slicing&&!this.slicingContext&&this.enterSlice(e,t)}enterInnerType(e){for(;this.backboneContext&&!je(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;let t=ar(e);this.backboneContext={type:{name:t,type:t,path:e.path,title:e.label,description:e.definition,elements:{},constraints:this.parseElementDefinition(e).constraints,innerTypes:[]},path:e.path,parent:je(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,t){Sa(e)&&!this.peek()?.sliceName||(t.slicing={discriminator:(e.slicing?.discriminator??[]).map(n=>{if(n.type!=="value"&&n.type!=="pattern"&&n.type!=="type")throw new Error(`Unsupported slicing discriminator type: ${n.type}`);return{path:n.path,type:n.type}}),slices:[],ordered:e.slicing?.ordered??!1,rule:e.slicing?.rules},this.slicingContext={field:t.slicing,path:e.path??""})}checkFieldExit(e=void 0){if(this.backboneContext&&!je(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!je(this.backboneContext.path,e?.path));else this.innerTypes.push(this.backboneContext.type),this.backboneContext=void 0}next(){let e=this.peek();if(e)return this.index++,e}peek(){let e=this.elements[this.index];if(e){if(this.elementIndex[e.path??""]=e,e.contentReference){let t=e.contentReference.slice(e.contentReference.indexOf("#")+1),n=this.elementIndex[t];return n?{...n,id:e.id,path:e.path,min:e.min??n.min,max:e.max??n.max,base:{path:n.base?.path??t,min:e.base?.min??n.base?.min??n.min,max:e.base?.max??n.base?.max??n.max},contentReference:e.contentReference,definition:e.definition}:void 0}return e}}isInnerType(e){let t=this.peek();return!!(je(e?.path,t?.path)&&e.type?.some(n=>["BackboneElement","Element"].includes(n.code)))}parseSliceStart(e){if(!this.slicingContext)throw new Error(`Invalid slice start before discriminator: ${e.sliceName} (${e.id})`);this.slicingContext.current={...this.parseElementDefinition(e),name:e.sliceName??"",definition:e.definition,elements:{}},this.slicingContext.field.slices.push(this.slicingContext.current)}parseElementDefinitionType(e){return(e.type??[]).map(t=>{let n;return(t.code==="BackboneElement"||t.code==="Element")&&(n=ar(e)),n||(n=le(t,"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type")?.valueUrl),n||(n=t.code??""),{code:n,targetProfile:t.targetProfile,profile:t.profile}})}parseElementDefinition(e){let t=$i(e.max),n=e.base?.max?$i(e.base.max):t,i={type:"ElementDefinition",value:e};return{description:e.definition||"",path:e.path||e.base?.path||"",min:e.min??0,max:t,isArray:n>1,constraints:(e.constraint??[]).map(o=>({key:o.key??"",severity:o.severity??"error",expression:o.expression??"",description:o.human??""})),type:this.parseElementDefinitionType(e),fixed:Hi(M(i,"fixed[x]")),pattern:Hi(M(i,"pattern[x]")),binding:e.binding}}};function xa(r,e){if(!r)return;let t=[];for(let n of e){t.push("_"+n);let i=Ie[r.resourceType].elements[n+"[x]"];i&&t.push(...i.type.map(o=>n+_(o.code)))}for(let n of Object.getOwnPropertyNames(r))!e.includes(n)&&!t.includes(n)&&!va.includes(n)&&Object.defineProperty(r,n,{enumerable:!1,writable:!1,value:void 0});return r.meta={...r.meta,tag:r.meta?.tag?r.meta.tag.concat(ji):[ji]},r}var ji={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},va=["resourceType","id","meta"];function $i(r){return r==="*"?Number.POSITIVE_INFINITY:Number.parseInt(r,10)}function pn(r,e=""){return Ta(r.path,e)}function Ta(r,e){return r?e&&r.startsWith(e)?r.substring(e.length+1):r:""}function je(r,e){return!r||!e?!1:e.startsWith(r+".")||e===r}function Hi(r){return Array.isArray(r)&&r.length>0?r[0]:P(r)?void 0:r}function Sa(r){let e=r.slicing?.discriminator;return!!(r.type?.some(t=>t.code==="Extension")&&e?.length===1&&e[0].type==="value"&&e[0].path==="url")}function ba(r){let e=r.description;return e?.startsWith(`Base StructureDefinition for ${r.name} Type: `)&&(e=e.substring(`Base StructureDefinition for ${r.name} Type: `.length)),e}function pr(r,e,t){new Tn(r,e,t).crawl()}function Ea(r,e,t){return new Sn(r,e,t).crawl()}var Tn=class{constructor(e,t,n){c(this,"root");c(this,"visitor");c(this,"schema");c(this,"initialPath");c(this,"excludeMissingProperties");this.root=e,this.visitor=t,this.schema=n?.schema??ue(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}crawl(){this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}crawlObject(e,t,n){let i=V(e.value);if(i&&this.visitor.onEnterResource&&this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties)for(let o of Object.keys(e.value))this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&this.visitor.onExitResource(n,e,t)}crawlProperty(e,t,n,i){let o=ke(e,t,{withPath:!0});this.visitor.visitProperty&&this.visitor.visitProperty(e,t,i,o,n);for(let s of o)for(let a of ee(s))this.crawlPropertyValue(a,i,n)}crawlPropertyValue(e,t,n){if(!lt(e.type)){let i=n.innerTypes?.find(o=>o.name===e.type)??ue(e.type);this.crawlObject(e,i,t)}}},Sn=class{constructor(e,t,n){c(this,"root");c(this,"visitor");c(this,"schema");c(this,"initialPath");c(this,"excludeMissingProperties");this.root=e,this.visitor=t,this.schema=n?.schema??ue(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}async crawl(){return this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}async crawlObject(e,t,n){let i=V(e.value);if(i&&this.visitor.onEnterResource&&await this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&await this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties&&e.value)for(let o of Object.keys(e.value))await this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))await this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&await this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&await this.visitor.onExitResource(n,e,t)}async crawlProperty(e,t,n,i){let o=ke(e,t,{withPath:!0});if(this.visitor.visitPropertyAsync)for(let s of o)await this.visitor.visitPropertyAsync(e,t,i,s,n);for(let s of o)for(let a of ee(s))await this.crawlPropertyValue(a,i,n)}async crawlPropertyValue(e,t,n){if(!lt(e.type)){let i=n.innerTypes?.find(o=>o.name===e.type)??ue(e.type);await this.crawlObject(e,i,t)}}};function ke(r,e,t){if(r===void 0)return[void 0];if(e==="$this")return[r];let n=t?.withPath?fr:M,[i,...o]=e.split("."),s=[n(r,i,t)];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,t));else(t?.withPath&&l?.value!==void 0||!t?.withPath&&l!==void 0)&&u.push(n(l,a,t));s=u}return s}function fr(r,e,t){let n=r.path;return Ra(M(r,e,t),n,e)}function Ra(r,e,t){let n=e?e+".":"";return r===void 0?{type:"undefined",value:void 0,path:`${n}${t}`}:Array.isArray(r)?r.map((i,o)=>({...i,path:`${n}${t}[${o}]`})):{...r,path:`${n}${t}`}}function Ca(r){return r[0]===r[0].toUpperCase()&&(r=r.slice(r.indexOf(".")+1)),`.${r}`.replaceAll(".","/").replaceAll(/\[(\d+)]/g,(e,t)=>`/${t}`)}var mr={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"},Pa=new z(1e3);function lt(r){return r==="undefined"||r in mr}var dt={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:/.*/},Aa={"ele-1":!0,"dom-3":!0,"org-1":!0,"sdf-19":!0};function wa(r,e){if(!ut(r.resourceType))throw new f(v("Invalid resource type"));return Qi(S(r),e)}function Qi(r,e){return new bn(r,e).validate()}var bn=class{constructor(e,t){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=[],V(e.value)&&this.resourceStack.push(e.value),t?.profile?this.schema=cr(t.profile):this.schema=ue(e.type),this.base64BinaryMaxBytes=t?.base64BinaryMaxBytes??1*1024*1024,this.collect=t?.collect}currentResource(){return this.resourceStack.at(-1)}validate(){En(this.root.value,this.schema.path,this.issues),this.constraintsCheck({...this.root,path:this.schema.path},this.schema),pr(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,t,n){this.checkAdditionalProperties(t,n.elements,t.path)}onEnterResource(e,t){this.resourceStack.push(t.value)}onExitResource(){this.resourceStack.pop()}visitProperty(e,t,n,i,o){let s=o.elements[t];if(!s)throw new Error(`Missing element validation schema for ${t}`);for(let a of i){if(!this.checkPresence(a,s,n))return;let u;if(s.isArray){if(!Array.isArray(a)){this.issues.push(b(n,"Expected array of values for property"));return}u=a}else{if(Array.isArray(a)){this.issues.push(b(n,"Expected single value for property"));return}u=[a]}(u.length<s.min||u.length>s.max)&&this.issues.push(b(s.path,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${u.length}`)),ka(a,s)||this.issues.push(b(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=Va(p,s.slicing);g&&l&&(l[g]+=1)}this.validateSlices(s.slicing?.slices,l,n)}}checkPresence(e,t,n){return!Array.isArray(e)&&e.value===void 0?(t.min>0&&this.issues.push(b(e.path,"Missing required property")),!1):P(e)?(this.issues.push(b(n,"Invalid empty value")),!1):!0}checkPropertyValue(e){lt(e.type)?this.validatePrimitiveType(e):P(e.value)&&this.issues.push(b(e.path,"Invalid empty non-primitive value"))}validateSlices(e,t,n){if(!(!e||!t))for(let i of e){let o=t[i.name];(o<i.min||o>i.max)&&this.issues.push(b(n,`Incorrect number of values provided for slice '${i.name}': expected ${i.min}..${Number.isFinite(i.max)?i.max:"*"}, but found ${o}`))}}checkAdditionalProperties(e,t,n){let i=e.value;if(!i)return;let o={};for(let s of Object.keys(i)){if(s==="resourceType")continue;let a=Ia(e,s,t);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(ve("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(ve("warning","structure",`Conflicting choice of type properties: "${s}", "${o[a]}"`,s)),o[a]=s;continue}!(s in t)&&!(s.startsWith("_")&&s.slice(1)in t)&&this.issues.push(b(`${n}.${s}`,`Invalid additional property "${s}"`))}}constraintsCheck(e,t){let n=t.constraints;for(let i of n??y)if(i.severity==="error"&&!(i.key in Aa)&&!this.isExpressionTrue(i,e)){this.issues.push(un(e.path,i));return}}referenceTypeCheck(e,t){if(e.type!=="Reference")return;let n=e.value;if(!H(n)||n.reference.startsWith("#"))return;let i=n.reference.includes("?")?n.reference.split("?")[0]:n.reference.split("/")[0];if(!i)return;let o=t.type.find(g=>g.code==="Reference")?.targetProfile;if(!o)return;let s=at+"/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(ve("warning","structure",`Invalid reference: got "${i}", expected "${o.join('", "')}"`,e.path))}collectValue(e,t){t.binding?.valueSet&&t.binding.strength==="required"&&Ma(e.type)&&this.appendToken(t.binding.valueSet,e)}appendToken(e,t){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===t.path)return;this.collect.tokens[e]=J(n,t)}isExpressionTrue(e,t){let n={"%context":t,"%ucum":S(Xr)},i=this.currentResource();i&&(n["%resource"]=S(i)),V(this.root.value)&&(n["%rootResource"]=this.root);try{let o=A(e.expression,[t],n,Pa);return o.length===1&&o[0].value===!0}catch(o){return this.issues.push(ln(t.path,"Error evaluating invariant expression",o,{fhirpath:e.expression})),!1}}validatePrimitiveType(e){let[t,n]=Da(e),i=e.path;if(t){let{type:o,value:s}=t;if(!(o in mr)){this.issues.push(b(i,`Invalid JSON type: ${o} is not a valid FHIR type`));return}let a=mr[o];if(typeof s!==a){s!==null&&this.issues.push(b(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&&pr(n,this,{schema:ue("Element"),initialPath:i})}validateBase64Binary(e,t){if(!_a(e)){this.issues.push(b(t,"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(b(t,`base64Binary exceeds ${this.base64BinaryMaxBytes} bytes`))}validateString(e,t,n){if(!e.trim()){this.issues.push(b(n,"String must contain non-whitespace content"));return}if(e.length>1024*1024){this.issues.push(b(n,"String cannot be larger than 1 MB"));return}let i=dt[t];i&&!i.exec(e)&&this.issues.push(b(n,"Invalid "+t+" format"))}validateNumber(e,t,n){Number.isNaN(e)||!Number.isFinite(e)?this.issues.push(b(n,"Invalid numeric value")):Oa(t)&&!Number.isInteger(e)?this.issues.push(b(n,"Expected number to be an integer")):t===d.positiveInt&&e<=0?this.issues.push(b(n,"Expected number to be positive")):t===d.unsignedInt&&e<0&&this.issues.push(b(n,"Expected number to be non-negative"))}};function Oa(r){return r===d.integer||r===d.positiveInt||r===d.unsignedInt}function Ia(r,e,t){let n="";e.startsWith("_")&&(e=e.slice(1),n="_");let i=e.split(/(?=[A-Z])/g),o="";for(let s of i){o+=s;let a=o+"[x]";if(t[a])return M(r,o)?n+a:void 0}}function En(r,e,t){for(let[n,i]of Object.entries(r)){let o=`${e}.${n}`,s=n.startsWith("_")?n.slice(1):`_${n}`;if(i===null)t.push(b(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?t.push(b(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!r[s]?.[a]?t.push(b(`${o}[${a}]`,"Invalid null value")):i[a]&&En(i[a],`${o}[${a}]`,t);else typeof i=="object"&&En(i,o,t)}}function ka(r,e){let t=Array.isArray(r)?r.map(n=>({type:n.type,value:n.value})):{type:r.type,value:r.value};return!(e.pattern&&!He(t,e.pattern)||e.fixed&&!de(t,e.fixed))}function hr(r,e,t,n){if(Array.isArray(r))return!1;let i;e.path==="$this"?i=t:i=(n??t.elements)[e.path];let o=t.type;switch(e.type){case"value":case"pattern":if(!r||!i)return!1;if(i.pattern)return He(r,i.pattern);if(i.fixed)return de(r,i.fixed);if(i.binding?.strength==="required"&&i.binding.valueSet)return!0;break;case"type":return!r||!o?.length?!1:o.some(s=>s.code===r.type)}return!1}function Va(r,e){for(let t of e?.slices??y)if(e?.discriminator?.every(n=>ee(ke(r,n.path))?.some(i=>hr(i,n,t))))return t.name}function Da(r){if(typeof r.value!="object"||!r.value)return[r,void 0];let e=r.value.valueOf();if(e===r.value)return[void 0,{type:"Element",value:r.value}];let t=new Set(Object.keys(e)),n=Object.entries(r.value).filter(([o,s])=>!t.has(o)),i=n.length>0?Object.fromEntries(n):void 0;return[{type:r.type,value:e},{type:"Element",value:i}]}function Ma(r){switch(r){case"CodeableConcept":case"Coding":case"code":case"Quantity":case"string":case"uri":return!0;default:return!1}}function _a(r){if(r.length===0)return!1;let e=0;r.endsWith("==")?e=2:r.endsWith("=")&&(e=1);let t=r.length-e;if(t<0||(e+t)%4!==0)return!1;let n=e>0?r.slice(0,-e):r;return/^[A-Za-z\d+/]+$/.test(n)}function h(r){return[{type:d.boolean,value:r}]}function S(r){return r==null?{type:"undefined",value:void 0}:Number.isSafeInteger(r)?{type:d.integer,value:r}:typeof r=="number"?{type:d.decimal,value:r}:typeof r=="boolean"?{type:d.boolean,value:r}:typeof r=="string"?{type:d.string,value:r}:I(r)?{type:d.Quantity,value:r}:V(r)?{type:r.resourceType,value:r}:vr(r)?{type:d.CodeableConcept,value:r}:xr(r)?{type:d.Coding,value:r}:{type:d.BackboneElement,value:r}}function q(r){return r.length===0?!1:!!r[0].value}function k(r,e){if(r.length!==0){if(r.length===1&&(!e||r[0].type===e))return r[0];throw new Error(`Expected singleton of type ${e}, but found ${JSON.stringify(r)}`)}}function M(r,e,t){if(!r.value)return;let n=ht(r.type,e,t?.profileUrl);return n?Yi(r,e,n):Xi(r,e)}function Yi(r,e,t){let n=r.value,i=t.type;if(!i||i.length===0)return;let o,s="undefined",a,u=t.path.lastIndexOf("."),l=t.path.substring(u+1),p=l,g=!1;l.endsWith("[x]")&&(p=l.substring(0,l.length-3),g=!0);for(let x of i){let D=p;if(g&&(D+=_(x.code)),o=n[D],a=n["_"+D],o!==void 0||a!==void 0){s=x.code;break}}if(a)if(Array.isArray(o)){o=o.slice();for(let x=0;x<Math.max(o.length,a.length);x++)o[x]=Rn(o[x],a[x])}else if(!o&&Array.isArray(a)){o=a.slice();for(let x=0;x<a.length;x++)o[x]=Rn(void 0,a[x])}else o=Rn(o,a);if(!P(o))return(s==="Element"||s==="BackboneElement")&&(s=t.type[0].code),Array.isArray(o)?o.map(x=>zi(x,s)):zi(o,s)}function zi(r,e){return e==="Resource"&&V(r)&&(e=r.resourceType),{type:e,value:r}}function Xi(r,e){let t=r.value;if(!t||typeof t!="object")return;let n;if(e in t){let i=t[e];Array.isArray(i)?n=i.map(S):n=S(i)}else{let i=e.endsWith("[x]")?e.substring(0,e.length-3):e;for(let o of Object.values(d)){let s=i+_(o);if(s in t){let a=t[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||P(n[0]))return}else if(P(n))return;return n}function pt(r){let e=[];for(let t of r){let n=!1;for(let i of e)if(q(Ge(t,i))){n=!0;break}n||e.push(t)}return e}function Cn(r){return h(!q(r))}function Pn(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?h(!1):h(r.every((t,n)=>q(Ge(t,e[n]))))}function An(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?h(!0):h(r.some((t,n)=>!q(Ge(t,e[n]))))}function Ge(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?h(Math.abs(t-n)<1e-8):I(t)&&I(n)?h(In(t,n)):h(typeof t=="object"&&typeof n=="object"?kn(r,e):t===n)}function yr(r,e){return r.length===0&&e.length===0?h(!0):r.length!==e.length?h(!1):(r.sort(Ji),e.sort(Ji),h(r.every((t,n)=>q(Zi(t,e[n])))))}function Zi(r,e){let{type:t,value:n}=r,{type:i,value:o}=e,s=n?.valueOf(),a=o?.valueOf();return typeof s=="number"&&typeof a=="number"?h(Math.abs(s-a)<.01):I(s)&&I(a)?h(In(s,a)):h(t==="Coding"&&i==="Coding"?typeof s!="object"||typeof a!="object"?!1:s.code===a.code&&s.system===a.system:typeof s=="object"&&typeof a=="object"?kn({...s,id:void 0},{...a,id:void 0}):typeof s=="string"&&typeof a=="string"?s.toLowerCase()===a.toLowerCase():s===a)}function Ji(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?t-n:typeof t=="string"&&typeof n=="string"?t.localeCompare(n):0}function ft(r,e){let{value:t}=r;if(t==null)return!1;let n=e;switch(n.startsWith("System.")&&(n=n.substring(7)),n.startsWith("FHIR.")&&(n=n.substring(5)),n){case"Boolean":return typeof t=="boolean";case"Decimal":case"Integer":return typeof t=="number";case"Date":return wn(t);case"DateTime":return Ve(t);case"Time":return typeof t=="string"&&!!/^T\d/.exec(t);case"Period":return On(t);case"Quantity":return I(t);default:return r.type===n||typeof t=="object"&&t?.resourceType===n}}function wn(r){return typeof r=="string"&&!!dt.date.exec(r)}function Ve(r){return typeof r=="string"&&!!dt.dateTime.exec(r)}function On(r){return!!(r&&typeof r=="object"&&("start"in r&&Ve(r.start)||"end"in r&&Ve(r.end)))}function mt(r){if(wn(r)||Ve(r))return{start:gr(r,"0000-01-01T00:00:00.000"),end:gr(r,"xxxx-12-31T23:59:59.999")};if(On(r))return{start:r.start?gr(r.start,"0000-01-01T00:00:00.000"):void 0,end:r.end?gr(r.end,"xxxx-12-31T23:59:59.999"):void 0}}function gr(r,e){let t="Z",n=Math.max(r.indexOf("+",10),r.indexOf("-",10));n>-1?(t=r.substring(n),r=r.substring(0,n)):r.endsWith("Z")&&(r=r.substring(0,r.length-1));let i=r+e.substring(r.length)+t;return new Date(i).toISOString()}function I(r){return!!(r&&typeof r=="object"&&"value"in r&&typeof r.value=="number")}function In(r,e){return Math.abs(r.value-e.value)<.01&&(r.unit===e.unit||r.code===e.code||r.unit===e.code||r.code===e.unit)}function kn(r,e){let t=Object.keys(r),n=Object.keys(e);if(t.length!==n.length)return!1;for(let i of t){let o=r[i],s=e[i];if(Ki(o)&&Ki(s)){if(!kn(o,s))return!1}else if(o!==s)return!1}return!0}function Ki(r){return r!==null&&typeof r=="object"}function Rn(r,e){if(e){if(typeof e!="object")throw new Error("Primitive extension must be an object");return La(r??{},e)}return r}function La(r,e){return delete e.__proto__,delete e.constructor,Object.assign(r,e)}function ze(r,e){return V(r,e)&&"id"in r&&typeof r.id=="string"}function Te(r){let e=w(r)??"undefined/undefined",t=ro(r);return t===e?{reference:e}:{reference:e,display:t}}function w(r){if(H(r))return r.reference;if(ze(r))return`${r.resourceType}/${r.id}`}function Se(r){if(r)return H(r)?r.reference.split("/")[1]:r.id}function Fa(r){if(r?.reference===void 0)throw new f(v("Reference missing reference property."));let[e,t]=r.reference.split("/");if(e===""||t===""||t===void 0)throw new f(v("Unable to parse reference string."));return[e,t]}function Sr(r){if(r)if(r.accounts&&r.account){let e=r.accounts;return e.some(t=>t.reference===r.account?.reference)?e:[r.account,...e]}else return ee(r.accounts??r.account)}function to(r){return r.resourceType==="Patient"||r.resourceType==="Practitioner"||r.resourceType==="RelatedPerson"}function ro(r){if(to(r)){let e=Na(r);if(e)return e}if(r.resourceType==="Device"){let e=Ua(r);if(e)return e}if(r.resourceType==="MedicationRequest"&&r.medicationCodeableConcept)return Qe(r.medicationCodeableConcept);if(r.resourceType==="Subscription"&&r.criteria)return r.criteria;if(r.resourceType==="User"&&r.email)return r.email;if("name"in r&&r.name&&typeof r.name=="string")return r.name;if("code"in r&&r.code){let e=r.code;if(Array.isArray(e)&&(e=e[0]),vr(e))return Qe(e);if(ao(e))return e.text}return w(r)??""}function Na(r){let e=r.name;if(e&&e.length>0)return Je(e[0])}function Ua(r){let e=r.deviceName;if(e&&e.length>0)return e[0].name}function Ba(r){if(!("photo"in r))return;let e=r.photo;if(e)if(Array.isArray(e))for(let t of e){let n=eo(t);if(n)return n}else return eo(e)}function eo(r){if(r.url&&r.contentType?.startsWith("image/"))return r.url}function qa(r){return r?new Date(r):void 0}function gt(r,e){let t=new Date(r);t.setUTCHours(0,0,0,0);let n=e?new Date(e):new Date;n.setUTCHours(0,0,0,0);let i=t.getUTCFullYear(),o=t.getUTCMonth(),s=t.getUTCDate(),a=n.getUTCFullYear(),u=n.getUTCMonth(),l=n.getUTCDate(),p=a-i;(u<o||u===o&&l<s)&&p--;let g=a*12+u-(i*12+o);l<s&&g--;let x=Math.floor((n.getTime()-t.getTime())/(1e3*60*60*24));return{years:p,months:g,days:x}}function Wa(r,e){let{years:t,months:n,days:i}=gt(r,e);return t>=2?t.toString().padStart(3,"0")+"Y":n>=1?n.toString().padStart(3,"0")+"M":i.toString().padStart(3,"0")+"D"}function ja(r){let e={};return no(r.item,e),e}function no(r,e){for(let t of r??y)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer[0]),no(t.item,e)}function $a(r){let e={};return io(r.item,e),e}function io(r,e){for(let t of r??y)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]?e[t.linkId]=[...e[t.linkId],...t.answer]:e[t.linkId]=t.answer),io(t.item,e)}function oo(r,e){let t=r.identifier;if(!t)return;let n=Array.isArray(t)?t:[t];for(let i of n)if(i.system===e)return i.value}function Ha(r,e,t,n){let i={system:e,value:t};n?.use&&(i.use=n.use);let o=r.identifier;if(!o){r.identifier=[i];return}for(let s of o)if(s.system===e){Object.assign(s,i);return}o.push(i)}function Ga(r,...e){let t=le(r,...e);if(!t)return;let n=M({type:"Extension",value:t},"value[x]");if(n)return Array.isArray(n)?n[0].value:n.value}function le(r,...e){let t=r;for(let n=0;n<e.length&&t;n++)t=t?.extension?.find(i=>i.url===e[n]);return t}function yt(r,e){let t=Vn(r);return JSON.stringify(t,null,e?2:void 0)??""}function Vn(r){if(!(r==null||r===""))return typeof r=="object"?Array.isArray(r)?Qa(r):za(r):r}function Qa(r){let e=r.length;if(e===0)return;let t,n=0;for(let i=0;i<e;i++){let o=r[i],s=Vn(o);s!==o&&!t&&(t=Array.from(r)),s===void 0?t&&(t[i]=null):(t&&(t[i]=s),n++)}if(n!==0)return t??r}function za(r){let e,t=0;for(let n in r){let i=r[n],o=Vn(i);o!==i&&!e&&(e={...r}),o===void 0?e&&delete e[n]:(e&&(e[n]=o),t++)}if(t!==0)return e??r}function P(r){if(r==null)return!0;let e=typeof r;return e==="string"||e==="object"?!re(r):!1}function re(r){if(r==null)return!1;let e=typeof r;return e==="string"&&r!==""||e==="object"&&("length"in r&&r.length>0||Object.keys(r).length>0)}function Ja(r){if(!r)return;let e=r.length-1;for(;e>=0&&P(r[e]);)e--;return e>=0?r.slice(0,e+1):void 0}function de(r,e,t){return r===e||P(r)&&P(e)?!0:P(r)||P(e)?!1:Array.isArray(r)&&Array.isArray(e)?Ka(r,e):Array.isArray(r)||Array.isArray(e)?!1:R(r)&&R(e)?Ya(r,e,t):(R(r)||R(e),!1)}function Ka(r,e){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(!de(r[t],e[t]))return!1;return!0}function Ya(r,e,t){let n=new Set;for(let i of Object.keys(r))n.add(i);for(let i of Object.keys(e))n.add(i);t==="meta"&&(n.delete("versionId"),n.delete("lastUpdated"),n.delete("author"));for(let i of n){let o=r[i],s=e[i];if(!de(o,s,i))return!1}return!0}function He(r,e){return P(r)?!0:P(e)?!1:Array.isArray(r)&&Array.isArray(e)?Xa(r,e):Array.isArray(r)||Array.isArray(e)?!1:R(r)&&R(e)?Za(r,e):R(r)||R(e)?!1:r===e}function Xa(r,e){return e.every(t=>r.some(n=>He(n,t)))}function Za(r,e){return Object.entries(e).every(([t,n])=>t in r&&He(r[t],n))}function be(r){return r===void 0?r:JSON.parse(JSON.stringify(r))}function ec(r){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(r)}function R(r){return r!==null&&typeof r=="object"}function tc(r){return r.every(De)}function De(r){return typeof r=="string"}function xr(r){return R(r)&&"code"in r&&typeof r.code=="string"}function vr(r){return R(r)&&"coding"in r&&Array.isArray(r.coding)&&r.coding.every(xr)}function rc(r,e){for(let t of r??y)for(let n of t.coding??y)if(n.system===e)return n.code}function so(r,e){let[t,n]=Me(e,"|",2);return n===void 0?r.code===e:t===""?r.system===void 0&&r.code===n:n===""?r.system===t:r.system===t&&r.code===n}function nc(r,e){return(r.coding??y).some(t=>so(t,e))}function ao(r){return R(r)&&"text"in r&&typeof r.text=="string"}var co=[];for(let r=0;r<256;r++)co.push(r.toString(16).padStart(2,"0"));function Dn(r){let e=_n(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=co[t[i]];return n.join("")}function Mn(r){let e=_n(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=String.fromCodePoint(t[i]);return window.btoa(n.join(""))}function _n(r){return ArrayBuffer.isView(r)?r.buffer:r}function _(r){return r?r.charAt(0).toUpperCase()+r.substring(1):""}function ic(r){return r===r.toLowerCase()&&r!==r.toUpperCase()}function br(r){return r.length>0&&r.startsWith(r[0].toUpperCase())}function pe(r,e){let t=r+".";if(e.startsWith(t))return e.slice(t.length)}function Tr(r,e){return r.coding?.find(t=>t.system===e)?.code}function oc(r,e,t){r.coding??=[];let n=r.coding.find(i=>i.system===e);n?n.code=t:r.coding.push({system:e,code:t})}function sc(r,e,t,n){return r.qualifiedInterval?.find(i=>lo(i,e)&&lc(i,t,r.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function ac(r,e,t){return uo(r,e,t)[0]}function uo(r,e,t){return r.qualifiedInterval?.filter(n=>lo(n,e)&&(!t||t.includes(n.condition)))??[]}function lo(r,e){return cc(r,e)&&uc(r,e)}function cc(r,e){return!r.gender||r.gender===e.gender}function uc(r,e){return!r.age||Ln(gt(e.birthDate).years,r.age)}function lc(r,e,t){return!!r.range&&Ln(e,r.range,t)}function Ln(r,e,t){return(e.low?.value===void 0||fo(r,e.low.value,t))&&(e.high?.value===void 0||po(r,e.high.value,t))}function dc(r,e){return Number.parseFloat(r.toFixed(e))}function pc(r,e,t){return te(r,t)===te(e,t)}function fc(r,e,t){return te(r,t)<te(e,t)}function mc(r,e,t){return te(r,t)>te(e,t)}function po(r,e,t){return te(r,t)<=te(e,t)}function fo(r,e,t){return te(r,t)>=te(e,t)}function te(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}function hc(r,e,t){return r.find(n=>typeof e=="string"?Tr(n.code||{},t)===e:Tr(n.code||{},t)===Tr(e,t))}function gc(r){return Array.isArray(r)?r[0]:r}var Er=(r,e)=>new Promise((t,n)=>{e?.signal?.throwIfAborted();let i=setTimeout(t,r);e?.signal?.addEventListener("abort",()=>{clearTimeout(i),n(e.signal?.reason)},{once:!0})});function Me(r,e,t){let n=[];for(let i=0;i<t-1;i++){let o=r.indexOf(e);if(o<0)break;n.push(r.slice(0,o)),r=r.slice(o+e.length)}return n.push(r),n}function Fn(r){let e,t=!1;return function(){return t||(e=r(),t=!0),e}}function J(r,e){return r?(r.push(e),r):[e]}function xt(r){return r.sort((e,t)=>e.localeCompare(t))}function Rr(r){return r.endsWith("/")?r:r+"/"}function mo(r){return r.startsWith("/")?r.slice(1):r}function N(r,e){return new URL(mo(e),Rr(r.toString())).toString()}function Nn(r,e){return N(r,e).toString().replace("http://","ws://").replace("https://","wss://")}function Un(r){return typeof r=="object"&&!Array.isArray(r)&&!(r instanceof URLSearchParams)&&(r=Object.fromEntries(Object.entries(r).filter(e=>e[1]!==void 0))),new URLSearchParams(r).toString()}var ho=/^(([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 yc(r){return ho.test(r)}function xc(r,e){return r?.meta?.profile?.includes(e)||(r.meta=r.meta??{},r.meta.profile=r.meta.profile??[],r.meta.profile.push(e)),r}function vc(r,e){return new Map(r.entry?.filter(n=>!!n.resource).map(n=>[oo(n.resource,e),n.resource]).filter(([n])=>n!==void 0))}function Tc(r,e){if(r?.meta?.profile?.includes(e)){let t=r.meta.profile.indexOf(e);r.meta.profile.splice(t,1)}return r}function Sc(r,e){let t=[];if(!r)return t;for(let n=0;n<r.length;n++){let i=e(r[n],n);Array.isArray(i)?t.push(...i):i!==void 0&&t.push(i)}return t}function bc(r){return r.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("\u201C","&ldquo;").replaceAll("\u201D","&rdquo;").replaceAll("\u2018","&lsquo;").replaceAll("\u2019","&rsquo;").replaceAll("\u2026","&hellip;")}function Ec(r){return r!=null}var y=Object.freeze([]),Rc=()=>{};function Bn(r){if(!r)return"";switch(r.type){case"Address":return yo(r.value);case"CodeableConcept":return Qe(r.value);case"Coding":return qn(r.value);case"ContactPoint":return r.value.value;case"HumanName":return Je(r.value);case"Quantity":return fe(r.value);case"Reference":return go(r.value);default:return r.value?.toString()??""}}function go(r){return r?r.display??r.reference??yt(r):""}function yo(r,e){if(!r)return"";let t=[];if(r.line&&t.push(...r.line),r.city||r.state||r.postalCode){let n=[];r.city&&n.push(r.city),r.state&&n.push(r.state),r.postalCode&&n.push(r.postalCode),t.push(n.join(", "))}return r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.join(e?.lineSeparator??", ").trim()}function Je(r,e){if(!r)return"";let t=[];if(r.prefix&&e?.prefix!==!1&&t.push(...r.prefix),r.given&&t.push(...r.given),r.family&&t.push(r.family),r.suffix&&e?.suffix!==!1&&t.push(...r.suffix),r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.length===0){let n=_e(r.text);if(n)return n}return t.join(" ").trim()}function Cc(r){let e=[];return r.given&&e.push(...r.given),e.join(" ").trim()}function Pc(r){return _e(r.family)??""}function vt(r){return r instanceof Date&&!Number.isNaN(r.getTime())}function Ac(r,e,t){if(!r)return"";let n=new Date(r);return vt(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...t})):""}function wc(r,e,t){if(!r)return"";let n=new Date("2000-01-01T"+r+"Z");return vt(n)?n.toLocaleTimeString(e,t):""}function xo(r,e,t){if(!r)return"";let[n=0,i=0,o=0]=r.split(":").map(Number),s=new Date(Date.UTC(1970,0,1,n,i,o));return vt(s)?new Intl.DateTimeFormat(e,{hour:"numeric",minute:"2-digit",second:o===0?void 0:"numeric",...t,timeZone:"UTC"}).format(s):""}function Cr(r,e,t){if(!r)return"";let n=new Date(r);return vt(n)?n.toLocaleString(e,t):""}function Oc(r,e,t){return!r||!r.start&&!r.end?"":Cr(r.start,e,t)+" - "+Cr(r.end,e,t)}var Ic={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},kc={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},Vc={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function Dc(r){if(!r)return"";let e=[];return Mc(e,r.repeat),r.event&&e.push(r.event.map(t=>Cr(t)).join(", ")),_(e.join(" ").trim())}function Mc(r,e){if(!e?.periodUnit)return;let t=e.frequency??1,n=e.period??1,i=e.periodUnit;t===1&&n===1?r.push(Ic[i]):(t===1?r.push("once"):r.push(t+" times"),n===1?r.push("per "+kc[i]):r.push("per "+n+" "+Vc[i])),e.dayOfWeek&&r.push("on "+e.dayOfWeek.map(_).join(", ")),e.timeOfDay&&r.push("at "+e.timeOfDay.map(o=>xo(o)).join(", "))}function _c(r,e,t=!1){if(t&&e===void 0)throw new Error("Precision must be specified for exclusive ranges");let n=r?.low&&{...r.low,comparator:void 0},i=r?.high&&{...r.high,comparator:void 0};return n?.value===void 0&&i?.value===void 0?"":n?.value!==void 0&&i?.value===void 0?t&&e!==void 0?(n.value=Nc(n.value,e),`> ${fe(n,e)}`):`>= ${fe(n,e)}`:n?.value===void 0&&i?.value!==void 0?t&&e!==void 0?(i.value=Fc(i.value,e),`< ${fe(i,e)}`):`<= ${fe(i,e)}`:(n?.unit===i?.unit&&delete n?.unit,`${fe(n,e)} - ${fe(i,e)}`)}function fe(r,e){if(!r)return"";let t=[];return r.comparator&&(t.push(r.comparator),t.push(" ")),r.value!==void 0&&(e!==void 0?t.push(r.value.toFixed(e)):t.push(r.value)),r.unit&&(r.unit!=="%"&&t.at(-1)!==" "&&t.push(" "),t.push(r.unit)),t.join("").trim()}function Lc(r){return r?.value===void 0?"":r.value.toLocaleString(void 0,{style:"currency",currency:r.currency??"USD",currencyDisplay:"narrowSymbol"})}function Qe(r){if(!r)return"";let e=_e(r.text);return e||(r.coding?r.coding.map(t=>qn(t)).join(", "):"")}function qn(r,e){let t=_e(r?.display);if(t){let n=e?_e(r?.code):void 0;return`${t}${n?" ("+n+")":""}`}return _e(r?.code)??""}function vo(r){if(!r)return"";let e=[];if(r.valueQuantity)e.push(fe(r.valueQuantity));else if(r.valueCodeableConcept)e.push(Qe(r.valueCodeableConcept));else{let t=_e(r.valueString);t&&e.push(t)}return"component"in r&&e.push(r.component.map(t=>vo(t)).join(" / ")),e.join(" / ").trim()}function _e(r){return typeof r=="string"?r:void 0}function Fc(r,e,t=1){return(To(r,e)+t)*Math.pow(10,-e)}function Nc(r,e,t=1){return(To(r,e)-t)*Math.pow(10,-e)}function To(r,e){return e===void 0?r:Math.round(r*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 Uc(r){for(let e of r.entry??y){let t=e.resource;t.resourceType==="SearchParameter"&&Pr(t)}}function vn(r){let e=Array.isArray(r)?r:r.entry?.map(t=>t.resource)??[];for(let t of e)t?.resourceType==="StructureDefinition"&&t.kind==="resource"&&bo(t.type)}function bo(r){let e=W.types[r];return e||(e={searchParamsDetails:{}},W.types[r]=e),!e.searchParams&&r!=="Binary"&&(e.searchParams={_id:{base:[r],code:"_id",type:"token",expression:r+".id"},_lastUpdated:{base:[r],code:"_lastUpdated",type:"date",expression:r+".meta.lastUpdated"},_compartment:{base:[r],code:"_compartment",type:"reference",expression:r+".meta.compartment"},_profile:{base:[r],code:"_profile",type:"uri",expression:r+".meta.profile"},_security:{base:[r],code:"_security",type:"token",expression:r+".meta.security"},_source:{base:[r],code:"_source",type:"uri",expression:r+".meta.source"},_tag:{base:[r],code:"_tag",type:"token",expression:r+".meta.tag"},_project:{base:[r],code:"_project",type:"token",expression:r+".meta.project"}}),e}function Pr(r){for(let e of r.base??y){let t=bo(e);t.searchParams||(t.searchParams={}),t.searchParams[r.code]=r}}function ar(r){let e=r.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?Eo((r.base?.path??r.path)?.split(".")):e}function Eo(r){return r.length===1?r[0]:r.map(_).join("")}function dr(r){return r.kind==="resource"&&r.name!=="Resource"&&r.name!=="DomainResource"}function Bc(){return Object.values(hn()).filter(dr).map(r=>r.name)}function qc(r){return W.types[r]?.searchParams}function Wc(r,e){return W.types[r]?.searchParams?.[e]}function jc(r){let e=r.replaceAll("[x]","").split(".").pop();return Ro(e)}function Ro(r){let e;return r.length<100?e=r.match(/[A-Z]+(?![a-z])|[A-Z]?[a-z]+|\d+/g)??[]:e=r.split(/(?=[A-Z])/),e.map(Hc).join(" ").replace("_"," ").replaceAll(/\s+/g," ")}var $c=new Set(["CDS","ID","IP","PKCE","JWKS","URI","URL","OMB","UDI"]);function Hc(r){let e=r.toUpperCase();return r===e?r:$c.has(e)?e:e.charAt(0)+r.slice(1)}function ht(r,e,t){let n=$e(r,t);if(n)return Co(n.elements,e)}function Co(r,e){let t=r[e]??r[e+"[x]"];if(t)return t;for(let n=0;n<e.length;n++){let i=e[n];if(i>="A"&&i<="Z"){let o=e.slice(0,n)+"[x]",s=r[o];if(s)return s}}}function Gc(r){return!!(r&&typeof r=="object"&&"type"in r&&"value"in r)}function V(r,e){return!(!r||typeof r!="object"||!("resourceType"in r)||e&&r.resourceType!==e)}function H(r,e){return r&&typeof r=="object"&&"reference"in r&&typeof r.reference=="string"?e?r.reference.match(new RegExp(`^${e}(/|\\?)`))!==null:!0:!1}var W={types:{}};function Wn(r){switch(r.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 r.value;case d.Identifier:return`${r.value.system??""}|${r.value.value}`;case d.Coding:return So(r.value);case d.CodeableConcept:return r.value.coding?.map(So).join(",")??r.value.text;case d.HumanName:return r.value.text?r.value.text:Je(r.value);case d.unsignedInt:case d.positiveInt:case d.integer:case d.decimal:return r.value.toString();case d.boolean:return r.value?"true":"false";case d.Extension:return r.value.url;case d.ContactPoint:return r.value.value;case d.Quantity:case d.Age:case d.Count:case d.Duration:return`${r.value.value}|${r.value.system??""}|${r.value.code??r.value.unit??""}`;case d.Reference:return r.value.reference;default:return ze(r.value)?w(r.value):JSON.stringify(r)}}function So(r){return r?`${r.system??""}|${r.code}`:""}function Ke(r){if(r.startsWith("T"))return r+"T00:00:00.000Z".substring(r.length);if(r.length<=10)return r;try{return new Date(r).toISOString()}catch{return r}}var me=()=>[],L={empty:(r,e)=>h(e.every(t=>P(t.value))),hasValue:(r,e)=>h(e.length!==0),exists:(r,e,t)=>t?h(e.some(n=>q(t.eval(r,[n])))):h(e.length>0&&e.every(n=>!P(n.value))),all:(r,e,t)=>h(e.every(n=>q(t.eval(r,[n])))),allTrue:(r,e)=>{for(let t of e)if(!t.value)return h(!1);return h(!0)},anyTrue:(r,e)=>{for(let t of e)if(t.value)return h(!0);return h(!1)},allFalse:(r,e)=>{for(let t of e)if(t.value)return h(!1);return h(!0)},anyFalse:(r,e)=>{for(let t of e)if(!t.value)return h(!0);return h(!1)},subsetOf:(r,e,t)=>{if(e.length===0)return h(!0);let n=t.eval(r,Le(r));return n.length===0?h(!1):h(e.every(i=>n.some(o=>o.value===i.value)))},supersetOf:(r,e,t)=>{let n=t.eval(r,Le(r));return n.length===0?h(!0):e.length===0?h(!1):h(n.every(i=>e.some(o=>o.value===i.value)))},count:(r,e)=>[{type:d.integer,value:e.length}],distinct:(r,e)=>{let t=[];for(let n of e)t.some(i=>i.value===n.value)||t.push(n);return t},isDistinct:(r,e)=>h(e.length===L.distinct(r,e).length),where:(r,e,t)=>e.filter(n=>q(t.eval(r,[n]))),select:(r,e,t)=>e.flatMap(n=>t.eval({parent:r,variables:{$this:n}},[n])),repeat:me,ofType:(r,e,t)=>e.filter(n=>n.type===t.name),single:(r,e)=>{if(e.length>1)throw new Error("Expected input length one for single()");return e.length===0?[]:e.slice(0,1)},first:(r,e)=>e.length===0?[]:e.slice(0,1),last:(r,e)=>e.length===0?[]:e.slice(-1,e.length),tail:(r,e)=>e.length===0?[]:e.slice(1,e.length),skip:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new TypeError("Expected a number for skip(num)");return n>=e.length?[]:n<=0?e:e.slice(n,e.length)},take:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new TypeError("Expected a number for take(num)");return n<=0?[]:e.slice(0,n)},intersect:(r,e,t)=>{if(!t)return e;let n=t.eval(r,Le(r)),i=[];for(let o of e)!i.some(s=>s.value===o.value)&&n.some(s=>s.value===o.value)&&i.push(o);return i},exclude:(r,e,t)=>{if(!t)return e;let n=t.eval(r,Le(r)),i=[];for(let o of e)n.some(s=>s.value===o.value)||i.push(o);return i},union:(r,e,t)=>{if(!t)return e;let n=t.eval(r,Le(r));return pt([...e,...n])},combine:(r,e,t)=>{if(!t)return e;let n=t.eval(r,Le(r));return[...e,...n]},htmlChecks:(r,e,t)=>[S(!0)],iif:(r,e,t,n,i)=>{let o=t.eval(r,e);if(o.length>1||o.length===1&&typeof o[0].value!="boolean")throw new Error("Expected criterion to evaluate to a Boolean");return q(o)?n.eval(r,e):i?i.eval(r,e):[]},toBoolean:(r,e)=>{if(e.length===0)return[];let[{value:t}]=ie(e,1);if(typeof t=="boolean")return[{type:d.boolean,value:t}];if(typeof t=="number"&&(t===0||t===1))return h(!!t);if(typeof t=="string"){let n=t.toLowerCase();if(["true","t","yes","y","1","1.0"].includes(n))return h(!0);if(["false","f","no","n","0","0.0"].includes(n))return h(!1)}return[]},convertsToBoolean:(r,e)=>e.length===0?[]:h(L.toBoolean(r,e).length===1),toInteger:(r,e)=>{if(e.length===0)return[];let[{value:t}]=ie(e,1);return typeof t=="number"?[{type:d.integer,value:t}]:typeof t=="string"&&/^[+-]?\d+$/.exec(t)?[{type:d.integer,value:Number.parseInt(t,10)}]:typeof t=="boolean"?[{type:d.integer,value:t?1:0}]:[]},convertsToInteger:(r,e)=>e.length===0?[]:h(L.toInteger(r,e).length===1),toDate:(r,e)=>{if(e.length===0)return[];let[{value:t}]=ie(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:d.date,value:Ke(t)}]:[]},convertsToDate:(r,e)=>e.length===0?[]:h(L.toDate(r,e).length===1),toDateTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=ie(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:d.dateTime,value:Ke(t)}]:[]},convertsToDateTime:(r,e)=>e.length===0?[]:h(L.toDateTime(r,e).length===1),toDecimal:(r,e)=>{if(e.length===0)return[];let[{value:t}]=ie(e,1);return typeof t=="number"?[{type:d.decimal,value:t}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(t)?[{type:d.decimal,value:Number.parseFloat(t)}]:typeof t=="boolean"?[{type:d.decimal,value:t?1:0}]:[]},convertsToDecimal:(r,e)=>e.length===0?[]:h(L.toDecimal(r,e).length===1),toQuantity:(r,e)=>{if(e.length===0)return[];let[{value:t}]=ie(e,1);return I(t)?[{type:d.Quantity,value:t}]:typeof t=="number"?[{type:d.Quantity,value:{value:t,unit:"1"}}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(t)?[{type:d.Quantity,value:{value:Number.parseFloat(t),unit:"1"}}]:typeof t=="boolean"?[{type:d.Quantity,value:{value:t?1:0,unit:"1"}}]:[]},convertsToQuantity:(r,e)=>e.length===0?[]:h(L.toQuantity(r,e).length===1),toString:(r,e)=>{if(e.length===0)return[];let[{value:t}]=ie(e,1);return t==null?[]:I(t)?[{type:d.string,value:`${t.value} '${t.unit}'`}]:[{type:d.string,value:t.toString()}]},convertsToString:(r,e)=>e.length===0?[]:h(L.toString(r,e).length===1),toTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=ie(e,1);if(typeof t=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(t);if(n)return[{type:d.time,value:Ke("T"+n[1])}]}return[]},convertsToTime:(r,e)=>e.length===0?[]:h(L.toTime(r,e).length===1),indexOf:(r,e,t)=>G((n,i)=>n.indexOf(i),r,e,t),substring:(r,e,t,n)=>G((i,o,s)=>{let a=o,u=s?a+s:i.length;return a<0||a>=i.length?void 0:i.substring(a,u)},r,e,t,n),startsWith:(r,e,t)=>G((n,i)=>n.startsWith(i),r,e,t),endsWith:(r,e,t)=>G((n,i)=>n.endsWith(i),r,e,t),contains:(r,e,t)=>G((n,i)=>n.includes(i),r,e,t),upper:(r,e)=>G(t=>t.toUpperCase(),r,e),lower:(r,e)=>G(t=>t.toLowerCase(),r,e),replace:(r,e,t,n)=>G((i,o,s)=>i.replaceAll(o,s),r,e,t,n),matches:(r,e,t)=>G((n,i)=>!!new RegExp(i).exec(n),r,e,t),replaceMatches:(r,e,t,n)=>G((i,o,s)=>i.replaceAll(new RegExp(o,"g"),s.replaceAll(/\$\{(\w+)\}/g,"$<$1>")),r,e,t,n),length:(r,e)=>G(t=>t.length,r,e),toChars:(r,e)=>G(t=>t?t.split(""):void 0,r,e),encode:me,decode:me,escape:me,unescape:me,trim:me,split:me,join:(r,e,t)=>{let n=t?.eval(r,Le(r))[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:(r,e)=>ne(Math.abs,r,e),ceiling:(r,e)=>ne(Math.ceil,r,e),exp:(r,e)=>ne(Math.exp,r,e),floor:(r,e)=>ne(Math.floor,r,e),ln:(r,e)=>ne(Math.log,r,e),log:(r,e,t)=>ne((n,i)=>Math.log(n)/Math.log(i),r,e,t),power:(r,e,t)=>ne(Math.pow,r,e,t),round:(r,e,...t)=>ne((n,i=0)=>{if(typeof i!="number"||i<0)throw new Error("Invalid precision provided to round()");let o=Math.pow(10,i);return Math.round(n*o)/o},r,e,...t),sqrt:(r,e)=>ne(Math.sqrt,r,e),truncate:(r,e)=>ne(t=>Math.trunc(t),r,e),children:me,descendants:me,trace:(r,e,t)=>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:(r,e,t,n,i)=>{let o=L.toDateTime(r,t.eval(r,e));if(o.length===0)throw new Error("Invalid start date");let s=L.toDateTime(r,n.eval(r,e));if(s.length===0)throw new Error("Invalid end date");let a=i.eval(r,e)[0]?.value;if(a!=="years"&&a!=="months"&&a!=="days")throw new Error("Invalid units");let u=gt(o[0].value,s[0].value);return[{type:d.Quantity,value:{value:u[a],unit:a}}]},is:(r,e,t)=>{let n="";return t instanceof U?n=t.name:t instanceof K&&(n=t.left.name+"."+t.right.name),n?e.map(i=>({type:d.boolean,value:ft(i,n)})):[]},not:(r,e)=>L.toBoolean(r,e).map(t=>({type:d.boolean,value:!t.value})),resolve:(r,e)=>e.map(t=>{let n=t.value,i;if(typeof n=="string")i=n;else if(typeof n=="object"){let o=n;if(o.resource)return S(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(t=>!!t.value),as:(r,e,t)=>{let n=t.name,i=k(e,n);return i?[i]:[]},type:(r,e)=>e.map(({value:t})=>typeof t=="boolean"?{type:d.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof t=="number"?{type:d.BackboneElement,value:{namespace:"System",name:"Integer"}}:V(t)?{type:d.BackboneElement,value:{namespace:"FHIR",name:t.resourceType}}:{type:d.BackboneElement,value:null}),conformsTo:(r,e,t)=>{let n=t.eval(r,e)[0].value;if(!n.startsWith("http://hl7.org/fhir/StructureDefinition/"))throw new Error("Expected a StructureDefinition URL");let i=n.replace("http://hl7.org/fhir/StructureDefinition/","");return e.map(o=>({type:d.boolean,value:o.value?.resourceType===i}))},getResourceKey:(r,e)=>{let t=e[0].value;return t?.id?[{type:d.id,value:t.id}]:[]},getReferenceKey:(r,e,t)=>{let n=e[0].value;if(!n?.reference)return[];let i="";return t instanceof U&&(i=t.name),i&&!n.reference.startsWith(i+"/")?[]:[{type:d.id,value:Se(n)}]},extension:(r,e,t)=>{let n=t.eval(r,e)[0].value,i=e?.[0]?.value;if(i){let o=le(i,n);if(o)return[{type:d.Extension,value:o}]}return[]}};function G(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=ie(t,1);if(typeof i!="string")throw new TypeError("String function cannot be called with non-string");let o=n.map(a=>a?.eval(e,t)[0]?.value),s=r(i,...o);return s===void 0?[]:Array.isArray(s)?s.map(S):[S(s)]}function ne(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=ie(t,1),o=I(i),s=o?i.value:i;if(typeof s!="number")throw new TypeError("Math function cannot be called with non-number");let a=r(s,...n.map(p=>p.eval(e,t)[0]?.value)),u=o?d.Quantity:t[0].type,l=o?{...i,value:a}:a;return[{type:u,value:l}]}function ie(r,e){if(r.length!==e)throw new Error(`Expected ${e} arguments`);for(let t of r)if(t==null)throw new Error("Expected non-null argument");return r}function Le(r){let e=r;for(;e.parent?.variables.$this;)e=e.parent;return[e.variables.$this]}var he=class{constructor(e,t){c(this,"original");c(this,"child");this.original=e,this.child=t}eval(e,t){try{if(t.length>0){let n=[];for(let i of t)n.push(this.child.eval({parent:e,variables:{$this:i}},[i]));return n.flat()}else return this.child.eval(e,[])}catch(n){throw new Error(`FhirPathError on "${this.original}": ${n}`,{cause:n})}}toString(){return this.child.toString()}},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()}},U=class{constructor(e){c(this,"name");this.name=e}eval(e,t){if(this.name==="$this")return t;let n=this.getVariable(e);if(n)return[n];if(this.name.startsWith("%"))throw new Error(`Undefined variable ${this.name}`);return t.flatMap(i=>this.evalValue(i)).filter(i=>i?.value!==void 0)}getVariable(e){let t=e.variables[this.name];if(t!==void 0)return t;if(e.parent)return this.getVariable(e.parent)}evalValue(e){let t=e.value;if(!(!t||typeof t!="object"))return V(t,this.name)?e:fr(e,this.name)}toString(){return this.name}},Tt=class{eval(){return[]}toString(){return"{}"}},St=class extends ot{constructor(t,n,i){super(t,n);c(this,"impl");this.impl=i}eval(t,n){return this.impl(this.child.eval(t,n))}toString(){return this.operator+this.child.toString()}},ge=class extends E{constructor(e,t){super("as",e,t)}eval(e,t){return L.as(e,this.left.eval(e,t),this.right)}},F=class extends E{constructor(t,n,i,o){super(t,n,i);c(this,"impl");this.impl=o}eval(t,n){let i=this.left.eval(t,n),o=this.right.eval(t,n);if(i.length<1||o.length<1)return[];let s=k(i)?.value,a=k(o)?.value,u=I(s)?s.value:s,l=I(a)?a.value:a,p=this.impl(u,l);return typeof p=="boolean"?h(p):I(s)?[{type:d.Quantity,value:{...s,value:p}}]:[S(p)]}},Po=Object.freeze({type:"string",value:""}),bt=class extends E{constructor(e,t){super("&",e,t)}eval(e,t){let n=k(this.left.eval(e,t))??Po,i=k(this.right.eval(e,t))??Po;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}]}},Et=class extends E{constructor(e,t){super("contains",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return h(n.some(o=>o.value===i[0].value))}},Rt=class extends E{constructor(e,t){super("in",e,t)}eval(e,t){let n=k(this.left.eval(e,t)),i=this.right.eval(e,t);return n?h(i.some(o=>Ge(n,o)[0].value)):[]}},K=class extends E{constructor(e,t){super(".",e,t)}eval(e,t){return this.right.eval(e,this.left.eval(e,t))}toString(){return`${this.left.toString()}.${this.right.toString()}`}},Ee=class extends E{constructor(e,t){super("|",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return pt([...n,...i])}},Ct=class extends E{constructor(e,t){super("=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Pn(n,i)}},Pt=class extends E{constructor(e,t){super("!=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return An(n,i)}},At=class extends E{constructor(e,t){super("~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return yr(n,i)}},wt=class extends E{constructor(e,t){super("!~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Cn(yr(n,i))}},Re=class extends E{constructor(e,t){super("is",e,t)}eval(e,t){let n=this.left.eval(e,t);if(n.length!==1)return[];let i=this.right.name;return h(ft(n[0],i))}},Ot=class extends E{constructor(e,t){super("and",e,t)}eval(e,t){let n=k(this.left.eval(e,t),"boolean"),i=k(this.right.eval(e,t),"boolean");return n?.value===!0&&i?.value===!0?h(!0):n?.value===!1||i?.value===!1?h(!1):[]}},It=class extends E{constructor(e,t){super("or",e,t)}eval(e,t){let n=k(this.left.eval(e,t),"boolean"),i=k(this.right.eval(e,t),"boolean");return n?.value===!1&&i?.value===!1?h(!1):n?.value||i?.value?h(!0):[]}},kt=class extends E{constructor(e,t){super("xor",e,t)}eval(e,t){let n=k(this.left.eval(e,t),"boolean"),i=k(this.right.eval(e,t),"boolean");return!n||!i?[]:h(n.value!==i.value)}},Vt=class extends E{constructor(e,t){super("implies",e,t)}eval(e,t){let n=k(this.left.eval(e,t),"boolean"),i=k(this.right.eval(e,t),"boolean");return i?.value===!0||n?.value===!1?h(!0):!n||!i?[]:h(!1)}},Y=class{constructor(e,t){c(this,"name");c(this,"args");this.name=e,this.args=t}eval(e,t){let n=L[this.name];if(!n)throw new Error("Unrecognized function: "+this.name);return n(e,t,...this.args)}toString(){return`${this.name}(${this.args.map(e=>e.toString()).join(", ")})`}},Ce=class{constructor(e,t){c(this,"left");c(this,"expr");this.left=e,this.expr=t}eval(e,t){let n=this.expr.eval(e,t);if(n.length!==1)return[];let i=n[0].value;if(typeof i!="number")throw new Error("Invalid indexer expression: should return integer}");let o=this.left.eval(e,t);return i in o?[o[i]]:[]}toString(){return`${this.left.toString()}[${this.expr.toString()}]`}};var Qc=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],zc={"'":"'",'"':'"',"`":"`",r:"\r",n:`
2
- `,t:" ",f:"\f","\\":"\\"},ye=class{constructor(e,t,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=t,this.operators=n,this.dateTimeLiterals=!!i?.dateTimeLiterals,this.symbolRegex=i?.symbolRegex??/[$\w%]/}tokenize(){for(;this.pos.index<this.str.length;){let e=this.consumeToken();e&&this.result.push(e)}return this.result}prevToken(){return this.result.slice(-1)[0]}peekToken(){this.mark();let e=this.consumeToken();return this.reset(),e}consumeToken(){this.consumeWhitespace();let e=this.curr();if(!e)return;this.mark();let t=this.peek();return e==="/"&&t==="*"?this.consumeMultiLineComment():e==="/"&&t==="/"?this.consumeSingleLineComment():e==="'"||e==='"'||e==="`"?this.consumeString(e):e==="@"?this.consumeDateTime():/\d/.exec(e)?this.consumeNumber():/\w/.exec(e)?this.consumeSymbol():(e==="$"||e==="%")&&/\w/.exec(t)?this.consumeSymbol():(e==="$"||e==="%")&&(t==="'"||t==='"'||t==="`")?this.consumeQuotedSymbol(t):this.consumeOperator()}consumeWhitespace(){this.consumeWhile(()=>/\s/.exec(this.curr()))}consumeMultiLineComment(){let e=this.pos.index;return this.consumeWhile(()=>this.curr()!=="*"||this.peek()!=="/"),this.advance(),this.advance(),this.buildToken("Comment",this.str.substring(e,this.pos.index))}consumeSingleLineComment(){return this.buildToken("Comment",this.consumeWhile(()=>this.curr()!==`
3
- `))}consumeString(e){this.advance();let t="",n;for(;n=this.consumeChar(e);)t+=n;let i=this.buildToken(e==="`"?"Symbol":"String",t);return this.advance(),i}consumeChar(e){let t=this.curr();if(t==="\\"){this.advance();let n=this.curr(),i=zc[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 t===e||!t?"":(this.advance(),t)}consumeQuotedSymbol(e){this.mark();let t=this.pos.index;this.advance(),this.consumeString(e);let n=this.str.substring(t,this.pos.index);return this.buildToken("Symbol",n)}consumeDateTime(){this.advance();let e=this.pos.index;this.consumeWhile(()=>/[\d-]/.exec(this.curr()));let t=!1,n=!1;if(this.curr()==="T"&&(t=!0,this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())),this.curr()==="."&&/\d/.exec(this.peek())&&(this.advance(),this.consumeWhile(()=>/\d/.exec(this.curr()))),this.curr()==="Z"?(n=!0,this.advance()):(this.curr()==="+"||this.curr()==="-")&&(n=!0,this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())))),this.pos.index===e)throw new Error("Invalid DateTime literal");let i=this.str.substring(e,this.pos.index);return i.endsWith("T")?i=i.substring(0,i.length-1):!i.startsWith("T")&&t&&!n&&(i+="Z"),this.buildToken("DateTime",i)}consumeNumber(){let e=this.pos.index,t="Number";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===" ")Jc(this.peekToken())&&(t="Quantity",this.consumeToken());else if(n&&/[a-zA-Z_$]/.exec(n))return this.pos.index=e-1,this.consumeString(" ");return this.buildToken(t,this.str.substring(e,this.pos.index))}consumeSymbol(){let e=this.consumeWhile(()=>this.symbolRegex.exec(this.curr()));return this.prevToken()?.value!=="."&&this.keywords.includes(e)?this.buildToken(e,e):this.buildToken("Symbol",e)}consumeOperator(){let e=this.curr(),t=this.peek(),n=e+t;return this.operators.includes(n)?(this.advance(),this.advance(),this.buildToken(n,n)):(this.advance(),this.buildToken(e,e))}consumeWhile(e){let t=this.pos.index;for(;this.pos.index<this.str.length&&e();)this.advance();return this.str.substring(t,this.pos.index)}curr(){return this.str[this.pos.index]}peek(){return this.str[this.pos.index+1]??""}mark(){this.markStack.push({...this.pos})}reset(){let e=this.markStack.pop();if(!e)throw new Error("No mark to reset to");this.pos.index=e.index,this.pos.line=e.line,this.pos.column=e.column}advance(){this.pos.index++,this.curr()===`
4
- `?(this.pos.line++,this.pos.column=0):this.pos.column++}buildToken(e,t){let n=this.markStack.pop();if(!n)throw new Error("No mark for token");return{id:e,value:t,...n}}};function Jc(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&Qc.includes(r.value)))}var Dt=["true","false"],Mt=["!=","!~","<=",">=","{}","->"];function Ao(r){return new ye(r,Dt,Mt).tokenize()}var T={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},Kc={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},Yc={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new Ce(e,t)},precedence:T.Indexer},Xc={parse(r,e){if(!(e instanceof U))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new Y(e.name,t)},precedence:T.FunctionCall};function Zc(r){let e=r.split(" "),t=Number.parseFloat(e[0]),n=e[1];return n?.startsWith("'")&&n.endsWith("'")?n=n.substring(1,n.length-1):n="{"+n+"}",{value:t,unit:n}}function Ye(){return new st().registerPrefix("String",{parse:(r,e)=>new j({type:d.string,value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new j({type:d.dateTime,value:Ke(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new j({type:d.Quantity,value:Zc(e.value)})}).registerPrefix("Number",{parse:(r,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:(r,e)=>new U(e.value)}).registerPrefix("{}",{parse:()=>new Tt}).registerPrefix("(",Kc).registerInfix("[",Yc).registerInfix("(",Xc).prefix("+",T.UnaryAdd,(r,e)=>new St("+",e,t=>t)).prefix("-",T.UnarySubtract,(r,e)=>new F("-",e,e,(t,n)=>-n)).infixLeft(".",T.Dot,(r,e,t)=>new K(r,t)).infixLeft("/",T.Divide,(r,e,t)=>new F("/",r,t,(n,i)=>n/i)).infixLeft("*",T.Multiply,(r,e,t)=>new F("*",r,t,(n,i)=>n*i)).infixLeft("+",T.Add,(r,e,t)=>new F("+",r,t,(n,i)=>n+i)).infixLeft("-",T.Subtract,(r,e,t)=>new F("-",r,t,(n,i)=>n-i)).infixLeft("|",T.Union,(r,e,t)=>new Ee(r,t)).infixLeft("=",T.Equals,(r,e,t)=>new Ct(r,t)).infixLeft("!=",T.NotEquals,(r,e,t)=>new Pt(r,t)).infixLeft("~",T.Equivalent,(r,e,t)=>new At(r,t)).infixLeft("!~",T.NotEquivalent,(r,e,t)=>new wt(r,t)).infixLeft("<",T.LessThan,(r,e,t)=>new F("<",r,t,(n,i)=>n<i)).infixLeft("<=",T.LessThanOrEquals,(r,e,t)=>new F("<=",r,t,(n,i)=>n<=i)).infixLeft(">",T.GreaterThan,(r,e,t)=>new F(">",r,t,(n,i)=>n>i)).infixLeft(">=",T.GreaterThanOrEquals,(r,e,t)=>new F(">=",r,t,(n,i)=>n>=i)).infixLeft("&",T.Ampersand,(r,e,t)=>new bt(r,t)).infixLeft("and",T.And,(r,e,t)=>new Ot(r,t)).infixLeft("as",T.As,(r,e,t)=>new ge(r,t)).infixLeft("contains",T.Contains,(r,e,t)=>new Et(r,t)).infixLeft("div",T.Divide,(r,e,t)=>new F("div",r,t,(n,i)=>Math.trunc(n/i))).infixLeft("in",T.In,(r,e,t)=>new Rt(r,t)).infixLeft("is",T.Is,(r,e,t)=>new Re(r,t)).infixLeft("mod",T.Modulo,(r,e,t)=>new F("mod",r,t,(n,i)=>n%i)).infixLeft("or",T.Or,(r,e,t)=>new It(r,t)).infixLeft("xor",T.Xor,(r,e,t)=>new kt(r,t)).infixLeft("implies",T.Implies,(r,e,t)=>new Vt(r,t))}var eu=Ye();function _t(r){return new he(r,eu.construct(Ao(r)).consumeAndParse())}function tu(r,e){let t=Array.isArray(e)?e:[e];for(let n=0;n<t.length;n++){let i=t[n];typeof i=="object"&&"type"in i&&"value"in i||(t[n]=S(t[n]))}return A(r,t).map(n=>n.value)}function A(r,e,t={},n=void 0){let i;if(typeof r=="string"){let o=n?.get(r);i=o??_t(r),n&&!o&&n.set(r,i)}else i=r;return i.eval({variables:t},e).map(o=>{let s={type:o.type,value:o.value?.valueOf()};return"path"in o&&(s.path=o.path),s})}function ru(r){let e=[];for(let t of r)t.type===d.Range?e.push([t.value?.low?.value,t.value?.high?.value]):typeof t.value=="number"&&e.push([t.value,t.value]);return e}function jn(r){let e=[];for(let t of r){let n=mt(t.value);n&&e.push(n)}return e}function $n(r){let e=new Set;for(let t of r){let n=Bn(t);n&&e.add(n)}return Array.from(e)}function Hn(r){let e=new Set;for(let t of r){let{value:n}=t;n&&(De(n)?e.add(n):H(n)?e.add(n.reference):ze(n)?e.add(w(n)):typeof n.identifier=="object"&&e.add(`identifier:${n.identifier.system}|${n.identifier.value}`))}return Array.from(e)}function nu(r){let e=[];for(let t of r){let{value:n}=t;typeof n=="number"?e.push({value:n}):I(n)&&e.push(n)}return e}function iu(r){let e=new Set;for(let t of r)De(t.value)&&e.add(t.value);return Array.from(e)}function Gn(r,e={}){let t=[];for(let n of r)ou(e,t,n);return t}function ou(r,e,t){let{type:n,value:i}=t;switch(n){case d.Identifier:su(e,r,i);break;case d.CodeableConcept:au(e,r,i);break;case d.Coding:wo(e,r,i);break;case d.ContactPoint:cu(e,r,i);break;default:Fe(e,r,void 0,i?.toString())}}function su(r,e,t){t?.type?.text&&Fe(r,e,e.textSearchSystem,t.type.text),Fe(r,e,t?.system,t?.value)}function au(r,e,t){t?.text&&Fe(r,e,e.textSearchSystem,t.text);for(let n of t?.coding??y)wo(r,e,n)}function wo(r,e,t){t&&(t.display&&Fe(r,e,e.textSearchSystem,t.display),Fe(r,e,t.system,t.code))}function cu(r,e,t){t&&Fe(r,e,t.system,t.value?.toLocaleLowerCase())}function Fe(r,e,t,n){(t||n)&&!r.some(i=>i.system===t&&i.value===n)&&r.push({system:t,value:n&&e.caseInsensitive?n.toLocaleLowerCase():n})}var uu=20,lu=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"},Qn={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},zn={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 Xe(r,e){if(!r)throw new Error("Invalid search URL");let t="",n;if(typeof r=="string")if(r.includes("?")){let[s,a]=r.split("?");t=s,n=new URLSearchParams(a)}else t=r;else typeof r=="object"&&(t=r.pathname,n=r.searchParams);let i;t.includes("/")?i=t.split("/").filter(Boolean).pop():i=t;let o=[];if(n&&o.push(...n.entries()),e)for(let[s,a]of Object.entries(e))if(Array.isArray(a))for(let u of a)o.push([s,u]);else o.push([s,a??""]);return du(i,o)}function du(r,e){let t={resourceType:r};for(let[n,i]of e)pu(t,n,i);return t}function pu(r,e,t){let n,i,o=e.indexOf(":");if(o>=0?(n=e.substring(0,o),i=e.substring(o+1)):(n=e,i=""),n!=="_"){if(n==="_has"||e.includes(".")){r.filters=J(r.filters,{code:e,operator:m.EQUALS,value:t});return}switch(n){case"_sort":fu(r,t);break;case"_cursor":r.cursor=t;break;case"_count":r.count=Number.parseInt(t,10);break;case"_offset":r.offset=Number.parseInt(t,10);break;case"_total":r.total=t;break;case"_summary":t==="count"?(r.total="accurate",r.count=0):(t==="true"||t==="data"||t==="text")&&(r.summary=t);break;case"_include":{let s=Oo(t);i==="iterate"&&(s.modifier=m.ITERATE),r.include=J(r.include,s);break}case"_revinclude":{let s=Oo(t);i==="iterate"&&(s.modifier=m.ITERATE),r.revInclude=J(r.revInclude,s);break}case"_fields":case"_elements":r.fields=t.split(",");break;case"_type":r.types=t.split(",");break;case"_format":r.format=t;break;case"_pretty":r.pretty=t==="true";break;default:{let s=W.types[r.resourceType]?.searchParams?.[n];s?r.filters=J(r.filters,Vo(s,m.EQUALS,i,t)):r.filters=J(r.filters,hu(n,i,t))}}}}function fu(r,e){for(let t of e.split(",")){let n,i=!1;t.startsWith("-")?(n=t.substring(1),i=!0):n=t,r.sortRules||(r.sortRules=[]),r.sortRules.push({code:n,descending:i})}}var mu=[m.MISSING,m.PRESENT];function Vo(r,e,t,n){if(mu.includes(t||e))return{code:r.code,operator:t||e,value:n};switch(r.type){case"number":case"date":case"quantity":{let{operator:i,value:o}=gu(n,t||m.EQUALS);if(!Io(r,o))throw new f(C(`Invalid format for ${r.type} search parameter: ${o}`));return{code:r.code,operator:i,value:o}}case"reference":case"string":case"token":case"uri":{if(!Io(r,n))throw new f(C(`Invalid format for ${r.type} search parameter: ${n}`));return{code:r.code,operator:yu(t)??e,value:n}}default:throw new Error("Unrecognized search parameter type: "+r.type)}}function hu(r,e,t){let n=m.EQUALS;if(e)n=e;else if(t.length>=2){let i=t.substring(0,2);i in zn&&(t.length===2||t.at(2)?.match(/\d/))&&(n=i,t=t.substring(i.length))}return{code:r,operator:n,value:t}}function gu(r,e){let t=r.substring(0,2),n=zn[t];return n?{operator:n,value:r.substring(2)}:{operator:e,value:r}}function yu(r){return Qn[r]}function Oo(r){let e=r.split(":");if(e.includes("*"))throw new f(C("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new f(C(`Invalid include value '${r}': must be of the form ResourceType:search-parameter`));if(e.length===2)return{resourceType:e[0],searchParam:e[1]};if(e.length===3)return{resourceType:e[0],searchParam:e[1],targetType:e[2]};throw new f(C(`Invalid include value '${r}'`))}function Io(r,e){return r.type==="date"?Ve(e):!0}var xu=/{{([^{}]+)}}/g;function vu(r,e,t=[]){return r=r.replaceAll(xu,(n,i)=>{let o=A(i,t,e);return o.length!==1?"":Wn(o[0])}),Xe(r)}function Tu(r){let e=[];r.fields&&e.push("_fields="+r.fields.join(","));for(let t of r.filters??y)e.push(Su(t));r.sortRules&&r.sortRules.length>0&&e.push(bu(r.sortRules)),r.cursor!==void 0&&e.push("_cursor="+encodeURIComponent(r.cursor)),r.offset!==void 0&&r.offset!==0&&e.push("_offset="+r.offset),r.count!==void 0&&e.push("_count="+r.count),r.total!==void 0&&e.push("_total="+r.total),r.types&&r.types.length>0&&e.push("_type="+r.types.join(","));for(let t of r.include??y)e.push(ko("_include",t));for(let t of r.revInclude??y)e.push(ko("_revinclude",t));return e.length===0?"":(xt(e),"?"+e.join("&"))}function Su(r){let e=r.operator in Qn?":"+r.operator:"",t=r.operator!==m.EQUALS&&r.operator in zn?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function bu(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function ko(r,e){return r+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function Ze(r){let e=[],t="",n=!1;for(let i of r)n?(t+=i,n=!1):i==="\\"?n=!0:i===","?(e.push(t),t=""):t+=i;return e.push(t),e}function Eu(r,e){return C(`Invalid modifier :${r} for ${e}`)}function Ru(r,e){return r in Qn?Eu(r,e):C(`Invalid operator ${r} for ${e}`)}function Lt(r,e){if(e.resourceType!==r.resourceType)return!1;for(let t of e.filters??y)if(!Pu(r,e,t))return!1;return!0}var Cu=new z(1e3);function Pu(r,e,t){let n=W.types[e.resourceType]?.searchParams?.[t.code];if(!n)return!1;let i=A(n.expression,[S(r)],void 0,Cu);if(t.operator===m.MISSING||t.operator===m.PRESENT)return Au(i,t);switch(n.type){case"reference":return wu(n,i,t);case"string":case"uri":return ku(i,t);case"token":return Ou(i,t);case"date":return Du(i,t);default:return!1}}function Au(r,e){let t=r.length>0;return(e.operator===m.MISSING&&e.value==="false"||e.operator===m.PRESENT&&e.value==="true")===t}function wu(r,e,t){let n=Ar(t.operator);if(t.value===""&&e.length===0)return t.operator===m.EQUALS;let i=Hn(e);for(let o of Ze(t.value)){let s=!1;if(o.includes("/")?s=i.includes(o):(r.target?.length===1||t.code==="_compartment")&&(s=i.some(a=>a?.endsWith("/"+o))),s)return!n}return n}function Ou(r,e){let t=Gn(r),n=Ze(e.value),i=Ar(e.operator);for(let o of t)for(let s of n)if(Iu(o,s))return!i;return i}function Iu(r,e){if(e.includes("|")){let[t,n]=e.split("|").map(i=>i.toLowerCase());return!t&&!n?!1:t?r.system?.toLowerCase()===t&&(!n||r.value?.toLowerCase()===n):!r.system&&r.value?.toLowerCase()===n}return r.value?.toLowerCase()===e.toLowerCase()}function ku(r,e){let t=$n(r),n=Ze(e.value),i=Ar(e.operator);for(let o of t)for(let s of n)if(Vu(o,s))return!i;return i}function Vu(r,e){return r.toLowerCase().includes(e.toLowerCase())}function Du(r,e){let t=jn(r),n=Ze(e.value),i=Ar(e.operator);for(let o of t)for(let s of n)if(Mu(o,e.operator,s))return!i;return i}function Mu(r,e,t){if(!r)return!1;let n=mt(t);if(!n)return!1;let i=r.start??"0000",o=r.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 Ar(r){return r===m.NOT_EQUALS||r===m.NOT}var _u={resourceType:"*"},Do=["DomainConfiguration","JsonWebKey","Login"],Mo=["Package","PackageRelease","PackageInstallation","Project","ProjectMembership","User","UserSecurityRequest"],Pe={READ:"read",VREAD:"vread",UPDATE:"update",DELETE:"delete",HISTORY:"history",CREATE:"create",SEARCH:"search"},_o=[Pe.READ,Pe.VREAD,Pe.HISTORY,Pe.SEARCH];function Lu(r,e){return Jn(r,Pe.SEARCH,e)}function Fu(r,e){return Do.includes(e)?!1:Jn(r,Pe.UPDATE,e)}function Jn(r,e,t){return!!r.resource?.some(n=>Fo(n,t,e))}function Nu(r,e){return!!Lo(e,Pe.UPDATE,r)}function Lo(r,e,t){return t?t.resource?.find(n=>Uu(r,e,n)):_u}function Uu(r,e,t){let n=r.resourceType;return Fo(t,n,e)?n==="Binary"?!0:!(t.compartment&&!r.meta?.compartment?.some(i=>i.reference===t.compartment?.reference)||t.criteria&&!Lt(r,Xe(t.criteria))):!1}function Fo(r,e,t){return r.resourceType!==e&&(r.resourceType!=="*"||Mo.includes(e))?!1:r.interaction?r.interaction.includes(t):!r.readonly||_o.includes(t)}var Bu={FIRST:"first",APPLICATION:"application"};function Q(){return typeof window<"u"}function qu(){return typeof Buffer<"u"}function Wu(){return typeof window<"u"?window:void 0}function wr(){return typeof Buffer<"u"?Buffer:void 0}var oe={assign(r){Q()&&globalThis.location.assign(r)},reload(){Q()&&globalThis.location.reload()},getSearch(){return Q()?globalThis.location.search:""},getPathname(){return Q()?globalThis.location.pathname:""},getLocation(){return Q()?globalThis.location.toString():""},getOrigin(){return Q()?globalThis.location.protocol+"//"+globalThis.location.host+"/":""}};function No(r){if(Q()){let t=window.atob(r),n=Uint8Array.from(t,i=>i.codePointAt(0));return new window.TextDecoder().decode(n)}let e=wr();if(e)return e.from(r,"base64").toString("utf-8");throw new Error("Unable to decode base64")}function Ft(r){if(Q()){let t=new window.TextEncoder().encode(r),n=String.fromCodePoint.apply(null,t);return window.btoa(n)}let e=wr();if(e)return e.from(r,"utf8").toString("base64");throw new Error("Unable to encode base64")}function ju(r){return Ft(r).replaceAll("+","-").replaceAll("/","_").replace(/[=]{1,2}$/,"")}function Kn(r){r=r.padEnd(r.length+(4-r.length%4)%4,"=");let e=r.replaceAll("-","+").replaceAll("_","/");return No(e)}function Or(){let r=new Uint32Array(28);return crypto.getRandomValues(r),Dn(r.buffer)}async function Yn(r){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(r))}function se(){return typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replaceAll(/[xy]/g,r=>{let e=Math.trunc(Math.random()*16);return(r==="x"?e:e&3|8).toString(16)})}function Uo(r){let e={};r=be(r);for(let i of r.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;s&&(e[s]=se(),i.fullUrl="urn:uuid:"+e[s],delete i.resource?.id)}let t=r.entry,n=JSON.stringify({resourceType:"Bundle",type:"transaction",entry:t?.map(i=>({fullUrl:i.fullUrl,request:{method:"POST",url:i.resource?.resourceType},resource:i.resource}))},(i,o)=>$u(i,o,e),2);return Bo(JSON.parse(n))}function $u(r,e,t){if((r==="reference"||r==="url")&&typeof e=="string"){let n;if(e.includes("/")?n=e.split("/")[1]:e.startsWith("urn:uuid:")?n=e.slice(9):e.startsWith("#")&&(n=e.slice(1)),n){let i=t[n];if(i)return"urn:uuid:"+i}}return e}function Bo(r){let e=Gu(r),{sorted:t,cycles:n}=Hu(e),i={},o=[];for(let a of r.entry??y)a.fullUrl?i[a.fullUrl]=a:o.push(a);let s=t.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),{...r,entry:s}}var et={NotVisited:"NotVisited",Visiting:"Visiting",Visited:"Visited"};function Hu(r){let e=[],t={},n=[];for(let o of Object.keys(r))t[o]=et.NotVisited;function i(o,s){if(t[o]===et.Visited)return!0;if(t[o]===et.Visiting){let u=s.lastIndexOf(o);return u!==-1&&n.push(s.slice(u)),!0}t[o]=et.Visiting,s.push(o);let a=!1;for(let u of r[o]??y)i(u,s)||(a=!0);return t[o]=et.Visited,s.pop(),e.unshift(o),!a}for(let o in r)t[o]===et.NotVisited&&i(o,[]);return{sorted:e,cycles:n}}function qo(r,e){for(let t in r)if(r[t]&&typeof r[t]=="object"){let n=r[t];if(H(n)){let i=n.reference;i.startsWith("urn:uuid:")&&e(i)}else qo(n,e)}}function Gu(r){let e={};for(let t of r.entry??y)t.fullUrl&&(e[t.fullUrl]=[]);for(let t of r.entry??y){let n=t.fullUrl;n&&t.resource&&qo(t.resource,i=>{e[i]&&e[i].push(n)})}return e}function Qu(r){r=be(r);let e={resourceType:"Bundle",type:"transaction",entry:[{resource:r}]};if(r.contained){for(let t of r.contained)e.entry.push({resource:t});r.contained=void 0}for(let t of e.entry)t.resource&&!t.resource.id&&(t.resource.id=se());return Uo(e)}function zu(r,e,t){return r.entry?.find(({resource:n})=>n?.resourceType===e&&n?.id===t)?.resource}async function Ju(r,e,t,n){return{hook:t.hook,hookInstance:se(),context:n,prefetch:await Ku(r,e,t,n)}}async function Ku(r,e,t,n){if(!t.prefetch)return{};let i={};for(let[o,s]of Object.entries(t.prefetch)){let a=await Yu(r,e,n,s);i[o]=a??null}return i}function Yu(r,e,t,n){if(n=Wo(e,t,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 r.readResource(a,u)}let[o,s]=Me(n,"?",2);return r.search(o,s)}var Xu=new Set(["userPractitionerId","userPractitionerRoleId","userPatientId","userRelatedPersonId"]);function Wo(r,e,t){return t.replaceAll(/\{\{([^}]+)\}\}/g,(n,i)=>{if(i=i.trim(),Xu.has(i))return r.id;if(i.startsWith("context.")){let o=i.substring(8),s=Zu(e,o);if(De(s))return s;if(typeof s=="number"||typeof s=="boolean")return String(s)}return n})}function Zu(r,e){let t=e.split("."),n=r;for(let i of t)if(n&&R(n)&&i in n)n=n[i];else return;return n}var O={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 Ir=class{constructor(){c(this,"listeners");this.listeners={}}addEventListener(e,t){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)}removeEventListener(e,t){let n=this.listeners[e];if(n){for(let i=0;i<n.length;i++)if(n[i]===t){n.splice(i,1);return}}}dispatchEvent(e){let t=this.listeners[e.type];for(let n of t??y)n.call(this,e);return!e.defaultPrevented}removeAllListeners(){this.listeners={}}listenerCount(e){return this.listeners[e]?.length??0}},X=class{constructor(){c(this,"emitter",new Ir)}dispatchEvent(e){this.emitter.dispatchEvent(e)}addEventListener(e,t){this.emitter.addEventListener(e,t)}removeEventListener(e,t){this.emitter.removeEventListener(e,t)}removeAllListeners(){this.emitter.removeAllListeners()}listenerCount(e){return this.emitter.listenerCount(e)}};var kr={"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"},jo=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],Vr=["DiagnosticReport-update"];function Xn(r){return Vr.includes(r)}function Zn(r){if(Vr.includes(r))throw new f(v(`'context.version' is required for '${r}'.`))}var $o={"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 Ho(r){return jo.includes(r)}function ei(r){return!!r.endpoint}function Dr(r){if(!Ut(r))throw new f(v("subscriptionRequest must be an object conforming to SubscriptionRequest type."));let{channelType:e,mode:t,topic:n,events:i}=r,o={"hub.channel.type":e,"hub.mode":t,"hub.topic":n,"hub.events":i.join(",")};return ei(r)&&(o.endpoint=r.endpoint),new URLSearchParams(o).toString()}function Ut(r){if(typeof r!="object")return!1;let{channelType:e,mode:t,topic:n,events:i}=r;if(!(e&&t&&n&&i)||typeof n!="string"||typeof i!="object"||!Array.isArray(i)||i.length<1||e!=="websocket"||t!=="subscribe"&&t!=="unsubscribe")return!1;for(let o of i)if(!kr[o])return!1;return!(ei(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function el(r,e,t,n){if(typeof e!="object")throw new f(v(`context[${t}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.id&&typeof e.id=="string"))throw new f(v(`context[${t}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new f(v(`context[${t}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!Ho(e.resourceType))throw new f(v(`context[${t}] is invalid. Resource must contain a valid FHIRcast resource type. Resource type is not a known resource type.`));if(i&&e.resourceType!==i)throw new f(v(`context[${t}] is invalid. context[${t}] for the '${r}' event should contain resource of type ${i}.`))}}function tl(r,e,t,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),n.reference){if(!H(e.reference))throw new f(v(`context[${t}] is invalid. Expected key '${e.key}' to be a reference.`))}else el(r,e.resource,t,n)}function rl(r,e){let t=new Map,n=$o[r];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new f(v(`Key '${o}' not found for event '${r}'. Make sure to add only valid keys.`));tl(r,e[i],i,n[o],t)}for(let[i,o]of Object.entries(n)){if(!(o.optional||t.has(i)))throw new f(v(`Missing required key '${i}' on context for '${r}' event.`));if(!o.manyAllowed&&(t.get(i)??0)>1)throw new f(v(`${t.get(i)} context entries with key '${i}' found for the '${r}' event when schema only allows for 1.`))}}function Mr(r,e,t,n){if(!(r&&typeof r=="string"))throw new f(v("Must provide a topic."));if(!kr[e])throw new f(v(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(kr).join(", ")}`));if(typeof t!="object")throw new f(v("context must be a context object or array of context objects."));if(Vr.includes(e)&&!n)throw new f(v(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(t)?t:[t];return rl(e,i),{timestamp:new Date().toISOString(),id:se(),event:{"hub.topic":r,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var Nt=class extends X{constructor(t){super();c(this,"subRequest");c(this,"websocket");if(this.subRequest=t,!t.endpoint)throw new f(v("Subscription request should contain an endpoint."));if(!Ut(t))throw new f(v("Subscription request failed validation."));let n=new WebSocket(t.endpoint);n.addEventListener("open",()=>{this.dispatchEvent({type:"connect"}),n.addEventListener("message",i=>{let o=JSON.parse(i.data);if(o["hub.topic"])return;let s=o;s.event["hub.event"]!=="heartbeat"&&(this.dispatchEvent({type:"message",payload:s}),n.send(JSON.stringify({id:o?.id,timestamp:new Date().toISOString()})))}),n.addEventListener("close",()=>{this.dispatchEvent({type:"disconnect"})})}),this.websocket=n}disconnect(){this.websocket.close()}};function nl(r){return JSON.parse(Kn(r))}function ti(r){return r.split(".").length===3}function Bt(r){let[e,t,n]=r.split(".");return nl(t)}function ri(r){try{return typeof Bt(r).login_id=="string"}catch{return!1}}function ni(r){try{let t=Bt(r).exp;return typeof t=="number"?t*1e3:void 0}catch{return}}var qt=class{constructor(e){c(this,"medplum");this.medplum=e}async get(e){return this.medplum.get(`keyvalue/v1/${e}`)}async set(e,t){await this.medplum.put(`keyvalue/v1/${e}`,t,O.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var Go;Go=Symbol.toStringTag;var B=class{constructor(e){c(this,Go,"ReadablePromise");c(this,"suspender");c(this,"status","pending");c(this,"response");c(this,"error");this.suspender=e.then(t=>(this.status="success",this.response=t,t),t=>{throw this.status="error",this.error=t,t})}isPending(){return this.status==="pending"}isOk(){return this.status==="success"}read(){switch(this.status){case"pending":throw this.suspender;case"error":throw this.error;default:return this.response}}then(e,t){return this.suspender.then(e,t)}catch(e){return this.suspender.catch(e)}finally(e){return this.suspender.finally(e)}};var tt=class{constructor(e,t=""){c(this,"storage");c(this,"prefix","");this.storage=e??globalThis.localStorage??new _r,this.prefix=t}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,t){t?this.storage.setItem(this.makeKey(e),t):this.storage.removeItem(this.makeKey(e))}getObject(e){let t=this.getString(e);return t?JSON.parse(t):void 0}setObject(e,t){this.setString(e,t?yt(t):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,t){t?this.data.set(e,t):this.data.delete(e)}removeItem(e){this.data.delete(e)}key(e){return Array.from(this.data.keys())[e]}},ii=class extends tt{constructor(){super();c(this,"initialized");c(this,"initPromise");c(this,"initResolve",()=>{});this.initialized=!1,this.initPromise=new Promise(t=>{this.initResolve=t})}setInitialized(){this.initialized||(this.initResolve(),this.initialized=!0)}getInitPromise(){return this.initPromise}get isInitialized(){return this.initialized}};var rt={Event:typeof globalThis.Event<"u"?globalThis.Event:void 0,ErrorEvent:void 0,CloseEvent:void 0},Qo=!1;function il(){if(typeof globalThis.Event>"u")throw new Error("Unable to lazy init events for ReconnectingWebSocket. globalThis.Event is not defined yet");rt.Event=globalThis.Event,rt.ErrorEvent=class extends Event{constructor(t,n){super("error",n);c(this,"message");c(this,"error");this.message=t.message,this.error=t}},rt.CloseEvent=class extends Event{constructor(t=1e3,n="",i){super("close",i);c(this,"code");c(this,"reason");c(this,"wasClean",!0);this.code=t,this.reason=n}}}function Jo(r,e){if(!r)throw new Error(e)}function Lr(r){return new r.constructor(r.type,r)}var Ne={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},zo=!1,Wt=class r extends X{constructor(t,n,i={}){Qo||(il(),Qo=!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",t=>{this._debug("open event");let{minUptime:n=Ne.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),n),Jo(this._ws,"WebSocket is not defined"),this._ws.binaryType=this._binaryType,this._messageQueue.forEach(i=>this._ws?.send(i)),this._messageQueue=[],this.onopen&&this.onopen(t),this.dispatchEvent(Lr(t))});c(this,"_handleMessage",t=>{this._debug("message event"),this.onmessage&&this.onmessage(t),this.dispatchEvent(Lr(t))});c(this,"_handleError",t=>{this._debug("error event",t.message),this._disconnect(void 0,t.message==="TIMEOUT"?"timeout":void 0),this.onerror&&this.onerror(t),this._debug("exec error listeners"),this.dispatchEvent(Lr(t)),this._connect()});c(this,"_handleClose",t=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(t),this.dispatchEvent(Lr(t))});this._url=t,this._protocols=n,this._options=i,this._options.startClosed&&(this._shouldReconnect=!1),this._options.binaryType?this._binaryType=this._options.binaryType:this._binaryType="blob",this._options.debugLogger&&(this._debugLogger=this._options.debugLogger),this._connect()}static get CONNECTING(){return 0}static get OPEN(){return 1}static get CLOSING(){return 2}static get CLOSED(){return 3}get CONNECTING(){return r.CONNECTING}get OPEN(){return r.OPEN}get CLOSING(){return r.CLOSING}get CLOSED(){return r.CLOSED}get binaryType(){return this._ws?this._ws.binaryType:this._binaryType}set binaryType(t){this._binaryType=t,this._ws&&(this._ws.binaryType=t)}get retryCount(){return Math.max(this._retryCount,0)}get bufferedAmount(){return this._messageQueue.reduce((n,i)=>(typeof i=="string"?n+=i.length:i instanceof Blob?n+=i.size:n+=i.byteLength,n),0)+(this._ws?.bufferedAmount??0)}get extensions(){return this._ws?.extensions??""}get protocol(){return this._ws?.protocol??""}get readyState(){return this._ws?this._ws.readyState:this._options.startClosed?r.CLOSED:r.CONNECTING}get url(){return this._ws?this._ws.url:""}get shouldReconnect(){return this._shouldReconnect}close(t=1e3,n){if(this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),!this._ws){this._debug("close enqueued: no ws instance");return}if(this._ws.readyState===this.CLOSED){this._debug("close: already closed");return}this._ws.close(t,n)}reconnect(t,n){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED?this._connect():(this._disconnect(t,n),this._connect())}send(t){if(this._ws?.readyState===this.OPEN)this._debug("send",t),this._ws.send(t);else{let{maxEnqueuedMessages:n=Ne.maxEnqueuedMessages}=this._options;this._messageQueue.length<n&&(this._debug("enqueue",t),this._messageQueue.push(t))}}_debug(...t){this._options.debug&&this._debugLogger("RWS>",...t)}_getNextDelay(){let{reconnectionDelayGrowFactor:t=Ne.reconnectionDelayGrowFactor,minReconnectionDelay:n=Ne.minReconnectionDelay,maxReconnectionDelay:i=Ne.maxReconnectionDelay}=this._options,o=0;return this._retryCount>0&&(o=n*Math.pow(t,this._retryCount-1),o>i&&(o=i)),this._debug("next delay",o),o}_wait(){return new Promise(t=>{setTimeout(t,this._getNextDelay())})}_connect(){if(this._connectLock||!this._shouldReconnect)return;this._connectLock=!0;let{maxRetries:t=Ne.maxRetries,connectionTimeout:n=Ne.connectionTimeout}=this._options;if(this._retryCount>=t){this._debug("max retries reached",this._retryCount,">=",t);return}this._retryCount++,this._debug("connect",this._retryCount),this._removeListeners(),this._wait().then(()=>{if(this._closeCalled){this._connectLock=!1;return}!this._options.WebSocket&&typeof WebSocket>"u"&&!zo&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),zo=!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 rt.ErrorEvent(Error(i.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new rt.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(t=1e3,n){if(this._clearTimeouts(),!!this._ws){this._removeListeners();try{this._ws.close(t,n),this._handleClose(new rt.CloseEvent(t,n,this))}catch{}}}_acceptOpen(){this._debug("accept open"),this._retryCount=0}_removeListeners(){this._ws&&(this._debug("removeListeners"),this._ws.removeEventListener("open",this._handleOpen),this._ws.removeEventListener("close",this._handleClose),this._ws.removeEventListener("message",this._handleMessage),this._ws.removeEventListener("error",this._handleError))}_addListeners(){this._ws&&(this._debug("addListeners"),this._ws.addEventListener("open",this._handleOpen),this._ws.addEventListener("close",this._handleClose),this._ws.addEventListener("message",this._handleMessage),this._ws.addEventListener("error",this._handleError))}_clearTimeouts(){clearTimeout(this._connectTimeout),clearTimeout(this._uptimeTimeout)}};var ol=[WebSocket.CLOSING,WebSocket.CLOSED],nt=class extends X{constructor(...t){super();c(this,"criteria");this.criteria=new Set(t)}getCriteria(){return this.criteria}_addCriteria(t){this.criteria.add(t)}_removeCriteria(t){this.criteria.delete(t)}},oi=class{constructor(e,t){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 nt(e),this.refCount=1,this.subscriptionProps=t?{...t}:void 0}nextGeneration(){return++this.generation}},$t=class{constructor(e,t,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 Ht))throw new f(v("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(t).toString()}catch{throw new f(v("Not a valid URL"))}let o=n?.ReconnectingWebSocket?new n.ReconnectingWebSocket(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger}):new Wt(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger});this.medplum=e,this.ws=o,this.masterSubEmitter=new nt,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",t=>{try{let n=JSON.parse(t.data);if(n.type==="pong"){this.waitingForPong=!1;return}let i=n,o=i?.entry?.[0]?.resource;if(o.type==="heartbeat"){this.masterSubEmitter?.dispatchEvent({type:"heartbeat",payload:i});return}if(o.type==="handshake"){let a=Se(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(Se(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",t=>{let n={type:"error",payload:new f({resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"WebSocket connection closed due to an error"},diagnostics:t.error.toString()}]})};this.masterSubEmitter?.dispatchEvent(n);for(let i of this.getAllCriteriaEmitters())i.dispatchEvent({...n})}),e.addEventListener("close",()=>{let t={type:"close"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=void 0,this.waitingForPong=!1),this.tokenRefreshTimer&&(clearInterval(this.tokenRefreshTimer),this.tokenRefreshTimer=void 0),this.wsClosed&&(this.criteriaEntries.clear(),this.criteriaEntriesBySubscriptionId.clear(),this.masterSubEmitter?.removeAllListeners())}),e.addEventListener("open",()=>{let t={type:"open"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.refreshAllSubscriptions().catch(console.error),this.pingTimer??=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 t=this.medplum.getProfile();this.currentProfile&&t===void 0?this.ws.close():t&&this.currentProfile?.id!==t.id&&this.ws.reconnect(),this.currentProfile=t})}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,t){let n={type:"error",payload:t};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}maybeEmitDisconnect(e){let{subscriptionId:t}=e;if(t){let n={type:"disconnect",payload:{subscriptionId:t}};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}else console.warn("Called disconnect for `CriteriaEntry` before `subscriptionId` was present.")}isStale(e,t){return this.isEntryGettingRemoved(e)||e.generation!==t}maybeGetCriteriaEntry(e,t){let n=this.criteriaEntries.get(e);if(n){if(!t)return n.bareCriteria;for(let i of n.criteriaWithProps)if(de(t,i.subscriptionProps))return i}}getAllCriteriaEmitters(){let e=[];for(let t of this.criteriaEntries.values())for(let n of jt(t))n.refCount>0&&e.push(n.emitter);return e}addCriteriaEntry(e){let{criteria:t,subscriptionProps:n}=e,i;this.criteriaEntries.has(t)?i=this.criteriaEntries.get(t):(i={criteriaWithProps:[]},this.criteriaEntries.set(t,i)),n?i.criteriaWithProps.push(e):i.bareCriteria=e}removeCriteriaEntry(e){e.state="removed",e.generation++;let{criteria:t,subscriptionProps:n,subscriptionId:i,token:o}=e;if(!this.criteriaEntries.has(t))return;let s=this.criteriaEntries.get(t);n?s.criteriaWithProps=s.criteriaWithProps.filter(a=>{let u=a.subscriptionProps;return!de(n,u)}):s.bareCriteria=void 0,!s.bareCriteria&&s.criteriaWithProps.length===0&&(this.criteriaEntries.delete(t),this.masterSubEmitter?._removeCriteria(t)),i&&this.criteriaEntriesBySubscriptionId.delete(i),o&&this.sendUnbind(o)}async subscribeToCriteria(e){this.wsClosed&&await this.reconnectIfNeeded(),this.ws.readyState===WebSocket.OPEN&&e.state==="idle"&&(e.state="connecting",await this.rebindCriteriaEntry(e))}async refreshAllSubscriptions(){this.criteriaEntriesBySubscriptionId.clear();let e=[],t=[];for(let n of this.criteriaEntries.values())for(let i of jt(n))i.refCount===0?t.push(i):e.push(i);for(let n of t)this.removeCriteriaEntry(n);for(let n of e)n.token&&this.sendUnbind(n.token),n.token=void 0,n.tokenExpiry=void 0,n.state="idle",n.generation++,await this.subscribeToCriteria(n)}async rebindCriteriaEntry(e){let t=e.nextGeneration();try{if(!e.subscriptionId){let a=await this.medplum.createResource({...e.subscriptionProps,resourceType:"Subscription",status:"active",reason:`WebSocket subscription for ${w(this.medplum.getProfile())}`,channel:{type:"websocket"},criteria:e.criteria});if(e.subscriptionId??=a.id,this.isStale(e,t))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(v("Failed to get token"));if(!o)throw new f(v("Failed to get URL from $get-ws-binding-token"));if(!s)throw new f(v("Failed to get expiration from $get-ws-binding-token"));if(this.isStale(e,t))return;e.token=i,e.tokenExpiry=new Date(s).getTime(),this.criteriaEntriesBySubscriptionId.set(e.subscriptionId,e),this.sendBind(i)}catch(n){console.error(Oe(n)),e.generation===t&&!this.isEntryGettingRemoved(e)&&(e.state=e.state==="refreshing"?"active":"idle"),this.emitError(e,n)}}checkTokenExpirations(){let e=Date.now();for(let t of this.criteriaEntries.values())for(let n of jt(t))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,t){this.masterSubEmitter&&this.masterSubEmitter._addCriteria(e);let n=this.maybeGetCriteriaEntry(e,t);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 oi(e,t);return this.addCriteriaEntry(i),this.subscribeToCriteria(i).catch(console.error),i.emitter}removeCriteria(e,t){let n=this.maybeGetCriteriaEntry(e,t);if(!n||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(),t=[];for(let n of this.criteriaEntries.values())for(let i of jt(n))i.refCount===0&&i.lastUnrefTime!==void 0&&e-i.lastUnrefTime>=1e4&&t.push(i);for(let n of t)this.maybeEmitDisconnect(n),this.removeCriteriaEntry(n);t.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 t of jt(e))t.token&&this.sendUnbind(t.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 nt(...Array.from(this.criteriaEntries.keys()))),this.masterSubEmitter}async reconnectIfNeeded(){ol.includes(this.getWebSocket().readyState)&&await new Promise(e=>{let t=()=>{this.getWebSocket().removeEventListener("open",t),e()};this.getWebSocket().addEventListener("open",t),this.reconnectWebSocket()})}};function jt(r){return r.bareCriteria?[r.bareCriteria,...r.criteriaWithProps]:r.criteriaWithProps}var sl=new z(1e3);async function al({resource:r,subscription:e,context:t,getPreviousResource:n,logger:i}){if(!cl(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=Xe(o);if(r.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${r.resourceType}")`),!1;if(!await Ko(e,r,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let u=le(e,"https://medplum.com/fhir/StructureDefinition/subscription-supported-interaction");if(u&&u.valueCode!==t.interaction)return i?.debug(`Ignore rest hook for different interaction (wanted "${u.valueCode}", received "${t.interaction}")`),!1;if(!Lt(r,s))return!1;let l=Sr(e.meta)??[],p=Sr(r.meta)??[];return l.length&&!l.some(g=>p.some(x=>x.reference===g.reference))?(i?.debug("Subscription suppressed due to mismatched accounts",{subscriptionId:e.id,resource:w(r)}),!1):!0}function cl(r,e){let t=r.channel?.type;return t==="rest-hook"?r.channel?.endpoint?!0:(e?.debug("Ignore rest-hook missing URL"),!1):t==="websocket"}async function Ko(r,e,t){let n=le(r,"https://medplum.com/fhir/StructureDefinition/fhir-path-criteria-expression");if(!n?.valueString)return!0;let i=await t(e),o={"%current":S(e),"%previous":S(i??{})};return A(n.valueString,[S(e)],o,sl)?.[0]?.value===!0}var Fr="5.1.13-770590d",ul="medplum-cli",es=O.FHIR_JSON+", */*; q=0.1",ll="https://api.medplum.com/",dl=1e3,pl=6e4,fl=0,ml=3e5,hl="Binary/",Yo={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},Ue={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"},ts={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"},gl={ClientSecretBasic:"client_secret_basic",ClientSecretPost:"client_secret_post",ClientSecretJwt:"client_secret_jwt",PrivateKeyJwt:"private_key_jwt",None:"none"},rs={JwtBearer:"urn:ietf:params:oauth:client-assertion-type:jwt-bearer"},yl={ES256:"ES256",ES384:"ES384",ES512:"ES512",HS256:"HS256",RS256:"RS256",RS384:"RS384",RS512:"RS512"},Ht=class extends X{constructor(t){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(t?.baseUrl&&!t.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");this.options=t??{},this.fetch=t?.fetch??xl(),this.storage=t?.storage??new tt(void 0,t?.storagePrefix),this.createPdfImpl=t?.createPdf,this.baseUrl=Rr(t?.baseUrl??ll),this.fhirBaseUrl=N(this.baseUrl,t?.fhirUrlPath??"fhir/R4"),this.authorizeUrl=N(this.baseUrl,t?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=N(this.baseUrl,t?.tokenUrl??"oauth2/token"),this.logoutUrl=N(this.baseUrl,t?.logoutUrl??"oauth2/logout"),this.fhircastHubUrl=N(this.baseUrl,t?.fhircastHubUrl??"fhircast/STU3"),this.cdsServicesUrl=N(this.baseUrl,t?.cdsServicesUrl??"cds-services"),this.clientId=t?.clientId??"",this.clientSecret=t?.clientSecret??"",this.credentialsInHeader=t?.authCredentialsMethod==="header",this.defaultHeaders=t?.defaultHeaders??{},this.onUnauthenticated=t?.onUnauthenticated,this.refreshGracePeriod=t?.refreshGracePeriod??ml,this.logLevel=this.initializeLogLevel(t),this.maxRetries=t?.maxRetries??2,this.maxRetryTime=t?.maxRetryTime??2e3,this.cacheTime=t?.cacheTime??(Q()?pl:fl),this.cacheTime>0?this.requestCache=new z(t?.resourceCacheSize??dl):this.requestCache=void 0,t?.autoBatchTime?(this.autoBatchTime=t.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0),t?.accessToken&&this.setAccessToken(t.accessToken),this.storage.getInitPromise===void 0?(t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initPromise=Promise.resolve(),this.dispatchEvent({type:"storageInitialized"})):(this.initComplete=!1,this.initPromise=this.storage.getInitPromise(),this.initPromise.then(()=>{t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initComplete=!0,this.dispatchEvent({type:"storageInitialized"})}).catch(n=>{console.error(n),this.initComplete=!0,this.dispatchEvent({type:"storageInitFailed",payload:{error:n}})})),this.setupStorageListener()}get isInitialized(){return this.initComplete}getInitPromise(){return this.initPromise}initializeLogLevel(t){return t?.logLevel?t.logLevel:t?.verbose!==void 0&&t.verbose?"verbose":"none"}async attemptResumeActiveLogin(){let t=this.getActiveLogin();t&&(this.setAccessToken(t.accessToken,t.refreshToken),await this.refreshProfile())}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}getFhircastHubUrl(){return this.fhircastHubUrl}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(t){t=t.toString(),this.requestCache?.delete(t)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(t){let n=N(this.fhirBaseUrl,t);for(let i of this.requestCache?.keys()??y)(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache?.delete(i)}get(t,n={}){t=t.toString();let i=this.getCacheEntry(t,n);if(i)return i.value;let o;t.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue&&!n.disableAutoBatch?o=new Promise((a,u)=>{this.autoBatchQueue.push({method:"GET",url:t.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:u}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):o=this.request("GET",t,n);let s=new B(o);return this.setCacheEntry(t,s,n),s}post(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("POST",t,o)}put(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("PUT",t,o)}patch(t,n,i={}){return t=t.toString(),this.setRequestBody(i,n),this.setRequestContentType(i,O.JSON_PATCH),this.invalidateUrl(t),this.request("PATCH",t,i)}delete(t,n){return t=t.toString(),this.invalidateUrl(t),this.request("DELETE",t,n)}async startNewUser(t,n){let{codeChallengeMethod:i,codeChallenge:o}=await this.startPkce();return this.post("auth/newuser",{...t,clientId:t.clientId??this.clientId,codeChallengeMethod:i,codeChallenge:o},void 0,n)}async startNewProject(t,n){return this.post("auth/newproject",t,void 0,n)}async startNewPatient(t,n){return this.post("auth/newpatient",t,void 0,n)}async startLogin(t,n){return this.post("auth/login",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async startGoogleLogin(t,n){return this.post("auth/google",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async ensureCodeChallenge(t){return t.codeChallenge?t:{...t,...await this.startPkce()}}async signOut(){await this.post(this.logoutUrl,{}),this.clear()}async signInWithRedirect(t){let i=new URLSearchParams(oe.getSearch()).get("code");if(!i){await this.requestAuthorization(t);return}return this.processCode(i)}signOutWithRedirect(){oe.assign(this.logoutUrl)}async signInWithExternalAuth(t,n,i,o,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),oe.assign(this.getExternalAuthRedirectUri(t,n,i,a,s))}async exchangeExternalAccessToken(t,n,i){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");let o={grant_type:Ue.TokenExchange,subject_token_type:ts.AccessToken,client_id:n,subject_token:t};return i&&(o.membership_id=i),this.fetchTokens(o)}getExternalAuthRedirectUri(t,n,i,o,s=!0){let a=new URL(t);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",n),a.searchParams.set("redirect_uri",i),a.searchParams.set("scope",o.scope??"openid profile email"),a.searchParams.set("state",JSON.stringify(o)),s){let{codeChallenge:u,codeChallengeMethod:l}=o;if(!l)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!u)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");a.searchParams.set("code_challenge_method",l),a.searchParams.set("code_challenge",u)}return a.toString()}fhirUrl(...t){return new URL(N(this.fhirBaseUrl,t.join("/")))}fhirSearchUrl(t,n){let i=this.fhirUrl(t);return n&&(i.search=Un(n)),i}search(t,n,i){let o=this.fhirSearchUrl(t,n),s="search-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=this.getBundle(o,i);return this.setCacheEntry(s,u,i),u}searchOne(t,n,i){let o=this.fhirSearchUrl(t,n);o.searchParams.set("_count","1"),o.searchParams.sort();let s="searchOne-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=new B(this.search(t,o.searchParams,i).then(l=>l.entry?.[0]?.resource));return this.setCacheEntry(s,u,i),u}searchResources(t,n,i){let s="searchResources-"+this.fhirSearchUrl(t,n).toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=new B(this.search(t,n,i).then(Zo));return this.setCacheEntry(s,u,i),u}async*searchResourcePages(t,n,i){let o=this.fhirSearchUrl(t,n);for(;o;){let s=new URL(o).searchParams;s.has("_count")||s.set("_count","1000");let a=await this.search(t,s,i),u=a.link?.find(l=>l.relation==="next");if(!a.entry?.length&&!u)break;yield Zo(a),o=u?.url?new URL(u.url):void 0}}valueSetExpand(t,n){let i=this.fhirUrl("ValueSet","$expand");return i.search=new URLSearchParams(t).toString(),this.get(i.toString(),n)}getCached(t,n){let i=this.requestCache?.get(this.fhirUrl(t,n).toString())?.value;return i?.isOk()?i.read():void 0}getCachedReference(t){let n=t.reference;if(!n)return;if(n==="system")return Yo;let[i,o]=n.split("/");if(!(!i||!o))return this.getCached(i,o)}readResource(t,n,i){if(!n)throw new Error('The "id" parameter cannot be null, undefined, or an empty string.');return this.get(this.fhirUrl(t,n),i)}readReference(t,n){let i=t.reference;if(!i)return new B(Promise.reject(new Error("Missing reference")));if(i==="system")return new B(Promise.resolve(Yo));let[o,s]=i.split("/");return!o||!s?new B(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}readCanonical(t,n,i){return Array.isArray(t)?this.searchOne("",{_type:t.join(","),url:n},i):this.searchOne(t,"url="+n,i)}requestSchema(t,n){if(gn(t))return Promise.resolve();let i=t+"-requestSchema",o=this.getCacheEntry(i,void 0);if(o)return o.value;let s=new B((async()=>{let a=`{
1
+ "use strict";var er=Object.defineProperty;var Ns=Object.getOwnPropertyDescriptor;var Fs=Object.getOwnPropertyNames;var Us=Object.prototype.hasOwnProperty;var Bs=(r,e,t)=>e in r?er(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var Ws=(r,e)=>{for(var t in e)er(r,t,{get:e[t],enumerable:!0})},qs=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Fs(e))!Us.call(r,i)&&i!==t&&er(r,i,{get:()=>e[i],enumerable:!(n=Ns(e,i))||n.enumerable});return r};var js=r=>qs(er({},"__esModule",{value:!0}),r);var c=(r,e,t)=>Bs(r,typeof e!="symbol"?e+"":e,t);var pp={};Ws(pp,{AccessPolicyInteraction:()=>Ae,AckCode:()=>Sd,AndAtom:()=>It,ArithmeticOperatorAtom:()=>F,AsAtom:()=>ye,CPT:()=>Qs,ClientStorage:()=>rt,ConcatAtom:()=>Et,ContainsAtom:()=>Rt,ContentType:()=>k,DEFAULT_ACCEPT:()=>rs,DEFAULT_MAX_SEARCH_COUNT:()=>xu,DEFAULT_SEARCH_COUNT:()=>yu,DataSampler:()=>Wr,DotAtom:()=>Y,EMPTY:()=>y,EmptySetAtom:()=>St,EqualsAtom:()=>Pt,EquivalentAtom:()=>wt,EventTarget:()=>Dr,ExternalSecretSystems:()=>Il,FHIRCAST_EVENT_NAMES:()=>Mr,FHIRCAST_EVENT_RESOURCES:()=>Go,FHIRCAST_EVENT_VERSION_REQUIRED:()=>_r,FHIRCAST_RESOURCE_TYPES:()=>Ho,FhirFilterComparison:()=>Kt,FhirFilterConnective:()=>Xt,FhirFilterNegation:()=>Yt,FhirPathAtom:()=>ge,FhircastConnection:()=>Ut,FileBuilder:()=>vi,FunctionAtom:()=>X,HTTP_HL7_ORG:()=>ct,HTTP_TERMINOLOGY_HL7_ORG:()=>Ks,Hl7Context:()=>ve,Hl7Field:()=>ce,Hl7Message:()=>Si,Hl7Segment:()=>ot,ICD10:()=>zs,INVALID_MEDICATION_ORDER_RESPONSE:()=>Cs,INVALID_MEDICATION_ORDER_SET_RESPONSE:()=>Ps,INVALID_MEDICATION_SEARCH_RESPONSE:()=>Pd,ImpliesAtom:()=>Dt,InAtom:()=>Ct,IndexerAtom:()=>Pe,InfixOperatorAtom:()=>R,IsAtom:()=>Ce,LOINC:()=>$s,LRUCache:()=>J,LiteralAtom:()=>$,LogLevel:()=>qe,LogLevelNames:()=>Rs,Logger:()=>bi,MEDICATION_REQUEST_STATUS_REASON_RESPONSE_NOT_RECEIVED:()=>ws,MEDICATION_REQUEST_STATUS_REASON_SYSTEM:()=>As,MEDPLUM_CLI_CLIENT_ID:()=>yl,MEDPLUM_RELEASES_URL:()=>Ms,MEDPLUM_VERSION:()=>Br,MedplumClient:()=>Gt,MedplumKeyValueClient:()=>qt,MemoryStorage:()=>Fr,MockAsyncClientStorage:()=>ai,NDC:()=>Js,NOOP:()=>Vc,NotEqualsAtom:()=>At,NotEquivalentAtom:()=>Ot,OAuthClientAssertionType:()=>is,OAuthGrantType:()=>Be,OAuthSigningAlgorithm:()=>Cl,OAuthTokenAuthMethod:()=>Rl,OAuthTokenType:()=>ns,OperationOutcomeError:()=>f,Operator:()=>m,OperatorPrecedence:()=>S,OrAtom:()=>kt,PATIENT_PREFERRED_PHARMACY_URL:()=>Kr,PHARMACY_PREFERENCE_TYPE_SYSTEM:()=>Ci,PHARMACY_TYPE_PREFERRED:()=>Pi,PHARMACY_TYPE_PRIMARY:()=>Jr,Parser:()=>tr,ParserBuilder:()=>at,PrefixOperatorAtom:()=>st,PropertyType:()=>d,RXNORM:()=>Gs,ReadablePromise:()=>W,ReconnectingWebSocket:()=>jt,ReturnAckCategory:()=>zu,SNOMED:()=>Hs,SearchParameterType:()=>ue,SubscriptionEmitter:()=>it,SubscriptionManager:()=>Ht,SymbolAtom:()=>B,Tokenizer:()=>xe,TransformMapCollection:()=>Gr,TypedEventTarget:()=>ee,UCUM:()=>tn,UnaryOperatorAtom:()=>bt,UnionAtom:()=>Re,VALID_HOSTNAME_REGEX:()=>yo,XorAtom:()=>Vt,accepted:()=>aa,accessPolicySupportsInteraction:()=>Xn,addPreferredPharmacyToPatient:()=>Bd,addProfileToResource:()=>Pc,allOk:()=>Ys,append:()=>K,applyDefaultValuesToElement:()=>Wl,applyDefaultValuesToResource:()=>Bl,applyFixedOrPatternValue:()=>zt,arrayBufferToBase64:()=>Nn,arrayBufferToHex:()=>Ln,arrayify:()=>re,assert:()=>Yo,assertContextVersionOptional:()=>ri,assertOk:()=>ba,assertReleaseManifest:()=>_s,badRequest:()=>P,booleanToTypedValue:()=>h,buildCdsRequest:()=>nl,buildElementsContext:()=>jr,buildMedicationRequestResponseLostStatusReason:()=>Ad,buildTypeName:()=>Co,businessRule:()=>fa,calculateAge:()=>yt,calculateAgeString:()=>Ya,canReadResourceType:()=>$u,canWriteResource:()=>Gu,canWriteResourceType:()=>Hu,capitalize:()=>L,checkForNull:()=>Ai,checkIfValidMedplumVersion:()=>up,clearReleaseCache:()=>cp,codeableConceptMatchesToken:()=>dc,codingMatchesToken:()=>co,compressElement:()=>Ra,concatUrls:()=>U,conceptMapTranslate:()=>hi,conflict:()=>ca,contentTooLarge:()=>na,convertContainedResourcesToBundle:()=>tl,convertToSearchableDates:()=>Gn,convertToSearchableNumbers:()=>lu,convertToSearchableQuantities:()=>du,convertToSearchableReferences:()=>zn,convertToSearchableStrings:()=>Qn,convertToSearchableTokens:()=>Jn,convertToSearchableUris:()=>pu,convertToTransactionBundle:()=>Wo,crawlTypedValue:()=>fr,crawlTypedValueAsync:()=>Va,createConstraintIssue:()=>pn,createFhircastMessagePayload:()=>Nr,createOperationOutcomeIssue:()=>Te,createPreferredPharmacyExtension:()=>Vs,createProcessingIssue:()=>fn,createReference:()=>Se,createStructureIssue:()=>E,created:()=>Xs,decodeBase64:()=>Bo,decodeBase64Url:()=>Zn,deepClone:()=>Ee,deepEquals:()=>pe,deepIncludes:()=>Ge,deriveIdentifierSearchParameter:()=>Qd,encodeBase64:()=>Ft,encodeBase64Url:()=>Yu,encryptSHA256:()=>ei,ensureNoLeadingSlash:()=>go,ensureTrailingSlash:()=>Ar,escapeHtml:()=>Ic,evalFhirPath:()=>uu,evalFhirPathTyped:()=>w,evalSqlOnFhir:()=>np,expandSampledData:()=>li,expandSampledObservation:()=>Ml,extractAccountReferences:()=>br,fetchLatestVersionString:()=>lp,fetchVersionManifest:()=>en,fhirPathArrayEquals:()=>On,fhirPathArrayEquivalent:()=>xr,fhirPathArrayNotEquals:()=>In,fhirPathEquals:()=>Qe,fhirPathEquivalent:()=>ro,fhirPathIs:()=>mt,fhirPathNot:()=>wn,fhirTypeToJsType:()=>hr,findCodeBySystem:()=>lc,findObservationInterval:()=>mc,findObservationReferenceRange:()=>hc,findObservationReferenceRanges:()=>po,findResourceByCode:()=>Ec,findResourceInBundle:()=>rl,flatMapFilter:()=>Oc,forbidden:()=>ea,formatAddress:()=>vo,formatCodeableConcept:()=>ze,formatCoding:()=>$n,formatDate:()=>_c,formatDateTime:()=>wr,formatFamilyName:()=>Mc,formatGivenName:()=>Dc,formatHl7DateTime:()=>Es,formatHumanName:()=>Ke,formatMoney:()=>$c,formatObservationValue:()=>So,formatPeriod:()=>Nc,formatQuantity:()=>me,formatRange:()=>jc,formatReferenceString:()=>xo,formatSearchQuery:()=>wu,formatTime:()=>Lc,formatTiming:()=>Wc,formatWallTime:()=>To,generateId:()=>Z,getAllDataTypes:()=>xn,getAllQuestionnaireAnswers:()=>Za,getBuffer:()=>kr,getCodeBySystem:()=>Sr,getDataType:()=>le,getDateProperty:()=>Ka,getDefaultValuesForNewSliceEntry:()=>ql,getDisplayString:()=>oo,getElementDefinition:()=>gt,getElementDefinitionFromElements:()=>Ao,getElementDefinitionTypeName:()=>cr,getExpressionForResourceType:()=>ep,getExpressionsForResourceType:()=>ki,getExtension:()=>de,getExtensionValue:()=>Rr,getIdentifier:()=>Er,getImageSrc:()=>Ja,getInnerDerivedIdentifierExpression:()=>wi,getMedicationOrderIframeUrl:()=>kd,getNestedProperty:()=>Ve,getOutcomeRedirectUrl:()=>pa,getParsedDerivedIdentifierExpression:()=>Oi,getParsedExpressionForResourceType:()=>Ii,getPathDifference:()=>fe,getPathDisplayName:()=>Yc,getPendingMedicationOrderId:()=>Od,getPendingMedicationOrderStatus:()=>Id,getPreferredPharmaciesFromPatient:()=>Ud,getPropertyDisplayName:()=>Po,getQueryString:()=>qn,getQuestionnaireAnswers:()=>Xa,getRandomString:()=>Vr,getReferenceString:()=>O,getResourceTypes:()=>zc,getSearchParameter:()=>Kc,getSearchParameterDetails:()=>zd,getSearchParameters:()=>Jc,getStatus:()=>Sa,getTypedPropertyValue:()=>_,getTypedPropertyValueWithPath:()=>mr,getTypedPropertyValueWithSchema:()=>eo,getTypedPropertyValueWithoutSchema:()=>to,getValueSliceName:()=>pi,getWebSocketUrl:()=>Wn,getWindow:()=>Ku,globalSchema:()=>j,gone:()=>ta,indexConceptMapCodings:()=>cs,indexDefaultSearchParameters:()=>bn,indexSearchParameter:()=>Or,indexSearchParameterBundle:()=>Qc,indexStructureDefinitionBundle:()=>lr,inflateBaseSchema:()=>mn,inflateElement:()=>ji,initFhirPathParserBuilder:()=>Xe,invalidSearchOperator:()=>Vu,isAccepted:()=>ha,isAddPharmacyResponse:()=>jd,isBrowserEnvironment:()=>z,isCodeableConcept:()=>Tr,isCoding:()=>vr,isCompletedSubscriptionRequest:()=>ni,isComplexTypeCode:()=>Cr,isConflict:()=>xa,isContextVersionRequired:()=>ti,isCreated:()=>ma,isDataTypeLoaded:()=>vn,isDateString:()=>kn,isDateTimeString:()=>De,isDefined:()=>kc,isEmpty:()=>A,isError:()=>sr,isFhirCriteriaMet:()=>Xo,isFhircastResourceType:()=>Qo,isGone:()=>va,isJwt:()=>ii,isLowerCase:()=>pc,isMedicationArray:()=>wd,isMedicationOrderResponse:()=>Os,isMedicationOrderSetResponse:()=>Is,isMedplumAccessToken:()=>oi,isNodeEnvironment:()=>Ju,isNotFound:()=>ya,isObject:()=>C,isOk:()=>ar,isOperationOutcome:()=>je,isOrganizationArray:()=>qd,isPeriod:()=>Vn,isPopulated:()=>ie,isPrimitiveType:()=>dt,isProfileLoaded:()=>Tn,isProfileResource:()=>io,isQuantity:()=>V,isQuantityEquivalent:()=>Dn,isRedirect:()=>ga,isReference:()=>G,isResource:()=>I,isResourceType:()=>lt,isResourceTypeSchema:()=>pr,isResourceWithId:()=>Je,isSliceDefinitionWithTypes:()=>di,isString:()=>Me,isStringArray:()=>uc,isTextObject:()=>uo,isTypedValue:()=>eu,isUUID:()=>cc,isUnauthenticated:()=>Ta,isValidDate:()=>Tt,isValidHostname:()=>Cc,isValidMedplumSemver:()=>Ls,lazy:()=>Bn,loadDataType:()=>dr,locationUtils:()=>ae,mapByIdentifier:()=>Ac,matchDiscriminant:()=>gr,matchesRange:()=>Un,matchesSearchRequest:()=>Nt,medicationOrderRequestToParameters:()=>Md,medicationOrderSetRequestToParameters:()=>Ld,medicationSearchParamsToParameters:()=>Vd,multipleMatches:()=>oa,normalizeArrayBufferView:()=>Fn,normalizeCreateBinaryOptions:()=>ui,normalizeCreatePdfOptions:()=>os,normalizeErrorString:()=>Ie,normalizeOperationOutcome:()=>ut,notFound:()=>un,notModified:()=>Zs,operationOutcomeIssueToString:()=>qi,operationOutcomeToString:()=>dn,parametersToMedicationOrderResponse:()=>_d,parametersToMedicationOrderSetResponse:()=>Nd,parseFhirPath:()=>Lt,parseFilterParameter:()=>Td,parseHl7DateTime:()=>Ed,parseJWTPayload:()=>Wt,parseLogLevel:()=>Cd,parseMappingLanguage:()=>Kl,parseParameter:()=>Mo,parseReference:()=>Ga,parseSearchRequest:()=>Ze,parseStructureDefinition:()=>ur,parseXFhirQuery:()=>Au,pathToJSONPointer:()=>Ma,preciseEquals:()=>Tc,preciseGreaterThan:()=>bc,preciseGreaterThanOrEquals:()=>ho,preciseLessThan:()=>Sc,preciseLessThanOrEquals:()=>mo,preciseRound:()=>vc,preconditionFailed:()=>ra,projectAdminResourceTypes:()=>Lo,protectedResourceTypes:()=>_o,readInteractions:()=>No,redirect:()=>Wi,redirectOk:()=>da,removeDuplicates:()=>ft,removePreferredPharmacyFromPatient:()=>Wd,removeProfileFromResource:()=>wc,reorderBundle:()=>qo,replaceQueryVariables:()=>$o,resolveId:()=>be,resourceMatchesSubscriptionCriteria:()=>hl,satisfiedAccessPolicy:()=>Fo,serializeError:()=>Zt,serializeFhircastSubscriptionRequest:()=>Lr,serverError:()=>ua,serverTimeout:()=>la,setCodeBySystem:()=>fc,setIdentifier:()=>ec,singleton:()=>D,singularize:()=>Rc,sleep:()=>Pr,sortStringArray:()=>vt,splitN:()=>_e,splitSearchOnComma:()=>et,streamToBuffer:()=>rp,stringify:()=>xt,stringifyTypedValue:()=>Hn,structureMapTransform:()=>Yl,subsetResource:()=>Aa,summarizeObservations:()=>kl,toJsBoolean:()=>q,toPeriod:()=>ht,toTypedValue:()=>b,tooManyRequests:()=>sa,trimTrailingEmptyElements:()=>nc,tryGetDataType:()=>He,tryGetJwtExpiration:()=>si,tryGetProfile:()=>Sn,typedValueToString:()=>jn,unauthorized:()=>Oe,unauthorizedTokenAudience:()=>or,unauthorizedTokenExpired:()=>ln,unsupportedMediaType:()=>ia,validateFhircastSubscriptionRequest:()=>Bt,validateResource:()=>Na,validateResourceType:()=>$d,validateTypedValue:()=>Ki,validationError:()=>T,validationRegexes:()=>pt,warnIfNewerVersionAvailable:()=>dp,wordWrap:()=>Ts});module.exports=js(pp);var J=class{constructor(e=10){c(this,"max");c(this,"cache");this.max=e,this.cache=new Map}clear(){this.cache.clear()}get(e){let t=this.cache.get(e);return t&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size>=this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}delete(e){this.cache.delete(e)}keys(){return this.cache.keys()}first(){return this.cache.keys().next().value}};var st=class{constructor(e,t){c(this,"operator");c(this,"child");this.operator=e,this.child=t}toString(){return`${this.operator}(${this.child.toString()})`}},R=class{constructor(e,t,n){c(this,"operator");c(this,"left");c(this,"right");this.operator=e,this.left=t,this.right=n}toString(){return`(${this.left.toString()} ${this.operator} ${this.right.toString()})`}},at=class{constructor(){c(this,"prefixParselets",{});c(this,"infixParselets",{})}registerInfix(e,t){return this.infixParselets[e]=t,this}registerPrefix(e,t){return this.prefixParselets[e]=t,this}prefix(e,t,n){return this.registerPrefix(e,{parse(i,o){let s=i.consumeAndParse(t);return n(o,s)}})}infixLeft(e,t,n){return this.registerInfix(e,{parse(i,o,s){let a=i.consumeAndParse(t);return n(o,s,a)},precedence:t})}construct(e){return new tr(e,this.prefixParselets,this.infixParselets)}},tr=class{constructor(e,t,n){c(this,"tokens");c(this,"prefixParselets");c(this,"infixParselets");this.tokens=e,this.prefixParselets=t,this.infixParselets=n}hasMore(){return this.tokens.length>0}match(e){return this.peek()?.id!==e?!1:(this.consume(),!0)}consumeAndParse(e=1/0){let t=this.consume(),n=this.prefixParselets[t.id];if(!n)throw new Error(`Parse error at "${t.value}" (line ${t.line}, column ${t.column}). No matching prefix parselet.`);let i=n.parse(this,t);for(;e>this.getPrecedence();){let o=this.consume();i=this.getInfixParselet(o).parse(this,i,o)}return i}getPrecedence(){let e=this.peek();if(!e)return 1/0;let t=this.getInfixParselet(e);return t?t.precedence:1/0}consume(e,t){if(!this.tokens.length)throw 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(t&&this.peek()?.value!==t){let n=this.peek();throw new Error(`Expected "${t}" but got "${n.value}" at line ${n.line} column ${n.column}.`)}return this.tokens.shift()}peek(){return this.tokens.length>0?this.tokens[0]:void 0}removeComments(){this.tokens=this.tokens.filter(e=>e.id!=="Comment")}getInfixParselet(e){return this.infixParselets[e.id==="Symbol"?e.value:e.id]}};function re(r){if(r!==void 0)return Array.isArray(r)?r:[r]}var tn="http://unitsofmeasure.org",$s="http://loinc.org",Hs="http://snomed.info/sct",Gs="http://www.nlm.nih.gov/research/umls/rxnorm",Qs="http://www.ama-assn.org/go/cpt",zs="http://hl7.org/fhir/sid/icd-10",Js="http://hl7.org/fhir/sid/ndc",ct="http://hl7.org",Ks="http://terminology.hl7.org";var rr="ok",nr="created",rn="gone",nn="not-modified",on="found",sn="not-found",an="conflict",cn="unauthorized",Di="forbidden",Mi="precondition-failed",_i="content-too-large",Li="unsupported-media-type",Ni="multiple-matches",Fi="too-many-requests",ir="accepted",Ui="server-timeout",Bi="business-rule",Ys={resourceType:"OperationOutcome",id:rr,issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},Xs={resourceType:"OperationOutcome",id:nr,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},Zs={resourceType:"OperationOutcome",id:nn,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},un={resourceType:"OperationOutcome",id:sn,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},Oe={resourceType:"OperationOutcome",id:cn,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},ln={...Oe,issue:[...Oe.issue,{severity:"error",code:"expired",details:{text:"Token expired"}}]},or={...Oe,issue:[...Oe.issue,{severity:"error",code:"invalid",details:{text:"Token not issued for this audience"}}]},ea={resourceType:"OperationOutcome",id:Di,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},ta={resourceType:"OperationOutcome",id:rn,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},ra={resourceType:"OperationOutcome",id:Mi,issue:[{severity:"error",code:"processing",details:{text:"Precondition Failed"}}]};function na(r){return{resourceType:"OperationOutcome",id:_i,issue:[{severity:"error",code:"too-long",details:{text:r}}]}}var ia={resourceType:"OperationOutcome",id:Li,issue:[{severity:"error",code:"not-supported",details:{text:"Unsupported media type"}}]},oa={resourceType:"OperationOutcome",id:Ni,issue:[{severity:"error",code:"multiple-matches",details:{text:"Multiple resources found matching condition"}}]},sa={resourceType:"OperationOutcome",id:Fi,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function aa(r){return{resourceType:"OperationOutcome",id:ir,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:r}]}}function P(r,e){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:r},...e?{expression:re(e)}:void 0}]}}function ca(r,e){return{resourceType:"OperationOutcome",id:an,issue:[{severity:"error",code:"conflict",details:{coding:e?[{code:e}]:void 0,text:r}}]}}function T(r,e,t,n){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:t??"structure",details:{text:r},...e?{expression:e}:void 0,...n?{diagnostics:n}:void 0}]}}function ua(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:r.toString()}]}}function la(r){return{resourceType:"OperationOutcome",id:Ui,issue:[{severity:"error",code:"timeout",details:{text:r??"Server timeout"}}]}}function Wi(r){let e=r.toString();return{resourceType:"OperationOutcome",id:on,issue:[{severity:"information",code:"informational",details:{coding:[{system:"urn:ietf:rfc:3986",code:e}],text:"Redirect to "+e}}]}}function da(r){return{...Wi(r),id:rr}}function pa(r){return r?.issue?.[0]?.details?.coding?.find(e=>e.system==="urn:ietf:rfc:3986")?.code}function fa(r,e){return{resourceType:"OperationOutcome",id:Bi,issue:[{severity:"error",code:"business-rule",details:{id:r,text:e}}]}}function sr(r){return!r||typeof r!="object"?!1:r instanceof Error||typeof DOMException<"u"&&r instanceof DOMException?!0:Object.prototype.toString.call(r)==="[object Error]"}function je(r){return typeof r=="object"&&r!==null&&r.resourceType==="OperationOutcome"}function ar(r){return r.id===rr||r.id===nr||r.id===nn||r.id===ir}function ma(r){return r.id===nr}function ha(r){return r.id===ir}function ga(r){return r.id===on}function ya(r){return r.id===sn}function xa(r){return r.id===an}function va(r){return r.id===rn}function Ta(r){return r.id===cn}function Sa(r){switch(r.id){case rr:return 200;case nr:return 201;case ir:return 202;case on:return 302;case nn:return 304;case cn:return 401;case Di:return 403;case sn:return 404;case an:return 409;case rn:return 410;case Mi:case Ni:return 412;case _i:return 413;case Li:return 415;case Bi:return 422;case Fi:return 429;case Ui:return 504;default:return r.issue?.[0]?.code==="exception"?500:400}}function ba(r,e){if(!ar(r)||e===void 0)throw new f(r)}var f=class extends Error{constructor(t,n){super(dn(t),n);c(this,"outcome");this.name="OperationOutcomeError",this.outcome=t}};function ut(r){return r instanceof f?r.outcome:je(r)?r:P(Ie(r))}function Ie(r){return r?typeof r=="string"?r:sr(r)?r.message:je(r)?dn(r):typeof r=="object"&&"code"in r&&typeof r.code=="string"?r.code:JSON.stringify(r):"Unknown error"}function dn(r){let e=r.issue?.map(qi)??[];return e.length>0?e.join("; "):"Unknown error"}function qi(r){let e;return r.details?.text?r.diagnostics?e=`${r.details.text} (${r.diagnostics})`:e=r.details.text:r.diagnostics?e=r.diagnostics:e="Unknown error",r.expression?.length&&(e+=` (${r.expression.join(", ")})`),e}function Te(r,e,t,n,i){let o={severity:r,code:e,details:{text:t},expression:[n]};return i&&(o.diagnostics=JSON.stringify(i)),o}function E(r,e){return Te("error","structure",e,r)}function pn(r,e){return Te("error","invariant",`Constraint ${e.key} not met: ${e.description}`,r,{fhirpath:e.expression})}function fn(r,e,t,n){return Te("error","processing",e,r,{...n,error:t})}var Ea={"http://hl7.org/fhirpath/System.String":"string"};function Ra(r){let e={};return r.min!==0&&(e.min=r.min),r.max!==1&&Number.isFinite(r.max)?e.max=r.max:r.max===Number.POSITIVE_INFINITY&&(e.max=Number.MAX_SAFE_INTEGER),e.type=r.type?.map(t=>({...t,extension:void 0,code:Ea[t.code]??t.code})),e}function ji(r,e){let t=e.max&&e.max===Number.MAX_SAFE_INTEGER?Number.POSITIVE_INFINITY:e.max;return{path:r,description:"",type:e.type??[],min:e.min??0,max:t??1,isArray:!!t&&t>1,constraints:[]}}function mn(r){let e=Object.create(null);for(let[t,n]of Object.entries(r))e[t]={name:t,type:t,path:t,elements:Object.fromEntries(Object.entries(n.elements).map(([i,o])=>[i,ji(i,o)])),constraints:[],innerTypes:[]};return e}var $i={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 ur(r){return new gn(r).parse()}var ke=mn($i),yn=Object.create(null),Hi=Object.create(null),Pa={"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 Ji(r){let e;return e=Hi[r],e||(e=Hi[r]=Object.create(null)),e}function lr(r){let t=(Array.isArray(r)?r:r.entry?.map(n=>n.resource)??[]).filter(n=>n?.resourceType==="StructureDefinition");bn(t);for(let n of t)dr(n)}function dr(r){if(!r?.name)throw new Error("Failed loading StructureDefinition from bundle");if(r.resourceType!=="StructureDefinition")return;let e=ur(r),t=Pa[r.url],n,i;t?(n=ke,i=t):r.url===`http://hl7.org/fhir/StructureDefinition/${r.type}`||r.url===`https://medplum.com/fhir/StructureDefinition/${r.type}`||r.type?.startsWith("http://")||r.type?.startsWith("https://")?(n=ke,i=r.type):(n=Ji(r.url),i=r.type),n[i]=e;for(let o of e.innerTypes)o.parentType=e,n[o.name]=o;yn[r.url]=e}function xn(){return ke}function vn(r){return!!ke[r]}function He(r,e){if(e){let t=Ji(e)[r];if(t)return t}return ke[r]}function le(r,e){let t=He(r,e);if(!t)throw new f(P("Unknown data type: "+r));return t}function lt(r){let e=ke[r];return e&&pr(e)}function Tn(r){return!!yn[r]}function Sn(r){return yn[r]}var gn=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:ka(e),elements:{},constraints:this.parseElementDefinition(this.root).constraints,innerTypes:[],summaryProperties:new Set,mandatoryProperties:new Set},this.innerTypes=[]}parse(){let e=this.next();for(;e;){if(e.sliceName)this.parseSliceStart(e);else if(e.id?.includes(":")){if(this.slicingContext?.current){let t=hn(e,this.slicingContext.path);this.slicingContext.current.elements[t]=this.parseElementDefinition(e)}}else{let t=this.parseElementDefinition(e);this.checkFieldEnter(e,t);let n=this.backboneContext;for(;n;){if(e.path?.startsWith(n.path+".")){n.type.elements[hn(e,n.path)]=t;break}n=n.parent}if(!n){let i=hn(e,this.root.path);e.isSummary&&this.resourceSchema.summaryProperties?.add(i.replace("[x]","")),t.min>0&&this.resourceSchema.mandatoryProperties?.add(i.replace("[x]","")),this.resourceSchema.elements[i]=t}this.checkFieldExit(e)}e=this.next()}return this.checkFieldExit(),this.innerTypes.length>0&&(this.resourceSchema.innerTypes=this.innerTypes),this.resourceSchema}checkFieldEnter(e,t){this.isInnerType(e)&&this.enterInnerType(e),this.slicingContext&&!$e(this.slicingContext.path,e?.path)&&(this.slicingContext=void 0),e.slicing&&!this.slicingContext&&this.enterSlice(e,t)}enterInnerType(e){for(;this.backboneContext&&!$e(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;let t=cr(e);this.backboneContext={type:{name:t,type:t,path:e.path,title:e.label,description:e.definition,elements:{},constraints:this.parseElementDefinition(e).constraints,innerTypes:[]},path:e.path,parent:$e(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,t){Ia(e)&&!this.peek()?.sliceName||(t.slicing={discriminator:(e.slicing?.discriminator??[]).map(n=>{if(n.type!=="value"&&n.type!=="pattern"&&n.type!=="type")throw new Error(`Unsupported slicing discriminator type: ${n.type}`);return{path:n.path,type:n.type}}),slices:[],ordered:e.slicing?.ordered??!1,rule:e.slicing?.rules},this.slicingContext={field:t.slicing,path:e.path??""})}checkFieldExit(e=void 0){if(this.backboneContext&&!$e(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!$e(this.backboneContext.path,e?.path));else this.innerTypes.push(this.backboneContext.type),this.backboneContext=void 0}next(){let e=this.peek();if(e)return this.index++,e}peek(){let e=this.elements[this.index];if(e){if(this.elementIndex[e.path??""]=e,e.contentReference){let t=e.contentReference.slice(e.contentReference.indexOf("#")+1),n=this.elementIndex[t];return n?{...n,id:e.id,path:e.path,min:e.min??n.min,max:e.max??n.max,base:{path:n.base?.path??t,min:e.base?.min??n.base?.min??n.min,max:e.base?.max??n.base?.max??n.max},contentReference:e.contentReference,definition:e.definition}:void 0}return e}}isInnerType(e){let t=this.peek();return!!($e(e?.path,t?.path)&&e.type?.some(n=>["BackboneElement","Element"].includes(n.code)))}parseSliceStart(e){if(!this.slicingContext)throw new Error(`Invalid slice start before discriminator: ${e.sliceName} (${e.id})`);this.slicingContext.current={...this.parseElementDefinition(e),name:e.sliceName??"",definition:e.definition,elements:{}},this.slicingContext.field.slices.push(this.slicingContext.current)}parseElementDefinitionType(e){return(e.type??[]).map(t=>{let n;return(t.code==="BackboneElement"||t.code==="Element")&&(n=cr(e)),n||(n=de(t,"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type")?.valueUrl),n||(n=t.code??""),{code:n,targetProfile:t.targetProfile,profile:t.profile}})}parseElementDefinition(e){let t=Qi(e.max),n=e.base?.max?Qi(e.base.max):t,i={type:"ElementDefinition",value:e};return{description:e.definition||"",path:e.path||e.base?.path||"",min:e.min??0,max:t,isArray:n>1,constraints:(e.constraint??[]).map(o=>({key:o.key??"",severity:o.severity??"error",expression:o.expression??"",description:o.human??""})),type:this.parseElementDefinitionType(e),fixed:zi(_(i,"fixed[x]")),pattern:zi(_(i,"pattern[x]")),binding:e.binding}}};function Aa(r,e){if(!r)return;let t=[];for(let n of e){t.push("_"+n);let i=ke[r.resourceType].elements[n+"[x]"];i&&t.push(...i.type.map(o=>n+L(o.code)))}for(let n of Object.getOwnPropertyNames(r))!e.includes(n)&&!t.includes(n)&&!wa.includes(n)&&Object.defineProperty(r,n,{enumerable:!1,writable:!1,value:void 0});return r.meta={...r.meta,tag:r.meta?.tag?r.meta.tag.concat(Gi):[Gi]},r}var Gi={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},wa=["resourceType","id","meta"];function Qi(r){return r==="*"?Number.POSITIVE_INFINITY:Number.parseInt(r,10)}function hn(r,e=""){return Oa(r.path,e)}function Oa(r,e){return r?e&&r.startsWith(e)?r.substring(e.length+1):r:""}function $e(r,e){return!r||!e?!1:e.startsWith(r+".")||e===r}function zi(r){return Array.isArray(r)&&r.length>0?r[0]:A(r)?void 0:r}function Ia(r){let e=r.slicing?.discriminator;return!!(r.type?.some(t=>t.code==="Extension")&&e?.length===1&&e[0].type==="value"&&e[0].path==="url")}function ka(r){let e=r.description;return e?.startsWith(`Base StructureDefinition for ${r.name} Type: `)&&(e=e.substring(`Base StructureDefinition for ${r.name} Type: `.length)),e}function fr(r,e,t){new En(r,e,t).crawl()}function Va(r,e,t){return new Rn(r,e,t).crawl()}var En=class{constructor(e,t,n){c(this,"root");c(this,"visitor");c(this,"schema");c(this,"initialPath");c(this,"excludeMissingProperties");this.root=e,this.visitor=t,this.schema=n?.schema??le(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}crawl(){this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}crawlObject(e,t,n){let i=I(e.value);if(i&&this.visitor.onEnterResource&&this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties)for(let o of Object.keys(e.value))this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&this.visitor.onExitResource(n,e,t)}crawlProperty(e,t,n,i){let o=Ve(e,t,{withPath:!0});this.visitor.visitProperty&&this.visitor.visitProperty(e,t,i,o,n);for(let s of o)for(let a of re(s))this.crawlPropertyValue(a,i,n)}crawlPropertyValue(e,t,n){if(!dt(e.type)){let i=n.innerTypes?.find(o=>o.name===e.type)??le(e.type);this.crawlObject(e,i,t)}}},Rn=class{constructor(e,t,n){c(this,"root");c(this,"visitor");c(this,"schema");c(this,"initialPath");c(this,"excludeMissingProperties");this.root=e,this.visitor=t,this.schema=n?.schema??le(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}async crawl(){return this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}async crawlObject(e,t,n){let i=I(e.value);if(i&&this.visitor.onEnterResource&&await this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&await this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties&&e.value)for(let o of Object.keys(e.value))await this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))await this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&await this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&await this.visitor.onExitResource(n,e,t)}async crawlProperty(e,t,n,i){let o=Ve(e,t,{withPath:!0});if(this.visitor.visitPropertyAsync)for(let s of o)await this.visitor.visitPropertyAsync(e,t,i,s,n);for(let s of o)for(let a of re(s))await this.crawlPropertyValue(a,i,n)}async crawlPropertyValue(e,t,n){if(!dt(e.type)){let i=n.innerTypes?.find(o=>o.name===e.type)??le(e.type);await this.crawlObject(e,i,t)}}};function Ve(r,e,t){if(r===void 0)return[void 0];if(e==="$this")return[r];let n=t?.withPath?mr:_,[i,...o]=e.split("."),s=[n(r,i,t)];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,t));else(t?.withPath&&l?.value!==void 0||!t?.withPath&&l!==void 0)&&u.push(n(l,a,t));s=u}return s}function mr(r,e,t){let n=r.path;return Da(_(r,e,t),n,e)}function Da(r,e,t){let n=e?e+".":"";return r===void 0?{type:"undefined",value:void 0,path:`${n}${t}`}:Array.isArray(r)?r.map((i,o)=>({...i,path:`${n}${t}[${o}]`})):{...r,path:`${n}${t}`}}function Ma(r){return r[0]===r[0].toUpperCase()&&(r=r.slice(r.indexOf(".")+1)),`.${r}`.replaceAll(".","/").replaceAll(/\[(\d+)]/g,(e,t)=>`/${t}`)}var hr={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"},_a=new J(1e3);function dt(r){return r==="undefined"||r in hr}var pt={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:/.*/},La={"ele-1":!0,"dom-3":!0,"org-1":!0,"sdf-19":!0};function Na(r,e){if(!lt(r.resourceType))throw new f(T("Invalid resource type"));return Ki(b(r),e)}function Ki(r,e){return new Cn(r,e).validate()}var Cn=class{constructor(e,t){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),t?.profile?this.schema=ur(t.profile):this.schema=le(e.type),this.base64BinaryMaxBytes=t?.base64BinaryMaxBytes??1*1024*1024,this.collect=t?.collect}currentResource(){return this.resourceStack.at(-1)}validate(){Pn(this.root.value,this.schema.path,this.issues),this.constraintsCheck({...this.root,path:this.schema.path},this.schema),fr(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,t,n){this.checkAdditionalProperties(t,n.elements,t.path)}onEnterResource(e,t){this.resourceStack.push(t.value)}onExitResource(){this.resourceStack.pop()}visitProperty(e,t,n,i,o){let s=o.elements[t];if(!s)throw new Error(`Missing element validation schema for ${t}`);for(let a of i){if(!this.checkPresence(a,s,n))return;let u;if(s.isArray){if(!Array.isArray(a)){this.issues.push(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}`)),Ba(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=Wa(p,s.slicing);g&&l&&(l[g]+=1)}this.validateSlices(s.slicing?.slices,l,n)}}checkPresence(e,t,n){return!Array.isArray(e)&&e.value===void 0?(t.min>0&&this.issues.push(E(e.path,"Missing required property")),!1):A(e)?(this.issues.push(E(n,"Invalid empty value")),!1):!0}checkPropertyValue(e){dt(e.type)?this.validatePrimitiveType(e):A(e.value)&&this.issues.push(E(e.path,"Invalid empty non-primitive value"))}validateSlices(e,t,n){if(!(!e||!t))for(let i of e){let o=t[i.name];(o<i.min||o>i.max)&&this.issues.push(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,t,n){let i=e.value;if(!i)return;let o={};for(let s of Object.keys(i)){if(s==="resourceType")continue;let a=Ua(e,s,t);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(Te("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(Te("warning","structure",`Conflicting choice of type properties: "${s}", "${o[a]}"`,s)),o[a]=s;continue}!(s in t)&&!(s.startsWith("_")&&s.slice(1)in t)&&this.issues.push(E(`${n}.${s}`,`Invalid additional property "${s}"`))}}constraintsCheck(e,t){let n=t.constraints;for(let i of n??y)if(i.severity==="error"&&!(i.key in La)&&!this.isExpressionTrue(i,e)){this.issues.push(pn(e.path,i));return}}referenceTypeCheck(e,t){if(e.type!=="Reference")return;let n=e.value;if(!G(n)||n.reference.startsWith("#"))return;let i=n.reference.includes("?")?n.reference.split("?")[0]:n.reference.split("/")[0];if(!i)return;let o=t.type.find(g=>g.code==="Reference")?.targetProfile;if(!o)return;let s=ct+"/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(Te("warning","structure",`Invalid reference: got "${i}", expected "${o.join('", "')}"`,e.path))}collectValue(e,t){t.binding?.valueSet&&t.binding.strength==="required"&&ja(e.type)&&this.appendToken(t.binding.valueSet,e)}appendToken(e,t){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===t.path)return;this.collect.tokens[e]=K(n,t)}isExpressionTrue(e,t){let n={"%context":t,"%ucum":b(tn)},i=this.currentResource();i&&(n["%resource"]=b(i)),I(this.root.value)&&(n["%rootResource"]=this.root);try{let o=w(e.expression,[t],n,_a);return o.length===1&&o[0].value===!0}catch(o){return this.issues.push(fn(t.path,"Error evaluating invariant expression",o,{fhirpath:e.expression})),!1}}validatePrimitiveType(e){let[t,n]=qa(e),i=e.path;if(t){let{type:o,value:s}=t;if(!(o in hr)){this.issues.push(E(i,`Invalid JSON type: ${o} is not a valid FHIR type`));return}let a=hr[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&&fr(n,this,{schema:le("Element"),initialPath:i})}validateBase64Binary(e,t){if(!$a(e)){this.issues.push(E(t,"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(t,`base64Binary exceeds ${this.base64BinaryMaxBytes} bytes`))}validateString(e,t,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=pt[t];i&&!i.exec(e)&&this.issues.push(E(n,"Invalid "+t+" format"))}validateNumber(e,t,n){Number.isNaN(e)||!Number.isFinite(e)?this.issues.push(E(n,"Invalid numeric value")):Fa(t)&&!Number.isInteger(e)?this.issues.push(E(n,"Expected number to be an integer")):t===d.positiveInt&&e<=0?this.issues.push(E(n,"Expected number to be positive")):t===d.unsignedInt&&e<0&&this.issues.push(E(n,"Expected number to be non-negative"))}};function Fa(r){return r===d.integer||r===d.positiveInt||r===d.unsignedInt}function Ua(r,e,t){let n="";e.startsWith("_")&&(e=e.slice(1),n="_");let i=e.split(/(?=[A-Z])/g),o="";for(let s of i){o+=s;let a=o+"[x]";if(t[a])return _(r,o)?n+a:void 0}}function Pn(r,e,t){for(let[n,i]of Object.entries(r)){let o=`${e}.${n}`,s=n.startsWith("_")?n.slice(1):`_${n}`;if(i===null)t.push(E(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?t.push(E(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!r[s]?.[a]?t.push(E(`${o}[${a}]`,"Invalid null value")):i[a]&&Pn(i[a],`${o}[${a}]`,t);else typeof i=="object"&&Pn(i,o,t)}}function Ba(r,e){let t=Array.isArray(r)?r.map(n=>({type:n.type,value:n.value})):{type:r.type,value:r.value};return!(e.pattern&&!Ge(t,e.pattern)||e.fixed&&!pe(t,e.fixed))}function gr(r,e,t,n){if(Array.isArray(r))return!1;let i;e.path==="$this"?i=t:i=(n??t.elements)[e.path];let o=t.type;switch(e.type){case"value":case"pattern":if(!r||!i)return!1;if(i.pattern)return Ge(r,i.pattern);if(i.fixed)return pe(r,i.fixed);if(i.binding?.strength==="required"&&i.binding.valueSet)return!0;break;case"type":return!r||!o?.length?!1:o.some(s=>s.code===r.type)}return!1}function Wa(r,e){for(let t of e?.slices??y)if(e?.discriminator?.every(n=>re(Ve(r,n.path))?.some(i=>gr(i,n,t))))return t.name}function qa(r){if(typeof r.value!="object"||!r.value)return[r,void 0];let e=r.value.valueOf();if(e===r.value)return[void 0,{type:"Element",value:r.value}];let t=new Set(Object.keys(e)),n=Object.entries(r.value).filter(([o,s])=>!t.has(o)),i=n.length>0?Object.fromEntries(n):void 0;return[{type:r.type,value:e},{type:"Element",value:i}]}function ja(r){switch(r){case"CodeableConcept":case"Coding":case"code":case"Quantity":case"string":case"uri":return!0;default:return!1}}function $a(r){if(r.length===0)return!1;let e=0;r.endsWith("==")?e=2:r.endsWith("=")&&(e=1);let t=r.length-e;if(t<0||(e+t)%4!==0)return!1;let n=e>0?r.slice(0,-e):r;return/^[A-Za-z\d+/]+$/.test(n)}function h(r){return[{type:d.boolean,value:r}]}function b(r){return r==null?{type:"undefined",value:void 0}:Number.isSafeInteger(r)?{type:d.integer,value:r}:typeof r=="number"?{type:d.decimal,value:r}:typeof r=="boolean"?{type:d.boolean,value:r}:typeof r=="string"?{type:d.string,value:r}:V(r)?{type:d.Quantity,value:r}:I(r)?{type:r.resourceType,value:r}:Tr(r)?{type:d.CodeableConcept,value:r}:vr(r)?{type:d.Coding,value:r}:{type:d.BackboneElement,value:r}}function q(r){return r.length===0?!1:!!r[0].value}function D(r,e){if(r.length!==0){if(r.length===1&&(!e||r[0].type===e))return r[0];throw new Error(`Expected singleton of type ${e}, but found ${JSON.stringify(r)}`)}}function _(r,e,t){if(!r.value)return;let n=gt(r.type,e,t?.profileUrl);return n?eo(r,e,n):to(r,e)}function eo(r,e,t){let n=r.value,i=t.type;if(!i||i.length===0)return;let o,s="undefined",a,u=t.path.lastIndexOf("."),l=t.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]=An(o[v],a[v])}else if(!o&&Array.isArray(a)){o=a.slice();for(let v=0;v<a.length;v++)o[v]=An(void 0,a[v])}else o=An(o,a);if(!A(o))return(s==="Element"||s==="BackboneElement")&&(s=t.type[0].code),Array.isArray(o)?o.map(v=>Yi(v,s)):Yi(o,s)}function Yi(r,e){return e==="Resource"&&I(r)&&(e=r.resourceType),{type:e,value:r}}function to(r,e){let t=r.value;if(!t||typeof t!="object")return;let n;if(e in t){let i=t[e];Array.isArray(i)?n=i.map(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 t){let a=t[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||A(n[0]))return}else if(A(n))return;return n}function ft(r){let e=[];for(let t of r){let n=!1;for(let i of e)if(q(Qe(t,i))){n=!0;break}n||e.push(t)}return e}function wn(r){return h(!q(r))}function On(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?h(!1):h(r.every((t,n)=>q(Qe(t,e[n]))))}function In(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?h(!0):h(r.some((t,n)=>!q(Qe(t,e[n]))))}function Qe(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?h(Math.abs(t-n)<1e-8):V(t)&&V(n)?h(Dn(t,n)):h(typeof t=="object"&&typeof n=="object"?Mn(r,e):t===n)}function xr(r,e){return r.length===0&&e.length===0?h(!0):r.length!==e.length?h(!1):(r.sort(Xi),e.sort(Xi),h(r.every((t,n)=>q(ro(t,e[n])))))}function ro(r,e){let{type:t,value:n}=r,{type:i,value:o}=e,s=n?.valueOf(),a=o?.valueOf();return typeof s=="number"&&typeof a=="number"?h(Math.abs(s-a)<.01):V(s)&&V(a)?h(Dn(s,a)):h(t==="Coding"&&i==="Coding"?typeof s!="object"||typeof a!="object"?!1:s.code===a.code&&s.system===a.system:typeof s=="object"&&typeof a=="object"?Mn({...s,id:void 0},{...a,id:void 0}):typeof s=="string"&&typeof a=="string"?s.toLowerCase()===a.toLowerCase():s===a)}function Xi(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?t-n:typeof t=="string"&&typeof n=="string"?t.localeCompare(n):0}function mt(r,e){let{value:t}=r;if(t==null)return!1;let n=e;switch(n.startsWith("System.")&&(n=n.substring(7)),n.startsWith("FHIR.")&&(n=n.substring(5)),n){case"Boolean":return typeof t=="boolean";case"Decimal":case"Integer":return typeof t=="number";case"Date":return kn(t);case"DateTime":return De(t);case"Time":return typeof t=="string"&&!!/^T\d/.exec(t);case"Period":return Vn(t);case"Quantity":return V(t);default:return r.type===n||typeof t=="object"&&t?.resourceType===n}}function kn(r){return typeof r=="string"&&!!pt.date.exec(r)}function De(r){return typeof r=="string"&&!!pt.dateTime.exec(r)}function Vn(r){return!!(r&&typeof r=="object"&&("start"in r&&De(r.start)||"end"in r&&De(r.end)))}function ht(r){if(kn(r)||De(r))return{start:yr(r,"0000-01-01T00:00:00.000"),end:yr(r,"xxxx-12-31T23:59:59.999")};if(Vn(r))return{start:r.start?yr(r.start,"0000-01-01T00:00:00.000"):void 0,end:r.end?yr(r.end,"xxxx-12-31T23:59:59.999"):void 0}}function yr(r,e){let t="Z",n=Math.max(r.indexOf("+",10),r.indexOf("-",10));n>-1?(t=r.substring(n),r=r.substring(0,n)):r.endsWith("Z")&&(r=r.substring(0,r.length-1));let i=r+e.substring(r.length)+t;return new Date(i).toISOString()}function V(r){return!!(r&&typeof r=="object"&&"value"in r&&typeof r.value=="number")}function Dn(r,e){return Math.abs(r.value-e.value)<.01&&(r.unit===e.unit||r.code===e.code||r.unit===e.code||r.code===e.unit)}function Mn(r,e){let t=Object.keys(r),n=Object.keys(e);if(t.length!==n.length)return!1;for(let i of t){let o=r[i],s=e[i];if(Zi(o)&&Zi(s)){if(!Mn(o,s))return!1}else if(o!==s)return!1}return!0}function Zi(r){return r!==null&&typeof r=="object"}function An(r,e){if(e){if(typeof e!="object")throw new Error("Primitive extension must be an object");return Ha(r??{},e)}return r}function Ha(r,e){return delete e.__proto__,delete e.constructor,Object.assign(r,e)}function Je(r,e){return I(r,e)&&"id"in r&&typeof r.id=="string"}function Se(r){let e=O(r)??"undefined/undefined",t=oo(r);return t===e?{reference:e}:{reference:e,display:t}}function O(r){if(G(r))return r.reference;if(Je(r))return`${r.resourceType}/${r.id}`}function be(r){if(r)return G(r)?r.reference.split("/")[1]:r.id}function Ga(r){if(r?.reference===void 0)throw new f(T("Reference missing reference property."));let[e,t]=r.reference.split("/");if(e===""||t===""||t===void 0)throw new f(T("Unable to parse reference string."));return[e,t]}function br(r){if(r)if(r.accounts&&r.account){let e=r.accounts;return e.some(t=>t.reference===r.account?.reference)?e:[r.account,...e]}else return re(r.accounts??r.account)}function io(r){return r.resourceType==="Patient"||r.resourceType==="Practitioner"||r.resourceType==="RelatedPerson"}function oo(r){if(io(r)){let e=Qa(r);if(e)return e}if(r.resourceType==="Device"){let e=za(r);if(e)return e}if(r.resourceType==="MedicationRequest"&&r.medicationCodeableConcept)return ze(r.medicationCodeableConcept);if(r.resourceType==="Subscription"&&r.criteria)return r.criteria;if(r.resourceType==="User"&&r.email)return r.email;if("name"in r&&r.name&&typeof r.name=="string")return r.name;if("code"in r&&r.code){let e=r.code;if(Array.isArray(e)&&(e=e[0]),Tr(e))return ze(e);if(uo(e))return e.text}return O(r)??""}function Qa(r){let e=r.name;if(e&&e.length>0)return Ke(e[0])}function za(r){let e=r.deviceName;if(e&&e.length>0)return e[0].name}function Ja(r){if(!("photo"in r))return;let e=r.photo;if(e)if(Array.isArray(e))for(let t of e){let n=no(t);if(n)return n}else return no(e)}function no(r){if(r.url&&r.contentType?.startsWith("image/"))return r.url}function Ka(r){return r?new Date(r):void 0}function yt(r,e){let t=new Date(r);t.setUTCHours(0,0,0,0);let n=e?new Date(e):new Date;n.setUTCHours(0,0,0,0);let i=t.getUTCFullYear(),o=t.getUTCMonth(),s=t.getUTCDate(),a=n.getUTCFullYear(),u=n.getUTCMonth(),l=n.getUTCDate(),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()-t.getTime())/(1e3*60*60*24));return{years:p,months:g,days:v}}function Ya(r,e){let{years:t,months:n,days:i}=yt(r,e);return t>=2?t.toString().padStart(3,"0")+"Y":n>=1?n.toString().padStart(3,"0")+"M":i.toString().padStart(3,"0")+"D"}function Xa(r){let e={};return so(r.item,e),e}function so(r,e){for(let t of r??y)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer[0]),so(t.item,e)}function Za(r){let e={};return ao(r.item,e),e}function ao(r,e){for(let t of r??y)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]?e[t.linkId]=[...e[t.linkId],...t.answer]:e[t.linkId]=t.answer),ao(t.item,e)}function Er(r,e){let t=r.identifier;if(!t)return;let n=Array.isArray(t)?t:[t];for(let i of n)if(i.system===e)return i.value}function ec(r,e,t,n){let i={system:e,value:t};n?.use&&(i.use=n.use);let o=r.identifier;if(!o){r.identifier=[i];return}for(let s of o)if(s.system===e){Object.assign(s,i);return}o.push(i)}function Rr(r,...e){let t=de(r,...e);if(!t)return;let n=_({type:"Extension",value:t},"value[x]");if(n)return Array.isArray(n)?n[0].value:n.value}function de(r,...e){let t=r;for(let n=0;n<e.length&&t;n++)t=t?.extension?.find(i=>i.url===e[n]);return t}function xt(r,e){let t=_n(r);return JSON.stringify(t,null,e?2:void 0)??""}function _n(r){if(!(r==null||r===""))return typeof r=="object"?Array.isArray(r)?tc(r):rc(r):r}function tc(r){let e=r.length;if(e===0)return;let t,n=0;for(let i=0;i<e;i++){let o=r[i],s=_n(o);s!==o&&!t&&(t=Array.from(r)),s===void 0?t&&(t[i]=null):(t&&(t[i]=s),n++)}if(n!==0)return t??r}function rc(r){let e,t=0;for(let n in r){let i=r[n],o=_n(i);o!==i&&!e&&(e={...r}),o===void 0?e&&delete e[n]:(e&&(e[n]=o),t++)}if(t!==0)return e??r}function A(r){if(r==null)return!0;let e=typeof r;return e==="string"||e==="object"?!ie(r):!1}function ie(r){if(r==null)return!1;let e=typeof r;return e==="string"&&r!==""||e==="object"&&("length"in r&&r.length>0||Object.keys(r).length>0)}function nc(r){if(!r)return;let e=r.length-1;for(;e>=0&&A(r[e]);)e--;return e>=0?r.slice(0,e+1):void 0}function pe(r,e,t){return r===e||A(r)&&A(e)?!0:A(r)||A(e)?!1:Array.isArray(r)&&Array.isArray(e)?ic(r,e):Array.isArray(r)||Array.isArray(e)?!1:C(r)&&C(e)?oc(r,e,t):(C(r)||C(e),!1)}function ic(r,e){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(!pe(r[t],e[t]))return!1;return!0}function oc(r,e,t){let n=new Set;for(let i of Object.keys(r))n.add(i);for(let i of Object.keys(e))n.add(i);t==="meta"&&(n.delete("versionId"),n.delete("lastUpdated"),n.delete("author"));for(let i of n){let o=r[i],s=e[i];if(!pe(o,s,i))return!1}return!0}function Ge(r,e){return A(r)?!0:A(e)?!1:Array.isArray(r)&&Array.isArray(e)?sc(r,e):Array.isArray(r)||Array.isArray(e)?!1:C(r)&&C(e)?ac(r,e):C(r)||C(e)?!1:r===e}function sc(r,e){return e.every(t=>r.some(n=>Ge(n,t)))}function ac(r,e){return Object.entries(e).every(([t,n])=>t in r&&Ge(r[t],n))}function Ee(r){return r===void 0?r:JSON.parse(JSON.stringify(r))}function cc(r){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(r)}function C(r){return r!==null&&typeof r=="object"}function uc(r){return r.every(Me)}function Me(r){return typeof r=="string"}function vr(r){return C(r)&&"code"in r&&typeof r.code=="string"}function Tr(r){return C(r)&&"coding"in r&&Array.isArray(r.coding)&&r.coding.every(vr)}function lc(r,e){for(let t of r??y)for(let n of t.coding??y)if(n.system===e)return n.code}function co(r,e){let[t,n]=_e(e,"|",2);return n===void 0?r.code===e:t===""?r.system===void 0&&r.code===n:n===""?r.system===t:r.system===t&&r.code===n}function dc(r,e){return(r.coding??y).some(t=>co(t,e))}function uo(r){return C(r)&&"text"in r&&typeof r.text=="string"}var lo=[];for(let r=0;r<256;r++)lo.push(r.toString(16).padStart(2,"0"));function Ln(r){let e=Fn(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=lo[t[i]];return n.join("")}function Nn(r){let e=Fn(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=String.fromCodePoint(t[i]);return window.btoa(n.join(""))}function Fn(r){return ArrayBuffer.isView(r)?r.buffer:r}function L(r){return r?r.charAt(0).toUpperCase()+r.substring(1):""}function pc(r){return r===r.toLowerCase()&&r!==r.toUpperCase()}function Cr(r){return r.length>0&&r.startsWith(r[0].toUpperCase())}function fe(r,e){let t=r+".";if(e.startsWith(t))return e.slice(t.length)}function Sr(r,e){return r.coding?.find(t=>t.system===e)?.code}function fc(r,e,t){r.coding??=[];let n=r.coding.find(i=>i.system===e);n?n.code=t:r.coding.push({system:e,code:t})}function mc(r,e,t,n){return r.qualifiedInterval?.find(i=>fo(i,e)&&xc(i,t,r.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function hc(r,e,t){return po(r,e,t)[0]}function po(r,e,t){return r.qualifiedInterval?.filter(n=>fo(n,e)&&(!t||t.includes(n.condition)))??[]}function fo(r,e){return gc(r,e)&&yc(r,e)}function gc(r,e){return!r.gender||r.gender===e.gender}function yc(r,e){return!r.age||Un(yt(e.birthDate).years,r.age)}function xc(r,e,t){return!!r.range&&Un(e,r.range,t)}function Un(r,e,t){return(e.low?.value===void 0||ho(r,e.low.value,t))&&(e.high?.value===void 0||mo(r,e.high.value,t))}function vc(r,e){return Number.parseFloat(r.toFixed(e))}function Tc(r,e,t){return ne(r,t)===ne(e,t)}function Sc(r,e,t){return ne(r,t)<ne(e,t)}function bc(r,e,t){return ne(r,t)>ne(e,t)}function mo(r,e,t){return ne(r,t)<=ne(e,t)}function ho(r,e,t){return ne(r,t)>=ne(e,t)}function ne(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}function Ec(r,e,t){return r.find(n=>typeof e=="string"?Sr(n.code||{},t)===e:Sr(n.code||{},t)===Sr(e,t))}function Rc(r){return Array.isArray(r)?r[0]:r}var Pr=(r,e)=>new Promise((t,n)=>{e?.signal?.throwIfAborted();let i=setTimeout(t,r);e?.signal?.addEventListener("abort",()=>{clearTimeout(i),n(e.signal?.reason)},{once:!0})});function _e(r,e,t){let n=[];for(let i=0;i<t-1;i++){let o=r.indexOf(e);if(o<0)break;n.push(r.slice(0,o)),r=r.slice(o+e.length)}return n.push(r),n}function Bn(r){let e,t=!1;return function(){return t||(e=r(),t=!0),e}}function K(r,e){return r?(r.push(e),r):[e]}function vt(r){return r.sort((e,t)=>e.localeCompare(t))}function Ar(r){return r.endsWith("/")?r:r+"/"}function go(r){return r.startsWith("/")?r.slice(1):r}function U(r,e){return new URL(go(e),Ar(r.toString())).toString()}function Wn(r,e){return U(r,e).toString().replace("http://","ws://").replace("https://","wss://")}function qn(r){return typeof r=="object"&&!Array.isArray(r)&&!(r instanceof URLSearchParams)&&(r=Object.fromEntries(Object.entries(r).filter(e=>e[1]!==void 0))),new URLSearchParams(r).toString()}var yo=/^(([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 Cc(r){return yo.test(r)}function Pc(r,e){return r?.meta?.profile?.includes(e)||(r.meta=r.meta??{},r.meta.profile=r.meta.profile??[],r.meta.profile.push(e)),r}function Ac(r,e){return new Map(r.entry?.filter(n=>!!n.resource).map(n=>[Er(n.resource,e),n.resource]).filter(([n])=>n!==void 0))}function wc(r,e){if(r?.meta?.profile?.includes(e)){let t=r.meta.profile.indexOf(e);r.meta.profile.splice(t,1)}return r}function Oc(r,e){let t=[];if(!r)return t;for(let n=0;n<r.length;n++){let i=e(r[n],n);Array.isArray(i)?t.push(...i):i!==void 0&&t.push(i)}return t}function Ic(r){return r.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("\u201C","&ldquo;").replaceAll("\u201D","&rdquo;").replaceAll("\u2018","&lsquo;").replaceAll("\u2019","&rsquo;").replaceAll("\u2026","&hellip;")}function kc(r){return r!=null}var y=Object.freeze([]),Vc=()=>{};function jn(r){if(!r)return"";switch(r.type){case"Address":return vo(r.value);case"CodeableConcept":return ze(r.value);case"Coding":return $n(r.value);case"ContactPoint":return r.value.value;case"HumanName":return Ke(r.value);case"Quantity":return me(r.value);case"Reference":return xo(r.value);default:return r.value?.toString()??""}}function xo(r){return r?r.display??r.reference??xt(r):""}function vo(r,e){if(!r)return"";let t=[];if(r.line&&t.push(...r.line),r.city||r.state||r.postalCode){let n=[];r.city&&n.push(r.city),r.state&&n.push(r.state),r.postalCode&&n.push(r.postalCode),t.push(n.join(", "))}return r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.join(e?.lineSeparator??", ").trim()}function Ke(r,e){if(!r)return"";let t=[];if(r.prefix&&e?.prefix!==!1&&t.push(...r.prefix),r.given&&t.push(...r.given),r.family&&t.push(r.family),r.suffix&&e?.suffix!==!1&&t.push(...r.suffix),r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.length===0){let n=Le(r.text);if(n)return n}return t.join(" ").trim()}function Dc(r){let e=[];return r.given&&e.push(...r.given),e.join(" ").trim()}function Mc(r){return Le(r.family)??""}function Tt(r){return r instanceof Date&&!Number.isNaN(r.getTime())}function _c(r,e,t){if(!r)return"";let n=new Date(r);return Tt(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...t})):""}function Lc(r,e,t){if(!r)return"";let n=new Date("2000-01-01T"+r+"Z");return Tt(n)?n.toLocaleTimeString(e,t):""}function To(r,e,t){if(!r)return"";let[n=0,i=0,o=0]=r.split(":").map(Number),s=new Date(Date.UTC(1970,0,1,n,i,o));return Tt(s)?new Intl.DateTimeFormat(e,{hour:"numeric",minute:"2-digit",second:o===0?void 0:"numeric",...t,timeZone:"UTC"}).format(s):""}function wr(r,e,t){if(!r)return"";let n=new Date(r);return Tt(n)?n.toLocaleString(e,t):""}function Nc(r,e,t){return!r||!r.start&&!r.end?"":wr(r.start,e,t)+" - "+wr(r.end,e,t)}var Fc={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},Uc={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},Bc={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function Wc(r){if(!r)return"";let e=[];return qc(e,r.repeat),r.event&&e.push(r.event.map(t=>wr(t)).join(", ")),L(e.join(" ").trim())}function qc(r,e){if(!e?.periodUnit)return;let t=e.frequency??1,n=e.period??1,i=e.periodUnit;t===1&&n===1?r.push(Fc[i]):(t===1?r.push("once"):r.push(t+" times"),n===1?r.push("per "+Uc[i]):r.push("per "+n+" "+Bc[i])),e.dayOfWeek&&r.push("on "+e.dayOfWeek.map(L).join(", ")),e.timeOfDay&&r.push("at "+e.timeOfDay.map(o=>To(o)).join(", "))}function jc(r,e,t=!1){if(t&&e===void 0)throw new Error("Precision must be specified for exclusive ranges");let n=r?.low&&{...r.low,comparator:void 0},i=r?.high&&{...r.high,comparator:void 0};return n?.value===void 0&&i?.value===void 0?"":n?.value!==void 0&&i?.value===void 0?t&&e!==void 0?(n.value=Gc(n.value,e),`> ${me(n,e)}`):`>= ${me(n,e)}`:n?.value===void 0&&i?.value!==void 0?t&&e!==void 0?(i.value=Hc(i.value,e),`< ${me(i,e)}`):`<= ${me(i,e)}`:(n?.unit===i?.unit&&delete n?.unit,`${me(n,e)} - ${me(i,e)}`)}function me(r,e){if(!r)return"";let t=[];return r.comparator&&(t.push(r.comparator),t.push(" ")),r.value!==void 0&&(e!==void 0?t.push(r.value.toFixed(e)):t.push(r.value)),r.unit&&(r.unit!=="%"&&t.at(-1)!==" "&&t.push(" "),t.push(r.unit)),t.join("").trim()}function $c(r){return r?.value===void 0?"":r.value.toLocaleString(void 0,{style:"currency",currency:r.currency??"USD",currencyDisplay:"narrowSymbol"})}function ze(r){if(!r)return"";let e=Le(r.text);return e||(r.coding?r.coding.map(t=>$n(t)).join(", "):"")}function $n(r,e){let t=Le(r?.display);if(t){let n=e?Le(r?.code):void 0;return`${t}${n?" ("+n+")":""}`}return Le(r?.code)??""}function So(r){if(!r)return"";let e=[];if(r.valueQuantity)e.push(me(r.valueQuantity));else if(r.valueCodeableConcept)e.push(ze(r.valueCodeableConcept));else{let t=Le(r.valueString);t&&e.push(t)}return"component"in r&&e.push(r.component.map(t=>So(t)).join(" / ")),e.join(" / ").trim()}function Le(r){return typeof r=="string"?r:void 0}function Hc(r,e,t=1){return(bo(r,e)+t)*Math.pow(10,-e)}function Gc(r,e,t=1){return(bo(r,e)-t)*Math.pow(10,-e)}function bo(r,e){return e===void 0?r:Math.round(r*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 Qc(r){for(let e of r.entry??y){let t=e.resource;t.resourceType==="SearchParameter"&&Or(t)}}function bn(r){let e=Array.isArray(r)?r:r.entry?.map(t=>t.resource)??[];for(let t of e)t?.resourceType==="StructureDefinition"&&t.kind==="resource"&&Ro(t.type)}function Ro(r){let e=j.types[r];return e||(e={searchParamsDetails:{}},j.types[r]=e),!e.searchParams&&r!=="Binary"&&(e.searchParams={_id:{base:[r],code:"_id",type:"token",expression:r+".id"},_lastUpdated:{base:[r],code:"_lastUpdated",type:"date",expression:r+".meta.lastUpdated"},_compartment:{base:[r],code:"_compartment",type:"reference",expression:r+".meta.compartment"},_profile:{base:[r],code:"_profile",type:"uri",expression:r+".meta.profile"},_security:{base:[r],code:"_security",type:"token",expression:r+".meta.security"},_source:{base:[r],code:"_source",type:"uri",expression:r+".meta.source"},_tag:{base:[r],code:"_tag",type:"token",expression:r+".meta.tag"},_project:{base:[r],code:"_project",type:"token",expression:r+".meta.project"}}),e}function Or(r){for(let e of r.base??y){let t=Ro(e);t.searchParams||(t.searchParams={}),t.searchParams[r.code]=r}}function cr(r){let e=r.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?Co((r.base?.path??r.path)?.split(".")):e}function Co(r){return r.length===1?r[0]:r.map(L).join("")}function pr(r){return r.kind==="resource"&&r.name!=="Resource"&&r.name!=="DomainResource"}function zc(){return Object.values(xn()).filter(pr).map(r=>r.name)}function Jc(r){return j.types[r]?.searchParams}function Kc(r,e){return j.types[r]?.searchParams?.[e]}function Yc(r){let e=r.replaceAll("[x]","").split(".").pop();return Po(e)}function Po(r){let e;return r.length<100?e=r.match(/[A-Z]+(?![a-z])|[A-Z]?[a-z]+|\d+/g)??[]:e=r.split(/(?=[A-Z])/),e.map(Zc).join(" ").replace("_"," ").replaceAll(/\s+/g," ")}var Xc=new Set(["CDS","ID","IP","PKCE","JWKS","URI","URL","OMB","UDI"]);function Zc(r){let e=r.toUpperCase();return r===e?r:Xc.has(e)?e:e.charAt(0)+r.slice(1)}function gt(r,e,t){let n=He(r,t);if(n)return Ao(n.elements,e)}function Ao(r,e){let t=r[e]??r[e+"[x]"];if(t)return t;for(let n=0;n<e.length;n++){let i=e[n];if(i>="A"&&i<="Z"){let o=e.slice(0,n)+"[x]",s=r[o];if(s)return s}}}function eu(r){return!!(r&&typeof r=="object"&&"type"in r&&"value"in r)}function I(r,e){return!(!r||typeof r!="object"||!("resourceType"in r)||e&&r.resourceType!==e)}function G(r,e){return r&&typeof r=="object"&&"reference"in r&&typeof r.reference=="string"?e?r.reference.match(new RegExp(`^${e}(/|\\?)`))!==null:!0:!1}var j={types:{}};function Hn(r){switch(r.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 r.value;case d.Identifier:return`${r.value.system??""}|${r.value.value}`;case d.Coding:return Eo(r.value);case d.CodeableConcept:return r.value.coding?.map(Eo).join(",")??r.value.text;case d.HumanName:return r.value.text?r.value.text:Ke(r.value);case d.unsignedInt:case d.positiveInt:case d.integer:case d.decimal:return r.value.toString();case d.boolean:return r.value?"true":"false";case d.Extension:return r.value.url;case d.ContactPoint:return r.value.value;case d.Quantity:case d.Age:case d.Count:case d.Duration:return`${r.value.value}|${r.value.system??""}|${r.value.code??r.value.unit??""}`;case d.Reference:return r.value.reference;default:return Je(r.value)?O(r.value):JSON.stringify(r)}}function Eo(r){return r?`${r.system??""}|${r.code}`:""}function Ye(r){if(r.startsWith("T"))return r+"T00:00:00.000Z".substring(r.length);if(r.length<=10)return r;try{return new Date(r).toISOString()}catch{return r}}var he=()=>[],N={empty:(r,e)=>h(e.every(t=>A(t.value))),hasValue:(r,e)=>h(e.length!==0),exists:(r,e,t)=>t?h(e.some(n=>q(t.eval(r,[n])))):h(e.length>0&&e.every(n=>!A(n.value))),all:(r,e,t)=>h(e.every(n=>q(t.eval(r,[n])))),allTrue:(r,e)=>{for(let t of e)if(!t.value)return h(!1);return h(!0)},anyTrue:(r,e)=>{for(let t of e)if(t.value)return h(!0);return h(!1)},allFalse:(r,e)=>{for(let t of e)if(t.value)return h(!1);return h(!0)},anyFalse:(r,e)=>{for(let t of e)if(!t.value)return h(!0);return h(!1)},subsetOf:(r,e,t)=>{if(e.length===0)return h(!0);let n=t.eval(r,Ne(r));return n.length===0?h(!1):h(e.every(i=>n.some(o=>o.value===i.value)))},supersetOf:(r,e,t)=>{let n=t.eval(r,Ne(r));return n.length===0?h(!0):e.length===0?h(!1):h(n.every(i=>e.some(o=>o.value===i.value)))},count:(r,e)=>[{type:d.integer,value:e.length}],distinct:(r,e)=>{let t=[];for(let n of e)t.some(i=>i.value===n.value)||t.push(n);return t},isDistinct:(r,e)=>h(e.length===N.distinct(r,e).length),where:(r,e,t)=>e.filter(n=>q(t.eval(r,[n]))),select:(r,e,t)=>e.flatMap(n=>t.eval({parent:r,variables:{$this:n}},[n])),repeat:he,ofType:(r,e,t)=>e.filter(n=>n.type===t.name),single:(r,e)=>{if(e.length>1)throw new Error("Expected input length one for single()");return e.length===0?[]:e.slice(0,1)},first:(r,e)=>e.length===0?[]:e.slice(0,1),last:(r,e)=>e.length===0?[]:e.slice(-1,e.length),tail:(r,e)=>e.length===0?[]:e.slice(1,e.length),skip:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new TypeError("Expected a number for skip(num)");return n>=e.length?[]:n<=0?e:e.slice(n,e.length)},take:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new TypeError("Expected a number for take(num)");return n<=0?[]:e.slice(0,n)},intersect:(r,e,t)=>{if(!t)return e;let n=t.eval(r,Ne(r)),i=[];for(let o of e)!i.some(s=>s.value===o.value)&&n.some(s=>s.value===o.value)&&i.push(o);return i},exclude:(r,e,t)=>{if(!t)return e;let n=t.eval(r,Ne(r)),i=[];for(let o of e)n.some(s=>s.value===o.value)||i.push(o);return i},union:(r,e,t)=>{if(!t)return e;let n=t.eval(r,Ne(r));return ft([...e,...n])},combine:(r,e,t)=>{if(!t)return e;let n=t.eval(r,Ne(r));return[...e,...n]},htmlChecks:(r,e,t)=>[b(!0)],iif:(r,e,t,n,i)=>{let o=t.eval(r,e);if(o.length>1||o.length===1&&typeof o[0].value!="boolean")throw new Error("Expected criterion to evaluate to a Boolean");return q(o)?n.eval(r,e):i?i.eval(r,e):[]},toBoolean:(r,e)=>{if(e.length===0)return[];let[{value:t}]=se(e,1);if(typeof t=="boolean")return[{type:d.boolean,value:t}];if(typeof t=="number"&&(t===0||t===1))return h(!!t);if(typeof t=="string"){let n=t.toLowerCase();if(["true","t","yes","y","1","1.0"].includes(n))return h(!0);if(["false","f","no","n","0","0.0"].includes(n))return h(!1)}return[]},convertsToBoolean:(r,e)=>e.length===0?[]:h(N.toBoolean(r,e).length===1),toInteger:(r,e)=>{if(e.length===0)return[];let[{value:t}]=se(e,1);return typeof t=="number"?[{type:d.integer,value:t}]:typeof t=="string"&&/^[+-]?\d+$/.exec(t)?[{type:d.integer,value:Number.parseInt(t,10)}]:typeof t=="boolean"?[{type:d.integer,value:t?1:0}]:[]},convertsToInteger:(r,e)=>e.length===0?[]:h(N.toInteger(r,e).length===1),toDate:(r,e)=>{if(e.length===0)return[];let[{value:t}]=se(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:d.date,value:Ye(t)}]:[]},convertsToDate:(r,e)=>e.length===0?[]:h(N.toDate(r,e).length===1),toDateTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=se(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:d.dateTime,value:Ye(t)}]:[]},convertsToDateTime:(r,e)=>e.length===0?[]:h(N.toDateTime(r,e).length===1),toDecimal:(r,e)=>{if(e.length===0)return[];let[{value:t}]=se(e,1);return typeof t=="number"?[{type:d.decimal,value:t}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(t)?[{type:d.decimal,value:Number.parseFloat(t)}]:typeof t=="boolean"?[{type:d.decimal,value:t?1:0}]:[]},convertsToDecimal:(r,e)=>e.length===0?[]:h(N.toDecimal(r,e).length===1),toQuantity:(r,e)=>{if(e.length===0)return[];let[{value:t}]=se(e,1);return V(t)?[{type:d.Quantity,value:t}]:typeof t=="number"?[{type:d.Quantity,value:{value:t,unit:"1"}}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(t)?[{type:d.Quantity,value:{value:Number.parseFloat(t),unit:"1"}}]:typeof t=="boolean"?[{type:d.Quantity,value:{value:t?1:0,unit:"1"}}]:[]},convertsToQuantity:(r,e)=>e.length===0?[]:h(N.toQuantity(r,e).length===1),toString:(r,e)=>{if(e.length===0)return[];let[{value:t}]=se(e,1);return t==null?[]:V(t)?[{type:d.string,value:`${t.value} '${t.unit}'`}]:[{type:d.string,value:t.toString()}]},convertsToString:(r,e)=>e.length===0?[]:h(N.toString(r,e).length===1),toTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=se(e,1);if(typeof t=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(t);if(n)return[{type:d.time,value:Ye("T"+n[1])}]}return[]},convertsToTime:(r,e)=>e.length===0?[]:h(N.toTime(r,e).length===1),indexOf:(r,e,t)=>Q((n,i)=>n.indexOf(i),r,e,t),substring:(r,e,t,n)=>Q((i,o,s)=>{let a=o,u=s?a+s:i.length;return a<0||a>=i.length?void 0:i.substring(a,u)},r,e,t,n),startsWith:(r,e,t)=>Q((n,i)=>n.startsWith(i),r,e,t),endsWith:(r,e,t)=>Q((n,i)=>n.endsWith(i),r,e,t),contains:(r,e,t)=>Q((n,i)=>n.includes(i),r,e,t),upper:(r,e)=>Q(t=>t.toUpperCase(),r,e),lower:(r,e)=>Q(t=>t.toLowerCase(),r,e),replace:(r,e,t,n)=>Q((i,o,s)=>i.replaceAll(o,s),r,e,t,n),matches:(r,e,t)=>Q((n,i)=>!!new RegExp(i).exec(n),r,e,t),replaceMatches:(r,e,t,n)=>Q((i,o,s)=>i.replaceAll(new RegExp(o,"g"),s.replaceAll(/\$\{(\w+)\}/g,"$<$1>")),r,e,t,n),length:(r,e)=>Q(t=>t.length,r,e),toChars:(r,e)=>Q(t=>t?t.split(""):void 0,r,e),encode:he,decode:he,escape:he,unescape:he,trim:he,split:he,join:(r,e,t)=>{let n=t?.eval(r,Ne(r))[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:(r,e)=>oe(Math.abs,r,e),ceiling:(r,e)=>oe(Math.ceil,r,e),exp:(r,e)=>oe(Math.exp,r,e),floor:(r,e)=>oe(Math.floor,r,e),ln:(r,e)=>oe(Math.log,r,e),log:(r,e,t)=>oe((n,i)=>Math.log(n)/Math.log(i),r,e,t),power:(r,e,t)=>oe(Math.pow,r,e,t),round:(r,e,...t)=>oe((n,i=0)=>{if(typeof i!="number"||i<0)throw new Error("Invalid precision provided to round()");let o=Math.pow(10,i);return Math.round(n*o)/o},r,e,...t),sqrt:(r,e)=>oe(Math.sqrt,r,e),truncate:(r,e)=>oe(t=>Math.trunc(t),r,e),children:he,descendants:he,trace:(r,e,t)=>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:(r,e,t,n,i)=>{let o=N.toDateTime(r,t.eval(r,e));if(o.length===0)throw new Error("Invalid start date");let s=N.toDateTime(r,n.eval(r,e));if(s.length===0)throw new Error("Invalid end date");let a=i.eval(r,e)[0]?.value;if(a!=="years"&&a!=="months"&&a!=="days")throw new Error("Invalid units");let u=yt(o[0].value,s[0].value);return[{type:d.Quantity,value:{value:u[a],unit:a}}]},is:(r,e,t)=>{let n="";return t instanceof B?n=t.name:t instanceof Y&&(n=t.left.name+"."+t.right.name),n?e.map(i=>({type:d.boolean,value:mt(i,n)})):[]},not:(r,e)=>N.toBoolean(r,e).map(t=>({type:d.boolean,value:!t.value})),resolve:(r,e)=>e.map(t=>{let n=t.value,i;if(typeof n=="string")i=n;else if(typeof n=="object"){let o=n;if(o.resource)return 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(t=>!!t.value),as:(r,e,t)=>{let n=t.name,i=D(e,n);return i?[i]:[]},type:(r,e)=>e.map(({value:t})=>typeof t=="boolean"?{type:d.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof t=="number"?{type:d.BackboneElement,value:{namespace:"System",name:"Integer"}}:I(t)?{type:d.BackboneElement,value:{namespace:"FHIR",name:t.resourceType}}:{type:d.BackboneElement,value:null}),conformsTo:(r,e,t)=>{let n=t.eval(r,e)[0].value;if(!n.startsWith("http://hl7.org/fhir/StructureDefinition/"))throw new Error("Expected a StructureDefinition URL");let i=n.replace("http://hl7.org/fhir/StructureDefinition/","");return e.map(o=>({type:d.boolean,value:o.value?.resourceType===i}))},getResourceKey:(r,e)=>{let t=e[0].value;return t?.id?[{type:d.id,value:t.id}]:[]},getReferenceKey:(r,e,t)=>{let n=e[0].value;if(!n?.reference)return[];let i="";return t instanceof B&&(i=t.name),i&&!n.reference.startsWith(i+"/")?[]:[{type:d.id,value:be(n)}]},extension:(r,e,t)=>{let n=t.eval(r,e)[0].value,i=e?.[0]?.value;if(i){let o=de(i,n);if(o)return[{type:d.Extension,value:o}]}return[]}};function Q(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=se(t,1);if(typeof i!="string")throw new TypeError("String function cannot be called with non-string");let o=n.map(a=>a?.eval(e,t)[0]?.value),s=r(i,...o);return s===void 0?[]:Array.isArray(s)?s.map(b):[b(s)]}function oe(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=se(t,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=r(s,...n.map(p=>p.eval(e,t)[0]?.value)),u=o?d.Quantity:t[0].type,l=o?{...i,value:a}:a;return[{type:u,value:l}]}function se(r,e){if(r.length!==e)throw new Error(`Expected ${e} arguments`);for(let t of r)if(t==null)throw new Error("Expected non-null argument");return r}function Ne(r){let e=r;for(;e.parent?.variables.$this;)e=e.parent;return[e.variables.$this]}var ge=class{constructor(e,t){c(this,"original");c(this,"child");this.original=e,this.child=t}eval(e,t){try{if(t.length>0){let n=[];for(let i of t)n.push(this.child.eval({parent:e,variables:{$this:i}},[i]));return n.flat()}else return this.child.eval(e,[])}catch(n){throw new Error(`FhirPathError on "${this.original}": ${n}`,{cause:n})}}toString(){return this.child.toString()}},$=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,t){if(this.name==="$this")return t;let n=this.getVariable(e);if(n)return[n];if(this.name.startsWith("%"))throw new Error(`Undefined variable ${this.name}`);return t.flatMap(i=>this.evalValue(i)).filter(i=>i?.value!==void 0)}getVariable(e){let t=e.variables[this.name];if(t!==void 0)return t;if(e.parent)return this.getVariable(e.parent)}evalValue(e){let t=e.value;if(!(!t||typeof t!="object"))return I(t,this.name)?e:mr(e,this.name)}toString(){return this.name}},St=class{eval(){return[]}toString(){return"{}"}},bt=class extends st{constructor(t,n,i){super(t,n);c(this,"impl");this.impl=i}eval(t,n){return this.impl(this.child.eval(t,n))}toString(){return this.operator+this.child.toString()}},ye=class extends R{constructor(e,t){super("as",e,t)}eval(e,t){return N.as(e,this.left.eval(e,t),this.right)}},F=class extends R{constructor(t,n,i,o){super(t,n,i);c(this,"impl");this.impl=o}eval(t,n){let i=this.left.eval(t,n),o=this.right.eval(t,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)]}},wo=Object.freeze({type:"string",value:""}),Et=class extends R{constructor(e,t){super("&",e,t)}eval(e,t){let n=D(this.left.eval(e,t))??wo,i=D(this.right.eval(e,t))??wo;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}]}},Rt=class extends R{constructor(e,t){super("contains",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return h(n.some(o=>o.value===i[0].value))}},Ct=class extends R{constructor(e,t){super("in",e,t)}eval(e,t){let n=D(this.left.eval(e,t)),i=this.right.eval(e,t);return n?h(i.some(o=>Qe(n,o)[0].value)):[]}},Y=class extends R{constructor(e,t){super(".",e,t)}eval(e,t){return this.right.eval(e,this.left.eval(e,t))}toString(){return`${this.left.toString()}.${this.right.toString()}`}},Re=class extends R{constructor(e,t){super("|",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return ft([...n,...i])}},Pt=class extends R{constructor(e,t){super("=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return On(n,i)}},At=class extends R{constructor(e,t){super("!=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return In(n,i)}},wt=class extends R{constructor(e,t){super("~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return xr(n,i)}},Ot=class extends R{constructor(e,t){super("!~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return wn(xr(n,i))}},Ce=class extends R{constructor(e,t){super("is",e,t)}eval(e,t){let n=this.left.eval(e,t);if(n.length!==1)return[];let i=this.right.name;return h(mt(n[0],i))}},It=class extends R{constructor(e,t){super("and",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return n?.value===!0&&i?.value===!0?h(!0):n?.value===!1||i?.value===!1?h(!1):[]}},kt=class extends R{constructor(e,t){super("or",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return n?.value===!1&&i?.value===!1?h(!1):n?.value||i?.value?h(!0):[]}},Vt=class extends R{constructor(e,t){super("xor",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return!n||!i?[]:h(n.value!==i.value)}},Dt=class extends R{constructor(e,t){super("implies",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return i?.value===!0||n?.value===!1?h(!0):!n||!i?[]:h(!1)}},X=class{constructor(e,t){c(this,"name");c(this,"args");this.name=e,this.args=t}eval(e,t){let n=N[this.name];if(!n)throw new Error("Unrecognized function: "+this.name);return n(e,t,...this.args)}toString(){return`${this.name}(${this.args.map(e=>e.toString()).join(", ")})`}},Pe=class{constructor(e,t){c(this,"left");c(this,"expr");this.left=e,this.expr=t}eval(e,t){let n=this.expr.eval(e,t);if(n.length!==1)return[];let i=n[0].value;if(typeof i!="number")throw new Error("Invalid indexer expression: should return integer}");let o=this.left.eval(e,t);return i in o?[o[i]]:[]}toString(){return`${this.left.toString()}[${this.expr.toString()}]`}};var tu=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],ru={"'":"'",'"':'"',"`":"`",r:"\r",n:`
2
+ `,t:" ",f:"\f","\\":"\\"},xe=class{constructor(e,t,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=t,this.operators=n,this.dateTimeLiterals=!!i?.dateTimeLiterals,this.symbolRegex=i?.symbolRegex??/[$\w%]/}tokenize(){for(;this.pos.index<this.str.length;){let e=this.consumeToken();e&&this.result.push(e)}return this.result}prevToken(){return this.result.slice(-1)[0]}peekToken(){this.mark();let e=this.consumeToken();return this.reset(),e}consumeToken(){this.consumeWhitespace();let e=this.curr();if(!e)return;this.mark();let t=this.peek();return e==="/"&&t==="*"?this.consumeMultiLineComment():e==="/"&&t==="/"?this.consumeSingleLineComment():e==="'"||e==='"'||e==="`"?this.consumeString(e):e==="@"?this.consumeDateTime():/\d/.exec(e)?this.consumeNumber():/\w/.exec(e)?this.consumeSymbol():(e==="$"||e==="%")&&/\w/.exec(t)?this.consumeSymbol():(e==="$"||e==="%")&&(t==="'"||t==='"'||t==="`")?this.consumeQuotedSymbol(t):this.consumeOperator()}consumeWhitespace(){this.consumeWhile(()=>/\s/.exec(this.curr()))}consumeMultiLineComment(){let e=this.pos.index;return this.consumeWhile(()=>this.curr()!=="*"||this.peek()!=="/"),this.advance(),this.advance(),this.buildToken("Comment",this.str.substring(e,this.pos.index))}consumeSingleLineComment(){return this.buildToken("Comment",this.consumeWhile(()=>this.curr()!==`
3
+ `))}consumeString(e){this.advance();let t="",n;for(;n=this.consumeChar(e);)t+=n;let i=this.buildToken(e==="`"?"Symbol":"String",t);return this.advance(),i}consumeChar(e){let t=this.curr();if(t==="\\"){this.advance();let n=this.curr(),i=ru[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 t===e||!t?"":(this.advance(),t)}consumeQuotedSymbol(e){this.mark();let t=this.pos.index;this.advance(),this.consumeString(e);let n=this.str.substring(t,this.pos.index);return this.buildToken("Symbol",n)}consumeDateTime(){this.advance();let e=this.pos.index;this.consumeWhile(()=>/[\d-]/.exec(this.curr()));let t=!1,n=!1;if(this.curr()==="T"&&(t=!0,this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())),this.curr()==="."&&/\d/.exec(this.peek())&&(this.advance(),this.consumeWhile(()=>/\d/.exec(this.curr()))),this.curr()==="Z"?(n=!0,this.advance()):(this.curr()==="+"||this.curr()==="-")&&(n=!0,this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())))),this.pos.index===e)throw new Error("Invalid DateTime literal");let i=this.str.substring(e,this.pos.index);return i.endsWith("T")?i=i.substring(0,i.length-1):!i.startsWith("T")&&t&&!n&&(i+="Z"),this.buildToken("DateTime",i)}consumeNumber(){let e=this.pos.index,t="Number";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===" ")nu(this.peekToken())&&(t="Quantity",this.consumeToken());else if(n&&/[a-zA-Z_$]/.exec(n))return this.pos.index=e-1,this.consumeString(" ");return this.buildToken(t,this.str.substring(e,this.pos.index))}consumeSymbol(){let e=this.consumeWhile(()=>this.symbolRegex.exec(this.curr()));return this.prevToken()?.value!=="."&&this.keywords.includes(e)?this.buildToken(e,e):this.buildToken("Symbol",e)}consumeOperator(){let e=this.curr(),t=this.peek(),n=e+t;return this.operators.includes(n)?(this.advance(),this.advance(),this.buildToken(n,n)):(this.advance(),this.buildToken(e,e))}consumeWhile(e){let t=this.pos.index;for(;this.pos.index<this.str.length&&e();)this.advance();return this.str.substring(t,this.pos.index)}curr(){return this.str[this.pos.index]}peek(){return this.str[this.pos.index+1]??""}mark(){this.markStack.push({...this.pos})}reset(){let e=this.markStack.pop();if(!e)throw new Error("No mark to reset to");this.pos.index=e.index,this.pos.line=e.line,this.pos.column=e.column}advance(){this.pos.index++,this.curr()===`
4
+ `?(this.pos.line++,this.pos.column=0):this.pos.column++}buildToken(e,t){let n=this.markStack.pop();if(!n)throw new Error("No mark for token");return{id:e,value:t,...n}}};function nu(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&tu.includes(r.value)))}var Mt=["true","false"],_t=["!=","!~","<=",">=","{}","->"];function Oo(r){return new xe(r,Mt,_t).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},iu={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},ou={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new Pe(e,t)},precedence:S.Indexer},su={parse(r,e){if(!(e instanceof B))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new X(e.name,t)},precedence:S.FunctionCall};function au(r){let e=r.split(" "),t=Number.parseFloat(e[0]),n=e[1];return n?.startsWith("'")&&n.endsWith("'")?n=n.substring(1,n.length-1):n="{"+n+"}",{value:t,unit:n}}function Xe(){return new at().registerPrefix("String",{parse:(r,e)=>new $({type:d.string,value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new $({type:d.dateTime,value:Ye(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new $({type:d.Quantity,value:au(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new $({type:e.value.includes(".")?d.decimal:d.integer,value:Number.parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new $({type:d.boolean,value:!0})}).registerPrefix("false",{parse:()=>new $({type:d.boolean,value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new B(e.value)}).registerPrefix("{}",{parse:()=>new St}).registerPrefix("(",iu).registerInfix("[",ou).registerInfix("(",su).prefix("+",S.UnaryAdd,(r,e)=>new bt("+",e,t=>t)).prefix("-",S.UnarySubtract,(r,e)=>new F("-",e,e,(t,n)=>-n)).infixLeft(".",S.Dot,(r,e,t)=>new Y(r,t)).infixLeft("/",S.Divide,(r,e,t)=>new F("/",r,t,(n,i)=>n/i)).infixLeft("*",S.Multiply,(r,e,t)=>new F("*",r,t,(n,i)=>n*i)).infixLeft("+",S.Add,(r,e,t)=>new F("+",r,t,(n,i)=>n+i)).infixLeft("-",S.Subtract,(r,e,t)=>new F("-",r,t,(n,i)=>n-i)).infixLeft("|",S.Union,(r,e,t)=>new Re(r,t)).infixLeft("=",S.Equals,(r,e,t)=>new Pt(r,t)).infixLeft("!=",S.NotEquals,(r,e,t)=>new At(r,t)).infixLeft("~",S.Equivalent,(r,e,t)=>new wt(r,t)).infixLeft("!~",S.NotEquivalent,(r,e,t)=>new Ot(r,t)).infixLeft("<",S.LessThan,(r,e,t)=>new F("<",r,t,(n,i)=>n<i)).infixLeft("<=",S.LessThanOrEquals,(r,e,t)=>new F("<=",r,t,(n,i)=>n<=i)).infixLeft(">",S.GreaterThan,(r,e,t)=>new F(">",r,t,(n,i)=>n>i)).infixLeft(">=",S.GreaterThanOrEquals,(r,e,t)=>new F(">=",r,t,(n,i)=>n>=i)).infixLeft("&",S.Ampersand,(r,e,t)=>new Et(r,t)).infixLeft("and",S.And,(r,e,t)=>new It(r,t)).infixLeft("as",S.As,(r,e,t)=>new ye(r,t)).infixLeft("contains",S.Contains,(r,e,t)=>new Rt(r,t)).infixLeft("div",S.Divide,(r,e,t)=>new F("div",r,t,(n,i)=>Math.trunc(n/i))).infixLeft("in",S.In,(r,e,t)=>new Ct(r,t)).infixLeft("is",S.Is,(r,e,t)=>new Ce(r,t)).infixLeft("mod",S.Modulo,(r,e,t)=>new F("mod",r,t,(n,i)=>n%i)).infixLeft("or",S.Or,(r,e,t)=>new kt(r,t)).infixLeft("xor",S.Xor,(r,e,t)=>new Vt(r,t)).infixLeft("implies",S.Implies,(r,e,t)=>new Dt(r,t))}var cu=Xe();function Lt(r){return new ge(r,cu.construct(Oo(r)).consumeAndParse())}function uu(r,e){let t=Array.isArray(e)?e:[e];for(let n=0;n<t.length;n++){let i=t[n];typeof i=="object"&&"type"in i&&"value"in i||(t[n]=b(t[n]))}return w(r,t).map(n=>n.value)}function w(r,e,t={},n=void 0){let i;if(typeof r=="string"){let o=n?.get(r);i=o??Lt(r),n&&!o&&n.set(r,i)}else i=r;return i.eval({variables:t},e).map(o=>{let s={type:o.type,value:o.value?.valueOf()};return"path"in o&&(s.path=o.path),s})}function lu(r){let e=[];for(let t of r)t.type===d.Range?e.push([t.value?.low?.value,t.value?.high?.value]):typeof t.value=="number"&&e.push([t.value,t.value]);return e}function Gn(r){let e=[];for(let t of r){let n=ht(t.value);n&&e.push(n)}return e}function Qn(r){let e=new Set;for(let t of r){let n=jn(t);n&&e.add(n)}return Array.from(e)}function zn(r){let e=new Set;for(let t of r){let{value:n}=t;n&&(Me(n)?e.add(n):G(n)?e.add(n.reference):Je(n)?e.add(O(n)):typeof n.identifier=="object"&&e.add(`identifier:${n.identifier.system}|${n.identifier.value}`))}return Array.from(e)}function du(r){let e=[];for(let t of r){let{value:n}=t;typeof n=="number"?e.push({value:n}):V(n)&&e.push(n)}return e}function pu(r){let e=new Set;for(let t of r)Me(t.value)&&e.add(t.value);return Array.from(e)}function Jn(r,e={}){let t=[];for(let n of r)fu(e,t,n);return t}function fu(r,e,t){let{type:n,value:i}=t;switch(n){case d.Identifier:mu(e,r,i);break;case d.CodeableConcept:hu(e,r,i);break;case d.Coding:Io(e,r,i);break;case d.ContactPoint:gu(e,r,i);break;default:Fe(e,r,void 0,i?.toString())}}function mu(r,e,t){t?.type?.text&&Fe(r,e,e.textSearchSystem,t.type.text),Fe(r,e,t?.system,t?.value)}function hu(r,e,t){t?.text&&Fe(r,e,e.textSearchSystem,t.text);for(let n of t?.coding??y)Io(r,e,n)}function Io(r,e,t){t&&(t.display&&Fe(r,e,e.textSearchSystem,t.display),Fe(r,e,t.system,t.code))}function gu(r,e,t){t&&Fe(r,e,t.system,t.value?.toLocaleLowerCase())}function Fe(r,e,t,n){(t||n)&&!r.some(i=>i.system===t&&i.value===n)&&r.push({system:t,value:n&&e.caseInsensitive?n.toLocaleLowerCase():n})}var yu=20,xu=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"},Kn={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},Yn={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 Ze(r,e){if(!r)throw new Error("Invalid search URL");let t="",n;if(typeof r=="string")if(r.includes("?")){let[s,a]=r.split("?");t=s,n=new URLSearchParams(a)}else t=r;else typeof r=="object"&&(t=r.pathname,n=r.searchParams);let i;t.includes("/")?i=t.split("/").filter(Boolean).pop():i=t;let o=[];if(n&&o.push(...n.entries()),e)for(let[s,a]of Object.entries(e))if(Array.isArray(a))for(let u of a)o.push([s,u]);else o.push([s,a??""]);return vu(i,o)}function vu(r,e){let t={resourceType:r};for(let[n,i]of e)Tu(t,n,i);return t}function Tu(r,e,t){let n,i,o=e.indexOf(":");if(o>=0?(n=e.substring(0,o),i=e.substring(o+1)):(n=e,i=""),n!=="_"){if(n==="_has"||e.includes(".")){r.filters=K(r.filters,{code:e,operator:m.EQUALS,value:t});return}switch(n){case"_sort":Su(r,t);break;case"_cursor":r.cursor=t;break;case"_count":r.count=Number.parseInt(t,10);break;case"_offset":r.offset=Number.parseInt(t,10);break;case"_total":r.total=t;break;case"_summary":t==="count"?(r.total="accurate",r.count=0):(t==="true"||t==="data"||t==="text")&&(r.summary=t);break;case"_include":{let s=ko(t);i==="iterate"&&(s.modifier=m.ITERATE),r.include=K(r.include,s);break}case"_revinclude":{let s=ko(t);i==="iterate"&&(s.modifier=m.ITERATE),r.revInclude=K(r.revInclude,s);break}case"_fields":case"_elements":r.fields=t.split(",");break;case"_type":r.types=t.split(",");break;case"_format":r.format=t;break;case"_pretty":r.pretty=t==="true";break;default:{let s=j.types[r.resourceType]?.searchParams?.[n];s?r.filters=K(r.filters,Mo(s,m.EQUALS,i,t)):r.filters=K(r.filters,Eu(n,i,t))}}}}function Su(r,e){for(let t of e.split(",")){let n,i=!1;t.startsWith("-")?(n=t.substring(1),i=!0):n=t,r.sortRules||(r.sortRules=[]),r.sortRules.push({code:n,descending:i})}}var bu=[m.MISSING,m.PRESENT];function Mo(r,e,t,n){if(bu.includes(t||e))return{code:r.code,operator:t||e,value:n};switch(r.type){case"number":case"date":case"quantity":{let{operator:i,value:o}=Ru(n,t||m.EQUALS);if(!Vo(r,o))throw new f(P(`Invalid format for ${r.type} search parameter: ${o}`));return{code:r.code,operator:i,value:o}}case"reference":case"string":case"token":case"uri":{if(!Vo(r,n))throw new f(P(`Invalid format for ${r.type} search parameter: ${n}`));return{code:r.code,operator:Cu(t)??e,value:n}}default:throw new Error("Unrecognized search parameter type: "+r.type)}}function Eu(r,e,t){let n=m.EQUALS;if(e)n=e;else if(t.length>=2){let i=t.substring(0,2);i in Yn&&(t.length===2||t.at(2)?.match(/\d/))&&(n=i,t=t.substring(i.length))}return{code:r,operator:n,value:t}}function Ru(r,e){let t=r.substring(0,2),n=Yn[t];return n?{operator:n,value:r.substring(2)}:{operator:e,value:r}}function Cu(r){return Kn[r]}function ko(r){let e=r.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 '${r}': must be of the form ResourceType:search-parameter`));if(e.length===2)return{resourceType:e[0],searchParam:e[1]};if(e.length===3)return{resourceType:e[0],searchParam:e[1],targetType:e[2]};throw new f(P(`Invalid include value '${r}'`))}function Vo(r,e){return r.type==="date"?De(e):!0}var Pu=/{{([^{}]+)}}/g;function Au(r,e,t=[]){return r=r.replaceAll(Pu,(n,i)=>{let o=w(i,t,e);return o.length!==1?"":Hn(o[0])}),Ze(r)}function wu(r){let e=[];r.fields&&e.push("_fields="+r.fields.join(","));for(let t of r.filters??y)e.push(Ou(t));r.sortRules&&r.sortRules.length>0&&e.push(Iu(r.sortRules)),r.cursor!==void 0&&e.push("_cursor="+encodeURIComponent(r.cursor)),r.offset!==void 0&&r.offset!==0&&e.push("_offset="+r.offset),r.count!==void 0&&e.push("_count="+r.count),r.total!==void 0&&e.push("_total="+r.total),r.types&&r.types.length>0&&e.push("_type="+r.types.join(","));for(let t of r.include??y)e.push(Do("_include",t));for(let t of r.revInclude??y)e.push(Do("_revinclude",t));return e.length===0?"":(vt(e),"?"+e.join("&"))}function Ou(r){let e=r.operator in Kn?":"+r.operator:"",t=r.operator!==m.EQUALS&&r.operator in Yn?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function Iu(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function Do(r,e){return r+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function et(r){let e=[],t="",n=!1;for(let i of r)n?(t+=i,n=!1):i==="\\"?n=!0:i===","?(e.push(t),t=""):t+=i;return e.push(t),e}function ku(r,e){return P(`Invalid modifier :${r} for ${e}`)}function Vu(r,e){return r in Kn?ku(r,e):P(`Invalid operator ${r} for ${e}`)}function Nt(r,e){if(e.resourceType!==r.resourceType)return!1;for(let t of e.filters??y)if(!Mu(r,e,t))return!1;return!0}var Du=new J(1e3);function Mu(r,e,t){let n=j.types[e.resourceType]?.searchParams?.[t.code];if(!n)return!1;let i=w(n.expression,[b(r)],void 0,Du);if(t.operator===m.MISSING||t.operator===m.PRESENT)return _u(i,t);switch(n.type){case"reference":return Lu(n,i,t);case"string":case"uri":return Uu(i,t);case"token":return Nu(i,t);case"date":return Wu(i,t);default:return!1}}function _u(r,e){let t=r.length>0;return(e.operator===m.MISSING&&e.value==="false"||e.operator===m.PRESENT&&e.value==="true")===t}function Lu(r,e,t){let n=Ir(t.operator);if(t.value===""&&e.length===0)return t.operator===m.EQUALS;let i=zn(e);for(let o of et(t.value)){let s=!1;if(o.includes("/")?s=i.includes(o):(r.target?.length===1||t.code==="_compartment")&&(s=i.some(a=>a?.endsWith("/"+o))),s)return!n}return n}function Nu(r,e){let t=Jn(r),n=et(e.value),i=Ir(e.operator);for(let o of t)for(let s of n)if(Fu(o,s))return!i;return i}function Fu(r,e){if(e.includes("|")){let[t,n]=e.split("|").map(i=>i.toLowerCase());return!t&&!n?!1:t?r.system?.toLowerCase()===t&&(!n||r.value?.toLowerCase()===n):!r.system&&r.value?.toLowerCase()===n}return r.value?.toLowerCase()===e.toLowerCase()}function Uu(r,e){let t=Qn(r),n=et(e.value),i=Ir(e.operator);for(let o of t)for(let s of n)if(Bu(o,s))return!i;return i}function Bu(r,e){return r.toLowerCase().includes(e.toLowerCase())}function Wu(r,e){let t=Gn(r),n=et(e.value),i=Ir(e.operator);for(let o of t)for(let s of n)if(qu(o,e.operator,s))return!i;return i}function qu(r,e,t){if(!r)return!1;let n=ht(t);if(!n)return!1;let i=r.start??"0000",o=r.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 Ir(r){return r===m.NOT_EQUALS||r===m.NOT}var ju={resourceType:"*"},_o=["DomainConfiguration","JsonWebKey","Login"],Lo=["Package","PackageRelease","PackageInstallation","Project","ProjectMembership","User","UserSecurityRequest"],Ae={READ:"read",VREAD:"vread",UPDATE:"update",DELETE:"delete",HISTORY:"history",CREATE:"create",SEARCH:"search"},No=[Ae.READ,Ae.VREAD,Ae.HISTORY,Ae.SEARCH];function $u(r,e){return Xn(r,Ae.SEARCH,e)}function Hu(r,e){return _o.includes(e)?!1:Xn(r,Ae.UPDATE,e)}function Xn(r,e,t){return!!r.resource?.some(n=>Uo(n,t,e))}function Gu(r,e){return!!Fo(e,Ae.UPDATE,r)}function Fo(r,e,t){return t?t.resource?.find(n=>Qu(r,e,n)):ju}function Qu(r,e,t){let n=r.resourceType;return Uo(t,n,e)?n==="Binary"?!0:!(t.compartment&&!r.meta?.compartment?.some(i=>i.reference===t.compartment?.reference)||t.criteria&&!Nt(r,Ze(t.criteria))):!1}function Uo(r,e,t){return r.resourceType!==e&&(r.resourceType!=="*"||Lo.includes(e))?!1:r.interaction?r.interaction.includes(t):!r.readonly||No.includes(t)}var zu={FIRST:"first",APPLICATION:"application"};function z(){return typeof window<"u"}function Ju(){return typeof Buffer<"u"}function Ku(){return typeof window<"u"?window:void 0}function kr(){return typeof Buffer<"u"?Buffer:void 0}var ae={assign(r){z()&&globalThis.location.assign(r)},reload(){z()&&globalThis.location.reload()},getSearch(){return z()?globalThis.location.search:""},getPathname(){return z()?globalThis.location.pathname:""},getLocation(){return z()?globalThis.location.toString():""},getOrigin(){return z()?globalThis.location.protocol+"//"+globalThis.location.host+"/":""}};function Bo(r){if(z()){let t=window.atob(r),n=Uint8Array.from(t,i=>i.codePointAt(0));return new window.TextDecoder().decode(n)}let e=kr();if(e)return e.from(r,"base64").toString("utf-8");throw new Error("Unable to decode base64")}function Ft(r){if(z()){let t=new window.TextEncoder().encode(r),n=String.fromCodePoint.apply(null,t);return window.btoa(n)}let e=kr();if(e)return e.from(r,"utf8").toString("base64");throw new Error("Unable to encode base64")}function Yu(r){return Ft(r).replaceAll("+","-").replaceAll("/","_").replace(/[=]{1,2}$/,"")}function Zn(r){r=r.padEnd(r.length+(4-r.length%4)%4,"=");let e=r.replaceAll("-","+").replaceAll("_","/");return Bo(e)}function Vr(){let r=new Uint32Array(28);return crypto.getRandomValues(r),Ln(r.buffer)}async function ei(r){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(r))}function Z(){return typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replaceAll(/[xy]/g,r=>{let e=Math.trunc(Math.random()*16);return(r==="x"?e:e&3|8).toString(16)})}function Wo(r){let e={};r=Ee(r);for(let i of r.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]=Z(),i.fullUrl="urn:uuid:"+e[s],delete i.resource?.id;else if(i.fullUrl?.startsWith("resource:")){let a=i.fullUrl.slice(9);e[a]=Z(),i.fullUrl="urn:uuid:"+e[a]}}let t=r.entry,n=JSON.stringify({resourceType:"Bundle",type:"transaction",entry:t?.map(i=>({fullUrl:i.fullUrl,request:{method:"POST",url:i.resource?.resourceType},resource:i.resource}))},(i,o)=>Xu(i,o,e),2);return qo(JSON.parse(n))}function Xu(r,e,t){if((r==="reference"||r==="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=t[n];if(i)return"urn:uuid:"+i}}return e}function qo(r){let e=el(r),{sorted:t,cycles:n}=Zu(e),i={},o=[];for(let a of r.entry??y)a.fullUrl?i[a.fullUrl]=a:o.push(a);let s=t.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),{...r,entry:s}}var tt={NotVisited:"NotVisited",Visiting:"Visiting",Visited:"Visited"};function Zu(r){let e=[],t={},n=[];for(let o of Object.keys(r))t[o]=tt.NotVisited;function i(o,s){if(t[o]===tt.Visited)return!0;if(t[o]===tt.Visiting){let u=s.lastIndexOf(o);return u!==-1&&n.push(s.slice(u)),!0}t[o]=tt.Visiting,s.push(o);let a=!1;for(let u of r[o]??y)i(u,s)||(a=!0);return t[o]=tt.Visited,s.pop(),e.unshift(o),!a}for(let o in r)t[o]===tt.NotVisited&&i(o,[]);return{sorted:e,cycles:n}}function jo(r,e){for(let t in r)if(r[t]&&typeof r[t]=="object"){let n=r[t];if(G(n)){let i=n.reference;(i.startsWith("urn:uuid:")||i.startsWith("resource:"))&&e(i)}else jo(n,e)}}function el(r){let e={};for(let t of r.entry??y)t.fullUrl&&(e[t.fullUrl]=[]);for(let t of r.entry??y){let n=t.fullUrl;n&&t.resource&&jo(t.resource,i=>{e[i]&&e[i].push(n)})}return e}function tl(r){r=Ee(r);let e={resourceType:"Bundle",type:"transaction",entry:[{resource:r}]};if(r.contained){for(let t of r.contained)e.entry.push({resource:t});r.contained=void 0}for(let t of e.entry)t.resource&&!t.resource.id&&(t.resource.id=Z());return Wo(e)}function rl(r,e,t){return r.entry?.find(({resource:n})=>n?.resourceType===e&&n?.id===t)?.resource}async function nl(r,e,t,n){return{hook:t.hook,hookInstance:Z(),context:n,prefetch:await il(r,e,t,n)}}async function il(r,e,t,n){if(!t.prefetch)return{};let i={};for(let[o,s]of Object.entries(t.prefetch)){let a=await ol(r,e,n,s);i[o]=a??null}return i}function ol(r,e,t,n){if(n=$o(e,t,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 r.readResource(a,u)}let[o,s]=_e(n,"?",2);return r.search(o,s)}var sl=new Set(["userPractitionerId","userPractitionerRoleId","userPatientId","userRelatedPersonId"]);function $o(r,e,t){return t.replaceAll(/\{\{([^}]+)\}\}/g,(n,i)=>{if(i=i.trim(),sl.has(i))return r.id;if(i.startsWith("context.")){let o=i.substring(8),s=al(e,o);if(Me(s))return s;if(typeof s=="number"||typeof s=="boolean")return String(s)}return n})}function al(r,e){let t=e.split("."),n=r;for(let i of t)if(n&&C(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 Dr=class{constructor(){c(this,"listeners");this.listeners={}}addEventListener(e,t){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)}removeEventListener(e,t){let n=this.listeners[e];if(n){for(let i=0;i<n.length;i++)if(n[i]===t){n.splice(i,1);return}}}dispatchEvent(e){let t=this.listeners[e.type];for(let n of t??y)n.call(this,e);return!e.defaultPrevented}removeAllListeners(){this.listeners={}}listenerCount(e){return this.listeners[e]?.length??0}},ee=class{constructor(){c(this,"emitter",new Dr)}dispatchEvent(e){this.emitter.dispatchEvent(e)}addEventListener(e,t){this.emitter.addEventListener(e,t)}removeEventListener(e,t){this.emitter.removeEventListener(e,t)}removeAllListeners(){this.emitter.removeAllListeners()}listenerCount(e){return this.emitter.listenerCount(e)}};var Mr={"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"},Ho=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],_r=["DiagnosticReport-update"];function ti(r){return _r.includes(r)}function ri(r){if(_r.includes(r))throw new f(T(`'context.version' is required for '${r}'.`))}var Go={"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 Qo(r){return Ho.includes(r)}function ni(r){return!!r.endpoint}function Lr(r){if(!Bt(r))throw new f(T("subscriptionRequest must be an object conforming to SubscriptionRequest type."));let{channelType:e,mode:t,topic:n,events:i}=r,o={"hub.channel.type":e,"hub.mode":t,"hub.topic":n,"hub.events":i.join(",")};return ni(r)&&(o.endpoint=r.endpoint),new URLSearchParams(o).toString()}function Bt(r){if(typeof r!="object")return!1;let{channelType:e,mode:t,topic:n,events:i}=r;if(!(e&&t&&n&&i)||typeof n!="string"||typeof i!="object"||!Array.isArray(i)||i.length<1||e!=="websocket"||t!=="subscribe"&&t!=="unsubscribe")return!1;for(let o of i)if(!Mr[o])return!1;return!(ni(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function cl(r,e,t,n){if(typeof e!="object")throw new f(T(`context[${t}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.id&&typeof e.id=="string"))throw new f(T(`context[${t}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new f(T(`context[${t}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!Qo(e.resourceType))throw new f(T(`context[${t}] is invalid. Resource must contain a valid FHIRcast resource type. Resource type is not a known resource type.`));if(i&&e.resourceType!==i)throw new f(T(`context[${t}] is invalid. context[${t}] for the '${r}' event should contain resource of type ${i}.`))}}function ul(r,e,t,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),n.reference){if(!G(e.reference))throw new f(T(`context[${t}] is invalid. Expected key '${e.key}' to be a reference.`))}else cl(r,e.resource,t,n)}function ll(r,e){let t=new Map,n=Go[r];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 '${r}'. Make sure to add only valid keys.`));ul(r,e[i],i,n[o],t)}for(let[i,o]of Object.entries(n)){if(!(o.optional||t.has(i)))throw new f(T(`Missing required key '${i}' on context for '${r}' event.`));if(!o.manyAllowed&&(t.get(i)??0)>1)throw new f(T(`${t.get(i)} context entries with key '${i}' found for the '${r}' event when schema only allows for 1.`))}}function Nr(r,e,t,n){if(!(r&&typeof r=="string"))throw new f(T("Must provide a topic."));if(!Mr[e])throw new f(T(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(Mr).join(", ")}`));if(typeof t!="object")throw new f(T("context must be a context object or array of context objects."));if(_r.includes(e)&&!n)throw new f(T(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(t)?t:[t];return ll(e,i),{timestamp:new Date().toISOString(),id:Z(),event:{"hub.topic":r,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var Ut=class extends ee{constructor(t){super();c(this,"subRequest");c(this,"websocket");if(this.subRequest=t,!t.endpoint)throw new f(T("Subscription request should contain an endpoint."));if(!Bt(t))throw new f(T("Subscription request failed validation."));let n=new WebSocket(t.endpoint);n.addEventListener("open",()=>{this.dispatchEvent({type:"connect"}),n.addEventListener("message",i=>{let o=JSON.parse(i.data);if(o["hub.topic"])return;let s=o;s.event["hub.event"]!=="heartbeat"&&(this.dispatchEvent({type:"message",payload:s}),n.send(JSON.stringify({id:o?.id,timestamp:new Date().toISOString()})))}),n.addEventListener("close",()=>{this.dispatchEvent({type:"disconnect"})})}),this.websocket=n}disconnect(){this.websocket.close()}};function dl(r){return JSON.parse(Zn(r))}function ii(r){return r.split(".").length===3}function Wt(r){let[e,t,n]=r.split(".");return dl(t)}function oi(r){try{return typeof Wt(r).login_id=="string"}catch{return!1}}function si(r){try{let t=Wt(r).exp;return typeof t=="number"?t*1e3:void 0}catch{return}}var qt=class{constructor(e){c(this,"medplum");this.medplum=e}async get(e){return this.medplum.get(`keyvalue/v1/${e}`)}async set(e,t){await this.medplum.put(`keyvalue/v1/${e}`,t,k.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var zo;zo=Symbol.toStringTag;var W=class{constructor(e){c(this,zo,"ReadablePromise");c(this,"suspender");c(this,"status","pending");c(this,"response");c(this,"error");this.suspender=e.then(t=>(this.status="success",this.response=t,t),t=>{throw this.status="error",this.error=t,t})}isPending(){return this.status==="pending"}isOk(){return this.status==="success"}read(){switch(this.status){case"pending":throw this.suspender;case"error":throw this.error;default:return this.response}}then(e,t){return this.suspender.then(e,t)}catch(e){return this.suspender.catch(e)}finally(e){return this.suspender.finally(e)}};var rt=class{constructor(e,t=""){c(this,"storage");c(this,"prefix","");this.storage=e??globalThis.localStorage??new Fr,this.prefix=t}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,t){t?this.storage.setItem(this.makeKey(e),t):this.storage.removeItem(this.makeKey(e))}getObject(e){let t=this.getString(e);return t?JSON.parse(t):void 0}setObject(e,t){this.setString(e,t?xt(t):void 0)}},Fr=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,t){t?this.data.set(e,t):this.data.delete(e)}removeItem(e){this.data.delete(e)}key(e){return Array.from(this.data.keys())[e]}},ai=class extends rt{constructor(){super();c(this,"initialized");c(this,"initPromise");c(this,"initResolve",()=>{});this.initialized=!1,this.initPromise=new Promise(t=>{this.initResolve=t})}setInitialized(){this.initialized||(this.initResolve(),this.initialized=!0)}getInitPromise(){return this.initPromise}get isInitialized(){return this.initialized}};var nt={Event:typeof globalThis.Event<"u"?globalThis.Event:void 0,ErrorEvent:void 0,CloseEvent:void 0},Jo=!1;function pl(){if(typeof globalThis.Event>"u")throw new Error("Unable to lazy init events for ReconnectingWebSocket. globalThis.Event is not defined yet");nt.Event=globalThis.Event,nt.ErrorEvent=class extends Event{constructor(t,n){super("error",n);c(this,"message");c(this,"error");this.message=t.message,this.error=t}},nt.CloseEvent=class extends Event{constructor(t=1e3,n="",i){super("close",i);c(this,"code");c(this,"reason");c(this,"wasClean",!0);this.code=t,this.reason=n}}}function Yo(r,e){if(!r)throw new Error(e)}function Ur(r){return new r.constructor(r.type,r)}var Ue={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},Ko=!1,jt=class r extends ee{constructor(t,n,i={}){Jo||(pl(),Jo=!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",t=>{this._debug("open event");let{minUptime:n=Ue.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),n),Yo(this._ws,"WebSocket is not defined"),this._ws.binaryType=this._binaryType,this._messageQueue.forEach(i=>this._ws?.send(i)),this._messageQueue=[],this.onopen&&this.onopen(t),this.dispatchEvent(Ur(t))});c(this,"_handleMessage",t=>{this._debug("message event"),this.onmessage&&this.onmessage(t),this.dispatchEvent(Ur(t))});c(this,"_handleError",t=>{this._debug("error event",t.message),this._disconnect(void 0,t.message==="TIMEOUT"?"timeout":void 0),this.onerror&&this.onerror(t),this._debug("exec error listeners"),this.dispatchEvent(Ur(t)),this._connect()});c(this,"_handleClose",t=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(t),this.dispatchEvent(Ur(t))});this._url=t,this._protocols=n,this._options=i,this._options.startClosed&&(this._shouldReconnect=!1),this._options.binaryType?this._binaryType=this._options.binaryType:this._binaryType="blob",this._options.debugLogger&&(this._debugLogger=this._options.debugLogger),this._connect()}static get CONNECTING(){return 0}static get OPEN(){return 1}static get CLOSING(){return 2}static get CLOSED(){return 3}get CONNECTING(){return r.CONNECTING}get OPEN(){return r.OPEN}get CLOSING(){return r.CLOSING}get CLOSED(){return r.CLOSED}get binaryType(){return this._ws?this._ws.binaryType:this._binaryType}set binaryType(t){this._binaryType=t,this._ws&&(this._ws.binaryType=t)}get retryCount(){return Math.max(this._retryCount,0)}get bufferedAmount(){return this._messageQueue.reduce((n,i)=>(typeof i=="string"?n+=i.length:i instanceof Blob?n+=i.size:n+=i.byteLength,n),0)+(this._ws?.bufferedAmount??0)}get extensions(){return this._ws?.extensions??""}get protocol(){return this._ws?.protocol??""}get readyState(){return this._ws?this._ws.readyState:this._options.startClosed?r.CLOSED:r.CONNECTING}get url(){return this._ws?this._ws.url:""}get shouldReconnect(){return this._shouldReconnect}close(t=1e3,n){if(this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),!this._ws){this._debug("close enqueued: no ws instance");return}if(this._ws.readyState===this.CLOSED){this._debug("close: already closed");return}this._ws.close(t,n)}reconnect(t,n){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED?this._connect():(this._disconnect(t,n),this._connect())}send(t){if(this._ws?.readyState===this.OPEN)this._debug("send",t),this._ws.send(t);else{let{maxEnqueuedMessages:n=Ue.maxEnqueuedMessages}=this._options;this._messageQueue.length<n&&(this._debug("enqueue",t),this._messageQueue.push(t))}}_debug(...t){this._options.debug&&this._debugLogger("RWS>",...t)}_getNextDelay(){let{reconnectionDelayGrowFactor:t=Ue.reconnectionDelayGrowFactor,minReconnectionDelay:n=Ue.minReconnectionDelay,maxReconnectionDelay:i=Ue.maxReconnectionDelay}=this._options,o=0;return this._retryCount>0&&(o=n*Math.pow(t,this._retryCount-1),o>i&&(o=i)),this._debug("next delay",o),o}_wait(){return new Promise(t=>{setTimeout(t,this._getNextDelay())})}_connect(){if(this._connectLock||!this._shouldReconnect)return;this._connectLock=!0;let{maxRetries:t=Ue.maxRetries,connectionTimeout:n=Ue.connectionTimeout}=this._options;if(this._retryCount>=t){this._debug("max retries reached",this._retryCount,">=",t);return}this._retryCount++,this._debug("connect",this._retryCount),this._removeListeners(),this._wait().then(()=>{if(this._closeCalled){this._connectLock=!1;return}!this._options.WebSocket&&typeof WebSocket>"u"&&!Ko&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),Ko=!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 nt.ErrorEvent(Error(i.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new nt.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(t=1e3,n){if(this._clearTimeouts(),!!this._ws){this._removeListeners();try{this._ws.close(t,n),this._handleClose(new nt.CloseEvent(t,n,this))}catch{}}}_acceptOpen(){this._debug("accept open"),this._retryCount=0}_removeListeners(){this._ws&&(this._debug("removeListeners"),this._ws.removeEventListener("open",this._handleOpen),this._ws.removeEventListener("close",this._handleClose),this._ws.removeEventListener("message",this._handleMessage),this._ws.removeEventListener("error",this._handleError))}_addListeners(){this._ws&&(this._debug("addListeners"),this._ws.addEventListener("open",this._handleOpen),this._ws.addEventListener("close",this._handleClose),this._ws.addEventListener("message",this._handleMessage),this._ws.addEventListener("error",this._handleError))}_clearTimeouts(){clearTimeout(this._connectTimeout),clearTimeout(this._uptimeTimeout)}};var fl=[WebSocket.CLOSING,WebSocket.CLOSED],it=class extends ee{constructor(...t){super();c(this,"criteria");this.criteria=new Set(t)}getCriteria(){return this.criteria}_addCriteria(t){this.criteria.add(t)}_removeCriteria(t){this.criteria.delete(t)}},ci=class{constructor(e,t){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 it(e),this.refCount=1,this.subscriptionProps=t?{...t}:void 0}nextGeneration(){return++this.generation}},Ht=class{constructor(e,t,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 Gt))throw new f(T("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(t).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 jt(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger});this.medplum=e,this.ws=o,this.masterSubEmitter=new it,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",t=>{try{let n=JSON.parse(t.data);if(n.type==="pong"){this.waitingForPong=!1;return}let i=n,o=i?.entry?.[0]?.resource;if(o.type==="heartbeat"){this.masterSubEmitter?.dispatchEvent({type:"heartbeat",payload:i});return}if(o.type==="handshake"){let a=be(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(be(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",t=>{let n={type:"error",payload:new f({resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"WebSocket connection closed due to an error"},diagnostics:t.error.toString()}]})};this.masterSubEmitter?.dispatchEvent(n);for(let i of this.getAllCriteriaEmitters())i.dispatchEvent({...n})}),e.addEventListener("close",()=>{let t={type:"close"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=void 0,this.waitingForPong=!1),this.tokenRefreshTimer&&(clearInterval(this.tokenRefreshTimer),this.tokenRefreshTimer=void 0),this.wsClosed&&(this.criteriaEntries.clear(),this.criteriaEntriesBySubscriptionId.clear(),this.masterSubEmitter?.removeAllListeners())}),e.addEventListener("open",()=>{let t={type:"open"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.refreshAllSubscriptions().catch(console.error),this.pingTimer??=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 t=this.medplum.getProfile();this.currentProfile&&t===void 0?this.ws.close():t&&this.currentProfile?.id!==t.id&&this.ws.reconnect(),this.currentProfile=t})}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,t){let n={type:"error",payload:t};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}maybeEmitDisconnect(e){let{subscriptionId:t}=e;if(t){let n={type:"disconnect",payload:{subscriptionId:t}};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}else console.warn("Called disconnect for `CriteriaEntry` before `subscriptionId` was present.")}isStale(e,t){return this.isEntryGettingRemoved(e)||e.generation!==t}maybeGetCriteriaEntry(e,t){let n=this.criteriaEntries.get(e);if(n){if(!t)return n.bareCriteria;for(let i of n.criteriaWithProps)if(pe(t,i.subscriptionProps))return i}}getAllCriteriaEmitters(){let e=[];for(let t of this.criteriaEntries.values())for(let n of $t(t))n.refCount>0&&e.push(n.emitter);return e}addCriteriaEntry(e){let{criteria:t,subscriptionProps:n}=e,i;this.criteriaEntries.has(t)?i=this.criteriaEntries.get(t):(i={criteriaWithProps:[]},this.criteriaEntries.set(t,i)),n?i.criteriaWithProps.push(e):i.bareCriteria=e}removeCriteriaEntry(e){e.state="removed",e.generation++;let{criteria:t,subscriptionProps:n,subscriptionId:i,token:o}=e;if(!this.criteriaEntries.has(t))return;let s=this.criteriaEntries.get(t);n?s.criteriaWithProps=s.criteriaWithProps.filter(a=>{let u=a.subscriptionProps;return!pe(n,u)}):s.bareCriteria=void 0,!s.bareCriteria&&s.criteriaWithProps.length===0&&(this.criteriaEntries.delete(t),this.masterSubEmitter?._removeCriteria(t)),i&&this.criteriaEntriesBySubscriptionId.delete(i),o&&this.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=[],t=[];for(let n of this.criteriaEntries.values())for(let i of $t(n))i.refCount===0?t.push(i):e.push(i);for(let n of t)this.removeCriteriaEntry(n);for(let n of e)n.token&&this.sendUnbind(n.token),n.token=void 0,n.tokenExpiry=void 0,n.state="idle",n.generation++,await this.subscribeToCriteria(n)}async rebindCriteriaEntry(e){let t=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,t))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,t))return;e.token=i,e.tokenExpiry=new Date(s).getTime(),this.criteriaEntriesBySubscriptionId.set(e.subscriptionId,e),this.sendBind(i)}catch(n){console.error(Ie(n)),e.generation===t&&!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 t of this.criteriaEntries.values())for(let n of $t(t))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,t){this.masterSubEmitter&&this.masterSubEmitter._addCriteria(e);let n=this.maybeGetCriteriaEntry(e,t);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 ci(e,t);return this.addCriteriaEntry(i),this.subscribeToCriteria(i).catch(console.error),i.emitter}removeCriteria(e,t){let n=this.maybeGetCriteriaEntry(e,t);if(!n||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(),t=[];for(let n of this.criteriaEntries.values())for(let i of $t(n))i.refCount===0&&i.lastUnrefTime!==void 0&&e-i.lastUnrefTime>=1e4&&t.push(i);for(let n of t)this.maybeEmitDisconnect(n),this.removeCriteriaEntry(n);t.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 t of $t(e))t.token&&this.sendUnbind(t.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 it(...Array.from(this.criteriaEntries.keys()))),this.masterSubEmitter}async reconnectIfNeeded(){fl.includes(this.getWebSocket().readyState)&&await new Promise(e=>{let t=()=>{this.getWebSocket().removeEventListener("open",t),e()};this.getWebSocket().addEventListener("open",t),this.reconnectWebSocket()})}};function $t(r){return r.bareCriteria?[r.bareCriteria,...r.criteriaWithProps]:r.criteriaWithProps}var ml=new J(1e3);async function hl({resource:r,subscription:e,context:t,getPreviousResource:n,logger:i}){if(!gl(e,i))return i?.debug("Ignore subscription without recognized channel type"),!1;let o=e.criteria;if(!o)return i?.debug("Ignore rest hook missing criteria"),!1;let s=Ze(o);if(r.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${r.resourceType}")`),!1;if(!await Xo(e,r,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let u=de(e,"https://medplum.com/fhir/StructureDefinition/subscription-supported-interaction");if(u&&u.valueCode!==t.interaction)return i?.debug(`Ignore rest hook for different interaction (wanted "${u.valueCode}", received "${t.interaction}")`),!1;if(!Nt(r,s))return!1;let l=br(e.meta)??[],p=br(r.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(r)}),!1):!0}function gl(r,e){let t=r.channel?.type;return t==="rest-hook"?r.channel?.endpoint?!0:(e?.debug("Ignore rest-hook missing URL"),!1):t==="websocket"}async function Xo(r,e,t){let n=de(r,"https://medplum.com/fhir/StructureDefinition/fhir-path-criteria-expression");if(!n?.valueString)return!0;let i=await t(e),o={"%current":b(e),"%previous":b(i??{})};return w(n.valueString,[b(e)],o,ml)?.[0]?.value===!0}var Br="5.1.14-776e611",yl="medplum-cli",rs=k.FHIR_JSON+", */*; q=0.1",xl="https://api.medplum.com/",vl=1e3,Tl=6e4,Sl=0,bl=3e5,El="Binary/",Zo={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},Be={ClientCredentials:"client_credentials",AuthorizationCode:"authorization_code",RefreshToken:"refresh_token",JwtBearer:"urn:ietf:params:oauth:grant-type:jwt-bearer",TokenExchange:"urn:ietf:params:oauth:grant-type:token-exchange",PreAuthorizedCode:"urn:ietf:params:oauth:grant-type:pre-authorized_code"},ns={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"},Rl={ClientSecretBasic:"client_secret_basic",ClientSecretPost:"client_secret_post",ClientSecretJwt:"client_secret_jwt",PrivateKeyJwt:"private_key_jwt",None:"none"},is={JwtBearer:"urn:ietf:params:oauth:client-assertion-type:jwt-bearer"},Cl={ES256:"ES256",ES384:"ES384",ES512:"ES512",HS256:"HS256",RS256:"RS256",RS384:"RS384",RS512:"RS512"},Gt=class extends ee{constructor(t){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(t?.baseUrl&&!t.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");this.options=t??{},this.fetch=t?.fetch??Pl(),this.storage=t?.storage??new rt(void 0,t?.storagePrefix),this.createPdfImpl=t?.createPdf,this.baseUrl=Ar(t?.baseUrl??xl),this.fhirBaseUrl=U(this.baseUrl,t?.fhirUrlPath??"fhir/R4"),this.authorizeUrl=U(this.baseUrl,t?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=U(this.baseUrl,t?.tokenUrl??"oauth2/token"),this.logoutUrl=U(this.baseUrl,t?.logoutUrl??"oauth2/logout"),this.fhircastHubUrl=U(this.baseUrl,t?.fhircastHubUrl??"fhircast/STU3"),this.cdsServicesUrl=U(this.baseUrl,t?.cdsServicesUrl??"cds-services"),this.clientId=t?.clientId??"",this.clientSecret=t?.clientSecret??"",this.credentialsInHeader=t?.authCredentialsMethod==="header",this.defaultHeaders=t?.defaultHeaders??{},this.onUnauthenticated=t?.onUnauthenticated,this.refreshGracePeriod=t?.refreshGracePeriod??bl,this.logLevel=this.initializeLogLevel(t),this.maxRetries=t?.maxRetries??2,this.maxRetryTime=t?.maxRetryTime??2e3,this.cacheTime=t?.cacheTime??(z()?Tl:Sl),this.cacheTime>0?this.requestCache=new J(t?.resourceCacheSize??vl):this.requestCache=void 0,t?.autoBatchTime?(this.autoBatchTime=t.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0),t?.accessToken&&this.setAccessToken(t.accessToken),this.storage.getInitPromise===void 0?(t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initPromise=Promise.resolve(),this.dispatchEvent({type:"storageInitialized"})):(this.initComplete=!1,this.initPromise=this.storage.getInitPromise(),this.initPromise.then(()=>{t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initComplete=!0,this.dispatchEvent({type:"storageInitialized"})}).catch(n=>{console.error(n),this.initComplete=!0,this.dispatchEvent({type:"storageInitFailed",payload:{error:n}})})),this.setupStorageListener()}get isInitialized(){return this.initComplete}getInitPromise(){return this.initPromise}initializeLogLevel(t){return t?.logLevel?t.logLevel:t?.verbose!==void 0&&t.verbose?"verbose":"none"}async attemptResumeActiveLogin(){let t=this.getActiveLogin();t&&(this.setAccessToken(t.accessToken,t.refreshToken),await this.refreshProfile())}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}getFhircastHubUrl(){return this.fhircastHubUrl}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(t){t=t.toString(),this.requestCache?.delete(t)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(t){let n=U(this.fhirBaseUrl,t);for(let i of this.requestCache?.keys()??y)(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache?.delete(i)}get(t,n={}){t=t.toString();let i=this.getCacheEntry(t,n);if(i)return i.value;let o;t.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue&&!n.disableAutoBatch?o=new Promise((a,u)=>{this.autoBatchQueue.push({method:"GET",url:t.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:u}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):(n.method="GET",o=this.request(t,n));let s=new W(o);return this.setCacheEntry(t,s,n),s}post(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),o.method="POST",this.request(t,o)}put(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),o.method="PUT",this.request(t,o)}patch(t,n,i={}){return t=t.toString(),this.setRequestBody(i,n),this.setRequestContentType(i,k.JSON_PATCH),this.invalidateUrl(t),i.method="PATCH",this.request(t,i)}delete(t,n={}){return t=t.toString(),this.invalidateUrl(t),n.method="DELETE",this.request(t,n)}async startNewUser(t,n){let{codeChallengeMethod:i,codeChallenge:o}=await this.startPkce();return this.post("auth/newuser",{...t,clientId:t.clientId??this.clientId,codeChallengeMethod:i,codeChallenge:o},void 0,n)}async startNewProject(t,n){return this.post("auth/newproject",t,void 0,n)}async startNewPatient(t,n){return this.post("auth/newpatient",t,void 0,n)}async startLogin(t,n){return this.post("auth/login",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async startGoogleLogin(t,n){return this.post("auth/google",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async ensureCodeChallenge(t){return t.codeChallenge?t:{...t,...await this.startPkce()}}async signOut(){await this.post(this.logoutUrl,{}),this.clear()}async signInWithRedirect(t){let i=new URLSearchParams(ae.getSearch()).get("code");if(!i){await this.requestAuthorization(t);return}return this.processCode(i)}signOutWithRedirect(){ae.assign(this.logoutUrl)}async signInWithExternalAuth(t,n,i,o,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),ae.assign(this.getExternalAuthRedirectUri(t,n,i,a,s))}async exchangeExternalAccessToken(t,n,i){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");let o={grant_type:Be.TokenExchange,subject_token_type:ns.AccessToken,client_id:n,subject_token:t};return i&&(o.membership_id=i),this.fetchTokens(o)}getExternalAuthRedirectUri(t,n,i,o,s=!0){let a=new URL(t);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",n),a.searchParams.set("redirect_uri",i),a.searchParams.set("scope",o.scope??"openid profile email"),a.searchParams.set("state",JSON.stringify(o)),s){let{codeChallenge:u,codeChallengeMethod:l}=o;if(!l)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!u)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");a.searchParams.set("code_challenge_method",l),a.searchParams.set("code_challenge",u)}return a.toString()}fhirUrl(...t){return new URL(U(this.fhirBaseUrl,t.join("/")))}fhirSearchUrl(t,n){let i=this.fhirUrl(t);return n&&(i.search=qn(n)),i}search(t,n,i){let o=this.fhirSearchUrl(t,n),s="search-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=this.getBundle(o,i);return this.setCacheEntry(s,u,i),u}searchOne(t,n,i){let o=this.fhirSearchUrl(t,n);o.searchParams.set("_count","1"),o.searchParams.sort();let s="searchOne-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=new W(this.search(t,o.searchParams,i).then(l=>l.entry?.[0]?.resource));return this.setCacheEntry(s,u,i),u}searchResources(t,n,i){let s="searchResources-"+this.fhirSearchUrl(t,n).toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=new W(this.search(t,n,i).then(ts));return this.setCacheEntry(s,u,i),u}async*searchResourcePages(t,n,i){let o=this.fhirSearchUrl(t,n);for(;o;){let s=new URL(o).searchParams;s.has("_count")||s.set("_count","1000");let a=await this.search(t,s,i),u=a.link?.find(l=>l.relation==="next");if(!a.entry?.length&&!u)break;yield ts(a),o=u?.url?new URL(u.url):void 0}}valueSetExpand(t,n){let i=this.fhirUrl("ValueSet","$expand");return i.search=new URLSearchParams(t).toString(),this.get(i.toString(),n)}getCached(t,n){let i=this.requestCache?.get(this.fhirUrl(t,n).toString())?.value;return i?.isOk()?i.read():void 0}getCachedReference(t){let n=t.reference;if(!n)return;if(n==="system")return Zo;let[i,o]=n.split("/");if(!(!i||!o))return this.getCached(i,o)}readResource(t,n,i){if(!n)throw new Error('The "id" parameter cannot be null, undefined, or an empty string.');return this.get(this.fhirUrl(t,n),i)}readReference(t,n){let i=t.reference;if(!i)return new W(Promise.reject(new Error("Missing reference")));if(i==="system")return new W(Promise.resolve(Zo));let[o,s]=i.split("/");return!o||!s?new W(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}readCanonical(t,n,i){return Array.isArray(t)?this.searchOne("",{_type:t.join(","),url:n},i):this.searchOne(t,"url="+n,i)}requestSchema(t,n){if(vn(t))return Promise.resolve();let i=t+"-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 ${t}") {
6
6
  resourceType,
7
7
  name,
@@ -41,17 +41,17 @@
41
41
  expression,
42
42
  target
43
43
  }
44
- }`.replaceAll(/\s+/g," "),u=await this.graphql(a);ur(u.data.StructureDefinitionList);for(let l of u.data.SearchParameterList)Pr(l)})());return this.setCacheEntry(i,s,n),s}requestProfileSchema(t,n){if(!n?.expandProfile&&yn(t))return Promise.resolve();let i=t+"-requestSchema"+(n?.expandProfile?"-nested":""),o=this.getCacheEntry(i,void 0);if(o)return o.value;let s=new B((async()=>{if(n?.expandProfile){let a=this.fhirUrl("StructureDefinition","$expand-profile");a.search=new URLSearchParams({url:t}).toString();let u=await this.post(a.toString(),{});ur(u)}else{let a=await this.searchOne("StructureDefinition",{url:t,_sort:"-_lastUpdated"});if(!a){console.warn(`No StructureDefinition found for ${t}!`);return}lr(a)}})());return this.setCacheEntry(i,s,n),s}readHistory(t,n,i,o){let s=this.fhirUrl(t,n,"_history");return i?.count&&s.searchParams.set("_count",i.count.toString()),i?.offset&&s.searchParams.set("_offset",i.offset.toString()),this.get(s.toString(),o)}readVersion(t,n,i,o){return this.get(this.fhirUrl(t,n,"_history",i),o)}readPatientEverything(t,n){return this.getBundle(this.fhirUrl("Patient",t,"$everything"),n)}readPatientSummary(t,n){return this.getBundle(this.fhirUrl("Patient",t,"$summary"),n)}createResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");return this.invalidateSearches(t.resourceType),this.post(this.fhirUrl(t.resourceType),t,void 0,n)}async createResourceIfNoneExist(t,n,i={}){let o=this.fhirUrl(t.resourceType);this.setRequestHeader(i,"If-None-Exist",n);let s=await this.post(o,t,void 0,i);return this.cacheResource(s,i),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),s}async upsertResource(t,n,i){let o=this.fhirSearchUrl(t.resourceType,n),s=await this.put(o,t,void 0,i);return s||(s=t),this.cacheResource(s,i),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),s}async createAttachment(t,n,i,o,s){let a=si(t,n,i,o);if(a.contentType===O.XML){let p=a.data,g;p instanceof Blob?g=await new Promise((x,D)=>{let Z=new FileReader;Z.onload=()=>{if(!Z.result){D(new Error("Failed to load file"));return}x(Z.result)},Z.readAsText(p,"utf-8")}):ArrayBuffer.isView(p)?g=new TextDecoder().decode(p):g=p,g.includes("<ClinicalDocument")&&g.includes("urn:hl7-org:v3")&&(a={...a,contentType:O.CDA_XML})}let u=s??(typeof n=="object"?n:{}),l=await this.createBinary(a,u);return{contentType:a.contentType,url:l.url,title:a.filename}}createBinary(t,n,i,o,s){let a=si(t,n,i,o),u=s??(typeof n=="object"?n:{}),{data:l,contentType:p,filename:g,securityContext:x,onProgress:D}=a,Z=this.fhirUrl("Binary");return g&&Z.searchParams.set("_filename",g),x?.reference&&this.setRequestHeader(u,"X-Security-Context",x.reference),D?this.uploadwithProgress(Z,l,p,D,u):this.post(Z,l,p,u)}uploadwithProgress(t,n,i,o,s){return new Promise((a,u)=>{let l=new XMLHttpRequest,p=()=>l.abort();s?.signal?.addEventListener("abort",p);let g=x=>{s?.signal?.removeEventListener("abort",p),x instanceof Error?u(x):a(x)};if(l.responseType="json",l.onabort=()=>g(new DOMException("Request aborted","AbortError")),l.onerror=()=>g(new Error("Request error")),o&&(l.upload.onprogress=x=>o(x),l.upload.onload=x=>o(x)),l.onload=()=>{l.status>=200&&l.status<300?g(l.response):g(new f(ct(l.response||l.statusText)))},l.open("POST",t),l.withCredentials=!0,l.setRequestHeader("Authorization","Bearer "+this.accessToken),l.setRequestHeader("Cache-Control","no-cache, no-store, max-age=0"),l.setRequestHeader("Content-Type",i),this.options.extendedMode!==!1&&l.setRequestHeader("X-Medplum","extended"),s?.headers){let x=s.headers;for(let[D,Z]of Object.entries(x))l.setRequestHeader(D,Z)}l.send(n)})}async createPdf(t,n,i,o){if(!this.createPdfImpl)throw new Error("PDF creation not enabled");let s=ns(t,n,i,o),a=typeof n=="object"?n:{},{docDefinition:u,tableLayouts:l,fonts:p,...g}=s,x=await this.createPdfImpl(u,l,p),D={...g,data:x,contentType:"application/pdf"};return this.createBinary(D,a)}createComment(t,n,i){let o=this.getProfile(),s,a;return t.resourceType==="Encounter"&&(s=Te(t),a=t.subject),t.resourceType==="ServiceRequest"&&(s=t.encounter,a=t.subject),t.resourceType==="Patient"&&(a=Te(t)),this.createResource({resourceType:"Communication",status:"completed",basedOn:[Te(t)],encounter:s,subject:a,sender:o?Te(o):void 0,sent:new Date().toISOString(),payload:[{contentString:n}]},i)}async updateResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");if(!t.id)throw new Error("Missing id");let i=await this.put(this.fhirUrl(t.resourceType,t.id),t,void 0,n);return i||(i=t),this.cacheResource(i,n),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),i}async patchResource(t,n,i,o){let s=await this.patch(this.fhirUrl(t,n),i,o);return this.cacheResource(s,o),this.invalidateUrl(this.fhirUrl(t,n,"_history")),this.invalidateSearches(t),s}deleteResource(t,n,i){return this.deleteCacheEntry(this.fhirUrl(t,n).toString()),this.invalidateSearches(t),this.delete(this.fhirUrl(t,n),i)}validateResource(t,n){return this.post(this.fhirUrl(t.resourceType,"$validate"),t,void 0,n)}executeBot(t,n,i,o){let s;if(typeof t=="string"){let a=t;s=this.fhirUrl("Bot",a,"$execute")}else{let a=t;s=this.fhirUrl("Bot","$execute"),s.searchParams.set("identifier",a.system+"|"+a.value)}return this.post(s,n,i,o)}executeBatch(t,n){return this.post(this.fhirBaseUrl,t,void 0,n)}sendEmail(t,n){return this.post("email/v1/send",t,O.JSON,n)}graphql(t,n,i,o){return this.post(this.fhirUrl("$graphql"),{query:t,operationName:n,variables:i},O.JSON,o)}readResourceGraph(t,n,i,o){return this.get(`${this.fhirUrl(t,n)}/$graph?graph=${i}`,o)}pushToAgent(t,n,i,o,s,a){let{waitTimeout:u,returnAck:l,...p}=a??{};return this.post(this.fhirUrl("Agent",Se(t),"$push"),{destination:typeof n=="string"?n:w(n),body:i,contentType:o,waitForResponse:s,...u!==void 0?{waitTimeout:u}:void 0,...l!==void 0?{returnAck:l}:void 0},O.FHIR_JSON,p)}getCdsServices(t){return this.get(this.cdsServicesUrl,t)}callCdsService(t,n,i){return this.post(N(this.cdsServicesUrl,t),n,O.JSON,i)}getActiveLogin(){return this.storage.getObject("activeLogin")}async setActiveLogin(t){(!this.sessionDetails?.profile||w(this.sessionDetails.profile)!==t.profile?.reference)&&this.clearActiveLogin(),this.setAccessToken(t.accessToken,t.refreshToken),this.storage.setObject("activeLogin",t),this.addLogin(t),this.refreshPromise=void 0,await this.refreshProfile()}getAccessToken(){return this.accessToken}isAuthenticated(t){return this.accessTokenExpires!==void 0&&Date.now()<this.accessTokenExpires-(t??this.refreshGracePeriod)}setAccessToken(t,n){this.accessToken=t,this.refreshToken=n,this.accessTokenExpires=ni(t),this.medplumServer=ri(t)}getLogins(){return this.storage.getObject("logins")??[]}addLogin(t){let n=this.getLogins().filter(i=>i.profile?.reference!==t.profile?.reference);n.push(t),this.storage.setObject("logins",n)}async refreshProfile(){if(this.medplumServer)return this.profilePromise=new Promise((t,n)=>{this.get("auth/me",{cache:"no-cache"}).then(i=>{this.profilePromise=void 0;let o=this.sessionDetails?.profile?.id!==i.profile.id;this.sessionDetails=i,o&&this.dispatchEvent({type:"change"}),t(i.profile),this.dispatchEvent({type:"profileRefreshed"})}).catch(n)}),this.dispatchEvent({type:"profileRefreshing"}),this.profilePromise}isLoading(){return!this.isInitialized||!!this.profilePromise&&!this.sessionDetails?.profile}isSuperAdmin(){return!!this.sessionDetails?.project.superAdmin}isProjectAdmin(){return!!this.sessionDetails?.membership.admin}getProject(){return this.sessionDetails?.project}getProjectMembership(){return this.sessionDetails?.membership}getProfile(){return this.sessionDetails?.profile}async getProfileAsync(){return this.profilePromise?this.profilePromise:this.sessionDetails?this.sessionDetails.profile:this.refreshProfile()}getUserConfiguration(){return this.sessionDetails?.config}getAccessPolicy(){return this.sessionDetails?.accessPolicy}async download(t,n={}){return(await this.downloadResponse(t,n)).blob()}async downloadResponse(t,n={}){this.refreshPromise&&await this.refreshPromise;let i=t.toString();i.startsWith(hl)&&(t=this.fhirUrl(i));let o=n.headers;return o||(o={},n.headers=o),o.Accept||(o.Accept="*/*"),this.addFetchOptionsDefaults(n),this.fetchWithRetry(t.toString(),n)}async createMedia(t,n){let{additionalFields:i,...o}=t,s=await this.createResource({resourceType:"Media",status:"preparation",content:{contentType:t.contentType},...i});o.securityContext||(o.securityContext=Te(s));let a=await this.createAttachment(o,n);return this.updateResource({...s,status:"completed",content:a})}async uploadMedia(t,n,i,o,s){return this.createMedia({data:t,contentType:n,filename:i,additionalFields:o},s)}async createDocumentReference(t,n){let{additionalFields:i,...o}=t,s=await this.createResource({resourceType:"DocumentReference",status:"current",content:[{attachment:{contentType:t.contentType}}],...i});o.securityContext||(o.securityContext=Te(s));let a=await this.createAttachment(o,n);return this.updateResource({...s,content:[{attachment:a}]})}async bulkExport(t="",n,i,o){let s=t&&`${t}/`,a=this.fhirUrl(`${s}$export`);return n&&a.searchParams.set("_type",n),i&&a.searchParams.set("_since",i),this.startAsyncRequest(a.toString(),o)}async startAsyncRequest(t,n={}){this.addFetchOptionsDefaults(n);let i=n.headers;return i.Prefer="respond-async",this.request("POST",t,n)}get keyValue(){return this.keyValueClient||(this.keyValueClient=new qt(this)),this.keyValueClient}getBundle(t,n){return new B((async()=>{let i=await this.get(t,n);for(let o of i.entry??y)this.cacheResource(o.resource,n);return i})())}isCacheEnabled(t){return!!this.requestCache&&!this.getRequestHeader(t,"x-medplum-on-behalf-of")}getCacheEntry(t,n){if(!this.isCacheEnabled(n)||n?.cache==="no-cache"||n?.cache==="reload")return;let i=this.requestCache.get(t);if(!(!i||i.requestTime+this.cacheTime<Date.now()))return i}setCacheEntry(t,n,i){this.isCacheEnabled(i)&&(this.requestCache.set(t,{requestTime:Date.now(),value:n}),i?.signal&&i.signal.addEventListener("abort",()=>{this.requestCache.delete(t)}))}cacheResource(t,n){t?.id&&!t.meta?.tag?.some(i=>i.code==="SUBSETTED")&&this.setCacheEntry(this.fhirUrl(t.resourceType,t.id).toString(),new B(Promise.resolve(t)),n)}deleteCacheEntry(t){this.requestCache&&this.requestCache.delete(t)}async request(t,n,i={},o={}){await this.refreshIfExpired(),i.method=t,this.addFetchOptionsDefaults(i);let s=await this.fetchWithRetry(n,i);if(s.status===401)return this.handleUnauthenticated(t,n,i);if(s.status===204||s.status===304)return;let u=s.headers.get("content-type")?.includes("json");if(s.status===404&&!u)throw new f(sn);let l=await this.parseBody(s,u);if(s.status===200&&i.followRedirectOnOk||s.status===201&&i.followRedirectOnCreated){let p=await Xo(s,l);if(p)return this.request("GET",p,{...i,body:void 0})}if(s.status===202&&i.pollStatusOnAccepted){let g=await Xo(s,l)??o.statusUrl;if(g)return this.pollStatus(g,i,o)}if(s.status>=400)throw new f(ct(l));return l}async parseBody(t,n){let i;if(t.headers.get("content-length")!=="0"){if(n)try{i=await t.json()}catch(o){throw console.error("Error parsing response",t.status,o),o}else i=await t.text();return i}}async fetchWithRetry(t,n){t.startsWith("http")||(t=N(this.baseUrl,t));let i=n?.maxRetries??this.maxRetries;for(let o=0;o<=i;o++)try{this.logLevel!=="none"&&this.logRequest(t,n);let s=await this.fetch(t,n);if(this.logLevel!=="none"&&this.logResponse(s),this.setCurrentRateLimit(s),o>=i||!Sl(s))return s;let a=this.getRetryDelay(o),u=n.maxRetryTime??this.maxRetryTime;if(a>u)return s;await Er(a,{signal:n.signal})}catch(s){if(s.message==="Failed to fetch"&&o===0&&this.dispatchEvent({type:"offline"}),s.name==="AbortError"||o===i)throw s}throw new Error("Unreachable")}logRequest(t,n){if(console.log(`> ${n.method} ${t}`),this.logLevel==="verbose"&&n.headers){let i=n.headers;for(let o of xt(Object.keys(i)))console.log(`> ${o}: ${i[o]}`)}}logResponse(t){console.log(`< ${t.status} ${t.statusText}`),this.logLevel==="verbose"&&t.headers&&t.headers.forEach((n,i)=>console.log(`< ${i}: ${n}`))}setCurrentRateLimit(t){if(!t?.headers||typeof t.headers.get!="function")return;let n=t.headers.get("ratelimit");n&&(this.currentRateLimits=n)}rateLimitStatus(){if(!this.currentRateLimits)return[];let t=this.currentRateLimits;return t.split(",").map(n=>{let i=n.split(";").map(p=>p.trim());if(i.length!==3)throw new Error("Could not parse RateLimit header: "+t);let o=i[0].substring(1,i[0].length-1),s=i.find(p=>p.startsWith("r="))?.substring(2),a=s?Number.parseInt(s,10):Number.NaN,u=i.find(p=>p.startsWith("t="))?.substring(2),l=u?Number.parseInt(u,10):Number.NaN;if(!o||Number.isNaN(a)||Number.isNaN(l))throw new Error("Could not parse RateLimit header: "+t);return{name:o,remainingUnits:a,secondsUntilReset:l,resetsAfter:Math.ceil((Date.now()+1e3*l)/1e3)}})}getRetryDelay(t){let n=this.rateLimitStatus(),i=500*Math.pow(1.5,t);for(let o of n)o.remainingUnits||(i=Math.max(i,o.secondsUntilReset*1e3));return i}async pollStatus(t,n,i){let o={...n,method:"GET",body:void 0,redirect:"follow"};if(i.pollCount===void 0)n.headers&&typeof n.headers=="object"&&"Prefer"in n.headers&&(o.headers={...n.headers},delete o.headers.Prefer),i.statusUrl=t,i.pollCount=1;else{let s=n.pollStatusPeriod??1e3;await Er(s,{signal:n.signal}),i.pollCount++}return this.request("GET",t,o,i)}async executeAutoBatch(){if(this.autoBatchQueue===void 0)return;let t=[...this.autoBatchQueue];if(this.autoBatchQueue.length=0,this.autoBatchTimerId=void 0,t.length===1){let o=t[0];try{o.resolve(await this.request(o.method,N(this.fhirBaseUrl,o.url),o.options))}catch(s){o.reject(new f(ct(s)))}return}let n={resourceType:"Bundle",type:"batch",entry:t.map(o=>({request:{method:o.method,url:o.url},resource:o.options.body?JSON.parse(o.options.body):void 0}))},i=await this.post(this.fhirBaseUrl,n);for(let o=0;o<t.length;o++){let s=t[o],a=i.entry?.[o];a?.response?.outcome&&!sr(a.response.outcome)?s.reject(new f(a.response.outcome)):s.resolve(a?.resource)}}addFetchOptionsDefaults(t){Object.entries(this.defaultHeaders).forEach(([n,i])=>{this.setRequestHeader(t,n,i)}),this.setRequestHeader(t,"Accept",es,!0),this.options.extendedMode!==!1&&this.setRequestHeader(t,"X-Medplum","extended"),t.body&&this.setRequestHeader(t,"Content-Type",O.FHIR_JSON,!0),this.accessToken?this.setRequestHeader(t,"Authorization","Bearer "+this.accessToken):this.basicAuth&&this.setRequestHeader(t,"Authorization","Basic "+this.basicAuth),t.cache||(t.cache="no-cache"),t.credentials||(t.credentials="include")}setRequestContentType(t,n){this.setRequestHeader(t,"Content-Type",n)}getRequestHeader(t,n){let i=t?.headers;if(i)if(Array.isArray(i)){let o=i.find(([s])=>s.toLowerCase()===n.toLowerCase());return o?o[1]:void 0}else{if(i instanceof Headers)return i.get(n)??void 0;if(R(i))return i[n]??void 0}else return}setRequestHeader(t,n,i,o=!1){let s=t.headers;s?Array.isArray(s)?(!o||!s.some(([a])=>a.toLowerCase()===n.toLowerCase()))&&s.push([n,i]):s instanceof Headers?(!o||!s.has(n))&&s.set(n,i):R(s)&&(!o||!s[n])&&(s[n]=i):t.headers={[n]:i}}setRequestBody(t,n){typeof n=="string"||typeof Blob<"u"&&(n instanceof Blob||n?.constructor.name==="Blob")||typeof File<"u"&&(n instanceof File||n?.constructor.name==="File")||typeof Uint8Array<"u"&&(n instanceof Uint8Array||n?.constructor.name==="Uint8Array")?t.body=n:typeof n=="object"&&n!==null&&(typeof n.getReader=="function"||typeof n.pipe=="function"&&typeof n.on=="function")?(t.body=n,t.duplex="half"):n&&(t.body=JSON.stringify(n))}async handleUnauthenticated(t,n,i){if(this.refresh())return this.request(t,n,i);throw this.clear(),this.onUnauthenticated?.(),new f(we)}async startPkce(){let t=Or();this.storage.setString("pkceState",t);let n=Or().slice(0,128);this.storage.setString("codeVerifier",n);try{let i=await Yn(n);return{codeChallengeMethod:"S256",codeChallenge:Mn(i).replaceAll("+","-").replaceAll("/","_").replaceAll("=","")}}catch(i){return console.warn("Failed to hash code verifier. Falling back to 'plain' code challenge method",i),{codeChallengeMethod:"plain",codeChallenge:n}}}async requestAuthorization(t){let n=await this.ensureCodeChallenge(t??{}),i=new URL(this.authorizeUrl);i.searchParams.set("response_type","code"),i.searchParams.set("state",this.storage.getString("pkceState")),i.searchParams.set("client_id",n.clientId??this.clientId),i.searchParams.set("redirect_uri",n.redirectUri??oe.getOrigin()),i.searchParams.set("code_challenge_method",n.codeChallengeMethod),i.searchParams.set("code_challenge",n.codeChallenge),i.searchParams.set("scope",n.scope??"openid profile"),oe.assign(i.toString())}processCode(t,n){let i={grant_type:Ue.AuthorizationCode,code:t,client_id:n?.clientId??this.clientId??"",redirect_uri:n?.redirectUri??oe.getOrigin()},o=this.storage.getString("codeVerifier");return o&&(i.code_verifier=o),this.fetchTokens(i)}refreshIfExpired(t){return!this.refreshPromise&&this.accessTokenExpires!==void 0&&!this.isAuthenticated(t)&&this.refresh(t),this.refreshPromise??Promise.resolve()}refresh(t){if(this.refreshPromise)return this.refreshPromise;if(!(!this.refreshToken&&!(this.clientId&&this.clientSecret)))return this.refreshPromise=this.runRefreshWithLock(t),this.refreshPromise}async runRefreshWithLock(t){let n=()=>{let s=this.getActiveLogin();return s?.accessToken&&s.accessToken!==this.accessToken&&this.setAccessToken(s.accessToken,s.refreshToken),this.isAuthenticated(t)?Promise.resolve(this.getProfile()):this.refreshToken?this.fetchTokens({grant_type:Ue.RefreshToken,client_id:this.clientId??"",refresh_token:this.refreshToken}):this.clientId&&this.clientSecret?this.startClientLogin(this.clientId,this.clientSecret):Promise.resolve(void 0)},i=typeof navigator<"u"?navigator.locks:void 0;if(!i?.request)return n();let o=`medplum-refresh:${this.storage.makeKey("activeLogin")}`;return i.request(o,n)}async startClientLogin(t,n){return this.clientId=t,this.clientSecret=n,this.fetchTokens({grant_type:Ue.ClientCredentials,client_id:t,client_secret:n})}async startJwtBearerLogin(t,n,i){return this.clientId=t,this.fetchTokens({grant_type:Ue.JwtBearer,client_id:t,assertion:n,scope:i})}async startJwtAssertionLogin(t){return this.fetchTokens({grant_type:Ue.ClientCredentials,client_assertion_type:rs.JwtBearer,client_assertion:t})}setBasicAuth(t,n){this.clientId=t,this.clientSecret=n,this.basicAuth=Ft(t+":"+n)}setLogLevel(t){this.logLevel=t,this.options.verbose=t==="verbose"}getLogLevel(){return this.logLevel}setVerbose(t){this.logLevel=t?"verbose":"none",this.options.verbose=t}async fhircastSubscribe(t,n){if(!(typeof t=="string"&&t!==""))throw new f(v("Invalid topic provided. Topic must be a valid string."));if(!(typeof n=="object"&&Array.isArray(n)&&n.length>0))throw new f(v("Invalid events provided. Events must be an array of event names containing at least one event."));let i={channelType:"websocket",mode:"subscribe",topic:t,events:n},s=(await this.post(this.fhircastHubUrl,Dr(i),O.FORM_URL_ENCODED))["hub.channel.endpoint"];if(!s)throw new Error("Invalid response!");return i.endpoint=s,i}async fhircastUnsubscribe(t){if(!Ut(t))throw new f(v("Invalid topic or subscriptionRequest. SubscriptionRequest must be an object."));if(!(t.endpoint&&typeof t.endpoint=="string"&&t.endpoint.startsWith("ws")))throw new f(v("Provided subscription request must have an endpoint in order to unsubscribe."));t.mode="unsubscribe",await this.post(this.fhircastHubUrl,Dr(t),O.FORM_URL_ENCODED)}fhircastConnect(t){return new Nt(t)}async fhircastPublish(t,n,i,o){return Xn(n)?this.post(this.fhircastHubUrl,Mr(t,n,i,o),O.JSON):(Zn(n),this.post(this.fhircastHubUrl,Mr(t,n,i),O.JSON))}async fhircastGetContext(t){return this.get(`${this.fhircastHubUrl}/${t}`,{cache:"no-cache"})}async invite(t,n){return this.post("admin/projects/"+t+"/invite",n)}async handleTokenError(t){try{let n=await t.json();throw We(n)?new f(n):n.error_description?new f(C(n.error_description)):new Error(JSON.stringify(n))}catch(n){throw n instanceof f?(n.message=`Failed to fetch tokens: ${n.message}`,n):new f(C("Failed to fetch tokens"),{cause:n})}}async fetchTokens(t){let n=new URLSearchParams(t),i={...this.defaultHeaders,"Content-Type":O.FORM_URL_ENCODED};this.basicAuth&&(i.Authorization=`Basic ${this.basicAuth}`),this.credentialsInHeader&&(n.delete("client_id"),n.delete("client_secret"),!this.basicAuth&&t.client_id&&t.client_secret&&(i.Authorization=`Basic ${Ft(t.client_id+":"+t.client_secret)}`));let o={method:"POST",headers:i,body:n.toString(),credentials:"include"},s;try{s=await this.fetchWithRetry(this.tokenUrl,o)}catch(u){throw this.refreshPromise=void 0,u}s.ok||(this.clearActiveLogin(),this.onUnauthenticated?.(),await this.handleTokenError(s));let a=await s.json();return await this.verifyTokens(a),this.getProfile()}async verifyTokens(t){let n=t.access_token;if(ti(n)){let i=Bt(n);if(Date.now()>=i.exp*1e3)throw this.clearActiveLogin(),new f(an);if(i.cid){if(i.cid!==this.clientId)throw this.clearActiveLogin(),new f(ir)}else if(this.clientId&&i.client_id!==this.clientId)throw this.clearActiveLogin(),new f(ir)}return this.setActiveLogin({accessToken:n,refreshToken:t.refresh_token,project:t.project,profile:t.profile})}checkSessionDetailsMatchLogin(t){return this.sessionDetails&&t?t.profile?.reference?.endsWith(this.sessionDetails.profile.id)??!1:!0}setupStorageListener(){try{window.addEventListener("storage",t=>{if(t.key===null)oe.reload();else if(t.key===this.storage.makeKey("activeLogin")){let n=t.oldValue?JSON.parse(t.oldValue):void 0,i=t.newValue?JSON.parse(t.newValue):void 0;n?.profile.reference!==i?.profile.reference||!this.checkSessionDetailsMatchLogin(i)?oe.reload():i?this.setAccessToken(i.accessToken,i.refreshToken):this.clear()}})}catch{}}getSubscriptionManager(){return this.subscriptionManager||(this.subscriptionManager=new $t(this,Nn(this.baseUrl,"/ws/subscriptions-r4"))),this.subscriptionManager}subscribeToCriteria(t,n){return this.getSubscriptionManager().addCriteria(t,n)}unsubscribeFromCriteria(t,n){this.subscriptionManager&&this.subscriptionManager.removeCriteria(t,n)}getMasterSubscriptionEmitter(){return this.getSubscriptionManager().getMasterEmitter()}};function xl(){if(!globalThis.fetch)throw new Error("Fetch not available in this environment");return globalThis.fetch.bind(globalThis)}async function Xo(r,e){let t=r.headers.get("content-location");if(t)return t;let n=r.headers.get("location");if(n)return n;if(We(e)&&e.issue?.[0]?.diagnostics)return e.issue[0].diagnostics}function Zo(r){let e=r.entry?.map(t=>t.resource)??[];return Object.assign(e,{bundle:r})}function vl(r){return R(r)&&"data"in r&&"contentType"in r}function si(r,e,t,n){return vl(r)?r:{data:r,filename:e,contentType:t,onProgress:n}}function Tl(r){return R(r)&&"docDefinition"in r}function ns(r,e,t,n){return Tl(r)?r:{docDefinition:r,filename:e,tableLayouts:t,fonts:n}}function Sl(r){return r.status===429||r.status>=500}var bl={aws_ssm_parameter_store:"aws_ssm_parameter_store"};function El(r,e,t){let n=new Nr;Array.isArray(r)||(r=r.entry?.map(i=>i.resource)??[]);for(let i of r)n.addObservation(i);return n.summarize(e,t)}var Nr=class{constructor(e){c(this,"code");c(this,"unit");c(this,"sampling");c(this,"dataPoints");this.dataPoints=[],this.code=e?.code,this.unit=e?.unit,this.sampling=e?.sampling}addObservation(e){if(!this.code)this.code=e.code;else if(!Rl(this.code,e.code))throw new Error("Observation does not match code of sampled data");e.valueQuantity?.value!==void 0?(this.checkUnit(e.valueQuantity),this.addData(e.valueQuantity.value)):e.valueInteger!==void 0?this.addData(e.valueInteger):e.valueSampledData?.data&&(this.checkUnit(e.valueSampledData.origin),this.addData(...ai(e.valueSampledData)))}addData(...e){this.dataPoints.push(...e)}checkUnit(e){if(!this.unit)this.unit=e;else if(e.code&&e.system){if(this.unit.system!==e.system||this.unit.code!==e.code)throw new Error("Incorrect unit for Observation")}else if(e.unit&&this.unit.unit!==e.unit)throw new Error("Incorrect unit for Observation")}summarize(e,t){if(!this.code)throw new Error("Code is required for data points");let n=t(this.dataPoints);return{resourceType:"Observation",status:"final",code:e,valueQuantity:typeof n=="number"?{...this.unit,value:n}:n,component:[{code:this.code,valueSampledData:{origin:{...this.unit,value:0},dimensions:1,period:0,...this.sampling,data:Cl(this.dataPoints,this.sampling)}}]}}};function Rl(r,e){return!!r.coding?.some(t=>e.coding?.some(n=>t.system===n.system&&t.code===n.code))}function ai(r){return r.data?.split(" ").map(e=>Number.parseFloat(e)*(r.factor??1)+(r.origin.value??0))??[]}function Cl(r,e){if(r.length)return r.map(t=>(t-(e?.origin.value??0))/(e?.factor??1)).join(" ")}function Pl(r){let e=[],t=r.effectiveInstant??r.effectiveDateTime??r.effectivePeriod?.start,n=t?Date.parse(t).valueOf():0;r.valueSampledData&&e.push(...is(r.valueSampledData,n,r));for(let i of r.component??y)i.valueSampledData&&e.push(...is(i.valueSampledData,n,{...r,...i}));return e}function is(r,e,t){let n=[],i=ai(r),o=w(t);for(let s=0;s<i.length;s++){let a=i[s],u=e+Math.floor(s/r.dimensions)*r.period;n.push({...t,id:void 0,effectiveInstant:void 0,effectivePeriod:void 0,effectiveTiming:void 0,effectiveDateTime:u?new Date(u).toISOString():void 0,valueQuantity:{...r.origin,value:a},valueSampledData:void 0,component:void 0,derivedFrom:o?[...t.derivedFrom??[],{reference:o}]:t.derivedFrom})}return n}function Br({parentContext:r,path:e,elements:t,profileUrl:n,debugMode:i,accessPolicyResource:o}){if(e===r?.path)return;i??=r?.debugMode??!1,o??=r?.accessPolicyResource;let s=Al(e,t,r,!!i),a=Me(e,".",2)[1];s=wl(s,o,a),s=Ol(s,o,a);let u=Object.create(null);for(let[p,g]of Object.entries(s))u[e+"."+p]=g;let l;if(r&&!r.isDefaultContext)l=r.getExtendedProps;else{let p=Object.create(null);l=g=>{let x=Me(g,".",2)[1];if(x){if(!p[x]){let D=Ur(x,o?.hiddenFields);p[x]={hidden:D,readonly:D||Ur(x,o?.readonlyFields)}}return p[x]}}}return{path:e,elements:s,elementsByPath:u,profileUrl:n??r?.profileUrl,debugMode:i,getExtendedProps:l,accessPolicyResource:o}}function Al(r,e,t,n){let i=Object.create(null);if(t)for(let[s,a]of Object.entries(t.elementsByPath)){let u=pe(r,s);u!==void 0&&(i[u]=a)}let o=!1;if(e)for(let[s,a]of Object.entries(e))s in i||(i[s]=a,o=!0);return n&&console.assert(o,"Unnecessary ElementsContext; not using any newly provided elements"),i}function wl(r,e,t){if(!e?.hiddenFields?.length)return r;let n=t?t+".":"";return Object.fromEntries(Object.entries(r).filter(([i])=>!Ur(n+i,e.hiddenFields)))}function Ol(r,e,t){if(!e?.readonlyFields?.length)return r;let n=Object.create(null),i=t?t+".":"";for(let[o,s]of Object.entries(r))Ur(i+o,e.readonlyFields)?n[o]={...s,readonly:!0}:n[o]=s;return n}function Ur(r,e){if(!e?.length)return!1;let t=r.split(".");for(let n=1;n<=t.length;n++){let i=t.slice(0,n).join(".");if(e.includes(i))return!0}return!1}function ci(r){return r.type!==void 0&&r.type.length>0}function Il(r,e,t,n){let i=ke(r,e.path,{profileUrl:n});if(i){let o=t.typeSchema?.elements??t.elements;return i.some(s=>hr(s,e,t,o))??!1}return console.assert(!1,"getNestedProperty[%s] in isDiscriminatorComponentMatch missed",e.path),!1}function ui(r,e,t,n){if(r)for(let i of e){let o={value:r,type:i.typeSchema?.type??i.type?.[0].code};if(t.every(s=>Il(o,s,i,i.typeSchema?.url??n)))return i.name}}var Gt=class{constructor(e,t,n){c(this,"rootSchema");c(this,"visitor");c(this,"elementsContextStack");c(this,"sliceAllowList");if(e.type===void 0)throw new Error("schema must include a type");this.rootSchema=e;let i=Br({parentContext:void 0,path:this.rootSchema.type,elements:n??this.rootSchema.elements,profileUrl:this.rootSchema.name===this.rootSchema.type?void 0:this.rootSchema.url});if(i===void 0)throw new Error("Could not create root elements context");this.elementsContextStack=[i],this.visitor=t}get elementsContext(){return this.elementsContextStack.at(-1)}crawlElement(e,t,n){this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema);let i=Object.fromEntries(Object.entries(this.elementsContext.elements).filter(([o])=>o.startsWith(t)));this.crawlElementsImpl(i,n),this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlSlice(e,t,n){let i=this.prepareSlices(n.slices,n);if(!re(i.slices))throw new Error(`cannot crawl slice ${t.name} since it has no type information`);this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema),this.sliceAllowList=[t],this.crawlSliceImpl(i.slices[0],t.path,i),this.sliceAllowList=void 0,this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlResource(){this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema),this.crawlElementsImpl(this.rootSchema.elements,this.rootSchema.type),this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlElementsImpl(e,t){let n=kl(e);for(let i of n)this.crawlElementNode(i,t)}crawlElementNode(e,t){let n=t+"."+e.key;this.visitor.onEnterElement&&this.visitor.onEnterElement(n,e.element,this.elementsContext);for(let i of e.children)this.crawlElementNode(i,t);re(e.element?.slicing?.slices)&&this.crawlSlicingImpl(e.element.slicing,n),this.visitor.onExitElement&&this.visitor.onExitElement(n,e.element,this.elementsContext)}prepareSlices(e,t){let n=[];for(let o of e){if(!ci(o))continue;let s=o.type.find(a=>re(a.profile))?.profile?.[0];if(re(s)){let a=xn(s);a&&(o.typeSchema=a)}n.push(o)}return{...t,slices:n}}crawlSlicingImpl(e,t){let n=this.prepareSlices(e.slices,e);for(let i of n.slices)(this.sliceAllowList===void 0||this.sliceAllowList.includes(i))&&this.crawlSliceImpl(i,t,n)}crawlSliceImpl(e,t,n){let i=e.typeSchema;i&&this.visitor.onEnterSchema&&this.visitor.onEnterSchema(i),this.visitor.onEnterSlice&&this.visitor.onEnterSlice(t,e,n);let o,s=i?.elements??e.elements;re(s)&&(o=Br({path:t,parentContext:this.elementsContext,elements:s})),o&&this.elementsContextStack.push(o),this.crawlElementsImpl(s,t),o&&this.elementsContextStack.pop(),this.visitor.onExitSlice&&this.visitor.onExitSlice(t,e,n),i&&this.visitor.onExitSchema&&this.visitor.onExitSchema(i)}};function kl(r){let e=[];function t(o,s){return s.startsWith(o+".")}function n(o,s){for(let a of o.children)if(t(a.key,s.key)){n(a,s);return}o.children.push(s)}let i=Object.entries(r);i.sort((o,s)=>o[0].localeCompare(s[0]));for(let[o,s]of i){let a={key:o,element:s,children:[]},u=!1;for(let l of e)if(t(l.key,o)){n(l,a),u=!0;break}u||e.push(a)}return e}var qr="__sliceName";function Vl(r,e){let t=new Wr(r,r.resourceType,"resource");return new Gt(e,t).crawlResource(),t.getDefaultValue()}function Dl(r,e,t){for(let[n,i]of Object.entries(e)){if(t===void 0||t===n){Qt(r,n,i,e);continue}let o=pe(t,n);o!==void 0&&Qt(r,o,i,e)}return r}function Ml(r,e,t,n){let i=new Wr([{[qr]:e.name}],e.path,"element");return new Gt(n,i).crawlSlice(r,e,t),i.getDefaultValue()[0]}var Wr=class{constructor(e,t,n){c(this,"rootValue");c(this,"schemaStack");c(this,"valueStack");this.schemaStack=[],this.valueStack=[],this.rootValue=be(e),this.valueStack.splice(0,this.valueStack.length,{type:n,path:t,values:[this.rootValue]})}get schema(){return this.schemaStack.at(-1)}get value(){return this.valueStack.at(-1)}onEnterSchema(e){this.schemaStack.push(e)}onExitSchema(){this.schemaStack.pop()}onEnterElement(e,t,n){let i=this.value.values,o=this.value.path,s=pe(o,e);if(s===void 0)throw new Error(`Expected ${e} to be prefixed by ${o}`);let a=[];for(let u of i){if(u===void 0)continue;let l=pe(n.path,o),p=Array.isArray(u)?u:[u];for(let g of p){_l(g,s,t,n.elements,l),Qt(g,s,t,n.elements);let x=di(g,s,n.elements,l);x!==void 0&&a.push(x)}}this.valueStack.push({type:"element",path:e,values:a})}onExitElement(e,t,n){if(!this.valueStack.pop())throw new Error("Expected value context to exist when exiting element");let o=pe(this.value.path,e);if(o===void 0)throw new Error(`Expected ${e} to be prefixed by ${this.value.path}`);let s=pe(n.path,this.value.path);for(let a of this.value.values){let u=di(a,o,n.elements,s);if(Array.isArray(u))for(let l=u.length-1;l>=0;l--){let p=u[l];re(p)||u.splice(l,1)}P(u)&&li(a,void 0,o,t)}}onEnterSlice(e,t,n){let i=this.value.values,o=[];for(let s of i)if(s!==void 0){let a=Array.isArray(s)?s:[s],u=this.getMatchingSliceValues(a,t,n);o.push(u)}this.valueStack.push({type:"slice",path:e,values:o})}getMatchingSliceValues(e,t,n){let i=[];for(let o of e)(o[qr]??ui(o,[t],n.discriminator,this.schema.url))===t.name&&i.push(o);for(let o=i.length;o<t.min;o++)if(br(t.type[0].code)){let s=Object.create(null);i.push(s),e.push(s)}return i}onExitSlice(){let e=this.valueStack.pop();if(!e)throw new Error("Expected value context to exist in onExitSlice");for(let t of e.values)for(let n=t.length-1;n>=0;n--){let i=t[n];qr in i&&delete i[qr]}}getDefaultValue(){return this.rootValue}};function _l(r,e,t,n,i){let o=di(r,e,n,i);t.min>0&&o===void 0&&br(t.type[0].code)&&(t.isArray?li(r,[Object.create(null)],e,t):li(r,Object.create(null),e,t))}function li(r,e,t,n){if(t.includes("."))throw new Error("key cannot be nested");let i=t;if(t.includes("[x]")){let o=n.type[0].code;i=t.replace("[x]",_(o))}e===void 0?delete r[i]:r[i]=e}function di(r,e,t,n){let i=e.split("."),o=r,s;for(let a=0;a<i.length;a++){let u=i[a];if(u.includes("[x]")){let l=(n?n+".":"")+i.slice(0,a+1).join("."),g=t[l].type[0].code;u=u.replace("[x]",_(g))}if(a===i.length-1){Array.isArray(o)?s=o.map(l=>l[u]):s=o[u];continue}if(Array.isArray(o))o=o.map(l=>l[u]);else if(R(o)){if(o[u]===void 0)return;o=o[u]}else return}return s}function Qt(r,e,t,n){if(!(t.fixed||t.pattern))return r;if(Array.isArray(r))return r.map(a=>Qt(a,e,t,n));r==null&&(r=Object.create(null));let i=r,o=e.split("."),s=i;for(let a=0;a<o.length;a++){let u=o[a];if(u.includes("[x]")){let p=n[o.slice(0,a+1).join(".")].type[0].code;u=u.replace("[x]",_(p))}if(a===o.length-1){let l=Array.isArray(s)?s:[s];for(let p of l)t.fixed?p[u]??=t.fixed.value:t.pattern&&(p[u]=os(p[u],t.pattern.value))}else{if(!(u in s)){let l=o.slice(0,a+1).join(".");s[u]=n[l].isArray?[Object.create(null)]:Object.create(null)}s=s[u]}}return i}function os(r,e){if(Array.isArray(e)&&(Array.isArray(r)||r===void 0))return(r?.length??0)>0?r:be(e);if(R(e)&&(R(r)&&!Array.isArray(r)||r===void 0)){let t=be(r)??Object.create(null);for(let n of Object.keys(e))t[n]=os(t[n],e[n]);return t}return r}function pi(r,e){if(!r.group)throw new f(C("ConceptMap does not specify a mapping group","ConceptMap.group"));let t=ss(e),n=Ll(t,e.targetsystem?r.group.filter(o=>o.target===e.targetsystem):r.group),i=n.length>0;return{result:i,match:i?n:void 0}}function ss(r){let e=Object.create(null);if(r.code&&!r.coding&&!r.codeableConcept){if(!r.system)throw new f(C("System parameter must be provided with code"));e[r.system]=[r.code]}else if(r.coding&&!r.code&&!r.codeableConcept)r.coding.code&&(e[r.coding.system??""]=[r.coding.code]);else if(r.codeableConcept&&!r.code&&!r.coding)for(let{system:t,code:n}of r.codeableConcept.coding??y)n&&(e[t??""]=J(e[t??""],n));else throw r.code||r.coding||r.codeableConcept?new f(C("Ambiguous input: multiple source codings provided")):new f(C("Source Coding (system + code) must be specified"));return e}function Ll(r,e){let t=[];for(let[n,i]of Object.entries(r))for(let o of e.filter(s=>(s.source??"")===n)){let s=o.element?.filter(a=>i.includes(a.code)).flatMap(a=>a.target?.map(u=>({equivalence:u.equivalence,concept:{system:o.target,code:u.code,display:u.display}}))??[]);s?.length||(s=Fl(i,o)),s&&t.push(...s)}return t}function Fl(r,e){switch(e.unmapped?.mode){case"provided":return r.map(t=>({equivalence:"equal",concept:{system:e.target,code:t}}));case"fixed":return[{equivalence:"equivalent",concept:{system:e.target,code:e.unmapped.code,display:e.unmapped.display}}];default:return}}var Nl=[...Mt,"->","<<",">>","=="];function as(r){return new ye(r,Dt,Nl).tokenize()}var Ul={"-":"disjoint","==":"equal"},fi=class{constructor(e){c(this,"parser");c(this,"structureMap",{resourceType:"StructureMap",status:"active"});this.parser=e}parse(){for(;this.parser.hasMore();){let e=this.parser.peek()?.value;switch(e){case"map":this.parseMap();break;case"uses":this.parseUses();break;case"imports":this.parseImport();break;case"group":this.parseGroup();break;case"conceptmap":this.parseConceptMap();break;default:throw new Error(`Unexpected token: ${e}`)}}return this.structureMap}parseMap(){this.parser.consume("Symbol","map"),this.structureMap.url=this.parser.consume("String").value,this.parser.consume("="),this.structureMap.name=this.parser.consume().value}parseUses(){this.parser.consume("Symbol","uses");let e={};e.url=this.parser.consume("String").value,this.parser.peek()?.value==="alias"&&(this.parser.consume("Symbol","alias"),e.alias=this.parser.consume("Symbol").value),this.parser.consume("Symbol","as"),e.mode=this.parser.consume().value,this.structureMap.structure||(this.structureMap.structure=[]),this.structureMap.structure.push(e)}parseImport(){this.parser.consume("Symbol","imports"),this.structureMap.import||(this.structureMap.import=[]),this.structureMap.import.push(this.parser.consume("String").value)}parseGroup(){let e={};this.parser.consume("Symbol","group"),e.name=this.parser.consume("Symbol").value,e.input=this.parseParameters(),this.parser.peek()?.value==="extends"&&(this.parser.consume("Symbol","extends"),e.extends=this.parser.consume("Symbol").value),this.parser.peek()?.value==="<<"?(this.parser.consume("<<"),e.typeMode=this.parser.consume().value,this.parser.peek()?.value==="+"&&(this.parser.consume("+"),e.typeMode="type-and-types"),this.parser.consume(">>")):e.typeMode="none",e.rule=this.parseRules(),this.structureMap.group||(this.structureMap.group=[]),this.structureMap.group.push(e)}parseParameters(){let e=[];for(this.parser.consume("(");this.parser.hasMore()&&this.parser.peek()?.value!==")";)e.push(this.parseParameter()),this.parser.peek()?.value===","&&this.parser.consume(",");return this.parser.consume(")"),e}parseParameter(){let e={};return e.mode=this.parser.consume().value,e.name=this.parser.consume("Symbol").value,this.parser.peek()?.value===":"&&(this.parser.consume(":"),e.type=this.parser.consume("Symbol").value),e}parseRules(){let e=[];for(this.parser.consume("{");this.parser.hasMore()&&this.parser.peek()?.value!=="}";)e.push(this.parseRule());return this.parser.consume("}"),e}parseRule(){let e={source:this.parseRuleSources()};return this.parser.peek()?.value==="->"&&(this.parser.consume("->"),e.target=this.parseRuleTargets()),this.parser.peek()?.value==="then"&&(this.parser.consume("Symbol","then"),this.parser.peek()?.id==="{"?e.rule=this.parseRules():e.dependent=this.parseRuleDependents()),this.parser.peek()?.id==="String"?e.name=this.parser.consume().value:e.name=e.source?.[0]?.element,this.parser.consume(";"),e}parseRuleSources(){this.parser.hasMore()&&this.parser.peek()?.value==="for"&&this.parser.consume("Symbol","for");let e=[this.parseRuleSource()];for(;this.parser.hasMore()&&this.parser.peek()?.value===",";)this.parser.consume(","),e.push(this.parseRuleSource());return e}parseRuleSource(){let e={},n=this.parseRuleContext().split(".");if(e.context=n[0],e.element=n[1],this.parser.hasMore()&&this.parser.peek()?.value===":"&&(this.parser.consume(":"),e.type=this.parser.consume().value),this.parser.hasMore()&&this.parser.peek()?.value==="default"&&(this.parser.consume("Symbol","default"),e.defaultValueString=this.parser.consume("String").value),(this.parser.peek()?.value==="first"||this.parser.peek()?.value==="not_first"||this.parser.peek()?.value==="last"||this.parser.peek()?.value==="not_last"||this.parser.peek()?.value==="only_one")&&(e.listMode=this.parser.consume().value),this.parser.peek()?.value==="as"&&(this.parser.consume("Symbol","as"),e.variable=this.parser.consume().value),this.parser.peek()?.value==="log"&&(this.parser.consume("Symbol","log"),e.logMessage=this.parser.consume().value),this.parser.peek()?.value==="where"){this.parser.consume("Symbol","where");let i=this.parser.consumeAndParse(T.Arrow);e.condition=i.toString()}if(this.parser.peek()?.value==="check"){this.parser.consume("Symbol","check");let i=this.parser.consumeAndParse(T.Arrow);e.check=i.toString()}return e}parseRuleTargets(){let e=[this.parseRuleTarget()];for(;this.parser.hasMore()&&this.parser.peek()?.value===",";)this.parser.consume(","),e.push(this.parseRuleTarget());return e}parseRuleTarget(){let e={},n=this.parseRuleContext().split(".");return e.contextType="variable",e.context=n[0],e.element=n[1],this.parser.peek()?.value==="="&&(this.parser.consume("="),this.parseRuleTargetTransform(e)),this.parser.peek()?.value==="as"&&(this.parser.consume("Symbol","as"),e.variable=this.parser.consume().value),this.parser.peek()?.value==="share"&&(this.parser.consume("Symbol","share"),e.listMode=["share"],this.parser.consume("Symbol")),(this.parser.peek()?.value==="first"||this.parser.peek()?.value==="last"||this.parser.peek()?.value==="collate")&&(e.listMode=[this.parser.consume().value]),e}parseRuleTargetTransform(e){let t=this.parser.consumeAndParse(T.As);t instanceof Y?(e.transform=t.name,e.parameter=t.args?.map(cs)):t instanceof j||t instanceof U?(e.transform="copy",e.parameter=[cs(t)]):(e.transform="evaluate",e.parameter=[{valueString:t.toString()}])}parseRuleContext(){let e=this.parser.consume().value;for(;this.parser.peek()?.value===".";)this.parser.consume("."),e+="."+this.parser.consume().value;return e}parseRuleDependents(){let e=this.parser.consumeAndParse(T.Arrow);return[{name:e.name,variable:e.args.map(t=>t.name)}]}parseConceptMap(){this.parser.consume("Symbol","conceptmap");let e={resourceType:"ConceptMap",status:"active",url:"#"+this.parser.consume("String").value};this.parser.consume("{");let t={},n=this.parser.peek()?.value;for(;n!=="}";)n==="prefix"?this.parseConceptMapPrefix(t):this.parseConceptMapRule(e,t),n=this.parser.peek()?.value;this.parser.consume("}"),this.structureMap.contained||(this.structureMap.contained=[]),this.structureMap.contained.push(e)}parseConceptMapPrefix(e){this.parser.consume("Symbol","prefix");let t=this.parser.consume().value;this.parser.consume("=");let n=this.parser.consume().value;e[t]=n}parseConceptMapRule(e,t){let n=this.parser.consume().value,i=t[n];this.parser.consume(":");let o=this.parser.consume().value,s=Ul[this.parser.consume().value],a=this.parser.consume().value,u=t[a];this.parser.consume(":");let l=this.parser.consume().value,p=e?.group?.find(g=>g.source===i&&g.target===u);p||(p={source:i,target:u,element:[]},e.group||(e.group=[]),e.group.push(p)),p.element||(p.element=[]),p.element.push({code:o,target:[{code:l,equivalence:s}]})}};function cs(r){if(r instanceof U)return{valueId:r.name};if(r instanceof j)return Bl(r);throw new Error(`Unknown parameter atom type: ${r.constructor.name} (${r.toString()})`)}function Bl(r){switch(r.value.type){case"boolean":return{valueBoolean:r.value.value};case"decimal":return{valueDecimal:r.value.value};case"integer":return{valueInteger:r.value.value};case"dateTime":case"string":return{valueString:r.value.value};default:throw new Error("Unknown target literal type: "+r.value.type)}}var ql=Ye().registerInfix("->",{precedence:T.Arrow}).registerInfix(";",{precedence:T.Semicolon});function Wl(r){let e=ql.construct(as(r));return e.removeComments(),new fi(e).parse()}var jr=class{constructor(e=[]){c(this,"resources");this.resources=e}get(e,t){let n=[];for(let i of this.resources)i.resourceType===e&&i.url&&this.matchesUrl(i.url,t)&&n.push(i);return n}matchesUrl(e,t){if(t.includes("*")){let n=t.split("*");return e.startsWith(n[0])&&e.endsWith(n[1])}else return e===t}};function jl(r,e,t=new jr){return $l({root:r,transformMaps:t},r,e)}function $l(r,e,t){return Hl(r,e),ls(r,e),hi(r,e.group[0],t)}function Hl(r,e){let t=Hr(r);if(t&&e.import)for(let n of e.import){let i=t.get("StructureMap",n);for(let o of i)ls(r,o)}}function ls(r,e){let t=Hr(r);if(t&&e.contained)for(let n of e.contained)(n.resourceType==="StructureMap"||n.resourceType==="ConceptMap")&&t.resources.push(n);for(let n of e.group??y)$r(r,n.name,{type:"StructureMapGroup",value:n})}function hi(r,e,t){let n=[],i=[];for(let l of e.input)l.mode==="source"&&n.push(l),l.mode==="target"&&i.push(l);if(n.length===0)throw new Error("Missing source definitions");if(i.length===0)throw new Error("Missing target definitions");if(t.length<n.length)throw new Error(`Not enough arguments (got ${t.length}, min ${n.length})`);if(t.length>n.length+i.length)throw new Error(`Too many arguments (got ${t.length}, max ${n.length+i.length})`);let o={},s=[],a=0;for(let l of n)zt(o,l.name,t[a++]);for(let l of i){let p=t[a++]??{type:l.type??"BackboneElement",value:{}};zt(o,l.name,p),s.push(p)}let u={root:r.root,parent:r,variables:o};for(let l of e.rule??y)ds(u,l);return s}function ds(r,e){e.source&&ps(r,e,0)}function ps(r,e,t){let n=e.source[t];for(let i of Jl(r,n))$r(r,"_",i),n.variable&&$r(r,n.variable,i),t<e.source.length-1?ps(r,e,t+1):Gl(r,e)}function Gl(r,e){if(!Ql(r,e)){for(let t of e.target??y)fs(r,t);for(let t of e.rule??y)ds(r,t);for(let t of e.dependent??y)od(r,t)}}function Ql(r,e){if(e.target?.length!==1||e.target[0].transform||e.rule||e.dependent)return!1;let t=Ae(r,"_");if(Array.isArray(t)&&(t=t[0]),!t)return!1;let n=zl(r,t);if(!n)return fs(r,{...e.target[0],transform:"copy",parameter:[{valueId:"_"}]}),!0;let i=e.target[0],o=Ae(r,i.context),s=o.value[i.element],a=hs(o,i.element)||Array.isArray(s),u={root:r.root,parent:r,variables:{}},l=hi(u,n,[t]);return ms(r,i,o,l,a,s),!0}function zl(r,e){let t=r;for(;t;){if(t.variables){for(let n of Object.values(t.variables))for(let i of mi(n))if(i.type==="StructureMapGroup"){let o=i.value;if((o.typeMode==="types"||o.typeMode==="type-and-types")&&o.input.length===2&&o.input[0].mode==="source"&&o.input[0].type===e.type&&o.input[1].mode==="target")return o}}t=t.parent}}function Jl(r,e){let t=Ae(r,e.context);if(!t)return[];let n=e.element;if(!n)return[t];let i=A(n,[t]);if(!i||i.length===0)return[];if(e.condition&&!us(t,{[e.variable]:i[0]},e.condition))return[];if(e.check&&!us(t,{[e.variable]:i[0]},e.check))throw new Error("Check failed: "+e.check);return e.listMode&&(i=Kl(e,i)),i}function us(r,e,t){return q(A(t,[r],e))}function Kl(r,e){switch(r.listMode){case"first":return[e[0]];case"not_first":return e.slice(1);case"last":return[e.at(-1)];case"not_last":return e.slice(0,e.length-1);case"only_one":if(e.length!==1)throw new Error("Expected only one value");break}return e}function fs(r,e){let t=Ae(r,e.context);if(!t)throw new Error("Target not found: "+e.context);let n=t.value[e.element],i,o=hs(t,e.element)||Array.isArray(n);if(e.transform)switch(e.transform){case"append":i=Yl(r,e);break;case"cast":i=Xl(r,e);break;case"cc":i=Zl(r,e);break;case"copy":i=ed(r,e);break;case"create":i=td(r,e);break;case"evaluate":i=rd(r,e);break;case"translate":i=nd(r,e);break;case"truncate":i=id(r,e);break;case"uuid":i=[{type:"string",value:se()}];break;default:throw new Error(`Unsupported transform: ${e.transform}`)}else{let s=gs(t,e.element)?.type,a=s?.length===1?s[0].code:void 0;o||n===void 0?i=[a?{type:a,value:{}}:S({})]:i=[a?{type:a,value:n}:S(n)]}ms(r,e,t,i,o,n)}function ms(r,e,t,n,i,o){if(n.length!==0){if(i){o||(o=[],zt(t.value,e.element,o));for(let s of n)o.push(s.value)}else zt(t.value,e.element,n[0].value);e.variable&&$r(r,e.variable,sd(n))}}function hs(r,e){return gs(r,e)?.isArray}function gs(r,e){return $e(r.type)?.elements?.[e]}function Yl(r,e){let t=$(r,e.parameter?.[0])?.[0]?.value,n=$(r,e.parameter?.[1])?.[0]?.value;return[{type:"string",value:(t??"").toString()+(n??"").toString()}]}function Xl(r,e){let t=$(r,e.parameter?.[0])?.[0];return $(r,e.parameter?.[1])?.[0]?.value==="string"?[{type:"string",value:t?.value?.toString()}]:[t]}function Zl(r,e){let t=e.parameter;if(t.length===2){let n=$(r,t[0])?.[0]?.value,i=$(r,t[1])?.[0]?.value;return[{type:"CodeableConcept",value:{coding:[{system:n,code:i}]}}]}else return[{type:"CodeableConcept",value:{text:$(r,t[0])?.[0]?.value}}]}function ed(r,e){return e.parameter.flatMap(t=>$(r,t))}function td(r,e){let t={};return e.parameter&&e.parameter.length>0&&(t.resourceType=$(r,e.parameter?.[0])?.[0]?.value),[S(t)]}function rd(r,e){let n=$(r,e.parameter?.[0])[0].value;return A(n,[],ys(r))}function nd(r,e){let t=e.parameter.flatMap(u=>$(r,u)),n=t[0].value,i=t[1].value,s=Hr(r)?.get("ConceptMap",i)[0];if(!s)throw new Error("ConceptMap not found: "+i);let a=pi(s,{system:s.group?.[0]?.source,code:n});return[S(a.match?.[0]?.concept?.code)]}function id(r,e){let t=$(r,e.parameter?.[0])?.[0],n=$(r,e.parameter?.[1])?.[0]?.value;return t.type==="string"?[{type:"string",value:t.value.substring(0,n)}]:[t]}function od(r,e){let t=Ae(r,e.name);if(!t)throw new Error("Dependent group not found: "+e.name);let n=e.variable,i=[];for(let s of n){let a=Ae(r,s);if(!a)throw new Error("Dependent variable not found: "+s);i.push(a)}let o={root:r.root,parent:r,variables:{}};hi(o,t.value,i)}function Hr(r){if(r.transformMaps)return r.transformMaps;if(r.parent)return Hr(r.parent)}function $(r,e){let n=M({type:"StructureMapGroupRuleTargetParameter",value:e},"value");if(!n)throw new Error("Missing target parameter: "+JSON.stringify(e));if(n=mi(n),n.length===1&&n[0].type==="id"){let i=Ae(r,n[0].value);if(!i)throw new Error("Variable not found: "+n[0].value);return mi(i)}return n}function Ae(r,e){let t=r.variables?.[e];if(t)return t;if(r.parent)return Ae(r.parent,e)}function ys(r,e={}){if(r.parent&&ys(r.parent,e),r.variables)for(let[t,n]of Object.entries(r.variables))e[t]=n,e["%"+t]=n;return e}function $r(r,e,t){r.variables||(r.variables={}),zt(r.variables,e,t)}function zt(r,e,t){if(e==="__proto__"||e==="constructor"||e==="prototype")throw new Error("Invalid key: "+e);r[e]=t}function mi(r){return Array.isArray(r)?r:[r]}function sd(r){return r.length===1?r[0]:r}var ad=" ".repeat(2),gi=class{constructor(e=ad,t=!0){c(this,"indent");c(this,"b");c(this,"indentCount");this.indent=e,this.b=[],this.indentCount=0,t&&(this.appendNoWrap("// SPDX-FileCopyrightText: Copyright Orangebot, Inc. and Medplum contributors"),this.appendNoWrap("// SPDX-License-Identifier: Apache-2.0"),this.appendNoWrap("/*"),this.appendNoWrap(" * This is a generated file"),this.appendNoWrap(" * Do not edit manually."),this.appendNoWrap(" */"),this.newLine())}newLine(){this.b.push(`
44
+ }`.replaceAll(/\s+/g," "),u=await this.graphql(a);lr(u.data.StructureDefinitionList);for(let l of u.data.SearchParameterList)Or(l)})());return this.setCacheEntry(i,s,n),s}requestProfileSchema(t,n){if(!n?.expandProfile&&Tn(t))return Promise.resolve();let i=t+"-requestSchema"+(n?.expandProfile?"-nested":""),o=this.getCacheEntry(i,void 0);if(o)return o.value;let s=new W((async()=>{if(n?.expandProfile){let a=this.fhirUrl("StructureDefinition","$expand-profile");a.search=new URLSearchParams({url:t}).toString();let u=await this.post(a.toString(),{});lr(u)}else{let a=await this.searchOne("StructureDefinition",{url:t,_sort:"-_lastUpdated"});if(!a){console.warn(`No StructureDefinition found for ${t}!`);return}dr(a)}})());return this.setCacheEntry(i,s,n),s}readHistory(t,n,i,o){let s=this.fhirUrl(t,n,"_history");return i?.count&&s.searchParams.set("_count",i.count.toString()),i?.offset&&s.searchParams.set("_offset",i.offset.toString()),this.get(s.toString(),o)}readVersion(t,n,i,o){return this.get(this.fhirUrl(t,n,"_history",i),o)}readPatientEverything(t,n){return this.getBundle(this.fhirUrl("Patient",t,"$everything"),n)}readPatientSummary(t,n){return this.getBundle(this.fhirUrl("Patient",t,"$summary"),n)}createResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");return this.invalidateSearches(t.resourceType),this.post(this.fhirUrl(t.resourceType),t,void 0,n)}async createResourceIfNoneExist(t,n,i={}){let o=this.fhirUrl(t.resourceType);this.setRequestHeader(i,"If-None-Exist",n);let s=await this.post(o,t,void 0,i);return this.cacheResource(s,i),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),s}async upsertResource(t,n,i){let o=this.fhirSearchUrl(t.resourceType,n),s=await this.put(o,t,void 0,i);return s||(s=t),this.cacheResource(s,i),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),s}async createAttachment(t,n,i,o,s){let a=ui(t,n,i,o);if(a.contentType===k.XML){let p=a.data,g;p instanceof Blob?g=await new Promise((v,M)=>{let te=new FileReader;te.onload=()=>{if(!te.result){M(new Error("Failed to load file"));return}v(te.result)},te.readAsText(p,"utf-8")}):ArrayBuffer.isView(p)?g=new TextDecoder().decode(p):g=p,g.includes("<ClinicalDocument")&&g.includes("urn:hl7-org:v3")&&(a={...a,contentType:k.CDA_XML})}let u=s??(typeof n=="object"?n:{}),l=await this.createBinary(a,u);return{contentType:a.contentType,url:l.url,title:a.filename}}createBinary(t,n,i,o,s){let a=ui(t,n,i,o),u=s??(typeof n=="object"?n:{}),{data:l,contentType:p,filename:g,securityContext:v,onProgress:M}=a,te=this.fhirUrl("Binary");return g&&te.searchParams.set("_filename",g),v?.reference&&this.setRequestHeader(u,"X-Security-Context",v.reference),M?this.uploadwithProgress(te,l,p,M,u):this.post(te,l,p,u)}uploadwithProgress(t,n,i,o,s){return new Promise((a,u)=>{let l=new XMLHttpRequest,p=()=>l.abort();s?.signal?.addEventListener("abort",p);let g=v=>{s?.signal?.removeEventListener("abort",p),v instanceof Error?u(v):a(v)};if(l.responseType="json",l.onabort=()=>g(new DOMException("Request aborted","AbortError")),l.onerror=()=>g(new Error("Request error")),o&&(l.upload.onprogress=v=>o(v),l.upload.onload=v=>o(v)),l.onload=()=>{l.status>=200&&l.status<300?g(l.response):g(new f(ut(l.response||l.statusText)))},l.open("POST",t),l.withCredentials=!0,l.setRequestHeader("Authorization","Bearer "+this.accessToken),l.setRequestHeader("Cache-Control","no-cache, no-store, max-age=0"),l.setRequestHeader("Content-Type",i),this.options.extendedMode!==!1&&l.setRequestHeader("X-Medplum","extended"),s?.headers){let v=s.headers;for(let[M,te]of Object.entries(v))l.setRequestHeader(M,te)}l.send(n)})}async createPdf(t,n,i,o){if(!this.createPdfImpl)throw new Error("PDF creation not enabled");let s=os(t,n,i,o),a=typeof n=="object"?n:{},{docDefinition:u,tableLayouts:l,fonts:p,...g}=s,v=await this.createPdfImpl(u,l,p),M={...g,data:v,contentType:"application/pdf"};return this.createBinary(M,a)}createComment(t,n,i){let o=this.getProfile(),s,a;return t.resourceType==="Encounter"&&(s=Se(t),a=t.subject),t.resourceType==="ServiceRequest"&&(s=t.encounter,a=t.subject),t.resourceType==="Patient"&&(a=Se(t)),this.createResource({resourceType:"Communication",status:"completed",basedOn:[Se(t)],encounter:s,subject:a,sender:o?Se(o):void 0,sent:new Date().toISOString(),payload:[{contentString:n}]},i)}async updateResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");if(!t.id)throw new Error("Missing id");let i=await this.put(this.fhirUrl(t.resourceType,t.id),t,void 0,n);return i||(i=t),this.cacheResource(i,n),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),i}async patchResource(t,n,i,o){let s=await this.patch(this.fhirUrl(t,n),i,o);return this.cacheResource(s,o),this.invalidateUrl(this.fhirUrl(t,n,"_history")),this.invalidateSearches(t),s}deleteResource(t,n,i){return this.deleteCacheEntry(this.fhirUrl(t,n).toString()),this.invalidateSearches(t),this.delete(this.fhirUrl(t,n),i)}validateResource(t,n){return this.post(this.fhirUrl(t.resourceType,"$validate"),t,void 0,n)}executeBot(t,n,i,o){let s;if(typeof t=="string"){let a=t;s=this.fhirUrl("Bot",a,"$execute")}else{let a=t;s=this.fhirUrl("Bot","$execute"),s.searchParams.set("identifier",a.system+"|"+a.value)}return this.post(s,n,i,o)}executeBatch(t,n){return this.post(this.fhirBaseUrl,t,void 0,n)}sendEmail(t,n){return this.post("email/v1/send",t,k.JSON,n)}graphql(t,n,i,o){return this.post(this.fhirUrl("$graphql"),{query:t,operationName:n,variables:i},k.JSON,o)}readResourceGraph(t,n,i,o){return this.get(`${this.fhirUrl(t,n)}/$graph?graph=${i}`,o)}pushToAgent(t,n,i,o,s,a){let{waitTimeout:u,returnAck:l,...p}=a??{};return this.post(this.fhirUrl("Agent",be(t),"$push"),{destination:typeof n=="string"?n:O(n),body:i,contentType:o,waitForResponse:s,...u!==void 0?{waitTimeout:u}:void 0,...l!==void 0?{returnAck:l}:void 0},k.FHIR_JSON,p)}getCdsServices(t){return this.get(this.cdsServicesUrl,t)}callCdsService(t,n,i){return this.post(U(this.cdsServicesUrl,t),n,k.JSON,i)}getActiveLogin(){return this.storage.getObject("activeLogin")}async setActiveLogin(t){(!this.sessionDetails?.profile||O(this.sessionDetails.profile)!==t.profile?.reference)&&this.clearActiveLogin(),this.setAccessToken(t.accessToken,t.refreshToken),this.storage.setObject("activeLogin",t),this.addLogin(t),this.refreshPromise=void 0,await this.refreshProfile()}getAccessToken(){return this.accessToken}isAuthenticated(t){return this.accessTokenExpires!==void 0&&Date.now()<this.accessTokenExpires-(t??this.refreshGracePeriod)}setAccessToken(t,n){this.accessToken=t,this.refreshToken=n,this.accessTokenExpires=si(t),this.medplumServer=oi(t)}getLogins(){return this.storage.getObject("logins")??[]}addLogin(t){let n=this.getLogins().filter(i=>i.profile?.reference!==t.profile?.reference);n.push(t),this.storage.setObject("logins",n)}async refreshProfile(){if(this.medplumServer)return this.profilePromise=new Promise((t,n)=>{this.get("auth/me",{cache:"no-cache"}).then(i=>{this.profilePromise=void 0;let o=this.sessionDetails?.profile?.id!==i.profile.id;this.sessionDetails=i,o&&this.dispatchEvent({type:"change"}),t(i.profile),this.dispatchEvent({type:"profileRefreshed"})}).catch(n)}),this.dispatchEvent({type:"profileRefreshing"}),this.profilePromise}isLoading(){return!this.isInitialized||!!this.profilePromise&&!this.sessionDetails?.profile}isSuperAdmin(){return!!this.sessionDetails?.project.superAdmin}isProjectAdmin(){return!!this.sessionDetails?.membership.admin}getProject(){return this.sessionDetails?.project}getProjectMembership(){return this.sessionDetails?.membership}getProfile(){return this.sessionDetails?.profile}async getProfileAsync(){return this.profilePromise?this.profilePromise:this.sessionDetails?this.sessionDetails.profile:this.refreshProfile()}getUserConfiguration(){return this.sessionDetails?.config}getAccessPolicy(){return this.sessionDetails?.accessPolicy}async download(t,n={}){return(await this.downloadResponse(t,n)).blob()}async downloadResponse(t,n={}){this.refreshPromise&&await this.refreshPromise;let i=t.toString();i.startsWith(El)&&(t=this.fhirUrl(i));let o=n.headers;return o||(o={},n.headers=o),o.Accept||(o.Accept="*/*"),this.addFetchOptionsDefaults(n),this.fetchWithRetry(t.toString(),n)}async createMedia(t,n){let{additionalFields:i,...o}=t,s=await this.createResource({resourceType:"Media",status:"preparation",content:{contentType:t.contentType},...i});o.securityContext||(o.securityContext=Se(s));let a=await this.createAttachment(o,n);return this.updateResource({...s,status:"completed",content:a})}async uploadMedia(t,n,i,o,s){return this.createMedia({data:t,contentType:n,filename:i,additionalFields:o},s)}async createDocumentReference(t,n){let{additionalFields:i,...o}=t,s=await this.createResource({resourceType:"DocumentReference",status:"current",content:[{attachment:{contentType:t.contentType}}],...i});o.securityContext||(o.securityContext=Se(s));let a=await this.createAttachment(o,n);return this.updateResource({...s,content:[{attachment:a}]})}async bulkExport(t="",n,i,o){let s=t&&`${t}/`,a=this.fhirUrl(`${s}$export`);return n&&a.searchParams.set("_type",n),i&&a.searchParams.set("_since",i),this.startAsyncRequest(a.toString(),o)}async startAsyncRequest(t,n={}){this.addFetchOptionsDefaults(n);let i=n.headers;return i.Prefer="respond-async",n.method="POST",this.request(t,n)}async wrappedFetch(t,n){return await this.refreshIfExpired(),this.addFetchOptionsDefaults(n),this.fetchWithRetry(t,n)}get keyValue(){return this.keyValueClient||(this.keyValueClient=new qt(this)),this.keyValueClient}getBundle(t,n){return new W((async()=>{let i=await this.get(t,n);for(let o of i.entry??y)this.cacheResource(o.resource,n);return i})())}isCacheEnabled(t){return!!this.requestCache&&!this.getRequestHeader(t,"x-medplum-on-behalf-of")}getCacheEntry(t,n){if(!this.isCacheEnabled(n)||n?.cache==="no-cache"||n?.cache==="reload")return;let i=this.requestCache.get(t);if(!(!i||i.requestTime+this.cacheTime<Date.now()))return i}setCacheEntry(t,n,i){this.isCacheEnabled(i)&&(this.requestCache.set(t,{requestTime:Date.now(),value:n}),i?.signal&&i.signal.addEventListener("abort",()=>{this.requestCache.delete(t)}))}cacheResource(t,n){t?.id&&!t.meta?.tag?.some(i=>i.code==="SUBSETTED")&&this.setCacheEntry(this.fhirUrl(t.resourceType,t.id).toString(),new W(Promise.resolve(t)),n)}deleteCacheEntry(t){this.requestCache&&this.requestCache.delete(t)}async request(t,n={},i={}){let o=await this.wrappedFetch(t,n);if(o.status===401)return this.handleUnauthenticated(t,n);if(o.status===204||o.status===304)return;let a=o.headers.get("content-type")?.includes("json");if(o.status===404&&!a)throw new f(un);let u=await this.parseBody(o,a);if(o.status===200&&n.followRedirectOnOk||o.status===201&&n.followRedirectOnCreated){let l=await es(o,u);if(l)return this.request(l,{...n,method:"GET",body:void 0})}if(o.status===202&&n.pollStatusOnAccepted){let p=await es(o,u)??i.statusUrl;if(p)return this.pollStatus(p,n,i)}if(o.status>=400)throw new f(ut(u));return u}async parseBody(t,n){let i;if(t.headers.get("content-length")!=="0"){if(n)try{i=await t.json()}catch(o){throw console.error("Error parsing response",t.status,o),o}else i=await t.text();return i}}async fetchWithRetry(t,n){t.startsWith("http")||(t=U(this.baseUrl,t));let i=n?.maxRetries??this.maxRetries;for(let o=0;o<=i;o++)try{this.logLevel!=="none"&&this.logRequest(t,n);let s=await this.fetch(t,n);if(this.logLevel!=="none"&&this.logResponse(s),this.setCurrentRateLimit(s),o>=i||!Ol(s))return s;let a=this.getRetryDelay(o),u=n.maxRetryTime??this.maxRetryTime;if(a>u)return s;await Pr(a,{signal:n.signal})}catch(s){if(s.message==="Failed to fetch"&&o===0&&this.dispatchEvent({type:"offline"}),s.name==="AbortError"||o===i)throw s}throw new Error("Unreachable")}logRequest(t,n){if(console.log(`> ${n.method} ${t}`),this.logLevel==="verbose"&&n.headers){let i=n.headers;for(let o of vt(Object.keys(i)))console.log(`> ${o}: ${i[o]}`)}}logResponse(t){console.log(`< ${t.status} ${t.statusText}`),this.logLevel==="verbose"&&t.headers&&t.headers.forEach((n,i)=>console.log(`< ${i}: ${n}`))}setCurrentRateLimit(t){if(!t?.headers||typeof t.headers.get!="function")return;let n=t.headers.get("ratelimit");n&&(this.currentRateLimits=n)}rateLimitStatus(){if(!this.currentRateLimits)return[];let t=this.currentRateLimits;return t.split(",").map(n=>{let i=n.split(";").map(p=>p.trim());if(i.length!==3)throw new Error("Could not parse RateLimit header: "+t);let o=i[0].substring(1,i[0].length-1),s=i.find(p=>p.startsWith("r="))?.substring(2),a=s?Number.parseInt(s,10):Number.NaN,u=i.find(p=>p.startsWith("t="))?.substring(2),l=u?Number.parseInt(u,10):Number.NaN;if(!o||Number.isNaN(a)||Number.isNaN(l))throw new Error("Could not parse RateLimit header: "+t);return{name:o,remainingUnits:a,secondsUntilReset:l,resetsAfter:Math.ceil((Date.now()+1e3*l)/1e3)}})}getRetryDelay(t){let n=this.rateLimitStatus(),i=500*Math.pow(1.5,t);for(let o of n)o.remainingUnits||(i=Math.max(i,o.secondsUntilReset*1e3));return i}async pollStatus(t,n,i){let o={...n,method:"GET",body:void 0,redirect:"follow"};if(i.pollCount===void 0)n.headers&&typeof n.headers=="object"&&"Prefer"in n.headers&&(o.headers={...n.headers},delete o.headers.Prefer),i.statusUrl=t,i.pollCount=1;else{let s=n.pollStatusPeriod??1e3;await Pr(s,{signal:n.signal}),i.pollCount++}return this.request(t,{...n,method:"GET"},i)}async executeAutoBatch(){if(this.autoBatchQueue===void 0)return;let t=[...this.autoBatchQueue];if(this.autoBatchQueue.length=0,this.autoBatchTimerId=void 0,t.length===1){let o=t[0];try{o.options.method=o.method,o.resolve(await this.request(U(this.fhirBaseUrl,o.url),o.options))}catch(s){o.reject(new f(ut(s)))}return}let n={resourceType:"Bundle",type:"batch",entry:t.map(o=>({request:{method:o.method,url:o.url},resource:o.options.body?JSON.parse(o.options.body):void 0}))},i=await this.post(this.fhirBaseUrl,n);for(let o=0;o<t.length;o++){let s=t[o],a=i.entry?.[o];a?.response?.outcome&&!ar(a.response.outcome)?s.reject(new f(a.response.outcome)):s.resolve(a?.resource)}}addFetchOptionsDefaults(t){Object.entries(this.defaultHeaders).forEach(([n,i])=>{this.setRequestHeader(t,n,i)}),this.setRequestHeader(t,"Accept",rs,!0),this.options.extendedMode!==!1&&this.setRequestHeader(t,"X-Medplum","extended"),t.body&&this.setRequestHeader(t,"Content-Type",k.FHIR_JSON,!0),this.accessToken?this.setRequestHeader(t,"Authorization","Bearer "+this.accessToken):this.basicAuth&&this.setRequestHeader(t,"Authorization","Basic "+this.basicAuth),t.cache||(t.cache="no-cache"),t.credentials||(t.credentials="include")}setRequestContentType(t,n){this.setRequestHeader(t,"Content-Type",n)}getRequestHeader(t,n){let i=t?.headers;if(i)if(Array.isArray(i)){let o=i.find(([s])=>s.toLowerCase()===n.toLowerCase());return o?o[1]:void 0}else{if(i instanceof Headers)return i.get(n)??void 0;if(C(i))return i[n]??void 0}else return}setRequestHeader(t,n,i,o=!1){let s=t.headers;s?Array.isArray(s)?(!o||!s.some(([a])=>a.toLowerCase()===n.toLowerCase()))&&s.push([n,i]):s instanceof Headers?(!o||!s.has(n))&&s.set(n,i):C(s)&&(!o||!s[n])&&(s[n]=i):t.headers={[n]:i}}setRequestBody(t,n){typeof n=="string"||typeof Blob<"u"&&(n instanceof Blob||n?.constructor.name==="Blob")||typeof File<"u"&&(n instanceof File||n?.constructor.name==="File")||typeof Uint8Array<"u"&&(n instanceof Uint8Array||n?.constructor.name==="Uint8Array")?t.body=n:typeof n=="object"&&n!==null&&(typeof n.getReader=="function"||typeof n.pipe=="function"&&typeof n.on=="function")?(t.body=n,t.duplex="half"):n&&(t.body=JSON.stringify(n))}handleUnauthenticated(t,n){if(this.refresh())return this.request(t,n);throw this.clear(),this.onUnauthenticated?.(),new f(Oe)}async startPkce(){let t=Vr();this.storage.setString("pkceState",t);let n=Vr().slice(0,128);this.storage.setString("codeVerifier",n);try{let i=await ei(n);return{codeChallengeMethod:"S256",codeChallenge:Nn(i).replaceAll("+","-").replaceAll("/","_").replaceAll("=","")}}catch(i){return console.warn("Failed to hash code verifier. Falling back to 'plain' code challenge method",i),{codeChallengeMethod:"plain",codeChallenge:n}}}async requestAuthorization(t){let n=await this.ensureCodeChallenge(t??{}),i=new URL(this.authorizeUrl);i.searchParams.set("response_type","code"),i.searchParams.set("state",this.storage.getString("pkceState")),i.searchParams.set("client_id",n.clientId??this.clientId),i.searchParams.set("redirect_uri",n.redirectUri??ae.getOrigin()),i.searchParams.set("code_challenge_method",n.codeChallengeMethod),i.searchParams.set("code_challenge",n.codeChallenge),i.searchParams.set("scope",n.scope??"openid profile"),ae.assign(i.toString())}processCode(t,n){let i={grant_type:Be.AuthorizationCode,code:t,client_id:n?.clientId??this.clientId??"",redirect_uri:n?.redirectUri??ae.getOrigin()},o=this.storage.getString("codeVerifier");return o&&(i.code_verifier=o),this.fetchTokens(i)}refreshIfExpired(t){return!this.refreshPromise&&this.accessTokenExpires!==void 0&&!this.isAuthenticated(t)&&this.refresh(t),this.refreshPromise??Promise.resolve()}refresh(t){if(this.refreshPromise)return this.refreshPromise;if(!(!this.refreshToken&&!(this.clientId&&this.clientSecret)))return this.refreshPromise=this.runRefreshWithLock(t),this.refreshPromise}async runRefreshWithLock(t){let n=()=>{let s=this.getActiveLogin();return s?.accessToken&&s.accessToken!==this.accessToken&&this.setAccessToken(s.accessToken,s.refreshToken),this.isAuthenticated(t)?Promise.resolve(this.getProfile()):this.refreshToken?this.fetchTokens({grant_type:Be.RefreshToken,client_id:this.clientId??"",refresh_token:this.refreshToken}):this.clientId&&this.clientSecret?this.startClientLogin(this.clientId,this.clientSecret):Promise.resolve(void 0)},i=typeof navigator<"u"?navigator.locks:void 0;if(!i?.request)return n();let o=`medplum-refresh:${this.storage.makeKey("activeLogin")}`;return i.request(o,n)}async startClientLogin(t,n){return this.clientId=t,this.clientSecret=n,this.fetchTokens({grant_type:Be.ClientCredentials,client_id:t,client_secret:n})}async startJwtBearerLogin(t,n,i){return this.clientId=t,this.fetchTokens({grant_type:Be.JwtBearer,client_id:t,assertion:n,scope:i})}async startJwtAssertionLogin(t){return this.fetchTokens({grant_type:Be.ClientCredentials,client_assertion_type:is.JwtBearer,client_assertion:t})}setBasicAuth(t,n){this.clientId=t,this.clientSecret=n,this.basicAuth=Ft(t+":"+n)}setLogLevel(t){this.logLevel=t,this.options.verbose=t==="verbose"}getLogLevel(){return this.logLevel}setVerbose(t){this.logLevel=t?"verbose":"none",this.options.verbose=t}async fhircastSubscribe(t,n){if(!(typeof t=="string"&&t!==""))throw new f(T("Invalid topic provided. Topic must be a valid string."));if(!(typeof n=="object"&&Array.isArray(n)&&n.length>0))throw new f(T("Invalid events provided. Events must be an array of event names containing at least one event."));let i={channelType:"websocket",mode:"subscribe",topic:t,events:n},s=(await this.post(this.fhircastHubUrl,Lr(i),k.FORM_URL_ENCODED))["hub.channel.endpoint"];if(!s)throw new Error("Invalid response!");return i.endpoint=s,i}async fhircastUnsubscribe(t){if(!Bt(t))throw new f(T("Invalid topic or subscriptionRequest. SubscriptionRequest must be an object."));if(!(t.endpoint&&typeof t.endpoint=="string"&&t.endpoint.startsWith("ws")))throw new f(T("Provided subscription request must have an endpoint in order to unsubscribe."));t.mode="unsubscribe",await this.post(this.fhircastHubUrl,Lr(t),k.FORM_URL_ENCODED)}fhircastConnect(t){return new Ut(t)}async fhircastPublish(t,n,i,o){return ti(n)?this.post(this.fhircastHubUrl,Nr(t,n,i,o),k.JSON):(ri(n),this.post(this.fhircastHubUrl,Nr(t,n,i),k.JSON))}async fhircastGetContext(t){return this.get(`${this.fhircastHubUrl}/${t}`,{cache:"no-cache"})}async invite(t,n){return this.post("admin/projects/"+t+"/invite",n)}async handleTokenError(t){try{let n=await t.json();throw je(n)?new f(n):n.error_description?new f(P(n.error_description)):new Error(JSON.stringify(n))}catch(n){throw n instanceof f?(n.message=`Failed to fetch tokens: ${n.message}`,n):new f(P("Failed to fetch tokens"),{cause:n})}}async fetchTokens(t){let n=new URLSearchParams(t),i={...this.defaultHeaders,"Content-Type":k.FORM_URL_ENCODED};this.basicAuth&&(i.Authorization=`Basic ${this.basicAuth}`),this.credentialsInHeader&&(n.delete("client_id"),n.delete("client_secret"),!this.basicAuth&&t.client_id&&t.client_secret&&(i.Authorization=`Basic ${Ft(t.client_id+":"+t.client_secret)}`));let o={method:"POST",headers:i,body:n.toString(),credentials:"include"},s;try{s=await this.fetchWithRetry(this.tokenUrl,o)}catch(u){throw this.refreshPromise=void 0,u}s.ok||(this.clearActiveLogin(),this.onUnauthenticated?.(),await this.handleTokenError(s));let a=await s.json();return await this.verifyTokens(a),this.getProfile()}async verifyTokens(t){let n=t.access_token;if(ii(n)){let i=Wt(n);if(Date.now()>=i.exp*1e3)throw this.clearActiveLogin(),new f(ln);if(i.cid){if(i.cid!==this.clientId)throw this.clearActiveLogin(),new f(or)}else if(this.clientId&&i.client_id!==this.clientId)throw this.clearActiveLogin(),new f(or)}return this.setActiveLogin({accessToken:n,refreshToken:t.refresh_token,project:t.project,profile:t.profile})}checkSessionDetailsMatchLogin(t){return this.sessionDetails&&t?t.profile?.reference?.endsWith(this.sessionDetails.profile.id)??!1:!0}setupStorageListener(){try{window.addEventListener("storage",t=>{if(t.key===null)ae.reload();else if(t.key===this.storage.makeKey("activeLogin")){let n=t.oldValue?JSON.parse(t.oldValue):void 0,i=t.newValue?JSON.parse(t.newValue):void 0;n?.profile.reference!==i?.profile.reference||!this.checkSessionDetailsMatchLogin(i)?ae.reload():i?this.setAccessToken(i.accessToken,i.refreshToken):this.clear()}})}catch{}}getSubscriptionManager(){return this.subscriptionManager||(this.subscriptionManager=new Ht(this,Wn(this.baseUrl,"/ws/subscriptions-r4"))),this.subscriptionManager}subscribeToCriteria(t,n){return this.getSubscriptionManager().addCriteria(t,n)}unsubscribeFromCriteria(t,n){this.subscriptionManager&&this.subscriptionManager.removeCriteria(t,n)}getMasterSubscriptionEmitter(){return this.getSubscriptionManager().getMasterEmitter()}};function Pl(){if(!globalThis.fetch)throw new Error("Fetch not available in this environment");return globalThis.fetch.bind(globalThis)}async function es(r,e){let t=r.headers.get("content-location");if(t)return t;let n=r.headers.get("location");if(n)return n;if(je(e)&&e.issue?.[0]?.diagnostics)return e.issue[0].diagnostics}function ts(r){let e=r.entry?.map(t=>t.resource)??[];return Object.assign(e,{bundle:r})}function Al(r){return C(r)&&"data"in r&&"contentType"in r}function ui(r,e,t,n){return Al(r)?r:{data:r,filename:e,contentType:t,onProgress:n}}function wl(r){return C(r)&&"docDefinition"in r}function os(r,e,t,n){return wl(r)?r:{docDefinition:r,filename:e,tableLayouts:t,fonts:n}}function Ol(r){return r.status===429||r.status>=500}var Il={aws_ssm_parameter_store:"aws_ssm_parameter_store"};function kl(r,e,t){let n=new Wr;Array.isArray(r)||(r=r.entry?.map(i=>i.resource)??[]);for(let i of r)n.addObservation(i);return n.summarize(e,t)}var Wr=class{constructor(e){c(this,"code");c(this,"unit");c(this,"sampling");c(this,"dataPoints");this.dataPoints=[],this.code=e?.code,this.unit=e?.unit,this.sampling=e?.sampling}addObservation(e){if(!this.code)this.code=e.code;else if(!Vl(this.code,e.code))throw new Error("Observation does not match code of sampled data");e.valueQuantity?.value!==void 0?(this.checkUnit(e.valueQuantity),this.addData(e.valueQuantity.value)):e.valueInteger!==void 0?this.addData(e.valueInteger):e.valueSampledData?.data&&(this.checkUnit(e.valueSampledData.origin),this.addData(...li(e.valueSampledData)))}addData(...e){this.dataPoints.push(...e)}checkUnit(e){if(!this.unit)this.unit=e;else if(e.code&&e.system){if(this.unit.system!==e.system||this.unit.code!==e.code)throw new Error("Incorrect unit for Observation")}else if(e.unit&&this.unit.unit!==e.unit)throw new Error("Incorrect unit for Observation")}summarize(e,t){if(!this.code)throw new Error("Code is required for data points");let n=t(this.dataPoints);return{resourceType:"Observation",status:"final",code:e,valueQuantity:typeof n=="number"?{...this.unit,value:n}:n,component:[{code:this.code,valueSampledData:{origin:{...this.unit,value:0},dimensions:1,period:0,...this.sampling,data:Dl(this.dataPoints,this.sampling)}}]}}};function Vl(r,e){return!!r.coding?.some(t=>e.coding?.some(n=>t.system===n.system&&t.code===n.code))}function li(r){return r.data?.split(" ").map(e=>Number.parseFloat(e)*(r.factor??1)+(r.origin.value??0))??[]}function Dl(r,e){if(r.length)return r.map(t=>(t-(e?.origin.value??0))/(e?.factor??1)).join(" ")}function Ml(r){let e=[],t=r.effectiveInstant??r.effectiveDateTime??r.effectivePeriod?.start,n=t?Date.parse(t).valueOf():0;r.valueSampledData&&e.push(...ss(r.valueSampledData,n,r));for(let i of r.component??y)i.valueSampledData&&e.push(...ss(i.valueSampledData,n,{...r,...i}));return e}function ss(r,e,t){let n=[],i=li(r),o=O(t);for(let s=0;s<i.length;s++){let a=i[s],u=e+Math.floor(s/r.dimensions)*r.period;n.push({...t,id:void 0,effectiveInstant:void 0,effectivePeriod:void 0,effectiveTiming:void 0,effectiveDateTime:u?new Date(u).toISOString():void 0,valueQuantity:{...r.origin,value:a},valueSampledData:void 0,component:void 0,derivedFrom:o?[...t.derivedFrom??[],{reference:o}]:t.derivedFrom})}return n}function jr({parentContext:r,path:e,elements:t,profileUrl:n,debugMode:i,accessPolicyResource:o}){if(e===r?.path)return;i??=r?.debugMode??!1,o??=r?.accessPolicyResource;let s=_l(e,t,r,!!i),a=_e(e,".",2)[1];s=Ll(s,o,a),s=Nl(s,o,a);let u=Object.create(null);for(let[p,g]of Object.entries(s))u[e+"."+p]=g;let l;if(r&&!r.isDefaultContext)l=r.getExtendedProps;else{let p=Object.create(null);l=g=>{let v=_e(g,".",2)[1];if(v){if(!p[v]){let M=qr(v,o?.hiddenFields);p[v]={hidden:M,readonly:M||qr(v,o?.readonlyFields)}}return p[v]}}}return{path:e,elements:s,elementsByPath:u,profileUrl:n??r?.profileUrl,debugMode:i,getExtendedProps:l,accessPolicyResource:o}}function _l(r,e,t,n){let i=Object.create(null);if(t)for(let[s,a]of Object.entries(t.elementsByPath)){let u=fe(r,s);u!==void 0&&(i[u]=a)}let o=!1;if(e)for(let[s,a]of Object.entries(e))s in i||(i[s]=a,o=!0);return n&&console.assert(o,"Unnecessary ElementsContext; not using any newly provided elements"),i}function Ll(r,e,t){if(!e?.hiddenFields?.length)return r;let n=t?t+".":"";return Object.fromEntries(Object.entries(r).filter(([i])=>!qr(n+i,e.hiddenFields)))}function Nl(r,e,t){if(!e?.readonlyFields?.length)return r;let n=Object.create(null),i=t?t+".":"";for(let[o,s]of Object.entries(r))qr(i+o,e.readonlyFields)?n[o]={...s,readonly:!0}:n[o]=s;return n}function qr(r,e){if(!e?.length)return!1;let t=r.split(".");for(let n=1;n<=t.length;n++){let i=t.slice(0,n).join(".");if(e.includes(i))return!0}return!1}function di(r){return r.type!==void 0&&r.type.length>0}function Fl(r,e,t,n){let i=Ve(r,e.path,{profileUrl:n});if(i){let o=t.typeSchema?.elements??t.elements;return i.some(s=>gr(s,e,t,o))??!1}return console.assert(!1,"getNestedProperty[%s] in isDiscriminatorComponentMatch missed",e.path),!1}function pi(r,e,t,n){if(r)for(let i of e){let o={value:r,type:i.typeSchema?.type??i.type?.[0].code};if(t.every(s=>Fl(o,s,i,i.typeSchema?.url??n)))return i.name}}var Qt=class{constructor(e,t,n){c(this,"rootSchema");c(this,"visitor");c(this,"elementsContextStack");c(this,"sliceAllowList");if(e.type===void 0)throw new Error("schema must include a type");this.rootSchema=e;let i=jr({parentContext:void 0,path:this.rootSchema.type,elements:n??this.rootSchema.elements,profileUrl:this.rootSchema.name===this.rootSchema.type?void 0:this.rootSchema.url});if(i===void 0)throw new Error("Could not create root elements context");this.elementsContextStack=[i],this.visitor=t}get elementsContext(){return this.elementsContextStack.at(-1)}crawlElement(e,t,n){this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema);let i=Object.fromEntries(Object.entries(this.elementsContext.elements).filter(([o])=>o.startsWith(t)));this.crawlElementsImpl(i,n),this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlSlice(e,t,n){let i=this.prepareSlices(n.slices,n);if(!ie(i.slices))throw new Error(`cannot crawl slice ${t.name} since it has no type information`);this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema),this.sliceAllowList=[t],this.crawlSliceImpl(i.slices[0],t.path,i),this.sliceAllowList=void 0,this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlResource(){this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema),this.crawlElementsImpl(this.rootSchema.elements,this.rootSchema.type),this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlElementsImpl(e,t){let n=Ul(e);for(let i of n)this.crawlElementNode(i,t)}crawlElementNode(e,t){let n=t+"."+e.key;this.visitor.onEnterElement&&this.visitor.onEnterElement(n,e.element,this.elementsContext);for(let i of e.children)this.crawlElementNode(i,t);ie(e.element?.slicing?.slices)&&this.crawlSlicingImpl(e.element.slicing,n),this.visitor.onExitElement&&this.visitor.onExitElement(n,e.element,this.elementsContext)}prepareSlices(e,t){let n=[];for(let o of e){if(!di(o))continue;let s=o.type.find(a=>ie(a.profile))?.profile?.[0];if(ie(s)){let a=Sn(s);a&&(o.typeSchema=a)}n.push(o)}return{...t,slices:n}}crawlSlicingImpl(e,t){let n=this.prepareSlices(e.slices,e);for(let i of n.slices)(this.sliceAllowList===void 0||this.sliceAllowList.includes(i))&&this.crawlSliceImpl(i,t,n)}crawlSliceImpl(e,t,n){let i=e.typeSchema;i&&this.visitor.onEnterSchema&&this.visitor.onEnterSchema(i),this.visitor.onEnterSlice&&this.visitor.onEnterSlice(t,e,n);let o,s=i?.elements??e.elements;ie(s)&&(o=jr({path:t,parentContext:this.elementsContext,elements:s})),o&&this.elementsContextStack.push(o),this.crawlElementsImpl(s,t),o&&this.elementsContextStack.pop(),this.visitor.onExitSlice&&this.visitor.onExitSlice(t,e,n),i&&this.visitor.onExitSchema&&this.visitor.onExitSchema(i)}};function Ul(r){let e=[];function t(o,s){return s.startsWith(o+".")}function n(o,s){for(let a of o.children)if(t(a.key,s.key)){n(a,s);return}o.children.push(s)}let i=Object.entries(r);i.sort((o,s)=>o[0].localeCompare(s[0]));for(let[o,s]of i){let a={key:o,element:s,children:[]},u=!1;for(let l of e)if(t(l.key,o)){n(l,a),u=!0;break}u||e.push(a)}return e}var $r="__sliceName";function Bl(r,e){let t=new Hr(r,r.resourceType,"resource");return new Qt(e,t).crawlResource(),t.getDefaultValue()}function Wl(r,e,t){for(let[n,i]of Object.entries(e)){if(t===void 0||t===n){zt(r,n,i,e);continue}let o=fe(t,n);o!==void 0&&zt(r,o,i,e)}return r}function ql(r,e,t,n){let i=new Hr([{[$r]:e.name}],e.path,"element");return new Qt(n,i).crawlSlice(r,e,t),i.getDefaultValue()[0]}var Hr=class{constructor(e,t,n){c(this,"rootValue");c(this,"schemaStack");c(this,"valueStack");this.schemaStack=[],this.valueStack=[],this.rootValue=Ee(e),this.valueStack.splice(0,this.valueStack.length,{type:n,path:t,values:[this.rootValue]})}get schema(){return this.schemaStack.at(-1)}get value(){return this.valueStack.at(-1)}onEnterSchema(e){this.schemaStack.push(e)}onExitSchema(){this.schemaStack.pop()}onEnterElement(e,t,n){let i=this.value.values,o=this.value.path,s=fe(o,e);if(s===void 0)throw new Error(`Expected ${e} to be prefixed by ${o}`);let a=[];for(let u of i){if(u===void 0)continue;let l=fe(n.path,o),p=Array.isArray(u)?u:[u];for(let g of p){jl(g,s,t,n.elements,l),zt(g,s,t,n.elements);let v=mi(g,s,n.elements,l);v!==void 0&&a.push(v)}}this.valueStack.push({type:"element",path:e,values:a})}onExitElement(e,t,n){if(!this.valueStack.pop())throw new Error("Expected value context to exist when exiting element");let o=fe(this.value.path,e);if(o===void 0)throw new Error(`Expected ${e} to be prefixed by ${this.value.path}`);let s=fe(n.path,this.value.path);for(let a of this.value.values){let u=mi(a,o,n.elements,s);if(Array.isArray(u))for(let l=u.length-1;l>=0;l--){let p=u[l];ie(p)||u.splice(l,1)}A(u)&&fi(a,void 0,o,t)}}onEnterSlice(e,t,n){let i=this.value.values,o=[];for(let s of i)if(s!==void 0){let a=Array.isArray(s)?s:[s],u=this.getMatchingSliceValues(a,t,n);o.push(u)}this.valueStack.push({type:"slice",path:e,values:o})}getMatchingSliceValues(e,t,n){let i=[];for(let o of e)(o[$r]??pi(o,[t],n.discriminator,this.schema.url))===t.name&&i.push(o);for(let o=i.length;o<t.min;o++)if(Cr(t.type[0].code)){let s=Object.create(null);i.push(s),e.push(s)}return i}onExitSlice(){let e=this.valueStack.pop();if(!e)throw new Error("Expected value context to exist in onExitSlice");for(let t of e.values)for(let n=t.length-1;n>=0;n--){let i=t[n];$r in i&&delete i[$r]}}getDefaultValue(){return this.rootValue}};function jl(r,e,t,n,i){let o=mi(r,e,n,i);t.min>0&&o===void 0&&Cr(t.type[0].code)&&(t.isArray?fi(r,[Object.create(null)],e,t):fi(r,Object.create(null),e,t))}function fi(r,e,t,n){if(t.includes("."))throw new Error("key cannot be nested");let i=t;if(t.includes("[x]")){let o=n.type[0].code;i=t.replace("[x]",L(o))}e===void 0?delete r[i]:r[i]=e}function mi(r,e,t,n){let i=e.split("."),o=r,s;for(let a=0;a<i.length;a++){let u=i[a];if(u.includes("[x]")){let l=(n?n+".":"")+i.slice(0,a+1).join("."),g=t[l].type[0].code;u=u.replace("[x]",L(g))}if(a===i.length-1){Array.isArray(o)?s=o.map(l=>l[u]):s=o[u];continue}if(Array.isArray(o))o=o.map(l=>l[u]);else if(C(o)){if(o[u]===void 0)return;o=o[u]}else return}return s}function zt(r,e,t,n){if(!(t.fixed||t.pattern))return r;if(Array.isArray(r))return r.map(a=>zt(a,e,t,n));r==null&&(r=Object.create(null));let i=r,o=e.split("."),s=i;for(let a=0;a<o.length;a++){let u=o[a];if(u.includes("[x]")){let p=n[o.slice(0,a+1).join(".")].type[0].code;u=u.replace("[x]",L(p))}if(a===o.length-1){let l=Array.isArray(s)?s:[s];for(let p of l)t.fixed?p[u]??=t.fixed.value:t.pattern&&(p[u]=as(p[u],t.pattern.value))}else{if(!(u in s)){let l=o.slice(0,a+1).join(".");s[u]=n[l].isArray?[Object.create(null)]:Object.create(null)}s=s[u]}}return i}function as(r,e){if(Array.isArray(e)&&(Array.isArray(r)||r===void 0))return(r?.length??0)>0?r:Ee(e);if(C(e)&&(C(r)&&!Array.isArray(r)||r===void 0)){let t=Ee(r)??Object.create(null);for(let n of Object.keys(e))t[n]=as(t[n],e[n]);return t}return r}function hi(r,e){if(!r.group)throw new f(P("ConceptMap does not specify a mapping group","ConceptMap.group"));let t=cs(e),n=$l(t,e.targetsystem?r.group.filter(o=>o.target===e.targetsystem):r.group),i=n.length>0;return{result:i,match:i?n:void 0}}function cs(r){let e=Object.create(null);if(r.code&&!r.coding&&!r.codeableConcept){if(!r.system)throw new f(P("System parameter must be provided with code"));e[r.system]=[r.code]}else if(r.coding&&!r.code&&!r.codeableConcept)r.coding.code&&(e[r.coding.system??""]=[r.coding.code]);else if(r.codeableConcept&&!r.code&&!r.coding)for(let{system:t,code:n}of r.codeableConcept.coding??y)n&&(e[t??""]=K(e[t??""],n));else throw r.code||r.coding||r.codeableConcept?new f(P("Ambiguous input: multiple source codings provided")):new f(P("Source Coding (system + code) must be specified"));return e}function $l(r,e){let t=[];for(let[n,i]of Object.entries(r))for(let o of e.filter(s=>(s.source??"")===n)){let s=o.element?.filter(a=>i.includes(a.code)).flatMap(a=>a.target?.map(u=>({equivalence:u.equivalence,concept:{system:o.target,code:u.code,display:u.display}}))??[]);s?.length||(s=Hl(i,o)),s&&t.push(...s)}return t}function Hl(r,e){switch(e.unmapped?.mode){case"provided":return r.map(t=>({equivalence:"equal",concept:{system:e.target,code:t}}));case"fixed":return[{equivalence:"equivalent",concept:{system:e.target,code:e.unmapped.code,display:e.unmapped.display}}];default:return}}var Gl=[..._t,"->","<<",">>","=="];function us(r){return new xe(r,Mt,Gl).tokenize()}var Ql={"-":"disjoint","==":"equal"},gi=class{constructor(e){c(this,"parser");c(this,"structureMap",{resourceType:"StructureMap",status:"active"});this.parser=e}parse(){for(;this.parser.hasMore();){let e=this.parser.peek()?.value;switch(e){case"map":this.parseMap();break;case"uses":this.parseUses();break;case"imports":this.parseImport();break;case"group":this.parseGroup();break;case"conceptmap":this.parseConceptMap();break;default:throw new Error(`Unexpected token: ${e}`)}}return this.structureMap}parseMap(){this.parser.consume("Symbol","map"),this.structureMap.url=this.parser.consume("String").value,this.parser.consume("="),this.structureMap.name=this.parser.consume().value}parseUses(){this.parser.consume("Symbol","uses");let e={};e.url=this.parser.consume("String").value,this.parser.peek()?.value==="alias"&&(this.parser.consume("Symbol","alias"),e.alias=this.parser.consume("Symbol").value),this.parser.consume("Symbol","as"),e.mode=this.parser.consume().value,this.structureMap.structure||(this.structureMap.structure=[]),this.structureMap.structure.push(e)}parseImport(){this.parser.consume("Symbol","imports"),this.structureMap.import||(this.structureMap.import=[]),this.structureMap.import.push(this.parser.consume("String").value)}parseGroup(){let e={};this.parser.consume("Symbol","group"),e.name=this.parser.consume("Symbol").value,e.input=this.parseParameters(),this.parser.peek()?.value==="extends"&&(this.parser.consume("Symbol","extends"),e.extends=this.parser.consume("Symbol").value),this.parser.peek()?.value==="<<"?(this.parser.consume("<<"),e.typeMode=this.parser.consume().value,this.parser.peek()?.value==="+"&&(this.parser.consume("+"),e.typeMode="type-and-types"),this.parser.consume(">>")):e.typeMode="none",e.rule=this.parseRules(),this.structureMap.group||(this.structureMap.group=[]),this.structureMap.group.push(e)}parseParameters(){let e=[];for(this.parser.consume("(");this.parser.hasMore()&&this.parser.peek()?.value!==")";)e.push(this.parseParameter()),this.parser.peek()?.value===","&&this.parser.consume(",");return this.parser.consume(")"),e}parseParameter(){let e={};return e.mode=this.parser.consume().value,e.name=this.parser.consume("Symbol").value,this.parser.peek()?.value===":"&&(this.parser.consume(":"),e.type=this.parser.consume("Symbol").value),e}parseRules(){let e=[];for(this.parser.consume("{");this.parser.hasMore()&&this.parser.peek()?.value!=="}";)e.push(this.parseRule());return this.parser.consume("}"),e}parseRule(){let e={source:this.parseRuleSources()};return this.parser.peek()?.value==="->"&&(this.parser.consume("->"),e.target=this.parseRuleTargets()),this.parser.peek()?.value==="then"&&(this.parser.consume("Symbol","then"),this.parser.peek()?.id==="{"?e.rule=this.parseRules():e.dependent=this.parseRuleDependents()),this.parser.peek()?.id==="String"?e.name=this.parser.consume().value:e.name=e.source?.[0]?.element,this.parser.consume(";"),e}parseRuleSources(){this.parser.hasMore()&&this.parser.peek()?.value==="for"&&this.parser.consume("Symbol","for");let e=[this.parseRuleSource()];for(;this.parser.hasMore()&&this.parser.peek()?.value===",";)this.parser.consume(","),e.push(this.parseRuleSource());return e}parseRuleSource(){let e={},n=this.parseRuleContext().split(".");if(e.context=n[0],e.element=n[1],this.parser.hasMore()&&this.parser.peek()?.value===":"&&(this.parser.consume(":"),e.type=this.parser.consume().value),this.parser.hasMore()&&this.parser.peek()?.value==="default"&&(this.parser.consume("Symbol","default"),e.defaultValueString=this.parser.consume("String").value),(this.parser.peek()?.value==="first"||this.parser.peek()?.value==="not_first"||this.parser.peek()?.value==="last"||this.parser.peek()?.value==="not_last"||this.parser.peek()?.value==="only_one")&&(e.listMode=this.parser.consume().value),this.parser.peek()?.value==="as"&&(this.parser.consume("Symbol","as"),e.variable=this.parser.consume().value),this.parser.peek()?.value==="log"&&(this.parser.consume("Symbol","log"),e.logMessage=this.parser.consume().value),this.parser.peek()?.value==="where"){this.parser.consume("Symbol","where");let i=this.parser.consumeAndParse(S.Arrow);e.condition=i.toString()}if(this.parser.peek()?.value==="check"){this.parser.consume("Symbol","check");let i=this.parser.consumeAndParse(S.Arrow);e.check=i.toString()}return e}parseRuleTargets(){let e=[this.parseRuleTarget()];for(;this.parser.hasMore()&&this.parser.peek()?.value===",";)this.parser.consume(","),e.push(this.parseRuleTarget());return e}parseRuleTarget(){let e={},n=this.parseRuleContext().split(".");return e.contextType="variable",e.context=n[0],e.element=n[1],this.parser.peek()?.value==="="&&(this.parser.consume("="),this.parseRuleTargetTransform(e)),this.parser.peek()?.value==="as"&&(this.parser.consume("Symbol","as"),e.variable=this.parser.consume().value),this.parser.peek()?.value==="share"&&(this.parser.consume("Symbol","share"),e.listMode=["share"],this.parser.consume("Symbol")),(this.parser.peek()?.value==="first"||this.parser.peek()?.value==="last"||this.parser.peek()?.value==="collate")&&(e.listMode=[this.parser.consume().value]),e}parseRuleTargetTransform(e){let t=this.parser.consumeAndParse(S.As);t instanceof X?(e.transform=t.name,e.parameter=t.args?.map(ls)):t instanceof $||t instanceof B?(e.transform="copy",e.parameter=[ls(t)]):(e.transform="evaluate",e.parameter=[{valueString:t.toString()}])}parseRuleContext(){let e=this.parser.consume().value;for(;this.parser.peek()?.value===".";)this.parser.consume("."),e+="."+this.parser.consume().value;return e}parseRuleDependents(){let e=this.parser.consumeAndParse(S.Arrow);return[{name:e.name,variable:e.args.map(t=>t.name)}]}parseConceptMap(){this.parser.consume("Symbol","conceptmap");let e={resourceType:"ConceptMap",status:"active",url:"#"+this.parser.consume("String").value};this.parser.consume("{");let t={},n=this.parser.peek()?.value;for(;n!=="}";)n==="prefix"?this.parseConceptMapPrefix(t):this.parseConceptMapRule(e,t),n=this.parser.peek()?.value;this.parser.consume("}"),this.structureMap.contained||(this.structureMap.contained=[]),this.structureMap.contained.push(e)}parseConceptMapPrefix(e){this.parser.consume("Symbol","prefix");let t=this.parser.consume().value;this.parser.consume("=");let n=this.parser.consume().value;e[t]=n}parseConceptMapRule(e,t){let n=this.parser.consume().value,i=t[n];this.parser.consume(":");let o=this.parser.consume().value,s=Ql[this.parser.consume().value],a=this.parser.consume().value,u=t[a];this.parser.consume(":");let l=this.parser.consume().value,p=e?.group?.find(g=>g.source===i&&g.target===u);p||(p={source:i,target:u,element:[]},e.group||(e.group=[]),e.group.push(p)),p.element||(p.element=[]),p.element.push({code:o,target:[{code:l,equivalence:s}]})}};function ls(r){if(r instanceof B)return{valueId:r.name};if(r instanceof $)return zl(r);throw new Error(`Unknown parameter atom type: ${r.constructor.name} (${r.toString()})`)}function zl(r){switch(r.value.type){case"boolean":return{valueBoolean:r.value.value};case"decimal":return{valueDecimal:r.value.value};case"integer":return{valueInteger:r.value.value};case"dateTime":case"string":return{valueString:r.value.value};default:throw new Error("Unknown target literal type: "+r.value.type)}}var Jl=Xe().registerInfix("->",{precedence:S.Arrow}).registerInfix(";",{precedence:S.Semicolon});function Kl(r){let e=Jl.construct(us(r));return e.removeComments(),new gi(e).parse()}var Gr=class{constructor(e=[]){c(this,"resources");this.resources=e}get(e,t){let n=[];for(let i of this.resources)i.resourceType===e&&i.url&&this.matchesUrl(i.url,t)&&n.push(i);return n}matchesUrl(e,t){if(t.includes("*")){let n=t.split("*");return e.startsWith(n[0])&&e.endsWith(n[1])}else return e===t}};function Yl(r,e,t=new Gr){return Xl({root:r,transformMaps:t},r,e)}function Xl(r,e,t){return Zl(r,e),ps(r,e),xi(r,e.group[0],t)}function Zl(r,e){let t=zr(r);if(t&&e.import)for(let n of e.import){let i=t.get("StructureMap",n);for(let o of i)ps(r,o)}}function ps(r,e){let t=zr(r);if(t&&e.contained)for(let n of e.contained)(n.resourceType==="StructureMap"||n.resourceType==="ConceptMap")&&t.resources.push(n);for(let n of e.group??y)Qr(r,n.name,{type:"StructureMapGroup",value:n})}function xi(r,e,t){let n=[],i=[];for(let l of e.input)l.mode==="source"&&n.push(l),l.mode==="target"&&i.push(l);if(n.length===0)throw new Error("Missing source definitions");if(i.length===0)throw new Error("Missing target definitions");if(t.length<n.length)throw new Error(`Not enough arguments (got ${t.length}, min ${n.length})`);if(t.length>n.length+i.length)throw new Error(`Too many arguments (got ${t.length}, max ${n.length+i.length})`);let o={},s=[],a=0;for(let l of n)Jt(o,l.name,t[a++]);for(let l of i){let p=t[a++]??{type:l.type??"BackboneElement",value:{}};Jt(o,l.name,p),s.push(p)}let u={root:r.root,parent:r,variables:o};for(let l of e.rule??y)fs(u,l);return s}function fs(r,e){e.source&&ms(r,e,0)}function ms(r,e,t){let n=e.source[t];for(let i of nd(r,n))Qr(r,"_",i),n.variable&&Qr(r,n.variable,i),t<e.source.length-1?ms(r,e,t+1):ed(r,e)}function ed(r,e){if(!td(r,e)){for(let t of e.target??y)hs(r,t);for(let t of e.rule??y)fs(r,t);for(let t of e.dependent??y)fd(r,t)}}function td(r,e){if(e.target?.length!==1||e.target[0].transform||e.rule||e.dependent)return!1;let t=we(r,"_");if(Array.isArray(t)&&(t=t[0]),!t)return!1;let n=rd(r,t);if(!n)return hs(r,{...e.target[0],transform:"copy",parameter:[{valueId:"_"}]}),!0;let i=e.target[0],o=we(r,i.context),s=o.value[i.element],a=ys(o,i.element)||Array.isArray(s),u={root:r.root,parent:r,variables:{}},l=xi(u,n,[t]);return gs(r,i,o,l,a,s),!0}function rd(r,e){let t=r;for(;t;){if(t.variables){for(let n of Object.values(t.variables))for(let i of yi(n))if(i.type==="StructureMapGroup"){let o=i.value;if((o.typeMode==="types"||o.typeMode==="type-and-types")&&o.input.length===2&&o.input[0].mode==="source"&&o.input[0].type===e.type&&o.input[1].mode==="target")return o}}t=t.parent}}function nd(r,e){let t=we(r,e.context);if(!t)return[];let n=e.element;if(!n)return[t];let i=w(n,[t]);if(!i||i.length===0)return[];if(e.condition&&!ds(t,{[e.variable]:i[0]},e.condition))return[];if(e.check&&!ds(t,{[e.variable]:i[0]},e.check))throw new Error("Check failed: "+e.check);return e.listMode&&(i=id(e,i)),i}function ds(r,e,t){return q(w(t,[r],e))}function id(r,e){switch(r.listMode){case"first":return[e[0]];case"not_first":return e.slice(1);case"last":return[e.at(-1)];case"not_last":return e.slice(0,e.length-1);case"only_one":if(e.length!==1)throw new Error("Expected only one value");break}return e}function hs(r,e){let t=we(r,e.context);if(!t)throw new Error("Target not found: "+e.context);let n=t.value[e.element],i,o=ys(t,e.element)||Array.isArray(n);if(e.transform)switch(e.transform){case"append":i=od(r,e);break;case"cast":i=sd(r,e);break;case"cc":i=ad(r,e);break;case"copy":i=cd(r,e);break;case"create":i=ud(r,e);break;case"evaluate":i=ld(r,e);break;case"translate":i=dd(r,e);break;case"truncate":i=pd(r,e);break;case"uuid":i=[{type:"string",value:Z()}];break;default:throw new Error(`Unsupported transform: ${e.transform}`)}else{let s=xs(t,e.element)?.type,a=s?.length===1?s[0].code:void 0;o||n===void 0?i=[a?{type:a,value:{}}:b({})]:i=[a?{type:a,value:n}:b(n)]}gs(r,e,t,i,o,n)}function gs(r,e,t,n,i,o){if(n.length!==0){if(i){o||(o=[],Jt(t.value,e.element,o));for(let s of n)o.push(s.value)}else Jt(t.value,e.element,n[0].value);e.variable&&Qr(r,e.variable,md(n))}}function ys(r,e){return xs(r,e)?.isArray}function xs(r,e){return He(r.type)?.elements?.[e]}function od(r,e){let t=H(r,e.parameter?.[0])?.[0]?.value,n=H(r,e.parameter?.[1])?.[0]?.value;return[{type:"string",value:(t??"").toString()+(n??"").toString()}]}function sd(r,e){let t=H(r,e.parameter?.[0])?.[0];return H(r,e.parameter?.[1])?.[0]?.value==="string"?[{type:"string",value:t?.value?.toString()}]:[t]}function ad(r,e){let t=e.parameter;if(t.length===2){let n=H(r,t[0])?.[0]?.value,i=H(r,t[1])?.[0]?.value;return[{type:"CodeableConcept",value:{coding:[{system:n,code:i}]}}]}else return[{type:"CodeableConcept",value:{text:H(r,t[0])?.[0]?.value}}]}function cd(r,e){return e.parameter.flatMap(t=>H(r,t))}function ud(r,e){let t={};return e.parameter&&e.parameter.length>0&&(t.resourceType=H(r,e.parameter?.[0])?.[0]?.value),[b(t)]}function ld(r,e){let n=H(r,e.parameter?.[0])[0].value;return w(n,[],vs(r))}function dd(r,e){let t=e.parameter.flatMap(u=>H(r,u)),n=t[0].value,i=t[1].value,s=zr(r)?.get("ConceptMap",i)[0];if(!s)throw new Error("ConceptMap not found: "+i);let a=hi(s,{system:s.group?.[0]?.source,code:n});return[b(a.match?.[0]?.concept?.code)]}function pd(r,e){let t=H(r,e.parameter?.[0])?.[0],n=H(r,e.parameter?.[1])?.[0]?.value;return t.type==="string"?[{type:"string",value:t.value.substring(0,n)}]:[t]}function fd(r,e){let t=we(r,e.name);if(!t)throw new Error("Dependent group not found: "+e.name);let n=e.variable,i=[];for(let s of n){let a=we(r,s);if(!a)throw new Error("Dependent variable not found: "+s);i.push(a)}let o={root:r.root,parent:r,variables:{}};xi(o,t.value,i)}function zr(r){if(r.transformMaps)return r.transformMaps;if(r.parent)return zr(r.parent)}function H(r,e){let n=_({type:"StructureMapGroupRuleTargetParameter",value:e},"value");if(!n)throw new Error("Missing target parameter: "+JSON.stringify(e));if(n=yi(n),n.length===1&&n[0].type==="id"){let i=we(r,n[0].value);if(!i)throw new Error("Variable not found: "+n[0].value);return yi(i)}return n}function we(r,e){let t=r.variables?.[e];if(t)return t;if(r.parent)return we(r.parent,e)}function vs(r,e={}){if(r.parent&&vs(r.parent,e),r.variables)for(let[t,n]of Object.entries(r.variables))e[t]=n,e["%"+t]=n;return e}function Qr(r,e,t){r.variables||(r.variables={}),Jt(r.variables,e,t)}function Jt(r,e,t){if(e==="__proto__"||e==="constructor"||e==="prototype")throw new Error("Invalid key: "+e);r[e]=t}function yi(r){return Array.isArray(r)?r:[r]}function md(r){return r.length===1?r[0]:r}var hd=" ".repeat(2),vi=class{constructor(e=hd,t=!0){c(this,"indent");c(this,"b");c(this,"indentCount");this.indent=e,this.b=[],this.indentCount=0,t&&(this.appendNoWrap("// SPDX-FileCopyrightText: Copyright Orangebot, Inc. and Medplum contributors"),this.appendNoWrap("// SPDX-License-Identifier: Apache-2.0"),this.appendNoWrap("/*"),this.appendNoWrap(" * This is a generated file"),this.appendNoWrap(" * Do not edit manually."),this.appendNoWrap(" */"),this.newLine())}newLine(){this.b.push(`
45
45
  `)}appendNoWrap(e){this.b.push(this.indent.repeat(this.indentCount)),this.b.push(e),this.b.push(`
46
46
  `)}append(e){let t=this.indent.repeat(this.indentCount)+e;if(t.length<160)this.b.push(t),this.b.push(`
47
- `);else{let n=!0;for(let i of xs(t,120-this.indent.length*this.indentCount))n?this.b.push(this.indent.repeat(this.indentCount)):this.b.push(this.indent.repeat(this.indentCount+2)),this.b.push(i.trim()),this.b.push(`
47
+ `);else{let n=!0;for(let i of Ts(t,120-this.indent.length*this.indentCount))n?this.b.push(this.indent.repeat(this.indentCount)):this.b.push(this.indent.repeat(this.indentCount+2)),this.b.push(i.trim()),this.b.push(`
48
48
  `),n=!1}}toString(){return this.b.join("").replaceAll(`
49
49
 
50
50
 
51
51
  `,`
52
52
 
53
- `)}};function xs(r,e){let t=[],n=[],i=0;return r.split(" ").forEach(function(o){i+o.length>e&&(t.push(n.join(" ").trim()),n=[],i=0),i+=o.length+1,n.push(o)}),n.length>0&&t.push(n.join(" ").trim()),t}var cd=[...Mt,"eq","ne","co"];function vs(r){return new ye(r,Dt,cd,{dateTimeLiterals:!0,symbolRegex:/[^\s\])]/}).tokenize()}var Jt=class{constructor(e,t,n){c(this,"path");c(this,"operator");c(this,"value");this.path=e,this.operator=t,this.value=n}},Kt=class{constructor(e){c(this,"child");this.child=e}},Yt=class{constructor(e,t,n){c(this,"keyword");c(this,"left");c(this,"right");this.keyword=e,this.left=t,this.right=n}};var ud={eq:m.EXACT,ne:m.NOT_EQUALS,co:m.CONTAINS,sw:m.STARTS_WITH,ew:void 0,gt:m.GREATER_THAN,lt:m.LESS_THAN,ge:m.GREATER_THAN_OR_EQUALS,le:m.LESS_THAN_OR_EQUALS,ap:m.APPROXIMATELY,sa:m.STARTS_AFTER,eb:m.ENDS_BEFORE,pr:m.PRESENT,po:void 0,ss:void 0,sb:void 0,in:m.IN,ni:m.NOT_IN,re:m.EQUALS,identifier:m.IDENTIFIER};function ld(r){let e=ud[r];if(!e)throw new f(C("Invalid operator: "+r));return e}var yi=class{constructor(e){c(this,"parser");this.parser=e}parse(){let e;this.parser.peek()?.value==="("?(this.parser.consume("("),e=this.parse(),this.parser.consume(")")):this.parser.peek()?.value==="not"?(this.parser.consume("Symbol","not"),this.parser.consume("("),e=new Kt(this.parse()),this.parser.consume(")")):e=new Jt(this.parser.consume("Symbol").value,ld(this.parser.consume("Symbol").value),this.parser.consume().value);let t=this.parser.peek()?.value;return t==="and"||t==="or"?(this.parser.consume("Symbol",t),new Yt(t,e,this.parse())):e}},dd=Ye();function pd(r){let e=dd.construct(vs(r));return e.removeComments(),new yi(e).parse()}var fd={AA:"AA",AE:"AE",AR:"AR",CA:"CA",CE:"CE",CR:"CR"},md={AA:"OK",AE:"Application Error",AR:"Application Reject",CA:"Commit Accept",CE:"Commit Error",CR:"Commit Reject"},xe=class{constructor(e="\r",t="|",n="^",i="~",o="\\",s="&"){c(this,"segmentSeparator");c(this,"fieldSeparator");c(this,"componentSeparator");c(this,"repetitionSeparator");c(this,"escapeCharacter");c(this,"subcomponentSeparator");this.segmentSeparator=e,this.fieldSeparator=t,this.componentSeparator=n,this.repetitionSeparator=i,this.escapeCharacter=o,this.subcomponentSeparator=s}getMsh1(){return this.fieldSeparator}getMsh2(){return this.componentSeparator+this.repetitionSeparator+this.escapeCharacter+this.subcomponentSeparator}},xi=class r{constructor(e,t=new xe){c(this,"context");c(this,"_segments");c(this,"segmentsByName");c(this,"cachedString");c(this,"allSegmentsParsed");this.context=t,this._segments=e,this.segmentsByName=Ts(e),this.allSegmentsParsed=e.every(n=>typeof n!="string"),this.bindSegments()}get segments(){if(!this.allSegmentsParsed){for(let e=0;e<this._segments.length;e++)typeof this._segments[e]=="string"&&this.parseSegment(e);this.allSegmentsParsed=!0}return this._segments}get header(){let e=this.parseSegment(0);if(!e)throw new Error("Can't get header before first segment added");return e}get(e){return this.getSegment(e)}getAll(e){return this.getAllSegments(e)}getSegment(e){if(typeof e=="number")return this.parseSegment(e);let t=this.segmentsByName.get(e);if(t?.length)return this.parseSegment(t[0])}getAllSegments(e){let t=this.segmentsByName.get(e);return t?t.map(n=>this.parseSegment(n)):[]}parseSegment(e){let t=this._segments[e];if(t===void 0)return;if(typeof t!="string")return t;let n=it.parse(t,this.context);return n.onModified=()=>{this.cachedString=void 0},this._segments[e]=n,n}toString(){return this.cachedString??=this._segments.map(e=>typeof e=="string"?e:e.toString()).join(this.context.segmentSeparator),this.cachedString}buildAck(e){let t=new Date,n=this.getSegment("MSH"),i=n?.getField(3)?.toString()??"",o=n?.getField(4)?.toString()??"",s=n?.getField(5)?.toString()??"",a=n?.getField(6)?.toString()??"",u=n?.getField(10)?.toString()??"",l=n?.getField(12)?.toString()??"2.5.1",p=e?.ackCode??"AA";return new r([new it(["MSH",this.context.getMsh2(),s,a,i,o,Ss(t),"",this.buildAckMessageType(n),t.getTime().toString(),"P",l],this.context),new it(["MSA",p,u,md[p]],this.context),...e?.errSegment?[e.errSegment]:[]])}buildAckMessageType(e){let t=e?.getField(9),n=t?.getComponent(2),i=t?.getComponent(3),o="ACK";return n&&i?o=`ACK^${n}^ACK`:n&&(o=`ACK^${n}`),o}static parse(e){if(!e.startsWith("MSH")){let i=new Error("Invalid HL7 message");throw i.type="entity.parse.failed",i}let t=new xe("\r",e.charAt(3),e.charAt(4),e.charAt(5),e.charAt(6),e.charAt(7)),n=new r(e.split(/[\r\n]+/),t);return n.cachedString=e,n}setSegment(e,t){if(t.name==="MSH"){if(typeof e=="number"){if(e!==0)return!1}else if(this.findSegmentIndexByName(e)!==0)return!1}else if(typeof e=="number"&&e===0&&t.name!=="MSH")return!1;if(typeof e=="number")return e>=this._segments.length?(this._segments.push(t),this.invalidateCache(),!0):(this._segments[e]=t,this.invalidateCache(),!0);let n=this.findSegmentIndexByName(e);return n===0&&t.name!=="MSH"?!1:n!==-1?(this._segments[n]=t,this.invalidateCache(),!0):!1}findSegmentIndexByName(e){return this.segmentsByName.get(e)?.[0]??-1}invalidateCache(){this.segmentsByName=Ts(this._segments),this.cachedString=void 0,this.bindSegments()}bindSegments(){let e=()=>{this.cachedString=void 0};for(let t of this._segments)typeof t!="string"&&(t.onModified=e)}};function Ts(r){let e=new Map;for(let t=0;t<r.length;t++){let n=r[t],i=typeof n=="string"?n.slice(0,3):n.name,o=e.get(i);o?o.push(t):e.set(i,[t])}return e}var it=class r{constructor(e,t=new xe){c(this,"context");c(this,"name");c(this,"_fields");c(this,"allFieldsParsed");c(this,"cachedString");c(this,"onModified");this.context=t,this._fields=e,this.allFieldsParsed=e.every(i=>typeof i!="string");let n=e[0];this.name=typeof n=="string"?n:n.components[0][0],this.bindFields()}get fields(){if(!this.allFieldsParsed){for(let e=0;e<this._fields.length;e++)typeof this._fields[e]=="string"&&this.parseField(e);this.allFieldsParsed=!0}return this._fields}get(e){return this.parseField(e)}getField(e){if(this.name==="MSH"){if(e===1)return new ae([[this.context.getMsh1()]],this.context);if(e===2)return new ae([[this.context.getMsh2()]],this.context);if(e>2)return this.parseField(e-1)}return this.parseField(e)}parseField(e){let t=this._fields[e];if(t===void 0)return;if(typeof t!="string")return t;let n=ae.parse(t,this.context);return n.onModified=()=>{this.cachedString=void 0,this.onModified?.()},this._fields[e]=n,n}getComponent(e,t,n,i=0){return this.getField(e)?.getComponent(t,n,i)??""}toString(){return this.cachedString??=this._fields.map(e=>typeof e=="string"?e:e.toString()).join(this.context.fieldSeparator),this.cachedString}static parse(e,t=new xe){let n=new r(e.split(t.fieldSeparator),t);return n.cachedString=e,n}setField(e,t){if(this.name==="MSH"){if(e===1||e===2)return!1;if(e>2){let n=e-1;for(;this._fields.length<=n;)this._fields.push(new ae([[""]],this.context));return this._fields[n]=typeof t=="string"?ae.parse(t,this.context):t,this.invalidateCache(),!0}}for(;this._fields.length<=e;)this._fields.push(new ae([[""]],this.context));return this._fields[e]=typeof t=="string"?ae.parse(t,this.context):t,this.invalidateCache(),!0}setComponent(e,t,n,i,o=0){let s=this.getField(e);return s?s.setComponent(t,n,i,o):!1}invalidateCache(){this.cachedString=void 0,this.bindFields(),this.onModified?.()}bindFields(){let e=()=>{this.cachedString=void 0,this.onModified?.()};for(let t of this._fields)typeof t!="string"&&(t.onModified=e)}},ae=class r{constructor(e,t=new xe){c(this,"context");c(this,"components");c(this,"onModified");c(this,"cachedString");this.context=t,this.components=e}get(e,t,n=0){return this.getComponent(e+1,t,n)}getComponent(e,t,n=0){let i=this.components[n][e-1]??"";return t!==void 0&&(i=i.split(this.context.subcomponentSeparator)[t]??""),i}toString(){return this.cachedString??=this.components.map(e=>e.join(this.context.componentSeparator)).join(this.context.repetitionSeparator),this.cachedString}static parse(e,t=new xe){let n=new r(e.split(t.repetitionSeparator).map(i=>i.split(t.componentSeparator)),t);return n.cachedString=e,n}setComponent(e,t,n,i=0){if(e<1)return!1;if(i>=this.components.length)for(;this.components.length<=i;)this.components.push([""]);if(n===void 0)this.components[i][e-1]=t;else{if(n<0)return!1;{let s=(this.components[i][e-1]||"").split(this.context.subcomponentSeparator);for(;s.length<=n;)s.push("");s[n]=t,this.components[i][e-1]=s.join(this.context.subcomponentSeparator)}}return this.invalidateCache(),!0}invalidateCache(){this.cachedString=void 0,this.onModified?.()}};function hd(r,e){if(!r)return;let t=Be(r.slice(0,4),0),n=Be(r.slice(4,6),1)-1,i=Be(r.slice(6,8),1),o=Be(r.slice(8,10),0),s=Be(r.slice(10,12),0),a=Be(r.slice(12,14),0),u=0;r.includes(".")&&(u=Be(r.slice(15,19),0));let l=new Date(Date.UTC(t,n,i,o,s,a,u)),p=gd(r,e?.tzOffset);return p!==0&&(l=new Date(l.getTime()-p)),l.toISOString()}function Be(r,e){let t=Number.parseInt(r,10);return Number.isNaN(t)?e:t}function gd(r,e){let t=e,n=r.indexOf("+");n!==-1&&(t=r.slice(n));let i=r.indexOf("-");if(i!==-1&&(t=r.slice(i)),!t)return 0;let o=t.startsWith("-")?-1:1;t=t.slice(1).replace(":","");let s=Number.parseInt(t.slice(0,2),10),a=Number.parseInt(t.slice(2,4),10);return o*(s*60*60*1e3+a*60*1e3)}function Ss(r){let e=r instanceof Date?r:new Date(r),n=e.toISOString().replaceAll(/[-:T]/g,"").replace(/(\.\d+)?Z$/,""),i=e.getUTCMilliseconds();return i>0&&(n+="."+i.toString()),n}var qe={NONE:0,ERROR:1,WARN:2,INFO:3,DEBUG:4},bs=["NONE","ERROR","WARN","INFO","DEBUG"],vi=class r{constructor(e,t={},n=qe.INFO,i={}){c(this,"write");c(this,"metadata");c(this,"options");c(this,"prefix");c(this,"level");this.write=e,this.metadata=t,this.level=n,this.options=i,i?.prefix&&(this.prefix=i.prefix),this.error=this.error.bind(this),this.warn=this.warn.bind(this),this.info=this.info.bind(this),this.debug=this.debug.bind(this),this.log=this.log.bind(this)}clone(e){let t=this.getLoggerConfig(),n=e?{...t,override:e,options:{...t.options,...e.options}}:t;return new r(n.write,n.metadata,n.level,n.options)}getLoggerConfig(){let{write:e,metadata:t,level:n,options:i}=this;return{write:e,metadata:t,level:n,options:i}}error(e,t){this.log(qe.ERROR,e,t)}warn(e,t){this.log(qe.WARN,e,t)}info(e,t){this.log(qe.INFO,e,t)}debug(e,t){this.log(qe.DEBUG,e,t)}log(e,t,n){if(e>this.level)return;let i;if(or(n))i=Xt(n);else if(n){i={...n};for(let[o,s]of Object.entries(i))s instanceof Error&&(i[o]=Xt(s))}this.write(JSON.stringify({level:bs[e],timestamp:new Date().toISOString(),msg:this.prefix?`${this.prefix}${t}`:t,...i,...this.metadata}))}};function yd(r){let e=qe[r.toUpperCase()];if(e===void 0)throw new Error(`Invalid log level: ${r}`);return e}function Xt(r,e=0,t=10){if(e>=t)return{error:"Max error depth reached"};let n={error:r.toString(),stack:r.stack?.split(`
54
- `)};r.name&&r.name!=="Error"&&(n.name=r.name),r.message&&(n.message=r.message),"cause"in r&&r.cause!==void 0&&(r.cause instanceof Error?n.cause=Xt(r.cause,e+1,t):n.cause=r.cause);let i=Object.getOwnPropertyNames(r).filter(o=>!["name","message","stack","cause"].includes(o));for(let o of i)try{let s=r[o];s instanceof Error?n[o]=Xt(s,e+1,t):n[o]=s}catch{}return n}var Qr=`${at}/fhir/StructureDefinition/patient-preferredPharmacy`,bi="https://medplum.com/fhir/CodeSystem/pharmacy-preference-type",Gr="primary",Ei="preferred";function Ti(r){let e=r.extension?.find(t=>t.url==="pharmacy");return e?.valueReference?w(e.valueReference):void 0}function Si(r){return r.url===Qr&&!!r.extension}function xd(r,e){let t=r.extension?.find(n=>n.url==="type");t&&(t.valueCodeableConcept={coding:[{system:e,code:Ei,display:"Preferred Pharmacy"}]})}function vd(r,e){if(!r.extension)return[];let t=[];for(let n of r.extension){if(n.url!==Qr||!n.extension)continue;let i=n.extension.find(s=>s.url==="pharmacy"),o=n.extension.find(s=>s.url==="type");if(i?.valueReference){let s=e?o?.valueCodeableConcept?.coding?.some(a=>a.system===e&&a.code===Gr)??!1:o?.valueCodeableConcept?.coding?.some(a=>a.code===Gr)??!1;t.push({organizationRef:i.valueReference,isPrimary:s})}}return t}function Es(r,e,t=bi){return{url:Qr,extension:[{url:"pharmacy",valueReference:r},{url:"type",valueCodeableConcept:{coding:[{system:t,code:e?Gr:Ei,display:e?"Primary Pharmacy":"Preferred Pharmacy"}]}}]}}function Td(r,e,t,n=bi){r.extension??=[];let i=w(e);if(t)for(let a of r.extension)Si(a)&&Ti(a)!==i&&xd(a,n);let o=r.extension.findIndex(a=>Si(a)&&Ti(a)===i),s=Es(e,t,n);return o>=0?r.extension[o]=s:r.extension.push(s),r}function Sd(r,e){if(!r.extension)return r;let t=w(e);return r.extension=r.extension.filter(n=>Si(n)?Ti(n)!==t:!0),r}function bd(r){if(!Array.isArray(r))return!1;if(r.length>0){let e=r[0];return typeof e=="object"&&e!==null&&e.resourceType==="Organization"}return!0}function Ed(r){if(typeof r!="object"||r===null)return!1;let e=r;return typeof e.success=="boolean"&&typeof e.message=="string"}function Rd(r){if(!r)throw new f(v("Resource type is null"));if(!ut(r))throw new f(v("Unknown resource type"))}function Ri(r,e,t){r===null?t.push(b(e,"Invalid null value")):Array.isArray(r)?Cd(r,e,t):typeof r=="object"&&Pd(r,e,t)}function Cd(r,e,t){for(let n=0;n<r.length;n++)r[n]===void 0?t.push(b(`${e}[${n}]`,"Invalid undefined value")):Ri(r[n],`${e}[${n}]`,t)}function Pd(r,e,t){for(let[n,i]of Object.entries(r))Ri(i,`${e}${e?".":""}${n}`,t)}function Ad(r){return{resourceType:"SearchParameter",code:r.code+":identifier",base:r.base,type:"token",expression:`(${r.expression}).identifier`}}function Ci(r){return r.match(/^\((.+)\)\.identifier$/)?.[1]}function Pi(r,e){return new he(r,new K(e,new U("identifier")))}var ce={BOOLEAN:"BOOLEAN",NUMBER:"NUMBER",QUANTITY:"QUANTITY",TEXT:"TEXT",REFERENCE:"REFERENCE",CANONICAL:"CANONICAL",DATE:"DATE",DATETIME:"DATETIME",PERIOD:"PERIOD",UUID:"UUID"};function wd(r,e){return W.types[r]?.searchParamsDetails?.[e.code]??Id(r,e)}function Od(r,e,t){let n=W.types[r];n||(n={},W.types[r]=n),n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=t}function Id(r,e){let t=e.code,n=e.expression,i=wi(r,n),o={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let u of i){let l=zr(u),p=Fn(()=>l.join("."));l.length===1&&l[0]instanceof E&&l[0].operator!=="."?o.propertyTypes.add("boolean"):e.code.endsWith(":identifier")?o.propertyTypes.add("Identifier"):p().endsWith("extension.value.code")||p().endsWith("extension.value.coding.code")?(o.array=!0,o.propertyTypes.clear(),o.propertyTypes.add("code")):Rs(o,l,r,1),p().endsWith("extension.valueDateTime")&&(o.array=!1,o.propertyTypes.clear(),o.propertyTypes.add("dateTime"))}let s;if(e.code.endsWith(":identifier")){let u=Ci(n);if(u===void 0)throw new Error(`Unexpected expression for derived identifier search parameter: ${n}`);let l=Ai(r,u);s=Pi(n,l)}else s=Ai(r,n);let a={type:Dd(e,o.propertyTypes),elementDefinitions:o.elementDefinitions.map(u=>({...u,type:u.type?.filter(l=>o.propertyTypes.has(l.code))})).filter(u=>u.type&&u.type.length>0),parsedExpression:s,array:o.array};return Od(r,t,a),a}function Rs(r,e,t,n){let i=e[n];if(i instanceof ge){r.propertyTypes.add(i.right.toString());return}if(i instanceof Y){kd(r,i);return}let o=i.toString(),s=ht(t,o);if(!s)throw new Error(`Element definition not found for ${t} ${o}`);let a=!1,u=n+1;u<e.length&&e[u]instanceof Ce&&(a=!0,u++);let l=e[u];if(s.isArray&&!a&&(r.array=!0),u===e.length-1){if(l instanceof ge){r.elementDefinitions.push(s),r.propertyTypes.add(l.right.toString());return}if(l instanceof Y&&l.name==="ofType"){r.elementDefinitions.push(s),r.propertyTypes.add(l.args[0].toString());return}}if(u>=e.length){r.elementDefinitions.push(s);for(let p of s.type??y)r.propertyTypes.add(p.code);return}for(let p of s.type??y){let g=p.code;Vd(g)&&(g=s.type[0].code),Rs(r,e,g,u)}}function kd(r,e){if(e.name==="as"){r.propertyTypes.add(e.args[0].toString());return}if(e.name==="ofType"){r.propertyTypes.add(e.args[0].toString());return}if(e.name==="resolve"){r.propertyTypes.add("string");return}if(e.name==="where"&&e.args[0]instanceof Re){r.propertyTypes.add(e.args[0].right.toString());return}throw new Error(`Unhandled FHIRPath function: ${e.name}`)}function Vd(r){return r==="Element"||r==="BackboneElement"}function Dd(r,e){switch(r.type){case"date":return e.size===1&&e.has(d.date)?ce.DATE:ce.DATETIME;case"number":return ce.NUMBER;case"quantity":return ce.QUANTITY;case"reference":return e.has(d.canonical)?ce.CANONICAL:ce.REFERENCE;case"token":return e.size===1&&e.has(d.boolean)?ce.BOOLEAN:ce.TEXT;default:return ce.TEXT}}function wi(r,e){let t=[],n=_t(e);return Jr(r,n.child,t),t}function Md(r,e){let t=wi(r,e);if(t.length!==0)return t.map(n=>n.toString()).join(" | ")}function Ai(r,e){let t=[],n=_t(e);if(Jr(r,n.child,t),t.length===0)return n;let i=t[0];for(let o=1;o<t.length;o++)i=new Ee(i,t[o]);return new he("<original-not-available>",i)}function Jr(r,e,t){e instanceof Ee?(Jr(r,e.left,t),Jr(r,e.right,t)):e.toString().includes(r+".")&&t.push(e)}function zr(r){if(r instanceof ge||r instanceof Ce)return[zr(r.left),r].flat();if(r instanceof E&&r.operator!==".")return[r];if(r instanceof K)return[zr(r.left),zr(r.right)].flat();if(r instanceof Y){if(r.name==="where"&&!(r.args[0]instanceof Re))return[];if(r.name==="last")return[]}return[r]}function _d(r){let e=[];return new Promise((t,n)=>{r.on("data",i=>e.push(Buffer.from(i))),r.on("error",i=>{r.destroy(),n(i)}),r.on("end",()=>{t(Buffer.concat(e))}),r.on("close",()=>{r.destroy()})})}function Ld(r,e){let t=[];for(let n of e)t.push(...Fd(r,n));return t}function Fd(r,e){if(!r.resource)throw new Error("Resource type is required");if(r.resource!==e.resourceType)return[];let t={};for(let i of r.constant??y){let o={type:"ViewDefinitionConstant",value:i};t["%"+i.name]=M(o,"value")}let n=S(e);for(let i of r.where??y){let o=A(i.path,[n],t);if(o.length!==1)return[];if(o[0].type!=="boolean")throw new Error("WHERE clause must evaluate to a boolean");if(!o[0].value)return[]}return Oi(r,n,t)}function Oi(r,e,t){let n=[],i;r.forEach?i=A(r.forEach,[e],t):r.forEachOrNull?i=A(r.forEachOrNull,[e],t):i=[e];for(let o of i){let s=[];for(let a of r.column??y){let u=A(a.path,[o],t),l;if(u.length===0)l={[a.name]:null};else if(a.collection)l={[a.name]:u.map(p=>p.value)};else if(u.length===1)l={[a.name]:u[0].value};else throw new Error("Multiple values found but not expected for column");s.push([l])}for(let a of r.select??y){let u=Oi(a,o,t);s.push(u)}if(r.unionAll){let a=[];for(let u of r.unionAll)for(let l of Oi(u,o,t))a.push(l);s.push(a)}n.push(...Nd(s))}if(i.length===0&&r.forEachOrNull){let o={};for(let s of r.column??y)o[s.name]=null;n.push(o)}return n}function Nd(r){if(r.length===0)return[];let e=r[0];for(let t=1;t<r.length;t++)e=Ud(e,r[t]);return e}function Ud(r,e){let t=[];for(let n of r)for(let i of e)t.push(Bd(n,i));return t}function Bd(r,e){let t={};return Object.assign(t,r),Object.assign(t,e),t}var Cs="https://meta.medplum.com/releases",Kr=new Map;function qd(){Kr.clear()}function Ps(r){let e=r;if(!e.tag_name)throw new Error("Manifest missing tag_name");let t=e.assets;if(!t?.length)throw new Error("Manifest missing assets list");for(let n of t){if(!n.browser_download_url)throw new Error("Asset missing browser download URL");if(!n.name)throw new Error("Asset missing name")}}async function Yr(r,e,t){let n=Kr.get(e??"latest");if(!n){let i=e?`v${e}`:"latest",o=new URL(`${Cs}/${i}.json`);if(o.searchParams.set("a",r),o.searchParams.set("c",Fr),t)for(let[u,l]of Object.entries(t))o.searchParams.set(u,l);let s=await fetch(o.toString());if(s.status!==200){let u;try{u=(await s.json()).message}catch(l){console.error(`Failed to parse message from body: ${Oe(l)}`)}throw new Error(`Received status code ${s.status} while fetching manifest for version '${e??"latest"}'. Message: ${u}`)}let a=await s.json();Ps(a),n=a,Kr.set(e??"latest",n),e||Kr.set(n.tag_name.slice(1),n)}return n}function As(r){return/^\d+\.\d+\.\d+(-[0-9a-z]{7})?$/.test(r)}async function Wd(r,e){if(!As(e))return!1;try{await Yr(r,e)}catch{return!1}return!0}async function jd(r){let e=await Yr(r);if(!e.tag_name.startsWith("v"))throw new Error(`Invalid release name found. Release tag '${e.tag_name}' did not start with 'v'`);return e.tag_name.slice(1)}async function $d(r,e){try{let t=Fr.split("-")[0],i=(await Yr(r,void 0,e)).tag_name.slice(1);t!==i&&console.warn(`A new version (v${i}) of Medplum is available. Your current version (v${t}) may be missing important updates and bug fixes.`)}catch(t){console.warn(`Failed to check for newer version: ${Oe(t)}`)}}0&&(module.exports={AccessPolicyInteraction,AckCode,AndAtom,ArithmeticOperatorAtom,AsAtom,CPT,ClientStorage,ConcatAtom,ContainsAtom,ContentType,DEFAULT_ACCEPT,DEFAULT_MAX_SEARCH_COUNT,DEFAULT_SEARCH_COUNT,DataSampler,DotAtom,EMPTY,EmptySetAtom,EqualsAtom,EquivalentAtom,EventTarget,ExternalSecretSystems,FHIRCAST_EVENT_NAMES,FHIRCAST_EVENT_RESOURCES,FHIRCAST_EVENT_VERSION_REQUIRED,FHIRCAST_RESOURCE_TYPES,FhirFilterComparison,FhirFilterConnective,FhirFilterNegation,FhirPathAtom,FhircastConnection,FileBuilder,FunctionAtom,HTTP_HL7_ORG,HTTP_TERMINOLOGY_HL7_ORG,Hl7Context,Hl7Field,Hl7Message,Hl7Segment,ICD10,ImpliesAtom,InAtom,IndexerAtom,InfixOperatorAtom,IsAtom,LOINC,LRUCache,LiteralAtom,LogLevel,LogLevelNames,Logger,MEDPLUM_CLI_CLIENT_ID,MEDPLUM_RELEASES_URL,MEDPLUM_VERSION,MedplumClient,MedplumKeyValueClient,MemoryStorage,MockAsyncClientStorage,NDC,NOOP,NotEqualsAtom,NotEquivalentAtom,OAuthClientAssertionType,OAuthGrantType,OAuthSigningAlgorithm,OAuthTokenAuthMethod,OAuthTokenType,OperationOutcomeError,Operator,OperatorPrecedence,OrAtom,PATIENT_PREFERRED_PHARMACY_URL,PHARMACY_PREFERENCE_TYPE_SYSTEM,PHARMACY_TYPE_PREFERRED,PHARMACY_TYPE_PRIMARY,Parser,ParserBuilder,PrefixOperatorAtom,PropertyType,RXNORM,ReadablePromise,ReconnectingWebSocket,ReturnAckCategory,SNOMED,SearchParameterType,SubscriptionEmitter,SubscriptionManager,SymbolAtom,Tokenizer,TransformMapCollection,TypedEventTarget,UCUM,UnaryOperatorAtom,UnionAtom,VALID_HOSTNAME_REGEX,XorAtom,accepted,accessPolicySupportsInteraction,addPreferredPharmacyToPatient,addProfileToResource,allOk,append,applyDefaultValuesToElement,applyDefaultValuesToResource,applyFixedOrPatternValue,arrayBufferToBase64,arrayBufferToHex,arrayify,assert,assertContextVersionOptional,assertOk,assertReleaseManifest,badRequest,booleanToTypedValue,buildCdsRequest,buildElementsContext,buildTypeName,businessRule,calculateAge,calculateAgeString,canReadResourceType,canWriteResource,canWriteResourceType,capitalize,checkForNull,checkIfValidMedplumVersion,clearReleaseCache,codeableConceptMatchesToken,codingMatchesToken,compressElement,concatUrls,conceptMapTranslate,conflict,contentTooLarge,convertContainedResourcesToBundle,convertToSearchableDates,convertToSearchableNumbers,convertToSearchableQuantities,convertToSearchableReferences,convertToSearchableStrings,convertToSearchableTokens,convertToSearchableUris,convertToTransactionBundle,crawlTypedValue,crawlTypedValueAsync,createConstraintIssue,createFhircastMessagePayload,createOperationOutcomeIssue,createPreferredPharmacyExtension,createProcessingIssue,createReference,createStructureIssue,created,decodeBase64,decodeBase64Url,deepClone,deepEquals,deepIncludes,deriveIdentifierSearchParameter,encodeBase64,encodeBase64Url,encryptSHA256,ensureNoLeadingSlash,ensureTrailingSlash,escapeHtml,evalFhirPath,evalFhirPathTyped,evalSqlOnFhir,expandSampledData,expandSampledObservation,extractAccountReferences,fetchLatestVersionString,fetchVersionManifest,fhirPathArrayEquals,fhirPathArrayEquivalent,fhirPathArrayNotEquals,fhirPathEquals,fhirPathEquivalent,fhirPathIs,fhirPathNot,fhirTypeToJsType,findCodeBySystem,findObservationInterval,findObservationReferenceRange,findObservationReferenceRanges,findResourceByCode,findResourceInBundle,flatMapFilter,forbidden,formatAddress,formatCodeableConcept,formatCoding,formatDate,formatDateTime,formatFamilyName,formatGivenName,formatHl7DateTime,formatHumanName,formatMoney,formatObservationValue,formatPeriod,formatQuantity,formatRange,formatReferenceString,formatSearchQuery,formatTime,formatTiming,formatWallTime,generateId,getAllDataTypes,getAllQuestionnaireAnswers,getBuffer,getCodeBySystem,getDataType,getDateProperty,getDefaultValuesForNewSliceEntry,getDisplayString,getElementDefinition,getElementDefinitionFromElements,getElementDefinitionTypeName,getExpressionForResourceType,getExpressionsForResourceType,getExtension,getExtensionValue,getIdentifier,getImageSrc,getInnerDerivedIdentifierExpression,getNestedProperty,getOutcomeRedirectUrl,getParsedDerivedIdentifierExpression,getParsedExpressionForResourceType,getPathDifference,getPathDisplayName,getPreferredPharmaciesFromPatient,getPropertyDisplayName,getQueryString,getQuestionnaireAnswers,getRandomString,getReferenceString,getResourceTypes,getSearchParameter,getSearchParameterDetails,getSearchParameters,getStatus,getTypedPropertyValue,getTypedPropertyValueWithPath,getTypedPropertyValueWithSchema,getTypedPropertyValueWithoutSchema,getValueSliceName,getWebSocketUrl,getWindow,globalSchema,gone,indexConceptMapCodings,indexDefaultSearchParameters,indexSearchParameter,indexSearchParameterBundle,indexStructureDefinitionBundle,inflateBaseSchema,inflateElement,initFhirPathParserBuilder,invalidSearchOperator,isAccepted,isAddPharmacyResponse,isBrowserEnvironment,isCodeableConcept,isCoding,isCompletedSubscriptionRequest,isComplexTypeCode,isConflict,isContextVersionRequired,isCreated,isDataTypeLoaded,isDateString,isDateTimeString,isDefined,isEmpty,isError,isFhirCriteriaMet,isFhircastResourceType,isGone,isJwt,isLowerCase,isMedplumAccessToken,isNodeEnvironment,isNotFound,isObject,isOk,isOperationOutcome,isOrganizationArray,isPeriod,isPopulated,isPrimitiveType,isProfileLoaded,isProfileResource,isQuantity,isQuantityEquivalent,isRedirect,isReference,isResource,isResourceType,isResourceTypeSchema,isResourceWithId,isSliceDefinitionWithTypes,isString,isStringArray,isTextObject,isTypedValue,isUUID,isUnauthenticated,isValidDate,isValidHostname,isValidMedplumSemver,lazy,loadDataType,locationUtils,mapByIdentifier,matchDiscriminant,matchesRange,matchesSearchRequest,multipleMatches,normalizeArrayBufferView,normalizeCreateBinaryOptions,normalizeCreatePdfOptions,normalizeErrorString,normalizeOperationOutcome,notFound,notModified,operationOutcomeIssueToString,operationOutcomeToString,parseFhirPath,parseFilterParameter,parseHl7DateTime,parseJWTPayload,parseLogLevel,parseMappingLanguage,parseParameter,parseReference,parseSearchRequest,parseStructureDefinition,parseXFhirQuery,pathToJSONPointer,preciseEquals,preciseGreaterThan,preciseGreaterThanOrEquals,preciseLessThan,preciseLessThanOrEquals,preciseRound,preconditionFailed,projectAdminResourceTypes,protectedResourceTypes,readInteractions,redirect,redirectOk,removeDuplicates,removePreferredPharmacyFromPatient,removeProfileFromResource,reorderBundle,replaceQueryVariables,resolveId,resourceMatchesSubscriptionCriteria,satisfiedAccessPolicy,serializeError,serializeFhircastSubscriptionRequest,serverError,serverTimeout,setCodeBySystem,setIdentifier,singleton,singularize,sleep,sortStringArray,splitN,splitSearchOnComma,streamToBuffer,stringify,stringifyTypedValue,structureMapTransform,subsetResource,summarizeObservations,toJsBoolean,toPeriod,toTypedValue,tooManyRequests,trimTrailingEmptyElements,tryGetDataType,tryGetJwtExpiration,tryGetProfile,typedValueToString,unauthorized,unauthorizedTokenAudience,unauthorizedTokenExpired,unsupportedMediaType,validateFhircastSubscriptionRequest,validateResource,validateResourceType,validateTypedValue,validationError,validationRegexes,warnIfNewerVersionAvailable,wordWrap});
53
+ `)}};function Ts(r,e){let t=[],n=[],i=0;return r.split(" ").forEach(function(o){i+o.length>e&&(t.push(n.join(" ").trim()),n=[],i=0),i+=o.length+1,n.push(o)}),n.length>0&&t.push(n.join(" ").trim()),t}var gd=[..._t,"eq","ne","co"];function Ss(r){return new xe(r,Mt,gd,{dateTimeLiterals:!0,symbolRegex:/[^\s\])]/}).tokenize()}var Kt=class{constructor(e,t,n){c(this,"path");c(this,"operator");c(this,"value");this.path=e,this.operator=t,this.value=n}},Yt=class{constructor(e){c(this,"child");this.child=e}},Xt=class{constructor(e,t,n){c(this,"keyword");c(this,"left");c(this,"right");this.keyword=e,this.left=t,this.right=n}};var yd={eq:m.EXACT,ne:m.NOT_EQUALS,co:m.CONTAINS,sw:m.STARTS_WITH,ew:void 0,gt:m.GREATER_THAN,lt:m.LESS_THAN,ge:m.GREATER_THAN_OR_EQUALS,le:m.LESS_THAN_OR_EQUALS,ap:m.APPROXIMATELY,sa:m.STARTS_AFTER,eb:m.ENDS_BEFORE,pr:m.PRESENT,po:void 0,ss:void 0,sb:void 0,in:m.IN,ni:m.NOT_IN,re:m.EQUALS,identifier:m.IDENTIFIER};function xd(r){let e=yd[r];if(!e)throw new f(P("Invalid operator: "+r));return e}var Ti=class{constructor(e){c(this,"parser");this.parser=e}parse(){let e;this.parser.peek()?.value==="("?(this.parser.consume("("),e=this.parse(),this.parser.consume(")")):this.parser.peek()?.value==="not"?(this.parser.consume("Symbol","not"),this.parser.consume("("),e=new Yt(this.parse()),this.parser.consume(")")):e=new Kt(this.parser.consume("Symbol").value,xd(this.parser.consume("Symbol").value),this.parser.consume().value);let t=this.parser.peek()?.value;return t==="and"||t==="or"?(this.parser.consume("Symbol",t),new Xt(t,e,this.parse())):e}},vd=Xe();function Td(r){let e=vd.construct(Ss(r));return e.removeComments(),new Ti(e).parse()}var Sd={AA:"AA",AE:"AE",AR:"AR",CA:"CA",CE:"CE",CR:"CR"},bd={AA:"OK",AE:"Application Error",AR:"Application Reject",CA:"Commit Accept",CE:"Commit Error",CR:"Commit Reject"},ve=class{constructor(e="\r",t="|",n="^",i="~",o="\\",s="&"){c(this,"segmentSeparator");c(this,"fieldSeparator");c(this,"componentSeparator");c(this,"repetitionSeparator");c(this,"escapeCharacter");c(this,"subcomponentSeparator");this.segmentSeparator=e,this.fieldSeparator=t,this.componentSeparator=n,this.repetitionSeparator=i,this.escapeCharacter=o,this.subcomponentSeparator=s}getMsh1(){return this.fieldSeparator}getMsh2(){return this.componentSeparator+this.repetitionSeparator+this.escapeCharacter+this.subcomponentSeparator}},Si=class r{constructor(e,t=new ve){c(this,"context");c(this,"_segments");c(this,"segmentsByName");c(this,"cachedString");c(this,"allSegmentsParsed");this.context=t,this._segments=e,this.segmentsByName=bs(e),this.allSegmentsParsed=e.every(n=>typeof n!="string"),this.bindSegments()}get segments(){if(!this.allSegmentsParsed){for(let e=0;e<this._segments.length;e++)typeof this._segments[e]=="string"&&this.parseSegment(e);this.allSegmentsParsed=!0}return this._segments}get header(){let e=this.parseSegment(0);if(!e)throw new Error("Can't get header before first segment added");return e}get(e){return this.getSegment(e)}getAll(e){return this.getAllSegments(e)}getSegment(e){if(typeof e=="number")return this.parseSegment(e);let t=this.segmentsByName.get(e);if(t?.length)return this.parseSegment(t[0])}getAllSegments(e){let t=this.segmentsByName.get(e);return t?t.map(n=>this.parseSegment(n)):[]}parseSegment(e){let t=this._segments[e];if(t===void 0)return;if(typeof t!="string")return t;let n=ot.parse(t,this.context);return n.onModified=()=>{this.cachedString=void 0},this._segments[e]=n,n}toString(){return this.cachedString??=this._segments.map(e=>typeof e=="string"?e:e.toString()).join(this.context.segmentSeparator),this.cachedString}buildAck(e){let t=new Date,n=this.getSegment("MSH"),i=n?.getField(3)?.toString()??"",o=n?.getField(4)?.toString()??"",s=n?.getField(5)?.toString()??"",a=n?.getField(6)?.toString()??"",u=n?.getField(10)?.toString()??"",l=n?.getField(12)?.toString()??"2.5.1",p=e?.ackCode??"AA";return new r([new ot(["MSH",this.context.getMsh2(),s,a,i,o,Es(t),"",this.buildAckMessageType(n),t.getTime().toString(),"P",l],this.context),new ot(["MSA",p,u,bd[p]],this.context),...e?.errSegment?[e.errSegment]:[]])}buildAckMessageType(e){let t=e?.getField(9),n=t?.getComponent(2),i=t?.getComponent(3),o="ACK";return n&&i?o=`ACK^${n}^ACK`:n&&(o=`ACK^${n}`),o}static parse(e){if(!e.startsWith("MSH")){let i=new Error("Invalid HL7 message");throw i.type="entity.parse.failed",i}let t=new ve("\r",e.charAt(3),e.charAt(4),e.charAt(5),e.charAt(6),e.charAt(7)),n=new r(e.split(/[\r\n]+/),t);return n.cachedString=e,n}setSegment(e,t){if(t.name==="MSH"){if(typeof e=="number"){if(e!==0)return!1}else if(this.findSegmentIndexByName(e)!==0)return!1}else if(typeof e=="number"&&e===0&&t.name!=="MSH")return!1;if(typeof e=="number")return e>=this._segments.length?(this._segments.push(t),this.invalidateCache(),!0):(this._segments[e]=t,this.invalidateCache(),!0);let n=this.findSegmentIndexByName(e);return n===0&&t.name!=="MSH"?!1:n!==-1?(this._segments[n]=t,this.invalidateCache(),!0):!1}findSegmentIndexByName(e){return this.segmentsByName.get(e)?.[0]??-1}invalidateCache(){this.segmentsByName=bs(this._segments),this.cachedString=void 0,this.bindSegments()}bindSegments(){let e=()=>{this.cachedString=void 0};for(let t of this._segments)typeof t!="string"&&(t.onModified=e)}};function bs(r){let e=new Map;for(let t=0;t<r.length;t++){let n=r[t],i=typeof n=="string"?n.slice(0,3):n.name,o=e.get(i);o?o.push(t):e.set(i,[t])}return e}var ot=class r{constructor(e,t=new ve){c(this,"context");c(this,"name");c(this,"_fields");c(this,"allFieldsParsed");c(this,"cachedString");c(this,"onModified");this.context=t,this._fields=e,this.allFieldsParsed=e.every(i=>typeof i!="string");let n=e[0];this.name=typeof n=="string"?n:n.components[0][0],this.bindFields()}get fields(){if(!this.allFieldsParsed){for(let e=0;e<this._fields.length;e++)typeof this._fields[e]=="string"&&this.parseField(e);this.allFieldsParsed=!0}return this._fields}get(e){return this.parseField(e)}getField(e){if(this.name==="MSH"){if(e===1)return new ce([[this.context.getMsh1()]],this.context);if(e===2)return new ce([[this.context.getMsh2()]],this.context);if(e>2)return this.parseField(e-1)}return this.parseField(e)}parseField(e){let t=this._fields[e];if(t===void 0)return;if(typeof t!="string")return t;let n=ce.parse(t,this.context);return n.onModified=()=>{this.cachedString=void 0,this.onModified?.()},this._fields[e]=n,n}getComponent(e,t,n,i=0){return this.getField(e)?.getComponent(t,n,i)??""}toString(){return this.cachedString??=this._fields.map(e=>typeof e=="string"?e:e.toString()).join(this.context.fieldSeparator),this.cachedString}static parse(e,t=new ve){let n=new r(e.split(t.fieldSeparator),t);return n.cachedString=e,n}setField(e,t){if(this.name==="MSH"){if(e===1||e===2)return!1;if(e>2){let n=e-1;for(;this._fields.length<=n;)this._fields.push(new ce([[""]],this.context));return this._fields[n]=typeof t=="string"?ce.parse(t,this.context):t,this.invalidateCache(),!0}}for(;this._fields.length<=e;)this._fields.push(new ce([[""]],this.context));return this._fields[e]=typeof t=="string"?ce.parse(t,this.context):t,this.invalidateCache(),!0}setComponent(e,t,n,i,o=0){let s=this.getField(e);return s?s.setComponent(t,n,i,o):!1}invalidateCache(){this.cachedString=void 0,this.bindFields(),this.onModified?.()}bindFields(){let e=()=>{this.cachedString=void 0,this.onModified?.()};for(let t of this._fields)typeof t!="string"&&(t.onModified=e)}},ce=class r{constructor(e,t=new ve){c(this,"context");c(this,"components");c(this,"onModified");c(this,"cachedString");this.context=t,this.components=e}get(e,t,n=0){return this.getComponent(e+1,t,n)}getComponent(e,t,n=0){let i=this.components[n][e-1]??"";return t!==void 0&&(i=i.split(this.context.subcomponentSeparator)[t]??""),i}toString(){return this.cachedString??=this.components.map(e=>e.join(this.context.componentSeparator)).join(this.context.repetitionSeparator),this.cachedString}static parse(e,t=new ve){let n=new r(e.split(t.repetitionSeparator).map(i=>i.split(t.componentSeparator)),t);return n.cachedString=e,n}setComponent(e,t,n,i=0){if(e<1)return!1;if(i>=this.components.length)for(;this.components.length<=i;)this.components.push([""]);if(n===void 0)this.components[i][e-1]=t;else{if(n<0)return!1;{let s=(this.components[i][e-1]||"").split(this.context.subcomponentSeparator);for(;s.length<=n;)s.push("");s[n]=t,this.components[i][e-1]=s.join(this.context.subcomponentSeparator)}}return this.invalidateCache(),!0}invalidateCache(){this.cachedString=void 0,this.onModified?.()}};function Ed(r,e){if(!r)return;let t=We(r.slice(0,4),0),n=We(r.slice(4,6),1)-1,i=We(r.slice(6,8),1),o=We(r.slice(8,10),0),s=We(r.slice(10,12),0),a=We(r.slice(12,14),0),u=0;r.includes(".")&&(u=We(r.slice(15,19),0));let l=new Date(Date.UTC(t,n,i,o,s,a,u)),p=Rd(r,e?.tzOffset);return p!==0&&(l=new Date(l.getTime()-p)),l.toISOString()}function We(r,e){let t=Number.parseInt(r,10);return Number.isNaN(t)?e:t}function Rd(r,e){let t=e,n=r.indexOf("+");n!==-1&&(t=r.slice(n));let i=r.indexOf("-");if(i!==-1&&(t=r.slice(i)),!t)return 0;let o=t.startsWith("-")?-1:1;t=t.slice(1).replace(":","");let s=Number.parseInt(t.slice(0,2),10),a=Number.parseInt(t.slice(2,4),10);return o*(s*60*60*1e3+a*60*1e3)}function Es(r){let e=r instanceof Date?r:new Date(r),n=e.toISOString().replaceAll(/[-:T]/g,"").replace(/(\.\d+)?Z$/,""),i=e.getUTCMilliseconds();return i>0&&(n+="."+i.toString()),n}var qe={NONE:0,ERROR:1,WARN:2,INFO:3,DEBUG:4},Rs=["NONE","ERROR","WARN","INFO","DEBUG"],bi=class r{constructor(e,t={},n=qe.INFO,i={}){c(this,"write");c(this,"metadata");c(this,"options");c(this,"prefix");c(this,"level");this.write=e,this.metadata=t,this.level=n,this.options=i,i?.prefix&&(this.prefix=i.prefix),this.error=this.error.bind(this),this.warn=this.warn.bind(this),this.info=this.info.bind(this),this.debug=this.debug.bind(this),this.log=this.log.bind(this)}clone(e){let t=this.getLoggerConfig(),n=e?{...t,override:e,options:{...t.options,...e.options}}:t;return new r(n.write,n.metadata,n.level,n.options)}getLoggerConfig(){let{write:e,metadata:t,level:n,options:i}=this;return{write:e,metadata:t,level:n,options:i}}error(e,t){this.log(qe.ERROR,e,t)}warn(e,t){this.log(qe.WARN,e,t)}info(e,t){this.log(qe.INFO,e,t)}debug(e,t){this.log(qe.DEBUG,e,t)}log(e,t,n){if(e>this.level)return;let i;if(sr(n))i=Zt(n);else if(n){i={...n};for(let[o,s]of Object.entries(i))s instanceof Error&&(i[o]=Zt(s))}this.write(JSON.stringify({level:Rs[e],timestamp:new Date().toISOString(),msg:this.prefix?`${this.prefix}${t}`:t,...i,...this.metadata}))}};function Cd(r){let e=qe[r.toUpperCase()];if(e===void 0)throw new Error(`Invalid log level: ${r}`);return e}function Zt(r,e=0,t=10){if(e>=t)return{error:"Max error depth reached"};let n={error:r.toString(),stack:r.stack?.split(`
54
+ `)};r.name&&r.name!=="Error"&&(n.name=r.name),r.message&&(n.message=r.message),"cause"in r&&r.cause!==void 0&&(r.cause instanceof Error?n.cause=Zt(r.cause,e+1,t):n.cause=r.cause);let i=Object.getOwnPropertyNames(r).filter(o=>!["name","message","stack","cause"].includes(o));for(let o of i)try{let s=r[o];s instanceof Error?n[o]=Zt(s,e+1,t):n[o]=s}catch{}return n}var Cs="Invalid response from order medication bot",Pd="Invalid response from medication search bot",Ps="Invalid response from order-set bot",As="https://medplum.com/fhir/CodeSystem/medication-request-status-reason",ws="response-not-received";function Ad(){return{coding:[{system:As,code:ws,display:"Order-medication response not received"}],text:"The order-medication operation did not return a verifiable response; vendor-side state is unknown."}}function Os(r){if(typeof r!="object"||r===null)return!1;let e=r;return typeof e.orderId=="number"&&Number.isFinite(e.orderId)&&typeof e.vendorPatientId=="number"&&Number.isFinite(e.vendorPatientId)&&typeof e.launchUrl=="string"&&e.launchUrl.length>0}function Is(r){if(typeof r!="object"||r===null)return!1;let e=r;return typeof e.launchUrl=="string"&&e.launchUrl.length>0}function wd(r){return Array.isArray(r)?r.every(e=>I(e,"Medication")):!1}function Od(r,e){return Er(r,e.pendingOrderIdSystem)}function Id(r,e){let t=Rr(r,e.pendingOrderStatusUrl);return typeof t=="string"?t:void 0}function kd(r,e){let t=Rr(r,e.iframeUrlExtension);return typeof t=="string"?t:void 0}function x(r,e,t){return{name:r,[e]:t}}function ks(r){if(r.resource!==void 0)return r.resource;if(r.part?.length)return r.part;for(let e of Object.keys(r))if(e.startsWith("value"))return r[e]}function Vd(r){let e=[];return r.term!==void 0&&e.push(x("term","valueString",r.term)),r.ndc!==void 0&&e.push(x("ndc","valueString",r.ndc)),r.rxNorm!==void 0&&e.push(x("rxNorm","valueString",r.rxNorm)),r.routedMedId!==void 0&&e.push(x("routedMedId","valueInteger",r.routedMedId)),r.searchOtc!==void 0&&e.push(x("searchOtc","valueBoolean",r.searchOtc)),r.searchSupply!==void 0&&e.push(x("searchSupply","valueBoolean",r.searchSupply)),r.searchBrand!==void 0&&e.push(x("searchBrand","valueBoolean",r.searchBrand)),r.searchGeneric!==void 0&&e.push(x("searchGeneric","valueBoolean",r.searchGeneric)),r.includeCode!==void 0&&e.push(x("includeCode","valueBoolean",r.includeCode)),r.quantityQualifiers!==void 0&&e.push(x("quantityQualifiers","valueBoolean",r.quantityQualifiers)),{resourceType:"Parameters",parameter:e}}function Dd(r,e){let t=[];return e.ndc!==void 0&&t.push(x("ndc","valueString",e.ndc)),e.rxNorm!==void 0&&t.push(x("rxNorm","valueString",e.rxNorm)),e.routedMedId!==void 0&&t.push(x("routedMedId","valueInteger",e.routedMedId)),t.push(x("quantity","valueDecimal",e.quantity)),e.quantityQualifier!==void 0&&t.push(x("quantityQualifier","valueString",e.quantityQualifier)),e.refill!==void 0&&t.push(x("refill","valueInteger",e.refill)),e.drugOrder!==void 0&&t.push(x("drugOrder","valueInteger",e.drugOrder)),e.sigLine3!==void 0&&t.push(x("sigLine3","valueString",e.sigLine3)),e.useSubstitution!==void 0&&t.push(x("useSubstitution","valueBoolean",e.useSubstitution)),{name:r,part:t}}function Md(r){let e=[];if(e.push(x("patientId","valueId",r.patientId)),r.medicationRequestId!==void 0&&e.push(x("medicationRequestId","valueId",r.medicationRequestId)),r.combinationMed!==void 0&&e.push(x("combinationMed","valueBoolean",r.combinationMed)),r.drugs)for(let t of r.drugs)e.push(Dd("drugs",t));if(r.compoundTitle!==void 0&&e.push(x("compoundTitle","valueString",r.compoundTitle)),r.compoundQuantity!==void 0&&e.push(x("compoundQuantity","valueDecimal",r.compoundQuantity)),r.compoundQuantityQualifier!==void 0&&e.push(x("compoundQuantityQualifier","valueString",r.compoundQuantityQualifier)),r.compoundSigs)for(let t of r.compoundSigs){let n=[x("sigOrder","valueInteger",t.sigOrder),x("line3","valueString",t.line3)];t.drugId!==void 0&&n.push(x("drugId","valueInteger",t.drugId)),e.push({name:"compoundSigs",part:n})}if(r.conditionIds)for(let t of r.conditionIds)e.push(x("conditionIds","valueId",t));if(r.coverageId!==void 0&&e.push(x("coverageId","valueId",r.coverageId)),r.payerOrganizationId!==void 0&&e.push(x("payerOrganizationId","valueId",r.payerOrganizationId)),r.pharmacyOrganizationId!==void 0&&e.push(x("pharmacyOrganizationId","valueId",r.pharmacyOrganizationId)),r.diagnoses)for(let t of r.diagnoses)e.push({name:"diagnoses",part:[x("icdId","valueString",t.icdId),x("name","valueString",t.name)]});return r.pharmacyNcpdpId!==void 0&&e.push(x("pharmacyNcpdpId","valueString",r.pharmacyNcpdpId)),r.pharmacyName!==void 0&&e.push(x("pharmacyName","valueString",r.pharmacyName)),r.writtenDate!==void 0&&e.push(x("writtenDate","valueDate",r.writtenDate)),r.fillDate!==void 0&&e.push(x("fillDate","valueDate",r.fillDate)),r.durationDays!==void 0&&e.push(x("durationDays","valueInteger",r.durationDays)),r.pharmacyNote!==void 0&&e.push(x("pharmacyNote","valueString",r.pharmacyNote)),r.patientInstruction!==void 0&&e.push(x("patientInstruction","valueString",r.patientInstruction)),r.appId!==void 0&&e.push(x("appId","valueString",r.appId)),{resourceType:"Parameters",parameter:e}}function _d(r){let e={};for(let n of r.parameter??[])n.name&&(e[n.name]=ks(n));let t={orderId:typeof e.orderId=="number"?e.orderId:Number.NaN,vendorPatientId:typeof e.vendorPatientId=="number"?e.vendorPatientId:Number.NaN,launchUrl:typeof e.launchUrl=="string"?e.launchUrl:"",medicationRequestId:typeof e.medicationRequestId=="string"?e.medicationRequestId:void 0,pendingOrderStatus:e.pendingOrderStatus==="queued"||e.pendingOrderStatus==="reused"?e.pendingOrderStatus:void 0};if(!Os(t))throw new Error(Cs);return t}function Ld(r){let e=[];return e.push(x("patientId","valueId",r.patientId)),r.planDefinitionId!==void 0&&e.push(x("planDefinitionId","valueId",r.planDefinitionId)),r.vendorOrderSetId!==void 0&&(typeof r.vendorOrderSetId=="number"?e.push(x("vendorOrderSetId","valueInteger",r.vendorOrderSetId)):e.push(x("vendorOrderSetId","valueString",r.vendorOrderSetId))),r.appId!==void 0&&e.push(x("appId","valueString",r.appId)),{resourceType:"Parameters",parameter:e}}function Nd(r){let e={};for(let n of r.parameter??[])n.name&&(e[n.name]=ks(n));let t={launchUrl:typeof e.launchUrl=="string"?e.launchUrl:"",vendorPatientId:typeof e.vendorPatientId=="number"||typeof e.vendorPatientId=="string"?e.vendorPatientId:void 0,vendorOrderSetId:typeof e.vendorOrderSetId=="number"||typeof e.vendorOrderSetId=="string"?e.vendorOrderSetId:void 0,planDefinitionId:typeof e.planDefinitionId=="string"?e.planDefinitionId:void 0};if(!Is(t))throw new Error(Ps);return t}var Kr=`${ct}/fhir/StructureDefinition/patient-preferredPharmacy`,Ci="https://medplum.com/fhir/CodeSystem/pharmacy-preference-type",Jr="primary",Pi="preferred";function Ei(r){let e=r.extension?.find(t=>t.url==="pharmacy");return e?.valueReference?O(e.valueReference):void 0}function Ri(r){return r.url===Kr&&!!r.extension}function Fd(r,e){let t=r.extension?.find(n=>n.url==="type");t&&(t.valueCodeableConcept={coding:[{system:e,code:Pi,display:"Preferred Pharmacy"}]})}function Ud(r,e){if(!r.extension)return[];let t=[];for(let n of r.extension){if(n.url!==Kr||!n.extension)continue;let i=n.extension.find(s=>s.url==="pharmacy"),o=n.extension.find(s=>s.url==="type");if(i?.valueReference){let s=e?o?.valueCodeableConcept?.coding?.some(a=>a.system===e&&a.code===Jr)??!1:o?.valueCodeableConcept?.coding?.some(a=>a.code===Jr)??!1;t.push({organizationRef:i.valueReference,isPrimary:s})}}return t}function Vs(r,e,t=Ci){return{url:Kr,extension:[{url:"pharmacy",valueReference:r},{url:"type",valueCodeableConcept:{coding:[{system:t,code:e?Jr:Pi,display:e?"Primary Pharmacy":"Preferred Pharmacy"}]}}]}}function Bd(r,e,t,n=Ci){r.extension??=[];let i=O(e);if(t)for(let a of r.extension)Ri(a)&&Ei(a)!==i&&Fd(a,n);let o=r.extension.findIndex(a=>Ri(a)&&Ei(a)===i),s=Vs(e,t,n);return o>=0?r.extension[o]=s:r.extension.push(s),r}function Wd(r,e){if(!r.extension)return r;let t=O(e);return r.extension=r.extension.filter(n=>Ri(n)?Ei(n)!==t:!0),r}function qd(r){if(!Array.isArray(r))return!1;if(r.length>0){let e=r[0];return typeof e=="object"&&e!==null&&e.resourceType==="Organization"}return!0}function jd(r){if(typeof r!="object"||r===null)return!1;let e=r;return typeof e.success=="boolean"&&typeof e.message=="string"}function $d(r){if(!r)throw new f(T("Resource type is null"));if(!lt(r))throw new f(T("Unknown resource type"))}function Ai(r,e,t){r===null?t.push(E(e,"Invalid null value")):Array.isArray(r)?Hd(r,e,t):typeof r=="object"&&Gd(r,e,t)}function Hd(r,e,t){for(let n=0;n<r.length;n++)r[n]===void 0?t.push(E(`${e}[${n}]`,"Invalid undefined value")):Ai(r[n],`${e}[${n}]`,t)}function Gd(r,e,t){for(let[n,i]of Object.entries(r))Ai(i,`${e}${e?".":""}${n}`,t)}function Qd(r){return{resourceType:"SearchParameter",code:r.code+":identifier",base:r.base,type:"token",expression:`(${r.expression}).identifier`}}function wi(r){return r.match(/^\((.+)\)\.identifier$/)?.[1]}function Oi(r,e){return new ge(r,new Y(e,new B("identifier")))}var ue={BOOLEAN:"BOOLEAN",NUMBER:"NUMBER",QUANTITY:"QUANTITY",TEXT:"TEXT",REFERENCE:"REFERENCE",CANONICAL:"CANONICAL",DATE:"DATE",DATETIME:"DATETIME",PERIOD:"PERIOD",UUID:"UUID"};function zd(r,e){return j.types[r]?.searchParamsDetails?.[e.code]??Kd(r,e)}function Jd(r,e,t){let n=j.types[r];n||(n={},j.types[r]=n),n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=t}function Kd(r,e){let t=e.code,n=e.expression,i=ki(r,n),o={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let l of i){let p=Yr(l),g=Bn(()=>p.join("."));p.length===1&&p[0]instanceof R&&p[0].operator!=="."?o.propertyTypes.add("boolean"):e.code.endsWith(":identifier")?o.propertyTypes.add("Identifier"):g().endsWith("extension.value.code")||g().endsWith("extension.value.coding.code")?(o.array=!0,o.propertyTypes.clear(),o.propertyTypes.add("code")):Ds(o,p,r,1),g().endsWith("extension.valueDateTime")&&(o.array=!1,o.propertyTypes.clear(),o.propertyTypes.add("dateTime"))}let s;if(e.code.endsWith(":identifier")){let l=wi(n);if(l===void 0)throw new Error(`Unexpected expression for derived identifier search parameter: ${n}`);let p=Ii(r,l);s=Oi(n,p)}else s=Ii(r,n);let a=o.elementDefinitions.map(l=>({...l,type:l.type?.filter(p=>o.propertyTypes.has(p.code))})).filter(l=>l.type&&l.type.length>0),u={type:Zd(e,o.propertyTypes),elementDefinitions:a,parsedExpression:s,array:o.array,referenceTargetTypes:tp(e,a)};return Jd(r,t,u),u}function Ds(r,e,t,n){let i=e[n];if(i instanceof ye){r.propertyTypes.add(i.right.toString());return}if(i instanceof X){Yd(r,i);return}let o=i.toString(),s=gt(t,o);if(!s)throw new Error(`Element definition not found for ${t} ${o}`);let a=!1,u=n+1;u<e.length&&e[u]instanceof Pe&&(a=!0,u++);let l=e[u];if(s.isArray&&!a&&(r.array=!0),u===e.length-1){if(l instanceof ye){r.elementDefinitions.push(s),r.propertyTypes.add(l.right.toString());return}if(l instanceof X&&l.name==="ofType"){r.elementDefinitions.push(s),r.propertyTypes.add(l.args[0].toString());return}}if(u>=e.length){r.elementDefinitions.push(s);for(let p of s.type??y)r.propertyTypes.add(p.code);return}for(let p of s.type??y){let g=p.code;Xd(g)&&(g=s.type[0].code),Ds(r,e,g,u)}}function Yd(r,e){if(e.name==="as"){r.propertyTypes.add(e.args[0].toString());return}if(e.name==="ofType"){r.propertyTypes.add(e.args[0].toString());return}if(e.name==="resolve"){r.propertyTypes.add("string");return}if(e.name==="where"&&e.args[0]instanceof Ce){r.propertyTypes.add(e.args[0].right.toString());return}throw new Error(`Unhandled FHIRPath function: ${e.name}`)}function Xd(r){return r==="Element"||r==="BackboneElement"}function Zd(r,e){switch(r.type){case"date":return e.size===1&&e.has(d.date)?ue.DATE:ue.DATETIME;case"number":return ue.NUMBER;case"quantity":return ue.QUANTITY;case"reference":return e.has(d.canonical)?ue.CANONICAL:ue.REFERENCE;case"token":return e.size===1&&e.has(d.boolean)?ue.BOOLEAN:ue.TEXT;default:return ue.TEXT}}function ki(r,e){let t=[],n=Lt(e);return Xr(r,n.child,t),t}function ep(r,e){let t=ki(r,e);if(t.length!==0)return t.map(n=>n.toString()).join(" | ")}function Ii(r,e){let t=[],n=Lt(e);if(Xr(r,n.child,t),t.length===0)return n;let i=t[0];for(let o=1;o<t.length;o++)i=new Re(i,t[o]);return new ge("<original-not-available>",i)}function Xr(r,e,t){e instanceof Re?(Xr(r,e.left,t),Xr(r,e.right,t)):e.toString().includes(r+".")&&t.push(e)}function Yr(r){if(r instanceof ye||r instanceof Pe)return[Yr(r.left),r].flat();if(r instanceof R&&r.operator!==".")return[r];if(r instanceof Y)return[Yr(r.left),Yr(r.right)].flat();if(r instanceof X){if(r.name==="where"&&!(r.args[0]instanceof Ce))return[];if(r.name==="last")return[]}return[r]}function tp(r,e){if(r.target?.length===1)return r.target;if(e){let t=new Set;for(let n of e)for(let i of n.type)if(!(i.code!=="Reference"||!i.targetProfile))for(let o of i.targetProfile){let s=o.split("/").at(-1);s&&s!=="Resource"&&t.add(s)}if(t.size>0)return Array.from(t)}}function rp(r){let e=[];return new Promise((t,n)=>{r.on("data",i=>e.push(Buffer.from(i))),r.on("error",i=>{r.destroy(),n(i)}),r.on("end",()=>{t(Buffer.concat(e))}),r.on("close",()=>{r.destroy()})})}function np(r,e){let t=[];for(let n of e)t.push(...ip(r,n));return t}function ip(r,e){if(!r.resource)throw new Error("Resource type is required");if(r.resource!==e.resourceType)return[];let t={};for(let i of r.constant??y){let o={type:"ViewDefinitionConstant",value:i};t["%"+i.name]=_(o,"value")}let n=b(e);for(let i of r.where??y){let o=w(i.path,[n],t);if(o.length!==1)return[];if(o[0].type!=="boolean")throw new Error("WHERE clause must evaluate to a boolean");if(!o[0].value)return[]}return Vi(r,n,t)}function Vi(r,e,t){let n=[],i;r.forEach?i=w(r.forEach,[e],t):r.forEachOrNull?i=w(r.forEachOrNull,[e],t):i=[e];for(let o of i){let s=[];for(let a of r.column??y){let u=w(a.path,[o],t),l;if(u.length===0)l={[a.name]:null};else if(a.collection)l={[a.name]:u.map(p=>p.value)};else if(u.length===1)l={[a.name]:u[0].value};else throw new Error("Multiple values found but not expected for column");s.push([l])}for(let a of r.select??y){let u=Vi(a,o,t);s.push(u)}if(r.unionAll){let a=[];for(let u of r.unionAll)for(let l of Vi(u,o,t))a.push(l);s.push(a)}n.push(...op(s))}if(i.length===0&&r.forEachOrNull){let o={};for(let s of r.column??y)o[s.name]=null;n.push(o)}return n}function op(r){if(r.length===0)return[];let e=r[0];for(let t=1;t<r.length;t++)e=sp(e,r[t]);return e}function sp(r,e){let t=[];for(let n of r)for(let i of e)t.push(ap(n,i));return t}function ap(r,e){let t={};return Object.assign(t,r),Object.assign(t,e),t}var Ms="https://meta.medplum.com/releases",Zr=new Map;function cp(){Zr.clear()}function _s(r){let e=r;if(!e.tag_name)throw new Error("Manifest missing tag_name");let t=e.assets;if(!t?.length)throw new Error("Manifest missing assets list");for(let n of t){if(!n.browser_download_url)throw new Error("Asset missing browser download URL");if(!n.name)throw new Error("Asset missing name")}}async function en(r,e,t){let n=Zr.get(e??"latest");if(!n){let i=e?`v${e}`:"latest",o=new URL(`${Ms}/${i}.json`);if(o.searchParams.set("a",r),o.searchParams.set("c",Br),t)for(let[u,l]of Object.entries(t))o.searchParams.set(u,l);let s=await fetch(o.toString());if(s.status!==200){let u;try{u=(await s.json()).message}catch(l){console.error(`Failed to parse message from body: ${Ie(l)}`)}throw new Error(`Received status code ${s.status} while fetching manifest for version '${e??"latest"}'. Message: ${u}`)}let a=await s.json();_s(a),n=a,Zr.set(e??"latest",n),e||Zr.set(n.tag_name.slice(1),n)}return n}function Ls(r){return/^\d+\.\d+\.\d+(-[0-9a-z]{7})?$/.test(r)}async function up(r,e){if(!Ls(e))return!1;try{await en(r,e)}catch{return!1}return!0}async function lp(r){let e=await en(r);if(!e.tag_name.startsWith("v"))throw new Error(`Invalid release name found. Release tag '${e.tag_name}' did not start with 'v'`);return e.tag_name.slice(1)}async function dp(r,e){try{let t=Br.split("-")[0],i=(await en(r,void 0,e)).tag_name.slice(1);t!==i&&console.warn(`A new version (v${i}) of Medplum is available. Your current version (v${t}) may be missing important updates and bug fixes.`)}catch(t){console.warn(`Failed to check for newer version: ${Ie(t)}`)}}0&&(module.exports={AccessPolicyInteraction,AckCode,AndAtom,ArithmeticOperatorAtom,AsAtom,CPT,ClientStorage,ConcatAtom,ContainsAtom,ContentType,DEFAULT_ACCEPT,DEFAULT_MAX_SEARCH_COUNT,DEFAULT_SEARCH_COUNT,DataSampler,DotAtom,EMPTY,EmptySetAtom,EqualsAtom,EquivalentAtom,EventTarget,ExternalSecretSystems,FHIRCAST_EVENT_NAMES,FHIRCAST_EVENT_RESOURCES,FHIRCAST_EVENT_VERSION_REQUIRED,FHIRCAST_RESOURCE_TYPES,FhirFilterComparison,FhirFilterConnective,FhirFilterNegation,FhirPathAtom,FhircastConnection,FileBuilder,FunctionAtom,HTTP_HL7_ORG,HTTP_TERMINOLOGY_HL7_ORG,Hl7Context,Hl7Field,Hl7Message,Hl7Segment,ICD10,INVALID_MEDICATION_ORDER_RESPONSE,INVALID_MEDICATION_ORDER_SET_RESPONSE,INVALID_MEDICATION_SEARCH_RESPONSE,ImpliesAtom,InAtom,IndexerAtom,InfixOperatorAtom,IsAtom,LOINC,LRUCache,LiteralAtom,LogLevel,LogLevelNames,Logger,MEDICATION_REQUEST_STATUS_REASON_RESPONSE_NOT_RECEIVED,MEDICATION_REQUEST_STATUS_REASON_SYSTEM,MEDPLUM_CLI_CLIENT_ID,MEDPLUM_RELEASES_URL,MEDPLUM_VERSION,MedplumClient,MedplumKeyValueClient,MemoryStorage,MockAsyncClientStorage,NDC,NOOP,NotEqualsAtom,NotEquivalentAtom,OAuthClientAssertionType,OAuthGrantType,OAuthSigningAlgorithm,OAuthTokenAuthMethod,OAuthTokenType,OperationOutcomeError,Operator,OperatorPrecedence,OrAtom,PATIENT_PREFERRED_PHARMACY_URL,PHARMACY_PREFERENCE_TYPE_SYSTEM,PHARMACY_TYPE_PREFERRED,PHARMACY_TYPE_PRIMARY,Parser,ParserBuilder,PrefixOperatorAtom,PropertyType,RXNORM,ReadablePromise,ReconnectingWebSocket,ReturnAckCategory,SNOMED,SearchParameterType,SubscriptionEmitter,SubscriptionManager,SymbolAtom,Tokenizer,TransformMapCollection,TypedEventTarget,UCUM,UnaryOperatorAtom,UnionAtom,VALID_HOSTNAME_REGEX,XorAtom,accepted,accessPolicySupportsInteraction,addPreferredPharmacyToPatient,addProfileToResource,allOk,append,applyDefaultValuesToElement,applyDefaultValuesToResource,applyFixedOrPatternValue,arrayBufferToBase64,arrayBufferToHex,arrayify,assert,assertContextVersionOptional,assertOk,assertReleaseManifest,badRequest,booleanToTypedValue,buildCdsRequest,buildElementsContext,buildMedicationRequestResponseLostStatusReason,buildTypeName,businessRule,calculateAge,calculateAgeString,canReadResourceType,canWriteResource,canWriteResourceType,capitalize,checkForNull,checkIfValidMedplumVersion,clearReleaseCache,codeableConceptMatchesToken,codingMatchesToken,compressElement,concatUrls,conceptMapTranslate,conflict,contentTooLarge,convertContainedResourcesToBundle,convertToSearchableDates,convertToSearchableNumbers,convertToSearchableQuantities,convertToSearchableReferences,convertToSearchableStrings,convertToSearchableTokens,convertToSearchableUris,convertToTransactionBundle,crawlTypedValue,crawlTypedValueAsync,createConstraintIssue,createFhircastMessagePayload,createOperationOutcomeIssue,createPreferredPharmacyExtension,createProcessingIssue,createReference,createStructureIssue,created,decodeBase64,decodeBase64Url,deepClone,deepEquals,deepIncludes,deriveIdentifierSearchParameter,encodeBase64,encodeBase64Url,encryptSHA256,ensureNoLeadingSlash,ensureTrailingSlash,escapeHtml,evalFhirPath,evalFhirPathTyped,evalSqlOnFhir,expandSampledData,expandSampledObservation,extractAccountReferences,fetchLatestVersionString,fetchVersionManifest,fhirPathArrayEquals,fhirPathArrayEquivalent,fhirPathArrayNotEquals,fhirPathEquals,fhirPathEquivalent,fhirPathIs,fhirPathNot,fhirTypeToJsType,findCodeBySystem,findObservationInterval,findObservationReferenceRange,findObservationReferenceRanges,findResourceByCode,findResourceInBundle,flatMapFilter,forbidden,formatAddress,formatCodeableConcept,formatCoding,formatDate,formatDateTime,formatFamilyName,formatGivenName,formatHl7DateTime,formatHumanName,formatMoney,formatObservationValue,formatPeriod,formatQuantity,formatRange,formatReferenceString,formatSearchQuery,formatTime,formatTiming,formatWallTime,generateId,getAllDataTypes,getAllQuestionnaireAnswers,getBuffer,getCodeBySystem,getDataType,getDateProperty,getDefaultValuesForNewSliceEntry,getDisplayString,getElementDefinition,getElementDefinitionFromElements,getElementDefinitionTypeName,getExpressionForResourceType,getExpressionsForResourceType,getExtension,getExtensionValue,getIdentifier,getImageSrc,getInnerDerivedIdentifierExpression,getMedicationOrderIframeUrl,getNestedProperty,getOutcomeRedirectUrl,getParsedDerivedIdentifierExpression,getParsedExpressionForResourceType,getPathDifference,getPathDisplayName,getPendingMedicationOrderId,getPendingMedicationOrderStatus,getPreferredPharmaciesFromPatient,getPropertyDisplayName,getQueryString,getQuestionnaireAnswers,getRandomString,getReferenceString,getResourceTypes,getSearchParameter,getSearchParameterDetails,getSearchParameters,getStatus,getTypedPropertyValue,getTypedPropertyValueWithPath,getTypedPropertyValueWithSchema,getTypedPropertyValueWithoutSchema,getValueSliceName,getWebSocketUrl,getWindow,globalSchema,gone,indexConceptMapCodings,indexDefaultSearchParameters,indexSearchParameter,indexSearchParameterBundle,indexStructureDefinitionBundle,inflateBaseSchema,inflateElement,initFhirPathParserBuilder,invalidSearchOperator,isAccepted,isAddPharmacyResponse,isBrowserEnvironment,isCodeableConcept,isCoding,isCompletedSubscriptionRequest,isComplexTypeCode,isConflict,isContextVersionRequired,isCreated,isDataTypeLoaded,isDateString,isDateTimeString,isDefined,isEmpty,isError,isFhirCriteriaMet,isFhircastResourceType,isGone,isJwt,isLowerCase,isMedicationArray,isMedicationOrderResponse,isMedicationOrderSetResponse,isMedplumAccessToken,isNodeEnvironment,isNotFound,isObject,isOk,isOperationOutcome,isOrganizationArray,isPeriod,isPopulated,isPrimitiveType,isProfileLoaded,isProfileResource,isQuantity,isQuantityEquivalent,isRedirect,isReference,isResource,isResourceType,isResourceTypeSchema,isResourceWithId,isSliceDefinitionWithTypes,isString,isStringArray,isTextObject,isTypedValue,isUUID,isUnauthenticated,isValidDate,isValidHostname,isValidMedplumSemver,lazy,loadDataType,locationUtils,mapByIdentifier,matchDiscriminant,matchesRange,matchesSearchRequest,medicationOrderRequestToParameters,medicationOrderSetRequestToParameters,medicationSearchParamsToParameters,multipleMatches,normalizeArrayBufferView,normalizeCreateBinaryOptions,normalizeCreatePdfOptions,normalizeErrorString,normalizeOperationOutcome,notFound,notModified,operationOutcomeIssueToString,operationOutcomeToString,parametersToMedicationOrderResponse,parametersToMedicationOrderSetResponse,parseFhirPath,parseFilterParameter,parseHl7DateTime,parseJWTPayload,parseLogLevel,parseMappingLanguage,parseParameter,parseReference,parseSearchRequest,parseStructureDefinition,parseXFhirQuery,pathToJSONPointer,preciseEquals,preciseGreaterThan,preciseGreaterThanOrEquals,preciseLessThan,preciseLessThanOrEquals,preciseRound,preconditionFailed,projectAdminResourceTypes,protectedResourceTypes,readInteractions,redirect,redirectOk,removeDuplicates,removePreferredPharmacyFromPatient,removeProfileFromResource,reorderBundle,replaceQueryVariables,resolveId,resourceMatchesSubscriptionCriteria,satisfiedAccessPolicy,serializeError,serializeFhircastSubscriptionRequest,serverError,serverTimeout,setCodeBySystem,setIdentifier,singleton,singularize,sleep,sortStringArray,splitN,splitSearchOnComma,streamToBuffer,stringify,stringifyTypedValue,structureMapTransform,subsetResource,summarizeObservations,toJsBoolean,toPeriod,toTypedValue,tooManyRequests,trimTrailingEmptyElements,tryGetDataType,tryGetJwtExpiration,tryGetProfile,typedValueToString,unauthorized,unauthorizedTokenAudience,unauthorizedTokenExpired,unsupportedMediaType,validateFhircastSubscriptionRequest,validateResource,validateResourceType,validateTypedValue,validationError,validationRegexes,warnIfNewerVersionAvailable,wordWrap});
55
55
  /*!
56
56
  * Reconnecting WebSocket
57
57
  * by Pedro Ladaria <pedro.ladaria@gmail.com>