From 58ea307c1c76ba5135716866fd491c3d844c1c8d Mon Sep 17 00:00:00 2001 From: Mykhailo Kravchenko Date: Thu, 6 Feb 2025 18:59:38 +0100 Subject: [PATCH 1/5] bump react-fast-pdf --- package-lock.json | 266 ++++++++++++++++++++++++++++++++++++++-------- package.json | 2 +- 2 files changed, 222 insertions(+), 46 deletions(-) diff --git a/package-lock.json b/package-lock.json index b976f36b5134..404237a9d395 100644 --- a/package-lock.json +++ b/package-lock.json @@ -76,7 +76,7 @@ "react-content-loader": "^7.0.0", "react-dom": "18.3.1", "react-error-boundary": "^4.0.11", - "react-fast-pdf": "^1.0.22", + "react-fast-pdf": "^1.0.25", "react-map-gl": "^7.1.3", "react-native": "0.76.3", "react-native-advanced-input-mask": "1.2.1", @@ -6968,8 +6968,10 @@ }, "node_modules/@mapbox/node-pre-gyp": { "version": "1.0.10", + "dev": true, "license": "BSD-3-Clause", "optional": true, + "peer": true, "dependencies": { "detect-libc": "^2.0.0", "https-proxy-agent": "^5.0.0", @@ -6987,8 +6989,10 @@ }, "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir": { "version": "3.1.0", + "dev": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "semver": "^6.0.0" }, @@ -7001,16 +7005,20 @@ }, "node_modules/@mapbox/node-pre-gyp/node_modules/make-dir/node_modules/semver": { "version": "6.3.1", + "dev": true, "license": "ISC", "optional": true, + "peer": true, "bin": { "semver": "bin/semver.js" } }, "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": { "version": "5.0.0", + "dev": true, "license": "ISC", "optional": true, + "peer": true, "dependencies": { "abbrev": "1" }, @@ -14950,7 +14958,7 @@ }, "node_modules/abbrev": { "version": "1.1.1", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/abort-controller": { @@ -15035,7 +15043,7 @@ }, "node_modules/agent-base": { "version": "6.0.2", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "debug": "4" @@ -15411,7 +15419,7 @@ }, "node_modules/aproba": { "version": "1.2.0", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/archiver": { @@ -15477,8 +15485,10 @@ }, "node_modules/are-we-there-yet": { "version": "2.0.0", + "dev": true, "license": "ISC", "optional": true, + "peer": true, "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -15489,8 +15499,10 @@ }, "node_modules/are-we-there-yet/node_modules/readable-stream": { "version": "3.6.2", + "dev": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -17304,9 +17316,11 @@ }, "node_modules/canvas": { "version": "2.11.2", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "@mapbox/node-pre-gyp": "^1.0.0", "nan": "^2.17.0", @@ -17632,7 +17646,9 @@ } }, "node_modules/clsx": { - "version": "2.0.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", "license": "MIT", "engines": { "node": ">=6" @@ -17693,7 +17709,7 @@ }, "node_modules/color-support": { "version": "1.1.3", - "devOptional": true, + "dev": true, "license": "ISC", "bin": { "color-support": "bin.js" @@ -18140,7 +18156,7 @@ }, "node_modules/console-control-strings": { "version": "1.1.0", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/constants-browserify": { @@ -18884,7 +18900,7 @@ }, "node_modules/decompress-response": { "version": "6.0.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" @@ -18898,7 +18914,7 @@ }, "node_modules/decompress-response/node_modules/mimic-response": { "version": "3.1.0", - "dev": true, + "devOptional": true, "license": "MIT", "engines": { "node": ">=10" @@ -19146,7 +19162,7 @@ }, "node_modules/delegates": { "version": "1.0.0", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/denodeify": { @@ -21544,6 +21560,16 @@ "node": ">= 0.8.0" } }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "optional": true, + "engines": { + "node": ">=6" + } + }, "node_modules/expect": { "version": "29.7.0", "dev": true, @@ -22758,9 +22784,8 @@ }, "node_modules/fs-constants": { "version": "1.0.0", - "dev": true, - "license": "MIT", - "peer": true + "devOptional": true, + "license": "MIT" }, "node_modules/fs-extra": { "version": "9.1.0", @@ -22841,8 +22866,10 @@ }, "node_modules/gauge": { "version": "3.0.2", + "dev": true, "license": "ISC", "optional": true, + "peer": true, "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.2", @@ -23082,6 +23109,13 @@ "giget": "dist/cli.mjs" } }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT", + "optional": true + }, "node_modules/github-slugger": { "version": "2.0.0", "dev": true, @@ -23438,7 +23472,7 @@ }, "node_modules/has-unicode": { "version": "2.0.1", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/hasown": { @@ -23877,7 +23911,7 @@ }, "node_modules/https-proxy-agent": { "version": "5.0.1", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "agent-base": "6", @@ -28203,6 +28237,8 @@ }, "node_modules/make-cancellable-promise": { "version": "1.3.2", + "resolved": "https://registry.npmjs.org/make-cancellable-promise/-/make-cancellable-promise-1.3.2.tgz", + "integrity": "sha512-GCXh3bq/WuMbS+Ky4JBPW1hYTOU+znU+Q5m9Pu+pI8EoUqIHk9+tviOKC6/qhHh8C4/As3tzJ69IF32kdz85ww==", "license": "MIT", "funding": { "url": "https://github.com/wojtekmaj/make-cancellable-promise?sponsor=1" @@ -28232,7 +28268,9 @@ "license": "ISC" }, "node_modules/make-event-props": { - "version": "1.6.1", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/make-event-props/-/make-event-props-1.6.2.tgz", + "integrity": "sha512-iDwf7mA03WPiR8QxvcVHmVWEPfMY1RZXerDVNCRYW7dUr2ppH3J58Rwb39/WG39yTZdRSxr3x+2v22tvI0VEvA==", "license": "MIT", "funding": { "url": "https://github.com/wojtekmaj/make-event-props?sponsor=1" @@ -28612,6 +28650,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/merge-refs/-/merge-refs-1.3.0.tgz", "integrity": "sha512-nqXPXbso+1dcKDpPCXvwZyJILz+vSLqGGOnDrYHQYE+B8n9JTCekVLC65AfCpR4ggVyA/45Y0iR9LDyS2iI+zA==", + "license": "MIT", "funding": { "url": "https://github.com/wojtekmaj/merge-refs?sponsor=1" }, @@ -29490,6 +29529,13 @@ "node": ">=10" } }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT", + "optional": true + }, "node_modules/mlly": { "version": "1.7.1", "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.1.tgz", @@ -29546,8 +29592,10 @@ }, "node_modules/nan": { "version": "2.17.0", + "dev": true, "license": "MIT", - "optional": true + "optional": true, + "peer": true }, "node_modules/nanoid": { "version": "3.3.8", @@ -29567,6 +29615,13 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT", + "optional": true + }, "node_modules/natural-compare": { "version": "1.4.0", "dev": true, @@ -29635,7 +29690,7 @@ }, "node_modules/node-abi": { "version": "3.65.0", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "semver": "^7.3.5" @@ -29912,8 +29967,10 @@ }, "node_modules/npmlog": { "version": "5.0.1", + "dev": true, "license": "ISC", "optional": true, + "peer": true, "dependencies": { "are-we-there-yet": "^2.0.0", "console-control-strings": "^1.1.0", @@ -30862,9 +30919,10 @@ } }, "node_modules/path2d": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/path2d/-/path2d-0.2.1.tgz", - "integrity": "sha512-Fl2z/BHvkTNvkuBzYTpTuirHZg6wW9z8+4SND/3mDTEcYbbNKWAy21dz9D3ePNNwrrK8pqZO5vLPZ1hLF6T7XA==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/path2d/-/path2d-0.2.2.tgz", + "integrity": "sha512-+vnG6S4dYcYxZd+CZxzXCNKdELYZSKfohrk98yajCo1PtRoDgCTrrwOvK1GT0UoAdVszagDVllQc0U1vaX4NUQ==", + "license": "MIT", "optional": true, "engines": { "node": ">=6" @@ -30889,17 +30947,40 @@ } }, "node_modules/pdfjs-dist": { - "version": "4.4.168", - "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-4.4.168.tgz", - "integrity": "sha512-MbkAjpwka/dMHaCfQ75RY1FXX3IewBVu6NGZOcxerRFlaBiIkZmUoR0jotX5VUzYZEXAGzSFtknWs5xRKliXPA==", + "version": "4.8.69", + "resolved": "https://registry.npmjs.org/pdfjs-dist/-/pdfjs-dist-4.8.69.tgz", + "integrity": "sha512-IHZsA4T7YElCKNNXtiLgqScw4zPd3pG9do8UrznC757gMd7UPeHSL2qwNNMJo4r79fl8oj1Xx+1nh2YkzdMpLQ==", + "license": "Apache-2.0", "engines": { "node": ">=18" }, "optionalDependencies": { - "canvas": "^2.11.2", - "path2d": "^0.2.0" + "canvas": "^3.0.0-rc2", + "path2d": "^0.2.1" + } + }, + "node_modules/pdfjs-dist/node_modules/canvas": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-3.1.0.tgz", + "integrity": "sha512-tTj3CqqukVJ9NgSahykNwtGda7V33VLObwrHfzT0vqJXu7J4d4C/7kQQW3fOEGDfZZoILPut5H00gOjyttPGyg==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "node-addon-api": "^7.0.0", + "prebuild-install": "^7.1.1" + }, + "engines": { + "node": "^18.12.0 || >= 20.9.0" } }, + "node_modules/pdfjs-dist/node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT", + "optional": true + }, "node_modules/pe-library": { "version": "0.4.0", "dev": true, @@ -31200,6 +31281,59 @@ "version": "2.0.0", "license": "ISC" }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prebuild-install/node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "optional": true, + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "dev": true, @@ -31912,13 +32046,13 @@ } }, "node_modules/react-fast-pdf": { - "version": "1.0.22", - "resolved": "https://registry.npmjs.org/react-fast-pdf/-/react-fast-pdf-1.0.22.tgz", - "integrity": "sha512-bU1YEHFfazKFSdmNAauD267GtjVHdcuE39jyHJQ8CRI8ZWWLwckZ8azPuE25i+hodCBmQuTNBdg6Gx4OhP8HOQ==", + "version": "1.0.25", + "resolved": "https://registry.npmjs.org/react-fast-pdf/-/react-fast-pdf-1.0.25.tgz", + "integrity": "sha512-Md4ZReRTbY+sY4dXyCAVuM8SBXxC3zh/pvcJOhLHhJx+8l1rpZj5MPjElnz94RBn/KPa2HP3HOzSZs9jLS4A+A==", "license": "MIT", "dependencies": { - "react-pdf": "^9.1.1", - "react-window": "^1.8.10" + "react-pdf": "^9.2.1", + "react-window": "^1.8.11" }, "engines": { "node": ">=20.10.0", @@ -31926,7 +32060,7 @@ }, "peerDependencies": { "lodash": "4.x", - "pdfjs-dist": "4.x", + "pdfjs-dist": "4.8.69", "react": "18.x", "react-dom": "18.x" } @@ -32851,16 +32985,17 @@ } }, "node_modules/react-pdf": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/react-pdf/-/react-pdf-9.1.1.tgz", - "integrity": "sha512-Cn3RTJZMqVOOCgLMRXDamLk4LPGfyB2Np3OwQAUjmHIh47EpuGW1OpAA1Z1GVDLoHx4d5duEDo/YbUkDbr4QFQ==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/react-pdf/-/react-pdf-9.2.1.tgz", + "integrity": "sha512-AJt0lAIkItWEZRA5d/mO+Om4nPCuTiQ0saA+qItO967DTjmGjnhmF+Bi2tL286mOTfBlF5CyLzJ35KTMaDoH+A==", + "license": "MIT", "dependencies": { "clsx": "^2.0.0", "dequal": "^2.0.3", "make-cancellable-promise": "^1.3.1", "make-event-props": "^1.6.0", "merge-refs": "^1.3.0", - "pdfjs-dist": "4.4.168", + "pdfjs-dist": "4.8.69", "tiny-invariant": "^1.0.0", "warning": "^4.0.0" }, @@ -33075,7 +33210,9 @@ } }, "node_modules/react-window": { - "version": "1.8.10", + "version": "1.8.11", + "resolved": "https://registry.npmjs.org/react-window/-/react-window-1.8.11.tgz", + "integrity": "sha512-+SRbUVT2scadgFSWx+R1P754xHPEqvcfSfVX10QYg6POOz+WNgkN48pS+BtZNIMGiL1HYrSEiCkwsMS15QogEQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.0.0", @@ -33085,8 +33222,8 @@ "node": ">8.0.0" }, "peerDependencies": { - "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0" + "react": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/read-binary-file-arch": { @@ -34059,7 +34196,7 @@ }, "node_modules/set-blocking": { "version": "2.0.0", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/set-function-length": { @@ -34232,8 +34369,10 @@ }, "node_modules/simple-get": { "version": "3.1.1", + "dev": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "decompress-response": "^4.2.0", "once": "^1.3.1", @@ -34242,8 +34381,10 @@ }, "node_modules/simple-get/node_modules/decompress-response": { "version": "4.2.1", + "dev": true, "license": "MIT", "optional": true, + "peer": true, "dependencies": { "mimic-response": "^2.0.0" }, @@ -34253,8 +34394,10 @@ }, "node_modules/simple-get/node_modules/mimic-response": { "version": "2.1.0", + "dev": true, "license": "MIT", "optional": true, + "peer": true, "engines": { "node": ">=8" }, @@ -35392,11 +35535,30 @@ "node": ">=10" } }, + "node_modules/tar-fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.2.tgz", + "integrity": "sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA==", + "license": "MIT", + "optional": true, + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC", + "optional": true + }, "node_modules/tar-stream": { "version": "2.2.0", - "dev": true, + "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -35410,9 +35572,8 @@ }, "node_modules/tar-stream/node_modules/readable-stream": { "version": "3.6.2", - "dev": true, + "devOptional": true, "license": "MIT", - "peer": true, "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -36124,6 +36285,19 @@ "node": ">=0.6.11 <=0.7.0 || >=0.7.3" } }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/tweetnacl": { "version": "1.0.3", "license": "Unlicense" @@ -36819,6 +36993,8 @@ }, "node_modules/warning": { "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", "license": "MIT", "dependencies": { "loose-envify": "^1.0.0" @@ -37473,7 +37649,7 @@ }, "node_modules/wide-align": { "version": "1.1.5", - "devOptional": true, + "dev": true, "license": "ISC", "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" diff --git a/package.json b/package.json index 34e38fe54979..ef6a860f3576 100644 --- a/package.json +++ b/package.json @@ -143,7 +143,7 @@ "react-content-loader": "^7.0.0", "react-dom": "18.3.1", "react-error-boundary": "^4.0.11", - "react-fast-pdf": "^1.0.22", + "react-fast-pdf": "^1.0.25", "react-map-gl": "^7.1.3", "react-native": "0.76.3", "react-native-advanced-input-mask": "1.2.1", From faaaa273cb3e600a7e31cd3c330078bdab30be2e Mon Sep 17 00:00:00 2001 From: Mykhailo Kravchenko Date: Fri, 7 Feb 2025 14:50:34 +0100 Subject: [PATCH 2/5] Update webpack configuration to handle pdf.worker.min.mjs files as asset/source --- config/webpack/webpack.common.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/config/webpack/webpack.common.ts b/config/webpack/webpack.common.ts index d50fa927fa95..8ad26ac31e01 100644 --- a/config/webpack/webpack.common.ts +++ b/config/webpack/webpack.common.ts @@ -179,6 +179,12 @@ const getCommonConfiguration = ({file = '.env', platform = 'web'}: Environment): // We are importing this worker as a string by using asset/source otherwise it will default to loading via an HTTPS request later. // This causes issues if we have gone offline before the pdfjs web worker is set up as we won't be able to load it from the server. { + // eslint-disable-next-line prefer-regex-literals + test: new RegExp('node_modules/pdfjs-dist/build/pdf.worker.min.mjs'), + type: 'asset/source', + }, + { + // eslint-disable-next-line prefer-regex-literals test: new RegExp('node_modules/pdfjs-dist/legacy/build/pdf.worker.min.mjs'), type: 'asset/source', }, From 36358244e6906caffc1a200969a34ab133535f9a Mon Sep 17 00:00:00 2001 From: Mykhailo Kravchenko Date: Fri, 7 Feb 2025 14:51:44 +0100 Subject: [PATCH 3/5] Create isModernSafari for iOS version detection --- src/libs/Browser/index.ts | 6 ++++-- src/libs/Browser/index.website.ts | 26 ++++++++++++++++++++++++-- src/libs/Browser/types.ts | 4 +++- 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/libs/Browser/index.ts b/src/libs/Browser/index.ts index aeec4f4def4a..74427ea41be0 100644 --- a/src/libs/Browser/index.ts +++ b/src/libs/Browser/index.ts @@ -1,4 +1,4 @@ -import type {GetBrowser, IsChromeIOS, IsMobile, IsMobileChrome, IsMobileSafari, IsMobileWebKit, IsSafari, OpenRouteInDesktopApp} from './types'; +import type {GetBrowser, IsChromeIOS, IsMobile, IsMobileChrome, IsMobileSafari, IsMobileWebKit, IsModernSafari, IsSafari, OpenRouteInDesktopApp} from './types'; const getBrowser: GetBrowser = () => ''; @@ -14,6 +14,8 @@ const isChromeIOS: IsChromeIOS = () => false; const isSafari: IsSafari = () => false; +const isModernSafari: IsModernSafari = () => false; + const openRouteInDesktopApp: OpenRouteInDesktopApp = () => {}; -export {getBrowser, isMobile, isMobileSafari, isMobileWebKit, isSafari, isMobileChrome, isChromeIOS, openRouteInDesktopApp}; +export {getBrowser, isMobile, isMobileSafari, isMobileWebKit, isSafari, isModernSafari, isMobileChrome, isChromeIOS, openRouteInDesktopApp}; diff --git a/src/libs/Browser/index.website.ts b/src/libs/Browser/index.website.ts index 2f0ba7f0e289..5c2cf2e9a7c7 100644 --- a/src/libs/Browser/index.website.ts +++ b/src/libs/Browser/index.website.ts @@ -1,7 +1,7 @@ import CONFIG from '@src/CONFIG'; import CONST from '@src/CONST'; import ROUTES from '@src/ROUTES'; -import type {GetBrowser, IsChromeIOS, IsMobile, IsMobileChrome, IsMobileSafari, IsMobileWebKit, IsSafari, OpenRouteInDesktopApp} from './types'; +import type {GetBrowser, IsChromeIOS, IsMobile, IsMobileChrome, IsMobileSafari, IsMobileWebKit, IsModernSafari, IsSafari, OpenRouteInDesktopApp} from './types'; let isOpenRouteInDesktop = false; /** @@ -77,6 +77,16 @@ const isChromeIOS: IsChromeIOS = () => { const isSafari: IsSafari = () => getBrowser() === 'safari' || isMobileSafari(); +/** + * Checks if the requesting user agent is a modern version of Safari on iOS (version 18 or higher). + */ +const isModernSafari: IsModernSafari = (): boolean => { + const version = navigator.userAgent.match(/OS (\d+_\d+)/); + const iosVersion = version ? version[1].replace('_', '.') : ''; + + return parseFloat(iosVersion) >= 18; +}; + /** * The session information needs to be passed to the Desktop app, and the only way to do that is by using query params. There is no other way to transfer the data. */ @@ -127,4 +137,16 @@ const resetIsOpeningRouteInDesktop = () => { isOpenRouteInDesktop = false; }; -export {getBrowser, isMobile, isMobileSafari, isMobileWebKit, isSafari, isMobileChrome, isChromeIOS, openRouteInDesktopApp, isOpeningRouteInDesktop, resetIsOpeningRouteInDesktop}; +export { + getBrowser, + isMobile, + isMobileSafari, + isMobileWebKit, + isSafari, + isModernSafari, + isMobileChrome, + isChromeIOS, + openRouteInDesktopApp, + isOpeningRouteInDesktop, + resetIsOpeningRouteInDesktop, +}; diff --git a/src/libs/Browser/types.ts b/src/libs/Browser/types.ts index ff0de91e7b78..01c0decbf330 100644 --- a/src/libs/Browser/types.ts +++ b/src/libs/Browser/types.ts @@ -12,6 +12,8 @@ type IsChromeIOS = () => boolean; type IsSafari = () => boolean; +type IsModernSafari = () => boolean; + type OpenRouteInDesktopApp = (shortLivedAuthToken?: string, email?: string, initialRoute?: string) => void; -export type {GetBrowser, IsMobile, IsMobileSafari, IsMobileChrome, IsMobileWebKit, IsSafari, IsChromeIOS, OpenRouteInDesktopApp}; +export type {GetBrowser, IsMobile, IsMobileSafari, IsMobileChrome, IsMobileWebKit, IsSafari, IsModernSafari, IsChromeIOS, OpenRouteInDesktopApp}; From ceaa77301d4824c3e9a5b4abf5cdf82cc8cc1cc1 Mon Sep 17 00:00:00 2001 From: Mykhailo Kravchenko Date: Fri, 7 Feb 2025 14:52:09 +0100 Subject: [PATCH 4/5] Refactor PDF worker import to support modern and legacy Safari --- src/components/PDFThumbnail/index.tsx | 11 +++++++++-- src/types/modules/pdf.worker.d.ts | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/components/PDFThumbnail/index.tsx b/src/components/PDFThumbnail/index.tsx index 495c14ff76e1..fa91922a6498 100644 --- a/src/components/PDFThumbnail/index.tsx +++ b/src/components/PDFThumbnail/index.tsx @@ -1,17 +1,24 @@ import 'core-js/proposals/promise-with-resolvers'; // eslint-disable-next-line import/extensions -import pdfWorkerSource from 'pdfjs-dist/legacy/build/pdf.worker.min.mjs'; +import pdfWorkerSource from 'pdfjs-dist/build/pdf.worker.min.mjs'; +// eslint-disable-next-line import/extensions +import pdfWorkerLegacySource from 'pdfjs-dist/legacy/build/pdf.worker.min.mjs'; import React, {useMemo, useState} from 'react'; import {View} from 'react-native'; import {Document, pdfjs, Thumbnail} from 'react-pdf'; import FullScreenLoadingIndicator from '@components/FullscreenLoadingIndicator'; import useThemeStyles from '@hooks/useThemeStyles'; import addEncryptedAuthTokenToURL from '@libs/addEncryptedAuthTokenToURL'; +import {isMobileSafari, isModernSafari} from '@libs/Browser'; import PDFThumbnailError from './PDFThumbnailError'; import type PDFThumbnailProps from './types'; +const shouldUseLegacyWorker = isMobileSafari() && !isModernSafari(); +// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment +const pdfWorker = shouldUseLegacyWorker ? pdfWorkerLegacySource : pdfWorkerSource; + if (!pdfjs.GlobalWorkerOptions.workerSrc) { - pdfjs.GlobalWorkerOptions.workerSrc = URL.createObjectURL(new Blob([pdfWorkerSource], {type: 'text/javascript'})); + pdfjs.GlobalWorkerOptions.workerSrc = URL.createObjectURL(new Blob([pdfWorker], {type: 'text/javascript'})); } function PDFThumbnail({previewSourceURL, style, isAuthTokenRequired = false, enabled = true, onPassword, onLoadError, onLoadSuccess}: PDFThumbnailProps) { diff --git a/src/types/modules/pdf.worker.d.ts b/src/types/modules/pdf.worker.d.ts index a6d70e529b7f..c69d02711561 100644 --- a/src/types/modules/pdf.worker.d.ts +++ b/src/types/modules/pdf.worker.d.ts @@ -1 +1,2 @@ declare module 'pdfjs-dist/legacy/build/pdf.worker.min.mjs'; +declare module 'pdfjs-dist/build/pdf.worker.min.mjs'; From a5a4c915f975485254a13a8c3309fda383bf9549 Mon Sep 17 00:00:00 2001 From: Mykhailo Kravchenko Date: Fri, 7 Feb 2025 15:13:57 +0100 Subject: [PATCH 5/5] retest