@smile-cdr/fhirts 2.3.0 → 2.4.1

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.
Files changed (309) hide show
  1. package/.claude/settings.local.json +12 -0
  2. package/.github/workflows/npm-publish.yml +12 -6
  3. package/.github/workflows/pr-build.yml +7 -3
  4. package/.prettierignore +22 -0
  5. package/.prettierrc +10 -0
  6. package/CHANGELOG.md +4 -0
  7. package/GETTINGSTARTED.md +57 -15
  8. package/dist/FHIR-DSTU2.js +1 -1
  9. package/dist/FHIR-R3.js +3 -1
  10. package/dist/FHIR-R4/classes/account.js +1 -1
  11. package/dist/FHIR-R4/classes/activityDefinition.js +1 -1
  12. package/dist/FHIR-R4/classes/address.js +1 -1
  13. package/dist/FHIR-R4/classes/adverseEvent.js +1 -1
  14. package/dist/FHIR-R4/classes/age.js +1 -1
  15. package/dist/FHIR-R4/classes/allergyIntolerance.js +1 -1
  16. package/dist/FHIR-R4/classes/allergyIntoleranceReaction.js +1 -1
  17. package/dist/FHIR-R4/classes/appointment.js +1 -1
  18. package/dist/FHIR-R4/classes/appointmentParticipant.js +1 -1
  19. package/dist/FHIR-R4/classes/auditEvent.js +1 -1
  20. package/dist/FHIR-R4/classes/auditEventNetwork.js +1 -1
  21. package/dist/FHIR-R4/classes/biologicallyDerivedProduct.js +1 -1
  22. package/dist/FHIR-R4/classes/biologicallyDerivedProductStorage.js +1 -1
  23. package/dist/FHIR-R4/classes/bundle.js +1 -1
  24. package/dist/FHIR-R4/classes/capabilityStatement.js +1 -1
  25. package/dist/FHIR-R4/classes/capabilityStatementDocument.js +1 -1
  26. package/dist/FHIR-R4/classes/capabilityStatementInteraction.js +1 -1
  27. package/dist/FHIR-R4/classes/capabilityStatementInteraction1.js +1 -1
  28. package/dist/FHIR-R4/classes/capabilityStatementResource.js +1 -1
  29. package/dist/FHIR-R4/classes/capabilityStatementRest.js +1 -1
  30. package/dist/FHIR-R4/classes/capabilityStatementSearchParam.js +1 -1
  31. package/dist/FHIR-R4/classes/capabilityStatementSupportedMessage.js +1 -1
  32. package/dist/FHIR-R4/classes/carePlanDetail.js +1 -1
  33. package/dist/FHIR-R4/classes/careTeam.js +1 -1
  34. package/dist/FHIR-R4/classes/catalogEntry.js +1 -1
  35. package/dist/FHIR-R4/classes/catalogEntryRelatedEntry.js +1 -1
  36. package/dist/FHIR-R4/classes/chargeItem.js +1 -1
  37. package/dist/FHIR-R4/classes/chargeItemDefinition.js +1 -1
  38. package/dist/FHIR-R4/classes/claim.js +1 -1
  39. package/dist/FHIR-R4/classes/claimResponseProcessNote.js +1 -1
  40. package/dist/FHIR-R4/classes/codeSystem.js +1 -1
  41. package/dist/FHIR-R4/classes/codeSystemProperty.js +1 -1
  42. package/dist/FHIR-R4/classes/compartmentDefinition.js +1 -1
  43. package/dist/FHIR-R4/classes/composition.js +1 -1
  44. package/dist/FHIR-R4/classes/compositionAttester.js +1 -1
  45. package/dist/FHIR-R4/classes/conceptMap.js +1 -1
  46. package/dist/FHIR-R4/classes/conceptMapTarget.js +1 -1
  47. package/dist/FHIR-R4/classes/conceptMapUnmapped.js +1 -1
  48. package/dist/FHIR-R4/classes/consent.js +1 -1
  49. package/dist/FHIR-R4/classes/consentData.js +1 -1
  50. package/dist/FHIR-R4/classes/consentProvision.js +1 -1
  51. package/dist/FHIR-R4/classes/contactPoint.js +1 -1
  52. package/dist/FHIR-R4/classes/contributor.js +1 -1
  53. package/dist/FHIR-R4/classes/count.js +1 -1
  54. package/dist/FHIR-R4/classes/coverageEligibilityResponse.js +1 -1
  55. package/dist/FHIR-R4/classes/dataRequirementSort.js +1 -1
  56. package/dist/FHIR-R4/classes/detectedIssue.js +1 -1
  57. package/dist/FHIR-R4/classes/device.js +1 -1
  58. package/dist/FHIR-R4/classes/deviceDefinitionDeviceName.js +1 -1
  59. package/dist/FHIR-R4/classes/deviceDeviceName.js +1 -1
  60. package/dist/FHIR-R4/classes/deviceMetric.js +1 -1
  61. package/dist/FHIR-R4/classes/deviceMetricCalibration.js +1 -1
  62. package/dist/FHIR-R4/classes/deviceUdiCarrier.js +1 -1
  63. package/dist/FHIR-R4/classes/deviceUseStatement.js +1 -1
  64. package/dist/FHIR-R4/classes/diagnosticReport.js +1 -1
  65. package/dist/FHIR-R4/classes/distance.js +1 -1
  66. package/dist/FHIR-R4/classes/documentManifest.js +1 -1
  67. package/dist/FHIR-R4/classes/documentReference.js +1 -1
  68. package/dist/FHIR-R4/classes/documentReferenceRelatesTo.js +1 -1
  69. package/dist/FHIR-R4/classes/duration.js +1 -1
  70. package/dist/FHIR-R4/classes/effectEvidenceSynthesis.js +1 -1
  71. package/dist/FHIR-R4/classes/effectEvidenceSynthesisResultsByExposure.js +1 -1
  72. package/dist/FHIR-R4/classes/elementDefinitionBinding.js +1 -1
  73. package/dist/FHIR-R4/classes/elementDefinitionConstraint.js +1 -1
  74. package/dist/FHIR-R4/classes/elementDefinitionDiscriminator.js +1 -1
  75. package/dist/FHIR-R4/classes/elementDefinitionSlicing.js +1 -1
  76. package/dist/FHIR-R4/classes/elementDefinitionType.js +1 -1
  77. package/dist/FHIR-R4/classes/encounter.js +1 -1
  78. package/dist/FHIR-R4/classes/encounterLocation.js +1 -1
  79. package/dist/FHIR-R4/classes/encounterStatusHistory.js +1 -1
  80. package/dist/FHIR-R4/classes/endpoint.js +1 -1
  81. package/dist/FHIR-R4/classes/enrollmentResponse.js +1 -1
  82. package/dist/FHIR-R4/classes/episodeOfCare.js +1 -1
  83. package/dist/FHIR-R4/classes/episodeOfCareStatusHistory.js +1 -1
  84. package/dist/FHIR-R4/classes/eventDefinition.js +1 -1
  85. package/dist/FHIR-R4/classes/evidence.js +1 -1
  86. package/dist/FHIR-R4/classes/evidenceVariable.js +1 -1
  87. package/dist/FHIR-R4/classes/evidenceVariableCharacteristic.js +1 -1
  88. package/dist/FHIR-R4/classes/exampleScenario.js +1 -1
  89. package/dist/FHIR-R4/classes/exampleScenarioActor.js +1 -1
  90. package/dist/FHIR-R4/classes/explanationOfBenefit.js +1 -1
  91. package/dist/FHIR-R4/classes/explanationOfBenefitProcessNote.js +1 -1
  92. package/dist/FHIR-R4/classes/expression.js +1 -1
  93. package/dist/FHIR-R4/classes/familyMemberHistory.js +1 -1
  94. package/dist/FHIR-R4/classes/flag.js +1 -1
  95. package/dist/FHIR-R4/classes/goal.js +1 -1
  96. package/dist/FHIR-R4/classes/graphDefinition.js +1 -1
  97. package/dist/FHIR-R4/classes/graphDefinitionCompartment.js +1 -1
  98. package/dist/FHIR-R4/classes/group.js +1 -1
  99. package/dist/FHIR-R4/classes/guidanceResponse.js +1 -1
  100. package/dist/FHIR-R4/classes/humanName.js +1 -1
  101. package/dist/FHIR-R4/classes/identifier.js +1 -1
  102. package/dist/FHIR-R4/classes/imagingStudy.js +1 -1
  103. package/dist/FHIR-R4/classes/implementationGuide.js +1 -1
  104. package/dist/FHIR-R4/classes/implementationGuidePage.js +1 -1
  105. package/dist/FHIR-R4/classes/implementationGuideParameter.js +1 -1
  106. package/dist/FHIR-R4/classes/insurancePlan.js +1 -1
  107. package/dist/FHIR-R4/classes/invoice.js +1 -1
  108. package/dist/FHIR-R4/classes/invoicePriceComponent.js +1 -1
  109. package/dist/FHIR-R4/classes/library.js +1 -1
  110. package/dist/FHIR-R4/classes/linkageItem.js +1 -1
  111. package/dist/FHIR-R4/classes/list.js +1 -1
  112. package/dist/FHIR-R4/classes/location.js +1 -1
  113. package/dist/FHIR-R4/classes/measure.js +1 -1
  114. package/dist/FHIR-R4/classes/measureReport.js +1 -1
  115. package/dist/FHIR-R4/classes/messageDefinition.js +1 -1
  116. package/dist/FHIR-R4/classes/messageHeaderResponse.js +1 -1
  117. package/dist/FHIR-R4/classes/molecularSequence.js +1 -1
  118. package/dist/FHIR-R4/classes/molecularSequenceQuality.js +1 -1
  119. package/dist/FHIR-R4/classes/molecularSequenceReferenceSeq.js +1 -1
  120. package/dist/FHIR-R4/classes/molecularSequenceRepository.js +1 -1
  121. package/dist/FHIR-R4/classes/namingSystem.js +1 -1
  122. package/dist/FHIR-R4/classes/namingSystemUniqueId.js +1 -1
  123. package/dist/FHIR-R4/classes/narrative.js +1 -1
  124. package/dist/FHIR-R4/classes/observation.js +1 -1
  125. package/dist/FHIR-R4/classes/observationDefinitionQualifiedInterval.js +1 -1
  126. package/dist/FHIR-R4/classes/operationDefinition.js +1 -1
  127. package/dist/FHIR-R4/classes/operationDefinitionBinding.js +1 -1
  128. package/dist/FHIR-R4/classes/operationDefinitionParameter.js +1 -1
  129. package/dist/FHIR-R4/classes/patient.js +1 -1
  130. package/dist/FHIR-R4/classes/patientContact.js +1 -1
  131. package/dist/FHIR-R4/classes/patientLink.js +1 -1
  132. package/dist/FHIR-R4/classes/paymentReconciliation.js +1 -1
  133. package/dist/FHIR-R4/classes/paymentReconciliationProcessNote.js +1 -1
  134. package/dist/FHIR-R4/classes/person.js +1 -1
  135. package/dist/FHIR-R4/classes/personLink.js +1 -1
  136. package/dist/FHIR-R4/classes/planDefinition.js +1 -1
  137. package/dist/FHIR-R4/classes/planDefinitionAction.js +1 -1
  138. package/dist/FHIR-R4/classes/planDefinitionCondition.js +1 -1
  139. package/dist/FHIR-R4/classes/planDefinitionParticipant.js +1 -1
  140. package/dist/FHIR-R4/classes/planDefinitionRelatedAction.js +1 -1
  141. package/dist/FHIR-R4/classes/practitioner.js +1 -1
  142. package/dist/FHIR-R4/classes/provenanceEntity.js +1 -1
  143. package/dist/FHIR-R4/classes/quantity.js +1 -1
  144. package/dist/FHIR-R4/classes/questionnaire.js +1 -1
  145. package/dist/FHIR-R4/classes/questionnaireEnableWhen.js +1 -1
  146. package/dist/FHIR-R4/classes/questionnaireItem.js +1 -1
  147. package/dist/FHIR-R4/classes/questionnaireResponse.js +1 -1
  148. package/dist/FHIR-R4/classes/relatedArtifact.js +1 -1
  149. package/dist/FHIR-R4/classes/relatedPerson.js +1 -1
  150. package/dist/FHIR-R4/classes/researchDefinition.js +1 -1
  151. package/dist/FHIR-R4/classes/researchElementDefinition.js +1 -1
  152. package/dist/FHIR-R4/classes/researchElementDefinitionCharacteristic.js +1 -1
  153. package/dist/FHIR-R4/classes/researchStudy.js +1 -1
  154. package/dist/FHIR-R4/classes/researchSubject.js +1 -1
  155. package/dist/FHIR-R4/classes/resource.d.ts +3 -1
  156. package/dist/FHIR-R4/classes/riskEvidenceSynthesis.js +1 -1
  157. package/dist/FHIR-R4/classes/searchParameter.js +1 -1
  158. package/dist/FHIR-R4/classes/slot.js +1 -1
  159. package/dist/FHIR-R4/classes/specimen.js +1 -1
  160. package/dist/FHIR-R4/classes/specimenDefinitionTypeTested.js +1 -1
  161. package/dist/FHIR-R4/classes/structureDefinition.js +1 -1
  162. package/dist/FHIR-R4/classes/structureDefinitionContext.js +1 -1
  163. package/dist/FHIR-R4/classes/structureMap.js +1 -1
  164. package/dist/FHIR-R4/classes/structureMapGroup.js +1 -1
  165. package/dist/FHIR-R4/classes/structureMapInput.js +1 -1
  166. package/dist/FHIR-R4/classes/structureMapSource.js +1 -1
  167. package/dist/FHIR-R4/classes/structureMapStructure.js +1 -1
  168. package/dist/FHIR-R4/classes/structureMapTarget.js +1 -1
  169. package/dist/FHIR-R4/classes/subscription.js +1 -1
  170. package/dist/FHIR-R4/classes/subscriptionChannel.js +1 -1
  171. package/dist/FHIR-R4/classes/substance.js +1 -1
  172. package/dist/FHIR-R4/classes/supplyDelivery.js +1 -1
  173. package/dist/FHIR-R4/classes/supplyRequest.js +1 -1
  174. package/dist/FHIR-R4/classes/task.js +1 -1
  175. package/dist/FHIR-R4/classes/terminologyCapabilities.js +1 -1
  176. package/dist/FHIR-R4/classes/testReport.js +1 -1
  177. package/dist/FHIR-R4/classes/testReportAssert.js +1 -1
  178. package/dist/FHIR-R4/classes/testReportOperation.js +1 -1
  179. package/dist/FHIR-R4/classes/testReportParticipant.js +1 -1
  180. package/dist/FHIR-R4/classes/testScript.js +1 -1
  181. package/dist/FHIR-R4/classes/testScriptAssert.js +1 -1
  182. package/dist/FHIR-R4/classes/testScriptOperation.js +1 -1
  183. package/dist/FHIR-R4/classes/timingRepeat.js +1 -1
  184. package/dist/FHIR-R4/classes/triggerDefinition.js +1 -1
  185. package/dist/FHIR-R4/classes/valueSet.js +1 -1
  186. package/dist/FHIR-R4/classes/valueSetFilter.js +1 -1
  187. package/dist/FHIR-R4/classes/visionPrescriptionLensSpecification.js +1 -1
  188. package/dist/FHIR-R4/classes/visionPrescriptionPrism.js +1 -1
  189. package/dist/FHIR-R4/interfaces/IAccount.js +1 -1
  190. package/dist/FHIR-R4/interfaces/IActivityDefinition.js +1 -1
  191. package/dist/FHIR-R4/interfaces/IAdverseEvent.js +1 -1
  192. package/dist/FHIR-R4/interfaces/IAllergyIntolerance.js +1 -1
  193. package/dist/FHIR-R4/interfaces/IAppointment.js +1 -1
  194. package/dist/FHIR-R4/interfaces/IAuditEvent.js +1 -1
  195. package/dist/FHIR-R4/interfaces/IBiologicallyDerivedProduct.js +1 -1
  196. package/dist/FHIR-R4/interfaces/IBundle.js +1 -1
  197. package/dist/FHIR-R4/interfaces/ICapabilityStatement.js +1 -1
  198. package/dist/FHIR-R4/interfaces/ICareTeam.js +1 -1
  199. package/dist/FHIR-R4/interfaces/ICatalogEntry.js +1 -1
  200. package/dist/FHIR-R4/interfaces/IChargeItem.js +1 -1
  201. package/dist/FHIR-R4/interfaces/IChargeItemDefinition.js +1 -1
  202. package/dist/FHIR-R4/interfaces/IClaim.js +1 -1
  203. package/dist/FHIR-R4/interfaces/ICodeSystem.js +1 -1
  204. package/dist/FHIR-R4/interfaces/ICompartmentDefinition.js +1 -1
  205. package/dist/FHIR-R4/interfaces/IComposition.js +1 -1
  206. package/dist/FHIR-R4/interfaces/IConceptMap.js +1 -1
  207. package/dist/FHIR-R4/interfaces/IConsent.js +1 -1
  208. package/dist/FHIR-R4/interfaces/ICoverageEligibilityResponse.js +1 -1
  209. package/dist/FHIR-R4/interfaces/IDetectedIssue.js +1 -1
  210. package/dist/FHIR-R4/interfaces/IDevice.js +1 -1
  211. package/dist/FHIR-R4/interfaces/IDeviceMetric.js +1 -1
  212. package/dist/FHIR-R4/interfaces/IDeviceUseStatement.js +1 -1
  213. package/dist/FHIR-R4/interfaces/IDiagnosticReport.js +1 -1
  214. package/dist/FHIR-R4/interfaces/IDocumentManifest.js +1 -1
  215. package/dist/FHIR-R4/interfaces/IDocumentReference.js +1 -1
  216. package/dist/FHIR-R4/interfaces/IEffectEvidenceSynthesis.js +1 -1
  217. package/dist/FHIR-R4/interfaces/IEncounter.js +1 -1
  218. package/dist/FHIR-R4/interfaces/IEndpoint.js +1 -1
  219. package/dist/FHIR-R4/interfaces/IEnrollmentResponse.js +1 -1
  220. package/dist/FHIR-R4/interfaces/IEpisodeOfCare.js +1 -1
  221. package/dist/FHIR-R4/interfaces/IEventDefinition.js +1 -1
  222. package/dist/FHIR-R4/interfaces/IEvidence.js +1 -1
  223. package/dist/FHIR-R4/interfaces/IEvidenceVariable.js +1 -1
  224. package/dist/FHIR-R4/interfaces/IExampleScenario.js +1 -1
  225. package/dist/FHIR-R4/interfaces/IExplanationOfBenefit.js +1 -1
  226. package/dist/FHIR-R4/interfaces/IFamilyMemberHistory.js +1 -1
  227. package/dist/FHIR-R4/interfaces/IFlag.js +1 -1
  228. package/dist/FHIR-R4/interfaces/IGoal.js +1 -1
  229. package/dist/FHIR-R4/interfaces/IGraphDefinition.js +1 -1
  230. package/dist/FHIR-R4/interfaces/IGroup.js +1 -1
  231. package/dist/FHIR-R4/interfaces/IGuidanceResponse.js +1 -1
  232. package/dist/FHIR-R4/interfaces/IImagingStudy.js +1 -1
  233. package/dist/FHIR-R4/interfaces/IImplementationGuide.js +1 -1
  234. package/dist/FHIR-R4/interfaces/IInsurancePlan.js +1 -1
  235. package/dist/FHIR-R4/interfaces/IInvoice.js +1 -1
  236. package/dist/FHIR-R4/interfaces/ILibrary.js +1 -1
  237. package/dist/FHIR-R4/interfaces/IList.js +1 -1
  238. package/dist/FHIR-R4/interfaces/ILocation.js +1 -1
  239. package/dist/FHIR-R4/interfaces/IMeasure.js +1 -1
  240. package/dist/FHIR-R4/interfaces/IMeasureReport.js +1 -1
  241. package/dist/FHIR-R4/interfaces/IMessageDefinition.js +1 -1
  242. package/dist/FHIR-R4/interfaces/IMolecularSequence.js +1 -1
  243. package/dist/FHIR-R4/interfaces/INamingSystem.js +1 -1
  244. package/dist/FHIR-R4/interfaces/IObservation.js +1 -1
  245. package/dist/FHIR-R4/interfaces/IOperationDefinition.js +1 -1
  246. package/dist/FHIR-R4/interfaces/IPatient.js +1 -1
  247. package/dist/FHIR-R4/interfaces/IPaymentReconciliation.js +1 -1
  248. package/dist/FHIR-R4/interfaces/IPerson.js +1 -1
  249. package/dist/FHIR-R4/interfaces/IPlanDefinition.js +1 -1
  250. package/dist/FHIR-R4/interfaces/IPractitioner.js +1 -1
  251. package/dist/FHIR-R4/interfaces/IQuestionnaire.js +1 -1
  252. package/dist/FHIR-R4/interfaces/IQuestionnaireResponse.js +1 -1
  253. package/dist/FHIR-R4/interfaces/IRelatedPerson.js +1 -1
  254. package/dist/FHIR-R4/interfaces/IResearchDefinition.js +1 -1
  255. package/dist/FHIR-R4/interfaces/IResearchElementDefinition.js +1 -1
  256. package/dist/FHIR-R4/interfaces/IResearchStudy.js +1 -1
  257. package/dist/FHIR-R4/interfaces/IResearchSubject.js +1 -1
  258. package/dist/FHIR-R4/interfaces/IRiskEvidenceSynthesis.js +1 -1
  259. package/dist/FHIR-R4/interfaces/ISearchParameter.js +1 -1
  260. package/dist/FHIR-R4/interfaces/ISlot.js +1 -1
  261. package/dist/FHIR-R4/interfaces/ISpecimen.js +1 -1
  262. package/dist/FHIR-R4/interfaces/IStructureDefinition.js +1 -1
  263. package/dist/FHIR-R4/interfaces/IStructureMap.js +1 -1
  264. package/dist/FHIR-R4/interfaces/ISubscription.js +1 -1
  265. package/dist/FHIR-R4/interfaces/ISubstance.js +1 -1
  266. package/dist/FHIR-R4/interfaces/ISupplyDelivery.js +1 -1
  267. package/dist/FHIR-R4/interfaces/ISupplyRequest.js +1 -1
  268. package/dist/FHIR-R4/interfaces/ITask.js +1 -1
  269. package/dist/FHIR-R4/interfaces/ITerminologyCapabilities.js +1 -1
  270. package/dist/FHIR-R4/interfaces/ITestReport.js +1 -1
  271. package/dist/FHIR-R4/interfaces/ITestScript.js +1 -1
  272. package/dist/FHIR-R4/interfaces/IValueSet.js +1 -1
  273. package/dist/FHIR-R5/fHIRJSONRESOURCE.d.ts +172 -0
  274. package/dist/FHIR-R5/fHIRJSONRESOURCE.js +2 -0
  275. package/dist/FHIR-R5/openApiSchemaUpdated.d.ts +172 -0
  276. package/dist/FHIR-R5/openApiSchemaUpdated.js +2 -0
  277. package/dist/index.d.ts +1 -1
  278. package/dist/index.js +39 -6
  279. package/dist/library/BundleUtils/BundleUtils.d.ts +11 -5
  280. package/dist/library/BundleUtils/BundleUtils.js +23 -5
  281. package/dist/library/BundleUtils/BundleUtils.spec.js +24 -24
  282. package/dist/library/PatchUtils/PatchUtils.d.ts +1 -1
  283. package/dist/library/PatchUtils/PatchUtils.js +31 -31
  284. package/dist/library/PatchUtils/PatchUtils.spec.js +159 -124
  285. package/dist/library/QueryBuilder/QueryBuilder.d.ts +1 -1
  286. package/dist/library/QueryBuilder/QueryBuilder.js +25 -17
  287. package/dist/library/QueryBuilder/QueryBuilder.spec.js +44 -43
  288. package/dist/library/ResourceUtils/ResourceUtils.d.ts +15 -7
  289. package/dist/library/ResourceUtils/ResourceUtils.js +19 -11
  290. package/dist/library/ResourceUtils/ResourceUtils.spec.js +113 -112
  291. package/dist/library/constants.js +2 -2
  292. package/dist/library/dataTypes.d.ts +6 -6
  293. package/eslint.config.mjs +69 -0
  294. package/package.json +21 -7
  295. package/src/FHIR-DSTU2.ts +1 -1
  296. package/src/FHIR-R3.ts +3 -1
  297. package/src/FHIR-R4/classes/resource.ts +2 -1
  298. package/src/index.ts +12 -1
  299. package/src/library/BundleUtils/BundleUtils.spec.ts +26 -39
  300. package/src/library/BundleUtils/BundleUtils.ts +43 -29
  301. package/src/library/PatchUtils/PatchUtils.spec.ts +173 -129
  302. package/src/library/PatchUtils/PatchUtils.ts +39 -52
  303. package/src/library/QueryBuilder/QueryBuilder.spec.ts +54 -51
  304. package/src/library/QueryBuilder/QueryBuilder.ts +41 -31
  305. package/src/library/ResourceUtils/ResourceUtils.spec.ts +133 -164
  306. package/src/library/ResourceUtils/ResourceUtils.ts +37 -27
  307. package/src/library/constants.ts +17 -17
  308. package/src/library/dataTypes.ts +7 -7
  309. package/tsconfig.json +25 -2
