in src/router/bundle/bundleParser.ts [316:385]
private static getReferences(entry: any): Reference[] {
const flattenResource: any = flatten(get(entry, 'resource', {}));
const referencePaths: string[] = Object.keys(flattenResource).filter((key) => key.endsWith('.reference'));
if (referencePaths.length === 0) {
return [];
}
const references: Reference[] = referencePaths.map((referencePath) => {
const entryReference = get(entry.resource, referencePath);
const idFromUrnMatch = entryReference.match(captureIdFromUrn);
if (idFromUrnMatch) {
const urlRoot = idFromUrnMatch[1];
return {
resourceType: '',
id: idFromUrnMatch[2],
vid: '',
rootUrl: urlRoot,
referenceFullUrl: `${urlRoot}${idFromUrnMatch[2]}`,
referencePath,
referenceIsValidated: false,
};
}
const fullUrlMatch = entryReference.match(captureFullUrlParts);
if (fullUrlMatch) {
let rootUrl = fullUrlMatch[1];
// If the reference doesn't have a urlRoot, check if the entry's fullUrl has a urlRoot
if (rootUrl === undefined) {
if (entry.fullUrl && entry.fullUrl.match(captureFullUrlParts)) {
// eslint-disable-next-line prefer-destructuring
rootUrl = entry.fullUrl.match(captureFullUrlParts)[1];
}
}
const resourceType = fullUrlMatch[2];
const id = fullUrlMatch[3];
let fullUrl = `${rootUrl}${resourceType}/${id}`;
const vid = fullUrlMatch[4];
if (vid) {
fullUrl += `/_history/${vid}`;
}
return {
resourceType,
id,
vid,
rootUrl,
referenceFullUrl: fullUrl,
referencePath,
referenceIsValidated: false,
};
}
// https://www.hl7.org/fhir/references.html#contained
if (entryReference.substring(0, 1) === '#') {
return {
resourceType: '',
id: entryReference.substring(1, entryReference.length),
vid: '',
rootUrl: '',
referenceFullUrl: this.SELF_CONTAINED_REFERENCE,
referencePath,
referenceIsValidated: false,
};
}
throw new Error(
`This entry's reference is not recognized. Entry's reference is: ${entryReference} . Valid format includes "<url>/resourceType/id" or "<urn:uuid:|urn:oid:><id>`,
);
});
return references;
}