@metriport/fhir-sdk 0.30.0-alpha.1

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 (155) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +564 -0
  3. package/dist/__tests__/careplan.test.d.ts +2 -0
  4. package/dist/__tests__/careplan.test.d.ts.map +1 -0
  5. package/dist/__tests__/careplan.test.js +544 -0
  6. package/dist/__tests__/careplan.test.js.map +1 -0
  7. package/dist/__tests__/clinical-dates.test.d.ts +2 -0
  8. package/dist/__tests__/clinical-dates.test.d.ts.map +1 -0
  9. package/dist/__tests__/clinical-dates.test.js +341 -0
  10. package/dist/__tests__/clinical-dates.test.js.map +1 -0
  11. package/dist/__tests__/coding-utilities.test.d.ts +2 -0
  12. package/dist/__tests__/coding-utilities.test.d.ts.map +1 -0
  13. package/dist/__tests__/coding-utilities.test.js +482 -0
  14. package/dist/__tests__/coding-utilities.test.js.map +1 -0
  15. package/dist/__tests__/date-range-performance.test.d.ts +2 -0
  16. package/dist/__tests__/date-range-performance.test.d.ts.map +1 -0
  17. package/dist/__tests__/date-range-performance.test.js +218 -0
  18. package/dist/__tests__/date-range-performance.test.js.map +1 -0
  19. package/dist/__tests__/date-range-search.test.d.ts +2 -0
  20. package/dist/__tests__/date-range-search.test.d.ts.map +1 -0
  21. package/dist/__tests__/date-range-search.test.js +215 -0
  22. package/dist/__tests__/date-range-search.test.js.map +1 -0
  23. package/dist/__tests__/env-setup.d.ts +2 -0
  24. package/dist/__tests__/env-setup.d.ts.map +1 -0
  25. package/dist/__tests__/env-setup.js +37 -0
  26. package/dist/__tests__/env-setup.js.map +1 -0
  27. package/dist/__tests__/fhir-bundle-sdk-basic.test.d.ts +2 -0
  28. package/dist/__tests__/fhir-bundle-sdk-basic.test.d.ts.map +1 -0
  29. package/dist/__tests__/fhir-bundle-sdk-basic.test.js +19 -0
  30. package/dist/__tests__/fhir-bundle-sdk-basic.test.js.map +1 -0
  31. package/dist/__tests__/fhir-bundle-sdk.test.d.ts +2 -0
  32. package/dist/__tests__/fhir-bundle-sdk.test.d.ts.map +1 -0
  33. package/dist/__tests__/fhir-bundle-sdk.test.js +953 -0
  34. package/dist/__tests__/fhir-bundle-sdk.test.js.map +1 -0
  35. package/dist/__tests__/fixtures/fhir-bundles.d.ts +31 -0
  36. package/dist/__tests__/fixtures/fhir-bundles.d.ts.map +1 -0
  37. package/dist/__tests__/fixtures/fhir-bundles.js +487 -0
  38. package/dist/__tests__/fixtures/fhir-bundles.js.map +1 -0
  39. package/dist/__tests__/phase1-verification.test.d.ts +2 -0
  40. package/dist/__tests__/phase1-verification.test.d.ts.map +1 -0
  41. package/dist/__tests__/phase1-verification.test.js +141 -0
  42. package/dist/__tests__/phase1-verification.test.js.map +1 -0
  43. package/dist/__tests__/phase2-verification.test.d.ts +2 -0
  44. package/dist/__tests__/phase2-verification.test.d.ts.map +1 -0
  45. package/dist/__tests__/phase2-verification.test.js +234 -0
  46. package/dist/__tests__/phase2-verification.test.js.map +1 -0
  47. package/dist/__tests__/phase3-verification.test.d.ts +2 -0
  48. package/dist/__tests__/phase3-verification.test.d.ts.map +1 -0
  49. package/dist/__tests__/phase3-verification.test.js +121 -0
  50. package/dist/__tests__/phase3-verification.test.js.map +1 -0
  51. package/dist/__tests__/phase4-verification.test.d.ts +2 -0
  52. package/dist/__tests__/phase4-verification.test.d.ts.map +1 -0
  53. package/dist/__tests__/phase4-verification.test.js +168 -0
  54. package/dist/__tests__/phase4-verification.test.js.map +1 -0
  55. package/dist/__tests__/phase5-verification.test.d.ts +2 -0
  56. package/dist/__tests__/phase5-verification.test.d.ts.map +1 -0
  57. package/dist/__tests__/phase5-verification.test.js +397 -0
  58. package/dist/__tests__/phase5-verification.test.js.map +1 -0
  59. package/dist/__tests__/reverse-references.test.d.ts +2 -0
  60. package/dist/__tests__/reverse-references.test.d.ts.map +1 -0
  61. package/dist/__tests__/reverse-references.test.js +294 -0
  62. package/dist/__tests__/reverse-references.test.js.map +1 -0
  63. package/dist/__tests__/type-guards.test.d.ts +2 -0
  64. package/dist/__tests__/type-guards.test.d.ts.map +1 -0
  65. package/dist/__tests__/type-guards.test.js +163 -0
  66. package/dist/__tests__/type-guards.test.js.map +1 -0
  67. package/dist/clinical-dates.d.ts +26 -0
  68. package/dist/clinical-dates.d.ts.map +1 -0
  69. package/dist/clinical-dates.js +571 -0
  70. package/dist/clinical-dates.js.map +1 -0
  71. package/dist/fhir-bundle-sdk.d.ts +233 -0
  72. package/dist/fhir-bundle-sdk.d.ts.map +1 -0
  73. package/dist/fhir-bundle-sdk.js +545 -0
  74. package/dist/fhir-bundle-sdk.js.map +1 -0
  75. package/dist/index.d.ts +8 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +23 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/internal/bundle-operations.d.ts +14 -0
  80. package/dist/internal/bundle-operations.d.ts.map +1 -0
  81. package/dist/internal/bundle-operations.js +55 -0
  82. package/dist/internal/bundle-operations.js.map +1 -0
  83. package/dist/internal/coding-systems.d.ts +48 -0
  84. package/dist/internal/coding-systems.d.ts.map +1 -0
  85. package/dist/internal/coding-systems.js +55 -0
  86. package/dist/internal/coding-systems.js.map +1 -0
  87. package/dist/internal/coding-utilities.d.ts +27 -0
  88. package/dist/internal/coding-utilities.d.ts.map +1 -0
  89. package/dist/internal/coding-utilities.js +297 -0
  90. package/dist/internal/coding-utilities.js.map +1 -0
  91. package/dist/internal/date-extraction.d.ts +12 -0
  92. package/dist/internal/date-extraction.d.ts.map +1 -0
  93. package/dist/internal/date-extraction.js +629 -0
  94. package/dist/internal/date-extraction.js.map +1 -0
  95. package/dist/internal/graph-traversal.d.ts +13 -0
  96. package/dist/internal/graph-traversal.d.ts.map +1 -0
  97. package/dist/internal/graph-traversal.js +89 -0
  98. package/dist/internal/graph-traversal.js.map +1 -0
  99. package/dist/internal/indexing.d.ts +17 -0
  100. package/dist/internal/indexing.d.ts.map +1 -0
  101. package/dist/internal/indexing.js +129 -0
  102. package/dist/internal/indexing.js.map +1 -0
  103. package/dist/internal/llm-context.d.ts +40 -0
  104. package/dist/internal/llm-context.d.ts.map +1 -0
  105. package/dist/internal/llm-context.js +214 -0
  106. package/dist/internal/llm-context.js.map +1 -0
  107. package/dist/internal/reference-resolution.d.ts +29 -0
  108. package/dist/internal/reference-resolution.d.ts.map +1 -0
  109. package/dist/internal/reference-resolution.js +338 -0
  110. package/dist/internal/reference-resolution.js.map +1 -0
  111. package/dist/internal/reference-utils.d.ts +26 -0
  112. package/dist/internal/reference-utils.d.ts.map +1 -0
  113. package/dist/internal/reference-utils.js +89 -0
  114. package/dist/internal/reference-utils.js.map +1 -0
  115. package/dist/internal/transparent-proxy.d.ts +12 -0
  116. package/dist/internal/transparent-proxy.d.ts.map +1 -0
  117. package/dist/internal/transparent-proxy.js +81 -0
  118. package/dist/internal/transparent-proxy.js.map +1 -0
  119. package/dist/internal/validation.d.ts +16 -0
  120. package/dist/internal/validation.d.ts.map +1 -0
  121. package/dist/internal/validation.js +45 -0
  122. package/dist/internal/validation.js.map +1 -0
  123. package/dist/type-guards.d.ts +212 -0
  124. package/dist/type-guards.d.ts.map +1 -0
  125. package/dist/type-guards.js +375 -0
  126. package/dist/type-guards.js.map +1 -0
  127. package/dist/types/coding-fields.d.ts +311 -0
  128. package/dist/types/coding-fields.d.ts.map +1 -0
  129. package/dist/types/coding-fields.js +3 -0
  130. package/dist/types/coding-fields.js.map +1 -0
  131. package/dist/types/sdk-types.d.ts +107 -0
  132. package/dist/types/sdk-types.d.ts.map +1 -0
  133. package/dist/types/sdk-types.js +17 -0
  134. package/dist/types/sdk-types.js.map +1 -0
  135. package/dist/types/smart-resources.d.ts +470 -0
  136. package/dist/types/smart-resources.d.ts.map +1 -0
  137. package/dist/types/smart-resources.js +249 -0
  138. package/dist/types/smart-resources.js.map +1 -0
  139. package/dist/utils/interval-tree/index.d.ts +87 -0
  140. package/dist/utils/interval-tree/index.d.ts.map +1 -0
  141. package/dist/utils/interval-tree/index.js +774 -0
  142. package/dist/utils/interval-tree/index.js.map +1 -0
  143. package/dist/utils/interval-tree/shallowequal/arrays.d.ts +3 -0
  144. package/dist/utils/interval-tree/shallowequal/arrays.d.ts.map +1 -0
  145. package/dist/utils/interval-tree/shallowequal/arrays.js +25 -0
  146. package/dist/utils/interval-tree/shallowequal/arrays.js.map +1 -0
  147. package/dist/utils/interval-tree/shallowequal/index.d.ts +6 -0
  148. package/dist/utils/interval-tree/shallowequal/index.d.ts.map +1 -0
  149. package/dist/utils/interval-tree/shallowequal/index.js +28 -0
  150. package/dist/utils/interval-tree/shallowequal/index.js.map +1 -0
  151. package/dist/utils/interval-tree/shallowequal/objects.d.ts +3 -0
  152. package/dist/utils/interval-tree/shallowequal/objects.d.ts.map +1 -0
  153. package/dist/utils/interval-tree/shallowequal/objects.js +28 -0
  154. package/dist/utils/interval-tree/shallowequal/objects.js.map +1 -0
  155. package/package.json +70 -0
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ /* eslint-disable @typescript-eslint/no-non-null-assertion */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const index_1 = require("../index");
5
+ // Skip these tests by default as its a performance test that is slow and will slow down CI.
6
+ describe.skip("Date Range Search - Large Scale Performance", () => {
7
+ const ONE_MILLION = 1000000;
8
+ describe("1 Million Resources", () => {
9
+ let largeBundle;
10
+ let sdk;
11
+ beforeAll(() => {
12
+ console.log(`\n🔨 Building bundle with ${ONE_MILLION.toLocaleString()} resources...`);
13
+ const startBuild = performance.now();
14
+ largeBundle = {
15
+ resourceType: "Bundle",
16
+ type: "searchset",
17
+ entry: [],
18
+ };
19
+ // Generate 1 million observations spread over 2024
20
+ // Each observation has a date somewhere in the year
21
+ const startDate = new Date("2024-01-01").getTime();
22
+ const endDate = new Date("2024-12-31").getTime();
23
+ const dateRange = endDate - startDate;
24
+ for (let i = 0; i < ONE_MILLION; i++) {
25
+ // Distribute dates across the year
26
+ const randomOffset = (i / ONE_MILLION) * dateRange;
27
+ const date = new Date(startDate + randomOffset).toISOString();
28
+ largeBundle.entry.push({
29
+ resource: {
30
+ resourceType: "Observation",
31
+ id: `obs-${i}`,
32
+ status: "final",
33
+ code: { text: `Test ${i % 100}` },
34
+ effectiveDateTime: date,
35
+ },
36
+ });
37
+ // Log progress every 100k resources
38
+ if ((i + 1) % 100000 === 0) {
39
+ console.log(` ✓ Generated ${(i + 1).toLocaleString()} resources`);
40
+ }
41
+ }
42
+ const endBuild = performance.now();
43
+ console.log(`✅ Bundle built in ${((endBuild - startBuild) / 1000).toFixed(2)}s\n`);
44
+ });
45
+ it("should index 1 million resources efficiently", () => {
46
+ console.log("📊 Indexing 1 million resources...");
47
+ const start = performance.now();
48
+ sdk = index_1.FhirBundleSdk.createSync(largeBundle);
49
+ const end = performance.now();
50
+ const duration = end - start;
51
+ const durationSeconds = duration / 1000;
52
+ const resourcesPerSecond = ONE_MILLION / durationSeconds;
53
+ console.log(`\n⏱️ Indexing Performance:`);
54
+ console.log(` • Total time: ${durationSeconds.toFixed(2)}s`);
55
+ console.log(` • Resources/second: ${Math.round(resourcesPerSecond).toLocaleString()}`);
56
+ console.log(` • Average time per resource: ${(duration / ONE_MILLION).toFixed(3)}ms\n`);
57
+ expect(sdk).toBeDefined();
58
+ // Should index at least 10,000 resources per second
59
+ expect(resourcesPerSecond).toBeGreaterThan(10000);
60
+ });
61
+ describe("Search Performance", () => {
62
+ it("should search 1 month range efficiently", () => {
63
+ console.log("🔍 Searching 1-month range...");
64
+ const start = performance.now();
65
+ const results = sdk.searchByDateRange({
66
+ dateFrom: "2024-06-01",
67
+ dateTo: "2024-06-30",
68
+ });
69
+ const end = performance.now();
70
+ const duration = end - start;
71
+ console.log(`\n⏱️ 1-Month Search:`);
72
+ console.log(` • Time: ${duration.toFixed(2)}ms`);
73
+ console.log(` • Results: ${results.length.toLocaleString()}`);
74
+ console.log(` • Time per result: ${(duration / results.length).toFixed(3)}ms\n`);
75
+ expect(results.length).toBeGreaterThan(0);
76
+ // Should complete in under 100ms
77
+ expect(duration).toBeLessThan(100);
78
+ });
79
+ it("should search 1 week range efficiently", () => {
80
+ console.log("🔍 Searching 1-week range...");
81
+ const start = performance.now();
82
+ const results = sdk.searchByDateRange({
83
+ dateFrom: "2024-06-01",
84
+ dateTo: "2024-06-07",
85
+ });
86
+ const end = performance.now();
87
+ const duration = end - start;
88
+ console.log(`\n⏱️ 1-Week Search:`);
89
+ console.log(` • Time: ${duration.toFixed(2)}ms`);
90
+ console.log(` • Results: ${results.length.toLocaleString()}`);
91
+ console.log(` • Time per result: ${(duration / results.length).toFixed(3)}ms\n`);
92
+ expect(results.length).toBeGreaterThan(0);
93
+ // Should complete in under 50ms
94
+ expect(duration).toBeLessThan(50);
95
+ });
96
+ it("should search 1 day range efficiently", () => {
97
+ console.log("🔍 Searching 1-day range...");
98
+ const start = performance.now();
99
+ const results = sdk.searchByDateRange({
100
+ dateFrom: "2024-06-15",
101
+ dateTo: "2024-06-15",
102
+ });
103
+ const end = performance.now();
104
+ const duration = end - start;
105
+ console.log(`\n⏱️ 1-Day Search:`);
106
+ console.log(` • Time: ${duration.toFixed(2)}ms`);
107
+ console.log(` • Results: ${results.length.toLocaleString()}`);
108
+ if (results.length > 0) {
109
+ console.log(` • Time per result: ${(duration / results.length).toFixed(3)}ms`);
110
+ }
111
+ console.log();
112
+ // Should complete very quickly even if no results
113
+ expect(duration).toBeLessThan(20);
114
+ });
115
+ it("should search full year range efficiently", () => {
116
+ console.log("🔍 Searching full year range...");
117
+ const start = performance.now();
118
+ const results = sdk.searchByDateRange({
119
+ dateFrom: "2024-01-01",
120
+ dateTo: "2024-12-31",
121
+ });
122
+ const end = performance.now();
123
+ const duration = end - start;
124
+ const durationSeconds = duration / 1000;
125
+ console.log(`\n⏱️ Full Year Search:`);
126
+ console.log(` • Time: ${durationSeconds.toFixed(2)}s`);
127
+ console.log(` • Results: ${results.length.toLocaleString()}`);
128
+ console.log(` • Time per result: ${(duration / results.length).toFixed(3)}ms\n`);
129
+ expect(results.length).toBe(ONE_MILLION);
130
+ // Should complete in under 5 seconds even for all results
131
+ expect(duration).toBeLessThan(5000);
132
+ });
133
+ it("should handle multiple consecutive searches efficiently", () => {
134
+ console.log("🔍 Running 100 consecutive searches...");
135
+ const searches = 100;
136
+ const start = performance.now();
137
+ for (let i = 0; i < searches; i++) {
138
+ // Search different months
139
+ const month = (i % 12) + 1;
140
+ const monthStr = month.toString().padStart(2, "0");
141
+ sdk.searchByDateRange({
142
+ dateFrom: `2024-${monthStr}-01`,
143
+ dateTo: `2024-${monthStr}-28`,
144
+ });
145
+ }
146
+ const end = performance.now();
147
+ const duration = end - start;
148
+ const avgDuration = duration / searches;
149
+ console.log(`\n⏱️ 100 Consecutive Searches:`);
150
+ console.log(` • Total time: ${duration.toFixed(2)}ms`);
151
+ console.log(` • Average per search: ${avgDuration.toFixed(2)}ms`);
152
+ console.log(` • Searches per second: ${Math.round(1000 / avgDuration)}\n`);
153
+ // Average should be under 50ms per search
154
+ expect(avgDuration).toBeLessThan(50);
155
+ });
156
+ });
157
+ describe("Comparison with Linear Search", () => {
158
+ function linearSearchByDate(bundle, dateFrom, dateTo) {
159
+ const fromMs = new Date(dateFrom).getTime();
160
+ const toMs = new Date(dateTo).getTime();
161
+ let count = 0;
162
+ for (const entry of bundle.entry ?? []) {
163
+ if (entry.resource?.resourceType === "Observation") {
164
+ const obs = entry.resource;
165
+ if (obs.effectiveDateTime) {
166
+ const dateMs = new Date(obs.effectiveDateTime).getTime();
167
+ if (dateMs >= fromMs && dateMs <= toMs) {
168
+ count++;
169
+ }
170
+ }
171
+ }
172
+ }
173
+ return count;
174
+ }
175
+ it("should be significantly faster than linear search", () => {
176
+ console.log("⚖️ Comparing interval tree vs linear search...");
177
+ // Test with 1-month range
178
+ const dateFrom = "2024-06-01";
179
+ const dateTo = "2024-06-30";
180
+ // Interval tree search
181
+ console.log("\n Testing interval tree...");
182
+ const treeStart = performance.now();
183
+ const treeResults = sdk.searchByDateRange({ dateFrom, dateTo });
184
+ const treeEnd = performance.now();
185
+ const treeDuration = treeEnd - treeStart;
186
+ // Linear search
187
+ console.log(" Testing linear search...");
188
+ const linearStart = performance.now();
189
+ const linearCount = linearSearchByDate(largeBundle, dateFrom, dateTo);
190
+ const linearEnd = performance.now();
191
+ const linearDuration = linearEnd - linearStart;
192
+ const speedup = linearDuration / treeDuration;
193
+ console.log(`\n📊 Performance Comparison (1-month search):`);
194
+ console.log(` • Interval Tree: ${treeDuration.toFixed(2)}ms`);
195
+ console.log(` • Linear Search: ${linearDuration.toFixed(2)}ms`);
196
+ console.log(` • Speedup: ${speedup.toFixed(1)}x faster`);
197
+ console.log(` • Results matched: ${treeResults.length === linearCount}\n`);
198
+ expect(treeResults.length).toBe(linearCount);
199
+ // Interval tree should be significantly faster (at least 5x)
200
+ expect(speedup).toBeGreaterThan(5);
201
+ });
202
+ });
203
+ describe("Memory Efficiency", () => {
204
+ it("should report memory usage", () => {
205
+ if (typeof process !== "undefined" && process.memoryUsage) {
206
+ const memUsage = process.memoryUsage();
207
+ console.log(`\n💾 Memory Usage:`);
208
+ console.log(` • Heap Used: ${(memUsage.heapUsed / 1024 / 1024).toFixed(2)} MB`);
209
+ console.log(` • Heap Total: ${(memUsage.heapTotal / 1024 / 1024).toFixed(2)} MB`);
210
+ console.log(` • External: ${(memUsage.external / 1024 / 1024).toFixed(2)} MB`);
211
+ console.log(` • Per resource: ${((memUsage.heapUsed / ONE_MILLION) * 1024).toFixed(2)} bytes\n`);
212
+ }
213
+ expect(true).toBe(true);
214
+ });
215
+ });
216
+ });
217
+ });
218
+ //# sourceMappingURL=date-range-performance.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-range-performance.test.js","sourceRoot":"","sources":["../../src/__tests__/date-range-performance.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=date-range-search.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-range-search.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/date-range-search.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ /* eslint-disable @typescript-eslint/no-non-null-assertion */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const index_1 = require("../index");
5
+ describe("Date Range Search", () => {
6
+ const testBundle = {
7
+ resourceType: "Bundle",
8
+ type: "searchset",
9
+ entry: [
10
+ {
11
+ resource: {
12
+ resourceType: "Patient",
13
+ id: "patient-1",
14
+ },
15
+ },
16
+ {
17
+ resource: {
18
+ resourceType: "Observation",
19
+ id: "obs-1",
20
+ status: "final",
21
+ code: { text: "Blood Pressure" },
22
+ effectiveDateTime: "2024-01-15T10:00:00Z",
23
+ },
24
+ },
25
+ {
26
+ resource: {
27
+ resourceType: "Observation",
28
+ id: "obs-2",
29
+ status: "final",
30
+ code: { text: "Heart Rate" },
31
+ effectiveDateTime: "2024-03-20T14:30:00Z",
32
+ },
33
+ },
34
+ {
35
+ resource: {
36
+ resourceType: "Condition",
37
+ id: "condition-1",
38
+ clinicalStatus: { text: "active" },
39
+ code: { text: "Hypertension" },
40
+ onsetDateTime: "2024-02-10T08:00:00Z",
41
+ recordedDate: "2024-02-11",
42
+ },
43
+ },
44
+ {
45
+ resource: {
46
+ resourceType: "Encounter",
47
+ id: "encounter-1",
48
+ status: "finished",
49
+ class: { code: "outpatient" },
50
+ period: {
51
+ start: "2024-01-10T09:00:00Z",
52
+ end: "2024-01-10T10:00:00Z",
53
+ },
54
+ },
55
+ },
56
+ {
57
+ resource: {
58
+ resourceType: "Encounter",
59
+ id: "encounter-2",
60
+ status: "finished",
61
+ class: { code: "inpatient" },
62
+ period: {
63
+ start: "2024-04-01T08:00:00Z",
64
+ end: "2024-04-05T12:00:00Z",
65
+ },
66
+ },
67
+ },
68
+ ],
69
+ };
70
+ describe("Basic date range search", () => {
71
+ it("should find resources within a date range", async () => {
72
+ const sdk = await index_1.FhirBundleSdk.create(testBundle);
73
+ const results = sdk.searchByDateRange({
74
+ dateFrom: "2024-01-01",
75
+ dateTo: "2024-01-31",
76
+ });
77
+ expect(results.length).toBeGreaterThan(0);
78
+ const resourceIds = results.map(r => r.id);
79
+ expect(resourceIds).toContain("obs-1");
80
+ expect(resourceIds).toContain("encounter-1");
81
+ expect(resourceIds).not.toContain("obs-2");
82
+ expect(resourceIds).not.toContain("condition-1");
83
+ });
84
+ it("should find resources with Date objects", async () => {
85
+ const sdk = await index_1.FhirBundleSdk.create(testBundle);
86
+ const results = sdk.searchByDateRange({
87
+ dateFrom: new Date("2024-02-01"),
88
+ dateTo: new Date("2024-02-28"),
89
+ });
90
+ const resourceIds = results.map(r => r.id);
91
+ expect(resourceIds).toContain("condition-1");
92
+ });
93
+ it("should search from a start date to current date when dateTo is omitted", async () => {
94
+ const sdk = await index_1.FhirBundleSdk.create(testBundle);
95
+ const results = sdk.searchByDateRange({
96
+ dateFrom: "2024-01-01",
97
+ });
98
+ expect(results.length).toBeGreaterThan(0);
99
+ expect(results.length).toBeGreaterThanOrEqual(5);
100
+ });
101
+ });
102
+ describe("Filtered date range search", () => {
103
+ it("should filter by resource type", async () => {
104
+ const sdk = await index_1.FhirBundleSdk.create(testBundle);
105
+ const results = sdk.searchByDateRange({
106
+ dateFrom: "2024-01-01",
107
+ dateTo: "2024-12-31",
108
+ resourceTypes: ["Observation"],
109
+ });
110
+ expect(results.length).toBe(2);
111
+ expect(results.every(r => r.resourceType === "Observation")).toBe(true);
112
+ });
113
+ it("should filter by multiple resource types", async () => {
114
+ const sdk = await index_1.FhirBundleSdk.create(testBundle);
115
+ const results = sdk.searchByDateRange({
116
+ dateFrom: "2024-01-01",
117
+ dateTo: "2024-12-31",
118
+ resourceTypes: ["Observation", "Condition"],
119
+ });
120
+ expect(results.length).toBe(3);
121
+ const resourceTypes = results.map(r => r.resourceType);
122
+ expect(resourceTypes).toContain("Observation");
123
+ expect(resourceTypes).toContain("Condition");
124
+ expect(resourceTypes).not.toContain("Encounter");
125
+ });
126
+ it("should filter by date field", async () => {
127
+ const sdk = await index_1.FhirBundleSdk.create(testBundle);
128
+ const results = sdk.searchByDateRange({
129
+ dateFrom: "2024-02-01",
130
+ dateTo: "2024-02-28",
131
+ dateFields: ["recordedDate"],
132
+ });
133
+ expect(results.length).toBe(1);
134
+ expect(results[0]?.id).toBe("condition-1");
135
+ });
136
+ it("should filter by both resource type and date field", async () => {
137
+ const sdk = await index_1.FhirBundleSdk.create(testBundle);
138
+ const results = sdk.searchByDateRange({
139
+ dateFrom: "2024-01-01",
140
+ dateTo: "2024-12-31",
141
+ resourceTypes: ["Observation"],
142
+ dateFields: ["effectiveDateTime"],
143
+ });
144
+ expect(results.length).toBe(2);
145
+ expect(results.every(r => r.resourceType === "Observation")).toBe(true);
146
+ });
147
+ });
148
+ describe("Edge cases", () => {
149
+ it("should return empty array when no resources match date range", async () => {
150
+ const sdk = await index_1.FhirBundleSdk.create(testBundle);
151
+ const results = sdk.searchByDateRange({
152
+ dateFrom: "2025-01-01",
153
+ dateTo: "2025-12-31",
154
+ });
155
+ expect(results).toEqual([]);
156
+ });
157
+ it("should throw error for invalid dateFrom", async () => {
158
+ const sdk = await index_1.FhirBundleSdk.create(testBundle);
159
+ expect(() => {
160
+ sdk.searchByDateRange({
161
+ dateFrom: "invalid-date",
162
+ dateTo: "2024-12-31",
163
+ });
164
+ }).toThrow("Invalid dateFrom parameter");
165
+ });
166
+ it("should handle resources with period dates", async () => {
167
+ const sdk = await index_1.FhirBundleSdk.create(testBundle);
168
+ const results = sdk.searchByDateRange({
169
+ dateFrom: "2024-04-01",
170
+ dateTo: "2024-04-30",
171
+ });
172
+ const resourceIds = results.map(r => r.id);
173
+ expect(resourceIds).toContain("encounter-2");
174
+ });
175
+ it("should handle overlapping date ranges", async () => {
176
+ const sdk = await index_1.FhirBundleSdk.create(testBundle);
177
+ const results = sdk.searchByDateRange({
178
+ dateFrom: "2024-04-03",
179
+ dateTo: "2024-04-03",
180
+ });
181
+ const resourceIds = results.map(r => r.id);
182
+ expect(resourceIds).toContain("encounter-2");
183
+ });
184
+ });
185
+ describe("Performance", () => {
186
+ it("should perform search efficiently on large bundles", async () => {
187
+ const largeBundle = {
188
+ resourceType: "Bundle",
189
+ type: "searchset",
190
+ entry: [],
191
+ };
192
+ for (let i = 0; i < 1000; i++) {
193
+ largeBundle.entry.push({
194
+ resource: {
195
+ resourceType: "Observation",
196
+ id: `obs-${i}`,
197
+ status: "final",
198
+ code: { text: `Test ${i}` },
199
+ effectiveDateTime: new Date(2024, 0, 1 + (i % 365)).toISOString(),
200
+ },
201
+ });
202
+ }
203
+ const sdk = await index_1.FhirBundleSdk.create(largeBundle);
204
+ const start = performance.now();
205
+ const results = sdk.searchByDateRange({
206
+ dateFrom: "2024-01-01",
207
+ dateTo: "2024-01-31",
208
+ });
209
+ const end = performance.now();
210
+ expect(results.length).toBeGreaterThan(0);
211
+ expect(end - start).toBeLessThan(100);
212
+ });
213
+ });
214
+ });
215
+ //# sourceMappingURL=date-range-search.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date-range-search.test.js","sourceRoot":"","sources":["../../src/__tests__/date-range-search.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=env-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-setup.d.ts","sourceRoot":"","sources":["../../src/__tests__/env-setup.ts"],"names":[],"mappings":""}
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const dotenv = __importStar(require("dotenv"));
30
+ const path_1 = __importDefault(require("path"));
31
+ const cwd = process.cwd();
32
+ const paths = [cwd, ...(cwd.includes("packages") ? [] : ["packages", "fhir-sdk"])];
33
+ // regular config so it can load .env if present
34
+ dotenv.config({ path: path_1.default.resolve(...paths, ".env") });
35
+ dotenv.config({ path: path_1.default.resolve(...paths, ".env.test") });
36
+ // Keep dotenv import and config before everything else
37
+ //# sourceMappingURL=env-setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-setup.js","sourceRoot":"","sources":["../../src/__tests__/env-setup.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,+CAAiC;AACjC,gDAAwB;AACxB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AAC1B,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC;AACnF,gDAAgD;AAChD,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAI,CAAC,OAAO,CAAC,GAAG,KAAK,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AACxD,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAI,CAAC,OAAO,CAAC,GAAG,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;AAC7D,uDAAuD"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=fhir-bundle-sdk-basic.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fhir-bundle-sdk-basic.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/fhir-bundle-sdk-basic.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,19 @@
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 - Basic TDD Tests", () => {
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 without throwing", 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("Invalid bundle: resourceType must be 'Bundle'");
15
+ });
16
+ });
17
+ });
18
+ });
19
+ //# sourceMappingURL=fhir-bundle-sdk-basic.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fhir-bundle-sdk-basic.test.js","sourceRoot":"","sources":["../../src/__tests__/fhir-bundle-sdk-basic.test.ts"],"names":[],"mappings":";;AAAA,oCAAyC;AACzC,0DAAsF;AAEtF,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;QACjD,QAAQ,CAAC,sDAAsD,EAAE,GAAG,EAAE;YACpE,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;gBAClE,MAAM,MAAM,CAAC,qBAAa,CAAC,MAAM,CAAC,kCAAmB,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;YACjF,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,0EAA0E,EAAE,GAAG,EAAE;YACxF,EAAE,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;gBAC3D,MAAM,MAAM,CAAC,qBAAa,CAAC,MAAM,CAAC,qCAAsB,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CACxE,+CAA+C,CAChD,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=fhir-bundle-sdk.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fhir-bundle-sdk.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/fhir-bundle-sdk.test.ts"],"names":[],"mappings":""}