@medplum/core 2.0.27 → 2.0.28
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 +2 -2
- package/dist/cjs/index.cjs.map +3 -3
- package/dist/esm/index.mjs +2 -2
- package/dist/esm/index.mjs.map +3 -3
- package/dist/types/client.d.ts +26 -1
- package/package.json +1 -1
package/dist/cjs/index.cjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";var ut=Object.defineProperty;var on=Object.getOwnPropertyDescriptor;var sn=Object.getOwnPropertyNames;var an=Object.prototype.hasOwnProperty;var cn=(r,e)=>{for(var t in e)ut(r,t,{get:e[t],enumerable:!0})},un=(r,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of sn(e))!an.call(r,i)&&i!==t&&ut(r,i,{get:()=>e[i],enumerable:!(n=on(e,i))||n.enumerable});return r};var dn=r=>un(ut({},"__esModule",{value:!0}),r);var Go={};cn(Go,{AndAtom:()=>De,ArithemticOperatorAtom:()=>A,AsAtom:()=>G,BooleanInfixOperatorAtom:()=>T,ClientStorage:()=>_e,ConcatAtom:()=>Re,ContainsAtom:()=>Ae,DEFAULT_SEARCH_COUNT:()=>Ai,DotAtom:()=>Q,EmptySetAtom:()=>be,EqualsAtom:()=>Pe,EquivalentAtom:()=>we,FHIRPATH_KEYWORDS:()=>ee,FHIRPATH_OPERATORS:()=>te,FhirFilterComparison:()=>Ne,FhirFilterConnective:()=>Be,FhirFilterNegation:()=>Me,FhirPathAtom:()=>ve,FhirSchemaValidator:()=>st,FunctionAtom:()=>M,Hl7Context:()=>H,Hl7Field:()=>se,Hl7Message:()=>zt,Hl7Segment:()=>oe,ImpliesAtom:()=>Ve,InAtom:()=>Ee,IndexerAtom:()=>K,InfixOperatorAtom:()=>$,IsAtom:()=>z,LRUCache:()=>Le,LiteralAtom:()=>w,MEDPLUM_VERSION:()=>mo,MedplumClient:()=>Ht,MemoryStorage:()=>ot,NotEqualsAtom:()=>Ce,NotEquivalentAtom:()=>ke,OAuthGrantType:()=>Hr,OAuthTokenType:()=>Wr,OperationOutcomeError:()=>m,Operator:()=>Sr,OperatorPrecedence:()=>l,OrAtom:()=>Ie,Parser:()=>Ye,ParserBuilder:()=>ye,PrefixOperatorAtom:()=>he,PropertyType:()=>q,ReadablePromise:()=>P,SearchParameterType:()=>Lt,SymbolAtom:()=>N,Tokenizer:()=>j,UnaryOperatorAtom:()=>Se,UnionAtom:()=>J,XorAtom:()=>Oe,accepted:()=>xn,allOk:()=>ln,arrayBufferToBase64:()=>At,arrayBufferToHex:()=>Rt,arrayify:()=>Pt,assertOk:()=>Rn,badRequest:()=>k,booleanToTypedValue:()=>d,buildTypeName:()=>O,calculateAge:()=>de,calculateAgeString:()=>jn,canReadResourceType:()=>so,canWriteResource:()=>ao,canWriteResourceType:()=>_r,capitalize:()=>b,checkForNull:()=>at,convertToTransactionBundle:()=>uo,createReference:()=>Y,createStructureIssue:()=>h,created:()=>pn,decodeBase64:()=>qt,deepClone:()=>Zn,deepEquals:()=>le,deepIncludes:()=>pe,encodeBase64:()=>$t,evalFhirPath:()=>ne,evalFhirPathTyped:()=>rt,fhirPathArrayEquals:()=>Ze,fhirPathArrayEquivalent:()=>et,fhirPathEquals:()=>Dt,fhirPathEquivalent:()=>kr,fhirPathIs:()=>xe,fhirPathNot:()=>Xe,findObservationInterval:()=>ri,findObservationReferenceRange:()=>ni,findResourceByCode:()=>li,forbidden:()=>hn,formatAddress:()=>En,formatCodeableConcept:()=>ar,formatCoding:()=>cr,formatDate:()=>wn,formatDateTime:()=>He,formatFamilyName:()=>Cn,formatGivenName:()=>Pn,formatHumanName:()=>xt,formatMoney:()=>Ln,formatObservationValue:()=>ur,formatPeriod:()=>kn,formatQuantity:()=>W,formatRange:()=>Un,formatSearchQuery:()=>Li,formatTime:()=>sr,formatTiming:()=>Vn,getCodeBySystem:()=>Ge,getDateProperty:()=>$n,getDisplayString:()=>fr,getElementDefinition:()=>X,getElementDefinitionTypeName:()=>yi,getExpressionForResourceType:()=>Zi,getExpressionsForResourceType:()=>Nt,getExtension:()=>Wn,getExtensionValue:()=>vt,getIdentifier:()=>Hn,getImageSrc:()=>qn,getPropertyDisplayName:()=>vi,getQuestionnaireAnswers:()=>Qn,getReferenceString:()=>Tt,getResourceTypeSchema:()=>xi,getResourceTypes:()=>gi,getSearchParameterDetails:()=>_t,getSearchParameters:()=>Ti,getStatus:()=>Sn,getTypedPropertyValue:()=>E,globalSchema:()=>y,gone:()=>yn,indexSearchParameter:()=>Je,indexSearchParameterBundle:()=>hi,indexStructureDefinition:()=>Ke,indexStructureDefinitionBundle:()=>pi,initFhirPathParserBuilder:()=>re,isAccepted:()=>Tn,isEmpty:()=>v,isGone:()=>bn,isLowerCase:()=>fe,isMedplumAccessToken:()=>Qt,isNotFound:()=>vn,isObject:()=>F,isOk:()=>je,isOperationOutcome:()=>ue,isPeriod:()=>Dr,isProfileResource:()=>pr,isQuantity:()=>S,isQuantityEquivalent:()=>It,isReference:()=>Ri,isResource:()=>V,isResourceType:()=>Kr,isResourceTypeSchema:()=>Tr,isStringArray:()=>St,isUUID:()=>ei,isValidDate:()=>We,loadDataTypes:()=>Zr,matchesAccessPolicy:()=>Nr,matchesRange:()=>Et,matchesSearchRequest:()=>Bt,normalizeErrorString:()=>nr,normalizeOperationOutcome:()=>Qe,notFound:()=>ht,notModified:()=>fn,operationOutcomeIssueToString:()=>ir,operationOutcomeToString:()=>gt,parseCriteriaAsSearchRequest:()=>kt,parseFhirPath:()=>tt,parseFilterParameter:()=>wo,parseHl7Date:()=>ko,parseJWTPayload:()=>it,parseMappingLanguage:()=>Ro,parseSearchDefinition:()=>Pi,parseSearchRequest:()=>Ei,parseSearchUrl:()=>wt,preciseEquals:()=>ci,preciseGreaterThan:()=>di,preciseGreaterThanOrEquals:()=>xr,preciseLessThan:()=>ui,preciseLessThanOrEquals:()=>gr,preciseRound:()=>ai,projectAdminResourceTypes:()=>Lr,protectedResourceTypes:()=>Ur,publicResourceTypes:()=>Vr,removeDuplicates:()=>ge,resolveId:()=>Mn,serverError:()=>yt,setCodeBySystem:()=>ti,singleton:()=>D,sleep:()=>ze,streamToBuffer:()=>Mo,stringify:()=>bt,toJsBoolean:()=>U,toTypedValue:()=>x,tokenize:()=>Vt,tooManyRequests:()=>gn,unauthorized:()=>mn,validate:()=>tn,validateResource:()=>Vo,validateResourceType:()=>Oo,validationError:()=>B});module.exports=dn(Go);var dt="ok",lt="created",pt="gone",ft="not-modified",mt="not-found",er="unauthorized",tr="forbidden",rr="too-many-requests",$e="accepted",ln={resourceType:"OperationOutcome",id:dt,issue:[{severity:"information",code:"informational",details:{text:"All OK"}}]},pn={resourceType:"OperationOutcome",id:lt,issue:[{severity:"information",code:"informational",details:{text:"Created"}}]},fn={resourceType:"OperationOutcome",id:ft,issue:[{severity:"information",code:"informational",details:{text:"Not Modified"}}]},ht={resourceType:"OperationOutcome",id:mt,issue:[{severity:"error",code:"not-found",details:{text:"Not found"}}]},mn={resourceType:"OperationOutcome",id:er,issue:[{severity:"error",code:"login",details:{text:"Unauthorized"}}]},hn={resourceType:"OperationOutcome",id:tr,issue:[{severity:"error",code:"forbidden",details:{text:"Forbidden"}}]},yn={resourceType:"OperationOutcome",id:pt,issue:[{severity:"error",code:"deleted",details:{text:"Gone"}}]},gn={resourceType:"OperationOutcome",id:rr,issue:[{severity:"error",code:"throttled",details:{text:"Too Many Requests"}}]};function xn(r){return{resourceType:"OperationOutcome",id:$e,issue:[{severity:"information",code:"informational",details:{text:"Accepted"},diagnostics:r}]}}function k(r,e){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"invalid",details:{text:r},expression:e?[e]:void 0}]}}function B(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"structure",details:{text:r}}]}}function yt(r){return{resourceType:"OperationOutcome",issue:[{severity:"error",code:"exception",details:{text:"Internal server error"},diagnostics:r.toString()}]}}function ue(r){return typeof r=="object"&&r!==null&&r.resourceType==="OperationOutcome"}function je(r){return r.id===dt||r.id===lt||r.id===ft||r.id===$e}function Tn(r){return r.id===$e}function vn(r){return r.id===mt}function bn(r){return r.id===pt}function Sn(r){return r.id===dt?200:r.id===lt?201:r.id===$e?202:r.id===ft?304:r.id===er?401:r.id===tr?403:r.id===mt?404:r.id===pt?410:r.id===rr?429:400}function Rn(r,e){if(!je(r)||e===void 0)throw new m(r)}var m=class extends Error{constructor(t,n){super(gt(t));this.outcome=t,this.cause=n}};function Qe(r){return r instanceof m?r.outcome:ue(r)?r:k(nr(r))}function nr(r){return r?typeof r=="string"?r:r instanceof Error?r.message:ue(r)?gt(r):typeof r=="object"&&"code"in r&&typeof r.code=="string"?r.code:JSON.stringify(r):"Unknown error"}function gt(r){let e=r.issue?.map(ir)??[];return e.length>0?e.join("; "):"Unknown error"}function ir(r){let e=r.details?.text??r.diagnostics??"Unknown error";return r.expression?.length&&(e+=` (${r.expression.join(", ")})`),e}var or={types:{Element:{display:"Element",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]}}},BackboneElement:{display:"BackboneElement",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},modifierExtension:{max:"*",type:[{code:"Extension"}]}}},Address:{display:"Address",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},use:{type:[{code:"code"}]},type:{type:[{code:"code"}]},text:{type:[{code:"string"}]},line:{max:"*",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:{display:"Age",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Annotation:{display:"Annotation",properties:{id:{type:[{code:"string"}]},extension:{max:"*",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:{display:"Attachment",properties:{id:{type:[{code:"string"}]},extension:{max:"*",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:{display:"CodeableConcept",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},coding:{max:"*",type:[{code:"Coding"}]},text:{type:[{code:"string"}]}}},Coding:{display:"Coding",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},system:{type:[{code:"uri"}]},version:{type:[{code:"string"}]},code:{type:[{code:"code"}]},display:{type:[{code:"string"}]},userSelected:{type:[{code:"boolean"}]}}},ContactDetail:{display:"ContactDetail",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},name:{type:[{code:"string"}]},telecom:{max:"*",type:[{code:"ContactPoint"}]}}},ContactPoint:{display:"ContactPoint",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},system:{type:[{code:"code"}]},value:{type:[{code:"string"}]},use:{type:[{code:"code"}]},rank:{type:[{code:"positiveInt"}]},period:{type:[{code:"Period"}]}}},Contributor:{display:"Contributor",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},name:{min:1,type:[{code:"string"}]},contact:{max:"*",type:[{code:"ContactDetail"}]}}},Count:{display:"Count",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},DataRequirement:{display:"DataRequirement",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},profile:{max:"*",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:"*",type:[{code:"string"}]},codeFilter:{max:"*",type:[{code:"Element"}]},dateFilter:{max:"*",type:[{code:"Element"}]},limit:{type:[{code:"positiveInt"}]},sort:{max:"*",type:[{code:"Element"}]}}},DataRequirementCodeFilter:{display:"DataRequirementCodeFilter",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},valueSet:{type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/ValueSet"]}]},code:{max:"*",type:[{code:"Coding"}]}}},DataRequirementDateFilter:{display:"DataRequirementDateFilter",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},path:{type:[{code:"string"}]},searchParam:{type:[{code:"string"}]},"value[x]":{type:[{code:"dateTime"},{code:"Period"},{code:"Duration"}]}}},DataRequirementSort:{display:"DataRequirementSort",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},direction:{min:1,type:[{code:"code"}]}}},Distance:{display:"Distance",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},Dosage:{display:"Dosage",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},modifierExtension:{max:"*",type:[{code:"Extension"}]},sequence:{type:[{code:"integer"}]},text:{type:[{code:"string"}]},additionalInstruction:{max:"*",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:"*",type:[{code:"Element"}]},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:{display:"DosageDoseAndRate",properties:{id:{type:[{code:"string"}]},extension:{max:"*",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:{display:"Duration",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},comparator:{type:[{code:"code"}]},unit:{type:[{code:"string"}]},system:{type:[{code:"uri"}]},code:{type:[{code:"code"}]}}},ElementDefinition:{display:"ElementDefinition",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},modifierExtension:{max:"*",type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},representation:{max:"*",type:[{code:"code"}]},sliceName:{type:[{code:"string"}]},sliceIsConstraining:{type:[{code:"boolean"}]},label:{type:[{code:"string"}]},code:{max:"*",type:[{code:"Coding"}]},slicing:{type:[{code:"Element"}]},short:{type:[{code:"string"}]},definition:{type:[{code:"markdown"}]},comment:{type:[{code:"markdown"}]},requirements:{type:[{code:"markdown"}]},alias:{max:"*",type:[{code:"string"}]},min:{type:[{code:"unsignedInt"}]},max:{type:[{code:"string"}]},base:{type:[{code:"Element"}]},contentReference:{type:[{code:"uri"}]},type:{max:"*",type:[{code:"Element"}]},"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:"*",type:[{code:"Element"}]},"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:"*",type:[{code:"id"}]},constraint:{max:"*",type:[{code:"Element"}]},mustSupport:{type:[{code:"boolean"}]},isModifier:{type:[{code:"boolean"}]},isModifierReason:{type:[{code:"string"}]},isSummary:{type:[{code:"boolean"}]},binding:{type:[{code:"Element"}]},mapping:{max:"*",type:[{code:"Element"}]}}},ElementDefinitionSlicing:{display:"ElementDefinitionSlicing",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},discriminator:{max:"*",type:[{code:"Element"}]},description:{type:[{code:"string"}]},ordered:{type:[{code:"boolean"}]},rules:{min:1,type:[{code:"code"}]}}},ElementDefinitionSlicingDiscriminator:{display:"ElementDefinitionSlicingDiscriminator",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},type:{min:1,type:[{code:"code"}]},path:{min:1,type:[{code:"string"}]}}},ElementDefinitionBase:{display:"ElementDefinitionBase",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},path:{min:1,type:[{code:"string"}]},min:{min:1,type:[{code:"unsignedInt"}]},max:{min:1,type:[{code:"string"}]}}},ElementDefinitionType:{display:"ElementDefinitionType",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},code:{min:1,type:[{code:"uri"}]},profile:{max:"*",type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},targetProfile:{max:"*",type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition","http://hl7.org/fhir/StructureDefinition/ImplementationGuide"]}]},aggregation:{max:"*",type:[{code:"code"}]},versioning:{type:[{code:"code"}]}}},ElementDefinitionExample:{display:"ElementDefinitionExample",properties:{id:{type:[{code:"string"}]},extension:{max:"*",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:{display:"ElementDefinitionConstraint",properties:{id:{type:[{code:"string"}]},extension:{max:"*",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:{display:"ElementDefinitionBinding",properties:{id:{type:[{code:"string"}]},extension:{max:"*",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:{display:"ElementDefinitionMapping",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},identity:{min:1,type:[{code:"id"}]},language:{type:[{code:"code"}]},map:{min:1,type:[{code:"string"}]},comment:{type:[{code:"string"}]}}},Expression:{display:"Expression",properties:{id:{type:[{code:"string"}]},extension:{max:"*",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:{display:"Extension",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},url:{min:1,type:[{code:"string"}]},"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:{display:"HumanName",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},use:{type:[{code:"code"}]},text:{type:[{code:"string"}]},family:{type:[{code:"string"}]},given:{max:"*",type:[{code:"string"}]},prefix:{max:"*",type:[{code:"string"}]},suffix:{max:"*",type:[{code:"string"}]},period:{type:[{code:"Period"}]}}},Identifier:{display:"Identifier",properties:{id:{type:[{code:"string"}]},extension:{max:"*",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:{display:"MarketingStatus",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},modifierExtension:{max:"*",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:{display:"Meta",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},versionId:{type:[{code:"id"}]},lastUpdated:{type:[{code:"instant"}]},source:{type:[{code:"uri"}]},profile:{max:"*",type:[{code:"canonical",targetProfile:["http://hl7.org/fhir/StructureDefinition/StructureDefinition"]}]},security:{max:"*",type:[{code:"Coding"}]},tag:{max:"*",type:[{code:"Coding"}]},project:{type:[{code:"uri"}]},author:{type:[{code:"Reference"}]},account:{type:[{code:"Reference"}]},compartment:{max:"*",type:[{code:"Reference"}]}}},Money:{display:"Money",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},value:{type:[{code:"decimal"}]},currency:{type:[{code:"code"}]}}},Narrative:{display:"Narrative",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},status:{min:1,type:[{code:"code"}]},div:{min:1,type:[{code:"xhtml"}]}}},ParameterDefinition:{display:"ParameterDefinition",properties:{id:{type:[{code:"string"}]},extension:{max:"*",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:{display:"Period",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},start:{type:[{code:"dateTime"}]},end:{type:[{code:"dateTime"}]}}},Population:{display:"Population",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},modifierExtension:{max:"*",type:[{code:"Extension"}]},"age[x]":{type:[{code:"Range"},{code:"CodeableConcept"}]},gender:{type:[{code:"CodeableConcept"}]},race:{type:[{code:"CodeableConcept"}]},physiologicalCondition:{type:[{code:"CodeableConcept"}]}}},ProdCharacteristic:{display:"ProdCharacteristic",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},modifierExtension:{max:"*",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:"*",type:[{code:"string"}]},imprint:{max:"*",type:[{code:"string"}]},image:{max:"*",type:[{code:"Attachment"}]},scoring:{type:[{code:"CodeableConcept"}]}}},ProductShelfLife:{display:"ProductShelfLife",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},modifierExtension:{max:"*",type:[{code:"Extension"}]},identifier:{type:[{code:"Identifier"}]},type:{min:1,type:[{code:"CodeableConcept"}]},period:{min:1,type:[{code:"Quantity"}]},specialPrecautionsForStorage:{max:"*",type:[{code:"CodeableConcept"}]}}},Quantity:{display:"Quantity",properties:{id:{type:[{code:"string"}]},extension:{max:"*",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"}]}}},Range:{display:"Range",properties:{id:{type:[{code:"string"}]},extension:{max:"*",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:{display:"Ratio",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},numerator:{type:[{code:"Quantity"}]},denominator:{type:[{code:"Quantity"}]}}},Reference:{display:"Reference",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},reference:{type:[{code:"string"}]},type:{type:[{code:"uri"}]},identifier:{type:[{code:"Identifier"}]},display:{type:[{code:"string"}]}}},RelatedArtifact:{display:"RelatedArtifact",properties:{id:{type:[{code:"string"}]},extension:{max:"*",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:{display:"SampledData",properties:{id:{type:[{code:"string"}]},extension:{max:"*",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:{display:"Signature",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},type:{min:1,max:"*",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:{display:"SubstanceAmount",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},modifierExtension:{max:"*",type:[{code:"Extension"}]},"amount[x]":{type:[{code:"Quantity"},{code:"Range"},{code:"string"}]},amountType:{type:[{code:"CodeableConcept"}]},amountText:{type:[{code:"string"}]},referenceRange:{type:[{code:"Element"}]}}},SubstanceAmountReferenceRange:{display:"SubstanceAmountReferenceRange",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},lowLimit:{type:[{code:"Quantity"}]},highLimit:{type:[{code:"Quantity"}]}}},Timing:{display:"Timing",properties:{id:{type:[{code:"string"}]},extension:{max:"*",type:[{code:"Extension"}]},modifierExtension:{max:"*",type:[{code:"Extension"}]},event:{max:"*",type:[{code:"dateTime"}]},repeat:{type:[{code:"Element"}]},code:{type:[{code:"CodeableConcept"}]}}},TimingRepeat:{display:"TimingRepeat",properties:{id:{type:[{code:"string"}]},extension:{max:"*",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:"*",type:[{code:"code"}]},timeOfDay:{max:"*",type:[{code:"time"}]},when:{max:"*",type:[{code:"code"}]},offset:{type:[{code:"unsignedInt"}]}}},TriggerDefinition:{display:"TriggerDefinition",properties:{id:{type:[{code:"string"}]},extension:{max:"*",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:"*",type:[{code:"DataRequirement"}]},condition:{type:[{code:"Expression"}]}}},UsageContext:{display:"UsageContext",properties:{id:{type:[{code:"string"}]},extension:{max:"*",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"]}]}}},MetadataResource:{display:"MetadataResource",properties:{id:{type:[{code:"string"}]},meta:{type:[{code:"Meta"}]},implicitRules:{type:[{code:"uri"}]},language:{type:[{code:"code"}]},text:{type:[{code:"Narrative"}]},contained:{max:"*",type:[{code:"Resource"}]},extension:{max:"*",type:[{code:"Extension"}]},modifierExtension:{max:"*",type:[{code:"Extension"}]},url:{type:[{code:"uri"}]},version:{type:[{code:"string"}]},name:{type:[{code:"string"}]},title:{type:[{code:"string"}]},status:{min:1,type:[{code:"code"}]},experimental:{type:[{code:"boolean"}]},date:{type:[{code:"dateTime"}]},publisher:{type:[{code:"string"}]},contact:{max:"*",type:[{code:"ContactDetail"}]},description:{type:[{code:"markdown"}]},useContext:{max:"*",type:[{code:"UsageContext"}]},jurisdiction:{max:"*",type:[{code:"CodeableConcept"}]}}},IdentityProvider:{display:"IdentityProvider",properties:{authorizeUrl:{min:1,type:[{code:"string"}]},tokenUrl:{min:1,type:[{code:"string"}]},userInfoUrl:{min:1,type:[{code:"string"}]},clientId:{min:1,type:[{code:"string"}]},clientSecret:{min:1,type:[{code:"string"}]},useSubject:{type:[{code:"boolean"}]}}}}};function En(r,e){let t=[];if(r.line&&t.push(...r.line),r.city||r.state||r.postalCode){let n=[];r.city&&n.push(r.city),r.state&&n.push(r.state),r.postalCode&&n.push(r.postalCode),t.push(n.join(", "))}return r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.join(e?.lineSeparator??", ").trim()}function xt(r,e){let t=[];return r.prefix&&e?.prefix!==!1&&t.push(...r.prefix),r.given&&t.push(...r.given),r.family&&t.push(r.family),r.suffix&&e?.suffix!==!1&&t.push(...r.suffix),r.use&&(e?.all||e?.use)&&t.push("["+r.use+"]"),t.join(" ").trim()}function Pn(r){let e=[];return r.given&&e.push(...r.given),e.join(" ").trim()}function Cn(r){return r.family??""}function We(r){return r instanceof Date&&!isNaN(r.getTime())}function wn(r,e,t){if(!r)return"";let n=new Date(r);return We(n)?(n.setUTCHours(0,0,0,0),n.toLocaleDateString(e,{timeZone:"UTC",...t})):""}function sr(r,e,t){if(!r)return"";let n=new Date("2000-01-01T"+r+"Z");return We(n)?n.toLocaleTimeString(e,t):""}function He(r,e,t){if(!r)return"";let n=new Date(r);return We(n)?n.toLocaleString(e,t):""}function kn(r,e,t){return!r||!r.start&&!r.end?"":He(r.start,e,t)+" - "+He(r.end,e,t)}var Dn={s:"every second",min:"every minute",h:"hourly",d:"daily",wk:"weekly",mo:"monthly",a:"annually"},In={s:"second",min:"minute",h:"hour",d:"day",wk:"week",mo:"month",a:"year"},On={s:"seconds",min:"minutes",h:"hours",d:"days",wk:"weeks",mo:"months",a:"years"};function Vn(r){if(!r)return"";let e=[];if(r.repeat?.periodUnit){let t=r.repeat.frequency??1,n=r.repeat.period??1,i=r.repeat.periodUnit;t===1&&n===1?e.push(Dn[i]):(t===1?e.push("once"):e.push(t+" times"),n===1?e.push("per "+In[i]):e.push("per "+n+" "+On[i])),r.repeat.dayOfWeek&&e.push("on "+r.repeat.dayOfWeek.map(b).join(", ")),r.repeat.timeOfDay&&e.push("at "+r.repeat.timeOfDay.map(o=>sr(o)).join(", "))}return r.event&&e.push(r.event.map(t=>He(t)).join(", ")),b(e.join(" ").trim())}function Un(r,e,t=!1){if(t&&e===void 0)throw new Error("Precision must be specified for exclusive ranges");let n=r?.low&&{...r.low,comparator:void 0},i=r?.high&&{...r.high,comparator:void 0};return n?.value===void 0&&i?.value===void 0?"":n?.value!==void 0&&i?.value===void 0?t&&e!==void 0?(n.value=Nn(n.value,e),`> ${W(n,e)}`):`>= ${W(n,e)}`:n?.value===void 0&&i?.value!==void 0?t&&e!==void 0?(i.value=_n(i.value,e),`< ${W(i,e)}`):`<= ${W(i,e)}`:(n?.unit===i?.unit&&delete n?.unit,`${W(n,e)} - ${W(i,e)}`)}function W(r,e){if(!r)return"";let t=[];return r.comparator&&(t.push(r.comparator),t.push(" ")),r.value!==void 0&&(e!==void 0?t.push(r.value.toFixed(e)):t.push(r.value)),r.unit&&(r.unit!=="%"&&t[t.length-1]!==" "&&t.push(" "),t.push(r.unit)),t.join("").trim()}function Ln(r){return r?.value===void 0?"":r.value.toLocaleString(void 0,{style:"currency",currency:r.currency??"USD",currencyDisplay:"narrowSymbol"})}function ar(r){return r?r.text?r.text:r.coding?r.coding.map(e=>cr(e)).join(", "):"":""}function cr(r){return r?.display??r?.code??""}function ur(r){return r?"component"in r?r.component.map(e=>ur(e)).join(" / "):r.valueQuantity?W(r.valueQuantity):r.valueCodeableConcept?ar(r.valueCodeableConcept):r.valueString?r.valueString:"":""}function _n(r,e,t=1){return(dr(r,e)+t)*Math.pow(10,-e)}function Nn(r,e,t=1){return(dr(r,e)-t)*Math.pow(10,-e)}function dr(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}function Y(r){let e=Tt(r),t=fr(r);return t===e?{reference:e}:{reference:e,display:t}}function Tt(r){return r.resourceType+"/"+r.id}function Mn(r){return r?.reference?.split("/")[1]}function pr(r){return r.resourceType==="Patient"||r.resourceType==="Practitioner"||r.resourceType==="RelatedPerson"}function fr(r){if(pr(r)){let e=Bn(r);if(e)return e}if(r.resourceType==="Device"){let e=Fn(r);if(e)return e}return r.resourceType==="Observation"&&"code"in r&&r.code?.text?r.code.text:r.resourceType==="User"&&r.email?r.email:"name"in r&&r.name&&typeof r.name=="string"?r.name:Tt(r)}function Bn(r){let e=r.name;if(e&&e.length>0)return xt(e[0])}function Fn(r){let e=r.deviceName;if(e&&e.length>0)return e[0].name}function qn(r){if(!("photo"in r))return;let e=r.photo;if(e)if(Array.isArray(e))for(let t of e){let n=lr(t);if(n)return n}else return lr(e)}function lr(r){if(r.url&&r.contentType&&r.contentType.startsWith("image/"))return r.url}function $n(r){return r?new Date(r):void 0}function de(r,e){let t=new Date(r);t.setUTCHours(0,0,0,0);let n=e?new Date(e):new Date;n.setUTCHours(0,0,0,0);let i=t.getUTCFullYear(),o=t.getUTCMonth(),s=t.getUTCDate(),a=n.getUTCFullYear(),c=n.getUTCMonth(),f=n.getUTCDate(),p=a-i;(c<o||c===o&&f<s)&&p--;let ce=a*12+c-(i*12+o);f<s&&ce--;let qe=Math.floor((n.getTime()-t.getTime())/(1e3*60*60*24));return{years:p,months:ce,days:qe}}function jn(r,e){let{years:t,months:n,days:i}=de(r,e);return t>=2?t.toString().padStart(3,"0")+"Y":n>=1?n.toString().padStart(3,"0")+"M":i.toString().padStart(3,"0")+"D"}function Qn(r){let e={};return mr(r.item,e),e}function mr(r,e){if(r)for(let t of r)t.linkId&&t.answer&&t.answer.length>0&&(e[t.linkId]=t.answer[0]),mr(t.item,e)}function Hn(r,e){let t=r.identifier;if(!t)return;let n=Array.isArray(t)?t:[t];for(let i of n)if(i.system===e)return i.value}function vt(r,...e){let t=r;for(let n=0;n<e.length&&t;n++)t=t?.extension?.find(i=>i.url===e[n]);return t?.valueString}function Wn(r,...e){let t=r;for(let n=0;n<e.length&&t;n++)t=t?.extension?.find(i=>i.url===e[n]);return t}function bt(r,e){return JSON.stringify(r,Gn,e?2:void 0)}function Gn(r,e){return!zn(r)&&v(e)?void 0:e}function zn(r){return!!/\d+$/.exec(r)}function v(r){if(r==null)return!0;let e=typeof r;return e==="string"&&r===""||e==="object"&&Object.keys(r).length===0}function le(r,e,t){return r===e||v(r)&&v(e)?!0:v(r)||v(e)?!1:Array.isArray(r)&&Array.isArray(e)?Kn(r,e):Array.isArray(r)||Array.isArray(e)?!1:F(r)&&F(e)?Jn(r,e,t):(F(r)||F(e),!1)}function Kn(r,e){if(r.length!==e.length)return!1;for(let t=0;t<r.length;t++)if(!le(r[t],e[t]))return!1;return!0}function Jn(r,e,t){let n=new Set;Object.keys(r).forEach(i=>n.add(i)),Object.keys(e).forEach(i=>n.add(i)),t==="meta"&&(n.delete("versionId"),n.delete("lastUpdated"),n.delete("author"));for(let i of n){let o=r[i],s=e[i];if(!le(o,s,i))return!1}return!0}function pe(r,e){return v(r)?!0:v(e)?!1:Array.isArray(r)&&Array.isArray(e)?Yn(r,e):Array.isArray(r)||Array.isArray(e)?!1:F(r)&&F(e)?Xn(r,e):F(r)||F(e)?!1:r===e}function Yn(r,e){return r.every(t=>e.some(n=>pe(t,n)))}function Xn(r,e){return Object.entries(r).every(([t,n])=>t in e&&pe(n,e[t]))}function Zn(r){return JSON.parse(JSON.stringify(r))}function ei(r){return!!/^\w{8}-\w{4}-\w{4}-\w{4}-\w{12}$/i.exec(r)}function F(r){return r!==null&&typeof r=="object"}function St(r){return r.every(e=>typeof e=="string")}var hr=[];for(let r=0;r<256;r++)hr.push(r.toString(16).padStart(2,"0"));function Rt(r){let e=new Uint8Array(r),t=new Array(e.length);for(let n=0;n<e.length;n++)t[n]=hr[e[n]];return t.join("")}function At(r){let e=new Uint8Array(r),t=[];for(let n=0;n<e.length;n++)t[n]=String.fromCharCode(e[n]);return window.btoa(t.join(""))}function b(r){return r.charAt(0).toUpperCase()+r.substring(1)}function fe(r){return r===r.toLowerCase()&&r!==r.toUpperCase()}function Ge(r,e){return r.coding?.find(t=>t.system===e)?.code}function ti(r,e,t){r.coding||(r.coding=[]);let n=r.coding.find(i=>i.system===e);n?n.code=t:r.coding.push({system:e,code:t})}function ri(r,e,t,n){return r.qualifiedInterval?.find(i=>yr(i,e)&&si(i,t,r.quantitativeDetails?.decimalPrecision)&&(n===void 0||i.category===n))}function ni(r,e,t){return r.qualifiedInterval?.find(n=>yr(n,e)&&t.includes(n.condition))}function yr(r,e){return ii(r,e)&&oi(r,e)}function ii(r,e){return!r.gender||r.gender===e.gender}function oi(r,e){return!r.age||Et(de(e.birthDate).years,r.age)}function si(r,e,t){return!!r.range&&Et(e,r.range,t)}function Et(r,e,t){return(e.low?.value===void 0||xr(r,e.low.value,t))&&(e.high?.value===void 0||gr(r,e.high.value,t))}function ai(r,e){return parseFloat(r.toFixed(e))}function ci(r,e,t){return I(r,t)===I(e,t)}function ui(r,e,t){return I(r,t)<I(e,t)}function di(r,e,t){return I(r,t)>I(e,t)}function gr(r,e,t){return I(r,t)<=I(e,t)}function xr(r,e,t){return I(r,t)>=I(e,t)}function I(r,e){return e===void 0?r:Math.round(r*Math.pow(10,e))}function li(r,e,t){return r.find(n=>typeof e=="string"?Ge(n.code||{},t)===e:Ge(n.code||{},t)===Ge(e,t))}function Pt(r){if(r)return Array.isArray(r)?r:[r]}var ze=r=>new Promise(e=>{setTimeout(e,r)});var q=(u=>(u.Address="Address",u.Age="Age",u.Annotation="Annotation",u.Attachment="Attachment",u.BackboneElement="BackboneElement",u.CodeableConcept="CodeableConcept",u.Coding="Coding",u.ContactDetail="ContactDetail",u.ContactPoint="ContactPoint",u.Contributor="Contributor",u.Count="Count",u.DataRequirement="DataRequirement",u.Distance="Distance",u.Dosage="Dosage",u.Duration="Duration",u.Expression="Expression",u.Extension="Extension",u.HumanName="HumanName",u.Identifier="Identifier",u.MarketingStatus="MarketingStatus",u.Meta="Meta",u.Money="Money",u.Narrative="Narrative",u.ParameterDefinition="ParameterDefinition",u.Period="Period",u.Population="Population",u.ProdCharacteristic="ProdCharacteristic",u.ProductShelfLife="ProductShelfLife",u.Quantity="Quantity",u.Range="Range",u.Ratio="Ratio",u.Reference="Reference",u.RelatedArtifact="RelatedArtifact",u.SampledData="SampledData",u.Signature="Signature",u.SubstanceAmount="SubstanceAmount",u.SystemString="http://hl7.org/fhirpath/System.String",u.Timing="Timing",u.TriggerDefinition="TriggerDefinition",u.UsageContext="UsageContext",u.base64Binary="base64Binary",u.boolean="boolean",u.canonical="canonical",u.code="code",u.date="date",u.dateTime="dateTime",u.decimal="decimal",u.id="id",u.instant="instant",u.integer="integer",u.markdown="markdown",u.oid="oid",u.positiveInt="positiveInt",u.string="string",u.time="time",u.unsignedInt="unsignedInt",u.uri="uri",u.url="url",u.uuid="uuid",u))(q||{});function pi(r){for(let e of r.entry){let t=e.resource;t.resourceType==="StructureDefinition"&&Ke(t)}}function Ke(r){if(!r.name)return;let t=r.snapshot?.element;t&&(t.forEach(n=>fi(r,n)),t.forEach(n=>mi(r,n)))}function fi(r,e){let t=e.path,n=e.type?.[0]?.code;if(n!==void 0&&n!=="Element"&&n!=="BackboneElement")return;let i=t.split(".");i[0]=r.name;let o=O(i),s=y.types[o];s||(y.types[o]=s={}),s.parentType=s.parentType??O(i.slice(0,i.length-1)),s.display=s.display??o,s.structureDefinition=s.structureDefinition??r,s.elementDefinition=s.elementDefinition??e,s.description=s.description??e.definition,s.properties=s.properties??{}}function mi(r,e){let n=e.path.split(".");if(n.length===1)return;n[0]=r.name;let i=O(n.slice(0,n.length-1)),o=y.types[i];if(!o)return;let s=n[n.length-1];o.properties[s]=e}function hi(r){for(let e of r.entry){let t=e.resource;t.resourceType==="SearchParameter"&&Je(t)}}function Je(r){for(let e of r.base??[]){let t=y.types[e];t&&(t.searchParams||(t.searchParams={_id:{base:[e],code:"_id",type:"token",expression:e+".id"},_lastUpdated:{base:[e],code:"_lastUpdated",type:"date",expression:e+".meta.lastUpdated"},_compartment:{base:[e],code:"_compartment",type:"reference",expression:e+".meta.compartment"},_profile:{base:[e],code:"_profile",type:"uri",expression:e+".meta.profile"},_security:{base:[e],code:"_security",type:"token",expression:e+".meta.security"},_source:{base:[e],code:"_source",type:"uri",expression:e+".meta.source"},_tag:{base:[e],code:"_tag",type:"token",expression:e+".meta.tag"}}),t.searchParams[r.code]=r)}}function yi(r){let e=r.type?.[0]?.code;return e==="BackboneElement"||e==="Element"?O(r.path?.split(".")):e}function O(r){return r.length===1?r[0]:r.map(b).join("")}function Tr(r){let e=r.structureDefinition;return e&&e.name===r.elementDefinition.path&&e.kind==="resource"&&!e.abstract}function gi(){let r=[];for(let[e,t]of Object.entries(y.types))Tr(t)&&r.push(e);return r}function xi(r){return y.types[r]}function Ti(r){return y.types[r].searchParams}function vi(r){return r.replaceAll("[x]","").split(".").pop().split(/(?=[A-Z])/).map(Si).join(" ").replace("_"," ").replace(/\s+/g," ")}var bi=new Set(["ID","IP","PKCE","JWKS","URI","URL"]);function Si(r){let e=r.toUpperCase();return bi.has(e)?e:e.charAt(0)+r.slice(1)}function X(r,e){let t=y.types[r];if(!t)return;let n=t.properties[e]??t.properties[e+"[x]"];if(n){if(n.contentReference){let i=n.contentReference.substring(1).split("."),o=i.pop(),s=O(i);return X(s,o)}return n}}function V(r){return!!(r&&typeof r=="object"&&"resourceType"in r)}function Ri(r){return!!(r&&typeof r=="object"&&"reference"in r)}var y=or;var Ai=20,Sr=(g=>(g.EQUALS="eq",g.NOT_EQUALS="ne",g.GREATER_THAN="gt",g.LESS_THAN="lt",g.GREATER_THAN_OR_EQUALS="ge",g.LESS_THAN_OR_EQUALS="le",g.STARTS_AFTER="sa",g.ENDS_BEFORE="eb",g.APPROXIMATELY="ap",g.CONTAINS="contains",g.EXACT="exact",g.TEXT="text",g.NOT="not",g.ABOVE="above",g.BELOW="below",g.IN="in",g.NOT_IN="not-in",g.OF_TYPE="of-type",g.MISSING="missing",g.IDENTIFIER="identifier",g.ITERATE="iterate",g))(Sr||{}),Rr={contains:"contains",exact:"exact",above:"above",below:"below",text:"text",not:"not",in:"in","not-in":"not-in","of-type":"of-type",missing:"missing",identifier:"identifier",iterate:"iterate"},Ct={eq:"eq",ne:"ne",lt:"lt",le:"le",gt:"gt",ge:"ge",sa:"sa",eb:"eb",ap:"ap"};function Ei(r,e){let t=[];for(let[n,i]of Object.entries(e))if(Array.isArray(i))for(let o of i)t.push([n,o]);else t.push([n,i??""]);return Ar(r,t)}function wt(r){let e=r.pathname.split("/").filter(Boolean).pop();return Ar(e,r.searchParams.entries())}function Pi(r){return wt(new URL(r,"https://example.com/"))}function kt(r){return wt(new URL(r,"https://api.medplum.com/"))}function Ar(r,e){let t={resourceType:r};for(let[n,i]of e)Ci(t,n,i);return t}function Ci(r,e,t){let n,i,o=e.indexOf(":");switch(o>=0?(n=e.substring(0,o),i=e.substring(o+1)):(n=e,i=""),n){case"_sort":wi(r,t);break;case"_count":r.count=parseInt(t,10);break;case"_offset":r.offset=parseInt(t,10);break;case"_total":r.total=t;break;case"_summary":r.total="accurate",r.count=0;break;case"_include":{let s=vr(t);i==="iterate"&&(s.modifier="iterate"),r.include?r.include.push(s):r.include=[s];break}case"_revinclude":{let s=vr(t);i==="iterate"&&(s.modifier="iterate"),r.revInclude?r.revInclude.push(s):r.revInclude=[s];break}case"_fields":r.fields=t.split(",");break;default:{let s=y.types[r.resourceType]?.searchParams?.[n];s?ki(r,s,i,t):Vi(r,n,i,t)}}}function wi(r,e){for(let t of e.split(",")){let n,i=!1;t.startsWith("-")?(n=t.substring(1),i=!0):n=t,r.sortRules||(r.sortRules=[]),r.sortRules.push({code:n,descending:i})}}function ki(r,e,t,n){if(t==="missing"){me(r,{code:e.code,operator:"missing",value:n});return}switch(e.type){case"number":case"date":Di(r,e,n);break;case"reference":case"string":case"token":case"uri":Ii(r,e,t,n);break;case"quantity":Oi(r,e,n);break;default:break}}function Di(r,e,t){let{operator:n,value:i}=Er(t);me(r,{code:e.code,operator:n,value:i})}function Ii(r,e,t,n){me(r,{code:e.code,operator:Ui(t),value:n})}function Oi(r,e,t){let[n,i,o]=t.split("|"),{operator:s,value:a}=Er(n);me(r,{code:e.code,operator:s,value:a,unitSystem:i,unitCode:o})}function Vi(r,e,t,n){let i="eq";if(t)i=t;else if(n.length>=2){let o=n.substring(0,2);o in Ct&&(n.length===2||n.at(2)?.match(/\d/))&&(i=o,n=n.substring(o.length))}me(r,{code:e,operator:i,value:n})}function Er(r){let e=r.substring(0,2),t=Ct[e];return t?{operator:t,value:r.substring(2)}:{operator:"eq",value:r}}function Ui(r){return Rr[r]??"eq"}function vr(r){let e=r.split(":");if(e.forEach(t=>{if(t==="*")throw new m(k("'*' is not supported as a value for search inclusion parameters"))}),e.length===1)throw new m(k(`Invalid include value '${r}': must be of the form ResourceType:search-parameter`));if(e.length===2)return{resourceType:e[0],searchParam:e[1]};if(e.length===3)return{resourceType:e[0],searchParam:e[1],targetType:e[2]};throw new m(k(`Invalid include value '${r}'`))}function me(r,e){r.filters?r.filters.push(e):r.filters=[e]}function Li(r){let e=[];return r.fields&&e.push("_fields="+r.fields.join(",")),r.filters&&r.filters.forEach(t=>e.push(_i(t))),r.sortRules&&r.sortRules.length>0&&e.push(Ni(r.sortRules)),r.offset!==void 0&&e.push("_offset="+r.offset),r.count!==void 0&&e.push("_count="+r.count),r.total!==void 0&&e.push("_total="+r.total),r.include&&r.include.forEach(t=>e.push(br("_include",t))),r.revInclude&&r.revInclude.forEach(t=>e.push(br("_revinclude",t))),e.length===0?"":(e.sort((t,n)=>t.localeCompare(n)),"?"+e.join("&"))}function _i(r){let e=r.operator in Rr?":"+r.operator:"",t=r.operator!=="eq"&&r.operator in Ct?r.operator:"";return`${r.code}${e}=${t}${encodeURIComponent(r.value)}`}function Ni(r){return"_sort="+r.map(e=>e.descending?"-"+e.code:e.code).join(",")}function br(r,e){return r+"="+e.resourceType+":"+e.searchParam+(e.targetType?":"+e.targetType:"")}var he=class{constructor(e,t){this.operator=e;this.child=t}toString(){return`${this.operator}(${this.child.toString()})`}},$=class{constructor(e,t,n){this.operator=e;this.left=t;this.right=n}toString(){return`${this.left.toString()} ${this.operator} ${this.right.toString()}`}},ye=class{constructor(){this.prefixParselets={};this.infixParselets={}}registerInfix(e,t){return this.infixParselets[e]=t,this}registerPrefix(e,t){return this.prefixParselets[e]=t,this}prefix(e,t,n){return this.registerPrefix(e,{parse(i,o){let s=i.consumeAndParse(t);return n(o,s)}})}infixLeft(e,t,n){return this.registerInfix(e,{parse(i,o,s){let a=i.consumeAndParse(t);return n(o,s,a)},precedence:t})}construct(e){return new Ye(e,this.prefixParselets,this.infixParselets)}},Ye=class{constructor(e,t,n){this.tokens=e,this.prefixParselets=t,this.infixParselets=n}hasMore(){return this.tokens.length>0}match(e){return this.peek()?.id!==e?!1:(this.consume(),!0)}consumeAndParse(e=1/0){let t=this.consume(),n=this.prefixParselets[t.id];if(!n)throw Error(`Parse error at "${t.value}" (line ${t.line}, column ${t.column}). No matching prefix parselet.`);let i=n.parse(this,t);for(;e>this.getPrecedence();){let o=this.consume();i=this.getInfixParselet(o).parse(this,i,o)}return i}getPrecedence(){let e=this.peek();if(!e)return 1/0;let t=this.getInfixParselet(e);return t?t.precedence:1/0}consume(e,t){if(!this.tokens.length)throw Error("Cant consume unknown more tokens.");if(e&&this.peek()?.id!==e){let n=this.peek();throw Error(`Expected ${e} but got "${n.id}" at line ${n.line} column ${n.column}.`)}if(t&&this.peek()?.value!==t){let n=this.peek();throw Error(`Expected "${t}" but got "${n.value}" at line ${n.line} column ${n.column}.`)}return this.tokens.shift()}peek(){return this.tokens.length>0?this.tokens[0]:void 0}removeComments(){this.tokens=this.tokens.filter(e=>e.id!=="Comment")}getInfixParselet(e){return this.infixParselets[e.id==="Symbol"?e.value:e.id]}};var Mi=["year","years","month","months","week","weeks","day","days","hour","hours","minute","minutes","second","seconds","millisecond","milliseconds"],j=class{constructor(e,t,n,i){this.result=[];this.pos={index:0,line:1,column:0};this.markStack=[];this.str=e,this.keywords=t,this.operators=n,this.dateTimeLiterals=!!i?.dateTimeLiterals,this.symbolRegex=i?.symbolRegex??/[$\w%]/}tokenize(){for(;this.pos.index<this.str.length;){let e=this.consumeToken();e&&this.result.push(e)}return this.result}prevToken(){return this.result.slice(-1)[0]}peekToken(){this.mark();let e=this.consumeToken();return this.reset(),e}consumeToken(){this.consumeWhitespace();let e=this.curr();if(!e)return;this.mark();let t=this.peek();return e==="/"&&t==="*"?this.consumeMultiLineComment():e==="/"&&t==="/"?this.consumeSingleLineComment():e==="'"||e==='"'?this.consumeString(e):e==="`"?this.consumeBacktickSymbol():e==="@"?this.consumeDateTime():/\d/.exec(e)?this.consumeNumber():/\w/.exec(e)?this.consumeSymbol():(e==="$"||e==="%")&&/\w/.exec(t)?this.consumeSymbol():this.consumeOperator()}consumeWhitespace(){this.consumeWhile(()=>/\s/.exec(this.curr()))}consumeMultiLineComment(){let e=this.pos.index;return this.consumeWhile(()=>this.curr()!=="*"||this.peek()!=="/"),this.advance(),this.advance(),this.buildToken("Comment",this.str.substring(e,this.pos.index))}consumeSingleLineComment(){return this.buildToken("Comment",this.consumeWhile(()=>this.curr()!==`
|
|
2
2
|
`))}consumeString(e){this.advance();let t=this.buildToken("String",this.consumeWhile(()=>this.prev()==="\\"||this.curr()!==e));return this.advance(),t}consumeBacktickSymbol(){this.advance();let e=this.buildToken("Symbol",this.consumeWhile(()=>this.curr()!=="`"));return this.advance(),e}consumeDateTime(){this.advance();let e=this.pos.index;return this.consumeWhile(()=>/[\d-]/.exec(this.curr())),this.curr()==="T"&&(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"?this.advance():(this.curr()==="+"||this.curr()==="-")&&(this.advance(),this.consumeWhile(()=>/[\d:]/.exec(this.curr())))),this.buildToken("DateTime",this.str.substring(e,this.pos.index))}consumeNumber(){let e=this.pos.index,t="Number";return this.consumeWhile(()=>/\d/.exec(this.curr())),this.curr()==="."&&/\d/.exec(this.peek())&&(this.advance(),this.consumeWhile(()=>/\d/.exec(this.curr()))),this.curr()==="-"&&this.dateTimeLiterals?(this.pos.index=e-1,this.consumeDateTime()):(this.curr()===" "&&Bi(this.peekToken())&&(t="Quantity",this.consumeToken()),this.buildToken(t,this.str.substring(e,this.pos.index)))}consumeSymbol(){let e=this.consumeWhile(()=>this.symbolRegex.exec(this.curr()));return this.prevToken()?.value!=="."&&this.keywords.includes(e)?this.buildToken(e,e):this.buildToken("Symbol",e)}consumeOperator(){let e=this.curr(),t=this.peek(),n=e+t;return this.operators.includes(n)?(this.advance(),this.advance(),this.buildToken(n,n)):(this.advance(),this.buildToken(e,e))}consumeWhile(e){let t=this.pos.index;for(;this.pos.index<this.str.length&&e();)this.advance();return this.str.substring(t,this.pos.index)}curr(){return this.str[this.pos.index]}prev(){return this.str[this.pos.index-1]??""}peek(){return this.str[this.pos.index+1]??""}mark(){this.markStack.push({...this.pos})}reset(){let e=this.markStack.pop();if(!e)throw new Error("No mark to reset to");this.pos.index=e.index,this.pos.line=e.line,this.pos.column=e.column}advance(){this.pos.index++,this.curr()===`
|
|
3
|
-
`?(this.pos.line++,this.pos.column=0):this.pos.column++}buildToken(e,t){let n=this.markStack.pop();if(!n)throw new Error("No mark for token");return{id:e,value:t,...n}}};function Bi(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&Mi.includes(r.value)))}function Z(r){if(r.startsWith("T"))return r+"T00:00:00.000Z".substring(r.length);if(r.length<=10)return r;try{return new Date(r).toISOString()}catch{return r}}function d(r){return[{type:"boolean",value:r}]}function x(r){return r==null?{type:"undefined",value:void 0}:Number.isSafeInteger(r)?{type:"integer",value:r}:typeof r=="number"?{type:"decimal",value:r}:typeof r=="boolean"?{type:"boolean",value:r}:typeof r=="string"?{type:"string",value:r}:S(r)?{type:"Quantity",value:r}:V(r)?{type:r.resourceType,value:r}:{type:"BackboneElement",value:r}}function U(r){return r.length===0?!1:!!r[0].value}function D(r,e){if(r.length!==0){if(r.length===1&&(!e||r[0].type===e))return r[0];throw new Error(`Expected singleton of type ${e}, but found ${JSON.stringify(r)}`)}}function E(r,e){if(!r.value)return;let t=X(r.type,e);return t?Fi(r,e,t):qi(r,e)}function Fi(r,e,t){let n=t.type;if(!n||n.length===0)return;let i,o="undefined";if(n.length===1)i=r.value[e],o=n[0].code;else for(let s of n){let a=e.replace("[x]","")+b(s.code);if(a in r.value){i=r.value[a],o=s.code;break}}if(!v(i))return(o==="Element"||o==="BackboneElement")&&(o=O(t.path?.split("."))),Array.isArray(i)?i.map(s=>Pr(s,o)):Pr(i,o)}function Pr(r,e){return e==="Resource"&&V(r)&&(e=r.resourceType),{type:e,value:r}}function qi(r,e){let t=r.value;if(!t||typeof t!="object")return;let n;if(e in t)n=t[e];else for(let i in q){let o=e+b(i);if(o in t){n=t[o];break}}if(!v(n))return Array.isArray(n)?n.map(x):x(n)}function ge(r){let e=[];for(let t of r){let n=!1;for(let i of e)if(U(Dt(t,i))){n=!0;break}n||e.push(t)}return e}function Xe(r){return d(!U(r))}function Ze(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?d(!1):d(r.every((t,n)=>U(Dt(t,e[n]))))}function Dt(r,e){let t=r.value,n=e.value;return typeof t=="number"&&typeof n=="number"?d(Math.abs(t-n)<1e-8):S(t)&&S(n)?d(It(t,n)):d(typeof t=="object"&&typeof n=="object"?Ot(r,e):t===n)}function et(r,e){return r.length===0&&e.length===0?d(!0):r.length!==e.length?d(!1):(r.sort(Cr),e.sort(Cr),d(r.every((t,n)=>U(kr(t,e[n])))))}function kr(r,e){let t=r.value,n=e.value;return typeof t=="number"&&typeof n=="number"?d(Math.abs(t-n)<.01):S(t)&&S(n)?d(It(t,n)):d(typeof t=="object"&&typeof n=="object"?Ot(t,n):typeof t=="string"&&typeof n=="string"?t.toLowerCase()===n.toLowerCase():t===n)}function Cr(r,e){let t=r.value,n=e.value;return typeof t=="number"&&typeof n=="number"?t-n:typeof t=="string"&&typeof n=="string"?t.localeCompare(n):0}function xe(r,e){let{value:t}=r;if(t==null)return!1;switch(e){case"Boolean":return typeof t=="boolean";case"Decimal":case"Integer":return typeof t=="number";case"Date":return typeof t=="string"&&!!/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t);case"DateTime":return typeof t=="string"&&!!/^\d{4}(-\d{2}(-\d{2})?)?T/.exec(t);case"Time":return typeof t=="string"&&!!/^T\d/.exec(t);case"Period":return Dr(t);case"Quantity":return S(t);default:return typeof t=="object"&&t?.resourceType===e}}function Dr(r){return!!(r&&typeof r=="object"&&"start"in r)}function S(r){return!!(r&&typeof r=="object"&&"value"in r&&typeof r.value=="number")}function It(r,e){return Math.abs(r.value-e.value)<.01&&(r.unit===e.unit||r.code===e.code||r.unit===e.code||r.code===e.unit)}function Ot(r,e){let t=Object.keys(r),n=Object.keys(e);if(t.length!==n.length)return!1;for(let i of t){let o=r[i],s=e[i];if(wr(o)&&wr(s)){if(!Ot(o,s))return!1}else if(o!==s)return!1}return!0}function wr(r){return r!==null&&typeof r=="object"}var Te=()=>[],R={empty:(r,e)=>d(e.length===0),exists:(r,e,t)=>t?d(e.filter(n=>U(t.eval(r,[n]))).length>0):d(e.length>0),all:(r,e,t)=>d(e.every(n=>U(t.eval(r,[n])))),allTrue:(r,e)=>{for(let t of e)if(!t.value)return d(!1);return d(!0)},anyTrue:(r,e)=>{for(let t of e)if(t.value)return d(!0);return d(!1)},allFalse:(r,e)=>{for(let t of e)if(t.value)return d(!1);return d(!0)},anyFalse:(r,e)=>{for(let t of e)if(!t.value)return d(!0);return d(!1)},subsetOf:Te,supersetOf:Te,count:(r,e)=>[{type:"integer",value:e.length}],distinct:(r,e)=>{let t=[];for(let n of e)t.some(i=>i.value===n.value)||t.push(n);return t},isDistinct:(r,e)=>d(e.length===R.distinct(r,e).length),where:(r,e,t)=>e.filter(n=>U(t.eval(r,[n]))),select:(r,e,t)=>e.map(n=>t.eval(r,[n])).flat(),repeat:Te,ofType:(r,e,t)=>e.filter(n=>n.type===t.name),single:(r,e)=>{if(e.length>1)throw new Error("Expected input length one for single()");return e.length===0?[]:e.slice(0,1)},first:(r,e)=>e.length===0?[]:e.slice(0,1),last:(r,e)=>e.length===0?[]:e.slice(e.length-1,e.length),tail:(r,e)=>e.length===0?[]:e.slice(1,e.length),skip:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new Error("Expected a number for skip(num)");return n>=e.length?[]:n<=0?e:e.slice(n,e.length)},take:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new Error("Expected a number for take(num)");return n>=e.length?e:n<=0?[]:e.slice(0,n)},intersect:(r,e,t)=>{if(!t)return e;let n=t.eval(r,e),i=[];for(let o of e)!i.some(s=>s.value===o.value)&&n.some(s=>s.value===o.value)&&i.push(o);return i},exclude:(r,e,t)=>{if(!t)return e;let n=t.eval(r,e),i=[];for(let o of e)n.some(s=>s.value===o.value)||i.push(o);return i},union:(r,e,t)=>{if(!t)return e;let n=t.eval(r,e);return ge([...e,...n])},combine:(r,e,t)=>{if(!t)return e;let n=t.eval(r,e);return[...e,...n]},htmlChecks:(r,e,t)=>[x(!0)],iif:(r,e,t,n,i)=>{let o=t.eval(r,e);if(o.length>1||o.length===1&&typeof o[0].value!="boolean")throw new Error("Expected criterion to evaluate to a Boolean");return U(o)?n.eval(r,e):i?i.eval(r,e):[]},toBoolean:(r,e)=>{if(e.length===0)return[];let[{value:t}]=_(e,1);if(typeof t=="boolean")return[{type:"boolean",value:t}];if(typeof t=="number"&&(t===0||t===1))return d(!!t);if(typeof t=="string"){let n=t.toLowerCase();if(["true","t","yes","y","1","1.0"].includes(n))return d(!0);if(["false","f","no","n","0","0.0"].includes(n))return d(!1)}return[]},convertsToBoolean:(r,e)=>e.length===0?[]:d(R.toBoolean(r,e).length===1),toInteger:(r,e)=>{if(e.length===0)return[];let[{value:t}]=_(e,1);return typeof t=="number"?[{type:"integer",value:t}]:typeof t=="string"&&/^[+-]?\d+$/.exec(t)?[{type:"integer",value:parseInt(t,10)}]:typeof t=="boolean"?[{type:"integer",value:t?1:0}]:[]},convertsToInteger:(r,e)=>e.length===0?[]:d(R.toInteger(r,e).length===1),toDate:(r,e)=>{if(e.length===0)return[];let[{value:t}]=_(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:"date",value:Z(t)}]:[]},convertsToDate:(r,e)=>e.length===0?[]:d(R.toDate(r,e).length===1),toDateTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=_(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:"dateTime",value:Z(t)}]:[]},convertsToDateTime:(r,e)=>e.length===0?[]:d(R.toDateTime(r,e).length===1),toDecimal:(r,e)=>{if(e.length===0)return[];let[{value:t}]=_(e,1);return typeof t=="number"?[{type:"decimal",value:t}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(t)?[{type:"decimal",value:parseFloat(t)}]:typeof t=="boolean"?[{type:"decimal",value:t?1:0}]:[]},convertsToDecimal:(r,e)=>e.length===0?[]:d(R.toDecimal(r,e).length===1),toQuantity:(r,e)=>{if(e.length===0)return[];let[{value:t}]=_(e,1);return S(t)?[{type:"Quantity",value:t}]:typeof t=="number"?[{type:"Quantity",value:{value:t,unit:"1"}}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(t)?[{type:"Quantity",value:{value:parseFloat(t),unit:"1"}}]:typeof t=="boolean"?[{type:"Quantity",value:{value:t?1:0,unit:"1"}}]:[]},convertsToQuantity:(r,e)=>e.length===0?[]:d(R.toQuantity(r,e).length===1),toString:(r,e)=>{if(e.length===0)return[];let[{value:t}]=_(e,1);return t==null?[]:S(t)?[{type:"string",value:`${t.value} '${t.unit}'`}]:[{type:"string",value:t.toString()}]},convertsToString:(r,e)=>e.length===0?[]:d(R.toString(r,e).length===1),toTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=_(e,1);if(typeof t=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(t);if(n)return[{type:"time",value:Z("T"+n[1])}]}return[]},convertsToTime:(r,e)=>e.length===0?[]:d(R.toTime(r,e).length===1),indexOf:(r,e,t)=>C((n,i)=>n.indexOf(i),r,e,t),substring:(r,e,t,n)=>C((i,o,s)=>{let a=o,c=s?a+s:i.length;return a<0||a>=i.length?void 0:i.substring(a,c)},r,e,t,n),startsWith:(r,e,t)=>C((n,i)=>n.startsWith(i),r,e,t),endsWith:(r,e,t)=>C((n,i)=>n.endsWith(i),r,e,t),contains:(r,e,t)=>C((n,i)=>n.includes(i),r,e,t),upper:(r,e)=>C(t=>t.toUpperCase(),r,e),lower:(r,e)=>C(t=>t.toLowerCase(),r,e),replace:(r,e,t,n)=>C((i,o,s)=>i.replaceAll(o,s),r,e,t,n),matches:(r,e,t)=>C((n,i)=>!!n.match(i),r,e,t),replaceMatches:(r,e,t,n)=>C((i,o,s)=>i.replaceAll(o,s),r,e,t,n),length:(r,e)=>C(t=>t.length,r,e),toChars:(r,e)=>C(t=>t?t.split(""):void 0,r,e),abs:(r,e)=>L(Math.abs,r,e),ceiling:(r,e)=>L(Math.ceil,r,e),exp:(r,e)=>L(Math.exp,r,e),floor:(r,e)=>L(Math.floor,r,e),ln:(r,e)=>L(Math.log,r,e),log:(r,e,t)=>L((n,i)=>Math.log(n)/Math.log(i),r,e,t),power:(r,e,t)=>L(Math.pow,r,e,t),round:(r,e)=>L(Math.round,r,e),sqrt:(r,e)=>L(Math.sqrt,r,e),truncate:(r,e)=>L(t=>t|0,r,e),children:Te,descendants:Te,trace:(r,e,t)=>(console.log("trace",e,t),e),now:()=>[{type:"dateTime",value:new Date().toISOString()}],timeOfDay:()=>[{type:"time",value:new Date().toISOString().substring(11)}],today:()=>[{type:"date",value:new Date().toISOString().substring(0,10)}],between:(r,e,t,n,i)=>{let o=R.toDateTime(r,t.eval(r,e));if(o.length===0)throw new Error("Invalid start date");let s=R.toDateTime(r,n.eval(r,e));if(s.length===0)throw new Error("Invalid end date");let a=i.eval(r,e)[0]?.value;if(a!=="years"&&a!=="months"&&a!=="days")throw new Error("Invalid units");let c=de(o[0].value,s[0].value);return[{type:"Quantity",value:{value:c[a],unit:a}}]},is:(r,e,t)=>{let n="";return t instanceof N?n=t.name:t instanceof Q&&(n=t.left.name+"."+t.right.name),n?e.map(i=>({type:"boolean",value:xe(i,n)})):[]},not:(r,e)=>R.toBoolean(r,e).map(t=>({type:"boolean",value:!t.value})),resolve:(r,e)=>e.map(t=>{let n=t.value,i;if(typeof n=="string")i=n;else if(typeof n=="object"){let o=n;if(o.resource)return x(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:"BackboneElement",value:void 0}}).filter(t=>!!t.value),as:(r,e)=>e,type:(r,e)=>e.map(({value:t})=>typeof t=="boolean"?{type:"BackboneElement",value:{namespace:"System",name:"Boolean"}}:typeof t=="number"?{type:"BackboneElement",value:{namespace:"System",name:"Integer"}}:V(t)?{type:"BackboneElement",value:{namespace:"FHIR",name:t.resourceType}}:{type:"BackboneElement",value:null}),conformsTo:(r,e,t)=>{let n=t.eval(r,e)[0].value;if(!n.startsWith("http://hl7.org/fhir/StructureDefinition/"))throw new Error("Expected a StructureDefinition URL");let i=n.replace("http://hl7.org/fhir/StructureDefinition/","");return e.map(o=>({type:"boolean",value:o.value?.resourceType===i}))}};function C(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=_(t,1);if(typeof i!="string")throw new Error("String function cannot be called with non-string");let o=r(i,...n.map(s=>s?.eval(e,t)[0]?.value));return o===void 0?[]:Array.isArray(o)?o.map(x):[x(o)]}function L(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=_(t,1),o=S(i),s=o?i.value:i;if(typeof s!="number")throw new Error("Math function cannot be called with non-number");let a=r(s,...n.map(p=>p.eval(e,t)[0]?.value)),c=o?"Quantity":t[0].type,f=o?{...i,value:a}:a;return[{type:c,value:f}]}function _(r,e){if(r.length!==e)throw new Error(`Expected ${e} arguments`);for(let t of r)if(t==null)throw new Error("Expected non-null argument");return r}var ve=class{constructor(e,t){this.original=e;this.child=t}eval(e,t){try{return t.length>0?t.map(n=>this.child.eval(e,[n])).flat():this.child.eval(e,[])}catch(n){throw new Error(`FhirPathError on "${this.original}": ${n}`)}}toString(){return this.child.toString()}},w=class{constructor(e){this.value=e}eval(){return[this.value]}toString(){let e=this.value.value;return typeof e=="string"?`'${e}'`:e.toString()}},N=class{constructor(e){this.name=e}eval(e,t){if(this.name==="$this")return t;if(this.name.startsWith("%")){let n=e.variables[this.name.slice(1)];if(!n)throw new Error(`Undefined variable ${this.name}`);return[n]}return t.flatMap(n=>this.evalValue(n)).filter(n=>n?.value!==void 0)}evalValue(e){let t=e.value;if(!(!t||typeof t!="object"))return V(t)&&t.resourceType===this.name?e:E(e,this.name)}toString(){return this.name}},be=class{eval(){return[]}toString(){return"{}"}},Se=class extends he{constructor(t,n,i){super(t,n);this.impl=i}eval(t,n){return this.impl(this.child.eval(t,n))}toString(){return this.operator+this.child.toString()}},G=class extends ${constructor(e,t){super("as",e,t)}eval(e,t){return R.ofType(e,this.left.eval(e,t),this.right)}},T=class extends ${},A=class extends T{constructor(t,n,i,o){super(t,n,i);this.impl=o}eval(t,n){let i=this.left.eval(t,n);if(i.length!==1)return[];let o=this.right.eval(t,n);if(o.length!==1)return[];let s=i[0].value,a=o[0].value,c=S(s)?s.value:s,f=S(a)?a.value:a,p=this.impl(c,f);return typeof p=="boolean"?d(p):S(s)?[{type:"Quantity",value:{...s,value:p}}]:[x(p)]}},Re=class extends ${constructor(e,t){super("&",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t),o=[...n,...i];return o.length>0&&o.every(s=>typeof s.value=="string")?[{type:"string",value:o.map(s=>s.value).join("")}]:o}},Ae=class extends T{constructor(e,t){super("contains",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return d(n.some(o=>o.value===i[0].value))}},Ee=class extends T{constructor(e,t){super("in",e,t)}eval(e,t){let n=D(this.left.eval(e,t)),i=this.right.eval(e,t);return n?d(i.some(o=>o.value===n.value)):[]}},Q=class extends ${constructor(e,t){super(".",e,t)}eval(e,t){return this.right.eval(e,this.left.eval(e,t))}toString(){return`${this.left.toString()}.${this.right.toString()}`}},J=class extends ${constructor(e,t){super("|",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return ge([...n,...i])}},Pe=class extends T{constructor(e,t){super("=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Ze(n,i)}},Ce=class extends T{constructor(e,t){super("!=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Xe(Ze(n,i))}},we=class extends T{constructor(e,t){super("~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return et(n,i)}},ke=class extends T{constructor(e,t){super("!~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Xe(et(n,i))}},z=class extends T{constructor(e,t){super("is",e,t)}eval(e,t){let n=this.left.eval(e,t);if(n.length!==1)return[];let i=this.right.name;return d(xe(n[0],i))}},De=class extends T{constructor(e,t){super("and",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return n?.value===!0&&i?.value===!0?d(!0):n?.value===!1||i?.value===!1?d(!1):[]}},Ie=class extends T{constructor(e,t){super("or",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return n?.value===!1&&i?.value===!1?d(!1):n?.value||i?.value?d(!0):[]}},Oe=class extends T{constructor(e,t){super("xor",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return!n||!i?[]:d(n.value!==i.value)}},Ve=class extends T{constructor(e,t){super("implies",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return i?.value===!0||n?.value===!1?d(!0):!n||!i?[]:d(!1)}},M=class{constructor(e,t){this.name=e;this.args=t}eval(e,t){let n=R[this.name];if(!n)throw new Error("Unrecognized function: "+this.name);return n(e,t,...this.args)}toString(){return`${this.name}(${this.args.map(e=>e.toString()).join(", ")})`}},K=class{constructor(e,t){this.left=e;this.expr=t}eval(e,t){let n=this.expr.eval(e,t);if(n.length!==1)return[];let i=n[0].value;if(typeof i!="number")throw new Error("Invalid indexer expression: should return integer}");let o=this.left.eval(e,t);return i in o?[o[i]]:[]}toString(){return`${this.left.toString()}[${this.expr.toString()}]`}};var ee=["true","false"],te=["!=","!~","<=",">=","{}","->"];function Vt(r){return new j(r,ee,te).tokenize()}var l={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},$i={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},ji={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new K(e,t)},precedence:l.Indexer},Qi={parse(r,e){if(!(e instanceof N))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new M(e.name,t)},precedence:l.FunctionCall};function Hi(r){let e=r.split(" "),t=parseFloat(e[0]),n=e[1];return n?.startsWith("'")&&n.endsWith("'")?n=n.substring(1,n.length-1):n="{"+n+"}",{value:t,unit:n}}function re(){return new ye().registerPrefix("String",{parse:(r,e)=>new w({type:"string",value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new w({type:"dateTime",value:Z(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new w({type:"Quantity",value:Hi(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new w({type:"decimal",value:parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new w({type:"boolean",value:!0})}).registerPrefix("false",{parse:()=>new w({type:"boolean",value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new N(e.value)}).registerPrefix("{}",{parse:()=>new be}).registerPrefix("(",$i).registerInfix("[",ji).registerInfix("(",Qi).prefix("+",l.UnaryAdd,(r,e)=>new Se("+",e,t=>t)).prefix("-",l.UnarySubtract,(r,e)=>new A("-",e,e,(t,n)=>-n)).infixLeft(".",l.Dot,(r,e,t)=>new Q(r,t)).infixLeft("/",l.Divide,(r,e,t)=>new A("/",r,t,(n,i)=>n/i)).infixLeft("*",l.Multiply,(r,e,t)=>new A("*",r,t,(n,i)=>n*i)).infixLeft("+",l.Add,(r,e,t)=>new A("+",r,t,(n,i)=>n+i)).infixLeft("-",l.Subtract,(r,e,t)=>new A("-",r,t,(n,i)=>n-i)).infixLeft("|",l.Union,(r,e,t)=>new J(r,t)).infixLeft("=",l.Equals,(r,e,t)=>new Pe(r,t)).infixLeft("!=",l.NotEquals,(r,e,t)=>new Ce(r,t)).infixLeft("~",l.Equivalent,(r,e,t)=>new we(r,t)).infixLeft("!~",l.NotEquivalent,(r,e,t)=>new ke(r,t)).infixLeft("<",l.LessThan,(r,e,t)=>new A("<",r,t,(n,i)=>n<i)).infixLeft("<=",l.LessThanOrEquals,(r,e,t)=>new A("<=",r,t,(n,i)=>n<=i)).infixLeft(">",l.GreaterThan,(r,e,t)=>new A(">",r,t,(n,i)=>n>i)).infixLeft(">=",l.GreaterThanOrEquals,(r,e,t)=>new A(">=",r,t,(n,i)=>n>=i)).infixLeft("&",l.Ampersand,(r,e,t)=>new Re(r,t)).infixLeft("and",l.And,(r,e,t)=>new De(r,t)).infixLeft("as",l.As,(r,e,t)=>new G(r,t)).infixLeft("contains",l.Contains,(r,e,t)=>new Ae(r,t)).infixLeft("div",l.Divide,(r,e,t)=>new A("div",r,t,(n,i)=>n/i|0)).infixLeft("in",l.In,(r,e,t)=>new Ee(r,t)).infixLeft("is",l.Is,(r,e,t)=>new z(r,t)).infixLeft("mod",l.Modulo,(r,e,t)=>new A("mod",r,t,(n,i)=>n%i)).infixLeft("or",l.Or,(r,e,t)=>new Ie(r,t)).infixLeft("xor",l.Xor,(r,e,t)=>new Oe(r,t)).infixLeft("implies",l.Implies,(r,e,t)=>new Ve(r,t))}var Wi=re();function tt(r){return new ve(r,Wi.construct(Vt(r)).consumeAndParse())}function ne(r,e){let t=Array.isArray(e)?e:[e];for(let n=0;n<t.length;n++){let i=t[n];typeof i=="object"&&"type"in i&&"value"in i||(t[n]=x(t[n]))}return rt(r,t).map(n=>n.value)}function rt(r,e,t){let n=t||{};return tt(r).eval({variables:n},e)}var Lt=(p=>(p.BOOLEAN="BOOLEAN",p.NUMBER="NUMBER",p.QUANTITY="QUANTITY",p.TEXT="TEXT",p.REFERENCE="REFERENCE",p.CANONICAL="CANONICAL",p.DATE="DATE",p.DATETIME="DATETIME",p.PERIOD="PERIOD",p.UUID="UUID",p))(Lt||{});function _t(r,e){let t=y.types[r].searchParamsDetails?.[e.code];return t||(t=zi(r,e)),t}function Gi(r,e,t){let n=y.types[r];n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=t}function zi(r,e){let t=e.code,n=Yi(t),i=Nt(r,e.expression),o={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let a of i){let c=Ue(a);c.length===1&&c[0]instanceof T?o.propertyTypes.add("boolean"):Ir(o,Ue(a),r,1)}let s={columnName:n,type:Xi(e,o.propertyTypes),elementDefinitions:o.elementDefinitions,array:o.array};return Gi(r,t,s),s}function Ir(r,e,t,n){let i=e[n];if(i instanceof G){r.propertyTypes.add(i.right.toString());return}if(i instanceof M){Ki(r,i);return}let o=i.toString(),s=X(t,o);if(!s)throw new Error(`Element definition not found for ${t} ${o}`);let a=!1,c=n+1;if(c<e.length&&e[c]instanceof K&&(a=!0,c++),s.max!=="0"&&s.max!=="1"&&!a&&(r.array=!0),c>=e.length){r.elementDefinitions.push(s);for(let f of s.type)r.propertyTypes.add(f.code);return}for(let f of s.type){let p=f.code;Ji(p)&&(p=O(s.path?.split("."))),Ir(r,e,p,c)}}function Ki(r,e){if(e.name==="as"){r.propertyTypes.add(e.args[0].toString());return}if(e.name==="resolve"){r.propertyTypes.add("string");return}if(e.name==="where"&&e.args[0]instanceof z){r.propertyTypes.add(e.args[0].right.toString());return}throw new Error(`Unhandled FHIRPath function: ${e.name}`)}function Ji(r){return r==="Element"||r==="BackboneElement"}function Yi(r){return r.split("-").reduce((e,t,n)=>e+(n?b(t):t),"")}function Xi(r,e){switch(r.type){case"date":return e.size===1&&e.has("date")?"DATE":"DATETIME";case"number":return"NUMBER";case"quantity":return"QUANTITY";case"reference":return e.has("canonical")?"CANONICAL":"REFERENCE";case"token":return e.size===1&&e.has("boolean")?"BOOLEAN":"TEXT";default:return"TEXT"}}function Nt(r,e){let t=[],n=tt(e);return Ut(r,n.child,t),t}function Zi(r,e){let t=Nt(r,e);if(t.length!==0)return t.map(n=>n.toString()).join(" | ")}function Ut(r,e,t){e instanceof J?(Ut(r,e.left,t),Ut(r,e.right,t)):e.toString().startsWith(r+".")&&t.push(e)}function Ue(r){return r instanceof G||r instanceof K?[Ue(r.left),r].flat():r instanceof T?[r]:r instanceof Q?[Ue(r.left),Ue(r.right)].flat():r instanceof M&&r.name==="where"&&!(r.args[0]instanceof z)?[]:[r]}function Bt(r,e){if(e.resourceType!==r.resourceType)return!1;if(e.filters){for(let t of e.filters)if(!eo(r,e,t))return!1}return!0}function eo(r,e,t){let n=y.types[e.resourceType].searchParams?.[t.code];switch(n?.type){case"reference":return to(r,t,n);case"string":case"uri":return Or(r,t,n);case"token":return ro(r,t,n);case"date":return io(r,t,n);default:return!1}}function to(r,e,t){let n=ne(t.expression,r),i=nt(e.operator);if(e.value===""&&n.length===0)return e.operator==="eq";let o=n.map(s=>typeof s=="string"?s:s.reference);for(let s of e.value.split(",")){let a=o.includes(s);if(!a&&e.code==="_compartment"&&(a=o.some(c=>c?.endsWith("/"+s))),a)return!i}return i}function ro(r,e,t){return _t(r.resourceType,t).type==="BOOLEAN"?no(r,e,t):Or(r,e,t,!0)}function no(r,e,t){let n=ne(t.expression,r),i=e.value==="true",o=n.includes(i);return nt(e.operator)?!o:o}function Or(r,e,t,n){let i=ne(t.expression,r),o=e.value.split(","),s=nt(e.operator);for(let a of i)for(let c of o)if(Mt(a,e.operator,c,n))return!s;return s}function Mt(r,e,t,n){if(n&&t.includes("|")){let[o,s]=t.split("|");return Mt(r,e,o,!1)&&(!s||Mt(r,e,s,!1))}let i="";return r&&(typeof r=="string"?i=r:typeof r=="object"&&(i=JSON.stringify(r))),i.toLowerCase().includes(t.toLowerCase())}function io(r,e,t){let n=ne(t.expression,r),i=e.value.split(","),o=nt(e.operator);for(let s of n)for(let a of i)if(oo(s,e.operator,a))return!o;return o}function oo(r,e,t){switch(e){case"sa":case"gt":return r>t;case"ge":return r>=t;case"eb":case"lt":return r<t;case"le":return r<=t;case"eq":case"ne":return r===t;default:return!1}}function nt(r){return r==="ne"||r==="not"}var Vr=["CapabilityStatement","CompartmentDefinition","ImplementationGuide","OperationDefinition","SearchParameter","StructureDefinition"],Ur=["DomainConfiguration","JsonWebKey","Login","User"],Lr=["PasswordChangeRequest","Project","ProjectMembership"];function so(r,e){if(r.resource){for(let t of r.resource)if(Ft(t.resourceType,e))return!0}return!1}function _r(r,e){if(Ur.includes(e)||Vr.includes(e))return!1;if(r.resource){for(let t of r.resource)if(Ft(t.resourceType,e)&&!t.readonly)return!0}return!1}function ao(r,e){let t=e.resourceType;return _r(r,t)?Nr(r,e,!1):!1}function Nr(r,e,t){if(r.resource){for(let n of r.resource)if(co(e,n,t))return!0}return!1}function co(r,e,t){let n=r.resourceType;return!(!Ft(e.resourceType,n)||!t&&e.readonly||e.compartment&&!r.meta?.compartment?.find(i=>i.reference===e.compartment?.reference)||e.criteria&&!Bt(r,kt(e.criteria)))}function Ft(r,e){return r===e||r==="*"&&!Lr.includes(e)}function qt(r){if(typeof window<"u")return window.atob(r);if(typeof Buffer<"u")return Buffer.from(r,"base64").toString("binary");throw new Error("Unable to decode base64")}function $t(r){if(typeof window<"u")return window.btoa(r);if(typeof Buffer<"u")return Buffer.from(r,"binary").toString("base64");throw new Error("Unable to encode base64")}function uo(r){for(let n of r.entry||[])delete n.resource?.meta,n.fullUrl="urn:uuid:"+n.resource?.id,delete n.resource?.id;let e=r.entry,t=JSON.stringify({resourceType:"Bundle",type:"transaction",entry:e?.map(n=>({fullUrl:n.fullUrl,request:{method:"POST",url:n.resource.resourceType},resource:n.resource}))},lo,2);return JSON.parse(t)}function lo(r,e){return r==="reference"&&typeof e=="string"&&e.includes("/")?"urn:uuid:"+e.split("/")[1]:e}var Le=class{constructor(e=10){this.max=e,this.cache=new Map}clear(){this.cache.clear()}get(e){let t=this.cache.get(e);return t&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size>=this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}delete(e){this.cache.delete(e)}keys(){return this.cache.keys()}first(){return this.cache.keys().next().value}};function jt(){let r=new Uint32Array(28);return crypto.getRandomValues(r),Rt(r.buffer)}async function Mr(r){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(r))}function po(r){let e=r.replace(/-/g,"+").replace(/_/g,"/"),t=qt(e),n=Array.from(t).reduce((o,s)=>{let a=("00"+s.charCodeAt(0).toString(16)).slice(-2);return`${o}%${a}`},""),i=decodeURIComponent(n);return JSON.parse(i)}function it(r){let[e,t,n]=r.split(".");return po(t)}function Qt(r){try{return typeof it(r).login_id=="string"}catch{return!1}}var fo,P=class{constructor(e){this[fo]="ReadablePromise";this.status="pending";this.suspender=e.then(t=>(this.status="success",this.response=t,t),t=>{throw this.status="error",this.error=t,t})}isPending(){return this.status==="pending"}isOk(){return this.status==="success"}read(){switch(this.status){case"pending":throw this.suspender;case"error":throw this.error;default:return this.response}}then(e,t){return this.suspender.then(e,t)}catch(e){return this.suspender.catch(e)}finally(e){return this.suspender.finally(e)}};fo=Symbol.toStringTag;var _e=class{constructor(){this.storage=typeof localStorage<"u"?localStorage:new ot}clear(){this.storage.clear()}getString(e){return this.storage.getItem(e)??void 0}setString(e,t){t?this.storage.setItem(e,t):this.storage.removeItem(e)}getObject(e){let t=this.getString(e);return t?JSON.parse(t):void 0}setObject(e,t){this.setString(e,t?bt(t):void 0)}},ot=class{constructor(){this.data=new Map}get length(){return this.data.size}clear(){this.data.clear()}getItem(e){return this.data.get(e)??null}setItem(e,t){t?this.data.set(e,t):this.data.delete(e)}removeItem(e){this.data.delete(e)}key(e){return Array.from(this.data.keys())[e]}};var mo="2.0.27-f7222e0",ho="https://api.medplum.com/",yo=1e3,go=6e4,xo="application/json",Br="application/fhir+json",To="application/json-patch+json",Fr={resourceType:"Device",id:"system",deviceName:[{name:"System"}]},Hr=(o=>(o.ClientCredentials="client_credentials",o.AuthorizationCode="authorization_code",o.RefreshToken="refresh_token",o.JwtBearer="urn:ietf:params:oauth:grant-type:jwt-bearer",o.TokenExchange="urn:ietf:params:oauth:grant-type:token-exchange",o))(Hr||{}),Wr=(o=>(o.AccessToken="urn:ietf:params:oauth:token-type:access_token",o.RefreshToken="urn:ietf:params:oauth:token-type:refresh_token",o.IdToken="urn:ietf:params:oauth:token-type:id_token",o.Saml1Token="urn:ietf:params:oauth:token-type:saml1",o.Saml2Token="urn:ietf:params:oauth:token-type:saml2",o))(Wr||{}),Ht=class extends EventTarget{constructor(t){super();if(t?.baseUrl&&!t.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");this.fetch=t?.fetch??vo(),this.storage=t?.storage??new _e,this.createPdfImpl=t?.createPdf,this.baseUrl=$r(t?.baseUrl)??ho,this.fhirBaseUrl=this.baseUrl+($r(t?.fhirUrlPath)??"fhir/R4/"),this.clientId=t?.clientId??"",this.authorizeUrl=t?.authorizeUrl??this.baseUrl+"oauth2/authorize",this.tokenUrl=t?.tokenUrl??this.baseUrl+"oauth2/token",this.logoutUrl=t?.logoutUrl??this.baseUrl+"oauth2/logout",this.onUnauthenticated=t?.onUnauthenticated,this.cacheTime=t?.cacheTime??go,this.cacheTime>0?this.requestCache=new Le(t?.resourceCacheSize??yo):this.requestCache=void 0,t?.autoBatchTime?(this.autoBatchTime=t.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0);let n=this.getActiveLogin();n&&(this.setAccessToken(n.accessToken,n.refreshToken),this.refreshProfile().catch(console.log)),this.setupStorageListener()}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}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.sessionDetails=void 0,this.medplumServer=void 0,this.dispatchEvent(new Event("change"))}invalidateUrl(t){t=t.toString(),this.requestCache?.delete(t)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(t){let n=this.fhirBaseUrl+t;if(this.requestCache)for(let i of this.requestCache.keys())(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache.delete(i)}get(t,n={}){t=t.toString();let i=this.getCacheEntry(t,n);if(i)return i.value;let o;t.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue?o=new Promise((a,c)=>{this.autoBatchQueue.push({method:"GET",url:t.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:c}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):o=this.request("GET",t,n);let s=new P(o);return this.setCacheEntry(t,s),s}post(t,n,i,o={}){return t=t.toString(),n&&this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("POST",t,o)}put(t,n,i,o={}){return t=t.toString(),n&&this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("PUT",t,o)}patch(t,n,i={}){return t=t.toString(),this.setRequestBody(i,n),this.setRequestContentType(i,To),this.invalidateUrl(t),this.request("PATCH",t,i)}delete(t,n){return t=t.toString(),this.invalidateUrl(t),this.request("DELETE",t,n)}async startNewUser(t,n){let{codeChallengeMethod:i,codeChallenge:o}=await this.startPkce();return this.post("auth/newuser",{...t,clientId:t.clientId??this.clientId,codeChallengeMethod:i,codeChallenge:o},void 0,n)}async startNewProject(t,n){return this.post("auth/newproject",t,void 0,n)}async startNewPatient(t,n){return this.post("auth/newpatient",t,void 0,n)}async startLogin(t,n){return this.post("auth/login",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async startGoogleLogin(t,n){return this.post("auth/google",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async ensureCodeChallenge(t){return t.codeChallenge?t:{...t,...await this.startPkce()}}async signOut(){await this.post(this.logoutUrl,{}),this.clear()}async signInWithRedirect(t){let i=new URLSearchParams(window.location.search).get("code");if(i)return this.processCode(i);await this.requestAuthorization(t)}signOutWithRedirect(){window.location.assign(this.logoutUrl)}async signInWithExternalAuth(t,n,i,o){let s=await this.ensureCodeChallenge(o);window.location.assign(this.getExternalAuthRedirectUri(t,n,i,s))}async exchangeExternalAccessToken(t,n){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");let i=new URLSearchParams;return i.set("grant_type","urn:ietf:params:oauth:grant-type:token-exchange"),i.set("subject_token_type","urn:ietf:params:oauth:token-type:access_token"),i.set("client_id",n),i.set("subject_token",t),this.fetchTokens(i)}getExternalAuthRedirectUri(t,n,i,o){let s=new URL(t);return s.searchParams.set("response_type","code"),s.searchParams.set("client_id",n),s.searchParams.set("redirect_uri",i),s.searchParams.set("scope","openid profile email"),s.searchParams.set("state",JSON.stringify(o)),s.toString()}fhirUrl(...t){return new URL(this.fhirBaseUrl+t.join("/"))}fhirSearchUrl(t,n){let i=this.fhirUrl(t);return n&&(i.search=new URLSearchParams(n).toString()),i}search(t,n,i){let o=this.fhirSearchUrl(t,n),s=o.toString()+"-search",a=this.getCacheEntry(s,i);if(a)return a.value;let c=new P((async()=>{let f=await this.get(o,i);if(f.entry)for(let p of f.entry)this.cacheResource(p.resource);return f})());return this.setCacheEntry(s,c),c}searchOne(t,n,i){let o=this.fhirSearchUrl(t,n);o.searchParams.set("_count","1"),o.searchParams.sort();let s=o.toString()+"-searchOne",a=this.getCacheEntry(s,i);if(a)return a.value;let c=new P(this.search(t,o.searchParams,i).then(f=>f.entry?.[0]?.resource));return this.setCacheEntry(s,c),c}searchResources(t,n,i){let s=this.fhirSearchUrl(t,n).toString()+"-searchResources",a=this.getCacheEntry(s,i);if(a)return a.value;let c=new P(this.search(t,n,i).then(Qr));return this.setCacheEntry(s,c),c}async*searchResourcePages(t,n,i){let o=this.fhirSearchUrl(t,n);for(;o;){let s=new URL(o).searchParams,a=await this.search(t,s,i),c=a.link?.find(f=>f.relation==="next");if(!a.entry?.length&&!c)break;yield Qr(a),o=c?.url?new URL(c.url):void 0}}searchValueSet(t,n,i){let o=this.fhirUrl("ValueSet","$expand");return o.searchParams.set("url",t),o.searchParams.set("filter",n),this.get(o.toString(),i)}getCached(t,n){let i=this.requestCache?.get(this.fhirUrl(t,n).toString())?.value;return i?.isOk()?i.read():void 0}getCachedReference(t){let n=t.reference;if(!n)return;if(n==="system")return Fr;let[i,o]=n.split("/");if(!(!i||!o))return this.getCached(i,o)}readResource(t,n,i){return this.get(this.fhirUrl(t,n),i)}readReference(t,n){let i=t.reference;if(!i)return new P(Promise.reject(new Error("Missing reference")));if(i==="system")return new P(Promise.resolve(Fr));let[o,s]=i.split("/");return!o||!s?new P(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}getSchema(){return y}requestSchema(t){if(t in y.types)return Promise.resolve(y);let n=t+"-requestSchema",i=this.getCacheEntry(n,void 0);if(i)return i.value;let o=new P((async()=>{let s=`{
|
|
3
|
+
`?(this.pos.line++,this.pos.column=0):this.pos.column++}buildToken(e,t){let n=this.markStack.pop();if(!n)throw new Error("No mark for token");return{id:e,value:t,...n}}};function Bi(r){return!!(r&&(r.id==="String"||r.id==="Symbol"&&Mi.includes(r.value)))}function Z(r){if(r.startsWith("T"))return r+"T00:00:00.000Z".substring(r.length);if(r.length<=10)return r;try{return new Date(r).toISOString()}catch{return r}}function d(r){return[{type:"boolean",value:r}]}function x(r){return r==null?{type:"undefined",value:void 0}:Number.isSafeInteger(r)?{type:"integer",value:r}:typeof r=="number"?{type:"decimal",value:r}:typeof r=="boolean"?{type:"boolean",value:r}:typeof r=="string"?{type:"string",value:r}:S(r)?{type:"Quantity",value:r}:V(r)?{type:r.resourceType,value:r}:{type:"BackboneElement",value:r}}function U(r){return r.length===0?!1:!!r[0].value}function D(r,e){if(r.length!==0){if(r.length===1&&(!e||r[0].type===e))return r[0];throw new Error(`Expected singleton of type ${e}, but found ${JSON.stringify(r)}`)}}function E(r,e){if(!r.value)return;let t=X(r.type,e);return t?Fi(r,e,t):qi(r,e)}function Fi(r,e,t){let n=t.type;if(!n||n.length===0)return;let i,o="undefined";if(n.length===1)i=r.value[e],o=n[0].code;else for(let s of n){let a=e.replace("[x]","")+b(s.code);if(a in r.value){i=r.value[a],o=s.code;break}}if(!v(i))return(o==="Element"||o==="BackboneElement")&&(o=O(t.path?.split("."))),Array.isArray(i)?i.map(s=>Pr(s,o)):Pr(i,o)}function Pr(r,e){return e==="Resource"&&V(r)&&(e=r.resourceType),{type:e,value:r}}function qi(r,e){let t=r.value;if(!t||typeof t!="object")return;let n;if(e in t)n=t[e];else for(let i in q){let o=e+b(i);if(o in t){n=t[o];break}}if(!v(n))return Array.isArray(n)?n.map(x):x(n)}function ge(r){let e=[];for(let t of r){let n=!1;for(let i of e)if(U(Dt(t,i))){n=!0;break}n||e.push(t)}return e}function Xe(r){return d(!U(r))}function Ze(r,e){return r.length===0||e.length===0?[]:r.length!==e.length?d(!1):d(r.every((t,n)=>U(Dt(t,e[n]))))}function Dt(r,e){let t=r.value,n=e.value;return typeof t=="number"&&typeof n=="number"?d(Math.abs(t-n)<1e-8):S(t)&&S(n)?d(It(t,n)):d(typeof t=="object"&&typeof n=="object"?Ot(r,e):t===n)}function et(r,e){return r.length===0&&e.length===0?d(!0):r.length!==e.length?d(!1):(r.sort(Cr),e.sort(Cr),d(r.every((t,n)=>U(kr(t,e[n])))))}function kr(r,e){let t=r.value,n=e.value;return typeof t=="number"&&typeof n=="number"?d(Math.abs(t-n)<.01):S(t)&&S(n)?d(It(t,n)):d(typeof t=="object"&&typeof n=="object"?Ot(t,n):typeof t=="string"&&typeof n=="string"?t.toLowerCase()===n.toLowerCase():t===n)}function Cr(r,e){let t=r.value,n=e.value;return typeof t=="number"&&typeof n=="number"?t-n:typeof t=="string"&&typeof n=="string"?t.localeCompare(n):0}function xe(r,e){let{value:t}=r;if(t==null)return!1;switch(e){case"Boolean":return typeof t=="boolean";case"Decimal":case"Integer":return typeof t=="number";case"Date":return typeof t=="string"&&!!/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t);case"DateTime":return typeof t=="string"&&!!/^\d{4}(-\d{2}(-\d{2})?)?T/.exec(t);case"Time":return typeof t=="string"&&!!/^T\d/.exec(t);case"Period":return Dr(t);case"Quantity":return S(t);default:return typeof t=="object"&&t?.resourceType===e}}function Dr(r){return!!(r&&typeof r=="object"&&"start"in r)}function S(r){return!!(r&&typeof r=="object"&&"value"in r&&typeof r.value=="number")}function It(r,e){return Math.abs(r.value-e.value)<.01&&(r.unit===e.unit||r.code===e.code||r.unit===e.code||r.code===e.unit)}function Ot(r,e){let t=Object.keys(r),n=Object.keys(e);if(t.length!==n.length)return!1;for(let i of t){let o=r[i],s=e[i];if(wr(o)&&wr(s)){if(!Ot(o,s))return!1}else if(o!==s)return!1}return!0}function wr(r){return r!==null&&typeof r=="object"}var Te=()=>[],R={empty:(r,e)=>d(e.length===0),exists:(r,e,t)=>t?d(e.filter(n=>U(t.eval(r,[n]))).length>0):d(e.length>0),all:(r,e,t)=>d(e.every(n=>U(t.eval(r,[n])))),allTrue:(r,e)=>{for(let t of e)if(!t.value)return d(!1);return d(!0)},anyTrue:(r,e)=>{for(let t of e)if(t.value)return d(!0);return d(!1)},allFalse:(r,e)=>{for(let t of e)if(t.value)return d(!1);return d(!0)},anyFalse:(r,e)=>{for(let t of e)if(!t.value)return d(!0);return d(!1)},subsetOf:Te,supersetOf:Te,count:(r,e)=>[{type:"integer",value:e.length}],distinct:(r,e)=>{let t=[];for(let n of e)t.some(i=>i.value===n.value)||t.push(n);return t},isDistinct:(r,e)=>d(e.length===R.distinct(r,e).length),where:(r,e,t)=>e.filter(n=>U(t.eval(r,[n]))),select:(r,e,t)=>e.map(n=>t.eval(r,[n])).flat(),repeat:Te,ofType:(r,e,t)=>e.filter(n=>n.type===t.name),single:(r,e)=>{if(e.length>1)throw new Error("Expected input length one for single()");return e.length===0?[]:e.slice(0,1)},first:(r,e)=>e.length===0?[]:e.slice(0,1),last:(r,e)=>e.length===0?[]:e.slice(e.length-1,e.length),tail:(r,e)=>e.length===0?[]:e.slice(1,e.length),skip:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new Error("Expected a number for skip(num)");return n>=e.length?[]:n<=0?e:e.slice(n,e.length)},take:(r,e,t)=>{let n=t.eval(r,e)[0]?.value;if(typeof n!="number")throw new Error("Expected a number for take(num)");return n>=e.length?e:n<=0?[]:e.slice(0,n)},intersect:(r,e,t)=>{if(!t)return e;let n=t.eval(r,e),i=[];for(let o of e)!i.some(s=>s.value===o.value)&&n.some(s=>s.value===o.value)&&i.push(o);return i},exclude:(r,e,t)=>{if(!t)return e;let n=t.eval(r,e),i=[];for(let o of e)n.some(s=>s.value===o.value)||i.push(o);return i},union:(r,e,t)=>{if(!t)return e;let n=t.eval(r,e);return ge([...e,...n])},combine:(r,e,t)=>{if(!t)return e;let n=t.eval(r,e);return[...e,...n]},htmlChecks:(r,e,t)=>[x(!0)],iif:(r,e,t,n,i)=>{let o=t.eval(r,e);if(o.length>1||o.length===1&&typeof o[0].value!="boolean")throw new Error("Expected criterion to evaluate to a Boolean");return U(o)?n.eval(r,e):i?i.eval(r,e):[]},toBoolean:(r,e)=>{if(e.length===0)return[];let[{value:t}]=_(e,1);if(typeof t=="boolean")return[{type:"boolean",value:t}];if(typeof t=="number"&&(t===0||t===1))return d(!!t);if(typeof t=="string"){let n=t.toLowerCase();if(["true","t","yes","y","1","1.0"].includes(n))return d(!0);if(["false","f","no","n","0","0.0"].includes(n))return d(!1)}return[]},convertsToBoolean:(r,e)=>e.length===0?[]:d(R.toBoolean(r,e).length===1),toInteger:(r,e)=>{if(e.length===0)return[];let[{value:t}]=_(e,1);return typeof t=="number"?[{type:"integer",value:t}]:typeof t=="string"&&/^[+-]?\d+$/.exec(t)?[{type:"integer",value:parseInt(t,10)}]:typeof t=="boolean"?[{type:"integer",value:t?1:0}]:[]},convertsToInteger:(r,e)=>e.length===0?[]:d(R.toInteger(r,e).length===1),toDate:(r,e)=>{if(e.length===0)return[];let[{value:t}]=_(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:"date",value:Z(t)}]:[]},convertsToDate:(r,e)=>e.length===0?[]:d(R.toDate(r,e).length===1),toDateTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=_(e,1);return typeof t=="string"&&/^\d{4}(-\d{2}(-\d{2})?)?/.exec(t)?[{type:"dateTime",value:Z(t)}]:[]},convertsToDateTime:(r,e)=>e.length===0?[]:d(R.toDateTime(r,e).length===1),toDecimal:(r,e)=>{if(e.length===0)return[];let[{value:t}]=_(e,1);return typeof t=="number"?[{type:"decimal",value:t}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?$/.exec(t)?[{type:"decimal",value:parseFloat(t)}]:typeof t=="boolean"?[{type:"decimal",value:t?1:0}]:[]},convertsToDecimal:(r,e)=>e.length===0?[]:d(R.toDecimal(r,e).length===1),toQuantity:(r,e)=>{if(e.length===0)return[];let[{value:t}]=_(e,1);return S(t)?[{type:"Quantity",value:t}]:typeof t=="number"?[{type:"Quantity",value:{value:t,unit:"1"}}]:typeof t=="string"&&/^-?\d{1,9}(\.\d{1,9})?/.exec(t)?[{type:"Quantity",value:{value:parseFloat(t),unit:"1"}}]:typeof t=="boolean"?[{type:"Quantity",value:{value:t?1:0,unit:"1"}}]:[]},convertsToQuantity:(r,e)=>e.length===0?[]:d(R.toQuantity(r,e).length===1),toString:(r,e)=>{if(e.length===0)return[];let[{value:t}]=_(e,1);return t==null?[]:S(t)?[{type:"string",value:`${t.value} '${t.unit}'`}]:[{type:"string",value:t.toString()}]},convertsToString:(r,e)=>e.length===0?[]:d(R.toString(r,e).length===1),toTime:(r,e)=>{if(e.length===0)return[];let[{value:t}]=_(e,1);if(typeof t=="string"){let n=/^T?(\d{2}(:\d{2}(:\d{2})?)?)/.exec(t);if(n)return[{type:"time",value:Z("T"+n[1])}]}return[]},convertsToTime:(r,e)=>e.length===0?[]:d(R.toTime(r,e).length===1),indexOf:(r,e,t)=>C((n,i)=>n.indexOf(i),r,e,t),substring:(r,e,t,n)=>C((i,o,s)=>{let a=o,c=s?a+s:i.length;return a<0||a>=i.length?void 0:i.substring(a,c)},r,e,t,n),startsWith:(r,e,t)=>C((n,i)=>n.startsWith(i),r,e,t),endsWith:(r,e,t)=>C((n,i)=>n.endsWith(i),r,e,t),contains:(r,e,t)=>C((n,i)=>n.includes(i),r,e,t),upper:(r,e)=>C(t=>t.toUpperCase(),r,e),lower:(r,e)=>C(t=>t.toLowerCase(),r,e),replace:(r,e,t,n)=>C((i,o,s)=>i.replaceAll(o,s),r,e,t,n),matches:(r,e,t)=>C((n,i)=>!!n.match(i),r,e,t),replaceMatches:(r,e,t,n)=>C((i,o,s)=>i.replaceAll(o,s),r,e,t,n),length:(r,e)=>C(t=>t.length,r,e),toChars:(r,e)=>C(t=>t?t.split(""):void 0,r,e),abs:(r,e)=>L(Math.abs,r,e),ceiling:(r,e)=>L(Math.ceil,r,e),exp:(r,e)=>L(Math.exp,r,e),floor:(r,e)=>L(Math.floor,r,e),ln:(r,e)=>L(Math.log,r,e),log:(r,e,t)=>L((n,i)=>Math.log(n)/Math.log(i),r,e,t),power:(r,e,t)=>L(Math.pow,r,e,t),round:(r,e)=>L(Math.round,r,e),sqrt:(r,e)=>L(Math.sqrt,r,e),truncate:(r,e)=>L(t=>t|0,r,e),children:Te,descendants:Te,trace:(r,e,t)=>(console.log("trace",e,t),e),now:()=>[{type:"dateTime",value:new Date().toISOString()}],timeOfDay:()=>[{type:"time",value:new Date().toISOString().substring(11)}],today:()=>[{type:"date",value:new Date().toISOString().substring(0,10)}],between:(r,e,t,n,i)=>{let o=R.toDateTime(r,t.eval(r,e));if(o.length===0)throw new Error("Invalid start date");let s=R.toDateTime(r,n.eval(r,e));if(s.length===0)throw new Error("Invalid end date");let a=i.eval(r,e)[0]?.value;if(a!=="years"&&a!=="months"&&a!=="days")throw new Error("Invalid units");let c=de(o[0].value,s[0].value);return[{type:"Quantity",value:{value:c[a],unit:a}}]},is:(r,e,t)=>{let n="";return t instanceof N?n=t.name:t instanceof Q&&(n=t.left.name+"."+t.right.name),n?e.map(i=>({type:"boolean",value:xe(i,n)})):[]},not:(r,e)=>R.toBoolean(r,e).map(t=>({type:"boolean",value:!t.value})),resolve:(r,e)=>e.map(t=>{let n=t.value,i;if(typeof n=="string")i=n;else if(typeof n=="object"){let o=n;if(o.resource)return x(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:"BackboneElement",value:void 0}}).filter(t=>!!t.value),as:(r,e)=>e,type:(r,e)=>e.map(({value:t})=>typeof t=="boolean"?{type:"BackboneElement",value:{namespace:"System",name:"Boolean"}}:typeof t=="number"?{type:"BackboneElement",value:{namespace:"System",name:"Integer"}}:V(t)?{type:"BackboneElement",value:{namespace:"FHIR",name:t.resourceType}}:{type:"BackboneElement",value:null}),conformsTo:(r,e,t)=>{let n=t.eval(r,e)[0].value;if(!n.startsWith("http://hl7.org/fhir/StructureDefinition/"))throw new Error("Expected a StructureDefinition URL");let i=n.replace("http://hl7.org/fhir/StructureDefinition/","");return e.map(o=>({type:"boolean",value:o.value?.resourceType===i}))}};function C(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=_(t,1);if(typeof i!="string")throw new Error("String function cannot be called with non-string");let o=r(i,...n.map(s=>s?.eval(e,t)[0]?.value));return o===void 0?[]:Array.isArray(o)?o.map(x):[x(o)]}function L(r,e,t,...n){if(t.length===0)return[];let[{value:i}]=_(t,1),o=S(i),s=o?i.value:i;if(typeof s!="number")throw new Error("Math function cannot be called with non-number");let a=r(s,...n.map(p=>p.eval(e,t)[0]?.value)),c=o?"Quantity":t[0].type,f=o?{...i,value:a}:a;return[{type:c,value:f}]}function _(r,e){if(r.length!==e)throw new Error(`Expected ${e} arguments`);for(let t of r)if(t==null)throw new Error("Expected non-null argument");return r}var ve=class{constructor(e,t){this.original=e;this.child=t}eval(e,t){try{return t.length>0?t.map(n=>this.child.eval(e,[n])).flat():this.child.eval(e,[])}catch(n){throw new Error(`FhirPathError on "${this.original}": ${n}`)}}toString(){return this.child.toString()}},w=class{constructor(e){this.value=e}eval(){return[this.value]}toString(){let e=this.value.value;return typeof e=="string"?`'${e}'`:e.toString()}},N=class{constructor(e){this.name=e}eval(e,t){if(this.name==="$this")return t;if(this.name.startsWith("%")){let n=e.variables[this.name.slice(1)];if(!n)throw new Error(`Undefined variable ${this.name}`);return[n]}return t.flatMap(n=>this.evalValue(n)).filter(n=>n?.value!==void 0)}evalValue(e){let t=e.value;if(!(!t||typeof t!="object"))return V(t)&&t.resourceType===this.name?e:E(e,this.name)}toString(){return this.name}},be=class{eval(){return[]}toString(){return"{}"}},Se=class extends he{constructor(t,n,i){super(t,n);this.impl=i}eval(t,n){return this.impl(this.child.eval(t,n))}toString(){return this.operator+this.child.toString()}},G=class extends ${constructor(e,t){super("as",e,t)}eval(e,t){return R.ofType(e,this.left.eval(e,t),this.right)}},T=class extends ${},A=class extends T{constructor(t,n,i,o){super(t,n,i);this.impl=o}eval(t,n){let i=this.left.eval(t,n);if(i.length!==1)return[];let o=this.right.eval(t,n);if(o.length!==1)return[];let s=i[0].value,a=o[0].value,c=S(s)?s.value:s,f=S(a)?a.value:a,p=this.impl(c,f);return typeof p=="boolean"?d(p):S(s)?[{type:"Quantity",value:{...s,value:p}}]:[x(p)]}},Re=class extends ${constructor(e,t){super("&",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t),o=[...n,...i];return o.length>0&&o.every(s=>typeof s.value=="string")?[{type:"string",value:o.map(s=>s.value).join("")}]:o}},Ae=class extends T{constructor(e,t){super("contains",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return d(n.some(o=>o.value===i[0].value))}},Ee=class extends T{constructor(e,t){super("in",e,t)}eval(e,t){let n=D(this.left.eval(e,t)),i=this.right.eval(e,t);return n?d(i.some(o=>o.value===n.value)):[]}},Q=class extends ${constructor(e,t){super(".",e,t)}eval(e,t){return this.right.eval(e,this.left.eval(e,t))}toString(){return`${this.left.toString()}.${this.right.toString()}`}},J=class extends ${constructor(e,t){super("|",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return ge([...n,...i])}},Pe=class extends T{constructor(e,t){super("=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Ze(n,i)}},Ce=class extends T{constructor(e,t){super("!=",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Xe(Ze(n,i))}},we=class extends T{constructor(e,t){super("~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return et(n,i)}},ke=class extends T{constructor(e,t){super("!~",e,t)}eval(e,t){let n=this.left.eval(e,t),i=this.right.eval(e,t);return Xe(et(n,i))}},z=class extends T{constructor(e,t){super("is",e,t)}eval(e,t){let n=this.left.eval(e,t);if(n.length!==1)return[];let i=this.right.name;return d(xe(n[0],i))}},De=class extends T{constructor(e,t){super("and",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return n?.value===!0&&i?.value===!0?d(!0):n?.value===!1||i?.value===!1?d(!1):[]}},Ie=class extends T{constructor(e,t){super("or",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return n?.value===!1&&i?.value===!1?d(!1):n?.value||i?.value?d(!0):[]}},Oe=class extends T{constructor(e,t){super("xor",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return!n||!i?[]:d(n.value!==i.value)}},Ve=class extends T{constructor(e,t){super("implies",e,t)}eval(e,t){let n=D(this.left.eval(e,t),"boolean"),i=D(this.right.eval(e,t),"boolean");return i?.value===!0||n?.value===!1?d(!0):!n||!i?[]:d(!1)}},M=class{constructor(e,t){this.name=e;this.args=t}eval(e,t){let n=R[this.name];if(!n)throw new Error("Unrecognized function: "+this.name);return n(e,t,...this.args)}toString(){return`${this.name}(${this.args.map(e=>e.toString()).join(", ")})`}},K=class{constructor(e,t){this.left=e;this.expr=t}eval(e,t){let n=this.expr.eval(e,t);if(n.length!==1)return[];let i=n[0].value;if(typeof i!="number")throw new Error("Invalid indexer expression: should return integer}");let o=this.left.eval(e,t);return i in o?[o[i]]:[]}toString(){return`${this.left.toString()}[${this.expr.toString()}]`}};var ee=["true","false"],te=["!=","!~","<=",">=","{}","->"];function Vt(r){return new j(r,ee,te).tokenize()}var l={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},$i={parse(r){let e=r.consumeAndParse();if(!r.match(")"))throw new Error("Parse error: expected `)` got `"+r.peek()?.value+"`");return e}},ji={parse(r,e){let t=r.consumeAndParse();if(!r.match("]"))throw new Error("Parse error: expected `]`");return new K(e,t)},precedence:l.Indexer},Qi={parse(r,e){if(!(e instanceof N))throw new Error("Unexpected parentheses");let t=[];for(;!r.match(")");)t.push(r.consumeAndParse()),r.match(",");return new M(e.name,t)},precedence:l.FunctionCall};function Hi(r){let e=r.split(" "),t=parseFloat(e[0]),n=e[1];return n?.startsWith("'")&&n.endsWith("'")?n=n.substring(1,n.length-1):n="{"+n+"}",{value:t,unit:n}}function re(){return new ye().registerPrefix("String",{parse:(r,e)=>new w({type:"string",value:e.value})}).registerPrefix("DateTime",{parse:(r,e)=>new w({type:"dateTime",value:Z(e.value)})}).registerPrefix("Quantity",{parse:(r,e)=>new w({type:"Quantity",value:Hi(e.value)})}).registerPrefix("Number",{parse:(r,e)=>new w({type:"decimal",value:parseFloat(e.value)})}).registerPrefix("true",{parse:()=>new w({type:"boolean",value:!0})}).registerPrefix("false",{parse:()=>new w({type:"boolean",value:!1})}).registerPrefix("Symbol",{parse:(r,e)=>new N(e.value)}).registerPrefix("{}",{parse:()=>new be}).registerPrefix("(",$i).registerInfix("[",ji).registerInfix("(",Qi).prefix("+",l.UnaryAdd,(r,e)=>new Se("+",e,t=>t)).prefix("-",l.UnarySubtract,(r,e)=>new A("-",e,e,(t,n)=>-n)).infixLeft(".",l.Dot,(r,e,t)=>new Q(r,t)).infixLeft("/",l.Divide,(r,e,t)=>new A("/",r,t,(n,i)=>n/i)).infixLeft("*",l.Multiply,(r,e,t)=>new A("*",r,t,(n,i)=>n*i)).infixLeft("+",l.Add,(r,e,t)=>new A("+",r,t,(n,i)=>n+i)).infixLeft("-",l.Subtract,(r,e,t)=>new A("-",r,t,(n,i)=>n-i)).infixLeft("|",l.Union,(r,e,t)=>new J(r,t)).infixLeft("=",l.Equals,(r,e,t)=>new Pe(r,t)).infixLeft("!=",l.NotEquals,(r,e,t)=>new Ce(r,t)).infixLeft("~",l.Equivalent,(r,e,t)=>new we(r,t)).infixLeft("!~",l.NotEquivalent,(r,e,t)=>new ke(r,t)).infixLeft("<",l.LessThan,(r,e,t)=>new A("<",r,t,(n,i)=>n<i)).infixLeft("<=",l.LessThanOrEquals,(r,e,t)=>new A("<=",r,t,(n,i)=>n<=i)).infixLeft(">",l.GreaterThan,(r,e,t)=>new A(">",r,t,(n,i)=>n>i)).infixLeft(">=",l.GreaterThanOrEquals,(r,e,t)=>new A(">=",r,t,(n,i)=>n>=i)).infixLeft("&",l.Ampersand,(r,e,t)=>new Re(r,t)).infixLeft("and",l.And,(r,e,t)=>new De(r,t)).infixLeft("as",l.As,(r,e,t)=>new G(r,t)).infixLeft("contains",l.Contains,(r,e,t)=>new Ae(r,t)).infixLeft("div",l.Divide,(r,e,t)=>new A("div",r,t,(n,i)=>n/i|0)).infixLeft("in",l.In,(r,e,t)=>new Ee(r,t)).infixLeft("is",l.Is,(r,e,t)=>new z(r,t)).infixLeft("mod",l.Modulo,(r,e,t)=>new A("mod",r,t,(n,i)=>n%i)).infixLeft("or",l.Or,(r,e,t)=>new Ie(r,t)).infixLeft("xor",l.Xor,(r,e,t)=>new Oe(r,t)).infixLeft("implies",l.Implies,(r,e,t)=>new Ve(r,t))}var Wi=re();function tt(r){return new ve(r,Wi.construct(Vt(r)).consumeAndParse())}function ne(r,e){let t=Array.isArray(e)?e:[e];for(let n=0;n<t.length;n++){let i=t[n];typeof i=="object"&&"type"in i&&"value"in i||(t[n]=x(t[n]))}return rt(r,t).map(n=>n.value)}function rt(r,e,t){let n=t||{};return tt(r).eval({variables:n},e)}var Lt=(p=>(p.BOOLEAN="BOOLEAN",p.NUMBER="NUMBER",p.QUANTITY="QUANTITY",p.TEXT="TEXT",p.REFERENCE="REFERENCE",p.CANONICAL="CANONICAL",p.DATE="DATE",p.DATETIME="DATETIME",p.PERIOD="PERIOD",p.UUID="UUID",p))(Lt||{});function _t(r,e){let t=y.types[r].searchParamsDetails?.[e.code];return t||(t=zi(r,e)),t}function Gi(r,e,t){let n=y.types[r];n.searchParamsDetails||(n.searchParamsDetails={}),n.searchParamsDetails[e]=t}function zi(r,e){let t=e.code,n=Yi(t),i=Nt(r,e.expression),o={elementDefinitions:[],propertyTypes:new Set,array:!1};for(let a of i){let c=Ue(a);c.length===1&&c[0]instanceof T?o.propertyTypes.add("boolean"):Ir(o,Ue(a),r,1)}let s={columnName:n,type:Xi(e,o.propertyTypes),elementDefinitions:o.elementDefinitions,array:o.array};return Gi(r,t,s),s}function Ir(r,e,t,n){let i=e[n];if(i instanceof G){r.propertyTypes.add(i.right.toString());return}if(i instanceof M){Ki(r,i);return}let o=i.toString(),s=X(t,o);if(!s)throw new Error(`Element definition not found for ${t} ${o}`);let a=!1,c=n+1;if(c<e.length&&e[c]instanceof K&&(a=!0,c++),s.max!=="0"&&s.max!=="1"&&!a&&(r.array=!0),c>=e.length){r.elementDefinitions.push(s);for(let f of s.type)r.propertyTypes.add(f.code);return}for(let f of s.type){let p=f.code;Ji(p)&&(p=O(s.path?.split("."))),Ir(r,e,p,c)}}function Ki(r,e){if(e.name==="as"){r.propertyTypes.add(e.args[0].toString());return}if(e.name==="resolve"){r.propertyTypes.add("string");return}if(e.name==="where"&&e.args[0]instanceof z){r.propertyTypes.add(e.args[0].right.toString());return}throw new Error(`Unhandled FHIRPath function: ${e.name}`)}function Ji(r){return r==="Element"||r==="BackboneElement"}function Yi(r){return r.split("-").reduce((e,t,n)=>e+(n?b(t):t),"")}function Xi(r,e){switch(r.type){case"date":return e.size===1&&e.has("date")?"DATE":"DATETIME";case"number":return"NUMBER";case"quantity":return"QUANTITY";case"reference":return e.has("canonical")?"CANONICAL":"REFERENCE";case"token":return e.size===1&&e.has("boolean")?"BOOLEAN":"TEXT";default:return"TEXT"}}function Nt(r,e){let t=[],n=tt(e);return Ut(r,n.child,t),t}function Zi(r,e){let t=Nt(r,e);if(t.length!==0)return t.map(n=>n.toString()).join(" | ")}function Ut(r,e,t){e instanceof J?(Ut(r,e.left,t),Ut(r,e.right,t)):e.toString().startsWith(r+".")&&t.push(e)}function Ue(r){return r instanceof G||r instanceof K?[Ue(r.left),r].flat():r instanceof T?[r]:r instanceof Q?[Ue(r.left),Ue(r.right)].flat():r instanceof M&&r.name==="where"&&!(r.args[0]instanceof z)?[]:[r]}function Bt(r,e){if(e.resourceType!==r.resourceType)return!1;if(e.filters){for(let t of e.filters)if(!eo(r,e,t))return!1}return!0}function eo(r,e,t){let n=y.types[e.resourceType].searchParams?.[t.code];switch(n?.type){case"reference":return to(r,t,n);case"string":case"uri":return Or(r,t,n);case"token":return ro(r,t,n);case"date":return io(r,t,n);default:return!1}}function to(r,e,t){let n=ne(t.expression,r),i=nt(e.operator);if(e.value===""&&n.length===0)return e.operator==="eq";let o=n.map(s=>typeof s=="string"?s:s.reference);for(let s of e.value.split(",")){let a=o.includes(s);if(!a&&e.code==="_compartment"&&(a=o.some(c=>c?.endsWith("/"+s))),a)return!i}return i}function ro(r,e,t){return _t(r.resourceType,t).type==="BOOLEAN"?no(r,e,t):Or(r,e,t,!0)}function no(r,e,t){let n=ne(t.expression,r),i=e.value==="true",o=n.includes(i);return nt(e.operator)?!o:o}function Or(r,e,t,n){let i=ne(t.expression,r),o=e.value.split(","),s=nt(e.operator);for(let a of i)for(let c of o)if(Mt(a,e.operator,c,n))return!s;return s}function Mt(r,e,t,n){if(n&&t.includes("|")){let[o,s]=t.split("|");return Mt(r,e,o,!1)&&(!s||Mt(r,e,s,!1))}let i="";return r&&(typeof r=="string"?i=r:typeof r=="object"&&(i=JSON.stringify(r))),i.toLowerCase().includes(t.toLowerCase())}function io(r,e,t){let n=ne(t.expression,r),i=e.value.split(","),o=nt(e.operator);for(let s of n)for(let a of i)if(oo(s,e.operator,a))return!o;return o}function oo(r,e,t){switch(e){case"sa":case"gt":return r>t;case"ge":return r>=t;case"eb":case"lt":return r<t;case"le":return r<=t;case"eq":case"ne":return r===t;default:return!1}}function nt(r){return r==="ne"||r==="not"}var Vr=["CapabilityStatement","CompartmentDefinition","ImplementationGuide","OperationDefinition","SearchParameter","StructureDefinition"],Ur=["DomainConfiguration","JsonWebKey","Login","User"],Lr=["PasswordChangeRequest","Project","ProjectMembership"];function so(r,e){if(r.resource){for(let t of r.resource)if(Ft(t.resourceType,e))return!0}return!1}function _r(r,e){if(Ur.includes(e)||Vr.includes(e))return!1;if(r.resource){for(let t of r.resource)if(Ft(t.resourceType,e)&&!t.readonly)return!0}return!1}function ao(r,e){let t=e.resourceType;return _r(r,t)?Nr(r,e,!1):!1}function Nr(r,e,t){if(r.resource){for(let n of r.resource)if(co(e,n,t))return!0}return!1}function co(r,e,t){let n=r.resourceType;return!(!Ft(e.resourceType,n)||!t&&e.readonly||e.compartment&&!r.meta?.compartment?.find(i=>i.reference===e.compartment?.reference)||e.criteria&&!Bt(r,kt(e.criteria)))}function Ft(r,e){return r===e||r==="*"&&!Lr.includes(e)}function qt(r){if(typeof window<"u")return window.atob(r);if(typeof Buffer<"u")return Buffer.from(r,"base64").toString("binary");throw new Error("Unable to decode base64")}function $t(r){if(typeof window<"u")return window.btoa(r);if(typeof Buffer<"u")return Buffer.from(r,"binary").toString("base64");throw new Error("Unable to encode base64")}function uo(r){for(let n of r.entry||[])delete n.resource?.meta,n.fullUrl="urn:uuid:"+n.resource?.id,delete n.resource?.id;let e=r.entry,t=JSON.stringify({resourceType:"Bundle",type:"transaction",entry:e?.map(n=>({fullUrl:n.fullUrl,request:{method:"POST",url:n.resource.resourceType},resource:n.resource}))},lo,2);return JSON.parse(t)}function lo(r,e){return r==="reference"&&typeof e=="string"&&e.includes("/")?"urn:uuid:"+e.split("/")[1]:e}var Le=class{constructor(e=10){this.max=e,this.cache=new Map}clear(){this.cache.clear()}get(e){let t=this.cache.get(e);return t&&(this.cache.delete(e),this.cache.set(e,t)),t}set(e,t){this.cache.has(e)?this.cache.delete(e):this.cache.size>=this.max&&this.cache.delete(this.first()),this.cache.set(e,t)}delete(e){this.cache.delete(e)}keys(){return this.cache.keys()}first(){return this.cache.keys().next().value}};function jt(){let r=new Uint32Array(28);return crypto.getRandomValues(r),Rt(r.buffer)}async function Mr(r){return crypto.subtle.digest("SHA-256",new TextEncoder().encode(r))}function po(r){let e=r.replace(/-/g,"+").replace(/_/g,"/"),t=qt(e),n=Array.from(t).reduce((o,s)=>{let a=("00"+s.charCodeAt(0).toString(16)).slice(-2);return`${o}%${a}`},""),i=decodeURIComponent(n);return JSON.parse(i)}function it(r){let[e,t,n]=r.split(".");return po(t)}function Qt(r){try{return typeof it(r).login_id=="string"}catch{return!1}}var fo,P=class{constructor(e){this[fo]="ReadablePromise";this.status="pending";this.suspender=e.then(t=>(this.status="success",this.response=t,t),t=>{throw this.status="error",this.error=t,t})}isPending(){return this.status==="pending"}isOk(){return this.status==="success"}read(){switch(this.status){case"pending":throw this.suspender;case"error":throw this.error;default:return this.response}}then(e,t){return this.suspender.then(e,t)}catch(e){return this.suspender.catch(e)}finally(e){return this.suspender.finally(e)}};fo=Symbol.toStringTag;var _e=class{constructor(){this.storage=typeof localStorage<"u"?localStorage:new ot}clear(){this.storage.clear()}getString(e){return this.storage.getItem(e)??void 0}setString(e,t){t?this.storage.setItem(e,t):this.storage.removeItem(e)}getObject(e){let t=this.getString(e);return t?JSON.parse(t):void 0}setObject(e,t){this.setString(e,t?bt(t):void 0)}},ot=class{constructor(){this.data=new Map}get length(){return this.data.size}clear(){this.data.clear()}getItem(e){return this.data.get(e)??null}setItem(e,t){t?this.data.set(e,t):this.data.delete(e)}removeItem(e){this.data.delete(e)}key(e){return Array.from(this.data.keys())[e]}};var mo="2.0.28-c60d344",ho="https://api.medplum.com/",yo=1e3,go=6e4,xo="application/json",Br="application/fhir+json",To="application/json-patch+json",Fr={resourceType:"Device",id:"system",deviceName:[{name:"System"}]},Hr=(o=>(o.ClientCredentials="client_credentials",o.AuthorizationCode="authorization_code",o.RefreshToken="refresh_token",o.JwtBearer="urn:ietf:params:oauth:grant-type:jwt-bearer",o.TokenExchange="urn:ietf:params:oauth:grant-type:token-exchange",o))(Hr||{}),Wr=(o=>(o.AccessToken="urn:ietf:params:oauth:token-type:access_token",o.RefreshToken="urn:ietf:params:oauth:token-type:refresh_token",o.IdToken="urn:ietf:params:oauth:token-type:id_token",o.Saml1Token="urn:ietf:params:oauth:token-type:saml1",o.Saml2Token="urn:ietf:params:oauth:token-type:saml2",o))(Wr||{}),Ht=class extends EventTarget{constructor(t){super();if(t?.baseUrl&&!t.baseUrl.startsWith("http"))throw new Error("Base URL must start with http or https");this.fetch=t?.fetch??vo(),this.storage=t?.storage??new _e,this.createPdfImpl=t?.createPdf,this.baseUrl=$r(t?.baseUrl)??ho,this.fhirBaseUrl=this.baseUrl+($r(t?.fhirUrlPath)??"fhir/R4/"),this.clientId=t?.clientId??"",this.authorizeUrl=t?.authorizeUrl??this.baseUrl+"oauth2/authorize",this.tokenUrl=t?.tokenUrl??this.baseUrl+"oauth2/token",this.logoutUrl=t?.logoutUrl??this.baseUrl+"oauth2/logout",this.onUnauthenticated=t?.onUnauthenticated,this.cacheTime=t?.cacheTime??go,this.cacheTime>0?this.requestCache=new Le(t?.resourceCacheSize??yo):this.requestCache=void 0,t?.autoBatchTime?(this.autoBatchTime=t.autoBatchTime,this.autoBatchQueue=[]):(this.autoBatchTime=0,this.autoBatchQueue=void 0);let n=this.getActiveLogin();n&&(this.setAccessToken(n.accessToken,n.refreshToken),this.refreshProfile().catch(console.log)),this.setupStorageListener()}getBaseUrl(){return this.baseUrl}getAuthorizeUrl(){return this.authorizeUrl}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.sessionDetails=void 0,this.medplumServer=void 0,this.dispatchEvent(new Event("change"))}invalidateUrl(t){t=t.toString(),this.requestCache?.delete(t)}invalidateAll(){this.requestCache?.clear()}invalidateSearches(t){let n=this.fhirBaseUrl+t;if(this.requestCache)for(let i of this.requestCache.keys())(i.endsWith(n)||i.includes(n+"?"))&&this.requestCache.delete(i)}get(t,n={}){t=t.toString();let i=this.getCacheEntry(t,n);if(i)return i.value;let o;t.startsWith(this.fhirBaseUrl)&&this.autoBatchQueue?o=new Promise((a,c)=>{this.autoBatchQueue.push({method:"GET",url:t.replace(this.fhirBaseUrl,""),options:n,resolve:a,reject:c}),this.autoBatchTimerId||(this.autoBatchTimerId=setTimeout(()=>this.executeAutoBatch(),this.autoBatchTime))}):o=this.request("GET",t,n);let s=new P(o);return this.setCacheEntry(t,s),s}post(t,n,i,o={}){return t=t.toString(),n&&this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("POST",t,o)}put(t,n,i,o={}){return t=t.toString(),n&&this.setRequestBody(o,n),i&&this.setRequestContentType(o,i),this.invalidateUrl(t),this.request("PUT",t,o)}patch(t,n,i={}){return t=t.toString(),this.setRequestBody(i,n),this.setRequestContentType(i,To),this.invalidateUrl(t),this.request("PATCH",t,i)}delete(t,n){return t=t.toString(),this.invalidateUrl(t),this.request("DELETE",t,n)}async startNewUser(t,n){let{codeChallengeMethod:i,codeChallenge:o}=await this.startPkce();return this.post("auth/newuser",{...t,clientId:t.clientId??this.clientId,codeChallengeMethod:i,codeChallenge:o},void 0,n)}async startNewProject(t,n){return this.post("auth/newproject",t,void 0,n)}async startNewPatient(t,n){return this.post("auth/newpatient",t,void 0,n)}async startLogin(t,n){return this.post("auth/login",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async startGoogleLogin(t,n){return this.post("auth/google",{...await this.ensureCodeChallenge(t),clientId:t.clientId??this.clientId,scope:t.scope},void 0,n)}async ensureCodeChallenge(t){return t.codeChallenge?t:{...t,...await this.startPkce()}}async signOut(){await this.post(this.logoutUrl,{}),this.clear()}async signInWithRedirect(t){let i=new URLSearchParams(window.location.search).get("code");if(i)return this.processCode(i);await this.requestAuthorization(t)}signOutWithRedirect(){window.location.assign(this.logoutUrl)}async signInWithExternalAuth(t,n,i,o){let s=await this.ensureCodeChallenge(o);window.location.assign(this.getExternalAuthRedirectUri(t,n,i,s))}async exchangeExternalAccessToken(t,n){if(n=n??this.clientId,!n)throw new Error("MedplumClient is missing clientId");let i=new URLSearchParams;return i.set("grant_type","urn:ietf:params:oauth:grant-type:token-exchange"),i.set("subject_token_type","urn:ietf:params:oauth:token-type:access_token"),i.set("client_id",n),i.set("subject_token",t),this.fetchTokens(i)}getExternalAuthRedirectUri(t,n,i,o){let s=new URL(t);return s.searchParams.set("response_type","code"),s.searchParams.set("client_id",n),s.searchParams.set("redirect_uri",i),s.searchParams.set("scope","openid profile email"),s.searchParams.set("state",JSON.stringify(o)),s.toString()}fhirUrl(...t){return new URL(this.fhirBaseUrl+t.join("/"))}fhirSearchUrl(t,n){let i=this.fhirUrl(t);return n&&(i.search=new URLSearchParams(n).toString()),i}search(t,n,i){let o=this.fhirSearchUrl(t,n),s=o.toString()+"-search",a=this.getCacheEntry(s,i);if(a)return a.value;let c=new P((async()=>{let f=await this.get(o,i);if(f.entry)for(let p of f.entry)this.cacheResource(p.resource);return f})());return this.setCacheEntry(s,c),c}searchOne(t,n,i){let o=this.fhirSearchUrl(t,n);o.searchParams.set("_count","1"),o.searchParams.sort();let s=o.toString()+"-searchOne",a=this.getCacheEntry(s,i);if(a)return a.value;let c=new P(this.search(t,o.searchParams,i).then(f=>f.entry?.[0]?.resource));return this.setCacheEntry(s,c),c}searchResources(t,n,i){let s=this.fhirSearchUrl(t,n).toString()+"-searchResources",a=this.getCacheEntry(s,i);if(a)return a.value;let c=new P(this.search(t,n,i).then(Qr));return this.setCacheEntry(s,c),c}async*searchResourcePages(t,n,i){let o=this.fhirSearchUrl(t,n);for(;o;){let s=new URL(o).searchParams,a=await this.search(t,s,i),c=a.link?.find(f=>f.relation==="next");if(!a.entry?.length&&!c)break;yield Qr(a),o=c?.url?new URL(c.url):void 0}}searchValueSet(t,n,i){let o=this.fhirUrl("ValueSet","$expand");return o.searchParams.set("url",t),o.searchParams.set("filter",n),this.get(o.toString(),i)}getCached(t,n){let i=this.requestCache?.get(this.fhirUrl(t,n).toString())?.value;return i?.isOk()?i.read():void 0}getCachedReference(t){let n=t.reference;if(!n)return;if(n==="system")return Fr;let[i,o]=n.split("/");if(!(!i||!o))return this.getCached(i,o)}readResource(t,n,i){return this.get(this.fhirUrl(t,n),i)}readReference(t,n){let i=t.reference;if(!i)return new P(Promise.reject(new Error("Missing reference")));if(i==="system")return new P(Promise.resolve(Fr));let[o,s]=i.split("/");return!o||!s?new P(Promise.reject(new Error("Invalid reference"))):this.readResource(o,s,n)}getSchema(){return y}requestSchema(t){if(t in y.types)return Promise.resolve(y);let n=t+"-requestSchema",i=this.getCacheEntry(n,void 0);if(i)return i.value;let o=new P((async()=>{let s=`{
|
|
4
4
|
StructureDefinitionList(name: "${t}") {
|
|
5
5
|
name,
|
|
6
6
|
description,
|
|
@@ -28,5 +28,5 @@
|
|
|
28
28
|
expression,
|
|
29
29
|
target
|
|
30
30
|
}
|
|
31
|
-
}`.replace(/\s+/g," "),a=await this.graphql(s);for(let c of a.data.StructureDefinitionList)Ke(c);for(let c of a.data.SearchParameterList)Je(c);return y})());return this.setCacheEntry(n,o),o}readHistory(t,n,i){return this.get(this.fhirUrl(t,n,"_history"),i)}readVersion(t,n,i,o){return this.get(this.fhirUrl(t,n,"_history",i),o)}readPatientEverything(t,n){return this.get(this.fhirUrl("Patient",t,"$everything"),n)}createResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");return this.invalidateSearches(t.resourceType),this.post(this.fhirUrl(t.resourceType),t,void 0,n)}async createResourceIfNoneExist(t,n,i){return await this.searchOne(t.resourceType,n,i)??this.createResource(t,i)}createBinary(t,n,i,o){let s=this.fhirUrl("Binary");return n&&s.searchParams.set("_filename",n),o?this.uploadwithProgress(s,t,i,o):this.post(s,t,i)}uploadwithProgress(t,n,i,o){return new Promise((s,a)=>{let c=new XMLHttpRequest;c.responseType="json",c.onabort=()=>a(new Error("Request aborted")),c.onerror=()=>a(new Error("Request error")),o&&(c.upload.onprogress=f=>o(f),c.upload.onload=f=>o(f)),c.onload=()=>{c.status>=200&&c.status<300?s(c.response):a(new Error(c.statusText))},c.open("POST",t),c.withCredentials=!0,c.setRequestHeader("Authorization","Bearer "+this.accessToken),c.setRequestHeader("Cache-Control","no-cache, no-store, max-age=0"),c.setRequestHeader("Content-Type",i),c.setRequestHeader("X-Medplum","extended"),c.send(n)})}async createPdf(t,n,i,o){if(!this.createPdfImpl)throw new Error("PDF creation not enabled");let s=await this.createPdfImpl(t,i,o);return this.createBinary(s,n,"application/pdf")}createComment(t,n,i){let o=this.getProfile(),s,a;return t.resourceType==="Encounter"&&(s=Y(t),a=t.subject),t.resourceType==="ServiceRequest"&&(s=t.encounter,a=t.subject),t.resourceType==="Patient"&&(a=Y(t)),this.createResource({resourceType:"Communication",basedOn:[Y(t)],encounter:s,subject:a,sender:o?Y(o):void 0,sent:new Date().toISOString(),payload:[{contentString:n}]},i)}async updateResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");if(!t.id)throw new Error("Missing id");this.invalidateSearches(t.resourceType);let i=await this.put(this.fhirUrl(t.resourceType,t.id),t,void 0,n);return i||(i=t),this.cacheResource(i),i}patchResource(t,n,i,o){return this.invalidateSearches(t),this.patch(this.fhirUrl(t,n),i,o)}deleteResource(t,n,i){return this.deleteCacheEntry(this.fhirUrl(t,n).toString()),this.invalidateSearches(t),this.delete(this.fhirUrl(t,n),i)}validateResource(t,n){return this.post(this.fhirUrl(t.resourceType,"$validate"),t,void 0,n)}executeBot(t,n,i,o){let s;if(typeof t=="string"){let a=t;s=this.fhirUrl("Bot",a,"$execute")}else{let a=t;s=this.fhirUrl("Bot","$execute")+`?identifier=${a.system}|${a.value}`}return this.post(s,n,i,o)}executeBatch(t,n){return this.post(this.fhirBaseUrl.slice(0,-1),t,void 0,n)}sendEmail(t,n){return this.post("email/v1/send",t,"application/json",n)}graphql(t,n,i,o){return this.post(this.fhirUrl("$graphql"),{query:t,operationName:n,variables:i},xo,o)}readResourceGraph(t,n,i,o){return this.get(`${this.fhirUrl(t,n)}/$graph?graph=${i}`,o)}getActiveLogin(){return this.storage.getObject("activeLogin")}async setActiveLogin(t){this.clearActiveLogin(),this.setAccessToken(t.accessToken,t.refreshToken),this.storage.setObject("activeLogin",t),this.addLogin(t),this.refreshPromise=void 0,await this.refreshProfile()}getAccessToken(){return this.accessToken}setAccessToken(t,n){this.accessToken=t,this.refreshToken=n,this.sessionDetails=void 0,this.medplumServer=Qt(t)}getLogins(){return this.storage.getObject("logins")??[]}addLogin(t){let n=this.getLogins().filter(i=>i.profile?.reference!==t.profile?.reference);n.push(t),this.storage.setObject("logins",n)}async refreshProfile(){return this.medplumServer?(this.profilePromise=new Promise((t,n)=>{this.get("auth/me").then(i=>{this.profilePromise=void 0,this.sessionDetails=i,this.dispatchEvent(new Event("change")),t(i.profile)}).catch(n)}),this.profilePromise):Promise.resolve(void 0)}isLoading(){return!!this.profilePromise}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&&await this.profilePromise,this.getProfile()}getUserConfiguration(){return this.sessionDetails?.config}getAccessPolicy(){return this.sessionDetails?.accessPolicy}async download(t,n={}){return this.refreshPromise&&await this.refreshPromise,this.addFetchOptionsDefaults(n),(await this.fetch(t.toString(),n)).blob()}async uploadMedia(t,n,i,o,s){let a=await this.createBinary(t,i,n);return this.createResource({...o,resourceType:"Media",content:{contentType:n,url:"Binary/"+a.id,title:i}},s)}async bulkExport(t="",n,i,o){let s=t&&`${t}/`,a=this.fhirUrl(`${s}$export`);return n&&a.searchParams.set("_type",n),i&&a.searchParams.set("_since",i),this.startAsyncRequest(a.toString(),o)}async startAsyncRequest(t,n={}){this.addFetchOptionsDefaults(n);let i=n.headers;i.Prefer="respond-async";let o=await this.fetchWithRetry(t,n);if(o.status===202){let s=await jr(o);if(s)return this.pollStatus(s)}return this.parseResponse(o,"POST",t)}getCacheEntry(t,n){if(!this.requestCache||n?.cache==="no-cache"||n?.cache==="reload")return;let i=this.requestCache.get(t);if(!(!i||i.requestTime+this.cacheTime<Date.now()))return i}setCacheEntry(t,n){this.requestCache&&this.requestCache.set(t,{requestTime:Date.now(),value:n})}cacheResource(t){t?.id&&this.setCacheEntry(this.fhirUrl(t.resourceType,t.id).toString(),new P(Promise.resolve(t)))}deleteCacheEntry(t){this.requestCache&&this.requestCache.delete(t)}async request(t,n,i={}){this.refreshPromise&&await this.refreshPromise,i.method=t,this.addFetchOptionsDefaults(i);let o=await this.fetchWithRetry(n,i);return this.parseResponse(o,t,n,i)}async parseResponse(t,n,i,o={}){if(t.status===401)return this.handleUnauthenticated(n,i,o);if(t.status===204||t.status===304)return;let a=t.headers.get("content-type")?.includes("json");if(t.status===404&&!a)throw new m(ht);let c;if(a)try{c=await t.json()}catch(f){throw console.error("Error parsing response",t.status,f),f}if(t.status>=400)throw new m(Qe(c));return c}async fetchWithRetry(t,n){t.startsWith("http")||(t=new URL(t,this.baseUrl).href);let i=3,o=200,s;for(let a=0;a<i;a++){try{if(s=await this.fetch(t,n),s.status<500)return s}catch(c){this.retryCatch(a,i,c)}await ze(o)}return s}async pollStatus(t){let n=!0,i,o=2e3;for(;n;){let s={};this.addFetchOptionsDefaults(s);let a=await this.fetchWithRetry(t,s);if(a.status!==202&&(n=!1,i=a,a.status===201)){let c=await jr(a);c&&(i=await this.fetchWithRetry(c,s))}await ze(o)}return this.parseResponse(i,"POST",t)}async executeAutoBatch(){let t=[...this.autoBatchQueue];if(this.autoBatchQueue.length=0,this.autoBatchTimerId=void 0,t.length===1){let o=t[0];try{o.resolve(await this.request(o.method,this.fhirBaseUrl+o.url,o.options))}catch(s){o.reject(new m(Qe(s)))}return}let n={resourceType:"Bundle",type:"batch",entry:t.map(o=>({request:{method:o.method,url:o.url},resource:o.options.body?JSON.parse(o.options.body):void 0}))},i=await this.post(this.fhirBaseUrl.slice(0,-1),n);for(let o=0;o<t.length;o++){let s=t[o],a=i.entry?.[o];a?.response?.outcome&&!je(a.response.outcome)?s.reject(new m(a.response.outcome)):s.resolve(a?.resource)}}addFetchOptionsDefaults(t){let n=t.headers;n||(n={},t.headers=n),n.Accept=Br,n["X-Medplum"]="extended",t.body&&!n["Content-Type"]&&(n["Content-Type"]=Br),this.accessToken?n.Authorization="Bearer "+this.accessToken:this.basicAuth&&(n.Authorization="Basic "+this.basicAuth),t.cache||(t.cache="no-cache"),t.credentials||(t.credentials="include")}setRequestContentType(t,n){t.headers||(t.headers={});let i=t.headers;i["Content-Type"]=n}setRequestBody(t,n){typeof n=="string"||typeof Blob<"u"&&n instanceof Blob||typeof File<"u"&&n instanceof File||typeof Uint8Array<"u"&&n instanceof Uint8Array?t.body=n:n&&(t.body=JSON.stringify(n))}handleUnauthenticated(t,n,i){return this.refresh()?this.request(t,n,i):(this.clearActiveLogin(),this.onUnauthenticated&&this.onUnauthenticated(),Promise.reject(new Error("Unauthenticated")))}async startPkce(){let t=jt();sessionStorage.setItem("pkceState",t);let n=jt();sessionStorage.setItem("codeVerifier",n);let i=await Mr(n),o=At(i).replaceAll("+","-").replaceAll("/","_").replaceAll("=","");return sessionStorage.setItem("codeChallenge",o),{codeChallengeMethod:"S256",codeChallenge:o}}async requestAuthorization(t){let n=await this.ensureCodeChallenge(t??{}),i=new URL(this.authorizeUrl);i.searchParams.set("response_type","code"),i.searchParams.set("state",sessionStorage.getItem("pkceState")),i.searchParams.set("client_id",n.clientId??this.clientId),i.searchParams.set("redirect_uri",n.redirectUri??qr()),i.searchParams.set("code_challenge_method",n.codeChallengeMethod),i.searchParams.set("code_challenge",n.codeChallenge),i.searchParams.set("scope",n.scope??"openid profile"),window.location.assign(i.toString())}processCode(t,n){let i=new URLSearchParams;if(i.set("grant_type","authorization_code"),i.set("code",t),i.set("client_id",n?.clientId??this.clientId),i.set("redirect_uri",n?.redirectUri??qr()),typeof sessionStorage<"u"){let o=sessionStorage.getItem("codeVerifier");o&&i.set("code_verifier",o)}return this.fetchTokens(i)}refresh(){if(this.refreshPromise)return this.refreshPromise;if(this.refreshToken){let t=new URLSearchParams;return t.set("grant_type","refresh_token"),t.set("client_id",this.clientId),t.set("refresh_token",this.refreshToken),this.refreshPromise=this.fetchTokens(t),this.refreshPromise}if(this.clientId&&this.clientSecret)return this.refreshPromise=this.startClientLogin(this.clientId,this.clientSecret),this.refreshPromise}async startClientLogin(t,n){this.clientId=t,this.clientSecret=n;let i=new URLSearchParams;return i.set("grant_type","client_credentials"),i.set("client_id",t),i.set("client_secret",n),this.fetchTokens(i)}async startJwtBearerLogin(t,n,i){this.clientId=t;let o=new URLSearchParams;return o.set("grant_type","urn:ietf:params:oauth:grant-type:jwt-bearer"),o.set("client_id",t),o.set("assertion",n),o.set("scope",i),this.fetchTokens(o)}setBasicAuth(t,n){this.clientId=t,this.clientSecret=n,this.basicAuth=$t(t+":"+n)}async invite(t,n){return this.post("admin/projects/"+t+"/invite",n)}async fetchTokens(t){let n={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:t,credentials:"include"},i=n.headers;this.basicAuth&&(i.Authorization=`Basic ${this.basicAuth}`);let o=await this.fetch(this.tokenUrl,n);if(!o.ok){this.clearActiveLogin();try{let a=await o.json();throw new m(k(a.error_description))}catch(a){throw new m(k("Failed to fetch tokens"),a)}}let s=await o.json();return await this.verifyTokens(s),this.getProfile()}async verifyTokens(t){let n=t.access_token,i=it(n);if(Date.now()>=i.exp*1e3)throw this.clearActiveLogin(),new Error("Token expired");if(i.cid){if(i.cid!==this.clientId)throw this.clearActiveLogin(),new Error("Token was not issued for this audience")}else if(this.clientId&&i.client_id!==this.clientId)throw this.clearActiveLogin(),new Error("Token was not issued for this audience");return this.setActiveLogin({accessToken:n,refreshToken:t.refresh_token,project:t.project,profile:t.profile})}setupStorageListener(){try{window.addEventListener("storage",t=>{(t.key===null||t.key==="activeLogin")&&window.location.reload()})}catch{}}retryCatch(t,n,i){if(i.message==="Failed to fetch"&&t===1&&this.dispatchEvent(new Event("offline")),t>=n-1)throw i}};function vo(){if(!globalThis.fetch)throw new Error("Fetch not available in this environment");return globalThis.fetch.bind(globalThis)}function qr(){return typeof window>"u"?"":window.location.protocol+"//"+window.location.host+"/"}function $r(r){return r&&(r.endsWith("/")?r:r+"/")}async function jr(r){let e=r.headers.get("content-location");if(e)return e;let t=r.headers.get("location");if(t)return t;let n=await r.json();if(ue(n)&&n.issue?.[0]?.diagnostics)return n.issue[0].diagnostics}function Qr(r){let e=r.entry?.map(t=>t.resource)??[];return Object.assign(e,{bundle:r})}var bo=[...te,"->","<<",">>"];function Gr(r){return new j(r,ee,bo).tokenize()}var Wt=class{constructor(e){this.parser=e;this.structureMap={resourceType:"StructureMap"}}parse(){for(this.parser.consume("Symbol","map"),this.structureMap.url=this.parser.consume("String").value,this.parser.consume("="),this.structureMap.name=this.parser.consume().value;this.parser.hasMore();){let e=this.parser.peek()?.value;switch(e){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}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(){let e=[this.parseRuleSource()];for(;this.parser.hasMore()&&this.parser.peek()?.value===",";)this.parser.consume(","),e.push(this.parseRuleSource());return e}parseRuleSource(){let e={},t=this.parseRuleContext();if(t.includes(".")){let n=t.split(".");e.context=n[0],e.element=n[1]}else e.context=t;if(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("default"),this.parser.consumeAndParse()),(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==="where"){this.parser.consume("Symbol","where");let n=this.parser.consumeAndParse(l.Arrow);e.condition=n.toString()}if(this.parser.peek()?.value==="check"){this.parser.consume("Symbol","check");let n=this.parser.consumeAndParse(l.Arrow);e.check=n.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={},t=this.parseRuleContext();if(t.includes(".")){let n=t.split(".");e.contextType="variable",e.context=n[0],e.element=n[1]}else e.context=t;return 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==="first"||this.parser.peek()?.value==="share"||this.parser.peek()?.value==="last"||this.parser.peek()?.value==="collate")&&(e.listMode=[this.parser.consume().value]),e}parseRuleTargetTransform(e){e.transform="copy";let t=this.parser.consumeAndParse(l.As);if(t instanceof N)this.parseRuleTargetSymbol(e,t);else if(t instanceof M)this.parseRuleTargetFunction(e,t);else if(t instanceof w)this.parseRuleTargetLiteral(e,t);else throw new Error(`Unexpected FHIRPath: ${t}`)}parseRuleTargetSymbol(e,t){e.parameter=[{valueId:t.name}]}parseRuleTargetFunction(e,t){let n=t.name;switch(n){case"create":e.parameter=[{valueString:t.args[0].value.value}];break;case"translate":e.parameter=[{}];break;default:throw new Error("Unknown target function: "+n)}}parseRuleTargetLiteral(e,t){switch(t.value.type){case"boolean":e.parameter=[{valueBoolean:t.value.value}];break;case"decimal":e.parameter=[{valueDecimal:t.value.value}];break;case"string":e.parameter=[{valueString:t.value.value}];break;default:throw new Error("Unknown target literal type: "+t.value.type)}}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(l.Arrow);return[{name:e.name,variable:e.args.map(t=>t.name)}]}parseConceptMap(){for(;this.parser.peek()?.value!=="}";)this.parser.consume();this.parser.consume("}")}},So=re().registerInfix("->",{precedence:l.Arrow}).registerInfix(";",{precedence:l.Semicolon});function Ro(r){let e=So.construct(Gr(r));return e.removeComments(),new Wt(e).parse()}var Ao=[...te,"eq","ne","co"];function zr(r){return new j(r,ee,Ao,{dateTimeLiterals:!0,symbolRegex:/[^\s\])]/}).tokenize()}var Ne=class{constructor(e,t,n){this.path=e;this.operator=t;this.value=n}},Me=class{constructor(e){this.child=e}},Be=class{constructor(e,t,n){this.keyword=e;this.left=t;this.right=n}};var Eo={eq:"eq",ne:"ne",co:"contains",sw:void 0,ew:void 0,gt:"gt",lt:"lt",ge:"ge",le:"le",ap:"ap",sa:"sa",eb:"eb",pr:"missing",po:void 0,ss:void 0,sb:void 0,in:"in",ni:"not-in",re:void 0,identifier:"identifier"};function Po(r){let e=Eo[r];if(!e)throw new m(k("Invalid operator: "+r));return e}var Gt=class{constructor(e){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 Me(this.parse()),this.parser.consume(")")):e=new Ne(this.parser.consume("Symbol").value,Po(this.parser.consume("Symbol").value),this.parser.consume().value);let t=this.parser.peek()?.value;return t==="and"||t==="or"?(this.parser.consume("Symbol",t),new Be(t,e,this.parse())):e}},Co=re();function wo(r){let e=Co.construct(zr(r));return e.removeComments(),new Gt(e).parse()}var H=class{constructor(e="\r",t="|",n="^",i="~",o="\\",s="&"){this.segmentSeparator=e;this.fieldSeparator=t;this.componentSeparator=n;this.repetitionSeparator=i;this.escapeCharacter=o;this.subcomponentSeparator=s}getMsh2(){return this.fieldSeparator+this.componentSeparator+this.repetitionSeparator+this.escapeCharacter+this.subcomponentSeparator}},zt=class r{constructor(e,t=new H){this.context=t,this.segments=e}get header(){return this.segments[0]}get(e){return this.getSegment(e)}getAll(e){return this.getAllSegments(e)}getSegment(e){return typeof e=="number"?this.segments[e]:this.segments.find(t=>t.name===e)}getAllSegments(e){return this.segments.filter(t=>t.name===e)}toString(){return this.segments.map(e=>e.toString()).join(this.context.segmentSeparator)}buildAck(){let e=new Date,t=this.getSegment("MSH"),n=t?.getField(3)?.toString()??"",i=t?.getField(4)?.toString()??"",o=t?.getField(5)?.toString()??"",s=t?.getField(6)?.toString()??"",a=t?.getField(10)?.toString()??"",c=t?.getField(12)?.toString()??"2.5.1";return new r([new oe(["MSH",this.context.getMsh2(),o,s,n,i,e.toISOString(),"",this.buildAckMessageType(t),e.getTime().toString(),"P",c],this.context),new oe(["MSA","AA",a,"OK"],this.context)])}buildAckMessageType(e){let t=e?.getField(9),n=t?.getComponent(2),i=t?.getComponent(3),o="ACK";return n&&i?o=`ACK^${n}^ACK`:n&&(o=`ACK^${n}`),o}static parse(e){if(!e.startsWith("MSH")){let n=new Error("Invalid HL7 message");throw n.type="entity.parse.failed",n}let t=new H("\r",e.charAt(3),e.charAt(4),e.charAt(5),e.charAt(6),e.charAt(7));return new r(e.split(/[\r\n]+/).map(n=>oe.parse(n,t)),t)}},oe=class r{constructor(e,t=new H){this.context=t,St(e)?this.fields=e.map(n=>se.parse(n,t)):this.fields=e,this.name=this.fields[0].components[0][0]}get(e){return this.fields[e]}getField(e){if(this.name==="MSH"){if(e===1)return se.parse(this.context.fieldSeparator,this.context);if(e>1)return this.fields[e-1]}return this.fields[e]}getComponent(e,t,n,i=0){return this.getField(e).getComponent(t,n,i)}toString(){return this.fields.map(e=>e.toString()).join(this.context.fieldSeparator)}static parse(e,t=new H){return new r(e.split(t.fieldSeparator).map(n=>se.parse(n,t)),t)}},se=class r{constructor(e,t=new H){this.context=t,this.components=e}get(e,t,n=0){return this.getComponent(e+1,t,n)}getComponent(e,t,n=0){let i=this.components[n][e-1]??"";return t!==void 0&&(i=i.split(this.context.subcomponentSeparator)[t]??""),i}toString(){return this.components.map(e=>e.join(this.context.componentSeparator)).join(this.context.repetitionSeparator)}static parse(e,t=new H){return new r(e.split(t.repetitionSeparator).map(n=>n.split(t.componentSeparator)),t)}};function ko(r,e){if(!r)return;e={seconds:!0,tzOffset:"Z",...e};let t=Number.parseInt(r.substring(0,4),10),n=Number.parseInt(r.substring(4,6),10),i=Number.parseInt(r.substring(6,8),10),o=Number.parseInt(r.substring(8,10),10),s=Number.parseInt(r.substring(10,12),10),a=e.seconds?Number.parseInt(r.substring(12,14),10):0;return`${ie(t)}-${ie(n)}-${ie(i)}T${ie(o)}:${ie(s)}:${ie(a)}.000${e.tzOffset}`}function ie(r){return r.toString().padStart(2,"0")}var Do={base64Binary:"string",boolean:"boolean",canonical:"string",code:"string",date:"string",dateTime:"string",decimal:"number",id:"string",instant:"string",integer:"number",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"},Io=new Set(["resourceType","id","meta","implicitRules","language","text","contained","extension","modifierExtension"]);function Kr(r){let e=y.types[r];return e&&e.structureDefinition.id===r&&e.structureDefinition.kind==="resource"}function Oo(r){if(!r)throw new m(B("Resource type is null"));if(!Kr(r))throw new m(B("Unknown resource type"))}function Vo(r){new st(r).validate()}var st=class{constructor(e){this.issues=[],this.root=e}validate(){let e=this.root;if(!e)throw new m(B("Resource is null"));let t=e.resourceType;if(!t)throw new m(B("Missing resource type"));if(at(e,"",this.issues),this.validateObject(x(e),t),this.issues.length>0)throw new m({resourceType:"OperationOutcome",issue:this.issues})}validateObject(e,t){let n=y.types[e.type];if(!n)throw new m(B("Unknown type: "+e.type));let i=n.properties;this.checkProperties(t,i,e),this.checkAdditionalProperties(t,e,i)}checkProperties(e,t,n){for(let[i,o]of Object.entries(t))this.checkProperty(e+"."+i,o,n)}checkProperty(e,t,n){let i=e.split(".").pop(),o=E(n,i);if(v(o)){t.min!==void 0&&t.min>0&&this.issues.push(h(e,"Missing required property"));return}if(t.max==="*"){if(!Array.isArray(o)){this.issues.push(h(e,"Expected array for property"));return}for(let s of o)this.checkPropertyValue(e,t,s)}else{if(Array.isArray(o)){this.issues.push(h(e,"Expected single value for property"));return}this.checkPropertyValue(e,t,o)}}checkPropertyValue(e,t,n){n.value!==null&&(fe(n.type.charAt(0))?this.validatePrimitiveType(t,n):this.validateObject(n,e))}validatePrimitiveType(e,t){let{type:n,value:i}=t;if(i===null)return;let o=Do[t.type];if(typeof i!==o){this.createIssue(e,"Invalid type for "+n);return}o==="string"?this.validateString(e,n,i):o==="number"&&this.validateNumber(e,n,i)}validateString(e,t,n){if(!n.trim()){this.createIssue(e,"Invalid empty string");return}let i=y.types[t]?.properties.value;if(i?.type){let o=vt(i.type[0],"http://hl7.org/fhir/StructureDefinition/regex");o&&(new RegExp(o).exec(n)||this.createIssue(e,"Invalid "+t+" format"))}}validateNumber(e,t,n){if(isNaN(n)||!isFinite(n)){this.createIssue(e,"Invalid "+t+" value");return}Uo(t)&&!Number.isInteger(n)&&this.createIssue(e,"Number is not an integer"),t==="positiveInt"&&n<=0&&this.createIssue(e,"Number is less than or equal to zero"),t==="unsignedInt"&&n<0&&this.createIssue(e,"Number is negative")}checkAdditionalProperties(e,t,n){let i=t.value;for(let o of Object.keys(i))this.checkAdditionalProperty(e,o,t,n)}checkAdditionalProperty(e,t,n,i){if(!Io.has(t)&&!(t in i)&&!Lo(t,n,i)&&!this.checkPrimitiveElement(e,t,n)){let o=`${e}.${t}`;this.issues.push(h(o,`Invalid additional property "${o}"`))}}checkPrimitiveElement(e,t,n){return!t.startsWith("_")||!(t.slice(1)in n.value)?!1:(this.validateObject({type:"Element",value:n.value[t]},e),!0)}createIssue(e,t){this.issues.push(h(e.path,t))}};function Uo(r){return r==="integer"||r==="positiveInt"||r==="unsignedInt"}function Lo(r,e,t){for(let n of Object.keys(t)){if(!n.endsWith("[x]"))continue;let i=n.replace("[x]","");if(!r.startsWith(i))continue;let o=E(e,n);if(o&&(Array.isArray(o)&&(o=o[0]),o&&r===i+b(o.type)))return!0}return!1}function at(r,e,t){r===null?t.push(h(e,"Invalid null value")):Array.isArray(r)?_o(r,e,t):typeof r=="object"&&No(r,e,t)}function _o(r,e,t){for(let n=0;n<r.length;n++)r[n]===void 0?t.push(h(`${e}[${n}]`,"Invalid undefined value")):at(r[n],`${e}[${n}]`,t)}function No(r,e,t){for(let[n,i]of Object.entries(r))at(i,`${e}${e?".":""}${n}`,t)}function h(r,e){return{severity:"error",code:"structure",details:{text:e},expression:[r]}}function Mo(r){let e=[];return new Promise((t,n)=>{r.on("data",i=>e.push(Buffer.from(i))),r.on("error",i=>{r.destroy(),n(i)}),r.on("end",()=>{t(Buffer.concat(e))}),r.on("close",()=>{r.destroy()})})}function Yt(r){return new Jt(r).parse()}var Kt=Object.create(null);function Zr(r){for(let{resource:e}of r.entry??[]){if(!e?.name)throw new Error("Failed loading StructureDefinition from bundle");if(e.resourceType!=="StructureDefinition")continue;let t=Yt(e);Kt[e.name]=t;for(let n of t.innerTypes)Kt[n.name]=n}}function Fe(r){let e=Kt[r];if(!e)throw new m(yt(Error("Unknown data type: "+r)));return e}var Jt=class{constructor(e){if(!e.snapshot?.element||e.snapshot.element.length===0)throw new Error(`No snapshot defined for StructureDefinition '${e.name}'`);let t=e.snapshot.element[0];this.elements=e.snapshot.element.slice(1),this.elementIndex=Object.create(null),this.index=0,this.resourceSchema={name:e.type,fields:{},constraints:this.parseFieldDefinition(t).constraints,innerTypes:[]},this.innerTypes=[]}parse(){let e=this.next();for(;e;){if(e.sliceName)this.parseSliceStart(e);else if(e.id?.includes(":")){if(this.slicingContext?.current){let t=ct(e,this.slicingContext.path);this.slicingContext.current.fields[t]=this.parseFieldDefinition(e)}}else{let t=this.parseFieldDefinition(e);this.checkFieldEnter(e,t),this.backboneContext&&e.path?.startsWith(this.backboneContext.path+".")?this.backboneContext.type.fields[ct(e,this.backboneContext.path)]=t:this.backboneContext?.parent&&e.path?.startsWith(this.backboneContext.parent.path+".")?this.backboneContext.parent.type.fields[ct(e,this.backboneContext.parent.path)]=t:this.resourceSchema.fields[ct(e,this.resourceSchema.name)]=t,this.checkFieldExit(e)}e=this.next()}return this.checkFieldExit(),this.innerTypes.length>0&&(this.resourceSchema.innerTypes=this.innerTypes),this.resourceSchema}checkFieldEnter(e,t){if(this.isInnerType(e)){for(;this.backboneContext&&!ae(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;this.backboneContext={type:{name:Yr(e.path?.split(".")??[]),fields:{},constraints:this.parseFieldDefinition(e).constraints,innerTypes:[]},path:e.path??"",parent:ae(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}e.slicing&&!this.slicingContext&&(t.slicing={discriminator:(e.slicing?.discriminator??[]).map(n=>{if(n.type!=="value"&&n.type!=="pattern")throw new Error(`Unsupported slicing discriminator type: ${n.type}`);return{path:n.path,type:n.type}}),slices:[],ordered:e.slicing?.ordered??!1,rule:e.slicing?.rules},this.slicingContext={field:t.slicing,path:e.path??""})}checkFieldExit(e=void 0){if(this.backboneContext&&!ae(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!ae(this.backboneContext.path,e?.path));else this.innerTypes.push(this.backboneContext.type),delete this.backboneContext;this.slicingContext&&!ae(this.slicingContext.path,e?.path)&&(this.slicingContext?.current&&this.slicingContext.field.slices.push(this.slicingContext.current),delete this.slicingContext)}next(){let e=this.peek();if(e)return this.index++,e}peek(){let e=this.elements[this.index];if(e){if(this.elementIndex[e.path??""]=e,e.contentReference){let t=this.elementIndex[e.contentReference.slice(e.contentReference.indexOf("#")+1)];return t?{...t,id:e.id,path:e.path,min:e.min??t.min,max:e.max??t.max}:void 0}return e}}isInnerType(e){let t=this.peek();return!!(ae(e?.path,t?.path)&&e.type?.some(n=>["BackboneElement","Element"].includes(n.code)))}parseSliceStart(e){if(!this.slicingContext)throw new Error("Invalid slice start before discriminator");this.slicingContext.current&&this.slicingContext.field.slices.push(this.slicingContext.current),this.slicingContext.current={name:e.sliceName??"",fields:{},min:e.min??0,max:e.max==="*"?Number.POSITIVE_INFINITY:Number.parseInt(e.max,10)}}parseFieldDefinition(e){let t=Jr(e.max),n=e.base?.max?Jr(e.base.max):t,i={type:"ElementDefinition",value:e};return{min:e.min??0,max:t,isArray:n>1,constraints:(e.constraint??[]).map(o=>({key:o.key??"",severity:o.severity??"error",expression:o.expression??"",description:o.human??""})),type:(e.type??[]).map(o=>({code:["BackboneElement","Element"].includes(o.code)?Yr(e.base?.path?.split(".")??[]):o.code??"",targetProfile:o.targetProfile??[]})),fixed:Xr(E(i,"fixed")),pattern:Xr(E(i,"pattern")),binding:e.binding?.strength==="required"?e.binding.valueSet:void 0}}};function Jr(r){return r==="*"?Number.POSITIVE_INFINITY:Number.parseInt(r,10)}function ct(r,e=""){return Bo(r.path,e)}function Bo(r,e){return r?e&&r.startsWith(e)?r.substring(e.length+1):r:""}function ae(r,e){return!r||!e?!1:e.startsWith(r+".")||e===r}function Yr(r){return r.length===1?r[0]:r.map(b).join("")}function Xr(r){return Array.isArray(r)&&r.length>0?r[0]:v(r)?void 0:r}var Fo={base64Binary:"string",boolean:"boolean",canonical:"string",code:"string",date:"string",dateTime:"string",decimal:"number",id:"string",instant:"string",integer:"number",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"},qo={base64Binary:/^([A-Za-z\d+/]{4})*([A-Za-z\d+/]{2}==|[A-Za-z\d+/]{3}=)?$/,canonical:/^\S*$/,code:/^[^\s]+( [^\s]+)*$/,date:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1]))?)?$/,dateTime:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1])(T([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?)?)?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00)?)?)?$/,id:/^[A-Za-z0-9\-.]{1,64}$/,instant:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])T([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00))$/,markdown:/^[\s\S]+$/,oid:/^urn:oid:[0-2](\.(0|[1-9]\d*))+$/,string:/^[\s\S]+$/,time:/^([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?$/,uri:/^\S*$/,url:/^\S*$/,uuid:/^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,xhtml:/.*/},$o={"ele-1":!0};function tn(r,e){return new Xt(r.resourceType,r,e).validate()}var Xt=class{constructor(e,t,n){this.issues=[],this.rootResource=t,this.currentResource=[t],n?this.schema=Yt(n):this.schema=Fe(e)}validate(){let e=this.rootResource.resourceType;if(!e)throw new m(B("Missing resource type"));Zt(this.rootResource,e,this.issues),this.validateObject({type:e,value:this.currentResource[this.currentResource.length-1]},this.schema,e);let t=this.issues;if(this.issues=[],t.length>0)throw new m({resourceType:"OperationOutcome",issue:t})}validateObject(e,t,n){for(let[i,o]of Object.entries(t.fields))this.checkProperty(e,i,t,`${n}.${i}`);this.checkAdditionalProperties(e,t.fields,n)}checkProperty(e,t,n,i){let o=rn(e,t),s=n.fields[t];if(!s)throw new Error(`Missing element validation schema for ${t}`);for(let a of o){if(!this.checkPresence(a,s,i))return;let c;if(s.isArray){if(!Array.isArray(a)){this.issues.push(h(i,"Expected array of values for property"));return}c=a}else{if(Array.isArray(a)){this.issues.push(h(i,"Expected single value for property"));return}c=[a]}(c.length<s.min||c.length>s.max)&&this.issues.push(h(i,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${c.length}`)),nn(a,s)||this.issues.push(h(i,"Value did not match expected pattern"));let f=s.slicing?Object.fromEntries(s.slicing.slices.map(p=>[p.name,0])):void 0;for(let p of c){let ce=V(p.value);ce&&this.currentResource.push(p.value),this.constraintsCheck(p,s,i),this.checkPropertyValue(p,i);let qe=Wo(p,s.slicing);qe&&f&&(f[qe]+=1),ce&&this.currentResource.pop()}this.validateSlices(s.slicing?.slices,f,i)}}checkPresence(e,t,n){return e===void 0?(t.min>0&&this.issues.push(h(n,"Missing required property")),!1):v(e)?(this.issues.push(h(n,"Invalid empty value")),!1):!0}checkPropertyValue(e,t){if(fe(e.type.charAt(0)))this.validatePrimitiveType(e,t);else{let n=Fe(e.type);this.validateObject(e,n,t)}}validateSlices(e,t,n){if(!(!e||!t))for(let i of e){let o=t[i.name];(o<i.min||o>i.max)&&this.issues.push(h(n,`Incorrect number of values provided for slice '${i.name}': expected ${i.min}..${Number.isFinite(i.max)?i.max:"*"}, but found ${o}`))}}checkAdditionalProperties(e,t,n){let i=e.value;if(i)for(let o of Object.keys(i))o!=="resourceType"&&!(o in t)&&!(o.slice(1)in t&&this.isPrimitiveExtension(e,o,n))&&!Qo(e,o,t)&&this.issues.push(h(`${n}.${o}`,`Invalid additional property "${o}"`))}constraintsCheck(e,t,n){let i=t.constraints;for(let o of i)if(!(o.severity!=="error"||o.key in $o)&&!this.isExpressionTrue(o,e,n)){this.issues.push(en(n,`Constraint ${o.key} failed with expression: ${o.expression}`));return}}isExpressionTrue(e,t,n){try{let i=rt(e.expression,[t],{context:t,resource:x(this.currentResource[this.currentResource.length-1]),rootResource:x(this.rootResource),ucum:x("http://unitsofmeasure.org")});return i.length===1&&i[0].value===!0}catch(i){return this.issues.push(en(n,`Constraint ${e.key} with expression: ${e.expression} failed with error: ${i.message}`)),!1}}isPrimitiveExtension(e,t,n){if(!t.startsWith("_"))return!1;let i=e.value[t];if(Array.isArray(i))for(let o of i)this.validateObject({type:"Element",value:o},Fe("Element"),n);else this.validateObject({type:"Element",value:i},Fe("Element"),n);return!0}validatePrimitiveType(e,t){let{type:n,value:i}=e,o=Fo[n];if(typeof i!==o){i!==null&&this.issues.push(h(t,`Invalid JSON type: expected ${o}, but got ${typeof i}`));return}o==="string"?this.validateString(i,n,t):o==="number"&&this.validateNumber(i,n,t)}validateString(e,t,n){if(!e.trim()){this.issues.push(h(n,"String must contain non-whitespace content"));return}let i=qo[t];i&&!i.exec(e)&&this.issues.push(h(n,"Invalid "+t+" format"))}validateNumber(e,t,n){isNaN(e)||!isFinite(e)?this.issues.push(h(n,"Invalid numeric value")):jo(t)&&!Number.isInteger(e)?this.issues.push(h(n,"Expected number to be an integer")):t==="positiveInt"&&e<=0?this.issues.push(h(n,"Expected number to be positive")):t==="unsignedInt"&&e<0&&this.issues.push(h(n,"Expected number to be non-negative"))}};function jo(r){return r==="integer"||r==="positiveInt"||r==="unsignedInt"}function Qo(r,e,t){let n=e.split(/(?=[A-Z])/g),i="";for(let o of n){if(i+=o,!t[i+"[x]"])continue;return!!E(r,i)}return!1}function rn(r,e){let[t,...n]=e.split("."),i=[E(r,t)];for(let o of n){let s=[];for(let a of i)if(a!==void 0)if(Array.isArray(a))for(let c of a)s.push(E(c,o));else s.push(E(a,o));i=s}return i}function Zt(r,e,t){for(let[n,i]of Object.entries(r)){let o=`${e}.${n}`,s=n.startsWith("_")?n.slice(1):`_${n}`;if(i===null)t.push(h(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?t.push(h(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!r[s]?.[a]?t.push(h(`${o}[${a}]`,"Invalid null value")):i[a]&&Zt(i[a],`${o}[${a}]`,t);else typeof i=="object"&&Zt(i,o,t)}}function nn(r,e){return e.pattern&&!pe(r,e.pattern)?!1:!(e.fixed&&!le(r,e.fixed))}function Ho(r,e,t){let n=t.fields[e.path];switch(e.type){case"value":case"pattern":if(!n||!r)return!1;if(nn(r,n))return!0;break}return!1}function Wo(r,e){if(e){for(let t of e.slices)if(e.discriminator.every(n=>Pt(rn(r,n.path))?.some(i=>Ho(i,n,t))))return t.name}}function en(r,e){return{severity:"error",code:"invariant",details:{text:e},expression:[r]}}0&&(module.exports={AndAtom,ArithemticOperatorAtom,AsAtom,BooleanInfixOperatorAtom,ClientStorage,ConcatAtom,ContainsAtom,DEFAULT_SEARCH_COUNT,DotAtom,EmptySetAtom,EqualsAtom,EquivalentAtom,FHIRPATH_KEYWORDS,FHIRPATH_OPERATORS,FhirFilterComparison,FhirFilterConnective,FhirFilterNegation,FhirPathAtom,FhirSchemaValidator,FunctionAtom,Hl7Context,Hl7Field,Hl7Message,Hl7Segment,ImpliesAtom,InAtom,IndexerAtom,InfixOperatorAtom,IsAtom,LRUCache,LiteralAtom,MEDPLUM_VERSION,MedplumClient,MemoryStorage,NotEqualsAtom,NotEquivalentAtom,OAuthGrantType,OAuthTokenType,OperationOutcomeError,Operator,OperatorPrecedence,OrAtom,Parser,ParserBuilder,PrefixOperatorAtom,PropertyType,ReadablePromise,SearchParameterType,SymbolAtom,Tokenizer,UnaryOperatorAtom,UnionAtom,XorAtom,accepted,allOk,arrayBufferToBase64,arrayBufferToHex,arrayify,assertOk,badRequest,booleanToTypedValue,buildTypeName,calculateAge,calculateAgeString,canReadResourceType,canWriteResource,canWriteResourceType,capitalize,checkForNull,convertToTransactionBundle,createReference,createStructureIssue,created,decodeBase64,deepClone,deepEquals,deepIncludes,encodeBase64,evalFhirPath,evalFhirPathTyped,fhirPathArrayEquals,fhirPathArrayEquivalent,fhirPathEquals,fhirPathEquivalent,fhirPathIs,fhirPathNot,findObservationInterval,findObservationReferenceRange,findResourceByCode,forbidden,formatAddress,formatCodeableConcept,formatCoding,formatDate,formatDateTime,formatFamilyName,formatGivenName,formatHumanName,formatMoney,formatObservationValue,formatPeriod,formatQuantity,formatRange,formatSearchQuery,formatTime,formatTiming,getCodeBySystem,getDateProperty,getDisplayString,getElementDefinition,getElementDefinitionTypeName,getExpressionForResourceType,getExpressionsForResourceType,getExtension,getExtensionValue,getIdentifier,getImageSrc,getPropertyDisplayName,getQuestionnaireAnswers,getReferenceString,getResourceTypeSchema,getResourceTypes,getSearchParameterDetails,getSearchParameters,getStatus,getTypedPropertyValue,globalSchema,gone,indexSearchParameter,indexSearchParameterBundle,indexStructureDefinition,indexStructureDefinitionBundle,initFhirPathParserBuilder,isAccepted,isEmpty,isGone,isLowerCase,isMedplumAccessToken,isNotFound,isObject,isOk,isOperationOutcome,isPeriod,isProfileResource,isQuantity,isQuantityEquivalent,isReference,isResource,isResourceType,isResourceTypeSchema,isStringArray,isUUID,isValidDate,loadDataTypes,matchesAccessPolicy,matchesRange,matchesSearchRequest,normalizeErrorString,normalizeOperationOutcome,notFound,notModified,operationOutcomeIssueToString,operationOutcomeToString,parseCriteriaAsSearchRequest,parseFhirPath,parseFilterParameter,parseHl7Date,parseJWTPayload,parseMappingLanguage,parseSearchDefinition,parseSearchRequest,parseSearchUrl,preciseEquals,preciseGreaterThan,preciseGreaterThanOrEquals,preciseLessThan,preciseLessThanOrEquals,preciseRound,projectAdminResourceTypes,protectedResourceTypes,publicResourceTypes,removeDuplicates,resolveId,serverError,setCodeBySystem,singleton,sleep,streamToBuffer,stringify,toJsBoolean,toTypedValue,tokenize,tooManyRequests,unauthorized,validate,validateResource,validateResourceType,validationError});
|
|
31
|
+
}`.replace(/\s+/g," "),a=await this.graphql(s);for(let c of a.data.StructureDefinitionList)Ke(c);for(let c of a.data.SearchParameterList)Je(c);return y})());return this.setCacheEntry(n,o),o}readHistory(t,n,i){return this.get(this.fhirUrl(t,n,"_history"),i)}readVersion(t,n,i,o){return this.get(this.fhirUrl(t,n,"_history",i),o)}readPatientEverything(t,n){return this.get(this.fhirUrl("Patient",t,"$everything"),n)}createResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");return this.invalidateSearches(t.resourceType),this.post(this.fhirUrl(t.resourceType),t,void 0,n)}async createResourceIfNoneExist(t,n,i){return await this.searchOne(t.resourceType,n,i)??this.createResource(t,i)}async createAttachment(t,n,i,o){let s=await this.createBinary(t,n,i,o);return{contentType:i,url:s.url,title:n}}createBinary(t,n,i,o){let s=this.fhirUrl("Binary");return n&&s.searchParams.set("_filename",n),o?this.uploadwithProgress(s,t,i,o):this.post(s,t,i)}uploadwithProgress(t,n,i,o){return new Promise((s,a)=>{let c=new XMLHttpRequest;c.responseType="json",c.onabort=()=>a(new Error("Request aborted")),c.onerror=()=>a(new Error("Request error")),o&&(c.upload.onprogress=f=>o(f),c.upload.onload=f=>o(f)),c.onload=()=>{c.status>=200&&c.status<300?s(c.response):a(new Error(c.statusText))},c.open("POST",t),c.withCredentials=!0,c.setRequestHeader("Authorization","Bearer "+this.accessToken),c.setRequestHeader("Cache-Control","no-cache, no-store, max-age=0"),c.setRequestHeader("Content-Type",i),c.setRequestHeader("X-Medplum","extended"),c.send(n)})}async createPdf(t,n,i,o){if(!this.createPdfImpl)throw new Error("PDF creation not enabled");let s=await this.createPdfImpl(t,i,o);return this.createBinary(s,n,"application/pdf")}createComment(t,n,i){let o=this.getProfile(),s,a;return t.resourceType==="Encounter"&&(s=Y(t),a=t.subject),t.resourceType==="ServiceRequest"&&(s=t.encounter,a=t.subject),t.resourceType==="Patient"&&(a=Y(t)),this.createResource({resourceType:"Communication",basedOn:[Y(t)],encounter:s,subject:a,sender:o?Y(o):void 0,sent:new Date().toISOString(),payload:[{contentString:n}]},i)}async updateResource(t,n){if(!t.resourceType)throw new Error("Missing resourceType");if(!t.id)throw new Error("Missing id");this.invalidateSearches(t.resourceType);let i=await this.put(this.fhirUrl(t.resourceType,t.id),t,void 0,n);return i||(i=t),this.cacheResource(i),i}patchResource(t,n,i,o){return this.invalidateSearches(t),this.patch(this.fhirUrl(t,n),i,o)}deleteResource(t,n,i){return this.deleteCacheEntry(this.fhirUrl(t,n).toString()),this.invalidateSearches(t),this.delete(this.fhirUrl(t,n),i)}validateResource(t,n){return this.post(this.fhirUrl(t.resourceType,"$validate"),t,void 0,n)}executeBot(t,n,i,o){let s;if(typeof t=="string"){let a=t;s=this.fhirUrl("Bot",a,"$execute")}else{let a=t;s=this.fhirUrl("Bot","$execute")+`?identifier=${a.system}|${a.value}`}return this.post(s,n,i,o)}executeBatch(t,n){return this.post(this.fhirBaseUrl.slice(0,-1),t,void 0,n)}sendEmail(t,n){return this.post("email/v1/send",t,"application/json",n)}graphql(t,n,i,o){return this.post(this.fhirUrl("$graphql"),{query:t,operationName:n,variables:i},xo,o)}readResourceGraph(t,n,i,o){return this.get(`${this.fhirUrl(t,n)}/$graph?graph=${i}`,o)}getActiveLogin(){return this.storage.getObject("activeLogin")}async setActiveLogin(t){this.clearActiveLogin(),this.setAccessToken(t.accessToken,t.refreshToken),this.storage.setObject("activeLogin",t),this.addLogin(t),this.refreshPromise=void 0,await this.refreshProfile()}getAccessToken(){return this.accessToken}setAccessToken(t,n){this.accessToken=t,this.refreshToken=n,this.sessionDetails=void 0,this.medplumServer=Qt(t)}getLogins(){return this.storage.getObject("logins")??[]}addLogin(t){let n=this.getLogins().filter(i=>i.profile?.reference!==t.profile?.reference);n.push(t),this.storage.setObject("logins",n)}async refreshProfile(){return this.medplumServer?(this.profilePromise=new Promise((t,n)=>{this.get("auth/me").then(i=>{this.profilePromise=void 0,this.sessionDetails=i,this.dispatchEvent(new Event("change")),t(i.profile)}).catch(n)}),this.profilePromise):Promise.resolve(void 0)}isLoading(){return!!this.profilePromise}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&&await this.profilePromise,this.getProfile()}getUserConfiguration(){return this.sessionDetails?.config}getAccessPolicy(){return this.sessionDetails?.accessPolicy}async download(t,n={}){return this.refreshPromise&&await this.refreshPromise,this.addFetchOptionsDefaults(n),(await this.fetch(t.toString(),n)).blob()}async uploadMedia(t,n,i,o,s){let a=await this.createBinary(t,i,n);return this.createResource({...o,resourceType:"Media",content:{contentType:n,url:"Binary/"+a.id,title:i}},s)}async bulkExport(t="",n,i,o){let s=t&&`${t}/`,a=this.fhirUrl(`${s}$export`);return n&&a.searchParams.set("_type",n),i&&a.searchParams.set("_since",i),this.startAsyncRequest(a.toString(),o)}async startAsyncRequest(t,n={}){this.addFetchOptionsDefaults(n);let i=n.headers;i.Prefer="respond-async";let o=await this.fetchWithRetry(t,n);if(o.status===202){let s=await jr(o);if(s)return this.pollStatus(s)}return this.parseResponse(o,"POST",t)}getCacheEntry(t,n){if(!this.requestCache||n?.cache==="no-cache"||n?.cache==="reload")return;let i=this.requestCache.get(t);if(!(!i||i.requestTime+this.cacheTime<Date.now()))return i}setCacheEntry(t,n){this.requestCache&&this.requestCache.set(t,{requestTime:Date.now(),value:n})}cacheResource(t){t?.id&&this.setCacheEntry(this.fhirUrl(t.resourceType,t.id).toString(),new P(Promise.resolve(t)))}deleteCacheEntry(t){this.requestCache&&this.requestCache.delete(t)}async request(t,n,i={}){this.refreshPromise&&await this.refreshPromise,i.method=t,this.addFetchOptionsDefaults(i);let o=await this.fetchWithRetry(n,i);return this.parseResponse(o,t,n,i)}async parseResponse(t,n,i,o={}){if(t.status===401)return this.handleUnauthenticated(n,i,o);if(t.status===204||t.status===304)return;let a=t.headers.get("content-type")?.includes("json");if(t.status===404&&!a)throw new m(ht);let c;if(a)try{c=await t.json()}catch(f){throw console.error("Error parsing response",t.status,f),f}if(t.status>=400)throw new m(Qe(c));return c}async fetchWithRetry(t,n){t.startsWith("http")||(t=new URL(t,this.baseUrl).href);let i=3,o=200,s;for(let a=0;a<i;a++){try{if(s=await this.fetch(t,n),s.status<500)return s}catch(c){this.retryCatch(a,i,c)}await ze(o)}return s}async pollStatus(t){let n=!0,i,o=2e3;for(;n;){let s={};this.addFetchOptionsDefaults(s);let a=await this.fetchWithRetry(t,s);if(a.status!==202&&(n=!1,i=a,a.status===201)){let c=await jr(a);c&&(i=await this.fetchWithRetry(c,s))}await ze(o)}return this.parseResponse(i,"POST",t)}async executeAutoBatch(){let t=[...this.autoBatchQueue];if(this.autoBatchQueue.length=0,this.autoBatchTimerId=void 0,t.length===1){let o=t[0];try{o.resolve(await this.request(o.method,this.fhirBaseUrl+o.url,o.options))}catch(s){o.reject(new m(Qe(s)))}return}let n={resourceType:"Bundle",type:"batch",entry:t.map(o=>({request:{method:o.method,url:o.url},resource:o.options.body?JSON.parse(o.options.body):void 0}))},i=await this.post(this.fhirBaseUrl.slice(0,-1),n);for(let o=0;o<t.length;o++){let s=t[o],a=i.entry?.[o];a?.response?.outcome&&!je(a.response.outcome)?s.reject(new m(a.response.outcome)):s.resolve(a?.resource)}}addFetchOptionsDefaults(t){let n=t.headers;n||(n={},t.headers=n),n.Accept=Br,n["X-Medplum"]="extended",t.body&&!n["Content-Type"]&&(n["Content-Type"]=Br),this.accessToken?n.Authorization="Bearer "+this.accessToken:this.basicAuth&&(n.Authorization="Basic "+this.basicAuth),t.cache||(t.cache="no-cache"),t.credentials||(t.credentials="include")}setRequestContentType(t,n){t.headers||(t.headers={});let i=t.headers;i["Content-Type"]=n}setRequestBody(t,n){typeof n=="string"||typeof Blob<"u"&&n instanceof Blob||typeof File<"u"&&n instanceof File||typeof Uint8Array<"u"&&n instanceof Uint8Array?t.body=n:n&&(t.body=JSON.stringify(n))}handleUnauthenticated(t,n,i){return this.refresh()?this.request(t,n,i):(this.clearActiveLogin(),this.onUnauthenticated&&this.onUnauthenticated(),Promise.reject(new Error("Unauthenticated")))}async startPkce(){let t=jt();sessionStorage.setItem("pkceState",t);let n=jt();sessionStorage.setItem("codeVerifier",n);let i=await Mr(n),o=At(i).replaceAll("+","-").replaceAll("/","_").replaceAll("=","");return sessionStorage.setItem("codeChallenge",o),{codeChallengeMethod:"S256",codeChallenge:o}}async requestAuthorization(t){let n=await this.ensureCodeChallenge(t??{}),i=new URL(this.authorizeUrl);i.searchParams.set("response_type","code"),i.searchParams.set("state",sessionStorage.getItem("pkceState")),i.searchParams.set("client_id",n.clientId??this.clientId),i.searchParams.set("redirect_uri",n.redirectUri??qr()),i.searchParams.set("code_challenge_method",n.codeChallengeMethod),i.searchParams.set("code_challenge",n.codeChallenge),i.searchParams.set("scope",n.scope??"openid profile"),window.location.assign(i.toString())}processCode(t,n){let i=new URLSearchParams;if(i.set("grant_type","authorization_code"),i.set("code",t),i.set("client_id",n?.clientId??this.clientId),i.set("redirect_uri",n?.redirectUri??qr()),typeof sessionStorage<"u"){let o=sessionStorage.getItem("codeVerifier");o&&i.set("code_verifier",o)}return this.fetchTokens(i)}refresh(){if(this.refreshPromise)return this.refreshPromise;if(this.refreshToken){let t=new URLSearchParams;return t.set("grant_type","refresh_token"),t.set("client_id",this.clientId),t.set("refresh_token",this.refreshToken),this.refreshPromise=this.fetchTokens(t),this.refreshPromise}if(this.clientId&&this.clientSecret)return this.refreshPromise=this.startClientLogin(this.clientId,this.clientSecret),this.refreshPromise}async startClientLogin(t,n){this.clientId=t,this.clientSecret=n;let i=new URLSearchParams;return i.set("grant_type","client_credentials"),i.set("client_id",t),i.set("client_secret",n),this.fetchTokens(i)}async startJwtBearerLogin(t,n,i){this.clientId=t;let o=new URLSearchParams;return o.set("grant_type","urn:ietf:params:oauth:grant-type:jwt-bearer"),o.set("client_id",t),o.set("assertion",n),o.set("scope",i),this.fetchTokens(o)}setBasicAuth(t,n){this.clientId=t,this.clientSecret=n,this.basicAuth=$t(t+":"+n)}async invite(t,n){return this.post("admin/projects/"+t+"/invite",n)}async fetchTokens(t){let n={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:t,credentials:"include"},i=n.headers;this.basicAuth&&(i.Authorization=`Basic ${this.basicAuth}`);let o=await this.fetch(this.tokenUrl,n);if(!o.ok){this.clearActiveLogin();try{let a=await o.json();throw new m(k(a.error_description))}catch(a){throw new m(k("Failed to fetch tokens"),a)}}let s=await o.json();return await this.verifyTokens(s),this.getProfile()}async verifyTokens(t){let n=t.access_token,i=it(n);if(Date.now()>=i.exp*1e3)throw this.clearActiveLogin(),new Error("Token expired");if(i.cid){if(i.cid!==this.clientId)throw this.clearActiveLogin(),new Error("Token was not issued for this audience")}else if(this.clientId&&i.client_id!==this.clientId)throw this.clearActiveLogin(),new Error("Token was not issued for this audience");return this.setActiveLogin({accessToken:n,refreshToken:t.refresh_token,project:t.project,profile:t.profile})}setupStorageListener(){try{window.addEventListener("storage",t=>{(t.key===null||t.key==="activeLogin")&&window.location.reload()})}catch{}}retryCatch(t,n,i){if(i.message==="Failed to fetch"&&t===1&&this.dispatchEvent(new Event("offline")),t>=n-1)throw i}};function vo(){if(!globalThis.fetch)throw new Error("Fetch not available in this environment");return globalThis.fetch.bind(globalThis)}function qr(){return typeof window>"u"?"":window.location.protocol+"//"+window.location.host+"/"}function $r(r){return r&&(r.endsWith("/")?r:r+"/")}async function jr(r){let e=r.headers.get("content-location");if(e)return e;let t=r.headers.get("location");if(t)return t;let n=await r.json();if(ue(n)&&n.issue?.[0]?.diagnostics)return n.issue[0].diagnostics}function Qr(r){let e=r.entry?.map(t=>t.resource)??[];return Object.assign(e,{bundle:r})}var bo=[...te,"->","<<",">>"];function Gr(r){return new j(r,ee,bo).tokenize()}var Wt=class{constructor(e){this.parser=e;this.structureMap={resourceType:"StructureMap"}}parse(){for(this.parser.consume("Symbol","map"),this.structureMap.url=this.parser.consume("String").value,this.parser.consume("="),this.structureMap.name=this.parser.consume().value;this.parser.hasMore();){let e=this.parser.peek()?.value;switch(e){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}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(){let e=[this.parseRuleSource()];for(;this.parser.hasMore()&&this.parser.peek()?.value===",";)this.parser.consume(","),e.push(this.parseRuleSource());return e}parseRuleSource(){let e={},t=this.parseRuleContext();if(t.includes(".")){let n=t.split(".");e.context=n[0],e.element=n[1]}else e.context=t;if(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("default"),this.parser.consumeAndParse()),(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==="where"){this.parser.consume("Symbol","where");let n=this.parser.consumeAndParse(l.Arrow);e.condition=n.toString()}if(this.parser.peek()?.value==="check"){this.parser.consume("Symbol","check");let n=this.parser.consumeAndParse(l.Arrow);e.check=n.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={},t=this.parseRuleContext();if(t.includes(".")){let n=t.split(".");e.contextType="variable",e.context=n[0],e.element=n[1]}else e.context=t;return 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==="first"||this.parser.peek()?.value==="share"||this.parser.peek()?.value==="last"||this.parser.peek()?.value==="collate")&&(e.listMode=[this.parser.consume().value]),e}parseRuleTargetTransform(e){e.transform="copy";let t=this.parser.consumeAndParse(l.As);if(t instanceof N)this.parseRuleTargetSymbol(e,t);else if(t instanceof M)this.parseRuleTargetFunction(e,t);else if(t instanceof w)this.parseRuleTargetLiteral(e,t);else throw new Error(`Unexpected FHIRPath: ${t}`)}parseRuleTargetSymbol(e,t){e.parameter=[{valueId:t.name}]}parseRuleTargetFunction(e,t){let n=t.name;switch(n){case"create":e.parameter=[{valueString:t.args[0].value.value}];break;case"translate":e.parameter=[{}];break;default:throw new Error("Unknown target function: "+n)}}parseRuleTargetLiteral(e,t){switch(t.value.type){case"boolean":e.parameter=[{valueBoolean:t.value.value}];break;case"decimal":e.parameter=[{valueDecimal:t.value.value}];break;case"string":e.parameter=[{valueString:t.value.value}];break;default:throw new Error("Unknown target literal type: "+t.value.type)}}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(l.Arrow);return[{name:e.name,variable:e.args.map(t=>t.name)}]}parseConceptMap(){for(;this.parser.peek()?.value!=="}";)this.parser.consume();this.parser.consume("}")}},So=re().registerInfix("->",{precedence:l.Arrow}).registerInfix(";",{precedence:l.Semicolon});function Ro(r){let e=So.construct(Gr(r));return e.removeComments(),new Wt(e).parse()}var Ao=[...te,"eq","ne","co"];function zr(r){return new j(r,ee,Ao,{dateTimeLiterals:!0,symbolRegex:/[^\s\])]/}).tokenize()}var Ne=class{constructor(e,t,n){this.path=e;this.operator=t;this.value=n}},Me=class{constructor(e){this.child=e}},Be=class{constructor(e,t,n){this.keyword=e;this.left=t;this.right=n}};var Eo={eq:"eq",ne:"ne",co:"contains",sw:void 0,ew:void 0,gt:"gt",lt:"lt",ge:"ge",le:"le",ap:"ap",sa:"sa",eb:"eb",pr:"missing",po:void 0,ss:void 0,sb:void 0,in:"in",ni:"not-in",re:void 0,identifier:"identifier"};function Po(r){let e=Eo[r];if(!e)throw new m(k("Invalid operator: "+r));return e}var Gt=class{constructor(e){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 Me(this.parse()),this.parser.consume(")")):e=new Ne(this.parser.consume("Symbol").value,Po(this.parser.consume("Symbol").value),this.parser.consume().value);let t=this.parser.peek()?.value;return t==="and"||t==="or"?(this.parser.consume("Symbol",t),new Be(t,e,this.parse())):e}},Co=re();function wo(r){let e=Co.construct(zr(r));return e.removeComments(),new Gt(e).parse()}var H=class{constructor(e="\r",t="|",n="^",i="~",o="\\",s="&"){this.segmentSeparator=e;this.fieldSeparator=t;this.componentSeparator=n;this.repetitionSeparator=i;this.escapeCharacter=o;this.subcomponentSeparator=s}getMsh2(){return this.fieldSeparator+this.componentSeparator+this.repetitionSeparator+this.escapeCharacter+this.subcomponentSeparator}},zt=class r{constructor(e,t=new H){this.context=t,this.segments=e}get header(){return this.segments[0]}get(e){return this.getSegment(e)}getAll(e){return this.getAllSegments(e)}getSegment(e){return typeof e=="number"?this.segments[e]:this.segments.find(t=>t.name===e)}getAllSegments(e){return this.segments.filter(t=>t.name===e)}toString(){return this.segments.map(e=>e.toString()).join(this.context.segmentSeparator)}buildAck(){let e=new Date,t=this.getSegment("MSH"),n=t?.getField(3)?.toString()??"",i=t?.getField(4)?.toString()??"",o=t?.getField(5)?.toString()??"",s=t?.getField(6)?.toString()??"",a=t?.getField(10)?.toString()??"",c=t?.getField(12)?.toString()??"2.5.1";return new r([new oe(["MSH",this.context.getMsh2(),o,s,n,i,e.toISOString(),"",this.buildAckMessageType(t),e.getTime().toString(),"P",c],this.context),new oe(["MSA","AA",a,"OK"],this.context)])}buildAckMessageType(e){let t=e?.getField(9),n=t?.getComponent(2),i=t?.getComponent(3),o="ACK";return n&&i?o=`ACK^${n}^ACK`:n&&(o=`ACK^${n}`),o}static parse(e){if(!e.startsWith("MSH")){let n=new Error("Invalid HL7 message");throw n.type="entity.parse.failed",n}let t=new H("\r",e.charAt(3),e.charAt(4),e.charAt(5),e.charAt(6),e.charAt(7));return new r(e.split(/[\r\n]+/).map(n=>oe.parse(n,t)),t)}},oe=class r{constructor(e,t=new H){this.context=t,St(e)?this.fields=e.map(n=>se.parse(n,t)):this.fields=e,this.name=this.fields[0].components[0][0]}get(e){return this.fields[e]}getField(e){if(this.name==="MSH"){if(e===1)return se.parse(this.context.fieldSeparator,this.context);if(e>1)return this.fields[e-1]}return this.fields[e]}getComponent(e,t,n,i=0){return this.getField(e).getComponent(t,n,i)}toString(){return this.fields.map(e=>e.toString()).join(this.context.fieldSeparator)}static parse(e,t=new H){return new r(e.split(t.fieldSeparator).map(n=>se.parse(n,t)),t)}},se=class r{constructor(e,t=new H){this.context=t,this.components=e}get(e,t,n=0){return this.getComponent(e+1,t,n)}getComponent(e,t,n=0){let i=this.components[n][e-1]??"";return t!==void 0&&(i=i.split(this.context.subcomponentSeparator)[t]??""),i}toString(){return this.components.map(e=>e.join(this.context.componentSeparator)).join(this.context.repetitionSeparator)}static parse(e,t=new H){return new r(e.split(t.repetitionSeparator).map(n=>n.split(t.componentSeparator)),t)}};function ko(r,e){if(!r)return;e={seconds:!0,tzOffset:"Z",...e};let t=Number.parseInt(r.substring(0,4),10),n=Number.parseInt(r.substring(4,6),10),i=Number.parseInt(r.substring(6,8),10),o=Number.parseInt(r.substring(8,10),10),s=Number.parseInt(r.substring(10,12),10),a=e.seconds?Number.parseInt(r.substring(12,14),10):0;return`${ie(t)}-${ie(n)}-${ie(i)}T${ie(o)}:${ie(s)}:${ie(a)}.000${e.tzOffset}`}function ie(r){return r.toString().padStart(2,"0")}var Do={base64Binary:"string",boolean:"boolean",canonical:"string",code:"string",date:"string",dateTime:"string",decimal:"number",id:"string",instant:"string",integer:"number",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"},Io=new Set(["resourceType","id","meta","implicitRules","language","text","contained","extension","modifierExtension"]);function Kr(r){let e=y.types[r];return e&&e.structureDefinition.id===r&&e.structureDefinition.kind==="resource"}function Oo(r){if(!r)throw new m(B("Resource type is null"));if(!Kr(r))throw new m(B("Unknown resource type"))}function Vo(r){new st(r).validate()}var st=class{constructor(e){this.issues=[],this.root=e}validate(){let e=this.root;if(!e)throw new m(B("Resource is null"));let t=e.resourceType;if(!t)throw new m(B("Missing resource type"));if(at(e,"",this.issues),this.validateObject(x(e),t),this.issues.length>0)throw new m({resourceType:"OperationOutcome",issue:this.issues})}validateObject(e,t){let n=y.types[e.type];if(!n)throw new m(B("Unknown type: "+e.type));let i=n.properties;this.checkProperties(t,i,e),this.checkAdditionalProperties(t,e,i)}checkProperties(e,t,n){for(let[i,o]of Object.entries(t))this.checkProperty(e+"."+i,o,n)}checkProperty(e,t,n){let i=e.split(".").pop(),o=E(n,i);if(v(o)){t.min!==void 0&&t.min>0&&this.issues.push(h(e,"Missing required property"));return}if(t.max==="*"){if(!Array.isArray(o)){this.issues.push(h(e,"Expected array for property"));return}for(let s of o)this.checkPropertyValue(e,t,s)}else{if(Array.isArray(o)){this.issues.push(h(e,"Expected single value for property"));return}this.checkPropertyValue(e,t,o)}}checkPropertyValue(e,t,n){n.value!==null&&(fe(n.type.charAt(0))?this.validatePrimitiveType(t,n):this.validateObject(n,e))}validatePrimitiveType(e,t){let{type:n,value:i}=t;if(i===null)return;let o=Do[t.type];if(typeof i!==o){this.createIssue(e,"Invalid type for "+n);return}o==="string"?this.validateString(e,n,i):o==="number"&&this.validateNumber(e,n,i)}validateString(e,t,n){if(!n.trim()){this.createIssue(e,"Invalid empty string");return}let i=y.types[t]?.properties.value;if(i?.type){let o=vt(i.type[0],"http://hl7.org/fhir/StructureDefinition/regex");o&&(new RegExp(o).exec(n)||this.createIssue(e,"Invalid "+t+" format"))}}validateNumber(e,t,n){if(isNaN(n)||!isFinite(n)){this.createIssue(e,"Invalid "+t+" value");return}Uo(t)&&!Number.isInteger(n)&&this.createIssue(e,"Number is not an integer"),t==="positiveInt"&&n<=0&&this.createIssue(e,"Number is less than or equal to zero"),t==="unsignedInt"&&n<0&&this.createIssue(e,"Number is negative")}checkAdditionalProperties(e,t,n){let i=t.value;for(let o of Object.keys(i))this.checkAdditionalProperty(e,o,t,n)}checkAdditionalProperty(e,t,n,i){if(!Io.has(t)&&!(t in i)&&!Lo(t,n,i)&&!this.checkPrimitiveElement(e,t,n)){let o=`${e}.${t}`;this.issues.push(h(o,`Invalid additional property "${o}"`))}}checkPrimitiveElement(e,t,n){return!t.startsWith("_")||!(t.slice(1)in n.value)?!1:(this.validateObject({type:"Element",value:n.value[t]},e),!0)}createIssue(e,t){this.issues.push(h(e.path,t))}};function Uo(r){return r==="integer"||r==="positiveInt"||r==="unsignedInt"}function Lo(r,e,t){for(let n of Object.keys(t)){if(!n.endsWith("[x]"))continue;let i=n.replace("[x]","");if(!r.startsWith(i))continue;let o=E(e,n);if(o&&(Array.isArray(o)&&(o=o[0]),o&&r===i+b(o.type)))return!0}return!1}function at(r,e,t){r===null?t.push(h(e,"Invalid null value")):Array.isArray(r)?_o(r,e,t):typeof r=="object"&&No(r,e,t)}function _o(r,e,t){for(let n=0;n<r.length;n++)r[n]===void 0?t.push(h(`${e}[${n}]`,"Invalid undefined value")):at(r[n],`${e}[${n}]`,t)}function No(r,e,t){for(let[n,i]of Object.entries(r))at(i,`${e}${e?".":""}${n}`,t)}function h(r,e){return{severity:"error",code:"structure",details:{text:e},expression:[r]}}function Mo(r){let e=[];return new Promise((t,n)=>{r.on("data",i=>e.push(Buffer.from(i))),r.on("error",i=>{r.destroy(),n(i)}),r.on("end",()=>{t(Buffer.concat(e))}),r.on("close",()=>{r.destroy()})})}function Yt(r){return new Jt(r).parse()}var Kt=Object.create(null);function Zr(r){for(let{resource:e}of r.entry??[]){if(!e?.name)throw new Error("Failed loading StructureDefinition from bundle");if(e.resourceType!=="StructureDefinition")continue;let t=Yt(e);Kt[e.name]=t;for(let n of t.innerTypes)Kt[n.name]=n}}function Fe(r){let e=Kt[r];if(!e)throw new m(yt(Error("Unknown data type: "+r)));return e}var Jt=class{constructor(e){if(!e.snapshot?.element||e.snapshot.element.length===0)throw new Error(`No snapshot defined for StructureDefinition '${e.name}'`);let t=e.snapshot.element[0];this.elements=e.snapshot.element.slice(1),this.elementIndex=Object.create(null),this.index=0,this.resourceSchema={name:e.type,fields:{},constraints:this.parseFieldDefinition(t).constraints,innerTypes:[]},this.innerTypes=[]}parse(){let e=this.next();for(;e;){if(e.sliceName)this.parseSliceStart(e);else if(e.id?.includes(":")){if(this.slicingContext?.current){let t=ct(e,this.slicingContext.path);this.slicingContext.current.fields[t]=this.parseFieldDefinition(e)}}else{let t=this.parseFieldDefinition(e);this.checkFieldEnter(e,t),this.backboneContext&&e.path?.startsWith(this.backboneContext.path+".")?this.backboneContext.type.fields[ct(e,this.backboneContext.path)]=t:this.backboneContext?.parent&&e.path?.startsWith(this.backboneContext.parent.path+".")?this.backboneContext.parent.type.fields[ct(e,this.backboneContext.parent.path)]=t:this.resourceSchema.fields[ct(e,this.resourceSchema.name)]=t,this.checkFieldExit(e)}e=this.next()}return this.checkFieldExit(),this.innerTypes.length>0&&(this.resourceSchema.innerTypes=this.innerTypes),this.resourceSchema}checkFieldEnter(e,t){if(this.isInnerType(e)){for(;this.backboneContext&&!ae(this.backboneContext?.path,e.path);)this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;this.backboneContext={type:{name:Yr(e.path?.split(".")??[]),fields:{},constraints:this.parseFieldDefinition(e).constraints,innerTypes:[]},path:e.path??"",parent:ae(this.backboneContext?.path,e.path)?this.backboneContext:this.backboneContext?.parent}}e.slicing&&!this.slicingContext&&(t.slicing={discriminator:(e.slicing?.discriminator??[]).map(n=>{if(n.type!=="value"&&n.type!=="pattern")throw new Error(`Unsupported slicing discriminator type: ${n.type}`);return{path:n.path,type:n.type}}),slices:[],ordered:e.slicing?.ordered??!1,rule:e.slicing?.rules},this.slicingContext={field:t.slicing,path:e.path??""})}checkFieldExit(e=void 0){if(this.backboneContext&&!ae(this.backboneContext.path,e?.path))if(this.backboneContext.parent)do this.innerTypes.push(this.backboneContext.type),this.backboneContext=this.backboneContext.parent;while(this.backboneContext&&!ae(this.backboneContext.path,e?.path));else this.innerTypes.push(this.backboneContext.type),delete this.backboneContext;this.slicingContext&&!ae(this.slicingContext.path,e?.path)&&(this.slicingContext?.current&&this.slicingContext.field.slices.push(this.slicingContext.current),delete this.slicingContext)}next(){let e=this.peek();if(e)return this.index++,e}peek(){let e=this.elements[this.index];if(e){if(this.elementIndex[e.path??""]=e,e.contentReference){let t=this.elementIndex[e.contentReference.slice(e.contentReference.indexOf("#")+1)];return t?{...t,id:e.id,path:e.path,min:e.min??t.min,max:e.max??t.max}:void 0}return e}}isInnerType(e){let t=this.peek();return!!(ae(e?.path,t?.path)&&e.type?.some(n=>["BackboneElement","Element"].includes(n.code)))}parseSliceStart(e){if(!this.slicingContext)throw new Error("Invalid slice start before discriminator");this.slicingContext.current&&this.slicingContext.field.slices.push(this.slicingContext.current),this.slicingContext.current={name:e.sliceName??"",fields:{},min:e.min??0,max:e.max==="*"?Number.POSITIVE_INFINITY:Number.parseInt(e.max,10)}}parseFieldDefinition(e){let t=Jr(e.max),n=e.base?.max?Jr(e.base.max):t,i={type:"ElementDefinition",value:e};return{min:e.min??0,max:t,isArray:n>1,constraints:(e.constraint??[]).map(o=>({key:o.key??"",severity:o.severity??"error",expression:o.expression??"",description:o.human??""})),type:(e.type??[]).map(o=>({code:["BackboneElement","Element"].includes(o.code)?Yr(e.base?.path?.split(".")??[]):o.code??"",targetProfile:o.targetProfile??[]})),fixed:Xr(E(i,"fixed")),pattern:Xr(E(i,"pattern")),binding:e.binding?.strength==="required"?e.binding.valueSet:void 0}}};function Jr(r){return r==="*"?Number.POSITIVE_INFINITY:Number.parseInt(r,10)}function ct(r,e=""){return Bo(r.path,e)}function Bo(r,e){return r?e&&r.startsWith(e)?r.substring(e.length+1):r:""}function ae(r,e){return!r||!e?!1:e.startsWith(r+".")||e===r}function Yr(r){return r.length===1?r[0]:r.map(b).join("")}function Xr(r){return Array.isArray(r)&&r.length>0?r[0]:v(r)?void 0:r}var Fo={base64Binary:"string",boolean:"boolean",canonical:"string",code:"string",date:"string",dateTime:"string",decimal:"number",id:"string",instant:"string",integer:"number",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"},qo={base64Binary:/^([A-Za-z\d+/]{4})*([A-Za-z\d+/]{2}==|[A-Za-z\d+/]{3}=)?$/,canonical:/^\S*$/,code:/^[^\s]+( [^\s]+)*$/,date:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1]))?)?$/,dateTime:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)(-(0[1-9]|1[0-2])(-(0[1-9]|[1-2]\d|3[0-1])(T([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?)?)?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00)?)?)?$/,id:/^[A-Za-z0-9\-.]{1,64}$/,instant:/^(\d(\d(\d[1-9]|[1-9]0)|[1-9]00)|[1-9]000)-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])T([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?(Z|[+-]((0\d|1[0-3]):[0-5]\d|14:00))$/,markdown:/^[\s\S]+$/,oid:/^urn:oid:[0-2](\.(0|[1-9]\d*))+$/,string:/^[\s\S]+$/,time:/^([01]\d|2[0-3]):[0-5]\d:([0-5]\d|60)(\.\d{1,9})?$/,uri:/^\S*$/,url:/^\S*$/,uuid:/^urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/,xhtml:/.*/},$o={"ele-1":!0};function tn(r,e){return new Xt(r.resourceType,r,e).validate()}var Xt=class{constructor(e,t,n){this.issues=[],this.rootResource=t,this.currentResource=[t],n?this.schema=Yt(n):this.schema=Fe(e)}validate(){let e=this.rootResource.resourceType;if(!e)throw new m(B("Missing resource type"));Zt(this.rootResource,e,this.issues),this.validateObject({type:e,value:this.currentResource[this.currentResource.length-1]},this.schema,e);let t=this.issues;if(this.issues=[],t.length>0)throw new m({resourceType:"OperationOutcome",issue:t})}validateObject(e,t,n){for(let[i,o]of Object.entries(t.fields))this.checkProperty(e,i,t,`${n}.${i}`);this.checkAdditionalProperties(e,t.fields,n)}checkProperty(e,t,n,i){let o=rn(e,t),s=n.fields[t];if(!s)throw new Error(`Missing element validation schema for ${t}`);for(let a of o){if(!this.checkPresence(a,s,i))return;let c;if(s.isArray){if(!Array.isArray(a)){this.issues.push(h(i,"Expected array of values for property"));return}c=a}else{if(Array.isArray(a)){this.issues.push(h(i,"Expected single value for property"));return}c=[a]}(c.length<s.min||c.length>s.max)&&this.issues.push(h(i,`Invalid number of values: expected ${s.min}..${Number.isFinite(s.max)?s.max:"*"}, but found ${c.length}`)),nn(a,s)||this.issues.push(h(i,"Value did not match expected pattern"));let f=s.slicing?Object.fromEntries(s.slicing.slices.map(p=>[p.name,0])):void 0;for(let p of c){let ce=V(p.value);ce&&this.currentResource.push(p.value),this.constraintsCheck(p,s,i),this.checkPropertyValue(p,i);let qe=Wo(p,s.slicing);qe&&f&&(f[qe]+=1),ce&&this.currentResource.pop()}this.validateSlices(s.slicing?.slices,f,i)}}checkPresence(e,t,n){return e===void 0?(t.min>0&&this.issues.push(h(n,"Missing required property")),!1):v(e)?(this.issues.push(h(n,"Invalid empty value")),!1):!0}checkPropertyValue(e,t){if(fe(e.type.charAt(0)))this.validatePrimitiveType(e,t);else{let n=Fe(e.type);this.validateObject(e,n,t)}}validateSlices(e,t,n){if(!(!e||!t))for(let i of e){let o=t[i.name];(o<i.min||o>i.max)&&this.issues.push(h(n,`Incorrect number of values provided for slice '${i.name}': expected ${i.min}..${Number.isFinite(i.max)?i.max:"*"}, but found ${o}`))}}checkAdditionalProperties(e,t,n){let i=e.value;if(i)for(let o of Object.keys(i))o!=="resourceType"&&!(o in t)&&!(o.slice(1)in t&&this.isPrimitiveExtension(e,o,n))&&!Qo(e,o,t)&&this.issues.push(h(`${n}.${o}`,`Invalid additional property "${o}"`))}constraintsCheck(e,t,n){let i=t.constraints;for(let o of i)if(!(o.severity!=="error"||o.key in $o)&&!this.isExpressionTrue(o,e,n)){this.issues.push(en(n,`Constraint ${o.key} failed with expression: ${o.expression}`));return}}isExpressionTrue(e,t,n){try{let i=rt(e.expression,[t],{context:t,resource:x(this.currentResource[this.currentResource.length-1]),rootResource:x(this.rootResource),ucum:x("http://unitsofmeasure.org")});return i.length===1&&i[0].value===!0}catch(i){return this.issues.push(en(n,`Constraint ${e.key} with expression: ${e.expression} failed with error: ${i.message}`)),!1}}isPrimitiveExtension(e,t,n){if(!t.startsWith("_"))return!1;let i=e.value[t];if(Array.isArray(i))for(let o of i)this.validateObject({type:"Element",value:o},Fe("Element"),n);else this.validateObject({type:"Element",value:i},Fe("Element"),n);return!0}validatePrimitiveType(e,t){let{type:n,value:i}=e,o=Fo[n];if(typeof i!==o){i!==null&&this.issues.push(h(t,`Invalid JSON type: expected ${o}, but got ${typeof i}`));return}o==="string"?this.validateString(i,n,t):o==="number"&&this.validateNumber(i,n,t)}validateString(e,t,n){if(!e.trim()){this.issues.push(h(n,"String must contain non-whitespace content"));return}let i=qo[t];i&&!i.exec(e)&&this.issues.push(h(n,"Invalid "+t+" format"))}validateNumber(e,t,n){isNaN(e)||!isFinite(e)?this.issues.push(h(n,"Invalid numeric value")):jo(t)&&!Number.isInteger(e)?this.issues.push(h(n,"Expected number to be an integer")):t==="positiveInt"&&e<=0?this.issues.push(h(n,"Expected number to be positive")):t==="unsignedInt"&&e<0&&this.issues.push(h(n,"Expected number to be non-negative"))}};function jo(r){return r==="integer"||r==="positiveInt"||r==="unsignedInt"}function Qo(r,e,t){let n=e.split(/(?=[A-Z])/g),i="";for(let o of n){if(i+=o,!t[i+"[x]"])continue;return!!E(r,i)}return!1}function rn(r,e){let[t,...n]=e.split("."),i=[E(r,t)];for(let o of n){let s=[];for(let a of i)if(a!==void 0)if(Array.isArray(a))for(let c of a)s.push(E(c,o));else s.push(E(a,o));i=s}return i}function Zt(r,e,t){for(let[n,i]of Object.entries(r)){let o=`${e}.${n}`,s=n.startsWith("_")?n.slice(1):`_${n}`;if(i===null)t.push(h(o,"Invalid null value"));else if(Array.isArray(i))for(let a=0;a<i.length;a++)i[a]===void 0?t.push(h(`${o}[${a}]`,"Invalid undefined value")):i[a]===null&&!r[s]?.[a]?t.push(h(`${o}[${a}]`,"Invalid null value")):i[a]&&Zt(i[a],`${o}[${a}]`,t);else typeof i=="object"&&Zt(i,o,t)}}function nn(r,e){return e.pattern&&!pe(r,e.pattern)?!1:!(e.fixed&&!le(r,e.fixed))}function Ho(r,e,t){let n=t.fields[e.path];switch(e.type){case"value":case"pattern":if(!n||!r)return!1;if(nn(r,n))return!0;break}return!1}function Wo(r,e){if(e){for(let t of e.slices)if(e.discriminator.every(n=>Pt(rn(r,n.path))?.some(i=>Ho(i,n,t))))return t.name}}function en(r,e){return{severity:"error",code:"invariant",details:{text:e},expression:[r]}}0&&(module.exports={AndAtom,ArithemticOperatorAtom,AsAtom,BooleanInfixOperatorAtom,ClientStorage,ConcatAtom,ContainsAtom,DEFAULT_SEARCH_COUNT,DotAtom,EmptySetAtom,EqualsAtom,EquivalentAtom,FHIRPATH_KEYWORDS,FHIRPATH_OPERATORS,FhirFilterComparison,FhirFilterConnective,FhirFilterNegation,FhirPathAtom,FhirSchemaValidator,FunctionAtom,Hl7Context,Hl7Field,Hl7Message,Hl7Segment,ImpliesAtom,InAtom,IndexerAtom,InfixOperatorAtom,IsAtom,LRUCache,LiteralAtom,MEDPLUM_VERSION,MedplumClient,MemoryStorage,NotEqualsAtom,NotEquivalentAtom,OAuthGrantType,OAuthTokenType,OperationOutcomeError,Operator,OperatorPrecedence,OrAtom,Parser,ParserBuilder,PrefixOperatorAtom,PropertyType,ReadablePromise,SearchParameterType,SymbolAtom,Tokenizer,UnaryOperatorAtom,UnionAtom,XorAtom,accepted,allOk,arrayBufferToBase64,arrayBufferToHex,arrayify,assertOk,badRequest,booleanToTypedValue,buildTypeName,calculateAge,calculateAgeString,canReadResourceType,canWriteResource,canWriteResourceType,capitalize,checkForNull,convertToTransactionBundle,createReference,createStructureIssue,created,decodeBase64,deepClone,deepEquals,deepIncludes,encodeBase64,evalFhirPath,evalFhirPathTyped,fhirPathArrayEquals,fhirPathArrayEquivalent,fhirPathEquals,fhirPathEquivalent,fhirPathIs,fhirPathNot,findObservationInterval,findObservationReferenceRange,findResourceByCode,forbidden,formatAddress,formatCodeableConcept,formatCoding,formatDate,formatDateTime,formatFamilyName,formatGivenName,formatHumanName,formatMoney,formatObservationValue,formatPeriod,formatQuantity,formatRange,formatSearchQuery,formatTime,formatTiming,getCodeBySystem,getDateProperty,getDisplayString,getElementDefinition,getElementDefinitionTypeName,getExpressionForResourceType,getExpressionsForResourceType,getExtension,getExtensionValue,getIdentifier,getImageSrc,getPropertyDisplayName,getQuestionnaireAnswers,getReferenceString,getResourceTypeSchema,getResourceTypes,getSearchParameterDetails,getSearchParameters,getStatus,getTypedPropertyValue,globalSchema,gone,indexSearchParameter,indexSearchParameterBundle,indexStructureDefinition,indexStructureDefinitionBundle,initFhirPathParserBuilder,isAccepted,isEmpty,isGone,isLowerCase,isMedplumAccessToken,isNotFound,isObject,isOk,isOperationOutcome,isPeriod,isProfileResource,isQuantity,isQuantityEquivalent,isReference,isResource,isResourceType,isResourceTypeSchema,isStringArray,isUUID,isValidDate,loadDataTypes,matchesAccessPolicy,matchesRange,matchesSearchRequest,normalizeErrorString,normalizeOperationOutcome,notFound,notModified,operationOutcomeIssueToString,operationOutcomeToString,parseCriteriaAsSearchRequest,parseFhirPath,parseFilterParameter,parseHl7Date,parseJWTPayload,parseMappingLanguage,parseSearchDefinition,parseSearchRequest,parseSearchUrl,preciseEquals,preciseGreaterThan,preciseGreaterThanOrEquals,preciseLessThan,preciseLessThanOrEquals,preciseRound,projectAdminResourceTypes,protectedResourceTypes,publicResourceTypes,removeDuplicates,resolveId,serverError,setCodeBySystem,singleton,sleep,streamToBuffer,stringify,toJsBoolean,toTypedValue,tokenize,tooManyRequests,unauthorized,validate,validateResource,validateResourceType,validationError});
|
|
32
32
|
//# sourceMappingURL=index.cjs.map
|