@medplum/core 5.1.29 → 5.1.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.cjs +6 -6
- package/dist/cjs/index.cjs.map +4 -4
- package/dist/cjs/index.d.ts +44 -5
- package/dist/esm/index.d.ts +44 -5
- package/dist/esm/index.mjs +5 -5
- package/dist/esm/index.mjs.map +4 -4
- package/package.json +3 -3
package/dist/cjs/index.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
"use strict";var Tr=Object.defineProperty;var $a=Object.getOwnPropertyDescriptor;var ja=Object.getOwnPropertyNames;var Ha=Object.prototype.hasOwnProperty;var Ga=(t,e,r)=>e in t?Tr(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var Qa=(t,e)=>{for(var r in e)Tr(t,r,{get:e[r],enumerable:!0})},za=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of ja(e))!Ha.call(t,i)&&i!==r&&Tr(t,i,{get:()=>e[i],enumerable:!(n=$a(e,i))||n.enumerable});return t};var Ja=t=>za(Tr({},"__esModule",{value:!0}),t);var c=(t,e,r)=>Ga(t,typeof e!="symbol"?e+"":e,r);var tm={};Qa(tm,{AccessPolicyInteraction:()=>Ne,AckCode:()=>ga,AndAtom:()=>Ht,ArithmeticOperatorAtom:()=>q,AsAtom:()=>Ce,CPT:()=>Za,ClientStorage:()=>ht,ConcatAtom:()=>Ft,ContainsAtom:()=>Ut,ContentType:()=>V,DAYS_OF_WEEK:()=>Ma,DEFAULT_ACCEPT:()=>Bs,DEFAULT_MAX_SEARCH_COUNT:()=>El,DEFAULT_SEARCH_COUNT:()=>bl,DataSampler:()=>sn,DotAtom:()=>ie,EMPTY:()=>v,EmptySetAtom:()=>Lt,EqualsAtom:()=>qt,EquivalentAtom:()=>$t,EventTarget:()=>Yr,ExternalSecretSystems:()=>Nd,FHIRCAST_EVENT_NAMES:()=>Xr,FHIRCAST_EVENT_RESOURCES:()=>Os,FHIRCAST_EVENT_VERSION_REQUIRED:()=>Zr,FHIRCAST_RESOURCE_TYPES:()=>ws,FhirFilterComparison:()=>hr,FhirFilterConnective:()=>yr,FhirFilterNegation:()=>gr,FhirPathAtom:()=>Re,FhircastConnection:()=>tr,FileBuilder:()=>Xi,FunctionAtom:()=>oe,HTTP_HL7_ORG:()=>St,HTTP_TERMINOLOGY_HL7_ORG:()=>rc,Hl7Context:()=>we,Hl7Field:()=>ge,Hl7Message:()=>eo,Hl7Segment:()=>xt,ICD10:()=>ec,INVALID_MEDICATION_CART_RESPONSE:()=>wa,INVALID_MEDICATION_CHECKOUT_RESPONSE:()=>Pa,INVALID_MEDICATION_ORDER_RESPONSE:()=>Ta,INVALID_MEDICATION_ORDER_SET_RESPONSE:()=>Sa,INVALID_MEDICATION_SEARCH_RESPONSE:()=>Hp,ImpliesAtom:()=>zt,InAtom:()=>Bt,IndexerAtom:()=>Le,InfixOperatorAtom:()=>A,InvalidOperationError:()=>hn,IsAtom:()=>_e,LOINC:()=>Ka,LRUCache:()=>ee,LiteralAtom:()=>G,LogLevel:()=>nt,LogLevelNames:()=>va,Logger:()=>to,MEDICATION_REQUEST_STATUS_REASON_RESPONSE_NOT_RECEIVED:()=>Ea,MEDICATION_REQUEST_STATUS_REASON_SYSTEM:()=>ba,MEDPLUM_CLI_CLIENT_ID:()=>Ed,MEDPLUM_RELEASES_URL:()=>Fa,MEDPLUM_SEMVER_REGEX:()=>mo,MEDPLUM_VERSION:()=>on,MedplumClient:()=>cr,MedplumKeyValueClient:()=>ir,MemoryStorage:()=>rn,MissingError:()=>z,MockAsyncClientStorage:()=>Mi,NDC:()=>tc,NOOP:()=>Nu,NotEqualsAtom:()=>Wt,NotEquivalentAtom:()=>jt,OAuthClientAssertionType:()=>Ws,OAuthGrantType:()=>et,OAuthSigningAlgorithm:()=>Md,OAuthTokenAuthMethod:()=>kd,OAuthTokenType:()=>qs,OperationOutcomeError:()=>m,Operator:()=>g,OperatorPrecedence:()=>S,OrAtom:()=>Gt,PATIENT_PREFERRED_PHARMACY_URL:()=>Tn,PHARMACY_PREFERENCE_TYPE_SYSTEM:()=>io,PHARMACY_TYPE_PREFERRED:()=>oo,PHARMACY_TYPE_PRIMARY:()=>vn,Parser:()=>Sr,ParserBuilder:()=>Tt,Pointer:()=>M,PrefixOperatorAtom:()=>vt,PropertyType:()=>p,RXNORM:()=>Xa,ReadablePromise:()=>$,ReconnectingWebSocket:()=>or,ReturnAckCategory:()=>ed,SNOMED:()=>Ya,SchedulingEncounterCodingURI:()=>vf,SchedulingParametersURI:()=>vr,SchedulingPlanDefinitionURI:()=>Tf,SearchParameterType:()=>ye,ServiceTypeReferenceURI:()=>Sn,SubscriptionEmitter:()=>gt,SubscriptionManager:()=>ar,SymbolAtom:()=>F,TestError:()=>mn,TimezoneExtensionURI:()=>ka,Tokenizer:()=>Pe,TransformMapCollection:()=>dn,TypedEventTarget:()=>ae,UCUM:()=>Cn,UnaryOperatorAtom:()=>Nt,UnionAtom:()=>Ve,VALID_HOSTNAME_REGEX:()=>es,XorAtom:()=>Qt,accepted:()=>fc,accessPolicySupportsInteraction:()=>Ei,add:()=>fr,addPreferredPharmacyToPatient:()=>hf,addProfileToResource:()=>ku,allOk:()=>nc,append:()=>re,apply:()=>zi,applyDefaultValuesToElement:()=>zd,applyDefaultValuesToResource:()=>Qd,applyFixedOrPatternValue:()=>lr,applyPatch:()=>Ap,arrayBufferToBase64:()=>si,arrayBufferToHex:()=>oi,arrayify:()=>te,assert:()=>Vs,assertContextVersionOptional:()=>Ai,assertNever:()=>Lu,assertOk:()=>wc,assertReleaseManifest:()=>Ua,assertValidMedplumSemver:()=>qa,badRequest:()=>w,booleanToTypedValue:()=>y,buildCdsRequest:()=>cd,buildElementsContext:()=>cn,buildMedicationRequestResponseLostStatusReason:()=>Gp,buildTypeName:()=>cs,businessRule:()=>vc,calculateAge:()=>Ot,calculateAgeString:()=>ru,canReadResourceType:()=>Kl,canWriteResource:()=>Xl,canWriteResourceType:()=>Yl,capitalize:()=>U,checkForNull:()=>so,checkIfValidMedplumVersion:()=>Yf,clearReleaseCache:()=>Kf,clearScheduleParameter:()=>La,codeableConceptMatchesToken:()=>gu,codingMatchesToken:()=>Go,compareVersions:()=>Wa,compressElement:()=>Ic,concatUrls:()=>W,conceptMapTranslate:()=>Bi,conflict:()=>mc,contentTooLarge:()=>uc,convertContainedResourcesToBundle:()=>sd,convertToSearchableDates:()=>yi,convertToSearchableNumbers:()=>hl,convertToSearchableQuantities:()=>gl,convertToSearchableReferences:()=>vi,convertToSearchableStrings:()=>xi,convertToSearchableTokens:()=>Ti,convertToSearchableUris:()=>yl,convertToTransactionBundle:()=>Rs,copy:()=>ua,crawlTypedValue:()=>Dr,crawlTypedValueAsync:()=>Fc,createConstraintIssue:()=>_n,createFhircastMessagePayload:()=>tn,createOperationOutcomeIssue:()=>ke,createPatch:()=>Op,createPreferredPharmacyExtension:()=>Ia,createProcessingIssue:()=>Ln,createReference:()=>ne,createStructureIssue:()=>R,createTests:()=>Ip,created:()=>ic,decodeBase64:()=>Es,decodeBase64Url:()=>er,deepClone:()=>de,deepEquals:()=>ve,deepIncludes:()=>st,deriveIdentifierSearchParameter:()=>Mf,diffAny:()=>Ae,diffArrays:()=>ia,diffObjects:()=>oa,encodeBase64:()=>Zt,encodeBase64Url:()=>Ri,encodeSmartHealthLink:()=>Wf,encryptSHA256:()=>Ci,ensureNoLeadingSlash:()=>Zo,ensureTrailingSlash:()=>Gr,escapeHtml:()=>_u,escapeToken:()=>aa,evalFhirPath:()=>ml,evalFhirPathTyped:()=>k,evalSqlOnFhir:()=>Hf,expandSampledData:()=>_i,expandSampledObservation:()=>qd,extractAccountReferences:()=>Wr,extractServiceTypeReferences:()=>wf,fetchAllVersionStrings:()=>Zf,fetchLatestVersionString:()=>Xf,fetchVersionManifest:()=>Rn,fhirPathArrayEquals:()=>Xn,fhirPathArrayEquivalent:()=>Fr,fhirPathArrayNotEquals:()=>Zn,fhirPathEquals:()=>at,fhirPathEquivalent:()=>Bo,fhirPathIs:()=>Qe,fhirPathNot:()=>Yn,fhirTypeToJsType:()=>_r,fhirpathPatchTypedValue:()=>Dp,findCodeBySystem:()=>hu,findObservationInterval:()=>vu,findObservationReferenceRange:()=>Tu,findObservationReferenceRanges:()=>Jo,findResourceByCode:()=>wu,findResourceInBundle:()=>ad,flatMapFilter:()=>Vu,forbidden:()=>sc,formatAddress:()=>rs,formatCodeableConcept:()=>Te,formatCoding:()=>fi,formatDate:()=>Bu,formatDateTime:()=>ze,formatFamilyName:()=>Uu,formatGivenName:()=>Fu,formatHl7DateTime:()=>xa,formatHumanName:()=>ut,formatMoney:()=>Ju,formatObservationValue:()=>is,formatPeriod:()=>Wu,formatQuantity:()=>be,formatRange:()=>zu,formatReferenceString:()=>ts,formatSearchQuery:()=>Dl,formatTime:()=>qu,formatTiming:()=>Gu,formatWallTime:()=>ns,generateId:()=>se,getAllDataTypes:()=>qn,getAllQuestionnaireAnswers:()=>iu,getBuffer:()=>Jr,getCodeBySystem:()=>qr,getDataType:()=>xe,getDateProperty:()=>tu,getDefaultValuesForNewSliceEntry:()=>Jd,getDisplayString:()=>$o,getElementDefinition:()=>wt,getElementDefinitionForPath:()=>hi,getElementDefinitionFromElements:()=>mi,getElementDefinitionTypeName:()=>wr,getExpressionForResourceType:()=>Uf,getExpressionsForResourceType:()=>lo,getExtension:()=>ce,getExtensionValue:()=>De,getExtensions:()=>It,getIdentifier:()=>$r,getImageSrc:()=>eu,getInnerDerivedIdentifierExpression:()=>ao,getMedicationOrderIframeUrl:()=>Kp,getNestedProperty:()=>je,getOutcomeRedirectUrl:()=>xc,getParsedDerivedIdentifierExpression:()=>co,getParsedExpressionForResourceType:()=>uo,getPathDifference:()=>Se,getPathDisplayName:()=>tl,getPendingMedicationOrderId:()=>zp,getPendingMedicationOrderStatus:()=>Jp,getPreferredPharmaciesFromPatient:()=>mf,getPropertyDisplayName:()=>ls,getQueryString:()=>di,getQuestionnaireAnswers:()=>nu,getRandomString:()=>Kr,getReferenceString:()=>I,getResourceTypes:()=>us,getScheduleParameters:()=>_a,getSchedulingTimezone:()=>Cf,getSearchParameter:()=>el,getSearchParameterDetails:()=>Df,getSearchParameters:()=>Zu,getSearchResourceTypes:()=>Fl,getSmartHealthLinkId:()=>jf,getStatus:()=>Ac,getTypedPropertyValue:()=>_,getTypedPropertyValueWithPath:()=>Vr,getTypedPropertyValueWithSchema:()=>Fo,getTypedPropertyValueWithoutSchema:()=>Uo,getValueSliceName:()=>Ni,getWebSocketUrl:()=>li,getWindow:()=>rd,globalSchema:()=>H,gone:()=>ac,hasSchedulingParameters:()=>bf,indexConceptMapCodings:()=>Gs,indexDefaultSearchParameters:()=>Hn,indexSearchParameter:()=>Qr,indexSearchParameterBundle:()=>Xu,indexStructureDefinitionBundle:()=>Ir,inflateBaseSchema:()=>Nn,inflateElement:()=>Ao,initFhirPathParserBuilder:()=>dt,intersection:()=>Ep,invalidSearchOperator:()=>Nl,isAccepted:()=>Sc,isAckCode:()=>ya,isAddPharmacyResponse:()=>xf,isBrowserEnvironment:()=>X,isCodeableConcept:()=>Br,isCoding:()=>Ur,isCompletedSubscriptionRequest:()=>wi,isComplexTypeCode:()=>jr,isConflict:()=>Rc,isContextVersionRequired:()=>Pi,isCreated:()=>Tc,isDataTypeLoaded:()=>Wn,isDateString:()=>ei,isDateTimeString:()=>Ge,isDayOfWeek:()=>Sf,isDefined:()=>Dt,isDestructive:()=>Gi,isEmpty:()=>O,isError:()=>Pr,isFhirCriteriaMet:()=>Ls,isFhircastResourceType:()=>Is,isGone:()=>Cc,isJwt:()=>Oi,isLowerCase:()=>yu,isMedicationArray:()=>Qp,isMedicationCartManageResponse:()=>Oa,isMedicationCheckoutResponse:()=>Aa,isMedicationOrderResponse:()=>Ra,isMedicationOrderSetResponse:()=>Ca,isMedplumAccessToken:()=>Ii,isNodeEnvironment:()=>td,isNotFound:()=>Ec,isObject:()=>C,isOk:()=>Ar,isOperationOutcome:()=>it,isOrganizationArray:()=>yf,isPeriod:()=>ti,isPopulated:()=>le,isPrimitiveType:()=>Rt,isProfileLoaded:()=>$n,isProfileResource:()=>Wo,isQuantity:()=>L,isQuantityEquivalent:()=>ri,isRedirect:()=>bc,isReference:()=>J,isResource:()=>D,isResourceType:()=>Et,isResourceTypeSchema:()=>Mr,isResourceWithId:()=>ct,isSliceDefinitionWithTypes:()=>Li,isString:()=>pe,isStringArray:()=>mu,isTextObject:()=>Qo,isTypedValue:()=>il,isUUID:()=>fu,isUnauthenticated:()=>Pc,isValidDate:()=>Vt,isValidHostname:()=>Iu,isValidMedplumSemver:()=>ho,lazy:()=>ui,loadDataType:()=>kr,locationUtils:()=>he,mapByIdentifier:()=>Mu,matchDiscriminant:()=>Lr,matchesRange:()=>ci,matchesSearchRequest:()=>Xt,medicationCartClearRequestToParameters:()=>cf,medicationCartRemoveRequestToParameters:()=>af,medicationCheckoutRequestToParameters:()=>nf,medicationOrderRequestToParameters:()=>Zp,medicationOrderSetRequestToParameters:()=>tf,medicationSearchParamsToParameters:()=>Yp,move:()=>xn,multipleMatches:()=>dc,normalizeArrayBufferView:()=>ai,normalizeCreateBinaryOptions:()=>Vi,normalizeCreatePdfOptions:()=>$s,normalizeErrorEvent:()=>_s,normalizeErrorString:()=>Ie,normalizeOperationOutcome:()=>bt,notFound:()=>Mn,notModified:()=>oc,operationOutcomeIssueToString:()=>Po,operationOutcomeToString:()=>Vn,parametersToMedicationCartManageResponse:()=>lf,parametersToMedicationCheckoutResponse:()=>sf,parametersToMedicationOrderResponse:()=>ef,parametersToMedicationOrderSetResponse:()=>rf,parametersToOrderSetSyncResponse:()=>pf,parseFhirPath:()=>Yt,parseFhirPathPatchParameters:()=>Mp,parseFilterParameter:()=>Bp,parseHl7DateTime:()=>Wp,parseJWTPayload:()=>nr,parseLogLevel:()=>jp,parseMappingLanguage:()=>np,parseParameter:()=>ys,parseReference:()=>Yc,parseSearchRequest:()=>pt,parseSmartHealthLink:()=>$f,parseStructureDefinition:()=>Or,parseXFhirQuery:()=>Ml,pathToJSONPointer:()=>He,preciseEquals:()=>Cu,preciseGreaterThan:()=>Au,preciseGreaterThanOrEquals:()=>Xo,preciseLessThan:()=>Pu,preciseLessThanOrEquals:()=>Yo,preciseRound:()=>Ru,preconditionFailed:()=>cc,projectAdminResourceTypes:()=>vs,protectedResourceTypes:()=>xs,readInteractions:()=>Ts,redirect:()=>Co,redirectOk:()=>yc,remove:()=>gn,removeDuplicates:()=>Pt,removePreferredPharmacyFromPatient:()=>gf,removeProfileFromResource:()=>Du,reorderBundle:()=>Cs,replace:()=>yn,replaceQueryVariables:()=>As,resolveId:()=>K,resourceMatchesSubscriptionCriteria:()=>Sd,satisfiedAccessPolicy:()=>Ss,serializeError:()=>xr,serializeFhircastSubscriptionRequest:()=>en,serverError:()=>hc,serverTimeout:()=>gc,serviceTypeIncludesService:()=>Af,setCodeBySystem:()=>xu,setIdentifier:()=>ou,setScheduleParameter:()=>Rf,singleton:()=>N,singularize:()=>Ou,sleep:()=>Hr,sortStringArray:()=>Mt,splitN:()=>Je,splitSearchOnComma:()=>ft,streamToBuffer:()=>qf,stringify:()=>kt,stringifyTypedValue:()=>gi,structureMapTransform:()=>ip,subsetResource:()=>Dc,subtract:()=>Hi,summarizeObservations:()=>Fd,test:()=>la,toJsBoolean:()=>j,toPeriod:()=>At,toServiceTypeCodeableConcepts:()=>Pf,toTypedValue:()=>E,tooManyRequests:()=>pc,trimTrailingEmptyElements:()=>cu,tryGetDataType:()=>Me,tryGetJwtExpiration:()=>ki,tryGetProfile:()=>jn,typedValueToString:()=>pi,unauthorized:()=>We,unauthorizedTokenAudience:()=>Cr,unauthorizedTokenExpired:()=>Dn,unescapeToken:()=>sa,unsupportedMediaType:()=>lc,validateFhircastSubscriptionRequest:()=>rr,validateResource:()=>Wc,validateResourceType:()=>Of,validateTypedValue:()=>Vo,validationError:()=>T,validationRegexes:()=>Ct,warnIfNewerVersionAvailable:()=>em,wordWrap:()=>fa});module.exports=Ja(tm);var ee=class{constructor(e=10){c(this,"max");c(this,"cache");this.max=e,this.cache=new Map}clear(){this.cache.clear()}get(e){let r=this.cache.get(e);return r&&(this.cache.delete(e),this.cache.set(e,r)),r}set(e,r){this.cache.has(e)?this.cache.delete(e):this.cache.size>=this.max&&this.cache.delete(this.first()),this.cache.set(e,r)}delete(e){this.cache.delete(e)}keys(){return this.cache.keys()}first(){return this.cache.keys().next().value}};var vt=class{constructor(e,r){c(this,"operator");c(this,"child");this.operator=e,this.child=r}toString(){return`${this.operator}(${this.child.toString()})`}},A=class{constructor(e,r,n){c(this,"operator");c(this,"left");c(this,"right");this.operator=e,this.left=r,this.right=n}toString(){return`(${this.left.toString()} ${this.operator} ${this.right.toString()})`}},Tt=class{constructor(){c(this,"prefixParselets",{});c(this,"infixParselets",{})}registerInfix(e,r){return this.infixParselets[e]=r,this}registerPrefix(e,r){return this.prefixParselets[e]=r,this}prefix(e,r,n){return this.registerPrefix(e,{parse(i,o){let s=i.consumeAndParse(r);return n(o,s)}})}infixLeft(e,r,n){return this.registerInfix(e,{parse(i,o,s){let a=i.consumeAndParse(r);return n(o,s,a)},precedence:r})}construct(e){return new Sr(e,this.prefixParselets,this.infixParselets)}},Sr=class{constructor(e,r,n){c(this,"tokens");c(this,"prefixParselets");c(this,"infixParselets");this.tokens=e,this.prefixParselets=r,this.infixParselets=n}hasMore(){return this.tokens.length>0}match(e){return this.peek()?.id!==e?!1:(this.consume(),!0)}consumeAndParse(e=1/0){let r=this.consume(),n=this.prefixParselets[r.id];if(!n)throw new Error(`Parse error at "${r.value}" (line ${r.line}, column ${r.column}). No matching prefix parselet.`);let i=n.parse(this,r);for(;e>this.getPrecedence();){let o=this.consume();i=this.getInfixParselet(o).parse(this,i,o)}return i}getPrecedence(){let e=this.peek();if(!e)return 1/0;let r=this.getInfixParselet(e);return r?r.precedence:1/0}consume(e,r){if(!this.tokens.length)throw new Error("Cant consume unknown more tokens.");if(e&&this.peek()?.id!==e){let n=this.peek();throw new Error(`Expected ${e} but got "${n.id}" (${n.value}) at line ${n.line} column ${n.column}.`)}if(r&&this.peek()?.value!==r){let n=this.peek();throw new Error(`Expected "${r}" but got "${n.value}" at line ${n.line} column ${n.column}.`)}return this.tokens.shift()}peek(){return this.tokens.length>0?this.tokens[0]:void 0}removeComments(){this.tokens=this.tokens.filter(e=>e.id!=="Comment")}getInfixParselet(e){return this.infixParselets[e.id==="Symbol"?e.value:e.id]}};function te(t){if(t!==void 0)return Array.isArray(t)?t:[t]}var Cn="http://unitsofmeasure.org",Ka="http://loinc.org",Ya="http://snomed.info/sct",Xa="http://www.nlm.nih.gov/research/umls/rxnorm",Za="http://www.ama-assn.org/go/cpt",ec="http://hl7.org/fhir/sid/icd-10",tc="http://hl7.org/fhir/sid/ndc",St="http://hl7.org",rc="http://terminology.hl7.org";var br="ok",Er="created",Pn="gone",An="not-modified",wn="found",On="not-found",In="conflict",kn="unauthorized",yo="forbidden",xo="precondition-failed",vo="content-too-large",To="unsupported-media-type",So="multiple-matches",bo="too-many-requests",Rr="accepted",Eo="server-timeout",Ro="business-rule",nc={resourceType:"OperationOutcome",id:br,issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},ic={resourceType:"OperationOutcome",id:Er,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},oc={resourceType:"OperationOutcome",id:An,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},Mn={resourceType:"OperationOutcome",id:On,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},We={resourceType:"OperationOutcome",id:kn,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},Dn={...We,issue:[...We.issue,{severity:"error",code:"expired",details:{text:"Token expired"}}]},Cr={...We,issue:[...We.issue,{severity:"error",code:"invalid",details:{text:"Token not issued for this audience"}}]},sc={resourceType:"OperationOutcome",id:yo,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},ac={resourceType:"OperationOutcome",id:Pn,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},cc={resourceType:"OperationOutcome",id:xo,issue:[{severity:"error",code:"processing",details:{text:"Precondition Failed"}}]};function uc(t){return{resourceType:"OperationOutcome",id:vo,issue:[{severity:"error",code:"too-long",details:{text:t}}]}}var lc={resourceType:"OperationOutcome",id:To,issue:[{severity:"error",code:"not-supported",details:{text:"Unsupported media type"}}]},dc={resourceType:"OperationOutcome",id:So,issue:[{severity:"error",code:"multiple-matches",details:{text:"Multiple resources found matching condition"}}]},pc={resourceType:"OperationOutcome",id:bo,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function fc(t){return{resourceType:"OperationOutcome",id:Rr,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:t}]}}function w(t,e){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:t},...e?{expression:te(e)}:void 0}]}}function mc(t,e){return{resourceType:"OperationOutcome",id:In,issue:[{severity:"error",code:"conflict",details:{coding:e?[{code:e}]:void 0,text:t}}]}}function T(t,e,r,n){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:r??"structure",details:{text:t},...e?{expression:e}:void 0,...n?{diagnostics:n}:void 0}]}}function hc(t){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:t.toString()}]}}function gc(t){return{resourceType:"OperationOutcome",id:Eo,issue:[{severity:"error",code:"timeout",details:{text:t??"Server timeout"}}]}}function Co(t){let e=t.toString();return{resourceType:"OperationOutcome",id:wn,issue:[{severity:"information",code:"informational",details:{coding:[{system:"urn:ietf:rfc:3986",code:e}],text:"Redirect to "+e}}]}}function yc(t){return{...Co(t),id:br}}function xc(t){return t?.issue?.[0]?.details?.coding?.find(e=>e.system==="urn:ietf:rfc:3986")?.code}function vc(t,e){return{resourceType:"OperationOutcome",id:Ro,issue:[{severity:"error",code:"business-rule",details:{id:t,text:e}}]}}function Pr(t){return!t||typeof t!="object"?!1:t instanceof Error||typeof DOMException<"u"&&t instanceof DOMException?!0:Object.prototype.toString.call(t)==="[object Error]"}function it(t){return typeof t=="object"&&t!==null&&t.resourceType==="OperationOutcome"}function Ar(t){return t.id===br||t.id===Er||t.id===An||t.id===Rr}function Tc(t){return t.id===Er}function Sc(t){return t.id===Rr}function bc(t){return t.id===wn}function Ec(t){return t.id===On}function Rc(t){return t.id===In}function Cc(t){return t.id===Pn}function Pc(t){return t.id===kn}function Ac(t){switch(t.id){case br:return 200;case Er:return 201;case Rr:return 202;case wn:return 302;case An:return 304;case kn:return 401;case yo:return 403;case On:return 404;case In:return 409;case Pn:return 410;case xo:case So:return 412;case vo:return 413;case To:return 415;case Ro:return 422;case bo:return 429;case Eo:return 504;default:return t.issue?.[0]?.code==="exception"?500:400}}function wc(t,e){if(!Ar(t)||e===void 0)throw new m(t)}var m=class extends Error{constructor(r,n){super(Vn(r),n);c(this,"outcome");this.name="OperationOutcomeError",this.outcome=r}};function bt(t){return t instanceof m?t.outcome:it(t)?t:w(Ie(t))}function Ie(t){return t?typeof t=="string"?t:Pr(t)?t.message:it(t)?Vn(t):typeof t=="object"&&"code"in t&&typeof t.code=="string"?t.code:JSON.stringify(t):"Unknown error"}function Vn(t){let e=t.issue?.map(Po)??[];return e.length>0?e.join("; "):"Unknown error"}function Po(t){let e;return t.details?.text?t.diagnostics?e=`${t.details.text} (${t.diagnostics})`:e=t.details.text:t.diagnostics?e=t.diagnostics:e="Unknown error",t.expression?.length&&(e+=` (${t.expression.join(", ")})`),e}function ke(t,e,r,n,i){let o={severity:t,code:e,details:{text:r},expression:[n]};return i&&(o.diagnostics=JSON.stringify(i)),o}function R(t,e){return ke("error","structure",e,t)}function _n(t,e){return ke("error","invariant",`Constraint ${e.key} not met: ${e.description}`,t,{fhirpath:e.expression})}function Ln(t,e,r,n){return ke("error","processing",e,t,{...n,error:r})}var Oc={"http://hl7.org/fhirpath/System.String":"string"};function Ic(t){let e={};return t.min!==0&&(e.min=t.min),t.max!==1&&Number.isFinite(t.max)?e.max=t.max:t.max===Number.POSITIVE_INFINITY&&(e.max=Number.MAX_SAFE_INTEGER),e.type=t.type?.map(r=>({...r,extension:void 0,code:Oc[r.code]??r.code})),e}function Ao(t,e){let r=e.max&&e.max===Number.MAX_SAFE_INTEGER?Number.POSITIVE_INFINITY:e.max;return{path:t,description:"",type:e.type??[],min:e.min??0,max:r??1,isArray:!!r&&r>1,constraints:[]}}function Nn(t){let e=Object.create(null);for(let[r,n]of Object.entries(t))e[r]={name:r,type:r,path:r,elements:Object.fromEntries(Object.entries(n.elements).map(([i,o])=>[i,Ao(i,o)])),constraints:[],innerTypes:[]};return e}var wo={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"}]},deleted:{type:[{code:"boolean"}]}}},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"}]},userInfoMode:{type:[{code:"code"}]},userInfoApiKey:{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 Or(t){return new Un(t).parse()}var $e=Nn(wo),Bn=Object.create(null),Oo=Object.create(null),Mc={"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 Do(t){let e;return e=Oo[t],e||(e=Oo[t]=Object.create(null)),e}function Ir(t){let r=(Array.isArray(t)?t:t.entry?.map(n=>n.resource)??[]).filter(n=>n?.resourceType==="StructureDefinition");Hn(r);for(let n of r)kr(n)}function kr(t){if(!t?.name)throw new Error("Failed loading StructureDefinition from bundle");if(t.resourceType!=="StructureDefinition")return;let e=Or(t),r=Mc[t.url],n,i;r?(n=$e,i=r):t.url===`http://hl7.org/fhir/StructureDefinition/${t.type}`||t.url===`https://medplum.com/fhir/StructureDefinition/${t.type}`||t.type?.startsWith("http://")||t.type?.startsWith("https://")?(n=$e,i=t.type):(n=Do(t.url),i=t.type),n[i]=e;for(let o of e.innerTypes)o.parentType=e,n[o.name]=o;Bn[t.url]=e}function qn(){return $e}function Wn(t){return!!$e[t]}function Me(t,e){if(e){let r=Do(e)[t];if(r)return r}return $e[t]}function xe(t,e){let r=Me(t,e);if(!r)throw new m(w("Unknown data type: "+t));return r}function Et(t){let e=$e[t];return e&&Mr(e)}function $n(t){return!!Bn[t]}function jn(t){return Bn[t]}var Un=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:Nc(e),elements:{},constraints:this.parseElementDefinition(this.root).constraints,innerTypes:[],summaryProperties:new Set,mandatoryProperties:new Set},this.innerTypes=[]}parse(){let e=this.next();for(;e;){if(e.sliceName)this.parseSliceStart(e);else if(e.id?.includes(":")){if(this.slicingContext?.current){let r=Fn(e,this.slicingContext.path);this.slicingContext.current.elements[r]=this.parseElementDefinition(e)}}else{let r=this.parseElementDefinition(e);this.checkFieldEnter(e,r);let n=this.backboneContext;for(;n;){if(e.path?.startsWith(n.path+".")){n.type.elements[Fn(e,n.path)]=r;break}n=n.parent}if(!n){let i=Fn(e,this.root.path);e.isSummary&&this.resourceSchema.summaryProperties?.add(i.replace("[x]","")),r.min>0&&this.resourceSchema.mandatoryProperties?.add(i.replace("[x]","")),this.resourceSchema.elements[i]=r}this.checkFieldExit(e)}e=this.next()}return this.checkFieldExit(),this.innerTypes.length>0&&(this.resourceSchema.innerTypes=this.innerTypes),this.resourceSchema}checkFieldEnter(e,r){this.isInnerType(e)&&this.enterInnerType(e),this.slicingContext&&!ot(this.slicingContext.path,e?.path)&&(this.slicingContext=void 0),e.slicing&&!this.slicingContext&&this.enterSlice(e,r)}enterInnerType(e){for(;this.backboneContext&&!ot(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;let r=wr(e);this.backboneContext={type:{name:r,type:r,path:e.path,title:e.label,description:e.definition,elements:{},constraints:this.parseElementDefinition(e).constraints,innerTypes:[]},path:e.path,parent:ot(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,r){Lc(e)&&!this.peek()?.sliceName||(r.slicing={discriminator:(e.slicing?.discriminator??[]).map(n=>{if(n.type!=="value"&&n.type!=="pattern"&&n.type!=="type")throw new Error(`Unsupported slicing discriminator type: ${n.type}`);return{path:n.path,type:n.type}}),slices:[],ordered:e.slicing?.ordered??!1,rule:e.slicing?.rules},this.slicingContext={field:r.slicing,path:e.path??""})}checkFieldExit(e=void 0){if(this.backboneContext&&!ot(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!ot(this.backboneContext.path,e?.path));else this.innerTypes.push(this.backboneContext.type),this.backboneContext=void 0}next(){let e=this.peek();if(e)return this.index++,e}peek(){let e=this.elements[this.index];if(e){if(this.elementIndex[e.path??""]=e,e.contentReference){let r=e.contentReference.slice(e.contentReference.indexOf("#")+1),n=this.elementIndex[r];return n?{...n,id:e.id,path:e.path,min:e.min??n.min,max:e.max??n.max,base:{path:n.base?.path??r,min:e.base?.min??n.base?.min??n.min,max:e.base?.max??n.base?.max??n.max},contentReference:e.contentReference,definition:e.definition}:void 0}return e}}isInnerType(e){let r=this.peek();return!!(ot(e?.path,r?.path)&&e.type?.some(n=>["BackboneElement","Element"].includes(n.code)))}parseSliceStart(e){if(!this.slicingContext)throw new Error(`Invalid slice start before discriminator: ${e.sliceName} (${e.id})`);this.slicingContext.current={...this.parseElementDefinition(e),name:e.sliceName??"",definition:e.definition,elements:{}},this.slicingContext.field.slices.push(this.slicingContext.current)}parseElementDefinitionType(e){return(e.type??[]).map(r=>{let n;return(r.code==="BackboneElement"||r.code==="Element")&&(n=wr(e)),n||(n=ce(r,"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type")?.valueUrl),n||(n=r.code??""),{code:n,targetProfile:r.targetProfile,profile:r.profile}})}parseElementDefinition(e){let r=ko(e.max),n=e.base?.max?ko(e.base.max):r,i={type:"ElementDefinition",value:e};return{description:e.definition||"",path:e.path||e.base?.path||"",min:e.min??0,max:r,isArray:n>1,constraints:(e.constraint??[]).map(o=>({key:o.key??"",severity:o.severity??"error",expression:o.expression??"",description:o.human??""})),type:this.parseElementDefinitionType(e),fixed:Mo(_(i,"fixed[x]")),pattern:Mo(_(i,"pattern[x]")),binding:e.binding}}};function Dc(t,e){if(!t)return;let r=[];for(let n of e){r.push("_"+n);let i=$e[t.resourceType].elements[n+"[x]"];i&&r.push(...i.type.map(o=>n+U(o.code)))}for(let n of Object.getOwnPropertyNames(t))!e.includes(n)&&!r.includes(n)&&!Vc.includes(n)&&Object.defineProperty(t,n,{enumerable:!1,writable:!1,value:void 0});return t.meta={...t.meta,tag:t.meta?.tag?t.meta.tag.concat(Io):[Io]},t}var Io={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},Vc=["resourceType","id","meta"];function ko(t){return t==="*"?Number.POSITIVE_INFINITY:Number.parseInt(t,10)}function Fn(t,e=""){return _c(t.path,e)}function _c(t,e){return t?e&&t.startsWith(e)?t.substring(e.length+1):t:""}function ot(t,e){return!t||!e?!1:e.startsWith(t+".")||e===t}function Mo(t){return Array.isArray(t)&&t.length>0?t[0]:O(t)?void 0:t}function Lc(t){let e=t.slicing?.discriminator;return!!(t.type?.some(r=>r.code==="Extension")&&e?.length===1&&e[0].type==="value"&&e[0].path==="url")}function Nc(t){let e=t.description;return e?.startsWith(`Base StructureDefinition for ${t.name} Type: `)&&(e=e.substring(`Base StructureDefinition for ${t.name} Type: `.length)),e}function Dr(t,e,r){new Gn(t,e,r).crawl()}function Fc(t,e,r){return new Qn(t,e,r).crawl()}var Gn=class{constructor(e,r,n){c(this,"root");c(this,"visitor");c(this,"schema");c(this,"initialPath");c(this,"excludeMissingProperties");this.root=e,this.visitor=r,this.schema=n?.schema??xe(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}crawl(){this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}crawlObject(e,r,n){let i=D(e.value);if(i&&this.visitor.onEnterResource&&this.visitor.onEnterResource(n,e,r),this.visitor.onEnterObject&&this.visitor.onEnterObject(n,e,r),this.excludeMissingProperties)for(let o of Object.keys(e.value))this.crawlProperty(e,o,r,`${n}.${o}`);else for(let o of Object.keys(r.elements))this.crawlProperty(e,o,r,`${n}.${o}`);this.visitor.onExitObject&&this.visitor.onExitObject(n,e,r),i&&this.visitor.onExitResource&&this.visitor.onExitResource(n,e,r)}crawlProperty(e,r,n,i){let o=je(e,r,{withPath:!0});this.visitor.visitProperty&&this.visitor.visitProperty(e,r,i,o,n);for(let s of o)for(let a of te(s))this.crawlPropertyValue(a,i,n)}crawlPropertyValue(e,r,n){if(!Rt(e.type)){let i=n.innerTypes?.find(o=>o.name===e.type)??xe(e.type);this.crawlObject(e,i,r)}}},Qn=class{constructor(e,r,n){c(this,"root");c(this,"visitor");c(this,"schema");c(this,"initialPath");c(this,"excludeMissingProperties");this.root=e,this.visitor=r,this.schema=n?.schema??xe(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}async crawl(){return this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}async crawlObject(e,r,n){let i=D(e.value);if(i&&this.visitor.onEnterResource&&await this.visitor.onEnterResource(n,e,r),this.visitor.onEnterObject&&await this.visitor.onEnterObject(n,e,r),this.excludeMissingProperties&&e.value)for(let o of Object.keys(e.value))await this.crawlProperty(e,o,r,`${n}.${o}`);else for(let o of Object.keys(r.elements))await this.crawlProperty(e,o,r,`${n}.${o}`);this.visitor.onExitObject&&await this.visitor.onExitObject(n,e,r),i&&this.visitor.onExitResource&&await this.visitor.onExitResource(n,e,r)}async crawlProperty(e,r,n,i){let o=je(e,r,{withPath:!0});if(this.visitor.visitPropertyAsync)for(let s of o)await this.visitor.visitPropertyAsync(e,r,i,s,n);for(let s of o)for(let a of te(s))await this.crawlPropertyValue(a,i,n)}async crawlPropertyValue(e,r,n){if(!Rt(e.type)){let i=n.innerTypes?.find(o=>o.name===e.type)??xe(e.type);await this.crawlObject(e,i,r)}}};function je(t,e,r){if(t===void 0)return[void 0];if(e==="$this")return[t];let n=r?.withPath?Vr:_,[i,...o]=e.split("."),s=[n(t,i,r)];for(let a of o){let u=[];for(let l of s)if(Array.isArray(l))for(let d of l)u.push(n(d,a,r));else(r?.withPath&&l?.value!==void 0||!r?.withPath&&l!==void 0)&&u.push(n(l,a,r));s=u}return s}function Vr(t,e,r){let n=t.path;return Uc(_(t,e,r),n,e)}function Uc(t,e,r){let n=e?e+".":"";return t===void 0?{type:"undefined",value:void 0,path:`${n}${r}`}:Array.isArray(t)?t.map((i,o)=>({...i,path:`${n}${r}[${o}]`})):{...t,path:`${n}${r}`}}function He(t){if(t[0]===t[0].toUpperCase()){let e=t.indexOf(".");if(e===-1)return"";t=t.slice(e+1)}return`.${t}`.replaceAll(".","/").replaceAll(/\[(\d+)]/g,(e,r)=>`/${r}`)}var _r={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"},Bc=new ee(1e3);function Rt(t){return t==="undefined"||t in _r}var Ct={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:/.*/},qc={"ele-1":!0,"dom-3":!0,"org-1":!0,"sdf-19":!0};function Wc(t,e){if(!Et(t.resourceType))throw new m(T("Invalid resource type"));return Vo(E(t),e)}function Vo(t,e){return new zn(t,e).validate()}var zn=class{constructor(e,r){c(this,"issues");c(this,"root");c(this,"resourceStack");c(this,"schema");c(this,"base64BinaryMaxBytes");c(this,"collect");this.issues=[],this.root=e,this.resourceStack=[],D(e.value)&&this.resourceStack.push(e.value),r?.profile?this.schema=Or(r.profile):this.schema=xe(e.type),this.base64BinaryMaxBytes=r?.base64BinaryMaxBytes??1*1024*1024,this.collect=r?.collect}currentResource(){return this.resourceStack.at(-1)}validate(){Jn(this.root.value,this.schema.path,this.issues),this.constraintsCheck({...this.root,path:this.schema.path},this.schema),Dr(this.root,this,{schema:this.schema,initialPath:this.schema.path});for(let e of this.issues)if(e.severity==="error")throw new m({resourceType:"OperationOutcome",issue:this.issues});return this.issues}onExitObject(e,r,n){this.checkAdditionalProperties(r,n.elements,r.path)}onEnterResource(e,r){this.resourceStack.push(r.value)}onExitResource(){this.resourceStack.pop()}visitProperty(e,r,n,i,o){let s=o.elements[r];if(!s)throw new Error(`Missing element validation schema for ${r}`);for(let a of i){if(!this.checkPresence(a,s,n))return;let u;if(s.isArray){if(!Array.isArray(a)){this.issues.push(R(n,"Expected array of values for property"));return}u=a}else{if(Array.isArray(a)){this.issues.push(R(n,"Expected single value for property"));return}u=[a]}(u.length<s.min||u.length>s.max)&&this.issues.push(R(s.path,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${u.length}`)),Hc(a,s)||this.issues.push(R(n,"Value did not match expected pattern"));let l=s.slicing?Object.fromEntries(s.slicing.slices.map(d=>[d.name,0])):void 0;for(let d of u){this.constraintsCheck(d,s),this.referenceTypeCheck(d,s),this.checkPropertyValue(d),this.collectValue(d,s);let f=Gc(d,s.slicing);f&&l&&(l[f]+=1)}this.validateSlices(s.slicing?.slices,l,n)}}checkPresence(e,r,n){return!Array.isArray(e)&&e.value===void 0?(r.min>0&&this.issues.push(R(e.path,"Missing required property")),!1):O(e)?(this.issues.push(R(n,"Invalid empty value")),!1):!0}checkPropertyValue(e){Rt(e.type)?this.validatePrimitiveType(e):O(e.value)&&this.issues.push(R(e.path,"Invalid empty non-primitive value"))}validateSlices(e,r,n){if(!(!e||!r))for(let i of e){let o=r[i.name];(o<i.min||o>i.max)&&this.issues.push(R(n,`Incorrect number of values provided for slice '${i.name}': expected ${i.min}..${Number.isFinite(i.max)?i.max:"*"}, but found ${o}`))}}checkAdditionalProperties(e,r,n){let i=e.value;if(!i)return;let o={};for(let s of Object.keys(i)){if(s==="resourceType")continue;let a=jc(e,s,r);if(a){let u,l;a.startsWith("_")?(u=a.slice(1),l=s.slice(1)):(u="_"+a,l="_"+s),u in o&&o[u]!==l&&this.issues.push(ke("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(ke("warning","structure",`Conflicting choice of type properties: "${s}", "${o[a]}"`,s)),o[a]=s;continue}!(s in r)&&!(s.startsWith("_")&&s.slice(1)in r)&&i[s]!==void 0&&this.issues.push(R(`${n}.${s}`,`Invalid additional property "${s}"`))}}constraintsCheck(e,r){let n=r.constraints;for(let i of n??v)if(i.severity==="error"&&!(i.key in qc)&&!this.isExpressionTrue(i,e)){this.issues.push(_n(e.path,i));return}}referenceTypeCheck(e,r){if(e.type!=="Reference")return;let n=e.value;if(!J(n)||n.reference.startsWith("#"))return;let i=n.reference.includes("?")?n.reference.split("?")[0]:n.reference.split("/")[0];if(!i)return;let o=r.type.find(f=>f.code==="Reference")?.targetProfile;if(!o)return;let s=St+"/fhir/StructureDefinition/",a=s+"Resource",u=s+i,l="https://medplum.com/fhir/StructureDefinition/",d=l+i;for(let f of o)if(f===a||f===u||f===d||!f.startsWith(s)&&!f.startsWith(l))return;this.issues.push(ke("warning","structure",`Invalid reference: got "${i}", expected "${o.join('", "')}"`,e.path))}collectValue(e,r){r.binding?.valueSet&&r.binding.strength==="required"&&zc(e.type)&&this.appendToken(r.binding.valueSet,e)}appendToken(e,r){if(!this.collect?.tokens)return;let n=this.collect.tokens[e];if(!n){let i=Object.keys(this.collect.tokens);for(let o of i)o.startsWith(e+"|")&&(n=this.collect.tokens[o])}for(let i of n??v)if(i.path===r.path)return;this.collect.tokens[e]=re(n,r)}isExpressionTrue(e,r){let n={"%context":r,"%ucum":E(Cn)},i=this.currentResource();i&&(n["%resource"]=E(i)),D(this.root.value)&&(n["%rootResource"]=this.root);try{let o=k(e.expression,[r],n,Bc);return o.length===1&&o[0].value===!0}catch(o){return this.issues.push(Ln(r.path,"Error evaluating invariant expression",o,{fhirpath:e.expression})),!1}}validatePrimitiveType(e){let[r,n]=Qc(e),i=e.path;if(r){let{type:o,value:s}=r;if(!(o in _r)){this.issues.push(R(i,`Invalid JSON type: ${o} is not a valid FHIR type`));return}let a=_r[o];if(typeof s!==a){s!==null&&this.issues.push(R(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&&Dr(n,this,{schema:xe("Element"),initialPath:i})}validateBase64Binary(e,r){if(!Jc(e)){this.issues.push(R(r,"Invalid base64Binary format"));return}let n=0;e.endsWith("==")?n=2:e.endsWith("=")&&(n=1),Math.max(0,Math.floor(e.length*3/4)-n)>this.base64BinaryMaxBytes&&this.issues.push(R(r,`base64Binary exceeds ${this.base64BinaryMaxBytes} bytes`))}validateString(e,r,n){if(!e.trim()){this.issues.push(R(n,"String must contain non-whitespace content"));return}if(e.length>1024*1024){this.issues.push(R(n,"String cannot be larger than 1 MB"));return}let i=Ct[r];i&&!i.exec(e)&&this.issues.push(R(n,"Invalid "+r+" format"))}validateNumber(e,r,n){Number.isNaN(e)||!Number.isFinite(e)?this.issues.push(R(n,"Invalid numeric value")):$c(r)&&!Number.isInteger(e)?this.issues.push(R(n,"Expected number to be an integer")):r===p.positiveInt&&e<=0?this.issues.push(R(n,"Expected number to be positive")):r===p.unsignedInt&&e<0&&this.issues.push(R(n,"Expected number to be non-negative"))}};function $c(t){return t===p.integer||t===p.positiveInt||t===p.unsignedInt}function jc(t,e,r){let n="";e.startsWith("_")&&(e=e.slice(1),n="_");let i=e.split(/(?=[A-Z])/g),o="";for(let s of i){o+=s;let a=o+"[x]";if(r[a])return _(t,o)?n+a:void 0}}function Jn(t,e,r){for(let[n,i]of Object.entries(t)){let o=`${e}.${n}`,s=n.startsWith("_")?n.slice(1):`_${n}`;if(i===null)r.push(R(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?r.push(R(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!t[s]?.[a]?r.push(R(`${o}[${a}]`,"Invalid null value")):i[a]&&Jn(i[a],`${o}[${a}]`,r);else typeof i=="object"&&Jn(i,o,r)}}function Hc(t,e){let r=Array.isArray(t)?t.map(n=>({type:n.type,value:n.value})):{type:t.type,value:t.value};return!(e.pattern&&!st(r,e.pattern)||e.fixed&&!ve(r,e.fixed))}function Lr(t,e,r,n){if(Array.isArray(t))return!1;let i;e.path==="$this"?i=r:i=(n??r.elements)[e.path];let o=r.type;switch(e.type){case"value":case"pattern":if(!t||!i)return!1;if(i.pattern)return st(t,i.pattern);if(i.fixed)return ve(t,i.fixed);if(i.binding?.strength==="required"&&i.binding.valueSet)return!0;break;case"type":return!t||!o?.length?!1:o.some(s=>s.code===t.type)}return!1}function Gc(t,e){for(let r of e?.slices??v)if(e?.discriminator?.every(n=>te(je(t,n.path))?.some(i=>Lr(i,n,r))))return r.name}function Qc(t){if(typeof t.value!="object"||!t.value)return[t,void 0];let e=t.value.valueOf();if(e===t.value)return[void 0,{type:"Element",value:t.value}];let r=new Set(Object.keys(e)),n=Object.entries(t.value).filter(([o,s])=>!r.has(o)),i=n.length>0?Object.fromEntries(n):void 0;return[{type:t.type,value:e},{type:"Element",value:i}]}function zc(t){switch(t){case"CodeableConcept":case"Coding":case"code":case"Quantity":case"string":case"uri":return!0;default:return!1}}function Jc(t){if(t.length===0)return!1;let e=0;t.endsWith("==")?e=2:t.endsWith("=")&&(e=1);let r=t.length-e;if(r<0||(e+r)%4!==0)return!1;let n=e>0?t.slice(0,-e):t;return/^[A-Za-z\d+/]+$/.test(n)}function y(t){return[{type:p.boolean,value:t}]}function E(t){return t==null?{type:"undefined",value:void 0}:Number.isSafeInteger(t)?{type:p.integer,value:t}:typeof t=="number"?{type:p.decimal,value:t}:typeof t=="boolean"?{type:p.boolean,value:t}:typeof t=="string"?{type:p.string,value:t}:L(t)?{type:p.Quantity,value:t}:D(t)?{type:t.resourceType,value:t}:Br(t)?{type:p.CodeableConcept,value:t}:Ur(t)?{type:p.Coding,value:t}:{type:p.BackboneElement,value:t}}function j(t){return t.length===0?!1:!!t[0].value}function N(t,e){if(t.length!==0){if(t.length===1&&(!e||t[0].type===e))return t[0];{let r=e?` of type ${e}`:"";throw new Error(`Expected singleton${r}, but found ${JSON.stringify(t)}`)}}}function _(t,e,r){if(!t.value)return;let n=wt(t.type,e,r?.profileUrl);return n?Fo(t,e,n):Uo(t,e)}function Fo(t,e,r){let n=t.value,i=r.type;if(!i||i.length===0)return;let o,s="undefined",a,u=r.path.lastIndexOf("."),l=r.path.substring(u+1),d=l,f=!1;l.endsWith("[x]")&&(d=l.substring(0,l.length-3),f=!0);for(let h of i){let b=d;if(f&&(b+=U(h.code)),o=n[b],a=n["_"+b],o!==void 0||a!==void 0){s=h.code;break}}if(a)if(Array.isArray(o)){o=o.slice();for(let h=0;h<Math.max(o.length,a.length);h++)o[h]=Kn(o[h],a[h])}else if(!o&&Array.isArray(a)){o=a.slice();for(let h=0;h<a.length;h++)o[h]=Kn(void 0,a[h])}else o=Kn(o,a);if(!O(o))return(s==="Element"||s==="BackboneElement")&&(s=r.type[0].code),Array.isArray(o)?o.map(h=>_o(h,s)):_o(o,s)}function _o(t,e){return e==="Resource"&&D(t)&&(e=t.resourceType),{type:e,value:t}}function Uo(t,e){let r=t.value;if(!r||typeof r!="object")return;let n;if(e in r){let i=r[e];Array.isArray(i)?n=i.map(E):n=E(i)}else{let i=e.endsWith("[x]")?e.substring(0,e.length-3):e;for(let o of Object.values(p)){let s=i+U(o);if(s in r){let a=r[s];Array.isArray(a)?n=a.map(u=>({type:o,value:u})):n={type:o,value:a};break}}}if(Array.isArray(n)){if(n.length===0||O(n[0]))return}else if(O(n))return;return n}function Pt(t){let e=[];for(let r of t){let n=!1;for(let i of e)if(j(at(r,i))){n=!0;break}n||e.push(r)}return e}function Yn(t){return y(!j(t))}function Xn(t,e){return t.length===0||e.length===0?[]:t.length!==e.length?y(!1):y(t.every((r,n)=>j(at(r,e[n]))))}function Zn(t,e){return t.length===0||e.length===0?[]:t.length!==e.length?y(!0):y(t.some((r,n)=>!j(at(r,e[n]))))}function at(t,e){let r=t.value?.valueOf(),n=e.value?.valueOf();return typeof r=="number"&&typeof n=="number"?y(Math.abs(r-n)<1e-8):L(r)&&L(n)?y(ri(r,n)):y(typeof r=="object"&&typeof n=="object"?ni(t,e):r===n)}function Fr(t,e){return t.length===0&&e.length===0?y(!0):t.length!==e.length?y(!1):(t.sort(Lo),e.sort(Lo),y(t.every((r,n)=>j(Bo(r,e[n])))))}function Bo(t,e){let{type:r,value:n}=t,{type:i,value:o}=e,s=n?.valueOf(),a=o?.valueOf();return typeof s=="number"&&typeof a=="number"?y(Math.abs(s-a)<.01):L(s)&&L(a)?y(ri(s,a)):y(r==="Coding"&&i==="Coding"?typeof s!="object"||typeof a!="object"?!1:s.code===a.code&&s.system===a.system:typeof s=="object"&&typeof a=="object"?ni({...s,id:void 0},{...a,id:void 0}):typeof s=="string"&&typeof a=="string"?s.toLowerCase()===a.toLowerCase():s===a)}function Lo(t,e){let r=t.value?.valueOf(),n=e.value?.valueOf();return typeof r=="number"&&typeof n=="number"?r-n:typeof r=="string"&&typeof n=="string"?r.localeCompare(n):0}function Qe(t,e){let{value:r}=t;if(r==null)return!1;let n=e;switch(n.startsWith("System.")&&(n=n.substring(7)),n.startsWith("FHIR.")&&(n=n.substring(5)),n){case"Boolean":return typeof r=="boolean";case"Decimal":case"Integer":return typeof r=="number";case"Date":return ei(r);case"DateTime":return Ge(r);case"Time":return typeof r=="string"&&!!/^T\d/.exec(r);case"Period":return ti(r);case"Quantity":return L(r);default:return t.type===n||typeof r=="object"&&r?.resourceType===n}}function ei(t){return typeof t=="string"&&!!Ct.date.exec(t)}function Ge(t){return typeof t=="string"&&!!Ct.dateTime.exec(t)}function ti(t){return!!(t&&typeof t=="object"&&("start"in t&&Ge(t.start)||"end"in t&&Ge(t.end)))}function At(t){if(ei(t)||Ge(t))return{start:Nr(t,"0000-01-01T00:00:00.000"),end:Nr(t,"xxxx-12-31T23:59:59.999")};if(ti(t))return{start:t.start?Nr(t.start,"0000-01-01T00:00:00.000"):void 0,end:t.end?Nr(t.end,"xxxx-12-31T23:59:59.999"):void 0}}function Nr(t,e){let r="Z",n=Math.max(t.indexOf("+",10),t.indexOf("-",10));n>-1?(r=t.substring(n),t=t.substring(0,n)):t.endsWith("Z")&&(t=t.substring(0,t.length-1));let i=t+e.substring(t.length)+r;return new Date(i).toISOString()}function L(t){return!!(t&&typeof t=="object"&&"value"in t&&typeof t.value=="number")}function ri(t,e){return Math.abs(t.value-e.value)<.01&&(t.unit===e.unit||t.code===e.code||t.unit===e.code||t.code===e.unit)}function ni(t,e){let r=Object.keys(t),n=Object.keys(e);if(r.length!==n.length)return!1;for(let i of r){let o=t[i],s=e[i];if(No(o)&&No(s)){if(!ni(o,s))return!1}else if(o!==s)return!1}return!0}function No(t){return t!==null&&typeof t=="object"}function Kn(t,e){if(e){if(typeof e!="object")throw new Error("Primitive extension must be an object");return Kc(t??{},e)}return t}function Kc(t,e){return delete e.__proto__,delete e.constructor,Object.assign(t,e)}function ct(t,e){return D(t,e)&&"id"in t&&typeof t.id=="string"}function ne(t){let e=I(t)??"undefined/undefined",r=$o(t);return r===e?{reference:e}:{reference:e,display:r}}function I(t){if(J(t))return t.reference;if(ct(t))return`${t.resourceType}/${t.id}`}function K(t){if(t)return J(t)?t.reference.split("/")[1]:t.id}function Yc(t){if(t?.reference===void 0)throw new m(T("Reference missing reference property."));let[e,r]=t.reference.split("/");if(e===""||r===""||r===void 0)throw new m(T("Unable to parse reference string."));return[e,r]}function Wr(t){if(t)if(t.accounts&&t.account){let e=t.accounts;return e.some(r=>r.reference===t.account?.reference)?e:[t.account,...e]}else return te(t.accounts??t.account)}function Wo(t){return t.resourceType==="Patient"||t.resourceType==="Practitioner"||t.resourceType==="RelatedPerson"}function $o(t){if(Wo(t)){let e=Xc(t);if(e)return e}if(t.resourceType==="Appointment"&&t.serviceType?.[0])return Te(t.serviceType[0]);if(t.resourceType==="Device"){let e=Zc(t);if(e)return e}if(t.resourceType==="DocumentReference"){if(t.description)return t.description;if(t.type)return Te(t.type)}if(t.resourceType==="MedicationRequest"&&t.medicationCodeableConcept)return Te(t.medicationCodeableConcept);if(t.resourceType==="MedicationStatement"&&t.medicationCodeableConcept)return Te(t.medicationCodeableConcept);if(t.resourceType==="Slot"&&(t.start||t.end))return`${ze(t.start)} - ${ze(t.end)}`;if(t.resourceType==="Subscription"&&t.criteria)return t.criteria;if(t.resourceType==="User"&&t.email)return t.email;if("name"in t&&t.name&&typeof t.name=="string")return t.name;if("code"in t&&t.code){let e=t.code;if(Array.isArray(e)&&(e=e[0]),Br(e))return Te(e);if(Qo(e))return e.text}return I(t)??""}function Xc(t){let e=t.name;if(e&&e.length>0)return ut(e[0])}function Zc(t){let e=t.deviceName;if(e&&e.length>0)return e[0].name}function eu(t){if(!("photo"in t))return;let e=t.photo;if(e)if(Array.isArray(e))for(let r of e){let n=qo(r);if(n)return n}else return qo(e)}function qo(t){if(t.url&&t.contentType?.startsWith("image/"))return t.url}function tu(t){return t?new Date(t):void 0}function Ot(t,e){let r=new Date(t);r.setUTCHours(0,0,0,0);let n=e?new Date(e):new Date;n.setUTCHours(0,0,0,0);let i=r.getUTCFullYear(),o=r.getUTCMonth(),s=r.getUTCDate(),a=n.getUTCFullYear(),u=n.getUTCMonth(),l=n.getUTCDate(),d=a-i;(u<o||u===o&&l<s)&&d--;let f=a*12+u-(i*12+o);l<s&&f--;let h=Math.floor((n.getTime()-r.getTime())/(1e3*60*60*24));return{years:d,months:f,days:h}}function ru(t,e){let{years:r,months:n,days:i}=Ot(t,e);return r>=2?r.toString().padStart(3,"0")+"Y":n>=1?n.toString().padStart(3,"0")+"M":i.toString().padStart(3,"0")+"D"}function nu(t){let e={};return jo(t.item,e),e}function jo(t,e){for(let r of t??v)r.linkId&&r.answer&&r.answer.length>0&&(e[r.linkId]=r.answer[0]),jo(r.item,e)}function iu(t){let e={};return Ho(t.item,e),e}function Ho(t,e){for(let r of t??v)r.linkId&&r.answer&&r.answer.length>0&&(e[r.linkId]?e[r.linkId]=[...e[r.linkId],...r.answer]:e[r.linkId]=r.answer),Ho(r.item,e)}function $r(t,e){let r=t.identifier;if(!r)return;let n=Array.isArray(r)?r:[r];for(let i of n)if(i.system===e)return i.value}function ou(t,e,r,n){let i={system:e,value:r};n?.use&&(i.use=n.use);let o=t.identifier;if(!o){t.identifier=[i];return}for(let s of o)if(s.system===e){Object.assign(s,i);return}o.push(i)}function De(t,...e){let r=ce(t,...e);if(!r)return;let n=_({type:"Extension",value:r},"value[x]");if(n)return Array.isArray(n)?n[0].value:n.value}function ce(t,...e){let r=t;for(let n=0;n<e.length&&r;n++)r=r?.extension?.find(i=>i.url===e[n]);return r}function It(t,e){let[r,...n]=te(e);if(!r)return[];let i=t?.extension?.filter(o=>o.url===r)??[];return n.length>0?i.flatMap(o=>It(o,n)):i}function kt(t,e){let r=ii(t);return JSON.stringify(r,null,e?2:void 0)??""}function ii(t){if(!(t==null||t===""))return typeof t=="object"?Array.isArray(t)?su(t):au(t):t}function su(t){let e=t.length;if(e===0)return;let r,n=0;for(let i=0;i<e;i++){let o=t[i],s=ii(o);s!==o&&!r&&(r=Array.from(t)),s===void 0?r&&(r[i]=null):(r&&(r[i]=s),n++)}if(n!==0)return r??t}function au(t){let e,r=0;for(let n in t){let i=t[n],o=ii(i);o!==i&&!e&&(e={...t}),o===void 0?e&&delete e[n]:(e&&(e[n]=o),r++)}if(r!==0)return e??t}function O(t){if(t==null)return!0;let e=typeof t;return e==="string"||e==="object"?!le(t):!1}function le(t){if(t==null)return!1;let e=typeof t;return e==="string"&&t!==""||e==="object"&&("length"in t&&t.length>0||Object.keys(t).length>0)}function cu(t){if(!t)return;let e=t.length-1;for(;e>=0&&O(t[e]);)e--;return e>=0?t.slice(0,e+1):void 0}function ve(t,e,r){return t===e||O(t)&&O(e)?!0:O(t)||O(e)?!1:Array.isArray(t)&&Array.isArray(e)?uu(t,e):Array.isArray(t)||Array.isArray(e)?!1:C(t)&&C(e)?lu(t,e,r):(C(t)||C(e),!1)}function uu(t,e){if(t.length!==e.length)return!1;for(let r=0;r<t.length;r++)if(!ve(t[r],e[r]))return!1;return!0}function lu(t,e,r){let n=new Set;for(let i of Object.keys(t))n.add(i);for(let i of Object.keys(e))n.add(i);r==="meta"&&(n.delete("versionId"),n.delete("lastUpdated"),n.delete("author"));for(let i of n){let o=t[i],s=e[i];if(!ve(o,s,i))return!1}return!0}function st(t,e){return O(t)?!0:O(e)?!1:Array.isArray(t)&&Array.isArray(e)?du(t,e):Array.isArray(t)||Array.isArray(e)?!1:C(t)&&C(e)?pu(t,e):C(t)||C(e)?!1:t===e}function du(t,e){return e.every(r=>t.some(n=>st(n,r)))}function pu(t,e){return Object.entries(e).every(([r,n])=>r in t&&st(t[r],n))}function de(t){return t===void 0?t:JSON.parse(JSON.stringify(t))}function fu(t){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(t)}function C(t){return t!==null&&typeof t=="object"}function mu(t){return t.every(pe)}function pe(t){return typeof t=="string"}function Ur(t){return C(t)&&"code"in t&&typeof t.code=="string"}function Br(t){return C(t)&&"coding"in t&&Array.isArray(t.coding)&&t.coding.every(Ur)}function hu(t,e){for(let r of t??v)for(let n of r.coding??v)if(n.system===e)return n.code}function Go(t,e){let[r,n]=Je(e,"|",2);return n===void 0?t.code===e:r===""?t.system===void 0&&t.code===n:n===""?t.system===r:t.system===r&&t.code===n}function gu(t,e){return(t.coding??v).some(r=>Go(r,e))}function Qo(t){return C(t)&&"text"in t&&typeof t.text=="string"}var zo=[];for(let t=0;t<256;t++)zo.push(t.toString(16).padStart(2,"0"));function oi(t){let e=ai(t),r=new Uint8Array(e),n=new Array(r.length);for(let i=0;i<r.length;i++)n[i]=zo[r[i]];return n.join("")}function si(t){let e=ai(t),r=new Uint8Array(e),n=new Array(r.length);for(let i=0;i<r.length;i++)n[i]=String.fromCodePoint(r[i]);return window.btoa(n.join(""))}function ai(t){return ArrayBuffer.isView(t)?t.buffer:t}function U(t){return t?t.charAt(0).toUpperCase()+t.substring(1):""}function yu(t){return t===t.toLowerCase()&&t!==t.toUpperCase()}function jr(t){return t.length>0&&t.startsWith(t[0].toUpperCase())}function Se(t,e){let r=t+".";if(e.startsWith(r))return e.slice(r.length)}function qr(t,e){return t.coding?.find(r=>r.system===e)?.code}function xu(t,e,r){t.coding??=[];let n=t.coding.find(i=>i.system===e);n?n.code=r:t.coding.push({system:e,code:r})}function vu(t,e,r,n){return t.qualifiedInterval?.find(i=>Ko(i,e)&&Eu(i,r,t.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function Tu(t,e,r){return Jo(t,e,r)[0]}function Jo(t,e,r){return t.qualifiedInterval?.filter(n=>Ko(n,e)&&(!r||r.includes(n.condition)))??[]}function Ko(t,e){return Su(t,e)&&bu(t,e)}function Su(t,e){return!t.gender||t.gender===e.gender}function bu(t,e){return!t.age||ci(Ot(e.birthDate).years,t.age)}function Eu(t,e,r){return!!t.range&&ci(e,t.range,r)}function ci(t,e,r){return(e.low?.value===void 0||Xo(t,e.low.value,r))&&(e.high?.value===void 0||Yo(t,e.high.value,r))}function Ru(t,e){return Number.parseFloat(t.toFixed(e))}function Cu(t,e,r){return ue(t,r)===ue(e,r)}function Pu(t,e,r){return ue(t,r)<ue(e,r)}function Au(t,e,r){return ue(t,r)>ue(e,r)}function Yo(t,e,r){return ue(t,r)<=ue(e,r)}function Xo(t,e,r){return ue(t,r)>=ue(e,r)}function ue(t,e){return e===void 0?t:Math.round(t*Math.pow(10,e))}function wu(t,e,r){return t.find(n=>typeof e=="string"?qr(n.code||{},r)===e:qr(n.code||{},r)===qr(e,r))}function Ou(t){return Array.isArray(t)?t[0]:t}var Hr=(t,e)=>new Promise((r,n)=>{e?.signal?.throwIfAborted();let i=setTimeout(r,t);e?.signal?.addEventListener("abort",()=>{clearTimeout(i),n(e.signal?.reason)},{once:!0})});function Je(t,e,r){let n=[];for(let i=0;i<r-1;i++){let o=t.indexOf(e);if(o<0)break;n.push(t.slice(0,o)),t=t.slice(o+e.length)}return n.push(t),n}function ui(t){let e,r=!1;return function(){return r||(e=t(),r=!0),e}}function re(t,e){return t?(t.push(e),t):[e]}function Mt(t){return t.sort((e,r)=>e.localeCompare(r))}function Gr(t){return t.endsWith("/")?t:t+"/"}function Zo(t){return t.startsWith("/")?t.slice(1):t}function W(t,e){return new URL(Zo(e),Gr(t.toString())).toString()}function li(t,e){return W(t,e).toString().replace("http://","ws://").replace("https://","wss://")}function di(t){return typeof t=="object"&&!Array.isArray(t)&&!(t instanceof URLSearchParams)&&(t=Object.fromEntries(Object.entries(t).filter(e=>e[1]!==void 0))),new URLSearchParams(t).toString()}var es=/^(([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 Iu(t){return es.test(t)}function ku(t,e){return t?.meta?.profile?.includes(e)||(t.meta=t.meta??{},t.meta.profile=t.meta.profile??[],t.meta.profile.push(e)),t}function Mu(t,e){return new Map(t.entry?.filter(n=>!!n.resource).map(n=>[$r(n.resource,e),n.resource]).filter(([n])=>n!==void 0))}function Du(t,e){if(t?.meta?.profile?.includes(e)){let r=t.meta.profile.indexOf(e);t.meta.profile.splice(r,1)}return t}function Vu(t,e){let r=[];if(!t)return r;for(let n=0;n<t.length;n++){let i=e(t[n],n);Array.isArray(i)?r.push(...i):i!==void 0&&r.push(i)}return r}function _u(t){return t.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("\u201C","“").replaceAll("\u201D","”").replaceAll("\u2018","‘").replaceAll("\u2019","’").replaceAll("\u2026","…")}function Dt(t){return t!=null}function Lu(t){throw new Error(`Unexpected value: ${JSON.stringify(t)}`)}var v=Object.freeze([]),Nu=()=>{};function pi(t){if(!t)return"";switch(t.type){case"Address":return rs(t.value);case"CodeableConcept":return Te(t.value);case"Coding":return fi(t.value);case"ContactPoint":return t.value.value;case"HumanName":return ut(t.value);case"Quantity":return be(t.value);case"Reference":return ts(t.value);default:return t.value?.toString()??""}}function ts(t){return t?t.display??t.reference??kt(t):""}function rs(t,e){if(!t)return"";let r=[];if(t.line&&r.push(...t.line),t.city||t.state||t.postalCode){let n=[];t.city&&n.push(t.city),t.state&&n.push(t.state),t.postalCode&&n.push(t.postalCode),r.push(n.join(", "))}return t.use&&(e?.all||e?.use)&&r.push("["+t.use+"]"),r.join(e?.lineSeparator??", ").trim()}function ut(t,e){if(!t)return"";let r=[];if(t.prefix&&e?.prefix!==!1&&r.push(...t.prefix),t.given&&r.push(...t.given),t.family&&r.push(t.family),t.suffix&&e?.suffix!==!1&&r.push(...t.suffix),t.use&&(e?.all||e?.use)&&r.push("["+t.use+"]"),r.length===0){let n=Ke(t.text);if(n)return n}return r.join(" ").trim()}function Fu(t){let e=[];return t.given&&e.push(...t.given),e.join(" ").trim()}function Uu(t){return Ke(t.family)??""}function Vt(t){return t instanceof Date&&!Number.isNaN(t.getTime())}function Bu(t,e,r){if(!t)return"";let n=new Date(t);return Vt(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...r})):""}function qu(t,e,r){if(!t)return"";let n=new Date("2000-01-01T"+t+"Z");return Vt(n)?n.toLocaleTimeString(e,r):""}function ns(t,e,r){if(!t)return"";let[n=0,i=0,o=0]=t.split(":").map(Number),s=new Date(Date.UTC(1970,0,1,n,i,o));return Vt(s)?new Intl.DateTimeFormat(e,{hour:"numeric",minute:"2-digit",second:o===0?void 0:"numeric",...r,timeZone:"UTC"}).format(s):""}function ze(t,e,r){if(!t)return"";let n=new Date(t);return Vt(n)?n.toLocaleString(e,r):""}function Wu(t,e,r){return!t||!t.start&&!t.end?"":ze(t.start,e,r)+" - "+ze(t.end,e,r)}var $u={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},ju={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},Hu={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function Gu(t){if(!t)return"";let e=[];return Qu(e,t.repeat),t.event&&e.push(t.event.map(r=>ze(r)).join(", ")),U(e.join(" ").trim())}function Qu(t,e){if(!e?.periodUnit)return;let r=e.frequency??1,n=e.period??1,i=e.periodUnit;r===1&&n===1?t.push($u[i]):(r===1?t.push("once"):t.push(r+" times"),n===1?t.push("per "+ju[i]):t.push("per "+n+" "+Hu[i])),e.dayOfWeek&&t.push("on "+e.dayOfWeek.map(U).join(", ")),e.timeOfDay&&t.push("at "+e.timeOfDay.map(o=>ns(o)).join(", "))}function zu(t,e,r=!1){if(r&&e===void 0)throw new Error("Precision must be specified for exclusive ranges");let n=t?.low&&{...t.low,comparator:void 0},i=t?.high&&{...t.high,comparator:void 0};return n?.value===void 0&&i?.value===void 0?"":n?.value!==void 0&&i?.value===void 0?r&&e!==void 0?(n.value=Yu(n.value,e),`> ${be(n,e)}`):`>= ${be(n,e)}`:n?.value===void 0&&i?.value!==void 0?r&&e!==void 0?(i.value=Ku(i.value,e),`< ${be(i,e)}`):`<= ${be(i,e)}`:(n?.unit===i?.unit&&delete n?.unit,`${be(n,e)} - ${be(i,e)}`)}function be(t,e){if(!t)return"";let r=[];return t.comparator&&(r.push(t.comparator),r.push(" ")),t.value!==void 0&&(e!==void 0?r.push(t.value.toFixed(e)):r.push(t.value)),t.unit&&(t.unit!=="%"&&r.at(-1)!==" "&&r.push(" "),r.push(t.unit)),r.join("").trim()}function Ju(t){return t?.value===void 0?"":t.value.toLocaleString(void 0,{style:"currency",currency:t.currency??"USD",currencyDisplay:"narrowSymbol"})}function Te(t){if(!t)return"";let e=Ke(t.text);return e||(t.coding?t.coding.map(r=>fi(r)).join(", "):"")}function fi(t,e){let r=Ke(t?.display);if(r){let n=e?Ke(t?.code):void 0;return`${r}${n?" ("+n+")":""}`}return Ke(t?.code)??""}function is(t){if(!t)return"";let e=[];if(t.valueQuantity)e.push(be(t.valueQuantity));else if(t.valueCodeableConcept)e.push(Te(t.valueCodeableConcept));else{let r=Ke(t.valueString);r&&e.push(r)}return"component"in t&&e.push(t.component.map(r=>is(r)).join(" / ")),e.join(" / ").trim()}function Ke(t){return typeof t=="string"?t:void 0}function Ku(t,e,r=1){return(os(t,e)+r)*Math.pow(10,-e)}function Yu(t,e,r=1){return(os(t,e)-r)*Math.pow(10,-e)}function os(t,e){return e===void 0?t:Math.round(t*Math.pow(10,e))}var p={Address:"Address",Age:"Age",Annotation:"Annotation",Attachment:"Attachment",BackboneElement:"BackboneElement",CodeableConcept:"CodeableConcept",Coding:"Coding",ContactDetail:"ContactDetail",ContactPoint:"ContactPoint",Contributor:"Contributor",Count:"Count",DataRequirement:"DataRequirement",Distance:"Distance",Dosage:"Dosage",Duration:"Duration",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 Xu(t){for(let e of t.entry??v){let r=e.resource;r.resourceType==="SearchParameter"&&Qr(r)}}function Hn(t){let e=Array.isArray(t)?t:t.entry?.map(r=>r.resource)??[];for(let r of e)r?.resourceType==="StructureDefinition"&&r.kind==="resource"&&as(r.type)}function as(t){let e=H.types[t];e||(e={searchParamsDetails:{}},H.types[t]=e);let r;return!e.searchParams&&t!=="Binary"&&(e.searchParams={_id:{base:[t],code:"_id",type:"token",expression:t+".id"},_lastUpdated:{base:[t],code:"_lastUpdated",type:"date",expression:t+".meta.lastUpdated"},_compartment:{base:[t],code:"_compartment",type:"reference",expression:t+".meta.compartment",get target(){return r??=us(),r}},_profile:{base:[t],code:"_profile",type:"uri",expression:t+".meta.profile"},_security:{base:[t],code:"_security",type:"token",expression:t+".meta.security"},_source:{base:[t],code:"_source",type:"uri",expression:t+".meta.source"},_tag:{base:[t],code:"_tag",type:"token",expression:t+".meta.tag"},_project:{base:[t],code:"_project",type:"token",expression:t+".meta.project"}}),e}function Qr(t){for(let e of t.base??v){let r=as(e);r.searchParams||(r.searchParams={}),r.searchParams[t.code]=t}}function wr(t){let e=t.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?cs((t.base?.path??t.path)?.split(".")):e}function cs(t){return t.length===1?t[0]:t.map(U).join("")}function Mr(t){return t.kind==="resource"&&t.name!=="Resource"&&t.name!=="DomainResource"}function us(){return Object.values(qn()).filter(Mr).map(t=>t.name)}function Zu(t){return H.types[t]?.searchParams}function el(t,e){return H.types[t]?.searchParams?.[e]}function tl(t){let e=t.replaceAll("[x]","").split(".").pop();return ls(e)}function ls(t){let e;return t.length<100?e=t.match(/[A-Z]+(?![a-z])|[A-Z]?[a-z]+|\d+/g)??[]:e=t.split(/(?=[A-Z])/),e.map(nl).join(" ").replace("_"," ").replaceAll(/\s+/g," ")}var rl=new Set(["CDS","ID","IP","JWKS","PKCE","OMB","OID","SOP","UDI","UID","URI","URL"]);function nl(t){let e=t.toUpperCase();return t===e?t:rl.has(e)?e:e.charAt(0)+t.slice(1)}function wt(t,e,r){let n=Me(t,r);if(n)return mi(n.elements,e)}function mi(t,e){let r=t[e]??t[e+"[x]"];if(r)return r;for(let n=0;n<e.length;n++){let i=e[n];if(i>="A"&&i<="Z"){let o=e.slice(0,n)+"[x]",s=t[o];if(s)return s}}}function hi(t,e,r){let n=e.split(/[.[\]]/g),i=Me(t,r);if(!i)return;let o=i,s;for(let a of n){let u;if(a.match(/^[a-z]/)){let l=mi(o.elements,a);if(!l)return;if(l.type.length>1)throw new Error("Multiple matching types in path "+e);u=Me(l.type[0].code),s=l}u&&(o=u)}return s}function il(t){return!!(t&&typeof t=="object"&&"type"in t&&"value"in t)}function D(t,e){return!(!t||typeof t!="object"||!("resourceType"in t)||e&&t.resourceType!==e)}function J(t,e){return t&&typeof t=="object"&&"reference"in t&&typeof t.reference=="string"?e?t.reference.match(new RegExp(`^${e}(/|\\?)`))!==null:!0:!1}var H={types:{}};function gi(t){switch(t.type){case p.uuid:case p.uri:case p.url:case p.string:case p.oid:case p.markdown:case p.id:case p.code:case p.canonical:case p.base64Binary:case p.SystemString:case p.date:case p.dateTime:case p.instant:return t.value;case p.Identifier:return`${t.value.system??""}|${t.value.value}`;case p.Coding:return ss(t.value);case p.CodeableConcept:return t.value.coding?.map(ss).join(",")??t.value.text;case p.HumanName:return t.value.text?t.value.text:ut(t.value);case p.unsignedInt:case p.positiveInt:case p.integer:case p.decimal:return t.value.toString();case p.boolean:return t.value?"true":"false";case p.Extension:return t.value.url;case p.ContactPoint:return t.value.value;case p.Quantity:case p.Age:case p.Count:case p.Duration:return`${t.value.value}|${t.value.system??""}|${t.value.code??t.value.unit??""}`;case p.Reference:return t.value.reference;default:return ct(t.value)?I(t.value):JSON.stringify(t)}}function ss(t){return t?`${t.system??""}|${t.code}`:""}function lt(t){if(t.startsWith("T"))return t+"T00:00:00.000Z".substring(t.length);if(t.length<=10)return t;try{return new Date(t).toISOString()}catch{return t}}var Ee=()=>[];function _t(t){return t instanceof F?t.name:t instanceof ie&&t.left instanceof F&&t.right instanceof F?t.left.name+"."+t.right.name:""}var B={empty:(t,e)=>y(e.every(r=>O(r.value))),hasValue:(t,e)=>y(e.length!==0),exists:(t,e,r)=>r?y(e.some(n=>j(r.eval(t,[n])))):y(e.length>0&&e.every(n=>!O(n.value))),all:(t,e,r)=>y(e.every(n=>j(r.eval(t,[n])))),allTrue:(t,e)=>{for(let r of e)if(!r.value)return y(!1);return y(!0)},anyTrue:(t,e)=>{for(let r of e)if(r.value)return y(!0);return y(!1)},allFalse:(t,e)=>{for(let r of e)if(r.value)return y(!1);return y(!0)},anyFalse:(t,e)=>{for(let r of e)if(!r.value)return y(!0);return y(!1)},subsetOf:(t,e,r)=>{if(e.length===0)return y(!0);let n=r.eval(t,Ye(t));return n.length===0?y(!1):y(e.every(i=>n.some(o=>o.value===i.value)))},supersetOf:(t,e,r)=>{let n=r.eval(t,Ye(t));return n.length===0?y(!0):e.length===0?y(!1):y(n.every(i=>e.some(o=>o.value===i.value)))},count:(t,e)=>[{type:p.integer,value:e.length}],distinct:(t,e)=>{let r=[];for(let n of e)r.some(i=>i.value===n.value)||r.push(n);return r},isDistinct:(t,e)=>y(e.length===B.distinct(t,e).length),where:(t,e,r)=>e.filter(n=>j(r.eval(t,[n]))),select:(t,e,r)=>e.flatMap(n=>r.eval({parent:t,variables:{$this:n}},[n])),repeat:Ee,ofType:(t,e,r)=>{let n=_t(r);return n?e.filter(i=>Qe(i,n)):[]},single:(t,e)=>{if(e.length>1)throw new Error("Expected input length one for single()");return e.length===0?[]:e.slice(0,1)},first:(t,e)=>e.length===0?[]:e.slice(0,1),last:(t,e)=>e.length===0?[]:e.slice(-1,e.length),tail:(t,e)=>e.length===0?[]:e.slice(1,e.length),skip:(t,e,r)=>{let n=r.eval(t,e)[0]?.value;if(typeof n!="number")throw new TypeError("Expected a number for skip(num)");return n>=e.length?[]:n<=0?e:e.slice(n,e.length)},take:(t,e,r)=>{let n=r.eval(t,e)[0]?.value;if(typeof n!="number")throw new TypeError("Expected a number for take(num)");return n<=0?[]:e.slice(0,n)},intersect:(t,e,r)=>{if(!r)return e;let n=r.eval(t,Ye(t)),i=[];for(let o of e)!i.some(s=>s.value===o.value)&&n.some(s=>s.value===o.value)&&i.push(o);return i},exclude:(t,e,r)=>{if(!r)return e;let n=r.eval(t,Ye(t)),i=[];for(let o of e)n.some(s=>s.value===o.value)||i.push(o);return i},union:(t,e,r)=>{if(!r)return e;let n=r.eval(t,Ye(t));return Pt([...e,...n])},combine:(t,e,r)=>{if(!r)return e;let n=r.eval(t,Ye(t));return[...e,...n]},htmlChecks:(t,e,r)=>[E(!0)],iif:(t,e,r,n,i)=>{let o=r.eval(t,e);if(o.length>1||o.length===1&&typeof o[0].value!="boolean")throw new Error("Expected criterion to evaluate to a Boolean");return j(o)?n.eval(t,e):i?i.eval(t,e):[]},toBoolean:(t,e)=>{if(e.length===0)return[];let[{value:r}]=me(e,1);if(typeof r=="boolean")return[{type:p.boolean,value:r}];if(typeof r=="number"&&(r===0||r===1))return y(!!r);if(typeof r=="string"){let n=r.toLowerCase();if(["true","t","yes","y","1","1.0"].includes(n))return y(!0);if(["false","f","no","n","0","0.0"].includes(n))return y(!1)}return[]},convertsToBoolean:(t,e)=>e.length===0?[]:y(B.toBoolean(t,e).length===1),toInteger:(t,e)=>{if(e.length===0)return[];let[{value:r}]=me(e,1);return typeof r=="number"?[{type:p.integer,value:r}]:typeof r=="string"&&/^[+-]?\d+$/.exec(r)?[{type:p.integer,value:Number.parseInt(r,10)}]:typeof r=="boolean"?[{type:p.integer,value:r?1:0}]:[]},convertsToInteger:(t,e)=>e.length===0?[]:y(B.toInteger(t,e).length===1),toDate:(t,e)=>{if(e.length===0)return[];let[{value:r}]=me(e,1);return typeof r=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(r)?[{type:p.date,value:lt(r)}]:[]},convertsToDate:(t,e)=>e.length===0?[]:y(B.toDate(t,e).length===1),toDateTime:(t,e)=>{if(e.length===0)return[];let[{value:r}]=me(e,1);return typeof r=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(r)?[{type:p.dateTime,value:lt(r)}]:[]},convertsToDateTime:(t,e)=>e.length===0?[]:y(B.toDateTime(t,e).length===1),toDecimal:(t,e)=>{if(e.length===0)return[];let[{value:r}]=me(e,1);return typeof r=="number"?[{type:p.decimal,value:r}]:typeof r=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(r)?[{type:p.decimal,value:Number.parseFloat(r)}]:typeof r=="boolean"?[{type:p.decimal,value:r?1:0}]:[]},convertsToDecimal:(t,e)=>e.length===0?[]:y(B.toDecimal(t,e).length===1),toQuantity:(t,e)=>{if(e.length===0)return[];let[{value:r}]=me(e,1);return L(r)?[{type:p.Quantity,value:r}]:typeof r=="number"?[{type:p.Quantity,value:{value:r,unit:"1"}}]:typeof r=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(r)?[{type:p.Quantity,value:{value:Number.parseFloat(r),unit:"1"}}]:typeof r=="boolean"?[{type:p.Quantity,value:{value:r?1:0,unit:"1"}}]:[]},convertsToQuantity:(t,e)=>e.length===0?[]:y(B.toQuantity(t,e).length===1),toString:(t,e)=>{if(e.length===0)return[];let[{value:r}]=me(e,1);return r==null?[]:L(r)?[{type:p.string,value:`${r.value} '${r.unit}'`}]:[{type:p.string,value:r.toString()}]},convertsToString:(t,e)=>e.length===0?[]:y(B.toString(t,e).length===1),toTime:(t,e)=>{if(e.length===0)return[];let[{value:r}]=me(e,1);if(typeof r=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(r);if(n)return[{type:p.time,value:lt("T"+n[1])}]}return[]},convertsToTime:(t,e)=>e.length===0?[]:y(B.toTime(t,e).length===1),indexOf:(t,e,r)=>Y((n,i)=>n.indexOf(i),t,e,r),substring:(t,e,r,n)=>Y((i,o,s)=>{let a=o,u=s?a+s:i.length;return a<0||a>=i.length?void 0:i.substring(a,u)},t,e,r,n),startsWith:(t,e,r)=>Y((n,i)=>n.startsWith(i),t,e,r),endsWith:(t,e,r)=>Y((n,i)=>n.endsWith(i),t,e,r),contains:(t,e,r)=>Y((n,i)=>n.includes(i),t,e,r),upper:(t,e)=>Y(r=>r.toUpperCase(),t,e),lower:(t,e)=>Y(r=>r.toLowerCase(),t,e),replace:(t,e,r,n)=>Y((i,o,s)=>i.replaceAll(o,s),t,e,r,n),matches:(t,e,r)=>Y((n,i)=>!!new RegExp(i).exec(n),t,e,r),replaceMatches:(t,e,r,n)=>Y((i,o,s)=>i.replaceAll(new RegExp(o,"g"),s.replaceAll(/\$\{(\w+)\}/g,"$<$1>")),t,e,r,n),length:(t,e)=>Y(r=>r.length,t,e),toChars:(t,e)=>Y(r=>r?r.split(""):void 0,t,e),encode:Ee,decode:Ee,escape:Ee,unescape:Ee,trim:Ee,split:Ee,join:(t,e,r)=>{let n=r?.eval(t,Ye(t))[0]?.value??"";if(typeof n!="string")throw new TypeError("Separator must be a string.");return[{type:p.string,value:e.map(i=>i.value?.toString()??"").join(n)}]},abs:(t,e)=>fe(Math.abs,t,e),ceiling:(t,e)=>fe(Math.ceil,t,e),exp:(t,e)=>fe(Math.exp,t,e),floor:(t,e)=>fe(Math.floor,t,e),ln:(t,e)=>fe(Math.log,t,e),log:(t,e,r)=>fe((n,i)=>Math.log(n)/Math.log(i),t,e,r),power:(t,e,r)=>fe(Math.pow,t,e,r),round:(t,e,...r)=>fe((n,i=0)=>{if(typeof i!="number"||i<0)throw new Error("Invalid precision provided to round()");let o=Math.pow(10,i);return Math.round(n*o)/o},t,e,...r),sqrt:(t,e)=>fe(Math.sqrt,t,e),truncate:(t,e)=>fe(r=>Math.trunc(r),t,e),children:Ee,descendants:Ee,trace:(t,e,r)=>e,now:()=>[{type:p.dateTime,value:new Date().toISOString()}],timeOfDay:()=>[{type:p.time,value:new Date().toISOString().substring(11)}],today:()=>[{type:p.date,value:new Date().toISOString().substring(0,10)}],between:(t,e,r,n,i)=>{let o=B.toDateTime(t,r.eval(t,e));if(o.length===0)throw new Error("Invalid start date");let s=B.toDateTime(t,n.eval(t,e));if(s.length===0)throw new Error("Invalid end date");let a=i.eval(t,e)[0]?.value;if(a!=="years"&&a!=="months"&&a!=="days")throw new Error("Invalid units");let u=Ot(o[0].value,s[0].value);return[{type:p.Quantity,value:{value:u[a],unit:a}}]},is:(t,e,r)=>{let n=_t(r);return n?e.map(i=>({type:p.boolean,value:Qe(i,n)})):[]},not:(t,e)=>B.toBoolean(t,e).map(r=>({type:p.boolean,value:!r.value})),resolve:(t,e)=>e.map(r=>{let n=r.value,i;if(typeof n=="string")i=n;else if(typeof n=="object"){let o=n;if(o.resource)return E(o.resource);o.reference?i=o.reference:o.type&&o.identifier&&(i=`${o.type}?identifier=${o.identifier.system}|${o.identifier.value}`)}if(i?.includes("?")){let[o]=i.split("?");return{type:o,value:{resourceType:o}}}if(i?.includes("/")){let[o,s]=i.split("/");return{type:o,value:{resourceType:o,id:s}}}return{type:p.BackboneElement,value:void 0}}).filter(r=>!!r.value),as:(t,e,r)=>{let n=_t(r);if(!n)throw new Error(`Expected a valid type identifier as the right operand of 'as', but found ${r.toString()}`);let i=N(e);return i&&Qe(i,n)?[i]:[]},type:(t,e)=>e.map(({value:r})=>typeof r=="boolean"?{type:p.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof r=="number"?{type:p.BackboneElement,value:{namespace:"System",name:"Integer"}}:D(r)?{type:p.BackboneElement,value:{namespace:"FHIR",name:r.resourceType}}:{type:p.BackboneElement,value:null}),conformsTo:(t,e,r)=>{let n=r.eval(t,e)[0].value;if(!n.startsWith("http://hl7.org/fhir/StructureDefinition/"))throw new Error("Expected a StructureDefinition URL");let i=n.replace("http://hl7.org/fhir/StructureDefinition/","");return e.map(o=>({type:p.boolean,value:o.value?.resourceType===i}))},getResourceKey:(t,e)=>{let r=e[0].value;return r?.id?[{type:p.id,value:r.id}]:[]},getReferenceKey:(t,e,r)=>{let n=e[0].value;if(!n?.reference)return[];let i="";return r instanceof F&&(i=r.name),i&&!n.reference.startsWith(i+"/")?[]:[{type:p.id,value:K(n)}]},extension:(t,e,r)=>{let n=r.eval(t,e)[0].value,i=e?.[0]?.value;if(i){let o=ce(i,n);if(o)return[{type:p.Extension,value:o}]}return[]}};function Y(t,e,r,...n){if(r.length===0)return[];let[{value:i}]=me(r,1);if(typeof i!="string")throw new TypeError("String function cannot be called with non-string");let o=n.map(a=>a?.eval(e,r)[0]?.value),s=t(i,...o);return s===void 0?[]:Array.isArray(s)?s.map(E):[E(s)]}function fe(t,e,r,...n){if(r.length===0)return[];let[{value:i}]=me(r,1),o=L(i),s=o?i.value:i;if(typeof s!="number")throw new TypeError("Math function cannot be called with non-number");let a=t(s,...n.map(d=>d.eval(e,r)[0]?.value)),u=o?p.Quantity:r[0].type,l=o?{...i,value:a}:a;return[{type:u,value:l}]}function me(t,e){if(t.length!==e)throw new Error(`Expected ${e} arguments`);for(let r of t)if(r==null)throw new Error("Expected non-null argument");return t}function Ye(t){let e=t;for(;e.parent?.variables.$this;)e=e.parent;return[e.variables.$this]}var Re=class{constructor(e,r){c(this,"original");c(this,"child");this.original=e,this.child=r}eval(e,r){try{if(r.length>0){let n=[];for(let i of r)n.push(this.child.eval({parent:e,variables:{$this:i}},[i]));return n.flat()}else return this.child.eval(e,[])}catch(n){throw new Error(`FhirPathError on "${this.original}": ${n}`,{cause:n})}}toString(){return this.child.toString()}},G=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()}},F=class{constructor(e){c(this,"name");this.name=e}eval(e,r){if(this.name==="$this")return r;let n=this.getVariable(e);if(n)return[n];if(this.name.startsWith("%"))throw new Error(`Undefined variable ${this.name}`);return r.flatMap(i=>this.evalValue(i)).filter(i=>i?.value!==void 0)}getVariable(e){let r=e.variables[this.name];if(r!==void 0)return r;if(e.parent)return this.getVariable(e.parent)}evalValue(e){let r=e.value;if(!(!r||typeof r!="object"))return D(r,this.name)?("path"in e||(e.path=r.resourceType),e):Vr(e,this.name)}toString(){return this.name}},Lt=class{eval(){return[]}toString(){return"{}"}},Nt=class extends vt{constructor(r,n,i){super(r,n);c(this,"impl");this.impl=i}eval(r,n){return this.impl(this.child.eval(r,n))}toString(){return this.operator+this.child.toString()}},Ce=class extends A{constructor(e,r){super("as",e,r)}eval(e,r){return B.as(e,this.left.eval(e,r),this.right)}},q=class extends A{constructor(r,n,i,o){super(r,n,i);c(this,"impl");this.impl=o}eval(r,n){let i=this.left.eval(r,n),o=this.right.eval(r,n);if(i.length<1||o.length<1)return[];let s=N(i)?.value,a=N(o)?.value,u=L(s)?s.value:s,l=L(a)?a.value:a,d=this.impl(u,l);return typeof d=="boolean"?y(d):L(s)?[{type:p.Quantity,value:{...s,value:d}}]:[E(d)]}},ds=Object.freeze({type:"string",value:""}),Ft=class extends A{constructor(e,r){super("&",e,r)}eval(e,r){let n=N(this.left.eval(e,r))??ds,i=N(this.right.eval(e,r))??ds;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:p.string,value:n.value+i.value}]}},Ut=class extends A{constructor(e,r){super("contains",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return y(n.some(o=>o.value===i[0].value))}},Bt=class extends A{constructor(e,r){super("in",e,r)}eval(e,r){let n=N(this.left.eval(e,r)),i=this.right.eval(e,r);return n?y(i.some(o=>at(n,o)[0].value)):[]}},ie=class extends A{constructor(e,r){super(".",e,r)}eval(e,r){return this.right.eval(e,this.left.eval(e,r))}toString(){return`${this.left.toString()}.${this.right.toString()}`}},Ve=class extends A{constructor(e,r){super("|",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return Pt([...n,...i])}},qt=class extends A{constructor(e,r){super("=",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return Xn(n,i)}},Wt=class extends A{constructor(e,r){super("!=",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return Zn(n,i)}},$t=class extends A{constructor(e,r){super("~",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return Fr(n,i)}},jt=class extends A{constructor(e,r){super("!~",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return Yn(Fr(n,i))}},_e=class extends A{constructor(e,r){super("is",e,r)}eval(e,r){let n=this.left.eval(e,r);if(n.length!==1)return[];let i=_t(this.right);return i?y(Qe(n[0],i)):[]}},Ht=class extends A{constructor(e,r){super("and",e,r)}eval(e,r){let n=N(this.left.eval(e,r),"boolean"),i=N(this.right.eval(e,r),"boolean");return n?.value===!0&&i?.value===!0?y(!0):n?.value===!1||i?.value===!1?y(!1):[]}},Gt=class extends A{constructor(e,r){super("or",e,r)}eval(e,r){let n=N(this.left.eval(e,r),"boolean"),i=N(this.right.eval(e,r),"boolean");return n?.value===!1&&i?.value===!1?y(!1):n?.value||i?.value?y(!0):[]}},Qt=class extends A{constructor(e,r){super("xor",e,r)}eval(e,r){let n=N(this.left.eval(e,r),"boolean"),i=N(this.right.eval(e,r),"boolean");return!n||!i?[]:y(n.value!==i.value)}},zt=class extends A{constructor(e,r){super("implies",e,r)}eval(e,r){let n=N(this.left.eval(e,r),"boolean"),i=N(this.right.eval(e,r),"boolean");return i?.value===!0||n?.value===!1?y(!0):!n||!i?[]:y(!1)}},oe=class{constructor(e,r){c(this,"name");c(this,"args");this.name=e,this.args=r}eval(e,r){let n=B[this.name];if(!n)throw new Error("Unrecognized function: "+this.name);return n(e,r,...this.args)}toString(){return`${this.name}(${this.args.map(e=>e.toString()).join(", ")})`}},Le=class{constructor(e,r){c(this,"left");c(this,"expr");this.left=e,this.expr=r}eval(e,r){let n=this.expr.eval(e,r);if(n.length!==1)return[];let i=n[0].value;if(typeof i!="number")throw new Error("Invalid indexer expression: should return integer}");let o=this.left.eval(e,r);return i in o?[o[i]]:[]}toString(){return`${this.left.toString()}[${this.expr.toString()}]`}};var ol=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],sl=/^\d{4}-\d{2}[\dT:.+\-Z]*(?=[\s)\]]|$)/,al={"'":"'",'"':'"',"`":"`",r:"\r",n:`
|
|
1
|
+
"use strict";var Tr=Object.defineProperty;var $a=Object.getOwnPropertyDescriptor;var ja=Object.getOwnPropertyNames;var Ha=Object.prototype.hasOwnProperty;var Ga=(t,e,r)=>e in t?Tr(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var Qa=(t,e)=>{for(var r in e)Tr(t,r,{get:e[r],enumerable:!0})},za=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of ja(e))!Ha.call(t,i)&&i!==r&&Tr(t,i,{get:()=>e[i],enumerable:!(n=$a(e,i))||n.enumerable});return t};var Ja=t=>za(Tr({},"__esModule",{value:!0}),t);var c=(t,e,r)=>Ga(t,typeof e!="symbol"?e+"":e,r);var sm={};Qa(sm,{AccessPolicyInteraction:()=>Ne,AckCode:()=>ga,AndAtom:()=>Gt,ArithmeticOperatorAtom:()=>q,AsAtom:()=>Ce,CPT:()=>Za,ClientStorage:()=>gt,ConcatAtom:()=>Ut,ContainsAtom:()=>Bt,ContentType:()=>V,DAYS_OF_WEEK:()=>Ma,DEFAULT_ACCEPT:()=>Bs,DEFAULT_MAX_SEARCH_COUNT:()=>Pl,DEFAULT_SEARCH_COUNT:()=>Cl,DataSampler:()=>sn,DotAtom:()=>ie,EMPTY:()=>v,EmptySetAtom:()=>Nt,EqualsAtom:()=>Wt,EquivalentAtom:()=>jt,EventTarget:()=>Yr,ExternalSecretSystems:()=>Bd,FHIRCAST_EVENT_NAMES:()=>Zr,FHIRCAST_EVENT_RESOURCES:()=>Ds,FHIRCAST_EVENT_VERSION_REQUIRED:()=>en,FHIRCAST_RESOURCE_TYPES:()=>Ms,FhirFilterComparison:()=>hr,FhirFilterConnective:()=>yr,FhirFilterNegation:()=>gr,FhirPathAtom:()=>Re,FhircastConnection:()=>rr,FileBuilder:()=>Xi,FunctionAtom:()=>oe,HTTP_HL7_ORG:()=>bt,HTTP_TERMINOLOGY_HL7_ORG:()=>rc,Hl7Context:()=>we,Hl7Field:()=>ge,Hl7Message:()=>eo,Hl7Segment:()=>vt,ICD10:()=>ec,INVALID_MEDICATION_CART_RESPONSE:()=>wa,INVALID_MEDICATION_CHECKOUT_RESPONSE:()=>Pa,INVALID_MEDICATION_ORDER_RESPONSE:()=>Ta,INVALID_MEDICATION_ORDER_SET_RESPONSE:()=>Sa,INVALID_MEDICATION_SEARCH_RESPONSE:()=>zp,ImpliesAtom:()=>Jt,InAtom:()=>qt,IndexerAtom:()=>Le,InfixOperatorAtom:()=>A,InvalidOperationError:()=>hn,IsAtom:()=>_e,LOINC:()=>Ka,LRUCache:()=>ee,LiteralAtom:()=>G,LogLevel:()=>it,LogLevelNames:()=>va,Logger:()=>to,MEDICATION_REQUEST_STATUS_REASON_RESPONSE_NOT_RECEIVED:()=>Ea,MEDICATION_REQUEST_STATUS_REASON_SYSTEM:()=>ba,MEDPLUM_CLI_CLIENT_ID:()=>Pd,MEDPLUM_RELEASES_URL:()=>Fa,MEDPLUM_SEMVER_REGEX:()=>mo,MEDPLUM_VERSION:()=>on,MedplumClient:()=>cr,MedplumKeyValueClient:()=>or,MemoryStorage:()=>nn,MissingError:()=>z,MockAsyncClientStorage:()=>Mi,NDC:()=>tc,NOOP:()=>Bu,NotEqualsAtom:()=>$t,NotEquivalentAtom:()=>Ht,OAuthClientAssertionType:()=>Ws,OAuthGrantType:()=>tt,OAuthSigningAlgorithm:()=>_d,OAuthTokenAuthMethod:()=>Vd,OAuthTokenType:()=>qs,OperationOutcomeError:()=>m,Operator:()=>g,OperatorPrecedence:()=>S,OrAtom:()=>Qt,PATIENT_PREFERRED_PHARMACY_URL:()=>Tn,PHARMACY_PREFERENCE_TYPE_SYSTEM:()=>io,PHARMACY_TYPE_PREFERRED:()=>oo,PHARMACY_TYPE_PRIMARY:()=>vn,Parser:()=>Sr,ParserBuilder:()=>St,Pointer:()=>M,PrefixOperatorAtom:()=>Tt,PropertyType:()=>p,RXNORM:()=>Xa,ReadablePromise:()=>$,ReconnectingWebSocket:()=>et,ReturnAckCategory:()=>nd,SNOMED:()=>Ya,SchedulingEncounterCodingURI:()=>bf,SchedulingParametersURI:()=>vr,SchedulingPlanDefinitionURI:()=>Ef,SearchParameterType:()=>ye,ServiceTypeReferenceURI:()=>Sn,SubscriptionEmitter:()=>yt,SubscriptionManager:()=>ar,SymbolAtom:()=>F,TestError:()=>mn,TimezoneExtensionURI:()=>ka,Tokenizer:()=>Pe,TransformMapCollection:()=>dn,TypedEventTarget:()=>ae,UCUM:()=>Cn,UnaryOperatorAtom:()=>Ft,UnionAtom:()=>Ve,VALID_HOSTNAME_REGEX:()=>es,XorAtom:()=>zt,accepted:()=>fc,accessPolicySupportsInteraction:()=>Ei,add:()=>fr,addPreferredPharmacyToPatient:()=>xf,addProfileToResource:()=>ku,allOk:()=>nc,append:()=>re,apply:()=>zi,applyDefaultValuesToElement:()=>Yd,applyDefaultValuesToResource:()=>Kd,applyFixedOrPatternValue:()=>lr,applyPatch:()=>Ip,arrayBufferToBase64:()=>si,arrayBufferToHex:()=>oi,arrayify:()=>te,assert:()=>Is,assertContextVersionOptional:()=>Ai,assertNever:()=>Uu,assertOk:()=>wc,assertReleaseManifest:()=>Ua,assertValidMedplumSemver:()=>qa,badRequest:()=>w,booleanToTypedValue:()=>y,buildCdsRequest:()=>dd,buildElementsContext:()=>cn,buildMedicationRequestResponseLostStatusReason:()=>Jp,buildTypeName:()=>cs,businessRule:()=>vc,calculateAge:()=>It,calculateAgeString:()=>ru,canReadResourceType:()=>Zl,canWriteResource:()=>td,canWriteResourceType:()=>ed,capitalize:()=>U,checkForNull:()=>so,checkIfValidMedplumVersion:()=>rm,clearReleaseCache:()=>tm,clearScheduleParameter:()=>La,codeableConceptMatchesToken:()=>gu,codingMatchesToken:()=>Go,compareVersions:()=>Wa,compressElement:()=>Ic,concatUrls:()=>W,conceptMapTranslate:()=>Bi,conflict:()=>mc,contentTooLarge:()=>uc,convertContainedResourcesToBundle:()=>ud,convertToSearchableDates:()=>yi,convertToSearchableNumbers:()=>xl,convertToSearchableQuantities:()=>vl,convertToSearchableReferences:()=>vi,convertToSearchableStrings:()=>xi,convertToSearchableTokens:()=>Ti,convertToSearchableUris:()=>Tl,convertToTransactionBundle:()=>Rs,copy:()=>ua,countBy:()=>Nu,countWhere:()=>Lu,crawlTypedValue:()=>Dr,crawlTypedValueAsync:()=>Fc,createConstraintIssue:()=>_n,createFhircastMessagePayload:()=>rn,createOperationOutcomeIssue:()=>ke,createPatch:()=>Mp,createPreferredPharmacyExtension:()=>Ia,createProcessingIssue:()=>Ln,createReference:()=>ne,createStructureIssue:()=>R,createTests:()=>Dp,created:()=>ic,decodeBase64:()=>Es,decodeBase64Url:()=>tr,deepClone:()=>de,deepEquals:()=>ve,deepIncludes:()=>at,deriveIdentifierSearchParameter:()=>Nf,diffAny:()=>Ae,diffArrays:()=>ia,diffObjects:()=>oa,encodeBase64:()=>er,encodeBase64Url:()=>Ri,encodeSmartHealthLink:()=>Qf,encryptSHA256:()=>Ci,ensureNoLeadingSlash:()=>Zo,ensureTrailingSlash:()=>Gr,escapeHtml:()=>Fu,escapeToken:()=>aa,evalFhirPath:()=>yl,evalFhirPathTyped:()=>k,evalSqlOnFhir:()=>Kf,expandSampledData:()=>_i,expandSampledObservation:()=>jd,extractAccountReferences:()=>Wr,extractServiceTypeReferences:()=>kf,fetchAllVersionStrings:()=>im,fetchLatestVersionString:()=>nm,fetchVersionManifest:()=>Rn,fhirPathArrayEquals:()=>Xn,fhirPathArrayEquivalent:()=>Fr,fhirPathArrayNotEquals:()=>Zn,fhirPathEquals:()=>ct,fhirPathEquivalent:()=>Bo,fhirPathIs:()=>Qe,fhirPathNot:()=>Yn,fhirTypeToJsType:()=>_r,fhirpathPatchTypedValue:()=>Lp,findCodeBySystem:()=>hu,findObservationInterval:()=>vu,findObservationReferenceRange:()=>Tu,findObservationReferenceRanges:()=>Jo,findResourceByCode:()=>wu,findResourceInBundle:()=>ld,flatMapFilter:()=>Vu,forbidden:()=>sc,formatAddress:()=>rs,formatCodeableConcept:()=>Te,formatCoding:()=>fi,formatDate:()=>$u,formatDateTime:()=>ze,formatFamilyName:()=>Wu,formatGivenName:()=>qu,formatHl7DateTime:()=>xa,formatHumanName:()=>lt,formatMoney:()=>Xu,formatObservationValue:()=>is,formatPeriod:()=>Hu,formatQuantity:()=>be,formatRange:()=>Yu,formatReferenceString:()=>ts,formatSearchQuery:()=>Ll,formatTime:()=>ju,formatTiming:()=>Ju,formatWallTime:()=>ns,generateId:()=>se,getAllDataTypes:()=>qn,getAllQuestionnaireAnswers:()=>iu,getBuffer:()=>Jr,getCodeBySystem:()=>qr,getDataType:()=>xe,getDateProperty:()=>tu,getDefaultValuesForNewSliceEntry:()=>Xd,getDisplayString:()=>$o,getElementDefinition:()=>Ot,getElementDefinitionForPath:()=>hi,getElementDefinitionFromElements:()=>mi,getElementDefinitionTypeName:()=>wr,getExpressionForResourceType:()=>jf,getExpressionsForResourceType:()=>lo,getExtension:()=>ce,getExtensionValue:()=>De,getExtensions:()=>kt,getIdentifier:()=>$r,getImageSrc:()=>eu,getInnerDerivedIdentifierExpression:()=>ao,getMedicationOrderIframeUrl:()=>Zp,getNestedProperty:()=>je,getOutcomeRedirectUrl:()=>xc,getParsedDerivedIdentifierExpression:()=>co,getParsedExpressionForResourceType:()=>uo,getPathDifference:()=>Se,getPathDisplayName:()=>il,getPendingMedicationOrderId:()=>Yp,getPendingMedicationOrderStatus:()=>Xp,getPreferredPharmaciesFromPatient:()=>yf,getPropertyDisplayName:()=>ls,getQueryString:()=>di,getQuestionnaireAnswers:()=>nu,getRandomString:()=>Kr,getReferenceString:()=>I,getResourceTypes:()=>us,getScheduleParameters:()=>_a,getSchedulingTimezone:()=>wf,getSearchParameter:()=>nl,getSearchParameterDetails:()=>Ff,getSearchParameters:()=>rl,getSearchResourceTypes:()=>ql,getSmartHealthLinkId:()=>Jf,getStatus:()=>Ac,getTypedPropertyValue:()=>_,getTypedPropertyValueWithPath:()=>Vr,getTypedPropertyValueWithSchema:()=>Fo,getTypedPropertyValueWithoutSchema:()=>Uo,getValueSliceName:()=>Ni,getWebSocketUrl:()=>li,getWindow:()=>od,globalSchema:()=>H,gone:()=>ac,hasSchedulingParameters:()=>Cf,indexConceptMapCodings:()=>Gs,indexDefaultSearchParameters:()=>Hn,indexSearchParameter:()=>Qr,indexSearchParameterBundle:()=>tl,indexStructureDefinitionBundle:()=>Ir,inflateBaseSchema:()=>Nn,inflateElement:()=>Ao,initFhirPathParserBuilder:()=>pt,intersection:()=>Pp,invalidSearchOperator:()=>Bl,isAccepted:()=>Sc,isAckCode:()=>ya,isAddPharmacyResponse:()=>Sf,isBrowserEnvironment:()=>X,isCodeableConcept:()=>Br,isCoding:()=>Ur,isCompletedSubscriptionRequest:()=>wi,isComplexTypeCode:()=>jr,isConflict:()=>Rc,isContextVersionRequired:()=>Pi,isCreated:()=>Tc,isDataTypeLoaded:()=>Wn,isDateString:()=>ei,isDateTimeString:()=>Ge,isDayOfWeek:()=>Rf,isDefined:()=>Vt,isDestructive:()=>Gi,isEmpty:()=>O,isError:()=>Pr,isFhirCriteriaMet:()=>Ls,isFhircastResourceType:()=>Vs,isGone:()=>Cc,isJwt:()=>Oi,isLowerCase:()=>yu,isMedicationArray:()=>Kp,isMedicationCartManageResponse:()=>Oa,isMedicationCheckoutResponse:()=>Aa,isMedicationOrderResponse:()=>Ra,isMedicationOrderSetResponse:()=>Ca,isMedplumAccessToken:()=>Ii,isNodeEnvironment:()=>id,isNotFound:()=>Ec,isObject:()=>C,isOk:()=>Ar,isOperationOutcome:()=>ot,isOrganizationArray:()=>Tf,isPeriod:()=>ti,isPopulated:()=>le,isPrimitiveType:()=>Ct,isProfileLoaded:()=>$n,isProfileResource:()=>Wo,isQuantity:()=>L,isQuantityEquivalent:()=>ri,isRedirect:()=>bc,isReference:()=>J,isResource:()=>D,isResourceType:()=>Rt,isResourceTypeSchema:()=>Mr,isResourceWithId:()=>ut,isSliceDefinitionWithTypes:()=>Li,isString:()=>pe,isStringArray:()=>mu,isTextObject:()=>Qo,isTypedValue:()=>al,isUUID:()=>fu,isUnauthenticated:()=>Pc,isValidDate:()=>_t,isValidHostname:()=>Iu,isValidMedplumSemver:()=>ho,lazy:()=>ui,loadDataType:()=>kr,locationUtils:()=>he,mapByIdentifier:()=>Mu,matchDiscriminant:()=>Lr,matchesRange:()=>ci,matchesSearchRequest:()=>Zt,medicationCartClearRequestToParameters:()=>df,medicationCartRemoveRequestToParameters:()=>lf,medicationCheckoutRequestToParameters:()=>af,medicationOrderRequestToParameters:()=>rf,medicationOrderSetRequestToParameters:()=>of,medicationSearchParamsToParameters:()=>ef,move:()=>xn,multipleMatches:()=>dc,normalizeArrayBufferView:()=>ai,normalizeCreateBinaryOptions:()=>Vi,normalizeCreatePdfOptions:()=>$s,normalizeErrorEvent:()=>ks,normalizeErrorString:()=>Ie,normalizeOperationOutcome:()=>Et,notFound:()=>Mn,notModified:()=>oc,operationOutcomeIssueToString:()=>Po,operationOutcomeToString:()=>Vn,parametersToMedicationCartManageResponse:()=>ff,parametersToMedicationCheckoutResponse:()=>uf,parametersToMedicationOrderResponse:()=>nf,parametersToMedicationOrderSetResponse:()=>sf,parametersToOrderSetSyncResponse:()=>hf,parseFhirPath:()=>Xt,parseFhirPathPatchParameters:()=>_p,parseFilterParameter:()=>$p,parseHl7DateTime:()=>Hp,parseJWTPayload:()=>ir,parseLogLevel:()=>Qp,parseMappingLanguage:()=>sp,parseParameter:()=>ys,parseReference:()=>Yc,parseSearchRequest:()=>ft,parseSmartHealthLink:()=>zf,parseStructureDefinition:()=>Or,parseXFhirQuery:()=>_l,pathToJSONPointer:()=>He,preciseEquals:()=>Cu,preciseGreaterThan:()=>Au,preciseGreaterThanOrEquals:()=>Xo,preciseLessThan:()=>Pu,preciseLessThanOrEquals:()=>Yo,preciseRound:()=>Ru,preconditionFailed:()=>cc,projectAdminResourceTypes:()=>vs,protectedResourceTypes:()=>xs,readInteractions:()=>Ts,redirect:()=>Co,redirectOk:()=>yc,remove:()=>gn,removeDuplicates:()=>At,removePreferredPharmacyFromPatient:()=>vf,removeProfileFromResource:()=>Du,reorderBundle:()=>Cs,replace:()=>yn,replaceQueryVariables:()=>As,resolveId:()=>K,resourceMatchesSubscriptionCriteria:()=>Rd,satisfiedAccessPolicy:()=>Ss,schedulingDurationToMinutes:()=>Df,serializeError:()=>xr,serializeFhircastSubscriptionRequest:()=>tn,serverError:()=>hc,serverTimeout:()=>gc,serviceTypeIncludesService:()=>If,setCodeBySystem:()=>xu,setIdentifier:()=>ou,setScheduleParameter:()=>Af,singleton:()=>N,singularize:()=>Ou,sleep:()=>Hr,sortStringArray:()=>Dt,splitN:()=>Je,splitSearchOnComma:()=>mt,streamToBuffer:()=>Gf,stringify:()=>Mt,stringifyTypedValue:()=>gi,structureMapTransform:()=>ap,subsetResource:()=>Dc,subtract:()=>Hi,sumBy:()=>_u,summarizeObservations:()=>qd,test:()=>la,toJsBoolean:()=>j,toPeriod:()=>wt,toServiceTypeCodeableConcepts:()=>Of,toTypedValue:()=>E,tooManyRequests:()=>pc,trimTrailingEmptyElements:()=>cu,tryGetDataType:()=>Me,tryGetJwtExpiration:()=>ki,tryGetProfile:()=>jn,typedValueToString:()=>pi,unauthorized:()=>We,unauthorizedTokenAudience:()=>Cr,unauthorizedTokenExpired:()=>Dn,unescapeToken:()=>sa,unsupportedMediaType:()=>lc,validateFhircastSubscriptionRequest:()=>nr,validateResource:()=>Wc,validateResourceType:()=>Vf,validateTypedValue:()=>Vo,validationError:()=>T,validationRegexes:()=>Pt,warnIfNewerVersionAvailable:()=>om,wordWrap:()=>fa});module.exports=Ja(sm);var ee=class{constructor(e=10){c(this,"max");c(this,"cache");this.max=e,this.cache=new Map}clear(){this.cache.clear()}get(e){let r=this.cache.get(e);return r&&(this.cache.delete(e),this.cache.set(e,r)),r}set(e,r){this.cache.has(e)?this.cache.delete(e):this.cache.size>=this.max&&this.cache.delete(this.first()),this.cache.set(e,r)}delete(e){this.cache.delete(e)}keys(){return this.cache.keys()}first(){return this.cache.keys().next().value}};var Tt=class{constructor(e,r){c(this,"operator");c(this,"child");this.operator=e,this.child=r}toString(){return`${this.operator}(${this.child.toString()})`}},A=class{constructor(e,r,n){c(this,"operator");c(this,"left");c(this,"right");this.operator=e,this.left=r,this.right=n}toString(){return`(${this.left.toString()} ${this.operator} ${this.right.toString()})`}},St=class{constructor(){c(this,"prefixParselets",{});c(this,"infixParselets",{})}registerInfix(e,r){return this.infixParselets[e]=r,this}registerPrefix(e,r){return this.prefixParselets[e]=r,this}prefix(e,r,n){return this.registerPrefix(e,{parse(i,o){let s=i.consumeAndParse(r);return n(o,s)}})}infixLeft(e,r,n){return this.registerInfix(e,{parse(i,o,s){let a=i.consumeAndParse(r);return n(o,s,a)},precedence:r})}construct(e){return new Sr(e,this.prefixParselets,this.infixParselets)}},Sr=class{constructor(e,r,n){c(this,"tokens");c(this,"prefixParselets");c(this,"infixParselets");this.tokens=e,this.prefixParselets=r,this.infixParselets=n}hasMore(){return this.tokens.length>0}match(e){return this.peek()?.id!==e?!1:(this.consume(),!0)}consumeAndParse(e=1/0){let r=this.consume(),n=this.prefixParselets[r.id];if(!n)throw new Error(`Parse error at "${r.value}" (line ${r.line}, column ${r.column}). No matching prefix parselet.`);let i=n.parse(this,r);for(;e>this.getPrecedence();){let o=this.consume();i=this.getInfixParselet(o).parse(this,i,o)}return i}getPrecedence(){let e=this.peek();if(!e)return 1/0;let r=this.getInfixParselet(e);return r?r.precedence:1/0}consume(e,r){if(!this.tokens.length)throw new Error("Cant consume unknown more tokens.");if(e&&this.peek()?.id!==e){let n=this.peek();throw new Error(`Expected ${e} but got "${n.id}" (${n.value}) at line ${n.line} column ${n.column}.`)}if(r&&this.peek()?.value!==r){let n=this.peek();throw new Error(`Expected "${r}" but got "${n.value}" at line ${n.line} column ${n.column}.`)}return this.tokens.shift()}peek(){return this.tokens.length>0?this.tokens[0]:void 0}removeComments(){this.tokens=this.tokens.filter(e=>e.id!=="Comment")}getInfixParselet(e){return this.infixParselets[e.id==="Symbol"?e.value:e.id]}};function te(t){if(t!==void 0)return Array.isArray(t)?t:[t]}var Cn="http://unitsofmeasure.org",Ka="http://loinc.org",Ya="http://snomed.info/sct",Xa="http://www.nlm.nih.gov/research/umls/rxnorm",Za="http://www.ama-assn.org/go/cpt",ec="http://hl7.org/fhir/sid/icd-10",tc="http://hl7.org/fhir/sid/ndc",bt="http://hl7.org",rc="http://terminology.hl7.org";var br="ok",Er="created",Pn="gone",An="not-modified",wn="found",On="not-found",In="conflict",kn="unauthorized",yo="forbidden",xo="precondition-failed",vo="content-too-large",To="unsupported-media-type",So="multiple-matches",bo="too-many-requests",Rr="accepted",Eo="server-timeout",Ro="business-rule",nc={resourceType:"OperationOutcome",id:br,issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},ic={resourceType:"OperationOutcome",id:Er,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},oc={resourceType:"OperationOutcome",id:An,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},Mn={resourceType:"OperationOutcome",id:On,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},We={resourceType:"OperationOutcome",id:kn,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},Dn={...We,issue:[...We.issue,{severity:"error",code:"expired",details:{text:"Token expired"}}]},Cr={...We,issue:[...We.issue,{severity:"error",code:"invalid",details:{text:"Token not issued for this audience"}}]},sc={resourceType:"OperationOutcome",id:yo,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},ac={resourceType:"OperationOutcome",id:Pn,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},cc={resourceType:"OperationOutcome",id:xo,issue:[{severity:"error",code:"processing",details:{text:"Precondition Failed"}}]};function uc(t){return{resourceType:"OperationOutcome",id:vo,issue:[{severity:"error",code:"too-long",details:{text:t}}]}}var lc={resourceType:"OperationOutcome",id:To,issue:[{severity:"error",code:"not-supported",details:{text:"Unsupported media type"}}]},dc={resourceType:"OperationOutcome",id:So,issue:[{severity:"error",code:"multiple-matches",details:{text:"Multiple resources found matching condition"}}]},pc={resourceType:"OperationOutcome",id:bo,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function fc(t){return{resourceType:"OperationOutcome",id:Rr,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:t}]}}function w(t,e){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:t},...e?{expression:te(e)}:void 0}]}}function mc(t,e){return{resourceType:"OperationOutcome",id:In,issue:[{severity:"error",code:"conflict",details:{coding:e?[{code:e}]:void 0,text:t}}]}}function T(t,e,r,n){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:r??"structure",details:{text:t},...e?{expression:e}:void 0,...n?{diagnostics:n}:void 0}]}}function hc(t){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:t.toString()}]}}function gc(t){return{resourceType:"OperationOutcome",id:Eo,issue:[{severity:"error",code:"timeout",details:{text:t??"Server timeout"}}]}}function Co(t){let e=t.toString();return{resourceType:"OperationOutcome",id:wn,issue:[{severity:"information",code:"informational",details:{coding:[{system:"urn:ietf:rfc:3986",code:e}],text:"Redirect to "+e}}]}}function yc(t){return{...Co(t),id:br}}function xc(t){return t?.issue?.[0]?.details?.coding?.find(e=>e.system==="urn:ietf:rfc:3986")?.code}function vc(t,e){return{resourceType:"OperationOutcome",id:Ro,issue:[{severity:"error",code:"business-rule",details:{id:t,text:e}}]}}function Pr(t){return!t||typeof t!="object"?!1:t instanceof Error||typeof DOMException<"u"&&t instanceof DOMException?!0:Object.prototype.toString.call(t)==="[object Error]"}function ot(t){return typeof t=="object"&&t!==null&&t.resourceType==="OperationOutcome"}function Ar(t){return t.id===br||t.id===Er||t.id===An||t.id===Rr}function Tc(t){return t.id===Er}function Sc(t){return t.id===Rr}function bc(t){return t.id===wn}function Ec(t){return t.id===On}function Rc(t){return t.id===In}function Cc(t){return t.id===Pn}function Pc(t){return t.id===kn}function Ac(t){switch(t.id){case br:return 200;case Er:return 201;case Rr:return 202;case wn:return 302;case An:return 304;case kn:return 401;case yo:return 403;case On:return 404;case In:return 409;case Pn:return 410;case xo:case So:return 412;case vo:return 413;case To:return 415;case Ro:return 422;case bo:return 429;case Eo:return 504;default:return t.issue?.[0]?.code==="exception"?500:400}}function wc(t,e){if(!Ar(t)||e===void 0)throw new m(t)}var m=class extends Error{constructor(r,n){super(Vn(r),n);c(this,"outcome");this.name="OperationOutcomeError",this.outcome=r}};function Et(t){return t instanceof m?t.outcome:ot(t)?t:w(Ie(t))}function Ie(t){return t?typeof t=="string"?t:Pr(t)?t.message:ot(t)?Vn(t):typeof t=="object"&&"code"in t&&typeof t.code=="string"?t.code:JSON.stringify(t):"Unknown error"}function Vn(t){let e=t.issue?.map(Po)??[];return e.length>0?e.join("; "):"Unknown error"}function Po(t){let e;return t.details?.text?t.diagnostics?e=`${t.details.text} (${t.diagnostics})`:e=t.details.text:t.diagnostics?e=t.diagnostics:e="Unknown error",t.expression?.length&&(e+=` (${t.expression.join(", ")})`),e}function ke(t,e,r,n,i){let o={severity:t,code:e,details:{text:r},expression:[n]};return i&&(o.diagnostics=JSON.stringify(i)),o}function R(t,e){return ke("error","structure",e,t)}function _n(t,e){return ke("error","invariant",`Constraint ${e.key} not met: ${e.description}`,t,{fhirpath:e.expression})}function Ln(t,e,r,n){return ke("error","processing",e,t,{...n,error:r})}var Oc={"http://hl7.org/fhirpath/System.String":"string"};function Ic(t){let e={};return t.min!==0&&(e.min=t.min),t.max!==1&&Number.isFinite(t.max)?e.max=t.max:t.max===Number.POSITIVE_INFINITY&&(e.max=Number.MAX_SAFE_INTEGER),e.type=t.type?.map(r=>({...r,extension:void 0,code:Oc[r.code]??r.code})),e}function Ao(t,e){let r=e.max&&e.max===Number.MAX_SAFE_INTEGER?Number.POSITIVE_INFINITY:e.max;return{path:t,description:"",type:e.type??[],min:e.min??0,max:r??1,isArray:!!r&&r>1,constraints:[]}}function Nn(t){let e=Object.create(null);for(let[r,n]of Object.entries(t))e[r]={name:r,type:r,path:r,elements:Object.fromEntries(Object.entries(n.elements).map(([i,o])=>[i,Ao(i,o)])),constraints:[],innerTypes:[]};return e}var wo={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"}]},deleted:{type:[{code:"boolean"}]}}},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"}]},userInfoMode:{type:[{code:"code"}]},userInfoApiKey:{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 Or(t){return new Un(t).parse()}var $e=Nn(wo),Bn=Object.create(null),Oo=Object.create(null),Mc={"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 Do(t){let e;return e=Oo[t],e||(e=Oo[t]=Object.create(null)),e}function Ir(t){let r=(Array.isArray(t)?t:t.entry?.map(n=>n.resource)??[]).filter(n=>n?.resourceType==="StructureDefinition");Hn(r);for(let n of r)kr(n)}function kr(t){if(!t?.name)throw new Error("Failed loading StructureDefinition from bundle");if(t.resourceType!=="StructureDefinition")return;let e=Or(t),r=Mc[t.url],n,i;r?(n=$e,i=r):t.url===`http://hl7.org/fhir/StructureDefinition/${t.type}`||t.url===`https://medplum.com/fhir/StructureDefinition/${t.type}`||t.type?.startsWith("http://")||t.type?.startsWith("https://")?(n=$e,i=t.type):(n=Do(t.url),i=t.type),n[i]=e;for(let o of e.innerTypes)o.parentType=e,n[o.name]=o;Bn[t.url]=e}function qn(){return $e}function Wn(t){return!!$e[t]}function Me(t,e){if(e){let r=Do(e)[t];if(r)return r}return $e[t]}function xe(t,e){let r=Me(t,e);if(!r)throw new m(w("Unknown data type: "+t));return r}function Rt(t){let e=$e[t];return e&&Mr(e)}function $n(t){return!!Bn[t]}function jn(t){return Bn[t]}var Un=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:Nc(e),elements:{},constraints:this.parseElementDefinition(this.root).constraints,innerTypes:[],summaryProperties:new Set,mandatoryProperties:new Set},this.innerTypes=[]}parse(){let e=this.next();for(;e;){if(e.sliceName)this.parseSliceStart(e);else if(e.id?.includes(":")){if(this.slicingContext?.current){let r=Fn(e,this.slicingContext.path);this.slicingContext.current.elements[r]=this.parseElementDefinition(e)}}else{let r=this.parseElementDefinition(e);this.checkFieldEnter(e,r);let n=this.backboneContext;for(;n;){if(e.path?.startsWith(n.path+".")){n.type.elements[Fn(e,n.path)]=r;break}n=n.parent}if(!n){let i=Fn(e,this.root.path);e.isSummary&&this.resourceSchema.summaryProperties?.add(i.replace("[x]","")),r.min>0&&this.resourceSchema.mandatoryProperties?.add(i.replace("[x]","")),this.resourceSchema.elements[i]=r}this.checkFieldExit(e)}e=this.next()}return this.checkFieldExit(),this.innerTypes.length>0&&(this.resourceSchema.innerTypes=this.innerTypes),this.resourceSchema}checkFieldEnter(e,r){this.isInnerType(e)&&this.enterInnerType(e),this.slicingContext&&!st(this.slicingContext.path,e?.path)&&(this.slicingContext=void 0),e.slicing&&!this.slicingContext&&this.enterSlice(e,r)}enterInnerType(e){for(;this.backboneContext&&!st(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;let r=wr(e);this.backboneContext={type:{name:r,type:r,path:e.path,title:e.label,description:e.definition,elements:{},constraints:this.parseElementDefinition(e).constraints,innerTypes:[]},path:e.path,parent:st(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}enterSlice(e,r){Lc(e)&&!this.peek()?.sliceName||(r.slicing={discriminator:(e.slicing?.discriminator??[]).map(n=>{if(n.type!=="value"&&n.type!=="pattern"&&n.type!=="type")throw new Error(`Unsupported slicing discriminator type: ${n.type}`);return{path:n.path,type:n.type}}),slices:[],ordered:e.slicing?.ordered??!1,rule:e.slicing?.rules},this.slicingContext={field:r.slicing,path:e.path??""})}checkFieldExit(e=void 0){if(this.backboneContext&&!st(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!st(this.backboneContext.path,e?.path));else this.innerTypes.push(this.backboneContext.type),this.backboneContext=void 0}next(){let e=this.peek();if(e)return this.index++,e}peek(){let e=this.elements[this.index];if(e){if(this.elementIndex[e.path??""]=e,e.contentReference){let r=e.contentReference.slice(e.contentReference.indexOf("#")+1),n=this.elementIndex[r];return n?{...n,id:e.id,path:e.path,min:e.min??n.min,max:e.max??n.max,base:{path:n.base?.path??r,min:e.base?.min??n.base?.min??n.min,max:e.base?.max??n.base?.max??n.max},contentReference:e.contentReference,definition:e.definition}:void 0}return e}}isInnerType(e){let r=this.peek();return!!(st(e?.path,r?.path)&&e.type?.some(n=>["BackboneElement","Element"].includes(n.code)))}parseSliceStart(e){if(!this.slicingContext)throw new Error(`Invalid slice start before discriminator: ${e.sliceName} (${e.id})`);this.slicingContext.current={...this.parseElementDefinition(e),name:e.sliceName??"",definition:e.definition,elements:{}},this.slicingContext.field.slices.push(this.slicingContext.current)}parseElementDefinitionType(e){return(e.type??[]).map(r=>{let n;return(r.code==="BackboneElement"||r.code==="Element")&&(n=wr(e)),n||(n=ce(r,"http://hl7.org/fhir/StructureDefinition/structuredefinition-fhir-type")?.valueUrl),n||(n=r.code??""),{code:n,targetProfile:r.targetProfile,profile:r.profile}})}parseElementDefinition(e){let r=ko(e.max),n=e.base?.max?ko(e.base.max):r,i={type:"ElementDefinition",value:e};return{description:e.definition||"",path:e.path||e.base?.path||"",min:e.min??0,max:r,isArray:n>1,constraints:(e.constraint??[]).map(o=>({key:o.key??"",severity:o.severity??"error",expression:o.expression??"",description:o.human??""})),type:this.parseElementDefinitionType(e),fixed:Mo(_(i,"fixed[x]")),pattern:Mo(_(i,"pattern[x]")),binding:e.binding}}};function Dc(t,e){if(!t)return;let r=[];for(let n of e){r.push("_"+n);let i=$e[t.resourceType].elements[n+"[x]"];i&&r.push(...i.type.map(o=>n+U(o.code)))}for(let n of Object.getOwnPropertyNames(t))!e.includes(n)&&!r.includes(n)&&!Vc.includes(n)&&Object.defineProperty(t,n,{enumerable:!1,writable:!1,value:void 0});return t.meta={...t.meta,tag:t.meta?.tag?t.meta.tag.concat(Io):[Io]},t}var Io={system:"http://hl7.org/fhir/v3/ObservationValue",code:"SUBSETTED"},Vc=["resourceType","id","meta"];function ko(t){return t==="*"?Number.POSITIVE_INFINITY:Number.parseInt(t,10)}function Fn(t,e=""){return _c(t.path,e)}function _c(t,e){return t?e&&t.startsWith(e)?t.substring(e.length+1):t:""}function st(t,e){return!t||!e?!1:e.startsWith(t+".")||e===t}function Mo(t){return Array.isArray(t)&&t.length>0?t[0]:O(t)?void 0:t}function Lc(t){let e=t.slicing?.discriminator;return!!(t.type?.some(r=>r.code==="Extension")&&e?.length===1&&e[0].type==="value"&&e[0].path==="url")}function Nc(t){let e=t.description;return e?.startsWith(`Base StructureDefinition for ${t.name} Type: `)&&(e=e.substring(`Base StructureDefinition for ${t.name} Type: `.length)),e}function Dr(t,e,r){new Gn(t,e,r).crawl()}function Fc(t,e,r){return new Qn(t,e,r).crawl()}var Gn=class{constructor(e,r,n){c(this,"root");c(this,"visitor");c(this,"schema");c(this,"initialPath");c(this,"excludeMissingProperties");this.root=e,this.visitor=r,this.schema=n?.schema??xe(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}crawl(){this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}crawlObject(e,r,n){let i=D(e.value);if(i&&this.visitor.onEnterResource&&this.visitor.onEnterResource(n,e,r),this.visitor.onEnterObject&&this.visitor.onEnterObject(n,e,r),this.excludeMissingProperties)for(let o of Object.keys(e.value))this.crawlProperty(e,o,r,`${n}.${o}`);else for(let o of Object.keys(r.elements))this.crawlProperty(e,o,r,`${n}.${o}`);this.visitor.onExitObject&&this.visitor.onExitObject(n,e,r),i&&this.visitor.onExitResource&&this.visitor.onExitResource(n,e,r)}crawlProperty(e,r,n,i){let o=je(e,r,{withPath:!0});this.visitor.visitProperty&&this.visitor.visitProperty(e,r,i,o,n);for(let s of o)for(let a of te(s))this.crawlPropertyValue(a,i,n)}crawlPropertyValue(e,r,n){if(!Ct(e.type)){let i=n.innerTypes?.find(o=>o.name===e.type)??xe(e.type);this.crawlObject(e,i,r)}}},Qn=class{constructor(e,r,n){c(this,"root");c(this,"visitor");c(this,"schema");c(this,"initialPath");c(this,"excludeMissingProperties");this.root=e,this.visitor=r,this.schema=n?.schema??xe(e.type),this.initialPath=n?.initialPath??this.schema.path,this.excludeMissingProperties=n?.skipMissingProperties}async crawl(){return this.crawlObject({...this.root,path:this.initialPath},this.schema,this.initialPath)}async crawlObject(e,r,n){let i=D(e.value);if(i&&this.visitor.onEnterResource&&await this.visitor.onEnterResource(n,e,r),this.visitor.onEnterObject&&await this.visitor.onEnterObject(n,e,r),this.excludeMissingProperties&&e.value)for(let o of Object.keys(e.value))await this.crawlProperty(e,o,r,`${n}.${o}`);else for(let o of Object.keys(r.elements))await this.crawlProperty(e,o,r,`${n}.${o}`);this.visitor.onExitObject&&await this.visitor.onExitObject(n,e,r),i&&this.visitor.onExitResource&&await this.visitor.onExitResource(n,e,r)}async crawlProperty(e,r,n,i){let o=je(e,r,{withPath:!0});if(this.visitor.visitPropertyAsync)for(let s of o)await this.visitor.visitPropertyAsync(e,r,i,s,n);for(let s of o)for(let a of te(s))await this.crawlPropertyValue(a,i,n)}async crawlPropertyValue(e,r,n){if(!Ct(e.type)){let i=n.innerTypes?.find(o=>o.name===e.type)??xe(e.type);await this.crawlObject(e,i,r)}}};function je(t,e,r){if(t===void 0)return[void 0];if(e==="$this")return[t];let n=r?.withPath?Vr:_,[i,...o]=e.split("."),s=[n(t,i,r)];for(let a of o){let u=[];for(let l of s)if(Array.isArray(l))for(let d of l)u.push(n(d,a,r));else(r?.withPath&&l?.value!==void 0||!r?.withPath&&l!==void 0)&&u.push(n(l,a,r));s=u}return s}function Vr(t,e,r){let n=t.path;return Uc(_(t,e,r),n,e)}function Uc(t,e,r){let n=e?e+".":"";return t===void 0?{type:"undefined",value:void 0,path:`${n}${r}`}:Array.isArray(t)?t.map((i,o)=>({...i,path:`${n}${r}[${o}]`})):{...t,path:`${n}${r}`}}function He(t){if(t[0]===t[0].toUpperCase()){let e=t.indexOf(".");if(e===-1)return"";t=t.slice(e+1)}return`.${t}`.replaceAll(".","/").replaceAll(/\[(\d+)]/g,(e,r)=>`/${r}`)}var _r={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"},Bc=new ee(1e3);function Ct(t){return t==="undefined"||t in _r}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:/.*/},qc={"ele-1":!0,"dom-3":!0,"org-1":!0,"sdf-19":!0};function Wc(t,e){if(!Rt(t.resourceType))throw new m(T("Invalid resource type"));return Vo(E(t),e)}function Vo(t,e){return new zn(t,e).validate()}var zn=class{constructor(e,r){c(this,"issues");c(this,"root");c(this,"resourceStack");c(this,"schema");c(this,"base64BinaryMaxBytes");c(this,"collect");this.issues=[],this.root=e,this.resourceStack=[],D(e.value)&&this.resourceStack.push(e.value),r?.profile?this.schema=Or(r.profile):this.schema=xe(e.type),this.base64BinaryMaxBytes=r?.base64BinaryMaxBytes??1*1024*1024,this.collect=r?.collect}currentResource(){return this.resourceStack.at(-1)}validate(){Jn(this.root.value,this.schema.path,this.issues),this.constraintsCheck({...this.root,path:this.schema.path},this.schema),Dr(this.root,this,{schema:this.schema,initialPath:this.schema.path});for(let e of this.issues)if(e.severity==="error")throw new m({resourceType:"OperationOutcome",issue:this.issues});return this.issues}onExitObject(e,r,n){this.checkAdditionalProperties(r,n.elements,r.path)}onEnterResource(e,r){this.resourceStack.push(r.value)}onExitResource(){this.resourceStack.pop()}visitProperty(e,r,n,i,o){let s=o.elements[r];if(!s)throw new Error(`Missing element validation schema for ${r}`);for(let a of i){if(!this.checkPresence(a,s,n))return;let u;if(s.isArray){if(!Array.isArray(a)){this.issues.push(R(n,"Expected array of values for property"));return}u=a}else{if(Array.isArray(a)){this.issues.push(R(n,"Expected single value for property"));return}u=[a]}(u.length<s.min||u.length>s.max)&&this.issues.push(R(s.path,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${u.length}`)),Hc(a,s)||this.issues.push(R(n,"Value did not match expected pattern"));let l=s.slicing?Object.fromEntries(s.slicing.slices.map(d=>[d.name,0])):void 0;for(let d of u){this.constraintsCheck(d,s),this.referenceTypeCheck(d,s),this.checkPropertyValue(d),this.collectValue(d,s);let f=Gc(d,s.slicing);f&&l&&(l[f]+=1)}this.validateSlices(s.slicing?.slices,l,n)}}checkPresence(e,r,n){return!Array.isArray(e)&&e.value===void 0?(r.min>0&&this.issues.push(R(e.path,"Missing required property")),!1):O(e)?(this.issues.push(R(n,"Invalid empty value")),!1):!0}checkPropertyValue(e){Ct(e.type)?this.validatePrimitiveType(e):O(e.value)&&this.issues.push(R(e.path,"Invalid empty non-primitive value"))}validateSlices(e,r,n){if(!(!e||!r))for(let i of e){let o=r[i.name];(o<i.min||o>i.max)&&this.issues.push(R(n,`Incorrect number of values provided for slice '${i.name}': expected ${i.min}..${Number.isFinite(i.max)?i.max:"*"}, but found ${o}`))}}checkAdditionalProperties(e,r,n){let i=e.value;if(!i)return;let o={};for(let s of Object.keys(i)){if(s==="resourceType")continue;let a=jc(e,s,r);if(a){let u,l;a.startsWith("_")?(u=a.slice(1),l=s.slice(1)):(u="_"+a,l="_"+s),u in o&&o[u]!==l&&this.issues.push(ke("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(ke("warning","structure",`Conflicting choice of type properties: "${s}", "${o[a]}"`,s)),o[a]=s;continue}!(s in r)&&!(s.startsWith("_")&&s.slice(1)in r)&&i[s]!==void 0&&this.issues.push(R(`${n}.${s}`,`Invalid additional property "${s}"`))}}constraintsCheck(e,r){let n=r.constraints;for(let i of n??v)if(i.severity==="error"&&!(i.key in qc)&&!this.isExpressionTrue(i,e)){this.issues.push(_n(e.path,i));return}}referenceTypeCheck(e,r){if(e.type!=="Reference")return;let n=e.value;if(!J(n)||n.reference.startsWith("#"))return;let i=n.reference.includes("?")?n.reference.split("?")[0]:n.reference.split("/")[0];if(!i)return;let o=r.type.find(f=>f.code==="Reference")?.targetProfile;if(!o)return;let s=bt+"/fhir/StructureDefinition/",a=s+"Resource",u=s+i,l="https://medplum.com/fhir/StructureDefinition/",d=l+i;for(let f of o)if(f===a||f===u||f===d||!f.startsWith(s)&&!f.startsWith(l))return;this.issues.push(ke("warning","structure",`Invalid reference: got "${i}", expected "${o.join('", "')}"`,e.path))}collectValue(e,r){r.binding?.valueSet&&r.binding.strength==="required"&&zc(e.type)&&this.appendToken(r.binding.valueSet,e)}appendToken(e,r){if(!this.collect?.tokens)return;let n=this.collect.tokens[e];if(!n){let i=Object.keys(this.collect.tokens);for(let o of i)o.startsWith(e+"|")&&(n=this.collect.tokens[o])}for(let i of n??v)if(i.path===r.path)return;this.collect.tokens[e]=re(n,r)}isExpressionTrue(e,r){let n={"%context":r,"%ucum":E(Cn)},i=this.currentResource();i&&(n["%resource"]=E(i)),D(this.root.value)&&(n["%rootResource"]=this.root);try{let o=k(e.expression,[r],n,Bc);return o.length===1&&o[0].value===!0}catch(o){return this.issues.push(Ln(r.path,"Error evaluating invariant expression",o,{fhirpath:e.expression})),!1}}validatePrimitiveType(e){let[r,n]=Qc(e),i=e.path;if(r){let{type:o,value:s}=r;if(!(o in _r)){this.issues.push(R(i,`Invalid JSON type: ${o} is not a valid FHIR type`));return}let a=_r[o];if(typeof s!==a){s!==null&&this.issues.push(R(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&&Dr(n,this,{schema:xe("Element"),initialPath:i})}validateBase64Binary(e,r){if(!Jc(e)){this.issues.push(R(r,"Invalid base64Binary format"));return}let n=0;e.endsWith("==")?n=2:e.endsWith("=")&&(n=1),Math.max(0,Math.floor(e.length*3/4)-n)>this.base64BinaryMaxBytes&&this.issues.push(R(r,`base64Binary exceeds ${this.base64BinaryMaxBytes} bytes`))}validateString(e,r,n){if(!e.trim()){this.issues.push(R(n,"String must contain non-whitespace content"));return}if(e.length>1024*1024){this.issues.push(R(n,"String cannot be larger than 1 MB"));return}let i=Pt[r];i&&!i.exec(e)&&this.issues.push(R(n,"Invalid "+r+" format"))}validateNumber(e,r,n){Number.isNaN(e)||!Number.isFinite(e)?this.issues.push(R(n,"Invalid numeric value")):$c(r)&&!Number.isInteger(e)?this.issues.push(R(n,"Expected number to be an integer")):r===p.positiveInt&&e<=0?this.issues.push(R(n,"Expected number to be positive")):r===p.unsignedInt&&e<0&&this.issues.push(R(n,"Expected number to be non-negative"))}};function $c(t){return t===p.integer||t===p.positiveInt||t===p.unsignedInt}function jc(t,e,r){let n="";e.startsWith("_")&&(e=e.slice(1),n="_");let i=e.split(/(?=[A-Z])/g),o="";for(let s of i){o+=s;let a=o+"[x]";if(r[a])return _(t,o)?n+a:void 0}}function Jn(t,e,r){for(let[n,i]of Object.entries(t)){let o=`${e}.${n}`,s=n.startsWith("_")?n.slice(1):`_${n}`;if(i===null)r.push(R(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?r.push(R(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!t[s]?.[a]?r.push(R(`${o}[${a}]`,"Invalid null value")):i[a]&&Jn(i[a],`${o}[${a}]`,r);else typeof i=="object"&&Jn(i,o,r)}}function Hc(t,e){let r=Array.isArray(t)?t.map(n=>({type:n.type,value:n.value})):{type:t.type,value:t.value};return!(e.pattern&&!at(r,e.pattern)||e.fixed&&!ve(r,e.fixed))}function Lr(t,e,r,n){if(Array.isArray(t))return!1;let i;e.path==="$this"?i=r:i=(n??r.elements)[e.path];let o=r.type;switch(e.type){case"value":case"pattern":if(!t||!i)return!1;if(i.pattern)return at(t,i.pattern);if(i.fixed)return ve(t,i.fixed);if(i.binding?.strength==="required"&&i.binding.valueSet)return!0;break;case"type":return!t||!o?.length?!1:o.some(s=>s.code===t.type)}return!1}function Gc(t,e){for(let r of e?.slices??v)if(e?.discriminator?.every(n=>te(je(t,n.path))?.some(i=>Lr(i,n,r))))return r.name}function Qc(t){if(typeof t.value!="object"||!t.value)return[t,void 0];let e=t.value.valueOf();if(e===t.value)return[void 0,{type:"Element",value:t.value}];let r=new Set(Object.keys(e)),n=Object.entries(t.value).filter(([o,s])=>!r.has(o)),i=n.length>0?Object.fromEntries(n):void 0;return[{type:t.type,value:e},{type:"Element",value:i}]}function zc(t){switch(t){case"CodeableConcept":case"Coding":case"code":case"Quantity":case"string":case"uri":return!0;default:return!1}}function Jc(t){if(t.length===0)return!1;let e=0;t.endsWith("==")?e=2:t.endsWith("=")&&(e=1);let r=t.length-e;if(r<0||(e+r)%4!==0)return!1;let n=e>0?t.slice(0,-e):t;return/^[A-Za-z\d+/]+$/.test(n)}function y(t){return[{type:p.boolean,value:t}]}function E(t){return t==null?{type:"undefined",value:void 0}:Number.isSafeInteger(t)?{type:p.integer,value:t}:typeof t=="number"?{type:p.decimal,value:t}:typeof t=="boolean"?{type:p.boolean,value:t}:typeof t=="string"?{type:p.string,value:t}:L(t)?{type:p.Quantity,value:t}:D(t)?{type:t.resourceType,value:t}:Br(t)?{type:p.CodeableConcept,value:t}:Ur(t)?{type:p.Coding,value:t}:{type:p.BackboneElement,value:t}}function j(t){return t.length===0?!1:!!t[0].value}function N(t,e){if(t.length!==0){if(t.length===1&&(!e||t[0].type===e))return t[0];{let r=e?` of type ${e}`:"";throw new Error(`Expected singleton${r}, but found ${JSON.stringify(t)}`)}}}function _(t,e,r){if(!t.value)return;let n=Ot(t.type,e,r?.profileUrl);return n?Fo(t,e,n):Uo(t,e)}function Fo(t,e,r){let n=t.value,i=r.type;if(!i||i.length===0)return;let o,s="undefined",a,u=r.path.lastIndexOf("."),l=r.path.substring(u+1),d=l,f=!1;l.endsWith("[x]")&&(d=l.substring(0,l.length-3),f=!0);for(let h of i){let b=d;if(f&&(b+=U(h.code)),o=n[b],a=n["_"+b],o!==void 0||a!==void 0){s=h.code;break}}if(a)if(Array.isArray(o)){o=o.slice();for(let h=0;h<Math.max(o.length,a.length);h++)o[h]=Kn(o[h],a[h])}else if(!o&&Array.isArray(a)){o=a.slice();for(let h=0;h<a.length;h++)o[h]=Kn(void 0,a[h])}else o=Kn(o,a);if(!O(o))return(s==="Element"||s==="BackboneElement")&&(s=r.type[0].code),Array.isArray(o)?o.map(h=>_o(h,s)):_o(o,s)}function _o(t,e){return e==="Resource"&&D(t)&&(e=t.resourceType),{type:e,value:t}}function Uo(t,e){let r=t.value;if(!r||typeof r!="object")return;let n;if(e in r){let i=r[e];Array.isArray(i)?n=i.map(E):n=E(i)}else{let i=e.endsWith("[x]")?e.substring(0,e.length-3):e;for(let o of Object.values(p)){let s=i+U(o);if(s in r){let a=r[s];Array.isArray(a)?n=a.map(u=>({type:o,value:u})):n={type:o,value:a};break}}}if(Array.isArray(n)){if(n.length===0||O(n[0]))return}else if(O(n))return;return n}function At(t){let e=[];for(let r of t){let n=!1;for(let i of e)if(j(ct(r,i))){n=!0;break}n||e.push(r)}return e}function Yn(t){return y(!j(t))}function Xn(t,e){return t.length===0||e.length===0?[]:t.length!==e.length?y(!1):y(t.every((r,n)=>j(ct(r,e[n]))))}function Zn(t,e){return t.length===0||e.length===0?[]:t.length!==e.length?y(!0):y(t.some((r,n)=>!j(ct(r,e[n]))))}function ct(t,e){let r=t.value?.valueOf(),n=e.value?.valueOf();return typeof r=="number"&&typeof n=="number"?y(Math.abs(r-n)<1e-8):L(r)&&L(n)?y(ri(r,n)):y(typeof r=="object"&&typeof n=="object"?ni(t,e):r===n)}function Fr(t,e){return t.length===0&&e.length===0?y(!0):t.length!==e.length?y(!1):(t.sort(Lo),e.sort(Lo),y(t.every((r,n)=>j(Bo(r,e[n])))))}function Bo(t,e){let{type:r,value:n}=t,{type:i,value:o}=e,s=n?.valueOf(),a=o?.valueOf();return typeof s=="number"&&typeof a=="number"?y(Math.abs(s-a)<.01):L(s)&&L(a)?y(ri(s,a)):y(r==="Coding"&&i==="Coding"?typeof s!="object"||typeof a!="object"?!1:s.code===a.code&&s.system===a.system:typeof s=="object"&&typeof a=="object"?ni({...s,id:void 0},{...a,id:void 0}):typeof s=="string"&&typeof a=="string"?s.toLowerCase()===a.toLowerCase():s===a)}function Lo(t,e){let r=t.value?.valueOf(),n=e.value?.valueOf();return typeof r=="number"&&typeof n=="number"?r-n:typeof r=="string"&&typeof n=="string"?r.localeCompare(n):0}function Qe(t,e){let{value:r}=t;if(r==null)return!1;let n=e;switch(n.startsWith("System.")&&(n=n.substring(7)),n.startsWith("FHIR.")&&(n=n.substring(5)),n){case"Boolean":return typeof r=="boolean";case"Decimal":case"Integer":return typeof r=="number";case"Date":return ei(r);case"DateTime":return Ge(r);case"Time":return typeof r=="string"&&!!/^T\d/.exec(r);case"Period":return ti(r);case"Quantity":return L(r);default:return t.type===n||typeof r=="object"&&r?.resourceType===n}}function ei(t){return typeof t=="string"&&!!Pt.date.exec(t)}function Ge(t){return typeof t=="string"&&!!Pt.dateTime.exec(t)}function ti(t){return!!(t&&typeof t=="object"&&("start"in t&&Ge(t.start)||"end"in t&&Ge(t.end)))}function wt(t){if(ei(t)||Ge(t))return{start:Nr(t,"0000-01-01T00:00:00.000"),end:Nr(t,"xxxx-12-31T23:59:59.999")};if(ti(t))return{start:t.start?Nr(t.start,"0000-01-01T00:00:00.000"):void 0,end:t.end?Nr(t.end,"xxxx-12-31T23:59:59.999"):void 0}}function Nr(t,e){let r="Z",n=Math.max(t.indexOf("+",10),t.indexOf("-",10));n>-1?(r=t.substring(n),t=t.substring(0,n)):t.endsWith("Z")&&(t=t.substring(0,t.length-1));let i=t+e.substring(t.length)+r;return new Date(i).toISOString()}function L(t){return!!(t&&typeof t=="object"&&"value"in t&&typeof t.value=="number")}function ri(t,e){return Math.abs(t.value-e.value)<.01&&(t.unit===e.unit||t.code===e.code||t.unit===e.code||t.code===e.unit)}function ni(t,e){let r=Object.keys(t),n=Object.keys(e);if(r.length!==n.length)return!1;for(let i of r){let o=t[i],s=e[i];if(No(o)&&No(s)){if(!ni(o,s))return!1}else if(o!==s)return!1}return!0}function No(t){return t!==null&&typeof t=="object"}function Kn(t,e){if(e){if(typeof e!="object")throw new Error("Primitive extension must be an object");return Kc(t??{},e)}return t}function Kc(t,e){return delete e.__proto__,delete e.constructor,Object.assign(t,e)}function ut(t,e){return D(t,e)&&"id"in t&&typeof t.id=="string"}function ne(t){let e=I(t)??"undefined/undefined",r=$o(t);return r===e?{reference:e}:{reference:e,display:r}}function I(t){if(J(t))return t.reference;if(ut(t))return`${t.resourceType}/${t.id}`}function K(t){if(t)return J(t)?t.reference.split("/")[1]:t.id}function Yc(t){if(t?.reference===void 0)throw new m(T("Reference missing reference property."));let[e,r]=t.reference.split("/");if(e===""||r===""||r===void 0)throw new m(T("Unable to parse reference string."));return[e,r]}function Wr(t){if(t)if(t.accounts&&t.account){let e=t.accounts;return e.some(r=>r.reference===t.account?.reference)?e:[t.account,...e]}else return te(t.accounts??t.account)}function Wo(t){return t.resourceType==="Patient"||t.resourceType==="Practitioner"||t.resourceType==="RelatedPerson"}function $o(t){if(Wo(t)){let e=Xc(t);if(e)return e}if(t.resourceType==="Appointment"&&t.serviceType?.[0])return Te(t.serviceType[0]);if(t.resourceType==="Device"){let e=Zc(t);if(e)return e}if(t.resourceType==="DocumentReference"){if(t.description)return t.description;if(t.type)return Te(t.type)}if(t.resourceType==="MedicationRequest"&&t.medicationCodeableConcept)return Te(t.medicationCodeableConcept);if(t.resourceType==="MedicationStatement"&&t.medicationCodeableConcept)return Te(t.medicationCodeableConcept);if(t.resourceType==="Slot"&&(t.start||t.end))return`${ze(t.start)} - ${ze(t.end)}`;if(t.resourceType==="Subscription"&&t.criteria)return t.criteria;if(t.resourceType==="User"&&t.email)return t.email;if("name"in t&&t.name&&typeof t.name=="string")return t.name;if("code"in t&&t.code){let e=t.code;if(Array.isArray(e)&&(e=e[0]),Br(e))return Te(e);if(Qo(e))return e.text}return I(t)??""}function Xc(t){let e=t.name;if(e&&e.length>0)return lt(e[0])}function Zc(t){let e=t.deviceName;if(e&&e.length>0)return e[0].name}function eu(t){if(!("photo"in t))return;let e=t.photo;if(e)if(Array.isArray(e))for(let r of e){let n=qo(r);if(n)return n}else return qo(e)}function qo(t){if(t.url&&t.contentType?.startsWith("image/"))return t.url}function tu(t){return t?new Date(t):void 0}function It(t,e){let r=new Date(t);r.setUTCHours(0,0,0,0);let n=e?new Date(e):new Date;n.setUTCHours(0,0,0,0);let i=r.getUTCFullYear(),o=r.getUTCMonth(),s=r.getUTCDate(),a=n.getUTCFullYear(),u=n.getUTCMonth(),l=n.getUTCDate(),d=a-i;(u<o||u===o&&l<s)&&d--;let f=a*12+u-(i*12+o);l<s&&f--;let h=Math.floor((n.getTime()-r.getTime())/(1e3*60*60*24));return{years:d,months:f,days:h}}function ru(t,e){let{years:r,months:n,days:i}=It(t,e);return r>=2?r.toString().padStart(3,"0")+"Y":n>=1?n.toString().padStart(3,"0")+"M":i.toString().padStart(3,"0")+"D"}function nu(t){let e={};return jo(t.item,e),e}function jo(t,e){for(let r of t??v)r.linkId&&r.answer&&r.answer.length>0&&(e[r.linkId]=r.answer[0]),jo(r.item,e)}function iu(t){let e={};return Ho(t.item,e),e}function Ho(t,e){for(let r of t??v)r.linkId&&r.answer&&r.answer.length>0&&(e[r.linkId]?e[r.linkId]=[...e[r.linkId],...r.answer]:e[r.linkId]=r.answer),Ho(r.item,e)}function $r(t,e){let r=t.identifier;if(!r)return;let n=Array.isArray(r)?r:[r];for(let i of n)if(i.system===e)return i.value}function ou(t,e,r,n){let i={system:e,value:r};n?.use&&(i.use=n.use);let o=t.identifier;if(!o){t.identifier=[i];return}for(let s of o)if(s.system===e){Object.assign(s,i);return}o.push(i)}function De(t,...e){let r=ce(t,...e);if(!r)return;let n=_({type:"Extension",value:r},"value[x]");if(n)return Array.isArray(n)?n[0].value:n.value}function ce(t,...e){let r=t;for(let n=0;n<e.length&&r;n++)r=r?.extension?.find(i=>i.url===e[n]);return r}function kt(t,e){let[r,...n]=te(e);if(!r)return[];let i=t?.extension?.filter(o=>o.url===r)??[];return n.length>0?i.flatMap(o=>kt(o,n)):i}function Mt(t,e){let r=ii(t);return JSON.stringify(r,null,e?2:void 0)??""}function ii(t){if(!(t==null||t===""))return typeof t=="object"?Array.isArray(t)?su(t):au(t):t}function su(t){let e=t.length;if(e===0)return;let r,n=0;for(let i=0;i<e;i++){let o=t[i],s=ii(o);s!==o&&!r&&(r=Array.from(t)),s===void 0?r&&(r[i]=null):(r&&(r[i]=s),n++)}if(n!==0)return r??t}function au(t){let e,r=0;for(let n in t){let i=t[n],o=ii(i);o!==i&&!e&&(e={...t}),o===void 0?e&&delete e[n]:(e&&(e[n]=o),r++)}if(r!==0)return e??t}function O(t){if(t==null)return!0;let e=typeof t;return e==="string"||e==="object"?!le(t):!1}function le(t){if(t==null)return!1;let e=typeof t;return e==="string"&&t!==""||e==="object"&&("length"in t&&t.length>0||Object.keys(t).length>0)}function cu(t){if(!t)return;let e=t.length-1;for(;e>=0&&O(t[e]);)e--;return e>=0?t.slice(0,e+1):void 0}function ve(t,e,r){return t===e||O(t)&&O(e)?!0:O(t)||O(e)?!1:Array.isArray(t)&&Array.isArray(e)?uu(t,e):Array.isArray(t)||Array.isArray(e)?!1:C(t)&&C(e)?lu(t,e,r):(C(t)||C(e),!1)}function uu(t,e){if(t.length!==e.length)return!1;for(let r=0;r<t.length;r++)if(!ve(t[r],e[r]))return!1;return!0}function lu(t,e,r){let n=new Set;for(let i of Object.keys(t))n.add(i);for(let i of Object.keys(e))n.add(i);r==="meta"&&(n.delete("versionId"),n.delete("lastUpdated"),n.delete("author"));for(let i of n){let o=t[i],s=e[i];if(!ve(o,s,i))return!1}return!0}function at(t,e){return O(t)?!0:O(e)?!1:Array.isArray(t)&&Array.isArray(e)?du(t,e):Array.isArray(t)||Array.isArray(e)?!1:C(t)&&C(e)?pu(t,e):C(t)||C(e)?!1:t===e}function du(t,e){return e.every(r=>t.some(n=>at(n,r)))}function pu(t,e){return Object.entries(e).every(([r,n])=>r in t&&at(t[r],n))}function de(t){return t===void 0?t:JSON.parse(JSON.stringify(t))}function fu(t){return/^[0-9A-F]{8}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{4}-[0-9A-F]{12}$/i.test(t)}function C(t){return t!==null&&typeof t=="object"}function mu(t){return t.every(pe)}function pe(t){return typeof t=="string"}function Ur(t){return C(t)&&"code"in t&&typeof t.code=="string"}function Br(t){return C(t)&&"coding"in t&&Array.isArray(t.coding)&&t.coding.every(Ur)}function hu(t,e){for(let r of t??v)for(let n of r.coding??v)if(n.system===e)return n.code}function Go(t,e){let[r,n]=Je(e,"|",2);return n===void 0?t.code===e:r===""?t.system===void 0&&t.code===n:n===""?t.system===r:t.system===r&&t.code===n}function gu(t,e){return(t.coding??v).some(r=>Go(r,e))}function Qo(t){return C(t)&&"text"in t&&typeof t.text=="string"}var zo=[];for(let t=0;t<256;t++)zo.push(t.toString(16).padStart(2,"0"));function oi(t){let e=ai(t),r=new Uint8Array(e),n=new Array(r.length);for(let i=0;i<r.length;i++)n[i]=zo[r[i]];return n.join("")}function si(t){let e=ai(t),r=new Uint8Array(e),n=new Array(r.length);for(let i=0;i<r.length;i++)n[i]=String.fromCodePoint(r[i]);return window.btoa(n.join(""))}function ai(t){return ArrayBuffer.isView(t)?t.buffer:t}function U(t){return t?t.charAt(0).toUpperCase()+t.substring(1):""}function yu(t){return t===t.toLowerCase()&&t!==t.toUpperCase()}function jr(t){return t.length>0&&t.startsWith(t[0].toUpperCase())}function Se(t,e){let r=t+".";if(e.startsWith(r))return e.slice(r.length)}function qr(t,e){return t.coding?.find(r=>r.system===e)?.code}function xu(t,e,r){t.coding??=[];let n=t.coding.find(i=>i.system===e);n?n.code=r:t.coding.push({system:e,code:r})}function vu(t,e,r,n){return t.qualifiedInterval?.find(i=>Ko(i,e)&&Eu(i,r,t.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function Tu(t,e,r){return Jo(t,e,r)[0]}function Jo(t,e,r){return t.qualifiedInterval?.filter(n=>Ko(n,e)&&(!r||r.includes(n.condition)))??[]}function Ko(t,e){return Su(t,e)&&bu(t,e)}function Su(t,e){return!t.gender||t.gender===e.gender}function bu(t,e){return!t.age||ci(It(e.birthDate).years,t.age)}function Eu(t,e,r){return!!t.range&&ci(e,t.range,r)}function ci(t,e,r){return(e.low?.value===void 0||Xo(t,e.low.value,r))&&(e.high?.value===void 0||Yo(t,e.high.value,r))}function Ru(t,e){return Number.parseFloat(t.toFixed(e))}function Cu(t,e,r){return ue(t,r)===ue(e,r)}function Pu(t,e,r){return ue(t,r)<ue(e,r)}function Au(t,e,r){return ue(t,r)>ue(e,r)}function Yo(t,e,r){return ue(t,r)<=ue(e,r)}function Xo(t,e,r){return ue(t,r)>=ue(e,r)}function ue(t,e){return e===void 0?t:Math.round(t*Math.pow(10,e))}function wu(t,e,r){return t.find(n=>typeof e=="string"?qr(n.code||{},r)===e:qr(n.code||{},r)===qr(e,r))}function Ou(t){return Array.isArray(t)?t[0]:t}var Hr=(t,e)=>new Promise((r,n)=>{e?.signal?.throwIfAborted();let i=setTimeout(r,t);e?.signal?.addEventListener("abort",()=>{clearTimeout(i),n(e.signal?.reason)},{once:!0})});function Je(t,e,r){let n=[];for(let i=0;i<r-1;i++){let o=t.indexOf(e);if(o<0)break;n.push(t.slice(0,o)),t=t.slice(o+e.length)}return n.push(t),n}function ui(t){let e,r=!1;return function(){return r||(e=t(),r=!0),e}}function re(t,e){return t?(t.push(e),t):[e]}function Dt(t){return t.sort((e,r)=>e.localeCompare(r))}function Gr(t){return t.endsWith("/")?t:t+"/"}function Zo(t){return t.startsWith("/")?t.slice(1):t}function W(t,e){return new URL(Zo(e),Gr(t.toString())).toString()}function li(t,e){return W(t,e).toString().replace("http://","ws://").replace("https://","wss://")}function di(t){return typeof t=="object"&&!Array.isArray(t)&&!(t instanceof URLSearchParams)&&(t=Object.fromEntries(Object.entries(t).filter(e=>e[1]!==void 0))),new URLSearchParams(t).toString()}var es=/^(([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 Iu(t){return es.test(t)}function ku(t,e){return t?.meta?.profile?.includes(e)||(t.meta=t.meta??{},t.meta.profile=t.meta.profile??[],t.meta.profile.push(e)),t}function Mu(t,e){return new Map(t.entry?.filter(n=>!!n.resource).map(n=>[$r(n.resource,e),n.resource]).filter(([n])=>n!==void 0))}function Du(t,e){if(t?.meta?.profile?.includes(e)){let r=t.meta.profile.indexOf(e);t.meta.profile.splice(r,1)}return t}function Vu(t,e){let r=[];if(!t)return r;for(let n=0;n<t.length;n++){let i=e(t[n],n);Array.isArray(i)?r.push(...i):i!==void 0&&r.push(i)}return r}function _u(t,e){let r=0;for(let n of t)r+=e(n);return r}function Lu(t,e){let r=0;for(let n of t)e(n)&&r++;return r}function Nu(t,e){let r={};for(let n of t){let i=e(n);r[i]=(r[i]??0)+1}return r}function Fu(t){return t.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""").replaceAll("\u201C","“").replaceAll("\u201D","”").replaceAll("\u2018","‘").replaceAll("\u2019","’").replaceAll("\u2026","…")}function Vt(t){return t!=null}function Uu(t){throw new Error(`Unexpected value: ${JSON.stringify(t)}`)}var v=Object.freeze([]),Bu=()=>{};function pi(t){if(!t)return"";switch(t.type){case"Address":return rs(t.value);case"CodeableConcept":return Te(t.value);case"Coding":return fi(t.value);case"ContactPoint":return t.value.value;case"HumanName":return lt(t.value);case"Quantity":return be(t.value);case"Reference":return ts(t.value);default:return t.value?.toString()??""}}function ts(t){return t?t.display??t.reference??Mt(t):""}function rs(t,e){if(!t)return"";let r=[];if(t.line&&r.push(...t.line),t.city||t.state||t.postalCode){let n=[];t.city&&n.push(t.city),t.state&&n.push(t.state),t.postalCode&&n.push(t.postalCode),r.push(n.join(", "))}return t.use&&(e?.all||e?.use)&&r.push("["+t.use+"]"),r.join(e?.lineSeparator??", ").trim()}function lt(t,e){if(!t)return"";let r=[];if(t.prefix&&e?.prefix!==!1&&r.push(...t.prefix),t.given&&r.push(...t.given),t.family&&r.push(t.family),t.suffix&&e?.suffix!==!1&&r.push(...t.suffix),t.use&&(e?.all||e?.use)&&r.push("["+t.use+"]"),r.length===0){let n=Ke(t.text);if(n)return n}return r.join(" ").trim()}function qu(t){let e=[];return t.given&&e.push(...t.given),e.join(" ").trim()}function Wu(t){return Ke(t.family)??""}function _t(t){return t instanceof Date&&!Number.isNaN(t.getTime())}function $u(t,e,r){if(!t)return"";let n=new Date(t);return _t(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...r})):""}function ju(t,e,r){if(!t)return"";let n=new Date("2000-01-01T"+t+"Z");return _t(n)?n.toLocaleTimeString(e,r):""}function ns(t,e,r){if(!t)return"";let[n=0,i=0,o=0]=t.split(":").map(Number),s=new Date(Date.UTC(1970,0,1,n,i,o));return _t(s)?new Intl.DateTimeFormat(e,{hour:"numeric",minute:"2-digit",second:o===0?void 0:"numeric",...r,timeZone:"UTC"}).format(s):""}function ze(t,e,r){if(!t)return"";let n=new Date(t);return _t(n)?n.toLocaleString(e,r):""}function Hu(t,e,r){return!t||!t.start&&!t.end?"":ze(t.start,e,r)+" - "+ze(t.end,e,r)}var Gu={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},Qu={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},zu={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function Ju(t){if(!t)return"";let e=[];return Ku(e,t.repeat),t.event&&e.push(t.event.map(r=>ze(r)).join(", ")),U(e.join(" ").trim())}function Ku(t,e){if(!e?.periodUnit)return;let r=e.frequency??1,n=e.period??1,i=e.periodUnit;r===1&&n===1?t.push(Gu[i]):(r===1?t.push("once"):t.push(r+" times"),n===1?t.push("per "+Qu[i]):t.push("per "+n+" "+zu[i])),e.dayOfWeek&&t.push("on "+e.dayOfWeek.map(U).join(", ")),e.timeOfDay&&t.push("at "+e.timeOfDay.map(o=>ns(o)).join(", "))}function Yu(t,e,r=!1){if(r&&e===void 0)throw new Error("Precision must be specified for exclusive ranges");let n=t?.low&&{...t.low,comparator:void 0},i=t?.high&&{...t.high,comparator:void 0};return n?.value===void 0&&i?.value===void 0?"":n?.value!==void 0&&i?.value===void 0?r&&e!==void 0?(n.value=el(n.value,e),`> ${be(n,e)}`):`>= ${be(n,e)}`:n?.value===void 0&&i?.value!==void 0?r&&e!==void 0?(i.value=Zu(i.value,e),`< ${be(i,e)}`):`<= ${be(i,e)}`:(n?.unit===i?.unit&&delete n?.unit,`${be(n,e)} - ${be(i,e)}`)}function be(t,e){if(!t)return"";let r=[];return t.comparator&&(r.push(t.comparator),r.push(" ")),t.value!==void 0&&(e!==void 0?r.push(t.value.toFixed(e)):r.push(t.value)),t.unit&&(t.unit!=="%"&&r.at(-1)!==" "&&r.push(" "),r.push(t.unit)),r.join("").trim()}function Xu(t){return t?.value===void 0?"":t.value.toLocaleString(void 0,{style:"currency",currency:t.currency??"USD",currencyDisplay:"narrowSymbol"})}function Te(t){if(!t)return"";let e=Ke(t.text);return e||(t.coding?t.coding.map(r=>fi(r)).join(", "):"")}function fi(t,e){let r=Ke(t?.display);if(r){let n=e?Ke(t?.code):void 0;return`${r}${n?" ("+n+")":""}`}return Ke(t?.code)??""}function is(t){if(!t)return"";let e=[];if(t.valueQuantity)e.push(be(t.valueQuantity));else if(t.valueCodeableConcept)e.push(Te(t.valueCodeableConcept));else{let r=Ke(t.valueString);r&&e.push(r)}return"component"in t&&e.push(t.component.map(r=>is(r)).join(" / ")),e.join(" / ").trim()}function Ke(t){return typeof t=="string"?t:void 0}function Zu(t,e,r=1){return(os(t,e)+r)*Math.pow(10,-e)}function el(t,e,r=1){return(os(t,e)-r)*Math.pow(10,-e)}function os(t,e){return e===void 0?t:Math.round(t*Math.pow(10,e))}var p={Address:"Address",Age:"Age",Annotation:"Annotation",Attachment:"Attachment",BackboneElement:"BackboneElement",CodeableConcept:"CodeableConcept",Coding:"Coding",ContactDetail:"ContactDetail",ContactPoint:"ContactPoint",Contributor:"Contributor",Count:"Count",DataRequirement:"DataRequirement",Distance:"Distance",Dosage:"Dosage",Duration:"Duration",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 tl(t){for(let e of t.entry??v){let r=e.resource;r.resourceType==="SearchParameter"&&Qr(r)}}function Hn(t){let e=Array.isArray(t)?t:t.entry?.map(r=>r.resource)??[];for(let r of e)r?.resourceType==="StructureDefinition"&&r.kind==="resource"&&as(r.type)}function as(t){let e=H.types[t];e||(e={searchParamsDetails:{}},H.types[t]=e);let r;return!e.searchParams&&t!=="Binary"&&(e.searchParams={_id:{base:[t],code:"_id",type:"token",expression:t+".id"},_lastUpdated:{base:[t],code:"_lastUpdated",type:"date",expression:t+".meta.lastUpdated"},_compartment:{base:[t],code:"_compartment",type:"reference",expression:t+".meta.compartment",get target(){return r??=us(),r}},_profile:{base:[t],code:"_profile",type:"uri",expression:t+".meta.profile"},_security:{base:[t],code:"_security",type:"token",expression:t+".meta.security"},_source:{base:[t],code:"_source",type:"uri",expression:t+".meta.source"},_tag:{base:[t],code:"_tag",type:"token",expression:t+".meta.tag"},_project:{base:[t],code:"_project",type:"token",expression:t+".meta.project"}}),e}function Qr(t){for(let e of t.base??v){let r=as(e);r.searchParams||(r.searchParams={}),r.searchParams[t.code]=t}}function wr(t){let e=t.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?cs((t.base?.path??t.path)?.split(".")):e}function cs(t){return t.length===1?t[0]:t.map(U).join("")}function Mr(t){return t.kind==="resource"&&t.name!=="Resource"&&t.name!=="DomainResource"}function us(){return Object.values(qn()).filter(Mr).map(t=>t.name)}function rl(t){return H.types[t]?.searchParams}function nl(t,e){return H.types[t]?.searchParams?.[e]}function il(t){let e=t.replaceAll("[x]","").split(".").pop();return ls(e)}function ls(t){let e;return t.length<100?e=t.match(/[A-Z]+(?![a-z])|[A-Z]?[a-z]+|\d+/g)??[]:e=t.split(/(?=[A-Z])/),e.map(sl).join(" ").replace("_"," ").replaceAll(/\s+/g," ")}var ol=new Set(["CDS","ID","IP","JWKS","PKCE","OMB","OID","SOP","UDI","UID","URI","URL"]);function sl(t){let e=t.toUpperCase();return t===e?t:ol.has(e)?e:e.charAt(0)+t.slice(1)}function Ot(t,e,r){let n=Me(t,r);if(n)return mi(n.elements,e)}function mi(t,e){let r=t[e]??t[e+"[x]"];if(r)return r;for(let n=0;n<e.length;n++){let i=e[n];if(i>="A"&&i<="Z"){let o=e.slice(0,n)+"[x]",s=t[o];if(s)return s}}}function hi(t,e,r){let n=e.split(/[.[\]]/g),i=Me(t,r);if(!i)return;let o=i,s;for(let a of n){let u;if(a.match(/^[a-z]/)){let l=mi(o.elements,a);if(!l)return;if(l.type.length>1)throw new Error("Multiple matching types in path "+e);u=Me(l.type[0].code),s=l}u&&(o=u)}return s}function al(t){return!!(t&&typeof t=="object"&&"type"in t&&"value"in t)}function D(t,e){return!(!t||typeof t!="object"||!("resourceType"in t)||e&&t.resourceType!==e)}function J(t,e){return t&&typeof t=="object"&&"reference"in t&&typeof t.reference=="string"?e?t.reference.match(new RegExp(`^${e}(/|\\?)`))!==null:!0:!1}var H={types:{}};function gi(t){switch(t.type){case p.uuid:case p.uri:case p.url:case p.string:case p.oid:case p.markdown:case p.id:case p.code:case p.canonical:case p.base64Binary:case p.SystemString:case p.date:case p.dateTime:case p.instant:return t.value;case p.Identifier:return`${t.value.system??""}|${t.value.value}`;case p.Coding:return ss(t.value);case p.CodeableConcept:return t.value.coding?.map(ss).join(",")??t.value.text;case p.HumanName:return t.value.text?t.value.text:lt(t.value);case p.unsignedInt:case p.positiveInt:case p.integer:case p.decimal:return t.value.toString();case p.boolean:return t.value?"true":"false";case p.Extension:return t.value.url;case p.ContactPoint:return t.value.value;case p.Quantity:case p.Age:case p.Count:case p.Duration:return`${t.value.value}|${t.value.system??""}|${t.value.code??t.value.unit??""}`;case p.Reference:return t.value.reference;default:return ut(t.value)?I(t.value):JSON.stringify(t)}}function ss(t){return t?`${t.system??""}|${t.code}`:""}function dt(t){if(t.startsWith("T"))return t+"T00:00:00.000Z".substring(t.length);if(t.length<=10)return t;try{return new Date(t).toISOString()}catch{return t}}var Ee=()=>[];function Lt(t){return t instanceof F?t.name:t instanceof ie&&t.left instanceof F&&t.right instanceof F?t.left.name+"."+t.right.name:""}var B={empty:(t,e)=>y(e.every(r=>O(r.value))),hasValue:(t,e)=>y(e.length!==0),exists:(t,e,r)=>r?y(e.some(n=>j(r.eval(t,[n])))):y(e.length>0&&e.every(n=>!O(n.value))),all:(t,e,r)=>y(e.every(n=>j(r.eval(t,[n])))),allTrue:(t,e)=>{for(let r of e)if(!r.value)return y(!1);return y(!0)},anyTrue:(t,e)=>{for(let r of e)if(r.value)return y(!0);return y(!1)},allFalse:(t,e)=>{for(let r of e)if(r.value)return y(!1);return y(!0)},anyFalse:(t,e)=>{for(let r of e)if(!r.value)return y(!0);return y(!1)},subsetOf:(t,e,r)=>{if(e.length===0)return y(!0);let n=r.eval(t,Ye(t));return n.length===0?y(!1):y(e.every(i=>n.some(o=>o.value===i.value)))},supersetOf:(t,e,r)=>{let n=r.eval(t,Ye(t));return n.length===0?y(!0):e.length===0?y(!1):y(n.every(i=>e.some(o=>o.value===i.value)))},count:(t,e)=>[{type:p.integer,value:e.length}],distinct:(t,e)=>{let r=[];for(let n of e)r.some(i=>i.value===n.value)||r.push(n);return r},isDistinct:(t,e)=>y(e.length===B.distinct(t,e).length),where:(t,e,r)=>e.filter(n=>j(r.eval(t,[n]))),select:(t,e,r)=>e.flatMap(n=>r.eval({parent:t,variables:{$this:n}},[n])),repeat:Ee,ofType:(t,e,r)=>{let n=Lt(r);return n?e.filter(i=>Qe(i,n)):[]},single:(t,e)=>{if(e.length>1)throw new Error("Expected input length one for single()");return e.length===0?[]:e.slice(0,1)},first:(t,e)=>e.length===0?[]:e.slice(0,1),last:(t,e)=>e.length===0?[]:e.slice(-1,e.length),tail:(t,e)=>e.length===0?[]:e.slice(1,e.length),skip:(t,e,r)=>{let n=r.eval(t,e)[0]?.value;if(typeof n!="number")throw new TypeError("Expected a number for skip(num)");return n>=e.length?[]:n<=0?e:e.slice(n,e.length)},take:(t,e,r)=>{let n=r.eval(t,e)[0]?.value;if(typeof n!="number")throw new TypeError("Expected a number for take(num)");return n<=0?[]:e.slice(0,n)},intersect:(t,e,r)=>{if(!r)return e;let n=r.eval(t,Ye(t)),i=[];for(let o of e)!i.some(s=>s.value===o.value)&&n.some(s=>s.value===o.value)&&i.push(o);return i},exclude:(t,e,r)=>{if(!r)return e;let n=r.eval(t,Ye(t)),i=[];for(let o of e)n.some(s=>s.value===o.value)||i.push(o);return i},union:(t,e,r)=>{if(!r)return e;let n=r.eval(t,Ye(t));return At([...e,...n])},combine:(t,e,r)=>{if(!r)return e;let n=r.eval(t,Ye(t));return[...e,...n]},htmlChecks:(t,e,r)=>[E(!0)],iif:(t,e,r,n,i)=>{let o=r.eval(t,e);if(o.length>1||o.length===1&&typeof o[0].value!="boolean")throw new Error("Expected criterion to evaluate to a Boolean");return j(o)?n.eval(t,e):i?i.eval(t,e):[]},toBoolean:(t,e)=>{if(e.length===0)return[];let[{value:r}]=me(e,1);if(typeof r=="boolean")return[{type:p.boolean,value:r}];if(typeof r=="number"&&(r===0||r===1))return y(!!r);if(typeof r=="string"){let n=r.toLowerCase();if(["true","t","yes","y","1","1.0"].includes(n))return y(!0);if(["false","f","no","n","0","0.0"].includes(n))return y(!1)}return[]},convertsToBoolean:(t,e)=>e.length===0?[]:y(B.toBoolean(t,e).length===1),toInteger:(t,e)=>{if(e.length===0)return[];let[{value:r}]=me(e,1);return typeof r=="number"?[{type:p.integer,value:r}]:typeof r=="string"&&/^[+-]?\d+$/.exec(r)?[{type:p.integer,value:Number.parseInt(r,10)}]:typeof r=="boolean"?[{type:p.integer,value:r?1:0}]:[]},convertsToInteger:(t,e)=>e.length===0?[]:y(B.toInteger(t,e).length===1),toDate:(t,e)=>{if(e.length===0)return[];let[{value:r}]=me(e,1);return typeof r=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(r)?[{type:p.date,value:dt(r)}]:[]},convertsToDate:(t,e)=>e.length===0?[]:y(B.toDate(t,e).length===1),toDateTime:(t,e)=>{if(e.length===0)return[];let[{value:r}]=me(e,1);return typeof r=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(r)?[{type:p.dateTime,value:dt(r)}]:[]},convertsToDateTime:(t,e)=>e.length===0?[]:y(B.toDateTime(t,e).length===1),toDecimal:(t,e)=>{if(e.length===0)return[];let[{value:r}]=me(e,1);return typeof r=="number"?[{type:p.decimal,value:r}]:typeof r=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(r)?[{type:p.decimal,value:Number.parseFloat(r)}]:typeof r=="boolean"?[{type:p.decimal,value:r?1:0}]:[]},convertsToDecimal:(t,e)=>e.length===0?[]:y(B.toDecimal(t,e).length===1),toQuantity:(t,e)=>{if(e.length===0)return[];let[{value:r}]=me(e,1);return L(r)?[{type:p.Quantity,value:r}]:typeof r=="number"?[{type:p.Quantity,value:{value:r,unit:"1"}}]:typeof r=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(r)?[{type:p.Quantity,value:{value:Number.parseFloat(r),unit:"1"}}]:typeof r=="boolean"?[{type:p.Quantity,value:{value:r?1:0,unit:"1"}}]:[]},convertsToQuantity:(t,e)=>e.length===0?[]:y(B.toQuantity(t,e).length===1),toString:(t,e)=>{if(e.length===0)return[];let[{value:r}]=me(e,1);return r==null?[]:L(r)?[{type:p.string,value:`${r.value} '${r.unit}'`}]:[{type:p.string,value:r.toString()}]},convertsToString:(t,e)=>e.length===0?[]:y(B.toString(t,e).length===1),toTime:(t,e)=>{if(e.length===0)return[];let[{value:r}]=me(e,1);if(typeof r=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(r);if(n)return[{type:p.time,value:dt("T"+n[1])}]}return[]},convertsToTime:(t,e)=>e.length===0?[]:y(B.toTime(t,e).length===1),indexOf:(t,e,r)=>Y((n,i)=>n.indexOf(i),t,e,r),substring:(t,e,r,n)=>Y((i,o,s)=>{let a=o,u=s?a+s:i.length;return a<0||a>=i.length?void 0:i.substring(a,u)},t,e,r,n),startsWith:(t,e,r)=>Y((n,i)=>n.startsWith(i),t,e,r),endsWith:(t,e,r)=>Y((n,i)=>n.endsWith(i),t,e,r),contains:(t,e,r)=>Y((n,i)=>n.includes(i),t,e,r),upper:(t,e)=>Y(r=>r.toUpperCase(),t,e),lower:(t,e)=>Y(r=>r.toLowerCase(),t,e),replace:(t,e,r,n)=>Y((i,o,s)=>i.replaceAll(o,s),t,e,r,n),matches:(t,e,r)=>Y((n,i)=>!!new RegExp(i).exec(n),t,e,r),replaceMatches:(t,e,r,n)=>Y((i,o,s)=>i.replaceAll(new RegExp(o,"g"),s.replaceAll(/\$\{(\w+)\}/g,"$<$1>")),t,e,r,n),length:(t,e)=>Y(r=>r.length,t,e),toChars:(t,e)=>Y(r=>r?r.split(""):void 0,t,e),encode:Ee,decode:Ee,escape:Ee,unescape:Ee,trim:Ee,split:Ee,join:(t,e,r)=>{let n=r?.eval(t,Ye(t))[0]?.value??"";if(typeof n!="string")throw new TypeError("Separator must be a string.");return[{type:p.string,value:e.map(i=>i.value?.toString()??"").join(n)}]},abs:(t,e)=>fe(Math.abs,t,e),ceiling:(t,e)=>fe(Math.ceil,t,e),exp:(t,e)=>fe(Math.exp,t,e),floor:(t,e)=>fe(Math.floor,t,e),ln:(t,e)=>fe(Math.log,t,e),log:(t,e,r)=>fe((n,i)=>Math.log(n)/Math.log(i),t,e,r),power:(t,e,r)=>fe(Math.pow,t,e,r),round:(t,e,...r)=>fe((n,i=0)=>{if(typeof i!="number"||i<0)throw new Error("Invalid precision provided to round()");let o=Math.pow(10,i);return Math.round(n*o)/o},t,e,...r),sqrt:(t,e)=>fe(Math.sqrt,t,e),truncate:(t,e)=>fe(r=>Math.trunc(r),t,e),children:Ee,descendants:Ee,trace:(t,e,r)=>e,now:()=>[{type:p.dateTime,value:new Date().toISOString()}],timeOfDay:()=>[{type:p.time,value:new Date().toISOString().substring(11)}],today:()=>[{type:p.date,value:new Date().toISOString().substring(0,10)}],between:(t,e,r,n,i)=>{let o=B.toDateTime(t,r.eval(t,e));if(o.length===0)throw new Error("Invalid start date");let s=B.toDateTime(t,n.eval(t,e));if(s.length===0)throw new Error("Invalid end date");let a=i.eval(t,e)[0]?.value;if(a!=="years"&&a!=="months"&&a!=="days")throw new Error("Invalid units");let u=It(o[0].value,s[0].value);return[{type:p.Quantity,value:{value:u[a],unit:a}}]},is:(t,e,r)=>{let n=Lt(r);return n?e.map(i=>({type:p.boolean,value:Qe(i,n)})):[]},not:(t,e)=>B.toBoolean(t,e).map(r=>({type:p.boolean,value:!r.value})),resolve:(t,e)=>e.map(r=>{let n=r.value,i;if(typeof n=="string")i=n;else if(typeof n=="object"){let o=n;if(o.resource)return E(o.resource);o.reference?i=o.reference:o.type&&o.identifier&&(i=`${o.type}?identifier=${o.identifier.system}|${o.identifier.value}`)}if(i?.includes("?")){let[o]=i.split("?");return{type:o,value:{resourceType:o}}}if(i?.includes("/")){let[o,s]=i.split("/");return{type:o,value:{resourceType:o,id:s}}}return{type:p.BackboneElement,value:void 0}}).filter(r=>!!r.value),as:(t,e,r)=>{let n=Lt(r);if(!n)throw new Error(`Expected a valid type identifier as the right operand of 'as', but found ${r.toString()}`);let i=N(e);return i&&Qe(i,n)?[i]:[]},type:(t,e)=>e.map(({value:r})=>typeof r=="boolean"?{type:p.BackboneElement,value:{namespace:"System",name:"Boolean"}}:typeof r=="number"?{type:p.BackboneElement,value:{namespace:"System",name:"Integer"}}:D(r)?{type:p.BackboneElement,value:{namespace:"FHIR",name:r.resourceType}}:{type:p.BackboneElement,value:null}),conformsTo:(t,e,r)=>{let n=r.eval(t,e)[0].value;if(!n.startsWith("http://hl7.org/fhir/StructureDefinition/"))throw new Error("Expected a StructureDefinition URL");let i=n.replace("http://hl7.org/fhir/StructureDefinition/","");return e.map(o=>({type:p.boolean,value:o.value?.resourceType===i}))},getResourceKey:(t,e)=>{let r=e[0]?.value;return r?.id?[{type:p.id,value:r.id}]:[]},getReferenceKey:(t,e,r)=>{let n=e[0]?.value;if(!n?.reference)return[];let i="";return r instanceof F&&(i=r.name),i&&!n.reference.startsWith(i+"/")?[]:[{type:p.id,value:K(n)}]},extension:(t,e,r)=>{let n=r.eval(t,e)[0].value,i=e?.[0]?.value;if(i){let o=ce(i,n);if(o)return[{type:p.Extension,value:o}]}return[]}};function Y(t,e,r,...n){if(r.length===0)return[];let[{value:i}]=me(r,1);if(typeof i!="string")throw new TypeError("String function cannot be called with non-string");let o=n.map(a=>a?.eval(e,r)[0]?.value),s=t(i,...o);return s===void 0?[]:Array.isArray(s)?s.map(E):[E(s)]}function fe(t,e,r,...n){if(r.length===0)return[];let[{value:i}]=me(r,1),o=L(i),s=o?i.value:i;if(typeof s!="number")throw new TypeError("Math function cannot be called with non-number");let a=t(s,...n.map(d=>d.eval(e,r)[0]?.value)),u=o?p.Quantity:r[0].type,l=o?{...i,value:a}:a;return[{type:u,value:l}]}function me(t,e){if(t.length!==e)throw new Error(`Expected ${e} arguments`);for(let r of t)if(r==null)throw new Error("Expected non-null argument");return t}function Ye(t){let e=t;for(;e.parent?.variables.$this;)e=e.parent;return[e.variables.$this]}var Re=class{constructor(e,r){c(this,"original");c(this,"child");this.original=e,this.child=r}eval(e,r){try{if(r.length>0){let n=[];for(let i of r)n.push(this.child.eval({parent:e,variables:{$this:i}},[i]));return n.flat()}else return this.child.eval(e,[])}catch(n){throw new Error(`FhirPathError on "${this.original}": ${n}`,{cause:n})}}toString(){return this.child.toString()}},G=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()}},F=class{constructor(e){c(this,"name");this.name=e}eval(e,r){if(this.name==="$this")return r;let n=this.getVariable(e);if(n)return[n];if(this.name.startsWith("%"))throw new Error(`Undefined variable ${this.name}`);return r.flatMap(i=>this.evalValue(i)).filter(i=>i?.value!==void 0)}getVariable(e){let r=e.variables[this.name];if(r!==void 0)return r;if(e.parent)return this.getVariable(e.parent)}evalValue(e){let r=e.value;if(!(!r||typeof r!="object"))return D(r,this.name)?("path"in e||(e.path=r.resourceType),e):Vr(e,this.name)}toString(){return this.name}},Nt=class{eval(){return[]}toString(){return"{}"}},Ft=class extends Tt{constructor(r,n,i){super(r,n);c(this,"impl");this.impl=i}eval(r,n){return this.impl(this.child.eval(r,n))}toString(){return this.operator+this.child.toString()}},Ce=class extends A{constructor(e,r){super("as",e,r)}eval(e,r){return B.as(e,this.left.eval(e,r),this.right)}},q=class extends A{constructor(r,n,i,o){super(r,n,i);c(this,"impl");this.impl=o}eval(r,n){let i=this.left.eval(r,n),o=this.right.eval(r,n);if(i.length<1||o.length<1)return[];let s=N(i)?.value,a=N(o)?.value,u=L(s)?s.value:s,l=L(a)?a.value:a,d=this.impl(u,l);return typeof d=="boolean"?y(d):L(s)?[{type:p.Quantity,value:{...s,value:d}}]:[E(d)]}},ds=Object.freeze({type:"string",value:""}),Ut=class extends A{constructor(e,r){super("&",e,r)}eval(e,r){let n=N(this.left.eval(e,r))??ds,i=N(this.right.eval(e,r))??ds;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:p.string,value:n.value+i.value}]}},Bt=class extends A{constructor(e,r){super("contains",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return y(n.some(o=>o.value===i[0].value))}},qt=class extends A{constructor(e,r){super("in",e,r)}eval(e,r){let n=N(this.left.eval(e,r)),i=this.right.eval(e,r);return n?y(i.some(o=>ct(n,o)[0].value)):[]}},ie=class extends A{constructor(e,r){super(".",e,r)}eval(e,r){return this.right.eval(e,this.left.eval(e,r))}toString(){return`${this.left.toString()}.${this.right.toString()}`}},Ve=class extends A{constructor(e,r){super("|",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return At([...n,...i])}},Wt=class extends A{constructor(e,r){super("=",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return Xn(n,i)}},$t=class extends A{constructor(e,r){super("!=",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return Zn(n,i)}},jt=class extends A{constructor(e,r){super("~",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return Fr(n,i)}},Ht=class extends A{constructor(e,r){super("!~",e,r)}eval(e,r){let n=this.left.eval(e,r),i=this.right.eval(e,r);return Yn(Fr(n,i))}},_e=class extends A{constructor(e,r){super("is",e,r)}eval(e,r){let n=this.left.eval(e,r);if(n.length!==1)return[];let i=Lt(this.right);return i?y(Qe(n[0],i)):[]}},Gt=class extends A{constructor(e,r){super("and",e,r)}eval(e,r){let n=N(this.left.eval(e,r),"boolean"),i=N(this.right.eval(e,r),"boolean");return n?.value===!0&&i?.value===!0?y(!0):n?.value===!1||i?.value===!1?y(!1):[]}},Qt=class extends A{constructor(e,r){super("or",e,r)}eval(e,r){let n=N(this.left.eval(e,r),"boolean"),i=N(this.right.eval(e,r),"boolean");return n?.value===!1&&i?.value===!1?y(!1):n?.value||i?.value?y(!0):[]}},zt=class extends A{constructor(e,r){super("xor",e,r)}eval(e,r){let n=N(this.left.eval(e,r),"boolean"),i=N(this.right.eval(e,r),"boolean");return!n||!i?[]:y(n.value!==i.value)}},Jt=class extends A{constructor(e,r){super("implies",e,r)}eval(e,r){let n=N(this.left.eval(e,r),"boolean"),i=N(this.right.eval(e,r),"boolean");return i?.value===!0||n?.value===!1?y(!0):!n||!i?[]:y(!1)}},oe=class{constructor(e,r){c(this,"name");c(this,"args");this.name=e,this.args=r}eval(e,r){let n=B[this.name];if(!n)throw new Error("Unrecognized function: "+this.name);return n(e,r,...this.args)}toString(){return`${this.name}(${this.args.map(e=>e.toString()).join(", ")})`}},Le=class{constructor(e,r){c(this,"left");c(this,"expr");this.left=e,this.expr=r}eval(e,r){let n=this.expr.eval(e,r);if(n.length!==1)return[];let i=n[0].value;if(typeof i!="number")throw new Error("Invalid indexer expression: should return integer}");let o=this.left.eval(e,r);return i in o?[o[i]]:[]}toString(){return`${this.left.toString()}[${this.expr.toString()}]`}};var cl=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],ul=/^\d{4}-\d{2}[\dT:.+\-Z]*(?=[\s)\]]|$)/,ll={"'":"'",'"':'"',"`":"`",r:"\r",n:`
|
|
2
2
|
`,t:" ",f:"\f","\\":"\\"},Pe=class{constructor(e,r,n,i){c(this,"str");c(this,"keywords");c(this,"operators");c(this,"dateTimeLiterals");c(this,"symbolRegex");c(this,"result",[]);c(this,"pos",{index:0,line:1,column:0});c(this,"markStack",[]);this.str=e,this.keywords=r,this.operators=n,this.dateTimeLiterals=!!i?.dateTimeLiterals,this.symbolRegex=i?.symbolRegex??/[$\w%]/}tokenize(){for(;this.pos.index<this.str.length;){let e=this.consumeToken();e&&this.result.push(e)}return this.result}prevToken(){return this.result.slice(-1)[0]}peekToken(){this.mark();let e=this.consumeToken();return this.reset(),e}consumeToken(){this.consumeWhitespace();let e=this.curr();if(!e)return;this.mark();let r=this.peek();return e==="/"&&r==="*"?this.consumeMultiLineComment():e==="/"&&r==="/"?this.consumeSingleLineComment():e==="'"||e==='"'||e==="`"?this.consumeString(e):e==="@"?this.consumeDateTime():/\d/.exec(e)?this.consumeNumber():/\w/.exec(e)?this.consumeSymbol():(e==="$"||e==="%")&&/\w/.exec(r)?this.consumeSymbol():(e==="$"||e==="%")&&(r==="'"||r==='"'||r==="`")?this.consumeQuotedSymbol(r):this.consumeOperator()}consumeWhitespace(){this.consumeWhile(()=>/\s/.exec(this.curr()))}consumeMultiLineComment(){let e=this.pos.index;return this.consumeWhile(()=>this.curr()!=="*"||this.peek()!=="/"),this.advance(),this.advance(),this.buildToken("Comment",this.str.substring(e,this.pos.index))}consumeSingleLineComment(){return this.buildToken("Comment",this.consumeWhile(()=>this.curr()!==`
|
|
3
|
-
`))}consumeString(e){this.advance();let r="",n;for(;n=this.consumeChar(e);)r+=n;let i=this.buildToken(e==="`"?"Symbol":"String",r);return this.advance(),i}consumeChar(e){let r=this.curr();if(r==="\\"){this.advance();let n=this.curr(),i=
|
|
4
|
-
`?(this.pos.line++,this.pos.column=0):this.pos.column++}buildToken(e,r){let n=this.markStack.pop();if(!n)throw new Error("No mark for token");return{id:e,value:r,...n}}};function cl(t){return!!(t&&(t.id==="String"||t.id==="Symbol"&&ol.includes(t.value)))}var Jt=["true","false"],Kt=["!=","!~","<=",">=","{}","->"];function ps(t){return new Pe(t,Jt,Kt).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},ul={parse(t){let e=t.consumeAndParse();if(!t.match(")"))throw new Error("Parse error: expected `)` got `"+t.peek()?.value+"`");return e}},ll={parse(t,e){let r=t.consumeAndParse();if(!t.match("]"))throw new Error("Parse error: expected `]`");return new Le(e,r)},precedence:S.Indexer},dl={parse(t,e){if(!(e instanceof F))throw new Error("Unexpected parentheses");let r=[];for(;!t.match(")");)r.push(t.consumeAndParse()),t.match(",");return new oe(e.name,r)},precedence:S.FunctionCall};function pl(t){let e=t.split(" "),r=Number.parseFloat(e[0]),n=e[1];return n?.startsWith("'")&&n.endsWith("'")?n=n.substring(1,n.length-1):n="{"+n+"}",{value:r,unit:n}}function dt(){return new Tt().registerPrefix("String",{parse:(t,e)=>new G({type:p.string,value:e.value})}).registerPrefix("DateTime",{parse:(t,e)=>new G({type:p.dateTime,value:lt(e.value)})}).registerPrefix("Quantity",{parse:(t,e)=>new G({type:p.Quantity,value:pl(e.value)})}).registerPrefix("Number",{parse:(t,e)=>new G({type:e.value.includes(".")?p.decimal:p.integer,value:Number.parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new G({type:p.boolean,value:!0})}).registerPrefix("false",{parse:()=>new G({type:p.boolean,value:!1})}).registerPrefix("Symbol",{parse:(t,e)=>new F(e.value)}).registerPrefix("{}",{parse:()=>new Lt}).registerPrefix("(",ul).registerInfix("[",ll).registerInfix("(",dl).prefix("+",S.UnaryAdd,(t,e)=>new Nt("+",e,r=>r)).prefix("-",S.UnarySubtract,(t,e)=>new q("-",e,e,(r,n)=>-n)).infixLeft(".",S.Dot,(t,e,r)=>new ie(t,r)).infixLeft("/",S.Divide,(t,e,r)=>new q("/",t,r,(n,i)=>n/i)).infixLeft("*",S.Multiply,(t,e,r)=>new q("*",t,r,(n,i)=>n*i)).infixLeft("+",S.Add,(t,e,r)=>new q("+",t,r,(n,i)=>n+i)).infixLeft("-",S.Subtract,(t,e,r)=>new q("-",t,r,(n,i)=>n-i)).infixLeft("|",S.Union,(t,e,r)=>new Ve(t,r)).infixLeft("=",S.Equals,(t,e,r)=>new qt(t,r)).infixLeft("!=",S.NotEquals,(t,e,r)=>new Wt(t,r)).infixLeft("~",S.Equivalent,(t,e,r)=>new $t(t,r)).infixLeft("!~",S.NotEquivalent,(t,e,r)=>new jt(t,r)).infixLeft("<",S.LessThan,(t,e,r)=>new q("<",t,r,(n,i)=>n<i)).infixLeft("<=",S.LessThanOrEquals,(t,e,r)=>new q("<=",t,r,(n,i)=>n<=i)).infixLeft(">",S.GreaterThan,(t,e,r)=>new q(">",t,r,(n,i)=>n>i)).infixLeft(">=",S.GreaterThanOrEquals,(t,e,r)=>new q(">=",t,r,(n,i)=>n>=i)).infixLeft("&",S.Ampersand,(t,e,r)=>new Ft(t,r)).infixLeft("and",S.And,(t,e,r)=>new Ht(t,r)).infixLeft("as",S.As,(t,e,r)=>new Ce(t,r)).infixLeft("contains",S.Contains,(t,e,r)=>new Ut(t,r)).infixLeft("div",S.Divide,(t,e,r)=>new q("div",t,r,(n,i)=>Math.trunc(n/i))).infixLeft("in",S.In,(t,e,r)=>new Bt(t,r)).infixLeft("is",S.Is,(t,e,r)=>new _e(t,r)).infixLeft("mod",S.Modulo,(t,e,r)=>new q("mod",t,r,(n,i)=>n%i)).infixLeft("or",S.Or,(t,e,r)=>new Gt(t,r)).infixLeft("xor",S.Xor,(t,e,r)=>new Qt(t,r)).infixLeft("implies",S.Implies,(t,e,r)=>new zt(t,r))}var fl=dt();function Yt(t){return new Re(t,fl.construct(ps(t)).consumeAndParse())}function ml(t,e,r={},n=void 0){let i=Array.isArray(e)?e:[e];for(let o=0;o<i.length;o++){let s=i[o];typeof s=="object"&&"type"in s&&"value"in s||(i[o]=E(i[o]))}return k(t,i,r,n).map(o=>o.value)}function k(t,e,r={},n=void 0){let i;if(typeof t=="string"){let o=n?.get(t);i=o??Yt(t),n&&!o&&n.set(t,i)}else i=t;return i.eval({variables:r},e).map(o=>{let s={type:o.type,value:o.value?.valueOf()};return"path"in o&&(s.path=o.path),s})}function hl(t){let e=[];for(let r of t)r.type===p.Range?e.push([r.value?.low?.value,r.value?.high?.value]):typeof r.value=="number"&&e.push([r.value,r.value]);return e}function yi(t){let e=[];for(let r of t){let n=At(r.value);n&&e.push(n)}return e}function xi(t){let e=new Set;for(let r of t){let n=pi(r);n&&e.add(n)}return Array.from(e)}function vi(t){let e=new Set;for(let r of t){let{value:n}=r;n&&(pe(n)?e.add(n):J(n)?e.add(n.reference):ct(n)?e.add(I(n)):typeof n.identifier=="object"&&e.add(`identifier:${n.identifier.system}|${n.identifier.value}`))}return Array.from(e)}function gl(t){let e=[];for(let r of t){let{value:n}=r;typeof n=="number"?e.push({value:n}):L(n)&&e.push(n)}return e}function yl(t){let e=new Set;for(let r of t)pe(r.value)&&e.add(r.value);return Array.from(e)}function Ti(t,e={}){let r=[];for(let n of t)xl(e,r,n);return r}function xl(t,e,r){let{type:n,value:i}=r;switch(n){case p.Identifier:vl(e,t,i);break;case p.CodeableConcept:Tl(e,t,i);break;case p.Coding:fs(e,t,i);break;case p.ContactPoint:Sl(e,t,i);break;default:Xe(e,t,void 0,i?.toString())}}function vl(t,e,r){r?.type?.text&&Xe(t,e,e.textSearchSystem,r.type.text),Xe(t,e,r?.system,r?.value)}function Tl(t,e,r){r?.text&&Xe(t,e,e.textSearchSystem,r.text);for(let n of r?.coding??v)fs(t,e,n)}function fs(t,e,r){r&&(r.display&&Xe(t,e,e.textSearchSystem,r.display),Xe(t,e,r.system,r.code))}function Sl(t,e,r){r&&Xe(t,e,r.system,r.value?.toLocaleLowerCase())}function Xe(t,e,r,n){(r||n)&&!t.some(i=>i.system===r&&i.value===n)&&t.push({system:r,value:n&&e.caseInsensitive?n.toLocaleLowerCase():n})}var bl=20,El=1e3,g={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"},Si={contains:g.CONTAINS,exact:g.EXACT,above:g.ABOVE,below:g.BELOW,text:g.TEXT,not:g.NOT,in:g.IN,"not-in":g.NOT_IN,"of-type":g.OF_TYPE,missing:g.MISSING,identifier:g.IDENTIFIER,iterate:g.ITERATE},bi={eq:g.EQUALS,ne:g.NOT_EQUALS,lt:g.LESS_THAN,le:g.LESS_THAN_OR_EQUALS,gt:g.GREATER_THAN,ge:g.GREATER_THAN_OR_EQUALS,sa:g.STARTS_AFTER,eb:g.ENDS_BEFORE,ap:g.APPROXIMATELY,sw:g.STARTS_WITH};function pt(t,e){if(!t)throw new Error("Invalid search URL");let r="",n;if(typeof t=="string")if(t.includes("?")){let[s,a]=t.split("?");r=s,n=new URLSearchParams(a)}else r=t;else typeof t=="object"&&(r=t.pathname,n=t.searchParams);let i;r.includes("/")?i=r.split("/").filter(Boolean).pop():i=r;let o=[];if(n&&o.push(...n.entries()),e)for(let[s,a]of Object.entries(e))if(Array.isArray(a))for(let u of a)o.push([s,u]);else o.push([s,a??""]);return Rl(i,o)}function Rl(t,e){let r={resourceType:t};for(let[n,i]of e)Cl(r,n,i);return r}function Cl(t,e,r){let n,i,o=e.indexOf(":");if(o>=0?(n=e.substring(0,o),i=e.substring(o+1)):(n=e,i=""),n!=="_"){if(n==="_has"||e.includes(".")){t.filters=re(t.filters,{code:e,operator:g.EQUALS,value:r});return}switch(n){case"_sort":Pl(t,r);break;case"_cursor":t.cursor=r;break;case"_count":t.count=Number.parseInt(r,10);break;case"_offset":t.offset=Number.parseInt(r,10);break;case"_total":t.total=r;break;case"_summary":r==="count"?(t.total="accurate",t.count=0):(r==="true"||r==="data"||r==="text")&&(t.summary=r);break;case"_include":{let s=ms(r);i==="iterate"&&(s.modifier=g.ITERATE),t.include=re(t.include,s);break}case"_revinclude":{let s=ms(r);i==="iterate"&&(s.modifier=g.ITERATE),t.revInclude=re(t.revInclude,s);break}case"_fields":case"_elements":t.fields=r.split(",");break;case"_type":t.types=r.split(",");break;case"_format":t.format=r;break;case"_pretty":t.pretty=r==="true";break;default:{let s=H.types[t.resourceType]?.searchParams?.[n];s?t.filters=re(t.filters,ys(s,g.EQUALS,i,r)):t.filters=re(t.filters,wl(n,i,r))}}}}function Pl(t,e){for(let r of e.split(",")){let n,i=!1;r.startsWith("-")?(n=r.substring(1),i=!0):n=r,t.sortRules||(t.sortRules=[]),t.sortRules.push({code:n,descending:i})}}var Al=[g.MISSING,g.PRESENT];function ys(t,e,r,n){if(Al.includes(r||e))return{code:t.code,operator:r||e,value:n};switch(t.type){case"number":case"date":case"quantity":{let{operator:i,value:o}=Ol(n,r||g.EQUALS);if(!hs(t,o))throw new m(w(`Invalid format for ${t.type} search parameter: ${o}`));return{code:t.code,operator:i,value:o}}case"reference":case"string":case"token":case"uri":{if(!hs(t,n))throw new m(w(`Invalid format for ${t.type} search parameter: ${n}`));return{code:t.code,operator:Il(r)??e,value:n}}default:throw new Error("Unrecognized search parameter type: "+t.type)}}function wl(t,e,r){let n=g.EQUALS;if(e)n=e;else if(r.length>=2){let i=r.substring(0,2);i in bi&&(r.length===2||r.at(2)?.match(/\d/))&&(n=i,r=r.substring(i.length))}return{code:t,operator:n,value:r}}function Ol(t,e){let r=t.substring(0,2),n=bi[r];return n?{operator:n,value:t.substring(2)}:{operator:e,value:t}}function Il(t){return Si[t]}function ms(t){let e=t.split(":");if(e.includes("*"))throw new m(w("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new m(w(`Invalid include value '${t}': must be of the form ResourceType:search-parameter`));if(e.length===2)return{resourceType:e[0],searchParam:e[1]};if(e.length===3)return{resourceType:e[0],searchParam:e[1],targetType:e[2]};throw new m(w(`Invalid include value '${t}'`))}function hs(t,e){return t.type==="date"?Ge(e):!0}var kl=/{{([^{}]+)}}/g;function Ml(t,e,r=[]){return t=t.replaceAll(kl,(n,i)=>{let o=k(i,r,e);return o.length!==1?"":gi(o[0])}),pt(t)}function Dl(t){let e=[];t.fields&&e.push("_fields="+t.fields.join(","));for(let r of t.filters??v)e.push(Vl(r));t.sortRules&&t.sortRules.length>0&&e.push(_l(t.sortRules)),t.cursor!==void 0&&e.push("_cursor="+encodeURIComponent(t.cursor)),t.offset!==void 0&&t.offset!==0&&e.push("_offset="+t.offset),t.count!==void 0&&e.push("_count="+t.count),t.total!==void 0&&e.push("_total="+t.total),t.types&&t.types.length>0&&e.push("_type="+t.types.join(","));for(let r of t.include??v)e.push(gs("_include",r));for(let r of t.revInclude??v)e.push(gs("_revinclude",r));return e.length===0?"":(Mt(e),"?"+e.join("&"))}function Vl(t){let e=t.operator in Si?":"+t.operator:"",r=t.operator!==g.EQUALS&&t.operator in bi?t.operator:"";return`${t.code}${e}=${r}${encodeURIComponent(t.value)}`}function _l(t){return"_sort="+t.map(e=>e.descending?"-"+e.code:e.code).join(",")}function gs(t,e){return t+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function ft(t){let e=[],r="",n=!1;for(let i of t)n?(r+=i,n=!1):i==="\\"?n=!0:i===","?(e.push(r),r=""):r+=i;return e.push(r),e}function Ll(t,e){return w(`Invalid modifier :${t} for ${e}`)}function Nl(t,e){return t in Si?Ll(t,e):w(`Invalid operator ${t} for ${e}`)}function Fl(t){return t.types??[t.resourceType]}function Xt(t,e){if(e.resourceType!==t.resourceType)return!1;for(let r of e.filters??v)if(!Bl(t,e,r))return!1;return!0}var Ul=new ee(1e3);function Bl(t,e,r){let n=H.types[e.resourceType]?.searchParams?.[r.code];if(!n)return!1;let i=k(n.expression,[E(t)],void 0,Ul);if(r.operator===g.MISSING||r.operator===g.PRESENT)return ql(i,r);switch(n.type){case"reference":return Wl(n,i,r);case"string":case"uri":return Hl(i,r);case"token":return $l(i,r);case"date":return Ql(i,r);default:return!1}}function ql(t,e){let r=t.length>0;return(e.operator===g.MISSING&&e.value==="false"||e.operator===g.PRESENT&&e.value==="true")===r}function Wl(t,e,r){let n=zr(r.operator);if(r.value===""&&e.length===0)return r.operator===g.EQUALS;let i=vi(e);for(let o of ft(r.value)){let s=!1;if(o.includes("/")?s=i.includes(o):(t.target?.length===1||r.code==="_compartment")&&(s=i.some(a=>a?.endsWith("/"+o))),s)return!n}return n}function $l(t,e){let r=Ti(t),n=ft(e.value),i=zr(e.operator);for(let o of r)for(let s of n)if(jl(o,s))return!i;return i}function jl(t,e){if(e.includes("|")){let[r,n]=e.split("|").map(i=>i.toLowerCase());return!r&&!n?!1:r?t.system?.toLowerCase()===r&&(!n||t.value?.toLowerCase()===n):!t.system&&t.value?.toLowerCase()===n}return t.value?.toLowerCase()===e.toLowerCase()}function Hl(t,e){let r=xi(t),n=ft(e.value),i=zr(e.operator);for(let o of r)for(let s of n)if(Gl(o,s))return!i;return i}function Gl(t,e){return t.toLowerCase().includes(e.toLowerCase())}function Ql(t,e){let r=yi(t),n=ft(e.value),i=zr(e.operator);for(let o of r)for(let s of n)if(zl(o,e.operator,s))return!i;return i}function zl(t,e,r){if(!t)return!1;let n=At(r);if(!n)return!1;let i=t.start??"0000",o=t.end??"9999",s=n.start,a=n.end;switch(e){case g.APPROXIMATELY:case g.EQUALS:case g.NOT_EQUALS:return i<a&&o>s;case g.LESS_THAN:return i<s;case g.GREATER_THAN:return o>a;case g.LESS_THAN_OR_EQUALS:return i<=a;case g.GREATER_THAN_OR_EQUALS:return o>=s;case g.STARTS_AFTER:return i>a;case g.ENDS_BEFORE:return o<s;default:return!1}}function zr(t){return t===g.NOT_EQUALS||t===g.NOT}var Jl={resourceType:"*"},xs=["DomainConfiguration","JsonWebKey","Login"],vs=["Package","PackageRelease","PackageInstallation","Project","ProjectMembership","User","UserSecurityRequest"],Ne={READ:"read",VREAD:"vread",UPDATE:"update",DELETE:"delete",HISTORY:"history",CREATE:"create",SEARCH:"search"},Ts=[Ne.READ,Ne.VREAD,Ne.HISTORY,Ne.SEARCH];function Kl(t,e){return Ei(t,Ne.SEARCH,e)}function Yl(t,e){return xs.includes(e)?!1:Ei(t,Ne.UPDATE,e)}function Ei(t,e,r){return!!t.resource?.some(n=>bs(n,r,e))}function Xl(t,e){return!!Ss(e,Ne.UPDATE,t)}function Ss(t,e,r){return r?r.resource?.find(n=>Zl(t,e,n)):Jl}function Zl(t,e,r){let n=t.resourceType;return bs(r,n,e)?n==="Binary"?!0:!(r.compartment&&!t.meta?.compartment?.some(i=>i.reference===r.compartment?.reference)||r.criteria&&!Xt(t,pt(r.criteria))):!1}function bs(t,e,r){return t.resourceType!==e&&(t.resourceType!=="*"||vs.includes(e))?!1:t.interaction?t.interaction.includes(r):!t.readonly||Ts.includes(r)}var ed={FIRST:"first",APPLICATION:"application"};function X(){return typeof window<"u"}function td(){return typeof Buffer<"u"}function rd(){return typeof window<"u"?window:void 0}function Jr(){return typeof Buffer<"u"?Buffer:void 0}var he={assign(t){X()&&globalThis.location.assign(t)},reload(){X()&&globalThis.location.reload()},getSearch(){return X()?globalThis.location.search:""},getPathname(){return X()?globalThis.location.pathname:""},getLocation(){return X()?globalThis.location.toString():""},getOrigin(){return X()?globalThis.location.protocol+"//"+globalThis.location.host+"/":""}};function Es(t){if(X()){let r=window.atob(t),n=Uint8Array.from(r,i=>i.codePointAt(0));return new window.TextDecoder().decode(n)}let e=Jr();if(e)return e.from(t,"base64").toString("utf-8");throw new Error("Unable to decode base64")}function Zt(t){if(X()){let r=new window.TextEncoder().encode(t),n=String.fromCodePoint.apply(null,r);return window.btoa(n)}let e=Jr();if(e)return e.from(t,"utf8").toString("base64");throw new Error("Unable to encode base64")}function Ri(t){return Zt(t).replaceAll("+","-").replaceAll("/","_").replace(/[=]{1,2}$/,"")}function er(t){t=t.padEnd(t.length+(4-t.length%4)%4,"=");let e=t.replaceAll("-","+").replaceAll("_","/");return Es(e)}function Kr(){let t=new Uint32Array(28);return crypto.getRandomValues(t),oi(t.buffer)}async function Ci(t){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(t))}function se(){return typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replaceAll(/[xy]/g,t=>{let e=Math.trunc(Math.random()*16);return(t==="x"?e:e&3|8).toString(16)})}function Rs(t){let e={};t=de(t);for(let i of t.entry??v){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]=se(),i.fullUrl="urn:uuid:"+e[s],delete i.resource?.id;else if(i.fullUrl?.startsWith("resource:")){let a=i.fullUrl.slice(9);e[a]=se(),i.fullUrl="urn:uuid:"+e[a]}}let r=t.entry,n=JSON.stringify({resourceType:"Bundle",type:"transaction",entry:r?.map(i=>({fullUrl:i.fullUrl,request:{method:"POST",url:i.resource?.resourceType},resource:i.resource}))},(i,o)=>nd(i,o,e),2);return Cs(JSON.parse(n))}function nd(t,e,r){if((t==="reference"||t==="url")&&typeof e=="string"){let n;if(e.includes("/")?n=e.split("/")[1]:e.startsWith("urn:uuid:")||e.startsWith("resource:")?n=e.slice(9):e.startsWith("#")&&(n=e.slice(1)),n){let i=r[n];if(i)return"urn:uuid:"+i}}return e}function Cs(t){let e=od(t),{sorted:r,cycles:n}=id(e),i={},o=[];for(let a of t.entry??v)a.fullUrl?i[a.fullUrl]=a:o.push(a);let s=r.map(a=>i[a]);for(let a of n)for(let u of a){let l=i[u],d={...l,request:{...l.request,method:"PUT"}};s.push(d)}return s.push(...o),{...t,entry:s}}var mt={NotVisited:"NotVisited",Visiting:"Visiting",Visited:"Visited"};function id(t){let e=[],r={},n=[];for(let o of Object.keys(t))r[o]=mt.NotVisited;function i(o,s){if(r[o]===mt.Visited)return!0;if(r[o]===mt.Visiting){let u=s.lastIndexOf(o);return u!==-1&&n.push(s.slice(u)),!0}r[o]=mt.Visiting,s.push(o);let a=!1;for(let u of t[o]??v)i(u,s)||(a=!0);return r[o]=mt.Visited,s.pop(),e.unshift(o),!a}for(let o in t)r[o]===mt.NotVisited&&i(o,[]);return{sorted:e,cycles:n}}function Ps(t,e){for(let r in t)if(t[r]&&typeof t[r]=="object"){let n=t[r];if(J(n)){let i=n.reference;(i.startsWith("urn:uuid:")||i.startsWith("resource:"))&&e(i)}else Ps(n,e)}}function od(t){let e={};for(let r of t.entry??v)r.fullUrl&&(e[r.fullUrl]=[]);for(let r of t.entry??v){let n=r.fullUrl;n&&r.resource&&Ps(r.resource,i=>{i!==n&&e[i]&&e[i].push(n)})}return e}function sd(t){t=de(t);let e={resourceType:"Bundle",type:"transaction",entry:[{resource:t}]};if(t.contained){for(let r of t.contained)e.entry.push({resource:r});t.contained=void 0}for(let r of e.entry)r.resource&&!r.resource.id&&(r.resource.id=se());return Rs(e)}function ad(t,e,r){return t.entry?.find(({resource:n})=>n?.resourceType===e&&n?.id===r)?.resource}async function cd(t,e,r,n){return{hook:r.hook,hookInstance:se(),context:n,prefetch:await ud(t,e,r,n)}}async function ud(t,e,r,n){if(!r.prefetch)return{};let i={};for(let[o,s]of Object.entries(r.prefetch)){let a=await ld(t,e,n,s);i[o]=a??null}return i}function ld(t,e,r,n){if(n=As(e,r,n),n.includes("{{"))return Promise.resolve(null);let i=/^(\w+)\/([0-9a-zA-Z-_]+)$/.exec(n);if(i){let[a,u]=i.slice(1);return t.readResource(a,u)}let[o,s]=Je(n,"?",2);return t.search(o,s)}var dd=new Set(["userPractitionerId","userPractitionerRoleId","userPatientId","userRelatedPersonId"]);function As(t,e,r){return r.replaceAll(/\{\{([^}]+)\}\}/g,(n,i)=>{if(i=i.trim(),dd.has(i))return t.id;if(i.startsWith("context.")){let o=i.substring(8),s=pd(e,o);if(pe(s))return s;if(typeof s=="number"||typeof s=="boolean")return String(s)}return n})}function pd(t,e){let r=e.split("."),n=t;for(let i of r)if(n&&C(n)&&i in n)n=n[i];else return;return n}var V={CSS:"text/css",DICOM:"application/dicom",DICOM_JSON:"application/dicom+json",EVENT_STREAM:"text/event-stream",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",JOSE:"application/jose",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 Yr=class{constructor(){c(this,"listeners");this.listeners={}}addEventListener(e,r){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(r)}removeEventListener(e,r){let n=this.listeners[e];if(n){for(let i=0;i<n.length;i++)if(n[i]===r){n.splice(i,1);return}}}dispatchEvent(e){let r=this.listeners[e.type];for(let n of r??v)try{n.call(this,e)}catch(i){console.error(`Unhandled error in "${e.type}" event listener`,i)}return!e.defaultPrevented}removeAllListeners(){this.listeners={}}listenerCount(e){return this.listeners[e]?.length??0}},ae=class{constructor(){c(this,"emitter",new Yr)}dispatchEvent(e){this.emitter.dispatchEvent(e)}addEventListener(e,r){this.emitter.addEventListener(e,r)}removeEventListener(e,r){this.emitter.removeEventListener(e,r)}removeAllListeners(){this.emitter.removeAllListeners()}listenerCount(e){return this.emitter.listenerCount(e)}};var Xr={"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"},ws=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],Zr=["DiagnosticReport-update"];function Pi(t){return Zr.includes(t)}function Ai(t){if(Zr.includes(t))throw new m(T(`'context.version' is required for '${t}'.`))}var Os={"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 Is(t){return ws.includes(t)}function wi(t){return!!t.endpoint}function en(t){if(!rr(t))throw new m(T("subscriptionRequest must be an object conforming to SubscriptionRequest type."));let{channelType:e,mode:r,topic:n,events:i}=t,o={"hub.channel.type":e,"hub.mode":r,"hub.topic":n};return r==="subscribe"&&(o["hub.events"]=i.join(",")),wi(t)&&(o["hub.channel.endpoint"]=t.endpoint),new URLSearchParams(o).toString()}function rr(t){if(typeof t!="object")return!1;let{channelType:e,mode:r,topic:n,events:i}=t;if(!(e&&r&&n&&i)||typeof n!="string"||typeof i!="object"||!Array.isArray(i)||i.length<1||e!=="websocket"||r!=="subscribe"&&r!=="unsubscribe")return!1;for(let o of i)if(!Xr[o])return!1;return!(wi(t)&&!(typeof t.endpoint=="string"&&t.endpoint.startsWith("ws")))}function fd(t,e,r,n){if(typeof e!="object")throw new m(T(`context[${r}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.id&&typeof e.id=="string"))throw new m(T(`context[${r}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new m(T(`context[${r}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!Is(e.resourceType))throw new m(T(`context[${r}] is invalid. Resource must contain a valid FHIRcast resource type. Resource type is not a known resource type.`));if(i&&e.resourceType!==i)throw new m(T(`context[${r}] is invalid. context[${r}] for the '${t}' event should contain resource of type ${i}.`))}}function md(t,e,r,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),n.reference){if(!J(e.reference))throw new m(T(`context[${r}] is invalid. Expected key '${e.key}' to be a reference.`))}else fd(t,e.resource,r,n)}function hd(t,e){let r=new Map,n=Os[t];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new m(T(`Key '${o}' not found for event '${t}'. Make sure to add only valid keys.`));md(t,e[i],i,n[o],r)}for(let[i,o]of Object.entries(n)){if(!(o.optional||r.has(i)))throw new m(T(`Missing required key '${i}' on context for '${t}' event.`));if(!o.manyAllowed&&(r.get(i)??0)>1)throw new m(T(`${r.get(i)} context entries with key '${i}' found for the '${t}' event when schema only allows for 1.`))}}function tn(t,e,r,n){if(!(t&&typeof t=="string"))throw new m(T("Must provide a topic."));if(!Xr[e])throw new m(T(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(Xr).join(", ")}`));if(typeof r!="object")throw new m(T("context must be a context object or array of context objects."));if(Zr.includes(e)&&!n)throw new m(T(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(r)?r:[r];return hd(e,i),{timestamp:new Date().toISOString(),id:se(),event:{"hub.topic":t,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var tr=class extends ae{constructor(r){super();c(this,"subRequest");c(this,"websocket");if(this.subRequest=r,!r.endpoint)throw new m(T("Subscription request should contain an endpoint."));if(!rr(r))throw new m(T("Subscription request failed validation."));let n=new WebSocket(r.endpoint);n.addEventListener("open",()=>{this.dispatchEvent({type:"connect"}),n.addEventListener("message",i=>{let o=JSON.parse(i.data);if(!o.event){o["hub.mode"]==="denied"&&n.close();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 gd(t){return JSON.parse(er(t))}function Oi(t){return t.split(".").length===3}function nr(t){let[e,r,n]=t.split(".");return gd(r)}function Ii(t){try{return typeof nr(t).login_id=="string"}catch{return!1}}function ki(t){try{let r=nr(t).exp;return typeof r=="number"?r*1e3:void 0}catch{return}}var ir=class{constructor(e){c(this,"medplum");this.medplum=e}async get(e){return this.medplum.get(`keyvalue/v1/${e}`)}async set(e,r){await this.medplum.put(`keyvalue/v1/${e}`,r,V.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var ks;ks=Symbol.toStringTag;var $=class{constructor(e){c(this,ks,"ReadablePromise");c(this,"suspender");c(this,"status","pending");c(this,"response");c(this,"error");this.suspender=e.then(r=>(this.status="success",this.response=r,r),r=>{throw this.status="error",this.error=r,r})}isPending(){return this.status==="pending"}isOk(){return this.status==="success"}read(){switch(this.status){case"pending":throw this.suspender;case"error":throw this.error;default:return this.response}}then(e,r){return this.suspender.then(e,r)}catch(e){return this.suspender.catch(e)}finally(e){return this.suspender.finally(e)}};var ht=class{constructor(e,r=""){c(this,"storage");c(this,"prefix","");this.storage=e??globalThis.localStorage??new rn,this.prefix=r}makeKey(e){return this.prefix+e}clear(){if(this.storage===globalThis.localStorage&&this.prefix)for(let e=this.storage.length-1;e>=0;e--){let r=this.storage.key(e);r?.startsWith(this.prefix)&&this.storage.removeItem(r)}else this.storage.clear()}getString(e){return this.storage.getItem(this.makeKey(e))??void 0}setString(e,r){r?this.storage.setItem(this.makeKey(e),r):this.storage.removeItem(this.makeKey(e))}getObject(e){let r=this.getString(e);return r?JSON.parse(r):void 0}setObject(e,r){this.setString(e,r?kt(r):void 0)}},rn=class{constructor(){c(this,"data");this.data=new Map}get length(){return this.data.size}clear(){this.data.clear()}getItem(e){return this.data.get(e)??null}setItem(e,r){r?this.data.set(e,r):this.data.delete(e)}removeItem(e){this.data.delete(e)}key(e){return Array.from(this.data.keys())[e]}},Mi=class extends ht{constructor(){super();c(this,"initialized");c(this,"initPromise");c(this,"initResolve",()=>{});this.initialized=!1,this.initPromise=new Promise(r=>{this.initResolve=r})}setInitialized(){this.initialized||(this.initResolve(),this.initialized=!0)}getInitPromise(){return this.initPromise}get isInitialized(){return this.initialized}};var Z={Event:typeof globalThis.Event<"u"?globalThis.Event:void 0,ErrorEvent:void 0,CloseEvent:void 0},Ms=!1;function yd(){if(typeof globalThis.Event>"u")throw new Error("Unable to lazy init events for ReconnectingWebSocket. globalThis.Event is not defined yet");Z.Event=globalThis.Event,Z.ErrorEvent=class extends Event{constructor(r,n){super("error",n);c(this,"message");c(this,"error");this.message=r.message,this.error=r}},Z.CloseEvent=class extends Event{constructor(r=1e3,n="",i){super("close",i);c(this,"code");c(this,"reason");c(this,"wasClean",!0);this.code=r,this.reason=n}}}function Vs(t,e){if(!t)throw new Error(e)}function xd(){}function nn(t){if(t instanceof Z.CloseEvent){let e=t;return new Z.CloseEvent(e.code,e.reason,void 0)}if(t instanceof Z.ErrorEvent){let e=t;return new Z.ErrorEvent(e.error??new Error(e.message),void 0)}return new t.constructor(t.type,t)}function _s(t,e){let r=t;return r.error instanceof Error?new Z.ErrorEvent(r.error,e):new Z.ErrorEvent(new Error(r.message||"WebSocket error"),e)}var Ze={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},Ds=!1,or=class t extends ae{constructor(r,n,i={}){Ms||(yd(),Ms=!0);super();c(this,"_ws");c(this,"_retryCount",-1);c(this,"_uptimeTimeout");c(this,"_connectTimeout");c(this,"_shouldReconnect",!0);c(this,"_connectLock",!1);c(this,"_binaryType");c(this,"_closeCalled",!1);c(this,"_messageQueue",[]);c(this,"_debugLogger",console.log.bind(console));c(this,"_url");c(this,"_protocols");c(this,"_options");c(this,"onclose",null);c(this,"onerror",null);c(this,"onmessage",null);c(this,"onopen",null);c(this,"_handleOpen",r=>{this._debug("open event");let{minUptime:n=Ze.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),n),Vs(this._ws,"WebSocket is not defined"),this._ws.binaryType=this._binaryType,this._messageQueue.forEach(i=>this._ws?.send(i)),this._messageQueue=[],this.onopen&&this.onopen(r),this.dispatchEvent(nn(r))});c(this,"_handleMessage",r=>{this._debug("message event"),this.onmessage&&this.onmessage(r),this.dispatchEvent(nn(r))});c(this,"_handleError",r=>{let n=_s(r,this);this._debug("error event",n.message),this._disconnect(void 0,n.message==="TIMEOUT"?"timeout":void 0),this.onerror&&this.onerror(n),this._debug("exec error listeners"),this.dispatchEvent(nn(n)),this._connect()});c(this,"_handleClose",r=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(r),this.dispatchEvent(nn(r))});this._url=r,this._protocols=n,this._options=i,this._options.startClosed&&(this._shouldReconnect=!1),this._options.binaryType?this._binaryType=this._options.binaryType:this._binaryType="blob",this._options.debugLogger&&(this._debugLogger=this._options.debugLogger),this._connect()}static get CONNECTING(){return 0}static get OPEN(){return 1}static get CLOSING(){return 2}static get CLOSED(){return 3}get CONNECTING(){return t.CONNECTING}get OPEN(){return t.OPEN}get CLOSING(){return t.CLOSING}get CLOSED(){return t.CLOSED}get binaryType(){return this._ws?this._ws.binaryType:this._binaryType}set binaryType(r){this._binaryType=r,this._ws&&(this._ws.binaryType=r)}get retryCount(){return Math.max(this._retryCount,0)}get bufferedAmount(){return this._messageQueue.reduce((n,i)=>(typeof i=="string"?n+=i.length:i instanceof Blob?n+=i.size:n+=i.byteLength,n),0)+(this._ws?.bufferedAmount??0)}get extensions(){return this._ws?.extensions??""}get protocol(){return this._ws?.protocol??""}get readyState(){return this._ws?this._ws.readyState:this._options.startClosed?t.CLOSED:t.CONNECTING}get url(){return this._ws?this._ws.url:""}get shouldReconnect(){return this._shouldReconnect}close(r=1e3,n){if(this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),!this._ws){this._debug("close enqueued: no ws instance");return}if(this._ws.readyState===this.CLOSED){this._debug("close: already closed");return}this._ws.close(r,n)}reconnect(r,n){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED?this._connect():(this._disconnect(r,n),this._connect())}send(r){if(this._ws?.readyState===this.OPEN)this._debug("send",r),this._ws.send(r);else{let{maxEnqueuedMessages:n=Ze.maxEnqueuedMessages}=this._options;this._messageQueue.length<n&&(this._debug("enqueue",r),this._messageQueue.push(r))}}_debug(...r){this._options.debug&&this._debugLogger("RWS>",...r)}_getNextDelay(){let{reconnectionDelayGrowFactor:r=Ze.reconnectionDelayGrowFactor,minReconnectionDelay:n=Ze.minReconnectionDelay,maxReconnectionDelay:i=Ze.maxReconnectionDelay}=this._options,o=0;return this._retryCount>0&&(o=n*Math.pow(r,this._retryCount-1),o>i&&(o=i)),this._debug("next delay",o),o}_wait(){return new Promise(r=>{setTimeout(r,this._getNextDelay())})}_connect(){if(this._connectLock||!this._shouldReconnect)return;this._connectLock=!0;let{maxRetries:r=Ze.maxRetries,connectionTimeout:n=Ze.connectionTimeout}=this._options;if(this._retryCount>=r){this._connectLock=!1,this._debug("max retries reached",this._retryCount,">=",r);return}this._retryCount++,this._debug("connect",this._retryCount),this._removeListeners(),this._wait().then(()=>{if(this._closeCalled){this._connectLock=!1;return}!this._options.WebSocket&&typeof WebSocket>"u"&&!Ds&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),Ds=!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 Z.ErrorEvent(Error(i.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new Z.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(r=1e3,n){if(this._clearTimeouts(),!this._ws)return;let i=this._ws;this._removeListeners(),i.addEventListener("error",xd);try{i.close(r,n),this._handleClose(new Z.CloseEvent(r,n,this))}catch{}}_acceptOpen(){this._debug("accept open"),this._retryCount=0}_removeListeners(){this._ws&&(this._debug("removeListeners"),this._ws.removeEventListener("open",this._handleOpen),this._ws.removeEventListener("close",this._handleClose),this._ws.removeEventListener("message",this._handleMessage),this._ws.removeEventListener("error",this._handleError))}_addListeners(){this._ws&&(this._debug("addListeners"),this._ws.addEventListener("open",this._handleOpen),this._ws.addEventListener("close",this._handleClose),this._ws.addEventListener("message",this._handleMessage),this._ws.addEventListener("error",this._handleError))}_clearTimeouts(){clearTimeout(this._connectTimeout),clearTimeout(this._uptimeTimeout)}};var vd=[WebSocket.CLOSING,WebSocket.CLOSED],gt=class extends ae{constructor(...r){super();c(this,"criteria");this.criteria=new Set(r)}getCriteria(){return this.criteria}_addCriteria(r){this.criteria.add(r)}_removeCriteria(r){this.criteria.delete(r)}},Di=class{constructor(e,r){c(this,"criteria");c(this,"emitter");c(this,"refCount");c(this,"subscriptionProps");c(this,"subscriptionId");c(this,"token");c(this,"tokenExpiry");c(this,"state","idle");c(this,"generation",0);c(this,"lastUnrefTime");this.criteria=e,this.emitter=new gt(e),this.refCount=1,this.subscriptionProps=r?{...r}:void 0}nextGeneration(){return++this.generation}},ar=class{constructor(e,r,n){c(this,"medplum");c(this,"ws");c(this,"masterSubEmitter");c(this,"criteriaEntries");c(this,"criteriaEntriesBySubscriptionId");c(this,"wsClosed");c(this,"pingTimer");c(this,"tokenRefreshTimer");c(this,"pingIntervalMs");c(this,"waitingForPong",!1);c(this,"currentProfile");if(!(e instanceof cr))throw new m(T("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(r).toString()}catch{throw new m(T("Not a valid URL"))}let o=n?.ReconnectingWebSocket?new n.ReconnectingWebSocket(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger}):new or(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger});this.medplum=e,this.ws=o,this.masterSubEmitter=new gt,this.criteriaEntries=new Map,this.criteriaEntriesBySubscriptionId=new Map,this.wsClosed=!1,this.pingIntervalMs=n?.pingIntervalMs??5e3,this.currentProfile=e.getProfile(),this.setupListeners()}setupListeners(){let e=this.ws;e.addEventListener("message",r=>{try{let n=JSON.parse(r.data);if(n.type==="pong"){this.waitingForPong=!1;return}let i=n,o=i?.entry?.[0]?.resource;if(!o){console.warn("Received WebSocket message without a SubscriptionStatus resource; ignoring",i);return}if(o.type==="heartbeat"){this.masterSubEmitter?.dispatchEvent({type:"heartbeat",payload:i});return}if(o.type==="handshake"){let a=K(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(K(o.subscription));if(!s){console.warn("Received notification for criteria the SubscriptionManager is not listening for");return}s.emitter.dispatchEvent({type:"message",payload:i})}catch(n){console.error(n);let i={type:"error",payload:n};this.masterSubEmitter?.dispatchEvent(i);for(let o of this.getAllCriteriaEmitters())o.dispatchEvent({...i})}}),e.addEventListener("error",r=>{let n={type:"error",payload:new m({resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"WebSocket connection closed due to an error"},diagnostics:r.error?Ie(r.error):r.message}]})};this.masterSubEmitter?.dispatchEvent(n);for(let i of this.getAllCriteriaEmitters())i.dispatchEvent({...n})}),e.addEventListener("close",()=>{let r={type:"close"};this.masterSubEmitter?.dispatchEvent(r);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...r});this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=void 0,this.waitingForPong=!1),this.tokenRefreshTimer&&(clearInterval(this.tokenRefreshTimer),this.tokenRefreshTimer=void 0),this.wsClosed&&(this.criteriaEntries.clear(),this.criteriaEntriesBySubscriptionId.clear(),this.masterSubEmitter?.removeAllListeners())}),e.addEventListener("open",()=>{let r={type:"open"};this.masterSubEmitter?.dispatchEvent(r);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...r});this.refreshAllSubscriptions().catch(console.error),this.pingTimer??=setInterval(()=>{this.waitingForPong?(this.waitingForPong=!1,e.reconnect()):(e.send(JSON.stringify({type:"ping"})),this.waitingForPong=!0),this.gcUnrefEntries()},this.pingIntervalMs),this.tokenRefreshTimer??=setInterval(()=>{this.checkTokenExpirations(),this.gcUnrefEntries()},6e4)}),this.medplum.addEventListener("change",()=>{let r=this.medplum.getProfile();this.currentProfile&&r===void 0?this.ws.close():r&&this.currentProfile?.id!==r.id&&this.ws.reconnect(),this.currentProfile=r})}sendBind(e){this.ws.send(JSON.stringify({type:"bind-with-token",payload:{token:e}}))}sendUnbind(e){this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"unbind-from-token",payload:{token:e}}))}emitError(e,r){let n={type:"error",payload:r};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}maybeEmitDisconnect(e){let{subscriptionId:r}=e;if(r){let n={type:"disconnect",payload:{subscriptionId:r}};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}else console.warn("Called disconnect for `CriteriaEntry` before `subscriptionId` was present.")}isStale(e,r){return this.isEntryGettingRemoved(e)||e.generation!==r}maybeGetCriteriaEntry(e,r){let n=this.criteriaEntries.get(e);if(n){if(!r)return n.bareCriteria;for(let i of n.criteriaWithProps)if(ve(r,i.subscriptionProps))return i}}getAllCriteriaEmitters(){let e=[];for(let r of this.criteriaEntries.values())for(let n of sr(r))n.refCount>0&&e.push(n.emitter);return e}addCriteriaEntry(e){let{criteria:r,subscriptionProps:n}=e,i;this.criteriaEntries.has(r)?i=this.criteriaEntries.get(r):(i={criteriaWithProps:[]},this.criteriaEntries.set(r,i)),n?i.criteriaWithProps.push(e):i.bareCriteria=e}removeCriteriaEntry(e){e.state="removed",e.generation++;let{criteria:r,subscriptionProps:n,subscriptionId:i,token:o}=e;if(!this.criteriaEntries.has(r))return;let s=this.criteriaEntries.get(r);n?s.criteriaWithProps=s.criteriaWithProps.filter(a=>{let u=a.subscriptionProps;return!ve(n,u)}):s.bareCriteria=void 0,!s.bareCriteria&&s.criteriaWithProps.length===0&&(this.criteriaEntries.delete(r),this.masterSubEmitter?._removeCriteria(r)),i&&this.criteriaEntriesBySubscriptionId.delete(i),o&&this.sendUnbind(o)}async subscribeToCriteria(e){this.wsClosed&&await this.reconnectIfNeeded(),this.ws.readyState===WebSocket.OPEN&&this.medplum.getProfile()&&e.state==="idle"&&(e.state="connecting",await this.rebindCriteriaEntry(e))}async refreshAllSubscriptions(){this.criteriaEntriesBySubscriptionId.clear();let e=[],r=[];for(let n of this.criteriaEntries.values())for(let i of sr(n))i.refCount===0?r.push(i):e.push(i);for(let n of r)this.removeCriteriaEntry(n);for(let n of e)n.token&&this.sendUnbind(n.token),n.token=void 0,n.tokenExpiry=void 0,n.subscriptionId=void 0,n.state="idle",n.generation++,await this.subscribeToCriteria(n)}async rebindCriteriaEntry(e){let r=e.nextGeneration();try{if(!e.subscriptionId){let a=await this.medplum.createResource({...e.subscriptionProps,resourceType:"Subscription",status:"active",reason:`WebSocket subscription for ${I(this.medplum.getProfile())}`,channel:{type:"websocket"},criteria:e.criteria});if(e.subscriptionId??=a.id,this.isStale(e,r))return}let{parameter:n}=await this.medplum.get(`fhir/R4/Subscription/${e.subscriptionId}/$get-ws-binding-token`,{cache:"no-cache"}),i=n?.find(a=>a.name==="token")?.valueString,o=n?.find(a=>a.name==="websocket-url")?.valueUrl,s=n?.find(a=>a.name==="expiration")?.valueDateTime;if(!i)throw new m(T("Failed to get token"));if(!o)throw new m(T("Failed to get URL from $get-ws-binding-token"));if(!s)throw new m(T("Failed to get expiration from $get-ws-binding-token"));if(this.isStale(e,r))return;e.token=i,e.tokenExpiry=new Date(s).getTime(),this.criteriaEntriesBySubscriptionId.set(e.subscriptionId,e),this.sendBind(i)}catch(n){console.error(Ie(n)),e.generation===r&&!this.isEntryGettingRemoved(e)&&(e.state=e.state==="refreshing"?"active":"idle"),this.emitError(e,n)}}checkTokenExpirations(){if(!this.medplum.getProfile())return;let e=Date.now();for(let r of this.criteriaEntries.values())for(let n of sr(r))n.refCount===0||!n.tokenExpiry||n.tokenExpiry-e<=3e5&&n.state==="active"&&this.ws.readyState===WebSocket.OPEN&&(n.state="refreshing",this.rebindCriteriaEntry(n).catch(i=>{this.masterSubEmitter?.dispatchEvent({type:"error",payload:i})}))}addCriteria(e,r){this.masterSubEmitter&&this.masterSubEmitter._addCriteria(e);let n=this.maybeGetCriteriaEntry(e,r);if(n)return n.refCount===0&&(n.lastUnrefTime=void 0,n.generation++,n.state!=="active"&&(n.state=n.token?"active":"idle")),n.refCount+=1,n.state==="idle"&&this.subscribeToCriteria(n).catch(console.error),n.emitter;let i=new Di(e,r);return this.addCriteriaEntry(i),this.subscribeToCriteria(i).catch(console.error),i.emitter}removeCriteria(e,r){let n=this.maybeGetCriteriaEntry(e,r);if(!n||this.isEntryGettingRemoved(n)){console.warn("Criteria not known to `SubscriptionManager`. Possibly called remove too many times.");return}n.refCount-=1,n.refCount===0&&(n.lastUnrefTime=Date.now(),n.generation++)}gcUnrefEntries(){let e=Date.now(),r=[];for(let n of this.criteriaEntries.values())for(let i of sr(n))i.refCount===0&&i.lastUnrefTime!==void 0&&e-i.lastUnrefTime>=1e4&&r.push(i);for(let n of r)this.maybeEmitDisconnect(n),this.removeCriteriaEntry(n);r.length>0&&this.criteriaEntries.size===0&&this.closeWebSocket()}isEntryGettingRemoved(e){return e.refCount===0||e.state==="removed"}getWebSocket(){return this.ws}closeWebSocket(){if(!this.wsClosed){if(this.ws.readyState===WebSocket.OPEN)for(let e of this.criteriaEntries.values())for(let r of sr(e))r.token&&this.sendUnbind(r.token);this.wsClosed=!0,this.ws.close()}}reconnectWebSocket(){this.ws.reconnect(),this.wsClosed=!1}getCriteriaCount(){return this.getAllCriteriaEmitters().length}getMasterEmitter(){return this.masterSubEmitter||(this.masterSubEmitter=new gt(...Array.from(this.criteriaEntries.keys()))),this.masterSubEmitter}async reconnectIfNeeded(){vd.includes(this.getWebSocket().readyState)&&await new Promise(e=>{let r=()=>{this.getWebSocket().removeEventListener("open",r),e()};this.getWebSocket().addEventListener("open",r),this.reconnectWebSocket()})}};function sr(t){return t.bareCriteria?[t.bareCriteria,...t.criteriaWithProps]:t.criteriaWithProps}var Td=new ee(1e3);async function Sd({resource:t,subscription:e,context:r,getPreviousResource:n,logger:i}){if(!bd(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=pt(o);if(t.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${t.resourceType}")`),!1;if(!await Ls(e,t,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let u=!1,l=!1;for(let h of e.extension??v)if(h.url==="https://medplum.com/fhir/StructureDefinition/subscription-supported-interaction"&&(u=!0,h.valueCode===r.interaction)){l=!0;break}if(u&&!l)return i?.debug("Ignored rest hook for unsupported interaction",{subscription:e.id,interaction:r.interaction}),!1;if(!Xt(t,s))return!1;let d=Wr(e.meta)??[],f=Wr(t.meta)??[];return d.length&&!d.some(h=>f.some(b=>b.reference===h.reference))?(i?.debug("Subscription suppressed due to mismatched accounts",{subscriptionId:e.id,resource:I(t)}),!1):!0}function bd(t,e){let r=t.channel?.type;return r==="rest-hook"?t.channel?.endpoint?!0:(e?.debug("Ignore rest-hook missing URL"),!1):r==="websocket"}async function Ls(t,e,r){let n=ce(t,"https://medplum.com/fhir/StructureDefinition/fhir-path-criteria-expression");if(!n?.valueString)return!0;let i=await r(e),o={"%current":E(e),"%previous":E(i??{})};return k(n.valueString,[E(e)],o,Td)?.[0]?.value===!0}var on="5.1.29-f5d2946",Ed="medplum-cli",Bs=V.FHIR_JSON+", */*; q=0.1",Rd="https://api.medplum.com/",Cd=1e3,Pd=6e4,Ad=0,wd=3e5,Od="Binary/",Ns={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},Id=2,et={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"},qs={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"},kd={ClientSecretBasic:"client_secret_basic",ClientSecretPost:"client_secret_post",ClientSecretJwt:"client_secret_jwt",PrivateKeyJwt:"private_key_jwt",None:"none"},Ws={JwtBearer:"urn:ietf:params:oauth:client-assertion-type:jwt-bearer"},Md={ES256:"ES256",ES384:"ES384",ES512:"ES512",HS256:"HS256",RS256:"RS256",RS384:"RS384",RS512:"RS512"},cr=class extends ae{constructor(r){super();c(this,"options");c(this,"fetch");c(this,"createPdfImpl");c(this,"storage");c(this,"requestCache");c(this,"cacheTime");c(this,"baseUrl");c(this,"fhirBaseUrl");c(this,"authorizeUrl");c(this,"tokenUrl");c(this,"logoutUrl");c(this,"fhircastHubUrl");c(this,"cdsServicesUrl");c(this,"defaultHeaders");c(this,"onUnauthenticated");c(this,"autoBatchTime");c(this,"autoBatchQueue");c(this,"maxRetries");c(this,"maxRetryTime");c(this,"refreshGracePeriod");c(this,"subscriptionManager");c(this,"medplumServer");c(this,"clientId");c(this,"clientSecret");c(this,"credentialsInHeader");c(this,"autoBatchTimerId");c(this,"accessToken");c(this,"accessTokenExpires");c(this,"refreshToken");c(this,"refreshPromise");c(this,"profilePromise");c(this,"sessionDetails");c(this,"currentRateLimits");c(this,"basicAuth");c(this,"initPromise");c(this,"initComplete",!0);c(this,"keyValueClient");c(this,"logLevel");if(r?.baseUrl&&!r.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");this.options=r??{},this.fetch=r?.fetch??Dd(),this.storage=r?.storage??new ht(void 0,r?.storagePrefix),this.createPdfImpl=r?.createPdf,this.baseUrl=Gr(r?.baseUrl??Rd),this.fhirBaseUrl=W(this.baseUrl,r?.fhirUrlPath??"fhir/R4"),this.authorizeUrl=W(this.baseUrl,r?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=W(this.baseUrl,r?.tokenUrl??"oauth2/token"),this.logoutUrl=W(this.baseUrl,r?.logoutUrl??"oauth2/logout"),this.fhircastHubUrl=W(this.baseUrl,r?.fhircastHubUrl??"fhircast/STU3"),this.cdsServicesUrl=W(this.baseUrl,r?.cdsServicesUrl??"cds-services"),this.clientId=r?.clientId??"",this.clientSecret=r?.clientSecret??"",this.credentialsInHeader=r?.authCredentialsMethod==="header",this.defaultHeaders=r?.defaultHeaders??{},this.onUnauthenticated=r?.onUnauthenticated,this.refreshGracePeriod=r?.refreshGracePeriod??wd,this.logLevel=this.initializeLogLevel(r),this.maxRetries=r?.maxRetries??2,this.maxRetryTime=r?.maxRetryTime??2e3,this.cacheTime=r?.cacheTime??(X()?Pd:Ad),this.cacheTime>0?this.requestCache=new ee(r?.resourceCacheSize??Cd):this.requestCache=void 0,r?.autoBatchTime?(this.autoBatchTime=r.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0),r?.accessToken&&this.setAccessToken(r.accessToken),this.storage.getInitPromise===void 0?(r?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initPromise=Promise.resolve(),this.dispatchEvent({type:"storageInitialized"})):(this.initComplete=!1,this.initPromise=this.storage.getInitPromise(),this.initPromise.then(()=>{r?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initComplete=!0,this.dispatchEvent({type:"storageInitialized"})}).catch(n=>{console.error(n),this.initComplete=!0,this.dispatchEvent({type:"storageInitFailed",payload:{error:n}})})),this.setupStorageListener()}get isInitialized(){return this.initComplete}getInitPromise(){return this.initPromise}initializeLogLevel(r){return r?.logLevel?r.logLevel:r?.verbose!==void 0&&r.verbose?"verbose":"none"}async attemptResumeActiveLogin(){let r=this.getActiveLogin();r&&(this.setAccessToken(r.accessToken,r.refreshToken),await this.refreshProfile())}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}getFhircastHubUrl(){return this.fhircastHubUrl}getCdsServicesUrl(){return this.cdsServicesUrl}getDefaultHeaders(){return this.defaultHeaders}clear(){this.storage.clear(),this.clearActiveLogin()}clearActiveLogin(){this.storage.setString("activeLogin",void 0),this.requestCache?.clear(),this.accessToken=void 0,this.refreshToken=void 0,this.refreshPromise=void 0,this.accessTokenExpires=void 0,this.sessionDetails=void 0,this.medplumServer=void 0,this.dispatchEvent({type:"change"})}invalidateUrl(r){r=r.toString(),this.requestCache?.delete(r)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(r){let n=W(this.fhirBaseUrl,r);for(let i of this.requestCache?.keys()??v)(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache?.delete(i)}notifyResourceModified(r){r.operation!=="delete"&&r.resource?this.cacheResource(r.resource,void 0):r.id&&this.deleteCacheEntry(this.fhirUrl(r.resourceType,r.id).toString()),this.invalidateSearches(r.resourceType),this.dispatchResourceModified(r)}get(r,n={}){r=r.toString();let i=this.getCacheEntry(r,n);if(i)return i.value;let o;r.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue&&!n.disableAutoBatch?o=new Promise((a,u)=>{this.autoBatchQueue.push({method:"GET",url:r.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:u}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):(n.method="GET",o=this.request(r,n));let s=new $(o);return this.setCacheEntry(r,s,n),s}post(r,n,i,o={}){return r=r.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(r),o.method="POST",this.request(r,o)}put(r,n,i,o={}){return r=r.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(r),o.method="PUT",this.request(r,o)}patch(r,n,i={}){return r=r.toString(),this.setRequestBody(i,n),this.setRequestContentType(i,V.JSON_PATCH),this.invalidateUrl(r),i.method="PATCH",this.request(r,i)}delete(r,n={}){return r=r.toString(),this.invalidateUrl(r),n.method="DELETE",this.request(r,n)}async startNewUser(r,n){let{codeChallengeMethod:i,codeChallenge:o}=await this.startPkce();return this.post("auth/newuser",{...r,clientId:r.clientId??this.clientId,codeChallengeMethod:i,codeChallenge:o},void 0,n)}async startNewProject(r,n){return this.post("auth/newproject",r,void 0,n)}async startNewPatient(r,n){return this.post("auth/newpatient",r,void 0,n)}async startLogin(r,n){return this.post("auth/login",{...await this.ensureCodeChallenge(r),clientId:r.clientId??this.clientId,scope:r.scope},void 0,n)}async startGoogleLogin(r,n){return this.post("auth/google",{...await this.ensureCodeChallenge(r),clientId:r.clientId??this.clientId,scope:r.scope},void 0,n)}async ensureCodeChallenge(r){return r.codeChallenge?r:{...r,...await this.startPkce()}}async signOut(){await this.post(this.logoutUrl,{}),this.clear()}async signInWithRedirect(r){let i=new URLSearchParams(he.getSearch()).get("code");if(!i){await this.requestAuthorization(r);return}return this.processCode(i)}signOutWithRedirect(){he.assign(this.logoutUrl)}async signInWithExternalAuth(r,n,i,o,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),he.assign(this.getExternalAuthRedirectUri(r,n,i,a,s))}async exchangeExternalAccessToken(r,n,i){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");let o={grant_type:et.TokenExchange,subject_token_type:qs.AccessToken,client_id:n,subject_token:r};return i&&(o.membership_id=i),this.fetchTokens(o)}getExternalAuthRedirectUri(r,n,i,o,s=!0){let a=new URL(r);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",n),a.searchParams.set("redirect_uri",i),a.searchParams.set("scope",o.scope??"openid profile email"),a.searchParams.set("state",JSON.stringify(o)),s){let{codeChallenge:u,codeChallengeMethod:l}=o;if(!l)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!u)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");a.searchParams.set("code_challenge_method",l),a.searchParams.set("code_challenge",u)}return a.toString()}fhirUrl(...r){return new URL(W(this.fhirBaseUrl,r.join("/")))}fhirSearchUrl(r,n){let i=this.fhirUrl(r);return n&&(i.search=di(n)),i}search(r,n,i){let o=this.fhirSearchUrl(r,n),s="search-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=this.getBundle(o,i);return this.setCacheEntry(s,u,i),u}searchOne(r,n,i){let o=this.fhirSearchUrl(r,n);o.searchParams.set("_count","1"),o.searchParams.sort();let s="searchOne-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=new $(this.search(r,o.searchParams,i).then(l=>l.entry?.[0]?.resource));return this.setCacheEntry(s,u,i),u}searchResources(r,n,i){let s="searchResources-"+this.fhirSearchUrl(r,n).toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=new $(this.search(r,n,i).then(Us));return this.setCacheEntry(s,u,i),u}async*searchResourcePages(r,n,i){let o=this.fhirSearchUrl(r,n);for(;o;){let s=new URL(o).searchParams;s.has("_count")||s.set("_count","1000");let a=await this.search(r,s,i),u=a.link?.find(l=>l.relation==="next");if(!a.entry?.length&&!u)break;yield Us(a),o=u?.url?new URL(u.url):void 0}}valueSetExpand(r,n){let i=this.fhirUrl("ValueSet","$expand");return i.search=new URLSearchParams(r).toString(),this.get(i.toString(),n)}getCached(r,n){let i=this.requestCache?.get(this.fhirUrl(r,n).toString())?.value;return i?.isOk()?i.read():void 0}getCachedReference(r){let n=r.reference;if(!n)return;if(n==="system")return Ns;let[i,o]=n.split("/");if(!(!i||!o))return this.getCached(i,o)}readResource(r,n,i){if(!n)throw new Error('The "id" parameter cannot be null, undefined, or an empty string.');return this.get(this.fhirUrl(r,n),i)}readReference(r,n){let i=r.reference;if(!i)return new $(Promise.reject(new Error("Missing reference")));if(i==="system")return new $(Promise.resolve(Ns));let[o,s]=i.split("/");return!o||!s?new $(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}readCanonical(r,n,i){return Array.isArray(r)?this.searchOne("",{_type:r.join(","),url:n},i):this.searchOne(r,"url="+n,i)}requestSchema(r,n){if(Wn(r))return Promise.resolve();let i=r+"-requestSchema",o=this.getCacheEntry(i,void 0);if(o)return o.value;let s=new $((async()=>{let a=`{
|
|
3
|
+
`))}consumeString(e){this.advance();let r="",n;for(;n=this.consumeChar(e);)r+=n;let i=this.buildToken(e==="`"?"Symbol":"String",r);return this.advance(),i}consumeChar(e){let r=this.curr();if(r==="\\"){this.advance();let n=this.curr(),i=ll[n];if(i!==void 0)return this.advance(),i;if(n==="u"){this.advance();let o=/^[0-9a-fA-F]{4}$/.exec(this.str.substring(this.pos.index,this.pos.index+4))?.[0];return o?(this.advance(),this.advance(),this.advance(),this.advance(),String.fromCodePoint(Number.parseInt(o,16))):"u"}return this.consumeChar(e)}return r===e||!r?"":(this.advance(),r)}consumeQuotedSymbol(e){this.mark();let r=this.pos.index;this.advance(),this.consumeString(e);let n=this.str.substring(r,this.pos.index);return this.buildToken("Symbol",n)}consumeDateTime(){this.advance();let e=this.pos.index;this.consumeWhile(()=>/[\d-]/.exec(this.curr()));let r=!1,n=!1;if(this.curr()==="T"&&(r=!0,this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())),this.curr()==="."&&/\d/.exec(this.peek())&&(this.advance(),this.consumeWhile(()=>/\d/.exec(this.curr()))),this.curr()==="Z"?(n=!0,this.advance()):(this.curr()==="+"||this.curr()==="-")&&(n=!0,this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())))),this.pos.index===e)throw new Error("Invalid DateTime literal");let i=this.str.substring(e,this.pos.index);return i.endsWith("T")?i=i.substring(0,i.length-1):!i.startsWith("T")&&r&&!n&&(i+="Z"),this.buildToken("DateTime",i)}consumeNumber(){let e=this.pos.index,r="Number";this.consumeWhile(()=>/\d/.exec(this.curr())),this.curr()==="."&&/\d/.exec(this.peek())&&(this.advance(),this.consumeWhile(()=>/\d/.exec(this.curr())));let n=this.curr();if(n==="-"&&this.dateTimeLiterals)return ul.test(this.str.substring(e))?(this.pos.index=e-1,this.consumeDateTime()):this.consumeUnquotedString(e);if(n===" ")dl(this.peekToken())&&(r="Quantity",this.consumeToken());else if(n&&/[a-zA-Z_$]/.exec(n))return this.consumeUnquotedString(e);return this.buildToken(r,this.str.substring(e,this.pos.index))}consumeUnquotedString(e){return this.pos.index=e,this.buildToken("String",this.consumeWhile(()=>this.symbolRegex.exec(this.curr())))}consumeSymbol(){let e=this.consumeWhile(()=>this.symbolRegex.exec(this.curr()));return this.prevToken()?.value!=="."&&this.keywords.includes(e)?this.buildToken(e,e):this.buildToken("Symbol",e)}consumeOperator(){let e=this.curr(),r=this.peek(),n=e+r;return this.operators.includes(n)?(this.advance(),this.advance(),this.buildToken(n,n)):(this.advance(),this.buildToken(e,e))}consumeWhile(e){let r=this.pos.index;for(;this.pos.index<this.str.length&&e();)this.advance();return this.str.substring(r,this.pos.index)}curr(){return this.str[this.pos.index]}peek(){return this.str[this.pos.index+1]??""}mark(){this.markStack.push({...this.pos})}reset(){let e=this.markStack.pop();if(!e)throw new Error("No mark to reset to");this.pos.index=e.index,this.pos.line=e.line,this.pos.column=e.column}advance(){this.pos.index++,this.curr()===`
|
|
4
|
+
`?(this.pos.line++,this.pos.column=0):this.pos.column++}buildToken(e,r){let n=this.markStack.pop();if(!n)throw new Error("No mark for token");return{id:e,value:r,...n}}};function dl(t){return!!(t&&(t.id==="String"||t.id==="Symbol"&&cl.includes(t.value)))}var Kt=["true","false"],Yt=["!=","!~","<=",">=","{}","->"];function ps(t){return new Pe(t,Kt,Yt).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},pl={parse(t){let e=t.consumeAndParse();if(!t.match(")"))throw new Error("Parse error: expected `)` got `"+t.peek()?.value+"`");return e}},fl={parse(t,e){let r=t.consumeAndParse();if(!t.match("]"))throw new Error("Parse error: expected `]`");return new Le(e,r)},precedence:S.Indexer},ml={parse(t,e){if(!(e instanceof F))throw new Error("Unexpected parentheses");let r=[];for(;!t.match(")");)r.push(t.consumeAndParse()),t.match(",");return new oe(e.name,r)},precedence:S.FunctionCall};function hl(t){let e=t.split(" "),r=Number.parseFloat(e[0]),n=e[1];return n?.startsWith("'")&&n.endsWith("'")?n=n.substring(1,n.length-1):n="{"+n+"}",{value:r,unit:n}}function pt(){return new St().registerPrefix("String",{parse:(t,e)=>new G({type:p.string,value:e.value})}).registerPrefix("DateTime",{parse:(t,e)=>new G({type:p.dateTime,value:dt(e.value)})}).registerPrefix("Quantity",{parse:(t,e)=>new G({type:p.Quantity,value:hl(e.value)})}).registerPrefix("Number",{parse:(t,e)=>new G({type:e.value.includes(".")?p.decimal:p.integer,value:Number.parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new G({type:p.boolean,value:!0})}).registerPrefix("false",{parse:()=>new G({type:p.boolean,value:!1})}).registerPrefix("Symbol",{parse:(t,e)=>new F(e.value)}).registerPrefix("{}",{parse:()=>new Nt}).registerPrefix("(",pl).registerInfix("[",fl).registerInfix("(",ml).prefix("+",S.UnaryAdd,(t,e)=>new Ft("+",e,r=>r)).prefix("-",S.UnarySubtract,(t,e)=>new q("-",e,e,(r,n)=>-n)).infixLeft(".",S.Dot,(t,e,r)=>new ie(t,r)).infixLeft("/",S.Divide,(t,e,r)=>new q("/",t,r,(n,i)=>n/i)).infixLeft("*",S.Multiply,(t,e,r)=>new q("*",t,r,(n,i)=>n*i)).infixLeft("+",S.Add,(t,e,r)=>new q("+",t,r,(n,i)=>n+i)).infixLeft("-",S.Subtract,(t,e,r)=>new q("-",t,r,(n,i)=>n-i)).infixLeft("|",S.Union,(t,e,r)=>new Ve(t,r)).infixLeft("=",S.Equals,(t,e,r)=>new Wt(t,r)).infixLeft("!=",S.NotEquals,(t,e,r)=>new $t(t,r)).infixLeft("~",S.Equivalent,(t,e,r)=>new jt(t,r)).infixLeft("!~",S.NotEquivalent,(t,e,r)=>new Ht(t,r)).infixLeft("<",S.LessThan,(t,e,r)=>new q("<",t,r,(n,i)=>n<i)).infixLeft("<=",S.LessThanOrEquals,(t,e,r)=>new q("<=",t,r,(n,i)=>n<=i)).infixLeft(">",S.GreaterThan,(t,e,r)=>new q(">",t,r,(n,i)=>n>i)).infixLeft(">=",S.GreaterThanOrEquals,(t,e,r)=>new q(">=",t,r,(n,i)=>n>=i)).infixLeft("&",S.Ampersand,(t,e,r)=>new Ut(t,r)).infixLeft("and",S.And,(t,e,r)=>new Gt(t,r)).infixLeft("as",S.As,(t,e,r)=>new Ce(t,r)).infixLeft("contains",S.Contains,(t,e,r)=>new Bt(t,r)).infixLeft("div",S.Divide,(t,e,r)=>new q("div",t,r,(n,i)=>Math.trunc(n/i))).infixLeft("in",S.In,(t,e,r)=>new qt(t,r)).infixLeft("is",S.Is,(t,e,r)=>new _e(t,r)).infixLeft("mod",S.Modulo,(t,e,r)=>new q("mod",t,r,(n,i)=>n%i)).infixLeft("or",S.Or,(t,e,r)=>new Qt(t,r)).infixLeft("xor",S.Xor,(t,e,r)=>new zt(t,r)).infixLeft("implies",S.Implies,(t,e,r)=>new Jt(t,r))}var gl=pt();function Xt(t){return new Re(t,gl.construct(ps(t)).consumeAndParse())}function yl(t,e,r={},n=void 0){let i=Array.isArray(e)?e:[e];for(let o=0;o<i.length;o++){let s=i[o];typeof s=="object"&&"type"in s&&"value"in s||(i[o]=E(i[o]))}return k(t,i,r,n).map(o=>o.value)}function k(t,e,r={},n=void 0){let i;if(typeof t=="string"){let o=n?.get(t);i=o??Xt(t),n&&!o&&n.set(t,i)}else i=t;return i.eval({variables:r},e).map(o=>{let s={type:o.type,value:o.value?.valueOf()};return"path"in o&&(s.path=o.path),s})}function xl(t){let e=[];for(let r of t)r.type===p.Range?e.push([r.value?.low?.value,r.value?.high?.value]):typeof r.value=="number"&&e.push([r.value,r.value]);return e}function yi(t){let e=[];for(let r of t){let n=wt(r.value);n&&e.push(n)}return e}function xi(t){let e=new Set;for(let r of t){let n=pi(r);n&&e.add(n)}return Array.from(e)}function vi(t){let e=new Set;for(let r of t){let{value:n}=r;n&&(pe(n)?e.add(n):J(n)?e.add(n.reference):ut(n)?e.add(I(n)):typeof n.identifier=="object"&&e.add(`identifier:${n.identifier.system}|${n.identifier.value}`))}return Array.from(e)}function vl(t){let e=[];for(let r of t){let{value:n}=r;typeof n=="number"?e.push({value:n}):L(n)&&e.push(n)}return e}function Tl(t){let e=new Set;for(let r of t)pe(r.value)&&e.add(r.value);return Array.from(e)}function Ti(t,e={}){let r=[];for(let n of t)Sl(e,r,n);return r}function Sl(t,e,r){let{type:n,value:i}=r;switch(n){case p.Identifier:bl(e,t,i);break;case p.CodeableConcept:El(e,t,i);break;case p.Coding:fs(e,t,i);break;case p.ContactPoint:Rl(e,t,i);break;default:Xe(e,t,void 0,i?.toString())}}function bl(t,e,r){r?.type?.text&&Xe(t,e,e.textSearchSystem,r.type.text),Xe(t,e,r?.system,r?.value)}function El(t,e,r){r?.text&&Xe(t,e,e.textSearchSystem,r.text);for(let n of r?.coding??v)fs(t,e,n)}function fs(t,e,r){r&&(r.display&&Xe(t,e,e.textSearchSystem,r.display),Xe(t,e,r.system,r.code))}function Rl(t,e,r){r&&Xe(t,e,r.system,r.value?.toLocaleLowerCase())}function Xe(t,e,r,n){(r||n)&&!t.some(i=>i.system===r&&i.value===n)&&t.push({system:r,value:n&&e.caseInsensitive?n.toLocaleLowerCase():n})}var Cl=20,Pl=1e3,g={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"},Si={contains:g.CONTAINS,exact:g.EXACT,above:g.ABOVE,below:g.BELOW,text:g.TEXT,not:g.NOT,in:g.IN,"not-in":g.NOT_IN,"of-type":g.OF_TYPE,missing:g.MISSING,identifier:g.IDENTIFIER,iterate:g.ITERATE},bi={eq:g.EQUALS,ne:g.NOT_EQUALS,lt:g.LESS_THAN,le:g.LESS_THAN_OR_EQUALS,gt:g.GREATER_THAN,ge:g.GREATER_THAN_OR_EQUALS,sa:g.STARTS_AFTER,eb:g.ENDS_BEFORE,ap:g.APPROXIMATELY,sw:g.STARTS_WITH};function ft(t,e){if(!t)throw new Error("Invalid search URL");let r="",n;if(typeof t=="string")if(t.includes("?")){let[s,a]=t.split("?");r=s,n=new URLSearchParams(a)}else r=t;else typeof t=="object"&&(r=t.pathname,n=t.searchParams);let i;r.includes("/")?i=r.split("/").filter(Boolean).pop():i=r;let o=[];if(n&&o.push(...n.entries()),e)for(let[s,a]of Object.entries(e))if(Array.isArray(a))for(let u of a)o.push([s,u]);else o.push([s,a??""]);return Al(i,o)}function Al(t,e){let r={resourceType:t};for(let[n,i]of e)wl(r,n,i);return r}function wl(t,e,r){let n,i,o=e.indexOf(":");if(o>=0?(n=e.substring(0,o),i=e.substring(o+1)):(n=e,i=""),n!=="_"){if(n==="_has"||e.includes(".")){t.filters=re(t.filters,{code:e,operator:g.EQUALS,value:r});return}switch(n){case"_sort":Ol(t,r);break;case"_cursor":t.cursor=r;break;case"_count":t.count=Number.parseInt(r,10);break;case"_offset":t.offset=Number.parseInt(r,10);break;case"_total":t.total=r;break;case"_summary":r==="count"?(t.total="accurate",t.count=0):(r==="true"||r==="data"||r==="text")&&(t.summary=r);break;case"_include":{let s=ms(r);i==="iterate"&&(s.modifier=g.ITERATE),t.include=re(t.include,s);break}case"_revinclude":{let s=ms(r);i==="iterate"&&(s.modifier=g.ITERATE),t.revInclude=re(t.revInclude,s);break}case"_fields":case"_elements":t.fields=r.split(",");break;case"_type":t.types=r.split(",");break;case"_format":t.format=r;break;case"_pretty":t.pretty=r==="true";break;default:{let s=H.types[t.resourceType]?.searchParams?.[n];s?t.filters=re(t.filters,ys(s,g.EQUALS,i,r)):t.filters=re(t.filters,kl(n,i,r))}}}}function Ol(t,e){for(let r of e.split(",")){let n,i=!1;r.startsWith("-")?(n=r.substring(1),i=!0):n=r,t.sortRules||(t.sortRules=[]),t.sortRules.push({code:n,descending:i})}}var Il=[g.MISSING,g.PRESENT];function ys(t,e,r,n){if(Il.includes(r||e))return{code:t.code,operator:r||e,value:n};switch(t.type){case"number":case"date":case"quantity":{let{operator:i,value:o}=Ml(n,r||g.EQUALS);if(!hs(t,o))throw new m(w(`Invalid format for ${t.type} search parameter: ${o}`));return{code:t.code,operator:i,value:o}}case"reference":case"string":case"token":case"uri":{if(!hs(t,n))throw new m(w(`Invalid format for ${t.type} search parameter: ${n}`));return{code:t.code,operator:Dl(r)??e,value:n}}default:throw new Error("Unrecognized search parameter type: "+t.type)}}function kl(t,e,r){let n=g.EQUALS;if(e)n=e;else if(r.length>=2){let i=r.substring(0,2);i in bi&&(r.length===2||r.at(2)?.match(/\d/))&&(n=i,r=r.substring(i.length))}return{code:t,operator:n,value:r}}function Ml(t,e){let r=t.substring(0,2),n=bi[r];return n?{operator:n,value:t.substring(2)}:{operator:e,value:t}}function Dl(t){return Si[t]}function ms(t){let e=t.split(":");if(e.includes("*"))throw new m(w("'*' is not supported as a value for search inclusion parameters"));if(e.length===1)throw new m(w(`Invalid include value '${t}': must be of the form ResourceType:search-parameter`));if(e.length===2)return{resourceType:e[0],searchParam:e[1]};if(e.length===3)return{resourceType:e[0],searchParam:e[1],targetType:e[2]};throw new m(w(`Invalid include value '${t}'`))}function hs(t,e){return t.type==="date"?Ge(e):!0}var Vl=/{{([^{}]+)}}/g;function _l(t,e,r=[]){return t=t.replaceAll(Vl,(n,i)=>{let o=k(i,r,e);return o.length!==1?"":gi(o[0])}),ft(t)}function Ll(t){let e=[];t.fields&&e.push("_fields="+t.fields.join(","));for(let r of t.filters??v)e.push(Nl(r));t.sortRules&&t.sortRules.length>0&&e.push(Fl(t.sortRules)),t.cursor!==void 0&&e.push("_cursor="+encodeURIComponent(t.cursor)),t.offset!==void 0&&t.offset!==0&&e.push("_offset="+t.offset),t.count!==void 0&&e.push("_count="+t.count),t.total!==void 0&&e.push("_total="+t.total),t.types&&t.types.length>0&&e.push("_type="+t.types.join(","));for(let r of t.include??v)e.push(gs("_include",r));for(let r of t.revInclude??v)e.push(gs("_revinclude",r));return e.length===0?"":(Dt(e),"?"+e.join("&"))}function Nl(t){let e=t.operator in Si?":"+t.operator:"",r=t.operator!==g.EQUALS&&t.operator in bi?t.operator:"";return`${t.code}${e}=${r}${encodeURIComponent(t.value)}`}function Fl(t){return"_sort="+t.map(e=>e.descending?"-"+e.code:e.code).join(",")}function gs(t,e){return t+(e.modifier?":"+e.modifier:"")+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}function mt(t){let e=[],r="",n=!1;for(let i of t)n?(r+=i,n=!1):i==="\\"?n=!0:i===","?(e.push(r),r=""):r+=i;return e.push(r),e}function Ul(t,e){return w(`Invalid modifier :${t} for ${e}`)}function Bl(t,e){return t in Si?Ul(t,e):w(`Invalid operator ${t} for ${e}`)}function ql(t){return t.types??[t.resourceType]}function Zt(t,e){if(e.resourceType!==t.resourceType)return!1;for(let r of e.filters??v)if(!$l(t,e,r))return!1;return!0}var Wl=new ee(1e3);function $l(t,e,r){let n=H.types[e.resourceType]?.searchParams?.[r.code];if(!n)return!1;let i=k(n.expression,[E(t)],void 0,Wl);if(r.operator===g.MISSING||r.operator===g.PRESENT)return jl(i,r);switch(n.type){case"reference":return Hl(n,i,r);case"string":case"uri":return zl(i,r);case"token":return Gl(i,r);case"date":return Kl(i,r);default:return!1}}function jl(t,e){let r=t.length>0;return(e.operator===g.MISSING&&e.value==="false"||e.operator===g.PRESENT&&e.value==="true")===r}function Hl(t,e,r){let n=zr(r.operator);if(r.value===""&&e.length===0)return r.operator===g.EQUALS;let i=vi(e);for(let o of mt(r.value)){let s=!1;if(o.includes("/")?s=i.includes(o):(t.target?.length===1||r.code==="_compartment")&&(s=i.some(a=>a?.endsWith("/"+o))),s)return!n}return n}function Gl(t,e){let r=Ti(t),n=mt(e.value),i=zr(e.operator);for(let o of r)for(let s of n)if(Ql(o,s))return!i;return i}function Ql(t,e){if(e.includes("|")){let[r,n]=e.split("|").map(i=>i.toLowerCase());return!r&&!n?!1:r?t.system?.toLowerCase()===r&&(!n||t.value?.toLowerCase()===n):!t.system&&t.value?.toLowerCase()===n}return t.value?.toLowerCase()===e.toLowerCase()}function zl(t,e){let r=xi(t),n=mt(e.value),i=zr(e.operator);for(let o of r)for(let s of n)if(Jl(o,s))return!i;return i}function Jl(t,e){return t.toLowerCase().includes(e.toLowerCase())}function Kl(t,e){let r=yi(t),n=mt(e.value),i=zr(e.operator);for(let o of r)for(let s of n)if(Yl(o,e.operator,s))return!i;return i}function Yl(t,e,r){if(!t)return!1;let n=wt(r);if(!n)return!1;let i=t.start??"0000",o=t.end??"9999",s=n.start,a=n.end;switch(e){case g.APPROXIMATELY:case g.EQUALS:case g.NOT_EQUALS:return i<a&&o>s;case g.LESS_THAN:return i<s;case g.GREATER_THAN:return o>a;case g.LESS_THAN_OR_EQUALS:return i<=a;case g.GREATER_THAN_OR_EQUALS:return o>=s;case g.STARTS_AFTER:return i>a;case g.ENDS_BEFORE:return o<s;default:return!1}}function zr(t){return t===g.NOT_EQUALS||t===g.NOT}var Xl={resourceType:"*"},xs=["DomainConfiguration","JsonWebKey","Login"],vs=["Package","PackageRelease","PackageInstallation","Project","ProjectMembership","User","UserSecurityRequest"],Ne={READ:"read",VREAD:"vread",UPDATE:"update",DELETE:"delete",HISTORY:"history",CREATE:"create",SEARCH:"search"},Ts=[Ne.READ,Ne.VREAD,Ne.HISTORY,Ne.SEARCH];function Zl(t,e){return Ei(t,Ne.SEARCH,e)}function ed(t,e){return xs.includes(e)?!1:Ei(t,Ne.UPDATE,e)}function Ei(t,e,r){return!!t.resource?.some(n=>bs(n,r,e))}function td(t,e){return!!Ss(e,Ne.UPDATE,t)}function Ss(t,e,r){return r?r.resource?.find(n=>rd(t,e,n)):Xl}function rd(t,e,r){let n=t.resourceType;return bs(r,n,e)?n==="Binary"?!0:!(r.compartment&&!t.meta?.compartment?.some(i=>i.reference===r.compartment?.reference)||r.criteria&&!Zt(t,ft(r.criteria))):!1}function bs(t,e,r){return t.resourceType!==e&&(t.resourceType!=="*"||vs.includes(e))?!1:t.interaction?t.interaction.includes(r):!t.readonly||Ts.includes(r)}var nd={FIRST:"first",APPLICATION:"application"};function X(){return typeof window<"u"}function id(){return typeof Buffer<"u"}function od(){return typeof window<"u"?window:void 0}function Jr(){return typeof Buffer<"u"?Buffer:void 0}var he={assign(t){X()&&globalThis.location.assign(t)},reload(){X()&&globalThis.location.reload()},getSearch(){return X()?globalThis.location.search:""},getPathname(){return X()?globalThis.location.pathname:""},getLocation(){return X()?globalThis.location.toString():""},getOrigin(){return X()?globalThis.location.protocol+"//"+globalThis.location.host+"/":""}};function Es(t){if(X()){let r=window.atob(t),n=Uint8Array.from(r,i=>i.codePointAt(0));return new window.TextDecoder().decode(n)}let e=Jr();if(e)return e.from(t,"base64").toString("utf-8");throw new Error("Unable to decode base64")}function er(t){if(X()){let r=new window.TextEncoder().encode(t),n=String.fromCodePoint.apply(null,r);return window.btoa(n)}let e=Jr();if(e)return e.from(t,"utf8").toString("base64");throw new Error("Unable to encode base64")}function Ri(t){return er(t).replaceAll("+","-").replaceAll("/","_").replace(/[=]{1,2}$/,"")}function tr(t){t=t.padEnd(t.length+(4-t.length%4)%4,"=");let e=t.replaceAll("-","+").replaceAll("_","/");return Es(e)}function Kr(){let t=new Uint32Array(28);return crypto.getRandomValues(t),oi(t.buffer)}async function Ci(t){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(t))}function se(){return typeof crypto<"u"&&"randomUUID"in crypto?crypto.randomUUID():"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replaceAll(/[xy]/g,t=>{let e=Math.trunc(Math.random()*16);return(t==="x"?e:e&3|8).toString(16)})}function Rs(t){let e={};t=de(t);for(let i of t.entry??v){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]=se(),i.fullUrl="urn:uuid:"+e[s],delete i.resource?.id;else if(i.fullUrl?.startsWith("resource:")){let a=i.fullUrl.slice(9);e[a]=se(),i.fullUrl="urn:uuid:"+e[a]}}let r=t.entry,n=JSON.stringify({resourceType:"Bundle",type:"transaction",entry:r?.map(i=>({fullUrl:i.fullUrl,request:{method:"POST",url:i.resource?.resourceType},resource:i.resource}))},(i,o)=>sd(i,o,e),2);return Cs(JSON.parse(n))}function sd(t,e,r){if((t==="reference"||t==="url")&&typeof e=="string"){let n;if(e.includes("/")?n=e.split("/")[1]:e.startsWith("urn:uuid:")||e.startsWith("resource:")?n=e.slice(9):e.startsWith("#")&&(n=e.slice(1)),n){let i=r[n];if(i)return"urn:uuid:"+i}}return e}function Cs(t){let e=cd(t),{sorted:r,cycles:n}=ad(e),i={},o=[];for(let a of t.entry??v)a.fullUrl?i[a.fullUrl]=a:o.push(a);let s=r.map(a=>i[a]);for(let a of n)for(let u of a){let l=i[u],d={...l,request:{...l.request,method:"PUT"}};s.push(d)}return s.push(...o),{...t,entry:s}}var ht={NotVisited:"NotVisited",Visiting:"Visiting",Visited:"Visited"};function ad(t){let e=[],r={},n=[];for(let o of Object.keys(t))r[o]=ht.NotVisited;function i(o,s){if(r[o]===ht.Visited)return!0;if(r[o]===ht.Visiting){let u=s.lastIndexOf(o);return u!==-1&&n.push(s.slice(u)),!0}r[o]=ht.Visiting,s.push(o);let a=!1;for(let u of t[o]??v)i(u,s)||(a=!0);return r[o]=ht.Visited,s.pop(),e.unshift(o),!a}for(let o in t)r[o]===ht.NotVisited&&i(o,[]);return{sorted:e,cycles:n}}function Ps(t,e){for(let r in t)if(t[r]&&typeof t[r]=="object"){let n=t[r];if(J(n)){let i=n.reference;(i.startsWith("urn:uuid:")||i.startsWith("resource:"))&&e(i)}else Ps(n,e)}}function cd(t){let e={};for(let r of t.entry??v)r.fullUrl&&(e[r.fullUrl]=[]);for(let r of t.entry??v){let n=r.fullUrl;n&&r.resource&&Ps(r.resource,i=>{i!==n&&e[i]&&e[i].push(n)})}return e}function ud(t){t=de(t);let e={resourceType:"Bundle",type:"transaction",entry:[{resource:t}]};if(t.contained){for(let r of t.contained)e.entry.push({resource:r});t.contained=void 0}for(let r of e.entry)r.resource&&!r.resource.id&&(r.resource.id=se());return Rs(e)}function ld(t,e,r){return t.entry?.find(({resource:n})=>n?.resourceType===e&&n?.id===r)?.resource}async function dd(t,e,r,n){return{hook:r.hook,hookInstance:se(),context:n,prefetch:await pd(t,e,r,n)}}async function pd(t,e,r,n){if(!r.prefetch)return{};let i={};for(let[o,s]of Object.entries(r.prefetch)){let a=await fd(t,e,n,s);i[o]=a??null}return i}function fd(t,e,r,n){if(n=As(e,r,n),n.includes("{{"))return Promise.resolve(null);let i=/^(\w+)\/([0-9a-zA-Z-_]+)$/.exec(n);if(i){let[a,u]=i.slice(1);return t.readResource(a,u)}let[o,s]=Je(n,"?",2);return t.search(o,s)}var md=new Set(["userPractitionerId","userPractitionerRoleId","userPatientId","userRelatedPersonId"]);function As(t,e,r){return r.replaceAll(/\{\{([^}]+)\}\}/g,(n,i)=>{if(i=i.trim(),md.has(i))return t.id;if(i.startsWith("context.")){let o=i.substring(8),s=hd(e,o);if(pe(s))return s;if(typeof s=="number"||typeof s=="boolean")return String(s)}return n})}function hd(t,e){let r=e.split("."),n=t;for(let i of r)if(n&&C(n)&&i in n)n=n[i];else return;return n}var V={CSS:"text/css",DICOM:"application/dicom",DICOM_JSON:"application/dicom+json",EVENT_STREAM:"text/event-stream",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",JOSE:"application/jose",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 Yr=class{constructor(){c(this,"listeners");this.listeners={}}addEventListener(e,r){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(r)}removeEventListener(e,r){let n=this.listeners[e];if(n){for(let i=0;i<n.length;i++)if(n[i]===r){n.splice(i,1);return}}}dispatchEvent(e){let r=this.listeners[e.type];for(let n of r??v)try{n.call(this,e)}catch(i){console.error(`Unhandled error in "${e.type}" event listener`,i)}return!e.defaultPrevented}removeAllListeners(){this.listeners={}}listenerCount(e){return this.listeners[e]?.length??0}},ae=class{constructor(){c(this,"emitter",new Yr)}dispatchEvent(e){this.emitter.dispatchEvent(e)}addEventListener(e,r){this.emitter.addEventListener(e,r)}removeEventListener(e,r){this.emitter.removeEventListener(e,r)}removeAllListeners(){this.emitter.removeAllListeners()}listenerCount(e){return this.emitter.listenerCount(e)}};var Z={Event:typeof globalThis.Event<"u"?globalThis.Event:void 0,ErrorEvent:void 0,CloseEvent:void 0},ws=!1;function gd(){if(typeof globalThis.Event>"u")throw new Error("Unable to lazy init events for ReconnectingWebSocket. globalThis.Event is not defined yet");Z.Event=globalThis.Event,Z.ErrorEvent=class extends Event{constructor(r,n){super("error",n);c(this,"message");c(this,"error");this.message=r.message,this.error=r}},Z.CloseEvent=class extends Event{constructor(r=1e3,n="",i){super("close",i);c(this,"code");c(this,"reason");c(this,"wasClean",!0);this.code=r,this.reason=n}}}function Is(t,e){if(!t)throw new Error(e)}function yd(){}function Xr(t){if(t instanceof Z.CloseEvent){let e=t;return new Z.CloseEvent(e.code,e.reason,void 0)}if(t instanceof Z.ErrorEvent){let e=t;return new Z.ErrorEvent(e.error??new Error(e.message),void 0)}return new t.constructor(t.type,t)}function ks(t,e){let r=t;return r.error instanceof Error?new Z.ErrorEvent(r.error,e):new Z.ErrorEvent(new Error(r.message||"WebSocket error"),e)}var Ze={maxReconnectionDelay:1e4,minReconnectionDelay:1e3+Math.random()*4e3,minUptime:5e3,reconnectionDelayGrowFactor:1.3,connectionTimeout:4e3,maxRetries:1/0,maxEnqueuedMessages:1/0,startClosed:!1,debug:!1},Os=!1,et=class t extends ae{constructor(r,n,i={}){ws||(gd(),ws=!0);super();c(this,"_ws");c(this,"_retryCount",-1);c(this,"_uptimeTimeout");c(this,"_connectTimeout");c(this,"_shouldReconnect",!0);c(this,"_connectLock",!1);c(this,"_binaryType");c(this,"_closeCalled",!1);c(this,"_messageQueue",[]);c(this,"_debugLogger",console.log.bind(console));c(this,"_url");c(this,"_protocols");c(this,"_options");c(this,"onclose",null);c(this,"onerror",null);c(this,"onmessage",null);c(this,"onopen",null);c(this,"_handleOpen",r=>{this._debug("open event");let{minUptime:n=Ze.minUptime}=this._options;clearTimeout(this._connectTimeout),this._uptimeTimeout=setTimeout(()=>this._acceptOpen(),n),Is(this._ws,"WebSocket is not defined"),this._ws.binaryType=this._binaryType,this._messageQueue.forEach(i=>this._ws?.send(i)),this._messageQueue=[],this.onopen&&this.onopen(r),this.dispatchEvent(Xr(r))});c(this,"_handleMessage",r=>{this._debug("message event"),this.onmessage&&this.onmessage(r),this.dispatchEvent(Xr(r))});c(this,"_handleError",r=>{let n=ks(r,this);this._debug("error event",n.message),this._disconnect(void 0,n.message==="TIMEOUT"?"timeout":void 0),this.onerror&&this.onerror(n),this._debug("exec error listeners"),this.dispatchEvent(Xr(n)),this._connect()});c(this,"_handleClose",r=>{this._debug("close event"),this._clearTimeouts(),this._shouldReconnect&&this._connect(),this.onclose&&this.onclose(r),this.dispatchEvent(Xr(r))});this._url=r,this._protocols=n,this._options=i,this._options.startClosed&&(this._shouldReconnect=!1),this._options.binaryType?this._binaryType=this._options.binaryType:this._binaryType="blob",this._options.debugLogger&&(this._debugLogger=this._options.debugLogger),this._connect()}static get CONNECTING(){return 0}static get OPEN(){return 1}static get CLOSING(){return 2}static get CLOSED(){return 3}get CONNECTING(){return t.CONNECTING}get OPEN(){return t.OPEN}get CLOSING(){return t.CLOSING}get CLOSED(){return t.CLOSED}get binaryType(){return this._ws?this._ws.binaryType:this._binaryType}set binaryType(r){this._binaryType=r,this._ws&&(this._ws.binaryType=r)}get retryCount(){return Math.max(this._retryCount,0)}get bufferedAmount(){return this._messageQueue.reduce((n,i)=>(typeof i=="string"?n+=i.length:i instanceof Blob?n+=i.size:n+=i.byteLength,n),0)+(this._ws?.bufferedAmount??0)}get extensions(){return this._ws?.extensions??""}get protocol(){return this._ws?.protocol??""}get readyState(){return this._ws?this._ws.readyState:this._options.startClosed?t.CLOSED:t.CONNECTING}get url(){return this._ws?this._ws.url:""}get shouldReconnect(){return this._shouldReconnect}close(r=1e3,n){if(this._closeCalled=!0,this._shouldReconnect=!1,this._clearTimeouts(),!this._ws){this._debug("close enqueued: no ws instance");return}if(this._ws.readyState===this.CLOSED){this._debug("close: already closed");return}this._ws.close(r,n)}reconnect(r,n){this._shouldReconnect=!0,this._closeCalled=!1,this._retryCount=-1,!this._ws||this._ws.readyState===this.CLOSED?this._connect():(this._disconnect(r,n),this._connect())}send(r){if(this._ws?.readyState===this.OPEN)this._debug("send",r),this._ws.send(r);else{let{maxEnqueuedMessages:n=Ze.maxEnqueuedMessages}=this._options;this._messageQueue.length<n&&(this._debug("enqueue",r),this._messageQueue.push(r))}}_debug(...r){this._options.debug&&this._debugLogger("RWS>",...r)}_getNextDelay(){let{reconnectionDelayGrowFactor:r=Ze.reconnectionDelayGrowFactor,minReconnectionDelay:n=Ze.minReconnectionDelay,maxReconnectionDelay:i=Ze.maxReconnectionDelay}=this._options,o=0;return this._retryCount>0&&(o=n*Math.pow(r,this._retryCount-1),o>i&&(o=i)),this._debug("next delay",o),o}_wait(){return new Promise(r=>{setTimeout(r,this._getNextDelay())})}_connect(){if(this._connectLock||!this._shouldReconnect)return;this._connectLock=!0;let{maxRetries:r=Ze.maxRetries,connectionTimeout:n=Ze.connectionTimeout}=this._options;if(this._retryCount>=r){this._connectLock=!1,this._debug("max retries reached",this._retryCount,">=",r);return}this._retryCount++,this._debug("connect",this._retryCount),this._removeListeners(),this._wait().then(()=>{if(this._closeCalled){this._connectLock=!1;return}!this._options.WebSocket&&typeof WebSocket>"u"&&!Os&&(console.error("\u203C\uFE0F No WebSocket implementation available. You should define options.WebSocket."),Os=!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 Z.ErrorEvent(Error(i.message),this))})}_handleTimeout(){this._debug("timeout event"),this._handleError(new Z.ErrorEvent(Error("TIMEOUT"),this))}_disconnect(r=1e3,n){if(this._clearTimeouts(),!this._ws)return;let i=this._ws;this._removeListeners(),i.addEventListener("error",yd);try{i.close(r,n),this._handleClose(new Z.CloseEvent(r,n,this))}catch{}}_acceptOpen(){this._debug("accept open"),this._retryCount=0}_removeListeners(){this._ws&&(this._debug("removeListeners"),this._ws.removeEventListener("open",this._handleOpen),this._ws.removeEventListener("close",this._handleClose),this._ws.removeEventListener("message",this._handleMessage),this._ws.removeEventListener("error",this._handleError))}_addListeners(){this._ws&&(this._debug("addListeners"),this._ws.addEventListener("open",this._handleOpen),this._ws.addEventListener("close",this._handleClose),this._ws.addEventListener("message",this._handleMessage),this._ws.addEventListener("error",this._handleError))}_clearTimeouts(){clearTimeout(this._connectTimeout),clearTimeout(this._uptimeTimeout)}};var Zr={"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"},Ms=["Patient","Encounter","ImagingStudy","DiagnosticReport","OperationOutcome","Bundle"],en=["DiagnosticReport-update"];function Pi(t){return en.includes(t)}function Ai(t){if(en.includes(t))throw new m(T(`'context.version' is required for '${t}'.`))}var Ds={"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 Vs(t){return Ms.includes(t)}function wi(t){return!!t.endpoint}function tn(t){if(!nr(t))throw new m(T("subscriptionRequest must be an object conforming to SubscriptionRequest type."));let{channelType:e,mode:r,topic:n,events:i}=t,o={"hub.channel.type":e,"hub.mode":r,"hub.topic":n};return r==="subscribe"&&(o["hub.events"]=i.join(",")),wi(t)&&(o["hub.channel.endpoint"]=t.endpoint),new URLSearchParams(o).toString()}function nr(t){if(typeof t!="object")return!1;let{channelType:e,mode:r,topic:n,events:i}=t;if(!(e&&r&&n&&i)||typeof n!="string"||typeof i!="object"||!Array.isArray(i)||i.length<1||e!=="websocket"||r!=="subscribe"&&r!=="unsubscribe")return!1;for(let o of i)if(!Zr[o])return!1;return!(wi(t)&&!(typeof t.endpoint=="string"&&t.endpoint.startsWith("ws")))}function xd(t,e,r,n){if(typeof e!="object")throw new m(T(`context[${r}] is invalid. Context must contain a single valid FHIR resource! Resource is not an object.`));if(!(e.id&&typeof e.id=="string"))throw new m(T(`context[${r}] is invalid. Resource must contain a valid string ID.`));if(!e.resourceType)throw new m(T(`context[${r}] is invalid. Resource must contain a resource type. No resource type found.`));let i=n.resourceType;if(i!=="*"){if(!Vs(e.resourceType))throw new m(T(`context[${r}] is invalid. Resource must contain a valid FHIRcast resource type. Resource type is not a known resource type.`));if(i&&e.resourceType!==i)throw new m(T(`context[${r}] is invalid. context[${r}] for the '${t}' event should contain resource of type ${i}.`))}}function vd(t,e,r,n,i){if(i.set(e.key,(i.get(e.key)??0)+1),n.reference){if(!J(e.reference))throw new m(T(`context[${r}] is invalid. Expected key '${e.key}' to be a reference.`))}else xd(t,e.resource,r,n)}function Td(t,e){let r=new Map,n=Ds[t];for(let i=0;i<e.length;i++){let o=e[i].key;if(!n[o])throw new m(T(`Key '${o}' not found for event '${t}'. Make sure to add only valid keys.`));vd(t,e[i],i,n[o],r)}for(let[i,o]of Object.entries(n)){if(!(o.optional||r.has(i)))throw new m(T(`Missing required key '${i}' on context for '${t}' event.`));if(!o.manyAllowed&&(r.get(i)??0)>1)throw new m(T(`${r.get(i)} context entries with key '${i}' found for the '${t}' event when schema only allows for 1.`))}}function rn(t,e,r,n){if(!(t&&typeof t=="string"))throw new m(T("Must provide a topic."));if(!Zr[e])throw new m(T(`Must provide a valid FHIRcast event name. Supported events: ${Object.keys(Zr).join(", ")}`));if(typeof r!="object")throw new m(T("context must be a context object or array of context objects."));if(en.includes(e)&&!n)throw new m(T(`The '${e}' event must contain a 'context.versionId'.`));let i=Array.isArray(r)?r:[r];return Td(e,i),{timestamp:new Date().toISOString(),id:se(),event:{"hub.topic":t,"hub.event":e,context:i,...n?{"context.versionId":n}:{}}}}var rr=class extends ae{constructor(r,n){super();c(this,"subRequest");c(this,"websocket");if(this.subRequest=r,!r.endpoint)throw new m(T("Subscription request should contain an endpoint."));if(!nr(r))throw new m(T("Subscription request failed validation."));let{ReconnectingWebSocket:i=et,...o}=n??{},s=new i(r.endpoint,void 0,o);s.addEventListener("open",()=>{this.dispatchEvent({type:"connect"})}),s.addEventListener("message",a=>{let u=JSON.parse(a.data);if(!u.event){u["hub.mode"]==="denied"&&this.disconnect();return}let l=u;l.event["hub.event"]!=="heartbeat"&&(this.dispatchEvent({type:"message",payload:l}),s.send(JSON.stringify({id:u?.id,timestamp:new Date().toISOString()})))}),s.addEventListener("close",()=>{this.dispatchEvent({type:"disconnect"})}),this.websocket=s}disconnect(){this.websocket.close()}};function Sd(t){return JSON.parse(tr(t))}function Oi(t){return t.split(".").length===3}function ir(t){let[e,r,n]=t.split(".");return Sd(r)}function Ii(t){try{return typeof ir(t).login_id=="string"}catch{return!1}}function ki(t){try{let r=ir(t).exp;return typeof r=="number"?r*1e3:void 0}catch{return}}var or=class{constructor(e){c(this,"medplum");this.medplum=e}async get(e){return this.medplum.get(`keyvalue/v1/${e}`)}async set(e,r){await this.medplum.put(`keyvalue/v1/${e}`,r,V.TEXT)}async delete(e){await this.medplum.delete(`keyvalue/v1/${e}`)}};var _s;_s=Symbol.toStringTag;var $=class{constructor(e){c(this,_s,"ReadablePromise");c(this,"suspender");c(this,"status","pending");c(this,"response");c(this,"error");this.suspender=e.then(r=>(this.status="success",this.response=r,r),r=>{throw this.status="error",this.error=r,r})}isPending(){return this.status==="pending"}isOk(){return this.status==="success"}read(){switch(this.status){case"pending":throw this.suspender;case"error":throw this.error;default:return this.response}}then(e,r){return this.suspender.then(e,r)}catch(e){return this.suspender.catch(e)}finally(e){return this.suspender.finally(e)}};var gt=class{constructor(e,r=""){c(this,"storage");c(this,"prefix","");this.storage=e??globalThis.localStorage??new nn,this.prefix=r}makeKey(e){return this.prefix+e}clear(){if(this.storage===globalThis.localStorage&&this.prefix)for(let e=this.storage.length-1;e>=0;e--){let r=this.storage.key(e);r?.startsWith(this.prefix)&&this.storage.removeItem(r)}else this.storage.clear()}getString(e){return this.storage.getItem(this.makeKey(e))??void 0}setString(e,r){r?this.storage.setItem(this.makeKey(e),r):this.storage.removeItem(this.makeKey(e))}getObject(e){let r=this.getString(e);return r?JSON.parse(r):void 0}setObject(e,r){this.setString(e,r?Mt(r):void 0)}},nn=class{constructor(){c(this,"data");this.data=new Map}get length(){return this.data.size}clear(){this.data.clear()}getItem(e){return this.data.get(e)??null}setItem(e,r){r?this.data.set(e,r):this.data.delete(e)}removeItem(e){this.data.delete(e)}key(e){return Array.from(this.data.keys())[e]}},Mi=class extends gt{constructor(){super();c(this,"initialized");c(this,"initPromise");c(this,"initResolve",()=>{});this.initialized=!1,this.initPromise=new Promise(r=>{this.initResolve=r})}setInitialized(){this.initialized||(this.initResolve(),this.initialized=!0)}getInitPromise(){return this.initPromise}get isInitialized(){return this.initialized}};var bd=[WebSocket.CLOSING,WebSocket.CLOSED],yt=class extends ae{constructor(...r){super();c(this,"criteria");this.criteria=new Set(r)}getCriteria(){return this.criteria}_addCriteria(r){this.criteria.add(r)}_removeCriteria(r){this.criteria.delete(r)}},Di=class{constructor(e,r){c(this,"criteria");c(this,"emitter");c(this,"refCount");c(this,"subscriptionProps");c(this,"subscriptionId");c(this,"token");c(this,"tokenExpiry");c(this,"state","idle");c(this,"generation",0);c(this,"lastUnrefTime");this.criteria=e,this.emitter=new yt(e),this.refCount=1,this.subscriptionProps=r?{...r}:void 0}nextGeneration(){return++this.generation}},ar=class{constructor(e,r,n){c(this,"medplum");c(this,"ws");c(this,"masterSubEmitter");c(this,"criteriaEntries");c(this,"criteriaEntriesBySubscriptionId");c(this,"wsClosed");c(this,"pingTimer");c(this,"tokenRefreshTimer");c(this,"pingIntervalMs");c(this,"waitingForPong",!1);c(this,"currentProfile");if(!(e instanceof cr))throw new m(T("First arg of constructor should be a `MedplumClient`"));let i;try{i=new URL(r).toString()}catch{throw new m(T("Not a valid URL"))}let o=n?.ReconnectingWebSocket?new n.ReconnectingWebSocket(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger}):new et(i,void 0,{debug:n?.debug,debugLogger:n?.debugLogger});this.medplum=e,this.ws=o,this.masterSubEmitter=new yt,this.criteriaEntries=new Map,this.criteriaEntriesBySubscriptionId=new Map,this.wsClosed=!1,this.pingIntervalMs=n?.pingIntervalMs??5e3,this.currentProfile=e.getProfile(),this.setupListeners()}setupListeners(){let e=this.ws;e.addEventListener("message",r=>{try{let n=JSON.parse(r.data);if(n.type==="pong"){this.waitingForPong=!1;return}let i=n,o=i?.entry?.[0]?.resource;if(!o){console.warn("Received WebSocket message without a SubscriptionStatus resource; ignoring",i);return}if(o.type==="heartbeat"){this.masterSubEmitter?.dispatchEvent({type:"heartbeat",payload:i});return}if(o.type==="handshake"){let a=K(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(K(o.subscription));if(!s){console.warn("Received notification for criteria the SubscriptionManager is not listening for");return}s.emitter.dispatchEvent({type:"message",payload:i})}catch(n){console.error(n);let i={type:"error",payload:n};this.masterSubEmitter?.dispatchEvent(i);for(let o of this.getAllCriteriaEmitters())o.dispatchEvent({...i})}}),e.addEventListener("error",r=>{let n={type:"error",payload:new m({resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"WebSocket connection closed due to an error"},diagnostics:r.error?Ie(r.error):r.message}]})};this.masterSubEmitter?.dispatchEvent(n);for(let i of this.getAllCriteriaEmitters())i.dispatchEvent({...n})}),e.addEventListener("close",()=>{let r={type:"close"};this.masterSubEmitter?.dispatchEvent(r);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...r});this.pingTimer&&(clearInterval(this.pingTimer),this.pingTimer=void 0,this.waitingForPong=!1),this.tokenRefreshTimer&&(clearInterval(this.tokenRefreshTimer),this.tokenRefreshTimer=void 0),this.wsClosed&&(this.criteriaEntries.clear(),this.criteriaEntriesBySubscriptionId.clear(),this.masterSubEmitter?.removeAllListeners())}),e.addEventListener("open",()=>{let r={type:"open"};this.masterSubEmitter?.dispatchEvent(r);for(let n of this.getAllCriteriaEmitters())n.dispatchEvent({...r});this.refreshAllSubscriptions().catch(console.error),this.pingTimer??=setInterval(()=>{this.waitingForPong?(this.waitingForPong=!1,e.reconnect()):(e.send(JSON.stringify({type:"ping"})),this.waitingForPong=!0),this.gcUnrefEntries()},this.pingIntervalMs),this.tokenRefreshTimer??=setInterval(()=>{this.checkTokenExpirations(),this.gcUnrefEntries()},6e4)}),this.medplum.addEventListener("change",()=>{let r=this.medplum.getProfile();this.currentProfile&&r===void 0?this.ws.close():r&&this.currentProfile?.id!==r.id&&this.ws.reconnect(),this.currentProfile=r})}sendBind(e){this.ws.send(JSON.stringify({type:"bind-with-token",payload:{token:e}}))}sendUnbind(e){this.ws.readyState===WebSocket.OPEN&&this.ws.send(JSON.stringify({type:"unbind-from-token",payload:{token:e}}))}emitError(e,r){let n={type:"error",payload:r};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}maybeEmitDisconnect(e){let{subscriptionId:r}=e;if(r){let n={type:"disconnect",payload:{subscriptionId:r}};this.masterSubEmitter?.dispatchEvent(n),e.emitter.dispatchEvent({...n})}else console.warn("Called disconnect for `CriteriaEntry` before `subscriptionId` was present.")}isStale(e,r){return this.isEntryGettingRemoved(e)||e.generation!==r}maybeGetCriteriaEntry(e,r){let n=this.criteriaEntries.get(e);if(n){if(!r)return n.bareCriteria;for(let i of n.criteriaWithProps)if(ve(r,i.subscriptionProps))return i}}getAllCriteriaEmitters(){let e=[];for(let r of this.criteriaEntries.values())for(let n of sr(r))n.refCount>0&&e.push(n.emitter);return e}addCriteriaEntry(e){let{criteria:r,subscriptionProps:n}=e,i;this.criteriaEntries.has(r)?i=this.criteriaEntries.get(r):(i={criteriaWithProps:[]},this.criteriaEntries.set(r,i)),n?i.criteriaWithProps.push(e):i.bareCriteria=e}removeCriteriaEntry(e){e.state="removed",e.generation++;let{criteria:r,subscriptionProps:n,subscriptionId:i,token:o}=e;if(!this.criteriaEntries.has(r))return;let s=this.criteriaEntries.get(r);n?s.criteriaWithProps=s.criteriaWithProps.filter(a=>{let u=a.subscriptionProps;return!ve(n,u)}):s.bareCriteria=void 0,!s.bareCriteria&&s.criteriaWithProps.length===0&&(this.criteriaEntries.delete(r),this.masterSubEmitter?._removeCriteria(r)),i&&this.criteriaEntriesBySubscriptionId.delete(i),o&&this.sendUnbind(o)}async subscribeToCriteria(e){this.wsClosed&&await this.reconnectIfNeeded(),this.ws.readyState===WebSocket.OPEN&&this.medplum.getProfile()&&e.state==="idle"&&(e.state="connecting",await this.rebindCriteriaEntry(e))}async refreshAllSubscriptions(){this.criteriaEntriesBySubscriptionId.clear();let e=[],r=[];for(let n of this.criteriaEntries.values())for(let i of sr(n))i.refCount===0?r.push(i):e.push(i);for(let n of r)this.removeCriteriaEntry(n);for(let n of e)n.token&&this.sendUnbind(n.token),n.token=void 0,n.tokenExpiry=void 0,n.subscriptionId=void 0,n.state="idle",n.generation++,await this.subscribeToCriteria(n)}async rebindCriteriaEntry(e){let r=e.nextGeneration();try{if(!e.subscriptionId){let a=await this.medplum.createResource({...e.subscriptionProps,resourceType:"Subscription",status:"active",reason:`WebSocket subscription for ${I(this.medplum.getProfile())}`,channel:{type:"websocket"},criteria:e.criteria});if(e.subscriptionId??=a.id,this.isStale(e,r))return}let{parameter:n}=await this.medplum.get(`fhir/R4/Subscription/${e.subscriptionId}/$get-ws-binding-token`,{cache:"no-cache"}),i=n?.find(a=>a.name==="token")?.valueString,o=n?.find(a=>a.name==="websocket-url")?.valueUrl,s=n?.find(a=>a.name==="expiration")?.valueDateTime;if(!i)throw new m(T("Failed to get token"));if(!o)throw new m(T("Failed to get URL from $get-ws-binding-token"));if(!s)throw new m(T("Failed to get expiration from $get-ws-binding-token"));if(this.isStale(e,r))return;e.token=i,e.tokenExpiry=new Date(s).getTime(),this.criteriaEntriesBySubscriptionId.set(e.subscriptionId,e),this.sendBind(i)}catch(n){console.error(Ie(n)),e.generation===r&&!this.isEntryGettingRemoved(e)&&(e.state=e.state==="refreshing"?"active":"idle"),this.emitError(e,n)}}checkTokenExpirations(){if(!this.medplum.getProfile())return;let e=Date.now();for(let r of this.criteriaEntries.values())for(let n of sr(r))n.refCount===0||!n.tokenExpiry||n.tokenExpiry-e<=3e5&&n.state==="active"&&this.ws.readyState===WebSocket.OPEN&&(n.state="refreshing",this.rebindCriteriaEntry(n).catch(i=>{this.masterSubEmitter?.dispatchEvent({type:"error",payload:i})}))}addCriteria(e,r){this.masterSubEmitter&&this.masterSubEmitter._addCriteria(e);let n=this.maybeGetCriteriaEntry(e,r);if(n)return n.refCount===0&&(n.lastUnrefTime=void 0,n.generation++,n.state!=="active"&&(n.state=n.token?"active":"idle")),n.refCount+=1,n.state==="idle"&&this.subscribeToCriteria(n).catch(console.error),n.emitter;let i=new Di(e,r);return this.addCriteriaEntry(i),this.subscribeToCriteria(i).catch(console.error),i.emitter}removeCriteria(e,r){let n=this.maybeGetCriteriaEntry(e,r);if(!n||this.isEntryGettingRemoved(n)){console.warn("Criteria not known to `SubscriptionManager`. Possibly called remove too many times.");return}n.refCount-=1,n.refCount===0&&(n.lastUnrefTime=Date.now(),n.generation++)}gcUnrefEntries(){let e=Date.now(),r=[];for(let n of this.criteriaEntries.values())for(let i of sr(n))i.refCount===0&&i.lastUnrefTime!==void 0&&e-i.lastUnrefTime>=1e4&&r.push(i);for(let n of r)this.maybeEmitDisconnect(n),this.removeCriteriaEntry(n);r.length>0&&this.criteriaEntries.size===0&&this.closeWebSocket()}isEntryGettingRemoved(e){return e.refCount===0||e.state==="removed"}getWebSocket(){return this.ws}closeWebSocket(){if(!this.wsClosed){if(this.ws.readyState===WebSocket.OPEN)for(let e of this.criteriaEntries.values())for(let r of sr(e))r.token&&this.sendUnbind(r.token);this.wsClosed=!0,this.ws.close()}}reconnectWebSocket(){this.ws.reconnect(),this.wsClosed=!1}getCriteriaCount(){return this.getAllCriteriaEmitters().length}getMasterEmitter(){return this.masterSubEmitter||(this.masterSubEmitter=new yt(...Array.from(this.criteriaEntries.keys()))),this.masterSubEmitter}async reconnectIfNeeded(){bd.includes(this.getWebSocket().readyState)&&await new Promise(e=>{let r=()=>{this.getWebSocket().removeEventListener("open",r),e()};this.getWebSocket().addEventListener("open",r),this.reconnectWebSocket()})}};function sr(t){return t.bareCriteria?[t.bareCriteria,...t.criteriaWithProps]:t.criteriaWithProps}var Ed=new ee(1e3);async function Rd({resource:t,subscription:e,context:r,getPreviousResource:n,logger:i}){if(!Cd(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=ft(o);if(t.resourceType!==s.resourceType)return i?.debug(`Ignore rest hook for different resourceType (wanted "${s.resourceType}", received "${t.resourceType}")`),!1;if(!await Ls(e,t,n))return i?.debug("Ignore rest hook for criteria returning false"),!1;let u=!1,l=!1;for(let h of e.extension??v)if(h.url==="https://medplum.com/fhir/StructureDefinition/subscription-supported-interaction"&&(u=!0,h.valueCode===r.interaction)){l=!0;break}if(u&&!l)return i?.debug("Ignored rest hook for unsupported interaction",{subscription:e.id,interaction:r.interaction}),!1;if(!Zt(t,s))return!1;let d=Wr(e.meta)??[],f=Wr(t.meta)??[];return d.length&&!d.some(h=>f.some(b=>b.reference===h.reference))?(i?.debug("Subscription suppressed due to mismatched accounts",{subscriptionId:e.id,resource:I(t)}),!1):!0}function Cd(t,e){let r=t.channel?.type;return r==="rest-hook"?t.channel?.endpoint?!0:(e?.debug("Ignore rest-hook missing URL"),!1):r==="websocket"}async function Ls(t,e,r){let n=ce(t,"https://medplum.com/fhir/StructureDefinition/fhir-path-criteria-expression");if(!n?.valueString)return!0;let i=await r(e),o={"%current":E(e),"%previous":E(i??{})};return k(n.valueString,[E(e)],o,Ed)?.[0]?.value===!0}var on="5.1.30-9b1bd92",Pd="medplum-cli",Bs=V.FHIR_JSON+", */*; q=0.1",Ad="https://api.medplum.com/",wd=1e3,Od=6e4,Id=0,kd=3e5,Md="Binary/",Ns={resourceType:"Device",id:"system",deviceName:[{type:"model-name",name:"System"}]},Dd=2,tt={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"},qs={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"},Vd={ClientSecretBasic:"client_secret_basic",ClientSecretPost:"client_secret_post",ClientSecretJwt:"client_secret_jwt",PrivateKeyJwt:"private_key_jwt",None:"none"},Ws={JwtBearer:"urn:ietf:params:oauth:client-assertion-type:jwt-bearer"},_d={ES256:"ES256",ES384:"ES384",ES512:"ES512",HS256:"HS256",RS256:"RS256",RS384:"RS384",RS512:"RS512"},cr=class extends ae{constructor(r){super();c(this,"options");c(this,"fetch");c(this,"createPdfImpl");c(this,"storage");c(this,"requestCache");c(this,"cacheTime");c(this,"baseUrl");c(this,"fhirBaseUrl");c(this,"authorizeUrl");c(this,"tokenUrl");c(this,"logoutUrl");c(this,"fhircastHubUrl");c(this,"cdsServicesUrl");c(this,"defaultHeaders");c(this,"onUnauthenticated");c(this,"autoBatchTime");c(this,"autoBatchQueue");c(this,"maxRetries");c(this,"maxRetryTime");c(this,"refreshGracePeriod");c(this,"subscriptionManager");c(this,"medplumServer");c(this,"clientId");c(this,"clientSecret");c(this,"credentialsInHeader");c(this,"autoBatchTimerId");c(this,"accessToken");c(this,"accessTokenExpires");c(this,"refreshToken");c(this,"refreshPromise");c(this,"profilePromise");c(this,"sessionDetails");c(this,"currentRateLimits");c(this,"basicAuth");c(this,"initPromise");c(this,"initComplete",!0);c(this,"keyValueClient");c(this,"logLevel");if(r?.baseUrl&&!r.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");this.options=r??{},this.fetch=r?.fetch??Ld(),this.storage=r?.storage??new gt(void 0,r?.storagePrefix),this.createPdfImpl=r?.createPdf,this.baseUrl=Gr(r?.baseUrl??Ad),this.fhirBaseUrl=W(this.baseUrl,r?.fhirUrlPath??"fhir/R4"),this.authorizeUrl=W(this.baseUrl,r?.authorizeUrl??"oauth2/authorize"),this.tokenUrl=W(this.baseUrl,r?.tokenUrl??"oauth2/token"),this.logoutUrl=W(this.baseUrl,r?.logoutUrl??"oauth2/logout"),this.fhircastHubUrl=W(this.baseUrl,r?.fhircastHubUrl??"fhircast/STU3"),this.cdsServicesUrl=W(this.baseUrl,r?.cdsServicesUrl??"cds-services"),this.clientId=r?.clientId??"",this.clientSecret=r?.clientSecret??"",this.credentialsInHeader=r?.authCredentialsMethod==="header",this.defaultHeaders=r?.defaultHeaders??{},this.onUnauthenticated=r?.onUnauthenticated,this.refreshGracePeriod=r?.refreshGracePeriod??kd,this.logLevel=this.initializeLogLevel(r),this.maxRetries=r?.maxRetries??2,this.maxRetryTime=r?.maxRetryTime??2e3,this.cacheTime=r?.cacheTime??(X()?Od:Id),this.cacheTime>0?this.requestCache=new ee(r?.resourceCacheSize??wd):this.requestCache=void 0,r?.autoBatchTime?(this.autoBatchTime=r.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0),r?.accessToken&&this.setAccessToken(r.accessToken),this.storage.getInitPromise===void 0?(r?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initPromise=Promise.resolve(),this.dispatchEvent({type:"storageInitialized"})):(this.initComplete=!1,this.initPromise=this.storage.getInitPromise(),this.initPromise.then(()=>{r?.accessToken||this.attemptResumeActiveLogin().catch(console.error),this.initComplete=!0,this.dispatchEvent({type:"storageInitialized"})}).catch(n=>{console.error(n),this.initComplete=!0,this.dispatchEvent({type:"storageInitFailed",payload:{error:n}})})),this.setupStorageListener()}get isInitialized(){return this.initComplete}getInitPromise(){return this.initPromise}initializeLogLevel(r){return r?.logLevel?r.logLevel:r?.verbose!==void 0&&r.verbose?"verbose":"none"}async attemptResumeActiveLogin(){let r=this.getActiveLogin();r&&(this.setAccessToken(r.accessToken,r.refreshToken),await this.refreshProfile())}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}getTokenUrl(){return this.tokenUrl}getLogoutUrl(){return this.logoutUrl}getFhircastHubUrl(){return this.fhircastHubUrl}getCdsServicesUrl(){return this.cdsServicesUrl}getDefaultHeaders(){return this.defaultHeaders}clear(){this.storage.clear(),this.clearActiveLogin()}clearActiveLogin(){this.storage.setString("activeLogin",void 0),this.requestCache?.clear(),this.accessToken=void 0,this.refreshToken=void 0,this.refreshPromise=void 0,this.accessTokenExpires=void 0,this.sessionDetails=void 0,this.medplumServer=void 0,this.dispatchEvent({type:"change"})}invalidateUrl(r){r=r.toString(),this.requestCache?.delete(r)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(r){let n=W(this.fhirBaseUrl,r);for(let i of this.requestCache?.keys()??v)(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache?.delete(i)}notifyResourceModified(r){r.operation!=="delete"&&r.resource?this.cacheResource(r.resource,void 0):r.id&&this.deleteCacheEntry(this.fhirUrl(r.resourceType,r.id).toString()),this.invalidateSearches(r.resourceType),this.dispatchResourceModified(r)}get(r,n={}){r=r.toString();let i=this.getCacheEntry(r,n);if(i)return i.value;let o;r.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue&&!n.disableAutoBatch?o=new Promise((a,u)=>{this.autoBatchQueue.push({method:"GET",url:r.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:u}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):(n.method="GET",o=this.request(r,n));let s=new $(o);return this.setCacheEntry(r,s,n),s}post(r,n,i,o={}){return r=r.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(r),o.method="POST",this.request(r,o)}put(r,n,i,o={}){return r=r.toString(),this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(r),o.method="PUT",this.request(r,o)}patch(r,n,i={}){return r=r.toString(),this.setRequestBody(i,n),this.setRequestContentType(i,V.JSON_PATCH),this.invalidateUrl(r),i.method="PATCH",this.request(r,i)}delete(r,n={}){return r=r.toString(),this.invalidateUrl(r),n.method="DELETE",this.request(r,n)}async startNewUser(r,n){let{codeChallengeMethod:i,codeChallenge:o}=await this.startPkce();return this.post("auth/newuser",{...r,clientId:r.clientId??this.clientId,codeChallengeMethod:i,codeChallenge:o},void 0,n)}async startNewProject(r,n){return this.post("auth/newproject",r,void 0,n)}async startNewPatient(r,n){return this.post("auth/newpatient",r,void 0,n)}async startLogin(r,n){return this.post("auth/login",{...await this.ensureCodeChallenge(r),clientId:r.clientId??this.clientId,scope:r.scope},void 0,n)}async startGoogleLogin(r,n){return this.post("auth/google",{...await this.ensureCodeChallenge(r),clientId:r.clientId??this.clientId,scope:r.scope},void 0,n)}async ensureCodeChallenge(r){return r.codeChallenge?r:{...r,...await this.startPkce()}}async signOut(){await this.post(this.logoutUrl,{}),this.clear()}async signInWithRedirect(r){let i=new URLSearchParams(he.getSearch()).get("code");if(!i){await this.requestAuthorization(r);return}return this.processCode(i)}signOutWithRedirect(){he.assign(this.logoutUrl)}async signInWithExternalAuth(r,n,i,o,s=!0){let a=o;s&&(a=await this.ensureCodeChallenge(o)),he.assign(this.getExternalAuthRedirectUri(r,n,i,a,s))}async exchangeExternalAccessToken(r,n,i){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");let o={grant_type:tt.TokenExchange,subject_token_type:qs.AccessToken,client_id:n,subject_token:r};return i&&(o.membership_id=i),this.fetchTokens(o)}getExternalAuthRedirectUri(r,n,i,o,s=!0){let a=new URL(r);if(a.searchParams.set("response_type","code"),a.searchParams.set("client_id",n),a.searchParams.set("redirect_uri",i),a.searchParams.set("scope",o.scope??"openid profile email"),a.searchParams.set("state",JSON.stringify(o)),s){let{codeChallenge:u,codeChallengeMethod:l}=o;if(!l)throw new Error("`LoginRequest` for external auth must include a `codeChallengeMethod`.");if(!u)throw new Error("`LoginRequest` for external auth must include a `codeChallenge`.");a.searchParams.set("code_challenge_method",l),a.searchParams.set("code_challenge",u)}return a.toString()}fhirUrl(...r){return new URL(W(this.fhirBaseUrl,r.join("/")))}fhirSearchUrl(r,n){let i=this.fhirUrl(r);return n&&(i.search=di(n)),i}search(r,n,i){let o=this.fhirSearchUrl(r,n),s="search-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=this.getBundle(o,i);return this.setCacheEntry(s,u,i),u}searchOne(r,n,i){let o=this.fhirSearchUrl(r,n);o.searchParams.set("_count","1"),o.searchParams.sort();let s="searchOne-"+o.toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=new $(this.search(r,o.searchParams,i).then(l=>l.entry?.[0]?.resource));return this.setCacheEntry(s,u,i),u}searchResources(r,n,i){let s="searchResources-"+this.fhirSearchUrl(r,n).toString(),a=this.getCacheEntry(s,i);if(a)return a.value;let u=new $(this.search(r,n,i).then(Us));return this.setCacheEntry(s,u,i),u}async*searchResourcePages(r,n,i){let o=this.fhirSearchUrl(r,n);for(;o;){let s=new URL(o).searchParams;s.has("_count")||s.set("_count","1000");let a=await this.search(r,s,i),u=a.link?.find(l=>l.relation==="next");if(!a.entry?.length&&!u)break;yield Us(a),o=u?.url?new URL(u.url):void 0}}valueSetExpand(r,n){let i=this.fhirUrl("ValueSet","$expand");return i.search=new URLSearchParams(r).toString(),this.get(i.toString(),n)}getCached(r,n){let i=this.requestCache?.get(this.fhirUrl(r,n).toString())?.value;return i?.isOk()?i.read():void 0}getCachedReference(r){let n=r.reference;if(!n)return;if(n==="system")return Ns;let[i,o]=n.split("/");if(!(!i||!o))return this.getCached(i,o)}readResource(r,n,i){if(!n)throw new Error('The "id" parameter cannot be null, undefined, or an empty string.');return this.get(this.fhirUrl(r,n),i)}readReference(r,n){let i=r.reference;if(!i)return new $(Promise.reject(new Error("Missing reference")));if(i==="system")return new $(Promise.resolve(Ns));let[o,s]=i.split("/");return!o||!s?new $(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}readCanonical(r,n,i){return Array.isArray(r)?this.searchOne("",{_type:r.join(","),url:n},i):this.searchOne(r,"url="+n,i)}requestSchema(r,n){if(Wn(r))return Promise.resolve();let i=r+"-requestSchema",o=this.getCacheEntry(i,void 0);if(o)return o.value;let s=new $((async()=>{let a=`{
|
|
5
5
|
StructureDefinitionList(_filter: "name eq ${r}") {
|
|
6
6
|
resourceType,
|
|
7
7
|
name,
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
expression,
|
|
42
42
|
target
|
|
43
43
|
}
|
|
44
|
-
}`.replaceAll(/\s+/g," "),u=await this.graphql(a);Ir(u.data.StructureDefinitionList);for(let l of u.data.SearchParameterList)Qr(l)})());return this.setCacheEntry(i,s,n),s}requestProfileSchema(r,n){if(!n?.expandProfile&&$n(r))return Promise.resolve();let i=r+"-requestSchema"+(n?.expandProfile?"-nested":""),o=this.getCacheEntry(i,void 0);if(o)return o.value;let s=new $((async()=>{if(n?.expandProfile){let a=this.fhirUrl("StructureDefinition","$expand-profile");a.search=new URLSearchParams({url:r}).toString();let u=await this.post(a.toString(),{});Ir(u)}else{let a=await this.searchOne("StructureDefinition",{url:r,_sort:"-_lastUpdated"});if(!a){console.warn(`No StructureDefinition found for ${r}!`);return}kr(a)}})());return this.setCacheEntry(i,s,n),s}readHistory(r,n,i,o){let s=this.fhirUrl(r,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(r,n,i,o){return this.get(this.fhirUrl(r,n,"_history",i),o)}readPatientEverything(r,n){return this.getBundle(this.fhirUrl("Patient",r,"$everything"),n)}readPatientSummary(r,n){return this.getBundle(this.fhirUrl("Patient",r,"$summary"),n)}async createResource(r,n){if(!r.resourceType)throw new Error("Missing resourceType");this.invalidateSearches(r.resourceType);let i=await this.post(this.fhirUrl(r.resourceType),r,void 0,n);return this.dispatchResourceModified({resourceType:r.resourceType,operation:"create",id:i?.id,resource:i}),i}async createResourceIfNoneExist(r,n,i={}){let o=this.fhirUrl(r.resourceType);this.setRequestHeader(i,"If-None-Exist",n);let s=await this.post(o,r,void 0,i);return this.cacheResource(s,i),this.invalidateUrl(this.fhirUrl(r.resourceType,r.id,"_history")),this.invalidateSearches(r.resourceType),this.dispatchResourceModified({resourceType:r.resourceType,operation:"create",id:s?.id,resource:s}),s}async upsertResource(r,n,i){let o=this.fhirSearchUrl(r.resourceType,n),s=await this.put(o,r,void 0,i),a=s!==void 0;return s||(s=r),this.cacheResource(s,i),this.invalidateUrl(this.fhirUrl(r.resourceType,r.id,"_history")),this.invalidateSearches(r.resourceType),a&&this.dispatchResourceModified({resourceType:r.resourceType,operation:"update",id:s.id,resource:s}),s}async createAttachment(r,n,i,o,s){let a=Vi(r,n,i,o);if(a.contentType===V.XML){let d=a.data,f;d instanceof Blob?f=await new Promise((h,b)=>{let P=new FileReader;P.onload=()=>{if(!P.result){b(new Error("Failed to load file"));return}h(P.result)},P.readAsText(d,"utf-8")}):ArrayBuffer.isView(d)?f=new TextDecoder().decode(d):f=d,f.includes("<ClinicalDocument")&&f.includes("urn:hl7-org:v3")&&(a={...a,contentType:V.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(r,n,i,o,s){let a=Vi(r,n,i,o),u=s??(typeof n=="object"?n:{}),{data:l,contentType:d,filename:f,securityContext:h,onProgress:b}=a,P=this.fhirUrl("Binary");return f&&P.searchParams.set("_filename",f),h?.reference&&this.setRequestHeader(u,"X-Security-Context",h.reference),b?this.uploadwithProgress(P,l,d,b,u):this.post(P,l,d,u)}uploadwithProgress(r,n,i,o,s){return new Promise((a,u)=>{let l=new XMLHttpRequest,d=()=>l.abort();s?.signal?.addEventListener("abort",d);let f=h=>{s?.signal?.removeEventListener("abort",d),h instanceof Error?u(h):a(h)};if(l.responseType="json",l.onabort=()=>f(new DOMException("Request aborted","AbortError")),l.onerror=()=>f(new Error("Request error")),o&&(l.upload.onprogress=h=>o(h),l.upload.onload=h=>o(h)),l.onload=()=>{l.status>=200&&l.status<300?f(l.response):f(new m(bt(l.response||l.statusText)))},l.open("POST",r),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 h=s.headers;for(let[b,P]of Object.entries(h))l.setRequestHeader(b,P)}l.send(n)})}async createPdf(r,n,i,o){if(!this.createPdfImpl)throw new Error("PDF creation not enabled");let s=$s(r,n,i,o),a=typeof n=="object"?n:{},{docDefinition:u,tableLayouts:l,fonts:d,...f}=s,h=await this.createPdfImpl(u,l,d),b={...f,data:h,contentType:"application/pdf"};return this.createBinary(b,a)}createComment(r,n,i){let o=this.getProfile(),s,a;return r.resourceType==="Encounter"&&(s=ne(r),a=r.subject),r.resourceType==="ServiceRequest"&&(s=r.encounter,a=r.subject),r.resourceType==="Patient"&&(a=ne(r)),this.createResource({resourceType:"Communication",status:"completed",basedOn:[ne(r)],encounter:s,subject:a,sender:o?ne(o):void 0,sent:new Date().toISOString(),payload:[{contentString:n}]},i)}async updateResource(r,n){if(!r.resourceType)throw new Error("Missing resourceType");if(!r.id)throw new Error("Missing id");let i=await this.put(this.fhirUrl(r.resourceType,r.id),r,void 0,n),o=i!==void 0;return i||(i=r),this.cacheResource(i,n),this.invalidateUrl(this.fhirUrl(r.resourceType,r.id,"_history")),this.invalidateSearches(r.resourceType),o&&this.dispatchResourceModified({resourceType:r.resourceType,operation:"update",id:i.id,resource:i}),i}async patchResource(r,n,i,o){let s=await this.patch(this.fhirUrl(r,n),i,o);return this.cacheResource(s,o),this.invalidateUrl(this.fhirUrl(r,n,"_history")),this.invalidateSearches(r),this.dispatchResourceModified({resourceType:r,operation:"patch",id:n,resource:s}),s}async deleteResource(r,n,i){this.deleteCacheEntry(this.fhirUrl(r,n).toString()),this.invalidateSearches(r);let o=await this.delete(this.fhirUrl(r,n),i);return this.dispatchResourceModified({resourceType:r,operation:"delete",id:n}),o}validateResource(r,n){return this.post(this.fhirUrl(r.resourceType,"$validate"),r,void 0,n)}executeBot(r,n,i,o){let s;if(typeof r=="string"){let a=r;s=this.fhirUrl("Bot",a,"$execute")}else{let a=r;s=this.fhirUrl("Bot","$execute"),s.searchParams.set("identifier",a.system+"|"+a.value)}return this.post(s,n,i,o)}executeBatch(r,n){return this.post(this.fhirBaseUrl,r,void 0,n)}sendEmail(r,n){return this.post("email/v1/send",r,V.JSON,n)}graphql(r,n,i,o){return this.post(this.fhirUrl("$graphql"),{query:r,operationName:n,variables:i},V.JSON,o)}readResourceGraph(r,n,i,o){return this.get(`${this.fhirUrl(r,n)}/$graph?graph=${i}`,o)}pushToAgent(r,n,i,o,s,a){let{waitTimeout:u,returnAck:l,...d}=a??{};return this.post(this.fhirUrl("Agent",K(r),"$push"),{destination:typeof n=="string"?n:I(n),body:i,contentType:o,waitForResponse:s,...u!==void 0?{waitTimeout:u}:void 0,...l!==void 0?{returnAck:l}:void 0},V.FHIR_JSON,d)}getCdsServices(r){return this.get(this.cdsServicesUrl,r)}callCdsService(r,n,i){return this.post(W(this.cdsServicesUrl,r),n,V.JSON,i)}getActiveLogin(){return this.storage.getObject("activeLogin")}async setActiveLogin(r){(!this.sessionDetails?.profile||I(this.sessionDetails.profile)!==r.profile?.reference)&&this.clearActiveLogin(),this.setAccessToken(r.accessToken,r.refreshToken),this.storage.setObject("activeLogin",r),this.addLogin(r),this.refreshPromise=void 0,await this.refreshProfile()}getAccessToken(){return this.accessToken}isAuthenticated(r){return this.accessTokenExpires!==void 0&&Date.now()<this.accessTokenExpires-(r??this.refreshGracePeriod)}setAccessToken(r,n){this.accessToken=r,this.refreshToken=n,this.accessTokenExpires=ki(r),this.medplumServer=Ii(r)}getLogins(){return this.storage.getObject("logins")??[]}addLogin(r){let n=this.getLogins().filter(i=>i.profile?.reference!==r.profile?.reference);n.push(r),this.storage.setObject("logins",n)}async refreshProfile(){if(this.medplumServer)return this.profilePromise=new Promise((r,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"}),r(i.profile),this.dispatchEvent({type:"profileRefreshed"})}).catch(n)}),this.dispatchEvent({type:"profileRefreshing"}),this.profilePromise}syncStoredLoginProject(){let r=this.getActiveLogin(),n=this.sessionDetails?.project?.name;if(!r||!n||r.project.display===n)return;let i={...r,project:{...r.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(r,n={}){return(await this.downloadResponse(r,n)).blob()}async downloadResponse(r,n={}){this.refreshPromise&&await this.refreshPromise;let i=r.toString();i.startsWith(Od)&&(r=this.fhirUrl(i));let o=n.headers;return o||(o={},n.headers=o),o.Accept||(o.Accept="*/*"),this.addFetchOptionsDefaults(n),this.fetchWithRetry(r.toString(),n)}async createMedia(r,n){let{additionalFields:i,...o}=r,s=await this.createResource({resourceType:"Media",status:"preparation",content:{contentType:r.contentType},...i});o.securityContext||(o.securityContext=ne(s));let a=await this.createAttachment(o,n);return this.updateResource({...s,status:"completed",content:a})}async uploadMedia(r,n,i,o,s){return this.createMedia({data:r,contentType:n,filename:i,additionalFields:o},s)}async createDocumentReference(r,n){let{additionalFields:i,...o}=r,s=await this.createResource({resourceType:"DocumentReference",status:"current",content:[{attachment:{contentType:r.contentType}}],...i});o.securityContext||(o.securityContext=ne(s));let a=await this.createAttachment(o,n);return this.updateResource({...s,content:[{attachment:a}]})}async bulkExport(r="",n,i,o){let s=r&&`${r}/`,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(r,n={}){this.addFetchOptionsDefaults(n);let i=n.headers;return i.Prefer="respond-async",n.method="POST",this.request(r,n)}async wrappedFetch(r,n){return await this.refreshIfExpired(),this.addFetchOptionsDefaults(n),this.fetchWithRetry(r,n)}get keyValue(){return this.keyValueClient||(this.keyValueClient=new ir(this)),this.keyValueClient}getBundle(r,n){return new $((async()=>{let i=await this.get(r,n);for(let o of i.entry??v)this.cacheResource(o.resource,n);return i})())}isCacheEnabled(r){return!!this.requestCache&&!this.getRequestHeader(r,"x-medplum-on-behalf-of")}getCacheEntry(r,n){if(!this.isCacheEnabled(n)||n?.cache==="no-cache"||n?.cache==="reload")return;let i=this.requestCache.get(r);if(!(!i||i.requestTime+this.cacheTime<Date.now()))return i}setCacheEntry(r,n,i){this.isCacheEnabled(i)&&(this.requestCache.set(r,{requestTime:Date.now(),value:n}),i?.signal&&i.signal.addEventListener("abort",()=>{this.requestCache.delete(r)}))}cacheResource(r,n){r?.id&&!r.meta?.tag?.some(i=>i.code==="SUBSETTED")&&this.setCacheEntry(this.fhirUrl(r.resourceType,r.id).toString(),new $(Promise.resolve(r)),n)}deleteCacheEntry(r){this.requestCache&&this.requestCache.delete(r)}dispatchResourceModified(r){this.listenerCount("resourceModified")>0&&this.dispatchEvent({type:"resourceModified",payload:r})}async request(r,n={},i={}){let o=await this.wrappedFetch(r,n);if(o.status===401)return this.handleUnauthenticated(r,n,i);if(o.status===204||o.status===304)return;let a=o.headers.get("content-type")?.includes("json");if(o.status===404&&!a)throw new m(Mn);let u=await this.parseBody(o,a);if(o.status===200&&n.followRedirectOnOk||o.status===201&&n.followRedirectOnCreated){let l=await Fs(o,u);if(l)return this.request(l,{...n,method:"GET",body:void 0})}if(o.status===202&&n.pollStatusOnAccepted){let d=await Fs(o,u)??i.statusUrl;if(d)return this.pollStatus(d,n,i)}if(o.status>=400)throw new m(bt(u));return u}async parseBody(r,n){let i;if(r.headers.get("content-length")!=="0"){if(n)try{i=await r.json()}catch(o){throw console.error("Error parsing response",r.status,o),o}else i=await r.text();return i}}async fetchWithRetry(r,n){r.startsWith("http")||(r=W(this.baseUrl,r));let i=n?.maxRetries??this.maxRetries;for(let o=0;o<=i;o++)try{this.logLevel!=="none"&&this.logRequest(r,n);let s=await this.fetch(r,n);if(this.logLevel!=="none"&&this.logResponse(s),this.setCurrentRateLimit(s),o>=i||!Ld(s))return s;let a=this.getRetryDelay(o),u=n.maxRetryTime??this.maxRetryTime;if(a>u)return s;await Hr(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(r,n){if(console.log(`> ${n.method} ${r}`),this.logLevel==="verbose"&&n.headers){let i=n.headers;for(let o of Mt(Object.keys(i)))console.log(`> ${o}: ${i[o]}`)}}logResponse(r){console.log(`< ${r.status} ${r.statusText}`),this.logLevel==="verbose"&&r.headers&&r.headers.forEach((n,i)=>console.log(`< ${i}: ${n}`))}setCurrentRateLimit(r){if(!r?.headers||typeof r.headers.get!="function")return;let n=r.headers.get("ratelimit");n&&(this.currentRateLimits=n)}rateLimitStatus(){if(!this.currentRateLimits)return[];let r=this.currentRateLimits;return r.split(",").map(n=>{let i=n.split(";").map(d=>d.trim());if(i.length!==3)throw new Error("Could not parse RateLimit header: "+r);let o=i[0].substring(1,i[0].length-1),s=i.find(d=>d.startsWith("r="))?.substring(2),a=s?Number.parseInt(s,10):Number.NaN,u=i.find(d=>d.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: "+r);return{name:o,remainingUnits:a,secondsUntilReset:l,resetsAfter:Math.ceil((Date.now()+1e3*l)/1e3)}})}getRetryDelay(r){let n=this.rateLimitStatus(),i=500*Math.pow(1.5,r);for(let o of n)o.remainingUnits||(i=Math.max(i,o.secondsUntilReset*1e3));return i}async pollStatus(r,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=r,i.pollCount=1;else{let s=n.pollStatusPeriod??1e3;await Hr(s,{signal:n.signal}),i.pollCount++}return this.request(r,o,i)}async executeAutoBatch(){if(this.autoBatchQueue===void 0)return;let r=[...this.autoBatchQueue];if(this.autoBatchQueue.length=0,this.autoBatchTimerId=void 0,r.length===1){let o=r[0];try{o.options.method=o.method,o.resolve(await this.request(W(this.fhirBaseUrl,o.url),o.options))}catch(s){o.reject(new m(bt(s)))}return}let n={resourceType:"Bundle",type:"batch",entry:r.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<r.length;o++){let s=r[o],a=i.entry?.[o];a?.response?.outcome&&!Ar(a.response.outcome)?s.reject(new m(a.response.outcome)):s.resolve(a?.resource)}}addFetchOptionsDefaults(r){Object.entries(this.defaultHeaders).forEach(([n,i])=>{this.setRequestHeader(r,n,i)}),this.setRequestHeader(r,"Accept",Bs,!0),this.options.extendedMode!==!1&&this.setRequestHeader(r,"X-Medplum","extended"),r.body&&this.setRequestHeader(r,"Content-Type",V.FHIR_JSON,!0),this.accessToken?this.setRequestHeader(r,"Authorization","Bearer "+this.accessToken):this.basicAuth&&this.setRequestHeader(r,"Authorization","Basic "+this.basicAuth),r.cache||(r.cache="no-cache"),r.credentials||(r.credentials="include")}setRequestContentType(r,n){this.setRequestHeader(r,"Content-Type",n)}getRequestHeader(r,n){let i=r?.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(r,n,i,o=!1){let s=r.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):r.headers={[n]:i}}setRequestBody(r,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")?r.body=n:typeof n=="object"&&n!==null&&(typeof n.getReader=="function"||typeof n.pipe=="function"&&typeof n.on=="function")?(r.body=n,r.duplex="half"):n&&(r.body=JSON.stringify(n))}async handleUnauthenticated(r,n,i){let o=i.authAttempt??0,s=o+1<Id?this.refresh(void 0,!0):void 0;if(s)return await s,this.request(r,n,{...i,authAttempt:o+1});throw this.clear(),this.onUnauthenticated?.(),new m(We)}async startPkce(){let r=Kr();this.storage.setString("pkceState",r);let n=Kr().slice(0,128);this.storage.setString("codeVerifier",n);try{let i=await Ci(n);return{codeChallengeMethod:"S256",codeChallenge:si(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(r){let n=await this.ensureCodeChallenge(r??{}),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??he.getOrigin()),i.searchParams.set("code_challenge_method",n.codeChallengeMethod),i.searchParams.set("code_challenge",n.codeChallenge),i.searchParams.set("scope",n.scope??"openid profile"),he.assign(i.toString())}processCode(r,n){let i={grant_type:et.AuthorizationCode,code:r,client_id:n?.clientId??this.clientId??"",redirect_uri:n?.redirectUri??he.getOrigin()},o=this.storage.getString("codeVerifier");return o&&(i.code_verifier=o),this.fetchTokens(i)}refreshIfExpired(r){return!this.refreshPromise&&this.accessTokenExpires!==void 0&&!this.isAuthenticated(r)&&this.refresh(r),this.refreshPromise??Promise.resolve()}refresh(r,n=!1){if(this.refreshPromise)return this.refreshPromise;if(!(!this.refreshToken&&!(this.clientId&&this.clientSecret)))return this.refreshPromise=this.runRefreshWithLock(r,n),this.refreshPromise}async runRefreshWithLock(r,n=!1){let i=()=>{let a=this.accessToken,u=this.getActiveLogin();u?.accessToken&&u.accessToken!==this.accessToken&&this.setAccessToken(u.accessToken,u.refreshToken);let l=this.accessToken!==a;return this.isAuthenticated(r)&&(!n||l)?Promise.resolve(this.getProfile()):this.refreshToken?this.fetchTokens({grant_type:et.RefreshToken,client_id:this.clientId??"",refresh_token:this.refreshToken}):this.clientId&&this.clientSecret?this.startClientLogin(this.clientId,this.clientSecret):Promise.resolve(void 0)},o=typeof navigator<"u"?navigator.locks:void 0;if(!o?.request)return i();let s=`medplum-refresh:${this.storage.makeKey("activeLogin")}`;return o.request(s,i)}async startClientLogin(r,n){return this.clientId=r,this.clientSecret=n,this.fetchTokens({grant_type:et.ClientCredentials,client_id:r,client_secret:n})}async startJwtBearerLogin(r,n,i){return this.clientId=r,this.fetchTokens({grant_type:et.JwtBearer,client_id:r,assertion:n,scope:i})}async startJwtAssertionLogin(r){return this.fetchTokens({grant_type:et.ClientCredentials,client_assertion_type:Ws.JwtBearer,client_assertion:r})}setBasicAuth(r,n){this.clientId=r,this.clientSecret=n,this.basicAuth=Zt(r+":"+n)}setLogLevel(r){this.logLevel=r,this.options.verbose=r==="verbose"}getLogLevel(){return this.logLevel}setVerbose(r){this.logLevel=r?"verbose":"none",this.options.verbose=r}async fhircastSubscribe(r,n){if(!(typeof r=="string"&&r!==""))throw new m(T("Invalid topic provided. Topic must be a valid string."));if(!(typeof n=="object"&&Array.isArray(n)&&n.length>0))throw new m(T("Invalid events provided. Events must be an array of event names containing at least one event."));let i={channelType:"websocket",mode:"subscribe",topic:r,events:n},s=(await this.post(this.fhircastHubUrl,en(i),V.FORM_URL_ENCODED))["hub.channel.endpoint"];if(!s)throw new Error("Invalid response!");return i.endpoint=s,i}async fhircastUnsubscribe(r){if(!rr(r))throw new m(T("Invalid topic or subscriptionRequest. SubscriptionRequest must be an object."));if(!(r.endpoint&&typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))throw new m(T("Provided subscription request must have an endpoint in order to unsubscribe."));r.mode="unsubscribe",await this.post(this.fhircastHubUrl,en(r),V.FORM_URL_ENCODED)}fhircastConnect(r){return new tr(r)}async fhircastPublish(r,n,i,o){return Pi(n)?this.post(this.fhircastHubUrl,tn(r,n,i,o),V.JSON):(Ai(n),this.post(this.fhircastHubUrl,tn(r,n,i),V.JSON))}async fhircastGetContext(r){return this.get(`${this.fhircastHubUrl}/${r}`,{cache:"no-cache"})}async invite(r,n){return this.post("admin/projects/"+r+"/invite",n)}async handleTokenError(r){try{let n=await r.json();throw it(n)?new m(n):n.error_description?new m(w(n.error_description)):new Error(JSON.stringify(n))}catch(n){throw n instanceof m?(n.message=`Failed to fetch tokens: ${n.message}`,n):new m(w("Failed to fetch tokens"),{cause:n})}}async fetchTokens(r){let n=new URLSearchParams(r),i={...this.defaultHeaders,"Content-Type":V.FORM_URL_ENCODED};this.basicAuth&&(i.Authorization=`Basic ${this.basicAuth}`),this.credentialsInHeader&&(n.delete("client_id"),n.delete("client_secret"),!this.basicAuth&&r.client_id&&r.client_secret&&(i.Authorization=`Basic ${Zt(r.client_id+":"+r.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(r){let n=r.access_token;if(Oi(n)){let i=nr(n);if(Date.now()>=i.exp*1e3)throw this.clearActiveLogin(),new m(Dn);if(i.cid){if(i.cid!==this.clientId)throw this.clearActiveLogin(),new m(Cr)}else if(this.clientId&&i.client_id!==this.clientId)throw this.clearActiveLogin(),new m(Cr)}return this.setActiveLogin({accessToken:n,refreshToken:r.refresh_token,project:r.project,profile:r.profile})}checkSessionDetailsMatchLogin(r){return this.sessionDetails&&r?r.profile?.reference?.endsWith(this.sessionDetails.profile.id)??!1:!0}setupStorageListener(){try{window.addEventListener("storage",r=>{if(r.key===null)he.reload();else if(r.key===this.storage.makeKey("activeLogin")){let n=r.oldValue?JSON.parse(r.oldValue):void 0,i=r.newValue?JSON.parse(r.newValue):void 0;n?.profile.reference!==i?.profile.reference||!this.checkSessionDetailsMatchLogin(i)?he.reload():i?this.setAccessToken(i.accessToken,i.refreshToken):this.clear()}})}catch{}}getSubscriptionManager(){return this.subscriptionManager||(this.subscriptionManager=new ar(this,li(this.baseUrl,"/ws/subscriptions-r4"))),this.subscriptionManager}subscribeToCriteria(r,n){return this.getSubscriptionManager().addCriteria(r,n)}unsubscribeFromCriteria(r,n){this.subscriptionManager&&this.subscriptionManager.removeCriteria(r,n)}getMasterSubscriptionEmitter(){return this.getSubscriptionManager().getMasterEmitter()}};function Dd(){if(!globalThis.fetch)throw new Error("Fetch not available in this environment");return globalThis.fetch.bind(globalThis)}async function Fs(t,e){let r=t.headers.get("content-location");if(r)return r;let n=t.headers.get("location");if(n)return n;if(it(e)&&e.issue?.[0]?.diagnostics)return e.issue[0].diagnostics}function Us(t){let e=t.entry?.map(r=>r.resource)??[];return Object.assign(e,{bundle:t})}function Vd(t){return C(t)&&"data"in t&&"contentType"in t}function Vi(t,e,r,n){return Vd(t)?t:{data:t,filename:e,contentType:r,onProgress:n}}function _d(t){return C(t)&&"docDefinition"in t}function $s(t,e,r,n){return _d(t)?t:{docDefinition:t,filename:e,tableLayouts:r,fonts:n}}function Ld(t){return t.status===429||t.status>=500}var Nd={aws_ssm_parameter_store:"aws_ssm_parameter_store"};function Fd(t,e,r){let n=new sn;Array.isArray(t)||(t=t.entry?.map(i=>i.resource)??[]);for(let i of t)n.addObservation(i);return n.summarize(e,r)}var sn=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(!Ud(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(..._i(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,r){if(!this.code)throw new Error("Code is required for data points");let n=r(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:Bd(this.dataPoints,this.sampling)}}]}}};function Ud(t,e){return!!t.coding?.some(r=>e.coding?.some(n=>r.system===n.system&&r.code===n.code))}function _i(t){return t.data?.split(" ").map(e=>Number.parseFloat(e)*(t.factor??1)+(t.origin.value??0))??[]}function Bd(t,e){if(t.length)return t.map(r=>(r-(e?.origin.value??0))/(e?.factor??1)).join(" ")}function qd(t){let e=[],r=t.effectiveInstant??t.effectiveDateTime??t.effectivePeriod?.start,n=r?Date.parse(r).valueOf():0;t.valueSampledData&&e.push(...js(t.valueSampledData,n,t));for(let i of t.component??v)i.valueSampledData&&e.push(...js(i.valueSampledData,n,{...t,...i}));return e}function js(t,e,r){let n=[],i=_i(t),o=I(r);for(let s=0;s<i.length;s++){let a=i[s],u=e+Math.floor(s/t.dimensions)*t.period;n.push({...r,id:void 0,effectiveInstant:void 0,effectivePeriod:void 0,effectiveTiming:void 0,effectiveDateTime:u?new Date(u).toISOString():void 0,valueQuantity:{...t.origin,value:a},valueSampledData:void 0,component:void 0,derivedFrom:o?[...r.derivedFrom??[],{reference:o}]:r.derivedFrom})}return n}function cn({parentContext:t,path:e,elements:r,profileUrl:n,debugMode:i,accessPolicyResource:o}){if(e===t?.path)return;i??=t?.debugMode??!1,o??=t?.accessPolicyResource;let s=Wd(e,r,t,!!i),a=Je(e,".",2)[1];s=$d(s,o,a),s=jd(s,o,a);let u=Object.create(null);for(let[d,f]of Object.entries(s))u[e+"."+d]=f;let l;if(t&&!t.isDefaultContext)l=t.getExtendedProps;else{let d=Object.create(null);l=f=>{let h=Je(f,".",2)[1];if(h){if(!d[h]){let b=an(h,o?.hiddenFields);d[h]={hidden:b,readonly:b||an(h,o?.readonlyFields)}}return d[h]}}}return{path:e,elements:s,elementsByPath:u,profileUrl:n??t?.profileUrl,debugMode:i,getExtendedProps:l,accessPolicyResource:o}}function Wd(t,e,r,n){let i=Object.create(null);if(r)for(let[s,a]of Object.entries(r.elementsByPath)){let u=Se(t,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 $d(t,e,r){if(!e?.hiddenFields?.length)return t;let n=r?r+".":"";return Object.fromEntries(Object.entries(t).filter(([i])=>!an(n+i,e.hiddenFields)))}function jd(t,e,r){if(!e?.readonlyFields?.length)return t;let n=Object.create(null),i=r?r+".":"";for(let[o,s]of Object.entries(t))an(i+o,e.readonlyFields)?n[o]={...s,readonly:!0}:n[o]=s;return n}function an(t,e){if(!e?.length)return!1;let r=t.split(".");for(let n=1;n<=r.length;n++){let i=r.slice(0,n).join(".");if(e.includes(i))return!0}return!1}function Li(t){return t.type!==void 0&&t.type.length>0}function Hd(t,e,r,n){let i=je(t,e.path,{profileUrl:n});if(i){let o=r.typeSchema?.elements??r.elements;return i.some(s=>Lr(s,e,r,o))??!1}return console.assert(!1,"getNestedProperty[%s] in isDiscriminatorComponentMatch missed",e.path),!1}function Ni(t,e,r,n){if(t)for(let i of e){let o={value:t,type:i.typeSchema?.type??i.type?.[0].code};if(r.every(s=>Hd(o,s,i,i.typeSchema?.url??n)))return i.name}}var ur=class{constructor(e,r,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=cn({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=r}get elementsContext(){return this.elementsContextStack.at(-1)}crawlElement(e,r,n){this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema);let i=Object.fromEntries(Object.entries(this.elementsContext.elements).filter(([o])=>o.startsWith(r)));this.crawlElementsImpl(i,n),this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlSlice(e,r,n){let i=this.prepareSlices(n.slices,n);if(!le(i.slices))throw new Error(`cannot crawl slice ${r.name} since it has no type information`);this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema),this.sliceAllowList=[r],this.crawlSliceImpl(i.slices[0],r.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,r){let n=Gd(e);for(let i of n)this.crawlElementNode(i,r)}crawlElementNode(e,r){let n=r+"."+e.key;this.visitor.onEnterElement&&this.visitor.onEnterElement(n,e.element,this.elementsContext);for(let i of e.children)this.crawlElementNode(i,r);le(e.element?.slicing?.slices)&&this.crawlSlicingImpl(e.element.slicing,n),this.visitor.onExitElement&&this.visitor.onExitElement(n,e.element,this.elementsContext)}prepareSlices(e,r){let n=[];for(let o of e){if(!Li(o))continue;let s=o.type.find(a=>le(a.profile))?.profile?.[0];if(le(s)){let a=jn(s);a&&(o.typeSchema=a)}n.push(o)}return{...r,slices:n}}crawlSlicingImpl(e,r){let n=this.prepareSlices(e.slices,e);for(let i of n.slices)(this.sliceAllowList===void 0||this.sliceAllowList.includes(i))&&this.crawlSliceImpl(i,r,n)}crawlSliceImpl(e,r,n){let i=e.typeSchema;i&&this.visitor.onEnterSchema&&this.visitor.onEnterSchema(i),this.visitor.onEnterSlice&&this.visitor.onEnterSlice(r,e,n);let o,s=i?.elements??e.elements;le(s)&&(o=cn({path:r,parentContext:this.elementsContext,elements:s})),o&&this.elementsContextStack.push(o),this.crawlElementsImpl(s,r),o&&this.elementsContextStack.pop(),this.visitor.onExitSlice&&this.visitor.onExitSlice(r,e,n),i&&this.visitor.onExitSchema&&this.visitor.onExitSchema(i)}};function Gd(t){let e=[];function r(o,s){return s.startsWith(o+".")}function n(o,s){for(let a of o.children)if(r(a.key,s.key)){n(a,s);return}o.children.push(s)}let i=Object.entries(t);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(r(l.key,o)){n(l,a),u=!0;break}u||e.push(a)}return e}var un="__sliceName";function Qd(t,e){let r=new ln(t,t.resourceType,"resource");return new ur(e,r).crawlResource(),r.getDefaultValue()}function zd(t,e,r){for(let[n,i]of Object.entries(e)){if(r===void 0||r===n){lr(t,n,i,e);continue}let o=Se(r,n);o!==void 0&&lr(t,o,i,e)}return t}function Jd(t,e,r,n){let i=new ln([{[un]:e.name}],e.path,"element");return new ur(n,i).crawlSlice(t,e,r),i.getDefaultValue()[0]}var ln=class{constructor(e,r,n){c(this,"rootValue");c(this,"schemaStack");c(this,"valueStack");this.schemaStack=[],this.valueStack=[],this.rootValue=de(e),this.valueStack.splice(0,this.valueStack.length,{type:n,path:r,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,r,n){let i=this.value.values,o=this.value.path,s=Se(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=Se(n.path,o),d=Array.isArray(u)?u:[u];for(let f of d){Kd(f,s,r,n.elements,l),lr(f,s,r,n.elements);let h=Ui(f,s,n.elements,l);h!==void 0&&a.push(h)}}this.valueStack.push({type:"element",path:e,values:a})}onExitElement(e,r,n){if(!this.valueStack.pop())throw new Error("Expected value context to exist when exiting element");let o=Se(this.value.path,e);if(o===void 0)throw new Error(`Expected ${e} to be prefixed by ${this.value.path}`);let s=Se(n.path,this.value.path);for(let a of this.value.values){let u=Ui(a,o,n.elements,s);if(Array.isArray(u))for(let l=u.length-1;l>=0;l--){let d=u[l];le(d)||u.splice(l,1)}O(u)&&Fi(a,void 0,o,r)}}onEnterSlice(e,r,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,r,n);o.push(u)}this.valueStack.push({type:"slice",path:e,values:o})}getMatchingSliceValues(e,r,n){let i=[];for(let o of e)(o[un]??Ni(o,[r],n.discriminator,this.schema.url))===r.name&&i.push(o);for(let o=i.length;o<r.min;o++)if(jr(r.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 r of e.values)for(let n=r.length-1;n>=0;n--){let i=r[n];un in i&&delete i[un]}}getDefaultValue(){return this.rootValue}};function Kd(t,e,r,n,i){let o=Ui(t,e,n,i);r.min>0&&o===void 0&&jr(r.type[0].code)&&(r.isArray?Fi(t,[Object.create(null)],e,r):Fi(t,Object.create(null),e,r))}function Fi(t,e,r,n){if(r.includes("."))throw new Error("key cannot be nested");let i=r;if(r.includes("[x]")){let o=n.type[0].code;i=r.replace("[x]",U(o))}e===void 0?delete t[i]:t[i]=e}function Ui(t,e,r,n){let i=e.split("."),o=t,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("."),f=r[l].type[0].code;u=u.replace("[x]",U(f))}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 lr(t,e,r,n){if(!(r.fixed||r.pattern))return t;if(Array.isArray(t))return t.map(a=>lr(a,e,r,n));t==null&&(t=Object.create(null));let i=t,o=e.split("."),s=i;for(let a=0;a<o.length;a++){let u=o[a];if(u.includes("[x]")){let d=n[o.slice(0,a+1).join(".")].type[0].code;u=u.replace("[x]",U(d))}if(a===o.length-1){let l=Array.isArray(s)?s:[s];for(let d of l)r.fixed?d[u]??=r.fixed.value:r.pattern&&(d[u]=Hs(d[u],r.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 Hs(t,e){if(Array.isArray(e)&&(Array.isArray(t)||t===void 0))return(t?.length??0)>0?t:de(e);if(C(e)&&(C(t)&&!Array.isArray(t)||t===void 0)){let r=de(t)??Object.create(null);for(let n of Object.keys(e))r[n]=Hs(r[n],e[n]);return r}return t}function Bi(t,e){if(!t.group)throw new m(w("ConceptMap does not specify a mapping group","ConceptMap.group"));let r=Gs(e),n=Yd(r,e.targetsystem?t.group.filter(o=>o.target===e.targetsystem):t.group),i=n.length>0;return{result:i,match:i?n:void 0}}function Gs(t){let e=Object.create(null);if(t.code&&!t.coding&&!t.codeableConcept){if(!t.system)throw new m(w("System parameter must be provided with code"));e[t.system]=[t.code]}else if(t.coding&&!t.code&&!t.codeableConcept)t.coding.code&&(e[t.coding.system??""]=[t.coding.code]);else if(t.codeableConcept&&!t.code&&!t.coding)for(let{system:r,code:n}of t.codeableConcept.coding??v)n&&(e[r??""]=re(e[r??""],n));else throw t.code||t.coding||t.codeableConcept?new m(w("Ambiguous input: multiple source codings provided")):new m(w("Source Coding (system + code) must be specified"));return e}function Yd(t,e){let r=[];for(let[n,i]of Object.entries(t))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=Xd(i,o)),s&&r.push(...s)}return r}function Xd(t,e){switch(e.unmapped?.mode){case"provided":return t.map(r=>({equivalence:"equal",concept:{system:e.target,code:r}}));case"fixed":return[{equivalence:"equivalent",concept:{system:e.target,code:e.unmapped.code,display:e.unmapped.display}}];default:return}}var Zd=[...Kt,"->","<<",">>","=="];function Qs(t){return new Pe(t,Jt,Zd).tokenize()}var ep={"-":"disjoint","==":"equal"},qi=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 r=this.parser.consumeAndParse(S.As);r instanceof oe?(e.transform=r.name,e.parameter=r.args?.map(zs)):r instanceof G||r instanceof F?(e.transform="copy",e.parameter=[zs(r)]):(e.transform="evaluate",e.parameter=[{valueString:r.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(r=>r.name)}]}parseConceptMap(){this.parser.consume("Symbol","conceptmap");let e={resourceType:"ConceptMap",status:"active",url:"#"+this.parser.consume("String").value};this.parser.consume("{");let r={},n=this.parser.peek()?.value;for(;n!=="}";)n==="prefix"?this.parseConceptMapPrefix(r):this.parseConceptMapRule(e,r),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 r=this.parser.consume().value;this.parser.consume("=");let n=this.parser.consume().value;e[r]=n}parseConceptMapRule(e,r){let n=this.parser.consume().value,i=r[n];this.parser.consume(":");let o=this.parser.consume().value,s=ep[this.parser.consume().value],a=this.parser.consume().value,u=r[a];this.parser.consume(":");let l=this.parser.consume().value,d=e?.group?.find(f=>f.source===i&&f.target===u);d||(d={source:i,target:u,element:[]},e.group||(e.group=[]),e.group.push(d)),d.element||(d.element=[]),d.element.push({code:o,target:[{code:l,equivalence:s}]})}};function zs(t){if(t instanceof F)return{valueId:t.name};if(t instanceof G)return tp(t);throw new Error(`Unknown parameter atom type: ${t.constructor.name} (${t.toString()})`)}function tp(t){switch(t.value.type){case"boolean":return{valueBoolean:t.value.value};case"decimal":return{valueDecimal:t.value.value};case"integer":return{valueInteger:t.value.value};case"dateTime":case"string":return{valueString:t.value.value};default:throw new Error("Unknown target literal type: "+t.value.type)}}var rp=dt().registerInfix("->",{precedence:S.Arrow}).registerInfix(";",{precedence:S.Semicolon});function np(t){let e=rp.construct(Qs(t));return e.removeComments(),new qi(e).parse()}var dn=class{constructor(e=[]){c(this,"resources");this.resources=e}get(e,r){let n=[];for(let i of this.resources)i.resourceType===e&&i.url&&this.matchesUrl(i.url,r)&&n.push(i);return n}matchesUrl(e,r){if(r.includes("*")){let n=r.split("*");return e.startsWith(n[0])&&e.endsWith(n[1])}else return e===r}};function ip(t,e,r=new dn){return op({root:t,transformMaps:r},t,e)}function op(t,e,r){return sp(t,e),Ks(t,e),$i(t,e.group[0],r)}function sp(t,e){let r=fn(t);if(r&&e.import)for(let n of e.import){let i=r.get("StructureMap",n);for(let o of i)Ks(t,o)}}function Ks(t,e){let r=fn(t);if(r&&e.contained)for(let n of e.contained)(n.resourceType==="StructureMap"||n.resourceType==="ConceptMap")&&r.resources.push(n);for(let n of e.group??v)pn(t,n.name,{type:"StructureMapGroup",value:n})}function $i(t,e,r){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(r.length<n.length)throw new Error(`Not enough arguments (got ${r.length}, min ${n.length})`);if(r.length>n.length+i.length)throw new Error(`Too many arguments (got ${r.length}, max ${n.length+i.length})`);let o={},s=[],a=0;for(let l of n)dr(o,l.name,r[a++]);for(let l of i){let d=r[a++]??{type:l.type??"BackboneElement",value:{}};dr(o,l.name,d),s.push(d)}let u={root:t.root,parent:t,variables:o};for(let l of e.rule??v)Ys(u,l);return s}function Ys(t,e){e.source&&Xs(t,e,0)}function Xs(t,e,r){let n=e.source[r];for(let i of lp(t,n))pn(t,"_",i),n.variable&&pn(t,n.variable,i),r<e.source.length-1?Xs(t,e,r+1):ap(t,e)}function ap(t,e){if(!cp(t,e)){for(let r of e.target??v)Zs(t,r);for(let r of e.rule??v)Ys(t,r);for(let r of e.dependent??v)Tp(t,r)}}function cp(t,e){if(e.target?.length!==1||e.target[0].transform||e.rule||e.dependent)return!1;let r=Fe(t,"_");if(Array.isArray(r)&&(r=r[0]),!r)return!1;let n=up(t,r);if(!n)return Zs(t,{...e.target[0],transform:"copy",parameter:[{valueId:"_"}]}),!0;let i=e.target[0],o=Fe(t,i.context),s=o.value[i.element],a=ta(o,i.element)||Array.isArray(s),u={root:t.root,parent:t,variables:{}},l=$i(u,n,[r]);return ea(t,i,o,l,a,s),!0}function up(t,e){let r=t;for(;r;){if(r.variables){for(let n of Object.values(r.variables))for(let i of Wi(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}}r=r.parent}}function lp(t,e){let r=Fe(t,e.context);if(!r)return[];let n=e.element;if(!n)return[r];let i=k(n,[r]);if(!i||i.length===0)return[];if(e.condition&&!Js(r,{[e.variable]:i[0]},e.condition))return[];if(e.check&&!Js(r,{[e.variable]:i[0]},e.check))throw new Error("Check failed: "+e.check);return e.listMode&&(i=dp(e,i)),i}function Js(t,e,r){return j(k(r,[t],e))}function dp(t,e){switch(t.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 Zs(t,e){let r=Fe(t,e.context);if(!r)throw new Error("Target not found: "+e.context);let n=r.value[e.element],i,o=ta(r,e.element)||Array.isArray(n);if(e.transform)switch(e.transform){case"append":i=pp(t,e);break;case"cast":i=fp(t,e);break;case"cc":i=mp(t,e);break;case"copy":i=hp(t,e);break;case"create":i=gp(t,e);break;case"evaluate":i=yp(t,e);break;case"translate":i=xp(t,e);break;case"truncate":i=vp(t,e);break;case"uuid":i=[{type:"string",value:se()}];break;default:throw new Error(`Unsupported transform: ${e.transform}`)}else{let s=ra(r,e.element)?.type,a=s?.length===1?s[0].code:void 0;o||n===void 0?i=[a?{type:a,value:{}}:E({})]:i=[a?{type:a,value:n}:E(n)]}ea(t,e,r,i,o,n)}function ea(t,e,r,n,i,o){if(n.length!==0){if(i){o||(o=[],dr(r.value,e.element,o));for(let s of n)o.push(s.value)}else dr(r.value,e.element,n[0].value);e.variable&&pn(t,e.variable,Sp(n))}}function ta(t,e){return ra(t,e)?.isArray}function ra(t,e){return Me(t.type)?.elements?.[e]}function pp(t,e){let r=Q(t,e.parameter?.[0])?.[0]?.value,n=Q(t,e.parameter?.[1])?.[0]?.value;return[{type:"string",value:(r??"").toString()+(n??"").toString()}]}function fp(t,e){let r=Q(t,e.parameter?.[0])?.[0];return Q(t,e.parameter?.[1])?.[0]?.value==="string"?[{type:"string",value:r?.value?.toString()}]:[r]}function mp(t,e){let r=e.parameter;if(r.length===2){let n=Q(t,r[0])?.[0]?.value,i=Q(t,r[1])?.[0]?.value;return[{type:"CodeableConcept",value:{coding:[{system:n,code:i}]}}]}else return[{type:"CodeableConcept",value:{text:Q(t,r[0])?.[0]?.value}}]}function hp(t,e){return e.parameter.flatMap(r=>Q(t,r))}function gp(t,e){let r={};return e.parameter&&e.parameter.length>0&&(r.resourceType=Q(t,e.parameter?.[0])?.[0]?.value),[E(r)]}function yp(t,e){let n=Q(t,e.parameter?.[0])[0].value;return k(n,[],na(t))}function xp(t,e){let r=e.parameter.flatMap(u=>Q(t,u)),n=r[0].value,i=r[1].value,s=fn(t)?.get("ConceptMap",i)[0];if(!s)throw new Error("ConceptMap not found: "+i);let a=Bi(s,{system:s.group?.[0]?.source,code:n});return[E(a.match?.[0]?.concept?.code)]}function vp(t,e){let r=Q(t,e.parameter?.[0])?.[0],n=Q(t,e.parameter?.[1])?.[0]?.value;return r.type==="string"?[{type:"string",value:r.value.substring(0,n)}]:[r]}function Tp(t,e){let r=Fe(t,e.name);if(!r)throw new Error("Dependent group not found: "+e.name);let n=e.variable,i=[];for(let s of n){let a=Fe(t,s);if(!a)throw new Error("Dependent variable not found: "+s);i.push(a)}let o={root:t.root,parent:t,variables:{}};$i(o,r.value,i)}function fn(t){if(t.transformMaps)return t.transformMaps;if(t.parent)return fn(t.parent)}function Q(t,e){let n=_({type:"StructureMapGroupRuleTargetParameter",value:e},"value");if(!n)throw new Error("Missing target parameter: "+JSON.stringify(e));if(n=Wi(n),n.length===1&&n[0].type==="id"){let i=Fe(t,n[0].value);if(!i)throw new Error("Variable not found: "+n[0].value);return Wi(i)}return n}function Fe(t,e){let r=t.variables?.[e];if(r)return r;if(t.parent)return Fe(t.parent,e)}function na(t,e={}){if(t.parent&&na(t.parent,e),t.variables)for(let[r,n]of Object.entries(t.variables))e[r]=n,e["%"+r]=n;return e}function pn(t,e,r){t.variables||(t.variables={}),dr(t.variables,e,r)}function dr(t,e,r){if(e==="__proto__"||e==="constructor"||e==="prototype")throw new Error("Invalid key: "+e);t[e]=r}function Wi(t){return Array.isArray(t)?t:[t]}function Sp(t){return t.length===1?t[0]:t}var tt=Object.prototype.hasOwnProperty;function pr(t){return t===void 0?"undefined":t===null?"null":Array.isArray(t)?"array":typeof t}function bp(t){return t&&typeof t=="object"}function yt(t){if(!bp(t))return t;if(t.constructor===Array){let r=t.length,n=new Array(r);for(let i=0;i<r;i++)n[i]=yt(t[i]);return n}if(t.constructor===Date)return new Date(+t);let e={};for(let r in t)tt.call(t,r)&&(e[r]=yt(t[r]));return e}function Gi({op:t}){return t==="remove"||t==="replace"||t==="copy"||t==="move"}function Hi(t,e){let r=[];for(let n in t)tt.call(t,n)&&t[n]!==void 0&&!(tt.call(e,n)&&e[n]!==void 0)&&r.push(n);return r}function Ep(t){let e=t.length,r={};for(let n=0;n<e;n++){let i=t[n];for(let o in i)tt.call(i,o)&&i[o]!==void 0&&(r[o]=(r[o]||0)+1)}for(let n in r)r[n]<e&&delete r[n];return Object.keys(r)}function Rp(t,e){let r=[];for(let n in t)tt.call(t,n)&&t[n]!==void 0&&tt.call(e,n)&&e[n]!==void 0&&r.push(n);return r}function Cp(t){return t.op==="add"}function Pp(t){return t.op==="remove"}function ji(t,e){return{operations:t.operations.concat(e),cost:t.cost+1}}function ia(t,e,r,n=Ae){let i=Math.max(t.length,e.length),o=new Map([[0,{operations:[],cost:0}]]);function s(f,h){let b=f*i+h,P=o.get(b);if(P===void 0){if(f>0&&h>0&&!n(t[f-1],e[h-1],r.add(String(f-1))).length)P=s(f-1,h-1);else{let Oe=[];if(f>0){let Be=s(f-1,h),qe={op:"remove",index:f-1};Oe.push(ji(Be,qe))}if(h>0){let Be=s(f,h-1),qe={op:"add",index:f-1,value:e[h-1]};Oe.push(ji(Be,qe))}if(f>0&&h>0){let Be=s(f-1,h-1),qe={op:"replace",index:f-1,original:t[f-1],value:e[h-1]};Oe.push(ji(Be,qe))}P=Oe.sort((Be,qe)=>Be.cost-qe.cost)[0]}o.set(b,P)}return P}let a=isNaN(t.length)||t.length<=0?0:t.length,u=isNaN(e.length)||e.length<=0?0:e.length,l=s(a,u).operations,[d]=l.reduce(([f,h],b)=>{if(Cp(b)){let P=b.index+1+h,Oe=P<a+h?String(P):"-",go={op:b.op,path:r.add(Oe).toString(),value:b.value};return[f.concat(go),h+1]}else if(Pp(b)){let P={op:b.op,path:r.add(String(b.index+h)).toString()};return[f.concat(P),h-1]}else{let P=r.add(String(b.index+h)),Oe=n(b.original,b.value,P);return[f.concat(...Oe),h]}},[[],0]);return d}function oa(t,e,r,n=Ae){let i=[];return Hi(t,e).forEach(o=>{i.push({op:"remove",path:r.add(o).toString()})}),Hi(e,t).forEach(o=>{i.push({op:"add",path:r.add(o).toString(),value:e[o]})}),Rp(t,e).forEach(o=>{i.push(...n(t[o],e[o],r.add(o)))}),i}function Ae(t,e,r,n=Ae){if(t===e)return[];let i=pr(t),o=pr(e);return i==="array"&&o==="array"?ia(t,e,r,n):i==="object"&&o==="object"?oa(t,e,r,n):[{op:"replace",path:r.toString(),value:e}]}function sa(t){return t.replace(/~1/g,"/").replace(/~0/g,"~")}function aa(t){return t.replace(/~/g,"~0").replace(/\//g,"~1")}var M=class t{constructor(e=[""]){c(this,"tokens");this.tokens=e}static fromJSON(e){let r=e.split("/").map(sa);if(r[0]!=="")throw new Error(`Invalid JSON Pointer: ${e}`);return new t(r)}toString(){return this.tokens.map(aa).join("/")}evaluate(e){let r=null,n="",i=e;for(let o=1,s=this.tokens.length;o<s;o++){if(r=i,n=this.tokens[o],n==="__proto__"||n==="constructor"||n==="prototype")throw new Error("Invalid path: "+this.toString());if(r!=null&&(typeof r=="object"||typeof r=="function")&&!Object.hasOwn(r,n)&&n in r)throw new Error("Invalid inherited key: "+n);i=r?.[n]}return{parent:r,key:n,value:i}}get(e){return this.evaluate(e).value}set(e,r){let n=this.evaluate(e);n.parent&&(n.parent[n.key]=r)}push(e){this.tokens.push(e)}add(e){let r=this.tokens.concat(String(e));return new t(r)}parent(){let e=this.tokens.length>1?this.tokens.slice(0,-1):[""];return new t(e)}};var z=class extends Error{constructor(r){super(`Value required at path: ${r}`);c(this,"path");this.path=r,this.name="MissingError"}},mn=class extends Error{constructor(r,n){super(`Test failed: ${r} != ${n}`);c(this,"actual");c(this,"expected");this.actual=r,this.expected=n,this.name="TestError"}};function Qi(t,e,r){if(Array.isArray(t))if(e==="-")t.push(r);else{let n=parseInt(e,10);t.splice(n,0,r)}else t[e]=r}function ca(t,e){if(Array.isArray(t)){let r=parseInt(e,10);t.splice(r,1)}else delete t[e]}function fr(t,e,r){let n=M.fromJSON(e.path);if(r?.implicitArrayCreation&&n.tokens[n.tokens.length-1]==="-"){let o=n.parent().evaluate(t);o.value===void 0&&pr(o.parent)==="object"&&(o.parent[o.key]=[])}let i=n.evaluate(t);return i.parent===void 0?new z(e.path):r?.implicitArrayCreation&&i.key==="-"&&!Array.isArray(i.parent)?new z(e.path):(Qi(i.parent,i.key,yt(e.value)),null)}function gn(t,e,r){let n=M.fromJSON(e.path).evaluate(t);return n.value===void 0?new z(e.path):(ca(n.parent,n.key),null)}function yn(t,e,r){let n=M.fromJSON(e.path).evaluate(t);if(n.parent===null)return new z(e.path);if(Array.isArray(n.parent)){if(parseInt(n.key,10)>=n.parent.length)return new z(e.path)}else if(n.value===void 0)return new z(e.path);return n.parent[n.key]=yt(e.value),null}function xn(t,e,r){let n=M.fromJSON(e.from).evaluate(t);if(n.value===void 0)return new z(e.from);let i=M.fromJSON(e.path).evaluate(t);return i.parent===void 0?new z(e.path):(ca(n.parent,n.key),Qi(i.parent,i.key,n.value),null)}function ua(t,e,r){let n=M.fromJSON(e.from).evaluate(t);if(n.value===void 0)return new z(e.from);let i=M.fromJSON(e.path).evaluate(t);return i.parent===void 0?new z(e.path):(Qi(i.parent,i.key,yt(n.value)),null)}function la(t,e,r){let n=M.fromJSON(e.path).evaluate(t);return Ae(n.value,e.value,new M).length?new mn(n.value,e.value):null}var hn=class extends Error{constructor(r){super(`Invalid operation: ${r.op}`);c(this,"operation");this.operation=r,this.name="InvalidOperationError"}};function zi(t,e,r){switch(e.op){case"add":return fr(t,e,r);case"remove":return gn(t,e,r);case"replace":return yn(t,e,r);case"move":return xn(t,e,r);case"copy":return ua(t,e,r);case"test":return la(t,e,r);default:return new hn(e)}}function Ap(t,e,r){return e.map(n=>zi(t,n,r))}function wp(t){function e(r,n,i){let o=t(r,n,i);return Array.isArray(o)?o:Ae(r,n,i,e)}return e}function Op(t,e,r){let n=new M;return(r?wp(r):Ae)(t,e,n)}function da(t,e){let r=M.fromJSON(e).evaluate(t);if(r!==void 0)return{op:"test",path:e,value:r.value}}function Ip(t,e){let r=new Array;return e.filter(Gi).forEach(n=>{let i=da(t,n.path);if(i&&r.push(i),"from"in n){let o=da(t,n.from);o&&r.push(o)}}),r}var kp=Object.freeze({implicitArrayCreation:!0});function Mp(t){let e=[];for(let r of t.parameter??[]){if(r.name!=="operation")continue;let n={};for(let i of r.part??[])switch(i.name){case"type":n.type=i.valueCode;break;case"path":n.path=i.valueString;break;case"name":n.name=i.valueString;break;case"index":n.index=i.valueInteger;break;case"source":n.source=i.valueInteger;break;case"destination":n.destination=i.valueInteger;break;case"value":n.value=_({type:"ParametersParameter",value:i},"value");break}e.push(n)}return e}function Dp(t,e){for(let r of e){let n=k(r.path,[t]);switch(r.type){case"add":{let i=Ji(n,r);if(!C(i?.value))throw new Error(`Failed to resolve base object for add operation at path '${r.path}'`);if(mr(i,r),!r.name)throw new Error(`No name present for add operation at path '${r.path}'`);let o=M.fromJSON(He(i.path));o.push(r.name),hi(t.type,`${i.path}.${r.name}`)?.isArray&&o.push("-"),fr(t.value,{op:"add",path:o.toString(),value:r.value.value},kp);break}case"replace":{let i=Ji(n,r);if(!i)throw new Error(`Failed to resolve target value for replace operation at path '${r.path}'`);mr(i,r),yn(t.value,{op:"replace",path:He(i.path),value:r.value.value});break}case"move":{let i=pa(n,r),o=M.fromJSON(He(i));xn(t.value,{op:"move",from:o.add(r.source.toString()).toString(),path:o.add(r.destination.toString()).toString()});break}case"insert":{if(typeof r.index!="number")throw new Error(`No index present for insert operation at path '${r.path}'`);let i=pa(n,r),o=M.fromJSON(He(i));o.push(r.index.toString()),fr(t.value,{op:"add",path:o.toString(),value:r.value.value});break}case"delete":{let i=Ji(n,r);i&&(mr(i,r),gn(t.value,{op:"remove",path:He(i.path)}))}}}}function mr(t,e){if(!("path"in t))throw new Error(`Cannot resolve pointer for value at path '${e.path}'`)}function Ji(t,e){if(t.length>1)throw new Error(`Resolved multiple base values for ${e.type} operation at path '${e.path}'`);return t[0]}var Vp=/\[(?<index>\d+)\]$/;function Ki(t){let e=Vp.exec(t)?.groups?.index;return e?Number.parseInt(e,10):-1}function pa(t,e){if(Ki(e.path)!==-1)throw new Error(`Failed to resolve base collection for ${e.type} operation at path '${e.path}'`);if(!t.length)throw new Error(`Failed to resolve base for ${e.type} operation at path '${e.path}'`);mr(t[0],e);let r=t[0].path;if(Ki(r)!==0)throw new Error(`Failed to resolve base collection for ${e.type} operation at path '${e.path}'`);let n=r.slice(0,r.lastIndexOf("["));for(let i=1;i<t.length;i++){let o=t[i];if(mr(o,e),!o.path.startsWith(n))throw new Error(`Cannot patch heterogeneous collection for ${e.type} operation at path '${e.path}'`);if(Ki(o.path)!==i)throw new Error(`Cannot patch misordered collection for ${e.type} operation at path '${e.path}'`)}if("index"in e&&!Yi(e.index,t))throw new Error(`Index out of bounds for ${e.type} operation: ${e.index}`);if("source"in e&&!Yi(e.source,t))throw new Error(`Source index out of bounds for ${e.type} operation: ${e.source}`);if("destination"in e&&!Yi(e.destination,t))throw new Error(`Destination index out of bounds for ${e.type} operation: ${e.destination}`);return n}function Yi(t,e){return t>=0&&t<=e.length}var _p=" ".repeat(2),Xi=class{constructor(e=_p,r=!0){c(this,"indent");c(this,"b");c(this,"indentCount");this.indent=e,this.b=[],this.indentCount=0,r&&(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);Ir(u.data.StructureDefinitionList);for(let l of u.data.SearchParameterList)Qr(l)})());return this.setCacheEntry(i,s,n),s}requestProfileSchema(r,n){if(!n?.expandProfile&&$n(r))return Promise.resolve();let i=r+"-requestSchema"+(n?.expandProfile?"-nested":""),o=this.getCacheEntry(i,void 0);if(o)return o.value;let s=new $((async()=>{if(n?.expandProfile){let a=this.fhirUrl("StructureDefinition","$expand-profile");a.search=new URLSearchParams({url:r}).toString();let u=await this.post(a.toString(),{});Ir(u)}else{let a=await this.searchOne("StructureDefinition",{url:r,_sort:"-_lastUpdated"});if(!a){console.warn(`No StructureDefinition found for ${r}!`);return}kr(a)}})());return this.setCacheEntry(i,s,n),s}readHistory(r,n,i,o){let s=this.fhirUrl(r,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(r,n,i,o){return this.get(this.fhirUrl(r,n,"_history",i),o)}readPatientEverything(r,n){return this.getBundle(this.fhirUrl("Patient",r,"$everything"),n)}readPatientSummary(r,n){return this.getBundle(this.fhirUrl("Patient",r,"$summary"),n)}async createResource(r,n){if(!r.resourceType)throw new Error("Missing resourceType");this.invalidateSearches(r.resourceType);let i=await this.post(this.fhirUrl(r.resourceType),r,void 0,n);return this.dispatchResourceModified({resourceType:r.resourceType,operation:"create",id:i?.id,resource:i}),i}async createResourceIfNoneExist(r,n,i={}){let o=this.fhirUrl(r.resourceType);this.setRequestHeader(i,"If-None-Exist",n);let s=await this.post(o,r,void 0,i);return this.cacheResource(s,i),this.invalidateUrl(this.fhirUrl(r.resourceType,r.id,"_history")),this.invalidateSearches(r.resourceType),this.dispatchResourceModified({resourceType:r.resourceType,operation:"create",id:s?.id,resource:s}),s}async upsertResource(r,n,i){let o=this.fhirSearchUrl(r.resourceType,n),s=await this.put(o,r,void 0,i),a=s!==void 0;return s||(s=r),this.cacheResource(s,i),this.invalidateUrl(this.fhirUrl(r.resourceType,r.id,"_history")),this.invalidateSearches(r.resourceType),a&&this.dispatchResourceModified({resourceType:r.resourceType,operation:"update",id:s.id,resource:s}),s}async createAttachment(r,n,i,o,s){let a=Vi(r,n,i,o);if(a.contentType===V.XML){let d=a.data,f;d instanceof Blob?f=await new Promise((h,b)=>{let P=new FileReader;P.onload=()=>{if(!P.result){b(new Error("Failed to load file"));return}h(P.result)},P.readAsText(d,"utf-8")}):ArrayBuffer.isView(d)?f=new TextDecoder().decode(d):f=d,f.includes("<ClinicalDocument")&&f.includes("urn:hl7-org:v3")&&(a={...a,contentType:V.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(r,n,i,o,s){let a=Vi(r,n,i,o),u=s??(typeof n=="object"?n:{}),{data:l,contentType:d,filename:f,securityContext:h,onProgress:b}=a,P=this.fhirUrl("Binary");return f&&P.searchParams.set("_filename",f),h?.reference&&this.setRequestHeader(u,"X-Security-Context",h.reference),b?this.uploadwithProgress(P,l,d,b,u):this.post(P,l,d,u)}uploadwithProgress(r,n,i,o,s){return new Promise((a,u)=>{let l=new XMLHttpRequest,d=()=>l.abort();s?.signal?.addEventListener("abort",d);let f=h=>{s?.signal?.removeEventListener("abort",d),h instanceof Error?u(h):a(h)};if(l.responseType="json",l.onabort=()=>f(new DOMException("Request aborted","AbortError")),l.onerror=()=>f(new Error("Request error")),o&&(l.upload.onprogress=h=>o(h),l.upload.onload=h=>o(h)),l.onload=()=>{l.status>=200&&l.status<300?f(l.response):f(new m(Et(l.response||l.statusText)))},l.open("POST",r),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 h=s.headers;for(let[b,P]of Object.entries(h))l.setRequestHeader(b,P)}l.send(n)})}async createPdf(r,n,i,o){if(!this.createPdfImpl)throw new Error("PDF creation not enabled");let s=$s(r,n,i,o),a=typeof n=="object"?n:{},{docDefinition:u,tableLayouts:l,fonts:d,...f}=s,h=await this.createPdfImpl(u,l,d),b={...f,data:h,contentType:"application/pdf"};return this.createBinary(b,a)}createComment(r,n,i){let o=this.getProfile(),s,a;return r.resourceType==="Encounter"&&(s=ne(r),a=r.subject),r.resourceType==="ServiceRequest"&&(s=r.encounter,a=r.subject),r.resourceType==="Patient"&&(a=ne(r)),this.createResource({resourceType:"Communication",status:"completed",basedOn:[ne(r)],encounter:s,subject:a,sender:o?ne(o):void 0,sent:new Date().toISOString(),payload:[{contentString:n}]},i)}async updateResource(r,n){if(!r.resourceType)throw new Error("Missing resourceType");if(!r.id)throw new Error("Missing id");let i=await this.put(this.fhirUrl(r.resourceType,r.id),r,void 0,n),o=i!==void 0;return i||(i=r),this.cacheResource(i,n),this.invalidateUrl(this.fhirUrl(r.resourceType,r.id,"_history")),this.invalidateSearches(r.resourceType),o&&this.dispatchResourceModified({resourceType:r.resourceType,operation:"update",id:i.id,resource:i}),i}async patchResource(r,n,i,o){let s=await this.patch(this.fhirUrl(r,n),i,o);return this.cacheResource(s,o),this.invalidateUrl(this.fhirUrl(r,n,"_history")),this.invalidateSearches(r),this.dispatchResourceModified({resourceType:r,operation:"patch",id:n,resource:s}),s}async deleteResource(r,n,i){this.deleteCacheEntry(this.fhirUrl(r,n).toString()),this.invalidateSearches(r);let o=await this.delete(this.fhirUrl(r,n),i);return this.dispatchResourceModified({resourceType:r,operation:"delete",id:n}),o}validateResource(r,n){return this.post(this.fhirUrl(r.resourceType,"$validate"),r,void 0,n)}executeBot(r,n,i,o){let s;if(typeof r=="string"){let a=r;s=this.fhirUrl("Bot",a,"$execute")}else{let a=r;s=this.fhirUrl("Bot","$execute"),s.searchParams.set("identifier",a.system+"|"+a.value)}return this.post(s,n,i,o)}executeBatch(r,n){return this.post(this.fhirBaseUrl,r,void 0,n)}sendEmail(r,n){return this.post("email/v1/send",r,V.JSON,n)}graphql(r,n,i,o){return this.post(this.fhirUrl("$graphql"),{query:r,operationName:n,variables:i},V.JSON,o)}readResourceGraph(r,n,i,o){return this.get(`${this.fhirUrl(r,n)}/$graph?graph=${i}`,o)}pushToAgent(r,n,i,o,s,a){let{waitTimeout:u,returnAck:l,...d}=a??{};return this.post(this.fhirUrl("Agent",K(r),"$push"),{destination:typeof n=="string"?n:I(n),body:i,contentType:o,waitForResponse:s,...u!==void 0?{waitTimeout:u}:void 0,...l!==void 0?{returnAck:l}:void 0},V.FHIR_JSON,d)}getCdsServices(r){return this.get(this.cdsServicesUrl,r)}callCdsService(r,n,i){return this.post(W(this.cdsServicesUrl,r),n,V.JSON,i)}getActiveLogin(){return this.storage.getObject("activeLogin")}async setActiveLogin(r){(!this.sessionDetails?.profile||I(this.sessionDetails.profile)!==r.profile?.reference)&&this.clearActiveLogin(),this.setAccessToken(r.accessToken,r.refreshToken),this.storage.setObject("activeLogin",r),this.addLogin(r),this.refreshPromise=void 0,await this.refreshProfile()}getAccessToken(){return this.accessToken}isAuthenticated(r){return this.accessTokenExpires!==void 0&&Date.now()<this.accessTokenExpires-(r??this.refreshGracePeriod)}setAccessToken(r,n){this.accessToken=r,this.refreshToken=n,this.accessTokenExpires=ki(r),this.medplumServer=Ii(r)}getLogins(){return this.storage.getObject("logins")??[]}addLogin(r){let n=this.getLogins().filter(i=>i.profile?.reference!==r.profile?.reference);n.push(r),this.storage.setObject("logins",n)}async refreshProfile(){if(this.medplumServer)return this.profilePromise=new Promise((r,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"}),r(i.profile),this.dispatchEvent({type:"profileRefreshed"})}).catch(n)}),this.dispatchEvent({type:"profileRefreshing"}),this.profilePromise}syncStoredLoginProject(){let r=this.getActiveLogin(),n=this.sessionDetails?.project?.name;if(!r||!n||r.project.display===n)return;let i={...r,project:{...r.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(r,n={}){return(await this.downloadResponse(r,n)).blob()}async downloadResponse(r,n={}){this.refreshPromise&&await this.refreshPromise;let i=r.toString();i.startsWith(Md)&&(r=this.fhirUrl(i));let o=n.headers;return o||(o={},n.headers=o),o.Accept||(o.Accept="*/*"),this.addFetchOptionsDefaults(n),this.fetchWithRetry(r.toString(),n)}async createMedia(r,n){let{additionalFields:i,...o}=r,s=await this.createResource({resourceType:"Media",status:"preparation",content:{contentType:r.contentType},...i});o.securityContext||(o.securityContext=ne(s));let a=await this.createAttachment(o,n);return this.updateResource({...s,status:"completed",content:a})}async uploadMedia(r,n,i,o,s){return this.createMedia({data:r,contentType:n,filename:i,additionalFields:o},s)}async createDocumentReference(r,n){let{additionalFields:i,...o}=r,s=await this.createResource({resourceType:"DocumentReference",status:"current",content:[{attachment:{contentType:r.contentType}}],...i});o.securityContext||(o.securityContext=ne(s));let a=await this.createAttachment(o,n);return this.updateResource({...s,content:[{attachment:a}]})}async bulkExport(r="",n,i,o){let s=r&&`${r}/`,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(r,n={}){this.addFetchOptionsDefaults(n);let i=n.headers;return i.Prefer="respond-async",n.method="POST",this.request(r,n)}async wrappedFetch(r,n){return await this.refreshIfExpired(),this.addFetchOptionsDefaults(n),this.fetchWithRetry(r,n)}get keyValue(){return this.keyValueClient||(this.keyValueClient=new or(this)),this.keyValueClient}getBundle(r,n){return new $((async()=>{let i=await this.get(r,n);for(let o of i.entry??v)this.cacheResource(o.resource,n);return i})())}isCacheEnabled(r){return!!this.requestCache&&!this.getRequestHeader(r,"x-medplum-on-behalf-of")}getCacheEntry(r,n){if(!this.isCacheEnabled(n)||n?.cache==="no-cache"||n?.cache==="reload")return;let i=this.requestCache.get(r);if(!(!i||i.requestTime+this.cacheTime<Date.now()))return i}setCacheEntry(r,n,i){this.isCacheEnabled(i)&&(this.requestCache.set(r,{requestTime:Date.now(),value:n}),i?.signal&&i.signal.addEventListener("abort",()=>{this.requestCache.delete(r)}))}cacheResource(r,n){r?.id&&!r.meta?.tag?.some(i=>i.code==="SUBSETTED")&&this.setCacheEntry(this.fhirUrl(r.resourceType,r.id).toString(),new $(Promise.resolve(r)),n)}deleteCacheEntry(r){this.requestCache&&this.requestCache.delete(r)}dispatchResourceModified(r){this.listenerCount("resourceModified")>0&&this.dispatchEvent({type:"resourceModified",payload:r})}async request(r,n={},i={}){let o=await this.wrappedFetch(r,n);if(o.status===401)return this.handleUnauthenticated(r,n,i);if(o.status===204||o.status===304)return;let a=o.headers.get("content-type")?.includes("json");if(o.status===404&&!a)throw new m(Mn);let u=await this.parseBody(o,a);if(o.status===200&&n.followRedirectOnOk||o.status===201&&n.followRedirectOnCreated){let l=await Fs(o,u);if(l)return this.request(l,{...n,method:"GET",body:void 0})}if(o.status===202&&n.pollStatusOnAccepted){let d=await Fs(o,u)??i.statusUrl;if(d)return this.pollStatus(d,n,i)}if(o.status>=400)throw new m(Et(u));return u}async parseBody(r,n){let i;if(r.headers.get("content-length")!=="0"){if(n)try{i=await r.json()}catch(o){throw console.error("Error parsing response",r.status,o),o}else i=await r.text();return i}}async fetchWithRetry(r,n){r.startsWith("http")||(r=W(this.baseUrl,r));let i=n?.maxRetries??this.maxRetries;for(let o=0;o<=i;o++)try{this.logLevel!=="none"&&this.logRequest(r,n);let s=await this.fetch(r,n);if(this.logLevel!=="none"&&this.logResponse(s),this.setCurrentRateLimit(s),o>=i||!Ud(s))return s;let a=this.getRetryDelay(o),u=n.maxRetryTime??this.maxRetryTime;if(a>u)return s;await Hr(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(r,n){if(console.log(`> ${n.method} ${r}`),this.logLevel==="verbose"&&n.headers){let i=n.headers;for(let o of Dt(Object.keys(i)))console.log(`> ${o}: ${i[o]}`)}}logResponse(r){console.log(`< ${r.status} ${r.statusText}`),this.logLevel==="verbose"&&r.headers&&r.headers.forEach((n,i)=>console.log(`< ${i}: ${n}`))}setCurrentRateLimit(r){if(!r?.headers||typeof r.headers.get!="function")return;let n=r.headers.get("ratelimit");n&&(this.currentRateLimits=n)}rateLimitStatus(){if(!this.currentRateLimits)return[];let r=this.currentRateLimits;return r.split(",").map(n=>{let i=n.split(";").map(d=>d.trim());if(i.length!==3)throw new Error("Could not parse RateLimit header: "+r);let o=i[0].substring(1,i[0].length-1),s=i.find(d=>d.startsWith("r="))?.substring(2),a=s?Number.parseInt(s,10):Number.NaN,u=i.find(d=>d.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: "+r);return{name:o,remainingUnits:a,secondsUntilReset:l,resetsAfter:Math.ceil((Date.now()+1e3*l)/1e3)}})}getRetryDelay(r){let n=this.rateLimitStatus(),i=500*Math.pow(1.5,r);for(let o of n)o.remainingUnits||(i=Math.max(i,o.secondsUntilReset*1e3));return i}async pollStatus(r,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=r,i.pollCount=1;else{let s=n.pollStatusPeriod??1e3;await Hr(s,{signal:n.signal}),i.pollCount++}return this.request(r,o,i)}async executeAutoBatch(){if(this.autoBatchQueue===void 0)return;let r=[...this.autoBatchQueue];if(this.autoBatchQueue.length=0,this.autoBatchTimerId=void 0,r.length===1){let o=r[0];try{o.options.method=o.method,o.resolve(await this.request(W(this.fhirBaseUrl,o.url),o.options))}catch(s){o.reject(new m(Et(s)))}return}let n={resourceType:"Bundle",type:"batch",entry:r.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<r.length;o++){let s=r[o],a=i.entry?.[o];a?.response?.outcome&&!Ar(a.response.outcome)?s.reject(new m(a.response.outcome)):s.resolve(a?.resource)}}addFetchOptionsDefaults(r){Object.entries(this.defaultHeaders).forEach(([n,i])=>{this.setRequestHeader(r,n,i)}),this.setRequestHeader(r,"Accept",Bs,!0),this.options.extendedMode!==!1&&this.setRequestHeader(r,"X-Medplum","extended"),r.body&&this.setRequestHeader(r,"Content-Type",V.FHIR_JSON,!0),this.accessToken?this.setRequestHeader(r,"Authorization","Bearer "+this.accessToken):this.basicAuth&&this.setRequestHeader(r,"Authorization","Basic "+this.basicAuth),r.credentials||(r.credentials="include")}setRequestContentType(r,n){this.setRequestHeader(r,"Content-Type",n)}getRequestHeader(r,n){let i=r?.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(r,n,i,o=!1){let s=r.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):r.headers={[n]:i}}setRequestBody(r,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")?r.body=n:typeof n=="object"&&n!==null&&(typeof n.getReader=="function"||typeof n.pipe=="function"&&typeof n.on=="function")?(r.body=n,r.duplex="half"):n&&(r.body=JSON.stringify(n))}async handleUnauthenticated(r,n,i){let o=i.authAttempt??0,s=o+1<Dd?this.refresh(void 0,!0):void 0;if(s)return await s,this.request(r,n,{...i,authAttempt:o+1});throw this.clear(),this.onUnauthenticated?.(),new m(We)}async startPkce(){let r=Kr();this.storage.setString("pkceState",r);let n=Kr().slice(0,128);this.storage.setString("codeVerifier",n);try{let i=await Ci(n);return{codeChallengeMethod:"S256",codeChallenge:si(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(r){let n=await this.ensureCodeChallenge(r??{}),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??he.getOrigin()),i.searchParams.set("code_challenge_method",n.codeChallengeMethod),i.searchParams.set("code_challenge",n.codeChallenge),i.searchParams.set("scope",n.scope??"openid profile"),he.assign(i.toString())}processCode(r,n){let i={grant_type:tt.AuthorizationCode,code:r,client_id:n?.clientId??this.clientId??"",redirect_uri:n?.redirectUri??he.getOrigin()},o=this.storage.getString("codeVerifier");return o&&(i.code_verifier=o),this.fetchTokens(i)}refreshIfExpired(r){return!this.refreshPromise&&this.accessTokenExpires!==void 0&&!this.isAuthenticated(r)&&this.refresh(r),this.refreshPromise??Promise.resolve()}refresh(r,n=!1){if(this.refreshPromise)return this.refreshPromise;if(!(!this.refreshToken&&!(this.clientId&&this.clientSecret)))return this.refreshPromise=this.runRefreshWithLock(r,n),this.refreshPromise}async runRefreshWithLock(r,n=!1){let i=()=>{let a=this.accessToken,u=this.getActiveLogin();u?.accessToken&&u.accessToken!==this.accessToken&&this.setAccessToken(u.accessToken,u.refreshToken);let l=this.accessToken!==a;return this.isAuthenticated(r)&&(!n||l)?Promise.resolve(this.getProfile()):this.refreshToken?this.fetchTokens({grant_type:tt.RefreshToken,client_id:this.clientId??"",refresh_token:this.refreshToken}):this.clientId&&this.clientSecret?this.startClientLogin(this.clientId,this.clientSecret):Promise.resolve(void 0)},o=typeof navigator<"u"?navigator.locks:void 0;if(!o?.request)return i();let s=`medplum-refresh:${this.storage.makeKey("activeLogin")}`;return o.request(s,i)}async startClientLogin(r,n){return this.clientId=r,this.clientSecret=n,this.fetchTokens({grant_type:tt.ClientCredentials,client_id:r,client_secret:n})}async startJwtBearerLogin(r,n,i){return this.clientId=r,this.fetchTokens({grant_type:tt.JwtBearer,client_id:r,assertion:n,scope:i})}async startJwtAssertionLogin(r){return this.fetchTokens({grant_type:tt.ClientCredentials,client_assertion_type:Ws.JwtBearer,client_assertion:r})}setBasicAuth(r,n){this.clientId=r,this.clientSecret=n,this.basicAuth=er(r+":"+n)}setLogLevel(r){this.logLevel=r,this.options.verbose=r==="verbose"}getLogLevel(){return this.logLevel}setVerbose(r){this.logLevel=r?"verbose":"none",this.options.verbose=r}async fhircastSubscribe(r,n){if(!(typeof r=="string"&&r!==""))throw new m(T("Invalid topic provided. Topic must be a valid string."));if(!(typeof n=="object"&&Array.isArray(n)&&n.length>0))throw new m(T("Invalid events provided. Events must be an array of event names containing at least one event."));let i={channelType:"websocket",mode:"subscribe",topic:r,events:n},s=(await this.post(this.fhircastHubUrl,tn(i),V.FORM_URL_ENCODED))["hub.channel.endpoint"];if(!s)throw new Error("Invalid response!");return i.endpoint=s,i}async fhircastUnsubscribe(r){if(!nr(r))throw new m(T("Invalid topic or subscriptionRequest. SubscriptionRequest must be an object."));if(!(r.endpoint&&typeof r.endpoint=="string"&&r.endpoint.startsWith("ws")))throw new m(T("Provided subscription request must have an endpoint in order to unsubscribe."));r.mode="unsubscribe",await this.post(this.fhircastHubUrl,tn(r),V.FORM_URL_ENCODED)}fhircastConnect(r,n){return new rr(r,n)}async fhircastPublish(r,n,i,o){return Pi(n)?this.post(this.fhircastHubUrl,rn(r,n,i,o),V.JSON):(Ai(n),this.post(this.fhircastHubUrl,rn(r,n,i),V.JSON))}async fhircastGetContext(r){return this.get(`${this.fhircastHubUrl}/${r}`,{cache:"no-cache"})}async invite(r,n){return this.post("admin/projects/"+r+"/invite",n)}async handleTokenError(r){try{let n=await r.json();throw ot(n)?new m(n):n.error_description?new m(w(n.error_description)):new Error(JSON.stringify(n))}catch(n){throw n instanceof m?(n.message=`Failed to fetch tokens: ${n.message}`,n):new m(w("Failed to fetch tokens"),{cause:n})}}async fetchTokens(r){let n=new URLSearchParams(r),i={...this.defaultHeaders,"Content-Type":V.FORM_URL_ENCODED};this.basicAuth&&(i.Authorization=`Basic ${this.basicAuth}`),this.credentialsInHeader&&(n.delete("client_id"),n.delete("client_secret"),!this.basicAuth&&r.client_id&&r.client_secret&&(i.Authorization=`Basic ${er(r.client_id+":"+r.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(r){let n=r.access_token;if(Oi(n)){let i=ir(n);if(Date.now()>=i.exp*1e3)throw this.clearActiveLogin(),new m(Dn);if(i.cid){if(i.cid!==this.clientId)throw this.clearActiveLogin(),new m(Cr)}else if(this.clientId&&i.client_id!==this.clientId)throw this.clearActiveLogin(),new m(Cr)}return this.setActiveLogin({accessToken:n,refreshToken:r.refresh_token,project:r.project,profile:r.profile})}checkSessionDetailsMatchLogin(r){return this.sessionDetails&&r?r.profile?.reference?.endsWith(this.sessionDetails.profile.id)??!1:!0}setupStorageListener(){try{window.addEventListener("storage",r=>{if(r.key===null)he.reload();else if(r.key===this.storage.makeKey("activeLogin")){let n=r.oldValue?JSON.parse(r.oldValue):void 0,i=r.newValue?JSON.parse(r.newValue):void 0;n?.profile.reference!==i?.profile.reference||!this.checkSessionDetailsMatchLogin(i)?he.reload():i?this.setAccessToken(i.accessToken,i.refreshToken):this.clear()}})}catch{}}getSubscriptionManager(){return this.subscriptionManager||(this.subscriptionManager=new ar(this,li(this.baseUrl,"/ws/subscriptions-r4"))),this.subscriptionManager}subscribeToCriteria(r,n){return this.getSubscriptionManager().addCriteria(r,n)}unsubscribeFromCriteria(r,n){this.subscriptionManager&&this.subscriptionManager.removeCriteria(r,n)}getMasterSubscriptionEmitter(){return this.getSubscriptionManager().getMasterEmitter()}};function Ld(){if(!globalThis.fetch)throw new Error("Fetch not available in this environment");return globalThis.fetch.bind(globalThis)}async function Fs(t,e){let r=t.headers.get("content-location");if(r)return r;let n=t.headers.get("location");if(n)return n;if(ot(e)&&e.issue?.[0]?.diagnostics)return e.issue[0].diagnostics}function Us(t){let e=t.entry?.map(r=>r.resource)??[];return Object.assign(e,{bundle:t})}function Nd(t){return C(t)&&"data"in t&&"contentType"in t}function Vi(t,e,r,n){return Nd(t)?t:{data:t,filename:e,contentType:r,onProgress:n}}function Fd(t){return C(t)&&"docDefinition"in t}function $s(t,e,r,n){return Fd(t)?t:{docDefinition:t,filename:e,tableLayouts:r,fonts:n}}function Ud(t){return t.status===429||t.status>=500}var Bd={aws_ssm_parameter_store:"aws_ssm_parameter_store"};function qd(t,e,r){let n=new sn;Array.isArray(t)||(t=t.entry?.map(i=>i.resource)??[]);for(let i of t)n.addObservation(i);return n.summarize(e,r)}var sn=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(!Wd(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(..._i(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,r){if(!this.code)throw new Error("Code is required for data points");let n=r(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:$d(this.dataPoints,this.sampling)}}]}}};function Wd(t,e){return!!t.coding?.some(r=>e.coding?.some(n=>r.system===n.system&&r.code===n.code))}function _i(t){return t.data?.split(" ").map(e=>Number.parseFloat(e)*(t.factor??1)+(t.origin.value??0))??[]}function $d(t,e){if(t.length)return t.map(r=>(r-(e?.origin.value??0))/(e?.factor??1)).join(" ")}function jd(t){let e=[],r=t.effectiveInstant??t.effectiveDateTime??t.effectivePeriod?.start,n=r?Date.parse(r).valueOf():0;t.valueSampledData&&e.push(...js(t.valueSampledData,n,t));for(let i of t.component??v)i.valueSampledData&&e.push(...js(i.valueSampledData,n,{...t,...i}));return e}function js(t,e,r){let n=[],i=_i(t),o=I(r);for(let s=0;s<i.length;s++){let a=i[s],u=e+Math.floor(s/t.dimensions)*t.period;n.push({...r,id:void 0,effectiveInstant:void 0,effectivePeriod:void 0,effectiveTiming:void 0,effectiveDateTime:u?new Date(u).toISOString():void 0,valueQuantity:{...t.origin,value:a},valueSampledData:void 0,component:void 0,derivedFrom:o?[...r.derivedFrom??[],{reference:o}]:r.derivedFrom})}return n}function cn({parentContext:t,path:e,elements:r,profileUrl:n,debugMode:i,accessPolicyResource:o}){if(e===t?.path)return;i??=t?.debugMode??!1,o??=t?.accessPolicyResource;let s=Hd(e,r,t,!!i),a=Je(e,".",2)[1];s=Gd(s,o,a),s=Qd(s,o,a);let u=Object.create(null);for(let[d,f]of Object.entries(s))u[e+"."+d]=f;let l;if(t&&!t.isDefaultContext)l=t.getExtendedProps;else{let d=Object.create(null);l=f=>{let h=Je(f,".",2)[1];if(h){if(!d[h]){let b=an(h,o?.hiddenFields);d[h]={hidden:b,readonly:b||an(h,o?.readonlyFields)}}return d[h]}}}return{path:e,elements:s,elementsByPath:u,profileUrl:n??t?.profileUrl,debugMode:i,getExtendedProps:l,accessPolicyResource:o}}function Hd(t,e,r,n){let i=Object.create(null);if(r)for(let[s,a]of Object.entries(r.elementsByPath)){let u=Se(t,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 Gd(t,e,r){if(!e?.hiddenFields?.length)return t;let n=r?r+".":"";return Object.fromEntries(Object.entries(t).filter(([i])=>!an(n+i,e.hiddenFields)))}function Qd(t,e,r){if(!e?.readonlyFields?.length)return t;let n=Object.create(null),i=r?r+".":"";for(let[o,s]of Object.entries(t))an(i+o,e.readonlyFields)?n[o]={...s,readonly:!0}:n[o]=s;return n}function an(t,e){if(!e?.length)return!1;let r=t.split(".");for(let n=1;n<=r.length;n++){let i=r.slice(0,n).join(".");if(e.includes(i))return!0}return!1}function Li(t){return t.type!==void 0&&t.type.length>0}function zd(t,e,r,n){let i=je(t,e.path,{profileUrl:n});if(i){let o=r.typeSchema?.elements??r.elements;return i.some(s=>Lr(s,e,r,o))??!1}return console.assert(!1,"getNestedProperty[%s] in isDiscriminatorComponentMatch missed",e.path),!1}function Ni(t,e,r,n){if(t)for(let i of e){let o={value:t,type:i.typeSchema?.type??i.type?.[0].code};if(r.every(s=>zd(o,s,i,i.typeSchema?.url??n)))return i.name}}var ur=class{constructor(e,r,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=cn({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=r}get elementsContext(){return this.elementsContextStack.at(-1)}crawlElement(e,r,n){this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema);let i=Object.fromEntries(Object.entries(this.elementsContext.elements).filter(([o])=>o.startsWith(r)));this.crawlElementsImpl(i,n),this.visitor.onExitSchema&&this.visitor.onExitSchema(this.rootSchema)}crawlSlice(e,r,n){let i=this.prepareSlices(n.slices,n);if(!le(i.slices))throw new Error(`cannot crawl slice ${r.name} since it has no type information`);this.visitor.onEnterSchema&&this.visitor.onEnterSchema(this.rootSchema),this.sliceAllowList=[r],this.crawlSliceImpl(i.slices[0],r.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,r){let n=Jd(e);for(let i of n)this.crawlElementNode(i,r)}crawlElementNode(e,r){let n=r+"."+e.key;this.visitor.onEnterElement&&this.visitor.onEnterElement(n,e.element,this.elementsContext);for(let i of e.children)this.crawlElementNode(i,r);le(e.element?.slicing?.slices)&&this.crawlSlicingImpl(e.element.slicing,n),this.visitor.onExitElement&&this.visitor.onExitElement(n,e.element,this.elementsContext)}prepareSlices(e,r){let n=[];for(let o of e){if(!Li(o))continue;let s=o.type.find(a=>le(a.profile))?.profile?.[0];if(le(s)){let a=jn(s);a&&(o.typeSchema=a)}n.push(o)}return{...r,slices:n}}crawlSlicingImpl(e,r){let n=this.prepareSlices(e.slices,e);for(let i of n.slices)(this.sliceAllowList===void 0||this.sliceAllowList.includes(i))&&this.crawlSliceImpl(i,r,n)}crawlSliceImpl(e,r,n){let i=e.typeSchema;i&&this.visitor.onEnterSchema&&this.visitor.onEnterSchema(i),this.visitor.onEnterSlice&&this.visitor.onEnterSlice(r,e,n);let o,s=i?.elements??e.elements;le(s)&&(o=cn({path:r,parentContext:this.elementsContext,elements:s})),o&&this.elementsContextStack.push(o),this.crawlElementsImpl(s,r),o&&this.elementsContextStack.pop(),this.visitor.onExitSlice&&this.visitor.onExitSlice(r,e,n),i&&this.visitor.onExitSchema&&this.visitor.onExitSchema(i)}};function Jd(t){let e=[];function r(o,s){return s.startsWith(o+".")}function n(o,s){for(let a of o.children)if(r(a.key,s.key)){n(a,s);return}o.children.push(s)}let i=Object.entries(t);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(r(l.key,o)){n(l,a),u=!0;break}u||e.push(a)}return e}var un="__sliceName";function Kd(t,e){let r=new ln(t,t.resourceType,"resource");return new ur(e,r).crawlResource(),r.getDefaultValue()}function Yd(t,e,r){for(let[n,i]of Object.entries(e)){if(r===void 0||r===n){lr(t,n,i,e);continue}let o=Se(r,n);o!==void 0&&lr(t,o,i,e)}return t}function Xd(t,e,r,n){let i=new ln([{[un]:e.name}],e.path,"element");return new ur(n,i).crawlSlice(t,e,r),i.getDefaultValue()[0]}var ln=class{constructor(e,r,n){c(this,"rootValue");c(this,"schemaStack");c(this,"valueStack");this.schemaStack=[],this.valueStack=[],this.rootValue=de(e),this.valueStack.splice(0,this.valueStack.length,{type:n,path:r,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,r,n){let i=this.value.values,o=this.value.path,s=Se(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=Se(n.path,o),d=Array.isArray(u)?u:[u];for(let f of d){Zd(f,s,r,n.elements,l),lr(f,s,r,n.elements);let h=Ui(f,s,n.elements,l);h!==void 0&&a.push(h)}}this.valueStack.push({type:"element",path:e,values:a})}onExitElement(e,r,n){if(!this.valueStack.pop())throw new Error("Expected value context to exist when exiting element");let o=Se(this.value.path,e);if(o===void 0)throw new Error(`Expected ${e} to be prefixed by ${this.value.path}`);let s=Se(n.path,this.value.path);for(let a of this.value.values){let u=Ui(a,o,n.elements,s);if(Array.isArray(u))for(let l=u.length-1;l>=0;l--){let d=u[l];le(d)||u.splice(l,1)}O(u)&&Fi(a,void 0,o,r)}}onEnterSlice(e,r,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,r,n);o.push(u)}this.valueStack.push({type:"slice",path:e,values:o})}getMatchingSliceValues(e,r,n){let i=[];for(let o of e)(o[un]??Ni(o,[r],n.discriminator,this.schema.url))===r.name&&i.push(o);for(let o=i.length;o<r.min;o++)if(jr(r.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 r of e.values)for(let n=r.length-1;n>=0;n--){let i=r[n];un in i&&delete i[un]}}getDefaultValue(){return this.rootValue}};function Zd(t,e,r,n,i){let o=Ui(t,e,n,i);r.min>0&&o===void 0&&jr(r.type[0].code)&&(r.isArray?Fi(t,[Object.create(null)],e,r):Fi(t,Object.create(null),e,r))}function Fi(t,e,r,n){if(r.includes("."))throw new Error("key cannot be nested");let i=r;if(r.includes("[x]")){let o=n.type[0].code;i=r.replace("[x]",U(o))}e===void 0?delete t[i]:t[i]=e}function Ui(t,e,r,n){let i=e.split("."),o=t,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("."),f=r[l].type[0].code;u=u.replace("[x]",U(f))}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 lr(t,e,r,n){if(!(r.fixed||r.pattern))return t;if(Array.isArray(t))return t.map(a=>lr(a,e,r,n));t==null&&(t=Object.create(null));let i=t,o=e.split("."),s=i;for(let a=0;a<o.length;a++){let u=o[a];if(u.includes("[x]")){let d=n[o.slice(0,a+1).join(".")].type[0].code;u=u.replace("[x]",U(d))}if(a===o.length-1){let l=Array.isArray(s)?s:[s];for(let d of l)r.fixed?d[u]??=r.fixed.value:r.pattern&&(d[u]=Hs(d[u],r.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 Hs(t,e){if(Array.isArray(e)&&(Array.isArray(t)||t===void 0))return(t?.length??0)>0?t:de(e);if(C(e)&&(C(t)&&!Array.isArray(t)||t===void 0)){let r=de(t)??Object.create(null);for(let n of Object.keys(e))r[n]=Hs(r[n],e[n]);return r}return t}function Bi(t,e){if(!t.group)throw new m(w("ConceptMap does not specify a mapping group","ConceptMap.group"));let r=Gs(e),n=ep(r,e.targetsystem?t.group.filter(o=>o.target===e.targetsystem):t.group),i=n.length>0;return{result:i,match:i?n:void 0}}function Gs(t){let e=Object.create(null);if(t.code&&!t.coding&&!t.codeableConcept){if(!t.system)throw new m(w("System parameter must be provided with code"));e[t.system]=[t.code]}else if(t.coding&&!t.code&&!t.codeableConcept)t.coding.code&&(e[t.coding.system??""]=[t.coding.code]);else if(t.codeableConcept&&!t.code&&!t.coding)for(let{system:r,code:n}of t.codeableConcept.coding??v)n&&(e[r??""]=re(e[r??""],n));else throw t.code||t.coding||t.codeableConcept?new m(w("Ambiguous input: multiple source codings provided")):new m(w("Source Coding (system + code) must be specified"));return e}function ep(t,e){let r=[];for(let[n,i]of Object.entries(t))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=tp(i,o)),s&&r.push(...s)}return r}function tp(t,e){switch(e.unmapped?.mode){case"provided":return t.map(r=>({equivalence:"equal",concept:{system:e.target,code:r}}));case"fixed":return[{equivalence:"equivalent",concept:{system:e.target,code:e.unmapped.code,display:e.unmapped.display}}];default:return}}var rp=[...Yt,"->","<<",">>","=="];function Qs(t){return new Pe(t,Kt,rp).tokenize()}var np={"-":"disjoint","==":"equal"},qi=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 r=this.parser.consumeAndParse(S.As);r instanceof oe?(e.transform=r.name,e.parameter=r.args?.map(zs)):r instanceof G||r instanceof F?(e.transform="copy",e.parameter=[zs(r)]):(e.transform="evaluate",e.parameter=[{valueString:r.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(r=>r.name)}]}parseConceptMap(){this.parser.consume("Symbol","conceptmap");let e={resourceType:"ConceptMap",status:"active",url:"#"+this.parser.consume("String").value};this.parser.consume("{");let r={},n=this.parser.peek()?.value;for(;n!=="}";)n==="prefix"?this.parseConceptMapPrefix(r):this.parseConceptMapRule(e,r),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 r=this.parser.consume().value;this.parser.consume("=");let n=this.parser.consume().value;e[r]=n}parseConceptMapRule(e,r){let n=this.parser.consume().value,i=r[n];this.parser.consume(":");let o=this.parser.consume().value,s=np[this.parser.consume().value],a=this.parser.consume().value,u=r[a];this.parser.consume(":");let l=this.parser.consume().value,d=e?.group?.find(f=>f.source===i&&f.target===u);d||(d={source:i,target:u,element:[]},e.group||(e.group=[]),e.group.push(d)),d.element||(d.element=[]),d.element.push({code:o,target:[{code:l,equivalence:s}]})}};function zs(t){if(t instanceof F)return{valueId:t.name};if(t instanceof G)return ip(t);throw new Error(`Unknown parameter atom type: ${t.constructor.name} (${t.toString()})`)}function ip(t){switch(t.value.type){case"boolean":return{valueBoolean:t.value.value};case"decimal":return{valueDecimal:t.value.value};case"integer":return{valueInteger:t.value.value};case"dateTime":case"string":return{valueString:t.value.value};default:throw new Error("Unknown target literal type: "+t.value.type)}}var op=pt().registerInfix("->",{precedence:S.Arrow}).registerInfix(";",{precedence:S.Semicolon});function sp(t){let e=op.construct(Qs(t));return e.removeComments(),new qi(e).parse()}var dn=class{constructor(e=[]){c(this,"resources");this.resources=e}get(e,r){let n=[];for(let i of this.resources)i.resourceType===e&&i.url&&this.matchesUrl(i.url,r)&&n.push(i);return n}matchesUrl(e,r){if(r.includes("*")){let n=r.split("*");return e.startsWith(n[0])&&e.endsWith(n[1])}else return e===r}};function ap(t,e,r=new dn){return cp({root:t,transformMaps:r},t,e)}function cp(t,e,r){return up(t,e),Ks(t,e),$i(t,e.group[0],r)}function up(t,e){let r=fn(t);if(r&&e.import)for(let n of e.import){let i=r.get("StructureMap",n);for(let o of i)Ks(t,o)}}function Ks(t,e){let r=fn(t);if(r&&e.contained)for(let n of e.contained)(n.resourceType==="StructureMap"||n.resourceType==="ConceptMap")&&r.resources.push(n);for(let n of e.group??v)pn(t,n.name,{type:"StructureMapGroup",value:n})}function $i(t,e,r){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(r.length<n.length)throw new Error(`Not enough arguments (got ${r.length}, min ${n.length})`);if(r.length>n.length+i.length)throw new Error(`Too many arguments (got ${r.length}, max ${n.length+i.length})`);let o={},s=[],a=0;for(let l of n)dr(o,l.name,r[a++]);for(let l of i){let d=r[a++]??{type:l.type??"BackboneElement",value:{}};dr(o,l.name,d),s.push(d)}let u={root:t.root,parent:t,variables:o};for(let l of e.rule??v)Ys(u,l);return s}function Ys(t,e){e.source&&Xs(t,e,0)}function Xs(t,e,r){let n=e.source[r];for(let i of fp(t,n))pn(t,"_",i),n.variable&&pn(t,n.variable,i),r<e.source.length-1?Xs(t,e,r+1):lp(t,e)}function lp(t,e){if(!dp(t,e)){for(let r of e.target??v)Zs(t,r);for(let r of e.rule??v)Ys(t,r);for(let r of e.dependent??v)Ep(t,r)}}function dp(t,e){if(e.target?.length!==1||e.target[0].transform||e.rule||e.dependent)return!1;let r=Fe(t,"_");if(Array.isArray(r)&&(r=r[0]),!r)return!1;let n=pp(t,r);if(!n)return Zs(t,{...e.target[0],transform:"copy",parameter:[{valueId:"_"}]}),!0;let i=e.target[0],o=Fe(t,i.context),s=o.value[i.element],a=ta(o,i.element)||Array.isArray(s),u={root:t.root,parent:t,variables:{}},l=$i(u,n,[r]);return ea(t,i,o,l,a,s),!0}function pp(t,e){let r=t;for(;r;){if(r.variables){for(let n of Object.values(r.variables))for(let i of Wi(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}}r=r.parent}}function fp(t,e){let r=Fe(t,e.context);if(!r)return[];let n=e.element;if(!n)return[r];let i=k(n,[r]);if(!i||i.length===0)return[];if(e.condition&&!Js(r,{[e.variable]:i[0]},e.condition))return[];if(e.check&&!Js(r,{[e.variable]:i[0]},e.check))throw new Error("Check failed: "+e.check);return e.listMode&&(i=mp(e,i)),i}function Js(t,e,r){return j(k(r,[t],e))}function mp(t,e){switch(t.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 Zs(t,e){let r=Fe(t,e.context);if(!r)throw new Error("Target not found: "+e.context);let n=r.value[e.element],i,o=ta(r,e.element)||Array.isArray(n);if(e.transform)switch(e.transform){case"append":i=hp(t,e);break;case"cast":i=gp(t,e);break;case"cc":i=yp(t,e);break;case"copy":i=xp(t,e);break;case"create":i=vp(t,e);break;case"evaluate":i=Tp(t,e);break;case"translate":i=Sp(t,e);break;case"truncate":i=bp(t,e);break;case"uuid":i=[{type:"string",value:se()}];break;default:throw new Error(`Unsupported transform: ${e.transform}`)}else{let s=ra(r,e.element)?.type,a=s?.length===1?s[0].code:void 0;o||n===void 0?i=[a?{type:a,value:{}}:E({})]:i=[a?{type:a,value:n}:E(n)]}ea(t,e,r,i,o,n)}function ea(t,e,r,n,i,o){if(n.length!==0){if(i){o||(o=[],dr(r.value,e.element,o));for(let s of n)o.push(s.value)}else dr(r.value,e.element,n[0].value);e.variable&&pn(t,e.variable,Rp(n))}}function ta(t,e){return ra(t,e)?.isArray}function ra(t,e){return Me(t.type)?.elements?.[e]}function hp(t,e){let r=Q(t,e.parameter?.[0])?.[0]?.value,n=Q(t,e.parameter?.[1])?.[0]?.value;return[{type:"string",value:(r??"").toString()+(n??"").toString()}]}function gp(t,e){let r=Q(t,e.parameter?.[0])?.[0];return Q(t,e.parameter?.[1])?.[0]?.value==="string"?[{type:"string",value:r?.value?.toString()}]:[r]}function yp(t,e){let r=e.parameter;if(r.length===2){let n=Q(t,r[0])?.[0]?.value,i=Q(t,r[1])?.[0]?.value;return[{type:"CodeableConcept",value:{coding:[{system:n,code:i}]}}]}else return[{type:"CodeableConcept",value:{text:Q(t,r[0])?.[0]?.value}}]}function xp(t,e){return e.parameter.flatMap(r=>Q(t,r))}function vp(t,e){let r={};return e.parameter&&e.parameter.length>0&&(r.resourceType=Q(t,e.parameter?.[0])?.[0]?.value),[E(r)]}function Tp(t,e){let n=Q(t,e.parameter?.[0])[0].value;return k(n,[],na(t))}function Sp(t,e){let r=e.parameter.flatMap(u=>Q(t,u)),n=r[0].value,i=r[1].value,s=fn(t)?.get("ConceptMap",i)[0];if(!s)throw new Error("ConceptMap not found: "+i);let a=Bi(s,{system:s.group?.[0]?.source,code:n});return[E(a.match?.[0]?.concept?.code)]}function bp(t,e){let r=Q(t,e.parameter?.[0])?.[0],n=Q(t,e.parameter?.[1])?.[0]?.value;return r.type==="string"?[{type:"string",value:r.value.substring(0,n)}]:[r]}function Ep(t,e){let r=Fe(t,e.name);if(!r)throw new Error("Dependent group not found: "+e.name);let n=e.variable,i=[];for(let s of n){let a=Fe(t,s);if(!a)throw new Error("Dependent variable not found: "+s);i.push(a)}let o={root:t.root,parent:t,variables:{}};$i(o,r.value,i)}function fn(t){if(t.transformMaps)return t.transformMaps;if(t.parent)return fn(t.parent)}function Q(t,e){let n=_({type:"StructureMapGroupRuleTargetParameter",value:e},"value");if(!n)throw new Error("Missing target parameter: "+JSON.stringify(e));if(n=Wi(n),n.length===1&&n[0].type==="id"){let i=Fe(t,n[0].value);if(!i)throw new Error("Variable not found: "+n[0].value);return Wi(i)}return n}function Fe(t,e){let r=t.variables?.[e];if(r)return r;if(t.parent)return Fe(t.parent,e)}function na(t,e={}){if(t.parent&&na(t.parent,e),t.variables)for(let[r,n]of Object.entries(t.variables))e[r]=n,e["%"+r]=n;return e}function pn(t,e,r){t.variables||(t.variables={}),dr(t.variables,e,r)}function dr(t,e,r){if(e==="__proto__"||e==="constructor"||e==="prototype")throw new Error("Invalid key: "+e);t[e]=r}function Wi(t){return Array.isArray(t)?t:[t]}function Rp(t){return t.length===1?t[0]:t}var rt=Object.prototype.hasOwnProperty;function pr(t){return t===void 0?"undefined":t===null?"null":Array.isArray(t)?"array":typeof t}function Cp(t){return t&&typeof t=="object"}function xt(t){if(!Cp(t))return t;if(t.constructor===Array){let r=t.length,n=new Array(r);for(let i=0;i<r;i++)n[i]=xt(t[i]);return n}if(t.constructor===Date)return new Date(+t);let e={};for(let r in t)rt.call(t,r)&&(e[r]=xt(t[r]));return e}function Gi({op:t}){return t==="remove"||t==="replace"||t==="copy"||t==="move"}function Hi(t,e){let r=[];for(let n in t)rt.call(t,n)&&t[n]!==void 0&&!(rt.call(e,n)&&e[n]!==void 0)&&r.push(n);return r}function Pp(t){let e=t.length,r={};for(let n=0;n<e;n++){let i=t[n];for(let o in i)rt.call(i,o)&&i[o]!==void 0&&(r[o]=(r[o]||0)+1)}for(let n in r)r[n]<e&&delete r[n];return Object.keys(r)}function Ap(t,e){let r=[];for(let n in t)rt.call(t,n)&&t[n]!==void 0&&rt.call(e,n)&&e[n]!==void 0&&r.push(n);return r}function wp(t){return t.op==="add"}function Op(t){return t.op==="remove"}function ji(t,e){return{operations:t.operations.concat(e),cost:t.cost+1}}function ia(t,e,r,n=Ae){let i=Math.max(t.length,e.length),o=new Map([[0,{operations:[],cost:0}]]);function s(f,h){let b=f*i+h,P=o.get(b);if(P===void 0){if(f>0&&h>0&&!n(t[f-1],e[h-1],r.add(String(f-1))).length)P=s(f-1,h-1);else{let Oe=[];if(f>0){let Be=s(f-1,h),qe={op:"remove",index:f-1};Oe.push(ji(Be,qe))}if(h>0){let Be=s(f,h-1),qe={op:"add",index:f-1,value:e[h-1]};Oe.push(ji(Be,qe))}if(f>0&&h>0){let Be=s(f-1,h-1),qe={op:"replace",index:f-1,original:t[f-1],value:e[h-1]};Oe.push(ji(Be,qe))}P=Oe.sort((Be,qe)=>Be.cost-qe.cost)[0]}o.set(b,P)}return P}let a=isNaN(t.length)||t.length<=0?0:t.length,u=isNaN(e.length)||e.length<=0?0:e.length,l=s(a,u).operations,[d]=l.reduce(([f,h],b)=>{if(wp(b)){let P=b.index+1+h,Oe=P<a+h?String(P):"-",go={op:b.op,path:r.add(Oe).toString(),value:b.value};return[f.concat(go),h+1]}else if(Op(b)){let P={op:b.op,path:r.add(String(b.index+h)).toString()};return[f.concat(P),h-1]}else{let P=r.add(String(b.index+h)),Oe=n(b.original,b.value,P);return[f.concat(...Oe),h]}},[[],0]);return d}function oa(t,e,r,n=Ae){let i=[];return Hi(t,e).forEach(o=>{i.push({op:"remove",path:r.add(o).toString()})}),Hi(e,t).forEach(o=>{i.push({op:"add",path:r.add(o).toString(),value:e[o]})}),Ap(t,e).forEach(o=>{i.push(...n(t[o],e[o],r.add(o)))}),i}function Ae(t,e,r,n=Ae){if(t===e)return[];let i=pr(t),o=pr(e);return i==="array"&&o==="array"?ia(t,e,r,n):i==="object"&&o==="object"?oa(t,e,r,n):[{op:"replace",path:r.toString(),value:e}]}function sa(t){return t.replace(/~1/g,"/").replace(/~0/g,"~")}function aa(t){return t.replace(/~/g,"~0").replace(/\//g,"~1")}var M=class t{constructor(e=[""]){c(this,"tokens");this.tokens=e}static fromJSON(e){let r=e.split("/").map(sa);if(r[0]!=="")throw new Error(`Invalid JSON Pointer: ${e}`);return new t(r)}toString(){return this.tokens.map(aa).join("/")}evaluate(e){let r=null,n="",i=e;for(let o=1,s=this.tokens.length;o<s;o++){if(r=i,n=this.tokens[o],n==="__proto__"||n==="constructor"||n==="prototype")throw new Error("Invalid path: "+this.toString());if(r!=null&&(typeof r=="object"||typeof r=="function")&&!Object.hasOwn(r,n)&&n in r)throw new Error("Invalid inherited key: "+n);i=r?.[n]}return{parent:r,key:n,value:i}}get(e){return this.evaluate(e).value}set(e,r){let n=this.evaluate(e);n.parent&&(n.parent[n.key]=r)}push(e){this.tokens.push(e)}add(e){let r=this.tokens.concat(String(e));return new t(r)}parent(){let e=this.tokens.length>1?this.tokens.slice(0,-1):[""];return new t(e)}};var z=class extends Error{constructor(r){super(`Value required at path: ${r}`);c(this,"path");this.path=r,this.name="MissingError"}},mn=class extends Error{constructor(r,n){super(`Test failed: ${r} != ${n}`);c(this,"actual");c(this,"expected");this.actual=r,this.expected=n,this.name="TestError"}};function Qi(t,e,r){if(Array.isArray(t))if(e==="-")t.push(r);else{let n=parseInt(e,10);t.splice(n,0,r)}else t[e]=r}function ca(t,e){if(Array.isArray(t)){let r=parseInt(e,10);t.splice(r,1)}else delete t[e]}function fr(t,e,r){let n=M.fromJSON(e.path);if(r?.implicitArrayCreation&&n.tokens[n.tokens.length-1]==="-"){let o=n.parent().evaluate(t);o.value===void 0&&pr(o.parent)==="object"&&(o.parent[o.key]=[])}let i=n.evaluate(t);return i.parent===void 0?new z(e.path):r?.implicitArrayCreation&&i.key==="-"&&!Array.isArray(i.parent)?new z(e.path):(Qi(i.parent,i.key,xt(e.value)),null)}function gn(t,e,r){let n=M.fromJSON(e.path).evaluate(t);return n.value===void 0?new z(e.path):(ca(n.parent,n.key),null)}function yn(t,e,r){let n=M.fromJSON(e.path).evaluate(t);if(n.parent===null)return new z(e.path);if(Array.isArray(n.parent)){if(parseInt(n.key,10)>=n.parent.length)return new z(e.path)}else if(n.value===void 0)return new z(e.path);return n.parent[n.key]=xt(e.value),null}function xn(t,e,r){let n=M.fromJSON(e.from).evaluate(t);if(n.value===void 0)return new z(e.from);let i=M.fromJSON(e.path).evaluate(t);return i.parent===void 0?new z(e.path):(ca(n.parent,n.key),Qi(i.parent,i.key,n.value),null)}function ua(t,e,r){let n=M.fromJSON(e.from).evaluate(t);if(n.value===void 0)return new z(e.from);let i=M.fromJSON(e.path).evaluate(t);return i.parent===void 0?new z(e.path):(Qi(i.parent,i.key,xt(n.value)),null)}function la(t,e,r){let n=M.fromJSON(e.path).evaluate(t);return Ae(n.value,e.value,new M).length?new mn(n.value,e.value):null}var hn=class extends Error{constructor(r){super(`Invalid operation: ${r.op}`);c(this,"operation");this.operation=r,this.name="InvalidOperationError"}};function zi(t,e,r){switch(e.op){case"add":return fr(t,e,r);case"remove":return gn(t,e,r);case"replace":return yn(t,e,r);case"move":return xn(t,e,r);case"copy":return ua(t,e,r);case"test":return la(t,e,r);default:return new hn(e)}}function Ip(t,e,r){return e.map(n=>zi(t,n,r))}function kp(t){function e(r,n,i){let o=t(r,n,i);return Array.isArray(o)?o:Ae(r,n,i,e)}return e}function Mp(t,e,r){let n=new M;return(r?kp(r):Ae)(t,e,n)}function da(t,e){let r=M.fromJSON(e).evaluate(t);if(r!==void 0)return{op:"test",path:e,value:r.value}}function Dp(t,e){let r=new Array;return e.filter(Gi).forEach(n=>{let i=da(t,n.path);if(i&&r.push(i),"from"in n){let o=da(t,n.from);o&&r.push(o)}}),r}var Vp=Object.freeze({implicitArrayCreation:!0});function _p(t){let e=[];for(let r of t.parameter??[]){if(r.name!=="operation")continue;let n={};for(let i of r.part??[])switch(i.name){case"type":n.type=i.valueCode;break;case"path":n.path=i.valueString;break;case"name":n.name=i.valueString;break;case"index":n.index=i.valueInteger;break;case"source":n.source=i.valueInteger;break;case"destination":n.destination=i.valueInteger;break;case"value":n.value=_({type:"ParametersParameter",value:i},"value");break}e.push(n)}return e}function Lp(t,e){for(let r of e){let n=k(r.path,[t]);switch(r.type){case"add":{let i=Ji(n,r);if(!C(i?.value))throw new Error(`Failed to resolve base object for add operation at path '${r.path}'`);if(mr(i,r),!r.name)throw new Error(`No name present for add operation at path '${r.path}'`);let o=M.fromJSON(He(i.path));o.push(r.name),hi(t.type,`${i.path}.${r.name}`)?.isArray&&o.push("-"),fr(t.value,{op:"add",path:o.toString(),value:r.value.value},Vp);break}case"replace":{let i=Ji(n,r);if(!i)throw new Error(`Failed to resolve target value for replace operation at path '${r.path}'`);mr(i,r),yn(t.value,{op:"replace",path:He(i.path),value:r.value.value});break}case"move":{let i=pa(n,r),o=M.fromJSON(He(i));xn(t.value,{op:"move",from:o.add(r.source.toString()).toString(),path:o.add(r.destination.toString()).toString()});break}case"insert":{if(typeof r.index!="number")throw new Error(`No index present for insert operation at path '${r.path}'`);let i=pa(n,r),o=M.fromJSON(He(i));o.push(r.index.toString()),fr(t.value,{op:"add",path:o.toString(),value:r.value.value});break}case"delete":{let i=Ji(n,r);i&&(mr(i,r),gn(t.value,{op:"remove",path:He(i.path)}))}}}}function mr(t,e){if(!("path"in t))throw new Error(`Cannot resolve pointer for value at path '${e.path}'`)}function Ji(t,e){if(t.length>1)throw new Error(`Resolved multiple base values for ${e.type} operation at path '${e.path}'`);return t[0]}var Np=/\[(?<index>\d+)\]$/;function Ki(t){let e=Np.exec(t)?.groups?.index;return e?Number.parseInt(e,10):-1}function pa(t,e){if(Ki(e.path)!==-1)throw new Error(`Failed to resolve base collection for ${e.type} operation at path '${e.path}'`);if(!t.length)throw new Error(`Failed to resolve base for ${e.type} operation at path '${e.path}'`);mr(t[0],e);let r=t[0].path;if(Ki(r)!==0)throw new Error(`Failed to resolve base collection for ${e.type} operation at path '${e.path}'`);let n=r.slice(0,r.lastIndexOf("["));for(let i=1;i<t.length;i++){let o=t[i];if(mr(o,e),!o.path.startsWith(n))throw new Error(`Cannot patch heterogeneous collection for ${e.type} operation at path '${e.path}'`);if(Ki(o.path)!==i)throw new Error(`Cannot patch misordered collection for ${e.type} operation at path '${e.path}'`)}if("index"in e&&!Yi(e.index,t))throw new Error(`Index out of bounds for ${e.type} operation: ${e.index}`);if("source"in e&&!Yi(e.source,t))throw new Error(`Source index out of bounds for ${e.type} operation: ${e.source}`);if("destination"in e&&!Yi(e.destination,t))throw new Error(`Destination index out of bounds for ${e.type} operation: ${e.destination}`);return n}function Yi(t,e){return t>=0&&t<=e.length}var Fp=" ".repeat(2),Xi=class{constructor(e=Fp,r=!0){c(this,"indent");c(this,"b");c(this,"indentCount");this.indent=e,this.b=[],this.indentCount=0,r&&(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 r=this.indent.repeat(this.indentCount)+e;if(r.length<160)this.b.push(r),this.b.push(`
|
|
47
47
|
`);else{let n=!0;for(let i of fa(r,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(`
|
|
@@ -50,8 +50,8 @@
|
|
|
50
50
|
|
|
51
51
|
`,`
|
|
52
52
|
|
|
53
|
-
`)}};function fa(t,e){let r=[],n=[],i=0;return t.split(" ").forEach(function(o){i+o.length>e&&(r.push(n.join(" ").trim()),n=[],i=0),i+=o.length+1,n.push(o)}),n.length>0&&r.push(n.join(" ").trim()),r}var Lp=[...Kt,"eq","ne","co"];function ma(t){return new Pe(t,Jt,Lp,{dateTimeLiterals:!0,symbolRegex:/[^\s\])]/}).tokenize()}var hr=class{constructor(e,r,n){c(this,"path");c(this,"operator");c(this,"value");this.path=e,this.operator=r,this.value=n}},gr=class{constructor(e){c(this,"child");this.child=e}},yr=class{constructor(e,r,n){c(this,"keyword");c(this,"left");c(this,"right");this.keyword=e,this.left=r,this.right=n}};var Np={eq:g.EXACT,ne:g.NOT_EQUALS,co:g.CONTAINS,sw:g.STARTS_WITH,ew:void 0,gt:g.GREATER_THAN,lt:g.LESS_THAN,ge:g.GREATER_THAN_OR_EQUALS,le:g.LESS_THAN_OR_EQUALS,ap:g.APPROXIMATELY,sa:g.STARTS_AFTER,eb:g.ENDS_BEFORE,pr:g.PRESENT,po:void 0,ss:void 0,sb:void 0,in:g.IN,ni:g.NOT_IN,re:g.EQUALS,identifier:g.IDENTIFIER};function Fp(t){let e=Np[t];if(!e)throw new m(w("Invalid operator: "+t));return e}var Zi=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 gr(this.parse()),this.parser.consume(")")):e=new hr(this.parser.consume("Symbol").value,Fp(this.parser.consume("Symbol").value),this.parser.consume().value);let r=this.parser.peek()?.value;return r==="and"||r==="or"?(this.parser.consume("Symbol",r),new yr(r,e,this.parse())):e}},Up=dt();function Bp(t){let e=Up.construct(ma(t));e.removeComments();let r=new Zi(e).parse(),n=e.peek();if(n)throw new m(w("Unexpected token in _filter expression: "+n.value));return r}var ga={AA:"AA",AE:"AE",AR:"AR",CA:"CA",CE:"CE",CR:"CR"};function ya(t){return t!==void 0&&Object.hasOwn(ga,t)}var qp={AA:"OK",AE:"Application Error",AR:"Application Reject",CA:"Commit Accept",CE:"Commit Error",CR:"Commit Reject"},we=class{constructor(e="\r",r="|",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=r,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}},eo=class t{constructor(e,r=new we){c(this,"context");c(this,"_segments");c(this,"segmentsByName");c(this,"cachedString");c(this,"allSegmentsParsed");this.context=r,this._segments=e,this.segmentsByName=ha(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 r=this.segmentsByName.get(e);if(r?.length)return this.parseSegment(r[0])}getAllSegments(e){let r=this.segmentsByName.get(e);return r?r.map(n=>this.parseSegment(n)):[]}parseSegment(e){let r=this._segments[e];if(r===void 0)return;if(typeof r!="string")return r;let n=xt.parse(r,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}getAckType(){let e=this.getSegment("MSA")?.getField(1)?.toString()?.toUpperCase();return ya(e)?e:void 0}buildAck(e){let r=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",d=e?.ackCode??"AA";return new t([new xt(["MSH",this.context.getMsh2(),s,a,i,o,xa(r),"",this.buildAckMessageType(n),r.getTime().toString(),"P",l],this.context),new xt(["MSA",d,u,qp[d]],this.context),...e?.errSegment?[e.errSegment]:[]])}buildAckMessageType(e){let r=e?.getField(9),n=r?.getComponent(2),i=r?.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 r=new we("\r",e.charAt(3),e.charAt(4),e.charAt(5),e.charAt(6),e.charAt(7)),n=new t(e.split(/[\r\n]+/),r);return n.cachedString=e,n}setSegment(e,r){if(r.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&&r.name!=="MSH")return!1;if(typeof e=="number")return e>=this._segments.length?(this._segments.push(r),this.invalidateCache(),!0):(this._segments[e]=r,this.invalidateCache(),!0);let n=this.findSegmentIndexByName(e);return n===0&&r.name!=="MSH"?!1:n!==-1?(this._segments[n]=r,this.invalidateCache(),!0):!1}findSegmentIndexByName(e){return this.segmentsByName.get(e)?.[0]??-1}invalidateCache(){this.segmentsByName=ha(this._segments),this.cachedString=void 0,this.bindSegments()}bindSegments(){let e=()=>{this.cachedString=void 0};for(let r of this._segments)typeof r!="string"&&(r.onModified=e)}};function ha(t){let e=new Map;for(let r=0;r<t.length;r++){let n=t[r],i=typeof n=="string"?n.slice(0,3):n.name,o=e.get(i);o?o.push(r):e.set(i,[r])}return e}var xt=class t{constructor(e,r=new we){c(this,"context");c(this,"name");c(this,"_fields");c(this,"allFieldsParsed");c(this,"cachedString");c(this,"onModified");this.context=r,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 ge([[this.context.getMsh1()]],this.context);if(e===2)return new ge([[this.context.getMsh2()]],this.context);if(e>2)return this.parseField(e-1)}return this.parseField(e)}parseField(e){let r=this._fields[e];if(r===void 0)return;if(typeof r!="string")return r;let n=ge.parse(r,this.context);return n.onModified=()=>{this.cachedString=void 0,this.onModified?.()},this._fields[e]=n,n}getComponent(e,r,n,i=0){return this.getField(e)?.getComponent(r,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,r=new we){let n=new t(e.split(r.fieldSeparator),r);return n.cachedString=e,n}setField(e,r){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 ge([[""]],this.context));return this._fields[n]=typeof r=="string"?ge.parse(r,this.context):r,this.invalidateCache(),!0}}for(;this._fields.length<=e;)this._fields.push(new ge([[""]],this.context));return this._fields[e]=typeof r=="string"?ge.parse(r,this.context):r,this.invalidateCache(),!0}setComponent(e,r,n,i,o=0){let s=this.getField(e);return s?s.setComponent(r,n,i,o):!1}invalidateCache(){this.cachedString=void 0,this.bindFields(),this.onModified?.()}bindFields(){let e=()=>{this.cachedString=void 0,this.onModified?.()};for(let r of this._fields)typeof r!="string"&&(r.onModified=e)}},ge=class t{constructor(e,r=new we){c(this,"context");c(this,"components");c(this,"onModified");c(this,"cachedString");this.context=r,this.components=e}get(e,r,n=0){return this.getComponent(e+1,r,n)}getComponent(e,r,n=0){let i=this.components[n][e-1]??"";return r!==void 0&&(i=i.split(this.context.subcomponentSeparator)[r]??""),i}toString(){return this.cachedString??=this.components.map(e=>e.join(this.context.componentSeparator)).join(this.context.repetitionSeparator),this.cachedString}static parse(e,r=new we){let n=new t(e.split(r.repetitionSeparator).map(i=>i.split(r.componentSeparator)),r);return n.cachedString=e,n}setComponent(e,r,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]=r;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]=r,this.components[i][e-1]=s.join(this.context.subcomponentSeparator)}}return this.invalidateCache(),!0}invalidateCache(){this.cachedString=void 0,this.onModified?.()}};function Wp(t,e){if(!t)return;let r=rt(t.slice(0,4),0),n=rt(t.slice(4,6),1)-1,i=rt(t.slice(6,8),1),o=rt(t.slice(8,10),0),s=rt(t.slice(10,12),0),a=rt(t.slice(12,14),0),u=0;t.includes(".")&&(u=rt(t.slice(15,19),0));let l=new Date(Date.UTC(r,n,i,o,s,a,u)),d=$p(t,e?.tzOffset);return d!==0&&(l=new Date(l.getTime()-d)),l.toISOString()}function rt(t,e){let r=Number.parseInt(t,10);return Number.isNaN(r)?e:r}function $p(t,e){let r=e,n=t.indexOf("+");n!==-1&&(r=t.slice(n));let i=t.indexOf("-");if(i!==-1&&(r=t.slice(i)),!r)return 0;let o=r.startsWith("-")?-1:1;r=r.slice(1).replace(":","");let s=Number.parseInt(r.slice(0,2),10),a=Number.parseInt(r.slice(2,4),10);return o*(s*60*60*1e3+a*60*1e3)}function xa(t){let e=t instanceof Date?t:new Date(t),n=e.toISOString().replaceAll(/[-:T]/g,"").replace(/(\.\d+)?Z$/,""),i=e.getUTCMilliseconds();return i>0&&(n+="."+i.toString()),n}var nt={NONE:0,ERROR:1,WARN:2,INFO:3,DEBUG:4},va=["NONE","ERROR","WARN","INFO","DEBUG"],to=class t{constructor(e,r={},n=nt.INFO,i={}){c(this,"write");c(this,"metadata");c(this,"options");c(this,"prefix");c(this,"level");this.write=e,this.metadata=r,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 r=this.getLoggerConfig(),n=e?{...r,...e,options:{...r.options,...e.options}}:r;return new t(n.write,n.metadata,n.level,n.options)}getLoggerConfig(){let{write:e,metadata:r,level:n,options:i}=this;return{write:e,metadata:r,level:n,options:i}}error(e,r){this.log(nt.ERROR,e,r)}warn(e,r){this.log(nt.WARN,e,r)}info(e,r){this.log(nt.INFO,e,r)}debug(e,r){this.log(nt.DEBUG,e,r)}log(e,r,n){if(e>this.level)return;let i;if(Pr(n))i=xr(n);else if(n){i={...n};for(let[o,s]of Object.entries(i))s instanceof Error&&(i[o]=xr(s))}this.write(JSON.stringify({level:va[e],timestamp:new Date().toISOString(),msg:this.prefix?`${this.prefix}${r}`:r,...i,...this.metadata}))}};function jp(t){let e=nt[t.toUpperCase()];if(e===void 0)throw new Error(`Invalid log level: ${t}`);return e}function xr(t,e=0,r=10){if(e>=r)return{error:"Max error depth reached"};let n={error:t.toString(),stack:t.stack?.split(`
|
|
54
|
-
`)};t.name&&t.name!=="Error"&&(n.name=t.name),t.message&&(n.message=t.message),"cause"in t&&t.cause!==void 0&&(t.cause instanceof Error?n.cause=xr(t.cause,e+1,r):n.cause=t.cause);let i=Object.getOwnPropertyNames(t).filter(o=>!["name","message","stack","cause"].includes(o));for(let o of i)try{let s=t[o];s instanceof Error?n[o]=xr(s,e+1,r):n[o]=s}catch{}return n}var Ta="Invalid response from order medication bot",Hp="Invalid response from medication search bot",Sa="Invalid response from order-set bot",ba="https://medplum.com/fhir/CodeSystem/medication-request-status-reason",Ea="response-not-received";function Gp(){return{coding:[{system:ba,code:Ea,display:"Order-medication response not received"}],text:"The order-medication operation did not return a verifiable response; vendor-side state is unknown."}}function Ra(t){if(typeof t!="object"||t===null)return!1;let e=t;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 Ca(t){if(typeof t!="object"||t===null)return!1;let e=t;return typeof e.launchUrl=="string"&&e.launchUrl.length>0}function Qp(t){return Array.isArray(t)?t.every(e=>D(e,"Medication")):!1}function zp(t,e){return $r(t,e.pendingOrderIdSystem)}function Jp(t,e){let r=De(t,e.pendingOrderStatusUrl);return typeof r=="string"?r:void 0}function Kp(t,e){let r=De(t,e.iframeUrlExtension);return typeof r=="string"?r:void 0}function x(t,e,r){return{name:t,[e]:r}}function Ue(t){if(t.resource!==void 0)return t.resource;if(t.part?.length)return t.part;for(let e of Object.keys(t))if(e.startsWith("value"))return t[e]}function Yp(t){let e=[];t.term!==void 0&&e.push(x("term","valueString",t.term)),t.ndc!==void 0&&e.push(x("ndc","valueString",t.ndc)),t.rxNorm!==void 0&&e.push(x("rxNorm","valueString",t.rxNorm)),t.routedMedId!==void 0&&e.push(x("routedMedId","valueInteger",t.routedMedId));for(let r of t.gcnSeqnos??[])e.push(x("gcnSeqnos","valueInteger",r));return t.searchOtc!==void 0&&e.push(x("searchOtc","valueBoolean",t.searchOtc)),t.searchSupply!==void 0&&e.push(x("searchSupply","valueBoolean",t.searchSupply)),t.searchBrand!==void 0&&e.push(x("searchBrand","valueBoolean",t.searchBrand)),t.searchGeneric!==void 0&&e.push(x("searchGeneric","valueBoolean",t.searchGeneric)),t.includeCode!==void 0&&e.push(x("includeCode","valueBoolean",t.includeCode)),t.quantityQualifiers!==void 0&&e.push(x("quantityQualifiers","valueBoolean",t.quantityQualifiers)),{resourceType:"Parameters",parameter:e}}function Xp(t,e){let r=[];return e.ndc!==void 0&&r.push(x("ndc","valueString",e.ndc)),e.rxNorm!==void 0&&r.push(x("rxNorm","valueString",e.rxNorm)),e.routedMedId!==void 0&&r.push(x("routedMedId","valueInteger",e.routedMedId)),e.gcnSeqno!==void 0&&r.push(x("gcnSeqno","valueInteger",e.gcnSeqno)),e.drugName!==void 0&&r.push(x("drugName","valueString",e.drugName)),e.line1!==void 0&&r.push(x("line1","valueString",e.line1)),r.push(x("quantity","valueDecimal",e.quantity)),e.quantityQualifier!==void 0&&r.push(x("quantityQualifier","valueString",e.quantityQualifier)),e.refill!==void 0&&r.push(x("refill","valueInteger",e.refill)),e.drugOrder!==void 0&&r.push(x("drugOrder","valueInteger",e.drugOrder)),e.sigLine3!==void 0&&r.push(x("sigLine3","valueString",e.sigLine3)),e.useSubstitution!==void 0&&r.push(x("useSubstitution","valueBoolean",e.useSubstitution)),{name:t,part:r}}function Zp(t){let e=[];if(e.push(x("patientId","valueId",t.patientId)),t.medicationRequestId!==void 0&&e.push(x("medicationRequestId","valueId",t.medicationRequestId)),t.combinationMed!==void 0&&e.push(x("combinationMed","valueBoolean",t.combinationMed)),t.drugs)for(let n of t.drugs)e.push(Xp("drugs",n));if(t.compoundTitle!==void 0&&e.push(x("compoundTitle","valueString",t.compoundTitle)),t.compoundQuantity!==void 0&&e.push(x("compoundQuantity","valueDecimal",t.compoundQuantity)),t.compoundQuantityQualifier!==void 0&&e.push(x("compoundQuantityQualifier","valueString",t.compoundQuantityQualifier)),t.compoundSigs)for(let n of t.compoundSigs){let i=[x("sigOrder","valueInteger",n.sigOrder),x("line3","valueString",n.line3)];n.drugId!==void 0&&i.push(x("drugId","valueInteger",n.drugId)),e.push({name:"compoundSigs",part:i})}if(t.conditionIds)for(let n of t.conditionIds)e.push(x("conditionIds","valueId",n));if(t.coverageId!==void 0&&e.push(x("coverageId","valueId",t.coverageId)),t.payerOrganizationId!==void 0&&e.push(x("payerOrganizationId","valueId",t.payerOrganizationId)),t.pharmacyOrganizationId!==void 0&&e.push(x("pharmacyOrganizationId","valueId",t.pharmacyOrganizationId)),t.diagnoses)for(let n of t.diagnoses)e.push({name:"diagnoses",part:[x("icdId","valueString",n.icdId),x("name","valueString",n.name)]});t.pharmacyNcpdpId!==void 0&&e.push(x("pharmacyNcpdpId","valueString",t.pharmacyNcpdpId)),t.pharmacyName!==void 0&&e.push(x("pharmacyName","valueString",t.pharmacyName)),t.writtenDate!==void 0&&e.push(x("writtenDate","valueDate",t.writtenDate)),t.fillDate!==void 0&&e.push(x("fillDate","valueDate",t.fillDate)),t.durationDays!==void 0&&e.push(x("durationDays","valueInteger",t.durationDays)),t.pharmacyNote!==void 0&&e.push(x("pharmacyNote","valueString",t.pharmacyNote)),t.patientInstruction!==void 0&&e.push(x("patientInstruction","valueString",t.patientInstruction)),t.appId!==void 0&&e.push(x("appId","valueString",t.appId));let r=K(t.organization);return r!==void 0&&e.push(x("organizationId","valueString",r)),{resourceType:"Parameters",parameter:e}}function ef(t){let e={};for(let n of t.parameter??[])n.name&&(e[n.name]=Ue(n));let r={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(!Ra(r))throw new Error(Ta);return r}function tf(t){let e=[];e.push(x("patientId","valueId",t.patientId)),t.planDefinitionId!==void 0&&e.push(x("planDefinitionId","valueId",t.planDefinitionId)),t.vendorOrderSetId!==void 0&&(typeof t.vendorOrderSetId=="number"?e.push(x("vendorOrderSetId","valueInteger",t.vendorOrderSetId)):e.push(x("vendorOrderSetId","valueString",t.vendorOrderSetId))),t.appId!==void 0&&e.push(x("appId","valueString",t.appId));let r=K(t.organization);return r!==void 0&&e.push(x("organizationId","valueString",r)),{resourceType:"Parameters",parameter:e}}function rf(t){let e={};for(let n of t.parameter??[])n.name&&(e[n.name]=Ue(n));let r={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(!Ca(r))throw new Error(Sa);return r}var Pa="Invalid response from checkout-medications bot";function Aa(t){if(typeof t!="object"||t===null)return!1;let e=t;return typeof e.approvalUrl=="string"&&e.approvalUrl.length>0&&typeof e.vendorPatientId=="number"&&Number.isFinite(e.vendorPatientId)&&Array.isArray(e.items)}function nf(t){let e=[];e.push(x("patientId","valueId",t.patientId));for(let n of t.medicationRequestIds)e.push(x("medicationRequestIds","valueId",n));t.appId!==void 0&&e.push(x("appId","valueString",t.appId));let r=K(t.organization);return r!==void 0&&e.push(x("organizationId","valueString",r)),{resourceType:"Parameters",parameter:e}}function of(t){if(!t?.length)return;let e={};for(let i of t)i.name&&(e[i.name]=Ue(i));let r=typeof e.medicationRequestId=="string"?e.medicationRequestId:"",n=e.status==="queued"||e.status==="failed"?e.status:void 0;if(!(!r||!n))return{medicationRequestId:r,status:n,vendorLineId:typeof e.vendorLineId=="string"?e.vendorLineId:void 0,duplicate:e.duplicate===!0?!0:void 0,error:typeof e.error=="string"?e.error:void 0}}function sf(t){let e=[],r={};for(let i of t.parameter??[])if(i.name)if(i.name==="items"){let o=of(i.part);o&&e.push(o)}else r[i.name]=Ue(i);let n={approvalUrl:typeof r.approvalUrl=="string"?r.approvalUrl:"",vendorPatientId:typeof r.vendorPatientId=="number"?r.vendorPatientId:Number.NaN,items:e};if(!Aa(n))throw new Error(Pa);return n}var wa="Invalid response from cart-management bot";function Oa(t){if(typeof t!="object"||t===null)return!1;let e=t;return typeof e.vendorPatientId=="number"&&Number.isFinite(e.vendorPatientId)&&typeof e.removedCount=="number"&&Number.isFinite(e.removedCount)&&Array.isArray(e.items)}function af(t){return{resourceType:"Parameters",parameter:[x("patientId","valueId",t.patientId),x("action","valueCode","remove"),x("medicationRequestId","valueId",t.medicationRequestId)]}}function cf(t){return{resourceType:"Parameters",parameter:[x("patientId","valueId",t.patientId),x("action","valueCode","clear")]}}function uf(t){if(!t?.length)return;let e={};for(let n of t)n.name&&(e[n.name]=Ue(n));let r=e.status==="removed"||e.status==="not-in-cart"||e.status==="failed"?e.status:void 0;if(r)return{status:r,medicationRequestId:typeof e.medicationRequestId=="string"?e.medicationRequestId:void 0,vendorLineId:typeof e.vendorLineId=="string"?e.vendorLineId:void 0,error:typeof e.error=="string"?e.error:void 0}}function lf(t){let e=[],r={};for(let i of t.parameter??[])if(i.name)if(i.name==="items"){let o=uf(i.part);o&&e.push(o)}else r[i.name]=Ue(i);let n={vendorPatientId:typeof r.vendorPatientId=="number"?r.vendorPatientId:Number.NaN,removedCount:typeof r.removedCount=="number"?r.removedCount:Number.NaN,items:e};if(!Oa(n))throw new Error(wa);return n}function df(t){let e={};for(let r of t)r.name&&(e[r.name]=Ue(r));return{actionTitle:typeof e.actionTitle=="string"?e.actionTitle:void 0,activityDefinitionUrl:typeof e.activityDefinitionUrl=="string"?e.activityDefinitionUrl:void 0,scriptSureSequenceId:typeof e.scriptSureSequenceId=="number"?e.scriptSureSequenceId:void 0,scriptSureOrderId:typeof e.scriptSureOrderId=="number"?e.scriptSureOrderId:void 0,status:e.status==="failed"?"failed":"synced",error:typeof e.error=="string"?e.error:void 0}}function pf(t){let e={},r=[];for(let n of t.parameter??[])n.name&&(n.name==="results"&&n.part?.length?r.push(df(n.part)):e[n.name]=Ue(n));return{mode:e.mode==="noop-already-synced"?"noop-already-synced":"created",planDefinitionId:typeof e.planDefinitionId=="string"?e.planDefinitionId:void 0,scriptSureOrdersetId:typeof e.scriptSureOrdersetId=="number"?e.scriptSureOrdersetId:void 0,syncedCount:typeof e.syncedCount=="number"?e.syncedCount:r.filter(n=>n.status==="synced").length,failedCount:typeof e.failedCount=="number"?e.failedCount:r.filter(n=>n.status==="failed").length,results:r}}var Tn=`${St}/fhir/StructureDefinition/patient-preferredPharmacy`,io="https://medplum.com/fhir/CodeSystem/pharmacy-preference-type",vn="primary",oo="preferred";function ro(t){let e=t.extension?.find(r=>r.url==="pharmacy");return e?.valueReference?I(e.valueReference):void 0}function no(t){return t.url===Tn&&!!t.extension}function ff(t,e){let r=t.extension?.find(n=>n.url==="type");r&&(r.valueCodeableConcept={coding:[{system:e,code:oo,display:"Preferred Pharmacy"}]})}function mf(t,e){if(!t.extension)return[];let r=[];for(let n of t.extension){if(n.url!==Tn||!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===vn)??!1:o?.valueCodeableConcept?.coding?.some(a=>a.code===vn)??!1;r.push({organizationRef:i.valueReference,isPrimary:s})}}return r}function Ia(t,e,r=io){return{url:Tn,extension:[{url:"pharmacy",valueReference:t},{url:"type",valueCodeableConcept:{coding:[{system:r,code:e?vn:oo,display:e?"Primary Pharmacy":"Preferred Pharmacy"}]}}]}}function hf(t,e,r,n=io){t.extension??=[];let i=I(e);if(r)for(let a of t.extension)no(a)&&ro(a)!==i&&ff(a,n);let o=t.extension.findIndex(a=>no(a)&&ro(a)===i),s=Ia(e,r,n);return o>=0?t.extension[o]=s:t.extension.push(s),t}function gf(t,e){if(!t.extension)return t;let r=I(e);return t.extension=t.extension.filter(n=>no(n)?ro(n)!==r:!0),t}function yf(t){if(!Array.isArray(t))return!1;if(t.length>0){let e=t[0];return typeof e=="object"&&e!==null&&e.resourceType==="Organization"}return!0}function xf(t){if(typeof t!="object"||t===null)return!1;let e=t;return typeof e.success=="boolean"&&typeof e.message=="string"}var vr="https://medplum.com/fhir/StructureDefinition/SchedulingParameters",vf="https://medplum.com/fhir/StructureDefinition/SchedulingEncounterCoding",Tf="https://medplum.com/fhir/StructureDefinition/SchedulingPlanDefinition",Sn="https://medplum.com/fhir/service-type-reference",ka="http://hl7.org/fhir/StructureDefinition/timezone",Ma=["mon","tue","wed","thu","fri","sat","sun"];function Sf(t){return Ma.includes(t)}function bf(t){return!!ce(t,vr)}function Ef(t,e){if(!t?.reference)return!1;let[r,n]=t.reference.split("/");return`${r}/${n}`===e}function Da(t,e){return t.url===vr&&(t.extension?.some(r=>r.url==="service"&&Ef(r.valueReference,e))??!1)}function Va(t,e){let r=I(e);return t.extension?.filter(n=>Da(n,r))??[]}function _a(t,e,r){return Va(t,e).flatMap(n=>It(n,r))}function Rf(t,e,r){let n=La(t,e,r.url),i=ne(e);n.extension??=[];let o=n.extension.find(s=>Da(s,i.reference));return o||(o={url:vr,extension:[{url:"service",valueReference:i}]},n.extension.push(o)),o.extension=[...o.extension??[],r],n}function La(t,e,r){let n=de(t);for(let i of Va(n,e))i.extension&&(i.extension=i.extension.filter(o=>o.url!==r));return n}function Cf(t,e,r){let n=(e?_a(e,t,"timezone"):[]).map(s=>s.valueCode).find(Dt);if(n)return n;let i=It(t,[vr,"timezone"]).map(s=>s.valueCode).find(Dt);if(i)return i;let o=r&&De(r,ka);return typeof o=="string"?o:void 0}function Pf(t){let e=[{url:Sn,valueReference:ne(t)}];return t.type?.length?t.type.map(r=>({...r,extension:[...r.extension??[],...e]})):[{extension:e}]}function Af(t,e){if(!t?.length)return!1;let r=I(e);return t.some(n=>De(n,Sn)?.reference===r)}function wf(t){return t?.length?t.map(e=>De(e,Sn)).filter(Dt):[]}function Of(t){if(!t)throw new m(T("Resource type is null"));if(!Et(t))throw new m(T("Unknown resource type"))}function so(t,e,r){t===null?r.push(R(e,"Invalid null value")):Array.isArray(t)?If(t,e,r):typeof t=="object"&&kf(t,e,r)}function If(t,e,r){for(let n=0;n<t.length;n++)t[n]===void 0?r.push(R(`${e}[${n}]`,"Invalid undefined value")):so(t[n],`${e}[${n}]`,r)}function kf(t,e,r){for(let[n,i]of Object.entries(t))so(i,`${e}${e?".":""}${n}`,r)}function Mf(t){return{resourceType:"SearchParameter",code:t.code+":identifier",base:t.base,type:"token",expression:`(${t.expression}).identifier`}}function ao(t){return t.match(/^\((.+)\)\.identifier$/)?.[1]}function co(t,e){return new Re(t,new ie(e,new F("identifier")))}var ye={BOOLEAN:"BOOLEAN",NUMBER:"NUMBER",QUANTITY:"QUANTITY",TEXT:"TEXT",REFERENCE:"REFERENCE",CANONICAL:"CANONICAL",DATE:"DATE",DATETIME:"DATETIME",PERIOD:"PERIOD",UUID:"UUID"};function Df(t,e){return H.types[t]?.searchParamsDetails?.[e.code]??_f(t,e)}function Vf(t,e,r){let n=H.types[t];n||(n={},H.types[t]=n),n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=r}function _f(t,e){let r=e.code,n=e.expression,i=lo(t,n),o={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let l of i){let d=bn(l),f=ui(()=>d.join("."));d.length===1&&d[0]instanceof A&&d[0].operator!=="."?o.propertyTypes.add("boolean"):e.code.endsWith(":identifier")?o.propertyTypes.add("Identifier"):f().endsWith("extension.value.code")||f().endsWith("extension.value.coding.code")?(o.array=!0,o.propertyTypes.clear(),o.propertyTypes.add("code")):Na(o,d,t,1),f().endsWith("extension.valueDateTime")&&(o.array=!1,o.propertyTypes.clear(),o.propertyTypes.add("dateTime"))}let s;if(e.code.endsWith(":identifier")){let l=ao(n);if(l===void 0)throw new Error(`Unexpected expression for derived identifier search parameter: ${n}`);let d=uo(t,l);s=co(n,d)}else s=uo(t,n);let a=o.elementDefinitions.map(l=>({...l,type:l.type?.filter(d=>o.propertyTypes.has(d.code))})).filter(l=>l.type&&l.type.length>0),u={type:Ff(e,o.propertyTypes),elementDefinitions:a,parsedExpression:s,array:o.array,referenceTargetTypes:Bf(e,a)};return Vf(t,r,u),u}function Na(t,e,r,n){let i=e[n];if(i instanceof Ce){t.propertyTypes.add(i.right.toString());return}if(i instanceof oe){Lf(t,i);return}let o=i.toString(),s=wt(r,o);if(!s)throw new Error(`Element definition not found for ${r} ${o}`);let a=!1,u=n+1;u<e.length&&e[u]instanceof Le&&(a=!0,u++);let l=e[u];if(s.isArray&&!a&&(t.array=!0),u===e.length-1){if(l instanceof Ce){t.elementDefinitions.push(s),t.propertyTypes.add(l.right.toString());return}if(l instanceof oe&&l.name==="ofType"){t.elementDefinitions.push(s),t.propertyTypes.add(l.args[0].toString());return}}if(u>=e.length){t.elementDefinitions.push(s);for(let d of s.type??v)t.propertyTypes.add(d.code);return}for(let d of s.type??v){let f=d.code;Nf(f)&&(f=s.type[0].code),Na(t,e,f,u)}}function Lf(t,e){if(e.name==="as"){t.propertyTypes.add(e.args[0].toString());return}if(e.name==="ofType"){t.propertyTypes.add(e.args[0].toString());return}if(e.name==="resolve"){t.propertyTypes.add("string");return}if(e.name==="where"&&e.args[0]instanceof _e){t.propertyTypes.add(e.args[0].right.toString());return}throw new Error(`Unhandled FHIRPath function: ${e.name}`)}function Nf(t){return t==="Element"||t==="BackboneElement"}function Ff(t,e){switch(t.type){case"date":return e.size===1&&e.has(p.date)?ye.DATE:ye.DATETIME;case"number":return ye.NUMBER;case"quantity":return ye.QUANTITY;case"reference":return e.has(p.canonical)?ye.CANONICAL:ye.REFERENCE;case"token":return e.size===1&&e.has(p.boolean)?ye.BOOLEAN:ye.TEXT;default:return ye.TEXT}}function lo(t,e){let r=[],n=Yt(e);return En(t,n.child,r),r}function Uf(t,e){let r=lo(t,e);if(r.length!==0)return r.map(n=>n.toString()).join(" | ")}function uo(t,e){let r=[],n=Yt(e);if(En(t,n.child,r),r.length===0)return n;let i=r[0];for(let o=1;o<r.length;o++)i=new Ve(i,r[o]);return new Re("<original-not-available>",i)}function En(t,e,r){e instanceof Ve?(En(t,e.left,r),En(t,e.right,r)):e.toString().includes(t+".")&&r.push(e)}function bn(t){if(t instanceof Ce||t instanceof Le)return[bn(t.left),t].flat();if(t instanceof A&&t.operator!==".")return[t];if(t instanceof ie)return[bn(t.left),bn(t.right)].flat();if(t instanceof oe){if(t.name==="where"&&!(t.args[0]instanceof _e))return[];if(t.name==="last")return[]}return[t]}function Bf(t,e){if(t.target?.length===1)return t.target;if(e){let r=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"&&r.add(s)}if(r.size>0)return Array.from(r)}}function qf(t){let e=[];return new Promise((r,n)=>{t.on("data",i=>e.push(Buffer.from(i))),t.on("error",i=>{t.destroy(),n(i)}),t.on("end",()=>{r(Buffer.concat(e))}),t.on("close",()=>{t.destroy()})})}function Wf(t){return`shlink:/${Ri(JSON.stringify(t))}`}function $f(t){let e=t.indexOf("#shlink:/"),r=e===-1?t:t.substring(e+1);if(!r.startsWith("shlink:/"))throw new Error("Invalid SMART Health Link URI");let n=JSON.parse(er(r.substring(8)));if(!n||n.v!==void 0&&n.v!==1||!pe(n.url)||!pe(n.key))throw new Error("Invalid SMART Health Link payload");return n}function jf(t){return/\/shl\/([^/]+)\/(?:manifest|payload)$/.exec(t)?.[1]}function Hf(t,e){let r=[];for(let n of e)r.push(...Gf(t,n));return r}function Gf(t,e){if(!t.resource)throw new Error("Resource type is required");if(t.resource!==e.resourceType)return[];let r={};for(let i of t.constant??v){let o={type:"ViewDefinitionConstant",value:i};r["%"+i.name]=_(o,"value")}let n=E(e);for(let i of t.where??v){let o=k(i.path,[n],r);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 po(t,n,r)}function po(t,e,r){let n=[],i;t.forEach?i=k(t.forEach,[e],r):t.forEachOrNull?i=k(t.forEachOrNull,[e],r):i=[e];for(let o of i){let s=[];for(let a of t.column??v){let u=k(a.path,[o],r),l;if(u.length===0)l={[a.name]:null};else if(a.collection)l={[a.name]:u.map(d=>d.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 t.select??v){let u=po(a,o,r);s.push(u)}if(t.unionAll){let a=[];for(let u of t.unionAll)for(let l of po(u,o,r))a.push(l);s.push(a)}n.push(...Qf(s))}if(i.length===0&&t.forEachOrNull){let o={};for(let s of t.column??v)o[s.name]=null;n.push(o)}return n}function Qf(t){if(t.length===0)return[];let e=t[0];for(let r=1;r<t.length;r++)e=zf(e,t[r]);return e}function zf(t,e){let r=[];for(let n of t)for(let i of e)r.push(Jf(n,i));return r}function Jf(t,e){let r={};return Object.assign(r,t),Object.assign(r,e),r}var mo=/^\d+\.\d+\.\d+(-[0-9a-z]{7})?$/,Fa="https://meta.medplum.com/releases",fo=new Map;function Kf(){fo.clear()}function Ua(t){let e=t;if(!e.tag_name?.startsWith("v"))throw new Error("Manifest missing valid tag_name starting with a 'v' (eg. v5.1.15)");let r=e.assets;if(!r?.length)throw new Error("Manifest missing assets list");for(let n of r){if(!n.browser_download_url)throw new Error("Asset missing browser download URL");if(!n.name)throw new Error("Asset missing name")}}async function Ba(t,e,r,n){let i=new URL(`${Fa}/${t}`);if(i.searchParams.set("a",e),i.searchParams.set("c",on),n)for(let[s,a]of Object.entries(n))i.searchParams.set(s,a);let o=await fetch(i.toString());if(o.status!==200){let s;try{s=(await o.json()).message}catch(a){console.error(`Failed to parse message from body: ${Ie(a)}`)}throw new Error(`Received status code ${o.status} while ${r}`,{cause:new Error(s)})}return await o.json()}async function Rn(t,e,r){let n=e?fo.get(e):void 0;if(!n){let i=e?`v${e}`:"latest",o=await Ba(`${i}.json`,t,`fetching manifest for version '${e??"latest"}'`,r);Ua(o),n=o,fo.set(n.tag_name.slice(1),n)}return n}function ho(t){return mo.test(t)}function qa(t){if(!mo.test(t))throw new TypeError(`Version is not a valid Medplum semver (eg. 1.1.1 or 1.1.1-a1bc): ${t}`)}function Wa(t,e){let r=t.split("-")[0].split(".").map(Number),n=e.split("-")[0].split(".").map(Number);for(let i=0;i<3;i++){let o=(r[i]??0)-(n[i]??0);if(o!==0)return o}return 0}async function Yf(t,e){if(!ho(e))return!1;try{await Rn(t,e)}catch{return!1}return!0}async function Xf(t){let e=await Rn(t);if(!e.tag_name.startsWith("v"))throw new Error(`Invalid release name found. Release tag '${e.tag_name}' did not start with 'v'`);let r=e.tag_name.slice(1);return qa(r),r}async function Zf(t,e){return((await Ba("all.json",t,"fetching all release versions",e)).versions??[]).map(i=>i.version).filter(ho).toSorted(Wa).reverse()}async function em(t,e){try{let r=on.split("-")[0],i=(await Rn(t,void 0,e)).tag_name.slice(1);r!==i&&console.warn(`A new version (v${i}) of Medplum is available. Your current version (v${r}) may be missing important updates and bug fixes.`)}catch(r){console.warn(`Failed to check for newer version: ${Ie(r)}`)}}0&&(module.exports={AccessPolicyInteraction,AckCode,AndAtom,ArithmeticOperatorAtom,AsAtom,CPT,ClientStorage,ConcatAtom,ContainsAtom,ContentType,DAYS_OF_WEEK,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_CART_RESPONSE,INVALID_MEDICATION_CHECKOUT_RESPONSE,INVALID_MEDICATION_ORDER_RESPONSE,INVALID_MEDICATION_ORDER_SET_RESPONSE,INVALID_MEDICATION_SEARCH_RESPONSE,ImpliesAtom,InAtom,IndexerAtom,InfixOperatorAtom,InvalidOperationError,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_SEMVER_REGEX,MEDPLUM_VERSION,MedplumClient,MedplumKeyValueClient,MemoryStorage,MissingError,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,Pointer,PrefixOperatorAtom,PropertyType,RXNORM,ReadablePromise,ReconnectingWebSocket,ReturnAckCategory,SNOMED,SchedulingEncounterCodingURI,SchedulingParametersURI,SchedulingPlanDefinitionURI,SearchParameterType,ServiceTypeReferenceURI,SubscriptionEmitter,SubscriptionManager,SymbolAtom,TestError,TimezoneExtensionURI,Tokenizer,TransformMapCollection,TypedEventTarget,UCUM,UnaryOperatorAtom,UnionAtom,VALID_HOSTNAME_REGEX,XorAtom,accepted,accessPolicySupportsInteraction,add,addPreferredPharmacyToPatient,addProfileToResource,allOk,append,apply,applyDefaultValuesToElement,applyDefaultValuesToResource,applyFixedOrPatternValue,applyPatch,arrayBufferToBase64,arrayBufferToHex,arrayify,assert,assertContextVersionOptional,assertNever,assertOk,assertReleaseManifest,assertValidMedplumSemver,badRequest,booleanToTypedValue,buildCdsRequest,buildElementsContext,buildMedicationRequestResponseLostStatusReason,buildTypeName,businessRule,calculateAge,calculateAgeString,canReadResourceType,canWriteResource,canWriteResourceType,capitalize,checkForNull,checkIfValidMedplumVersion,clearReleaseCache,clearScheduleParameter,codeableConceptMatchesToken,codingMatchesToken,compareVersions,compressElement,concatUrls,conceptMapTranslate,conflict,contentTooLarge,convertContainedResourcesToBundle,convertToSearchableDates,convertToSearchableNumbers,convertToSearchableQuantities,convertToSearchableReferences,convertToSearchableStrings,convertToSearchableTokens,convertToSearchableUris,convertToTransactionBundle,copy,crawlTypedValue,crawlTypedValueAsync,createConstraintIssue,createFhircastMessagePayload,createOperationOutcomeIssue,createPatch,createPreferredPharmacyExtension,createProcessingIssue,createReference,createStructureIssue,createTests,created,decodeBase64,decodeBase64Url,deepClone,deepEquals,deepIncludes,deriveIdentifierSearchParameter,diffAny,diffArrays,diffObjects,encodeBase64,encodeBase64Url,encodeSmartHealthLink,encryptSHA256,ensureNoLeadingSlash,ensureTrailingSlash,escapeHtml,escapeToken,evalFhirPath,evalFhirPathTyped,evalSqlOnFhir,expandSampledData,expandSampledObservation,extractAccountReferences,extractServiceTypeReferences,fetchAllVersionStrings,fetchLatestVersionString,fetchVersionManifest,fhirPathArrayEquals,fhirPathArrayEquivalent,fhirPathArrayNotEquals,fhirPathEquals,fhirPathEquivalent,fhirPathIs,fhirPathNot,fhirTypeToJsType,fhirpathPatchTypedValue,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,getExtensions,getIdentifier,getImageSrc,getInnerDerivedIdentifierExpression,getMedicationOrderIframeUrl,getNestedProperty,getOutcomeRedirectUrl,getParsedDerivedIdentifierExpression,getParsedExpressionForResourceType,getPathDifference,getPathDisplayName,getPendingMedicationOrderId,getPendingMedicationOrderStatus,getPreferredPharmaciesFromPatient,getPropertyDisplayName,getQueryString,getQuestionnaireAnswers,getRandomString,getReferenceString,getResourceTypes,getScheduleParameters,getSchedulingTimezone,getSearchParameter,getSearchParameterDetails,getSearchParameters,getSearchResourceTypes,getSmartHealthLinkId,getStatus,getTypedPropertyValue,getTypedPropertyValueWithPath,getTypedPropertyValueWithSchema,getTypedPropertyValueWithoutSchema,getValueSliceName,getWebSocketUrl,getWindow,globalSchema,gone,hasSchedulingParameters,indexConceptMapCodings,indexDefaultSearchParameters,indexSearchParameter,indexSearchParameterBundle,indexStructureDefinitionBundle,inflateBaseSchema,inflateElement,initFhirPathParserBuilder,intersection,invalidSearchOperator,isAccepted,isAckCode,isAddPharmacyResponse,isBrowserEnvironment,isCodeableConcept,isCoding,isCompletedSubscriptionRequest,isComplexTypeCode,isConflict,isContextVersionRequired,isCreated,isDataTypeLoaded,isDateString,isDateTimeString,isDayOfWeek,isDefined,isDestructive,isEmpty,isError,isFhirCriteriaMet,isFhircastResourceType,isGone,isJwt,isLowerCase,isMedicationArray,isMedicationCartManageResponse,isMedicationCheckoutResponse,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,medicationCartClearRequestToParameters,medicationCartRemoveRequestToParameters,medicationCheckoutRequestToParameters,medicationOrderRequestToParameters,medicationOrderSetRequestToParameters,medicationSearchParamsToParameters,move,multipleMatches,normalizeArrayBufferView,normalizeCreateBinaryOptions,normalizeCreatePdfOptions,normalizeErrorEvent,normalizeErrorString,normalizeOperationOutcome,notFound,notModified,operationOutcomeIssueToString,operationOutcomeToString,parametersToMedicationCartManageResponse,parametersToMedicationCheckoutResponse,parametersToMedicationOrderResponse,parametersToMedicationOrderSetResponse,parametersToOrderSetSyncResponse,parseFhirPath,parseFhirPathPatchParameters,parseFilterParameter,parseHl7DateTime,parseJWTPayload,parseLogLevel,parseMappingLanguage,parseParameter,parseReference,parseSearchRequest,parseSmartHealthLink,parseStructureDefinition,parseXFhirQuery,pathToJSONPointer,preciseEquals,preciseGreaterThan,preciseGreaterThanOrEquals,preciseLessThan,preciseLessThanOrEquals,preciseRound,preconditionFailed,projectAdminResourceTypes,protectedResourceTypes,readInteractions,redirect,redirectOk,remove,removeDuplicates,removePreferredPharmacyFromPatient,removeProfileFromResource,reorderBundle,replace,replaceQueryVariables,resolveId,resourceMatchesSubscriptionCriteria,satisfiedAccessPolicy,serializeError,serializeFhircastSubscriptionRequest,serverError,serverTimeout,serviceTypeIncludesService,setCodeBySystem,setIdentifier,setScheduleParameter,singleton,singularize,sleep,sortStringArray,splitN,splitSearchOnComma,streamToBuffer,stringify,stringifyTypedValue,structureMapTransform,subsetResource,subtract,summarizeObservations,test,toJsBoolean,toPeriod,toServiceTypeCodeableConcepts,toTypedValue,tooManyRequests,trimTrailingEmptyElements,tryGetDataType,tryGetJwtExpiration,tryGetProfile,typedValueToString,unauthorized,unauthorizedTokenAudience,unauthorizedTokenExpired,unescapeToken,unsupportedMediaType,validateFhircastSubscriptionRequest,validateResource,validateResourceType,validateTypedValue,validationError,validationRegexes,warnIfNewerVersionAvailable,wordWrap});
|
|
53
|
+
`)}};function fa(t,e){let r=[],n=[],i=0;return t.split(" ").forEach(function(o){i+o.length>e&&(r.push(n.join(" ").trim()),n=[],i=0),i+=o.length+1,n.push(o)}),n.length>0&&r.push(n.join(" ").trim()),r}var Up=[...Yt,"eq","ne","co"];function ma(t){return new Pe(t,Kt,Up,{dateTimeLiterals:!0,symbolRegex:/[^\s\])]/}).tokenize()}var hr=class{constructor(e,r,n){c(this,"path");c(this,"operator");c(this,"value");this.path=e,this.operator=r,this.value=n}},gr=class{constructor(e){c(this,"child");this.child=e}},yr=class{constructor(e,r,n){c(this,"keyword");c(this,"left");c(this,"right");this.keyword=e,this.left=r,this.right=n}};var Bp={eq:g.EXACT,ne:g.NOT_EQUALS,co:g.CONTAINS,sw:g.STARTS_WITH,ew:void 0,gt:g.GREATER_THAN,lt:g.LESS_THAN,ge:g.GREATER_THAN_OR_EQUALS,le:g.LESS_THAN_OR_EQUALS,ap:g.APPROXIMATELY,sa:g.STARTS_AFTER,eb:g.ENDS_BEFORE,pr:g.PRESENT,po:void 0,ss:void 0,sb:void 0,in:g.IN,ni:g.NOT_IN,re:g.EQUALS,identifier:g.IDENTIFIER};function qp(t){let e=Bp[t];if(!e)throw new m(w("Invalid operator: "+t));return e}var Zi=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 gr(this.parse()),this.parser.consume(")")):e=new hr(this.parser.consume("Symbol").value,qp(this.parser.consume("Symbol").value),this.parser.consume().value);let r=this.parser.peek()?.value;return r==="and"||r==="or"?(this.parser.consume("Symbol",r),new yr(r,e,this.parse())):e}},Wp=pt();function $p(t){let e=Wp.construct(ma(t));e.removeComments();let r=new Zi(e).parse(),n=e.peek();if(n)throw new m(w("Unexpected token in _filter expression: "+n.value));return r}var ga={AA:"AA",AE:"AE",AR:"AR",CA:"CA",CE:"CE",CR:"CR"};function ya(t){return t!==void 0&&Object.hasOwn(ga,t)}var jp={AA:"OK",AE:"Application Error",AR:"Application Reject",CA:"Commit Accept",CE:"Commit Error",CR:"Commit Reject"},we=class{constructor(e="\r",r="|",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=r,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}},eo=class t{constructor(e,r=new we){c(this,"context");c(this,"_segments");c(this,"segmentsByName");c(this,"cachedString");c(this,"allSegmentsParsed");this.context=r,this._segments=e,this.segmentsByName=ha(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 r=this.segmentsByName.get(e);if(r?.length)return this.parseSegment(r[0])}getAllSegments(e){let r=this.segmentsByName.get(e);return r?r.map(n=>this.parseSegment(n)):[]}parseSegment(e){let r=this._segments[e];if(r===void 0)return;if(typeof r!="string")return r;let n=vt.parse(r,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}getAckType(){let e=this.getSegment("MSA")?.getField(1)?.toString()?.toUpperCase();return ya(e)?e:void 0}buildAck(e){let r=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",d=e?.ackCode??"AA";return new t([new vt(["MSH",this.context.getMsh2(),s,a,i,o,xa(r),"",this.buildAckMessageType(n),r.getTime().toString(),"P",l],this.context),new vt(["MSA",d,u,jp[d]],this.context),...e?.errSegment?[e.errSegment]:[]])}buildAckMessageType(e){let r=e?.getField(9),n=r?.getComponent(2),i=r?.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 r=new we("\r",e.charAt(3),e.charAt(4),e.charAt(5),e.charAt(6),e.charAt(7)),n=new t(e.split(/[\r\n]+/),r);return n.cachedString=e,n}setSegment(e,r){if(r.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&&r.name!=="MSH")return!1;if(typeof e=="number")return e>=this._segments.length?(this._segments.push(r),this.invalidateCache(),!0):(this._segments[e]=r,this.invalidateCache(),!0);let n=this.findSegmentIndexByName(e);return n===0&&r.name!=="MSH"?!1:n!==-1?(this._segments[n]=r,this.invalidateCache(),!0):!1}findSegmentIndexByName(e){return this.segmentsByName.get(e)?.[0]??-1}invalidateCache(){this.segmentsByName=ha(this._segments),this.cachedString=void 0,this.bindSegments()}bindSegments(){let e=()=>{this.cachedString=void 0};for(let r of this._segments)typeof r!="string"&&(r.onModified=e)}};function ha(t){let e=new Map;for(let r=0;r<t.length;r++){let n=t[r],i=typeof n=="string"?n.slice(0,3):n.name,o=e.get(i);o?o.push(r):e.set(i,[r])}return e}var vt=class t{constructor(e,r=new we){c(this,"context");c(this,"name");c(this,"_fields");c(this,"allFieldsParsed");c(this,"cachedString");c(this,"onModified");this.context=r,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 ge([[this.context.getMsh1()]],this.context);if(e===2)return new ge([[this.context.getMsh2()]],this.context);if(e>2)return this.parseField(e-1)}return this.parseField(e)}parseField(e){let r=this._fields[e];if(r===void 0)return;if(typeof r!="string")return r;let n=ge.parse(r,this.context);return n.onModified=()=>{this.cachedString=void 0,this.onModified?.()},this._fields[e]=n,n}getComponent(e,r,n,i=0){return this.getField(e)?.getComponent(r,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,r=new we){let n=new t(e.split(r.fieldSeparator),r);return n.cachedString=e,n}setField(e,r){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 ge([[""]],this.context));return this._fields[n]=typeof r=="string"?ge.parse(r,this.context):r,this.invalidateCache(),!0}}for(;this._fields.length<=e;)this._fields.push(new ge([[""]],this.context));return this._fields[e]=typeof r=="string"?ge.parse(r,this.context):r,this.invalidateCache(),!0}setComponent(e,r,n,i,o=0){let s=this.getField(e);return s?s.setComponent(r,n,i,o):!1}invalidateCache(){this.cachedString=void 0,this.bindFields(),this.onModified?.()}bindFields(){let e=()=>{this.cachedString=void 0,this.onModified?.()};for(let r of this._fields)typeof r!="string"&&(r.onModified=e)}},ge=class t{constructor(e,r=new we){c(this,"context");c(this,"components");c(this,"onModified");c(this,"cachedString");this.context=r,this.components=e}get(e,r,n=0){return this.getComponent(e+1,r,n)}getComponent(e,r,n=0){let i=this.components[n][e-1]??"";return r!==void 0&&(i=i.split(this.context.subcomponentSeparator)[r]??""),i}toString(){return this.cachedString??=this.components.map(e=>e.join(this.context.componentSeparator)).join(this.context.repetitionSeparator),this.cachedString}static parse(e,r=new we){let n=new t(e.split(r.repetitionSeparator).map(i=>i.split(r.componentSeparator)),r);return n.cachedString=e,n}setComponent(e,r,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]=r;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]=r,this.components[i][e-1]=s.join(this.context.subcomponentSeparator)}}return this.invalidateCache(),!0}invalidateCache(){this.cachedString=void 0,this.onModified?.()}};function Hp(t,e){if(!t)return;let r=nt(t.slice(0,4),0),n=nt(t.slice(4,6),1)-1,i=nt(t.slice(6,8),1),o=nt(t.slice(8,10),0),s=nt(t.slice(10,12),0),a=nt(t.slice(12,14),0),u=0;t.includes(".")&&(u=nt(t.slice(15,19),0));let l=new Date(Date.UTC(r,n,i,o,s,a,u)),d=Gp(t,e?.tzOffset);return d!==0&&(l=new Date(l.getTime()-d)),l.toISOString()}function nt(t,e){let r=Number.parseInt(t,10);return Number.isNaN(r)?e:r}function Gp(t,e){let r=e,n=t.indexOf("+");n!==-1&&(r=t.slice(n));let i=t.indexOf("-");if(i!==-1&&(r=t.slice(i)),!r)return 0;let o=r.startsWith("-")?-1:1;r=r.slice(1).replace(":","");let s=Number.parseInt(r.slice(0,2),10),a=Number.parseInt(r.slice(2,4),10);return o*(s*60*60*1e3+a*60*1e3)}function xa(t){let e=t instanceof Date?t:new Date(t),n=e.toISOString().replaceAll(/[-:T]/g,"").replace(/(\.\d+)?Z$/,""),i=e.getUTCMilliseconds();return i>0&&(n+="."+i.toString()),n}var it={NONE:0,ERROR:1,WARN:2,INFO:3,DEBUG:4},va=["NONE","ERROR","WARN","INFO","DEBUG"],to=class t{constructor(e,r={},n=it.INFO,i={}){c(this,"write");c(this,"metadata");c(this,"options");c(this,"prefix");c(this,"level");this.write=e,this.metadata=r,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 r=this.getLoggerConfig(),n=e?{...r,...e,options:{...r.options,...e.options}}:r;return new t(n.write,n.metadata,n.level,n.options)}getLoggerConfig(){let{write:e,metadata:r,level:n,options:i}=this;return{write:e,metadata:r,level:n,options:i}}error(e,r){this.log(it.ERROR,e,r)}warn(e,r){this.log(it.WARN,e,r)}info(e,r){this.log(it.INFO,e,r)}debug(e,r){this.log(it.DEBUG,e,r)}log(e,r,n){if(e>this.level)return;let i;if(Pr(n))i=xr(n);else if(n){i={...n};for(let[o,s]of Object.entries(i))s instanceof Error&&(i[o]=xr(s))}this.write(JSON.stringify({level:va[e],timestamp:new Date().toISOString(),msg:this.prefix?`${this.prefix}${r}`:r,...i,...this.metadata}))}};function Qp(t){let e=it[t.toUpperCase()];if(e===void 0)throw new Error(`Invalid log level: ${t}`);return e}function xr(t,e=0,r=10){if(e>=r)return{error:"Max error depth reached"};let n={error:t.toString(),stack:t.stack?.split(`
|
|
54
|
+
`)};t.name&&t.name!=="Error"&&(n.name=t.name),t.message&&(n.message=t.message),"cause"in t&&t.cause!==void 0&&(t.cause instanceof Error?n.cause=xr(t.cause,e+1,r):n.cause=t.cause);let i=Object.getOwnPropertyNames(t).filter(o=>!["name","message","stack","cause"].includes(o));for(let o of i)try{let s=t[o];s instanceof Error?n[o]=xr(s,e+1,r):n[o]=s}catch{}return n}var Ta="Invalid response from order medication bot",zp="Invalid response from medication search bot",Sa="Invalid response from order-set bot",ba="https://medplum.com/fhir/CodeSystem/medication-request-status-reason",Ea="response-not-received";function Jp(){return{coding:[{system:ba,code:Ea,display:"Order-medication response not received"}],text:"The order-medication operation did not return a verifiable response; vendor-side state is unknown."}}function Ra(t){if(typeof t!="object"||t===null)return!1;let e=t;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 Ca(t){if(typeof t!="object"||t===null)return!1;let e=t;return typeof e.launchUrl=="string"&&e.launchUrl.length>0}function Kp(t){return Array.isArray(t)?t.every(e=>D(e,"Medication")):!1}function Yp(t,e){return $r(t,e.pendingOrderIdSystem)}function Xp(t,e){let r=De(t,e.pendingOrderStatusUrl);return typeof r=="string"?r:void 0}function Zp(t,e){let r=De(t,e.iframeUrlExtension);return typeof r=="string"?r:void 0}function x(t,e,r){return{name:t,[e]:r}}function Ue(t){if(t.resource!==void 0)return t.resource;if(t.part?.length)return t.part;for(let e of Object.keys(t))if(e.startsWith("value"))return t[e]}function ef(t){let e=[];t.term!==void 0&&e.push(x("term","valueString",t.term)),t.ndc!==void 0&&e.push(x("ndc","valueString",t.ndc)),t.rxNorm!==void 0&&e.push(x("rxNorm","valueString",t.rxNorm)),t.routedMedId!==void 0&&e.push(x("routedMedId","valueInteger",t.routedMedId));for(let r of t.gcnSeqnos??[])e.push(x("gcnSeqnos","valueInteger",r));return t.searchOtc!==void 0&&e.push(x("searchOtc","valueBoolean",t.searchOtc)),t.searchSupply!==void 0&&e.push(x("searchSupply","valueBoolean",t.searchSupply)),t.searchBrand!==void 0&&e.push(x("searchBrand","valueBoolean",t.searchBrand)),t.searchGeneric!==void 0&&e.push(x("searchGeneric","valueBoolean",t.searchGeneric)),t.includeCode!==void 0&&e.push(x("includeCode","valueBoolean",t.includeCode)),t.quantityQualifiers!==void 0&&e.push(x("quantityQualifiers","valueBoolean",t.quantityQualifiers)),{resourceType:"Parameters",parameter:e}}function tf(t,e){let r=[];return e.ndc!==void 0&&r.push(x("ndc","valueString",e.ndc)),e.rxNorm!==void 0&&r.push(x("rxNorm","valueString",e.rxNorm)),e.routedMedId!==void 0&&r.push(x("routedMedId","valueInteger",e.routedMedId)),e.gcnSeqno!==void 0&&r.push(x("gcnSeqno","valueInteger",e.gcnSeqno)),e.drugName!==void 0&&r.push(x("drugName","valueString",e.drugName)),e.line1!==void 0&&r.push(x("line1","valueString",e.line1)),r.push(x("quantity","valueDecimal",e.quantity)),e.quantityQualifier!==void 0&&r.push(x("quantityQualifier","valueString",e.quantityQualifier)),e.refill!==void 0&&r.push(x("refill","valueInteger",e.refill)),e.drugOrder!==void 0&&r.push(x("drugOrder","valueInteger",e.drugOrder)),e.sigLine3!==void 0&&r.push(x("sigLine3","valueString",e.sigLine3)),e.useSubstitution!==void 0&&r.push(x("useSubstitution","valueBoolean",e.useSubstitution)),{name:t,part:r}}function rf(t){let e=[];if(e.push(x("patientId","valueId",t.patientId)),t.medicationRequestId!==void 0&&e.push(x("medicationRequestId","valueId",t.medicationRequestId)),t.combinationMed!==void 0&&e.push(x("combinationMed","valueBoolean",t.combinationMed)),t.drugs)for(let n of t.drugs)e.push(tf("drugs",n));if(t.compoundTitle!==void 0&&e.push(x("compoundTitle","valueString",t.compoundTitle)),t.compoundQuantity!==void 0&&e.push(x("compoundQuantity","valueDecimal",t.compoundQuantity)),t.compoundQuantityQualifier!==void 0&&e.push(x("compoundQuantityQualifier","valueString",t.compoundQuantityQualifier)),t.compoundSigs)for(let n of t.compoundSigs){let i=[x("sigOrder","valueInteger",n.sigOrder),x("line3","valueString",n.line3)];n.drugId!==void 0&&i.push(x("drugId","valueInteger",n.drugId)),e.push({name:"compoundSigs",part:i})}if(t.conditionIds)for(let n of t.conditionIds)e.push(x("conditionIds","valueId",n));if(t.coverageId!==void 0&&e.push(x("coverageId","valueId",t.coverageId)),t.payerOrganizationId!==void 0&&e.push(x("payerOrganizationId","valueId",t.payerOrganizationId)),t.pharmacyOrganizationId!==void 0&&e.push(x("pharmacyOrganizationId","valueId",t.pharmacyOrganizationId)),t.diagnoses)for(let n of t.diagnoses)e.push({name:"diagnoses",part:[x("icdId","valueString",n.icdId),x("name","valueString",n.name)]});t.pharmacyNcpdpId!==void 0&&e.push(x("pharmacyNcpdpId","valueString",t.pharmacyNcpdpId)),t.pharmacyName!==void 0&&e.push(x("pharmacyName","valueString",t.pharmacyName)),t.writtenDate!==void 0&&e.push(x("writtenDate","valueDate",t.writtenDate)),t.fillDate!==void 0&&e.push(x("fillDate","valueDate",t.fillDate)),t.durationDays!==void 0&&e.push(x("durationDays","valueInteger",t.durationDays)),t.pharmacyNote!==void 0&&e.push(x("pharmacyNote","valueString",t.pharmacyNote)),t.patientInstruction!==void 0&&e.push(x("patientInstruction","valueString",t.patientInstruction)),t.appId!==void 0&&e.push(x("appId","valueString",t.appId));let r=K(t.organization);return r!==void 0&&e.push(x("organizationId","valueString",r)),{resourceType:"Parameters",parameter:e}}function nf(t){let e={};for(let n of t.parameter??[])n.name&&(e[n.name]=Ue(n));let r={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(!Ra(r))throw new Error(Ta);return r}function of(t){let e=[];e.push(x("patientId","valueId",t.patientId)),t.planDefinitionId!==void 0&&e.push(x("planDefinitionId","valueId",t.planDefinitionId)),t.vendorOrderSetId!==void 0&&(typeof t.vendorOrderSetId=="number"?e.push(x("vendorOrderSetId","valueInteger",t.vendorOrderSetId)):e.push(x("vendorOrderSetId","valueString",t.vendorOrderSetId))),t.appId!==void 0&&e.push(x("appId","valueString",t.appId));let r=K(t.organization);return r!==void 0&&e.push(x("organizationId","valueString",r)),{resourceType:"Parameters",parameter:e}}function sf(t){let e={};for(let n of t.parameter??[])n.name&&(e[n.name]=Ue(n));let r={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(!Ca(r))throw new Error(Sa);return r}var Pa="Invalid response from checkout-medications bot";function Aa(t){if(typeof t!="object"||t===null)return!1;let e=t;return typeof e.approvalUrl=="string"&&e.approvalUrl.length>0&&typeof e.vendorPatientId=="number"&&Number.isFinite(e.vendorPatientId)&&Array.isArray(e.items)}function af(t){let e=[];e.push(x("patientId","valueId",t.patientId));for(let n of t.medicationRequestIds)e.push(x("medicationRequestIds","valueId",n));t.appId!==void 0&&e.push(x("appId","valueString",t.appId));let r=K(t.organization);return r!==void 0&&e.push(x("organizationId","valueString",r)),{resourceType:"Parameters",parameter:e}}function cf(t){if(!t?.length)return;let e={};for(let i of t)i.name&&(e[i.name]=Ue(i));let r=typeof e.medicationRequestId=="string"?e.medicationRequestId:"",n=e.status==="queued"||e.status==="failed"?e.status:void 0;if(!(!r||!n))return{medicationRequestId:r,status:n,vendorLineId:typeof e.vendorLineId=="string"?e.vendorLineId:void 0,duplicate:e.duplicate===!0?!0:void 0,error:typeof e.error=="string"?e.error:void 0}}function uf(t){let e=[],r={};for(let i of t.parameter??[])if(i.name)if(i.name==="items"){let o=cf(i.part);o&&e.push(o)}else r[i.name]=Ue(i);let n={approvalUrl:typeof r.approvalUrl=="string"?r.approvalUrl:"",vendorPatientId:typeof r.vendorPatientId=="number"?r.vendorPatientId:Number.NaN,items:e};if(!Aa(n))throw new Error(Pa);return n}var wa="Invalid response from cart-management bot";function Oa(t){if(typeof t!="object"||t===null)return!1;let e=t;return typeof e.vendorPatientId=="number"&&Number.isFinite(e.vendorPatientId)&&typeof e.removedCount=="number"&&Number.isFinite(e.removedCount)&&Array.isArray(e.items)}function lf(t){return{resourceType:"Parameters",parameter:[x("patientId","valueId",t.patientId),x("action","valueCode","remove"),x("medicationRequestId","valueId",t.medicationRequestId)]}}function df(t){return{resourceType:"Parameters",parameter:[x("patientId","valueId",t.patientId),x("action","valueCode","clear")]}}function pf(t){if(!t?.length)return;let e={};for(let n of t)n.name&&(e[n.name]=Ue(n));let r=e.status==="removed"||e.status==="not-in-cart"||e.status==="failed"?e.status:void 0;if(r)return{status:r,medicationRequestId:typeof e.medicationRequestId=="string"?e.medicationRequestId:void 0,vendorLineId:typeof e.vendorLineId=="string"?e.vendorLineId:void 0,error:typeof e.error=="string"?e.error:void 0}}function ff(t){let e=[],r={};for(let i of t.parameter??[])if(i.name)if(i.name==="items"){let o=pf(i.part);o&&e.push(o)}else r[i.name]=Ue(i);let n={vendorPatientId:typeof r.vendorPatientId=="number"?r.vendorPatientId:Number.NaN,removedCount:typeof r.removedCount=="number"?r.removedCount:Number.NaN,items:e};if(!Oa(n))throw new Error(wa);return n}function mf(t){let e={};for(let r of t)r.name&&(e[r.name]=Ue(r));return{actionTitle:typeof e.actionTitle=="string"?e.actionTitle:void 0,activityDefinitionUrl:typeof e.activityDefinitionUrl=="string"?e.activityDefinitionUrl:void 0,scriptSureSequenceId:typeof e.scriptSureSequenceId=="number"?e.scriptSureSequenceId:void 0,scriptSureOrderId:typeof e.scriptSureOrderId=="number"?e.scriptSureOrderId:void 0,status:e.status==="failed"?"failed":"synced",error:typeof e.error=="string"?e.error:void 0}}function hf(t){let e={},r=[];for(let n of t.parameter??[])n.name&&(n.name==="results"&&n.part?.length?r.push(mf(n.part)):e[n.name]=Ue(n));return{mode:e.mode==="noop-already-synced"?"noop-already-synced":"created",planDefinitionId:typeof e.planDefinitionId=="string"?e.planDefinitionId:void 0,scriptSureOrdersetId:typeof e.scriptSureOrdersetId=="number"?e.scriptSureOrdersetId:void 0,syncedCount:typeof e.syncedCount=="number"?e.syncedCount:r.filter(n=>n.status==="synced").length,failedCount:typeof e.failedCount=="number"?e.failedCount:r.filter(n=>n.status==="failed").length,results:r}}var Tn=`${bt}/fhir/StructureDefinition/patient-preferredPharmacy`,io="https://medplum.com/fhir/CodeSystem/pharmacy-preference-type",vn="primary",oo="preferred";function ro(t){let e=t.extension?.find(r=>r.url==="pharmacy");return e?.valueReference?I(e.valueReference):void 0}function no(t){return t.url===Tn&&!!t.extension}function gf(t,e){let r=t.extension?.find(n=>n.url==="type");r&&(r.valueCodeableConcept={coding:[{system:e,code:oo,display:"Preferred Pharmacy"}]})}function yf(t,e){if(!t.extension)return[];let r=[];for(let n of t.extension){if(n.url!==Tn||!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===vn)??!1:o?.valueCodeableConcept?.coding?.some(a=>a.code===vn)??!1;r.push({organizationRef:i.valueReference,isPrimary:s})}}return r}function Ia(t,e,r=io){return{url:Tn,extension:[{url:"pharmacy",valueReference:t},{url:"type",valueCodeableConcept:{coding:[{system:r,code:e?vn:oo,display:e?"Primary Pharmacy":"Preferred Pharmacy"}]}}]}}function xf(t,e,r,n=io){t.extension??=[];let i=I(e);if(r)for(let a of t.extension)no(a)&&ro(a)!==i&&gf(a,n);let o=t.extension.findIndex(a=>no(a)&&ro(a)===i),s=Ia(e,r,n);return o>=0?t.extension[o]=s:t.extension.push(s),t}function vf(t,e){if(!t.extension)return t;let r=I(e);return t.extension=t.extension.filter(n=>no(n)?ro(n)!==r:!0),t}function Tf(t){if(!Array.isArray(t))return!1;if(t.length>0){let e=t[0];return typeof e=="object"&&e!==null&&e.resourceType==="Organization"}return!0}function Sf(t){if(typeof t!="object"||t===null)return!1;let e=t;return typeof e.success=="boolean"&&typeof e.message=="string"}var vr="https://medplum.com/fhir/StructureDefinition/SchedulingParameters",bf="https://medplum.com/fhir/StructureDefinition/SchedulingEncounterCoding",Ef="https://medplum.com/fhir/StructureDefinition/SchedulingPlanDefinition",Sn="https://medplum.com/fhir/service-type-reference",ka="http://hl7.org/fhir/StructureDefinition/timezone",Ma=["mon","tue","wed","thu","fri","sat","sun"];function Rf(t){return Ma.includes(t)}function Cf(t){return!!ce(t,vr)}function Pf(t,e){if(!t?.reference)return!1;let[r,n]=t.reference.split("/");return`${r}/${n}`===e}function Da(t,e){return t.url===vr&&(t.extension?.some(r=>r.url==="service"&&Pf(r.valueReference,e))??!1)}function Va(t,e){let r=I(e);return t.extension?.filter(n=>Da(n,r))??[]}function _a(t,e,r){return Va(t,e).flatMap(n=>kt(n,r))}function Af(t,e,r){let n=La(t,e,r.url),i=ne(e);n.extension??=[];let o=n.extension.find(s=>Da(s,i.reference));return o||(o={url:vr,extension:[{url:"service",valueReference:i}]},n.extension.push(o)),o.extension=[...o.extension??[],r],n}function La(t,e,r){let n=de(t);for(let i of Va(n,e))i.extension&&(i.extension=i.extension.filter(o=>o.url!==r));return n}function wf(t,e,r){let n=(e?_a(e,t,"timezone"):[]).map(s=>s.valueCode).find(Vt);if(n)return n;let i=kt(t,[vr,"timezone"]).map(s=>s.valueCode).find(Vt);if(i)return i;let o=r&&De(r,ka);return typeof o=="string"?o:void 0}function Of(t){let e=[{url:Sn,valueReference:ne(t)}];return t.type?.length?t.type.map(r=>({...r,extension:[...r.extension??[],...e]})):[{extension:e}]}function If(t,e){if(!t?.length)return!1;let r=I(e);return t.some(n=>De(n,Sn)?.reference===r)}function kf(t){return t?.length?t.map(e=>De(e,Sn)).filter(Vt):[]}var Mf={wk:1440*7,d:1440,h:60,min:1};function Df(t){let e=t?.value;if(e===void 0||e<0)return;let r=t?.unit===void 0?void 0:Mf[t.unit];return r===void 0?void 0:e*r}function Vf(t){if(!t)throw new m(T("Resource type is null"));if(!Rt(t))throw new m(T("Unknown resource type"))}function so(t,e,r){t===null?r.push(R(e,"Invalid null value")):Array.isArray(t)?_f(t,e,r):typeof t=="object"&&Lf(t,e,r)}function _f(t,e,r){for(let n=0;n<t.length;n++)t[n]===void 0?r.push(R(`${e}[${n}]`,"Invalid undefined value")):so(t[n],`${e}[${n}]`,r)}function Lf(t,e,r){for(let[n,i]of Object.entries(t))so(i,`${e}${e?".":""}${n}`,r)}function Nf(t){return{resourceType:"SearchParameter",code:t.code+":identifier",base:t.base,type:"token",expression:`(${t.expression}).identifier`}}function ao(t){return t.match(/^\((.+)\)\.identifier$/)?.[1]}function co(t,e){return new Re(t,new ie(e,new F("identifier")))}var ye={BOOLEAN:"BOOLEAN",NUMBER:"NUMBER",QUANTITY:"QUANTITY",TEXT:"TEXT",REFERENCE:"REFERENCE",CANONICAL:"CANONICAL",DATE:"DATE",DATETIME:"DATETIME",PERIOD:"PERIOD",UUID:"UUID"};function Ff(t,e){return H.types[t]?.searchParamsDetails?.[e.code]??Bf(t,e)}function Uf(t,e,r){let n=H.types[t];n||(n={},H.types[t]=n),n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=r}function Bf(t,e){let r=e.code,n=e.expression,i=lo(t,n),o={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let l of i){let d=bn(l),f=ui(()=>d.join("."));d.length===1&&d[0]instanceof A&&d[0].operator!=="."?o.propertyTypes.add("boolean"):e.code.endsWith(":identifier")?o.propertyTypes.add("Identifier"):f().endsWith("extension.value.code")||f().endsWith("extension.value.coding.code")?(o.array=!0,o.propertyTypes.clear(),o.propertyTypes.add("code")):Na(o,d,t,1),f().endsWith("extension.valueDateTime")&&(o.array=!1,o.propertyTypes.clear(),o.propertyTypes.add("dateTime"))}let s;if(e.code.endsWith(":identifier")){let l=ao(n);if(l===void 0)throw new Error(`Unexpected expression for derived identifier search parameter: ${n}`);let d=uo(t,l);s=co(n,d)}else s=uo(t,n);let a=o.elementDefinitions.map(l=>({...l,type:l.type?.filter(d=>o.propertyTypes.has(d.code))})).filter(l=>l.type&&l.type.length>0),u={type:$f(e,o.propertyTypes),elementDefinitions:a,parsedExpression:s,array:o.array,referenceTargetTypes:Hf(e,a)};return Uf(t,r,u),u}function Na(t,e,r,n){let i=e[n];if(i instanceof Ce){t.propertyTypes.add(i.right.toString());return}if(i instanceof oe){qf(t,i);return}let o=i.toString(),s=Ot(r,o);if(!s)throw new Error(`Element definition not found for ${r} ${o}`);let a=!1,u=n+1;u<e.length&&e[u]instanceof Le&&(a=!0,u++);let l=e[u];if(s.isArray&&!a&&(t.array=!0),u===e.length-1){if(l instanceof Ce){t.elementDefinitions.push(s),t.propertyTypes.add(l.right.toString());return}if(l instanceof oe&&l.name==="ofType"){t.elementDefinitions.push(s),t.propertyTypes.add(l.args[0].toString());return}}if(u>=e.length){t.elementDefinitions.push(s);for(let d of s.type??v)t.propertyTypes.add(d.code);return}for(let d of s.type??v){let f=d.code;Wf(f)&&(f=s.type[0].code),Na(t,e,f,u)}}function qf(t,e){if(e.name==="as"){t.propertyTypes.add(e.args[0].toString());return}if(e.name==="ofType"){t.propertyTypes.add(e.args[0].toString());return}if(e.name==="resolve"){t.propertyTypes.add("string");return}if(e.name==="where"&&e.args[0]instanceof _e){t.propertyTypes.add(e.args[0].right.toString());return}throw new Error(`Unhandled FHIRPath function: ${e.name}`)}function Wf(t){return t==="Element"||t==="BackboneElement"}function $f(t,e){switch(t.type){case"date":return e.size===1&&e.has(p.date)?ye.DATE:ye.DATETIME;case"number":return ye.NUMBER;case"quantity":return ye.QUANTITY;case"reference":return e.has(p.canonical)?ye.CANONICAL:ye.REFERENCE;case"token":return e.size===1&&e.has(p.boolean)?ye.BOOLEAN:ye.TEXT;default:return ye.TEXT}}function lo(t,e){let r=[],n=Xt(e);return En(t,n.child,r),r}function jf(t,e){let r=lo(t,e);if(r.length!==0)return r.map(n=>n.toString()).join(" | ")}function uo(t,e){let r=[],n=Xt(e);if(En(t,n.child,r),r.length===0)return n;let i=r[0];for(let o=1;o<r.length;o++)i=new Ve(i,r[o]);return new Re("<original-not-available>",i)}function En(t,e,r){e instanceof Ve?(En(t,e.left,r),En(t,e.right,r)):e.toString().includes(t+".")&&r.push(e)}function bn(t){if(t instanceof Ce||t instanceof Le)return[bn(t.left),t].flat();if(t instanceof A&&t.operator!==".")return[t];if(t instanceof ie)return[bn(t.left),bn(t.right)].flat();if(t instanceof oe){if(t.name==="where"&&!(t.args[0]instanceof _e))return[];if(t.name==="last")return[]}return[t]}function Hf(t,e){if(t.target?.length===1)return t.target;if(e){let r=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"&&r.add(s)}if(r.size>0)return Array.from(r)}}function Gf(t){let e=[];return new Promise((r,n)=>{t.on("data",i=>e.push(Buffer.from(i))),t.on("error",i=>{t.destroy(),n(i)}),t.on("end",()=>{r(Buffer.concat(e))}),t.on("close",()=>{t.destroy()})})}function Qf(t){return`shlink:/${Ri(JSON.stringify(t))}`}function zf(t){let e=t.indexOf("#shlink:/"),r=e===-1?t:t.substring(e+1);if(!r.startsWith("shlink:/"))throw new Error("Invalid SMART Health Link URI");let n=JSON.parse(tr(r.substring(8)));if(!n||n.v!==void 0&&n.v!==1||!pe(n.url)||!pe(n.key))throw new Error("Invalid SMART Health Link payload");return n}function Jf(t){return/\/shl\/([^/]+)\/(?:manifest|payload)$/.exec(t)?.[1]}function Kf(t,e){let r=[];for(let n of e)r.push(...Yf(t,n));return r}function Yf(t,e){if(!t.resource)throw new Error("Resource type is required");if(t.resource!==e.resourceType)return[];let r={};for(let i of t.constant??v){let o={type:"ViewDefinitionConstant",value:i};r["%"+i.name]=_(o,"value")}let n=E(e);for(let i of t.where??v){let o=k(i.path,[n],r);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 po(t,n,r)}function po(t,e,r){let n=[],i;t.forEach?i=k(t.forEach,[e],r):t.forEachOrNull?i=k(t.forEachOrNull,[e],r):i=[e];for(let o of i){let s=[];for(let a of t.column??v){let u=k(a.path,[o],r),l;if(u.length===0)l={[a.name]:null};else if(a.collection)l={[a.name]:u.map(d=>d.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 t.select??v){let u=po(a,o,r);s.push(u)}if(t.unionAll){let a=[];for(let u of t.unionAll)for(let l of po(u,o,r))a.push(l);s.push(a)}n.push(...Xf(s))}if(i.length===0&&t.forEachOrNull){let o={};for(let s of t.column??v)o[s.name]=null;n.push(o)}return n}function Xf(t){if(t.length===0)return[];let e=t[0];for(let r=1;r<t.length;r++)e=Zf(e,t[r]);return e}function Zf(t,e){let r=[];for(let n of t)for(let i of e)r.push(em(n,i));return r}function em(t,e){let r={};return Object.assign(r,t),Object.assign(r,e),r}var mo=/^\d+\.\d+\.\d+(-[0-9a-z]{7})?$/,Fa="https://meta.medplum.com/releases",fo=new Map;function tm(){fo.clear()}function Ua(t){let e=t;if(!e.tag_name?.startsWith("v"))throw new Error("Manifest missing valid tag_name starting with a 'v' (eg. v5.1.15)");let r=e.assets;if(!r?.length)throw new Error("Manifest missing assets list");for(let n of r){if(!n.browser_download_url)throw new Error("Asset missing browser download URL");if(!n.name)throw new Error("Asset missing name")}}async function Ba(t,e,r,n){let i=new URL(`${Fa}/${t}`);if(i.searchParams.set("a",e),i.searchParams.set("c",on),n)for(let[s,a]of Object.entries(n))i.searchParams.set(s,a);let o=await fetch(i.toString());if(o.status!==200){let s;try{s=(await o.json()).message}catch(a){console.error(`Failed to parse message from body: ${Ie(a)}`)}throw new Error(`Received status code ${o.status} while ${r}`,{cause:new Error(s)})}return await o.json()}async function Rn(t,e,r){let n=e?fo.get(e):void 0;if(!n){let i=e?`v${e}`:"latest",o=await Ba(`${i}.json`,t,`fetching manifest for version '${e??"latest"}'`,r);Ua(o),n=o,fo.set(n.tag_name.slice(1),n)}return n}function ho(t){return mo.test(t)}function qa(t){if(!mo.test(t))throw new TypeError(`Version is not a valid Medplum semver (eg. 1.1.1 or 1.1.1-a1bc): ${t}`)}function Wa(t,e){let r=t.split("-")[0].split(".").map(Number),n=e.split("-")[0].split(".").map(Number);for(let i=0;i<3;i++){let o=(r[i]??0)-(n[i]??0);if(o!==0)return o}return 0}async function rm(t,e){if(!ho(e))return!1;try{await Rn(t,e)}catch{return!1}return!0}async function nm(t){let e=await Rn(t);if(!e.tag_name.startsWith("v"))throw new Error(`Invalid release name found. Release tag '${e.tag_name}' did not start with 'v'`);let r=e.tag_name.slice(1);return qa(r),r}async function im(t,e){return((await Ba("all.json",t,"fetching all release versions",e)).versions??[]).map(i=>i.version).filter(ho).toSorted(Wa).reverse()}async function om(t,e){try{let r=on.split("-")[0],i=(await Rn(t,void 0,e)).tag_name.slice(1);r!==i&&console.warn(`A new version (v${i}) of Medplum is available. Your current version (v${r}) may be missing important updates and bug fixes.`)}catch(r){console.warn(`Failed to check for newer version: ${Ie(r)}`)}}0&&(module.exports={AccessPolicyInteraction,AckCode,AndAtom,ArithmeticOperatorAtom,AsAtom,CPT,ClientStorage,ConcatAtom,ContainsAtom,ContentType,DAYS_OF_WEEK,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_CART_RESPONSE,INVALID_MEDICATION_CHECKOUT_RESPONSE,INVALID_MEDICATION_ORDER_RESPONSE,INVALID_MEDICATION_ORDER_SET_RESPONSE,INVALID_MEDICATION_SEARCH_RESPONSE,ImpliesAtom,InAtom,IndexerAtom,InfixOperatorAtom,InvalidOperationError,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_SEMVER_REGEX,MEDPLUM_VERSION,MedplumClient,MedplumKeyValueClient,MemoryStorage,MissingError,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,Pointer,PrefixOperatorAtom,PropertyType,RXNORM,ReadablePromise,ReconnectingWebSocket,ReturnAckCategory,SNOMED,SchedulingEncounterCodingURI,SchedulingParametersURI,SchedulingPlanDefinitionURI,SearchParameterType,ServiceTypeReferenceURI,SubscriptionEmitter,SubscriptionManager,SymbolAtom,TestError,TimezoneExtensionURI,Tokenizer,TransformMapCollection,TypedEventTarget,UCUM,UnaryOperatorAtom,UnionAtom,VALID_HOSTNAME_REGEX,XorAtom,accepted,accessPolicySupportsInteraction,add,addPreferredPharmacyToPatient,addProfileToResource,allOk,append,apply,applyDefaultValuesToElement,applyDefaultValuesToResource,applyFixedOrPatternValue,applyPatch,arrayBufferToBase64,arrayBufferToHex,arrayify,assert,assertContextVersionOptional,assertNever,assertOk,assertReleaseManifest,assertValidMedplumSemver,badRequest,booleanToTypedValue,buildCdsRequest,buildElementsContext,buildMedicationRequestResponseLostStatusReason,buildTypeName,businessRule,calculateAge,calculateAgeString,canReadResourceType,canWriteResource,canWriteResourceType,capitalize,checkForNull,checkIfValidMedplumVersion,clearReleaseCache,clearScheduleParameter,codeableConceptMatchesToken,codingMatchesToken,compareVersions,compressElement,concatUrls,conceptMapTranslate,conflict,contentTooLarge,convertContainedResourcesToBundle,convertToSearchableDates,convertToSearchableNumbers,convertToSearchableQuantities,convertToSearchableReferences,convertToSearchableStrings,convertToSearchableTokens,convertToSearchableUris,convertToTransactionBundle,copy,countBy,countWhere,crawlTypedValue,crawlTypedValueAsync,createConstraintIssue,createFhircastMessagePayload,createOperationOutcomeIssue,createPatch,createPreferredPharmacyExtension,createProcessingIssue,createReference,createStructureIssue,createTests,created,decodeBase64,decodeBase64Url,deepClone,deepEquals,deepIncludes,deriveIdentifierSearchParameter,diffAny,diffArrays,diffObjects,encodeBase64,encodeBase64Url,encodeSmartHealthLink,encryptSHA256,ensureNoLeadingSlash,ensureTrailingSlash,escapeHtml,escapeToken,evalFhirPath,evalFhirPathTyped,evalSqlOnFhir,expandSampledData,expandSampledObservation,extractAccountReferences,extractServiceTypeReferences,fetchAllVersionStrings,fetchLatestVersionString,fetchVersionManifest,fhirPathArrayEquals,fhirPathArrayEquivalent,fhirPathArrayNotEquals,fhirPathEquals,fhirPathEquivalent,fhirPathIs,fhirPathNot,fhirTypeToJsType,fhirpathPatchTypedValue,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,getExtensions,getIdentifier,getImageSrc,getInnerDerivedIdentifierExpression,getMedicationOrderIframeUrl,getNestedProperty,getOutcomeRedirectUrl,getParsedDerivedIdentifierExpression,getParsedExpressionForResourceType,getPathDifference,getPathDisplayName,getPendingMedicationOrderId,getPendingMedicationOrderStatus,getPreferredPharmaciesFromPatient,getPropertyDisplayName,getQueryString,getQuestionnaireAnswers,getRandomString,getReferenceString,getResourceTypes,getScheduleParameters,getSchedulingTimezone,getSearchParameter,getSearchParameterDetails,getSearchParameters,getSearchResourceTypes,getSmartHealthLinkId,getStatus,getTypedPropertyValue,getTypedPropertyValueWithPath,getTypedPropertyValueWithSchema,getTypedPropertyValueWithoutSchema,getValueSliceName,getWebSocketUrl,getWindow,globalSchema,gone,hasSchedulingParameters,indexConceptMapCodings,indexDefaultSearchParameters,indexSearchParameter,indexSearchParameterBundle,indexStructureDefinitionBundle,inflateBaseSchema,inflateElement,initFhirPathParserBuilder,intersection,invalidSearchOperator,isAccepted,isAckCode,isAddPharmacyResponse,isBrowserEnvironment,isCodeableConcept,isCoding,isCompletedSubscriptionRequest,isComplexTypeCode,isConflict,isContextVersionRequired,isCreated,isDataTypeLoaded,isDateString,isDateTimeString,isDayOfWeek,isDefined,isDestructive,isEmpty,isError,isFhirCriteriaMet,isFhircastResourceType,isGone,isJwt,isLowerCase,isMedicationArray,isMedicationCartManageResponse,isMedicationCheckoutResponse,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,medicationCartClearRequestToParameters,medicationCartRemoveRequestToParameters,medicationCheckoutRequestToParameters,medicationOrderRequestToParameters,medicationOrderSetRequestToParameters,medicationSearchParamsToParameters,move,multipleMatches,normalizeArrayBufferView,normalizeCreateBinaryOptions,normalizeCreatePdfOptions,normalizeErrorEvent,normalizeErrorString,normalizeOperationOutcome,notFound,notModified,operationOutcomeIssueToString,operationOutcomeToString,parametersToMedicationCartManageResponse,parametersToMedicationCheckoutResponse,parametersToMedicationOrderResponse,parametersToMedicationOrderSetResponse,parametersToOrderSetSyncResponse,parseFhirPath,parseFhirPathPatchParameters,parseFilterParameter,parseHl7DateTime,parseJWTPayload,parseLogLevel,parseMappingLanguage,parseParameter,parseReference,parseSearchRequest,parseSmartHealthLink,parseStructureDefinition,parseXFhirQuery,pathToJSONPointer,preciseEquals,preciseGreaterThan,preciseGreaterThanOrEquals,preciseLessThan,preciseLessThanOrEquals,preciseRound,preconditionFailed,projectAdminResourceTypes,protectedResourceTypes,readInteractions,redirect,redirectOk,remove,removeDuplicates,removePreferredPharmacyFromPatient,removeProfileFromResource,reorderBundle,replace,replaceQueryVariables,resolveId,resourceMatchesSubscriptionCriteria,satisfiedAccessPolicy,schedulingDurationToMinutes,serializeError,serializeFhircastSubscriptionRequest,serverError,serverTimeout,serviceTypeIncludesService,setCodeBySystem,setIdentifier,setScheduleParameter,singleton,singularize,sleep,sortStringArray,splitN,splitSearchOnComma,streamToBuffer,stringify,stringifyTypedValue,structureMapTransform,subsetResource,subtract,sumBy,summarizeObservations,test,toJsBoolean,toPeriod,toServiceTypeCodeableConcepts,toTypedValue,tooManyRequests,trimTrailingEmptyElements,tryGetDataType,tryGetJwtExpiration,tryGetProfile,typedValueToString,unauthorized,unauthorizedTokenAudience,unauthorizedTokenExpired,unescapeToken,unsupportedMediaType,validateFhircastSubscriptionRequest,validateResource,validateResourceType,validateTypedValue,validationError,validationRegexes,warnIfNewerVersionAvailable,wordWrap});
|
|
55
55
|
/*!
|
|
56
56
|
* Reconnecting WebSocket
|
|
57
57
|
* by Pedro Ladaria <pedro.ladaria@gmail.com>
|