54 lines
2.8 KiB
TypeScript
54 lines
2.8 KiB
TypeScript
/**
|
|
* Modifies a bulkDataURI to ensure it is absolute based on the DICOMWeb configuration and
|
|
* instance data. The modification is in-place.
|
|
*
|
|
* If the bulkDataURI is relative to the series or study (according to the DICOM standard),
|
|
* it is made absolute by prepending the relevant paths.
|
|
*
|
|
* In scenarios where the bulkDataURI is a server-relative path (starting with '/'), the function
|
|
* handles two cases:
|
|
*
|
|
* 1. If the wado root is absolute (starts with 'http'), it prepends the wado root to the bulkDataURI.
|
|
* 2. If the wado root is relative, no changes are needed as the bulkDataURI is already correctly relative to the server root.
|
|
*
|
|
* @param value - The object containing BulkDataURI to be fixed.
|
|
* @param instance - The object (DICOM instance data) containing StudyInstanceUID and SeriesInstanceUID.
|
|
* @param dicomWebConfig - The DICOMWeb configuration object, containing wadoRoot and potentially bulkDataURI.relativeResolution.
|
|
* @returns The function modifies `value` in-place, it does not return a value.
|
|
*/
|
|
function fixBulkDataURI(value, instance, dicomWebConfig) {
|
|
// in case of the relative path, make it absolute. The current DICOM standard says
|
|
// the bulkdataURI is relative to the series. However, there are situations where
|
|
// it can be relative to the study too
|
|
if (!value.BulkDataURI.startsWith('http') && !value.BulkDataURI.startsWith('/')) {
|
|
if (dicomWebConfig.bulkDataURI?.relativeResolution === 'studies') {
|
|
value.BulkDataURI = `${dicomWebConfig.wadoRoot}/studies/${instance.StudyInstanceUID}/${value.BulkDataURI}`;
|
|
} else if (
|
|
dicomWebConfig.bulkDataURI?.relativeResolution === 'series' ||
|
|
!dicomWebConfig.bulkDataURI?.relativeResolution
|
|
) {
|
|
value.BulkDataURI = `${dicomWebConfig.wadoRoot}/studies/${instance.StudyInstanceUID}/series/${instance.SeriesInstanceUID}/${value.BulkDataURI}`;
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
// in case it is relative path but starts at the server (e.g., /bulk/1e, note the missing http
|
|
// in the beginning and the first character is /) There are two scenarios, whether the wado root
|
|
// is absolute or relative. In case of absolute, we need to prepend the wado root to the bulkdata
|
|
// uri (e.g., bulkData: /bulk/1e, wado root: http://myserver.com/dicomweb, output: http://myserver.com/bulk/1e)
|
|
// and in case of relative wado root, we need to prepend the bulkdata uri to the wado root (e.g,. bulkData: /bulk/1e
|
|
// wado root: /dicomweb, output: /bulk/1e)
|
|
if (value.BulkDataURI[0] === '/') {
|
|
if (dicomWebConfig.wadoRoot.startsWith('http')) {
|
|
// Absolute wado root
|
|
const url = new URL(dicomWebConfig.wadoRoot);
|
|
value.BulkDataURI = `${url.origin}${value.BulkDataURI}`;
|
|
} else {
|
|
// Relative wado root, we don't need to do anything, bulkdata uri is already correct
|
|
}
|
|
}
|
|
}
|
|
|
|
export { fixBulkDataURI };
|