larvitar 2.1.12 → 2.2.0

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/README.md CHANGED
@@ -8,9 +8,9 @@
8
8
 
9
9
  ## Dicom Image Toolkit for CornerstoneJS
10
10
 
11
- ### Current version: 2.1.12
11
+ ### Current version: 2.2.0
12
12
 
13
- ### Latest Published Release: 2.1.12
13
+ ### Latest Published Release: 2.2.0
14
14
 
15
15
  This library provides common DICOM functionalities to be used in web-applications: it's wrapper that simplifies the use of cornerstone-js environment.
16
16
 
@@ -4,24 +4,13 @@
4
4
  */
5
5
  import { ImageObject } from "./types";
6
6
  import { getLarvitarManager } from "./loaders/commonLoader";
7
- declare const globalConfig: {
8
- maxWebWorkers: number;
9
- startWebWorkersOnDemand: boolean;
10
- taskConfiguration: {
11
- decodeTask: {
12
- loadCodecsOnStartup: boolean;
13
- initializeCodecsOnStartup: boolean;
14
- strict: boolean;
15
- };
16
- };
17
- };
18
7
  /**
19
8
  * Configure DICOMImageLoader
20
9
  * @instance
21
10
  * @function initializeImageLoader
22
- * @param {Object} config - Custom config @default globalConfig
11
+ * @param {number} maxConcurrency - Optional maximum number of web workers
23
12
  */
24
- export declare const initializeImageLoader: (config?: typeof globalConfig) => void;
13
+ export declare const initializeImageLoader: (maxConcurrency?: number) => void;
25
14
  /**
26
15
  * Configure cornerstoneWebImageLoader
27
16
  * @instance
@@ -68,4 +57,3 @@ export declare const registerDsaImageLoader: () => void;
68
57
  * @param {number} sliceIndex - Optional custom index to overwrite slice index as default one
69
58
  */
70
59
  export declare const updateLoadedStack: (seriesData: ImageObject, allSeriesStack: ReturnType<typeof getLarvitarManager>, customId?: string, sliceIndex?: number) => void;
71
- export {};
@@ -175,9 +175,9 @@ export declare const rotateImageLeft: (elementId: string | HTMLElement) => void;
175
175
  */
176
176
  export declare const rotateImageRight: (elementId: string | HTMLElement) => void;
177
177
  /**
178
- * Update Larvitar manager viewport data
178
+ * Update Larvitar manager temporal viewport data
179
179
  * @instance
180
- * @function updateViewportDataInLarvitarManager
180
+ * @function updateTemporalViewportData
181
181
  * @param {Series} seriesStack The Id of the series
182
182
  * @param {String} elementId The Id of the html element
183
183
  */
@@ -20,21 +20,22 @@ export declare const cacheImage: (seriesData: Series, imageIndex: number) => Pro
20
20
  */
21
21
  export declare const cacheImages: (seriesData: Series, callback?: Function) => Promise<void>;
22
22
  /**
23
- * Unload DSA Image Stack and Recache Image Stack for DSA
23
+ * Load and cache image stack
24
24
  * @instance
25
- * @function unloadAndRecacheImageStackDSA
25
+ * @function loadAndCacheImageStack
26
26
  * @param {Object} seriesData The series data
27
27
  * @return {Promise} Promise object represents the loading and caching of the image stack
28
28
  */
29
- export declare const unloadAndRecacheImageStackDSA: (seriesData: Series) => Promise<void>;
29
+ export declare const loadAndCacheImageStack: (seriesData: Series) => Promise<void>;
30
30
  /**
31
31
  * Load and cache image stack
32
32
  * @instance
33
- * @function loadAndCacheImageStack
33
+ * @function loadAndCacheDsaImageStack
34
34
  * @param {Object} seriesData The series data
35
+ * @param {boolean} forceRecache Optional parameter to force recache
35
36
  * @return {Promise} Promise object represents the loading and caching of the image stack
36
37
  */
