From 1f04d6c1be729a26fe7bcda923770a1cd461053c Mon Sep 17 00:00:00 2001 From: Alireza Date: Wed, 11 Dec 2024 15:26:26 -0500 Subject: [PATCH] feat(node): move to node 20 (#4594) --- .circleci/config.yml | 2 +- .github/ISSUE_TEMPLATE/bug-report.yml | 2 +- .github/workflows/playwright.yml | 4 +- .node-version | 2 +- Dockerfile | 4 +- bun.lockb | Bin 1339706 -> 1339738 bytes .../cornerstone-dicom-pmap/package.json | 4 +- extensions/cornerstone-dicom-seg/package.json | 4 +- extensions/cornerstone-dicom-sr/package.json | 6 +- .../cornerstone-dynamic-volume/package.json | 4 +- extensions/cornerstone/package.json | 8 +- .../src/panels/PanelSegmentation.tsx | 98 ++++++++------- extensions/measurement-tracking/package.json | 4 +- .../Nginx-Dcm4chee-Keycloak/dockerfile | 2 +- .../app/.recipes/Nginx-Dcm4chee/dockerfile | 2 +- .../Nginx-Orthanc-Keycloak/dockerfile | 2 +- .../app/.recipes/Nginx-Orthanc/dockerfile | 2 +- platform/app/netlify.toml | 2 +- platform/app/package.json | 2 +- platform/app/public/config/local_static.js | 31 +---- platform/core/package.json | 2 +- .../docs/docs/assets/img/static-dicom-web.png | Bin 0 -> 63629 bytes .../configuration/dataSources/static-files.md | 119 +++++++++++++----- platform/docs/netlify.toml | 2 +- 24 files changed, 173 insertions(+), 135 deletions(-) create mode 100644 platform/docs/docs/assets/img/static-dicom-web.png diff --git a/.circleci/config.yml b/.circleci/config.yml index bf44ab79e..c8c7afabe 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -6,7 +6,7 @@ orbs: defaults: &defaults docker: - - image: cimg/node:18.18 + - image: cimg/node:20.18.1 environment: TERM: xterm QUICK_BUILD: true diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index 83577dd7c..36a22e979 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -64,7 +64,7 @@ body: attributes: label: 'Node version' description: 'Your Node.js version.' - placeholder: 'e.g., 18.16.1' + placeholder: 'e.g., 20.18.1' validations: required: true - type: input diff --git a/.github/workflows/playwright.yml b/.github/workflows/playwright.yml index 259101988..513d5c93a 100644 --- a/.github/workflows/playwright.yml +++ b/.github/workflows/playwright.yml @@ -22,7 +22,7 @@ jobs: - uses: oven-sh/setup-bun@v2 - uses: actions/setup-node@v4 with: - node-version: 18 + node-version: 20 - name: Install dependencies run: bun install --frozen-lockfile - name: Set up Git safe directory @@ -53,7 +53,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: 18 + node-version: 20 - name: Install dependencies run: bun install --frozen-lockfile - name: Set up Git safe directory diff --git a/.node-version b/.node-version index 3876fd498..f3f52b42d 100644 --- a/.node-version +++ b/.node-version @@ -1 +1 @@ -18.16.1 +20.9.0 diff --git a/Dockerfile b/Dockerfile index e6310c3ba..141b139a4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -21,7 +21,7 @@ # Stage 1: Build the application # docker build -t ohif/viewer:latest . -FROM node:18.16.1-slim as json-copier +FROM node:20.18.1-slim as json-copier RUN mkdir /usr/src/app WORKDIR /usr/src/app @@ -37,7 +37,7 @@ COPY platform /usr/src/app/platform #RUN find platform \! -name "package.json" -mindepth 2 -maxdepth 2 -print | xargs rm -rf # Copy Files -FROM node:18.16.1-slim as builder +FROM node:20.18.1-slim as builder RUN apt-get update && apt-get install -y build-essential python3 RUN mkdir /usr/src/app WORKDIR /usr/src/app diff --git a/bun.lockb b/bun.lockb index 14533e5211f8608c9602bade14f55ae3f7f97df3..ed61f29564dd95546edbf735a598926fd3eaa5b6 100755 GIT binary patch delta 50587 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 delta 51056 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%0Dcb^*5-;RFuIzJV@4-$f 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≠1F(vSE$+Z zlh@~@Kj^xo!UBD^{Pn=>!ZW4574IwL;lGse1xNhm74-MH_`X8wlq;q3m`UMh;-=S) z6WFhK;m?>9E>Xb$<`S3KFzAL6UPAJiGHwQ~i_m>Uqekoew0I(AjMfb^mVc^_)ZOFQ zPn7(dxs7BTqf32mvVM$(jBGxw9%Ip%4vn$6ZBjf|dDek)$6E9=^=fTk)NWCB>is>j zB#g6g{{IL6XXN4hj&5Z$c;~N)k%|=zio$Dr7S8l#q(z0v`Y6?0q~s_IPp;mfXr=#g Xi~@8e+9KR!P>k|$o76kT!bJ1mJ^t>D diff --git a/extensions/cornerstone-dicom-pmap/package.json b/extensions/cornerstone-dicom-pmap/package.json index fd95a1ff1..080e3dd85 100644 --- a/extensions/cornerstone-dicom-pmap/package.json +++ b/extensions/cornerstone-dicom-pmap/package.json @@ -46,8 +46,8 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^2.7.3", - "@cornerstonejs/core": "^2.7.3", + "@cornerstonejs/adapters": "^2.11.2", + "@cornerstonejs/core": "^2.11.2", "@kitware/vtk.js": "32.1.1", "react-color": "^2.19.3" } diff --git a/extensions/cornerstone-dicom-seg/package.json b/extensions/cornerstone-dicom-seg/package.json index 33b726a5d..704cd5ea8 100644 --- a/extensions/cornerstone-dicom-seg/package.json +++ b/extensions/cornerstone-dicom-seg/package.json @@ -46,8 +46,8 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^2.7.3", - "@cornerstonejs/core": "^2.7.3", + "@cornerstonejs/adapters": "^2.11.2", + "@cornerstonejs/core": "^2.11.2", "@kitware/vtk.js": "32.1.1", "react-color": "^2.19.3" } diff --git a/extensions/cornerstone-dicom-sr/package.json b/extensions/cornerstone-dicom-sr/package.json index 28840d077..5259535cd 100644 --- a/extensions/cornerstone-dicom-sr/package.json +++ b/extensions/cornerstone-dicom-sr/package.json @@ -46,9 +46,9 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^2.7.3", - "@cornerstonejs/core": "^2.7.3", - "@cornerstonejs/tools": "^2.7.3", + "@cornerstonejs/adapters": "^2.11.2", + "@cornerstonejs/core": "^2.11.2", + "@cornerstonejs/tools": "^2.11.2", "classnames": "^2.3.2" } } diff --git a/extensions/cornerstone-dynamic-volume/package.json b/extensions/cornerstone-dynamic-volume/package.json index 5f673577a..37995d236 100644 --- a/extensions/cornerstone-dynamic-volume/package.json +++ b/extensions/cornerstone-dynamic-volume/package.json @@ -42,8 +42,8 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/core": "^2.7.3", - "@cornerstonejs/tools": "^2.7.3", + "@cornerstonejs/core": "^2.11.2", + "@cornerstonejs/tools": "^2.11.2", "classnames": "^2.3.2" } } diff --git a/extensions/cornerstone/package.json b/extensions/cornerstone/package.json index 0337fa230..703fe5646 100644 --- a/extensions/cornerstone/package.json +++ b/extensions/cornerstone/package.json @@ -38,7 +38,7 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/dicom-image-loader": "^2.7.3", + "@cornerstonejs/dicom-image-loader": "^2.11.2", "@icr/polyseg-wasm": "^0.4.0", "@ohif/core": "3.10.0-beta.20", "@ohif/ui": "3.10.0-beta.20", @@ -55,9 +55,9 @@ }, "dependencies": { "@babel/runtime": "^7.20.13", - "@cornerstonejs/adapters": "^2.7.3", - "@cornerstonejs/core": "^2.7.3", - "@cornerstonejs/tools": "^2.7.3", + "@cornerstonejs/adapters": "^2.11.2", + "@cornerstonejs/core": "^2.11.2", + "@cornerstonejs/tools": "^2.11.2", "@icr/polyseg-wasm": "^0.4.0", "@kitware/vtk.js": "32.1.1", "html2canvas": "^1.4.1", diff --git a/extensions/cornerstone/src/panels/PanelSegmentation.tsx b/extensions/cornerstone/src/panels/PanelSegmentation.tsx index 8298d4e44..a402531b8 100644 --- a/extensions/cornerstone/src/panels/PanelSegmentation.tsx +++ b/extensions/cornerstone/src/panels/PanelSegmentation.tsx @@ -171,51 +171,61 @@ export default function PanelSegmentation({ onSegmentationDownload, onSegmentationDownloadRTSS, t, - }) => ( - - onSegmentationAdd(activeSegmentation.id)}> - - {t('Create New Segmentation')} - - - {t('Manage Current Segmentation')} - onSegmentationRemoveFromViewport(activeSegmentation.id)}> - - {t('Remove from Viewport')} - - onSegmentationEdit(activeSegmentation.id)}> - - {t('Rename')} - - - { + return ( + + onSegmentationAdd(activeSegmentation.segmentationId)}> + + {t('Create New Segmentation')} + + + {t('Manage Current Segmentation')} + onSegmentationRemoveFromViewport(activeSegmentation.segmentationId)} > - - {t('Export & Download')} - - - - storeSegmentation(activeSegmentation.id)}> - {t('Export DICOM SEG')} - - onSegmentationDownload(activeSegmentation.id)}> - {t('Download DICOM SEG')} - - onSegmentationDownloadRTSS(activeSegmentation.id)}> - {t('Download DICOM RTSTRUCT')} - - - - - - onSegmentationDelete(activeSegmentation.id)}> - - {t('Delete')} - - - ) + + {t('Remove from Viewport')} + + onSegmentationEdit(activeSegmentation.segmentationId)}> + + {t('Rename')} + + + + + {t('Export & Download')} + + + + storeSegmentation(activeSegmentation.segmentationId)} + > + {t('Export DICOM SEG')} + + onSegmentationDownload(activeSegmentation.segmentationId)} + > + {t('Download DICOM SEG')} + + {/* onSegmentationDownloadRTSS(activeSegmentation.segmentationId)} + > + {t('Download DICOM RTSTRUCT')} + */} + + + + + onSegmentationDelete(activeSegmentation.segmentationId)}> + + {t('Delete')} + + + ); + } ); const exportOptions = segmentationsWithRepresentations.map(({ segmentation }) => { diff --git a/extensions/measurement-tracking/package.json b/extensions/measurement-tracking/package.json index 7ed83f065..7bbb0eff5 100644 --- a/extensions/measurement-tracking/package.json +++ b/extensions/measurement-tracking/package.json @@ -32,8 +32,8 @@ "start": "yarn run dev" }, "peerDependencies": { - "@cornerstonejs/core": "^2.7.3", - "@cornerstonejs/tools": "^2.7.3", + "@cornerstonejs/core": "^2.11.2", + "@cornerstonejs/tools": "^2.11.2", "@ohif/core": "3.10.0-beta.20", "@ohif/extension-cornerstone-dicom-sr": "3.10.0-beta.20", "@ohif/extension-default": "3.10.0-beta.20", diff --git a/platform/app/.recipes/Nginx-Dcm4chee-Keycloak/dockerfile b/platform/app/.recipes/Nginx-Dcm4chee-Keycloak/dockerfile index bf610e8bd..4182de82b 100644 --- a/platform/app/.recipes/Nginx-Dcm4chee-Keycloak/dockerfile +++ b/platform/app/.recipes/Nginx-Dcm4chee-Keycloak/dockerfile @@ -1,5 +1,5 @@ # Stage 1: Build the application -FROM node:18.16.1-slim as builder +FROM node:20.18.1-slim as builder # Setup the working directory RUN mkdir /usr/src/app diff --git a/platform/app/.recipes/Nginx-Dcm4chee/dockerfile b/platform/app/.recipes/Nginx-Dcm4chee/dockerfile index d28e96056..bbc6f89eb 100644 --- a/platform/app/.recipes/Nginx-Dcm4chee/dockerfile +++ b/platform/app/.recipes/Nginx-Dcm4chee/dockerfile @@ -1,5 +1,5 @@ # Stage 1: Build the application -FROM node:18.16.1-slim as builder +FROM node:20.18.1-slim as builder # Setup the working directory RUN mkdir /usr/src/app diff --git a/platform/app/.recipes/Nginx-Orthanc-Keycloak/dockerfile b/platform/app/.recipes/Nginx-Orthanc-Keycloak/dockerfile index eba4237b4..7e8613529 100644 --- a/platform/app/.recipes/Nginx-Orthanc-Keycloak/dockerfile +++ b/platform/app/.recipes/Nginx-Orthanc-Keycloak/dockerfile @@ -1,5 +1,5 @@ # Stage 1: Build the application -FROM node:18.16.1-slim as builder +FROM node:20.18.1-slim as builder # Setup the working directory RUN mkdir /usr/src/app diff --git a/platform/app/.recipes/Nginx-Orthanc/dockerfile b/platform/app/.recipes/Nginx-Orthanc/dockerfile index ac7433ac6..846c74c31 100644 --- a/platform/app/.recipes/Nginx-Orthanc/dockerfile +++ b/platform/app/.recipes/Nginx-Orthanc/dockerfile @@ -1,5 +1,5 @@ # Stage 1: Build the application -FROM node:18.16.1-slim as builder +FROM node:20.18.1-slim as builder # Setup the working directory RUN mkdir /usr/src/app diff --git a/platform/app/netlify.toml b/platform/app/netlify.toml index 9e4a6e5ee..b2bd54893 100644 --- a/platform/app/netlify.toml +++ b/platform/app/netlify.toml @@ -19,7 +19,7 @@ [build.environment] # If 'production', `yarn install` does not install devDependencies NODE_ENV = "development" - NODE_VERSION = "18.16.1" + NODE_VERSION = "20.18.1" YARN_VERSION = "1.22.5" RUBY_VERSION = "2.6.2" YARN_FLAGS = "--no-ignore-optional --pure-lockfile" diff --git a/platform/app/package.json b/platform/app/package.json index 1c1daf590..e96413d41 100644 --- a/platform/app/package.json +++ b/platform/app/package.json @@ -53,7 +53,7 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/dicom-image-loader": "^2.7.3", + "@cornerstonejs/dicom-image-loader": "^2.11.2", "@emotion/serialize": "^1.1.3", "@ohif/core": "3.10.0-beta.20", "@ohif/extension-cornerstone": "3.10.0-beta.20", diff --git a/platform/app/public/config/local_static.js b/platform/app/public/config/local_static.js index 23e7a61ae..193ecb40c 100644 --- a/platform/app/public/config/local_static.js +++ b/platform/app/public/config/local_static.js @@ -12,41 +12,16 @@ window.config = { showLoadingIndicator: true, strictZSpacingForVolumeViewport: true, // filterQueryParam: false, - defaultDataSourceName: 'dicomweb', + defaultDataSourceName: 'local', dataSources: [ - { - namespace: '@ohif/extension-default.dataSourcesModule.dicomweb', - sourceName: 'e2e', - configuration: { - friendlyName: 'StaticWado test data', - // The most important field to set for static WADO - staticWado: true, - name: 'StaticWADO', - wadoUriRoot: '/viewer-testdata', - qidoRoot: '/viewer-testdata', - wadoRoot: '/viewer-testdata', - qidoSupportsIncludeField: false, - imageRendering: 'wadors', - thumbnailRendering: 'wadors', - enableStudyLazyLoad: true, - supportsFuzzyMatching: false, - supportsWildcard: true, - singlepart: 'video,thumbnail,pdf', - omitQuotationForMultipartRequest: true, - bulkDataURI: { - enabled: true, - relativeResolution: 'studies', - }, - }, - }, { namespace: '@ohif/extension-default.dataSourcesModule.dicomweb', sourceName: 'local', configuration: { friendlyName: 'Static WADO Local Data', name: 'DCM4CHEE', - qidoRoot: 'http://localhost:5000/dicomweb', - wadoRoot: 'http://localhost:5000/dicomweb', + qidoRoot: 'http://localhost:3001/dicomweb', + wadoRoot: 'http://localhost:3001/dicomweb', qidoSupportsIncludeField: false, supportsReject: true, supportsStow: true, diff --git a/platform/core/package.json b/platform/core/package.json index 60d8f2574..f915c0a19 100644 --- a/platform/core/package.json +++ b/platform/core/package.json @@ -37,7 +37,7 @@ "@cornerstonejs/codec-libjpeg-turbo-8bit": "^1.2.2", "@cornerstonejs/codec-openjpeg": "^1.2.4", "@cornerstonejs/codec-openjph": "^2.4.5", - "@cornerstonejs/dicom-image-loader": "^2.7.3", + "@cornerstonejs/dicom-image-loader": "^2.11.2", "@ohif/ui": "3.10.0-beta.20", "cornerstone-math": "0.1.9", "dicom-parser": "^1.8.21" diff --git a/platform/docs/docs/assets/img/static-dicom-web.png b/platform/docs/docs/assets/img/static-dicom-web.png new file mode 100644 index 0000000000000000000000000000000000000000..fab41fc843c813fc626f46e51dd6334ba68dedb0 GIT binary patch literal 63629 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 literal 0 HcmV?d00001 diff --git a/platform/docs/docs/configuration/dataSources/static-files.md b/platform/docs/docs/configuration/dataSources/static-files.md index 2741e0495..ec460db2b 100644 --- a/platform/docs/docs/configuration/dataSources/static-files.md +++ b/platform/docs/docs/configuration/dataSources/static-files.md @@ -3,45 +3,98 @@ sidebar_position: 5 sidebar_label: Static Files --- -# Static Files -There is a binary DICOM to static file generator, which provides easily served -binary files. The files are all compressed in order to reduce space -significantly, and are pre-computed for the files required for OHIF, so that the -performance of serving the files is just the read from disk/write to http stream -time, without any extra processing time. +# Static DICOMweb Files for Enhanced Performance -The project for the static wado files is located here: [static-wado]: -https://github.com/OHIF/static-wado +This section describes how to generate and serve static DICOMweb files, significantly improving the performance of your OHIF Viewer setup. These files are pre-processed and compressed, minimizing storage space and reducing serving time to the bare minimum (disk read and HTTP stream write). -It can be compiled with Java and Gradle, and then run against a set of dicom, in -the example located in /dicom/study1 outputting to /dicomweb, and then a server -run against that data, like this: +## Static-DICOMWeb Project -```bash -git clone https://github.com/OHIF/static-wado -cd static-wado -./gradlew installDist -StaticWado/build/install/StaticWado/bin/StaticWado -d /dicomweb /dicom/study1 -cd /dicomweb -npx http-server -p 5000 --cors -g +The core tool for this process is the `static-wado` project, available on GitHub: -# you can use npx serve ./dist -l 8080 -c ../public/serve.json as an alternative to http-server -``` +[static-wado]: https://github.com/RadicalImaging/Static-DICOMWeb -There is then a dev environment in the platform/app directory which can be -run against those files, like this: +This project contains two main components: -``` -cd platform/app -yarn dev:static -``` +* **`static-wado-creator`:** Converts raw DICOM files into a DICOMweb-compliant directory structure, optimizing them for efficient serving. +* **`static-wado-webserver`:** A simple web server specifically designed to serve the generated static DICOMweb files. -Additional studies can be added to the dicomweb by re-running the StaticWado -command. It will create a single studies.gz index file (JSON DICOM file, -compressed) containing an index of all studies created. There is then a small -extension to OHIF which performs client side indexing. +## Prerequisites -The StaticWado command also knows how to deploy a client and dicomweb directory -to Amazon s3, which can then server files up directly. There is another build -setup build:aws in the viewer package.json to create such a deployment. +- Node.js and npm (or yarn) installed on your system. + +## Installation + +1. **Clone the Repository:** + + ```bash + git clone https://github.com/RadicalImaging/Static-DICOMWeb + cd Static-DICOMWeb + ``` + +2. **Install Dependencies:** + + ```bash + yarn install + ``` + +## Generating Static DICOMweb Files + +1. **Prepare your DICOM data:** Organize your DICOM files into a directory. For example `/Users/alireza/dicom/test-static-script/ACRIN-CT`. + +2. **Convert to DICOMweb Structure:** + Use the `mkdicomweb.js` script from the `static-wado-creator` package to create the DICOMweb directory: + + ```bash + node packages/static-wado-creator/bin/mkdicomweb.js '/Users/alireza/dicom/test-static-script/ACRIN-CT' -o '/Users/alireza/dicom/test-static-script/output' + ``` + + * **Replace:** + * `/Users/alireza/dicom/test-static-script/ACRIN-CT` with the path to your directory of DICOM files. + * `/Users/alireza/dicom/test-static-script/output` with your desired output directory for the DICOMweb structure. + + This command will generate a directory structure similar to this in your output location: + + ![alt text](../../assets/img/static-dicom-web.png) + +## Serving Static Files with the Web Server + +1. **Start the Server:** + + Run the `dicomwebserver.mjs` script from the `static-wado-webserver` package, specifying the port and the DICOMweb directory: + + ```bash + node packages/static-wado-webserver/bin/dicomwebserver.mjs -p 3001 -o /Users/alireza/dicom/test-static-script/output + ``` + + * **`-p 3001`:** Sets the server to listen on port 3001. You can change this if needed. + * **`-o /Users/alireza/dicom/test-static-script/output`:** Specifies the path to your generated DICOMweb directory. + + :::info + The `-p` (port) and `-o` (output directory) flags are used to configure the server. + ::: + +## Running OHIF Viewer with Static Data + +1. **Use the `local_static.js` Configuration:** + + Start the OHIF Viewer in development mode using the provided `local_static.js` configuration file: + + ```bash + yarn dev:static + ``` + +2. **Configuration Details:** + + The `local_static.js` configuration file is pre-configured to point to: + + ```js + qidoRoot: 'http://localhost:3001/dicomweb', + wadoRoot: 'http://localhost:3001/dicomweb', + ``` + + This matches the default port (3001) used by the `static-wado-webserver`. + + :::info + If you change the port or output directory when running the `static-wado-webserver`, you **must** also update the `qidoRoot` and `wadoRoot` values in your `local_static.js` configuration file accordingly to ensure the OHIF Viewer can access the data. + ::: diff --git a/platform/docs/netlify.toml b/platform/docs/netlify.toml index ff82abc66..7354856c5 100644 --- a/platform/docs/netlify.toml +++ b/platform/docs/netlify.toml @@ -16,7 +16,7 @@ [build.environment] # If 'production', `yarn install` does not install devDependencies NODE_ENV = "development" - NODE_VERSION = "18.16.1" + NODE_VERSION = "20.18.1" YARN_VERSION = "1.22.5" RUBY_VERSION = "2.6.2" YARN_FLAGS = "--no-ignore-optional --pure-lockfile"