diff --git a/package-lock.json b/package-lock.json index e0caa92a6a..02082daca4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12465,6 +12465,21 @@ "url": "https://opencollective.com/browserslist" } }, + "node_modules/canvas": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.10.2.tgz", + "integrity": "sha512-FSmlsip0nZ0U4Zcfht0qBJqDhlfGuevTZKE8h+dBOYrJjGvY3iqMGSzzbvkaFhvMXiVxfcMaPHS/kge++T5SKg==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.17.0", + "simple-get": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -25563,9 +25578,9 @@ "integrity": "sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==" }, "node_modules/nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" }, "node_modules/nanoclone": { "version": "0.2.1", @@ -27620,15 +27635,6 @@ "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" }, - "node_modules/pdfjs-dist210": { - "name": "pdfjs-dist", - "version": "2.10.377", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.10.377.tgz", - "integrity": "sha512-i0jRShtvgfsVQUNCoFYH4SVhPO3U0yhtiFLfZ0RR0B+68N+Vnwq+8B3cjWjLEwWGh8wg1XQ/sYMYKUlHn/Qpsw==", - "peerDependencies": { - "worker-loader": "^3.0.7" - } - }, "node_modules/pdfjs-dist213": { "name": "pdfjs-dist", "version": "2.13.216", @@ -27646,6 +27652,26 @@ } } }, + "node_modules/pdfjs-dist31": { + "name": "pdfjs-dist", + "version": "3.1.81", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-3.1.81.tgz", + "integrity": "sha512-hZHVVbjU2Ac1VYyPFrg9fBcyS7EEdB8YFy5upk6LmnsXl10WxAavdiViGWi2C/xK0GZObEpSSJU1VnoF9t8n9w==", + "dependencies": { + "web-streams-polyfill": "^3.2.1" + }, + "optionalDependencies": { + "canvas": "^2.10.2" + } + }, + "node_modules/pdfjs-dist31/node_modules/web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "engines": { + "node": ">= 8" + } + }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -31077,6 +31103,61 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "optional": true, + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-get/node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "optional": true, + "dependencies": { + "mimic-response": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/simple-get/node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "optional": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/simple-is": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/simple-is/-/simple-is-0.2.0.tgz", @@ -35088,6 +35169,7 @@ "version": "3.0.8", "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-3.0.8.tgz", "integrity": "sha512-XQyQkIFeRVC7f7uRhFdNMe/iJOdO6zxAaR3EWbDp45v3mDhrTi+++oswKNxShUNjPC/1xUp5DB29YKLhFo129g==", + "devOptional": true, "dependencies": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" @@ -38542,8 +38624,8 @@ "passport-orcid": "0.0.4", "passport-saml": "https://github.com/overleaf/passport-saml/releases/download/v3.2.3-overleaf/passport-saml-3.2.3-overleaf.tar.gz", "passport-twitter": "^1.0.4", - "pdfjs-dist210": "npm:pdfjs-dist@2.10.377", "pdfjs-dist213": "npm:pdfjs-dist@2.13.216", + "pdfjs-dist31": "npm:pdfjs-dist@3.1.81", "prop-types": "^15.7.2", "pug": "^3.0.1", "pug-runtime": "^3.0.1", @@ -48663,8 +48745,8 @@ "passport-orcid": "0.0.4", "passport-saml": "https://github.com/overleaf/passport-saml/releases/download/v3.2.3-overleaf/passport-saml-3.2.3-overleaf.tar.gz", "passport-twitter": "^1.0.4", - "pdfjs-dist210": "npm:pdfjs-dist@2.10.377", "pdfjs-dist213": "npm:pdfjs-dist@2.13.216", + "pdfjs-dist31": "npm:pdfjs-dist@3.1.81", "pirates": "^4.0.1", "postcss-loader": "^6.2.1", "prop-types": "^15.7.2", @@ -53915,6 +53997,17 @@ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001304.tgz", "integrity": "sha512-bdsfZd6K6ap87AGqSHJP/s1V+U6Z5lyrcbBu3ovbCCf8cSYpwTtGrCBObMpJqwxfTbLW6YTIdbb1jEeTelcpYQ==" }, + "canvas": { + "version": "2.10.2", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.10.2.tgz", + "integrity": "sha512-FSmlsip0nZ0U4Zcfht0qBJqDhlfGuevTZKE8h+dBOYrJjGvY3iqMGSzzbvkaFhvMXiVxfcMaPHS/kge++T5SKg==", + "optional": true, + "requires": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.17.0", + "simple-get": "^3.0.3" + } + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -64296,9 +64389,9 @@ "integrity": "sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==" }, "nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" }, "nanoclone": { "version": "0.2.1", @@ -66359,12 +66452,6 @@ "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" }, - "pdfjs-dist210": { - "version": "npm:pdfjs-dist@2.10.377", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.10.377.tgz", - "integrity": "sha512-i0jRShtvgfsVQUNCoFYH4SVhPO3U0yhtiFLfZ0RR0B+68N+Vnwq+8B3cjWjLEwWGh8wg1XQ/sYMYKUlHn/Qpsw==", - "requires": {} - }, "pdfjs-dist213": { "version": "npm:pdfjs-dist@2.13.216", "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-2.13.216.tgz", @@ -66373,6 +66460,22 @@ "web-streams-polyfill": "^3.2.0" } }, + "pdfjs-dist31": { + "version": "npm:pdfjs-dist@3.1.81", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-3.1.81.tgz", + "integrity": "sha512-hZHVVbjU2Ac1VYyPFrg9fBcyS7EEdB8YFy5upk6LmnsXl10WxAavdiViGWi2C/xK0GZObEpSSJU1VnoF9t8n9w==", + "requires": { + "canvas": "^2.10.2", + "web-streams-polyfill": "^3.2.1" + }, + "dependencies": { + "web-streams-polyfill": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", + "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==" + } + } + }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -69121,6 +69224,40 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "optional": true + }, + "simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "optional": true, + "requires": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + }, + "dependencies": { + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "optional": true, + "requires": { + "mimic-response": "^2.0.0" + } + }, + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "optional": true + } + } + }, "simple-is": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/simple-is/-/simple-is-0.2.0.tgz", @@ -72359,6 +72496,7 @@ "version": "3.0.8", "resolved": "https://registry.npmjs.org/worker-loader/-/worker-loader-3.0.8.tgz", "integrity": "sha512-XQyQkIFeRVC7f7uRhFdNMe/iJOdO6zxAaR3EWbDp45v3mDhrTi+++oswKNxShUNjPC/1xUp5DB29YKLhFo129g==", + "devOptional": true, "requires": { "loader-utils": "^2.0.0", "schema-utils": "^3.0.0" diff --git a/services/web/app/src/Features/Project/ProjectController.js b/services/web/app/src/Features/Project/ProjectController.js index 02464c2485..410beebf9c 100644 --- a/services/web/app/src/Features/Project/ProjectController.js +++ b/services/web/app/src/Features/Project/ProjectController.js @@ -904,7 +904,7 @@ const ProjectController = { SplitTestHandler.getAssignment( req, res, - 'pdfjs', + 'pdfjs-31', {}, (error, assignment) => { // do not fail editor load if assignment fails diff --git a/services/web/cypress/support/webpack.cypress.ts b/services/web/cypress/support/webpack.cypress.ts index 976854d9d8..aaacd2e7d6 100644 --- a/services/web/cypress/support/webpack.cypress.ts +++ b/services/web/cypress/support/webpack.cypress.ts @@ -35,7 +35,7 @@ const buildConfig = () => { ) // add entrypoints under '/' for pdfjs workers - const pdfjsVersions = ['pdfjs-dist210', 'pdfjs-dist213'] + const pdfjsVersions = ['pdfjs-dist213', 'pdfjs-dist31'] for (const name of pdfjsVersions) { addWorker(name, `${name}/legacy/build/pdf.worker.js`) } diff --git a/services/web/frontend/js/features/pdf-preview/util/pdf-js-versions.js b/services/web/frontend/js/features/pdf-preview/util/pdf-js-versions.js index 11e45d4de3..a8dbdd89f1 100644 --- a/services/web/frontend/js/features/pdf-preview/util/pdf-js-versions.js +++ b/services/web/frontend/js/features/pdf-preview/util/pdf-js-versions.js @@ -6,20 +6,20 @@ import 'core-js/stable/promise/all-settled' // polyfill for Promise.allSettled ( import getMeta from '../../../utils/meta' import { createWorker } from '../../../utils/worker' -async function importPDFJS210() { - const cMapUrl = '/js/pdfjs-dist210/cmaps/' - const standardFontDataUrl = '/fonts/pdfjs-dist210/' - const imageResourcesPath = '/images/pdfjs-dist210' +async function importPDFJS31() { + const cMapUrl = '/js/pdfjs-dist31/cmaps/' + const standardFontDataUrl = '/fonts/pdfjs-dist31/' + const imageResourcesPath = '/images/pdfjs-dist31' const [PDFJS, PDFJSViewer] = await Promise.all([ - import('pdfjs-dist210/legacy/build/pdf'), - import('pdfjs-dist210/legacy/web/pdf_viewer'), - import('pdfjs-dist210/legacy/web/pdf_viewer.css'), + import('pdfjs-dist31/legacy/build/pdf'), + import('pdfjs-dist31/legacy/web/pdf_viewer'), + import('pdfjs-dist31/legacy/web/pdf_viewer.css'), ]) createWorker(() => { PDFJS.GlobalWorkerOptions.workerPort = new Worker( - new URL('pdfjs-dist210/legacy/build/pdf.worker.js', import.meta.url) + new URL('pdfjs-dist31/legacy/build/pdf.worker.js', import.meta.url) ) }) @@ -66,8 +66,8 @@ async function importPDFJS() { case 'default': return importPDFJS213() - case '210': - return importPDFJS210() + case '318': + return importPDFJS31() } } diff --git a/services/web/frontend/js/features/pdf-preview/util/pdf-js-wrapper.js b/services/web/frontend/js/features/pdf-preview/util/pdf-js-wrapper.js index f6e3e67358..6ed84aa54f 100644 --- a/services/web/frontend/js/features/pdf-preview/util/pdf-js-wrapper.js +++ b/services/web/frontend/js/features/pdf-preview/util/pdf-js-wrapper.js @@ -54,6 +54,8 @@ export default class PDFJSWrapper { enableXfa: false, // default is false (2021-10-12), but set explicitly to be sure renderInteractiveForms: false, maxCanvasPixels: 8192 * 8192, // default is 4096 * 4096, increased for better resolution at high zoom levels + annotationMode: PDFJS.AnnotationMode?.ENABLE, // enable annotations but not forms + annotationEditorMode: PDFJS.AnnotationEditorType?.DISABLE, // disable annotation editing }) linkService.setViewer(viewer) diff --git a/services/web/package.json b/services/web/package.json index b7e7f24228..3dffe21bc2 100644 --- a/services/web/package.json +++ b/services/web/package.json @@ -200,8 +200,8 @@ "passport-orcid": "0.0.4", "passport-saml": "https://github.com/overleaf/passport-saml/releases/download/v3.2.3-overleaf/passport-saml-3.2.3-overleaf.tar.gz", "passport-twitter": "^1.0.4", - "pdfjs-dist210": "npm:pdfjs-dist@2.10.377", "pdfjs-dist213": "npm:pdfjs-dist@2.13.216", + "pdfjs-dist31": "npm:pdfjs-dist@3.1.81", "prop-types": "^15.7.2", "pug": "^3.0.1", "pug-runtime": "^3.0.1", diff --git a/services/web/webpack.config.js b/services/web/webpack.config.js index 55e6d89a09..6c9d90a666 100644 --- a/services/web/webpack.config.js +++ b/services/web/webpack.config.js @@ -60,7 +60,7 @@ function getModuleDirectory(moduleName) { const mathjaxDir = getModuleDirectory('mathjax') const aceDir = getModuleDirectory('ace-builds') -const pdfjsVersions = ['pdfjs-dist210', 'pdfjs-dist213'] +const pdfjsVersions = ['pdfjs-dist213', 'pdfjs-dist31'] const vendorDir = path.join(__dirname, 'frontend/js/vendor')