@@ -0,0 +1,69 @@
1
+ import eslint from '@eslint/js';
2
+ import tseslint from '@typescript-eslint/eslint-plugin';
3
+ import tsparser from '@typescript-eslint/parser';
4
+ import prettier from 'eslint-plugin-prettier';
5
+
6
+ export default [
7
+ eslint.configs.recommended,
8
+ {
9
+ files: ['src/**/*.ts'],
10
+ languageOptions: {
11
+ parser: tsparser,
12
+ parserOptions: {
13
+ ecmaVersion: 2020,
14
+ sourceType: 'module',
15
+ project: './tsconfig.json',
16
+ },
17
+ },
18
+ plugins: {
19
+ '@typescript-eslint': tseslint,
20
+ prettier: prettier,
21
+ },
22
+ rules: {
23
+ // Prettier integration
24
+ 'prettier/prettier': 'error',
25
+
26
+ // TypeScript specific rules
27
+ '@typescript-eslint/no-explicit-any': 'off', // Allow any for now (library uses it extensively)
28
+ '@typescript-eslint/explicit-module-boundary-types': 'off',
29
+ '@typescript-eslint/no-unused-vars': ['warn', {
30
+ argsIgnorePattern: '^_',
31
+ varsIgnorePattern: '^_',
32
+ }],
33
+
34
+ // General rules
35
+ 'no-console': 'warn',
36
+ 'no-debugger': 'error',
37
+ 'prefer-const': 'error',
38
+ 'no-var': 'error',
39
+ 'eqeqeq': ['error', 'always'],
40
+ 'curly': ['error', 'all'],
41
+ 'no-throw-literal': 'error',
42
+
43
+ // Disable rules that conflict with TypeScript
44
+ 'no-undef': 'off',
45
+ 'no-unused-vars': 'off',
46
+ },
47
+ },
48
+ {
49
+ files: ['**/*.spec.ts', '**/*.test.ts'],
50
+ rules: {
51
+ '@typescript-eslint/no-unused-vars': 'off',
52
+ 'no-console': 'off',
53
+ },
54
+ },
55
+ {
56
+ ignores: [
57
+ 'dist/**',
58
+ 'node_modules/**',
59
+ 'coverage/**',
60
+ '*.js',
61
+ '*.mjs',
62
+ 'src/FHIR-R4/classes/**',
63
+ 'src/FHIR-R4/interfaces/**',
64
+ 'src/FHIR-R5/**',
65
+ 'src/FHIR-R3.ts',
66
+ 'src/FHIR-DSTU2.ts',
67
+ ],
68
+ },
69
+ ];
package/package.json CHANGED
@@ -1,24 +1,38 @@
1
1
  {
2
2
  "name": "@smile-cdr/fhirts",
3
- "version": "2.3.0",
4
- "description": "Fhir ts/js library for frontend apps",
3
+ "version": "2.4.1",
4
+ "description": "Fhir ts/js library for frontend applications with FHIR types and useful utilities.",
5
5
  "license": "Apache-2.0",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
- "repository": "git://github.com/smilecdr/FHIR.ts",
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "git://github.com/smilecdr/FHIR.ts.git"
11
+ },
9
12
  "scripts": {
10
13
  "build": "tsc",
11
- "test": "ts-node --project ./tsconfig.json node_modules/jasmine/bin/jasmine --config=spec/support/jasmine.json",
14
+ "test": "tsx --tsconfig ./tsconfig.json node_modules/jasmine/bin/jasmine --config=spec/support/jasmine.json",
12
15
  "coverage": "nyc npm run test",
13
- "audit": "better-npm-audit audit"
16
+ "audit": "better-npm-audit audit",
17
+ "lint": "eslint \"src/library/**/*.ts\" \"src/index.ts\"",
18
+ "lint:fix": "eslint \"src/library/**/*.ts\" \"src/index.ts\" --fix",
19
+ "format": "prettier --write \"src/**/*.ts\"",
20
+ "format:check": "prettier --check \"src/**/*.ts\""
14
21
  },
