@metriport/fhir-sdk 1.6.0 → 1.6.2
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/dist/__tests__/careplan.test.js +22 -24
- package/dist/__tests__/careplan.test.js.map +1 -1
- package/dist/__tests__/clinical-dates.test.js +23 -25
- package/dist/__tests__/clinical-dates.test.js.map +1 -1
- package/dist/__tests__/coding-utilities.test.js +7 -9
- package/dist/__tests__/coding-utilities.test.js.map +1 -1
- package/dist/__tests__/date-range-performance.test.js +2 -4
- package/dist/__tests__/date-range-performance.test.js.map +1 -1
- package/dist/__tests__/date-range-search.test.js +13 -15
- package/dist/__tests__/date-range-search.test.js.map +1 -1
- package/dist/__tests__/env-setup.js +4 -32
- package/dist/__tests__/env-setup.js.map +1 -1
- package/dist/__tests__/fhir-bundle-sdk-basic.test.js +4 -6
- package/dist/__tests__/fhir-bundle-sdk-basic.test.js.map +1 -1
- package/dist/__tests__/fhir-bundle-sdk.test.js +85 -87
- package/dist/__tests__/fhir-bundle-sdk.test.js.map +1 -1
- package/dist/__tests__/fixtures/fhir-bundles.d.ts +1 -1
- package/dist/__tests__/fixtures/fhir-bundles.d.ts.map +1 -1
- package/dist/__tests__/fixtures/fhir-bundles.js +11 -17
- package/dist/__tests__/fixtures/fhir-bundles.js.map +1 -1
- package/dist/__tests__/phase1-verification.test.js +10 -12
- package/dist/__tests__/phase1-verification.test.js.map +1 -1
- package/dist/__tests__/phase2-verification.test.js +14 -16
- package/dist/__tests__/phase2-verification.test.js.map +1 -1
- package/dist/__tests__/phase3-verification.test.js +15 -17
- package/dist/__tests__/phase3-verification.test.js.map +1 -1
- package/dist/__tests__/phase4-verification.test.js +27 -29
- package/dist/__tests__/phase4-verification.test.js.map +1 -1
- package/dist/__tests__/phase5-verification.test.js +38 -40
- package/dist/__tests__/phase5-verification.test.js.map +1 -1
- package/dist/__tests__/reverse-references.test.js +29 -31
- package/dist/__tests__/reverse-references.test.js.map +1 -1
- package/dist/__tests__/type-guards.test.js +16 -18
- package/dist/__tests__/type-guards.test.js.map +1 -1
- package/dist/clinical-dates.js +1 -5
- package/dist/clinical-dates.js.map +1 -1
- package/dist/fhir-bundle-sdk.js +34 -38
- package/dist/fhir-bundle-sdk.js.map +1 -1
- package/dist/index.js +4 -22
- package/dist/index.js.map +1 -1
- package/dist/internal/bundle-operations.js +3 -9
- package/dist/internal/bundle-operations.js.map +1 -1
- package/dist/internal/coding-systems.d.ts +12 -12
- package/dist/internal/coding-systems.js +15 -18
- package/dist/internal/coding-systems.js.map +1 -1
- package/dist/internal/coding-utilities.js +15 -23
- package/dist/internal/coding-utilities.js.map +1 -1
- package/dist/internal/date-extraction.js +2 -7
- package/dist/internal/date-extraction.js.map +1 -1
- package/dist/internal/graph-traversal.js +3 -7
- package/dist/internal/graph-traversal.js.map +1 -1
- package/dist/internal/indexing.js +9 -15
- package/dist/internal/indexing.js.map +1 -1
- package/dist/internal/llm-context.js +8 -17
- package/dist/internal/llm-context.js.map +1 -1
- package/dist/internal/reference-resolution.js +25 -32
- package/dist/internal/reference-resolution.js.map +1 -1
- package/dist/internal/reference-utils.js +4 -11
- package/dist/internal/reference-utils.js.map +1 -1
- package/dist/internal/transparent-proxy.js +10 -14
- package/dist/internal/transparent-proxy.js.map +1 -1
- package/dist/internal/validation.js +4 -8
- package/dist/internal/validation.js.map +1 -1
- package/dist/type-guards.js +26 -55
- package/dist/type-guards.js.map +1 -1
- package/dist/types/coding-fields.js +1 -2
- package/dist/types/sdk-types.js +1 -5
- package/dist/types/sdk-types.js.map +1 -1
- package/dist/types/smart-resources.js +5 -10
- package/dist/types/smart-resources.js.map +1 -1
- package/dist/utils/interval-tree/index.js +10 -19
- package/dist/utils/interval-tree/index.js.map +1 -1
- package/dist/utils/interval-tree/shallowequal/arrays.js +1 -4
- package/dist/utils/interval-tree/shallowequal/arrays.js.map +1 -1
- package/dist/utils/interval-tree/shallowequal/index.js +5 -13
- package/dist/utils/interval-tree/shallowequal/index.js.map +1 -1
- package/dist/utils/interval-tree/shallowequal/objects.js +1 -4
- package/dist/utils/interval-tree/shallowequal/objects.js.map +1 -1
- package/package.json +3 -2
|
@@ -1,24 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const index_1 = require("../index");
|
|
4
|
-
const fhir_bundles_1 = require("./fixtures/fhir-bundles");
|
|
1
|
+
import { FhirBundleSdk } from "../index";
|
|
2
|
+
import { validCompleteBundle, bundleWithBrokenReferences, bundleWithFullUrlReferences, } from "./fixtures/fhir-bundles";
|
|
5
3
|
describe("Phase 3 Verification - Reference Validation", () => {
|
|
6
4
|
describe("FR-2.1: lookForBrokenReferences() method returns validation result", () => {
|
|
7
5
|
it("should return validation result for valid bundle", async () => {
|
|
8
|
-
const sdk = await
|
|
6
|
+
const sdk = await FhirBundleSdk.create(validCompleteBundle);
|
|
9
7
|
const result = sdk.lookForBrokenReferences();
|
|
10
8
|
expect(result).toBeDefined();
|
|
11
9
|
expect(typeof result.hasBrokenReferences).toBe("boolean");
|
|
12
10
|
expect(Array.isArray(result.brokenReferences)).toBe(true);
|
|
13
11
|
});
|
|
14
12
|
it("should return true for valid references", async () => {
|
|
15
|
-
const sdk = await
|
|
13
|
+
const sdk = await FhirBundleSdk.create(validCompleteBundle);
|
|
16
14
|
const result = sdk.lookForBrokenReferences();
|
|
17
15
|
expect(result.hasBrokenReferences).toBe(false);
|
|
18
16
|
expect(result.brokenReferences).toHaveLength(0);
|
|
19
17
|
});
|
|
20
18
|
it("should return false for invalid references", async () => {
|
|
21
|
-
const sdk = await
|
|
19
|
+
const sdk = await FhirBundleSdk.create(bundleWithBrokenReferences);
|
|
22
20
|
const result = sdk.lookForBrokenReferences();
|
|
23
21
|
expect(result.hasBrokenReferences).toBe(true);
|
|
24
22
|
expect(result.brokenReferences.length).toBeGreaterThan(0);
|
|
@@ -26,32 +24,32 @@ describe("Phase 3 Verification - Reference Validation", () => {
|
|
|
26
24
|
});
|
|
27
25
|
describe("FR-2.2: Validation identifies references by Resource/id pattern and fullUrl references", () => {
|
|
28
26
|
it("should identify Resource/id pattern references", async () => {
|
|
29
|
-
const sdk = await
|
|
27
|
+
const sdk = await FhirBundleSdk.create(bundleWithBrokenReferences);
|
|
30
28
|
const result = sdk.lookForBrokenReferences();
|
|
31
29
|
const brokenSubjectRef = result.brokenReferences.find(ref => ref.reference === "Patient/nonexistent-patient");
|
|
32
30
|
expect(brokenSubjectRef).toBeDefined();
|
|
33
31
|
});
|
|
34
32
|
it("should validate fullUrl references", async () => {
|
|
35
|
-
const sdk = await
|
|
33
|
+
const sdk = await FhirBundleSdk.create(bundleWithFullUrlReferences);
|
|
36
34
|
const result = sdk.lookForBrokenReferences();
|
|
37
35
|
expect(result.hasBrokenReferences).toBe(false);
|
|
38
36
|
});
|
|
39
37
|
});
|
|
40
38
|
describe("FR-2.3: Validation handles both relative and absolute references", () => {
|
|
41
39
|
it("should handle relative references (Patient/123)", async () => {
|
|
42
|
-
const sdk = await
|
|
40
|
+
const sdk = await FhirBundleSdk.create(validCompleteBundle);
|
|
43
41
|
const result = sdk.lookForBrokenReferences();
|
|
44
42
|
expect(result.hasBrokenReferences).toBe(false);
|
|
45
43
|
});
|
|
46
44
|
it("should handle absolute references (urn:uuid:123)", async () => {
|
|
47
|
-
const sdk = await
|
|
45
|
+
const sdk = await FhirBundleSdk.create(bundleWithFullUrlReferences);
|
|
48
46
|
const result = sdk.lookForBrokenReferences();
|
|
49
47
|
expect(result.hasBrokenReferences).toBe(false);
|
|
50
48
|
});
|
|
51
49
|
});
|
|
52
50
|
describe("FR-2.4: Validation result includes list of broken references with details", () => {
|
|
53
51
|
it("should provide detailed broken reference information", async () => {
|
|
54
|
-
const sdk = await
|
|
52
|
+
const sdk = await FhirBundleSdk.create(bundleWithBrokenReferences);
|
|
55
53
|
const result = sdk.lookForBrokenReferences();
|
|
56
54
|
expect(result.brokenReferences.length).toBeGreaterThan(0);
|
|
57
55
|
const brokenRef = result.brokenReferences[0];
|
|
@@ -64,7 +62,7 @@ describe("Phase 3 Verification - Reference Validation", () => {
|
|
|
64
62
|
}
|
|
65
63
|
});
|
|
66
64
|
it("should identify specific broken reference details", async () => {
|
|
67
|
-
const sdk = await
|
|
65
|
+
const sdk = await FhirBundleSdk.create(bundleWithBrokenReferences);
|
|
68
66
|
const result = sdk.lookForBrokenReferences();
|
|
69
67
|
const brokenSubjectRef = result.brokenReferences.find(ref => ref.reference === "Patient/nonexistent-patient");
|
|
70
68
|
expect(brokenSubjectRef).toBeDefined();
|
|
@@ -76,7 +74,7 @@ describe("Phase 3 Verification - Reference Validation", () => {
|
|
|
76
74
|
describe("Edge Cases and Advanced Validation", () => {
|
|
77
75
|
it("should handle empty bundle gracefully", async () => {
|
|
78
76
|
const emptyBundle = { resourceType: "Bundle", type: "collection" };
|
|
79
|
-
const sdk = await
|
|
77
|
+
const sdk = await FhirBundleSdk.create(emptyBundle);
|
|
80
78
|
const result = sdk.lookForBrokenReferences();
|
|
81
79
|
expect(result.hasBrokenReferences).toBe(false);
|
|
82
80
|
expect(result.brokenReferences).toHaveLength(0);
|
|
@@ -95,13 +93,13 @@ describe("Phase 3 Verification - Reference Validation", () => {
|
|
|
95
93
|
},
|
|
96
94
|
],
|
|
97
95
|
};
|
|
98
|
-
const sdk = await
|
|
96
|
+
const sdk = await FhirBundleSdk.create(bundleWithoutRefs);
|
|
99
97
|
const result = sdk.lookForBrokenReferences();
|
|
100
98
|
expect(result.hasBrokenReferences).toBe(false);
|
|
101
99
|
expect(result.brokenReferences).toHaveLength(0);
|
|
102
100
|
});
|
|
103
101
|
it("should handle bundles with some valid and some broken references", async () => {
|
|
104
|
-
const sdk = await
|
|
102
|
+
const sdk = await FhirBundleSdk.create(bundleWithBrokenReferences);
|
|
105
103
|
const result = sdk.lookForBrokenReferences();
|
|
106
104
|
expect(result.hasBrokenReferences).toBe(true);
|
|
107
105
|
expect(result.brokenReferences.length).toBeGreaterThan(0);
|
|
@@ -109,7 +107,7 @@ describe("Phase 3 Verification - Reference Validation", () => {
|
|
|
109
107
|
});
|
|
110
108
|
describe("Performance Requirements", () => {
|
|
111
109
|
it("should validate references efficiently for large bundles", async () => {
|
|
112
|
-
const sdk = await
|
|
110
|
+
const sdk = await FhirBundleSdk.create(validCompleteBundle);
|
|
113
111
|
const start = performance.now();
|
|
114
112
|
const result = sdk.lookForBrokenReferences();
|
|
115
113
|
const end = performance.now();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phase3-verification.test.js","sourceRoot":"","sources":["../../src/__tests__/phase3-verification.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"phase3-verification.test.js","sourceRoot":"","sources":["../../src/__tests__/phase3-verification.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
const index_1 = require("../index");
|
|
4
|
-
const fhir_bundles_1 = require("./fixtures/fhir-bundles");
|
|
1
|
+
import { FhirBundleSdk } from "../index";
|
|
2
|
+
import { validCompleteBundle, mixedResourceTypesBundle, patientsOnlyBundle, bundleWithFullUrlReferences, } from "./fixtures/fhir-bundles";
|
|
5
3
|
describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
6
4
|
describe("FR-6.1: exportSubset(resourceIds: string[]): Bundle creates new bundle with specified resources", () => {
|
|
7
5
|
it("should export subset of resources by ID", async () => {
|
|
8
|
-
const sdk = await
|
|
6
|
+
const sdk = await FhirBundleSdk.create(validCompleteBundle);
|
|
9
7
|
const resourceIds = ["patient-123", "observation-001"];
|
|
10
8
|
const exportedBundle = sdk.exportSubset(resourceIds);
|
|
11
9
|
expect(exportedBundle).toBeDefined();
|
|
@@ -17,7 +15,7 @@ describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
|
17
15
|
expect(observationEntry?.resource?.id).toBe("observation-001");
|
|
18
16
|
});
|
|
19
17
|
it("should handle subset with some nonexistent resources (FR-6.5)", async () => {
|
|
20
|
-
const sdk = await
|
|
18
|
+
const sdk = await FhirBundleSdk.create(validCompleteBundle);
|
|
21
19
|
const resourceIds = ["patient-123", "nonexistent-id", "observation-001"];
|
|
22
20
|
const exportedBundle = sdk.exportSubset(resourceIds);
|
|
23
21
|
expect(exportedBundle.entry).toHaveLength(2); // Only existing resources included
|
|
@@ -27,13 +25,13 @@ describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
|
27
25
|
expect(observationEntry?.resource?.id).toBe("observation-001");
|
|
28
26
|
});
|
|
29
27
|
it("should handle empty resource ID list", async () => {
|
|
30
|
-
const sdk = await
|
|
28
|
+
const sdk = await FhirBundleSdk.create(validCompleteBundle);
|
|
31
29
|
const exportedBundle = sdk.exportSubset([]);
|
|
32
30
|
expect(exportedBundle.entry).toHaveLength(0);
|
|
33
31
|
expect(exportedBundle.total).toBe(0);
|
|
34
32
|
});
|
|
35
33
|
it("should handle all nonexistent resource IDs", async () => {
|
|
36
|
-
const sdk = await
|
|
34
|
+
const sdk = await FhirBundleSdk.create(validCompleteBundle);
|
|
37
35
|
const exportedBundle = sdk.exportSubset(["nonexistent-1", "nonexistent-2"]);
|
|
38
36
|
expect(exportedBundle.entry).toHaveLength(0);
|
|
39
37
|
expect(exportedBundle.total).toBe(0);
|
|
@@ -41,7 +39,7 @@ describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
|
41
39
|
});
|
|
42
40
|
describe("FR-6.2: exportByType(resourceType: string): Bundle creates new bundle with all resources of specified type", () => {
|
|
43
41
|
it("should export all resources of specified type", async () => {
|
|
44
|
-
const sdk = await
|
|
42
|
+
const sdk = await FhirBundleSdk.create(mixedResourceTypesBundle);
|
|
45
43
|
const exportedBundle = sdk.exportByType("Patient");
|
|
46
44
|
expect(exportedBundle).toBeDefined();
|
|
47
45
|
expect(exportedBundle.resourceType).toBe("Bundle");
|
|
@@ -52,13 +50,13 @@ describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
|
52
50
|
});
|
|
53
51
|
});
|
|
54
52
|
it("should return empty bundle for nonexistent resource type", async () => {
|
|
55
|
-
const sdk = await
|
|
53
|
+
const sdk = await FhirBundleSdk.create(patientsOnlyBundle);
|
|
56
54
|
const exportedBundle = sdk.exportByType("Observation");
|
|
57
55
|
expect(exportedBundle.entry).toHaveLength(0);
|
|
58
56
|
expect(exportedBundle.total).toBe(0);
|
|
59
57
|
});
|
|
60
58
|
it("should export all observations from mixed bundle", async () => {
|
|
61
|
-
const sdk = await
|
|
59
|
+
const sdk = await FhirBundleSdk.create(mixedResourceTypesBundle);
|
|
62
60
|
const exportedBundle = sdk.exportByType("Observation");
|
|
63
61
|
expect(exportedBundle.entry?.length).toBeGreaterThan(0);
|
|
64
62
|
exportedBundle.entry?.forEach(entry => {
|
|
@@ -68,7 +66,7 @@ describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
|
68
66
|
});
|
|
69
67
|
describe("FR-6.3: exportByTypes(resourceTypes: string[]): Bundle creates new bundle with all resources of specified types", () => {
|
|
70
68
|
it("should export all resources of specified types", async () => {
|
|
71
|
-
const sdk = await
|
|
69
|
+
const sdk = await FhirBundleSdk.create(mixedResourceTypesBundle);
|
|
72
70
|
const exportedBundle = sdk.exportByTypes(["Patient", "Observation"]);
|
|
73
71
|
expect(exportedBundle).toBeDefined();
|
|
74
72
|
expect(exportedBundle.entry?.length).toBeGreaterThan(0);
|
|
@@ -78,13 +76,13 @@ describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
|
78
76
|
});
|
|
79
77
|
});
|
|
80
78
|
it("should handle empty resource types array", async () => {
|
|
81
|
-
const sdk = await
|
|
79
|
+
const sdk = await FhirBundleSdk.create(mixedResourceTypesBundle);
|
|
82
80
|
const exportedBundle = sdk.exportByTypes([]);
|
|
83
81
|
expect(exportedBundle.entry).toHaveLength(0);
|
|
84
82
|
expect(exportedBundle.total).toBe(0);
|
|
85
83
|
});
|
|
86
84
|
it("should handle mix of existing and nonexistent resource types", async () => {
|
|
87
|
-
const sdk = await
|
|
85
|
+
const sdk = await FhirBundleSdk.create(patientsOnlyBundle);
|
|
88
86
|
const exportedBundle = sdk.exportByTypes(["Patient", "Observation", "Encounter"]);
|
|
89
87
|
expect(exportedBundle.entry?.length).toBeGreaterThan(0);
|
|
90
88
|
exportedBundle.entry?.forEach(entry => {
|
|
@@ -94,29 +92,29 @@ describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
|
94
92
|
});
|
|
95
93
|
describe("FR-6.4: Exported bundles maintain original bundle metadata but update total count", () => {
|
|
96
94
|
it("should maintain original bundle metadata", async () => {
|
|
97
|
-
const sdk = await
|
|
95
|
+
const sdk = await FhirBundleSdk.create(validCompleteBundle);
|
|
98
96
|
const exportedBundle = sdk.exportSubset(["patient-123"]);
|
|
99
97
|
expect(exportedBundle.resourceType).toBe("Bundle");
|
|
100
|
-
expect(exportedBundle.type).toBe(
|
|
98
|
+
expect(exportedBundle.type).toBe(validCompleteBundle.type);
|
|
101
99
|
// Preserve original bundle metadata if it exists
|
|
102
|
-
if (
|
|
103
|
-
expect(exportedBundle.id).toBe(
|
|
100
|
+
if (validCompleteBundle.id) {
|
|
101
|
+
expect(exportedBundle.id).toBe(validCompleteBundle.id);
|
|
104
102
|
}
|
|
105
|
-
if (
|
|
106
|
-
expect(exportedBundle.meta).toEqual(
|
|
103
|
+
if (validCompleteBundle.meta) {
|
|
104
|
+
expect(exportedBundle.meta).toEqual(validCompleteBundle.meta);
|
|
107
105
|
}
|
|
108
|
-
if (
|
|
109
|
-
expect(exportedBundle.timestamp).toBe(
|
|
106
|
+
if (validCompleteBundle.timestamp) {
|
|
107
|
+
expect(exportedBundle.timestamp).toBe(validCompleteBundle.timestamp);
|
|
110
108
|
}
|
|
111
109
|
});
|
|
112
110
|
it("should update total count correctly", async () => {
|
|
113
|
-
const sdk = await
|
|
111
|
+
const sdk = await FhirBundleSdk.create(mixedResourceTypesBundle);
|
|
114
112
|
const exportedBundle = sdk.exportByType("Patient");
|
|
115
113
|
expect(exportedBundle.total).toBe(exportedBundle.entry?.length);
|
|
116
114
|
expect(exportedBundle.total).toBeGreaterThan(0);
|
|
117
115
|
});
|
|
118
116
|
it("should set total to 0 for empty exports", async () => {
|
|
119
|
-
const sdk = await
|
|
117
|
+
const sdk = await FhirBundleSdk.create(validCompleteBundle);
|
|
120
118
|
const exportedBundle = sdk.exportSubset([]);
|
|
121
119
|
expect(exportedBundle.total).toBe(0);
|
|
122
120
|
expect(exportedBundle.entry).toHaveLength(0);
|
|
@@ -124,7 +122,7 @@ describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
|
124
122
|
});
|
|
125
123
|
describe("FR-6.6: Exported bundles preserve original entry.fullUrl values", () => {
|
|
126
124
|
it("should preserve fullUrl values in exported entries", async () => {
|
|
127
|
-
const sdk = await
|
|
125
|
+
const sdk = await FhirBundleSdk.create(bundleWithFullUrlReferences);
|
|
128
126
|
const exportedBundle = sdk.exportSubset(["patient-fullurl"]);
|
|
129
127
|
expect(exportedBundle.entry).toHaveLength(1);
|
|
130
128
|
const entry = exportedBundle.entry?.[0];
|
|
@@ -132,7 +130,7 @@ describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
|
132
130
|
expect(entry?.fullUrl).toContain("urn:uuid:");
|
|
133
131
|
});
|
|
134
132
|
it("should maintain fullUrl consistency across export types", async () => {
|
|
135
|
-
const sdk = await
|
|
133
|
+
const sdk = await FhirBundleSdk.create(bundleWithFullUrlReferences);
|
|
136
134
|
const exportBySubset = sdk.exportSubset(["patient-fullurl"]);
|
|
137
135
|
const exportByType = sdk.exportByType("Patient");
|
|
138
136
|
const subsetEntry = exportBySubset.entry?.[0];
|
|
@@ -142,7 +140,7 @@ describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
|
142
140
|
});
|
|
143
141
|
describe("Performance and Edge Cases", () => {
|
|
144
142
|
it("should handle large resource lists efficiently", async () => {
|
|
145
|
-
const sdk = await
|
|
143
|
+
const sdk = await FhirBundleSdk.create(mixedResourceTypesBundle);
|
|
146
144
|
const start = performance.now();
|
|
147
145
|
const exportedBundle = sdk.exportByTypes(["Patient", "Observation", "Encounter"]);
|
|
148
146
|
const end = performance.now();
|
|
@@ -151,13 +149,13 @@ describe("Phase 4 Verification - Bundle Export Functionality", () => {
|
|
|
151
149
|
});
|
|
152
150
|
it("should handle bundles with undefined entries", async () => {
|
|
153
151
|
const emptyBundle = { resourceType: "Bundle", type: "collection" };
|
|
154
|
-
const sdk = await
|
|
152
|
+
const sdk = await FhirBundleSdk.create(emptyBundle);
|
|
155
153
|
const exportedBundle = sdk.exportSubset(["any-id"]);
|
|
156
154
|
expect(exportedBundle.entry).toHaveLength(0);
|
|
157
155
|
expect(exportedBundle.total).toBe(0);
|
|
158
156
|
});
|
|
159
157
|
it("should return new bundle instances, not references", async () => {
|
|
160
|
-
const sdk = await
|
|
158
|
+
const sdk = await FhirBundleSdk.create(validCompleteBundle);
|
|
161
159
|
const exportedBundle1 = sdk.exportSubset(["patient-123"]);
|
|
162
160
|
const exportedBundle2 = sdk.exportSubset(["patient-123"]);
|
|
163
161
|
expect(exportedBundle1).not.toBe(exportedBundle2);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"phase4-verification.test.js","sourceRoot":"","sources":["../../src/__tests__/phase4-verification.test.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"phase4-verification.test.js","sourceRoot":"","sources":["../../src/__tests__/phase4-verification.test.ts"],"names":[],"mappings":"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"}
|