diff --git a/.webpack/rules/transpileJavaScript.js b/.webpack/rules/transpileJavaScript.js index 723a6e321..59e9c2b81 100644 --- a/.webpack/rules/transpileJavaScript.js +++ b/.webpack/rules/transpileJavaScript.js @@ -21,7 +21,7 @@ function transpileJavaScript(mode) { : excludeNodeModulesExcept([]); return { - test: /\.jsx?$/, + test: /\.(mjs|js|jsx)?$/, // These are packages that are not transpiled to our lowest supported // JS version (currently ES5). Most of these leverage ES6+ features, // that we need to transpile to a different syntax. diff --git a/.webpack/webpack.base.js b/.webpack/webpack.base.js index 26171786f..16663b355 100644 --- a/.webpack/webpack.base.js +++ b/.webpack/webpack.base.js @@ -13,7 +13,7 @@ const cssToJavaScript = require('./rules/cssToJavaScript.js'); const BundleAnalyzerPlugin = require('webpack-bundle-analyzer') .BundleAnalyzerPlugin; const TerserJSPlugin = require('terser-webpack-plugin'); -const MiniCssExtractPlugin = require('mini-css-extract-plugin'); +const CopyPlugin = require('copy-webpack-plugin'); // ~~ ENV VARS const NODE_ENV = process.env.NODE_ENV; @@ -39,9 +39,18 @@ module.exports = (env, argv, { SRC_DIR, DIST_DIR }) => { app: `${SRC_DIR}/index.js`, }, optimization: { + splitChunks: { + // include all types of chunks + chunks: 'all', + }, + //runtimeChunk: 'single', minimize: isProdBuild, sideEffects: true, }, + output: { + clean: true, + publicPath: '/', + }, context: SRC_DIR, stats: { colors: true, @@ -69,7 +78,7 @@ module.exports = (env, argv, { SRC_DIR, DIST_DIR }) => { ], }, resolve: { - mainFields: ['browser', 'module', 'main'], + mainFields: ['module', 'browser', 'main'], alias: { // Viewer project '@': path.resolve(__dirname, '../platform/viewer/src'), @@ -80,6 +89,8 @@ module.exports = (env, argv, { SRC_DIR, DIST_DIR }) => { '@hooks': path.resolve(__dirname, '../platform/viewer/src/hooks'), '@routes': path.resolve(__dirname, '../platform/viewer/src/routes'), '@state': path.resolve(__dirname, '../platform/viewer/src/state'), + 'cornerstone-wado-image-loader': + 'cornerstone-wado-image-loader/dist/dynamic-import/cornerstoneWADOImageLoader.min.js', }, // Which directories to search when resolving modules modules: [ @@ -93,7 +104,7 @@ module.exports = (env, argv, { SRC_DIR, DIST_DIR }) => { extensions: ['.js', '.jsx', '.json', '*'], // symlinked resources are resolved to their real path, not their symlinked location symlinks: true, - fallback: { fs: false, path: false }, + fallback: { fs: false, path: false, zlib: false }, }, plugins: [ new webpack.DefinePlugin({ @@ -120,6 +131,15 @@ module.exports = (env, argv, { SRC_DIR, DIST_DIR }) => { }), // Uncomment to generate bundle analyzer // new BundleAnalyzerPlugin(), + new CopyPlugin({ + patterns: [ + { + from: + '../../../node_modules/cornerstone-wado-image-loader/dist/dynamic-import', + to: DIST_DIR, + }, + ], + }), ], }; @@ -130,13 +150,6 @@ module.exports = (env, argv, { SRC_DIR, DIST_DIR }) => { terserOptions: {}, }), ]; - - /*config.plugins.push( - new MiniCssExtractPlugin({ - filename: 'dist/[name].bundle.css', - chunkFilename: 'dist/[id].css', - }) - );*/ } if (isQuickBuild) { diff --git a/extensions/cornerstone/package.json b/extensions/cornerstone/package.json index bdbda7770..48dbe8297 100644 --- a/extensions/cornerstone/package.json +++ b/extensions/cornerstone/package.json @@ -31,12 +31,12 @@ "peerDependencies": { "@ohif/core": "^0.50.0", "@ohif/ui": "^0.50.0", - "cornerstone-core": "^2.3.0", - "cornerstone-math": "^0.1.9", + "cornerstone-core": "2.5.0", + "cornerstone-math": "0.1.9", "cornerstone-tools": "5.1.2", - "cornerstone-wado-image-loader": "^3.1.2", + "cornerstone-wado-image-loader": "4.0.3", "dcmjs": "0.16.1", - "dicom-parser": "^1.8.3", + "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", "react": "^17.0.2", @@ -47,6 +47,6 @@ "@babel/runtime": "7.7.6", "lodash.merge": "^4.6.2", "lodash.debounce": "4.0.8", - "react-cornerstone-viewport": "4.0.5" + "react-cornerstone-viewport": "4.1.1" } } diff --git a/extensions/cornerstone/src/index.js b/extensions/cornerstone/src/index.js index bd070c2e9..c3345756e 100644 --- a/extensions/cornerstone/src/index.js +++ b/extensions/cornerstone/src/index.js @@ -4,7 +4,7 @@ import commandsModule from './commandsModule.js'; import CornerstoneViewportDownloadForm from './CornerstoneViewportDownloadForm'; const Component = React.lazy(() => { - return import('./OHIFCornerstoneViewport'); + return import(/* webpackPrefetch: true */ './OHIFCornerstoneViewport'); }); const OHIFCornerstoneViewport = props => { diff --git a/extensions/cornerstone/src/initWADOImageLoader.js b/extensions/cornerstone/src/initWADOImageLoader.js index d9a7def69..68a07433d 100644 --- a/extensions/cornerstone/src/initWADOImageLoader.js +++ b/extensions/cornerstone/src/initWADOImageLoader.js @@ -1,7 +1,7 @@ import cornerstone from 'cornerstone-core'; import cornerstoneWADOImageLoader from 'cornerstone-wado-image-loader'; import dicomParser from 'dicom-parser'; -import { errorHandler } from '@ohif/core' +import { errorHandler } from '@ohif/core'; let initialized = false; @@ -32,12 +32,24 @@ export default function initWADOImageLoader(UserAuthenticationService) { beforeSend: function(xhr) { const headers = UserAuthenticationService.getAuthorizationHeader(); + // Request: + // JPEG-LS Lossless (1.2.840.10008.1.2.4.80) if available, otherwise accept + // whatever transfer-syntax the origin server provides. + // For now we use image/jls and image/x-jls because some servers still use the old type + // http://dicom.nema.org/medical/dicom/current/output/html/part18.html + const xhrRequestHeaders = { + //accept: 'multipart/related; type="image/x-jls"', + // 'multipart/related; type="image/x-jls", multipart/related; type="image/jls"; transfer-syntax="1.2.840.10008.1.2.4.80", multipart/related; type="image/x-jls", multipart/related; type="application/octet-stream"; transfer-syntax=*', + }; + if (headers && headers.Authorization) { - xhr.setRequestHeader('Authorization', headers.Authorization); + xhrRequestHeaders.Authorization = headers.Authorization; } + + return xhrRequestHeaders; }, errorInterceptor: error => { - errorHandler.getHTTPErrorHandler(error) + errorHandler.getHTTPErrorHandler(error); }, }); diff --git a/extensions/default/package.json b/extensions/default/package.json index ae0b10a7c..047daac42 100644 --- a/extensions/default/package.json +++ b/extensions/default/package.json @@ -37,7 +37,7 @@ "react-i18next": "^10.11.0", "react-router": "next", "react-router-dom": "next", - "webpack": "^5.43.0", + "webpack": "^5.50.0", "webpack-merge": "^5.7.3" }, "dependencies": { diff --git a/extensions/dicom-sr/package.json b/extensions/dicom-sr/package.json index 71ecd74ea..b541a4974 100644 --- a/extensions/dicom-sr/package.json +++ b/extensions/dicom-sr/package.json @@ -31,16 +31,16 @@ "peerDependencies": { "@ohif/core": "^0.50.0", "@ohif/ui": "^0.50.0", - "cornerstone-core": "^2.3.0", + "cornerstone-core": "^2.5.0", "cornerstone-math": "^0.1.9", - "cornerstone-tools": "5.1.2", - "cornerstone-wado-image-loader": "^3.1.2", + "cornerstone-tools": "6.0.0", + "cornerstone-wado-image-loader": "4.0.3", "dcmjs": "0.16.1", - "dicom-parser": "^1.8.3", + "dicom-parser": "^1.8.9", "hammerjs": "^2.0.8", "prop-types": "^15.6.2", "react": "^17.0.2", - "react-cornerstone-viewport": "4.0.5" + "react-cornerstone-viewport": "4.1.1" }, "dependencies": { "@babel/runtime": "7.7.6", diff --git a/extensions/dicom-sr/src/index.js b/extensions/dicom-sr/src/index.js index 7fd9be0ca..f366f8b34 100644 --- a/extensions/dicom-sr/src/index.js +++ b/extensions/dicom-sr/src/index.js @@ -5,7 +5,9 @@ import id from './id.js'; import init from './init'; const Component = React.lazy(() => { - return import('./viewports/OHIFCornerstoneSRViewport'); + return import( + /* webpackPrefetch: true */ './viewports/OHIFCornerstoneSRViewport' + ); }); const OHIFCornerstoneSRViewport = props => { diff --git a/extensions/measurement-tracking/package.json b/extensions/measurement-tracking/package.json index 4278e9f44..f5d989382 100644 --- a/extensions/measurement-tracking/package.json +++ b/extensions/measurement-tracking/package.json @@ -29,14 +29,14 @@ "peerDependencies": { "@ohif/core": "^0.50.0", "classnames": "^2.2.6", - "cornerstone-core": "^2.3.0", - "cornerstone-tools": "5.1.2", + "cornerstone-core": "^2.5.0", + "cornerstone-tools": "6.0.0", "dcmjs": "0.16.1", "prop-types": "^15.6.2", "react": "^16.13.1", - "react-cornerstone-viewport": "^4.0.5", + "react-cornerstone-viewport": "^4.1.1", "react-dom": "^16.13.1", - "webpack": "^5.43.0", + "webpack": "^5.50.0", "webpack-merge": "^5.7.3" }, "dependencies": { diff --git a/extensions/measurement-tracking/src/getViewportModule.js b/extensions/measurement-tracking/src/getViewportModule.js index c9974fb9a..ae4a8b6c8 100644 --- a/extensions/measurement-tracking/src/getViewportModule.js +++ b/extensions/measurement-tracking/src/getViewportModule.js @@ -1,7 +1,9 @@ import React from 'react'; const Component = React.lazy(() => { - return import('./viewports/TrackedCornerstoneViewport'); + return import( + /* webpackPrefetch: true */ './viewports/TrackedCornerstoneViewport' + ); }); const OHIFCornerstoneViewport = props => { @@ -12,7 +14,11 @@ const OHIFCornerstoneViewport = props => { ); }; -function getViewportModule({ servicesManager, commandsManager, extensionManager }) { +function getViewportModule({ + servicesManager, + commandsManager, + extensionManager, +}) { const ExtendedOHIFCornerstoneTrackingViewport = props => { return ( { port: 3000, host: '0.0.0.0', public: 'http://localhost:' + 3000, + //writeToDisk: true, historyApiFallback: { disableDotRule: true, }, diff --git a/platform/viewer/package.json b/platform/viewer/package.json index 4f4e2f510..a100db2c1 100644 --- a/platform/viewer/package.json +++ b/platform/viewer/package.json @@ -45,11 +45,9 @@ "README.md" ], "peerDependencies": { - "cornerstone-core": "^2.3.0" + "cornerstone-core": "^2.5.0" }, "dependencies": { - "react": "^17.0.2", - "react-dom": "^17.0.2", "@babel/runtime": "7.7.6", "@ohif/core": "^2.5.1", "@ohif/extension-cornerstone": "^2.4.0", @@ -59,12 +57,12 @@ "@ohif/ui": "^2.0.0", "@types/react": "^16.0.0", "classnames": "^2.2.6", - "core-js": "^3.2.1", + "core-js": "^3.16.1", "cornerstone-math": "^0.1.9", - "cornerstone-tools": "5.1.2", - "cornerstone-wado-image-loader": "^3.1.2", + "cornerstone-tools": "6.0.0", + "cornerstone-wado-image-loader": "4.0.3", "dcmjs": "0.16.1", - "dicom-parser": "^1.8.3", + "dicom-parser": "^1.8.9", "dotenv-webpack": "^1.7.0", "hammerjs": "^2.0.8", "history": "5.0.0", @@ -75,6 +73,8 @@ "oidc-client": "1.11.5", "prop-types": "^15.7.2", "query-string": "^6.12.1", + "react": "^17.0.2", + "react-dom": "^17.0.2", "react-dropzone": "^10.1.7", "react-i18next": "^10.11.0", "react-resize-detector": "^4.2.0", @@ -82,16 +82,16 @@ "react-router-dom": "next" }, "devDependencies": { - "webpack": "^5.43.0", - "webpack-cli": "^4.7.2", "@percy/cypress": "^2.3.0", "cypress": "^6.4.0", "cypress-file-upload": "^3.5.3", "identity-obj-proxy": "3.0.x", "lodash": "4.17.15", + "tailwindcss": "2.2.4", "terser-webpack-plugin": "^5.1.1", + "webpack": "^5.50.0", "webpack-bundle-analyzer": "^4.4.2", - "webpack-merge": "^5.7.3", - "tailwindcss": "2.2.4" + "webpack-cli": "^4.7.2", + "webpack-merge": "^5.7.3" } } diff --git a/platform/viewer/public/html-templates/index.html b/platform/viewer/public/html-templates/index.html index 9374a43f8..f32a866c5 100644 --- a/platform/viewer/public/html-templates/index.html +++ b/platform/viewer/public/html-templates/index.html @@ -2,7 +2,7 @@ - + @@ -69,13 +69,14 @@ - - + + OHIF Viewer - + +