From 352eacf89e8f9b8394a1e459928c8f756e42728b Mon Sep 17 00:00:00 2001 From: Igor Octaviano Date: Mon, 5 Oct 2026 13:44:13 -0300 Subject: [PATCH] fix: patch checkOrientation to handle missing PerFrameFunctionalGroupsSequence The checkOrientation function in @cornerstonejs/adapters would crash with "Cannot read properties of undefined (reading '0')" when loading SEG files where PerFrameFunctionalGroupsSequence is undefined or empty. The fix: - Adds optional chaining for SharedFunctionalGroupsSequence - Only accesses PerFrameFunctionalGroupsSequence if it exists and has items - Falls back to 'Planar' if no orientation data is found --- patches/@cornerstonejs__adapters.patch | 28 ++++++++++++++++++++++++++ pnpm-lock.yaml | 11 +++++----- pnpm-workspace.yaml | 1 + 3 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 patches/@cornerstonejs__adapters.patch diff --git a/patches/@cornerstonejs__adapters.patch b/patches/@cornerstonejs__adapters.patch new file mode 100644 index 00000000000..e2ce3608fb8 --- /dev/null +++ b/patches/@cornerstonejs__adapters.patch @@ -0,0 +1,28 @@ +diff --git a/dist/esm/adapters/helpers/checkOrientation.js b/dist/esm/adapters/helpers/checkOrientation.js +index f147ce19972dfe2f30ed820509943bb2ab2f34d0..47868b5ae063ee61e4061aa46ef5ccf49692fb34 100644 +--- a/dist/esm/adapters/helpers/checkOrientation.js ++++ b/dist/esm/adapters/helpers/checkOrientation.js +@@ -4,9 +4,20 @@ import { utilities } from '@cornerstonejs/core'; + function checkOrientation(multiframe, validOrientations, sourceDataDimensions, tolerance) { + const SharedFunctionalGroupsSequence = multiframe.SharedFunctionalGroupsSequence, + PerFrameFunctionalGroupsSequence = multiframe.PerFrameFunctionalGroupsSequence; +- const sharedImageOrientationPatient = SharedFunctionalGroupsSequence.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined; +- const PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[0]; +- const iopRaw = sharedImageOrientationPatient || PerFrameFunctionalGroups.PlaneOrientationSequence.ImageOrientationPatient; ++ const sharedImageOrientationPatient = SharedFunctionalGroupsSequence?.PlaneOrientationSequence ? SharedFunctionalGroupsSequence.PlaneOrientationSequence.ImageOrientationPatient : undefined; ++ ++ /** Get orientation from per-frame if shared doesn't have it and per-frame exists */ ++ let iopRaw = sharedImageOrientationPatient; ++ if (!iopRaw && PerFrameFunctionalGroupsSequence && PerFrameFunctionalGroupsSequence.length > 0) { ++ const PerFrameFunctionalGroups = PerFrameFunctionalGroupsSequence[0]; ++ iopRaw = PerFrameFunctionalGroups?.PlaneOrientationSequence?.ImageOrientationPatient; ++ } ++ ++ if (!iopRaw) { ++ /** No orientation found, default to Planar to avoid throwing */ ++ return 'Planar'; ++ } ++ + const iop = Array.isArray(iopRaw) ? iopRaw.map(Number) : iopRaw; + const inPlane = validOrientations.some(operation => utilities.isEqual(iop, operation, tolerance)); + if (inPlane) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 02271589257..f4456362d21 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -246,6 +246,7 @@ overrides: image-size@>=0.6.3 <2.0.4: 2.0.4 patchedDependencies: + '@cornerstonejs/adapters': 45d05af17fbf5bd9bda466dc8ea82c2e86f79d0155d5844baa753b690971f382 '@cornerstonejs/core': a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5 importers: @@ -406,7 +407,7 @@ importers: version: 7.29.7 '@cornerstonejs/adapters': specifier: 5.6.8 - version: 5.6.8(@cornerstonejs/core@5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@cornerstonejs/tools@5.6.8(@cornerstonejs/core@5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@kitware/vtk.js@36.4.1(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@types/d3-array@3.2.1)(@types/d3-interpolate@3.0.4)(d3-array@3.2.4)(d3-interpolate@3.0.1)(gl-matrix@3.4.3)) + version: 5.6.8(patch_hash=45d05af17fbf5bd9bda466dc8ea82c2e86f79d0155d5844baa753b690971f382)(@cornerstonejs/core@5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@cornerstonejs/tools@5.6.8(@cornerstonejs/core@5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@kitware/vtk.js@36.4.1(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@types/d3-array@3.2.1)(@types/d3-interpolate@3.0.4)(d3-array@3.2.4)(d3-interpolate@3.0.1)(gl-matrix@3.4.3)) '@cornerstonejs/ai': specifier: 5.6.8 version: 5.6.8(@cornerstonejs/core@5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@cornerstonejs/tools@5.6.8(@cornerstonejs/core@5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@kitware/vtk.js@36.4.1(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@types/d3-array@3.2.1)(@types/d3-interpolate@3.0.4)(d3-array@3.2.4)(d3-interpolate@3.0.1)(gl-matrix@3.4.3)) @@ -515,7 +516,7 @@ importers: version: 7.29.7 '@cornerstonejs/adapters': specifier: 5.6.8 - version: 5.6.8(@cornerstonejs/core@5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@cornerstonejs/tools@5.6.8(@cornerstonejs/core@5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@kitware/vtk.js@36.4.1(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@types/d3-array@3.2.1)(@types/d3-interpolate@3.0.4)(d3-array@3.2.4)(d3-interpolate@3.0.1)(gl-matrix@3.4.3)) + version: 5.6.8(patch_hash=45d05af17fbf5bd9bda466dc8ea82c2e86f79d0155d5844baa753b690971f382)(@cornerstonejs/core@5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@cornerstonejs/tools@5.6.8(@cornerstonejs/core@5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@kitware/vtk.js@36.4.1(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@types/d3-array@3.2.1)(@types/d3-interpolate@3.0.4)(d3-array@3.2.4)(d3-interpolate@3.0.1)(gl-matrix@3.4.3)) '@cornerstonejs/core': specifier: 5.6.8 version: 5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0) @@ -604,7 +605,7 @@ importers: version: 7.29.7 '@cornerstonejs/adapters': specifier: 5.6.8 - version: 5.6.8(@cornerstonejs/core@5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@cornerstonejs/tools@5.6.8(@cornerstonejs/core@5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@kitware/vtk.js@36.4.1(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@types/d3-array@3.2.1)(@types/d3-interpolate@3.0.4)(d3-array@3.2.4)(d3-interpolate@3.0.1)(gl-matrix@3.4.3)) + version: 5.6.8(patch_hash=45d05af17fbf5bd9bda466dc8ea82c2e86f79d0155d5844baa753b690971f382)(@cornerstonejs/core@5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@cornerstonejs/tools@5.6.8(@cornerstonejs/core@5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@kitware/vtk.js@36.4.1(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@types/d3-array@3.2.1)(@types/d3-interpolate@3.0.4)(d3-array@3.2.4)(d3-interpolate@3.0.1)(gl-matrix@3.4.3)) '@cornerstonejs/core': specifier: 5.6.8 version: 5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0) @@ -653,7 +654,7 @@ importers: version: 7.29.7 '@cornerstonejs/adapters': specifier: 5.6.8 - version: 5.6.8(@cornerstonejs/core@5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@cornerstonejs/tools@5.6.8(@cornerstonejs/core@5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@kitware/vtk.js@36.4.1(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@types/d3-array@3.2.1)(@types/d3-interpolate@3.0.4)(d3-array@3.2.4)(d3-interpolate@3.0.1)(gl-matrix@3.4.3)) + version: 5.6.8(patch_hash=45d05af17fbf5bd9bda466dc8ea82c2e86f79d0155d5844baa753b690971f382)(@cornerstonejs/core@5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@cornerstonejs/tools@5.6.8(@cornerstonejs/core@5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@kitware/vtk.js@36.4.1(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@types/d3-array@3.2.1)(@types/d3-interpolate@3.0.4)(d3-array@3.2.4)(d3-interpolate@3.0.1)(gl-matrix@3.4.3)) '@cornerstonejs/core': specifier: 5.6.8 version: 5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0) @@ -14738,7 +14739,7 @@ snapshots: '@colors/colors@1.5.0': optional: true - '@cornerstonejs/adapters@5.6.8(@cornerstonejs/core@5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@cornerstonejs/tools@5.6.8(@cornerstonejs/core@5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@kitware/vtk.js@36.4.1(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@types/d3-array@3.2.1)(@types/d3-interpolate@3.0.4)(d3-array@3.2.4)(d3-interpolate@3.0.1)(gl-matrix@3.4.3))': + '@cornerstonejs/adapters@5.6.8(patch_hash=45d05af17fbf5bd9bda466dc8ea82c2e86f79d0155d5844baa753b690971f382)(@cornerstonejs/core@5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@cornerstonejs/tools@5.6.8(@cornerstonejs/core@5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@kitware/vtk.js@36.4.1(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0))(@types/d3-array@3.2.1)(@types/d3-interpolate@3.0.4)(d3-array@3.2.4)(d3-interpolate@3.0.1)(gl-matrix@3.4.3))': dependencies: '@babel/runtime-corejs2': 7.26.10 '@cornerstonejs/core': 5.6.8(patch_hash=a80dc1a8df5e9e7fbfe0ad7ab6eff21acfca717ebb4cbb8a751cd61d51ab4da5)(@cornerstonejs/metadata@5.6.8)(@cornerstonejs/utils@5.6.8)(autoprefixer@10.6.1(postcss@8.5.26))(wslink@2.5.0) diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 33176fa0c59..3ed3e143501 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -117,4 +117,5 @@ overrides: 'browserslist@<4.28.7': 4.28.8 'image-size@>=0.6.3 <2.0.4': 2.0.4 patchedDependencies: + '@cornerstonejs/adapters': patches/@cornerstonejs__adapters.patch '@cornerstonejs/core': patches/@cornerstonejs__core.patch