@smile-cdr/fhirts 2.3.0 → 2.4.0

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 (306) 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/GETTINGSTARTED.md +57 -15
  7. package/dist/FHIR-DSTU2.js +1 -1
  8. package/dist/FHIR-R3.js +3 -1
  9. package/dist/FHIR-R4/classes/account.js +1 -1
  10. package/dist/FHIR-R4/classes/activityDefinition.js +1 -1
  11. package/dist/FHIR-R4/classes/address.js +1 -1
  12. package/dist/FHIR-R4/classes/adverseEvent.js +1 -1
  13. package/dist/FHIR-R4/classes/age.js +1 -1
  14. package/dist/FHIR-R4/classes/allergyIntolerance.js +1 -1
  15. package/dist/FHIR-R4/classes/allergyIntoleranceReaction.js +1 -1
  16. package/dist/FHIR-R4/classes/appointment.js +1 -1
  17. package/dist/FHIR-R4/classes/appointmentParticipant.js +1 -1
  18. package/dist/FHIR-R4/classes/auditEvent.js +1 -1
  19. package/dist/FHIR-R4/classes/auditEventNetwork.js +1 -1
  20. package/dist/FHIR-R4/classes/biologicallyDerivedProduct.js +1 -1
  21. package/dist/FHIR-R4/classes/biologicallyDerivedProductStorage.js +1 -1
  22. package/dist/FHIR-R4/classes/bundle.js +1 -1
  23. package/dist/FHIR-R4/classes/capabilityStatement.js +1 -1
  24. package/dist/FHIR-R4/classes/capabilityStatementDocument.js +1 -1
  25. package/dist/FHIR-R4/classes/capabilityStatementInteraction.js +1 -1
  26. package/dist/FHIR-R4/classes/capabilityStatementInteraction1.js +1 -1
  27. package/dist/FHIR-R4/classes/capabilityStatementResource.js +1 -1
  28. package/dist/FHIR-R4/classes/capabilityStatementRest.js +1 -1
  29. package/dist/FHIR-R4/classes/capabilityStatementSearchParam.js +1 -1
  30. package/dist/FHIR-R4/classes/capabilityStatementSupportedMessage.js +1 -1
  31. package/dist/FHIR-R4/classes/carePlanDetail.js +1 -1
  32. package/dist/FHIR-R4/classes/careTeam.js +1 -1
  33. package/dist/FHIR-R4/classes/catalogEntry.js +1 -1
  34. package/dist/FHIR-R4/classes/catalogEntryRelatedEntry.js +1 -1
  35. package/dist/FHIR-R4/classes/chargeItem.js +1 -1
  36. package/dist/FHIR-R4/classes/chargeItemDefinition.js +1 -1
  37. package/dist/FHIR-R4/classes/claim.js +1 -1
  38. package/dist/FHIR-R4/classes/claimResponseProcessNote.js +1 -1
  39. package/dist/FHIR-R4/classes/codeSystem.js +1 -1
  40. package/dist/FHIR-R4/classes/codeSystemProperty.js +1 -1
  41. package/dist/FHIR-R4/classes/compartmentDefinition.js +1 -1
  42. package/dist/FHIR-R4/classes/composition.js +1 -1
  43. package/dist/FHIR-R4/classes/compositionAttester.js +1 -1
  44. package/dist/FHIR-R4/classes/conceptMap.js +1 -1
  45. package/dist/FHIR-R4/classes/conceptMapTarget.js +1 -1
  46. package/dist/FHIR-R4/classes/conceptMapUnmapped.js +1 -1
  47. package/dist/FHIR-R4/classes/consent.js +1 -1
  48. package/dist/FHIR-R4/classes/consentData.js +1 -1
  49. package/dist/FHIR-R4/classes/consentProvision.js +1 -1
  50. package/dist/FHIR-R4/classes/contactPoint.js +1 -1
  51. package/dist/FHIR-R4/classes/contributor.js +1 -1
  52. package/dist/FHIR-R4/classes/count.js +1 -1
  53. package/dist/FHIR-R4/classes/coverageEligibilityResponse.js +1 -1
  54. package/dist/FHIR-R4/classes/dataRequirementSort.js +1 -1
  55. package/dist/FHIR-R4/classes/detectedIssue.js +1 -1
  56. package/dist/FHIR-R4/classes/device.js +1 -1
  57. package/dist/FHIR-R4/classes/deviceDefinitionDeviceName.js +1 -1
  58. package/dist/FHIR-R4/classes/deviceDeviceName.js +1 -1
  59. package/dist/FHIR-R4/classes/deviceMetric.js +1 -1
  60. package/dist/FHIR-R4/classes/deviceMetricCalibration.js +1 -1
  61. package/dist/FHIR-R4/classes/deviceUdiCarrier.js +1 -1
  62. package/dist/FHIR-R4/classes/deviceUseStatement.js +1 -1
  63. package/dist/FHIR-R4/classes/diagnosticReport.js +1 -1
  64. package/dist/FHIR-R4/classes/distance.js +1 -1
  65. package/dist/FHIR-R4/classes/documentManifest.js +1 -1
  66. package/dist/FHIR-R4/classes/documentReference.js +1 -1
  67. package/dist/FHIR-R4/classes/documentReferenceRelatesTo.js +1 -1
  68. package/dist/FHIR-R4/classes/duration.js +1 -1
  69. package/dist/FHIR-R4/classes/effectEvidenceSynthesis.js +1 -1
  70. package/dist/FHIR-R4/classes/effectEvidenceSynthesisResultsByExposure.js +1 -1
  71. package/dist/FHIR-R4/classes/elementDefinitionBinding.js +1 -1
  72. package/dist/FHIR-R4/classes/elementDefinitionConstraint.js +1 -1
  73. package/dist/FHIR-R4/classes/elementDefinitionDiscriminator.js +1 -1
  74. package/dist/FHIR-R4/classes/elementDefinitionSlicing.js +1 -1
  75. package/dist/FHIR-R4/classes/elementDefinitionType.js +1 -1
  76. package/dist/FHIR-R4/classes/encounter.js +1 -1
  77. package/dist/FHIR-R4/classes/encounterLocation.js +1 -1
  78. package/dist/FHIR-R4/classes/encounterStatusHistory.js +1 -1
  79. package/dist/FHIR-R4/classes/endpoint.js +1 -1
  80. package/dist/FHIR-R4/classes/enrollmentResponse.js +1 -1
  81. package/dist/FHIR-R4/classes/episodeOfCare.js +1 -1
  82. package/dist/FHIR-R4/classes/episodeOfCareStatusHistory.js +1 -1
  83. package/dist/FHIR-R4/classes/eventDefinition.js +1 -1
  84. package/dist/FHIR-R4/classes/evidence.js +1 -1
  85. package/dist/FHIR-R4/classes/evidenceVariable.js +1 -1
  86. package/dist/FHIR-R4/classes/evidenceVariableCharacteristic.js +1 -1
  87. package/dist/FHIR-R4/classes/exampleScenario.js +1 -1
  88. package/dist/FHIR-R4/classes/exampleScenarioActor.js +1 -1
  89. package/dist/FHIR-R4/classes/explanationOfBenefit.js +1 -1
  90. package/dist/FHIR-R4/classes/explanationOfBenefitProcessNote.js +1 -1
  91. package/dist/FHIR-R4/classes/expression.js +1 -1
  92. package/dist/FHIR-R4/classes/familyMemberHistory.js +1 -1
  93. package/dist/FHIR-R4/classes/flag.js +1 -1
  94. package/dist/FHIR-R4/classes/goal.js +1 -1
  95. package/dist/FHIR-R4/classes/graphDefinition.js +1 -1
  96. package/dist/FHIR-R4/classes/graphDefinitionCompartment.js +1 -1
  97. package/dist/FHIR-R4/classes/group.js +1 -1
  98. package/dist/FHIR-R4/classes/guidanceResponse.js +1 -1
  99. package/dist/FHIR-R4/classes/humanName.js +1 -1
  100. package/dist/FHIR-R4/classes/identifier.js +1 -1
  101. package/dist/FHIR-R4/classes/imagingStudy.js +1 -1
  102. package/dist/FHIR-R4/classes/implementationGuide.js +1 -1
  103. package/dist/FHIR-R4/classes/implementationGuidePage.js +1 -1
  104. package/dist/FHIR-R4/classes/implementationGuideParameter.js +1 -1
  105. package/dist/FHIR-R4/classes/insurancePlan.js +1 -1
  106. package/dist/FHIR-R4/classes/invoice.js +1 -1
  107. package/dist/FHIR-R4/classes/invoicePriceComponent.js +1 -1
  108. package/dist/FHIR-R4/classes/library.js +1 -1
  109. package/dist/FHIR-R4/classes/linkageItem.js +1 -1
  110. package/dist/FHIR-R4/classes/list.js +1 -1
  111. package/dist/FHIR-R4/classes/location.js +1 -1
  112. package/dist/FHIR-R4/classes/measure.js +1 -1
  113. package/dist/FHIR-R4/classes/measureReport.js +1 -1
  114. package/dist/FHIR-R4/classes/messageDefinition.js +1 -1
  115. package/dist/FHIR-R4/classes/messageHeaderResponse.js +1 -1
  116. package/dist/FHIR-R4/classes/molecularSequence.js +1 -1
  117. package/dist/FHIR-R4/classes/molecularSequenceQuality.js +1 -1
  118. package/dist/FHIR-R4/classes/molecularSequenceReferenceSeq.js +1 -1
  119. package/dist/FHIR-R4/classes/molecularSequenceRepository.js +1 -1
  120. package/dist/FHIR-R4/classes/namingSystem.js +1 -1
  121. package/dist/FHIR-R4/classes/namingSystemUniqueId.js +1 -1
  122. package/dist/FHIR-R4/classes/narrative.js +1 -1
  123. package/dist/FHIR-R4/classes/observation.js +1 -1
  124. package/dist/FHIR-R4/classes/observationDefinitionQualifiedInterval.js +1 -1
  125. package/dist/FHIR-R4/classes/operationDefinition.js +1 -1
  126. package/dist/FHIR-R4/classes/operationDefinitionBinding.js +1 -1
  127. package/dist/FHIR-R4/classes/operationDefinitionParameter.js +1 -1
  128. package/dist/FHIR-R4/classes/patient.js +1 -1
  129. package/dist/FHIR-R4/classes/patientContact.js +1 -1
  130. package/dist/FHIR-R4/classes/patientLink.js +1 -1
  131. package/dist/FHIR-R4/classes/paymentReconciliation.js +1 -1
  132. package/dist/FHIR-R4/classes/paymentReconciliationProcessNote.js +1 -1
  133. package/dist/FHIR-R4/classes/person.js +1 -1
  134. package/dist/FHIR-R4/classes/personLink.js +1 -1
  135. package/dist/FHIR-R4/classes/planDefinition.js +1 -1
  136. package/dist/FHIR-R4/classes/planDefinitionAction.js +1 -1
  137. package/dist/FHIR-R4/classes/planDefinitionCondition.js +1 -1
  138. package/dist/FHIR-R4/classes/planDefinitionParticipant.js +1 -1
  139. package/dist/FHIR-R4/classes/planDefinitionRelatedAction.js +1 -1
  140. package/dist/FHIR-R4/classes/practitioner.js +1 -1
  141. package/dist/FHIR-R4/classes/provenanceEntity.js +1 -1
  142. package/dist/FHIR-R4/classes/quantity.js +1 -1
  143. package/dist/FHIR-R4/classes/questionnaire.js +1 -1
  144. package/dist/FHIR-R4/classes/questionnaireEnableWhen.js +1 -1
  145. package/dist/FHIR-R4/classes/questionnaireItem.js +1 -1
  146. package/dist/FHIR-R4/classes/questionnaireResponse.js +1 -1
  147. package/dist/FHIR-R4/classes/relatedArtifact.js +1 -1
  148. package/dist/FHIR-R4/classes/relatedPerson.js +1 -1
  149. package/dist/FHIR-R4/classes/researchDefinition.js +1 -1
  150. package/dist/FHIR-R4/classes/researchElementDefinition.js +1 -1
  151. package/dist/FHIR-R4/classes/researchElementDefinitionCharacteristic.js +1 -1
  152. package/dist/FHIR-R4/classes/researchStudy.js +1 -1
  153. package/dist/FHIR-R4/classes/researchSubject.js +1 -1
  154. package/dist/FHIR-R4/classes/riskEvidenceSynthesis.js +1 -1
  155. package/dist/FHIR-R4/classes/searchParameter.js +1 -1
  156. package/dist/FHIR-R4/classes/slot.js +1 -1
  157. package/dist/FHIR-R4/classes/specimen.js +1 -1
  158. package/dist/FHIR-R4/classes/specimenDefinitionTypeTested.js +1 -1
  159. package/dist/FHIR-R4/classes/structureDefinition.js +1 -1
  160. package/dist/FHIR-R4/classes/structureDefinitionContext.js +1 -1
  161. package/dist/FHIR-R4/classes/structureMap.js +1 -1
  162. package/dist/FHIR-R4/classes/structureMapGroup.js +1 -1
  163. package/dist/FHIR-R4/classes/structureMapInput.js +1 -1
  164. package/dist/FHIR-R4/classes/structureMapSource.js +1 -1
  165. package/dist/FHIR-R4/classes/structureMapStructure.js +1 -1
  166. package/dist/FHIR-R4/classes/structureMapTarget.js +1 -1
  167. package/dist/FHIR-R4/classes/subscription.js +1 -1
  168. package/dist/FHIR-R4/classes/subscriptionChannel.js +1 -1
  169. package/dist/FHIR-R4/classes/substance.js +1 -1
  170. package/dist/FHIR-R4/classes/supplyDelivery.js +1 -1
  171. package/dist/FHIR-R4/classes/supplyRequest.js +1 -1
  172. package/dist/FHIR-R4/classes/task.js +1 -1
  173. package/dist/FHIR-R4/classes/terminologyCapabilities.js +1 -1
  174. package/dist/FHIR-R4/classes/testReport.js +1 -1
  175. package/dist/FHIR-R4/classes/testReportAssert.js +1 -1
  176. package/dist/FHIR-R4/classes/testReportOperation.js +1 -1
  177. package/dist/FHIR-R4/classes/testReportParticipant.js +1 -1
  178. package/dist/FHIR-R4/classes/testScript.js +1 -1
  179. package/dist/FHIR-R4/classes/testScriptAssert.js +1 -1
  180. package/dist/FHIR-R4/classes/testScriptOperation.js +1 -1
  181. package/dist/FHIR-R4/classes/timingRepeat.js +1 -1
  182. package/dist/FHIR-R4/classes/triggerDefinition.js +1 -1
  183. package/dist/FHIR-R4/classes/valueSet.js +1 -1
  184. package/dist/FHIR-R4/classes/valueSetFilter.js +1 -1
  185. package/dist/FHIR-R4/classes/visionPrescriptionLensSpecification.js +1 -1
  186. package/dist/FHIR-R4/classes/visionPrescriptionPrism.js +1 -1
  187. package/dist/FHIR-R4/interfaces/IAccount.js +1 -1
  188. package/dist/FHIR-R4/interfaces/IActivityDefinition.js +1 -1
  189. package/dist/FHIR-R4/interfaces/IAdverseEvent.js +1 -1
  190. package/dist/FHIR-R4/interfaces/IAllergyIntolerance.js +1 -1
  191. package/dist/FHIR-R4/interfaces/IAppointment.js +1 -1
  192. package/dist/FHIR-R4/interfaces/IAuditEvent.js +1 -1
  193. package/dist/FHIR-R4/interfaces/IBiologicallyDerivedProduct.js +1 -1
  194. package/dist/FHIR-R4/interfaces/IBundle.js +1 -1
  195. package/dist/FHIR-R4/interfaces/ICapabilityStatement.js +1 -1
  196. package/dist/FHIR-R4/interfaces/ICareTeam.js +1 -1
  197. package/dist/FHIR-R4/interfaces/ICatalogEntry.js +1 -1
  198. package/dist/FHIR-R4/interfaces/IChargeItem.js +1 -1
  199. package/dist/FHIR-R4/interfaces/IChargeItemDefinition.js +1 -1
  200. package/dist/FHIR-R4/interfaces/IClaim.js +1 -1
  201. package/dist/FHIR-R4/interfaces/ICodeSystem.js +1 -1
  202. package/dist/FHIR-R4/interfaces/ICompartmentDefinition.js +1 -1
  203. package/dist/FHIR-R4/interfaces/IComposition.js +1 -1
  204. package/dist/FHIR-R4/interfaces/IConceptMap.js +1 -1
  205. package/dist/FHIR-R4/interfaces/IConsent.js +1 -1
  206. package/dist/FHIR-R4/interfaces/ICoverageEligibilityResponse.js +1 -1
  207. package/dist/FHIR-R4/interfaces/IDetectedIssue.js +1 -1
  208. package/dist/FHIR-R4/interfaces/IDevice.js +1 -1
  209. package/dist/FHIR-R4/interfaces/IDeviceMetric.js +1 -1
  210. package/dist/FHIR-R4/interfaces/IDeviceUseStatement.js +1 -1
  211. package/dist/FHIR-R4/interfaces/IDiagnosticReport.js +1 -1
  212. package/dist/FHIR-R4/interfaces/IDocumentManifest.js +1 -1
  213. package/dist/FHIR-R4/interfaces/IDocumentReference.js +1 -1
  214. package/dist/FHIR-R4/interfaces/IEffectEvidenceSynthesis.js +1 -1
  215. package/dist/FHIR-R4/interfaces/IEncounter.js +1 -1
  216. package/dist/FHIR-R4/interfaces/IEndpoint.js +1 -1
  217. package/dist/FHIR-R4/interfaces/IEnrollmentResponse.js +1 -1
  218. package/dist/FHIR-R4/interfaces/IEpisodeOfCare.js +1 -1
  219. package/dist/FHIR-R4/interfaces/IEventDefinition.js +1 -1
  220. package/dist/FHIR-R4/interfaces/IEvidence.js +1 -1
  221. package/dist/FHIR-R4/interfaces/IEvidenceVariable.js +1 -1
  222. package/dist/FHIR-R4/interfaces/IExampleScenario.js +1 -1
  223. package/dist/FHIR-R4/interfaces/IExplanationOfBenefit.js +1 -1
  224. package/dist/FHIR-R4/interfaces/IFamilyMemberHistory.js +1 -1
  225. package/dist/FHIR-R4/interfaces/IFlag.js +1 -1
  226. package/dist/FHIR-R4/interfaces/IGoal.js +1 -1
  227. package/dist/FHIR-R4/interfaces/IGraphDefinition.js +1 -1
  228. package/dist/FHIR-R4/interfaces/IGroup.js +1 -1
  229. package/dist/FHIR-R4/interfaces/IGuidanceResponse.js +1 -1
  230. package/dist/FHIR-R4/interfaces/IImagingStudy.js +1 -1
  231. package/dist/FHIR-R4/interfaces/IImplementationGuide.js +1 -1
  232. package/dist/FHIR-R4/interfaces/IInsurancePlan.js +1 -1
  233. package/dist/FHIR-R4/interfaces/IInvoice.js +1 -1
  234. package/dist/FHIR-R4/interfaces/ILibrary.js +1 -1
  235. package/dist/FHIR-R4/interfaces/IList.js +1 -1
  236. package/dist/FHIR-R4/interfaces/ILocation.js +1 -1
  237. package/dist/FHIR-R4/interfaces/IMeasure.js +1 -1
  238. package/dist/FHIR-R4/interfaces/IMeasureReport.js +1 -1
  239. package/dist/FHIR-R4/interfaces/IMessageDefinition.js +1 -1
  240. package/dist/FHIR-R4/interfaces/IMolecularSequence.js +1 -1
  241. package/dist/FHIR-R4/interfaces/INamingSystem.js +1 -1
  242. package/dist/FHIR-R4/interfaces/IObservation.js +1 -1
  243. package/dist/FHIR-R4/interfaces/IOperationDefinition.js +1 -1
  244. package/dist/FHIR-R4/interfaces/IPatient.js +1 -1
  245. package/dist/FHIR-R4/interfaces/IPaymentReconciliation.js +1 -1
  246. package/dist/FHIR-R4/interfaces/IPerson.js +1 -1
  247. package/dist/FHIR-R4/interfaces/IPlanDefinition.js +1 -1
  248. package/dist/FHIR-R4/interfaces/IPractitioner.js +1 -1
  249. package/dist/FHIR-R4/interfaces/IQuestionnaire.js +1 -1
  250. package/dist/FHIR-R4/interfaces/IQuestionnaireResponse.js +1 -1
  251. package/dist/FHIR-R4/interfaces/IRelatedPerson.js +1 -1
  252. package/dist/FHIR-R4/interfaces/IResearchDefinition.js +1 -1
  253. package/dist/FHIR-R4/interfaces/IResearchElementDefinition.js +1 -1
  254. package/dist/FHIR-R4/interfaces/IResearchStudy.js +1 -1
  255. package/dist/FHIR-R4/interfaces/IResearchSubject.js +1 -1
  256. package/dist/FHIR-R4/interfaces/IRiskEvidenceSynthesis.js +1 -1
  257. package/dist/FHIR-R4/interfaces/ISearchParameter.js +1 -1
  258. package/dist/FHIR-R4/interfaces/ISlot.js +1 -1
  259. package/dist/FHIR-R4/interfaces/ISpecimen.js +1 -1
  260. package/dist/FHIR-R4/interfaces/IStructureDefinition.js +1 -1
  261. package/dist/FHIR-R4/interfaces/IStructureMap.js +1 -1
  262. package/dist/FHIR-R4/interfaces/ISubscription.js +1 -1
  263. package/dist/FHIR-R4/interfaces/ISubstance.js +1 -1
  264. package/dist/FHIR-R4/interfaces/ISupplyDelivery.js +1 -1
  265. package/dist/FHIR-R4/interfaces/ISupplyRequest.js +1 -1
  266. package/dist/FHIR-R4/interfaces/ITask.js +1 -1
  267. package/dist/FHIR-R4/interfaces/ITerminologyCapabilities.js +1 -1
  268. package/dist/FHIR-R4/interfaces/ITestReport.js +1 -1
  269. package/dist/FHIR-R4/interfaces/ITestScript.js +1 -1
  270. package/dist/FHIR-R4/interfaces/IValueSet.js +1 -1
  271. package/dist/FHIR-R5/fHIRJSONRESOURCE.d.ts +172 -0
  272. package/dist/FHIR-R5/fHIRJSONRESOURCE.js +2 -0
  273. package/dist/FHIR-R5/openApiSchemaUpdated.d.ts +172 -0
  274. package/dist/FHIR-R5/openApiSchemaUpdated.js +2 -0
  275. package/dist/index.d.ts +1 -1
  276. package/dist/index.js +39 -6
  277. package/dist/library/BundleUtils/BundleUtils.d.ts +11 -5
  278. package/dist/library/BundleUtils/BundleUtils.js +23 -5
  279. package/dist/library/BundleUtils/BundleUtils.spec.js +24 -24
  280. package/dist/library/PatchUtils/PatchUtils.d.ts +1 -1
  281. package/dist/library/PatchUtils/PatchUtils.js +31 -31
  282. package/dist/library/PatchUtils/PatchUtils.spec.js +159 -124
  283. package/dist/library/QueryBuilder/QueryBuilder.d.ts +1 -1
  284. package/dist/library/QueryBuilder/QueryBuilder.js +25 -17
  285. package/dist/library/QueryBuilder/QueryBuilder.spec.js +44 -43
  286. package/dist/library/ResourceUtils/ResourceUtils.d.ts +15 -7
  287. package/dist/library/ResourceUtils/ResourceUtils.js +19 -11
  288. package/dist/library/ResourceUtils/ResourceUtils.spec.js +113 -112
  289. package/dist/library/constants.js +2 -2
  290. package/dist/library/dataTypes.d.ts +6 -6
  291. package/eslint.config.mjs +69 -0
  292. package/package.json +21 -7
  293. package/src/FHIR-DSTU2.ts +1 -1
  294. package/src/FHIR-R3.ts +3 -1
  295. package/src/index.ts +12 -1
  296. package/src/library/BundleUtils/BundleUtils.spec.ts +26 -39
  297. package/src/library/BundleUtils/BundleUtils.ts +43 -29
  298. package/src/library/PatchUtils/PatchUtils.spec.ts +173 -129
  299. package/src/library/PatchUtils/PatchUtils.ts +39 -52
  300. package/src/library/QueryBuilder/QueryBuilder.spec.ts +54 -51
  301. package/src/library/QueryBuilder/QueryBuilder.ts +41 -31
  302. package/src/library/ResourceUtils/ResourceUtils.spec.ts +133 -164
  303. package/src/library/ResourceUtils/ResourceUtils.ts +37 -27
  304. package/src/library/constants.ts +17 -17
  305. package/src/library/dataTypes.ts +7 -7
  306. package/tsconfig.json +25 -2
