@medplum/core 5.1.17 → 5.1.18

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
- "use strict";var er=Object.defineProperty;var Ns=Object.getOwnPropertyDescriptor;var Fs=Object.getOwnPropertyNames;var Us=Object.prototype.hasOwnProperty;var Bs=(r,e,t)=>e in r?er(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var Ws=(r,e)=>{for(var t in e)er(r,t,{get:e[t],enumerable:!0})},qs=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Fs(e))!Us.call(r,i)&&i!==t&&er(r,i,{get:()=>e[i],enumerable:!(n=Ns(e,i))||n.enumerable});return r};var js=r=>qs(er({},"__esModule",{value:!0}),r);var c=(r,e,t)=>Bs(r,typeof e!="symbol"?e+"":e,t);var fp={};Ws(fp,{AccessPolicyInteraction:()=>Oe,AckCode:()=>bd,AndAtom:()=>It,ArithmeticOperatorAtom:()=>F,AsAtom:()=>ye,CPT:()=>Qs,ClientStorage:()=>rt,ConcatAtom:()=>Et,ContainsAtom:()=>Rt,ContentType:()=>k,DEFAULT_ACCEPT:()=>rs,DEFAULT_MAX_SEARCH_COUNT:()=>vu,DEFAULT_SEARCH_COUNT:()=>xu,DataSampler:()=>Wr,DotAtom:()=>Y,EMPTY:()=>y,EmptySetAtom:()=>St,EqualsAtom:()=>Pt,EquivalentAtom:()=>wt,EventTarget:()=>Dr,ExternalSecretSystems:()=>kl,FHIRCAST_EVENT_NAMES:()=>Mr,FHIRCAST_EVENT_RESOURCES:()=>Go,FHIRCAST_EVENT_VERSION_REQUIRED:()=>_r,FHIRCAST_RESOURCE_TYPES:()=>Ho,FhirFilterComparison:()=>Kt,FhirFilterConnective:()=>Xt,FhirFilterNegation:()=>Yt,FhirPathAtom:()=>ge,FhircastConnection:()=>Ut,FileBuilder:()=>vi,FunctionAtom:()=>X,HTTP_HL7_ORG:()=>ct,HTTP_TERMINOLOGY_HL7_ORG:()=>Ks,Hl7Context:()=>ve,Hl7Field:()=>ce,Hl7Message:()=>Si,Hl7Segment:()=>ot,ICD10:()=>zs,INVALID_MEDICATION_ORDER_RESPONSE:()=>Cs,INVALID_MEDICATION_ORDER_SET_RESPONSE:()=>Ps,INVALID_MEDICATION_SEARCH_RESPONSE:()=>Ad,ImpliesAtom:()=>Dt,InAtom:()=>Ct,IndexerAtom:()=>we,InfixOperatorAtom:()=>R,IsAtom:()=>Ae,LOINC:()=>$s,LRUCache:()=>J,LiteralAtom:()=>$,LogLevel:()=>je,LogLevelNames:()=>Rs,Logger:()=>bi,MEDICATION_REQUEST_STATUS_REASON_RESPONSE_NOT_RECEIVED:()=>ws,MEDICATION_REQUEST_STATUS_REASON_SYSTEM:()=>As,MEDPLUM_CLI_CLIENT_ID:()=>xl,MEDPLUM_RELEASES_URL:()=>Ms,MEDPLUM_VERSION:()=>Br,MedplumClient:()=>Gt,MedplumKeyValueClient:()=>qt,MemoryStorage:()=>Fr,MockAsyncClientStorage:()=>ai,NDC:()=>Js,NOOP:()=>Vc,NotEqualsAtom:()=>At,NotEquivalentAtom:()=>Ot,OAuthClientAssertionType:()=>is,OAuthGrantType:()=>We,OAuthSigningAlgorithm:()=>Pl,OAuthTokenAuthMethod:()=>Cl,OAuthTokenType:()=>ns,OperationOutcomeError:()=>f,Operator:()=>m,OperatorPrecedence:()=>S,OrAtom:()=>kt,PATIENT_PREFERRED_PHARMACY_URL:()=>Kr,PHARMACY_PREFERENCE_TYPE_SYSTEM:()=>Ci,PHARMACY_TYPE_PREFERRED:()=>Pi,PHARMACY_TYPE_PRIMARY:()=>Jr,Parser:()=>tr,ParserBuilder:()=>at,PrefixOperatorAtom:()=>st,PropertyType:()=>d,RXNORM:()=>Gs,ReadablePromise:()=>W,ReconnectingWebSocket:()=>jt,ReturnAckCategory:()=>Ju,SNOMED:()=>Hs,SearchParameterType:()=>ue,SubscriptionEmitter:()=>it,SubscriptionManager:()=>Ht,SymbolAtom:()=>B,Tokenizer:()=>xe,TransformMapCollection:()=>Gr,TypedEventTarget:()=>ee,UCUM:()=>en,UnaryOperatorAtom:()=>bt,UnionAtom:()=>Pe,VALID_HOSTNAME_REGEX:()=>xo,XorAtom:()=>Vt,accepted:()=>aa,accessPolicySupportsInteraction:()=>Xn,addPreferredPharmacyToPatient:()=>Wd,addProfileToResource:()=>Pc,allOk:()=>Ys,append:()=>K,applyDefaultValuesToElement:()=>ql,applyDefaultValuesToResource:()=>Wl,applyFixedOrPatternValue:()=>zt,arrayBufferToBase64:()=>Ln,arrayBufferToHex:()=>_n,arrayify:()=>re,assert:()=>Yo,assertContextVersionOptional:()=>ri,assertOk:()=>ba,assertReleaseManifest:()=>_s,badRequest:()=>P,booleanToTypedValue:()=>h,buildCdsRequest:()=>il,buildElementsContext:()=>jr,buildMedicationRequestResponseLostStatusReason:()=>wd,buildTypeName:()=>Po,businessRule:()=>fa,calculateAge:()=>yt,calculateAgeString:()=>Ya,canReadResourceType:()=>Hu,canWriteResource:()=>Qu,canWriteResourceType:()=>Gu,capitalize:()=>L,checkForNull:()=>Ai,checkIfValidMedplumVersion:()=>lp,clearReleaseCache:()=>up,codeableConceptMatchesToken:()=>dc,codingMatchesToken:()=>uo,compressElement:()=>Ra,concatUrls:()=>U,conceptMapTranslate:()=>hi,conflict:()=>ca,contentTooLarge:()=>na,convertContainedResourcesToBundle:()=>rl,convertToSearchableDates:()=>Gn,convertToSearchableNumbers:()=>du,convertToSearchableQuantities:()=>pu,convertToSearchableReferences:()=>zn,convertToSearchableStrings:()=>Qn,convertToSearchableTokens:()=>Jn,convertToSearchableUris:()=>fu,convertToTransactionBundle:()=>Wo,crawlTypedValue:()=>fr,crawlTypedValueAsync:()=>Va,createConstraintIssue:()=>dn,createFhircastMessagePayload:()=>Nr,createOperationOutcomeIssue:()=>Se,createPreferredPharmacyExtension:()=>Vs,createProcessingIssue:()=>pn,createReference:()=>Ee,createStructureIssue:()=>E,created:()=>Xs,decodeBase64:()=>Bo,decodeBase64Url:()=>Zn,deepClone:()=>Ce,deepEquals:()=>pe,deepIncludes:()=>Ge,deriveIdentifierSearchParameter:()=>zd,encodeBase64:()=>Ft,encodeBase64Url:()=>Xu,encryptSHA256:()=>ei,ensureNoLeadingSlash:()=>yo,ensureTrailingSlash:()=>Ar,escapeHtml:()=>Ic,evalFhirPath:()=>lu,evalFhirPathTyped:()=>w,evalSqlOnFhir:()=>ip,expandSampledData:()=>li,expandSampledObservation:()=>_l,extractAccountReferences:()=>br,fetchLatestVersionString:()=>dp,fetchVersionManifest:()=>Zr,fhirPathArrayEquals:()=>wn,fhirPathArrayEquivalent:()=>xr,fhirPathArrayNotEquals:()=>On,fhirPathEquals:()=>Qe,fhirPathEquivalent:()=>no,fhirPathIs:()=>mt,fhirPathNot:()=>An,fhirTypeToJsType:()=>hr,findCodeBySystem:()=>lc,findObservationInterval:()=>mc,findObservationReferenceRange:()=>hc,findObservationReferenceRanges:()=>fo,findResourceByCode:()=>Ec,findResourceInBundle:()=>nl,flatMapFilter:()=>Oc,forbidden:()=>ea,formatAddress:()=>To,formatCodeableConcept:()=>ze,formatCoding:()=>jn,formatDate:()=>_c,formatDateTime:()=>wr,formatFamilyName:()=>Mc,formatGivenName:()=>Dc,formatHl7DateTime:()=>Es,formatHumanName:()=>Ke,formatMoney:()=>$c,formatObservationValue:()=>bo,formatPeriod:()=>Nc,formatQuantity:()=>me,formatRange:()=>jc,formatReferenceString:()=>vo,formatSearchQuery:()=>Ou,formatTime:()=>Lc,formatTiming:()=>Wc,formatWallTime:()=>So,generateId:()=>Z,getAllDataTypes:()=>yn,getAllQuestionnaireAnswers:()=>Za,getBuffer:()=>kr,getCodeBySystem:()=>Sr,getDataType:()=>le,getDateProperty:()=>Ka,getDefaultValuesForNewSliceEntry:()=>jl,getDisplayString:()=>so,getElementDefinition:()=>gt,getElementDefinitionForPath:()=>eu,getElementDefinitionFromElements:()=>$n,getElementDefinitionTypeName:()=>cr,getExpressionForResourceType:()=>tp,getExpressionsForResourceType:()=>ki,getExtension:()=>de,getExtensionValue:()=>Rr,getIdentifier:()=>Er,getImageSrc:()=>Ja,getInnerDerivedIdentifierExpression:()=>wi,getMedicationOrderIframeUrl:()=>Vd,getNestedProperty:()=>De,getOutcomeRedirectUrl:()=>pa,getParsedDerivedIdentifierExpression:()=>Oi,getParsedExpressionForResourceType:()=>Ii,getPathDifference:()=>fe,getPathDisplayName:()=>Yc,getPendingMedicationOrderId:()=>Id,getPendingMedicationOrderStatus:()=>kd,getPreferredPharmaciesFromPatient:()=>Bd,getPropertyDisplayName:()=>Ao,getQueryString:()=>Wn,getQuestionnaireAnswers:()=>Xa,getRandomString:()=>Vr,getReferenceString:()=>O,getResourceTypes:()=>zc,getSearchParameter:()=>Kc,getSearchParameterDetails:()=>Jd,getSearchParameters:()=>Jc,getStatus:()=>Sa,getTypedPropertyValue:()=>_,getTypedPropertyValueWithPath:()=>mr,getTypedPropertyValueWithSchema:()=>to,getTypedPropertyValueWithoutSchema:()=>ro,getValueSliceName:()=>pi,getWebSocketUrl:()=>Bn,getWindow:()=>Yu,globalSchema:()=>j,gone:()=>ta,indexConceptMapCodings:()=>cs,indexDefaultSearchParameters:()=>Sn,indexSearchParameter:()=>Or,indexSearchParameterBundle:()=>Qc,indexStructureDefinitionBundle:()=>lr,inflateBaseSchema:()=>fn,inflateElement:()=>$i,initFhirPathParserBuilder:()=>Xe,invalidSearchOperator:()=>Du,isAccepted:()=>ha,isAddPharmacyResponse:()=>$d,isBrowserEnvironment:()=>z,isCodeableConcept:()=>Tr,isCoding:()=>vr,isCompletedSubscriptionRequest:()=>ni,isComplexTypeCode:()=>Cr,isConflict:()=>xa,isContextVersionRequired:()=>ti,isCreated:()=>ma,isDataTypeLoaded:()=>xn,isDateString:()=>In,isDateTimeString:()=>Me,isDefined:()=>kc,isEmpty:()=>A,isError:()=>sr,isFhirCriteriaMet:()=>Xo,isFhircastResourceType:()=>Qo,isGone:()=>va,isJwt:()=>ii,isLowerCase:()=>pc,isMedicationArray:()=>Od,isMedicationOrderResponse:()=>Os,isMedicationOrderSetResponse:()=>Is,isMedplumAccessToken:()=>oi,isNodeEnvironment:()=>Ku,isNotFound:()=>ya,isObject:()=>C,isOk:()=>ar,isOperationOutcome:()=>$e,isOrganizationArray:()=>jd,isPeriod:()=>kn,isPopulated:()=>ie,isPrimitiveType:()=>dt,isProfileLoaded:()=>vn,isProfileResource:()=>oo,isQuantity:()=>V,isQuantityEquivalent:()=>Vn,isRedirect:()=>ga,isReference:()=>G,isResource:()=>I,isResourceType:()=>lt,isResourceTypeSchema:()=>pr,isResourceWithId:()=>Je,isSliceDefinitionWithTypes:()=>di,isString:()=>_e,isStringArray:()=>uc,isTextObject:()=>lo,isTypedValue:()=>tu,isUUID:()=>cc,isUnauthenticated:()=>Ta,isValidDate:()=>Tt,isValidHostname:()=>Cc,isValidMedplumSemver:()=>Ls,lazy:()=>Un,loadDataType:()=>dr,locationUtils:()=>ae,mapByIdentifier:()=>Ac,matchDiscriminant:()=>gr,matchesRange:()=>Fn,matchesSearchRequest:()=>Nt,medicationOrderRequestToParameters:()=>_d,medicationOrderSetRequestToParameters:()=>Nd,medicationSearchParamsToParameters:()=>Dd,multipleMatches:()=>oa,normalizeArrayBufferView:()=>Nn,normalizeCreateBinaryOptions:()=>ui,normalizeCreatePdfOptions:()=>os,normalizeErrorString:()=>Te,normalizeOperationOutcome:()=>ut,notFound:()=>cn,notModified:()=>Zs,operationOutcomeIssueToString:()=>ji,operationOutcomeToString:()=>ln,parametersToMedicationOrderResponse:()=>Ld,parametersToMedicationOrderSetResponse:()=>Fd,parseFhirPath:()=>Lt,parseFilterParameter:()=>Sd,parseHl7DateTime:()=>Rd,parseJWTPayload:()=>Wt,parseLogLevel:()=>Pd,parseMappingLanguage:()=>Yl,parseParameter:()=>Mo,parseReference:()=>Ga,parseSearchRequest:()=>Ze,parseStructureDefinition:()=>ur,parseXFhirQuery:()=>wu,pathToJSONPointer:()=>Ma,preciseEquals:()=>Tc,preciseGreaterThan:()=>bc,preciseGreaterThanOrEquals:()=>go,preciseLessThan:()=>Sc,preciseLessThanOrEquals:()=>ho,preciseRound:()=>vc,preconditionFailed:()=>ra,projectAdminResourceTypes:()=>Lo,protectedResourceTypes:()=>_o,readInteractions:()=>No,redirect:()=>qi,redirectOk:()=>da,removeDuplicates:()=>ft,removePreferredPharmacyFromPatient:()=>qd,removeProfileFromResource:()=>wc,reorderBundle:()=>qo,replaceQueryVariables:()=>$o,resolveId:()=>Re,resourceMatchesSubscriptionCriteria:()=>gl,satisfiedAccessPolicy:()=>Fo,serializeError:()=>Zt,serializeFhircastSubscriptionRequest:()=>Lr,serverError:()=>ua,serverTimeout:()=>la,setCodeBySystem:()=>fc,setIdentifier:()=>ec,singleton:()=>D,singularize:()=>Rc,sleep:()=>Pr,sortStringArray:()=>vt,splitN:()=>Le,splitSearchOnComma:()=>et,streamToBuffer:()=>np,stringify:()=>xt,stringifyTypedValue:()=>Hn,structureMapTransform:()=>Xl,subsetResource:()=>Aa,summarizeObservations:()=>Vl,toJsBoolean:()=>q,toPeriod:()=>ht,toTypedValue:()=>b,tooManyRequests:()=>sa,trimTrailingEmptyElements:()=>nc,tryGetDataType:()=>be,tryGetJwtExpiration:()=>si,tryGetProfile:()=>Tn,typedValueToString:()=>qn,unauthorized:()=>ke,unauthorizedTokenAudience:()=>or,unauthorizedTokenExpired:()=>un,unsupportedMediaType:()=>ia,validateFhircastSubscriptionRequest:()=>Bt,validateResource:()=>Na,validateResourceType:()=>Hd,validateTypedValue:()=>Yi,validationError:()=>T,validationRegexes:()=>pt,warnIfNewerVersionAvailable:()=>pp,wordWrap:()=>Ts});module.exports=js(fp);var J=class{constructor(e=10){c(this,"max");c(this,"cache");this.max=e,this.cache=new Map}clear(){this.cache.clear()}get(e){let t=this.cache.get(e);return t&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size>=this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}delete(e){this.cache.delete(e)}keys(){return this.cache.keys()}first(){return this.cache.keys().next().value}};var st=class{constructor(e,t){c(this,"operator");c(this,"child");this.operator=e,this.child=t}toString(){return`${this.operator}(${this.child.toString()})`}},R=class{constructor(e,t,n){c(this,"operator");c(this,"left");c(this,"right");this.operator=e,this.left=t,this.right=n}toString(){return`(${this.left.toString()} ${this.operator} ${this.right.toString()})`}},at=class{constructor(){c(this,"prefixParselets",{});c(this,"infixParselets",{})}registerInfix(e,t){return this.infixParselets[e]=t,this}registerPrefix(e,t){return this.prefixParselets[e]=t,this}prefix(e,t,n){return this.registerPrefix(e,{parse(i,o){let s=i.consumeAndParse(t);return n(o,s)}})}infixLeft(e,t,n){return this.registerInfix(e,{parse(i,o,s){let a=i.consumeAndParse(t);return n(o,s,a)},precedence:t})}construct(e){return new tr(e,this.prefixParselets,this.infixParselets)}},tr=class{constructor(e,t,n){c(this,"tokens");c(this,"prefixParselets");c(this,"infixParselets");this.tokens=e,this.prefixParselets=t,this.infixParselets=n}hasMore(){return this.tokens.length>0}match(e){return this.peek()?.id!==e?!1:(this.consume(),!0)}consumeAndParse(e=1/0){let t=this.consume(),n=this.prefixParselets[t.id];if(!n)throw new Error(`Parse error at "${t.value}" (line ${t.line}, column ${t.column}). No matching prefix parselet.`);let i=n.parse(this,t);for(;e>this.getPrecedence();){let o=this.consume();i=this.getInfixParselet(o).parse(this,i,o)}return i}getPrecedence(){let e=this.peek();if(!e)return 1/0;let t=this.getInfixParselet(e);return t?t.precedence:1/0}consume(e,t){if(!this.tokens.length)throw new Error("Cant consume unknown more tokens.");if(e&&this.peek()?.id!==e){let n=this.peek();throw new Error(`Expected ${e} but got "${n.id}" (${n.value}) at line ${n.line} column ${n.column}.`)}if(t&&this.peek()?.value!==t){let n=this.peek();throw new Error(`Expected "${t}" but got "${n.value}" at line ${n.line} column ${n.column}.`)}return this.tokens.shift()}peek(){return this.tokens.length>0?this.tokens[0]:void 0}removeComments(){this.tokens=this.tokens.filter(e=>e.id!=="Comment")}getInfixParselet(e){return this.infixParselets[e.id==="Symbol"?e.value:e.id]}};function re(r){if(r!==void 0)return Array.isArray(r)?r:[r]}var en="http://unitsofmeasure.org",$s="http://loinc.org",Hs="http://snomed.info/sct",Gs="http://www.nlm.nih.gov/research/umls/rxnorm",Qs="http://www.ama-assn.org/go/cpt",zs="http://hl7.org/fhir/sid/icd-10",Js="http://hl7.org/fhir/sid/ndc",ct="http://hl7.org",Ks="http://terminology.hl7.org";var rr="ok",nr="created",tn="gone",rn="not-modified",nn="found",on="not-found",sn="conflict",an="unauthorized",Mi="forbidden",_i="precondition-failed",Li="content-too-large",Ni="unsupported-media-type",Fi="multiple-matches",Ui="too-many-requests",ir="accepted",Bi="server-timeout",Wi="business-rule",Ys={resourceType:"OperationOutcome",id:rr,issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},Xs={resourceType:"OperationOutcome",id:nr,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},Zs={resourceType:"OperationOutcome",id:rn,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},cn={resourceType:"OperationOutcome",id:on,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},ke={resourceType:"OperationOutcome",id:an,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},un={...ke,issue:[...ke.issue,{severity:"error",code:"expired",details:{text:"Token expired"}}]},or={...ke,issue:[...ke.issue,{severity:"error",code:"invalid",details:{text:"Token not issued for this audience"}}]},ea={resourceType:"OperationOutcome",id:Mi,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},ta={resourceType:"OperationOutcome",id:tn,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},ra={resourceType:"OperationOutcome",id:_i,issue:[{severity:"error",code:"processing",details:{text:"Precondition Failed"}}]};function na(r){return{resourceType:"OperationOutcome",id:Li,issue:[{severity:"error",code:"too-long",details:{text:r}}]}}var ia={resourceType:"OperationOutcome",id:Ni,issue:[{severity:"error",code:"not-supported",details:{text:"Unsupported media type"}}]},oa={resourceType:"OperationOutcome",id:Fi,issue:[{severity:"error",code:"multiple-matches",details:{text:"Multiple resources found matching condition"}}]},sa={resourceType:"OperationOutcome",id:Ui,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function aa(r){return{resourceType:"OperationOutcome",id:ir,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:r}]}}function P(r,e){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:r},...e?{expression:re(e)}:void 0}]}}function ca(r,e){return{resourceType:"OperationOutcome",id:sn,issue:[{severity:"error",code:"conflict",details:{coding:e?[{code:e}]:void 0,text:r}}]}}function T(r,e,t,n){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:t??"structure",details:{text:r},...e?{expression:e}:void 0,...n?{diagnostics:n}:void 0}]}}function ua(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:r.toString()}]}}function la(r){return{resourceType:"OperationOutcome",id:Bi,issue:[{severity:"error",code:"timeout",details:{text:r??"Server timeout"}}]}}function qi(r){let e=r.toString();return{resourceType:"OperationOutcome",id:nn,issue:[{severity:"information",code:"informational",details:{coding:[{system:"urn:ietf:rfc:3986",code:e}],text:"Redirect to "+e}}]}}function da(r){return{...qi(r),id:rr}}function pa(r){return r?.issue?.[0]?.details?.coding?.find(e=>e.system==="urn:ietf:rfc:3986")?.code}function fa(r,e){return{resourceType:"OperationOutcome",id:Wi,issue:[{severity:"error",code:"business-rule",details:{id:r,text:e}}]}}function sr(r){return!r||typeof r!="object"?!1:r instanceof Error||typeof DOMException<"u"&&r instanceof DOMException?!0:Object.prototype.toString.call(r)==="[object Error]"}function $e(r){return typeof r=="object"&&r!==null&&r.resourceType==="OperationOutcome"}function ar(r){return r.id===rr||r.id===nr||r.id===rn||r.id===ir}function ma(r){return r.id===nr}function ha(r){return r.id===ir}function ga(r){return r.id===nn}function ya(r){return r.id===on}function xa(r){return r.id===sn}function va(r){return r.id===tn}function Ta(r){return r.id===an}function Sa(r){switch(r.id){case rr:return 200;case nr:return 201;case ir:return 202;case nn:return 302;case rn:return 304;case an:return 401;case Mi:return 403;case on:return 404;case sn:return 409;case tn:return 410;case _i:case Fi:return 412;case Li:return 413;case Ni:return 415;case Wi:return 422;case Ui:return 429;case Bi:return 504;default:return r.issue?.[0]?.code==="exception"?500:400}}function ba(r,e){if(!ar(r)||e===void 0)throw new f(r)}var f=class extends Error{constructor(t,n){super(ln(t),n);c(this,"outcome");this.name="OperationOutcomeError",this.outcome=t}};function ut(r){return r instanceof f?r.outcome:$e(r)?r:P(Te(r))}function Te(r){return r?typeof r=="string"?r:sr(r)?r.message:$e(r)?ln(r):typeof r=="object"&&"code"in r&&typeof r.code=="string"?r.code:JSON.stringify(r):"Unknown error"}function ln(r){let e=r.issue?.map(ji)??[];return e.length>0?e.join("; "):"Unknown error"}function ji(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 Se(r,e,t,n,i){let o={severity:r,code:e,details:{text:t},expression:[n]};return i&&(o.diagnostics=JSON.stringify(i)),o}function E(r,e){return Se("error","structure",e,r)}function dn(r,e){return Se("error","invariant",`Constraint ${e.key} not met: ${e.description}`,r,{fhirpath:e.expression})}function pn(r,e,t,n){return Se("error","processing",e,r,{...n,error:t})}var Ea={"http://hl7.org/fhirpath/System.String":"string"};function Ra(r){let e={};return r.min!==0&&(e.min=r.min),r.max!==1&&Number.isFinite(r.max)?e.max=r.max:r.max===Number.POSITIVE_INFINITY&&(e.max=Number.MAX_SAFE_INTEGER),e.type=r.type?.map(t=>({...t,extension:void 0,code:Ea[t.code]??t.code})),e}function $i(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 fn(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,$i(i,o)])),constraints:[],innerTypes:[]};return e}var Hi={Element:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]}}},BackboneElement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]}}},Address:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"code"}]},text:{type:[{code:"string"}]},line:{max:9007199254740991,type:[{code:"string"}]},city:{type:[{code:"string"}]},district:{type:[{code:"string"}]},state:{type:[{code:"string"}]},postalCode:{type:[{code:"string"}]},country:{type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Age:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Annotation:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"author[x]":{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Organization"]},{code:"string"}]},time:{type:[{code:"dateTime"}]},text:{min:1,type:[{code:"markdown"}]}}},Attachment:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},contentType:{type:[{code:"code"}]},language:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]},url:{type:[{code:"url"}]},size:{type:[{code:"unsignedInt"}]},hash:{type:[{code:"base64Binary"}]},title:{type:[{code:"string"}]},creation:{type:[{code:"dateTime"}]}}},CodeableConcept:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},coding:{max:9007199254740991,type:[{code:"Coding"}]},text:{type:[{code:"string"}]}}},Coding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"uri"}]},version:{type:[{code:"string"}]},code:{type:[{code:"code"}]},display:{type:[{code:"string"}]},userSelected:{type:[{code:"boolean"}]}}},ContactDetail:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"string"}]},telecom:{max:9007199254740991,type:[{code:"ContactPoint"}]}}},ContactPoint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"code"}]},value:{type:[{code:"string"}]},use:{type:[{code:"code"}]},rank:{type:[{code:"positiveInt"}]},period:{type:[{code:"Period"}]}}},Contributor:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{min:1,type:[{code:"string"}]},contact:{max:9007199254740991,type:[{code:"ContactDetail"}]}}},Count:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},DataRequirement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},"subject[x]":{type:[{code:"CodeableConcept"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Group"]}]},mustSupport:{max:9007199254740991,type:[{code:"string"}]},codeFilter:{max:9007199254740991,type:[{code:"DataRequirementCodeFilter"}]},dateFilter:{max:9007199254740991,type:[{code:"DataRequirementDateFilter"}]},limit:{type:[{code:"positiveInt"}]},sort:{max:9007199254740991,type:[{code:"DataRequirementSort"}]}}},DataRequirementCodeFilter:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]},code:{max:9007199254740991,type:[{code:"Coding"}]}}},DataRequirementDateFilter:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},"value[x]":{type:[{code:"dateTime"},{code:"Period"},{code:"Duration"}]}}},DataRequirementSort:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},direction:{min:1,type:[{code:"code"}]}}},Distance:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Dosage:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},sequence:{type:[{code:"integer"}]},text:{type:[{code:"string"}]},additionalInstruction:{max:9007199254740991,type:[{code:"CodeableConcept"}]},patientInstruction:{type:[{code:"string"}]},timing:{type:[{code:"Timing"}]},"asNeeded[x]":{type:[{code:"boolean"},{code:"CodeableConcept"}]},site:{type:[{code:"CodeableConcept"}]},route:{type:[{code:"CodeableConcept"}]},method:{type:[{code:"CodeableConcept"}]},doseAndRate:{max:9007199254740991,type:[{code:"DosageDoseAndRate"}]},maxDosePerPeriod:{type:[{code:"Ratio"}]},maxDosePerAdministration:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},maxDosePerLifetime:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},DosageDoseAndRate:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{type:[{code:"CodeableConcept"}]},"dose[x]":{type:[{code:"Range"},{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},"rate[x]":{type:[{code:"Ratio"},{code:"Range"},{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},Duration:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},ElementDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},representation:{max:9007199254740991,type:[{code:"code"}]},sliceName:{type:[{code:"string"}]},sliceIsConstraining:{type:[{code:"boolean"}]},label:{type:[{code:"string"}]},code:{max:9007199254740991,type:[{code:"Coding"}]},slicing:{type:[{code:"ElementDefinitionSlicing"}]},short:{type:[{code:"string"}]},definition:{type:[{code:"markdown"}]},comment:{type:[{code:"markdown"}]},requirements:{type:[{code:"markdown"}]},alias:{max:9007199254740991,type:[{code:"string"}]},min:{type:[{code:"unsignedInt"}]},max:{type:[{code:"string"}]},base:{type:[{code:"ElementDefinitionBase"}]},contentReference:{type:[{code:"uri"}]},type:{max:9007199254740991,type:[{code:"ElementDefinitionType"}]},"defaultValue[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},meaningWhenMissing:{type:[{code:"markdown"}]},orderMeaning:{type:[{code:"string"}]},"fixed[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},"pattern[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},example:{max:9007199254740991,type:[{code:"ElementDefinitionExample"}]},"minValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},"maxValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},maxLength:{type:[{code:"integer"}]},condition:{max:9007199254740991,type:[{code:"id"}]},constraint:{max:9007199254740991,type:[{code:"ElementDefinitionConstraint"}]},mustSupport:{type:[{code:"boolean"}]},isModifier:{type:[{code:"boolean"}]},isModifierReason:{type:[{code:"string"}]},isSummary:{type:[{code:"boolean"}]},binding:{type:[{code:"ElementDefinitionBinding"}]},mapping:{max:9007199254740991,type:[{code:"ElementDefinitionMapping"}]}}},ElementDefinitionSlicingDiscriminator:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},path:{min:1,type:[{code:"string"}]}}},ElementDefinitionSlicing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},discriminator:{max:9007199254740991,type:[{code:"ElementDefinitionSlicingDiscriminator"}]},description:{type:[{code:"string"}]},ordered:{type:[{code:"boolean"}]},rules:{min:1,type:[{code:"code"}]}}},ElementDefinitionBase:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},min:{min:1,type:[{code:"unsignedInt"}]},max:{min:1,type:[{code:"string"}]}}},ElementDefinitionType:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"uri"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},targetProfile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},aggregation:{max:9007199254740991,type:[{code:"code"}]},versioning:{type:[{code:"code"}]}}},ElementDefinitionExample:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},label:{min:1,type:[{code:"string"}]},"value[x]":{min:1,type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]}}},ElementDefinitionConstraint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},key:{min:1,type:[{code:"id"}]},requirements:{type:[{code:"string"}]},severity:{min:1,type:[{code:"code"}]},human:{min:1,type:[{code:"string"}]},expression:{type:[{code:"string"}]},xpath:{type:[{code:"string"}]},source:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]}}},ElementDefinitionBinding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},strength:{min:1,type:[{code:"code"}]},description:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]}}},ElementDefinitionMapping:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},identity:{min:1,type:[{code:"id"}]},language:{type:[{code:"code"}]},map:{min:1,type:[{code:"string"}]},comment:{type:[{code:"string"}]}}},Expression:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},description:{type:[{code:"string"}]},name:{type:[{code:"id"}]},language:{min:1,type:[{code:"code"}]},expression:{type:[{code:"string"}]},reference:{type:[{code:"uri"}]}}},Extension:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},url:{min:1,type:[{code:"uri"}]},"value[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]}}},HumanName:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},text:{type:[{code:"string"}]},family:{type:[{code:"string"}]},given:{max:9007199254740991,type:[{code:"string"}]},prefix:{max:9007199254740991,type:[{code:"string"}]},suffix:{max:9007199254740991,type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Identifier:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"CodeableConcept"}]},system:{type:[{code:"uri"}]},value:{type:[{code:"string"}]},period:{type:[{code:"Period"}]},assigner:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MarketingStatus:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},country:{min:1,type:[{code:"CodeableConcept"}]},jurisdiction:{type:[{code:"CodeableConcept"}]},status:{min:1,type:[{code:"CodeableConcept"}]},dateRange:{min:1,type:[{code:"Period"}]},restoreDate:{type:[{code:"dateTime"}]}}},Meta:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},versionId:{type:[{code:"id"}]},lastUpdated:{type:[{code:"instant"}]},source:{type:[{code:"uri"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},security:{max:9007199254740991,type:[{code:"Coding"}]},tag:{max:9007199254740991,type:[{code:"Coding"}]},project:{type:[{code:"uri"}]},author:{type:[{code:"Reference"}]},onBehalfOf:{type:[{code:"Reference"}]},account:{type:[{code:"Reference"}]},accounts:{max:9007199254740991,type:[{code:"Reference"}]},compartment:{max:9007199254740991,type:[{code:"Reference"}]}}},Money:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},currency:{type:[{code:"code"}]}}},Narrative:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},status:{min:1,type:[{code:"code"}]},div:{min:1,type:[{code:"xhtml"}]}}},ParameterDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"code"}]},use:{min:1,type:[{code:"code"}]},min:{type:[{code:"integer"}]},max:{type:[{code:"string"}]},documentation:{type:[{code:"string"}]},type:{min:1,type:[{code:"code"}]},profile:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]}}},Period:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},start:{type:[{code:"dateTime"}]},end:{type:[{code:"dateTime"}]}}},Population:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"age[x]":{type:[{code:"Range"},{code:"CodeableConcept"}]},gender:{type:[{code:"CodeableConcept"}]},race:{type:[{code:"CodeableConcept"}]},physiologicalCondition:{type:[{code:"CodeableConcept"}]}}},ProdCharacteristic:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},height:{type:[{code:"Quantity"}]},width:{type:[{code:"Quantity"}]},depth:{type:[{code:"Quantity"}]},weight:{type:[{code:"Quantity"}]},nominalVolume:{type:[{code:"Quantity"}]},externalDiameter:{type:[{code:"Quantity"}]},shape:{type:[{code:"string"}]},color:{max:9007199254740991,type:[{code:"string"}]},imprint:{max:9007199254740991,type:[{code:"string"}]},image:{max:9007199254740991,type:[{code:"Attachment"}]},scoring:{type:[{code:"CodeableConcept"}]}}},ProductShelfLife:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},identifier:{type:[{code:"Identifier"}]},type:{min:1,type:[{code:"CodeableConcept"}]},period:{min:1,type:[{code:"Quantity"}]},specialPrecautionsForStorage:{max:9007199254740991,type:[{code:"CodeableConcept"}]}}},Quantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Range:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},low:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},high:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},Ratio:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},numerator:{type:[{code:"Quantity"}]},denominator:{type:[{code:"Quantity"}]}}},Reference:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},reference:{type:[{code:"string"}]},type:{type:[{code:"uri"}]},identifier:{type:[{code:"Identifier"}]},display:{type:[{code:"string"}]}}},RelatedArtifact:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},label:{type:[{code:"string"}]},display:{type:[{code:"string"}]},citation:{type:[{code:"markdown"}]},url:{type:[{code:"url"}]},document:{type:[{code:"Attachment"}]},resource:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/Resource"]}]}}},SampledData:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},origin:{min:1,type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},period:{min:1,type:[{code:"decimal"}]},factor:{type:[{code:"decimal"}]},lowerLimit:{type:[{code:"decimal"}]},upperLimit:{type:[{code:"decimal"}]},dimensions:{min:1,type:[{code:"positiveInt"}]},data:{type:[{code:"string"}]}}},Signature:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,max:9007199254740991,type:[{code:"Coding"}]},when:{min:1,type:[{code:"instant"}]},who:{min:1,type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},onBehalfOf:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},targetFormat:{type:[{code:"code"}]},sigFormat:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]}}},SubstanceAmount:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"amount[x]":{type:[{code:"Quantity"},{code:"Range"},{code:"string"}]},amountType:{type:[{code:"CodeableConcept"}]},amountText:{type:[{code:"string"}]},referenceRange:{type:[{code:"SubstanceAmountReferenceRange"}]}}},SubstanceAmountReferenceRange:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},lowLimit:{type:[{code:"Quantity"}]},highLimit:{type:[{code:"Quantity"}]}}},Timing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},event:{max:9007199254740991,type:[{code:"dateTime"}]},repeat:{type:[{code:"TimingRepeat"}]},code:{type:[{code:"CodeableConcept"}]}}},TimingRepeat:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"bounds[x]":{type:[{code:"Duration"},{code:"Range"},{code:"Period"}]},count:{type:[{code:"positiveInt"}]},countMax:{type:[{code:"positiveInt"}]},duration:{type:[{code:"decimal"}]},durationMax:{type:[{code:"decimal"}]},durationUnit:{type:[{code:"code"}]},frequency:{type:[{code:"positiveInt"}]},frequencyMax:{type:[{code:"positiveInt"}]},period:{type:[{code:"decimal"}]},periodMax:{type:[{code:"decimal"}]},periodUnit:{type:[{code:"code"}]},dayOfWeek:{max:9007199254740991,type:[{code:"code"}]},timeOfDay:{max:9007199254740991,type:[{code:"time"}]},when:{max:9007199254740991,type:[{code:"code"}]},offset:{type:[{code:"unsignedInt"}]}}},TriggerDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{type:[{code:"string"}]},"timing[x]":{type:[{code:"Timing"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Schedule"]},{code:"date"},{code:"dateTime"}]},data:{max:9007199254740991,type:[{code:"DataRequirement"}]},condition:{type:[{code:"Expression"}]}}},UsageContext:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"Coding"}]},"value[x]":{min:1,type:[{code:"CodeableConcept"},{code:"Quantity"},{code:"Range"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/PlanDefinition","http://hl7.org/fhir/StructureDefinition/ResearchStudy","http://hl7.org/fhir/StructureDefinition/InsurancePlan","http://hl7.org/fhir/StructureDefinition/HealthcareService","http://hl7.org/fhir/StructureDefinition/Group","http://hl7.org/fhir/StructureDefinition/Location","http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MoneyQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},SimpleQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{max:0,type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},IdentityProvider:{elements:{authorizeUrl:{min:1,type:[{code:"string"}]},tokenUrl:{min:1,type:[{code:"string"}]},tokenAuthMethod:{type:[{code:"code"}]},userInfoUrl:{min:1,type:[{code:"string"}]},clientId:{min:1,type:[{code:"string"}]},clientSecret:{min:1,type:[{code:"string"}]},usePkce:{type:[{code:"boolean"}]},useSubject:{type:[{code:"boolean"}]},identitySource:{type:[{code:"code"}]},identityMappingMode:{type:[{code:"code"}]}}}};function ur(r){return new hn(r).parse()}var Ve=fn(Hi),gn=Object.create(null),Gi=Object.create(null),Pa={"http://hl7.org/fhir/StructureDefinition/MoneyQuantity":"MoneyQuantity","http://hl7.org/fhir/StructureDefinition/SimpleQuantity":"SimpleQuantity","http://hl7.org/fhir/uv/sql-on-fhir/StructureDefinition/ViewDefinition":"ViewDefinition"};function Ki(r){let e;return e=Gi[r],e||(e=Gi[r]=Object.create(null)),e}function lr(r){let t=(Array.isArray(r)?r:r.entry?.map(n=>n.resource)??[]).filter(n=>n?.resourceType==="StructureDefinition");Sn(t);for(let n of t)dr(n)}function dr(r){if(!r?.name)throw new Error("Failed loading StructureDefinition from bundle");if(r.resourceType!=="StructureDefinition")return;let e=ur(r),t=Pa[r.url],n,i;t?(n=Ve,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=Ve,i=r.type):(n=Ki(r.url),i=r.type),n[i]=e;for(let o of e.innerTypes)o.parentType=e,n[o.name]=o;gn[r.url]=e}function yn(){return Ve}function xn(r){return!!Ve[r]}function be(r,e){if(e){let t=Ki(e)[r];if(t)return t}return Ve[r]}function le(r,e){let t=be(r,e);if(!t)throw new f(P("Unknown data type: "+r));return t}function lt(r){let e=Ve[r];return e&&pr(e)}function vn(r){return!!gn[r]}function Tn(r){return gn[r]}var hn=class{constructor(e){c(this,"root");c(this,"elements");c(this,"elementIndex");c(this,"index");c(this,"resourceSchema");c(this,"slicingContext");c(this,"innerTypes");c(this,"backboneContext");if(!e.snapshot?.element||e.snapshot.element.length===0)throw new Error(`No snapshot defined for StructureDefinition '${e.name}'`);this.root=e.snapshot.element[0],this.elements=e.snapshot.element.slice(1),this.elementIndex=Object.create(null),this.index=0,this.resourceSchema={name:e.name,path:this.root.path,title:e.title,type:e.type,url:e.url,version:e.version,kind:e.kind,description:ka(e),elements:{},constraints:this.parseElementDefinition(this.root).constraints,innerTypes:[],summaryProperties:new Set,mandatoryProperties:new Set},this.innerTypes=[]}parse(){let e=this.next();for(;e;){if(e.sliceName)this.parseSliceStart(e);else if(e.id?.includes(":")){if(this.slicingContext?.current){let t=mn(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[mn(e,n.path)]=t;break}n=n.parent}if(!n){let i=mn(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&&!He(this.slicingContext.path,e?.path)&&(this.slicingContext=void 0),e.slicing&&!this.slicingContext&&this.enterSlice(e,t)}enterInnerType(e){for(;this.backboneContext&&!He(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;let t=cr(e);this.backboneContext={type:{name:t,type:t,path:e.path,title:e.label,description:e.definition,elements:{},constraints:this.parseElementDefinition(e).constraints,innerTypes:[]},path:e.path,parent:He(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,t){Ia(e)&&!this.peek()?.sliceName||(t.slicing={discriminator:(e.slicing?.discriminator??[]).map(n=>{if(n.type!=="value"&&n.type!=="pattern"&&n.type!=="type")throw new Error(`Unsupported slicing discriminator type: ${n.type}`);return{path:n.path,type:n.type}}),slices:[],ordered:e.slicing?.ordered??!1,rule:e.slicing?.rules},this.slicingContext={field:t.slicing,path:e.path??""})}checkFieldExit(e=void 0){if(this.backboneContext&&!He(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!He(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!!(He(e?.path,t?.path)&&e.type?.some(n=>["BackboneElement","Element"].includes(n.code)))}parseSliceStart(e){if(!this.slicingContext)throw new Error(`Invalid slice start before discriminator: ${e.sliceName} (${e.id})`);this.slicingContext.current={...this.parseElementDefinition(e),name:e.sliceName??"",definition:e.definition,elements:{}},this.slicingContext.field.slices.push(this.slicingContext.current)}parseElementDefinitionType(e){return(e.type??[]).map(t=>{let n;return(t.code==="BackboneElement"||t.code==="Element")&&(n=cr(e)),n||(n=de(t,"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type")?.valueUrl),n||(n=t.code??""),{code:n,targetProfile:t.targetProfile,profile:t.profile}})}parseElementDefinition(e){let t=zi(e.max),n=e.base?.max?zi(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:Ji(_(i,"fixed[x]")),pattern:Ji(_(i,"pattern[x]")),binding:e.binding}}};function Aa(r,e){if(!r)return;let t=[];for(let n of e){t.push("_"+n);let i=Ve[r.resourceType].elements[n+"[x]"];i&&t.push(...i.type.map(o=>n+L(o.code)))}for(let n of Object.getOwnPropertyNames(r))!e.includes(n)&&!t.includes(n)&&!wa.includes(n)&&Object.defineProperty(r,n,{enumerable:!1,writable:!1,value:void 0});return r.meta={...r.meta,tag:r.meta?.tag?r.meta.tag.concat(Qi):[Qi]},r}var Qi={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},wa=["resourceType","id","meta"];function zi(r){return r==="*"?Number.POSITIVE_INFINITY:Number.parseInt(r,10)}function mn(r,e=""){return Oa(r.path,e)}function Oa(r,e){return r?e&&r.startsWith(e)?r.substring(e.length+1):r:""}function He(r,e){return!r||!e?!1:e.startsWith(r+".")||e===r}function Ji(r){return Array.isArray(r)&&r.length>0?r[0]:A(r)?void 0:r}function Ia(r){let e=r.slicing?.discriminator;return!!(r.type?.some(t=>t.code==="Extension")&&e?.length===1&&e[0].type==="value"&&e[0].path==="url")}function ka(r){let e=r.description;return e?.startsWith(`Base StructureDefinition for ${r.name} Type: `)&&(e=e.substring(`Base StructureDefinition for ${r.name} Type: `.length)),e}function fr(r,e,t){new bn(r,e,t).crawl()}function Va(r,e,t){return new En(r,e,t).crawl()}var bn=class{constructor(e,t,n){c(this,"root");c(this,"visitor");c(this,"schema");c(this,"initialPath");c(this,"excludeMissingProperties");this.root=e,this.visitor=t,this.schema=n?.schema??le(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}crawl(){this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}crawlObject(e,t,n){let i=I(e.value);if(i&&this.visitor.onEnterResource&&this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties)for(let o of Object.keys(e.value))this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&this.visitor.onExitResource(n,e,t)}crawlProperty(e,t,n,i){let o=De(e,t,{withPath:!0});this.visitor.visitProperty&&this.visitor.visitProperty(e,t,i,o,n);for(let s of o)for(let a of re(s))this.crawlPropertyValue(a,i,n)}crawlPropertyValue(e,t,n){if(!dt(e.type)){let i=n.innerTypes?.find(o=>o.name===e.type)??le(e.type);this.crawlObject(e,i,t)}}},En=class{constructor(e,t,n){c(this,"root");c(this,"visitor");c(this,"schema");c(this,"initialPath");c(this,"excludeMissingProperties");this.root=e,this.visitor=t,this.schema=n?.schema??le(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}async crawl(){return this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}async crawlObject(e,t,n){let i=I(e.value);if(i&&this.visitor.onEnterResource&&await this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&await this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties&&e.value)for(let o of Object.keys(e.value))await this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))await this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&await this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&await this.visitor.onExitResource(n,e,t)}async crawlProperty(e,t,n,i){let o=De(e,t,{withPath:!0});if(this.visitor.visitPropertyAsync)for(let s of o)await this.visitor.visitPropertyAsync(e,t,i,s,n);for(let s of o)for(let a of re(s))await this.crawlPropertyValue(a,i,n)}async crawlPropertyValue(e,t,n){if(!dt(e.type)){let i=n.innerTypes?.find(o=>o.name===e.type)??le(e.type);await this.crawlObject(e,i,t)}}};function De(r,e,t){if(r===void 0)return[void 0];if(e==="$this")return[r];let n=t?.withPath?mr:_,[i,...o]=e.split("."),s=[n(r,i,t)];for(let a of o){let u=[];for(let l of s)if(Array.isArray(l))for(let p of l)u.push(n(p,a,t));else(t?.withPath&&l?.value!==void 0||!t?.withPath&&l!==void 0)&&u.push(n(l,a,t));s=u}return s}function mr(r,e,t){let n=r.path;return Da(_(r,e,t),n,e)}function Da(r,e,t){let n=e?e+".":"";return r===void 0?{type:"undefined",value:void 0,path:`${n}${t}`}:Array.isArray(r)?r.map((i,o)=>({...i,path:`${n}${t}[${o}]`})):{...r,path:`${n}${t}`}}function Ma(r){if(r[0]===r[0].toUpperCase()){let e=r.indexOf(".");if(e===-1)return"";r=r.slice(e+1)}return`.${r}`.replaceAll(".","/").replaceAll(/\[(\d+)]/g,(e,t)=>`/${t}`)}var hr={base64Binary:"string",boolean:"boolean",canonical:"string",code:"string",date:"string",dateTime:"string",decimal:"number",id:"string",instant:"string",integer:"number",integer64:"string",markdown:"string",oid:"string",positiveInt:"number",string:"string",time:"string",unsignedInt:"number",uri:"string",url:"string",uuid:"string",xhtml:"string","http://hl7.org/fhirpath/System.String":"string"},_a=new J(1e3);function dt(r){return r==="undefined"||r in hr}var pt={canonical:/^\S*$/,code:/^[^\s]+( [^\s]+)*$/,date:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1]))?)?$/,dateTime:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1])(T([01]\d|2[0-3])(:[0-5]\d:([0-5]\d|60)(\.\d{1,9})?)?)?)?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00)?)?)?$/,id:/^[A-Za-z0-9\-.]{1,64}$/,instant:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])T([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00))$/,markdown:/^[\r\n\t\u0020-\uFFFF]+$/,oid:/^urn:oid:[0-2](\.(0|[1-9]\d*))+$/,string:/^[\r\n\t\u0020-\uFFFF]+$/,time:/^([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?$/,uri:/^\S*$/,url:/^\S*$/,uuid:/^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,xhtml:/.*/},La={"ele-1":!0,"dom-3":!0,"org-1":!0,"sdf-19":!0};function Na(r,e){if(!lt(r.resourceType))throw new f(T("Invalid resource type"));return Yi(b(r),e)}function Yi(r,e){return new Rn(r,e).validate()}var Rn=class{constructor(e,t){c(this,"issues");c(this,"root");c(this,"resourceStack");c(this,"schema");c(this,"base64BinaryMaxBytes");c(this,"collect");this.issues=[],this.root=e,this.resourceStack=[],I(e.value)&&this.resourceStack.push(e.value),t?.profile?this.schema=ur(t.profile):this.schema=le(e.type),this.base64BinaryMaxBytes=t?.base64BinaryMaxBytes??1*1024*1024,this.collect=t?.collect}currentResource(){return this.resourceStack.at(-1)}validate(){Cn(this.root.value,this.schema.path,this.issues),this.constraintsCheck({...this.root,path:this.schema.path},this.schema),fr(this.root,this,{schema:this.schema,initialPath:this.schema.path});for(let e of this.issues)if(e.severity==="error")throw new f({resourceType:"OperationOutcome",issue:this.issues});return this.issues}onExitObject(e,t,n){this.checkAdditionalProperties(t,n.elements,t.path)}onEnterResource(e,t){this.resourceStack.push(t.value)}onExitResource(){this.resourceStack.pop()}visitProperty(e,t,n,i,o){let s=o.elements[t];if(!s)throw new Error(`Missing element validation schema for ${t}`);for(let a of i){if(!this.checkPresence(a,s,n))return;let u;if(s.isArray){if(!Array.isArray(a)){this.issues.push(E(n,"Expected array of values for property"));return}u=a}else{if(Array.isArray(a)){this.issues.push(E(n,"Expected single value for property"));return}u=[a]}(u.length<s.min||u.length>s.max)&&this.issues.push(E(s.path,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${u.length}`)),Ba(a,s)||this.issues.push(E(n,"Value did not match expected pattern"));let l=s.slicing?Object.fromEntries(s.slicing.slices.map(p=>[p.name,0])):void 0;for(let p of u){this.constraintsCheck(p,s),this.referenceTypeCheck(p,s),this.checkPropertyValue(p),this.collectValue(p,s);let g=Wa(p,s.slicing);g&&l&&(l[g]+=1)}this.validateSlices(s.slicing?.slices,l,n)}}checkPresence(e,t,n){return!Array.isArray(e)&&e.value===void 0?(t.min>0&&this.issues.push(E(e.path,"Missing required property")),!1):A(e)?(this.issues.push(E(n,"Invalid empty value")),!1):!0}checkPropertyValue(e){dt(e.type)?this.validatePrimitiveType(e):A(e.value)&&this.issues.push(E(e.path,"Invalid empty non-primitive value"))}validateSlices(e,t,n){if(!(!e||!t))for(let i of e){let o=t[i.name];(o<i.min||o>i.max)&&this.issues.push(E(n,`Incorrect number of values provided for slice '${i.name}': expected ${i.min}..${Number.isFinite(i.max)?i.max:"*"}, but found ${o}`))}}checkAdditionalProperties(e,t,n){let i=e.value;if(!i)return;let o={};for(let s of Object.keys(i)){if(s==="resourceType")continue;let a=Ua(e,s,t);if(a){let u,l;a.startsWith("_")?(u=a.slice(1),l=s.slice(1)):(u="_"+a,l="_"+s),u in o&&o[u]!==l&&this.issues.push(Se("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(Se("warning","structure",`Conflicting choice of type properties: "${s}", "${o[a]}"`,s)),o[a]=s;continue}!(s in t)&&!(s.startsWith("_")&&s.slice(1)in t)&&this.issues.push(E(`${n}.${s}`,`Invalid additional property "${s}"`))}}constraintsCheck(e,t){let n=t.constraints;for(let i of n??y)if(i.severity==="error"&&!(i.key in La)&&!this.isExpressionTrue(i,e)){this.issues.push(dn(e.path,i));return}}referenceTypeCheck(e,t){if(e.type!=="Reference")return;let n=e.value;if(!G(n)||n.reference.startsWith("#"))return;let i=n.reference.includes("?")?n.reference.split("?")[0]:n.reference.split("/")[0];if(!i)return;let o=t.type.find(g=>g.code==="Reference")?.targetProfile;if(!o)return;let s=ct+"/fhir/StructureDefinition/",a=s+"Resource",u=s+i,l="https://medplum.com/fhir/StructureDefinition/",p=l+i;for(let g of o)if(g===a||g===u||g===p||!g.startsWith(s)&&!g.startsWith(l))return;this.issues.push(Se("warning","structure",`Invalid reference: got "${i}", expected "${o.join('", "')}"`,e.path))}collectValue(e,t){t.binding?.valueSet&&t.binding.strength==="required"&&ja(e.type)&&this.appendToken(t.binding.valueSet,e)}appendToken(e,t){if(!this.collect?.tokens)return;let n=this.collect.tokens[e];if(!n){let i=Object.keys(this.collect.tokens);for(let o of i)o.startsWith(e+"|")&&(n=this.collect.tokens[o])}for(let i of n??y)if(i.path===t.path)return;this.collect.tokens[e]=K(n,t)}isExpressionTrue(e,t){let n={"%context":t,"%ucum":b(en)},i=this.currentResource();i&&(n["%resource"]=b(i)),I(this.root.value)&&(n["%rootResource"]=this.root);try{let o=w(e.expression,[t],n,_a);return o.length===1&&o[0].value===!0}catch(o){return this.issues.push(pn(t.path,"Error evaluating invariant expression",o,{fhirpath:e.expression})),!1}}validatePrimitiveType(e){let[t,n]=qa(e),i=e.path;if(t){let{type:o,value:s}=t;if(!(o in hr)){this.issues.push(E(i,`Invalid JSON type: ${o} is not a valid FHIR type`));return}let a=hr[o];if(typeof s!==a){s!==null&&this.issues.push(E(i,`Invalid JSON type: expected ${a}, but got ${typeof s}`));return}o==="base64Binary"?this.validateBase64Binary(s,i):a==="string"?this.validateString(s,o,i):a==="number"&&this.validateNumber(s,o,i)}n&&fr(n,this,{schema:le("Element"),initialPath:i})}validateBase64Binary(e,t){if(!$a(e)){this.issues.push(E(t,"Invalid base64Binary format"));return}let n=0;e.endsWith("==")?n=2:e.endsWith("=")&&(n=1),Math.max(0,Math.floor(e.length*3/4)-n)>this.base64BinaryMaxBytes&&this.issues.push(E(t,`base64Binary exceeds ${this.base64BinaryMaxBytes} bytes`))}validateString(e,t,n){if(!e.trim()){this.issues.push(E(n,"String must contain non-whitespace content"));return}if(e.length>1024*1024){this.issues.push(E(n,"String cannot be larger than 1 MB"));return}let i=pt[t];i&&!i.exec(e)&&this.issues.push(E(n,"Invalid "+t+" format"))}validateNumber(e,t,n){Number.isNaN(e)||!Number.isFinite(e)?this.issues.push(E(n,"Invalid numeric value")):Fa(t)&&!Number.isInteger(e)?this.issues.push(E(n,"Expected number to be an integer")):t===d.positiveInt&&e<=0?this.issues.push(E(n,"Expected number to be positive")):t===d.unsignedInt&&e<0&&this.issues.push(E(n,"Expected number to be non-negative"))}};function Fa(r){return r===d.integer||r===d.positiveInt||r===d.unsignedInt}function Ua(r,e,t){let n="";e.startsWith("_")&&(e=e.slice(1),n="_");let i=e.split(/(?=[A-Z])/g),o="";for(let s of i){o+=s;let a=o+"[x]";if(t[a])return _(r,o)?n+a:void 0}}function Cn(r,e,t){for(let[n,i]of Object.entries(r)){let o=`${e}.${n}`,s=n.startsWith("_")?n.slice(1):`_${n}`;if(i===null)t.push(E(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?t.push(E(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!r[s]?.[a]?t.push(E(`${o}[${a}]`,"Invalid null value")):i[a]&&Cn(i[a],`${o}[${a}]`,t);else typeof i=="object"&&Cn(i,o,t)}}function Ba(r,e){let t=Array.isArray(r)?r.map(n=>({type:n.type,value:n.value})):{type:r.type,value:r.value};return!(e.pattern&&!Ge(t,e.pattern)||e.fixed&&!pe(t,e.fixed))}function gr(r,e,t,n){if(Array.isArray(r))return!1;let i;e.path==="$this"?i=t:i=(n??t.elements)[e.path];let o=t.type;switch(e.type){case"value":case"pattern":if(!r||!i)return!1;if(i.pattern)return Ge(r,i.pattern);if(i.fixed)return pe(r,i.fixed);if(i.binding?.strength==="required"&&i.binding.valueSet)return!0;break;case"type":return!r||!o?.length?!1:o.some(s=>s.code===r.type)}return!1}function Wa(r,e){for(let t of e?.slices??y)if(e?.discriminator?.every(n=>re(De(r,n.path))?.some(i=>gr(i,n,t))))return t.name}function qa(r){if(typeof r.value!="object"||!r.value)return[r,void 0];let e=r.value.valueOf();if(e===r.value)return[void 0,{type:"Element",value:r.value}];let t=new Set(Object.keys(e)),n=Object.entries(r.value).filter(([o,s])=>!t.has(o)),i=n.length>0?Object.fromEntries(n):void 0;return[{type:r.type,value:e},{type:"Element",value:i}]}function ja(r){switch(r){case"CodeableConcept":case"Coding":case"code":case"Quantity":case"string":case"uri":return!0;default:return!1}}function $a(r){if(r.length===0)return!1;let e=0;r.endsWith("==")?e=2:r.endsWith("=")&&(e=1);let t=r.length-e;if(t<0||(e+t)%4!==0)return!1;let n=e>0?r.slice(0,-e):r;return/^[A-Za-z\d+/]+$/.test(n)}function h(r){return[{type:d.boolean,value:r}]}function b(r){return r==null?{type:"undefined",value:void 0}:Number.isSafeInteger(r)?{type:d.integer,value:r}:typeof r=="number"?{type:d.decimal,value:r}:typeof r=="boolean"?{type:d.boolean,value:r}:typeof r=="string"?{type:d.string,value:r}:V(r)?{type:d.Quantity,value:r}:I(r)?{type:r.resourceType,value:r}:Tr(r)?{type:d.CodeableConcept,value:r}:vr(r)?{type:d.Coding,value:r}:{type:d.BackboneElement,value:r}}function q(r){return r.length===0?!1:!!r[0].value}function D(r,e){if(r.length!==0){if(r.length===1&&(!e||r[0].type===e))return r[0];throw new Error(`Expected singleton of type ${e}, but found ${JSON.stringify(r)}`)}}function _(r,e,t){if(!r.value)return;let n=gt(r.type,e,t?.profileUrl);return n?to(r,e,n):ro(r,e)}function to(r,e,t){let n=r.value,i=t.type;if(!i||i.length===0)return;let o,s="undefined",a,u=t.path.lastIndexOf("."),l=t.path.substring(u+1),p=l,g=!1;l.endsWith("[x]")&&(p=l.substring(0,l.length-3),g=!0);for(let v of i){let M=p;if(g&&(M+=L(v.code)),o=n[M],a=n["_"+M],o!==void 0||a!==void 0){s=v.code;break}}if(a)if(Array.isArray(o)){o=o.slice();for(let v=0;v<Math.max(o.length,a.length);v++)o[v]=Pn(o[v],a[v])}else if(!o&&Array.isArray(a)){o=a.slice();for(let v=0;v<a.length;v++)o[v]=Pn(void 0,a[v])}else o=Pn(o,a);if(!A(o))return(s==="Element"||s==="BackboneElement")&&(s=t.type[0].code),Array.isArray(o)?o.map(v=>Xi(v,s)):Xi(o,s)}function Xi(r,e){return e==="Resource"&&I(r)&&(e=r.resourceType),{type:e,value:r}}function ro(r,e){let t=r.value;if(!t||typeof t!="object")return;let n;if(e in t){let i=t[e];Array.isArray(i)?n=i.map(b):n=b(i)}else{let i=e.endsWith("[x]")?e.substring(0,e.length-3):e;for(let o of Object.values(d)){let s=i+L(o);if(s in t){let a=t[s];Array.isArray(a)?n=a.map(u=>({type:o,value:u})):n={type:o,value:a};break}}}if(Array.isArray(n)){if(n.length===0||A(n[0]))return}else if(A(n))return;return n}function ft(r){let e=[];for(let t of r){let n=!1;for(let i of e)if(q(Qe(t,i))){n=!0;break}n||e.push(t)}return e}function An(r){return h(!q(r))}function wn(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?h(!1):h(r.every((t,n)=>q(Qe(t,e[n]))))}function On(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?h(!0):h(r.some((t,n)=>!q(Qe(t,e[n]))))}function Qe(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?h(Math.abs(t-n)<1e-8):V(t)&&V(n)?h(Vn(t,n)):h(typeof t=="object"&&typeof n=="object"?Dn(r,e):t===n)}function xr(r,e){return r.length===0&&e.length===0?h(!0):r.length!==e.length?h(!1):(r.sort(Zi),e.sort(Zi),h(r.every((t,n)=>q(no(t,e[n])))))}function no(r,e){let{type:t,value:n}=r,{type:i,value:o}=e,s=n?.valueOf(),a=o?.valueOf();return typeof s=="number"&&typeof a=="number"?h(Math.abs(s-a)<.01):V(s)&&V(a)?h(Vn(s,a)):h(t==="Coding"&&i==="Coding"?typeof s!="object"||typeof a!="object"?!1:s.code===a.code&&s.system===a.system:typeof s=="object"&&typeof a=="object"?Dn({...s,id:void 0},{...a,id:void 0}):typeof s=="string"&&typeof a=="string"?s.toLowerCase()===a.toLowerCase():s===a)}function Zi(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?t-n:typeof t=="string"&&typeof n=="string"?t.localeCompare(n):0}function mt(r,e){let{value:t}=r;if(t==null)return!1;let n=e;switch(n.startsWith("System.")&&(n=n.substring(7)),n.startsWith("FHIR.")&&(n=n.substring(5)),n){case"Boolean":return typeof t=="boolean";case"Decimal":case"Integer":return typeof t=="number";case"Date":return In(t);case"DateTime":return Me(t);case"Time":return typeof t=="string"&&!!/^T\d/.exec(t);case"Period":return kn(t);case"Quantity":return V(t);default:return r.type===n||typeof t=="object"&&t?.resourceType===n}}function In(r){return typeof r=="string"&&!!pt.date.exec(r)}function Me(r){return typeof r=="string"&&!!pt.dateTime.exec(r)}function kn(r){return!!(r&&typeof r=="object"&&("start"in r&&Me(r.start)||"end"in r&&Me(r.end)))}function ht(r){if(In(r)||Me(r))return{start:yr(r,"0000-01-01T00:00:00.000"),end:yr(r,"xxxx-12-31T23:59:59.999")};if(kn(r))return{start:r.start?yr(r.start,"0000-01-01T00:00:00.000"):void 0,end:r.end?yr(r.end,"xxxx-12-31T23:59:59.999"):void 0}}function yr(r,e){let t="Z",n=Math.max(r.indexOf("+",10),r.indexOf("-",10));n>-1?(t=r.substring(n),r=r.substring(0,n)):r.endsWith("Z")&&(r=r.substring(0,r.length-1));let i=r+e.substring(r.length)+t;return new Date(i).toISOString()}function V(r){return!!(r&&typeof r=="object"&&"value"in r&&typeof r.value=="number")}function Vn(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 Dn(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(eo(o)&&eo(s)){if(!Dn(o,s))return!1}else if(o!==s)return!1}return!0}function eo(r){return r!==null&&typeof r=="object"}function Pn(r,e){if(e){if(typeof e!="object")throw new Error("Primitive extension must be an object");return Ha(r??{},e)}return r}function Ha(r,e){return delete e.__proto__,delete e.constructor,Object.assign(r,e)}function Je(r,e){return I(r,e)&&"id"in r&&typeof r.id=="string"}function Ee(r){let e=O(r)??"undefined/undefined",t=so(r);return t===e?{reference:e}:{reference:e,display:t}}function O(r){if(G(r))return r.reference;if(Je(r))return`${r.resourceType}/${r.id}`}function Re(r){if(r)return G(r)?r.reference.split("/")[1]:r.id}function Ga(r){if(r?.reference===void 0)throw new f(T("Reference missing reference property."));let[e,t]=r.reference.split("/");if(e===""||t===""||t===void 0)throw new f(T("Unable to parse reference string."));return[e,t]}function br(r){if(r)if(r.accounts&&r.account){let e=r.accounts;return e.some(t=>t.reference===r.account?.reference)?e:[r.account,...e]}else return re(r.accounts??r.account)}function oo(r){return r.resourceType==="Patient"||r.resourceType==="Practitioner"||r.resourceType==="RelatedPerson"}function so(r){if(oo(r)){let e=Qa(r);if(e)return e}if(r.resourceType==="Device"){let e=za(r);if(e)return e}if(r.resourceType==="MedicationRequest"&&r.medicationCodeableConcept)return ze(r.medicationCodeableConcept);if(r.resourceType==="Subscription"&&r.criteria)return r.criteria;if(r.resourceType==="User"&&r.email)return r.email;if("name"in r&&r.name&&typeof r.name=="string")return r.name;if("code"in r&&r.code){let e=r.code;if(Array.isArray(e)&&(e=e[0]),Tr(e))return ze(e);if(lo(e))return e.text}return O(r)??""}function Qa(r){let e=r.name;if(e&&e.length>0)return Ke(e[0])}function za(r){let e=r.deviceName;if(e&&e.length>0)return e[0].name}function Ja(r){if(!("photo"in r))return;let e=r.photo;if(e)if(Array.isArray(e))for(let t of e){let n=io(t);if(n)return n}else return io(e)}function io(r){if(r.url&&r.contentType?.startsWith("image/"))return r.url}function Ka(r){return r?new Date(r):void 0}function yt(r,e){let t=new Date(r);t.setUTCHours(0,0,0,0);let n=e?new Date(e):new Date;n.setUTCHours(0,0,0,0);let i=t.getUTCFullYear(),o=t.getUTCMonth(),s=t.getUTCDate(),a=n.getUTCFullYear(),u=n.getUTCMonth(),l=n.getUTCDate(),p=a-i;(u<o||u===o&&l<s)&&p--;let g=a*12+u-(i*12+o);l<s&&g--;let v=Math.floor((n.getTime()-t.getTime())/(1e3*60*60*24));return{years:p,months:g,days:v}}function Ya(r,e){let{years:t,months:n,days:i}=yt(r,e);return t>=2?t.toString().padStart(3,"0")+"Y":n>=1?n.toString().padStart(3,"0")+"M":i.toString().padStart(3,"0")+"D"}function Xa(r){let e={};return ao(r.item,e),e}function ao(r,e){for(let t of r??y)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer[0]),ao(t.item,e)}function Za(r){let e={};return co(r.item,e),e}function co(r,e){for(let t of r??y)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]?e[t.linkId]=[...e[t.linkId],...t.answer]:e[t.linkId]=t.answer),co(t.item,e)}function Er(r,e){let t=r.identifier;if(!t)return;let n=Array.isArray(t)?t:[t];for(let i of n)if(i.system===e)return i.value}function ec(r,e,t,n){let i={system:e,value:t};n?.use&&(i.use=n.use);let o=r.identifier;if(!o){r.identifier=[i];return}for(let s of o)if(s.system===e){Object.assign(s,i);return}o.push(i)}function Rr(r,...e){let t=de(r,...e);if(!t)return;let n=_({type:"Extension",value:t},"value[x]");if(n)return Array.isArray(n)?n[0].value:n.value}function de(r,...e){let t=r;for(let n=0;n<e.length&&t;n++)t=t?.extension?.find(i=>i.url===e[n]);return t}function xt(r,e){let t=Mn(r);return JSON.stringify(t,null,e?2:void 0)??""}function Mn(r){if(!(r==null||r===""))return typeof r=="object"?Array.isArray(r)?tc(r):rc(r):r}function tc(r){let e=r.length;if(e===0)return;let t,n=0;for(let i=0;i<e;i++){let o=r[i],s=Mn(o);s!==o&&!t&&(t=Array.from(r)),s===void 0?t&&(t[i]=null):(t&&(t[i]=s),n++)}if(n!==0)return t??r}function rc(r){let e,t=0;for(let n in r){let i=r[n],o=Mn(i);o!==i&&!e&&(e={...r}),o===void 0?e&&delete e[n]:(e&&(e[n]=o),t++)}if(t!==0)return e??r}function A(r){if(r==null)return!0;let e=typeof r;return e==="string"||e==="object"?!ie(r):!1}function ie(r){if(r==null)return!1;let e=typeof r;return e==="string"&&r!==""||e==="object"&&("length"in r&&r.length>0||Object.keys(r).length>0)}function nc(r){if(!r)return;let e=r.length-1;for(;e>=0&&A(r[e]);)e--;return e>=0?r.slice(0,e+1):void 0}function pe(r,e,t){return r===e||A(r)&&A(e)?!0:A(r)||A(e)?!1:Array.isArray(r)&&Array.isArray(e)?ic(r,e):Array.isArray(r)||Array.isArray(e)?!1:C(r)&&C(e)?oc(r,e,t):(C(r)||C(e),!1)}function ic(r,e){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(!pe(r[t],e[t]))return!1;return!0}function oc(r,e,t){let n=new Set;for(let i of Object.keys(r))n.add(i);for(let i of Object.keys(e))n.add(i);t==="meta"&&(n.delete("versionId"),n.delete("lastUpdated"),n.delete("author"));for(let i of n){let o=r[i],s=e[i];if(!pe(o,s,i))return!1}return!0}function Ge(r,e){return A(r)?!0:A(e)?!1:Array.isArray(r)&&Array.isArray(e)?sc(r,e):Array.isArray(r)||Array.isArray(e)?!1:C(r)&&C(e)?ac(r,e):C(r)||C(e)?!1:r===e}function sc(r,e){return e.every(t=>r.some(n=>Ge(n,t)))}function ac(r,e){return Object.entries(e).every(([t,n])=>t in r&&Ge(r[t],n))}function Ce(r){return r===void 0?r:JSON.parse(JSON.stringify(r))}function cc(r){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(r)}function C(r){return r!==null&&typeof r=="object"}function uc(r){return r.every(_e)}function _e(r){return typeof r=="string"}function vr(r){return C(r)&&"code"in r&&typeof r.code=="string"}function Tr(r){return C(r)&&"coding"in r&&Array.isArray(r.coding)&&r.coding.every(vr)}function lc(r,e){for(let t of r??y)for(let n of t.coding??y)if(n.system===e)return n.code}function uo(r,e){let[t,n]=Le(e,"|",2);return n===void 0?r.code===e:t===""?r.system===void 0&&r.code===n:n===""?r.system===t:r.system===t&&r.code===n}function dc(r,e){return(r.coding??y).some(t=>uo(t,e))}function lo(r){return C(r)&&"text"in r&&typeof r.text=="string"}var po=[];for(let r=0;r<256;r++)po.push(r.toString(16).padStart(2,"0"));function _n(r){let e=Nn(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=po[t[i]];return n.join("")}function Ln(r){let e=Nn(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=String.fromCodePoint(t[i]);return window.btoa(n.join(""))}function Nn(r){return ArrayBuffer.isView(r)?r.buffer:r}function L(r){return r?r.charAt(0).toUpperCase()+r.substring(1):""}function pc(r){return r===r.toLowerCase()&&r!==r.toUpperCase()}function Cr(r){return r.length>0&&r.startsWith(r[0].toUpperCase())}function fe(r,e){let t=r+".";if(e.startsWith(t))return e.slice(t.length)}function Sr(r,e){return r.coding?.find(t=>t.system===e)?.code}function fc(r,e,t){r.coding??=[];let n=r.coding.find(i=>i.system===e);n?n.code=t:r.coding.push({system:e,code:t})}function mc(r,e,t,n){return r.qualifiedInterval?.find(i=>mo(i,e)&&xc(i,t,r.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function hc(r,e,t){return fo(r,e,t)[0]}function fo(r,e,t){return r.qualifiedInterval?.filter(n=>mo(n,e)&&(!t||t.includes(n.condition)))??[]}function mo(r,e){return gc(r,e)&&yc(r,e)}function gc(r,e){return!r.gender||r.gender===e.gender}function yc(r,e){return!r.age||Fn(yt(e.birthDate).years,r.age)}function xc(r,e,t){return!!r.range&&Fn(e,r.range,t)}function Fn(r,e,t){return(e.low?.value===void 0||go(r,e.low.value,t))&&(e.high?.value===void 0||ho(r,e.high.value,t))}function vc(r,e){return Number.parseFloat(r.toFixed(e))}function Tc(r,e,t){return ne(r,t)===ne(e,t)}function Sc(r,e,t){return ne(r,t)<ne(e,t)}function bc(r,e,t){return ne(r,t)>ne(e,t)}function ho(r,e,t){return ne(r,t)<=ne(e,t)}function go(r,e,t){return ne(r,t)>=ne(e,t)}function ne(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}function Ec(r,e,t){return r.find(n=>typeof e=="string"?Sr(n.code||{},t)===e:Sr(n.code||{},t)===Sr(e,t))}function Rc(r){return Array.isArray(r)?r[0]:r}var Pr=(r,e)=>new Promise((t,n)=>{e?.signal?.throwIfAborted();let i=setTimeout(t,r);e?.signal?.addEventListener("abort",()=>{clearTimeout(i),n(e.signal?.reason)},{once:!0})});function Le(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 Un(r){let e,t=!1;return function(){return t||(e=r(),t=!0),e}}function K(r,e){return r?(r.push(e),r):[e]}function vt(r){return r.sort((e,t)=>e.localeCompare(t))}function Ar(r){return r.endsWith("/")?r:r+"/"}function yo(r){return r.startsWith("/")?r.slice(1):r}function U(r,e){return new URL(yo(e),Ar(r.toString())).toString()}function Bn(r,e){return U(r,e).toString().replace("http://","ws://").replace("https://","wss://")}function Wn(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 xo=/^(([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-_]*[a-zA-Z0-9])\.)*([A-Za-z0-9]|[A-Za-z0-9][A-Za-z0-9\-_]*[A-Za-z0-9])$/;function Cc(r){return xo.test(r)}function Pc(r,e){return r?.meta?.profile?.includes(e)||(r.meta=r.meta??{},r.meta.profile=r.meta.profile??[],r.meta.profile.push(e)),r}function Ac(r,e){return new Map(r.entry?.filter(n=>!!n.resource).map(n=>[Er(n.resource,e),n.resource]).filter(([n])=>n!==void 0))}function wc(r,e){if(r?.meta?.profile?.includes(e)){let t=r.meta.profile.indexOf(e);r.meta.profile.splice(t,1)}return r}function Oc(r,e){let t=[];if(!r)return t;for(let n=0;n<r.length;n++){let i=e(r[n],n);Array.isArray(i)?t.push(...i):i!==void 0&&t.push(i)}return t}function Ic(r){return r.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("\u201C","&ldquo;").replaceAll("\u201D","&rdquo;").replaceAll("\u2018","&lsquo;").replaceAll("\u2019","&rsquo;").replaceAll("\u2026","&hellip;")}function kc(r){return r!=null}var y=Object.freeze([]),Vc=()=>{};function qn(r){if(!r)return"";switch(r.type){case"Address":return To(r.value);case"CodeableConcept":return ze(r.value);case"Coding":return jn(r.value);case"ContactPoint":return r.value.value;case"HumanName":return Ke(r.value);case"Quantity":return me(r.value);case"Reference":return vo(r.value);default:return r.value?.toString()??""}}function vo(r){return r?r.display??r.reference??xt(r):""}function To(r,e){if(!r)return"";let t=[];if(r.line&&t.push(...r.line),r.city||r.state||r.postalCode){let n=[];r.city&&n.push(r.city),r.state&&n.push(r.state),r.postalCode&&n.push(r.postalCode),t.push(n.join(", "))}return r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.join(e?.lineSeparator??", ").trim()}function Ke(r,e){if(!r)return"";let t=[];if(r.prefix&&e?.prefix!==!1&&t.push(...r.prefix),r.given&&t.push(...r.given),r.family&&t.push(r.family),r.suffix&&e?.suffix!==!1&&t.push(...r.suffix),r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.length===0){let n=Ne(r.text);if(n)return n}return t.join(" ").trim()}function Dc(r){let e=[];return r.given&&e.push(...r.given),e.join(" ").trim()}function Mc(r){return Ne(r.family)??""}function Tt(r){return r instanceof Date&&!Number.isNaN(r.getTime())}function _c(r,e,t){if(!r)return"";let n=new Date(r);return Tt(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...t})):""}function Lc(r,e,t){if(!r)return"";let n=new Date("2000-01-01T"+r+"Z");return Tt(n)?n.toLocaleTimeString(e,t):""}function So(r,e,t){if(!r)return"";let[n=0,i=0,o=0]=r.split(":").map(Number),s=new Date(Date.UTC(1970,0,1,n,i,o));return Tt(s)?new Intl.DateTimeFormat(e,{hour:"numeric",minute:"2-digit",second:o===0?void 0:"numeric",...t,timeZone:"UTC"}).format(s):""}function wr(r,e,t){if(!r)return"";let n=new Date(r);return Tt(n)?n.toLocaleString(e,t):""}function Nc(r,e,t){return!r||!r.start&&!r.end?"":wr(r.start,e,t)+" - "+wr(r.end,e,t)}var Fc={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},Uc={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},Bc={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function Wc(r){if(!r)return"";let e=[];return qc(e,r.repeat),r.event&&e.push(r.event.map(t=>wr(t)).join(", ")),L(e.join(" ").trim())}function qc(r,e){if(!e?.periodUnit)return;let t=e.frequency??1,n=e.period??1,i=e.periodUnit;t===1&&n===1?r.push(Fc[i]):(t===1?r.push("once"):r.push(t+" times"),n===1?r.push("per "+Uc[i]):r.push("per "+n+" "+Bc[i])),e.dayOfWeek&&r.push("on "+e.dayOfWeek.map(L).join(", ")),e.timeOfDay&&r.push("at "+e.timeOfDay.map(o=>So(o)).join(", "))}function jc(r,e,t=!1){if(t&&e===void 0)throw new Error("Precision must be specified for exclusive ranges");let n=r?.low&&{...r.low,comparator:void 0},i=r?.high&&{...r.high,comparator:void 0};return n?.value===void 0&&i?.value===void 0?"":n?.value!==void 0&&i?.value===void 0?t&&e!==void 0?(n.value=Gc(n.value,e),`> ${me(n,e)}`):`>= ${me(n,e)}`:n?.value===void 0&&i?.value!==void 0?t&&e!==void 0?(i.value=Hc(i.value,e),`< ${me(i,e)}`):`<= ${me(i,e)}`:(n?.unit===i?.unit&&delete n?.unit,`${me(n,e)} - ${me(i,e)}`)}function me(r,e){if(!r)return"";let t=[];return r.comparator&&(t.push(r.comparator),t.push(" ")),r.value!==void 0&&(e!==void 0?t.push(r.value.toFixed(e)):t.push(r.value)),r.unit&&(r.unit!=="%"&&t.at(-1)!==" "&&t.push(" "),t.push(r.unit)),t.join("").trim()}function $c(r){return r?.value===void 0?"":r.value.toLocaleString(void 0,{style:"currency",currency:r.currency??"USD",currencyDisplay:"narrowSymbol"})}function ze(r){if(!r)return"";let e=Ne(r.text);return e||(r.coding?r.coding.map(t=>jn(t)).join(", "):"")}function jn(r,e){let t=Ne(r?.display);if(t){let n=e?Ne(r?.code):void 0;return`${t}${n?" ("+n+")":""}`}return Ne(r?.code)??""}function bo(r){if(!r)return"";let e=[];if(r.valueQuantity)e.push(me(r.valueQuantity));else if(r.valueCodeableConcept)e.push(ze(r.valueCodeableConcept));else{let t=Ne(r.valueString);t&&e.push(t)}return"component"in r&&e.push(r.component.map(t=>bo(t)).join(" / ")),e.join(" / ").trim()}function Ne(r){return typeof r=="string"?r:void 0}function Hc(r,e,t=1){return(Eo(r,e)+t)*Math.pow(10,-e)}function Gc(r,e,t=1){return(Eo(r,e)-t)*Math.pow(10,-e)}function Eo(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}var d={Address:"Address",Age:"Age",Annotation:"Annotation",Attachment:"Attachment",BackboneElement:"BackboneElement",CodeableConcept:"CodeableConcept",Coding:"Coding",ContactDetail:"ContactDetail",ContactPoint:"ContactPoint",Contributor:"Contributor",Count:"Count",DataRequirement:"DataRequirement",Distance:"Distance",Dosage:"Dosage",Duration:"Duration",Element:"Element",ElementDefinition:"ElementDefinition",Expression:"Expression",Extension:"Extension",HumanName:"HumanName",Identifier:"Identifier",MarketingStatus:"MarketingStatus",Meta:"Meta",Money:"Money",MoneyQuantity:"MoneyQuantity",Narrative:"Narrative",ParameterDefinition:"ParameterDefinition",Period:"Period",Population:"Population",ProdCharacteristic:"ProdCharacteristic",ProductShelfLife:"ProductShelfLife",Quantity:"Quantity",Range:"Range",Ratio:"Ratio",Reference:"Reference",RelatedArtifact:"RelatedArtifact",SampledData:"SampledData",Signature:"Signature",SimpleQuantity:"SimpleQuantity",SubstanceAmount:"SubstanceAmount",SystemString:"http://hl7.org/fhirpath/System.String",Timing:"Timing",TriggerDefinition:"TriggerDefinition",UsageContext:"UsageContext",base64Binary:"base64Binary",boolean:"boolean",canonical:"canonical",code:"code",date:"date",dateTime:"dateTime",decimal:"decimal",id:"id",instant:"instant",integer:"integer",markdown:"markdown",oid:"oid",positiveInt:"positiveInt",string:"string",time:"time",unsignedInt:"unsignedInt",uri:"uri",url:"url",uuid:"uuid",xhtml:"xhtml"};function Qc(r){for(let e of r.entry??y){let t=e.resource;t.resourceType==="SearchParameter"&&Or(t)}}function Sn(r){let e=Array.isArray(r)?r:r.entry?.map(t=>t.resource)??[];for(let t of e)t?.resourceType==="StructureDefinition"&&t.kind==="resource"&&Co(t.type)}function Co(r){let e=j.types[r];return e||(e={searchParamsDetails:{}},j.types[r]=e),!e.searchParams&&r!=="Binary"&&(e.searchParams={_id:{base:[r],code:"_id",type:"token",expression:r+".id"},_lastUpdated:{base:[r],code:"_lastUpdated",type:"date",expression:r+".meta.lastUpdated"},_compartment:{base:[r],code:"_compartment",type:"reference",expression:r+".meta.compartment"},_profile:{base:[r],code:"_profile",type:"uri",expression:r+".meta.profile"},_security:{base:[r],code:"_security",type:"token",expression:r+".meta.security"},_source:{base:[r],code:"_source",type:"uri",expression:r+".meta.source"},_tag:{base:[r],code:"_tag",type:"token",expression:r+".meta.tag"},_project:{base:[r],code:"_project",type:"token",expression:r+".meta.project"}}),e}function Or(r){for(let e of r.base??y){let t=Co(e);t.searchParams||(t.searchParams={}),t.searchParams[r.code]=r}}function cr(r){let e=r.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?Po((r.base?.path??r.path)?.split(".")):e}function Po(r){return r.length===1?r[0]:r.map(L).join("")}function pr(r){return r.kind==="resource"&&r.name!=="Resource"&&r.name!=="DomainResource"}function zc(){return Object.values(yn()).filter(pr).map(r=>r.name)}function Jc(r){return j.types[r]?.searchParams}function Kc(r,e){return j.types[r]?.searchParams?.[e]}function Yc(r){let e=r.replaceAll("[x]","").split(".").pop();return Ao(e)}function Ao(r){let e;return r.length<100?e=r.match(/[A-Z]+(?![a-z])|[A-Z]?[a-z]+|\d+/g)??[]:e=r.split(/(?=[A-Z])/),e.map(Zc).join(" ").replace("_"," ").replaceAll(/\s+/g," ")}var Xc=new Set(["CDS","ID","IP","PKCE","JWKS","URI","URL","OMB","UDI"]);function Zc(r){let e=r.toUpperCase();return r===e?r:Xc.has(e)?e:e.charAt(0)+r.slice(1)}function gt(r,e,t){let n=be(r,t);if(n)return $n(n.elements,e)}function $n(r,e){let t=r[e]??r[e+"[x]"];if(t)return t;for(let n=0;n<e.length;n++){let i=e[n];if(i>="A"&&i<="Z"){let o=e.slice(0,n)+"[x]",s=r[o];if(s)return s}}}function eu(r,e,t){let n=e.split(/[.[\]]/g),i=be(r,t);if(!i)return;let o=i,s;for(let a of n){let u;if(a.match(/^[a-z]/)){let l=$n(o.elements,a);if(!l)return;if(l.type.length>1)throw new Error("Multiple matching types in path "+e);u=be(l.type[0].code),s=l}u&&(o=u)}return s}function tu(r){return!!(r&&typeof r=="object"&&"type"in r&&"value"in r)}function I(r,e){return!(!r||typeof r!="object"||!("resourceType"in r)||e&&r.resourceType!==e)}function G(r,e){return r&&typeof r=="object"&&"reference"in r&&typeof r.reference=="string"?e?r.reference.match(new RegExp(`^${e}(/|\\?)`))!==null:!0:!1}var j={types:{}};function Hn(r){switch(r.type){case d.uuid:case d.uri:case d.url:case d.string:case d.oid:case d.markdown:case d.id:case d.code:case d.canonical:case d.base64Binary:case d.SystemString:case d.date:case d.dateTime:case d.instant:return r.value;case d.Identifier:return`${r.value.system??""}|${r.value.value}`;case d.Coding:return Ro(r.value);case d.CodeableConcept:return r.value.coding?.map(Ro).join(",")??r.value.text;case d.HumanName:return r.value.text?r.value.text:Ke(r.value);case d.unsignedInt:case d.positiveInt:case d.integer:case d.decimal:return r.value.toString();case d.boolean:return r.value?"true":"false";case d.Extension:return r.value.url;case d.ContactPoint:return r.value.value;case d.Quantity:case d.Age:case d.Count:case d.Duration:return`${r.value.value}|${r.value.system??""}|${r.value.code??r.value.unit??""}`;case d.Reference:return r.value.reference;default:return Je(r.value)?O(r.value):JSON.stringify(r)}}function Ro(r){return r?`${r.system??""}|${r.code}`:""}function Ye(r){if(r.startsWith("T"))return r+"T00:00:00.000Z".substring(r.length);if(r.length<=10)return r;try{return new Date(r).toISOString()}catch{return r}}var he=()=>[],N={empty:(r,e)=>h(e.every(t=>A(t.value))),hasValue:(r,e)=>h(e.length!==0),exists:(r,e,t)=>t?h(e.some(n=>q(t.eval(r,[n])))):h(e.length>0&&e.every(n=>!A(n.value))),all:(r,e,t)=>h(e.every(n=>q(t.eval(r,[n])))),allTrue:(r,e)=>{for(let t of e)if(!t.value)return h(!1);return h(!0)},anyTrue:(r,e)=>{for(let t of e)if(t.value)return h(!0);return h(!1)},allFalse:(r,e)=>{for(let t of e)if(t.value)return h(!1);return h(!0)},anyFalse:(r,e)=>{for(let t of e)if(!t.value)return h(!0);return h(!1)},subsetOf:(r,e,t)=>{if(e.length===0)return h(!0);let n=t.eval(r,Fe(r));return n.length===0?h(!1):h(e.every(i=>n.some(o=>o.value===i.value)))},supersetOf:(r,e,t)=>{let n=t.eval(r,Fe(r));return n.length===0?h(!0):e.length===0?h(!1):h(n.every(i=>e.some(o=>o.value===i.value)))},count:(r,e)=>[{type:d.integer,value:e.length}],distinct:(r,e)=>{let t=[];for(let n of e)t.some(i=>i.value===n.value)||t.push(n);return t},isDistinct:(r,e)=>h(e.length===N.distinct(r,e).length),where:(r,e,t)=>e.filter(n=>q(t.eval(r,[n]))),select:(r,e,t)=>e.flatMap(n=>t.eval({parent:r,variables:{$this:n}},[n])),repeat:he,ofType:(r,e,t)=>e.filter(n=>n.type===t.name),single:(r,e)=>{if(e.length>1)throw new Error("Expected input length one for single()");return e.length===0?[]:e.slice(0,1)},first:(r,e)=>e.length===0?[]:e.slice(0,1),last:(r,e)=>e.length===0?[]:e.slice(-1,e.length),tail:(r,e)=>e.length===0?[]:e.slice(1,e.length),skip:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new TypeError("Expected a number for skip(num)");return n>=e.length?[]:n<=0?e:e.slice(n,e.length)},take:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new TypeError("Expected a number for take(num)");return n<=0?[]:e.slice(0,n)},intersect:(r,e,t)=>{if(!t)return e;let n=t.eval(r,Fe(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,Fe(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,Fe(r));return ft([...e,...n])},combine:(r,e,t)=>{if(!t)return e;let n=t.eval(r,Fe(r));return[...e,...n]},htmlChecks:(r,e,t)=>[b(!0)],iif:(r,e,t,n,i)=>{let o=t.eval(r,e);if(o.length>1||o.length===1&&typeof o[0].value!="boolean")throw new Error("Expected criterion to evaluate to a Boolean");return q(o)?n.eval(r,e):i?i.eval(r,e):[]},toBoolean:(r,e)=>{if(e.length===0)return[];let[{value:t}]=se(e,1);if(typeof t=="boolean")return[{type:d.boolean,value:t}];if(typeof t=="number"&&(t===0||t===1))return h(!!t);if(typeof t=="string"){let n=t.toLowerCase();if(["true","t","yes","y","1","1.0"].includes(n))return h(!0);if(["false","f","no","n","0","0.0"].includes(n))return h(!1)}return[]},convertsToBoolean:(r,e)=>e.length===0?[]:h(N.toBoolean(r,e).length===1),toInteger:(r,e)=>{if(e.length===0)return[];let[{value:t}]=se(e,1);return typeof t=="number"?[{type:d.integer,value:t}]:typeof t=="string"&&/^[+-]?\d+$/.exec(t)?[{type:d.integer,value:Number.parseInt(t,10)}]:typeof t=="boolean"?[{type:d.integer,value:t?1:0}]:[]},convertsToInteger:(r,e)=>e.length===0?[]:h(N.toInteger(r,e).length===1),toDate:(r,e)=>{if(e.length===0)return[];let[{value:t}]=se(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:d.date,value:Ye(t)}]:[]},convertsToDate:(r,e)=>e.length===0?[]:h(N.toDate(r,e).length===1),toDateTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=se(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:d.dateTime,value:Ye(t)}]:[]},convertsToDateTime:(r,e)=>e.length===0?[]:h(N.toDateTime(r,e).length===1),toDecimal:(r,e)=>{if(e.length===0)return[];let[{value:t}]=se(e,1);return typeof t=="number"?[{type:d.decimal,value:t}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(t)?[{type:d.decimal,value:Number.parseFloat(t)}]:typeof t=="boolean"?[{type:d.decimal,value:t?1:0}]:[]},convertsToDecimal:(r,e)=>e.length===0?[]:h(N.toDecimal(r,e).length===1),toQuantity:(r,e)=>{if(e.length===0)return[];let[{value:t}]=se(e,1);return V(t)?[{type:d.Quantity,value:t}]:typeof t=="number"?[{type:d.Quantity,value:{value:t,unit:"1"}}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(t)?[{type:d.Quantity,value:{value:Number.parseFloat(t),unit:"1"}}]:typeof t=="boolean"?[{type:d.Quantity,value:{value:t?1:0,unit:"1"}}]:[]},convertsToQuantity:(r,e)=>e.length===0?[]:h(N.toQuantity(r,e).length===1),toString:(r,e)=>{if(e.length===0)return[];let[{value:t}]=se(e,1);return t==null?[]:V(t)?[{type:d.string,value:`${t.value} '${t.unit}'`}]:[{type:d.string,value:t.toString()}]},convertsToString:(r,e)=>e.length===0?[]:h(N.toString(r,e).length===1),toTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=se(e,1);if(typeof t=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(t);if(n)return[{type:d.time,value:Ye("T"+n[1])}]}return[]},convertsToTime:(r,e)=>e.length===0?[]:h(N.toTime(r,e).length===1),indexOf:(r,e,t)=>Q((n,i)=>n.indexOf(i),r,e,t),substring:(r,e,t,n)=>Q((i,o,s)=>{let a=o,u=s?a+s:i.length;return a<0||a>=i.length?void 0:i.substring(a,u)},r,e,t,n),startsWith:(r,e,t)=>Q((n,i)=>n.startsWith(i),r,e,t),endsWith:(r,e,t)=>Q((n,i)=>n.endsWith(i),r,e,t),contains:(r,e,t)=>Q((n,i)=>n.includes(i),r,e,t),upper:(r,e)=>Q(t=>t.toUpperCase(),r,e),lower:(r,e)=>Q(t=>t.toLowerCase(),r,e),replace:(r,e,t,n)=>Q((i,o,s)=>i.replaceAll(o,s),r,e,t,n),matches:(r,e,t)=>Q((n,i)=>!!new RegExp(i).exec(n),r,e,t),replaceMatches:(r,e,t,n)=>Q((i,o,s)=>i.replaceAll(new RegExp(o,"g"),s.replaceAll(/\$\{(\w+)\}/g,"$<$1>")),r,e,t,n),length:(r,e)=>Q(t=>t.length,r,e),toChars:(r,e)=>Q(t=>t?t.split(""):void 0,r,e),encode:he,decode:he,escape:he,unescape:he,trim:he,split:he,join:(r,e,t)=>{let n=t?.eval(r,Fe(r))[0]?.value??"";if(typeof n!="string")throw new TypeError("Separator must be a string.");return[{type:d.string,value:e.map(i=>i.value?.toString()??"").join(n)}]},abs:(r,e)=>oe(Math.abs,r,e),ceiling:(r,e)=>oe(Math.ceil,r,e),exp:(r,e)=>oe(Math.exp,r,e),floor:(r,e)=>oe(Math.floor,r,e),ln:(r,e)=>oe(Math.log,r,e),log:(r,e,t)=>oe((n,i)=>Math.log(n)/Math.log(i),r,e,t),power:(r,e,t)=>oe(Math.pow,r,e,t),round:(r,e,...t)=>oe((n,i=0)=>{if(typeof i!="number"||i<0)throw new Error("Invalid precision provided to round()");let o=Math.pow(10,i);return Math.round(n*o)/o},r,e,...t),sqrt:(r,e)=>oe(Math.sqrt,r,e),truncate:(r,e)=>oe(t=>Math.trunc(t),r,e),children:he,descendants:he,trace:(r,e,t)=>e,now:()=>[{type:d.dateTime,value:new Date().toISOString()}],timeOfDay:()=>[{type:d.time,value:new Date().toISOString().substring(11)}],today:()=>[{type:d.date,value:new Date().toISOString().substring(0,10)}],between:(r,e,t,n,i)=>{let o=N.toDateTime(r,t.eval(r,e));if(o.length===0)throw new Error("Invalid start date");let s=N.toDateTime(r,n.eval(r,e));if(s.length===0)throw new Error("Invalid end date");let a=i.eval(r,e)[0]?.value;if(a!=="years"&&a!=="months"&&a!=="days")throw new Error("Invalid units");let u=yt(o[0].value,s[0].value);return[{type:d.Quantity,value:{value:u[a],unit:a}}]},is:(r,e,t)=>{let n="";return t instanceof B?n=t.name:t instanceof Y&&(n=t.left.name+"."+t.right.name),n?e.map(i=>({type:d.boolean,value:mt(i,n)})):[]},not:(r,e)=>N.toBoolean(r,e).map(t=>({type:d.boolean,value:!t.value})),resolve:(r,e)=>e.map(t=>{let n=t.value,i;if(typeof n=="string")i=n;else if(typeof n=="object"){let o=n;if(o.resource)return b(o.resource);o.reference?i=o.reference:o.type&&o.identifier&&(i=`${o.type}?identifier=${o.identifier.system}|${o.identifier.value}`)}if(i?.includes("?")){let[o]=i.split("?");return{type:o,value:{resourceType:o}}}if(i?.includes("/")){let[o,s]=i.split("/");return{type:o,value:{resourceType:o,id:s}}}return{type:d.BackboneElement,value:void 0}}).filter(t=>!!t.value),as:(r,e,t)=>{let n=t.name,i=D(e,n);return i?[i]:[]},type:(r,e)=>e.map(({value:t})=>typeof t=="boolean"?{type:d.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof t=="number"?{type:d.BackboneElement,value:{namespace:"System",name:"Integer"}}:I(t)?{type:d.BackboneElement,value:{namespace:"FHIR",name:t.resourceType}}:{type:d.BackboneElement,value:null}),conformsTo:(r,e,t)=>{let n=t.eval(r,e)[0].value;if(!n.startsWith("http://hl7.org/fhir/StructureDefinition/"))throw new Error("Expected a StructureDefinition URL");let i=n.replace("http://hl7.org/fhir/StructureDefinition/","");return e.map(o=>({type:d.boolean,value:o.value?.resourceType===i}))},getResourceKey:(r,e)=>{let t=e[0].value;return t?.id?[{type:d.id,value:t.id}]:[]},getReferenceKey:(r,e,t)=>{let n=e[0].value;if(!n?.reference)return[];let i="";return t instanceof B&&(i=t.name),i&&!n.reference.startsWith(i+"/")?[]:[{type:d.id,value:Re(n)}]},extension:(r,e,t)=>{let n=t.eval(r,e)[0].value,i=e?.[0]?.value;if(i){let o=de(i,n);if(o)return[{type:d.Extension,value:o}]}return[]}};function Q(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=se(t,1);if(typeof i!="string")throw new TypeError("String function cannot be called with non-string");let o=n.map(a=>a?.eval(e,t)[0]?.value),s=r(i,...o);return s===void 0?[]:Array.isArray(s)?s.map(b):[b(s)]}function oe(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=se(t,1),o=V(i),s=o?i.value:i;if(typeof s!="number")throw new TypeError("Math function cannot be called with non-number");let a=r(s,...n.map(p=>p.eval(e,t)[0]?.value)),u=o?d.Quantity:t[0].type,l=o?{...i,value:a}:a;return[{type:u,value:l}]}function se(r,e){if(r.length!==e)throw new Error(`Expected ${e} arguments`);for(let t of r)if(t==null)throw new Error("Expected non-null argument");return r}function Fe(r){let e=r;for(;e.parent?.variables.$this;)e=e.parent;return[e.variables.$this]}var ge=class{constructor(e,t){c(this,"original");c(this,"child");this.original=e,this.child=t}eval(e,t){try{if(t.length>0){let n=[];for(let i of t)n.push(this.child.eval({parent:e,variables:{$this:i}},[i]));return n.flat()}else return this.child.eval(e,[])}catch(n){throw new Error(`FhirPathError on "${this.original}": ${n}`,{cause:n})}}toString(){return this.child.toString()}},$=class{constructor(e){c(this,"value");this.value=e}eval(){return[this.value]}toString(){let e=this.value.value;return typeof e=="string"?`'${e}'`:e.toString()}},B=class{constructor(e){c(this,"name");this.name=e}eval(e,t){if(this.name==="$this")return t;let n=this.getVariable(e);if(n)return[n];if(this.name.startsWith("%"))throw new Error(`Undefined variable ${this.name}`);return t.flatMap(i=>this.evalValue(i)).filter(i=>i?.value!==void 0)}getVariable(e){let t=e.variables[this.name];if(t!==void 0)return t;if(e.parent)return this.getVariable(e.parent)}evalValue(e){let t=e.value;if(!(!t||typeof t!="object"))return I(t,this.name)?("path"in e||(e.path=t.resourceType),e):mr(e,this.name)}toString(){return this.name}},St=class{eval(){return[]}toString(){return"{}"}},bt=class extends st{constructor(t,n,i){super(t,n);c(this,"impl");this.impl=i}eval(t,n){return this.impl(this.child.eval(t,n))}toString(){return this.operator+this.child.toString()}},ye=class extends R{constructor(e,t){super("as",e,t)}eval(e,t){return N.as(e,this.left.eval(e,t),this.right)}},F=class extends R{constructor(t,n,i,o){super(t,n,i);c(this,"impl");this.impl=o}eval(t,n){let i=this.left.eval(t,n),o=this.right.eval(t,n);if(i.length<1||o.length<1)return[];let s=D(i)?.value,a=D(o)?.value,u=V(s)?s.value:s,l=V(a)?a.value:a,p=this.impl(u,l);return typeof p=="boolean"?h(p):V(s)?[{type:d.Quantity,value:{...s,value:p}}]:[b(p)]}},wo=Object.freeze({type:"string",value:""}),Et=class extends R{constructor(e,t){super("&",e,t)}eval(e,t){let n=D(this.left.eval(e,t))??wo,i=D(this.right.eval(e,t))??wo;if(typeof n.value!="string")throw new Error(`Expected string operand for &, but got ${n.type}`);if(typeof i.value!="string")throw new Error(`Expected string operand for &, but got ${i.type}`);return[{type:d.string,value:n.value+i.value}]}},Rt=class extends R{constructor(e,t){super("contains",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return h(n.some(o=>o.value===i[0].value))}},Ct=class extends R{constructor(e,t){super("in",e,t)}eval(e,t){let n=D(this.left.eval(e,t)),i=this.right.eval(e,t);return n?h(i.some(o=>Qe(n,o)[0].value)):[]}},Y=class extends R{constructor(e,t){super(".",e,t)}eval(e,t){return this.right.eval(e,this.left.eval(e,t))}toString(){return`${this.left.toString()}.${this.right.toString()}`}},Pe=class extends R{constructor(e,t){super("|",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return ft([...n,...i])}},Pt=class extends R{constructor(e,t){super("=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return wn(n,i)}},At=class extends R{constructor(e,t){super("!=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return On(n,i)}},wt=class extends R{constructor(e,t){super("~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return xr(n,i)}},Ot=class extends R{constructor(e,t){super("!~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return An(xr(n,i))}},Ae=class extends R{constructor(e,t){super("is",e,t)}eval(e,t){let n=this.left.eval(e,t);if(n.length!==1)return[];let i=this.right.name;return h(mt(n[0],i))}},It=class extends R{constructor(e,t){super("and",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return n?.value===!0&&i?.value===!0?h(!0):n?.value===!1||i?.value===!1?h(!1):[]}},kt=class extends R{constructor(e,t){super("or",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return n?.value===!1&&i?.value===!1?h(!1):n?.value||i?.value?h(!0):[]}},Vt=class extends R{constructor(e,t){super("xor",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return!n||!i?[]:h(n.value!==i.value)}},Dt=class extends R{constructor(e,t){super("implies",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return i?.value===!0||n?.value===!1?h(!0):!n||!i?[]:h(!1)}},X=class{constructor(e,t){c(this,"name");c(this,"args");this.name=e,this.args=t}eval(e,t){let n=N[this.name];if(!n)throw new Error("Unrecognized function: "+this.name);return n(e,t,...this.args)}toString(){return`${this.name}(${this.args.map(e=>e.toString()).join(", ")})`}},we=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 ru=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],nu={"'":"'",'"':'"',"`":"`",r:"\r",n:`
2
- `,t:" ",f:"\f","\\":"\\"},xe=class{constructor(e,t,n,i){c(this,"str");c(this,"keywords");c(this,"operators");c(this,"dateTimeLiterals");c(this,"symbolRegex");c(this,"result",[]);c(this,"pos",{index:0,line:1,column:0});c(this,"markStack",[]);this.str=e,this.keywords=t,this.operators=n,this.dateTimeLiterals=!!i?.dateTimeLiterals,this.symbolRegex=i?.symbolRegex??/[$\w%]/}tokenize(){for(;this.pos.index<this.str.length;){let e=this.consumeToken();e&&this.result.push(e)}return this.result}prevToken(){return this.result.slice(-1)[0]}peekToken(){this.mark();let e=this.consumeToken();return this.reset(),e}consumeToken(){this.consumeWhitespace();let e=this.curr();if(!e)return;this.mark();let t=this.peek();return e==="/"&&t==="*"?this.consumeMultiLineComment():e==="/"&&t==="/"?this.consumeSingleLineComment():e==="'"||e==='"'||e==="`"?this.consumeString(e):e==="@"?this.consumeDateTime():/\d/.exec(e)?this.consumeNumber():/\w/.exec(e)?this.consumeSymbol():(e==="$"||e==="%")&&/\w/.exec(t)?this.consumeSymbol():(e==="$"||e==="%")&&(t==="'"||t==='"'||t==="`")?this.consumeQuotedSymbol(t):this.consumeOperator()}consumeWhitespace(){this.consumeWhile(()=>/\s/.exec(this.curr()))}consumeMultiLineComment(){let e=this.pos.index;return this.consumeWhile(()=>this.curr()!=="*"||this.peek()!=="/"),this.advance(),this.advance(),this.buildToken("Comment",this.str.substring(e,this.pos.index))}consumeSingleLineComment(){return this.buildToken("Comment",this.consumeWhile(()=>this.curr()!==`
3
- `))}consumeString(e){this.advance();let t="",n;for(;n=this.consumeChar(e);)t+=n;let i=this.buildToken(e==="`"?"Symbol":"String",t);return this.advance(),i}consumeChar(e){let t=this.curr();if(t==="\\"){this.advance();let n=this.curr(),i=nu[n];if(i!==void 0)return this.advance(),i;if(n==="u"){this.advance();let o=/^[0-9a-fA-F]{4}$/.exec(this.str.substring(this.pos.index,this.pos.index+4))?.[0];return o?(this.advance(),this.advance(),this.advance(),this.advance(),String.fromCodePoint(Number.parseInt(o,16))):"u"}return this.consumeChar(e)}return t===e||!t?"":(this.advance(),t)}consumeQuotedSymbol(e){this.mark();let t=this.pos.index;this.advance(),this.consumeString(e);let n=this.str.substring(t,this.pos.index);return this.buildToken("Symbol",n)}consumeDateTime(){this.advance();let e=this.pos.index;this.consumeWhile(()=>/[\d-]/.exec(this.curr()));let t=!1,n=!1;if(this.curr()==="T"&&(t=!0,this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())),this.curr()==="."&&/\d/.exec(this.peek())&&(this.advance(),this.consumeWhile(()=>/\d/.exec(this.curr()))),this.curr()==="Z"?(n=!0,this.advance()):(this.curr()==="+"||this.curr()==="-")&&(n=!0,this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())))),this.pos.index===e)throw new Error("Invalid DateTime literal");let i=this.str.substring(e,this.pos.index);return i.endsWith("T")?i=i.substring(0,i.length-1):!i.startsWith("T")&&t&&!n&&(i+="Z"),this.buildToken("DateTime",i)}consumeNumber(){let e=this.pos.index,t="Number";this.consumeWhile(()=>/\d/.exec(this.curr())),this.curr()==="."&&/\d/.exec(this.peek())&&(this.advance(),this.consumeWhile(()=>/\d/.exec(this.curr())));let n=this.curr();if(n==="-"&&this.dateTimeLiterals)return this.pos.index=e-1,this.consumeDateTime();if(n===" ")iu(this.peekToken())&&(t="Quantity",this.consumeToken());else if(n&&/[a-zA-Z_$]/.exec(n))return this.pos.index=e-1,this.consumeString(" ");return this.buildToken(t,this.str.substring(e,this.pos.index))}consumeSymbol(){let e=this.consumeWhile(()=>this.symbolRegex.exec(this.curr()));return this.prevToken()?.value!=="."&&this.keywords.includes(e)?this.buildToken(e,e):this.buildToken("Symbol",e)}consumeOperator(){let e=this.curr(),t=this.peek(),n=e+t;return this.operators.includes(n)?(this.advance(),this.advance(),this.buildToken(n,n)):(this.advance(),this.buildToken(e,e))}consumeWhile(e){let t=this.pos.index;for(;this.pos.index<this.str.length&&e();)this.advance();return this.str.substring(t,this.pos.index)}curr(){return this.str[this.pos.index]}peek(){return this.str[this.pos.index+1]??""}mark(){this.markStack.push({...this.pos})}reset(){let e=this.markStack.pop();if(!e)throw new Error("No mark to reset to");this.pos.index=e.index,this.pos.line=e.line,this.pos.column=e.column}advance(){this.pos.index++,this.curr()===`
4
- `?(this.pos.line++,this.pos.column=0):this.pos.column++}buildToken(e,t){let n=this.markStack.pop();if(!n)throw new Error("No mark for token");return{id:e,value:t,...n}}};function iu(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&ru.includes(r.value)))}var Mt=["true","false"],_t=["!=","!~","<=",">=","{}","->"];function Oo(r){return new xe(r,Mt,_t).tokenize()}var S={FunctionCall:0,Dot:1,Indexer:2,UnaryAdd:3,UnarySubtract:3,Multiply:4,Divide:4,IntegerDivide:4,Modulo:4,Add:5,Subtract:5,Ampersand:5,Is:6,As:6,Union:7,GreaterThan:8,GreaterThanOrEquals:8,LessThan:8,LessThanOrEquals:8,Equals:9,Equivalent:9,NotEquals:9,NotEquivalent:9,In:10,Contains:10,And:11,Xor:12,Or:12,Implies:13,Arrow:100,Semicolon:200},ou={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},su={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new we(e,t)},precedence:S.Indexer},au={parse(r,e){if(!(e instanceof B))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new X(e.name,t)},precedence:S.FunctionCall};function cu(r){let e=r.split(" "),t=Number.parseFloat(e[0]),n=e[1];return n?.startsWith("'")&&n.endsWith("'")?n=n.substring(1,n.length-1):n="{"+n+"}",{value:t,unit:n}}function Xe(){return new at().registerPrefix("String",{parse:(r,e)=>new $({type:d.string,value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new $({type:d.dateTime,value:Ye(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new $({type:d.Quantity,value:cu(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new $({type:e.value.includes(".")?d.decimal:d.integer,value:Number.parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new $({type:d.boolean,value:!0})}).registerPrefix("false",{parse:()=>new $({type:d.boolean,value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new B(e.value)}).registerPrefix("{}",{parse:()=>new St}).registerPrefix("(",ou).registerInfix("[",su).registerInfix("(",au).prefix("+",S.UnaryAdd,(r,e)=>new bt("+",e,t=>t)).prefix("-",S.UnarySubtract,(r,e)=>new F("-",e,e,(t,n)=>-n)).infixLeft(".",S.Dot,(r,e,t)=>new Y(r,t)).infixLeft("/",S.Divide,(r,e,t)=>new F("/",r,t,(n,i)=>n/i)).infixLeft("*",S.Multiply,(r,e,t)=>new F("*",r,t,(n,i)=>n*i)).infixLeft("+",S.Add,(r,e,t)=>new F("+",r,t,(n,i)=>n+i)).infixLeft("-",S.Subtract,(r,e,t)=>new F("-",r,t,(n,i)=>n-i)).infixLeft("|",S.Union,(r,e,t)=>new Pe(r,t)).infixLeft("=",S.Equals,(r,e,t)=>new Pt(r,t)).infixLeft("!=",S.NotEquals,(r,e,t)=>new At(r,t)).infixLeft("~",S.Equivalent,(r,e,t)=>new wt(r,t)).infixLeft("!~",S.NotEquivalent,(r,e,t)=>new Ot(r,t)).infixLeft("<",S.LessThan,(r,e,t)=>new F("<",r,t,(n,i)=>n<i)).infixLeft("<=",S.LessThanOrEquals,(r,e,t)=>new F("<=",r,t,(n,i)=>n<=i)).infixLeft(">",S.GreaterThan,(r,e,t)=>new F(">",r,t,(n,i)=>n>i)).infixLeft(">=",S.GreaterThanOrEquals,(r,e,t)=>new F(">=",r,t,(n,i)=>n>=i)).infixLeft("&",S.Ampersand,(r,e,t)=>new Et(r,t)).infixLeft("and",S.And,(r,e,t)=>new It(r,t)).infixLeft("as",S.As,(r,e,t)=>new ye(r,t)).infixLeft("contains",S.Contains,(r,e,t)=>new Rt(r,t)).infixLeft("div",S.Divide,(r,e,t)=>new F("div",r,t,(n,i)=>Math.trunc(n/i))).infixLeft("in",S.In,(r,e,t)=>new Ct(r,t)).infixLeft("is",S.Is,(r,e,t)=>new Ae(r,t)).infixLeft("mod",S.Modulo,(r,e,t)=>new F("mod",r,t,(n,i)=>n%i)).infixLeft("or",S.Or,(r,e,t)=>new kt(r,t)).infixLeft("xor",S.Xor,(r,e,t)=>new Vt(r,t)).infixLeft("implies",S.Implies,(r,e,t)=>new Dt(r,t))}var uu=Xe();function Lt(r){return new ge(r,uu.construct(Oo(r)).consumeAndParse())}function lu(r,e){let t=Array.isArray(e)?e:[e];for(let n=0;n<t.length;n++){let i=t[n];typeof i=="object"&&"type"in i&&"value"in i||(t[n]=b(t[n]))}return w(r,t).map(n=>n.value)}function w(r,e,t={},n=void 0){let i;if(typeof r=="string"){let o=n?.get(r);i=o??Lt(r),n&&!o&&n.set(r,i)}else i=r;return i.eval({variables:t},e).map(o=>{let s={type:o.type,value:o.value?.valueOf()};return"path"in o&&(s.path=o.path),s})}function du(r){let e=[];for(let t of r)t.type===d.Range?e.push([t.value?.low?.value,t.value?.high?.value]):typeof t.value=="number"&&e.push([t.value,t.value]);return e}function Gn(r){let e=[];for(let t of r){let n=ht(t.value);n&&e.push(n)}return e}function Qn(r){let e=new Set;for(let t of r){let n=qn(t);n&&e.add(n)}return Array.from(e)}function zn(r){let e=new Set;for(let t of r){let{value:n}=t;n&&(_e(n)?e.add(n):G(n)?e.add(n.reference):Je(n)?e.add(O(n)):typeof n.identifier=="object"&&e.add(`identifier:${n.identifier.system}|${n.identifier.value}`))}return Array.from(e)}function pu(r){let e=[];for(let t of r){let{value:n}=t;typeof n=="number"?e.push({value:n}):V(n)&&e.push(n)}return e}function fu(r){let e=new Set;for(let t of r)_e(t.value)&&e.add(t.value);return Array.from(e)}function Jn(r,e={}){let t=[];for(let n of r)mu(e,t,n);return t}function mu(r,e,t){let{type:n,value:i}=t;switch(n){case d.Identifier:hu(e,r,i);break;case d.CodeableConcept:gu(e,r,i);break;case d.Coding:Io(e,r,i);break;case d.ContactPoint:yu(e,r,i);break;default:Ue(e,r,void 0,i?.toString())}}function hu(r,e,t){t?.type?.text&&Ue(r,e,e.textSearchSystem,t.type.text),Ue(r,e,t?.system,t?.value)}function gu(r,e,t){t?.text&&Ue(r,e,e.textSearchSystem,t.text);for(let n of t?.coding??y)Io(r,e,n)}function Io(r,e,t){t&&(t.display&&Ue(r,e,e.textSearchSystem,t.display),Ue(r,e,t.system,t.code))}function yu(r,e,t){t&&Ue(r,e,t.system,t.value?.toLocaleLowerCase())}function Ue(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 xu=20,vu=1e3,m={EQUALS:"eq",NOT_EQUALS:"ne",GREATER_THAN:"gt",LESS_THAN:"lt",GREATER_THAN_OR_EQUALS:"ge",LESS_THAN_OR_EQUALS:"le",STARTS_AFTER:"sa",ENDS_BEFORE:"eb",APPROXIMATELY:"ap",CONTAINS:"contains",STARTS_WITH:"sw",EXACT:"exact",TEXT:"text",NOT:"not",ABOVE:"above",BELOW:"below",IN:"in",NOT_IN:"not-in",OF_TYPE:"of-type",MISSING:"missing",PRESENT:"present",IDENTIFIER:"identifier",ITERATE:"iterate"},Kn={contains:m.CONTAINS,exact:m.EXACT,above:m.ABOVE,below:m.BELOW,text:m.TEXT,not:m.NOT,in:m.IN,"not-in":m.NOT_IN,"of-type":m.OF_TYPE,missing:m.MISSING,identifier:m.IDENTIFIER,iterate:m.ITERATE},Yn={eq:m.EQUALS,ne:m.NOT_EQUALS,lt:m.LESS_THAN,le:m.LESS_THAN_OR_EQUALS,gt:m.GREATER_THAN,ge:m.GREATER_THAN_OR_EQUALS,sa:m.STARTS_AFTER,eb:m.ENDS_BEFORE,ap:m.APPROXIMATELY,sw:m.STARTS_WITH};function Ze(r,e){if(!r)throw new Error("Invalid search URL");let t="",n;if(typeof r=="string")if(r.includes("?")){let[s,a]=r.split("?");t=s,n=new URLSearchParams(a)}else t=r;else typeof r=="object"&&(t=r.pathname,n=r.searchParams);let i;t.includes("/")?i=t.split("/").filter(Boolean).pop():i=t;let o=[];if(n&&o.push(...n.entries()),e)for(let[s,a]of Object.entries(e))if(Array.isArray(a))for(let u of a)o.push([s,u]);else o.push([s,a??""]);return Tu(i,o)}function Tu(r,e){let t={resourceType:r};for(let[n,i]of e)Su(t,n,i);return t}function Su(r,e,t){let n,i,o=e.indexOf(":");if(o>=0?(n=e.substring(0,o),i=e.substring(o+1)):(n=e,i=""),n!=="_"){if(n==="_has"||e.includes(".")){r.filters=K(r.filters,{code:e,operator:m.EQUALS,value:t});return}switch(n){case"_sort":bu(r,t);break;case"_cursor":r.cursor=t;break;case"_count":r.count=Number.parseInt(t,10);break;case"_offset":r.offset=Number.parseInt(t,10);break;case"_total":r.total=t;break;case"_summary":t==="count"?(r.total="accurate",r.count=0):(t==="true"||t==="data"||t==="text")&&(r.summary=t);break;case"_include":{let s=ko(t);i==="iterate"&&(s.modifier=m.ITERATE),r.include=K(r.include,s);break}case"_revinclude":{let s=ko(t);i==="iterate"&&(s.modifier=m.ITERATE),r.revInclude=K(r.revInclude,s);break}case"_fields":case"_elements":r.fields=t.split(",");break;case"_type":r.types=t.split(",");break;case"_format":r.format=t;break;case"_pretty":r.pretty=t==="true";break;default:{let s=j.types[r.resourceType]?.searchParams?.[n];s?r.filters=K(r.filters,Mo(s,m.EQUALS,i,t)):r.filters=K(r.filters,Ru(n,i,t))}}}}function bu(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 Eu=[m.MISSING,m.PRESENT];function Mo(r,e,t,n){if(Eu.includes(t||e))return{code:r.code,operator:t||e,value:n};switch(r.type){case"number":case"date":case"quantity":{let{operator:i,value:o}=Cu(n,t||m.EQUALS);if(!Vo(r,o))throw new f(P(`Invalid format for ${r.type} search parameter: ${o}`));return{code:r.code,operator:i,value:o}}case"reference":case"string":case"token":case"uri":{if(!Vo(r,n))throw new f(P(`Invalid format for ${r.type} search parameter: ${n}`));return{code:r.code,operator:Pu(t)??e,value:n}}default:throw new Error("Unrecognized search parameter type: "+r.type)}}function Ru(r,e,t){let n=m.EQUALS;if(e)n=e;else if(t.length>=2){let i=t.substring(0,2);i in Yn&&(t.length===2||t.at(2)?.match(/\d/))&&(n=i,t=t.substring(i.length))}return{code:r,operator:n,value:t}}function Cu(r,e){let t=r.substring(0,2),n=Yn[t];return n?{operator:n,value:r.substring(2)}:{operator:e,value:r}}function Pu(r){return Kn[r]}function ko(r){let e=r.split(":");if(e.includes("*"))throw new f(P("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new f(P(`Invalid include value '${r}': must be of the form ResourceType:search-parameter`));if(e.length===2)return{resourceType:e[0],searchParam:e[1]};if(e.length===3)return{resourceType:e[0],searchParam:e[1],targetType:e[2]};throw new f(P(`Invalid include value '${r}'`))}function Vo(r,e){return r.type==="date"?Me(e):!0}var Au=/{{([^{}]+)}}/g;function wu(r,e,t=[]){return r=r.replaceAll(Au,(n,i)=>{let o=w(i,t,e);return o.length!==1?"":Hn(o[0])}),Ze(r)}function Ou(r){let e=[];r.fields&&e.push("_fields="+r.fields.join(","));for(let t of r.filters??y)e.push(Iu(t));r.sortRules&&r.sortRules.length>0&&e.push(ku(r.sortRules)),r.cursor!==void 0&&e.push("_cursor="+encodeURIComponent(r.cursor)),r.offset!==void 0&&r.offset!==0&&e.push("_offset="+r.offset),r.count!==void 0&&e.push("_count="+r.count),r.total!==void 0&&e.push("_total="+r.total),r.types&&r.types.length>0&&e.push("_type="+r.types.join(","));for(let t of r.include??y)e.push(Do("_include",t));for(let t of r.revInclude??y)e.push(Do("_revinclude",t));return e.length===0?"":(vt(e),"?"+e.join("&"))}function Iu(r){let e=r.operator in Kn?":"+r.operator:"",t=r.operator!==m.EQUALS&&r.operator in Yn?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function ku(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function Do(r,e){return r+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function et(r){let e=[],t="",n=!1;for(let i of r)n?(t+=i,n=!1):i==="\\"?n=!0:i===","?(e.push(t),t=""):t+=i;return e.push(t),e}function Vu(r,e){return P(`Invalid modifier :${r} for ${e}`)}function Du(r,e){return r in Kn?Vu(r,e):P(`Invalid operator ${r} for ${e}`)}function Nt(r,e){if(e.resourceType!==r.resourceType)return!1;for(let t of e.filters??y)if(!_u(r,e,t))return!1;return!0}var Mu=new J(1e3);function _u(r,e,t){let n=j.types[e.resourceType]?.searchParams?.[t.code];if(!n)return!1;let i=w(n.expression,[b(r)],void 0,Mu);if(t.operator===m.MISSING||t.operator===m.PRESENT)return Lu(i,t);switch(n.type){case"reference":return Nu(n,i,t);case"string":case"uri":return Bu(i,t);case"token":return Fu(i,t);case"date":return qu(i,t);default:return!1}}function Lu(r,e){let t=r.length>0;return(e.operator===m.MISSING&&e.value==="false"||e.operator===m.PRESENT&&e.value==="true")===t}function Nu(r,e,t){let n=Ir(t.operator);if(t.value===""&&e.length===0)return t.operator===m.EQUALS;let i=zn(e);for(let o of et(t.value)){let s=!1;if(o.includes("/")?s=i.includes(o):(r.target?.length===1||t.code==="_compartment")&&(s=i.some(a=>a?.endsWith("/"+o))),s)return!n}return n}function Fu(r,e){let t=Jn(r),n=et(e.value),i=Ir(e.operator);for(let o of t)for(let s of n)if(Uu(o,s))return!i;return i}function Uu(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 Bu(r,e){let t=Qn(r),n=et(e.value),i=Ir(e.operator);for(let o of t)for(let s of n)if(Wu(o,s))return!i;return i}function Wu(r,e){return r.toLowerCase().includes(e.toLowerCase())}function qu(r,e){let t=Gn(r),n=et(e.value),i=Ir(e.operator);for(let o of t)for(let s of n)if(ju(o,e.operator,s))return!i;return i}function ju(r,e,t){if(!r)return!1;let n=ht(t);if(!n)return!1;let i=r.start??"0000",o=r.end??"9999",s=n.start,a=n.end;switch(e){case m.APPROXIMATELY:case m.EQUALS:case m.NOT_EQUALS:return i<a&&o>s;case m.LESS_THAN:return i<s;case m.GREATER_THAN:return o>a;case m.LESS_THAN_OR_EQUALS:return i<=a;case m.GREATER_THAN_OR_EQUALS:return o>=s;case m.STARTS_AFTER:return i>a;case m.ENDS_BEFORE:return o<s;default:return!1}}function Ir(r){return r===m.NOT_EQUALS||r===m.NOT}var $u={resourceType:"*"},_o=["DomainConfiguration","JsonWebKey","Login"],Lo=["Package","PackageRelease","PackageInstallation","Project","ProjectMembership","User","UserSecurityRequest"],Oe={READ:"read",VREAD:"vread",UPDATE:"update",DELETE:"delete",HISTORY:"history",CREATE:"create",SEARCH:"search"},No=[Oe.READ,Oe.VREAD,Oe.HISTORY,Oe.SEARCH];function Hu(r,e){return Xn(r,Oe.SEARCH,e)}function Gu(r,e){return _o.includes(e)?!1:Xn(r,Oe.UPDATE,e)}function Xn(r,e,t){return!!r.resource?.some(n=>Uo(n,t,e))}function Qu(r,e){return!!Fo(e,Oe.UPDATE,r)}function Fo(r,e,t){return t?t.resource?.find(n=>zu(r,e,n)):$u}function zu(r,e,t){let n=r.resourceType;return Uo(t,n,e)?n==="Binary"?!0:!(t.compartment&&!r.meta?.compartment?.some(i=>i.reference===t.compartment?.reference)||t.criteria&&!Nt(r,Ze(t.criteria))):!1}function Uo(r,e,t){return r.resourceType!==e&&(r.resourceType!=="*"||Lo.includes(e))?!1:r.interaction?r.interaction.includes(t):!r.readonly||No.includes(t)}var Ju={FIRST:"first",APPLICATION:"application"};function z(){return typeof window<"u"}function Ku(){return typeof Buffer<"u"}function Yu(){return typeof window<"u"?window:void 0}function kr(){return typeof Buffer<"u"?Buffer:void 0}var ae={assign(r){z()&&globalThis.location.assign(r)},reload(){z()&&globalThis.location.reload()},getSearch(){return z()?globalThis.location.search:""},getPathname(){return z()?globalThis.location.pathname:""},getLocation(){return z()?globalThis.location.toString():""},getOrigin(){return z()?globalThis.location.protocol+"//"+globalThis.location.host+"/":""}};function Bo(r){if(z()){let t=window.atob(r),n=Uint8Array.from(t,i=>i.codePointAt(0));return new window.TextDecoder().decode(n)}let e=kr();if(e)return e.from(r,"base64").toString("utf-8");throw new Error("Unable to decode base64")}function Ft(r){if(z()){let t=new window.TextEncoder().encode(r),n=String.fromCodePoint.apply(null,t);return window.btoa(n)}let e=kr();if(e)return e.from(r,"utf8").toString("base64");throw new Error("Unable to encode base64")}function Xu(r){return Ft(r).replaceAll("+","-").replaceAll("/","_").replace(/[=]{1,2}$/,"")}function Zn(r){r=r.padEnd(r.length+(4-r.length%4)%4,"=");let e=r.replaceAll("-","+").replaceAll("_","/");return Bo(e)}function Vr(){let r=new Uint32Array(28);return crypto.getRandomValues(r),_n(r.buffer)}async function ei(r){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(r))}function Z(){return typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replaceAll(/[xy]/g,r=>{let e=Math.trunc(Math.random()*16);return(r==="x"?e:e&3|8).toString(16)})}function Wo(r){let e={};r=Ce(r);for(let i of r.entry??y){let o=i.resource;if(!o)continue;o.meta!==void 0&&(delete o.meta.author,delete o.meta.compartment,delete o.meta.lastUpdated,delete o.meta.project,delete o.meta.versionId,Object.keys(o.meta).length===0&&delete o.meta);let s=o?.id;if(s)e[s]=Z(),i.fullUrl="urn:uuid:"+e[s],delete i.resource?.id;else if(i.fullUrl?.startsWith("resource:")){let a=i.fullUrl.slice(9);e[a]=Z(),i.fullUrl="urn:uuid:"+e[a]}}let t=r.entry,n=JSON.stringify({resourceType:"Bundle",type:"transaction",entry:t?.map(i=>({fullUrl:i.fullUrl,request:{method:"POST",url:i.resource?.resourceType},resource:i.resource}))},(i,o)=>Zu(i,o,e),2);return qo(JSON.parse(n))}function Zu(r,e,t){if((r==="reference"||r==="url")&&typeof e=="string"){let n;if(e.includes("/")?n=e.split("/")[1]:e.startsWith("urn:uuid:")||e.startsWith("resource:")?n=e.slice(9):e.startsWith("#")&&(n=e.slice(1)),n){let i=t[n];if(i)return"urn:uuid:"+i}}return e}function qo(r){let e=tl(r),{sorted:t,cycles:n}=el(e),i={},o=[];for(let a of r.entry??y)a.fullUrl?i[a.fullUrl]=a:o.push(a);let s=t.map(a=>i[a]);for(let a of n)for(let u of a){let l=i[u],p={...l,request:{...l.request,method:"PUT"}};s.push(p)}return s.push(...o),{...r,entry:s}}var tt={NotVisited:"NotVisited",Visiting:"Visiting",Visited:"Visited"};function el(r){let e=[],t={},n=[];for(let o of Object.keys(r))t[o]=tt.NotVisited;function i(o,s){if(t[o]===tt.Visited)return!0;if(t[o]===tt.Visiting){let u=s.lastIndexOf(o);return u!==-1&&n.push(s.slice(u)),!0}t[o]=tt.Visiting,s.push(o);let a=!1;for(let u of r[o]??y)i(u,s)||(a=!0);return t[o]=tt.Visited,s.pop(),e.unshift(o),!a}for(let o in r)t[o]===tt.NotVisited&&i(o,[]);return{sorted:e,cycles:n}}function jo(r,e){for(let t in r)if(r[t]&&typeof r[t]=="object"){let n=r[t];if(G(n)){let i=n.reference;(i.startsWith("urn:uuid:")||i.startsWith("resource:"))&&e(i)}else jo(n,e)}}function tl(r){let e={};for(let t of r.entry??y)t.fullUrl&&(e[t.fullUrl]=[]);for(let t of r.entry??y){let n=t.fullUrl;n&&t.resource&&jo(t.resource,i=>{i!==n&&e[i]&&e[i].push(n)})}return e}function rl(r){r=Ce(r);let e={resourceType:"Bundle",type:"transaction",entry:[{resource:r}]};if(r.contained){for(let t of r.contained)e.entry.push({resource:t});r.contained=void 0}for(let t of e.entry)t.resource&&!t.resource.id&&(t.resource.id=Z());return Wo(e)}function nl(r,e,t){return r.entry?.find(({resource:n})=>n?.resourceType===e&&n?.id===t)?.resource}async function il(r,e,t,n){return{hook:t.hook,hookInstance:Z(),context:n,prefetch:await ol(r,e,t,n)}}async function ol(r,e,t,n){if(!t.prefetch)return{};let i={};for(let[o,s]of Object.entries(t.prefetch)){let a=await sl(r,e,n,s);i[o]=a??null}return i}function sl(r,e,t,n){if(n=$o(e,t,n),n.includes("{{"))return Promise.resolve(null);let i=/^(\w+)\/([0-9a-zA-Z-_]+)$/.exec(n);if(i){let[a,u]=i.slice(1);return r.readResource(a,u)}let[o,s]=Le(n,"?",2);return r.search(o,s)}var al=new Set(["userPractitionerId","userPractitionerRoleId","userPatientId","userRelatedPersonId"]);function $o(r,e,t){return t.replaceAll(/\{\{([^}]+)\}\}/g,(n,i)=>{if(i=i.trim(),al.has(i))return r.id;if(i.startsWith("context.")){let o=i.substring(8),s=cl(e,o);if(_e(s))return s;if(typeof s=="number"||typeof s=="boolean")return String(s)}return n})}function cl(r,e){let t=e.split("."),n=r;for(let i of t)if(n&&C(n)&&i in n)n=n[i];else return;return n}var k={CSS:"text/css",DICOM:"application/dicom",FAVICON:"image/vnd.microsoft.icon",FHIR_JSON:"application/fhir+json",FORM_URL_ENCODED:"application/x-www-form-urlencoded",HL7_V2:"x-application/hl7-v2+er7",HTML:"text/html",JAVASCRIPT:"text/javascript",JSON:"application/json",JSON_PATCH:"application/json-patch+json",JWT:"application/jwt",MULTIPART_FORM_DATA:"multipart/form-data",PNG:"image/png",SCIM_JSON:"application/scim+json",SVG:"image/svg+xml",TEXT:"text/plain",TYPESCRIPT:"text/typescript",PING:"x-application/ping",XML:"text/xml",CDA_XML:"application/cda+xml",OCTET_STREAM:"application/octet-stream"};var Dr=class{constructor(){c(this,"listeners");this.listeners={}}addEventListener(e,t){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)}removeEventListener(e,t){let n=this.listeners[e];if(n){for(let i=0;i<n.length;i++)if(n[i]===t){n.splice(i,1);return}}}dispatchEvent(e){let t=this.listeners[e.type];for(let n of t??y)n.call(this,e);return!e.defaultPrevented}removeAllListeners(){this.listeners={}}listenerCount(e){return this.listeners[e]?.length??0}},ee=class{constructor(){c(this,"emitter",new Dr)}dispatchEvent(e){this.emitter.dispatchEvent(e)}addEventListener(e,t){this.emitter.addEventListener(e,t)}removeEventListener(e,t){this.emitter.removeEventListener(e,t)}removeAllListeners(){this.emitter.removeAllListeners()}listenerCount(e){return this.emitter.listenerCount(e)}};var Mr={"Patient-open":"Patient-open","Patient-close":"Patient-close","ImagingStudy-open":"ImagingStudy-open","ImagingStudy-close":"ImagingStudy-close","Encounter-open":"Encounter-open","Encounter-close":"Encounter-close","DiagnosticReport-open":"DiagnosticReport-open","DiagnosticReport-close":"DiagnosticReport-close","DiagnosticReport-select":"DiagnosticReport-select","DiagnosticReport-update":"DiagnosticReport-update",syncerror:"syncerror"},Ho=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],_r=["DiagnosticReport-update"];function ti(r){return _r.includes(r)}function ri(r){if(_r.includes(r))throw new f(T(`'context.version' is required for '${r}'.`))}var Go={"Patient-open":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"Patient-close":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"ImagingStudy-open":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"ImagingStudy-close":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"Encounter-open":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"Encounter-close":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"DiagnosticReport-open":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-close":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-select":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},select:{resourceType:"*",reference:!0,manyAllowed:!0}},"DiagnosticReport-update":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},updates:{resourceType:"Bundle"}},syncerror:{operationoutcome:{resourceType:"OperationOutcome"}}};function Qo(r){return Ho.includes(r)}function ni(r){return!!r.endpoint}function Lr(r){if(!Bt(r))throw new f(T("subscriptionRequest must be an object conforming to SubscriptionRequest type."));let{channelType:e,mode:t,topic:n,events:i}=r,o={"hub.channel.type":e,"hub.mode":t,"hub.topic":n,"hub.events":i.join(",")};return ni(r)&&(o.endpoint=r.endpoint),new URLSearchParams(o).toString()}function Bt(r){if(typeof r!="object")return!1;let{channelType:e,mode:t,topic:n,events:i}=r;if(!(e&&t&&n&&i)||typeof n!="string"||typeof i!="object"||!Array.isArray(i)||i.length<1||e!=="websocket"||t!=="subscribe"&&t!=="unsubscribe")return!1;for(let o of i)if(!Mr[o])return!1;return!(ni(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function ul(r,e,t,n){if(typeof e!="object")throw new f(T(`context[${t}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.id&&typeof e.id=="string"))throw new f(T(`context[${t}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new f(T(`context[${t}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!Qo(e.resourceType))throw new f(T(`context[${t}] is invalid. Resource must contain a valid FHIRcast resource type. Resource type is not a known resource type.`));if(i&&e.resourceType!==i)throw new f(T(`context[${t}] is invalid. context[${t}] for the '${r}' event should contain resource of type ${i}.`))}}function ll(r,e,t,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),n.reference){if(!G(e.reference))throw new f(T(`context[${t}] is invalid. Expected key '${e.key}' to be a reference.`))}else ul(r,e.resource,t,n)}function dl(r,e){let t=new Map,n=Go[r];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new f(T(`Key '${o}' not found for event '${r}'. Make sure to add only valid keys.`));ll(r,e[i],i,n[o],t)}for(let[i,o]of Object.entries(n)){if(!(o.optional||t.has(i)))throw new f(T(`Missing required key '${i}' on context for '${r}' event.`));if(!o.manyAllowed&&(t.get(i)??0)>1)throw new f(T(`${t.get(i)} context entries with key '${i}' found for the '${r}' event when schema only allows for 1.`))}}function Nr(r,e,t,n){if(!(r&&typeof r=="string"))throw new f(T("Must provide a topic."));if(!Mr[e])throw new f(T(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(Mr).join(", ")}`));if(typeof t!="object")throw new f(T("context must be a context object or array of context objects."));if(_r.includes(e)&&!n)throw new f(T(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(t)?t:[t];return dl(e,i),{timestamp:new Date().toISOString(),id:Z(),event:{"hub.topic":r,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var Ut=class extends ee{constructor(t){super();c(this,"subRequest");c(this,"websocket");if(this.subRequest=t,!t.endpoint)throw new f(T("Subscription request should contain an endpoint."));if(!Bt(t))throw new f(T("Subscription request failed validation."));let n=new WebSocket(t.endpoint);n.addEventListener("open",()=>{this.dispatchEvent({type:"connect"}),n.addEventListener("message",i=>{let o=JSON.parse(i.data);if(o["hub.topic"])return;let s=o;s.event["hub.event"]!=="heartbeat"&&(this.dispatchEvent({type:"message",payload:s}),n.send(JSON.stringify({id:o?.id,timestamp:new Date().toISOString()})))}),n.addEventListener("close",()=>{this.dispatchEvent({type:"disconnect"})})}),this.websocket=n}disconnect(){this.websocket.close()}};function pl(r){return JSON.parse(Zn(r))}function ii(r){return r.split(".").length===3}function Wt(r){let[e,t,n]=r.split(".");return pl(t)}function oi(r){try{return typeof Wt(r).login_id=="string"}catch{return!1}}function si(r){try{let t=Wt(r).exp;return typeof t=="number"?t*1e3:void 0}catch{return}}var qt=class{constructor(e){c(this,"medplum");this.medplum=e}async get(e){return this.medplum.get(`keyvalue/v1/${e}`)}async set(e,t){await this.medplum.put(`keyvalue/v1/${e}`,t,k.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var zo;zo=Symbol.toStringTag;var W=class{constructor(e){c(this,zo,"ReadablePromise");c(this,"suspender");c(this,"status","pending");c(this,"response");c(this,"error");this.suspender=e.then(t=>(this.status="success",this.response=t,t),t=>{throw this.status="error",this.error=t,t})}isPending(){return this.status==="pending"}isOk(){return this.status==="success"}read(){switch(this.status){case"pending":throw this.suspender;case"error":throw this.error;default:return this.response}}then(e,t){return this.suspender.then(e,t)}catch(e){return this.suspender.catch(e)}finally(e){return this.suspender.finally(e)}};var rt=class{constructor(e,t=""){c(this,"storage");c(this,"prefix","");this.storage=e??globalThis.localStorage??new Fr,this.prefix=t}makeKey(e){return this.prefix+e}clear(){this.storage===globalThis.localStorage&&this.prefix?Object.keys(this.storage).filter(e=>e.startsWith(this.prefix)).forEach(e=>{this.storage.removeItem(e)}):this.storage.clear()}getString(e){return this.storage.getItem(this.makeKey(e))??void 0}setString(e,t){t?this.storage.setItem(this.makeKey(e),t):this.storage.removeItem(this.makeKey(e))}getObject(e){let t=this.getString(e);return t?JSON.parse(t):void 0}setObject(e,t){this.setString(e,t?xt(t):void 0)}},Fr=class{constructor(){c(this,"data");this.data=new Map}get length(){return this.data.size}clear(){this.data.clear()}getItem(e){return this.data.get(e)??null}setItem(e,t){t?this.data.set(e,t):this.data.delete(e)}removeItem(e){this.data.delete(e)}key(e){return Array.from(this.data.keys())[e]}},ai=class extends rt{constructor(){super();c(this,"initialized");c(this,"initPromise");c(this,"initResolve",()=>{});this.initialized=!1,this.initPromise=new Promise(t=>{this.initResolve=t})}setInitialized(){this.initialized||(this.initResolve(),this.initialized=!0)}getInitPromise(){return this.initPromise}get isInitialized(){return this.initialized}};var nt={Event:typeof globalThis.Event<"u"?globalThis.Event:void 0,ErrorEvent:void 0,CloseEvent:void 0},Jo=!1;function fl(){if(typeof globalThis.Event>"u")throw new Error("Unable to lazy init events for ReconnectingWebSocket. globalThis.Event is not defined yet");nt.Event=globalThis.Event,nt.ErrorEvent=class extends Event{constructor(t,n){super("error",n);c(this,"message");c(this,"error");this.message=t.message,this.error=t}},nt.CloseEvent=class extends Event{constructor(t=1e3,n="",i){super("close",i);c(this,"code");c(this,"reason");c(this,"wasClean",!0);this.code=t,this.reason=n}}}function Yo(r,e){if(!r)throw new Error(e)}function Ur(r){return new r.constructor(r.type,r)}var Be={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},Ko=!1,jt=class r extends ee{constructor(t,n,i={}){Jo||(fl(),Jo=!0);super();c(this,"_ws");c(this,"_retryCount",-1);c(this,"_uptimeTimeout");c(this,"_connectTimeout");c(this,"_shouldReconnect",!0);c(this,"_connectLock",!1);c(this,"_binaryType");c(this,"_closeCalled",!1);c(this,"_messageQueue",[]);c(this,"_debugLogger",console.log.bind(console));c(this,"_url");c(this,"_protocols");c(this,"_options");c(this,"onclose",null);c(this,"onerror",null);c(this,"onmessage",null);c(this,"onopen",null);c(this,"_handleOpen",t=>{this._debug("open event");let{minUptime:n=Be.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),n),Yo(this._ws,"WebSocket is not defined"),this._ws.binaryType=this._binaryType,this._messageQueue.forEach(i=>this._ws?.send(i)),this._messageQueue=[],this.onopen&&this.onopen(t),this.dispatchEvent(Ur(t))});c(this,"_handleMessage",t=>{this._debug("message event"),this.onmessage&&this.onmessage(t),this.dispatchEvent(Ur(t))});c(this,"_handleError",t=>{this._debug("error event",t.message),this._disconnect(void 0,t.message==="TIMEOUT"?"timeout":void 0),this.onerror&&this.onerror(t),this._debug("exec error listeners"),this.dispatchEvent(Ur(t)),this._connect()});c(this,"_handleClose",t=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(t),this.dispatchEvent(Ur(t))});this._url=t,this._protocols=n,this._options=i,this._options.startClosed&&(this._shouldReconnect=!1),this._options.binaryType?this._binaryType=this._options.binaryType:this._binaryType="blob",this._options.debugLogger&&(this._debugLogger=this._options.debugLogger),this._connect()}static get CONNECTING(){return 0}static get OPEN(){return 1}static get CLOSING(){return 2}static get CLOSED(){return 3}get CONNECTING(){return r.CONNECTING}get OPEN(){return r.OPEN}get CLOSING(){return r.CLOSING}get CLOSED(){return r.CLOSED}get binaryType(){return this._ws?this._ws.binaryType:this._binaryType}set binaryType(t){this._binaryType=t,this._ws&&(this._ws.binaryType=t)}get retryCount(){return Math.max(this._retryCount,0)}get bufferedAmount(){return this._messageQueue.reduce((n,i)=>(typeof i=="string"?n+=i.length:i instanceof Blob?n+=i.size:n+=i.byteLength,n),0)+(this._ws?.bufferedAmount??0)}get extensions(){return this._ws?.extensions??""}get protocol(){return this._ws?.protocol??""}get readyState(){return this._ws?this._ws.readyState:this._options.startClosed?r.CLOSED:r.CONNECTING}get url(){return this._ws?this._ws.url:""}get shouldReconnect(){return this._shouldReconnect}close(t=1e3,n){if(this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),!this._ws){this._debug("close enqueued: no ws instance");return}if(this._ws.readyState===this.CLOSED){this._debug("close: already closed");return}this._ws.close(t,n)}reconnect(t,n){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED?this._connect():(this._disconnect(t,n),this._connect())}send(t){if(this._ws?.readyState===this.OPEN)this._debug("send",t),this._ws.send(t);else{let{maxEnqueuedMessages:n=Be.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=Be.reconnectionDelayGrowFactor,minReconnectionDelay:n=Be.minReconnectionDelay,maxReconnectionDelay:i=Be.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=Be.maxRetries,connectionTimeout:n=Be.connectionTimeout}=this._options;if(this._retryCount>=t){this._debug("max retries reached",this._retryCount,">=",t);return}this._retryCount++,this._debug("connect",this._retryCount),this._removeListeners(),this._wait().then(()=>{if(this._closeCalled){this._connectLock=!1;return}!this._options.WebSocket&&typeof WebSocket>"u"&&!Ko&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),Ko=!0);let i=this._options.WebSocket||WebSocket;this._debug("connect",{url:this._url,protocols:this._protocols}),this._ws=this._protocols?new i(this._url,this._protocols):new i(this._url),this._ws.binaryType=this._binaryType,this._connectLock=!1,this._addListeners(),this._connectTimeout=setTimeout(()=>this._handleTimeout(),n)}).catch(i=>{this._connectLock=!1,this._handleError(new nt.ErrorEvent(Error(i.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new nt.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(t=1e3,n){if(this._clearTimeouts(),!!this._ws){this._removeListeners();try{this._ws.close(t,n),this._handleClose(new nt.CloseEvent(t,n,this))}catch{}}}_acceptOpen(){this._debug("accept open"),this._retryCount=0}_removeListeners(){this._ws&&(this._debug("removeListeners"),this._ws.removeEventListener("open",this._handleOpen),this._ws.removeEventListener("close",this._handleClose),this._ws.removeEventListener("message",this._handleMessage),this._ws.removeEventListener("error",this._handleError))}_addListeners(){this._ws&&(this._debug("addListeners"),this._ws.addEventListener("open",this._handleOpen),this._ws.addEventListener("close",this._handleClose),this._ws.addEventListener("message",this._handleMessage),this._ws.addEventListener("error",this._handleError))}_clearTimeouts(){clearTimeout(this._connectTimeout),clearTimeout(this._uptimeTimeout)}};var ml=[WebSocket.CLOSING,WebSocket.CLOSED],it=class extends ee{constructor(...t){super();c(this,"criteria");this.criteria=new Set(t)}getCriteria(){return this.criteria}_addCriteria(t){this.criteria.add(t)}_removeCriteria(t){this.criteria.delete(t)}},ci=class{constructor(e,t){c(this,"criteria");c(this,"emitter");c(this,"refCount");c(this,"subscriptionProps");c(this,"subscriptionId");c(this,"token");c(this,"tokenExpiry");c(this,"state","idle");c(this,"generation",0);c(this,"lastUnrefTime");this.criteria=e,this.emitter=new it(e),this.refCount=1,this.subscriptionProps=t?{...t}:void 0}nextGeneration(){return++this.generation}},Ht=class{constructor(e,t,n){c(this,"medplum");c(this,"ws");c(this,"masterSubEmitter");c(this,"criteriaEntries");c(this,"criteriaEntriesBySubscriptionId");c(this,"wsClosed");c(this,"pingTimer");c(this,"tokenRefreshTimer");c(this,"pingIntervalMs");c(this,"waitingForPong",!1);c(this,"currentProfile");if(!(e instanceof Gt))throw new f(T("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(t).toString()}catch{throw new f(T("Not a valid URL"))}let o=n?.ReconnectingWebSocket?new n.ReconnectingWebSocket(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger}):new jt(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger});this.medplum=e,this.ws=o,this.masterSubEmitter=new it,this.criteriaEntries=new Map,this.criteriaEntriesBySubscriptionId=new Map,this.wsClosed=!1,this.pingIntervalMs=n?.pingIntervalMs??5e3,this.currentProfile=e.getProfile(),this.setupListeners()}setupListeners(){let e=this.ws;e.addEventListener("message",t=>{try{let n=JSON.parse(t.data);if(n.type==="pong"){this.waitingForPong=!1;return}let i=n,o=i?.entry?.[0]?.resource;if(o.type==="heartbeat"){this.masterSubEmitter?.dispatchEvent({type:"heartbeat",payload:i});return}if(o.type==="handshake"){let a=Re(o.subscription),u={type:"connect",payload:{subscriptionId:a}};this.masterSubEmitter?.dispatchEvent(u);let l=this.criteriaEntriesBySubscriptionId.get(a);if(!l){console.warn("Received handshake for criteria the SubscriptionManager is not listening for yet");return}(l.state==="connecting"||l.state==="refreshing")&&(l.state="active"),l.emitter.dispatchEvent({...u});return}this.masterSubEmitter?.dispatchEvent({type:"message",payload:i});let s=this.criteriaEntriesBySubscriptionId.get(Re(o.subscription));if(!s){console.warn("Received notification for criteria the SubscriptionManager is not listening for");return}s.emitter.dispatchEvent({type:"message",payload:i})}catch(n){console.error(n);let i={type:"error",payload:n};this.masterSubEmitter?.dispatchEvent(i);for(let o of this.getAllCriteriaEmitters())o.dispatchEvent({...i})}}),e.addEventListener("error",t=>{let n={type:"error",payload:new f({resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"WebSocket connection closed due to an error"},diagnostics:t.error?Te(t.error):t.message}]})};this.masterSubEmitter?.dispatchEvent(n);for(let i of this.getAllCriteriaEmitters())i.dispatchEvent({...n})}),e.addEventListener("close",()=>{let t={type:"close"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=void 0,this.waitingForPong=!1),this.tokenRefreshTimer&&(clearInterval(this.tokenRefreshTimer),this.tokenRefreshTimer=void 0),this.wsClosed&&(this.criteriaEntries.clear(),this.criteriaEntriesBySubscriptionId.clear(),this.masterSubEmitter?.removeAllListeners())}),e.addEventListener("open",()=>{let t={type:"open"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.refreshAllSubscriptions().catch(console.error),this.pingTimer??=setInterval(()=>{this.waitingForPong?(this.waitingForPong=!1,e.reconnect()):(e.send(JSON.stringify({type:"ping"})),this.waitingForPong=!0),this.gcUnrefEntries()},this.pingIntervalMs),this.tokenRefreshTimer??=setInterval(()=>{this.checkTokenExpirations(),this.gcUnrefEntries()},6e4)}),this.medplum.addEventListener("change",()=>{let t=this.medplum.getProfile();this.currentProfile&&t===void 0?this.ws.close():t&&this.currentProfile?.id!==t.id&&this.ws.reconnect(),this.currentProfile=t})}sendBind(e){this.ws.send(JSON.stringify({type:"bind-with-token",payload:{token:e}}))}sendUnbind(e){this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"unbind-from-token",payload:{token:e}}))}emitError(e,t){let n={type:"error",payload:t};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}maybeEmitDisconnect(e){let{subscriptionId:t}=e;if(t){let n={type:"disconnect",payload:{subscriptionId:t}};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}else console.warn("Called disconnect for `CriteriaEntry` before `subscriptionId` was present.")}isStale(e,t){return this.isEntryGettingRemoved(e)||e.generation!==t}maybeGetCriteriaEntry(e,t){let n=this.criteriaEntries.get(e);if(n){if(!t)return n.bareCriteria;for(let i of n.criteriaWithProps)if(pe(t,i.subscriptionProps))return i}}getAllCriteriaEmitters(){let e=[];for(let t of this.criteriaEntries.values())for(let n of $t(t))n.refCount>0&&e.push(n.emitter);return e}addCriteriaEntry(e){let{criteria:t,subscriptionProps:n}=e,i;this.criteriaEntries.has(t)?i=this.criteriaEntries.get(t):(i={criteriaWithProps:[]},this.criteriaEntries.set(t,i)),n?i.criteriaWithProps.push(e):i.bareCriteria=e}removeCriteriaEntry(e){e.state="removed",e.generation++;let{criteria:t,subscriptionProps:n,subscriptionId:i,token:o}=e;if(!this.criteriaEntries.has(t))return;let s=this.criteriaEntries.get(t);n?s.criteriaWithProps=s.criteriaWithProps.filter(a=>{let u=a.subscriptionProps;return!pe(n,u)}):s.bareCriteria=void 0,!s.bareCriteria&&s.criteriaWithProps.length===0&&(this.criteriaEntries.delete(t),this.masterSubEmitter?._removeCriteria(t)),i&&this.criteriaEntriesBySubscriptionId.delete(i),o&&this.sendUnbind(o)}async subscribeToCriteria(e){this.wsClosed&&await this.reconnectIfNeeded(),this.ws.readyState===WebSocket.OPEN&&this.medplum.getProfile()&&e.state==="idle"&&(e.state="connecting",await this.rebindCriteriaEntry(e))}async refreshAllSubscriptions(){this.criteriaEntriesBySubscriptionId.clear();let e=[],t=[];for(let n of this.criteriaEntries.values())for(let i of $t(n))i.refCount===0?t.push(i):e.push(i);for(let n of t)this.removeCriteriaEntry(n);for(let n of e)n.token&&this.sendUnbind(n.token),n.token=void 0,n.tokenExpiry=void 0,n.subscriptionId=void 0,n.state="idle",n.generation++,await this.subscribeToCriteria(n)}async rebindCriteriaEntry(e){let t=e.nextGeneration();try{if(!e.subscriptionId){let a=await this.medplum.createResource({...e.subscriptionProps,resourceType:"Subscription",status:"active",reason:`WebSocket subscription for ${O(this.medplum.getProfile())}`,channel:{type:"websocket"},criteria:e.criteria});if(e.subscriptionId??=a.id,this.isStale(e,t))return}let{parameter:n}=await this.medplum.get(`fhir/R4/Subscription/${e.subscriptionId}/$get-ws-binding-token`,{cache:"no-cache"}),i=n?.find(a=>a.name==="token")?.valueString,o=n?.find(a=>a.name==="websocket-url")?.valueUrl,s=n?.find(a=>a.name==="expiration")?.valueDateTime;if(!i)throw new f(T("Failed to get token"));if(!o)throw new f(T("Failed to get URL from $get-ws-binding-token"));if(!s)throw new f(T("Failed to get expiration from $get-ws-binding-token"));if(this.isStale(e,t))return;e.token=i,e.tokenExpiry=new Date(s).getTime(),this.criteriaEntriesBySubscriptionId.set(e.subscriptionId,e),this.sendBind(i)}catch(n){console.error(Te(n)),e.generation===t&&!this.isEntryGettingRemoved(e)&&(e.state=e.state==="refreshing"?"active":"idle"),this.emitError(e,n)}}checkTokenExpirations(){if(!this.medplum.getProfile())return;let e=Date.now();for(let t of this.criteriaEntries.values())for(let n of $t(t))n.refCount===0||!n.tokenExpiry||n.tokenExpiry-e<=3e5&&n.state==="active"&&this.ws.readyState===WebSocket.OPEN&&(n.state="refreshing",this.rebindCriteriaEntry(n).catch(i=>{this.masterSubEmitter?.dispatchEvent({type:"error",payload:i})}))}addCriteria(e,t){this.masterSubEmitter&&this.masterSubEmitter._addCriteria(e);let n=this.maybeGetCriteriaEntry(e,t);if(n)return n.refCount===0&&(n.lastUnrefTime=void 0,n.generation++,n.state!=="active"&&(n.state=n.token?"active":"idle")),n.refCount+=1,n.state==="idle"&&this.subscribeToCriteria(n).catch(console.error),n.emitter;let i=new ci(e,t);return this.addCriteriaEntry(i),this.subscribeToCriteria(i).catch(console.error),i.emitter}removeCriteria(e,t){let n=this.maybeGetCriteriaEntry(e,t);if(!n||this.isEntryGettingRemoved(n)){console.warn("Criteria not known to `SubscriptionManager`. Possibly called remove too many times.");return}n.refCount-=1,n.refCount===0&&(n.lastUnrefTime=Date.now(),n.generation++)}gcUnrefEntries(){let e=Date.now(),t=[];for(let n of this.criteriaEntries.values())for(let i of $t(n))i.refCount===0&&i.lastUnrefTime!==void 0&&e-i.lastUnrefTime>=1e4&&t.push(i);for(let n of t)this.maybeEmitDisconnect(n),this.removeCriteriaEntry(n);t.length>0&&this.criteriaEntries.size===0&&this.closeWebSocket()}isEntryGettingRemoved(e){return e.refCount===0||e.state==="removed"}getWebSocket(){return this.ws}closeWebSocket(){if(!this.wsClosed){if(this.ws.readyState===WebSocket.OPEN)for(let e of this.criteriaEntries.values())for(let t of $t(e))t.token&&this.sendUnbind(t.token);this.wsClosed=!0,this.ws.close()}}reconnectWebSocket(){this.ws.reconnect(),this.wsClosed=!1}getCriteriaCount(){return this.getAllCriteriaEmitters().length}getMasterEmitter(){return this.masterSubEmitter||(this.masterSubEmitter=new it(...Array.from(this.criteriaEntries.keys()))),this.masterSubEmitter}async reconnectIfNeeded(){ml.includes(this.getWebSocket().readyState)&&await new Promise(e=>{let t=()=>{this.getWebSocket().removeEventListener("open",t),e()};this.getWebSocket().addEventListener("open",t),this.reconnectWebSocket()})}};function $t(r){return r.bareCriteria?[r.bareCriteria,...r.criteriaWithProps]:r.criteriaWithProps}var hl=new J(1e3);async function gl({resource:r,subscription:e,context:t,getPreviousResource:n,logger:i}){if(!yl(e,i))return i?.debug("Ignore subscription without recognized channel type"),!1;let o=e.criteria;if(!o)return i?.debug("Ignore rest hook missing criteria"),!1;let s=Ze(o);if(r.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${r.resourceType}")`),!1;if(!await Xo(e,r,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let u=de(e,"https://medplum.com/fhir/StructureDefinition/subscription-supported-interaction");if(u&&u.valueCode!==t.interaction)return i?.debug(`Ignore rest hook for different interaction (wanted "${u.valueCode}", received "${t.interaction}")`),!1;if(!Nt(r,s))return!1;let l=br(e.meta)??[],p=br(r.meta)??[];return l.length&&!l.some(g=>p.some(v=>v.reference===g.reference))?(i?.debug("Subscription suppressed due to mismatched accounts",{subscriptionId:e.id,resource:O(r)}),!1):!0}function yl(r,e){let t=r.channel?.type;return t==="rest-hook"?r.channel?.endpoint?!0:(e?.debug("Ignore rest-hook missing URL"),!1):t==="websocket"}async function Xo(r,e,t){let n=de(r,"https://medplum.com/fhir/StructureDefinition/fhir-path-criteria-expression");if(!n?.valueString)return!0;let i=await t(e),o={"%current":b(e),"%previous":b(i??{})};return w(n.valueString,[b(e)],o,hl)?.[0]?.value===!0}var Br="5.1.17-7eb2f88",xl="medplum-cli",rs=k.FHIR_JSON+", */*; q=0.1",vl="https://api.medplum.com/",Tl=1e3,Sl=6e4,bl=0,El=3e5,Rl="Binary/",Zo={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},We={ClientCredentials:"client_credentials",AuthorizationCode:"authorization_code",RefreshToken:"refresh_token",JwtBearer:"urn:ietf:params:oauth:grant-type:jwt-bearer",TokenExchange:"urn:ietf:params:oauth:grant-type:token-exchange",PreAuthorizedCode:"urn:ietf:params:oauth:grant-type:pre-authorized_code"},ns={AccessToken:"urn:ietf:params:oauth:token-type:access_token",RefreshToken:"urn:ietf:params:oauth:token-type:refresh_token",IdToken:"urn:ietf:params:oauth:token-type:id_token",Saml1Token:"urn:ietf:params:oauth:token-type:saml1",Saml2Token:"urn:ietf:params:oauth:token-type:saml2"},Cl={ClientSecretBasic:"client_secret_basic",ClientSecretPost:"client_secret_post",ClientSecretJwt:"client_secret_jwt",PrivateKeyJwt:"private_key_jwt",None:"none"},is={JwtBearer:"urn:ietf:params:oauth:client-assertion-type:jwt-bearer"},Pl={ES256:"ES256",ES384:"ES384",ES512:"ES512",HS256:"HS256",RS256:"RS256",RS384:"RS384",RS512:"RS512"},Gt=class extends ee{constructor(t){super();c(this,"options");c(this,"fetch");c(this,"createPdfImpl");c(this,"storage");c(this,"requestCache");c(this,"cacheTime");c(this,"baseUrl");c(this,"fhirBaseUrl");c(this,"authorizeUrl");c(this,"tokenUrl");c(this,"logoutUrl");c(this,"fhircastHubUrl");c(this,"cdsServicesUrl");c(this,"defaultHeaders");c(this,"onUnauthenticated");c(this,"autoBatchTime");c(this,"autoBatchQueue");c(this,"maxRetries");c(this,"maxRetryTime");c(this,"refreshGracePeriod");c(this,"subscriptionManager");c(this,"medplumServer");c(this,"clientId");c(this,"clientSecret");c(this,"credentialsInHeader");c(this,"autoBatchTimerId");c(this,"accessToken");c(this,"accessTokenExpires");c(this,"refreshToken");c(this,"refreshPromise");c(this,"profilePromise");c(this,"sessionDetails");c(this,"currentRateLimits");c(this,"basicAuth");c(this,"initPromise");c(this,"initComplete",!0);c(this,"keyValueClient");c(this,"logLevel");if(t?.baseUrl&&!t.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");this.options=t??{},this.fetch=t?.fetch??Al(),this.storage=t?.storage??new rt(void 0,t?.storagePrefix),this.createPdfImpl=t?.createPdf,this.baseUrl=Ar(t?.baseUrl??vl),this.fhirBaseUrl=U(this.baseUrl,t?.fhirUrlPath??"fhir/R4"),this.authorizeUrl=U(this.baseUrl,t?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=U(this.baseUrl,t?.tokenUrl??"oauth2/token"),this.logoutUrl=U(this.baseUrl,t?.logoutUrl??"oauth2/logout"),this.fhircastHubUrl=U(this.baseUrl,t?.fhircastHubUrl??"fhircast/STU3"),this.cdsServicesUrl=U(this.baseUrl,t?.cdsServicesUrl??"cds-services"),this.clientId=t?.clientId??"",this.clientSecret=t?.clientSecret??"",this.credentialsInHeader=t?.authCredentialsMethod==="header",this.defaultHeaders=t?.defaultHeaders??{},this.onUnauthenticated=t?.onUnauthenticated,this.refreshGracePeriod=t?.refreshGracePeriod??El,this.logLevel=this.initializeLogLevel(t),this.maxRetries=t?.maxRetries??2,this.maxRetryTime=t?.maxRetryTime??2e3,this.cacheTime=t?.cacheTime??(z()?Sl:bl),this.cacheTime>0?this.requestCache=new J(t?.resourceCacheSize??Tl):this.requestCache=void 0,t?.autoBatchTime?(this.autoBatchTime=t.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0),t?.accessToken&&this.setAccessToken(t.accessToken),this.storage.getInitPromise===void 0?(t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initPromise=Promise.resolve(),this.dispatchEvent({type:"storageInitialized"})):(this.initComplete=!1,this.initPromise=this.storage.getInitPromise(),this.initPromise.then(()=>{t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initComplete=!0,this.dispatchEvent({type:"storageInitialized"})}).catch(n=>{console.error(n),this.initComplete=!0,this.dispatchEvent({type:"storageInitFailed",payload:{error:n}})})),this.setupStorageListener()}get isInitialized(){return this.initComplete}getInitPromise(){return this.initPromise}initializeLogLevel(t){return t?.logLevel?t.logLevel:t?.verbose!==void 0&&t.verbose?"verbose":"none"}async attemptResumeActiveLogin(){let t=this.getActiveLogin();t&&(this.setAccessToken(t.accessToken,t.refreshToken),await this.refreshProfile())}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}getFhircastHubUrl(){return this.fhircastHubUrl}getCdsServicesUrl(){return this.cdsServicesUrl}getDefaultHeaders(){return this.defaultHeaders}clear(){this.storage.clear(),this.clearActiveLogin()}clearActiveLogin(){this.storage.setString("activeLogin",void 0),this.requestCache?.clear(),this.accessToken=void 0,this.refreshToken=void 0,this.refreshPromise=void 0,this.accessTokenExpires=void 0,this.sessionDetails=void 0,this.medplumServer=void 0,this.dispatchEvent({type:"change"})}invalidateUrl(t){t=t.toString(),this.requestCache?.delete(t)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(t){let n=U(this.fhirBaseUrl,t);for(let i of this.requestCache?.keys()??y)(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache?.delete(i)}get(t,n={}){t=t.toString();let i=this.getCacheEntry(t,n);if(i)return i.value;let o;t.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue&&!n.disableAutoBatch?o=new Promise((a,u)=>{this.autoBatchQueue.push({method:"GET",url:t.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:u}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):(n.method="GET",o=this.request(t,n));let s=new W(o);return this.setCacheEntry(t,s,n),s}post(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),o.method="POST",this.request(t,o)}put(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),o.method="PUT",this.request(t,o)}patch(t,n,i={}){return t=t.toString(),this.setRequestBody(i,n),this.setRequestContentType(i,k.JSON_PATCH),this.invalidateUrl(t),i.method="PATCH",this.request(t,i)}delete(t,n={}){return t=t.toString(),this.invalidateUrl(t),n.method="DELETE",this.request(t,n)}async startNewUser(t,n){let{codeChallengeMethod:i,codeChallenge:o}=await this.startPkce();return this.post("auth/newuser",{...t,clientId:t.clientId??this.clientId,codeChallengeMethod:i,codeChallenge:o},void 0,n)}async startNewProject(t,n){return this.post("auth/newproject",t,void 0,n)}async startNewPatient(t,n){return this.post("auth/newpatient",t,void 0,n)}async startLogin(t,n){return this.post("auth/login",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async startGoogleLogin(t,n){return this.post("auth/google",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async ensureCodeChallenge(t){return t.codeChallenge?t:{...t,...await this.startPkce()}}async signOut(){await this.post(this.logoutUrl,{}),this.clear()}async signInWithRedirect(t){let i=new URLSearchParams(ae.getSearch()).get("code");if(!i){await this.requestAuthorization(t);return}return this.processCode(i)}signOutWithRedirect(){ae.assign(this.logoutUrl)}async signInWithExternalAuth(t,n,i,o,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),ae.assign(this.getExternalAuthRedirectUri(t,n,i,a,s))}async exchangeExternalAccessToken(t,n,i){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");let o={grant_type:We.TokenExchange,subject_token_type:ns.AccessToken,client_id:n,subject_token:t};return i&&(o.membership_id=i),this.fetchTokens(o)}getExternalAuthRedirectUri(t,n,i,o,s=!0){let a=new URL(t);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",n),a.searchParams.set("redirect_uri",i),a.searchParams.set("scope",o.scope??"openid profile email"),a.searchParams.set("state",JSON.stringify(o)),s){let{codeChallenge:u,codeChallengeMethod:l}=o;if(!l)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!u)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");a.searchParams.set("code_challenge_method",l),a.searchParams.set("code_challenge",u)}return a.toString()}fhirUrl(...t){return new URL(U(this.fhirBaseUrl,t.join("/")))}fhirSearchUrl(t,n){let i=this.fhirUrl(t);return n&&(i.search=Wn(n)),i}search(t,n,i){let o=this.fhirSearchUrl(t,n),s="search-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=this.getBundle(o,i);return this.setCacheEntry(s,u,i),u}searchOne(t,n,i){let o=this.fhirSearchUrl(t,n);o.searchParams.set("_count","1"),o.searchParams.sort();let s="searchOne-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=new W(this.search(t,o.searchParams,i).then(l=>l.entry?.[0]?.resource));return this.setCacheEntry(s,u,i),u}searchResources(t,n,i){let s="searchResources-"+this.fhirSearchUrl(t,n).toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=new W(this.search(t,n,i).then(ts));return this.setCacheEntry(s,u,i),u}async*searchResourcePages(t,n,i){let o=this.fhirSearchUrl(t,n);for(;o;){let s=new URL(o).searchParams;s.has("_count")||s.set("_count","1000");let a=await this.search(t,s,i),u=a.link?.find(l=>l.relation==="next");if(!a.entry?.length&&!u)break;yield ts(a),o=u?.url?new URL(u.url):void 0}}valueSetExpand(t,n){let i=this.fhirUrl("ValueSet","$expand");return i.search=new URLSearchParams(t).toString(),this.get(i.toString(),n)}getCached(t,n){let i=this.requestCache?.get(this.fhirUrl(t,n).toString())?.value;return i?.isOk()?i.read():void 0}getCachedReference(t){let n=t.reference;if(!n)return;if(n==="system")return Zo;let[i,o]=n.split("/");if(!(!i||!o))return this.getCached(i,o)}readResource(t,n,i){if(!n)throw new Error('The "id" parameter cannot be null, undefined, or an empty string.');return this.get(this.fhirUrl(t,n),i)}readReference(t,n){let i=t.reference;if(!i)return new W(Promise.reject(new Error("Missing reference")));if(i==="system")return new W(Promise.resolve(Zo));let[o,s]=i.split("/");return!o||!s?new W(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}readCanonical(t,n,i){return Array.isArray(t)?this.searchOne("",{_type:t.join(","),url:n},i):this.searchOne(t,"url="+n,i)}requestSchema(t,n){if(xn(t))return Promise.resolve();let i=t+"-requestSchema",o=this.getCacheEntry(i,void 0);if(o)return o.value;let s=new W((async()=>{let a=`{
1
+ "use strict";var er=Object.defineProperty;var Fs=Object.getOwnPropertyDescriptor;var Us=Object.getOwnPropertyNames;var Bs=Object.prototype.hasOwnProperty;var Ws=(r,e,t)=>e in r?er(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var qs=(r,e)=>{for(var t in e)er(r,t,{get:e[t],enumerable:!0})},js=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Us(e))!Bs.call(r,i)&&i!==t&&er(r,i,{get:()=>e[i],enumerable:!(n=Fs(e,i))||n.enumerable});return r};var $s=r=>js(er({},"__esModule",{value:!0}),r);var c=(r,e,t)=>Ws(r,typeof e!="symbol"?e+"":e,t);var hp={};qs(hp,{AccessPolicyInteraction:()=>Ie,AckCode:()=>Rd,AndAtom:()=>It,ArithmeticOperatorAtom:()=>F,AsAtom:()=>xe,CPT:()=>zs,ClientStorage:()=>nt,ConcatAtom:()=>Et,ContainsAtom:()=>Rt,ContentType:()=>k,DEFAULT_ACCEPT:()=>ns,DEFAULT_MAX_SEARCH_COUNT:()=>Tu,DEFAULT_SEARCH_COUNT:()=>vu,DataSampler:()=>Wr,DotAtom:()=>X,EMPTY:()=>y,EmptySetAtom:()=>St,EqualsAtom:()=>Pt,EquivalentAtom:()=>wt,EventTarget:()=>Dr,ExternalSecretSystems:()=>Dl,FHIRCAST_EVENT_NAMES:()=>Mr,FHIRCAST_EVENT_RESOURCES:()=>Go,FHIRCAST_EVENT_VERSION_REQUIRED:()=>_r,FHIRCAST_RESOURCE_TYPES:()=>Ho,FhirFilterComparison:()=>Kt,FhirFilterConnective:()=>Xt,FhirFilterNegation:()=>Yt,FhirPathAtom:()=>ye,FhircastConnection:()=>Ut,FileBuilder:()=>vi,FunctionAtom:()=>Z,HTTP_HL7_ORG:()=>ct,HTTP_TERMINOLOGY_HL7_ORG:()=>Ys,Hl7Context:()=>Te,Hl7Field:()=>ue,Hl7Message:()=>Si,Hl7Segment:()=>ot,ICD10:()=>Js,INVALID_MEDICATION_ORDER_RESPONSE:()=>Ps,INVALID_MEDICATION_ORDER_SET_RESPONSE:()=>As,INVALID_MEDICATION_SEARCH_RESPONSE:()=>Od,ImpliesAtom:()=>Dt,InAtom:()=>Ct,IndexerAtom:()=>Oe,InfixOperatorAtom:()=>R,IsAtom:()=>we,LOINC:()=>Hs,LRUCache:()=>K,LiteralAtom:()=>$,LogLevel:()=>$e,LogLevelNames:()=>Cs,Logger:()=>bi,MEDICATION_REQUEST_STATUS_REASON_RESPONSE_NOT_RECEIVED:()=>Os,MEDICATION_REQUEST_STATUS_REASON_SYSTEM:()=>ws,MEDPLUM_CLI_CLIENT_ID:()=>Tl,MEDPLUM_RELEASES_URL:()=>_s,MEDPLUM_VERSION:()=>Br,MedplumClient:()=>Gt,MedplumKeyValueClient:()=>qt,MemoryStorage:()=>Fr,MockAsyncClientStorage:()=>ai,NDC:()=>Ks,NOOP:()=>Dc,NotEqualsAtom:()=>At,NotEquivalentAtom:()=>Ot,OAuthClientAssertionType:()=>os,OAuthGrantType:()=>qe,OAuthSigningAlgorithm:()=>wl,OAuthTokenAuthMethod:()=>Al,OAuthTokenType:()=>is,OperationOutcomeError:()=>f,Operator:()=>m,OperatorPrecedence:()=>S,OrAtom:()=>kt,PATIENT_PREFERRED_PHARMACY_URL:()=>Kr,PHARMACY_PREFERENCE_TYPE_SYSTEM:()=>Ci,PHARMACY_TYPE_PREFERRED:()=>Pi,PHARMACY_TYPE_PRIMARY:()=>Jr,Parser:()=>tr,ParserBuilder:()=>at,PrefixOperatorAtom:()=>st,PropertyType:()=>d,RXNORM:()=>Qs,ReadablePromise:()=>W,ReconnectingWebSocket:()=>jt,ReturnAckCategory:()=>Ku,SNOMED:()=>Gs,SearchParameterType:()=>le,SubscriptionEmitter:()=>it,SubscriptionManager:()=>Ht,SymbolAtom:()=>B,Tokenizer:()=>ve,TransformMapCollection:()=>Gr,TypedEventTarget:()=>te,UCUM:()=>en,UnaryOperatorAtom:()=>bt,UnionAtom:()=>Ae,VALID_HOSTNAME_REGEX:()=>xo,XorAtom:()=>Vt,accepted:()=>ca,accessPolicySupportsInteraction:()=>Xn,addPreferredPharmacyToPatient:()=>jd,addProfileToResource:()=>Ac,allOk:()=>Xs,append:()=>Y,applyDefaultValuesToElement:()=>$l,applyDefaultValuesToResource:()=>jl,applyFixedOrPatternValue:()=>zt,arrayBufferToBase64:()=>Ln,arrayBufferToHex:()=>_n,arrayify:()=>ne,assert:()=>Yo,assertContextVersionOptional:()=>ri,assertOk:()=>Ea,assertReleaseManifest:()=>Ls,badRequest:()=>P,booleanToTypedValue:()=>h,buildCdsRequest:()=>ol,buildElementsContext:()=>jr,buildMedicationRequestResponseLostStatusReason:()=>Id,buildTypeName:()=>Po,businessRule:()=>ma,calculateAge:()=>yt,calculateAgeString:()=>Xa,canReadResourceType:()=>Gu,canWriteResource:()=>zu,canWriteResourceType:()=>Qu,capitalize:()=>L,checkForNull:()=>Ai,checkIfValidMedplumVersion:()=>pp,clearReleaseCache:()=>dp,codeableConceptMatchesToken:()=>pc,codingMatchesToken:()=>uo,compressElement:()=>Ca,concatUrls:()=>U,conceptMapTranslate:()=>hi,conflict:()=>ua,contentTooLarge:()=>ia,convertContainedResourcesToBundle:()=>nl,convertToSearchableDates:()=>Gn,convertToSearchableNumbers:()=>pu,convertToSearchableQuantities:()=>fu,convertToSearchableReferences:()=>zn,convertToSearchableStrings:()=>Qn,convertToSearchableTokens:()=>Jn,convertToSearchableUris:()=>mu,convertToTransactionBundle:()=>Wo,crawlTypedValue:()=>fr,crawlTypedValueAsync:()=>Da,createConstraintIssue:()=>dn,createFhircastMessagePayload:()=>Nr,createOperationOutcomeIssue:()=>be,createPreferredPharmacyExtension:()=>Ds,createProcessingIssue:()=>pn,createReference:()=>Re,createStructureIssue:()=>E,created:()=>Zs,decodeBase64:()=>Bo,decodeBase64Url:()=>Zn,deepClone:()=>Pe,deepEquals:()=>fe,deepIncludes:()=>Qe,deriveIdentifierSearchParameter:()=>Kd,encodeBase64:()=>Ft,encodeBase64Url:()=>Zu,encryptSHA256:()=>ei,ensureNoLeadingSlash:()=>yo,ensureTrailingSlash:()=>Ar,escapeHtml:()=>kc,evalFhirPath:()=>du,evalFhirPathTyped:()=>w,evalSqlOnFhir:()=>sp,expandSampledData:()=>li,expandSampledObservation:()=>Nl,extractAccountReferences:()=>br,fetchLatestVersionString:()=>fp,fetchVersionManifest:()=>Zr,fhirPathArrayEquals:()=>wn,fhirPathArrayEquivalent:()=>xr,fhirPathArrayNotEquals:()=>On,fhirPathEquals:()=>ze,fhirPathEquivalent:()=>no,fhirPathIs:()=>mt,fhirPathNot:()=>An,fhirTypeToJsType:()=>hr,findCodeBySystem:()=>dc,findObservationInterval:()=>hc,findObservationReferenceRange:()=>gc,findObservationReferenceRanges:()=>fo,findResourceByCode:()=>Rc,findResourceInBundle:()=>il,flatMapFilter:()=>Ic,forbidden:()=>ta,formatAddress:()=>To,formatCodeableConcept:()=>Je,formatCoding:()=>jn,formatDate:()=>Lc,formatDateTime:()=>wr,formatFamilyName:()=>_c,formatGivenName:()=>Mc,formatHl7DateTime:()=>Rs,formatHumanName:()=>Ye,formatMoney:()=>Hc,formatObservationValue:()=>bo,formatPeriod:()=>Fc,formatQuantity:()=>he,formatRange:()=>$c,formatReferenceString:()=>vo,formatSearchQuery:()=>Iu,formatTime:()=>Nc,formatTiming:()=>qc,formatWallTime:()=>So,generateId:()=>ee,getAllDataTypes:()=>yn,getAllQuestionnaireAnswers:()=>ec,getBuffer:()=>kr,getCodeBySystem:()=>Sr,getDataType:()=>de,getDateProperty:()=>Ya,getDefaultValuesForNewSliceEntry:()=>Hl,getDisplayString:()=>so,getElementDefinition:()=>gt,getElementDefinitionForPath:()=>tu,getElementDefinitionFromElements:()=>$n,getElementDefinitionTypeName:()=>cr,getExpressionForResourceType:()=>np,getExpressionsForResourceType:()=>ki,getExtension:()=>pe,getExtensionValue:()=>Rr,getIdentifier:()=>Er,getImageSrc:()=>Ka,getInnerDerivedIdentifierExpression:()=>wi,getMedicationOrderIframeUrl:()=>Md,getNestedProperty:()=>Me,getOutcomeRedirectUrl:()=>fa,getParsedDerivedIdentifierExpression:()=>Oi,getParsedExpressionForResourceType:()=>Ii,getPathDifference:()=>me,getPathDisplayName:()=>Xc,getPendingMedicationOrderId:()=>Vd,getPendingMedicationOrderStatus:()=>Dd,getPreferredPharmaciesFromPatient:()=>qd,getPropertyDisplayName:()=>Ao,getQueryString:()=>Wn,getQuestionnaireAnswers:()=>Za,getRandomString:()=>Vr,getReferenceString:()=>O,getResourceTypes:()=>Jc,getSearchParameter:()=>Yc,getSearchParameterDetails:()=>Yd,getSearchParameters:()=>Kc,getStatus:()=>ba,getTypedPropertyValue:()=>_,getTypedPropertyValueWithPath:()=>mr,getTypedPropertyValueWithSchema:()=>to,getTypedPropertyValueWithoutSchema:()=>ro,getValueSliceName:()=>pi,getWebSocketUrl:()=>Bn,getWindow:()=>Xu,globalSchema:()=>j,gone:()=>ra,indexConceptMapCodings:()=>us,indexDefaultSearchParameters:()=>Sn,indexSearchParameter:()=>Or,indexSearchParameterBundle:()=>zc,indexStructureDefinitionBundle:()=>lr,inflateBaseSchema:()=>fn,inflateElement:()=>$i,initFhirPathParserBuilder:()=>Ze,invalidSearchOperator:()=>Mu,isAccepted:()=>ga,isAddPharmacyResponse:()=>Gd,isBrowserEnvironment:()=>z,isCodeableConcept:()=>Tr,isCoding:()=>vr,isCompletedSubscriptionRequest:()=>ni,isComplexTypeCode:()=>Cr,isConflict:()=>va,isContextVersionRequired:()=>ti,isCreated:()=>ha,isDataTypeLoaded:()=>xn,isDateString:()=>In,isDateTimeString:()=>_e,isDefined:()=>Vc,isEmpty:()=>A,isError:()=>sr,isFhirCriteriaMet:()=>Zo,isFhircastResourceType:()=>Qo,isGone:()=>Ta,isJwt:()=>ii,isLowerCase:()=>fc,isMedicationArray:()=>kd,isMedicationOrderResponse:()=>Is,isMedicationOrderSetResponse:()=>ks,isMedplumAccessToken:()=>oi,isNodeEnvironment:()=>Yu,isNotFound:()=>xa,isObject:()=>C,isOk:()=>ar,isOperationOutcome:()=>He,isOrganizationArray:()=>Hd,isPeriod:()=>kn,isPopulated:()=>oe,isPrimitiveType:()=>dt,isProfileLoaded:()=>vn,isProfileResource:()=>oo,isQuantity:()=>V,isQuantityEquivalent:()=>Vn,isRedirect:()=>ya,isReference:()=>G,isResource:()=>I,isResourceType:()=>lt,isResourceTypeSchema:()=>pr,isResourceWithId:()=>Ke,isSliceDefinitionWithTypes:()=>di,isString:()=>Le,isStringArray:()=>lc,isTextObject:()=>lo,isTypedValue:()=>ru,isUUID:()=>uc,isUnauthenticated:()=>Sa,isValidDate:()=>Tt,isValidHostname:()=>Pc,isValidMedplumSemver:()=>Ns,lazy:()=>Un,loadDataType:()=>dr,locationUtils:()=>ce,mapByIdentifier:()=>wc,matchDiscriminant:()=>gr,matchesRange:()=>Fn,matchesSearchRequest:()=>Nt,medicationOrderRequestToParameters:()=>Nd,medicationOrderSetRequestToParameters:()=>Ud,medicationSearchParamsToParameters:()=>_d,multipleMatches:()=>sa,normalizeArrayBufferView:()=>Nn,normalizeCreateBinaryOptions:()=>ui,normalizeCreatePdfOptions:()=>ss,normalizeErrorEvent:()=>Xo,normalizeErrorString:()=>Se,normalizeOperationOutcome:()=>ut,notFound:()=>cn,notModified:()=>ea,operationOutcomeIssueToString:()=>ji,operationOutcomeToString:()=>ln,parametersToMedicationOrderResponse:()=>Fd,parametersToMedicationOrderSetResponse:()=>Bd,parseFhirPath:()=>Lt,parseFilterParameter:()=>Ed,parseHl7DateTime:()=>Pd,parseJWTPayload:()=>Wt,parseLogLevel:()=>wd,parseMappingLanguage:()=>Zl,parseParameter:()=>Mo,parseReference:()=>Qa,parseSearchRequest:()=>et,parseStructureDefinition:()=>ur,parseXFhirQuery:()=>Ou,pathToJSONPointer:()=>_a,preciseEquals:()=>Sc,preciseGreaterThan:()=>Ec,preciseGreaterThanOrEquals:()=>go,preciseLessThan:()=>bc,preciseLessThanOrEquals:()=>ho,preciseRound:()=>Tc,preconditionFailed:()=>na,projectAdminResourceTypes:()=>Lo,protectedResourceTypes:()=>_o,readInteractions:()=>No,redirect:()=>qi,redirectOk:()=>pa,removeDuplicates:()=>ft,removePreferredPharmacyFromPatient:()=>$d,removeProfileFromResource:()=>Oc,reorderBundle:()=>qo,replaceQueryVariables:()=>$o,resolveId:()=>Ce,resourceMatchesSubscriptionCriteria:()=>xl,satisfiedAccessPolicy:()=>Fo,serializeError:()=>Zt,serializeFhircastSubscriptionRequest:()=>Lr,serverError:()=>la,serverTimeout:()=>da,setCodeBySystem:()=>mc,setIdentifier:()=>tc,singleton:()=>D,singularize:()=>Cc,sleep:()=>Pr,sortStringArray:()=>vt,splitN:()=>Ne,splitSearchOnComma:()=>tt,streamToBuffer:()=>op,stringify:()=>xt,stringifyTypedValue:()=>Hn,structureMapTransform:()=>ed,subsetResource:()=>wa,summarizeObservations:()=>Ml,toJsBoolean:()=>q,toPeriod:()=>ht,toTypedValue:()=>b,tooManyRequests:()=>aa,trimTrailingEmptyElements:()=>ic,tryGetDataType:()=>Ee,tryGetJwtExpiration:()=>si,tryGetProfile:()=>Tn,typedValueToString:()=>qn,unauthorized:()=>Ve,unauthorizedTokenAudience:()=>or,unauthorizedTokenExpired:()=>un,unsupportedMediaType:()=>oa,validateFhircastSubscriptionRequest:()=>Bt,validateResource:()=>Fa,validateResourceType:()=>Qd,validateTypedValue:()=>Yi,validationError:()=>T,validationRegexes:()=>pt,warnIfNewerVersionAvailable:()=>mp,wordWrap:()=>Ss});module.exports=$s(hp);var K=class{constructor(e=10){c(this,"max");c(this,"cache");this.max=e,this.cache=new Map}clear(){this.cache.clear()}get(e){let t=this.cache.get(e);return t&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size>=this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}delete(e){this.cache.delete(e)}keys(){return this.cache.keys()}first(){return this.cache.keys().next().value}};var st=class{constructor(e,t){c(this,"operator");c(this,"child");this.operator=e,this.child=t}toString(){return`${this.operator}(${this.child.toString()})`}},R=class{constructor(e,t,n){c(this,"operator");c(this,"left");c(this,"right");this.operator=e,this.left=t,this.right=n}toString(){return`(${this.left.toString()} ${this.operator} ${this.right.toString()})`}},at=class{constructor(){c(this,"prefixParselets",{});c(this,"infixParselets",{})}registerInfix(e,t){return this.infixParselets[e]=t,this}registerPrefix(e,t){return this.prefixParselets[e]=t,this}prefix(e,t,n){return this.registerPrefix(e,{parse(i,o){let s=i.consumeAndParse(t);return n(o,s)}})}infixLeft(e,t,n){return this.registerInfix(e,{parse(i,o,s){let a=i.consumeAndParse(t);return n(o,s,a)},precedence:t})}construct(e){return new tr(e,this.prefixParselets,this.infixParselets)}},tr=class{constructor(e,t,n){c(this,"tokens");c(this,"prefixParselets");c(this,"infixParselets");this.tokens=e,this.prefixParselets=t,this.infixParselets=n}hasMore(){return this.tokens.length>0}match(e){return this.peek()?.id!==e?!1:(this.consume(),!0)}consumeAndParse(e=1/0){let t=this.consume(),n=this.prefixParselets[t.id];if(!n)throw new Error(`Parse error at "${t.value}" (line ${t.line}, column ${t.column}). No matching prefix parselet.`);let i=n.parse(this,t);for(;e>this.getPrecedence();){let o=this.consume();i=this.getInfixParselet(o).parse(this,i,o)}return i}getPrecedence(){let e=this.peek();if(!e)return 1/0;let t=this.getInfixParselet(e);return t?t.precedence:1/0}consume(e,t){if(!this.tokens.length)throw new Error("Cant consume unknown more tokens.");if(e&&this.peek()?.id!==e){let n=this.peek();throw new Error(`Expected ${e} but got "${n.id}" (${n.value}) at line ${n.line} column ${n.column}.`)}if(t&&this.peek()?.value!==t){let n=this.peek();throw new Error(`Expected "${t}" but got "${n.value}" at line ${n.line} column ${n.column}.`)}return this.tokens.shift()}peek(){return this.tokens.length>0?this.tokens[0]:void 0}removeComments(){this.tokens=this.tokens.filter(e=>e.id!=="Comment")}getInfixParselet(e){return this.infixParselets[e.id==="Symbol"?e.value:e.id]}};function ne(r){if(r!==void 0)return Array.isArray(r)?r:[r]}var en="http://unitsofmeasure.org",Hs="http://loinc.org",Gs="http://snomed.info/sct",Qs="http://www.nlm.nih.gov/research/umls/rxnorm",zs="http://www.ama-assn.org/go/cpt",Js="http://hl7.org/fhir/sid/icd-10",Ks="http://hl7.org/fhir/sid/ndc",ct="http://hl7.org",Ys="http://terminology.hl7.org";var rr="ok",nr="created",tn="gone",rn="not-modified",nn="found",on="not-found",sn="conflict",an="unauthorized",Mi="forbidden",_i="precondition-failed",Li="content-too-large",Ni="unsupported-media-type",Fi="multiple-matches",Ui="too-many-requests",ir="accepted",Bi="server-timeout",Wi="business-rule",Xs={resourceType:"OperationOutcome",id:rr,issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},Zs={resourceType:"OperationOutcome",id:nr,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},ea={resourceType:"OperationOutcome",id:rn,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},cn={resourceType:"OperationOutcome",id:on,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},Ve={resourceType:"OperationOutcome",id:an,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},un={...Ve,issue:[...Ve.issue,{severity:"error",code:"expired",details:{text:"Token expired"}}]},or={...Ve,issue:[...Ve.issue,{severity:"error",code:"invalid",details:{text:"Token not issued for this audience"}}]},ta={resourceType:"OperationOutcome",id:Mi,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},ra={resourceType:"OperationOutcome",id:tn,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},na={resourceType:"OperationOutcome",id:_i,issue:[{severity:"error",code:"processing",details:{text:"Precondition Failed"}}]};function ia(r){return{resourceType:"OperationOutcome",id:Li,issue:[{severity:"error",code:"too-long",details:{text:r}}]}}var oa={resourceType:"OperationOutcome",id:Ni,issue:[{severity:"error",code:"not-supported",details:{text:"Unsupported media type"}}]},sa={resourceType:"OperationOutcome",id:Fi,issue:[{severity:"error",code:"multiple-matches",details:{text:"Multiple resources found matching condition"}}]},aa={resourceType:"OperationOutcome",id:Ui,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function ca(r){return{resourceType:"OperationOutcome",id:ir,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:r}]}}function P(r,e){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:r},...e?{expression:ne(e)}:void 0}]}}function ua(r,e){return{resourceType:"OperationOutcome",id:sn,issue:[{severity:"error",code:"conflict",details:{coding:e?[{code:e}]:void 0,text:r}}]}}function T(r,e,t,n){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:t??"structure",details:{text:r},...e?{expression:e}:void 0,...n?{diagnostics:n}:void 0}]}}function la(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:r.toString()}]}}function da(r){return{resourceType:"OperationOutcome",id:Bi,issue:[{severity:"error",code:"timeout",details:{text:r??"Server timeout"}}]}}function qi(r){let e=r.toString();return{resourceType:"OperationOutcome",id:nn,issue:[{severity:"information",code:"informational",details:{coding:[{system:"urn:ietf:rfc:3986",code:e}],text:"Redirect to "+e}}]}}function pa(r){return{...qi(r),id:rr}}function fa(r){return r?.issue?.[0]?.details?.coding?.find(e=>e.system==="urn:ietf:rfc:3986")?.code}function ma(r,e){return{resourceType:"OperationOutcome",id:Wi,issue:[{severity:"error",code:"business-rule",details:{id:r,text:e}}]}}function sr(r){return!r||typeof r!="object"?!1:r instanceof Error||typeof DOMException<"u"&&r instanceof DOMException?!0:Object.prototype.toString.call(r)==="[object Error]"}function He(r){return typeof r=="object"&&r!==null&&r.resourceType==="OperationOutcome"}function ar(r){return r.id===rr||r.id===nr||r.id===rn||r.id===ir}function ha(r){return r.id===nr}function ga(r){return r.id===ir}function ya(r){return r.id===nn}function xa(r){return r.id===on}function va(r){return r.id===sn}function Ta(r){return r.id===tn}function Sa(r){return r.id===an}function ba(r){switch(r.id){case rr:return 200;case nr:return 201;case ir:return 202;case nn:return 302;case rn:return 304;case an:return 401;case Mi:return 403;case on:return 404;case sn:return 409;case tn:return 410;case _i:case Fi:return 412;case Li:return 413;case Ni:return 415;case Wi:return 422;case Ui:return 429;case Bi:return 504;default:return r.issue?.[0]?.code==="exception"?500:400}}function Ea(r,e){if(!ar(r)||e===void 0)throw new f(r)}var f=class extends Error{constructor(t,n){super(ln(t),n);c(this,"outcome");this.name="OperationOutcomeError",this.outcome=t}};function ut(r){return r instanceof f?r.outcome:He(r)?r:P(Se(r))}function Se(r){return r?typeof r=="string"?r:sr(r)?r.message:He(r)?ln(r):typeof r=="object"&&"code"in r&&typeof r.code=="string"?r.code:JSON.stringify(r):"Unknown error"}function ln(r){let e=r.issue?.map(ji)??[];return e.length>0?e.join("; "):"Unknown error"}function ji(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 be(r,e,t,n,i){let o={severity:r,code:e,details:{text:t},expression:[n]};return i&&(o.diagnostics=JSON.stringify(i)),o}function E(r,e){return be("error","structure",e,r)}function dn(r,e){return be("error","invariant",`Constraint ${e.key} not met: ${e.description}`,r,{fhirpath:e.expression})}function pn(r,e,t,n){return be("error","processing",e,r,{...n,error:t})}var Ra={"http://hl7.org/fhirpath/System.String":"string"};function Ca(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:Ra[t.code]??t.code})),e}function $i(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 fn(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,$i(i,o)])),constraints:[],innerTypes:[]};return e}var Hi={Element:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]}}},BackboneElement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]}}},Address:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"code"}]},text:{type:[{code:"string"}]},line:{max:9007199254740991,type:[{code:"string"}]},city:{type:[{code:"string"}]},district:{type:[{code:"string"}]},state:{type:[{code:"string"}]},postalCode:{type:[{code:"string"}]},country:{type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Age:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Annotation:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"author[x]":{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Organization"]},{code:"string"}]},time:{type:[{code:"dateTime"}]},text:{min:1,type:[{code:"markdown"}]}}},Attachment:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},contentType:{type:[{code:"code"}]},language:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]},url:{type:[{code:"url"}]},size:{type:[{code:"unsignedInt"}]},hash:{type:[{code:"base64Binary"}]},title:{type:[{code:"string"}]},creation:{type:[{code:"dateTime"}]}}},CodeableConcept:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},coding:{max:9007199254740991,type:[{code:"Coding"}]},text:{type:[{code:"string"}]}}},Coding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"uri"}]},version:{type:[{code:"string"}]},code:{type:[{code:"code"}]},display:{type:[{code:"string"}]},userSelected:{type:[{code:"boolean"}]}}},ContactDetail:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"string"}]},telecom:{max:9007199254740991,type:[{code:"ContactPoint"}]}}},ContactPoint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},system:{type:[{code:"code"}]},value:{type:[{code:"string"}]},use:{type:[{code:"code"}]},rank:{type:[{code:"positiveInt"}]},period:{type:[{code:"Period"}]}}},Contributor:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{min:1,type:[{code:"string"}]},contact:{max:9007199254740991,type:[{code:"ContactDetail"}]}}},Count:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},DataRequirement:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},"subject[x]":{type:[{code:"CodeableConcept"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Group"]}]},mustSupport:{max:9007199254740991,type:[{code:"string"}]},codeFilter:{max:9007199254740991,type:[{code:"DataRequirementCodeFilter"}]},dateFilter:{max:9007199254740991,type:[{code:"DataRequirementDateFilter"}]},limit:{type:[{code:"positiveInt"}]},sort:{max:9007199254740991,type:[{code:"DataRequirementSort"}]}}},DataRequirementCodeFilter:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]},code:{max:9007199254740991,type:[{code:"Coding"}]}}},DataRequirementDateFilter:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},"value[x]":{type:[{code:"dateTime"},{code:"Period"},{code:"Duration"}]}}},DataRequirementSort:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},direction:{min:1,type:[{code:"code"}]}}},Distance:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Dosage:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},sequence:{type:[{code:"integer"}]},text:{type:[{code:"string"}]},additionalInstruction:{max:9007199254740991,type:[{code:"CodeableConcept"}]},patientInstruction:{type:[{code:"string"}]},timing:{type:[{code:"Timing"}]},"asNeeded[x]":{type:[{code:"boolean"},{code:"CodeableConcept"}]},site:{type:[{code:"CodeableConcept"}]},route:{type:[{code:"CodeableConcept"}]},method:{type:[{code:"CodeableConcept"}]},doseAndRate:{max:9007199254740991,type:[{code:"DosageDoseAndRate"}]},maxDosePerPeriod:{type:[{code:"Ratio"}]},maxDosePerAdministration:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},maxDosePerLifetime:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},DosageDoseAndRate:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{type:[{code:"CodeableConcept"}]},"dose[x]":{type:[{code:"Range"},{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},"rate[x]":{type:[{code:"Ratio"},{code:"Range"},{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},Duration:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},ElementDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},representation:{max:9007199254740991,type:[{code:"code"}]},sliceName:{type:[{code:"string"}]},sliceIsConstraining:{type:[{code:"boolean"}]},label:{type:[{code:"string"}]},code:{max:9007199254740991,type:[{code:"Coding"}]},slicing:{type:[{code:"ElementDefinitionSlicing"}]},short:{type:[{code:"string"}]},definition:{type:[{code:"markdown"}]},comment:{type:[{code:"markdown"}]},requirements:{type:[{code:"markdown"}]},alias:{max:9007199254740991,type:[{code:"string"}]},min:{type:[{code:"unsignedInt"}]},max:{type:[{code:"string"}]},base:{type:[{code:"ElementDefinitionBase"}]},contentReference:{type:[{code:"uri"}]},type:{max:9007199254740991,type:[{code:"ElementDefinitionType"}]},"defaultValue[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},meaningWhenMissing:{type:[{code:"markdown"}]},orderMeaning:{type:[{code:"string"}]},"fixed[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},"pattern[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]},example:{max:9007199254740991,type:[{code:"ElementDefinitionExample"}]},"minValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},"maxValue[x]":{type:[{code:"date"},{code:"dateTime"},{code:"instant"},{code:"time"},{code:"decimal"},{code:"integer"},{code:"positiveInt"},{code:"unsignedInt"},{code:"Quantity"}]},maxLength:{type:[{code:"integer"}]},condition:{max:9007199254740991,type:[{code:"id"}]},constraint:{max:9007199254740991,type:[{code:"ElementDefinitionConstraint"}]},mustSupport:{type:[{code:"boolean"}]},isModifier:{type:[{code:"boolean"}]},isModifierReason:{type:[{code:"string"}]},isSummary:{type:[{code:"boolean"}]},binding:{type:[{code:"ElementDefinitionBinding"}]},mapping:{max:9007199254740991,type:[{code:"ElementDefinitionMapping"}]}}},ElementDefinitionSlicingDiscriminator:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},path:{min:1,type:[{code:"string"}]}}},ElementDefinitionSlicing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},discriminator:{max:9007199254740991,type:[{code:"ElementDefinitionSlicingDiscriminator"}]},description:{type:[{code:"string"}]},ordered:{type:[{code:"boolean"}]},rules:{min:1,type:[{code:"code"}]}}},ElementDefinitionBase:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},min:{min:1,type:[{code:"unsignedInt"}]},max:{min:1,type:[{code:"string"}]}}},ElementDefinitionType:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"uri"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},targetProfile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},aggregation:{max:9007199254740991,type:[{code:"code"}]},versioning:{type:[{code:"code"}]}}},ElementDefinitionExample:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},label:{min:1,type:[{code:"string"}]},"value[x]":{min:1,type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]}}},ElementDefinitionConstraint:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},key:{min:1,type:[{code:"id"}]},requirements:{type:[{code:"string"}]},severity:{min:1,type:[{code:"code"}]},human:{min:1,type:[{code:"string"}]},expression:{type:[{code:"string"}]},xpath:{type:[{code:"string"}]},source:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]}}},ElementDefinitionBinding:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},strength:{min:1,type:[{code:"code"}]},description:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]}}},ElementDefinitionMapping:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},identity:{min:1,type:[{code:"id"}]},language:{type:[{code:"code"}]},map:{min:1,type:[{code:"string"}]},comment:{type:[{code:"string"}]}}},Expression:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},description:{type:[{code:"string"}]},name:{type:[{code:"id"}]},language:{min:1,type:[{code:"code"}]},expression:{type:[{code:"string"}]},reference:{type:[{code:"uri"}]}}},Extension:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},url:{min:1,type:[{code:"uri"}]},"value[x]":{type:[{code:"base64Binary"},{code:"boolean"},{code:"canonical"},{code:"code"},{code:"date"},{code:"dateTime"},{code:"decimal"},{code:"id"},{code:"instant"},{code:"integer"},{code:"markdown"},{code:"oid"},{code:"positiveInt"},{code:"string"},{code:"time"},{code:"unsignedInt"},{code:"uri"},{code:"url"},{code:"uuid"},{code:"Address"},{code:"Age"},{code:"Annotation"},{code:"Attachment"},{code:"CodeableConcept"},{code:"Coding"},{code:"ContactPoint"},{code:"Count"},{code:"Distance"},{code:"Duration"},{code:"HumanName"},{code:"Identifier"},{code:"Money"},{code:"Period"},{code:"Quantity"},{code:"Range"},{code:"Ratio"},{code:"Reference"},{code:"SampledData"},{code:"Signature"},{code:"Timing"},{code:"ContactDetail"},{code:"Contributor"},{code:"DataRequirement"},{code:"Expression"},{code:"ParameterDefinition"},{code:"RelatedArtifact"},{code:"TriggerDefinition"},{code:"UsageContext"},{code:"Dosage"},{code:"Meta"}]}}},HumanName:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},text:{type:[{code:"string"}]},family:{type:[{code:"string"}]},given:{max:9007199254740991,type:[{code:"string"}]},prefix:{max:9007199254740991,type:[{code:"string"}]},suffix:{max:9007199254740991,type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Identifier:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"CodeableConcept"}]},system:{type:[{code:"uri"}]},value:{type:[{code:"string"}]},period:{type:[{code:"Period"}]},assigner:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MarketingStatus:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},country:{min:1,type:[{code:"CodeableConcept"}]},jurisdiction:{type:[{code:"CodeableConcept"}]},status:{min:1,type:[{code:"CodeableConcept"}]},dateRange:{min:1,type:[{code:"Period"}]},restoreDate:{type:[{code:"dateTime"}]}}},Meta:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},versionId:{type:[{code:"id"}]},lastUpdated:{type:[{code:"instant"}]},source:{type:[{code:"uri"}]},profile:{max:9007199254740991,type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},security:{max:9007199254740991,type:[{code:"Coding"}]},tag:{max:9007199254740991,type:[{code:"Coding"}]},project:{type:[{code:"uri"}]},author:{type:[{code:"Reference"}]},onBehalfOf:{type:[{code:"Reference"}]},account:{type:[{code:"Reference"}]},accounts:{max:9007199254740991,type:[{code:"Reference"}]},compartment:{max:9007199254740991,type:[{code:"Reference"}]}}},Money:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},currency:{type:[{code:"code"}]}}},Narrative:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},status:{min:1,type:[{code:"code"}]},div:{min:1,type:[{code:"xhtml"}]}}},ParameterDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},name:{type:[{code:"code"}]},use:{min:1,type:[{code:"code"}]},min:{type:[{code:"integer"}]},max:{type:[{code:"string"}]},documentation:{type:[{code:"string"}]},type:{min:1,type:[{code:"code"}]},profile:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]}}},Period:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},start:{type:[{code:"dateTime"}]},end:{type:[{code:"dateTime"}]}}},Population:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"age[x]":{type:[{code:"Range"},{code:"CodeableConcept"}]},gender:{type:[{code:"CodeableConcept"}]},race:{type:[{code:"CodeableConcept"}]},physiologicalCondition:{type:[{code:"CodeableConcept"}]}}},ProdCharacteristic:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},height:{type:[{code:"Quantity"}]},width:{type:[{code:"Quantity"}]},depth:{type:[{code:"Quantity"}]},weight:{type:[{code:"Quantity"}]},nominalVolume:{type:[{code:"Quantity"}]},externalDiameter:{type:[{code:"Quantity"}]},shape:{type:[{code:"string"}]},color:{max:9007199254740991,type:[{code:"string"}]},imprint:{max:9007199254740991,type:[{code:"string"}]},image:{max:9007199254740991,type:[{code:"Attachment"}]},scoring:{type:[{code:"CodeableConcept"}]}}},ProductShelfLife:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},identifier:{type:[{code:"Identifier"}]},type:{min:1,type:[{code:"CodeableConcept"}]},period:{min:1,type:[{code:"Quantity"}]},specialPrecautionsForStorage:{max:9007199254740991,type:[{code:"CodeableConcept"}]}}},Quantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Range:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},low:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},high:{type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]}}},Ratio:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},numerator:{type:[{code:"Quantity"}]},denominator:{type:[{code:"Quantity"}]}}},Reference:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},reference:{type:[{code:"string"}]},type:{type:[{code:"uri"}]},identifier:{type:[{code:"Identifier"}]},display:{type:[{code:"string"}]}}},RelatedArtifact:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},label:{type:[{code:"string"}]},display:{type:[{code:"string"}]},citation:{type:[{code:"markdown"}]},url:{type:[{code:"url"}]},document:{type:[{code:"Attachment"}]},resource:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/Resource"]}]}}},SampledData:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},origin:{min:1,type:[{code:"Quantity",profile:["http://hl7.org/fhir/StructureDefinition/SimpleQuantity"]}]},period:{min:1,type:[{code:"decimal"}]},factor:{type:[{code:"decimal"}]},lowerLimit:{type:[{code:"decimal"}]},upperLimit:{type:[{code:"decimal"}]},dimensions:{min:1,type:[{code:"positiveInt"}]},data:{type:[{code:"string"}]}}},Signature:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,max:9007199254740991,type:[{code:"Coding"}]},when:{min:1,type:[{code:"instant"}]},who:{min:1,type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},onBehalfOf:{type:[{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Practitioner","http://hl7.org/fhir/StructureDefinition/PractitionerRole","http://hl7.org/fhir/StructureDefinition/RelatedPerson","http://hl7.org/fhir/StructureDefinition/Patient","http://hl7.org/fhir/StructureDefinition/Device","http://hl7.org/fhir/StructureDefinition/Organization"]}]},targetFormat:{type:[{code:"code"}]},sigFormat:{type:[{code:"code"}]},data:{type:[{code:"base64Binary"}]}}},SubstanceAmount:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},"amount[x]":{type:[{code:"Quantity"},{code:"Range"},{code:"string"}]},amountType:{type:[{code:"CodeableConcept"}]},amountText:{type:[{code:"string"}]},referenceRange:{type:[{code:"SubstanceAmountReferenceRange"}]}}},SubstanceAmountReferenceRange:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},lowLimit:{type:[{code:"Quantity"}]},highLimit:{type:[{code:"Quantity"}]}}},Timing:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},modifierExtension:{max:9007199254740991,type:[{code:"Extension"}]},event:{max:9007199254740991,type:[{code:"dateTime"}]},repeat:{type:[{code:"TimingRepeat"}]},code:{type:[{code:"CodeableConcept"}]}}},TimingRepeat:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},"bounds[x]":{type:[{code:"Duration"},{code:"Range"},{code:"Period"}]},count:{type:[{code:"positiveInt"}]},countMax:{type:[{code:"positiveInt"}]},duration:{type:[{code:"decimal"}]},durationMax:{type:[{code:"decimal"}]},durationUnit:{type:[{code:"code"}]},frequency:{type:[{code:"positiveInt"}]},frequencyMax:{type:[{code:"positiveInt"}]},period:{type:[{code:"decimal"}]},periodMax:{type:[{code:"decimal"}]},periodUnit:{type:[{code:"code"}]},dayOfWeek:{max:9007199254740991,type:[{code:"code"}]},timeOfDay:{max:9007199254740991,type:[{code:"time"}]},when:{max:9007199254740991,type:[{code:"code"}]},offset:{type:[{code:"unsignedInt"}]}}},TriggerDefinition:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{type:[{code:"string"}]},"timing[x]":{type:[{code:"Timing"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/Schedule"]},{code:"date"},{code:"dateTime"}]},data:{max:9007199254740991,type:[{code:"DataRequirement"}]},condition:{type:[{code:"Expression"}]}}},UsageContext:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},code:{min:1,type:[{code:"Coding"}]},"value[x]":{min:1,type:[{code:"CodeableConcept"},{code:"Quantity"},{code:"Range"},{code:"Reference",targetProfile:["http://hl7.org/fhir/StructureDefinition/PlanDefinition","http://hl7.org/fhir/StructureDefinition/ResearchStudy","http://hl7.org/fhir/StructureDefinition/InsurancePlan","http://hl7.org/fhir/StructureDefinition/HealthcareService","http://hl7.org/fhir/StructureDefinition/Group","http://hl7.org/fhir/StructureDefinition/Location","http://hl7.org/fhir/StructureDefinition/Organization"]}]}}},MoneyQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},SimpleQuantity:{elements:{id:{type:[{code:"string"}]},extension:{max:9007199254740991,type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{max:0,type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},IdentityProvider:{elements:{authorizeUrl:{min:1,type:[{code:"string"}]},tokenUrl:{min:1,type:[{code:"string"}]},tokenAuthMethod:{type:[{code:"code"}]},userInfoUrl:{min:1,type:[{code:"string"}]},clientId:{min:1,type:[{code:"string"}]},clientSecret:{min:1,type:[{code:"string"}]},usePkce:{type:[{code:"boolean"}]},useSubject:{type:[{code:"boolean"}]},identitySource:{type:[{code:"code"}]},identityMappingMode:{type:[{code:"code"}]}}}};function ur(r){return new hn(r).parse()}var De=fn(Hi),gn=Object.create(null),Gi=Object.create(null),Aa={"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 Ki(r){let e;return e=Gi[r],e||(e=Gi[r]=Object.create(null)),e}function lr(r){let t=(Array.isArray(r)?r:r.entry?.map(n=>n.resource)??[]).filter(n=>n?.resourceType==="StructureDefinition");Sn(t);for(let n of t)dr(n)}function dr(r){if(!r?.name)throw new Error("Failed loading StructureDefinition from bundle");if(r.resourceType!=="StructureDefinition")return;let e=ur(r),t=Aa[r.url],n,i;t?(n=De,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=De,i=r.type):(n=Ki(r.url),i=r.type),n[i]=e;for(let o of e.innerTypes)o.parentType=e,n[o.name]=o;gn[r.url]=e}function yn(){return De}function xn(r){return!!De[r]}function Ee(r,e){if(e){let t=Ki(e)[r];if(t)return t}return De[r]}function de(r,e){let t=Ee(r,e);if(!t)throw new f(P("Unknown data type: "+r));return t}function lt(r){let e=De[r];return e&&pr(e)}function vn(r){return!!gn[r]}function Tn(r){return gn[r]}var hn=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:Va(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=mn(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[mn(e,n.path)]=t;break}n=n.parent}if(!n){let i=mn(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&&!Ge(this.slicingContext.path,e?.path)&&(this.slicingContext=void 0),e.slicing&&!this.slicingContext&&this.enterSlice(e,t)}enterInnerType(e){for(;this.backboneContext&&!Ge(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;let t=cr(e);this.backboneContext={type:{name:t,type:t,path:e.path,title:e.label,description:e.definition,elements:{},constraints:this.parseElementDefinition(e).constraints,innerTypes:[]},path:e.path,parent:Ge(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,t){ka(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&&!Ge(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!Ge(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!!(Ge(e?.path,t?.path)&&e.type?.some(n=>["BackboneElement","Element"].includes(n.code)))}parseSliceStart(e){if(!this.slicingContext)throw new Error(`Invalid slice start before discriminator: ${e.sliceName} (${e.id})`);this.slicingContext.current={...this.parseElementDefinition(e),name:e.sliceName??"",definition:e.definition,elements:{}},this.slicingContext.field.slices.push(this.slicingContext.current)}parseElementDefinitionType(e){return(e.type??[]).map(t=>{let n;return(t.code==="BackboneElement"||t.code==="Element")&&(n=cr(e)),n||(n=pe(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=zi(e.max),n=e.base?.max?zi(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:Ji(_(i,"fixed[x]")),pattern:Ji(_(i,"pattern[x]")),binding:e.binding}}};function wa(r,e){if(!r)return;let t=[];for(let n of e){t.push("_"+n);let i=De[r.resourceType].elements[n+"[x]"];i&&t.push(...i.type.map(o=>n+L(o.code)))}for(let n of Object.getOwnPropertyNames(r))!e.includes(n)&&!t.includes(n)&&!Oa.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(Qi):[Qi]},r}var Qi={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},Oa=["resourceType","id","meta"];function zi(r){return r==="*"?Number.POSITIVE_INFINITY:Number.parseInt(r,10)}function mn(r,e=""){return Ia(r.path,e)}function Ia(r,e){return r?e&&r.startsWith(e)?r.substring(e.length+1):r:""}function Ge(r,e){return!r||!e?!1:e.startsWith(r+".")||e===r}function Ji(r){return Array.isArray(r)&&r.length>0?r[0]:A(r)?void 0:r}function ka(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 Va(r){let e=r.description;return e?.startsWith(`Base StructureDefinition for ${r.name} Type: `)&&(e=e.substring(`Base StructureDefinition for ${r.name} Type: `.length)),e}function fr(r,e,t){new bn(r,e,t).crawl()}function Da(r,e,t){return new En(r,e,t).crawl()}var bn=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??de(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}crawl(){this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}crawlObject(e,t,n){let i=I(e.value);if(i&&this.visitor.onEnterResource&&this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties)for(let o of Object.keys(e.value))this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&this.visitor.onExitResource(n,e,t)}crawlProperty(e,t,n,i){let o=Me(e,t,{withPath:!0});this.visitor.visitProperty&&this.visitor.visitProperty(e,t,i,o,n);for(let s of o)for(let a of ne(s))this.crawlPropertyValue(a,i,n)}crawlPropertyValue(e,t,n){if(!dt(e.type)){let i=n.innerTypes?.find(o=>o.name===e.type)??de(e.type);this.crawlObject(e,i,t)}}},En=class{constructor(e,t,n){c(this,"root");c(this,"visitor");c(this,"schema");c(this,"initialPath");c(this,"excludeMissingProperties");this.root=e,this.visitor=t,this.schema=n?.schema??de(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}async crawl(){return this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}async crawlObject(e,t,n){let i=I(e.value);if(i&&this.visitor.onEnterResource&&await this.visitor.onEnterResource(n,e,t),this.visitor.onEnterObject&&await this.visitor.onEnterObject(n,e,t),this.excludeMissingProperties&&e.value)for(let o of Object.keys(e.value))await this.crawlProperty(e,o,t,`${n}.${o}`);else for(let o of Object.keys(t.elements))await this.crawlProperty(e,o,t,`${n}.${o}`);this.visitor.onExitObject&&await this.visitor.onExitObject(n,e,t),i&&this.visitor.onExitResource&&await this.visitor.onExitResource(n,e,t)}async crawlProperty(e,t,n,i){let o=Me(e,t,{withPath:!0});if(this.visitor.visitPropertyAsync)for(let s of o)await this.visitor.visitPropertyAsync(e,t,i,s,n);for(let s of o)for(let a of ne(s))await this.crawlPropertyValue(a,i,n)}async crawlPropertyValue(e,t,n){if(!dt(e.type)){let i=n.innerTypes?.find(o=>o.name===e.type)??de(e.type);await this.crawlObject(e,i,t)}}};function Me(r,e,t){if(r===void 0)return[void 0];if(e==="$this")return[r];let n=t?.withPath?mr:_,[i,...o]=e.split("."),s=[n(r,i,t)];for(let a of o){let u=[];for(let l of s)if(Array.isArray(l))for(let p of l)u.push(n(p,a,t));else(t?.withPath&&l?.value!==void 0||!t?.withPath&&l!==void 0)&&u.push(n(l,a,t));s=u}return s}function mr(r,e,t){let n=r.path;return Ma(_(r,e,t),n,e)}function Ma(r,e,t){let n=e?e+".":"";return r===void 0?{type:"undefined",value:void 0,path:`${n}${t}`}:Array.isArray(r)?r.map((i,o)=>({...i,path:`${n}${t}[${o}]`})):{...r,path:`${n}${t}`}}function _a(r){if(r[0]===r[0].toUpperCase()){let e=r.indexOf(".");if(e===-1)return"";r=r.slice(e+1)}return`.${r}`.replaceAll(".","/").replaceAll(/\[(\d+)]/g,(e,t)=>`/${t}`)}var hr={base64Binary:"string",boolean:"boolean",canonical:"string",code:"string",date:"string",dateTime:"string",decimal:"number",id:"string",instant:"string",integer:"number",integer64:"string",markdown:"string",oid:"string",positiveInt:"number",string:"string",time:"string",unsignedInt:"number",uri:"string",url:"string",uuid:"string",xhtml:"string","http://hl7.org/fhirpath/System.String":"string"},La=new K(1e3);function dt(r){return r==="undefined"||r in hr}var pt={canonical:/^\S*$/,code:/^[^\s]+( [^\s]+)*$/,date:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1]))?)?$/,dateTime:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1])(T([01]\d|2[0-3])(:[0-5]\d:([0-5]\d|60)(\.\d{1,9})?)?)?)?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00)?)?)?$/,id:/^[A-Za-z0-9\-.]{1,64}$/,instant:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])T([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00))$/,markdown:/^[\r\n\t\u0020-\uFFFF]+$/,oid:/^urn:oid:[0-2](\.(0|[1-9]\d*))+$/,string:/^[\r\n\t\u0020-\uFFFF]+$/,time:/^([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?$/,uri:/^\S*$/,url:/^\S*$/,uuid:/^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,xhtml:/.*/},Na={"ele-1":!0,"dom-3":!0,"org-1":!0,"sdf-19":!0};function Fa(r,e){if(!lt(r.resourceType))throw new f(T("Invalid resource type"));return Yi(b(r),e)}function Yi(r,e){return new Rn(r,e).validate()}var Rn=class{constructor(e,t){c(this,"issues");c(this,"root");c(this,"resourceStack");c(this,"schema");c(this,"base64BinaryMaxBytes");c(this,"collect");this.issues=[],this.root=e,this.resourceStack=[],I(e.value)&&this.resourceStack.push(e.value),t?.profile?this.schema=ur(t.profile):this.schema=de(e.type),this.base64BinaryMaxBytes=t?.base64BinaryMaxBytes??1*1024*1024,this.collect=t?.collect}currentResource(){return this.resourceStack.at(-1)}validate(){Cn(this.root.value,this.schema.path,this.issues),this.constraintsCheck({...this.root,path:this.schema.path},this.schema),fr(this.root,this,{schema:this.schema,initialPath:this.schema.path});for(let e of this.issues)if(e.severity==="error")throw new f({resourceType:"OperationOutcome",issue:this.issues});return this.issues}onExitObject(e,t,n){this.checkAdditionalProperties(t,n.elements,t.path)}onEnterResource(e,t){this.resourceStack.push(t.value)}onExitResource(){this.resourceStack.pop()}visitProperty(e,t,n,i,o){let s=o.elements[t];if(!s)throw new Error(`Missing element validation schema for ${t}`);for(let a of i){if(!this.checkPresence(a,s,n))return;let u;if(s.isArray){if(!Array.isArray(a)){this.issues.push(E(n,"Expected array of values for property"));return}u=a}else{if(Array.isArray(a)){this.issues.push(E(n,"Expected single value for property"));return}u=[a]}(u.length<s.min||u.length>s.max)&&this.issues.push(E(s.path,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${u.length}`)),Wa(a,s)||this.issues.push(E(n,"Value did not match expected pattern"));let l=s.slicing?Object.fromEntries(s.slicing.slices.map(p=>[p.name,0])):void 0;for(let p of u){this.constraintsCheck(p,s),this.referenceTypeCheck(p,s),this.checkPropertyValue(p),this.collectValue(p,s);let g=qa(p,s.slicing);g&&l&&(l[g]+=1)}this.validateSlices(s.slicing?.slices,l,n)}}checkPresence(e,t,n){return!Array.isArray(e)&&e.value===void 0?(t.min>0&&this.issues.push(E(e.path,"Missing required property")),!1):A(e)?(this.issues.push(E(n,"Invalid empty value")),!1):!0}checkPropertyValue(e){dt(e.type)?this.validatePrimitiveType(e):A(e.value)&&this.issues.push(E(e.path,"Invalid empty non-primitive value"))}validateSlices(e,t,n){if(!(!e||!t))for(let i of e){let o=t[i.name];(o<i.min||o>i.max)&&this.issues.push(E(n,`Incorrect number of values provided for slice '${i.name}': expected ${i.min}..${Number.isFinite(i.max)?i.max:"*"}, but found ${o}`))}}checkAdditionalProperties(e,t,n){let i=e.value;if(!i)return;let o={};for(let s of Object.keys(i)){if(s==="resourceType")continue;let a=Ba(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(be("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(be("warning","structure",`Conflicting choice of type properties: "${s}", "${o[a]}"`,s)),o[a]=s;continue}!(s in t)&&!(s.startsWith("_")&&s.slice(1)in t)&&this.issues.push(E(`${n}.${s}`,`Invalid additional property "${s}"`))}}constraintsCheck(e,t){let n=t.constraints;for(let i of n??y)if(i.severity==="error"&&!(i.key in Na)&&!this.isExpressionTrue(i,e)){this.issues.push(dn(e.path,i));return}}referenceTypeCheck(e,t){if(e.type!=="Reference")return;let n=e.value;if(!G(n)||n.reference.startsWith("#"))return;let i=n.reference.includes("?")?n.reference.split("?")[0]:n.reference.split("/")[0];if(!i)return;let o=t.type.find(g=>g.code==="Reference")?.targetProfile;if(!o)return;let s=ct+"/fhir/StructureDefinition/",a=s+"Resource",u=s+i,l="https://medplum.com/fhir/StructureDefinition/",p=l+i;for(let g of o)if(g===a||g===u||g===p||!g.startsWith(s)&&!g.startsWith(l))return;this.issues.push(be("warning","structure",`Invalid reference: got "${i}", expected "${o.join('", "')}"`,e.path))}collectValue(e,t){t.binding?.valueSet&&t.binding.strength==="required"&&$a(e.type)&&this.appendToken(t.binding.valueSet,e)}appendToken(e,t){if(!this.collect?.tokens)return;let n=this.collect.tokens[e];if(!n){let i=Object.keys(this.collect.tokens);for(let o of i)o.startsWith(e+"|")&&(n=this.collect.tokens[o])}for(let i of n??y)if(i.path===t.path)return;this.collect.tokens[e]=Y(n,t)}isExpressionTrue(e,t){let n={"%context":t,"%ucum":b(en)},i=this.currentResource();i&&(n["%resource"]=b(i)),I(this.root.value)&&(n["%rootResource"]=this.root);try{let o=w(e.expression,[t],n,La);return o.length===1&&o[0].value===!0}catch(o){return this.issues.push(pn(t.path,"Error evaluating invariant expression",o,{fhirpath:e.expression})),!1}}validatePrimitiveType(e){let[t,n]=ja(e),i=e.path;if(t){let{type:o,value:s}=t;if(!(o in hr)){this.issues.push(E(i,`Invalid JSON type: ${o} is not a valid FHIR type`));return}let a=hr[o];if(typeof s!==a){s!==null&&this.issues.push(E(i,`Invalid JSON type: expected ${a}, but got ${typeof s}`));return}o==="base64Binary"?this.validateBase64Binary(s,i):a==="string"?this.validateString(s,o,i):a==="number"&&this.validateNumber(s,o,i)}n&&fr(n,this,{schema:de("Element"),initialPath:i})}validateBase64Binary(e,t){if(!Ha(e)){this.issues.push(E(t,"Invalid base64Binary format"));return}let n=0;e.endsWith("==")?n=2:e.endsWith("=")&&(n=1),Math.max(0,Math.floor(e.length*3/4)-n)>this.base64BinaryMaxBytes&&this.issues.push(E(t,`base64Binary exceeds ${this.base64BinaryMaxBytes} bytes`))}validateString(e,t,n){if(!e.trim()){this.issues.push(E(n,"String must contain non-whitespace content"));return}if(e.length>1024*1024){this.issues.push(E(n,"String cannot be larger than 1 MB"));return}let i=pt[t];i&&!i.exec(e)&&this.issues.push(E(n,"Invalid "+t+" format"))}validateNumber(e,t,n){Number.isNaN(e)||!Number.isFinite(e)?this.issues.push(E(n,"Invalid numeric value")):Ua(t)&&!Number.isInteger(e)?this.issues.push(E(n,"Expected number to be an integer")):t===d.positiveInt&&e<=0?this.issues.push(E(n,"Expected number to be positive")):t===d.unsignedInt&&e<0&&this.issues.push(E(n,"Expected number to be non-negative"))}};function Ua(r){return r===d.integer||r===d.positiveInt||r===d.unsignedInt}function Ba(r,e,t){let n="";e.startsWith("_")&&(e=e.slice(1),n="_");let i=e.split(/(?=[A-Z])/g),o="";for(let s of i){o+=s;let a=o+"[x]";if(t[a])return _(r,o)?n+a:void 0}}function Cn(r,e,t){for(let[n,i]of Object.entries(r)){let o=`${e}.${n}`,s=n.startsWith("_")?n.slice(1):`_${n}`;if(i===null)t.push(E(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?t.push(E(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!r[s]?.[a]?t.push(E(`${o}[${a}]`,"Invalid null value")):i[a]&&Cn(i[a],`${o}[${a}]`,t);else typeof i=="object"&&Cn(i,o,t)}}function Wa(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&&!Qe(t,e.pattern)||e.fixed&&!fe(t,e.fixed))}function gr(r,e,t,n){if(Array.isArray(r))return!1;let i;e.path==="$this"?i=t:i=(n??t.elements)[e.path];let o=t.type;switch(e.type){case"value":case"pattern":if(!r||!i)return!1;if(i.pattern)return Qe(r,i.pattern);if(i.fixed)return fe(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 qa(r,e){for(let t of e?.slices??y)if(e?.discriminator?.every(n=>ne(Me(r,n.path))?.some(i=>gr(i,n,t))))return t.name}function ja(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 $a(r){switch(r){case"CodeableConcept":case"Coding":case"code":case"Quantity":case"string":case"uri":return!0;default:return!1}}function Ha(r){if(r.length===0)return!1;let e=0;r.endsWith("==")?e=2:r.endsWith("=")&&(e=1);let t=r.length-e;if(t<0||(e+t)%4!==0)return!1;let n=e>0?r.slice(0,-e):r;return/^[A-Za-z\d+/]+$/.test(n)}function h(r){return[{type:d.boolean,value:r}]}function b(r){return r==null?{type:"undefined",value:void 0}:Number.isSafeInteger(r)?{type:d.integer,value:r}:typeof r=="number"?{type:d.decimal,value:r}:typeof r=="boolean"?{type:d.boolean,value:r}:typeof r=="string"?{type:d.string,value:r}:V(r)?{type:d.Quantity,value:r}:I(r)?{type:r.resourceType,value:r}:Tr(r)?{type:d.CodeableConcept,value:r}:vr(r)?{type:d.Coding,value:r}:{type:d.BackboneElement,value:r}}function q(r){return r.length===0?!1:!!r[0].value}function D(r,e){if(r.length!==0){if(r.length===1&&(!e||r[0].type===e))return r[0];throw new Error(`Expected singleton of type ${e}, but found ${JSON.stringify(r)}`)}}function _(r,e,t){if(!r.value)return;let n=gt(r.type,e,t?.profileUrl);return n?to(r,e,n):ro(r,e)}function to(r,e,t){let n=r.value,i=t.type;if(!i||i.length===0)return;let o,s="undefined",a,u=t.path.lastIndexOf("."),l=t.path.substring(u+1),p=l,g=!1;l.endsWith("[x]")&&(p=l.substring(0,l.length-3),g=!0);for(let v of i){let M=p;if(g&&(M+=L(v.code)),o=n[M],a=n["_"+M],o!==void 0||a!==void 0){s=v.code;break}}if(a)if(Array.isArray(o)){o=o.slice();for(let v=0;v<Math.max(o.length,a.length);v++)o[v]=Pn(o[v],a[v])}else if(!o&&Array.isArray(a)){o=a.slice();for(let v=0;v<a.length;v++)o[v]=Pn(void 0,a[v])}else o=Pn(o,a);if(!A(o))return(s==="Element"||s==="BackboneElement")&&(s=t.type[0].code),Array.isArray(o)?o.map(v=>Xi(v,s)):Xi(o,s)}function Xi(r,e){return e==="Resource"&&I(r)&&(e=r.resourceType),{type:e,value:r}}function ro(r,e){let t=r.value;if(!t||typeof t!="object")return;let n;if(e in t){let i=t[e];Array.isArray(i)?n=i.map(b):n=b(i)}else{let i=e.endsWith("[x]")?e.substring(0,e.length-3):e;for(let o of Object.values(d)){let s=i+L(o);if(s in t){let a=t[s];Array.isArray(a)?n=a.map(u=>({type:o,value:u})):n={type:o,value:a};break}}}if(Array.isArray(n)){if(n.length===0||A(n[0]))return}else if(A(n))return;return n}function ft(r){let e=[];for(let t of r){let n=!1;for(let i of e)if(q(ze(t,i))){n=!0;break}n||e.push(t)}return e}function An(r){return h(!q(r))}function wn(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?h(!1):h(r.every((t,n)=>q(ze(t,e[n]))))}function On(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?h(!0):h(r.some((t,n)=>!q(ze(t,e[n]))))}function ze(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?h(Math.abs(t-n)<1e-8):V(t)&&V(n)?h(Vn(t,n)):h(typeof t=="object"&&typeof n=="object"?Dn(r,e):t===n)}function xr(r,e){return r.length===0&&e.length===0?h(!0):r.length!==e.length?h(!1):(r.sort(Zi),e.sort(Zi),h(r.every((t,n)=>q(no(t,e[n])))))}function no(r,e){let{type:t,value:n}=r,{type:i,value:o}=e,s=n?.valueOf(),a=o?.valueOf();return typeof s=="number"&&typeof a=="number"?h(Math.abs(s-a)<.01):V(s)&&V(a)?h(Vn(s,a)):h(t==="Coding"&&i==="Coding"?typeof s!="object"||typeof a!="object"?!1:s.code===a.code&&s.system===a.system:typeof s=="object"&&typeof a=="object"?Dn({...s,id:void 0},{...a,id:void 0}):typeof s=="string"&&typeof a=="string"?s.toLowerCase()===a.toLowerCase():s===a)}function Zi(r,e){let t=r.value?.valueOf(),n=e.value?.valueOf();return typeof t=="number"&&typeof n=="number"?t-n:typeof t=="string"&&typeof n=="string"?t.localeCompare(n):0}function mt(r,e){let{value:t}=r;if(t==null)return!1;let n=e;switch(n.startsWith("System.")&&(n=n.substring(7)),n.startsWith("FHIR.")&&(n=n.substring(5)),n){case"Boolean":return typeof t=="boolean";case"Decimal":case"Integer":return typeof t=="number";case"Date":return In(t);case"DateTime":return _e(t);case"Time":return typeof t=="string"&&!!/^T\d/.exec(t);case"Period":return kn(t);case"Quantity":return V(t);default:return r.type===n||typeof t=="object"&&t?.resourceType===n}}function In(r){return typeof r=="string"&&!!pt.date.exec(r)}function _e(r){return typeof r=="string"&&!!pt.dateTime.exec(r)}function kn(r){return!!(r&&typeof r=="object"&&("start"in r&&_e(r.start)||"end"in r&&_e(r.end)))}function ht(r){if(In(r)||_e(r))return{start:yr(r,"0000-01-01T00:00:00.000"),end:yr(r,"xxxx-12-31T23:59:59.999")};if(kn(r))return{start:r.start?yr(r.start,"0000-01-01T00:00:00.000"):void 0,end:r.end?yr(r.end,"xxxx-12-31T23:59:59.999"):void 0}}function yr(r,e){let t="Z",n=Math.max(r.indexOf("+",10),r.indexOf("-",10));n>-1?(t=r.substring(n),r=r.substring(0,n)):r.endsWith("Z")&&(r=r.substring(0,r.length-1));let i=r+e.substring(r.length)+t;return new Date(i).toISOString()}function V(r){return!!(r&&typeof r=="object"&&"value"in r&&typeof r.value=="number")}function Vn(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 Dn(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(eo(o)&&eo(s)){if(!Dn(o,s))return!1}else if(o!==s)return!1}return!0}function eo(r){return r!==null&&typeof r=="object"}function Pn(r,e){if(e){if(typeof e!="object")throw new Error("Primitive extension must be an object");return Ga(r??{},e)}return r}function Ga(r,e){return delete e.__proto__,delete e.constructor,Object.assign(r,e)}function Ke(r,e){return I(r,e)&&"id"in r&&typeof r.id=="string"}function Re(r){let e=O(r)??"undefined/undefined",t=so(r);return t===e?{reference:e}:{reference:e,display:t}}function O(r){if(G(r))return r.reference;if(Ke(r))return`${r.resourceType}/${r.id}`}function Ce(r){if(r)return G(r)?r.reference.split("/")[1]:r.id}function Qa(r){if(r?.reference===void 0)throw new f(T("Reference missing reference property."));let[e,t]=r.reference.split("/");if(e===""||t===""||t===void 0)throw new f(T("Unable to parse reference string."));return[e,t]}function br(r){if(r)if(r.accounts&&r.account){let e=r.accounts;return e.some(t=>t.reference===r.account?.reference)?e:[r.account,...e]}else return ne(r.accounts??r.account)}function oo(r){return r.resourceType==="Patient"||r.resourceType==="Practitioner"||r.resourceType==="RelatedPerson"}function so(r){if(oo(r)){let e=za(r);if(e)return e}if(r.resourceType==="Device"){let e=Ja(r);if(e)return e}if(r.resourceType==="MedicationRequest"&&r.medicationCodeableConcept)return Je(r.medicationCodeableConcept);if(r.resourceType==="Subscription"&&r.criteria)return r.criteria;if(r.resourceType==="User"&&r.email)return r.email;if("name"in r&&r.name&&typeof r.name=="string")return r.name;if("code"in r&&r.code){let e=r.code;if(Array.isArray(e)&&(e=e[0]),Tr(e))return Je(e);if(lo(e))return e.text}return O(r)??""}function za(r){let e=r.name;if(e&&e.length>0)return Ye(e[0])}function Ja(r){let e=r.deviceName;if(e&&e.length>0)return e[0].name}function Ka(r){if(!("photo"in r))return;let e=r.photo;if(e)if(Array.isArray(e))for(let t of e){let n=io(t);if(n)return n}else return io(e)}function io(r){if(r.url&&r.contentType?.startsWith("image/"))return r.url}function Ya(r){return r?new Date(r):void 0}function yt(r,e){let t=new Date(r);t.setUTCHours(0,0,0,0);let n=e?new Date(e):new Date;n.setUTCHours(0,0,0,0);let i=t.getUTCFullYear(),o=t.getUTCMonth(),s=t.getUTCDate(),a=n.getUTCFullYear(),u=n.getUTCMonth(),l=n.getUTCDate(),p=a-i;(u<o||u===o&&l<s)&&p--;let g=a*12+u-(i*12+o);l<s&&g--;let v=Math.floor((n.getTime()-t.getTime())/(1e3*60*60*24));return{years:p,months:g,days:v}}function Xa(r,e){let{years:t,months:n,days:i}=yt(r,e);return t>=2?t.toString().padStart(3,"0")+"Y":n>=1?n.toString().padStart(3,"0")+"M":i.toString().padStart(3,"0")+"D"}function Za(r){let e={};return ao(r.item,e),e}function ao(r,e){for(let t of r??y)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer[0]),ao(t.item,e)}function ec(r){let e={};return co(r.item,e),e}function co(r,e){for(let t of r??y)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]?e[t.linkId]=[...e[t.linkId],...t.answer]:e[t.linkId]=t.answer),co(t.item,e)}function Er(r,e){let t=r.identifier;if(!t)return;let n=Array.isArray(t)?t:[t];for(let i of n)if(i.system===e)return i.value}function tc(r,e,t,n){let i={system:e,value:t};n?.use&&(i.use=n.use);let o=r.identifier;if(!o){r.identifier=[i];return}for(let s of o)if(s.system===e){Object.assign(s,i);return}o.push(i)}function Rr(r,...e){let t=pe(r,...e);if(!t)return;let n=_({type:"Extension",value:t},"value[x]");if(n)return Array.isArray(n)?n[0].value:n.value}function pe(r,...e){let t=r;for(let n=0;n<e.length&&t;n++)t=t?.extension?.find(i=>i.url===e[n]);return t}function xt(r,e){let t=Mn(r);return JSON.stringify(t,null,e?2:void 0)??""}function Mn(r){if(!(r==null||r===""))return typeof r=="object"?Array.isArray(r)?rc(r):nc(r):r}function rc(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=Mn(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 nc(r){let e,t=0;for(let n in r){let i=r[n],o=Mn(i);o!==i&&!e&&(e={...r}),o===void 0?e&&delete e[n]:(e&&(e[n]=o),t++)}if(t!==0)return e??r}function A(r){if(r==null)return!0;let e=typeof r;return e==="string"||e==="object"?!oe(r):!1}function oe(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 ic(r){if(!r)return;let e=r.length-1;for(;e>=0&&A(r[e]);)e--;return e>=0?r.slice(0,e+1):void 0}function fe(r,e,t){return r===e||A(r)&&A(e)?!0:A(r)||A(e)?!1:Array.isArray(r)&&Array.isArray(e)?oc(r,e):Array.isArray(r)||Array.isArray(e)?!1:C(r)&&C(e)?sc(r,e,t):(C(r)||C(e),!1)}function oc(r,e){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(!fe(r[t],e[t]))return!1;return!0}function sc(r,e,t){let n=new Set;for(let i of Object.keys(r))n.add(i);for(let i of Object.keys(e))n.add(i);t==="meta"&&(n.delete("versionId"),n.delete("lastUpdated"),n.delete("author"));for(let i of n){let o=r[i],s=e[i];if(!fe(o,s,i))return!1}return!0}function Qe(r,e){return A(r)?!0:A(e)?!1:Array.isArray(r)&&Array.isArray(e)?ac(r,e):Array.isArray(r)||Array.isArray(e)?!1:C(r)&&C(e)?cc(r,e):C(r)||C(e)?!1:r===e}function ac(r,e){return e.every(t=>r.some(n=>Qe(n,t)))}function cc(r,e){return Object.entries(e).every(([t,n])=>t in r&&Qe(r[t],n))}function Pe(r){return r===void 0?r:JSON.parse(JSON.stringify(r))}function uc(r){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(r)}function C(r){return r!==null&&typeof r=="object"}function lc(r){return r.every(Le)}function Le(r){return typeof r=="string"}function vr(r){return C(r)&&"code"in r&&typeof r.code=="string"}function Tr(r){return C(r)&&"coding"in r&&Array.isArray(r.coding)&&r.coding.every(vr)}function dc(r,e){for(let t of r??y)for(let n of t.coding??y)if(n.system===e)return n.code}function uo(r,e){let[t,n]=Ne(e,"|",2);return n===void 0?r.code===e:t===""?r.system===void 0&&r.code===n:n===""?r.system===t:r.system===t&&r.code===n}function pc(r,e){return(r.coding??y).some(t=>uo(t,e))}function lo(r){return C(r)&&"text"in r&&typeof r.text=="string"}var po=[];for(let r=0;r<256;r++)po.push(r.toString(16).padStart(2,"0"));function _n(r){let e=Nn(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=po[t[i]];return n.join("")}function Ln(r){let e=Nn(r),t=new Uint8Array(e),n=new Array(t.length);for(let i=0;i<t.length;i++)n[i]=String.fromCodePoint(t[i]);return window.btoa(n.join(""))}function Nn(r){return ArrayBuffer.isView(r)?r.buffer:r}function L(r){return r?r.charAt(0).toUpperCase()+r.substring(1):""}function fc(r){return r===r.toLowerCase()&&r!==r.toUpperCase()}function Cr(r){return r.length>0&&r.startsWith(r[0].toUpperCase())}function me(r,e){let t=r+".";if(e.startsWith(t))return e.slice(t.length)}function Sr(r,e){return r.coding?.find(t=>t.system===e)?.code}function mc(r,e,t){r.coding??=[];let n=r.coding.find(i=>i.system===e);n?n.code=t:r.coding.push({system:e,code:t})}function hc(r,e,t,n){return r.qualifiedInterval?.find(i=>mo(i,e)&&vc(i,t,r.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function gc(r,e,t){return fo(r,e,t)[0]}function fo(r,e,t){return r.qualifiedInterval?.filter(n=>mo(n,e)&&(!t||t.includes(n.condition)))??[]}function mo(r,e){return yc(r,e)&&xc(r,e)}function yc(r,e){return!r.gender||r.gender===e.gender}function xc(r,e){return!r.age||Fn(yt(e.birthDate).years,r.age)}function vc(r,e,t){return!!r.range&&Fn(e,r.range,t)}function Fn(r,e,t){return(e.low?.value===void 0||go(r,e.low.value,t))&&(e.high?.value===void 0||ho(r,e.high.value,t))}function Tc(r,e){return Number.parseFloat(r.toFixed(e))}function Sc(r,e,t){return ie(r,t)===ie(e,t)}function bc(r,e,t){return ie(r,t)<ie(e,t)}function Ec(r,e,t){return ie(r,t)>ie(e,t)}function ho(r,e,t){return ie(r,t)<=ie(e,t)}function go(r,e,t){return ie(r,t)>=ie(e,t)}function ie(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}function Rc(r,e,t){return r.find(n=>typeof e=="string"?Sr(n.code||{},t)===e:Sr(n.code||{},t)===Sr(e,t))}function Cc(r){return Array.isArray(r)?r[0]:r}var Pr=(r,e)=>new Promise((t,n)=>{e?.signal?.throwIfAborted();let i=setTimeout(t,r);e?.signal?.addEventListener("abort",()=>{clearTimeout(i),n(e.signal?.reason)},{once:!0})});function Ne(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 Un(r){let e,t=!1;return function(){return t||(e=r(),t=!0),e}}function Y(r,e){return r?(r.push(e),r):[e]}function vt(r){return r.sort((e,t)=>e.localeCompare(t))}function Ar(r){return r.endsWith("/")?r:r+"/"}function yo(r){return r.startsWith("/")?r.slice(1):r}function U(r,e){return new URL(yo(e),Ar(r.toString())).toString()}function Bn(r,e){return U(r,e).toString().replace("http://","ws://").replace("https://","wss://")}function Wn(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 xo=/^(([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 Pc(r){return xo.test(r)}function Ac(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 wc(r,e){return new Map(r.entry?.filter(n=>!!n.resource).map(n=>[Er(n.resource,e),n.resource]).filter(([n])=>n!==void 0))}function Oc(r,e){if(r?.meta?.profile?.includes(e)){let t=r.meta.profile.indexOf(e);r.meta.profile.splice(t,1)}return r}function Ic(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 kc(r){return r.replaceAll("&","&amp;").replaceAll("<","&lt;").replaceAll(">","&gt;").replaceAll('"',"&quot;").replaceAll("\u201C","&ldquo;").replaceAll("\u201D","&rdquo;").replaceAll("\u2018","&lsquo;").replaceAll("\u2019","&rsquo;").replaceAll("\u2026","&hellip;")}function Vc(r){return r!=null}var y=Object.freeze([]),Dc=()=>{};function qn(r){if(!r)return"";switch(r.type){case"Address":return To(r.value);case"CodeableConcept":return Je(r.value);case"Coding":return jn(r.value);case"ContactPoint":return r.value.value;case"HumanName":return Ye(r.value);case"Quantity":return he(r.value);case"Reference":return vo(r.value);default:return r.value?.toString()??""}}function vo(r){return r?r.display??r.reference??xt(r):""}function To(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 Ye(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=Fe(r.text);if(n)return n}return t.join(" ").trim()}function Mc(r){let e=[];return r.given&&e.push(...r.given),e.join(" ").trim()}function _c(r){return Fe(r.family)??""}function Tt(r){return r instanceof Date&&!Number.isNaN(r.getTime())}function Lc(r,e,t){if(!r)return"";let n=new Date(r);return Tt(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...t})):""}function Nc(r,e,t){if(!r)return"";let n=new Date("2000-01-01T"+r+"Z");return Tt(n)?n.toLocaleTimeString(e,t):""}function So(r,e,t){if(!r)return"";let[n=0,i=0,o=0]=r.split(":").map(Number),s=new Date(Date.UTC(1970,0,1,n,i,o));return Tt(s)?new Intl.DateTimeFormat(e,{hour:"numeric",minute:"2-digit",second:o===0?void 0:"numeric",...t,timeZone:"UTC"}).format(s):""}function wr(r,e,t){if(!r)return"";let n=new Date(r);return Tt(n)?n.toLocaleString(e,t):""}function Fc(r,e,t){return!r||!r.start&&!r.end?"":wr(r.start,e,t)+" - "+wr(r.end,e,t)}var Uc={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},Bc={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},Wc={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function qc(r){if(!r)return"";let e=[];return jc(e,r.repeat),r.event&&e.push(r.event.map(t=>wr(t)).join(", ")),L(e.join(" ").trim())}function jc(r,e){if(!e?.periodUnit)return;let t=e.frequency??1,n=e.period??1,i=e.periodUnit;t===1&&n===1?r.push(Uc[i]):(t===1?r.push("once"):r.push(t+" times"),n===1?r.push("per "+Bc[i]):r.push("per "+n+" "+Wc[i])),e.dayOfWeek&&r.push("on "+e.dayOfWeek.map(L).join(", ")),e.timeOfDay&&r.push("at "+e.timeOfDay.map(o=>So(o)).join(", "))}function $c(r,e,t=!1){if(t&&e===void 0)throw new Error("Precision must be specified for exclusive ranges");let n=r?.low&&{...r.low,comparator:void 0},i=r?.high&&{...r.high,comparator:void 0};return n?.value===void 0&&i?.value===void 0?"":n?.value!==void 0&&i?.value===void 0?t&&e!==void 0?(n.value=Qc(n.value,e),`> ${he(n,e)}`):`>= ${he(n,e)}`:n?.value===void 0&&i?.value!==void 0?t&&e!==void 0?(i.value=Gc(i.value,e),`< ${he(i,e)}`):`<= ${he(i,e)}`:(n?.unit===i?.unit&&delete n?.unit,`${he(n,e)} - ${he(i,e)}`)}function he(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 Je(r){if(!r)return"";let e=Fe(r.text);return e||(r.coding?r.coding.map(t=>jn(t)).join(", "):"")}function jn(r,e){let t=Fe(r?.display);if(t){let n=e?Fe(r?.code):void 0;return`${t}${n?" ("+n+")":""}`}return Fe(r?.code)??""}function bo(r){if(!r)return"";let e=[];if(r.valueQuantity)e.push(he(r.valueQuantity));else if(r.valueCodeableConcept)e.push(Je(r.valueCodeableConcept));else{let t=Fe(r.valueString);t&&e.push(t)}return"component"in r&&e.push(r.component.map(t=>bo(t)).join(" / ")),e.join(" / ").trim()}function Fe(r){return typeof r=="string"?r:void 0}function Gc(r,e,t=1){return(Eo(r,e)+t)*Math.pow(10,-e)}function Qc(r,e,t=1){return(Eo(r,e)-t)*Math.pow(10,-e)}function Eo(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 zc(r){for(let e of r.entry??y){let t=e.resource;t.resourceType==="SearchParameter"&&Or(t)}}function Sn(r){let e=Array.isArray(r)?r:r.entry?.map(t=>t.resource)??[];for(let t of e)t?.resourceType==="StructureDefinition"&&t.kind==="resource"&&Co(t.type)}function Co(r){let e=j.types[r];return e||(e={searchParamsDetails:{}},j.types[r]=e),!e.searchParams&&r!=="Binary"&&(e.searchParams={_id:{base:[r],code:"_id",type:"token",expression:r+".id"},_lastUpdated:{base:[r],code:"_lastUpdated",type:"date",expression:r+".meta.lastUpdated"},_compartment:{base:[r],code:"_compartment",type:"reference",expression:r+".meta.compartment"},_profile:{base:[r],code:"_profile",type:"uri",expression:r+".meta.profile"},_security:{base:[r],code:"_security",type:"token",expression:r+".meta.security"},_source:{base:[r],code:"_source",type:"uri",expression:r+".meta.source"},_tag:{base:[r],code:"_tag",type:"token",expression:r+".meta.tag"},_project:{base:[r],code:"_project",type:"token",expression:r+".meta.project"}}),e}function Or(r){for(let e of r.base??y){let t=Co(e);t.searchParams||(t.searchParams={}),t.searchParams[r.code]=r}}function cr(r){let e=r.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?Po((r.base?.path??r.path)?.split(".")):e}function Po(r){return r.length===1?r[0]:r.map(L).join("")}function pr(r){return r.kind==="resource"&&r.name!=="Resource"&&r.name!=="DomainResource"}function Jc(){return Object.values(yn()).filter(pr).map(r=>r.name)}function Kc(r){return j.types[r]?.searchParams}function Yc(r,e){return j.types[r]?.searchParams?.[e]}function Xc(r){let e=r.replaceAll("[x]","").split(".").pop();return Ao(e)}function Ao(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(eu).join(" ").replace("_"," ").replaceAll(/\s+/g," ")}var Zc=new Set(["CDS","ID","IP","PKCE","JWKS","URI","URL","OMB","UDI"]);function eu(r){let e=r.toUpperCase();return r===e?r:Zc.has(e)?e:e.charAt(0)+r.slice(1)}function gt(r,e,t){let n=Ee(r,t);if(n)return $n(n.elements,e)}function $n(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 tu(r,e,t){let n=e.split(/[.[\]]/g),i=Ee(r,t);if(!i)return;let o=i,s;for(let a of n){let u;if(a.match(/^[a-z]/)){let l=$n(o.elements,a);if(!l)return;if(l.type.length>1)throw new Error("Multiple matching types in path "+e);u=Ee(l.type[0].code),s=l}u&&(o=u)}return s}function ru(r){return!!(r&&typeof r=="object"&&"type"in r&&"value"in r)}function I(r,e){return!(!r||typeof r!="object"||!("resourceType"in r)||e&&r.resourceType!==e)}function G(r,e){return r&&typeof r=="object"&&"reference"in r&&typeof r.reference=="string"?e?r.reference.match(new RegExp(`^${e}(/|\\?)`))!==null:!0:!1}var j={types:{}};function Hn(r){switch(r.type){case d.uuid:case d.uri:case d.url:case d.string:case d.oid:case d.markdown:case d.id:case d.code:case d.canonical:case d.base64Binary:case d.SystemString:case d.date:case d.dateTime:case d.instant:return r.value;case d.Identifier:return`${r.value.system??""}|${r.value.value}`;case d.Coding:return Ro(r.value);case d.CodeableConcept:return r.value.coding?.map(Ro).join(",")??r.value.text;case d.HumanName:return r.value.text?r.value.text:Ye(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 Ke(r.value)?O(r.value):JSON.stringify(r)}}function Ro(r){return r?`${r.system??""}|${r.code}`:""}function Xe(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 ge=()=>[],N={empty:(r,e)=>h(e.every(t=>A(t.value))),hasValue:(r,e)=>h(e.length!==0),exists:(r,e,t)=>t?h(e.some(n=>q(t.eval(r,[n])))):h(e.length>0&&e.every(n=>!A(n.value))),all:(r,e,t)=>h(e.every(n=>q(t.eval(r,[n])))),allTrue:(r,e)=>{for(let t of e)if(!t.value)return h(!1);return h(!0)},anyTrue:(r,e)=>{for(let t of e)if(t.value)return h(!0);return h(!1)},allFalse:(r,e)=>{for(let t of e)if(t.value)return h(!1);return h(!0)},anyFalse:(r,e)=>{for(let t of e)if(!t.value)return h(!0);return h(!1)},subsetOf:(r,e,t)=>{if(e.length===0)return h(!0);let n=t.eval(r,Ue(r));return n.length===0?h(!1):h(e.every(i=>n.some(o=>o.value===i.value)))},supersetOf:(r,e,t)=>{let n=t.eval(r,Ue(r));return n.length===0?h(!0):e.length===0?h(!1):h(n.every(i=>e.some(o=>o.value===i.value)))},count:(r,e)=>[{type:d.integer,value:e.length}],distinct:(r,e)=>{let t=[];for(let n of e)t.some(i=>i.value===n.value)||t.push(n);return t},isDistinct:(r,e)=>h(e.length===N.distinct(r,e).length),where:(r,e,t)=>e.filter(n=>q(t.eval(r,[n]))),select:(r,e,t)=>e.flatMap(n=>t.eval({parent:r,variables:{$this:n}},[n])),repeat:ge,ofType:(r,e,t)=>e.filter(n=>n.type===t.name),single:(r,e)=>{if(e.length>1)throw new Error("Expected input length one for single()");return e.length===0?[]:e.slice(0,1)},first:(r,e)=>e.length===0?[]:e.slice(0,1),last:(r,e)=>e.length===0?[]:e.slice(-1,e.length),tail:(r,e)=>e.length===0?[]:e.slice(1,e.length),skip:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new TypeError("Expected a number for skip(num)");return n>=e.length?[]:n<=0?e:e.slice(n,e.length)},take:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new TypeError("Expected a number for take(num)");return n<=0?[]:e.slice(0,n)},intersect:(r,e,t)=>{if(!t)return e;let n=t.eval(r,Ue(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,Ue(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,Ue(r));return ft([...e,...n])},combine:(r,e,t)=>{if(!t)return e;let n=t.eval(r,Ue(r));return[...e,...n]},htmlChecks:(r,e,t)=>[b(!0)],iif:(r,e,t,n,i)=>{let o=t.eval(r,e);if(o.length>1||o.length===1&&typeof o[0].value!="boolean")throw new Error("Expected criterion to evaluate to a Boolean");return q(o)?n.eval(r,e):i?i.eval(r,e):[]},toBoolean:(r,e)=>{if(e.length===0)return[];let[{value:t}]=ae(e,1);if(typeof t=="boolean")return[{type:d.boolean,value:t}];if(typeof t=="number"&&(t===0||t===1))return h(!!t);if(typeof t=="string"){let n=t.toLowerCase();if(["true","t","yes","y","1","1.0"].includes(n))return h(!0);if(["false","f","no","n","0","0.0"].includes(n))return h(!1)}return[]},convertsToBoolean:(r,e)=>e.length===0?[]:h(N.toBoolean(r,e).length===1),toInteger:(r,e)=>{if(e.length===0)return[];let[{value:t}]=ae(e,1);return typeof t=="number"?[{type:d.integer,value:t}]:typeof t=="string"&&/^[+-]?\d+$/.exec(t)?[{type:d.integer,value:Number.parseInt(t,10)}]:typeof t=="boolean"?[{type:d.integer,value:t?1:0}]:[]},convertsToInteger:(r,e)=>e.length===0?[]:h(N.toInteger(r,e).length===1),toDate:(r,e)=>{if(e.length===0)return[];let[{value:t}]=ae(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:d.date,value:Xe(t)}]:[]},convertsToDate:(r,e)=>e.length===0?[]:h(N.toDate(r,e).length===1),toDateTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=ae(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:d.dateTime,value:Xe(t)}]:[]},convertsToDateTime:(r,e)=>e.length===0?[]:h(N.toDateTime(r,e).length===1),toDecimal:(r,e)=>{if(e.length===0)return[];let[{value:t}]=ae(e,1);return typeof t=="number"?[{type:d.decimal,value:t}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(t)?[{type:d.decimal,value:Number.parseFloat(t)}]:typeof t=="boolean"?[{type:d.decimal,value:t?1:0}]:[]},convertsToDecimal:(r,e)=>e.length===0?[]:h(N.toDecimal(r,e).length===1),toQuantity:(r,e)=>{if(e.length===0)return[];let[{value:t}]=ae(e,1);return V(t)?[{type:d.Quantity,value:t}]:typeof t=="number"?[{type:d.Quantity,value:{value:t,unit:"1"}}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(t)?[{type:d.Quantity,value:{value:Number.parseFloat(t),unit:"1"}}]:typeof t=="boolean"?[{type:d.Quantity,value:{value:t?1:0,unit:"1"}}]:[]},convertsToQuantity:(r,e)=>e.length===0?[]:h(N.toQuantity(r,e).length===1),toString:(r,e)=>{if(e.length===0)return[];let[{value:t}]=ae(e,1);return t==null?[]:V(t)?[{type:d.string,value:`${t.value} '${t.unit}'`}]:[{type:d.string,value:t.toString()}]},convertsToString:(r,e)=>e.length===0?[]:h(N.toString(r,e).length===1),toTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=ae(e,1);if(typeof t=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(t);if(n)return[{type:d.time,value:Xe("T"+n[1])}]}return[]},convertsToTime:(r,e)=>e.length===0?[]:h(N.toTime(r,e).length===1),indexOf:(r,e,t)=>Q((n,i)=>n.indexOf(i),r,e,t),substring:(r,e,t,n)=>Q((i,o,s)=>{let a=o,u=s?a+s:i.length;return a<0||a>=i.length?void 0:i.substring(a,u)},r,e,t,n),startsWith:(r,e,t)=>Q((n,i)=>n.startsWith(i),r,e,t),endsWith:(r,e,t)=>Q((n,i)=>n.endsWith(i),r,e,t),contains:(r,e,t)=>Q((n,i)=>n.includes(i),r,e,t),upper:(r,e)=>Q(t=>t.toUpperCase(),r,e),lower:(r,e)=>Q(t=>t.toLowerCase(),r,e),replace:(r,e,t,n)=>Q((i,o,s)=>i.replaceAll(o,s),r,e,t,n),matches:(r,e,t)=>Q((n,i)=>!!new RegExp(i).exec(n),r,e,t),replaceMatches:(r,e,t,n)=>Q((i,o,s)=>i.replaceAll(new RegExp(o,"g"),s.replaceAll(/\$\{(\w+)\}/g,"$<$1>")),r,e,t,n),length:(r,e)=>Q(t=>t.length,r,e),toChars:(r,e)=>Q(t=>t?t.split(""):void 0,r,e),encode:ge,decode:ge,escape:ge,unescape:ge,trim:ge,split:ge,join:(r,e,t)=>{let n=t?.eval(r,Ue(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)=>se(Math.abs,r,e),ceiling:(r,e)=>se(Math.ceil,r,e),exp:(r,e)=>se(Math.exp,r,e),floor:(r,e)=>se(Math.floor,r,e),ln:(r,e)=>se(Math.log,r,e),log:(r,e,t)=>se((n,i)=>Math.log(n)/Math.log(i),r,e,t),power:(r,e,t)=>se(Math.pow,r,e,t),round:(r,e,...t)=>se((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)=>se(Math.sqrt,r,e),truncate:(r,e)=>se(t=>Math.trunc(t),r,e),children:ge,descendants:ge,trace:(r,e,t)=>e,now:()=>[{type:d.dateTime,value:new Date().toISOString()}],timeOfDay:()=>[{type:d.time,value:new Date().toISOString().substring(11)}],today:()=>[{type:d.date,value:new Date().toISOString().substring(0,10)}],between:(r,e,t,n,i)=>{let o=N.toDateTime(r,t.eval(r,e));if(o.length===0)throw new Error("Invalid start date");let s=N.toDateTime(r,n.eval(r,e));if(s.length===0)throw new Error("Invalid end date");let a=i.eval(r,e)[0]?.value;if(a!=="years"&&a!=="months"&&a!=="days")throw new Error("Invalid units");let u=yt(o[0].value,s[0].value);return[{type:d.Quantity,value:{value:u[a],unit:a}}]},is:(r,e,t)=>{let n="";return t instanceof B?n=t.name:t instanceof X&&(n=t.left.name+"."+t.right.name),n?e.map(i=>({type:d.boolean,value:mt(i,n)})):[]},not:(r,e)=>N.toBoolean(r,e).map(t=>({type:d.boolean,value:!t.value})),resolve:(r,e)=>e.map(t=>{let n=t.value,i;if(typeof n=="string")i=n;else if(typeof n=="object"){let o=n;if(o.resource)return b(o.resource);o.reference?i=o.reference:o.type&&o.identifier&&(i=`${o.type}?identifier=${o.identifier.system}|${o.identifier.value}`)}if(i?.includes("?")){let[o]=i.split("?");return{type:o,value:{resourceType:o}}}if(i?.includes("/")){let[o,s]=i.split("/");return{type:o,value:{resourceType:o,id:s}}}return{type:d.BackboneElement,value:void 0}}).filter(t=>!!t.value),as:(r,e,t)=>{let n=t.name,i=D(e,n);return i?[i]:[]},type:(r,e)=>e.map(({value:t})=>typeof t=="boolean"?{type:d.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof t=="number"?{type:d.BackboneElement,value:{namespace:"System",name:"Integer"}}:I(t)?{type:d.BackboneElement,value:{namespace:"FHIR",name:t.resourceType}}:{type:d.BackboneElement,value:null}),conformsTo:(r,e,t)=>{let n=t.eval(r,e)[0].value;if(!n.startsWith("http://hl7.org/fhir/StructureDefinition/"))throw new Error("Expected a StructureDefinition URL");let i=n.replace("http://hl7.org/fhir/StructureDefinition/","");return e.map(o=>({type:d.boolean,value:o.value?.resourceType===i}))},getResourceKey:(r,e)=>{let t=e[0].value;return t?.id?[{type:d.id,value:t.id}]:[]},getReferenceKey:(r,e,t)=>{let n=e[0].value;if(!n?.reference)return[];let i="";return t instanceof B&&(i=t.name),i&&!n.reference.startsWith(i+"/")?[]:[{type:d.id,value:Ce(n)}]},extension:(r,e,t)=>{let n=t.eval(r,e)[0].value,i=e?.[0]?.value;if(i){let o=pe(i,n);if(o)return[{type:d.Extension,value:o}]}return[]}};function Q(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=ae(t,1);if(typeof i!="string")throw new TypeError("String function cannot be called with non-string");let o=n.map(a=>a?.eval(e,t)[0]?.value),s=r(i,...o);return s===void 0?[]:Array.isArray(s)?s.map(b):[b(s)]}function se(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=ae(t,1),o=V(i),s=o?i.value:i;if(typeof s!="number")throw new TypeError("Math function cannot be called with non-number");let a=r(s,...n.map(p=>p.eval(e,t)[0]?.value)),u=o?d.Quantity:t[0].type,l=o?{...i,value:a}:a;return[{type:u,value:l}]}function ae(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 Ue(r){let e=r;for(;e.parent?.variables.$this;)e=e.parent;return[e.variables.$this]}var ye=class{constructor(e,t){c(this,"original");c(this,"child");this.original=e,this.child=t}eval(e,t){try{if(t.length>0){let n=[];for(let i of t)n.push(this.child.eval({parent:e,variables:{$this:i}},[i]));return n.flat()}else return this.child.eval(e,[])}catch(n){throw new Error(`FhirPathError on "${this.original}": ${n}`,{cause:n})}}toString(){return this.child.toString()}},$=class{constructor(e){c(this,"value");this.value=e}eval(){return[this.value]}toString(){let e=this.value.value;return typeof e=="string"?`'${e}'`:e.toString()}},B=class{constructor(e){c(this,"name");this.name=e}eval(e,t){if(this.name==="$this")return t;let n=this.getVariable(e);if(n)return[n];if(this.name.startsWith("%"))throw new Error(`Undefined variable ${this.name}`);return t.flatMap(i=>this.evalValue(i)).filter(i=>i?.value!==void 0)}getVariable(e){let t=e.variables[this.name];if(t!==void 0)return t;if(e.parent)return this.getVariable(e.parent)}evalValue(e){let t=e.value;if(!(!t||typeof t!="object"))return I(t,this.name)?("path"in e||(e.path=t.resourceType),e):mr(e,this.name)}toString(){return this.name}},St=class{eval(){return[]}toString(){return"{}"}},bt=class extends st{constructor(t,n,i){super(t,n);c(this,"impl");this.impl=i}eval(t,n){return this.impl(this.child.eval(t,n))}toString(){return this.operator+this.child.toString()}},xe=class extends R{constructor(e,t){super("as",e,t)}eval(e,t){return N.as(e,this.left.eval(e,t),this.right)}},F=class extends R{constructor(t,n,i,o){super(t,n,i);c(this,"impl");this.impl=o}eval(t,n){let i=this.left.eval(t,n),o=this.right.eval(t,n);if(i.length<1||o.length<1)return[];let s=D(i)?.value,a=D(o)?.value,u=V(s)?s.value:s,l=V(a)?a.value:a,p=this.impl(u,l);return typeof p=="boolean"?h(p):V(s)?[{type:d.Quantity,value:{...s,value:p}}]:[b(p)]}},wo=Object.freeze({type:"string",value:""}),Et=class extends R{constructor(e,t){super("&",e,t)}eval(e,t){let n=D(this.left.eval(e,t))??wo,i=D(this.right.eval(e,t))??wo;if(typeof n.value!="string")throw new Error(`Expected string operand for &, but got ${n.type}`);if(typeof i.value!="string")throw new Error(`Expected string operand for &, but got ${i.type}`);return[{type:d.string,value:n.value+i.value}]}},Rt=class extends R{constructor(e,t){super("contains",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return h(n.some(o=>o.value===i[0].value))}},Ct=class extends R{constructor(e,t){super("in",e,t)}eval(e,t){let n=D(this.left.eval(e,t)),i=this.right.eval(e,t);return n?h(i.some(o=>ze(n,o)[0].value)):[]}},X=class extends R{constructor(e,t){super(".",e,t)}eval(e,t){return this.right.eval(e,this.left.eval(e,t))}toString(){return`${this.left.toString()}.${this.right.toString()}`}},Ae=class extends R{constructor(e,t){super("|",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return ft([...n,...i])}},Pt=class extends R{constructor(e,t){super("=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return wn(n,i)}},At=class extends R{constructor(e,t){super("!=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return On(n,i)}},wt=class extends R{constructor(e,t){super("~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return xr(n,i)}},Ot=class extends R{constructor(e,t){super("!~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return An(xr(n,i))}},we=class extends R{constructor(e,t){super("is",e,t)}eval(e,t){let n=this.left.eval(e,t);if(n.length!==1)return[];let i=this.right.name;return h(mt(n[0],i))}},It=class extends R{constructor(e,t){super("and",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return n?.value===!0&&i?.value===!0?h(!0):n?.value===!1||i?.value===!1?h(!1):[]}},kt=class extends R{constructor(e,t){super("or",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return n?.value===!1&&i?.value===!1?h(!1):n?.value||i?.value?h(!0):[]}},Vt=class extends R{constructor(e,t){super("xor",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return!n||!i?[]:h(n.value!==i.value)}},Dt=class extends R{constructor(e,t){super("implies",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return i?.value===!0||n?.value===!1?h(!0):!n||!i?[]:h(!1)}},Z=class{constructor(e,t){c(this,"name");c(this,"args");this.name=e,this.args=t}eval(e,t){let n=N[this.name];if(!n)throw new Error("Unrecognized function: "+this.name);return n(e,t,...this.args)}toString(){return`${this.name}(${this.args.map(e=>e.toString()).join(", ")})`}},Oe=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 nu=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],iu={"'":"'",'"':'"',"`":"`",r:"\r",n:`
2
+ `,t:" ",f:"\f","\\":"\\"},ve=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=iu[n];if(i!==void 0)return this.advance(),i;if(n==="u"){this.advance();let o=/^[0-9a-fA-F]{4}$/.exec(this.str.substring(this.pos.index,this.pos.index+4))?.[0];return o?(this.advance(),this.advance(),this.advance(),this.advance(),String.fromCodePoint(Number.parseInt(o,16))):"u"}return this.consumeChar(e)}return t===e||!t?"":(this.advance(),t)}consumeQuotedSymbol(e){this.mark();let t=this.pos.index;this.advance(),this.consumeString(e);let n=this.str.substring(t,this.pos.index);return this.buildToken("Symbol",n)}consumeDateTime(){this.advance();let e=this.pos.index;this.consumeWhile(()=>/[\d-]/.exec(this.curr()));let t=!1,n=!1;if(this.curr()==="T"&&(t=!0,this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())),this.curr()==="."&&/\d/.exec(this.peek())&&(this.advance(),this.consumeWhile(()=>/\d/.exec(this.curr()))),this.curr()==="Z"?(n=!0,this.advance()):(this.curr()==="+"||this.curr()==="-")&&(n=!0,this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())))),this.pos.index===e)throw new Error("Invalid DateTime literal");let i=this.str.substring(e,this.pos.index);return i.endsWith("T")?i=i.substring(0,i.length-1):!i.startsWith("T")&&t&&!n&&(i+="Z"),this.buildToken("DateTime",i)}consumeNumber(){let e=this.pos.index,t="Number";this.consumeWhile(()=>/\d/.exec(this.curr())),this.curr()==="."&&/\d/.exec(this.peek())&&(this.advance(),this.consumeWhile(()=>/\d/.exec(this.curr())));let n=this.curr();if(n==="-"&&this.dateTimeLiterals)return this.pos.index=e-1,this.consumeDateTime();if(n===" ")ou(this.peekToken())&&(t="Quantity",this.consumeToken());else if(n&&/[a-zA-Z_$]/.exec(n))return this.pos.index=e-1,this.consumeString(" ");return this.buildToken(t,this.str.substring(e,this.pos.index))}consumeSymbol(){let e=this.consumeWhile(()=>this.symbolRegex.exec(this.curr()));return this.prevToken()?.value!=="."&&this.keywords.includes(e)?this.buildToken(e,e):this.buildToken("Symbol",e)}consumeOperator(){let e=this.curr(),t=this.peek(),n=e+t;return this.operators.includes(n)?(this.advance(),this.advance(),this.buildToken(n,n)):(this.advance(),this.buildToken(e,e))}consumeWhile(e){let t=this.pos.index;for(;this.pos.index<this.str.length&&e();)this.advance();return this.str.substring(t,this.pos.index)}curr(){return this.str[this.pos.index]}peek(){return this.str[this.pos.index+1]??""}mark(){this.markStack.push({...this.pos})}reset(){let e=this.markStack.pop();if(!e)throw new Error("No mark to reset to");this.pos.index=e.index,this.pos.line=e.line,this.pos.column=e.column}advance(){this.pos.index++,this.curr()===`
4
+ `?(this.pos.line++,this.pos.column=0):this.pos.column++}buildToken(e,t){let n=this.markStack.pop();if(!n)throw new Error("No mark for token");return{id:e,value:t,...n}}};function ou(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&nu.includes(r.value)))}var Mt=["true","false"],_t=["!=","!~","<=",">=","{}","->"];function Oo(r){return new ve(r,Mt,_t).tokenize()}var S={FunctionCall:0,Dot:1,Indexer:2,UnaryAdd:3,UnarySubtract:3,Multiply:4,Divide:4,IntegerDivide:4,Modulo:4,Add:5,Subtract:5,Ampersand:5,Is:6,As:6,Union:7,GreaterThan:8,GreaterThanOrEquals:8,LessThan:8,LessThanOrEquals:8,Equals:9,Equivalent:9,NotEquals:9,NotEquivalent:9,In:10,Contains:10,And:11,Xor:12,Or:12,Implies:13,Arrow:100,Semicolon:200},su={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},au={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new Oe(e,t)},precedence:S.Indexer},cu={parse(r,e){if(!(e instanceof B))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new Z(e.name,t)},precedence:S.FunctionCall};function uu(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 Ze(){return new at().registerPrefix("String",{parse:(r,e)=>new $({type:d.string,value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new $({type:d.dateTime,value:Xe(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new $({type:d.Quantity,value:uu(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new $({type:e.value.includes(".")?d.decimal:d.integer,value:Number.parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new $({type:d.boolean,value:!0})}).registerPrefix("false",{parse:()=>new $({type:d.boolean,value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new B(e.value)}).registerPrefix("{}",{parse:()=>new St}).registerPrefix("(",su).registerInfix("[",au).registerInfix("(",cu).prefix("+",S.UnaryAdd,(r,e)=>new bt("+",e,t=>t)).prefix("-",S.UnarySubtract,(r,e)=>new F("-",e,e,(t,n)=>-n)).infixLeft(".",S.Dot,(r,e,t)=>new X(r,t)).infixLeft("/",S.Divide,(r,e,t)=>new F("/",r,t,(n,i)=>n/i)).infixLeft("*",S.Multiply,(r,e,t)=>new F("*",r,t,(n,i)=>n*i)).infixLeft("+",S.Add,(r,e,t)=>new F("+",r,t,(n,i)=>n+i)).infixLeft("-",S.Subtract,(r,e,t)=>new F("-",r,t,(n,i)=>n-i)).infixLeft("|",S.Union,(r,e,t)=>new Ae(r,t)).infixLeft("=",S.Equals,(r,e,t)=>new Pt(r,t)).infixLeft("!=",S.NotEquals,(r,e,t)=>new At(r,t)).infixLeft("~",S.Equivalent,(r,e,t)=>new wt(r,t)).infixLeft("!~",S.NotEquivalent,(r,e,t)=>new Ot(r,t)).infixLeft("<",S.LessThan,(r,e,t)=>new F("<",r,t,(n,i)=>n<i)).infixLeft("<=",S.LessThanOrEquals,(r,e,t)=>new F("<=",r,t,(n,i)=>n<=i)).infixLeft(">",S.GreaterThan,(r,e,t)=>new F(">",r,t,(n,i)=>n>i)).infixLeft(">=",S.GreaterThanOrEquals,(r,e,t)=>new F(">=",r,t,(n,i)=>n>=i)).infixLeft("&",S.Ampersand,(r,e,t)=>new Et(r,t)).infixLeft("and",S.And,(r,e,t)=>new It(r,t)).infixLeft("as",S.As,(r,e,t)=>new xe(r,t)).infixLeft("contains",S.Contains,(r,e,t)=>new Rt(r,t)).infixLeft("div",S.Divide,(r,e,t)=>new F("div",r,t,(n,i)=>Math.trunc(n/i))).infixLeft("in",S.In,(r,e,t)=>new Ct(r,t)).infixLeft("is",S.Is,(r,e,t)=>new we(r,t)).infixLeft("mod",S.Modulo,(r,e,t)=>new F("mod",r,t,(n,i)=>n%i)).infixLeft("or",S.Or,(r,e,t)=>new kt(r,t)).infixLeft("xor",S.Xor,(r,e,t)=>new Vt(r,t)).infixLeft("implies",S.Implies,(r,e,t)=>new Dt(r,t))}var lu=Ze();function Lt(r){return new ye(r,lu.construct(Oo(r)).consumeAndParse())}function du(r,e){let t=Array.isArray(e)?e:[e];for(let n=0;n<t.length;n++){let i=t[n];typeof i=="object"&&"type"in i&&"value"in i||(t[n]=b(t[n]))}return w(r,t).map(n=>n.value)}function w(r,e,t={},n=void 0){let i;if(typeof r=="string"){let o=n?.get(r);i=o??Lt(r),n&&!o&&n.set(r,i)}else i=r;return i.eval({variables:t},e).map(o=>{let s={type:o.type,value:o.value?.valueOf()};return"path"in o&&(s.path=o.path),s})}function pu(r){let e=[];for(let t of r)t.type===d.Range?e.push([t.value?.low?.value,t.value?.high?.value]):typeof t.value=="number"&&e.push([t.value,t.value]);return e}function Gn(r){let e=[];for(let t of r){let n=ht(t.value);n&&e.push(n)}return e}function Qn(r){let e=new Set;for(let t of r){let n=qn(t);n&&e.add(n)}return Array.from(e)}function zn(r){let e=new Set;for(let t of r){let{value:n}=t;n&&(Le(n)?e.add(n):G(n)?e.add(n.reference):Ke(n)?e.add(O(n)):typeof n.identifier=="object"&&e.add(`identifier:${n.identifier.system}|${n.identifier.value}`))}return Array.from(e)}function fu(r){let e=[];for(let t of r){let{value:n}=t;typeof n=="number"?e.push({value:n}):V(n)&&e.push(n)}return e}function mu(r){let e=new Set;for(let t of r)Le(t.value)&&e.add(t.value);return Array.from(e)}function Jn(r,e={}){let t=[];for(let n of r)hu(e,t,n);return t}function hu(r,e,t){let{type:n,value:i}=t;switch(n){case d.Identifier:gu(e,r,i);break;case d.CodeableConcept:yu(e,r,i);break;case d.Coding:Io(e,r,i);break;case d.ContactPoint:xu(e,r,i);break;default:Be(e,r,void 0,i?.toString())}}function gu(r,e,t){t?.type?.text&&Be(r,e,e.textSearchSystem,t.type.text),Be(r,e,t?.system,t?.value)}function yu(r,e,t){t?.text&&Be(r,e,e.textSearchSystem,t.text);for(let n of t?.coding??y)Io(r,e,n)}function Io(r,e,t){t&&(t.display&&Be(r,e,e.textSearchSystem,t.display),Be(r,e,t.system,t.code))}function xu(r,e,t){t&&Be(r,e,t.system,t.value?.toLocaleLowerCase())}function Be(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 vu=20,Tu=1e3,m={EQUALS:"eq",NOT_EQUALS:"ne",GREATER_THAN:"gt",LESS_THAN:"lt",GREATER_THAN_OR_EQUALS:"ge",LESS_THAN_OR_EQUALS:"le",STARTS_AFTER:"sa",ENDS_BEFORE:"eb",APPROXIMATELY:"ap",CONTAINS:"contains",STARTS_WITH:"sw",EXACT:"exact",TEXT:"text",NOT:"not",ABOVE:"above",BELOW:"below",IN:"in",NOT_IN:"not-in",OF_TYPE:"of-type",MISSING:"missing",PRESENT:"present",IDENTIFIER:"identifier",ITERATE:"iterate"},Kn={contains:m.CONTAINS,exact:m.EXACT,above:m.ABOVE,below:m.BELOW,text:m.TEXT,not:m.NOT,in:m.IN,"not-in":m.NOT_IN,"of-type":m.OF_TYPE,missing:m.MISSING,identifier:m.IDENTIFIER,iterate:m.ITERATE},Yn={eq:m.EQUALS,ne:m.NOT_EQUALS,lt:m.LESS_THAN,le:m.LESS_THAN_OR_EQUALS,gt:m.GREATER_THAN,ge:m.GREATER_THAN_OR_EQUALS,sa:m.STARTS_AFTER,eb:m.ENDS_BEFORE,ap:m.APPROXIMATELY,sw:m.STARTS_WITH};function et(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 Su(i,o)}function Su(r,e){let t={resourceType:r};for(let[n,i]of e)bu(t,n,i);return t}function bu(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=Y(r.filters,{code:e,operator:m.EQUALS,value:t});return}switch(n){case"_sort":Eu(r,t);break;case"_cursor":r.cursor=t;break;case"_count":r.count=Number.parseInt(t,10);break;case"_offset":r.offset=Number.parseInt(t,10);break;case"_total":r.total=t;break;case"_summary":t==="count"?(r.total="accurate",r.count=0):(t==="true"||t==="data"||t==="text")&&(r.summary=t);break;case"_include":{let s=ko(t);i==="iterate"&&(s.modifier=m.ITERATE),r.include=Y(r.include,s);break}case"_revinclude":{let s=ko(t);i==="iterate"&&(s.modifier=m.ITERATE),r.revInclude=Y(r.revInclude,s);break}case"_fields":case"_elements":r.fields=t.split(",");break;case"_type":r.types=t.split(",");break;case"_format":r.format=t;break;case"_pretty":r.pretty=t==="true";break;default:{let s=j.types[r.resourceType]?.searchParams?.[n];s?r.filters=Y(r.filters,Mo(s,m.EQUALS,i,t)):r.filters=Y(r.filters,Cu(n,i,t))}}}}function Eu(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 Ru=[m.MISSING,m.PRESENT];function Mo(r,e,t,n){if(Ru.includes(t||e))return{code:r.code,operator:t||e,value:n};switch(r.type){case"number":case"date":case"quantity":{let{operator:i,value:o}=Pu(n,t||m.EQUALS);if(!Vo(r,o))throw new f(P(`Invalid format for ${r.type} search parameter: ${o}`));return{code:r.code,operator:i,value:o}}case"reference":case"string":case"token":case"uri":{if(!Vo(r,n))throw new f(P(`Invalid format for ${r.type} search parameter: ${n}`));return{code:r.code,operator:Au(t)??e,value:n}}default:throw new Error("Unrecognized search parameter type: "+r.type)}}function Cu(r,e,t){let n=m.EQUALS;if(e)n=e;else if(t.length>=2){let i=t.substring(0,2);i in Yn&&(t.length===2||t.at(2)?.match(/\d/))&&(n=i,t=t.substring(i.length))}return{code:r,operator:n,value:t}}function Pu(r,e){let t=r.substring(0,2),n=Yn[t];return n?{operator:n,value:r.substring(2)}:{operator:e,value:r}}function Au(r){return Kn[r]}function ko(r){let e=r.split(":");if(e.includes("*"))throw new f(P("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new f(P(`Invalid include value '${r}': must be of the form ResourceType:search-parameter`));if(e.length===2)return{resourceType:e[0],searchParam:e[1]};if(e.length===3)return{resourceType:e[0],searchParam:e[1],targetType:e[2]};throw new f(P(`Invalid include value '${r}'`))}function Vo(r,e){return r.type==="date"?_e(e):!0}var wu=/{{([^{}]+)}}/g;function Ou(r,e,t=[]){return r=r.replaceAll(wu,(n,i)=>{let o=w(i,t,e);return o.length!==1?"":Hn(o[0])}),et(r)}function Iu(r){let e=[];r.fields&&e.push("_fields="+r.fields.join(","));for(let t of r.filters??y)e.push(ku(t));r.sortRules&&r.sortRules.length>0&&e.push(Vu(r.sortRules)),r.cursor!==void 0&&e.push("_cursor="+encodeURIComponent(r.cursor)),r.offset!==void 0&&r.offset!==0&&e.push("_offset="+r.offset),r.count!==void 0&&e.push("_count="+r.count),r.total!==void 0&&e.push("_total="+r.total),r.types&&r.types.length>0&&e.push("_type="+r.types.join(","));for(let t of r.include??y)e.push(Do("_include",t));for(let t of r.revInclude??y)e.push(Do("_revinclude",t));return e.length===0?"":(vt(e),"?"+e.join("&"))}function ku(r){let e=r.operator in Kn?":"+r.operator:"",t=r.operator!==m.EQUALS&&r.operator in Yn?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function Vu(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function Do(r,e){return r+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function tt(r){let e=[],t="",n=!1;for(let i of r)n?(t+=i,n=!1):i==="\\"?n=!0:i===","?(e.push(t),t=""):t+=i;return e.push(t),e}function Du(r,e){return P(`Invalid modifier :${r} for ${e}`)}function Mu(r,e){return r in Kn?Du(r,e):P(`Invalid operator ${r} for ${e}`)}function Nt(r,e){if(e.resourceType!==r.resourceType)return!1;for(let t of e.filters??y)if(!Lu(r,e,t))return!1;return!0}var _u=new K(1e3);function Lu(r,e,t){let n=j.types[e.resourceType]?.searchParams?.[t.code];if(!n)return!1;let i=w(n.expression,[b(r)],void 0,_u);if(t.operator===m.MISSING||t.operator===m.PRESENT)return Nu(i,t);switch(n.type){case"reference":return Fu(n,i,t);case"string":case"uri":return Wu(i,t);case"token":return Uu(i,t);case"date":return ju(i,t);default:return!1}}function Nu(r,e){let t=r.length>0;return(e.operator===m.MISSING&&e.value==="false"||e.operator===m.PRESENT&&e.value==="true")===t}function Fu(r,e,t){let n=Ir(t.operator);if(t.value===""&&e.length===0)return t.operator===m.EQUALS;let i=zn(e);for(let o of tt(t.value)){let s=!1;if(o.includes("/")?s=i.includes(o):(r.target?.length===1||t.code==="_compartment")&&(s=i.some(a=>a?.endsWith("/"+o))),s)return!n}return n}function Uu(r,e){let t=Jn(r),n=tt(e.value),i=Ir(e.operator);for(let o of t)for(let s of n)if(Bu(o,s))return!i;return i}function Bu(r,e){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 Wu(r,e){let t=Qn(r),n=tt(e.value),i=Ir(e.operator);for(let o of t)for(let s of n)if(qu(o,s))return!i;return i}function qu(r,e){return r.toLowerCase().includes(e.toLowerCase())}function ju(r,e){let t=Gn(r),n=tt(e.value),i=Ir(e.operator);for(let o of t)for(let s of n)if($u(o,e.operator,s))return!i;return i}function $u(r,e,t){if(!r)return!1;let n=ht(t);if(!n)return!1;let i=r.start??"0000",o=r.end??"9999",s=n.start,a=n.end;switch(e){case m.APPROXIMATELY:case m.EQUALS:case m.NOT_EQUALS:return i<a&&o>s;case m.LESS_THAN:return i<s;case m.GREATER_THAN:return o>a;case m.LESS_THAN_OR_EQUALS:return i<=a;case m.GREATER_THAN_OR_EQUALS:return o>=s;case m.STARTS_AFTER:return i>a;case m.ENDS_BEFORE:return o<s;default:return!1}}function Ir(r){return r===m.NOT_EQUALS||r===m.NOT}var Hu={resourceType:"*"},_o=["DomainConfiguration","JsonWebKey","Login"],Lo=["Package","PackageRelease","PackageInstallation","Project","ProjectMembership","User","UserSecurityRequest"],Ie={READ:"read",VREAD:"vread",UPDATE:"update",DELETE:"delete",HISTORY:"history",CREATE:"create",SEARCH:"search"},No=[Ie.READ,Ie.VREAD,Ie.HISTORY,Ie.SEARCH];function Gu(r,e){return Xn(r,Ie.SEARCH,e)}function Qu(r,e){return _o.includes(e)?!1:Xn(r,Ie.UPDATE,e)}function Xn(r,e,t){return!!r.resource?.some(n=>Uo(n,t,e))}function zu(r,e){return!!Fo(e,Ie.UPDATE,r)}function Fo(r,e,t){return t?t.resource?.find(n=>Ju(r,e,n)):Hu}function Ju(r,e,t){let n=r.resourceType;return Uo(t,n,e)?n==="Binary"?!0:!(t.compartment&&!r.meta?.compartment?.some(i=>i.reference===t.compartment?.reference)||t.criteria&&!Nt(r,et(t.criteria))):!1}function Uo(r,e,t){return r.resourceType!==e&&(r.resourceType!=="*"||Lo.includes(e))?!1:r.interaction?r.interaction.includes(t):!r.readonly||No.includes(t)}var Ku={FIRST:"first",APPLICATION:"application"};function z(){return typeof window<"u"}function Yu(){return typeof Buffer<"u"}function Xu(){return typeof window<"u"?window:void 0}function kr(){return typeof Buffer<"u"?Buffer:void 0}var ce={assign(r){z()&&globalThis.location.assign(r)},reload(){z()&&globalThis.location.reload()},getSearch(){return z()?globalThis.location.search:""},getPathname(){return z()?globalThis.location.pathname:""},getLocation(){return z()?globalThis.location.toString():""},getOrigin(){return z()?globalThis.location.protocol+"//"+globalThis.location.host+"/":""}};function Bo(r){if(z()){let t=window.atob(r),n=Uint8Array.from(t,i=>i.codePointAt(0));return new window.TextDecoder().decode(n)}let e=kr();if(e)return e.from(r,"base64").toString("utf-8");throw new Error("Unable to decode base64")}function Ft(r){if(z()){let t=new window.TextEncoder().encode(r),n=String.fromCodePoint.apply(null,t);return window.btoa(n)}let e=kr();if(e)return e.from(r,"utf8").toString("base64");throw new Error("Unable to encode base64")}function Zu(r){return Ft(r).replaceAll("+","-").replaceAll("/","_").replace(/[=]{1,2}$/,"")}function Zn(r){r=r.padEnd(r.length+(4-r.length%4)%4,"=");let e=r.replaceAll("-","+").replaceAll("_","/");return Bo(e)}function Vr(){let r=new Uint32Array(28);return crypto.getRandomValues(r),_n(r.buffer)}async function ei(r){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(r))}function ee(){return typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replaceAll(/[xy]/g,r=>{let e=Math.trunc(Math.random()*16);return(r==="x"?e:e&3|8).toString(16)})}function Wo(r){let e={};r=Pe(r);for(let i of r.entry??y){let o=i.resource;if(!o)continue;o.meta!==void 0&&(delete o.meta.author,delete o.meta.compartment,delete o.meta.lastUpdated,delete o.meta.project,delete o.meta.versionId,Object.keys(o.meta).length===0&&delete o.meta);let s=o?.id;if(s)e[s]=ee(),i.fullUrl="urn:uuid:"+e[s],delete i.resource?.id;else if(i.fullUrl?.startsWith("resource:")){let a=i.fullUrl.slice(9);e[a]=ee(),i.fullUrl="urn:uuid:"+e[a]}}let t=r.entry,n=JSON.stringify({resourceType:"Bundle",type:"transaction",entry:t?.map(i=>({fullUrl:i.fullUrl,request:{method:"POST",url:i.resource?.resourceType},resource:i.resource}))},(i,o)=>el(i,o,e),2);return qo(JSON.parse(n))}function el(r,e,t){if((r==="reference"||r==="url")&&typeof e=="string"){let n;if(e.includes("/")?n=e.split("/")[1]:e.startsWith("urn:uuid:")||e.startsWith("resource:")?n=e.slice(9):e.startsWith("#")&&(n=e.slice(1)),n){let i=t[n];if(i)return"urn:uuid:"+i}}return e}function qo(r){let e=rl(r),{sorted:t,cycles:n}=tl(e),i={},o=[];for(let a of r.entry??y)a.fullUrl?i[a.fullUrl]=a:o.push(a);let s=t.map(a=>i[a]);for(let a of n)for(let u of a){let l=i[u],p={...l,request:{...l.request,method:"PUT"}};s.push(p)}return s.push(...o),{...r,entry:s}}var rt={NotVisited:"NotVisited",Visiting:"Visiting",Visited:"Visited"};function tl(r){let e=[],t={},n=[];for(let o of Object.keys(r))t[o]=rt.NotVisited;function i(o,s){if(t[o]===rt.Visited)return!0;if(t[o]===rt.Visiting){let u=s.lastIndexOf(o);return u!==-1&&n.push(s.slice(u)),!0}t[o]=rt.Visiting,s.push(o);let a=!1;for(let u of r[o]??y)i(u,s)||(a=!0);return t[o]=rt.Visited,s.pop(),e.unshift(o),!a}for(let o in r)t[o]===rt.NotVisited&&i(o,[]);return{sorted:e,cycles:n}}function jo(r,e){for(let t in r)if(r[t]&&typeof r[t]=="object"){let n=r[t];if(G(n)){let i=n.reference;(i.startsWith("urn:uuid:")||i.startsWith("resource:"))&&e(i)}else jo(n,e)}}function rl(r){let e={};for(let t of r.entry??y)t.fullUrl&&(e[t.fullUrl]=[]);for(let t of r.entry??y){let n=t.fullUrl;n&&t.resource&&jo(t.resource,i=>{i!==n&&e[i]&&e[i].push(n)})}return e}function nl(r){r=Pe(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=ee());return Wo(e)}function il(r,e,t){return r.entry?.find(({resource:n})=>n?.resourceType===e&&n?.id===t)?.resource}async function ol(r,e,t,n){return{hook:t.hook,hookInstance:ee(),context:n,prefetch:await sl(r,e,t,n)}}async function sl(r,e,t,n){if(!t.prefetch)return{};let i={};for(let[o,s]of Object.entries(t.prefetch)){let a=await al(r,e,n,s);i[o]=a??null}return i}function al(r,e,t,n){if(n=$o(e,t,n),n.includes("{{"))return Promise.resolve(null);let i=/^(\w+)\/([0-9a-zA-Z-_]+)$/.exec(n);if(i){let[a,u]=i.slice(1);return r.readResource(a,u)}let[o,s]=Ne(n,"?",2);return r.search(o,s)}var cl=new Set(["userPractitionerId","userPractitionerRoleId","userPatientId","userRelatedPersonId"]);function $o(r,e,t){return t.replaceAll(/\{\{([^}]+)\}\}/g,(n,i)=>{if(i=i.trim(),cl.has(i))return r.id;if(i.startsWith("context.")){let o=i.substring(8),s=ul(e,o);if(Le(s))return s;if(typeof s=="number"||typeof s=="boolean")return String(s)}return n})}function ul(r,e){let t=e.split("."),n=r;for(let i of t)if(n&&C(n)&&i in n)n=n[i];else return;return n}var k={CSS:"text/css",DICOM:"application/dicom",FAVICON:"image/vnd.microsoft.icon",FHIR_JSON:"application/fhir+json",FORM_URL_ENCODED:"application/x-www-form-urlencoded",HL7_V2:"x-application/hl7-v2+er7",HTML:"text/html",JAVASCRIPT:"text/javascript",JSON:"application/json",JSON_PATCH:"application/json-patch+json",JWT:"application/jwt",MULTIPART_FORM_DATA:"multipart/form-data",PNG:"image/png",SCIM_JSON:"application/scim+json",SVG:"image/svg+xml",TEXT:"text/plain",TYPESCRIPT:"text/typescript",PING:"x-application/ping",XML:"text/xml",CDA_XML:"application/cda+xml",OCTET_STREAM:"application/octet-stream"};var Dr=class{constructor(){c(this,"listeners");this.listeners={}}addEventListener(e,t){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)}removeEventListener(e,t){let n=this.listeners[e];if(n){for(let i=0;i<n.length;i++)if(n[i]===t){n.splice(i,1);return}}}dispatchEvent(e){let t=this.listeners[e.type];for(let n of t??y)n.call(this,e);return!e.defaultPrevented}removeAllListeners(){this.listeners={}}listenerCount(e){return this.listeners[e]?.length??0}},te=class{constructor(){c(this,"emitter",new Dr)}dispatchEvent(e){this.emitter.dispatchEvent(e)}addEventListener(e,t){this.emitter.addEventListener(e,t)}removeEventListener(e,t){this.emitter.removeEventListener(e,t)}removeAllListeners(){this.emitter.removeAllListeners()}listenerCount(e){return this.emitter.listenerCount(e)}};var Mr={"Patient-open":"Patient-open","Patient-close":"Patient-close","ImagingStudy-open":"ImagingStudy-open","ImagingStudy-close":"ImagingStudy-close","Encounter-open":"Encounter-open","Encounter-close":"Encounter-close","DiagnosticReport-open":"DiagnosticReport-open","DiagnosticReport-close":"DiagnosticReport-close","DiagnosticReport-select":"DiagnosticReport-select","DiagnosticReport-update":"DiagnosticReport-update",syncerror:"syncerror"},Ho=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],_r=["DiagnosticReport-update"];function ti(r){return _r.includes(r)}function ri(r){if(_r.includes(r))throw new f(T(`'context.version' is required for '${r}'.`))}var Go={"Patient-open":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"Patient-close":{patient:{resourceType:"Patient"},encounter:{resourceType:"Encounter",optional:!0}},"ImagingStudy-open":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"ImagingStudy-close":{study:{resourceType:"ImagingStudy"},encounter:{resourceType:"Encounter",optional:!0},patient:{resourceType:"Patient",optional:!0}},"Encounter-open":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"Encounter-close":{encounter:{resourceType:"Encounter"},patient:{resourceType:"Patient"}},"DiagnosticReport-open":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-close":{report:{resourceType:"DiagnosticReport"},encounter:{resourceType:"Encounter",optional:!0},study:{resourceType:"ImagingStudy",optional:!0,manyAllowed:!0},patient:{resourceType:"Patient"}},"DiagnosticReport-select":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},select:{resourceType:"*",reference:!0,manyAllowed:!0}},"DiagnosticReport-update":{report:{resourceType:"DiagnosticReport",reference:!0},patient:{resourceType:"Patient",optional:!0,reference:!0},updates:{resourceType:"Bundle"}},syncerror:{operationoutcome:{resourceType:"OperationOutcome"}}};function Qo(r){return Ho.includes(r)}function ni(r){return!!r.endpoint}function Lr(r){if(!Bt(r))throw new f(T("subscriptionRequest must be an object conforming to SubscriptionRequest type."));let{channelType:e,mode:t,topic:n,events:i}=r,o={"hub.channel.type":e,"hub.mode":t,"hub.topic":n,"hub.events":i.join(",")};return ni(r)&&(o.endpoint=r.endpoint),new URLSearchParams(o).toString()}function Bt(r){if(typeof r!="object")return!1;let{channelType:e,mode:t,topic:n,events:i}=r;if(!(e&&t&&n&&i)||typeof n!="string"||typeof i!="object"||!Array.isArray(i)||i.length<1||e!=="websocket"||t!=="subscribe"&&t!=="unsubscribe")return!1;for(let o of i)if(!Mr[o])return!1;return!(ni(r)&&!(typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))}function ll(r,e,t,n){if(typeof e!="object")throw new f(T(`context[${t}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.id&&typeof e.id=="string"))throw new f(T(`context[${t}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new f(T(`context[${t}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!Qo(e.resourceType))throw new f(T(`context[${t}] is invalid. Resource must contain a valid FHIRcast resource type. Resource type is not a known resource type.`));if(i&&e.resourceType!==i)throw new f(T(`context[${t}] is invalid. context[${t}] for the '${r}' event should contain resource of type ${i}.`))}}function dl(r,e,t,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),n.reference){if(!G(e.reference))throw new f(T(`context[${t}] is invalid. Expected key '${e.key}' to be a reference.`))}else ll(r,e.resource,t,n)}function pl(r,e){let t=new Map,n=Go[r];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new f(T(`Key '${o}' not found for event '${r}'. Make sure to add only valid keys.`));dl(r,e[i],i,n[o],t)}for(let[i,o]of Object.entries(n)){if(!(o.optional||t.has(i)))throw new f(T(`Missing required key '${i}' on context for '${r}' event.`));if(!o.manyAllowed&&(t.get(i)??0)>1)throw new f(T(`${t.get(i)} context entries with key '${i}' found for the '${r}' event when schema only allows for 1.`))}}function Nr(r,e,t,n){if(!(r&&typeof r=="string"))throw new f(T("Must provide a topic."));if(!Mr[e])throw new f(T(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(Mr).join(", ")}`));if(typeof t!="object")throw new f(T("context must be a context object or array of context objects."));if(_r.includes(e)&&!n)throw new f(T(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(t)?t:[t];return pl(e,i),{timestamp:new Date().toISOString(),id:ee(),event:{"hub.topic":r,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var Ut=class extends te{constructor(t){super();c(this,"subRequest");c(this,"websocket");if(this.subRequest=t,!t.endpoint)throw new f(T("Subscription request should contain an endpoint."));if(!Bt(t))throw new f(T("Subscription request failed validation."));let n=new WebSocket(t.endpoint);n.addEventListener("open",()=>{this.dispatchEvent({type:"connect"}),n.addEventListener("message",i=>{let o=JSON.parse(i.data);if(o["hub.topic"])return;let s=o;s.event["hub.event"]!=="heartbeat"&&(this.dispatchEvent({type:"message",payload:s}),n.send(JSON.stringify({id:o?.id,timestamp:new Date().toISOString()})))}),n.addEventListener("close",()=>{this.dispatchEvent({type:"disconnect"})})}),this.websocket=n}disconnect(){this.websocket.close()}};function fl(r){return JSON.parse(Zn(r))}function ii(r){return r.split(".").length===3}function Wt(r){let[e,t,n]=r.split(".");return fl(t)}function oi(r){try{return typeof Wt(r).login_id=="string"}catch{return!1}}function si(r){try{let t=Wt(r).exp;return typeof t=="number"?t*1e3:void 0}catch{return}}var qt=class{constructor(e){c(this,"medplum");this.medplum=e}async get(e){return this.medplum.get(`keyvalue/v1/${e}`)}async set(e,t){await this.medplum.put(`keyvalue/v1/${e}`,t,k.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var zo;zo=Symbol.toStringTag;var W=class{constructor(e){c(this,zo,"ReadablePromise");c(this,"suspender");c(this,"status","pending");c(this,"response");c(this,"error");this.suspender=e.then(t=>(this.status="success",this.response=t,t),t=>{throw this.status="error",this.error=t,t})}isPending(){return this.status==="pending"}isOk(){return this.status==="success"}read(){switch(this.status){case"pending":throw this.suspender;case"error":throw this.error;default:return this.response}}then(e,t){return this.suspender.then(e,t)}catch(e){return this.suspender.catch(e)}finally(e){return this.suspender.finally(e)}};var nt=class{constructor(e,t=""){c(this,"storage");c(this,"prefix","");this.storage=e??globalThis.localStorage??new Fr,this.prefix=t}makeKey(e){return this.prefix+e}clear(){this.storage===globalThis.localStorage&&this.prefix?Object.keys(this.storage).filter(e=>e.startsWith(this.prefix)).forEach(e=>{this.storage.removeItem(e)}):this.storage.clear()}getString(e){return this.storage.getItem(this.makeKey(e))??void 0}setString(e,t){t?this.storage.setItem(this.makeKey(e),t):this.storage.removeItem(this.makeKey(e))}getObject(e){let t=this.getString(e);return t?JSON.parse(t):void 0}setObject(e,t){this.setString(e,t?xt(t):void 0)}},Fr=class{constructor(){c(this,"data");this.data=new Map}get length(){return this.data.size}clear(){this.data.clear()}getItem(e){return this.data.get(e)??null}setItem(e,t){t?this.data.set(e,t):this.data.delete(e)}removeItem(e){this.data.delete(e)}key(e){return Array.from(this.data.keys())[e]}},ai=class extends nt{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 J={Event:typeof globalThis.Event<"u"?globalThis.Event:void 0,ErrorEvent:void 0,CloseEvent:void 0},Jo=!1;function ml(){if(typeof globalThis.Event>"u")throw new Error("Unable to lazy init events for ReconnectingWebSocket. globalThis.Event is not defined yet");J.Event=globalThis.Event,J.ErrorEvent=class extends Event{constructor(t,n){super("error",n);c(this,"message");c(this,"error");this.message=t.message,this.error=t}},J.CloseEvent=class extends Event{constructor(t=1e3,n="",i){super("close",i);c(this,"code");c(this,"reason");c(this,"wasClean",!0);this.code=t,this.reason=n}}}function Yo(r,e){if(!r)throw new Error(e)}function hl(){}function Ur(r){if(r instanceof J.CloseEvent){let e=r;return new J.CloseEvent(e.code,e.reason,void 0)}if(r instanceof J.ErrorEvent){let e=r;return new J.ErrorEvent(e.error??new Error(e.message),void 0)}return new r.constructor(r.type,r)}function Xo(r,e){let t=r;return t.error instanceof Error?new J.ErrorEvent(t.error,e):new J.ErrorEvent(new Error(t.message||"WebSocket error"),e)}var We={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},Ko=!1,jt=class r extends te{constructor(t,n,i={}){Jo||(ml(),Jo=!0);super();c(this,"_ws");c(this,"_retryCount",-1);c(this,"_uptimeTimeout");c(this,"_connectTimeout");c(this,"_shouldReconnect",!0);c(this,"_connectLock",!1);c(this,"_binaryType");c(this,"_closeCalled",!1);c(this,"_messageQueue",[]);c(this,"_debugLogger",console.log.bind(console));c(this,"_url");c(this,"_protocols");c(this,"_options");c(this,"onclose",null);c(this,"onerror",null);c(this,"onmessage",null);c(this,"onopen",null);c(this,"_handleOpen",t=>{this._debug("open event");let{minUptime:n=We.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),n),Yo(this._ws,"WebSocket is not defined"),this._ws.binaryType=this._binaryType,this._messageQueue.forEach(i=>this._ws?.send(i)),this._messageQueue=[],this.onopen&&this.onopen(t),this.dispatchEvent(Ur(t))});c(this,"_handleMessage",t=>{this._debug("message event"),this.onmessage&&this.onmessage(t),this.dispatchEvent(Ur(t))});c(this,"_handleError",t=>{let n=Xo(t,this);this._debug("error event",n.message),this._disconnect(void 0,n.message==="TIMEOUT"?"timeout":void 0),this.onerror&&this.onerror(n),this._debug("exec error listeners"),this.dispatchEvent(Ur(n)),this._connect()});c(this,"_handleClose",t=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(t),this.dispatchEvent(Ur(t))});this._url=t,this._protocols=n,this._options=i,this._options.startClosed&&(this._shouldReconnect=!1),this._options.binaryType?this._binaryType=this._options.binaryType:this._binaryType="blob",this._options.debugLogger&&(this._debugLogger=this._options.debugLogger),this._connect()}static get CONNECTING(){return 0}static get OPEN(){return 1}static get CLOSING(){return 2}static get CLOSED(){return 3}get CONNECTING(){return r.CONNECTING}get OPEN(){return r.OPEN}get CLOSING(){return r.CLOSING}get CLOSED(){return r.CLOSED}get binaryType(){return this._ws?this._ws.binaryType:this._binaryType}set binaryType(t){this._binaryType=t,this._ws&&(this._ws.binaryType=t)}get retryCount(){return Math.max(this._retryCount,0)}get bufferedAmount(){return this._messageQueue.reduce((n,i)=>(typeof i=="string"?n+=i.length:i instanceof Blob?n+=i.size:n+=i.byteLength,n),0)+(this._ws?.bufferedAmount??0)}get extensions(){return this._ws?.extensions??""}get protocol(){return this._ws?.protocol??""}get readyState(){return this._ws?this._ws.readyState:this._options.startClosed?r.CLOSED:r.CONNECTING}get url(){return this._ws?this._ws.url:""}get shouldReconnect(){return this._shouldReconnect}close(t=1e3,n){if(this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),!this._ws){this._debug("close enqueued: no ws instance");return}if(this._ws.readyState===this.CLOSED){this._debug("close: already closed");return}this._ws.close(t,n)}reconnect(t,n){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED?this._connect():(this._disconnect(t,n),this._connect())}send(t){if(this._ws?.readyState===this.OPEN)this._debug("send",t),this._ws.send(t);else{let{maxEnqueuedMessages:n=We.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=We.reconnectionDelayGrowFactor,minReconnectionDelay:n=We.minReconnectionDelay,maxReconnectionDelay:i=We.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=We.maxRetries,connectionTimeout:n=We.connectionTimeout}=this._options;if(this._retryCount>=t){this._connectLock=!1,this._debug("max retries reached",this._retryCount,">=",t);return}this._retryCount++,this._debug("connect",this._retryCount),this._removeListeners(),this._wait().then(()=>{if(this._closeCalled){this._connectLock=!1;return}!this._options.WebSocket&&typeof WebSocket>"u"&&!Ko&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),Ko=!0);let i=this._options.WebSocket||WebSocket;this._debug("connect",{url:this._url,protocols:this._protocols}),this._ws=this._protocols?new i(this._url,this._protocols):new i(this._url),this._ws.binaryType=this._binaryType,this._connectLock=!1,this._addListeners(),this._connectTimeout=setTimeout(()=>this._handleTimeout(),n)}).catch(i=>{this._connectLock=!1,this._handleError(new J.ErrorEvent(Error(i.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new J.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(t=1e3,n){if(this._clearTimeouts(),!this._ws)return;let i=this._ws;this._removeListeners(),i.addEventListener("error",hl);try{i.close(t,n),this._handleClose(new J.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 gl=[WebSocket.CLOSING,WebSocket.CLOSED],it=class extends te{constructor(...t){super();c(this,"criteria");this.criteria=new Set(t)}getCriteria(){return this.criteria}_addCriteria(t){this.criteria.add(t)}_removeCriteria(t){this.criteria.delete(t)}},ci=class{constructor(e,t){c(this,"criteria");c(this,"emitter");c(this,"refCount");c(this,"subscriptionProps");c(this,"subscriptionId");c(this,"token");c(this,"tokenExpiry");c(this,"state","idle");c(this,"generation",0);c(this,"lastUnrefTime");this.criteria=e,this.emitter=new it(e),this.refCount=1,this.subscriptionProps=t?{...t}:void 0}nextGeneration(){return++this.generation}},Ht=class{constructor(e,t,n){c(this,"medplum");c(this,"ws");c(this,"masterSubEmitter");c(this,"criteriaEntries");c(this,"criteriaEntriesBySubscriptionId");c(this,"wsClosed");c(this,"pingTimer");c(this,"tokenRefreshTimer");c(this,"pingIntervalMs");c(this,"waitingForPong",!1);c(this,"currentProfile");if(!(e instanceof Gt))throw new f(T("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(t).toString()}catch{throw new f(T("Not a valid URL"))}let o=n?.ReconnectingWebSocket?new n.ReconnectingWebSocket(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger}):new jt(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger});this.medplum=e,this.ws=o,this.masterSubEmitter=new it,this.criteriaEntries=new Map,this.criteriaEntriesBySubscriptionId=new Map,this.wsClosed=!1,this.pingIntervalMs=n?.pingIntervalMs??5e3,this.currentProfile=e.getProfile(),this.setupListeners()}setupListeners(){let e=this.ws;e.addEventListener("message",t=>{try{let n=JSON.parse(t.data);if(n.type==="pong"){this.waitingForPong=!1;return}let i=n,o=i?.entry?.[0]?.resource;if(o.type==="heartbeat"){this.masterSubEmitter?.dispatchEvent({type:"heartbeat",payload:i});return}if(o.type==="handshake"){let a=Ce(o.subscription),u={type:"connect",payload:{subscriptionId:a}};this.masterSubEmitter?.dispatchEvent(u);let l=this.criteriaEntriesBySubscriptionId.get(a);if(!l){console.warn("Received handshake for criteria the SubscriptionManager is not listening for yet");return}(l.state==="connecting"||l.state==="refreshing")&&(l.state="active"),l.emitter.dispatchEvent({...u});return}this.masterSubEmitter?.dispatchEvent({type:"message",payload:i});let s=this.criteriaEntriesBySubscriptionId.get(Ce(o.subscription));if(!s){console.warn("Received notification for criteria the SubscriptionManager is not listening for");return}s.emitter.dispatchEvent({type:"message",payload:i})}catch(n){console.error(n);let i={type:"error",payload:n};this.masterSubEmitter?.dispatchEvent(i);for(let o of this.getAllCriteriaEmitters())o.dispatchEvent({...i})}}),e.addEventListener("error",t=>{let n={type:"error",payload:new f({resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"WebSocket connection closed due to an error"},diagnostics:t.error?Se(t.error):t.message}]})};this.masterSubEmitter?.dispatchEvent(n);for(let i of this.getAllCriteriaEmitters())i.dispatchEvent({...n})}),e.addEventListener("close",()=>{let t={type:"close"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=void 0,this.waitingForPong=!1),this.tokenRefreshTimer&&(clearInterval(this.tokenRefreshTimer),this.tokenRefreshTimer=void 0),this.wsClosed&&(this.criteriaEntries.clear(),this.criteriaEntriesBySubscriptionId.clear(),this.masterSubEmitter?.removeAllListeners())}),e.addEventListener("open",()=>{let t={type:"open"};this.masterSubEmitter?.dispatchEvent(t);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...t});this.refreshAllSubscriptions().catch(console.error),this.pingTimer??=setInterval(()=>{this.waitingForPong?(this.waitingForPong=!1,e.reconnect()):(e.send(JSON.stringify({type:"ping"})),this.waitingForPong=!0),this.gcUnrefEntries()},this.pingIntervalMs),this.tokenRefreshTimer??=setInterval(()=>{this.checkTokenExpirations(),this.gcUnrefEntries()},6e4)}),this.medplum.addEventListener("change",()=>{let t=this.medplum.getProfile();this.currentProfile&&t===void 0?this.ws.close():t&&this.currentProfile?.id!==t.id&&this.ws.reconnect(),this.currentProfile=t})}sendBind(e){this.ws.send(JSON.stringify({type:"bind-with-token",payload:{token:e}}))}sendUnbind(e){this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"unbind-from-token",payload:{token:e}}))}emitError(e,t){let n={type:"error",payload:t};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}maybeEmitDisconnect(e){let{subscriptionId:t}=e;if(t){let n={type:"disconnect",payload:{subscriptionId:t}};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}else console.warn("Called disconnect for `CriteriaEntry` before `subscriptionId` was present.")}isStale(e,t){return this.isEntryGettingRemoved(e)||e.generation!==t}maybeGetCriteriaEntry(e,t){let n=this.criteriaEntries.get(e);if(n){if(!t)return n.bareCriteria;for(let i of n.criteriaWithProps)if(fe(t,i.subscriptionProps))return i}}getAllCriteriaEmitters(){let e=[];for(let t of this.criteriaEntries.values())for(let n of $t(t))n.refCount>0&&e.push(n.emitter);return e}addCriteriaEntry(e){let{criteria:t,subscriptionProps:n}=e,i;this.criteriaEntries.has(t)?i=this.criteriaEntries.get(t):(i={criteriaWithProps:[]},this.criteriaEntries.set(t,i)),n?i.criteriaWithProps.push(e):i.bareCriteria=e}removeCriteriaEntry(e){e.state="removed",e.generation++;let{criteria:t,subscriptionProps:n,subscriptionId:i,token:o}=e;if(!this.criteriaEntries.has(t))return;let s=this.criteriaEntries.get(t);n?s.criteriaWithProps=s.criteriaWithProps.filter(a=>{let u=a.subscriptionProps;return!fe(n,u)}):s.bareCriteria=void 0,!s.bareCriteria&&s.criteriaWithProps.length===0&&(this.criteriaEntries.delete(t),this.masterSubEmitter?._removeCriteria(t)),i&&this.criteriaEntriesBySubscriptionId.delete(i),o&&this.sendUnbind(o)}async subscribeToCriteria(e){this.wsClosed&&await this.reconnectIfNeeded(),this.ws.readyState===WebSocket.OPEN&&this.medplum.getProfile()&&e.state==="idle"&&(e.state="connecting",await this.rebindCriteriaEntry(e))}async refreshAllSubscriptions(){this.criteriaEntriesBySubscriptionId.clear();let e=[],t=[];for(let n of this.criteriaEntries.values())for(let i of $t(n))i.refCount===0?t.push(i):e.push(i);for(let n of t)this.removeCriteriaEntry(n);for(let n of e)n.token&&this.sendUnbind(n.token),n.token=void 0,n.tokenExpiry=void 0,n.subscriptionId=void 0,n.state="idle",n.generation++,await this.subscribeToCriteria(n)}async rebindCriteriaEntry(e){let t=e.nextGeneration();try{if(!e.subscriptionId){let a=await this.medplum.createResource({...e.subscriptionProps,resourceType:"Subscription",status:"active",reason:`WebSocket subscription for ${O(this.medplum.getProfile())}`,channel:{type:"websocket"},criteria:e.criteria});if(e.subscriptionId??=a.id,this.isStale(e,t))return}let{parameter:n}=await this.medplum.get(`fhir/R4/Subscription/${e.subscriptionId}/$get-ws-binding-token`,{cache:"no-cache"}),i=n?.find(a=>a.name==="token")?.valueString,o=n?.find(a=>a.name==="websocket-url")?.valueUrl,s=n?.find(a=>a.name==="expiration")?.valueDateTime;if(!i)throw new f(T("Failed to get token"));if(!o)throw new f(T("Failed to get URL from $get-ws-binding-token"));if(!s)throw new f(T("Failed to get expiration from $get-ws-binding-token"));if(this.isStale(e,t))return;e.token=i,e.tokenExpiry=new Date(s).getTime(),this.criteriaEntriesBySubscriptionId.set(e.subscriptionId,e),this.sendBind(i)}catch(n){console.error(Se(n)),e.generation===t&&!this.isEntryGettingRemoved(e)&&(e.state=e.state==="refreshing"?"active":"idle"),this.emitError(e,n)}}checkTokenExpirations(){if(!this.medplum.getProfile())return;let e=Date.now();for(let t of this.criteriaEntries.values())for(let n of $t(t))n.refCount===0||!n.tokenExpiry||n.tokenExpiry-e<=3e5&&n.state==="active"&&this.ws.readyState===WebSocket.OPEN&&(n.state="refreshing",this.rebindCriteriaEntry(n).catch(i=>{this.masterSubEmitter?.dispatchEvent({type:"error",payload:i})}))}addCriteria(e,t){this.masterSubEmitter&&this.masterSubEmitter._addCriteria(e);let n=this.maybeGetCriteriaEntry(e,t);if(n)return n.refCount===0&&(n.lastUnrefTime=void 0,n.generation++,n.state!=="active"&&(n.state=n.token?"active":"idle")),n.refCount+=1,n.state==="idle"&&this.subscribeToCriteria(n).catch(console.error),n.emitter;let i=new ci(e,t);return this.addCriteriaEntry(i),this.subscribeToCriteria(i).catch(console.error),i.emitter}removeCriteria(e,t){let n=this.maybeGetCriteriaEntry(e,t);if(!n||this.isEntryGettingRemoved(n)){console.warn("Criteria not known to `SubscriptionManager`. Possibly called remove too many times.");return}n.refCount-=1,n.refCount===0&&(n.lastUnrefTime=Date.now(),n.generation++)}gcUnrefEntries(){let e=Date.now(),t=[];for(let n of this.criteriaEntries.values())for(let i of $t(n))i.refCount===0&&i.lastUnrefTime!==void 0&&e-i.lastUnrefTime>=1e4&&t.push(i);for(let n of t)this.maybeEmitDisconnect(n),this.removeCriteriaEntry(n);t.length>0&&this.criteriaEntries.size===0&&this.closeWebSocket()}isEntryGettingRemoved(e){return e.refCount===0||e.state==="removed"}getWebSocket(){return this.ws}closeWebSocket(){if(!this.wsClosed){if(this.ws.readyState===WebSocket.OPEN)for(let e of this.criteriaEntries.values())for(let t of $t(e))t.token&&this.sendUnbind(t.token);this.wsClosed=!0,this.ws.close()}}reconnectWebSocket(){this.ws.reconnect(),this.wsClosed=!1}getCriteriaCount(){return this.getAllCriteriaEmitters().length}getMasterEmitter(){return this.masterSubEmitter||(this.masterSubEmitter=new it(...Array.from(this.criteriaEntries.keys()))),this.masterSubEmitter}async reconnectIfNeeded(){gl.includes(this.getWebSocket().readyState)&&await new Promise(e=>{let t=()=>{this.getWebSocket().removeEventListener("open",t),e()};this.getWebSocket().addEventListener("open",t),this.reconnectWebSocket()})}};function $t(r){return r.bareCriteria?[r.bareCriteria,...r.criteriaWithProps]:r.criteriaWithProps}var yl=new K(1e3);async function xl({resource:r,subscription:e,context:t,getPreviousResource:n,logger:i}){if(!vl(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=et(o);if(r.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${r.resourceType}")`),!1;if(!await Zo(e,r,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let u=pe(e,"https://medplum.com/fhir/StructureDefinition/subscription-supported-interaction");if(u&&u.valueCode!==t.interaction)return i?.debug(`Ignore rest hook for different interaction (wanted "${u.valueCode}", received "${t.interaction}")`),!1;if(!Nt(r,s))return!1;let l=br(e.meta)??[],p=br(r.meta)??[];return l.length&&!l.some(g=>p.some(v=>v.reference===g.reference))?(i?.debug("Subscription suppressed due to mismatched accounts",{subscriptionId:e.id,resource:O(r)}),!1):!0}function vl(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 Zo(r,e,t){let n=pe(r,"https://medplum.com/fhir/StructureDefinition/fhir-path-criteria-expression");if(!n?.valueString)return!0;let i=await t(e),o={"%current":b(e),"%previous":b(i??{})};return w(n.valueString,[b(e)],o,yl)?.[0]?.value===!0}var Br="5.1.18-728d66a",Tl="medplum-cli",ns=k.FHIR_JSON+", */*; q=0.1",Sl="https://api.medplum.com/",bl=1e3,El=6e4,Rl=0,Cl=3e5,Pl="Binary/",es={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},qe={ClientCredentials:"client_credentials",AuthorizationCode:"authorization_code",RefreshToken:"refresh_token",JwtBearer:"urn:ietf:params:oauth:grant-type:jwt-bearer",TokenExchange:"urn:ietf:params:oauth:grant-type:token-exchange",PreAuthorizedCode:"urn:ietf:params:oauth:grant-type:pre-authorized_code"},is={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"},Al={ClientSecretBasic:"client_secret_basic",ClientSecretPost:"client_secret_post",ClientSecretJwt:"client_secret_jwt",PrivateKeyJwt:"private_key_jwt",None:"none"},os={JwtBearer:"urn:ietf:params:oauth:client-assertion-type:jwt-bearer"},wl={ES256:"ES256",ES384:"ES384",ES512:"ES512",HS256:"HS256",RS256:"RS256",RS384:"RS384",RS512:"RS512"},Gt=class extends te{constructor(t){super();c(this,"options");c(this,"fetch");c(this,"createPdfImpl");c(this,"storage");c(this,"requestCache");c(this,"cacheTime");c(this,"baseUrl");c(this,"fhirBaseUrl");c(this,"authorizeUrl");c(this,"tokenUrl");c(this,"logoutUrl");c(this,"fhircastHubUrl");c(this,"cdsServicesUrl");c(this,"defaultHeaders");c(this,"onUnauthenticated");c(this,"autoBatchTime");c(this,"autoBatchQueue");c(this,"maxRetries");c(this,"maxRetryTime");c(this,"refreshGracePeriod");c(this,"subscriptionManager");c(this,"medplumServer");c(this,"clientId");c(this,"clientSecret");c(this,"credentialsInHeader");c(this,"autoBatchTimerId");c(this,"accessToken");c(this,"accessTokenExpires");c(this,"refreshToken");c(this,"refreshPromise");c(this,"profilePromise");c(this,"sessionDetails");c(this,"currentRateLimits");c(this,"basicAuth");c(this,"initPromise");c(this,"initComplete",!0);c(this,"keyValueClient");c(this,"logLevel");if(t?.baseUrl&&!t.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");this.options=t??{},this.fetch=t?.fetch??Ol(),this.storage=t?.storage??new nt(void 0,t?.storagePrefix),this.createPdfImpl=t?.createPdf,this.baseUrl=Ar(t?.baseUrl??Sl),this.fhirBaseUrl=U(this.baseUrl,t?.fhirUrlPath??"fhir/R4"),this.authorizeUrl=U(this.baseUrl,t?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=U(this.baseUrl,t?.tokenUrl??"oauth2/token"),this.logoutUrl=U(this.baseUrl,t?.logoutUrl??"oauth2/logout"),this.fhircastHubUrl=U(this.baseUrl,t?.fhircastHubUrl??"fhircast/STU3"),this.cdsServicesUrl=U(this.baseUrl,t?.cdsServicesUrl??"cds-services"),this.clientId=t?.clientId??"",this.clientSecret=t?.clientSecret??"",this.credentialsInHeader=t?.authCredentialsMethod==="header",this.defaultHeaders=t?.defaultHeaders??{},this.onUnauthenticated=t?.onUnauthenticated,this.refreshGracePeriod=t?.refreshGracePeriod??Cl,this.logLevel=this.initializeLogLevel(t),this.maxRetries=t?.maxRetries??2,this.maxRetryTime=t?.maxRetryTime??2e3,this.cacheTime=t?.cacheTime??(z()?El:Rl),this.cacheTime>0?this.requestCache=new K(t?.resourceCacheSize??bl):this.requestCache=void 0,t?.autoBatchTime?(this.autoBatchTime=t.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0),t?.accessToken&&this.setAccessToken(t.accessToken),this.storage.getInitPromise===void 0?(t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initPromise=Promise.resolve(),this.dispatchEvent({type:"storageInitialized"})):(this.initComplete=!1,this.initPromise=this.storage.getInitPromise(),this.initPromise.then(()=>{t?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initComplete=!0,this.dispatchEvent({type:"storageInitialized"})}).catch(n=>{console.error(n),this.initComplete=!0,this.dispatchEvent({type:"storageInitFailed",payload:{error:n}})})),this.setupStorageListener()}get isInitialized(){return this.initComplete}getInitPromise(){return this.initPromise}initializeLogLevel(t){return t?.logLevel?t.logLevel:t?.verbose!==void 0&&t.verbose?"verbose":"none"}async attemptResumeActiveLogin(){let t=this.getActiveLogin();t&&(this.setAccessToken(t.accessToken,t.refreshToken),await this.refreshProfile())}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}getFhircastHubUrl(){return this.fhircastHubUrl}getCdsServicesUrl(){return this.cdsServicesUrl}getDefaultHeaders(){return this.defaultHeaders}clear(){this.storage.clear(),this.clearActiveLogin()}clearActiveLogin(){this.storage.setString("activeLogin",void 0),this.requestCache?.clear(),this.accessToken=void 0,this.refreshToken=void 0,this.refreshPromise=void 0,this.accessTokenExpires=void 0,this.sessionDetails=void 0,this.medplumServer=void 0,this.dispatchEvent({type:"change"})}invalidateUrl(t){t=t.toString(),this.requestCache?.delete(t)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(t){let n=U(this.fhirBaseUrl,t);for(let i of this.requestCache?.keys()??y)(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache?.delete(i)}get(t,n={}){t=t.toString();let i=this.getCacheEntry(t,n);if(i)return i.value;let o;t.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue&&!n.disableAutoBatch?o=new Promise((a,u)=>{this.autoBatchQueue.push({method:"GET",url:t.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:u}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):(n.method="GET",o=this.request(t,n));let s=new W(o);return this.setCacheEntry(t,s,n),s}post(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),o.method="POST",this.request(t,o)}put(t,n,i,o={}){return t=t.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),o.method="PUT",this.request(t,o)}patch(t,n,i={}){return t=t.toString(),this.setRequestBody(i,n),this.setRequestContentType(i,k.JSON_PATCH),this.invalidateUrl(t),i.method="PATCH",this.request(t,i)}delete(t,n={}){return t=t.toString(),this.invalidateUrl(t),n.method="DELETE",this.request(t,n)}async startNewUser(t,n){let{codeChallengeMethod:i,codeChallenge:o}=await this.startPkce();return this.post("auth/newuser",{...t,clientId:t.clientId??this.clientId,codeChallengeMethod:i,codeChallenge:o},void 0,n)}async startNewProject(t,n){return this.post("auth/newproject",t,void 0,n)}async startNewPatient(t,n){return this.post("auth/newpatient",t,void 0,n)}async startLogin(t,n){return this.post("auth/login",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async startGoogleLogin(t,n){return this.post("auth/google",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async ensureCodeChallenge(t){return t.codeChallenge?t:{...t,...await this.startPkce()}}async signOut(){await this.post(this.logoutUrl,{}),this.clear()}async signInWithRedirect(t){let i=new URLSearchParams(ce.getSearch()).get("code");if(!i){await this.requestAuthorization(t);return}return this.processCode(i)}signOutWithRedirect(){ce.assign(this.logoutUrl)}async signInWithExternalAuth(t,n,i,o,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),ce.assign(this.getExternalAuthRedirectUri(t,n,i,a,s))}async exchangeExternalAccessToken(t,n,i){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");let o={grant_type:qe.TokenExchange,subject_token_type:is.AccessToken,client_id:n,subject_token:t};return i&&(o.membership_id=i),this.fetchTokens(o)}getExternalAuthRedirectUri(t,n,i,o,s=!0){let a=new URL(t);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",n),a.searchParams.set("redirect_uri",i),a.searchParams.set("scope",o.scope??"openid profile email"),a.searchParams.set("state",JSON.stringify(o)),s){let{codeChallenge:u,codeChallengeMethod:l}=o;if(!l)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!u)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");a.searchParams.set("code_challenge_method",l),a.searchParams.set("code_challenge",u)}return a.toString()}fhirUrl(...t){return new URL(U(this.fhirBaseUrl,t.join("/")))}fhirSearchUrl(t,n){let i=this.fhirUrl(t);return n&&(i.search=Wn(n)),i}search(t,n,i){let o=this.fhirSearchUrl(t,n),s="search-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=this.getBundle(o,i);return this.setCacheEntry(s,u,i),u}searchOne(t,n,i){let o=this.fhirSearchUrl(t,n);o.searchParams.set("_count","1"),o.searchParams.sort();let s="searchOne-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=new W(this.search(t,o.searchParams,i).then(l=>l.entry?.[0]?.resource));return this.setCacheEntry(s,u,i),u}searchResources(t,n,i){let s="searchResources-"+this.fhirSearchUrl(t,n).toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=new W(this.search(t,n,i).then(rs));return this.setCacheEntry(s,u,i),u}async*searchResourcePages(t,n,i){let o=this.fhirSearchUrl(t,n);for(;o;){let s=new URL(o).searchParams;s.has("_count")||s.set("_count","1000");let a=await this.search(t,s,i),u=a.link?.find(l=>l.relation==="next");if(!a.entry?.length&&!u)break;yield rs(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 es;let[i,o]=n.split("/");if(!(!i||!o))return this.getCached(i,o)}readResource(t,n,i){if(!n)throw new Error('The "id" parameter cannot be null, undefined, or an empty string.');return this.get(this.fhirUrl(t,n),i)}readReference(t,n){let i=t.reference;if(!i)return new W(Promise.reject(new Error("Missing reference")));if(i==="system")return new W(Promise.resolve(es));let[o,s]=i.split("/");return!o||!s?new W(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}readCanonical(t,n,i){return Array.isArray(t)?this.searchOne("",{_type:t.join(","),url:n},i):this.searchOne(t,"url="+n,i)}requestSchema(t,n){if(xn(t))return Promise.resolve();let i=t+"-requestSchema",o=this.getCacheEntry(i,void 0);if(o)return o.value;let s=new W((async()=>{let a=`{
5
5
  StructureDefinitionList(_filter: "name eq ${t}") {
6
6
  resourceType,
7
7
  name,
@@ -41,17 +41,17 @@
41
41
  expression,
42
42
  target
43
43
  }
44
- }`.replaceAll(/\s+/g," "),u=await this.graphql(a);lr(u.data.StructureDefinitionList);for(let l of u.data.SearchParameterList)Or(l)})());return this.setCacheEntry(i,s,n),s}requestProfileSchema(t,n){if(!n?.expandProfile&&vn(t))return Promise.resolve();let i=t+"-requestSchema"+(n?.expandProfile?"-nested":""),o=this.getCacheEntry(i,void 0);if(o)return o.value;let s=new W((async()=>{if(n?.expandProfile){let a=this.fhirUrl("StructureDefinition","$expand-profile");a.search=new URLSearchParams({url:t}).toString();let u=await this.post(a.toString(),{});lr(u)}else{let a=await this.searchOne("StructureDefinition",{url:t,_sort:"-_lastUpdated"});if(!a){console.warn(`No StructureDefinition found for ${t}!`);return}dr(a)}})());return this.setCacheEntry(i,s,n),s}readHistory(t,n,i,o){let s=this.fhirUrl(t,n,"_history");return i?.count&&s.searchParams.set("_count",i.count.toString()),i?.offset&&s.searchParams.set("_offset",i.offset.toString()),this.get(s.toString(),o)}readVersion(t,n,i,o){return this.get(this.fhirUrl(t,n,"_history",i),o)}readPatientEverything(t,n){return this.getBundle(this.fhirUrl("Patient",t,"$everything"),n)}readPatientSummary(t,n){return this.getBundle(this.fhirUrl("Patient",t,"$summary"),n)}createResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");return this.invalidateSearches(t.resourceType),this.post(this.fhirUrl(t.resourceType),t,void 0,n)}async createResourceIfNoneExist(t,n,i={}){let o=this.fhirUrl(t.resourceType);this.setRequestHeader(i,"If-None-Exist",n);let s=await this.post(o,t,void 0,i);return this.cacheResource(s,i),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),s}async upsertResource(t,n,i){let o=this.fhirSearchUrl(t.resourceType,n),s=await this.put(o,t,void 0,i);return s||(s=t),this.cacheResource(s,i),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),s}async createAttachment(t,n,i,o,s){let a=ui(t,n,i,o);if(a.contentType===k.XML){let p=a.data,g;p instanceof Blob?g=await new Promise((v,M)=>{let te=new FileReader;te.onload=()=>{if(!te.result){M(new Error("Failed to load file"));return}v(te.result)},te.readAsText(p,"utf-8")}):ArrayBuffer.isView(p)?g=new TextDecoder().decode(p):g=p,g.includes("<ClinicalDocument")&&g.includes("urn:hl7-org:v3")&&(a={...a,contentType:k.CDA_XML})}let u=s??(typeof n=="object"?n:{}),l=await this.createBinary(a,u);return{contentType:a.contentType,url:l.url,title:a.filename}}createBinary(t,n,i,o,s){let a=ui(t,n,i,o),u=s??(typeof n=="object"?n:{}),{data:l,contentType:p,filename:g,securityContext:v,onProgress:M}=a,te=this.fhirUrl("Binary");return g&&te.searchParams.set("_filename",g),v?.reference&&this.setRequestHeader(u,"X-Security-Context",v.reference),M?this.uploadwithProgress(te,l,p,M,u):this.post(te,l,p,u)}uploadwithProgress(t,n,i,o,s){return new Promise((a,u)=>{let l=new XMLHttpRequest,p=()=>l.abort();s?.signal?.addEventListener("abort",p);let g=v=>{s?.signal?.removeEventListener("abort",p),v instanceof Error?u(v):a(v)};if(l.responseType="json",l.onabort=()=>g(new DOMException("Request aborted","AbortError")),l.onerror=()=>g(new Error("Request error")),o&&(l.upload.onprogress=v=>o(v),l.upload.onload=v=>o(v)),l.onload=()=>{l.status>=200&&l.status<300?g(l.response):g(new f(ut(l.response||l.statusText)))},l.open("POST",t),l.withCredentials=!0,l.setRequestHeader("Authorization","Bearer "+this.accessToken),l.setRequestHeader("Cache-Control","no-cache, no-store, max-age=0"),l.setRequestHeader("Content-Type",i),this.options.extendedMode!==!1&&l.setRequestHeader("X-Medplum","extended"),s?.headers){let v=s.headers;for(let[M,te]of Object.entries(v))l.setRequestHeader(M,te)}l.send(n)})}async createPdf(t,n,i,o){if(!this.createPdfImpl)throw new Error("PDF creation not enabled");let s=os(t,n,i,o),a=typeof n=="object"?n:{},{docDefinition:u,tableLayouts:l,fonts:p,...g}=s,v=await this.createPdfImpl(u,l,p),M={...g,data:v,contentType:"application/pdf"};return this.createBinary(M,a)}createComment(t,n,i){let o=this.getProfile(),s,a;return t.resourceType==="Encounter"&&(s=Ee(t),a=t.subject),t.resourceType==="ServiceRequest"&&(s=t.encounter,a=t.subject),t.resourceType==="Patient"&&(a=Ee(t)),this.createResource({resourceType:"Communication",status:"completed",basedOn:[Ee(t)],encounter:s,subject:a,sender:o?Ee(o):void 0,sent:new Date().toISOString(),payload:[{contentString:n}]},i)}async updateResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");if(!t.id)throw new Error("Missing id");let i=await this.put(this.fhirUrl(t.resourceType,t.id),t,void 0,n);return i||(i=t),this.cacheResource(i,n),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),i}async patchResource(t,n,i,o){let s=await this.patch(this.fhirUrl(t,n),i,o);return this.cacheResource(s,o),this.invalidateUrl(this.fhirUrl(t,n,"_history")),this.invalidateSearches(t),s}deleteResource(t,n,i){return this.deleteCacheEntry(this.fhirUrl(t,n).toString()),this.invalidateSearches(t),this.delete(this.fhirUrl(t,n),i)}validateResource(t,n){return this.post(this.fhirUrl(t.resourceType,"$validate"),t,void 0,n)}executeBot(t,n,i,o){let s;if(typeof t=="string"){let a=t;s=this.fhirUrl("Bot",a,"$execute")}else{let a=t;s=this.fhirUrl("Bot","$execute"),s.searchParams.set("identifier",a.system+"|"+a.value)}return this.post(s,n,i,o)}executeBatch(t,n){return this.post(this.fhirBaseUrl,t,void 0,n)}sendEmail(t,n){return this.post("email/v1/send",t,k.JSON,n)}graphql(t,n,i,o){return this.post(this.fhirUrl("$graphql"),{query:t,operationName:n,variables:i},k.JSON,o)}readResourceGraph(t,n,i,o){return this.get(`${this.fhirUrl(t,n)}/$graph?graph=${i}`,o)}pushToAgent(t,n,i,o,s,a){let{waitTimeout:u,returnAck:l,...p}=a??{};return this.post(this.fhirUrl("Agent",Re(t),"$push"),{destination:typeof n=="string"?n:O(n),body:i,contentType:o,waitForResponse:s,...u!==void 0?{waitTimeout:u}:void 0,...l!==void 0?{returnAck:l}:void 0},k.FHIR_JSON,p)}getCdsServices(t){return this.get(this.cdsServicesUrl,t)}callCdsService(t,n,i){return this.post(U(this.cdsServicesUrl,t),n,k.JSON,i)}getActiveLogin(){return this.storage.getObject("activeLogin")}async setActiveLogin(t){(!this.sessionDetails?.profile||O(this.sessionDetails.profile)!==t.profile?.reference)&&this.clearActiveLogin(),this.setAccessToken(t.accessToken,t.refreshToken),this.storage.setObject("activeLogin",t),this.addLogin(t),this.refreshPromise=void 0,await this.refreshProfile()}getAccessToken(){return this.accessToken}isAuthenticated(t){return this.accessTokenExpires!==void 0&&Date.now()<this.accessTokenExpires-(t??this.refreshGracePeriod)}setAccessToken(t,n){this.accessToken=t,this.refreshToken=n,this.accessTokenExpires=si(t),this.medplumServer=oi(t)}getLogins(){return this.storage.getObject("logins")??[]}addLogin(t){let n=this.getLogins().filter(i=>i.profile?.reference!==t.profile?.reference);n.push(t),this.storage.setObject("logins",n)}async refreshProfile(){if(this.medplumServer)return this.profilePromise=new Promise((t,n)=>{this.get("auth/me",{cache:"no-cache"}).then(i=>{this.profilePromise=void 0;let o=this.sessionDetails?.profile?.id!==i.profile.id;this.sessionDetails=i,this.syncStoredLoginProject(),o&&this.dispatchEvent({type:"change"}),t(i.profile),this.dispatchEvent({type:"profileRefreshed"})}).catch(n)}),this.dispatchEvent({type:"profileRefreshing"}),this.profilePromise}syncStoredLoginProject(){let t=this.getActiveLogin(),n=this.sessionDetails?.project?.name;if(!t||!n||t.project.display===n)return;let i={...t,project:{...t.project,display:n}};this.storage.setObject("activeLogin",i),this.addLogin(i)}isLoading(){return!this.isInitialized||!!this.profilePromise&&!this.sessionDetails?.profile}isSuperAdmin(){return!!this.sessionDetails?.project.superAdmin}isProjectAdmin(){return!!this.sessionDetails?.membership.admin}getProject(){return this.sessionDetails?.project}getProjectMembership(){return this.sessionDetails?.membership}getProfile(){return this.sessionDetails?.profile}async getProfileAsync(){return this.profilePromise?this.profilePromise:this.sessionDetails?this.sessionDetails.profile:this.refreshProfile()}getUserConfiguration(){return this.sessionDetails?.config}getAccessPolicy(){return this.sessionDetails?.accessPolicy}async download(t,n={}){return(await this.downloadResponse(t,n)).blob()}async downloadResponse(t,n={}){this.refreshPromise&&await this.refreshPromise;let i=t.toString();i.startsWith(Rl)&&(t=this.fhirUrl(i));let o=n.headers;return o||(o={},n.headers=o),o.Accept||(o.Accept="*/*"),this.addFetchOptionsDefaults(n),this.fetchWithRetry(t.toString(),n)}async createMedia(t,n){let{additionalFields:i,...o}=t,s=await this.createResource({resourceType:"Media",status:"preparation",content:{contentType:t.contentType},...i});o.securityContext||(o.securityContext=Ee(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=Ee(s));let a=await this.createAttachment(o,n);return this.updateResource({...s,content:[{attachment:a}]})}async bulkExport(t="",n,i,o){let s=t&&`${t}/`,a=this.fhirUrl(`${s}$export`);return n&&a.searchParams.set("_type",n),i&&a.searchParams.set("_since",i),this.startAsyncRequest(a.toString(),o)}async startAsyncRequest(t,n={}){this.addFetchOptionsDefaults(n);let i=n.headers;return i.Prefer="respond-async",n.method="POST",this.request(t,n)}async wrappedFetch(t,n){return await this.refreshIfExpired(),this.addFetchOptionsDefaults(n),this.fetchWithRetry(t,n)}get keyValue(){return this.keyValueClient||(this.keyValueClient=new qt(this)),this.keyValueClient}getBundle(t,n){return new W((async()=>{let i=await this.get(t,n);for(let o of i.entry??y)this.cacheResource(o.resource,n);return i})())}isCacheEnabled(t){return!!this.requestCache&&!this.getRequestHeader(t,"x-medplum-on-behalf-of")}getCacheEntry(t,n){if(!this.isCacheEnabled(n)||n?.cache==="no-cache"||n?.cache==="reload")return;let i=this.requestCache.get(t);if(!(!i||i.requestTime+this.cacheTime<Date.now()))return i}setCacheEntry(t,n,i){this.isCacheEnabled(i)&&(this.requestCache.set(t,{requestTime:Date.now(),value:n}),i?.signal&&i.signal.addEventListener("abort",()=>{this.requestCache.delete(t)}))}cacheResource(t,n){t?.id&&!t.meta?.tag?.some(i=>i.code==="SUBSETTED")&&this.setCacheEntry(this.fhirUrl(t.resourceType,t.id).toString(),new W(Promise.resolve(t)),n)}deleteCacheEntry(t){this.requestCache&&this.requestCache.delete(t)}async request(t,n={},i={}){let o=await this.wrappedFetch(t,n);if(o.status===401)return this.handleUnauthenticated(t,n);if(o.status===204||o.status===304)return;let a=o.headers.get("content-type")?.includes("json");if(o.status===404&&!a)throw new f(cn);let u=await this.parseBody(o,a);if(o.status===200&&n.followRedirectOnOk||o.status===201&&n.followRedirectOnCreated){let l=await es(o,u);if(l)return this.request(l,{...n,method:"GET",body:void 0})}if(o.status===202&&n.pollStatusOnAccepted){let p=await es(o,u)??i.statusUrl;if(p)return this.pollStatus(p,n,i)}if(o.status>=400)throw new f(ut(u));return u}async parseBody(t,n){let i;if(t.headers.get("content-length")!=="0"){if(n)try{i=await t.json()}catch(o){throw console.error("Error parsing response",t.status,o),o}else i=await t.text();return i}}async fetchWithRetry(t,n){t.startsWith("http")||(t=U(this.baseUrl,t));let i=n?.maxRetries??this.maxRetries;for(let o=0;o<=i;o++)try{this.logLevel!=="none"&&this.logRequest(t,n);let s=await this.fetch(t,n);if(this.logLevel!=="none"&&this.logResponse(s),this.setCurrentRateLimit(s),o>=i||!Il(s))return s;let a=this.getRetryDelay(o),u=n.maxRetryTime??this.maxRetryTime;if(a>u)return s;await Pr(a,{signal:n.signal})}catch(s){if(s.message==="Failed to fetch"&&o===0&&this.dispatchEvent({type:"offline"}),s.name==="AbortError"||o===i)throw s}throw new Error("Unreachable")}logRequest(t,n){if(console.log(`> ${n.method} ${t}`),this.logLevel==="verbose"&&n.headers){let i=n.headers;for(let o of vt(Object.keys(i)))console.log(`> ${o}: ${i[o]}`)}}logResponse(t){console.log(`< ${t.status} ${t.statusText}`),this.logLevel==="verbose"&&t.headers&&t.headers.forEach((n,i)=>console.log(`< ${i}: ${n}`))}setCurrentRateLimit(t){if(!t?.headers||typeof t.headers.get!="function")return;let n=t.headers.get("ratelimit");n&&(this.currentRateLimits=n)}rateLimitStatus(){if(!this.currentRateLimits)return[];let t=this.currentRateLimits;return t.split(",").map(n=>{let i=n.split(";").map(p=>p.trim());if(i.length!==3)throw new Error("Could not parse RateLimit header: "+t);let o=i[0].substring(1,i[0].length-1),s=i.find(p=>p.startsWith("r="))?.substring(2),a=s?Number.parseInt(s,10):Number.NaN,u=i.find(p=>p.startsWith("t="))?.substring(2),l=u?Number.parseInt(u,10):Number.NaN;if(!o||Number.isNaN(a)||Number.isNaN(l))throw new Error("Could not parse RateLimit header: "+t);return{name:o,remainingUnits:a,secondsUntilReset:l,resetsAfter:Math.ceil((Date.now()+1e3*l)/1e3)}})}getRetryDelay(t){let n=this.rateLimitStatus(),i=500*Math.pow(1.5,t);for(let o of n)o.remainingUnits||(i=Math.max(i,o.secondsUntilReset*1e3));return i}async pollStatus(t,n,i){let o={...n,method:"GET",body:void 0,redirect:"follow"};if(i.pollCount===void 0)n.headers&&typeof n.headers=="object"&&"Prefer"in n.headers&&(o.headers={...n.headers},delete o.headers.Prefer),i.statusUrl=t,i.pollCount=1;else{let s=n.pollStatusPeriod??1e3;await Pr(s,{signal:n.signal}),i.pollCount++}return this.request(t,{...n,method:"GET"},i)}async executeAutoBatch(){if(this.autoBatchQueue===void 0)return;let t=[...this.autoBatchQueue];if(this.autoBatchQueue.length=0,this.autoBatchTimerId=void 0,t.length===1){let o=t[0];try{o.options.method=o.method,o.resolve(await this.request(U(this.fhirBaseUrl,o.url),o.options))}catch(s){o.reject(new f(ut(s)))}return}let n={resourceType:"Bundle",type:"batch",entry:t.map(o=>({request:{method:o.method,url:o.url},resource:o.options.body?JSON.parse(o.options.body):void 0}))},i=await this.post(this.fhirBaseUrl,n);for(let o=0;o<t.length;o++){let s=t[o],a=i.entry?.[o];a?.response?.outcome&&!ar(a.response.outcome)?s.reject(new f(a.response.outcome)):s.resolve(a?.resource)}}addFetchOptionsDefaults(t){Object.entries(this.defaultHeaders).forEach(([n,i])=>{this.setRequestHeader(t,n,i)}),this.setRequestHeader(t,"Accept",rs,!0),this.options.extendedMode!==!1&&this.setRequestHeader(t,"X-Medplum","extended"),t.body&&this.setRequestHeader(t,"Content-Type",k.FHIR_JSON,!0),this.accessToken?this.setRequestHeader(t,"Authorization","Bearer "+this.accessToken):this.basicAuth&&this.setRequestHeader(t,"Authorization","Basic "+this.basicAuth),t.cache||(t.cache="no-cache"),t.credentials||(t.credentials="include")}setRequestContentType(t,n){this.setRequestHeader(t,"Content-Type",n)}getRequestHeader(t,n){let i=t?.headers;if(i)if(Array.isArray(i)){let o=i.find(([s])=>s.toLowerCase()===n.toLowerCase());return o?o[1]:void 0}else{if(i instanceof Headers)return i.get(n)??void 0;if(C(i))return i[n]??void 0}else return}setRequestHeader(t,n,i,o=!1){let s=t.headers;s?Array.isArray(s)?(!o||!s.some(([a])=>a.toLowerCase()===n.toLowerCase()))&&s.push([n,i]):s instanceof Headers?(!o||!s.has(n))&&s.set(n,i):C(s)&&(!o||!s[n])&&(s[n]=i):t.headers={[n]:i}}setRequestBody(t,n){typeof n=="string"||typeof Blob<"u"&&(n instanceof Blob||n?.constructor.name==="Blob")||typeof File<"u"&&(n instanceof File||n?.constructor.name==="File")||typeof Uint8Array<"u"&&(n instanceof Uint8Array||n?.constructor.name==="Uint8Array")?t.body=n:typeof n=="object"&&n!==null&&(typeof n.getReader=="function"||typeof n.pipe=="function"&&typeof n.on=="function")?(t.body=n,t.duplex="half"):n&&(t.body=JSON.stringify(n))}handleUnauthenticated(t,n){if(this.refresh())return this.request(t,n);throw this.clear(),this.onUnauthenticated?.(),new f(ke)}async startPkce(){let t=Vr();this.storage.setString("pkceState",t);let n=Vr().slice(0,128);this.storage.setString("codeVerifier",n);try{let i=await ei(n);return{codeChallengeMethod:"S256",codeChallenge:Ln(i).replaceAll("+","-").replaceAll("/","_").replaceAll("=","")}}catch(i){return console.warn("Failed to hash code verifier. Falling back to 'plain' code challenge method",i),{codeChallengeMethod:"plain",codeChallenge:n}}}async requestAuthorization(t){let n=await this.ensureCodeChallenge(t??{}),i=new URL(this.authorizeUrl);i.searchParams.set("response_type","code"),i.searchParams.set("state",this.storage.getString("pkceState")),i.searchParams.set("client_id",n.clientId??this.clientId),i.searchParams.set("redirect_uri",n.redirectUri??ae.getOrigin()),i.searchParams.set("code_challenge_method",n.codeChallengeMethod),i.searchParams.set("code_challenge",n.codeChallenge),i.searchParams.set("scope",n.scope??"openid profile"),ae.assign(i.toString())}processCode(t,n){let i={grant_type:We.AuthorizationCode,code:t,client_id:n?.clientId??this.clientId??"",redirect_uri:n?.redirectUri??ae.getOrigin()},o=this.storage.getString("codeVerifier");return o&&(i.code_verifier=o),this.fetchTokens(i)}refreshIfExpired(t){return!this.refreshPromise&&this.accessTokenExpires!==void 0&&!this.isAuthenticated(t)&&this.refresh(t),this.refreshPromise??Promise.resolve()}refresh(t){if(this.refreshPromise)return this.refreshPromise;if(!(!this.refreshToken&&!(this.clientId&&this.clientSecret)))return this.refreshPromise=this.runRefreshWithLock(t),this.refreshPromise}async runRefreshWithLock(t){let n=()=>{let s=this.getActiveLogin();return s?.accessToken&&s.accessToken!==this.accessToken&&this.setAccessToken(s.accessToken,s.refreshToken),this.isAuthenticated(t)?Promise.resolve(this.getProfile()):this.refreshToken?this.fetchTokens({grant_type:We.RefreshToken,client_id:this.clientId??"",refresh_token:this.refreshToken}):this.clientId&&this.clientSecret?this.startClientLogin(this.clientId,this.clientSecret):Promise.resolve(void 0)},i=typeof navigator<"u"?navigator.locks:void 0;if(!i?.request)return n();let o=`medplum-refresh:${this.storage.makeKey("activeLogin")}`;return i.request(o,n)}async startClientLogin(t,n){return this.clientId=t,this.clientSecret=n,this.fetchTokens({grant_type:We.ClientCredentials,client_id:t,client_secret:n})}async startJwtBearerLogin(t,n,i){return this.clientId=t,this.fetchTokens({grant_type:We.JwtBearer,client_id:t,assertion:n,scope:i})}async startJwtAssertionLogin(t){return this.fetchTokens({grant_type:We.ClientCredentials,client_assertion_type:is.JwtBearer,client_assertion:t})}setBasicAuth(t,n){this.clientId=t,this.clientSecret=n,this.basicAuth=Ft(t+":"+n)}setLogLevel(t){this.logLevel=t,this.options.verbose=t==="verbose"}getLogLevel(){return this.logLevel}setVerbose(t){this.logLevel=t?"verbose":"none",this.options.verbose=t}async fhircastSubscribe(t,n){if(!(typeof t=="string"&&t!==""))throw new f(T("Invalid topic provided. Topic must be a valid string."));if(!(typeof n=="object"&&Array.isArray(n)&&n.length>0))throw new f(T("Invalid events provided. Events must be an array of event names containing at least one event."));let i={channelType:"websocket",mode:"subscribe",topic:t,events:n},s=(await this.post(this.fhircastHubUrl,Lr(i),k.FORM_URL_ENCODED))["hub.channel.endpoint"];if(!s)throw new Error("Invalid response!");return i.endpoint=s,i}async fhircastUnsubscribe(t){if(!Bt(t))throw new f(T("Invalid topic or subscriptionRequest. SubscriptionRequest must be an object."));if(!(t.endpoint&&typeof t.endpoint=="string"&&t.endpoint.startsWith("ws")))throw new f(T("Provided subscription request must have an endpoint in order to unsubscribe."));t.mode="unsubscribe",await this.post(this.fhircastHubUrl,Lr(t),k.FORM_URL_ENCODED)}fhircastConnect(t){return new Ut(t)}async fhircastPublish(t,n,i,o){return ti(n)?this.post(this.fhircastHubUrl,Nr(t,n,i,o),k.JSON):(ri(n),this.post(this.fhircastHubUrl,Nr(t,n,i),k.JSON))}async fhircastGetContext(t){return this.get(`${this.fhircastHubUrl}/${t}`,{cache:"no-cache"})}async invite(t,n){return this.post("admin/projects/"+t+"/invite",n)}async handleTokenError(t){try{let n=await t.json();throw $e(n)?new f(n):n.error_description?new f(P(n.error_description)):new Error(JSON.stringify(n))}catch(n){throw n instanceof f?(n.message=`Failed to fetch tokens: ${n.message}`,n):new f(P("Failed to fetch tokens"),{cause:n})}}async fetchTokens(t){let n=new URLSearchParams(t),i={...this.defaultHeaders,"Content-Type":k.FORM_URL_ENCODED};this.basicAuth&&(i.Authorization=`Basic ${this.basicAuth}`),this.credentialsInHeader&&(n.delete("client_id"),n.delete("client_secret"),!this.basicAuth&&t.client_id&&t.client_secret&&(i.Authorization=`Basic ${Ft(t.client_id+":"+t.client_secret)}`));let o={method:"POST",headers:i,body:n.toString(),credentials:"include"},s;try{s=await this.fetchWithRetry(this.tokenUrl,o)}catch(u){throw this.refreshPromise=void 0,u}s.ok||(this.clearActiveLogin(),this.onUnauthenticated?.(),await this.handleTokenError(s));let a=await s.json();return await this.verifyTokens(a),this.getProfile()}async verifyTokens(t){let n=t.access_token;if(ii(n)){let i=Wt(n);if(Date.now()>=i.exp*1e3)throw this.clearActiveLogin(),new f(un);if(i.cid){if(i.cid!==this.clientId)throw this.clearActiveLogin(),new f(or)}else if(this.clientId&&i.client_id!==this.clientId)throw this.clearActiveLogin(),new f(or)}return this.setActiveLogin({accessToken:n,refreshToken:t.refresh_token,project:t.project,profile:t.profile})}checkSessionDetailsMatchLogin(t){return this.sessionDetails&&t?t.profile?.reference?.endsWith(this.sessionDetails.profile.id)??!1:!0}setupStorageListener(){try{window.addEventListener("storage",t=>{if(t.key===null)ae.reload();else if(t.key===this.storage.makeKey("activeLogin")){let n=t.oldValue?JSON.parse(t.oldValue):void 0,i=t.newValue?JSON.parse(t.newValue):void 0;n?.profile.reference!==i?.profile.reference||!this.checkSessionDetailsMatchLogin(i)?ae.reload():i?this.setAccessToken(i.accessToken,i.refreshToken):this.clear()}})}catch{}}getSubscriptionManager(){return this.subscriptionManager||(this.subscriptionManager=new Ht(this,Bn(this.baseUrl,"/ws/subscriptions-r4"))),this.subscriptionManager}subscribeToCriteria(t,n){return this.getSubscriptionManager().addCriteria(t,n)}unsubscribeFromCriteria(t,n){this.subscriptionManager&&this.subscriptionManager.removeCriteria(t,n)}getMasterSubscriptionEmitter(){return this.getSubscriptionManager().getMasterEmitter()}};function Al(){if(!globalThis.fetch)throw new Error("Fetch not available in this environment");return globalThis.fetch.bind(globalThis)}async function es(r,e){let t=r.headers.get("content-location");if(t)return t;let n=r.headers.get("location");if(n)return n;if($e(e)&&e.issue?.[0]?.diagnostics)return e.issue[0].diagnostics}function ts(r){let e=r.entry?.map(t=>t.resource)??[];return Object.assign(e,{bundle:r})}function wl(r){return C(r)&&"data"in r&&"contentType"in r}function ui(r,e,t,n){return wl(r)?r:{data:r,filename:e,contentType:t,onProgress:n}}function Ol(r){return C(r)&&"docDefinition"in r}function os(r,e,t,n){return Ol(r)?r:{docDefinition:r,filename:e,tableLayouts:t,fonts:n}}function Il(r){return r.status===429||r.status>=500}var kl={aws_ssm_parameter_store:"aws_ssm_parameter_store"};function Vl(r,e,t){let n=new Wr;Array.isArray(r)||(r=r.entry?.map(i=>i.resource)??[]);for(let i of r)n.addObservation(i);return n.summarize(e,t)}var Wr=class{constructor(e){c(this,"code");c(this,"unit");c(this,"sampling");c(this,"dataPoints");this.dataPoints=[],this.code=e?.code,this.unit=e?.unit,this.sampling=e?.sampling}addObservation(e){if(!this.code)this.code=e.code;else if(!Dl(this.code,e.code))throw new Error("Observation does not match code of sampled data");e.valueQuantity?.value!==void 0?(this.checkUnit(e.valueQuantity),this.addData(e.valueQuantity.value)):e.valueInteger!==void 0?this.addData(e.valueInteger):e.valueSampledData?.data&&(this.checkUnit(e.valueSampledData.origin),this.addData(...li(e.valueSampledData)))}addData(...e){this.dataPoints.push(...e)}checkUnit(e){if(!this.unit)this.unit=e;else if(e.code&&e.system){if(this.unit.system!==e.system||this.unit.code!==e.code)throw new Error("Incorrect unit for Observation")}else if(e.unit&&this.unit.unit!==e.unit)throw new Error("Incorrect unit for Observation")}summarize(e,t){if(!this.code)throw new Error("Code is required for data points");let n=t(this.dataPoints);return{resourceType:"Observation",status:"final",code:e,valueQuantity:typeof n=="number"?{...this.unit,value:n}:n,component:[{code:this.code,valueSampledData:{origin:{...this.unit,value:0},dimensions:1,period:0,...this.sampling,data:Ml(this.dataPoints,this.sampling)}}]}}};function Dl(r,e){return!!r.coding?.some(t=>e.coding?.some(n=>t.system===n.system&&t.code===n.code))}function li(r){return r.data?.split(" ").map(e=>Number.parseFloat(e)*(r.factor??1)+(r.origin.value??0))??[]}function Ml(r,e){if(r.length)return r.map(t=>(t-(e?.origin.value??0))/(e?.factor??1)).join(" ")}function _l(r){let e=[],t=r.effectiveInstant??r.effectiveDateTime??r.effectivePeriod?.start,n=t?Date.parse(t).valueOf():0;r.valueSampledData&&e.push(...ss(r.valueSampledData,n,r));for(let i of r.component??y)i.valueSampledData&&e.push(...ss(i.valueSampledData,n,{...r,...i}));return e}function ss(r,e,t){let n=[],i=li(r),o=O(t);for(let s=0;s<i.length;s++){let a=i[s],u=e+Math.floor(s/r.dimensions)*r.period;n.push({...t,id:void 0,effectiveInstant:void 0,effectivePeriod:void 0,effectiveTiming:void 0,effectiveDateTime:u?new Date(u).toISOString():void 0,valueQuantity:{...r.origin,value:a},valueSampledData:void 0,component:void 0,derivedFrom:o?[...t.derivedFrom??[],{reference:o}]:t.derivedFrom})}return n}function jr({parentContext:r,path:e,elements:t,profileUrl:n,debugMode:i,accessPolicyResource:o}){if(e===r?.path)return;i??=r?.debugMode??!1,o??=r?.accessPolicyResource;let s=Ll(e,t,r,!!i),a=Le(e,".",2)[1];s=Nl(s,o,a),s=Fl(s,o,a);let u=Object.create(null);for(let[p,g]of Object.entries(s))u[e+"."+p]=g;let l;if(r&&!r.isDefaultContext)l=r.getExtendedProps;else{let p=Object.create(null);l=g=>{let v=Le(g,".",2)[1];if(v){if(!p[v]){let M=qr(v,o?.hiddenFields);p[v]={hidden:M,readonly:M||qr(v,o?.readonlyFields)}}return p[v]}}}return{path:e,elements:s,elementsByPath:u,profileUrl:n??r?.profileUrl,debugMode:i,getExtendedProps:l,accessPolicyResource:o}}function Ll(r,e,t,n){let i=Object.create(null);if(t)for(let[s,a]of Object.entries(t.elementsByPath)){let u=fe(r,s);u!==void 0&&(i[u]=a)}let o=!1;if(e)for(let[s,a]of Object.entries(e))s in i||(i[s]=a,o=!0);return n&&console.assert(o,"Unnecessary ElementsContext; not using any newly provided elements"),i}function Nl(r,e,t){if(!e?.hiddenFields?.length)return r;let n=t?t+".":"";return Object.fromEntries(Object.entries(r).filter(([i])=>!qr(n+i,e.hiddenFields)))}function Fl(r,e,t){if(!e?.readonlyFields?.length)return r;let n=Object.create(null),i=t?t+".":"";for(let[o,s]of Object.entries(r))qr(i+o,e.readonlyFields)?n[o]={...s,readonly:!0}:n[o]=s;return n}function qr(r,e){if(!e?.length)return!1;let t=r.split(".");for(let n=1;n<=t.length;n++){let i=t.slice(0,n).join(".");if(e.includes(i))return!0}return!1}function di(r){return r.type!==void 0&&r.type.length>0}function Ul(r,e,t,n){let i=De(r,e.path,{profileUrl:n});if(i){let o=t.typeSchema?.elements??t.elements;return i.some(s=>gr(s,e,t,o))??!1}return console.assert(!1,"getNestedProperty[%s] in isDiscriminatorComponentMatch missed",e.path),!1}function pi(r,e,t,n){if(r)for(let i of e){let o={value:r,type:i.typeSchema?.type??i.type?.[0].code};if(t.every(s=>Ul(o,s,i,i.typeSchema?.url??n)))return i.name}}var Qt=class{constructor(e,t,n){c(this,"rootSchema");c(this,"visitor");c(this,"elementsContextStack");c(this,"sliceAllowList");if(e.type===void 0)throw new Error("schema must include a type");this.rootSchema=e;let i=jr({parentContext:void 0,path:this.rootSchema.type,elements:n??this.rootSchema.elements,profileUrl:this.rootSchema.name===this.rootSchema.type?void 0:this.rootSchema.url});if(i===void 0)throw new Error("Could not create root elements context");this.elementsContextStack=[i],this.visitor=t}get elementsContext(){return this.elementsContextStack.at(-1)}crawlElement(e,t,n){this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema);let i=Object.fromEntries(Object.entries(this.elementsContext.elements).filter(([o])=>o.startsWith(t)));this.crawlElementsImpl(i,n),this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlSlice(e,t,n){let i=this.prepareSlices(n.slices,n);if(!ie(i.slices))throw new Error(`cannot crawl slice ${t.name} since it has no type information`);this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema),this.sliceAllowList=[t],this.crawlSliceImpl(i.slices[0],t.path,i),this.sliceAllowList=void 0,this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlResource(){this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema),this.crawlElementsImpl(this.rootSchema.elements,this.rootSchema.type),this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlElementsImpl(e,t){let n=Bl(e);for(let i of n)this.crawlElementNode(i,t)}crawlElementNode(e,t){let n=t+"."+e.key;this.visitor.onEnterElement&&this.visitor.onEnterElement(n,e.element,this.elementsContext);for(let i of e.children)this.crawlElementNode(i,t);ie(e.element?.slicing?.slices)&&this.crawlSlicingImpl(e.element.slicing,n),this.visitor.onExitElement&&this.visitor.onExitElement(n,e.element,this.elementsContext)}prepareSlices(e,t){let n=[];for(let o of e){if(!di(o))continue;let s=o.type.find(a=>ie(a.profile))?.profile?.[0];if(ie(s)){let a=Tn(s);a&&(o.typeSchema=a)}n.push(o)}return{...t,slices:n}}crawlSlicingImpl(e,t){let n=this.prepareSlices(e.slices,e);for(let i of n.slices)(this.sliceAllowList===void 0||this.sliceAllowList.includes(i))&&this.crawlSliceImpl(i,t,n)}crawlSliceImpl(e,t,n){let i=e.typeSchema;i&&this.visitor.onEnterSchema&&this.visitor.onEnterSchema(i),this.visitor.onEnterSlice&&this.visitor.onEnterSlice(t,e,n);let o,s=i?.elements??e.elements;ie(s)&&(o=jr({path:t,parentContext:this.elementsContext,elements:s})),o&&this.elementsContextStack.push(o),this.crawlElementsImpl(s,t),o&&this.elementsContextStack.pop(),this.visitor.onExitSlice&&this.visitor.onExitSlice(t,e,n),i&&this.visitor.onExitSchema&&this.visitor.onExitSchema(i)}};function Bl(r){let e=[];function t(o,s){return s.startsWith(o+".")}function n(o,s){for(let a of o.children)if(t(a.key,s.key)){n(a,s);return}o.children.push(s)}let i=Object.entries(r);i.sort((o,s)=>o[0].localeCompare(s[0]));for(let[o,s]of i){let a={key:o,element:s,children:[]},u=!1;for(let l of e)if(t(l.key,o)){n(l,a),u=!0;break}u||e.push(a)}return e}var $r="__sliceName";function Wl(r,e){let t=new Hr(r,r.resourceType,"resource");return new Qt(e,t).crawlResource(),t.getDefaultValue()}function ql(r,e,t){for(let[n,i]of Object.entries(e)){if(t===void 0||t===n){zt(r,n,i,e);continue}let o=fe(t,n);o!==void 0&&zt(r,o,i,e)}return r}function jl(r,e,t,n){let i=new Hr([{[$r]:e.name}],e.path,"element");return new Qt(n,i).crawlSlice(r,e,t),i.getDefaultValue()[0]}var Hr=class{constructor(e,t,n){c(this,"rootValue");c(this,"schemaStack");c(this,"valueStack");this.schemaStack=[],this.valueStack=[],this.rootValue=Ce(e),this.valueStack.splice(0,this.valueStack.length,{type:n,path:t,values:[this.rootValue]})}get schema(){return this.schemaStack.at(-1)}get value(){return this.valueStack.at(-1)}onEnterSchema(e){this.schemaStack.push(e)}onExitSchema(){this.schemaStack.pop()}onEnterElement(e,t,n){let i=this.value.values,o=this.value.path,s=fe(o,e);if(s===void 0)throw new Error(`Expected ${e} to be prefixed by ${o}`);let a=[];for(let u of i){if(u===void 0)continue;let l=fe(n.path,o),p=Array.isArray(u)?u:[u];for(let g of p){$l(g,s,t,n.elements,l),zt(g,s,t,n.elements);let v=mi(g,s,n.elements,l);v!==void 0&&a.push(v)}}this.valueStack.push({type:"element",path:e,values:a})}onExitElement(e,t,n){if(!this.valueStack.pop())throw new Error("Expected value context to exist when exiting element");let o=fe(this.value.path,e);if(o===void 0)throw new Error(`Expected ${e} to be prefixed by ${this.value.path}`);let s=fe(n.path,this.value.path);for(let a of this.value.values){let u=mi(a,o,n.elements,s);if(Array.isArray(u))for(let l=u.length-1;l>=0;l--){let p=u[l];ie(p)||u.splice(l,1)}A(u)&&fi(a,void 0,o,t)}}onEnterSlice(e,t,n){let i=this.value.values,o=[];for(let s of i)if(s!==void 0){let a=Array.isArray(s)?s:[s],u=this.getMatchingSliceValues(a,t,n);o.push(u)}this.valueStack.push({type:"slice",path:e,values:o})}getMatchingSliceValues(e,t,n){let i=[];for(let o of e)(o[$r]??pi(o,[t],n.discriminator,this.schema.url))===t.name&&i.push(o);for(let o=i.length;o<t.min;o++)if(Cr(t.type[0].code)){let s=Object.create(null);i.push(s),e.push(s)}return i}onExitSlice(){let e=this.valueStack.pop();if(!e)throw new Error("Expected value context to exist in onExitSlice");for(let t of e.values)for(let n=t.length-1;n>=0;n--){let i=t[n];$r in i&&delete i[$r]}}getDefaultValue(){return this.rootValue}};function $l(r,e,t,n,i){let o=mi(r,e,n,i);t.min>0&&o===void 0&&Cr(t.type[0].code)&&(t.isArray?fi(r,[Object.create(null)],e,t):fi(r,Object.create(null),e,t))}function fi(r,e,t,n){if(t.includes("."))throw new Error("key cannot be nested");let i=t;if(t.includes("[x]")){let o=n.type[0].code;i=t.replace("[x]",L(o))}e===void 0?delete r[i]:r[i]=e}function mi(r,e,t,n){let i=e.split("."),o=r,s;for(let a=0;a<i.length;a++){let u=i[a];if(u.includes("[x]")){let l=(n?n+".":"")+i.slice(0,a+1).join("."),g=t[l].type[0].code;u=u.replace("[x]",L(g))}if(a===i.length-1){Array.isArray(o)?s=o.map(l=>l[u]):s=o[u];continue}if(Array.isArray(o))o=o.map(l=>l[u]);else if(C(o)){if(o[u]===void 0)return;o=o[u]}else return}return s}function zt(r,e,t,n){if(!(t.fixed||t.pattern))return r;if(Array.isArray(r))return r.map(a=>zt(a,e,t,n));r==null&&(r=Object.create(null));let i=r,o=e.split("."),s=i;for(let a=0;a<o.length;a++){let u=o[a];if(u.includes("[x]")){let p=n[o.slice(0,a+1).join(".")].type[0].code;u=u.replace("[x]",L(p))}if(a===o.length-1){let l=Array.isArray(s)?s:[s];for(let p of l)t.fixed?p[u]??=t.fixed.value:t.pattern&&(p[u]=as(p[u],t.pattern.value))}else{if(!(u in s)){let l=o.slice(0,a+1).join(".");s[u]=n[l].isArray?[Object.create(null)]:Object.create(null)}s=s[u]}}return i}function as(r,e){if(Array.isArray(e)&&(Array.isArray(r)||r===void 0))return(r?.length??0)>0?r:Ce(e);if(C(e)&&(C(r)&&!Array.isArray(r)||r===void 0)){let t=Ce(r)??Object.create(null);for(let n of Object.keys(e))t[n]=as(t[n],e[n]);return t}return r}function hi(r,e){if(!r.group)throw new f(P("ConceptMap does not specify a mapping group","ConceptMap.group"));let t=cs(e),n=Hl(t,e.targetsystem?r.group.filter(o=>o.target===e.targetsystem):r.group),i=n.length>0;return{result:i,match:i?n:void 0}}function cs(r){let e=Object.create(null);if(r.code&&!r.coding&&!r.codeableConcept){if(!r.system)throw new f(P("System parameter must be provided with code"));e[r.system]=[r.code]}else if(r.coding&&!r.code&&!r.codeableConcept)r.coding.code&&(e[r.coding.system??""]=[r.coding.code]);else if(r.codeableConcept&&!r.code&&!r.coding)for(let{system:t,code:n}of r.codeableConcept.coding??y)n&&(e[t??""]=K(e[t??""],n));else throw r.code||r.coding||r.codeableConcept?new f(P("Ambiguous input: multiple source codings provided")):new f(P("Source Coding (system + code) must be specified"));return e}function Hl(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=Gl(i,o)),s&&t.push(...s)}return t}function Gl(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 Ql=[..._t,"->","<<",">>","=="];function us(r){return new xe(r,Mt,Ql).tokenize()}var zl={"-":"disjoint","==":"equal"},gi=class{constructor(e){c(this,"parser");c(this,"structureMap",{resourceType:"StructureMap",status:"active"});this.parser=e}parse(){for(;this.parser.hasMore();){let e=this.parser.peek()?.value;switch(e){case"map":this.parseMap();break;case"uses":this.parseUses();break;case"imports":this.parseImport();break;case"group":this.parseGroup();break;case"conceptmap":this.parseConceptMap();break;default:throw new Error(`Unexpected token: ${e}`)}}return this.structureMap}parseMap(){this.parser.consume("Symbol","map"),this.structureMap.url=this.parser.consume("String").value,this.parser.consume("="),this.structureMap.name=this.parser.consume().value}parseUses(){this.parser.consume("Symbol","uses");let e={};e.url=this.parser.consume("String").value,this.parser.peek()?.value==="alias"&&(this.parser.consume("Symbol","alias"),e.alias=this.parser.consume("Symbol").value),this.parser.consume("Symbol","as"),e.mode=this.parser.consume().value,this.structureMap.structure||(this.structureMap.structure=[]),this.structureMap.structure.push(e)}parseImport(){this.parser.consume("Symbol","imports"),this.structureMap.import||(this.structureMap.import=[]),this.structureMap.import.push(this.parser.consume("String").value)}parseGroup(){let e={};this.parser.consume("Symbol","group"),e.name=this.parser.consume("Symbol").value,e.input=this.parseParameters(),this.parser.peek()?.value==="extends"&&(this.parser.consume("Symbol","extends"),e.extends=this.parser.consume("Symbol").value),this.parser.peek()?.value==="<<"?(this.parser.consume("<<"),e.typeMode=this.parser.consume().value,this.parser.peek()?.value==="+"&&(this.parser.consume("+"),e.typeMode="type-and-types"),this.parser.consume(">>")):e.typeMode="none",e.rule=this.parseRules(),this.structureMap.group||(this.structureMap.group=[]),this.structureMap.group.push(e)}parseParameters(){let e=[];for(this.parser.consume("(");this.parser.hasMore()&&this.parser.peek()?.value!==")";)e.push(this.parseParameter()),this.parser.peek()?.value===","&&this.parser.consume(",");return this.parser.consume(")"),e}parseParameter(){let e={};return e.mode=this.parser.consume().value,e.name=this.parser.consume("Symbol").value,this.parser.peek()?.value===":"&&(this.parser.consume(":"),e.type=this.parser.consume("Symbol").value),e}parseRules(){let e=[];for(this.parser.consume("{");this.parser.hasMore()&&this.parser.peek()?.value!=="}";)e.push(this.parseRule());return this.parser.consume("}"),e}parseRule(){let e={source:this.parseRuleSources()};return this.parser.peek()?.value==="->"&&(this.parser.consume("->"),e.target=this.parseRuleTargets()),this.parser.peek()?.value==="then"&&(this.parser.consume("Symbol","then"),this.parser.peek()?.id==="{"?e.rule=this.parseRules():e.dependent=this.parseRuleDependents()),this.parser.peek()?.id==="String"?e.name=this.parser.consume().value:e.name=e.source?.[0]?.element,this.parser.consume(";"),e}parseRuleSources(){this.parser.hasMore()&&this.parser.peek()?.value==="for"&&this.parser.consume("Symbol","for");let e=[this.parseRuleSource()];for(;this.parser.hasMore()&&this.parser.peek()?.value===",";)this.parser.consume(","),e.push(this.parseRuleSource());return e}parseRuleSource(){let e={},n=this.parseRuleContext().split(".");if(e.context=n[0],e.element=n[1],this.parser.hasMore()&&this.parser.peek()?.value===":"&&(this.parser.consume(":"),e.type=this.parser.consume().value),this.parser.hasMore()&&this.parser.peek()?.value==="default"&&(this.parser.consume("Symbol","default"),e.defaultValueString=this.parser.consume("String").value),(this.parser.peek()?.value==="first"||this.parser.peek()?.value==="not_first"||this.parser.peek()?.value==="last"||this.parser.peek()?.value==="not_last"||this.parser.peek()?.value==="only_one")&&(e.listMode=this.parser.consume().value),this.parser.peek()?.value==="as"&&(this.parser.consume("Symbol","as"),e.variable=this.parser.consume().value),this.parser.peek()?.value==="log"&&(this.parser.consume("Symbol","log"),e.logMessage=this.parser.consume().value),this.parser.peek()?.value==="where"){this.parser.consume("Symbol","where");let i=this.parser.consumeAndParse(S.Arrow);e.condition=i.toString()}if(this.parser.peek()?.value==="check"){this.parser.consume("Symbol","check");let i=this.parser.consumeAndParse(S.Arrow);e.check=i.toString()}return e}parseRuleTargets(){let e=[this.parseRuleTarget()];for(;this.parser.hasMore()&&this.parser.peek()?.value===",";)this.parser.consume(","),e.push(this.parseRuleTarget());return e}parseRuleTarget(){let e={},n=this.parseRuleContext().split(".");return e.contextType="variable",e.context=n[0],e.element=n[1],this.parser.peek()?.value==="="&&(this.parser.consume("="),this.parseRuleTargetTransform(e)),this.parser.peek()?.value==="as"&&(this.parser.consume("Symbol","as"),e.variable=this.parser.consume().value),this.parser.peek()?.value==="share"&&(this.parser.consume("Symbol","share"),e.listMode=["share"],this.parser.consume("Symbol")),(this.parser.peek()?.value==="first"||this.parser.peek()?.value==="last"||this.parser.peek()?.value==="collate")&&(e.listMode=[this.parser.consume().value]),e}parseRuleTargetTransform(e){let t=this.parser.consumeAndParse(S.As);t instanceof X?(e.transform=t.name,e.parameter=t.args?.map(ls)):t instanceof $||t instanceof B?(e.transform="copy",e.parameter=[ls(t)]):(e.transform="evaluate",e.parameter=[{valueString:t.toString()}])}parseRuleContext(){let e=this.parser.consume().value;for(;this.parser.peek()?.value===".";)this.parser.consume("."),e+="."+this.parser.consume().value;return e}parseRuleDependents(){let e=this.parser.consumeAndParse(S.Arrow);return[{name:e.name,variable:e.args.map(t=>t.name)}]}parseConceptMap(){this.parser.consume("Symbol","conceptmap");let e={resourceType:"ConceptMap",status:"active",url:"#"+this.parser.consume("String").value};this.parser.consume("{");let t={},n=this.parser.peek()?.value;for(;n!=="}";)n==="prefix"?this.parseConceptMapPrefix(t):this.parseConceptMapRule(e,t),n=this.parser.peek()?.value;this.parser.consume("}"),this.structureMap.contained||(this.structureMap.contained=[]),this.structureMap.contained.push(e)}parseConceptMapPrefix(e){this.parser.consume("Symbol","prefix");let t=this.parser.consume().value;this.parser.consume("=");let n=this.parser.consume().value;e[t]=n}parseConceptMapRule(e,t){let n=this.parser.consume().value,i=t[n];this.parser.consume(":");let o=this.parser.consume().value,s=zl[this.parser.consume().value],a=this.parser.consume().value,u=t[a];this.parser.consume(":");let l=this.parser.consume().value,p=e?.group?.find(g=>g.source===i&&g.target===u);p||(p={source:i,target:u,element:[]},e.group||(e.group=[]),e.group.push(p)),p.element||(p.element=[]),p.element.push({code:o,target:[{code:l,equivalence:s}]})}};function ls(r){if(r instanceof B)return{valueId:r.name};if(r instanceof $)return Jl(r);throw new Error(`Unknown parameter atom type: ${r.constructor.name} (${r.toString()})`)}function Jl(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 Kl=Xe().registerInfix("->",{precedence:S.Arrow}).registerInfix(";",{precedence:S.Semicolon});function Yl(r){let e=Kl.construct(us(r));return e.removeComments(),new gi(e).parse()}var Gr=class{constructor(e=[]){c(this,"resources");this.resources=e}get(e,t){let n=[];for(let i of this.resources)i.resourceType===e&&i.url&&this.matchesUrl(i.url,t)&&n.push(i);return n}matchesUrl(e,t){if(t.includes("*")){let n=t.split("*");return e.startsWith(n[0])&&e.endsWith(n[1])}else return e===t}};function Xl(r,e,t=new Gr){return Zl({root:r,transformMaps:t},r,e)}function Zl(r,e,t){return ed(r,e),ps(r,e),xi(r,e.group[0],t)}function ed(r,e){let t=zr(r);if(t&&e.import)for(let n of e.import){let i=t.get("StructureMap",n);for(let o of i)ps(r,o)}}function ps(r,e){let t=zr(r);if(t&&e.contained)for(let n of e.contained)(n.resourceType==="StructureMap"||n.resourceType==="ConceptMap")&&t.resources.push(n);for(let n of e.group??y)Qr(r,n.name,{type:"StructureMapGroup",value:n})}function xi(r,e,t){let n=[],i=[];for(let l of e.input)l.mode==="source"&&n.push(l),l.mode==="target"&&i.push(l);if(n.length===0)throw new Error("Missing source definitions");if(i.length===0)throw new Error("Missing target definitions");if(t.length<n.length)throw new Error(`Not enough arguments (got ${t.length}, min ${n.length})`);if(t.length>n.length+i.length)throw new Error(`Too many arguments (got ${t.length}, max ${n.length+i.length})`);let o={},s=[],a=0;for(let l of n)Jt(o,l.name,t[a++]);for(let l of i){let p=t[a++]??{type:l.type??"BackboneElement",value:{}};Jt(o,l.name,p),s.push(p)}let u={root:r.root,parent:r,variables:o};for(let l of e.rule??y)fs(u,l);return s}function fs(r,e){e.source&&ms(r,e,0)}function ms(r,e,t){let n=e.source[t];for(let i of id(r,n))Qr(r,"_",i),n.variable&&Qr(r,n.variable,i),t<e.source.length-1?ms(r,e,t+1):td(r,e)}function td(r,e){if(!rd(r,e)){for(let t of e.target??y)hs(r,t);for(let t of e.rule??y)fs(r,t);for(let t of e.dependent??y)md(r,t)}}function rd(r,e){if(e.target?.length!==1||e.target[0].transform||e.rule||e.dependent)return!1;let t=Ie(r,"_");if(Array.isArray(t)&&(t=t[0]),!t)return!1;let n=nd(r,t);if(!n)return hs(r,{...e.target[0],transform:"copy",parameter:[{valueId:"_"}]}),!0;let i=e.target[0],o=Ie(r,i.context),s=o.value[i.element],a=ys(o,i.element)||Array.isArray(s),u={root:r.root,parent:r,variables:{}},l=xi(u,n,[t]);return gs(r,i,o,l,a,s),!0}function nd(r,e){let t=r;for(;t;){if(t.variables){for(let n of Object.values(t.variables))for(let i of yi(n))if(i.type==="StructureMapGroup"){let o=i.value;if((o.typeMode==="types"||o.typeMode==="type-and-types")&&o.input.length===2&&o.input[0].mode==="source"&&o.input[0].type===e.type&&o.input[1].mode==="target")return o}}t=t.parent}}function id(r,e){let t=Ie(r,e.context);if(!t)return[];let n=e.element;if(!n)return[t];let i=w(n,[t]);if(!i||i.length===0)return[];if(e.condition&&!ds(t,{[e.variable]:i[0]},e.condition))return[];if(e.check&&!ds(t,{[e.variable]:i[0]},e.check))throw new Error("Check failed: "+e.check);return e.listMode&&(i=od(e,i)),i}function ds(r,e,t){return q(w(t,[r],e))}function od(r,e){switch(r.listMode){case"first":return[e[0]];case"not_first":return e.slice(1);case"last":return[e.at(-1)];case"not_last":return e.slice(0,e.length-1);case"only_one":if(e.length!==1)throw new Error("Expected only one value");break}return e}function hs(r,e){let t=Ie(r,e.context);if(!t)throw new Error("Target not found: "+e.context);let n=t.value[e.element],i,o=ys(t,e.element)||Array.isArray(n);if(e.transform)switch(e.transform){case"append":i=sd(r,e);break;case"cast":i=ad(r,e);break;case"cc":i=cd(r,e);break;case"copy":i=ud(r,e);break;case"create":i=ld(r,e);break;case"evaluate":i=dd(r,e);break;case"translate":i=pd(r,e);break;case"truncate":i=fd(r,e);break;case"uuid":i=[{type:"string",value:Z()}];break;default:throw new Error(`Unsupported transform: ${e.transform}`)}else{let s=xs(t,e.element)?.type,a=s?.length===1?s[0].code:void 0;o||n===void 0?i=[a?{type:a,value:{}}:b({})]:i=[a?{type:a,value:n}:b(n)]}gs(r,e,t,i,o,n)}function gs(r,e,t,n,i,o){if(n.length!==0){if(i){o||(o=[],Jt(t.value,e.element,o));for(let s of n)o.push(s.value)}else Jt(t.value,e.element,n[0].value);e.variable&&Qr(r,e.variable,hd(n))}}function ys(r,e){return xs(r,e)?.isArray}function xs(r,e){return be(r.type)?.elements?.[e]}function sd(r,e){let t=H(r,e.parameter?.[0])?.[0]?.value,n=H(r,e.parameter?.[1])?.[0]?.value;return[{type:"string",value:(t??"").toString()+(n??"").toString()}]}function ad(r,e){let t=H(r,e.parameter?.[0])?.[0];return H(r,e.parameter?.[1])?.[0]?.value==="string"?[{type:"string",value:t?.value?.toString()}]:[t]}function cd(r,e){let t=e.parameter;if(t.length===2){let n=H(r,t[0])?.[0]?.value,i=H(r,t[1])?.[0]?.value;return[{type:"CodeableConcept",value:{coding:[{system:n,code:i}]}}]}else return[{type:"CodeableConcept",value:{text:H(r,t[0])?.[0]?.value}}]}function ud(r,e){return e.parameter.flatMap(t=>H(r,t))}function ld(r,e){let t={};return e.parameter&&e.parameter.length>0&&(t.resourceType=H(r,e.parameter?.[0])?.[0]?.value),[b(t)]}function dd(r,e){let n=H(r,e.parameter?.[0])[0].value;return w(n,[],vs(r))}function pd(r,e){let t=e.parameter.flatMap(u=>H(r,u)),n=t[0].value,i=t[1].value,s=zr(r)?.get("ConceptMap",i)[0];if(!s)throw new Error("ConceptMap not found: "+i);let a=hi(s,{system:s.group?.[0]?.source,code:n});return[b(a.match?.[0]?.concept?.code)]}function fd(r,e){let t=H(r,e.parameter?.[0])?.[0],n=H(r,e.parameter?.[1])?.[0]?.value;return t.type==="string"?[{type:"string",value:t.value.substring(0,n)}]:[t]}function md(r,e){let t=Ie(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=Ie(r,s);if(!a)throw new Error("Dependent variable not found: "+s);i.push(a)}let o={root:r.root,parent:r,variables:{}};xi(o,t.value,i)}function zr(r){if(r.transformMaps)return r.transformMaps;if(r.parent)return zr(r.parent)}function H(r,e){let n=_({type:"StructureMapGroupRuleTargetParameter",value:e},"value");if(!n)throw new Error("Missing target parameter: "+JSON.stringify(e));if(n=yi(n),n.length===1&&n[0].type==="id"){let i=Ie(r,n[0].value);if(!i)throw new Error("Variable not found: "+n[0].value);return yi(i)}return n}function Ie(r,e){let t=r.variables?.[e];if(t)return t;if(r.parent)return Ie(r.parent,e)}function vs(r,e={}){if(r.parent&&vs(r.parent,e),r.variables)for(let[t,n]of Object.entries(r.variables))e[t]=n,e["%"+t]=n;return e}function Qr(r,e,t){r.variables||(r.variables={}),Jt(r.variables,e,t)}function Jt(r,e,t){if(e==="__proto__"||e==="constructor"||e==="prototype")throw new Error("Invalid key: "+e);r[e]=t}function yi(r){return Array.isArray(r)?r:[r]}function hd(r){return r.length===1?r[0]:r}var gd=" ".repeat(2),vi=class{constructor(e=gd,t=!0){c(this,"indent");c(this,"b");c(this,"indentCount");this.indent=e,this.b=[],this.indentCount=0,t&&(this.appendNoWrap("// SPDX-FileCopyrightText: Copyright Orangebot, Inc. and Medplum contributors"),this.appendNoWrap("// SPDX-License-Identifier: Apache-2.0"),this.appendNoWrap("/*"),this.appendNoWrap(" * This is a generated file"),this.appendNoWrap(" * Do not edit manually."),this.appendNoWrap(" */"),this.newLine())}newLine(){this.b.push(`
44
+ }`.replaceAll(/\s+/g," "),u=await this.graphql(a);lr(u.data.StructureDefinitionList);for(let l of u.data.SearchParameterList)Or(l)})());return this.setCacheEntry(i,s,n),s}requestProfileSchema(t,n){if(!n?.expandProfile&&vn(t))return Promise.resolve();let i=t+"-requestSchema"+(n?.expandProfile?"-nested":""),o=this.getCacheEntry(i,void 0);if(o)return o.value;let s=new W((async()=>{if(n?.expandProfile){let a=this.fhirUrl("StructureDefinition","$expand-profile");a.search=new URLSearchParams({url:t}).toString();let u=await this.post(a.toString(),{});lr(u)}else{let a=await this.searchOne("StructureDefinition",{url:t,_sort:"-_lastUpdated"});if(!a){console.warn(`No StructureDefinition found for ${t}!`);return}dr(a)}})());return this.setCacheEntry(i,s,n),s}readHistory(t,n,i,o){let s=this.fhirUrl(t,n,"_history");return i?.count&&s.searchParams.set("_count",i.count.toString()),i?.offset&&s.searchParams.set("_offset",i.offset.toString()),this.get(s.toString(),o)}readVersion(t,n,i,o){return this.get(this.fhirUrl(t,n,"_history",i),o)}readPatientEverything(t,n){return this.getBundle(this.fhirUrl("Patient",t,"$everything"),n)}readPatientSummary(t,n){return this.getBundle(this.fhirUrl("Patient",t,"$summary"),n)}createResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");return this.invalidateSearches(t.resourceType),this.post(this.fhirUrl(t.resourceType),t,void 0,n)}async createResourceIfNoneExist(t,n,i={}){let o=this.fhirUrl(t.resourceType);this.setRequestHeader(i,"If-None-Exist",n);let s=await this.post(o,t,void 0,i);return this.cacheResource(s,i),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),s}async upsertResource(t,n,i){let o=this.fhirSearchUrl(t.resourceType,n),s=await this.put(o,t,void 0,i);return s||(s=t),this.cacheResource(s,i),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),s}async createAttachment(t,n,i,o,s){let a=ui(t,n,i,o);if(a.contentType===k.XML){let p=a.data,g;p instanceof Blob?g=await new Promise((v,M)=>{let re=new FileReader;re.onload=()=>{if(!re.result){M(new Error("Failed to load file"));return}v(re.result)},re.readAsText(p,"utf-8")}):ArrayBuffer.isView(p)?g=new TextDecoder().decode(p):g=p,g.includes("<ClinicalDocument")&&g.includes("urn:hl7-org:v3")&&(a={...a,contentType:k.CDA_XML})}let u=s??(typeof n=="object"?n:{}),l=await this.createBinary(a,u);return{contentType:a.contentType,url:l.url,title:a.filename}}createBinary(t,n,i,o,s){let a=ui(t,n,i,o),u=s??(typeof n=="object"?n:{}),{data:l,contentType:p,filename:g,securityContext:v,onProgress:M}=a,re=this.fhirUrl("Binary");return g&&re.searchParams.set("_filename",g),v?.reference&&this.setRequestHeader(u,"X-Security-Context",v.reference),M?this.uploadwithProgress(re,l,p,M,u):this.post(re,l,p,u)}uploadwithProgress(t,n,i,o,s){return new Promise((a,u)=>{let l=new XMLHttpRequest,p=()=>l.abort();s?.signal?.addEventListener("abort",p);let g=v=>{s?.signal?.removeEventListener("abort",p),v instanceof Error?u(v):a(v)};if(l.responseType="json",l.onabort=()=>g(new DOMException("Request aborted","AbortError")),l.onerror=()=>g(new Error("Request error")),o&&(l.upload.onprogress=v=>o(v),l.upload.onload=v=>o(v)),l.onload=()=>{l.status>=200&&l.status<300?g(l.response):g(new f(ut(l.response||l.statusText)))},l.open("POST",t),l.withCredentials=!0,l.setRequestHeader("Authorization","Bearer "+this.accessToken),l.setRequestHeader("Cache-Control","no-cache, no-store, max-age=0"),l.setRequestHeader("Content-Type",i),this.options.extendedMode!==!1&&l.setRequestHeader("X-Medplum","extended"),s?.headers){let v=s.headers;for(let[M,re]of Object.entries(v))l.setRequestHeader(M,re)}l.send(n)})}async createPdf(t,n,i,o){if(!this.createPdfImpl)throw new Error("PDF creation not enabled");let s=ss(t,n,i,o),a=typeof n=="object"?n:{},{docDefinition:u,tableLayouts:l,fonts:p,...g}=s,v=await this.createPdfImpl(u,l,p),M={...g,data:v,contentType:"application/pdf"};return this.createBinary(M,a)}createComment(t,n,i){let o=this.getProfile(),s,a;return t.resourceType==="Encounter"&&(s=Re(t),a=t.subject),t.resourceType==="ServiceRequest"&&(s=t.encounter,a=t.subject),t.resourceType==="Patient"&&(a=Re(t)),this.createResource({resourceType:"Communication",status:"completed",basedOn:[Re(t)],encounter:s,subject:a,sender:o?Re(o):void 0,sent:new Date().toISOString(),payload:[{contentString:n}]},i)}async updateResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");if(!t.id)throw new Error("Missing id");let i=await this.put(this.fhirUrl(t.resourceType,t.id),t,void 0,n);return i||(i=t),this.cacheResource(i,n),this.invalidateUrl(this.fhirUrl(t.resourceType,t.id,"_history")),this.invalidateSearches(t.resourceType),i}async patchResource(t,n,i,o){let s=await this.patch(this.fhirUrl(t,n),i,o);return this.cacheResource(s,o),this.invalidateUrl(this.fhirUrl(t,n,"_history")),this.invalidateSearches(t),s}deleteResource(t,n,i){return this.deleteCacheEntry(this.fhirUrl(t,n).toString()),this.invalidateSearches(t),this.delete(this.fhirUrl(t,n),i)}validateResource(t,n){return this.post(this.fhirUrl(t.resourceType,"$validate"),t,void 0,n)}executeBot(t,n,i,o){let s;if(typeof t=="string"){let a=t;s=this.fhirUrl("Bot",a,"$execute")}else{let a=t;s=this.fhirUrl("Bot","$execute"),s.searchParams.set("identifier",a.system+"|"+a.value)}return this.post(s,n,i,o)}executeBatch(t,n){return this.post(this.fhirBaseUrl,t,void 0,n)}sendEmail(t,n){return this.post("email/v1/send",t,k.JSON,n)}graphql(t,n,i,o){return this.post(this.fhirUrl("$graphql"),{query:t,operationName:n,variables:i},k.JSON,o)}readResourceGraph(t,n,i,o){return this.get(`${this.fhirUrl(t,n)}/$graph?graph=${i}`,o)}pushToAgent(t,n,i,o,s,a){let{waitTimeout:u,returnAck:l,...p}=a??{};return this.post(this.fhirUrl("Agent",Ce(t),"$push"),{destination:typeof n=="string"?n:O(n),body:i,contentType:o,waitForResponse:s,...u!==void 0?{waitTimeout:u}:void 0,...l!==void 0?{returnAck:l}:void 0},k.FHIR_JSON,p)}getCdsServices(t){return this.get(this.cdsServicesUrl,t)}callCdsService(t,n,i){return this.post(U(this.cdsServicesUrl,t),n,k.JSON,i)}getActiveLogin(){return this.storage.getObject("activeLogin")}async setActiveLogin(t){(!this.sessionDetails?.profile||O(this.sessionDetails.profile)!==t.profile?.reference)&&this.clearActiveLogin(),this.setAccessToken(t.accessToken,t.refreshToken),this.storage.setObject("activeLogin",t),this.addLogin(t),this.refreshPromise=void 0,await this.refreshProfile()}getAccessToken(){return this.accessToken}isAuthenticated(t){return this.accessTokenExpires!==void 0&&Date.now()<this.accessTokenExpires-(t??this.refreshGracePeriod)}setAccessToken(t,n){this.accessToken=t,this.refreshToken=n,this.accessTokenExpires=si(t),this.medplumServer=oi(t)}getLogins(){return this.storage.getObject("logins")??[]}addLogin(t){let n=this.getLogins().filter(i=>i.profile?.reference!==t.profile?.reference);n.push(t),this.storage.setObject("logins",n)}async refreshProfile(){if(this.medplumServer)return this.profilePromise=new Promise((t,n)=>{this.get("auth/me",{cache:"no-cache"}).then(i=>{this.profilePromise=void 0;let o=this.sessionDetails?.profile?.id!==i.profile.id;this.sessionDetails=i,this.syncStoredLoginProject(),o&&this.dispatchEvent({type:"change"}),t(i.profile),this.dispatchEvent({type:"profileRefreshed"})}).catch(n)}),this.dispatchEvent({type:"profileRefreshing"}),this.profilePromise}syncStoredLoginProject(){let t=this.getActiveLogin(),n=this.sessionDetails?.project?.name;if(!t||!n||t.project.display===n)return;let i={...t,project:{...t.project,display:n}};this.storage.setObject("activeLogin",i),this.addLogin(i)}isLoading(){return!this.isInitialized||!!this.profilePromise&&!this.sessionDetails?.profile}isSuperAdmin(){return!!this.sessionDetails?.project.superAdmin}isProjectAdmin(){return!!this.sessionDetails?.membership.admin}getProject(){return this.sessionDetails?.project}getProjectMembership(){return this.sessionDetails?.membership}getProfile(){return this.sessionDetails?.profile}async getProfileAsync(){return this.profilePromise?this.profilePromise:this.sessionDetails?this.sessionDetails.profile:this.refreshProfile()}getUserConfiguration(){return this.sessionDetails?.config}getAccessPolicy(){return this.sessionDetails?.accessPolicy}async download(t,n={}){return(await this.downloadResponse(t,n)).blob()}async downloadResponse(t,n={}){this.refreshPromise&&await this.refreshPromise;let i=t.toString();i.startsWith(Pl)&&(t=this.fhirUrl(i));let o=n.headers;return o||(o={},n.headers=o),o.Accept||(o.Accept="*/*"),this.addFetchOptionsDefaults(n),this.fetchWithRetry(t.toString(),n)}async createMedia(t,n){let{additionalFields:i,...o}=t,s=await this.createResource({resourceType:"Media",status:"preparation",content:{contentType:t.contentType},...i});o.securityContext||(o.securityContext=Re(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=Re(s));let a=await this.createAttachment(o,n);return this.updateResource({...s,content:[{attachment:a}]})}async bulkExport(t="",n,i,o){let s=t&&`${t}/`,a=this.fhirUrl(`${s}$export`);return n&&a.searchParams.set("_type",n),i&&a.searchParams.set("_since",i),this.startAsyncRequest(a.toString(),o)}async startAsyncRequest(t,n={}){this.addFetchOptionsDefaults(n);let i=n.headers;return i.Prefer="respond-async",n.method="POST",this.request(t,n)}async wrappedFetch(t,n){return await this.refreshIfExpired(),this.addFetchOptionsDefaults(n),this.fetchWithRetry(t,n)}get keyValue(){return this.keyValueClient||(this.keyValueClient=new qt(this)),this.keyValueClient}getBundle(t,n){return new W((async()=>{let i=await this.get(t,n);for(let o of i.entry??y)this.cacheResource(o.resource,n);return i})())}isCacheEnabled(t){return!!this.requestCache&&!this.getRequestHeader(t,"x-medplum-on-behalf-of")}getCacheEntry(t,n){if(!this.isCacheEnabled(n)||n?.cache==="no-cache"||n?.cache==="reload")return;let i=this.requestCache.get(t);if(!(!i||i.requestTime+this.cacheTime<Date.now()))return i}setCacheEntry(t,n,i){this.isCacheEnabled(i)&&(this.requestCache.set(t,{requestTime:Date.now(),value:n}),i?.signal&&i.signal.addEventListener("abort",()=>{this.requestCache.delete(t)}))}cacheResource(t,n){t?.id&&!t.meta?.tag?.some(i=>i.code==="SUBSETTED")&&this.setCacheEntry(this.fhirUrl(t.resourceType,t.id).toString(),new W(Promise.resolve(t)),n)}deleteCacheEntry(t){this.requestCache&&this.requestCache.delete(t)}async request(t,n={},i={}){let o=await this.wrappedFetch(t,n);if(o.status===401)return this.handleUnauthenticated(t,n);if(o.status===204||o.status===304)return;let a=o.headers.get("content-type")?.includes("json");if(o.status===404&&!a)throw new f(cn);let u=await this.parseBody(o,a);if(o.status===200&&n.followRedirectOnOk||o.status===201&&n.followRedirectOnCreated){let l=await ts(o,u);if(l)return this.request(l,{...n,method:"GET",body:void 0})}if(o.status===202&&n.pollStatusOnAccepted){let p=await ts(o,u)??i.statusUrl;if(p)return this.pollStatus(p,n,i)}if(o.status>=400)throw new f(ut(u));return u}async parseBody(t,n){let i;if(t.headers.get("content-length")!=="0"){if(n)try{i=await t.json()}catch(o){throw console.error("Error parsing response",t.status,o),o}else i=await t.text();return i}}async fetchWithRetry(t,n){t.startsWith("http")||(t=U(this.baseUrl,t));let i=n?.maxRetries??this.maxRetries;for(let o=0;o<=i;o++)try{this.logLevel!=="none"&&this.logRequest(t,n);let s=await this.fetch(t,n);if(this.logLevel!=="none"&&this.logResponse(s),this.setCurrentRateLimit(s),o>=i||!Vl(s))return s;let a=this.getRetryDelay(o),u=n.maxRetryTime??this.maxRetryTime;if(a>u)return s;await Pr(a,{signal:n.signal})}catch(s){if(s.message==="Failed to fetch"&&o===0&&this.dispatchEvent({type:"offline"}),s.name==="AbortError"||o===i)throw s}throw new Error("Unreachable")}logRequest(t,n){if(console.log(`> ${n.method} ${t}`),this.logLevel==="verbose"&&n.headers){let i=n.headers;for(let o of vt(Object.keys(i)))console.log(`> ${o}: ${i[o]}`)}}logResponse(t){console.log(`< ${t.status} ${t.statusText}`),this.logLevel==="verbose"&&t.headers&&t.headers.forEach((n,i)=>console.log(`< ${i}: ${n}`))}setCurrentRateLimit(t){if(!t?.headers||typeof t.headers.get!="function")return;let n=t.headers.get("ratelimit");n&&(this.currentRateLimits=n)}rateLimitStatus(){if(!this.currentRateLimits)return[];let t=this.currentRateLimits;return t.split(",").map(n=>{let i=n.split(";").map(p=>p.trim());if(i.length!==3)throw new Error("Could not parse RateLimit header: "+t);let o=i[0].substring(1,i[0].length-1),s=i.find(p=>p.startsWith("r="))?.substring(2),a=s?Number.parseInt(s,10):Number.NaN,u=i.find(p=>p.startsWith("t="))?.substring(2),l=u?Number.parseInt(u,10):Number.NaN;if(!o||Number.isNaN(a)||Number.isNaN(l))throw new Error("Could not parse RateLimit header: "+t);return{name:o,remainingUnits:a,secondsUntilReset:l,resetsAfter:Math.ceil((Date.now()+1e3*l)/1e3)}})}getRetryDelay(t){let n=this.rateLimitStatus(),i=500*Math.pow(1.5,t);for(let o of n)o.remainingUnits||(i=Math.max(i,o.secondsUntilReset*1e3));return i}async pollStatus(t,n,i){let o={...n,method:"GET",body:void 0,redirect:"follow"};if(i.pollCount===void 0)n.headers&&typeof n.headers=="object"&&"Prefer"in n.headers&&(o.headers={...n.headers},delete o.headers.Prefer),i.statusUrl=t,i.pollCount=1;else{let s=n.pollStatusPeriod??1e3;await Pr(s,{signal:n.signal}),i.pollCount++}return this.request(t,{...n,method:"GET"},i)}async executeAutoBatch(){if(this.autoBatchQueue===void 0)return;let t=[...this.autoBatchQueue];if(this.autoBatchQueue.length=0,this.autoBatchTimerId=void 0,t.length===1){let o=t[0];try{o.options.method=o.method,o.resolve(await this.request(U(this.fhirBaseUrl,o.url),o.options))}catch(s){o.reject(new f(ut(s)))}return}let n={resourceType:"Bundle",type:"batch",entry:t.map(o=>({request:{method:o.method,url:o.url},resource:o.options.body?JSON.parse(o.options.body):void 0}))},i=await this.post(this.fhirBaseUrl,n);for(let o=0;o<t.length;o++){let s=t[o],a=i.entry?.[o];a?.response?.outcome&&!ar(a.response.outcome)?s.reject(new f(a.response.outcome)):s.resolve(a?.resource)}}addFetchOptionsDefaults(t){Object.entries(this.defaultHeaders).forEach(([n,i])=>{this.setRequestHeader(t,n,i)}),this.setRequestHeader(t,"Accept",ns,!0),this.options.extendedMode!==!1&&this.setRequestHeader(t,"X-Medplum","extended"),t.body&&this.setRequestHeader(t,"Content-Type",k.FHIR_JSON,!0),this.accessToken?this.setRequestHeader(t,"Authorization","Bearer "+this.accessToken):this.basicAuth&&this.setRequestHeader(t,"Authorization","Basic "+this.basicAuth),t.cache||(t.cache="no-cache"),t.credentials||(t.credentials="include")}setRequestContentType(t,n){this.setRequestHeader(t,"Content-Type",n)}getRequestHeader(t,n){let i=t?.headers;if(i)if(Array.isArray(i)){let o=i.find(([s])=>s.toLowerCase()===n.toLowerCase());return o?o[1]:void 0}else{if(i instanceof Headers)return i.get(n)??void 0;if(C(i))return i[n]??void 0}else return}setRequestHeader(t,n,i,o=!1){let s=t.headers;s?Array.isArray(s)?(!o||!s.some(([a])=>a.toLowerCase()===n.toLowerCase()))&&s.push([n,i]):s instanceof Headers?(!o||!s.has(n))&&s.set(n,i):C(s)&&(!o||!s[n])&&(s[n]=i):t.headers={[n]:i}}setRequestBody(t,n){typeof n=="string"||typeof Blob<"u"&&(n instanceof Blob||n?.constructor.name==="Blob")||typeof File<"u"&&(n instanceof File||n?.constructor.name==="File")||typeof Uint8Array<"u"&&(n instanceof Uint8Array||n?.constructor.name==="Uint8Array")?t.body=n:typeof n=="object"&&n!==null&&(typeof n.getReader=="function"||typeof n.pipe=="function"&&typeof n.on=="function")?(t.body=n,t.duplex="half"):n&&(t.body=JSON.stringify(n))}handleUnauthenticated(t,n){if(this.refresh())return this.request(t,n);throw this.clear(),this.onUnauthenticated?.(),new f(Ve)}async startPkce(){let t=Vr();this.storage.setString("pkceState",t);let n=Vr().slice(0,128);this.storage.setString("codeVerifier",n);try{let i=await ei(n);return{codeChallengeMethod:"S256",codeChallenge:Ln(i).replaceAll("+","-").replaceAll("/","_").replaceAll("=","")}}catch(i){return console.warn("Failed to hash code verifier. Falling back to 'plain' code challenge method",i),{codeChallengeMethod:"plain",codeChallenge:n}}}async requestAuthorization(t){let n=await this.ensureCodeChallenge(t??{}),i=new URL(this.authorizeUrl);i.searchParams.set("response_type","code"),i.searchParams.set("state",this.storage.getString("pkceState")),i.searchParams.set("client_id",n.clientId??this.clientId),i.searchParams.set("redirect_uri",n.redirectUri??ce.getOrigin()),i.searchParams.set("code_challenge_method",n.codeChallengeMethod),i.searchParams.set("code_challenge",n.codeChallenge),i.searchParams.set("scope",n.scope??"openid profile"),ce.assign(i.toString())}processCode(t,n){let i={grant_type:qe.AuthorizationCode,code:t,client_id:n?.clientId??this.clientId??"",redirect_uri:n?.redirectUri??ce.getOrigin()},o=this.storage.getString("codeVerifier");return o&&(i.code_verifier=o),this.fetchTokens(i)}refreshIfExpired(t){return!this.refreshPromise&&this.accessTokenExpires!==void 0&&!this.isAuthenticated(t)&&this.refresh(t),this.refreshPromise??Promise.resolve()}refresh(t){if(this.refreshPromise)return this.refreshPromise;if(!(!this.refreshToken&&!(this.clientId&&this.clientSecret)))return this.refreshPromise=this.runRefreshWithLock(t),this.refreshPromise}async runRefreshWithLock(t){let n=()=>{let s=this.getActiveLogin();return s?.accessToken&&s.accessToken!==this.accessToken&&this.setAccessToken(s.accessToken,s.refreshToken),this.isAuthenticated(t)?Promise.resolve(this.getProfile()):this.refreshToken?this.fetchTokens({grant_type:qe.RefreshToken,client_id:this.clientId??"",refresh_token:this.refreshToken}):this.clientId&&this.clientSecret?this.startClientLogin(this.clientId,this.clientSecret):Promise.resolve(void 0)},i=typeof navigator<"u"?navigator.locks:void 0;if(!i?.request)return n();let o=`medplum-refresh:${this.storage.makeKey("activeLogin")}`;return i.request(o,n)}async startClientLogin(t,n){return this.clientId=t,this.clientSecret=n,this.fetchTokens({grant_type:qe.ClientCredentials,client_id:t,client_secret:n})}async startJwtBearerLogin(t,n,i){return this.clientId=t,this.fetchTokens({grant_type:qe.JwtBearer,client_id:t,assertion:n,scope:i})}async startJwtAssertionLogin(t){return this.fetchTokens({grant_type:qe.ClientCredentials,client_assertion_type:os.JwtBearer,client_assertion:t})}setBasicAuth(t,n){this.clientId=t,this.clientSecret=n,this.basicAuth=Ft(t+":"+n)}setLogLevel(t){this.logLevel=t,this.options.verbose=t==="verbose"}getLogLevel(){return this.logLevel}setVerbose(t){this.logLevel=t?"verbose":"none",this.options.verbose=t}async fhircastSubscribe(t,n){if(!(typeof t=="string"&&t!==""))throw new f(T("Invalid topic provided. Topic must be a valid string."));if(!(typeof n=="object"&&Array.isArray(n)&&n.length>0))throw new f(T("Invalid events provided. Events must be an array of event names containing at least one event."));let i={channelType:"websocket",mode:"subscribe",topic:t,events:n},s=(await this.post(this.fhircastHubUrl,Lr(i),k.FORM_URL_ENCODED))["hub.channel.endpoint"];if(!s)throw new Error("Invalid response!");return i.endpoint=s,i}async fhircastUnsubscribe(t){if(!Bt(t))throw new f(T("Invalid topic or subscriptionRequest. SubscriptionRequest must be an object."));if(!(t.endpoint&&typeof t.endpoint=="string"&&t.endpoint.startsWith("ws")))throw new f(T("Provided subscription request must have an endpoint in order to unsubscribe."));t.mode="unsubscribe",await this.post(this.fhircastHubUrl,Lr(t),k.FORM_URL_ENCODED)}fhircastConnect(t){return new Ut(t)}async fhircastPublish(t,n,i,o){return ti(n)?this.post(this.fhircastHubUrl,Nr(t,n,i,o),k.JSON):(ri(n),this.post(this.fhircastHubUrl,Nr(t,n,i),k.JSON))}async fhircastGetContext(t){return this.get(`${this.fhircastHubUrl}/${t}`,{cache:"no-cache"})}async invite(t,n){return this.post("admin/projects/"+t+"/invite",n)}async handleTokenError(t){try{let n=await t.json();throw He(n)?new f(n):n.error_description?new f(P(n.error_description)):new Error(JSON.stringify(n))}catch(n){throw n instanceof f?(n.message=`Failed to fetch tokens: ${n.message}`,n):new f(P("Failed to fetch tokens"),{cause:n})}}async fetchTokens(t){let n=new URLSearchParams(t),i={...this.defaultHeaders,"Content-Type":k.FORM_URL_ENCODED};this.basicAuth&&(i.Authorization=`Basic ${this.basicAuth}`),this.credentialsInHeader&&(n.delete("client_id"),n.delete("client_secret"),!this.basicAuth&&t.client_id&&t.client_secret&&(i.Authorization=`Basic ${Ft(t.client_id+":"+t.client_secret)}`));let o={method:"POST",headers:i,body:n.toString(),credentials:"include"},s;try{s=await this.fetchWithRetry(this.tokenUrl,o)}catch(u){throw this.refreshPromise=void 0,u}s.ok||(this.clearActiveLogin(),this.onUnauthenticated?.(),await this.handleTokenError(s));let a=await s.json();return await this.verifyTokens(a),this.getProfile()}async verifyTokens(t){let n=t.access_token;if(ii(n)){let i=Wt(n);if(Date.now()>=i.exp*1e3)throw this.clearActiveLogin(),new f(un);if(i.cid){if(i.cid!==this.clientId)throw this.clearActiveLogin(),new f(or)}else if(this.clientId&&i.client_id!==this.clientId)throw this.clearActiveLogin(),new f(or)}return this.setActiveLogin({accessToken:n,refreshToken:t.refresh_token,project:t.project,profile:t.profile})}checkSessionDetailsMatchLogin(t){return this.sessionDetails&&t?t.profile?.reference?.endsWith(this.sessionDetails.profile.id)??!1:!0}setupStorageListener(){try{window.addEventListener("storage",t=>{if(t.key===null)ce.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)?ce.reload():i?this.setAccessToken(i.accessToken,i.refreshToken):this.clear()}})}catch{}}getSubscriptionManager(){return this.subscriptionManager||(this.subscriptionManager=new Ht(this,Bn(this.baseUrl,"/ws/subscriptions-r4"))),this.subscriptionManager}subscribeToCriteria(t,n){return this.getSubscriptionManager().addCriteria(t,n)}unsubscribeFromCriteria(t,n){this.subscriptionManager&&this.subscriptionManager.removeCriteria(t,n)}getMasterSubscriptionEmitter(){return this.getSubscriptionManager().getMasterEmitter()}};function Ol(){if(!globalThis.fetch)throw new Error("Fetch not available in this environment");return globalThis.fetch.bind(globalThis)}async function ts(r,e){let t=r.headers.get("content-location");if(t)return t;let n=r.headers.get("location");if(n)return n;if(He(e)&&e.issue?.[0]?.diagnostics)return e.issue[0].diagnostics}function rs(r){let e=r.entry?.map(t=>t.resource)??[];return Object.assign(e,{bundle:r})}function Il(r){return C(r)&&"data"in r&&"contentType"in r}function ui(r,e,t,n){return Il(r)?r:{data:r,filename:e,contentType:t,onProgress:n}}function kl(r){return C(r)&&"docDefinition"in r}function ss(r,e,t,n){return kl(r)?r:{docDefinition:r,filename:e,tableLayouts:t,fonts:n}}function Vl(r){return r.status===429||r.status>=500}var Dl={aws_ssm_parameter_store:"aws_ssm_parameter_store"};function Ml(r,e,t){let n=new Wr;Array.isArray(r)||(r=r.entry?.map(i=>i.resource)??[]);for(let i of r)n.addObservation(i);return n.summarize(e,t)}var Wr=class{constructor(e){c(this,"code");c(this,"unit");c(this,"sampling");c(this,"dataPoints");this.dataPoints=[],this.code=e?.code,this.unit=e?.unit,this.sampling=e?.sampling}addObservation(e){if(!this.code)this.code=e.code;else if(!_l(this.code,e.code))throw new Error("Observation does not match code of sampled data");e.valueQuantity?.value!==void 0?(this.checkUnit(e.valueQuantity),this.addData(e.valueQuantity.value)):e.valueInteger!==void 0?this.addData(e.valueInteger):e.valueSampledData?.data&&(this.checkUnit(e.valueSampledData.origin),this.addData(...li(e.valueSampledData)))}addData(...e){this.dataPoints.push(...e)}checkUnit(e){if(!this.unit)this.unit=e;else if(e.code&&e.system){if(this.unit.system!==e.system||this.unit.code!==e.code)throw new Error("Incorrect unit for Observation")}else if(e.unit&&this.unit.unit!==e.unit)throw new Error("Incorrect unit for Observation")}summarize(e,t){if(!this.code)throw new Error("Code is required for data points");let n=t(this.dataPoints);return{resourceType:"Observation",status:"final",code:e,valueQuantity:typeof n=="number"?{...this.unit,value:n}:n,component:[{code:this.code,valueSampledData:{origin:{...this.unit,value:0},dimensions:1,period:0,...this.sampling,data:Ll(this.dataPoints,this.sampling)}}]}}};function _l(r,e){return!!r.coding?.some(t=>e.coding?.some(n=>t.system===n.system&&t.code===n.code))}function li(r){return r.data?.split(" ").map(e=>Number.parseFloat(e)*(r.factor??1)+(r.origin.value??0))??[]}function Ll(r,e){if(r.length)return r.map(t=>(t-(e?.origin.value??0))/(e?.factor??1)).join(" ")}function Nl(r){let e=[],t=r.effectiveInstant??r.effectiveDateTime??r.effectivePeriod?.start,n=t?Date.parse(t).valueOf():0;r.valueSampledData&&e.push(...as(r.valueSampledData,n,r));for(let i of r.component??y)i.valueSampledData&&e.push(...as(i.valueSampledData,n,{...r,...i}));return e}function as(r,e,t){let n=[],i=li(r),o=O(t);for(let s=0;s<i.length;s++){let a=i[s],u=e+Math.floor(s/r.dimensions)*r.period;n.push({...t,id:void 0,effectiveInstant:void 0,effectivePeriod:void 0,effectiveTiming:void 0,effectiveDateTime:u?new Date(u).toISOString():void 0,valueQuantity:{...r.origin,value:a},valueSampledData:void 0,component:void 0,derivedFrom:o?[...t.derivedFrom??[],{reference:o}]:t.derivedFrom})}return n}function jr({parentContext:r,path:e,elements:t,profileUrl:n,debugMode:i,accessPolicyResource:o}){if(e===r?.path)return;i??=r?.debugMode??!1,o??=r?.accessPolicyResource;let s=Fl(e,t,r,!!i),a=Ne(e,".",2)[1];s=Ul(s,o,a),s=Bl(s,o,a);let u=Object.create(null);for(let[p,g]of Object.entries(s))u[e+"."+p]=g;let l;if(r&&!r.isDefaultContext)l=r.getExtendedProps;else{let p=Object.create(null);l=g=>{let v=Ne(g,".",2)[1];if(v){if(!p[v]){let M=qr(v,o?.hiddenFields);p[v]={hidden:M,readonly:M||qr(v,o?.readonlyFields)}}return p[v]}}}return{path:e,elements:s,elementsByPath:u,profileUrl:n??r?.profileUrl,debugMode:i,getExtendedProps:l,accessPolicyResource:o}}function Fl(r,e,t,n){let i=Object.create(null);if(t)for(let[s,a]of Object.entries(t.elementsByPath)){let u=me(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 Ul(r,e,t){if(!e?.hiddenFields?.length)return r;let n=t?t+".":"";return Object.fromEntries(Object.entries(r).filter(([i])=>!qr(n+i,e.hiddenFields)))}function Bl(r,e,t){if(!e?.readonlyFields?.length)return r;let n=Object.create(null),i=t?t+".":"";for(let[o,s]of Object.entries(r))qr(i+o,e.readonlyFields)?n[o]={...s,readonly:!0}:n[o]=s;return n}function qr(r,e){if(!e?.length)return!1;let t=r.split(".");for(let n=1;n<=t.length;n++){let i=t.slice(0,n).join(".");if(e.includes(i))return!0}return!1}function di(r){return r.type!==void 0&&r.type.length>0}function Wl(r,e,t,n){let i=Me(r,e.path,{profileUrl:n});if(i){let o=t.typeSchema?.elements??t.elements;return i.some(s=>gr(s,e,t,o))??!1}return console.assert(!1,"getNestedProperty[%s] in isDiscriminatorComponentMatch missed",e.path),!1}function pi(r,e,t,n){if(r)for(let i of e){let o={value:r,type:i.typeSchema?.type??i.type?.[0].code};if(t.every(s=>Wl(o,s,i,i.typeSchema?.url??n)))return i.name}}var Qt=class{constructor(e,t,n){c(this,"rootSchema");c(this,"visitor");c(this,"elementsContextStack");c(this,"sliceAllowList");if(e.type===void 0)throw new Error("schema must include a type");this.rootSchema=e;let i=jr({parentContext:void 0,path:this.rootSchema.type,elements:n??this.rootSchema.elements,profileUrl:this.rootSchema.name===this.rootSchema.type?void 0:this.rootSchema.url});if(i===void 0)throw new Error("Could not create root elements context");this.elementsContextStack=[i],this.visitor=t}get elementsContext(){return this.elementsContextStack.at(-1)}crawlElement(e,t,n){this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema);let i=Object.fromEntries(Object.entries(this.elementsContext.elements).filter(([o])=>o.startsWith(t)));this.crawlElementsImpl(i,n),this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlSlice(e,t,n){let i=this.prepareSlices(n.slices,n);if(!oe(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=ql(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);oe(e.element?.slicing?.slices)&&this.crawlSlicingImpl(e.element.slicing,n),this.visitor.onExitElement&&this.visitor.onExitElement(n,e.element,this.elementsContext)}prepareSlices(e,t){let n=[];for(let o of e){if(!di(o))continue;let s=o.type.find(a=>oe(a.profile))?.profile?.[0];if(oe(s)){let a=Tn(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;oe(s)&&(o=jr({path:t,parentContext:this.elementsContext,elements:s})),o&&this.elementsContextStack.push(o),this.crawlElementsImpl(s,t),o&&this.elementsContextStack.pop(),this.visitor.onExitSlice&&this.visitor.onExitSlice(t,e,n),i&&this.visitor.onExitSchema&&this.visitor.onExitSchema(i)}};function ql(r){let e=[];function t(o,s){return s.startsWith(o+".")}function n(o,s){for(let a of o.children)if(t(a.key,s.key)){n(a,s);return}o.children.push(s)}let i=Object.entries(r);i.sort((o,s)=>o[0].localeCompare(s[0]));for(let[o,s]of i){let a={key:o,element:s,children:[]},u=!1;for(let l of e)if(t(l.key,o)){n(l,a),u=!0;break}u||e.push(a)}return e}var $r="__sliceName";function jl(r,e){let t=new Hr(r,r.resourceType,"resource");return new Qt(e,t).crawlResource(),t.getDefaultValue()}function $l(r,e,t){for(let[n,i]of Object.entries(e)){if(t===void 0||t===n){zt(r,n,i,e);continue}let o=me(t,n);o!==void 0&&zt(r,o,i,e)}return r}function Hl(r,e,t,n){let i=new Hr([{[$r]:e.name}],e.path,"element");return new Qt(n,i).crawlSlice(r,e,t),i.getDefaultValue()[0]}var Hr=class{constructor(e,t,n){c(this,"rootValue");c(this,"schemaStack");c(this,"valueStack");this.schemaStack=[],this.valueStack=[],this.rootValue=Pe(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=me(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=me(n.path,o),p=Array.isArray(u)?u:[u];for(let g of p){Gl(g,s,t,n.elements,l),zt(g,s,t,n.elements);let v=mi(g,s,n.elements,l);v!==void 0&&a.push(v)}}this.valueStack.push({type:"element",path:e,values:a})}onExitElement(e,t,n){if(!this.valueStack.pop())throw new Error("Expected value context to exist when exiting element");let o=me(this.value.path,e);if(o===void 0)throw new Error(`Expected ${e} to be prefixed by ${this.value.path}`);let s=me(n.path,this.value.path);for(let a of this.value.values){let u=mi(a,o,n.elements,s);if(Array.isArray(u))for(let l=u.length-1;l>=0;l--){let p=u[l];oe(p)||u.splice(l,1)}A(u)&&fi(a,void 0,o,t)}}onEnterSlice(e,t,n){let i=this.value.values,o=[];for(let s of i)if(s!==void 0){let a=Array.isArray(s)?s:[s],u=this.getMatchingSliceValues(a,t,n);o.push(u)}this.valueStack.push({type:"slice",path:e,values:o})}getMatchingSliceValues(e,t,n){let i=[];for(let o of e)(o[$r]??pi(o,[t],n.discriminator,this.schema.url))===t.name&&i.push(o);for(let o=i.length;o<t.min;o++)if(Cr(t.type[0].code)){let s=Object.create(null);i.push(s),e.push(s)}return i}onExitSlice(){let e=this.valueStack.pop();if(!e)throw new Error("Expected value context to exist in onExitSlice");for(let t of e.values)for(let n=t.length-1;n>=0;n--){let i=t[n];$r in i&&delete i[$r]}}getDefaultValue(){return this.rootValue}};function Gl(r,e,t,n,i){let o=mi(r,e,n,i);t.min>0&&o===void 0&&Cr(t.type[0].code)&&(t.isArray?fi(r,[Object.create(null)],e,t):fi(r,Object.create(null),e,t))}function fi(r,e,t,n){if(t.includes("."))throw new Error("key cannot be nested");let i=t;if(t.includes("[x]")){let o=n.type[0].code;i=t.replace("[x]",L(o))}e===void 0?delete r[i]:r[i]=e}function mi(r,e,t,n){let i=e.split("."),o=r,s;for(let a=0;a<i.length;a++){let u=i[a];if(u.includes("[x]")){let l=(n?n+".":"")+i.slice(0,a+1).join("."),g=t[l].type[0].code;u=u.replace("[x]",L(g))}if(a===i.length-1){Array.isArray(o)?s=o.map(l=>l[u]):s=o[u];continue}if(Array.isArray(o))o=o.map(l=>l[u]);else if(C(o)){if(o[u]===void 0)return;o=o[u]}else return}return s}function zt(r,e,t,n){if(!(t.fixed||t.pattern))return r;if(Array.isArray(r))return r.map(a=>zt(a,e,t,n));r==null&&(r=Object.create(null));let i=r,o=e.split("."),s=i;for(let a=0;a<o.length;a++){let u=o[a];if(u.includes("[x]")){let p=n[o.slice(0,a+1).join(".")].type[0].code;u=u.replace("[x]",L(p))}if(a===o.length-1){let l=Array.isArray(s)?s:[s];for(let p of l)t.fixed?p[u]??=t.fixed.value:t.pattern&&(p[u]=cs(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 cs(r,e){if(Array.isArray(e)&&(Array.isArray(r)||r===void 0))return(r?.length??0)>0?r:Pe(e);if(C(e)&&(C(r)&&!Array.isArray(r)||r===void 0)){let t=Pe(r)??Object.create(null);for(let n of Object.keys(e))t[n]=cs(t[n],e[n]);return t}return r}function hi(r,e){if(!r.group)throw new f(P("ConceptMap does not specify a mapping group","ConceptMap.group"));let t=us(e),n=Ql(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 us(r){let e=Object.create(null);if(r.code&&!r.coding&&!r.codeableConcept){if(!r.system)throw new f(P("System parameter must be provided with code"));e[r.system]=[r.code]}else if(r.coding&&!r.code&&!r.codeableConcept)r.coding.code&&(e[r.coding.system??""]=[r.coding.code]);else if(r.codeableConcept&&!r.code&&!r.coding)for(let{system:t,code:n}of r.codeableConcept.coding??y)n&&(e[t??""]=Y(e[t??""],n));else throw r.code||r.coding||r.codeableConcept?new f(P("Ambiguous input: multiple source codings provided")):new f(P("Source Coding (system + code) must be specified"));return e}function Ql(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=zl(i,o)),s&&t.push(...s)}return t}function zl(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 Jl=[..._t,"->","<<",">>","=="];function ls(r){return new ve(r,Mt,Jl).tokenize()}var Kl={"-":"disjoint","==":"equal"},gi=class{constructor(e){c(this,"parser");c(this,"structureMap",{resourceType:"StructureMap",status:"active"});this.parser=e}parse(){for(;this.parser.hasMore();){let e=this.parser.peek()?.value;switch(e){case"map":this.parseMap();break;case"uses":this.parseUses();break;case"imports":this.parseImport();break;case"group":this.parseGroup();break;case"conceptmap":this.parseConceptMap();break;default:throw new Error(`Unexpected token: ${e}`)}}return this.structureMap}parseMap(){this.parser.consume("Symbol","map"),this.structureMap.url=this.parser.consume("String").value,this.parser.consume("="),this.structureMap.name=this.parser.consume().value}parseUses(){this.parser.consume("Symbol","uses");let e={};e.url=this.parser.consume("String").value,this.parser.peek()?.value==="alias"&&(this.parser.consume("Symbol","alias"),e.alias=this.parser.consume("Symbol").value),this.parser.consume("Symbol","as"),e.mode=this.parser.consume().value,this.structureMap.structure||(this.structureMap.structure=[]),this.structureMap.structure.push(e)}parseImport(){this.parser.consume("Symbol","imports"),this.structureMap.import||(this.structureMap.import=[]),this.structureMap.import.push(this.parser.consume("String").value)}parseGroup(){let e={};this.parser.consume("Symbol","group"),e.name=this.parser.consume("Symbol").value,e.input=this.parseParameters(),this.parser.peek()?.value==="extends"&&(this.parser.consume("Symbol","extends"),e.extends=this.parser.consume("Symbol").value),this.parser.peek()?.value==="<<"?(this.parser.consume("<<"),e.typeMode=this.parser.consume().value,this.parser.peek()?.value==="+"&&(this.parser.consume("+"),e.typeMode="type-and-types"),this.parser.consume(">>")):e.typeMode="none",e.rule=this.parseRules(),this.structureMap.group||(this.structureMap.group=[]),this.structureMap.group.push(e)}parseParameters(){let e=[];for(this.parser.consume("(");this.parser.hasMore()&&this.parser.peek()?.value!==")";)e.push(this.parseParameter()),this.parser.peek()?.value===","&&this.parser.consume(",");return this.parser.consume(")"),e}parseParameter(){let e={};return e.mode=this.parser.consume().value,e.name=this.parser.consume("Symbol").value,this.parser.peek()?.value===":"&&(this.parser.consume(":"),e.type=this.parser.consume("Symbol").value),e}parseRules(){let e=[];for(this.parser.consume("{");this.parser.hasMore()&&this.parser.peek()?.value!=="}";)e.push(this.parseRule());return this.parser.consume("}"),e}parseRule(){let e={source:this.parseRuleSources()};return this.parser.peek()?.value==="->"&&(this.parser.consume("->"),e.target=this.parseRuleTargets()),this.parser.peek()?.value==="then"&&(this.parser.consume("Symbol","then"),this.parser.peek()?.id==="{"?e.rule=this.parseRules():e.dependent=this.parseRuleDependents()),this.parser.peek()?.id==="String"?e.name=this.parser.consume().value:e.name=e.source?.[0]?.element,this.parser.consume(";"),e}parseRuleSources(){this.parser.hasMore()&&this.parser.peek()?.value==="for"&&this.parser.consume("Symbol","for");let e=[this.parseRuleSource()];for(;this.parser.hasMore()&&this.parser.peek()?.value===",";)this.parser.consume(","),e.push(this.parseRuleSource());return e}parseRuleSource(){let e={},n=this.parseRuleContext().split(".");if(e.context=n[0],e.element=n[1],this.parser.hasMore()&&this.parser.peek()?.value===":"&&(this.parser.consume(":"),e.type=this.parser.consume().value),this.parser.hasMore()&&this.parser.peek()?.value==="default"&&(this.parser.consume("Symbol","default"),e.defaultValueString=this.parser.consume("String").value),(this.parser.peek()?.value==="first"||this.parser.peek()?.value==="not_first"||this.parser.peek()?.value==="last"||this.parser.peek()?.value==="not_last"||this.parser.peek()?.value==="only_one")&&(e.listMode=this.parser.consume().value),this.parser.peek()?.value==="as"&&(this.parser.consume("Symbol","as"),e.variable=this.parser.consume().value),this.parser.peek()?.value==="log"&&(this.parser.consume("Symbol","log"),e.logMessage=this.parser.consume().value),this.parser.peek()?.value==="where"){this.parser.consume("Symbol","where");let i=this.parser.consumeAndParse(S.Arrow);e.condition=i.toString()}if(this.parser.peek()?.value==="check"){this.parser.consume("Symbol","check");let i=this.parser.consumeAndParse(S.Arrow);e.check=i.toString()}return e}parseRuleTargets(){let e=[this.parseRuleTarget()];for(;this.parser.hasMore()&&this.parser.peek()?.value===",";)this.parser.consume(","),e.push(this.parseRuleTarget());return e}parseRuleTarget(){let e={},n=this.parseRuleContext().split(".");return e.contextType="variable",e.context=n[0],e.element=n[1],this.parser.peek()?.value==="="&&(this.parser.consume("="),this.parseRuleTargetTransform(e)),this.parser.peek()?.value==="as"&&(this.parser.consume("Symbol","as"),e.variable=this.parser.consume().value),this.parser.peek()?.value==="share"&&(this.parser.consume("Symbol","share"),e.listMode=["share"],this.parser.consume("Symbol")),(this.parser.peek()?.value==="first"||this.parser.peek()?.value==="last"||this.parser.peek()?.value==="collate")&&(e.listMode=[this.parser.consume().value]),e}parseRuleTargetTransform(e){let t=this.parser.consumeAndParse(S.As);t instanceof Z?(e.transform=t.name,e.parameter=t.args?.map(ds)):t instanceof $||t instanceof B?(e.transform="copy",e.parameter=[ds(t)]):(e.transform="evaluate",e.parameter=[{valueString:t.toString()}])}parseRuleContext(){let e=this.parser.consume().value;for(;this.parser.peek()?.value===".";)this.parser.consume("."),e+="."+this.parser.consume().value;return e}parseRuleDependents(){let e=this.parser.consumeAndParse(S.Arrow);return[{name:e.name,variable:e.args.map(t=>t.name)}]}parseConceptMap(){this.parser.consume("Symbol","conceptmap");let e={resourceType:"ConceptMap",status:"active",url:"#"+this.parser.consume("String").value};this.parser.consume("{");let t={},n=this.parser.peek()?.value;for(;n!=="}";)n==="prefix"?this.parseConceptMapPrefix(t):this.parseConceptMapRule(e,t),n=this.parser.peek()?.value;this.parser.consume("}"),this.structureMap.contained||(this.structureMap.contained=[]),this.structureMap.contained.push(e)}parseConceptMapPrefix(e){this.parser.consume("Symbol","prefix");let t=this.parser.consume().value;this.parser.consume("=");let n=this.parser.consume().value;e[t]=n}parseConceptMapRule(e,t){let n=this.parser.consume().value,i=t[n];this.parser.consume(":");let o=this.parser.consume().value,s=Kl[this.parser.consume().value],a=this.parser.consume().value,u=t[a];this.parser.consume(":");let l=this.parser.consume().value,p=e?.group?.find(g=>g.source===i&&g.target===u);p||(p={source:i,target:u,element:[]},e.group||(e.group=[]),e.group.push(p)),p.element||(p.element=[]),p.element.push({code:o,target:[{code:l,equivalence:s}]})}};function ds(r){if(r instanceof B)return{valueId:r.name};if(r instanceof $)return Yl(r);throw new Error(`Unknown parameter atom type: ${r.constructor.name} (${r.toString()})`)}function Yl(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 Xl=Ze().registerInfix("->",{precedence:S.Arrow}).registerInfix(";",{precedence:S.Semicolon});function Zl(r){let e=Xl.construct(ls(r));return e.removeComments(),new gi(e).parse()}var Gr=class{constructor(e=[]){c(this,"resources");this.resources=e}get(e,t){let n=[];for(let i of this.resources)i.resourceType===e&&i.url&&this.matchesUrl(i.url,t)&&n.push(i);return n}matchesUrl(e,t){if(t.includes("*")){let n=t.split("*");return e.startsWith(n[0])&&e.endsWith(n[1])}else return e===t}};function ed(r,e,t=new Gr){return td({root:r,transformMaps:t},r,e)}function td(r,e,t){return rd(r,e),fs(r,e),xi(r,e.group[0],t)}function rd(r,e){let t=zr(r);if(t&&e.import)for(let n of e.import){let i=t.get("StructureMap",n);for(let o of i)fs(r,o)}}function fs(r,e){let t=zr(r);if(t&&e.contained)for(let n of e.contained)(n.resourceType==="StructureMap"||n.resourceType==="ConceptMap")&&t.resources.push(n);for(let n of e.group??y)Qr(r,n.name,{type:"StructureMapGroup",value:n})}function xi(r,e,t){let n=[],i=[];for(let l of e.input)l.mode==="source"&&n.push(l),l.mode==="target"&&i.push(l);if(n.length===0)throw new Error("Missing source definitions");if(i.length===0)throw new Error("Missing target definitions");if(t.length<n.length)throw new Error(`Not enough arguments (got ${t.length}, min ${n.length})`);if(t.length>n.length+i.length)throw new Error(`Too many arguments (got ${t.length}, max ${n.length+i.length})`);let o={},s=[],a=0;for(let l of n)Jt(o,l.name,t[a++]);for(let l of i){let p=t[a++]??{type:l.type??"BackboneElement",value:{}};Jt(o,l.name,p),s.push(p)}let u={root:r.root,parent:r,variables:o};for(let l of e.rule??y)ms(u,l);return s}function ms(r,e){e.source&&hs(r,e,0)}function hs(r,e,t){let n=e.source[t];for(let i of sd(r,n))Qr(r,"_",i),n.variable&&Qr(r,n.variable,i),t<e.source.length-1?hs(r,e,t+1):nd(r,e)}function nd(r,e){if(!id(r,e)){for(let t of e.target??y)gs(r,t);for(let t of e.rule??y)ms(r,t);for(let t of e.dependent??y)gd(r,t)}}function id(r,e){if(e.target?.length!==1||e.target[0].transform||e.rule||e.dependent)return!1;let t=ke(r,"_");if(Array.isArray(t)&&(t=t[0]),!t)return!1;let n=od(r,t);if(!n)return gs(r,{...e.target[0],transform:"copy",parameter:[{valueId:"_"}]}),!0;let i=e.target[0],o=ke(r,i.context),s=o.value[i.element],a=xs(o,i.element)||Array.isArray(s),u={root:r.root,parent:r,variables:{}},l=xi(u,n,[t]);return ys(r,i,o,l,a,s),!0}function od(r,e){let t=r;for(;t;){if(t.variables){for(let n of Object.values(t.variables))for(let i of yi(n))if(i.type==="StructureMapGroup"){let o=i.value;if((o.typeMode==="types"||o.typeMode==="type-and-types")&&o.input.length===2&&o.input[0].mode==="source"&&o.input[0].type===e.type&&o.input[1].mode==="target")return o}}t=t.parent}}function sd(r,e){let t=ke(r,e.context);if(!t)return[];let n=e.element;if(!n)return[t];let i=w(n,[t]);if(!i||i.length===0)return[];if(e.condition&&!ps(t,{[e.variable]:i[0]},e.condition))return[];if(e.check&&!ps(t,{[e.variable]:i[0]},e.check))throw new Error("Check failed: "+e.check);return e.listMode&&(i=ad(e,i)),i}function ps(r,e,t){return q(w(t,[r],e))}function ad(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 gs(r,e){let t=ke(r,e.context);if(!t)throw new Error("Target not found: "+e.context);let n=t.value[e.element],i,o=xs(t,e.element)||Array.isArray(n);if(e.transform)switch(e.transform){case"append":i=cd(r,e);break;case"cast":i=ud(r,e);break;case"cc":i=ld(r,e);break;case"copy":i=dd(r,e);break;case"create":i=pd(r,e);break;case"evaluate":i=fd(r,e);break;case"translate":i=md(r,e);break;case"truncate":i=hd(r,e);break;case"uuid":i=[{type:"string",value:ee()}];break;default:throw new Error(`Unsupported transform: ${e.transform}`)}else{let s=vs(t,e.element)?.type,a=s?.length===1?s[0].code:void 0;o||n===void 0?i=[a?{type:a,value:{}}:b({})]:i=[a?{type:a,value:n}:b(n)]}ys(r,e,t,i,o,n)}function ys(r,e,t,n,i,o){if(n.length!==0){if(i){o||(o=[],Jt(t.value,e.element,o));for(let s of n)o.push(s.value)}else Jt(t.value,e.element,n[0].value);e.variable&&Qr(r,e.variable,yd(n))}}function xs(r,e){return vs(r,e)?.isArray}function vs(r,e){return Ee(r.type)?.elements?.[e]}function cd(r,e){let t=H(r,e.parameter?.[0])?.[0]?.value,n=H(r,e.parameter?.[1])?.[0]?.value;return[{type:"string",value:(t??"").toString()+(n??"").toString()}]}function ud(r,e){let t=H(r,e.parameter?.[0])?.[0];return H(r,e.parameter?.[1])?.[0]?.value==="string"?[{type:"string",value:t?.value?.toString()}]:[t]}function ld(r,e){let t=e.parameter;if(t.length===2){let n=H(r,t[0])?.[0]?.value,i=H(r,t[1])?.[0]?.value;return[{type:"CodeableConcept",value:{coding:[{system:n,code:i}]}}]}else return[{type:"CodeableConcept",value:{text:H(r,t[0])?.[0]?.value}}]}function dd(r,e){return e.parameter.flatMap(t=>H(r,t))}function pd(r,e){let t={};return e.parameter&&e.parameter.length>0&&(t.resourceType=H(r,e.parameter?.[0])?.[0]?.value),[b(t)]}function fd(r,e){let n=H(r,e.parameter?.[0])[0].value;return w(n,[],Ts(r))}function md(r,e){let t=e.parameter.flatMap(u=>H(r,u)),n=t[0].value,i=t[1].value,s=zr(r)?.get("ConceptMap",i)[0];if(!s)throw new Error("ConceptMap not found: "+i);let a=hi(s,{system:s.group?.[0]?.source,code:n});return[b(a.match?.[0]?.concept?.code)]}function hd(r,e){let t=H(r,e.parameter?.[0])?.[0],n=H(r,e.parameter?.[1])?.[0]?.value;return t.type==="string"?[{type:"string",value:t.value.substring(0,n)}]:[t]}function gd(r,e){let t=ke(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=ke(r,s);if(!a)throw new Error("Dependent variable not found: "+s);i.push(a)}let o={root:r.root,parent:r,variables:{}};xi(o,t.value,i)}function zr(r){if(r.transformMaps)return r.transformMaps;if(r.parent)return zr(r.parent)}function H(r,e){let n=_({type:"StructureMapGroupRuleTargetParameter",value:e},"value");if(!n)throw new Error("Missing target parameter: "+JSON.stringify(e));if(n=yi(n),n.length===1&&n[0].type==="id"){let i=ke(r,n[0].value);if(!i)throw new Error("Variable not found: "+n[0].value);return yi(i)}return n}function ke(r,e){let t=r.variables?.[e];if(t)return t;if(r.parent)return ke(r.parent,e)}function Ts(r,e={}){if(r.parent&&Ts(r.parent,e),r.variables)for(let[t,n]of Object.entries(r.variables))e[t]=n,e["%"+t]=n;return e}function Qr(r,e,t){r.variables||(r.variables={}),Jt(r.variables,e,t)}function Jt(r,e,t){if(e==="__proto__"||e==="constructor"||e==="prototype")throw new Error("Invalid key: "+e);r[e]=t}function yi(r){return Array.isArray(r)?r:[r]}function yd(r){return r.length===1?r[0]:r}var xd=" ".repeat(2),vi=class{constructor(e=xd,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 Ts(t,120-this.indent.length*this.indentCount))n?this.b.push(this.indent.repeat(this.indentCount)):this.b.push(this.indent.repeat(this.indentCount+2)),this.b.push(i.trim()),this.b.push(`
47
+ `);else{let n=!0;for(let i of Ss(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 Ts(r,e){let t=[],n=[],i=0;return r.split(" ").forEach(function(o){i+o.length>e&&(t.push(n.join(" ").trim()),n=[],i=0),i+=o.length+1,n.push(o)}),n.length>0&&t.push(n.join(" ").trim()),t}var yd=[..._t,"eq","ne","co"];function Ss(r){return new xe(r,Mt,yd,{dateTimeLiterals:!0,symbolRegex:/[^\s\])]/}).tokenize()}var Kt=class{constructor(e,t,n){c(this,"path");c(this,"operator");c(this,"value");this.path=e,this.operator=t,this.value=n}},Yt=class{constructor(e){c(this,"child");this.child=e}},Xt=class{constructor(e,t,n){c(this,"keyword");c(this,"left");c(this,"right");this.keyword=e,this.left=t,this.right=n}};var xd={eq:m.EXACT,ne:m.NOT_EQUALS,co:m.CONTAINS,sw:m.STARTS_WITH,ew:void 0,gt:m.GREATER_THAN,lt:m.LESS_THAN,ge:m.GREATER_THAN_OR_EQUALS,le:m.LESS_THAN_OR_EQUALS,ap:m.APPROXIMATELY,sa:m.STARTS_AFTER,eb:m.ENDS_BEFORE,pr:m.PRESENT,po:void 0,ss:void 0,sb:void 0,in:m.IN,ni:m.NOT_IN,re:m.EQUALS,identifier:m.IDENTIFIER};function vd(r){let e=xd[r];if(!e)throw new f(P("Invalid operator: "+r));return e}var Ti=class{constructor(e){c(this,"parser");this.parser=e}parse(){let e;this.parser.peek()?.value==="("?(this.parser.consume("("),e=this.parse(),this.parser.consume(")")):this.parser.peek()?.value==="not"?(this.parser.consume("Symbol","not"),this.parser.consume("("),e=new Yt(this.parse()),this.parser.consume(")")):e=new Kt(this.parser.consume("Symbol").value,vd(this.parser.consume("Symbol").value),this.parser.consume().value);let t=this.parser.peek()?.value;return t==="and"||t==="or"?(this.parser.consume("Symbol",t),new Xt(t,e,this.parse())):e}},Td=Xe();function Sd(r){let e=Td.construct(Ss(r));return e.removeComments(),new Ti(e).parse()}var bd={AA:"AA",AE:"AE",AR:"AR",CA:"CA",CE:"CE",CR:"CR"},Ed={AA:"OK",AE:"Application Error",AR:"Application Reject",CA:"Commit Accept",CE:"Commit Error",CR:"Commit Reject"},ve=class{constructor(e="\r",t="|",n="^",i="~",o="\\",s="&"){c(this,"segmentSeparator");c(this,"fieldSeparator");c(this,"componentSeparator");c(this,"repetitionSeparator");c(this,"escapeCharacter");c(this,"subcomponentSeparator");this.segmentSeparator=e,this.fieldSeparator=t,this.componentSeparator=n,this.repetitionSeparator=i,this.escapeCharacter=o,this.subcomponentSeparator=s}getMsh1(){return this.fieldSeparator}getMsh2(){return this.componentSeparator+this.repetitionSeparator+this.escapeCharacter+this.subcomponentSeparator}},Si=class r{constructor(e,t=new ve){c(this,"context");c(this,"_segments");c(this,"segmentsByName");c(this,"cachedString");c(this,"allSegmentsParsed");this.context=t,this._segments=e,this.segmentsByName=bs(e),this.allSegmentsParsed=e.every(n=>typeof n!="string"),this.bindSegments()}get segments(){if(!this.allSegmentsParsed){for(let e=0;e<this._segments.length;e++)typeof this._segments[e]=="string"&&this.parseSegment(e);this.allSegmentsParsed=!0}return this._segments}get header(){let e=this.parseSegment(0);if(!e)throw new Error("Can't get header before first segment added");return e}get(e){return this.getSegment(e)}getAll(e){return this.getAllSegments(e)}getSegment(e){if(typeof e=="number")return this.parseSegment(e);let t=this.segmentsByName.get(e);if(t?.length)return this.parseSegment(t[0])}getAllSegments(e){let t=this.segmentsByName.get(e);return t?t.map(n=>this.parseSegment(n)):[]}parseSegment(e){let t=this._segments[e];if(t===void 0)return;if(typeof t!="string")return t;let n=ot.parse(t,this.context);return n.onModified=()=>{this.cachedString=void 0},this._segments[e]=n,n}toString(){return this.cachedString??=this._segments.map(e=>typeof e=="string"?e:e.toString()).join(this.context.segmentSeparator),this.cachedString}buildAck(e){let t=new Date,n=this.getSegment("MSH"),i=n?.getField(3)?.toString()??"",o=n?.getField(4)?.toString()??"",s=n?.getField(5)?.toString()??"",a=n?.getField(6)?.toString()??"",u=n?.getField(10)?.toString()??"",l=n?.getField(12)?.toString()??"2.5.1",p=e?.ackCode??"AA";return new r([new ot(["MSH",this.context.getMsh2(),s,a,i,o,Es(t),"",this.buildAckMessageType(n),t.getTime().toString(),"P",l],this.context),new ot(["MSA",p,u,Ed[p]],this.context),...e?.errSegment?[e.errSegment]:[]])}buildAckMessageType(e){let t=e?.getField(9),n=t?.getComponent(2),i=t?.getComponent(3),o="ACK";return n&&i?o=`ACK^${n}^ACK`:n&&(o=`ACK^${n}`),o}static parse(e){if(!e.startsWith("MSH")){let i=new Error("Invalid HL7 message");throw i.type="entity.parse.failed",i}let t=new ve("\r",e.charAt(3),e.charAt(4),e.charAt(5),e.charAt(6),e.charAt(7)),n=new r(e.split(/[\r\n]+/),t);return n.cachedString=e,n}setSegment(e,t){if(t.name==="MSH"){if(typeof e=="number"){if(e!==0)return!1}else if(this.findSegmentIndexByName(e)!==0)return!1}else if(typeof e=="number"&&e===0&&t.name!=="MSH")return!1;if(typeof e=="number")return e>=this._segments.length?(this._segments.push(t),this.invalidateCache(),!0):(this._segments[e]=t,this.invalidateCache(),!0);let n=this.findSegmentIndexByName(e);return n===0&&t.name!=="MSH"?!1:n!==-1?(this._segments[n]=t,this.invalidateCache(),!0):!1}findSegmentIndexByName(e){return this.segmentsByName.get(e)?.[0]??-1}invalidateCache(){this.segmentsByName=bs(this._segments),this.cachedString=void 0,this.bindSegments()}bindSegments(){let e=()=>{this.cachedString=void 0};for(let t of this._segments)typeof t!="string"&&(t.onModified=e)}};function bs(r){let e=new Map;for(let t=0;t<r.length;t++){let n=r[t],i=typeof n=="string"?n.slice(0,3):n.name,o=e.get(i);o?o.push(t):e.set(i,[t])}return e}var ot=class r{constructor(e,t=new ve){c(this,"context");c(this,"name");c(this,"_fields");c(this,"allFieldsParsed");c(this,"cachedString");c(this,"onModified");this.context=t,this._fields=e,this.allFieldsParsed=e.every(i=>typeof i!="string");let n=e[0];this.name=typeof n=="string"?n:n.components[0][0],this.bindFields()}get fields(){if(!this.allFieldsParsed){for(let e=0;e<this._fields.length;e++)typeof this._fields[e]=="string"&&this.parseField(e);this.allFieldsParsed=!0}return this._fields}get(e){return this.parseField(e)}getField(e){if(this.name==="MSH"){if(e===1)return new ce([[this.context.getMsh1()]],this.context);if(e===2)return new ce([[this.context.getMsh2()]],this.context);if(e>2)return this.parseField(e-1)}return this.parseField(e)}parseField(e){let t=this._fields[e];if(t===void 0)return;if(typeof t!="string")return t;let n=ce.parse(t,this.context);return n.onModified=()=>{this.cachedString=void 0,this.onModified?.()},this._fields[e]=n,n}getComponent(e,t,n,i=0){return this.getField(e)?.getComponent(t,n,i)??""}toString(){return this.cachedString??=this._fields.map(e=>typeof e=="string"?e:e.toString()).join(this.context.fieldSeparator),this.cachedString}static parse(e,t=new ve){let n=new r(e.split(t.fieldSeparator),t);return n.cachedString=e,n}setField(e,t){if(this.name==="MSH"){if(e===1||e===2)return!1;if(e>2){let n=e-1;for(;this._fields.length<=n;)this._fields.push(new ce([[""]],this.context));return this._fields[n]=typeof t=="string"?ce.parse(t,this.context):t,this.invalidateCache(),!0}}for(;this._fields.length<=e;)this._fields.push(new ce([[""]],this.context));return this._fields[e]=typeof t=="string"?ce.parse(t,this.context):t,this.invalidateCache(),!0}setComponent(e,t,n,i,o=0){let s=this.getField(e);return s?s.setComponent(t,n,i,o):!1}invalidateCache(){this.cachedString=void 0,this.bindFields(),this.onModified?.()}bindFields(){let e=()=>{this.cachedString=void 0,this.onModified?.()};for(let t of this._fields)typeof t!="string"&&(t.onModified=e)}},ce=class r{constructor(e,t=new ve){c(this,"context");c(this,"components");c(this,"onModified");c(this,"cachedString");this.context=t,this.components=e}get(e,t,n=0){return this.getComponent(e+1,t,n)}getComponent(e,t,n=0){let i=this.components[n][e-1]??"";return t!==void 0&&(i=i.split(this.context.subcomponentSeparator)[t]??""),i}toString(){return this.cachedString??=this.components.map(e=>e.join(this.context.componentSeparator)).join(this.context.repetitionSeparator),this.cachedString}static parse(e,t=new ve){let n=new r(e.split(t.repetitionSeparator).map(i=>i.split(t.componentSeparator)),t);return n.cachedString=e,n}setComponent(e,t,n,i=0){if(e<1)return!1;if(i>=this.components.length)for(;this.components.length<=i;)this.components.push([""]);if(n===void 0)this.components[i][e-1]=t;else{if(n<0)return!1;{let s=(this.components[i][e-1]||"").split(this.context.subcomponentSeparator);for(;s.length<=n;)s.push("");s[n]=t,this.components[i][e-1]=s.join(this.context.subcomponentSeparator)}}return this.invalidateCache(),!0}invalidateCache(){this.cachedString=void 0,this.onModified?.()}};function Rd(r,e){if(!r)return;let t=qe(r.slice(0,4),0),n=qe(r.slice(4,6),1)-1,i=qe(r.slice(6,8),1),o=qe(r.slice(8,10),0),s=qe(r.slice(10,12),0),a=qe(r.slice(12,14),0),u=0;r.includes(".")&&(u=qe(r.slice(15,19),0));let l=new Date(Date.UTC(t,n,i,o,s,a,u)),p=Cd(r,e?.tzOffset);return p!==0&&(l=new Date(l.getTime()-p)),l.toISOString()}function qe(r,e){let t=Number.parseInt(r,10);return Number.isNaN(t)?e:t}function Cd(r,e){let t=e,n=r.indexOf("+");n!==-1&&(t=r.slice(n));let i=r.indexOf("-");if(i!==-1&&(t=r.slice(i)),!t)return 0;let o=t.startsWith("-")?-1:1;t=t.slice(1).replace(":","");let s=Number.parseInt(t.slice(0,2),10),a=Number.parseInt(t.slice(2,4),10);return o*(s*60*60*1e3+a*60*1e3)}function Es(r){let e=r instanceof Date?r:new Date(r),n=e.toISOString().replaceAll(/[-:T]/g,"").replace(/(\.\d+)?Z$/,""),i=e.getUTCMilliseconds();return i>0&&(n+="."+i.toString()),n}var je={NONE:0,ERROR:1,WARN:2,INFO:3,DEBUG:4},Rs=["NONE","ERROR","WARN","INFO","DEBUG"],bi=class r{constructor(e,t={},n=je.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(je.ERROR,e,t)}warn(e,t){this.log(je.WARN,e,t)}info(e,t){this.log(je.INFO,e,t)}debug(e,t){this.log(je.DEBUG,e,t)}log(e,t,n){if(e>this.level)return;let i;if(sr(n))i=Zt(n);else if(n){i={...n};for(let[o,s]of Object.entries(i))s instanceof Error&&(i[o]=Zt(s))}this.write(JSON.stringify({level:Rs[e],timestamp:new Date().toISOString(),msg:this.prefix?`${this.prefix}${t}`:t,...i,...this.metadata}))}};function Pd(r){let e=je[r.toUpperCase()];if(e===void 0)throw new Error(`Invalid log level: ${r}`);return e}function Zt(r,e=0,t=10){if(e>=t)return{error:"Max error depth reached"};let n={error:r.toString(),stack:r.stack?.split(`
54
- `)};r.name&&r.name!=="Error"&&(n.name=r.name),r.message&&(n.message=r.message),"cause"in r&&r.cause!==void 0&&(r.cause instanceof Error?n.cause=Zt(r.cause,e+1,t):n.cause=r.cause);let i=Object.getOwnPropertyNames(r).filter(o=>!["name","message","stack","cause"].includes(o));for(let o of i)try{let s=r[o];s instanceof Error?n[o]=Zt(s,e+1,t):n[o]=s}catch{}return n}var Cs="Invalid response from order medication bot",Ad="Invalid response from medication search bot",Ps="Invalid response from order-set bot",As="https://medplum.com/fhir/CodeSystem/medication-request-status-reason",ws="response-not-received";function wd(){return{coding:[{system:As,code:ws,display:"Order-medication response not received"}],text:"The order-medication operation did not return a verifiable response; vendor-side state is unknown."}}function Os(r){if(typeof r!="object"||r===null)return!1;let e=r;return typeof e.orderId=="number"&&Number.isFinite(e.orderId)&&typeof e.vendorPatientId=="number"&&Number.isFinite(e.vendorPatientId)&&typeof e.launchUrl=="string"&&e.launchUrl.length>0}function Is(r){if(typeof r!="object"||r===null)return!1;let e=r;return typeof e.launchUrl=="string"&&e.launchUrl.length>0}function Od(r){return Array.isArray(r)?r.every(e=>I(e,"Medication")):!1}function Id(r,e){return Er(r,e.pendingOrderIdSystem)}function kd(r,e){let t=Rr(r,e.pendingOrderStatusUrl);return typeof t=="string"?t:void 0}function Vd(r,e){let t=Rr(r,e.iframeUrlExtension);return typeof t=="string"?t:void 0}function x(r,e,t){return{name:r,[e]:t}}function ks(r){if(r.resource!==void 0)return r.resource;if(r.part?.length)return r.part;for(let e of Object.keys(r))if(e.startsWith("value"))return r[e]}function Dd(r){let e=[];return r.term!==void 0&&e.push(x("term","valueString",r.term)),r.ndc!==void 0&&e.push(x("ndc","valueString",r.ndc)),r.rxNorm!==void 0&&e.push(x("rxNorm","valueString",r.rxNorm)),r.routedMedId!==void 0&&e.push(x("routedMedId","valueInteger",r.routedMedId)),r.searchOtc!==void 0&&e.push(x("searchOtc","valueBoolean",r.searchOtc)),r.searchSupply!==void 0&&e.push(x("searchSupply","valueBoolean",r.searchSupply)),r.searchBrand!==void 0&&e.push(x("searchBrand","valueBoolean",r.searchBrand)),r.searchGeneric!==void 0&&e.push(x("searchGeneric","valueBoolean",r.searchGeneric)),r.includeCode!==void 0&&e.push(x("includeCode","valueBoolean",r.includeCode)),r.quantityQualifiers!==void 0&&e.push(x("quantityQualifiers","valueBoolean",r.quantityQualifiers)),{resourceType:"Parameters",parameter:e}}function Md(r,e){let t=[];return e.ndc!==void 0&&t.push(x("ndc","valueString",e.ndc)),e.rxNorm!==void 0&&t.push(x("rxNorm","valueString",e.rxNorm)),e.routedMedId!==void 0&&t.push(x("routedMedId","valueInteger",e.routedMedId)),t.push(x("quantity","valueDecimal",e.quantity)),e.quantityQualifier!==void 0&&t.push(x("quantityQualifier","valueString",e.quantityQualifier)),e.refill!==void 0&&t.push(x("refill","valueInteger",e.refill)),e.drugOrder!==void 0&&t.push(x("drugOrder","valueInteger",e.drugOrder)),e.sigLine3!==void 0&&t.push(x("sigLine3","valueString",e.sigLine3)),e.useSubstitution!==void 0&&t.push(x("useSubstitution","valueBoolean",e.useSubstitution)),{name:r,part:t}}function _d(r){let e=[];if(e.push(x("patientId","valueId",r.patientId)),r.medicationRequestId!==void 0&&e.push(x("medicationRequestId","valueId",r.medicationRequestId)),r.combinationMed!==void 0&&e.push(x("combinationMed","valueBoolean",r.combinationMed)),r.drugs)for(let t of r.drugs)e.push(Md("drugs",t));if(r.compoundTitle!==void 0&&e.push(x("compoundTitle","valueString",r.compoundTitle)),r.compoundQuantity!==void 0&&e.push(x("compoundQuantity","valueDecimal",r.compoundQuantity)),r.compoundQuantityQualifier!==void 0&&e.push(x("compoundQuantityQualifier","valueString",r.compoundQuantityQualifier)),r.compoundSigs)for(let t of r.compoundSigs){let n=[x("sigOrder","valueInteger",t.sigOrder),x("line3","valueString",t.line3)];t.drugId!==void 0&&n.push(x("drugId","valueInteger",t.drugId)),e.push({name:"compoundSigs",part:n})}if(r.conditionIds)for(let t of r.conditionIds)e.push(x("conditionIds","valueId",t));if(r.coverageId!==void 0&&e.push(x("coverageId","valueId",r.coverageId)),r.payerOrganizationId!==void 0&&e.push(x("payerOrganizationId","valueId",r.payerOrganizationId)),r.pharmacyOrganizationId!==void 0&&e.push(x("pharmacyOrganizationId","valueId",r.pharmacyOrganizationId)),r.diagnoses)for(let t of r.diagnoses)e.push({name:"diagnoses",part:[x("icdId","valueString",t.icdId),x("name","valueString",t.name)]});return r.pharmacyNcpdpId!==void 0&&e.push(x("pharmacyNcpdpId","valueString",r.pharmacyNcpdpId)),r.pharmacyName!==void 0&&e.push(x("pharmacyName","valueString",r.pharmacyName)),r.writtenDate!==void 0&&e.push(x("writtenDate","valueDate",r.writtenDate)),r.fillDate!==void 0&&e.push(x("fillDate","valueDate",r.fillDate)),r.durationDays!==void 0&&e.push(x("durationDays","valueInteger",r.durationDays)),r.pharmacyNote!==void 0&&e.push(x("pharmacyNote","valueString",r.pharmacyNote)),r.patientInstruction!==void 0&&e.push(x("patientInstruction","valueString",r.patientInstruction)),r.appId!==void 0&&e.push(x("appId","valueString",r.appId)),{resourceType:"Parameters",parameter:e}}function Ld(r){let e={};for(let n of r.parameter??[])n.name&&(e[n.name]=ks(n));let t={orderId:typeof e.orderId=="number"?e.orderId:Number.NaN,vendorPatientId:typeof e.vendorPatientId=="number"?e.vendorPatientId:Number.NaN,launchUrl:typeof e.launchUrl=="string"?e.launchUrl:"",medicationRequestId:typeof e.medicationRequestId=="string"?e.medicationRequestId:void 0,pendingOrderStatus:e.pendingOrderStatus==="queued"||e.pendingOrderStatus==="reused"?e.pendingOrderStatus:void 0};if(!Os(t))throw new Error(Cs);return t}function Nd(r){let e=[];return e.push(x("patientId","valueId",r.patientId)),r.planDefinitionId!==void 0&&e.push(x("planDefinitionId","valueId",r.planDefinitionId)),r.vendorOrderSetId!==void 0&&(typeof r.vendorOrderSetId=="number"?e.push(x("vendorOrderSetId","valueInteger",r.vendorOrderSetId)):e.push(x("vendorOrderSetId","valueString",r.vendorOrderSetId))),r.appId!==void 0&&e.push(x("appId","valueString",r.appId)),{resourceType:"Parameters",parameter:e}}function Fd(r){let e={};for(let n of r.parameter??[])n.name&&(e[n.name]=ks(n));let t={launchUrl:typeof e.launchUrl=="string"?e.launchUrl:"",vendorPatientId:typeof e.vendorPatientId=="number"||typeof e.vendorPatientId=="string"?e.vendorPatientId:void 0,vendorOrderSetId:typeof e.vendorOrderSetId=="number"||typeof e.vendorOrderSetId=="string"?e.vendorOrderSetId:void 0,planDefinitionId:typeof e.planDefinitionId=="string"?e.planDefinitionId:void 0};if(!Is(t))throw new Error(Ps);return t}var Kr=`${ct}/fhir/StructureDefinition/patient-preferredPharmacy`,Ci="https://medplum.com/fhir/CodeSystem/pharmacy-preference-type",Jr="primary",Pi="preferred";function Ei(r){let e=r.extension?.find(t=>t.url==="pharmacy");return e?.valueReference?O(e.valueReference):void 0}function Ri(r){return r.url===Kr&&!!r.extension}function Ud(r,e){let t=r.extension?.find(n=>n.url==="type");t&&(t.valueCodeableConcept={coding:[{system:e,code:Pi,display:"Preferred Pharmacy"}]})}function Bd(r,e){if(!r.extension)return[];let t=[];for(let n of r.extension){if(n.url!==Kr||!n.extension)continue;let i=n.extension.find(s=>s.url==="pharmacy"),o=n.extension.find(s=>s.url==="type");if(i?.valueReference){let s=e?o?.valueCodeableConcept?.coding?.some(a=>a.system===e&&a.code===Jr)??!1:o?.valueCodeableConcept?.coding?.some(a=>a.code===Jr)??!1;t.push({organizationRef:i.valueReference,isPrimary:s})}}return t}function Vs(r,e,t=Ci){return{url:Kr,extension:[{url:"pharmacy",valueReference:r},{url:"type",valueCodeableConcept:{coding:[{system:t,code:e?Jr:Pi,display:e?"Primary Pharmacy":"Preferred Pharmacy"}]}}]}}function Wd(r,e,t,n=Ci){r.extension??=[];let i=O(e);if(t)for(let a of r.extension)Ri(a)&&Ei(a)!==i&&Ud(a,n);let o=r.extension.findIndex(a=>Ri(a)&&Ei(a)===i),s=Vs(e,t,n);return o>=0?r.extension[o]=s:r.extension.push(s),r}function qd(r,e){if(!r.extension)return r;let t=O(e);return r.extension=r.extension.filter(n=>Ri(n)?Ei(n)!==t:!0),r}function jd(r){if(!Array.isArray(r))return!1;if(r.length>0){let e=r[0];return typeof e=="object"&&e!==null&&e.resourceType==="Organization"}return!0}function $d(r){if(typeof r!="object"||r===null)return!1;let e=r;return typeof e.success=="boolean"&&typeof e.message=="string"}function Hd(r){if(!r)throw new f(T("Resource type is null"));if(!lt(r))throw new f(T("Unknown resource type"))}function Ai(r,e,t){r===null?t.push(E(e,"Invalid null value")):Array.isArray(r)?Gd(r,e,t):typeof r=="object"&&Qd(r,e,t)}function Gd(r,e,t){for(let n=0;n<r.length;n++)r[n]===void 0?t.push(E(`${e}[${n}]`,"Invalid undefined value")):Ai(r[n],`${e}[${n}]`,t)}function Qd(r,e,t){for(let[n,i]of Object.entries(r))Ai(i,`${e}${e?".":""}${n}`,t)}function zd(r){return{resourceType:"SearchParameter",code:r.code+":identifier",base:r.base,type:"token",expression:`(${r.expression}).identifier`}}function wi(r){return r.match(/^\((.+)\)\.identifier$/)?.[1]}function Oi(r,e){return new ge(r,new Y(e,new B("identifier")))}var ue={BOOLEAN:"BOOLEAN",NUMBER:"NUMBER",QUANTITY:"QUANTITY",TEXT:"TEXT",REFERENCE:"REFERENCE",CANONICAL:"CANONICAL",DATE:"DATE",DATETIME:"DATETIME",PERIOD:"PERIOD",UUID:"UUID"};function Jd(r,e){return j.types[r]?.searchParamsDetails?.[e.code]??Yd(r,e)}function Kd(r,e,t){let n=j.types[r];n||(n={},j.types[r]=n),n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=t}function Yd(r,e){let t=e.code,n=e.expression,i=ki(r,n),o={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let l of i){let p=Yr(l),g=Un(()=>p.join("."));p.length===1&&p[0]instanceof R&&p[0].operator!=="."?o.propertyTypes.add("boolean"):e.code.endsWith(":identifier")?o.propertyTypes.add("Identifier"):g().endsWith("extension.value.code")||g().endsWith("extension.value.coding.code")?(o.array=!0,o.propertyTypes.clear(),o.propertyTypes.add("code")):Ds(o,p,r,1),g().endsWith("extension.valueDateTime")&&(o.array=!1,o.propertyTypes.clear(),o.propertyTypes.add("dateTime"))}let s;if(e.code.endsWith(":identifier")){let l=wi(n);if(l===void 0)throw new Error(`Unexpected expression for derived identifier search parameter: ${n}`);let p=Ii(r,l);s=Oi(n,p)}else s=Ii(r,n);let a=o.elementDefinitions.map(l=>({...l,type:l.type?.filter(p=>o.propertyTypes.has(p.code))})).filter(l=>l.type&&l.type.length>0),u={type:ep(e,o.propertyTypes),elementDefinitions:a,parsedExpression:s,array:o.array,referenceTargetTypes:rp(e,a)};return Kd(r,t,u),u}function Ds(r,e,t,n){let i=e[n];if(i instanceof ye){r.propertyTypes.add(i.right.toString());return}if(i instanceof X){Xd(r,i);return}let o=i.toString(),s=gt(t,o);if(!s)throw new Error(`Element definition not found for ${t} ${o}`);let a=!1,u=n+1;u<e.length&&e[u]instanceof we&&(a=!0,u++);let l=e[u];if(s.isArray&&!a&&(r.array=!0),u===e.length-1){if(l instanceof ye){r.elementDefinitions.push(s),r.propertyTypes.add(l.right.toString());return}if(l instanceof X&&l.name==="ofType"){r.elementDefinitions.push(s),r.propertyTypes.add(l.args[0].toString());return}}if(u>=e.length){r.elementDefinitions.push(s);for(let p of s.type??y)r.propertyTypes.add(p.code);return}for(let p of s.type??y){let g=p.code;Zd(g)&&(g=s.type[0].code),Ds(r,e,g,u)}}function Xd(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 Ae){r.propertyTypes.add(e.args[0].right.toString());return}throw new Error(`Unhandled FHIRPath function: ${e.name}`)}function Zd(r){return r==="Element"||r==="BackboneElement"}function ep(r,e){switch(r.type){case"date":return e.size===1&&e.has(d.date)?ue.DATE:ue.DATETIME;case"number":return ue.NUMBER;case"quantity":return ue.QUANTITY;case"reference":return e.has(d.canonical)?ue.CANONICAL:ue.REFERENCE;case"token":return e.size===1&&e.has(d.boolean)?ue.BOOLEAN:ue.TEXT;default:return ue.TEXT}}function ki(r,e){let t=[],n=Lt(e);return Xr(r,n.child,t),t}function tp(r,e){let t=ki(r,e);if(t.length!==0)return t.map(n=>n.toString()).join(" | ")}function Ii(r,e){let t=[],n=Lt(e);if(Xr(r,n.child,t),t.length===0)return n;let i=t[0];for(let o=1;o<t.length;o++)i=new Pe(i,t[o]);return new ge("<original-not-available>",i)}function Xr(r,e,t){e instanceof Pe?(Xr(r,e.left,t),Xr(r,e.right,t)):e.toString().includes(r+".")&&t.push(e)}function Yr(r){if(r instanceof ye||r instanceof we)return[Yr(r.left),r].flat();if(r instanceof R&&r.operator!==".")return[r];if(r instanceof Y)return[Yr(r.left),Yr(r.right)].flat();if(r instanceof X){if(r.name==="where"&&!(r.args[0]instanceof Ae))return[];if(r.name==="last")return[]}return[r]}function rp(r,e){if(r.target?.length===1)return r.target;if(e){let t=new Set;for(let n of e)for(let i of n.type)if(!(i.code!=="Reference"||!i.targetProfile))for(let o of i.targetProfile){let s=o.split("/").at(-1);s&&s!=="Resource"&&t.add(s)}if(t.size>0)return Array.from(t)}}function 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={};for(let i of r.constant??y){let o={type:"ViewDefinitionConstant",value:i};t["%"+i.name]=_(o,"value")}let n=b(e);for(let i of r.where??y){let o=w(i.path,[n],t);if(o.length!==1)return[];if(o[0].type!=="boolean")throw new Error("WHERE clause must evaluate to a boolean");if(!o[0].value)return[]}return Vi(r,n,t)}function Vi(r,e,t){let n=[],i;r.forEach?i=w(r.forEach,[e],t):r.forEachOrNull?i=w(r.forEachOrNull,[e],t):i=[e];for(let o of i){let s=[];for(let a of r.column??y){let u=w(a.path,[o],t),l;if(u.length===0)l={[a.name]:null};else if(a.collection)l={[a.name]:u.map(p=>p.value)};else if(u.length===1)l={[a.name]:u[0].value};else throw new Error("Multiple values found but not expected for column");s.push([l])}for(let a of r.select??y){let u=Vi(a,o,t);s.push(u)}if(r.unionAll){let a=[];for(let u of r.unionAll)for(let l of Vi(u,o,t))a.push(l);s.push(a)}n.push(...sp(s))}if(i.length===0&&r.forEachOrNull){let o={};for(let s of r.column??y)o[s.name]=null;n.push(o)}return n}function 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 Ms="https://meta.medplum.com/releases",Di=new Map;function up(){Di.clear()}function _s(r){let e=r;if(!e.tag_name?.startsWith("v"))throw new Error("Manifest missing valid tag_name starting with a 'v' (eg. v5.1.15)");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 Zr(r,e,t){let n=e?Di.get(e):void 0;if(!n){let i=e?`v${e}`:"latest",o=new URL(`${Ms}/${i}.json`);if(o.searchParams.set("a",r),o.searchParams.set("c",Br),t)for(let[u,l]of Object.entries(t))o.searchParams.set(u,l);let s=await fetch(o.toString());if(s.status!==200){let u;try{u=(await s.json()).message}catch(l){console.error(`Failed to parse message from body: ${Te(l)}`)}throw new Error(`Received status code ${s.status} while fetching manifest for version '${e??"latest"}'. Message: ${u}`)}let a=await s.json();_s(a),n=a,Di.set(n.tag_name.slice(1),n)}return n}function Ls(r){return/^\d+\.\d+\.\d+(-[0-9a-z]{7})?$/.test(r)}async function lp(r,e){if(!Ls(e))return!1;try{await Zr(r,e)}catch{return!1}return!0}async function dp(r){let e=await Zr(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 pp(r,e){try{let t=Br.split("-")[0],i=(await Zr(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: ${Te(t)}`)}}0&&(module.exports={AccessPolicyInteraction,AckCode,AndAtom,ArithmeticOperatorAtom,AsAtom,CPT,ClientStorage,ConcatAtom,ContainsAtom,ContentType,DEFAULT_ACCEPT,DEFAULT_MAX_SEARCH_COUNT,DEFAULT_SEARCH_COUNT,DataSampler,DotAtom,EMPTY,EmptySetAtom,EqualsAtom,EquivalentAtom,EventTarget,ExternalSecretSystems,FHIRCAST_EVENT_NAMES,FHIRCAST_EVENT_RESOURCES,FHIRCAST_EVENT_VERSION_REQUIRED,FHIRCAST_RESOURCE_TYPES,FhirFilterComparison,FhirFilterConnective,FhirFilterNegation,FhirPathAtom,FhircastConnection,FileBuilder,FunctionAtom,HTTP_HL7_ORG,HTTP_TERMINOLOGY_HL7_ORG,Hl7Context,Hl7Field,Hl7Message,Hl7Segment,ICD10,INVALID_MEDICATION_ORDER_RESPONSE,INVALID_MEDICATION_ORDER_SET_RESPONSE,INVALID_MEDICATION_SEARCH_RESPONSE,ImpliesAtom,InAtom,IndexerAtom,InfixOperatorAtom,IsAtom,LOINC,LRUCache,LiteralAtom,LogLevel,LogLevelNames,Logger,MEDICATION_REQUEST_STATUS_REASON_RESPONSE_NOT_RECEIVED,MEDICATION_REQUEST_STATUS_REASON_SYSTEM,MEDPLUM_CLI_CLIENT_ID,MEDPLUM_RELEASES_URL,MEDPLUM_VERSION,MedplumClient,MedplumKeyValueClient,MemoryStorage,MockAsyncClientStorage,NDC,NOOP,NotEqualsAtom,NotEquivalentAtom,OAuthClientAssertionType,OAuthGrantType,OAuthSigningAlgorithm,OAuthTokenAuthMethod,OAuthTokenType,OperationOutcomeError,Operator,OperatorPrecedence,OrAtom,PATIENT_PREFERRED_PHARMACY_URL,PHARMACY_PREFERENCE_TYPE_SYSTEM,PHARMACY_TYPE_PREFERRED,PHARMACY_TYPE_PRIMARY,Parser,ParserBuilder,PrefixOperatorAtom,PropertyType,RXNORM,ReadablePromise,ReconnectingWebSocket,ReturnAckCategory,SNOMED,SearchParameterType,SubscriptionEmitter,SubscriptionManager,SymbolAtom,Tokenizer,TransformMapCollection,TypedEventTarget,UCUM,UnaryOperatorAtom,UnionAtom,VALID_HOSTNAME_REGEX,XorAtom,accepted,accessPolicySupportsInteraction,addPreferredPharmacyToPatient,addProfileToResource,allOk,append,applyDefaultValuesToElement,applyDefaultValuesToResource,applyFixedOrPatternValue,arrayBufferToBase64,arrayBufferToHex,arrayify,assert,assertContextVersionOptional,assertOk,assertReleaseManifest,badRequest,booleanToTypedValue,buildCdsRequest,buildElementsContext,buildMedicationRequestResponseLostStatusReason,buildTypeName,businessRule,calculateAge,calculateAgeString,canReadResourceType,canWriteResource,canWriteResourceType,capitalize,checkForNull,checkIfValidMedplumVersion,clearReleaseCache,codeableConceptMatchesToken,codingMatchesToken,compressElement,concatUrls,conceptMapTranslate,conflict,contentTooLarge,convertContainedResourcesToBundle,convertToSearchableDates,convertToSearchableNumbers,convertToSearchableQuantities,convertToSearchableReferences,convertToSearchableStrings,convertToSearchableTokens,convertToSearchableUris,convertToTransactionBundle,crawlTypedValue,crawlTypedValueAsync,createConstraintIssue,createFhircastMessagePayload,createOperationOutcomeIssue,createPreferredPharmacyExtension,createProcessingIssue,createReference,createStructureIssue,created,decodeBase64,decodeBase64Url,deepClone,deepEquals,deepIncludes,deriveIdentifierSearchParameter,encodeBase64,encodeBase64Url,encryptSHA256,ensureNoLeadingSlash,ensureTrailingSlash,escapeHtml,evalFhirPath,evalFhirPathTyped,evalSqlOnFhir,expandSampledData,expandSampledObservation,extractAccountReferences,fetchLatestVersionString,fetchVersionManifest,fhirPathArrayEquals,fhirPathArrayEquivalent,fhirPathArrayNotEquals,fhirPathEquals,fhirPathEquivalent,fhirPathIs,fhirPathNot,fhirTypeToJsType,findCodeBySystem,findObservationInterval,findObservationReferenceRange,findObservationReferenceRanges,findResourceByCode,findResourceInBundle,flatMapFilter,forbidden,formatAddress,formatCodeableConcept,formatCoding,formatDate,formatDateTime,formatFamilyName,formatGivenName,formatHl7DateTime,formatHumanName,formatMoney,formatObservationValue,formatPeriod,formatQuantity,formatRange,formatReferenceString,formatSearchQuery,formatTime,formatTiming,formatWallTime,generateId,getAllDataTypes,getAllQuestionnaireAnswers,getBuffer,getCodeBySystem,getDataType,getDateProperty,getDefaultValuesForNewSliceEntry,getDisplayString,getElementDefinition,getElementDefinitionForPath,getElementDefinitionFromElements,getElementDefinitionTypeName,getExpressionForResourceType,getExpressionsForResourceType,getExtension,getExtensionValue,getIdentifier,getImageSrc,getInnerDerivedIdentifierExpression,getMedicationOrderIframeUrl,getNestedProperty,getOutcomeRedirectUrl,getParsedDerivedIdentifierExpression,getParsedExpressionForResourceType,getPathDifference,getPathDisplayName,getPendingMedicationOrderId,getPendingMedicationOrderStatus,getPreferredPharmaciesFromPatient,getPropertyDisplayName,getQueryString,getQuestionnaireAnswers,getRandomString,getReferenceString,getResourceTypes,getSearchParameter,getSearchParameterDetails,getSearchParameters,getStatus,getTypedPropertyValue,getTypedPropertyValueWithPath,getTypedPropertyValueWithSchema,getTypedPropertyValueWithoutSchema,getValueSliceName,getWebSocketUrl,getWindow,globalSchema,gone,indexConceptMapCodings,indexDefaultSearchParameters,indexSearchParameter,indexSearchParameterBundle,indexStructureDefinitionBundle,inflateBaseSchema,inflateElement,initFhirPathParserBuilder,invalidSearchOperator,isAccepted,isAddPharmacyResponse,isBrowserEnvironment,isCodeableConcept,isCoding,isCompletedSubscriptionRequest,isComplexTypeCode,isConflict,isContextVersionRequired,isCreated,isDataTypeLoaded,isDateString,isDateTimeString,isDefined,isEmpty,isError,isFhirCriteriaMet,isFhircastResourceType,isGone,isJwt,isLowerCase,isMedicationArray,isMedicationOrderResponse,isMedicationOrderSetResponse,isMedplumAccessToken,isNodeEnvironment,isNotFound,isObject,isOk,isOperationOutcome,isOrganizationArray,isPeriod,isPopulated,isPrimitiveType,isProfileLoaded,isProfileResource,isQuantity,isQuantityEquivalent,isRedirect,isReference,isResource,isResourceType,isResourceTypeSchema,isResourceWithId,isSliceDefinitionWithTypes,isString,isStringArray,isTextObject,isTypedValue,isUUID,isUnauthenticated,isValidDate,isValidHostname,isValidMedplumSemver,lazy,loadDataType,locationUtils,mapByIdentifier,matchDiscriminant,matchesRange,matchesSearchRequest,medicationOrderRequestToParameters,medicationOrderSetRequestToParameters,medicationSearchParamsToParameters,multipleMatches,normalizeArrayBufferView,normalizeCreateBinaryOptions,normalizeCreatePdfOptions,normalizeErrorString,normalizeOperationOutcome,notFound,notModified,operationOutcomeIssueToString,operationOutcomeToString,parametersToMedicationOrderResponse,parametersToMedicationOrderSetResponse,parseFhirPath,parseFilterParameter,parseHl7DateTime,parseJWTPayload,parseLogLevel,parseMappingLanguage,parseParameter,parseReference,parseSearchRequest,parseStructureDefinition,parseXFhirQuery,pathToJSONPointer,preciseEquals,preciseGreaterThan,preciseGreaterThanOrEquals,preciseLessThan,preciseLessThanOrEquals,preciseRound,preconditionFailed,projectAdminResourceTypes,protectedResourceTypes,readInteractions,redirect,redirectOk,removeDuplicates,removePreferredPharmacyFromPatient,removeProfileFromResource,reorderBundle,replaceQueryVariables,resolveId,resourceMatchesSubscriptionCriteria,satisfiedAccessPolicy,serializeError,serializeFhircastSubscriptionRequest,serverError,serverTimeout,setCodeBySystem,setIdentifier,singleton,singularize,sleep,sortStringArray,splitN,splitSearchOnComma,streamToBuffer,stringify,stringifyTypedValue,structureMapTransform,subsetResource,summarizeObservations,toJsBoolean,toPeriod,toTypedValue,tooManyRequests,trimTrailingEmptyElements,tryGetDataType,tryGetJwtExpiration,tryGetProfile,typedValueToString,unauthorized,unauthorizedTokenAudience,unauthorizedTokenExpired,unsupportedMediaType,validateFhircastSubscriptionRequest,validateResource,validateResourceType,validateTypedValue,validationError,validationRegexes,warnIfNewerVersionAvailable,wordWrap});
53
+ `)}};function Ss(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 vd=[..._t,"eq","ne","co"];function bs(r){return new ve(r,Mt,vd,{dateTimeLiterals:!0,symbolRegex:/[^\s\])]/}).tokenize()}var Kt=class{constructor(e,t,n){c(this,"path");c(this,"operator");c(this,"value");this.path=e,this.operator=t,this.value=n}},Yt=class{constructor(e){c(this,"child");this.child=e}},Xt=class{constructor(e,t,n){c(this,"keyword");c(this,"left");c(this,"right");this.keyword=e,this.left=t,this.right=n}};var Td={eq:m.EXACT,ne:m.NOT_EQUALS,co:m.CONTAINS,sw:m.STARTS_WITH,ew:void 0,gt:m.GREATER_THAN,lt:m.LESS_THAN,ge:m.GREATER_THAN_OR_EQUALS,le:m.LESS_THAN_OR_EQUALS,ap:m.APPROXIMATELY,sa:m.STARTS_AFTER,eb:m.ENDS_BEFORE,pr:m.PRESENT,po:void 0,ss:void 0,sb:void 0,in:m.IN,ni:m.NOT_IN,re:m.EQUALS,identifier:m.IDENTIFIER};function Sd(r){let e=Td[r];if(!e)throw new f(P("Invalid operator: "+r));return e}var Ti=class{constructor(e){c(this,"parser");this.parser=e}parse(){let e;this.parser.peek()?.value==="("?(this.parser.consume("("),e=this.parse(),this.parser.consume(")")):this.parser.peek()?.value==="not"?(this.parser.consume("Symbol","not"),this.parser.consume("("),e=new Yt(this.parse()),this.parser.consume(")")):e=new Kt(this.parser.consume("Symbol").value,Sd(this.parser.consume("Symbol").value),this.parser.consume().value);let t=this.parser.peek()?.value;return t==="and"||t==="or"?(this.parser.consume("Symbol",t),new Xt(t,e,this.parse())):e}},bd=Ze();function Ed(r){let e=bd.construct(bs(r));return e.removeComments(),new Ti(e).parse()}var Rd={AA:"AA",AE:"AE",AR:"AR",CA:"CA",CE:"CE",CR:"CR"},Cd={AA:"OK",AE:"Application Error",AR:"Application Reject",CA:"Commit Accept",CE:"Commit Error",CR:"Commit Reject"},Te=class{constructor(e="\r",t="|",n="^",i="~",o="\\",s="&"){c(this,"segmentSeparator");c(this,"fieldSeparator");c(this,"componentSeparator");c(this,"repetitionSeparator");c(this,"escapeCharacter");c(this,"subcomponentSeparator");this.segmentSeparator=e,this.fieldSeparator=t,this.componentSeparator=n,this.repetitionSeparator=i,this.escapeCharacter=o,this.subcomponentSeparator=s}getMsh1(){return this.fieldSeparator}getMsh2(){return this.componentSeparator+this.repetitionSeparator+this.escapeCharacter+this.subcomponentSeparator}},Si=class r{constructor(e,t=new Te){c(this,"context");c(this,"_segments");c(this,"segmentsByName");c(this,"cachedString");c(this,"allSegmentsParsed");this.context=t,this._segments=e,this.segmentsByName=Es(e),this.allSegmentsParsed=e.every(n=>typeof n!="string"),this.bindSegments()}get segments(){if(!this.allSegmentsParsed){for(let e=0;e<this._segments.length;e++)typeof this._segments[e]=="string"&&this.parseSegment(e);this.allSegmentsParsed=!0}return this._segments}get header(){let e=this.parseSegment(0);if(!e)throw new Error("Can't get header before first segment added");return e}get(e){return this.getSegment(e)}getAll(e){return this.getAllSegments(e)}getSegment(e){if(typeof e=="number")return this.parseSegment(e);let t=this.segmentsByName.get(e);if(t?.length)return this.parseSegment(t[0])}getAllSegments(e){let t=this.segmentsByName.get(e);return t?t.map(n=>this.parseSegment(n)):[]}parseSegment(e){let t=this._segments[e];if(t===void 0)return;if(typeof t!="string")return t;let n=ot.parse(t,this.context);return n.onModified=()=>{this.cachedString=void 0},this._segments[e]=n,n}toString(){return this.cachedString??=this._segments.map(e=>typeof e=="string"?e:e.toString()).join(this.context.segmentSeparator),this.cachedString}buildAck(e){let t=new Date,n=this.getSegment("MSH"),i=n?.getField(3)?.toString()??"",o=n?.getField(4)?.toString()??"",s=n?.getField(5)?.toString()??"",a=n?.getField(6)?.toString()??"",u=n?.getField(10)?.toString()??"",l=n?.getField(12)?.toString()??"2.5.1",p=e?.ackCode??"AA";return new r([new ot(["MSH",this.context.getMsh2(),s,a,i,o,Rs(t),"",this.buildAckMessageType(n),t.getTime().toString(),"P",l],this.context),new ot(["MSA",p,u,Cd[p]],this.context),...e?.errSegment?[e.errSegment]:[]])}buildAckMessageType(e){let t=e?.getField(9),n=t?.getComponent(2),i=t?.getComponent(3),o="ACK";return n&&i?o=`ACK^${n}^ACK`:n&&(o=`ACK^${n}`),o}static parse(e){if(!e.startsWith("MSH")){let i=new Error("Invalid HL7 message");throw i.type="entity.parse.failed",i}let t=new Te("\r",e.charAt(3),e.charAt(4),e.charAt(5),e.charAt(6),e.charAt(7)),n=new r(e.split(/[\r\n]+/),t);return n.cachedString=e,n}setSegment(e,t){if(t.name==="MSH"){if(typeof e=="number"){if(e!==0)return!1}else if(this.findSegmentIndexByName(e)!==0)return!1}else if(typeof e=="number"&&e===0&&t.name!=="MSH")return!1;if(typeof e=="number")return e>=this._segments.length?(this._segments.push(t),this.invalidateCache(),!0):(this._segments[e]=t,this.invalidateCache(),!0);let n=this.findSegmentIndexByName(e);return n===0&&t.name!=="MSH"?!1:n!==-1?(this._segments[n]=t,this.invalidateCache(),!0):!1}findSegmentIndexByName(e){return this.segmentsByName.get(e)?.[0]??-1}invalidateCache(){this.segmentsByName=Es(this._segments),this.cachedString=void 0,this.bindSegments()}bindSegments(){let e=()=>{this.cachedString=void 0};for(let t of this._segments)typeof t!="string"&&(t.onModified=e)}};function Es(r){let e=new Map;for(let t=0;t<r.length;t++){let n=r[t],i=typeof n=="string"?n.slice(0,3):n.name,o=e.get(i);o?o.push(t):e.set(i,[t])}return e}var ot=class r{constructor(e,t=new Te){c(this,"context");c(this,"name");c(this,"_fields");c(this,"allFieldsParsed");c(this,"cachedString");c(this,"onModified");this.context=t,this._fields=e,this.allFieldsParsed=e.every(i=>typeof i!="string");let n=e[0];this.name=typeof n=="string"?n:n.components[0][0],this.bindFields()}get fields(){if(!this.allFieldsParsed){for(let e=0;e<this._fields.length;e++)typeof this._fields[e]=="string"&&this.parseField(e);this.allFieldsParsed=!0}return this._fields}get(e){return this.parseField(e)}getField(e){if(this.name==="MSH"){if(e===1)return new ue([[this.context.getMsh1()]],this.context);if(e===2)return new ue([[this.context.getMsh2()]],this.context);if(e>2)return this.parseField(e-1)}return this.parseField(e)}parseField(e){let t=this._fields[e];if(t===void 0)return;if(typeof t!="string")return t;let n=ue.parse(t,this.context);return n.onModified=()=>{this.cachedString=void 0,this.onModified?.()},this._fields[e]=n,n}getComponent(e,t,n,i=0){return this.getField(e)?.getComponent(t,n,i)??""}toString(){return this.cachedString??=this._fields.map(e=>typeof e=="string"?e:e.toString()).join(this.context.fieldSeparator),this.cachedString}static parse(e,t=new Te){let n=new r(e.split(t.fieldSeparator),t);return n.cachedString=e,n}setField(e,t){if(this.name==="MSH"){if(e===1||e===2)return!1;if(e>2){let n=e-1;for(;this._fields.length<=n;)this._fields.push(new ue([[""]],this.context));return this._fields[n]=typeof t=="string"?ue.parse(t,this.context):t,this.invalidateCache(),!0}}for(;this._fields.length<=e;)this._fields.push(new ue([[""]],this.context));return this._fields[e]=typeof t=="string"?ue.parse(t,this.context):t,this.invalidateCache(),!0}setComponent(e,t,n,i,o=0){let s=this.getField(e);return s?s.setComponent(t,n,i,o):!1}invalidateCache(){this.cachedString=void 0,this.bindFields(),this.onModified?.()}bindFields(){let e=()=>{this.cachedString=void 0,this.onModified?.()};for(let t of this._fields)typeof t!="string"&&(t.onModified=e)}},ue=class r{constructor(e,t=new Te){c(this,"context");c(this,"components");c(this,"onModified");c(this,"cachedString");this.context=t,this.components=e}get(e,t,n=0){return this.getComponent(e+1,t,n)}getComponent(e,t,n=0){let i=this.components[n][e-1]??"";return t!==void 0&&(i=i.split(this.context.subcomponentSeparator)[t]??""),i}toString(){return this.cachedString??=this.components.map(e=>e.join(this.context.componentSeparator)).join(this.context.repetitionSeparator),this.cachedString}static parse(e,t=new Te){let n=new r(e.split(t.repetitionSeparator).map(i=>i.split(t.componentSeparator)),t);return n.cachedString=e,n}setComponent(e,t,n,i=0){if(e<1)return!1;if(i>=this.components.length)for(;this.components.length<=i;)this.components.push([""]);if(n===void 0)this.components[i][e-1]=t;else{if(n<0)return!1;{let s=(this.components[i][e-1]||"").split(this.context.subcomponentSeparator);for(;s.length<=n;)s.push("");s[n]=t,this.components[i][e-1]=s.join(this.context.subcomponentSeparator)}}return this.invalidateCache(),!0}invalidateCache(){this.cachedString=void 0,this.onModified?.()}};function Pd(r,e){if(!r)return;let t=je(r.slice(0,4),0),n=je(r.slice(4,6),1)-1,i=je(r.slice(6,8),1),o=je(r.slice(8,10),0),s=je(r.slice(10,12),0),a=je(r.slice(12,14),0),u=0;r.includes(".")&&(u=je(r.slice(15,19),0));let l=new Date(Date.UTC(t,n,i,o,s,a,u)),p=Ad(r,e?.tzOffset);return p!==0&&(l=new Date(l.getTime()-p)),l.toISOString()}function je(r,e){let t=Number.parseInt(r,10);return Number.isNaN(t)?e:t}function Ad(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 Rs(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 $e={NONE:0,ERROR:1,WARN:2,INFO:3,DEBUG:4},Cs=["NONE","ERROR","WARN","INFO","DEBUG"],bi=class r{constructor(e,t={},n=$e.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($e.ERROR,e,t)}warn(e,t){this.log($e.WARN,e,t)}info(e,t){this.log($e.INFO,e,t)}debug(e,t){this.log($e.DEBUG,e,t)}log(e,t,n){if(e>this.level)return;let i;if(sr(n))i=Zt(n);else if(n){i={...n};for(let[o,s]of Object.entries(i))s instanceof Error&&(i[o]=Zt(s))}this.write(JSON.stringify({level:Cs[e],timestamp:new Date().toISOString(),msg:this.prefix?`${this.prefix}${t}`:t,...i,...this.metadata}))}};function wd(r){let e=$e[r.toUpperCase()];if(e===void 0)throw new Error(`Invalid log level: ${r}`);return e}function Zt(r,e=0,t=10){if(e>=t)return{error:"Max error depth reached"};let n={error:r.toString(),stack:r.stack?.split(`
54
+ `)};r.name&&r.name!=="Error"&&(n.name=r.name),r.message&&(n.message=r.message),"cause"in r&&r.cause!==void 0&&(r.cause instanceof Error?n.cause=Zt(r.cause,e+1,t):n.cause=r.cause);let i=Object.getOwnPropertyNames(r).filter(o=>!["name","message","stack","cause"].includes(o));for(let o of i)try{let s=r[o];s instanceof Error?n[o]=Zt(s,e+1,t):n[o]=s}catch{}return n}var Ps="Invalid response from order medication bot",Od="Invalid response from medication search bot",As="Invalid response from order-set bot",ws="https://medplum.com/fhir/CodeSystem/medication-request-status-reason",Os="response-not-received";function Id(){return{coding:[{system:ws,code:Os,display:"Order-medication response not received"}],text:"The order-medication operation did not return a verifiable response; vendor-side state is unknown."}}function Is(r){if(typeof r!="object"||r===null)return!1;let e=r;return typeof e.orderId=="number"&&Number.isFinite(e.orderId)&&typeof e.vendorPatientId=="number"&&Number.isFinite(e.vendorPatientId)&&typeof e.launchUrl=="string"&&e.launchUrl.length>0}function ks(r){if(typeof r!="object"||r===null)return!1;let e=r;return typeof e.launchUrl=="string"&&e.launchUrl.length>0}function kd(r){return Array.isArray(r)?r.every(e=>I(e,"Medication")):!1}function Vd(r,e){return Er(r,e.pendingOrderIdSystem)}function Dd(r,e){let t=Rr(r,e.pendingOrderStatusUrl);return typeof t=="string"?t:void 0}function Md(r,e){let t=Rr(r,e.iframeUrlExtension);return typeof t=="string"?t:void 0}function x(r,e,t){return{name:r,[e]:t}}function Vs(r){if(r.resource!==void 0)return r.resource;if(r.part?.length)return r.part;for(let e of Object.keys(r))if(e.startsWith("value"))return r[e]}function _d(r){let e=[];return r.term!==void 0&&e.push(x("term","valueString",r.term)),r.ndc!==void 0&&e.push(x("ndc","valueString",r.ndc)),r.rxNorm!==void 0&&e.push(x("rxNorm","valueString",r.rxNorm)),r.routedMedId!==void 0&&e.push(x("routedMedId","valueInteger",r.routedMedId)),r.searchOtc!==void 0&&e.push(x("searchOtc","valueBoolean",r.searchOtc)),r.searchSupply!==void 0&&e.push(x("searchSupply","valueBoolean",r.searchSupply)),r.searchBrand!==void 0&&e.push(x("searchBrand","valueBoolean",r.searchBrand)),r.searchGeneric!==void 0&&e.push(x("searchGeneric","valueBoolean",r.searchGeneric)),r.includeCode!==void 0&&e.push(x("includeCode","valueBoolean",r.includeCode)),r.quantityQualifiers!==void 0&&e.push(x("quantityQualifiers","valueBoolean",r.quantityQualifiers)),{resourceType:"Parameters",parameter:e}}function Ld(r,e){let t=[];return e.ndc!==void 0&&t.push(x("ndc","valueString",e.ndc)),e.rxNorm!==void 0&&t.push(x("rxNorm","valueString",e.rxNorm)),e.routedMedId!==void 0&&t.push(x("routedMedId","valueInteger",e.routedMedId)),t.push(x("quantity","valueDecimal",e.quantity)),e.quantityQualifier!==void 0&&t.push(x("quantityQualifier","valueString",e.quantityQualifier)),e.refill!==void 0&&t.push(x("refill","valueInteger",e.refill)),e.drugOrder!==void 0&&t.push(x("drugOrder","valueInteger",e.drugOrder)),e.sigLine3!==void 0&&t.push(x("sigLine3","valueString",e.sigLine3)),e.useSubstitution!==void 0&&t.push(x("useSubstitution","valueBoolean",e.useSubstitution)),{name:r,part:t}}function Nd(r){let e=[];if(e.push(x("patientId","valueId",r.patientId)),r.medicationRequestId!==void 0&&e.push(x("medicationRequestId","valueId",r.medicationRequestId)),r.combinationMed!==void 0&&e.push(x("combinationMed","valueBoolean",r.combinationMed)),r.drugs)for(let t of r.drugs)e.push(Ld("drugs",t));if(r.compoundTitle!==void 0&&e.push(x("compoundTitle","valueString",r.compoundTitle)),r.compoundQuantity!==void 0&&e.push(x("compoundQuantity","valueDecimal",r.compoundQuantity)),r.compoundQuantityQualifier!==void 0&&e.push(x("compoundQuantityQualifier","valueString",r.compoundQuantityQualifier)),r.compoundSigs)for(let t of r.compoundSigs){let n=[x("sigOrder","valueInteger",t.sigOrder),x("line3","valueString",t.line3)];t.drugId!==void 0&&n.push(x("drugId","valueInteger",t.drugId)),e.push({name:"compoundSigs",part:n})}if(r.conditionIds)for(let t of r.conditionIds)e.push(x("conditionIds","valueId",t));if(r.coverageId!==void 0&&e.push(x("coverageId","valueId",r.coverageId)),r.payerOrganizationId!==void 0&&e.push(x("payerOrganizationId","valueId",r.payerOrganizationId)),r.pharmacyOrganizationId!==void 0&&e.push(x("pharmacyOrganizationId","valueId",r.pharmacyOrganizationId)),r.diagnoses)for(let t of r.diagnoses)e.push({name:"diagnoses",part:[x("icdId","valueString",t.icdId),x("name","valueString",t.name)]});return r.pharmacyNcpdpId!==void 0&&e.push(x("pharmacyNcpdpId","valueString",r.pharmacyNcpdpId)),r.pharmacyName!==void 0&&e.push(x("pharmacyName","valueString",r.pharmacyName)),r.writtenDate!==void 0&&e.push(x("writtenDate","valueDate",r.writtenDate)),r.fillDate!==void 0&&e.push(x("fillDate","valueDate",r.fillDate)),r.durationDays!==void 0&&e.push(x("durationDays","valueInteger",r.durationDays)),r.pharmacyNote!==void 0&&e.push(x("pharmacyNote","valueString",r.pharmacyNote)),r.patientInstruction!==void 0&&e.push(x("patientInstruction","valueString",r.patientInstruction)),r.appId!==void 0&&e.push(x("appId","valueString",r.appId)),{resourceType:"Parameters",parameter:e}}function Fd(r){let e={};for(let n of r.parameter??[])n.name&&(e[n.name]=Vs(n));let t={orderId:typeof e.orderId=="number"?e.orderId:Number.NaN,vendorPatientId:typeof e.vendorPatientId=="number"?e.vendorPatientId:Number.NaN,launchUrl:typeof e.launchUrl=="string"?e.launchUrl:"",medicationRequestId:typeof e.medicationRequestId=="string"?e.medicationRequestId:void 0,pendingOrderStatus:e.pendingOrderStatus==="queued"||e.pendingOrderStatus==="reused"?e.pendingOrderStatus:void 0};if(!Is(t))throw new Error(Ps);return t}function Ud(r){let e=[];return e.push(x("patientId","valueId",r.patientId)),r.planDefinitionId!==void 0&&e.push(x("planDefinitionId","valueId",r.planDefinitionId)),r.vendorOrderSetId!==void 0&&(typeof r.vendorOrderSetId=="number"?e.push(x("vendorOrderSetId","valueInteger",r.vendorOrderSetId)):e.push(x("vendorOrderSetId","valueString",r.vendorOrderSetId))),r.appId!==void 0&&e.push(x("appId","valueString",r.appId)),{resourceType:"Parameters",parameter:e}}function Bd(r){let e={};for(let n of r.parameter??[])n.name&&(e[n.name]=Vs(n));let t={launchUrl:typeof e.launchUrl=="string"?e.launchUrl:"",vendorPatientId:typeof e.vendorPatientId=="number"||typeof e.vendorPatientId=="string"?e.vendorPatientId:void 0,vendorOrderSetId:typeof e.vendorOrderSetId=="number"||typeof e.vendorOrderSetId=="string"?e.vendorOrderSetId:void 0,planDefinitionId:typeof e.planDefinitionId=="string"?e.planDefinitionId:void 0};if(!ks(t))throw new Error(As);return t}var Kr=`${ct}/fhir/StructureDefinition/patient-preferredPharmacy`,Ci="https://medplum.com/fhir/CodeSystem/pharmacy-preference-type",Jr="primary",Pi="preferred";function Ei(r){let e=r.extension?.find(t=>t.url==="pharmacy");return e?.valueReference?O(e.valueReference):void 0}function Ri(r){return r.url===Kr&&!!r.extension}function Wd(r,e){let t=r.extension?.find(n=>n.url==="type");t&&(t.valueCodeableConcept={coding:[{system:e,code:Pi,display:"Preferred Pharmacy"}]})}function qd(r,e){if(!r.extension)return[];let t=[];for(let n of r.extension){if(n.url!==Kr||!n.extension)continue;let i=n.extension.find(s=>s.url==="pharmacy"),o=n.extension.find(s=>s.url==="type");if(i?.valueReference){let s=e?o?.valueCodeableConcept?.coding?.some(a=>a.system===e&&a.code===Jr)??!1:o?.valueCodeableConcept?.coding?.some(a=>a.code===Jr)??!1;t.push({organizationRef:i.valueReference,isPrimary:s})}}return t}function Ds(r,e,t=Ci){return{url:Kr,extension:[{url:"pharmacy",valueReference:r},{url:"type",valueCodeableConcept:{coding:[{system:t,code:e?Jr:Pi,display:e?"Primary Pharmacy":"Preferred Pharmacy"}]}}]}}function jd(r,e,t,n=Ci){r.extension??=[];let i=O(e);if(t)for(let a of r.extension)Ri(a)&&Ei(a)!==i&&Wd(a,n);let o=r.extension.findIndex(a=>Ri(a)&&Ei(a)===i),s=Ds(e,t,n);return o>=0?r.extension[o]=s:r.extension.push(s),r}function $d(r,e){if(!r.extension)return r;let t=O(e);return r.extension=r.extension.filter(n=>Ri(n)?Ei(n)!==t:!0),r}function Hd(r){if(!Array.isArray(r))return!1;if(r.length>0){let e=r[0];return typeof e=="object"&&e!==null&&e.resourceType==="Organization"}return!0}function Gd(r){if(typeof r!="object"||r===null)return!1;let e=r;return typeof e.success=="boolean"&&typeof e.message=="string"}function Qd(r){if(!r)throw new f(T("Resource type is null"));if(!lt(r))throw new f(T("Unknown resource type"))}function Ai(r,e,t){r===null?t.push(E(e,"Invalid null value")):Array.isArray(r)?zd(r,e,t):typeof r=="object"&&Jd(r,e,t)}function zd(r,e,t){for(let n=0;n<r.length;n++)r[n]===void 0?t.push(E(`${e}[${n}]`,"Invalid undefined value")):Ai(r[n],`${e}[${n}]`,t)}function Jd(r,e,t){for(let[n,i]of Object.entries(r))Ai(i,`${e}${e?".":""}${n}`,t)}function Kd(r){return{resourceType:"SearchParameter",code:r.code+":identifier",base:r.base,type:"token",expression:`(${r.expression}).identifier`}}function wi(r){return r.match(/^\((.+)\)\.identifier$/)?.[1]}function Oi(r,e){return new ye(r,new X(e,new B("identifier")))}var le={BOOLEAN:"BOOLEAN",NUMBER:"NUMBER",QUANTITY:"QUANTITY",TEXT:"TEXT",REFERENCE:"REFERENCE",CANONICAL:"CANONICAL",DATE:"DATE",DATETIME:"DATETIME",PERIOD:"PERIOD",UUID:"UUID"};function Yd(r,e){return j.types[r]?.searchParamsDetails?.[e.code]??Zd(r,e)}function Xd(r,e,t){let n=j.types[r];n||(n={},j.types[r]=n),n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=t}function Zd(r,e){let t=e.code,n=e.expression,i=ki(r,n),o={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let l of i){let p=Yr(l),g=Un(()=>p.join("."));p.length===1&&p[0]instanceof R&&p[0].operator!=="."?o.propertyTypes.add("boolean"):e.code.endsWith(":identifier")?o.propertyTypes.add("Identifier"):g().endsWith("extension.value.code")||g().endsWith("extension.value.coding.code")?(o.array=!0,o.propertyTypes.clear(),o.propertyTypes.add("code")):Ms(o,p,r,1),g().endsWith("extension.valueDateTime")&&(o.array=!1,o.propertyTypes.clear(),o.propertyTypes.add("dateTime"))}let s;if(e.code.endsWith(":identifier")){let l=wi(n);if(l===void 0)throw new Error(`Unexpected expression for derived identifier search parameter: ${n}`);let p=Ii(r,l);s=Oi(n,p)}else s=Ii(r,n);let a=o.elementDefinitions.map(l=>({...l,type:l.type?.filter(p=>o.propertyTypes.has(p.code))})).filter(l=>l.type&&l.type.length>0),u={type:rp(e,o.propertyTypes),elementDefinitions:a,parsedExpression:s,array:o.array,referenceTargetTypes:ip(e,a)};return Xd(r,t,u),u}function Ms(r,e,t,n){let i=e[n];if(i instanceof xe){r.propertyTypes.add(i.right.toString());return}if(i instanceof Z){ep(r,i);return}let o=i.toString(),s=gt(t,o);if(!s)throw new Error(`Element definition not found for ${t} ${o}`);let a=!1,u=n+1;u<e.length&&e[u]instanceof Oe&&(a=!0,u++);let l=e[u];if(s.isArray&&!a&&(r.array=!0),u===e.length-1){if(l instanceof xe){r.elementDefinitions.push(s),r.propertyTypes.add(l.right.toString());return}if(l instanceof Z&&l.name==="ofType"){r.elementDefinitions.push(s),r.propertyTypes.add(l.args[0].toString());return}}if(u>=e.length){r.elementDefinitions.push(s);for(let p of s.type??y)r.propertyTypes.add(p.code);return}for(let p of s.type??y){let g=p.code;tp(g)&&(g=s.type[0].code),Ms(r,e,g,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 we){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)?le.DATE:le.DATETIME;case"number":return le.NUMBER;case"quantity":return le.QUANTITY;case"reference":return e.has(d.canonical)?le.CANONICAL:le.REFERENCE;case"token":return e.size===1&&e.has(d.boolean)?le.BOOLEAN:le.TEXT;default:return le.TEXT}}function ki(r,e){let t=[],n=Lt(e);return Xr(r,n.child,t),t}function np(r,e){let t=ki(r,e);if(t.length!==0)return t.map(n=>n.toString()).join(" | ")}function Ii(r,e){let t=[],n=Lt(e);if(Xr(r,n.child,t),t.length===0)return n;let i=t[0];for(let o=1;o<t.length;o++)i=new Ae(i,t[o]);return new ye("<original-not-available>",i)}function Xr(r,e,t){e instanceof Ae?(Xr(r,e.left,t),Xr(r,e.right,t)):e.toString().includes(r+".")&&t.push(e)}function Yr(r){if(r instanceof xe||r instanceof Oe)return[Yr(r.left),r].flat();if(r instanceof R&&r.operator!==".")return[r];if(r instanceof X)return[Yr(r.left),Yr(r.right)].flat();if(r instanceof Z){if(r.name==="where"&&!(r.args[0]instanceof we))return[];if(r.name==="last")return[]}return[r]}function ip(r,e){if(r.target?.length===1)return r.target;if(e){let t=new Set;for(let n of e)for(let i of n.type)if(!(i.code!=="Reference"||!i.targetProfile))for(let o of i.targetProfile){let s=o.split("/").at(-1);s&&s!=="Resource"&&t.add(s)}if(t.size>0)return Array.from(t)}}function op(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 sp(r,e){let t=[];for(let n of e)t.push(...ap(r,n));return t}function ap(r,e){if(!r.resource)throw new Error("Resource type is required");if(r.resource!==e.resourceType)return[];let t={};for(let i of r.constant??y){let o={type:"ViewDefinitionConstant",value:i};t["%"+i.name]=_(o,"value")}let n=b(e);for(let i of r.where??y){let o=w(i.path,[n],t);if(o.length!==1)return[];if(o[0].type!=="boolean")throw new Error("WHERE clause must evaluate to a boolean");if(!o[0].value)return[]}return Vi(r,n,t)}function Vi(r,e,t){let n=[],i;r.forEach?i=w(r.forEach,[e],t):r.forEachOrNull?i=w(r.forEachOrNull,[e],t):i=[e];for(let o of i){let s=[];for(let a of r.column??y){let u=w(a.path,[o],t),l;if(u.length===0)l={[a.name]:null};else if(a.collection)l={[a.name]:u.map(p=>p.value)};else if(u.length===1)l={[a.name]:u[0].value};else throw new Error("Multiple values found but not expected for column");s.push([l])}for(let a of r.select??y){let u=Vi(a,o,t);s.push(u)}if(r.unionAll){let a=[];for(let u of r.unionAll)for(let l of Vi(u,o,t))a.push(l);s.push(a)}n.push(...cp(s))}if(i.length===0&&r.forEachOrNull){let o={};for(let s of r.column??y)o[s.name]=null;n.push(o)}return n}function cp(r){if(r.length===0)return[];let e=r[0];for(let t=1;t<r.length;t++)e=up(e,r[t]);return e}function up(r,e){let t=[];for(let n of r)for(let i of e)t.push(lp(n,i));return t}function lp(r,e){let t={};return Object.assign(t,r),Object.assign(t,e),t}var _s="https://meta.medplum.com/releases",Di=new Map;function dp(){Di.clear()}function Ls(r){let e=r;if(!e.tag_name?.startsWith("v"))throw new Error("Manifest missing valid tag_name starting with a 'v' (eg. v5.1.15)");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 Zr(r,e,t){let n=e?Di.get(e):void 0;if(!n){let i=e?`v${e}`:"latest",o=new URL(`${_s}/${i}.json`);if(o.searchParams.set("a",r),o.searchParams.set("c",Br),t)for(let[u,l]of Object.entries(t))o.searchParams.set(u,l);let s=await fetch(o.toString());if(s.status!==200){let u;try{u=(await s.json()).message}catch(l){console.error(`Failed to parse message from body: ${Se(l)}`)}throw new Error(`Received status code ${s.status} while fetching manifest for version '${e??"latest"}'. Message: ${u}`)}let a=await s.json();Ls(a),n=a,Di.set(n.tag_name.slice(1),n)}return n}function Ns(r){return/^\d+\.\d+\.\d+(-[0-9a-z]{7})?$/.test(r)}async function pp(r,e){if(!Ns(e))return!1;try{await Zr(r,e)}catch{return!1}return!0}async function fp(r){let e=await Zr(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 mp(r,e){try{let t=Br.split("-")[0],i=(await Zr(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: ${Se(t)}`)}}0&&(module.exports={AccessPolicyInteraction,AckCode,AndAtom,ArithmeticOperatorAtom,AsAtom,CPT,ClientStorage,ConcatAtom,ContainsAtom,ContentType,DEFAULT_ACCEPT,DEFAULT_MAX_SEARCH_COUNT,DEFAULT_SEARCH_COUNT,DataSampler,DotAtom,EMPTY,EmptySetAtom,EqualsAtom,EquivalentAtom,EventTarget,ExternalSecretSystems,FHIRCAST_EVENT_NAMES,FHIRCAST_EVENT_RESOURCES,FHIRCAST_EVENT_VERSION_REQUIRED,FHIRCAST_RESOURCE_TYPES,FhirFilterComparison,FhirFilterConnective,FhirFilterNegation,FhirPathAtom,FhircastConnection,FileBuilder,FunctionAtom,HTTP_HL7_ORG,HTTP_TERMINOLOGY_HL7_ORG,Hl7Context,Hl7Field,Hl7Message,Hl7Segment,ICD10,INVALID_MEDICATION_ORDER_RESPONSE,INVALID_MEDICATION_ORDER_SET_RESPONSE,INVALID_MEDICATION_SEARCH_RESPONSE,ImpliesAtom,InAtom,IndexerAtom,InfixOperatorAtom,IsAtom,LOINC,LRUCache,LiteralAtom,LogLevel,LogLevelNames,Logger,MEDICATION_REQUEST_STATUS_REASON_RESPONSE_NOT_RECEIVED,MEDICATION_REQUEST_STATUS_REASON_SYSTEM,MEDPLUM_CLI_CLIENT_ID,MEDPLUM_RELEASES_URL,MEDPLUM_VERSION,MedplumClient,MedplumKeyValueClient,MemoryStorage,MockAsyncClientStorage,NDC,NOOP,NotEqualsAtom,NotEquivalentAtom,OAuthClientAssertionType,OAuthGrantType,OAuthSigningAlgorithm,OAuthTokenAuthMethod,OAuthTokenType,OperationOutcomeError,Operator,OperatorPrecedence,OrAtom,PATIENT_PREFERRED_PHARMACY_URL,PHARMACY_PREFERENCE_TYPE_SYSTEM,PHARMACY_TYPE_PREFERRED,PHARMACY_TYPE_PRIMARY,Parser,ParserBuilder,PrefixOperatorAtom,PropertyType,RXNORM,ReadablePromise,ReconnectingWebSocket,ReturnAckCategory,SNOMED,SearchParameterType,SubscriptionEmitter,SubscriptionManager,SymbolAtom,Tokenizer,TransformMapCollection,TypedEventTarget,UCUM,UnaryOperatorAtom,UnionAtom,VALID_HOSTNAME_REGEX,XorAtom,accepted,accessPolicySupportsInteraction,addPreferredPharmacyToPatient,addProfileToResource,allOk,append,applyDefaultValuesToElement,applyDefaultValuesToResource,applyFixedOrPatternValue,arrayBufferToBase64,arrayBufferToHex,arrayify,assert,assertContextVersionOptional,assertOk,assertReleaseManifest,badRequest,booleanToTypedValue,buildCdsRequest,buildElementsContext,buildMedicationRequestResponseLostStatusReason,buildTypeName,businessRule,calculateAge,calculateAgeString,canReadResourceType,canWriteResource,canWriteResourceType,capitalize,checkForNull,checkIfValidMedplumVersion,clearReleaseCache,codeableConceptMatchesToken,codingMatchesToken,compressElement,concatUrls,conceptMapTranslate,conflict,contentTooLarge,convertContainedResourcesToBundle,convertToSearchableDates,convertToSearchableNumbers,convertToSearchableQuantities,convertToSearchableReferences,convertToSearchableStrings,convertToSearchableTokens,convertToSearchableUris,convertToTransactionBundle,crawlTypedValue,crawlTypedValueAsync,createConstraintIssue,createFhircastMessagePayload,createOperationOutcomeIssue,createPreferredPharmacyExtension,createProcessingIssue,createReference,createStructureIssue,created,decodeBase64,decodeBase64Url,deepClone,deepEquals,deepIncludes,deriveIdentifierSearchParameter,encodeBase64,encodeBase64Url,encryptSHA256,ensureNoLeadingSlash,ensureTrailingSlash,escapeHtml,evalFhirPath,evalFhirPathTyped,evalSqlOnFhir,expandSampledData,expandSampledObservation,extractAccountReferences,fetchLatestVersionString,fetchVersionManifest,fhirPathArrayEquals,fhirPathArrayEquivalent,fhirPathArrayNotEquals,fhirPathEquals,fhirPathEquivalent,fhirPathIs,fhirPathNot,fhirTypeToJsType,findCodeBySystem,findObservationInterval,findObservationReferenceRange,findObservationReferenceRanges,findResourceByCode,findResourceInBundle,flatMapFilter,forbidden,formatAddress,formatCodeableConcept,formatCoding,formatDate,formatDateTime,formatFamilyName,formatGivenName,formatHl7DateTime,formatHumanName,formatMoney,formatObservationValue,formatPeriod,formatQuantity,formatRange,formatReferenceString,formatSearchQuery,formatTime,formatTiming,formatWallTime,generateId,getAllDataTypes,getAllQuestionnaireAnswers,getBuffer,getCodeBySystem,getDataType,getDateProperty,getDefaultValuesForNewSliceEntry,getDisplayString,getElementDefinition,getElementDefinitionForPath,getElementDefinitionFromElements,getElementDefinitionTypeName,getExpressionForResourceType,getExpressionsForResourceType,getExtension,getExtensionValue,getIdentifier,getImageSrc,getInnerDerivedIdentifierExpression,getMedicationOrderIframeUrl,getNestedProperty,getOutcomeRedirectUrl,getParsedDerivedIdentifierExpression,getParsedExpressionForResourceType,getPathDifference,getPathDisplayName,getPendingMedicationOrderId,getPendingMedicationOrderStatus,getPreferredPharmaciesFromPatient,getPropertyDisplayName,getQueryString,getQuestionnaireAnswers,getRandomString,getReferenceString,getResourceTypes,getSearchParameter,getSearchParameterDetails,getSearchParameters,getStatus,getTypedPropertyValue,getTypedPropertyValueWithPath,getTypedPropertyValueWithSchema,getTypedPropertyValueWithoutSchema,getValueSliceName,getWebSocketUrl,getWindow,globalSchema,gone,indexConceptMapCodings,indexDefaultSearchParameters,indexSearchParameter,indexSearchParameterBundle,indexStructureDefinitionBundle,inflateBaseSchema,inflateElement,initFhirPathParserBuilder,invalidSearchOperator,isAccepted,isAddPharmacyResponse,isBrowserEnvironment,isCodeableConcept,isCoding,isCompletedSubscriptionRequest,isComplexTypeCode,isConflict,isContextVersionRequired,isCreated,isDataTypeLoaded,isDateString,isDateTimeString,isDefined,isEmpty,isError,isFhirCriteriaMet,isFhircastResourceType,isGone,isJwt,isLowerCase,isMedicationArray,isMedicationOrderResponse,isMedicationOrderSetResponse,isMedplumAccessToken,isNodeEnvironment,isNotFound,isObject,isOk,isOperationOutcome,isOrganizationArray,isPeriod,isPopulated,isPrimitiveType,isProfileLoaded,isProfileResource,isQuantity,isQuantityEquivalent,isRedirect,isReference,isResource,isResourceType,isResourceTypeSchema,isResourceWithId,isSliceDefinitionWithTypes,isString,isStringArray,isTextObject,isTypedValue,isUUID,isUnauthenticated,isValidDate,isValidHostname,isValidMedplumSemver,lazy,loadDataType,locationUtils,mapByIdentifier,matchDiscriminant,matchesRange,matchesSearchRequest,medicationOrderRequestToParameters,medicationOrderSetRequestToParameters,medicationSearchParamsToParameters,multipleMatches,normalizeArrayBufferView,normalizeCreateBinaryOptions,normalizeCreatePdfOptions,normalizeErrorEvent,normalizeErrorString,normalizeOperationOutcome,notFound,notModified,operationOutcomeIssueToString,operationOutcomeToString,parametersToMedicationOrderResponse,parametersToMedicationOrderSetResponse,parseFhirPath,parseFilterParameter,parseHl7DateTime,parseJWTPayload,parseLogLevel,parseMappingLanguage,parseParameter,parseReference,parseSearchRequest,parseStructureDefinition,parseXFhirQuery,pathToJSONPointer,preciseEquals,preciseGreaterThan,preciseGreaterThanOrEquals,preciseLessThan,preciseLessThanOrEquals,preciseRound,preconditionFailed,projectAdminResourceTypes,protectedResourceTypes,readInteractions,redirect,redirectOk,removeDuplicates,removePreferredPharmacyFromPatient,removeProfileFromResource,reorderBundle,replaceQueryVariables,resolveId,resourceMatchesSubscriptionCriteria,satisfiedAccessPolicy,serializeError,serializeFhircastSubscriptionRequest,serverError,serverTimeout,setCodeBySystem,setIdentifier,singleton,singularize,sleep,sortStringArray,splitN,splitSearchOnComma,streamToBuffer,stringify,stringifyTypedValue,structureMapTransform,subsetResource,summarizeObservations,toJsBoolean,toPeriod,toTypedValue,tooManyRequests,trimTrailingEmptyElements,tryGetDataType,tryGetJwtExpiration,tryGetProfile,typedValueToString,unauthorized,unauthorizedTokenAudience,unauthorizedTokenExpired,unsupportedMediaType,validateFhircastSubscriptionRequest,validateResource,validateResourceType,validateTypedValue,validationError,validationRegexes,warnIfNewerVersionAvailable,wordWrap});
55
55
  /*!
56
56
  * Reconnecting WebSocket
57
57
  * by Pedro Ladaria <pedro.ladaria@gmail.com>