@cornerstonejs/dicom-image-loader 2.0.0-beta.2 → 2.0.0-beta.21

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 (248) hide show
  1. package/dist/920.bundle.min.js +3 -0
  2. package/dist/920.bundle.min.js.LICENSE.txt +5 -0
  3. package/dist/920.bundle.min.js.map +1 -0
  4. package/dist/cornerstoneDICOMImageLoader.bundle.min.js +1 -1
  5. package/dist/cornerstoneDICOMImageLoader.bundle.min.js.map +1 -1
  6. package/dist/dynamic-import/{65916ef3def695744bda.wasm → 031089e563a18ada8441.wasm} +0 -0
  7. package/dist/dynamic-import/20fc4c659b85ccd2a9c0.wasm +0 -0
  8. package/dist/dynamic-import/584.min.js +2 -0
  9. package/dist/dynamic-import/584.min.js.map +1 -0
  10. package/dist/dynamic-import/610.min.js +2 -0
  11. package/dist/dynamic-import/610.min.js.map +1 -0
  12. package/dist/dynamic-import/918.min.js +2 -0
  13. package/dist/dynamic-import/918.min.js.map +1 -0
  14. package/dist/dynamic-import/958.min.js +3 -0
  15. package/dist/dynamic-import/958.min.js.LICENSE.txt +5 -0
  16. package/dist/dynamic-import/958.min.js.map +1 -0
  17. package/dist/dynamic-import/cornerstoneDICOMImageLoader.min.js +1 -1
  18. package/dist/dynamic-import/cornerstoneDICOMImageLoader.min.js.map +1 -1
  19. package/dist/esm/codecs/jpeg.d.ts +1 -0
  20. package/dist/esm/codecs/jpeg.js +890 -0
  21. package/dist/esm/codecs/jpegLossless.d.ts +7 -0
  22. package/dist/esm/codecs/jpegLossless.js +1219 -0
  23. package/dist/esm/src/constants/transferSyntaxes.d.ts +46 -0
  24. package/dist/esm/src/constants/transferSyntaxes.js +46 -0
  25. package/dist/esm/src/decodeImageFrameWorker.d.ts +1 -0
  26. package/dist/esm/src/decodeImageFrameWorker.js +262 -0
  27. package/dist/esm/src/externalModules.d.ts +5 -0
  28. package/dist/esm/src/externalModules.js +44 -0
  29. package/dist/esm/src/imageLoader/colorSpaceConverters/convertPALETTECOLOR.d.ts +3 -0
  30. package/dist/esm/src/imageLoader/colorSpaceConverters/convertPALETTECOLOR.js +77 -0
  31. package/dist/esm/src/imageLoader/colorSpaceConverters/convertRGBColorByPixel.d.ts +2 -0
  32. package/dist/esm/src/imageLoader/colorSpaceConverters/convertRGBColorByPixel.js +21 -0
  33. package/dist/esm/src/imageLoader/colorSpaceConverters/convertRGBColorByPlane.d.ts +2 -0
  34. package/dist/esm/src/imageLoader/colorSpaceConverters/convertRGBColorByPlane.js +28 -0
  35. package/dist/esm/src/imageLoader/colorSpaceConverters/convertYBRFull422ByPixel.d.ts +2 -0
  36. package/dist/esm/src/imageLoader/colorSpaceConverters/convertYBRFull422ByPixel.js +44 -0
  37. package/dist/esm/src/imageLoader/colorSpaceConverters/convertYBRFullByPixel.d.ts +2 -0
  38. package/dist/esm/src/imageLoader/colorSpaceConverters/convertYBRFullByPixel.js +33 -0
  39. package/dist/esm/src/imageLoader/colorSpaceConverters/convertYBRFullByPlane.d.ts +2 -0
  40. package/dist/esm/src/imageLoader/colorSpaceConverters/convertYBRFullByPlane.js +35 -0
  41. package/dist/esm/src/imageLoader/colorSpaceConverters/index.d.ts +7 -0
  42. package/dist/esm/src/imageLoader/colorSpaceConverters/index.js +7 -0
  43. package/dist/esm/src/imageLoader/configure.d.ts +3 -0
  44. package/dist/esm/src/imageLoader/configure.js +11 -0
  45. package/dist/esm/src/imageLoader/convertColorSpace.d.ts +1 -0
  46. package/dist/esm/src/imageLoader/convertColorSpace.js +40 -0
  47. package/dist/esm/src/imageLoader/createImage.d.ts +5 -0
  48. package/dist/esm/src/imageLoader/createImage.js +241 -0
  49. package/dist/esm/src/imageLoader/decodeImageFrame.d.ts +3 -0
  50. package/dist/esm/src/imageLoader/decodeImageFrame.js +63 -0
  51. package/dist/esm/src/imageLoader/decodeJPEGBaseline8BitColor.d.ts +4 -0
  52. package/dist/esm/src/imageLoader/decodeJPEGBaseline8BitColor.js +64 -0
  53. package/dist/esm/src/imageLoader/getImageFrame.d.ts +3 -0
  54. package/dist/esm/src/imageLoader/getImageFrame.js +26 -0
  55. package/dist/esm/src/imageLoader/getInstanceModule.d.ts +3 -0
  56. package/dist/esm/src/imageLoader/getInstanceModule.js +40 -0
  57. package/dist/esm/src/imageLoader/getMinMax.d.ts +4 -0
  58. package/dist/esm/src/imageLoader/getMinMax.js +15 -0
  59. package/dist/esm/src/imageLoader/getScalingParameters.d.ts +6 -0
  60. package/dist/esm/src/imageLoader/getScalingParameters.js +16 -0
  61. package/dist/esm/src/imageLoader/imageIdToURI.d.ts +1 -0
  62. package/dist/esm/src/imageLoader/imageIdToURI.js +4 -0
  63. package/dist/esm/src/imageLoader/index.d.ts +94 -0
  64. package/dist/esm/src/imageLoader/index.js +36 -0
  65. package/dist/esm/src/imageLoader/internal/index.d.ts +10 -0
  66. package/dist/esm/src/imageLoader/internal/index.js +10 -0
  67. package/dist/esm/src/imageLoader/internal/options.d.ts +3 -0
  68. package/dist/esm/src/imageLoader/internal/options.js +19 -0
  69. package/dist/esm/src/imageLoader/internal/rangeRequest.d.ts +9 -0
  70. package/dist/esm/src/imageLoader/internal/rangeRequest.js +121 -0
  71. package/dist/esm/src/imageLoader/internal/streamRequest.d.ts +2 -0
  72. package/dist/esm/src/imageLoader/internal/streamRequest.js +92 -0
  73. package/dist/esm/src/imageLoader/internal/xhrRequest.d.ts +3 -0
  74. package/dist/esm/src/imageLoader/internal/xhrRequest.js +102 -0
  75. package/dist/esm/src/imageLoader/isColorConversionRequired.d.ts +1 -0
  76. package/dist/esm/src/imageLoader/isColorConversionRequired.js +22 -0
  77. package/dist/esm/src/imageLoader/isJPEGBaseline8BitColor.d.ts +3 -0
  78. package/dist/esm/src/imageLoader/isJPEGBaseline8BitColor.js +9 -0
  79. package/dist/esm/src/imageLoader/isNMReconstructable.d.ts +1 -0
  80. package/dist/esm/src/imageLoader/isNMReconstructable.js +3 -0
  81. package/dist/esm/src/imageLoader/registerLoaders.d.ts +2 -0
  82. package/dist/esm/src/imageLoader/registerLoaders.js +7 -0
  83. package/dist/esm/src/imageLoader/wadors/combineFrameInstance.d.ts +12 -0
  84. package/dist/esm/src/imageLoader/wadors/combineFrameInstance.js +44 -0
  85. package/dist/esm/src/imageLoader/wadors/extractMultipart.d.ts +23 -0
  86. package/dist/esm/src/imageLoader/wadors/extractMultipart.js +73 -0
  87. package/dist/esm/src/imageLoader/wadors/findIndexOfString.d.ts +2 -0
  88. package/dist/esm/src/imageLoader/wadors/findIndexOfString.js +32 -0
  89. package/dist/esm/src/imageLoader/wadors/getImageQualityStatus.d.ts +3 -0
  90. package/dist/esm/src/imageLoader/wadors/getImageQualityStatus.js +8 -0
  91. package/dist/esm/src/imageLoader/wadors/getPixelData.d.ts +26 -0
  92. package/dist/esm/src/imageLoader/wadors/getPixelData.js +35 -0
  93. package/dist/esm/src/imageLoader/wadors/getTagValue.d.ts +1 -0
  94. package/dist/esm/src/imageLoader/wadors/getTagValue.js +9 -0
  95. package/dist/esm/src/imageLoader/wadors/index.d.ts +25 -0
  96. package/dist/esm/src/imageLoader/wadors/index.js +21 -0
  97. package/dist/esm/src/imageLoader/wadors/loadImage.d.ts +25 -0
  98. package/dist/esm/src/imageLoader/wadors/loadImage.js +125 -0
  99. package/dist/esm/src/imageLoader/wadors/loadImage_test.d.ts +1 -0
  100. package/dist/esm/src/imageLoader/wadors/loadImage_test.js +41 -0
  101. package/dist/esm/src/imageLoader/wadors/metaData/NMHelpers.d.ts +5 -0
  102. package/dist/esm/src/imageLoader/wadors/metaData/NMHelpers.js +38 -0
  103. package/dist/esm/src/imageLoader/wadors/metaData/USHelpers.d.ts +19 -0
  104. package/dist/esm/src/imageLoader/wadors/metaData/USHelpers.js +46 -0
  105. package/dist/esm/src/imageLoader/wadors/metaData/extractPositioningFromMetadata.d.ts +3 -0
  106. package/dist/esm/src/imageLoader/wadors/metaData/extractPositioningFromMetadata.js +18 -0
  107. package/dist/esm/src/imageLoader/wadors/metaData/getFirstNumberValue.d.ts +2 -0
  108. package/dist/esm/src/imageLoader/wadors/metaData/getFirstNumberValue.js +6 -0
  109. package/dist/esm/src/imageLoader/wadors/metaData/getNumberString.d.ts +3 -0
  110. package/dist/esm/src/imageLoader/wadors/metaData/getNumberString.js +9 -0
  111. package/dist/esm/src/imageLoader/wadors/metaData/getNumberValue.d.ts +3 -0
  112. package/dist/esm/src/imageLoader/wadors/metaData/getNumberValue.js +9 -0
  113. package/dist/esm/src/imageLoader/wadors/metaData/getNumberValues.d.ts +3 -0
  114. package/dist/esm/src/imageLoader/wadors/metaData/getNumberValues.js +20 -0
  115. package/dist/esm/src/imageLoader/wadors/metaData/getOverlayPlaneModule.d.ts +4 -0
  116. package/dist/esm/src/imageLoader/wadors/metaData/getOverlayPlaneModule.js +38 -0
  117. package/dist/esm/src/imageLoader/wadors/metaData/getSequenceItems.d.ts +3 -0
  118. package/dist/esm/src/imageLoader/wadors/metaData/getSequenceItems.js +14 -0
  119. package/dist/esm/src/imageLoader/wadors/metaData/getValue.d.ts +3 -0
  120. package/dist/esm/src/imageLoader/wadors/metaData/getValue.js +14 -0
  121. package/dist/esm/src/imageLoader/wadors/metaData/index.d.ts +7 -0
  122. package/dist/esm/src/imageLoader/wadors/metaData/index.js +7 -0
  123. package/dist/esm/src/imageLoader/wadors/metaData/metaDataProvider.d.ts +14 -0
  124. package/dist/esm/src/imageLoader/wadors/metaData/metaDataProvider.js +261 -0
  125. package/dist/esm/src/imageLoader/wadors/metaDataManager.d.ts +14 -0
  126. package/dist/esm/src/imageLoader/wadors/metaDataManager.js +50 -0
  127. package/dist/esm/src/imageLoader/wadors/register.d.ts +1 -0
  128. package/dist/esm/src/imageLoader/wadors/register.js +6 -0
  129. package/dist/esm/src/imageLoader/wadors/retrieveMultiframeMetadata.d.ts +15 -0
  130. package/dist/esm/src/imageLoader/wadors/retrieveMultiframeMetadata.js +26 -0
  131. package/dist/esm/src/imageLoader/wadouri/combineFrameInstanceDataset.d.ts +22 -0
  132. package/dist/esm/src/imageLoader/wadouri/combineFrameInstanceDataset.js +69 -0
  133. package/dist/esm/src/imageLoader/wadouri/dataSetCacheManager.d.ts +31 -0
  134. package/dist/esm/src/imageLoader/wadouri/dataSetCacheManager.js +142 -0
  135. package/dist/esm/src/imageLoader/wadouri/dataSetCacheManager_test.d.ts +1 -0
  136. package/dist/esm/src/imageLoader/wadouri/dataSetCacheManager_test.js +10 -0
  137. package/dist/esm/src/imageLoader/wadouri/dataset-from-partial-content.d.ts +6 -0
  138. package/dist/esm/src/imageLoader/wadouri/dataset-from-partial-content.js +56 -0
  139. package/dist/esm/src/imageLoader/wadouri/fileManager.d.ts +11 -0
  140. package/dist/esm/src/imageLoader/wadouri/fileManager.js +20 -0
  141. package/dist/esm/src/imageLoader/wadouri/getEncapsulatedImageFrame.d.ts +2 -0
  142. package/dist/esm/src/imageLoader/wadouri/getEncapsulatedImageFrame.js +33 -0
  143. package/dist/esm/src/imageLoader/wadouri/getPixelData.d.ts +3 -0
  144. package/dist/esm/src/imageLoader/wadouri/getPixelData.js +13 -0
  145. package/dist/esm/src/imageLoader/wadouri/getUncompressedImageFrame.d.ts +3 -0
  146. package/dist/esm/src/imageLoader/wadouri/getUncompressedImageFrame.js +47 -0
  147. package/dist/esm/src/imageLoader/wadouri/index.d.ts +42 -0
  148. package/dist/esm/src/imageLoader/wadouri/index.js +31 -0
  149. package/dist/esm/src/imageLoader/wadouri/loadFileRequest.d.ts +2 -0
  150. package/dist/esm/src/imageLoader/wadouri/loadFileRequest.js +17 -0
  151. package/dist/esm/src/imageLoader/wadouri/loadImage.d.ts +9 -0
  152. package/dist/esm/src/imageLoader/wadouri/loadImage.js +104 -0
  153. package/dist/esm/src/imageLoader/wadouri/metaData/USHelpers.d.ts +2 -0
  154. package/dist/esm/src/imageLoader/wadouri/metaData/USHelpers.js +44 -0
  155. package/dist/esm/src/imageLoader/wadouri/metaData/extractPositioningFromDataset.d.ts +6 -0
  156. package/dist/esm/src/imageLoader/wadouri/metaData/extractPositioningFromDataset.js +80 -0
  157. package/dist/esm/src/imageLoader/wadouri/metaData/getImagePixelModule.d.ts +4 -0
  158. package/dist/esm/src/imageLoader/wadouri/metaData/getImagePixelModule.js +79 -0
  159. package/dist/esm/src/imageLoader/wadouri/metaData/getLUTs.d.ts +4 -0
  160. package/dist/esm/src/imageLoader/wadouri/metaData/getLUTs.js +44 -0
  161. package/dist/esm/src/imageLoader/wadouri/metaData/getModalityLUTOutputPixelRepresentation.d.ts +3 -0
  162. package/dist/esm/src/imageLoader/wadouri/metaData/getModalityLUTOutputPixelRepresentation.js +30 -0
  163. package/dist/esm/src/imageLoader/wadouri/metaData/getNumberValues.d.ts +3 -0
  164. package/dist/esm/src/imageLoader/wadouri/metaData/getNumberValues.js +16 -0
  165. package/dist/esm/src/imageLoader/wadouri/metaData/getOverlayPlaneModule.d.ts +4 -0
  166. package/dist/esm/src/imageLoader/wadouri/metaData/getOverlayPlaneModule.js +36 -0
  167. package/dist/esm/src/imageLoader/wadouri/metaData/index.d.ts +5 -0
  168. package/dist/esm/src/imageLoader/wadouri/metaData/index.js +5 -0
  169. package/dist/esm/src/imageLoader/wadouri/metaData/metaDataProvider.d.ts +2 -0
  170. package/dist/esm/src/imageLoader/wadouri/metaData/metaDataProvider.js +223 -0
  171. package/dist/esm/src/imageLoader/wadouri/parseImageId.d.ts +8 -0
  172. package/dist/esm/src/imageLoader/wadouri/parseImageId.js +20 -0
  173. package/dist/esm/src/imageLoader/wadouri/register.d.ts +2 -0
  174. package/dist/esm/src/imageLoader/wadouri/register.js +8 -0
  175. package/dist/esm/src/imageLoader/wadouri/retrieveMultiframeDataset.d.ts +17 -0
  176. package/dist/esm/src/imageLoader/wadouri/retrieveMultiframeDataset.js +57 -0
  177. package/dist/esm/src/imageLoader/wadouri/unpackBinaryFrame.d.ts +3 -0
  178. package/dist/esm/src/imageLoader/wadouri/unpackBinaryFrame.js +14 -0
  179. package/dist/esm/src/shared/decoders/decodeBigEndian.d.ts +4 -0
  180. package/dist/esm/src/shared/decoders/decodeBigEndian.js +28 -0
  181. package/dist/esm/src/shared/decoders/decodeHTJ2K.d.ts +5 -0
  182. package/dist/esm/src/shared/decoders/decodeHTJ2K.js +109 -0
  183. package/dist/esm/src/shared/decoders/decodeJPEG2000.d.ts +5 -0
  184. package/dist/esm/src/shared/decoders/decodeJPEG2000.js +93 -0
  185. package/dist/esm/src/shared/decoders/decodeJPEGBaseline12Bit-js.d.ts +6 -0
  186. package/dist/esm/src/shared/decoders/decodeJPEGBaseline12Bit-js.js +34 -0
  187. package/dist/esm/src/shared/decoders/decodeJPEGBaseline12Bit-wasm-not-yet-working.d.ts +1 -0
  188. package/dist/esm/src/shared/decoders/decodeJPEGBaseline12Bit-wasm-not-yet-working.js +1 -0
  189. package/dist/esm/src/shared/decoders/decodeJPEGBaseline8Bit.d.ts +3 -0
  190. package/dist/esm/src/shared/decoders/decodeJPEGBaseline8Bit.js +62 -0
  191. package/dist/esm/src/shared/decoders/decodeJPEGLS.d.ts +5 -0
  192. package/dist/esm/src/shared/decoders/decodeJPEGLS.js +84 -0
  193. package/dist/esm/src/shared/decoders/decodeJPEGLossless.d.ts +6 -0
  194. package/dist/esm/src/shared/decoders/decodeJPEGLossless.js +39 -0
  195. package/dist/esm/src/shared/decoders/decodeLittleEndian.d.ts +4 -0
  196. package/dist/esm/src/shared/decoders/decodeLittleEndian.js +29 -0
  197. package/dist/esm/src/shared/decoders/decodeRLE.d.ts +4 -0
  198. package/dist/esm/src/shared/decoders/decodeRLE.js +128 -0
  199. package/dist/esm/src/shared/getMinMax.d.ts +6 -0
  200. package/dist/esm/src/shared/getMinMax.js +16 -0
  201. package/dist/esm/src/shared/getMinMax_test.d.ts +1 -0
  202. package/dist/esm/src/shared/getMinMax_test.js +9 -0
  203. package/dist/esm/src/shared/getPixelDataTypeFromMinMax.d.ts +2 -0
  204. package/dist/esm/src/shared/getPixelDataTypeFromMinMax.js +22 -0
  205. package/dist/esm/src/shared/isColorImage.d.ts +1 -0
  206. package/dist/esm/src/shared/isColorImage.js +10 -0
  207. package/dist/esm/src/shared/scaling/bilinear.d.ts +1 -0
  208. package/dist/esm/src/shared/scaling/bilinear.js +32 -0
  209. package/dist/esm/src/shared/scaling/replicate.d.ts +1 -0
  210. package/dist/esm/src/shared/scaling/replicate.js +20 -0
  211. package/dist/esm/src/shared/scaling/scaleArray.d.ts +2 -0
  212. package/dist/esm/src/shared/scaling/scaleArray.js +15 -0
  213. package/dist/esm/src/types/DICOMLoaderDataSetWithFetchMore.d.ts +9 -0
  214. package/dist/esm/src/types/DICOMLoaderDataSetWithFetchMore.js +1 -0
  215. package/dist/esm/src/types/DICOMLoaderIImage.d.ts +12 -0
  216. package/dist/esm/src/types/DICOMLoaderIImage.js +1 -0
  217. package/dist/esm/src/types/DICOMLoaderImageOptions.d.ts +23 -0
  218. package/dist/esm/src/types/DICOMLoaderImageOptions.js +1 -0
  219. package/dist/esm/src/types/LoadRequestFunction.d.ts +1 -0
  220. package/dist/esm/src/types/LoadRequestFunction.js +1 -0
  221. package/dist/esm/src/types/LoaderDecodeOptions.d.ts +2 -0
  222. package/dist/esm/src/types/LoaderDecodeOptions.js +1 -0
  223. package/dist/esm/src/types/LoaderOptions.d.ts +18 -0
  224. package/dist/esm/src/types/LoaderOptions.js +1 -0
  225. package/dist/esm/src/types/LutType.d.ts +6 -0
  226. package/dist/esm/src/types/LutType.js +1 -0
  227. package/dist/esm/src/types/WADORSMetaData.d.ts +4 -0
  228. package/dist/esm/src/types/WADORSMetaData.js +1 -0
  229. package/dist/esm/src/types/WebWorkerTypes.d.ts +64 -0
  230. package/dist/esm/src/types/WebWorkerTypes.js +1 -0
  231. package/dist/esm/src/types/XHRRequest.d.ts +16 -0
  232. package/dist/esm/src/types/XHRRequest.js +1 -0
  233. package/dist/esm/src/types/index.d.ts +11 -0
  234. package/dist/esm/src/types/index.js +1 -0
  235. package/dist/esm/src/version.d.ts +2 -0
  236. package/dist/esm/src/version.js +1 -0
  237. package/package.json +24 -17
  238. package/dist/cornerstoneDICOMImageLoaderNoWebWorkers.bundle.min.js +0 -2
  239. package/dist/cornerstoneDICOMImageLoaderNoWebWorkers.bundle.min.js.map +0 -1
  240. package/dist/dynamic-import/610.min.worker.js +0 -2
  241. package/dist/dynamic-import/610.min.worker.js.map +0 -1
  242. package/dist/dynamic-import/75788f12450d4c5ed494.wasm +0 -0
  243. package/dist/dynamic-import/945.min.worker.js +0 -2
  244. package/dist/dynamic-import/945.min.worker.js.map +0 -1
  245. package/dist/dynamic-import/index.worker.e62ecca63f1a2e124230.worker.js +0 -2
  246. package/dist/dynamic-import/index.worker.e62ecca63f1a2e124230.worker.js.map +0 -1
  247. package/dist/index.worker.bundle.min.worker.js +0 -2
  248. package/dist/index.worker.bundle.min.worker.js.map +0 -1