37
- export declare const loadAndCacheImageStack: (seriesData: Series) => Promise<void>;
38
+ export declare const loadAndCacheDsaImageStack: (seriesData: Series, forceRecache?: boolean) => Promise<void>;
38
39
  /**
39
40
  * Get the dicom imageId from dicom loader
40
41
  * @instance
package/dist/index.d.ts CHANGED
@@ -26,7 +26,7 @@ import { DEFAULT_TOOLS, dvTools, getDefaultToolsByType, setDefaultToolsProps, re
26
26
  import { initSegmentationModule, addSegmentationMask, clearSegmentationState, deleteMask, setActiveLabelmap, setActiveSegment, enableBrushTool, disableBrushTool, undoLastStroke, redoLastStroke, setBrushProps, toggleContourMode, toggleVisibility, hexToRgb, rgbToHex, getActiveLabelmapBuffer } from "./imaging/tools/segmentation";
27
27
  import { updateLarvitarManager, populateLarvitarManager, getLarvitarManager, getLarvitarImageTracker, resetLarvitarManager, removeSeriesFromLarvitarManager, getSeriesDataFromLarvitarManager, getImageFrame, getSopInstanceUIDFromLarvitarManager } from "./imaging/loaders/commonLoader";
28
28
  import { buildNrrdImage, getNrrdImageId, loadNrrdImage, getImageIdFromSlice, getSliceNumberFromImageId, getNrrdSerieDimensions } from "./imaging/loaders/nrrdLoader";
29
- import { getDicomImageId, cacheImage, cacheImages, loadAndCacheImageStack, unloadAndRecacheImageStackDSA } from "./imaging/loaders/dicomLoader";
29
+ import { getDicomImageId, cacheImage, cacheImages, loadAndCacheImageStack, loadAndCacheDsaImageStack } from "./imaging/loaders/dicomLoader";
30
30
  import { loadReslicedImage } from "./imaging/loaders/resliceLoader";
31
31
  import { loadMultiFrameImage, buildMultiFrameImage, getMultiFrameImageId, clearMultiFrameCache } from "./imaging/loaders/multiframeLoader";
32
32
  import { populateDsaImageIds } from "./imaging/loaders/dsaImageLoader";
@@ -35,4 +35,4 @@ import { getColormapsList, applyColorMap, addColorMap, fillPixelData, HSVToRGB }
35
35
  import { applyDSAShift } from "./imaging/postProcessing/applyDSA";
36
36
  import { saveAnnotations, loadAnnotations } from "./imaging/tools/io";
37
37
  import { addMouseKeyHandlers, removeMouseKeyHandlers, toggleMouseToolsListeners } from "./imaging/tools/interaction";
38
- export { VERSION, cornerstone, cornerstoneTools, parseDicom, segModule, cornerstoneDICOMImageLoader, checkAndClearMemory, checkMemoryAllocation, getUsedMemory, getAvailableMemory, getPerformanceMonitor, activatePerformanceMonitor, deactivatePerformanceMonitor, store, parseECG, renderECG, unrenderECG, syncECGFrame, updateECGFrame, getDefaultECGLayout, getImagePresets, setImagePreset, setImageCustomPreset, getNormalOrientation, getMinPixelValue, getMaxPixelValue, getPixelRepresentation, getTypedArrayFromDataType, getSortedStack, randomId, getMeanValue, getReslicedMetadata, getReslicedPixeldata, getDistanceBetweenSlices, getImageMetadata, buildHeader, getCachedPixelData, buildData, buildDataAsync, importNRRDImage, exportImageToBase64, anonymize, buildLayer, updateLayer, getActiveLayer, setActiveLayer, initializeImageLoader, initializeWebImageLoader, initializeFileImageLoader, registerNRRDImageLoader, registerResliceLoader, registerMultiFrameImageLoader, registerDsaImageLoader, updateLoadedStack, readFile, readFiles, parseDataSet, clearImageParsing, clearImageCache, loadAndCacheImages, renderFileImage, renderDICOMPDF, renderWebImage, disableViewport, unloadViewport, resizeViewport, renderImage, updateImage, redrawImage, resetViewports, updateViewportData, toggleMouseToolsListeners, storeViewportData, invertImage, flipImageHorizontal, flipImageVertical, rotateImageLeft, rotateImageRight, resliceSeries, getColormapsList, applyColorMap, addColorMap, fillPixelData, HSVToRGB, parseContours, updateLarvitarManager, populateLarvitarManager, getLarvitarManager, getLarvitarImageTracker, resetLarvitarManager, removeSeriesFromLarvitarManager, getSeriesDataFromLarvitarManager, getImageFrame, getSopInstanceUIDFromLarvitarManager, buildNrrdImage, getNrrdImageId, loadNrrdImage, getImageIdFromSlice, getSliceNumberFromImageId, getNrrdSerieDimensions, loadReslicedImage, getDicomImageId, cacheImage, cacheImages, loadAndCacheImageStack, unloadAndRecacheImageStackDSA, loadMultiFrameImage, buildMultiFrameImage, getMultiFrameImageId, clearMultiFrameCache, populateDsaImageIds, getFileManager, resetFileLoader, resetFileManager, populateFileManager, getFileImageId, applyDSAShift, addDiameterTool, addContoursTool, addMaskEditingTool, getCurrentMaskData, addStackStateToElement, addSeedsTool, clearMeasurements, getToolState, clearToolStateByName, updateDiameterTool, addToolStateSingleSlice, clearCornerstoneElements, syncToolStack, updateStackToolState, setSegmentationConfig, csToolsCreateStack, csToolsUpdateImageIds, csToolsUpdateImageIndex, initializeCSTools, setToolsStyle, addDefaultTools, addTool, setToolActive, setToolDisabled, setToolEnabled, setToolPassive, exportAnnotations, DEFAULT_TOOLS, dvTools, getDefaultToolsByType, setDefaultToolsProps, registerExternalTool, saveAnnotations, loadAnnotations, addMouseKeyHandlers, removeMouseKeyHandlers, initSegmentationModule, addSegmentationMask, setActiveLabelmap, setActiveSegment, undoLastStroke, redoLastStroke, setBrushProps, hexToRgb, rgbToHex, clearSegmentationState, deleteMask, enableBrushTool, disableBrushTool, toggleContourMode, toggleVisibility, getActiveLabelmapBuffer, updateTemporalViewportData };
38
+ export { VERSION, cornerstone, cornerstoneTools, parseDicom, segModule, cornerstoneDICOMImageLoader, checkAndClearMemory, checkMemoryAllocation, getUsedMemory, getAvailableMemory, getPerformanceMonitor, activatePerformanceMonitor, deactivatePerformanceMonitor, store, parseECG, renderECG, unrenderECG, syncECGFrame, updateECGFrame, getDefaultECGLayout, getImagePresets, setImagePreset, setImageCustomPreset, getNormalOrientation, getMinPixelValue, getMaxPixelValue, getPixelRepresentation, getTypedArrayFromDataType, getSortedStack, randomId, getMeanValue, getReslicedMetadata, getReslicedPixeldata, getDistanceBetweenSlices, getImageMetadata, buildHeader, getCachedPixelData, buildData, buildDataAsync, importNRRDImage, exportImageToBase64, anonymize, buildLayer, updateLayer, getActiveLayer, setActiveLayer, initializeImageLoader, initializeWebImageLoader, initializeFileImageLoader, registerNRRDImageLoader, registerResliceLoader, registerMultiFrameImageLoader, registerDsaImageLoader, updateLoadedStack, readFile, readFiles, parseDataSet, clearImageParsing, clearImageCache, loadAndCacheImages, renderFileImage, renderDICOMPDF, renderWebImage, disableViewport, unloadViewport, resizeViewport, renderImage, updateImage, redrawImage, resetViewports, updateViewportData, toggleMouseToolsListeners, storeViewportData, invertImage, flipImageHorizontal, flipImageVertical, rotateImageLeft, rotateImageRight, resliceSeries, getColormapsList, applyColorMap, addColorMap, fillPixelData, HSVToRGB, parseContours, updateLarvitarManager, populateLarvitarManager, getLarvitarManager, getLarvitarImageTracker, resetLarvitarManager, removeSeriesFromLarvitarManager, getSeriesDataFromLarvitarManager, getImageFrame, getSopInstanceUIDFromLarvitarManager, buildNrrdImage, getNrrdImageId, loadNrrdImage, getImageIdFromSlice, getSliceNumberFromImageId, getNrrdSerieDimensions, loadReslicedImage, getDicomImageId, cacheImage, cacheImages, loadAndCacheImageStack, loadAndCacheDsaImageStack, loadMultiFrameImage, buildMultiFrameImage, getMultiFrameImageId, clearMultiFrameCache, populateDsaImageIds, getFileManager, resetFileLoader, resetFileManager, populateFileManager, getFileImageId, applyDSAShift, addDiameterTool, addContoursTool, addMaskEditingTool, getCurrentMaskData, addStackStateToElement, addSeedsTool, clearMeasurements, getToolState, clearToolStateByName, updateDiameterTool, addToolStateSingleSlice, clearCornerstoneElements, syncToolStack, updateStackToolState, setSegmentationConfig, csToolsCreateStack, csToolsUpdateImageIds, csToolsUpdateImageIndex, initializeCSTools, setToolsStyle, addDefaultTools, addTool, setToolActive, setToolDisabled, setToolEnabled, setToolPassive, exportAnnotations, DEFAULT_TOOLS, dvTools, getDefaultToolsByType, setDefaultToolsProps, registerExternalTool, saveAnnotations, loadAnnotations, addMouseKeyHandlers, removeMouseKeyHandlers, initSegmentationModule, addSegmentationMask, setActiveLabelmap, setActiveSegment, undoLastStroke, redoLastStroke, setBrushProps, hexToRgb, rgbToHex, clearSegmentationState, deleteMask, enableBrushTool, disableBrushTool, toggleContourMode, toggleVisibility, getActiveLabelmapBuffer, updateTemporalViewportData };
package/dist/larvitar.js CHANGED
@@ -157047,7 +157047,7 @@ const dsaImageLoader_1 = __webpack_require__(6475);
157047
157047
  * @property {String} webWorkerPath - path to default DICOM web worker
157048
157048
  * @property {} - see https://github.com/cornerstonejs/cornerstoneDICOMImageLoader/blob/master/docs/WebWorkers.md
157049
157049
  */
