@metriport/fhir-sdk 2.0.0 → 2.0.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.
- package/dist/__tests__/contained-references.test.js +1 -1
- package/dist/__tests__/contained-references.test.js.map +1 -1
- package/dist/__tests__/date-range-performance.test.js.map +1 -1
- package/dist/__tests__/date-range-search.test.js.map +1 -1
- package/dist/__tests__/env-setup.js +17 -7
- package/dist/__tests__/env-setup.js.map +1 -1
- package/dist/__tests__/fhir-bundle-sdk.test.js +21 -13
- package/dist/__tests__/fhir-bundle-sdk.test.js.map +1 -1
- package/dist/__tests__/fixtures/fhir-bundles.d.ts +6 -0
- package/dist/__tests__/fixtures/fhir-bundles.d.ts.map +1 -1
- package/dist/__tests__/fixtures/fhir-bundles.js +106 -2
- package/dist/__tests__/fixtures/fhir-bundles.js.map +1 -1
- package/dist/__tests__/keep-virtual-methods-invisible.test.d.ts +2 -0
- package/dist/__tests__/keep-virtual-methods-invisible.test.d.ts.map +1 -0
- package/dist/__tests__/keep-virtual-methods-invisible.test.js +62 -0
- package/dist/__tests__/keep-virtual-methods-invisible.test.js.map +1 -0
- package/dist/__tests__/phase3-verification.test.js.map +1 -1
- package/dist/__tests__/phase4-verification.test.js.map +1 -1
- package/dist/__tests__/phase5-verification.test.js.map +1 -1
- package/dist/__tests__/reverse-references.test.js.map +1 -1
- package/dist/__tests__/serialize-to-yaml.test.d.ts +2 -0
- package/dist/__tests__/serialize-to-yaml.test.d.ts.map +1 -0
- package/dist/__tests__/serialize-to-yaml.test.js +191 -0
- package/dist/__tests__/serialize-to-yaml.test.js.map +1 -0
- package/dist/clinical-dates.js +1 -2
- package/dist/clinical-dates.js.map +1 -1
- package/dist/fhir-bundle-sdk.d.ts.map +1 -1
- package/dist/fhir-bundle-sdk.js +1 -1
- package/dist/fhir-bundle-sdk.js.map +1 -1
- package/dist/internal/bundle-operations.js +3 -4
- package/dist/internal/bundle-operations.js.map +1 -1
- package/dist/internal/coding-systems.d.ts.map +1 -1
- package/dist/internal/coding-systems.js.map +1 -1
- package/dist/internal/coding-utilities.d.ts.map +1 -1
- package/dist/internal/coding-utilities.js +7 -51
- package/dist/internal/coding-utilities.js.map +1 -1
- package/dist/internal/date-extraction.js +2 -3
- package/dist/internal/date-extraction.js.map +1 -1
- package/dist/internal/graph-traversal.js +1 -2
- package/dist/internal/graph-traversal.js.map +1 -1
- package/dist/internal/indexing.js +3 -4
- package/dist/internal/indexing.js.map +1 -1
- package/dist/internal/llm-context.d.ts +5 -0
- package/dist/internal/llm-context.d.ts.map +1 -1
- package/dist/internal/llm-context.js +74 -12
- package/dist/internal/llm-context.js.map +1 -1
- package/dist/internal/reference-resolution.d.ts +3 -3
- package/dist/internal/reference-resolution.d.ts.map +1 -1
- package/dist/internal/reference-resolution.js +22 -42
- package/dist/internal/reference-resolution.js.map +1 -1
- package/dist/internal/reference-utils.d.ts +7 -2
- package/dist/internal/reference-utils.d.ts.map +1 -1
- package/dist/internal/reference-utils.js +32 -7
- package/dist/internal/reference-utils.js.map +1 -1
- package/dist/internal/serialize-to-yaml.d.ts +2 -0
- package/dist/internal/serialize-to-yaml.d.ts.map +1 -0
- package/dist/internal/serialize-to-yaml.js +93 -0
- package/dist/internal/serialize-to-yaml.js.map +1 -0
- package/dist/internal/transparent-proxy.js +1 -2
- package/dist/internal/transparent-proxy.js.map +1 -1
- package/dist/internal/validation.js +2 -3
- package/dist/internal/validation.js.map +1 -1
- package/dist/type-guards.js +52 -54
- package/dist/type-guards.js.map +1 -1
- package/dist/types/sdk-types.d.ts +3 -3
- package/dist/types/sdk-types.d.ts.map +1 -1
- package/dist/types/sdk-types.js +1 -2
- package/dist/types/sdk-types.js.map +1 -1
- package/dist/types/smart-resources.d.ts +13 -1
- package/dist/types/smart-resources.d.ts.map +1 -1
- package/dist/types/smart-resources.js +12 -6
- package/dist/types/smart-resources.js.map +1 -1
- package/dist/utils/interval-tree/index.d.ts.map +1 -1
- package/dist/utils/interval-tree/index.js.map +1 -1
- package/dist/utils/interval-tree/shallowequal/arrays.js +1 -1
- package/dist/utils/interval-tree/shallowequal/arrays.js.map +1 -1
- package/dist/utils/interval-tree/shallowequal/index.js +2 -2
- package/dist/utils/interval-tree/shallowequal/index.js.map +1 -1
- package/dist/utils/interval-tree/shallowequal/objects.js +1 -1
- package/dist/utils/interval-tree/shallowequal/objects.js.map +1 -1
- package/package.json +11 -10
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.buildResourceIndexes = buildResourceIndexes;
|
|
4
|
+
exports.buildReverseReferenceIndex = buildReverseReferenceIndex;
|
|
5
|
+
exports.buildDateRangeIndex = buildDateRangeIndex;
|
|
4
6
|
const reference_utils_1 = require("./reference-utils");
|
|
5
7
|
const date_extraction_1 = require("./date-extraction");
|
|
6
8
|
/**
|
|
@@ -38,7 +40,6 @@ function buildResourceIndexes(bundle, resourcesById, resourcesByFullUrl, resourc
|
|
|
38
40
|
// Clear resolution stack after index building
|
|
39
41
|
resolutionStack.clear();
|
|
40
42
|
}
|
|
41
|
-
exports.buildResourceIndexes = buildResourceIndexes;
|
|
42
43
|
/**
|
|
43
44
|
* Build reverse reference index for O(1) reverse lookup
|
|
44
45
|
*/
|
|
@@ -95,7 +96,6 @@ function buildReverseReferenceIndex(bundle, reverseReferencesById, resourcesByFu
|
|
|
95
96
|
}
|
|
96
97
|
}
|
|
97
98
|
}
|
|
98
|
-
exports.buildReverseReferenceIndex = buildReverseReferenceIndex;
|
|
99
99
|
/**
|
|
100
100
|
* Build date range index for O(log n + k) date range searches
|
|
101
101
|
*/
|
|
@@ -125,5 +125,4 @@ function buildDateRangeIndex(bundle, dateRangeIndex) {
|
|
|
125
125
|
}
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
|
-
exports.buildDateRangeIndex = buildDateRangeIndex;
|
|
129
128
|
//# sourceMappingURL=indexing.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"indexing.js","sourceRoot":"","sources":["../../src/internal/indexing.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"indexing.js","sourceRoot":"","sources":["../../src/internal/indexing.ts"],"names":[],"mappings":";;;;;AAIA,uDAI2B;AAC3B,uDAAqE;AAErE;;GAEG;AACH,8BACE,MAAc,EACd,aAAoC,EACpC,kBAAyC,EACzC,eAAwC,EACxC,qBAAsD,EACtD,cAAqD,EACrD,eAA4B;IAE5B,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpB,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAEhC,oCAAoC;QACpC,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YAChB,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QAC3C,CAAC;QAED,gCAAgC;QAChC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAClD,CAAC;QAED,mDAAmD;QACnD,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC;QAC3C,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACvC,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;QACxC,CAAC;QACD,oEAAoE;QACpE,eAAe,CAAC,GAAG,CAAC,YAAY,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpD,CAAC;IAED,gCAAgC;IAChC,0BAA0B,CAAC,MAAM,EAAE,qBAAqB,EAAE,kBAAkB,CAAC,CAAC;IAE9E,yBAAyB;IACzB,mBAAmB,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAE5C,8CAA8C;IAC9C,eAAe,CAAC,KAAK,EAAE,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,oCACE,MAAc,EACd,qBAAsD,EACtD,kBAAyC;IAEzC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpB,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAChC,MAAM,gBAAgB,GAAG,QAAQ,CAAC,EAAE,IAAI,KAAK,CAAC,OAAO,IAAI,SAAS,CAAC;QACnE,MAAM,UAAU,GAAG,IAAA,mCAAiB,EAAC,QAAQ,CAAC,CAAC;QAE/C,KAAK,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,UAAU,EAAE,CAAC;YAC9C,mCAAmC;YACnC,MAAM,QAAQ,GAAG,IAAA,8CAA4B,EAAC,SAAS,CAAC,CAAC;YACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,SAAS;YACX,CAAC;YAED,wEAAwE;YACxE,MAAM,UAAU,GAAqB;gBACnC,gBAAgB;gBAChB,kBAAkB,EAAE,QAAQ,CAAC,YAAY;gBACzC,cAAc,EAAE,IAAA,yCAAuB,EAAC,KAAK,CAAC;aAC/C,CAAC;YAEF,kFAAkF;YAClF,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;YAC1C,CAAC;YACD,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YAEtD,gFAAgF;YAChF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC3B,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC1C,qBAAqB,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;gBAC3C,CAAC;gBACD,qBAAqB,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;YACzD,CAAC;YAED,4EAA4E;YAC5E,4EAA4E;YAC5E,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC7B,4DAA4D;gBAC5D,gDAAgD;gBAChD,MAAM,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBACzD,IACE,cAAc,EAAE,EAAE;oBAClB,cAAc,CAAC,EAAE,KAAK,QAAQ;oBAC9B,cAAc,CAAC,EAAE,KAAK,SAAS,EAC/B,CAAC;oBACD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,CAAC;wBAClD,qBAAqB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBACnD,CAAC;oBACD,qBAAqB,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,6BACE,MAAc,EACd,cAAqD;IAErD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YAC1C,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;QAChC,MAAM,aAAa,GAAG,IAAA,kDAAgC,EAAC,QAAQ,CAAC,CAAC;QAEjE,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;YACrC,IAAI,CAAC;gBACH,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAClC,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,wCAAwC;gBACxC,OAAO,CAAC,IAAI,CACV,kCAAkC,QAAQ,CAAC,GAAG,KAAK,QAAQ,CAAC,IAAI,gCAAgC,CACjG,CAAC;gBACF,cAAc,CAAC,MAAM,CAAC;oBACpB,GAAG,QAAQ;oBACX,GAAG,EAAE,QAAQ,CAAC,IAAI;oBAClB,IAAI,EAAE,QAAQ,CAAC,GAAG;iBACnB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -8,6 +8,11 @@ import { LLMContextOptions, WalkResult } from "../types/sdk-types";
|
|
|
8
8
|
* Returns an immutable copy without mutating the original.
|
|
9
9
|
*/
|
|
10
10
|
export declare function stripNonClinicalData<T extends Resource>(resource: T): T;
|
|
11
|
+
/**
|
|
12
|
+
* Format a Smart resource and its referenced resources as inline-nested YAML.
|
|
13
|
+
* Referenced resources are expanded directly within the parent resource up to maxDepth.
|
|
14
|
+
*/
|
|
15
|
+
export declare function formatAsYaml<T extends Resource>(startResource: Smart<T>, maxDepth: number): string;
|
|
11
16
|
/**
|
|
12
17
|
* Group resources by their resource type
|
|
13
18
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-context.d.ts","sourceRoot":"","sources":["../../src/internal/llm-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAA4B,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"llm-context.d.ts","sourceRoot":"","sources":["../../src/internal/llm-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAA4B,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAwBnE;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,SAAS,QAAQ,EAAE,QAAQ,EAAE,CAAC,GAAG,CAAC,CAkCvE;AAsED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,QAAQ,EAC7C,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,EACvB,QAAQ,EAAE,MAAM,GACf,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,CAetF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CA0C/D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM,CAmCxF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM,CAc9E;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,QAAQ,EACnD,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,EACvB,OAAO,EAAE,iBAAiB,GAAG,SAAS,EACtC,gBAAgB,EAAE,CAChB,aAAa,EAAE,KAAK,CAAC,CAAC,CAAC,EACvB,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,oBAAoB,EAAE,OAAO,CAAA;CAAE,KACzD,UAAU,CAAC,CAAC,CAAC,GACjB,MAAM,CAyCR"}
|
|
@@ -1,7 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.stripNonClinicalData = stripNonClinicalData;
|
|
4
|
+
exports.formatAsYaml = formatAsYaml;
|
|
5
|
+
exports.groupResourcesByType = groupResourcesByType;
|
|
6
|
+
exports.formatResourceAsText = formatResourceAsText;
|
|
7
|
+
exports.formatAsStructuredText = formatAsStructuredText;
|
|
8
|
+
exports.formatAsJSON = formatAsJSON;
|
|
9
|
+
exports.generateLLMContext = generateLLMContext;
|
|
4
10
|
const smart_resources_1 = require("../types/smart-resources");
|
|
11
|
+
const serialize_to_yaml_1 = require("./serialize-to-yaml");
|
|
5
12
|
/**
|
|
6
13
|
* Build a set of all reference field names from REFERENCE_METHOD_MAPPING.
|
|
7
14
|
* Extracts base field names, handling nested paths (e.g., "participant.individual" -> "participant")
|
|
@@ -56,7 +63,66 @@ function stripNonClinicalData(resource) {
|
|
|
56
63
|
}
|
|
57
64
|
return deepCloneAndStrip(resource, resource.resourceType);
|
|
58
65
|
}
|
|
59
|
-
|
|
66
|
+
const NOISE_FIELDS = new Set(["meta", "extension", "modifierExtension", "text", "identifier"]);
|
|
67
|
+
/**
|
|
68
|
+
* Recursively build a nested plain object from a Smart resource, replacing top-level
|
|
69
|
+
* reference fields with the resolved resource data up to maxDepth.
|
|
70
|
+
* Nested reference paths (e.g. "participant.individual") are kept as raw Reference values.
|
|
71
|
+
* Cycle detection prevents infinite loops via a path-scoped visited set.
|
|
72
|
+
*/
|
|
73
|
+
function buildNestedResource(smartResource, depth, maxDepth, visited) {
|
|
74
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
75
|
+
const plain = smartResource.toJSON();
|
|
76
|
+
const id = plain.id;
|
|
77
|
+
if (id && visited.has(id)) {
|
|
78
|
+
return { resourceType: plain.resourceType, id };
|
|
79
|
+
}
|
|
80
|
+
const nextVisited = new Set(visited);
|
|
81
|
+
if (id)
|
|
82
|
+
nextVisited.add(id);
|
|
83
|
+
const referenceMethods = smart_resources_1.REFERENCE_METHOD_MAPPING[plain.resourceType] ?? {};
|
|
84
|
+
const directRefFields = {};
|
|
85
|
+
for (const [methodName, fieldPath] of Object.entries(referenceMethods)) {
|
|
86
|
+
if (!fieldPath.includes(".")) {
|
|
87
|
+
directRefFields[fieldPath] = methodName;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
const result = {};
|
|
91
|
+
for (const [key, value] of Object.entries(plain)) {
|
|
92
|
+
if (NOISE_FIELDS.has(key))
|
|
93
|
+
continue;
|
|
94
|
+
const methodName = directRefFields[key];
|
|
95
|
+
if (methodName !== undefined && depth < maxDepth) {
|
|
96
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
97
|
+
const resolved = smartResource[methodName]();
|
|
98
|
+
if (resolved !== undefined && resolved !== null) {
|
|
99
|
+
if (Array.isArray(resolved)) {
|
|
100
|
+
const inlined = resolved
|
|
101
|
+
.filter((r) => r !== undefined && r !== null)
|
|
102
|
+
.map(r => buildNestedResource(r, depth + 1, maxDepth, nextVisited));
|
|
103
|
+
if (inlined.length > 0) {
|
|
104
|
+
result[key] = inlined;
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
result[key] = buildNestedResource(resolved, depth + 1, maxDepth, nextVisited);
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
result[key] = JSON.parse(JSON.stringify(value));
|
|
115
|
+
}
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Format a Smart resource and its referenced resources as inline-nested YAML.
|
|
120
|
+
* Referenced resources are expanded directly within the parent resource up to maxDepth.
|
|
121
|
+
*/
|
|
122
|
+
function formatAsYaml(startResource, maxDepth) {
|
|
123
|
+
const nested = buildNestedResource(startResource, 0, maxDepth, new Set());
|
|
124
|
+
return (0, serialize_to_yaml_1.serializeToYaml)(nested);
|
|
125
|
+
}
|
|
60
126
|
/**
|
|
61
127
|
* Group resources by their resource type
|
|
62
128
|
*/
|
|
@@ -74,7 +140,6 @@ function groupResourcesByType(resources) {
|
|
|
74
140
|
}
|
|
75
141
|
return grouped;
|
|
76
142
|
}
|
|
77
|
-
exports.groupResourcesByType = groupResourcesByType;
|
|
78
143
|
/**
|
|
79
144
|
* Format a single resource as readable text
|
|
80
145
|
*/
|
|
@@ -115,7 +180,6 @@ function formatResourceAsText(resource) {
|
|
|
115
180
|
}
|
|
116
181
|
return lines.join("\n");
|
|
117
182
|
}
|
|
118
|
-
exports.formatResourceAsText = formatResourceAsText;
|
|
119
183
|
/**
|
|
120
184
|
* Format resources as structured text for better LLM readability
|
|
121
185
|
*/
|
|
@@ -125,7 +189,6 @@ function formatAsStructuredText(resourcesByDepth) {
|
|
|
125
189
|
const primaryResources = resourcesByDepth.get(0) ?? [];
|
|
126
190
|
if (primaryResources.length > 0) {
|
|
127
191
|
lines.push("PRIMARY RESOURCE:");
|
|
128
|
-
lines.push("=".repeat(80));
|
|
129
192
|
for (const resource of primaryResources) {
|
|
130
193
|
lines.push(formatResourceAsText(resource));
|
|
131
194
|
lines.push("");
|
|
@@ -137,11 +200,10 @@ function formatAsStructuredText(resourcesByDepth) {
|
|
|
137
200
|
continue; // Already handled above
|
|
138
201
|
const depthLabel = depth === 1 ? "DIRECTLY REFERENCED" : `INDIRECTLY REFERENCED (Depth ${depth})`;
|
|
139
202
|
lines.push(`${depthLabel} RESOURCES:`);
|
|
140
|
-
lines.push("=".repeat(80));
|
|
141
203
|
// Group by resource type for better organization
|
|
142
204
|
const groupedByType = groupResourcesByType(resources);
|
|
143
205
|
for (const [resourceType, typeResources] of Object.entries(groupedByType)) {
|
|
144
|
-
lines.push(`\n
|
|
206
|
+
lines.push(`\n${resourceType} (${typeResources.length})\n`);
|
|
145
207
|
for (const resource of typeResources) {
|
|
146
208
|
lines.push(formatResourceAsText(resource));
|
|
147
209
|
lines.push("");
|
|
@@ -150,7 +212,6 @@ function formatAsStructuredText(resourcesByDepth) {
|
|
|
150
212
|
}
|
|
151
213
|
return lines.join("\n");
|
|
152
214
|
}
|
|
153
|
-
exports.formatAsStructuredText = formatAsStructuredText;
|
|
154
215
|
/**
|
|
155
216
|
* Format resources as JSON with depth annotations
|
|
156
217
|
*/
|
|
@@ -167,7 +228,6 @@ function formatAsJSON(resourcesByDepth) {
|
|
|
167
228
|
};
|
|
168
229
|
return JSON.stringify(output, null, 2);
|
|
169
230
|
}
|
|
170
|
-
exports.formatAsJSON = formatAsJSON;
|
|
171
231
|
/**
|
|
172
232
|
* Generate LLM-friendly context from a starting resource and its related resources.
|
|
173
233
|
* Uses BFS to discover related resources, strips non-clinical data, and formats output.
|
|
@@ -178,9 +238,12 @@ exports.formatAsJSON = formatAsJSON;
|
|
|
178
238
|
* @returns Formatted string suitable for LLM context
|
|
179
239
|
*/
|
|
180
240
|
function generateLLMContext(startResource, options, walkReferencesFn) {
|
|
181
|
-
const maxDepth = options?.maxDepth ??
|
|
241
|
+
const maxDepth = options?.maxDepth ?? 1;
|
|
182
242
|
const includeStartResource = options?.includeStartResource ?? true;
|
|
183
|
-
const format = options?.format ?? "
|
|
243
|
+
const format = options?.format ?? "yaml";
|
|
244
|
+
if (format === "yaml") {
|
|
245
|
+
return formatAsYaml(startResource, maxDepth);
|
|
246
|
+
}
|
|
184
247
|
// Walk the reference graph
|
|
185
248
|
const walkResult = walkReferencesFn(startResource, {
|
|
186
249
|
maxDepth,
|
|
@@ -210,5 +273,4 @@ function generateLLMContext(startResource, options, walkReferencesFn) {
|
|
|
210
273
|
return formatAsStructuredText(cleanedResourcesByDepth);
|
|
211
274
|
}
|
|
212
275
|
}
|
|
213
|
-
exports.generateLLMContext = generateLLMContext;
|
|
214
276
|
//# sourceMappingURL=llm-context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"llm-context.js","sourceRoot":"","sources":["../../src/internal/llm-context.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"llm-context.js","sourceRoot":"","sources":["../../src/internal/llm-context.ts"],"names":[],"mappings":";;;;;;;;;AACA,8DAA2E;AAE3E,2DAAsD;AAEtD;;;GAGG;AACH,SAAS,sBAAsB;IAC7B,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,KAAK,MAAM,eAAe,IAAI,MAAM,CAAC,MAAM,CAAC,0CAAwB,CAAC,EAAE,CAAC;QACtE,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;YACvD,4CAA4C;YAC5C,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnC,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;gBAC5B,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,gBAAgB,GAAG,sBAAsB,EAAE,CAAC;AAElD;;;;;GAKG;AACH,8BAAyD,QAAW;IAClE,SAAS,iBAAiB,CAAC,GAAY,EAAE,YAAqB;QAC5D,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,GAAG,CAAC;QACb,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YACvB,OAAO,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;QAChE,CAAC;QAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,MAAM,GAA4B,EAAE,CAAC;YAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC/C,8DAA8D;gBAC9D,IACE,GAAG,KAAK,MAAM;oBACd,GAAG,KAAK,WAAW;oBACnB,GAAG,KAAK,mBAAmB;oBAC3B,GAAG,KAAK,MAAM;oBACd,GAAG,KAAK,IAAI;oBACZ,GAAG,KAAK,YAAY;oBACpB,gBAAgB,CAAC,GAAG,CAAC,GAAG,CAAC,EACzB,CAAC;oBACD,SAAS;gBACX,CAAC;gBACD,MAAM,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;YACvD,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,GAAG,CAAC;IACb,CAAC;IAED,OAAO,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,CAAC,YAAY,CAAM,CAAC;AACjE,CAAC;AAED,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;AAE/F;;;;;GAKG;AACH,SAAS,mBAAmB,CAC1B,aAA8B,EAC9B,KAAa,EACb,QAAgB,EAChB,OAAoB;IAEpB,8DAA8D;IAC9D,MAAM,KAAK,GAAI,aAAqB,CAAC,MAAM,EAAc,CAAC;IAC1D,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;IAEpB,IAAI,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,YAAY,EAAE,KAAK,CAAC,YAAY,EAAE,EAAE,EAAE,CAAC;IAClD,CAAC;IACD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,EAAE;QAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAE5B,MAAM,gBAAgB,GAAG,0CAAwB,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IAC5E,MAAM,eAAe,GAA2B,EAAE,CAAC;IACnD,KAAK,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,gBAAgB,CAAC,EAAE,CAAC;QACvE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,eAAe,CAAC,SAAS,CAAC,GAAG,UAAU,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACjD,IAAI,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,SAAS;QAEpC,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,UAAU,KAAK,SAAS,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;YACjD,8DAA8D;YAC9D,MAAM,QAAQ,GAAI,aAAqB,CAAC,UAAU,CAAC,EAAE,CAAC;YACtD,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBAChD,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5B,MAAM,OAAO,GAAG,QAAQ;yBACrB,MAAM,CAAC,CAAC,CAAC,EAAwB,EAAE,CAAC,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC;yBAClE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,mBAAmB,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC;oBACtE,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;wBACvB,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;wBACtB,SAAS;oBACX,CAAC;gBACH,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,GAAG,CAAC,GAAG,mBAAmB,CAC/B,QAA2B,EAC3B,KAAK,GAAG,CAAC,EACT,QAAQ,EACR,WAAW,CACZ,CAAC;oBACF,SAAS;gBACX,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,sBACE,aAAuB,EACvB,QAAgB;IAEhB,MAAM,MAAM,GAAG,mBAAmB,CAAC,aAAa,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;IAC1E,OAAO,IAAA,mCAAe,EAAC,MAAM,CAAC,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,8BAAqC,SAAqB;IACxD,MAAM,OAAO,GAA+B,EAAE,CAAC;IAE/C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC;QACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACrB,CAAC;QACD,MAAM,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;QACpC,IAAI,aAAa,EAAE,CAAC;YAClB,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,8BAAqC,QAAkB;IACrD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,UAAU,QAAQ,CAAC,YAAY,SAAS,QAAQ,CAAC,EAAE,IAAI,SAAS,GAAG,CAAC,CAAC;IAEhF,SAAS,WAAW,CAAC,KAAc,EAAE,MAAM,GAAG,CAAC;QAC7C,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,MAAM,GAAa,EAAE,CAAC;QAE5B,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,CAAC,GAAG,MAAM,QAAQ,CAAC,CAAC;QAC7B,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,CAAC,GAAG,MAAM,IAAI,CAAC,CAAC;YACzB,CAAC;YACD,KAAK,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC;gBAC5C,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,KAAK,IAAI,CAAC,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC/C,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,oBAAoB;IACpB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;QACpD,IAAI,GAAG,KAAK,cAAc,IAAI,GAAG,KAAK,IAAI;YAAE,SAAS,CAAC,0BAA0B;QAChF,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,gCAAuC,gBAAyC;IAC9E,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,2BAA2B;IAC3B,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACvD,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChC,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE,CAAC;YACxC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5D,IAAI,KAAK,KAAK,CAAC;YAAE,SAAS,CAAC,wBAAwB;QAEnD,MAAM,UAAU,GACd,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,gCAAgC,KAAK,GAAG,CAAC;QACjF,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,aAAa,CAAC,CAAC;QAEvC,iDAAiD;QACjD,MAAM,aAAa,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC;QAEtD,KAAK,MAAM,CAAC,YAAY,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;YAC1E,KAAK,CAAC,IAAI,CAAC,KAAK,YAAY,KAAK,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC;YAE5D,KAAK,MAAM,QAAQ,IAAI,aAAa,EAAE,CAAC;gBACrC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC3C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACjB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,sBAA6B,gBAAyC;IACpE,MAAM,uBAAuB,GAA+B,EAAE,CAAC;IAE/D,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;QAC5D,IAAI,KAAK,KAAK,CAAC;YAAE,SAAS,CAAC,yCAAyC;QACpE,uBAAuB,CAAC,SAAS,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC;IACxD,CAAC;IAED,MAAM,MAAM,GAAG;QACb,eAAe,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7C,uBAAuB;KACxB,CAAC;IAEF,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACzC,CAAC;AAED;;;;;;;;GAQG;AACH,4BACE,aAAuB,EACvB,OAAsC,EACtC,gBAGkB;IAElB,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,CAAC,CAAC;IACxC,MAAM,oBAAoB,GAAG,OAAO,EAAE,oBAAoB,IAAI,IAAI,CAAC;IACnE,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,MAAM,CAAC;IAEzC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC/C,CAAC;IAED,2BAA2B;IAC3B,MAAM,UAAU,GAAG,gBAAgB,CAAC,aAAa,EAAE;QACjD,QAAQ;QACR,oBAAoB;KACrB,CAAC,CAAC;IAEH,oCAAoC;IACpC,OAAO,CAAC,GAAG,CAAC,6CAA6C,UAAU,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC;IAC3F,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;QACvE,OAAO,CAAC,GAAG,CAAC,uBAAuB,KAAK,KAAK,SAAS,CAAC,MAAM,YAAY,CAAC,CAAC;IAC7E,CAAC;IAED,6CAA6C;IAC7C,MAAM,uBAAuB,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC9D,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,UAAU,CAAC,gBAAgB,CAAC,OAAO,EAAE,EAAE,CAAC;QACvE,gDAAgD;QAChD,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;YACzC,SAAS;QACX,CAAC;QACD,uBAAuB,CAAC,GAAG,CACzB,KAAK;QACL,oEAAoE;QACpE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAwB,CAAC,CAAC,CACnE,CAAC;IACJ,CAAC;IAED,kCAAkC;IAClC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,OAAO,YAAY,CAAC,uBAAuB,CAAC,CAAC;IAC/C,CAAC;SAAM,CAAC;QACN,OAAO,sBAAsB,CAAC,uBAAuB,CAAC,CAAC;IACzD,CAAC;AACH,CAAC"}
|
|
@@ -13,17 +13,17 @@ export declare function isArrayReferenceField(fieldName: string): boolean;
|
|
|
13
13
|
* Resolve a single reference object to a resource
|
|
14
14
|
* FR-5.5: Reference resolution methods handle both resource.id and fullUrl matching
|
|
15
15
|
*/
|
|
16
|
-
export declare function resolveReferenceObject(referenceObj: unknown, resourcesById: Map<string, Resource>, resourcesByFullUrl: Map<string, Resource>, resolutionStack: Set<string
|
|
16
|
+
export declare function resolveReferenceObject(referenceObj: unknown, resourcesById: Map<string, Resource>, resourcesByFullUrl: Map<string, Resource>, resolutionStack: Set<string>, fragmentResolutionRoot: Resource): Resource | undefined;
|
|
17
17
|
/**
|
|
18
18
|
* Resolve a reference method call to actual resources
|
|
19
19
|
* FR-5.2-5.6: Handle different reference types and patterns
|
|
20
20
|
*/
|
|
21
|
-
export declare function resolveReference(methodName: string, resource: Resource, resourcesById: Map<string, Resource>, resourcesByFullUrl: Map<string, Resource>, resolutionStack: Set<string>, createSmartResourceFn: <T extends Resource>(resource: T) => Smart<T>): Smart<Resource> | Smart<Resource>[] | undefined;
|
|
21
|
+
export declare function resolveReference(methodName: string, resource: Resource, resourcesById: Map<string, Resource>, resourcesByFullUrl: Map<string, Resource>, resolutionStack: Set<string>, fragmentResolutionRoot: Resource, createSmartResourceFn: <T extends Resource>(resource: T) => Smart<T>): Smart<Resource> | Smart<Resource>[] | undefined;
|
|
22
22
|
/**
|
|
23
23
|
* Create a smart resource with reference resolution methods
|
|
24
24
|
* FR-5.1: Resources returned by SDK have additional getter methods for each Reference field
|
|
25
25
|
* FR-5.7: Reference resolution operates in O(1) time complexity per reference
|
|
26
26
|
* FR-5.8: Original reference fields remain unchanged
|
|
27
27
|
*/
|
|
28
|
-
export declare function createSmartResource<T extends Resource>(resource: T, smartResourceCache: WeakMap<Resource, Smart<Resource>>, resourcesById: Map<string, Resource>, resourcesByFullUrl: Map<string, Resource>, resolutionStack: Set<string>, getResourcesReferencingIdFn: (targetId: string, options?: ReverseReferenceOptions) => Smart<Resource>[]): Smart<T>;
|
|
28
|
+
export declare function createSmartResource<T extends Resource>(resource: T, smartResourceCache: WeakMap<Resource, Smart<Resource>>, resourcesById: Map<string, Resource>, resourcesByFullUrl: Map<string, Resource>, resolutionStack: Set<string>, getResourcesReferencingIdFn: (targetId: string, options?: ReverseReferenceOptions) => Smart<Resource>[], fragmentResolutionRoot: Resource): Smart<T>;
|
|
29
29
|
//# sourceMappingURL=reference-resolution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-resolution.d.ts","sourceRoot":"","sources":["../../src/internal/reference-resolution.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EACL,KAAK,EAIN,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"reference-resolution.d.ts","sourceRoot":"","sources":["../../src/internal/reference-resolution.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EACL,KAAK,EAIN,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AA4D7D;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAyChE;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,YAAY,EAAE,OAAO,EACrB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EACpC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EACzC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,EAC5B,sBAAsB,EAAE,QAAQ,GAC/B,QAAQ,GAAG,SAAS,CAuCtB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,QAAQ,EAClB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EACpC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EACzC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,EAC5B,sBAAsB,EAAE,QAAQ,EAChC,qBAAqB,EAAE,CAAC,CAAC,SAAS,QAAQ,EAAE,QAAQ,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,GACnE,KAAK,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,SAAS,CA4CjD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,QAAQ,EACpD,QAAQ,EAAE,CAAC,EACX,kBAAkB,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EACtD,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EACpC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EACzC,eAAe,EAAE,GAAG,CAAC,MAAM,CAAC,EAC5B,2BAA2B,EAAE,CAC3B,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,uBAAuB,KAC9B,KAAK,CAAC,QAAQ,CAAC,EAAE,EACtB,sBAAsB,EAAE,QAAQ,GAC/B,KAAK,CAAC,CAAC,CAAC,CA4LV"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.isArrayReferenceField = isArrayReferenceField;
|
|
4
|
+
exports.resolveReferenceObject = resolveReferenceObject;
|
|
5
|
+
exports.resolveReference = resolveReference;
|
|
6
|
+
exports.createSmartResource = createSmartResource;
|
|
4
7
|
const util_1 = require("util");
|
|
5
8
|
const smart_resources_1 = require("../types/smart-resources");
|
|
6
9
|
const coding_utilities_1 = require("./coding-utilities");
|
|
7
10
|
const transparent_proxy_1 = require("./transparent-proxy");
|
|
11
|
+
const reference_utils_1 = require("./reference-utils");
|
|
8
12
|
/**
|
|
9
13
|
* Navigate through a nested path in a resource to get the value at that path.
|
|
10
14
|
* Handles both simple paths ("subject") and nested paths ("diagnosis.condition").
|
|
@@ -94,12 +98,11 @@ function isArrayReferenceField(fieldName) {
|
|
|
94
98
|
}
|
|
95
99
|
return false;
|
|
96
100
|
}
|
|
97
|
-
exports.isArrayReferenceField = isArrayReferenceField;
|
|
98
101
|
/**
|
|
99
102
|
* Resolve a single reference object to a resource
|
|
100
103
|
* FR-5.5: Reference resolution methods handle both resource.id and fullUrl matching
|
|
101
104
|
*/
|
|
102
|
-
function resolveReferenceObject(referenceObj, resourcesById, resourcesByFullUrl, resolutionStack) {
|
|
105
|
+
function resolveReferenceObject(referenceObj, resourcesById, resourcesByFullUrl, resolutionStack, fragmentResolutionRoot) {
|
|
103
106
|
if (!referenceObj || typeof referenceObj !== "object" || !("reference" in referenceObj)) {
|
|
104
107
|
return undefined;
|
|
105
108
|
}
|
|
@@ -110,6 +113,12 @@ function resolveReferenceObject(referenceObj, resourcesById, resourcesByFullUrl,
|
|
|
110
113
|
}
|
|
111
114
|
resolutionStack.add(reference);
|
|
112
115
|
try {
|
|
116
|
+
if (reference.startsWith("#")) {
|
|
117
|
+
const fromContained = (0, reference_utils_1.resolveContainedReference)(fragmentResolutionRoot, reference);
|
|
118
|
+
if (fromContained) {
|
|
119
|
+
return fromContained;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
113
122
|
// Try to resolve by resource ID (e.g., "Patient/123")
|
|
114
123
|
if (reference.includes("/")) {
|
|
115
124
|
const [, resourceId] = reference.split("/");
|
|
@@ -127,12 +136,11 @@ function resolveReferenceObject(referenceObj, resourcesById, resourcesByFullUrl,
|
|
|
127
136
|
resolutionStack.delete(reference);
|
|
128
137
|
}
|
|
129
138
|
}
|
|
130
|
-
exports.resolveReferenceObject = resolveReferenceObject;
|
|
131
139
|
/**
|
|
132
140
|
* Resolve a reference method call to actual resources
|
|
133
141
|
* FR-5.2-5.6: Handle different reference types and patterns
|
|
134
142
|
*/
|
|
135
|
-
function resolveReference(methodName, resource, resourcesById, resourcesByFullUrl, resolutionStack, createSmartResourceFn) {
|
|
143
|
+
function resolveReference(methodName, resource, resourcesById, resourcesByFullUrl, resolutionStack, fragmentResolutionRoot, createSmartResourceFn) {
|
|
136
144
|
const referenceField = (0, smart_resources_1.getReferenceField)(methodName, resource.resourceType);
|
|
137
145
|
if (!referenceField) {
|
|
138
146
|
return undefined;
|
|
@@ -147,7 +155,7 @@ function resolveReference(methodName, resource, resourcesById, resourcesByFullUr
|
|
|
147
155
|
if (Array.isArray(referenceValue)) {
|
|
148
156
|
const resolvedResources = [];
|
|
149
157
|
for (const ref of referenceValue) {
|
|
150
|
-
const resolved = resolveReferenceObject(ref, resourcesById, resourcesByFullUrl, resolutionStack);
|
|
158
|
+
const resolved = resolveReferenceObject(ref, resourcesById, resourcesByFullUrl, resolutionStack, fragmentResolutionRoot);
|
|
151
159
|
if (resolved) {
|
|
152
160
|
resolvedResources.push(createSmartResourceFn(resolved));
|
|
153
161
|
}
|
|
@@ -155,21 +163,20 @@ function resolveReference(methodName, resource, resourcesById, resourcesByFullUr
|
|
|
155
163
|
return resolvedResources;
|
|
156
164
|
}
|
|
157
165
|
// Handle single reference - we know it's not an array at this point
|
|
158
|
-
const resolved = resolveReferenceObject(referenceValue, resourcesById, resourcesByFullUrl, resolutionStack);
|
|
166
|
+
const resolved = resolveReferenceObject(referenceValue, resourcesById, resourcesByFullUrl, resolutionStack, fragmentResolutionRoot);
|
|
159
167
|
if (resolved) {
|
|
160
168
|
// Type assertion is safe here because we've established this is the single reference path
|
|
161
169
|
return createSmartResourceFn(resolved);
|
|
162
170
|
}
|
|
163
171
|
return undefined;
|
|
164
172
|
}
|
|
165
|
-
exports.resolveReference = resolveReference;
|
|
166
173
|
/**
|
|
167
174
|
* Create a smart resource with reference resolution methods
|
|
168
175
|
* FR-5.1: Resources returned by SDK have additional getter methods for each Reference field
|
|
169
176
|
* FR-5.7: Reference resolution operates in O(1) time complexity per reference
|
|
170
177
|
* FR-5.8: Original reference fields remain unchanged
|
|
171
178
|
*/
|
|
172
|
-
function createSmartResource(resource, smartResourceCache, resourcesById, resourcesByFullUrl, resolutionStack, getResourcesReferencingIdFn) {
|
|
179
|
+
function createSmartResource(resource, smartResourceCache, resourcesById, resourcesByFullUrl, resolutionStack, getResourcesReferencingIdFn, fragmentResolutionRoot) {
|
|
173
180
|
// Check cache first to maintain object identity
|
|
174
181
|
const cached = smartResourceCache.get(resource);
|
|
175
182
|
if (cached) {
|
|
@@ -239,7 +246,7 @@ function createSmartResource(resource, smartResourceCache, resourcesById, resour
|
|
|
239
246
|
}
|
|
240
247
|
// Check if this is a reference method call
|
|
241
248
|
if (typeof prop === "string" && (0, smart_resources_1.isReferenceMethod)(prop, target.resourceType)) {
|
|
242
|
-
return () => resolveReference(prop, target, resourcesById, resourcesByFullUrl, resolutionStack, res => createSmartResource(res, smartResourceCache, resourcesById, resourcesByFullUrl, resolutionStack, getResourcesReferencingIdFn));
|
|
249
|
+
return () => resolveReference(prop, target, resourcesById, resourcesByFullUrl, resolutionStack, fragmentResolutionRoot, res => createSmartResource(res, smartResourceCache, resourcesById, resourcesByFullUrl, resolutionStack, getResourcesReferencingIdFn, fragmentResolutionRoot));
|
|
243
250
|
}
|
|
244
251
|
// Get the property value
|
|
245
252
|
const value = Reflect.get(target, prop, receiver);
|
|
@@ -284,48 +291,22 @@ function createSmartResource(resource, smartResourceCache, resourcesById, resour
|
|
|
284
291
|
// Return original property for primitives and other types
|
|
285
292
|
return value;
|
|
286
293
|
},
|
|
287
|
-
// Ensure JSON serialization works correctly (FR-5.8)
|
|
288
294
|
ownKeys: target => {
|
|
289
|
-
|
|
290
|
-
const virtualMethods = [
|
|
291
|
-
"getReferencingResources",
|
|
292
|
-
"getReferencedResources",
|
|
293
|
-
"toString",
|
|
294
|
-
];
|
|
295
|
-
// Add reference methods for this resource type
|
|
296
|
-
const referenceMethods = smart_resources_1.REFERENCE_METHOD_MAPPING[target.resourceType];
|
|
297
|
-
if (referenceMethods) {
|
|
298
|
-
virtualMethods.push(...Object.keys(referenceMethods));
|
|
299
|
-
}
|
|
300
|
-
// Filter out internal markers and add virtual methods for DevTools
|
|
301
|
-
return [...keys.filter(key => key !== "__isSmartResource"), ...virtualMethods];
|
|
295
|
+
return Reflect.ownKeys(target).filter(key => key !== "__isSmartResource");
|
|
302
296
|
},
|
|
303
297
|
getOwnPropertyDescriptor: (target, prop) => {
|
|
304
|
-
// Hide internal markers from enumeration
|
|
305
298
|
if (prop === "__isSmartResource" ||
|
|
306
299
|
prop === Symbol.toStringTag ||
|
|
307
300
|
prop === "toJSON" ||
|
|
308
|
-
prop === util_1.inspect.custom
|
|
309
|
-
|
|
310
|
-
}
|
|
311
|
-
// Make virtual methods enumerable for DevTools
|
|
312
|
-
if (prop === "getReferencingResources" ||
|
|
301
|
+
prop === util_1.inspect.custom ||
|
|
302
|
+
prop === "getReferencingResources" ||
|
|
313
303
|
prop === "getReferencedResources" ||
|
|
314
304
|
prop === "toString") {
|
|
315
|
-
return
|
|
316
|
-
enumerable: true,
|
|
317
|
-
configurable: true,
|
|
318
|
-
writable: false,
|
|
319
|
-
};
|
|
305
|
+
return undefined;
|
|
320
306
|
}
|
|
321
|
-
// Make reference methods enumerable for DevTools
|
|
322
307
|
const referenceMethods = smart_resources_1.REFERENCE_METHOD_MAPPING[target.resourceType];
|
|
323
308
|
if (referenceMethods && typeof prop === "string" && prop in referenceMethods) {
|
|
324
|
-
return
|
|
325
|
-
enumerable: true,
|
|
326
|
-
configurable: true,
|
|
327
|
-
writable: false,
|
|
328
|
-
};
|
|
309
|
+
return undefined;
|
|
329
310
|
}
|
|
330
311
|
return Reflect.getOwnPropertyDescriptor(target, prop);
|
|
331
312
|
},
|
|
@@ -334,5 +315,4 @@ function createSmartResource(resource, smartResourceCache, resourcesById, resour
|
|
|
334
315
|
smartResourceCache.set(resource, smartResource);
|
|
335
316
|
return smartResource;
|
|
336
317
|
}
|
|
337
|
-
exports.createSmartResource = createSmartResource;
|
|
338
318
|
//# sourceMappingURL=reference-resolution.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-resolution.js","sourceRoot":"","sources":["../../src/internal/reference-resolution.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"reference-resolution.js","sourceRoot":"","sources":["../../src/internal/reference-resolution.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,10 @@ export declare function findAllReferences(resource: Resource): Array<{
|
|
|
6
6
|
field: string;
|
|
7
7
|
reference: string;
|
|
8
8
|
}>;
|
|
9
|
+
/**
|
|
10
|
+
* Resolve a fragment reference (e.g. #localId) against a resource's contained array.
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolveContainedReference(fragmentRoot: Resource, reference: string): Resource | undefined;
|
|
9
13
|
/**
|
|
10
14
|
* Extract target resource ID from a reference string
|
|
11
15
|
*/
|
|
@@ -18,10 +22,11 @@ export declare function extractTargetIdFromReference(reference: string): string
|
|
|
18
22
|
*/
|
|
19
23
|
export declare function normalizeReferenceField(field: string): string;
|
|
20
24
|
/**
|
|
21
|
-
* Check if a reference can be resolved within the bundle
|
|
25
|
+
* Check if a reference can be resolved within the bundle (and optional contained context)
|
|
22
26
|
* @param reference - The reference string to check
|
|
23
27
|
* @param resourcesById - Map of resources indexed by resource.id
|
|
24
28
|
* @param resourcesByFullUrl - Map of resources indexed by entry.fullUrl
|
|
29
|
+
* @param sourceResource - Bundle entry resource; used to resolve #fragment against contained
|
|
25
30
|
*/
|
|
26
|
-
export declare function canResolveReference(reference: string, resourcesById: Map<string, Resource>, resourcesByFullUrl: Map<string, Resource
|
|
31
|
+
export declare function canResolveReference(reference: string, resourcesById: Map<string, Resource>, resourcesByFullUrl: Map<string, Resource>, sourceResource?: Resource): boolean;
|
|
27
32
|
//# sourceMappingURL=reference-utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reference-utils.d.ts","sourceRoot":"","sources":["../../src/internal/reference-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAkCjG;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"reference-utils.d.ts","sourceRoot":"","sources":["../../src/internal/reference-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,QAAQ,GAAG,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAkCjG;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,YAAY,EAAE,QAAQ,EACtB,SAAS,EAAE,MAAM,GAChB,QAAQ,GAAG,SAAS,CAYtB;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAkBlF;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAG7D;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EACpC,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EACzC,cAAc,CAAC,EAAE,QAAQ,GACxB,OAAO,CAsBT"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.findAllReferences = findAllReferences;
|
|
4
|
+
exports.resolveContainedReference = resolveContainedReference;
|
|
5
|
+
exports.extractTargetIdFromReference = extractTargetIdFromReference;
|
|
6
|
+
exports.normalizeReferenceField = normalizeReferenceField;
|
|
7
|
+
exports.canResolveReference = canResolveReference;
|
|
4
8
|
/**
|
|
5
9
|
* Find all Reference fields in a resource recursively
|
|
6
10
|
*/
|
|
@@ -35,7 +39,20 @@ function findAllReferences(resource) {
|
|
|
35
39
|
searchObject(resource);
|
|
36
40
|
return references;
|
|
37
41
|
}
|
|
38
|
-
|
|
42
|
+
/**
|
|
43
|
+
* Resolve a fragment reference (e.g. #localId) against a resource's contained array.
|
|
44
|
+
*/
|
|
45
|
+
function resolveContainedReference(fragmentRoot, reference) {
|
|
46
|
+
if (!reference.startsWith("#")) {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
const localId = reference.slice(1);
|
|
50
|
+
const contained = fragmentRoot.contained;
|
|
51
|
+
if (!localId || !contained?.length) {
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
return contained.find((entry) => entry.id === localId);
|
|
55
|
+
}
|
|
39
56
|
/**
|
|
40
57
|
* Extract target resource ID from a reference string
|
|
41
58
|
*/
|
|
@@ -43,6 +60,10 @@ function extractTargetIdFromReference(reference) {
|
|
|
43
60
|
if (!reference) {
|
|
44
61
|
return undefined;
|
|
45
62
|
}
|
|
63
|
+
if (reference.startsWith("#")) {
|
|
64
|
+
const localId = reference.slice(1);
|
|
65
|
+
return localId || undefined;
|
|
66
|
+
}
|
|
46
67
|
// Handle "ResourceType/id" pattern
|
|
47
68
|
if (reference.includes("/")) {
|
|
48
69
|
const parts = reference.split("/");
|
|
@@ -51,7 +72,6 @@ function extractTargetIdFromReference(reference) {
|
|
|
51
72
|
// Handle other reference patterns (e.g., "urn:uuid:xxx")
|
|
52
73
|
return reference;
|
|
53
74
|
}
|
|
54
|
-
exports.extractTargetIdFromReference = extractTargetIdFromReference;
|
|
55
75
|
/**
|
|
56
76
|
* Normalize reference field path by removing array indices but preserving nested paths.
|
|
57
77
|
* e.g., "diagnosis[0].condition" -> "diagnosis.condition"
|
|
@@ -62,14 +82,20 @@ function normalizeReferenceField(field) {
|
|
|
62
82
|
// Remove array indices while preserving the full nested path
|
|
63
83
|
return field.replace(/\[\d+\]/g, "");
|
|
64
84
|
}
|
|
65
|
-
exports.normalizeReferenceField = normalizeReferenceField;
|
|
66
85
|
/**
|
|
67
|
-
* Check if a reference can be resolved within the bundle
|
|
86
|
+
* Check if a reference can be resolved within the bundle (and optional contained context)
|
|
68
87
|
* @param reference - The reference string to check
|
|
69
88
|
* @param resourcesById - Map of resources indexed by resource.id
|
|
70
89
|
* @param resourcesByFullUrl - Map of resources indexed by entry.fullUrl
|
|
90
|
+
* @param sourceResource - Bundle entry resource; used to resolve #fragment against contained
|
|
71
91
|
*/
|
|
72
|
-
function canResolveReference(reference, resourcesById, resourcesByFullUrl) {
|
|
92
|
+
function canResolveReference(reference, resourcesById, resourcesByFullUrl, sourceResource) {
|
|
93
|
+
if (reference.startsWith("#")) {
|
|
94
|
+
if (!sourceResource) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
return resolveContainedReference(sourceResource, reference) !== undefined;
|
|
98
|
+
}
|
|
73
99
|
// Try to resolve by resource ID (e.g., "Patient/123")
|
|
74
100
|
if (reference.includes("/")) {
|
|
75
101
|
const [, resourceId] = reference.split("/");
|
|
@@ -83,5 +109,4 @@ function canResolveReference(reference, resourcesById, resourcesByFullUrl) {
|
|
|
83
109
|
}
|
|
84
110
|
return false;
|
|
85
111
|
}
|
|
86
|
-
exports.canResolveReference = canResolveReference;
|
|
87
112
|
//# sourceMappingURL=reference-utils.js.map
|