@medplum/core 3.2.30 → 3.2.31

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,6 +1,6 @@
1
1
  "use strict";var kr=Object.defineProperty;var Ko=Object.getOwnPropertyDescriptor;var zo=Object.getOwnPropertyNames;var Jo=Object.prototype.hasOwnProperty;var Yo=(r,e)=>{for(var t in e)kr(r,t,{get:e[t],enumerable:!0})},Zo=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of zo(e))!Jo.call(r,i)&&i!==t&&kr(r,i,{get:()=>e[i],enumerable:!(n=Ko(e,i))||n.enumerable});return r};var Xo=r=>Zo(kr({},"__esModule",{value:!0}),r);var yl={};Yo(yl,{AccessPolicyInteraction:()=>no,AndAtom:()=>mt,ArithemticOperatorAtom:()=>D,AsAtom:()=>fe,BooleanInfixOperatorAtom:()=>C,CPT:()=>ns,ClientStorage:()=>qe,ConcatAtom:()=>at,ContainsAtom:()=>ct,ContentType:()=>A,DEFAULT_ACCEPT:()=>Ro,DEFAULT_MAX_SEARCH_COUNT:()=>dc,DEFAULT_SEARCH_COUNT:()=>pc,DotAtom:()=>ie,EmptySetAtom:()=>ot,EqualsAtom:()=>lt,EquivalentAtom:()=>dt,EventTarget:()=>dr,ExternalSecretSystems:()=>uu,FHIRCAST_EVENT_NAMES:()=>fr,FHIRCAST_EVENT_RESOURCES:()=>fo,FHIRCAST_EVENT_VERSION_REQUIRED:()=>mr,FHIRCAST_RESOURCE_TYPES:()=>po,FhirFilterComparison:()=>Dt,FhirFilterConnective:()=>_t,FhirFilterNegation:()=>Mt,FhirPathAtom:()=>it,FhircastConnection:()=>bt,FileBuilder:()=>zn,FunctionAtom:()=>J,HTTP_HL7_ORG:()=>Dr,HTTP_TERMINOLOGY_HL7_ORG:()=>ss,Hl7Context:()=>ae,Hl7Field:()=>Ve,Hl7Message:()=>Yn,Hl7Segment:()=>Ge,ICD10:()=>is,ImpliesAtom:()=>gt,InAtom:()=>ut,IndexerAtom:()=>he,InfixOperatorAtom:()=>Y,IsAtom:()=>me,LOINC:()=>es,LRUCache:()=>Et,LiteralAtom:()=>L,LogLevel:()=>Ar,Logger:()=>Zn,MEDPLUM_CLI_CLIENT_ID:()=>Xc,MEDPLUM_RELEASES_URL:()=>Go,MEDPLUM_VERSION:()=>vr,MedplumClient:()=>Ot,MedplumKeyValueClient:()=>Pt,MemoryStorage:()=>gr,MockAsyncClientStorage:()=>Bn,NDC:()=>os,NotEqualsAtom:()=>pt,NotEquivalentAtom:()=>ft,OAuthClientAssertionType:()=>Ao,OAuthGrantType:()=>Co,OAuthTokenAuthMethod:()=>wo,OAuthTokenType:()=>Po,OperationOutcomeError:()=>d,Operator:()=>wn,OperatorPrecedence:()=>y,OrAtom:()=>ht,Parser:()=>Nt,ParserBuilder:()=>Qe,PrefixOperatorAtom:()=>He,PropertyType:()=>p,RXNORM:()=>rs,ReadablePromise:()=>M,ReconnectingWebSocket:()=>wt,SNOMED:()=>ts,SearchParameterType:()=>Cn,SubscriptionEmitter:()=>We,SubscriptionManager:()=>At,SymbolAtom:()=>q,Tokenizer:()=>oe,TransformMapCollection:()=>Cr,TypedEventTarget:()=>$,UCUM:()=>Vr,UnaryOperatorAtom:()=>st,UnionAtom:()=>Ae,VALID_HOSTNAME_REGEX:()=>Ni,XorAtom:()=>yt,accepted:()=>hs,addProfileToResource:()=>wa,allOk:()=>as,append:()=>Ce,applyDefaultValuesToElement:()=>yu,applyDefaultValuesToElementWithVisitor:()=>gu,applyDefaultValuesToResource:()=>hu,applyFixedOrPatternValue:()=>kt,arrayBufferToBase64:()=>yn,arrayBufferToHex:()=>hn,arrayify:()=>_e,assert:()=>xo,assertContextVersionOptional:()=>_n,assertOk:()=>Cs,assertReleaseManifest:()=>Ho,badRequest:()=>E,booleanToTypedValue:()=>f,buildElementsContext:()=>Sr,buildTypeName:()=>$i,calculateAge:()=>tt,calculateAgeString:()=>ta,canReadResourceType:()=>Uc,canWriteResource:()=>Bc,canWriteResourceType:()=>io,capitalize:()=>O,checkForNull:()=>Xn,checkIfValidMedplumVersion:()=>fl,clearReleaseCache:()=>dl,compressElement:()=>ws,concatUrls:()=>U,conceptMapTranslate:()=>Gn,conflict:()=>ys,convertContainedResourcesToBundle:()=>Gc,convertToTransactionBundle:()=>ao,crawlResource:()=>Ls,crawlResourceAsync:()=>Fs,crawlTypedValue:()=>ze,crawlTypedValueAsync:()=>on,createConstraintIssue:()=>$r,createFhircastMessagePayload:()=>yr,createOperationOutcomeIssue:()=>ce,createProcessingIssue:()=>Gr,createReference:()=>te,createStructureIssue:()=>v,created:()=>cs,decodeBase64:()=>kn,deepClone:()=>de,deepEquals:()=>ee,deepIncludes:()=>Ne,encodeBase64:()=>Vn,encryptSHA256:()=>Dn,ensureNoLeadingSlash:()=>_i,ensureTrailingSlash:()=>nr,evalFhirPath:()=>Oe,evalFhirPathTyped:()=>w,evalSqlOnFhir:()=>al,fetchLatestVersionString:()=>ml,fetchVersionManifest:()=>Ir,fhirPathArrayEquals:()=>cn,fhirPathArrayEquivalent:()=>Jt,fhirPathArrayNotEquals:()=>un,fhirPathEquals:()=>zt,fhirPathEquivalent:()=>Ei,fhirPathIs:()=>Xe,fhirPathNot:()=>an,fhirTypeToJsType:()=>Ht,findObservationInterval:()=>ha,findObservationReferenceRange:()=>ya,findResourceByCode:()=>Ra,flatMapFilter:()=>Ia,forbidden:()=>ls,formatAddress:()=>Fi,formatCodeableConcept:()=>Le,formatCoding:()=>En,formatDate:()=>Ma,formatDateTime:()=>ir,formatFamilyName:()=>Da,formatGivenName:()=>Va,formatHl7DateTime:()=>$o,formatHumanName:()=>Fe,formatMoney:()=>ja,formatObservationValue:()=>Bi,formatPeriod:()=>_a,formatQuantity:()=>re,formatRange:()=>qa,formatReferenceString:()=>Li,formatSearchQuery:()=>Cc,formatTime:()=>Ui,formatTiming:()=>Ua,generateId:()=>ye,getAllDataTypes:()=>Jr,getAllQuestionnaireAnswers:()=>na,getCodeBySystem:()=>Xt,getDataType:()=>Z,getDateProperty:()=>ea,getDefaultValuesForNewSliceEntry:()=>xu,getDisplayString:()=>Ci,getElementDefinition:()=>et,getElementDefinitionFromElements:()=>Hi,getElementDefinitionTypeName:()=>qt,getExpressionForResourceType:()=>lc,getExpressionsForResourceType:()=>Pn,getExtension:()=>X,getExtensionValue:()=>oa,getIdentifier:()=>Ai,getImageSrc:()=>Xs,getNestedProperty:()=>Ee,getPathDifference:()=>Re,getPathDisplayName:()=>za,getPropertyDisplayName:()=>Gi,getQueryString:()=>Sn,getQuestionnaireAnswers:()=>ra,getRandomString:()=>pr,getReferenceString:()=>le,getResourceTypes:()=>Ha,getSearchParameter:()=>Ka,getSearchParameterDetails:()=>ur,getSearchParameters:()=>Qa,getStatus:()=>Rs,getTypedPropertyValue:()=>P,getTypedPropertyValueWithPath:()=>mi,getTypedPropertyValueWithSchema:()=>Ti,getTypedPropertyValueWithoutSchema:()=>Si,getValueSliceName:()=>$n,getWebSocketUrl:()=>Tn,globalSchema:()=>N,gone:()=>ps,indexDefaultSearchParameters:()=>tn,indexSearchParameter:()=>sr,indexSearchParameterBundle:()=>Ga,indexStructureDefinitionBundle:()=>Wt,inflateBaseSchema:()=>Hr,inflateElement:()=>ai,initFhirPathParserBuilder:()=>Be,isAccepted:()=>vs,isCodeableConcept:()=>Zt,isCoding:()=>Yt,isCompletedSubscriptionRequest:()=>Nn,isComplexTypeCode:()=>er,isConflict:()=>Ss,isContextVersionRequired:()=>Mn,isCreated:()=>xs,isDataTypeLoaded:()=>Yr,isDateString:()=>ln,isDateTimeString:()=>be,isEmpty:()=>S,isFhirCriteriaMet:()=>vo,isFhircastResourceType:()=>mo,isGone:()=>Es,isJwt:()=>Ln,isLowerCase:()=>fa,isMedplumAccessToken:()=>Fn,isNotFound:()=>Ts,isObject:()=>b,isOk:()=>Bt,isOperationOutcome:()=>ve,isPeriod:()=>pn,isPopulated:()=>Q,isPrimitiveType:()=>Je,isProfileLoaded:()=>Xr,isProfileResource:()=>Ri,isQuantity:()=>k,isQuantityEquivalent:()=>dn,isReference:()=>ue,isResource:()=>I,isResourceType:()=>Zr,isResourceTypeSchema:()=>Gt,isSliceDefinitionWithTypes:()=>Wn,isString:()=>Oi,isStringArray:()=>mn,isTextObject:()=>Ii,isUUID:()=>da,isUnauthenticated:()=>bs,isValidDate:()=>or,isValidHostname:()=>Pa,isValidMedplumSemver:()=>Qo,lazy:()=>vn,loadDataType:()=>$t,mapByIdentifier:()=>Aa,matchDiscriminant:()=>Kt,matchesAccessPolicy:()=>oo,matchesRange:()=>xn,matchesSearchRequest:()=>St,multipleMatches:()=>fs,normalizeArrayBufferView:()=>gn,normalizeCreateBinaryOptions:()=>jn,normalizeCreatePdfOptions:()=>Oo,normalizeErrorString:()=>Te,normalizeOperationOutcome:()=>Ke,notFound:()=>Br,notModified:()=>us,operationOutcomeIssueToString:()=>si,operationOutcomeToString:()=>Wr,parseCriteriaAsSearchRequest:()=>hc,parseFhirPath:()=>ar,parseFilterParameter:()=>Xu,parseHl7DateTime:()=>el,parseJWTPayload:()=>Ct,parseLogLevel:()=>rl,parseMappingLanguage:()=>Ou,parseParameter:()=>Xi,parseReference:()=>Js,parseSearchDefinition:()=>mc,parseSearchRequest:()=>se,parseSearchUrl:()=>fc,parseStructureDefinition:()=>jt,parseXFhirQuery:()=>Rc,preciseEquals:()=>Sa,preciseGreaterThan:()=>ba,preciseGreaterThanOrEquals:()=>Mi,preciseLessThan:()=>Ea,preciseLessThanOrEquals:()=>Di,preciseRound:()=>Ta,preconditionFailed:()=>ds,projectAdminResourceTypes:()=>ro,protectedResourceTypes:()=>to,removeDuplicates:()=>Ze,removeProfileFromResource:()=>Oa,reorderBundle:()=>co,resolveId:()=>pe,resourceMatchesSubscriptionCriteria:()=>Yc,satisfiedAccessPolicy:()=>qc,serializeFhircastSubscriptionRequest:()=>hr,serverError:()=>jr,serverTimeout:()=>gs,setCodeBySystem:()=>ma,setIdentifier:()=>ia,singleton:()=>W,singularize:()=>Ca,sleep:()=>tr,sortStringArray:()=>nt,splitN:()=>rr,splitSearchOnComma:()=>Tt,streamToBuffer:()=>sl,stringify:()=>rt,stringifyTypedValue:()=>bn,structureMapTransform:()=>Iu,subsetResource:()=>Is,toJsBoolean:()=>_,toPeriod:()=>Ks,toTypedValue:()=>g,tooManyRequests:()=>ms,tryGetDataType:()=>Me,tryGetJwtExpiration:()=>Un,tryGetProfile:()=>en,typedValueToString:()=>ka,unauthorized:()=>xe,unauthorizedTokenAudience:()=>Ut,unauthorizedTokenExpired:()=>qr,validateFhircastSubscriptionRequest:()=>Rt,validateResource:()=>qs,validateResourceType:()=>nl,validateTypedValue:()=>js,validationError:()=>h,validationRegexes:()=>Ye,warnIfNewerVersionAvailable:()=>hl,wordWrap:()=>jo});module.exports=Xo(yl);var He=class{constructor(e,t){this.operator=e;this.child=t}toString(){return`${this.operator}(${this.child.toString()})`}},Y=class{constructor(e,t,n){this.operator=e;this.left=t;this.right=n}toString(){return`${this.left.toString()} ${this.operator} ${this.right.toString()}`}},Qe=class{constructor(){this.prefixParselets={};this.infixParselets={}}registerInfix(e,t){return this.infixParselets[e]=t,this}registerPrefix(e,t){return this.prefixParselets[e]=t,this}prefix(e,t,n){return this.registerPrefix(e,{parse(i,o){let s=i.consumeAndParse(t);return n(o,s)}})}infixLeft(e,t,n){return this.registerInfix(e,{parse(i,o,s){let a=i.consumeAndParse(t);return n(o,s,a)},precedence:t})}construct(e){return new Nt(e,this.prefixParselets,this.infixParselets)}},Nt=class{constructor(e,t,n){this.tokens=e,this.prefixParselets=t,this.infixParselets=n}hasMore(){return this.tokens.length>0}match(e){return this.peek()?.id!==e?!1:(this.consume(),!0)}consumeAndParse(e=1/0){let t=this.consume(),n=this.prefixParselets[t.id];if(!n)throw Error(`Parse error at "${t.value}" (line ${t.line}, column ${t.column}). No matching prefix parselet.`);let i=n.parse(this,t);for(;e>this.getPrecedence();){let o=this.consume();i=this.getInfixParselet(o).parse(this,i,o)}return i}getPrecedence(){let e=this.peek();if(!e)return 1/0;let t=this.getInfixParselet(e);return t?t.precedence:1/0}consume(e,t){if(!this.tokens.length)throw Error("Cant consume unknown more tokens.");if(e&&this.peek()?.id!==e){let n=this.peek();throw Error(`Expected ${e} but got "${n.id}" (${n.value}) at line ${n.line} column ${n.column}.`)}if(t&&this.peek()?.value!==t){let n=this.peek();throw Error(`Expected "${t}" but got "${n.value}" at line ${n.line} column ${n.column}.`)}return this.tokens.shift()}peek(){return this.tokens.length>0?this.tokens[0]:void 0}removeComments(){this.tokens=this.tokens.filter(e=>e.id!=="Comment")}getInfixParselet(e){return this.infixParselets[e.id==="Symbol"?e.value:e.id]}};var Vr="http://unitsofmeasure.org",es="http://loinc.org",ts="http://snomed.info/sct",rs="http://www.nlm.nih.gov/research/umls/rxnorm",ns="http://www.ama-assn.org/go/cpt",is="http://hl7.org/fhir/sid/icd-10",os="http://hl7.org/fhir/sid/ndc",Dr="http://hl7.org",ss="http://terminology.hl7.org";var Mr="ok",Lt="created",_r="gone",Nr="not-modified",Lr="not-found",Fr="conflict",Ur="unauthorized",ti="forbidden",ri="precondition-failed",ni="multiple-matches",ii="too-many-requests",Ft="accepted",oi="server-timeout",as={resourceType:"OperationOutcome",id:Mr,issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},cs={resourceType:"OperationOutcome",id:Lt,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},us={resourceType:"OperationOutcome",id:Nr,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},Br={resourceType:"OperationOutcome",id:Lr,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},xe={resourceType:"OperationOutcome",id:Ur,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},qr={...xe,issue:[...xe.issue,{severity:"error",code:"expired",details:{text:"Token expired"}}]},Ut={...xe,issue:[...xe.issue,{severity:"error",code:"invalid",details:{text:"Token not issued for this audience"}}]},ls={resourceType:"OperationOutcome",id:ti,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},ps={resourceType:"OperationOutcome",id:_r,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},ds={resourceType:"OperationOutcome",id:ri,issue:[{severity:"error",code:"processing",details:{text:"Precondition Failed"}}]},fs={resourceType:"OperationOutcome",id:ni,issue:[{severity:"error",code:"multiple-matches",details:{text:"Multiple resources found matching condition"}}]},ms={resourceType:"OperationOutcome",id:ii,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function hs(r){return{resourceType:"OperationOutcome",id:Ft,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:r}]}}function E(r,e){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:r},...e?{expression:[e]}:void 0}]}}function ys(r,e){return{resourceType:"OperationOutcome",id:Fr,issue:[{severity:"error",code:"conflict",details:{coding:e?[{code:e}]:void 0,text:r}}]}}function h(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"structure",details:{text:r}}]}}function jr(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:r.toString()}]}}function gs(r){return{resourceType:"OperationOutcome",id:oi,issue:[{severity:"error",code:"timeout",details:{text:r??"Server timeout"}}]}}function ve(r){return typeof r=="object"&&r!==null&&r.resourceType==="OperationOutcome"}function Bt(r){return r.id===Mr||r.id===Lt||r.id===Nr||r.id===Ft}function xs(r){return r.id===Lt}function vs(r){return r.id===Ft}function Ts(r){return r.id===Lr}function Ss(r){return r.id===Fr}function Es(r){return r.id===_r}function bs(r){return r.id===Ur}function Rs(r){switch(r.id){case Mr:return 200;case Lt:return 201;case Ft:return 202;case Nr:return 304;case Ur:return 401;case ti:return 403;case Lr:return 404;case Fr:return 409;case _r:return 410;case ri:case ni:return 412;case ii:return 429;case oi:return 504;default:return r.issue?.[0]?.code==="exception"?500:400}}function Cs(r,e){if(!Bt(r)||e===void 0)throw new d(r)}var d=class extends Error{constructor(e,t){super(Wr(e)),this.outcome=e,this.cause=t}};function Ke(r){return r instanceof d?r.outcome:ve(r)?r:E(Te(r))}function Te(r){return r?typeof r=="string"?r:r instanceof Error?r.message:ve(r)?Wr(r):typeof r=="object"&&"code"in r&&typeof r.code=="string"?r.code:JSON.stringify(r):"Unknown error"}function Wr(r){let e=r.issue?.map(si)??[];return e.length>0?e.join("; "):"Unknown error"}function si(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 ce(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 v(r,e){return ce("error","structure",e,r)}function $r(r,e){return ce("error","invariant",`Constraint ${e.key} not met: ${e.description}`,r,{fhirpath:e.expression})}function Gr(r,e,t,n){return ce("error","processing",e,r,{...n,error:t})}var Ps={"http://hl7.org/fhirpath/System.String":"string"};function ws(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:Ps[t.code]??t.code})),e}function ai(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 Hr(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,ai(i,o)])),constraints:[],innerTypes:[]};return e}var ci={Element:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]}}},BackboneElement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]}}},Address:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"code"}]},text:{type:[{code:"string"}]},line:{max:9007199254740991,type:[{code:"string"}]},city:{type:[{code:"string"}]},district:{type:[{code:"string"}]},state:{type:[{code:"string"}]},postalCode:{type:[{code:"string"}]},country:{type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Age:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Annotation:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"author[x]":{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Organization"]},{code:"string"}]},time:{type:[{code:"dateTime"}]},text:{min:1,type:[{code:"markdown"}]}}},Attachment:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},contentType:{type:[{code:"code"}]},language:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]},url:{type:[{code:"url"}]},size:{type:[{code:"unsignedInt"}]},hash:{type:[{code:"base64Binary"}]},title:{type:[{code:"string"}]},creation:{type:[{code:"dateTime"}]}}},CodeableConcept:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},coding:{max:9007199254740991,type:[{code:"Coding"}]},text:{type:[{code:"string"}]}}},Coding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"uri"}]},version:{type:[{code:"string"}]},code:{type:[{code:"code"}]},display:{type:[{code:"string"}]},userSelected:{type:[{code:"boolean"}]}}},ContactDetail:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"string"}]},telecom:{max:9007199254740991,type:[{code:"ContactPoint"}]}}},ContactPoint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"code"}]},value:{type:[{code:"string"}]},use:{type:[{code:"code"}]},rank:{type:[{code:"positiveInt"}]},period:{type:[{code:"Period"}]}}},Contributor:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{min:1,type:[{code:"string"}]},contact:{max:9007199254740991,type:[{code:"ContactDetail"}]}}},Count:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},DataRequirement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},"subject[x]":{type:[{code:"CodeableConcept"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Group"]}]},mustSupport:{max:9007199254740991,type:[{code:"string"}]},codeFilter:{max:9007199254740991,type:[{code:"DataRequirementCodeFilter"}]},dateFilter:{max:9007199254740991,type:[{code:"DataRequirementDateFilter"}]},limit:{type:[{code:"positiveInt"}]},sort:{max:9007199254740991,type:[{code:"DataRequirementSort"}]}}},DataRequirementCodeFilter:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]},code:{max:9007199254740991,type:[{code:"Coding"}]}}},DataRequirementDateFilter:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},"value[x]":{type:[{code:"dateTime"},{code:"Period"},{code:"Duration"}]}}},DataRequirementSort:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},direction:{min:1,type:[{code:"code"}]}}},Distance:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Dosage:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},sequence:{type:[{code:"integer"}]},text:{type:[{code:"string"}]},additionalInstruction:{max:9007199254740991,type:[{code:"CodeableConcept"}]},patientInstruction:{type:[{code:"string"}]},timing:{type:[{code:"Timing"}]},"asNeeded[x]":{type:[{code:"boolean"},{code:"CodeableConcept"}]},site:{type:[{code:"CodeableConcept"}]},route:{type:[{code:"CodeableConcept"}]},method:{type:[{code:"CodeableConcept"}]},doseAndRate:{max:9007199254740991,type:[{code:"DosageDoseAndRate"}]},maxDosePerPeriod:{type:[{code:"Ratio"}]},maxDosePerAdministration:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},maxDosePerLifetime:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},DosageDoseAndRate:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{type:[{code:"CodeableConcept"}]},"dose[x]":{type:[{code:"Range"},{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},"rate[x]":{type:[{code:"Ratio"},{code:"Range"},{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},Duration:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},ElementDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},representation:{max:9007199254740991,type:[{code:"code"}]},sliceName:{type:[{code:"string"}]},sliceIsConstraining:{type:[{code:"boolean"}]},label:{type:[{code:"string"}]},code:{max:9007199254740991,type:[{code:"Coding"}]},slicing:{type:[{code:"ElementDefinitionSlicing"}]},short:{type:[{code:"string"}]},definition:{type:[{code:"markdown"}]},comment:{type:[{code:"markdown"}]},requirements:{type:[{code:"markdown"}]},alias:{max:9007199254740991,type:[{code:"string"}]},min:{type:[{code:"unsignedInt"}]},max:{type:[{code:"string"}]},base:{type:[{code:"ElementDefinitionBase"}]},contentReference:{type:[{code:"uri"}]},type:{max:9007199254740991,type:[{code:"ElementDefinitionType"}]},"defaultValue[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},meaningWhenMissing:{type:[{code:"markdown"}]},orderMeaning:{type:[{code:"string"}]},"fixed[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},"pattern[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},example:{max:9007199254740991,type:[{code:"ElementDefinitionExample"}]},"minValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},"maxValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},maxLength:{type:[{code:"integer"}]},condition:{max:9007199254740991,type:[{code:"id"}]},constraint:{max:9007199254740991,type:[{code:"ElementDefinitionConstraint"}]},mustSupport:{type:[{code:"boolean"}]},isModifier:{type:[{code:"boolean"}]},isModifierReason:{type:[{code:"string"}]},isSummary:{type:[{code:"boolean"}]},binding:{type:[{code:"ElementDefinitionBinding"}]},mapping:{max:9007199254740991,type:[{code:"ElementDefinitionMapping"}]}}},ElementDefinitionSlicingDiscriminator:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},path:{min:1,type:[{code:"string"}]}}},ElementDefinitionSlicing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},discriminator:{max:9007199254740991,type:[{code:"ElementDefinitionSlicingDiscriminator"}]},description:{type:[{code:"string"}]},ordered:{type:[{code:"boolean"}]},rules:{min:1,type:[{code:"code"}]}}},ElementDefinitionBase:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},min:{min:1,type:[{code:"unsignedInt"}]},max:{min:1,type:[{code:"string"}]}}},ElementDefinitionType:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"uri"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},targetProfile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},aggregation:{max:9007199254740991,type:[{code:"code"}]},versioning:{type:[{code:"code"}]}}},ElementDefinitionExample:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},label:{min:1,type:[{code:"string"}]},"value[x]":{min:1,type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]}}},ElementDefinitionConstraint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},key:{min:1,type:[{code:"id"}]},requirements:{type:[{code:"string"}]},severity:{min:1,type:[{code:"code"}]},human:{min:1,type:[{code:"string"}]},expression:{type:[{code:"string"}]},xpath:{type:[{code:"string"}]},source:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]}}},ElementDefinitionBinding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},strength:{min:1,type:[{code:"code"}]},description:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]}}},ElementDefinitionMapping:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},identity:{min:1,type:[{code:"id"}]},language:{type:[{code:"code"}]},map:{min:1,type:[{code:"string"}]},comment:{type:[{code:"string"}]}}},Expression:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},description:{type:[{code:"string"}]},name:{type:[{code:"id"}]},language:{min:1,type:[{code:"code"}]},expression:{type:[{code:"string"}]},reference:{type:[{code:"uri"}]}}},Extension:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},url:{min:1,type:[{code:"uri"}]},"value[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]}}},HumanName:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},text:{type:[{code:"string"}]},family:{type:[{code:"string"}]},given:{max:9007199254740991,type:[{code:"string"}]},prefix:{max:9007199254740991,type:[{code:"string"}]},suffix:{max:9007199254740991,type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Identifier:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"CodeableConcept"}]},system:{type:[{code:"uri"}]},value:{type:[{code:"string"}]},period:{type:[{code:"Period"}]},assigner:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MarketingStatus:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},country:{min:1,type:[{code:"CodeableConcept"}]},jurisdiction:{type:[{code:"CodeableConcept"}]},status:{min:1,type:[{code:"CodeableConcept"}]},dateRange:{min:1,type:[{code:"Period"}]},restoreDate:{type:[{code:"dateTime"}]}}},Meta:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},versionId:{type:[{code:"id"}]},lastUpdated:{type:[{code:"instant"}]},source:{type:[{code:"uri"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},security:{max:9007199254740991,type:[{code:"Coding"}]},tag:{max:9007199254740991,type:[{code:"Coding"}]},project:{type:[{code:"uri"}]},author:{type:[{code:"Reference"}]},onBehalfOf:{type:[{code:"Reference"}]},account:{type:[{code:"Reference"}]},accounts:{max:9007199254740991,type:[{code:"Reference"}]},compartment:{max:9007199254740991,type:[{code:"Reference"}]}}},Money:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},currency:{type:[{code:"code"}]}}},Narrative:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},status:{min:1,type:[{code:"code"}]},div:{min:1,type:[{code:"xhtml"}]}}},ParameterDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"code"}]},use:{min:1,type:[{code:"code"}]},min:{type:[{code:"integer"}]},max:{type:[{code:"string"}]},documentation:{type:[{code:"string"}]},type:{min:1,type:[{code:"code"}]},profile:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]}}},Period:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},start:{type:[{code:"dateTime"}]},end:{type:[{code:"dateTime"}]}}},Population:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"age[x]":{type:[{code:"Range"},{code:"CodeableConcept"}]},gender:{type:[{code:"CodeableConcept"}]},race:{type:[{code:"CodeableConcept"}]},physiologicalCondition:{type:[{code:"CodeableConcept"}]}}},ProdCharacteristic:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},height:{type:[{code:"Quantity"}]},width:{type:[{code:"Quantity"}]},depth:{type:[{code:"Quantity"}]},weight:{type:[{code:"Quantity"}]},nominalVolume:{type:[{code:"Quantity"}]},externalDiameter:{type:[{code:"Quantity"}]},shape:{type:[{code:"string"}]},color:{max:9007199254740991,type:[{code:"string"}]},imprint:{max:9007199254740991,type:[{code:"string"}]},image:{max:9007199254740991,type:[{code:"Attachment"}]},scoring:{type:[{code:"CodeableConcept"}]}}},ProductShelfLife:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},identifier:{type:[{code:"Identifier"}]},type:{min:1,type:[{code:"CodeableConcept"}]},period:{min:1,type:[{code:"Quantity"}]},specialPrecautionsForStorage:{max:9007199254740991,type:[{code:"CodeableConcept"}]}}},Quantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Range:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},low:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},high:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},Ratio:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},numerator:{type:[{code:"Quantity"}]},denominator:{type:[{code:"Quantity"}]}}},Reference:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},reference:{type:[{code:"string"}]},type:{type:[{code:"uri"}]},identifier:{type:[{code:"Identifier"}]},display:{type:[{code:"string"}]}}},RelatedArtifact:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},label:{type:[{code:"string"}]},display:{type:[{code:"string"}]},citation:{type:[{code:"markdown"}]},url:{type:[{code:"url"}]},document:{type:[{code:"Attachment"}]},resource:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/Resource"]}]}}},SampledData:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},origin:{min:1,type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},period:{min:1,type:[{code:"decimal"}]},factor:{type:[{code:"decimal"}]},lowerLimit:{type:[{code:"decimal"}]},upperLimit:{type:[{code:"decimal"}]},dimensions:{min:1,type:[{code:"positiveInt"}]},data:{type:[{code:"string"}]}}},Signature:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,max:9007199254740991,type:[{code:"Coding"}]},when:{min:1,type:[{code:"instant"}]},who:{min:1,type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},onBehalfOf:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},targetFormat:{type:[{code:"code"}]},sigFormat:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]}}},SubstanceAmount:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"amount[x]":{type:[{code:"Quantity"},{code:"Range"},{code:"string"}]},amountType:{type:[{code:"CodeableConcept"}]},amountText:{type:[{code:"string"}]},referenceRange:{type:[{code:"SubstanceAmountReferenceRange"}]}}},SubstanceAmountReferenceRange:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},lowLimit:{type:[{code:"Quantity"}]},highLimit:{type:[{code:"Quantity"}]}}},Timing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},event:{max:9007199254740991,type:[{code:"dateTime"}]},repeat:{type:[{code:"TimingRepeat"}]},code:{type:[{code:"CodeableConcept"}]}}},TimingRepeat:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"bounds[x]":{type:[{code:"Duration"},{code:"Range"},{code:"Period"}]},count:{type:[{code:"positiveInt"}]},countMax:{type:[{code:"positiveInt"}]},duration:{type:[{code:"decimal"}]},durationMax:{type:[{code:"decimal"}]},durationUnit:{type:[{code:"code"}]},frequency:{type:[{code:"positiveInt"}]},frequencyMax:{type:[{code:"positiveInt"}]},period:{type:[{code:"decimal"}]},periodMax:{type:[{code:"decimal"}]},periodUnit:{type:[{code:"code"}]},dayOfWeek:{max:9007199254740991,type:[{code:"code"}]},timeOfDay:{max:9007199254740991,type:[{code:"time"}]},when:{max:9007199254740991,type:[{code:"code"}]},offset:{type:[{code:"unsignedInt"}]}}},TriggerDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{type:[{code:"string"}]},"timing[x]":{type:[{code:"Timing"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Schedule"]},{code:"date"},{code:"dateTime"}]},data:{max:9007199254740991,type:[{code:"DataRequirement"}]},condition:{type:[{code:"Expression"}]}}},UsageContext:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"Coding"}]},"value[x]":{min:1,type:[{code:"CodeableConcept"},{code:"Quantity"},{code:"Range"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/PlanDefinition","http://hl7.org/fhir/StructureDefinition/ResearchStudy","http://hl7.org/fhir/StructureDefinition/InsurancePlan","http://hl7.org/fhir/StructureDefinition/HealthcareService","http://hl7.org/fhir/StructureDefinition/Group","http://hl7.org/fhir/StructureDefinition/Location","http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MoneyQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},SimpleQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{max:0,type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},IdentityProvider:{elements:{authorizeUrl:{min:1,type:[{code:"string"}]},tokenUrl:{min:1,type:[{code:"string"}]},tokenAuthMethod:{type:[{code:"code"}]},userInfoUrl:{min:1,type:[{code:"string"}]},clientId:{min:1,type:[{code:"string"}]},clientSecret:{min:1,type:[{code:"string"}]},usePkce:{type:[{code:"boolean"}]},useSubject:{type:[{code:"boolean"}]}}}};function jt(r){return new Kr(r).parse()}var Se=Hr(ci),zr=Object.create(null),ui=Object.create(null),Os={"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 fi(r){let e;return e=ui[r],e||(e=ui[r]=Object.create(null)),e}function Wt(r){let t=(Array.isArray(r)?r:r.entry?.map(n=>n.resource)??[]).filter(n=>n?.resourceType==="StructureDefinition");tn(t);for(let n of t)$t(n)}function $t(r){if(!r?.name)throw new Error("Failed loading StructureDefinition from bundle");if(r.resourceType!=="StructureDefinition")return;let e=jt(r),t=Os[r.url],n,i;t?(n=Se,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=Se,i=r.type):(n=fi(r.url),i=r.type),n[i]=e;for(let o of e.innerTypes)o.parentType=e,n[o.name]=o;zr[r.url]=e}function Jr(){return Se}function Yr(r){return!!Se[r]}function Me(r,e){if(e){let t=fi(e)[r];if(t)return t}return Se[r]}function Z(r,e){let t=Me(r,e);if(!t)throw new d(E("Unknown data type: "+r));return t}function Zr(r){let e=Se[r];return e&&Gt(e)}function Xr(r){return!!zr[r]}function en(r){return zr[r]}var Kr=class{constructor(e){if(!e.snapshot?.element||e.snapshot.element.length===0)throw new Error(`No snapshot defined for StructureDefinition '${e.name}'`);this.root=e.snapshot.element[0],this.elements=e.snapshot.element.slice(1),this.elementIndex=Object.create(null),this.index=0,this.resourceSchema={name:e.name,path:this.root.path,title:e.title,type:e.type,url:e.url,version:e.version,kind:e.kind,description:Ms(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=Qr(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[Qr(e,n.path)]=t;break}n=n.parent}if(!n){let i=Qr(e,this.root.path);e.isSummary&&this.resourceSchema.summaryProperties?.add(i.replace("[x]","")),t.min>0&&this.resourceSchema.mandatoryProperties?.add(i.replace("[x]","")),this.resourceSchema.elements[i]=t}this.checkFieldExit(e)}e=this.next()}return this.checkFieldExit(),this.innerTypes.length>0&&(this.resourceSchema.innerTypes=this.innerTypes),this.resourceSchema}checkFieldEnter(e,t){this.isInnerType(e)&&this.enterInnerType(e),this.slicingContext&&!De(this.slicingContext.path,e?.path)&&(this.slicingContext=void 0),e.slicing&&!this.slicingContext&&this.enterSlice(e,t)}enterInnerType(e){for(;this.backboneContext&&!De(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;let t=qt(e);this.backboneContext={type:{name:t,type:t,path:e.path,title:e.label,description:e.definition,elements:{},constraints:this.parseElementDefinition(e).constraints,innerTypes:[]},path:e.path,parent:De(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,t){Ds(e)&&!this.peek()?.sliceName||(t.slicing={discriminator:(e.slicing?.discriminator??[]).map(n=>{if(n.type!=="value"&&n.type!=="pattern"&&n.type!=="type")throw new Error(`Unsupported slicing discriminator type: ${n.type}`);return{path:n.path,type:n.type}}),slices:[],ordered:e.slicing?.ordered??!1,rule:e.slicing?.rules},this.slicingContext={field:t.slicing,path:e.path??""})}checkFieldExit(e=void 0){if(this.backboneContext&&!De(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!De(this.backboneContext.path,e?.path));else this.innerTypes.push(this.backboneContext.type),this.backboneContext=void 0}next(){let e=this.peek();if(e)return this.index++,e}peek(){let e=this.elements[this.index];if(e){if(this.elementIndex[e.path??""]=e,e.contentReference){let t=e.contentReference.slice(e.contentReference.indexOf("#")+1),n=this.elementIndex[t];return n?{...n,id:e.id,path:e.path,min:e.min??n.min,max:e.max??n.max,base:{path:n.base?.path??t,min:e.base?.min??n.base?.min??n.min,max:e.base?.max??n.base?.max??n.max},contentReference:e.contentReference,definition:e.definition}:void 0}return e}}isInnerType(e){let t=this.peek();return!!(De(e?.path,t?.path)&&e.type?.some(n=>["BackboneElement","Element"].includes(n.code)))}parseSliceStart(e){if(!this.slicingContext)throw new Error(`Invalid slice start before discriminator: ${e.sliceName} (${e.id})`);this.slicingContext.current={...this.parseElementDefinition(e),name:e.sliceName??"",definition:e.definition,elements:{}},this.slicingContext.field.slices.push(this.slicingContext.current)}parseElementDefinitionType(e){return(e.type??[]).map(t=>{let n;return(t.code==="BackboneElement"||t.code==="Element")&&(n=qt(e)),n||(n=X(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=pi(e.max),n=e.base?.max?pi(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:di(P(i,"fixed[x]")),pattern:di(P(i,"pattern[x]")),binding:e.binding}}};function Is(r,e){if(!r)return;let t=[];for(let n of e){t.push("_"+n);let i=Se[r.resourceType].elements[n+"[x]"];i&&t.push(...i.type.map(o=>n+O(o.code)))}for(let n of Object.getOwnPropertyNames(r))!e.includes(n)&&!t.includes(n)&&!ks.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(li):[li]},r}var li={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},ks=["resourceType","id","meta"];function pi(r){return r==="*"?Number.POSITIVE_INFINITY:Number.parseInt(r,10)}function Qr(r,e=""){return Vs(r.path,e)}function Vs(r,e){return r?e&&r.startsWith(e)?r.substring(e.length+1):r:""}function De(r,e){return!r||!e?!1:e.startsWith(r+".")||e===r}function di(r){return Array.isArray(r)&&r.length>0?r[0]:S(r)?void 0:r}function Ds(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 Ms(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 _s(r){return"elements"in r}function Ns(r){return!!r.visitPropertyAsync}function Ls(r,e,t,n){let i;return t&&_s(t)?i={schema:t,initialPath:n}:i=t,Ns(e)?on(g(r),e,i):ze(g(r),e,i)}async function Fs(r,e,t){return on(g(r),e,t)}function ze(r,e,t){new rn(r,e,t).crawl()}function on(r,e,t){return new nn(r,e,t).crawl()}var rn=class{constructor(e,t,n){this.root=e,this.visitor=t,this.schema=n?.schema??Z(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=Ee(e,t,{withPath:!0});this.visitor.visitProperty&&this.visitor.visitProperty(e,t,i,o,n);for(let s of o)if(s)for(let a of _e(s))this.crawlPropertyValue(a,i)}crawlPropertyValue(e,t){if(!Je(e.type)){let n=Z(e.type);this.crawlObject(e,n,t)}}},nn=class{constructor(e,t,n){this.root=e,this.visitor=t,this.schema=n?.schema??Z(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=Ee(e,t,{withPath:!0});if(this.visitor.visitPropertyAsync)for(let s of o)await this.visitor.visitPropertyAsync(e,t,i,s,n);for(let s of o)if(s)for(let a of _e(s))await this.crawlPropertyValue(a,i)}async crawlPropertyValue(e,t){if(!Je(e.type)){let n=Z(e.type);await this.crawlObject(e,n,t)}}};function Ee(r,e,t){if(r===void 0)return[void 0];if(e==="$this")return[r];let n=t?.withPath?mi:P,[i,...o]=e.split("."),s=[n(r,i,t)];for(let a of o){let c=[];for(let u of s)if(Array.isArray(u))for(let l of u)c.push(n(l,a,t));else(t?.withPath&&u&&u.value!==void 0||!t?.withPath&&u!==void 0)&&c.push(n(u,a,t));s=c}return s}function mi(r,e,t){let n=r.path;return Us(P(r,e,t),n,e)}function Us(r,e,t){let n=e?e+".":"";return r===void 0?{type:"undefined",value:void 0,path:`${n}${t}`}:Array.isArray(r)?r.map((i,o)=>({...i,path:`${n}${t}[${o}]`})):{...r,path:`${n}${t}`}}var Ht={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"};function Je(r){return r==="undefined"||r in Ht}var Ye={base64Binary:/^([A-Za-z\d+/]{4})*([A-Za-z\d+/]{2}==|[A-Za-z\d+/]{3}=)?$/,canonical:/^\S*$/,code:/^[^\s]+( [^\s]+)*$/,date:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1]))?)?$/,dateTime:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1])(T([01]\d|2[0-3])(:[0-5]\d:([0-5]\d|60)(\.\d{1,9})?)?)?)?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00)?)?)?$/,id:/^[A-Za-z0-9\-.]{1,64}$/,instant:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])T([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00))$/,markdown:/^[\s\S]+$/,oid:/^urn:oid:[0-2](\.(0|[1-9]\d*))+$/,string:/^[\s\S]+$/,time:/^([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?$/,uri:/^\S*$/,url:/^\S*$/,uuid:/^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,xhtml:/.*/},Bs={"ele-1":!0,"dom-3":!0,"org-1":!0,"sdf-19":!0};function qs(r,e){if(!r.resourceType)throw new d(h("Missing resource type"));return new Qt(g(r),e).validate()}function js(r,e){return new Qt(r,e).validate()}var Qt=class{constructor(e,t){this.issues=[],this.root=e,this.currentResource=[],I(e.value)&&this.currentResource.push(e.value),t?.profile?this.schema=jt(t.profile):this.schema=Z(e.type)}validate(){this.constraintsCheck({...this.root,path:this.schema.path},this.schema),sn(this.root.value,this.schema.path,this.issues),ze(this.root,this,{schema:this.schema,initialPath:this.schema.path});let e=this.issues,t=!1;for(let n of e)n.severity==="error"&&(t=!0);if(t)throw new d({resourceType:"OperationOutcome",issue:e});return e}onExitObject(e,t,n){this.checkAdditionalProperties(t,n.elements,t.path)}onEnterResource(e,t){this.currentResource.push(t.value)}onExitResource(){this.currentResource.pop()}visitProperty(e,t,n,i,o){let s=o.elements[t];if(!s)throw new Error(`Missing element validation schema for ${t}`);for(let a of i){if(!this.checkPresence(a,s,n))return;let c;if(s.isArray){if(!Array.isArray(a)){this.issues.push(v(n,"Expected array of values for property"));return}c=a}else{if(Array.isArray(a)){this.issues.push(v(n,"Expected single value for property"));return}c=[a]}(c.length<s.min||c.length>s.max)&&this.issues.push(v(s.path,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${c.length}`)),Gs(a,s)||this.issues.push(v(n,"Value did not match expected pattern"));let u=s.slicing?Object.fromEntries(s.slicing.slices.map(l=>[l.name,0])):void 0;for(let l of c){this.constraintsCheck(l,s),this.referenceTypeCheck(l,s),this.checkPropertyValue(l);let m=Hs(l,s.slicing);m&&u&&(u[m]+=1)}this.validateSlices(s.slicing?.slices,u,n)}}checkPresence(e,t,n){return!Array.isArray(e)&&e.value===void 0?(t.min>0&&this.issues.push(v(e.path,"Missing required property")),!1):S(e)?(this.issues.push(v(n,"Invalid empty value")),!1):!0}checkPropertyValue(e){Je(e.type)&&this.validatePrimitiveType(e)}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(v(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=$s(e,s,t);if(a){let c,u;a.startsWith("_")?(c=a.slice(1),u=s.slice(1)):(c="_"+a,u="_"+s),c in o&&o[c]!==u&&this.issues.push(ce("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(ce("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(v(`${n}.${s}`,`Invalid additional property "${s}"`))}}constraintsCheck(e,t){let n=t.constraints;if(n){for(let i of n)if(i.severity==="error"&&!(i.key in Bs)&&!this.isExpressionTrue(i,e)){this.issues.push($r(e.path,i));return}}}referenceTypeCheck(e,t){if(e.type!=="Reference")return;let n=e.value;if(!ue(n))return;let i=n.reference.split("/")[0];if(!i)return;let o=t.type.find(m=>m.code==="Reference")?.targetProfile;if(!o)return;let s=Dr+"/fhir/StructureDefinition/",a=s+"Resource",c=s+i,u="https://medplum.com/fhir/StructureDefinition/",l=u+i;for(let m of o)if(m===a||m===c||m===l||!m.startsWith(s)&&!m.startsWith(u))return;this.issues.push(ce("warning","structure",`Invalid reference: got "${i}", expected "${o.join('", "')}"`,e.path))}isExpressionTrue(e,t){let n={"%context":t,"%ucum":g(Vr)};this.currentResource.length>0&&(n["%resource"]=g(this.currentResource[this.currentResource.length-1])),I(this.root.value)&&(n["%rootResource"]=this.root);try{let i=w(e.expression,[t],n);return i.length===1&&i[0].value===!0}catch(i){return this.issues.push(Gr(t.path,"Error evaluating invariant expression",i,{fhirpath:e.expression})),!1}}validatePrimitiveType(e){let[t,n]=Qs(e),i=e.path;if(t){let{type:o,value:s}=t;if(!(o in Ht)){this.issues.push(v(i,`Invalid JSON type: ${o} is not a valid FHIR type`));return}let a=Ht[o];if(typeof s!==a){s!==null&&this.issues.push(v(i,`Invalid JSON type: expected ${a}, but got ${typeof s}`));return}a==="string"?this.validateString(s,o,i):a==="number"&&this.validateNumber(s,o,i)}n&&ze(n,this,{schema:Z("Element"),initialPath:i})}validateString(e,t,n){if(!e.trim()){this.issues.push(v(n,"String must contain non-whitespace content"));return}let i=Ye[t];i&&!i.exec(e)&&this.issues.push(v(n,"Invalid "+t+" format"))}validateNumber(e,t,n){Number.isNaN(e)||!Number.isFinite(e)?this.issues.push(v(n,"Invalid numeric value")):Ws(t)&&!Number.isInteger(e)?this.issues.push(v(n,"Expected number to be an integer")):t===p.positiveInt&&e<=0?this.issues.push(v(n,"Expected number to be positive")):t===p.unsignedInt&&e<0&&this.issues.push(v(n,"Expected number to be non-negative"))}};function Ws(r){return r===p.integer||r===p.positiveInt||r===p.unsignedInt}function $s(r,e,t){let n="";e.startsWith("_")&&(e=e.slice(1),n="_");let i=e.split(/(?=[A-Z])/g),o="";for(let s of i){o+=s;let a=o+"[x]";if(t[a])return P(r,o)?n+a:void 0}}function sn(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(v(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?t.push(v(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!r[s]?.[a]?t.push(v(`${o}[${a}]`,"Invalid null value")):i[a]&&sn(i[a],`${o}[${a}]`,t);else typeof i=="object"&&sn(i,o,t)}}function Gs(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&&!Ne(t,e.pattern)||e.fixed&&!ee(t,e.fixed))}function Kt(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 Ne(r,i.pattern);if(i.fixed)return ee(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 Hs(r,e){if(e){for(let t of e.slices)if(e.discriminator.every(n=>_e(Ee(r,n.path))?.some(i=>Kt(i,n,t))))return t.name}}function Qs(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 f(r){return[{type:p.boolean,value:r}]}function g(r){return r==null?{type:"undefined",value:void 0}:Number.isSafeInteger(r)?{type:p.integer,value:r}:typeof r=="number"?{type:p.decimal,value:r}:typeof r=="boolean"?{type:p.boolean,value:r}:typeof r=="string"?{type:p.string,value:r}:k(r)?{type:p.Quantity,value:r}:I(r)?{type:r.resourceType,value:r}:Zt(r)?{type:p.CodeableConcept,value:r}:Yt(r)?{type:p.Coding,value:r}:{type:p.BackboneElement,value:r}}function _(r){return r.length===0?!1:!!r[0].value}function W(r,e){if(r.length!==0){if(r.length===1&&(!e||r[0].type===e))return r[0];throw new Error(`Expected singleton of type ${e}, but found ${JSON.stringify(r)}`)}}function P(r,e,t){if(!r.value)return;let n=et(r.type,e,t?.profileUrl);return n?Ti(r,e,n):Si(r,e)}function Ti(r,e,t){let n=r.value,i=t.type;if(!i||i.length===0)return;let o,s="undefined",a,c=t.path.lastIndexOf("."),u=t.path.substring(c+1);for(let l of i){let m=u.replace("[x]",O(l.code));if(o=n[m],a=n["_"+m],o!==void 0||a!==void 0){s=l.code;break}}if(a)if(Array.isArray(o)){o=o.slice();for(let l=0;l<Math.max(o.length,a.length);l++)o[l]=vi(o[l],a[l])}else o=vi(o,a);if(!S(o))return(s==="Element"||s==="BackboneElement")&&(s=t.type[0].code),Array.isArray(o)?o.map(l=>hi(l,s)):hi(o,s)}function hi(r,e){return e==="Resource"&&I(r)&&(e=r.resourceType),{type:e,value:r}}function Si(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(g):n=g(i)}else{let i=e.endsWith("[x]")?e.substring(0,e.length-3):e;for(let o of Object.values(p)){let s=i+O(o);if(s in t){let a=t[s];Array.isArray(a)?n=a.map(c=>({type:o,value:c})):n={type:o,value:a};break}}}if(Array.isArray(n)){if(n.length===0||S(n[0]))return}else if(S(n))return;return n}function Ze(r){let e=[];for(let t of r){let n=!1;for(let i of e)if(_(zt(t,i))){n=!0;break}n||e.push(t)}return e}function an(r){return f(!_(r))}function cn(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?f(!1):f(r.every((t,n)=>_(zt(t,e[n]))))}function un(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?f(!0):f(r.some((t,n)=>!_(zt(t,e[n]))))}function zt(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?f(Math.abs(t-n)<1e-8):k(t)&&k(n)?f(dn(t,n)):f(typeof t=="object"&&typeof n=="object"?fn(r,e):t===n)}function Jt(r,e){return r.length===0&&e.length===0?f(!0):r.length!==e.length?f(!1):(r.sort(yi),e.sort(yi),f(r.every((t,n)=>_(Ei(t,e[n])))))}function Ei(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"?f(Math.abs(s-a)<.01):k(s)&&k(a)?f(dn(s,a)):f(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"?fn({...s,id:void 0},{...a,id:void 0}):typeof s=="string"&&typeof a=="string"?s.toLowerCase()===a.toLowerCase():s===a)}function yi(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 Xe(r,e){let{value:t}=r;if(t==null)return!1;switch(e){case"Boolean":return typeof t=="boolean";case"Decimal":case"Integer":return typeof t=="number";case"Date":return ln(t);case"DateTime":return be(t);case"Time":return typeof t=="string"&&!!/^T\d/.exec(t);case"Period":return pn(t);case"Quantity":return k(t);default:return r.type===e||typeof t=="object"&&t?.resourceType===e}}function ln(r){return typeof r=="string"&&!!Ye.date.exec(r)}function be(r){return typeof r=="string"&&!!Ye.dateTime.exec(r)}function pn(r){return!!(r&&typeof r=="object"&&("start"in r&&be(r.start)||"end"in r&&be(r.end)))}function Ks(r){if(r){if(ln(r))return{start:gi(r,"0000-00-00T00:00:00.000Z"),end:gi(r,"xxxx-12-31T23:59:59.999Z")};if(be(r))return{start:r,end:r};if(pn(r))return r}}function gi(r,e){return r+e.substring(r.length)}function k(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 fn(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(xi(o)&&xi(s)){if(!fn(o,s))return!1}else if(o!==s)return!1}return!0}function xi(r){return r!==null&&typeof r=="object"}function vi(r,e){if(e){if(typeof e!="object")throw new Error("Primitive extension must be an object");return zs(r??{},e)}return r}function zs(r,e){return delete e.__proto__,delete e.constructor,Object.assign(r,e)}function te(r){let e=le(r),t=Ci(r);return t===e?{reference:e}:{reference:e,display:t}}function le(r){return ue(r)?r.reference:`${r.resourceType}/${r.id}`}function pe(r){if(r)return ue(r)?r.reference.split("/")[1]:r.id}function Js(r){if(r?.reference===void 0)throw new d(h("Reference missing reference property."));let[e,t]=r.reference.split("/");if(e===""||t===""||t===void 0)throw new d(h("Unable to parse reference string."));return[e,t]}function Ri(r){return r.resourceType==="Patient"||r.resourceType==="Practitioner"||r.resourceType==="RelatedPerson"}function Ci(r){if(Ri(r)){let e=Ys(r);if(e)return e}if(r.resourceType==="Device"){let e=Zs(r);if(e)return e}if(r.resourceType==="MedicationRequest"&&r.medicationCodeableConcept)return Le(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]),Zt(e))return Le(e);if(Ii(e))return e.text}return le(r)}function Ys(r){let e=r.name;if(e&&e.length>0)return Fe(e[0])}function Zs(r){let e=r.deviceName;if(e&&e.length>0)return e[0].name}function Xs(r){if(!("photo"in r))return;let e=r.photo;if(e)if(Array.isArray(e))for(let t of e){let n=bi(t);if(n)return n}else return bi(e)}function bi(r){if(r.url&&r.contentType?.startsWith("image/"))return r.url}function ea(r){return r?new Date(r):void 0}function tt(r,e){let t=new Date(r);t.setUTCHours(0,0,0,0);let n=e?new Date(e):new Date;n.setUTCHours(0,0,0,0);let i=t.getUTCFullYear(),o=t.getUTCMonth(),s=t.getUTCDate(),a=n.getUTCFullYear(),c=n.getUTCMonth(),u=n.getUTCDate(),l=a-i;(c<o||c===o&&u<s)&&l--;let m=a*12+c-(i*12+o);u<s&&m--;let x=Math.floor((n.getTime()-t.getTime())/(1e3*60*60*24));return{years:l,months:m,days:x}}function ta(r,e){let{years:t,months:n,days:i}=tt(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 ra(r){let e={};return Pi(r.item,e),e}function Pi(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer[0]),Pi(t.item,e)}function na(r){let e={};return wi(r.item,e),e}function wi(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]?e[t.linkId]=[...e[t.linkId],...t.answer]:e[t.linkId]=t.answer),wi(t.item,e)}function Ai(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 ia(r,e,t){let n=r.identifier;if(!n){r.identifier=[{system:e,value:t}];return}for(let i of n)if(i.system===e){i.value=t;return}n.push({system:e,value:t})}function oa(r,...e){let t=X(r,...e);if(!t)return;let n=P({type:"Extension",value:t},"value[x]");if(n)return Array.isArray(n)?n[0].value:n.value}function X(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 rt(r,e){return JSON.stringify(r,sa,e?2:void 0)??""}function sa(r,e){return!aa(r)&&S(e)?void 0:e}function aa(r){return!!/\d+$/.exec(r)}function S(r){if(r==null)return!0;let e=typeof r;return e==="string"||e==="object"?!Q(r):!1}function Q(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 ee(r,e,t){return r===e||S(r)&&S(e)?!0:S(r)||S(e)?!1:Array.isArray(r)&&Array.isArray(e)?ca(r,e):Array.isArray(r)||Array.isArray(e)?!1:b(r)&&b(e)?ua(r,e,t):(b(r)||b(e),!1)}function ca(r,e){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(!ee(r[t],e[t]))return!1;return!0}function ua(r,e,t){let n=new Set;Object.keys(r).forEach(i=>n.add(i)),Object.keys(e).forEach(i=>n.add(i)),t==="meta"&&(n.delete("versionId"),n.delete("lastUpdated"),n.delete("author"));for(let i of n){let o=r[i],s=e[i];if(!ee(o,s,i))return!1}return!0}function Ne(r,e){return S(r)?!0:S(e)?!1:Array.isArray(r)&&Array.isArray(e)?la(r,e):Array.isArray(r)||Array.isArray(e)?!1:b(r)&&b(e)?pa(r,e):b(r)||b(e)?!1:r===e}function la(r,e){return e.every(t=>r.some(n=>Ne(n,t)))}function pa(r,e){return Object.entries(e).every(([t,n])=>t in r&&Ne(r[t],n))}function de(r){return r===void 0?r:JSON.parse(JSON.stringify(r))}function da(r){return!!/^\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/i.exec(r)}function b(r){return r!==null&&typeof r=="object"}function mn(r){return r.every(Oi)}function Oi(r){return typeof r=="string"}function Yt(r){return b(r)&&"code"in r&&typeof r.code=="string"}function Zt(r){return b(r)&&"coding"in r&&Array.isArray(r.coding)&&r.coding.every(Yt)}function Ii(r){return b(r)&&"text"in r&&typeof r.text=="string"}var ki=[];for(let r=0;r<256;r++)ki.push(r.toString(16).padStart(2,"0"));function hn(r){let e=gn(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=ki[t[i]];return n.join("")}function yn(r){let e=gn(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=String.fromCharCode(t[i]);return window.btoa(n.join(""))}function gn(r){return ArrayBuffer.isView(r)?r.buffer:r}function O(r){return r?r.charAt(0).toUpperCase()+r.substring(1):""}function fa(r){return r===r.toLowerCase()&&r!==r.toUpperCase()}function er(r){return r.length>0&&r.startsWith(r[0].toUpperCase())}function Re(r,e){let t=r+".";if(e.startsWith(t))return e.slice(t.length)}function Xt(r,e){return r.coding?.find(t=>t.system===e)?.code}function ma(r,e,t){r.coding||(r.coding=[]);let n=r.coding.find(i=>i.system===e);n?n.code=t:r.coding.push({system:e,code:t})}function ha(r,e,t,n){return r.qualifiedInterval?.find(i=>Vi(i,e)&&va(i,t,r.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function ya(r,e,t){return r.qualifiedInterval?.find(n=>Vi(n,e)&&t.includes(n.condition))}function Vi(r,e){return ga(r,e)&&xa(r,e)}function ga(r,e){return!r.gender||r.gender===e.gender}function xa(r,e){return!r.age||xn(tt(e.birthDate).years,r.age)}function va(r,e,t){return!!r.range&&xn(e,r.range,t)}function xn(r,e,t){return(e.low?.value===void 0||Mi(r,e.low.value,t))&&(e.high?.value===void 0||Di(r,e.high.value,t))}function Ta(r,e){return parseFloat(r.toFixed(e))}function Sa(r,e,t){return H(r,t)===H(e,t)}function Ea(r,e,t){return H(r,t)<H(e,t)}function ba(r,e,t){return H(r,t)>H(e,t)}function Di(r,e,t){return H(r,t)<=H(e,t)}function Mi(r,e,t){return H(r,t)>=H(e,t)}function H(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}function Ra(r,e,t){return r.find(n=>typeof e=="string"?Xt(n.code||{},t)===e:Xt(n.code||{},t)===Xt(e,t))}function _e(r){if(r!==void 0)return Array.isArray(r)?r:[r]}function Ca(r){return Array.isArray(r)?r[0]:r}var tr=r=>new Promise(e=>{setTimeout(e,r)});function rr(r,e,t){let n=[];for(let i=0;i<t-1;i++){let o=r.indexOf(e);if(o<0)break;n.push(r.slice(0,o)),r=r.slice(o+e.length)}return n.push(r),n}function vn(r){let e,t=!1;return function(){return t||(e=r(),t=!0),e}}function Ce(r,e){return r?(r.push(e),r):[e]}function nt(r){return r.sort((e,t)=>e.localeCompare(t))}function nr(r){return r.endsWith("/")?r:r+"/"}function _i(r){return r.startsWith("/")?r.slice(1):r}function U(r,e){return new URL(_i(e),nr(r.toString())).toString()}function Tn(r,e){return U(r,e).toString().replace("http://","ws://").replace("https://","wss://")}function Sn(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 Ni=/^(([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 Pa(r){return Ni.test(r)}function wa(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 Aa(r,e){return new Map(r.entry?.filter(n=>!!n.resource).map(n=>[Ai(n.resource,e),n.resource]).filter(([n])=>n!==void 0))}function Oa(r,e){if(r?.meta?.profile?.includes(e)){let t=r.meta.profile.indexOf(e);r.meta.profile.splice(t,1)}return r}function Ia(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.flat()):i!==void 0&&t.push(i)}return t}function ka(r){if(!r)return"";switch(r.type){case"Address":return Fi(r.value);case"CodeableConcept":return Le(r.value);case"Coding":return En(r.value);case"ContactPoint":return r.value.value;case"HumanName":return Fe(r.value);case"Quantity":return re(r.value);case"Reference":return Li(r.value);default:return r.value.toString()}}function Li(r){return r?r.display??r.reference??rt(r):""}function Fi(r,e){let t=[];if(r.line&&t.push(...r.line),r.city||r.state||r.postalCode){let n=[];r.city&&n.push(r.city),r.state&&n.push(r.state),r.postalCode&&n.push(r.postalCode),t.push(n.join(", "))}return r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.join(e?.lineSeparator??", ").trim()}function Fe(r,e){let t=[];if(r.prefix&&e?.prefix!==!1&&t.push(...r.prefix),r.given&&t.push(...r.given),r.family&&t.push(r.family),r.suffix&&e?.suffix!==!1&&t.push(...r.suffix),r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.length===0){let n=Pe(r.text);if(n)return n}return t.join(" ").trim()}function Va(r){let e=[];return r.given&&e.push(...r.given),e.join(" ").trim()}function Da(r){return Pe(r.family)??""}function or(r){return r instanceof Date&&!isNaN(r.getTime())}function Ma(r,e,t){if(!r)return"";let n=new Date(r);return or(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...t})):""}function Ui(r,e,t){if(!r)return"";let n=new Date("2000-01-01T"+r+"Z");return or(n)?n.toLocaleTimeString(e,t):""}function ir(r,e,t){if(!r)return"";let n=new Date(r);return or(n)?n.toLocaleString(e,t):""}function _a(r,e,t){return!r||!r.start&&!r.end?"":ir(r.start,e,t)+" - "+ir(r.end,e,t)}var Na={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},La={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},Fa={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function Ua(r){if(!r)return"";let e=[];return Ba(e,r.repeat),r.event&&e.push(r.event.map(t=>ir(t)).join(", ")),O(e.join(" ").trim())}function Ba(r,e){if(!e?.periodUnit)return;let t=e.frequency??1,n=e.period??1,i=e.periodUnit;t===1&&n===1?r.push(Na[i]):(t===1?r.push("once"):r.push(t+" times"),n===1?r.push("per "+La[i]):r.push("per "+n+" "+Fa[i])),e.dayOfWeek&&r.push("on "+e.dayOfWeek.map(O).join(", ")),e.timeOfDay&&r.push("at "+e.timeOfDay.map(o=>Ui(o)).join(", "))}function qa(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=$a(n.value,e),`> ${re(n,e)}`):`>= ${re(n,e)}`:n?.value===void 0&&i?.value!==void 0?t&&e!==void 0?(i.value=Wa(i.value,e),`< ${re(i,e)}`):`<= ${re(i,e)}`:(n?.unit===i?.unit&&delete n?.unit,`${re(n,e)} - ${re(i,e)}`)}function re(r,e){if(!r)return"";let t=[];return r.comparator&&(t.push(r.comparator),t.push(" ")),r.value!==void 0&&(e!==void 0?t.push(r.value.toFixed(e)):t.push(r.value)),r.unit&&(r.unit!=="%"&&t[t.length-1]!==" "&&t.push(" "),t.push(r.unit)),t.join("").trim()}function ja(r){return r?.value===void 0?"":r.value.toLocaleString(void 0,{style:"currency",currency:r.currency??"USD",currencyDisplay:"narrowSymbol"})}function Le(r){if(!r)return"";let e=Pe(r.text);return e||(r.coding?r.coding.map(t=>En(t)).join(", "):"")}function En(r,e){let t=Pe(r?.display);if(t){let n=e?Pe(r?.code):void 0;return`${t}${n?" ("+n+")":""}`}return Pe(r?.code)??""}function Bi(r){if(!r)return"";let e=[];if(r.valueQuantity)e.push(re(r.valueQuantity));else if(r.valueCodeableConcept)e.push(Le(r.valueCodeableConcept));else{let t=Pe(r.valueString);t&&e.push(t)}return"component"in r&&e.push(r.component.map(t=>Bi(t)).join(" / ")),e.join(" / ").trim()}function Pe(r){return typeof r=="string"?r:void 0}function Wa(r,e,t=1){return(qi(r,e)+t)*Math.pow(10,-e)}function $a(r,e,t=1){return(qi(r,e)-t)*Math.pow(10,-e)}function qi(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}var p={Address:"Address",Age:"Age",Annotation:"Annotation",Attachment:"Attachment",BackboneElement:"BackboneElement",CodeableConcept:"CodeableConcept",Coding:"Coding",ContactDetail:"ContactDetail",ContactPoint:"ContactPoint",Contributor:"Contributor",Count:"Count",DataRequirement:"DataRequirement",Distance:"Distance",Dosage:"Dosage",Duration:"Duration",Expression:"Expression",Extension:"Extension",HumanName:"HumanName",Identifier:"Identifier",MarketingStatus:"MarketingStatus",Meta:"Meta",Money:"Money",Narrative:"Narrative",ParameterDefinition:"ParameterDefinition",Period:"Period",Population:"Population",ProdCharacteristic:"ProdCharacteristic",ProductShelfLife:"ProductShelfLife",Quantity:"Quantity",Range:"Range",Ratio:"Ratio",Reference:"Reference",RelatedArtifact:"RelatedArtifact",SampledData:"SampledData",Signature:"Signature",SubstanceAmount:"SubstanceAmount",SystemString:"http://hl7.org/fhirpath/System.String",Timing:"Timing",TriggerDefinition:"TriggerDefinition",UsageContext:"UsageContext",base64Binary:"base64Binary",boolean:"boolean",canonical:"canonical",code:"code",date:"date",dateTime:"dateTime",decimal:"decimal",id:"id",instant:"instant",integer:"integer",markdown:"markdown",oid:"oid",positiveInt:"positiveInt",string:"string",time:"time",unsignedInt:"unsignedInt",uri:"uri",url:"url",uuid:"uuid"};function Ga(r){for(let e of r.entry??[]){let t=e.resource;t.resourceType==="SearchParameter"&&sr(t)}}function tn(r){let e=Array.isArray(r)?r:r.entry?.map(t=>t.resource)??[];for(let t of e)t?.resourceType==="StructureDefinition"&&t.kind==="resource"&&Wi(t.type)}function Wi(r){let e=N.types[r];return e||(e={searchParamsDetails:{}},N.types[r]=e),e.searchParams||(e.searchParams={_id:{base:[r],code:"_id",type:"token",expression:r+".id"},_lastUpdated:{base:[r],code:"_lastUpdated",type:"date",expression:r+".meta.lastUpdated"},_compartment:{base:[r],code:"_compartment",type:"reference",expression:r+".meta.compartment"},_profile:{base:[r],code:"_profile",type:"uri",expression:r+".meta.profile"},_security:{base:[r],code:"_security",type:"token",expression:r+".meta.security"},_source:{base:[r],code:"_source",type:"uri",expression:r+".meta.source"},_tag:{base:[r],code:"_tag",type:"token",expression:r+".meta.tag"}}),e}function sr(r){for(let e of r.base??[]){let t=Wi(e);t.searchParams||(t.searchParams={}),t.searchParams[r.code]=r}}function qt(r){let e=r.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?$i((r.base?.path??r.path)?.split(".")):e}function $i(r){return r.length===1?r[0]:r.map(O).join("")}function Gt(r){return r.kind==="resource"&&r.name!=="Resource"&&r.name!=="DomainResource"}function Ha(){return Object.values(Jr()).filter(Gt).map(r=>r.name)}function Qa(r){return N.types[r]?.searchParams}function Ka(r,e){return N.types[r]?.searchParams?.[e]}function za(r){let e=r.replaceAll("[x]","").split(".").pop();return Gi(e)}function Gi(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(Ya).join(" ").replace("_"," ").replace(/\s+/g," ")}var Ja=new Set(["ID","IP","PKCE","JWKS","URI","URL","OMB","UDI"]);function Ya(r){let e=r.toUpperCase();return r===e?r:Ja.has(e)?e:e.charAt(0)+r.slice(1)}function et(r,e,t){let n=Me(r,t);if(n)return Hi(n.elements,e)}function Hi(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 I(r){return!!(r&&typeof r=="object"&&"resourceType"in r)}function ue(r){return!!(r&&typeof r=="object"&&"reference"in r&&typeof r.reference=="string")}var N={types:{}};function bn(r){switch(r.type){case p.uuid:case p.uri:case p.url:case p.string:case p.oid:case p.markdown:case p.id:case p.code:case p.canonical:case p.base64Binary:case p.SystemString:case p.date:case p.dateTime:case p.instant:return r.value;case p.Identifier:return`${r.value.system??""}|${r.value.value}`;case p.Coding:return ji(r.value);case p.CodeableConcept:return r.value.coding?.map(ji).join(",")??r.value.text;case p.HumanName:return r.value.text?r.value.text:Fe(r.value);case p.unsignedInt:case p.positiveInt:case p.integer:case p.decimal:return r.value.toString();case p.boolean:return r.value?"true":"false";case p.Extension:return r.value.url;case p.ContactPoint:return r.value.value;case p.Quantity:case p.Age:case p.Count:case p.Duration:return`${r.value.value}|${r.value.system??""}|${r.value.code??r.value.unit??""}`;case p.Reference:return r.value.reference;default:return I(r.value)?te(r.value).reference:JSON.stringify(r)}}function ji(r){return r?`${r.system??""}|${r.code}`:""}function Ue(r){if(r.startsWith("T"))return r+"T00:00:00.000Z".substring(r.length);if(r.length<=10)return r;try{return new Date(r).toISOString()}catch{return r}}var ne=()=>[],V={empty:(r,e)=>f(e.length===0||e.every(t=>S(t.value))),hasValue:(r,e)=>f(e.length!==0),exists:(r,e,t)=>t?f(e.filter(n=>_(t.eval(r,[n]))).length>0):f(e.length>0&&e.every(n=>!S(n.value))),all:(r,e,t)=>f(e.every(n=>_(t.eval(r,[n])))),allTrue:(r,e)=>{for(let t of e)if(!t.value)return f(!1);return f(!0)},anyTrue:(r,e)=>{for(let t of e)if(t.value)return f(!0);return f(!1)},allFalse:(r,e)=>{for(let t of e)if(t.value)return f(!1);return f(!0)},anyFalse:(r,e)=>{for(let t of e)if(!t.value)return f(!0);return f(!1)},subsetOf:(r,e,t)=>{if(e.length===0)return f(!0);let n=t.eval(r,we(r));return n.length===0?f(!1):f(e.every(i=>n.some(o=>o.value===i.value)))},supersetOf:(r,e,t)=>{let n=t.eval(r,we(r));return n.length===0?f(!0):e.length===0?f(!1):f(n.every(i=>e.some(o=>o.value===i.value)))},count:(r,e)=>[{type:p.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)=>f(e.length===V.distinct(r,e).length),where:(r,e,t)=>e.filter(n=>_(t.eval(r,[n]))),select:(r,e,t)=>e.map(n=>t.eval({parent:r,variables:{$this:n}},[n])).flat(),repeat:ne,ofType:(r,e,t)=>e.filter(n=>n.type===t.name),single:(r,e)=>{if(e.length>1)throw new Error("Expected input length one for single()");return e.length===0?[]:e.slice(0,1)},first:(r,e)=>e.length===0?[]:e.slice(0,1),last:(r,e)=>e.length===0?[]:e.slice(e.length-1,e.length),tail:(r,e)=>e.length===0?[]:e.slice(1,e.length),skip:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new Error("Expected a number for skip(num)");return n>=e.length?[]:n<=0?e:e.slice(n,e.length)},take:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new Error("Expected a number for take(num)");return n>=e.length?e:n<=0?[]:e.slice(0,n)},intersect:(r,e,t)=>{if(!t)return e;let n=t.eval(r,we(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,we(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,we(r));return Ze([...e,...n])},combine:(r,e,t)=>{if(!t)return e;let n=t.eval(r,we(r));return[...e,...n]},htmlChecks:(r,e,t)=>[g(!0)],iif:(r,e,t,n,i)=>{let o=t.eval(r,e);if(o.length>1||o.length===1&&typeof o[0].value!="boolean")throw new Error("Expected criterion to evaluate to a Boolean");return _(o)?n.eval(r,e):i?i.eval(r,e):[]},toBoolean:(r,e)=>{if(e.length===0)return[];let[{value:t}]=z(e,1);if(typeof t=="boolean")return[{type:p.boolean,value:t}];if(typeof t=="number"&&(t===0||t===1))return f(!!t);if(typeof t=="string"){let n=t.toLowerCase();if(["true","t","yes","y","1","1.0"].includes(n))return f(!0);if(["false","f","no","n","0","0.0"].includes(n))return f(!1)}return[]},convertsToBoolean:(r,e)=>e.length===0?[]:f(V.toBoolean(r,e).length===1),toInteger:(r,e)=>{if(e.length===0)return[];let[{value:t}]=z(e,1);return typeof t=="number"?[{type:p.integer,value:t}]:typeof t=="string"&&/^[+-]?\d+$/.exec(t)?[{type:p.integer,value:parseInt(t,10)}]:typeof t=="boolean"?[{type:p.integer,value:t?1:0}]:[]},convertsToInteger:(r,e)=>e.length===0?[]:f(V.toInteger(r,e).length===1),toDate:(r,e)=>{if(e.length===0)return[];let[{value:t}]=z(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:p.date,value:Ue(t)}]:[]},convertsToDate:(r,e)=>e.length===0?[]:f(V.toDate(r,e).length===1),toDateTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=z(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:p.dateTime,value:Ue(t)}]:[]},convertsToDateTime:(r,e)=>e.length===0?[]:f(V.toDateTime(r,e).length===1),toDecimal:(r,e)=>{if(e.length===0)return[];let[{value:t}]=z(e,1);return typeof t=="number"?[{type:p.decimal,value:t}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(t)?[{type:p.decimal,value:parseFloat(t)}]:typeof t=="boolean"?[{type:p.decimal,value:t?1:0}]:[]},convertsToDecimal:(r,e)=>e.length===0?[]:f(V.toDecimal(r,e).length===1),toQuantity:(r,e)=>{if(e.length===0)return[];let[{value:t}]=z(e,1);return k(t)?[{type:p.Quantity,value:t}]:typeof t=="number"?[{type:p.Quantity,value:{value:t,unit:"1"}}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(t)?[{type:p.Quantity,value:{value:parseFloat(t),unit:"1"}}]:typeof t=="boolean"?[{type:p.Quantity,value:{value:t?1:0,unit:"1"}}]:[]},convertsToQuantity:(r,e)=>e.length===0?[]:f(V.toQuantity(r,e).length===1),toString:(r,e)=>{if(e.length===0)return[];let[{value:t}]=z(e,1);return t==null?[]:k(t)?[{type:p.string,value:`${t.value} '${t.unit}'`}]:[{type:p.string,value:t.toString()}]},convertsToString:(r,e)=>e.length===0?[]:f(V.toString(r,e).length===1),toTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=z(e,1);if(typeof t=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(t);if(n)return[{type:p.time,value:Ue("T"+n[1])}]}return[]},convertsToTime:(r,e)=>e.length===0?[]:f(V.toTime(r,e).length===1),indexOf:(r,e,t)=>B((n,i)=>n.indexOf(i),r,e,t),substring:(r,e,t,n)=>B((i,o,s)=>{let a=o,c=s?a+s:i.length;return a<0||a>=i.length?void 0:i.substring(a,c)},r,e,t,n),startsWith:(r,e,t)=>B((n,i)=>n.startsWith(i),r,e,t),endsWith:(r,e,t)=>B((n,i)=>n.endsWith(i),r,e,t),contains:(r,e,t)=>B((n,i)=>n.includes(i),r,e,t),upper:(r,e)=>B(t=>t.toUpperCase(),r,e),lower:(r,e)=>B(t=>t.toLowerCase(),r,e),replace:(r,e,t,n)=>B((i,o,s)=>i.replaceAll(o,s),r,e,t,n),matches:(r,e,t)=>B((n,i)=>!!new RegExp(i).exec(n),r,e,t),replaceMatches:(r,e,t,n)=>B((i,o,s)=>i.replaceAll(o,s),r,e,t,n),length:(r,e)=>B(t=>t.length,r,e),toChars:(r,e)=>B(t=>t?t.split(""):void 0,r,e),encode:ne,decode:ne,escape:ne,unescape:ne,trim:ne,split:ne,join:(r,e,t)=>{let n=t?.eval(r,we(r))[0]?.value??"";if(typeof n!="string")throw new Error("Separator must be a string.");return[{type:p.string,value:e.map(i=>i.value?.toString()??"").join(n)}]},abs:(r,e)=>K(Math.abs,r,e),ceiling:(r,e)=>K(Math.ceil,r,e),exp:(r,e)=>K(Math.exp,r,e),floor:(r,e)=>K(Math.floor,r,e),ln:(r,e)=>K(Math.log,r,e),log:(r,e,t)=>K((n,i)=>Math.log(n)/Math.log(i),r,e,t),power:(r,e,t)=>K(Math.pow,r,e,t),round:(r,e)=>K(Math.round,r,e),sqrt:(r,e)=>K(Math.sqrt,r,e),truncate:(r,e)=>K(t=>t|0,r,e),children:ne,descendants:ne,trace:(r,e,t)=>e,now:()=>[{type:p.dateTime,value:new Date().toISOString()}],timeOfDay:()=>[{type:p.time,value:new Date().toISOString().substring(11)}],today:()=>[{type:p.date,value:new Date().toISOString().substring(0,10)}],between:(r,e,t,n,i)=>{let o=V.toDateTime(r,t.eval(r,e));if(o.length===0)throw new Error("Invalid start date");let s=V.toDateTime(r,n.eval(r,e));if(s.length===0)throw new Error("Invalid end date");let a=i.eval(r,e)[0]?.value;if(a!=="years"&&a!=="months"&&a!=="days")throw new Error("Invalid units");let c=tt(o[0].value,s[0].value);return[{type:p.Quantity,value:{value:c[a],unit:a}}]},is:(r,e,t)=>{let n="";return t instanceof q?n=t.name:t instanceof ie&&(n=t.left.name+"."+t.right.name),n?e.map(i=>({type:p.boolean,value:Xe(i,n)})):[]},not:(r,e)=>V.toBoolean(r,e).map(t=>({type:p.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 g(o.resource);o.reference?i=o.reference:o.type&&o.identifier&&(i=`${o.type}?identifier=${o.identifier.system}|${o.identifier.value}`)}if(i?.includes("?")){let[o]=i.split("?");return{type:o,value:{resourceType:o}}}if(i?.includes("/")){let[o,s]=i.split("/");return{type:o,value:{resourceType:o,id:s}}}return{type:p.BackboneElement,value:void 0}}).filter(t=>!!t.value),as:(r,e)=>e,type:(r,e)=>e.map(({value:t})=>typeof t=="boolean"?{type:p.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof t=="number"?{type:p.BackboneElement,value:{namespace:"System",name:"Integer"}}:I(t)?{type:p.BackboneElement,value:{namespace:"FHIR",name:t.resourceType}}:{type:p.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:p.boolean,value:o.value?.resourceType===i}))},getResourceKey:(r,e)=>{let t=e[0].value;return t?.id?[{type:p.id,value:t.id}]:[]},getReferenceKey:(r,e,t)=>{let n=e[0].value;if(!n?.reference)return[];let i="";return t instanceof q&&(i=t.name),i&&!n.reference.startsWith(i+"/")?[]:[{type:p.id,value:pe(n)}]},extension:(r,e,t)=>{let n=t.eval(r,e)[0].value,i=e?.[0]?.value;if(i){let o=X(i,n);if(o)return[{type:p.Extension,value:o}]}return[]}};function B(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=z(t,1);if(typeof i!="string")throw new Error("String function cannot be called with non-string");let o=r(i,...n.map(s=>s?.eval(e,t)[0]?.value));return o===void 0?[]:Array.isArray(o)?o.map(g):[g(o)]}function K(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=z(t,1),o=k(i),s=o?i.value:i;if(typeof s!="number")throw new Error("Math function cannot be called with non-number");let a=r(s,...n.map(l=>l.eval(e,t)[0]?.value)),c=o?p.Quantity:t[0].type,u=o?{...i,value:a}:a;return[{type:c,value:u}]}function z(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 we(r){let e=r;for(;e.parent?.variables.$this;)e=e.parent;return[e.variables.$this]}var it=class{constructor(e,t){this.original=e;this.child=t}eval(e,t){try{if(t.length>0){let n=[];for(let i of t)n.push(this.child.eval({parent:e,variables:{$this:i}},[i]));return n.flat()}else return this.child.eval(e,[])}catch(n){throw new Error(`FhirPathError on "${this.original}": ${n}`,{cause:n})}}toString(){return this.child.toString()}},L=class{constructor(e){this.value=e}eval(){return[this.value]}toString(){let e=this.value.value;return typeof e=="string"?`'${e}'`:e.toString()}},q=class{constructor(e){this.name=e}eval(e,t){if(this.name==="$this")return t;let n=this.getVariable(e);if(n)return[n];if(this.name.startsWith("%"))throw new Error(`Undefined variable ${this.name}`);return t.flatMap(i=>this.evalValue(i)).filter(i=>i?.value!==void 0)}getVariable(e){let t=e.variables[this.name];if(t!==void 0)return t;if(e.parent)return this.getVariable(e.parent)}evalValue(e){let t=e.value;if(!(!t||typeof t!="object"))return I(t)&&t.resourceType===this.name?e:P(e,this.name)}toString(){return this.name}},ot=class{eval(){return[]}toString(){return"{}"}},st=class extends He{constructor(t,n,i){super(t,n);this.impl=i}eval(t,n){return this.impl(this.child.eval(t,n))}toString(){return this.operator+this.child.toString()}},fe=class extends Y{constructor(e,t){super("as",e,t)}eval(e,t){return V.ofType(e,this.left.eval(e,t),this.right)}},C=class extends Y{},D=class extends C{constructor(t,n,i,o){super(t,n,i);this.impl=o}eval(t,n){let i=this.left.eval(t,n);if(i.length!==1)return[];let o=this.right.eval(t,n);if(o.length!==1)return[];let s=i[0].value,a=o[0].value,c=k(s)?s.value:s,u=k(a)?a.value:a,l=this.impl(c,u);return typeof l=="boolean"?f(l):k(s)?[{type:p.Quantity,value:{...s,value:l}}]:[g(l)]}},at=class extends Y{constructor(e,t){super("&",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t),o=[...n,...i];return o.length>0&&o.every(s=>typeof s.value=="string")?[{type:p.string,value:o.map(s=>s.value).join("")}]:o}},ct=class extends C{constructor(e,t){super("contains",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return f(n.some(o=>o.value===i[0].value))}},ut=class extends C{constructor(e,t){super("in",e,t)}eval(e,t){let n=W(this.left.eval(e,t)),i=this.right.eval(e,t);return n?f(i.some(o=>o.value===n.value)):[]}},ie=class extends Y{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()}`}},Ae=class extends Y{constructor(e,t){super("|",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Ze([...n,...i])}},lt=class extends C{constructor(e,t){super("=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return cn(n,i)}},pt=class extends C{constructor(e,t){super("!=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return un(n,i)}},dt=class extends C{constructor(e,t){super("~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Jt(n,i)}},ft=class extends C{constructor(e,t){super("!~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return an(Jt(n,i))}},me=class extends C{constructor(e,t){super("is",e,t)}eval(e,t){let n=this.left.eval(e,t);if(n.length!==1)return[];let i=this.right.name;return f(Xe(n[0],i))}},mt=class extends C{constructor(e,t){super("and",e,t)}eval(e,t){let n=W(this.left.eval(e,t),"boolean"),i=W(this.right.eval(e,t),"boolean");return n?.value===!0&&i?.value===!0?f(!0):n?.value===!1||i?.value===!1?f(!1):[]}},ht=class extends C{constructor(e,t){super("or",e,t)}eval(e,t){let n=W(this.left.eval(e,t),"boolean"),i=W(this.right.eval(e,t),"boolean");return n?.value===!1&&i?.value===!1?f(!1):n?.value||i?.value?f(!0):[]}},yt=class extends C{constructor(e,t){super("xor",e,t)}eval(e,t){let n=W(this.left.eval(e,t),"boolean"),i=W(this.right.eval(e,t),"boolean");return!n||!i?[]:f(n.value!==i.value)}},gt=class extends C{constructor(e,t){super("implies",e,t)}eval(e,t){let n=W(this.left.eval(e,t),"boolean"),i=W(this.right.eval(e,t),"boolean");return i?.value===!0||n?.value===!1?f(!0):!n||!i?[]:f(!1)}},J=class{constructor(e,t){this.name=e;this.args=t}eval(e,t){let n=V[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(", ")})`}},he=class{constructor(e,t){this.left=e;this.expr=t}eval(e,t){let n=this.expr.eval(e,t);if(n.length!==1)return[];let i=n[0].value;if(typeof i!="number")throw new Error("Invalid indexer expression: should return integer}");let o=this.left.eval(e,t);return i in o?[o[i]]:[]}toString(){return`${this.left.toString()}[${this.expr.toString()}]`}};var Za=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],oe=class{constructor(e,t,n,i){this.result=[];this.pos={index:0,line:1,column:0};this.markStack=[];this.str=e,this.keywords=t,this.operators=n,this.dateTimeLiterals=!!i?.dateTimeLiterals,this.symbolRegex=i?.symbolRegex??/[$\w%]/}tokenize(){for(;this.pos.index<this.str.length;){let e=this.consumeToken();e&&this.result.push(e)}return this.result}prevToken(){return this.result.slice(-1)[0]}peekToken(){this.mark();let e=this.consumeToken();return this.reset(),e}consumeToken(){this.consumeWhitespace();let e=this.curr();if(!e)return;this.mark();let t=this.peek();return e==="/"&&t==="*"?this.consumeMultiLineComment():e==="/"&&t==="/"?this.consumeSingleLineComment():e==="'"||e==='"'?this.consumeString(e):e==="`"?this.consumeBacktickSymbol():e==="@"?this.consumeDateTime():/\d/.exec(e)?this.consumeNumber():/\w/.exec(e)?this.consumeSymbol():(e==="$"||e==="%")&&/\w/.exec(t)?this.consumeSymbol():this.consumeOperator()}consumeWhitespace(){this.consumeWhile(()=>/\s/.exec(this.curr()))}consumeMultiLineComment(){let e=this.pos.index;return this.consumeWhile(()=>this.curr()!=="*"||this.peek()!=="/"),this.advance(),this.advance(),this.buildToken("Comment",this.str.substring(e,this.pos.index))}consumeSingleLineComment(){return this.buildToken("Comment",this.consumeWhile(()=>this.curr()!==`
2
2
  `))}consumeString(e){this.advance();let t=this.buildToken("String",this.consumeWhile(()=>this.prev()==="\\"||this.curr()!==e));return this.advance(),t}consumeBacktickSymbol(){this.advance();let e=this.buildToken("Symbol",this.consumeWhile(()=>this.curr()!=="`"));return this.advance(),e}consumeDateTime(){this.advance();let e=this.pos.index;this.consumeWhile(()=>/[\d-]/.exec(this.curr()));let t=!1,n=!1;if(this.curr()==="T"&&(t=!0,this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())),this.curr()==="."&&/\d/.exec(this.peek())&&(this.advance(),this.consumeWhile(()=>/\d/.exec(this.curr()))),this.curr()==="Z"?(n=!0,this.advance()):(this.curr()==="+"||this.curr()==="-")&&(n=!0,this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())))),this.pos.index===e)throw new Error("Invalid DateTime literal");let i=this.str.substring(e,this.pos.index);return i.endsWith("T")?i=i.substring(0,i.length-1):!i.startsWith("T")&&t&&!n&&(i+="Z"),this.buildToken("DateTime",i)}consumeNumber(){let e=this.pos.index,t="Number";return this.consumeWhile(()=>/\d/.exec(this.curr())),this.curr()==="."&&/\d/.exec(this.peek())&&(this.advance(),this.consumeWhile(()=>/\d/.exec(this.curr()))),this.curr()==="-"&&this.dateTimeLiterals?(this.pos.index=e-1,this.consumeDateTime()):(this.curr()===" "&&Xa(this.peekToken())&&(t="Quantity",this.consumeToken()),this.buildToken(t,this.str.substring(e,this.pos.index)))}consumeSymbol(){let e=this.consumeWhile(()=>this.symbolRegex.exec(this.curr()));return this.prevToken()?.value!=="."&&this.keywords.includes(e)?this.buildToken(e,e):this.buildToken("Symbol",e)}consumeOperator(){let e=this.curr(),t=this.peek(),n=e+t;return this.operators.includes(n)?(this.advance(),this.advance(),this.buildToken(n,n)):(this.advance(),this.buildToken(e,e))}consumeWhile(e){let t=this.pos.index;for(;this.pos.index<this.str.length&&e();)this.advance();return this.str.substring(t,this.pos.index)}curr(){return this.str[this.pos.index]}prev(){return this.str[this.pos.index-1]??""}peek(){return this.str[this.pos.index+1]??""}mark(){this.markStack.push({...this.pos})}reset(){let e=this.markStack.pop();if(!e)throw new Error("No mark to reset to");this.pos.index=e.index,this.pos.line=e.line,this.pos.column=e.column}advance(){this.pos.index++,this.curr()===`
3
- `?(this.pos.line++,this.pos.column=0):this.pos.column++}buildToken(e,t){let n=this.markStack.pop();if(!n)throw new Error("No mark for token");return{id:e,value:t,...n}}};function Xa(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&Za.includes(r.value)))}var xt=["true","false"],vt=["!=","!~","<=",">=","{}","->"];function Qi(r){return new oe(r,xt,vt).tokenize()}var y={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},ec={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},tc={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new he(e,t)},precedence:y.Indexer},rc={parse(r,e){if(!(e instanceof q))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new J(e.name,t)},precedence:y.FunctionCall};function nc(r){let e=r.split(" "),t=parseFloat(e[0]),n=e[1];return n?.startsWith("'")&&n.endsWith("'")?n=n.substring(1,n.length-1):n="{"+n+"}",{value:t,unit:n}}function Be(){return new Qe().registerPrefix("String",{parse:(r,e)=>new L({type:p.string,value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new L({type:p.dateTime,value:Ue(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new L({type:p.Quantity,value:nc(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new L({type:e.value.includes(".")?p.decimal:p.integer,value:parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new L({type:p.boolean,value:!0})}).registerPrefix("false",{parse:()=>new L({type:p.boolean,value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new q(e.value)}).registerPrefix("{}",{parse:()=>new ot}).registerPrefix("(",ec).registerInfix("[",tc).registerInfix("(",rc).prefix("+",y.UnaryAdd,(r,e)=>new st("+",e,t=>t)).prefix("-",y.UnarySubtract,(r,e)=>new D("-",e,e,(t,n)=>-n)).infixLeft(".",y.Dot,(r,e,t)=>new ie(r,t)).infixLeft("/",y.Divide,(r,e,t)=>new D("/",r,t,(n,i)=>n/i)).infixLeft("*",y.Multiply,(r,e,t)=>new D("*",r,t,(n,i)=>n*i)).infixLeft("+",y.Add,(r,e,t)=>new D("+",r,t,(n,i)=>n+i)).infixLeft("-",y.Subtract,(r,e,t)=>new D("-",r,t,(n,i)=>n-i)).infixLeft("|",y.Union,(r,e,t)=>new Ae(r,t)).infixLeft("=",y.Equals,(r,e,t)=>new lt(r,t)).infixLeft("!=",y.NotEquals,(r,e,t)=>new pt(r,t)).infixLeft("~",y.Equivalent,(r,e,t)=>new dt(r,t)).infixLeft("!~",y.NotEquivalent,(r,e,t)=>new ft(r,t)).infixLeft("<",y.LessThan,(r,e,t)=>new D("<",r,t,(n,i)=>n<i)).infixLeft("<=",y.LessThanOrEquals,(r,e,t)=>new D("<=",r,t,(n,i)=>n<=i)).infixLeft(">",y.GreaterThan,(r,e,t)=>new D(">",r,t,(n,i)=>n>i)).infixLeft(">=",y.GreaterThanOrEquals,(r,e,t)=>new D(">=",r,t,(n,i)=>n>=i)).infixLeft("&",y.Ampersand,(r,e,t)=>new at(r,t)).infixLeft("and",y.And,(r,e,t)=>new mt(r,t)).infixLeft("as",y.As,(r,e,t)=>new fe(r,t)).infixLeft("contains",y.Contains,(r,e,t)=>new ct(r,t)).infixLeft("div",y.Divide,(r,e,t)=>new D("div",r,t,(n,i)=>n/i|0)).infixLeft("in",y.In,(r,e,t)=>new ut(r,t)).infixLeft("is",y.Is,(r,e,t)=>new me(r,t)).infixLeft("mod",y.Modulo,(r,e,t)=>new D("mod",r,t,(n,i)=>n%i)).infixLeft("or",y.Or,(r,e,t)=>new ht(r,t)).infixLeft("xor",y.Xor,(r,e,t)=>new yt(r,t)).infixLeft("implies",y.Implies,(r,e,t)=>new gt(r,t))}var ic=Be();function ar(r){return new it(r,ic.construct(Qi(r)).consumeAndParse())}function Oe(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]=g(t[n]))}return w(r,t).map(n=>n.value)}function w(r,e,t={}){return ar(r).eval({variables:t},e).map(i=>({type:i.type,value:i.value?.valueOf()}))}var Cn=(l=>(l.BOOLEAN="BOOLEAN",l.NUMBER="NUMBER",l.QUANTITY="QUANTITY",l.TEXT="TEXT",l.REFERENCE="REFERENCE",l.CANONICAL="CANONICAL",l.DATE="DATE",l.DATETIME="DATETIME",l.PERIOD="PERIOD",l.UUID="UUID",l))(Cn||{});function ur(r,e){let t=N.types[r]?.searchParamsDetails?.[e.code];return t||(t=sc(r,e)),t}function oc(r,e,t){let n=N.types[r];n||(n={},N.types[r]=n),n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=t}function sc(r,e){let t=e.code,n=Pn(r,e.expression),i={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let s of n){let a=cr(s),c=vn(()=>a.join("."));a.length===1&&a[0]instanceof C?i.propertyTypes.add("boolean"):e.code.endsWith(":identifier")?i.propertyTypes.add("Identifier"):c().endsWith("extension.value.code")||c().endsWith("extension.value.coding.code")?(i.array=!0,i.propertyTypes.add("code")):Ki(i,a,r,1),c().endsWith("extension.valueDateTime")&&(i.array=!1)}let o={type:uc(e,i.propertyTypes),elementDefinitions:i.elementDefinitions,array:i.array};return oc(r,t,o),o}function Ki(r,e,t,n){let i=e[n];if(i instanceof fe){r.propertyTypes.add(i.right.toString());return}if(i instanceof J){ac(r,i);return}let o=i.toString(),s=et(t,o);if(!s)throw new Error(`Element definition not found for ${t} ${o}`);let a=!1,c=n+1;if(c<e.length&&e[c]instanceof he&&(a=!0,c++),s.isArray&&!a&&(r.array=!0),c>=e.length){r.elementDefinitions.push(s);for(let u of s.type)r.propertyTypes.add(u.code);return}for(let u of s.type){let l=u.code;cc(l)&&(l=s.type[0].code),Ki(r,e,l,c)}}function ac(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 me){r.propertyTypes.add(e.args[0].right.toString());return}throw new Error(`Unhandled FHIRPath function: ${e.name}`)}function cc(r){return r==="Element"||r==="BackboneElement"}function uc(r,e){switch(r.type){case"date":return e.size===1&&e.has(p.date)?"DATE":"DATETIME";case"number":return"NUMBER";case"quantity":return"QUANTITY";case"reference":return e.has(p.canonical)?"CANONICAL":"REFERENCE";case"token":return e.size===1&&e.has(p.boolean)?"BOOLEAN":"TEXT";default:return"TEXT"}}function Pn(r,e){let t=[],n=ar(e);return Rn(r,n.child,t),t}function lc(r,e){let t=Pn(r,e);if(t.length!==0)return t.map(n=>n.toString()).join(" | ")}function Rn(r,e,t){e instanceof Ae?(Rn(r,e.left,t),Rn(r,e.right,t)):e.toString().startsWith(r+".")&&t.push(e)}function cr(r){if(r instanceof fe||r instanceof he)return[cr(r.left),r].flat();if(r instanceof C)return[r];if(r instanceof ie)return[cr(r.left),cr(r.right)].flat();if(r instanceof J){if(r.name==="where"&&!(r.args[0]instanceof me))return[];if(r.name==="last")return[]}return[r]}var pc=20,dc=1e3,wn=(T=>(T.EQUALS="eq",T.NOT_EQUALS="ne",T.GREATER_THAN="gt",T.LESS_THAN="lt",T.GREATER_THAN_OR_EQUALS="ge",T.LESS_THAN_OR_EQUALS="le",T.STARTS_AFTER="sa",T.ENDS_BEFORE="eb",T.APPROXIMATELY="ap",T.CONTAINS="contains",T.STARTS_WITH="sw",T.EXACT="exact",T.TEXT="text",T.NOT="not",T.ABOVE="above",T.BELOW="below",T.IN="in",T.NOT_IN="not-in",T.OF_TYPE="of-type",T.MISSING="missing",T.PRESENT="present",T.IDENTIFIER="identifier",T.ITERATE="iterate",T))(wn||{}),Zi={contains:"contains",exact:"exact",above:"above",below:"below",text:"text",not:"not",in:"in","not-in":"not-in","of-type":"of-type",missing:"missing",identifier:"identifier",iterate:"iterate"},An={eq:"eq",ne:"ne",lt:"lt",le:"le",gt:"gt",ge:"ge",sa:"sa",eb:"eb",ap:"ap",sw:"sw"};function se(r,e){if(!r)throw new Error("Invalid search URL");let t="",n;if(typeof r=="string")if(r.includes("?")){let[s,a]=r.split("?");t=s,n=new URLSearchParams(a)}else t=r;else typeof r=="object"&&(t=r.pathname,n=r.searchParams);let i;t.includes("/")?i=t.split("/").filter(Boolean).pop():i=t;let o=[];if(n&&o.push(...n.entries()),e)for(let[s,a]of Object.entries(e))if(Array.isArray(a))for(let c of a)o.push([s,c]);else o.push([s,a??""]);return yc(i,o)}function fc(r){return se(r)}function mc(r){return se(r)}function hc(r){return se(r)}function yc(r,e){let t={resourceType:r};for(let[n,i]of e)gc(t,n,i);return t}function gc(r,e,t){let n,i,o=e.indexOf(":");if(o>=0?(n=e.substring(0,o),i=e.substring(o+1)):(n=e,i=""),n!=="_"){if(n==="_has"||e.includes(".")){r.filters=Ce(r.filters,{code:e,operator:"eq",value:t});return}switch(n){case"_sort":xc(r,t);break;case"_cursor":r.cursor=t;break;case"_count":r.count=parseInt(t,10);break;case"_offset":r.offset=parseInt(t,10);break;case"_total":r.total=t;break;case"_summary":t==="count"?(r.total="accurate",r.count=0):(t==="true"||t==="data"||t==="text")&&(r.summary=t);break;case"_include":{let s=zi(t);i==="iterate"&&(s.modifier="iterate"),r.include=Ce(r.include,s);break}case"_revinclude":{let s=zi(t);i==="iterate"&&(s.modifier="iterate"),r.revInclude=Ce(r.revInclude,s);break}case"_fields":case"_elements":r.fields=t.split(",");break;case"_type":r.types=t.split(",");break;case"_format":r.format=t;break;case"_pretty":r.pretty=t==="true";break;default:{let s=N.types[r.resourceType]?.searchParams?.[n];s?r.filters=Ce(r.filters,Xi(s,i,t)):r.filters=Ce(r.filters,Tc(n,i,t))}}}}function xc(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 vc=["missing","present"];function Xi(r,e,t){if(vc.includes(e))return{code:r.code,operator:e,value:t};switch(r.type){case"number":case"date":case"quantity":{let{operator:n,value:i}=Sc(t);if(!Ji(r,i))throw new d(E(`Invalid format for ${r.type} search parameter: ${i}`));return{code:r.code,operator:n,value:i}}case"reference":case"string":case"token":case"uri":if(!Ji(r,t))throw new d(E(`Invalid format for ${r.type} search parameter: ${t}`));return{code:r.code,operator:Ec(e),value:t};default:throw new Error("Unrecognized search parameter type: "+r.type)}}function Tc(r,e,t){let n="eq";if(e)n=e;else if(t.length>=2){let i=t.substring(0,2);i in An&&(t.length===2||t.at(2)?.match(/\d/))&&(n=i,t=t.substring(i.length))}return{code:r,operator:n,value:t}}function Sc(r){let e=r.substring(0,2),t=An[e];return t?{operator:t,value:r.substring(2)}:{operator:"eq",value:r}}function Ec(r){return Zi[r]??"eq"}function zi(r){let e=r.split(":");if(e.includes("*"))throw new d(E("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new d(E(`Invalid include value '${r}': must be of the form ResourceType:search-parameter`));if(e.length===2)return{resourceType:e[0],searchParam:e[1]};if(e.length===3)return{resourceType:e[0],searchParam:e[1],targetType:e[2]};throw new d(E(`Invalid include value '${r}'`))}function Ji(r,e){switch(r.type){case"date":return be(e);default:return!0}}var bc=/{{([^{}]+)}}/g;function Rc(r,e){return r=r.replaceAll(bc,(t,n)=>{let i=w(n,[],e);return i.length!==1?"":bn(i[0])}),se(r)}function Cc(r){let e=[];return r.fields&&e.push("_fields="+r.fields.join(",")),r.filters&&r.filters.forEach(t=>e.push(Pc(t))),r.sortRules&&r.sortRules.length>0&&e.push(wc(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.include&&r.include.forEach(t=>e.push(Yi("_include",t))),r.revInclude&&r.revInclude.forEach(t=>e.push(Yi("_revinclude",t))),e.length===0?"":(nt(e),"?"+e.join("&"))}function Pc(r){let e=r.operator in Zi?":"+r.operator:"",t=r.operator!=="eq"&&r.operator in An?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function wc(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function Yi(r,e){return r+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function Tt(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 St(r,e){if(e.resourceType!==r.resourceType)return!1;if(e.filters){for(let t of e.filters)if(!Ac(r,e,t))return!1}return!0}function Ac(r,e,t){let n=N.types[e.resourceType]?.searchParams?.[t.code];if(!n)return!1;if(t.operator==="missing"||t.operator==="present")return Oc(r,t,n);switch(n.type){case"reference":return Ic(r,t,n);case"string":case"uri":return eo(r,t,n);case"token":return kc(r,t,n);case"date":return _c(r,t,n);default:return!1}}function Oc(r,e,t){let i=Oe(t.expression,r).length>0;return(e.operator==="missing"&&e.value==="false"||e.operator==="present"&&e.value==="true")===i}function Ic(r,e,t){let n=Oe(t.expression,r),i=lr(e.operator);if(e.value===""&&n.length===0)return e.operator==="eq";let o=n.map(s=>typeof s=="string"?s:s.reference);for(let s of Tt(e.value)){let a=o.includes(s);if(!a&&e.code==="_compartment"&&(a=o.some(c=>c?.endsWith("/"+s))),a)return!i}return i}function kc(r,e,t){return ur(r.resourceType,t).type==="BOOLEAN"?Vc(r,e,t):eo(r,e,t,!0)}function Vc(r,e,t){let n=Oe(t.expression,r),i=e.value==="true",o=n.includes(i);return lr(e.operator)?!o:o}function eo(r,e,t,n){let o=ur(r.resourceType,t).elementDefinitions?.[0]?.type?.[0]?.code,s=Oe(t.expression,r),a=Tt(e.value),c=lr(e.operator);for(let u of s)for(let l of a){let m;if(o===p.Identifier?m=Dc(u,e.operator,l):o===p.CodeableConcept?m=Mc(u,e.operator,l):m=On(u,e.operator,l,n),m)return!c}return c}function On(r,e,t,n){if(n&&t.includes("|")){let[o,s]=t.split("|");return On(r,e,o,!1)&&(!s||On(r,e,s,!1))}let i="";return r&&(typeof r=="string"?i=r:typeof r=="object"&&(i=JSON.stringify(r))),i.toLowerCase().includes(t.toLowerCase())}function Dc(r,e,t){if(t.includes("|")){let[n,i]=t.split("|").map(o=>o.toLowerCase());return!n&&!i?!1:n?r.system?.toLowerCase()===n&&(!i||r.value?.toLowerCase()===i):!r.system&&r.value?.toLowerCase()===i}return r.value?.toLowerCase()===t.toLowerCase()}function Mc(r,e,t){if(t.includes("|")){let[n,i]=t.split("|").map(o=>o.toLowerCase());return!n&&!i?!1:n?r.coding?.some(o=>o.system?.toLowerCase()===n&&(!i||o.code?.toLowerCase()===i))??!1:r.coding?.some(o=>!o.system&&o.code?.toLowerCase()===i)??!1}return r.text?.toLowerCase()===t.toLowerCase()||(r.coding?.some(n=>n.code?.toLowerCase()===t.toLowerCase())??!1)}function _c(r,e,t){let n=Oe(t.expression,r),i=Tt(e.value),o=lr(e.operator);for(let s of n)for(let a of i)if(Nc(s,e.operator,a))return!o;return o}function Nc(r,e,t){switch(e){case"sa":case"gt":return r>t;case"ge":return r>=t;case"eb":case"lt":return r<t;case"le":return r<=t;case"eq":case"ne":return r===t;default:return!1}}function lr(r){return r==="ne"||r==="not"}var Lc={resourceType:"*"},to=["DomainConfiguration","JsonWebKey","Login"],ro=["PasswordChangeRequest","UserSecurityRequest","Project","ProjectMembership","User"],no=(R=>(R.READ="read",R.VREAD="vread",R.UPDATE="update",R.PATCH="patch",R.DELETE="delete",R.HISTORY="history",R.HISTORY_INSTANCE="history-instance",R.HISTORY_TYPE="history-type",R.HISTORY_SYSTEM="history-system",R.CREATE="create",R.SEARCH="search",R.SEARCH_TYPE="search-type",R.SEARCH_SYSTEM="search-system",R.SEARCH_COMPARTMENT="search-compartment",R.CAPABILITIES="capabilities",R.TRANSACTION="transaction",R.BATCH="batch",R.OPERATION="operation",R))(no||{}),Fc=["read","vread","history","history-instance"];function Uc(r,e){if(r.resource){for(let t of r.resource)if(In(t.resourceType,e))return!0}return!1}function io(r,e){if(to.includes(e))return!1;if(r.resource){for(let t of r.resource)if(In(t.resourceType,e)&&!t.readonly)return!0}return!1}function Bc(r,e){let t=e.resourceType;return io(r,t)?oo(r,e,!1):!1}function oo(r,e,t){if(r.resource){for(let n of r.resource)if(so(e,t?"read":"update",n))return!0}return!1}function qc(r,e,t){if(!t)return Lc;if(t.resource){for(let n of t.resource)if(so(r,e,n))return n}}function so(r,e,t){let n=r.resourceType;return!(!In(t.resourceType,n)||t.readonly&&!Fc.includes(e)||t.compartment&&!r.meta?.compartment?.find(i=>i.reference===t.compartment?.reference)||t.criteria&&!St(r,se(t.criteria)))}function In(r,e){return r===e||r==="*"&&!ro.includes(e)}function kn(r){if(typeof window<"u"){let e=window.atob(r),t=Uint8Array.from(e,n=>n.charCodeAt(0));return new window.TextDecoder().decode(t)}if(typeof Buffer<"u")return Buffer.from(r,"base64").toString("utf-8");throw new Error("Unable to decode base64")}function Vn(r){if(typeof window<"u"){let e=new window.TextEncoder().encode(r),t=String.fromCharCode.apply(null,e);return window.btoa(t)}if(typeof Buffer<"u")return Buffer.from(r,"utf8").toString("base64");throw new Error("Unable to encode base64")}function pr(){let r=new Uint32Array(28);return crypto.getRandomValues(r),hn(r.buffer)}async function Dn(r){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(r))}function ye(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,r=>{let e=Math.random()*16|0;return(r==="x"?e:e&3|8).toString(16)})}function ao(r){let e={};r=de(r);for(let i of r.entry||[]){i.resource?.meta!==void 0&&(delete i.resource.meta.author,delete i.resource.meta.compartment,delete i.resource.meta.lastUpdated,delete i.resource.meta.project,delete i.resource.meta.versionId);let o=i.resource?.id;o&&(e[o]=ye(),i.fullUrl="urn:uuid:"+e[o],delete i.resource?.id)}let t=r.entry,n=JSON.stringify({resourceType:"Bundle",type:"transaction",entry:t?.map(i=>({fullUrl:i.fullUrl,request:{method:"POST",url:i.resource.resourceType},resource:i.resource}))},(i,o)=>jc(i,o,e),2);return co(JSON.parse(n))}function jc(r,e,t){if(r==="reference"&&typeof e=="string"){let n;if(e.includes("/")?n=e.split("/")[1]:e.startsWith("urn:uuid:")?n=e.slice(9):e.startsWith("#")&&(n=e.slice(1)),n){let i=t[n];if(i)return"urn:uuid:"+i}}return e}function co(r){let e=$c(r),{sorted:t,cycles:n}=Wc(e),i={};for(let s of r.entry??[])s.fullUrl&&(i[s.fullUrl]=s);let o=t.map(s=>i[s]);for(let s of n)for(let a of s){let c=i[a],u={...c,request:{...c.request,method:"PUT"}};o.push(u)}return{...r,entry:o}}function Wc(r){let e=[],t={},n=[];for(let o of Object.keys(r))t[o]=0;function i(o,s){if(t[o]===2)return!0;if(t[o]===1){let c=s.lastIndexOf(o);return c!==-1&&n.push(s.slice(c)),!0}t[o]=1,s.push(o);let a=!1;for(let c of r[o])i(c,s)||(a=!0);return t[o]=2,s.pop(),e.unshift(o),!a}for(let o in r)t[o]===0&&i(o,[]);return{sorted:e,cycles:n}}function uo(r,e){for(let t in r)if(r[t]&&typeof r[t]=="object"){let n=r[t];if(ue(n)){let i=n.reference;i.startsWith("urn:uuid:")&&e(i)}else uo(n,e)}}function $c(r){let e={};for(let t of r.entry||[])t.fullUrl&&(e[t.fullUrl]=[]);for(let t of r.entry||[]){let n=t.fullUrl;t.resource&&uo(t.resource,i=>{e[i]&&e[i].push(n)})}return e}function Gc(r){r=de(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=ye());return ao(e)}var Et=class{constructor(e=10){this.max=e,this.cache=new Map}clear(){this.cache.clear()}get(e){let t=this.cache.get(e);return t&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size>=this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}delete(e){this.cache.delete(e)}keys(){return this.cache.keys()}first(){return this.cache.keys().next().value}};var A={CSS:"text/css",DICOM:"application/dicom",FAVICON:"image/vnd.microsoft.icon",FHIR_JSON:"application/fhir+json",FORM_URL_ENCODED:"application/x-www-form-urlencoded",HL7_V2:"x-application/hl7-v2+er7",HTML:"text/html",JAVASCRIPT:"text/javascript",JSON:"application/json",JSON_PATCH:"application/json-patch+json",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"};var dr=class{constructor(){this.listeners={}}addEventListener(e,t){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)}removeEventListener(e,t){let n=this.listeners[e];if(n){for(let i=0;i<n.length;i++)if(n[i]===t){n.splice(i,1);return}}}dispatchEvent(e){let t=this.listeners[e.type];if(t)for(let n of t)n.call(this,e);return!e.defaultPrevented}removeAllListeners(){this.listeners={}}},$=class{constructor(){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()}};var fr={"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"},po=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],mr=["DiagnosticReport-update"];function Mn(r){return mr.includes(r)}function _n(r){if(mr.includes(r))throw new d(h(`'context.version' is required for '${r}'.`))}var fo={"Patient-open":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"Patient-close":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"ImagingStudy-open":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"ImagingStudy-close":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"Encounter-open":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"Encounter-close":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"DiagnosticReport-open":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-close":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-select":{report:{resourceType:"DiagnosticReport"},select:{resourceType:"*",isArray:!0}},"DiagnosticReport-update":{report:{resourceType:"DiagnosticReport"},patient:{resourceType:"Patient",optional:!0},study:{resourceType:"ImagingStudy",optional:!0},updates:{resourceType:"Bundle"}},syncerror:{operationoutcome:{resourceType:"OperationOutcome"}}};function mo(r){return po.includes(r)}function Nn(r){return!!r.endpoint}function hr(r){if(!Rt(r))throw new d(h("subscriptionRequest must be an object conforming to SubscriptionRequest type."));let{channelType:e,mode:t,topic:n,events:i}=r,o={"hub.channel.type":e,"hub.mode":t,"hub.topic":n,"hub.events":i.join(",")};return Nn(r)&&(o.endpoint=r.endpoint),new URLSearchParams(o).toString()}function Rt(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(!fr[o])return!1;return!(Nn(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function lo(r,e,t,n){if(typeof e!="object")throw new d(h(`context[${t}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.id&&typeof e.id=="string"))throw new d(h(`context[${t}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new d(h(`context[${t}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!mo(e.resourceType))throw new d(h(`context[${t}] is invalid. Resource must contain a valid FHIRcast resource type. Resource type is not a known resource type.`));if(i&&e.resourceType!==i)throw new d(h(`context[${t}] is invalid. context[${t}] for the '${r}' event should contain resource of type ${i}.`))}}function Hc(r,e,t,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),!n.isArray)lo(r,e.resource,t,n);else{let{resources:o}=e;if(!o)throw new d(h(`context[${t}] is invalid. context[${t}] for the '${r}' with key '${String(e.key)}' should contain an array of resources on the key 'resources'.`));for(let s of o)lo(r,s,t,n)}}function Qc(r,e){let t=new Map,n=fo[r];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new d(h(`Key '${o}' not found for event '${r}'. Make sure to add only valid keys.`));Hc(r,e[i],i,n[o],t)}for(let[i,o]of Object.entries(n)){if(!(o.optional||t.has(i)))throw new d(h(`Missing required key '${i}' on context for '${r}' event.`));if(!o.manyAllowed&&(t.get(i)||0)>1)throw new d(h(`${t.get(i)} context entries with key '${i}' found for the '${r}' event when schema only allows for 1.`))}}function yr(r,e,t,n){if(!(r&&typeof r=="string"))throw new d(h("Must provide a topic."));if(!fr[e])throw new d(h(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(fr).join(", ")}`));if(typeof t!="object")throw new d(h("context must be a context object or array of context objects."));if(mr.includes(e)&&!n)throw new d(h(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(t)?t:[t];return Qc(e,i),{timestamp:new Date().toISOString(),id:ye(),event:{"hub.topic":r,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var bt=class extends ${constructor(e){if(super(),this.subRequest=e,!e.endpoint)throw new d(h("Subscription request should contain an endpoint."));if(!Rt(e))throw new d(h("Subscription request failed validation."));let t=new WebSocket(e.endpoint);t.addEventListener("open",()=>{this.dispatchEvent({type:"connect"}),t.addEventListener("message",n=>{let i=JSON.parse(n.data);if(i["hub.topic"])return;let o=i;o.event["hub.event"]!=="heartbeat"&&(this.dispatchEvent({type:"message",payload:o}),t.send(JSON.stringify({id:i?.id,timestamp:new Date().toISOString()})))}),t.addEventListener("close",()=>{this.dispatchEvent({type:"disconnect"})})}),this.websocket=t}disconnect(){this.websocket.close()}};function Kc(r){let e=r.replace(/-/g,"+").replace(/_/g,"/"),t=kn(e),n=Array.from(t).reduce((o,s)=>{let a=("00"+s.charCodeAt(0).toString(16)).slice(-2);return`${o}%${a}`},""),i=decodeURIComponent(n);return JSON.parse(i)}function Ln(r){return r.split(".").length===3}function Ct(r){let[e,t,n]=r.split(".");return Kc(t)}function Fn(r){try{return typeof Ct(r).login_id=="string"}catch{return!1}}function Un(r){try{let t=Ct(r).exp;return typeof t=="number"?t*1e3:void 0}catch{return}}var Pt=class{constructor(e){this.medplum=e}async get(e){return this.medplum.get(`keyvalue/v1/${e}`)}async set(e,t){await this.medplum.put(`keyvalue/v1/${e}`,t,A.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var ho;ho=Symbol.toStringTag;var M=class{constructor(e){this[ho]="ReadablePromise";this.status="pending";this.suspender=e.then(t=>(this.status="success",this.response=t,t),t=>{throw this.status="error",this.error=t,t})}isPending(){return this.status==="pending"}isOk(){return this.status==="success"}read(){switch(this.status){case"pending":throw this.suspender;case"error":throw this.error;default:return this.response}}then(e,t){return this.suspender.then(e,t)}catch(e){return this.suspender.catch(e)}finally(e){return this.suspender.finally(e)}};var qe=class{constructor(e){this.storage=e??(typeof localStorage<"u"?localStorage:new gr)}clear(){this.storage.clear()}getString(e){return this.storage.getItem(e)??void 0}setString(e,t){t?this.storage.setItem(e,t):this.storage.removeItem(e)}getObject(e){let t=this.getString(e);return t?JSON.parse(t):void 0}setObject(e,t){this.setString(e,t?rt(t):void 0)}},gr=class{constructor(){this.data=new Map}get length(){return this.data.size}clear(){this.data.clear()}getItem(e){return this.data.get(e)??null}setItem(e,t){t?this.data.set(e,t):this.data.delete(e)}removeItem(e){this.data.delete(e)}key(e){return Array.from(this.data.keys())[e]}},Bn=class extends qe{constructor(){super();this.initResolve=()=>{};this.initialized=!1,this.initPromise=new Promise(t=>{this.initResolve=t})}setInitialized(){this.initialized||(this.initResolve(),this.initialized=!0)}getInitPromise(){return this.initPromise}get isInitialized(){return this.initialized}};var je={Event:typeof globalThis.Event<"u"?globalThis.Event:void 0,ErrorEvent:void 0,CloseEvent:void 0},yo=!1;function zc(){if(typeof globalThis.Event>"u")throw new Error("Unable to lazy init events for ReconnectingWebSocket. globalThis.Event is not defined yet");je.Event=globalThis.Event,je.ErrorEvent=class extends Event{constructor(e,t){super("error",t),this.message=e.message,this.error=e}},je.CloseEvent=class extends Event{constructor(t=1e3,n="",i){super("close",i);this.wasClean=!0;this.code=t,this.reason=n}}}function xo(r,e){if(!r)throw new Error(e)}function xr(r){return new r.constructor(r.type,r)}var Ie={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},go=!1,wt=class r extends ${constructor(t,n,i={}){yo||(zc(),yo=!0);super();this._retryCount=-1;this._shouldReconnect=!0;this._connectLock=!1;this._closeCalled=!1;this._messageQueue=[];this._debugLogger=console.log.bind(console);this.onclose=null;this.onerror=null;this.onmessage=null;this.onopen=null;this._handleOpen=t=>{this._debug("open event");let{minUptime:n=Ie.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),n),xo(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(xr(t))};this._handleMessage=t=>{this._debug("message event"),this.onmessage&&this.onmessage(t),this.dispatchEvent(xr(t))};this._handleError=t=>{this._debug("error event",t.message),this._disconnect(void 0,t.message==="TIMEOUT"?"timeout":void 0),this.onerror&&this.onerror(t),this._debug("exec error listeners"),this.dispatchEvent(xr(t)),this._connect()};this._handleClose=t=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(t),this.dispatchEvent(xr(t))};this._url=t,this._protocols=n,this._options=i,this._options.startClosed&&(this._shouldReconnect=!1),this._options.binaryType?this._binaryType=this._options.binaryType:this._binaryType="blob",this._options.debugLogger&&(this._debugLogger=this._options.debugLogger),this._connect()}static get CONNECTING(){return 0}static get OPEN(){return 1}static get CLOSING(){return 2}static get CLOSED(){return 3}get CONNECTING(){return r.CONNECTING}get OPEN(){return r.OPEN}get CLOSING(){return r.CLOSING}get CLOSED(){return r.CLOSED}get binaryType(){return this._ws?this._ws.binaryType:this._binaryType}set binaryType(t){this._binaryType=t,this._ws&&(this._ws.binaryType=t)}get retryCount(){return Math.max(this._retryCount,0)}get bufferedAmount(){return this._messageQueue.reduce((n,i)=>(typeof i=="string"?n+=i.length:i instanceof Blob?n+=i.size:n+=i.byteLength,n),0)+(this._ws?.bufferedAmount??0)}get extensions(){return this._ws?.extensions??""}get protocol(){return this._ws?.protocol??""}get readyState(){return this._ws?this._ws.readyState:this._options.startClosed?r.CLOSED:r.CONNECTING}get url(){return this._ws?this._ws.url:""}get shouldReconnect(){return this._shouldReconnect}close(t=1e3,n){if(this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),!this._ws){this._debug("close enqueued: no ws instance");return}if(this._ws.readyState===this.CLOSED){this._debug("close: already closed");return}this._ws.close(t,n)}reconnect(t,n){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED?this._connect():(this._disconnect(t,n),this._connect())}send(t){if(this._ws&&this._ws.readyState===this.OPEN)this._debug("send",t),this._ws.send(t);else{let{maxEnqueuedMessages:n=Ie.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=Ie.reconnectionDelayGrowFactor,minReconnectionDelay:n=Ie.minReconnectionDelay,maxReconnectionDelay:i=Ie.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=Ie.maxRetries,connectionTimeout:n=Ie.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"&&!go&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),go=!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 je.ErrorEvent(Error(i.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new je.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(t=1e3,n){if(this._clearTimeouts(),!!this._ws){this._removeListeners();try{this._ws.close(t,n),this._handleClose(new je.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 Jc=5e3,We=class extends ${constructor(...e){super(),this.criteria=new Set(e)}getCriteria(){return this.criteria}_addCriteria(e){this.criteria.add(e)}_removeCriteria(e){this.criteria.delete(e)}},qn=class{constructor(e,t){this.connecting=!1;this.criteria=e,this.emitter=new We(e),this.refCount=1,this.subscriptionProps=t?{...t}:void 0}clearAttachedSubscription(){this.subscriptionId=void 0,this.token=void 0}},At=class{constructor(e,t,n){this.pingTimer=void 0;this.waitingForPong=!1;if(!(e instanceof Ot))throw new d(h("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(t).toString()}catch{throw new d(h("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 We,this.criteriaEntries=new Map,this.criteriaEntriesBySubscriptionId=new Map,this.wsClosed=!1,this.pingIntervalMs=n?.pingIntervalMs??Jc,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=pe(o.subscription),c={type:"connect",payload:{subscriptionId:a}};this.masterSubEmitter?.dispatchEvent(c);let u=this.criteriaEntriesBySubscriptionId.get(a);if(!u){console.warn("Received handshake for criteria the SubscriptionManager is not listening for yet");return}u.connecting=!1,u.emitter.dispatchEvent({...c});return}this.masterSubEmitter?.dispatchEvent({type:"message",payload:i});let s=this.criteriaEntriesBySubscriptionId.get(pe(o.subscription));if(!s){console.warn("Received notification for criteria the SubscriptionManager is not listening for");return}s.emitter.dispatchEvent({type:"message",payload:i})}catch(n){console.error(n);let i={type:"error",payload:n};this.masterSubEmitter?.dispatchEvent(i);for(let o of this.getAllCriteriaEmitters())o.dispatchEvent({...i})}}),e.addEventListener("error",()=>{let t={type:"error",payload:new d(jr(new Error("WebSocket error")))};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t})}),e.addEventListener("close",()=>{let t={type:"close"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=void 0,this.waitingForPong=!1),this.wsClosed&&(this.criteriaEntries.clear(),this.criteriaEntriesBySubscriptionId.clear(),this.masterSubEmitter?.removeAllListeners())}),e.addEventListener("open",()=>{let t={type:"open"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.refreshAllSubscriptions().catch(console.error),this.pingTimer||(this.pingTimer=setInterval(()=>{if(this.waitingForPong){this.waitingForPong=!1,e.reconnect();return}e.send(JSON.stringify({type:"ping"})),this.waitingForPong=!0},this.pingIntervalMs))}),this.medplum.addEventListener("change",()=>{let t=this.medplum.getProfile();this.currentProfile&&t===void 0?this.ws.close():t&&this.currentProfile?.id!==t.id&&this.ws.reconnect(),this.currentProfile=t})}emitError(e,t){let n={type:"error",payload:t};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}maybeEmitDisconnect(e){let{subscriptionId:t}=e;if(t){let n={type:"disconnect",payload:{subscriptionId:t}};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}else console.warn("Called disconnect for `CriteriaEntry` before `subscriptionId` was present.")}async getTokenForCriteria(e){let t=e?.subscriptionId;t||(t=(await this.medplum.createResource({...e.subscriptionProps,resourceType:"Subscription",status:"active",reason:`WebSocket subscription for ${le(this.medplum.getProfile())}`,channel:{type:"websocket"},criteria:e.criteria})).id);let{parameter:n}=await this.medplum.get(`fhir/R4/Subscription/${t}/$get-ws-binding-token`),i=n?.find(s=>s.name==="token")?.valueString,o=n?.find(s=>s.name==="websocket-url")?.valueUrl;if(!i)throw new d(h("Failed to get token"));if(!o)throw new d(h("Failed to get URL from $get-ws-binding-token"));return[t,i]}maybeGetCriteriaEntry(e,t){let n=this.criteriaEntries.get(e);if(n){if(!t)return n.bareCriteria;for(let i of n.criteriaWithProps)if(ee(t,i.subscriptionProps))return i}}getAllCriteriaEmitters(){let e=[];for(let t of this.criteriaEntries.values()){t.bareCriteria&&e.push(t.bareCriteria.emitter);for(let n of t.criteriaWithProps)e.push(n.emitter)}return e}addCriteriaEntry(e){let{criteria:t,subscriptionProps:n}=e,i;this.criteriaEntries.has(t)?i=this.criteriaEntries.get(t):(i={criteriaWithProps:[]},this.criteriaEntries.set(t,i)),n?i.criteriaWithProps.push(e):i.bareCriteria=e}removeCriteriaEntry(e){let{criteria:t,subscriptionProps:n,subscriptionId:i,token:o}=e;if(!this.criteriaEntries.has(t))return;let s=this.criteriaEntries.get(t);n?s.criteriaWithProps=s.criteriaWithProps.filter(a=>{let c=a.subscriptionProps;return!ee(n,c)}):s.bareCriteria=void 0,!s.bareCriteria&&s.criteriaWithProps.length===0&&(this.criteriaEntries.delete(t),this.masterSubEmitter?._removeCriteria(t)),i&&this.criteriaEntriesBySubscriptionId.delete(i),o&&this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"unbind-from-token",payload:{token:o}}))}async subscribeToCriteria(e){if(!(this.ws.readyState!==WebSocket.OPEN||e.connecting)){e.connecting=!0;try{let[t,n]=await this.getTokenForCriteria(e);e.subscriptionId=t,e.token=n,this.criteriaEntriesBySubscriptionId.set(t,e),this.ws.send(JSON.stringify({type:"bind-with-token",payload:{token:n}}))}catch(t){console.error(Te(t)),this.emitError(e,t),this.removeCriteriaEntry(e)}}}async refreshAllSubscriptions(){this.criteriaEntriesBySubscriptionId.clear();for(let e of this.criteriaEntries.values())for(let t of[...e.bareCriteria?[e.bareCriteria]:[],...e.criteriaWithProps])t.clearAttachedSubscription(),await this.subscribeToCriteria(t)}addCriteria(e,t){this.masterSubEmitter&&this.masterSubEmitter._addCriteria(e);let n=this.maybeGetCriteriaEntry(e,t);if(n)return n.refCount+=1,n.emitter;let i=new qn(e,t);return this.addCriteriaEntry(i),this.subscribeToCriteria(i).catch(console.error),i.emitter}removeCriteria(e,t){let n=this.maybeGetCriteriaEntry(e,t);if(!n){console.warn("Criteria not known to `SubscriptionManager`. Possibly called remove too many times.");return}n.refCount-=1,!(n.refCount>0)&&(this.maybeEmitDisconnect(n),this.removeCriteriaEntry(n))}getWebSocket(){return this.ws}closeWebSocket(){this.wsClosed||(this.wsClosed=!0,this.ws.close())}reconnectWebSocket(){this.ws.reconnect(),this.wsClosed=!1}getCriteriaCount(){return this.getAllCriteriaEmitters().length}getMasterEmitter(){return this.masterSubEmitter||(this.masterSubEmitter=new We(...Array.from(this.criteriaEntries.keys()))),this.masterSubEmitter}};async function Yc({resource:r,subscription:e,context:t,getPreviousResource:n,logger:i}){if(e.meta?.account&&r.meta?.account?.reference!==e.meta.account.reference)return i?.debug("Ignore resource in different account compartment"),!1;if(!Zc(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=se(o);if(r.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${r.resourceType}")`),!1;if(!await vo(e,r,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let c=X(e,"https://medplum.com/fhir/StructureDefinition/subscription-supported-interaction");return c&&c.valueCode!==t.interaction?(i?.debug(`Ignore rest hook for different interaction (wanted "${c.valueCode}", received "${t.interaction}")`),!1):St(r,s)}function Zc(r,e){let t=r.channel?.type;return t==="rest-hook"?r.channel?.endpoint?!0:(e?.debug("Ignore rest-hook missing URL"),!1):t==="websocket"}async function vo(r,e,t){let n=X(r,"https://medplum.com/fhir/StructureDefinition/fhir-path-criteria-expression");if(!n?.valueString)return!0;let i=await t(e),o={"%current":g(e),"%previous":g(i??{})};return w(n.valueString,[g(e)],o)?.[0]?.value===!0}var vr="3.2.30-d58068ccd",Xc="medplum-cli",Ro=A.FHIR_JSON+", */*; q=0.1",eu="https://api.medplum.com/",tu=1e3,ru=6e4,nu=0,iu=3e5,ou="Binary/",To={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},Co=(o=>(o.ClientCredentials="client_credentials",o.AuthorizationCode="authorization_code",o.RefreshToken="refresh_token",o.JwtBearer="urn:ietf:params:oauth:grant-type:jwt-bearer",o.TokenExchange="urn:ietf:params:oauth:grant-type:token-exchange",o))(Co||{}),Po=(o=>(o.AccessToken="urn:ietf:params:oauth:token-type:access_token",o.RefreshToken="urn:ietf:params:oauth:token-type:refresh_token",o.IdToken="urn:ietf:params:oauth:token-type:id_token",o.Saml1Token="urn:ietf:params:oauth:token-type:saml1",o.Saml2Token="urn:ietf:params:oauth:token-type:saml2",o))(Po||{}),wo=(o=>(o.ClientSecretBasic="client_secret_basic",o.ClientSecretPost="client_secret_post",o.ClientSecretJwt="client_secret_jwt",o.PrivateKeyJwt="private_key_jwt",o.None="none",o))(wo||{}),Ao=(e=>(e.JwtBearer="urn:ietf:params:oauth:client-assertion-type:jwt-bearer",e))(Ao||{}),Ot=class extends ${constructor(t){super();this.initComplete=!0;if(t?.baseUrl&&!t.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");this.options=t??{},this.fetch=t?.fetch??su(),this.storage=t?.storage??new qe,this.createPdfImpl=t?.createPdf,this.baseUrl=nr(t?.baseUrl??eu),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.clientId=t?.clientId??"",this.clientSecret=t?.clientSecret??"",this.defaultHeaders=t?.defaultHeaders??{},this.onUnauthenticated=t?.onUnauthenticated,this.refreshGracePeriod=t?.refreshGracePeriod??iu,this.cacheTime=t?.cacheTime??(typeof window>"u"?nu:ru),this.cacheTime>0?this.requestCache=new Et(t?.resourceCacheSize??tu):this.requestCache=void 0,t?.autoBatchTime?(this.autoBatchTime=t.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0),t?.accessToken&&this.setAccessToken(t.accessToken),this.storage.getInitPromise===void 0?(t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initPromise=Promise.resolve(),this.dispatchEvent({type:"storageInitialized"})):(this.initComplete=!1,this.initPromise=this.storage.getInitPromise(),this.initPromise.then(()=>{t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initComplete=!0,this.dispatchEvent({type:"storageInitialized"})}).catch(n=>{console.error(n),this.initComplete=!0,this.dispatchEvent({type:"storageInitFailed",payload:{error:n}})})),this.setupStorageListener()}get isInitialized(){return this.initComplete}getInitPromise(){return this.initPromise}async attemptResumeActiveLogin(){let t=this.getActiveLogin();t&&(this.setAccessToken(t.accessToken,t.refreshToken),await this.refreshProfile())}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}getFhircastHubUrl(){return this.fhircastHubUrl}getDefaultHeaders(){return this.defaultHeaders}clear(){this.storage.clear(),typeof window<"u"&&sessionStorage.clear(),this.clearActiveLogin()}clearActiveLogin(){this.storage.setString("activeLogin",void 0),this.requestCache?.clear(),this.accessToken=void 0,this.refreshToken=void 0,this.refreshPromise=void 0,this.accessTokenExpires=void 0,this.sessionDetails=void 0,this.medplumServer=void 0,this.dispatchEvent({type:"change"})}invalidateUrl(t){t=t.toString(),this.requestCache?.delete(t)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(t){let n=U(this.fhirBaseUrl,t);if(this.requestCache)for(let i of this.requestCache.keys())(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache.delete(i)}get(t,n={}){t=t.toString();let i=this.getCacheEntry(t,n);if(i)return i.value;let o;t.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue&&!n.disableAutoBatch?o=new Promise((a,c)=>{this.autoBatchQueue.push({method:"GET",url:t.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:c}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):o=this.request("GET",t,n);let s=new M(o);return this.setCacheEntry(t,s),s}post(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("POST",t,o)}put(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("PUT",t,o)}patch(t,n,i={}){return t=t.toString(),this.setRequestBody(i,n),this.setRequestContentType(i,A.JSON_PATCH),this.invalidateUrl(t),this.request("PATCH",t,i)}delete(t,n){return t=t.toString(),this.invalidateUrl(t),this.request("DELETE",t,n)}async startNewUser(t,n){let{codeChallengeMethod:i,codeChallenge:o}=await this.startPkce();return this.post("auth/newuser",{...t,clientId:t.clientId??this.clientId,codeChallengeMethod:i,codeChallenge:o},void 0,n)}async startNewProject(t,n){return this.post("auth/newproject",t,void 0,n)}async startNewPatient(t,n){return this.post("auth/newpatient",t,void 0,n)}async startLogin(t,n){return this.post("auth/login",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async startGoogleLogin(t,n){return this.post("auth/google",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async ensureCodeChallenge(t){return t.codeChallenge?t:{...t,...await this.startPkce()}}async signOut(){await this.post(this.logoutUrl,{}),this.clear()}async signInWithRedirect(t){let i=new URLSearchParams(window.location.search).get("code");if(!i){await this.requestAuthorization(t);return}return this.processCode(i)}signOutWithRedirect(){window.location.assign(this.logoutUrl)}async signInWithExternalAuth(t,n,i,o,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),window.location.assign(this.getExternalAuthRedirectUri(t,n,i,a,s))}async exchangeExternalAccessToken(t,n){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");let i=new URLSearchParams;return i.set("grant_type","urn:ietf:params:oauth:grant-type:token-exchange"),i.set("subject_token_type","urn:ietf:params:oauth:token-type:access_token"),i.set("client_id",n),i.set("subject_token",t),this.fetchTokens(i)}getExternalAuthRedirectUri(t,n,i,o,s=!0){let a=new URL(t);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",n),a.searchParams.set("redirect_uri",i),a.searchParams.set("scope",o.scope??"openid profile email"),a.searchParams.set("state",JSON.stringify(o)),s){let{codeChallenge:c,codeChallengeMethod:u}=o;if(!u)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!c)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");a.searchParams.set("code_challenge_method",u),a.searchParams.set("code_challenge",c)}return a.toString()}fhirUrl(...t){return new URL(U(this.fhirBaseUrl,t.join("/")))}fhirSearchUrl(t,n){let i=this.fhirUrl(t);return n&&(i.search=Sn(n)),i}search(t,n,i){let o=this.fhirSearchUrl(t,n),s="search-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=new M((async()=>{let u=await this.get(o,i);if(u.entry)for(let l of u.entry)this.cacheResource(l.resource);return u})());return this.setCacheEntry(s,c),c}searchOne(t,n,i){let o=this.fhirSearchUrl(t,n);o.searchParams.set("_count","1"),o.searchParams.sort();let s="searchOne-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=new M(this.search(t,o.searchParams,i).then(u=>u.entry?.[0]?.resource));return this.setCacheEntry(s,c),c}searchResources(t,n,i){let s="searchResources-"+this.fhirSearchUrl(t,n).toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=new M(this.search(t,n,i).then(bo));return this.setCacheEntry(s,c),c}async*searchResourcePages(t,n,i){let o=this.fhirSearchUrl(t,n);for(;o;){let s=new URL(o).searchParams,a=await this.search(t,s,i),c=a.link?.find(u=>u.relation==="next");if(!a.entry?.length&&!c)break;yield bo(a),o=c?.url?new URL(c.url):void 0}}searchValueSet(t,n,i){return this.valueSetExpand({url:t,filter:n},i)}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 To;let[i,o]=n.split("/");if(!(!i||!o))return this.getCached(i,o)}readResource(t,n,i){if(!n)throw new Error('The "id" parameter cannot be null, undefined, or an empty string.');return this.get(this.fhirUrl(t,n),i)}readReference(t,n){let i=t.reference;if(!i)return new M(Promise.reject(new Error("Missing reference")));if(i==="system")return new M(Promise.resolve(To));let[o,s]=i.split("/");return!o||!s?new M(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}requestSchema(t){if(Yr(t))return Promise.resolve();let n=t+"-requestSchema",i=this.getCacheEntry(n,void 0);if(i)return i.value;let o=new M((async()=>{let s=`{
3
+ `?(this.pos.line++,this.pos.column=0):this.pos.column++}buildToken(e,t){let n=this.markStack.pop();if(!n)throw new Error("No mark for token");return{id:e,value:t,...n}}};function Xa(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&Za.includes(r.value)))}var xt=["true","false"],vt=["!=","!~","<=",">=","{}","->"];function Qi(r){return new oe(r,xt,vt).tokenize()}var y={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},ec={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},tc={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new he(e,t)},precedence:y.Indexer},rc={parse(r,e){if(!(e instanceof q))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new J(e.name,t)},precedence:y.FunctionCall};function nc(r){let e=r.split(" "),t=parseFloat(e[0]),n=e[1];return n?.startsWith("'")&&n.endsWith("'")?n=n.substring(1,n.length-1):n="{"+n+"}",{value:t,unit:n}}function Be(){return new Qe().registerPrefix("String",{parse:(r,e)=>new L({type:p.string,value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new L({type:p.dateTime,value:Ue(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new L({type:p.Quantity,value:nc(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new L({type:e.value.includes(".")?p.decimal:p.integer,value:parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new L({type:p.boolean,value:!0})}).registerPrefix("false",{parse:()=>new L({type:p.boolean,value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new q(e.value)}).registerPrefix("{}",{parse:()=>new ot}).registerPrefix("(",ec).registerInfix("[",tc).registerInfix("(",rc).prefix("+",y.UnaryAdd,(r,e)=>new st("+",e,t=>t)).prefix("-",y.UnarySubtract,(r,e)=>new D("-",e,e,(t,n)=>-n)).infixLeft(".",y.Dot,(r,e,t)=>new ie(r,t)).infixLeft("/",y.Divide,(r,e,t)=>new D("/",r,t,(n,i)=>n/i)).infixLeft("*",y.Multiply,(r,e,t)=>new D("*",r,t,(n,i)=>n*i)).infixLeft("+",y.Add,(r,e,t)=>new D("+",r,t,(n,i)=>n+i)).infixLeft("-",y.Subtract,(r,e,t)=>new D("-",r,t,(n,i)=>n-i)).infixLeft("|",y.Union,(r,e,t)=>new Ae(r,t)).infixLeft("=",y.Equals,(r,e,t)=>new lt(r,t)).infixLeft("!=",y.NotEquals,(r,e,t)=>new pt(r,t)).infixLeft("~",y.Equivalent,(r,e,t)=>new dt(r,t)).infixLeft("!~",y.NotEquivalent,(r,e,t)=>new ft(r,t)).infixLeft("<",y.LessThan,(r,e,t)=>new D("<",r,t,(n,i)=>n<i)).infixLeft("<=",y.LessThanOrEquals,(r,e,t)=>new D("<=",r,t,(n,i)=>n<=i)).infixLeft(">",y.GreaterThan,(r,e,t)=>new D(">",r,t,(n,i)=>n>i)).infixLeft(">=",y.GreaterThanOrEquals,(r,e,t)=>new D(">=",r,t,(n,i)=>n>=i)).infixLeft("&",y.Ampersand,(r,e,t)=>new at(r,t)).infixLeft("and",y.And,(r,e,t)=>new mt(r,t)).infixLeft("as",y.As,(r,e,t)=>new fe(r,t)).infixLeft("contains",y.Contains,(r,e,t)=>new ct(r,t)).infixLeft("div",y.Divide,(r,e,t)=>new D("div",r,t,(n,i)=>n/i|0)).infixLeft("in",y.In,(r,e,t)=>new ut(r,t)).infixLeft("is",y.Is,(r,e,t)=>new me(r,t)).infixLeft("mod",y.Modulo,(r,e,t)=>new D("mod",r,t,(n,i)=>n%i)).infixLeft("or",y.Or,(r,e,t)=>new ht(r,t)).infixLeft("xor",y.Xor,(r,e,t)=>new yt(r,t)).infixLeft("implies",y.Implies,(r,e,t)=>new gt(r,t))}var ic=Be();function ar(r){return new it(r,ic.construct(Qi(r)).consumeAndParse())}function Oe(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]=g(t[n]))}return w(r,t).map(n=>n.value)}function w(r,e,t={}){return ar(r).eval({variables:t},e).map(i=>({type:i.type,value:i.value?.valueOf()}))}var Cn=(l=>(l.BOOLEAN="BOOLEAN",l.NUMBER="NUMBER",l.QUANTITY="QUANTITY",l.TEXT="TEXT",l.REFERENCE="REFERENCE",l.CANONICAL="CANONICAL",l.DATE="DATE",l.DATETIME="DATETIME",l.PERIOD="PERIOD",l.UUID="UUID",l))(Cn||{});function ur(r,e){let t=N.types[r]?.searchParamsDetails?.[e.code];return t||(t=sc(r,e)),t}function oc(r,e,t){let n=N.types[r];n||(n={},N.types[r]=n),n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=t}function sc(r,e){let t=e.code,n=Pn(r,e.expression),i={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let s of n){let a=cr(s),c=vn(()=>a.join("."));a.length===1&&a[0]instanceof C?i.propertyTypes.add("boolean"):e.code.endsWith(":identifier")?i.propertyTypes.add("Identifier"):c().endsWith("extension.value.code")||c().endsWith("extension.value.coding.code")?(i.array=!0,i.propertyTypes.add("code")):Ki(i,a,r,1),c().endsWith("extension.valueDateTime")&&(i.array=!1)}let o={type:uc(e,i.propertyTypes),elementDefinitions:i.elementDefinitions,array:i.array};return oc(r,t,o),o}function Ki(r,e,t,n){let i=e[n];if(i instanceof fe){r.propertyTypes.add(i.right.toString());return}if(i instanceof J){ac(r,i);return}let o=i.toString(),s=et(t,o);if(!s)throw new Error(`Element definition not found for ${t} ${o}`);let a=!1,c=n+1;if(c<e.length&&e[c]instanceof he&&(a=!0,c++),s.isArray&&!a&&(r.array=!0),c>=e.length){r.elementDefinitions.push(s);for(let u of s.type)r.propertyTypes.add(u.code);return}for(let u of s.type){let l=u.code;cc(l)&&(l=s.type[0].code),Ki(r,e,l,c)}}function ac(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 me){r.propertyTypes.add(e.args[0].right.toString());return}throw new Error(`Unhandled FHIRPath function: ${e.name}`)}function cc(r){return r==="Element"||r==="BackboneElement"}function uc(r,e){switch(r.type){case"date":return e.size===1&&e.has(p.date)?"DATE":"DATETIME";case"number":return"NUMBER";case"quantity":return"QUANTITY";case"reference":return e.has(p.canonical)?"CANONICAL":"REFERENCE";case"token":return e.size===1&&e.has(p.boolean)?"BOOLEAN":"TEXT";default:return"TEXT"}}function Pn(r,e){let t=[],n=ar(e);return Rn(r,n.child,t),t}function lc(r,e){let t=Pn(r,e);if(t.length!==0)return t.map(n=>n.toString()).join(" | ")}function Rn(r,e,t){e instanceof Ae?(Rn(r,e.left,t),Rn(r,e.right,t)):e.toString().startsWith(r+".")&&t.push(e)}function cr(r){if(r instanceof fe||r instanceof he)return[cr(r.left),r].flat();if(r instanceof C)return[r];if(r instanceof ie)return[cr(r.left),cr(r.right)].flat();if(r instanceof J){if(r.name==="where"&&!(r.args[0]instanceof me))return[];if(r.name==="last")return[]}return[r]}var pc=20,dc=1e3,wn=(T=>(T.EQUALS="eq",T.NOT_EQUALS="ne",T.GREATER_THAN="gt",T.LESS_THAN="lt",T.GREATER_THAN_OR_EQUALS="ge",T.LESS_THAN_OR_EQUALS="le",T.STARTS_AFTER="sa",T.ENDS_BEFORE="eb",T.APPROXIMATELY="ap",T.CONTAINS="contains",T.STARTS_WITH="sw",T.EXACT="exact",T.TEXT="text",T.NOT="not",T.ABOVE="above",T.BELOW="below",T.IN="in",T.NOT_IN="not-in",T.OF_TYPE="of-type",T.MISSING="missing",T.PRESENT="present",T.IDENTIFIER="identifier",T.ITERATE="iterate",T))(wn||{}),Zi={contains:"contains",exact:"exact",above:"above",below:"below",text:"text",not:"not",in:"in","not-in":"not-in","of-type":"of-type",missing:"missing",identifier:"identifier",iterate:"iterate"},An={eq:"eq",ne:"ne",lt:"lt",le:"le",gt:"gt",ge:"ge",sa:"sa",eb:"eb",ap:"ap",sw:"sw"};function se(r,e){if(!r)throw new Error("Invalid search URL");let t="",n;if(typeof r=="string")if(r.includes("?")){let[s,a]=r.split("?");t=s,n=new URLSearchParams(a)}else t=r;else typeof r=="object"&&(t=r.pathname,n=r.searchParams);let i;t.includes("/")?i=t.split("/").filter(Boolean).pop():i=t;let o=[];if(n&&o.push(...n.entries()),e)for(let[s,a]of Object.entries(e))if(Array.isArray(a))for(let c of a)o.push([s,c]);else o.push([s,a??""]);return yc(i,o)}function fc(r){return se(r)}function mc(r){return se(r)}function hc(r){return se(r)}function yc(r,e){let t={resourceType:r};for(let[n,i]of e)gc(t,n,i);return t}function gc(r,e,t){let n,i,o=e.indexOf(":");if(o>=0?(n=e.substring(0,o),i=e.substring(o+1)):(n=e,i=""),n!=="_"){if(n==="_has"||e.includes(".")){r.filters=Ce(r.filters,{code:e,operator:"eq",value:t});return}switch(n){case"_sort":xc(r,t);break;case"_cursor":r.cursor=t;break;case"_count":r.count=parseInt(t,10);break;case"_offset":r.offset=parseInt(t,10);break;case"_total":r.total=t;break;case"_summary":t==="count"?(r.total="accurate",r.count=0):(t==="true"||t==="data"||t==="text")&&(r.summary=t);break;case"_include":{let s=zi(t);i==="iterate"&&(s.modifier="iterate"),r.include=Ce(r.include,s);break}case"_revinclude":{let s=zi(t);i==="iterate"&&(s.modifier="iterate"),r.revInclude=Ce(r.revInclude,s);break}case"_fields":case"_elements":r.fields=t.split(",");break;case"_type":r.types=t.split(",");break;case"_format":r.format=t;break;case"_pretty":r.pretty=t==="true";break;default:{let s=N.types[r.resourceType]?.searchParams?.[n];s?r.filters=Ce(r.filters,Xi(s,i,t)):r.filters=Ce(r.filters,Tc(n,i,t))}}}}function xc(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 vc=["missing","present"];function Xi(r,e,t){if(vc.includes(e))return{code:r.code,operator:e,value:t};switch(r.type){case"number":case"date":case"quantity":{let{operator:n,value:i}=Sc(t);if(!Ji(r,i))throw new d(E(`Invalid format for ${r.type} search parameter: ${i}`));return{code:r.code,operator:n,value:i}}case"reference":case"string":case"token":case"uri":if(!Ji(r,t))throw new d(E(`Invalid format for ${r.type} search parameter: ${t}`));return{code:r.code,operator:Ec(e),value:t};default:throw new Error("Unrecognized search parameter type: "+r.type)}}function Tc(r,e,t){let n="eq";if(e)n=e;else if(t.length>=2){let i=t.substring(0,2);i in An&&(t.length===2||t.at(2)?.match(/\d/))&&(n=i,t=t.substring(i.length))}return{code:r,operator:n,value:t}}function Sc(r){let e=r.substring(0,2),t=An[e];return t?{operator:t,value:r.substring(2)}:{operator:"eq",value:r}}function Ec(r){return Zi[r]??"eq"}function zi(r){let e=r.split(":");if(e.includes("*"))throw new d(E("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new d(E(`Invalid include value '${r}': must be of the form ResourceType:search-parameter`));if(e.length===2)return{resourceType:e[0],searchParam:e[1]};if(e.length===3)return{resourceType:e[0],searchParam:e[1],targetType:e[2]};throw new d(E(`Invalid include value '${r}'`))}function Ji(r,e){switch(r.type){case"date":return be(e);default:return!0}}var bc=/{{([^{}]+)}}/g;function Rc(r,e){return r=r.replaceAll(bc,(t,n)=>{let i=w(n,[],e);return i.length!==1?"":bn(i[0])}),se(r)}function Cc(r){let e=[];return r.fields&&e.push("_fields="+r.fields.join(",")),r.filters&&r.filters.forEach(t=>e.push(Pc(t))),r.sortRules&&r.sortRules.length>0&&e.push(wc(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.include&&r.include.forEach(t=>e.push(Yi("_include",t))),r.revInclude&&r.revInclude.forEach(t=>e.push(Yi("_revinclude",t))),e.length===0?"":(nt(e),"?"+e.join("&"))}function Pc(r){let e=r.operator in Zi?":"+r.operator:"",t=r.operator!=="eq"&&r.operator in An?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function wc(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function Yi(r,e){return r+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function Tt(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 St(r,e){if(e.resourceType!==r.resourceType)return!1;if(e.filters){for(let t of e.filters)if(!Ac(r,e,t))return!1}return!0}function Ac(r,e,t){let n=N.types[e.resourceType]?.searchParams?.[t.code];if(!n)return!1;if(t.operator==="missing"||t.operator==="present")return Oc(r,t,n);switch(n.type){case"reference":return Ic(r,t,n);case"string":case"uri":return eo(r,t,n);case"token":return kc(r,t,n);case"date":return _c(r,t,n);default:return!1}}function Oc(r,e,t){let i=Oe(t.expression,r).length>0;return(e.operator==="missing"&&e.value==="false"||e.operator==="present"&&e.value==="true")===i}function Ic(r,e,t){let n=Oe(t.expression,r),i=lr(e.operator);if(e.value===""&&n.length===0)return e.operator==="eq";let o=n.map(s=>typeof s=="string"?s:s.reference);for(let s of Tt(e.value)){let a=o.includes(s);if(!a&&e.code==="_compartment"&&(a=o.some(c=>c?.endsWith("/"+s))),a)return!i}return i}function kc(r,e,t){return ur(r.resourceType,t).type==="BOOLEAN"?Vc(r,e,t):eo(r,e,t,!0)}function Vc(r,e,t){let n=Oe(t.expression,r),i=e.value==="true",o=n.includes(i);return lr(e.operator)?!o:o}function eo(r,e,t,n){let o=ur(r.resourceType,t).elementDefinitions?.[0]?.type?.[0]?.code,s=Oe(t.expression,r),a=Tt(e.value),c=lr(e.operator);for(let u of s)for(let l of a){let m;if(o===p.Identifier?m=Dc(u,e.operator,l):o===p.CodeableConcept?m=Mc(u,e.operator,l):m=On(u,e.operator,l,n),m)return!c}return c}function On(r,e,t,n){if(n&&t.includes("|")){let[o,s]=t.split("|");return On(r,e,o,!1)&&(!s||On(r,e,s,!1))}let i="";return r&&(typeof r=="string"?i=r:typeof r=="object"&&(i=JSON.stringify(r))),i.toLowerCase().includes(t.toLowerCase())}function Dc(r,e,t){if(t.includes("|")){let[n,i]=t.split("|").map(o=>o.toLowerCase());return!n&&!i?!1:n?r.system?.toLowerCase()===n&&(!i||r.value?.toLowerCase()===i):!r.system&&r.value?.toLowerCase()===i}return r.value?.toLowerCase()===t.toLowerCase()}function Mc(r,e,t){if(t.includes("|")){let[n,i]=t.split("|").map(o=>o.toLowerCase());return!n&&!i?!1:n?r.coding?.some(o=>o.system?.toLowerCase()===n&&(!i||o.code?.toLowerCase()===i))??!1:r.coding?.some(o=>!o.system&&o.code?.toLowerCase()===i)??!1}return r.text?.toLowerCase()===t.toLowerCase()||(r.coding?.some(n=>n.code?.toLowerCase()===t.toLowerCase())??!1)}function _c(r,e,t){let n=Oe(t.expression,r),i=Tt(e.value),o=lr(e.operator);for(let s of n)for(let a of i)if(Nc(s,e.operator,a))return!o;return o}function Nc(r,e,t){switch(e){case"sa":case"gt":return r>t;case"ge":return r>=t;case"eb":case"lt":return r<t;case"le":return r<=t;case"eq":case"ne":return r===t;default:return!1}}function lr(r){return r==="ne"||r==="not"}var Lc={resourceType:"*"},to=["DomainConfiguration","JsonWebKey","Login"],ro=["PasswordChangeRequest","UserSecurityRequest","Project","ProjectMembership","User"],no=(R=>(R.READ="read",R.VREAD="vread",R.UPDATE="update",R.PATCH="patch",R.DELETE="delete",R.HISTORY="history",R.HISTORY_INSTANCE="history-instance",R.HISTORY_TYPE="history-type",R.HISTORY_SYSTEM="history-system",R.CREATE="create",R.SEARCH="search",R.SEARCH_TYPE="search-type",R.SEARCH_SYSTEM="search-system",R.SEARCH_COMPARTMENT="search-compartment",R.CAPABILITIES="capabilities",R.TRANSACTION="transaction",R.BATCH="batch",R.OPERATION="operation",R))(no||{}),Fc=["read","vread","history","history-instance"];function Uc(r,e){if(r.resource){for(let t of r.resource)if(In(t.resourceType,e))return!0}return!1}function io(r,e){if(to.includes(e))return!1;if(r.resource){for(let t of r.resource)if(In(t.resourceType,e)&&!t.readonly)return!0}return!1}function Bc(r,e){let t=e.resourceType;return io(r,t)?oo(r,e,!1):!1}function oo(r,e,t){if(r.resource){for(let n of r.resource)if(so(e,t?"read":"update",n))return!0}return!1}function qc(r,e,t){if(!t)return Lc;if(t.resource){for(let n of t.resource)if(so(r,e,n))return n}}function so(r,e,t){let n=r.resourceType;return!(!In(t.resourceType,n)||t.readonly&&!Fc.includes(e)||t.compartment&&!r.meta?.compartment?.find(i=>i.reference===t.compartment?.reference)||t.criteria&&!St(r,se(t.criteria)))}function In(r,e){return r===e||r==="*"&&!ro.includes(e)}function kn(r){if(typeof window<"u"){let e=window.atob(r),t=Uint8Array.from(e,n=>n.charCodeAt(0));return new window.TextDecoder().decode(t)}if(typeof Buffer<"u")return Buffer.from(r,"base64").toString("utf-8");throw new Error("Unable to decode base64")}function Vn(r){if(typeof window<"u"){let e=new window.TextEncoder().encode(r),t=String.fromCharCode.apply(null,e);return window.btoa(t)}if(typeof Buffer<"u")return Buffer.from(r,"utf8").toString("base64");throw new Error("Unable to encode base64")}function pr(){let r=new Uint32Array(28);return crypto.getRandomValues(r),hn(r.buffer)}async function Dn(r){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(r))}function ye(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,r=>{let e=Math.random()*16|0;return(r==="x"?e:e&3|8).toString(16)})}function ao(r){let e={};r=de(r);for(let i of r.entry||[]){i.resource?.meta!==void 0&&(delete i.resource.meta.author,delete i.resource.meta.compartment,delete i.resource.meta.lastUpdated,delete i.resource.meta.project,delete i.resource.meta.versionId);let o=i.resource?.id;o&&(e[o]=ye(),i.fullUrl="urn:uuid:"+e[o],delete i.resource?.id)}let t=r.entry,n=JSON.stringify({resourceType:"Bundle",type:"transaction",entry:t?.map(i=>({fullUrl:i.fullUrl,request:{method:"POST",url:i.resource.resourceType},resource:i.resource}))},(i,o)=>jc(i,o,e),2);return co(JSON.parse(n))}function jc(r,e,t){if(r==="reference"&&typeof e=="string"){let n;if(e.includes("/")?n=e.split("/")[1]:e.startsWith("urn:uuid:")?n=e.slice(9):e.startsWith("#")&&(n=e.slice(1)),n){let i=t[n];if(i)return"urn:uuid:"+i}}return e}function co(r){let e=$c(r),{sorted:t,cycles:n}=Wc(e),i={};for(let s of r.entry??[])s.fullUrl&&(i[s.fullUrl]=s);let o=t.map(s=>i[s]);for(let s of n)for(let a of s){let c=i[a],u={...c,request:{...c.request,method:"PUT"}};o.push(u)}return{...r,entry:o}}function Wc(r){let e=[],t={},n=[];for(let o of Object.keys(r))t[o]=0;function i(o,s){if(t[o]===2)return!0;if(t[o]===1){let c=s.lastIndexOf(o);return c!==-1&&n.push(s.slice(c)),!0}t[o]=1,s.push(o);let a=!1;for(let c of r[o])i(c,s)||(a=!0);return t[o]=2,s.pop(),e.unshift(o),!a}for(let o in r)t[o]===0&&i(o,[]);return{sorted:e,cycles:n}}function uo(r,e){for(let t in r)if(r[t]&&typeof r[t]=="object"){let n=r[t];if(ue(n)){let i=n.reference;i.startsWith("urn:uuid:")&&e(i)}else uo(n,e)}}function $c(r){let e={};for(let t of r.entry||[])t.fullUrl&&(e[t.fullUrl]=[]);for(let t of r.entry||[]){let n=t.fullUrl;t.resource&&uo(t.resource,i=>{e[i]&&e[i].push(n)})}return e}function Gc(r){r=de(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=ye());return ao(e)}var Et=class{constructor(e=10){this.max=e,this.cache=new Map}clear(){this.cache.clear()}get(e){let t=this.cache.get(e);return t&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size>=this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}delete(e){this.cache.delete(e)}keys(){return this.cache.keys()}first(){return this.cache.keys().next().value}};var A={CSS:"text/css",DICOM:"application/dicom",FAVICON:"image/vnd.microsoft.icon",FHIR_JSON:"application/fhir+json",FORM_URL_ENCODED:"application/x-www-form-urlencoded",HL7_V2:"x-application/hl7-v2+er7",HTML:"text/html",JAVASCRIPT:"text/javascript",JSON:"application/json",JSON_PATCH:"application/json-patch+json",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"};var dr=class{constructor(){this.listeners={}}addEventListener(e,t){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)}removeEventListener(e,t){let n=this.listeners[e];if(n){for(let i=0;i<n.length;i++)if(n[i]===t){n.splice(i,1);return}}}dispatchEvent(e){let t=this.listeners[e.type];if(t)for(let n of t)n.call(this,e);return!e.defaultPrevented}removeAllListeners(){this.listeners={}}},$=class{constructor(){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()}};var fr={"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"},po=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],mr=["DiagnosticReport-update"];function Mn(r){return mr.includes(r)}function _n(r){if(mr.includes(r))throw new d(h(`'context.version' is required for '${r}'.`))}var fo={"Patient-open":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"Patient-close":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"ImagingStudy-open":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"ImagingStudy-close":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"Encounter-open":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"Encounter-close":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"DiagnosticReport-open":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-close":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-select":{report:{resourceType:"DiagnosticReport"},select:{resourceType:"*",isArray:!0}},"DiagnosticReport-update":{report:{resourceType:"DiagnosticReport"},patient:{resourceType:"Patient",optional:!0},study:{resourceType:"ImagingStudy",optional:!0},updates:{resourceType:"Bundle"}},syncerror:{operationoutcome:{resourceType:"OperationOutcome"}}};function mo(r){return po.includes(r)}function Nn(r){return!!r.endpoint}function hr(r){if(!Rt(r))throw new d(h("subscriptionRequest must be an object conforming to SubscriptionRequest type."));let{channelType:e,mode:t,topic:n,events:i}=r,o={"hub.channel.type":e,"hub.mode":t,"hub.topic":n,"hub.events":i.join(",")};return Nn(r)&&(o.endpoint=r.endpoint),new URLSearchParams(o).toString()}function Rt(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(!fr[o])return!1;return!(Nn(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function lo(r,e,t,n){if(typeof e!="object")throw new d(h(`context[${t}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.id&&typeof e.id=="string"))throw new d(h(`context[${t}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new d(h(`context[${t}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!mo(e.resourceType))throw new d(h(`context[${t}] is invalid. Resource must contain a valid FHIRcast resource type. Resource type is not a known resource type.`));if(i&&e.resourceType!==i)throw new d(h(`context[${t}] is invalid. context[${t}] for the '${r}' event should contain resource of type ${i}.`))}}function Hc(r,e,t,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),!n.isArray)lo(r,e.resource,t,n);else{let{resources:o}=e;if(!o)throw new d(h(`context[${t}] is invalid. context[${t}] for the '${r}' with key '${String(e.key)}' should contain an array of resources on the key 'resources'.`));for(let s of o)lo(r,s,t,n)}}function Qc(r,e){let t=new Map,n=fo[r];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new d(h(`Key '${o}' not found for event '${r}'. Make sure to add only valid keys.`));Hc(r,e[i],i,n[o],t)}for(let[i,o]of Object.entries(n)){if(!(o.optional||t.has(i)))throw new d(h(`Missing required key '${i}' on context for '${r}' event.`));if(!o.manyAllowed&&(t.get(i)||0)>1)throw new d(h(`${t.get(i)} context entries with key '${i}' found for the '${r}' event when schema only allows for 1.`))}}function yr(r,e,t,n){if(!(r&&typeof r=="string"))throw new d(h("Must provide a topic."));if(!fr[e])throw new d(h(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(fr).join(", ")}`));if(typeof t!="object")throw new d(h("context must be a context object or array of context objects."));if(mr.includes(e)&&!n)throw new d(h(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(t)?t:[t];return Qc(e,i),{timestamp:new Date().toISOString(),id:ye(),event:{"hub.topic":r,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var bt=class extends ${constructor(e){if(super(),this.subRequest=e,!e.endpoint)throw new d(h("Subscription request should contain an endpoint."));if(!Rt(e))throw new d(h("Subscription request failed validation."));let t=new WebSocket(e.endpoint);t.addEventListener("open",()=>{this.dispatchEvent({type:"connect"}),t.addEventListener("message",n=>{let i=JSON.parse(n.data);if(i["hub.topic"])return;let o=i;o.event["hub.event"]!=="heartbeat"&&(this.dispatchEvent({type:"message",payload:o}),t.send(JSON.stringify({id:i?.id,timestamp:new Date().toISOString()})))}),t.addEventListener("close",()=>{this.dispatchEvent({type:"disconnect"})})}),this.websocket=t}disconnect(){this.websocket.close()}};function Kc(r){let e=r.replace(/-/g,"+").replace(/_/g,"/"),t=kn(e),n=Array.from(t).reduce((o,s)=>{let a=("00"+s.charCodeAt(0).toString(16)).slice(-2);return`${o}%${a}`},""),i=decodeURIComponent(n);return JSON.parse(i)}function Ln(r){return r.split(".").length===3}function Ct(r){let[e,t,n]=r.split(".");return Kc(t)}function Fn(r){try{return typeof Ct(r).login_id=="string"}catch{return!1}}function Un(r){try{let t=Ct(r).exp;return typeof t=="number"?t*1e3:void 0}catch{return}}var Pt=class{constructor(e){this.medplum=e}async get(e){return this.medplum.get(`keyvalue/v1/${e}`)}async set(e,t){await this.medplum.put(`keyvalue/v1/${e}`,t,A.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var ho;ho=Symbol.toStringTag;var M=class{constructor(e){this[ho]="ReadablePromise";this.status="pending";this.suspender=e.then(t=>(this.status="success",this.response=t,t),t=>{throw this.status="error",this.error=t,t})}isPending(){return this.status==="pending"}isOk(){return this.status==="success"}read(){switch(this.status){case"pending":throw this.suspender;case"error":throw this.error;default:return this.response}}then(e,t){return this.suspender.then(e,t)}catch(e){return this.suspender.catch(e)}finally(e){return this.suspender.finally(e)}};var qe=class{constructor(e){this.storage=e??(typeof localStorage<"u"?localStorage:new gr)}clear(){this.storage.clear()}getString(e){return this.storage.getItem(e)??void 0}setString(e,t){t?this.storage.setItem(e,t):this.storage.removeItem(e)}getObject(e){let t=this.getString(e);return t?JSON.parse(t):void 0}setObject(e,t){this.setString(e,t?rt(t):void 0)}},gr=class{constructor(){this.data=new Map}get length(){return this.data.size}clear(){this.data.clear()}getItem(e){return this.data.get(e)??null}setItem(e,t){t?this.data.set(e,t):this.data.delete(e)}removeItem(e){this.data.delete(e)}key(e){return Array.from(this.data.keys())[e]}},Bn=class extends qe{constructor(){super();this.initResolve=()=>{};this.initialized=!1,this.initPromise=new Promise(t=>{this.initResolve=t})}setInitialized(){this.initialized||(this.initResolve(),this.initialized=!0)}getInitPromise(){return this.initPromise}get isInitialized(){return this.initialized}};var je={Event:typeof globalThis.Event<"u"?globalThis.Event:void 0,ErrorEvent:void 0,CloseEvent:void 0},yo=!1;function zc(){if(typeof globalThis.Event>"u")throw new Error("Unable to lazy init events for ReconnectingWebSocket. globalThis.Event is not defined yet");je.Event=globalThis.Event,je.ErrorEvent=class extends Event{constructor(e,t){super("error",t),this.message=e.message,this.error=e}},je.CloseEvent=class extends Event{constructor(t=1e3,n="",i){super("close",i);this.wasClean=!0;this.code=t,this.reason=n}}}function xo(r,e){if(!r)throw new Error(e)}function xr(r){return new r.constructor(r.type,r)}var Ie={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},go=!1,wt=class r extends ${constructor(t,n,i={}){yo||(zc(),yo=!0);super();this._retryCount=-1;this._shouldReconnect=!0;this._connectLock=!1;this._closeCalled=!1;this._messageQueue=[];this._debugLogger=console.log.bind(console);this.onclose=null;this.onerror=null;this.onmessage=null;this.onopen=null;this._handleOpen=t=>{this._debug("open event");let{minUptime:n=Ie.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),n),xo(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(xr(t))};this._handleMessage=t=>{this._debug("message event"),this.onmessage&&this.onmessage(t),this.dispatchEvent(xr(t))};this._handleError=t=>{this._debug("error event",t.message),this._disconnect(void 0,t.message==="TIMEOUT"?"timeout":void 0),this.onerror&&this.onerror(t),this._debug("exec error listeners"),this.dispatchEvent(xr(t)),this._connect()};this._handleClose=t=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(t),this.dispatchEvent(xr(t))};this._url=t,this._protocols=n,this._options=i,this._options.startClosed&&(this._shouldReconnect=!1),this._options.binaryType?this._binaryType=this._options.binaryType:this._binaryType="blob",this._options.debugLogger&&(this._debugLogger=this._options.debugLogger),this._connect()}static get CONNECTING(){return 0}static get OPEN(){return 1}static get CLOSING(){return 2}static get CLOSED(){return 3}get CONNECTING(){return r.CONNECTING}get OPEN(){return r.OPEN}get CLOSING(){return r.CLOSING}get CLOSED(){return r.CLOSED}get binaryType(){return this._ws?this._ws.binaryType:this._binaryType}set binaryType(t){this._binaryType=t,this._ws&&(this._ws.binaryType=t)}get retryCount(){return Math.max(this._retryCount,0)}get bufferedAmount(){return this._messageQueue.reduce((n,i)=>(typeof i=="string"?n+=i.length:i instanceof Blob?n+=i.size:n+=i.byteLength,n),0)+(this._ws?.bufferedAmount??0)}get extensions(){return this._ws?.extensions??""}get protocol(){return this._ws?.protocol??""}get readyState(){return this._ws?this._ws.readyState:this._options.startClosed?r.CLOSED:r.CONNECTING}get url(){return this._ws?this._ws.url:""}get shouldReconnect(){return this._shouldReconnect}close(t=1e3,n){if(this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),!this._ws){this._debug("close enqueued: no ws instance");return}if(this._ws.readyState===this.CLOSED){this._debug("close: already closed");return}this._ws.close(t,n)}reconnect(t,n){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED?this._connect():(this._disconnect(t,n),this._connect())}send(t){if(this._ws&&this._ws.readyState===this.OPEN)this._debug("send",t),this._ws.send(t);else{let{maxEnqueuedMessages:n=Ie.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=Ie.reconnectionDelayGrowFactor,minReconnectionDelay:n=Ie.minReconnectionDelay,maxReconnectionDelay:i=Ie.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=Ie.maxRetries,connectionTimeout:n=Ie.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"&&!go&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),go=!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 je.ErrorEvent(Error(i.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new je.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(t=1e3,n){if(this._clearTimeouts(),!!this._ws){this._removeListeners();try{this._ws.close(t,n),this._handleClose(new je.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 Jc=5e3,We=class extends ${constructor(...e){super(),this.criteria=new Set(e)}getCriteria(){return this.criteria}_addCriteria(e){this.criteria.add(e)}_removeCriteria(e){this.criteria.delete(e)}},qn=class{constructor(e,t){this.connecting=!1;this.criteria=e,this.emitter=new We(e),this.refCount=1,this.subscriptionProps=t?{...t}:void 0}clearAttachedSubscription(){this.subscriptionId=void 0,this.token=void 0}},At=class{constructor(e,t,n){this.pingTimer=void 0;this.waitingForPong=!1;if(!(e instanceof Ot))throw new d(h("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(t).toString()}catch{throw new d(h("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 We,this.criteriaEntries=new Map,this.criteriaEntriesBySubscriptionId=new Map,this.wsClosed=!1,this.pingIntervalMs=n?.pingIntervalMs??Jc,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=pe(o.subscription),c={type:"connect",payload:{subscriptionId:a}};this.masterSubEmitter?.dispatchEvent(c);let u=this.criteriaEntriesBySubscriptionId.get(a);if(!u){console.warn("Received handshake for criteria the SubscriptionManager is not listening for yet");return}u.connecting=!1,u.emitter.dispatchEvent({...c});return}this.masterSubEmitter?.dispatchEvent({type:"message",payload:i});let s=this.criteriaEntriesBySubscriptionId.get(pe(o.subscription));if(!s){console.warn("Received notification for criteria the SubscriptionManager is not listening for");return}s.emitter.dispatchEvent({type:"message",payload:i})}catch(n){console.error(n);let i={type:"error",payload:n};this.masterSubEmitter?.dispatchEvent(i);for(let o of this.getAllCriteriaEmitters())o.dispatchEvent({...i})}}),e.addEventListener("error",()=>{let t={type:"error",payload:new d(jr(new Error("WebSocket error")))};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t})}),e.addEventListener("close",()=>{let t={type:"close"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=void 0,this.waitingForPong=!1),this.wsClosed&&(this.criteriaEntries.clear(),this.criteriaEntriesBySubscriptionId.clear(),this.masterSubEmitter?.removeAllListeners())}),e.addEventListener("open",()=>{let t={type:"open"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.refreshAllSubscriptions().catch(console.error),this.pingTimer||(this.pingTimer=setInterval(()=>{if(this.waitingForPong){this.waitingForPong=!1,e.reconnect();return}e.send(JSON.stringify({type:"ping"})),this.waitingForPong=!0},this.pingIntervalMs))}),this.medplum.addEventListener("change",()=>{let t=this.medplum.getProfile();this.currentProfile&&t===void 0?this.ws.close():t&&this.currentProfile?.id!==t.id&&this.ws.reconnect(),this.currentProfile=t})}emitError(e,t){let n={type:"error",payload:t};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}maybeEmitDisconnect(e){let{subscriptionId:t}=e;if(t){let n={type:"disconnect",payload:{subscriptionId:t}};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}else console.warn("Called disconnect for `CriteriaEntry` before `subscriptionId` was present.")}async getTokenForCriteria(e){let t=e?.subscriptionId;t||(t=(await this.medplum.createResource({...e.subscriptionProps,resourceType:"Subscription",status:"active",reason:`WebSocket subscription for ${le(this.medplum.getProfile())}`,channel:{type:"websocket"},criteria:e.criteria})).id);let{parameter:n}=await this.medplum.get(`fhir/R4/Subscription/${t}/$get-ws-binding-token`),i=n?.find(s=>s.name==="token")?.valueString,o=n?.find(s=>s.name==="websocket-url")?.valueUrl;if(!i)throw new d(h("Failed to get token"));if(!o)throw new d(h("Failed to get URL from $get-ws-binding-token"));return[t,i]}maybeGetCriteriaEntry(e,t){let n=this.criteriaEntries.get(e);if(n){if(!t)return n.bareCriteria;for(let i of n.criteriaWithProps)if(ee(t,i.subscriptionProps))return i}}getAllCriteriaEmitters(){let e=[];for(let t of this.criteriaEntries.values()){t.bareCriteria&&e.push(t.bareCriteria.emitter);for(let n of t.criteriaWithProps)e.push(n.emitter)}return e}addCriteriaEntry(e){let{criteria:t,subscriptionProps:n}=e,i;this.criteriaEntries.has(t)?i=this.criteriaEntries.get(t):(i={criteriaWithProps:[]},this.criteriaEntries.set(t,i)),n?i.criteriaWithProps.push(e):i.bareCriteria=e}removeCriteriaEntry(e){let{criteria:t,subscriptionProps:n,subscriptionId:i,token:o}=e;if(!this.criteriaEntries.has(t))return;let s=this.criteriaEntries.get(t);n?s.criteriaWithProps=s.criteriaWithProps.filter(a=>{let c=a.subscriptionProps;return!ee(n,c)}):s.bareCriteria=void 0,!s.bareCriteria&&s.criteriaWithProps.length===0&&(this.criteriaEntries.delete(t),this.masterSubEmitter?._removeCriteria(t)),i&&this.criteriaEntriesBySubscriptionId.delete(i),o&&this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"unbind-from-token",payload:{token:o}}))}async subscribeToCriteria(e){if(!(this.ws.readyState!==WebSocket.OPEN||e.connecting)){e.connecting=!0;try{let[t,n]=await this.getTokenForCriteria(e);e.subscriptionId=t,e.token=n,this.criteriaEntriesBySubscriptionId.set(t,e),this.ws.send(JSON.stringify({type:"bind-with-token",payload:{token:n}}))}catch(t){console.error(Te(t)),this.emitError(e,t),this.removeCriteriaEntry(e)}}}async refreshAllSubscriptions(){this.criteriaEntriesBySubscriptionId.clear();for(let e of this.criteriaEntries.values())for(let t of[...e.bareCriteria?[e.bareCriteria]:[],...e.criteriaWithProps])t.clearAttachedSubscription(),await this.subscribeToCriteria(t)}addCriteria(e,t){this.masterSubEmitter&&this.masterSubEmitter._addCriteria(e);let n=this.maybeGetCriteriaEntry(e,t);if(n)return n.refCount+=1,n.emitter;let i=new qn(e,t);return this.addCriteriaEntry(i),this.subscribeToCriteria(i).catch(console.error),i.emitter}removeCriteria(e,t){let n=this.maybeGetCriteriaEntry(e,t);if(!n){console.warn("Criteria not known to `SubscriptionManager`. Possibly called remove too many times.");return}n.refCount-=1,!(n.refCount>0)&&(this.maybeEmitDisconnect(n),this.removeCriteriaEntry(n))}getWebSocket(){return this.ws}closeWebSocket(){this.wsClosed||(this.wsClosed=!0,this.ws.close())}reconnectWebSocket(){this.ws.reconnect(),this.wsClosed=!1}getCriteriaCount(){return this.getAllCriteriaEmitters().length}getMasterEmitter(){return this.masterSubEmitter||(this.masterSubEmitter=new We(...Array.from(this.criteriaEntries.keys()))),this.masterSubEmitter}};async function Yc({resource:r,subscription:e,context:t,getPreviousResource:n,logger:i}){if(e.meta?.account&&r.meta?.account?.reference!==e.meta.account.reference)return i?.debug("Ignore resource in different account compartment"),!1;if(!Zc(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=se(o);if(r.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${r.resourceType}")`),!1;if(!await vo(e,r,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let c=X(e,"https://medplum.com/fhir/StructureDefinition/subscription-supported-interaction");return c&&c.valueCode!==t.interaction?(i?.debug(`Ignore rest hook for different interaction (wanted "${c.valueCode}", received "${t.interaction}")`),!1):St(r,s)}function Zc(r,e){let t=r.channel?.type;return t==="rest-hook"?r.channel?.endpoint?!0:(e?.debug("Ignore rest-hook missing URL"),!1):t==="websocket"}async function vo(r,e,t){let n=X(r,"https://medplum.com/fhir/StructureDefinition/fhir-path-criteria-expression");if(!n?.valueString)return!0;let i=await t(e),o={"%current":g(e),"%previous":g(i??{})};return w(n.valueString,[g(e)],o)?.[0]?.value===!0}var vr="3.2.31-bf22d6e26",Xc="medplum-cli",Ro=A.FHIR_JSON+", */*; q=0.1",eu="https://api.medplum.com/",tu=1e3,ru=6e4,nu=0,iu=3e5,ou="Binary/",To={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},Co=(o=>(o.ClientCredentials="client_credentials",o.AuthorizationCode="authorization_code",o.RefreshToken="refresh_token",o.JwtBearer="urn:ietf:params:oauth:grant-type:jwt-bearer",o.TokenExchange="urn:ietf:params:oauth:grant-type:token-exchange",o))(Co||{}),Po=(o=>(o.AccessToken="urn:ietf:params:oauth:token-type:access_token",o.RefreshToken="urn:ietf:params:oauth:token-type:refresh_token",o.IdToken="urn:ietf:params:oauth:token-type:id_token",o.Saml1Token="urn:ietf:params:oauth:token-type:saml1",o.Saml2Token="urn:ietf:params:oauth:token-type:saml2",o))(Po||{}),wo=(o=>(o.ClientSecretBasic="client_secret_basic",o.ClientSecretPost="client_secret_post",o.ClientSecretJwt="client_secret_jwt",o.PrivateKeyJwt="private_key_jwt",o.None="none",o))(wo||{}),Ao=(e=>(e.JwtBearer="urn:ietf:params:oauth:client-assertion-type:jwt-bearer",e))(Ao||{}),Ot=class extends ${constructor(t){super();this.initComplete=!0;if(t?.baseUrl&&!t.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");this.options=t??{},this.fetch=t?.fetch??su(),this.storage=t?.storage??new qe,this.createPdfImpl=t?.createPdf,this.baseUrl=nr(t?.baseUrl??eu),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.clientId=t?.clientId??"",this.clientSecret=t?.clientSecret??"",this.defaultHeaders=t?.defaultHeaders??{},this.onUnauthenticated=t?.onUnauthenticated,this.refreshGracePeriod=t?.refreshGracePeriod??iu,this.cacheTime=t?.cacheTime??(typeof window>"u"?nu:ru),this.cacheTime>0?this.requestCache=new Et(t?.resourceCacheSize??tu):this.requestCache=void 0,t?.autoBatchTime?(this.autoBatchTime=t.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0),t?.accessToken&&this.setAccessToken(t.accessToken),this.storage.getInitPromise===void 0?(t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initPromise=Promise.resolve(),this.dispatchEvent({type:"storageInitialized"})):(this.initComplete=!1,this.initPromise=this.storage.getInitPromise(),this.initPromise.then(()=>{t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initComplete=!0,this.dispatchEvent({type:"storageInitialized"})}).catch(n=>{console.error(n),this.initComplete=!0,this.dispatchEvent({type:"storageInitFailed",payload:{error:n}})})),this.setupStorageListener()}get isInitialized(){return this.initComplete}getInitPromise(){return this.initPromise}async attemptResumeActiveLogin(){let t=this.getActiveLogin();t&&(this.setAccessToken(t.accessToken,t.refreshToken),await this.refreshProfile())}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}getFhircastHubUrl(){return this.fhircastHubUrl}getDefaultHeaders(){return this.defaultHeaders}clear(){this.storage.clear(),typeof window<"u"&&sessionStorage.clear(),this.clearActiveLogin()}clearActiveLogin(){this.storage.setString("activeLogin",void 0),this.requestCache?.clear(),this.accessToken=void 0,this.refreshToken=void 0,this.refreshPromise=void 0,this.accessTokenExpires=void 0,this.sessionDetails=void 0,this.medplumServer=void 0,this.dispatchEvent({type:"change"})}invalidateUrl(t){t=t.toString(),this.requestCache?.delete(t)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(t){let n=U(this.fhirBaseUrl,t);if(this.requestCache)for(let i of this.requestCache.keys())(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache.delete(i)}get(t,n={}){t=t.toString();let i=this.getCacheEntry(t,n);if(i)return i.value;let o;t.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue&&!n.disableAutoBatch?o=new Promise((a,c)=>{this.autoBatchQueue.push({method:"GET",url:t.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:c}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):o=this.request("GET",t,n);let s=new M(o);return this.setCacheEntry(t,s),s}post(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("POST",t,o)}put(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("PUT",t,o)}patch(t,n,i={}){return t=t.toString(),this.setRequestBody(i,n),this.setRequestContentType(i,A.JSON_PATCH),this.invalidateUrl(t),this.request("PATCH",t,i)}delete(t,n){return t=t.toString(),this.invalidateUrl(t),this.request("DELETE",t,n)}async startNewUser(t,n){let{codeChallengeMethod:i,codeChallenge:o}=await this.startPkce();return this.post("auth/newuser",{...t,clientId:t.clientId??this.clientId,codeChallengeMethod:i,codeChallenge:o},void 0,n)}async startNewProject(t,n){return this.post("auth/newproject",t,void 0,n)}async startNewPatient(t,n){return this.post("auth/newpatient",t,void 0,n)}async startLogin(t,n){return this.post("auth/login",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async startGoogleLogin(t,n){return this.post("auth/google",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async ensureCodeChallenge(t){return t.codeChallenge?t:{...t,...await this.startPkce()}}async signOut(){await this.post(this.logoutUrl,{}),this.clear()}async signInWithRedirect(t){let i=new URLSearchParams(window.location.search).get("code");if(!i){await this.requestAuthorization(t);return}return this.processCode(i)}signOutWithRedirect(){window.location.assign(this.logoutUrl)}async signInWithExternalAuth(t,n,i,o,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),window.location.assign(this.getExternalAuthRedirectUri(t,n,i,a,s))}async exchangeExternalAccessToken(t,n){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");let i=new URLSearchParams;return i.set("grant_type","urn:ietf:params:oauth:grant-type:token-exchange"),i.set("subject_token_type","urn:ietf:params:oauth:token-type:access_token"),i.set("client_id",n),i.set("subject_token",t),this.fetchTokens(i)}getExternalAuthRedirectUri(t,n,i,o,s=!0){let a=new URL(t);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",n),a.searchParams.set("redirect_uri",i),a.searchParams.set("scope",o.scope??"openid profile email"),a.searchParams.set("state",JSON.stringify(o)),s){let{codeChallenge:c,codeChallengeMethod:u}=o;if(!u)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!c)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");a.searchParams.set("code_challenge_method",u),a.searchParams.set("code_challenge",c)}return a.toString()}fhirUrl(...t){return new URL(U(this.fhirBaseUrl,t.join("/")))}fhirSearchUrl(t,n){let i=this.fhirUrl(t);return n&&(i.search=Sn(n)),i}search(t,n,i){let o=this.fhirSearchUrl(t,n),s="search-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=new M((async()=>{let u=await this.get(o,i);if(u.entry)for(let l of u.entry)this.cacheResource(l.resource);return u})());return this.setCacheEntry(s,c),c}searchOne(t,n,i){let o=this.fhirSearchUrl(t,n);o.searchParams.set("_count","1"),o.searchParams.sort();let s="searchOne-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=new M(this.search(t,o.searchParams,i).then(u=>u.entry?.[0]?.resource));return this.setCacheEntry(s,c),c}searchResources(t,n,i){let s="searchResources-"+this.fhirSearchUrl(t,n).toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let c=new M(this.search(t,n,i).then(bo));return this.setCacheEntry(s,c),c}async*searchResourcePages(t,n,i){let o=this.fhirSearchUrl(t,n);for(;o;){let s=new URL(o).searchParams,a=await this.search(t,s,i),c=a.link?.find(u=>u.relation==="next");if(!a.entry?.length&&!c)break;yield bo(a),o=c?.url?new URL(c.url):void 0}}searchValueSet(t,n,i){return this.valueSetExpand({url:t,filter:n},i)}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 To;let[i,o]=n.split("/");if(!(!i||!o))return this.getCached(i,o)}readResource(t,n,i){if(!n)throw new Error('The "id" parameter cannot be null, undefined, or an empty string.');return this.get(this.fhirUrl(t,n),i)}readReference(t,n){let i=t.reference;if(!i)return new M(Promise.reject(new Error("Missing reference")));if(i==="system")return new M(Promise.resolve(To));let[o,s]=i.split("/");return!o||!s?new M(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}requestSchema(t){if(Yr(t))return Promise.resolve();let n=t+"-requestSchema",i=this.getCacheEntry(n,void 0);if(i)return i.value;let o=new M((async()=>{let s=`{
4
4
  StructureDefinitionList(name: "${t}") {
5
5
  resourceType,
6
6
  name,