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 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 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: diff --git a/e2e/node-cjs/package.json b/e2e/node-cjs/package.json index 1332df74d..3eb061fbd 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-603e6108-20241029" } } diff --git a/e2e/node-esm/package.json b/e2e/node-esm/package.json index 6646b6b1d..4d065800e 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-603e6108-20241029" } } diff --git a/package.json b/package.json index b58119bba..7b588f8c0 100644 --- a/package.json +++ b/package.json @@ -61,12 +61,8 @@ "lint-staged": "^10.5.4", "pdfjs-dist": "3.2.146", "prettier": "^3.2.0", - "react": "^18.2.0", - "react-16": "npm:react@^16.8.0", - "react-17": "npm:react@^17.0.0", - "react-dom": "^18.2.0", - "react-dom-16": "npm:react-dom@^16.8.0", - "react-dom-17": "npm:react-dom@^17.0.0", + "react": "^19.0.0-rc-603e6108-20241029", + "react-dom": "^19.0.0-rc-603e6108-20241029", "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 ab70ad5ef..a291e4588 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-603e6108-20241029", + "react-dom": "^^19.0.0-rc-603e6108-20241029" } } diff --git a/packages/renderer/package.json b/packages/renderer/package.json index de12b69d3..dc78a7560 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.17.0" + "scheduler": "^0.25.0-rc-603e6108-20241029" }, "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.23.0", + "react-reconciler": "0.31.0-rc-603e6108-20241029", "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..eb3a21126 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'; @@ -14,6 +13,7 @@ const nodeInput = './src/node/index.js'; const domInput = './src/dom/index.js'; const babelConfig = () => ({ + compact: false, babelrc: true, exclude: 'node_modules/**', babelHelpers: 'runtime', @@ -24,21 +24,13 @@ 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.peerDependencies), ]; const getPlugins = ({ browser, declarationDests, minify = false }) => [ json(), ...(browser ? [ignore(['fs', 'path', 'url'])] : []), - alias({ - entries: { - 'react-reconciler': - 'react-reconciler/cjs/react-reconciler.production.min.js', - }, - }), babel(babelConfig()), commonjs({ esmExternals: ['scheduler'], diff --git a/packages/renderer/src/index.js b/packages/renderer/src/index.js index c6f3ac4ff..14a12a701 100644 --- a/packages/renderer/src/index.js +++ b/packages/renderer/src/index.js @@ -1,12 +1,13 @@ +/* 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'; - -const { version } = packageJson; +import { version } from '../package.json'; const fontStore = new FontStore(); @@ -23,12 +24,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.updateContainerSync(doc, mountNode, null, callback); + renderer.flushSyncWork(); }; if (initialValue) updateContainer(initialValue); @@ -84,11 +100,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..19a23ddd5 100644 --- a/packages/renderer/src/renderer.js +++ b/packages/renderer/src/renderer.js @@ -3,17 +3,16 @@ /* 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'; 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 +25,7 @@ const appendChild = (parentInstance, child) => { return; } - parentInstance.children.push(child); + parent.children.push(child); }; const createRenderer = ({ onChange = () => {} }) => { @@ -72,10 +71,6 @@ const createRenderer = ({ onChange = () => {} }) => { // Noop }, - prepareUpdate(element, type, oldProps, newProps) { - return !propsEqual(oldProps, newProps); - }, - resetAfterCommit: onChange, resetTextContent(element) { @@ -94,17 +89,17 @@ const createRenderer = ({ onChange = () => {} }) => { return false; }, - now: Date.now, + noTimeout: -1, useSyncScheduling: true, 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); } }, @@ -137,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 021f76c30..7e16ecc6a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -753,14 +753,8 @@ 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": + 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== @@ -3347,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== @@ -6497,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== @@ -7961,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== @@ -8063,49 +8057,12 @@ 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== +react-dom@^19.0.0-rc-603e6108-20241029: + 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: - 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-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.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== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" + scheduler "0.25.0-rc-fb9a90fa48-20240614" react-is@^16.13.1: version "16.13.1" @@ -8122,27 +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.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.31.0-rc-603e6108-20241029: + version "0.31.0-rc-603e6108-20241029" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.31.0-rc-603e6108-20241029.tgz#548c14190b107e6e8b886e9e1142a1b341efe020" + integrity sha512-zCAmctVyk2efv9DR0GnpHNbd/mVxeWuOGrWeXwx1QXqSGTBWUqzoPEd4jv88e+3U53upXZqb86AMhKf0c9vkLw== dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.17.0" + scheduler "0.25.0-rc-603e6108-20241029" 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@^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-603e6108-20241029: + 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" @@ -8561,36 +8513,15 @@ 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" - 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.25.0-rc-603e6108-20241029: + version "0.25.0-rc-603e6108-20241029" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-rc-603e6108-20241029.tgz#684dd96647e104d23e0d29a37f18937daf82df19" + integrity sha512-pFwF6H1XrSdYYNLfOcGlM28/j8CGLu8IvdrxqhjWULe2bPcKiKW4CV+OWqR/9fT52mywx65l7ysNkjLKBda7eA== -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.25.0-rc-fb9a90fa48-20240614, scheduler@^0.25.0-rc-603e6108-20241029: + 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== schema-utils@^3.1.1, schema-utils@^3.2.0: version "3.3.0" @@ -8987,7 +8918,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 +8936,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 +9010,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 +9024,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 +9968,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 +9986,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"