@metriport/fhir-sdk 1.2.5

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 (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +124 -0
  3. package/dist/__tests__/env-setup.d.ts +2 -0
  4. package/dist/__tests__/env-setup.d.ts.map +1 -0
  5. package/dist/__tests__/env-setup.js +37 -0
  6. package/dist/__tests__/env-setup.js.map +1 -0
  7. package/dist/__tests__/fhir-bundle-sdk-basic.test.d.ts +2 -0
  8. package/dist/__tests__/fhir-bundle-sdk-basic.test.d.ts.map +1 -0
  9. package/dist/__tests__/fhir-bundle-sdk-basic.test.js +19 -0
  10. package/dist/__tests__/fhir-bundle-sdk-basic.test.js.map +1 -0
  11. package/dist/__tests__/fhir-bundle-sdk.test.d.ts +2 -0
  12. package/dist/__tests__/fhir-bundle-sdk.test.d.ts.map +1 -0
  13. package/dist/__tests__/fhir-bundle-sdk.test.js +433 -0
  14. package/dist/__tests__/fhir-bundle-sdk.test.js.map +1 -0
  15. package/dist/__tests__/fixtures/fhir-bundles.d.ts +31 -0
  16. package/dist/__tests__/fixtures/fhir-bundles.d.ts.map +1 -0
  17. package/dist/__tests__/fixtures/fhir-bundles.js +369 -0
  18. package/dist/__tests__/fixtures/fhir-bundles.js.map +1 -0
  19. package/dist/__tests__/phase1-verification.test.d.ts +2 -0
  20. package/dist/__tests__/phase1-verification.test.d.ts.map +1 -0
  21. package/dist/__tests__/phase1-verification.test.js +141 -0
  22. package/dist/__tests__/phase1-verification.test.js.map +1 -0
  23. package/dist/__tests__/phase2-verification.test.d.ts +2 -0
  24. package/dist/__tests__/phase2-verification.test.d.ts.map +1 -0
  25. package/dist/__tests__/phase2-verification.test.js +234 -0
  26. package/dist/__tests__/phase2-verification.test.js.map +1 -0
  27. package/dist/__tests__/phase3-verification.test.d.ts +2 -0
  28. package/dist/__tests__/phase3-verification.test.d.ts.map +1 -0
  29. package/dist/__tests__/phase3-verification.test.js +121 -0
  30. package/dist/__tests__/phase3-verification.test.js.map +1 -0
  31. package/dist/__tests__/phase4-verification.test.d.ts +2 -0
  32. package/dist/__tests__/phase4-verification.test.d.ts.map +1 -0
  33. package/dist/__tests__/phase4-verification.test.js +168 -0
  34. package/dist/__tests__/phase4-verification.test.js.map +1 -0
  35. package/dist/__tests__/phase5-verification.test.d.ts +2 -0
  36. package/dist/__tests__/phase5-verification.test.d.ts.map +1 -0
  37. package/dist/__tests__/phase5-verification.test.js +200 -0
  38. package/dist/__tests__/phase5-verification.test.js.map +1 -0
  39. package/dist/index.d.ts +245 -0
  40. package/dist/index.d.ts.map +1 -0
  41. package/dist/index.js +681 -0
  42. package/dist/index.js.map +1 -0
  43. package/dist/types/smart-resources.d.ts +219 -0
  44. package/dist/types/smart-resources.d.ts.map +1 -0
  45. package/dist/types/smart-resources.js +140 -0
  46. package/dist/types/smart-resources.js.map +1 -0
  47. package/package.json +69 -0
@@ -0,0 +1,234 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const index_1 = require("../index");
4
+ const fhir_bundles_1 = require("./fixtures/fhir-bundles");
5
+ describe("Phase 2 Verification - Type-Specific Resource Getters", () => {
6
+ describe("Type-Specific Resource Getters - FR-4.1 to FR-4.7", () => {
7
+ let sdk;
8
+ beforeEach(async () => {
9
+ sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
10
+ });
11
+ describe("FR-4.1: getPatients(): Patient[] returns all Patient resources", () => {
12
+ it("should return all patients from validCompleteBundle", async () => {
13
+ const patients = sdk.getPatients();
14
+ expect(Array.isArray(patients)).toBe(true);
15
+ expect(patients).toHaveLength(1);
16
+ expect(patients[0]?.resourceType).toBe("Patient");
17
+ expect(patients[0]?.id).toBe("patient-123");
18
+ expect(patients[0]?.name?.[0]?.family).toBe("Doe");
19
+ expect(patients[0]?.name?.[0]?.given?.[0]).toBe("Jane");
20
+ });
21
+ it("should return multiple patients from mixedResourceTypesBundle", async () => {
22
+ const mixedSdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
23
+ const patients = mixedSdk.getPatients();
24
+ expect(patients).toHaveLength(2);
25
+ expect(patients[0]?.id).toBe("patient-mix-1");
26
+ expect(patients[1]?.id).toBe("patient-mix-2");
27
+ expect(patients.every(p => p.resourceType === "Patient")).toBe(true);
28
+ });
29
+ });
30
+ describe("FR-4.2: getObservations(): Observation[] returns all Observation resources", () => {
31
+ it("should return all observations", async () => {
32
+ const observations = sdk.getObservations();
33
+ expect(Array.isArray(observations)).toBe(true);
34
+ expect(observations).toHaveLength(1);
35
+ expect(observations[0]?.resourceType).toBe("Observation");
36
+ expect(observations[0]?.id).toBe("observation-001");
37
+ expect(observations[0]?.code?.text).toBe("Glucose");
38
+ expect(observations[0]?.status).toBe("final");
39
+ });
40
+ it("should return multiple observations from mixedResourceTypesBundle", async () => {
41
+ const mixedSdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
42
+ const observations = mixedSdk.getObservations();
43
+ expect(observations).toHaveLength(2);
44
+ expect(observations[0]?.id).toBe("observation-mix-1");
45
+ expect(observations[1]?.id).toBe("observation-mix-2");
46
+ expect(observations.every(o => o.resourceType === "Observation")).toBe(true);
47
+ });
48
+ });
49
+ describe("FR-4.3: getEncounters(): Encounter[] returns all Encounter resources", () => {
50
+ it("should return all encounters", async () => {
51
+ const encounters = sdk.getEncounters();
52
+ expect(Array.isArray(encounters)).toBe(true);
53
+ expect(encounters).toHaveLength(1);
54
+ expect(encounters[0]?.resourceType).toBe("Encounter");
55
+ expect(encounters[0]?.id).toBe("encounter-789");
56
+ expect(encounters[0]?.status).toBe("finished");
57
+ expect(encounters[0]?.class?.code).toBe("AMB");
58
+ });
59
+ });
60
+ describe("FR-4.4: getPractitioners(): Practitioner[] returns all Practitioner resources", () => {
61
+ it("should return all practitioners", async () => {
62
+ const practitioners = sdk.getPractitioners();
63
+ expect(Array.isArray(practitioners)).toBe(true);
64
+ expect(practitioners).toHaveLength(1);
65
+ expect(practitioners[0]?.resourceType).toBe("Practitioner");
66
+ expect(practitioners[0]?.id).toBe("practitioner-456");
67
+ expect(practitioners[0]?.name?.[0]?.family).toBe("Smith");
68
+ expect(practitioners[0]?.name?.[0]?.given?.[0]).toBe("John");
69
+ });
70
+ });
71
+ describe("FR-4.5: getDiagnosticReports(): DiagnosticReport[] returns all DiagnosticReport resources", () => {
72
+ it("should return all diagnostic reports", async () => {
73
+ const reports = sdk.getDiagnosticReports();
74
+ expect(Array.isArray(reports)).toBe(true);
75
+ expect(reports).toHaveLength(1);
76
+ expect(reports[0]?.resourceType).toBe("DiagnosticReport");
77
+ expect(reports[0]?.id).toBe("diagnostic-report-002");
78
+ expect(reports[0]?.status).toBe("final");
79
+ expect(reports[0]?.code?.text).toBe("Lab Results");
80
+ });
81
+ });
82
+ describe("FR-4.6: All type-specific getters return empty array if no resources of that type exist", () => {
83
+ it("should return empty arrays for empty bundle", async () => {
84
+ const emptySdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.emptyBundle);
85
+ expect(emptySdk.getPatients()).toEqual([]);
86
+ expect(emptySdk.getObservations()).toEqual([]);
87
+ expect(emptySdk.getEncounters()).toEqual([]);
88
+ expect(emptySdk.getPractitioners()).toEqual([]);
89
+ expect(emptySdk.getDiagnosticReports()).toEqual([]);
90
+ });
91
+ it("should return empty arrays for missing resource types in patientsOnlyBundle", async () => {
92
+ const patientsSdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.patientsOnlyBundle);
93
+ expect(patientsSdk.getPatients()).toHaveLength(3); // Has patients
94
+ expect(patientsSdk.getObservations()).toEqual([]);
95
+ expect(patientsSdk.getEncounters()).toEqual([]);
96
+ expect(patientsSdk.getPractitioners()).toEqual([]);
97
+ expect(patientsSdk.getDiagnosticReports()).toEqual([]);
98
+ });
99
+ });
100
+ describe("FR-4.7: All methods use @medplum/fhirtypes for return type definitions", () => {
101
+ it("should return properly typed resources with TypeScript compilation", async () => {
102
+ const patients = sdk.getPatients();
103
+ const observations = sdk.getObservations();
104
+ const encounters = sdk.getEncounters();
105
+ const practitioners = sdk.getPractitioners();
106
+ const reports = sdk.getDiagnosticReports();
107
+ // TypeScript compilation will enforce correct typing
108
+ // These properties should be available without type errors
109
+ expect(patients[0]?.name).toBeDefined();
110
+ expect(patients[0]?.birthDate).toBeDefined();
111
+ expect(observations[0]?.status).toBeDefined();
112
+ expect(observations[0]?.code).toBeDefined();
113
+ expect(encounters[0]?.status).toBeDefined();
114
+ expect(encounters[0]?.class).toBeDefined();
115
+ expect(practitioners[0]?.name).toBeDefined();
116
+ expect(practitioners[0]?.qualification).toBeDefined();
117
+ expect(reports[0]?.status).toBeDefined();
118
+ expect(reports[0]?.code).toBeDefined();
119
+ });
120
+ });
121
+ });
122
+ describe("Performance Requirements", () => {
123
+ describe("FR-9.2: Type-specific getters complete in O(n) time where n is number of resources of that type", () => {
124
+ it("should perform type-specific queries efficiently", async () => {
125
+ const mixedSdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
126
+ const start = performance.now();
127
+ const patients = mixedSdk.getPatients();
128
+ const end = performance.now();
129
+ expect(patients).toHaveLength(2);
130
+ // Should be fast for small bundles (O(n) where n=2)
131
+ expect(end - start).toBeLessThan(fhir_bundles_1.CONSTANT_TIME_EXPECTED_THRESHOLD_MS);
132
+ });
133
+ it("should handle multiple type queries efficiently", async () => {
134
+ const mixedSdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
135
+ const start = performance.now();
136
+ // Perform multiple type-specific queries
137
+ const patients = mixedSdk.getPatients();
138
+ const observations = mixedSdk.getObservations();
139
+ const practitioners = mixedSdk.getPractitioners();
140
+ const encounters = mixedSdk.getEncounters();
141
+ const reports = mixedSdk.getDiagnosticReports();
142
+ const end = performance.now();
143
+ expect(patients).toHaveLength(2);
144
+ expect(observations).toHaveLength(2);
145
+ expect(practitioners).toHaveLength(1);
146
+ expect(encounters).toHaveLength(1);
147
+ expect(reports).toHaveLength(0);
148
+ // Multiple O(n) queries should still be fast
149
+ expect(end - start).toBeLessThan(50);
150
+ });
151
+ });
152
+ });
153
+ describe("Memory Management - FR-10.1 and FR-10.2", () => {
154
+ it("should return references to cached objects, not copies", async () => {
155
+ const testSdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
156
+ const patients1 = testSdk.getPatients();
157
+ const patients2 = testSdk.getPatients();
158
+ // Should return the same array reference
159
+ expect(patients1).toBe(patients2);
160
+ // Should return the same patient object
161
+ expect(patients1[0]).toBe(patients2[0]);
162
+ });
163
+ it("should maintain object identity across different access methods", async () => {
164
+ const testSdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
165
+ const patient1 = testSdk.getResourceById("patient-123");
166
+ const patients = testSdk.getPatients();
167
+ const patient2 = patients[0];
168
+ // Should be the same object instance
169
+ expect(patient1).toBe(patient2);
170
+ });
171
+ });
172
+ describe("Edge Cases and Robustness", () => {
173
+ it("should handle bundle with undefined entries gracefully", async () => {
174
+ const bundleWithUndefinedEntries = {
175
+ resourceType: "Bundle",
176
+ type: "collection",
177
+ total: 2,
178
+ entry: [
179
+ {
180
+ fullUrl: "urn:uuid:patient-valid",
181
+ resource: {
182
+ resourceType: "Patient",
183
+ id: "patient-valid",
184
+ name: [{ family: "Valid", given: ["Patient"] }],
185
+ },
186
+ },
187
+ {
188
+ fullUrl: "urn:uuid:entry-without-resource",
189
+ // No resource field
190
+ },
191
+ ],
192
+ };
193
+ const testSdk = await index_1.FhirBundleSdk.create(bundleWithUndefinedEntries);
194
+ const patients = testSdk.getPatients();
195
+ expect(patients).toHaveLength(1);
196
+ expect(patients[0]?.id).toBe("patient-valid");
197
+ });
198
+ it("should handle resources with same type but different structures", async () => {
199
+ const bundleWithVariedPatients = {
200
+ resourceType: "Bundle",
201
+ type: "collection",
202
+ total: 2,
203
+ entry: [
204
+ {
205
+ fullUrl: "urn:uuid:patient-full",
206
+ resource: {
207
+ resourceType: "Patient",
208
+ id: "patient-full",
209
+ name: [{ family: "Full", given: ["Patient"] }],
210
+ gender: "female",
211
+ birthDate: "1990-01-01",
212
+ },
213
+ },
214
+ {
215
+ fullUrl: "urn:uuid:patient-minimal",
216
+ resource: {
217
+ resourceType: "Patient",
218
+ id: "patient-minimal",
219
+ // Minimal patient with only required fields
220
+ },
221
+ },
222
+ ],
223
+ };
224
+ const testSdk = await index_1.FhirBundleSdk.create(bundleWithVariedPatients);
225
+ const patients = testSdk.getPatients();
226
+ expect(patients).toHaveLength(2);
227
+ expect(patients[0]?.id).toBe("patient-full");
228
+ expect(patients[1]?.id).toBe("patient-minimal");
229
+ expect(patients[0]?.name).toBeDefined();
230
+ expect(patients[1]?.name).toBeUndefined();
231
+ });
232
+ });
233
+ });
234
+ //# sourceMappingURL=phase2-verification.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase2-verification.test.js","sourceRoot":"","sources":["../../src/__tests__/phase2-verification.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=phase3-verification.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase3-verification.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/phase3-verification.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const index_1 = require("../index");
4
+ const fhir_bundles_1 = require("./fixtures/fhir-bundles");
5
+ describe("Phase 3 Verification - Reference Validation", () => {
6
+ describe("FR-2.1: lookForBrokenReferences() method returns validation result", () => {
7
+ it("should return validation result for valid bundle", async () => {
8
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
9
+ const result = sdk.lookForBrokenReferences();
10
+ expect(result).toBeDefined();
11
+ expect(typeof result.hasBrokenReferences).toBe("boolean");
12
+ expect(Array.isArray(result.brokenReferences)).toBe(true);
13
+ });
14
+ it("should return true for valid references", async () => {
15
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
16
+ const result = sdk.lookForBrokenReferences();
17
+ expect(result.hasBrokenReferences).toBe(false);
18
+ expect(result.brokenReferences).toHaveLength(0);
19
+ });
20
+ it("should return false for invalid references", async () => {
21
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
22
+ const result = sdk.lookForBrokenReferences();
23
+ expect(result.hasBrokenReferences).toBe(true);
24
+ expect(result.brokenReferences.length).toBeGreaterThan(0);
25
+ });
26
+ });
27
+ describe("FR-2.2: Validation identifies references by Resource/id pattern and fullUrl references", () => {
28
+ it("should identify Resource/id pattern references", async () => {
29
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
30
+ const result = sdk.lookForBrokenReferences();
31
+ const brokenSubjectRef = result.brokenReferences.find(ref => ref.reference === "Patient/nonexistent-patient");
32
+ expect(brokenSubjectRef).toBeDefined();
33
+ });
34
+ it("should validate fullUrl references", async () => {
35
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithFullUrlReferences);
36
+ const result = sdk.lookForBrokenReferences();
37
+ expect(result.hasBrokenReferences).toBe(false);
38
+ });
39
+ });
40
+ describe("FR-2.3: Validation handles both relative and absolute references", () => {
41
+ it("should handle relative references (Patient/123)", async () => {
42
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
43
+ const result = sdk.lookForBrokenReferences();
44
+ expect(result.hasBrokenReferences).toBe(false);
45
+ });
46
+ it("should handle absolute references (urn:uuid:123)", async () => {
47
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithFullUrlReferences);
48
+ const result = sdk.lookForBrokenReferences();
49
+ expect(result.hasBrokenReferences).toBe(false);
50
+ });
51
+ });
52
+ describe("FR-2.4: Validation result includes list of broken references with details", () => {
53
+ it("should provide detailed broken reference information", async () => {
54
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
55
+ const result = sdk.lookForBrokenReferences();
56
+ expect(result.brokenReferences.length).toBeGreaterThan(0);
57
+ const brokenRef = result.brokenReferences[0];
58
+ expect(brokenRef).toBeDefined();
59
+ if (brokenRef) {
60
+ expect(brokenRef.sourceResourceId).toBeDefined();
61
+ expect(brokenRef.sourceResourceType).toBeDefined();
62
+ expect(brokenRef.referenceField).toBeDefined();
63
+ expect(brokenRef.reference).toBeDefined();
64
+ }
65
+ });
66
+ it("should identify specific broken reference details", async () => {
67
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
68
+ const result = sdk.lookForBrokenReferences();
69
+ const brokenSubjectRef = result.brokenReferences.find(ref => ref.reference === "Patient/nonexistent-patient");
70
+ expect(brokenSubjectRef).toBeDefined();
71
+ expect(brokenSubjectRef?.sourceResourceType).toBe("Observation");
72
+ expect(brokenSubjectRef?.referenceField).toContain("subject");
73
+ expect(brokenSubjectRef?.reference).toBe("Patient/nonexistent-patient");
74
+ });
75
+ });
76
+ describe("Edge Cases and Advanced Validation", () => {
77
+ it("should handle empty bundle gracefully", async () => {
78
+ const emptyBundle = { resourceType: "Bundle", type: "collection" };
79
+ const sdk = await index_1.FhirBundleSdk.create(emptyBundle);
80
+ const result = sdk.lookForBrokenReferences();
81
+ expect(result.hasBrokenReferences).toBe(false);
82
+ expect(result.brokenReferences).toHaveLength(0);
83
+ });
84
+ it("should handle resources without references", async () => {
85
+ const bundleWithoutRefs = {
86
+ resourceType: "Bundle",
87
+ type: "collection",
88
+ entry: [
89
+ {
90
+ resource: {
91
+ resourceType: "Patient",
92
+ id: "test-patient",
93
+ name: [{ family: "Test" }],
94
+ },
95
+ },
96
+ ],
97
+ };
98
+ const sdk = await index_1.FhirBundleSdk.create(bundleWithoutRefs);
99
+ const result = sdk.lookForBrokenReferences();
100
+ expect(result.hasBrokenReferences).toBe(false);
101
+ expect(result.brokenReferences).toHaveLength(0);
102
+ });
103
+ it("should handle bundles with some valid and some broken references", async () => {
104
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
105
+ const result = sdk.lookForBrokenReferences();
106
+ expect(result.hasBrokenReferences).toBe(true);
107
+ expect(result.brokenReferences.length).toBeGreaterThan(0);
108
+ });
109
+ });
110
+ describe("Performance Requirements", () => {
111
+ it("should validate references efficiently for large bundles", async () => {
112
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
113
+ const start = performance.now();
114
+ const result = sdk.lookForBrokenReferences();
115
+ const end = performance.now();
116
+ expect(result).toBeDefined();
117
+ expect(end - start).toBeLessThan(50); // Should be very fast even for complex bundles
118
+ });
119
+ });
120
+ });
121
+ //# sourceMappingURL=phase3-verification.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase3-verification.test.js","sourceRoot":"","sources":["../../src/__tests__/phase3-verification.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=phase4-verification.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase4-verification.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/phase4-verification.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,168 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const index_1 = require("../index");
4
+ const fhir_bundles_1 = require("./fixtures/fhir-bundles");
5
+ describe("Phase 4 Verification - Bundle Export Functionality", () => {
6
+ describe("FR-6.1: exportSubset(resourceIds: string[]): Bundle creates new bundle with specified resources", () => {
7
+ it("should export subset of resources by ID", async () => {
8
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
9
+ const resourceIds = ["patient-123", "observation-001"];
10
+ const exportedBundle = sdk.exportSubset(resourceIds);
11
+ expect(exportedBundle).toBeDefined();
12
+ expect(exportedBundle.resourceType).toBe("Bundle");
13
+ expect(exportedBundle.entry).toHaveLength(2);
14
+ const patientEntry = exportedBundle.entry?.find(e => e.resource?.resourceType === "Patient");
15
+ const observationEntry = exportedBundle.entry?.find(e => e.resource?.resourceType === "Observation");
16
+ expect(patientEntry?.resource?.id).toBe("patient-123");
17
+ expect(observationEntry?.resource?.id).toBe("observation-001");
18
+ });
19
+ it("should handle subset with some nonexistent resources (FR-6.5)", async () => {
20
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
21
+ const resourceIds = ["patient-123", "nonexistent-id", "observation-001"];
22
+ const exportedBundle = sdk.exportSubset(resourceIds);
23
+ expect(exportedBundle.entry).toHaveLength(2); // Only existing resources included
24
+ const patientEntry = exportedBundle.entry?.find(e => e.resource?.resourceType === "Patient");
25
+ const observationEntry = exportedBundle.entry?.find(e => e.resource?.resourceType === "Observation");
26
+ expect(patientEntry?.resource?.id).toBe("patient-123");
27
+ expect(observationEntry?.resource?.id).toBe("observation-001");
28
+ });
29
+ it("should handle empty resource ID list", async () => {
30
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
31
+ const exportedBundle = sdk.exportSubset([]);
32
+ expect(exportedBundle.entry).toHaveLength(0);
33
+ expect(exportedBundle.total).toBe(0);
34
+ });
35
+ it("should handle all nonexistent resource IDs", async () => {
36
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
37
+ const exportedBundle = sdk.exportSubset(["nonexistent-1", "nonexistent-2"]);
38
+ expect(exportedBundle.entry).toHaveLength(0);
39
+ expect(exportedBundle.total).toBe(0);
40
+ });
41
+ });
42
+ describe("FR-6.2: exportByType(resourceType: string): Bundle creates new bundle with all resources of specified type", () => {
43
+ it("should export all resources of specified type", async () => {
44
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
45
+ const exportedBundle = sdk.exportByType("Patient");
46
+ expect(exportedBundle).toBeDefined();
47
+ expect(exportedBundle.resourceType).toBe("Bundle");
48
+ expect(exportedBundle.entry?.length).toBeGreaterThan(0);
49
+ // All entries should be Patient resources
50
+ exportedBundle.entry?.forEach(entry => {
51
+ expect(entry.resource?.resourceType).toBe("Patient");
52
+ });
53
+ });
54
+ it("should return empty bundle for nonexistent resource type", async () => {
55
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.patientsOnlyBundle);
56
+ const exportedBundle = sdk.exportByType("Observation");
57
+ expect(exportedBundle.entry).toHaveLength(0);
58
+ expect(exportedBundle.total).toBe(0);
59
+ });
60
+ it("should export all observations from mixed bundle", async () => {
61
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
62
+ const exportedBundle = sdk.exportByType("Observation");
63
+ expect(exportedBundle.entry?.length).toBeGreaterThan(0);
64
+ exportedBundle.entry?.forEach(entry => {
65
+ expect(entry.resource?.resourceType).toBe("Observation");
66
+ });
67
+ });
68
+ });
69
+ describe("FR-6.3: exportByTypes(resourceTypes: string[]): Bundle creates new bundle with all resources of specified types", () => {
70
+ it("should export all resources of specified types", async () => {
71
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
72
+ const exportedBundle = sdk.exportByTypes(["Patient", "Observation"]);
73
+ expect(exportedBundle).toBeDefined();
74
+ expect(exportedBundle.entry?.length).toBeGreaterThan(0);
75
+ // All entries should be either Patient or Observation resources
76
+ exportedBundle.entry?.forEach(entry => {
77
+ expect(["Patient", "Observation"]).toContain(entry.resource?.resourceType);
78
+ });
79
+ });
80
+ it("should handle empty resource types array", async () => {
81
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
82
+ const exportedBundle = sdk.exportByTypes([]);
83
+ expect(exportedBundle.entry).toHaveLength(0);
84
+ expect(exportedBundle.total).toBe(0);
85
+ });
86
+ it("should handle mix of existing and nonexistent resource types", async () => {
87
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.patientsOnlyBundle);
88
+ const exportedBundle = sdk.exportByTypes(["Patient", "Observation", "Encounter"]);
89
+ expect(exportedBundle.entry?.length).toBeGreaterThan(0);
90
+ exportedBundle.entry?.forEach(entry => {
91
+ expect(entry.resource?.resourceType).toBe("Patient");
92
+ });
93
+ });
94
+ });
95
+ describe("FR-6.4: Exported bundles maintain original bundle metadata but update total count", () => {
96
+ it("should maintain original bundle metadata", async () => {
97
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
98
+ const exportedBundle = sdk.exportSubset(["patient-123"]);
99
+ expect(exportedBundle.resourceType).toBe("Bundle");
100
+ expect(exportedBundle.type).toBe(fhir_bundles_1.validCompleteBundle.type);
101
+ // Preserve original bundle metadata if it exists
102
+ if (fhir_bundles_1.validCompleteBundle.id) {
103
+ expect(exportedBundle.id).toBe(fhir_bundles_1.validCompleteBundle.id);
104
+ }
105
+ if (fhir_bundles_1.validCompleteBundle.meta) {
106
+ expect(exportedBundle.meta).toEqual(fhir_bundles_1.validCompleteBundle.meta);
107
+ }
108
+ if (fhir_bundles_1.validCompleteBundle.timestamp) {
109
+ expect(exportedBundle.timestamp).toBe(fhir_bundles_1.validCompleteBundle.timestamp);
110
+ }
111
+ });
112
+ it("should update total count correctly", async () => {
113
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
114
+ const exportedBundle = sdk.exportByType("Patient");
115
+ expect(exportedBundle.total).toBe(exportedBundle.entry?.length);
116
+ expect(exportedBundle.total).toBeGreaterThan(0);
117
+ });
118
+ it("should set total to 0 for empty exports", async () => {
119
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
120
+ const exportedBundle = sdk.exportSubset([]);
121
+ expect(exportedBundle.total).toBe(0);
122
+ expect(exportedBundle.entry).toHaveLength(0);
123
+ });
124
+ });
125
+ describe("FR-6.6: Exported bundles preserve original entry.fullUrl values", () => {
126
+ it("should preserve fullUrl values in exported entries", async () => {
127
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithFullUrlReferences);
128
+ const exportedBundle = sdk.exportSubset(["patient-fullurl"]);
129
+ expect(exportedBundle.entry).toHaveLength(1);
130
+ const entry = exportedBundle.entry?.[0];
131
+ expect(entry?.fullUrl).toBeDefined();
132
+ expect(entry?.fullUrl).toContain("urn:uuid:");
133
+ });
134
+ it("should maintain fullUrl consistency across export types", async () => {
135
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithFullUrlReferences);
136
+ const exportBySubset = sdk.exportSubset(["patient-fullurl"]);
137
+ const exportByType = sdk.exportByType("Patient");
138
+ const subsetEntry = exportBySubset.entry?.[0];
139
+ const typeEntry = exportByType.entry?.find(e => e.resource?.id === "patient-fullurl");
140
+ expect(subsetEntry?.fullUrl).toBe(typeEntry?.fullUrl);
141
+ });
142
+ });
143
+ describe("Performance and Edge Cases", () => {
144
+ it("should handle large resource lists efficiently", async () => {
145
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
146
+ const start = performance.now();
147
+ const exportedBundle = sdk.exportByTypes(["Patient", "Observation", "Encounter"]);
148
+ const end = performance.now();
149
+ expect(exportedBundle).toBeDefined();
150
+ expect(end - start).toBeLessThan(50); // Should be efficient
151
+ });
152
+ it("should handle bundles with undefined entries", async () => {
153
+ const emptyBundle = { resourceType: "Bundle", type: "collection" };
154
+ const sdk = await index_1.FhirBundleSdk.create(emptyBundle);
155
+ const exportedBundle = sdk.exportSubset(["any-id"]);
156
+ expect(exportedBundle.entry).toHaveLength(0);
157
+ expect(exportedBundle.total).toBe(0);
158
+ });
159
+ it("should return new bundle instances, not references", async () => {
160
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
161
+ const exportedBundle1 = sdk.exportSubset(["patient-123"]);
162
+ const exportedBundle2 = sdk.exportSubset(["patient-123"]);
163
+ expect(exportedBundle1).not.toBe(exportedBundle2);
164
+ expect(exportedBundle1.entry).not.toBe(exportedBundle2.entry);
165
+ });
166
+ });
167
+ });
168
+ //# sourceMappingURL=phase4-verification.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase4-verification.test.js","sourceRoot":"","sources":["../../src/__tests__/phase4-verification.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=phase5-verification.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase5-verification.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/phase5-verification.test.ts"],"names":[],"mappings":""}