diff --git a/fixtures/flight-parcel/.parcelrc b/fixtures/flight-parcel/.parcelrc deleted file mode 100644 index e1cb0cff532fb..0000000000000 --- a/fixtures/flight-parcel/.parcelrc +++ /dev/null @@ -1,4 +0,0 @@ -{ - "extends": "@parcel/config-default", - "runtimes": ["...", "@parcel/runtime-rsc"] -} diff --git a/fixtures/flight-parcel/package.json b/fixtures/flight-parcel/package.json index d2abb05a8f558..3d630bf5e132b 100644 --- a/fixtures/flight-parcel/package.json +++ b/fixtures/flight-parcel/package.json @@ -1,15 +1,11 @@ { "name": "flight-parcel", "private": true, - "workspaces": [ - "examples/*" - ], + "source": "src/server.tsx", "server": "dist/server.js", "targets": { "server": { - "source": "src/server.tsx", "context": "react-server", - "outputFormat": "commonjs", "includeNodeModules": { "express": false } @@ -18,18 +14,11 @@ "scripts": { "predev": "cp -r ../../build/oss-experimental/* ./node_modules/", "prebuild": "cp -r ../../build/oss-experimental/* ./node_modules/", - "dev": "concurrently \"npm run dev:watch\" \"sleep 2 && npm run dev:start\"", - "dev:watch": "NODE_ENV=development parcel watch", - "dev:start": "NODE_ENV=development node dist/server.js", + "dev": "parcel", "build": "parcel build", "start": "node dist/server.js" }, - "@parcel/resolver-default": { - "packageExports": true - }, "dependencies": { - "@parcel/config-default": "2.0.0-dev.1795", - "@parcel/runtime-rsc": "2.13.3-dev.3418", "@types/parcel-env": "^0.0.6", "@types/express": "*", "@types/node": "^22.10.1", @@ -37,15 +26,11 @@ "@types/react-dom": "^19", "concurrently": "^7.3.0", "express": "^4.18.2", - "parcel": "2.0.0-dev.1793", + "parcel": "canary", "process": "^0.11.10", "react": "experimental", "react-dom": "experimental", "react-server-dom-parcel": "experimental", - "rsc-html-stream": "^0.0.4", - "ws": "^8.8.1" - }, - "@parcel/bundler-default": { - "minBundleSize": 0 + "rsc-html-stream": "^0.0.4" } } diff --git a/fixtures/flight-parcel/src/Todos.tsx b/fixtures/flight-parcel/src/Todos.tsx index 2c05742ed31ec..ea606907300e4 100644 --- a/fixtures/flight-parcel/src/Todos.tsx +++ b/fixtures/flight-parcel/src/Todos.tsx @@ -2,7 +2,6 @@ import './client'; import './Todos.css'; -import {Resources} from '@parcel/runtime-rsc'; import {Dialog} from './Dialog'; import {TodoDetail} from './TodoDetail'; import {TodoCreate} from './TodoCreate'; @@ -13,7 +12,6 @@ export async function Todos({id}: {id?: number}) { Todos -
diff --git a/fixtures/flight-parcel/src/server.tsx b/fixtures/flight-parcel/src/server.tsx index 810fbb628ad3d..d9a81a0ef94b3 100644 --- a/fixtures/flight-parcel/src/server.tsx +++ b/fixtures/flight-parcel/src/server.tsx @@ -72,7 +72,9 @@ async function render( return ReactClient.use(data); } - let htmlStream = await renderHTMLToReadableStream(); + let htmlStream = await renderHTMLToReadableStream(, { + bootstrapScriptContent: (Todos as any).bootstrapScript, + }); let response = htmlStream.pipeThrough(injectRSCPayload(s2)); Readable.fromWeb(response as NodeReadableStream).pipe(res); } else { diff --git a/fixtures/flight-parcel/yarn.lock b/fixtures/flight-parcel/yarn.lock index 384a25dd74176..4b72e06b91bca 100644 --- a/fixtures/flight-parcel/yarn.lock +++ b/fixtures/flight-parcel/yarn.lock @@ -104,100 +104,101 @@ resolved "https://registry.yarnpkg.com/@msgpackr-extract/msgpackr-extract-win32-x64/-/msgpackr-extract-win32-x64-3.0.3.tgz#0aa5502d547b57abfc4ac492de68e2006e417242" integrity sha512-x0fWaQtYp4E6sktbsdAqnehxDgEc/VwM7uLsRCYWaiGu0ykYdZPiS8zCWdnjHwyiumousxfBm4SO31eXqwEZhQ== -"@parcel/bundler-default@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/bundler-default/-/bundler-default-2.0.0-dev.1795.tgz#0fff101f37e3defe676c4b66bce234e563c25825" - integrity sha512-nK82Osr6A6ZjYeRfy2KT6197rD+5SzMPQ9LqMLbh8h/WoKye8ywAYSyeckDp7GQZa8aqFZXpVqUtmI0SvdUcIQ== - dependencies: - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/graph" "3.3.3-dev.3418+9f297b15c" - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/rust" "2.13.3-dev.3418+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" +"@parcel/bundler-default@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/bundler-default/-/bundler-default-2.0.0-canary.1778.tgz#8a1d52191d035935547ed290c4ba4fc30cb8d8b2" + integrity sha512-eLiqvCl19fEa7V4qQShb2zn5N5X1cmpjXsd9WxYXA6WBLoO4Jj3Ju+GS8XH9/dUT0J0h5MZMazNUPqW/AAnFMw== + dependencies: + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/graph" "3.3.4-canary.3401+b50bc79cb" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + "@parcel/rust" "2.13.4-canary.3401+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" nullthrows "^1.1.1" -"@parcel/cache@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/cache/-/cache-2.0.0-dev.1795.tgz#2d7a97fa5c276b6cff60561e38b91cb88a8e834a" - integrity sha512-RUkCwGK/2qpGFtZslaNPp+/uPnh2YsFVk2XoLpw3H0JY9K8dDawlkfhFKz0r5nYfUYvhFiO1QPyC+20NWX1ovw== +"@parcel/cache@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/cache/-/cache-2.0.0-canary.1778.tgz#527ade7385f66ced271c73562925281e8975683e" + integrity sha512-WyGF9q0so0evb60joAdk9wqtKsrrb5zNqtMH2Es+g0B+HjuhfcyiuXUHL+O8zGZWHwzvdfij/s3bGj4sMjFZrg== dependencies: - "@parcel/fs" "2.0.0-dev.1795+9f297b15c" - "@parcel/logger" "2.0.0-dev.1795+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" + "@parcel/fs" "2.0.0-canary.1778+b50bc79cb" + "@parcel/logger" "2.0.0-canary.1778+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" lmdb "2.8.5" -"@parcel/codeframe@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/codeframe/-/codeframe-2.0.0-dev.1795.tgz#a9957966df6a4ac65b01f7ccf94db06414cf7bb2" - integrity sha512-xNk/Xw3mqo+qjmKrNKECqEmOILsrCBU40iUkldE0LgaRip9wR0fODtj2+KacP12ttCHbrgCdrela/AFV3FinKQ== +"@parcel/codeframe@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/codeframe/-/codeframe-2.0.0-canary.1778.tgz#216f2b5b1c84f8e3e06a27825cb80066fb5cc624" + integrity sha512-X6Y82nZJDBt/3rhwQ/8KDxzXHlMJ22T8R5DMAMLxg8aYNUUCV2GIcfiYDqp6fednUsZcRZ+VDsA2vDRLuHBKyw== dependencies: chalk "^4.1.2" -"@parcel/compressor-raw@2.13.3-dev.3418+9f297b15c": - version "2.13.3-dev.3418" - resolved "https://registry.yarnpkg.com/@parcel/compressor-raw/-/compressor-raw-2.13.3-dev.3418.tgz#65823d6bf7d99611f2d8f6d75e3a9c5b9b2ffd7e" - integrity sha512-pz4SaczIsQhMiaCZUehoEXQHZJoBd/T5kvoOcbg7S1chS1CouIwlT6vY4bseRlXoprDBEmK07HCItPF2W2SX+w== - dependencies: - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - -"@parcel/config-default@2.0.0-dev.1795", "@parcel/config-default@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/config-default/-/config-default-2.0.0-dev.1795.tgz#bae822637ff74e20f19aca3d26348416da9180f3" - integrity sha512-iaXwuLUZJ/L31I5TTeFE/mq6FL6gw15Vh27oEb/KS4pc6eYMvZRzyrIDCEJ6vxpi8VO4r0ncc7fOQqroT+vGIA== - dependencies: - "@parcel/bundler-default" "2.0.0-dev.1795+9f297b15c" - "@parcel/compressor-raw" "2.13.3-dev.3418+9f297b15c" - "@parcel/namer-default" "2.0.0-dev.1795+9f297b15c" - "@parcel/optimizer-css" "2.13.3-dev.3418+9f297b15c" - "@parcel/optimizer-htmlnano" "2.0.0-dev.1795+9f297b15c" - "@parcel/optimizer-image" "2.13.3-dev.3418+9f297b15c" - "@parcel/optimizer-svgo" "2.13.3-dev.3418+9f297b15c" - "@parcel/optimizer-swc" "2.13.3-dev.3418+9f297b15c" - "@parcel/packager-css" "2.0.0-dev.1795+9f297b15c" - "@parcel/packager-html" "2.0.0-dev.1795+9f297b15c" - "@parcel/packager-js" "2.0.0-dev.1795+9f297b15c" - "@parcel/packager-raw" "2.0.0-dev.1795+9f297b15c" - "@parcel/packager-svg" "2.13.3-dev.3418+9f297b15c" - "@parcel/packager-wasm" "2.13.3-dev.3418+9f297b15c" - "@parcel/reporter-dev-server" "2.0.0-dev.1795+9f297b15c" - "@parcel/resolver-default" "2.0.0-dev.1795+9f297b15c" - "@parcel/runtime-browser-hmr" "2.0.0-dev.1795+9f297b15c" - "@parcel/runtime-js" "2.0.0-dev.1795+9f297b15c" - "@parcel/runtime-react-refresh" "2.0.0-dev.1795+9f297b15c" - "@parcel/runtime-service-worker" "2.13.3-dev.3418+9f297b15c" - "@parcel/transformer-babel" "2.0.0-dev.1795+9f297b15c" - "@parcel/transformer-css" "2.0.0-dev.1795+9f297b15c" - "@parcel/transformer-html" "2.0.0-dev.1795+9f297b15c" - "@parcel/transformer-image" "2.13.3-dev.3418+9f297b15c" - "@parcel/transformer-js" "2.0.0-dev.1795+9f297b15c" - "@parcel/transformer-json" "2.0.0-dev.1795+9f297b15c" - "@parcel/transformer-postcss" "2.0.0-dev.1795+9f297b15c" - "@parcel/transformer-posthtml" "2.0.0-dev.1795+9f297b15c" - "@parcel/transformer-raw" "2.0.0-dev.1795+9f297b15c" - "@parcel/transformer-react-refresh-wrap" "2.0.0-dev.1795+9f297b15c" - "@parcel/transformer-svg" "2.13.3-dev.3418+9f297b15c" - -"@parcel/core@2.0.0-dev.1793+9f297b15c": - version "2.0.0-dev.1793" - resolved "https://registry.yarnpkg.com/@parcel/core/-/core-2.0.0-dev.1793.tgz#a911d743f26a3b15476936289b2c1847c21e6e9b" - integrity sha512-0O+crHFX4eoogpP/22sIPtjv4stNbzdeBZIoKqWl6Wndk63UdxVIEn6OvGokelgt/9qng9VoulMxAsrjKodemA== +"@parcel/compressor-raw@2.13.4-canary.3401+b50bc79cb": + version "2.13.4-canary.3401" + resolved "https://registry.yarnpkg.com/@parcel/compressor-raw/-/compressor-raw-2.13.4-canary.3401.tgz#322dae1c6feafd00d79d46cfde91b9753927e8ad" + integrity sha512-LYM92++ZfrFq08IaObm2KPZW3F3JxOd6WFEC8PdGisLNdDclnPGaX7Jg37KK9BKhmPWnysjqhtcf2evG8Xv8gg== + dependencies: + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + +"@parcel/config-default@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/config-default/-/config-default-2.0.0-canary.1778.tgz#860c6193c59cca237114c3499f727bf8e4139af5" + integrity sha512-BuRhy0Nhz45rQswOkc8EccUeYa9ZnL/ZYX4pdXULMbjhJzPMvs4OAg5NHy7uPvDWl0E7vt9kdDKDwUesLXTYUg== + dependencies: + "@parcel/bundler-default" "2.0.0-canary.1778+b50bc79cb" + "@parcel/compressor-raw" "2.13.4-canary.3401+b50bc79cb" + "@parcel/namer-default" "2.0.0-canary.1778+b50bc79cb" + "@parcel/optimizer-css" "2.13.4-canary.3401+b50bc79cb" + "@parcel/optimizer-htmlnano" "2.0.0-canary.1778+b50bc79cb" + "@parcel/optimizer-image" "2.13.4-canary.3401+b50bc79cb" + "@parcel/optimizer-svgo" "2.13.4-canary.3401+b50bc79cb" + "@parcel/optimizer-swc" "2.13.4-canary.3401+b50bc79cb" + "@parcel/packager-css" "2.0.0-canary.1778+b50bc79cb" + "@parcel/packager-html" "2.0.0-canary.1778+b50bc79cb" + "@parcel/packager-js" "2.0.0-canary.1778+b50bc79cb" + "@parcel/packager-raw" "2.0.0-canary.1778+b50bc79cb" + "@parcel/packager-svg" "2.13.4-canary.3401+b50bc79cb" + "@parcel/packager-wasm" "2.13.4-canary.3401+b50bc79cb" + "@parcel/reporter-dev-server" "2.0.0-canary.1778+b50bc79cb" + "@parcel/resolver-default" "2.0.0-canary.1778+b50bc79cb" + "@parcel/runtime-browser-hmr" "2.0.0-canary.1778+b50bc79cb" + "@parcel/runtime-js" "2.0.0-canary.1778+b50bc79cb" + "@parcel/runtime-rsc" "2.13.4-canary.3401+b50bc79cb" + "@parcel/runtime-service-worker" "2.13.4-canary.3401+b50bc79cb" + "@parcel/transformer-babel" "2.0.0-canary.1778+b50bc79cb" + "@parcel/transformer-css" "2.0.0-canary.1778+b50bc79cb" + "@parcel/transformer-html" "2.0.0-canary.1778+b50bc79cb" + "@parcel/transformer-image" "2.13.4-canary.3401+b50bc79cb" + "@parcel/transformer-js" "2.0.0-canary.1778+b50bc79cb" + "@parcel/transformer-json" "2.0.0-canary.1778+b50bc79cb" + "@parcel/transformer-node" "2.13.4-canary.3401+b50bc79cb" + "@parcel/transformer-postcss" "2.0.0-canary.1778+b50bc79cb" + "@parcel/transformer-posthtml" "2.0.0-canary.1778+b50bc79cb" + "@parcel/transformer-raw" "2.0.0-canary.1778+b50bc79cb" + "@parcel/transformer-react-refresh-wrap" "2.0.0-canary.1778+b50bc79cb" + "@parcel/transformer-svg" "2.13.4-canary.3401+b50bc79cb" + +"@parcel/core@2.0.0-canary.1776+b50bc79cb": + version "2.0.0-canary.1776" + resolved "https://registry.yarnpkg.com/@parcel/core/-/core-2.0.0-canary.1776.tgz#52887c2cc077222aeb490551713c267e2d2c7a41" + integrity sha512-4r2NbDDI9uEi76lxtgTZF+KsC4epk2mxtRi/HX3hWy5vSh1hYYAp6O5sc0+uqc3aOg6LYDgSrRGJ01cp4Q4a5A== dependencies: "@mischnic/json-sourcemap" "^0.1.0" - "@parcel/cache" "2.0.0-dev.1795+9f297b15c" - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/events" "2.0.0-dev.1795+9f297b15c" - "@parcel/feature-flags" "2.13.3-dev.3418+9f297b15c" - "@parcel/fs" "2.0.0-dev.1795+9f297b15c" - "@parcel/graph" "3.3.3-dev.3418+9f297b15c" - "@parcel/logger" "2.0.0-dev.1795+9f297b15c" - "@parcel/package-manager" "2.0.0-dev.1795+9f297b15c" - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/profiler" "2.13.3-dev.3418+9f297b15c" - "@parcel/rust" "2.13.3-dev.3418+9f297b15c" + "@parcel/cache" "2.0.0-canary.1778+b50bc79cb" + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/events" "2.0.0-canary.1778+b50bc79cb" + "@parcel/feature-flags" "2.13.4-canary.3401+b50bc79cb" + "@parcel/fs" "2.0.0-canary.1778+b50bc79cb" + "@parcel/graph" "3.3.4-canary.3401+b50bc79cb" + "@parcel/logger" "2.0.0-canary.1778+b50bc79cb" + "@parcel/package-manager" "2.0.0-canary.1778+b50bc79cb" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + "@parcel/profiler" "2.13.4-canary.3401+b50bc79cb" + "@parcel/rust" "2.13.4-canary.3401+b50bc79cb" "@parcel/source-map" "^2.1.1" - "@parcel/types" "2.0.0-dev.1795+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" - "@parcel/workers" "2.0.0-dev.1795+9f297b15c" + "@parcel/types" "2.0.0-canary.1778+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" + "@parcel/workers" "2.0.0-canary.1778+b50bc79cb" base-x "^3.0.8" browserslist "^4.6.6" clone "^2.1.1" @@ -208,319 +209,320 @@ nullthrows "^1.1.1" semver "^7.5.2" -"@parcel/diagnostic@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/diagnostic/-/diagnostic-2.0.0-dev.1795.tgz#273e049c8f88a19e824c5edf097e391a5b87b0c2" - integrity sha512-uWhJ7ojynh8wL0wr4EcR2wDVCxalsaLunEF/IfIpuWv5F+wEc8cTLsd4eAGjzMOO5jzWP2pK5XSK9TbWl4hTpQ== +"@parcel/diagnostic@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/diagnostic/-/diagnostic-2.0.0-canary.1778.tgz#618e33303887b5f733200f89e07700f50b9df89b" + integrity sha512-/WeyPZEF4OCGU2g/H2XSXe7cEnzBZVAqAodJjAcHEUiFlepXD6rockx15IyYb/+o8fr5WBdgLSzHiu5X0EU5Ug== dependencies: "@mischnic/json-sourcemap" "^0.1.0" nullthrows "^1.1.1" -"@parcel/events@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/events/-/events-2.0.0-dev.1795.tgz#d609260e0a6faa3bf0169936e770002c440e1f24" - integrity sha512-YREBS/8Yulm8wlZbwpbeez38BrOknSrjzBzj1nxL9gIoWLeB9c0zopZK0LFxaC+JDSzbtAsKYb94FoEe08Mo4w== - -"@parcel/feature-flags@2.13.3-dev.3418+9f297b15c": - version "2.13.3-dev.3418" - resolved "https://registry.yarnpkg.com/@parcel/feature-flags/-/feature-flags-2.13.3-dev.3418.tgz#2da678e6725449d7b70428073a0ef660d1c7dd3e" - integrity sha512-oTxIVXGJFjqTmefaugqV2nRsuXpN2aYTP/aJmm1mk06EyrkXTdAMrKoFsPimEshxvu8lGZ2fvZdF3pyWkR39FQ== - -"@parcel/fs@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/fs/-/fs-2.0.0-dev.1795.tgz#1dc534e806cc81f79e9aab578fa01bdf63b055aa" - integrity sha512-bY417DPxe921P/lYKiZhBv0fwCtgm5x0vUOhd9xPlAGasQrtqSUMoBwLcRStHd8e1xMrxp9UEJDfESL5+N/UuQ== - dependencies: - "@parcel/feature-flags" "2.13.3-dev.3418+9f297b15c" - "@parcel/rust" "2.13.3-dev.3418+9f297b15c" - "@parcel/types-internal" "2.13.3-dev.3418+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" +"@parcel/error-overlay@2.13.4-canary.3401+b50bc79cb": + version "2.13.4-canary.3401" + resolved "https://registry.yarnpkg.com/@parcel/error-overlay/-/error-overlay-2.13.4-canary.3401.tgz#50e5c786499485b093ed5a1c410262a6d5818895" + integrity sha512-NvX0zbNWTkKk75tb0qfaSUUdbx913Bk+zqjRzr6fnejcIpNb5LzFWB5H5EwdSMKN4rsU/16IBw0vh/eVzz65tg== + dependencies: + ansi-html-community "0.0.8" + react "^18 || ^19" + react-dom "^18 || ^19" + +"@parcel/events@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/events/-/events-2.0.0-canary.1778.tgz#2e8d1f353969166f4d402959fb24b487d6b8aaec" + integrity sha512-gVlxmr8Jn9p9gE3FJNg6pjB145DTHPZ573VyCUTlB3CzGP2Anw6yt8PMrl0mPbFsB+JPhDe+cC73xLcqvF5qvQ== + +"@parcel/feature-flags@2.13.4-canary.3401+b50bc79cb": + version "2.13.4-canary.3401" + resolved "https://registry.yarnpkg.com/@parcel/feature-flags/-/feature-flags-2.13.4-canary.3401.tgz#5f246e10b1af1c03562e4a4487e294de6f7bbcdb" + integrity sha512-ufBQX85889tFv+WfekNTjTgoiNoTUzseCJWdNvatmDCnj9p+XXHhOzaIBuybrHmle69boEiin+SV1/ygP+MqeQ== + +"@parcel/fs@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/fs/-/fs-2.0.0-canary.1778.tgz#26f8b0412180a7f4c3e7466fe417ff37d601fc1b" + integrity sha512-E+rlzz8oMqtLLelEdx8f8urP+CL4da09CfbRNWMCpSTFSVQ4bd277ysDk3f2Zb2xSrb1UNz+jfYzkbWUkbkzNA== + dependencies: + "@parcel/feature-flags" "2.13.4-canary.3401+b50bc79cb" + "@parcel/rust" "2.13.4-canary.3401+b50bc79cb" + "@parcel/types-internal" "2.13.4-canary.3401+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" "@parcel/watcher" "^2.0.7" - "@parcel/workers" "2.0.0-dev.1795+9f297b15c" + "@parcel/workers" "2.0.0-canary.1778+b50bc79cb" -"@parcel/graph@3.3.3-dev.3418+9f297b15c": - version "3.3.3-dev.3418" - resolved "https://registry.yarnpkg.com/@parcel/graph/-/graph-3.3.3-dev.3418.tgz#d62963b948b3ec3384ef6da136a23282c974736e" - integrity sha512-L7pOceNtP6dYx82MLrzMBe8uiUXPENoOaj/s6qCvPxjr8x6/Jo8qhIaz0f1htU1AtRMiTZjNL7Vw9Datwe8chg== +"@parcel/graph@3.3.4-canary.3401+b50bc79cb": + version "3.3.4-canary.3401" + resolved "https://registry.yarnpkg.com/@parcel/graph/-/graph-3.3.4-canary.3401.tgz#063e63dbfbd179f91a66913080dcfc9c9fd2a90f" + integrity sha512-e9jiVibaiPbN37GQmsbWYpr9hcROaNUJ+u//CEggxQ1afZzrXuemHKjpsGov8mwIOa9FPsFixEm4k3Be9totOg== dependencies: - "@parcel/feature-flags" "2.13.3-dev.3418+9f297b15c" + "@parcel/feature-flags" "2.13.4-canary.3401+b50bc79cb" nullthrows "^1.1.1" -"@parcel/logger@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/logger/-/logger-2.0.0-dev.1795.tgz#23ea704050e7d43c36f74ca9bd553d75f04c369f" - integrity sha512-haIJ2HRDef8D44nznCToiMB7OkpV2Er8NwOPQm9aJDyl1g4Lqro7cd5tZgEySHe3TlH6r8UWd6+C2ob+ws/jdA== +"@parcel/logger@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/logger/-/logger-2.0.0-canary.1778.tgz#5816e7588836a7b797f588f1597d2291fb934c1a" + integrity sha512-awy1XSaICE+fcgBGg4S4OosMYjm8ekOmKeQ1VJgEaqOJMKuQ9B1KEE0wjF0go+L8UeKOkQB042krgrgFij53eg== dependencies: - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/events" "2.0.0-dev.1795+9f297b15c" + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/events" "2.0.0-canary.1778+b50bc79cb" -"@parcel/markdown-ansi@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/markdown-ansi/-/markdown-ansi-2.0.0-dev.1795.tgz#410d31e4e7f178ec5039645e8a0e9fa318cb622e" - integrity sha512-HWYo1qJYcmtjKR6VAD4KHVjQ+30kGyxCTHt9oWqxLQeLakXKevWO6tR+htzxyAOH/YFwWeZr3cKstayoFnNkqA== +"@parcel/markdown-ansi@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/markdown-ansi/-/markdown-ansi-2.0.0-canary.1778.tgz#ccdb0dab5ee7f4458a31545dcc1039ec47a06c0b" + integrity sha512-y4UcdboI584JLZAyU4MQV/vhH5KoYEPzxd44lA5UWMHgYJSAaQrf14ua7mKfJ5YzPNGdUMqnpQr/WxhwjhsZNg== dependencies: chalk "^4.1.2" -"@parcel/namer-default@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/namer-default/-/namer-default-2.0.0-dev.1795.tgz#a5f2957fed9b49c819d56d2be7b6e4e996b14176" - integrity sha512-nmbkhtDxaEEzKvAFbhZEX4A/qz35PtjMwIr79sGFmUir7APuITf0MG8d5L9NTXHMgtNXPq+0t1A1gjaCO6aC5g== +"@parcel/namer-default@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/namer-default/-/namer-default-2.0.0-canary.1778.tgz#7e653625644c46008c27283df441d5ba84393558" + integrity sha512-KMlDPf2qchLWVbPHV7oYBcUvLaL2Pc45HvGomhCOVADQd/x77TrZBFQrdOdoGqrMq6UGxXanaqQSpmT+mxuUKA== dependencies: - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" nullthrows "^1.1.1" -"@parcel/node-resolver-core@3.4.3-dev.3418+9f297b15c": - version "3.4.3-dev.3418" - resolved "https://registry.yarnpkg.com/@parcel/node-resolver-core/-/node-resolver-core-3.4.3-dev.3418.tgz#cd25a6c86deefe2f4bc1007f26297c5518a196bd" - integrity sha512-qPpgrPc8KEQWbA9HrfNf9KiqFTHqO4YsMhD3DCtFenc5OJM5emt+a/ducqCW7e7W/az2kozhy/T9LJjYDP1PiQ== +"@parcel/node-resolver-core@3.4.4-canary.3401+b50bc79cb": + version "3.4.4-canary.3401" + resolved "https://registry.yarnpkg.com/@parcel/node-resolver-core/-/node-resolver-core-3.4.4-canary.3401.tgz#6093e0dc3532a56e72d01761ecf6e42fda721ecc" + integrity sha512-xrPwvoQMolEfq5aPYOpCl2BRWzlUXCAI1Q5D6Uamellgq3AXkM32cp9NoxV8KXbWCxNg9p4Q9pn3rnc3veJsxg== dependencies: "@mischnic/json-sourcemap" "^0.1.0" - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/fs" "2.0.0-dev.1795+9f297b15c" - "@parcel/rust" "2.13.3-dev.3418+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/fs" "2.0.0-canary.1778+b50bc79cb" + "@parcel/rust" "2.13.4-canary.3401+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" nullthrows "^1.1.1" semver "^7.5.2" -"@parcel/optimizer-css@2.13.3-dev.3418+9f297b15c": - version "2.13.3-dev.3418" - resolved "https://registry.yarnpkg.com/@parcel/optimizer-css/-/optimizer-css-2.13.3-dev.3418.tgz#d0064debbe5b0fce075182d0c74836fec2b17ecc" - integrity sha512-i8Bl1dcl8+y275prrwzeJFnoovrev+GmOO4T0RMk3hZmcUW+lhUf1vtn/MENQ2sgfQKl8oD1KdMW6tvYeJ7g2g== +"@parcel/optimizer-css@2.13.4-canary.3401+b50bc79cb": + version "2.13.4-canary.3401" + resolved "https://registry.yarnpkg.com/@parcel/optimizer-css/-/optimizer-css-2.13.4-canary.3401.tgz#caef3a38f33aa708caa005c4702ceab3fe7263d8" + integrity sha512-Ya7XysNxz6VdyDfh/NeRAULeQxrYeDvAmdvKkMACYe2vWk9K3PGqHvW56mE0gI6lim57LGuY98qDLf30aVBG2A== dependencies: - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" "@parcel/source-map" "^2.1.1" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" browserslist "^4.6.6" lightningcss "^1.22.1" nullthrows "^1.1.1" -"@parcel/optimizer-htmlnano@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.0.0-dev.1795.tgz#f7d3345dbcec03df9cc5db5f9913404ffd6051be" - integrity sha512-+2upe/5VvEe0d0K9ZFMuXwzbvolCCwZlQcu/P4hPAJEM/fs6A6zS3RA3hiVc18LNNz4UEM8sYp9X59dFHzYQnw== +"@parcel/optimizer-htmlnano@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/optimizer-htmlnano/-/optimizer-htmlnano-2.0.0-canary.1778.tgz#aeef13adb7a519827ed0e10c8f7519a588e14834" + integrity sha512-EV5vLmHMp4VOCDMb4X+YXgGw7ArbVkK81JIO+rsEoTxAckcApt/+tTreALdWjUFt+MUD4fOX7wj7QE2I3ZxDlA== dependencies: - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" htmlnano "^2.0.0" nullthrows "^1.1.1" posthtml "^0.16.5" -"@parcel/optimizer-image@2.13.3-dev.3418+9f297b15c": - version "2.13.3-dev.3418" - resolved "https://registry.yarnpkg.com/@parcel/optimizer-image/-/optimizer-image-2.13.3-dev.3418.tgz#69de333f47da2e32446db9d29a1c66aa63b04137" - integrity sha512-mQhZLFCPLwjUUVde+obImTy6mVSOF2z/VIs8n94BVOAVz1L/sksWON4eRF3tCdpi43kK7Jr/hHn53gIaveZu7w== - dependencies: - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/rust" "2.13.3-dev.3418+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" - "@parcel/workers" "2.0.0-dev.1795+9f297b15c" - -"@parcel/optimizer-svgo@2.13.3-dev.3418+9f297b15c": - version "2.13.3-dev.3418" - resolved "https://registry.yarnpkg.com/@parcel/optimizer-svgo/-/optimizer-svgo-2.13.3-dev.3418.tgz#1cd24b71a179a2ffd928f385ace5f4c8697bf795" - integrity sha512-+oGOLNwMtgYo1Vo4lzSOH9LQLekFkHaVmBq+B5WljedbszI2MklYBdrrEzBagjRzIYqinxB4j9t8DaLRvOeYag== - dependencies: - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" - -"@parcel/optimizer-swc@2.13.3-dev.3418+9f297b15c": - version "2.13.3-dev.3418" - resolved "https://registry.yarnpkg.com/@parcel/optimizer-swc/-/optimizer-swc-2.13.3-dev.3418.tgz#cef3f416ba4e18edf66d18f5c1cd2b374cd6b502" - integrity sha512-mMUZCrY1g1xCgA5VdnucDhUefhQY0pS3rJht3pxs3ifj7AJnmTJzZeY2wj8KdmjrOrRLTqSiQa+ESyNg6q8aqg== - dependencies: - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" +"@parcel/optimizer-image@2.13.4-canary.3401+b50bc79cb": + version "2.13.4-canary.3401" + resolved "https://registry.yarnpkg.com/@parcel/optimizer-image/-/optimizer-image-2.13.4-canary.3401.tgz#2873dc9346b58ef273311cc6babd0b30a409a312" + integrity sha512-Td1++YkEMfkmx2J8MQq4tBPUcq1LtJ1FkUVamB1aEK7rn9nayzzX09x4hsHUjIrJUwFXgxkOE+GsLDc7gxsZXQ== + dependencies: + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + "@parcel/rust" "2.13.4-canary.3401+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" + "@parcel/workers" "2.0.0-canary.1778+b50bc79cb" + +"@parcel/optimizer-svgo@2.13.4-canary.3401+b50bc79cb": + version "2.13.4-canary.3401" + resolved "https://registry.yarnpkg.com/@parcel/optimizer-svgo/-/optimizer-svgo-2.13.4-canary.3401.tgz#6be0319a549683889d94f427539d9c7e8fa23b05" + integrity sha512-Iza9b5eRF0gFo1kGZFNL3NN8fW5gkbOt8dBZ0adSmKdJnnl4qRXfk2riw/ao46TxpbUWHB3QM/Yd/zNjO35Zog== + dependencies: + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" + +"@parcel/optimizer-swc@2.13.4-canary.3401+b50bc79cb": + version "2.13.4-canary.3401" + resolved "https://registry.yarnpkg.com/@parcel/optimizer-swc/-/optimizer-swc-2.13.4-canary.3401.tgz#f8c59ae533208eeaf4d21871ad3a77dd70bdd837" + integrity sha512-b7szi8sWCNniSRGXMSnAPgZuqFNj6EghoLgDw5c5wNm30nh0Ra5QQIN5KGswxNj1l2qzIfk7PbU30GIxBop7kg== + dependencies: + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" "@parcel/source-map" "^2.1.1" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" - "@swc/core" "^1.7.26" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" + "@swc/core" "^1.10.7" nullthrows "^1.1.1" -"@parcel/package-manager@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/package-manager/-/package-manager-2.0.0-dev.1795.tgz#b76fc0398561e66f369f47bc960ca706b640e5f2" - integrity sha512-SR0LhO3CXNjKb1ufC+zwl1HvpIfWTRLey1MZ0sx8e+wmpJAzLFoFvjJb9ve3/gPEM3Wu12J30JizZ9ZPM5b7Yg== - dependencies: - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/fs" "2.0.0-dev.1795+9f297b15c" - "@parcel/logger" "2.0.0-dev.1795+9f297b15c" - "@parcel/node-resolver-core" "3.4.3-dev.3418+9f297b15c" - "@parcel/types" "2.0.0-dev.1795+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" - "@parcel/workers" "2.0.0-dev.1795+9f297b15c" - "@swc/core" "^1.7.26" +"@parcel/package-manager@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/package-manager/-/package-manager-2.0.0-canary.1778.tgz#f8231d85d3f565762d4cf19f110b94d350a7470b" + integrity sha512-2KVJx1go+/DleXHzCdXctNlCuEDPL1W2N2B9+P2r+q6N1u/VMzgM5U2bJxCvHzJoRj1Z1L/+gshCoqjew3ylSA== + dependencies: + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/fs" "2.0.0-canary.1778+b50bc79cb" + "@parcel/logger" "2.0.0-canary.1778+b50bc79cb" + "@parcel/node-resolver-core" "3.4.4-canary.3401+b50bc79cb" + "@parcel/types" "2.0.0-canary.1778+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" + "@parcel/workers" "2.0.0-canary.1778+b50bc79cb" + "@swc/core" "^1.10.7" semver "^7.5.2" -"@parcel/packager-css@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/packager-css/-/packager-css-2.0.0-dev.1795.tgz#80a17e214d0e4b51c48daa45546e64c2c3a6ac3b" - integrity sha512-xDdNaDvriZ91s6EPTRbT9qUOYimXNHhlQ/rHuIDyiWhJSL3nHdGvljvJa2olZqDgafeU34ewqo7sVGqG9Ts5lg== +"@parcel/packager-css@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/packager-css/-/packager-css-2.0.0-canary.1778.tgz#e29ed4e5d0c2b41cf3603708b542d4eba4b8388f" + integrity sha512-1YODpOVoaXLANH3FBz47Qh0bNNc8WoFU2Xcgd2P54VheYp1TgQ5/kGZWSfk04hcxBeB6pDaVrULIzw8lpCK3vA== dependencies: - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" "@parcel/source-map" "^2.1.1" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" lightningcss "^1.22.1" nullthrows "^1.1.1" -"@parcel/packager-html@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/packager-html/-/packager-html-2.0.0-dev.1795.tgz#3bc7a3c7ce970b0f5ad0f23a0367b0f16576f5ac" - integrity sha512-4Q4UJt3VP47GzcXg3bZwjOGNehkfRJw9YhfnOUzWQMr/+LTk0/syY7DAP3e7gUchchBLpaCt77tY/j6bLIFgtA== +"@parcel/packager-html@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/packager-html/-/packager-html-2.0.0-canary.1778.tgz#43f3fe4feb4ceb1ef30409fea393a5cd66067950" + integrity sha512-jV9wwbWoRkCWJ6oikLAaQkR4ZRVvWfKyvz1LbqS/L7cMsOQR/92YiPGbYa/3L0DmvgTL3LFjcN6E9hVgEk/Srw== dependencies: - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/types" "2.0.0-dev.1795+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + "@parcel/types" "2.0.0-canary.1778+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" nullthrows "^1.1.1" posthtml "^0.16.5" -"@parcel/packager-js@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/packager-js/-/packager-js-2.0.0-dev.1795.tgz#3cbd0720ee774188a8e2ef3d5547efd36d0bda9a" - integrity sha512-XEyYQiop3Y5/R2vFFcxpsVXbnmMGb4YYGKJC1XJOgI2MrNZL053s5Tk9AIMCYE94MfX/TARbiEonrO2jbISx+A== +"@parcel/packager-js@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/packager-js/-/packager-js-2.0.0-canary.1778.tgz#c9579986baad35802685d05bc275f9313a6b040b" + integrity sha512-H1WZEWNSAivEj6Mo6r14Vdc5fzB8bxOFa2ZDYCcyfHGnOulJhWU2d2n8apj8fsAFbdKGX+/AvdPvpX8HzwI23Q== dependencies: - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/rust" "2.13.3-dev.3418+9f297b15c" + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + "@parcel/rust" "2.13.4-canary.3401+b50bc79cb" "@parcel/source-map" "^2.1.1" - "@parcel/types" "2.0.0-dev.1795+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" + "@parcel/types" "2.0.0-canary.1778+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" globals "^13.2.0" nullthrows "^1.1.1" -"@parcel/packager-raw@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/packager-raw/-/packager-raw-2.0.0-dev.1795.tgz#549c8a54f8fd5b6a693149508a118023afe1f66d" - integrity sha512-T9Dp9Qt5JREDD1N21QRfEEKMCuxZ0pa4G34J14sI7QTh2hDPDqeeFWYMkE0Pk+Yn3w2pWfS+Qod1DuRvm6WFZg== +"@parcel/packager-raw@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/packager-raw/-/packager-raw-2.0.0-canary.1778.tgz#81c38947b4e5421a98364b8751a1e1e338f91108" + integrity sha512-yjO18I01KsOjnq6VHQfUU76wisNZt/GIEJF2NWgbp4FUbIQECbcS3JZ14Ct0MBv7rreY5/ge6Ed6a4dIsiamhQ== dependencies: - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" -"@parcel/packager-svg@2.13.3-dev.3418+9f297b15c": - version "2.13.3-dev.3418" - resolved "https://registry.yarnpkg.com/@parcel/packager-svg/-/packager-svg-2.13.3-dev.3418.tgz#4c6a6b06d87955c444f2e1d861b80720ba02e816" - integrity sha512-RxeL6JRXld+SPTqds0mLswsgKCvkarM8pyBBXJLvP5a8G2jmc7OkgkaYonORz8EXGJCH21JAP6mxbwq4EjsuQQ== +"@parcel/packager-svg@2.13.4-canary.3401+b50bc79cb": + version "2.13.4-canary.3401" + resolved "https://registry.yarnpkg.com/@parcel/packager-svg/-/packager-svg-2.13.4-canary.3401.tgz#303d2ccdc76cb4b385f1b76af7f731b060a89521" + integrity sha512-QG7vuMPsWkZeixKgF+3SRYp8AcPQzV4mDQSicwfMq/aabL4fBDB5ZQ7FHb9DT3oj6ent2xjonQw9ubzwb+Hfcg== dependencies: - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/types" "2.0.0-dev.1795+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + "@parcel/types" "2.0.0-canary.1778+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" posthtml "^0.16.4" -"@parcel/packager-wasm@2.13.3-dev.3418+9f297b15c": - version "2.13.3-dev.3418" - resolved "https://registry.yarnpkg.com/@parcel/packager-wasm/-/packager-wasm-2.13.3-dev.3418.tgz#ecd6dc970e10b805be6768ecee28a795f79130ec" - integrity sha512-XNIiDGbf8ZMyqxJYYQq2TrshMbBTDU5DdC9V7ByS4EuPpr9DjNhZWa7NXzU5rfze2b/sNyL5Y9w52wIU2JNMEA== +"@parcel/packager-wasm@2.13.4-canary.3401+b50bc79cb": + version "2.13.4-canary.3401" + resolved "https://registry.yarnpkg.com/@parcel/packager-wasm/-/packager-wasm-2.13.4-canary.3401.tgz#4e84b46c8f1b2350decaa2415990eff37c0685cb" + integrity sha512-zoDPZd0+vXt4IhUJlWEW1aQDiO8axOJBcj1qJxK3f+VwJcLzcRJZnpUnVCdwTQfVZK4BJxMdR+8EXPsrysCiLw== dependencies: - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" -"@parcel/plugin@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/plugin/-/plugin-2.0.0-dev.1795.tgz#6ad492e83bc6cef4c3c360fc0dac3f6bc61d3631" - integrity sha512-2lj8IU3DHZvoBbKbuRwDr8s+ktPd8EOMIZZZ8bWuQ28mGCE5HaogbU7mHuzJqbSzcd9GnxPqSoKSA7msv1jDew== +"@parcel/plugin@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/plugin/-/plugin-2.0.0-canary.1778.tgz#e9f202e2e6f044a220c456c3619f5e120ed7671a" + integrity sha512-SH7EhYTQF1JbqEtoD70yid9PsmPBSYymZg6oc2gyWexbAGWdlPD9xz8+E876JLnuhMPFf/ptdT4Apf4n4USvAQ== dependencies: - "@parcel/types" "2.0.0-dev.1795+9f297b15c" + "@parcel/types" "2.0.0-canary.1778+b50bc79cb" -"@parcel/profiler@2.13.3-dev.3418+9f297b15c": - version "2.13.3-dev.3418" - resolved "https://registry.yarnpkg.com/@parcel/profiler/-/profiler-2.13.3-dev.3418.tgz#551a2b7d8181c971ea4912919094bfa5d3fc65e6" - integrity sha512-AisnQYasAaJNqepRnihs50SEtO+hBUKoX1BzJ/ha63MAnB5eGRXilHjjjVgGPcvthn89II+NtejNp0eiiXeYBQ== +"@parcel/profiler@2.13.4-canary.3401+b50bc79cb": + version "2.13.4-canary.3401" + resolved "https://registry.yarnpkg.com/@parcel/profiler/-/profiler-2.13.4-canary.3401.tgz#2046d73dd39764f50d7ed15602ac6fb4f71b07ed" + integrity sha512-BmOfBEzZhJM1sWjkeSYMknCGRGarAcvK+2iCk/PvKUvmCjJq+UpiFnSpcQehH+nbqCaBr+0SvrmWI25300mrEg== dependencies: - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/events" "2.0.0-dev.1795+9f297b15c" - "@parcel/types-internal" "2.13.3-dev.3418+9f297b15c" + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/events" "2.0.0-canary.1778+b50bc79cb" + "@parcel/types-internal" "2.13.4-canary.3401+b50bc79cb" chrome-trace-event "^1.0.2" -"@parcel/reporter-cli@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/reporter-cli/-/reporter-cli-2.0.0-dev.1795.tgz#f449ac4fb987dd36367cd6a137e2d61ebf23d39a" - integrity sha512-KdF4fTodClz/SBCmTgn1s3hF8FRDFLMiOArNF4zzpwYR7LqVb21fD6uCzdKluqR/dC8S6bQvyjKdYDxKbEuoGQ== +"@parcel/reporter-cli@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/reporter-cli/-/reporter-cli-2.0.0-canary.1778.tgz#193a0802fa0f4c448f876d9a013f672ad2a33f6b" + integrity sha512-dQUzK3f4kbHC1eTzqWWkwyj6y3yPel/uB3lYSN1fiIB0Cnwmnz/baIT8v0Nw8vqOSsjZRtzGRMi4GoizONEAOw== dependencies: - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/types" "2.0.0-dev.1795+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + "@parcel/types" "2.0.0-canary.1778+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" chalk "^4.1.2" term-size "^2.2.1" -"@parcel/reporter-dev-server@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/reporter-dev-server/-/reporter-dev-server-2.0.0-dev.1795.tgz#b5fc225cdb1f186003bbf862c61842358c002752" - integrity sha512-cot7qGAkujf/XMIH/jk2NY+agxgXO+PG8YrbCn3Tul/Gm3bYy5pc2XCuMYqyRHAIWe3wKLuHba2RHMR4WgZitg== +"@parcel/reporter-dev-server@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/reporter-dev-server/-/reporter-dev-server-2.0.0-canary.1778.tgz#4083e9338deb6aaa0798a4add9d7e5b6fc58fc15" + integrity sha512-ADLk+GTWROXGGX/0JVCePxrgrE7NAcMILkugj9Djqn+Son64JfN6b9/SMObOeg2OHUovIGntfB4XHTPrgQ3CiQ== dependencies: - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" + "@parcel/codeframe" "2.0.0-canary.1778+b50bc79cb" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + "@parcel/source-map" "^2.1.1" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" -"@parcel/reporter-tracer@2.13.3-dev.3418+9f297b15c": - version "2.13.3-dev.3418" - resolved "https://registry.yarnpkg.com/@parcel/reporter-tracer/-/reporter-tracer-2.13.3-dev.3418.tgz#7996aae33b5e3776bd2c1f61bebac26263bc3536" - integrity sha512-SpTrCT51wjYMPqlRPqKAx6rXpUGx3rkfYov97ID1K17z1KoWqIkZPvjDrTRD01aEz9lLHF4Ywc5beaguVwecJA== +"@parcel/reporter-tracer@2.13.4-canary.3401+b50bc79cb": + version "2.13.4-canary.3401" + resolved "https://registry.yarnpkg.com/@parcel/reporter-tracer/-/reporter-tracer-2.13.4-canary.3401.tgz#f7059dd07c442912b2684de76aa3ea908db9a72a" + integrity sha512-GdCof1Rd73iQU6BWqK0RxO5/eQK4yE4KLYiuXSP6jRiz8aYy+eySav+AABF8xofUb0mz1S2UZHL6wi4Y26Qxlg== dependencies: - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" chrome-trace-event "^1.0.3" nullthrows "^1.1.1" -"@parcel/resolver-default@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/resolver-default/-/resolver-default-2.0.0-dev.1795.tgz#684e45e1d92847882332a3b61fde91bd58b831d4" - integrity sha512-0oXyPHEWf6fLrLe1FDN7fwhnKB/QmMw4di1wosxRHtyfTgIa/hs+r8hK0n5Jqy3JzmMlwgBr+p4gwnxOLPK/KQ== +"@parcel/resolver-default@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/resolver-default/-/resolver-default-2.0.0-canary.1778.tgz#89c12e0980120ca0d17b86f8fdc49316db417f44" + integrity sha512-35XCeit5VlZmAAMxzR/MbRH2ZQrI9Wpwxm9IrmvZ5ETDs8ilY+g3PAg5F0WFF/prxOVIJ+5IahHuc7f9UKdBFQ== dependencies: - "@parcel/node-resolver-core" "3.4.3-dev.3418+9f297b15c" - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" + "@parcel/node-resolver-core" "3.4.4-canary.3401+b50bc79cb" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" -"@parcel/runtime-browser-hmr@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.0.0-dev.1795.tgz#c2c72a056b53c43e4e642197382e885f0f17425f" - integrity sha512-L0VpGl6D92WOsoF98eesLg/09VnGUr/14TlDzh0G7tRG+LHXcg0o/6vsGzVLKjR6yXQHuc/6SepbY2U5NsQNNg== +"@parcel/runtime-browser-hmr@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/runtime-browser-hmr/-/runtime-browser-hmr-2.0.0-canary.1778.tgz#579f09b31ea01ea6608db7eecbb12ca60b294bc8" + integrity sha512-eYX9Els15PWRxKp5VdVpms2MXJGhHzblqPHTZP/KXlltSmAPMiwoco72BWnrSSBniHYOpBpUJZ2it9GYeQrHdw== dependencies: - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" -"@parcel/runtime-js@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/runtime-js/-/runtime-js-2.0.0-dev.1795.tgz#e0843dbeb6d2790bf4221c9128125eb208f46c06" - integrity sha512-np7fz79T7zxIuzZOZIgUpeLy297r0pkHQn0TfGvXs16m7Yz3KGOXsYe8gJGLfhsJk2JLOZ0PQsLvgXRfyKDoxA== +"@parcel/runtime-js@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/runtime-js/-/runtime-js-2.0.0-canary.1778.tgz#efeef26e7ac4a7c68bc3e3d160db033d4d0023d2" + integrity sha512-ZY9EtkfX9TXZUAZuT9kjexNb1Jm8RPVsbI00GsqkCN/OTU1Yp60792rYU0wQjxHiohgFBUCQPOyFvEZgHzCGfw== dependencies: - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" nullthrows "^1.1.1" -"@parcel/runtime-react-refresh@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/runtime-react-refresh/-/runtime-react-refresh-2.0.0-dev.1795.tgz#06469b97471044fae8528dcad4e39c51b4945e8f" - integrity sha512-UQHDuBOTC0lsoFmyTD7zELmErVvt9wge5yeqLrB59yYvK570MrU/ujkyCECCOIf5IojbNn7GI4rmntO3SEp4Kg== - dependencies: - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" - react-error-overlay "6.0.9" - react-refresh ">=0.9 <=0.14" - -"@parcel/runtime-rsc@2.13.3-dev.3418": - version "2.13.3-dev.3418" - resolved "https://registry.yarnpkg.com/@parcel/runtime-rsc/-/runtime-rsc-2.13.3-dev.3418.tgz#288351ebfb2b89a8b9fb6ebc880480950a97c8da" - integrity sha512-uBs80TXnx3rlauNeolYwfrrvLNjQgkM0ilxXmE2636hEhI6TRUWR86s/DoLKx/WFW+A7oAxSgXa4LUXPhiuQhA== +"@parcel/runtime-rsc@2.13.4-canary.3401+b50bc79cb": + version "2.13.4-canary.3401" + resolved "https://registry.yarnpkg.com/@parcel/runtime-rsc/-/runtime-rsc-2.13.4-canary.3401.tgz#9cf0681dd6442f841082518a5f83e5f1cc835351" + integrity sha512-xu9mozLwP6ilDLot67mmV55/0zoKpLMwsdWtcSuMGy+4O3+4107c79zXz9APrlMsui1CdIXkEcxmtGdWDRb6GQ== dependencies: - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/rust" "2.13.3-dev.3418+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + "@parcel/rust" "2.13.4-canary.3401+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" nullthrows "^1.1.1" -"@parcel/runtime-service-worker@2.13.3-dev.3418+9f297b15c": - version "2.13.3-dev.3418" - resolved "https://registry.yarnpkg.com/@parcel/runtime-service-worker/-/runtime-service-worker-2.13.3-dev.3418.tgz#5a55a63ecbe338f6950899db69b7319957a14490" - integrity sha512-ptW3S1klF5XBcMVInmuXYvYzJMFoTTB/0U56knKDq2dvFBbsLtHdTR+oMREzv0sqkT/UeT75uC5gLTYnqogvKw== +"@parcel/runtime-service-worker@2.13.4-canary.3401+b50bc79cb": + version "2.13.4-canary.3401" + resolved "https://registry.yarnpkg.com/@parcel/runtime-service-worker/-/runtime-service-worker-2.13.4-canary.3401.tgz#ae77af90b6d934e6a9df7ef7bb02d1a3aabcd293" + integrity sha512-xKBe0Xsa7tq1azdAip0VqqmHuQqJJgLpPElbXIaGKysN8W9W+3PxZ4U9fpkKCeymgH6tBMBAn1Wg2K2yb7gnyg== dependencies: - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" nullthrows "^1.1.1" -"@parcel/rust@2.13.3-dev.3418+9f297b15c": - version "2.13.3-dev.3418" - resolved "https://registry.yarnpkg.com/@parcel/rust/-/rust-2.13.3-dev.3418.tgz#8fb1db9f7c361f4d08476380c0b823b84f9107c8" - integrity sha512-HcwkHle9XCqg3rXv+sQR5LcoiSJAoGNWrOC5Abz3ANev8frisLnHqL6foFT1nCmEWQ8QUluBYJfNgv1DZ/aVxg== +"@parcel/rust@2.13.4-canary.3401+b50bc79cb": + version "2.13.4-canary.3401" + resolved "https://registry.yarnpkg.com/@parcel/rust/-/rust-2.13.4-canary.3401.tgz#10af9abdc4ca84e1409c607d192d3cada0a2f4c6" + integrity sha512-O47VXGNEmZjf2BMHcnLrjlbiDDeKySnyLGUgq5ua8J79h/bTAtL/hRVxxmFuR1PVpNtmRaZG8zJclpFTJxTAMA== "@parcel/source-map@^2.1.1": version "2.1.1" @@ -529,41 +531,41 @@ dependencies: detect-libc "^1.0.3" -"@parcel/transformer-babel@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/transformer-babel/-/transformer-babel-2.0.0-dev.1795.tgz#f9612f6a224ddd0cb149d45e8ae4f5bf87c73c44" - integrity sha512-VpLZDimLWosfUbuqgcJTj6Y/3QETmZdJtb3JRAP1hc0EDvYsWkvUcCDe7CzYeYFsMSA8lAZxWmU3mG5Fp8h9pA== +"@parcel/transformer-babel@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/transformer-babel/-/transformer-babel-2.0.0-canary.1778.tgz#9edf15338bf2e7b519e880556775eba410a4c176" + integrity sha512-Wab/AzFtoZPknEXXJx4srDzpHlN5X54PE7Lt2IyUlFlfjFByFzFDbqXfPFGQOtEo1kTKElMEIKmWZoNXlNs/sg== dependencies: - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" "@parcel/source-map" "^2.1.1" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" browserslist "^4.6.6" json5 "^2.2.0" nullthrows "^1.1.1" semver "^7.5.2" -"@parcel/transformer-css@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/transformer-css/-/transformer-css-2.0.0-dev.1795.tgz#bc7a59f7de7ec4b3cba2ba174c0f5e5c0cfaf35c" - integrity sha512-nwiES/2DD/pmzZCj1enfmfloC2ehKoGZ6vr5XKEM7y+ld42Hea5UT0sjinJHoV+Xuk6pkcOa1j1Vb8d4JURgTQ== +"@parcel/transformer-css@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/transformer-css/-/transformer-css-2.0.0-canary.1778.tgz#054a952fd9584c63353ba04b9dbe890abcbf17a9" + integrity sha512-NnGkmM+M/2kCCFEhDvEikdTI9hmKX2qg/aj/JapDP/B8yyaGWP5xSZmv4EDb/mHYpxrsJ1YUeEzdMCEwm7RMNA== dependencies: - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" "@parcel/source-map" "^2.1.1" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" browserslist "^4.6.6" lightningcss "^1.22.1" nullthrows "^1.1.1" -"@parcel/transformer-html@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/transformer-html/-/transformer-html-2.0.0-dev.1795.tgz#cc5fa7398b51e8ddf08838677255b74cdae1118c" - integrity sha512-hlnc1KfrLNlKndDa5wXOY6EVKJjbeTQX2/d5w7eifSbDBW7yejDq1k2PByVZpitJ2dgO41NXMeDWSpvZt36G1A== +"@parcel/transformer-html@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/transformer-html/-/transformer-html-2.0.0-canary.1778.tgz#8a647d56fa2372026cbb7929370cb2d938f9da58" + integrity sha512-g+FuzT8jtGZFqZTyvZYz+IiBiPrU1an5fekCkYjEgUYHxc1PYJS+HK6XmbYbu8zNVq11NFpiqMuPbExwvHGi1Q== dependencies: - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/rust" "2.13.3-dev.3418+9f297b15c" + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + "@parcel/rust" "2.13.4-canary.3401+b50bc79cb" nullthrows "^1.1.1" posthtml "^0.16.5" posthtml-parser "^0.12.1" @@ -571,299 +573,307 @@ semver "^7.5.2" srcset "4" -"@parcel/transformer-image@2.13.3-dev.3418+9f297b15c": - version "2.13.3-dev.3418" - resolved "https://registry.yarnpkg.com/@parcel/transformer-image/-/transformer-image-2.13.3-dev.3418.tgz#a8153a7d94c9e6ddc49ff0a0bb41b645a4a5459e" - integrity sha512-lXkkCWbhuYd0UWm3zwVAIoC6B8fvyRacDkbhjhDO96gs7kmZPh369P4rlh03HeoOJlgTcpuvIH4LcnoVeccUSw== +"@parcel/transformer-image@2.13.4-canary.3401+b50bc79cb": + version "2.13.4-canary.3401" + resolved "https://registry.yarnpkg.com/@parcel/transformer-image/-/transformer-image-2.13.4-canary.3401.tgz#b8d435574e3c17adb9cc91aa3425d3ed8424f794" + integrity sha512-Rz44jzq9jUIOx8lLSqk2wpHz9mfo1iH74LyXKtW/0Brb8FjUu5DfX9/492B08Sh83L/HZ3zs0j9lBcVbQsMYYQ== dependencies: - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" - "@parcel/workers" "2.0.0-dev.1795+9f297b15c" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" + "@parcel/workers" "2.0.0-canary.1778+b50bc79cb" nullthrows "^1.1.1" -"@parcel/transformer-js@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/transformer-js/-/transformer-js-2.0.0-dev.1795.tgz#741ee51638cbd8787f7a0903aef670382ecad19f" - integrity sha512-7ZxmALPqcI/B1Ywg835qwicZlmE5is2bbPYkjx7Pjc3MB5q+GKTwz/iWEjTS5AbZkKw9Db3QXp/+dubFoLSI4g== +"@parcel/transformer-js@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/transformer-js/-/transformer-js-2.0.0-canary.1778.tgz#c8419bccbcb11eab3bfd289805986ad35346d537" + integrity sha512-tr7Jiy18TyiArxRnj3v1IaitnAP1TdMJylCwX875o458du72SAoYCanyn6xb9qT/D6TVQ87OINtKvAPJo20rvg== dependencies: - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/rust" "2.13.3-dev.3418+9f297b15c" + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + "@parcel/rust" "2.13.4-canary.3401+b50bc79cb" "@parcel/source-map" "^2.1.1" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" - "@parcel/workers" "2.0.0-dev.1795+9f297b15c" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" + "@parcel/workers" "2.0.0-canary.1778+b50bc79cb" "@swc/helpers" "^0.5.0" browserslist "^4.6.6" nullthrows "^1.1.1" regenerator-runtime "^0.14.1" semver "^7.5.2" -"@parcel/transformer-json@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/transformer-json/-/transformer-json-2.0.0-dev.1795.tgz#a5215f863cab73d58e66d9466e45da145879cddd" - integrity sha512-2oKPaX2oFmynkMN8pA/BnrssnNL5xWuh6nKW5qqX/n9R7GoGIPAJ7iZrsFlU5vPLw2nsz1EDdhv4R5ydZK3a+Q== +"@parcel/transformer-json@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/transformer-json/-/transformer-json-2.0.0-canary.1778.tgz#8cc61b34f4323177bc13800f1ec3451f375f0fec" + integrity sha512-2rT/Z+A1usE1jibCm6lNz38uqzRchffX5pi6SQS+BsDZRa5JAHizjAE5AuesKLjdJVDxZ1HBdX+gl+u6Bh+scA== dependencies: - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" json5 "^2.2.0" -"@parcel/transformer-postcss@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/transformer-postcss/-/transformer-postcss-2.0.0-dev.1795.tgz#0413805bb09bf22227b15bfcbb817142d7a9c6ce" - integrity sha512-b2+r8gMtGczhEuUFJmYi8Joo0TEN+8VD4mMaQxtUbz3cNdJxDVWjD5fLQNJcbWFzEsAv2aU5eXJ1dGU8vofd5Q== +"@parcel/transformer-node@2.13.4-canary.3401+b50bc79cb": + version "2.13.4-canary.3401" + resolved "https://registry.yarnpkg.com/@parcel/transformer-node/-/transformer-node-2.13.4-canary.3401.tgz#3713ebbd981d5ac2de5be51b23db6e2b19d074c7" + integrity sha512-r4aGiTTju9+IG9a+Wz268alvTXkS+2BMc3Dgbh/yRzicNzhJUAbdkMLrTtq0ekV+BJm/Ds53dPHPJrb5S4vnkA== dependencies: - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/rust" "2.13.3-dev.3418+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + +"@parcel/transformer-postcss@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/transformer-postcss/-/transformer-postcss-2.0.0-canary.1778.tgz#66637a23a1ea03a0484f26b68ef2fc1904a928d1" + integrity sha512-iaTDDQrnIYrh8iJn99cJsnL0rffwGB8mGYTyOoqUneGLcSg0P/3XT2k8mu+OT7Q8tJOIMw6GR/3nNjZSwo0zgA== + dependencies: + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + "@parcel/rust" "2.13.4-canary.3401+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" clone "^2.1.1" nullthrows "^1.1.1" postcss-value-parser "^4.2.0" semver "^7.5.2" -"@parcel/transformer-posthtml@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/transformer-posthtml/-/transformer-posthtml-2.0.0-dev.1795.tgz#787682376cb01bd6d8811246619881af2e7cd0a7" - integrity sha512-9lrdDY1pIQtRMkxe8r0EghSd+7hFEyU3xb2nNO68m9Eut9zHjZo3p1As6rKp6eJ5ZqZxOJYj4xhqymwc5Evi4Q== +"@parcel/transformer-posthtml@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/transformer-posthtml/-/transformer-posthtml-2.0.0-canary.1778.tgz#f6619822308daccc88bb942dd0f0ba47246212ec" + integrity sha512-wYPsbfREZasatPZjmZdY7jJYH6+3zbtSciTuxNmyGxExLodU/Rvae3SgeJzTpuXXcFigp/J3Srgeh+yRt4KI3A== dependencies: - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" nullthrows "^1.1.1" posthtml "^0.16.5" posthtml-parser "^0.12.1" posthtml-render "^3.0.0" semver "^7.5.2" -"@parcel/transformer-raw@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/transformer-raw/-/transformer-raw-2.0.0-dev.1795.tgz#97edd45f72b39286aa1d79601912ea68c127448a" - integrity sha512-pg6/3C3kFLbWghdE7v4OdMRDvNIhSLhYy4AGOI+6KbPtVCI/0We1ZCSf1ciAluYbq7/tvYJhUuwGLukrdxTfDg== +"@parcel/transformer-raw@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/transformer-raw/-/transformer-raw-2.0.0-canary.1778.tgz#e2eb5d32c365e1185c454790a578a8d7212fae70" + integrity sha512-FbHLsYd8EPDATD2xzX/FqViMOrgPhG+IGYkDXsCk1cPF+zmU4uNGE2q8MNl1zaxQxa927lN5SIkjm8Lw7Qqf7A== dependencies: - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" -"@parcel/transformer-react-refresh-wrap@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.0.0-dev.1795.tgz#96fc5b5ead89eae1d6a23690bc9b63cfd2f7bb11" - integrity sha512-OT41I1Y5anyvy6ocnzsgfvMi71J/DUlgcu0X1d3eRl3ui4ACmXB/NkzZr4+EmCFKgE8cp0UR67y6OpoIYFP79Q== +"@parcel/transformer-react-refresh-wrap@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/transformer-react-refresh-wrap/-/transformer-react-refresh-wrap-2.0.0-canary.1778.tgz#92249148709770a741a08163d6bf75973ab2f7b0" + integrity sha512-SgdnIAsY2s2FUcBwj3A2ME3C3WcLtPnmpQZBHk8pBIzBXmx98DABkPgneMdtsmoPg5RpSRsLba1ThFz1GeaBsw== dependencies: - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" - react-refresh ">=0.9 <=0.14" + "@parcel/error-overlay" "2.13.4-canary.3401+b50bc79cb" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" + react-refresh ">=0.9 <=0.16" -"@parcel/transformer-svg@2.13.3-dev.3418+9f297b15c": - version "2.13.3-dev.3418" - resolved "https://registry.yarnpkg.com/@parcel/transformer-svg/-/transformer-svg-2.13.3-dev.3418.tgz#17556f8fbb5a972dc01fd1c43aa26be1ca539460" - integrity sha512-AkrAKTdEU0L2Hoz7CPjTg81ChroffpoX71RZffmBAcFi0vkpBMlFzvITjrbV1dC+OtQ5t/+gnmZnowSpZBgU+A== +"@parcel/transformer-svg@2.13.4-canary.3401+b50bc79cb": + version "2.13.4-canary.3401" + resolved "https://registry.yarnpkg.com/@parcel/transformer-svg/-/transformer-svg-2.13.4-canary.3401.tgz#22d19f3666d8074a9f229647a89c41ced2150cfa" + integrity sha512-R+ki+rqxrzKg26fTZJjn36Sm08AdANs0k/lY0YXql+T2Z5VU7pGZk2iKhJGZ7zDfP10PcDopjuqDPhn7Zhl8vg== dependencies: - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/plugin" "2.0.0-dev.1795+9f297b15c" - "@parcel/rust" "2.13.3-dev.3418+9f297b15c" + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/plugin" "2.0.0-canary.1778+b50bc79cb" + "@parcel/rust" "2.13.4-canary.3401+b50bc79cb" nullthrows "^1.1.1" posthtml "^0.16.5" posthtml-parser "^0.12.1" posthtml-render "^3.0.0" semver "^7.5.2" -"@parcel/types-internal@2.13.3-dev.3418+9f297b15c": - version "2.13.3-dev.3418" - resolved "https://registry.yarnpkg.com/@parcel/types-internal/-/types-internal-2.13.3-dev.3418.tgz#76644a7b21bd78e654134be6679afd6a727bb4db" - integrity sha512-B0L3jAMe6tAxB22p2UZwJQGl1FRte9ikLJw4fcPJbszcv5MRLnszISNcSgJQN99hM5ISu+bRMioMksZ2FrDIYA== +"@parcel/types-internal@2.13.4-canary.3401+b50bc79cb": + version "2.13.4-canary.3401" + resolved "https://registry.yarnpkg.com/@parcel/types-internal/-/types-internal-2.13.4-canary.3401.tgz#44c26df4f75647447e320e9fa5882df00b01fd18" + integrity sha512-hkEaw3Z1kWvamzRi3h0Ps6aUYqj8v00CaZrrjZhgpXW/UfaLJbjFJj9DghQsWJQTNGk5eWRb947Fjsqsc0C8ZQ== dependencies: - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/feature-flags" "2.13.3-dev.3418+9f297b15c" + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/feature-flags" "2.13.4-canary.3401+b50bc79cb" "@parcel/source-map" "^2.1.1" utility-types "^3.10.0" -"@parcel/types@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/types/-/types-2.0.0-dev.1795.tgz#1f1503870d97245d1dc82263306cbd25d4313a5b" - integrity sha512-VojyhwPI2L54XMJ45sHFnMm8T75zhQKjhB6tlARWA02sDveCfvfBONfJY/r+O1poeel42Gci+bLanri0s3GgTg== +"@parcel/types@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/types/-/types-2.0.0-canary.1778.tgz#dba6015d85df3a69b925e5226809122828fa9792" + integrity sha512-nY3TjmAaq9/xXGElTy9JCm2sNleXSAHuvtjesYaM2cFofsv1q2MdIYTEIRHLmnRBjBxwuFg8LHLC7t1HaF5DuQ== dependencies: - "@parcel/types-internal" "2.13.3-dev.3418+9f297b15c" - "@parcel/workers" "2.0.0-dev.1795+9f297b15c" + "@parcel/types-internal" "2.13.4-canary.3401+b50bc79cb" + "@parcel/workers" "2.0.0-canary.1778+b50bc79cb" -"@parcel/utils@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/utils/-/utils-2.0.0-dev.1795.tgz#12aca94ddd344170b5b1081c012bb524f37ebfda" - integrity sha512-JjleEfv9NJD02AOPEOjwMVr5h0SZdtTocQuQBS4S+SC6Ql9ZdiUArE5jXVbUCYmyQnfjG7FYfajzrFnfnA9Uqg== +"@parcel/utils@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/utils/-/utils-2.0.0-canary.1778.tgz#9576774350acc413ec8170acafb283ffcf517af4" + integrity sha512-YphS0Gf32ZXKEtEUNVjNKMOA3eZFGLAbREr+smhS0TuVCwEfql4Im0lUKf6jVm/H9jcbx5bEG/sevNI45nzC6Q== dependencies: - "@parcel/codeframe" "2.0.0-dev.1795+9f297b15c" - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/logger" "2.0.0-dev.1795+9f297b15c" - "@parcel/markdown-ansi" "2.0.0-dev.1795+9f297b15c" - "@parcel/rust" "2.13.3-dev.3418+9f297b15c" + "@parcel/codeframe" "2.0.0-canary.1778+b50bc79cb" + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/logger" "2.0.0-canary.1778+b50bc79cb" + "@parcel/markdown-ansi" "2.0.0-canary.1778+b50bc79cb" + "@parcel/rust" "2.13.4-canary.3401+b50bc79cb" "@parcel/source-map" "^2.1.1" chalk "^4.1.2" nullthrows "^1.1.1" -"@parcel/watcher-android-arm64@2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz#e32d3dda6647791ee930556aee206fcd5ea0fb7a" - integrity sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ== - -"@parcel/watcher-darwin-arm64@2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz#0d9e680b7e9ec1c8f54944f1b945aa8755afb12f" - integrity sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw== - -"@parcel/watcher-darwin-x64@2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz#f9f1d5ce9d5878d344f14ef1856b7a830c59d1bb" - integrity sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA== - -"@parcel/watcher-freebsd-x64@2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz#2b77f0c82d19e84ff4c21de6da7f7d096b1a7e82" - integrity sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw== - -"@parcel/watcher-linux-arm-glibc@2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz#92ed322c56dbafa3d2545dcf2803334aee131e42" - integrity sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA== - -"@parcel/watcher-linux-arm-musl@2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz#cd48e9bfde0cdbbd2ecd9accfc52967e22f849a4" - integrity sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA== - -"@parcel/watcher-linux-arm64-glibc@2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz#7b81f6d5a442bb89fbabaf6c13573e94a46feb03" - integrity sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA== - -"@parcel/watcher-linux-arm64-musl@2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz#dcb8ff01077cdf59a18d9e0a4dff7a0cfe5fd732" - integrity sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q== - -"@parcel/watcher-linux-x64-glibc@2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz#2e254600fda4e32d83942384d1106e1eed84494d" - integrity sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw== - -"@parcel/watcher-linux-x64-musl@2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz#01fcea60fedbb3225af808d3f0a7b11229792eef" - integrity sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA== - -"@parcel/watcher-win32-arm64@2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz#87cdb16e0783e770197e52fb1dc027bb0c847154" - integrity sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig== - -"@parcel/watcher-win32-ia32@2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz#778c39b56da33e045ba21c678c31a9f9d7c6b220" - integrity sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA== - -"@parcel/watcher-win32-x64@2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz#33873876d0bbc588aacce38e90d1d7480ce81cb7" - integrity sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw== +"@parcel/watcher-android-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz#507f836d7e2042f798c7d07ad19c3546f9848ac1" + integrity sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA== + +"@parcel/watcher-darwin-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz#3d26dce38de6590ef79c47ec2c55793c06ad4f67" + integrity sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw== + +"@parcel/watcher-darwin-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz#99f3af3869069ccf774e4ddfccf7e64fd2311ef8" + integrity sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg== + +"@parcel/watcher-freebsd-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz#14d6857741a9f51dfe51d5b08b7c8afdbc73ad9b" + integrity sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ== + +"@parcel/watcher-linux-arm-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz#43c3246d6892381db473bb4f663229ad20b609a1" + integrity sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA== + +"@parcel/watcher-linux-arm-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz#663750f7090bb6278d2210de643eb8a3f780d08e" + integrity sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q== + +"@parcel/watcher-linux-arm64-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz#ba60e1f56977f7e47cd7e31ad65d15fdcbd07e30" + integrity sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w== + +"@parcel/watcher-linux-arm64-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz#f7fbcdff2f04c526f96eac01f97419a6a99855d2" + integrity sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg== + +"@parcel/watcher-linux-x64-glibc@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz#4d2ea0f633eb1917d83d483392ce6181b6a92e4e" + integrity sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A== + +"@parcel/watcher-linux-x64-musl@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz#277b346b05db54f55657301dd77bdf99d63606ee" + integrity sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg== + +"@parcel/watcher-win32-arm64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz#7e9e02a26784d47503de1d10e8eab6cceb524243" + integrity sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw== + +"@parcel/watcher-win32-ia32@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz#2d0f94fa59a873cdc584bf7f6b1dc628ddf976e6" + integrity sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ== + +"@parcel/watcher-win32-x64@2.5.1": + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz#ae52693259664ba6f2228fa61d7ee44b64ea0947" + integrity sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA== "@parcel/watcher@^2.0.7": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.5.0.tgz#5c88818b12b8de4307a9d3e6dc3e28eba0dfbd10" - integrity sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ== + version "2.5.1" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.5.1.tgz#342507a9cfaaf172479a882309def1e991fb1200" + integrity sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg== dependencies: detect-libc "^1.0.3" is-glob "^4.0.3" micromatch "^4.0.5" node-addon-api "^7.0.0" optionalDependencies: - "@parcel/watcher-android-arm64" "2.5.0" - "@parcel/watcher-darwin-arm64" "2.5.0" - "@parcel/watcher-darwin-x64" "2.5.0" - "@parcel/watcher-freebsd-x64" "2.5.0" - "@parcel/watcher-linux-arm-glibc" "2.5.0" - "@parcel/watcher-linux-arm-musl" "2.5.0" - "@parcel/watcher-linux-arm64-glibc" "2.5.0" - "@parcel/watcher-linux-arm64-musl" "2.5.0" - "@parcel/watcher-linux-x64-glibc" "2.5.0" - "@parcel/watcher-linux-x64-musl" "2.5.0" - "@parcel/watcher-win32-arm64" "2.5.0" - "@parcel/watcher-win32-ia32" "2.5.0" - "@parcel/watcher-win32-x64" "2.5.0" - -"@parcel/workers@2.0.0-dev.1795+9f297b15c": - version "2.0.0-dev.1795" - resolved "https://registry.yarnpkg.com/@parcel/workers/-/workers-2.0.0-dev.1795.tgz#5d7840b90cc80a1f01619ed676a744f6e3524af9" - integrity sha512-MiW001+79Qox78Xy7bNBGKWB2PdurL5qdrKxLdKnIU41mZ5ki5tg4cxsgf9+H5KTp4Y8MnLqOh0yjD/8ujdB8g== - dependencies: - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/logger" "2.0.0-dev.1795+9f297b15c" - "@parcel/profiler" "2.13.3-dev.3418+9f297b15c" - "@parcel/types-internal" "2.13.3-dev.3418+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" + "@parcel/watcher-android-arm64" "2.5.1" + "@parcel/watcher-darwin-arm64" "2.5.1" + "@parcel/watcher-darwin-x64" "2.5.1" + "@parcel/watcher-freebsd-x64" "2.5.1" + "@parcel/watcher-linux-arm-glibc" "2.5.1" + "@parcel/watcher-linux-arm-musl" "2.5.1" + "@parcel/watcher-linux-arm64-glibc" "2.5.1" + "@parcel/watcher-linux-arm64-musl" "2.5.1" + "@parcel/watcher-linux-x64-glibc" "2.5.1" + "@parcel/watcher-linux-x64-musl" "2.5.1" + "@parcel/watcher-win32-arm64" "2.5.1" + "@parcel/watcher-win32-ia32" "2.5.1" + "@parcel/watcher-win32-x64" "2.5.1" + +"@parcel/workers@2.0.0-canary.1778+b50bc79cb": + version "2.0.0-canary.1778" + resolved "https://registry.yarnpkg.com/@parcel/workers/-/workers-2.0.0-canary.1778.tgz#d305d65146b31028fd29390b6a1c2fcfdeeef122" + integrity sha512-AIu7JRGzyM8V+OsV/7qk/zcwFktMhvyhvEX0vzR6KtO77/pVZwmUS7N+TuCZu/Oe6QEz2VaODK7Y3eeR1PHTGw== + dependencies: + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/logger" "2.0.0-canary.1778+b50bc79cb" + "@parcel/profiler" "2.13.4-canary.3401+b50bc79cb" + "@parcel/types-internal" "2.13.4-canary.3401+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" nullthrows "^1.1.1" -"@swc/core-darwin-arm64@1.10.1": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.10.1.tgz#faaaab19b4a039ae67ef661c0144a6f20fe8a78e" - integrity sha512-NyELPp8EsVZtxH/mEqvzSyWpfPJ1lugpTQcSlMduZLj1EASLO4sC8wt8hmL1aizRlsbjCX+r0PyL+l0xQ64/6Q== - -"@swc/core-darwin-x64@1.10.1": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.10.1.tgz#754600f453abd24471c202d48836f1161d798f49" - integrity sha512-L4BNt1fdQ5ZZhAk5qoDfUnXRabDOXKnXBxMDJ+PWLSxOGBbWE6aJTnu4zbGjJvtot0KM46m2LPAPY8ttknqaZA== - -"@swc/core-linux-arm-gnueabihf@1.10.1": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.10.1.tgz#b0f43c482d0d1819b382a4eb4a0733ce2e386257" - integrity sha512-Y1u9OqCHgvVp2tYQAJ7hcU9qO5brDMIrA5R31rwWQIAKDkJKtv3IlTHF0hrbWk1wPR0ZdngkQSJZple7G+Grvw== - -"@swc/core-linux-arm64-gnu@1.10.1": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.10.1.tgz#e02a9e22c25ba85ef00335742e549e06284cf33a" - integrity sha512-tNQHO/UKdtnqjc7o04iRXng1wTUXPgVd8Y6LI4qIbHVoVPwksZydISjMcilKNLKIwOoUQAkxyJ16SlOAeADzhQ== - -"@swc/core-linux-arm64-musl@1.10.1": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.10.1.tgz#3a0530af8f8bd3717f2f1bd8a2f5183fc58d4cf1" - integrity sha512-x0L2Pd9weQ6n8dI1z1Isq00VHFvpBClwQJvrt3NHzmR+1wCT/gcYl1tp9P5xHh3ldM8Cn4UjWCw+7PaUgg8FcQ== - -"@swc/core-linux-x64-gnu@1.10.1": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.10.1.tgz#5eb4d282b047a22896ab1d4627403be4c3e4fa6a" - integrity sha512-yyYEwQcObV3AUsC79rSzN9z6kiWxKAVJ6Ntwq2N9YoZqSPYph+4/Am5fM1xEQYf/kb99csj0FgOelomJSobxQA== - -"@swc/core-linux-x64-musl@1.10.1": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.10.1.tgz#890f2eda3e67ccc6817cdd04eff91e6ad9e761c4" - integrity sha512-tcaS43Ydd7Fk7sW5ROpaf2Kq1zR+sI5K0RM+0qYLYYurvsJruj3GhBCaiN3gkzd8m/8wkqNqtVklWaQYSDsyqA== - -"@swc/core-win32-arm64-msvc@1.10.1": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.10.1.tgz#4ea7b2a2fab47f801d31ea8b001a141efaa5e6bf" - integrity sha512-D3Qo1voA7AkbOzQ2UGuKNHfYGKL6eejN8VWOoQYtGHHQi1p5KK/Q7V1ku55oxXBsj79Ny5FRMqiRJpVGad7bjQ== - -"@swc/core-win32-ia32-msvc@1.10.1": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.10.1.tgz#729102669ccdb72e69884cce58e3686ac63d6f36" - integrity sha512-WalYdFoU3454Og+sDKHM1MrjvxUGwA2oralknXkXL8S0I/8RkWZOB++p3pLaGbTvOO++T+6znFbQdR8KRaa7DA== - -"@swc/core-win32-x64-msvc@1.10.1": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.10.1.tgz#7d665a7c69642861aed850ecb0cdf5d87197edda" - integrity sha512-JWobfQDbTnoqaIwPKQ3DVSywihVXlQMbDuwik/dDWlj33A8oEHcjPOGs4OqcA3RHv24i+lfCQpM3Mn4FAMfacA== - -"@swc/core@^1.7.26": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.10.1.tgz#16b3b8284bafb0ecabb253925796883971e5a761" - integrity sha512-rQ4dS6GAdmtzKiCRt3LFVxl37FaY1cgL9kSUTnhQ2xc3fmHOd7jdJK/V4pSZMG1ruGTd0bsi34O2R0Olg9Zo/w== +"@swc/core-darwin-arm64@1.10.12": + version "1.10.12" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.10.12.tgz#ed317cd6aac5a66f529c0cbd8385761e2eccecc6" + integrity sha512-pOANQegUTAriW7jq3SSMZGM5l89yLVMs48R0F2UG6UZsH04SiViCnDctOGlA/Sa++25C+rL9MGMYM1jDLylBbg== + +"@swc/core-darwin-x64@1.10.12": + version "1.10.12" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.10.12.tgz#59e249f40852231232b80f6a4caea2a223e9682e" + integrity sha512-m4kbpIDDsN1FrwfNQMU+FTrss356xsXvatLbearwR+V0lqOkjLBP0VmRvQfHEg+uy13VPyrT9gj4HLoztlci7w== + +"@swc/core-linux-arm-gnueabihf@1.10.12": + version "1.10.12" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.10.12.tgz#5c2066a6ad8b768adc473e300995f909ce96cbbd" + integrity sha512-OY9LcupgqEu8zVK+rJPes6LDJJwPDmwaShU96beTaxX2K6VrXbpwm5WbPS/8FfQTsmpnuA7dCcMPUKhNgmzTrQ== + +"@swc/core-linux-arm64-gnu@1.10.12": + version "1.10.12" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.10.12.tgz#7a8e6212617365c41a7b6e015cd2749d222c1ebe" + integrity sha512-nJD587rO0N4y4VZszz3xzVr7JIiCzSMhEMWnPjuh+xmPxDBz0Qccpr8xCr1cSxpl1uY7ERkqAGlKr6CwoV5kVg== + +"@swc/core-linux-arm64-musl@1.10.12": + version "1.10.12" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.10.12.tgz#c939d554ecb32df65b4a784fc586f30c8ae7be0a" + integrity sha512-oqhSmV+XauSf0C//MoQnVErNUB/5OzmSiUzuazyLsD5pwqKNN+leC3JtRQ/QVzaCpr65jv9bKexT9+I2Tt3xDw== + +"@swc/core-linux-x64-gnu@1.10.12": + version "1.10.12" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.10.12.tgz#745bc25de364bbde3b6240ed84d063379dc52c6c" + integrity sha512-XldSIHyjD7m1Gh+/8rxV3Ok711ENLI420CU2EGEqSe3VSGZ7pHJvJn9ZFbYpWhsLxPqBYMFjp3Qw+J6OXCPXCA== + +"@swc/core-linux-x64-musl@1.10.12": + version "1.10.12" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.10.12.tgz#188855ee612a482eb8c298b2237e0b36962182a7" + integrity sha512-wvPXzJxzPgTqhyp1UskOx1hRTtdWxlyFD1cGWOxgLsMik0V9xKRgqKnMPv16Nk7L9xl6quQ6DuUHj9ID7L3oVw== + +"@swc/core-win32-arm64-msvc@1.10.12": + version "1.10.12" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.10.12.tgz#3f8271b8a42ef29b53574705a6cd0427345cc616" + integrity sha512-TUYzWuu1O7uyIcRfxdm6Wh1u+gNnrW5M1DUgDOGZLsyQzgc2Zjwfh2llLhuAIilvCVg5QiGbJlpibRYJ/8QGsg== + +"@swc/core-win32-ia32-msvc@1.10.12": + version "1.10.12" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.10.12.tgz#b7f59376870039f6a7ecc5331b4287f0fa82b182" + integrity sha512-4Qrw+0Xt+Fe2rz4OJ/dEPMeUf/rtuFWWAj/e0vL7J5laUHirzxawLRE5DCJLQTarOiYR6mWnmadt9o3EKzV6Xg== + +"@swc/core-win32-x64-msvc@1.10.12": + version "1.10.12" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.10.12.tgz#e053b1efc2bf24b0da1a1fa6a5ea6e1bda36df76" + integrity sha512-YiloZXLW7rUxJpALwHXaGjVaAEn+ChoblG7/3esque+Y7QCyheoBUJp2DVM1EeVA43jBfZ8tvYF0liWd9Tpz1A== + +"@swc/core@^1.10.7": + version "1.10.12" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.10.12.tgz#6d002050814888ec72a8d439ca7194a4631ce199" + integrity sha512-+iUL0PYpPm6N9AdV1wvafakvCqFegQus1aoEDxgFsv3/uNVNIyRaupf/v/Zkp5hbep2EzhtoJR0aiJIzDbXWHg== dependencies: "@swc/counter" "^0.1.3" "@swc/types" "^0.1.17" optionalDependencies: - "@swc/core-darwin-arm64" "1.10.1" - "@swc/core-darwin-x64" "1.10.1" - "@swc/core-linux-arm-gnueabihf" "1.10.1" - "@swc/core-linux-arm64-gnu" "1.10.1" - "@swc/core-linux-arm64-musl" "1.10.1" - "@swc/core-linux-x64-gnu" "1.10.1" - "@swc/core-linux-x64-musl" "1.10.1" - "@swc/core-win32-arm64-msvc" "1.10.1" - "@swc/core-win32-ia32-msvc" "1.10.1" - "@swc/core-win32-x64-msvc" "1.10.1" + "@swc/core-darwin-arm64" "1.10.12" + "@swc/core-darwin-x64" "1.10.12" + "@swc/core-linux-arm-gnueabihf" "1.10.12" + "@swc/core-linux-arm64-gnu" "1.10.12" + "@swc/core-linux-arm64-musl" "1.10.12" + "@swc/core-linux-x64-gnu" "1.10.12" + "@swc/core-linux-x64-musl" "1.10.12" + "@swc/core-win32-arm64-msvc" "1.10.12" + "@swc/core-win32-ia32-msvc" "1.10.12" + "@swc/core-win32-x64-msvc" "1.10.12" "@swc/counter@^0.1.3": version "0.1.3" @@ -988,6 +998,11 @@ accepts@~1.3.8: mime-types "~2.1.34" negotiator "0.6.3" +ansi-html-community@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz#69fbc4d6ccbe383f9736934ae34c3f8290f1bf41" + integrity sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw== + ansi-regex@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" @@ -1873,23 +1888,23 @@ ordered-binary@^1.4.1: resolved "https://registry.yarnpkg.com/ordered-binary/-/ordered-binary-1.5.3.tgz#8bee2aa7a82c3439caeb1e80c272fd4cf51170fb" integrity sha512-oGFr3T+pYdTGJ+YFEILMpS3es+GiIbs9h/XQrclBXUtd44ey7XwfsMzM31f64I1SQOawDoDr/D823kNCADI8TA== -parcel@2.0.0-dev.1793: - version "2.0.0-dev.1793" - resolved "https://registry.yarnpkg.com/parcel/-/parcel-2.0.0-dev.1793.tgz#f9705f9dc730f9f06b8447eeb697930d52819fce" - integrity sha512-+OyZB74SZfkVxZjNb4euYkBPXkx5st6/Ic0mvmGoKcNOLiHyb/1BW3TuoWRcqNsZs9vFMf2i24rpOZKITBeDOA== - dependencies: - "@parcel/config-default" "2.0.0-dev.1795+9f297b15c" - "@parcel/core" "2.0.0-dev.1793+9f297b15c" - "@parcel/diagnostic" "2.0.0-dev.1795+9f297b15c" - "@parcel/events" "2.0.0-dev.1795+9f297b15c" - "@parcel/feature-flags" "2.13.3-dev.3418+9f297b15c" - "@parcel/fs" "2.0.0-dev.1795+9f297b15c" - "@parcel/logger" "2.0.0-dev.1795+9f297b15c" - "@parcel/package-manager" "2.0.0-dev.1795+9f297b15c" - "@parcel/reporter-cli" "2.0.0-dev.1795+9f297b15c" - "@parcel/reporter-dev-server" "2.0.0-dev.1795+9f297b15c" - "@parcel/reporter-tracer" "2.13.3-dev.3418+9f297b15c" - "@parcel/utils" "2.0.0-dev.1795+9f297b15c" +parcel@canary: + version "2.0.0-canary.1776" + resolved "https://registry.yarnpkg.com/parcel/-/parcel-2.0.0-canary.1776.tgz#c34446e8c5456211071df73e31954eaedf23b334" + integrity sha512-vGsAXeGT1+Ks1xRW0dHMBsg0LvmXNr1YN5GC7FSanCugymDT8qldQ5G7vHohNJbZuVmAA173Q00yrdFBsVZpmQ== + dependencies: + "@parcel/config-default" "2.0.0-canary.1778+b50bc79cb" + "@parcel/core" "2.0.0-canary.1776+b50bc79cb" + "@parcel/diagnostic" "2.0.0-canary.1778+b50bc79cb" + "@parcel/events" "2.0.0-canary.1778+b50bc79cb" + "@parcel/feature-flags" "2.13.4-canary.3401+b50bc79cb" + "@parcel/fs" "2.0.0-canary.1778+b50bc79cb" + "@parcel/logger" "2.0.0-canary.1778+b50bc79cb" + "@parcel/package-manager" "2.0.0-canary.1778+b50bc79cb" + "@parcel/reporter-cli" "2.0.0-canary.1778+b50bc79cb" + "@parcel/reporter-dev-server" "2.0.0-canary.1778+b50bc79cb" + "@parcel/reporter-tracer" "2.13.4-canary.3401+b50bc79cb" + "@parcel/utils" "2.0.0-canary.1778+b50bc79cb" chalk "^4.1.2" commander "^12.1.0" get-port "^4.2.0" @@ -2000,6 +2015,13 @@ raw-body@2.5.2: iconv-lite "0.4.24" unpipe "1.0.0" +"react-dom@^18 || ^19": + version "19.0.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0.tgz#43446f1f01c65a4cd7f7588083e686a6726cfb57" + integrity sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ== + dependencies: + scheduler "^0.25.0" + react-dom@experimental: version "0.0.0-experimental-79ddf5b5-20241210" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-0.0.0-experimental-79ddf5b5-20241210.tgz#c140f191e7a88be5d4c38d34f7cf1dbf38a9a71d" @@ -2007,21 +2029,21 @@ react-dom@experimental: dependencies: scheduler "0.0.0-experimental-79ddf5b5-20241210" -react-error-overlay@6.0.9: - version "6.0.9" - resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a" - integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew== - -"react-refresh@>=0.9 <=0.14": - version "0.14.2" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.14.2.tgz#3833da01ce32da470f1f936b9d477da5c7028bf9" - integrity sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA== +"react-refresh@>=0.9 <=0.16": + version "0.16.0" + resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.16.0.tgz#e7d45625f05c9709466d09348a25d22f79b2ad23" + integrity sha512-FPvF2XxTSikpJxcr+bHut2H4gJ17+18Uy20D5/F+SKzFap62R3cM5wH6b8WN3LyGSYeQilLEcJcR1fjBSI2S1A== react-server-dom-parcel@experimental: version "0.0.1" resolved "https://registry.yarnpkg.com/react-server-dom-parcel/-/react-server-dom-parcel-0.0.1.tgz#2653c2b39a857fbd17770d27d6f08bd139803f09" integrity sha512-f93wv8gycm4ltcQRqpSlgYyT6cJxmjJdRmXw3deQoXowDlP44W4RRzwHQ70u1xseCpHFIORmuHVXk7+Fk8RFtQ== +"react@^18 || ^19": + version "19.0.0" + resolved "https://registry.yarnpkg.com/react/-/react-19.0.0.tgz#6e1969251b9f108870aa4bff37a0ce9ddfaaabdd" + integrity sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ== + react@experimental: version "0.0.0-experimental-79ddf5b5-20241210" resolved "https://registry.yarnpkg.com/react/-/react-0.0.0-experimental-79ddf5b5-20241210.tgz#d1c620a36dfa02337f69c4eaeee230fec6742b72" @@ -2069,6 +2091,11 @@ scheduler@0.0.0-experimental-79ddf5b5-20241210: resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.0.0-experimental-79ddf5b5-20241210.tgz#2b6c17201831aa8f8e35e65ad95c7cf5362b5454" integrity sha512-Rg1aDzPQWVLENsVBlZbIS1buG55XTCEN7tOz0qk+pCnhswwa7h0VzGFVmX8CLuWnTYQYWw9ldFrjKLDM1Q1k3g== +scheduler@^0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0.tgz#336cd9768e8cceebf52d3c80e3dcf5de23e7e015" + integrity sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA== + semver@^7.5.2: version "7.6.3" resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" @@ -2302,11 +2329,6 @@ wrap-ansi@^7.0.0: string-width "^4.1.0" strip-ansi "^6.0.0" -ws@^8.8.1: - version "8.18.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" - integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== - y18n@^5.0.5: version "5.0.8" resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" diff --git a/packages/react-dom-bindings/src/client/ReactDOMContainer.js b/packages/react-dom-bindings/src/client/ReactDOMContainer.js index 0af0f13a790a8..df9bcfb443803 100644 --- a/packages/react-dom-bindings/src/client/ReactDOMContainer.js +++ b/packages/react-dom-bindings/src/client/ReactDOMContainer.js @@ -27,16 +27,3 @@ export function isValidContainer(node: any): boolean { (node: any).nodeValue === ' react-mount-point-unstable ')) ); } - -// TODO: Remove this function which also includes comment nodes. -// We only use it in places that are currently more relaxed. -export function isValidContainerLegacy(node: any): boolean { - return !!( - node && - (node.nodeType === ELEMENT_NODE || - node.nodeType === DOCUMENT_NODE || - node.nodeType === DOCUMENT_FRAGMENT_NODE || - (node.nodeType === COMMENT_NODE && - (node: any).nodeValue === ' react-mount-point-unstable ')) - ); -} diff --git a/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js b/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js index 9e3574885fa6e..90c3855379fdc 100644 --- a/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js +++ b/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js @@ -94,6 +94,7 @@ import { enableTrustedTypesIntegration, disableLegacyMode, enableMoveBefore, + disableCommentsAsDOMContainers, } from 'shared/ReactFeatureFlags'; import { HostComponent, @@ -207,6 +208,9 @@ const SUSPENSE_START_DATA = '$'; const SUSPENSE_END_DATA = '/$'; const SUSPENSE_PENDING_START_DATA = '$?'; const SUSPENSE_FALLBACK_START_DATA = '$!'; +const PREAMBLE_CONTRIBUTION_HTML = 0b001; +const PREAMBLE_CONTRIBUTION_BODY = 0b010; +const PREAMBLE_CONTRIBUTION_HEAD = 0b100; const FORM_STATE_IS_MATCHING = 'F!'; const FORM_STATE_IS_NOT_MATCHING = 'F'; @@ -255,7 +259,7 @@ export function getRootHostContext( } default: { const container: any = - nodeType === COMMENT_NODE + !disableCommentsAsDOMContainers && nodeType === COMMENT_NODE ? rootContainerInstance.parentNode : rootContainerInstance; type = container.tagName; @@ -799,29 +803,25 @@ export function appendChildToContainer( container: Container, child: Instance | TextInstance, ): void { - let parentNode: Document | Element; - switch (container.nodeType) { - case COMMENT_NODE: { - parentNode = (container.parentNode: any); - if (supportsMoveBefore) { - // $FlowFixMe[prop-missing]: We've checked this with supportsMoveBefore. - parentNode.moveBefore(child, container); - } else { - parentNode.insertBefore(child, container); - } - return; - } - case DOCUMENT_NODE: { - parentNode = (container: any).body; - break; - } - default: { - if (container.nodeName === 'HTML') { - parentNode = (container.ownerDocument.body: any); - } else { - parentNode = (container: any); - } + let parentNode: DocumentFragment | Element; + if (container.nodeType === DOCUMENT_NODE) { + parentNode = (container: any).body; + } else if ( + !disableCommentsAsDOMContainers && + container.nodeType === COMMENT_NODE + ) { + parentNode = (container.parentNode: any); + if (supportsMoveBefore) { + // $FlowFixMe[prop-missing]: We've checked this with supportsMoveBefore. + parentNode.moveBefore(child, container); + } else { + parentNode.insertBefore(child, container); } + return; + } else if (container.nodeName === 'HTML') { + parentNode = (container.ownerDocument.body: any); + } else { + parentNode = (container: any); } if (supportsMoveBefore) { // $FlowFixMe[prop-missing]: We've checked this with supportsMoveBefore. @@ -866,24 +866,18 @@ export function insertInContainerBefore( child: Instance | TextInstance, beforeChild: Instance | TextInstance | SuspenseInstance, ): void { - let parentNode: Document | Element; - switch (container.nodeType) { - case COMMENT_NODE: { - parentNode = (container.parentNode: any); - break; - } - case DOCUMENT_NODE: { - const ownerDocument: Document = (container: any); - parentNode = (ownerDocument.body: any); - break; - } - default: { - if (container.nodeName === 'HTML') { - parentNode = (container.ownerDocument.body: any); - } else { - parentNode = (container: any); - } - } + let parentNode: DocumentFragment | Element; + if (container.nodeType === DOCUMENT_NODE) { + parentNode = (container: any).body; + } else if ( + !disableCommentsAsDOMContainers && + container.nodeType === COMMENT_NODE + ) { + parentNode = (container.parentNode: any); + } else if (container.nodeName === 'HTML') { + parentNode = (container.ownerDocument.body: any); + } else { + parentNode = (container: any); } if (supportsMoveBefore) { // $FlowFixMe[prop-missing]: We've checked this with supportsMoveBefore. @@ -940,20 +934,18 @@ export function removeChildFromContainer( container: Container, child: Instance | TextInstance | SuspenseInstance, ): void { - let parentNode: Document | Element; - switch (container.nodeType) { - case COMMENT_NODE: - parentNode = (container.parentNode: any); - break; - case DOCUMENT_NODE: - parentNode = (container: any).body; - break; - default: - if (container.nodeName === 'HTML') { - parentNode = (container.ownerDocument.body: any); - } else { - parentNode = (container: any); - } + let parentNode: DocumentFragment | Element; + if (container.nodeType === DOCUMENT_NODE) { + parentNode = (container: any).body; + } else if ( + !disableCommentsAsDOMContainers && + container.nodeType === COMMENT_NODE + ) { + parentNode = (container.parentNode: any); + } else if (container.nodeName === 'HTML') { + parentNode = (container.ownerDocument.body: any); + } else { + parentNode = (container: any); } parentNode.removeChild(child); } @@ -963,6 +955,7 @@ export function clearSuspenseBoundary( suspenseInstance: SuspenseInstance, ): void { let node: Node = suspenseInstance; + let possiblePreambleContribution: number = 0; // Delete all nodes within this suspense boundary. // There might be nested nodes so we need to keep track of how // deep we are and only break out when we're back on top. @@ -973,6 +966,36 @@ export function clearSuspenseBoundary( if (nextNode && nextNode.nodeType === COMMENT_NODE) { const data = ((nextNode: any).data: string); if (data === SUSPENSE_END_DATA) { + if ( + // represents 3 bits where at least one bit is set (1-7) + possiblePreambleContribution > 0 && + possiblePreambleContribution < 8 + ) { + const code = possiblePreambleContribution; + // It's not normally possible to insert a comment immediately preceding Suspense boundary + // closing comment marker so we can infer that if the comment preceding starts with "1" through "7" + // then it is in fact a preamble contribution marker comment. We do this value test to avoid the case + // where the Suspense boundary is empty and the preceding comment marker is the Suspense boundary + // opening marker or the closing marker of an inner boundary. In those cases the first character won't + // have the requisite value to be interpreted as a Preamble contribution + const ownerDocument = parentInstance.ownerDocument; + if (code & PREAMBLE_CONTRIBUTION_HTML) { + const documentElement: Element = + (ownerDocument.documentElement: any); + releaseSingletonInstance(documentElement); + } + if (code & PREAMBLE_CONTRIBUTION_BODY) { + const body: Element = (ownerDocument.body: any); + releaseSingletonInstance(body); + } + if (code & PREAMBLE_CONTRIBUTION_HEAD) { + const head: Element = (ownerDocument.head: any); + releaseSingletonInstance(head); + // We need to clear the head because this is the only singleton that can have children that + // were part of this boundary but are not inside this boundary. + clearHead(head); + } + } if (depth === 0) { parentInstance.removeChild(nextNode); // Retry if any event replaying was blocked on this. @@ -987,7 +1010,11 @@ export function clearSuspenseBoundary( data === SUSPENSE_FALLBACK_START_DATA ) { depth++; + } else { + possiblePreambleContribution = data.charCodeAt(0) - 48; } + } else { + possiblePreambleContribution = 0; } // $FlowFixMe[incompatible-type] we bail out when we get a null node = nextNode; @@ -1001,18 +1028,20 @@ export function clearSuspenseBoundaryFromContainer( container: Container, suspenseInstance: SuspenseInstance, ): void { - if (container.nodeType === COMMENT_NODE) { - clearSuspenseBoundary((container.parentNode: any), suspenseInstance); - } else if (container.nodeType === DOCUMENT_NODE) { - clearSuspenseBoundary((container: any).body, suspenseInstance); + let parentNode: DocumentFragment | Element; + if (container.nodeType === DOCUMENT_NODE) { + parentNode = (container: any).body; + } else if ( + !disableCommentsAsDOMContainers && + container.nodeType === COMMENT_NODE + ) { + parentNode = (container.parentNode: any); } else if (container.nodeName === 'HTML') { - clearSuspenseBoundary( - (container.ownerDocument.body: any), - suspenseInstance, - ); + parentNode = (container.ownerDocument.body: any); } else { - clearSuspenseBoundary((container: any), suspenseInstance); + parentNode = (container: any); } + clearSuspenseBoundary(parentNode, suspenseInstance); // Retry if any event replaying was blocked on this. retryIfBlockedOn(container); } @@ -1501,7 +1530,7 @@ function clearContainerSparingly(container: Node) { case 'STYLE': { continue; } - // Stylesheet tags are retained because tehy may likely come from 3rd party scripts and extensions + // Stylesheet tags are retained because they may likely come from 3rd party scripts and extensions case 'LINK': { if (((node: any): HTMLLinkElement).rel.toLowerCase() === 'stylesheet') { continue; @@ -1513,6 +1542,27 @@ function clearContainerSparingly(container: Node) { return; } +function clearHead(head: Element): void { + let node = head.firstChild; + while (node) { + const nextNode = node.nextSibling; + const nodeName = node.nodeName; + if ( + isMarkedHoistable(node) || + nodeName === 'SCRIPT' || + nodeName === 'STYLE' || + (nodeName === 'LINK' && + ((node: any): HTMLLinkElement).rel.toLowerCase() === 'stylesheet') + ) { + // retain these nodes + } else { + head.removeChild(node); + } + node = nextNode; + } + return; +} + // Making this so we can eventually move all of the instance caching to the commit phase. // Currently this is only used to associate fiber and props to instances for hydrating // HostSingletons. The reason we need it here is we only want to make this binding on commit @@ -1874,7 +1924,20 @@ export function getFirstHydratableChild( export function getFirstHydratableChildWithinContainer( parentContainer: Container, ): null | HydratableInstance { - return getNextHydratable(parentContainer.firstChild); + let parentElement: Element; + switch (parentContainer.nodeType) { + case DOCUMENT_NODE: + parentElement = (parentContainer: any).body; + break; + default: { + if (parentContainer.nodeName === 'HTML') { + parentElement = (parentContainer: any).ownerDocument.body; + } else { + parentElement = (parentContainer: any); + } + } + } + return getNextHydratable(parentElement.firstChild); } export function getFirstHydratableChildWithinSuspenseInstance( @@ -1883,10 +1946,44 @@ export function getFirstHydratableChildWithinSuspenseInstance( return getNextHydratable(parentInstance.nextSibling); } +// If it were possible to have more than one scope singleton in a DOM tree +// we would need to model this as a stack but since you can only have one +// and head is the only singleton that is a scope in DOM we can get away with +// tracking this as a single value. +let previousHydratableOnEnteringScopedSingleton: null | HydratableInstance = + null; + +export function getFirstHydratableChildWithinSingleton( + type: string, + singletonInstance: Instance, + currentHydratableInstance: null | HydratableInstance, +): null | HydratableInstance { + if (isSingletonScope(type)) { + previousHydratableOnEnteringScopedSingleton = currentHydratableInstance; + return getNextHydratable(singletonInstance.firstChild); + } else { + return currentHydratableInstance; + } +} + +export function getNextHydratableSiblingAfterSingleton( + type: string, + currentHydratableInstance: null | HydratableInstance, +): null | HydratableInstance { + if (isSingletonScope(type)) { + const previousHydratableInstance = + previousHydratableOnEnteringScopedSingleton; + previousHydratableOnEnteringScopedSingleton = null; + return previousHydratableInstance; + } else { + return currentHydratableInstance; + } +} + export function describeHydratableInstanceForDevWarnings( instance: HydratableInstance, ): string | {type: string, props: $ReadOnly} { - // Reverse engineer a pseudo react-element from hydratable instnace + // Reverse engineer a pseudo react-element from hydratable instance if (instance.nodeType === ELEMENT_NODE) { // Reverse engineer a set of props that can print for dev warnings return { diff --git a/packages/react-dom-bindings/src/events/DOMPluginEventSystem.js b/packages/react-dom-bindings/src/events/DOMPluginEventSystem.js index 5c3c9bffa1295..c99115df90f56 100644 --- a/packages/react-dom-bindings/src/events/DOMPluginEventSystem.js +++ b/packages/react-dom-bindings/src/events/DOMPluginEventSystem.js @@ -53,6 +53,7 @@ import { enableCreateEventHandleAPI, enableScopeAPI, enableOwnerStacks, + disableCommentsAsDOMContainers, } from 'shared/ReactFeatureFlags'; import {createEventListenerWrapperWithPriority} from './ReactDOMEventListener'; import { @@ -558,7 +559,8 @@ function isMatchingRootContainer( ): boolean { return ( grandContainer === targetContainer || - (grandContainer.nodeType === COMMENT_NODE && + (!disableCommentsAsDOMContainers && + grandContainer.nodeType === COMMENT_NODE && grandContainer.parentNode === targetContainer) ); } diff --git a/packages/react-dom-bindings/src/server/ReactFizzConfigDOM.js b/packages/react-dom-bindings/src/server/ReactFizzConfigDOM.js index 4b8841a06e67b..8fac981ab29f2 100644 --- a/packages/react-dom-bindings/src/server/ReactFizzConfigDOM.js +++ b/packages/react-dom-bindings/src/server/ReactFizzConfigDOM.js @@ -684,16 +684,23 @@ export function completeResumableState(resumableState: ResumableState): void { resumableState.bootstrapModules = undefined; } +const NoContribution /* */ = 0b000; +const HTMLContribution /* */ = 0b001; +const BodyContribution /* */ = 0b010; +const HeadContribution /* */ = 0b100; + export type PreambleState = { htmlChunks: null | Array, headChunks: null | Array, bodyChunks: null | Array, + contribution: number, }; export function createPreambleState(): PreambleState { return { htmlChunks: null, headChunks: null, bodyChunks: null, + contribution: NoContribution, }; } @@ -3227,7 +3234,7 @@ function pushStartHead( throw new Error(`The ${'``'} tag may only be rendered once.`); } preamble.headChunks = []; - return pushStartGenericElement(preamble.headChunks, props, 'head'); + return pushStartSingletonElement(preamble.headChunks, props, 'head'); } else { // This is deep and is likely just an error. we emit it inline though. // Validation should warn that this tag is the the wrong spot. @@ -3251,7 +3258,7 @@ function pushStartBody( } preamble.bodyChunks = []; - return pushStartGenericElement(preamble.bodyChunks, props, 'body'); + return pushStartSingletonElement(preamble.bodyChunks, props, 'body'); } else { // This is deep and is likely just an error. we emit it inline though. // Validation should warn that this tag is the the wrong spot. @@ -3275,7 +3282,7 @@ function pushStartHtml( } preamble.htmlChunks = [DOCTYPE]; - return pushStartGenericElement(preamble.htmlChunks, props, 'html'); + return pushStartSingletonElement(preamble.htmlChunks, props, 'html'); } else { // This is deep and is likely just an error. we emit it inline though. // Validation should warn that this tag is the the wrong spot. @@ -3416,6 +3423,43 @@ function pushScriptImpl( return null; } +// This is a fork of pushStartGenericElement because we don't ever want to do +// the children as strign optimization on that path when rendering singletons. +// When we eliminate that special path we can delete this fork and unify it again +function pushStartSingletonElement( + target: Array, + props: Object, + tag: string, +): ReactNodeList { + target.push(startChunkForTag(tag)); + + let children = null; + let innerHTML = null; + for (const propKey in props) { + if (hasOwnProperty.call(props, propKey)) { + const propValue = props[propKey]; + if (propValue == null) { + continue; + } + switch (propKey) { + case 'children': + children = propValue; + break; + case 'dangerouslySetInnerHTML': + innerHTML = propValue; + break; + default: + pushAttribute(target, propKey, propValue); + break; + } + } + } + + target.push(endOfStartTag); + pushInnerHTML(target, innerHTML, children); + return children; +} + function pushStartGenericElement( target: Array, props: Object, @@ -3907,14 +3951,17 @@ export function hoistPreambleState( preambleState: PreambleState, ) { const rootPreamble = renderState.preamble; - if (rootPreamble.htmlChunks === null) { + if (rootPreamble.htmlChunks === null && preambleState.htmlChunks) { rootPreamble.htmlChunks = preambleState.htmlChunks; + preambleState.contribution |= HTMLContribution; } - if (rootPreamble.headChunks === null) { + if (rootPreamble.headChunks === null && preambleState.headChunks) { rootPreamble.headChunks = preambleState.headChunks; + preambleState.contribution |= HeadContribution; } - if (rootPreamble.bodyChunks === null) { + if (rootPreamble.bodyChunks === null && preambleState.bodyChunks) { rootPreamble.bodyChunks = preambleState.bodyChunks; + preambleState.contribution |= BodyContribution; } } @@ -4091,7 +4138,11 @@ export function writeStartClientRenderedSuspenseBoundary( export function writeEndCompletedSuspenseBoundary( destination: Destination, renderState: RenderState, + preambleState: null | PreambleState, ): boolean { + if (preambleState) { + writePreambleContribution(destination, preambleState); + } return writeChunkAndReturn(destination, endSuspenseBoundary); } export function writeEndPendingSuspenseBoundary( @@ -4103,10 +4154,31 @@ export function writeEndPendingSuspenseBoundary( export function writeEndClientRenderedSuspenseBoundary( destination: Destination, renderState: RenderState, + preambleState: null | PreambleState, ): boolean { + if (preambleState) { + writePreambleContribution(destination, preambleState); + } return writeChunkAndReturn(destination, endSuspenseBoundary); } +const boundaryPreambleContributionChunkStart = stringToPrecomputedChunk(''); + +function writePreambleContribution( + destination: Destination, + preambleState: PreambleState, +) { + const contribution = preambleState.contribution; + if (contribution !== NoContribution) { + writeChunk(destination, boundaryPreambleContributionChunkStart); + // This is a number type so we can do the fast path without coercion checking + // eslint-disable-next-line react-internal/safe-string-coercion + writeChunk(destination, stringToChunk('' + contribution)); + writeChunk(destination, boundaryPreambleContributionChunkEnd); + } +} + const startSegmentHTML = stringToPrecomputedChunk(''); diff --git a/packages/react-dom-bindings/src/server/ReactFizzConfigDOMLegacy.js b/packages/react-dom-bindings/src/server/ReactFizzConfigDOMLegacy.js index 491d322793941..ecd12d2ac5fd1 100644 --- a/packages/react-dom-bindings/src/server/ReactFizzConfigDOMLegacy.js +++ b/packages/react-dom-bindings/src/server/ReactFizzConfigDOMLegacy.js @@ -244,20 +244,30 @@ export function writeStartClientRenderedSuspenseBoundary( export function writeEndCompletedSuspenseBoundary( destination: Destination, renderState: RenderState, + preambleState: null | PreambleState, ): boolean { if (renderState.generateStaticMarkup) { return true; } - return writeEndCompletedSuspenseBoundaryImpl(destination, renderState); + return writeEndCompletedSuspenseBoundaryImpl( + destination, + renderState, + preambleState, + ); } export function writeEndClientRenderedSuspenseBoundary( destination: Destination, renderState: RenderState, + preambleState: null | PreambleState, ): boolean { if (renderState.generateStaticMarkup) { return true; } - return writeEndClientRenderedSuspenseBoundaryImpl(destination, renderState); + return writeEndClientRenderedSuspenseBoundaryImpl( + destination, + renderState, + preambleState, + ); } export type TransitionStatus = FormStatus; diff --git a/packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js b/packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js index ac6374600fc64..d0a1e484f2810 100644 --- a/packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMFizzServer-test.js @@ -8923,7 +8923,7 @@ describe('ReactDOMFizzServer', () => { ); }); - it('can server render Suspense before, after, and around ', async () => { + it('can render Suspense before, after, and around ', async () => { function BlockedOn({value, children}) { readText(value); return children; @@ -8989,9 +8989,33 @@ describe('ReactDOMFizzServer', () => { , ); + + const root = ReactDOMClient.hydrateRoot(document, ); + await waitForAll([]); + expect(getVisibleChildren(document)).toEqual( + + + + + +
before
+
hello world
+
after
+ + , + ); + assertConsoleErrorDev(['In HTML,
cannot be a child of <#document>']); + + root.unmount(); + expect(getVisibleChildren(document)).toEqual( + + + + , + ); }); - it('can server render Suspense before, after, and around ', async () => { + it('can render Suspense before, after, and around ', async () => { function BlockedOn({value, children}) { readText(value); return children; @@ -9052,9 +9076,83 @@ describe('ReactDOMFizzServer', () => { , ); + + const root = ReactDOMClient.hydrateRoot(document, ); + await waitForAll([]); + expect(getVisibleChildren(document)).toEqual( + + + + + + + +
hello world
+ + + , + ); + if (gate(flags => flags.enableOwnerStacks)) { + assertConsoleErrorDev([ + [ + 'Cannot render a outside the main document if it has an `itemProp` prop. `itemProp` suggests the tag belongs to an `itemScope` which can appear anywhere in the DOM. If you were intending for React to hoist this remove the `itemProp` prop. Otherwise, try moving this tag into the or of the Document.', + {withoutStack: true}, + ], + 'In HTML, cannot be a child of .\nThis will cause a hydration error.' + + '\n' + + '\n ' + + '\n> ' + + '\n ' + + '\n ' + + '\n> ' + + '\n ...' + + '\n' + + '\n in meta (at **)' + + '\n in App (at **)', + ' cannot contain a nested .\nSee this log for the ancestor stack trace.' + + '\n in html (at **)' + + '\n in App (at **)', + [ + 'Cannot render a outside the main document if it has an `itemProp` prop. `itemProp` suggests the tag belongs to an `itemScope` which can appear anywhere in the DOM. If you were intending for React to hoist this remove the `itemProp` prop. Otherwise, try moving this tag into the or of the Document.', + {withoutStack: true}, + ], + ]); + } else { + assertConsoleErrorDev([ + 'Cannot render a outside the main document if it has an `itemProp` prop. `itemProp` suggests the tag belongs to an `itemScope` which can appear anywhere in the DOM. If you were intending for React to hoist this remove the `itemProp` prop. Otherwise, try moving this tag into the or of the Document.' + + '\n in Suspense (at **)' + + '\n in html (at **)' + + '\n in App (at **)', + 'In HTML, cannot be a child of .\nThis will cause a hydration error.' + + '\n' + + '\n ' + + '\n> ' + + '\n ' + + '\n ' + + '\n> ' + + '\n ...' + + '\n' + + '\n in meta (at **)' + + '\n in Suspense (at **)' + + '\n in html (at **)' + + '\n in App (at **)', + 'Cannot render a outside the main document if it has an `itemProp` prop. `itemProp` suggests the tag belongs to an `itemScope` which can appear anywhere in the DOM. If you were intending for React to hoist this remove the `itemProp` prop. Otherwise, try moving this tag into the or of the Document.' + + '\n in Suspense (at **)' + + '\n in html (at **)' + + '\n in App (at **)', + ]); + } + + await root.unmount(); + expect(getVisibleChildren(document)).toEqual( + + + + , + ); }); - it('can server render Suspense before, after, and around ', async () => { + it('can render Suspense before, after, and around ', async () => { function BlockedOn({value, children}) { readText(value); return children; @@ -9119,11 +9217,90 @@ describe('ReactDOMFizzServer', () => { , ); + + const root = ReactDOMClient.hydrateRoot(document, ); + await waitForAll([]); + expect(getVisibleChildren(document)).toEqual( + + + + + + + + + +
hello world
+ + , + ); + if (gate(flags => flags.enableOwnerStacks)) { + assertConsoleErrorDev([ + [ + 'Cannot render a outside the main document if it has an `itemProp` prop. `itemProp` suggests the tag belongs to an `itemScope` which can appear anywhere in the DOM. If you were intending for React to hoist this remove the `itemProp` prop. Otherwise, try moving this tag into the or of the Document.', + {withoutStack: true}, + ], + 'In HTML, cannot be a child of .\nThis will cause a hydration error.' + + '\n' + + '\n ' + + '\n> ' + + '\n ' + + '\n ' + + '\n> ' + + '\n ...' + + '\n' + + '\n in meta (at **)' + + '\n in App (at **)', + ' cannot contain a nested .\nSee this log for the ancestor stack trace.' + + '\n in html (at **)' + + '\n in App (at **)', + [ + 'Cannot render a outside the main document if it has an `itemProp` prop. `itemProp` suggests the tag belongs to an `itemScope` which can appear anywhere in the DOM. If you were intending for React to hoist this remove the `itemProp` prop. Otherwise, try moving this tag into the or of the Document.', + {withoutStack: true}, + ], + ]); + } else { + assertConsoleErrorDev([ + 'Cannot render a outside the main document if it has an `itemProp` prop. `itemProp` suggests the tag belongs to an `itemScope` which can appear anywhere in the DOM. If you were intending for React to hoist this remove the `itemProp` prop. Otherwise, try moving this tag into the or of the Document.' + + '\n in Suspense (at **)' + + '\n in html (at **)' + + '\n in App (at **)', + 'In HTML, cannot be a child of .\nThis will cause a hydration error.' + + '\n' + + '\n ' + + '\n> ' + + '\n ' + + '\n ' + + '\n> ' + + '\n ...' + + '\n' + + '\n in meta (at **)' + + '\n in Suspense (at **)' + + '\n in html (at **)' + + '\n in App (at **)', + 'Cannot render a outside the main document if it has an `itemProp` prop. `itemProp` suggests the tag belongs to an `itemScope` which can appear anywhere in the DOM. If you were intending for React to hoist this remove the `itemProp` prop. Otherwise, try moving this tag into the or of the Document.' + + '\n in Suspense (at **)' + + '\n in html (at **)' + + '\n in App (at **)', + ]); + } + + await root.unmount(); + expect(getVisibleChildren(document)).toEqual( + + + + , + ); }); - it('will render fallback Document when erroring a boundary above the body', async () => { + it('will render fallback Document when erroring a boundary above the body and recover on the client', async () => { + let serverRendering = true; function Boom() { - throw new Error('Boom!'); + if (serverRendering) { + throw new Error('Boom!'); + } + return null; } function App() { @@ -9174,11 +9351,50 @@ describe('ReactDOMFizzServer', () => { , ); + + serverRendering = false; + + const recoverableErrors = []; + const root = ReactDOMClient.hydrateRoot(document, , { + onRecoverableError(err) { + recoverableErrors.push(err); + }, + }); + await waitForAll([]); + expect(getVisibleChildren(document)).toEqual( + + + + hello world + + , + ); + expect(recoverableErrors).toEqual([ + __DEV__ + ? new Error( + 'Switched to client rendering because the server rendering errored:\n\nBoom!', + ) + : new Error( + 'The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering.', + ), + ]); + + root.unmount(); + expect(getVisibleChildren(document)).toEqual( + + + + , + ); }); it('will hoist resources and hositables from a primary tree into the of a client rendered fallback', async () => { + let serverRendering = true; function Boom() { - throw new Error('Boom!'); + if (serverRendering) { + throw new Error('Boom!'); + } + return null; } function App() { @@ -9255,6 +9471,65 @@ describe('ReactDOMFizzServer', () => { , ); + + serverRendering = false; + + const recoverableErrors = []; + const root = ReactDOMClient.hydrateRoot(document, , { + onRecoverableError(err) { + recoverableErrors.push(err); + }, + }); + await waitForAll([]); + expect(recoverableErrors).toEqual([ + __DEV__ + ? new Error( + 'Switched to client rendering because the server rendering errored:\n\nBoom!', + ) + : new Error( + 'The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering.', + ), + ]); + expect(getVisibleChildren(document)).toEqual( + + + + + + + + + hello world + + , + ); + + root.unmount(); + expect(getVisibleChildren(document)).toEqual( + + + + + + + , + ); }); it('Will wait to flush Document chunks until all boundaries which might contain a preamble are errored or resolved', async () => { @@ -9353,8 +9628,12 @@ describe('ReactDOMFizzServer', () => { }); it('Can render a fallback alongside a non-fallback body', async () => { + let serverRendering = true; function Boom() { - throw new Error('Boom!'); + if (serverRendering) { + throw new Error('Boom!'); + } + return null; } function App() { @@ -9416,11 +9695,52 @@ describe('ReactDOMFizzServer', () => { , ); + + serverRendering = false; + + const recoverableErrors = []; + const root = ReactDOMClient.hydrateRoot(document, , { + onRecoverableError(err) { + recoverableErrors.push(err); + }, + }); + await waitForAll([]); + expect(recoverableErrors).toEqual([ + __DEV__ + ? new Error( + 'Switched to client rendering because the server rendering errored:\n\nBoom!', + ) + : new Error( + 'The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering.', + ), + ]); + expect(getVisibleChildren(document)).toEqual( + + + + + +
primary body
+ + , + ); + + root.unmount(); + expect(getVisibleChildren(document)).toEqual( + + + + , + ); }); it('Can render a fallback alongside a non-fallback head', async () => { + let serverRendering = true; function Boom() { - throw new Error('Boom!'); + if (serverRendering) { + throw new Error('Boom!'); + } + return null; } function App() { @@ -9482,6 +9802,43 @@ describe('ReactDOMFizzServer', () => { , ); + + serverRendering = false; + + const recoverableErrors = []; + const root = ReactDOMClient.hydrateRoot(document, , { + onRecoverableError(err) { + recoverableErrors.push(err); + }, + }); + await waitForAll([]); + expect(getVisibleChildren(document)).toEqual( + + + + + +
primary body
+ + , + ); + expect(recoverableErrors).toEqual([ + __DEV__ + ? new Error( + 'Switched to client rendering because the server rendering errored:\n\nBoom!', + ) + : new Error( + 'The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering.', + ), + ]); + + root.unmount(); + expect(getVisibleChildren(document)).toEqual( + + + + , + ); }); it('Can render a outside of a containing ', async () => { @@ -9528,6 +9885,27 @@ describe('ReactDOMFizzServer', () => { , ); + + const root = ReactDOMClient.hydrateRoot(document, ); + await waitForAll([]); + expect(getVisibleChildren(document)).toEqual( + + + + + + hello world + + , + ); + + root.unmount(); + expect(getVisibleChildren(document)).toEqual( + + + + , + ); }); it('can render preamble tags in deeply nested indirect component trees', async () => { @@ -9661,6 +10039,28 @@ describe('ReactDOMFizzServer', () => { , ); + + const root = ReactDOMClient.hydrateRoot(document, ); + await waitForAll([]); + expect(getVisibleChildren(document)).toEqual( + + + + + + +
This is soooo cool!
+ + , + ); + + root.unmount(); + expect(getVisibleChildren(document)).toEqual( + + + + , + ); }); it('will flush the preamble as soon as a complete preamble is available', async () => { @@ -9740,5 +10140,177 @@ describe('ReactDOMFizzServer', () => { , ); + + const root = ReactDOMClient.hydrateRoot(document, ); + await waitForAll([]); + expect(getVisibleChildren(document)).toEqual( + + + + + + loading before... +
body
+ loading after... + + , + ); + + await act(() => { + resolveText('before'); + resolveText('after'); + }); + await waitForAll([]); + expect(getVisibleChildren(document)).toEqual( + + + + + +
before
+
body
+
after
+ + , + ); + assertConsoleErrorDev(['In HTML,
cannot be a child of <#document>']); + + root.unmount(); + expect(getVisibleChildren(document)).toEqual( + + + + , + ); + }); + + it('will clean up the head when a hydration mismatch causes a boundary to recover on the client', async () => { + let content = 'server'; + + function ServerApp() { + return ( + + + + + + {content} + + + ); + } + + function ClientApp() { + return ( + + + + + + {content} + + + ); + } + + await act(() => { + const {pipe} = renderToPipeableStream(); + pipe(writable); + }); + expect(getVisibleChildren(document)).toEqual( + + + + + server + , + ); + + content = 'client'; + + const recoverableErrors = []; + const root = ReactDOMClient.hydrateRoot(document, , { + onRecoverableError(err) { + recoverableErrors.push(err.message); + }, + }); + await waitForAll([]); + if (gate(flags => flags.favorSafetyOverHydrationPerf)) { + expect(getVisibleChildren(document)).toEqual( + + + + + client + , + ); + expect(recoverableErrors).toEqual([ + expect.stringContaining( + "Hydration failed because the server rendered HTML didn't match the client.", + ), + ]); + } else { + expect(getVisibleChildren(document)).toEqual( + + + + + server + , + ); + expect(recoverableErrors).toEqual([]); + assertConsoleErrorDev([ + "A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:" + + '\n' + + "\n- A server/client branch `if (typeof window !== 'undefined')`." + + "\n- Variable input such as `Date.now()` or `Math.random()` which changes each time it's called." + + "\n- Date formatting in a user's locale which doesn't match the server." + + '\n- External changing data without sending a snapshot of it along with the HTML.' + + '\n- Invalid HTML tag nesting.' + + '\n' + + '\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.' + + '\n' + + '\nhttps://react.dev/link/hydration-mismatch' + + '\n' + + '\n ' + + '\n ' + + '\n ' + + '\n ' + + '\n ' + + '\n ' + + '\n+ client' + + '\n- server' + + '\n+ client' + + '\n- server' + + '\n' + + '\n in Suspense (at **)' + + '\n in ClientApp (at **)', + ]); + } + + root.unmount(); + expect(getVisibleChildren(document)).toEqual( + + + + , + ); }); }); diff --git a/packages/react-dom/src/__tests__/ReactDOMServerIntegrationUntrustedURL-test.js b/packages/react-dom/src/__tests__/ReactDOMServerIntegrationUntrustedURL-test.js index 384e8beb0b214..8664904130c11 100644 --- a/packages/react-dom/src/__tests__/ReactDOMServerIntegrationUntrustedURL-test.js +++ b/packages/react-dom/src/__tests__/ReactDOMServerIntegrationUntrustedURL-test.js @@ -41,6 +41,7 @@ describe('ReactDOMServerIntegration - Untrusted URLs', () => { const { resetModules, itRenders, + clientCleanRender, clientRenderOnBadMarkup, clientRenderOnServerString, } = ReactDOMServerIntegrationUtils(initModules); @@ -141,6 +142,11 @@ describe('ReactDOMServerIntegration - Untrusted URLs', () => { }); itRenders('a javascript protocol frame src', async render => { + if (render === clientCleanRender || render === clientRenderOnServerString) { + // React does not hydrate framesets properly because the default hydration scope + // is the body + return; + } const e = await render( diff --git a/packages/react-dom/src/client/ReactDOMRoot.js b/packages/react-dom/src/client/ReactDOMRoot.js index 5cef2d28437b0..37e994cc7bb71 100644 --- a/packages/react-dom/src/client/ReactDOMRoot.js +++ b/packages/react-dom/src/client/ReactDOMRoot.js @@ -16,6 +16,7 @@ import type { import {isValidContainer} from 'react-dom-bindings/src/client/ReactDOMContainer'; import {queueExplicitHydrationTarget} from 'react-dom-bindings/src/events/ReactDOMEventReplaying'; import {REACT_ELEMENT_TYPE} from 'shared/ReactSymbols'; +import {disableCommentsAsDOMContainers} from 'shared/ReactFeatureFlags'; export type RootType = { render(children: ReactNodeList): void, @@ -236,7 +237,7 @@ export function createRoot( markContainerAsRoot(root.current, container); const rootContainerElement: Document | Element | DocumentFragment = - container.nodeType === COMMENT_NODE + !disableCommentsAsDOMContainers && container.nodeType === COMMENT_NODE ? (container.parentNode: any) : container; listenToAllSupportedEvents(rootContainerElement); diff --git a/packages/react-dom/src/client/ReactDOMRootFB.js b/packages/react-dom/src/client/ReactDOMRootFB.js index 1e5609726688f..f2368c8cc4fa6 100644 --- a/packages/react-dom/src/client/ReactDOMRootFB.js +++ b/packages/react-dom/src/client/ReactDOMRootFB.js @@ -27,7 +27,10 @@ import { hydrateRoot as hydrateRootImpl, } from './ReactDOMRoot'; -import {disableLegacyMode} from 'shared/ReactFeatureFlags'; +import { + disableLegacyMode, + disableCommentsAsDOMContainers, +} from 'shared/ReactFeatureFlags'; import {clearContainer} from 'react-dom-bindings/src/client/ReactFiberConfigDOM'; import { getInstanceFromNode, @@ -36,7 +39,7 @@ import { unmarkContainerAsRoot, } from 'react-dom-bindings/src/client/ReactDOMComponentTree'; import {listenToAllSupportedEvents} from 'react-dom-bindings/src/events/DOMPluginEventSystem'; -import {isValidContainerLegacy} from 'react-dom-bindings/src/client/ReactDOMContainer'; +import {isValidContainer} from 'react-dom-bindings/src/client/ReactDOMContainer'; import { DOCUMENT_NODE, ELEMENT_NODE, @@ -244,7 +247,9 @@ function legacyCreateRootFromDOMContainer( markContainerAsRoot(root.current, container); const rootContainerElement = - container.nodeType === COMMENT_NODE ? container.parentNode : container; + !disableCommentsAsDOMContainers && container.nodeType === COMMENT_NODE + ? container.parentNode + : container; // $FlowFixMe[incompatible-call] listenToAllSupportedEvents(rootContainerElement); @@ -278,7 +283,9 @@ function legacyCreateRootFromDOMContainer( markContainerAsRoot(root.current, container); const rootContainerElement = - container.nodeType === COMMENT_NODE ? container.parentNode : container; + !disableCommentsAsDOMContainers && container.nodeType === COMMENT_NODE + ? container.parentNode + : container; // $FlowFixMe[incompatible-call] listenToAllSupportedEvents(rootContainerElement); @@ -394,7 +401,7 @@ export function render( ); } - if (!isValidContainerLegacy(container)) { + if (!isValidContainer(container)) { throw new Error('Target container is not a DOM element.'); } @@ -428,7 +435,7 @@ export function unmountComponentAtNode(container: Container): boolean { } throw new Error('ReactDOM: Unsupported Legacy Mode API.'); } - if (!isValidContainerLegacy(container)) { + if (!isValidContainer(container)) { throw new Error('Target container is not a DOM element.'); } @@ -472,7 +479,7 @@ export function unmountComponentAtNode(container: Container): boolean { // Check if the container itself is a React root node. const isContainerReactRoot = container.nodeType === ELEMENT_NODE && - isValidContainerLegacy(container.parentNode) && + isValidContainer(container.parentNode) && // $FlowFixMe[prop-missing] // $FlowFixMe[incompatible-use] !!container.parentNode._reactRootContainer; diff --git a/packages/react-markup/src/ReactFizzConfigMarkup.js b/packages/react-markup/src/ReactFizzConfigMarkup.js index 99e9921c8190a..358a08e7c54b8 100644 --- a/packages/react-markup/src/ReactFizzConfigMarkup.js +++ b/packages/react-markup/src/ReactFizzConfigMarkup.js @@ -174,6 +174,7 @@ export function writeStartClientRenderedSuspenseBoundary( export function writeEndCompletedSuspenseBoundary( destination: Destination, renderState: RenderState, + preambleState: null | PreambleState, ): boolean { // Markup doesn't have any instructions. return true; @@ -181,6 +182,7 @@ export function writeEndCompletedSuspenseBoundary( export function writeEndClientRenderedSuspenseBoundary( destination: Destination, renderState: RenderState, + preambleState: null | PreambleState, ): boolean { // Markup doesn't have any instructions. return true; diff --git a/packages/react-reconciler/src/ReactFiberCommitHostEffects.js b/packages/react-reconciler/src/ReactFiberCommitHostEffects.js index 159c12bd4bcf2..c104c2a8464b5 100644 --- a/packages/react-reconciler/src/ReactFiberCommitHostEffects.js +++ b/packages/react-reconciler/src/ReactFiberCommitHostEffects.js @@ -314,6 +314,7 @@ function insertOrAppendPlacementNodeIntoContainer( // This singleton is the parent of deeper nodes and needs to become // the parent for child insertions and appends parent = node.stateNode; + before = null; } const child = node.child; diff --git a/packages/react-reconciler/src/ReactFiberConfigWithNoHydration.js b/packages/react-reconciler/src/ReactFiberConfigWithNoHydration.js index 3707f99f488fb..0bb85246dfe24 100644 --- a/packages/react-reconciler/src/ReactFiberConfigWithNoHydration.js +++ b/packages/react-reconciler/src/ReactFiberConfigWithNoHydration.js @@ -28,9 +28,11 @@ export const registerSuspenseInstanceRetry = shim; export const canHydrateFormStateMarker = shim; export const isFormStateMarkerMatching = shim; export const getNextHydratableSibling = shim; +export const getNextHydratableSiblingAfterSingleton = shim; export const getFirstHydratableChild = shim; export const getFirstHydratableChildWithinContainer = shim; export const getFirstHydratableChildWithinSuspenseInstance = shim; +export const getFirstHydratableChildWithinSingleton = shim; export const canHydrateInstance = shim; export const canHydrateTextInstance = shim; export const canHydrateSuspenseInstance = shim; diff --git a/packages/react-reconciler/src/ReactFiberHydrationContext.js b/packages/react-reconciler/src/ReactFiberHydrationContext.js index b4d948e735276..23f13bbcadbf8 100644 --- a/packages/react-reconciler/src/ReactFiberHydrationContext.js +++ b/packages/react-reconciler/src/ReactFiberHydrationContext.js @@ -37,9 +37,11 @@ import { supportsHydration, supportsSingletons, getNextHydratableSibling, + getNextHydratableSiblingAfterSingleton, getFirstHydratableChild, getFirstHydratableChildWithinContainer, getFirstHydratableChildWithinSuspenseInstance, + getFirstHydratableChildWithinSingleton, hydrateInstance, diffHydratedPropsForDevWarnings, describeHydratableInstanceForDevWarnings, @@ -366,7 +368,11 @@ function claimHydratableSingleton(fiber: Fiber): void { hydrationParentFiber = fiber; rootOrSingletonContext = true; - nextHydratableInstance = getFirstHydratableChild(instance); + nextHydratableInstance = getFirstHydratableChildWithinSingleton( + fiber.type, + instance, + nextHydratableInstance, + ); } } @@ -593,14 +599,14 @@ function popToNextHostParent(fiber: Fiber): void { hydrationParentFiber = fiber.return; while (hydrationParentFiber) { switch (hydrationParentFiber.tag) { - case HostRoot: - case HostSingleton: - rootOrSingletonContext = true; - return; case HostComponent: case SuspenseComponent: rootOrSingletonContext = false; return; + case HostSingleton: + case HostRoot: + rootOrSingletonContext = true; + return; default: hydrationParentFiber = hydrationParentFiber.return; } @@ -625,20 +631,25 @@ function popHydrationState(fiber: Fiber): boolean { return false; } - let shouldClear = false; + const tag = fiber.tag; + if (supportsSingletons) { // With float we never clear the Root, or Singleton instances. We also do not clear Instances // that have singleton text content if ( - fiber.tag !== HostRoot && - fiber.tag !== HostSingleton && + tag !== HostRoot && + tag !== HostSingleton && !( - fiber.tag === HostComponent && + tag === HostComponent && (!shouldDeleteUnhydratedTailInstances(fiber.type) || shouldSetTextContent(fiber.type, fiber.memoizedProps)) ) ) { - shouldClear = true; + const nextInstance = nextHydratableInstance; + if (nextInstance) { + warnIfUnhydratedTailNodes(fiber); + throwOnHydrationMismatch(fiber); + } } } else { // If we have any remaining hydratable nodes, we need to delete them now. @@ -646,24 +657,26 @@ function popHydrationState(fiber: Fiber): boolean { // other nodes in them. We also ignore components with pure text content in // side of them. We also don't delete anything inside the root container. if ( - fiber.tag !== HostRoot && - (fiber.tag !== HostComponent || + tag !== HostRoot && + (tag !== HostComponent || (shouldDeleteUnhydratedTailInstances(fiber.type) && !shouldSetTextContent(fiber.type, fiber.memoizedProps))) ) { - shouldClear = true; - } - } - if (shouldClear) { - const nextInstance = nextHydratableInstance; - if (nextInstance) { - warnIfUnhydratedTailNodes(fiber); - throwOnHydrationMismatch(fiber); + const nextInstance = nextHydratableInstance; + if (nextInstance) { + warnIfUnhydratedTailNodes(fiber); + throwOnHydrationMismatch(fiber); + } } } popToNextHostParent(fiber); - if (fiber.tag === SuspenseComponent) { + if (tag === SuspenseComponent) { nextHydratableInstance = skipPastDehydratedSuspenseInstance(fiber); + } else if (supportsSingletons && tag === HostSingleton) { + nextHydratableInstance = getNextHydratableSiblingAfterSingleton( + fiber.type, + nextHydratableInstance, + ); } else { nextHydratableInstance = hydrationParentFiber ? getNextHydratableSibling(fiber.stateNode) diff --git a/packages/react-reconciler/src/forks/ReactFiberConfig.custom.js b/packages/react-reconciler/src/forks/ReactFiberConfig.custom.js index 91420ca88cd95..ee5f40ad829ad 100644 --- a/packages/react-reconciler/src/forks/ReactFiberConfig.custom.js +++ b/packages/react-reconciler/src/forks/ReactFiberConfig.custom.js @@ -174,11 +174,15 @@ export const registerSuspenseInstanceRetry = export const canHydrateFormStateMarker = $$$config.canHydrateFormStateMarker; export const isFormStateMarkerMatching = $$$config.isFormStateMarkerMatching; export const getNextHydratableSibling = $$$config.getNextHydratableSibling; +export const getNextHydratableSiblingAfterSingleton = + $$$config.getNextHydratableSiblingAfterSingleton; export const getFirstHydratableChild = $$$config.getFirstHydratableChild; export const getFirstHydratableChildWithinContainer = $$$config.getFirstHydratableChildWithinContainer; export const getFirstHydratableChildWithinSuspenseInstance = $$$config.getFirstHydratableChildWithinSuspenseInstance; +export const getFirstHydratableChildWithinSingleton = + $$$config.getFirstHydratableChildWithinSingleton; export const canHydrateInstance = $$$config.canHydrateInstance; export const canHydrateTextInstance = $$$config.canHydrateTextInstance; export const canHydrateSuspenseInstance = $$$config.canHydrateSuspenseInstance; diff --git a/packages/react-server-dom-parcel/src/client/ReactFlightDOMClientBrowser.js b/packages/react-server-dom-parcel/src/client/ReactFlightDOMClientBrowser.js index d090dd6975dd1..7ea840b140790 100644 --- a/packages/react-server-dom-parcel/src/client/ReactFlightDOMClientBrowser.js +++ b/packages/react-server-dom-parcel/src/client/ReactFlightDOMClientBrowser.js @@ -31,6 +31,17 @@ import type {TemporaryReferenceSet} from 'react-client/src/ReactFlightTemporaryR export {createTemporaryReferenceSet} from 'react-client/src/ReactFlightTemporaryReferences'; export type {TemporaryReferenceSet}; +function findSourceMapURL(filename: string, environmentName: string) { + const devServer = parcelRequire.meta.devServer; + if (devServer != null) { + const qs = new URLSearchParams(); + qs.set('filename', filename); + qs.set('env', environmentName); + return devServer + '/__parcel_source_map?' + qs.toString(); + } + return null; +} + type CallServerCallback = (id: string, args: A) => Promise; let callServer: CallServerCallback | null = null; @@ -57,6 +68,9 @@ export function createServerReference, T>( return createServerReferenceImpl( id + '#' + exportName, callCurrentServerCallback, + undefined, + findSourceMapURL, + exportName, ); } @@ -107,7 +121,7 @@ export function createFromReadableStream( options && options.temporaryReferences ? options.temporaryReferences : undefined, - undefined, // TODO: findSourceMapUrl + __DEV__ ? findSourceMapURL : undefined, __DEV__ ? (options ? options.replayConsoleLogs !== false : true) : false, // defaults to true __DEV__ && options && options.environmentName ? options.environmentName @@ -131,7 +145,7 @@ export function createFromFetch( options && options.temporaryReferences ? options.temporaryReferences : undefined, - undefined, // TODO: findSourceMapUrl + __DEV__ ? findSourceMapURL : undefined, __DEV__ ? (options ? options.replayConsoleLogs !== false : true) : false, // defaults to true __DEV__ && options && options.environmentName ? options.environmentName diff --git a/packages/react-server-dom-parcel/src/client/ReactFlightDOMClientEdge.js b/packages/react-server-dom-parcel/src/client/ReactFlightDOMClientEdge.js index 05df8ac121031..8783cbfc6a7f9 100644 --- a/packages/react-server-dom-parcel/src/client/ReactFlightDOMClientEdge.js +++ b/packages/react-server-dom-parcel/src/client/ReactFlightDOMClientEdge.js @@ -30,6 +30,17 @@ import type {TemporaryReferenceSet} from 'react-client/src/ReactFlightTemporaryR export {createTemporaryReferenceSet} from 'react-client/src/ReactFlightTemporaryReferences'; export type {TemporaryReferenceSet}; +function findSourceMapURL(filename: string, environmentName: string) { + const devServer = parcelRequire.meta.devServer; + if (devServer != null) { + const qs = new URLSearchParams(); + qs.set('filename', filename); + qs.set('env', environmentName); + return devServer + '/__parcel_source_map?' + qs.toString(); + } + return null; +} + function noServerCall() { throw new Error( 'Server Functions cannot be called during initial render. ' + @@ -42,7 +53,13 @@ export function createServerReference, T>( id: string, exportName: string, ): (...A) => Promise { - return createServerReferenceImpl(id + '#' + exportName, noServerCall); + return createServerReferenceImpl( + id + '#' + exportName, + noServerCall, + undefined, + findSourceMapURL, + exportName, + ); } type EncodeFormActionCallback = ( @@ -69,7 +86,7 @@ function createResponseFromOptions(options?: Options) { options && options.temporaryReferences ? options.temporaryReferences : undefined, - undefined, // TODO: findSourceMapUrl + __DEV__ ? findSourceMapURL : undefined, __DEV__ && options ? options.replayConsoleLogs === true : false, // defaults to false __DEV__ && options && options.environmentName ? options.environmentName diff --git a/packages/react-server-dom-parcel/src/client/ReactFlightDOMClientNode.js b/packages/react-server-dom-parcel/src/client/ReactFlightDOMClientNode.js index 735d594a27594..8be06af9f2038 100644 --- a/packages/react-server-dom-parcel/src/client/ReactFlightDOMClientNode.js +++ b/packages/react-server-dom-parcel/src/client/ReactFlightDOMClientNode.js @@ -21,6 +21,17 @@ import { import {createServerReference as createServerReferenceImpl} from 'react-client/src/ReactFlightReplyClient'; +function findSourceMapURL(filename: string, environmentName: string) { + const devServer = parcelRequire.meta.devServer; + if (devServer != null) { + const qs = new URLSearchParams(); + qs.set('filename', filename); + qs.set('env', environmentName); + return devServer + '/__parcel_source_map?' + qs.toString(); + } + return null; +} + function noServerCall() { throw new Error( 'Server Functions cannot be called during initial render. ' + @@ -33,7 +44,13 @@ export function createServerReference, T>( id: string, exportName: string, ): (...A) => Promise { - return createServerReferenceImpl(id + '#' + exportName, noServerCall); + return createServerReferenceImpl( + id + '#' + exportName, + noServerCall, + undefined, + findSourceMapURL, + exportName, + ); } type EncodeFormActionCallback = ( @@ -60,7 +77,7 @@ export function createFromNodeStream( options ? options.encodeFormAction : undefined, options && typeof options.nonce === 'string' ? options.nonce : undefined, undefined, // TODO: If encodeReply is supported, this should support temporaryReferences - undefined, // TODO: findSourceMapUrl + __DEV__ ? findSourceMapURL : undefined, __DEV__ && options ? options.replayConsoleLogs === true : false, // defaults to false __DEV__ && options && options.environmentName ? options.environmentName diff --git a/packages/react-server/src/ReactFizzServer.js b/packages/react-server/src/ReactFizzServer.js index 4c02d06e600a9..041ef31e2bd3d 100644 --- a/packages/react-server/src/ReactFizzServer.js +++ b/packages/react-server/src/ReactFizzServer.js @@ -4865,6 +4865,7 @@ function flushSegment( return writeEndClientRenderedSuspenseBoundary( destination, request.renderState, + boundary.fallbackPreamble, ); } else if (boundary.status !== COMPLETED) { if (boundary.status === PENDING) { @@ -4935,7 +4936,11 @@ function flushSegment( const contentSegment = completedSegments[0]; flushSegment(request, destination, contentSegment, hoistableState); - return writeEndCompletedSuspenseBoundary(destination, request.renderState); + return writeEndCompletedSuspenseBoundary( + destination, + request.renderState, + boundary.contentPreamble, + ); } } diff --git a/packages/react/index.fb.js b/packages/react/index.fb.js index 84128cf0ea5d9..e3eb3113238fd 100644 --- a/packages/react/index.fb.js +++ b/packages/react/index.fb.js @@ -37,6 +37,7 @@ export { unstable_LegacyHidden, unstable_Scope, unstable_SuspenseList, + unstable_ViewTransition, unstable_TracingMarker, unstable_useCacheRefresh, use, diff --git a/packages/shared/forks/ReactFeatureFlags.www-dynamic.js b/packages/shared/forks/ReactFeatureFlags.www-dynamic.js index ca097b5a9efa0..e6fd46d0b1fb4 100644 --- a/packages/shared/forks/ReactFeatureFlags.www-dynamic.js +++ b/packages/shared/forks/ReactFeatureFlags.www-dynamic.js @@ -39,6 +39,7 @@ export const enableSiblingPrerendering = __VARIANT__; export const enableUseResourceEffectHook = __VARIANT__; export const enableRemoveConsolePatches = __VARIANT__; export const enableFastAddPropertiesInDiffing = __VARIANT__; +export const enableViewTransition = __VARIANT__; // TODO: These flags are hard-coded to the default values used in open source. // Update the tests so that they pass in either mode, then set these diff --git a/packages/shared/forks/ReactFeatureFlags.www.js b/packages/shared/forks/ReactFeatureFlags.www.js index 223872618e603..c84b89847fa0c 100644 --- a/packages/shared/forks/ReactFeatureFlags.www.js +++ b/packages/shared/forks/ReactFeatureFlags.www.js @@ -38,6 +38,7 @@ export const { enableOwnerStacks, enableRemoveConsolePatches, enableFastAddPropertiesInDiffing, + enableViewTransition, } = dynamicFeatureFlags; // On WWW, __EXPERIMENTAL__ is used for a new modern build. @@ -60,7 +61,6 @@ export const enableLegacyFBSupport = true; export const enableYieldingBeforePassive = false; export const enableThrottledScheduling = false; -export const enableViewTransition = false; export const enableHydrationLaneScheduling = true; diff --git a/scripts/flow/environment.js b/scripts/flow/environment.js index 37ca6fe4dc223..a083223ba1b5e 100644 --- a/scripts/flow/environment.js +++ b/scripts/flow/environment.js @@ -109,6 +109,7 @@ declare var parcelRequire: { extendImportMap: (importMap: {[string]: string}) => void, meta: { publicUrl: string, + devServer: string | null, }, };