@@ -1,8 +1,7 @@
1
- import { SORT_ORDER } from "../constants";
2
- import { QueryBuilder } from "./QueryBuilder";
3
-
4
- describe("QueryBuilder", () => {
1
+ import { SORT_ORDER } from '../constants';
2
+ import { QueryBuilder } from './QueryBuilder';
5
3
 
4
+ describe('QueryBuilder', () => {
6
5
  let queryBuilder: QueryBuilder;
7
6
 
8
7
  beforeEach(() => {
@@ -11,124 +10,127 @@ describe("QueryBuilder", () => {
11
10
 
12
11
  it('setBaseResource() should set base resource and getBaseResource() should return correct base resource', () => {
13
12
  // setup
14
- const expected: String = "Patient";
13
+ const expected: String = 'Patient';
15
14
  // execute
16
15
  queryBuilder.setBaseResource(expected);
17
16
  // validate
18
17
  expect(queryBuilder.getBaseResource()).toEqual(expected);
19
- })
18
+ });
20
19
 
21
20
  it('include() should make query for _include', () => {
22
21
  // setup
23
- const expected: String = "Patient?_include=Patient%3Aorganization"
22
+ const expected: String = 'Patient?_include=Patient%3Aorganization';
24
23
  // execute
25
- queryBuilder.setBaseResource("Patient").include("organization");
24
+ queryBuilder.setBaseResource('Patient').include('organization');
26
25
  // validate
27
26
  expect(queryBuilder.getCompleteUrl()).toEqual(expected);
28
27
  });
29
28
 
30
29
  it('include() should make query for multiple _include', () => {
31
30
  // setup
32
- const expected: String = "Patient?_include=Patient%3Aorganization&_include=Patient%3Alink"
31
+ const expected: String = 'Patient?_include=Patient%3Aorganization&_include=Patient%3Alink';
33
32
  // execute
34
- queryBuilder.setBaseResource("Patient")
35
- .include("organization")
36
- .include("link");
33
+ queryBuilder.setBaseResource('Patient').include('organization').include('link');
37
34
  // validate
38
35
  expect(queryBuilder.getCompleteUrl()).toEqual(expected);
39
36
  });
40
37
 
41
38
  it('revinclude() should make query for _revinclude', () => {
42
39
  // setup
43
- const expected: String = "MedicationRequest?_revinclude=CarePlan%3Aactivity-reference"
40
+ const expected: String = 'MedicationRequest?_revinclude=CarePlan%3Aactivity-reference';
44
41
  // execute
45
- queryBuilder.setBaseResource("MedicationRequest")
46
- .revinclude("CarePlan", "activity-reference");
42
+ queryBuilder.setBaseResource('MedicationRequest').revinclude('CarePlan', 'activity-reference');
47
43
  // validate
48
44
  expect(queryBuilder.getCompleteUrl()).toEqual(expected);
49
45
  });
50
46
 
51
47
  it('revinclude() should make query for multiple _revinclude', () => {
52
48
  // setup
53
- const expected: String = "MedicationRequest?_revinclude=CarePlan%3Aactivity-reference&_revinclude=Observation%3Abased-on"
49
+ const expected: String =
50
+ 'MedicationRequest?_revinclude=CarePlan%3Aactivity-reference&_revinclude=Observation%3Abased-on';
54
51
  // execute
55
- queryBuilder.setBaseResource("MedicationRequest")
56
- .revinclude("CarePlan", "activity-reference")
57
- .revinclude("Observation", "based-on");
52
+ queryBuilder
53
+ .setBaseResource('MedicationRequest')
54
+ .revinclude('CarePlan', 'activity-reference')
55
+ .revinclude('Observation', 'based-on');
58
56
  // validate
59
57
  expect(queryBuilder.getCompleteUrl()).toEqual(expected);
60
58
  });
61
59
 
62
60
  it('include() and revinclude() should make query for _include & _revinclude', () => {
63
61
  // setup
64
- const expected: String = "MedicationRequest?_revinclude=CarePlan%3Aactivity-reference&_include=MedicationRequest%3Aencounter"
62
+ const expected: String =
63
+ 'MedicationRequest?_revinclude=CarePlan%3Aactivity-reference&_include=MedicationRequest%3Aencounter';
65
64
  // execute
66
- queryBuilder.setBaseResource("MedicationRequest")
67
- .revinclude("CarePlan", "activity-reference")
68
- .include("encounter");
65
+ queryBuilder
66
+ .setBaseResource('MedicationRequest')
67
+ .revinclude('CarePlan', 'activity-reference')
68
+ .include('encounter');
69
69
  // validate
70
70
  expect(queryBuilder.getCompleteUrl()).toEqual(expected);
71
71
  });
72
72
 
73
73
  it('includeAll() should make query for _include all', () => {
74
74
  // setup
75
- const expected: String = "MedicationRequest?_include=*"
75
+ const expected: String = 'MedicationRequest?_include=*';
76
76
  // execute
77
- queryBuilder.setBaseResource("MedicationRequest").includeAll();
77
+ queryBuilder.setBaseResource('MedicationRequest').includeAll();
78
78
  // validate
79
79
  expect(queryBuilder.getCompleteUrl()).toEqual(expected);
80
80
  });
81
81
 
82
82
  it('revincludeAll() should make query for _revinclude all', () => {
83
83
  // setup
84
- const expected: String = "MedicationRequest?_revinclude=*"
84
+ const expected: String = 'MedicationRequest?_revinclude=*';
85
85
  // execute
86
- queryBuilder.setBaseResource("MedicationRequest").revincludeAll();
86
+ queryBuilder.setBaseResource('MedicationRequest').revincludeAll();
87
87
  // validate
88
88
  expect(queryBuilder.getCompleteUrl()).toEqual(expected);
89
89
  });
90
90
 
91
91
  it('includeAll() & revincludeAll() should make query for _include all & _revinclude all', () => {
92
92
  // setup
93
- const expected: String = "MedicationRequest?_revinclude=*&_include=*"
93
+ const expected: String = 'MedicationRequest?_revinclude=*&_include=*';
94
94
  // execute
95
- queryBuilder.setBaseResource("MedicationRequest")
96
- .revincludeAll()
97
- .includeAll();
95
+ queryBuilder.setBaseResource('MedicationRequest').revincludeAll().includeAll();
98
96
  // validate
99
97
  expect(queryBuilder.getCompleteUrl()).toEqual(expected);
100
98
  });
101
99
 
102
100
  it('sort() should make query for _sort', () => {
103
101
  // setup
104
- const expected: String = "Observation?_sort=status%2C-date"
102
+ const expected: String = 'Observation?_sort=status%2C-date';
105
103
  // execute
106
- queryBuilder.setBaseResource("Observation")
107
- .sort("status", SORT_ORDER.ASCENDING)
108
- .sort("date", SORT_ORDER.DESCENDING);
104
+ queryBuilder
105
+ .setBaseResource('Observation')
106
+ .sort('status', SORT_ORDER.ASCENDING)
107
+ .sort('date', SORT_ORDER.DESCENDING);
109
108
  // validate
110
109
  expect(queryBuilder.getCompleteUrl()).toEqual(expected);
111
110
  });
112
111
 
113
112
  it('sort(), include() and revincludeAll() should make query for _sort, _include & _revinclude', () => {
114
113
  // setup
115
- const expected: String = "Observation?_revinclude=*&_include=Observation%3Abased-on&_sort=status"
114
+ const expected: String =
115
+ 'Observation?_revinclude=*&_include=Observation%3Abased-on&_sort=status';
116
116
  // execute
117
- queryBuilder.setBaseResource("Observation")
118
- .revincludeAll()
119
- .include("based-on")
120
- .sort("status", SORT_ORDER.ASCENDING);
117
+ queryBuilder
118
+ .setBaseResource('Observation')
119
+ .revincludeAll()
120
+ .include('based-on')
121
+ .sort('status', SORT_ORDER.ASCENDING);
121
122
  // validate
122
123
  expect(queryBuilder.getCompleteUrl()).toEqual(expected);
123
124
  });
124
125
 
125
126
  it('resetQuery() should reset query', () => {
126
127
  // setup
127
- const expected: String = ""
128
- queryBuilder.setBaseResource("Observation")
129
- .revincludeAll()
130
- .include("based-on")
131
- .sort("status", SORT_ORDER.ASCENDING);
128
+ const expected: String = '';
129
+ queryBuilder
130
+ .setBaseResource('Observation')
131
+ .revincludeAll()
132
+ .include('based-on')
133
+ .sort('status', SORT_ORDER.ASCENDING);
132
134
  // execute
133
135
  queryBuilder.resetQuery();
134
136
  // validate
@@ -137,13 +139,14 @@ describe("QueryBuilder", () => {
137
139
 
138
140
  it('getCompleteUrlDecoded() should get uri decoded query', () => {
139
141
  // setup
140
- const expected: String = "Observation?_revinclude=*&_include=Observation:based-on&_sort=status"
142
+ const expected: String = 'Observation?_revinclude=*&_include=Observation:based-on&_sort=status';
141
143
  // execute
142
- queryBuilder.setBaseResource("Observation")
143
- .revincludeAll()
144
- .include("based-on")
145
- .sort("status", SORT_ORDER.ASCENDING);
144
+ queryBuilder
145
+ .setBaseResource('Observation')
146
+ .revincludeAll()
147
+ .include('based-on')
148
+ .sort('status', SORT_ORDER.ASCENDING);
146
149
  // validate
147
150
  expect(queryBuilder.getCompleteUrlDecoded()).toEqual(expected);
148
151
  });
149
- });
152
+ });
@@ -1,18 +1,17 @@
1
- import { SORT_ORDER } from "../constants";
1
+ import { SORT_ORDER } from '../constants';
2
2
 
3
3
  export class QueryBuilder {
4
-
5
- readonly REV_INCLUDE_KEYWORD = "_revinclude";
6
- readonly INCLUDE_KEYWORD = "_include";
7
- readonly SORT_KEYWORD = "_sort";
8
- readonly WILDCARD_ASTERIK = "*";
9
- readonly EQUALS = "=";
10
- readonly COLON = ":";
11
- readonly QUERY_DELIMETER = "&";
12
- readonly COMMA = ",";
13
- private baseResource: String = "";
4
+ readonly REV_INCLUDE_KEYWORD = '_revinclude';
5
+ readonly INCLUDE_KEYWORD = '_include';
6
+ readonly SORT_KEYWORD = '_sort';
7
+ readonly WILDCARD_ASTERIK = '*';
8
+ readonly EQUALS = '=';
9
+ readonly COLON = ':';
10
+ readonly QUERY_DELIMETER = '&';
11
+ readonly COMMA = ',';
12
+ private baseResource: String = '';
14
13
  private singularQueries: String[] = [];
15
- private sortQueries: String[] = [];
14
+ private sortQueries: String[] = [];
16
15
 
17
16
  /**
18
17
  * @returns base resource for the query
@@ -22,7 +21,7 @@ export class QueryBuilder {
22
21
  }
23
22
 
24
23
  /**
25
- * @param resourceType Base ResourceType for the query
24
+ * @param resourceType Base ResourceType for the query
26
25
  * sets base resource type for the query
27
26
  * i.e. which resource the query will performed for
28
27
  */
@@ -35,16 +34,24 @@ export class QueryBuilder {
35
34
  * @param searchParameter SearchParameter reference to targeted resource
36
35
  */
37
36
  include(searchParameter: String) {
38
- this.singularQueries.push(this.INCLUDE_KEYWORD + this.EQUALS + encodeURIComponent(this.baseResource + this.COLON + searchParameter));
37
+ this.singularQueries.push(
38
+ this.INCLUDE_KEYWORD +
39
+ this.EQUALS +
40
+ encodeURIComponent(this.baseResource + this.COLON + searchParameter)
41
+ );
39
42
  return this;
40
43
  }
41
44
 
42
45
  /**
43
- * @param resourceType Source ResourceType
46
+ * @param resourceType Source ResourceType
44
47
  * @param searchParameter SearchParameter reference from target resource to baseResource
45
48
  */
46
49
  revinclude(resourceType: String, searchParameter: String) {
47
- this.singularQueries.push(this.REV_INCLUDE_KEYWORD + this.EQUALS + encodeURIComponent(resourceType + this.COLON + searchParameter));
50
+ this.singularQueries.push(
51
+ this.REV_INCLUDE_KEYWORD +
52
+ this.EQUALS +
53
+ encodeURIComponent(resourceType + this.COLON + searchParameter)
54
+ );
48
55
  return this;
49
56
  }
50
57
 
@@ -69,10 +76,10 @@ export class QueryBuilder {
69
76
  * @param sortOrder ASCENDING or DESCENDING
70
77
  */
71
78
  sort(searchParameter: String, sortOrder: SORT_ORDER) {
72
- if(sortOrder === SORT_ORDER.ASCENDING) {
79
+ if (sortOrder === SORT_ORDER.ASCENDING) {
73
80
  this.sortQueries.push(searchParameter);
74
81
  } else {
75
- this.sortQueries.push("-" + searchParameter);
82
+ this.sortQueries.push('-' + searchParameter);
76
83
  }
77
84
  return this;
78
85
  }
@@ -83,7 +90,7 @@ export class QueryBuilder {
83
90
  resetQuery() {
84
91
  this.sortQueries = [];
85
92
  this.singularQueries = [];
86
- this.baseResource = "";
93
+ this.baseResource = '';
87
94
  return this;
88
95
  }
89
96
 
@@ -91,29 +98,32 @@ export class QueryBuilder {
91
98
  * @returns complete generated query with encoded parameter values
92
99
  */
93
100
  getCompleteUrl(): String {
94
- let completeUrl = this.baseResource + "?";
101
+ let completeUrl = this.baseResource + '?';
95
102
  const singularQueriesLength = this.singularQueries.length;
96
- if(singularQueriesLength > 0) {
97
- completeUrl += this.singularQueries.join(this.QUERY_DELIMETER);
103
+ if (singularQueriesLength > 0) {
104
+ completeUrl += this.singularQueries.join(this.QUERY_DELIMETER);
98
105
  }
99
106
  completeUrl += this.createSortQuery(singularQueriesLength);
100
- return completeUrl;
107
+ return completeUrl;
101
108
  }
102
109
 
103
110
  /**
104
111
  * @returns complete generated query with decoded parameter values
105
112
  */
106
113
  getCompleteUrlDecoded(): String {
107
- return decodeURIComponent(this.getCompleteUrl().toString());
114
+ return decodeURIComponent(this.getCompleteUrl().toString());
108
115
  }
109
-
116
+
110
117
  private createSortQuery(singularQueriesLength: number): String {
111
- let sortQuery = "";
112
- const sortDelimeter = singularQueriesLength > 0 ? this.QUERY_DELIMETER : "";
113
- if(this.sortQueries.length > 0) {
114
- sortQuery += sortDelimeter + this.SORT_KEYWORD + this.EQUALS + encodeURIComponent(this.sortQueries.join(this.COMMA));
118
+ let sortQuery = '';
119
+ const sortDelimeter = singularQueriesLength > 0 ? this.QUERY_DELIMETER : '';
120
+ if (this.sortQueries.length > 0) {
121
+ sortQuery +=
122
+ sortDelimeter +
123
+ this.SORT_KEYWORD +
124
+ this.EQUALS +
125
+ encodeURIComponent(this.sortQueries.join(this.COMMA));
115
126
  }
116
127
  return sortQuery;
117
128
  }
118
-
119
- }
129
+ }