From 4cf1684af243d482d0416d69e131820ab53b3c6e Mon Sep 17 00:00:00 2001 From: Alexander Nanberg Date: Wed, 12 Jun 2024 15:42:15 +0200 Subject: [PATCH 01/15] Update reconciler to 0.27.0 --- package.json | 1 - packages/renderer/package.json | 2 +- packages/renderer/src/index.js | 8 ++--- packages/renderer/src/renderer.js | 16 ++++----- yarn.lock | 59 +++++++++---------------------- 5 files changed, 27 insertions(+), 59 deletions(-) diff --git a/package.json b/package.json index b58119bba..dfd6ccae7 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,6 @@ "@typescript-eslint/parser": "^6.21.0", "@vitejs/plugin-react": "^4.2.1", "babel-plugin-add-module-exports": "^1.0.0", - "canvas": "^2.11.2", "chalk": "^2.4.2", "eslint": "^8.56.0", "eslint-config-airbnb": "^19.0.0", diff --git a/packages/renderer/package.json b/packages/renderer/package.json index de12b69d3..38acbbae0 100644 --- a/packages/renderer/package.json +++ b/packages/renderer/package.json @@ -60,7 +60,7 @@ "browserify-zlib": "^0.2.0", "buffer": "^6.0.3", "process": "^0.11.10", - "react-reconciler": "0.23.0", + "react-reconciler": "0.27.0", "size-limit": "^11.0.1", "util": "^0.12.4" } diff --git a/packages/renderer/src/index.js b/packages/renderer/src/index.js index c6f3ac4ff..17d23466c 100644 --- a/packages/renderer/src/index.js +++ b/packages/renderer/src/index.js @@ -29,6 +29,7 @@ const pdf = (initialValue) => { const updateContainer = (doc, callback) => { renderer.updateContainer(doc, mountNode, null, callback); + renderer.flushSync(); }; if (initialValue) updateContainer(initialValue); @@ -84,11 +85,8 @@ const pdf = (initialValue) => { // TODO: rename this method to `toStream` in next major release, because it return stream not a buffer const toBuffer = async () => { - const { - layout: _INTERNAL__LAYOUT__DATA_, - fileStream, - } = await render(); - callOnRender({_INTERNAL__LAYOUT__DATA_}); + const { layout: _INTERNAL__LAYOUT__DATA_, fileStream } = await render(); + callOnRender({ _INTERNAL__LAYOUT__DATA_ }); return fileStream; }; diff --git a/packages/renderer/src/renderer.js b/packages/renderer/src/renderer.js index 026e11b07..cc2ae217b 100644 --- a/packages/renderer/src/renderer.js +++ b/packages/renderer/src/renderer.js @@ -9,11 +9,9 @@ import propsEqual from './utils/propsEqual'; const emptyObject = {}; -const appendChild = (parentInstance, child) => { +const appendChild = (parent, child) => { const isParentText = - parentInstance.type === 'TEXT' || - parentInstance.type === 'LINK' || - parentInstance.type === 'TSPAN'; + parent.type === 'TEXT' || parent.type === 'LINK' || parent.type === 'TSPAN'; const isChildTextInstance = child.type === 'TEXT_INSTANCE'; const isOrphanTextInstance = isChildTextInstance && !isParentText; @@ -26,7 +24,7 @@ const appendChild = (parentInstance, child) => { return; } - parentInstance.children.push(child); + parent.children.push(child); }; const createRenderer = ({ onChange = () => {} }) => { @@ -100,11 +98,11 @@ const createRenderer = ({ onChange = () => {} }) => { appendChild, - appendChildToContainer(parentInstance, child) { - if (parentInstance.type === 'ROOT') { - parentInstance.document = child; + appendChildToContainer(container, child) { + if (container.type === 'ROOT') { + container.document = child; } else { - appendChild(parentInstance, child); + appendChild(container, child); } }, diff --git a/yarn.lock b/yarn.lock index 021f76c30..9fbac4f90 100644 --- a/yarn.lock +++ b/yarn.lock @@ -753,14 +753,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-react-jsx-development@^7.18.6": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz#ed3e7dadde046cce761a8e3cf003a13d1a7972d9" - integrity sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@babel/plugin-transform-react-jsx-self@^7.23.3": +"@babel/plugin-transform-react-jsx-development@^7.18.6", "@babel/plugin-transform-react-jsx-self@^7.23.3": version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz#ed3e7dadde046cce761a8e3cf003a13d1a7972d9" integrity sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ== @@ -8122,15 +8115,13 @@ react-is@^18.0.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -react-reconciler@0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.23.0.tgz#5f0bfc35dda030b0220c07de11f93131c5d6db63" - integrity sha512-vV0KlLimP9a/NuRcM6GRVakkmT6MKSzhfo8K72fjHMnlXMOhz9GlPe+/tCp5CWBkg+lsMUt/CR1nypJBTPfwuw== +react-reconciler@0.27.0: + version "0.27.0" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.27.0.tgz#360124fdf2d76447c7491ee5f0e04503ed9acf5b" + integrity sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA== dependencies: loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.17.0" + scheduler "^0.21.0" react-refresh@^0.14.0: version "0.14.0" @@ -8585,6 +8576,13 @@ scheduler@^0.20.2: loose-envify "^1.1.0" object-assign "^4.1.1" +scheduler@^0.21.0: + version "0.21.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.21.0.tgz#6fd2532ff5a6d877b6edb12f00d8ab7e8f308820" + integrity sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ== + dependencies: + loose-envify "^1.1.0" + scheduler@^0.23.0: version "0.23.0" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" @@ -8987,7 +8985,7 @@ string-argv@0.3.1: resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== -"string-width-cjs@npm:string-width@^4.2.0": +"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -9005,15 +9003,6 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - string-width@^5.0.1, string-width@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794" @@ -9088,7 +9077,7 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": +"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@^6.0.0, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -9102,13 +9091,6 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - strip-ansi@^7.0.1: version "7.1.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45" @@ -10053,7 +10035,7 @@ wordwrap@^1.0.0: resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -10071,15 +10053,6 @@ wrap-ansi@^6.0.1, wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214" From 6020792cc58860a146dbbaeb0c499cf83d0ad9d2 Mon Sep 17 00:00:00 2001 From: Alexander Nanberg Date: Wed, 12 Jun 2024 15:48:42 +0200 Subject: [PATCH 02/15] Update reconciler to 0.29.2 --- packages/renderer/package.json | 2 +- yarn.lock | 25 +++++++++++++------------ 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/packages/renderer/package.json b/packages/renderer/package.json index 38acbbae0..8446411e9 100644 --- a/packages/renderer/package.json +++ b/packages/renderer/package.json @@ -60,7 +60,7 @@ "browserify-zlib": "^0.2.0", "buffer": "^6.0.3", "process": "^0.11.10", - "react-reconciler": "0.27.0", + "react-reconciler": "0.29.2", "size-limit": "^11.0.1", "util": "^0.12.4" } diff --git a/yarn.lock b/yarn.lock index 9fbac4f90..fc7048514 100644 --- a/yarn.lock +++ b/yarn.lock @@ -754,6 +754,7 @@ "@babel/helper-plugin-utils" "^7.18.6" "@babel/plugin-transform-react-jsx-development@^7.18.6", "@babel/plugin-transform-react-jsx-self@^7.23.3": + name "@babel/plugin-transform-react-jsx-development" version "7.23.3" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.23.3.tgz#ed3e7dadde046cce761a8e3cf003a13d1a7972d9" integrity sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ== @@ -8115,13 +8116,13 @@ react-is@^18.0.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -react-reconciler@0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.27.0.tgz#360124fdf2d76447c7491ee5f0e04503ed9acf5b" - integrity sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA== +react-reconciler@0.29.2: + version "0.29.2" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.29.2.tgz#8ecfafca63549a4f4f3e4c1e049dd5ad9ac3a54f" + integrity sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg== dependencies: loose-envify "^1.1.0" - scheduler "^0.21.0" + scheduler "^0.23.2" react-refresh@^0.14.0: version "0.14.0" @@ -8576,13 +8577,6 @@ scheduler@^0.20.2: loose-envify "^1.1.0" object-assign "^4.1.1" -scheduler@^0.21.0: - version "0.21.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.21.0.tgz#6fd2532ff5a6d877b6edb12f00d8ab7e8f308820" - integrity sha512-1r87x5fz9MXqswA2ERLo0EbOAU74DpIUO090gIasYTqlVoJeMcl+Z1Rg7WHz+qtPujhS/hGIt9kxZOYBV3faRQ== - dependencies: - loose-envify "^1.1.0" - scheduler@^0.23.0: version "0.23.0" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" @@ -8590,6 +8584,13 @@ scheduler@^0.23.0: dependencies: loose-envify "^1.1.0" +scheduler@^0.23.2: + version "0.23.2" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" + integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== + dependencies: + loose-envify "^1.1.0" + schema-utils@^3.1.1, schema-utils@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" From 141681be94488055cfc3a2da3d5aa0cc74c03e34 Mon Sep 17 00:00:00 2001 From: Alexander Nanberg Date: Wed, 12 Jun 2024 15:51:48 +0200 Subject: [PATCH 03/15] Update scheduler to 0.23.2 --- packages/renderer/package.json | 2 +- yarn.lock | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/packages/renderer/package.json b/packages/renderer/package.json index 8446411e9..3b12e2d43 100644 --- a/packages/renderer/package.json +++ b/packages/renderer/package.json @@ -34,7 +34,7 @@ "object-assign": "^4.1.1", "prop-types": "^15.6.2", "queue": "^6.0.1", - "scheduler": "^0.17.0" + "scheduler": "^0.23.2" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" diff --git a/yarn.lock b/yarn.lock index fc7048514..4f0430619 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8553,14 +8553,6 @@ saxes@^6.0.0: dependencies: xmlchars "^2.2.0" -scheduler@^0.17.0: - version "0.17.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.17.0.tgz#7c9c673e4ec781fac853927916d1c426b6f3ddfe" - integrity sha512-7rro8Io3tnCPuY4la/NuI5F2yfESpnfZyT6TtkXnSWVkcu0BCDJ+8gk5ozUaFaxpIyNuWAPXrH0yFcSi28fnDA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler@^0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" From abe53cd81753a7e72fb5e83edca5786ab41d0d85 Mon Sep 17 00:00:00 2001 From: Alexander Nanberg Date: Wed, 12 Jun 2024 16:11:29 +0200 Subject: [PATCH 04/15] Add React 19 support --- package.json | 6 ++- packages/renderer/package.json | 8 ++-- packages/renderer/rollup.config.js | 3 +- packages/renderer/src/index.js | 23 ++++++++++-- packages/renderer/src/renderer.js | 30 ++++++++++++--- yarn.lock | 59 ++++++++++++++++++++---------- 6 files changed, 92 insertions(+), 37 deletions(-) diff --git a/package.json b/package.json index dfd6ccae7..1db0ba797 100644 --- a/package.json +++ b/package.json @@ -60,12 +60,14 @@ "lint-staged": "^10.5.4", "pdfjs-dist": "3.2.146", "prettier": "^3.2.0", - "react": "^18.2.0", + "react": "^19.0.0-rc-a26e3f403e-20240611", "react-16": "npm:react@^16.8.0", "react-17": "npm:react@^17.0.0", - "react-dom": "^18.2.0", + "react-18": "npm:react@^18.2.0", + "react-dom": "^19.0.0-rc-a26e3f403e-20240611", "react-dom-16": "npm:react-dom@^16.8.0", "react-dom-17": "npm:react-dom@^17.0.0", + "react-dom-18": "npm:react-dom@^18.2.0", "rimraf": "^2.6.3", "rollup": "^4.9.0", "rollup-plugin-copy": "^3.5.0", diff --git a/packages/renderer/package.json b/packages/renderer/package.json index 3b12e2d43..233060275 100644 --- a/packages/renderer/package.json +++ b/packages/renderer/package.json @@ -31,13 +31,11 @@ "@react-pdf/render": "^4.0.0", "@react-pdf/types": "^2.7.0", "events": "^3.3.0", - "object-assign": "^4.1.1", - "prop-types": "^15.6.2", "queue": "^6.0.1", - "scheduler": "^0.23.2" + "scheduler": "^0.25.0-rc-a26e3f403e-20240611" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^19.0.0" }, "lint-staged": { "*.js": [ @@ -60,7 +58,7 @@ "browserify-zlib": "^0.2.0", "buffer": "^6.0.3", "process": "^0.11.10", - "react-reconciler": "0.29.2", + "react-reconciler": "0.31.0-rc-a26e3f403e-20240611", "size-limit": "^11.0.1", "util": "^0.12.4" } diff --git a/packages/renderer/rollup.config.js b/packages/renderer/rollup.config.js index 63f3cb2c6..157f6ffd0 100644 --- a/packages/renderer/rollup.config.js +++ b/packages/renderer/rollup.config.js @@ -35,8 +35,7 @@ const getPlugins = ({ browser, declarationDests, minify = false }) => [ ...(browser ? [ignore(['fs', 'path', 'url'])] : []), alias({ entries: { - 'react-reconciler': - 'react-reconciler/cjs/react-reconciler.production.min.js', + 'react-reconciler': 'react-reconciler/cjs/react-reconciler.production.js', }, }), babel(babelConfig()), diff --git a/packages/renderer/src/index.js b/packages/renderer/src/index.js index 17d23466c..dc52c22de 100644 --- a/packages/renderer/src/index.js +++ b/packages/renderer/src/index.js @@ -1,7 +1,10 @@ +/* eslint-disable import/no-extraneous-dependencies */ + import FontStore from '@react-pdf/font'; import renderPDF from '@react-pdf/render'; import PDFDocument from '@react-pdf/pdfkit'; import layoutDocument from '@react-pdf/layout'; +import { ConcurrentRoot } from 'react-reconciler/constants'; import createRenderer from './renderer'; import packageJson from '../package.json'; @@ -23,13 +26,27 @@ const pdf = (initialValue) => { for (let i = 0; i < listeners.length; i += 1) listeners[i](); }; + const logRecoverableError = + typeof reportError === 'function' ? reportError : console.error; + const container = { type: 'ROOT', document: null }; renderer = renderer || createRenderer({ onChange }); - const mountNode = renderer.createContainer(container); + const mountNode = renderer.createContainer( + container, + ConcurrentRoot, // tag + null, // hydration callbacks + false, // isStrictMode + null, // concurrentUpdatesByDefaultOverride + '', // identifierPrefix + logRecoverableError, // onUncaughtError + logRecoverableError, // onCaughtError + logRecoverableError, // onRecoverableError + null, // transitionCallbacks + ); const updateContainer = (doc, callback) => { - renderer.updateContainer(doc, mountNode, null, callback); - renderer.flushSync(); + renderer.updateContainerSync(doc, mountNode, null, callback); + renderer.flushSyncWork(); }; if (initialValue) updateContainer(initialValue); diff --git a/packages/renderer/src/renderer.js b/packages/renderer/src/renderer.js index cc2ae217b..19a23ddd5 100644 --- a/packages/renderer/src/renderer.js +++ b/packages/renderer/src/renderer.js @@ -3,6 +3,7 @@ /* eslint-disable no-param-reassign */ import ReactFiberReconciler from 'react-reconciler'; +import { DefaultEventPriority } from 'react-reconciler/constants'; import * as scheduler from 'scheduler'; import propsEqual from './utils/propsEqual'; @@ -70,10 +71,6 @@ const createRenderer = ({ onChange = () => {} }) => { // Noop }, - prepareUpdate(element, type, oldProps, newProps) { - return !propsEqual(oldProps, newProps); - }, - resetAfterCommit: onChange, resetTextContent(element) { @@ -92,7 +89,7 @@ const createRenderer = ({ onChange = () => {} }) => { return false; }, - now: Date.now, + noTimeout: -1, useSyncScheduling: true, @@ -135,11 +132,32 @@ const createRenderer = ({ onChange = () => {} }) => { textInstance.value = newText; }, - commitUpdate(instance, updatePayload, type, oldProps, newProps) { + commitUpdate(instance, type, oldProps, newProps) { + if (propsEqual(oldProps, newProps)) return; const { style, ...props } = newProps; instance.props = props; instance.style = style; }, + + getCurrentUpdatePriority() { + return DefaultEventPriority; + }, + + setCurrentUpdatePriority() {}, + + resolveUpdatePriority() { + return DefaultEventPriority; + }, + + shouldAttemptEagerTransition() { + return false; + }, + + requestPostPaintCallback() {}, + + maySuspendCommit() { + return false; + }, }); }; diff --git a/yarn.lock b/yarn.lock index 4f0430619..31e2a2a87 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3341,7 +3341,7 @@ caniuse-lite@^1.0.30001646: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001662.tgz#3574b22dfec54a3f3b6787331da1040fe8e763ec" integrity sha512-sgMUVwLmGseH8ZIrm1d51UbrhqMCH3jvS7gF/M6byuHOnKyLOBL7W8yz5V02OHwgLGA36o/AFhWzzh4uc5aqTA== -canvas@^2.11.0, canvas@^2.11.2: +canvas@^2.11.0: version "2.11.2" resolved "https://registry.yarnpkg.com/canvas/-/canvas-2.11.2.tgz#553d87b1e0228c7ac0fc72887c3adbac4abbd860" integrity sha512-ItanGBMrmRV7Py2Z+Xhs7cT+FNt5K0vPL4p9EZ/UX/Mu7hFbkxSjKF2KVtPwX7UYWp7dRKnrTvReflgrItJbdw== @@ -8074,6 +8074,13 @@ randombytes@^2.1.0: loose-envify "^1.1.0" object-assign "^4.1.1" +"react-18@npm:react@^18.2.0": + version "18.3.1" + resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" + integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== + dependencies: + loose-envify "^1.1.0" + "react-dom-16@npm:react-dom@^16.8.0": version "16.14.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" @@ -8093,13 +8100,20 @@ randombytes@^2.1.0: object-assign "^4.1.1" scheduler "^0.20.2" -react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== +"react-dom-18@npm:react-dom@^18.2.0": + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" + integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== dependencies: loose-envify "^1.1.0" - scheduler "^0.23.0" + scheduler "^0.23.2" + +react-dom@^19.0.0-rc-a26e3f403e-20240611: + version "19.0.0-rc-f994737d14-20240522" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0-rc-f994737d14-20240522.tgz#992710eeed9ccc7546fd258745cff1e04a3f8659" + integrity sha512-J4CsfTSptPKkhaPbaR6n/KohQiHZTrRZ8GL4H8rbAqN/Qpy69g2MIoLBr5/PUX21ye6JxC1ZRWJFna7Xdg1pdA== + dependencies: + scheduler "0.25.0-rc-f994737d14-20240522" react-is@^16.13.1: version "16.13.1" @@ -8116,13 +8130,12 @@ react-is@^18.0.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -react-reconciler@0.29.2: - version "0.29.2" - resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.29.2.tgz#8ecfafca63549a4f4f3e4c1e049dd5ad9ac3a54f" - integrity sha512-zZQqIiYgDCTP/f1N/mAR10nJGrPD2ZR+jDSEsKWJHYC7Cm2wodlwbR3upZRdC3cjIjSlTLNVyO7Iu0Yy7t2AYg== +react-reconciler@0.31.0-rc-a26e3f403e-20240611: + version "0.31.0-rc-a26e3f403e-20240611" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.31.0-rc-a26e3f403e-20240611.tgz#3c02755543177c279d32e8acae70d5090d128b9a" + integrity sha512-hYhpVm51yna3Vf1+9vX8pfYKzbHRAIQDVsAuvOLtolER+Fm+GDXtCjHf9rX9e5SEojjZQleIseWbahGk1w9x5w== dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.2" + scheduler "0.25.0-rc-a26e3f403e-20240611" react-refresh@^0.14.0: version "0.14.0" @@ -8136,6 +8149,11 @@ react@^18.2.0: dependencies: loose-envify "^1.1.0" +react@^19.0.0-rc-a26e3f403e-20240611: + version "19.0.0-rc-f994737d14-20240522" + resolved "https://registry.yarnpkg.com/react/-/react-19.0.0-rc-f994737d14-20240522.tgz#b400d554859940e9f4b8b6db1fd2537bd822bcc9" + integrity sha512-SeU2v5Xy6FotVhKz0pMS2gvYP7HlkF0qgTskj3JzA1vlxcb3dQjxlm9t0ZlJqcgoyI3VFAw7bomuDMdgy1nBuw== + read-cache@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" @@ -8553,6 +8571,16 @@ saxes@^6.0.0: dependencies: xmlchars "^2.2.0" +scheduler@0.25.0-rc-a26e3f403e-20240611: + version "0.25.0-rc-a26e3f403e-20240611" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-rc-a26e3f403e-20240611.tgz#a2ab5e84317cfbbc72b75ab003fc8e2d7ca75f6f" + integrity sha512-866Js4mBLds0wG0ILG9btP9QTuhqMBavBDTtneV485BN9YdwnxHAxv3DygQTZDRhtIMavrFlpCaNVP5eoPNyZg== + +scheduler@0.25.0-rc-f994737d14-20240522, scheduler@^0.25.0-rc-a26e3f403e-20240611: + version "0.25.0-rc-f994737d14-20240522" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-rc-f994737d14-20240522.tgz#6bbdbf50adeb250035a26f082bf966077d264a7e" + integrity sha512-qS+xGFF7AljP2APO2iJe8zESNsK20k25MACz+WGOXPybUsRdi1ssvaoF93im2nSX2q/XT3wKkjdz6RQfbmaxdw== + scheduler@^0.19.1: version "0.19.1" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" @@ -8569,13 +8597,6 @@ scheduler@^0.20.2: loose-envify "^1.1.0" object-assign "^4.1.1" -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== - dependencies: - loose-envify "^1.1.0" - scheduler@^0.23.2: version "0.23.2" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" From 7c24f1427811f0497ebc1b13a6c57f364f5993de Mon Sep 17 00:00:00 2001 From: Alexander Nanberg Date: Wed, 12 Jun 2024 16:23:16 +0200 Subject: [PATCH 05/15] Make react-reconciler a dependency --- packages/renderer/package.json | 4 ++-- packages/renderer/rollup.config.js | 20 +++++++++++--------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/packages/renderer/package.json b/packages/renderer/package.json index 233060275..bdc5fe4a8 100644 --- a/packages/renderer/package.json +++ b/packages/renderer/package.json @@ -32,7 +32,8 @@ "@react-pdf/types": "^2.7.0", "events": "^3.3.0", "queue": "^6.0.1", - "scheduler": "^0.25.0-rc-a26e3f403e-20240611" + "scheduler": "^0.25.0-rc-a26e3f403e-20240611", + "react-reconciler": "0.31.0-rc-a26e3f403e-20240611" }, "peerDependencies": { "react": "^19.0.0" @@ -58,7 +59,6 @@ "browserify-zlib": "^0.2.0", "buffer": "^6.0.3", "process": "^0.11.10", - "react-reconciler": "0.31.0-rc-a26e3f403e-20240611", "size-limit": "^11.0.1", "util": "^0.12.4" } diff --git a/packages/renderer/rollup.config.js b/packages/renderer/rollup.config.js index 157f6ffd0..d8c8a4ac2 100644 --- a/packages/renderer/rollup.config.js +++ b/packages/renderer/rollup.config.js @@ -2,7 +2,6 @@ import json from '@rollup/plugin-json'; import babel from '@rollup/plugin-babel'; import nodeResolve from '@rollup/plugin-node-resolve'; import replace from '@rollup/plugin-replace'; -import alias from '@rollup/plugin-alias'; import ignore from 'rollup-plugin-ignore'; import terser from '@rollup/plugin-terser'; import commonjs from '@rollup/plugin-commonjs'; @@ -24,20 +23,23 @@ const getExternal = ({ browser }) => [ /@babel\/runtime/, 'react/jsx-runtime', ...(browser ? [] : ['fs', 'path', 'url']), - ...Object.keys(pkg.dependencies).filter( - (name) => name !== 'react-reconciler', - ), + ...Object.keys(pkg.dependencies), + // ...Object.keys(pkg.dependencies).filter( + // (name) => name !== 'react-reconciler', + // ), ...Object.keys(pkg.peerDependencies), ]; const getPlugins = ({ browser, declarationDests, minify = false }) => [ json(), ...(browser ? [ignore(['fs', 'path', 'url'])] : []), - alias({ - entries: { - 'react-reconciler': 'react-reconciler/cjs/react-reconciler.production.js', - }, - }), + // alias({ + // entries: { + // 'react-reconciler': 'react-reconciler/cjs/react-reconciler.production.js', + // 'react-reconciler/constants': + // 'react-reconciler/cjs/react-reconciler-constants.production.js', + // }, + // }), babel(babelConfig()), commonjs({ esmExternals: ['scheduler'], From 1ec9033527141ad30c7d4b27ba03e572b5e03959 Mon Sep 17 00:00:00 2001 From: Alexander Nanberg Date: Thu, 13 Jun 2024 08:45:44 +0200 Subject: [PATCH 06/15] Dont bundle react-reconciler/constants --- packages/renderer/rollup.config.js | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/packages/renderer/rollup.config.js b/packages/renderer/rollup.config.js index d8c8a4ac2..8e66357c0 100644 --- a/packages/renderer/rollup.config.js +++ b/packages/renderer/rollup.config.js @@ -22,28 +22,17 @@ const babelConfig = () => ({ const getExternal = ({ browser }) => [ /@babel\/runtime/, 'react/jsx-runtime', + 'react-reconciler/constants', ...(browser ? [] : ['fs', 'path', 'url']), ...Object.keys(pkg.dependencies), - // ...Object.keys(pkg.dependencies).filter( - // (name) => name !== 'react-reconciler', - // ), ...Object.keys(pkg.peerDependencies), ]; const getPlugins = ({ browser, declarationDests, minify = false }) => [ json(), ...(browser ? [ignore(['fs', 'path', 'url'])] : []), - // alias({ - // entries: { - // 'react-reconciler': 'react-reconciler/cjs/react-reconciler.production.js', - // 'react-reconciler/constants': - // 'react-reconciler/cjs/react-reconciler-constants.production.js', - // }, - // }), babel(babelConfig()), - commonjs({ - esmExternals: ['scheduler'], - }), + commonjs(), nodeResolve({ browser, preferBuiltins: !browser }), replace({ preventAssignment: true, From d7d725988e626686774f4385b3c6c779ff6eaabb Mon Sep 17 00:00:00 2001 From: Alexander Nanberg Date: Thu, 13 Jun 2024 09:28:47 +0200 Subject: [PATCH 07/15] Keep inlining react-reconciler --- packages/renderer/package.json | 4 ++-- packages/renderer/rollup.config.js | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/renderer/package.json b/packages/renderer/package.json index bdc5fe4a8..233060275 100644 --- a/packages/renderer/package.json +++ b/packages/renderer/package.json @@ -32,8 +32,7 @@ "@react-pdf/types": "^2.7.0", "events": "^3.3.0", "queue": "^6.0.1", - "scheduler": "^0.25.0-rc-a26e3f403e-20240611", - "react-reconciler": "0.31.0-rc-a26e3f403e-20240611" + "scheduler": "^0.25.0-rc-a26e3f403e-20240611" }, "peerDependencies": { "react": "^19.0.0" @@ -59,6 +58,7 @@ "browserify-zlib": "^0.2.0", "buffer": "^6.0.3", "process": "^0.11.10", + "react-reconciler": "0.31.0-rc-a26e3f403e-20240611", "size-limit": "^11.0.1", "util": "^0.12.4" } diff --git a/packages/renderer/rollup.config.js b/packages/renderer/rollup.config.js index 8e66357c0..e8ebce813 100644 --- a/packages/renderer/rollup.config.js +++ b/packages/renderer/rollup.config.js @@ -22,7 +22,6 @@ const babelConfig = () => ({ const getExternal = ({ browser }) => [ /@babel\/runtime/, 'react/jsx-runtime', - 'react-reconciler/constants', ...(browser ? [] : ['fs', 'path', 'url']), ...Object.keys(pkg.dependencies), ...Object.keys(pkg.peerDependencies), @@ -32,12 +31,15 @@ const getPlugins = ({ browser, declarationDests, minify = false }) => [ json(), ...(browser ? [ignore(['fs', 'path', 'url'])] : []), babel(babelConfig()), - commonjs(), + commonjs({ + esmExternals: ['scheduler'], + }), nodeResolve({ browser, preferBuiltins: !browser }), replace({ preventAssignment: true, values: { BROWSER: JSON.stringify(browser), + 'process.env.NODE_ENV': JSON.stringify('production'), }, }), copy({ From 9a0f2109a606eec6bb99c6835cda97bf0986b1f4 Mon Sep 17 00:00:00 2001 From: Alexander Nanberg Date: Thu, 13 Jun 2024 10:11:31 +0200 Subject: [PATCH 08/15] The jsx-runtime needs dev react-reconciler in development --- packages/renderer/rollup.config.js | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/renderer/rollup.config.js b/packages/renderer/rollup.config.js index e8ebce813..d3f93cd51 100644 --- a/packages/renderer/rollup.config.js +++ b/packages/renderer/rollup.config.js @@ -39,7 +39,6 @@ const getPlugins = ({ browser, declarationDests, minify = false }) => [ preventAssignment: true, values: { BROWSER: JSON.stringify(browser), - 'process.env.NODE_ENV': JSON.stringify('production'), }, }), copy({ From 46409d63e8e6e6784a85cc1843e8c6f318a2a86e Mon Sep 17 00:00:00 2001 From: Alexander Nanberg Date: Thu, 13 Jun 2024 10:19:22 +0200 Subject: [PATCH 09/15] Remove old react deps --- package.json | 6 ----- yarn.lock | 76 +--------------------------------------------------- 2 files changed, 1 insertion(+), 81 deletions(-) diff --git a/package.json b/package.json index 1db0ba797..3f97d3264 100644 --- a/package.json +++ b/package.json @@ -61,13 +61,7 @@ "pdfjs-dist": "3.2.146", "prettier": "^3.2.0", "react": "^19.0.0-rc-a26e3f403e-20240611", - "react-16": "npm:react@^16.8.0", - "react-17": "npm:react@^17.0.0", - "react-18": "npm:react@^18.2.0", "react-dom": "^19.0.0-rc-a26e3f403e-20240611", - "react-dom-16": "npm:react-dom@^16.8.0", - "react-dom-17": "npm:react-dom@^17.0.0", - "react-dom-18": "npm:react-dom@^18.2.0", "rimraf": "^2.6.3", "rollup": "^4.9.0", "rollup-plugin-copy": "^3.5.0", diff --git a/yarn.lock b/yarn.lock index 31e2a2a87..0c8a2f31e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7955,7 +7955,7 @@ promzard@^1.0.0: dependencies: read "^2.0.0" -prop-types@^15.6.2, prop-types@^15.8.1: +prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -8057,57 +8057,6 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -"react-16@npm:react@^16.8.0": - version "16.14.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.14.0.tgz#94d776ddd0aaa37da3eda8fc5b6b18a4c9a3114d" - integrity sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - -"react-17@npm:react@^17.0.0": - version "17.0.2" - resolved "https://registry.yarnpkg.com/react/-/react-17.0.2.tgz#d0b5cc516d29eb3eee383f75b62864cfb6800037" - integrity sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -"react-18@npm:react@^18.2.0": - version "18.3.1" - resolved "https://registry.yarnpkg.com/react/-/react-18.3.1.tgz#49ab892009c53933625bd16b2533fc754cab2891" - integrity sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ== - dependencies: - loose-envify "^1.1.0" - -"react-dom-16@npm:react-dom@^16.8.0": - version "16.14.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.14.0.tgz#7ad838ec29a777fb3c75c3a190f661cf92ab8b89" - integrity sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.19.1" - -"react-dom-17@npm:react-dom@^17.0.0": - version "17.0.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-17.0.2.tgz#ecffb6845e3ad8dbfcdc498f0d0a939736502c23" - integrity sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - scheduler "^0.20.2" - -"react-dom-18@npm:react-dom@^18.2.0": - version "18.3.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.3.1.tgz#c2265d79511b57d479b3dd3fdfa51536494c5cb4" - integrity sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.2" - react-dom@^19.0.0-rc-a26e3f403e-20240611: version "19.0.0-rc-f994737d14-20240522" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0-rc-f994737d14-20240522.tgz#992710eeed9ccc7546fd258745cff1e04a3f8659" @@ -8581,29 +8530,6 @@ scheduler@0.25.0-rc-f994737d14-20240522, scheduler@^0.25.0-rc-a26e3f403e-2024061 resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-rc-f994737d14-20240522.tgz#6bbdbf50adeb250035a26f082bf966077d264a7e" integrity sha512-qS+xGFF7AljP2APO2iJe8zESNsK20k25MACz+WGOXPybUsRdi1ssvaoF93im2nSX2q/XT3wKkjdz6RQfbmaxdw== -scheduler@^0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" - integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -scheduler@^0.20.2: - version "0.20.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" - integrity sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -scheduler@^0.23.2: - version "0.23.2" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.2.tgz#414ba64a3b282892e944cf2108ecc078d115cdc3" - integrity sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ== - dependencies: - loose-envify "^1.1.0" - schema-utils@^3.1.1, schema-utils@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-3.3.0.tgz#f50a88877c3c01652a15b622ae9e9795df7a60fe" From efdf78fd9defc80d8ec5f4ccf5f4ad4c0056e5a3 Mon Sep 17 00:00:00 2001 From: Alexander Nanberg Date: Thu, 13 Jun 2024 10:19:31 +0200 Subject: [PATCH 10/15] Add back canvas dep --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 3f97d3264..597ee5131 100644 --- a/package.json +++ b/package.json @@ -44,6 +44,7 @@ "@typescript-eslint/parser": "^6.21.0", "@vitejs/plugin-react": "^4.2.1", "babel-plugin-add-module-exports": "^1.0.0", + "canvas": "^2.11.2", "chalk": "^2.4.2", "eslint": "^8.56.0", "eslint-config-airbnb": "^19.0.0", From f33b2d3e4783a5e11fe56a142c9ac41b1190e270 Mon Sep 17 00:00:00 2001 From: Alexander Nanberg Date: Thu, 13 Jun 2024 10:23:40 +0200 Subject: [PATCH 11/15] Add changeset --- .changeset/slimy-suns-add.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/slimy-suns-add.md diff --git a/.changeset/slimy-suns-add.md b/.changeset/slimy-suns-add.md new file mode 100644 index 000000000..f553d918d --- /dev/null +++ b/.changeset/slimy-suns-add.md @@ -0,0 +1,5 @@ +--- +"@react-pdf/renderer": major +--- + +Add support for and require React 19 From 423277c89f06367837391856d2fcd1f25f7fdd4d Mon Sep 17 00:00:00 2001 From: Alexander Nanberg Date: Thu, 13 Jun 2024 10:28:57 +0200 Subject: [PATCH 12/15] Update workflow --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 262e733b8..ad527787f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -83,7 +83,7 @@ jobs: matrix: # We aim to test all maintained LTS versions of Node.js as well as the latest stable version node_version: [18, 20, 21] - react_version: [16, 17, 18] + react_version: [19] steps: - name: Checkout @@ -111,7 +111,7 @@ jobs: run: REACT_VERSION=${{ matrix.react_version }} yarn test e2e-node: - name: Run E2E tests (Node.js ${{ matrix.node_version }}; ${{ matrix.cjs_or_esm == 'cjs' ? 'CJS' : 'ESM' }}) + name: "Run E2E tests (Node.js ${{ matrix.node_version }}; ${{ matrix.cjs_or_esm == 'cjs' ? 'CJS' : 'ESM' }})" runs-on: ubuntu-latest strategy: matrix: From e0e5c2934011b6c6d2091a0f7b2c051d070897cb Mon Sep 17 00:00:00 2001 From: Alexander Nanberg Date: Thu, 13 Jun 2024 13:08:22 +0200 Subject: [PATCH 13/15] Add changeset for IE breaking --- .changeset/sharp-fishes-confess.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/sharp-fishes-confess.md diff --git a/.changeset/sharp-fishes-confess.md b/.changeset/sharp-fishes-confess.md new file mode 100644 index 000000000..ac8b0f6a2 --- /dev/null +++ b/.changeset/sharp-fishes-confess.md @@ -0,0 +1,5 @@ +--- +"@react-pdf/renderer": major +--- + +Drop support for Internet Explorer and other "dead" browsers From 485d3a2efe8358b18d6f8a705f9792d78747a2c5 Mon Sep 17 00:00:00 2001 From: Alexander Nanberg Date: Thu, 13 Jun 2024 15:09:32 +0200 Subject: [PATCH 14/15] Fix examples --- e2e/node-cjs/package.json | 2 +- e2e/node-esm/package.json | 2 +- packages/examples/package.json | 4 ++-- yarn.lock | 9 +-------- 4 files changed, 5 insertions(+), 12 deletions(-) diff --git a/e2e/node-cjs/package.json b/e2e/node-cjs/package.json index 1332df74d..e2d0ef625 100644 --- a/e2e/node-cjs/package.json +++ b/e2e/node-cjs/package.json @@ -13,6 +13,6 @@ }, "dependencies": { "@react-pdf/renderer": "^4.0.0", - "react": "^18.2.0" + "react": "^19.0.0-rc-a26e3f403e-20240611" } } diff --git a/e2e/node-esm/package.json b/e2e/node-esm/package.json index 6646b6b1d..0e4e13c3d 100644 --- a/e2e/node-esm/package.json +++ b/e2e/node-esm/package.json @@ -13,6 +13,6 @@ }, "dependencies": { "@react-pdf/renderer": "^4.0.0", - "react": "^18.2.0" + "react": "^19.0.0-rc-a26e3f403e-20240611" } } diff --git a/packages/examples/package.json b/packages/examples/package.json index ab70ad5ef..d40cc2006 100644 --- a/packages/examples/package.json +++ b/packages/examples/package.json @@ -20,7 +20,7 @@ "vite": "^5.0.11" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^^19.0.0-rc-a26e3f403e-20240611", + "react-dom": "^^19.0.0-rc-a26e3f403e-20240611" } } diff --git a/yarn.lock b/yarn.lock index 0c8a2f31e..36d2148be 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6491,7 +6491,7 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" -loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -8091,13 +8091,6 @@ react-refresh@^0.14.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== -react@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" - react@^19.0.0-rc-a26e3f403e-20240611: version "19.0.0-rc-f994737d14-20240522" resolved "https://registry.yarnpkg.com/react/-/react-19.0.0-rc-f994737d14-20240522.tgz#b400d554859940e9f4b8b6db1fd2537bd822bcc9" From 02fde7ec5cfd7422053e0b7817fa5617cfd47181 Mon Sep 17 00:00:00 2001 From: Alexander Nanberg Date: Wed, 23 Oct 2024 08:55:56 +0200 Subject: [PATCH 15/15] Update to latest React rc --- e2e/node-cjs/package.json | 2 +- e2e/node-esm/package.json | 2 +- package.json | 4 ++-- packages/examples/package.json | 4 ++-- packages/renderer/package.json | 2 +- yarn.lock | 43 +++++++++++++++++++--------------- 6 files changed, 31 insertions(+), 26 deletions(-) diff --git a/e2e/node-cjs/package.json b/e2e/node-cjs/package.json index e2d0ef625..becb36ce2 100644 --- a/e2e/node-cjs/package.json +++ b/e2e/node-cjs/package.json @@ -13,6 +13,6 @@ }, "dependencies": { "@react-pdf/renderer": "^4.0.0", - "react": "^19.0.0-rc-a26e3f403e-20240611" + "react": "^19.0.0-rc-45804af1-20241021" } } diff --git a/e2e/node-esm/package.json b/e2e/node-esm/package.json index 0e4e13c3d..4c6f10d87 100644 --- a/e2e/node-esm/package.json +++ b/e2e/node-esm/package.json @@ -13,6 +13,6 @@ }, "dependencies": { "@react-pdf/renderer": "^4.0.0", - "react": "^19.0.0-rc-a26e3f403e-20240611" + "react": "^19.0.0-rc-45804af1-20241021" } } diff --git a/package.json b/package.json index 597ee5131..2ee44d43d 100644 --- a/package.json +++ b/package.json @@ -61,8 +61,8 @@ "lint-staged": "^10.5.4", "pdfjs-dist": "3.2.146", "prettier": "^3.2.0", - "react": "^19.0.0-rc-a26e3f403e-20240611", - "react-dom": "^19.0.0-rc-a26e3f403e-20240611", + "react": "^19.0.0-rc-45804af1-20241021", + "react-dom": "^19.0.0-rc-45804af1-20241021", "rimraf": "^2.6.3", "rollup": "^4.9.0", "rollup-plugin-copy": "^3.5.0", diff --git a/packages/examples/package.json b/packages/examples/package.json index d40cc2006..bf4bc926e 100644 --- a/packages/examples/package.json +++ b/packages/examples/package.json @@ -20,7 +20,7 @@ "vite": "^5.0.11" }, "peerDependencies": { - "react": "^^19.0.0-rc-a26e3f403e-20240611", - "react-dom": "^^19.0.0-rc-a26e3f403e-20240611" + "react": "^^19.0.0-rc-45804af1-20241021", + "react-dom": "^^19.0.0-rc-45804af1-20241021" } } diff --git a/packages/renderer/package.json b/packages/renderer/package.json index 233060275..32531b5f2 100644 --- a/packages/renderer/package.json +++ b/packages/renderer/package.json @@ -58,7 +58,7 @@ "browserify-zlib": "^0.2.0", "buffer": "^6.0.3", "process": "^0.11.10", - "react-reconciler": "0.31.0-rc-a26e3f403e-20240611", + "react-reconciler": "0.31.0-rc-45804af1-20241021", "size-limit": "^11.0.1", "util": "^0.12.4" } diff --git a/yarn.lock b/yarn.lock index 36d2148be..a09d7db4d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8057,12 +8057,12 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -react-dom@^19.0.0-rc-a26e3f403e-20240611: - version "19.0.0-rc-f994737d14-20240522" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0-rc-f994737d14-20240522.tgz#992710eeed9ccc7546fd258745cff1e04a3f8659" - integrity sha512-J4CsfTSptPKkhaPbaR6n/KohQiHZTrRZ8GL4H8rbAqN/Qpy69g2MIoLBr5/PUX21ye6JxC1ZRWJFna7Xdg1pdA== +react-dom@^19.0.0-rc-45804af1-20241021: + version "19.0.0-rc-fb9a90fa48-20240614" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0-rc-fb9a90fa48-20240614.tgz#8dce9ed0650096d65437e4bce790628e483831a2" + integrity sha512-PoEsPe32F7KPLYOBvZfjylEI1B67N44PwY3lyvpmBkhlluLnLz0jH8q2Wg9YidAi6z0k3iUnNRm5x10wurzt9Q== dependencies: - scheduler "0.25.0-rc-f994737d14-20240522" + scheduler "0.25.0-rc-fb9a90fa48-20240614" react-is@^16.13.1: version "16.13.1" @@ -8079,22 +8079,22 @@ react-is@^18.0.0: resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== -react-reconciler@0.31.0-rc-a26e3f403e-20240611: - version "0.31.0-rc-a26e3f403e-20240611" - resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.31.0-rc-a26e3f403e-20240611.tgz#3c02755543177c279d32e8acae70d5090d128b9a" - integrity sha512-hYhpVm51yna3Vf1+9vX8pfYKzbHRAIQDVsAuvOLtolER+Fm+GDXtCjHf9rX9e5SEojjZQleIseWbahGk1w9x5w== +react-reconciler@0.31.0-rc-45804af1-20241021: + version "0.31.0-rc-45804af1-20241021" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.31.0-rc-45804af1-20241021.tgz#8016e3a28815de6faf7e38598f285a0407f9f415" + integrity sha512-X9RSNsCrQSQqXKG6YiiUZrKKGPCfE0bPOg4TcEbTItlyomq8vjPeKvFDXT1zMvmfoN8hGnCsHKyFlAZYebW8Fw== dependencies: - scheduler "0.25.0-rc-a26e3f403e-20240611" + scheduler "0.25.0-rc-45804af1-20241021" react-refresh@^0.14.0: version "0.14.0" resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.0.tgz#4e02825378a5f227079554d4284889354e5f553e" integrity sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== -react@^19.0.0-rc-a26e3f403e-20240611: - version "19.0.0-rc-f994737d14-20240522" - resolved "https://registry.yarnpkg.com/react/-/react-19.0.0-rc-f994737d14-20240522.tgz#b400d554859940e9f4b8b6db1fd2537bd822bcc9" - integrity sha512-SeU2v5Xy6FotVhKz0pMS2gvYP7HlkF0qgTskj3JzA1vlxcb3dQjxlm9t0ZlJqcgoyI3VFAw7bomuDMdgy1nBuw== +react@^19.0.0-rc-45804af1-20241021: + version "19.0.0-rc-fb9a90fa48-20240614" + resolved "https://registry.yarnpkg.com/react/-/react-19.0.0-rc-fb9a90fa48-20240614.tgz#90eb43a0b005e8cc3cbf0d801c14816d01df1b08" + integrity sha512-nvE3Gy+IOIfH/DXhkyxFVQSrITarFcQz4+shzC/McxQXEUSonpw2oDy/Wi9hdDtV3hlP12VYuDL95iiBREedNQ== read-cache@^1.0.0: version "1.0.0" @@ -8513,12 +8513,17 @@ saxes@^6.0.0: dependencies: xmlchars "^2.2.0" -scheduler@0.25.0-rc-a26e3f403e-20240611: - version "0.25.0-rc-a26e3f403e-20240611" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-rc-a26e3f403e-20240611.tgz#a2ab5e84317cfbbc72b75ab003fc8e2d7ca75f6f" - integrity sha512-866Js4mBLds0wG0ILG9btP9QTuhqMBavBDTtneV485BN9YdwnxHAxv3DygQTZDRhtIMavrFlpCaNVP5eoPNyZg== +scheduler@0.25.0-rc-45804af1-20241021: + version "0.25.0-rc-45804af1-20241021" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-rc-45804af1-20241021.tgz#0c8c38627b3c951dd5ae40957b10e8d453852e31" + integrity sha512-8jyu/iy3tGFNakMMCWnKw/vsiTcapDyl0LKlZ3fUKBcBicZAkrrCC1bdqVFx0Ioxgry1SzOrCGcZLM7vtWK00A== -scheduler@0.25.0-rc-f994737d14-20240522, scheduler@^0.25.0-rc-a26e3f403e-20240611: +scheduler@0.25.0-rc-fb9a90fa48-20240614: + version "0.25.0-rc-fb9a90fa48-20240614" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-rc-fb9a90fa48-20240614.tgz#9ee11063b7c0f47aef3fea53d9f1be3f13794dce" + integrity sha512-HHqQ/SqbeiDfXXVKgNxTpbQTD4n7IUb4hZATvHjp03jr3TF7igehCyHdOjeYTrzIseLO93cTTfSb5f4qWcirMQ== + +scheduler@^0.25.0-rc-a26e3f403e-20240611: version "0.25.0-rc-f994737d14-20240522" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-rc-f994737d14-20240522.tgz#6bbdbf50adeb250035a26f082bf966077d264a7e" integrity sha512-qS+xGFF7AljP2APO2iJe8zESNsK20k25MACz+WGOXPybUsRdi1ssvaoF93im2nSX2q/XT3wKkjdz6RQfbmaxdw==