diff --git a/packages/pluggableWidgets/document-viewer-web/CHANGELOG.md b/packages/pluggableWidgets/document-viewer-web/CHANGELOG.md index d4eefaf062..e2ac64d9c1 100644 --- a/packages/pluggableWidgets/document-viewer-web/CHANGELOG.md +++ b/packages/pluggableWidgets/document-viewer-web/CHANGELOG.md @@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased] +### Changed + +- We moved the bundle of pdfjs worker to local build instead of using CDN for better CSP compliance. + ## [1.0.0] - 2025-05-05 ### Added diff --git a/packages/pluggableWidgets/document-viewer-web/components/PDFViewer.tsx b/packages/pluggableWidgets/document-viewer-web/components/PDFViewer.tsx index 1f5549b5c5..902d980593 100644 --- a/packages/pluggableWidgets/document-viewer-web/components/PDFViewer.tsx +++ b/packages/pluggableWidgets/document-viewer-web/components/PDFViewer.tsx @@ -6,10 +6,15 @@ import { downloadFile } from "../utils/helpers"; import { useZoomScale } from "../utils/useZoomScale"; import BaseViewer from "./BaseViewer"; import { DocRendererElement, DocumentRendererProps, DocumentStatus } from "./documentRenderer"; -pdfjs.GlobalWorkerOptions.workerSrc = `//unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`; + +pdfjs.GlobalWorkerOptions.workerSrc = new URL( + "/widgets/com/mendix/shared/pdfjs/pdf.worker.mjs", + import.meta.url +).toString(); + const options = { - cMapUrl: `https://unpkg.com/pdfjs-dist@${pdfjs.version}/cmaps/`, - standardFontDataUrl: `https://unpkg.com/pdfjs-dist@${pdfjs.version}/standard_fonts` + cMapUrl: "/widgets/com/mendix/shared/pdfjs/cmaps/", + standardFontDataUrl: "/widgets/com/mendix/shared/pdfjs/standard_fonts" }; const PDFViewer: DocRendererElement = (props: DocumentRendererProps) => { diff --git a/packages/pluggableWidgets/document-viewer-web/package.json b/packages/pluggableWidgets/document-viewer-web/package.json index 039e54587c..25a1270a4b 100644 --- a/packages/pluggableWidgets/document-viewer-web/package.json +++ b/packages/pluggableWidgets/document-viewer-web/package.json @@ -1,7 +1,7 @@ { "name": "@mendix/document-viewer-web", "widgetName": "DocumentViewer", - "version": "1.0.0", + "version": "1.1.0", "description": "View PDF and other document types", "copyright": "© Mendix Technology BV 2025. All rights reserved.", "license": "Apache-2.0", @@ -38,8 +38,8 @@ "@mendix/widget-plugin-component-kit": "workspace:*", "@mendix/widget-plugin-platform": "workspace:*", "classnames": "^2.5.1", - "docx-preview": "^0.3.5", - "pdfjs-dist": "^5.0.375", + "docx-preview": "^0.3.6", + "pdfjs-dist": "4.8.69", "react-pdf": "^9.2.1", "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.3/xlsx-0.20.3.tgz" }, diff --git a/packages/pluggableWidgets/document-viewer-web/rollup.config.mjs b/packages/pluggableWidgets/document-viewer-web/rollup.config.mjs index 08186f7455..c22145f8f9 100644 --- a/packages/pluggableWidgets/document-viewer-web/rollup.config.mjs +++ b/packages/pluggableWidgets/document-viewer-web/rollup.config.mjs @@ -1,5 +1,6 @@ import commonjs from "@rollup/plugin-commonjs"; import replace from "@rollup/plugin-replace"; +import copy from "rollup-plugin-copy"; import { copyDefaultFilesPlugin } from "@mendix/rollup-web-widgets/copyFiles.mjs"; export default args => { @@ -43,7 +44,26 @@ export default args => { "!PDFWorkerUtil.isWorkerDisabled && !PDFWorker.#mainThreadWorkerMessageHandler": "false" } }), - copyDefaultFilesPlugin() + copyDefaultFilesPlugin(), + copy({ + targets: [ + { + src: "node_modules/pdfjs-dist/cmaps", + dest: "dist/tmp/widgets/com/mendix/shared/pdfjs/", + flatten: false + }, + { + src: "node_modules/pdfjs-dist/standard_fonts", + dest: "dist/tmp/widgets/com/mendix/shared/pdfjs/", + flatten: false + }, + { + src: "node_modules/pdfjs-dist/build/pdf.worker.min.mjs", + dest: "dist/tmp/widgets/com/mendix/shared/pdfjs/", + rename: "pdf.worker.mjs" + } + ] + }) ] }; }); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 43a9a31f2e..231cc1b4ad 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1297,11 +1297,11 @@ importers: specifier: ^2.5.1 version: 2.5.1 docx-preview: - specifier: ^0.3.5 - version: 0.3.5 + specifier: ^0.3.6 + version: 0.3.6 pdfjs-dist: - specifier: ^5.0.375 - version: 5.1.91 + specifier: 4.8.69 + version: 4.8.69 react-pdf: specifier: ^9.2.1 version: 9.2.1(@types/react@18.2.36)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -4133,70 +4133,6 @@ packages: engines: {node: '>=20'} hasBin: true - '@napi-rs/canvas-android-arm64@0.1.68': - resolution: {integrity: sha512-h1KcSR4LKLfRfzeBH65xMxbWOGa1OtMFQbCMVlxPCkN1Zr+2gK+70pXO5ktojIYcUrP6KDcOwoc8clho5ccM/w==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [android] - - '@napi-rs/canvas-darwin-arm64@0.1.68': - resolution: {integrity: sha512-/VURlrAD4gDoxW1GT/b0nP3fRz/fhxmHI/xznTq2FTwkQLPOlLkDLCvTmQ7v6LtGKdc2Ed6rvYpRan+JXThInQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - - '@napi-rs/canvas-darwin-x64@0.1.68': - resolution: {integrity: sha512-tEpvGR6vCLTo1Tx9wmDnoOKROpw57wiCWwCpDOuVlj/7rqEJOUYr9ixW4aRJgmeGBrZHgevI0EURys2ER6whmg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - - '@napi-rs/canvas-linux-arm-gnueabihf@0.1.68': - resolution: {integrity: sha512-U9xbJsumPOiAYeAFZMlHf62b9dGs2HJ6Q5xt7xTB0uEyPeurwhgYBWGgabdsEidyj38YuzI/c3LGBbSQB3vagw==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - - '@napi-rs/canvas-linux-arm64-gnu@0.1.68': - resolution: {integrity: sha512-KFkn8wEm3mPnWD4l8+OUUkxylSJuN5q9PnJRZJgv15RtCA1bgxIwTkBhI/+xuyVMcHqON9sXq7cDkEJtHm35dg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@napi-rs/canvas-linux-arm64-musl@0.1.68': - resolution: {integrity: sha512-IQzts91rCdOALXBWQxLZRCEDrfFTGDtNRJMNu+2SKZ1uT8cmPQkPwVk5rycvFpvgAcmiFiOSCp1aRrlfU8KPpQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - - '@napi-rs/canvas-linux-riscv64-gnu@0.1.68': - resolution: {integrity: sha512-e9AS5UttoIKqXSmBzKZdd3NErSVyOEYzJfNOCGtafGk1//gibTwQXGlSXmAKuErqMp09pyk9aqQRSYzm1AQfBw==} - engines: {node: '>= 10'} - cpu: [riscv64] - os: [linux] - - '@napi-rs/canvas-linux-x64-gnu@0.1.68': - resolution: {integrity: sha512-Pa/I36VE3j57I3Obhrr+J48KGFfkZk2cJN/2NmW/vCgmoF7kCP6aTVq5n+cGdGWLd/cN9CJ9JvNwEoMRDghu0g==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@napi-rs/canvas-linux-x64-musl@0.1.68': - resolution: {integrity: sha512-9c6rkc5195wNxuUHJdf4/mmnq433OQey9TNvQ9LspJazvHbfSkTij8wtKjASVQsJyPDva4fkWOeV/OQ7cLw0GQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - - '@napi-rs/canvas-win32-x64-msvc@0.1.68': - resolution: {integrity: sha512-Fc5Dez23u0FoSATurT6/w1oMytiRnKWEinHivdMvXpge6nG4YvhrASrtqMk8dGJMVQpHr8QJYF45rOrx2YU2Aw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - - '@napi-rs/canvas@0.1.68': - resolution: {integrity: sha512-LQESrePLEBLvhuFkXx9jjBXRC2ClYsO5mqQ1m/puth5z9SOuM3N/B3vDuqnC3RJFktDktyK9khGvo7dTkqO9uQ==} - engines: {node: '>= 10'} - '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -5833,8 +5769,8 @@ packages: canvas-fit@1.5.0: resolution: {integrity: sha512-onIcjRpz69/Hx5bB5HGbYKUF2uC6QT6Gp+pfpGm3A7mPfcluSLV5v4Zu+oflDUwLdUw0rLIBhUbi0v8hM4FJQQ==} - canvas@3.1.0: - resolution: {integrity: sha512-tTj3CqqukVJ9NgSahykNwtGda7V33VLObwrHfzT0vqJXu7J4d4C/7kQQW3fOEGDfZZoILPut5H00gOjyttPGyg==} + canvas@3.1.2: + resolution: {integrity: sha512-Z/tzFAcBzoCvJlOSlCnoekh1Gu8YMn0J51+UAuXJAbW1Z6I9l2mZgdD7738MepoeeIcUdDtbMnOg6cC7GJxy/g==} engines: {node: ^18.12.0 || >= 20.9.0} chalk@2.4.2: @@ -6528,8 +6464,8 @@ packages: engines: {node: '>=0.10'} hasBin: true - detect-libc@2.0.3: - resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + detect-libc@2.0.4: + resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} engines: {node: '>=8'} detect-newline@3.1.0: @@ -6576,8 +6512,8 @@ packages: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} - docx-preview@0.3.5: - resolution: {integrity: sha512-nod1jG5PkvzDIiZAcgAY4gSFQzgmAAChcuZH4Hj9dj7oCzscY3Hn8NfbUv7X7Jk4xL1lfKO113JLDhWKOt6fYw==} + docx-preview@0.3.6: + resolution: {integrity: sha512-gKVPE18hlpfuhQHiptsw1rbOwzQeGSwK10/w7hv1ZMEqHmjtCuTpz6AUMfu1twIPGxgpcsMXThKI6B6WsP3L1w==} dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} @@ -8998,8 +8934,8 @@ packages: resolution: {integrity: sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw==} engines: {node: '>=12.0.0'} - node-abi@3.74.0: - resolution: {integrity: sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==} + node-abi@3.75.0: + resolution: {integrity: sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==} engines: {node: '>=10'} node-abort-controller@3.1.1: @@ -9311,10 +9247,6 @@ packages: resolution: {integrity: sha512-IHZsA4T7YElCKNNXtiLgqScw4zPd3pG9do8UrznC757gMd7UPeHSL2qwNNMJo4r79fl8oj1Xx+1nh2YkzdMpLQ==} engines: {node: '>=18'} - pdfjs-dist@5.1.91: - resolution: {integrity: sha512-qSIADdagooJB4wWCBnrBJjRvASevmxL0BwafvOuKJG5uTQdYoFBrhrRYnucKNiSc9qS6JIk0hC5y1yktFljXkA==} - engines: {node: '>=20'} - peggy@1.2.0: resolution: {integrity: sha512-PQ+NKpAobImfMprYQtc4Egmyi29bidRGEX0kKjCU5uuW09s0Cthwqhfy7mLkwcB4VcgacE5L/ZjruD/kOPCUUw==} engines: {node: '>=10'} @@ -9746,8 +9678,8 @@ packages: psl@1.9.0: resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} - pump@3.0.0: - resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + pump@3.0.3: + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} punycode.js@2.3.1: resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} @@ -10762,8 +10694,8 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} - tar-fs@2.1.2: - resolution: {integrity: sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==} + tar-fs@2.1.3: + resolution: {integrity: sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==} tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} @@ -13345,50 +13277,6 @@ snapshots: - tslib - utf-8-validate - '@napi-rs/canvas-android-arm64@0.1.68': - optional: true - - '@napi-rs/canvas-darwin-arm64@0.1.68': - optional: true - - '@napi-rs/canvas-darwin-x64@0.1.68': - optional: true - - '@napi-rs/canvas-linux-arm-gnueabihf@0.1.68': - optional: true - - '@napi-rs/canvas-linux-arm64-gnu@0.1.68': - optional: true - - '@napi-rs/canvas-linux-arm64-musl@0.1.68': - optional: true - - '@napi-rs/canvas-linux-riscv64-gnu@0.1.68': - optional: true - - '@napi-rs/canvas-linux-x64-gnu@0.1.68': - optional: true - - '@napi-rs/canvas-linux-x64-musl@0.1.68': - optional: true - - '@napi-rs/canvas-win32-x64-msvc@0.1.68': - optional: true - - '@napi-rs/canvas@0.1.68': - optionalDependencies: - '@napi-rs/canvas-android-arm64': 0.1.68 - '@napi-rs/canvas-darwin-arm64': 0.1.68 - '@napi-rs/canvas-darwin-x64': 0.1.68 - '@napi-rs/canvas-linux-arm-gnueabihf': 0.1.68 - '@napi-rs/canvas-linux-arm64-gnu': 0.1.68 - '@napi-rs/canvas-linux-arm64-musl': 0.1.68 - '@napi-rs/canvas-linux-riscv64-gnu': 0.1.68 - '@napi-rs/canvas-linux-x64-gnu': 0.1.68 - '@napi-rs/canvas-linux-x64-musl': 0.1.68 - '@napi-rs/canvas-win32-x64-msvc': 0.1.68 - optional: true - '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -15508,7 +15396,7 @@ snapshots: dependencies: element-size: 1.1.1 - canvas@3.1.0: + canvas@3.1.2: dependencies: node-addon-api: 7.1.1 prebuild-install: 7.1.3 @@ -16313,7 +16201,7 @@ snapshots: detect-libc@1.0.3: optional: true - detect-libc@2.0.3: + detect-libc@2.0.4: optional: true detect-newline@3.1.0: {} @@ -16356,7 +16244,7 @@ snapshots: dependencies: esutils: 2.0.3 - docx-preview@0.3.5: + docx-preview@0.3.6: dependencies: jszip: 3.10.1 @@ -19509,7 +19397,7 @@ snapshots: nocache@3.0.4: {} - node-abi@3.74.0: + node-abi@3.75.0: dependencies: semver: 7.7.2 optional: true @@ -19817,13 +19705,9 @@ snapshots: pdfjs-dist@4.8.69: optionalDependencies: - canvas: 3.1.0 + canvas: 3.1.2 path2d: 0.2.2 - pdfjs-dist@5.1.91: - optionalDependencies: - '@napi-rs/canvas': 0.1.68 - peggy@1.2.0: {} performance-now@2.1.0: {} @@ -20217,17 +20101,17 @@ snapshots: prebuild-install@7.1.3: dependencies: - detect-libc: 2.0.3 + detect-libc: 2.0.4 expand-template: 2.0.3 github-from-package: 0.0.0 minimist: 1.2.8 mkdirp-classic: 0.5.3 napi-build-utils: 2.0.0 - node-abi: 3.74.0 - pump: 3.0.0 + node-abi: 3.75.0 + pump: 3.0.3 rc: 1.2.8 simple-get: 4.0.1 - tar-fs: 2.1.2 + tar-fs: 2.1.3 tunnel-agent: 0.6.0 optional: true @@ -20325,7 +20209,7 @@ snapshots: psl@1.9.0: {} - pump@3.0.0: + pump@3.0.3: dependencies: end-of-stream: 1.4.4 once: 1.4.0 @@ -20703,7 +20587,7 @@ snapshots: react-pdf@9.2.1(@types/react@18.2.36)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): dependencies: - clsx: 2.1.0 + clsx: 2.1.1 dequal: 2.0.3 make-cancellable-promise: 1.3.2 make-event-props: 1.6.2 @@ -21697,11 +21581,11 @@ snapshots: tapable@2.2.1: {} - tar-fs@2.1.2: + tar-fs@2.1.3: dependencies: chownr: 1.1.4 mkdirp-classic: 0.5.3 - pump: 3.0.0 + pump: 3.0.3 tar-stream: 2.2.0 optional: true