@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,433 @@
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("FhirBundleSdk", () => {
6
+ describe("Bundle Loading and Initialization", () => {
7
+ describe("FR-1.1: SDK constructor accepts a FHIR Bundle object", () => {
8
+ it("should accept a valid FHIR bundle", async () => {
9
+ await expect(index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle)).resolves.not.toThrow();
10
+ });
11
+ });
12
+ describe("FR-1.2: SDK constructor throws error if bundle.resourceType !== 'Bundle'", () => {
13
+ it("should throw error for invalid resourceType", async () => {
14
+ await expect(index_1.FhirBundleSdk.create(fhir_bundles_1.invalidBundleWrongType)).rejects.toThrow();
15
+ });
16
+ });
17
+ describe("FR-1.4: SDK constructor creates internal indexes for O(1) resource lookup", () => {
18
+ it("should create internal indexes during construction", async () => {
19
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
20
+ const start = performance.now();
21
+ const patient = sdk.getResourceById("patient-123");
22
+ const end = performance.now();
23
+ expect(patient).toBeDefined();
24
+ expect(patient?.resourceType).toBe("Patient");
25
+ expect(end - start).toBeLessThan(fhir_bundles_1.CONSTANT_TIME_EXPECTED_THRESHOLD_MS);
26
+ });
27
+ });
28
+ });
29
+ describe("Reference Validation", () => {
30
+ describe("FR-2.1: lookForBrokenReferences() method returns validation result", () => {
31
+ it("should return validation result for valid bundle", async () => {
32
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
33
+ const result = sdk.lookForBrokenReferences();
34
+ expect(result).toBeDefined();
35
+ expect(typeof result.hasBrokenReferences).toBe("boolean");
36
+ expect(Array.isArray(result.brokenReferences)).toBe(true);
37
+ });
38
+ it("should return true for valid references", async () => {
39
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
40
+ const result = sdk.lookForBrokenReferences();
41
+ expect(result.hasBrokenReferences).toBe(false);
42
+ expect(result.brokenReferences).toHaveLength(0);
43
+ });
44
+ it("should return false for invalid references", async () => {
45
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
46
+ const result = sdk.lookForBrokenReferences();
47
+ expect(result.hasBrokenReferences).toBe(true);
48
+ expect(result.brokenReferences.length).toBeGreaterThan(0);
49
+ });
50
+ });
51
+ describe("FR-2.2: Validation identifies references by Resource/id pattern and fullUrl references", () => {
52
+ it("should identify Resource/id pattern references", async () => {
53
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
54
+ const result = sdk.lookForBrokenReferences();
55
+ const brokenSubjectRef = result.brokenReferences.find(ref => ref.reference === "Patient/nonexistent-patient");
56
+ expect(brokenSubjectRef).toBeDefined();
57
+ });
58
+ it("should validate fullUrl references", async () => {
59
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithFullUrlReferences);
60
+ const result = sdk.lookForBrokenReferences();
61
+ expect(result.hasBrokenReferences).toBe(false);
62
+ });
63
+ });
64
+ describe("FR-2.3: Validation handles both relative and absolute references", () => {
65
+ it("should handle relative references (Patient/123)", async () => {
66
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
67
+ const result = sdk.lookForBrokenReferences();
68
+ expect(result.hasBrokenReferences).toBe(false);
69
+ });
70
+ it("should handle absolute references (urn:uuid:123)", async () => {
71
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithFullUrlReferences);
72
+ const result = sdk.lookForBrokenReferences();
73
+ expect(result.hasBrokenReferences).toBe(false);
74
+ });
75
+ });
76
+ describe("FR-2.4: Validation result includes list of broken references with details", () => {
77
+ it("should provide detailed broken reference information", async () => {
78
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
79
+ const result = sdk.lookForBrokenReferences();
80
+ expect(result.brokenReferences.length).toBeGreaterThan(0);
81
+ const brokenRef = result.brokenReferences[0];
82
+ expect(brokenRef).toBeDefined();
83
+ if (brokenRef) {
84
+ expect(brokenRef.sourceResourceId).toBeDefined();
85
+ expect(brokenRef.sourceResourceType).toBeDefined();
86
+ expect(brokenRef.referenceField).toBeDefined();
87
+ expect(brokenRef.reference).toBeDefined();
88
+ }
89
+ });
90
+ });
91
+ });
92
+ describe("Resource Retrieval by ID", () => {
93
+ describe("FR-3.1: getResourceById<T>(id: string): T | undefined returns resource matching the ID", () => {
94
+ it("should return resource by ID", async () => {
95
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
96
+ const patient = sdk.getResourceById("patient-123");
97
+ expect(patient).toBeDefined();
98
+ expect(patient?.id).toBe("patient-123");
99
+ expect(patient?.resourceType).toBe("Patient");
100
+ });
101
+ });
102
+ describe("FR-3.2: Method searches both resource.id and entry.fullUrl for matches", () => {
103
+ it("should find resource by resource.id", async () => {
104
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
105
+ const patient = sdk.getResourceById("patient-123");
106
+ expect(patient?.id).toBe("patient-123");
107
+ });
108
+ it("should find resource by fullUrl", async () => {
109
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
110
+ const patient = sdk.getResourceById("urn:uuid:patient-123");
111
+ expect(patient?.id).toBe("patient-123");
112
+ });
113
+ });
114
+ describe("FR-3.3: Method supports type parameter for proper TypeScript return typing", () => {
115
+ it("should return properly typed resource", async () => {
116
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
117
+ const patient = sdk.getResourceById("patient-123");
118
+ // TypeScript should infer this as Patient | undefined
119
+ expect(patient?.name).toBeDefined();
120
+ expect(patient?.birthDate).toBeDefined();
121
+ });
122
+ });
123
+ describe("FR-3.4: Method returns undefined if resource not found", () => {
124
+ it("should return undefined for nonexistent resource", async () => {
125
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
126
+ const result = sdk.getResourceById("nonexistent-id");
127
+ expect(result).toBeUndefined();
128
+ });
129
+ });
130
+ describe("FR-3.5: Lookup operates in O(1) time complexity", () => {
131
+ it("should perform lookup in O(1) time", async () => {
132
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
133
+ const start = performance.now();
134
+ sdk.getResourceById("patient-123");
135
+ const end = performance.now();
136
+ // O(1) lookup should be very fast
137
+ expect(end - start).toBeLessThan(fhir_bundles_1.CONSTANT_TIME_EXPECTED_THRESHOLD_MS);
138
+ });
139
+ });
140
+ });
141
+ describe("Type-Specific Resource Getters", () => {
142
+ describe("FR-4.1: getPatients(): Patient[] returns all Patient resources", () => {
143
+ it("should return all patients", async () => {
144
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
145
+ const patients = sdk.getPatients();
146
+ expect(Array.isArray(patients)).toBe(true);
147
+ expect(patients).toHaveLength(1);
148
+ expect(patients[0]?.resourceType).toBe("Patient");
149
+ });
150
+ });
151
+ describe("FR-4.2: getObservations(): Observation[] returns all Observation resources", () => {
152
+ it("should return all observations", async () => {
153
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
154
+ const observations = sdk.getObservations();
155
+ expect(Array.isArray(observations)).toBe(true);
156
+ expect(observations).toHaveLength(1);
157
+ expect(observations[0]?.resourceType).toBe("Observation");
158
+ });
159
+ });
160
+ describe("FR-4.3: getEncounters(): Encounter[] returns all Encounter resources", () => {
161
+ it("should return all encounters", async () => {
162
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
163
+ const encounters = sdk.getEncounters();
164
+ expect(Array.isArray(encounters)).toBe(true);
165
+ expect(encounters).toHaveLength(1);
166
+ expect(encounters[0]?.resourceType).toBe("Encounter");
167
+ });
168
+ });
169
+ describe("FR-4.4: getPractitioners(): Practitioner[] returns all Practitioner resources", () => {
170
+ it("should return all practitioners", async () => {
171
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
172
+ const practitioners = sdk.getPractitioners();
173
+ expect(Array.isArray(practitioners)).toBe(true);
174
+ expect(practitioners).toHaveLength(1);
175
+ expect(practitioners[0]?.resourceType).toBe("Practitioner");
176
+ });
177
+ });
178
+ describe("FR-4.5: getDiagnosticReports(): DiagnosticReport[] returns all DiagnosticReport resources", () => {
179
+ it("should return all diagnostic reports", async () => {
180
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
181
+ const reports = sdk.getDiagnosticReports();
182
+ expect(Array.isArray(reports)).toBe(true);
183
+ expect(reports).toHaveLength(1);
184
+ expect(reports[0]?.resourceType).toBe("DiagnosticReport");
185
+ });
186
+ });
187
+ describe("FR-4.6: All type-specific getters return empty array if no resources of that type exist", () => {
188
+ it("should return empty array when no resources exist", async () => {
189
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.emptyBundle);
190
+ expect(sdk.getPatients()).toEqual([]);
191
+ expect(sdk.getObservations()).toEqual([]);
192
+ expect(sdk.getEncounters()).toEqual([]);
193
+ expect(sdk.getPractitioners()).toEqual([]);
194
+ expect(sdk.getDiagnosticReports()).toEqual([]);
195
+ });
196
+ it("should return empty array for missing resource types", async () => {
197
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.patientsOnlyBundle);
198
+ expect(sdk.getPatients()).toHaveLength(3);
199
+ expect(sdk.getObservations()).toEqual([]);
200
+ expect(sdk.getEncounters()).toEqual([]);
201
+ expect(sdk.getPractitioners()).toEqual([]);
202
+ expect(sdk.getDiagnosticReports()).toEqual([]);
203
+ });
204
+ });
205
+ describe("FR-4.7: All methods use @medplum/fhirtypes for return type definitions", () => {
206
+ it("should return properly typed resources", async () => {
207
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
208
+ const patients = sdk.getPatients();
209
+ const observations = sdk.getObservations();
210
+ const encounters = sdk.getEncounters();
211
+ const practitioners = sdk.getPractitioners();
212
+ const reports = sdk.getDiagnosticReports();
213
+ // TypeScript compilation will enforce correct typing
214
+ expect(patients[0]?.name).toBeDefined();
215
+ expect(observations[0]?.status).toBeDefined();
216
+ expect(encounters[0]?.status).toBeDefined();
217
+ expect(practitioners[0]?.name).toBeDefined();
218
+ expect(reports[0]?.status).toBeDefined();
219
+ });
220
+ });
221
+ });
222
+ describe("Smart Reference Resolution", () => {
223
+ describe("FR-5.1: Resources returned by SDK have additional getter methods for each Reference field", () => {
224
+ it("should add getter methods for reference fields", async () => {
225
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
226
+ const observations = sdk.getObservations();
227
+ const observation = observations[0];
228
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
229
+ expect(typeof observation?.getSubject).toBe("function");
230
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
231
+ expect(typeof observation?.getEncounter).toBe("function");
232
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
233
+ expect(typeof observation?.getPerformers).toBe("function");
234
+ });
235
+ });
236
+ describe("FR-5.2: For Observation.subject reference, SDK adds getSubject() method", () => {
237
+ it("should resolve subject reference to Patient", async () => {
238
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
239
+ const observations = sdk.getObservations();
240
+ const observation = observations[0];
241
+ const subject = observation?.getSubject();
242
+ expect(subject).toBeDefined();
243
+ expect(subject?.resourceType).toBe("Patient");
244
+ expect(subject?.id).toBe("patient-123");
245
+ });
246
+ });
247
+ describe("FR-5.3: For Observation.encounter reference, SDK adds getEncounter() method", () => {
248
+ it("should resolve encounter reference to Encounter", async () => {
249
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
250
+ const observations = sdk.getObservations();
251
+ const observation = observations[0];
252
+ const encounter = observation?.getEncounter();
253
+ expect(encounter).toBeDefined();
254
+ expect(encounter?.resourceType).toBe("Encounter");
255
+ expect(encounter?.id).toBe("encounter-789");
256
+ });
257
+ });
258
+ describe("FR-5.4: For Observation.performer reference array, SDK adds getPerformer() method", () => {
259
+ it("should resolve performer references to array of resources", async () => {
260
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
261
+ const observations = sdk.getObservations();
262
+ const observation = observations[0];
263
+ const performers = observation?.getPerformers();
264
+ expect(Array.isArray(performers)).toBe(true);
265
+ expect(performers).toHaveLength(1);
266
+ expect(performers?.[0]?.resourceType).toBe("Practitioner");
267
+ expect(performers?.[0]?.id).toBe("practitioner-456");
268
+ });
269
+ });
270
+ describe("FR-5.5: Reference resolution methods handle both resource.id and fullUrl matching", () => {
271
+ it("should resolve references by resource.id", async () => {
272
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
273
+ const observations = sdk.getObservations();
274
+ const subject = observations[0]?.getSubject();
275
+ expect(subject?.id).toBe("patient-123");
276
+ });
277
+ it("should resolve references by fullUrl", async () => {
278
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithFullUrlReferences);
279
+ const observations = sdk.getObservations();
280
+ const subject = observations[0]?.getSubject();
281
+ expect(subject?.id).toBe("patient-fullurl");
282
+ });
283
+ });
284
+ describe("FR-5.6: Reference resolution methods return undefined for unresolvable references", () => {
285
+ it("should return undefined for broken references", async () => {
286
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
287
+ const observations = sdk.getObservations();
288
+ const observation = observations[0];
289
+ expect(observation?.getSubject()).toBeUndefined();
290
+ expect(observation?.getEncounter()).toBeUndefined();
291
+ expect(observation?.getPerformers()).toEqual([]);
292
+ });
293
+ });
294
+ describe("FR-5.7: Reference resolution operates in O(1) time complexity per reference", () => {
295
+ it("should resolve references in O(1) time", async () => {
296
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
297
+ const observations = sdk.getObservations();
298
+ const observation = observations[0];
299
+ const start = performance.now();
300
+ observation?.getSubject();
301
+ const end = performance.now();
302
+ // O(1) resolution should be very fast
303
+ expect(end - start).toBeLessThan(fhir_bundles_1.CONSTANT_TIME_EXPECTED_THRESHOLD_MS);
304
+ });
305
+ });
306
+ describe("FR-5.8: Original reference fields remain unchanged", () => {
307
+ it("should preserve original reference fields", async () => {
308
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
309
+ const observations = sdk.getObservations();
310
+ const observation = observations[0];
311
+ expect(observation?.subject?.reference).toBe("Patient/patient-123");
312
+ expect(observation?.encounter?.reference).toBe("Encounter/encounter-789");
313
+ expect(observation?.performer?.[0]?.reference).toBe("Practitioner/practitioner-456");
314
+ });
315
+ });
316
+ });
317
+ describe("Bundle Export Functionality", () => {
318
+ describe("FR-6.1: exportSubset(resourceIds: string[]): Bundle creates new bundle with specified resources", () => {
319
+ it("should export subset of resources by ID", async () => {
320
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
321
+ const subset = sdk.exportSubset(["patient-123", "observation-001"]);
322
+ expect(subset.resourceType).toBe("Bundle");
323
+ expect(subset.type).toBe("collection");
324
+ expect(subset.entry).toHaveLength(2);
325
+ expect(subset.total).toBe(2);
326
+ });
327
+ });
328
+ describe("FR-6.2: exportByType(resourceType: string): Bundle creates new bundle with all resources of specified type", () => {
329
+ it("should export all resources of specified type", async () => {
330
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
331
+ const patientBundle = sdk.exportByType("Patient");
332
+ expect(patientBundle.resourceType).toBe("Bundle");
333
+ expect(patientBundle.type).toBe("collection");
334
+ expect(patientBundle.entry).toHaveLength(2);
335
+ expect(patientBundle.total).toBe(2);
336
+ expect(
337
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
338
+ patientBundle.entry?.every((entry) => entry.resource?.resourceType === "Patient")).toBe(true);
339
+ });
340
+ });
341
+ describe("FR-6.3: exportByTypes(resourceTypes: string[]): Bundle creates new bundle with all resources of specified types", () => {
342
+ it("should export all resources of specified types", async () => {
343
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
344
+ const bundle = sdk.exportByTypes(["Patient", "Observation"]);
345
+ expect(bundle.resourceType).toBe("Bundle");
346
+ expect(bundle.type).toBe("collection");
347
+ expect(bundle.entry).toHaveLength(4); // 2 patients + 2 observations
348
+ expect(bundle.total).toBe(4);
349
+ });
350
+ });
351
+ describe("FR-6.4: Exported bundles maintain original bundle metadata but update total count", () => {
352
+ it("should maintain metadata and update total", async () => {
353
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
354
+ const subset = sdk.exportSubset(["patient-123"]);
355
+ expect(subset.resourceType).toBe("Bundle");
356
+ expect(subset.type).toBe("collection");
357
+ expect(subset.total).toBe(1); // Updated count
358
+ expect(subset.id).toBeDefined(); // Metadata preserved
359
+ });
360
+ });
361
+ describe("FR-6.5: Exported bundles include only resources that exist in the original bundle", () => {
362
+ it("should ignore nonexistent resource IDs", async () => {
363
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
364
+ const subset = sdk.exportSubset(["patient-123", "nonexistent-id"]);
365
+ expect(subset.entry).toHaveLength(1);
366
+ expect(subset.total).toBe(1);
367
+ });
368
+ });
369
+ describe("FR-6.6: Exported bundles preserve original entry.fullUrl values", () => {
370
+ it("should preserve fullUrl values", async () => {
371
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
372
+ const subset = sdk.exportSubset(["patient-123"]);
373
+ expect(subset.entry?.[0]?.fullUrl).toBe("urn:uuid:patient-123");
374
+ });
375
+ });
376
+ });
377
+ describe("Error Handling", () => {
378
+ describe("FR-7.1: All methods handle malformed resource references gracefully", () => {
379
+ it("should handle malformed references without throwing", async () => {
380
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
381
+ expect(() => {
382
+ const observations = sdk.getObservations();
383
+ observations[0]?.getSubject();
384
+ }).not.toThrow();
385
+ });
386
+ });
387
+ describe("FR-7.2: SDK throws descriptive errors for invalid bundle structure during initialization", () => {
388
+ it("should throw descriptive error for invalid bundle", async () => {
389
+ await expect(index_1.FhirBundleSdk.create(fhir_bundles_1.invalidBundleWrongType)).rejects.toThrow("Invalid bundle: resourceType must be 'Bundle'");
390
+ });
391
+ });
392
+ describe("FR-7.3: Reference resolution methods never throw errors, only return undefined for invalid references", () => {
393
+ it("should return undefined instead of throwing for invalid references", async () => {
394
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
395
+ const observations = sdk.getObservations();
396
+ expect(() => observations[0]?.getSubject()).not.toThrow();
397
+ expect(observations[0]?.getSubject()).toBeUndefined();
398
+ });
399
+ });
400
+ });
401
+ describe("Performance Requirements", () => {
402
+ describe("FR-9.1: Resource lookup by ID completes in O(1) time", () => {
403
+ it("should perform ID lookup in O(1) time", async () => {
404
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
405
+ const start = performance.now();
406
+ sdk.getResourceById("patient-123");
407
+ const end = performance.now();
408
+ expect(end - start).toBeLessThan(fhir_bundles_1.CONSTANT_TIME_EXPECTED_THRESHOLD_MS);
409
+ });
410
+ });
411
+ describe("FR-9.2: Type-specific getters complete in O(n) time where n is number of resources of that type", () => {
412
+ it("should perform type-specific queries efficiently", async () => {
413
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.mixedResourceTypesBundle);
414
+ const start = performance.now();
415
+ const patients = sdk.getPatients();
416
+ const end = performance.now();
417
+ expect(patients).toHaveLength(2);
418
+ expect(end - start).toBeLessThan(fhir_bundles_1.CONSTANT_TIME_EXPECTED_THRESHOLD_MS * 2); // Should be fast for small bundles
419
+ });
420
+ });
421
+ describe("FR-9.4: Reference resolution per reference completes in O(1) time", () => {
422
+ it("should resolve references in O(1) time", async () => {
423
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
424
+ const observations = sdk.getObservations();
425
+ const start = performance.now();
426
+ observations[0]?.getSubject();
427
+ const end = performance.now();
428
+ expect(end - start).toBeLessThan(fhir_bundles_1.CONSTANT_TIME_EXPECTED_THRESHOLD_MS);
429
+ });
430
+ });
431
+ });
432
+ });
433
+ //# sourceMappingURL=fhir-bundle-sdk.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fhir-bundle-sdk.test.js","sourceRoot":"","sources":["../../src/__tests__/fhir-bundle-sdk.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import { Bundle } from "@medplum/fhirtypes";
2
+ export declare const CONSTANT_TIME_EXPECTED_THRESHOLD_MS: number;
3
+ /**
4
+ * Valid FHIR bundle with all resource types and proper references
5
+ */
6
+ export declare const validCompleteBundle: Bundle;
7
+ /**
8
+ * Bundle with broken references for validation testing
9
+ */
10
+ export declare const bundleWithBrokenReferences: Bundle;
11
+ /**
12
+ * Bundle with fullUrl references for testing different reference styles
13
+ */
14
+ export declare const bundleWithFullUrlReferences: Bundle;
15
+ /**
16
+ * Empty bundle for edge case testing
17
+ */
18
+ export declare const emptyBundle: Bundle;
19
+ /**
20
+ * Bundle with only patients for type-specific getter testing
21
+ */
22
+ export declare const patientsOnlyBundle: Bundle;
23
+ /**
24
+ * Invalid bundle - wrong resourceType
25
+ */
26
+ export declare const invalidBundleWrongType: any;
27
+ /**
28
+ * Bundle for export testing with mixed resource types
29
+ */
30
+ export declare const mixedResourceTypesBundle: Bundle;
31
+ //# sourceMappingURL=fhir-bundles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fhir-bundles.d.ts","sourceRoot":"","sources":["../../../src/__tests__/fixtures/fhir-bundles.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EAMP,MAAM,oBAAoB,CAAC;AAM5B,eAAO,MAAM,mCAAmC,QAE7B,CAAC;AAEpB;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAmKjC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,0BAA0B,EAAE,MAmCxC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,2BAA2B,EAAE,MA2BzC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,MAMzB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,MA+BhC,CAAC;AAEF;;GAEG;AAEH,eAAO,MAAM,sBAAsB,EAAE,GAIpC,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,MA6DtC,CAAC"}