From 09093b3f0a5eaaed660f0d20e624a2bad1c77257 Mon Sep 17 00:00:00 2001 From: Bill Wallace Date: Tue, 19 May 2026 21:41:37 -0400 Subject: [PATCH] Update to use beta 5.0 of CS3D (#5904) * Update to use beta 5.0 * fix: unit tests * fix: Allow slow server/test rendering to still work * Update tests to use viewport grid compare * Fix storage of stale retries actual/diff files * cs3d linking fixees * Linking for cs3d metadata * Use metadata import for suv scaling * Fix suv import * Use type for import * fix: Metadata registration ordering * Use beta for upstream * Merge from origin/master * Revert tests to master * Undo beta version changes * Revert bun.lock file to that of master. * Reduce test failure retries to one per test. Cap the number of failed total tests to 10. Replace the JSON reporter with the HTML reporter. * Add generic provider back in * Deprecate OHIF versions of cs3d utils * fix * Undo some cs3d beta dependencies so this PR could be merged * Build fix * Fixing build issues * build issue * bun lock * Temporary cache clear to resolve build issue * Cache bust * Remove the babel hoist fix attempt * Cache netlify toml issue * Fix netlify cache issue * Try to fix cache dependency issue * Try update resolutions * babel hoist fix * fix: Remove netlify cache bust * Revert pinned versions * PR comments on duplicated suv-factors * Undo lock changes and isEqual add --------- Co-authored-by: Joe Boccanfuso Co-authored-by: Alireza --- .github/workflows/playwright.yml | 2 +- extensions/cornerstone/jest.config.js | 2 -- extensions/cornerstone/src/init.tsx | 18 ++++++++++-------- extensions/default/jest.config.js | 1 - .../src/getPTImageIdInstanceMetadata.ts | 2 +- jest.config.base.js | 7 +++++++ platform/app/.webpack/webpack.pwa.js | 6 +++++- playwright.config.ts | 10 +++------- rsbuild.config.ts | 9 ++++++++- 9 files changed, 35 insertions(+), 22 deletions(-) diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index 480043f52..e1a315f47 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -122,7 +122,7 @@ jobs: run: | mkdir -p packaged-test-results cp -r ./tests/test-results packaged-test-results/ || true - cp ./tests/playwright-report.json packaged-test-results/ || true + cp -r ./tests/playwright-report packaged-test-results/ || true - name: Upload directory of test results artifact if: ${{ !cancelled() }} uses: actions/upload-artifact@v4 diff --git a/extensions/cornerstone/jest.config.js b/extensions/cornerstone/jest.config.js index c5eb6dd38..0411b1f83 100644 --- a/extensions/cornerstone/jest.config.js +++ b/extensions/cornerstone/jest.config.js @@ -5,8 +5,6 @@ module.exports = { moduleNameMapper: { ...base.moduleNameMapper, '@ohif/(.*)': '/../../platform/$1/src', - '^@cornerstonejs/([^/]+)/(.*)$': '/../../node_modules/@cornerstonejs/$1/dist/esm/$2', - '^@cornerstonejs/([^/]+)$': '/../../node_modules/@cornerstonejs/$1/dist/esm', }, // rootDir: "../.." // testMatch: [ diff --git a/extensions/cornerstone/src/init.tsx b/extensions/cornerstone/src/init.tsx index c8fc0ffad..c12f4b8bd 100644 --- a/extensions/cornerstone/src/init.tsx +++ b/extensions/cornerstone/src/init.tsx @@ -178,14 +178,6 @@ export default async function init({ ); }); - // add metadata providers - metaData.addProvider( - csUtilities.calibratedPixelSpacingMetadataProvider.get.bind( - csUtilities.calibratedPixelSpacingMetadataProvider - ) - ); // this provider is required for Calibration tool - metaData.addProvider(metadataProvider.get.bind(metadataProvider), 9999); - // These are set reasonably low to allow for interleaved retrieves and slower // connections. imageLoadPoolManager.maxNumRequests = { @@ -197,6 +189,16 @@ export default async function init({ initWADOImageLoader(userAuthenticationService, appConfig, extensionManager); + // Add OHIF metadata providers after dicomImageLoader.init(). + // The linked metadata branch clears providers during loader init. + metaData.addProvider(csUtilities.genericMetadataProvider.get, 9998); + metaData.addProvider( + csUtilities.calibratedPixelSpacingMetadataProvider.get.bind( + csUtilities.calibratedPixelSpacingMetadataProvider + ) + ); // this provider is required for Calibration tool + metaData.addProvider(metadataProvider.get.bind(metadataProvider), 9999); + /* Measurement Service */ this.measurementServiceSource = connectToolsToMeasurementService({ servicesManager, diff --git a/extensions/default/jest.config.js b/extensions/default/jest.config.js index fc9df72ad..0411b1f83 100644 --- a/extensions/default/jest.config.js +++ b/extensions/default/jest.config.js @@ -5,7 +5,6 @@ module.exports = { moduleNameMapper: { ...base.moduleNameMapper, '@ohif/(.*)': '/../../platform/$1/src', - '^@cornerstonejs/(.*)$': '/../../node_modules/@cornerstonejs/$1/dist/esm', }, // rootDir: "../.." // testMatch: [ diff --git a/extensions/default/src/getPTImageIdInstanceMetadata.ts b/extensions/default/src/getPTImageIdInstanceMetadata.ts index 4a9e114e0..7d28827e3 100644 --- a/extensions/default/src/getPTImageIdInstanceMetadata.ts +++ b/extensions/default/src/getPTImageIdInstanceMetadata.ts @@ -1,6 +1,6 @@ import OHIF from '@ohif/core'; -import { InstanceMetadata, PhilipsPETPrivateGroup } from '@cornerstonejs/calculate-suv/src/types'; +import type { InstanceMetadata, PhilipsPETPrivateGroup } from '@cornerstonejs/calculate-suv/src/types'; const metadataProvider = OHIF.classes.MetadataProvider; diff --git a/jest.config.base.js b/jest.config.base.js index 1f9c0ffc9..f67bf302b 100644 --- a/jest.config.base.js +++ b/jest.config.base.js @@ -18,6 +18,13 @@ module.exports = { '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': '/src/__mocks__/fileMock.js', '\\.(css|less)$': 'identity-obj-proxy', + // calculate-suv publishes under dist/ (not dist/esm), so map it explicitly + // before package-specific catch-all @cornerstonejs mappings. + '^@cornerstonejs/calculate-suv$': '/../../node_modules/@cornerstonejs/calculate-suv', + '^@cornerstonejs/calculate-suv/(.*)$': + '/../../node_modules/@cornerstonejs/calculate-suv/$1', + '^@cornerstonejs/([^/]+)/(.*)$': '/../../node_modules/@cornerstonejs/$1/dist/esm/$2', + '^@cornerstonejs/([^/]+)$': '/../../node_modules/@cornerstonejs/$1/dist/esm', }, // Setup // setupFiles: ["jest-canvas-mock/lib/index.js"], diff --git a/platform/app/.webpack/webpack.pwa.js b/platform/app/.webpack/webpack.pwa.js index 2bbfbc916..9bb038326 100644 --- a/platform/app/.webpack/webpack.pwa.js +++ b/platform/app/.webpack/webpack.pwa.js @@ -14,6 +14,9 @@ const MiniCssExtractPlugin = require('mini-css-extract-plugin'); const SRC_DIR = path.join(__dirname, '../src'); const DIST_DIR = path.join(__dirname, '../dist'); const PUBLIC_DIR = path.join(__dirname, '../public'); + +// Ignore node_modules except @cornerstonejs (symlinked local development). +const WATCH_IGNORED = /node_modules[\\/](?!@cornerstonejs(?:[\\/]|$))/; // ~~ Env Vars const HTML_TEMPLATE = process.env.HTML_TEMPLATE || 'index.html'; const PUBLIC_URL = process.env.PUBLIC_URL || '/'; @@ -206,7 +209,8 @@ module.exports = (env, argv) => { } mergedConfig.watchOptions = { - ignored: /node_modules\/@cornerstonejs/, + ignored: WATCH_IGNORED, + followSymlinks: true, }; return mergedConfig; diff --git a/playwright.config.ts b/playwright.config.ts index d7518d7fc..cec0f4f71 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -4,17 +4,13 @@ export default defineConfig({ testDir: './tests', fullyParallel: !!process.env.CI, forbidOnly: !!process.env.CI, - retries: process.env.CI ? 3 : 0, + retries: process.env.CI ? 1 : 0, + maxFailures: process.env.CI ? 10 : undefined, workers: process.env.CI ? 6 : undefined, snapshotPathTemplate: './tests/screenshots{/projectName}/{testFilePath}/{arg}{ext}', outputDir: './tests/test-results', reporter: [ - [ - process.env.CI ? 'json' : 'html', - process.env.CI - ? { outputFile: './tests/playwright-report.json' } - : { outputFolder: './tests/playwright-report' }, - ], + ['html', { outputFolder: './tests/playwright-report' }], ], globalTimeout: 800_000, timeout: 800_000, diff --git a/rsbuild.config.ts b/rsbuild.config.ts index e69f07732..59af6c7ce 100644 --- a/rsbuild.config.ts +++ b/rsbuild.config.ts @@ -27,7 +27,13 @@ const PROXY_PATH_REWRITE_TO = process.env.PROXY_PATH_REWRITE_TO; const OHIF_PORT = Number(process.env.OHIF_PORT || 3000); const OHIF_OPEN = process.env.OHIF_OPEN !== 'false'; +// Ignore node_modules except @cornerstonejs (symlinked local development). +const WATCH_IGNORED = /node_modules[\\/](?!@cornerstonejs(?:[\\/]|$))/; + export default defineConfig({ + dev: { + lazyCompilation: false, + }, source: { entry: { index: `${SRC_DIR}/index.js`, @@ -83,7 +89,8 @@ export default defineConfig({ }, }, watchOptions: { - ignored: /node_modules\/@cornerstonejs/, + ignored: WATCH_IGNORED, + followSymlinks: true, }, }, },