157050
- const MAX_CONCURRENCY = 6;
157050
+ const MAX_CONCURRENCY = 32;
157051
157051
  const globalConfig = {
157052
157052
  maxWebWorkers: Math.max(Math.min(navigator.hardwareConcurrency - 1, MAX_CONCURRENCY), 1),
157053
157053
  startWebWorkersOnDemand: true,
@@ -157061,7 +157061,7 @@ const globalConfig = {
157061
157061
  };
157062
157062
  /*
157063
157063
  * This module provides the following functions to be exported:
157064
- * initializeImageLoader(config)
157064
+ * initializeImageLoader(maxConcurrency)
157065
157065
  * initializeWebImageLoader()
157066
157066
  * initializeFileImageLoader()
157067
157067
  * registerNRRDImageLoader()
@@ -157072,13 +157072,17 @@ const globalConfig = {
157072
157072
  * Configure DICOMImageLoader
157073
157073
  * @instance
157074
157074
  * @function initializeImageLoader
157075
- * @param {Object} config - Custom config @default globalConfig
157075
+ * @param {number} maxConcurrency - Optional maximum number of web workers
157076
157076
  */
157077
- const initializeImageLoader = function (config) {
157078
- let imageLoaderConfig = config ? config : globalConfig;
157077
+ const initializeImageLoader = function (maxConcurrency) {
157078
+ if (maxConcurrency) {
157079
+ const maxWebWorkers = Math.max(Math.min(navigator.hardwareConcurrency - 1, MAX_CONCURRENCY), 1);
157080
+ globalConfig.maxWebWorkers = maxWebWorkers;
157081
+ }
157079
157082
  cornerstone_wado_image_loader_1.default.external.cornerstone = cornerstone_core_1.default;
157080
157083
  cornerstone_wado_image_loader_1.default.external.dicomParser = dicom_parser_1.default;
157081
- cornerstone_wado_image_loader_1.default.webWorkerManager.initialize(imageLoaderConfig);
157084
+ cornerstone_wado_image_loader_1.default.webWorkerManager.initialize(globalConfig);
157085
+ console.log(`CornestoneDICOMImageLoader initialized with ${globalConfig.maxWebWorkers} WebWorkers.`);
157082
157086
  };
157083
157087
  exports.initializeImageLoader = initializeImageLoader;
157084
157088
  /**
@@ -158430,22 +158434,23 @@ const updateImage = function (series, elementId, imageIndex, cacheImage) {
158430
158434
  if ((0, performance_1.getPerformanceMonitor)() === true) {
158431
158435
  t0 = performance.now();
158432
158436
  }
158433
- const image = yield cornerstone_core_1.default.loadAndCacheImage(imageId);
158434
- cornerstone_core_1.default.displayImage(element, image);
158435
- if ((0, performance_1.getPerformanceMonitor)() === true) {
158436
- const t1 = performance.now();
158437
- if (t0 !== undefined) {
158438
- // check if t0 is defined before using it
158439
- console.log(`Call to updateImage for viewport ${id} took ${t1 - t0} milliseconds.`);
158437
+ cornerstone_core_1.default.loadAndCacheImage(imageId).then(function (image) {
158438
+ cornerstone_core_1.default.displayImage(element, image);
158439
+ if ((0, performance_1.getPerformanceMonitor)() === true) {
158440
+ const t1 = performance.now();
158441
+ if (t0 !== undefined) {
158442
+ // check if t0 is defined before using it
158443
+ console.log(`Call to updateImage for viewport ${id} took ${t1 - t0} milliseconds.`);
158444
+ }
158440
158445
  }
158441
- }
158442
- (0, imageStore_1.set)(["sliceId", id, imageIndex]);
158443
- const pendingSliceId = imageStore_1.default.get(["viewports", id, "pendingSliceId"]);
158444
- if (imageIndex == pendingSliceId) {
158445
- (0, imageStore_1.set)(["pendingSliceId", id, undefined]);
158446
- }
158447
- (0, imageStore_1.set)(["minPixelValue", id, image.minPixelValue]);
158448
- (0, imageStore_1.set)(["maxPixelValue", id, image.maxPixelValue]);
158446
+ (0, imageStore_1.set)(["sliceId", id, imageIndex]);
158447
+ const pendingSliceId = imageStore_1.default.get(["viewports", id, "pendingSliceId"]);
158448
+ if (imageIndex == pendingSliceId) {
158449
+ (0, imageStore_1.set)(["pendingSliceId", id, undefined]);
158450
+ }
158451
+ (0, imageStore_1.set)(["minPixelValue", id, image.minPixelValue]);
158452
+ (0, imageStore_1.set)(["maxPixelValue", id, image.maxPixelValue]);
158453
+ });
158449
158454
  }
158450
158455
  else {
158451
158456
  let t0;
@@ -158801,9 +158806,9 @@ const rotateImageRight = function (elementId) {
158801
158806
  };
158802
158807
  exports.rotateImageRight = rotateImageRight;
158803
158808
  /**
158804
- * Update Larvitar manager viewport data
158809
+ * Update Larvitar manager temporal viewport data
158805
158810
  * @instance
158806
- * @function updateViewportDataInLarvitarManager
158811
+ * @function updateTemporalViewportData
158807
158812
  * @param {Series} seriesStack The Id of the series
158808
158813
  * @param {String} elementId The Id of the html element
158809
158814
  */
@@ -161192,7 +161197,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
161192
161197
  return (mod && mod.__esModule) ? mod : { "default": mod };
161193
161198
  };
161194
161199
  Object.defineProperty(exports, "__esModule", ({ value: true }));
161195
- exports.getDicomImageId = exports.loadAndCacheImageStack = exports.unloadAndRecacheImageStackDSA = exports.cacheImages = exports.cacheImage = void 0;
161200
+ exports.getDicomImageId = exports.loadAndCacheDsaImageStack = exports.loadAndCacheImageStack = exports.cacheImages = exports.cacheImage = void 0;
161196
161201
  // external libraries
161197
161202
  const cornerstone_core_1 = __importDefault(__webpack_require__(7371));
161198
161203
  // internal libraries
@@ -161202,7 +161207,7 @@ const imageStore_1 = __importDefault(__webpack_require__(5278));
161202
161207
  * This module provides the following functions to be exported:
161203
161208
  * cacheImage(seriesData, imageIndex)
161204
161209
  * loadAndCacheImageStack(seriesData)
161205
- * unloadAndRecacheImageStackDSA(seriesData)
161210
+ * loadAndCacheDsaImageStack(seriesData, forceRecache)
161206
161211
  * cacheImages(seriesData, callback)
161207
161212
  * getDicomImageId(dicomLoaderName)
161208
161213
  */
@@ -161241,94 +161246,75 @@ const cacheImages = function (seriesData, callback) {
161241
161246
  };
161242
161247
  exports.cacheImages = cacheImages;
161243
161248
  /**
161244
- * Unload DSA Image Stack and Recache Image Stack for DSA
161249
+ * Load and cache image stack
161245
161250
  * @instance
161246
- * @function unloadAndRecacheImageStackDSA
161251
+ * @function loadAndCacheImageStack
161247
161252
  * @param {Object} seriesData The series data
161248
161253
  * @return {Promise} Promise object represents the loading and caching of the image stack
161249
161254
  */
161250
- const unloadAndRecacheImageStackDSA = function (seriesData) {
161255
+ const loadAndCacheImageStack = function (seriesData) {
161251
161256
  return __awaiter(this, void 0, void 0, function* () {
161252
- return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
161257
+ return new Promise((resolve, _) => __awaiter(this, void 0, void 0, function* () {
161253
161258
  const t0 = performance.now();
161259
+ imageStore_1.default.addSeriesId(seriesData.seriesUID, seriesData.imageIds);
161260
+ let imageIds = seriesData.imageIds;
161254
161261
  // add DSA imageIds to store
161255
- if (seriesData.dsa === undefined) {
161256
- console.warn("DSA image stack is not available");
161257
- reject();
161258
- return;
161259
- }
161260
- let promises = new Array(seriesData.dsa.imageIds.length);
161261
- function cacheImageStack(imageIds, index) {
161262
- return __awaiter(this, void 0, void 0, function* () {
161263
- if (index < imageIds.length) {
161264
- const imageId = imageIds[index];
161265
- if (imageId) {
161266
- yield cornerstone_core_1.default.imageCache.removeImageLoadObject(imageId);
161267
- yield cornerstone_core_1.default.loadAndCacheImage(imageId).then(promise => {
161268
- promises[index] = Promise.resolve(promise);
161269
- });
161270
- }
161271
- else {
161272
- console.warn(`Stack is not fully loaded, skipping cache for index ${index}`);
161273
- }
161274
- yield cacheImageStack(imageIds, index + 1);
161275
- }
161276
- });
161262
+ if (seriesData.dsa !== undefined) {
161263
+ const dsaSeriesUID = seriesData.seriesUID + "-DSA";
161264
+ imageStore_1.default.addSeriesId(dsaSeriesUID, seriesData.dsa.imageIds);
161277
161265
  }
161278
- yield cacheImageStack(seriesData.dsa.imageIds, 0);
161279
- yield Promise.all(promises);
161280
- const t1 = performance.now();
161281
- console.log(`Call to unloadAndRecacheImageStackDSA took ${t1 - t0} milliseconds.`);
161282
- resolve();
161266
+ // load and cache image stack
161267
+ const promises = imageIds.map(imageId => {
161268
+ return cornerstone_core_1.default.loadAndCacheImage(imageId);
161269
+ });
161270
+ Promise.all(promises).then(() => {
161271
+ const t1 = performance.now();
161272
+ console.log(`Call to loadAndCacheImageStack took ${t1 - t0} milliseconds.`);
161273
+ resolve();
161274
+ });
161283
161275
  }));
161284
161276
  });
161285
161277
  };
161286
- exports.unloadAndRecacheImageStackDSA = unloadAndRecacheImageStackDSA;
161278
+ exports.loadAndCacheImageStack = loadAndCacheImageStack;
161287
161279
  /**
161288
161280
  * Load and cache image stack
161289
161281
  * @instance
161290
- * @function loadAndCacheImageStack
161282
+ * @function loadAndCacheDsaImageStack
161291
161283
  * @param {Object} seriesData The series data
161284
+ * @param {boolean} forceRecache Optional parameter to force recache
161292
161285
  * @return {Promise} Promise object represents the loading and caching of the image stack
161293
161286
  */
161294
- const loadAndCacheImageStack = function (seriesData) {
161287
+ const loadAndCacheDsaImageStack = function (seriesData, forceRecache = false) {
161295
161288
  return __awaiter(this, void 0, void 0, function* () {
161296
- return new Promise((resolve, _) => __awaiter(this, void 0, void 0, function* () {
161289
+ return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
161297
161290
  const t0 = performance.now();
161298
- imageStore_1.default.addSeriesId(seriesData.seriesUID, seriesData.imageIds);
161299
- let imageIds = seriesData.imageIds;
161300
161291
  // add DSA imageIds to store
161301
- if (seriesData.dsa !== undefined) {
161302
- const dsaSeriesUID = seriesData.seriesUID + "-DSA";
161303
- imageStore_1.default.addSeriesId(dsaSeriesUID, seriesData.dsa.imageIds);
161304
- imageIds = imageIds.concat(seriesData.dsa.imageIds);
161292
+ if (seriesData.dsa === undefined) {
161293
+ console.warn("DSA image stack is not available");
161294
+ reject();
161295
+ return;
161305
161296
  }
161306
- let promises = new Array(imageIds.length);
161307
- function cacheImageStack(imageIds, index) {
161308
- return __awaiter(this, void 0, void 0, function* () {
161309
- if (index < imageIds.length) {
161310
- const imageId = imageIds[index];
161311
- if (imageId) {
161312
- yield cornerstone_core_1.default.loadAndCacheImage(imageId).then(promise => {
161313
- promises[index] = Promise.resolve(promise);
161314
- });
161315
- }
161316
- else {
161317
- console.warn(`Stack is not fully loaded, skipping cache for index ${index}`);
161318
- }
161319
- yield cacheImageStack(imageIds, index + 1);
161297
+ if (seriesData.dsa.imageIds.length > 0) {
161298
+ const dsaPromises = seriesData.dsa.imageIds.map(imageId => {
161299
+ if (forceRecache) {
161300
+ cornerstone_core_1.default.imageCache.removeImageLoadObject(imageId);
161320
161301
  }
161302
+ return cornerstone_core_1.default.loadAndCacheImage(imageId);
161303
+ });
161304
+ Promise.all(dsaPromises).then(() => {
161305
+ const t1 = performance.now();
161306
+ console.log(`Call to loadAndCacheDsaImageStack took ${t1 - t0} milliseconds.`);
161307
+ resolve();
161321
161308
  });
161322
161309
  }
161323
- yield cacheImageStack(imageIds, 0);
161324
- yield Promise.all(promises);
161325
- const t1 = performance.now();
161326
- console.log(`Call to loadAndCacheImageStack took ${t1 - t0} milliseconds.`);
161327
- resolve();
161310
+ else {
161311
+ console.warn("DSA image stack is empty");
161312
+ reject();
161313
+ }
161328
161314
  }));
161329
161315
  });
161330
161316
  };
161331
- exports.loadAndCacheImageStack = loadAndCacheImageStack;
161317
+ exports.loadAndCacheDsaImageStack = loadAndCacheDsaImageStack;
161332
161318
  /**
161333
161319
  * Get the dicom imageId from dicom loader
161334
161320
  * @instance
@@ -161936,6 +161922,12 @@ let createCustomImage = function (id, imageId, frameIndex, metadata) {
161936
161922
  image.windowCenter = (maxVoi + minVoi) / 2;
161937
161923
  }
161938
161924
  }
161925
+ // @ts-ignore: is needed to clear the cache
161926
+ dataSet = null;
161927
+ // @ts-ignore: is needed to clear the cache
161928
+ pixelDataElement = null;
161929
+ // @ts-ignore: is needed to clear the cache
161930
+ pixelData = null;
161939
161931
  resolve(image);
161940
161932
  }, reject);
161941
161933
  });
@@ -166653,7 +166645,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
166653
166645
  Object.defineProperty(exports, "__esModule", ({ value: true }));
166654
166646
  exports.registerNRRDImageLoader = exports.initializeFileImageLoader = exports.initializeWebImageLoader = exports.initializeImageLoader = exports.setActiveLayer = exports.getActiveLayer = exports.updateLayer = exports.buildLayer = exports.anonymize = exports.exportImageToBase64 = exports.importNRRDImage = exports.buildDataAsync = exports.buildData = exports.getCachedPixelData = exports.buildHeader = exports.getImageMetadata = exports.getDistanceBetweenSlices = exports.getReslicedPixeldata = exports.getReslicedMetadata = exports.getMeanValue = exports.randomId = exports.getSortedStack = exports.getTypedArrayFromDataType = exports.getPixelRepresentation = exports.getMaxPixelValue = exports.getMinPixelValue = exports.getNormalOrientation = exports.setImageCustomPreset = exports.setImagePreset = exports.getImagePresets = exports.getDefaultECGLayout = exports.updateECGFrame = exports.syncECGFrame = exports.unrenderECG = exports.renderECG = exports.parseECG = exports.store = exports.deactivatePerformanceMonitor = exports.activatePerformanceMonitor = exports.getPerformanceMonitor = exports.getAvailableMemory = exports.getUsedMemory = exports.checkMemoryAllocation = exports.checkAndClearMemory = exports.cornerstoneDICOMImageLoader = exports.segModule = exports.parseDicom = exports.cornerstoneTools = exports.cornerstone = exports.VERSION = void 0;
166655
166647
  exports.getNrrdSerieDimensions = exports.getSliceNumberFromImageId = exports.getImageIdFromSlice = exports.loadNrrdImage = exports.getNrrdImageId = exports.buildNrrdImage = exports.getSopInstanceUIDFromLarvitarManager = exports.getImageFrame = exports.getSeriesDataFromLarvitarManager = exports.removeSeriesFromLarvitarManager = exports.resetLarvitarManager = exports.getLarvitarImageTracker = exports.getLarvitarManager = exports.populateLarvitarManager = exports.updateLarvitarManager = exports.parseContours = exports.HSVToRGB = exports.fillPixelData = exports.addColorMap = exports.applyColorMap = exports.getColormapsList = exports.resliceSeries = exports.rotateImageRight = exports.rotateImageLeft = exports.flipImageVertical = exports.flipImageHorizontal = exports.invertImage = exports.storeViewportData = exports.toggleMouseToolsListeners = exports.updateViewportData = exports.resetViewports = exports.redrawImage = exports.updateImage = exports.renderImage = exports.resizeViewport = exports.unloadViewport = exports.disableViewport = exports.renderWebImage = exports.renderDICOMPDF = exports.renderFileImage = exports.loadAndCacheImages = exports.clearImageCache = exports.clearImageParsing = exports.parseDataSet = exports.readFiles = exports.readFile = exports.updateLoadedStack = exports.registerDsaImageLoader = exports.registerMultiFrameImageLoader = exports.registerResliceLoader = void 0;
166656
- exports.saveAnnotations = exports.registerExternalTool = exports.setDefaultToolsProps = exports.getDefaultToolsByType = exports.dvTools = exports.DEFAULT_TOOLS = exports.exportAnnotations = exports.setToolPassive = exports.setToolEnabled = exports.setToolDisabled = exports.setToolActive = exports.addTool = exports.addDefaultTools = exports.setToolsStyle = exports.initializeCSTools = exports.csToolsUpdateImageIndex = exports.csToolsUpdateImageIds = exports.csToolsCreateStack = exports.setSegmentationConfig = exports.updateStackToolState = exports.syncToolStack = exports.clearCornerstoneElements = exports.addToolStateSingleSlice = exports.updateDiameterTool = exports.clearToolStateByName = exports.getToolState = exports.clearMeasurements = exports.addSeedsTool = exports.addStackStateToElement = exports.getCurrentMaskData = exports.addMaskEditingTool = exports.addContoursTool = exports.addDiameterTool = exports.applyDSAShift = exports.getFileImageId = exports.populateFileManager = exports.resetFileManager = exports.resetFileLoader = exports.getFileManager = exports.populateDsaImageIds = exports.clearMultiFrameCache = exports.getMultiFrameImageId = exports.buildMultiFrameImage = exports.loadMultiFrameImage = exports.unloadAndRecacheImageStackDSA = exports.loadAndCacheImageStack = exports.cacheImages = exports.cacheImage = exports.getDicomImageId = exports.loadReslicedImage = void 0;
166648
+ exports.saveAnnotations = exports.registerExternalTool = exports.setDefaultToolsProps = exports.getDefaultToolsByType = exports.dvTools = exports.DEFAULT_TOOLS = exports.exportAnnotations = exports.setToolPassive = exports.setToolEnabled = exports.setToolDisabled = exports.setToolActive = exports.addTool = exports.addDefaultTools = exports.setToolsStyle = exports.initializeCSTools = exports.csToolsUpdateImageIndex = exports.csToolsUpdateImageIds = exports.csToolsCreateStack = exports.setSegmentationConfig = exports.updateStackToolState = exports.syncToolStack = exports.clearCornerstoneElements = exports.addToolStateSingleSlice = exports.updateDiameterTool = exports.clearToolStateByName = exports.getToolState = exports.clearMeasurements = exports.addSeedsTool = exports.addStackStateToElement = exports.getCurrentMaskData = exports.addMaskEditingTool = exports.addContoursTool = exports.addDiameterTool = exports.applyDSAShift = exports.getFileImageId = exports.populateFileManager = exports.resetFileManager = exports.resetFileLoader = exports.getFileManager = exports.populateDsaImageIds = exports.clearMultiFrameCache = exports.getMultiFrameImageId = exports.buildMultiFrameImage = exports.loadMultiFrameImage = exports.loadAndCacheDsaImageStack = exports.loadAndCacheImageStack = exports.cacheImages = exports.cacheImage = exports.getDicomImageId = exports.loadReslicedImage = void 0;
166657
166649
  exports.updateTemporalViewportData = exports.getActiveLabelmapBuffer = exports.toggleVisibility = exports.toggleContourMode = exports.disableBrushTool = exports.enableBrushTool = exports.deleteMask = exports.clearSegmentationState = exports.rgbToHex = exports.hexToRgb = exports.setBrushProps = exports.redoLastStroke = exports.undoLastStroke = exports.setActiveSegment = exports.setActiveLabelmap = exports.addSegmentationMask = exports.initSegmentationModule = exports.removeMouseKeyHandlers = exports.addMouseKeyHandlers = exports.loadAnnotations = void 0;
166658
166650
  const package_json_1 = __importDefault(__webpack_require__(4147));
166659
166651
  const VERSION = package_json_1.default.version;
@@ -166834,7 +166826,7 @@ Object.defineProperty(exports, "getDicomImageId", ({ enumerable: true, get: func
166834
166826
  Object.defineProperty(exports, "cacheImage", ({ enumerable: true, get: function () { return dicomLoader_1.cacheImage; } }));
166835
166827
  Object.defineProperty(exports, "cacheImages", ({ enumerable: true, get: function () { return dicomLoader_1.cacheImages; } }));
166836
166828
  Object.defineProperty(exports, "loadAndCacheImageStack", ({ enumerable: true, get: function () { return dicomLoader_1.loadAndCacheImageStack; } }));
166837
- Object.defineProperty(exports, "unloadAndRecacheImageStackDSA", ({ enumerable: true, get: function () { return dicomLoader_1.unloadAndRecacheImageStackDSA; } }));
166829
+ Object.defineProperty(exports, "loadAndCacheDsaImageStack", ({ enumerable: true, get: function () { return dicomLoader_1.loadAndCacheDsaImageStack; } }));
166838
166830
  const resliceLoader_1 = __webpack_require__(5779);
166839
166831
  Object.defineProperty(exports, "loadReslicedImage", ({ enumerable: true, get: function () { return resliceLoader_1.loadReslicedImage; } }));
166840
166832
  const multiframeLoader_1 = __webpack_require__(934);
@@ -167583,7 +167575,7 @@ module.exports = JSON.parse('{"x00000000":{"tag":"x00000000","vr":"UL","vm":"1",
167583
167575
  /***/ ((module) => {
167584
167576
 
167585
167577
  "use strict";
167586
- module.exports = JSON.parse('{"name":"larvitar","keywords":["DICOM","imaging","medical","cornerstone"],"version":"2.1.12","description":"typescript library for parsing, loading, rendering and interacting with DICOM images","repository":{"url":"https://github.com/dvisionlab/Larvitar.git","type":"git"},"main":"dist/larvitar.js","types":"dist/index.d.ts","files":["dist","imaging/**/*.d.ts"],"scripts":{"coverage":"typescript-coverage-report","generate-docs":"node_modules/.bin/jsdoc -c jsdoc.json","build":"webpack --config ./bundler/webpack.prod.js && cp ./dist/larvitar.js ./docs/examples/larvitar.js","dev":"webpack --progress --config ./bundler/webpack.dev.js && cp ./dist/larvitar.js ./docs/examples/larvitar.js","dev-wip":"webpack serve --config ./bundler/webpack.dev-wip.js"},"author":"Simone Manini <simone.manini@dvisionlab.com> (https://www.dvisionlab.com)","contributors":["Mattia Ronzoni <mattia.ronzoni@dvisionlab.com> (https://www.dvisionlab.com)","Sara Zanchi <sara.zanchi@dvisionlab.com> (https://www.dvisionlab.com)","Ale Re <ale.re@dvisionlab.com> (https://www.dvisionlab.com)","Laura Borghesi Re <laura.borghesi@dvisionlab.com> (https://www.dvisionlab.com)"],"license":"MIT","dependencies":{"@rollup/plugin-commonjs":"^17.1.0","cornerstone-core":"^2.6.1","cornerstone-file-image-loader":"^0.3.0","cornerstone-tools":"^6.0.7","cornerstone-wado-image-loader":"^4.13.2","cornerstone-web-image-loader":"^2.1.1","crypto-js":"^4.1.1","dicom-character-set":"^1.0.3","dicom-parser":"^1.8.13","docdash":"^1.2.0","hammerjs":"^2.0.8","jpeg-lossless-decoder-js":"^2.0.7","keycode-js":"^3.1.0","lodash":"^4.17.15","pako":"^1.0.10","papaparse":"^5.3.0","pdfjs-dist":"^3.8.162","plotly.js-dist-min":"^2.27.1","uuid":"^8.3.2"},"devDependencies":{"@babel/core":"^7.21.8","@types/cornerstone-core":"^2.3.0","@types/crypto-js":"^4.1.1","@types/hammerjs":"^2.0.41","@types/lodash":"^4.14.192","@types/papaparse":"^5.3.7","@types/pdfjs-dist":"^2.10.378","@types/plotly.js":"^2.12.30","@types/plotly.js-dist-min":"^2.3.4","@types/uuid":"^9.0.1","babel-loader":"^9.1.2","clean-webpack-plugin":"^4.0.0","copy-webpack-plugin":"^11.0.0","fs":"^0.0.1-security","html-loader":"^4.2.0","html-webpack-plugin":"^5.5.0","ip":"^1.1.8","jsdoc":"^3.6.4","portfinder-sync":"^0.0.2","ts-loader":"^9.4.2","typescript":"^5.0.2","typescript-coverage-report":"^0.7.0","webpack":"^5.76.3","webpack-bundle-analyzer":"^4.8.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.13.1"}}');
167578
+ module.exports = JSON.parse('{"name":"larvitar","keywords":["DICOM","imaging","medical","cornerstone"],"version":"2.2.0","description":"typescript library for parsing, loading, rendering and interacting with DICOM images","repository":{"url":"https://github.com/dvisionlab/Larvitar.git","type":"git"},"main":"dist/larvitar.js","types":"dist/index.d.ts","files":["dist","imaging/**/*.d.ts"],"scripts":{"coverage":"typescript-coverage-report","generate-docs":"node_modules/.bin/jsdoc -c jsdoc.json","build":"webpack --config ./bundler/webpack.prod.js && cp ./dist/larvitar.js ./docs/examples/larvitar.js","dev":"webpack --progress --config ./bundler/webpack.dev.js && cp ./dist/larvitar.js ./docs/examples/larvitar.js","dev-wip":"webpack serve --config ./bundler/webpack.dev-wip.js"},"author":"Simone Manini <simone.manini@dvisionlab.com> (https://www.dvisionlab.com)","contributors":["Mattia Ronzoni <mattia.ronzoni@dvisionlab.com> (https://www.dvisionlab.com)","Sara Zanchi <sara.zanchi@dvisionlab.com> (https://www.dvisionlab.com)","Ale Re <ale.re@dvisionlab.com> (https://www.dvisionlab.com)","Laura Borghesi Re <laura.borghesi@dvisionlab.com> (https://www.dvisionlab.com)"],"license":"MIT","dependencies":{"@rollup/plugin-commonjs":"^17.1.0","cornerstone-core":"^2.6.1","cornerstone-file-image-loader":"^0.3.0","cornerstone-tools":"^6.0.7","cornerstone-wado-image-loader":"^4.13.2","cornerstone-web-image-loader":"^2.1.1","crypto-js":"^4.1.1","dicom-character-set":"^1.0.3","dicom-parser":"^1.8.13","docdash":"^1.2.0","hammerjs":"^2.0.8","jpeg-lossless-decoder-js":"^2.0.7","keycode-js":"^3.1.0","lodash":"^4.17.15","pako":"^1.0.10","papaparse":"^5.3.0","pdfjs-dist":"^3.8.162","plotly.js-dist-min":"^2.27.1","uuid":"^8.3.2"},"devDependencies":{"@babel/core":"^7.21.8","@types/cornerstone-core":"^2.3.0","@types/crypto-js":"^4.1.1","@types/hammerjs":"^2.0.41","@types/lodash":"^4.14.192","@types/papaparse":"^5.3.7","@types/pdfjs-dist":"^2.10.378","@types/plotly.js":"^2.12.30","@types/plotly.js-dist-min":"^2.3.4","@types/uuid":"^9.0.1","babel-loader":"^9.1.2","clean-webpack-plugin":"^4.0.0","copy-webpack-plugin":"^11.0.0","fs":"^0.0.1-security","html-loader":"^4.2.0","html-webpack-plugin":"^5.5.0","ip":"^1.1.8","jsdoc":"^3.6.4","portfinder-sync":"^0.0.2","ts-loader":"^9.4.2","typescript":"^5.0.2","typescript-coverage-report":"^0.7.0","webpack":"^5.76.3","webpack-bundle-analyzer":"^4.8.0","webpack-cli":"^5.0.1","webpack-dev-server":"^4.13.1"}}');
167587
167579
 
167588
167580
  /***/ })
167589
167581