@medplum/core 5.0.7 → 5.0.8
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.
- package/dist/cjs/index.cjs +7 -7
- package/dist/cjs/index.cjs.map +3 -3
- package/dist/cjs/index.d.ts +25 -0
- package/dist/esm/index.d.ts +25 -0
- package/dist/esm/index.mjs +6 -6
- package/dist/esm/index.mjs.map +3 -3
- package/package.json +3 -3
package/dist/cjs/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var Kt=Object.defineProperty;var ms=Object.getOwnPropertyDescriptor;var ys=Object.getOwnPropertyNames;var gs=Object.prototype.hasOwnProperty;var xs=(r,e,t)=>e in r?Kt(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var vs=(r,e)=>{for(var t in e)Kt(r,t,{get:e[t],enumerable:!0})},Ts=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of ys(e))!gs.call(r,i)&&i!==t&&Kt(r,i,{get:()=>e[i],enumerable:!(n=ms(e,i))||n.enumerable});return r};var Ss=r=>Ts(Kt({},"__esModule",{value:!0}),r);var c=(r,e,t)=>xs(r,typeof e!="symbol"?e+"":e,t);var fp={};vs(fp,{AccessPolicyInteraction:()=>Re,AckCode:()=>Wl,AndAtom:()=>wt,ArithemticOperatorAtom:()=>M,AsAtom:()=>he,BooleanInfixOperatorAtom:()=>P,CPT:()=>Cs,ClientStorage:()=>et,ConcatAtom:()=>Tt,ContainsAtom:()=>St,ContentType:()=>w,DEFAULT_ACCEPT:()=>jo,DEFAULT_MAX_SEARCH_COUNT:()=>Wc,DEFAULT_SEARCH_COUNT:()=>Bc,DataSampler:()=>_r,DotAtom:()=>z,EmptySetAtom:()=>xt,EqualsAtom:()=>Et,EquivalentAtom:()=>Ct,EventTarget:()=>wr,ExternalSecretSystems:()=>Ku,FHIRCAST_EVENT_NAMES:()=>Ar,FHIRCAST_EVENT_RESOURCES:()=>Do,FHIRCAST_EVENT_VERSION_REQUIRED:()=>Or,FHIRCAST_RESOURCE_TYPES:()=>Vo,FhirFilterComparison:()=>Gt,FhirFilterConnective:()=>zt,FhirFilterNegation:()=>Qt,FhirPathAtom:()=>fe,FhircastConnection:()=>Lt,FileBuilder:()=>hi,FunctionAtom:()=>re,HTTP_HL7_ORG:()=>zr,HTTP_TERMINOLOGY_HL7_ORG:()=>As,Hl7Context:()=>ye,Hl7Field:()=>K,Hl7Message:()=>yi,Hl7Segment:()=>nt,ICD10:()=>Ps,ImpliesAtom:()=>It,InAtom:()=>bt,IndexerAtom:()=>Ee,InfixOperatorAtom:()=>se,IsAtom:()=>be,LOINC:()=>bs,LRUCache:()=>Pe,LiteralAtom:()=>U,LogLevel:()=>Be,LogLevelNames:()=>ls,Logger:()=>gi,MEDPLUM_CLI_CLIENT_ID:()=>Fu,MEDPLUM_RELEASES_URL:()=>ds,MEDPLUM_VERSION:()=>Mr,MedplumClient:()=>qt,MedplumKeyValueClient:()=>Ut,MemoryStorage:()=>Vr,MockAsyncClientStorage:()=>ri,NDC:()=>ws,NotEqualsAtom:()=>Rt,NotEquivalentAtom:()=>Pt,OAuthClientAssertionType:()=>Ho,OAuthGrantType:()=>Ne,OAuthSigningAlgorithm:()=>Hu,OAuthTokenAuthMethod:()=>$u,OAuthTokenType:()=>$o,OperationOutcomeError:()=>f,Operator:()=>h,OperatorPrecedence:()=>x,OrAtom:()=>At,Parser:()=>Xt,ParserBuilder:()=>ot,PrefixOperatorAtom:()=>it,PropertyType:()=>d,RXNORM:()=>Rs,ReadablePromise:()=>L,ReconnectingWebSocket:()=>Bt,SNOMED:()=>Es,SearchParameterType:()=>oe,SubscriptionEmitter:()=>rt,SubscriptionManager:()=>Wt,SymbolAtom:()=>_,Tokenizer:()=>me,TransformMapCollection:()=>Br,TypedEventTarget:()=>J,UCUM:()=>Qr,UnaryOperatorAtom:()=>vt,UnionAtom:()=>Se,VALID_HOSTNAME_REGEX:()=>oo,XorAtom:()=>Ot,accepted:()=>Ns,accessPolicySupportsInteraction:()=>Qn,addProfileToResource:()=>Ya,allOk:()=>Os,append:()=>G,applyDefaultValuesToElement:()=>al,applyDefaultValuesToResource:()=>sl,applyFixedOrPatternValue:()=>$t,arrayBufferToBase64:()=>Vn,arrayBufferToHex:()=>kn,arrayify:()=>ke,assert:()=>No,assertContextVersionOptional:()=>Xn,assertOk:()=>Xs,assertReleaseManifest:()=>fs,badRequest:()=>b,booleanToTypedValue:()=>m,buildCdsRequest:()=>Ru,buildElementsContext:()=>Fr,buildTypeName:()=>ho,businessRule:()=>qs,calculateAge:()=>mt,calculateAgeString:()=>Ra,canReadResourceType:()=>du,canWriteResource:()=>hu,canWriteResourceType:()=>fu,capitalize:()=>k,checkForNull:()=>xi,checkIfValidMedplumVersion:()=>lp,clearReleaseCache:()=>up,compressElement:()=>Zs,concatUrls:()=>j,conceptMapTranslate:()=>li,conflict:()=>Us,convertContainedResourcesToBundle:()=>bu,convertToSearchableDates:()=>Wn,convertToSearchableNumbers:()=>Dc,convertToSearchableQuantities:()=>Mc,convertToSearchableReferences:()=>jn,convertToSearchableStrings:()=>qn,convertToSearchableTokens:()=>$n,convertToSearchableUris:()=>_c,convertToTransactionBundle:()=>Oo,crawlTypedValue:()=>cr,crawlTypedValueAsync:()=>aa,createConstraintIssue:()=>sn,createFhircastMessagePayload:()=>kr,createOperationOutcomeIssue:()=>ge,createProcessingIssue:()=>an,createReference:()=>xe,createStructureIssue:()=>S,created:()=>Is,decodeBase64:()=>Ao,decodeBase64Url:()=>zn,deepClone:()=>Te,deepEquals:()=>ue,deepIncludes:()=>je,deriveIdentifierSearchParameter:()=>Jl,encodeBase64:()=>_t,encodeBase64Url:()=>xu,encryptSHA256:()=>Jn,ensureNoLeadingSlash:()=>io,ensureTrailingSlash:()=>Tr,escapeHtml:()=>rc,evalFhirPath:()=>Vc,evalFhirPathTyped:()=>C,evalSqlOnFhir:()=>ip,expandSampledData:()=>oi,expandSampledObservation:()=>el,extractAccountReferences:()=>gr,fetchLatestVersionString:()=>pp,fetchVersionManifest:()=>Gr,fhirPathArrayEquals:()=>En,fhirPathArrayEquivalent:()=>fr,fhirPathArrayNotEquals:()=>Rn,fhirPathEquals:()=>$e,fhirPathEquivalent:()=>Hi,fhirPathIs:()=>dt,fhirPathNot:()=>bn,fhirTypeToJsType:()=>lr,findCodeBySystem:()=>Fa,findObservationInterval:()=>Ba,findObservationReferenceRange:()=>Wa,findObservationReferenceRanges:()=>eo,findResourceByCode:()=>Ja,findResourceInBundle:()=>Eu,flatMapFilter:()=>tc,forbidden:()=>Vs,formatAddress:()=>ao,formatCodeableConcept:()=>He,formatCoding:()=>Un,formatDate:()=>oc,formatDateTime:()=>Sr,formatFamilyName:()=>ic,formatGivenName:()=>nc,formatHl7DateTime:()=>us,formatHumanName:()=>ze,formatMoney:()=>fc,formatObservationValue:()=>uo,formatPeriod:()=>sc,formatQuantity:()=>pe,formatRange:()=>dc,formatReferenceString:()=>so,formatSearchQuery:()=>Xc,formatTime:()=>co,formatTiming:()=>lc,generateId:()=>ie,getAllDataTypes:()=>dn,getAllQuestionnaireAnswers:()=>Pa,getBuffer:()=>Cr,getCodeBySystem:()=>yr,getDataType:()=>ae,getDateProperty:()=>Ea,getDefaultValuesForNewSliceEntry:()=>cl,getDisplayString:()=>zi,getElementDefinition:()=>ht,getElementDefinitionFromElements:()=>yo,getElementDefinitionTypeName:()=>nr,getExpressionForResourceType:()=>rp,getExpressionsForResourceType:()=>bi,getExtension:()=>ce,getExtensionValue:()=>Aa,getIdentifier:()=>Xi,getImageSrc:()=>ba,getInnerDerivedIdentifierExpression:()=>vi,getNestedProperty:()=>Ie,getParsedDerivedIdentifierExpression:()=>Ti,getParsedExpressionForResourceType:()=>Si,getPathDifference:()=>le,getPathDisplayName:()=>Tc,getPropertyDisplayName:()=>mo,getQueryString:()=>Fn,getQuestionnaireAnswers:()=>Ca,getRandomString:()=>Pr,getReferenceString:()=>V,getResourceTypes:()=>gc,getSearchParameter:()=>vc,getSearchParameterDetails:()=>Kl,getSearchParameters:()=>xc,getStatus:()=>Ks,getTypedPropertyValue:()=>I,getTypedPropertyValueWithPath:()=>ur,getTypedPropertyValueWithSchema:()=>ji,getTypedPropertyValueWithoutSchema:()=>$i,getValueSliceName:()=>ai,getWebSocketUrl:()=>Ln,getWindow:()=>gu,globalSchema:()=>N,gone:()=>Ds,indexConceptMapCodings:()=>Jo,indexDefaultSearchParameters:()=>yn,indexSearchParameter:()=>Er,indexSearchParameterBundle:()=>yc,indexStructureDefinitionBundle:()=>or,inflateBaseSchema:()=>cn,inflateElement:()=>Vi,initFhirPathParserBuilder:()=>Ke,invalidSearchOperator:()=>tu,isAccepted:()=>$s,isBrowserEnvironment:()=>B,isCodeableConcept:()=>mr,isCoding:()=>hr,isCompletedSubscriptionRequest:()=>Yn,isComplexTypeCode:()=>xr,isConflict:()=>Qs,isContextVersionRequired:()=>Kn,isCreated:()=>js,isDataTypeLoaded:()=>fn,isDateString:()=>Cn,isDateTimeString:()=>Ve,isEmpty:()=>E,isError:()=>tr,isFhirCriteriaMet:()=>Uo,isFhircastResourceType:()=>Mo,isGone:()=>zs,isJwt:()=>Zn,isLowerCase:()=>Na,isMedplumAccessToken:()=>ei,isNodeEnvironment:()=>yu,isNotFound:()=>Gs,isObject:()=>R,isOk:()=>rr,isOperationOutcome:()=>st,isPeriod:()=>Pn,isPopulated:()=>Z,isPrimitiveType:()=>ut,isProfileLoaded:()=>hn,isProfileResource:()=>Qi,isQuantity:()=>A,isQuantityEquivalent:()=>wn,isRedirect:()=>Hs,isReference:()=>q,isResource:()=>O,isResourceType:()=>ct,isResourceTypeSchema:()=>ar,isResourceWithId:()=>Ge,isSliceDefinitionWithTypes:()=>si,isString:()=>De,isStringArray:()=>In,isTextObject:()=>Yi,isTypedValue:()=>Ec,isUUID:()=>La,isUnauthenticated:()=>Js,isValidDate:()=>br,isValidHostname:()=>Xa,isValidMedplumSemver:()=>hs,lazy:()=>_n,loadDataType:()=>sr,locationUtils:()=>ne,mapByIdentifier:()=>Za,matchDiscriminant:()=>pr,matchesRange:()=>Mn,matchesSearchRequest:()=>Mt,multipleMatches:()=>Ls,normalizeArrayBufferView:()=>Dn,normalizeCreateBinaryOptions:()=>ii,normalizeCreatePdfOptions:()=>Go,normalizeErrorString:()=>Ae,normalizeOperationOutcome:()=>at,notFound:()=>tn,notModified:()=>ks,operationOutcomeIssueToString:()=>ki,operationOutcomeToString:()=>on,parseFhirPath:()=>Dt,parseFilterParameter:()=>Bl,parseHl7DateTime:()=>jl,parseJWTPayload:()=>Nt,parseLogLevel:()=>Hl,parseMappingLanguage:()=>yl,parseParameter:()=>bo,parseReference:()=>va,parseSearchRequest:()=>Xe,parseStructureDefinition:()=>ir,parseXFhirQuery:()=>Kc,preciseEquals:()=>Ga,preciseGreaterThan:()=>za,preciseGreaterThanOrEquals:()=>no,preciseLessThan:()=>Qa,preciseLessThanOrEquals:()=>ro,preciseRound:()=>Ha,preconditionFailed:()=>Ms,projectAdminResourceTypes:()=>Ro,protectedResourceTypes:()=>Eo,readInteractions:()=>Co,redirect:()=>Ws,removeDuplicates:()=>pt,removeProfileFromResource:()=>ec,reorderBundle:()=>Io,resolveId:()=>ve,resourceMatchesSubscriptionCriteria:()=>_u,satisfiedAccessPolicy:()=>Po,serializeError:()=>Jt,serializeFhircastSubscriptionRequest:()=>Ir,serverError:()=>nn,serverTimeout:()=>Bs,setCodeBySystem:()=>Ua,setIdentifier:()=>wa,singleton:()=>Q,singularize:()=>Ka,sleep:()=>vr,sortStringArray:()=>gt,splitN:()=>Qe,splitSearchOnComma:()=>Ye,streamToBuffer:()=>np,stringify:()=>yt,stringifyTypedValue:()=>Bn,structureMapTransform:()=>gl,subsetResource:()=>ra,summarizeObservations:()=>Xu,toJsBoolean:()=>F,toPeriod:()=>ft,toTypedValue:()=>T,tooManyRequests:()=>Fs,trimTrailingEmptyElements:()=>ka,tryGetDataType:()=>qe,tryGetJwtExpiration:()=>ti,tryGetProfile:()=>mn,typedValueToString:()=>Nn,unauthorized:()=>we,unauthorizedTokenAudience:()=>er,unauthorizedTokenExpired:()=>rn,unsupportedMediaType:()=>_s,validateFhircastSubscriptionRequest:()=>Ft,validateResource:()=>pa,validateResourceType:()=>Gl,validateTypedValue:()=>Ui,validationError:()=>g,validationRegexes:()=>lt,warnIfNewerVersionAvailable:()=>dp,wordWrap:()=>as});module.exports=Ss(fp);var it=class{constructor(e,t){c(this,"operator");c(this,"child");this.operator=e,this.child=t}toString(){return`${this.operator}(${this.child.toString()})`}},se=class{constructor(e,t,n){c(this,"operator");c(this,"left");c(this,"right");this.operator=e,this.left=t,this.right=n}toString(){return`(${this.left.toString()} ${this.operator} ${this.right.toString()})`}},ot=class{constructor(){c(this,"prefixParselets",{});c(this,"infixParselets",{})}registerInfix(e,t){return this.infixParselets[e]=t,this}registerPrefix(e,t){return this.prefixParselets[e]=t,this}prefix(e,t,n){return this.registerPrefix(e,{parse(i,o){let s=i.consumeAndParse(t);return n(o,s)}})}infixLeft(e,t,n){return this.registerInfix(e,{parse(i,o,s){let a=i.consumeAndParse(t);return n(o,s,a)},precedence:t})}construct(e){return new Xt(e,this.prefixParselets,this.infixParselets)}},Xt=class{constructor(e,t,n){c(this,"tokens");c(this,"prefixParselets");c(this,"infixParselets");this.tokens=e,this.prefixParselets=t,this.infixParselets=n}hasMore(){return this.tokens.length>0}match(e){return this.peek()?.id!==e?!1:(this.consume(),!0)}consumeAndParse(e=1/0){let t=this.consume(),n=this.prefixParselets[t.id];if(!n)throw 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 Pe=class{constructor(e=10){c(this,"max");c(this,"cache");this.max=e,this.cache=new Map}clear(){this.cache.clear()}get(e){let t=this.cache.get(e);return t&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size>=this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}delete(e){this.cache.delete(e)}keys(){return this.cache.keys()}first(){return this.cache.keys().next().value}};var Qr="http://unitsofmeasure.org",bs="http://loinc.org",Es="http://snomed.info/sct",Rs="http://www.nlm.nih.gov/research/umls/rxnorm",Cs="http://www.ama-assn.org/go/cpt",Ps="http://hl7.org/fhir/sid/icd-10",ws="http://hl7.org/fhir/sid/ndc",zr="http://hl7.org",As="http://terminology.hl7.org";var Yt="created",Jr="gone",Kr="not-modified",Xr="found",Yr="not-found",Zr="conflict",en="unauthorized",Ri="forbidden",Ci="precondition-failed",Pi="unsupported-media-type",wi="multiple-matches",Ai="too-many-requests",Zt="accepted",Oi="server-timeout",Ii="business-rule",Os={resourceType:"OperationOutcome",id:"ok",issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},Is={resourceType:"OperationOutcome",id:Yt,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},ks={resourceType:"OperationOutcome",id:Kr,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},tn={resourceType:"OperationOutcome",id:Yr,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},we={resourceType:"OperationOutcome",id:en,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},rn={...we,issue:[...we.issue,{severity:"error",code:"expired",details:{text:"Token expired"}}]},er={...we,issue:[...we.issue,{severity:"error",code:"invalid",details:{text:"Token not issued for this audience"}}]},Vs={resourceType:"OperationOutcome",id:Ri,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},Ds={resourceType:"OperationOutcome",id:Jr,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},Ms={resourceType:"OperationOutcome",id:Ci,issue:[{severity:"error",code:"processing",details:{text:"Precondition Failed"}}]},_s={resourceType:"OperationOutcome",id:Pi,issue:[{severity:"error",code:"not-supported",details:{text:"Unsupported media type"}}]},Ls={resourceType:"OperationOutcome",id:wi,issue:[{severity:"error",code:"multiple-matches",details:{text:"Multiple resources found matching condition"}}]},Fs={resourceType:"OperationOutcome",id:Ai,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function Ns(r){return{resourceType:"OperationOutcome",id:Zt,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:r}]}}function b(r,e){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:r},...e?{expression:[e]}:void 0}]}}function Us(r,e){return{resourceType:"OperationOutcome",id:Zr,issue:[{severity:"error",code:"conflict",details:{coding:e?[{code:e}]:void 0,text:r}}]}}function g(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"structure",details:{text:r}}]}}function nn(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:r.toString()}]}}function Bs(r){return{resourceType:"OperationOutcome",id:Oi,issue:[{severity:"error",code:"timeout",details:{text:r??"Server timeout"}}]}}function Ws(r){let e=r.toString();return{resourceType:"OperationOutcome",id:Xr,issue:[{severity:"information",code:"informational",details:{coding:[{system:"urn:ietf:rfc:3986",code:e}],text:"Redirect to "+e}}]}}function qs(r,e){return{resourceType:"OperationOutcome",id:Ii,issue:[{severity:"error",code:"business-rule",details:{id:r,text:e}}]}}function tr(r){return!r||typeof r!="object"?!1:r instanceof Error||typeof DOMException<"u"&&r instanceof DOMException?!0:Object.prototype.toString.call(r)==="[object Error]"}function st(r){return typeof r=="object"&&r!==null&&r.resourceType==="OperationOutcome"}function rr(r){return r.id==="ok"||r.id===Yt||r.id===Kr||r.id===Zt}function js(r){return r.id===Yt}function $s(r){return r.id===Zt}function Hs(r){return r.id===Xr}function Gs(r){return r.id===Yr}function Qs(r){return r.id===Zr}function zs(r){return r.id===Jr}function Js(r){return r.id===en}function Ks(r){switch(r.id){case"ok":return 200;case Yt:return 201;case Zt:return 202;case Xr:return 302;case Kr:return 304;case en:return 401;case Ri:return 403;case Yr:return 404;case Zr:return 409;case Jr:return 410;case Ci:case wi:return 412;case Pi:return 415;case Ii:return 422;case Ai:return 429;case Oi:return 504;default:return r.issue?.[0]?.code==="exception"?500:400}}function Xs(r,e){if(!rr(r)||e===void 0)throw new f(r)}var f=class extends Error{constructor(t,n){super(on(t),n);c(this,"outcome");this.name="OperationOutcomeError",this.outcome=t}};function at(r){return r instanceof f?r.outcome:st(r)?r:b(Ae(r))}function Ae(r){return r?typeof r=="string"?r:tr(r)?r.message:st(r)?on(r):typeof r=="object"&&"code"in r&&typeof r.code=="string"?r.code:JSON.stringify(r):"Unknown error"}function on(r){let e=r.issue?.map(ki)??[];return e.length>0?e.join("; "):"Unknown error"}function ki(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 ge(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 S(r,e){return ge("error","structure",e,r)}function sn(r,e){return ge("error","invariant",`Constraint ${e.key} not met: ${e.description}`,r,{fhirpath:e.expression})}function an(r,e,t,n){return ge("error","processing",e,r,{...n,error:t})}var Ys={"http://hl7.org/fhirpath/System.String":"string"};function Zs(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:Ys[t.code]??t.code})),e}function Vi(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 cn(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,Vi(i,o)])),constraints:[],innerTypes:[]};return e}var Di={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 ir(r){return new ln(r).parse()}var Oe=cn(Di),pn=Object.create(null),Mi=Object.create(null),ta={"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 Ni(r){let e;return e=Mi[r],e||(e=Mi[r]=Object.create(null)),e}function or(r){let t=(Array.isArray(r)?r:r.entry?.map(n=>n.resource)??[]).filter(n=>n?.resourceType==="StructureDefinition");yn(t);for(let n of t)sr(n)}function sr(r){if(!r?.name)throw new Error("Failed loading StructureDefinition from bundle");if(r.resourceType!=="StructureDefinition")return;let e=ir(r),t=ta[r.url],n,i;t?(n=Oe,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=Oe,i=r.type):(n=Ni(r.url),i=r.type),n[i]=e;for(let o of e.innerTypes)o.parentType=e,n[o.name]=o;pn[r.url]=e}function dn(){return Oe}function fn(r){return!!Oe[r]}function qe(r,e){if(e){let t=Ni(e)[r];if(t)return t}return Oe[r]}function ae(r,e){let t=qe(r,e);if(!t)throw new f(b("Unknown data type: "+r));return t}function ct(r){let e=Oe[r];return e&&ar(e)}function hn(r){return!!pn[r]}function mn(r){return pn[r]}var ln=class{constructor(e){c(this,"root");c(this,"elements");c(this,"elementIndex");c(this,"index");c(this,"resourceSchema");c(this,"slicingContext");c(this,"innerTypes");c(this,"backboneContext");if(!e.snapshot?.element||e.snapshot.element.length===0)throw new Error(`No snapshot defined for StructureDefinition '${e.name}'`);this.root=e.snapshot.element[0],this.elements=e.snapshot.element.slice(1),this.elementIndex=Object.create(null),this.index=0,this.resourceSchema={name:e.name,path:this.root.path,title:e.title,type:e.type,url:e.url,version:e.version,kind:e.kind,description:sa(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=un(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[un(e,n.path)]=t;break}n=n.parent}if(!n){let i=un(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&&!We(this.slicingContext.path,e?.path)&&(this.slicingContext=void 0),e.slicing&&!this.slicingContext&&this.enterSlice(e,t)}enterInnerType(e){for(;this.backboneContext&&!We(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;let t=nr(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:We(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,t){oa(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&&!We(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!We(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!!(We(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=nr(e)),n||(n=ce(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=Li(e.max),n=e.base?.max?Li(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:Fi(I(i,"fixed[x]")),pattern:Fi(I(i,"pattern[x]")),binding:e.binding}}};function ra(r,e){if(!r)return;let t=[];for(let n of e){t.push("_"+n);let i=Oe[r.resourceType].elements[n+"[x]"];i&&t.push(...i.type.map(o=>n+k(o.code)))}for(let n of Object.getOwnPropertyNames(r))!e.includes(n)&&!t.includes(n)&&!na.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(_i):[_i]},r}var _i={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},na=["resourceType","id","meta"];function Li(r){return r==="*"?Number.POSITIVE_INFINITY:Number.parseInt(r,10)}function un(r,e=""){return ia(r.path,e)}function ia(r,e){return r?e&&r.startsWith(e)?r.substring(e.length+1):r:""}function We(r,e){return!r||!e?!1:e.startsWith(r+".")||e===r}function Fi(r){return Array.isArray(r)&&r.length>0?r[0]:E(r)?void 0:r}function oa(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 sa(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 cr(r,e,t){new gn(r,e,t).crawl()}function aa(r,e,t){return new xn(r,e,t).crawl()}var gn=class{constructor(e,t,n){c(this,"root");c(this,"visitor");c(this,"schema");c(this,"initialPath");c(this,"excludeMissingProperties");this.root=e,this.visitor=t,this.schema=n?.schema??ae(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}crawl(){this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}crawlObject(e,t,n){let i=O(e.value);if(i&&this.visitor.onEnterResource&&this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties)for(let o of Object.keys(e.value))this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&this.visitor.onExitResource(n,e,t)}crawlProperty(e,t,n,i){let o=Ie(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 ke(s))this.crawlPropertyValue(a,i)}crawlPropertyValue(e,t){if(!ut(e.type)){let n=ae(e.type);this.crawlObject(e,n,t)}}},xn=class{constructor(e,t,n){c(this,"root");c(this,"visitor");c(this,"schema");c(this,"initialPath");c(this,"excludeMissingProperties");this.root=e,this.visitor=t,this.schema=n?.schema??ae(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}async crawl(){return this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}async crawlObject(e,t,n){let i=O(e.value);if(i&&this.visitor.onEnterResource&&await this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&await this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties&&e.value)for(let o of Object.keys(e.value))await this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))await this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&await this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&await this.visitor.onExitResource(n,e,t)}async crawlProperty(e,t,n,i){let o=Ie(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 ke(s))await this.crawlPropertyValue(a,i)}async crawlPropertyValue(e,t){if(!ut(e.type)){let n=ae(e.type);await this.crawlObject(e,n,t)}}};function Ie(r,e,t){if(r===void 0)return[void 0];if(e==="$this")return[r];let n=t?.withPath?ur:I,[i,...o]=e.split("."),s=[n(r,i,t)];for(let a of o){let u=[];for(let l of s)if(Array.isArray(l))for(let p of l)u.push(n(p,a,t));else(t?.withPath&&l?.value!==void 0||!t?.withPath&&l!==void 0)&&u.push(n(l,a,t));s=u}return s}function ur(r,e,t){let n=r.path;return ca(I(r,e,t),n,e)}function ca(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 lr={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"},ua=new Pe(1e3);function ut(r){return r==="undefined"||r in lr}var lt={base64Binary:/^([A-Za-z\d+/]{4})*([A-Za-z\d+/]{2}==|[A-Za-z\d+/]{3}=)?$/,canonical:/^\S*$/,code:/^[^\s]+( [^\s]+)*$/,date:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1]))?)?$/,dateTime:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1])(T([01]\d|2[0-3])(:[0-5]\d:([0-5]\d|60)(\.\d{1,9})?)?)?)?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00)?)?)?$/,id:/^[A-Za-z0-9\-.]{1,64}$/,instant:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])T([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00))$/,markdown:/^[\r\n\t\u0020-\uFFFF]+$/,oid:/^urn:oid:[0-2](\.(0|[1-9]\d*))+$/,string:/^[\r\n\t\u0020-\uFFFF]+$/,time:/^([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?$/,uri:/^\S*$/,url:/^\S*$/,uuid:/^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,xhtml:/.*/},la={"ele-1":!0,"dom-3":!0,"org-1":!0,"sdf-19":!0};function pa(r,e){if(!ct(r.resourceType))throw new f(g("Invalid resource type"));return Ui(T(r),e)}function Ui(r,e){return new vn(r,e).validate()}var vn=class{constructor(e,t){c(this,"issues");c(this,"root");c(this,"resourceStack");c(this,"schema");c(this,"collect");this.issues=[],this.root=e,this.resourceStack=[],O(e.value)&&this.resourceStack.push(e.value),t?.profile?this.schema=ir(t.profile):this.schema=ae(e.type),this.collect=t?.collect}currentResource(){return this.resourceStack.at(-1)}validate(){Tn(this.root.value,this.schema.path,this.issues),this.constraintsCheck({...this.root,path:this.schema.path},this.schema),cr(this.root,this,{schema:this.schema,initialPath:this.schema.path});for(let e of this.issues)if(e.severity==="error")throw new f({resourceType:"OperationOutcome",issue:this.issues});return this.issues}onExitObject(e,t,n){this.checkAdditionalProperties(t,n.elements,t.path)}onEnterResource(e,t){this.resourceStack.push(t.value)}onExitResource(){this.resourceStack.pop()}visitProperty(e,t,n,i,o){let s=o.elements[t];if(!s)throw new Error(`Missing element validation schema for ${t}`);for(let a of i){if(!this.checkPresence(a,s,n))return;let u;if(s.isArray){if(!Array.isArray(a)){this.issues.push(S(n,"Expected array of values for property"));return}u=a}else{if(Array.isArray(a)){this.issues.push(S(n,"Expected single value for property"));return}u=[a]}(u.length<s.min||u.length>s.max)&&this.issues.push(S(s.path,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${u.length}`)),ha(a,s)||this.issues.push(S(n,"Value did not match expected pattern"));let l=s.slicing?Object.fromEntries(s.slicing.slices.map(p=>[p.name,0])):void 0;for(let p of u){this.constraintsCheck(p,s),this.referenceTypeCheck(p,s),this.checkPropertyValue(p),this.collectValue(p,s);let y=ma(p,s.slicing);y&&l&&(l[y]+=1)}this.validateSlices(s.slicing?.slices,l,n)}}checkPresence(e,t,n){return!Array.isArray(e)&&e.value===void 0?(t.min>0&&this.issues.push(S(e.path,"Missing required property")),!1):E(e)?(this.issues.push(S(n,"Invalid empty value")),!1):!0}checkPropertyValue(e){ut(e.type)?this.validatePrimitiveType(e):E(e.value)&&this.issues.push(S(e.path,"Invalid empty non-primitive value"))}validateSlices(e,t,n){if(!(!e||!t))for(let i of e){let o=t[i.name];(o<i.min||o>i.max)&&this.issues.push(S(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=fa(e,s,t);if(a){let u,l;a.startsWith("_")?(u=a.slice(1),l=s.slice(1)):(u="_"+a,l="_"+s),u in o&&o[u]!==l&&this.issues.push(ge("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(ge("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(S(`${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 la)&&!this.isExpressionTrue(i,e)){this.issues.push(sn(e.path,i));return}}}referenceTypeCheck(e,t){if(e.type!=="Reference")return;let n=e.value;if(!q(n)||n.reference.startsWith("#"))return;let i=n.reference.includes("?")?n.reference.split("?")[0]:n.reference.split("/")[0];if(!i)return;let o=t.type.find(y=>y.code==="Reference")?.targetProfile;if(!o)return;let s=zr+"/fhir/StructureDefinition/",a=s+"Resource",u=s+i,l="https://medplum.com/fhir/StructureDefinition/",p=l+i;for(let y of o)if(y===a||y===u||y===p||!y.startsWith(s)&&!y.startsWith(l))return;this.issues.push(ge("warning","structure",`Invalid reference: got "${i}", expected "${o.join('", "')}"`,e.path))}collectValue(e,t){t.binding?.valueSet&&t.binding.strength==="required"&&ga(e.type)&&this.appendToken(t.binding.valueSet,e)}appendToken(e,t){if(!this.collect?.tokens)return;let n=this.collect.tokens[e];if(!n){let i=Object.keys(this.collect.tokens);for(let o of i)o.startsWith(e+"|")&&(n=this.collect.tokens[o])}if(n?.length){for(let i of n)if(i.path===t.path)return}this.collect.tokens[e]=G(n,t)}isExpressionTrue(e,t){let n={"%context":t,"%ucum":T(Qr)},i=this.currentResource();i&&(n["%resource"]=T(i)),O(this.root.value)&&(n["%rootResource"]=this.root);try{let o=C(e.expression,[t],n,ua);return o.length===1&&o[0].value===!0}catch(o){return this.issues.push(an(t.path,"Error evaluating invariant expression",o,{fhirpath:e.expression})),!1}}validatePrimitiveType(e){let[t,n]=ya(e),i=e.path;if(t){let{type:o,value:s}=t;if(!(o in lr)){this.issues.push(S(i,`Invalid JSON type: ${o} is not a valid FHIR type`));return}let a=lr[o];if(typeof s!==a){s!==null&&this.issues.push(S(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&&cr(n,this,{schema:ae("Element"),initialPath:i})}validateString(e,t,n){if(!e.trim()){this.issues.push(S(n,"String must contain non-whitespace content"));return}if(e.length>1024*1024){this.issues.push(S(n,"String cannot be larger than 1 MB"));return}let i=lt[t];i&&!i.exec(e)&&this.issues.push(S(n,"Invalid "+t+" format"))}validateNumber(e,t,n){Number.isNaN(e)||!Number.isFinite(e)?this.issues.push(S(n,"Invalid numeric value")):da(t)&&!Number.isInteger(e)?this.issues.push(S(n,"Expected number to be an integer")):t===d.positiveInt&&e<=0?this.issues.push(S(n,"Expected number to be positive")):t===d.unsignedInt&&e<0&&this.issues.push(S(n,"Expected number to be non-negative"))}};function da(r){return r===d.integer||r===d.positiveInt||r===d.unsignedInt}function fa(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 I(r,o)?n+a:void 0}}function Tn(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(S(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?t.push(S(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!r[s]?.[a]?t.push(S(`${o}[${a}]`,"Invalid null value")):i[a]&&Tn(i[a],`${o}[${a}]`,t);else typeof i=="object"&&Tn(i,o,t)}}function ha(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&&!je(t,e.pattern)||e.fixed&&!ue(t,e.fixed))}function pr(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 je(r,i.pattern);if(i.fixed)return ue(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 ma(r,e){if(e){for(let t of e.slices)if(e.discriminator.every(n=>ke(Ie(r,n.path))?.some(i=>pr(i,n,t))))return t.name}}function ya(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 ga(r){switch(r){case"CodeableConcept":case"Coding":case"code":case"Quantity":case"string":case"uri":return!0;default:return!1}}function m(r){return[{type:d.boolean,value:r}]}function T(r){return r==null?{type:"undefined",value:void 0}:Number.isSafeInteger(r)?{type:d.integer,value:r}:typeof r=="number"?{type:d.decimal,value:r}:typeof r=="boolean"?{type:d.boolean,value:r}:typeof r=="string"?{type:d.string,value:r}:A(r)?{type:d.Quantity,value:r}:O(r)?{type:r.resourceType,value:r}:mr(r)?{type:d.CodeableConcept,value:r}:hr(r)?{type:d.Coding,value:r}:{type:d.BackboneElement,value:r}}function F(r){return r.length===0?!1:!!r[0].value}function Q(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 I(r,e,t){if(!r.value)return;let n=ht(r.type,e,t?.profileUrl);return n?ji(r,e,n):$i(r,e)}function ji(r,e,t){let n=r.value,i=t.type;if(!i||i.length===0)return;let o,s="undefined",a,u=t.path.lastIndexOf("."),l=t.path.substring(u+1);for(let p of i){let y=l.replace("[x]",k(p.code));if(o=n[y],a=n["_"+y],o!==void 0||a!==void 0){s=p.code;break}}if(a)if(Array.isArray(o)){o=o.slice();for(let p=0;p<Math.max(o.length,a.length);p++)o[p]=Sn(o[p],a[p])}else if(!o&&Array.isArray(a)){o=a.slice();for(let p=0;p<a.length;p++)o[p]=Sn(void 0,a[p])}else o=Sn(o,a);if(!E(o))return(s==="Element"||s==="BackboneElement")&&(s=t.type[0].code),Array.isArray(o)?o.map(p=>Bi(p,s)):Bi(o,s)}function Bi(r,e){return e==="Resource"&&O(r)&&(e=r.resourceType),{type:e,value:r}}function $i(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(T):n=T(i)}else{let i=e.endsWith("[x]")?e.substring(0,e.length-3):e;for(let o of Object.values(d)){let s=i+k(o);if(s in t){let a=t[s];Array.isArray(a)?n=a.map(u=>({type:o,value:u})):n={type:o,value:a};break}}}if(Array.isArray(n)){if(n.length===0||E(n[0]))return}else if(E(n))return;return n}function pt(r){let e=[];for(let t of r){let n=!1;for(let i of e)if(F($e(t,i))){n=!0;break}n||e.push(t)}return e}function bn(r){return m(!F(r))}function En(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?m(!1):m(r.every((t,n)=>F($e(t,e[n]))))}function Rn(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?m(!0):m(r.some((t,n)=>!F($e(t,e[n]))))}function $e(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?m(Math.abs(t-n)<1e-8):A(t)&&A(n)?m(wn(t,n)):m(typeof t=="object"&&typeof n=="object"?An(r,e):t===n)}function fr(r,e){return r.length===0&&e.length===0?m(!0):r.length!==e.length?m(!1):(r.sort(Wi),e.sort(Wi),m(r.every((t,n)=>F(Hi(t,e[n])))))}function Hi(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"?m(Math.abs(s-a)<.01):A(s)&&A(a)?m(wn(s,a)):m(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"?An({...s,id:void 0},{...a,id:void 0}):typeof s=="string"&&typeof a=="string"?s.toLowerCase()===a.toLowerCase():s===a)}function Wi(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 dt(r,e){let{value:t}=r;if(t==null)return!1;let n=e;switch(n.startsWith("System.")&&(n=n.substring(7)),n.startsWith("FHIR.")&&(n=n.substring(5)),n){case"Boolean":return typeof t=="boolean";case"Decimal":case"Integer":return typeof t=="number";case"Date":return Cn(t);case"DateTime":return Ve(t);case"Time":return typeof t=="string"&&!!/^T\d/.exec(t);case"Period":return Pn(t);case"Quantity":return A(t);default:return r.type===n||typeof t=="object"&&t?.resourceType===n}}function Cn(r){return typeof r=="string"&&!!lt.date.exec(r)}function Ve(r){return typeof r=="string"&&!!lt.dateTime.exec(r)}function Pn(r){return!!(r&&typeof r=="object"&&("start"in r&&Ve(r.start)||"end"in r&&Ve(r.end)))}function ft(r){if(r){if(Cn(r)||Ve(r))return{start:dr(r,"0000-01-01T00:00:00.000"),end:dr(r,"xxxx-12-31T23:59:59.999")};if(Pn(r))return{start:r.start?dr(r.start,"0000-01-01T00:00:00.000"):void 0,end:r.end?dr(r.end,"xxxx-12-31T23:59:59.999"):void 0}}}function dr(r,e){let t="Z",n=Math.max(r.indexOf("+",10),r.indexOf("-",10));n>-1?(t=r.substring(n),r=r.substring(0,n)):r.endsWith("Z")&&(r=r.substring(0,r.length-1));let i=r+e.substring(r.length)+t;return new Date(i).toISOString()}function A(r){return!!(r&&typeof r=="object"&&"value"in r&&typeof r.value=="number")}function wn(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 An(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(qi(o)&&qi(s)){if(!An(o,s))return!1}else if(o!==s)return!1}return!0}function qi(r){return r!==null&&typeof r=="object"}function Sn(r,e){if(e){if(typeof e!="object")throw new Error("Primitive extension must be an object");return xa(r??{},e)}return r}function xa(r,e){return delete e.__proto__,delete e.constructor,Object.assign(r,e)}function Ge(r,e){return O(r,e)&&"id"in r&&typeof r.id=="string"}function xe(r){let e=V(r)??"undefined/undefined",t=zi(r);return t===e?{reference:e}:{reference:e,display:t}}function V(r){if(q(r))return r.reference;if(Ge(r))return`${r.resourceType}/${r.id}`}function ve(r){if(r)return q(r)?r.reference.split("/")[1]:r.id}function va(r){if(r?.reference===void 0)throw new f(g("Reference missing reference property."));let[e,t]=r.reference.split("/");if(e===""||t===""||t===void 0)throw new f(g("Unable to parse reference string."));return[e,t]}function gr(r){if(r)if(r.accounts&&r.account){let e=r.accounts;return e.some(t=>t.reference===r.account?.reference)?e:[r.account,...e]}else return ke(r.accounts??r.account)}function Qi(r){return r.resourceType==="Patient"||r.resourceType==="Practitioner"||r.resourceType==="RelatedPerson"}function zi(r){if(Qi(r)){let e=Ta(r);if(e)return e}if(r.resourceType==="Device"){let e=Sa(r);if(e)return e}if(r.resourceType==="MedicationRequest"&&r.medicationCodeableConcept)return He(r.medicationCodeableConcept);if(r.resourceType==="Subscription"&&r.criteria)return r.criteria;if(r.resourceType==="User"&&r.email)return r.email;if("name"in r&&r.name&&typeof r.name=="string")return r.name;if("code"in r&&r.code){let e=r.code;if(Array.isArray(e)&&(e=e[0]),mr(e))return He(e);if(Yi(e))return e.text}return V(r)??""}function Ta(r){let e=r.name;if(e&&e.length>0)return ze(e[0])}function Sa(r){let e=r.deviceName;if(e&&e.length>0)return e[0].name}function ba(r){if(!("photo"in r))return;let e=r.photo;if(e)if(Array.isArray(e))for(let t of e){let n=Gi(t);if(n)return n}else return Gi(e)}function Gi(r){if(r.url&&r.contentType?.startsWith("image/"))return r.url}function Ea(r){return r?new Date(r):void 0}function mt(r,e){let t=new Date(r);t.setUTCHours(0,0,0,0);let n=e?new Date(e):new Date;n.setUTCHours(0,0,0,0);let i=t.getUTCFullYear(),o=t.getUTCMonth(),s=t.getUTCDate(),a=n.getUTCFullYear(),u=n.getUTCMonth(),l=n.getUTCDate(),p=a-i;(u<o||u===o&&l<s)&&p--;let y=a*12+u-(i*12+o);l<s&&y--;let v=Math.floor((n.getTime()-t.getTime())/(1e3*60*60*24));return{years:p,months:y,days:v}}function Ra(r,e){let{years:t,months:n,days:i}=mt(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 Ca(r){let e={};return Ji(r.item,e),e}function Ji(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer[0]),Ji(t.item,e)}function Pa(r){let e={};return Ki(r.item,e),e}function Ki(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),Ki(t.item,e)}function Xi(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 wa(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 Aa(r,...e){let t=ce(r,...e);if(!t)return;let n=I({type:"Extension",value:t},"value[x]");if(n)return Array.isArray(n)?n[0].value:n.value}function ce(r,...e){let t=r;for(let n=0;n<e.length&&t;n++)t=t?.extension?.find(i=>i.url===e[n]);return t}function yt(r,e){let t=On(r);return JSON.stringify(t,null,e?2:void 0)??""}function On(r){if(!(r==null||r===""))return typeof r=="object"?Array.isArray(r)?Oa(r):Ia(r):r}function Oa(r){let e=r.length;if(e===0)return;let t,n=0;for(let i=0;i<e;i++){let o=r[i],s=On(o);s!==o&&!t&&(t=Array.from(r)),s===void 0?t&&(t[i]=null):(t&&(t[i]=s),n++)}if(n!==0)return t??r}function Ia(r){let e,t=0;for(let n in r){let i=r[n],o=On(i);o!==i&&!e&&(e={...r}),o===void 0?e&&delete e[n]:(e&&(e[n]=o),t++)}if(t!==0)return e??r}function E(r){if(r==null)return!0;let e=typeof r;return e==="string"||e==="object"?!Z(r):!1}function Z(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 ka(r){if(!r)return;let e=r.length-1;for(;e>=0&&E(r[e]);)e--;return e>=0?r.slice(0,e+1):void 0}function ue(r,e,t){return r===e||E(r)&&E(e)?!0:E(r)||E(e)?!1:Array.isArray(r)&&Array.isArray(e)?Va(r,e):Array.isArray(r)||Array.isArray(e)?!1:R(r)&&R(e)?Da(r,e,t):(R(r)||R(e),!1)}function Va(r,e){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(!ue(r[t],e[t]))return!1;return!0}function Da(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(!ue(o,s,i))return!1}return!0}function je(r,e){return E(r)?!0:E(e)?!1:Array.isArray(r)&&Array.isArray(e)?Ma(r,e):Array.isArray(r)||Array.isArray(e)?!1:R(r)&&R(e)?_a(r,e):R(r)||R(e)?!1:r===e}function Ma(r,e){return e.every(t=>r.some(n=>je(n,t)))}function _a(r,e){return Object.entries(e).every(([t,n])=>t in r&&je(r[t],n))}function Te(r){return r===void 0?r:JSON.parse(JSON.stringify(r))}function La(r){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(r)}function R(r){return r!==null&&typeof r=="object"}function In(r){return r.every(De)}function De(r){return typeof r=="string"}function hr(r){return R(r)&&"code"in r&&typeof r.code=="string"}function mr(r){return R(r)&&"coding"in r&&Array.isArray(r.coding)&&r.coding.every(hr)}function Fa(r,e){if(r){for(let t of r)if(t.coding){for(let n of t.coding)if(n.system===e)return n.code}}}function Yi(r){return R(r)&&"text"in r&&typeof r.text=="string"}var Zi=[];for(let r=0;r<256;r++)Zi.push(r.toString(16).padStart(2,"0"));function kn(r){let e=Dn(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=Zi[t[i]];return n.join("")}function Vn(r){let e=Dn(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 Dn(r){return ArrayBuffer.isView(r)?r.buffer:r}function k(r){return r?r.charAt(0).toUpperCase()+r.substring(1):""}function Na(r){return r===r.toLowerCase()&&r!==r.toUpperCase()}function xr(r){return r.length>0&&r.startsWith(r[0].toUpperCase())}function le(r,e){let t=r+".";if(e.startsWith(t))return e.slice(t.length)}function yr(r,e){return r.coding?.find(t=>t.system===e)?.code}function Ua(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 Ba(r,e,t,n){return r.qualifiedInterval?.find(i=>to(i,e)&&$a(i,t,r.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function Wa(r,e,t){return eo(r,e,t)[0]}function eo(r,e,t){return r.qualifiedInterval?.filter(n=>to(n,e)&&(!t||t.includes(n.condition)))??[]}function to(r,e){return qa(r,e)&&ja(r,e)}function qa(r,e){return!r.gender||r.gender===e.gender}function ja(r,e){return!r.age||Mn(mt(e.birthDate).years,r.age)}function $a(r,e,t){return!!r.range&&Mn(e,r.range,t)}function Mn(r,e,t){return(e.low?.value===void 0||no(r,e.low.value,t))&&(e.high?.value===void 0||ro(r,e.high.value,t))}function Ha(r,e){return Number.parseFloat(r.toFixed(e))}function Ga(r,e,t){return Y(r,t)===Y(e,t)}function Qa(r,e,t){return Y(r,t)<Y(e,t)}function za(r,e,t){return Y(r,t)>Y(e,t)}function ro(r,e,t){return Y(r,t)<=Y(e,t)}function no(r,e,t){return Y(r,t)>=Y(e,t)}function Y(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}function Ja(r,e,t){return r.find(n=>typeof e=="string"?yr(n.code||{},t)===e:yr(n.code||{},t)===yr(e,t))}function ke(r){if(r!==void 0)return Array.isArray(r)?r:[r]}function Ka(r){return Array.isArray(r)?r[0]:r}var vr=r=>new Promise(e=>{setTimeout(e,r)});function Qe(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 _n(r){let e,t=!1;return function(){return t||(e=r(),t=!0),e}}function G(r,e){return r?(r.push(e),r):[e]}function gt(r){return r.sort((e,t)=>e.localeCompare(t))}function Tr(r){return r.endsWith("/")?r:r+"/"}function io(r){return r.startsWith("/")?r.slice(1):r}function j(r,e){return new URL(io(e),Tr(r.toString())).toString()}function Ln(r,e){return j(r,e).toString().replace("http://","ws://").replace("https://","wss://")}function Fn(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 oo=/^(([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 Xa(r){return oo.test(r)}function Ya(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 Za(r,e){return new Map(r.entry?.filter(n=>!!n.resource).map(n=>[Xi(n.resource,e),n.resource]).filter(([n])=>n!==void 0))}function ec(r,e){if(r?.meta?.profile?.includes(e)){let t=r.meta.profile.indexOf(e);r.meta.profile.splice(t,1)}return r}function tc(r,e){let t=[];if(!r)return t;for(let n=0;n<r.length;n++){let i=e(r[n],n);Array.isArray(i)?t.push(...i):i!==void 0&&t.push(i)}return t}function rc(r){return r.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("\u201C","“").replaceAll("\u201D","”").replaceAll("\u2018","‘").replaceAll("\u2019","’").replaceAll("\u2026","…")}function Nn(r){if(!r)return"";switch(r.type){case"Address":return ao(r.value);case"CodeableConcept":return He(r.value);case"Coding":return Un(r.value);case"ContactPoint":return r.value.value;case"HumanName":return ze(r.value);case"Quantity":return pe(r.value);case"Reference":return so(r.value);default:return r.value?.toString()??""}}function so(r){return r?r.display??r.reference??yt(r):""}function ao(r,e){if(!r)return"";let t=[];if(r.line&&t.push(...r.line),r.city||r.state||r.postalCode){let n=[];r.city&&n.push(r.city),r.state&&n.push(r.state),r.postalCode&&n.push(r.postalCode),t.push(n.join(", "))}return r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.join(e?.lineSeparator??", ").trim()}function ze(r,e){if(!r)return"";let t=[];if(r.prefix&&e?.prefix!==!1&&t.push(...r.prefix),r.given&&t.push(...r.given),r.family&&t.push(r.family),r.suffix&&e?.suffix!==!1&&t.push(...r.suffix),r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.length===0){let n=Me(r.text);if(n)return n}return t.join(" ").trim()}function nc(r){let e=[];return r.given&&e.push(...r.given),e.join(" ").trim()}function ic(r){return Me(r.family)??""}function br(r){return r instanceof Date&&!Number.isNaN(r.getTime())}function oc(r,e,t){if(!r)return"";let n=new Date(r);return br(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...t})):""}function co(r,e,t){if(!r)return"";let n=new Date("2000-01-01T"+r+"Z");return br(n)?n.toLocaleTimeString(e,t):""}function Sr(r,e,t){if(!r)return"";let n=new Date(r);return br(n)?n.toLocaleString(e,t):""}function sc(r,e,t){return!r||!r.start&&!r.end?"":Sr(r.start,e,t)+" - "+Sr(r.end,e,t)}var ac={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},cc={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},uc={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function lc(r){if(!r)return"";let e=[];return pc(e,r.repeat),r.event&&e.push(r.event.map(t=>Sr(t)).join(", ")),k(e.join(" ").trim())}function pc(r,e){if(!e?.periodUnit)return;let t=e.frequency??1,n=e.period??1,i=e.periodUnit;t===1&&n===1?r.push(ac[i]):(t===1?r.push("once"):r.push(t+" times"),n===1?r.push("per "+cc[i]):r.push("per "+n+" "+uc[i])),e.dayOfWeek&&r.push("on "+e.dayOfWeek.map(k).join(", ")),e.timeOfDay&&r.push("at "+e.timeOfDay.map(o=>co(o)).join(", "))}function dc(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=mc(n.value,e),`> ${pe(n,e)}`):`>= ${pe(n,e)}`:n?.value===void 0&&i?.value!==void 0?t&&e!==void 0?(i.value=hc(i.value,e),`< ${pe(i,e)}`):`<= ${pe(i,e)}`:(n?.unit===i?.unit&&delete n?.unit,`${pe(n,e)} - ${pe(i,e)}`)}function pe(r,e){if(!r)return"";let t=[];return r.comparator&&(t.push(r.comparator),t.push(" ")),r.value!==void 0&&(e!==void 0?t.push(r.value.toFixed(e)):t.push(r.value)),r.unit&&(r.unit!=="%"&&t.at(-1)!==" "&&t.push(" "),t.push(r.unit)),t.join("").trim()}function fc(r){return r?.value===void 0?"":r.value.toLocaleString(void 0,{style:"currency",currency:r.currency??"USD",currencyDisplay:"narrowSymbol"})}function He(r){if(!r)return"";let e=Me(r.text);return e||(r.coding?r.coding.map(t=>Un(t)).join(", "):"")}function Un(r,e){let t=Me(r?.display);if(t){let n=e?Me(r?.code):void 0;return`${t}${n?" ("+n+")":""}`}return Me(r?.code)??""}function uo(r){if(!r)return"";let e=[];if(r.valueQuantity)e.push(pe(r.valueQuantity));else if(r.valueCodeableConcept)e.push(He(r.valueCodeableConcept));else{let t=Me(r.valueString);t&&e.push(t)}return"component"in r&&e.push(r.component.map(t=>uo(t)).join(" / ")),e.join(" / ").trim()}function Me(r){return typeof r=="string"?r:void 0}function hc(r,e,t=1){return(lo(r,e)+t)*Math.pow(10,-e)}function mc(r,e,t=1){return(lo(r,e)-t)*Math.pow(10,-e)}function lo(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}var d={Address:"Address",Age:"Age",Annotation:"Annotation",Attachment:"Attachment",BackboneElement:"BackboneElement",CodeableConcept:"CodeableConcept",Coding:"Coding",ContactDetail:"ContactDetail",ContactPoint:"ContactPoint",Contributor:"Contributor",Count:"Count",DataRequirement:"DataRequirement",Distance:"Distance",Dosage:"Dosage",Duration:"Duration",Element:"Element",ElementDefinition:"ElementDefinition",Expression:"Expression",Extension:"Extension",HumanName:"HumanName",Identifier:"Identifier",MarketingStatus:"MarketingStatus",Meta:"Meta",Money:"Money",MoneyQuantity:"MoneyQuantity",Narrative:"Narrative",ParameterDefinition:"ParameterDefinition",Period:"Period",Population:"Population",ProdCharacteristic:"ProdCharacteristic",ProductShelfLife:"ProductShelfLife",Quantity:"Quantity",Range:"Range",Ratio:"Ratio",Reference:"Reference",RelatedArtifact:"RelatedArtifact",SampledData:"SampledData",Signature:"Signature",SimpleQuantity:"SimpleQuantity",SubstanceAmount:"SubstanceAmount",SystemString:"http://hl7.org/fhirpath/System.String",Timing:"Timing",TriggerDefinition:"TriggerDefinition",UsageContext:"UsageContext",base64Binary:"base64Binary",boolean:"boolean",canonical:"canonical",code:"code",date:"date",dateTime:"dateTime",decimal:"decimal",id:"id",instant:"instant",integer:"integer",markdown:"markdown",oid:"oid",positiveInt:"positiveInt",string:"string",time:"time",unsignedInt:"unsignedInt",uri:"uri",url:"url",uuid:"uuid",xhtml:"xhtml"};function yc(r){for(let e of r.entry??[]){let t=e.resource;t.resourceType==="SearchParameter"&&Er(t)}}function yn(r){let e=Array.isArray(r)?r:r.entry?.map(t=>t.resource)??[];for(let t of e)t?.resourceType==="StructureDefinition"&&t.kind==="resource"&&fo(t.type)}function fo(r){let e=N.types[r];return e||(e={searchParamsDetails:{}},N.types[r]=e),!e.searchParams&&r!=="Binary"&&(e.searchParams={_id:{base:[r],code:"_id",type:"token",expression:r+".id"},_lastUpdated:{base:[r],code:"_lastUpdated",type:"date",expression:r+".meta.lastUpdated"},_compartment:{base:[r],code:"_compartment",type:"reference",expression:r+".meta.compartment"},_profile:{base:[r],code:"_profile",type:"uri",expression:r+".meta.profile"},_security:{base:[r],code:"_security",type:"token",expression:r+".meta.security"},_source:{base:[r],code:"_source",type:"uri",expression:r+".meta.source"},_tag:{base:[r],code:"_tag",type:"token",expression:r+".meta.tag"}}),e}function Er(r){for(let e of r.base??[]){let t=fo(e);t.searchParams||(t.searchParams={}),t.searchParams[r.code]=r}}function nr(r){let e=r.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?ho((r.base?.path??r.path)?.split(".")):e}function ho(r){return r.length===1?r[0]:r.map(k).join("")}function ar(r){return r.kind==="resource"&&r.name!=="Resource"&&r.name!=="DomainResource"}function gc(){return Object.values(dn()).filter(ar).map(r=>r.name)}function xc(r){return N.types[r]?.searchParams}function vc(r,e){return N.types[r]?.searchParams?.[e]}function Tc(r){let e=r.replaceAll("[x]","").split(".").pop();return mo(e)}function mo(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(bc).join(" ").replace("_"," ").replaceAll(/\s+/g," ")}var Sc=new Set(["CDS","ID","IP","PKCE","JWKS","URI","URL","OMB","UDI"]);function bc(r){let e=r.toUpperCase();return r===e?r:Sc.has(e)?e:e.charAt(0)+r.slice(1)}function ht(r,e,t){let n=qe(r,t);if(n)return yo(n.elements,e)}function yo(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 Ec(r){return!!(r&&typeof r=="object"&&"type"in r&&"value"in r)}function O(r,e){return!(!r||typeof r!="object"||!("resourceType"in r)||e&&r.resourceType!==e)}function q(r,e){return r&&typeof r=="object"&&"reference"in r&&typeof r.reference=="string"?e?r.reference.match(new RegExp(`^${e}(/|\\?)`))!==null:!0:!1}var N={types:{}};function Bn(r){switch(r.type){case d.uuid:case d.uri:case d.url:case d.string:case d.oid:case d.markdown:case d.id:case d.code:case d.canonical:case d.base64Binary:case d.SystemString:case d.date:case d.dateTime:case d.instant:return r.value;case d.Identifier:return`${r.value.system??""}|${r.value.value}`;case d.Coding:return po(r.value);case d.CodeableConcept:return r.value.coding?.map(po).join(",")??r.value.text;case d.HumanName:return r.value.text?r.value.text:ze(r.value);case d.unsignedInt:case d.positiveInt:case d.integer:case d.decimal:return r.value.toString();case d.boolean:return r.value?"true":"false";case d.Extension:return r.value.url;case d.ContactPoint:return r.value.value;case d.Quantity:case d.Age:case d.Count:case d.Duration:return`${r.value.value}|${r.value.system??""}|${r.value.code??r.value.unit??""}`;case d.Reference:return r.value.reference;default:return Ge(r.value)?V(r.value):JSON.stringify(r)}}function po(r){return r?`${r.system??""}|${r.code}`:""}function Je(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 de=()=>[],D={empty:(r,e)=>m(e.every(t=>E(t.value))),hasValue:(r,e)=>m(e.length!==0),exists:(r,e,t)=>t?m(e.some(n=>F(t.eval(r,[n])))):m(e.length>0&&e.every(n=>!E(n.value))),all:(r,e,t)=>m(e.every(n=>F(t.eval(r,[n])))),allTrue:(r,e)=>{for(let t of e)if(!t.value)return m(!1);return m(!0)},anyTrue:(r,e)=>{for(let t of e)if(t.value)return m(!0);return m(!1)},allFalse:(r,e)=>{for(let t of e)if(t.value)return m(!1);return m(!0)},anyFalse:(r,e)=>{for(let t of e)if(!t.value)return m(!0);return m(!1)},subsetOf:(r,e,t)=>{if(e.length===0)return m(!0);let n=t.eval(r,_e(r));return n.length===0?m(!1):m(e.every(i=>n.some(o=>o.value===i.value)))},supersetOf:(r,e,t)=>{let n=t.eval(r,_e(r));return n.length===0?m(!0):e.length===0?m(!1):m(n.every(i=>e.some(o=>o.value===i.value)))},count:(r,e)=>[{type:d.integer,value:e.length}],distinct:(r,e)=>{let t=[];for(let n of e)t.some(i=>i.value===n.value)||t.push(n);return t},isDistinct:(r,e)=>m(e.length===D.distinct(r,e).length),where:(r,e,t)=>e.filter(n=>F(t.eval(r,[n]))),select:(r,e,t)=>e.flatMap(n=>t.eval({parent:r,variables:{$this:n}},[n])),repeat:de,ofType:(r,e,t)=>e.filter(n=>n.type===t.name),single:(r,e)=>{if(e.length>1)throw new Error("Expected input length one for single()");return e.length===0?[]:e.slice(0,1)},first:(r,e)=>e.length===0?[]:e.slice(0,1),last:(r,e)=>e.length===0?[]:e.slice(-1,e.length),tail:(r,e)=>e.length===0?[]:e.slice(1,e.length),skip:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new TypeError("Expected a number for skip(num)");return n>=e.length?[]:n<=0?e:e.slice(n,e.length)},take:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new TypeError("Expected a number for take(num)");return n>=e.length?e:n<=0?[]:e.slice(0,n)},intersect:(r,e,t)=>{if(!t)return e;let n=t.eval(r,_e(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,_e(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,_e(r));return pt([...e,...n])},combine:(r,e,t)=>{if(!t)return e;let n=t.eval(r,_e(r));return[...e,...n]},htmlChecks:(r,e,t)=>[T(!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 F(o)?n.eval(r,e):i?i.eval(r,e):[]},toBoolean:(r,e)=>{if(e.length===0)return[];let[{value:t}]=te(e,1);if(typeof t=="boolean")return[{type:d.boolean,value:t}];if(typeof t=="number"&&(t===0||t===1))return m(!!t);if(typeof t=="string"){let n=t.toLowerCase();if(["true","t","yes","y","1","1.0"].includes(n))return m(!0);if(["false","f","no","n","0","0.0"].includes(n))return m(!1)}return[]},convertsToBoolean:(r,e)=>e.length===0?[]:m(D.toBoolean(r,e).length===1),toInteger:(r,e)=>{if(e.length===0)return[];let[{value:t}]=te(e,1);return typeof t=="number"?[{type:d.integer,value:t}]:typeof t=="string"&&/^[+-]?\d+$/.exec(t)?[{type:d.integer,value:Number.parseInt(t,10)}]:typeof t=="boolean"?[{type:d.integer,value:t?1:0}]:[]},convertsToInteger:(r,e)=>e.length===0?[]:m(D.toInteger(r,e).length===1),toDate:(r,e)=>{if(e.length===0)return[];let[{value:t}]=te(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:d.date,value:Je(t)}]:[]},convertsToDate:(r,e)=>e.length===0?[]:m(D.toDate(r,e).length===1),toDateTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=te(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:d.dateTime,value:Je(t)}]:[]},convertsToDateTime:(r,e)=>e.length===0?[]:m(D.toDateTime(r,e).length===1),toDecimal:(r,e)=>{if(e.length===0)return[];let[{value:t}]=te(e,1);return typeof t=="number"?[{type:d.decimal,value:t}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(t)?[{type:d.decimal,value:Number.parseFloat(t)}]:typeof t=="boolean"?[{type:d.decimal,value:t?1:0}]:[]},convertsToDecimal:(r,e)=>e.length===0?[]:m(D.toDecimal(r,e).length===1),toQuantity:(r,e)=>{if(e.length===0)return[];let[{value:t}]=te(e,1);return A(t)?[{type:d.Quantity,value:t}]:typeof t=="number"?[{type:d.Quantity,value:{value:t,unit:"1"}}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(t)?[{type:d.Quantity,value:{value:Number.parseFloat(t),unit:"1"}}]:typeof t=="boolean"?[{type:d.Quantity,value:{value:t?1:0,unit:"1"}}]:[]},convertsToQuantity:(r,e)=>e.length===0?[]:m(D.toQuantity(r,e).length===1),toString:(r,e)=>{if(e.length===0)return[];let[{value:t}]=te(e,1);return t==null?[]:A(t)?[{type:d.string,value:`${t.value} '${t.unit}'`}]:[{type:d.string,value:t.toString()}]},convertsToString:(r,e)=>e.length===0?[]:m(D.toString(r,e).length===1),toTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=te(e,1);if(typeof t=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(t);if(n)return[{type:d.time,value:Je("T"+n[1])}]}return[]},convertsToTime:(r,e)=>e.length===0?[]:m(D.toTime(r,e).length===1),indexOf:(r,e,t)=>$((n,i)=>n.indexOf(i),r,e,t),substring:(r,e,t,n)=>$((i,o,s)=>{let a=o,u=s?a+s:i.length;return a<0||a>=i.length?void 0:i.substring(a,u)},r,e,t,n),startsWith:(r,e,t)=>$((n,i)=>n.startsWith(i),r,e,t),endsWith:(r,e,t)=>$((n,i)=>n.endsWith(i),r,e,t),contains:(r,e,t)=>$((n,i)=>n.includes(i),r,e,t),upper:(r,e)=>$(t=>t.toUpperCase(),r,e),lower:(r,e)=>$(t=>t.toLowerCase(),r,e),replace:(r,e,t,n)=>$((i,o,s)=>i.replaceAll(o,s),r,e,t,n),matches:(r,e,t)=>$((n,i)=>!!new RegExp(i).exec(n),r,e,t),replaceMatches:(r,e,t,n)=>$((i,o,s)=>i.replaceAll(new RegExp(o,"g"),s.replaceAll(/\$\{(\w+)\}/g,"$<$1>")),r,e,t,n),length:(r,e)=>$(t=>t.length,r,e),toChars:(r,e)=>$(t=>t?t.split(""):void 0,r,e),encode:de,decode:de,escape:de,unescape:de,trim:de,split:de,join:(r,e,t)=>{let n=t?.eval(r,_e(r))[0]?.value??"";if(typeof n!="string")throw new TypeError("Separator must be a string.");return[{type:d.string,value:e.map(i=>i.value?.toString()??"").join(n)}]},abs:(r,e)=>ee(Math.abs,r,e),ceiling:(r,e)=>ee(Math.ceil,r,e),exp:(r,e)=>ee(Math.exp,r,e),floor:(r,e)=>ee(Math.floor,r,e),ln:(r,e)=>ee(Math.log,r,e),log:(r,e,t)=>ee((n,i)=>Math.log(n)/Math.log(i),r,e,t),power:(r,e,t)=>ee(Math.pow,r,e,t),round:(r,e,...t)=>ee((n,i=0)=>{if(typeof i!="number"||i<0)throw new Error("Invalid precision provided to round()");let o=Math.pow(10,i);return Math.round(n*o)/o},r,e,...t),sqrt:(r,e)=>ee(Math.sqrt,r,e),truncate:(r,e)=>ee(t=>Math.trunc(t),r,e),children:de,descendants:de,trace:(r,e,t)=>e,now:()=>[{type:d.dateTime,value:new Date().toISOString()}],timeOfDay:()=>[{type:d.time,value:new Date().toISOString().substring(11)}],today:()=>[{type:d.date,value:new Date().toISOString().substring(0,10)}],between:(r,e,t,n,i)=>{let o=D.toDateTime(r,t.eval(r,e));if(o.length===0)throw new Error("Invalid start date");let s=D.toDateTime(r,n.eval(r,e));if(s.length===0)throw new Error("Invalid end date");let a=i.eval(r,e)[0]?.value;if(a!=="years"&&a!=="months"&&a!=="days")throw new Error("Invalid units");let u=mt(o[0].value,s[0].value);return[{type:d.Quantity,value:{value:u[a],unit:a}}]},is:(r,e,t)=>{let n="";return t instanceof _?n=t.name:t instanceof z&&(n=t.left.name+"."+t.right.name),n?e.map(i=>({type:d.boolean,value:dt(i,n)})):[]},not:(r,e)=>D.toBoolean(r,e).map(t=>({type:d.boolean,value:!t.value})),resolve:(r,e)=>e.map(t=>{let n=t.value,i;if(typeof n=="string")i=n;else if(typeof n=="object"){let o=n;if(o.resource)return T(o.resource);o.reference?i=o.reference:o.type&&o.identifier&&(i=`${o.type}?identifier=${o.identifier.system}|${o.identifier.value}`)}if(i?.includes("?")){let[o]=i.split("?");return{type:o,value:{resourceType:o}}}if(i?.includes("/")){let[o,s]=i.split("/");return{type:o,value:{resourceType:o,id:s}}}return{type:d.BackboneElement,value:void 0}}).filter(t=>!!t.value),as:(r,e)=>e,type:(r,e)=>e.map(({value:t})=>typeof t=="boolean"?{type:d.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof t=="number"?{type:d.BackboneElement,value:{namespace:"System",name:"Integer"}}:O(t)?{type:d.BackboneElement,value:{namespace:"FHIR",name:t.resourceType}}:{type:d.BackboneElement,value:null}),conformsTo:(r,e,t)=>{let n=t.eval(r,e)[0].value;if(!n.startsWith("http://hl7.org/fhir/StructureDefinition/"))throw new Error("Expected a StructureDefinition URL");let i=n.replace("http://hl7.org/fhir/StructureDefinition/","");return e.map(o=>({type:d.boolean,value:o.value?.resourceType===i}))},getResourceKey:(r,e)=>{let t=e[0].value;return t?.id?[{type:d.id,value:t.id}]:[]},getReferenceKey:(r,e,t)=>{let n=e[0].value;if(!n?.reference)return[];let i="";return t instanceof _&&(i=t.name),i&&!n.reference.startsWith(i+"/")?[]:[{type:d.id,value:ve(n)}]},extension:(r,e,t)=>{let n=t.eval(r,e)[0].value,i=e?.[0]?.value;if(i){let o=ce(i,n);if(o)return[{type:d.Extension,value:o}]}return[]}};function $(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=te(t,1);if(typeof i!="string")throw new TypeError("String function cannot be called with non-string");let o=n.map(a=>a?.eval(e,t)[0]?.value),s=r(i,...o);return s===void 0?[]:Array.isArray(s)?s.map(T):[T(s)]}function ee(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=te(t,1),o=A(i),s=o?i.value:i;if(typeof s!="number")throw new TypeError("Math function cannot be called with non-number");let a=r(s,...n.map(p=>p.eval(e,t)[0]?.value)),u=o?d.Quantity:t[0].type,l=o?{...i,value:a}:a;return[{type:u,value:l}]}function te(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 _e(r){let e=r;for(;e.parent?.variables.$this;)e=e.parent;return[e.variables.$this]}var fe=class{constructor(e,t){c(this,"original");c(this,"child");this.original=e,this.child=t}eval(e,t){try{if(t.length>0){let n=[];for(let i of t)n.push(this.child.eval({parent:e,variables:{$this:i}},[i]));return n.flat()}else return this.child.eval(e,[])}catch(n){throw new Error(`FhirPathError on "${this.original}": ${n}`,{cause:n})}}toString(){return this.child.toString()}},U=class{constructor(e){c(this,"value");this.value=e}eval(){return[this.value]}toString(){let e=this.value.value;return typeof e=="string"?`'${e}'`:e.toString()}},_=class{constructor(e){c(this,"name");this.name=e}eval(e,t){if(this.name==="$this")return t;let n=this.getVariable(e);if(n)return[n];if(this.name.startsWith("%"))throw new Error(`Undefined variable ${this.name}`);return t.flatMap(i=>this.evalValue(i)).filter(i=>i?.value!==void 0)}getVariable(e){let t=e.variables[this.name];if(t!==void 0)return t;if(e.parent)return this.getVariable(e.parent)}evalValue(e){let t=e.value;if(!(!t||typeof t!="object"))return O(t,this.name)?e:ur(e,this.name)}toString(){return this.name}},xt=class{eval(){return[]}toString(){return"{}"}},vt=class extends it{constructor(t,n,i){super(t,n);c(this,"impl");this.impl=i}eval(t,n){return this.impl(this.child.eval(t,n))}toString(){return this.operator+this.child.toString()}},he=class extends se{constructor(e,t){super("as",e,t)}eval(e,t){return D.ofType(e,this.left.eval(e,t),this.right)}},P=class extends se{},M=class extends P{constructor(t,n,i,o){super(t,n,i);c(this,"impl");this.impl=o}eval(t,n){let i=this.left.eval(t,n);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,u=A(s)?s.value:s,l=A(a)?a.value:a,p=this.impl(u,l);return typeof p=="boolean"?m(p):A(s)?[{type:d.Quantity,value:{...s,value:p}}]:[T(p)]}},Tt=class extends se{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:d.string,value:o.map(s=>s.value).join("")}]:o}},St=class extends P{constructor(e,t){super("contains",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return m(n.some(o=>o.value===i[0].value))}},bt=class extends P{constructor(e,t){super("in",e,t)}eval(e,t){let n=Q(this.left.eval(e,t)),i=this.right.eval(e,t);return n?m(i.some(o=>$e(n,o)[0].value)):[]}},z=class extends se{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()}`}},Se=class extends se{constructor(e,t){super("|",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return pt([...n,...i])}},Et=class extends P{constructor(e,t){super("=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return En(n,i)}},Rt=class extends P{constructor(e,t){super("!=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Rn(n,i)}},Ct=class extends P{constructor(e,t){super("~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return fr(n,i)}},Pt=class extends P{constructor(e,t){super("!~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return bn(fr(n,i))}},be=class extends P{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 m(dt(n[0],i))}},wt=class extends P{constructor(e,t){super("and",e,t)}eval(e,t){let n=Q(this.left.eval(e,t),"boolean"),i=Q(this.right.eval(e,t),"boolean");return n?.value===!0&&i?.value===!0?m(!0):n?.value===!1||i?.value===!1?m(!1):[]}},At=class extends P{constructor(e,t){super("or",e,t)}eval(e,t){let n=Q(this.left.eval(e,t),"boolean"),i=Q(this.right.eval(e,t),"boolean");return n?.value===!1&&i?.value===!1?m(!1):n?.value||i?.value?m(!0):[]}},Ot=class extends P{constructor(e,t){super("xor",e,t)}eval(e,t){let n=Q(this.left.eval(e,t),"boolean"),i=Q(this.right.eval(e,t),"boolean");return!n||!i?[]:m(n.value!==i.value)}},It=class extends P{constructor(e,t){super("implies",e,t)}eval(e,t){let n=Q(this.left.eval(e,t),"boolean"),i=Q(this.right.eval(e,t),"boolean");return i?.value===!0||n?.value===!1?m(!0):!n||!i?[]:m(!1)}},re=class{constructor(e,t){c(this,"name");c(this,"args");this.name=e,this.args=t}eval(e,t){let n=D[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(", ")})`}},Ee=class{constructor(e,t){c(this,"left");c(this,"expr");this.left=e,this.expr=t}eval(e,t){let n=this.expr.eval(e,t);if(n.length!==1)return[];let i=n[0].value;if(typeof i!="number")throw new Error("Invalid indexer expression: should return integer}");let o=this.left.eval(e,t);return i in o?[o[i]]:[]}toString(){return`${this.left.toString()}[${this.expr.toString()}]`}};var Rc=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],Cc={"'":"'",'"':'"',"`":"`",r:"\r",n:`
|
|
1
|
+
"use strict";var Kt=Object.defineProperty;var ys=Object.getOwnPropertyDescriptor;var gs=Object.getOwnPropertyNames;var xs=Object.prototype.hasOwnProperty;var vs=(r,e,t)=>e in r?Kt(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var Ts=(r,e)=>{for(var t in e)Kt(r,t,{get:e[t],enumerable:!0})},Ss=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of gs(e))!xs.call(r,i)&&i!==t&&Kt(r,i,{get:()=>e[i],enumerable:!(n=ys(e,i))||n.enumerable});return r};var bs=r=>Ss(Kt({},"__esModule",{value:!0}),r);var c=(r,e,t)=>vs(r,typeof e!="symbol"?e+"":e,t);var hp={};Ts(hp,{AccessPolicyInteraction:()=>Re,AckCode:()=>ql,AndAtom:()=>wt,ArithemticOperatorAtom:()=>M,AsAtom:()=>he,BooleanInfixOperatorAtom:()=>P,CPT:()=>Ps,ClientStorage:()=>et,ConcatAtom:()=>Tt,ContainsAtom:()=>St,ContentType:()=>w,DEFAULT_ACCEPT:()=>$o,DEFAULT_MAX_SEARCH_COUNT:()=>qc,DEFAULT_SEARCH_COUNT:()=>Wc,DataSampler:()=>_r,DotAtom:()=>z,EmptySetAtom:()=>xt,EqualsAtom:()=>Et,EquivalentAtom:()=>Ct,EventTarget:()=>wr,ExternalSecretSystems:()=>Xu,FHIRCAST_EVENT_NAMES:()=>Ar,FHIRCAST_EVENT_RESOURCES:()=>Mo,FHIRCAST_EVENT_VERSION_REQUIRED:()=>Or,FHIRCAST_RESOURCE_TYPES:()=>Do,FhirFilterComparison:()=>Gt,FhirFilterConnective:()=>zt,FhirFilterNegation:()=>Qt,FhirPathAtom:()=>fe,FhircastConnection:()=>Lt,FileBuilder:()=>hi,FunctionAtom:()=>re,HTTP_HL7_ORG:()=>zr,HTTP_TERMINOLOGY_HL7_ORG:()=>Os,Hl7Context:()=>ye,Hl7Field:()=>K,Hl7Message:()=>yi,Hl7Segment:()=>nt,ICD10:()=>ws,ImpliesAtom:()=>It,InAtom:()=>bt,IndexerAtom:()=>Ee,InfixOperatorAtom:()=>se,IsAtom:()=>be,LOINC:()=>Es,LRUCache:()=>Pe,LiteralAtom:()=>U,LogLevel:()=>Be,LogLevelNames:()=>ps,Logger:()=>gi,MEDPLUM_CLI_CLIENT_ID:()=>Nu,MEDPLUM_RELEASES_URL:()=>fs,MEDPLUM_VERSION:()=>Mr,MedplumClient:()=>qt,MedplumKeyValueClient:()=>Ut,MemoryStorage:()=>Vr,MockAsyncClientStorage:()=>ri,NDC:()=>As,NotEqualsAtom:()=>Rt,NotEquivalentAtom:()=>Pt,OAuthClientAssertionType:()=>Go,OAuthGrantType:()=>Ne,OAuthSigningAlgorithm:()=>Gu,OAuthTokenAuthMethod:()=>Hu,OAuthTokenType:()=>Ho,OperationOutcomeError:()=>f,Operator:()=>h,OperatorPrecedence:()=>x,OrAtom:()=>At,Parser:()=>Xt,ParserBuilder:()=>ot,PrefixOperatorAtom:()=>it,PropertyType:()=>d,RXNORM:()=>Cs,ReadablePromise:()=>L,ReconnectingWebSocket:()=>Bt,SNOMED:()=>Rs,SearchParameterType:()=>oe,SubscriptionEmitter:()=>rt,SubscriptionManager:()=>Wt,SymbolAtom:()=>_,Tokenizer:()=>me,TransformMapCollection:()=>Br,TypedEventTarget:()=>J,UCUM:()=>Qr,UnaryOperatorAtom:()=>vt,UnionAtom:()=>Se,VALID_HOSTNAME_REGEX:()=>oo,XorAtom:()=>Ot,accepted:()=>Us,accessPolicySupportsInteraction:()=>Qn,addProfileToResource:()=>Za,allOk:()=>Is,append:()=>G,applyDefaultValuesToElement:()=>cl,applyDefaultValuesToResource:()=>al,applyFixedOrPatternValue:()=>$t,arrayBufferToBase64:()=>Vn,arrayBufferToHex:()=>kn,arrayify:()=>ke,assert:()=>Uo,assertContextVersionOptional:()=>Xn,assertOk:()=>Ys,assertReleaseManifest:()=>hs,badRequest:()=>b,booleanToTypedValue:()=>m,buildCdsRequest:()=>Cu,buildElementsContext:()=>Fr,buildTypeName:()=>ho,businessRule:()=>js,calculateAge:()=>mt,calculateAgeString:()=>Ca,canReadResourceType:()=>fu,canWriteResource:()=>mu,canWriteResourceType:()=>hu,capitalize:()=>k,checkForNull:()=>xi,checkIfValidMedplumVersion:()=>pp,clearReleaseCache:()=>lp,compressElement:()=>ea,concatUrls:()=>j,conceptMapTranslate:()=>li,conflict:()=>Bs,convertContainedResourcesToBundle:()=>Eu,convertToSearchableDates:()=>Wn,convertToSearchableNumbers:()=>Mc,convertToSearchableQuantities:()=>_c,convertToSearchableReferences:()=>jn,convertToSearchableStrings:()=>qn,convertToSearchableTokens:()=>$n,convertToSearchableUris:()=>Lc,convertToTransactionBundle:()=>Oo,crawlTypedValue:()=>cr,crawlTypedValueAsync:()=>ca,createConstraintIssue:()=>sn,createFhircastMessagePayload:()=>kr,createOperationOutcomeIssue:()=>ge,createProcessingIssue:()=>an,createReference:()=>xe,createStructureIssue:()=>S,created:()=>ks,decodeBase64:()=>Ao,decodeBase64Url:()=>zn,deepClone:()=>Te,deepEquals:()=>ue,deepIncludes:()=>je,deriveIdentifierSearchParameter:()=>Kl,encodeBase64:()=>_t,encodeBase64Url:()=>vu,encryptSHA256:()=>Jn,ensureNoLeadingSlash:()=>io,ensureTrailingSlash:()=>Tr,escapeHtml:()=>nc,evalFhirPath:()=>Dc,evalFhirPathTyped:()=>C,evalSqlOnFhir:()=>op,expandSampledData:()=>oi,expandSampledObservation:()=>tl,extractAccountReferences:()=>gr,fetchLatestVersionString:()=>dp,fetchVersionManifest:()=>Gr,fhirPathArrayEquals:()=>En,fhirPathArrayEquivalent:()=>fr,fhirPathArrayNotEquals:()=>Rn,fhirPathEquals:()=>$e,fhirPathEquivalent:()=>Hi,fhirPathIs:()=>dt,fhirPathNot:()=>bn,fhirTypeToJsType:()=>lr,findCodeBySystem:()=>Na,findObservationInterval:()=>Wa,findObservationReferenceRange:()=>qa,findObservationReferenceRanges:()=>eo,findResourceByCode:()=>Ka,findResourceInBundle:()=>Ru,flatMapFilter:()=>rc,forbidden:()=>Ds,formatAddress:()=>ao,formatCodeableConcept:()=>He,formatCoding:()=>Un,formatDate:()=>sc,formatDateTime:()=>Sr,formatFamilyName:()=>oc,formatGivenName:()=>ic,formatHl7DateTime:()=>ls,formatHumanName:()=>ze,formatMoney:()=>hc,formatObservationValue:()=>uo,formatPeriod:()=>ac,formatQuantity:()=>pe,formatRange:()=>fc,formatReferenceString:()=>so,formatSearchQuery:()=>Yc,formatTime:()=>co,formatTiming:()=>pc,generateId:()=>ie,getAllDataTypes:()=>dn,getAllQuestionnaireAnswers:()=>wa,getBuffer:()=>Cr,getCodeBySystem:()=>yr,getDataType:()=>ae,getDateProperty:()=>Ra,getDefaultValuesForNewSliceEntry:()=>ul,getDisplayString:()=>zi,getElementDefinition:()=>ht,getElementDefinitionFromElements:()=>yo,getElementDefinitionTypeName:()=>nr,getExpressionForResourceType:()=>np,getExpressionsForResourceType:()=>bi,getExtension:()=>ce,getExtensionValue:()=>Oa,getIdentifier:()=>Xi,getImageSrc:()=>Ea,getInnerDerivedIdentifierExpression:()=>vi,getNestedProperty:()=>Ie,getParsedDerivedIdentifierExpression:()=>Ti,getParsedExpressionForResourceType:()=>Si,getPathDifference:()=>le,getPathDisplayName:()=>Sc,getPropertyDisplayName:()=>mo,getQueryString:()=>Fn,getQuestionnaireAnswers:()=>Pa,getRandomString:()=>Pr,getReferenceString:()=>V,getResourceTypes:()=>xc,getSearchParameter:()=>Tc,getSearchParameterDetails:()=>Xl,getSearchParameters:()=>vc,getStatus:()=>Xs,getTypedPropertyValue:()=>I,getTypedPropertyValueWithPath:()=>ur,getTypedPropertyValueWithSchema:()=>ji,getTypedPropertyValueWithoutSchema:()=>$i,getValueSliceName:()=>ai,getWebSocketUrl:()=>Ln,getWindow:()=>xu,globalSchema:()=>N,gone:()=>Ms,indexConceptMapCodings:()=>Ko,indexDefaultSearchParameters:()=>yn,indexSearchParameter:()=>Er,indexSearchParameterBundle:()=>gc,indexStructureDefinitionBundle:()=>or,inflateBaseSchema:()=>cn,inflateElement:()=>Vi,initFhirPathParserBuilder:()=>Ke,invalidSearchOperator:()=>ru,isAccepted:()=>Hs,isBrowserEnvironment:()=>B,isCodeableConcept:()=>mr,isCoding:()=>hr,isCompletedSubscriptionRequest:()=>Yn,isComplexTypeCode:()=>xr,isConflict:()=>zs,isContextVersionRequired:()=>Kn,isCreated:()=>$s,isDataTypeLoaded:()=>fn,isDateString:()=>Cn,isDateTimeString:()=>Ve,isEmpty:()=>E,isError:()=>tr,isFhirCriteriaMet:()=>Bo,isFhircastResourceType:()=>_o,isGone:()=>Js,isJwt:()=>Zn,isLowerCase:()=>Ua,isMedplumAccessToken:()=>ei,isNodeEnvironment:()=>gu,isNotFound:()=>Qs,isObject:()=>R,isOk:()=>rr,isOperationOutcome:()=>st,isPeriod:()=>Pn,isPopulated:()=>Z,isPrimitiveType:()=>ut,isProfileLoaded:()=>hn,isProfileResource:()=>Qi,isQuantity:()=>A,isQuantityEquivalent:()=>wn,isRedirect:()=>Gs,isReference:()=>q,isResource:()=>O,isResourceType:()=>ct,isResourceTypeSchema:()=>ar,isResourceWithId:()=>Ge,isSliceDefinitionWithTypes:()=>si,isString:()=>De,isStringArray:()=>In,isTextObject:()=>Yi,isTypedValue:()=>Rc,isUUID:()=>Fa,isUnauthenticated:()=>Ks,isValidDate:()=>br,isValidHostname:()=>Ya,isValidMedplumSemver:()=>ms,lazy:()=>_n,loadDataType:()=>sr,locationUtils:()=>ne,mapByIdentifier:()=>ec,matchDiscriminant:()=>pr,matchesRange:()=>Mn,matchesSearchRequest:()=>Mt,multipleMatches:()=>Fs,normalizeArrayBufferView:()=>Dn,normalizeCreateBinaryOptions:()=>ii,normalizeCreatePdfOptions:()=>Qo,normalizeErrorString:()=>Ae,normalizeOperationOutcome:()=>at,notFound:()=>tn,notModified:()=>Vs,operationOutcomeIssueToString:()=>ki,operationOutcomeToString:()=>on,parseFhirPath:()=>Dt,parseFilterParameter:()=>Wl,parseHl7DateTime:()=>$l,parseJWTPayload:()=>Nt,parseLogLevel:()=>Gl,parseMappingLanguage:()=>gl,parseParameter:()=>bo,parseReference:()=>Ta,parseSearchRequest:()=>Xe,parseStructureDefinition:()=>ir,parseXFhirQuery:()=>Xc,preciseEquals:()=>Qa,preciseGreaterThan:()=>Ja,preciseGreaterThanOrEquals:()=>no,preciseLessThan:()=>za,preciseLessThanOrEquals:()=>ro,preciseRound:()=>Ga,preconditionFailed:()=>_s,projectAdminResourceTypes:()=>Ro,protectedResourceTypes:()=>Eo,readInteractions:()=>Co,redirect:()=>qs,removeDuplicates:()=>pt,removeProfileFromResource:()=>tc,reorderBundle:()=>Io,replaceQueryVariables:()=>Vo,resolveId:()=>ve,resourceMatchesSubscriptionCriteria:()=>Lu,satisfiedAccessPolicy:()=>Po,serializeError:()=>Jt,serializeFhircastSubscriptionRequest:()=>Ir,serverError:()=>nn,serverTimeout:()=>Ws,setCodeBySystem:()=>Ba,setIdentifier:()=>Aa,singleton:()=>Q,singularize:()=>Xa,sleep:()=>vr,sortStringArray:()=>gt,splitN:()=>Qe,splitSearchOnComma:()=>Ye,streamToBuffer:()=>ip,stringify:()=>yt,stringifyTypedValue:()=>Bn,structureMapTransform:()=>xl,subsetResource:()=>na,summarizeObservations:()=>Yu,toJsBoolean:()=>F,toPeriod:()=>ft,toTypedValue:()=>T,tooManyRequests:()=>Ns,trimTrailingEmptyElements:()=>Va,tryGetDataType:()=>qe,tryGetJwtExpiration:()=>ti,tryGetProfile:()=>mn,typedValueToString:()=>Nn,unauthorized:()=>we,unauthorizedTokenAudience:()=>er,unauthorizedTokenExpired:()=>rn,unsupportedMediaType:()=>Ls,validateFhircastSubscriptionRequest:()=>Ft,validateResource:()=>da,validateResourceType:()=>Ql,validateTypedValue:()=>Ui,validationError:()=>g,validationRegexes:()=>lt,warnIfNewerVersionAvailable:()=>fp,wordWrap:()=>cs});module.exports=bs(hp);var it=class{constructor(e,t){c(this,"operator");c(this,"child");this.operator=e,this.child=t}toString(){return`${this.operator}(${this.child.toString()})`}},se=class{constructor(e,t,n){c(this,"operator");c(this,"left");c(this,"right");this.operator=e,this.left=t,this.right=n}toString(){return`(${this.left.toString()} ${this.operator} ${this.right.toString()})`}},ot=class{constructor(){c(this,"prefixParselets",{});c(this,"infixParselets",{})}registerInfix(e,t){return this.infixParselets[e]=t,this}registerPrefix(e,t){return this.prefixParselets[e]=t,this}prefix(e,t,n){return this.registerPrefix(e,{parse(i,o){let s=i.consumeAndParse(t);return n(o,s)}})}infixLeft(e,t,n){return this.registerInfix(e,{parse(i,o,s){let a=i.consumeAndParse(t);return n(o,s,a)},precedence:t})}construct(e){return new Xt(e,this.prefixParselets,this.infixParselets)}},Xt=class{constructor(e,t,n){c(this,"tokens");c(this,"prefixParselets");c(this,"infixParselets");this.tokens=e,this.prefixParselets=t,this.infixParselets=n}hasMore(){return this.tokens.length>0}match(e){return this.peek()?.id!==e?!1:(this.consume(),!0)}consumeAndParse(e=1/0){let t=this.consume(),n=this.prefixParselets[t.id];if(!n)throw 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 Pe=class{constructor(e=10){c(this,"max");c(this,"cache");this.max=e,this.cache=new Map}clear(){this.cache.clear()}get(e){let t=this.cache.get(e);return t&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size>=this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}delete(e){this.cache.delete(e)}keys(){return this.cache.keys()}first(){return this.cache.keys().next().value}};var Qr="http://unitsofmeasure.org",Es="http://loinc.org",Rs="http://snomed.info/sct",Cs="http://www.nlm.nih.gov/research/umls/rxnorm",Ps="http://www.ama-assn.org/go/cpt",ws="http://hl7.org/fhir/sid/icd-10",As="http://hl7.org/fhir/sid/ndc",zr="http://hl7.org",Os="http://terminology.hl7.org";var Yt="created",Jr="gone",Kr="not-modified",Xr="found",Yr="not-found",Zr="conflict",en="unauthorized",Ri="forbidden",Ci="precondition-failed",Pi="unsupported-media-type",wi="multiple-matches",Ai="too-many-requests",Zt="accepted",Oi="server-timeout",Ii="business-rule",Is={resourceType:"OperationOutcome",id:"ok",issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},ks={resourceType:"OperationOutcome",id:Yt,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},Vs={resourceType:"OperationOutcome",id:Kr,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},tn={resourceType:"OperationOutcome",id:Yr,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},we={resourceType:"OperationOutcome",id:en,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},rn={...we,issue:[...we.issue,{severity:"error",code:"expired",details:{text:"Token expired"}}]},er={...we,issue:[...we.issue,{severity:"error",code:"invalid",details:{text:"Token not issued for this audience"}}]},Ds={resourceType:"OperationOutcome",id:Ri,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},Ms={resourceType:"OperationOutcome",id:Jr,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},_s={resourceType:"OperationOutcome",id:Ci,issue:[{severity:"error",code:"processing",details:{text:"Precondition Failed"}}]},Ls={resourceType:"OperationOutcome",id:Pi,issue:[{severity:"error",code:"not-supported",details:{text:"Unsupported media type"}}]},Fs={resourceType:"OperationOutcome",id:wi,issue:[{severity:"error",code:"multiple-matches",details:{text:"Multiple resources found matching condition"}}]},Ns={resourceType:"OperationOutcome",id:Ai,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function Us(r){return{resourceType:"OperationOutcome",id:Zt,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:r}]}}function b(r,e){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:r},...e?{expression:[e]}:void 0}]}}function Bs(r,e){return{resourceType:"OperationOutcome",id:Zr,issue:[{severity:"error",code:"conflict",details:{coding:e?[{code:e}]:void 0,text:r}}]}}function g(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"structure",details:{text:r}}]}}function nn(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:r.toString()}]}}function Ws(r){return{resourceType:"OperationOutcome",id:Oi,issue:[{severity:"error",code:"timeout",details:{text:r??"Server timeout"}}]}}function qs(r){let e=r.toString();return{resourceType:"OperationOutcome",id:Xr,issue:[{severity:"information",code:"informational",details:{coding:[{system:"urn:ietf:rfc:3986",code:e}],text:"Redirect to "+e}}]}}function js(r,e){return{resourceType:"OperationOutcome",id:Ii,issue:[{severity:"error",code:"business-rule",details:{id:r,text:e}}]}}function tr(r){return!r||typeof r!="object"?!1:r instanceof Error||typeof DOMException<"u"&&r instanceof DOMException?!0:Object.prototype.toString.call(r)==="[object Error]"}function st(r){return typeof r=="object"&&r!==null&&r.resourceType==="OperationOutcome"}function rr(r){return r.id==="ok"||r.id===Yt||r.id===Kr||r.id===Zt}function $s(r){return r.id===Yt}function Hs(r){return r.id===Zt}function Gs(r){return r.id===Xr}function Qs(r){return r.id===Yr}function zs(r){return r.id===Zr}function Js(r){return r.id===Jr}function Ks(r){return r.id===en}function Xs(r){switch(r.id){case"ok":return 200;case Yt:return 201;case Zt:return 202;case Xr:return 302;case Kr:return 304;case en:return 401;case Ri:return 403;case Yr:return 404;case Zr:return 409;case Jr:return 410;case Ci:case wi:return 412;case Pi:return 415;case Ii:return 422;case Ai:return 429;case Oi:return 504;default:return r.issue?.[0]?.code==="exception"?500:400}}function Ys(r,e){if(!rr(r)||e===void 0)throw new f(r)}var f=class extends Error{constructor(t,n){super(on(t),n);c(this,"outcome");this.name="OperationOutcomeError",this.outcome=t}};function at(r){return r instanceof f?r.outcome:st(r)?r:b(Ae(r))}function Ae(r){return r?typeof r=="string"?r:tr(r)?r.message:st(r)?on(r):typeof r=="object"&&"code"in r&&typeof r.code=="string"?r.code:JSON.stringify(r):"Unknown error"}function on(r){let e=r.issue?.map(ki)??[];return e.length>0?e.join("; "):"Unknown error"}function ki(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 ge(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 S(r,e){return ge("error","structure",e,r)}function sn(r,e){return ge("error","invariant",`Constraint ${e.key} not met: ${e.description}`,r,{fhirpath:e.expression})}function an(r,e,t,n){return ge("error","processing",e,r,{...n,error:t})}var Zs={"http://hl7.org/fhirpath/System.String":"string"};function ea(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:Zs[t.code]??t.code})),e}function Vi(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 cn(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,Vi(i,o)])),constraints:[],innerTypes:[]};return e}var Di={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 ir(r){return new ln(r).parse()}var Oe=cn(Di),pn=Object.create(null),Mi=Object.create(null),ra={"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 Ni(r){let e;return e=Mi[r],e||(e=Mi[r]=Object.create(null)),e}function or(r){let t=(Array.isArray(r)?r:r.entry?.map(n=>n.resource)??[]).filter(n=>n?.resourceType==="StructureDefinition");yn(t);for(let n of t)sr(n)}function sr(r){if(!r?.name)throw new Error("Failed loading StructureDefinition from bundle");if(r.resourceType!=="StructureDefinition")return;let e=ir(r),t=ra[r.url],n,i;t?(n=Oe,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=Oe,i=r.type):(n=Ni(r.url),i=r.type),n[i]=e;for(let o of e.innerTypes)o.parentType=e,n[o.name]=o;pn[r.url]=e}function dn(){return Oe}function fn(r){return!!Oe[r]}function qe(r,e){if(e){let t=Ni(e)[r];if(t)return t}return Oe[r]}function ae(r,e){let t=qe(r,e);if(!t)throw new f(b("Unknown data type: "+r));return t}function ct(r){let e=Oe[r];return e&&ar(e)}function hn(r){return!!pn[r]}function mn(r){return pn[r]}var ln=class{constructor(e){c(this,"root");c(this,"elements");c(this,"elementIndex");c(this,"index");c(this,"resourceSchema");c(this,"slicingContext");c(this,"innerTypes");c(this,"backboneContext");if(!e.snapshot?.element||e.snapshot.element.length===0)throw new Error(`No snapshot defined for StructureDefinition '${e.name}'`);this.root=e.snapshot.element[0],this.elements=e.snapshot.element.slice(1),this.elementIndex=Object.create(null),this.index=0,this.resourceSchema={name:e.name,path:this.root.path,title:e.title,type:e.type,url:e.url,version:e.version,kind:e.kind,description:aa(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=un(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[un(e,n.path)]=t;break}n=n.parent}if(!n){let i=un(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&&!We(this.slicingContext.path,e?.path)&&(this.slicingContext=void 0),e.slicing&&!this.slicingContext&&this.enterSlice(e,t)}enterInnerType(e){for(;this.backboneContext&&!We(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;let t=nr(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:We(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,t){sa(e)&&!this.peek()?.sliceName||(t.slicing={discriminator:(e.slicing?.discriminator??[]).map(n=>{if(n.type!=="value"&&n.type!=="pattern"&&n.type!=="type")throw new Error(`Unsupported slicing discriminator type: ${n.type}`);return{path:n.path,type:n.type}}),slices:[],ordered:e.slicing?.ordered??!1,rule:e.slicing?.rules},this.slicingContext={field:t.slicing,path:e.path??""})}checkFieldExit(e=void 0){if(this.backboneContext&&!We(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!We(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!!(We(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=nr(e)),n||(n=ce(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=Li(e.max),n=e.base?.max?Li(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:Fi(I(i,"fixed[x]")),pattern:Fi(I(i,"pattern[x]")),binding:e.binding}}};function na(r,e){if(!r)return;let t=[];for(let n of e){t.push("_"+n);let i=Oe[r.resourceType].elements[n+"[x]"];i&&t.push(...i.type.map(o=>n+k(o.code)))}for(let n of Object.getOwnPropertyNames(r))!e.includes(n)&&!t.includes(n)&&!ia.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(_i):[_i]},r}var _i={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},ia=["resourceType","id","meta"];function Li(r){return r==="*"?Number.POSITIVE_INFINITY:Number.parseInt(r,10)}function un(r,e=""){return oa(r.path,e)}function oa(r,e){return r?e&&r.startsWith(e)?r.substring(e.length+1):r:""}function We(r,e){return!r||!e?!1:e.startsWith(r+".")||e===r}function Fi(r){return Array.isArray(r)&&r.length>0?r[0]:E(r)?void 0:r}function sa(r){let e=r.slicing?.discriminator;return!!(r.type?.some(t=>t.code==="Extension")&&e?.length===1&&e[0].type==="value"&&e[0].path==="url")}function aa(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 cr(r,e,t){new gn(r,e,t).crawl()}function ca(r,e,t){return new xn(r,e,t).crawl()}var gn=class{constructor(e,t,n){c(this,"root");c(this,"visitor");c(this,"schema");c(this,"initialPath");c(this,"excludeMissingProperties");this.root=e,this.visitor=t,this.schema=n?.schema??ae(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}crawl(){this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}crawlObject(e,t,n){let i=O(e.value);if(i&&this.visitor.onEnterResource&&this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties)for(let o of Object.keys(e.value))this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&this.visitor.onExitResource(n,e,t)}crawlProperty(e,t,n,i){let o=Ie(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 ke(s))this.crawlPropertyValue(a,i)}crawlPropertyValue(e,t){if(!ut(e.type)){let n=ae(e.type);this.crawlObject(e,n,t)}}},xn=class{constructor(e,t,n){c(this,"root");c(this,"visitor");c(this,"schema");c(this,"initialPath");c(this,"excludeMissingProperties");this.root=e,this.visitor=t,this.schema=n?.schema??ae(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}async crawl(){return this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}async crawlObject(e,t,n){let i=O(e.value);if(i&&this.visitor.onEnterResource&&await this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&await this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties&&e.value)for(let o of Object.keys(e.value))await this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))await this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&await this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&await this.visitor.onExitResource(n,e,t)}async crawlProperty(e,t,n,i){let o=Ie(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 ke(s))await this.crawlPropertyValue(a,i)}async crawlPropertyValue(e,t){if(!ut(e.type)){let n=ae(e.type);await this.crawlObject(e,n,t)}}};function Ie(r,e,t){if(r===void 0)return[void 0];if(e==="$this")return[r];let n=t?.withPath?ur:I,[i,...o]=e.split("."),s=[n(r,i,t)];for(let a of o){let u=[];for(let l of s)if(Array.isArray(l))for(let p of l)u.push(n(p,a,t));else(t?.withPath&&l?.value!==void 0||!t?.withPath&&l!==void 0)&&u.push(n(l,a,t));s=u}return s}function ur(r,e,t){let n=r.path;return ua(I(r,e,t),n,e)}function ua(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 lr={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"},la=new Pe(1e3);function ut(r){return r==="undefined"||r in lr}var lt={base64Binary:/^([A-Za-z\d+/]{4})*([A-Za-z\d+/]{2}==|[A-Za-z\d+/]{3}=)?$/,canonical:/^\S*$/,code:/^[^\s]+( [^\s]+)*$/,date:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1]))?)?$/,dateTime:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1])(T([01]\d|2[0-3])(:[0-5]\d:([0-5]\d|60)(\.\d{1,9})?)?)?)?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00)?)?)?$/,id:/^[A-Za-z0-9\-.]{1,64}$/,instant:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])T([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00))$/,markdown:/^[\r\n\t\u0020-\uFFFF]+$/,oid:/^urn:oid:[0-2](\.(0|[1-9]\d*))+$/,string:/^[\r\n\t\u0020-\uFFFF]+$/,time:/^([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?$/,uri:/^\S*$/,url:/^\S*$/,uuid:/^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,xhtml:/.*/},pa={"ele-1":!0,"dom-3":!0,"org-1":!0,"sdf-19":!0};function da(r,e){if(!ct(r.resourceType))throw new f(g("Invalid resource type"));return Ui(T(r),e)}function Ui(r,e){return new vn(r,e).validate()}var vn=class{constructor(e,t){c(this,"issues");c(this,"root");c(this,"resourceStack");c(this,"schema");c(this,"collect");this.issues=[],this.root=e,this.resourceStack=[],O(e.value)&&this.resourceStack.push(e.value),t?.profile?this.schema=ir(t.profile):this.schema=ae(e.type),this.collect=t?.collect}currentResource(){return this.resourceStack.at(-1)}validate(){Tn(this.root.value,this.schema.path,this.issues),this.constraintsCheck({...this.root,path:this.schema.path},this.schema),cr(this.root,this,{schema:this.schema,initialPath:this.schema.path});for(let e of this.issues)if(e.severity==="error")throw new f({resourceType:"OperationOutcome",issue:this.issues});return this.issues}onExitObject(e,t,n){this.checkAdditionalProperties(t,n.elements,t.path)}onEnterResource(e,t){this.resourceStack.push(t.value)}onExitResource(){this.resourceStack.pop()}visitProperty(e,t,n,i,o){let s=o.elements[t];if(!s)throw new Error(`Missing element validation schema for ${t}`);for(let a of i){if(!this.checkPresence(a,s,n))return;let u;if(s.isArray){if(!Array.isArray(a)){this.issues.push(S(n,"Expected array of values for property"));return}u=a}else{if(Array.isArray(a)){this.issues.push(S(n,"Expected single value for property"));return}u=[a]}(u.length<s.min||u.length>s.max)&&this.issues.push(S(s.path,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${u.length}`)),ma(a,s)||this.issues.push(S(n,"Value did not match expected pattern"));let l=s.slicing?Object.fromEntries(s.slicing.slices.map(p=>[p.name,0])):void 0;for(let p of u){this.constraintsCheck(p,s),this.referenceTypeCheck(p,s),this.checkPropertyValue(p),this.collectValue(p,s);let y=ya(p,s.slicing);y&&l&&(l[y]+=1)}this.validateSlices(s.slicing?.slices,l,n)}}checkPresence(e,t,n){return!Array.isArray(e)&&e.value===void 0?(t.min>0&&this.issues.push(S(e.path,"Missing required property")),!1):E(e)?(this.issues.push(S(n,"Invalid empty value")),!1):!0}checkPropertyValue(e){ut(e.type)?this.validatePrimitiveType(e):E(e.value)&&this.issues.push(S(e.path,"Invalid empty non-primitive value"))}validateSlices(e,t,n){if(!(!e||!t))for(let i of e){let o=t[i.name];(o<i.min||o>i.max)&&this.issues.push(S(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=ha(e,s,t);if(a){let u,l;a.startsWith("_")?(u=a.slice(1),l=s.slice(1)):(u="_"+a,l="_"+s),u in o&&o[u]!==l&&this.issues.push(ge("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(ge("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(S(`${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 pa)&&!this.isExpressionTrue(i,e)){this.issues.push(sn(e.path,i));return}}}referenceTypeCheck(e,t){if(e.type!=="Reference")return;let n=e.value;if(!q(n)||n.reference.startsWith("#"))return;let i=n.reference.includes("?")?n.reference.split("?")[0]:n.reference.split("/")[0];if(!i)return;let o=t.type.find(y=>y.code==="Reference")?.targetProfile;if(!o)return;let s=zr+"/fhir/StructureDefinition/",a=s+"Resource",u=s+i,l="https://medplum.com/fhir/StructureDefinition/",p=l+i;for(let y of o)if(y===a||y===u||y===p||!y.startsWith(s)&&!y.startsWith(l))return;this.issues.push(ge("warning","structure",`Invalid reference: got "${i}", expected "${o.join('", "')}"`,e.path))}collectValue(e,t){t.binding?.valueSet&&t.binding.strength==="required"&&xa(e.type)&&this.appendToken(t.binding.valueSet,e)}appendToken(e,t){if(!this.collect?.tokens)return;let n=this.collect.tokens[e];if(!n){let i=Object.keys(this.collect.tokens);for(let o of i)o.startsWith(e+"|")&&(n=this.collect.tokens[o])}if(n?.length){for(let i of n)if(i.path===t.path)return}this.collect.tokens[e]=G(n,t)}isExpressionTrue(e,t){let n={"%context":t,"%ucum":T(Qr)},i=this.currentResource();i&&(n["%resource"]=T(i)),O(this.root.value)&&(n["%rootResource"]=this.root);try{let o=C(e.expression,[t],n,la);return o.length===1&&o[0].value===!0}catch(o){return this.issues.push(an(t.path,"Error evaluating invariant expression",o,{fhirpath:e.expression})),!1}}validatePrimitiveType(e){let[t,n]=ga(e),i=e.path;if(t){let{type:o,value:s}=t;if(!(o in lr)){this.issues.push(S(i,`Invalid JSON type: ${o} is not a valid FHIR type`));return}let a=lr[o];if(typeof s!==a){s!==null&&this.issues.push(S(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&&cr(n,this,{schema:ae("Element"),initialPath:i})}validateString(e,t,n){if(!e.trim()){this.issues.push(S(n,"String must contain non-whitespace content"));return}if(e.length>1024*1024){this.issues.push(S(n,"String cannot be larger than 1 MB"));return}let i=lt[t];i&&!i.exec(e)&&this.issues.push(S(n,"Invalid "+t+" format"))}validateNumber(e,t,n){Number.isNaN(e)||!Number.isFinite(e)?this.issues.push(S(n,"Invalid numeric value")):fa(t)&&!Number.isInteger(e)?this.issues.push(S(n,"Expected number to be an integer")):t===d.positiveInt&&e<=0?this.issues.push(S(n,"Expected number to be positive")):t===d.unsignedInt&&e<0&&this.issues.push(S(n,"Expected number to be non-negative"))}};function fa(r){return r===d.integer||r===d.positiveInt||r===d.unsignedInt}function ha(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 I(r,o)?n+a:void 0}}function Tn(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(S(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?t.push(S(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!r[s]?.[a]?t.push(S(`${o}[${a}]`,"Invalid null value")):i[a]&&Tn(i[a],`${o}[${a}]`,t);else typeof i=="object"&&Tn(i,o,t)}}function ma(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&&!je(t,e.pattern)||e.fixed&&!ue(t,e.fixed))}function pr(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 je(r,i.pattern);if(i.fixed)return ue(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 ya(r,e){if(e){for(let t of e.slices)if(e.discriminator.every(n=>ke(Ie(r,n.path))?.some(i=>pr(i,n,t))))return t.name}}function ga(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 xa(r){switch(r){case"CodeableConcept":case"Coding":case"code":case"Quantity":case"string":case"uri":return!0;default:return!1}}function m(r){return[{type:d.boolean,value:r}]}function T(r){return r==null?{type:"undefined",value:void 0}:Number.isSafeInteger(r)?{type:d.integer,value:r}:typeof r=="number"?{type:d.decimal,value:r}:typeof r=="boolean"?{type:d.boolean,value:r}:typeof r=="string"?{type:d.string,value:r}:A(r)?{type:d.Quantity,value:r}:O(r)?{type:r.resourceType,value:r}:mr(r)?{type:d.CodeableConcept,value:r}:hr(r)?{type:d.Coding,value:r}:{type:d.BackboneElement,value:r}}function F(r){return r.length===0?!1:!!r[0].value}function Q(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 I(r,e,t){if(!r.value)return;let n=ht(r.type,e,t?.profileUrl);return n?ji(r,e,n):$i(r,e)}function ji(r,e,t){let n=r.value,i=t.type;if(!i||i.length===0)return;let o,s="undefined",a,u=t.path.lastIndexOf("."),l=t.path.substring(u+1);for(let p of i){let y=l.replace("[x]",k(p.code));if(o=n[y],a=n["_"+y],o!==void 0||a!==void 0){s=p.code;break}}if(a)if(Array.isArray(o)){o=o.slice();for(let p=0;p<Math.max(o.length,a.length);p++)o[p]=Sn(o[p],a[p])}else if(!o&&Array.isArray(a)){o=a.slice();for(let p=0;p<a.length;p++)o[p]=Sn(void 0,a[p])}else o=Sn(o,a);if(!E(o))return(s==="Element"||s==="BackboneElement")&&(s=t.type[0].code),Array.isArray(o)?o.map(p=>Bi(p,s)):Bi(o,s)}function Bi(r,e){return e==="Resource"&&O(r)&&(e=r.resourceType),{type:e,value:r}}function $i(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(T):n=T(i)}else{let i=e.endsWith("[x]")?e.substring(0,e.length-3):e;for(let o of Object.values(d)){let s=i+k(o);if(s in t){let a=t[s];Array.isArray(a)?n=a.map(u=>({type:o,value:u})):n={type:o,value:a};break}}}if(Array.isArray(n)){if(n.length===0||E(n[0]))return}else if(E(n))return;return n}function pt(r){let e=[];for(let t of r){let n=!1;for(let i of e)if(F($e(t,i))){n=!0;break}n||e.push(t)}return e}function bn(r){return m(!F(r))}function En(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?m(!1):m(r.every((t,n)=>F($e(t,e[n]))))}function Rn(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?m(!0):m(r.some((t,n)=>!F($e(t,e[n]))))}function $e(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?m(Math.abs(t-n)<1e-8):A(t)&&A(n)?m(wn(t,n)):m(typeof t=="object"&&typeof n=="object"?An(r,e):t===n)}function fr(r,e){return r.length===0&&e.length===0?m(!0):r.length!==e.length?m(!1):(r.sort(Wi),e.sort(Wi),m(r.every((t,n)=>F(Hi(t,e[n])))))}function Hi(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"?m(Math.abs(s-a)<.01):A(s)&&A(a)?m(wn(s,a)):m(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"?An({...s,id:void 0},{...a,id:void 0}):typeof s=="string"&&typeof a=="string"?s.toLowerCase()===a.toLowerCase():s===a)}function Wi(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 dt(r,e){let{value:t}=r;if(t==null)return!1;let n=e;switch(n.startsWith("System.")&&(n=n.substring(7)),n.startsWith("FHIR.")&&(n=n.substring(5)),n){case"Boolean":return typeof t=="boolean";case"Decimal":case"Integer":return typeof t=="number";case"Date":return Cn(t);case"DateTime":return Ve(t);case"Time":return typeof t=="string"&&!!/^T\d/.exec(t);case"Period":return Pn(t);case"Quantity":return A(t);default:return r.type===n||typeof t=="object"&&t?.resourceType===n}}function Cn(r){return typeof r=="string"&&!!lt.date.exec(r)}function Ve(r){return typeof r=="string"&&!!lt.dateTime.exec(r)}function Pn(r){return!!(r&&typeof r=="object"&&("start"in r&&Ve(r.start)||"end"in r&&Ve(r.end)))}function ft(r){if(r){if(Cn(r)||Ve(r))return{start:dr(r,"0000-01-01T00:00:00.000"),end:dr(r,"xxxx-12-31T23:59:59.999")};if(Pn(r))return{start:r.start?dr(r.start,"0000-01-01T00:00:00.000"):void 0,end:r.end?dr(r.end,"xxxx-12-31T23:59:59.999"):void 0}}}function dr(r,e){let t="Z",n=Math.max(r.indexOf("+",10),r.indexOf("-",10));n>-1?(t=r.substring(n),r=r.substring(0,n)):r.endsWith("Z")&&(r=r.substring(0,r.length-1));let i=r+e.substring(r.length)+t;return new Date(i).toISOString()}function A(r){return!!(r&&typeof r=="object"&&"value"in r&&typeof r.value=="number")}function wn(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 An(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(qi(o)&&qi(s)){if(!An(o,s))return!1}else if(o!==s)return!1}return!0}function qi(r){return r!==null&&typeof r=="object"}function Sn(r,e){if(e){if(typeof e!="object")throw new Error("Primitive extension must be an object");return va(r??{},e)}return r}function va(r,e){return delete e.__proto__,delete e.constructor,Object.assign(r,e)}function Ge(r,e){return O(r,e)&&"id"in r&&typeof r.id=="string"}function xe(r){let e=V(r)??"undefined/undefined",t=zi(r);return t===e?{reference:e}:{reference:e,display:t}}function V(r){if(q(r))return r.reference;if(Ge(r))return`${r.resourceType}/${r.id}`}function ve(r){if(r)return q(r)?r.reference.split("/")[1]:r.id}function Ta(r){if(r?.reference===void 0)throw new f(g("Reference missing reference property."));let[e,t]=r.reference.split("/");if(e===""||t===""||t===void 0)throw new f(g("Unable to parse reference string."));return[e,t]}function gr(r){if(r)if(r.accounts&&r.account){let e=r.accounts;return e.some(t=>t.reference===r.account?.reference)?e:[r.account,...e]}else return ke(r.accounts??r.account)}function Qi(r){return r.resourceType==="Patient"||r.resourceType==="Practitioner"||r.resourceType==="RelatedPerson"}function zi(r){if(Qi(r)){let e=Sa(r);if(e)return e}if(r.resourceType==="Device"){let e=ba(r);if(e)return e}if(r.resourceType==="MedicationRequest"&&r.medicationCodeableConcept)return He(r.medicationCodeableConcept);if(r.resourceType==="Subscription"&&r.criteria)return r.criteria;if(r.resourceType==="User"&&r.email)return r.email;if("name"in r&&r.name&&typeof r.name=="string")return r.name;if("code"in r&&r.code){let e=r.code;if(Array.isArray(e)&&(e=e[0]),mr(e))return He(e);if(Yi(e))return e.text}return V(r)??""}function Sa(r){let e=r.name;if(e&&e.length>0)return ze(e[0])}function ba(r){let e=r.deviceName;if(e&&e.length>0)return e[0].name}function Ea(r){if(!("photo"in r))return;let e=r.photo;if(e)if(Array.isArray(e))for(let t of e){let n=Gi(t);if(n)return n}else return Gi(e)}function Gi(r){if(r.url&&r.contentType?.startsWith("image/"))return r.url}function Ra(r){return r?new Date(r):void 0}function mt(r,e){let t=new Date(r);t.setUTCHours(0,0,0,0);let n=e?new Date(e):new Date;n.setUTCHours(0,0,0,0);let i=t.getUTCFullYear(),o=t.getUTCMonth(),s=t.getUTCDate(),a=n.getUTCFullYear(),u=n.getUTCMonth(),l=n.getUTCDate(),p=a-i;(u<o||u===o&&l<s)&&p--;let y=a*12+u-(i*12+o);l<s&&y--;let v=Math.floor((n.getTime()-t.getTime())/(1e3*60*60*24));return{years:p,months:y,days:v}}function Ca(r,e){let{years:t,months:n,days:i}=mt(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 Pa(r){let e={};return Ji(r.item,e),e}function Ji(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer[0]),Ji(t.item,e)}function wa(r){let e={};return Ki(r.item,e),e}function Ki(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),Ki(t.item,e)}function Xi(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 Aa(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=ce(r,...e);if(!t)return;let n=I({type:"Extension",value:t},"value[x]");if(n)return Array.isArray(n)?n[0].value:n.value}function ce(r,...e){let t=r;for(let n=0;n<e.length&&t;n++)t=t?.extension?.find(i=>i.url===e[n]);return t}function yt(r,e){let t=On(r);return JSON.stringify(t,null,e?2:void 0)??""}function On(r){if(!(r==null||r===""))return typeof r=="object"?Array.isArray(r)?Ia(r):ka(r):r}function Ia(r){let e=r.length;if(e===0)return;let t,n=0;for(let i=0;i<e;i++){let o=r[i],s=On(o);s!==o&&!t&&(t=Array.from(r)),s===void 0?t&&(t[i]=null):(t&&(t[i]=s),n++)}if(n!==0)return t??r}function ka(r){let e,t=0;for(let n in r){let i=r[n],o=On(i);o!==i&&!e&&(e={...r}),o===void 0?e&&delete e[n]:(e&&(e[n]=o),t++)}if(t!==0)return e??r}function E(r){if(r==null)return!0;let e=typeof r;return e==="string"||e==="object"?!Z(r):!1}function Z(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 Va(r){if(!r)return;let e=r.length-1;for(;e>=0&&E(r[e]);)e--;return e>=0?r.slice(0,e+1):void 0}function ue(r,e,t){return r===e||E(r)&&E(e)?!0:E(r)||E(e)?!1:Array.isArray(r)&&Array.isArray(e)?Da(r,e):Array.isArray(r)||Array.isArray(e)?!1:R(r)&&R(e)?Ma(r,e,t):(R(r)||R(e),!1)}function Da(r,e){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(!ue(r[t],e[t]))return!1;return!0}function Ma(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(!ue(o,s,i))return!1}return!0}function je(r,e){return E(r)?!0:E(e)?!1:Array.isArray(r)&&Array.isArray(e)?_a(r,e):Array.isArray(r)||Array.isArray(e)?!1:R(r)&&R(e)?La(r,e):R(r)||R(e)?!1:r===e}function _a(r,e){return e.every(t=>r.some(n=>je(n,t)))}function La(r,e){return Object.entries(e).every(([t,n])=>t in r&&je(r[t],n))}function Te(r){return r===void 0?r:JSON.parse(JSON.stringify(r))}function Fa(r){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(r)}function R(r){return r!==null&&typeof r=="object"}function In(r){return r.every(De)}function De(r){return typeof r=="string"}function hr(r){return R(r)&&"code"in r&&typeof r.code=="string"}function mr(r){return R(r)&&"coding"in r&&Array.isArray(r.coding)&&r.coding.every(hr)}function Na(r,e){if(r){for(let t of r)if(t.coding){for(let n of t.coding)if(n.system===e)return n.code}}}function Yi(r){return R(r)&&"text"in r&&typeof r.text=="string"}var Zi=[];for(let r=0;r<256;r++)Zi.push(r.toString(16).padStart(2,"0"));function kn(r){let e=Dn(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=Zi[t[i]];return n.join("")}function Vn(r){let e=Dn(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 Dn(r){return ArrayBuffer.isView(r)?r.buffer:r}function k(r){return r?r.charAt(0).toUpperCase()+r.substring(1):""}function Ua(r){return r===r.toLowerCase()&&r!==r.toUpperCase()}function xr(r){return r.length>0&&r.startsWith(r[0].toUpperCase())}function le(r,e){let t=r+".";if(e.startsWith(t))return e.slice(t.length)}function yr(r,e){return r.coding?.find(t=>t.system===e)?.code}function Ba(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 Wa(r,e,t,n){return r.qualifiedInterval?.find(i=>to(i,e)&&Ha(i,t,r.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function qa(r,e,t){return eo(r,e,t)[0]}function eo(r,e,t){return r.qualifiedInterval?.filter(n=>to(n,e)&&(!t||t.includes(n.condition)))??[]}function to(r,e){return ja(r,e)&&$a(r,e)}function ja(r,e){return!r.gender||r.gender===e.gender}function $a(r,e){return!r.age||Mn(mt(e.birthDate).years,r.age)}function Ha(r,e,t){return!!r.range&&Mn(e,r.range,t)}function Mn(r,e,t){return(e.low?.value===void 0||no(r,e.low.value,t))&&(e.high?.value===void 0||ro(r,e.high.value,t))}function Ga(r,e){return Number.parseFloat(r.toFixed(e))}function Qa(r,e,t){return Y(r,t)===Y(e,t)}function za(r,e,t){return Y(r,t)<Y(e,t)}function Ja(r,e,t){return Y(r,t)>Y(e,t)}function ro(r,e,t){return Y(r,t)<=Y(e,t)}function no(r,e,t){return Y(r,t)>=Y(e,t)}function Y(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}function Ka(r,e,t){return r.find(n=>typeof e=="string"?yr(n.code||{},t)===e:yr(n.code||{},t)===yr(e,t))}function ke(r){if(r!==void 0)return Array.isArray(r)?r:[r]}function Xa(r){return Array.isArray(r)?r[0]:r}var vr=r=>new Promise(e=>{setTimeout(e,r)});function Qe(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 _n(r){let e,t=!1;return function(){return t||(e=r(),t=!0),e}}function G(r,e){return r?(r.push(e),r):[e]}function gt(r){return r.sort((e,t)=>e.localeCompare(t))}function Tr(r){return r.endsWith("/")?r:r+"/"}function io(r){return r.startsWith("/")?r.slice(1):r}function j(r,e){return new URL(io(e),Tr(r.toString())).toString()}function Ln(r,e){return j(r,e).toString().replace("http://","ws://").replace("https://","wss://")}function Fn(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 oo=/^(([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 Ya(r){return oo.test(r)}function Za(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 ec(r,e){return new Map(r.entry?.filter(n=>!!n.resource).map(n=>[Xi(n.resource,e),n.resource]).filter(([n])=>n!==void 0))}function tc(r,e){if(r?.meta?.profile?.includes(e)){let t=r.meta.profile.indexOf(e);r.meta.profile.splice(t,1)}return r}function rc(r,e){let t=[];if(!r)return t;for(let n=0;n<r.length;n++){let i=e(r[n],n);Array.isArray(i)?t.push(...i):i!==void 0&&t.push(i)}return t}function nc(r){return r.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("\u201C","“").replaceAll("\u201D","”").replaceAll("\u2018","‘").replaceAll("\u2019","’").replaceAll("\u2026","…")}function Nn(r){if(!r)return"";switch(r.type){case"Address":return ao(r.value);case"CodeableConcept":return He(r.value);case"Coding":return Un(r.value);case"ContactPoint":return r.value.value;case"HumanName":return ze(r.value);case"Quantity":return pe(r.value);case"Reference":return so(r.value);default:return r.value?.toString()??""}}function so(r){return r?r.display??r.reference??yt(r):""}function ao(r,e){if(!r)return"";let t=[];if(r.line&&t.push(...r.line),r.city||r.state||r.postalCode){let n=[];r.city&&n.push(r.city),r.state&&n.push(r.state),r.postalCode&&n.push(r.postalCode),t.push(n.join(", "))}return r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.join(e?.lineSeparator??", ").trim()}function ze(r,e){if(!r)return"";let t=[];if(r.prefix&&e?.prefix!==!1&&t.push(...r.prefix),r.given&&t.push(...r.given),r.family&&t.push(r.family),r.suffix&&e?.suffix!==!1&&t.push(...r.suffix),r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.length===0){let n=Me(r.text);if(n)return n}return t.join(" ").trim()}function ic(r){let e=[];return r.given&&e.push(...r.given),e.join(" ").trim()}function oc(r){return Me(r.family)??""}function br(r){return r instanceof Date&&!Number.isNaN(r.getTime())}function sc(r,e,t){if(!r)return"";let n=new Date(r);return br(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...t})):""}function co(r,e,t){if(!r)return"";let n=new Date("2000-01-01T"+r+"Z");return br(n)?n.toLocaleTimeString(e,t):""}function Sr(r,e,t){if(!r)return"";let n=new Date(r);return br(n)?n.toLocaleString(e,t):""}function ac(r,e,t){return!r||!r.start&&!r.end?"":Sr(r.start,e,t)+" - "+Sr(r.end,e,t)}var cc={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},uc={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},lc={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function pc(r){if(!r)return"";let e=[];return dc(e,r.repeat),r.event&&e.push(r.event.map(t=>Sr(t)).join(", ")),k(e.join(" ").trim())}function dc(r,e){if(!e?.periodUnit)return;let t=e.frequency??1,n=e.period??1,i=e.periodUnit;t===1&&n===1?r.push(cc[i]):(t===1?r.push("once"):r.push(t+" times"),n===1?r.push("per "+uc[i]):r.push("per "+n+" "+lc[i])),e.dayOfWeek&&r.push("on "+e.dayOfWeek.map(k).join(", ")),e.timeOfDay&&r.push("at "+e.timeOfDay.map(o=>co(o)).join(", "))}function fc(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=yc(n.value,e),`> ${pe(n,e)}`):`>= ${pe(n,e)}`:n?.value===void 0&&i?.value!==void 0?t&&e!==void 0?(i.value=mc(i.value,e),`< ${pe(i,e)}`):`<= ${pe(i,e)}`:(n?.unit===i?.unit&&delete n?.unit,`${pe(n,e)} - ${pe(i,e)}`)}function pe(r,e){if(!r)return"";let t=[];return r.comparator&&(t.push(r.comparator),t.push(" ")),r.value!==void 0&&(e!==void 0?t.push(r.value.toFixed(e)):t.push(r.value)),r.unit&&(r.unit!=="%"&&t.at(-1)!==" "&&t.push(" "),t.push(r.unit)),t.join("").trim()}function hc(r){return r?.value===void 0?"":r.value.toLocaleString(void 0,{style:"currency",currency:r.currency??"USD",currencyDisplay:"narrowSymbol"})}function He(r){if(!r)return"";let e=Me(r.text);return e||(r.coding?r.coding.map(t=>Un(t)).join(", "):"")}function Un(r,e){let t=Me(r?.display);if(t){let n=e?Me(r?.code):void 0;return`${t}${n?" ("+n+")":""}`}return Me(r?.code)??""}function uo(r){if(!r)return"";let e=[];if(r.valueQuantity)e.push(pe(r.valueQuantity));else if(r.valueCodeableConcept)e.push(He(r.valueCodeableConcept));else{let t=Me(r.valueString);t&&e.push(t)}return"component"in r&&e.push(r.component.map(t=>uo(t)).join(" / ")),e.join(" / ").trim()}function Me(r){return typeof r=="string"?r:void 0}function mc(r,e,t=1){return(lo(r,e)+t)*Math.pow(10,-e)}function yc(r,e,t=1){return(lo(r,e)-t)*Math.pow(10,-e)}function lo(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}var d={Address:"Address",Age:"Age",Annotation:"Annotation",Attachment:"Attachment",BackboneElement:"BackboneElement",CodeableConcept:"CodeableConcept",Coding:"Coding",ContactDetail:"ContactDetail",ContactPoint:"ContactPoint",Contributor:"Contributor",Count:"Count",DataRequirement:"DataRequirement",Distance:"Distance",Dosage:"Dosage",Duration:"Duration",Element:"Element",ElementDefinition:"ElementDefinition",Expression:"Expression",Extension:"Extension",HumanName:"HumanName",Identifier:"Identifier",MarketingStatus:"MarketingStatus",Meta:"Meta",Money:"Money",MoneyQuantity:"MoneyQuantity",Narrative:"Narrative",ParameterDefinition:"ParameterDefinition",Period:"Period",Population:"Population",ProdCharacteristic:"ProdCharacteristic",ProductShelfLife:"ProductShelfLife",Quantity:"Quantity",Range:"Range",Ratio:"Ratio",Reference:"Reference",RelatedArtifact:"RelatedArtifact",SampledData:"SampledData",Signature:"Signature",SimpleQuantity:"SimpleQuantity",SubstanceAmount:"SubstanceAmount",SystemString:"http://hl7.org/fhirpath/System.String",Timing:"Timing",TriggerDefinition:"TriggerDefinition",UsageContext:"UsageContext",base64Binary:"base64Binary",boolean:"boolean",canonical:"canonical",code:"code",date:"date",dateTime:"dateTime",decimal:"decimal",id:"id",instant:"instant",integer:"integer",markdown:"markdown",oid:"oid",positiveInt:"positiveInt",string:"string",time:"time",unsignedInt:"unsignedInt",uri:"uri",url:"url",uuid:"uuid",xhtml:"xhtml"};function gc(r){for(let e of r.entry??[]){let t=e.resource;t.resourceType==="SearchParameter"&&Er(t)}}function yn(r){let e=Array.isArray(r)?r:r.entry?.map(t=>t.resource)??[];for(let t of e)t?.resourceType==="StructureDefinition"&&t.kind==="resource"&&fo(t.type)}function fo(r){let e=N.types[r];return e||(e={searchParamsDetails:{}},N.types[r]=e),!e.searchParams&&r!=="Binary"&&(e.searchParams={_id:{base:[r],code:"_id",type:"token",expression:r+".id"},_lastUpdated:{base:[r],code:"_lastUpdated",type:"date",expression:r+".meta.lastUpdated"},_compartment:{base:[r],code:"_compartment",type:"reference",expression:r+".meta.compartment"},_profile:{base:[r],code:"_profile",type:"uri",expression:r+".meta.profile"},_security:{base:[r],code:"_security",type:"token",expression:r+".meta.security"},_source:{base:[r],code:"_source",type:"uri",expression:r+".meta.source"},_tag:{base:[r],code:"_tag",type:"token",expression:r+".meta.tag"}}),e}function Er(r){for(let e of r.base??[]){let t=fo(e);t.searchParams||(t.searchParams={}),t.searchParams[r.code]=r}}function nr(r){let e=r.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?ho((r.base?.path??r.path)?.split(".")):e}function ho(r){return r.length===1?r[0]:r.map(k).join("")}function ar(r){return r.kind==="resource"&&r.name!=="Resource"&&r.name!=="DomainResource"}function xc(){return Object.values(dn()).filter(ar).map(r=>r.name)}function vc(r){return N.types[r]?.searchParams}function Tc(r,e){return N.types[r]?.searchParams?.[e]}function Sc(r){let e=r.replaceAll("[x]","").split(".").pop();return mo(e)}function mo(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(Ec).join(" ").replace("_"," ").replaceAll(/\s+/g," ")}var bc=new Set(["CDS","ID","IP","PKCE","JWKS","URI","URL","OMB","UDI"]);function Ec(r){let e=r.toUpperCase();return r===e?r:bc.has(e)?e:e.charAt(0)+r.slice(1)}function ht(r,e,t){let n=qe(r,t);if(n)return yo(n.elements,e)}function yo(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 Rc(r){return!!(r&&typeof r=="object"&&"type"in r&&"value"in r)}function O(r,e){return!(!r||typeof r!="object"||!("resourceType"in r)||e&&r.resourceType!==e)}function q(r,e){return r&&typeof r=="object"&&"reference"in r&&typeof r.reference=="string"?e?r.reference.match(new RegExp(`^${e}(/|\\?)`))!==null:!0:!1}var N={types:{}};function Bn(r){switch(r.type){case d.uuid:case d.uri:case d.url:case d.string:case d.oid:case d.markdown:case d.id:case d.code:case d.canonical:case d.base64Binary:case d.SystemString:case d.date:case d.dateTime:case d.instant:return r.value;case d.Identifier:return`${r.value.system??""}|${r.value.value}`;case d.Coding:return po(r.value);case d.CodeableConcept:return r.value.coding?.map(po).join(",")??r.value.text;case d.HumanName:return r.value.text?r.value.text:ze(r.value);case d.unsignedInt:case d.positiveInt:case d.integer:case d.decimal:return r.value.toString();case d.boolean:return r.value?"true":"false";case d.Extension:return r.value.url;case d.ContactPoint:return r.value.value;case d.Quantity:case d.Age:case d.Count:case d.Duration:return`${r.value.value}|${r.value.system??""}|${r.value.code??r.value.unit??""}`;case d.Reference:return r.value.reference;default:return Ge(r.value)?V(r.value):JSON.stringify(r)}}function po(r){return r?`${r.system??""}|${r.code}`:""}function Je(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 de=()=>[],D={empty:(r,e)=>m(e.every(t=>E(t.value))),hasValue:(r,e)=>m(e.length!==0),exists:(r,e,t)=>t?m(e.some(n=>F(t.eval(r,[n])))):m(e.length>0&&e.every(n=>!E(n.value))),all:(r,e,t)=>m(e.every(n=>F(t.eval(r,[n])))),allTrue:(r,e)=>{for(let t of e)if(!t.value)return m(!1);return m(!0)},anyTrue:(r,e)=>{for(let t of e)if(t.value)return m(!0);return m(!1)},allFalse:(r,e)=>{for(let t of e)if(t.value)return m(!1);return m(!0)},anyFalse:(r,e)=>{for(let t of e)if(!t.value)return m(!0);return m(!1)},subsetOf:(r,e,t)=>{if(e.length===0)return m(!0);let n=t.eval(r,_e(r));return n.length===0?m(!1):m(e.every(i=>n.some(o=>o.value===i.value)))},supersetOf:(r,e,t)=>{let n=t.eval(r,_e(r));return n.length===0?m(!0):e.length===0?m(!1):m(n.every(i=>e.some(o=>o.value===i.value)))},count:(r,e)=>[{type:d.integer,value:e.length}],distinct:(r,e)=>{let t=[];for(let n of e)t.some(i=>i.value===n.value)||t.push(n);return t},isDistinct:(r,e)=>m(e.length===D.distinct(r,e).length),where:(r,e,t)=>e.filter(n=>F(t.eval(r,[n]))),select:(r,e,t)=>e.flatMap(n=>t.eval({parent:r,variables:{$this:n}},[n])),repeat:de,ofType:(r,e,t)=>e.filter(n=>n.type===t.name),single:(r,e)=>{if(e.length>1)throw new Error("Expected input length one for single()");return e.length===0?[]:e.slice(0,1)},first:(r,e)=>e.length===0?[]:e.slice(0,1),last:(r,e)=>e.length===0?[]:e.slice(-1,e.length),tail:(r,e)=>e.length===0?[]:e.slice(1,e.length),skip:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new TypeError("Expected a number for skip(num)");return n>=e.length?[]:n<=0?e:e.slice(n,e.length)},take:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new TypeError("Expected a number for take(num)");return n>=e.length?e:n<=0?[]:e.slice(0,n)},intersect:(r,e,t)=>{if(!t)return e;let n=t.eval(r,_e(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,_e(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,_e(r));return pt([...e,...n])},combine:(r,e,t)=>{if(!t)return e;let n=t.eval(r,_e(r));return[...e,...n]},htmlChecks:(r,e,t)=>[T(!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 F(o)?n.eval(r,e):i?i.eval(r,e):[]},toBoolean:(r,e)=>{if(e.length===0)return[];let[{value:t}]=te(e,1);if(typeof t=="boolean")return[{type:d.boolean,value:t}];if(typeof t=="number"&&(t===0||t===1))return m(!!t);if(typeof t=="string"){let n=t.toLowerCase();if(["true","t","yes","y","1","1.0"].includes(n))return m(!0);if(["false","f","no","n","0","0.0"].includes(n))return m(!1)}return[]},convertsToBoolean:(r,e)=>e.length===0?[]:m(D.toBoolean(r,e).length===1),toInteger:(r,e)=>{if(e.length===0)return[];let[{value:t}]=te(e,1);return typeof t=="number"?[{type:d.integer,value:t}]:typeof t=="string"&&/^[+-]?\d+$/.exec(t)?[{type:d.integer,value:Number.parseInt(t,10)}]:typeof t=="boolean"?[{type:d.integer,value:t?1:0}]:[]},convertsToInteger:(r,e)=>e.length===0?[]:m(D.toInteger(r,e).length===1),toDate:(r,e)=>{if(e.length===0)return[];let[{value:t}]=te(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:d.date,value:Je(t)}]:[]},convertsToDate:(r,e)=>e.length===0?[]:m(D.toDate(r,e).length===1),toDateTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=te(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:d.dateTime,value:Je(t)}]:[]},convertsToDateTime:(r,e)=>e.length===0?[]:m(D.toDateTime(r,e).length===1),toDecimal:(r,e)=>{if(e.length===0)return[];let[{value:t}]=te(e,1);return typeof t=="number"?[{type:d.decimal,value:t}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(t)?[{type:d.decimal,value:Number.parseFloat(t)}]:typeof t=="boolean"?[{type:d.decimal,value:t?1:0}]:[]},convertsToDecimal:(r,e)=>e.length===0?[]:m(D.toDecimal(r,e).length===1),toQuantity:(r,e)=>{if(e.length===0)return[];let[{value:t}]=te(e,1);return A(t)?[{type:d.Quantity,value:t}]:typeof t=="number"?[{type:d.Quantity,value:{value:t,unit:"1"}}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(t)?[{type:d.Quantity,value:{value:Number.parseFloat(t),unit:"1"}}]:typeof t=="boolean"?[{type:d.Quantity,value:{value:t?1:0,unit:"1"}}]:[]},convertsToQuantity:(r,e)=>e.length===0?[]:m(D.toQuantity(r,e).length===1),toString:(r,e)=>{if(e.length===0)return[];let[{value:t}]=te(e,1);return t==null?[]:A(t)?[{type:d.string,value:`${t.value} '${t.unit}'`}]:[{type:d.string,value:t.toString()}]},convertsToString:(r,e)=>e.length===0?[]:m(D.toString(r,e).length===1),toTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=te(e,1);if(typeof t=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(t);if(n)return[{type:d.time,value:Je("T"+n[1])}]}return[]},convertsToTime:(r,e)=>e.length===0?[]:m(D.toTime(r,e).length===1),indexOf:(r,e,t)=>$((n,i)=>n.indexOf(i),r,e,t),substring:(r,e,t,n)=>$((i,o,s)=>{let a=o,u=s?a+s:i.length;return a<0||a>=i.length?void 0:i.substring(a,u)},r,e,t,n),startsWith:(r,e,t)=>$((n,i)=>n.startsWith(i),r,e,t),endsWith:(r,e,t)=>$((n,i)=>n.endsWith(i),r,e,t),contains:(r,e,t)=>$((n,i)=>n.includes(i),r,e,t),upper:(r,e)=>$(t=>t.toUpperCase(),r,e),lower:(r,e)=>$(t=>t.toLowerCase(),r,e),replace:(r,e,t,n)=>$((i,o,s)=>i.replaceAll(o,s),r,e,t,n),matches:(r,e,t)=>$((n,i)=>!!new RegExp(i).exec(n),r,e,t),replaceMatches:(r,e,t,n)=>$((i,o,s)=>i.replaceAll(new RegExp(o,"g"),s.replaceAll(/\$\{(\w+)\}/g,"$<$1>")),r,e,t,n),length:(r,e)=>$(t=>t.length,r,e),toChars:(r,e)=>$(t=>t?t.split(""):void 0,r,e),encode:de,decode:de,escape:de,unescape:de,trim:de,split:de,join:(r,e,t)=>{let n=t?.eval(r,_e(r))[0]?.value??"";if(typeof n!="string")throw new TypeError("Separator must be a string.");return[{type:d.string,value:e.map(i=>i.value?.toString()??"").join(n)}]},abs:(r,e)=>ee(Math.abs,r,e),ceiling:(r,e)=>ee(Math.ceil,r,e),exp:(r,e)=>ee(Math.exp,r,e),floor:(r,e)=>ee(Math.floor,r,e),ln:(r,e)=>ee(Math.log,r,e),log:(r,e,t)=>ee((n,i)=>Math.log(n)/Math.log(i),r,e,t),power:(r,e,t)=>ee(Math.pow,r,e,t),round:(r,e,...t)=>ee((n,i=0)=>{if(typeof i!="number"||i<0)throw new Error("Invalid precision provided to round()");let o=Math.pow(10,i);return Math.round(n*o)/o},r,e,...t),sqrt:(r,e)=>ee(Math.sqrt,r,e),truncate:(r,e)=>ee(t=>Math.trunc(t),r,e),children:de,descendants:de,trace:(r,e,t)=>e,now:()=>[{type:d.dateTime,value:new Date().toISOString()}],timeOfDay:()=>[{type:d.time,value:new Date().toISOString().substring(11)}],today:()=>[{type:d.date,value:new Date().toISOString().substring(0,10)}],between:(r,e,t,n,i)=>{let o=D.toDateTime(r,t.eval(r,e));if(o.length===0)throw new Error("Invalid start date");let s=D.toDateTime(r,n.eval(r,e));if(s.length===0)throw new Error("Invalid end date");let a=i.eval(r,e)[0]?.value;if(a!=="years"&&a!=="months"&&a!=="days")throw new Error("Invalid units");let u=mt(o[0].value,s[0].value);return[{type:d.Quantity,value:{value:u[a],unit:a}}]},is:(r,e,t)=>{let n="";return t instanceof _?n=t.name:t instanceof z&&(n=t.left.name+"."+t.right.name),n?e.map(i=>({type:d.boolean,value:dt(i,n)})):[]},not:(r,e)=>D.toBoolean(r,e).map(t=>({type:d.boolean,value:!t.value})),resolve:(r,e)=>e.map(t=>{let n=t.value,i;if(typeof n=="string")i=n;else if(typeof n=="object"){let o=n;if(o.resource)return T(o.resource);o.reference?i=o.reference:o.type&&o.identifier&&(i=`${o.type}?identifier=${o.identifier.system}|${o.identifier.value}`)}if(i?.includes("?")){let[o]=i.split("?");return{type:o,value:{resourceType:o}}}if(i?.includes("/")){let[o,s]=i.split("/");return{type:o,value:{resourceType:o,id:s}}}return{type:d.BackboneElement,value:void 0}}).filter(t=>!!t.value),as:(r,e)=>e,type:(r,e)=>e.map(({value:t})=>typeof t=="boolean"?{type:d.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof t=="number"?{type:d.BackboneElement,value:{namespace:"System",name:"Integer"}}:O(t)?{type:d.BackboneElement,value:{namespace:"FHIR",name:t.resourceType}}:{type:d.BackboneElement,value:null}),conformsTo:(r,e,t)=>{let n=t.eval(r,e)[0].value;if(!n.startsWith("http://hl7.org/fhir/StructureDefinition/"))throw new Error("Expected a StructureDefinition URL");let i=n.replace("http://hl7.org/fhir/StructureDefinition/","");return e.map(o=>({type:d.boolean,value:o.value?.resourceType===i}))},getResourceKey:(r,e)=>{let t=e[0].value;return t?.id?[{type:d.id,value:t.id}]:[]},getReferenceKey:(r,e,t)=>{let n=e[0].value;if(!n?.reference)return[];let i="";return t instanceof _&&(i=t.name),i&&!n.reference.startsWith(i+"/")?[]:[{type:d.id,value:ve(n)}]},extension:(r,e,t)=>{let n=t.eval(r,e)[0].value,i=e?.[0]?.value;if(i){let o=ce(i,n);if(o)return[{type:d.Extension,value:o}]}return[]}};function $(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=te(t,1);if(typeof i!="string")throw new TypeError("String function cannot be called with non-string");let o=n.map(a=>a?.eval(e,t)[0]?.value),s=r(i,...o);return s===void 0?[]:Array.isArray(s)?s.map(T):[T(s)]}function ee(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=te(t,1),o=A(i),s=o?i.value:i;if(typeof s!="number")throw new TypeError("Math function cannot be called with non-number");let a=r(s,...n.map(p=>p.eval(e,t)[0]?.value)),u=o?d.Quantity:t[0].type,l=o?{...i,value:a}:a;return[{type:u,value:l}]}function te(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 _e(r){let e=r;for(;e.parent?.variables.$this;)e=e.parent;return[e.variables.$this]}var fe=class{constructor(e,t){c(this,"original");c(this,"child");this.original=e,this.child=t}eval(e,t){try{if(t.length>0){let n=[];for(let i of t)n.push(this.child.eval({parent:e,variables:{$this:i}},[i]));return n.flat()}else return this.child.eval(e,[])}catch(n){throw new Error(`FhirPathError on "${this.original}": ${n}`,{cause:n})}}toString(){return this.child.toString()}},U=class{constructor(e){c(this,"value");this.value=e}eval(){return[this.value]}toString(){let e=this.value.value;return typeof e=="string"?`'${e}'`:e.toString()}},_=class{constructor(e){c(this,"name");this.name=e}eval(e,t){if(this.name==="$this")return t;let n=this.getVariable(e);if(n)return[n];if(this.name.startsWith("%"))throw new Error(`Undefined variable ${this.name}`);return t.flatMap(i=>this.evalValue(i)).filter(i=>i?.value!==void 0)}getVariable(e){let t=e.variables[this.name];if(t!==void 0)return t;if(e.parent)return this.getVariable(e.parent)}evalValue(e){let t=e.value;if(!(!t||typeof t!="object"))return O(t,this.name)?e:ur(e,this.name)}toString(){return this.name}},xt=class{eval(){return[]}toString(){return"{}"}},vt=class extends it{constructor(t,n,i){super(t,n);c(this,"impl");this.impl=i}eval(t,n){return this.impl(this.child.eval(t,n))}toString(){return this.operator+this.child.toString()}},he=class extends se{constructor(e,t){super("as",e,t)}eval(e,t){return D.ofType(e,this.left.eval(e,t),this.right)}},P=class extends se{},M=class extends P{constructor(t,n,i,o){super(t,n,i);c(this,"impl");this.impl=o}eval(t,n){let i=this.left.eval(t,n);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,u=A(s)?s.value:s,l=A(a)?a.value:a,p=this.impl(u,l);return typeof p=="boolean"?m(p):A(s)?[{type:d.Quantity,value:{...s,value:p}}]:[T(p)]}},Tt=class extends se{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:d.string,value:o.map(s=>s.value).join("")}]:o}},St=class extends P{constructor(e,t){super("contains",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return m(n.some(o=>o.value===i[0].value))}},bt=class extends P{constructor(e,t){super("in",e,t)}eval(e,t){let n=Q(this.left.eval(e,t)),i=this.right.eval(e,t);return n?m(i.some(o=>$e(n,o)[0].value)):[]}},z=class extends se{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()}`}},Se=class extends se{constructor(e,t){super("|",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return pt([...n,...i])}},Et=class extends P{constructor(e,t){super("=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return En(n,i)}},Rt=class extends P{constructor(e,t){super("!=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Rn(n,i)}},Ct=class extends P{constructor(e,t){super("~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return fr(n,i)}},Pt=class extends P{constructor(e,t){super("!~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return bn(fr(n,i))}},be=class extends P{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 m(dt(n[0],i))}},wt=class extends P{constructor(e,t){super("and",e,t)}eval(e,t){let n=Q(this.left.eval(e,t),"boolean"),i=Q(this.right.eval(e,t),"boolean");return n?.value===!0&&i?.value===!0?m(!0):n?.value===!1||i?.value===!1?m(!1):[]}},At=class extends P{constructor(e,t){super("or",e,t)}eval(e,t){let n=Q(this.left.eval(e,t),"boolean"),i=Q(this.right.eval(e,t),"boolean");return n?.value===!1&&i?.value===!1?m(!1):n?.value||i?.value?m(!0):[]}},Ot=class extends P{constructor(e,t){super("xor",e,t)}eval(e,t){let n=Q(this.left.eval(e,t),"boolean"),i=Q(this.right.eval(e,t),"boolean");return!n||!i?[]:m(n.value!==i.value)}},It=class extends P{constructor(e,t){super("implies",e,t)}eval(e,t){let n=Q(this.left.eval(e,t),"boolean"),i=Q(this.right.eval(e,t),"boolean");return i?.value===!0||n?.value===!1?m(!0):!n||!i?[]:m(!1)}},re=class{constructor(e,t){c(this,"name");c(this,"args");this.name=e,this.args=t}eval(e,t){let n=D[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(", ")})`}},Ee=class{constructor(e,t){c(this,"left");c(this,"expr");this.left=e,this.expr=t}eval(e,t){let n=this.expr.eval(e,t);if(n.length!==1)return[];let i=n[0].value;if(typeof i!="number")throw new Error("Invalid indexer expression: should return integer}");let o=this.left.eval(e,t);return i in o?[o[i]]:[]}toString(){return`${this.left.toString()}[${this.expr.toString()}]`}};var Cc=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],Pc={"'":"'",'"':'"',"`":"`",r:"\r",n:`
|
|
2
2
|
`,t:" ",f:"\f","\\":"\\"},me=class{constructor(e,t,n,i){c(this,"str");c(this,"keywords");c(this,"operators");c(this,"dateTimeLiterals");c(this,"symbolRegex");c(this,"result",[]);c(this,"pos",{index:0,line:1,column:0});c(this,"markStack",[]);this.str=e,this.keywords=t,this.operators=n,this.dateTimeLiterals=!!i?.dateTimeLiterals,this.symbolRegex=i?.symbolRegex??/[$\w%]/}tokenize(){for(;this.pos.index<this.str.length;){let e=this.consumeToken();e&&this.result.push(e)}return this.result}prevToken(){return this.result.slice(-1)[0]}peekToken(){this.mark();let e=this.consumeToken();return this.reset(),e}consumeToken(){this.consumeWhitespace();let e=this.curr();if(!e)return;this.mark();let t=this.peek();return e==="/"&&t==="*"?this.consumeMultiLineComment():e==="/"&&t==="/"?this.consumeSingleLineComment():e==="'"||e==='"'||e==="`"?this.consumeString(e):e==="@"?this.consumeDateTime():/\d/.exec(e)?this.consumeNumber():/\w/.exec(e)?this.consumeSymbol():(e==="$"||e==="%")&&/\w/.exec(t)?this.consumeSymbol():(e==="$"||e==="%")&&(t==="'"||t==='"'||t==="`")?this.consumeQuotedSymbol(t):this.consumeOperator()}consumeWhitespace(){this.consumeWhile(()=>/\s/.exec(this.curr()))}consumeMultiLineComment(){let e=this.pos.index;return this.consumeWhile(()=>this.curr()!=="*"||this.peek()!=="/"),this.advance(),this.advance(),this.buildToken("Comment",this.str.substring(e,this.pos.index))}consumeSingleLineComment(){return this.buildToken("Comment",this.consumeWhile(()=>this.curr()!==`
|
|
3
|
-
`))}consumeString(e){this.advance();let t="",n;for(;n=this.consumeChar(e);)t+=n;let i=this.buildToken(e==="`"?"Symbol":"String",t);return this.advance(),i}consumeChar(e){let t=this.curr();if(t==="\\"){this.advance();let n=this.curr(),i=
|
|
4
|
-
`?(this.pos.line++,this.pos.column=0):this.pos.column++}buildToken(e,t){let n=this.markStack.pop();if(!n)throw new Error("No mark for token");return{id:e,value:t,...n}}};function Pc(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&Rc.includes(r.value)))}var kt=["true","false"],Vt=["!=","!~","<=",">=","{}","->"];function go(r){return new me(r,kt,Vt).tokenize()}var x={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},wc={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},Ac={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new Ee(e,t)},precedence:x.Indexer},Oc={parse(r,e){if(!(e instanceof _))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new re(e.name,t)},precedence:x.FunctionCall};function Ic(r){let e=r.split(" "),t=Number.parseFloat(e[0]),n=e[1];return n?.startsWith("'")&&n.endsWith("'")?n=n.substring(1,n.length-1):n="{"+n+"}",{value:t,unit:n}}function Ke(){return new ot().registerPrefix("String",{parse:(r,e)=>new U({type:d.string,value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new U({type:d.dateTime,value:Je(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new U({type:d.Quantity,value:Ic(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new U({type:e.value.includes(".")?d.decimal:d.integer,value:Number.parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new U({type:d.boolean,value:!0})}).registerPrefix("false",{parse:()=>new U({type:d.boolean,value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new _(e.value)}).registerPrefix("{}",{parse:()=>new xt}).registerPrefix("(",wc).registerInfix("[",Ac).registerInfix("(",Oc).prefix("+",x.UnaryAdd,(r,e)=>new vt("+",e,t=>t)).prefix("-",x.UnarySubtract,(r,e)=>new M("-",e,e,(t,n)=>-n)).infixLeft(".",x.Dot,(r,e,t)=>new z(r,t)).infixLeft("/",x.Divide,(r,e,t)=>new M("/",r,t,(n,i)=>n/i)).infixLeft("*",x.Multiply,(r,e,t)=>new M("*",r,t,(n,i)=>n*i)).infixLeft("+",x.Add,(r,e,t)=>new M("+",r,t,(n,i)=>n+i)).infixLeft("-",x.Subtract,(r,e,t)=>new M("-",r,t,(n,i)=>n-i)).infixLeft("|",x.Union,(r,e,t)=>new Se(r,t)).infixLeft("=",x.Equals,(r,e,t)=>new Et(r,t)).infixLeft("!=",x.NotEquals,(r,e,t)=>new Rt(r,t)).infixLeft("~",x.Equivalent,(r,e,t)=>new Ct(r,t)).infixLeft("!~",x.NotEquivalent,(r,e,t)=>new Pt(r,t)).infixLeft("<",x.LessThan,(r,e,t)=>new M("<",r,t,(n,i)=>n<i)).infixLeft("<=",x.LessThanOrEquals,(r,e,t)=>new M("<=",r,t,(n,i)=>n<=i)).infixLeft(">",x.GreaterThan,(r,e,t)=>new M(">",r,t,(n,i)=>n>i)).infixLeft(">=",x.GreaterThanOrEquals,(r,e,t)=>new M(">=",r,t,(n,i)=>n>=i)).infixLeft("&",x.Ampersand,(r,e,t)=>new Tt(r,t)).infixLeft("and",x.And,(r,e,t)=>new wt(r,t)).infixLeft("as",x.As,(r,e,t)=>new he(r,t)).infixLeft("contains",x.Contains,(r,e,t)=>new St(r,t)).infixLeft("div",x.Divide,(r,e,t)=>new M("div",r,t,(n,i)=>Math.trunc(n/i))).infixLeft("in",x.In,(r,e,t)=>new bt(r,t)).infixLeft("is",x.Is,(r,e,t)=>new be(r,t)).infixLeft("mod",x.Modulo,(r,e,t)=>new M("mod",r,t,(n,i)=>n%i)).infixLeft("or",x.Or,(r,e,t)=>new At(r,t)).infixLeft("xor",x.Xor,(r,e,t)=>new Ot(r,t)).infixLeft("implies",x.Implies,(r,e,t)=>new It(r,t))}var kc=Ke();function Dt(r){return new fe(r,kc.construct(go(r)).consumeAndParse())}function Vc(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]=T(t[n]))}return C(r,t).map(n=>n.value)}function C(r,e,t={},n=void 0){let i;if(typeof r=="string"){let o=n?.get(r);i=o??Dt(r),n&&!o&&n.set(r,i)}else i=r;return i.eval({variables:t},e).map(o=>{let s={type:o.type,value:o.value?.valueOf()};return"path"in o&&(s.path=o.path),s})}function Dc(r){let e=[];for(let t of r)t.type===d.Range?e.push([t.value?.low?.value,t.value?.high?.value]):typeof t.value=="number"&&e.push([t.value,t.value]);return e}function Wn(r){let e=[];for(let t of r){let n=ft(t.value);n&&e.push(n)}return e}function qn(r){let e=new Set;for(let t of r){let n=Nn(t);n&&e.add(n)}return Array.from(e)}function jn(r){let e=new Set;for(let t of r){let{value:n}=t;n&&(De(n)?e.add(n):q(n)?e.add(n.reference):Ge(n)?e.add(V(n)):typeof n.identifier=="object"&&e.add(`identifier:${n.identifier.system}|${n.identifier.value}`))}return Array.from(e)}function Mc(r){let e=[];for(let t of r){let{value:n}=t;typeof n=="number"?e.push({value:n}):A(n)&&e.push(n)}return e}function _c(r){let e=new Set;for(let t of r)De(t.value)&&e.add(t.value);return Array.from(e)}function $n(r,e={}){let t=[];for(let n of r)Lc(e,t,n);return t}function Lc(r,e,t){let{type:n,value:i}=t;switch(n){case d.Identifier:Fc(e,r,i);break;case d.CodeableConcept:Nc(e,r,i);break;case d.Coding:xo(e,r,i);break;case d.ContactPoint:Uc(e,r,i);break;default:Le(e,r,void 0,i?.toString())}}function Fc(r,e,t){t?.type?.text&&Le(r,e,e.textSearchSystem,t.type.text),Le(r,e,t?.system,t?.value)}function Nc(r,e,t){if(t?.text&&Le(r,e,e.textSearchSystem,t.text),t?.coding)for(let n of t.coding)xo(r,e,n)}function xo(r,e,t){t&&(t.display&&Le(r,e,e.textSearchSystem,t.display),Le(r,e,t.system,t.code))}function Uc(r,e,t){t&&Le(r,e,t.system,t.value?.toLocaleLowerCase())}function Le(r,e,t,n){(t||n)&&!r.some(i=>i.system===t&&i.value===n)&&r.push({system:t,value:n&&e.caseInsensitive?n.toLocaleLowerCase():n})}var Bc=20,Wc=1e3,h={EQUALS:"eq",NOT_EQUALS:"ne",GREATER_THAN:"gt",LESS_THAN:"lt",GREATER_THAN_OR_EQUALS:"ge",LESS_THAN_OR_EQUALS:"le",STARTS_AFTER:"sa",ENDS_BEFORE:"eb",APPROXIMATELY:"ap",CONTAINS:"contains",STARTS_WITH:"sw",EXACT:"exact",TEXT:"text",NOT:"not",ABOVE:"above",BELOW:"below",IN:"in",NOT_IN:"not-in",OF_TYPE:"of-type",MISSING:"missing",PRESENT:"present",IDENTIFIER:"identifier",ITERATE:"iterate"},Hn={contains:h.CONTAINS,exact:h.EXACT,above:h.ABOVE,below:h.BELOW,text:h.TEXT,not:h.NOT,in:h.IN,"not-in":h.NOT_IN,"of-type":h.OF_TYPE,missing:h.MISSING,identifier:h.IDENTIFIER,iterate:h.ITERATE},Gn={eq:h.EQUALS,ne:h.NOT_EQUALS,lt:h.LESS_THAN,le:h.LESS_THAN_OR_EQUALS,gt:h.GREATER_THAN,ge:h.GREATER_THAN_OR_EQUALS,sa:h.STARTS_AFTER,eb:h.ENDS_BEFORE,ap:h.APPROXIMATELY,sw:h.STARTS_WITH};function Xe(r,e){if(!r)throw new Error("Invalid search URL");let t="",n;if(typeof r=="string")if(r.includes("?")){let[s,a]=r.split("?");t=s,n=new URLSearchParams(a)}else t=r;else typeof r=="object"&&(t=r.pathname,n=r.searchParams);let i;t.includes("/")?i=t.split("/").filter(Boolean).pop():i=t;let o=[];if(n&&o.push(...n.entries()),e)for(let[s,a]of Object.entries(e))if(Array.isArray(a))for(let u of a)o.push([s,u]);else o.push([s,a??""]);return qc(i,o)}function qc(r,e){let t={resourceType:r};for(let[n,i]of e)jc(t,n,i);return t}function jc(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=G(r.filters,{code:e,operator:h.EQUALS,value:t});return}switch(n){case"_sort":$c(r,t);break;case"_cursor":r.cursor=t;break;case"_count":r.count=Number.parseInt(t,10);break;case"_offset":r.offset=Number.parseInt(t,10);break;case"_total":r.total=t;break;case"_summary":t==="count"?(r.total="accurate",r.count=0):(t==="true"||t==="data"||t==="text")&&(r.summary=t);break;case"_include":{let s=vo(t);i==="iterate"&&(s.modifier=h.ITERATE),r.include=G(r.include,s);break}case"_revinclude":{let s=vo(t);i==="iterate"&&(s.modifier=h.ITERATE),r.revInclude=G(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=G(r.filters,bo(s,i,t)):r.filters=G(r.filters,Gc(n,i,t))}}}}function $c(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 Hc=[h.MISSING,h.PRESENT];function bo(r,e,t){if(Hc.includes(e))return{code:r.code,operator:e,value:t};switch(r.type){case"number":case"date":case"quantity":{let{operator:n,value:i}=Qc(t,e||h.EQUALS);if(!To(r,i))throw new f(b(`Invalid format for ${r.type} search parameter: ${i}`));return{code:r.code,operator:n,value:i}}case"reference":case"string":case"token":case"uri":if(!To(r,t))throw new f(b(`Invalid format for ${r.type} search parameter: ${t}`));return{code:r.code,operator:zc(e),value:t};default:throw new Error("Unrecognized search parameter type: "+r.type)}}function Gc(r,e,t){let n=h.EQUALS;if(e)n=e;else if(t.length>=2){let i=t.substring(0,2);i in Gn&&(t.length===2||t.at(2)?.match(/\d/))&&(n=i,t=t.substring(i.length))}return{code:r,operator:n,value:t}}function Qc(r,e){let t=r.substring(0,2),n=Gn[t];return n?{operator:n,value:r.substring(2)}:{operator:e,value:r}}function zc(r){return Hn[r]??h.EQUALS}function vo(r){let e=r.split(":");if(e.includes("*"))throw new f(b("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new f(b(`Invalid include value '${r}': must be of the form ResourceType:search-parameter`));if(e.length===2)return{resourceType:e[0],searchParam:e[1]};if(e.length===3)return{resourceType:e[0],searchParam:e[1],targetType:e[2]};throw new f(b(`Invalid include value '${r}'`))}function To(r,e){switch(r.type){case"date":return Ve(e);default:return!0}}var Jc=/{{([^{}]+)}}/g;function Kc(r,e){return r=r.replaceAll(Jc,(t,n)=>{let i=C(n,[],e);return i.length!==1?"":Bn(i[0])}),Xe(r)}function Xc(r){let e=[];return r.fields&&e.push("_fields="+r.fields.join(",")),r.filters&&r.filters.forEach(t=>e.push(Yc(t))),r.sortRules&&r.sortRules.length>0&&e.push(Zc(r.sortRules)),r.cursor!==void 0&&e.push("_cursor="+encodeURIComponent(r.cursor)),r.offset!==void 0&&r.offset!==0&&e.push("_offset="+r.offset),r.count!==void 0&&e.push("_count="+r.count),r.total!==void 0&&e.push("_total="+r.total),r.types&&r.types.length>0&&e.push("_type="+r.types.join(",")),r.include&&r.include.forEach(t=>e.push(So("_include",t))),r.revInclude&&r.revInclude.forEach(t=>e.push(So("_revinclude",t))),e.length===0?"":(gt(e),"?"+e.join("&"))}function Yc(r){let e=r.operator in Hn?":"+r.operator:"",t=r.operator!==h.EQUALS&&r.operator in Gn?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function Zc(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function So(r,e){return r+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function Ye(r){let e=[],t="",n=!1;for(let i of r)n?(t+=i,n=!1):i==="\\"?n=!0:i===","?(e.push(t),t=""):t+=i;return e.push(t),e}function eu(r,e){return b(`Invalid modifier :${r} for ${e}`)}function tu(r,e){return r in Hn?eu(r,e):b(`Invalid operator ${r} for ${e}`)}function Mt(r,e){if(e.resourceType!==r.resourceType)return!1;if(e.filters){for(let t of e.filters)if(!ru(r,e,t))return!1}return!0}function ru(r,e,t){let n=N.types[e.resourceType]?.searchParams?.[t.code];if(!n)return!1;let i=C(n.expression,[T(r)]);if(t.operator===h.MISSING||t.operator===h.PRESENT)return nu(i,t);switch(n.type){case"reference":return iu(i,t);case"string":case"uri":return au(i,t);case"token":return ou(i,t);case"date":return uu(i,t);default:return!1}}function nu(r,e){let t=r.length>0;return(e.operator===h.MISSING&&e.value==="false"||e.operator===h.PRESENT&&e.value==="true")===t}function iu(r,e){let t=Rr(e.operator);if(e.value===""&&r.length===0)return e.operator===h.EQUALS;let n=jn(r);for(let i of Ye(e.value)){let o=n.includes(i);if(!o&&e.code==="_compartment"&&(o=n.some(s=>s?.endsWith("/"+i))),o)return!t}return t}function ou(r,e){let t=$n(r),n=Ye(e.value),i=Rr(e.operator);for(let o of t)for(let s of n)if(su(o,s))return!i;return i}function su(r,e){if(e.includes("|")){let[t,n]=e.split("|").map(i=>i.toLowerCase());return!t&&!n?!1:t?r.system?.toLowerCase()===t&&(!n||r.value?.toLowerCase()===n):!r.system&&r.value?.toLowerCase()===n}return r.value?.toLowerCase()===e.toLowerCase()}function au(r,e){let t=qn(r),n=Ye(e.value),i=Rr(e.operator);for(let o of t)for(let s of n)if(cu(o,s))return!i;return i}function cu(r,e){return r.toLowerCase().includes(e.toLowerCase())}function uu(r,e){let t=Wn(r),n=Ye(e.value),i=Rr(e.operator);for(let o of t)for(let s of n)if(lu(o,e.operator,s))return!i;return i}function lu(r,e,t){if(!r)return!1;let n=ft(t);if(!n)return!1;let i=r.start??"0000",o=r.end??"9999",s=n.start,a=n.end;switch(e){case h.APPROXIMATELY:case h.EQUALS:case h.NOT_EQUALS:return i<a&&o>s;case h.LESS_THAN:return i<s;case h.GREATER_THAN:return o>a;case h.LESS_THAN_OR_EQUALS:return i<=a;case h.GREATER_THAN_OR_EQUALS:return o>=s;case h.STARTS_AFTER:return i>a;case h.ENDS_BEFORE:return o<s;default:return!1}}function Rr(r){return r===h.NOT_EQUALS||r===h.NOT}var pu={resourceType:"*"},Eo=["DomainConfiguration","JsonWebKey","Login"],Ro=["UserSecurityRequest","Project","ProjectMembership","User"],Re={READ:"read",VREAD:"vread",UPDATE:"update",DELETE:"delete",HISTORY:"history",CREATE:"create",SEARCH:"search"},Co=[Re.READ,Re.VREAD,Re.HISTORY,Re.SEARCH];function du(r,e){return Qn(r,Re.SEARCH,e)}function fu(r,e){return Eo.includes(e)?!1:Qn(r,Re.UPDATE,e)}function Qn(r,e,t){return!!r.resource?.some(n=>wo(n,t,e))}function hu(r,e){return!!Po(e,Re.UPDATE,r)}function Po(r,e,t){return t?t.resource?.find(n=>mu(r,e,n)):pu}function mu(r,e,t){let n=r.resourceType;return wo(t,n,e)?n==="Binary"?!0:!(t.compartment&&!r.meta?.compartment?.some(i=>i.reference===t.compartment?.reference)||t.criteria&&!Mt(r,Xe(t.criteria))):!1}function wo(r,e,t){return r.resourceType!==e&&(r.resourceType!=="*"||Ro.includes(e))?!1:r.interaction?r.interaction.includes(t):!r.readonly||Co.includes(t)}function B(){return typeof window<"u"}function yu(){return typeof Buffer<"u"}function gu(){return typeof window<"u"?window:void 0}function Cr(){return typeof Buffer<"u"?Buffer:void 0}var ne={assign(r){B()&&globalThis.location.assign(r)},reload(){B()&&globalThis.location.reload()},getSearch(){return B()?globalThis.location.search:""},getPathname(){return B()?globalThis.location.pathname:""},getLocation(){return B()?globalThis.location.toString():""},getOrigin(){return B()?globalThis.location.protocol+"//"+globalThis.location.host+"/":""}};function Ao(r){if(B()){let t=window.atob(r),n=Uint8Array.from(t,i=>i.charCodeAt(0));return new window.TextDecoder().decode(n)}let e=Cr();if(e)return e.from(r,"base64").toString("utf-8");throw new Error("Unable to decode base64")}function _t(r){if(B()){let t=new window.TextEncoder().encode(r),n=String.fromCharCode.apply(null,t);return window.btoa(n)}let e=Cr();if(e)return e.from(r,"utf8").toString("base64");throw new Error("Unable to encode base64")}function xu(r){return _t(r).replaceAll("+","-").replaceAll("/","_").replace(/[=]{1,2}$/,"")}function zn(r){r=r.padEnd(r.length+(4-r.length%4)%4,"=");let e=r.replaceAll("-","+").replaceAll("_","/");return Ao(e)}function Pr(){let r=new Uint32Array(28);return crypto.getRandomValues(r),kn(r.buffer)}async function Jn(r){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(r))}function ie(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replaceAll(/[xy]/g,r=>{let e=Math.trunc(Math.random()*16);return(r==="x"?e:e&3|8).toString(16)})}function Oo(r){let e={};r=Te(r);for(let i of r.entry||[]){let o=i.resource;if(!o)continue;o.meta!==void 0&&(delete o.meta.author,delete o.meta.compartment,delete o.meta.lastUpdated,delete o.meta.project,delete o.meta.versionId,Object.keys(o.meta).length===0&&delete o.meta);let s=o?.id;s&&(e[s]=ie(),i.fullUrl="urn:uuid:"+e[s],delete i.resource?.id)}let t=r.entry,n=JSON.stringify({resourceType:"Bundle",type:"transaction",entry:t?.map(i=>({fullUrl:i.fullUrl,request:{method:"POST",url:i.resource?.resourceType},resource:i.resource}))},(i,o)=>vu(i,o,e),2);return Io(JSON.parse(n))}function vu(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 Io(r){let e=Su(r),{sorted:t,cycles:n}=Tu(e),i={},o=[];for(let a of r.entry??[])a.fullUrl?i[a.fullUrl]=a:o.push(a);let s=t.map(a=>i[a]);for(let a of n)for(let u of a){let l=i[u],p={...l,request:{...l.request,method:"PUT"}};s.push(p)}return s.push(...o),{...r,entry:s}}var Ze={NotVisited:"NotVisited",Visiting:"Visiting",Visited:"Visited"};function Tu(r){let e=[],t={},n=[];for(let o of Object.keys(r))t[o]=Ze.NotVisited;function i(o,s){if(t[o]===Ze.Visited)return!0;if(t[o]===Ze.Visiting){let u=s.lastIndexOf(o);return u!==-1&&n.push(s.slice(u)),!0}t[o]=Ze.Visiting,s.push(o);let a=!1;for(let u of r[o])i(u,s)||(a=!0);return t[o]=Ze.Visited,s.pop(),e.unshift(o),!a}for(let o in r)t[o]===Ze.NotVisited&&i(o,[]);return{sorted:e,cycles:n}}function ko(r,e){for(let t in r)if(r[t]&&typeof r[t]=="object"){let n=r[t];if(q(n)){let i=n.reference;i.startsWith("urn:uuid:")&&e(i)}else ko(n,e)}}function Su(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&&ko(t.resource,i=>{e[i]&&e[i].push(n)})}return e}function bu(r){r=Te(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=ie());return Oo(e)}function Eu(r,e,t){return r.entry?.find(({resource:n})=>n?.resourceType===e&&n?.id===t)?.resource}async function Ru(r,e,t,n){return{hook:t.hook,hookInstance:ie(),context:n,prefetch:await Cu(r,e,t,n)}}async function Cu(r,e,t,n){if(!t.prefetch)return{};let i={};for(let[o,s]of Object.entries(t.prefetch)){let a=await Pu(r,e,n,s);i[o]=a??null}return i}function Pu(r,e,t,n){if(n=Au(e,t,n),n.includes("{{"))return Promise.resolve(null);let i=/^(\w+)\/([0-9a-zA-Z-_]+)$/.exec(n);if(i){let[a,u]=i.slice(1);return r.readResource(a,u)}let[o,s]=Qe(n,"?",2);return r.search(o,s)}var wu=new Set(["userPractitionerId","userPractitionerRoleId","userPatientId","userRelatedPersonId"]);function Au(r,e,t){return t.replaceAll(/\{\{([^}]+)\}\}/g,(n,i)=>{if(i=i.trim(),wu.has(i))return r.id;if(i.startsWith("context.")){let o=i.substring(8),s=e[o];if(De(s))return s}return n})}var w={CSS:"text/css",DICOM:"application/dicom",FAVICON:"image/vnd.microsoft.icon",FHIR_JSON:"application/fhir+json",FORM_URL_ENCODED:"application/x-www-form-urlencoded",HL7_V2:"x-application/hl7-v2+er7",HTML:"text/html",JAVASCRIPT:"text/javascript",JSON:"application/json",JSON_PATCH:"application/json-patch+json",JWT:"application/jwt",MULTIPART_FORM_DATA:"multipart/form-data",PNG:"image/png",SCIM_JSON:"application/scim+json",SVG:"image/svg+xml",TEXT:"text/plain",TYPESCRIPT:"text/typescript",PING:"x-application/ping",XML:"text/xml",CDA_XML:"application/cda+xml",OCTET_STREAM:"application/octet-stream"};var wr=class{constructor(){c(this,"listeners");this.listeners={}}addEventListener(e,t){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)}removeEventListener(e,t){let n=this.listeners[e];if(n){for(let i=0;i<n.length;i++)if(n[i]===t){n.splice(i,1);return}}}dispatchEvent(e){let t=this.listeners[e.type];if(t)for(let n of t)n.call(this,e);return!e.defaultPrevented}removeAllListeners(){this.listeners={}}listenerCount(e){return this.listeners[e]?.length??0}},J=class{constructor(){c(this,"emitter",new wr)}dispatchEvent(e){this.emitter.dispatchEvent(e)}addEventListener(e,t){this.emitter.addEventListener(e,t)}removeEventListener(e,t){this.emitter.removeEventListener(e,t)}removeAllListeners(){this.emitter.removeAllListeners()}listenerCount(e){return this.emitter.listenerCount(e)}};var Ar={"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"},Vo=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],Or=["DiagnosticReport-update"];function Kn(r){return Or.includes(r)}function Xn(r){if(Or.includes(r))throw new f(g(`'context.version' is required for '${r}'.`))}var Do={"Patient-open":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"Patient-close":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"ImagingStudy-open":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"ImagingStudy-close":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"Encounter-open":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"Encounter-close":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"DiagnosticReport-open":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-close":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-select":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},select:{resourceType:"*",reference:!0,manyAllowed:!0}},"DiagnosticReport-update":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},updates:{resourceType:"Bundle"}},syncerror:{operationoutcome:{resourceType:"OperationOutcome"}}};function Mo(r){return Vo.includes(r)}function Yn(r){return!!r.endpoint}function Ir(r){if(!Ft(r))throw new f(g("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 Yn(r)&&(o.endpoint=r.endpoint),new URLSearchParams(o).toString()}function Ft(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(!Ar[o])return!1;return!(Yn(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function Ou(r,e,t,n){if(typeof e!="object")throw new f(g(`context[${t}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.id&&typeof e.id=="string"))throw new f(g(`context[${t}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new f(g(`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 f(g(`context[${t}] is invalid. Resource must contain a valid FHIRcast resource type. Resource type is not a known resource type.`));if(i&&e.resourceType!==i)throw new f(g(`context[${t}] is invalid. context[${t}] for the '${r}' event should contain resource of type ${i}.`))}}function Iu(r,e,t,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),n.reference){if(!q(e.reference))throw new f(g(`context[${t}] is invalid. Expected key '${e.key}' to be a reference.`))}else Ou(r,e.resource,t,n)}function ku(r,e){let t=new Map,n=Do[r];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new f(g(`Key '${o}' not found for event '${r}'. Make sure to add only valid keys.`));Iu(r,e[i],i,n[o],t)}for(let[i,o]of Object.entries(n)){if(!(o.optional||t.has(i)))throw new f(g(`Missing required key '${i}' on context for '${r}' event.`));if(!o.manyAllowed&&(t.get(i)??0)>1)throw new f(g(`${t.get(i)} context entries with key '${i}' found for the '${r}' event when schema only allows for 1.`))}}function kr(r,e,t,n){if(!(r&&typeof r=="string"))throw new f(g("Must provide a topic."));if(!Ar[e])throw new f(g(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(Ar).join(", ")}`));if(typeof t!="object")throw new f(g("context must be a context object or array of context objects."));if(Or.includes(e)&&!n)throw new f(g(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(t)?t:[t];return ku(e,i),{timestamp:new Date().toISOString(),id:ie(),event:{"hub.topic":r,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var Lt=class extends J{constructor(t){super();c(this,"subRequest");c(this,"websocket");if(this.subRequest=t,!t.endpoint)throw new f(g("Subscription request should contain an endpoint."));if(!Ft(t))throw new f(g("Subscription request failed validation."));let n=new WebSocket(t.endpoint);n.addEventListener("open",()=>{this.dispatchEvent({type:"connect"}),n.addEventListener("message",i=>{let o=JSON.parse(i.data);if(o["hub.topic"])return;let s=o;s.event["hub.event"]!=="heartbeat"&&(this.dispatchEvent({type:"message",payload:s}),n.send(JSON.stringify({id:o?.id,timestamp:new Date().toISOString()})))}),n.addEventListener("close",()=>{this.dispatchEvent({type:"disconnect"})})}),this.websocket=n}disconnect(){this.websocket.close()}};function Vu(r){return JSON.parse(zn(r))}function Zn(r){return r.split(".").length===3}function Nt(r){let[e,t,n]=r.split(".");return Vu(t)}function ei(r){try{return typeof Nt(r).login_id=="string"}catch{return!1}}function ti(r){try{let t=Nt(r).exp;return typeof t=="number"?t*1e3:void 0}catch{return}}var Ut=class{constructor(e){c(this,"medplum");this.medplum=e}async get(e){return this.medplum.get(`keyvalue/v1/${e}`)}async set(e,t){await this.medplum.put(`keyvalue/v1/${e}`,t,w.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var _o;_o=Symbol.toStringTag;var L=class{constructor(e){c(this,_o,"ReadablePromise");c(this,"suspender");c(this,"status","pending");c(this,"response");c(this,"error");this.suspender=e.then(t=>(this.status="success",this.response=t,t),t=>{throw this.status="error",this.error=t,t})}isPending(){return this.status==="pending"}isOk(){return this.status==="success"}read(){switch(this.status){case"pending":throw this.suspender;case"error":throw this.error;default:return this.response}}then(e,t){return this.suspender.then(e,t)}catch(e){return this.suspender.catch(e)}finally(e){return this.suspender.finally(e)}};var et=class{constructor(e,t=""){c(this,"storage");c(this,"prefix","");this.storage=e??globalThis.localStorage??new Vr,this.prefix=t}makeKey(e){return this.prefix+e}clear(){this.storage===globalThis.localStorage&&this.prefix?Object.keys(this.storage).filter(e=>e.startsWith(this.prefix)).forEach(e=>{this.storage.removeItem(e)}):this.storage.clear()}getString(e){return this.storage.getItem(this.makeKey(e))??void 0}setString(e,t){t?this.storage.setItem(this.makeKey(e),t):this.storage.removeItem(this.makeKey(e))}getObject(e){let t=this.getString(e);return t?JSON.parse(t):void 0}setObject(e,t){this.setString(e,t?yt(t):void 0)}},Vr=class{constructor(){c(this,"data");this.data=new Map}get length(){return this.data.size}clear(){this.data.clear()}getItem(e){return this.data.get(e)??null}setItem(e,t){t?this.data.set(e,t):this.data.delete(e)}removeItem(e){this.data.delete(e)}key(e){return Array.from(this.data.keys())[e]}},ri=class extends et{constructor(){super();c(this,"initialized");c(this,"initPromise");c(this,"initResolve",()=>{});this.initialized=!1,this.initPromise=new Promise(t=>{this.initResolve=t})}setInitialized(){this.initialized||(this.initResolve(),this.initialized=!0)}getInitPromise(){return this.initPromise}get isInitialized(){return this.initialized}};var tt={Event:typeof globalThis.Event<"u"?globalThis.Event:void 0,ErrorEvent:void 0,CloseEvent:void 0},Lo=!1;function Du(){if(typeof globalThis.Event>"u")throw new Error("Unable to lazy init events for ReconnectingWebSocket. globalThis.Event is not defined yet");tt.Event=globalThis.Event,tt.ErrorEvent=class extends Event{constructor(t,n){super("error",n);c(this,"message");c(this,"error");this.message=t.message,this.error=t}},tt.CloseEvent=class extends Event{constructor(t=1e3,n="",i){super("close",i);c(this,"code");c(this,"reason");c(this,"wasClean",!0);this.code=t,this.reason=n}}}function No(r,e){if(!r)throw new Error(e)}function Dr(r){return new r.constructor(r.type,r)}var Fe={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},Fo=!1,Bt=class r extends J{constructor(t,n,i={}){Lo||(Du(),Lo=!0);super();c(this,"_ws");c(this,"_retryCount",-1);c(this,"_uptimeTimeout");c(this,"_connectTimeout");c(this,"_shouldReconnect",!0);c(this,"_connectLock",!1);c(this,"_binaryType");c(this,"_closeCalled",!1);c(this,"_messageQueue",[]);c(this,"_debugLogger",console.log.bind(console));c(this,"_url");c(this,"_protocols");c(this,"_options");c(this,"onclose",null);c(this,"onerror",null);c(this,"onmessage",null);c(this,"onopen",null);c(this,"_handleOpen",t=>{this._debug("open event");let{minUptime:n=Fe.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),n),No(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(Dr(t))});c(this,"_handleMessage",t=>{this._debug("message event"),this.onmessage&&this.onmessage(t),this.dispatchEvent(Dr(t))});c(this,"_handleError",t=>{this._debug("error event",t.message),this._disconnect(void 0,t.message==="TIMEOUT"?"timeout":void 0),this.onerror&&this.onerror(t),this._debug("exec error listeners"),this.dispatchEvent(Dr(t)),this._connect()});c(this,"_handleClose",t=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(t),this.dispatchEvent(Dr(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=Fe.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=Fe.reconnectionDelayGrowFactor,minReconnectionDelay:n=Fe.minReconnectionDelay,maxReconnectionDelay:i=Fe.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=Fe.maxRetries,connectionTimeout:n=Fe.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"&&!Fo&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),Fo=!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 tt.ErrorEvent(Error(i.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new tt.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(t=1e3,n){if(this._clearTimeouts(),!!this._ws){this._removeListeners();try{this._ws.close(t,n),this._handleClose(new tt.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 Mu=5e3,rt=class extends J{constructor(...t){super();c(this,"criteria");this.criteria=new Set(t)}getCriteria(){return this.criteria}_addCriteria(t){this.criteria.add(t)}_removeCriteria(t){this.criteria.delete(t)}},ni=class{constructor(e,t){c(this,"criteria");c(this,"emitter");c(this,"refCount");c(this,"subscriptionProps");c(this,"subscriptionId");c(this,"token");c(this,"connecting",!1);this.criteria=e,this.emitter=new rt(e),this.refCount=1,this.subscriptionProps=t?{...t}:void 0}clearAttachedSubscription(){this.subscriptionId=void 0,this.token=void 0}},Wt=class{constructor(e,t,n){c(this,"medplum");c(this,"ws");c(this,"masterSubEmitter");c(this,"criteriaEntries");c(this,"criteriaEntriesBySubscriptionId");c(this,"wsClosed");c(this,"pingTimer");c(this,"pingIntervalMs");c(this,"waitingForPong",!1);c(this,"currentProfile");if(!(e instanceof qt))throw new f(g("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(t).toString()}catch{throw new f(g("Not a valid URL"))}let o=n?.ReconnectingWebSocket?new n.ReconnectingWebSocket(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger}):new Bt(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger});this.medplum=e,this.ws=o,this.masterSubEmitter=new rt,this.criteriaEntries=new Map,this.criteriaEntriesBySubscriptionId=new Map,this.wsClosed=!1,this.pingIntervalMs=n?.pingIntervalMs??Mu,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=ve(o.subscription),u={type:"connect",payload:{subscriptionId:a}};this.masterSubEmitter?.dispatchEvent(u);let l=this.criteriaEntriesBySubscriptionId.get(a);if(!l){console.warn("Received handshake for criteria the SubscriptionManager is not listening for yet");return}l.connecting=!1,l.emitter.dispatchEvent({...u});return}this.masterSubEmitter?.dispatchEvent({type:"message",payload:i});let s=this.criteriaEntriesBySubscriptionId.get(ve(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 f(nn(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 ${V(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 f(g("Failed to get token"));if(!o)throw new f(g("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(ue(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 u=a.subscriptionProps;return!ue(n,u)}):s.bareCriteria=void 0,!s.bareCriteria&&s.criteriaWithProps.length===0&&(this.criteriaEntries.delete(t),this.masterSubEmitter?._removeCriteria(t)),i&&this.criteriaEntriesBySubscriptionId.delete(i),o&&this.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(Ae(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 ni(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 rt(...Array.from(this.criteriaEntries.keys()))),this.masterSubEmitter}};async function _u({resource:r,subscription:e,context:t,getPreviousResource:n,logger:i}){if(!Lu(e,i))return i?.debug("Ignore subscription without recognized channel type"),!1;let o=e.criteria;if(!o)return i?.debug("Ignore rest hook missing criteria"),!1;let s=Xe(o);if(r.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${r.resourceType}")`),!1;if(!await Uo(e,r,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let u=ce(e,"https://medplum.com/fhir/StructureDefinition/subscription-supported-interaction");if(u&&u.valueCode!==t.interaction)return i?.debug(`Ignore rest hook for different interaction (wanted "${u.valueCode}", received "${t.interaction}")`),!1;if(!Mt(r,s))return!1;let l=gr(e.meta)??[],p=gr(r.meta)??[];return l.length&&!l.some(y=>p.some(v=>v.reference===y.reference))?(i?.debug("Subscription suppressed due to mismatched accounts",{subscriptionId:e.id,resource:V(r)}),!1):!0}function Lu(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 Uo(r,e,t){let n=ce(r,"https://medplum.com/fhir/StructureDefinition/fhir-path-criteria-expression");if(!n?.valueString)return!0;let i=await t(e),o={"%current":T(e),"%previous":T(i??{})};return C(n.valueString,[T(e)],o)?.[0]?.value===!0}var Mr="5.0.7-72fe4eb",Fu="medplum-cli",jo=w.FHIR_JSON+", */*; q=0.1",Nu="https://api.medplum.com/",Uu=1e3,Bu=6e4,Wu=0,qu=3e5,ju="Binary/",Bo={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},Ne={ClientCredentials:"client_credentials",AuthorizationCode:"authorization_code",RefreshToken:"refresh_token",JwtBearer:"urn:ietf:params:oauth:grant-type:jwt-bearer",TokenExchange:"urn:ietf:params:oauth:grant-type:token-exchange"},$o={AccessToken:"urn:ietf:params:oauth:token-type:access_token",RefreshToken:"urn:ietf:params:oauth:token-type:refresh_token",IdToken:"urn:ietf:params:oauth:token-type:id_token",Saml1Token:"urn:ietf:params:oauth:token-type:saml1",Saml2Token:"urn:ietf:params:oauth:token-type:saml2"},$u={ClientSecretBasic:"client_secret_basic",ClientSecretPost:"client_secret_post",ClientSecretJwt:"client_secret_jwt",PrivateKeyJwt:"private_key_jwt",None:"none"},Ho={JwtBearer:"urn:ietf:params:oauth:client-assertion-type:jwt-bearer"},Hu={ES256:"ES256",ES384:"ES384",ES512:"ES512",HS256:"HS256",RS256:"RS256",RS384:"RS384",RS512:"RS512"},qt=class extends J{constructor(t){super();c(this,"options");c(this,"fetch");c(this,"createPdfImpl");c(this,"storage");c(this,"requestCache");c(this,"cacheTime");c(this,"baseUrl");c(this,"fhirBaseUrl");c(this,"authorizeUrl");c(this,"tokenUrl");c(this,"logoutUrl");c(this,"fhircastHubUrl");c(this,"defaultHeaders");c(this,"onUnauthenticated");c(this,"autoBatchTime");c(this,"autoBatchQueue");c(this,"refreshGracePeriod");c(this,"subscriptionManager");c(this,"medplumServer");c(this,"clientId");c(this,"clientSecret");c(this,"credentialsInHeader");c(this,"autoBatchTimerId");c(this,"accessToken");c(this,"accessTokenExpires");c(this,"refreshToken");c(this,"refreshPromise");c(this,"profilePromise");c(this,"sessionDetails");c(this,"currentRateLimits");c(this,"basicAuth");c(this,"initPromise");c(this,"initComplete",!0);c(this,"keyValueClient");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??Gu(),this.storage=t?.storage??new et(void 0,t?.storagePrefix),this.createPdfImpl=t?.createPdf,this.baseUrl=Tr(t?.baseUrl??Nu),this.fhirBaseUrl=j(this.baseUrl,t?.fhirUrlPath??"fhir/R4"),this.authorizeUrl=j(this.baseUrl,t?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=j(this.baseUrl,t?.tokenUrl??"oauth2/token"),this.logoutUrl=j(this.baseUrl,t?.logoutUrl??"oauth2/logout"),this.fhircastHubUrl=j(this.baseUrl,t?.fhircastHubUrl??"fhircast/STU3"),this.clientId=t?.clientId??"",this.clientSecret=t?.clientSecret??"",this.credentialsInHeader=t?.authCredentialsMethod==="header",this.defaultHeaders=t?.defaultHeaders??{},this.onUnauthenticated=t?.onUnauthenticated,this.refreshGracePeriod=t?.refreshGracePeriod??qu,this.cacheTime=t?.cacheTime??(B()?Bu:Wu),this.cacheTime>0?this.requestCache=new Pe(t?.resourceCacheSize??Uu):this.requestCache=void 0,t?.autoBatchTime?(this.autoBatchTime=t.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0),t?.accessToken&&this.setAccessToken(t.accessToken),this.storage.getInitPromise===void 0?(t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initPromise=Promise.resolve(),this.dispatchEvent({type:"storageInitialized"})):(this.initComplete=!1,this.initPromise=this.storage.getInitPromise(),this.initPromise.then(()=>{t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initComplete=!0,this.dispatchEvent({type:"storageInitialized"})}).catch(n=>{console.error(n),this.initComplete=!0,this.dispatchEvent({type:"storageInitFailed",payload:{error:n}})})),this.setupStorageListener()}get isInitialized(){return this.initComplete}getInitPromise(){return this.initPromise}async attemptResumeActiveLogin(){let t=this.getActiveLogin();t&&(this.setAccessToken(t.accessToken,t.refreshToken),await this.refreshProfile())}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}getFhircastHubUrl(){return this.fhircastHubUrl}getDefaultHeaders(){return this.defaultHeaders}clear(){this.storage.clear(),B()&&sessionStorage.clear(),this.clearActiveLogin()}clearActiveLogin(){this.storage.setString("activeLogin",void 0),this.requestCache?.clear(),this.accessToken=void 0,this.refreshToken=void 0,this.refreshPromise=void 0,this.accessTokenExpires=void 0,this.sessionDetails=void 0,this.medplumServer=void 0,this.dispatchEvent({type:"change"})}invalidateUrl(t){t=t.toString(),this.requestCache?.delete(t)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(t){let n=j(this.fhirBaseUrl,t);if(this.requestCache)for(let i of this.requestCache.keys())(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache.delete(i)}get(t,n={}){t=t.toString();let i=this.getCacheEntry(t,n);if(i)return i.value;let o;t.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue&&!n.disableAutoBatch?o=new Promise((a,u)=>{this.autoBatchQueue.push({method:"GET",url:t.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:u}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):o=this.request("GET",t,n);let s=new L(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,w.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(ne.getSearch()).get("code");if(!i){await this.requestAuthorization(t);return}return this.processCode(i)}signOutWithRedirect(){ne.assign(this.logoutUrl)}async signInWithExternalAuth(t,n,i,o,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),ne.assign(this.getExternalAuthRedirectUri(t,n,i,a,s))}async exchangeExternalAccessToken(t,n){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");return this.fetchTokens({grant_type:Ne.TokenExchange,subject_token_type:$o.AccessToken,client_id:n,subject_token:t})}getExternalAuthRedirectUri(t,n,i,o,s=!0){let a=new URL(t);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",n),a.searchParams.set("redirect_uri",i),a.searchParams.set("scope",o.scope??"openid profile email"),a.searchParams.set("state",JSON.stringify(o)),s){let{codeChallenge:u,codeChallengeMethod:l}=o;if(!l)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!u)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");a.searchParams.set("code_challenge_method",l),a.searchParams.set("code_challenge",u)}return a.toString()}fhirUrl(...t){return new URL(j(this.fhirBaseUrl,t.join("/")))}fhirSearchUrl(t,n){let i=this.fhirUrl(t);return n&&(i.search=Fn(n)),i}search(t,n,i){let o=this.fhirSearchUrl(t,n),s="search-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=this.getBundle(o,i);return this.setCacheEntry(s,u),u}searchOne(t,n,i){let o=this.fhirSearchUrl(t,n);o.searchParams.set("_count","1"),o.searchParams.sort();let s="searchOne-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=new L(this.search(t,o.searchParams,i).then(l=>l.entry?.[0]?.resource));return this.setCacheEntry(s,u),u}searchResources(t,n,i){let s="searchResources-"+this.fhirSearchUrl(t,n).toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=new L(this.search(t,n,i).then(qo));return this.setCacheEntry(s,u),u}async*searchResourcePages(t,n,i){let o=this.fhirSearchUrl(t,n);for(;o;){let s=new URL(o).searchParams;s.has("_count")||s.set("_count","1000");let a=await this.search(t,s,i),u=a.link?.find(l=>l.relation==="next");if(!a.entry?.length&&!u)break;yield qo(a),o=u?.url?new URL(u.url):void 0}}valueSetExpand(t,n){let i=this.fhirUrl("ValueSet","$expand");return i.search=new URLSearchParams(t).toString(),this.get(i.toString(),n)}getCached(t,n){let i=this.requestCache?.get(this.fhirUrl(t,n).toString())?.value;return i?.isOk()?i.read():void 0}getCachedReference(t){let n=t.reference;if(!n)return;if(n==="system")return Bo;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 L(Promise.reject(new Error("Missing reference")));if(i==="system")return new L(Promise.resolve(Bo));let[o,s]=i.split("/");return!o||!s?new L(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}requestSchema(t){if(fn(t))return Promise.resolve();let n=t+"-requestSchema",i=this.getCacheEntry(n,void 0);if(i)return i.value;let o=new L((async()=>{let s=`{
|
|
3
|
+
`))}consumeString(e){this.advance();let t="",n;for(;n=this.consumeChar(e);)t+=n;let i=this.buildToken(e==="`"?"Symbol":"String",t);return this.advance(),i}consumeChar(e){let t=this.curr();if(t==="\\"){this.advance();let n=this.curr(),i=Pc[n];if(i!==void 0)return this.advance(),i;if(n==="u"){this.advance();let o=/^[0-9a-fA-F]{4}$/.exec(this.str.substring(this.pos.index,this.pos.index+4))?.[0];return o?(this.advance(),this.advance(),this.advance(),this.advance(),String.fromCodePoint(Number.parseInt(o,16))):"u"}return this.consumeChar(e)}return t===e||!t?"":(this.advance(),t)}consumeQuotedSymbol(e){this.mark();let t=this.pos.index;this.advance(),this.consumeString(e);let n=this.str.substring(t,this.pos.index);return this.buildToken("Symbol",n)}consumeDateTime(){this.advance();let e=this.pos.index;this.consumeWhile(()=>/[\d-]/.exec(this.curr()));let t=!1,n=!1;if(this.curr()==="T"&&(t=!0,this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())),this.curr()==="."&&/\d/.exec(this.peek())&&(this.advance(),this.consumeWhile(()=>/\d/.exec(this.curr()))),this.curr()==="Z"?(n=!0,this.advance()):(this.curr()==="+"||this.curr()==="-")&&(n=!0,this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())))),this.pos.index===e)throw new Error("Invalid DateTime literal");let i=this.str.substring(e,this.pos.index);return i.endsWith("T")?i=i.substring(0,i.length-1):!i.startsWith("T")&&t&&!n&&(i+="Z"),this.buildToken("DateTime",i)}consumeNumber(){let e=this.pos.index,t="Number";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()===" "&&wc(this.peekToken())&&(t="Quantity",this.consumeToken()),this.buildToken(t,this.str.substring(e,this.pos.index)))}consumeSymbol(){let e=this.consumeWhile(()=>this.symbolRegex.exec(this.curr()));return this.prevToken()?.value!=="."&&this.keywords.includes(e)?this.buildToken(e,e):this.buildToken("Symbol",e)}consumeOperator(){let e=this.curr(),t=this.peek(),n=e+t;return this.operators.includes(n)?(this.advance(),this.advance(),this.buildToken(n,n)):(this.advance(),this.buildToken(e,e))}consumeWhile(e){let t=this.pos.index;for(;this.pos.index<this.str.length&&e();)this.advance();return this.str.substring(t,this.pos.index)}curr(){return this.str[this.pos.index]}peek(){return this.str[this.pos.index+1]??""}mark(){this.markStack.push({...this.pos})}reset(){let e=this.markStack.pop();if(!e)throw new Error("No mark to reset to");this.pos.index=e.index,this.pos.line=e.line,this.pos.column=e.column}advance(){this.pos.index++,this.curr()===`
|
|
4
|
+
`?(this.pos.line++,this.pos.column=0):this.pos.column++}buildToken(e,t){let n=this.markStack.pop();if(!n)throw new Error("No mark for token");return{id:e,value:t,...n}}};function wc(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&Cc.includes(r.value)))}var kt=["true","false"],Vt=["!=","!~","<=",">=","{}","->"];function go(r){return new me(r,kt,Vt).tokenize()}var x={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},Ac={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},Oc={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new Ee(e,t)},precedence:x.Indexer},Ic={parse(r,e){if(!(e instanceof _))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new re(e.name,t)},precedence:x.FunctionCall};function kc(r){let e=r.split(" "),t=Number.parseFloat(e[0]),n=e[1];return n?.startsWith("'")&&n.endsWith("'")?n=n.substring(1,n.length-1):n="{"+n+"}",{value:t,unit:n}}function Ke(){return new ot().registerPrefix("String",{parse:(r,e)=>new U({type:d.string,value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new U({type:d.dateTime,value:Je(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new U({type:d.Quantity,value:kc(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new U({type:e.value.includes(".")?d.decimal:d.integer,value:Number.parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new U({type:d.boolean,value:!0})}).registerPrefix("false",{parse:()=>new U({type:d.boolean,value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new _(e.value)}).registerPrefix("{}",{parse:()=>new xt}).registerPrefix("(",Ac).registerInfix("[",Oc).registerInfix("(",Ic).prefix("+",x.UnaryAdd,(r,e)=>new vt("+",e,t=>t)).prefix("-",x.UnarySubtract,(r,e)=>new M("-",e,e,(t,n)=>-n)).infixLeft(".",x.Dot,(r,e,t)=>new z(r,t)).infixLeft("/",x.Divide,(r,e,t)=>new M("/",r,t,(n,i)=>n/i)).infixLeft("*",x.Multiply,(r,e,t)=>new M("*",r,t,(n,i)=>n*i)).infixLeft("+",x.Add,(r,e,t)=>new M("+",r,t,(n,i)=>n+i)).infixLeft("-",x.Subtract,(r,e,t)=>new M("-",r,t,(n,i)=>n-i)).infixLeft("|",x.Union,(r,e,t)=>new Se(r,t)).infixLeft("=",x.Equals,(r,e,t)=>new Et(r,t)).infixLeft("!=",x.NotEquals,(r,e,t)=>new Rt(r,t)).infixLeft("~",x.Equivalent,(r,e,t)=>new Ct(r,t)).infixLeft("!~",x.NotEquivalent,(r,e,t)=>new Pt(r,t)).infixLeft("<",x.LessThan,(r,e,t)=>new M("<",r,t,(n,i)=>n<i)).infixLeft("<=",x.LessThanOrEquals,(r,e,t)=>new M("<=",r,t,(n,i)=>n<=i)).infixLeft(">",x.GreaterThan,(r,e,t)=>new M(">",r,t,(n,i)=>n>i)).infixLeft(">=",x.GreaterThanOrEquals,(r,e,t)=>new M(">=",r,t,(n,i)=>n>=i)).infixLeft("&",x.Ampersand,(r,e,t)=>new Tt(r,t)).infixLeft("and",x.And,(r,e,t)=>new wt(r,t)).infixLeft("as",x.As,(r,e,t)=>new he(r,t)).infixLeft("contains",x.Contains,(r,e,t)=>new St(r,t)).infixLeft("div",x.Divide,(r,e,t)=>new M("div",r,t,(n,i)=>Math.trunc(n/i))).infixLeft("in",x.In,(r,e,t)=>new bt(r,t)).infixLeft("is",x.Is,(r,e,t)=>new be(r,t)).infixLeft("mod",x.Modulo,(r,e,t)=>new M("mod",r,t,(n,i)=>n%i)).infixLeft("or",x.Or,(r,e,t)=>new At(r,t)).infixLeft("xor",x.Xor,(r,e,t)=>new Ot(r,t)).infixLeft("implies",x.Implies,(r,e,t)=>new It(r,t))}var Vc=Ke();function Dt(r){return new fe(r,Vc.construct(go(r)).consumeAndParse())}function Dc(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]=T(t[n]))}return C(r,t).map(n=>n.value)}function C(r,e,t={},n=void 0){let i;if(typeof r=="string"){let o=n?.get(r);i=o??Dt(r),n&&!o&&n.set(r,i)}else i=r;return i.eval({variables:t},e).map(o=>{let s={type:o.type,value:o.value?.valueOf()};return"path"in o&&(s.path=o.path),s})}function Mc(r){let e=[];for(let t of r)t.type===d.Range?e.push([t.value?.low?.value,t.value?.high?.value]):typeof t.value=="number"&&e.push([t.value,t.value]);return e}function Wn(r){let e=[];for(let t of r){let n=ft(t.value);n&&e.push(n)}return e}function qn(r){let e=new Set;for(let t of r){let n=Nn(t);n&&e.add(n)}return Array.from(e)}function jn(r){let e=new Set;for(let t of r){let{value:n}=t;n&&(De(n)?e.add(n):q(n)?e.add(n.reference):Ge(n)?e.add(V(n)):typeof n.identifier=="object"&&e.add(`identifier:${n.identifier.system}|${n.identifier.value}`))}return Array.from(e)}function _c(r){let e=[];for(let t of r){let{value:n}=t;typeof n=="number"?e.push({value:n}):A(n)&&e.push(n)}return e}function Lc(r){let e=new Set;for(let t of r)De(t.value)&&e.add(t.value);return Array.from(e)}function $n(r,e={}){let t=[];for(let n of r)Fc(e,t,n);return t}function Fc(r,e,t){let{type:n,value:i}=t;switch(n){case d.Identifier:Nc(e,r,i);break;case d.CodeableConcept:Uc(e,r,i);break;case d.Coding:xo(e,r,i);break;case d.ContactPoint:Bc(e,r,i);break;default:Le(e,r,void 0,i?.toString())}}function Nc(r,e,t){t?.type?.text&&Le(r,e,e.textSearchSystem,t.type.text),Le(r,e,t?.system,t?.value)}function Uc(r,e,t){if(t?.text&&Le(r,e,e.textSearchSystem,t.text),t?.coding)for(let n of t.coding)xo(r,e,n)}function xo(r,e,t){t&&(t.display&&Le(r,e,e.textSearchSystem,t.display),Le(r,e,t.system,t.code))}function Bc(r,e,t){t&&Le(r,e,t.system,t.value?.toLocaleLowerCase())}function Le(r,e,t,n){(t||n)&&!r.some(i=>i.system===t&&i.value===n)&&r.push({system:t,value:n&&e.caseInsensitive?n.toLocaleLowerCase():n})}var Wc=20,qc=1e3,h={EQUALS:"eq",NOT_EQUALS:"ne",GREATER_THAN:"gt",LESS_THAN:"lt",GREATER_THAN_OR_EQUALS:"ge",LESS_THAN_OR_EQUALS:"le",STARTS_AFTER:"sa",ENDS_BEFORE:"eb",APPROXIMATELY:"ap",CONTAINS:"contains",STARTS_WITH:"sw",EXACT:"exact",TEXT:"text",NOT:"not",ABOVE:"above",BELOW:"below",IN:"in",NOT_IN:"not-in",OF_TYPE:"of-type",MISSING:"missing",PRESENT:"present",IDENTIFIER:"identifier",ITERATE:"iterate"},Hn={contains:h.CONTAINS,exact:h.EXACT,above:h.ABOVE,below:h.BELOW,text:h.TEXT,not:h.NOT,in:h.IN,"not-in":h.NOT_IN,"of-type":h.OF_TYPE,missing:h.MISSING,identifier:h.IDENTIFIER,iterate:h.ITERATE},Gn={eq:h.EQUALS,ne:h.NOT_EQUALS,lt:h.LESS_THAN,le:h.LESS_THAN_OR_EQUALS,gt:h.GREATER_THAN,ge:h.GREATER_THAN_OR_EQUALS,sa:h.STARTS_AFTER,eb:h.ENDS_BEFORE,ap:h.APPROXIMATELY,sw:h.STARTS_WITH};function Xe(r,e){if(!r)throw new Error("Invalid search URL");let t="",n;if(typeof r=="string")if(r.includes("?")){let[s,a]=r.split("?");t=s,n=new URLSearchParams(a)}else t=r;else typeof r=="object"&&(t=r.pathname,n=r.searchParams);let i;t.includes("/")?i=t.split("/").filter(Boolean).pop():i=t;let o=[];if(n&&o.push(...n.entries()),e)for(let[s,a]of Object.entries(e))if(Array.isArray(a))for(let u of a)o.push([s,u]);else o.push([s,a??""]);return jc(i,o)}function jc(r,e){let t={resourceType:r};for(let[n,i]of e)$c(t,n,i);return t}function $c(r,e,t){let n,i,o=e.indexOf(":");if(o>=0?(n=e.substring(0,o),i=e.substring(o+1)):(n=e,i=""),n!=="_"){if(n==="_has"||e.includes(".")){r.filters=G(r.filters,{code:e,operator:h.EQUALS,value:t});return}switch(n){case"_sort":Hc(r,t);break;case"_cursor":r.cursor=t;break;case"_count":r.count=Number.parseInt(t,10);break;case"_offset":r.offset=Number.parseInt(t,10);break;case"_total":r.total=t;break;case"_summary":t==="count"?(r.total="accurate",r.count=0):(t==="true"||t==="data"||t==="text")&&(r.summary=t);break;case"_include":{let s=vo(t);i==="iterate"&&(s.modifier=h.ITERATE),r.include=G(r.include,s);break}case"_revinclude":{let s=vo(t);i==="iterate"&&(s.modifier=h.ITERATE),r.revInclude=G(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=G(r.filters,bo(s,i,t)):r.filters=G(r.filters,Qc(n,i,t))}}}}function Hc(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 Gc=[h.MISSING,h.PRESENT];function bo(r,e,t){if(Gc.includes(e))return{code:r.code,operator:e,value:t};switch(r.type){case"number":case"date":case"quantity":{let{operator:n,value:i}=zc(t,e||h.EQUALS);if(!To(r,i))throw new f(b(`Invalid format for ${r.type} search parameter: ${i}`));return{code:r.code,operator:n,value:i}}case"reference":case"string":case"token":case"uri":if(!To(r,t))throw new f(b(`Invalid format for ${r.type} search parameter: ${t}`));return{code:r.code,operator:Jc(e),value:t};default:throw new Error("Unrecognized search parameter type: "+r.type)}}function Qc(r,e,t){let n=h.EQUALS;if(e)n=e;else if(t.length>=2){let i=t.substring(0,2);i in Gn&&(t.length===2||t.at(2)?.match(/\d/))&&(n=i,t=t.substring(i.length))}return{code:r,operator:n,value:t}}function zc(r,e){let t=r.substring(0,2),n=Gn[t];return n?{operator:n,value:r.substring(2)}:{operator:e,value:r}}function Jc(r){return Hn[r]??h.EQUALS}function vo(r){let e=r.split(":");if(e.includes("*"))throw new f(b("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new f(b(`Invalid include value '${r}': must be of the form ResourceType:search-parameter`));if(e.length===2)return{resourceType:e[0],searchParam:e[1]};if(e.length===3)return{resourceType:e[0],searchParam:e[1],targetType:e[2]};throw new f(b(`Invalid include value '${r}'`))}function To(r,e){switch(r.type){case"date":return Ve(e);default:return!0}}var Kc=/{{([^{}]+)}}/g;function Xc(r,e){return r=r.replaceAll(Kc,(t,n)=>{let i=C(n,[],e);return i.length!==1?"":Bn(i[0])}),Xe(r)}function Yc(r){let e=[];return r.fields&&e.push("_fields="+r.fields.join(",")),r.filters&&r.filters.forEach(t=>e.push(Zc(t))),r.sortRules&&r.sortRules.length>0&&e.push(eu(r.sortRules)),r.cursor!==void 0&&e.push("_cursor="+encodeURIComponent(r.cursor)),r.offset!==void 0&&r.offset!==0&&e.push("_offset="+r.offset),r.count!==void 0&&e.push("_count="+r.count),r.total!==void 0&&e.push("_total="+r.total),r.types&&r.types.length>0&&e.push("_type="+r.types.join(",")),r.include&&r.include.forEach(t=>e.push(So("_include",t))),r.revInclude&&r.revInclude.forEach(t=>e.push(So("_revinclude",t))),e.length===0?"":(gt(e),"?"+e.join("&"))}function Zc(r){let e=r.operator in Hn?":"+r.operator:"",t=r.operator!==h.EQUALS&&r.operator in Gn?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function eu(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function So(r,e){return r+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function Ye(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 tu(r,e){return b(`Invalid modifier :${r} for ${e}`)}function ru(r,e){return r in Hn?tu(r,e):b(`Invalid operator ${r} for ${e}`)}function Mt(r,e){if(e.resourceType!==r.resourceType)return!1;if(e.filters){for(let t of e.filters)if(!nu(r,e,t))return!1}return!0}function nu(r,e,t){let n=N.types[e.resourceType]?.searchParams?.[t.code];if(!n)return!1;let i=C(n.expression,[T(r)]);if(t.operator===h.MISSING||t.operator===h.PRESENT)return iu(i,t);switch(n.type){case"reference":return ou(i,t);case"string":case"uri":return cu(i,t);case"token":return su(i,t);case"date":return lu(i,t);default:return!1}}function iu(r,e){let t=r.length>0;return(e.operator===h.MISSING&&e.value==="false"||e.operator===h.PRESENT&&e.value==="true")===t}function ou(r,e){let t=Rr(e.operator);if(e.value===""&&r.length===0)return e.operator===h.EQUALS;let n=jn(r);for(let i of Ye(e.value)){let o=n.includes(i);if(!o&&e.code==="_compartment"&&(o=n.some(s=>s?.endsWith("/"+i))),o)return!t}return t}function su(r,e){let t=$n(r),n=Ye(e.value),i=Rr(e.operator);for(let o of t)for(let s of n)if(au(o,s))return!i;return i}function au(r,e){if(e.includes("|")){let[t,n]=e.split("|").map(i=>i.toLowerCase());return!t&&!n?!1:t?r.system?.toLowerCase()===t&&(!n||r.value?.toLowerCase()===n):!r.system&&r.value?.toLowerCase()===n}return r.value?.toLowerCase()===e.toLowerCase()}function cu(r,e){let t=qn(r),n=Ye(e.value),i=Rr(e.operator);for(let o of t)for(let s of n)if(uu(o,s))return!i;return i}function uu(r,e){return r.toLowerCase().includes(e.toLowerCase())}function lu(r,e){let t=Wn(r),n=Ye(e.value),i=Rr(e.operator);for(let o of t)for(let s of n)if(pu(o,e.operator,s))return!i;return i}function pu(r,e,t){if(!r)return!1;let n=ft(t);if(!n)return!1;let i=r.start??"0000",o=r.end??"9999",s=n.start,a=n.end;switch(e){case h.APPROXIMATELY:case h.EQUALS:case h.NOT_EQUALS:return i<a&&o>s;case h.LESS_THAN:return i<s;case h.GREATER_THAN:return o>a;case h.LESS_THAN_OR_EQUALS:return i<=a;case h.GREATER_THAN_OR_EQUALS:return o>=s;case h.STARTS_AFTER:return i>a;case h.ENDS_BEFORE:return o<s;default:return!1}}function Rr(r){return r===h.NOT_EQUALS||r===h.NOT}var du={resourceType:"*"},Eo=["DomainConfiguration","JsonWebKey","Login"],Ro=["UserSecurityRequest","Project","ProjectMembership","User"],Re={READ:"read",VREAD:"vread",UPDATE:"update",DELETE:"delete",HISTORY:"history",CREATE:"create",SEARCH:"search"},Co=[Re.READ,Re.VREAD,Re.HISTORY,Re.SEARCH];function fu(r,e){return Qn(r,Re.SEARCH,e)}function hu(r,e){return Eo.includes(e)?!1:Qn(r,Re.UPDATE,e)}function Qn(r,e,t){return!!r.resource?.some(n=>wo(n,t,e))}function mu(r,e){return!!Po(e,Re.UPDATE,r)}function Po(r,e,t){return t?t.resource?.find(n=>yu(r,e,n)):du}function yu(r,e,t){let n=r.resourceType;return wo(t,n,e)?n==="Binary"?!0:!(t.compartment&&!r.meta?.compartment?.some(i=>i.reference===t.compartment?.reference)||t.criteria&&!Mt(r,Xe(t.criteria))):!1}function wo(r,e,t){return r.resourceType!==e&&(r.resourceType!=="*"||Ro.includes(e))?!1:r.interaction?r.interaction.includes(t):!r.readonly||Co.includes(t)}function B(){return typeof window<"u"}function gu(){return typeof Buffer<"u"}function xu(){return typeof window<"u"?window:void 0}function Cr(){return typeof Buffer<"u"?Buffer:void 0}var ne={assign(r){B()&&globalThis.location.assign(r)},reload(){B()&&globalThis.location.reload()},getSearch(){return B()?globalThis.location.search:""},getPathname(){return B()?globalThis.location.pathname:""},getLocation(){return B()?globalThis.location.toString():""},getOrigin(){return B()?globalThis.location.protocol+"//"+globalThis.location.host+"/":""}};function Ao(r){if(B()){let t=window.atob(r),n=Uint8Array.from(t,i=>i.charCodeAt(0));return new window.TextDecoder().decode(n)}let e=Cr();if(e)return e.from(r,"base64").toString("utf-8");throw new Error("Unable to decode base64")}function _t(r){if(B()){let t=new window.TextEncoder().encode(r),n=String.fromCharCode.apply(null,t);return window.btoa(n)}let e=Cr();if(e)return e.from(r,"utf8").toString("base64");throw new Error("Unable to encode base64")}function vu(r){return _t(r).replaceAll("+","-").replaceAll("/","_").replace(/[=]{1,2}$/,"")}function zn(r){r=r.padEnd(r.length+(4-r.length%4)%4,"=");let e=r.replaceAll("-","+").replaceAll("_","/");return Ao(e)}function Pr(){let r=new Uint32Array(28);return crypto.getRandomValues(r),kn(r.buffer)}async function Jn(r){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(r))}function ie(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replaceAll(/[xy]/g,r=>{let e=Math.trunc(Math.random()*16);return(r==="x"?e:e&3|8).toString(16)})}function Oo(r){let e={};r=Te(r);for(let i of r.entry||[]){let o=i.resource;if(!o)continue;o.meta!==void 0&&(delete o.meta.author,delete o.meta.compartment,delete o.meta.lastUpdated,delete o.meta.project,delete o.meta.versionId,Object.keys(o.meta).length===0&&delete o.meta);let s=o?.id;s&&(e[s]=ie(),i.fullUrl="urn:uuid:"+e[s],delete i.resource?.id)}let t=r.entry,n=JSON.stringify({resourceType:"Bundle",type:"transaction",entry:t?.map(i=>({fullUrl:i.fullUrl,request:{method:"POST",url:i.resource?.resourceType},resource:i.resource}))},(i,o)=>Tu(i,o,e),2);return Io(JSON.parse(n))}function Tu(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 Io(r){let e=bu(r),{sorted:t,cycles:n}=Su(e),i={},o=[];for(let a of r.entry??[])a.fullUrl?i[a.fullUrl]=a:o.push(a);let s=t.map(a=>i[a]);for(let a of n)for(let u of a){let l=i[u],p={...l,request:{...l.request,method:"PUT"}};s.push(p)}return s.push(...o),{...r,entry:s}}var Ze={NotVisited:"NotVisited",Visiting:"Visiting",Visited:"Visited"};function Su(r){let e=[],t={},n=[];for(let o of Object.keys(r))t[o]=Ze.NotVisited;function i(o,s){if(t[o]===Ze.Visited)return!0;if(t[o]===Ze.Visiting){let u=s.lastIndexOf(o);return u!==-1&&n.push(s.slice(u)),!0}t[o]=Ze.Visiting,s.push(o);let a=!1;for(let u of r[o])i(u,s)||(a=!0);return t[o]=Ze.Visited,s.pop(),e.unshift(o),!a}for(let o in r)t[o]===Ze.NotVisited&&i(o,[]);return{sorted:e,cycles:n}}function ko(r,e){for(let t in r)if(r[t]&&typeof r[t]=="object"){let n=r[t];if(q(n)){let i=n.reference;i.startsWith("urn:uuid:")&&e(i)}else ko(n,e)}}function bu(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&&ko(t.resource,i=>{e[i]&&e[i].push(n)})}return e}function Eu(r){r=Te(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=ie());return Oo(e)}function Ru(r,e,t){return r.entry?.find(({resource:n})=>n?.resourceType===e&&n?.id===t)?.resource}async function Cu(r,e,t,n){return{hook:t.hook,hookInstance:ie(),context:n,prefetch:await Pu(r,e,t,n)}}async function Pu(r,e,t,n){if(!t.prefetch)return{};let i={};for(let[o,s]of Object.entries(t.prefetch)){let a=await wu(r,e,n,s);i[o]=a??null}return i}function wu(r,e,t,n){if(n=Vo(e,t,n),n.includes("{{"))return Promise.resolve(null);let i=/^(\w+)\/([0-9a-zA-Z-_]+)$/.exec(n);if(i){let[a,u]=i.slice(1);return r.readResource(a,u)}let[o,s]=Qe(n,"?",2);return r.search(o,s)}var Au=new Set(["userPractitionerId","userPractitionerRoleId","userPatientId","userRelatedPersonId"]);function Vo(r,e,t){return t.replaceAll(/\{\{([^}]+)\}\}/g,(n,i)=>{if(i=i.trim(),Au.has(i))return r.id;if(i.startsWith("context.")){let o=i.substring(8),s=Ou(e,o);if(De(s))return s;if(typeof s=="number"||typeof s=="boolean")return String(s)}return n})}function Ou(r,e){let t=e.split("."),n=r;for(let i of t)if(n&&R(n)&&i in n)n=n[i];else return;return n}var w={CSS:"text/css",DICOM:"application/dicom",FAVICON:"image/vnd.microsoft.icon",FHIR_JSON:"application/fhir+json",FORM_URL_ENCODED:"application/x-www-form-urlencoded",HL7_V2:"x-application/hl7-v2+er7",HTML:"text/html",JAVASCRIPT:"text/javascript",JSON:"application/json",JSON_PATCH:"application/json-patch+json",JWT:"application/jwt",MULTIPART_FORM_DATA:"multipart/form-data",PNG:"image/png",SCIM_JSON:"application/scim+json",SVG:"image/svg+xml",TEXT:"text/plain",TYPESCRIPT:"text/typescript",PING:"x-application/ping",XML:"text/xml",CDA_XML:"application/cda+xml",OCTET_STREAM:"application/octet-stream"};var wr=class{constructor(){c(this,"listeners");this.listeners={}}addEventListener(e,t){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)}removeEventListener(e,t){let n=this.listeners[e];if(n){for(let i=0;i<n.length;i++)if(n[i]===t){n.splice(i,1);return}}}dispatchEvent(e){let t=this.listeners[e.type];if(t)for(let n of t)n.call(this,e);return!e.defaultPrevented}removeAllListeners(){this.listeners={}}listenerCount(e){return this.listeners[e]?.length??0}},J=class{constructor(){c(this,"emitter",new wr)}dispatchEvent(e){this.emitter.dispatchEvent(e)}addEventListener(e,t){this.emitter.addEventListener(e,t)}removeEventListener(e,t){this.emitter.removeEventListener(e,t)}removeAllListeners(){this.emitter.removeAllListeners()}listenerCount(e){return this.emitter.listenerCount(e)}};var Ar={"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"},Do=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],Or=["DiagnosticReport-update"];function Kn(r){return Or.includes(r)}function Xn(r){if(Or.includes(r))throw new f(g(`'context.version' is required for '${r}'.`))}var Mo={"Patient-open":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"Patient-close":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"ImagingStudy-open":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"ImagingStudy-close":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"Encounter-open":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"Encounter-close":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"DiagnosticReport-open":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-close":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-select":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},select:{resourceType:"*",reference:!0,manyAllowed:!0}},"DiagnosticReport-update":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},updates:{resourceType:"Bundle"}},syncerror:{operationoutcome:{resourceType:"OperationOutcome"}}};function _o(r){return Do.includes(r)}function Yn(r){return!!r.endpoint}function Ir(r){if(!Ft(r))throw new f(g("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 Yn(r)&&(o.endpoint=r.endpoint),new URLSearchParams(o).toString()}function Ft(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(!Ar[o])return!1;return!(Yn(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function Iu(r,e,t,n){if(typeof e!="object")throw new f(g(`context[${t}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.id&&typeof e.id=="string"))throw new f(g(`context[${t}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new f(g(`context[${t}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!_o(e.resourceType))throw new f(g(`context[${t}] is invalid. Resource must contain a valid FHIRcast resource type. Resource type is not a known resource type.`));if(i&&e.resourceType!==i)throw new f(g(`context[${t}] is invalid. context[${t}] for the '${r}' event should contain resource of type ${i}.`))}}function ku(r,e,t,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),n.reference){if(!q(e.reference))throw new f(g(`context[${t}] is invalid. Expected key '${e.key}' to be a reference.`))}else Iu(r,e.resource,t,n)}function Vu(r,e){let t=new Map,n=Mo[r];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new f(g(`Key '${o}' not found for event '${r}'. Make sure to add only valid keys.`));ku(r,e[i],i,n[o],t)}for(let[i,o]of Object.entries(n)){if(!(o.optional||t.has(i)))throw new f(g(`Missing required key '${i}' on context for '${r}' event.`));if(!o.manyAllowed&&(t.get(i)??0)>1)throw new f(g(`${t.get(i)} context entries with key '${i}' found for the '${r}' event when schema only allows for 1.`))}}function kr(r,e,t,n){if(!(r&&typeof r=="string"))throw new f(g("Must provide a topic."));if(!Ar[e])throw new f(g(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(Ar).join(", ")}`));if(typeof t!="object")throw new f(g("context must be a context object or array of context objects."));if(Or.includes(e)&&!n)throw new f(g(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(t)?t:[t];return Vu(e,i),{timestamp:new Date().toISOString(),id:ie(),event:{"hub.topic":r,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var Lt=class extends J{constructor(t){super();c(this,"subRequest");c(this,"websocket");if(this.subRequest=t,!t.endpoint)throw new f(g("Subscription request should contain an endpoint."));if(!Ft(t))throw new f(g("Subscription request failed validation."));let n=new WebSocket(t.endpoint);n.addEventListener("open",()=>{this.dispatchEvent({type:"connect"}),n.addEventListener("message",i=>{let o=JSON.parse(i.data);if(o["hub.topic"])return;let s=o;s.event["hub.event"]!=="heartbeat"&&(this.dispatchEvent({type:"message",payload:s}),n.send(JSON.stringify({id:o?.id,timestamp:new Date().toISOString()})))}),n.addEventListener("close",()=>{this.dispatchEvent({type:"disconnect"})})}),this.websocket=n}disconnect(){this.websocket.close()}};function Du(r){return JSON.parse(zn(r))}function Zn(r){return r.split(".").length===3}function Nt(r){let[e,t,n]=r.split(".");return Du(t)}function ei(r){try{return typeof Nt(r).login_id=="string"}catch{return!1}}function ti(r){try{let t=Nt(r).exp;return typeof t=="number"?t*1e3:void 0}catch{return}}var Ut=class{constructor(e){c(this,"medplum");this.medplum=e}async get(e){return this.medplum.get(`keyvalue/v1/${e}`)}async set(e,t){await this.medplum.put(`keyvalue/v1/${e}`,t,w.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var Lo;Lo=Symbol.toStringTag;var L=class{constructor(e){c(this,Lo,"ReadablePromise");c(this,"suspender");c(this,"status","pending");c(this,"response");c(this,"error");this.suspender=e.then(t=>(this.status="success",this.response=t,t),t=>{throw this.status="error",this.error=t,t})}isPending(){return this.status==="pending"}isOk(){return this.status==="success"}read(){switch(this.status){case"pending":throw this.suspender;case"error":throw this.error;default:return this.response}}then(e,t){return this.suspender.then(e,t)}catch(e){return this.suspender.catch(e)}finally(e){return this.suspender.finally(e)}};var et=class{constructor(e,t=""){c(this,"storage");c(this,"prefix","");this.storage=e??globalThis.localStorage??new Vr,this.prefix=t}makeKey(e){return this.prefix+e}clear(){this.storage===globalThis.localStorage&&this.prefix?Object.keys(this.storage).filter(e=>e.startsWith(this.prefix)).forEach(e=>{this.storage.removeItem(e)}):this.storage.clear()}getString(e){return this.storage.getItem(this.makeKey(e))??void 0}setString(e,t){t?this.storage.setItem(this.makeKey(e),t):this.storage.removeItem(this.makeKey(e))}getObject(e){let t=this.getString(e);return t?JSON.parse(t):void 0}setObject(e,t){this.setString(e,t?yt(t):void 0)}},Vr=class{constructor(){c(this,"data");this.data=new Map}get length(){return this.data.size}clear(){this.data.clear()}getItem(e){return this.data.get(e)??null}setItem(e,t){t?this.data.set(e,t):this.data.delete(e)}removeItem(e){this.data.delete(e)}key(e){return Array.from(this.data.keys())[e]}},ri=class extends et{constructor(){super();c(this,"initialized");c(this,"initPromise");c(this,"initResolve",()=>{});this.initialized=!1,this.initPromise=new Promise(t=>{this.initResolve=t})}setInitialized(){this.initialized||(this.initResolve(),this.initialized=!0)}getInitPromise(){return this.initPromise}get isInitialized(){return this.initialized}};var tt={Event:typeof globalThis.Event<"u"?globalThis.Event:void 0,ErrorEvent:void 0,CloseEvent:void 0},Fo=!1;function Mu(){if(typeof globalThis.Event>"u")throw new Error("Unable to lazy init events for ReconnectingWebSocket. globalThis.Event is not defined yet");tt.Event=globalThis.Event,tt.ErrorEvent=class extends Event{constructor(t,n){super("error",n);c(this,"message");c(this,"error");this.message=t.message,this.error=t}},tt.CloseEvent=class extends Event{constructor(t=1e3,n="",i){super("close",i);c(this,"code");c(this,"reason");c(this,"wasClean",!0);this.code=t,this.reason=n}}}function Uo(r,e){if(!r)throw new Error(e)}function Dr(r){return new r.constructor(r.type,r)}var Fe={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},No=!1,Bt=class r extends J{constructor(t,n,i={}){Fo||(Mu(),Fo=!0);super();c(this,"_ws");c(this,"_retryCount",-1);c(this,"_uptimeTimeout");c(this,"_connectTimeout");c(this,"_shouldReconnect",!0);c(this,"_connectLock",!1);c(this,"_binaryType");c(this,"_closeCalled",!1);c(this,"_messageQueue",[]);c(this,"_debugLogger",console.log.bind(console));c(this,"_url");c(this,"_protocols");c(this,"_options");c(this,"onclose",null);c(this,"onerror",null);c(this,"onmessage",null);c(this,"onopen",null);c(this,"_handleOpen",t=>{this._debug("open event");let{minUptime:n=Fe.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),n),Uo(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(Dr(t))});c(this,"_handleMessage",t=>{this._debug("message event"),this.onmessage&&this.onmessage(t),this.dispatchEvent(Dr(t))});c(this,"_handleError",t=>{this._debug("error event",t.message),this._disconnect(void 0,t.message==="TIMEOUT"?"timeout":void 0),this.onerror&&this.onerror(t),this._debug("exec error listeners"),this.dispatchEvent(Dr(t)),this._connect()});c(this,"_handleClose",t=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(t),this.dispatchEvent(Dr(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=Fe.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=Fe.reconnectionDelayGrowFactor,minReconnectionDelay:n=Fe.minReconnectionDelay,maxReconnectionDelay:i=Fe.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=Fe.maxRetries,connectionTimeout:n=Fe.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"&&!No&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),No=!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 tt.ErrorEvent(Error(i.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new tt.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(t=1e3,n){if(this._clearTimeouts(),!!this._ws){this._removeListeners();try{this._ws.close(t,n),this._handleClose(new tt.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 _u=5e3,rt=class extends J{constructor(...t){super();c(this,"criteria");this.criteria=new Set(t)}getCriteria(){return this.criteria}_addCriteria(t){this.criteria.add(t)}_removeCriteria(t){this.criteria.delete(t)}},ni=class{constructor(e,t){c(this,"criteria");c(this,"emitter");c(this,"refCount");c(this,"subscriptionProps");c(this,"subscriptionId");c(this,"token");c(this,"connecting",!1);this.criteria=e,this.emitter=new rt(e),this.refCount=1,this.subscriptionProps=t?{...t}:void 0}clearAttachedSubscription(){this.subscriptionId=void 0,this.token=void 0}},Wt=class{constructor(e,t,n){c(this,"medplum");c(this,"ws");c(this,"masterSubEmitter");c(this,"criteriaEntries");c(this,"criteriaEntriesBySubscriptionId");c(this,"wsClosed");c(this,"pingTimer");c(this,"pingIntervalMs");c(this,"waitingForPong",!1);c(this,"currentProfile");if(!(e instanceof qt))throw new f(g("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(t).toString()}catch{throw new f(g("Not a valid URL"))}let o=n?.ReconnectingWebSocket?new n.ReconnectingWebSocket(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger}):new Bt(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger});this.medplum=e,this.ws=o,this.masterSubEmitter=new rt,this.criteriaEntries=new Map,this.criteriaEntriesBySubscriptionId=new Map,this.wsClosed=!1,this.pingIntervalMs=n?.pingIntervalMs??_u,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=ve(o.subscription),u={type:"connect",payload:{subscriptionId:a}};this.masterSubEmitter?.dispatchEvent(u);let l=this.criteriaEntriesBySubscriptionId.get(a);if(!l){console.warn("Received handshake for criteria the SubscriptionManager is not listening for yet");return}l.connecting=!1,l.emitter.dispatchEvent({...u});return}this.masterSubEmitter?.dispatchEvent({type:"message",payload:i});let s=this.criteriaEntriesBySubscriptionId.get(ve(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 f(nn(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 ${V(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 f(g("Failed to get token"));if(!o)throw new f(g("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(ue(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 u=a.subscriptionProps;return!ue(n,u)}):s.bareCriteria=void 0,!s.bareCriteria&&s.criteriaWithProps.length===0&&(this.criteriaEntries.delete(t),this.masterSubEmitter?._removeCriteria(t)),i&&this.criteriaEntriesBySubscriptionId.delete(i),o&&this.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(Ae(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 ni(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 rt(...Array.from(this.criteriaEntries.keys()))),this.masterSubEmitter}};async function Lu({resource:r,subscription:e,context:t,getPreviousResource:n,logger:i}){if(!Fu(e,i))return i?.debug("Ignore subscription without recognized channel type"),!1;let o=e.criteria;if(!o)return i?.debug("Ignore rest hook missing criteria"),!1;let s=Xe(o);if(r.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${r.resourceType}")`),!1;if(!await Bo(e,r,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let u=ce(e,"https://medplum.com/fhir/StructureDefinition/subscription-supported-interaction");if(u&&u.valueCode!==t.interaction)return i?.debug(`Ignore rest hook for different interaction (wanted "${u.valueCode}", received "${t.interaction}")`),!1;if(!Mt(r,s))return!1;let l=gr(e.meta)??[],p=gr(r.meta)??[];return l.length&&!l.some(y=>p.some(v=>v.reference===y.reference))?(i?.debug("Subscription suppressed due to mismatched accounts",{subscriptionId:e.id,resource:V(r)}),!1):!0}function Fu(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 Bo(r,e,t){let n=ce(r,"https://medplum.com/fhir/StructureDefinition/fhir-path-criteria-expression");if(!n?.valueString)return!0;let i=await t(e),o={"%current":T(e),"%previous":T(i??{})};return C(n.valueString,[T(e)],o)?.[0]?.value===!0}var Mr="5.0.8-e365fa4",Nu="medplum-cli",$o=w.FHIR_JSON+", */*; q=0.1",Uu="https://api.medplum.com/",Bu=1e3,Wu=6e4,qu=0,ju=3e5,$u="Binary/",Wo={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},Ne={ClientCredentials:"client_credentials",AuthorizationCode:"authorization_code",RefreshToken:"refresh_token",JwtBearer:"urn:ietf:params:oauth:grant-type:jwt-bearer",TokenExchange:"urn:ietf:params:oauth:grant-type:token-exchange"},Ho={AccessToken:"urn:ietf:params:oauth:token-type:access_token",RefreshToken:"urn:ietf:params:oauth:token-type:refresh_token",IdToken:"urn:ietf:params:oauth:token-type:id_token",Saml1Token:"urn:ietf:params:oauth:token-type:saml1",Saml2Token:"urn:ietf:params:oauth:token-type:saml2"},Hu={ClientSecretBasic:"client_secret_basic",ClientSecretPost:"client_secret_post",ClientSecretJwt:"client_secret_jwt",PrivateKeyJwt:"private_key_jwt",None:"none"},Go={JwtBearer:"urn:ietf:params:oauth:client-assertion-type:jwt-bearer"},Gu={ES256:"ES256",ES384:"ES384",ES512:"ES512",HS256:"HS256",RS256:"RS256",RS384:"RS384",RS512:"RS512"},qt=class extends J{constructor(t){super();c(this,"options");c(this,"fetch");c(this,"createPdfImpl");c(this,"storage");c(this,"requestCache");c(this,"cacheTime");c(this,"baseUrl");c(this,"fhirBaseUrl");c(this,"authorizeUrl");c(this,"tokenUrl");c(this,"logoutUrl");c(this,"fhircastHubUrl");c(this,"defaultHeaders");c(this,"onUnauthenticated");c(this,"autoBatchTime");c(this,"autoBatchQueue");c(this,"refreshGracePeriod");c(this,"subscriptionManager");c(this,"medplumServer");c(this,"clientId");c(this,"clientSecret");c(this,"credentialsInHeader");c(this,"autoBatchTimerId");c(this,"accessToken");c(this,"accessTokenExpires");c(this,"refreshToken");c(this,"refreshPromise");c(this,"profilePromise");c(this,"sessionDetails");c(this,"currentRateLimits");c(this,"basicAuth");c(this,"initPromise");c(this,"initComplete",!0);c(this,"keyValueClient");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??Qu(),this.storage=t?.storage??new et(void 0,t?.storagePrefix),this.createPdfImpl=t?.createPdf,this.baseUrl=Tr(t?.baseUrl??Uu),this.fhirBaseUrl=j(this.baseUrl,t?.fhirUrlPath??"fhir/R4"),this.authorizeUrl=j(this.baseUrl,t?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=j(this.baseUrl,t?.tokenUrl??"oauth2/token"),this.logoutUrl=j(this.baseUrl,t?.logoutUrl??"oauth2/logout"),this.fhircastHubUrl=j(this.baseUrl,t?.fhircastHubUrl??"fhircast/STU3"),this.clientId=t?.clientId??"",this.clientSecret=t?.clientSecret??"",this.credentialsInHeader=t?.authCredentialsMethod==="header",this.defaultHeaders=t?.defaultHeaders??{},this.onUnauthenticated=t?.onUnauthenticated,this.refreshGracePeriod=t?.refreshGracePeriod??ju,this.cacheTime=t?.cacheTime??(B()?Wu:qu),this.cacheTime>0?this.requestCache=new Pe(t?.resourceCacheSize??Bu):this.requestCache=void 0,t?.autoBatchTime?(this.autoBatchTime=t.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0),t?.accessToken&&this.setAccessToken(t.accessToken),this.storage.getInitPromise===void 0?(t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initPromise=Promise.resolve(),this.dispatchEvent({type:"storageInitialized"})):(this.initComplete=!1,this.initPromise=this.storage.getInitPromise(),this.initPromise.then(()=>{t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initComplete=!0,this.dispatchEvent({type:"storageInitialized"})}).catch(n=>{console.error(n),this.initComplete=!0,this.dispatchEvent({type:"storageInitFailed",payload:{error:n}})})),this.setupStorageListener()}get isInitialized(){return this.initComplete}getInitPromise(){return this.initPromise}async attemptResumeActiveLogin(){let t=this.getActiveLogin();t&&(this.setAccessToken(t.accessToken,t.refreshToken),await this.refreshProfile())}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}getFhircastHubUrl(){return this.fhircastHubUrl}getDefaultHeaders(){return this.defaultHeaders}clear(){this.storage.clear(),B()&&sessionStorage.clear(),this.clearActiveLogin()}clearActiveLogin(){this.storage.setString("activeLogin",void 0),this.requestCache?.clear(),this.accessToken=void 0,this.refreshToken=void 0,this.refreshPromise=void 0,this.accessTokenExpires=void 0,this.sessionDetails=void 0,this.medplumServer=void 0,this.dispatchEvent({type:"change"})}invalidateUrl(t){t=t.toString(),this.requestCache?.delete(t)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(t){let n=j(this.fhirBaseUrl,t);if(this.requestCache)for(let i of this.requestCache.keys())(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache.delete(i)}get(t,n={}){t=t.toString();let i=this.getCacheEntry(t,n);if(i)return i.value;let o;t.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue&&!n.disableAutoBatch?o=new Promise((a,u)=>{this.autoBatchQueue.push({method:"GET",url:t.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:u}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):o=this.request("GET",t,n);let s=new L(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,w.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(ne.getSearch()).get("code");if(!i){await this.requestAuthorization(t);return}return this.processCode(i)}signOutWithRedirect(){ne.assign(this.logoutUrl)}async signInWithExternalAuth(t,n,i,o,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),ne.assign(this.getExternalAuthRedirectUri(t,n,i,a,s))}async exchangeExternalAccessToken(t,n){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");return this.fetchTokens({grant_type:Ne.TokenExchange,subject_token_type:Ho.AccessToken,client_id:n,subject_token:t})}getExternalAuthRedirectUri(t,n,i,o,s=!0){let a=new URL(t);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",n),a.searchParams.set("redirect_uri",i),a.searchParams.set("scope",o.scope??"openid profile email"),a.searchParams.set("state",JSON.stringify(o)),s){let{codeChallenge:u,codeChallengeMethod:l}=o;if(!l)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!u)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");a.searchParams.set("code_challenge_method",l),a.searchParams.set("code_challenge",u)}return a.toString()}fhirUrl(...t){return new URL(j(this.fhirBaseUrl,t.join("/")))}fhirSearchUrl(t,n){let i=this.fhirUrl(t);return n&&(i.search=Fn(n)),i}search(t,n,i){let o=this.fhirSearchUrl(t,n),s="search-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=this.getBundle(o,i);return this.setCacheEntry(s,u),u}searchOne(t,n,i){let o=this.fhirSearchUrl(t,n);o.searchParams.set("_count","1"),o.searchParams.sort();let s="searchOne-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=new L(this.search(t,o.searchParams,i).then(l=>l.entry?.[0]?.resource));return this.setCacheEntry(s,u),u}searchResources(t,n,i){let s="searchResources-"+this.fhirSearchUrl(t,n).toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=new L(this.search(t,n,i).then(jo));return this.setCacheEntry(s,u),u}async*searchResourcePages(t,n,i){let o=this.fhirSearchUrl(t,n);for(;o;){let s=new URL(o).searchParams;s.has("_count")||s.set("_count","1000");let a=await this.search(t,s,i),u=a.link?.find(l=>l.relation==="next");if(!a.entry?.length&&!u)break;yield jo(a),o=u?.url?new URL(u.url):void 0}}valueSetExpand(t,n){let i=this.fhirUrl("ValueSet","$expand");return i.search=new URLSearchParams(t).toString(),this.get(i.toString(),n)}getCached(t,n){let i=this.requestCache?.get(this.fhirUrl(t,n).toString())?.value;return i?.isOk()?i.read():void 0}getCachedReference(t){let n=t.reference;if(!n)return;if(n==="system")return Wo;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 L(Promise.reject(new Error("Missing reference")));if(i==="system")return new L(Promise.resolve(Wo));let[o,s]=i.split("/");return!o||!s?new L(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}readCanonical(t,n,i){return Array.isArray(t)?this.searchOne("",{_type:t.join(","),url:n},i):this.searchOne(t,"url="+n,i)}requestSchema(t){if(fn(t))return Promise.resolve();let n=t+"-requestSchema",i=this.getCacheEntry(n,void 0);if(i)return i.value;let o=new L((async()=>{let s=`{
|
|
5
5
|
StructureDefinitionList(_filter: "name eq ${t}") {
|
|
6
6
|
resourceType,
|
|
7
7
|
name,
|
|
@@ -41,17 +41,17 @@
|
|
|
41
41
|
expression,
|
|
42
42
|
target
|
|
43
43
|
}
|
|
44
|
-
}`.replaceAll(/\s+/g," "),a=await this.graphql(s);or(a.data.StructureDefinitionList);for(let u of a.data.SearchParameterList)Er(u)})());return this.setCacheEntry(n,o),o}requestProfileSchema(t,n){if(!n?.expandProfile&&hn(t))return Promise.resolve();let i=t+"-requestSchema"+(n?.expandProfile?"-nested":""),o=this.getCacheEntry(i,void 0);if(o)return o.value;let s=new L((async()=>{if(n?.expandProfile){let a=this.fhirUrl("StructureDefinition","$expand-profile");a.search=new URLSearchParams({url:t}).toString();let u=await this.post(a.toString(),{});or(u)}else{let a=await this.searchOne("StructureDefinition",{url:t,_sort:"-_lastUpdated"});if(!a){console.warn(`No StructureDefinition found for ${t}!`);return}sr(a)}})());return this.setCacheEntry(i,s),s}readHistory(t,n,i,o){let s=this.fhirUrl(t,n,"_history");return i?.count&&s.searchParams.set("_count",i.count.toString()),i?.offset&&s.searchParams.set("_offset",i.offset.toString()),this.get(s.toString(),o)}readVersion(t,n,i,o){return this.get(this.fhirUrl(t,n,"_history",i),o)}readPatientEverything(t,n){return this.getBundle(this.fhirUrl("Patient",t,"$everything"),n)}readPatientSummary(t,n){return this.getBundle(this.fhirUrl("Patient",t,"$summary"),n)}createResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");return this.invalidateSearches(t.resourceType),this.post(this.fhirUrl(t.resourceType),t,void 0,n)}async createResourceIfNoneExist(t,n,i={}){let o=this.fhirUrl(t.resourceType);this.setRequestHeader(i,"If-None-Exist",n);let s=await this.post(o,t,void 0,i);return this.cacheResource(s),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),s}async upsertResource(t,n,i){let o=this.fhirSearchUrl(t.resourceType,n),s=await this.put(o,t,void 0,i);return s||(s=t),this.cacheResource(s),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),s}async createAttachment(t,n,i,o,s){let a=ii(t,n,i,o);if(a.contentType===w.XML){let p=a.data,y;p instanceof Blob?y=await new Promise((v,H)=>{let X=new FileReader;X.onload=()=>{if(!X.result){H(new Error("Failed to load file"));return}v(X.result)},X.readAsText(p,"utf-8")}):ArrayBuffer.isView(p)?y=new TextDecoder().decode(p):y=p,y.includes("<ClinicalDocument")&&y.includes("urn:hl7-org:v3")&&(a={...a,contentType:w.CDA_XML})}let u=s??(typeof n=="object"?n:{}),l=await this.createBinary(a,u);return{contentType:a.contentType,url:l.url,title:a.filename}}createBinary(t,n,i,o,s){let a=ii(t,n,i,o),u=s??(typeof n=="object"?n:{}),{data:l,contentType:p,filename:y,securityContext:v,onProgress:H}=a,X=this.fhirUrl("Binary");return y&&X.searchParams.set("_filename",y),v?.reference&&this.setRequestHeader(u,"X-Security-Context",v.reference),H?this.uploadwithProgress(X,l,p,H,u):this.post(X,l,p,u)}uploadwithProgress(t,n,i,o,s){return new Promise((a,u)=>{let l=new XMLHttpRequest,p=()=>l.abort();s?.signal?.addEventListener("abort",p);let y=v=>{s?.signal?.removeEventListener("abort",p),v instanceof Error?u(v):a(v)};if(l.responseType="json",l.onabort=()=>y(new DOMException("Request aborted","AbortError")),l.onerror=()=>y(new Error("Request error")),o&&(l.upload.onprogress=v=>o(v),l.upload.onload=v=>o(v)),l.onload=()=>{l.status>=200&&l.status<300?y(l.response):y(new f(at(l.response||l.statusText)))},l.open("POST",t),l.withCredentials=!0,l.setRequestHeader("Authorization","Bearer "+this.accessToken),l.setRequestHeader("Cache-Control","no-cache, no-store, max-age=0"),l.setRequestHeader("Content-Type",i),this.options.extendedMode!==!1&&l.setRequestHeader("X-Medplum","extended"),s?.headers){let v=s.headers;for(let[H,X]of Object.entries(v))l.setRequestHeader(H,X)}l.send(n)})}async createPdf(t,n,i,o){if(!this.createPdfImpl)throw new Error("PDF creation not enabled");let s=Go(t,n,i,o),a=typeof n=="object"?n:{},{docDefinition:u,tableLayouts:l,fonts:p,...y}=s,v=await this.createPdfImpl(u,l,p),H={...y,data:v,contentType:"application/pdf"};return this.createBinary(H,a)}createComment(t,n,i){let o=this.getProfile(),s,a;return t.resourceType==="Encounter"&&(s=xe(t),a=t.subject),t.resourceType==="ServiceRequest"&&(s=t.encounter,a=t.subject),t.resourceType==="Patient"&&(a=xe(t)),this.createResource({resourceType:"Communication",status:"completed",basedOn:[xe(t)],encounter:s,subject:a,sender:o?xe(o):void 0,sent:new Date().toISOString(),payload:[{contentString:n}]},i)}async updateResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");if(!t.id)throw new Error("Missing id");let i=await this.put(this.fhirUrl(t.resourceType,t.id),t,void 0,n);return i||(i=t),this.cacheResource(i),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),i}async patchResource(t,n,i,o){let s=await this.patch(this.fhirUrl(t,n),i,o);return this.cacheResource(s),this.invalidateUrl(this.fhirUrl(t,n,"_history")),this.invalidateSearches(t),s}deleteResource(t,n,i){return this.deleteCacheEntry(this.fhirUrl(t,n).toString()),this.invalidateSearches(t),this.delete(this.fhirUrl(t,n),i)}validateResource(t,n){return this.post(this.fhirUrl(t.resourceType,"$validate"),t,void 0,n)}executeBot(t,n,i,o){let s;if(typeof t=="string"){let a=t;s=this.fhirUrl("Bot",a,"$execute")}else{let a=t;s=this.fhirUrl("Bot","$execute"),s.searchParams.set("identifier",a.system+"|"+a.value)}return this.post(s,n,i,o)}executeBatch(t,n){return this.post(this.fhirBaseUrl,t,void 0,n)}sendEmail(t,n){return this.post("email/v1/send",t,w.JSON,n)}graphql(t,n,i,o){return this.post(this.fhirUrl("$graphql"),{query:t,operationName:n,variables:i},w.JSON,o)}readResourceGraph(t,n,i,o){return this.get(`${this.fhirUrl(t,n)}/$graph?graph=${i}`,o)}pushToAgent(t,n,i,o,s,a){let{waitTimeout:u,...l}=a??{};return this.post(this.fhirUrl("Agent",ve(t),"$push"),{destination:typeof n=="string"?n:V(n),body:i,contentType:o,waitForResponse:s,...u!==void 0?{waitTimeout:u}:void 0},w.FHIR_JSON,l)}getCdsServices(t){return this.get("/cds-services",t)}callCdsService(t,n,i){return this.post(`/cds-services/${t}`,n,w.JSON,i)}getActiveLogin(){return this.storage.getObject("activeLogin")}async setActiveLogin(t){(!this.sessionDetails?.profile||V(this.sessionDetails.profile)!==t.profile?.reference)&&this.clearActiveLogin(),this.setAccessToken(t.accessToken,t.refreshToken),this.storage.setObject("activeLogin",t),this.addLogin(t),this.refreshPromise=void 0,await this.refreshProfile()}getAccessToken(){return this.accessToken}isAuthenticated(t){return this.accessTokenExpires!==void 0&&Date.now()<this.accessTokenExpires-(t??this.refreshGracePeriod)}setAccessToken(t,n){this.accessToken=t,this.refreshToken=n,this.accessTokenExpires=ti(t),this.medplumServer=ei(t)}getLogins(){return this.storage.getObject("logins")??[]}addLogin(t){let n=this.getLogins().filter(i=>i.profile?.reference!==t.profile?.reference);n.push(t),this.storage.setObject("logins",n)}async refreshProfile(){if(this.medplumServer)return this.profilePromise=new Promise((t,n)=>{this.get("auth/me",{cache:"no-cache"}).then(i=>{this.profilePromise=void 0;let o=this.sessionDetails?.profile?.id!==i.profile.id;this.sessionDetails=i,o&&this.dispatchEvent({type:"change"}),t(i.profile),this.dispatchEvent({type:"profileRefreshed"})}).catch(n)}),this.dispatchEvent({type:"profileRefreshing"}),this.profilePromise}isLoading(){return!this.isInitialized||!!this.profilePromise&&!this.sessionDetails?.profile}isSuperAdmin(){return!!this.sessionDetails?.project.superAdmin}isProjectAdmin(){return!!this.sessionDetails?.membership.admin}getProject(){return this.sessionDetails?.project}getProjectMembership(){return this.sessionDetails?.membership}getProfile(){return this.sessionDetails?.profile}async getProfileAsync(){return this.profilePromise?this.profilePromise:this.sessionDetails?this.sessionDetails.profile:this.refreshProfile()}getUserConfiguration(){return this.sessionDetails?.config}getAccessPolicy(){return this.sessionDetails?.accessPolicy}async download(t,n={}){this.refreshPromise&&await this.refreshPromise;let i=t.toString();i.startsWith(ju)&&(t=this.fhirUrl(i));let o=n.headers;return o||(o={},n.headers=o),o.Accept||(o.Accept="*/*"),this.addFetchOptionsDefaults(n),(await this.fetchWithRetry(t.toString(),n)).blob()}async createMedia(t,n){let{additionalFields:i,...o}=t,s=await this.createResource({resourceType:"Media",status:"preparation",content:{contentType:t.contentType},...i});o.securityContext||(o.securityContext=xe(s));let a=await this.createAttachment(o,n);return this.updateResource({...s,status:"completed",content:a})}async uploadMedia(t,n,i,o,s){return this.createMedia({data:t,contentType:n,filename:i,additionalFields:o},s)}async createDocumentReference(t,n){let{additionalFields:i,...o}=t,s=await this.createResource({resourceType:"DocumentReference",status:"current",content:[{attachment:{contentType:t.contentType}}],...i});o.securityContext||(o.securityContext=xe(s));let a=await this.createAttachment(o,n);return this.updateResource({...s,content:[{attachment:a}]})}async bulkExport(t="",n,i,o){let s=t&&`${t}/`,a=this.fhirUrl(`${s}$export`);return n&&a.searchParams.set("_type",n),i&&a.searchParams.set("_since",i),this.startAsyncRequest(a.toString(),o)}async startAsyncRequest(t,n={}){this.addFetchOptionsDefaults(n);let i=n.headers;return i.Prefer="respond-async",this.request("POST",t,n)}get keyValue(){return this.keyValueClient||(this.keyValueClient=new Ut(this)),this.keyValueClient}getBundle(t,n){return new L((async()=>{let i=await this.get(t,n);if(i.entry)for(let o of i.entry)this.cacheResource(o.resource);return i})())}getCacheEntry(t,n){if(!this.requestCache||n?.cache==="no-cache"||n?.cache==="reload")return;let i=this.requestCache.get(t);if(!(!i||i.requestTime+this.cacheTime<Date.now()))return i}setCacheEntry(t,n){this.requestCache&&this.requestCache.set(t,{requestTime:Date.now(),value:n})}cacheResource(t){t?.id&&!t.meta?.tag?.some(n=>n.code==="SUBSETTED")&&this.setCacheEntry(this.fhirUrl(t.resourceType,t.id).toString(),new L(Promise.resolve(t)))}deleteCacheEntry(t){this.requestCache&&this.requestCache.delete(t)}async request(t,n,i={},o={}){await this.refreshIfExpired(),i.method=t,this.addFetchOptionsDefaults(i);let s=await this.fetchWithRetry(n,i);if(s.status===401)return this.handleUnauthenticated(t,n,i);if(s.status===204||s.status===304)return;let u=s.headers.get("content-type")?.includes("json");if(s.status===404&&!u)throw new f(tn);let l=await this.parseBody(s,u);if(s.status===200&&i.followRedirectOnOk||s.status===201&&i.followRedirectOnCreated){let p=await Wo(s,l);if(p)return this.request("GET",p,{...i,body:void 0})}if(s.status===202&&i.pollStatusOnAccepted){let y=await Wo(s,l)??o.statusUrl;if(y)return this.pollStatus(y,i,o)}if(s.status>=400)throw new f(at(l));return l}async parseBody(t,n){let i;if(t.headers.get("content-length")!=="0"){if(n)try{i=await t.json()}catch(o){throw console.error("Error parsing response",t.status,o),o}else i=await t.text();return i}}async fetchWithRetry(t,n){t.startsWith("http")||(t=j(this.baseUrl,t));let i=n?.maxRetries??2;for(let o=0;o<=i;o++)try{this.options.verbose&&this.logRequest(t,n);let s=await this.fetch(t,n);if(this.options.verbose&&this.logResponse(s),this.setCurrentRateLimit(s),o>=i||!Ju(s))return s;let a=this.getRetryDelay(o),u=n.maxRetryTime??2e3;if(a>u)return s;await vr(a)}catch(s){if(s.message==="Failed to fetch"&&o===0&&this.dispatchEvent({type:"offline"}),s.name==="AbortError"||o===i)throw s}throw new Error("Unreachable")}logRequest(t,n){if(console.log(`> ${n.method} ${t}`),n.headers){let i=n.headers;for(let o of gt(Object.keys(i)))console.log(`> ${o}: ${i[o]}`)}}logResponse(t){console.log(`< ${t.status} ${t.statusText}`),t.headers&&t.headers.forEach((n,i)=>console.log(`< ${i}: ${n}`))}setCurrentRateLimit(t){if(!t?.headers||typeof t.headers.get!="function")return;let n=t.headers.get("ratelimit");n&&(this.currentRateLimits=n)}rateLimitStatus(){if(!this.currentRateLimits)return[];let t=this.currentRateLimits;return t.split(",").map(n=>{let i=n.split(";").map(p=>p.trim());if(i.length!==3)throw new Error("Could not parse RateLimit header: "+t);let o=i[0].substring(1,i[0].length-1),s=i.find(p=>p.startsWith("r="))?.substring(2),a=s?Number.parseInt(s,10):Number.NaN,u=i.find(p=>p.startsWith("t="))?.substring(2),l=u?Number.parseInt(u,10):Number.NaN;if(!o||Number.isNaN(a)||Number.isNaN(l))throw new Error("Could not parse RateLimit header: "+t);return{name:o,remainingUnits:a,secondsUntilReset:l,resetsAfter:Math.ceil((Date.now()+1e3*l)/1e3)}})}getRetryDelay(t){let n=this.rateLimitStatus(),i=500*Math.pow(1.5,t);for(let o of n)o.remainingUnits||(i=Math.max(i,o.secondsUntilReset*1e3));return i}async pollStatus(t,n,i){let o={...n,method:"GET",body:void 0,redirect:"follow"};if(i.pollCount===void 0)n.headers&&typeof n.headers=="object"&&"Prefer"in n.headers&&(o.headers={...n.headers},delete o.headers.Prefer),i.statusUrl=t,i.pollCount=1;else{let s=n.pollStatusPeriod??1e3;await vr(s),i.pollCount++}return this.request("GET",t,o,i)}async executeAutoBatch(){if(this.autoBatchQueue===void 0)return;let t=[...this.autoBatchQueue];if(this.autoBatchQueue.length=0,this.autoBatchTimerId=void 0,t.length===1){let o=t[0];try{o.resolve(await this.request(o.method,j(this.fhirBaseUrl,o.url),o.options))}catch(s){o.reject(new f(at(s)))}return}let n={resourceType:"Bundle",type:"batch",entry:t.map(o=>({request:{method:o.method,url:o.url},resource:o.options.body?JSON.parse(o.options.body):void 0}))},i=await this.post(this.fhirBaseUrl,n);for(let o=0;o<t.length;o++){let s=t[o],a=i.entry?.[o];a?.response?.outcome&&!rr(a.response.outcome)?s.reject(new f(a.response.outcome)):s.resolve(a?.resource)}}addFetchOptionsDefaults(t){Object.entries(this.defaultHeaders).forEach(([n,i])=>{this.setRequestHeader(t,n,i)}),this.setRequestHeader(t,"Accept",jo,!0),this.options.extendedMode!==!1&&this.setRequestHeader(t,"X-Medplum","extended"),t.body&&this.setRequestHeader(t,"Content-Type",w.FHIR_JSON,!0),this.accessToken?this.setRequestHeader(t,"Authorization","Bearer "+this.accessToken):this.basicAuth&&this.setRequestHeader(t,"Authorization","Basic "+this.basicAuth),t.cache||(t.cache="no-cache"),t.credentials||(t.credentials="include")}setRequestContentType(t,n){this.setRequestHeader(t,"Content-Type",n)}setRequestHeader(t,n,i,o=!1){let s=t.headers;s?Array.isArray(s)?(!o||!s.some(([a])=>a.toLowerCase()===n.toLowerCase()))&&s.push([n,i]):s instanceof Headers?(!o||!s.has(n))&&s.set(n,i):R(s)&&(!o||!s[n])&&(s[n]=i):t.headers={[n]:i}}setRequestBody(t,n){typeof n=="string"||typeof Blob<"u"&&(n instanceof Blob||n?.constructor.name==="Blob")||typeof File<"u"&&(n instanceof File||n?.constructor.name==="File")||typeof Uint8Array<"u"&&(n instanceof Uint8Array||n?.constructor.name==="Uint8Array")?t.body=n:n&&(t.body=JSON.stringify(n))}async handleUnauthenticated(t,n,i){if(this.refresh())return this.request(t,n,i);throw this.clear(),this.onUnauthenticated?.(),new f(we)}async startPkce(){let t=Pr();sessionStorage.setItem("pkceState",t);let n=Pr().slice(0,128);sessionStorage.setItem("codeVerifier",n);try{let i=await Jn(n);return{codeChallengeMethod:"S256",codeChallenge:Vn(i).replaceAll("+","-").replaceAll("/","_").replaceAll("=","")}}catch(i){return console.warn("Failed to hash code verifier. Falling back to 'plain' code challenge method",i),{codeChallengeMethod:"plain",codeChallenge:n}}}async requestAuthorization(t){let n=await this.ensureCodeChallenge(t??{}),i=new URL(this.authorizeUrl);i.searchParams.set("response_type","code"),i.searchParams.set("state",sessionStorage.getItem("pkceState")),i.searchParams.set("client_id",n.clientId??this.clientId),i.searchParams.set("redirect_uri",n.redirectUri??ne.getOrigin()),i.searchParams.set("code_challenge_method",n.codeChallengeMethod),i.searchParams.set("code_challenge",n.codeChallenge),i.searchParams.set("scope",n.scope??"openid profile"),ne.assign(i.toString())}processCode(t,n){let i={grant_type:Ne.AuthorizationCode,code:t,client_id:n?.clientId??this.clientId??"",redirect_uri:n?.redirectUri??ne.getOrigin()};if(typeof sessionStorage<"u"){let o=sessionStorage.getItem("codeVerifier");o&&(i.code_verifier=o)}return this.fetchTokens(i)}refreshIfExpired(t){return!this.refreshPromise&&this.accessTokenExpires!==void 0&&!this.isAuthenticated(t)&&this.refresh(),this.refreshPromise??Promise.resolve()}refresh(){if(this.refreshPromise)return this.refreshPromise;if(this.refreshToken)return this.refreshPromise=this.fetchTokens({grant_type:Ne.RefreshToken,client_id:this.clientId??"",refresh_token:this.refreshToken}),this.refreshPromise;if(this.clientId&&this.clientSecret)return this.refreshPromise=this.startClientLogin(this.clientId,this.clientSecret),this.refreshPromise}async startClientLogin(t,n){return this.clientId=t,this.clientSecret=n,this.fetchTokens({grant_type:Ne.ClientCredentials,client_id:t,client_secret:n})}async startJwtBearerLogin(t,n,i){return this.clientId=t,this.fetchTokens({grant_type:Ne.JwtBearer,client_id:t,assertion:n,scope:i})}async startJwtAssertionLogin(t){return this.fetchTokens({grant_type:Ne.ClientCredentials,client_assertion_type:Ho.JwtBearer,client_assertion:t})}setBasicAuth(t,n){this.clientId=t,this.clientSecret=n,this.basicAuth=_t(t+":"+n)}setVerbose(t){this.options.verbose=t}async fhircastSubscribe(t,n){if(!(typeof t=="string"&&t!==""))throw new f(g("Invalid topic provided. Topic must be a valid string."));if(!(typeof n=="object"&&Array.isArray(n)&&n.length>0))throw new f(g("Invalid events provided. Events must be an array of event names containing at least one event."));let i={channelType:"websocket",mode:"subscribe",topic:t,events:n},s=(await this.post(this.fhircastHubUrl,Ir(i),w.FORM_URL_ENCODED))["hub.channel.endpoint"];if(!s)throw new Error("Invalid response!");return i.endpoint=s,i}async fhircastUnsubscribe(t){if(!Ft(t))throw new f(g("Invalid topic or subscriptionRequest. SubscriptionRequest must be an object."));if(!(t.endpoint&&typeof t.endpoint=="string"&&t.endpoint.startsWith("ws")))throw new f(g("Provided subscription request must have an endpoint in order to unsubscribe."));t.mode="unsubscribe",await this.post(this.fhircastHubUrl,Ir(t),w.FORM_URL_ENCODED)}fhircastConnect(t){return new Lt(t)}async fhircastPublish(t,n,i,o){return Kn(n)?this.post(this.fhircastHubUrl,kr(t,n,i,o),w.JSON):(Xn(n),this.post(this.fhircastHubUrl,kr(t,n,i),w.JSON))}async fhircastGetContext(t){return this.get(`${this.fhircastHubUrl}/${t}`,{cache:"no-cache"})}async invite(t,n){return this.post("admin/projects/"+t+"/invite",n)}async fetchTokens(t){let n=new URLSearchParams(t),i={...this.defaultHeaders,"Content-Type":w.FORM_URL_ENCODED};this.basicAuth&&(i.Authorization=`Basic ${this.basicAuth}`),this.credentialsInHeader&&(n.delete("client_id"),n.delete("client_secret"),!this.basicAuth&&t.client_id&&t.client_secret&&(i.Authorization=`Basic ${_t(t.client_id+":"+t.client_secret)}`));let o={method:"POST",headers:i,body:n.toString(),credentials:"include"},s;try{s=await this.fetchWithRetry(this.tokenUrl,o)}catch(u){throw this.refreshPromise=void 0,u}if(!s.ok){this.clearActiveLogin(),this.onUnauthenticated?.();try{let u=await s.json();throw new f(b(u.error_description))}catch(u){throw new f(b("Failed to fetch tokens"),{cause:u})}}let a=await s.json();return await this.verifyTokens(a),this.getProfile()}async verifyTokens(t){let n=t.access_token;if(Zn(n)){let i=Nt(n);if(Date.now()>=i.exp*1e3)throw this.clearActiveLogin(),new f(rn);if(i.cid){if(i.cid!==this.clientId)throw this.clearActiveLogin(),new f(er)}else if(this.clientId&&i.client_id!==this.clientId)throw this.clearActiveLogin(),new f(er)}return this.setActiveLogin({accessToken:n,refreshToken:t.refresh_token,project:t.project,profile:t.profile})}checkSessionDetailsMatchLogin(t){return this.sessionDetails&&t?t.profile?.reference?.endsWith(this.sessionDetails.profile.id)??!1:!0}setupStorageListener(){try{window.addEventListener("storage",t=>{if(t.key===null)ne.reload();else if(t.key===this.storage.makeKey("activeLogin")){let n=t.oldValue?JSON.parse(t.oldValue):void 0,i=t.newValue?JSON.parse(t.newValue):void 0;n?.profile.reference!==i?.profile.reference||!this.checkSessionDetailsMatchLogin(i)?ne.reload():i?this.setAccessToken(i.accessToken,i.refreshToken):this.clear()}})}catch{}}getSubscriptionManager(){return this.subscriptionManager||(this.subscriptionManager=new Wt(this,Ln(this.baseUrl,"/ws/subscriptions-r4"))),this.subscriptionManager}subscribeToCriteria(t,n){return this.getSubscriptionManager().addCriteria(t,n)}unsubscribeFromCriteria(t,n){this.subscriptionManager&&(this.subscriptionManager.removeCriteria(t,n),this.subscriptionManager.getCriteriaCount()===0&&this.subscriptionManager.closeWebSocket())}getMasterSubscriptionEmitter(){return this.getSubscriptionManager().getMasterEmitter()}};function Gu(){if(!globalThis.fetch)throw new Error("Fetch not available in this environment");return globalThis.fetch.bind(globalThis)}async function Wo(r,e){let t=r.headers.get("content-location");if(t)return t;let n=r.headers.get("location");if(n)return n;if(st(e)&&e.issue?.[0]?.diagnostics)return e.issue[0].diagnostics}function qo(r){let e=r.entry?.map(t=>t.resource)??[];return Object.assign(e,{bundle:r})}function Qu(r){return R(r)&&"data"in r&&"contentType"in r}function ii(r,e,t,n){return Qu(r)?r:{data:r,filename:e,contentType:t,onProgress:n}}function zu(r){return R(r)&&"docDefinition"in r}function Go(r,e,t,n){return zu(r)?r:{docDefinition:r,filename:e,tableLayouts:t,fonts:n}}function Ju(r){return r.status===429||r.status>=500}var Ku={aws_ssm_parameter_store:"aws_ssm_parameter_store"};function Xu(r,e,t){let n=new _r;Array.isArray(r)||(r=r.entry?.map(i=>i.resource)??[]);for(let i of r)n.addObservation(i);return n.summarize(e,t)}var _r=class{constructor(e){c(this,"code");c(this,"unit");c(this,"sampling");c(this,"dataPoints");this.dataPoints=[],this.code=e?.code,this.unit=e?.unit,this.sampling=e?.sampling}addObservation(e){if(!this.code)this.code=e.code;else if(!Yu(this.code,e.code))throw new Error("Observation does not match code of sampled data");e.valueQuantity?.value!==void 0?(this.checkUnit(e.valueQuantity),this.addData(e.valueQuantity.value)):e.valueInteger!==void 0?this.addData(e.valueInteger):e.valueSampledData?.data&&(this.checkUnit(e.valueSampledData.origin),this.addData(...oi(e.valueSampledData)))}addData(...e){this.dataPoints.push(...e)}checkUnit(e){if(!this.unit)this.unit=e;else if(e.code&&e.system){if(this.unit.system!==e.system||this.unit.code!==e.code)throw new Error("Incorrect unit for Observation")}else if(e.unit&&this.unit.unit!==e.unit)throw new Error("Incorrect unit for Observation")}summarize(e,t){if(!this.code)throw new Error("Code is required for data points");let n=t(this.dataPoints);return{resourceType:"Observation",status:"final",code:e,valueQuantity:typeof n=="number"?{...this.unit,value:n}:n,component:[{code:this.code,valueSampledData:{origin:{...this.unit,value:0},dimensions:1,period:0,...this.sampling,data:Zu(this.dataPoints,this.sampling)}}]}}};function Yu(r,e){return!!r.coding?.some(t=>e.coding?.some(n=>t.system===n.system&&t.code===n.code))}function oi(r){return r.data?.split(" ").map(e=>Number.parseFloat(e)*(r.factor??1)+(r.origin.value??0))??[]}function Zu(r,e){if(r.length)return r.map(t=>(t-(e?.origin.value??0))/(e?.factor??1)).join(" ")}function el(r){let e=[],t=r.effectiveInstant??r.effectiveDateTime??r.effectivePeriod?.start,n=t?Date.parse(t).valueOf():0;if(r.valueSampledData&&e.push(...Qo(r.valueSampledData,n,r)),r.component)for(let i of r.component)i.valueSampledData&&e.push(...Qo(i.valueSampledData,n,{...r,...i}));return e}function Qo(r,e,t){let n=[],i=oi(r),o=V(t);for(let s=0;s<i.length;s++){let a=i[s],u=e+Math.floor(s/r.dimensions)*r.period;n.push({...t,id:void 0,effectiveInstant:void 0,effectivePeriod:void 0,effectiveTiming:void 0,effectiveDateTime:u?new Date(u).toISOString():void 0,valueQuantity:{...r.origin,value:a},valueSampledData:void 0,component:void 0,derivedFrom:o?[...t.derivedFrom??[],{reference:o}]:t.derivedFrom})}return n}function Fr({parentContext:r,path:e,elements:t,profileUrl:n,debugMode:i,accessPolicyResource:o}){if(e===r?.path)return;i??=r?.debugMode??!1,o??=r?.accessPolicyResource;let s=tl(e,t,r,!!i),a=Qe(e,".",2)[1];s=rl(s,o,a),s=nl(s,o,a);let u=Object.create(null);for(let[p,y]of Object.entries(s))u[e+"."+p]=y;let l;if(r&&!r.isDefaultContext)l=r.getExtendedProps;else{let p=Object.create(null);l=y=>{let v=Qe(y,".",2)[1];if(v){if(!p[v]){let H=Lr(v,o?.hiddenFields);p[v]={hidden:H,readonly:H||Lr(v,o?.readonlyFields)}}return p[v]}}}return{path:e,elements:s,elementsByPath:u,profileUrl:n??r?.profileUrl,debugMode:i,getExtendedProps:l,accessPolicyResource:o}}function tl(r,e,t,n){let i=Object.create(null);if(t)for(let[s,a]of Object.entries(t.elementsByPath)){let u=le(r,s);u!==void 0&&(i[u]=a)}let o=!1;if(e)for(let[s,a]of Object.entries(e))s in i||(i[s]=a,o=!0);return n&&console.assert(o,"Unnecessary ElementsContext; not using any newly provided elements"),i}function rl(r,e,t){if(!e?.hiddenFields?.length)return r;let n=t?t+".":"";return Object.fromEntries(Object.entries(r).filter(([i])=>!Lr(n+i,e.hiddenFields)))}function nl(r,e,t){if(!e?.readonlyFields?.length)return r;let n=Object.create(null),i=t?t+".":"";for(let[o,s]of Object.entries(r))Lr(i+o,e.readonlyFields)?n[o]={...s,readonly:!0}:n[o]=s;return n}function Lr(r,e){if(!e?.length)return!1;let t=r.split(".");for(let n=1;n<=t.length;n++){let i=t.slice(0,n).join(".");if(e.includes(i))return!0}return!1}function si(r){return r.type!==void 0&&r.type.length>0}function il(r,e,t,n){let i=Ie(r,e.path,{profileUrl:n});if(i){let o=t.typeSchema?.elements??t.elements;return i.some(s=>pr(s,e,t,o))??!1}return console.assert(!1,"getNestedProperty[%s] in isDiscriminatorComponentMatch missed",e.path),!1}function ai(r,e,t,n){if(r)for(let i of e){let o={value:r,type:i.typeSchema?.type??i.type?.[0].code};if(t.every(s=>il(o,s,i,i.typeSchema?.url??n)))return i.name}}var jt=class{constructor(e,t,n){c(this,"rootSchema");c(this,"visitor");c(this,"elementsContextStack");c(this,"sliceAllowList");if(e.type===void 0)throw new Error("schema must include a type");this.rootSchema=e;let i=Fr({parentContext:void 0,path:this.rootSchema.type,elements:n??this.rootSchema.elements,profileUrl:this.rootSchema.name===this.rootSchema.type?void 0:this.rootSchema.url});if(i===void 0)throw new Error("Could not create root elements context");this.elementsContextStack=[i],this.visitor=t}get elementsContext(){return this.elementsContextStack.at(-1)}crawlElement(e,t,n){this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema);let i=Object.fromEntries(Object.entries(this.elementsContext.elements).filter(([o])=>o.startsWith(t)));this.crawlElementsImpl(i,n),this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlSlice(e,t,n){let i=this.prepareSlices(n.slices,n);if(!Z(i.slices))throw new Error(`cannot crawl slice ${t.name} since it has no type information`);this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema),this.sliceAllowList=[t],this.crawlSliceImpl(i.slices[0],t.path,i),this.sliceAllowList=void 0,this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlResource(){this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema),this.crawlElementsImpl(this.rootSchema.elements,this.rootSchema.type),this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlElementsImpl(e,t){let n=ol(e);for(let i of n)this.crawlElementNode(i,t)}crawlElementNode(e,t){let n=t+"."+e.key;this.visitor.onEnterElement&&this.visitor.onEnterElement(n,e.element,this.elementsContext);for(let i of e.children)this.crawlElementNode(i,t);Z(e.element?.slicing?.slices)&&this.crawlSlicingImpl(e.element.slicing,n),this.visitor.onExitElement&&this.visitor.onExitElement(n,e.element,this.elementsContext)}prepareSlices(e,t){let n=[];for(let o of e){if(!si(o))continue;let s=o.type.find(a=>Z(a.profile))?.profile?.[0];if(Z(s)){let a=mn(s);a&&(o.typeSchema=a)}n.push(o)}return{...t,slices:n}}crawlSlicingImpl(e,t){let n=this.prepareSlices(e.slices,e);for(let i of n.slices)(this.sliceAllowList===void 0||this.sliceAllowList.includes(i))&&this.crawlSliceImpl(i,t,n)}crawlSliceImpl(e,t,n){let i=e.typeSchema;i&&this.visitor.onEnterSchema&&this.visitor.onEnterSchema(i),this.visitor.onEnterSlice&&this.visitor.onEnterSlice(t,e,n);let o,s=i?.elements??e.elements;Z(s)&&(o=Fr({path:t,parentContext:this.elementsContext,elements:s})),o&&this.elementsContextStack.push(o),this.crawlElementsImpl(s,t),o&&this.elementsContextStack.pop(),this.visitor.onExitSlice&&this.visitor.onExitSlice(t,e,n),i&&this.visitor.onExitSchema&&this.visitor.onExitSchema(i)}};function ol(r){let e=[];function t(o,s){return s.startsWith(o+".")}function n(o,s){for(let a of o.children)if(t(a.key,s.key)){n(a,s);return}o.children.push(s)}let i=Object.entries(r);i.sort((o,s)=>o[0].localeCompare(s[0]));for(let[o,s]of i){let a={key:o,element:s,children:[]},u=!1;for(let l of e)if(t(l.key,o)){n(l,a),u=!0;break}u||e.push(a)}return e}var Nr="__sliceName";function sl(r,e){let t=new Ur(r,r.resourceType,"resource");return new jt(e,t).crawlResource(),t.getDefaultValue()}function al(r,e,t){for(let[n,i]of Object.entries(e)){if(t===void 0||t===n){$t(r,n,i,e);continue}let o=le(t,n);o!==void 0&&$t(r,o,i,e)}return r}function cl(r,e,t,n){let i=new Ur([{[Nr]:e.name}],e.path,"element");return new jt(n,i).crawlSlice(r,e,t),i.getDefaultValue()[0]}var Ur=class{constructor(e,t,n){c(this,"rootValue");c(this,"schemaStack");c(this,"valueStack");this.schemaStack=[],this.valueStack=[],this.rootValue=Te(e),this.valueStack.splice(0,this.valueStack.length,{type:n,path:t,values:[this.rootValue]})}get schema(){return this.schemaStack.at(-1)}get value(){return this.valueStack.at(-1)}onEnterSchema(e){this.schemaStack.push(e)}onExitSchema(){this.schemaStack.pop()}onEnterElement(e,t,n){let i=this.value.values,o=this.value.path,s=le(o,e);if(s===void 0)throw new Error(`Expected ${e} to be prefixed by ${o}`);let a=[];for(let u of i){if(u===void 0)continue;let l=le(n.path,o),p=Array.isArray(u)?u:[u];for(let y of p){ul(y,s,t,n.elements,l),$t(y,s,t,n.elements);let v=ui(y,s,n.elements,l);v!==void 0&&a.push(v)}}this.valueStack.push({type:"element",path:e,values:a})}onExitElement(e,t,n){if(!this.valueStack.pop())throw new Error("Expected value context to exist when exiting element");let o=le(this.value.path,e);if(o===void 0)throw new Error(`Expected ${e} to be prefixed by ${this.value.path}`);let s=le(n.path,this.value.path);for(let a of this.value.values){let u=ui(a,o,n.elements,s);if(Array.isArray(u))for(let l=u.length-1;l>=0;l--){let p=u[l];Z(p)||u.splice(l,1)}E(u)&&ci(a,void 0,o,t)}}onEnterSlice(e,t,n){let i=this.value.values,o=[];for(let s of i)if(s!==void 0){let a=Array.isArray(s)?s:[s],u=this.getMatchingSliceValues(a,t,n);o.push(u)}this.valueStack.push({type:"slice",path:e,values:o})}getMatchingSliceValues(e,t,n){let i=[];for(let o of e)(o[Nr]??ai(o,[t],n.discriminator,this.schema.url))===t.name&&i.push(o);for(let o=i.length;o<t.min;o++)if(xr(t.type[0].code)){let s=Object.create(null);i.push(s),e.push(s)}return i}onExitSlice(){let e=this.valueStack.pop();if(!e)throw new Error("Expected value context to exist in onExitSlice");for(let t of e.values)for(let n=t.length-1;n>=0;n--){let i=t[n];Nr in i&&delete i[Nr]}}getDefaultValue(){return this.rootValue}};function ul(r,e,t,n,i){let o=ui(r,e,n,i);t.min>0&&o===void 0&&xr(t.type[0].code)&&(t.isArray?ci(r,[Object.create(null)],e,t):ci(r,Object.create(null),e,t))}function ci(r,e,t,n){if(t.includes("."))throw new Error("key cannot be nested");let i=t;if(t.includes("[x]")){let o=n.type[0].code;i=t.replace("[x]",k(o))}e===void 0?delete r[i]:r[i]=e}function ui(r,e,t,n){let i=e.split("."),o=r,s;for(let a=0;a<i.length;a++){let u=i[a];if(u.includes("[x]")){let l=(n?n+".":"")+i.slice(0,a+1).join("."),y=t[l].type[0].code;u=u.replace("[x]",k(y))}if(a===i.length-1){Array.isArray(o)?s=o.map(l=>l[u]):s=o[u];continue}if(Array.isArray(o))o=o.map(l=>l[u]);else if(R(o)){if(o[u]===void 0)return;o=o[u]}else return}return s}function $t(r,e,t,n){if(!(t.fixed||t.pattern))return r;if(Array.isArray(r))return r.map(a=>$t(a,e,t,n));r==null&&(r=Object.create(null));let i=r,o=e.split("."),s=i;for(let a=0;a<o.length;a++){let u=o[a];if(u.includes("[x]")){let p=n[o.slice(0,a+1).join(".")].type[0].code;u=u.replace("[x]",k(p))}if(a===o.length-1){let l=Array.isArray(s)?s:[s];for(let p of l)t.fixed?p[u]??=t.fixed.value:t.pattern&&(p[u]=zo(p[u],t.pattern.value))}else{if(!(u in s)){let l=o.slice(0,a+1).join(".");s[u]=n[l].isArray?[Object.create(null)]:Object.create(null)}s=s[u]}}return i}function zo(r,e){if(Array.isArray(e)&&(Array.isArray(r)||r===void 0))return(r?.length??0)>0?r:Te(e);if(R(e)&&(R(r)&&!Array.isArray(r)||r===void 0)){let t=Te(r)??Object.create(null);for(let n of Object.keys(e))t[n]=zo(t[n],e[n]);return t}return r}function li(r,e){if(!r.group)throw new f(b("ConceptMap does not specify a mapping group","ConceptMap.group"));let t=Jo(e),n=ll(t,e.targetsystem?r.group.filter(o=>o.target===e.targetsystem):r.group),i=n.length>0;return{result:i,match:i?n:void 0}}function Jo(r){let e=Object.create(null);if(r.code&&!r.coding&&!r.codeableConcept){if(!r.system)throw new f(b("System parameter must be provided with code"));e[r.system]=[r.code]}else if(r.coding&&!r.code&&!r.codeableConcept)r.coding.code&&(e[r.coding.system??""]=[r.coding.code]);else if(r.codeableConcept&&!r.code&&!r.coding)for(let{system:t,code:n}of r.codeableConcept.coding??[])n&&(e[t??""]=G(e[t??""],n));else throw r.code||r.coding||r.codeableConcept?new f(b("Ambiguous input: multiple source codings provided")):new f(b("Source Coding (system + code) must be specified"));return e}function ll(r,e){let t=[];for(let[n,i]of Object.entries(r))for(let o of e.filter(s=>(s.source??"")===n)){let s=o.element?.filter(a=>i.includes(a.code)).flatMap(a=>a.target?.map(u=>({equivalence:u.equivalence,concept:{system:o.target,code:u.code,display:u.display}}))??[]);s?.length||(s=pl(i,o)),s&&t.push(...s)}return t}function pl(r,e){switch(e.unmapped?.mode){case"provided":return r.map(t=>({equivalence:"equal",concept:{system:e.target,code:t}}));case"fixed":return[{equivalence:"equivalent",concept:{system:e.target,code:e.unmapped.code,display:e.unmapped.display}}];default:return}}var dl=[...Vt,"->","<<",">>","=="];function Ko(r){return new me(r,kt,dl).tokenize()}var fl={"-":"disjoint","==":"equal"},pi=class{constructor(e){c(this,"parser");c(this,"structureMap",{resourceType:"StructureMap",status:"active"});this.parser=e}parse(){for(;this.parser.hasMore();){let e=this.parser.peek()?.value;switch(e){case"map":this.parseMap();break;case"uses":this.parseUses();break;case"imports":this.parseImport();break;case"group":this.parseGroup();break;case"conceptmap":this.parseConceptMap();break;default:throw new Error(`Unexpected token: ${e}`)}}return this.structureMap}parseMap(){this.parser.consume("Symbol","map"),this.structureMap.url=this.parser.consume("String").value,this.parser.consume("="),this.structureMap.name=this.parser.consume().value}parseUses(){this.parser.consume("Symbol","uses");let e={};e.url=this.parser.consume("String").value,this.parser.peek()?.value==="alias"&&(this.parser.consume("Symbol","alias"),e.alias=this.parser.consume("Symbol").value),this.parser.consume("Symbol","as"),e.mode=this.parser.consume().value,this.structureMap.structure||(this.structureMap.structure=[]),this.structureMap.structure.push(e)}parseImport(){this.parser.consume("Symbol","imports"),this.structureMap.import||(this.structureMap.import=[]),this.structureMap.import.push(this.parser.consume("String").value)}parseGroup(){let e={};this.parser.consume("Symbol","group"),e.name=this.parser.consume("Symbol").value,e.input=this.parseParameters(),this.parser.peek()?.value==="extends"&&(this.parser.consume("Symbol","extends"),e.extends=this.parser.consume("Symbol").value),this.parser.peek()?.value==="<<"?(this.parser.consume("<<"),e.typeMode=this.parser.consume().value,this.parser.peek()?.value==="+"&&(this.parser.consume("+"),e.typeMode="type-and-types"),this.parser.consume(">>")):e.typeMode="none",e.rule=this.parseRules(),this.structureMap.group||(this.structureMap.group=[]),this.structureMap.group.push(e)}parseParameters(){let e=[];for(this.parser.consume("(");this.parser.hasMore()&&this.parser.peek()?.value!==")";)e.push(this.parseParameter()),this.parser.peek()?.value===","&&this.parser.consume(",");return this.parser.consume(")"),e}parseParameter(){let e={};return e.mode=this.parser.consume().value,e.name=this.parser.consume("Symbol").value,this.parser.peek()?.value===":"&&(this.parser.consume(":"),e.type=this.parser.consume("Symbol").value),e}parseRules(){let e=[];for(this.parser.consume("{");this.parser.hasMore()&&this.parser.peek()?.value!=="}";)e.push(this.parseRule());return this.parser.consume("}"),e}parseRule(){let e={source:this.parseRuleSources()};return this.parser.peek()?.value==="->"&&(this.parser.consume("->"),e.target=this.parseRuleTargets()),this.parser.peek()?.value==="then"&&(this.parser.consume("Symbol","then"),this.parser.peek()?.id==="{"?e.rule=this.parseRules():e.dependent=this.parseRuleDependents()),this.parser.peek()?.id==="String"?e.name=this.parser.consume().value:e.name=e.source?.[0]?.element,this.parser.consume(";"),e}parseRuleSources(){this.parser.hasMore()&&this.parser.peek()?.value==="for"&&this.parser.consume("Symbol","for");let e=[this.parseRuleSource()];for(;this.parser.hasMore()&&this.parser.peek()?.value===",";)this.parser.consume(","),e.push(this.parseRuleSource());return e}parseRuleSource(){let e={},n=this.parseRuleContext().split(".");if(e.context=n[0],e.element=n[1],this.parser.hasMore()&&this.parser.peek()?.value===":"&&(this.parser.consume(":"),e.type=this.parser.consume().value),this.parser.hasMore()&&this.parser.peek()?.value==="default"&&(this.parser.consume("Symbol","default"),e.defaultValueString=this.parser.consume("String").value),(this.parser.peek()?.value==="first"||this.parser.peek()?.value==="not_first"||this.parser.peek()?.value==="last"||this.parser.peek()?.value==="not_last"||this.parser.peek()?.value==="only_one")&&(e.listMode=this.parser.consume().value),this.parser.peek()?.value==="as"&&(this.parser.consume("Symbol","as"),e.variable=this.parser.consume().value),this.parser.peek()?.value==="log"&&(this.parser.consume("Symbol","log"),e.logMessage=this.parser.consume().value),this.parser.peek()?.value==="where"){this.parser.consume("Symbol","where");let i=this.parser.consumeAndParse(x.Arrow);e.condition=i.toString()}if(this.parser.peek()?.value==="check"){this.parser.consume("Symbol","check");let i=this.parser.consumeAndParse(x.Arrow);e.check=i.toString()}return e}parseRuleTargets(){let e=[this.parseRuleTarget()];for(;this.parser.hasMore()&&this.parser.peek()?.value===",";)this.parser.consume(","),e.push(this.parseRuleTarget());return e}parseRuleTarget(){let e={},n=this.parseRuleContext().split(".");return e.contextType="variable",e.context=n[0],e.element=n[1],this.parser.peek()?.value==="="&&(this.parser.consume("="),this.parseRuleTargetTransform(e)),this.parser.peek()?.value==="as"&&(this.parser.consume("Symbol","as"),e.variable=this.parser.consume().value),this.parser.peek()?.value==="share"&&(this.parser.consume("Symbol","share"),e.listMode=["share"],this.parser.consume("Symbol")),(this.parser.peek()?.value==="first"||this.parser.peek()?.value==="last"||this.parser.peek()?.value==="collate")&&(e.listMode=[this.parser.consume().value]),e}parseRuleTargetTransform(e){let t=this.parser.consumeAndParse(x.As);t instanceof re?(e.transform=t.name,e.parameter=t.args?.map(Xo)):t instanceof U||t instanceof _?(e.transform="copy",e.parameter=[Xo(t)]):(e.transform="evaluate",e.parameter=[{valueString:t.toString()}])}parseRuleContext(){let e=this.parser.consume().value;for(;this.parser.peek()?.value===".";)this.parser.consume("."),e+="."+this.parser.consume().value;return e}parseRuleDependents(){let e=this.parser.consumeAndParse(x.Arrow);return[{name:e.name,variable:e.args.map(t=>t.name)}]}parseConceptMap(){this.parser.consume("Symbol","conceptmap");let e={resourceType:"ConceptMap",status:"active",url:"#"+this.parser.consume("String").value};this.parser.consume("{");let t={},n=this.parser.peek()?.value;for(;n!=="}";)n==="prefix"?this.parseConceptMapPrefix(t):this.parseConceptMapRule(e,t),n=this.parser.peek()?.value;this.parser.consume("}"),this.structureMap.contained||(this.structureMap.contained=[]),this.structureMap.contained.push(e)}parseConceptMapPrefix(e){this.parser.consume("Symbol","prefix");let t=this.parser.consume().value;this.parser.consume("=");let n=this.parser.consume().value;e[t]=n}parseConceptMapRule(e,t){let n=this.parser.consume().value,i=t[n];this.parser.consume(":");let o=this.parser.consume().value,s=fl[this.parser.consume().value],a=this.parser.consume().value,u=t[a];this.parser.consume(":");let l=this.parser.consume().value,p=e?.group?.find(y=>y.source===i&&y.target===u);p||(p={source:i,target:u,element:[]},e.group||(e.group=[]),e.group.push(p)),p.element||(p.element=[]),p.element.push({code:o,target:[{code:l,equivalence:s}]})}};function Xo(r){if(r instanceof _)return{valueId:r.name};if(r instanceof U)return hl(r);throw new Error(`Unknown parameter atom type: ${r.constructor.name} (${r.toString()})`)}function hl(r){switch(r.value.type){case"boolean":return{valueBoolean:r.value.value};case"decimal":return{valueDecimal:r.value.value};case"integer":return{valueInteger:r.value.value};case"dateTime":case"string":return{valueString:r.value.value};default:throw new Error("Unknown target literal type: "+r.value.type)}}var ml=Ke().registerInfix("->",{precedence:x.Arrow}).registerInfix(";",{precedence:x.Semicolon});function yl(r){let e=ml.construct(Ko(r));return e.removeComments(),new pi(e).parse()}var Br=class{constructor(e=[]){c(this,"resources");this.resources=e}get(e,t){let n=[];for(let i of this.resources)i.resourceType===e&&i.url&&this.matchesUrl(i.url,t)&&n.push(i);return n}matchesUrl(e,t){if(t.includes("*")){let n=t.split("*");return e.startsWith(n[0])&&e.endsWith(n[1])}else return e===t}};function gl(r,e,t=new Br){return xl({root:r,transformMaps:t},r,e)}function xl(r,e,t){return vl(r,e),Zo(r,e),fi(r,e.group[0],t)}function vl(r,e){let t=qr(r);if(t&&e.import)for(let n of e.import){let i=t.get("StructureMap",n);for(let o of i)Zo(r,o)}}function Zo(r,e){let t=qr(r);if(t&&e.contained)for(let n of e.contained)(n.resourceType==="StructureMap"||n.resourceType==="ConceptMap")&&t.resources.push(n);if(e.group)for(let n of e.group)Wr(r,n.name,{type:"StructureMapGroup",value:n})}function fi(r,e,t){let n=[],i=[];for(let l of e.input)l.mode==="source"&&n.push(l),l.mode==="target"&&i.push(l);if(n.length===0)throw new Error("Missing source definitions");if(i.length===0)throw new Error("Missing target definitions");if(t.length<n.length)throw new Error(`Not enough arguments (got ${t.length}, min ${n.length})`);if(t.length>n.length+i.length)throw new Error(`Too many arguments (got ${t.length}, max ${n.length+i.length})`);let o={},s=[],a=0;for(let l of n)Ht(o,l.name,t[a++]);for(let l of i){let p=t[a++]??{type:l.type??"BackboneElement",value:{}};Ht(o,l.name,p),s.push(p)}let u={root:r.root,parent:r,variables:o};if(e.rule)for(let l of e.rule)es(u,l);return s}function es(r,e){e.source&&ts(r,e,0)}function ts(r,e,t){let n=e.source[t];for(let i of El(r,n))Wr(r,"_",i),n.variable&&Wr(r,n.variable,i),t<e.source.length-1?ts(r,e,t+1):Tl(r,e)}function Tl(r,e){if(!Sl(r,e)){if(e.target)for(let t of e.target)rs(r,t);if(e.rule)for(let t of e.rule)es(r,t);if(e.dependent)for(let t of e.dependent)Dl(r,t)}}function Sl(r,e){if(e.target?.length!==1||e.target[0].transform||e.rule||e.dependent)return!1;let t=Ce(r,"_");if(Array.isArray(t)&&(t=t[0]),!t)return!1;let n=bl(r,t);if(!n)return rs(r,{...e.target[0],transform:"copy",parameter:[{valueId:"_"}]}),!0;let i=e.target[0],o=Ce(r,i.context),s=o.value[i.element],a=is(o,i.element)||Array.isArray(s),u={root:r.root,parent:r,variables:{}},l=fi(u,n,[t]);return ns(r,i,o,l,a,s),!0}function bl(r,e){let t=r;for(;t;){if(t.variables)for(let n of Object.values(t.variables)){let i=di(n);for(let o of i)if(o.type==="StructureMapGroup"){let s=o.value;if((s.typeMode==="types"||s.typeMode==="type-and-types")&&s.input.length===2&&s.input[0].mode==="source"&&s.input[0].type===e.type&&s.input[1].mode==="target")return s}}t=t.parent}}function El(r,e){let t=Ce(r,e.context);if(!t)return[];let n=e.element;if(!n)return[t];let i=C(n,[t]);if(!i||i.length===0)return[];if(e.condition&&!Yo(t,{[e.variable]:i[0]},e.condition))return[];if(e.check&&!Yo(t,{[e.variable]:i[0]},e.check))throw new Error("Check failed: "+e.check);return e.listMode&&(i=Rl(e,i)),i}function Yo(r,e,t){return F(C(t,[r],e))}function Rl(r,e){switch(r.listMode){case"first":return[e[0]];case"not_first":return e.slice(1);case"last":return[e.at(-1)];case"not_last":return e.slice(0,e.length-1);case"only_one":if(e.length!==1)throw new Error("Expected only one value");break}return e}function rs(r,e){let t=Ce(r,e.context);if(!t)throw new Error("Target not found: "+e.context);let n=t.value[e.element],i,o=is(t,e.element)||Array.isArray(n);if(e.transform)switch(e.transform){case"append":i=Cl(r,e);break;case"cast":i=Pl(r,e);break;case"cc":i=wl(r,e);break;case"copy":i=Al(r,e);break;case"create":i=Ol(r,e);break;case"evaluate":i=Il(r,e);break;case"translate":i=kl(r,e);break;case"truncate":i=Vl(r,e);break;case"uuid":i=[{type:"string",value:ie()}];break;default:throw new Error(`Unsupported transform: ${e.transform}`)}else{let s=os(t,e.element)?.type,a=s?.length===1?s[0].code:void 0;o||n===void 0?i=[a?{type:a,value:{}}:T({})]:i=[a?{type:a,value:n}:T(n)]}ns(r,e,t,i,o,n)}function ns(r,e,t,n,i,o){if(n.length!==0){if(i){o||(o=[],Ht(t.value,e.element,o));for(let s of n)o.push(s.value)}else Ht(t.value,e.element,n[0].value);e.variable&&Wr(r,e.variable,Ml(n))}}function is(r,e){return os(r,e)?.isArray}function os(r,e){return qe(r.type)?.elements?.[e]}function Cl(r,e){let t=W(r,e.parameter?.[0])?.[0]?.value,n=W(r,e.parameter?.[1])?.[0]?.value;return[{type:"string",value:(t??"").toString()+(n??"").toString()}]}function Pl(r,e){let t=W(r,e.parameter?.[0])?.[0];return W(r,e.parameter?.[1])?.[0]?.value==="string"?[{type:"string",value:t?.value?.toString()}]:[t]}function wl(r,e){let t=e.parameter;if(t.length===2){let n=W(r,t[0])?.[0]?.value,i=W(r,t[1])?.[0]?.value;return[{type:"CodeableConcept",value:{coding:[{system:n,code:i}]}}]}else return[{type:"CodeableConcept",value:{text:W(r,t[0])?.[0]?.value}}]}function Al(r,e){return e.parameter.flatMap(t=>W(r,t))}function Ol(r,e){let t={};return e.parameter&&e.parameter.length>0&&(t.resourceType=W(r,e.parameter?.[0])?.[0]?.value),[T(t)]}function Il(r,e){let n=W(r,e.parameter?.[0])[0].value;return C(n,[],ss(r))}function kl(r,e){let t=e.parameter.flatMap(u=>W(r,u)),n=t[0].value,i=t[1].value,s=qr(r)?.get("ConceptMap",i)[0];if(!s)throw new Error("ConceptMap not found: "+i);let a=li(s,{system:s.group?.[0]?.source,code:n});return[T(a.match?.[0]?.concept?.code)]}function Vl(r,e){let t=W(r,e.parameter?.[0])?.[0],n=W(r,e.parameter?.[1])?.[0]?.value;return t.type==="string"?[{type:"string",value:t.value.substring(0,n)}]:[t]}function Dl(r,e){let t=Ce(r,e.name);if(!t)throw new Error("Dependent group not found: "+e.name);let n=e.variable,i=[];for(let s of n){let a=Ce(r,s);if(!a)throw new Error("Dependent variable not found: "+s);i.push(a)}let o={root:r.root,parent:r,variables:{}};fi(o,t.value,i)}function qr(r){if(r.transformMaps)return r.transformMaps;if(r.parent)return qr(r.parent)}function W(r,e){let n=I({type:"StructureMapGroupRuleTargetParameter",value:e},"value");if(!n)throw new Error("Missing target parameter: "+JSON.stringify(e));if(n=di(n),n.length===1&&n[0].type==="id"){let i=Ce(r,n[0].value);if(!i)throw new Error("Variable not found: "+n[0].value);return di(i)}return n}function Ce(r,e){let t=r.variables?.[e];if(t)return t;if(r.parent)return Ce(r.parent,e)}function ss(r,e={}){if(r.parent&&ss(r.parent,e),r.variables)for(let[t,n]of Object.entries(r.variables))e[t]=n,e["%"+t]=n;return e}function Wr(r,e,t){r.variables||(r.variables={}),Ht(r.variables,e,t)}function Ht(r,e,t){if(e==="__proto__"||e==="constructor"||e==="prototype")throw new Error("Invalid key: "+e);r[e]=t}function di(r){return Array.isArray(r)?r:[r]}function Ml(r){return r.length===1?r[0]:r}var _l=" ".repeat(2),hi=class{constructor(e=_l,t=!0){c(this,"indent");c(this,"b");c(this,"indentCount");this.indent=e,this.b=[],this.indentCount=0,t&&(this.appendNoWrap("// SPDX-FileCopyrightText: Copyright Orangebot, Inc. and Medplum contributors"),this.appendNoWrap("// SPDX-License-Identifier: Apache-2.0"),this.appendNoWrap("/*"),this.appendNoWrap(" * This is a generated file"),this.appendNoWrap(" * Do not edit manually."),this.appendNoWrap(" */"),this.newLine())}newLine(){this.b.push(`
|
|
44
|
+
}`.replaceAll(/\s+/g," "),a=await this.graphql(s);or(a.data.StructureDefinitionList);for(let u of a.data.SearchParameterList)Er(u)})());return this.setCacheEntry(n,o),o}requestProfileSchema(t,n){if(!n?.expandProfile&&hn(t))return Promise.resolve();let i=t+"-requestSchema"+(n?.expandProfile?"-nested":""),o=this.getCacheEntry(i,void 0);if(o)return o.value;let s=new L((async()=>{if(n?.expandProfile){let a=this.fhirUrl("StructureDefinition","$expand-profile");a.search=new URLSearchParams({url:t}).toString();let u=await this.post(a.toString(),{});or(u)}else{let a=await this.searchOne("StructureDefinition",{url:t,_sort:"-_lastUpdated"});if(!a){console.warn(`No StructureDefinition found for ${t}!`);return}sr(a)}})());return this.setCacheEntry(i,s),s}readHistory(t,n,i,o){let s=this.fhirUrl(t,n,"_history");return i?.count&&s.searchParams.set("_count",i.count.toString()),i?.offset&&s.searchParams.set("_offset",i.offset.toString()),this.get(s.toString(),o)}readVersion(t,n,i,o){return this.get(this.fhirUrl(t,n,"_history",i),o)}readPatientEverything(t,n){return this.getBundle(this.fhirUrl("Patient",t,"$everything"),n)}readPatientSummary(t,n){return this.getBundle(this.fhirUrl("Patient",t,"$summary"),n)}createResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");return this.invalidateSearches(t.resourceType),this.post(this.fhirUrl(t.resourceType),t,void 0,n)}async createResourceIfNoneExist(t,n,i={}){let o=this.fhirUrl(t.resourceType);this.setRequestHeader(i,"If-None-Exist",n);let s=await this.post(o,t,void 0,i);return this.cacheResource(s),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),s}async upsertResource(t,n,i){let o=this.fhirSearchUrl(t.resourceType,n),s=await this.put(o,t,void 0,i);return s||(s=t),this.cacheResource(s),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),s}async createAttachment(t,n,i,o,s){let a=ii(t,n,i,o);if(a.contentType===w.XML){let p=a.data,y;p instanceof Blob?y=await new Promise((v,H)=>{let X=new FileReader;X.onload=()=>{if(!X.result){H(new Error("Failed to load file"));return}v(X.result)},X.readAsText(p,"utf-8")}):ArrayBuffer.isView(p)?y=new TextDecoder().decode(p):y=p,y.includes("<ClinicalDocument")&&y.includes("urn:hl7-org:v3")&&(a={...a,contentType:w.CDA_XML})}let u=s??(typeof n=="object"?n:{}),l=await this.createBinary(a,u);return{contentType:a.contentType,url:l.url,title:a.filename}}createBinary(t,n,i,o,s){let a=ii(t,n,i,o),u=s??(typeof n=="object"?n:{}),{data:l,contentType:p,filename:y,securityContext:v,onProgress:H}=a,X=this.fhirUrl("Binary");return y&&X.searchParams.set("_filename",y),v?.reference&&this.setRequestHeader(u,"X-Security-Context",v.reference),H?this.uploadwithProgress(X,l,p,H,u):this.post(X,l,p,u)}uploadwithProgress(t,n,i,o,s){return new Promise((a,u)=>{let l=new XMLHttpRequest,p=()=>l.abort();s?.signal?.addEventListener("abort",p);let y=v=>{s?.signal?.removeEventListener("abort",p),v instanceof Error?u(v):a(v)};if(l.responseType="json",l.onabort=()=>y(new DOMException("Request aborted","AbortError")),l.onerror=()=>y(new Error("Request error")),o&&(l.upload.onprogress=v=>o(v),l.upload.onload=v=>o(v)),l.onload=()=>{l.status>=200&&l.status<300?y(l.response):y(new f(at(l.response||l.statusText)))},l.open("POST",t),l.withCredentials=!0,l.setRequestHeader("Authorization","Bearer "+this.accessToken),l.setRequestHeader("Cache-Control","no-cache, no-store, max-age=0"),l.setRequestHeader("Content-Type",i),this.options.extendedMode!==!1&&l.setRequestHeader("X-Medplum","extended"),s?.headers){let v=s.headers;for(let[H,X]of Object.entries(v))l.setRequestHeader(H,X)}l.send(n)})}async createPdf(t,n,i,o){if(!this.createPdfImpl)throw new Error("PDF creation not enabled");let s=Qo(t,n,i,o),a=typeof n=="object"?n:{},{docDefinition:u,tableLayouts:l,fonts:p,...y}=s,v=await this.createPdfImpl(u,l,p),H={...y,data:v,contentType:"application/pdf"};return this.createBinary(H,a)}createComment(t,n,i){let o=this.getProfile(),s,a;return t.resourceType==="Encounter"&&(s=xe(t),a=t.subject),t.resourceType==="ServiceRequest"&&(s=t.encounter,a=t.subject),t.resourceType==="Patient"&&(a=xe(t)),this.createResource({resourceType:"Communication",status:"completed",basedOn:[xe(t)],encounter:s,subject:a,sender:o?xe(o):void 0,sent:new Date().toISOString(),payload:[{contentString:n}]},i)}async updateResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");if(!t.id)throw new Error("Missing id");let i=await this.put(this.fhirUrl(t.resourceType,t.id),t,void 0,n);return i||(i=t),this.cacheResource(i),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),i}async patchResource(t,n,i,o){let s=await this.patch(this.fhirUrl(t,n),i,o);return this.cacheResource(s),this.invalidateUrl(this.fhirUrl(t,n,"_history")),this.invalidateSearches(t),s}deleteResource(t,n,i){return this.deleteCacheEntry(this.fhirUrl(t,n).toString()),this.invalidateSearches(t),this.delete(this.fhirUrl(t,n),i)}validateResource(t,n){return this.post(this.fhirUrl(t.resourceType,"$validate"),t,void 0,n)}executeBot(t,n,i,o){let s;if(typeof t=="string"){let a=t;s=this.fhirUrl("Bot",a,"$execute")}else{let a=t;s=this.fhirUrl("Bot","$execute"),s.searchParams.set("identifier",a.system+"|"+a.value)}return this.post(s,n,i,o)}executeBatch(t,n){return this.post(this.fhirBaseUrl,t,void 0,n)}sendEmail(t,n){return this.post("email/v1/send",t,w.JSON,n)}graphql(t,n,i,o){return this.post(this.fhirUrl("$graphql"),{query:t,operationName:n,variables:i},w.JSON,o)}readResourceGraph(t,n,i,o){return this.get(`${this.fhirUrl(t,n)}/$graph?graph=${i}`,o)}pushToAgent(t,n,i,o,s,a){let{waitTimeout:u,...l}=a??{};return this.post(this.fhirUrl("Agent",ve(t),"$push"),{destination:typeof n=="string"?n:V(n),body:i,contentType:o,waitForResponse:s,...u!==void 0?{waitTimeout:u}:void 0},w.FHIR_JSON,l)}getCdsServices(t){return this.get("/cds-services",t)}callCdsService(t,n,i){return this.post(`/cds-services/${t}`,n,w.JSON,i)}getActiveLogin(){return this.storage.getObject("activeLogin")}async setActiveLogin(t){(!this.sessionDetails?.profile||V(this.sessionDetails.profile)!==t.profile?.reference)&&this.clearActiveLogin(),this.setAccessToken(t.accessToken,t.refreshToken),this.storage.setObject("activeLogin",t),this.addLogin(t),this.refreshPromise=void 0,await this.refreshProfile()}getAccessToken(){return this.accessToken}isAuthenticated(t){return this.accessTokenExpires!==void 0&&Date.now()<this.accessTokenExpires-(t??this.refreshGracePeriod)}setAccessToken(t,n){this.accessToken=t,this.refreshToken=n,this.accessTokenExpires=ti(t),this.medplumServer=ei(t)}getLogins(){return this.storage.getObject("logins")??[]}addLogin(t){let n=this.getLogins().filter(i=>i.profile?.reference!==t.profile?.reference);n.push(t),this.storage.setObject("logins",n)}async refreshProfile(){if(this.medplumServer)return this.profilePromise=new Promise((t,n)=>{this.get("auth/me",{cache:"no-cache"}).then(i=>{this.profilePromise=void 0;let o=this.sessionDetails?.profile?.id!==i.profile.id;this.sessionDetails=i,o&&this.dispatchEvent({type:"change"}),t(i.profile),this.dispatchEvent({type:"profileRefreshed"})}).catch(n)}),this.dispatchEvent({type:"profileRefreshing"}),this.profilePromise}isLoading(){return!this.isInitialized||!!this.profilePromise&&!this.sessionDetails?.profile}isSuperAdmin(){return!!this.sessionDetails?.project.superAdmin}isProjectAdmin(){return!!this.sessionDetails?.membership.admin}getProject(){return this.sessionDetails?.project}getProjectMembership(){return this.sessionDetails?.membership}getProfile(){return this.sessionDetails?.profile}async getProfileAsync(){return this.profilePromise?this.profilePromise:this.sessionDetails?this.sessionDetails.profile:this.refreshProfile()}getUserConfiguration(){return this.sessionDetails?.config}getAccessPolicy(){return this.sessionDetails?.accessPolicy}async download(t,n={}){this.refreshPromise&&await this.refreshPromise;let i=t.toString();i.startsWith($u)&&(t=this.fhirUrl(i));let o=n.headers;return o||(o={},n.headers=o),o.Accept||(o.Accept="*/*"),this.addFetchOptionsDefaults(n),(await this.fetchWithRetry(t.toString(),n)).blob()}async createMedia(t,n){let{additionalFields:i,...o}=t,s=await this.createResource({resourceType:"Media",status:"preparation",content:{contentType:t.contentType},...i});o.securityContext||(o.securityContext=xe(s));let a=await this.createAttachment(o,n);return this.updateResource({...s,status:"completed",content:a})}async uploadMedia(t,n,i,o,s){return this.createMedia({data:t,contentType:n,filename:i,additionalFields:o},s)}async createDocumentReference(t,n){let{additionalFields:i,...o}=t,s=await this.createResource({resourceType:"DocumentReference",status:"current",content:[{attachment:{contentType:t.contentType}}],...i});o.securityContext||(o.securityContext=xe(s));let a=await this.createAttachment(o,n);return this.updateResource({...s,content:[{attachment:a}]})}async bulkExport(t="",n,i,o){let s=t&&`${t}/`,a=this.fhirUrl(`${s}$export`);return n&&a.searchParams.set("_type",n),i&&a.searchParams.set("_since",i),this.startAsyncRequest(a.toString(),o)}async startAsyncRequest(t,n={}){this.addFetchOptionsDefaults(n);let i=n.headers;return i.Prefer="respond-async",this.request("POST",t,n)}get keyValue(){return this.keyValueClient||(this.keyValueClient=new Ut(this)),this.keyValueClient}getBundle(t,n){return new L((async()=>{let i=await this.get(t,n);if(i.entry)for(let o of i.entry)this.cacheResource(o.resource);return i})())}getCacheEntry(t,n){if(!this.requestCache||n?.cache==="no-cache"||n?.cache==="reload")return;let i=this.requestCache.get(t);if(!(!i||i.requestTime+this.cacheTime<Date.now()))return i}setCacheEntry(t,n){this.requestCache&&this.requestCache.set(t,{requestTime:Date.now(),value:n})}cacheResource(t){t?.id&&!t.meta?.tag?.some(n=>n.code==="SUBSETTED")&&this.setCacheEntry(this.fhirUrl(t.resourceType,t.id).toString(),new L(Promise.resolve(t)))}deleteCacheEntry(t){this.requestCache&&this.requestCache.delete(t)}async request(t,n,i={},o={}){await this.refreshIfExpired(),i.method=t,this.addFetchOptionsDefaults(i);let s=await this.fetchWithRetry(n,i);if(s.status===401)return this.handleUnauthenticated(t,n,i);if(s.status===204||s.status===304)return;let u=s.headers.get("content-type")?.includes("json");if(s.status===404&&!u)throw new f(tn);let l=await this.parseBody(s,u);if(s.status===200&&i.followRedirectOnOk||s.status===201&&i.followRedirectOnCreated){let p=await qo(s,l);if(p)return this.request("GET",p,{...i,body:void 0})}if(s.status===202&&i.pollStatusOnAccepted){let y=await qo(s,l)??o.statusUrl;if(y)return this.pollStatus(y,i,o)}if(s.status>=400)throw new f(at(l));return l}async parseBody(t,n){let i;if(t.headers.get("content-length")!=="0"){if(n)try{i=await t.json()}catch(o){throw console.error("Error parsing response",t.status,o),o}else i=await t.text();return i}}async fetchWithRetry(t,n){t.startsWith("http")||(t=j(this.baseUrl,t));let i=n?.maxRetries??2;for(let o=0;o<=i;o++)try{this.options.verbose&&this.logRequest(t,n);let s=await this.fetch(t,n);if(this.options.verbose&&this.logResponse(s),this.setCurrentRateLimit(s),o>=i||!Ku(s))return s;let a=this.getRetryDelay(o),u=n.maxRetryTime??2e3;if(a>u)return s;await vr(a)}catch(s){if(s.message==="Failed to fetch"&&o===0&&this.dispatchEvent({type:"offline"}),s.name==="AbortError"||o===i)throw s}throw new Error("Unreachable")}logRequest(t,n){if(console.log(`> ${n.method} ${t}`),n.headers){let i=n.headers;for(let o of gt(Object.keys(i)))console.log(`> ${o}: ${i[o]}`)}}logResponse(t){console.log(`< ${t.status} ${t.statusText}`),t.headers&&t.headers.forEach((n,i)=>console.log(`< ${i}: ${n}`))}setCurrentRateLimit(t){if(!t?.headers||typeof t.headers.get!="function")return;let n=t.headers.get("ratelimit");n&&(this.currentRateLimits=n)}rateLimitStatus(){if(!this.currentRateLimits)return[];let t=this.currentRateLimits;return t.split(",").map(n=>{let i=n.split(";").map(p=>p.trim());if(i.length!==3)throw new Error("Could not parse RateLimit header: "+t);let o=i[0].substring(1,i[0].length-1),s=i.find(p=>p.startsWith("r="))?.substring(2),a=s?Number.parseInt(s,10):Number.NaN,u=i.find(p=>p.startsWith("t="))?.substring(2),l=u?Number.parseInt(u,10):Number.NaN;if(!o||Number.isNaN(a)||Number.isNaN(l))throw new Error("Could not parse RateLimit header: "+t);return{name:o,remainingUnits:a,secondsUntilReset:l,resetsAfter:Math.ceil((Date.now()+1e3*l)/1e3)}})}getRetryDelay(t){let n=this.rateLimitStatus(),i=500*Math.pow(1.5,t);for(let o of n)o.remainingUnits||(i=Math.max(i,o.secondsUntilReset*1e3));return i}async pollStatus(t,n,i){let o={...n,method:"GET",body:void 0,redirect:"follow"};if(i.pollCount===void 0)n.headers&&typeof n.headers=="object"&&"Prefer"in n.headers&&(o.headers={...n.headers},delete o.headers.Prefer),i.statusUrl=t,i.pollCount=1;else{let s=n.pollStatusPeriod??1e3;await vr(s),i.pollCount++}return this.request("GET",t,o,i)}async executeAutoBatch(){if(this.autoBatchQueue===void 0)return;let t=[...this.autoBatchQueue];if(this.autoBatchQueue.length=0,this.autoBatchTimerId=void 0,t.length===1){let o=t[0];try{o.resolve(await this.request(o.method,j(this.fhirBaseUrl,o.url),o.options))}catch(s){o.reject(new f(at(s)))}return}let n={resourceType:"Bundle",type:"batch",entry:t.map(o=>({request:{method:o.method,url:o.url},resource:o.options.body?JSON.parse(o.options.body):void 0}))},i=await this.post(this.fhirBaseUrl,n);for(let o=0;o<t.length;o++){let s=t[o],a=i.entry?.[o];a?.response?.outcome&&!rr(a.response.outcome)?s.reject(new f(a.response.outcome)):s.resolve(a?.resource)}}addFetchOptionsDefaults(t){Object.entries(this.defaultHeaders).forEach(([n,i])=>{this.setRequestHeader(t,n,i)}),this.setRequestHeader(t,"Accept",$o,!0),this.options.extendedMode!==!1&&this.setRequestHeader(t,"X-Medplum","extended"),t.body&&this.setRequestHeader(t,"Content-Type",w.FHIR_JSON,!0),this.accessToken?this.setRequestHeader(t,"Authorization","Bearer "+this.accessToken):this.basicAuth&&this.setRequestHeader(t,"Authorization","Basic "+this.basicAuth),t.cache||(t.cache="no-cache"),t.credentials||(t.credentials="include")}setRequestContentType(t,n){this.setRequestHeader(t,"Content-Type",n)}setRequestHeader(t,n,i,o=!1){let s=t.headers;s?Array.isArray(s)?(!o||!s.some(([a])=>a.toLowerCase()===n.toLowerCase()))&&s.push([n,i]):s instanceof Headers?(!o||!s.has(n))&&s.set(n,i):R(s)&&(!o||!s[n])&&(s[n]=i):t.headers={[n]:i}}setRequestBody(t,n){typeof n=="string"||typeof Blob<"u"&&(n instanceof Blob||n?.constructor.name==="Blob")||typeof File<"u"&&(n instanceof File||n?.constructor.name==="File")||typeof Uint8Array<"u"&&(n instanceof Uint8Array||n?.constructor.name==="Uint8Array")?t.body=n:n&&(t.body=JSON.stringify(n))}async handleUnauthenticated(t,n,i){if(this.refresh())return this.request(t,n,i);throw this.clear(),this.onUnauthenticated?.(),new f(we)}async startPkce(){let t=Pr();sessionStorage.setItem("pkceState",t);let n=Pr().slice(0,128);sessionStorage.setItem("codeVerifier",n);try{let i=await Jn(n);return{codeChallengeMethod:"S256",codeChallenge:Vn(i).replaceAll("+","-").replaceAll("/","_").replaceAll("=","")}}catch(i){return console.warn("Failed to hash code verifier. Falling back to 'plain' code challenge method",i),{codeChallengeMethod:"plain",codeChallenge:n}}}async requestAuthorization(t){let n=await this.ensureCodeChallenge(t??{}),i=new URL(this.authorizeUrl);i.searchParams.set("response_type","code"),i.searchParams.set("state",sessionStorage.getItem("pkceState")),i.searchParams.set("client_id",n.clientId??this.clientId),i.searchParams.set("redirect_uri",n.redirectUri??ne.getOrigin()),i.searchParams.set("code_challenge_method",n.codeChallengeMethod),i.searchParams.set("code_challenge",n.codeChallenge),i.searchParams.set("scope",n.scope??"openid profile"),ne.assign(i.toString())}processCode(t,n){let i={grant_type:Ne.AuthorizationCode,code:t,client_id:n?.clientId??this.clientId??"",redirect_uri:n?.redirectUri??ne.getOrigin()};if(typeof sessionStorage<"u"){let o=sessionStorage.getItem("codeVerifier");o&&(i.code_verifier=o)}return this.fetchTokens(i)}refreshIfExpired(t){return!this.refreshPromise&&this.accessTokenExpires!==void 0&&!this.isAuthenticated(t)&&this.refresh(),this.refreshPromise??Promise.resolve()}refresh(){if(this.refreshPromise)return this.refreshPromise;if(this.refreshToken)return this.refreshPromise=this.fetchTokens({grant_type:Ne.RefreshToken,client_id:this.clientId??"",refresh_token:this.refreshToken}),this.refreshPromise;if(this.clientId&&this.clientSecret)return this.refreshPromise=this.startClientLogin(this.clientId,this.clientSecret),this.refreshPromise}async startClientLogin(t,n){return this.clientId=t,this.clientSecret=n,this.fetchTokens({grant_type:Ne.ClientCredentials,client_id:t,client_secret:n})}async startJwtBearerLogin(t,n,i){return this.clientId=t,this.fetchTokens({grant_type:Ne.JwtBearer,client_id:t,assertion:n,scope:i})}async startJwtAssertionLogin(t){return this.fetchTokens({grant_type:Ne.ClientCredentials,client_assertion_type:Go.JwtBearer,client_assertion:t})}setBasicAuth(t,n){this.clientId=t,this.clientSecret=n,this.basicAuth=_t(t+":"+n)}setVerbose(t){this.options.verbose=t}async fhircastSubscribe(t,n){if(!(typeof t=="string"&&t!==""))throw new f(g("Invalid topic provided. Topic must be a valid string."));if(!(typeof n=="object"&&Array.isArray(n)&&n.length>0))throw new f(g("Invalid events provided. Events must be an array of event names containing at least one event."));let i={channelType:"websocket",mode:"subscribe",topic:t,events:n},s=(await this.post(this.fhircastHubUrl,Ir(i),w.FORM_URL_ENCODED))["hub.channel.endpoint"];if(!s)throw new Error("Invalid response!");return i.endpoint=s,i}async fhircastUnsubscribe(t){if(!Ft(t))throw new f(g("Invalid topic or subscriptionRequest. SubscriptionRequest must be an object."));if(!(t.endpoint&&typeof t.endpoint=="string"&&t.endpoint.startsWith("ws")))throw new f(g("Provided subscription request must have an endpoint in order to unsubscribe."));t.mode="unsubscribe",await this.post(this.fhircastHubUrl,Ir(t),w.FORM_URL_ENCODED)}fhircastConnect(t){return new Lt(t)}async fhircastPublish(t,n,i,o){return Kn(n)?this.post(this.fhircastHubUrl,kr(t,n,i,o),w.JSON):(Xn(n),this.post(this.fhircastHubUrl,kr(t,n,i),w.JSON))}async fhircastGetContext(t){return this.get(`${this.fhircastHubUrl}/${t}`,{cache:"no-cache"})}async invite(t,n){return this.post("admin/projects/"+t+"/invite",n)}async fetchTokens(t){let n=new URLSearchParams(t),i={...this.defaultHeaders,"Content-Type":w.FORM_URL_ENCODED};this.basicAuth&&(i.Authorization=`Basic ${this.basicAuth}`),this.credentialsInHeader&&(n.delete("client_id"),n.delete("client_secret"),!this.basicAuth&&t.client_id&&t.client_secret&&(i.Authorization=`Basic ${_t(t.client_id+":"+t.client_secret)}`));let o={method:"POST",headers:i,body:n.toString(),credentials:"include"},s;try{s=await this.fetchWithRetry(this.tokenUrl,o)}catch(u){throw this.refreshPromise=void 0,u}if(!s.ok){this.clearActiveLogin(),this.onUnauthenticated?.();try{let u=await s.json();throw new f(b(u.error_description))}catch(u){throw new f(b("Failed to fetch tokens"),{cause:u})}}let a=await s.json();return await this.verifyTokens(a),this.getProfile()}async verifyTokens(t){let n=t.access_token;if(Zn(n)){let i=Nt(n);if(Date.now()>=i.exp*1e3)throw this.clearActiveLogin(),new f(rn);if(i.cid){if(i.cid!==this.clientId)throw this.clearActiveLogin(),new f(er)}else if(this.clientId&&i.client_id!==this.clientId)throw this.clearActiveLogin(),new f(er)}return this.setActiveLogin({accessToken:n,refreshToken:t.refresh_token,project:t.project,profile:t.profile})}checkSessionDetailsMatchLogin(t){return this.sessionDetails&&t?t.profile?.reference?.endsWith(this.sessionDetails.profile.id)??!1:!0}setupStorageListener(){try{window.addEventListener("storage",t=>{if(t.key===null)ne.reload();else if(t.key===this.storage.makeKey("activeLogin")){let n=t.oldValue?JSON.parse(t.oldValue):void 0,i=t.newValue?JSON.parse(t.newValue):void 0;n?.profile.reference!==i?.profile.reference||!this.checkSessionDetailsMatchLogin(i)?ne.reload():i?this.setAccessToken(i.accessToken,i.refreshToken):this.clear()}})}catch{}}getSubscriptionManager(){return this.subscriptionManager||(this.subscriptionManager=new Wt(this,Ln(this.baseUrl,"/ws/subscriptions-r4"))),this.subscriptionManager}subscribeToCriteria(t,n){return this.getSubscriptionManager().addCriteria(t,n)}unsubscribeFromCriteria(t,n){this.subscriptionManager&&(this.subscriptionManager.removeCriteria(t,n),this.subscriptionManager.getCriteriaCount()===0&&this.subscriptionManager.closeWebSocket())}getMasterSubscriptionEmitter(){return this.getSubscriptionManager().getMasterEmitter()}};function Qu(){if(!globalThis.fetch)throw new Error("Fetch not available in this environment");return globalThis.fetch.bind(globalThis)}async function qo(r,e){let t=r.headers.get("content-location");if(t)return t;let n=r.headers.get("location");if(n)return n;if(st(e)&&e.issue?.[0]?.diagnostics)return e.issue[0].diagnostics}function jo(r){let e=r.entry?.map(t=>t.resource)??[];return Object.assign(e,{bundle:r})}function zu(r){return R(r)&&"data"in r&&"contentType"in r}function ii(r,e,t,n){return zu(r)?r:{data:r,filename:e,contentType:t,onProgress:n}}function Ju(r){return R(r)&&"docDefinition"in r}function Qo(r,e,t,n){return Ju(r)?r:{docDefinition:r,filename:e,tableLayouts:t,fonts:n}}function Ku(r){return r.status===429||r.status>=500}var Xu={aws_ssm_parameter_store:"aws_ssm_parameter_store"};function Yu(r,e,t){let n=new _r;Array.isArray(r)||(r=r.entry?.map(i=>i.resource)??[]);for(let i of r)n.addObservation(i);return n.summarize(e,t)}var _r=class{constructor(e){c(this,"code");c(this,"unit");c(this,"sampling");c(this,"dataPoints");this.dataPoints=[],this.code=e?.code,this.unit=e?.unit,this.sampling=e?.sampling}addObservation(e){if(!this.code)this.code=e.code;else if(!Zu(this.code,e.code))throw new Error("Observation does not match code of sampled data");e.valueQuantity?.value!==void 0?(this.checkUnit(e.valueQuantity),this.addData(e.valueQuantity.value)):e.valueInteger!==void 0?this.addData(e.valueInteger):e.valueSampledData?.data&&(this.checkUnit(e.valueSampledData.origin),this.addData(...oi(e.valueSampledData)))}addData(...e){this.dataPoints.push(...e)}checkUnit(e){if(!this.unit)this.unit=e;else if(e.code&&e.system){if(this.unit.system!==e.system||this.unit.code!==e.code)throw new Error("Incorrect unit for Observation")}else if(e.unit&&this.unit.unit!==e.unit)throw new Error("Incorrect unit for Observation")}summarize(e,t){if(!this.code)throw new Error("Code is required for data points");let n=t(this.dataPoints);return{resourceType:"Observation",status:"final",code:e,valueQuantity:typeof n=="number"?{...this.unit,value:n}:n,component:[{code:this.code,valueSampledData:{origin:{...this.unit,value:0},dimensions:1,period:0,...this.sampling,data:el(this.dataPoints,this.sampling)}}]}}};function Zu(r,e){return!!r.coding?.some(t=>e.coding?.some(n=>t.system===n.system&&t.code===n.code))}function oi(r){return r.data?.split(" ").map(e=>Number.parseFloat(e)*(r.factor??1)+(r.origin.value??0))??[]}function el(r,e){if(r.length)return r.map(t=>(t-(e?.origin.value??0))/(e?.factor??1)).join(" ")}function tl(r){let e=[],t=r.effectiveInstant??r.effectiveDateTime??r.effectivePeriod?.start,n=t?Date.parse(t).valueOf():0;if(r.valueSampledData&&e.push(...zo(r.valueSampledData,n,r)),r.component)for(let i of r.component)i.valueSampledData&&e.push(...zo(i.valueSampledData,n,{...r,...i}));return e}function zo(r,e,t){let n=[],i=oi(r),o=V(t);for(let s=0;s<i.length;s++){let a=i[s],u=e+Math.floor(s/r.dimensions)*r.period;n.push({...t,id:void 0,effectiveInstant:void 0,effectivePeriod:void 0,effectiveTiming:void 0,effectiveDateTime:u?new Date(u).toISOString():void 0,valueQuantity:{...r.origin,value:a},valueSampledData:void 0,component:void 0,derivedFrom:o?[...t.derivedFrom??[],{reference:o}]:t.derivedFrom})}return n}function Fr({parentContext:r,path:e,elements:t,profileUrl:n,debugMode:i,accessPolicyResource:o}){if(e===r?.path)return;i??=r?.debugMode??!1,o??=r?.accessPolicyResource;let s=rl(e,t,r,!!i),a=Qe(e,".",2)[1];s=nl(s,o,a),s=il(s,o,a);let u=Object.create(null);for(let[p,y]of Object.entries(s))u[e+"."+p]=y;let l;if(r&&!r.isDefaultContext)l=r.getExtendedProps;else{let p=Object.create(null);l=y=>{let v=Qe(y,".",2)[1];if(v){if(!p[v]){let H=Lr(v,o?.hiddenFields);p[v]={hidden:H,readonly:H||Lr(v,o?.readonlyFields)}}return p[v]}}}return{path:e,elements:s,elementsByPath:u,profileUrl:n??r?.profileUrl,debugMode:i,getExtendedProps:l,accessPolicyResource:o}}function rl(r,e,t,n){let i=Object.create(null);if(t)for(let[s,a]of Object.entries(t.elementsByPath)){let u=le(r,s);u!==void 0&&(i[u]=a)}let o=!1;if(e)for(let[s,a]of Object.entries(e))s in i||(i[s]=a,o=!0);return n&&console.assert(o,"Unnecessary ElementsContext; not using any newly provided elements"),i}function nl(r,e,t){if(!e?.hiddenFields?.length)return r;let n=t?t+".":"";return Object.fromEntries(Object.entries(r).filter(([i])=>!Lr(n+i,e.hiddenFields)))}function il(r,e,t){if(!e?.readonlyFields?.length)return r;let n=Object.create(null),i=t?t+".":"";for(let[o,s]of Object.entries(r))Lr(i+o,e.readonlyFields)?n[o]={...s,readonly:!0}:n[o]=s;return n}function Lr(r,e){if(!e?.length)return!1;let t=r.split(".");for(let n=1;n<=t.length;n++){let i=t.slice(0,n).join(".");if(e.includes(i))return!0}return!1}function si(r){return r.type!==void 0&&r.type.length>0}function ol(r,e,t,n){let i=Ie(r,e.path,{profileUrl:n});if(i){let o=t.typeSchema?.elements??t.elements;return i.some(s=>pr(s,e,t,o))??!1}return console.assert(!1,"getNestedProperty[%s] in isDiscriminatorComponentMatch missed",e.path),!1}function ai(r,e,t,n){if(r)for(let i of e){let o={value:r,type:i.typeSchema?.type??i.type?.[0].code};if(t.every(s=>ol(o,s,i,i.typeSchema?.url??n)))return i.name}}var jt=class{constructor(e,t,n){c(this,"rootSchema");c(this,"visitor");c(this,"elementsContextStack");c(this,"sliceAllowList");if(e.type===void 0)throw new Error("schema must include a type");this.rootSchema=e;let i=Fr({parentContext:void 0,path:this.rootSchema.type,elements:n??this.rootSchema.elements,profileUrl:this.rootSchema.name===this.rootSchema.type?void 0:this.rootSchema.url});if(i===void 0)throw new Error("Could not create root elements context");this.elementsContextStack=[i],this.visitor=t}get elementsContext(){return this.elementsContextStack.at(-1)}crawlElement(e,t,n){this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema);let i=Object.fromEntries(Object.entries(this.elementsContext.elements).filter(([o])=>o.startsWith(t)));this.crawlElementsImpl(i,n),this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlSlice(e,t,n){let i=this.prepareSlices(n.slices,n);if(!Z(i.slices))throw new Error(`cannot crawl slice ${t.name} since it has no type information`);this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema),this.sliceAllowList=[t],this.crawlSliceImpl(i.slices[0],t.path,i),this.sliceAllowList=void 0,this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlResource(){this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema),this.crawlElementsImpl(this.rootSchema.elements,this.rootSchema.type),this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlElementsImpl(e,t){let n=sl(e);for(let i of n)this.crawlElementNode(i,t)}crawlElementNode(e,t){let n=t+"."+e.key;this.visitor.onEnterElement&&this.visitor.onEnterElement(n,e.element,this.elementsContext);for(let i of e.children)this.crawlElementNode(i,t);Z(e.element?.slicing?.slices)&&this.crawlSlicingImpl(e.element.slicing,n),this.visitor.onExitElement&&this.visitor.onExitElement(n,e.element,this.elementsContext)}prepareSlices(e,t){let n=[];for(let o of e){if(!si(o))continue;let s=o.type.find(a=>Z(a.profile))?.profile?.[0];if(Z(s)){let a=mn(s);a&&(o.typeSchema=a)}n.push(o)}return{...t,slices:n}}crawlSlicingImpl(e,t){let n=this.prepareSlices(e.slices,e);for(let i of n.slices)(this.sliceAllowList===void 0||this.sliceAllowList.includes(i))&&this.crawlSliceImpl(i,t,n)}crawlSliceImpl(e,t,n){let i=e.typeSchema;i&&this.visitor.onEnterSchema&&this.visitor.onEnterSchema(i),this.visitor.onEnterSlice&&this.visitor.onEnterSlice(t,e,n);let o,s=i?.elements??e.elements;Z(s)&&(o=Fr({path:t,parentContext:this.elementsContext,elements:s})),o&&this.elementsContextStack.push(o),this.crawlElementsImpl(s,t),o&&this.elementsContextStack.pop(),this.visitor.onExitSlice&&this.visitor.onExitSlice(t,e,n),i&&this.visitor.onExitSchema&&this.visitor.onExitSchema(i)}};function sl(r){let e=[];function t(o,s){return s.startsWith(o+".")}function n(o,s){for(let a of o.children)if(t(a.key,s.key)){n(a,s);return}o.children.push(s)}let i=Object.entries(r);i.sort((o,s)=>o[0].localeCompare(s[0]));for(let[o,s]of i){let a={key:o,element:s,children:[]},u=!1;for(let l of e)if(t(l.key,o)){n(l,a),u=!0;break}u||e.push(a)}return e}var Nr="__sliceName";function al(r,e){let t=new Ur(r,r.resourceType,"resource");return new jt(e,t).crawlResource(),t.getDefaultValue()}function cl(r,e,t){for(let[n,i]of Object.entries(e)){if(t===void 0||t===n){$t(r,n,i,e);continue}let o=le(t,n);o!==void 0&&$t(r,o,i,e)}return r}function ul(r,e,t,n){let i=new Ur([{[Nr]:e.name}],e.path,"element");return new jt(n,i).crawlSlice(r,e,t),i.getDefaultValue()[0]}var Ur=class{constructor(e,t,n){c(this,"rootValue");c(this,"schemaStack");c(this,"valueStack");this.schemaStack=[],this.valueStack=[],this.rootValue=Te(e),this.valueStack.splice(0,this.valueStack.length,{type:n,path:t,values:[this.rootValue]})}get schema(){return this.schemaStack.at(-1)}get value(){return this.valueStack.at(-1)}onEnterSchema(e){this.schemaStack.push(e)}onExitSchema(){this.schemaStack.pop()}onEnterElement(e,t,n){let i=this.value.values,o=this.value.path,s=le(o,e);if(s===void 0)throw new Error(`Expected ${e} to be prefixed by ${o}`);let a=[];for(let u of i){if(u===void 0)continue;let l=le(n.path,o),p=Array.isArray(u)?u:[u];for(let y of p){ll(y,s,t,n.elements,l),$t(y,s,t,n.elements);let v=ui(y,s,n.elements,l);v!==void 0&&a.push(v)}}this.valueStack.push({type:"element",path:e,values:a})}onExitElement(e,t,n){if(!this.valueStack.pop())throw new Error("Expected value context to exist when exiting element");let o=le(this.value.path,e);if(o===void 0)throw new Error(`Expected ${e} to be prefixed by ${this.value.path}`);let s=le(n.path,this.value.path);for(let a of this.value.values){let u=ui(a,o,n.elements,s);if(Array.isArray(u))for(let l=u.length-1;l>=0;l--){let p=u[l];Z(p)||u.splice(l,1)}E(u)&&ci(a,void 0,o,t)}}onEnterSlice(e,t,n){let i=this.value.values,o=[];for(let s of i)if(s!==void 0){let a=Array.isArray(s)?s:[s],u=this.getMatchingSliceValues(a,t,n);o.push(u)}this.valueStack.push({type:"slice",path:e,values:o})}getMatchingSliceValues(e,t,n){let i=[];for(let o of e)(o[Nr]??ai(o,[t],n.discriminator,this.schema.url))===t.name&&i.push(o);for(let o=i.length;o<t.min;o++)if(xr(t.type[0].code)){let s=Object.create(null);i.push(s),e.push(s)}return i}onExitSlice(){let e=this.valueStack.pop();if(!e)throw new Error("Expected value context to exist in onExitSlice");for(let t of e.values)for(let n=t.length-1;n>=0;n--){let i=t[n];Nr in i&&delete i[Nr]}}getDefaultValue(){return this.rootValue}};function ll(r,e,t,n,i){let o=ui(r,e,n,i);t.min>0&&o===void 0&&xr(t.type[0].code)&&(t.isArray?ci(r,[Object.create(null)],e,t):ci(r,Object.create(null),e,t))}function ci(r,e,t,n){if(t.includes("."))throw new Error("key cannot be nested");let i=t;if(t.includes("[x]")){let o=n.type[0].code;i=t.replace("[x]",k(o))}e===void 0?delete r[i]:r[i]=e}function ui(r,e,t,n){let i=e.split("."),o=r,s;for(let a=0;a<i.length;a++){let u=i[a];if(u.includes("[x]")){let l=(n?n+".":"")+i.slice(0,a+1).join("."),y=t[l].type[0].code;u=u.replace("[x]",k(y))}if(a===i.length-1){Array.isArray(o)?s=o.map(l=>l[u]):s=o[u];continue}if(Array.isArray(o))o=o.map(l=>l[u]);else if(R(o)){if(o[u]===void 0)return;o=o[u]}else return}return s}function $t(r,e,t,n){if(!(t.fixed||t.pattern))return r;if(Array.isArray(r))return r.map(a=>$t(a,e,t,n));r==null&&(r=Object.create(null));let i=r,o=e.split("."),s=i;for(let a=0;a<o.length;a++){let u=o[a];if(u.includes("[x]")){let p=n[o.slice(0,a+1).join(".")].type[0].code;u=u.replace("[x]",k(p))}if(a===o.length-1){let l=Array.isArray(s)?s:[s];for(let p of l)t.fixed?p[u]??=t.fixed.value:t.pattern&&(p[u]=Jo(p[u],t.pattern.value))}else{if(!(u in s)){let l=o.slice(0,a+1).join(".");s[u]=n[l].isArray?[Object.create(null)]:Object.create(null)}s=s[u]}}return i}function Jo(r,e){if(Array.isArray(e)&&(Array.isArray(r)||r===void 0))return(r?.length??0)>0?r:Te(e);if(R(e)&&(R(r)&&!Array.isArray(r)||r===void 0)){let t=Te(r)??Object.create(null);for(let n of Object.keys(e))t[n]=Jo(t[n],e[n]);return t}return r}function li(r,e){if(!r.group)throw new f(b("ConceptMap does not specify a mapping group","ConceptMap.group"));let t=Ko(e),n=pl(t,e.targetsystem?r.group.filter(o=>o.target===e.targetsystem):r.group),i=n.length>0;return{result:i,match:i?n:void 0}}function Ko(r){let e=Object.create(null);if(r.code&&!r.coding&&!r.codeableConcept){if(!r.system)throw new f(b("System parameter must be provided with code"));e[r.system]=[r.code]}else if(r.coding&&!r.code&&!r.codeableConcept)r.coding.code&&(e[r.coding.system??""]=[r.coding.code]);else if(r.codeableConcept&&!r.code&&!r.coding)for(let{system:t,code:n}of r.codeableConcept.coding??[])n&&(e[t??""]=G(e[t??""],n));else throw r.code||r.coding||r.codeableConcept?new f(b("Ambiguous input: multiple source codings provided")):new f(b("Source Coding (system + code) must be specified"));return e}function pl(r,e){let t=[];for(let[n,i]of Object.entries(r))for(let o of e.filter(s=>(s.source??"")===n)){let s=o.element?.filter(a=>i.includes(a.code)).flatMap(a=>a.target?.map(u=>({equivalence:u.equivalence,concept:{system:o.target,code:u.code,display:u.display}}))??[]);s?.length||(s=dl(i,o)),s&&t.push(...s)}return t}function dl(r,e){switch(e.unmapped?.mode){case"provided":return r.map(t=>({equivalence:"equal",concept:{system:e.target,code:t}}));case"fixed":return[{equivalence:"equivalent",concept:{system:e.target,code:e.unmapped.code,display:e.unmapped.display}}];default:return}}var fl=[...Vt,"->","<<",">>","=="];function Xo(r){return new me(r,kt,fl).tokenize()}var hl={"-":"disjoint","==":"equal"},pi=class{constructor(e){c(this,"parser");c(this,"structureMap",{resourceType:"StructureMap",status:"active"});this.parser=e}parse(){for(;this.parser.hasMore();){let e=this.parser.peek()?.value;switch(e){case"map":this.parseMap();break;case"uses":this.parseUses();break;case"imports":this.parseImport();break;case"group":this.parseGroup();break;case"conceptmap":this.parseConceptMap();break;default:throw new Error(`Unexpected token: ${e}`)}}return this.structureMap}parseMap(){this.parser.consume("Symbol","map"),this.structureMap.url=this.parser.consume("String").value,this.parser.consume("="),this.structureMap.name=this.parser.consume().value}parseUses(){this.parser.consume("Symbol","uses");let e={};e.url=this.parser.consume("String").value,this.parser.peek()?.value==="alias"&&(this.parser.consume("Symbol","alias"),e.alias=this.parser.consume("Symbol").value),this.parser.consume("Symbol","as"),e.mode=this.parser.consume().value,this.structureMap.structure||(this.structureMap.structure=[]),this.structureMap.structure.push(e)}parseImport(){this.parser.consume("Symbol","imports"),this.structureMap.import||(this.structureMap.import=[]),this.structureMap.import.push(this.parser.consume("String").value)}parseGroup(){let e={};this.parser.consume("Symbol","group"),e.name=this.parser.consume("Symbol").value,e.input=this.parseParameters(),this.parser.peek()?.value==="extends"&&(this.parser.consume("Symbol","extends"),e.extends=this.parser.consume("Symbol").value),this.parser.peek()?.value==="<<"?(this.parser.consume("<<"),e.typeMode=this.parser.consume().value,this.parser.peek()?.value==="+"&&(this.parser.consume("+"),e.typeMode="type-and-types"),this.parser.consume(">>")):e.typeMode="none",e.rule=this.parseRules(),this.structureMap.group||(this.structureMap.group=[]),this.structureMap.group.push(e)}parseParameters(){let e=[];for(this.parser.consume("(");this.parser.hasMore()&&this.parser.peek()?.value!==")";)e.push(this.parseParameter()),this.parser.peek()?.value===","&&this.parser.consume(",");return this.parser.consume(")"),e}parseParameter(){let e={};return e.mode=this.parser.consume().value,e.name=this.parser.consume("Symbol").value,this.parser.peek()?.value===":"&&(this.parser.consume(":"),e.type=this.parser.consume("Symbol").value),e}parseRules(){let e=[];for(this.parser.consume("{");this.parser.hasMore()&&this.parser.peek()?.value!=="}";)e.push(this.parseRule());return this.parser.consume("}"),e}parseRule(){let e={source:this.parseRuleSources()};return this.parser.peek()?.value==="->"&&(this.parser.consume("->"),e.target=this.parseRuleTargets()),this.parser.peek()?.value==="then"&&(this.parser.consume("Symbol","then"),this.parser.peek()?.id==="{"?e.rule=this.parseRules():e.dependent=this.parseRuleDependents()),this.parser.peek()?.id==="String"?e.name=this.parser.consume().value:e.name=e.source?.[0]?.element,this.parser.consume(";"),e}parseRuleSources(){this.parser.hasMore()&&this.parser.peek()?.value==="for"&&this.parser.consume("Symbol","for");let e=[this.parseRuleSource()];for(;this.parser.hasMore()&&this.parser.peek()?.value===",";)this.parser.consume(","),e.push(this.parseRuleSource());return e}parseRuleSource(){let e={},n=this.parseRuleContext().split(".");if(e.context=n[0],e.element=n[1],this.parser.hasMore()&&this.parser.peek()?.value===":"&&(this.parser.consume(":"),e.type=this.parser.consume().value),this.parser.hasMore()&&this.parser.peek()?.value==="default"&&(this.parser.consume("Symbol","default"),e.defaultValueString=this.parser.consume("String").value),(this.parser.peek()?.value==="first"||this.parser.peek()?.value==="not_first"||this.parser.peek()?.value==="last"||this.parser.peek()?.value==="not_last"||this.parser.peek()?.value==="only_one")&&(e.listMode=this.parser.consume().value),this.parser.peek()?.value==="as"&&(this.parser.consume("Symbol","as"),e.variable=this.parser.consume().value),this.parser.peek()?.value==="log"&&(this.parser.consume("Symbol","log"),e.logMessage=this.parser.consume().value),this.parser.peek()?.value==="where"){this.parser.consume("Symbol","where");let i=this.parser.consumeAndParse(x.Arrow);e.condition=i.toString()}if(this.parser.peek()?.value==="check"){this.parser.consume("Symbol","check");let i=this.parser.consumeAndParse(x.Arrow);e.check=i.toString()}return e}parseRuleTargets(){let e=[this.parseRuleTarget()];for(;this.parser.hasMore()&&this.parser.peek()?.value===",";)this.parser.consume(","),e.push(this.parseRuleTarget());return e}parseRuleTarget(){let e={},n=this.parseRuleContext().split(".");return e.contextType="variable",e.context=n[0],e.element=n[1],this.parser.peek()?.value==="="&&(this.parser.consume("="),this.parseRuleTargetTransform(e)),this.parser.peek()?.value==="as"&&(this.parser.consume("Symbol","as"),e.variable=this.parser.consume().value),this.parser.peek()?.value==="share"&&(this.parser.consume("Symbol","share"),e.listMode=["share"],this.parser.consume("Symbol")),(this.parser.peek()?.value==="first"||this.parser.peek()?.value==="last"||this.parser.peek()?.value==="collate")&&(e.listMode=[this.parser.consume().value]),e}parseRuleTargetTransform(e){let t=this.parser.consumeAndParse(x.As);t instanceof re?(e.transform=t.name,e.parameter=t.args?.map(Yo)):t instanceof U||t instanceof _?(e.transform="copy",e.parameter=[Yo(t)]):(e.transform="evaluate",e.parameter=[{valueString:t.toString()}])}parseRuleContext(){let e=this.parser.consume().value;for(;this.parser.peek()?.value===".";)this.parser.consume("."),e+="."+this.parser.consume().value;return e}parseRuleDependents(){let e=this.parser.consumeAndParse(x.Arrow);return[{name:e.name,variable:e.args.map(t=>t.name)}]}parseConceptMap(){this.parser.consume("Symbol","conceptmap");let e={resourceType:"ConceptMap",status:"active",url:"#"+this.parser.consume("String").value};this.parser.consume("{");let t={},n=this.parser.peek()?.value;for(;n!=="}";)n==="prefix"?this.parseConceptMapPrefix(t):this.parseConceptMapRule(e,t),n=this.parser.peek()?.value;this.parser.consume("}"),this.structureMap.contained||(this.structureMap.contained=[]),this.structureMap.contained.push(e)}parseConceptMapPrefix(e){this.parser.consume("Symbol","prefix");let t=this.parser.consume().value;this.parser.consume("=");let n=this.parser.consume().value;e[t]=n}parseConceptMapRule(e,t){let n=this.parser.consume().value,i=t[n];this.parser.consume(":");let o=this.parser.consume().value,s=hl[this.parser.consume().value],a=this.parser.consume().value,u=t[a];this.parser.consume(":");let l=this.parser.consume().value,p=e?.group?.find(y=>y.source===i&&y.target===u);p||(p={source:i,target:u,element:[]},e.group||(e.group=[]),e.group.push(p)),p.element||(p.element=[]),p.element.push({code:o,target:[{code:l,equivalence:s}]})}};function Yo(r){if(r instanceof _)return{valueId:r.name};if(r instanceof U)return ml(r);throw new Error(`Unknown parameter atom type: ${r.constructor.name} (${r.toString()})`)}function ml(r){switch(r.value.type){case"boolean":return{valueBoolean:r.value.value};case"decimal":return{valueDecimal:r.value.value};case"integer":return{valueInteger:r.value.value};case"dateTime":case"string":return{valueString:r.value.value};default:throw new Error("Unknown target literal type: "+r.value.type)}}var yl=Ke().registerInfix("->",{precedence:x.Arrow}).registerInfix(";",{precedence:x.Semicolon});function gl(r){let e=yl.construct(Xo(r));return e.removeComments(),new pi(e).parse()}var Br=class{constructor(e=[]){c(this,"resources");this.resources=e}get(e,t){let n=[];for(let i of this.resources)i.resourceType===e&&i.url&&this.matchesUrl(i.url,t)&&n.push(i);return n}matchesUrl(e,t){if(t.includes("*")){let n=t.split("*");return e.startsWith(n[0])&&e.endsWith(n[1])}else return e===t}};function xl(r,e,t=new Br){return vl({root:r,transformMaps:t},r,e)}function vl(r,e,t){return Tl(r,e),es(r,e),fi(r,e.group[0],t)}function Tl(r,e){let t=qr(r);if(t&&e.import)for(let n of e.import){let i=t.get("StructureMap",n);for(let o of i)es(r,o)}}function es(r,e){let t=qr(r);if(t&&e.contained)for(let n of e.contained)(n.resourceType==="StructureMap"||n.resourceType==="ConceptMap")&&t.resources.push(n);if(e.group)for(let n of e.group)Wr(r,n.name,{type:"StructureMapGroup",value:n})}function fi(r,e,t){let n=[],i=[];for(let l of e.input)l.mode==="source"&&n.push(l),l.mode==="target"&&i.push(l);if(n.length===0)throw new Error("Missing source definitions");if(i.length===0)throw new Error("Missing target definitions");if(t.length<n.length)throw new Error(`Not enough arguments (got ${t.length}, min ${n.length})`);if(t.length>n.length+i.length)throw new Error(`Too many arguments (got ${t.length}, max ${n.length+i.length})`);let o={},s=[],a=0;for(let l of n)Ht(o,l.name,t[a++]);for(let l of i){let p=t[a++]??{type:l.type??"BackboneElement",value:{}};Ht(o,l.name,p),s.push(p)}let u={root:r.root,parent:r,variables:o};if(e.rule)for(let l of e.rule)ts(u,l);return s}function ts(r,e){e.source&&rs(r,e,0)}function rs(r,e,t){let n=e.source[t];for(let i of Rl(r,n))Wr(r,"_",i),n.variable&&Wr(r,n.variable,i),t<e.source.length-1?rs(r,e,t+1):Sl(r,e)}function Sl(r,e){if(!bl(r,e)){if(e.target)for(let t of e.target)ns(r,t);if(e.rule)for(let t of e.rule)ts(r,t);if(e.dependent)for(let t of e.dependent)Ml(r,t)}}function bl(r,e){if(e.target?.length!==1||e.target[0].transform||e.rule||e.dependent)return!1;let t=Ce(r,"_");if(Array.isArray(t)&&(t=t[0]),!t)return!1;let n=El(r,t);if(!n)return ns(r,{...e.target[0],transform:"copy",parameter:[{valueId:"_"}]}),!0;let i=e.target[0],o=Ce(r,i.context),s=o.value[i.element],a=os(o,i.element)||Array.isArray(s),u={root:r.root,parent:r,variables:{}},l=fi(u,n,[t]);return is(r,i,o,l,a,s),!0}function El(r,e){let t=r;for(;t;){if(t.variables)for(let n of Object.values(t.variables)){let i=di(n);for(let o of i)if(o.type==="StructureMapGroup"){let s=o.value;if((s.typeMode==="types"||s.typeMode==="type-and-types")&&s.input.length===2&&s.input[0].mode==="source"&&s.input[0].type===e.type&&s.input[1].mode==="target")return s}}t=t.parent}}function Rl(r,e){let t=Ce(r,e.context);if(!t)return[];let n=e.element;if(!n)return[t];let i=C(n,[t]);if(!i||i.length===0)return[];if(e.condition&&!Zo(t,{[e.variable]:i[0]},e.condition))return[];if(e.check&&!Zo(t,{[e.variable]:i[0]},e.check))throw new Error("Check failed: "+e.check);return e.listMode&&(i=Cl(e,i)),i}function Zo(r,e,t){return F(C(t,[r],e))}function Cl(r,e){switch(r.listMode){case"first":return[e[0]];case"not_first":return e.slice(1);case"last":return[e.at(-1)];case"not_last":return e.slice(0,e.length-1);case"only_one":if(e.length!==1)throw new Error("Expected only one value");break}return e}function ns(r,e){let t=Ce(r,e.context);if(!t)throw new Error("Target not found: "+e.context);let n=t.value[e.element],i,o=os(t,e.element)||Array.isArray(n);if(e.transform)switch(e.transform){case"append":i=Pl(r,e);break;case"cast":i=wl(r,e);break;case"cc":i=Al(r,e);break;case"copy":i=Ol(r,e);break;case"create":i=Il(r,e);break;case"evaluate":i=kl(r,e);break;case"translate":i=Vl(r,e);break;case"truncate":i=Dl(r,e);break;case"uuid":i=[{type:"string",value:ie()}];break;default:throw new Error(`Unsupported transform: ${e.transform}`)}else{let s=ss(t,e.element)?.type,a=s?.length===1?s[0].code:void 0;o||n===void 0?i=[a?{type:a,value:{}}:T({})]:i=[a?{type:a,value:n}:T(n)]}is(r,e,t,i,o,n)}function is(r,e,t,n,i,o){if(n.length!==0){if(i){o||(o=[],Ht(t.value,e.element,o));for(let s of n)o.push(s.value)}else Ht(t.value,e.element,n[0].value);e.variable&&Wr(r,e.variable,_l(n))}}function os(r,e){return ss(r,e)?.isArray}function ss(r,e){return qe(r.type)?.elements?.[e]}function Pl(r,e){let t=W(r,e.parameter?.[0])?.[0]?.value,n=W(r,e.parameter?.[1])?.[0]?.value;return[{type:"string",value:(t??"").toString()+(n??"").toString()}]}function wl(r,e){let t=W(r,e.parameter?.[0])?.[0];return W(r,e.parameter?.[1])?.[0]?.value==="string"?[{type:"string",value:t?.value?.toString()}]:[t]}function Al(r,e){let t=e.parameter;if(t.length===2){let n=W(r,t[0])?.[0]?.value,i=W(r,t[1])?.[0]?.value;return[{type:"CodeableConcept",value:{coding:[{system:n,code:i}]}}]}else return[{type:"CodeableConcept",value:{text:W(r,t[0])?.[0]?.value}}]}function Ol(r,e){return e.parameter.flatMap(t=>W(r,t))}function Il(r,e){let t={};return e.parameter&&e.parameter.length>0&&(t.resourceType=W(r,e.parameter?.[0])?.[0]?.value),[T(t)]}function kl(r,e){let n=W(r,e.parameter?.[0])[0].value;return C(n,[],as(r))}function Vl(r,e){let t=e.parameter.flatMap(u=>W(r,u)),n=t[0].value,i=t[1].value,s=qr(r)?.get("ConceptMap",i)[0];if(!s)throw new Error("ConceptMap not found: "+i);let a=li(s,{system:s.group?.[0]?.source,code:n});return[T(a.match?.[0]?.concept?.code)]}function Dl(r,e){let t=W(r,e.parameter?.[0])?.[0],n=W(r,e.parameter?.[1])?.[0]?.value;return t.type==="string"?[{type:"string",value:t.value.substring(0,n)}]:[t]}function Ml(r,e){let t=Ce(r,e.name);if(!t)throw new Error("Dependent group not found: "+e.name);let n=e.variable,i=[];for(let s of n){let a=Ce(r,s);if(!a)throw new Error("Dependent variable not found: "+s);i.push(a)}let o={root:r.root,parent:r,variables:{}};fi(o,t.value,i)}function qr(r){if(r.transformMaps)return r.transformMaps;if(r.parent)return qr(r.parent)}function W(r,e){let n=I({type:"StructureMapGroupRuleTargetParameter",value:e},"value");if(!n)throw new Error("Missing target parameter: "+JSON.stringify(e));if(n=di(n),n.length===1&&n[0].type==="id"){let i=Ce(r,n[0].value);if(!i)throw new Error("Variable not found: "+n[0].value);return di(i)}return n}function Ce(r,e){let t=r.variables?.[e];if(t)return t;if(r.parent)return Ce(r.parent,e)}function as(r,e={}){if(r.parent&&as(r.parent,e),r.variables)for(let[t,n]of Object.entries(r.variables))e[t]=n,e["%"+t]=n;return e}function Wr(r,e,t){r.variables||(r.variables={}),Ht(r.variables,e,t)}function Ht(r,e,t){if(e==="__proto__"||e==="constructor"||e==="prototype")throw new Error("Invalid key: "+e);r[e]=t}function di(r){return Array.isArray(r)?r:[r]}function _l(r){return r.length===1?r[0]:r}var Ll=" ".repeat(2),hi=class{constructor(e=Ll,t=!0){c(this,"indent");c(this,"b");c(this,"indentCount");this.indent=e,this.b=[],this.indentCount=0,t&&(this.appendNoWrap("// SPDX-FileCopyrightText: Copyright Orangebot, Inc. and Medplum contributors"),this.appendNoWrap("// SPDX-License-Identifier: Apache-2.0"),this.appendNoWrap("/*"),this.appendNoWrap(" * This is a generated file"),this.appendNoWrap(" * Do not edit manually."),this.appendNoWrap(" */"),this.newLine())}newLine(){this.b.push(`
|
|
45
45
|
`)}appendNoWrap(e){this.b.push(this.indent.repeat(this.indentCount)),this.b.push(e),this.b.push(`
|
|
46
46
|
`)}append(e){let t=this.indent.repeat(this.indentCount)+e;if(t.length<160)this.b.push(t),this.b.push(`
|
|
47
|
-
`);else{let n=!0;for(let i of
|
|
47
|
+
`);else{let n=!0;for(let i of cs(t,120-this.indent.length*this.indentCount))n?this.b.push(this.indent.repeat(this.indentCount)):this.b.push(this.indent.repeat(this.indentCount+2)),this.b.push(i.trim()),this.b.push(`
|
|
48
48
|
`),n=!1}}toString(){return this.b.join("").replaceAll(`
|
|
49
49
|
|
|
50
50
|
|
|
51
51
|
`,`
|
|
52
52
|
|
|
53
|
-
`)}};function
|
|
54
|
-
`)};r.name&&r.name!=="Error"&&(n.name=r.name),r.message&&(n.message=r.message),"cause"in r&&r.cause!==void 0&&(r.cause instanceof Error?n.cause=Jt(r.cause,e+1,t):n.cause=r.cause);let i=Object.getOwnPropertyNames(r).filter(o=>!["name","message","stack","cause"].includes(o));for(let o of i)try{let s=r[o];s instanceof Error?n[o]=Jt(s,e+1,t):n[o]=s}catch{}return n}function Gl(r){if(!r)throw new f(g("Resource type is null"));if(!ct(r))throw new f(g("Unknown resource type"))}function xi(r,e,t){r===null?t.push(S(e,"Invalid null value")):Array.isArray(r)?Ql(r,e,t):typeof r=="object"&&zl(r,e,t)}function Ql(r,e,t){for(let n=0;n<r.length;n++)r[n]===void 0?t.push(S(`${e}[${n}]`,"Invalid undefined value")):xi(r[n],`${e}[${n}]`,t)}function zl(r,e,t){for(let[n,i]of Object.entries(r))xi(i,`${e}${e?".":""}${n}`,t)}function Jl(r){return{resourceType:"SearchParameter",code:r.code+":identifier",base:r.base,type:"token",expression:`(${r.expression}).identifier`}}function vi(r){return r.match(/^\((.+)\)\.identifier$/)?.[1]}function Ti(r,e){return new fe(r,new z(e,new _("identifier")))}var oe={BOOLEAN:"BOOLEAN",NUMBER:"NUMBER",QUANTITY:"QUANTITY",TEXT:"TEXT",REFERENCE:"REFERENCE",CANONICAL:"CANONICAL",DATE:"DATE",DATETIME:"DATETIME",PERIOD:"PERIOD",UUID:"UUID"};function Kl(r,e){let t=N.types[r]?.searchParamsDetails?.[e.code];return t||(t=Yl(r,e)),t}function Xl(r,e,t){let n=N.types[r];n||(n={},N.types[r]=n),n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=t}function Yl(r,e){let t=e.code,n=e.expression,i=bi(r,n),o={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let u of i){let l=jr(u),p=_n(()=>l.join("."));l.length===1&&l[0]instanceof P?o.propertyTypes.add("boolean"):e.code.endsWith(":identifier")?o.propertyTypes.add("Identifier"):p().endsWith("extension.value.code")||p().endsWith("extension.value.coding.code")?(o.array=!0,o.propertyTypes.clear(),o.propertyTypes.add("code")):ps(o,l,r,1),p().endsWith("extension.valueDateTime")&&(o.array=!1,o.propertyTypes.clear(),o.propertyTypes.add("dateTime"))}let s;if(e.code.endsWith(":identifier")){let u=vi(n);if(u===void 0)throw new Error(`Unexpected expression for derived identifier search parameter: ${n}`);let l=Si(r,u);s=Ti(n,l)}else s=Si(r,n);let a={type:tp(e,o.propertyTypes),elementDefinitions:o.elementDefinitions.map(u=>({...u,type:u.type?.filter(l=>o.propertyTypes.has(l.code))})).filter(u=>u.type&&u.type.length>0),parsedExpression:s,array:o.array};return Xl(r,t,a),a}function ps(r,e,t,n){let i=e[n];if(i instanceof he){r.propertyTypes.add(i.right.toString());return}if(i instanceof re){Zl(r,i);return}let o=i.toString(),s=ht(t,o);if(!s)throw new Error(`Element definition not found for ${t} ${o}`);let a=!1,u=n+1;u<e.length&&e[u]instanceof Ee&&(a=!0,u++);let l=e[u];if(s.isArray&&!a&&(r.array=!0),u===e.length-1&&l instanceof he){r.elementDefinitions.push(s),r.propertyTypes.add(l.right.toString());return}if(u>=e.length){r.elementDefinitions.push(s);for(let p of s.type)r.propertyTypes.add(p.code);return}for(let p of s.type){let y=p.code;ep(y)&&(y=s.type[0].code),ps(r,e,y,u)}}function Zl(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 be){r.propertyTypes.add(e.args[0].right.toString());return}throw new Error(`Unhandled FHIRPath function: ${e.name}`)}function ep(r){return r==="Element"||r==="BackboneElement"}function tp(r,e){switch(r.type){case"date":return e.size===1&&e.has(d.date)?oe.DATE:oe.DATETIME;case"number":return oe.NUMBER;case"quantity":return oe.QUANTITY;case"reference":return e.has(d.canonical)?oe.CANONICAL:oe.REFERENCE;case"token":return e.size===1&&e.has(d.boolean)?oe.BOOLEAN:oe.TEXT;default:return oe.TEXT}}function bi(r,e){let t=[],n=Dt(e);return $r(r,n.child,t),t}function rp(r,e){let t=bi(r,e);if(t.length!==0)return t.map(n=>n.toString()).join(" | ")}function Si(r,e){let t=[],n=Dt(e);if($r(r,n.child,t),t.length===0)return n;let i=t[0];for(let o=1;o<t.length;o++)i=new Se(i,t[o]);return new fe("<original-not-available>",i)}function $r(r,e,t){e instanceof Se?($r(r,e.left,t),$r(r,e.right,t)):e.toString().includes(r+".")&&t.push(e)}function jr(r){if(r instanceof he||r instanceof Ee)return[jr(r.left),r].flat();if(r instanceof P)return[r];if(r instanceof z)return[jr(r.left),jr(r.right)].flat();if(r instanceof re){if(r.name==="where"&&!(r.args[0]instanceof be))return[];if(r.name==="last")return[]}return[r]}function np(r){let e=[];return new Promise((t,n)=>{r.on("data",i=>e.push(Buffer.from(i))),r.on("error",i=>{r.destroy(),n(i)}),r.on("end",()=>{t(Buffer.concat(e))}),r.on("close",()=>{r.destroy()})})}function ip(r,e){let t=[];for(let n of e)t.push(...op(r,n));return t}function op(r,e){if(!r.resource)throw new Error("Resource type is required");if(r.resource!==e.resourceType)return[];let t={};if(r.constant)for(let i of r.constant){let o={type:"ViewDefinitionConstant",value:i};t["%"+i.name]=I(o,"value")}let n=T(e);if(r.where)for(let i of r.where){let o=C(i.path,[n],t);if(o.length!==1)return[];if(o[0].type!=="boolean")throw new Error("WHERE clause must evaluate to a boolean");if(!o[0].value)return[]}return Ei(r,n,t)}function Ei(r,e,t){let n=[],i;r.forEach?i=C(r.forEach,[e],t):r.forEachOrNull?i=C(r.forEachOrNull,[e],t):i=[e];for(let o of i){let s=[];for(let a of r.column??[]){let u=C(a.path,[o],t),l;if(u.length===0)l={[a.name]:null};else if(a.collection)l={[a.name]:u.map(p=>p.value)};else if(u.length===1)l={[a.name]:u[0].value};else throw new Error("Multiple values found but not expected for column");s.push([l])}for(let a of r.select??[]){let u=Ei(a,o,t);s.push(u)}if(r.unionAll){let a=[];for(let u of r.unionAll)for(let l of Ei(u,o,t))a.push(l);s.push(a)}n.push(...sp(s))}if(i.length===0&&r.forEachOrNull){let o={};for(let s of r.column??[])o[s.name]=null;n.push(o)}return n}function sp(r){if(r.length===0)return[];let e=r[0];for(let t=1;t<r.length;t++)e=ap(e,r[t]);return e}function ap(r,e){let t=[];for(let n of r)for(let i of e)t.push(cp(n,i));return t}function cp(r,e){let t={};return Object.assign(t,r),Object.assign(t,e),t}var ds="https://meta.medplum.com/releases",Hr=new Map;function up(){Hr.clear()}function fs(r){let e=r;if(!e.tag_name)throw new Error("Manifest missing tag_name");let t=e.assets;if(!t?.length)throw new Error("Manifest missing assets list");for(let n of t){if(!n.browser_download_url)throw new Error("Asset missing browser download URL");if(!n.name)throw new Error("Asset missing name")}}async function Gr(r,e,t){let n=Hr.get(e??"latest");if(!n){let i=e?`v${e}`:"latest",o=new URL(`${ds}/${i}.json`);if(o.searchParams.set("a",r),o.searchParams.set("c",Mr),t)for(let[u,l]of Object.entries(t))o.searchParams.set(u,l);let s=await fetch(o.toString());if(s.status!==200){let u;try{u=(await s.json()).message}catch(l){console.error(`Failed to parse message from body: ${Ae(l)}`)}throw new Error(`Received status code ${s.status} while fetching manifest for version '${e??"latest"}'. Message: ${u}`)}let a=await s.json();fs(a),n=a,Hr.set(e??"latest",n),e||Hr.set(n.tag_name.slice(1),n)}return n}function hs(r){return/^\d+\.\d+\.\d+(-[0-9a-z]{7})?$/.test(r)}async function lp(r,e){if(!hs(e))return!1;try{await Gr(r,e)}catch{return!1}return!0}async function pp(r){let e=await Gr(r);if(!e.tag_name.startsWith("v"))throw new Error(`Invalid release name found. Release tag '${e.tag_name}' did not start with 'v'`);return e.tag_name.slice(1)}async function dp(r,e){try{let t=Mr.split("-")[0],i=(await Gr(r,void 0,e)).tag_name.slice(1);t!==i&&console.warn(`A new version (v${i}) of Medplum is available. Your current version (v${t}) may be missing important updates and bug fixes.`)}catch(t){console.warn(`Failed to check for newer version: ${Ae(t)}`)}}0&&(module.exports={AccessPolicyInteraction,AckCode,AndAtom,ArithemticOperatorAtom,AsAtom,BooleanInfixOperatorAtom,CPT,ClientStorage,ConcatAtom,ContainsAtom,ContentType,DEFAULT_ACCEPT,DEFAULT_MAX_SEARCH_COUNT,DEFAULT_SEARCH_COUNT,DataSampler,DotAtom,EmptySetAtom,EqualsAtom,EquivalentAtom,EventTarget,ExternalSecretSystems,FHIRCAST_EVENT_NAMES,FHIRCAST_EVENT_RESOURCES,FHIRCAST_EVENT_VERSION_REQUIRED,FHIRCAST_RESOURCE_TYPES,FhirFilterComparison,FhirFilterConnective,FhirFilterNegation,FhirPathAtom,FhircastConnection,FileBuilder,FunctionAtom,HTTP_HL7_ORG,HTTP_TERMINOLOGY_HL7_ORG,Hl7Context,Hl7Field,Hl7Message,Hl7Segment,ICD10,ImpliesAtom,InAtom,IndexerAtom,InfixOperatorAtom,IsAtom,LOINC,LRUCache,LiteralAtom,LogLevel,LogLevelNames,Logger,MEDPLUM_CLI_CLIENT_ID,MEDPLUM_RELEASES_URL,MEDPLUM_VERSION,MedplumClient,MedplumKeyValueClient,MemoryStorage,MockAsyncClientStorage,NDC,NotEqualsAtom,NotEquivalentAtom,OAuthClientAssertionType,OAuthGrantType,OAuthSigningAlgorithm,OAuthTokenAuthMethod,OAuthTokenType,OperationOutcomeError,Operator,OperatorPrecedence,OrAtom,Parser,ParserBuilder,PrefixOperatorAtom,PropertyType,RXNORM,ReadablePromise,ReconnectingWebSocket,SNOMED,SearchParameterType,SubscriptionEmitter,SubscriptionManager,SymbolAtom,Tokenizer,TransformMapCollection,TypedEventTarget,UCUM,UnaryOperatorAtom,UnionAtom,VALID_HOSTNAME_REGEX,XorAtom,accepted,accessPolicySupportsInteraction,addProfileToResource,allOk,append,applyDefaultValuesToElement,applyDefaultValuesToResource,applyFixedOrPatternValue,arrayBufferToBase64,arrayBufferToHex,arrayify,assert,assertContextVersionOptional,assertOk,assertReleaseManifest,badRequest,booleanToTypedValue,buildCdsRequest,buildElementsContext,buildTypeName,businessRule,calculateAge,calculateAgeString,canReadResourceType,canWriteResource,canWriteResourceType,capitalize,checkForNull,checkIfValidMedplumVersion,clearReleaseCache,compressElement,concatUrls,conceptMapTranslate,conflict,convertContainedResourcesToBundle,convertToSearchableDates,convertToSearchableNumbers,convertToSearchableQuantities,convertToSearchableReferences,convertToSearchableStrings,convertToSearchableTokens,convertToSearchableUris,convertToTransactionBundle,crawlTypedValue,crawlTypedValueAsync,createConstraintIssue,createFhircastMessagePayload,createOperationOutcomeIssue,createProcessingIssue,createReference,createStructureIssue,created,decodeBase64,decodeBase64Url,deepClone,deepEquals,deepIncludes,deriveIdentifierSearchParameter,encodeBase64,encodeBase64Url,encryptSHA256,ensureNoLeadingSlash,ensureTrailingSlash,escapeHtml,evalFhirPath,evalFhirPathTyped,evalSqlOnFhir,expandSampledData,expandSampledObservation,extractAccountReferences,fetchLatestVersionString,fetchVersionManifest,fhirPathArrayEquals,fhirPathArrayEquivalent,fhirPathArrayNotEquals,fhirPathEquals,fhirPathEquivalent,fhirPathIs,fhirPathNot,fhirTypeToJsType,findCodeBySystem,findObservationInterval,findObservationReferenceRange,findObservationReferenceRanges,findResourceByCode,findResourceInBundle,flatMapFilter,forbidden,formatAddress,formatCodeableConcept,formatCoding,formatDate,formatDateTime,formatFamilyName,formatGivenName,formatHl7DateTime,formatHumanName,formatMoney,formatObservationValue,formatPeriod,formatQuantity,formatRange,formatReferenceString,formatSearchQuery,formatTime,formatTiming,generateId,getAllDataTypes,getAllQuestionnaireAnswers,getBuffer,getCodeBySystem,getDataType,getDateProperty,getDefaultValuesForNewSliceEntry,getDisplayString,getElementDefinition,getElementDefinitionFromElements,getElementDefinitionTypeName,getExpressionForResourceType,getExpressionsForResourceType,getExtension,getExtensionValue,getIdentifier,getImageSrc,getInnerDerivedIdentifierExpression,getNestedProperty,getParsedDerivedIdentifierExpression,getParsedExpressionForResourceType,getPathDifference,getPathDisplayName,getPropertyDisplayName,getQueryString,getQuestionnaireAnswers,getRandomString,getReferenceString,getResourceTypes,getSearchParameter,getSearchParameterDetails,getSearchParameters,getStatus,getTypedPropertyValue,getTypedPropertyValueWithPath,getTypedPropertyValueWithSchema,getTypedPropertyValueWithoutSchema,getValueSliceName,getWebSocketUrl,getWindow,globalSchema,gone,indexConceptMapCodings,indexDefaultSearchParameters,indexSearchParameter,indexSearchParameterBundle,indexStructureDefinitionBundle,inflateBaseSchema,inflateElement,initFhirPathParserBuilder,invalidSearchOperator,isAccepted,isBrowserEnvironment,isCodeableConcept,isCoding,isCompletedSubscriptionRequest,isComplexTypeCode,isConflict,isContextVersionRequired,isCreated,isDataTypeLoaded,isDateString,isDateTimeString,isEmpty,isError,isFhirCriteriaMet,isFhircastResourceType,isGone,isJwt,isLowerCase,isMedplumAccessToken,isNodeEnvironment,isNotFound,isObject,isOk,isOperationOutcome,isPeriod,isPopulated,isPrimitiveType,isProfileLoaded,isProfileResource,isQuantity,isQuantityEquivalent,isRedirect,isReference,isResource,isResourceType,isResourceTypeSchema,isResourceWithId,isSliceDefinitionWithTypes,isString,isStringArray,isTextObject,isTypedValue,isUUID,isUnauthenticated,isValidDate,isValidHostname,isValidMedplumSemver,lazy,loadDataType,locationUtils,mapByIdentifier,matchDiscriminant,matchesRange,matchesSearchRequest,multipleMatches,normalizeArrayBufferView,normalizeCreateBinaryOptions,normalizeCreatePdfOptions,normalizeErrorString,normalizeOperationOutcome,notFound,notModified,operationOutcomeIssueToString,operationOutcomeToString,parseFhirPath,parseFilterParameter,parseHl7DateTime,parseJWTPayload,parseLogLevel,parseMappingLanguage,parseParameter,parseReference,parseSearchRequest,parseStructureDefinition,parseXFhirQuery,preciseEquals,preciseGreaterThan,preciseGreaterThanOrEquals,preciseLessThan,preciseLessThanOrEquals,preciseRound,preconditionFailed,projectAdminResourceTypes,protectedResourceTypes,readInteractions,redirect,removeDuplicates,removeProfileFromResource,reorderBundle,resolveId,resourceMatchesSubscriptionCriteria,satisfiedAccessPolicy,serializeError,serializeFhircastSubscriptionRequest,serverError,serverTimeout,setCodeBySystem,setIdentifier,singleton,singularize,sleep,sortStringArray,splitN,splitSearchOnComma,streamToBuffer,stringify,stringifyTypedValue,structureMapTransform,subsetResource,summarizeObservations,toJsBoolean,toPeriod,toTypedValue,tooManyRequests,trimTrailingEmptyElements,tryGetDataType,tryGetJwtExpiration,tryGetProfile,typedValueToString,unauthorized,unauthorizedTokenAudience,unauthorizedTokenExpired,unsupportedMediaType,validateFhircastSubscriptionRequest,validateResource,validateResourceType,validateTypedValue,validationError,validationRegexes,warnIfNewerVersionAvailable,wordWrap});
|
|
53
|
+
`)}};function cs(r,e){let t=[],n=[],i=0;return r.split(" ").forEach(function(o){i+o.length>e&&(t.push(n.join(" ").trim()),n=[],i=0),i+=o.length+1,n.push(o)}),n.length>0&&t.push(n.join(" ").trim()),t}var Fl=[...Vt,"eq","ne","co"];function us(r){return new me(r,kt,Fl,{dateTimeLiterals:!0,symbolRegex:/[^\s\])]/}).tokenize()}var Gt=class{constructor(e,t,n){c(this,"path");c(this,"operator");c(this,"value");this.path=e,this.operator=t,this.value=n}},Qt=class{constructor(e){c(this,"child");this.child=e}},zt=class{constructor(e,t,n){c(this,"keyword");c(this,"left");c(this,"right");this.keyword=e,this.left=t,this.right=n}};var Nl={eq:h.EXACT,ne:h.NOT_EQUALS,co:h.CONTAINS,sw:h.STARTS_WITH,ew:void 0,gt:h.GREATER_THAN,lt:h.LESS_THAN,ge:h.GREATER_THAN_OR_EQUALS,le:h.LESS_THAN_OR_EQUALS,ap:h.APPROXIMATELY,sa:h.STARTS_AFTER,eb:h.ENDS_BEFORE,pr:h.PRESENT,po:void 0,ss:void 0,sb:void 0,in:h.IN,ni:h.NOT_IN,re:h.EQUALS,identifier:h.IDENTIFIER};function Ul(r){let e=Nl[r];if(!e)throw new f(b("Invalid operator: "+r));return e}var mi=class{constructor(e){c(this,"parser");this.parser=e}parse(){let e;this.parser.peek()?.value==="("?(this.parser.consume("("),e=this.parse(),this.parser.consume(")")):this.parser.peek()?.value==="not"?(this.parser.consume("Symbol","not"),this.parser.consume("("),e=new Qt(this.parse()),this.parser.consume(")")):e=new Gt(this.parser.consume("Symbol").value,Ul(this.parser.consume("Symbol").value),this.parser.consume().value);let t=this.parser.peek()?.value;return t==="and"||t==="or"?(this.parser.consume("Symbol",t),new zt(t,e,this.parse())):e}},Bl=Ke();function Wl(r){let e=Bl.construct(us(r));return e.removeComments(),new mi(e).parse()}var ql={AA:"AA",AE:"AE",AR:"AR",CA:"CA",CE:"CE",CR:"CR"},jl={AA:"OK",AE:"Application Error",AR:"Application Reject",CA:"Commit Accept",CE:"Commit Error",CR:"Commit Reject"},ye=class{constructor(e="\r",t="|",n="^",i="~",o="\\",s="&"){c(this,"segmentSeparator");c(this,"fieldSeparator");c(this,"componentSeparator");c(this,"repetitionSeparator");c(this,"escapeCharacter");c(this,"subcomponentSeparator");this.segmentSeparator=e,this.fieldSeparator=t,this.componentSeparator=n,this.repetitionSeparator=i,this.escapeCharacter=o,this.subcomponentSeparator=s}getMsh1(){return this.fieldSeparator}getMsh2(){return this.componentSeparator+this.repetitionSeparator+this.escapeCharacter+this.subcomponentSeparator}},yi=class r{constructor(e,t=new ye){c(this,"context");c(this,"segments");this.context=t,this.segments=e}get header(){return this.segments[0]}get(e){return this.getSegment(e)}getAll(e){return this.getAllSegments(e)}getSegment(e){return typeof e=="number"?this.segments[e]:this.segments.find(t=>t.name===e)}getAllSegments(e){return this.segments.filter(t=>t.name===e)}toString(){return this.segments.map(e=>e.toString()).join(this.context.segmentSeparator)}buildAck(e){let t=new Date,n=this.getSegment("MSH"),i=n?.getField(3)?.toString()??"",o=n?.getField(4)?.toString()??"",s=n?.getField(5)?.toString()??"",a=n?.getField(6)?.toString()??"",u=n?.getField(10)?.toString()??"",l=n?.getField(12)?.toString()??"2.5.1",p=e?.ackCode??"AA";return new r([new nt(["MSH",this.context.getMsh2(),s,a,i,o,ls(t),"",this.buildAckMessageType(n),t.getTime().toString(),"P",l],this.context),new nt(["MSA",p,u,jl[p]],this.context),...e?.errSegment?[e.errSegment]:[]])}buildAckMessageType(e){let t=e?.getField(9),n=t?.getComponent(2),i=t?.getComponent(3),o="ACK";return n&&i?o=`ACK^${n}^ACK`:n&&(o=`ACK^${n}`),o}static parse(e){if(!e.startsWith("MSH")){let n=new Error("Invalid HL7 message");throw n.type="entity.parse.failed",n}let t=new ye("\r",e.charAt(3),e.charAt(4),e.charAt(5),e.charAt(6),e.charAt(7));return new r(e.split(/[\r\n]+/).map(n=>nt.parse(n,t)),t)}setSegment(e,t){if(t.name==="MSH"){if(typeof e=="number"){if(e!==0)return!1}else if(this.segments.findIndex(o=>o.name===e)!==0)return!1}else if(typeof e=="number"&&e===0&&t.name!=="MSH")return!1;if(typeof e=="number")return e>=this.segments.length?(this.segments.push(t),!0):(this.segments[e]=t,!0);let n=this.segments.findIndex(i=>i.name===e);return n===0&&t.name!=="MSH"?!1:n!==-1?(this.segments[n]=t,!0):!1}},nt=class r{constructor(e,t=new ye){c(this,"context");c(this,"name");c(this,"fields");this.context=t,In(e)?this.fields=e.map(n=>K.parse(n,t)):this.fields=e,this.name=this.fields[0].components[0][0]}get(e){return this.fields[e]}getField(e){if(this.name==="MSH"){if(e===1)return new K([[this.context.getMsh1()]],this.context);if(e===2)return new K([[this.context.getMsh2()]],this.context);if(e>2)return this.fields[e-1]}return this.fields[e]}getComponent(e,t,n,i=0){return this.getField(e)?.getComponent(t,n,i)??""}toString(){return this.fields.map(e=>e.toString()).join(this.context.fieldSeparator)}static parse(e,t=new ye){return new r(e.split(t.fieldSeparator).map(n=>K.parse(n,t)),t)}setField(e,t){if(this.name==="MSH"){if(e===1||e===2)return!1;if(e>2){let n=e-1;for(;this.fields.length<=n;)this.fields.push(new K([[""]],this.context));return this.fields[n]=typeof t=="string"?K.parse(t,this.context):t,!0}}for(;this.fields.length<=e;)this.fields.push(new K([[""]],this.context));return this.fields[e]=typeof t=="string"?K.parse(t,this.context):t,!0}setComponent(e,t,n,i,o=0){let s=this.getField(e);return s?s.setComponent(t,n,i,o):!1}},K=class r{constructor(e,t=new ye){c(this,"context");c(this,"components");this.context=t,this.components=e}get(e,t,n=0){return this.getComponent(e+1,t,n)}getComponent(e,t,n=0){let i=this.components[n][e-1]??"";return t!==void 0&&(i=i.split(this.context.subcomponentSeparator)[t]??""),i}toString(){return this.components.map(e=>e.join(this.context.componentSeparator)).join(this.context.repetitionSeparator)}static parse(e,t=new ye){return new r(e.split(t.repetitionSeparator).map(n=>n.split(t.componentSeparator)),t)}setComponent(e,t,n,i=0){if(e<1)return!1;if(i>=this.components.length)for(;this.components.length<=i;)this.components.push([""]);if(n!==void 0){if(n<0)return!1;let s=(this.components[i][e-1]||"").split(this.context.subcomponentSeparator);for(;s.length<=n;)s.push("");s[n]=t,this.components[i][e-1]=s.join(this.context.subcomponentSeparator)}else this.components[i][e-1]=t;return!0}};function $l(r,e){if(!r)return;let t=Ue(r.slice(0,4),0),n=Ue(r.slice(4,6),1)-1,i=Ue(r.slice(6,8),1),o=Ue(r.slice(8,10),0),s=Ue(r.slice(10,12),0),a=Ue(r.slice(12,14),0),u=0;r.includes(".")&&(u=Ue(r.slice(15,19),0));let l=new Date(Date.UTC(t,n,i,o,s,a,u)),p=Hl(r,e?.tzOffset);return p!==0&&(l=new Date(l.getTime()-p)),l.toISOString()}function Ue(r,e){let t=Number.parseInt(r,10);return Number.isNaN(t)?e:t}function Hl(r,e){let t=e,n=r.indexOf("+");n!==-1&&(t=r.slice(n));let i=r.indexOf("-");if(i!==-1&&(t=r.slice(i)),!t)return 0;let o=t.startsWith("-")?-1:1;t=t.slice(1).replace(":","");let s=Number.parseInt(t.slice(0,2),10),a=Number.parseInt(t.slice(2,4),10);return o*(s*60*60*1e3+a*60*1e3)}function ls(r){let e=r instanceof Date?r:new Date(r),n=e.toISOString().replaceAll(/[-:T]/g,"").replace(/(\.\d+)?Z$/,""),i=e.getUTCMilliseconds();return i>0&&(n+="."+i.toString()),n}var Be={NONE:0,ERROR:1,WARN:2,INFO:3,DEBUG:4},ps=["NONE","ERROR","WARN","INFO","DEBUG"],gi=class r{constructor(e,t={},n=Be.INFO,i={}){c(this,"write");c(this,"metadata");c(this,"options");c(this,"prefix");c(this,"level");this.write=e,this.metadata=t,this.level=n,this.options=i,i?.prefix&&(this.prefix=i.prefix),this.error=this.error.bind(this),this.warn=this.warn.bind(this),this.info=this.info.bind(this),this.debug=this.debug.bind(this),this.log=this.log.bind(this)}clone(e){let t=this.getLoggerConfig(),n=e?{...t,override:e,options:{...t.options,...e.options}}:t;return new r(n.write,n.metadata,n.level,n.options)}getLoggerConfig(){let{write:e,metadata:t,level:n,options:i}=this;return{write:e,metadata:t,level:n,options:i}}error(e,t){this.log(Be.ERROR,e,t)}warn(e,t){this.log(Be.WARN,e,t)}info(e,t){this.log(Be.INFO,e,t)}debug(e,t){this.log(Be.DEBUG,e,t)}log(e,t,n){if(e>this.level)return;let i;if(tr(n))i=Jt(n);else if(n){i={...n};for(let[o,s]of Object.entries(i))s instanceof Error&&(i[o]=Jt(s))}this.write(JSON.stringify({level:ps[e],timestamp:new Date().toISOString(),msg:this.prefix?`${this.prefix}${t}`:t,...i,...this.metadata}))}};function Gl(r){let e=Be[r.toUpperCase()];if(e===void 0)throw new Error(`Invalid log level: ${r}`);return e}function Jt(r,e=0,t=10){if(e>=t)return{error:"Max error depth reached"};let n={error:r.toString(),stack:r.stack?.split(`
|
|
54
|
+
`)};r.name&&r.name!=="Error"&&(n.name=r.name),r.message&&(n.message=r.message),"cause"in r&&r.cause!==void 0&&(r.cause instanceof Error?n.cause=Jt(r.cause,e+1,t):n.cause=r.cause);let i=Object.getOwnPropertyNames(r).filter(o=>!["name","message","stack","cause"].includes(o));for(let o of i)try{let s=r[o];s instanceof Error?n[o]=Jt(s,e+1,t):n[o]=s}catch{}return n}function Ql(r){if(!r)throw new f(g("Resource type is null"));if(!ct(r))throw new f(g("Unknown resource type"))}function xi(r,e,t){r===null?t.push(S(e,"Invalid null value")):Array.isArray(r)?zl(r,e,t):typeof r=="object"&&Jl(r,e,t)}function zl(r,e,t){for(let n=0;n<r.length;n++)r[n]===void 0?t.push(S(`${e}[${n}]`,"Invalid undefined value")):xi(r[n],`${e}[${n}]`,t)}function Jl(r,e,t){for(let[n,i]of Object.entries(r))xi(i,`${e}${e?".":""}${n}`,t)}function Kl(r){return{resourceType:"SearchParameter",code:r.code+":identifier",base:r.base,type:"token",expression:`(${r.expression}).identifier`}}function vi(r){return r.match(/^\((.+)\)\.identifier$/)?.[1]}function Ti(r,e){return new fe(r,new z(e,new _("identifier")))}var oe={BOOLEAN:"BOOLEAN",NUMBER:"NUMBER",QUANTITY:"QUANTITY",TEXT:"TEXT",REFERENCE:"REFERENCE",CANONICAL:"CANONICAL",DATE:"DATE",DATETIME:"DATETIME",PERIOD:"PERIOD",UUID:"UUID"};function Xl(r,e){let t=N.types[r]?.searchParamsDetails?.[e.code];return t||(t=Zl(r,e)),t}function Yl(r,e,t){let n=N.types[r];n||(n={},N.types[r]=n),n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=t}function Zl(r,e){let t=e.code,n=e.expression,i=bi(r,n),o={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let u of i){let l=jr(u),p=_n(()=>l.join("."));l.length===1&&l[0]instanceof P?o.propertyTypes.add("boolean"):e.code.endsWith(":identifier")?o.propertyTypes.add("Identifier"):p().endsWith("extension.value.code")||p().endsWith("extension.value.coding.code")?(o.array=!0,o.propertyTypes.clear(),o.propertyTypes.add("code")):ds(o,l,r,1),p().endsWith("extension.valueDateTime")&&(o.array=!1,o.propertyTypes.clear(),o.propertyTypes.add("dateTime"))}let s;if(e.code.endsWith(":identifier")){let u=vi(n);if(u===void 0)throw new Error(`Unexpected expression for derived identifier search parameter: ${n}`);let l=Si(r,u);s=Ti(n,l)}else s=Si(r,n);let a={type:rp(e,o.propertyTypes),elementDefinitions:o.elementDefinitions.map(u=>({...u,type:u.type?.filter(l=>o.propertyTypes.has(l.code))})).filter(u=>u.type&&u.type.length>0),parsedExpression:s,array:o.array};return Yl(r,t,a),a}function ds(r,e,t,n){let i=e[n];if(i instanceof he){r.propertyTypes.add(i.right.toString());return}if(i instanceof re){ep(r,i);return}let o=i.toString(),s=ht(t,o);if(!s)throw new Error(`Element definition not found for ${t} ${o}`);let a=!1,u=n+1;u<e.length&&e[u]instanceof Ee&&(a=!0,u++);let l=e[u];if(s.isArray&&!a&&(r.array=!0),u===e.length-1&&l instanceof he){r.elementDefinitions.push(s),r.propertyTypes.add(l.right.toString());return}if(u>=e.length){r.elementDefinitions.push(s);for(let p of s.type)r.propertyTypes.add(p.code);return}for(let p of s.type){let y=p.code;tp(y)&&(y=s.type[0].code),ds(r,e,y,u)}}function ep(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 be){r.propertyTypes.add(e.args[0].right.toString());return}throw new Error(`Unhandled FHIRPath function: ${e.name}`)}function tp(r){return r==="Element"||r==="BackboneElement"}function rp(r,e){switch(r.type){case"date":return e.size===1&&e.has(d.date)?oe.DATE:oe.DATETIME;case"number":return oe.NUMBER;case"quantity":return oe.QUANTITY;case"reference":return e.has(d.canonical)?oe.CANONICAL:oe.REFERENCE;case"token":return e.size===1&&e.has(d.boolean)?oe.BOOLEAN:oe.TEXT;default:return oe.TEXT}}function bi(r,e){let t=[],n=Dt(e);return $r(r,n.child,t),t}function np(r,e){let t=bi(r,e);if(t.length!==0)return t.map(n=>n.toString()).join(" | ")}function Si(r,e){let t=[],n=Dt(e);if($r(r,n.child,t),t.length===0)return n;let i=t[0];for(let o=1;o<t.length;o++)i=new Se(i,t[o]);return new fe("<original-not-available>",i)}function $r(r,e,t){e instanceof Se?($r(r,e.left,t),$r(r,e.right,t)):e.toString().includes(r+".")&&t.push(e)}function jr(r){if(r instanceof he||r instanceof Ee)return[jr(r.left),r].flat();if(r instanceof P)return[r];if(r instanceof z)return[jr(r.left),jr(r.right)].flat();if(r instanceof re){if(r.name==="where"&&!(r.args[0]instanceof be))return[];if(r.name==="last")return[]}return[r]}function ip(r){let e=[];return new Promise((t,n)=>{r.on("data",i=>e.push(Buffer.from(i))),r.on("error",i=>{r.destroy(),n(i)}),r.on("end",()=>{t(Buffer.concat(e))}),r.on("close",()=>{r.destroy()})})}function op(r,e){let t=[];for(let n of e)t.push(...sp(r,n));return t}function sp(r,e){if(!r.resource)throw new Error("Resource type is required");if(r.resource!==e.resourceType)return[];let t={};if(r.constant)for(let i of r.constant){let o={type:"ViewDefinitionConstant",value:i};t["%"+i.name]=I(o,"value")}let n=T(e);if(r.where)for(let i of r.where){let o=C(i.path,[n],t);if(o.length!==1)return[];if(o[0].type!=="boolean")throw new Error("WHERE clause must evaluate to a boolean");if(!o[0].value)return[]}return Ei(r,n,t)}function Ei(r,e,t){let n=[],i;r.forEach?i=C(r.forEach,[e],t):r.forEachOrNull?i=C(r.forEachOrNull,[e],t):i=[e];for(let o of i){let s=[];for(let a of r.column??[]){let u=C(a.path,[o],t),l;if(u.length===0)l={[a.name]:null};else if(a.collection)l={[a.name]:u.map(p=>p.value)};else if(u.length===1)l={[a.name]:u[0].value};else throw new Error("Multiple values found but not expected for column");s.push([l])}for(let a of r.select??[]){let u=Ei(a,o,t);s.push(u)}if(r.unionAll){let a=[];for(let u of r.unionAll)for(let l of Ei(u,o,t))a.push(l);s.push(a)}n.push(...ap(s))}if(i.length===0&&r.forEachOrNull){let o={};for(let s of r.column??[])o[s.name]=null;n.push(o)}return n}function ap(r){if(r.length===0)return[];let e=r[0];for(let t=1;t<r.length;t++)e=cp(e,r[t]);return e}function cp(r,e){let t=[];for(let n of r)for(let i of e)t.push(up(n,i));return t}function up(r,e){let t={};return Object.assign(t,r),Object.assign(t,e),t}var fs="https://meta.medplum.com/releases",Hr=new Map;function lp(){Hr.clear()}function hs(r){let e=r;if(!e.tag_name)throw new Error("Manifest missing tag_name");let t=e.assets;if(!t?.length)throw new Error("Manifest missing assets list");for(let n of t){if(!n.browser_download_url)throw new Error("Asset missing browser download URL");if(!n.name)throw new Error("Asset missing name")}}async function Gr(r,e,t){let n=Hr.get(e??"latest");if(!n){let i=e?`v${e}`:"latest",o=new URL(`${fs}/${i}.json`);if(o.searchParams.set("a",r),o.searchParams.set("c",Mr),t)for(let[u,l]of Object.entries(t))o.searchParams.set(u,l);let s=await fetch(o.toString());if(s.status!==200){let u;try{u=(await s.json()).message}catch(l){console.error(`Failed to parse message from body: ${Ae(l)}`)}throw new Error(`Received status code ${s.status} while fetching manifest for version '${e??"latest"}'. Message: ${u}`)}let a=await s.json();hs(a),n=a,Hr.set(e??"latest",n),e||Hr.set(n.tag_name.slice(1),n)}return n}function ms(r){return/^\d+\.\d+\.\d+(-[0-9a-z]{7})?$/.test(r)}async function pp(r,e){if(!ms(e))return!1;try{await Gr(r,e)}catch{return!1}return!0}async function dp(r){let e=await Gr(r);if(!e.tag_name.startsWith("v"))throw new Error(`Invalid release name found. Release tag '${e.tag_name}' did not start with 'v'`);return e.tag_name.slice(1)}async function fp(r,e){try{let t=Mr.split("-")[0],i=(await Gr(r,void 0,e)).tag_name.slice(1);t!==i&&console.warn(`A new version (v${i}) of Medplum is available. Your current version (v${t}) may be missing important updates and bug fixes.`)}catch(t){console.warn(`Failed to check for newer version: ${Ae(t)}`)}}0&&(module.exports={AccessPolicyInteraction,AckCode,AndAtom,ArithemticOperatorAtom,AsAtom,BooleanInfixOperatorAtom,CPT,ClientStorage,ConcatAtom,ContainsAtom,ContentType,DEFAULT_ACCEPT,DEFAULT_MAX_SEARCH_COUNT,DEFAULT_SEARCH_COUNT,DataSampler,DotAtom,EmptySetAtom,EqualsAtom,EquivalentAtom,EventTarget,ExternalSecretSystems,FHIRCAST_EVENT_NAMES,FHIRCAST_EVENT_RESOURCES,FHIRCAST_EVENT_VERSION_REQUIRED,FHIRCAST_RESOURCE_TYPES,FhirFilterComparison,FhirFilterConnective,FhirFilterNegation,FhirPathAtom,FhircastConnection,FileBuilder,FunctionAtom,HTTP_HL7_ORG,HTTP_TERMINOLOGY_HL7_ORG,Hl7Context,Hl7Field,Hl7Message,Hl7Segment,ICD10,ImpliesAtom,InAtom,IndexerAtom,InfixOperatorAtom,IsAtom,LOINC,LRUCache,LiteralAtom,LogLevel,LogLevelNames,Logger,MEDPLUM_CLI_CLIENT_ID,MEDPLUM_RELEASES_URL,MEDPLUM_VERSION,MedplumClient,MedplumKeyValueClient,MemoryStorage,MockAsyncClientStorage,NDC,NotEqualsAtom,NotEquivalentAtom,OAuthClientAssertionType,OAuthGrantType,OAuthSigningAlgorithm,OAuthTokenAuthMethod,OAuthTokenType,OperationOutcomeError,Operator,OperatorPrecedence,OrAtom,Parser,ParserBuilder,PrefixOperatorAtom,PropertyType,RXNORM,ReadablePromise,ReconnectingWebSocket,SNOMED,SearchParameterType,SubscriptionEmitter,SubscriptionManager,SymbolAtom,Tokenizer,TransformMapCollection,TypedEventTarget,UCUM,UnaryOperatorAtom,UnionAtom,VALID_HOSTNAME_REGEX,XorAtom,accepted,accessPolicySupportsInteraction,addProfileToResource,allOk,append,applyDefaultValuesToElement,applyDefaultValuesToResource,applyFixedOrPatternValue,arrayBufferToBase64,arrayBufferToHex,arrayify,assert,assertContextVersionOptional,assertOk,assertReleaseManifest,badRequest,booleanToTypedValue,buildCdsRequest,buildElementsContext,buildTypeName,businessRule,calculateAge,calculateAgeString,canReadResourceType,canWriteResource,canWriteResourceType,capitalize,checkForNull,checkIfValidMedplumVersion,clearReleaseCache,compressElement,concatUrls,conceptMapTranslate,conflict,convertContainedResourcesToBundle,convertToSearchableDates,convertToSearchableNumbers,convertToSearchableQuantities,convertToSearchableReferences,convertToSearchableStrings,convertToSearchableTokens,convertToSearchableUris,convertToTransactionBundle,crawlTypedValue,crawlTypedValueAsync,createConstraintIssue,createFhircastMessagePayload,createOperationOutcomeIssue,createProcessingIssue,createReference,createStructureIssue,created,decodeBase64,decodeBase64Url,deepClone,deepEquals,deepIncludes,deriveIdentifierSearchParameter,encodeBase64,encodeBase64Url,encryptSHA256,ensureNoLeadingSlash,ensureTrailingSlash,escapeHtml,evalFhirPath,evalFhirPathTyped,evalSqlOnFhir,expandSampledData,expandSampledObservation,extractAccountReferences,fetchLatestVersionString,fetchVersionManifest,fhirPathArrayEquals,fhirPathArrayEquivalent,fhirPathArrayNotEquals,fhirPathEquals,fhirPathEquivalent,fhirPathIs,fhirPathNot,fhirTypeToJsType,findCodeBySystem,findObservationInterval,findObservationReferenceRange,findObservationReferenceRanges,findResourceByCode,findResourceInBundle,flatMapFilter,forbidden,formatAddress,formatCodeableConcept,formatCoding,formatDate,formatDateTime,formatFamilyName,formatGivenName,formatHl7DateTime,formatHumanName,formatMoney,formatObservationValue,formatPeriod,formatQuantity,formatRange,formatReferenceString,formatSearchQuery,formatTime,formatTiming,generateId,getAllDataTypes,getAllQuestionnaireAnswers,getBuffer,getCodeBySystem,getDataType,getDateProperty,getDefaultValuesForNewSliceEntry,getDisplayString,getElementDefinition,getElementDefinitionFromElements,getElementDefinitionTypeName,getExpressionForResourceType,getExpressionsForResourceType,getExtension,getExtensionValue,getIdentifier,getImageSrc,getInnerDerivedIdentifierExpression,getNestedProperty,getParsedDerivedIdentifierExpression,getParsedExpressionForResourceType,getPathDifference,getPathDisplayName,getPropertyDisplayName,getQueryString,getQuestionnaireAnswers,getRandomString,getReferenceString,getResourceTypes,getSearchParameter,getSearchParameterDetails,getSearchParameters,getStatus,getTypedPropertyValue,getTypedPropertyValueWithPath,getTypedPropertyValueWithSchema,getTypedPropertyValueWithoutSchema,getValueSliceName,getWebSocketUrl,getWindow,globalSchema,gone,indexConceptMapCodings,indexDefaultSearchParameters,indexSearchParameter,indexSearchParameterBundle,indexStructureDefinitionBundle,inflateBaseSchema,inflateElement,initFhirPathParserBuilder,invalidSearchOperator,isAccepted,isBrowserEnvironment,isCodeableConcept,isCoding,isCompletedSubscriptionRequest,isComplexTypeCode,isConflict,isContextVersionRequired,isCreated,isDataTypeLoaded,isDateString,isDateTimeString,isEmpty,isError,isFhirCriteriaMet,isFhircastResourceType,isGone,isJwt,isLowerCase,isMedplumAccessToken,isNodeEnvironment,isNotFound,isObject,isOk,isOperationOutcome,isPeriod,isPopulated,isPrimitiveType,isProfileLoaded,isProfileResource,isQuantity,isQuantityEquivalent,isRedirect,isReference,isResource,isResourceType,isResourceTypeSchema,isResourceWithId,isSliceDefinitionWithTypes,isString,isStringArray,isTextObject,isTypedValue,isUUID,isUnauthenticated,isValidDate,isValidHostname,isValidMedplumSemver,lazy,loadDataType,locationUtils,mapByIdentifier,matchDiscriminant,matchesRange,matchesSearchRequest,multipleMatches,normalizeArrayBufferView,normalizeCreateBinaryOptions,normalizeCreatePdfOptions,normalizeErrorString,normalizeOperationOutcome,notFound,notModified,operationOutcomeIssueToString,operationOutcomeToString,parseFhirPath,parseFilterParameter,parseHl7DateTime,parseJWTPayload,parseLogLevel,parseMappingLanguage,parseParameter,parseReference,parseSearchRequest,parseStructureDefinition,parseXFhirQuery,preciseEquals,preciseGreaterThan,preciseGreaterThanOrEquals,preciseLessThan,preciseLessThanOrEquals,preciseRound,preconditionFailed,projectAdminResourceTypes,protectedResourceTypes,readInteractions,redirect,removeDuplicates,removeProfileFromResource,reorderBundle,replaceQueryVariables,resolveId,resourceMatchesSubscriptionCriteria,satisfiedAccessPolicy,serializeError,serializeFhircastSubscriptionRequest,serverError,serverTimeout,setCodeBySystem,setIdentifier,singleton,singularize,sleep,sortStringArray,splitN,splitSearchOnComma,streamToBuffer,stringify,stringifyTypedValue,structureMapTransform,subsetResource,summarizeObservations,toJsBoolean,toPeriod,toTypedValue,tooManyRequests,trimTrailingEmptyElements,tryGetDataType,tryGetJwtExpiration,tryGetProfile,typedValueToString,unauthorized,unauthorizedTokenAudience,unauthorizedTokenExpired,unsupportedMediaType,validateFhircastSubscriptionRequest,validateResource,validateResourceType,validateTypedValue,validationError,validationRegexes,warnIfNewerVersionAvailable,wordWrap});
|
|
55
55
|
/*!
|
|
56
56
|
* Reconnecting WebSocket
|
|
57
57
|
* by Pedro Ladaria <pedro.ladaria@gmail.com>
|