@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,200 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ /* eslint-disable @typescript-eslint/no-non-null-assertion */
4
+ const index_1 = require("../index");
5
+ const fhir_bundles_1 = require("./fixtures/fhir-bundles");
6
+ describe("Phase 5 Verification - Smart Reference Resolution", () => {
7
+ describe("FR-5.1: Resources returned by SDK have additional getter methods for each Reference field", () => {
8
+ it("should add reference methods to Observation resources", async () => {
9
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
10
+ const observations = sdk.getObservations();
11
+ expect(observations.length).toBeGreaterThan(0);
12
+ const observation = observations[0];
13
+ expect(typeof observation.getSubject).toBe("function");
14
+ expect(typeof observation.getEncounter).toBe("function");
15
+ expect(typeof observation.getPerformers).toBe("function");
16
+ });
17
+ it("should add reference methods to Encounter resources", async () => {
18
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
19
+ const encounters = sdk.getEncounters();
20
+ expect(encounters.length).toBeGreaterThan(0);
21
+ const encounter = encounters[0];
22
+ expect(typeof encounter.getSubject).toBe("function");
23
+ expect(typeof encounter.getParticipants).toBe("function");
24
+ });
25
+ });
26
+ describe("FR-5.2: For Observation.subject reference, SDK adds getSubject() method", () => {
27
+ it("should resolve subject reference to Patient", async () => {
28
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
29
+ const observations = sdk.getObservations();
30
+ expect(observations.length).toBeGreaterThan(0);
31
+ const observation = observations[0];
32
+ const subject = observation.getSubject();
33
+ expect(subject).toBeDefined();
34
+ expect(subject?.resourceType).toBe("Patient");
35
+ expect(subject?.id).toBe("patient-123");
36
+ });
37
+ });
38
+ describe("FR-5.3: For Observation.encounter reference, SDK adds getEncounter() method", () => {
39
+ it("should resolve encounter reference to Encounter", async () => {
40
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
41
+ const observations = sdk.getObservations();
42
+ expect(observations.length).toBeGreaterThan(0);
43
+ const observation = observations[0];
44
+ const encounter = observation.getEncounter();
45
+ expect(encounter).toBeDefined();
46
+ expect(encounter?.resourceType).toBe("Encounter");
47
+ expect(encounter?.id).toBe("encounter-789");
48
+ });
49
+ });
50
+ describe("FR-5.4: For Observation.performer reference array, SDK adds getPerformers() method", () => {
51
+ it("should resolve performer references to array of resources", async () => {
52
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
53
+ const observations = sdk.getObservations();
54
+ expect(observations.length).toBeGreaterThan(0);
55
+ const observation = observations[0];
56
+ const performers = observation.getPerformers();
57
+ expect(Array.isArray(performers)).toBe(true);
58
+ expect(performers.length).toBe(1);
59
+ expect(performers[0]?.resourceType).toBe("Practitioner");
60
+ expect(performers[0]?.id).toBe("practitioner-456");
61
+ });
62
+ });
63
+ describe("FR-5.5: Reference resolution methods handle both resource.id and fullUrl matching", () => {
64
+ it("should resolve references by resource.id", async () => {
65
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
66
+ const observations = sdk.getObservations();
67
+ expect(observations.length).toBeGreaterThan(0);
68
+ const observation = observations[0];
69
+ const subject = observation.getSubject();
70
+ expect(subject?.id).toBe("patient-123");
71
+ });
72
+ });
73
+ describe("FR-5.6: Reference resolution methods return undefined for unresolvable references", () => {
74
+ it("should return undefined for broken references", async () => {
75
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
76
+ const observations = sdk.getObservations();
77
+ if (observations.length > 0) {
78
+ const observation = observations[0];
79
+ expect(observation.getSubject()).toBeUndefined();
80
+ expect(observation.getEncounter()).toBeUndefined();
81
+ }
82
+ });
83
+ it("should return empty array for missing array references", async () => {
84
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
85
+ const observations = sdk.getObservations();
86
+ if (observations.length > 0) {
87
+ const observation = observations[0];
88
+ const performers = observation.getPerformers();
89
+ expect(Array.isArray(performers)).toBe(true);
90
+ expect(performers).toHaveLength(0);
91
+ }
92
+ });
93
+ });
94
+ describe("FR-5.7: Reference resolution operates in O(1) time complexity per reference", () => {
95
+ it("should resolve references in O(1) time", async () => {
96
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
97
+ const observations = sdk.getObservations();
98
+ expect(observations.length).toBeGreaterThan(0);
99
+ const observation = observations[0];
100
+ const start = performance.now();
101
+ observation.getSubject();
102
+ const end = performance.now();
103
+ expect(end - start).toBeLessThan(fhir_bundles_1.CONSTANT_TIME_EXPECTED_THRESHOLD_MS);
104
+ });
105
+ });
106
+ describe("FR-5.8: Original reference fields remain unchanged", () => {
107
+ it("should preserve original reference fields", async () => {
108
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
109
+ const observations = sdk.getObservations();
110
+ expect(observations.length).toBeGreaterThan(0);
111
+ const observation = observations[0];
112
+ expect(observation.subject).toEqual({ reference: "Patient/patient-123" });
113
+ expect(observation.encounter).toEqual({ reference: "Encounter/encounter-789" });
114
+ expect(observation.performer).toEqual([{ reference: "Practitioner/practitioner-456" }]);
115
+ });
116
+ it("should not include getter methods in JSON serialization", async () => {
117
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
118
+ const observations = sdk.getObservations();
119
+ expect(observations.length).toBeGreaterThan(0);
120
+ const observation = observations[0];
121
+ const serialized = JSON.stringify(observation);
122
+ expect(serialized).not.toContain("getSubject");
123
+ expect(serialized).not.toContain("getEncounter");
124
+ expect(serialized).not.toContain("getPerformer");
125
+ });
126
+ });
127
+ describe("Reference Chaining", () => {
128
+ it("should support chaining through resolved references", async () => {
129
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
130
+ const observations = sdk.getObservations();
131
+ expect(observations.length).toBeGreaterThan(0);
132
+ const observation = observations[0];
133
+ // Chain: Observation → Encounter → Patient
134
+ const patientViaChain = observation.getEncounter()?.getSubject();
135
+ expect(patientViaChain).toBeDefined();
136
+ expect(patientViaChain?.resourceType).toBe("Patient");
137
+ expect(patientViaChain?.id).toBe("patient-123");
138
+ });
139
+ it("should handle broken chains gracefully", async () => {
140
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.bundleWithBrokenReferences);
141
+ const observations = sdk.getObservations();
142
+ if (observations.length > 0) {
143
+ const observation = observations[0];
144
+ const brokenChain = observation.getEncounter()?.getSubject();
145
+ expect(brokenChain).toBeUndefined();
146
+ }
147
+ });
148
+ });
149
+ describe("Smart Resource Identity and Caching", () => {
150
+ it("should maintain object identity for cached resources", async () => {
151
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
152
+ const observation1 = sdk.getObservations()[0];
153
+ const observation2 = sdk.getObservations()[0];
154
+ expect(observation1).toBe(observation2);
155
+ });
156
+ it("should maintain consistency across different access methods", async () => {
157
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
158
+ const observationFromList = sdk.getObservations()[0];
159
+ const observationById = sdk.getResourceById("observation-001");
160
+ expect(observationFromList).toBe(observationById);
161
+ });
162
+ it("should cache resolved references", async () => {
163
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
164
+ const observations = sdk.getObservations();
165
+ expect(observations.length).toBeGreaterThan(0);
166
+ const observation = observations[0];
167
+ const subject1 = observation.getSubject();
168
+ const subject2 = observation.getSubject();
169
+ expect(subject1).toBe(subject2);
170
+ });
171
+ });
172
+ describe("Array Reference Chaining", () => {
173
+ it("should support chaining through array elements", async () => {
174
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
175
+ const reports = sdk.getDiagnosticReports();
176
+ if (reports.length > 0) {
177
+ const report = reports[0];
178
+ const results = report.getResults();
179
+ expect(Array.isArray(results)).toBe(true);
180
+ if (results.length > 0) {
181
+ const firstResult = results[0];
182
+ expect(typeof firstResult.getSubject).toBe("function");
183
+ const patient = firstResult.getSubject();
184
+ expect(patient?.resourceType).toBe("Patient");
185
+ }
186
+ }
187
+ });
188
+ });
189
+ describe("Smart Resource Marker", () => {
190
+ it("should mark resources as smart resources", async () => {
191
+ const sdk = await index_1.FhirBundleSdk.create(fhir_bundles_1.validCompleteBundle);
192
+ const observations = sdk.getObservations();
193
+ expect(observations.length).toBeGreaterThan(0);
194
+ const observation = observations[0];
195
+ // Check the smart resource marker
196
+ expect(observation.__isSmartResource).toBe(true);
197
+ });
198
+ });
199
+ });
200
+ //# sourceMappingURL=phase5-verification.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"phase5-verification.test.js","sourceRoot":"","sources":["../../src/__tests__/phase5-verification.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,245 @@
1
+ import { AllergyIntolerance, Bundle, BundleEntry, Composition, Condition, Coverage, DiagnosticReport, DocumentReference, Encounter, FamilyMemberHistory, Immunization, Location, Medication, MedicationAdministration, MedicationDispense, MedicationRequest, MedicationStatement, Observation, Organization, Patient, Practitioner, Procedure, RelatedPerson, Resource, RiskAssessment, ServiceRequest } from "@medplum/fhirtypes";
2
+ import { Smart } from "./types/smart-resources";
3
+ export { Smart } from "./types/smart-resources";
4
+ export { AllergyIntolerance, Bundle, Composition, Condition, Coverage, DiagnosticReport, DocumentReference, Encounter, FamilyMemberHistory, Immunization, Location, Medication, MedicationAdministration, MedicationDispense, MedicationRequest, MedicationStatement, Observation, Organization, Patient, Practitioner, Procedure, RelatedPerson, Resource, RiskAssessment, ServiceRequest, } from "@medplum/fhirtypes";
5
+ /**
6
+ * Validation result interface
7
+ */
8
+ export interface ValidationResult {
9
+ hasBrokenReferences: boolean;
10
+ brokenReferences: BrokenReference[];
11
+ }
12
+ /**
13
+ * Broken reference details interface
14
+ */
15
+ export interface BrokenReference {
16
+ sourceResourceId: string;
17
+ sourceResourceType: string;
18
+ referenceField: string;
19
+ reference: string;
20
+ }
21
+ /**
22
+ * Bundle diff result interface
23
+ */
24
+ export interface BundleDiffResult {
25
+ /** Resources that exist in both bundles */
26
+ common: FhirBundleSdk;
27
+ /** Resources that exist only in the base bundle (this bundle) */
28
+ baseOnly: FhirBundleSdk;
29
+ /** Resources that exist only in the parameter bundle */
30
+ parameterOnly: FhirBundleSdk;
31
+ }
32
+ /**
33
+ * FHIR Bundle SDK for parsing, querying, and manipulating FHIR bundles with reference resolution
34
+ */
35
+ export declare class FhirBundleSdk {
36
+ private bundle;
37
+ private resourcesById;
38
+ private resourcesByFullUrl;
39
+ private resourcesByType;
40
+ private smartResourceCache;
41
+ private smartResourceArrayCache;
42
+ private resolutionStack;
43
+ /**
44
+ * Configuration for dynamically generated resource getter methods.
45
+ *
46
+ * Each entry in this array automatically generates both single and collection getter methods.
47
+ *
48
+ * **Example:**
49
+ * ```typescript
50
+ * {
51
+ * resourceType: 'Patient',
52
+ * singleGetterMethodName: 'getPatientById',
53
+ * collectionGetterMethodName: 'getPatients'
54
+ * }
55
+ * ```
56
+ *
57
+ * **Generates the equivalent of:**
58
+ * ```typescript
59
+ * // Single resource getter
60
+ * getPatientById(id: string): Smart<Patient> | undefined {
61
+ * return this.getResourceByIdAndType<Patient>(id, 'Patient');
62
+ * }
63
+ *
64
+ * // Collection getter
65
+ * getPatients(): Smart<Patient>[] {
66
+ * return this.getResourcesByType<Patient>('Patient');
67
+ * }
68
+ * ```
69
+ *
70
+ * **Usage:**
71
+ * ```typescript
72
+ * const sdk = await FhirBundleSdk.create(bundle);
73
+ * const patient = sdk.getPatientById('patient-123'); // Smart<Patient> | undefined
74
+ * const allPatients = sdk.getPatients(); // Smart<Patient>[]
75
+ * ```
76
+ *
77
+ * To add a new resource type, simply add a new entry to this array and declare
78
+ * the corresponding method signatures in the class body.
79
+ */
80
+ private static readonly RESOURCE_METHODS;
81
+ private constructor();
82
+ get total(): number;
83
+ get entry(): BundleEntry[];
84
+ toObject(): Bundle;
85
+ /**
86
+ * Create a new FhirBundleSdk instance (async for backwards compatibility)
87
+ * FR-1.2: Validate bundle resourceType
88
+ */
89
+ static create(bundle: Bundle): Promise<FhirBundleSdk>;
90
+ /**
91
+ * Create a new FhirBundleSdk instance synchronously
92
+ * FR-1.2: Validate bundle resourceType
93
+ */
94
+ static createSync(bundle: Bundle): FhirBundleSdk;
95
+ /**
96
+ * Build O(1) indexes for resource lookup
97
+ */
98
+ private buildResourceIndexes;
99
+ /**
100
+ * Create a smart resource with reference resolution methods
101
+ * FR-5.1: Resources returned by SDK have additional getter methods for each Reference field
102
+ * FR-5.7: Reference resolution operates in O(1) time complexity per reference
103
+ * FR-5.8: Original reference fields remain unchanged
104
+ */
105
+ private createSmartResource;
106
+ /**
107
+ * Resolve a reference method call to actual resources
108
+ * FR-5.2-5.6: Handle different reference types and patterns
109
+ */
110
+ private resolveReference;
111
+ /**
112
+ * Resolve a single reference object to a resource
113
+ * FR-5.5: Reference resolution methods handle both resource.id and fullUrl matching
114
+ */
115
+ private resolveReferenceObject;
116
+ /**
117
+ * Check if a reference field expects an array of references
118
+ */
119
+ private isArrayReferenceField;
120
+ /**
121
+ * Find all Reference fields in a resource recursively
122
+ */
123
+ private findAllReferences;
124
+ /**
125
+ * Check if a reference can be resolved within the bundle
126
+ */
127
+ private canResolveReference;
128
+ /**
129
+ * FR-2.1: Validate all references in the bundle
130
+ * FR-2.2: Identifies references by Resource/id pattern and fullUrl references
131
+ * FR-2.3: Handles both relative and absolute references
132
+ * FR-2.4: Returns validation result with broken reference details
133
+ */
134
+ lookForBrokenReferences(): ValidationResult;
135
+ /**
136
+ * FR-3.1: Get resource by ID with type parameter support
137
+ * FR-3.2: Method searches both resource.id and entry.fullUrl for matches
138
+ * FR-3.4: Method returns undefined if resource not found
139
+ * FR-3.5: Lookup operates in O(1) time complexity
140
+ * FR-5.1: Returns smart resource with reference resolution methods
141
+ */
142
+ getResourceById<T extends Resource>(id: string): Smart<T> | undefined;
143
+ /**
144
+ * Generic helper method to get a resource by ID with type validation
145
+ */
146
+ private getResourceByIdAndType;
147
+ getPatientById: (id: string) => Smart<Patient> | undefined;
148
+ getObservationById: (id: string) => Smart<Observation> | undefined;
149
+ getEncounterById: (id: string) => Smart<Encounter> | undefined;
150
+ getAllergyIntoleranceById: (id: string) => Smart<AllergyIntolerance> | undefined;
151
+ getConditionById: (id: string) => Smart<Condition> | undefined;
152
+ getOrganizationById: (id: string) => Smart<Organization> | undefined;
153
+ getLocationById: (id: string) => Smart<Location> | undefined;
154
+ getPractitionerById: (id: string) => Smart<Practitioner> | undefined;
155
+ getDiagnosticReportById: (id: string) => Smart<DiagnosticReport> | undefined;
156
+ getCompositionById: (id: string) => Smart<Composition> | undefined;
157
+ getCoverageById: (id: string) => Smart<Coverage> | undefined;
158
+ getDocumentReferenceById: (id: string) => Smart<DocumentReference> | undefined;
159
+ getImmunizationById: (id: string) => Smart<Immunization> | undefined;
160
+ getMedicationById: (id: string) => Smart<Medication> | undefined;
161
+ getMedicationRequestById: (id: string) => Smart<MedicationRequest> | undefined;
162
+ getProcedureById: (id: string) => Smart<Procedure> | undefined;
163
+ getFamilyMemberHistoryById: (id: string) => Smart<FamilyMemberHistory> | undefined;
164
+ getMedicationAdministrationById: (id: string) => Smart<MedicationAdministration> | undefined;
165
+ getMedicationDispenseById: (id: string) => Smart<MedicationDispense> | undefined;
166
+ getMedicationStatementById: (id: string) => Smart<MedicationStatement> | undefined;
167
+ getRelatedPersonById: (id: string) => Smart<RelatedPerson> | undefined;
168
+ getRiskAssessmentById: (id: string) => Smart<RiskAssessment> | undefined;
169
+ getServiceRequestById: (id: string) => Smart<ServiceRequest> | undefined;
170
+ /**
171
+ * Generic helper method to get all resources of a specific type
172
+ * FR-10.1: Returns references to cached objects, not copies
173
+ */
174
+ private getResourcesByType;
175
+ getPatients: () => Smart<Patient>[];
176
+ getObservations: () => Smart<Observation>[];
177
+ getEncounters: () => Smart<Encounter>[];
178
+ getPractitioners: () => Smart<Practitioner>[];
179
+ getDiagnosticReports: () => Smart<DiagnosticReport>[];
180
+ getAllergyIntolerances: () => Smart<AllergyIntolerance>[];
181
+ getConditions: () => Smart<Condition>[];
182
+ getOrganizations: () => Smart<Organization>[];
183
+ getLocations: () => Smart<Location>[];
184
+ getCompositions: () => Smart<Composition>[];
185
+ getCoverages: () => Smart<Coverage>[];
186
+ getDocumentReferences: () => Smart<DocumentReference>[];
187
+ getImmunizations: () => Smart<Immunization>[];
188
+ getMedications: () => Smart<Medication>[];
189
+ getMedicationRequests: () => Smart<MedicationRequest>[];
190
+ getProcedures: () => Smart<Procedure>[];
191
+ getFamilyMemberHistories: () => Smart<FamilyMemberHistory>[];
192
+ getMedicationAdministrations: () => Smart<MedicationAdministration>[];
193
+ getMedicationDispenses: () => Smart<MedicationDispense>[];
194
+ getMedicationStatements: () => Smart<MedicationStatement>[];
195
+ getRelatedPersons: () => Smart<RelatedPerson>[];
196
+ getRiskAssessments: () => Smart<RiskAssessment>[];
197
+ getServiceRequests: () => Smart<ServiceRequest>[];
198
+ /**
199
+ * Create a new bundle entry from an existing entry, preserving fullUrl
200
+ */
201
+ private createBundleEntry;
202
+ /**
203
+ * Create a new bundle with specified entries, maintaining original metadata
204
+ */
205
+ private createExportBundle;
206
+ /**
207
+ * Find original bundle entry for a given resource
208
+ */
209
+ private findOriginalEntry;
210
+ /**
211
+ * FR-6.1: Export subset of resources by their IDs
212
+ * FR-6.4: Exported bundles maintain original bundle metadata but update total count
213
+ * FR-6.5: Exported bundles include only resources that exist in the original bundle
214
+ * FR-6.6: Exported bundles preserve original entry.fullUrl values
215
+ */
216
+ exportSubset(resourceIds: string[]): Bundle;
217
+ /**
218
+ * FR-6.2: Export all resources of a specific type
219
+ * FR-6.4: Exported bundles maintain original bundle metadata but update total count
220
+ * FR-6.6: Exported bundles preserve original entry.fullUrl values
221
+ */
222
+ exportByType(resourceType: string): Bundle;
223
+ /**
224
+ * FR-6.3: Export all resources of specified types
225
+ * FR-6.4: Exported bundles maintain original bundle metadata but update total count
226
+ * FR-6.6: Exported bundles preserve original entry.fullUrl values
227
+ */
228
+ exportByTypes(resourceTypes: string[]): Bundle;
229
+ /**
230
+ * Concatenate entries from another FhirBundleSdk with this bundle
231
+ * Returns a new bundle with combined entries while preserving original metadata
232
+ */
233
+ concatEntries(otherSdk: FhirBundleSdk): Promise<FhirBundleSdk>;
234
+ /**
235
+ * Diff this bundle with another FHIR Bundle by comparing resource ids.
236
+ * Returns three FhirBundleSdk instances: common, baseOnly, parameterOnly.
237
+ */
238
+ diff(other: Bundle): Promise<BundleDiffResult>;
239
+ /**
240
+ * Diff this bundle with another FhirBundleSdk by comparing resource ids.
241
+ * Returns three FhirBundleSdk instances: common, baseOnly, parameterOnly.
242
+ */
243
+ diff(other: FhirBundleSdk): Promise<BundleDiffResult>;
244
+ }
245
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}