@@ -0,0 +1,73 @@
1
+ import { Enums } from '@cornerstonejs/core';
2
+ import findIndexOfString from './findIndexOfString';
3
+ const { ImageQualityStatus } = Enums;
4
+ export default function extractMultipart(contentType, imageFrameAsArrayBuffer, options) {
5
+ options ||= {};
6
+ const response = new Uint8Array(imageFrameAsArrayBuffer);
7
+ const isPartial = !!options?.isPartial;
8
+ if (contentType.indexOf('multipart') === -1) {
9
+ return {
10
+ contentType,
11
+ imageQualityStatus: isPartial
12
+ ? ImageQualityStatus.SUBRESOLUTION
13
+ : ImageQualityStatus.FULL_RESOLUTION,
14
+ pixelData: response,
15
+ };
16
+ }
17
+ let { tokenIndex, responseHeaders, boundary, multipartContentType } = options;
18
+ tokenIndex ||= findIndexOfString(response, '\r\n\r\n');
19
+ if (tokenIndex === -1) {
20
+ throw new Error('invalid response - no multipart mime header');
21
+ }
22
+ if (!boundary) {
23
+ const header = uint8ArrayToString(response, 0, tokenIndex);
24
+ responseHeaders = header.split('\r\n');
25
+ boundary = findBoundary(responseHeaders);
26
+ if (!boundary) {
27
+ throw new Error('invalid response - no boundary marker');
28
+ }
29
+ }
30
+ const offset = tokenIndex + 4;
31
+ const endIndex = findIndexOfString(response, boundary, offset);
32
+ if (endIndex === -1 && !isPartial) {
33
+ throw new Error('invalid response - terminating boundary not found');
34
+ }
35
+ multipartContentType ||= findContentType(responseHeaders);
36
+ options.tokenIndex = tokenIndex;
37
+ options.boundary = boundary;
38
+ options.responseHeaders = responseHeaders;
39
+ options.multipartContentType = multipartContentType;
40
+ options.isPartial = endIndex === -1;
41
+ return {
42
+ contentType: multipartContentType,
43
+ extractDone: !isPartial || endIndex !== -1,
44
+ tokenIndex,
45
+ responseHeaders,
46
+ boundary,
47
+ multipartContentType,
48
+ pixelData: imageFrameAsArrayBuffer.slice(offset, endIndex - 2),
49
+ };
50
+ }
51
+ export function findBoundary(header) {
52
+ for (let i = 0; i < header.length; i++) {
53
+ if (header[i].substr(0, 2) === '--') {
54
+ return header[i];
55
+ }
56
+ }
57
+ }
58
+ export function findContentType(header) {
59
+ for (let i = 0; i < header.length; i++) {
60
+ if (header[i].substr(0, 13) === 'Content-Type:') {
61
+ return header[i].substr(13).trim();
62
+ }
63
+ }
64
+ }
65
+ export function uint8ArrayToString(data, offset, length) {
66
+ offset = offset || 0;
67
+ length = length || data.length - offset;
68
+ let str = '';
69
+ for (let i = offset; i < offset + length; i++) {
70
+ str += String.fromCharCode(data[i]);
71
+ }
72
+ return str;
73
+ }
@@ -0,0 +1,2 @@
1
+ declare function findIndexOfString(data: Uint8Array, str: string, offset?: number): number;
2
+ export default findIndexOfString;
@@ -0,0 +1,32 @@
1
+ function checkToken(token, data, dataOffset) {
2
+ if (dataOffset + token.length > data.length) {
3
+ return false;
4
+ }
5
+ let endIndex = dataOffset;
6
+ for (let i = 0; i < token.length; i++) {
7
+ if (token[i] !== data[endIndex++]) {
8
+ return false;
9
+ }
10
+ }
11
+ return true;
12
+ }
13
+ function stringToUint8Array(str) {
14
+ const uint = new Uint8Array(str.length);
15
+ for (let i = 0, j = str.length; i < j; i++) {
16
+ uint[i] = str.charCodeAt(i);
17
+ }
18
+ return uint;
19
+ }
20
+ function findIndexOfString(data, str, offset) {
21
+ offset = offset || 0;
22
+ const token = stringToUint8Array(str);
23
+ for (let i = offset; i < data.length; i++) {
24
+ if (token[0] === data[i]) {
25
+ if (checkToken(token, data, i)) {
26
+ return i;
27
+ }
28
+ }
29
+ }
30
+ return -1;
31
+ }
32
+ export default findIndexOfString;
@@ -0,0 +1,3 @@
1
+ import type { Types } from '@cornerstonejs/core';
2
+ import { Enums } from '@cornerstonejs/core';
3
+ export declare function getImageQualityStatus(retrieveOptions: Types.RetrieveOptions, done?: boolean): Enums.ImageQualityStatus;
@@ -0,0 +1,8 @@
1
+ import { Enums } from '@cornerstonejs/core';
2
+ const { ImageQualityStatus } = Enums;
3
+ export function getImageQualityStatus(retrieveOptions, done = true) {
4
+ if (!done) {
5
+ return ImageQualityStatus.SUBRESOLUTION;
6
+ }
7
+ return (retrieveOptions.imageQualityStatus ?? ImageQualityStatus.FULL_RESOLUTION);
8
+ }
@@ -0,0 +1,26 @@
1
+ import type { CornerstoneWadoRsLoaderOptions } from './loadImage';
2
+ declare function getPixelData(uri: string, imageId: string, mediaType?: string, options?: CornerstoneWadoRsLoaderOptions): import("packages/core/dist/esm/utilities/ProgressiveIterator").PromiseIterator<unknown> | import("../../types").LoaderXhrRequestPromise<{
3
+ contentType: string;
4
+ pixelData: Uint8Array;
5
+ imageQualityStatus: import("packages/core/dist/esm/enums").ImageQualityStatus;
6
+ percentComplete: number;
7
+ }> | Promise<{
8
+ contentType: string;
9
+ imageQualityStatus: import("packages/core/dist/esm/enums").ImageQualityStatus;
10
+ pixelData: Uint8Array;
11
+ extractDone?: undefined;
12
+ tokenIndex?: undefined;
13
+ responseHeaders?: undefined;
14
+ boundary?: undefined;
15
+ multipartContentType?: undefined;
16
+ } | {
17
+ contentType: any;
18
+ extractDone: boolean;
19
+ tokenIndex: any;
20
+ responseHeaders: any;
21
+ boundary: any;
22
+ multipartContentType: any;
23
+ pixelData: any;
24
+ imageQualityStatus?: undefined;
25
+ }>;
26
+ export default getPixelData;
@@ -0,0 +1,35 @@
1
+ import { xhrRequest } from '../internal/index';
2
+ import streamRequest from '../internal/streamRequest';
3
+ import rangeRequest from '../internal/rangeRequest';
4
+ import extractMultipart from './extractMultipart';
5
+ import { getImageQualityStatus } from './getImageQualityStatus';
6
+ function getPixelData(uri, imageId, mediaType = 'application/octet-stream', options) {
7
+ const { streamingData, retrieveOptions = {} } = options || {};
8
+ const headers = {
9
+ Accept: mediaType,
10
+ };
11
+ let url = retrieveOptions.urlArguments
12
+ ? `${uri}${uri.indexOf('?') === -1 ? '?' : '&'}${retrieveOptions.urlArguments}`
13
+ : uri;
14
+ if (retrieveOptions.framesPath) {
15
+ url = url.replace('/frames/', retrieveOptions.framesPath);
16
+ }
17
+ if (streamingData?.url !== url) {
18
+ options.streamingData = { url };
19
+ }
20
+ if (retrieveOptions.rangeIndex !== undefined) {
21
+ return rangeRequest(url, imageId, headers, options);
22
+ }
23
+ if (retrieveOptions.streaming) {
24
+ return streamRequest(url, imageId, headers, options);
25
+ }
26
+ const loadPromise = xhrRequest(url, imageId, headers);
27
+ const { xhr } = loadPromise;
28
+ return loadPromise.then(function (imageFrameAsArrayBuffer) {
29
+ const contentType = xhr.getResponseHeader('Content-Type') || 'application/octet-stream';
30
+ const extracted = extractMultipart(contentType, new Uint8Array(imageFrameAsArrayBuffer));
31
+ extracted.imageQualityStatus = getImageQualityStatus(retrieveOptions, true);
32
+ return extracted;
33
+ });
34
+ }
35
+ export default getPixelData;
@@ -0,0 +1 @@
1
+ export default function getTagValue(tag: any, justElement?: boolean): any;
@@ -0,0 +1,9 @@
1
+ export default function getTagValue(tag, justElement = true) {
2
+ if (tag && tag.Value) {
3
+ if (tag.Value[0] && justElement) {
4
+ return tag.Value[0];
5
+ }
6
+ return tag.Value;
7
+ }
8
+ return tag;
9
+ }
@@ -0,0 +1,25 @@
1
+ import { getNumberString, getNumberValue, getNumberValues, getValue, metaDataProvider } from './metaData/index';
2
+ import findIndexOfString from './findIndexOfString';
3
+ import getPixelData from './getPixelData';
4
+ import loadImage from './loadImage';
5
+ import register from './register';
6
+ declare const _default: {
7
+ metaData: {
8
+ getNumberString: typeof getNumberString;
9
+ getNumberValue: typeof getNumberValue;
10
+ getNumberValues: typeof getNumberValues;
11
+ getValue: typeof getValue;
12
+ metaDataProvider: typeof metaDataProvider;
13
+ };
14
+ findIndexOfString: typeof findIndexOfString;
15
+ getPixelData: typeof getPixelData;
16
+ loadImage: typeof loadImage;
17
+ metaDataManager: {
18
+ add: (imageId: string, metadata: import("../../types").WADORSMetaData) => void;
19
+ get: (imageId: string) => import("../../types").WADORSMetaData;
20
+ remove: (imageId: any) => void;
21
+ purge: () => void;
22
+ };
23
+ register: typeof register;
24
+ };
25
+ export default _default;
@@ -0,0 +1,21 @@
1
+ import { getNumberString, getNumberValue, getNumberValues, getValue, metaDataProvider, } from './metaData/index';
2
+ import findIndexOfString from './findIndexOfString';
3
+ import getPixelData from './getPixelData';
4
+ import metaDataManager from './metaDataManager';
5
+ import loadImage from './loadImage';
6
+ import register from './register';
7
+ const metaData = {
8
+ getNumberString,
9
+ getNumberValue,
10
+ getNumberValues,
11
+ getValue,
12
+ metaDataProvider,
13
+ };
14
+ export default {
15
+ metaData,
16
+ findIndexOfString,
17
+ getPixelData,
18
+ loadImage,
19
+ metaDataManager,
20
+ register,
21
+ };
@@ -0,0 +1,25 @@
1
+ import type { Types } from '@cornerstonejs/core';
2
+ import type { DICOMLoaderImageOptions } from '../../types';
3
+ export declare function getTransferSyntaxForContentType(contentType: string): string;
4
+ export interface StreamingData {
5
+ url: string;
6
+ encodedData?: Uint8Array;
7
+ totalBytes?: number;
8
+ chunkSize?: number;
9
+ totalRanges?: number;
10
+ rangesFetched?: number;
11
+ }
12
+ export interface CornerstoneWadoRsLoaderOptions extends DICOMLoaderImageOptions {
13
+ requestType?: string;
14
+ additionalDetails?: {
15
+ imageId: string;
16
+ };
17
+ priority?: number;
18
+ addToBeginning?: boolean;
19
+ retrieveType?: string;
20
+ transferSyntaxUID?: string;
21
+ retrieveOptions?: Types.RangeRetrieveOptions;
22
+ streamingData?: StreamingData;
23
+ }
24
+ declare function loadImage(imageId: string, options?: CornerstoneWadoRsLoaderOptions): Types.IImageLoadObject;
25
+ export default loadImage;
@@ -0,0 +1,125 @@
1
+ import { Enums, utilities } from '@cornerstonejs/core';
2
+ import external from '../../externalModules';
3
+ import createImage from '../createImage';
4
+ import getPixelData from './getPixelData';
5
+ const { ProgressiveIterator } = utilities;
6
+ const { ImageQualityStatus } = Enums;
7
+ const streamableTransferSyntaxes = new Set([
8
+ '3.2.840.10008.1.2.4.96',
9
+ '1.2.840.10008.1.2.4.202',
10
+ '1.2.840.10008.1.2.4.203',
11
+ ]);
12
+ export function getTransferSyntaxForContentType(contentType) {
13
+ const defaultTransferSyntax = '1.2.840.10008.1.2';
14
+ if (!contentType) {
15
+ return defaultTransferSyntax;
16
+ }
17
+ const parameters = contentType.split(';');
18
+ const params = {};
19
+ parameters.forEach((parameter) => {
20
+ const parameterValues = parameter.split('=');
21
+ if (parameterValues.length !== 2) {
22
+ return;
23
+ }
24
+ const value = parameterValues[1].trim().replace(/"/g, '');
25
+ params[parameterValues[0].trim()] = value;
26
+ });
27
+ const defaultTransferSyntaxByType = {
28
+ 'image/jpeg': '1.2.840.10008.1.2.4.50',
29
+ 'image/x-dicom-rle': '1.2.840.10008.1.2.5',
30
+ 'image/x-jls': '1.2.840.10008.1.2.4.80',
31
+ 'image/jls': '1.2.840.10008.1.2.4.80',
32
+ 'image/jll': '1.2.840.10008.1.2.4.70',
33
+ 'image/jp2': '1.2.840.10008.1.2.4.90',
34
+ 'image/jpx': '1.2.840.10008.1.2.4.92',
35
+ 'image/jphc': '3.2.840.10008.1.2.4.96',
36
+ 'image/jxl': '1.2.840.10008.1.2.4.140',
37
+ };
38
+ if (params['transfer-syntax']) {
39
+ return params['transfer-syntax'];
40
+ }
41
+ else if (contentType &&
42
+ !Object.keys(params).length &&
43
+ defaultTransferSyntaxByType[contentType]) {
44
+ return defaultTransferSyntaxByType[contentType];
45
+ }
46
+ else if (params.type && defaultTransferSyntaxByType[params.type]) {
47
+ return defaultTransferSyntaxByType[params.type];
48
+ }
49
+ else if (defaultTransferSyntaxByType[contentType]) {
50
+ return defaultTransferSyntaxByType[contentType];
51
+ }
52
+ return defaultTransferSyntax;
53
+ }
54
+ function getImageRetrievalPool() {
55
+ return external.cornerstone.imageRetrievalPoolManager;
56
+ }
57
+ const mediaType = 'multipart/related; type=application/octet-stream; transfer-syntax=*';
58
+ function loadImage(imageId, options = {}) {
59
+ const imageRetrievalPool = getImageRetrievalPool();
60
+ const start = new Date().getTime();
61
+ const uncompressedIterator = new ProgressiveIterator('decompress');
62
+ async function sendXHR(imageURI, imageId, mediaType) {
63
+ uncompressedIterator.generate(async (it) => {
64
+ const compressedIt = ProgressiveIterator.as(getPixelData(imageURI, imageId, mediaType, options));
65
+ let lastDecodeLevel = 10;
66
+ for await (const result of compressedIt) {
67
+ const { pixelData, imageQualityStatus = ImageQualityStatus.FULL_RESOLUTION, percentComplete, done = true, extractDone = true, } = result;
68
+ const transferSyntax = getTransferSyntaxForContentType(result.contentType);
69
+ if (!extractDone && !streamableTransferSyntaxes.has(transferSyntax)) {
70
+ continue;
71
+ }
72
+ const decodeLevel = result.decodeLevel ??
73
+ (imageQualityStatus === ImageQualityStatus.FULL_RESOLUTION
74
+ ? 0
75
+ : decodeLevelFromComplete(percentComplete, options.retrieveOptions?.decodeLevel));
76
+ if (!done && lastDecodeLevel <= decodeLevel) {
77
+ continue;
78
+ }
79
+ try {
80
+ const useOptions = {
81
+ ...options,
82
+ decodeLevel,
83
+ };
84
+ const image = (await createImage(imageId, pixelData, transferSyntax, useOptions));
85
+ const end = new Date().getTime();
86
+ image.loadTimeInMS = end - start;
87
+ image.transferSyntaxUID = transferSyntax;
88
+ image.imageQualityStatus = imageQualityStatus;
89
+ it.add(image, done);
90
+ lastDecodeLevel = decodeLevel;
91
+ }
92
+ catch (e) {
93
+ if (extractDone) {
94
+ console.warn("Couldn't decode", e);
95
+ throw e;
96
+ }
97
+ }
98
+ }
99
+ });
100
+ }
101
+ const requestType = options.requestType || 'interaction';
102
+ const additionalDetails = options.additionalDetails || { imageId };
103
+ const priority = options.priority === undefined ? 5 : options.priority;
104
+ const addToBeginning = options.addToBeginning || false;
105
+ const uri = imageId.substring(7);
106
+ imageRetrievalPool.addRequest(sendXHR.bind(this, uri, imageId, mediaType), requestType, additionalDetails, priority, addToBeginning);
107
+ return {
108
+ promise: uncompressedIterator.getDonePromise(),
109
+ cancelFn: undefined,
110
+ };
111
+ }
112
+ function decodeLevelFromComplete(percent, retrieveDecodeLevel = 4) {
113
+ const testSize = percent / 100 - 0.02;
114
+ if (testSize > 1 / 4) {
115
+ return Math.min(retrieveDecodeLevel, 0);
116
+ }
117
+ if (testSize > 1 / 16) {
118
+ return Math.min(retrieveDecodeLevel, 1);
119
+ }
120
+ if (testSize > 1 / 64) {
121
+ return Math.min(retrieveDecodeLevel, 2);
122
+ }
123
+ return Math.min(retrieveDecodeLevel, 3);
124
+ }
125
+ export default loadImage;
@@ -0,0 +1,41 @@
1
+ import { expect } from 'chai';
2
+ import { getTransferSyntaxForContentType } from './loadImage';
3
+ const cases = [
4
+ [undefined, '1.2.840.10008.1.2'],
5
+ [null, '1.2.840.10008.1.2'],
6
+ ['', '1.2.840.10008.1.2'],
7
+ ['multipart/related; type="application/octet-stream"', '1.2.840.10008.1.2'],
8
+ [
9
+ 'multipart/related; type="application/octet-stream"; transfer-syntax= ',
10
+ '1.2.840.10008.1.2',
11
+ ],
12
+ [
13
+ 'multipart/related; type=image/dicom+jpeg; transfer-syntax=1.2.840.10008.1.2.4.70',
14
+ '1.2.840.10008.1.2.4.70',
15
+ ],
16
+ [
17
+ 'multipart/related; image/dicom+jpx; transfer-syntax=1.2.840.10008.1.2.4.93',
18
+ '1.2.840.10008.1.2.4.93',
19
+ ],
20
+ [
21
+ 'multipart/related; video/mpeg; transfer-syntax=1.2.840.10008.1.2.4.100',
22
+ '1.2.840.10008.1.2.4.100',
23
+ ],
24
+ ['multipart/related; type="image/jpeg"', '1.2.840.10008.1.2.4.50'],
25
+ ['multipart/related; type="image/x-jls"', '1.2.840.10008.1.2.4.80'],
26
+ ['multipart/related; type="image/x-dicom-rle"', '1.2.840.10008.1.2.5'],
27
+ ['multipart/related; type="image/jp2"', '1.2.840.10008.1.2.4.90'],
28
+ ['multipart/related; type="image/jpx"', '1.2.840.10008.1.2.4.92'],
29
+ ];
30
+ describe('#getTransferSyntaxForContentType', function () {
31
+ cases.forEach(function (testCase) {
32
+ const contentType = testCase[0];
33
+ const expectedTransferSyntax = testCase[1];
34
+ it(`given a content type of ${contentType}, should return ${expectedTransferSyntax}`, () => {
35
+ const transferSyntax = getTransferSyntaxForContentType(contentType);
36
+ console.log(transferSyntax);
37
+ console.log(expectedTransferSyntax);
38
+ expect(transferSyntax).to.be.equal(expectedTransferSyntax);
39
+ });
40
+ });
41
+ });
@@ -0,0 +1,5 @@
1
+ declare function isNMModality(metaData: any): boolean;
2
+ declare function getImageTypeSubItemFromMetadata(metaData: any, index: any): any;
3
+ declare function extractOrientationFromNMMultiframeMetadata(metaData: any): any;
4
+ declare function extractPositionFromNMMultiframeMetadata(metaData: any): any;
5
+ export { extractOrientationFromNMMultiframeMetadata, extractPositionFromNMMultiframeMetadata, isNMModality, getImageTypeSubItemFromMetadata, };
@@ -0,0 +1,38 @@
1
+ import getTagValue from '../getTagValue';
2
+ import getValue from './getValue';
3
+ import isNMReconstructable from '../../isNMReconstructable';
4
+ import getNumberValues from './getNumberValues';
5
+ function isNMModality(metaData) {
6
+ const modality = getValue(metaData['00080060']);
7
+ return modality.includes('NM');
8
+ }
9
+ function getImageTypeSubItemFromMetadata(metaData, index) {
10
+ const imageType = getTagValue(metaData['00080008'], false);
11
+ if (imageType) {
12
+ return imageType[index];
13
+ }
14
+ return undefined;
15
+ }
16
+ function extractOrientationFromNMMultiframeMetadata(metaData) {
17
+ let imageOrientationPatient;
18
+ const imageSubType = getImageTypeSubItemFromMetadata(metaData, 2);
19
+ if (imageSubType && isNMReconstructable(imageSubType)) {
20
+ const detectorInformationSequence = getTagValue(metaData['00540022']);
21
+ if (detectorInformationSequence) {
22
+ imageOrientationPatient = getNumberValues(detectorInformationSequence['00200037'], 6);
23
+ }
24
+ }
25
+ return imageOrientationPatient;
26
+ }
27
+ function extractPositionFromNMMultiframeMetadata(metaData) {
28
+ let imagePositionPatient;
29
+ const imageSubType = getImageTypeSubItemFromMetadata(metaData, 2);
30
+ if (imageSubType && isNMReconstructable(imageSubType)) {
31
+ const detectorInformationSequence = getTagValue(metaData['00540022']);
32
+ if (detectorInformationSequence) {
33
+ imagePositionPatient = getNumberValues(detectorInformationSequence['00200032'], 3);
34
+ }
35
+ }
36
+ return imagePositionPatient;
37
+ }
38
+ export { extractOrientationFromNMMultiframeMetadata, extractPositionFromNMMultiframeMetadata, isNMModality, getImageTypeSubItemFromMetadata, };
@@ -0,0 +1,19 @@
1
+ declare function getUSEnhancedRegions(metadata: any): {
2
+ regionLocationMinY0: number;
3
+ regionLocationMaxY1: number;
4
+ regionLocationMinX0: number;
5
+ regionLocationMaxX1: number;
6
+ referencePixelX0: number;
7
+ referencePixelY0: number;
8
+ physicalDeltaX: number;
9
+ physicalDeltaY: number;
10
+ physicalUnitsXDirection: number;
11
+ physicalUnitsYDirection: number;
12
+ referencePhysicalPixelValueY: number;
13
+ referencePhysicalPixelValueX: number;
14
+ regionSpatialFormat: number;
15
+ regionDataType: number;
16
+ regionFlags: number;
17
+ transducerFrequency: number;
18
+ }[];
19
+ export { getUSEnhancedRegions };
@@ -0,0 +1,46 @@
1
+ import { getFirstNumberValue } from './getFirstNumberValue';
2
+ import getSequenceItems from './getSequenceItems';
3
+ function getUSEnhancedRegions(metadata) {
4
+ const sequenceOfUltrasoundRegions = getSequenceItems(metadata['00186011']);
5
+ if (!sequenceOfUltrasoundRegions || !sequenceOfUltrasoundRegions.length) {
6
+ return null;
7
+ }
8
+ const regions = sequenceOfUltrasoundRegions.map((sequence) => {
9
+ const physicalDeltaX = getFirstNumberValue(sequence, '0018602C');
10
+ const physicalDeltaY = getFirstNumberValue(sequence, '0018602E');
11
+ const physicalUnitsXDirection = getFirstNumberValue(sequence, '00186024');
12
+ const physicalUnitsYDirection = getFirstNumberValue(sequence, '00186026');
13
+ const regionLocationMinY0 = getFirstNumberValue(sequence, '0018601A');
14
+ const regionLocationMaxY1 = getFirstNumberValue(sequence, '0018601E');
15
+ const regionLocationMinX0 = getFirstNumberValue(sequence, '00186018');
16
+ const regionLocationMaxX1 = getFirstNumberValue(sequence, '0018601C');
17
+ const referencePixelX0 = getFirstNumberValue(sequence, '00186020');
18
+ const referencePixelY0 = getFirstNumberValue(sequence, '00186022');
19
+ const referencePhysicalPixelValueY = getFirstNumberValue(sequence, '0018602A');
20
+ const referencePhysicalPixelValueX = getFirstNumberValue(sequence, '00186028');
21
+ const regionSpatialFormat = getFirstNumberValue(sequence, '00186012');
22
+ const regionDataType = getFirstNumberValue(sequence, '00186014');
23
+ const regionFlags = getFirstNumberValue(sequence, '00186016');
24
+ const transducerFrequency = getFirstNumberValue(sequence, '00186030');
25
+ return {
26
+ regionLocationMinY0,
27
+ regionLocationMaxY1,
28
+ regionLocationMinX0,
29
+ regionLocationMaxX1,
30
+ referencePixelX0,
31
+ referencePixelY0,
32
+ physicalDeltaX,
33
+ physicalDeltaY,
34
+ physicalUnitsXDirection,
35
+ physicalUnitsYDirection,
36
+ referencePhysicalPixelValueY,
37
+ referencePhysicalPixelValueX,
38
+ regionSpatialFormat,
39
+ regionDataType,
40
+ regionFlags,
41
+ transducerFrequency,
42
+ };
43
+ });
44
+ return regions;
45
+ }
46
+ export { getUSEnhancedRegions };
@@ -0,0 +1,3 @@
1
+ declare function extractOrientationFromMetadata(metaData: any): number[];
2
+ declare function extractPositionFromMetadata(metaData: any): number[];
3
+ export { extractOrientationFromMetadata, extractPositionFromMetadata };
@@ -0,0 +1,18 @@
1
+ import getNumberValues from './getNumberValues';
2
+ import { extractOrientationFromNMMultiframeMetadata, extractPositionFromNMMultiframeMetadata, isNMModality, } from './NMHelpers';
3
+ function extractOrientationFromMetadata(metaData) {
4
+ let imageOrientationPatient = getNumberValues(metaData['00200037'], 6);
5
+ if (!imageOrientationPatient && isNMModality(metaData)) {
6
+ imageOrientationPatient =
7
+ extractOrientationFromNMMultiframeMetadata(metaData);
8
+ }
9
+ return imageOrientationPatient;
10
+ }
11
+ function extractPositionFromMetadata(metaData) {
12
+ let imagePositionPatient = getNumberValues(metaData['00200032'], 3);
13
+ if (!imagePositionPatient && isNMModality(metaData)) {
14
+ imagePositionPatient = extractPositionFromNMMultiframeMetadata(metaData);
15
+ }
16
+ return imagePositionPatient;
17
+ }
18
+ export { extractOrientationFromMetadata, extractPositionFromMetadata };
@@ -0,0 +1,2 @@
1
+ declare function getFirstNumberValue(sequence: unknown, key: string): number | null;
2
+ export { getFirstNumberValue };
@@ -0,0 +1,6 @@
1
+ import getNumberValues from './getNumberValues';
2
+ function getFirstNumberValue(sequence, key) {
3
+ const values = getNumberValues(sequence[key]);
4
+ return values ? values[0] : null;
5
+ }
6
+ export { getFirstNumberValue };
@@ -0,0 +1,3 @@
1
+ import type { WADORSMetaDataElement } from '../../../types';
2
+ declare function getNumberString(element: WADORSMetaDataElement, index: number, defaultValue: number): number;
3
+ export default getNumberString;
@@ -0,0 +1,9 @@
1
+ import getValue from './getValue';
2
+ function getNumberString(element, index, defaultValue) {
3
+ const value = getValue(element, index, defaultValue);
4
+ if (value === undefined) {
5
+ return;
6
+ }
7
+ return parseFloat(String(value));
8
+ }
9
+ export default getNumberString;
@@ -0,0 +1,3 @@
1
+ import type { WADORSMetaDataElement } from '../../../types';
2
+ declare function getNumberValue(element: WADORSMetaDataElement, index?: number): number;
3
+ export default getNumberValue;
@@ -0,0 +1,9 @@
1
+ import getValue from './getValue';
2
+ function getNumberValue(element, index) {
3
+ const value = getValue(element, index);
4
+ if (value === undefined) {
5
+ return;
6
+ }
7
+ return parseFloat(value);
8
+ }
9
+ export default getNumberValue;
@@ -0,0 +1,3 @@
1
+ import type { WADORSMetaDataElement } from '../../../types';
2
+ declare function getNumberValues(element: WADORSMetaDataElement, minimumLength?: number): number[];
3
+ export default getNumberValues;
@@ -0,0 +1,20 @@
1
+ function getNumberValues(element, minimumLength) {
2
+ if (!element) {
3
+ return;
4
+ }
5
+ if (!element.Value) {
6
+ return;
7
+ }
8
+ if (!Array.isArray(element.Value)) {
9
+ return;
10
+ }
11
+ if (minimumLength && element.Value.length < minimumLength) {
12
+ return;
13
+ }
14
+ const values = [];
15
+ for (let i = 0; i < element.Value.length; i++) {
16
+ values.push(parseFloat(element.Value[i]));
17
+ }
18
+ return values;
19
+ }
20
+ export default getNumberValues;