@metriport/fhir-sdk 1.7.1 → 1.7.2-alpha.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metriport/fhir-sdk",
3
- "version": "1.7.1",
3
+ "version": "1.7.2-alpha.0",
4
4
  "description": "FHIR Bundle SDK for parsing, querying, and manipulating FHIR bundles with reference resolution",
5
5
  "author": "Metriport Inc. <contact@metriport.com>",
6
6
  "homepage": "https://metriport.com/",
@@ -50,7 +50,7 @@
50
50
  },
51
51
  "dependencies": {
52
52
  "@medplum/fhirtypes": "^2.2.10",
53
- "@metriport/shared": "^0.28.1"
53
+ "@metriport/shared": "^0.28.2-alpha.0"
54
54
  },
55
55
  "devDependencies": {
56
56
  "@metriport/eslint-rules": "file:packages/eslint-rules",
@@ -66,5 +66,5 @@
66
66
  "ts-jest": "29.1.1",
67
67
  "typescript": "^4.9.5"
68
68
  },
69
- "gitHead": "93c974e4836229e16f2766770f4d2ff50acda14e"
69
+ "gitHead": "b0fc3902aa5cbe66ed60cea64ce5178c90194f0e"
70
70
  }
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=type-guards.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"type-guards.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/type-guards.test.ts"],"names":[],"mappings":""}
@@ -1,163 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const fhir_bundle_sdk_1 = require("../fhir-bundle-sdk");
4
- const type_guards_1 = require("../type-guards");
5
- describe("Type Guards", () => {
6
- describe("Basic type narrowing with mixed resource arrays", () => {
7
- test("filters mixed Resource array to specific type with proper inference", () => {
8
- const resources = [
9
- { resourceType: "Patient", id: "patient-1" },
10
- { resourceType: "Observation", id: "obs-1", status: "final", code: { text: "test" } },
11
- { resourceType: "Patient", id: "patient-2" },
12
- {
13
- resourceType: "DiagnosticReport",
14
- id: "report-1",
15
- status: "final",
16
- code: { text: "test" },
17
- },
18
- { resourceType: "Observation", id: "obs-2", status: "final", code: { text: "test" } },
19
- ];
20
- const patients = resources.filter(type_guards_1.isPatient);
21
- const observations = resources.filter(type_guards_1.isObservation);
22
- const reports = resources.filter(type_guards_1.isDiagnosticReport);
23
- // Type assertions validate TypeScript properly inferred the types
24
- expect(patients).toHaveLength(2);
25
- expect(observations).toHaveLength(2);
26
- expect(reports).toHaveLength(1);
27
- // TypeScript knows these are Patients, so we can access Patient-specific fields
28
- patients.forEach(patient => {
29
- expect(patient.resourceType).toBe("Patient");
30
- // This wouldn't compile if TypeScript didn't narrow the type
31
- void patient.name; // Patient-specific field accessible due to type narrowing
32
- });
33
- // TypeScript knows these are Observations
34
- observations.forEach(obs => {
35
- expect(obs.resourceType).toBe("Observation");
36
- expect(obs.status).toBe("final"); // Observation-specific field accessible
37
- });
38
- });
39
- });
40
- describe("Type guards with Smart resources", () => {
41
- test("filters Smart resources with proper type inference", async () => {
42
- const bundle = {
43
- resourceType: "Bundle",
44
- type: "collection",
45
- entry: [
46
- { resource: { resourceType: "Patient", id: "patient-1" } },
47
- {
48
- resource: {
49
- resourceType: "Observation",
50
- id: "obs-1",
51
- status: "final",
52
- code: { text: "test" },
53
- subject: { reference: "Patient/patient-1" },
54
- },
55
- },
56
- { resource: { resourceType: "Patient", id: "patient-2" } },
57
- {
58
- resource: {
59
- resourceType: "Encounter",
60
- id: "enc-1",
61
- status: "finished",
62
- class: { code: "test" },
63
- },
64
- },
65
- {
66
- resource: {
67
- resourceType: "Observation",
68
- id: "obs-2",
69
- status: "final",
70
- code: { text: "test" },
71
- },
72
- },
73
- ],
74
- };
75
- const sdk = await fhir_bundle_sdk_1.FhirBundleSdk.create(bundle);
76
- // Test filtering observations directly - this is the main use case
77
- const allObservations = sdk.getObservations();
78
- expect(allObservations).toHaveLength(2);
79
- allObservations.forEach(obs => {
80
- expect(obs.resourceType).toBe("Observation");
81
- expect(obs.__isSmartResource).toBe(true);
82
- // Type guard confirms it's an Observation, so we can access observation-specific fields
83
- if ((0, type_guards_1.isObservation)(obs)) {
84
- const subject = obs.getSubject();
85
- void subject;
86
- }
87
- });
88
- // Test filtering patients
89
- const allPatients = sdk.getPatients();
90
- expect(allPatients).toHaveLength(2);
91
- allPatients.forEach(patient => {
92
- expect(patient.resourceType).toBe("Patient");
93
- expect(patient.__isSmartResource).toBe(true);
94
- });
95
- });
96
- test("type guards work in conditional blocks with Smart resources", async () => {
97
- const bundle = {
98
- resourceType: "Bundle",
99
- type: "collection",
100
- entry: [
101
- {
102
- resource: {
103
- resourceType: "Patient",
104
- id: "patient-1",
105
- name: [{ given: ["Jane"], family: "Doe" }],
106
- },
107
- },
108
- {
109
- resource: {
110
- resourceType: "Observation",
111
- id: "obs-1",
112
- status: "final",
113
- code: { text: "test" },
114
- valueQuantity: { value: 120, unit: "mmHg" },
115
- },
116
- },
117
- ],
118
- };
119
- const sdk = await fhir_bundle_sdk_1.FhirBundleSdk.create(bundle);
120
- const resource1 = sdk.getResourceById("patient-1");
121
- const resource2 = sdk.getResourceById("obs-1");
122
- // Type guard in conditional - TypeScript should narrow the type
123
- if (resource1 && (0, type_guards_1.isPatient)(resource1)) {
124
- expect(resource1.resourceType).toBe("Patient");
125
- const name = resource1.name?.[0]?.given?.[0];
126
- expect(name).toBe("Jane");
127
- }
128
- if (resource2 && (0, type_guards_1.isObservation)(resource2)) {
129
- expect(resource2.resourceType).toBe("Observation");
130
- const value = resource2.valueQuantity?.value;
131
- expect(value).toBe(120);
132
- }
133
- });
134
- });
135
- describe("Edge cases", () => {
136
- test("handles undefined gracefully", () => {
137
- expect((0, type_guards_1.isPatient)(undefined)).toBe(false);
138
- expect((0, type_guards_1.isObservation)(undefined)).toBe(false);
139
- expect((0, type_guards_1.isDiagnosticReport)(undefined)).toBe(false);
140
- });
141
- test("filters out undefined values from array", () => {
142
- const resources = [
143
- { resourceType: "Patient", id: "1" },
144
- undefined,
145
- { resourceType: "Observation", id: "2", status: "final", code: { text: "test" } },
146
- undefined,
147
- ];
148
- const patients = resources.filter(type_guards_1.isPatient);
149
- const observations = resources.filter(type_guards_1.isObservation);
150
- expect(patients).toHaveLength(1);
151
- expect(observations).toHaveLength(1);
152
- });
153
- test("returns empty array when no matches found", () => {
154
- const resources = [
155
- { resourceType: "Patient", id: "1" },
156
- { resourceType: "Patient", id: "2" },
157
- ];
158
- const observations = resources.filter(type_guards_1.isObservation);
159
- expect(observations).toHaveLength(0);
160
- });
161
- });
162
- });
163
- //# sourceMappingURL=type-guards.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"type-guards.test.js","sourceRoot":"","sources":["../../src/__tests__/type-guards.test.ts"],"names":[],"mappings":"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"}