15
22
  "devDependencies": {
16
23
  "@types/jasmine": "^4.3.1",
17
- "@types/node": "^20.12.12",
24
+ "@types/node": "^25.2.3",
25
+ "@typescript-eslint/eslint-plugin": "^8.55.0",
26
+ "@typescript-eslint/parser": "^8.55.0",
18
27
  "better-npm-audit": "^3.7.3",
28
+ "eslint": "^9.39.2",
29
+ "eslint-config-prettier": "^10.1.8",
30
+ "eslint-plugin-prettier": "^5.5.5",
19
31
  "jasmine": "^4.5.0",
20
32
  "nyc": "^15.1.0",
33
+ "prettier": "^3.8.1",
21
34
  "ts-node": "^10.9.1",
22
- "typescript": "^4.0.2"
35
+ "tsx": "^4.21.0",
36
+ "typescript": "^5.9.3"
23
37
  }
24
38
  }
package/src/FHIR-DSTU2.ts CHANGED
@@ -14,7 +14,7 @@ export class Id {
14
14
  constructor(input?: string) {
15
15
  const re = new RegExp('[A-Za-z0-9\\-\\.]{1,64}');
16
16
 
17
- if (re.test(input)) {
17
+ if (input && re.test(input)) {
18
18
  this.id = input;
19
19
  } else {
20
20
  throw new RangeError('Not a valid Id string - must match reg exp [A-Za-z0-9\\-\\.]{1,64} Was provided: ' + input);
package/src/FHIR-R3.ts CHANGED
@@ -35,7 +35,9 @@ export class Code extends FHIRElement {
35
35
 
36
36
  constructor(input?: string) {
37
37
  super();
38
- this.setCode(input);
38
+ if (input) {
39
+ this.setCode(input);
40
+ }
39
41
  }
40
42
 
41
43
  private setCode(input: string) {
@@ -91,6 +91,7 @@ import { OperationDefinition } from './operationDefinition';
91
91
  import { OperationOutcome } from './operationOutcome';
92
92
  import { Organization } from './organization';
93
93
  import { OrganizationAffiliation } from './organizationAffiliation';
94
+ import { Parameters } from './parameters';
94
95
  import { Patient } from './patient';
95
96
  import { PaymentNotice } from './paymentNotice';
96
97
  import { PaymentReconciliation } from './paymentReconciliation';
@@ -129,4 +130,4 @@ import { ValueSet } from './valueSet';
129
130
  import { VerificationResult } from './verificationResult';
130
131
  import { VisionPrescription } from './visionPrescription';
131
132
 
132
- export type Resource = Account | ActivityDefinition | AdverseEvent | AllergyIntolerance | Appointment | AppointmentResponse | AuditEvent | Binary | BiologicallyDerivedProduct | BodyStructure | Bundle | CapabilityStatement | CarePlan | CareTeam | CatalogEntry | ChargeItem | ChargeItemDefinition | Claim | ClaimResponse | ClinicalImpression | CodeSystem | Communication | CommunicationRequest | CompartmentDefinition | Composition | ConceptMap | Condition | Consent | Contract | Coverage | CoverageEligibilityRequest | CoverageEligibilityResponse | DetectedIssue | Device | DeviceDefinition | DeviceMetric | DeviceRequest | DeviceUseStatement | DiagnosticReport | DocumentManifest | DocumentReference | Encounter | Endpoint | EnrollmentRequest | EnrollmentResponse | EpisodeOfCare | EventDefinition | Evidence | EvidenceVariable | ExampleScenario | ExplanationOfBenefit | FamilyMemberHistory | Flag | Goal | GraphDefinition | Group | GuidanceResponse | HealthcareService | ImagingStudy | Immunization | ImmunizationEvaluation | ImmunizationRecommendation | ImplementationGuide | InsurancePlan | Invoice | Library | Linkage | List | Location | Measure | MeasureReport | Media | Medication | MedicationAdministration | MedicationDispense | MedicationKnowledge | MedicationRequest | MedicationStatement | MessageDefinition | MessageHeader | MolecularSequence | NamingSystem | NutritionOrder | Observation | ObservationDefinition | OperationDefinition | OperationOutcome | Organization | OrganizationAffiliation | Patient | PaymentNotice | PaymentReconciliation | Person | PlanDefinition | Practitioner | PractitionerRole | Procedure | Provenance | Questionnaire | QuestionnaireResponse | RelatedPerson | RequestGroup | ResearchDefinition | ResearchElementDefinition | ResearchStudy | ResearchSubject | RiskAssessment | Schedule | SearchParameter | ServiceRequest | Slot | Specimen | SpecimenDefinition | StructureDefinition | StructureMap | Subscription | Substance | SupplyDelivery | SupplyRequest | Task | TerminologyCapabilities | TestReport | TestScript | ValueSet | VerificationResult | VisionPrescription;
133
+ export type Resource = Account | ActivityDefinition | AdverseEvent | AllergyIntolerance | Appointment | AppointmentResponse | AuditEvent | Basic | Binary | BiologicallyDerivedProduct | BodyStructure | Bundle | CapabilityStatement | CarePlan | CareTeam | CatalogEntry | ChargeItem | ChargeItemDefinition | Claim | ClaimResponse | ClinicalImpression | CodeSystem | Communication | CommunicationRequest | CompartmentDefinition | Composition | ConceptMap | Condition | Consent | Contract | Coverage | CoverageEligibilityRequest | CoverageEligibilityResponse | DetectedIssue | Device | DeviceDefinition | DeviceMetric | DeviceRequest | DeviceUseStatement | DiagnosticReport | DocumentManifest | DocumentReference | Encounter | Endpoint | EnrollmentRequest | EnrollmentResponse | EpisodeOfCare | EventDefinition | Evidence | EvidenceVariable | ExampleScenario | ExplanationOfBenefit | FamilyMemberHistory | Flag | Goal | GraphDefinition | Group | GuidanceResponse | HealthcareService | ImagingStudy | Immunization | ImmunizationEvaluation | ImmunizationRecommendation | ImplementationGuide | InsurancePlan | Invoice | Library | Linkage | List | Location | Measure | MeasureReport | Media | Medication | MedicationAdministration | MedicationDispense | MedicationKnowledge | MedicationRequest | MedicationStatement | MessageDefinition | MessageHeader | MolecularSequence | NamingSystem | NutritionOrder | Observation | ObservationDefinition | OperationDefinition | OperationOutcome | Organization | OrganizationAffiliation | Parameters | Patient | PaymentNotice | PaymentReconciliation | Person | PlanDefinition | Practitioner | PractitionerRole | Procedure | Provenance | Questionnaire | QuestionnaireResponse | RelatedPerson | RequestGroup | ResearchDefinition | ResearchElementDefinition | ResearchStudy | ResearchSubject | RiskAssessment | Schedule | SearchParameter | ServiceRequest | Slot | Specimen | SpecimenDefinition | StructureDefinition | StructureMap | Subscription | Substance | SupplyDelivery | SupplyRequest | Task | TerminologyCapabilities | TestReport | TestScript | ValueSet | VerificationResult | VisionPrescription;
package/src/index.ts CHANGED
@@ -8,4 +8,15 @@ import { BundleUtils } from './library/BundleUtils/BundleUtils';
8
8
  import { QueryBuilder } from './library/QueryBuilder/QueryBuilder';
9
9
  import { PatchUtils } from './library/PatchUtils/PatchUtils';
10
10
  import * as fhirtsConstants from './library/constants';
11
- export { fhirR5, fhirR4, fhirR3, IfhirR4, dstu2, ResourceUtils, BundleUtils, QueryBuilder, PatchUtils, fhirtsConstants};
11
+ export {
12
+ fhirR5,
13
+ fhirR4,
14
+ fhirR3,
15
+ IfhirR4,
16
+ dstu2,
17
+ ResourceUtils,
18
+ BundleUtils,
19
+ QueryBuilder,
20
+ PatchUtils,
21
+ fhirtsConstants,
22
+ };
@@ -1,94 +1,81 @@
1
- import { BundleUtils } from "./BundleUtils";
1
+ import { BundleUtils } from './BundleUtils';
2
2
 
3
- const inputPayload = require("./../../test-resources/Bundle-R4.json");
4
- describe("BundleUtils", () => {
3
+ const inputPayload = require('./../../test-resources/Bundle-R4.json');
4
+ describe('BundleUtils', () => {
5
+ const bundleUtils = new BundleUtils();
5
6
 
6
- let bundleUtils = new BundleUtils();
7
-
8
- describe("#getResources()", () => {
9
- it("should return empty array if null is passed as bundle entries", () => {
7
+ describe('#getResources()', () => {
8
+ it('should return empty array if null is passed as bundle entries', () => {
10
9
  // execute
11
- const actual = bundleUtils.getResources(null, "Patient");
10
+ const actual = bundleUtils.getResources(null, 'Patient');
12
11
  // validate
13
12
  expect(actual.length).toEqual(0);
14
13
  });
15
14
 
16
- it("should return empty array if invalid resourceType is passed", () => {
15
+ it('should return empty array if invalid resourceType is passed', () => {
17
16
  // execute
18
- const actual = bundleUtils.getResources(
19
- inputPayload.entry,
20
- "patient"
21
- );
17
+ const actual = bundleUtils.getResources(inputPayload.entry, 'patient');
22
18
  // validate
23
19
  expect(actual.length).toEqual(0);
24
20
  });
25
21
 
26
- it("should return all matches array", () => {
22
+ it('should return all matches array', () => {
27
23
  // execute
28
- const actual = bundleUtils.getResources(
29
- inputPayload.entry,
30
- "Claim"
31
- );
24
+ const actual = bundleUtils.getResources(inputPayload.entry, 'Claim');
32
25
  // validate
33
26
  expect(actual.length).toEqual(27);
34
27
  });
35
28
  });
36
29
 
37
- describe("#getResource()", () => {
38
- it("should return null if null is passed as bundle entries", () => {
30
+ describe('#getResource()', () => {
31
+ it('should return null if null is passed as bundle entries', () => {
39
32
  // execute
40
- const actual = bundleUtils.getResource(null, "123");
33
+ const actual = bundleUtils.getResource(null, '123');
41
34
  // validate
42
35
  expect(actual).toBeNull();
43
36
  });
44
37
 
45
- it("should return undefined if resourceId is not found", () => {
38
+ it('should return undefined if resourceId is not found', () => {
46
39
  // execute
47
- const actual = bundleUtils.getResource(
48
- inputPayload.entry,
49
- "123"
50
- );
40
+ const actual = bundleUtils.getResource(inputPayload.entry, '123');
51
41
  // validate
52
42
  expect(actual).toBeUndefined();
53
43
  });
54
44
 
55
- it("should return resource if resource is found", () => {
45
+ it('should return resource if resource is found', () => {
56
46
  // execute
57
47
  const actual = bundleUtils.getResource(
58
48
  inputPayload.entry,
59
- "ec0bb1b3-b229-36cf-7e34-3f5fec9d3afe"
49
+ 'ec0bb1b3-b229-36cf-7e34-3f5fec9d3afe'
60
50
  );
61
51
  // validate
62
52
  expect(actual).not.toBeUndefined();
63
53
  });
64
54
  });
65
55
 
66
- describe("#getResourceByFullUrl()", () => {
67
- it("should return null if null is passed as bundle entries", () => {
56
+ describe('#getResourceByFullUrl()', () => {
57
+ it('should return null if null is passed as bundle entries', () => {
68
58
  // execute
69
- const actual = bundleUtils.getResourceByFullUrl(null, "123");
59
+ const actual = bundleUtils.getResourceByFullUrl(null, '123');
70
60
  // validate
71
61
  expect(actual).toBeNull();
72
62
  });
73
63
 
74
- it("should return undefined if fullUrl is not found", () => {
64
+ it('should return undefined if fullUrl is not found', () => {
75
65
  // execute
76
- const actual = bundleUtils.getResourceByFullUrl(
77
- inputPayload.entry,
78
- "123"
79
- );
66
+ const actual = bundleUtils.getResourceByFullUrl(inputPayload.entry, '123');
80
67
  // validate
81
68
  expect(actual).toBeUndefined();
82
69
  });
83
70
 
84
- it("should return resource if resource is found", () => {
71
+ it('should return resource if resource is found', () => {
85
72
  // execute
86
73
  const actual = bundleUtils.getResourceByFullUrl(
87
74
  inputPayload.entry,
88
- "urn:uuid:7c52dd91-73f8-83e1-cab2-2ffdd7a34601"
75
+ 'urn:uuid:7c52dd91-73f8-83e1-cab2-2ffdd7a34601'
89
76
  );
90
77
  // validate
91
78
  expect(actual).not.toBeUndefined();
92
79
  });
93
- })
80
+ });
94
81
  });
@@ -1,35 +1,49 @@
1
1
  export class BundleUtils {
2
+ /**
3
+ * Get resources from bundle entries filtered by resource type
4
+ *
5
+ * @template T - The resource type to return (defaults to any for backward compatibility)
6
+ * @param bundleEntry Bundle.entry[] i.e. the bundle entries to filter
7
+ * @param resourceTypeToFilter ResourceType to filter from bundle entries
8
+ * @returns array of resources
9
+ */
10
+ getResources<T = any>(bundleEntry: any[] | null, resourceTypeToFilter: string): T[] {
11
+ return bundleEntry?.length
12
+ ? bundleEntry
13
+ .filter((x) => x['resource']['resourceType'] === resourceTypeToFilter)
14
+ .map((x) => x['resource'])
15
+ : [];
16
+ }
2
17
 
3
- /**
4
- *
5
- * @param bundleEntry Bundle.entry[] i.e. the bundle entries to filter
6
- * @param resourceTypeToFilter ResourceType to filter from bundle entries
7
- * @returns array of resources
8
- */
9
- getResources(bundleEntry: any[], resourceTypeToFilter: string): any[] {
10
- return bundleEntry?.length ? bundleEntry.filter(x => x['resource']['resourceType'] === resourceTypeToFilter) : [];
18
+ /**
19
+ * Get a single resource from bundle entries by resource ID
20
+ *
21
+ * @template T - The resource type to return (defaults to any for backward compatibility)
22
+ * @param bundleEntry Bundle.entry[] i.e. the bundle entries to filter
23
+ * @param resourceId Resource ID to filter from bundle entries
24
+ * @returns single resource, undefined if not found, or null if input is null
25
+ */
26
+ getResource<T = any>(bundleEntry: any[] | null, resourceId: string): T | null {
27
+ if (!bundleEntry) {
28
+ return null;
11
29
  }
30
+ const entry = bundleEntry.find((x) => x['resource']?.['id'] === resourceId);
31
+ return entry?.['resource'];
32
+ }
12
33
 
13
- /**
14
- *
15
- * @param bundleEntry Bundle.entry[] i.e. the bundle entries to filter
16
- * @param resourceId Resource ID to filter from bundle entries
17
- * @returns single resource
18
- */
19
- getResource(bundleEntry: any[], resourceId: string): any {
20
- return bundleEntry?.length ? bundleEntry.find(x => x['resource']['id'] === resourceId) : null;
21
- }
22
-
23
- /**
24
- *
25
- * @param bundleEntry Bundle.entry[] i.e. the bundle entries to filter
26
- * @param fullUrl Full Url to filter from bundle entries
27
- * @returns single resource
28
- */
29
- getResourceByFullUrl(bundleEntry: any[], fullUrl: string): any {
30
- return bundleEntry?.length ? bundleEntry.find(x => x['fullUrl'] === fullUrl) : null;
34
+ /**
35
+ * Get a single resource from bundle entries by full URL
36
+ *
37
+ * @template T - The resource type to return (defaults to any for backward compatibility)
38
+ * @param bundleEntry Bundle.entry[] i.e. the bundle entries to filter
39
+ * @param fullUrl Full Url to filter from bundle entries
40
+ * @returns single resource if not found, or null if input is null
41
+ */
42
+ getResourceByFullUrl<T = any>(bundleEntry: any[] | null, fullUrl: string): T | null {
43
+ if (!bundleEntry) {
44
+ return null;
31
45
  }
46
+ const entry = bundleEntry.find((x) => x['fullUrl'] === fullUrl);
47
+ return entry?.['resource'];
48
+ }
32
49
  }
33
-
34
-
35
-