From 995b1e23c4494cc8cb71711f877ae11fc02c92e5 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Wed, 27 Mar 2024 18:24:24 -0500 Subject: [PATCH 01/29] fix!: upgrade reconciler for React 19 --- package.json | 14 +++---- packages/fiber/package.json | 10 ++--- packages/fiber/src/core/reconciler.tsx | 40 +++++++++++-------- packages/fiber/src/index.tsx | 1 + packages/fiber/src/native.tsx | 1 + packages/test-renderer/package.json | 2 +- packages/test-renderer/src/helpers/waitFor.ts | 4 +- 7 files changed, 40 insertions(+), 32 deletions(-) diff --git a/package.json b/package.json index 3e0a8822a4..5796d911e5 100644 --- a/package.json +++ b/package.json @@ -51,11 +51,11 @@ "@preconstruct/cli": "^2.1.5", "@testing-library/react": "^13.0.0-alpha.5", "@types/jest": "^29.2.5", - "@types/react": "^18.0.5", - "@types/react-dom": "^18.0.1", + "@types/react": "18.2.73", + "@types/react-dom": "18.2.22", "@types/react-native": "0.69.5", - "@types/react-test-renderer": "^17.0.1", - "@types/scheduler": "^0.16.2", + "@types/react-test-renderer": "18.0.7", + "@types/scheduler": "0.23.0", "@types/three": "^0.141.0", "@typescript-eslint/eslint-plugin": "^5.17.0", "@typescript-eslint/parser": "^5.17.0", @@ -76,10 +76,10 @@ "lint-staged": "^12.3.7", "prettier": "^2.6.1", "pretty-quick": "^3.1.3", - "react": "^18.0.0", - "react-dom": "^18.0.0", + "react": "0.0.0-experimental-2b036d3f1-20240327", + "react-dom": "0.0.0-experimental-2b036d3f1-20240327", "react-native": "0.69.3", - "react-test-renderer": "^18.0.0", + "react-test-renderer": "0.0.0-experimental-2b036d3f1-20240327", "regenerator-runtime": "^0.13.9", "three": "^0.141.0", "three-stdlib": "^2.13.0", diff --git a/packages/fiber/package.json b/packages/fiber/package.json index c3133e030a..7bbc71fafd 100644 --- a/packages/fiber/package.json +++ b/packages/fiber/package.json @@ -43,11 +43,11 @@ }, "dependencies": { "@babel/runtime": "^7.17.8", - "@types/react-reconciler": "^0.26.7", + "@types/react-reconciler": "^0.28.8", "base64-js": "^1.5.1", "buffer": "^6.0.3", - "its-fine": "^1.0.6", - "react-reconciler": "^0.27.0", + "its-fine": "^1.1.3", + "react-reconciler": "0.0.0-experimental-2b036d3f1-20240327", "react-use-measure": "^2.1.1", "scheduler": "^0.21.0", "suspend-react": "^0.1.3", @@ -58,8 +58,8 @@ "expo-asset": ">=8.4", "expo-gl": ">=11.0", "expo-file-system": ">=11.0", - "react": ">=18.0", - "react-dom": ">=18.0", + "react": ">=19.0", + "react-dom": ">=19.0", "react-native": ">=0.69", "three": ">=0.141" }, diff --git a/packages/fiber/src/core/reconciler.tsx b/packages/fiber/src/core/reconciler.tsx index cda6204490..c4c8aa585a 100644 --- a/packages/fiber/src/core/reconciler.tsx +++ b/packages/fiber/src/core/reconciler.tsx @@ -324,11 +324,10 @@ export const reconciler = Reconciler< HostConfig['timeoutHandle'], HostConfig['noTimeout'] >({ - supportsMutation: true, isPrimaryRenderer: false, + supportsMutation: true, supportsPersistence: false, supportsHydration: false, - noTimeout: -1, createInstance, removeChild, appendChild, @@ -417,22 +416,31 @@ export const reconciler = Reconciler< hideTextInstance: handleTextInstance, unhideTextInstance: handleTextInstance, // SSR fallbacks - now: - typeof performance !== 'undefined' && typeof performance.now === 'function' - ? performance.now - : typeof Date.now === 'function' - ? Date.now - : () => 0, scheduleTimeout: (typeof setTimeout === 'function' ? setTimeout : undefined) as any, cancelTimeout: (typeof clearTimeout === 'function' ? clearTimeout : undefined) as any, - // @ts-ignore Deprecated experimental APIs - // https://github.com/facebook/react/blob/main/packages/shared/ReactFeatureFlags.js - // https://github.com/pmndrs/react-three-fiber/pull/2360#discussion_r916356874 - beforeActiveInstanceBlur: () => {}, - afterActiveInstanceBlur: () => {}, - detachDeletedInstance: () => {}, - // Gives React a clue as to how import the current interaction is - // https://github.com/facebook/react/tree/main/packages/react-reconciler#getcurrenteventpriority + noTimeout: -1, + // @ts-ignore untyped react-experimental options inspired by react-art + // TODO: add shell types for these and upstream to DefinitelyTyped + // https://github.com/facebook/react/blob/main/packages/react-art/src/ReactFiberConfigART.js + warnsIfNotActing: false, + shouldAttemptEagerTransition() { + return false + }, + getInstanceFromNode() {}, + beforeActiveInstanceBlur() {}, + afterActiveInstanceBlur() {}, + detachDeletedInstance() {}, + requestPostPaintCallback() {}, + maySuspendCommit() { + return false + }, + preloadInstance() { + return true // true indicates already loaded + }, + startSuspendingCommit() {}, + suspendInstance() {}, + waitForCommitToBeReady() {}, + NotPendingTransition: null, getCurrentEventPriority() { if (!globalScope) return DefaultEventPriority diff --git a/packages/fiber/src/index.tsx b/packages/fiber/src/index.tsx index f1b06cdb69..e1e447f490 100644 --- a/packages/fiber/src/index.tsx +++ b/packages/fiber/src/index.tsx @@ -1,3 +1,4 @@ +/// import * as ReactThreeFiber from './three-types' export { ReactThreeFiber } export * from './three-types' diff --git a/packages/fiber/src/native.tsx b/packages/fiber/src/native.tsx index da3384866e..7a31b6d627 100644 --- a/packages/fiber/src/native.tsx +++ b/packages/fiber/src/native.tsx @@ -1,3 +1,4 @@ +/// import * as ReactThreeFiber from './three-types' export { ReactThreeFiber } export * from './three-types' diff --git a/packages/test-renderer/package.json b/packages/test-renderer/package.json index 4a86c84780..3d4076bd82 100644 --- a/packages/test-renderer/package.json +++ b/packages/test-renderer/package.json @@ -22,7 +22,7 @@ ] }, "peerDependencies": { - "react": ">=18.0", + "react": ">=19.0", "@react-three/fiber": ">=9.0.0", "three": ">=0.141" } diff --git a/packages/test-renderer/src/helpers/waitFor.ts b/packages/test-renderer/src/helpers/waitFor.ts index d80d2aec30..1cb20c8361 100644 --- a/packages/test-renderer/src/helpers/waitFor.ts +++ b/packages/test-renderer/src/helpers/waitFor.ts @@ -1,6 +1,4 @@ -import * as React from 'react' - -const act: (cb: () => Promise) => Promise = (React as any).unstable_act +import { act } from '@react-three/fiber' export interface WaitOptions { interval?: number From a5d9b8a1d6a6ef9f4aec18f7e0bac34fe7bc371d Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Wed, 27 Mar 2024 18:30:22 -0500 Subject: [PATCH 02/29] fix: upgrade scheduler, use stable act --- packages/fiber/package.json | 2 +- packages/fiber/src/core/reconciler.tsx | 6 +- packages/fiber/src/core/utils.tsx | 2 +- yarn.lock | 96 ++++++++++++++------------ 4 files changed, 56 insertions(+), 50 deletions(-) diff --git a/packages/fiber/package.json b/packages/fiber/package.json index 7bbc71fafd..97fa4a2647 100644 --- a/packages/fiber/package.json +++ b/packages/fiber/package.json @@ -49,7 +49,7 @@ "its-fine": "^1.1.3", "react-reconciler": "0.0.0-experimental-2b036d3f1-20240327", "react-use-measure": "^2.1.1", - "scheduler": "^0.21.0", + "scheduler": "0.0.0-experimental-2b036d3f1-20240327", "suspend-react": "^0.1.3", "zustand": "^4.1.2" }, diff --git a/packages/fiber/src/core/reconciler.tsx b/packages/fiber/src/core/reconciler.tsx index c4c8aa585a..3bf8c11304 100644 --- a/packages/fiber/src/core/reconciler.tsx +++ b/packages/fiber/src/core/reconciler.tsx @@ -325,6 +325,7 @@ export const reconciler = Reconciler< HostConfig['noTimeout'] >({ isPrimaryRenderer: false, + warnsIfNotActing: false, supportsMutation: true, supportsPersistence: false, supportsHydration: false, @@ -422,11 +423,12 @@ export const reconciler = Reconciler< // @ts-ignore untyped react-experimental options inspired by react-art // TODO: add shell types for these and upstream to DefinitelyTyped // https://github.com/facebook/react/blob/main/packages/react-art/src/ReactFiberConfigART.js - warnsIfNotActing: false, shouldAttemptEagerTransition() { return false }, - getInstanceFromNode() {}, + getInstanceFromNode() { + throw new Error('Not implemented.') + }, beforeActiveInstanceBlur() {}, afterActiveInstanceBlur() {}, detachDeletedInstance() {}, diff --git a/packages/fiber/src/core/utils.tsx b/packages/fiber/src/core/utils.tsx index 291c70edcd..995ab208e8 100644 --- a/packages/fiber/src/core/utils.tsx +++ b/packages/fiber/src/core/utils.tsx @@ -38,7 +38,7 @@ export type Act = (cb: () => Promise) => Promise /** * Safely flush async effects when testing, simulating a legacy root. */ -export const act: Act = (React as any).unstable_act +export const act: Act = (React as any).act export type Camera = (THREE.OrthographicCamera | THREE.PerspectiveCamera) & { manual?: boolean } export const isOrthographicCamera = (def: Camera): def is THREE.OrthographicCamera => diff --git a/yarn.lock b/yarn.lock index 2d23fa2f2b..17737ac26f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2883,7 +2883,7 @@ resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.12.tgz#12bb1e2be27293c1406acb6af1c3f3a1481d98c6" integrity sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q== -"@types/react-dom@^18.0.0", "@types/react-dom@^18.0.1": +"@types/react-dom@18.2.22", "@types/react-dom@^18.0.0": version "18.2.22" resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.22.tgz#d332febf0815403de6da8a97e5fe282cbe609bae" integrity sha512-fHkBXPeNtfvri6gdsMYyW+dW7RXFo6Ad09nLFK0VQWR7yGLai/Cyvyj696gbwYvBnhGtevUG9cET0pmUbMtoPQ== @@ -2897,28 +2897,21 @@ dependencies: "@types/react" "*" -"@types/react-reconciler@^0.26.7": - version "0.26.7" - resolved "https://registry.yarnpkg.com/@types/react-reconciler/-/react-reconciler-0.26.7.tgz#0c4643f30821ae057e401b0d9037e03e8e9b2a36" - integrity sha512-mBDYl8x+oyPX/VBb3E638N0B7xG+SPk/EAMcVPeexqus/5aTpTphQi0curhhshOqRrc9t6OPoJfEUkbymse/lQ== - dependencies: - "@types/react" "*" - -"@types/react-reconciler@^0.28.0": +"@types/react-reconciler@^0.28.0", "@types/react-reconciler@^0.28.8": version "0.28.8" resolved "https://registry.yarnpkg.com/@types/react-reconciler/-/react-reconciler-0.28.8.tgz#e51710572bcccf214306833c2438575d310b3e98" integrity sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g== dependencies: "@types/react" "*" -"@types/react-test-renderer@^17.0.1": - version "17.0.9" - resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-17.0.9.tgz#da6d06f3f37eefab39386c390140374dc5db5b33" - integrity sha512-bOfxcu5oZ+KxvACScbkTwZ4eGCtZFTz4VZCOVAIfGbThxqiXSIGipKVG8ubaYBXquUSQROzNIUzviWdSnnAlzg== +"@types/react-test-renderer@18.0.7": + version "18.0.7" + resolved "https://registry.yarnpkg.com/@types/react-test-renderer/-/react-test-renderer-18.0.7.tgz#2cfe657adb3688cdf543995eceb2e062b5a68728" + integrity sha512-1+ANPOWc6rB3IkSnElhjv6VLlKg2dSv/OWClUyZimbLsQyBn8Js9Vtdsi3UICJ2rIQ3k2la06dkB+C92QfhKmg== dependencies: - "@types/react" "^17" + "@types/react" "*" -"@types/react@*", "@types/react@^18.0.5", "@types/react@^18.2.47": +"@types/react@*", "@types/react@18.2.73", "@types/react@^18.2.47": version "18.2.73" resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.73.tgz#0579548ad122660d99e00499d22e33b81e73ed94" integrity sha512-XcGdod0Jjv84HOC7N5ziY3x+qL0AfmubvKOZ9hJjJ2yd5EE+KYjWhdOjt387e9HPheHkdggF9atTifMRtyAaRA== @@ -2926,15 +2919,6 @@ "@types/prop-types" "*" csstype "^3.0.2" -"@types/react@^17": - version "17.0.80" - resolved "https://registry.yarnpkg.com/@types/react/-/react-17.0.80.tgz#a5dfc351d6a41257eb592d73d3a85d3b7dbcbb41" - integrity sha512-LrgHIu2lEtIo8M7d1FcI3BdwXWoRQwMoXOZ7+dPTW0lYREjmlHl3P0U1VD0i/9tppOuv8/sam7sOjx34TxSFbA== - dependencies: - "@types/prop-types" "*" - "@types/scheduler" "^0.16" - csstype "^3.0.2" - "@types/resolve@1.17.1": version "1.17.1" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" @@ -2942,10 +2926,10 @@ dependencies: "@types/node" "*" -"@types/scheduler@^0.16", "@types/scheduler@^0.16.2": - version "0.16.8" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.8.tgz#ce5ace04cfeabe7ef87c0091e50752e36707deff" - integrity sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A== +"@types/scheduler@0.23.0": + version "0.23.0" + resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.23.0.tgz#0a6655b3e2708eaabca00b7372fafd7a792a7b09" + integrity sha512-YIoDCTH3Af6XM5VuwGG/QL/CJqga1Zm3NkU3HZ4ZHK2fRMPYP1VczsTUqtsf43PH/iJNVlPHAo2oWX7BSdB2Hw== "@types/semver@^7.3.12", "@types/semver@^7.5.0": version "7.5.8" @@ -6502,7 +6486,7 @@ iterator.prototype@^1.1.2: reflect.getprototypeof "^1.0.4" set-function-name "^2.0.1" -its-fine@^1.0.6: +its-fine@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/its-fine/-/its-fine-1.1.3.tgz#703219c696b8093940ce8ce6c3a52258750d2989" integrity sha512-mncCA+yb6tuh5zK26cHqKlsSyxm4zdm4YgJpxycyx6p9fgxgK5PLu3iDVpKhzTn57Yrv3jk/r0aK0RFTT1OjFw== @@ -9071,7 +9055,14 @@ react-devtools-core@4.24.0: shell-quote "^1.6.1" ws "^7" -react-dom@^18.0.0, react-dom@^18.2.0: +react-dom@0.0.0-experimental-2b036d3f1-20240327: + version "0.0.0-experimental-2b036d3f1-20240327" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-0.0.0-experimental-2b036d3f1-20240327.tgz#e401773033483a299be84bc59f046ededfdd293a" + integrity sha512-H1rmytKh+RaPwFT67WoN43muY++tRe9G3QkVtgTMJ+AjlHWu4lpbAmDfluPqbcpMR5AvlFCzVqElOvhS3y6sZQ== + dependencies: + scheduler "0.0.0-experimental-2b036d3f1-20240327" + +react-dom@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== @@ -9079,7 +9070,12 @@ react-dom@^18.0.0, react-dom@^18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" -"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0, react-is@^18.2.0: +react-is@0.0.0-experimental-2b036d3f1-20240327: + version "0.0.0-experimental-2b036d3f1-20240327" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-0.0.0-experimental-2b036d3f1-20240327.tgz#fadd47021ca781547f81967f0d969cff83c3cef5" + integrity sha512-0FroWGa/MzJO4vBSxNzdJ6fmLkHb/xuDUMV/oS1+vPhjyKAMn7x23b75vgYaORYRbCTOHS7hwx13DHfU+XvnSw== + +"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.2.0.tgz#199431eeaaa2e09f86427efbb4f1473edb47609b" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== @@ -9153,13 +9149,12 @@ react-native@0.69.3: whatwg-fetch "^3.0.0" ws "^6.1.4" -react-reconciler@^0.27.0: - version "0.27.0" - resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.27.0.tgz#360124fdf2d76447c7491ee5f0e04503ed9acf5b" - integrity sha512-HmMDKciQjYmBRGuuhIaKA1ba/7a+UsM5FzOZsMO2JYHt9Jh8reCb7j1eDC95NOyUlKM9KRyvdx0flBuDvYSBoA== +react-reconciler@0.0.0-experimental-2b036d3f1-20240327: + version "0.0.0-experimental-2b036d3f1-20240327" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.0.0-experimental-2b036d3f1-20240327.tgz#72e31d374166a78d2f483f44629ef5d698e4bf6c" + integrity sha512-PR2i5jvoq9tnVI6eaZV16iQSYlevLvjUP+jb5MrdWgDFN5aYRe0tfgmmoH0UCBuMEDc9BzaRQS2MdvQcgXXXcg== dependencies: - loose-envify "^1.1.0" - scheduler "^0.21.0" + scheduler "0.0.0-experimental-2b036d3f1-20240327" react-refresh@^0.10.0: version "0.10.0" @@ -9176,7 +9171,7 @@ react-refresh@^0.4.0: resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.4.3.tgz#966f1750c191672e76e16c2efa569150cc73ab53" integrity sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA== -react-shallow-renderer@16.15.0, react-shallow-renderer@^16.15.0: +react-shallow-renderer@16.15.0: version "16.15.0" resolved "https://registry.yarnpkg.com/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz#48fb2cf9b23d23cde96708fe5273a7d3446f4457" integrity sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA== @@ -9184,14 +9179,13 @@ react-shallow-renderer@16.15.0, react-shallow-renderer@^16.15.0: object-assign "^4.1.1" react-is "^16.12.0 || ^17.0.0 || ^18.0.0" -react-test-renderer@^18.0.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-18.2.0.tgz#1dd912bd908ff26da5b9fca4fd1c489b9523d37e" - integrity sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA== +react-test-renderer@0.0.0-experimental-2b036d3f1-20240327: + version "0.0.0-experimental-2b036d3f1-20240327" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-0.0.0-experimental-2b036d3f1-20240327.tgz#a34b277662838d5ebbcb7175beffb943f56095c8" + integrity sha512-X2U8djkIaS5Hc1rzOigIq56frmOxZSGrJYiGRg4nAcgG1Ci6bLM7sjvnYIJz3Ho2l1GAJQ3Vs4udt7cU64AAZg== dependencies: - react-is "^18.2.0" - react-shallow-renderer "^16.15.0" - scheduler "^0.23.0" + react-is "0.0.0-experimental-2b036d3f1-20240327" + scheduler "0.0.0-experimental-2b036d3f1-20240327" react-use-measure@^2.1.1: version "2.1.1" @@ -9205,7 +9199,12 @@ react-use-refs@^1.0.1: resolved "https://registry.yarnpkg.com/react-use-refs/-/react-use-refs-1.0.1.tgz#44cab5f4764b3fa4a112189c0058fc8752d1eb2c" integrity sha512-zVmPRY5DJhzjGgmlIWw9pkdCNlIdrfsEXgdzcSau3MSpKPVuwRQU6DoviwH5f9n5Hc+M2HWW7mkRWbX+4eyC8w== -react@^18.0.0, react@^18.2.0: +react@0.0.0-experimental-2b036d3f1-20240327: + version "0.0.0-experimental-2b036d3f1-20240327" + resolved "https://registry.yarnpkg.com/react/-/react-0.0.0-experimental-2b036d3f1-20240327.tgz#0942a915478145debb52057c9c15b21739d87862" + integrity sha512-gXp1gsHJOVnV5cYMTDxTDOw5VuRIuDq1HmCNZJZNAVUaBB1FWjfBaXZIFG8E84kjfkA87xrLl+9qSdzrFUUHZA== + +react@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== @@ -9596,6 +9595,11 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" +scheduler@0.0.0-experimental-2b036d3f1-20240327: + version "0.0.0-experimental-2b036d3f1-20240327" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.0.0-experimental-2b036d3f1-20240327.tgz#d2d5fcc89febd5e6ce9e4fff8e3afd3f1dafb098" + integrity sha512-/rt/j4357yyLvsiceZKo2VKb/ltJJDfdW0ip6Z8VyChG39/qH2kayG1ecFp5Rk4LxtUtoioNG24jJhGXSIvZQA== + scheduler@^0.21.0: version "0.21.0" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.21.0.tgz#6fd2532ff5a6d877b6edb12f00d8ab7e8f308820" From 2619ee6ced1d2710662aaff700b4ccca797579d8 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Wed, 27 Mar 2024 18:40:58 -0500 Subject: [PATCH 03/29] experiment: remove context bridge to isolate hostcontext issue TODO: should be able to recreate in react-nil when we upgrade its reconciler --- packages/fiber/package.json | 1 - packages/fiber/src/core/utils.tsx | 26 -------------------------- packages/fiber/src/native/Canvas.tsx | 19 +++++-------------- packages/fiber/src/web/Canvas.tsx | 27 +++++---------------------- yarn.lock | 9 +-------- 5 files changed, 11 insertions(+), 71 deletions(-) diff --git a/packages/fiber/package.json b/packages/fiber/package.json index 97fa4a2647..dffbcf44ec 100644 --- a/packages/fiber/package.json +++ b/packages/fiber/package.json @@ -46,7 +46,6 @@ "@types/react-reconciler": "^0.28.8", "base64-js": "^1.5.1", "buffer": "^6.0.3", - "its-fine": "^1.1.3", "react-reconciler": "0.0.0-experimental-2b036d3f1-20240327", "react-use-measure": "^2.1.1", "scheduler": "0.0.0-experimental-2b036d3f1-20240327", diff --git a/packages/fiber/src/core/utils.tsx b/packages/fiber/src/core/utils.tsx index 995ab208e8..3ee3be936b 100644 --- a/packages/fiber/src/core/utils.tsx +++ b/packages/fiber/src/core/utils.tsx @@ -1,6 +1,5 @@ import * as THREE from 'three' import * as React from 'react' -import { useFiber, traverseFiber, useContextBridge } from 'its-fine' import { Instance, catalogue } from './reconciler' import type { Fiber } from 'react-reconciler' import type { EventHandlers } from './events' @@ -65,31 +64,6 @@ export function useMutableCallback(fn: T): React.MutableRefObject { return ref } -export type Bridge = React.FC<{ children?: React.ReactNode }> - -/** - * Bridges renderer Context and StrictMode from a primary renderer. - */ -export function useBridge(): Bridge { - const fiber = useFiber() - const ContextBridge = useContextBridge() - - return React.useMemo( - () => - ({ children }) => { - const strict = !!traverseFiber(fiber, true, (node) => node.type === React.StrictMode) - const Root = strict ? React.StrictMode : React.Fragment - - return ( - - {children} - - ) - }, - [fiber, ContextBridge], - ) -} - export type SetBlock = false | Promise | null export type UnblockProps = { set: React.Dispatch>; children: React.ReactNode } diff --git a/packages/fiber/src/native/Canvas.tsx b/packages/fiber/src/native/Canvas.tsx index f57a56f0f6..7932eb0bd9 100644 --- a/packages/fiber/src/native/Canvas.tsx +++ b/packages/fiber/src/native/Canvas.tsx @@ -2,8 +2,7 @@ import * as React from 'react' import * as THREE from 'three' import { View, ViewProps, ViewStyle, LayoutChangeEvent, StyleSheet, PixelRatio } from 'react-native' import { ExpoWebGLRenderingContext, GLView } from 'expo-gl' -import { FiberProvider } from 'its-fine' -import { SetBlock, Block, ErrorBoundary, useMutableCallback, useBridge } from '../core/utils' +import { SetBlock, Block, ErrorBoundary, useMutableCallback } from '../core/utils' import { extend, createRoot, unmountComponentAtNode, RenderProps, ReconcilerRoot } from '../core' import { createTouchEvents } from './events' import { RootState, Size } from '../core/store' @@ -48,8 +47,6 @@ const CanvasImpl = /*#__PURE__*/ React.forwardRef( // their own elements by using the createRoot API instead React.useMemo(() => extend(THREE as any), []) - const Bridge = useBridge() - const [{ width, height, top, left }, setSize] = React.useState({ width: 0, height: 0, top: 0, left: 0 }) const [canvas, setCanvas] = React.useState(null) const [bind, setBind] = React.useState() @@ -132,11 +129,9 @@ const CanvasImpl = /*#__PURE__*/ React.forwardRef( }, }) root.current.render( - - - }>{children} - - , + + }>{children} + , ) } @@ -161,9 +156,5 @@ const CanvasImpl = /*#__PURE__*/ React.forwardRef( * @see https://docs.pmnd.rs/react-three-fiber/api/canvas */ export const Canvas = React.forwardRef(function CanvasWrapper(props, ref) { - return ( - - - - ) + return }) diff --git a/packages/fiber/src/web/Canvas.tsx b/packages/fiber/src/web/Canvas.tsx index 3cf09b3cb1..77d784990d 100644 --- a/packages/fiber/src/web/Canvas.tsx +++ b/packages/fiber/src/web/Canvas.tsx @@ -2,16 +2,7 @@ import * as React from 'react' import * as THREE from 'three' import useMeasure from 'react-use-measure' import type { Options as ResizeOptions } from 'react-use-measure' -import { FiberProvider } from 'its-fine' -import { - isRef, - SetBlock, - Block, - ErrorBoundary, - useMutableCallback, - useIsomorphicLayoutEffect, - useBridge, -} from '../core/utils' +import { isRef, SetBlock, Block, ErrorBoundary, useMutableCallback, useIsomorphicLayoutEffect } from '../core/utils' import { ReconcilerRoot, extend, createRoot, unmountComponentAtNode, RenderProps } from '../core' import { createPointerEvents } from './events' import { DomEvent } from '../core/events' @@ -68,8 +59,6 @@ const CanvasImpl = /*#__PURE__*/ React.forwardRef(func // their own elements by using the createRoot API instead React.useMemo(() => extend(THREE as any), []) - const Bridge = useBridge() - const [containerRef, containerRect] = useMeasure({ scroll: true, debounce: { scroll: 50, resize: 0 }, ...resize }) const canvasRef = React.useRef(null!) const divRef = React.useRef(null!) @@ -128,11 +117,9 @@ const CanvasImpl = /*#__PURE__*/ React.forwardRef(func }, }) root.current.render( - - - }>{children} - - , + + }>{children} + , ) } }) @@ -172,9 +159,5 @@ const CanvasImpl = /*#__PURE__*/ React.forwardRef(func * @see https://docs.pmnd.rs/react-three-fiber/api/canvas */ export const Canvas = React.forwardRef(function CanvasWrapper(props, ref) { - return ( - - - - ) + return }) diff --git a/yarn.lock b/yarn.lock index 17737ac26f..0c48632591 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2897,7 +2897,7 @@ dependencies: "@types/react" "*" -"@types/react-reconciler@^0.28.0", "@types/react-reconciler@^0.28.8": +"@types/react-reconciler@^0.28.8": version "0.28.8" resolved "https://registry.yarnpkg.com/@types/react-reconciler/-/react-reconciler-0.28.8.tgz#e51710572bcccf214306833c2438575d310b3e98" integrity sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g== @@ -6486,13 +6486,6 @@ iterator.prototype@^1.1.2: reflect.getprototypeof "^1.0.4" set-function-name "^2.0.1" -its-fine@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/its-fine/-/its-fine-1.1.3.tgz#703219c696b8093940ce8ce6c3a52258750d2989" - integrity sha512-mncCA+yb6tuh5zK26cHqKlsSyxm4zdm4YgJpxycyx6p9fgxgK5PLu3iDVpKhzTn57Yrv3jk/r0aK0RFTT1OjFw== - dependencies: - "@types/react-reconciler" "^0.28.0" - jackspeak@^2.3.5: version "2.3.6" resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" From 056349ae9b2b1e042a19fff55219732fa00de3f7 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Wed, 27 Mar 2024 20:40:13 -0500 Subject: [PATCH 04/29] chore: cleanup --- packages/fiber/package.json | 1 + packages/fiber/src/core/utils.tsx | 26 ++++++++++++++++++++++++++ packages/fiber/src/native/Canvas.tsx | 19 ++++++++++++++----- packages/fiber/src/web/Canvas.tsx | 27 ++++++++++++++++++++++----- yarn.lock | 9 ++++++++- 5 files changed, 71 insertions(+), 11 deletions(-) diff --git a/packages/fiber/package.json b/packages/fiber/package.json index dffbcf44ec..97fa4a2647 100644 --- a/packages/fiber/package.json +++ b/packages/fiber/package.json @@ -46,6 +46,7 @@ "@types/react-reconciler": "^0.28.8", "base64-js": "^1.5.1", "buffer": "^6.0.3", + "its-fine": "^1.1.3", "react-reconciler": "0.0.0-experimental-2b036d3f1-20240327", "react-use-measure": "^2.1.1", "scheduler": "0.0.0-experimental-2b036d3f1-20240327", diff --git a/packages/fiber/src/core/utils.tsx b/packages/fiber/src/core/utils.tsx index 3ee3be936b..995ab208e8 100644 --- a/packages/fiber/src/core/utils.tsx +++ b/packages/fiber/src/core/utils.tsx @@ -1,5 +1,6 @@ import * as THREE from 'three' import * as React from 'react' +import { useFiber, traverseFiber, useContextBridge } from 'its-fine' import { Instance, catalogue } from './reconciler' import type { Fiber } from 'react-reconciler' import type { EventHandlers } from './events' @@ -64,6 +65,31 @@ export function useMutableCallback(fn: T): React.MutableRefObject { return ref } +export type Bridge = React.FC<{ children?: React.ReactNode }> + +/** + * Bridges renderer Context and StrictMode from a primary renderer. + */ +export function useBridge(): Bridge { + const fiber = useFiber() + const ContextBridge = useContextBridge() + + return React.useMemo( + () => + ({ children }) => { + const strict = !!traverseFiber(fiber, true, (node) => node.type === React.StrictMode) + const Root = strict ? React.StrictMode : React.Fragment + + return ( + + {children} + + ) + }, + [fiber, ContextBridge], + ) +} + export type SetBlock = false | Promise | null export type UnblockProps = { set: React.Dispatch>; children: React.ReactNode } diff --git a/packages/fiber/src/native/Canvas.tsx b/packages/fiber/src/native/Canvas.tsx index 7932eb0bd9..f57a56f0f6 100644 --- a/packages/fiber/src/native/Canvas.tsx +++ b/packages/fiber/src/native/Canvas.tsx @@ -2,7 +2,8 @@ import * as React from 'react' import * as THREE from 'three' import { View, ViewProps, ViewStyle, LayoutChangeEvent, StyleSheet, PixelRatio } from 'react-native' import { ExpoWebGLRenderingContext, GLView } from 'expo-gl' -import { SetBlock, Block, ErrorBoundary, useMutableCallback } from '../core/utils' +import { FiberProvider } from 'its-fine' +import { SetBlock, Block, ErrorBoundary, useMutableCallback, useBridge } from '../core/utils' import { extend, createRoot, unmountComponentAtNode, RenderProps, ReconcilerRoot } from '../core' import { createTouchEvents } from './events' import { RootState, Size } from '../core/store' @@ -47,6 +48,8 @@ const CanvasImpl = /*#__PURE__*/ React.forwardRef( // their own elements by using the createRoot API instead React.useMemo(() => extend(THREE as any), []) + const Bridge = useBridge() + const [{ width, height, top, left }, setSize] = React.useState({ width: 0, height: 0, top: 0, left: 0 }) const [canvas, setCanvas] = React.useState(null) const [bind, setBind] = React.useState() @@ -129,9 +132,11 @@ const CanvasImpl = /*#__PURE__*/ React.forwardRef( }, }) root.current.render( - - }>{children} - , + + + }>{children} + + , ) } @@ -156,5 +161,9 @@ const CanvasImpl = /*#__PURE__*/ React.forwardRef( * @see https://docs.pmnd.rs/react-three-fiber/api/canvas */ export const Canvas = React.forwardRef(function CanvasWrapper(props, ref) { - return + return ( + + + + ) }) diff --git a/packages/fiber/src/web/Canvas.tsx b/packages/fiber/src/web/Canvas.tsx index 77d784990d..3cf09b3cb1 100644 --- a/packages/fiber/src/web/Canvas.tsx +++ b/packages/fiber/src/web/Canvas.tsx @@ -2,7 +2,16 @@ import * as React from 'react' import * as THREE from 'three' import useMeasure from 'react-use-measure' import type { Options as ResizeOptions } from 'react-use-measure' -import { isRef, SetBlock, Block, ErrorBoundary, useMutableCallback, useIsomorphicLayoutEffect } from '../core/utils' +import { FiberProvider } from 'its-fine' +import { + isRef, + SetBlock, + Block, + ErrorBoundary, + useMutableCallback, + useIsomorphicLayoutEffect, + useBridge, +} from '../core/utils' import { ReconcilerRoot, extend, createRoot, unmountComponentAtNode, RenderProps } from '../core' import { createPointerEvents } from './events' import { DomEvent } from '../core/events' @@ -59,6 +68,8 @@ const CanvasImpl = /*#__PURE__*/ React.forwardRef(func // their own elements by using the createRoot API instead React.useMemo(() => extend(THREE as any), []) + const Bridge = useBridge() + const [containerRef, containerRect] = useMeasure({ scroll: true, debounce: { scroll: 50, resize: 0 }, ...resize }) const canvasRef = React.useRef(null!) const divRef = React.useRef(null!) @@ -117,9 +128,11 @@ const CanvasImpl = /*#__PURE__*/ React.forwardRef(func }, }) root.current.render( - - }>{children} - , + + + }>{children} + + , ) } }) @@ -159,5 +172,9 @@ const CanvasImpl = /*#__PURE__*/ React.forwardRef(func * @see https://docs.pmnd.rs/react-three-fiber/api/canvas */ export const Canvas = React.forwardRef(function CanvasWrapper(props, ref) { - return + return ( + + + + ) }) diff --git a/yarn.lock b/yarn.lock index 0c48632591..17737ac26f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2897,7 +2897,7 @@ dependencies: "@types/react" "*" -"@types/react-reconciler@^0.28.8": +"@types/react-reconciler@^0.28.0", "@types/react-reconciler@^0.28.8": version "0.28.8" resolved "https://registry.yarnpkg.com/@types/react-reconciler/-/react-reconciler-0.28.8.tgz#e51710572bcccf214306833c2438575d310b3e98" integrity sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g== @@ -6486,6 +6486,13 @@ iterator.prototype@^1.1.2: reflect.getprototypeof "^1.0.4" set-function-name "^2.0.1" +its-fine@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/its-fine/-/its-fine-1.1.3.tgz#703219c696b8093940ce8ce6c3a52258750d2989" + integrity sha512-mncCA+yb6tuh5zK26cHqKlsSyxm4zdm4YgJpxycyx6p9fgxgK5PLu3iDVpKhzTn57Yrv3jk/r0aK0RFTT1OjFw== + dependencies: + "@types/react-reconciler" "^0.28.0" + jackspeak@^2.3.5: version "2.3.6" resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" From f490c2e79e8b1d7cf4c2f1e055639468a3a3c477 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Sun, 31 Mar 2024 05:54:06 -0500 Subject: [PATCH 05/29] chore: upgrade to canary --- package.json | 6 ++-- packages/fiber/package.json | 4 +-- packages/shared/setupTests.ts | 6 ---- yarn.lock | 56 +++++++++++++++++------------------ 4 files changed, 33 insertions(+), 39 deletions(-) diff --git a/package.json b/package.json index 5796d911e5..7de03c234f 100644 --- a/package.json +++ b/package.json @@ -76,10 +76,10 @@ "lint-staged": "^12.3.7", "prettier": "^2.6.1", "pretty-quick": "^3.1.3", - "react": "0.0.0-experimental-2b036d3f1-20240327", - "react-dom": "0.0.0-experimental-2b036d3f1-20240327", + "react": "19.0.0-canary-a73c3450e-20240329", + "react-dom": "19.0.0-canary-a73c3450e-20240329", "react-native": "0.69.3", - "react-test-renderer": "0.0.0-experimental-2b036d3f1-20240327", + "react-test-renderer": "19.0.0-canary-a73c3450e-20240329", "regenerator-runtime": "^0.13.9", "three": "^0.141.0", "three-stdlib": "^2.13.0", diff --git a/packages/fiber/package.json b/packages/fiber/package.json index 97fa4a2647..55efd548c1 100644 --- a/packages/fiber/package.json +++ b/packages/fiber/package.json @@ -47,9 +47,9 @@ "base64-js": "^1.5.1", "buffer": "^6.0.3", "its-fine": "^1.1.3", - "react-reconciler": "0.0.0-experimental-2b036d3f1-20240327", + "react-reconciler": "0.31.0-canary-a73c3450e-20240329", "react-use-measure": "^2.1.1", - "scheduler": "0.0.0-experimental-2b036d3f1-20240327", + "scheduler": "0.25.0-canary-a73c3450e-20240329", "suspend-react": "^0.1.3", "zustand": "^4.1.2" }, diff --git a/packages/shared/setupTests.ts b/packages/shared/setupTests.ts index 7bfa887704..0e90c61b6a 100644 --- a/packages/shared/setupTests.ts +++ b/packages/shared/setupTests.ts @@ -10,12 +10,6 @@ declare global { // Let React know that we'll be testing effectful components global.IS_REACT_ACT_ENVIRONMENT = true -// Mock scheduler to test React features -jest.mock('scheduler', () => ({ - ...jest.requireActual('scheduler/unstable_mock'), - unstable_scheduleCallback: (_: any, callback: () => void) => callback(), -})) - // ESLint is broken atm -- TypeError: The argument 'filename' must be a file URL object, file URL string, or absolute path string. Received 'http://localhost/eslintrc.cjs' jest.mock('eslint', () => ({ RuleTester: class { diff --git a/yarn.lock b/yarn.lock index 17737ac26f..4cd7dc7971 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9055,12 +9055,12 @@ react-devtools-core@4.24.0: shell-quote "^1.6.1" ws "^7" -react-dom@0.0.0-experimental-2b036d3f1-20240327: - version "0.0.0-experimental-2b036d3f1-20240327" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-0.0.0-experimental-2b036d3f1-20240327.tgz#e401773033483a299be84bc59f046ededfdd293a" - integrity sha512-H1rmytKh+RaPwFT67WoN43muY++tRe9G3QkVtgTMJ+AjlHWu4lpbAmDfluPqbcpMR5AvlFCzVqElOvhS3y6sZQ== +react-dom@19.0.0-canary-a73c3450e-20240329: + version "19.0.0-canary-a73c3450e-20240329" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0-canary-a73c3450e-20240329.tgz#f4662b926443757e09d5ba9244c324f26725f7be" + integrity sha512-q2faOx36WhjxluDgp0KL6lskQaMCHudI6Rui50wWdSIJnPGGin25SnGSugPWg//bUFRtIkqWDS8/+twfvydwRw== dependencies: - scheduler "0.0.0-experimental-2b036d3f1-20240327" + scheduler "0.25.0-canary-a73c3450e-20240329" react-dom@^18.2.0: version "18.2.0" @@ -9070,10 +9070,10 @@ react-dom@^18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" -react-is@0.0.0-experimental-2b036d3f1-20240327: - version "0.0.0-experimental-2b036d3f1-20240327" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-0.0.0-experimental-2b036d3f1-20240327.tgz#fadd47021ca781547f81967f0d969cff83c3cef5" - integrity sha512-0FroWGa/MzJO4vBSxNzdJ6fmLkHb/xuDUMV/oS1+vPhjyKAMn7x23b75vgYaORYRbCTOHS7hwx13DHfU+XvnSw== +react-is@19.0.0-canary-a73c3450e-20240329: + version "19.0.0-canary-a73c3450e-20240329" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.0.0-canary-a73c3450e-20240329.tgz#123f6639081892cd072e7d5bd5104ea3437312c4" + integrity sha512-Y0jHbORMyh5A3DDfInyiH1hbNqH/lBj1bMVEGqCtei5ajDqGSmMayG7nFKDmXVu7Or99QxhmfSmIn5FAAhpI8g== "react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0: version "18.2.0" @@ -9149,12 +9149,12 @@ react-native@0.69.3: whatwg-fetch "^3.0.0" ws "^6.1.4" -react-reconciler@0.0.0-experimental-2b036d3f1-20240327: - version "0.0.0-experimental-2b036d3f1-20240327" - resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.0.0-experimental-2b036d3f1-20240327.tgz#72e31d374166a78d2f483f44629ef5d698e4bf6c" - integrity sha512-PR2i5jvoq9tnVI6eaZV16iQSYlevLvjUP+jb5MrdWgDFN5aYRe0tfgmmoH0UCBuMEDc9BzaRQS2MdvQcgXXXcg== +react-reconciler@0.31.0-canary-a73c3450e-20240329: + version "0.31.0-canary-a73c3450e-20240329" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.31.0-canary-a73c3450e-20240329.tgz#a6a42ec70cbbdce8027c65449ead741aac0e9dbb" + integrity sha512-ztIqc3Wbk0UNgLebHOmC6u7XMjEXWporBy2KZr0HumMTlpz6RMuDA2mKXh6X7z32AWL+Kfjsr/IrGK8FRoHPHw== dependencies: - scheduler "0.0.0-experimental-2b036d3f1-20240327" + scheduler "0.25.0-canary-a73c3450e-20240329" react-refresh@^0.10.0: version "0.10.0" @@ -9179,13 +9179,13 @@ react-shallow-renderer@16.15.0: object-assign "^4.1.1" react-is "^16.12.0 || ^17.0.0 || ^18.0.0" -react-test-renderer@0.0.0-experimental-2b036d3f1-20240327: - version "0.0.0-experimental-2b036d3f1-20240327" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-0.0.0-experimental-2b036d3f1-20240327.tgz#a34b277662838d5ebbcb7175beffb943f56095c8" - integrity sha512-X2U8djkIaS5Hc1rzOigIq56frmOxZSGrJYiGRg4nAcgG1Ci6bLM7sjvnYIJz3Ho2l1GAJQ3Vs4udt7cU64AAZg== +react-test-renderer@19.0.0-canary-a73c3450e-20240329: + version "19.0.0-canary-a73c3450e-20240329" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-19.0.0-canary-a73c3450e-20240329.tgz#4ca608f4dd3139bebffa1165f07207f3af86e88b" + integrity sha512-rdAwuYKECX/dxE7Stky5iWXFDTkFB58Urck6hHiTDgk2MSs6v8ugzdcua9n49p19OwGQx5zjNshs7FypTm1m5Q== dependencies: - react-is "0.0.0-experimental-2b036d3f1-20240327" - scheduler "0.0.0-experimental-2b036d3f1-20240327" + react-is "19.0.0-canary-a73c3450e-20240329" + scheduler "0.25.0-canary-a73c3450e-20240329" react-use-measure@^2.1.1: version "2.1.1" @@ -9199,10 +9199,10 @@ react-use-refs@^1.0.1: resolved "https://registry.yarnpkg.com/react-use-refs/-/react-use-refs-1.0.1.tgz#44cab5f4764b3fa4a112189c0058fc8752d1eb2c" integrity sha512-zVmPRY5DJhzjGgmlIWw9pkdCNlIdrfsEXgdzcSau3MSpKPVuwRQU6DoviwH5f9n5Hc+M2HWW7mkRWbX+4eyC8w== -react@0.0.0-experimental-2b036d3f1-20240327: - version "0.0.0-experimental-2b036d3f1-20240327" - resolved "https://registry.yarnpkg.com/react/-/react-0.0.0-experimental-2b036d3f1-20240327.tgz#0942a915478145debb52057c9c15b21739d87862" - integrity sha512-gXp1gsHJOVnV5cYMTDxTDOw5VuRIuDq1HmCNZJZNAVUaBB1FWjfBaXZIFG8E84kjfkA87xrLl+9qSdzrFUUHZA== +react@19.0.0-canary-a73c3450e-20240329: + version "19.0.0-canary-a73c3450e-20240329" + resolved "https://registry.yarnpkg.com/react/-/react-19.0.0-canary-a73c3450e-20240329.tgz#8c1eda3dd97ac19c9d0b69810b7ce464d897cd46" + integrity sha512-4EaLxQPKVx5PlXbywHqJLZw+xga63s4+C5f8ZV9X69OegxQSM4xc8F5ilZJsmphMN6CYWH591Lz2wjgSSVFW/A== react@^18.2.0: version "18.2.0" @@ -9595,10 +9595,10 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -scheduler@0.0.0-experimental-2b036d3f1-20240327: - version "0.0.0-experimental-2b036d3f1-20240327" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.0.0-experimental-2b036d3f1-20240327.tgz#d2d5fcc89febd5e6ce9e4fff8e3afd3f1dafb098" - integrity sha512-/rt/j4357yyLvsiceZKo2VKb/ltJJDfdW0ip6Z8VyChG39/qH2kayG1ecFp5Rk4LxtUtoioNG24jJhGXSIvZQA== +scheduler@0.25.0-canary-a73c3450e-20240329: + version "0.25.0-canary-a73c3450e-20240329" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-canary-a73c3450e-20240329.tgz#7d256d16f0efb53a25f91eb7fcba2894b9fcdf8c" + integrity sha512-WwRs7XOrOHnINNyRClVgzRsZk1+Lzc7Jc3dcmLx7cUeK+LvVy9y95QqYzWOYcjH9JHs0jIcfjMOsddKJE7ttXw== scheduler@^0.21.0: version "0.21.0" From c0f291c55333f9d230d838cd70ff00fc59489ad5 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Sun, 31 Mar 2024 06:04:52 -0500 Subject: [PATCH 06/29] fix: catch null in commitUpdate from prepareUpdate Need to confirm behavior change in 19. Seems like a reconciler regression as before, null would prevent commitUpdate from being reachable. --- packages/fiber/src/core/reconciler.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/fiber/src/core/reconciler.tsx b/packages/fiber/src/core/reconciler.tsx index 3bf8c11304..d1a05b89d6 100644 --- a/packages/fiber/src/core/reconciler.tsx +++ b/packages/fiber/src/core/reconciler.tsx @@ -374,6 +374,8 @@ export const reconciler = Reconciler< return null }, commitUpdate(instance, diff, type, _oldProps, newProps, fiber) { + if (!diff) return + const [reconstruct, changedProps] = diff! // Reconstruct when args or Date: Sun, 31 Mar 2024 06:05:24 -0500 Subject: [PATCH 07/29] chore(RTTR): update snapshot Reconciler behavior changed here. Confirm with upstream this is expected. --- .../__snapshots__/RTTR.core.test.tsx.snap | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/test-renderer/src/__tests__/__snapshots__/RTTR.core.test.tsx.snap b/packages/test-renderer/src/__tests__/__snapshots__/RTTR.core.test.tsx.snap index 6d7b8f81dc..d53343c9d4 100644 --- a/packages/test-renderer/src/__tests__/__snapshots__/RTTR.core.test.tsx.snap +++ b/packages/test-renderer/src/__tests__/__snapshots__/RTTR.core.test.tsx.snap @@ -389,20 +389,20 @@ Array [ Object { "children": Array [], "props": Object { - "attach": "material", + "args": Array [ + 6, + 6, + ], + "attach": "geometry", }, - "type": "meshBasicMaterial", + "type": "boxGeometry", }, Object { "children": Array [], "props": Object { - "args": Array [ - 2, - 2, - ], - "attach": "geometry", + "attach": "material", }, - "type": "boxGeometry", + "type": "meshBasicMaterial", }, ], "props": Object { From 0e7597fa42b4b5c3417accd9fc33f399db26975e Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Sat, 6 Apr 2024 02:09:20 -0500 Subject: [PATCH 08/29] chore: upgrade canary --- package.json | 6 ++-- packages/fiber/package.json | 4 +-- yarn.lock | 56 ++++++++++++++++++------------------- 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/package.json b/package.json index 7de03c234f..0ecac2ed87 100644 --- a/package.json +++ b/package.json @@ -76,10 +76,10 @@ "lint-staged": "^12.3.7", "prettier": "^2.6.1", "pretty-quick": "^3.1.3", - "react": "19.0.0-canary-a73c3450e-20240329", - "react-dom": "19.0.0-canary-a73c3450e-20240329", + "react": "19.0.0-canary-e3ebcd54b-20240405", + "react-dom": "19.0.0-canary-e3ebcd54b-20240405", "react-native": "0.69.3", - "react-test-renderer": "19.0.0-canary-a73c3450e-20240329", + "react-test-renderer": "19.0.0-canary-e3ebcd54b-20240405", "regenerator-runtime": "^0.13.9", "three": "^0.141.0", "three-stdlib": "^2.13.0", diff --git a/packages/fiber/package.json b/packages/fiber/package.json index 55efd548c1..4a4d0a2d4c 100644 --- a/packages/fiber/package.json +++ b/packages/fiber/package.json @@ -47,9 +47,9 @@ "base64-js": "^1.5.1", "buffer": "^6.0.3", "its-fine": "^1.1.3", - "react-reconciler": "0.31.0-canary-a73c3450e-20240329", + "react-reconciler": "0.31.0-canary-e3ebcd54b-20240405", "react-use-measure": "^2.1.1", - "scheduler": "0.25.0-canary-a73c3450e-20240329", + "scheduler": "0.25.0-canary-e3ebcd54b-20240405", "suspend-react": "^0.1.3", "zustand": "^4.1.2" }, diff --git a/yarn.lock b/yarn.lock index 4cd7dc7971..765fcdc25a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9055,12 +9055,12 @@ react-devtools-core@4.24.0: shell-quote "^1.6.1" ws "^7" -react-dom@19.0.0-canary-a73c3450e-20240329: - version "19.0.0-canary-a73c3450e-20240329" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0-canary-a73c3450e-20240329.tgz#f4662b926443757e09d5ba9244c324f26725f7be" - integrity sha512-q2faOx36WhjxluDgp0KL6lskQaMCHudI6Rui50wWdSIJnPGGin25SnGSugPWg//bUFRtIkqWDS8/+twfvydwRw== +react-dom@19.0.0-canary-e3ebcd54b-20240405: + version "19.0.0-canary-e3ebcd54b-20240405" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0-canary-e3ebcd54b-20240405.tgz#81715e2bff9b80e8b0224d0275af68e87ecc7288" + integrity sha512-rLmRhyj0CiO0H5lWTIeP1izYsjjp03Dt36dufxjlPWVVpbHdKoIHUU/cDNin7Le2H+hNQfDQk7VcOb6Z7Z+W0g== dependencies: - scheduler "0.25.0-canary-a73c3450e-20240329" + scheduler "0.25.0-canary-e3ebcd54b-20240405" react-dom@^18.2.0: version "18.2.0" @@ -9070,10 +9070,10 @@ react-dom@^18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" -react-is@19.0.0-canary-a73c3450e-20240329: - version "19.0.0-canary-a73c3450e-20240329" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.0.0-canary-a73c3450e-20240329.tgz#123f6639081892cd072e7d5bd5104ea3437312c4" - integrity sha512-Y0jHbORMyh5A3DDfInyiH1hbNqH/lBj1bMVEGqCtei5ajDqGSmMayG7nFKDmXVu7Or99QxhmfSmIn5FAAhpI8g== +react-is@19.0.0-canary-e3ebcd54b-20240405: + version "19.0.0-canary-e3ebcd54b-20240405" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.0.0-canary-e3ebcd54b-20240405.tgz#2643674cf24d3860b420fc2fb7163dd47437b92c" + integrity sha512-45qdOGNH1SJRM9eIqWOz4OLU/96euF/s/7kwlcthLnQkJpIIG4zfyljM5g2jh9QcoAxG9jCLTEJJWEGvZhiHEA== "react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0: version "18.2.0" @@ -9149,12 +9149,12 @@ react-native@0.69.3: whatwg-fetch "^3.0.0" ws "^6.1.4" -react-reconciler@0.31.0-canary-a73c3450e-20240329: - version "0.31.0-canary-a73c3450e-20240329" - resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.31.0-canary-a73c3450e-20240329.tgz#a6a42ec70cbbdce8027c65449ead741aac0e9dbb" - integrity sha512-ztIqc3Wbk0UNgLebHOmC6u7XMjEXWporBy2KZr0HumMTlpz6RMuDA2mKXh6X7z32AWL+Kfjsr/IrGK8FRoHPHw== +react-reconciler@0.31.0-canary-e3ebcd54b-20240405: + version "0.31.0-canary-e3ebcd54b-20240405" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.31.0-canary-e3ebcd54b-20240405.tgz#f6817c3af7df4f74a8ffcb1bd7483b14e490146d" + integrity sha512-WyopqukXMIawX/tEYD6BVjzp+yeNK6mnR1qjQfxqqegrDmkOCrl8abqie1oDQa8cZMViZ1qeYJkDSnOgbyCZtA== dependencies: - scheduler "0.25.0-canary-a73c3450e-20240329" + scheduler "0.25.0-canary-e3ebcd54b-20240405" react-refresh@^0.10.0: version "0.10.0" @@ -9179,13 +9179,13 @@ react-shallow-renderer@16.15.0: object-assign "^4.1.1" react-is "^16.12.0 || ^17.0.0 || ^18.0.0" -react-test-renderer@19.0.0-canary-a73c3450e-20240329: - version "19.0.0-canary-a73c3450e-20240329" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-19.0.0-canary-a73c3450e-20240329.tgz#4ca608f4dd3139bebffa1165f07207f3af86e88b" - integrity sha512-rdAwuYKECX/dxE7Stky5iWXFDTkFB58Urck6hHiTDgk2MSs6v8ugzdcua9n49p19OwGQx5zjNshs7FypTm1m5Q== +react-test-renderer@19.0.0-canary-e3ebcd54b-20240405: + version "19.0.0-canary-e3ebcd54b-20240405" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-19.0.0-canary-e3ebcd54b-20240405.tgz#be67b62390dd2dfb3b16f652c0a1190caa37ce01" + integrity sha512-BncVgOLQ7DcOQ/u+2IXuYmiBQM3Q0SH7esZ9xnQNBAHIVlZVlhOXTuOVrXekxeMbPmLyborCErvOmMKY4cl3ng== dependencies: - react-is "19.0.0-canary-a73c3450e-20240329" - scheduler "0.25.0-canary-a73c3450e-20240329" + react-is "19.0.0-canary-e3ebcd54b-20240405" + scheduler "0.25.0-canary-e3ebcd54b-20240405" react-use-measure@^2.1.1: version "2.1.1" @@ -9199,10 +9199,10 @@ react-use-refs@^1.0.1: resolved "https://registry.yarnpkg.com/react-use-refs/-/react-use-refs-1.0.1.tgz#44cab5f4764b3fa4a112189c0058fc8752d1eb2c" integrity sha512-zVmPRY5DJhzjGgmlIWw9pkdCNlIdrfsEXgdzcSau3MSpKPVuwRQU6DoviwH5f9n5Hc+M2HWW7mkRWbX+4eyC8w== -react@19.0.0-canary-a73c3450e-20240329: - version "19.0.0-canary-a73c3450e-20240329" - resolved "https://registry.yarnpkg.com/react/-/react-19.0.0-canary-a73c3450e-20240329.tgz#8c1eda3dd97ac19c9d0b69810b7ce464d897cd46" - integrity sha512-4EaLxQPKVx5PlXbywHqJLZw+xga63s4+C5f8ZV9X69OegxQSM4xc8F5ilZJsmphMN6CYWH591Lz2wjgSSVFW/A== +react@19.0.0-canary-e3ebcd54b-20240405: + version "19.0.0-canary-e3ebcd54b-20240405" + resolved "https://registry.yarnpkg.com/react/-/react-19.0.0-canary-e3ebcd54b-20240405.tgz#f0eac09c91af3d7c3af8ecea09681ec232b75bc1" + integrity sha512-cJE4hNNSAZSkMGplceUigybvn9cnUrvgFuljOahB2LStTLGVK4bZcszJ0sppwPbr9XVelEvyNmKj/0HRQPc53w== react@^18.2.0: version "18.2.0" @@ -9595,10 +9595,10 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -scheduler@0.25.0-canary-a73c3450e-20240329: - version "0.25.0-canary-a73c3450e-20240329" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-canary-a73c3450e-20240329.tgz#7d256d16f0efb53a25f91eb7fcba2894b9fcdf8c" - integrity sha512-WwRs7XOrOHnINNyRClVgzRsZk1+Lzc7Jc3dcmLx7cUeK+LvVy9y95QqYzWOYcjH9JHs0jIcfjMOsddKJE7ttXw== +scheduler@0.25.0-canary-e3ebcd54b-20240405: + version "0.25.0-canary-e3ebcd54b-20240405" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-canary-e3ebcd54b-20240405.tgz#053706da115c7877955c516ed9807f3f591e8ba2" + integrity sha512-xI+jJ4zTJfULtwgO1GgoT3I3MiEV1OisswVdS9LdoQr0QwKpH0Al7IlW68R5ceIXE/a8RfuYZc7Aq34DwBqr7A== scheduler@^0.21.0: version "0.21.0" From 03d7828e0ad6fd2a589d83ac7899745bc5731445 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Tue, 9 Apr 2024 15:52:47 -0500 Subject: [PATCH 09/29] chore: update canary, implement updatePriority tracking --- package.json | 6 +-- packages/fiber/package.json | 6 +-- packages/fiber/src/core/reconciler.tsx | 29 ++++++++--- yarn.lock | 69 +++++++++++++------------- 4 files changed, 62 insertions(+), 48 deletions(-) diff --git a/package.json b/package.json index 0ecac2ed87..c9ca4521e4 100644 --- a/package.json +++ b/package.json @@ -76,10 +76,10 @@ "lint-staged": "^12.3.7", "prettier": "^2.6.1", "pretty-quick": "^3.1.3", - "react": "19.0.0-canary-e3ebcd54b-20240405", - "react-dom": "19.0.0-canary-e3ebcd54b-20240405", + "react": "19.0.0-canary-4c12339ce-20240408", + "react-dom": "19.0.0-canary-4c12339ce-20240408", "react-native": "0.69.3", - "react-test-renderer": "19.0.0-canary-e3ebcd54b-20240405", + "react-test-renderer": "19.0.0-canary-4c12339ce-20240408", "regenerator-runtime": "^0.13.9", "three": "^0.141.0", "three-stdlib": "^2.13.0", diff --git a/packages/fiber/package.json b/packages/fiber/package.json index 4a4d0a2d4c..9a1005134b 100644 --- a/packages/fiber/package.json +++ b/packages/fiber/package.json @@ -46,10 +46,10 @@ "@types/react-reconciler": "^0.28.8", "base64-js": "^1.5.1", "buffer": "^6.0.3", - "its-fine": "^1.1.3", - "react-reconciler": "0.31.0-canary-e3ebcd54b-20240405", + "its-fine": "^1.2.0", + "react-reconciler": "0.31.0-canary-4c12339ce-20240408", "react-use-measure": "^2.1.1", - "scheduler": "0.25.0-canary-e3ebcd54b-20240405", + "scheduler": "0.25.0-canary-4c12339ce-20240408", "suspend-react": "^0.1.3", "zustand": "^4.1.2" }, diff --git a/packages/fiber/src/core/reconciler.tsx b/packages/fiber/src/core/reconciler.tsx index d1a05b89d6..95ef9a3d5f 100644 --- a/packages/fiber/src/core/reconciler.tsx +++ b/packages/fiber/src/core/reconciler.tsx @@ -1,7 +1,13 @@ import * as THREE from 'three' import * as React from 'react' import Reconciler from 'react-reconciler' -import { ContinuousEventPriority, DiscreteEventPriority, DefaultEventPriority } from 'react-reconciler/constants' +import { + // @ts-ignore + NoEventPriority, + ContinuousEventPriority, + DiscreteEventPriority, + DefaultEventPriority, +} from 'react-reconciler/constants' import { unstable_IdlePriority as idlePriority, unstable_scheduleCallback as scheduleCallback } from 'scheduler' import { diffProps, @@ -309,6 +315,8 @@ function switchInstance( const handleTextInstance = () => console.warn('R3F: Text is not allowed in JSX! This could be stray whitespace or characters.') +let currentUpdatePriority: number = NoEventPriority + export const reconciler = Reconciler< HostConfig['type'], HostConfig['props'], @@ -422,18 +430,16 @@ export const reconciler = Reconciler< scheduleTimeout: (typeof setTimeout === 'function' ? setTimeout : undefined) as any, cancelTimeout: (typeof clearTimeout === 'function' ? clearTimeout : undefined) as any, noTimeout: -1, + getInstanceFromNode: () => null, + beforeActiveInstanceBlur() {}, + afterActiveInstanceBlur() {}, + detachDeletedInstance() {}, // @ts-ignore untyped react-experimental options inspired by react-art // TODO: add shell types for these and upstream to DefinitelyTyped // https://github.com/facebook/react/blob/main/packages/react-art/src/ReactFiberConfigART.js shouldAttemptEagerTransition() { return false }, - getInstanceFromNode() { - throw new Error('Not implemented.') - }, - beforeActiveInstanceBlur() {}, - afterActiveInstanceBlur() {}, - detachDeletedInstance() {}, requestPostPaintCallback() {}, maySuspendCommit() { return false @@ -445,7 +451,14 @@ export const reconciler = Reconciler< suspendInstance() {}, waitForCommitToBeReady() {}, NotPendingTransition: null, - getCurrentEventPriority() { + setCurrentUpdatePriority(newPriority: number) { + currentUpdatePriority = newPriority + }, + getCurrentUpdatePriority() { + return currentUpdatePriority + }, + resolveUpdatePriority() { + if (currentUpdatePriority) return currentUpdatePriority if (!globalScope) return DefaultEventPriority const name = globalScope.event?.type diff --git a/yarn.lock b/yarn.lock index 765fcdc25a..8be867aaf3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2897,7 +2897,7 @@ dependencies: "@types/react" "*" -"@types/react-reconciler@^0.28.0", "@types/react-reconciler@^0.28.8": +"@types/react-reconciler@*", "@types/react-reconciler@^0.28.8": version "0.28.8" resolved "https://registry.yarnpkg.com/@types/react-reconciler/-/react-reconciler-0.28.8.tgz#e51710572bcccf214306833c2438575d310b3e98" integrity sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g== @@ -6486,12 +6486,13 @@ iterator.prototype@^1.1.2: reflect.getprototypeof "^1.0.4" set-function-name "^2.0.1" -its-fine@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/its-fine/-/its-fine-1.1.3.tgz#703219c696b8093940ce8ce6c3a52258750d2989" - integrity sha512-mncCA+yb6tuh5zK26cHqKlsSyxm4zdm4YgJpxycyx6p9fgxgK5PLu3iDVpKhzTn57Yrv3jk/r0aK0RFTT1OjFw== +its-fine@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/its-fine/-/its-fine-1.2.0.tgz#989805d4f940cba5c8c059ecf4a94a054882e354" + integrity sha512-518vLgHK/dgGxyZj4MdLrDRryziqR1M+JbVtjw1tmdgvZQYsJvB2Leoe2qFOHPalZ5KiAOK18wTmIC0XszYc0w== dependencies: - "@types/react-reconciler" "^0.28.0" + "@types/react" "*" + "@types/react-reconciler" "*" jackspeak@^2.3.5: version "2.3.6" @@ -9055,12 +9056,12 @@ react-devtools-core@4.24.0: shell-quote "^1.6.1" ws "^7" -react-dom@19.0.0-canary-e3ebcd54b-20240405: - version "19.0.0-canary-e3ebcd54b-20240405" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0-canary-e3ebcd54b-20240405.tgz#81715e2bff9b80e8b0224d0275af68e87ecc7288" - integrity sha512-rLmRhyj0CiO0H5lWTIeP1izYsjjp03Dt36dufxjlPWVVpbHdKoIHUU/cDNin7Le2H+hNQfDQk7VcOb6Z7Z+W0g== +react-dom@19.0.0-canary-4c12339ce-20240408: + version "19.0.0-canary-4c12339ce-20240408" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0-canary-4c12339ce-20240408.tgz#86e23459210ed40500b2424e4c3a218782bfbf7f" + integrity sha512-dMttAQ6IA63sUCCw+ZBE4QBO87PGjEcgNhNTYGHmw15ONqeUKQ8XmGEUKBOTmux7CIV9gdmKr3BGUFdGeT5ERA== dependencies: - scheduler "0.25.0-canary-e3ebcd54b-20240405" + scheduler "0.25.0-canary-4c12339ce-20240408" react-dom@^18.2.0: version "18.2.0" @@ -9070,10 +9071,10 @@ react-dom@^18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" -react-is@19.0.0-canary-e3ebcd54b-20240405: - version "19.0.0-canary-e3ebcd54b-20240405" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.0.0-canary-e3ebcd54b-20240405.tgz#2643674cf24d3860b420fc2fb7163dd47437b92c" - integrity sha512-45qdOGNH1SJRM9eIqWOz4OLU/96euF/s/7kwlcthLnQkJpIIG4zfyljM5g2jh9QcoAxG9jCLTEJJWEGvZhiHEA== +react-is@19.0.0-canary-4c12339ce-20240408: + version "19.0.0-canary-4c12339ce-20240408" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.0.0-canary-4c12339ce-20240408.tgz#b5c74163e10c3ac56daad6c3568698fa0855013b" + integrity sha512-/QOVyOc9Xbynb9cE81YErLeXuRacWdXS617ecJukn17VQWVjdEyHYUwHZkGA+REOxgBzRIjaODy74p8L72NKTg== "react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0: version "18.2.0" @@ -9149,12 +9150,12 @@ react-native@0.69.3: whatwg-fetch "^3.0.0" ws "^6.1.4" -react-reconciler@0.31.0-canary-e3ebcd54b-20240405: - version "0.31.0-canary-e3ebcd54b-20240405" - resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.31.0-canary-e3ebcd54b-20240405.tgz#f6817c3af7df4f74a8ffcb1bd7483b14e490146d" - integrity sha512-WyopqukXMIawX/tEYD6BVjzp+yeNK6mnR1qjQfxqqegrDmkOCrl8abqie1oDQa8cZMViZ1qeYJkDSnOgbyCZtA== +react-reconciler@0.31.0-canary-4c12339ce-20240408: + version "0.31.0-canary-4c12339ce-20240408" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.31.0-canary-4c12339ce-20240408.tgz#18a2f8ee9a535ae4da09fe9fc185f8bdc08360f5" + integrity sha512-mi9Ybw+UexT5qW+WlBIID7PUi7Etqv+792m33KpjNQ3iJOPlRx35S/sz6xE1MMB81RxL8Z54yhTY45zoJuGaOA== dependencies: - scheduler "0.25.0-canary-e3ebcd54b-20240405" + scheduler "0.25.0-canary-4c12339ce-20240408" react-refresh@^0.10.0: version "0.10.0" @@ -9179,13 +9180,13 @@ react-shallow-renderer@16.15.0: object-assign "^4.1.1" react-is "^16.12.0 || ^17.0.0 || ^18.0.0" -react-test-renderer@19.0.0-canary-e3ebcd54b-20240405: - version "19.0.0-canary-e3ebcd54b-20240405" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-19.0.0-canary-e3ebcd54b-20240405.tgz#be67b62390dd2dfb3b16f652c0a1190caa37ce01" - integrity sha512-BncVgOLQ7DcOQ/u+2IXuYmiBQM3Q0SH7esZ9xnQNBAHIVlZVlhOXTuOVrXekxeMbPmLyborCErvOmMKY4cl3ng== +react-test-renderer@19.0.0-canary-4c12339ce-20240408: + version "19.0.0-canary-4c12339ce-20240408" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-19.0.0-canary-4c12339ce-20240408.tgz#0bc916744c340bdaf1ba8aecce8efeaa80575e53" + integrity sha512-FwPMh2nn0nAsdhwM5tHXJmQCidfDlk2p4te6nYPp/GAQsJMSuR2IyKNsloBkX9kjZxU938CGPWemKMhV79RGWQ== dependencies: - react-is "19.0.0-canary-e3ebcd54b-20240405" - scheduler "0.25.0-canary-e3ebcd54b-20240405" + react-is "19.0.0-canary-4c12339ce-20240408" + scheduler "0.25.0-canary-4c12339ce-20240408" react-use-measure@^2.1.1: version "2.1.1" @@ -9199,10 +9200,10 @@ react-use-refs@^1.0.1: resolved "https://registry.yarnpkg.com/react-use-refs/-/react-use-refs-1.0.1.tgz#44cab5f4764b3fa4a112189c0058fc8752d1eb2c" integrity sha512-zVmPRY5DJhzjGgmlIWw9pkdCNlIdrfsEXgdzcSau3MSpKPVuwRQU6DoviwH5f9n5Hc+M2HWW7mkRWbX+4eyC8w== -react@19.0.0-canary-e3ebcd54b-20240405: - version "19.0.0-canary-e3ebcd54b-20240405" - resolved "https://registry.yarnpkg.com/react/-/react-19.0.0-canary-e3ebcd54b-20240405.tgz#f0eac09c91af3d7c3af8ecea09681ec232b75bc1" - integrity sha512-cJE4hNNSAZSkMGplceUigybvn9cnUrvgFuljOahB2LStTLGVK4bZcszJ0sppwPbr9XVelEvyNmKj/0HRQPc53w== +react@19.0.0-canary-4c12339ce-20240408: + version "19.0.0-canary-4c12339ce-20240408" + resolved "https://registry.yarnpkg.com/react/-/react-19.0.0-canary-4c12339ce-20240408.tgz#21bb23e15848af30655039a0d5496ccea3ea3c36" + integrity sha512-QdQl76CTAmYrwjxq6fZRDWw2/MHPNxkYQ1xZVir2MbK/wxK62vFAPGr2j/AXs36ADVUq+tUGx4XNmdgnfL4f1Q== react@^18.2.0: version "18.2.0" @@ -9595,10 +9596,10 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -scheduler@0.25.0-canary-e3ebcd54b-20240405: - version "0.25.0-canary-e3ebcd54b-20240405" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-canary-e3ebcd54b-20240405.tgz#053706da115c7877955c516ed9807f3f591e8ba2" - integrity sha512-xI+jJ4zTJfULtwgO1GgoT3I3MiEV1OisswVdS9LdoQr0QwKpH0Al7IlW68R5ceIXE/a8RfuYZc7Aq34DwBqr7A== +scheduler@0.25.0-canary-4c12339ce-20240408: + version "0.25.0-canary-4c12339ce-20240408" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-canary-4c12339ce-20240408.tgz#313e246cf1991e5f38aba45a738e844a1ae2bff6" + integrity sha512-XGG/Y5q5jeJy+rKp963+nlz81H/eDEMDmwem8QFHkuufjW/IEhM9ha6PO76m9qA6Qr59HVjlTGJ6D1bH1lemeQ== scheduler@^0.21.0: version "0.21.0" From 6f5cdba74fa8d797b0410d6a334d0a3fe247231b Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Mon, 15 Apr 2024 12:12:49 -0500 Subject: [PATCH 10/29] chore: filter out hostcontext warnings --- packages/shared/setupTests.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/shared/setupTests.ts b/packages/shared/setupTests.ts index 0e90c61b6a..ff8ce90dad 100644 --- a/packages/shared/setupTests.ts +++ b/packages/shared/setupTests.ts @@ -3,6 +3,14 @@ import { WebGL2RenderingContext } from '@react-three/test-renderer/src/WebGL2Ren import { extend } from '@react-three/fiber' import 'regenerator-runtime/runtime' +const error = console.error +console.error = function () { + const message = Array.from(arguments).join('') + if (message.includes('Expected host context to exist')) return + + return error.apply(this, arguments as any) +} + declare global { var IS_REACT_ACT_ENVIRONMENT: boolean } From 4d8d58227d5c131e406c1e4798f4ac965b817975 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Sat, 20 Apr 2024 01:20:02 -0500 Subject: [PATCH 11/29] chore: update canary --- package.json | 8 +- packages/fiber/package.json | 6 +- packages/fiber/tests/canvas.native.test.tsx | 2 +- yarn.lock | 182 +++++++------------- 4 files changed, 70 insertions(+), 128 deletions(-) diff --git a/package.json b/package.json index c9ca4521e4..49631cccb2 100644 --- a/package.json +++ b/package.json @@ -49,7 +49,7 @@ "@changesets/changelog-git": "^0.1.11", "@changesets/cli": "^2.22.0", "@preconstruct/cli": "^2.1.5", - "@testing-library/react": "^13.0.0-alpha.5", + "@testing-library/react": "^15.0.2", "@types/jest": "^29.2.5", "@types/react": "18.2.73", "@types/react-dom": "18.2.22", @@ -76,10 +76,10 @@ "lint-staged": "^12.3.7", "prettier": "^2.6.1", "pretty-quick": "^3.1.3", - "react": "19.0.0-canary-4c12339ce-20240408", - "react-dom": "19.0.0-canary-4c12339ce-20240408", + "react": "19.0.0-canary-33a32441e9-20240418", + "react-dom": "19.0.0-canary-33a32441e9-20240418", "react-native": "0.69.3", - "react-test-renderer": "19.0.0-canary-4c12339ce-20240408", + "react-test-renderer": "19.0.0-canary-33a32441e9-20240418", "regenerator-runtime": "^0.13.9", "three": "^0.141.0", "three-stdlib": "^2.13.0", diff --git a/packages/fiber/package.json b/packages/fiber/package.json index 9a1005134b..bb08dbbb50 100644 --- a/packages/fiber/package.json +++ b/packages/fiber/package.json @@ -46,10 +46,10 @@ "@types/react-reconciler": "^0.28.8", "base64-js": "^1.5.1", "buffer": "^6.0.3", - "its-fine": "^1.2.0", - "react-reconciler": "0.31.0-canary-4c12339ce-20240408", + "its-fine": "^1.2.5", + "react-reconciler": "0.31.0-canary-33a32441e9-20240418", "react-use-measure": "^2.1.1", - "scheduler": "0.25.0-canary-4c12339ce-20240408", + "scheduler": "0.25.0-canary-33a32441e9-20240418", "suspend-react": "^0.1.3", "zustand": "^4.1.2" }, diff --git a/packages/fiber/tests/canvas.native.test.tsx b/packages/fiber/tests/canvas.native.test.tsx index 8ffd1371f3..1f49083f68 100644 --- a/packages/fiber/tests/canvas.native.test.tsx +++ b/packages/fiber/tests/canvas.native.test.tsx @@ -61,6 +61,6 @@ describe('native Canvas', () => { ), ) - expect(() => renderer.unmount()).not.toThrow() + expect(async () => await act(async () => renderer.unmount())).not.toThrow() }) }) diff --git a/yarn.lock b/yarn.lock index 8be867aaf3..9b6aff6a3f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2680,27 +2680,27 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@testing-library/dom@^8.5.0": - version "8.20.1" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.20.1.tgz#2e52a32e46fc88369eef7eef634ac2a192decd9f" - integrity sha512-/DiOQ5xBxgdYRC8LNk7U+RWat0S3qRLeIw3ZIkMQ9kkVlRmwD/Eg8k8CqIpD6GW7u20JIUOfMKbxtiLutpjQ4g== +"@testing-library/dom@^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-10.0.0.tgz#ae1ab88aad35a728a38264041163174cafd7e8dd" + integrity sha512-PmJPnogldqoVFf+EwbHvbBJ98MmqASV8kLrBYgsDNxQcFMeIS7JFL48sfyXvuMtgmWO/wMhh25odr+8VhDmn4g== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" "@types/aria-query" "^5.0.1" - aria-query "5.1.3" + aria-query "5.3.0" chalk "^4.1.0" dom-accessibility-api "^0.5.9" lz-string "^1.5.0" pretty-format "^27.0.2" -"@testing-library/react@^13.0.0-alpha.5": - version "13.4.0" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-13.4.0.tgz#6a31e3bf5951615593ad984e96b9e5e2d9380966" - integrity sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw== +"@testing-library/react@^15.0.2": + version "15.0.2" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-15.0.2.tgz#d0fd7e9c41b819557639acf5f18e4cd1007ec295" + integrity sha512-5mzIpuytB1ctpyywvyaY2TAAUQVCZIGqwiqFQf6u9lvj/SJQepGUzNV18Xpk+NLCaCE2j7CWrZE0tEf9xLZYiQ== dependencies: "@babel/runtime" "^7.12.5" - "@testing-library/dom" "^8.5.0" + "@testing-library/dom" "^10.0.0" "@types/react-dom" "^18.0.0" "@tootallnate/once@1": @@ -2897,7 +2897,7 @@ dependencies: "@types/react" "*" -"@types/react-reconciler@*", "@types/react-reconciler@^0.28.8": +"@types/react-reconciler@^0.28.0", "@types/react-reconciler@^0.28.8": version "0.28.8" resolved "https://registry.yarnpkg.com/@types/react-reconciler/-/react-reconciler-0.28.8.tgz#e51710572bcccf214306833c2438575d310b3e98" integrity sha512-SN9c4kxXZonFhbX4hJrZy37yw9e7EIxcpHCxQv5JUS18wDE5ovkQKlqQEkufdJCCMfuI9BnjUJvhYeJ9x5Ra7g== @@ -3309,12 +3309,12 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" - integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== +aria-query@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.3.0.tgz#650c569e41ad90b51b3d7df5e5eed1c7549c103e" + integrity sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A== dependencies: - deep-equal "^2.0.5" + dequal "^2.0.3" arr-diff@^4.0.0: version "4.0.0" @@ -3331,7 +3331,7 @@ arr-union@^3.1.0: resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== -array-buffer-byte-length@^1.0.0, array-buffer-byte-length@^1.0.1: +array-buffer-byte-length@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== @@ -4481,30 +4481,6 @@ dedent@^1.0.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== -deep-equal@^2.0.5: - version "2.2.3" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.3.tgz#af89dafb23a396c7da3e862abc0be27cf51d56e1" - integrity sha512-ZIwpnevOurS8bpT4192sqAowWM76JDKSHYzMLty3BZGSswgq6pBaH3DhCSW5xVAZICZyKdOBPjwww5wfgT/6PA== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.5" - es-get-iterator "^1.1.3" - get-intrinsic "^1.2.2" - is-arguments "^1.1.1" - is-array-buffer "^3.0.2" - is-date-object "^1.0.5" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - isarray "^2.0.5" - object-is "^1.1.5" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - side-channel "^1.0.4" - which-boxed-primitive "^1.0.2" - which-collection "^1.0.1" - which-typed-array "^1.1.13" - deep-is@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -4582,6 +4558,11 @@ depd@2.0.0: resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== +dequal@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/dequal/-/dequal-2.0.3.tgz#2644214f1997d39ed0ee0ece72335490a7ac67be" + integrity sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA== + destroy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" @@ -4803,21 +4784,6 @@ es-errors@^1.1.0, es-errors@^1.2.1, es-errors@^1.3.0: resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-get-iterator@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" - integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - has-symbols "^1.0.3" - is-arguments "^1.1.1" - is-map "^2.0.2" - is-set "^2.0.2" - is-string "^1.0.7" - isarray "^2.0.5" - stop-iteration-iterator "^1.0.0" - es-iterator-helpers@^1.0.17: version "1.0.18" resolved "https://registry.yarnpkg.com/es-iterator-helpers/-/es-iterator-helpers-1.0.18.tgz#4d3424f46b24df38d064af6fbbc89274e29ea69d" @@ -5594,7 +5560,7 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: +get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== @@ -6024,7 +5990,7 @@ inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -internal-slot@^1.0.4, internal-slot@^1.0.7: +internal-slot@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== @@ -6052,15 +6018,7 @@ is-accessor-descriptor@^1.0.1: dependencies: hasown "^2.0.0" -is-arguments@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" - integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-array-buffer@^3.0.2, is-array-buffer@^3.0.4: +is-array-buffer@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== @@ -6234,7 +6192,7 @@ is-interactive@^1.0.0: resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== -is-map@^2.0.2, is-map@^2.0.3: +is-map@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== @@ -6305,7 +6263,7 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" -is-set@^2.0.2, is-set@^2.0.3: +is-set@^2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== @@ -6486,13 +6444,12 @@ iterator.prototype@^1.1.2: reflect.getprototypeof "^1.0.4" set-function-name "^2.0.1" -its-fine@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/its-fine/-/its-fine-1.2.0.tgz#989805d4f940cba5c8c059ecf4a94a054882e354" - integrity sha512-518vLgHK/dgGxyZj4MdLrDRryziqR1M+JbVtjw1tmdgvZQYsJvB2Leoe2qFOHPalZ5KiAOK18wTmIC0XszYc0w== +its-fine@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/its-fine/-/its-fine-1.2.5.tgz#5466c287f86a0a73e772c8d8d515626c97195dc9" + integrity sha512-fXtDA0X0t0eBYAGLVM5YsgJGsJ5jEmqZEPrGbzdf5awjv0xE7nqv3TVnvtUF060Tkes15DbDAKW/I48vsb6SyA== dependencies: - "@types/react" "*" - "@types/react-reconciler" "*" + "@types/react-reconciler" "^0.28.0" jackspeak@^2.3.5: version "2.3.6" @@ -8483,14 +8440,6 @@ object-inspect@^1.12.2, object-inspect@^1.13.1: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== -object-is@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.6.tgz#1a6a53aed2dd8f7e6775ff870bea58545956ab07" - integrity sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q== - dependencies: - call-bind "^1.0.7" - define-properties "^1.2.1" - object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -9056,12 +9005,12 @@ react-devtools-core@4.24.0: shell-quote "^1.6.1" ws "^7" -react-dom@19.0.0-canary-4c12339ce-20240408: - version "19.0.0-canary-4c12339ce-20240408" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0-canary-4c12339ce-20240408.tgz#86e23459210ed40500b2424e4c3a218782bfbf7f" - integrity sha512-dMttAQ6IA63sUCCw+ZBE4QBO87PGjEcgNhNTYGHmw15ONqeUKQ8XmGEUKBOTmux7CIV9gdmKr3BGUFdGeT5ERA== +react-dom@19.0.0-canary-33a32441e9-20240418: + version "19.0.0-canary-33a32441e9-20240418" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0-canary-33a32441e9-20240418.tgz#172894343c69f4054869a2c07fca5661579a8c40" + integrity sha512-gnsY9feq8y5Jc7UN0aW/Fa36Ezz6CD6i5ICR8Zkaey4DyYMKQHy1NeRNn7yXZ0JryYYCCFa5wv32Bh4v0vQIVg== dependencies: - scheduler "0.25.0-canary-4c12339ce-20240408" + scheduler "0.25.0-canary-33a32441e9-20240418" react-dom@^18.2.0: version "18.2.0" @@ -9071,10 +9020,10 @@ react-dom@^18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" -react-is@19.0.0-canary-4c12339ce-20240408: - version "19.0.0-canary-4c12339ce-20240408" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.0.0-canary-4c12339ce-20240408.tgz#b5c74163e10c3ac56daad6c3568698fa0855013b" - integrity sha512-/QOVyOc9Xbynb9cE81YErLeXuRacWdXS617ecJukn17VQWVjdEyHYUwHZkGA+REOxgBzRIjaODy74p8L72NKTg== +react-is@19.0.0-canary-33a32441e9-20240418: + version "19.0.0-canary-33a32441e9-20240418" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.0.0-canary-33a32441e9-20240418.tgz#61400aaac2206f00aaf255254186aae22eb15be8" + integrity sha512-BC3mtVOPAvmozx9GFtnZAfm8SxWFV/pPjZBr0DrCbg3Sgnr8RGbWdEa73SfT+hyNbEU602BfyY6obmh1l5vauw== "react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0: version "18.2.0" @@ -9150,12 +9099,12 @@ react-native@0.69.3: whatwg-fetch "^3.0.0" ws "^6.1.4" -react-reconciler@0.31.0-canary-4c12339ce-20240408: - version "0.31.0-canary-4c12339ce-20240408" - resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.31.0-canary-4c12339ce-20240408.tgz#18a2f8ee9a535ae4da09fe9fc185f8bdc08360f5" - integrity sha512-mi9Ybw+UexT5qW+WlBIID7PUi7Etqv+792m33KpjNQ3iJOPlRx35S/sz6xE1MMB81RxL8Z54yhTY45zoJuGaOA== +react-reconciler@0.31.0-canary-33a32441e9-20240418: + version "0.31.0-canary-33a32441e9-20240418" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.31.0-canary-33a32441e9-20240418.tgz#53a268f22deb27ffc2cfa871aa69f8c212b0439d" + integrity sha512-jqRJuwS8fHDk4YWqwViRTzXFJyQg359uTs0pRka44FQXugkJb1O3jkZUvFfL/YiXr/Bm4yZjcUZpLqNeQf3IeA== dependencies: - scheduler "0.25.0-canary-4c12339ce-20240408" + scheduler "0.25.0-canary-33a32441e9-20240418" react-refresh@^0.10.0: version "0.10.0" @@ -9180,13 +9129,13 @@ react-shallow-renderer@16.15.0: object-assign "^4.1.1" react-is "^16.12.0 || ^17.0.0 || ^18.0.0" -react-test-renderer@19.0.0-canary-4c12339ce-20240408: - version "19.0.0-canary-4c12339ce-20240408" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-19.0.0-canary-4c12339ce-20240408.tgz#0bc916744c340bdaf1ba8aecce8efeaa80575e53" - integrity sha512-FwPMh2nn0nAsdhwM5tHXJmQCidfDlk2p4te6nYPp/GAQsJMSuR2IyKNsloBkX9kjZxU938CGPWemKMhV79RGWQ== +react-test-renderer@19.0.0-canary-33a32441e9-20240418: + version "19.0.0-canary-33a32441e9-20240418" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-19.0.0-canary-33a32441e9-20240418.tgz#6efa9ebb154e4b2aaf235930eddc51ed7c2e185e" + integrity sha512-6Xt6eNVvThPHubCTo5SuxxGf0ajoNCmL+EmxlR98/EF03g05YhooKLWcUUsUT81qcMUietzI8T0jW9t5oJh62A== dependencies: - react-is "19.0.0-canary-4c12339ce-20240408" - scheduler "0.25.0-canary-4c12339ce-20240408" + react-is "19.0.0-canary-33a32441e9-20240418" + scheduler "0.25.0-canary-33a32441e9-20240418" react-use-measure@^2.1.1: version "2.1.1" @@ -9200,10 +9149,10 @@ react-use-refs@^1.0.1: resolved "https://registry.yarnpkg.com/react-use-refs/-/react-use-refs-1.0.1.tgz#44cab5f4764b3fa4a112189c0058fc8752d1eb2c" integrity sha512-zVmPRY5DJhzjGgmlIWw9pkdCNlIdrfsEXgdzcSau3MSpKPVuwRQU6DoviwH5f9n5Hc+M2HWW7mkRWbX+4eyC8w== -react@19.0.0-canary-4c12339ce-20240408: - version "19.0.0-canary-4c12339ce-20240408" - resolved "https://registry.yarnpkg.com/react/-/react-19.0.0-canary-4c12339ce-20240408.tgz#21bb23e15848af30655039a0d5496ccea3ea3c36" - integrity sha512-QdQl76CTAmYrwjxq6fZRDWw2/MHPNxkYQ1xZVir2MbK/wxK62vFAPGr2j/AXs36ADVUq+tUGx4XNmdgnfL4f1Q== +react@19.0.0-canary-33a32441e9-20240418: + version "19.0.0-canary-33a32441e9-20240418" + resolved "https://registry.yarnpkg.com/react/-/react-19.0.0-canary-33a32441e9-20240418.tgz#27150815ffd1ab7a084ff9f5a486271242853084" + integrity sha512-daCqNhSLKCDulgZJ/ER4bvsErZmKjRkDtcepxmpb/P0S2VgrFLHNJi8oUdMuZkAkXuo1EF+h41JSs567iBPDsA== react@^18.2.0: version "18.2.0" @@ -9336,7 +9285,7 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" -regexp.prototype.flags@^1.5.1, regexp.prototype.flags@^1.5.2: +regexp.prototype.flags@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== @@ -9596,10 +9545,10 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -scheduler@0.25.0-canary-4c12339ce-20240408: - version "0.25.0-canary-4c12339ce-20240408" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-canary-4c12339ce-20240408.tgz#313e246cf1991e5f38aba45a738e844a1ae2bff6" - integrity sha512-XGG/Y5q5jeJy+rKp963+nlz81H/eDEMDmwem8QFHkuufjW/IEhM9ha6PO76m9qA6Qr59HVjlTGJ6D1bH1lemeQ== +scheduler@0.25.0-canary-33a32441e9-20240418: + version "0.25.0-canary-33a32441e9-20240418" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-canary-33a32441e9-20240418.tgz#ed20dab24297827e34290028fad1ccf239283a91" + integrity sha512-I0Avj483dt6gJ8obuZqak4U2PLHayoLen8cAEnM0/f+TxoMcoRemibCUgNuJBzDfrdWqhD72jXeZJMvsq0Jkpg== scheduler@^0.21.0: version "0.21.0" @@ -10027,13 +9976,6 @@ statuses@~1.5.0: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -stop-iteration-iterator@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" - integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== - dependencies: - internal-slot "^1.0.4" - stream-buffers@2.2.x: version "2.2.0" resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-2.2.0.tgz#91d5f5130d1cef96dcfa7f726945188741d09ee4" @@ -11040,7 +10982,7 @@ which-pm@2.0.0: load-yaml-file "^0.2.0" path-exists "^4.0.0" -which-typed-array@^1.1.13, which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: +which-typed-array@^1.1.14, which-typed-array@^1.1.15, which-typed-array@^1.1.9: version "1.1.15" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== From b28b1aa15caf8be4a32f96b67a3f932abf51c6df Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Sat, 20 Apr 2024 01:22:11 -0500 Subject: [PATCH 12/29] chore: revert snapshot --- .../__snapshots__/RTTR.core.test.tsx.snap | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/test-renderer/src/__tests__/__snapshots__/RTTR.core.test.tsx.snap b/packages/test-renderer/src/__tests__/__snapshots__/RTTR.core.test.tsx.snap index d53343c9d4..6d7b8f81dc 100644 --- a/packages/test-renderer/src/__tests__/__snapshots__/RTTR.core.test.tsx.snap +++ b/packages/test-renderer/src/__tests__/__snapshots__/RTTR.core.test.tsx.snap @@ -389,20 +389,20 @@ Array [ Object { "children": Array [], "props": Object { - "args": Array [ - 6, - 6, - ], - "attach": "geometry", + "attach": "material", }, - "type": "boxGeometry", + "type": "meshBasicMaterial", }, Object { "children": Array [], "props": Object { - "attach": "material", + "args": Array [ + 2, + 2, + ], + "attach": "geometry", }, - "type": "meshBasicMaterial", + "type": "boxGeometry", }, ], "props": Object { From 45591475758cf98db307c1335411e99339cfe028 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Mon, 22 Apr 2024 14:54:27 -0500 Subject: [PATCH 13/29] fix(reconciler): use empty host context --- packages/fiber/src/core/reconciler.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/fiber/src/core/reconciler.tsx b/packages/fiber/src/core/reconciler.tsx index 95ef9a3d5f..93b7780ff4 100644 --- a/packages/fiber/src/core/reconciler.tsx +++ b/packages/fiber/src/core/reconciler.tsx @@ -79,7 +79,7 @@ interface HostConfig { suspenseInstance: Instance hydratableInstance: never publicInstance: Instance['object'] - hostContext: never + hostContext: {} updatePayload: null | [true] | [false, Instance['props']] childSet: never timeoutHandle: number | undefined @@ -315,6 +315,8 @@ function switchInstance( const handleTextInstance = () => console.warn('R3F: Text is not allowed in JSX! This could be stray whitespace or characters.') +const NO_CONTEXT: HostConfig['hostContext'] = {} + let currentUpdatePriority: number = NoEventPriority export const reconciler = Reconciler< @@ -360,8 +362,8 @@ export const reconciler = Reconciler< insertBefore(scene, child, beforeChild) }, - getRootHostContext: () => null, - getChildHostContext: (parentHostContext) => parentHostContext, + getRootHostContext: () => NO_CONTEXT, + getChildHostContext: () => NO_CONTEXT, prepareUpdate(instance, _type, oldProps, newProps) { // Reconstruct primitives if object prop changes if (instance.type === 'primitive' && oldProps.object !== newProps.object) return [true] From cedf25068cf20ccbc20c8a4a79f4a2c16e9a735b Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Mon, 22 Apr 2024 14:58:40 -0500 Subject: [PATCH 14/29] chore: update canary --- package.json | 6 ++-- packages/fiber/package.json | 4 +-- yarn.lock | 56 ++++++++++++++++++------------------- 3 files changed, 33 insertions(+), 33 deletions(-) diff --git a/package.json b/package.json index 49631cccb2..327b3779b4 100644 --- a/package.json +++ b/package.json @@ -76,10 +76,10 @@ "lint-staged": "^12.3.7", "prettier": "^2.6.1", "pretty-quick": "^3.1.3", - "react": "19.0.0-canary-33a32441e9-20240418", - "react-dom": "19.0.0-canary-33a32441e9-20240418", + "react": "19.0.0-canary-db913d8e17-20240422", + "react-dom": "19.0.0-canary-db913d8e17-20240422", "react-native": "0.69.3", - "react-test-renderer": "19.0.0-canary-33a32441e9-20240418", + "react-test-renderer": "19.0.0-canary-db913d8e17-20240422", "regenerator-runtime": "^0.13.9", "three": "^0.141.0", "three-stdlib": "^2.13.0", diff --git a/packages/fiber/package.json b/packages/fiber/package.json index bb08dbbb50..4c5a8b2d00 100644 --- a/packages/fiber/package.json +++ b/packages/fiber/package.json @@ -47,9 +47,9 @@ "base64-js": "^1.5.1", "buffer": "^6.0.3", "its-fine": "^1.2.5", - "react-reconciler": "0.31.0-canary-33a32441e9-20240418", + "react-reconciler": "0.31.0-canary-db913d8e17-20240422", "react-use-measure": "^2.1.1", - "scheduler": "0.25.0-canary-33a32441e9-20240418", + "scheduler": "0.25.0-canary-db913d8e17-20240422", "suspend-react": "^0.1.3", "zustand": "^4.1.2" }, diff --git a/yarn.lock b/yarn.lock index 9b6aff6a3f..a6e9b2a645 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9005,12 +9005,12 @@ react-devtools-core@4.24.0: shell-quote "^1.6.1" ws "^7" -react-dom@19.0.0-canary-33a32441e9-20240418: - version "19.0.0-canary-33a32441e9-20240418" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0-canary-33a32441e9-20240418.tgz#172894343c69f4054869a2c07fca5661579a8c40" - integrity sha512-gnsY9feq8y5Jc7UN0aW/Fa36Ezz6CD6i5ICR8Zkaey4DyYMKQHy1NeRNn7yXZ0JryYYCCFa5wv32Bh4v0vQIVg== +react-dom@19.0.0-canary-db913d8e17-20240422: + version "19.0.0-canary-db913d8e17-20240422" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0-canary-db913d8e17-20240422.tgz#606831aa157749c4f556a7d40645a3fae9245440" + integrity sha512-+LmfcPoEv38BcToZ76NWbPgyAqFzZb9ONYVn1F7p6cZmtJerNjmwTBOGZ06h/tugQwg0+dU2igpS3veF5l9E3g== dependencies: - scheduler "0.25.0-canary-33a32441e9-20240418" + scheduler "0.25.0-canary-db913d8e17-20240422" react-dom@^18.2.0: version "18.2.0" @@ -9020,10 +9020,10 @@ react-dom@^18.2.0: loose-envify "^1.1.0" scheduler "^0.23.0" -react-is@19.0.0-canary-33a32441e9-20240418: - version "19.0.0-canary-33a32441e9-20240418" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.0.0-canary-33a32441e9-20240418.tgz#61400aaac2206f00aaf255254186aae22eb15be8" - integrity sha512-BC3mtVOPAvmozx9GFtnZAfm8SxWFV/pPjZBr0DrCbg3Sgnr8RGbWdEa73SfT+hyNbEU602BfyY6obmh1l5vauw== +react-is@19.0.0-canary-db913d8e17-20240422: + version "19.0.0-canary-db913d8e17-20240422" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.0.0-canary-db913d8e17-20240422.tgz#1f15e650099ec0788a76f1a3e66776b71c1de7ec" + integrity sha512-ZSZ90UgszfitZsO8JPad+I04BVdrE2bGAGQQjNX8m5jdkcPCITsb3GUt90iesxHUDRbyHoaY/MgmhSGe/s3TeA== "react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0: version "18.2.0" @@ -9099,12 +9099,12 @@ react-native@0.69.3: whatwg-fetch "^3.0.0" ws "^6.1.4" -react-reconciler@0.31.0-canary-33a32441e9-20240418: - version "0.31.0-canary-33a32441e9-20240418" - resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.31.0-canary-33a32441e9-20240418.tgz#53a268f22deb27ffc2cfa871aa69f8c212b0439d" - integrity sha512-jqRJuwS8fHDk4YWqwViRTzXFJyQg359uTs0pRka44FQXugkJb1O3jkZUvFfL/YiXr/Bm4yZjcUZpLqNeQf3IeA== +react-reconciler@0.31.0-canary-db913d8e17-20240422: + version "0.31.0-canary-db913d8e17-20240422" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.31.0-canary-db913d8e17-20240422.tgz#8affff80b1f9b11a20137f31ee121958a5808bb2" + integrity sha512-XkzNO6to+Zb69H2DY/rsZ8qfQRr7HhS2L+mLXK/WaEkCGHRfdHA5AihHqyw7RpkaGqhiInUY+lKICdWcWNmIPA== dependencies: - scheduler "0.25.0-canary-33a32441e9-20240418" + scheduler "0.25.0-canary-db913d8e17-20240422" react-refresh@^0.10.0: version "0.10.0" @@ -9129,13 +9129,13 @@ react-shallow-renderer@16.15.0: object-assign "^4.1.1" react-is "^16.12.0 || ^17.0.0 || ^18.0.0" -react-test-renderer@19.0.0-canary-33a32441e9-20240418: - version "19.0.0-canary-33a32441e9-20240418" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-19.0.0-canary-33a32441e9-20240418.tgz#6efa9ebb154e4b2aaf235930eddc51ed7c2e185e" - integrity sha512-6Xt6eNVvThPHubCTo5SuxxGf0ajoNCmL+EmxlR98/EF03g05YhooKLWcUUsUT81qcMUietzI8T0jW9t5oJh62A== +react-test-renderer@19.0.0-canary-db913d8e17-20240422: + version "19.0.0-canary-db913d8e17-20240422" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-19.0.0-canary-db913d8e17-20240422.tgz#6a86e3f870f2add0c9f32d347ba28a1be53f8b77" + integrity sha512-fEqDuPnDn4D96bPjJsWu13mqh1TjWvSyawDsLYctoJNd1c5s5Bt6u1XLKy1OMNVZp2cIbH05v22RU4lWBQM/PQ== dependencies: - react-is "19.0.0-canary-33a32441e9-20240418" - scheduler "0.25.0-canary-33a32441e9-20240418" + react-is "19.0.0-canary-db913d8e17-20240422" + scheduler "0.25.0-canary-db913d8e17-20240422" react-use-measure@^2.1.1: version "2.1.1" @@ -9149,10 +9149,10 @@ react-use-refs@^1.0.1: resolved "https://registry.yarnpkg.com/react-use-refs/-/react-use-refs-1.0.1.tgz#44cab5f4764b3fa4a112189c0058fc8752d1eb2c" integrity sha512-zVmPRY5DJhzjGgmlIWw9pkdCNlIdrfsEXgdzcSau3MSpKPVuwRQU6DoviwH5f9n5Hc+M2HWW7mkRWbX+4eyC8w== -react@19.0.0-canary-33a32441e9-20240418: - version "19.0.0-canary-33a32441e9-20240418" - resolved "https://registry.yarnpkg.com/react/-/react-19.0.0-canary-33a32441e9-20240418.tgz#27150815ffd1ab7a084ff9f5a486271242853084" - integrity sha512-daCqNhSLKCDulgZJ/ER4bvsErZmKjRkDtcepxmpb/P0S2VgrFLHNJi8oUdMuZkAkXuo1EF+h41JSs567iBPDsA== +react@19.0.0-canary-db913d8e17-20240422: + version "19.0.0-canary-db913d8e17-20240422" + resolved "https://registry.yarnpkg.com/react/-/react-19.0.0-canary-db913d8e17-20240422.tgz#cbf02302e5c082da6c4deefce59525a92972d3ee" + integrity sha512-6D1y1MWw586E1LRbKTZWTGUk8ONtdwu1zPN7EGMiJb0XDcXrLDjvA9dCmXWyRfivV6z+PRJh9YpS3DZjpq24Bg== react@^18.2.0: version "18.2.0" @@ -9545,10 +9545,10 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -scheduler@0.25.0-canary-33a32441e9-20240418: - version "0.25.0-canary-33a32441e9-20240418" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-canary-33a32441e9-20240418.tgz#ed20dab24297827e34290028fad1ccf239283a91" - integrity sha512-I0Avj483dt6gJ8obuZqak4U2PLHayoLen8cAEnM0/f+TxoMcoRemibCUgNuJBzDfrdWqhD72jXeZJMvsq0Jkpg== +scheduler@0.25.0-canary-db913d8e17-20240422: + version "0.25.0-canary-db913d8e17-20240422" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-canary-db913d8e17-20240422.tgz#93e0c376902c1faeb461c4777348873945f8d036" + integrity sha512-UOxM9t/xYfVfbM4zT4QmAMSBqP9/D9pUGPkrB4F0q3vTkIAGfTEE9qvRpAetAD+3zU0s9Ow30fG57VgvscNZYw== scheduler@^0.21.0: version "0.21.0" From c147c8e39eae2d71e58b8f074a4b3ab5ded5fd35 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Mon, 22 Apr 2024 15:16:40 -0500 Subject: [PATCH 15/29] chore: cleanup --- packages/fiber/src/index.tsx | 1 - packages/fiber/src/native.tsx | 1 - packages/shared/setupTests.ts | 8 -------- 3 files changed, 10 deletions(-) diff --git a/packages/fiber/src/index.tsx b/packages/fiber/src/index.tsx index e1e447f490..f1b06cdb69 100644 --- a/packages/fiber/src/index.tsx +++ b/packages/fiber/src/index.tsx @@ -1,4 +1,3 @@ -/// import * as ReactThreeFiber from './three-types' export { ReactThreeFiber } export * from './three-types' diff --git a/packages/fiber/src/native.tsx b/packages/fiber/src/native.tsx index 7a31b6d627..da3384866e 100644 --- a/packages/fiber/src/native.tsx +++ b/packages/fiber/src/native.tsx @@ -1,4 +1,3 @@ -/// import * as ReactThreeFiber from './three-types' export { ReactThreeFiber } export * from './three-types' diff --git a/packages/shared/setupTests.ts b/packages/shared/setupTests.ts index ff8ce90dad..0e90c61b6a 100644 --- a/packages/shared/setupTests.ts +++ b/packages/shared/setupTests.ts @@ -3,14 +3,6 @@ import { WebGL2RenderingContext } from '@react-three/test-renderer/src/WebGL2Ren import { extend } from '@react-three/fiber' import 'regenerator-runtime/runtime' -const error = console.error -console.error = function () { - const message = Array.from(arguments).join('') - if (message.includes('Expected host context to exist')) return - - return error.apply(this, arguments as any) -} - declare global { var IS_REACT_ACT_ENVIRONMENT: boolean } From dbed854121927bc8ad565c35e88e5681f5224f22 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Mon, 22 Apr 2024 15:22:59 -0500 Subject: [PATCH 16/29] fix(reconciler): return null waitForCommitToBeReady --- packages/fiber/src/core/reconciler.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/fiber/src/core/reconciler.tsx b/packages/fiber/src/core/reconciler.tsx index 93b7780ff4..18e8c78166 100644 --- a/packages/fiber/src/core/reconciler.tsx +++ b/packages/fiber/src/core/reconciler.tsx @@ -451,7 +451,9 @@ export const reconciler = Reconciler< }, startSuspendingCommit() {}, suspendInstance() {}, - waitForCommitToBeReady() {}, + waitForCommitToBeReady() { + return null + }, NotPendingTransition: null, setCurrentUpdatePriority(newPriority: number) { currentUpdatePriority = newPriority From 1400facac15bf6fd284106fbe709ddaa4adc514c Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Mon, 22 Apr 2024 15:29:08 -0500 Subject: [PATCH 17/29] fix(renderer): use new container signature --- packages/fiber/src/core/renderer.tsx | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/fiber/src/core/renderer.tsx b/packages/fiber/src/core/renderer.tsx index dd9749642a..64a68eb305 100644 --- a/packages/fiber/src/core/renderer.tsx +++ b/packages/fiber/src/core/renderer.tsx @@ -207,7 +207,19 @@ export function createRoot(canvas: TCanvas): ReconcilerR const store = prevStore || createStore(invalidate, advance) // Create renderer const fiber = - prevFiber || reconciler.createContainer(store, ConcurrentRoot, null, false, null, '', logRecoverableError, null) + prevFiber || + (reconciler as any).createContainer( + store, // container + ConcurrentRoot, // tag + null, // hydration callbacks + false, // isStrictMode + null, // concurrentUpdatesByDefaultOverride + '', // identifierPrefix + logRecoverableError, // onUncaughtError + logRecoverableError, // onCaughtError + logRecoverableError, // onRecoverableError + null, // transitionCallbacks + ) // Map it if (!prevRoot) _roots.set(canvas, { fiber, store }) From 6b91dfec77de714c638544558a4b29d53b856630 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Mon, 22 Apr 2024 16:21:04 -0500 Subject: [PATCH 18/29] chore(examples): use React 19 --- example/package.json | 4 ++-- yarn.lock | 22 ---------------------- 2 files changed, 2 insertions(+), 24 deletions(-) diff --git a/example/package.json b/example/package.json index be374cb55f..b1457a6007 100644 --- a/example/package.json +++ b/example/package.json @@ -11,8 +11,8 @@ "@react-spring/three": "^9.7.3", "@react-three/drei": "^9.93.0", "@use-gesture/react": "latest", - "react": "^18.2.0", - "react-dom": "^18.2.0", + "react": "19.0.0-canary-db913d8e17-20240422", + "react-dom": "19.0.0-canary-db913d8e17-20240422", "react-merge-refs": "^2.1.1", "react-use-refs": "^1.0.1", "three": "^0.160.0", diff --git a/yarn.lock b/yarn.lock index f58cb7477b..7045be08d0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8928,14 +8928,6 @@ react-dom@19.0.0-canary-db913d8e17-20240422: dependencies: scheduler "0.25.0-canary-db913d8e17-20240422" -react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== - dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" - react-is@19.0.0-canary-db913d8e17-20240422: version "19.0.0-canary-db913d8e17-20240422" resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.0.0-canary-db913d8e17-20240422.tgz#1f15e650099ec0788a76f1a3e66776b71c1de7ec" @@ -9070,13 +9062,6 @@ react@19.0.0-canary-db913d8e17-20240422: resolved "https://registry.yarnpkg.com/react/-/react-19.0.0-canary-db913d8e17-20240422.tgz#cbf02302e5c082da6c4deefce59525a92972d3ee" integrity sha512-6D1y1MWw586E1LRbKTZWTGUk8ONtdwu1zPN7EGMiJb0XDcXrLDjvA9dCmXWyRfivV6z+PRJh9YpS3DZjpq24Bg== -react@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" - read-pkg-up@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" @@ -9473,13 +9458,6 @@ scheduler@^0.21.0: dependencies: loose-envify "^1.1.0" -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== - dependencies: - loose-envify "^1.1.0" - "semver@2 || 3 || 4 || 5", semver@^5.5.0, semver@^5.6.0: version "5.7.2" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" From 2b15a9170aad5e13562440611d325bffb57a740a Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Mon, 22 Apr 2024 23:53:53 -0500 Subject: [PATCH 19/29] chore(tests): restore scheduler mock --- packages/shared/setupTests.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/shared/setupTests.ts b/packages/shared/setupTests.ts index 0e90c61b6a..7bfa887704 100644 --- a/packages/shared/setupTests.ts +++ b/packages/shared/setupTests.ts @@ -10,6 +10,12 @@ declare global { // Let React know that we'll be testing effectful components global.IS_REACT_ACT_ENVIRONMENT = true +// Mock scheduler to test React features +jest.mock('scheduler', () => ({ + ...jest.requireActual('scheduler/unstable_mock'), + unstable_scheduleCallback: (_: any, callback: () => void) => callback(), +})) + // ESLint is broken atm -- TypeError: The argument 'filename' must be a file URL object, file URL string, or absolute path string. Received 'http://localhost/eslintrc.cjs' jest.mock('eslint', () => ({ RuleTester: class { From 7df9759ad201713bed41e8949ca95df88eada537 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Thu, 25 Apr 2024 04:38:51 -0500 Subject: [PATCH 20/29] chore: update canary --- package.json | 6 ++--- packages/fiber/package.json | 4 ++-- yarn.lock | 47 +++++++++++++++++++++++++------------ 3 files changed, 37 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index 327b3779b4..178774f7b9 100644 --- a/package.json +++ b/package.json @@ -76,10 +76,10 @@ "lint-staged": "^12.3.7", "prettier": "^2.6.1", "pretty-quick": "^3.1.3", - "react": "19.0.0-canary-db913d8e17-20240422", - "react-dom": "19.0.0-canary-db913d8e17-20240422", + "react": "19.0.0-canary-cb151849e1-20240424", + "react-dom": "19.0.0-canary-cb151849e1-20240424", "react-native": "0.69.3", - "react-test-renderer": "19.0.0-canary-db913d8e17-20240422", + "react-test-renderer": "19.0.0-canary-cb151849e1-20240424", "regenerator-runtime": "^0.13.9", "three": "^0.141.0", "three-stdlib": "^2.13.0", diff --git a/packages/fiber/package.json b/packages/fiber/package.json index 4c5a8b2d00..e177f4cdce 100644 --- a/packages/fiber/package.json +++ b/packages/fiber/package.json @@ -47,9 +47,9 @@ "base64-js": "^1.5.1", "buffer": "^6.0.3", "its-fine": "^1.2.5", - "react-reconciler": "0.31.0-canary-db913d8e17-20240422", + "react-reconciler": "0.31.0-canary-cb151849e1-20240424", "react-use-measure": "^2.1.1", - "scheduler": "0.25.0-canary-db913d8e17-20240422", + "scheduler": "0.25.0-canary-cb151849e1-20240424", "suspend-react": "^0.1.3", "zustand": "^4.1.2" }, diff --git a/yarn.lock b/yarn.lock index 7045be08d0..5782f096b5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8921,6 +8921,13 @@ react-devtools-core@4.24.0: shell-quote "^1.6.1" ws "^7" +react-dom@19.0.0-canary-cb151849e1-20240424: + version "19.0.0-canary-cb151849e1-20240424" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0-canary-cb151849e1-20240424.tgz#50d12e5f9c43ae32757487453593227ffadec73a" + integrity sha512-J20FmrVUSpjzVXKPuK4q6Gj/aUufdJ3VlHH53zMmWLLH0uXG39ISl2p3iyXQeeGJHz/nW5YQ10s9UEoIp2eDwQ== + dependencies: + scheduler "0.25.0-canary-cb151849e1-20240424" + react-dom@19.0.0-canary-db913d8e17-20240422: version "19.0.0-canary-db913d8e17-20240422" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0-canary-db913d8e17-20240422.tgz#606831aa157749c4f556a7d40645a3fae9245440" @@ -8928,10 +8935,10 @@ react-dom@19.0.0-canary-db913d8e17-20240422: dependencies: scheduler "0.25.0-canary-db913d8e17-20240422" -react-is@19.0.0-canary-db913d8e17-20240422: - version "19.0.0-canary-db913d8e17-20240422" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.0.0-canary-db913d8e17-20240422.tgz#1f15e650099ec0788a76f1a3e66776b71c1de7ec" - integrity sha512-ZSZ90UgszfitZsO8JPad+I04BVdrE2bGAGQQjNX8m5jdkcPCITsb3GUt90iesxHUDRbyHoaY/MgmhSGe/s3TeA== +react-is@19.0.0-canary-cb151849e1-20240424: + version "19.0.0-canary-cb151849e1-20240424" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.0.0-canary-cb151849e1-20240424.tgz#bdab494f431c1486f55633900e85e034fa216800" + integrity sha512-1iuPGAu4rCRG4pnHTf0AlfjwdBIl1yE+sMqxZW6Hu342rLTX6QJ7MyGW6C9Uw1nE99CVA0K43QS9pgOgfaWIxA== "react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0: version "18.2.0" @@ -9007,12 +9014,12 @@ react-native@0.69.3: whatwg-fetch "^3.0.0" ws "^6.1.4" -react-reconciler@0.31.0-canary-db913d8e17-20240422: - version "0.31.0-canary-db913d8e17-20240422" - resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.31.0-canary-db913d8e17-20240422.tgz#8affff80b1f9b11a20137f31ee121958a5808bb2" - integrity sha512-XkzNO6to+Zb69H2DY/rsZ8qfQRr7HhS2L+mLXK/WaEkCGHRfdHA5AihHqyw7RpkaGqhiInUY+lKICdWcWNmIPA== +react-reconciler@0.31.0-canary-cb151849e1-20240424: + version "0.31.0-canary-cb151849e1-20240424" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.31.0-canary-cb151849e1-20240424.tgz#0cfe27407906f7c94b5f343e891c3d3911c38873" + integrity sha512-/buui1qjOd1Q3EpJ7f2FgOCK4b3lCHv1R3uBLxnC1fMEyyoIelqvCBeqxrF68Z1xmpx8LA/S9hxtXoIRSluzQw== dependencies: - scheduler "0.25.0-canary-db913d8e17-20240422" + scheduler "0.25.0-canary-cb151849e1-20240424" react-refresh@^0.10.0: version "0.10.0" @@ -9037,13 +9044,13 @@ react-shallow-renderer@16.15.0: object-assign "^4.1.1" react-is "^16.12.0 || ^17.0.0 || ^18.0.0" -react-test-renderer@19.0.0-canary-db913d8e17-20240422: - version "19.0.0-canary-db913d8e17-20240422" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-19.0.0-canary-db913d8e17-20240422.tgz#6a86e3f870f2add0c9f32d347ba28a1be53f8b77" - integrity sha512-fEqDuPnDn4D96bPjJsWu13mqh1TjWvSyawDsLYctoJNd1c5s5Bt6u1XLKy1OMNVZp2cIbH05v22RU4lWBQM/PQ== +react-test-renderer@19.0.0-canary-cb151849e1-20240424: + version "19.0.0-canary-cb151849e1-20240424" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-19.0.0-canary-cb151849e1-20240424.tgz#365c60fe9e0dbdf0b969d166e7ae7858254f80e4" + integrity sha512-ZQuezsrcRgs1gCq05lvnOt+oUcNkyu8gstw3DmGIyYVKY8oawzdYIpr/r3AyzAemnNreHsjB2102ZsPObO51CQ== dependencies: - react-is "19.0.0-canary-db913d8e17-20240422" - scheduler "0.25.0-canary-db913d8e17-20240422" + react-is "19.0.0-canary-cb151849e1-20240424" + scheduler "0.25.0-canary-cb151849e1-20240424" react-use-measure@^2.1.1: version "2.1.1" @@ -9057,6 +9064,11 @@ react-use-refs@^1.0.1: resolved "https://registry.yarnpkg.com/react-use-refs/-/react-use-refs-1.0.1.tgz#44cab5f4764b3fa4a112189c0058fc8752d1eb2c" integrity sha512-zVmPRY5DJhzjGgmlIWw9pkdCNlIdrfsEXgdzcSau3MSpKPVuwRQU6DoviwH5f9n5Hc+M2HWW7mkRWbX+4eyC8w== +react@19.0.0-canary-cb151849e1-20240424: + version "19.0.0-canary-cb151849e1-20240424" + resolved "https://registry.yarnpkg.com/react/-/react-19.0.0-canary-cb151849e1-20240424.tgz#8a6f29956a67e9841ab65348e458ce08e41159e6" + integrity sha512-sX0ec4kqR1z2PAMdCo0cztaYaoGbpy2EoS5hAzUsBekB9FFnGWP4jbYK7GFURTIh5EK9ny1Mmgkb1hiyVYkj4Q== + react@19.0.0-canary-db913d8e17-20240422: version "19.0.0-canary-db913d8e17-20240422" resolved "https://registry.yarnpkg.com/react/-/react-19.0.0-canary-db913d8e17-20240422.tgz#cbf02302e5c082da6c4deefce59525a92972d3ee" @@ -9446,6 +9458,11 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" +scheduler@0.25.0-canary-cb151849e1-20240424: + version "0.25.0-canary-cb151849e1-20240424" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-canary-cb151849e1-20240424.tgz#18247a94a47f15f9a82fa214a750a431234bac89" + integrity sha512-Cn5wjkCw+Md7mnE1xWmvmVRsvMvnxRhCQGOvoOUR0u78d2aZfyXxXK05BsKztsHiYg4w0nSOFX7822/XcxnRxg== + scheduler@0.25.0-canary-db913d8e17-20240422: version "0.25.0-canary-db913d8e17-20240422" resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-canary-db913d8e17-20240422.tgz#93e0c376902c1faeb461c4777348873945f8d036" From b5ef3ac88df0a7ad1e7aafda156aab2f36477da1 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Thu, 25 Apr 2024 07:21:58 -0500 Subject: [PATCH 21/29] experiment(CI): show verbose test results --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a1645c6a8c..559ddc9902 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,7 +33,7 @@ jobs: run: yarn run build - name: Jest run - run: yarn run dev && yarn run test + run: yarn run dev && yarn run test --verbose - name: Report Fiber size run: yarn run analyze-fiber From e9460eda9031c4a240d4bac07f1ea3d63e7f5241 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Thu, 25 Apr 2024 07:24:06 -0500 Subject: [PATCH 22/29] experiment(CI): debug test logs --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 559ddc9902..78b86e1bfd 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,7 +33,7 @@ jobs: run: yarn run build - name: Jest run - run: yarn run dev && yarn run test --verbose + run: yarn run dev && yarn run test --verbose --detectOpenHandles - name: Report Fiber size run: yarn run analyze-fiber From 15074b83a7cb455c7325202fceac7d06a165cf35 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Thu, 25 Apr 2024 08:59:32 -0500 Subject: [PATCH 23/29] fix(reconciler): remove prepareUpdate, diff in commit --- packages/fiber/src/core/reconciler.tsx | 53 +++++++++++++++----------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/packages/fiber/src/core/reconciler.tsx b/packages/fiber/src/core/reconciler.tsx index 18e8c78166..812afc2ab4 100644 --- a/packages/fiber/src/core/reconciler.tsx +++ b/packages/fiber/src/core/reconciler.tsx @@ -319,6 +319,33 @@ const NO_CONTEXT: HostConfig['hostContext'] = {} let currentUpdatePriority: number = NoEventPriority +// Effectively removed to diff in commit phase +// https://github.com/facebook/react/pull/27409 +function prepareUpdate( + instance: HostConfig['instance'], + _type: string, + oldProps: HostConfig['props'], + newProps: HostConfig['props'], +): HostConfig['updatePayload'] { + // Reconstruct primitives if object prop changes + if (instance.type === 'primitive' && oldProps.object !== newProps.object) return [true] + + // Throw if an object or literal was passed for args + if (newProps.args !== undefined && !Array.isArray(newProps.args)) + throw new Error('R3F: The args prop must be an array!') + + // Reconstruct instance if args change + if (newProps.args?.length !== oldProps.args?.length) return [true] + if (newProps.args?.some((value, index) => value !== oldProps.args?.[index])) return [true] + + // Create a diff-set, flag if there are any changes + const changedProps = diffProps(instance, newProps, true) + if (Object.keys(changedProps).length) return [false, changedProps] + + // Otherwise do not touch the instance + return null +} + export const reconciler = Reconciler< HostConfig['type'], HostConfig['props'], @@ -364,29 +391,11 @@ export const reconciler = Reconciler< }, getRootHostContext: () => NO_CONTEXT, getChildHostContext: () => NO_CONTEXT, - prepareUpdate(instance, _type, oldProps, newProps) { - // Reconstruct primitives if object prop changes - if (instance.type === 'primitive' && oldProps.object !== newProps.object) return [true] - - // Throw if an object or literal was passed for args - if (newProps.args !== undefined && !Array.isArray(newProps.args)) - throw new Error('R3F: The args prop must be an array!') - - // Reconstruct instance if args change - if (newProps.args?.length !== oldProps.args?.length) return [true] - if (newProps.args?.some((value, index) => value !== oldProps.args?.[index])) return [true] - - // Create a diff-set, flag if there are any changes - const changedProps = diffProps(instance, newProps, true) - if (Object.keys(changedProps).length) return [false, changedProps] - - // Otherwise do not touch the instance - return null - }, - commitUpdate(instance, diff, type, _oldProps, newProps, fiber) { - if (!diff) return + commitUpdate(instance, _diff, type, oldProps, newProps, fiber) { + const diff = prepareUpdate(instance, type, oldProps, newProps) + if (diff === null) return - const [reconstruct, changedProps] = diff! + const [reconstruct, changedProps] = diff // Reconstruct when args or Date: Thu, 25 Apr 2024 09:22:27 -0500 Subject: [PATCH 24/29] chore(tests): cleanup test-renderer deprecations --- packages/fiber/tests/renderer.test.tsx | 20 ++++++++++---------- packages/shared/setupTests.ts | 8 ++------ 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/packages/fiber/tests/renderer.test.tsx b/packages/fiber/tests/renderer.test.tsx index 7fd5afd952..3b14c5ae8c 100644 --- a/packages/fiber/tests/renderer.test.tsx +++ b/packages/fiber/tests/renderer.test.tsx @@ -36,7 +36,7 @@ const expectToThrow = async (callback: () => any) => { } expect(thrown).toBe(true) - expect(console.error).toBeCalled() + expect(console.error).toHaveBeenCalled() console.error = error } @@ -397,21 +397,21 @@ describe('renderer', () => { // Removes events expect(internal.interaction.length).toBe(0) // Calls dispose on top-level instance - expect(dispose).toBeCalled() + expect(dispose).toHaveBeenCalled() // Also disposes of children - expect(childDispose).toBeCalled() + expect(childDispose).toHaveBeenCalled() // Disposes of attached children - expect(attachDispose).toBeCalled() + expect(attachDispose).toHaveBeenCalled() // Properly detaches attached children - expect(attach).toBeCalledTimes(1) - expect(detach).toBeCalledTimes(1) + expect(attach).toHaveBeenCalledTimes(1) + expect(detach).toHaveBeenCalledTimes(1) // Respects dispose={null} - expect(flagDispose).not.toBeCalled() + expect(flagDispose).not.toHaveBeenCalled() // Does not dispose of primitives - expect(object.dispose).not.toBeCalled() + expect(object.dispose).not.toHaveBeenCalled() // Only disposes of declarative primitive children - expect(objectExternal.dispose).not.toBeCalled() - expect(disposeDeclarativePrimitive).toBeCalled() + expect(objectExternal.dispose).not.toHaveBeenCalled() + expect(disposeDeclarativePrimitive).toHaveBeenCalled() }) it('can swap 4 array primitives', async () => { diff --git a/packages/shared/setupTests.ts b/packages/shared/setupTests.ts index 7bfa887704..156be2033a 100644 --- a/packages/shared/setupTests.ts +++ b/packages/shared/setupTests.ts @@ -5,16 +5,12 @@ import 'regenerator-runtime/runtime' declare global { var IS_REACT_ACT_ENVIRONMENT: boolean + var IS_REACT_NATIVE_TEST_ENVIRONMENT: boolean // https://github.com/facebook/react/pull/28419 } // Let React know that we'll be testing effectful components global.IS_REACT_ACT_ENVIRONMENT = true - -// Mock scheduler to test React features -jest.mock('scheduler', () => ({ - ...jest.requireActual('scheduler/unstable_mock'), - unstable_scheduleCallback: (_: any, callback: () => void) => callback(), -})) +global.IS_REACT_NATIVE_TEST_ENVIRONMENT = true // hide react-test-renderer warnings // ESLint is broken atm -- TypeError: The argument 'filename' must be a file URL object, file URL string, or absolute path string. Received 'http://localhost/eslintrc.cjs' jest.mock('eslint', () => ({ From cdb6826135cb04a2bcbd3c6c1bb941d87f33719f Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Thu, 25 Apr 2024 09:23:58 -0500 Subject: [PATCH 25/29] chore(CI): revert changes --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 78b86e1bfd..a1645c6a8c 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,7 +33,7 @@ jobs: run: yarn run build - name: Jest run - run: yarn run dev && yarn run test --verbose --detectOpenHandles + run: yarn run dev && yarn run test - name: Report Fiber size run: yarn run analyze-fiber From 09118bc93788822aa4e511ff4f809dbe4011c550 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Thu, 25 Apr 2024 10:01:07 -0500 Subject: [PATCH 26/29] fix(reconciler): sync dispose in test environment --- packages/fiber/src/core/reconciler.tsx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/fiber/src/core/reconciler.tsx b/packages/fiber/src/core/reconciler.tsx index 812afc2ab4..a166d739b8 100644 --- a/packages/fiber/src/core/reconciler.tsx +++ b/packages/fiber/src/core/reconciler.tsx @@ -244,13 +244,21 @@ function removeChild( if (shouldDispose && child.type !== 'primitive' && child.object.type !== 'Scene') { if (typeof child.object.dispose === 'function') { const dispose = child.object.dispose.bind(child.object) - scheduleCallback(idlePriority, () => { + if (typeof IS_REACT_ACT_ENVIRONMENT !== 'undefined') { try { dispose() } catch (e) { /* ... */ } - }) + } else { + scheduleCallback(idlePriority, () => { + try { + dispose() + } catch (e) { + /* ... */ + } + }) + } } } From 8ae3e1a1fe2f32dded59c6b413f768e0f30ddfcb Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Thu, 25 Apr 2024 10:01:27 -0500 Subject: [PATCH 27/29] chore(tests): harden error cases --- packages/fiber/tests/renderer.test.tsx | 24 +++++++++--------------- 1 file changed, 9 insertions(+), 15 deletions(-) diff --git a/packages/fiber/tests/renderer.test.tsx b/packages/fiber/tests/renderer.test.tsx index 3b14c5ae8c..ad31f55e11 100644 --- a/packages/fiber/tests/renderer.test.tsx +++ b/packages/fiber/tests/renderer.test.tsx @@ -24,20 +24,14 @@ extend({ Mock }) type ComponentMesh = THREE.Mesh -const expectToThrow = async (callback: () => any) => { - const error = console.error - console.error = jest.fn() - - let thrown = false +const expectToThrow = async (callback: () => any, message: string) => { + let error: Error | undefined try { await callback() - } catch (_) { - thrown = true + } catch (e) { + error = e as Error } - - expect(thrown).toBe(true) - expect(console.error).toHaveBeenCalled() - console.error = error + expect(error?.message).toBe(message) } describe('renderer', () => { @@ -256,8 +250,8 @@ describe('renderer', () => { // Throw on non-array value await expectToThrow( - // @ts-expect-error - async () => await act(async () => root.render()), + async () => await act(async () => root.render()), + 'R3F: The args prop must be an array!', ) // Set @@ -316,8 +310,8 @@ describe('renderer', () => { // Throw on undefined await expectToThrow( - // @ts-expect-error - async () => await act(async () => root.render()), + async () => await act(async () => root.render()), + "R3F: Primitives without 'object' are invalid!", ) // Update From 04b88d144a52367774cde3674acd82b56c6b8b58 Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Thu, 25 Apr 2024 10:08:14 -0500 Subject: [PATCH 28/29] chore(reconciler): cleanup --- packages/fiber/src/core/reconciler.tsx | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/packages/fiber/src/core/reconciler.tsx b/packages/fiber/src/core/reconciler.tsx index a166d739b8..3ac2203453 100644 --- a/packages/fiber/src/core/reconciler.tsx +++ b/packages/fiber/src/core/reconciler.tsx @@ -244,21 +244,18 @@ function removeChild( if (shouldDispose && child.type !== 'primitive' && child.object.type !== 'Scene') { if (typeof child.object.dispose === 'function') { const dispose = child.object.dispose.bind(child.object) - if (typeof IS_REACT_ACT_ENVIRONMENT !== 'undefined') { + const handleDispose = () => { try { dispose() } catch (e) { - /* ... */ + // no-op } - } else { - scheduleCallback(idlePriority, () => { - try { - dispose() - } catch (e) { - /* ... */ - } - }) } + + // In a testing environment, cleanup immediately + if (typeof IS_REACT_ACT_ENVIRONMENT !== 'undefined') handleDispose() + // Otherwise, using a real GPU so schedule cleanup to prevent stalls + else scheduleCallback(idlePriority, handleDispose) } } From 9a913a609240bbce297b1889d14c9711e01f2c8b Mon Sep 17 00:00:00 2001 From: Cody Bennett Date: Thu, 25 Apr 2024 15:10:15 -0500 Subject: [PATCH 29/29] chore: upgrade to beta --- package.json | 6 +-- packages/fiber/package.json | 4 +- packages/fiber/src/core/reconciler.tsx | 9 ++++- yarn.lock | 56 +++++++++++++------------- 4 files changed, 41 insertions(+), 34 deletions(-) diff --git a/package.json b/package.json index 178774f7b9..061cf759bd 100644 --- a/package.json +++ b/package.json @@ -76,10 +76,10 @@ "lint-staged": "^12.3.7", "prettier": "^2.6.1", "pretty-quick": "^3.1.3", - "react": "19.0.0-canary-cb151849e1-20240424", - "react-dom": "19.0.0-canary-cb151849e1-20240424", + "react": "19.0.0-beta-94eed63c49-20240425", + "react-dom": "19.0.0-beta-94eed63c49-20240425", "react-native": "0.69.3", - "react-test-renderer": "19.0.0-canary-cb151849e1-20240424", + "react-test-renderer": "19.0.0-beta-94eed63c49-20240425", "regenerator-runtime": "^0.13.9", "three": "^0.141.0", "three-stdlib": "^2.13.0", diff --git a/packages/fiber/package.json b/packages/fiber/package.json index e177f4cdce..7bbe75e75d 100644 --- a/packages/fiber/package.json +++ b/packages/fiber/package.json @@ -47,9 +47,9 @@ "base64-js": "^1.5.1", "buffer": "^6.0.3", "its-fine": "^1.2.5", - "react-reconciler": "0.31.0-canary-cb151849e1-20240424", + "react-reconciler": "0.31.0-beta-94eed63c49-20240425", "react-use-measure": "^2.1.1", - "scheduler": "0.25.0-canary-cb151849e1-20240424", + "scheduler": "0.25.0-beta-94eed63c49-20240425", "suspend-react": "^0.1.3", "zustand": "^4.1.2" }, diff --git a/packages/fiber/src/core/reconciler.tsx b/packages/fiber/src/core/reconciler.tsx index 3ac2203453..a936f7c683 100644 --- a/packages/fiber/src/core/reconciler.tsx +++ b/packages/fiber/src/core/reconciler.tsx @@ -396,7 +396,14 @@ export const reconciler = Reconciler< }, getRootHostContext: () => NO_CONTEXT, getChildHostContext: () => NO_CONTEXT, - commitUpdate(instance, _diff, type, oldProps, newProps, fiber) { + // @ts-ignore prepareUpdate and updatePayload removed with React 19 + commitUpdate( + instance: HostConfig['instance'], + type: HostConfig['type'], + oldProps: HostConfig['props'], + newProps: HostConfig['props'], + fiber: any, + ) { const diff = prepareUpdate(instance, type, oldProps, newProps) if (diff === null) return diff --git a/yarn.lock b/yarn.lock index 5782f096b5..6e6ee8b0de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8921,12 +8921,12 @@ react-devtools-core@4.24.0: shell-quote "^1.6.1" ws "^7" -react-dom@19.0.0-canary-cb151849e1-20240424: - version "19.0.0-canary-cb151849e1-20240424" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0-canary-cb151849e1-20240424.tgz#50d12e5f9c43ae32757487453593227ffadec73a" - integrity sha512-J20FmrVUSpjzVXKPuK4q6Gj/aUufdJ3VlHH53zMmWLLH0uXG39ISl2p3iyXQeeGJHz/nW5YQ10s9UEoIp2eDwQ== +react-dom@19.0.0-beta-94eed63c49-20240425: + version "19.0.0-beta-94eed63c49-20240425" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0-beta-94eed63c49-20240425.tgz#5d10ac9f95f43f26130c2b8f59accc8f18485963" + integrity sha512-V0uHW7Xd0u/LDlmFO8sJ9TTNizAESS+pexJNOi3KbOU1taf2gUO5J8YIWis60xcQbh7YBqSklyYIIq3DfiKz3Q== dependencies: - scheduler "0.25.0-canary-cb151849e1-20240424" + scheduler "0.25.0-beta-94eed63c49-20240425" react-dom@19.0.0-canary-db913d8e17-20240422: version "19.0.0-canary-db913d8e17-20240422" @@ -8935,10 +8935,10 @@ react-dom@19.0.0-canary-db913d8e17-20240422: dependencies: scheduler "0.25.0-canary-db913d8e17-20240422" -react-is@19.0.0-canary-cb151849e1-20240424: - version "19.0.0-canary-cb151849e1-20240424" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.0.0-canary-cb151849e1-20240424.tgz#bdab494f431c1486f55633900e85e034fa216800" - integrity sha512-1iuPGAu4rCRG4pnHTf0AlfjwdBIl1yE+sMqxZW6Hu342rLTX6QJ7MyGW6C9Uw1nE99CVA0K43QS9pgOgfaWIxA== +react-is@19.0.0-beta-94eed63c49-20240425: + version "19.0.0-beta-94eed63c49-20240425" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-19.0.0-beta-94eed63c49-20240425.tgz#e636ae331655ced5616a9ce252e827ed1b917eda" + integrity sha512-jG3jI4NjfbeH899/6kP16TUT+CeVUFNDTw8nPvUxaLSPZVY3s33PRbOOcrd3X4r5nlsyozOYEzkomUlLM3bZcw== "react-is@^16.12.0 || ^17.0.0 || ^18.0.0", react-is@^18.0.0: version "18.2.0" @@ -9014,12 +9014,12 @@ react-native@0.69.3: whatwg-fetch "^3.0.0" ws "^6.1.4" -react-reconciler@0.31.0-canary-cb151849e1-20240424: - version "0.31.0-canary-cb151849e1-20240424" - resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.31.0-canary-cb151849e1-20240424.tgz#0cfe27407906f7c94b5f343e891c3d3911c38873" - integrity sha512-/buui1qjOd1Q3EpJ7f2FgOCK4b3lCHv1R3uBLxnC1fMEyyoIelqvCBeqxrF68Z1xmpx8LA/S9hxtXoIRSluzQw== +react-reconciler@0.31.0-beta-94eed63c49-20240425: + version "0.31.0-beta-94eed63c49-20240425" + resolved "https://registry.yarnpkg.com/react-reconciler/-/react-reconciler-0.31.0-beta-94eed63c49-20240425.tgz#c2d469ab0f933d82150ca871b8b2daae001fd0d7" + integrity sha512-1ffTu3lmFEjdSlHxGjb7ztGDdXtbhKSka8cTRB8/Cj99536qvLpohOfpEsdzkBo1x3I31Q4h+C8g/fZ54MZBxA== dependencies: - scheduler "0.25.0-canary-cb151849e1-20240424" + scheduler "0.25.0-beta-94eed63c49-20240425" react-refresh@^0.10.0: version "0.10.0" @@ -9044,13 +9044,13 @@ react-shallow-renderer@16.15.0: object-assign "^4.1.1" react-is "^16.12.0 || ^17.0.0 || ^18.0.0" -react-test-renderer@19.0.0-canary-cb151849e1-20240424: - version "19.0.0-canary-cb151849e1-20240424" - resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-19.0.0-canary-cb151849e1-20240424.tgz#365c60fe9e0dbdf0b969d166e7ae7858254f80e4" - integrity sha512-ZQuezsrcRgs1gCq05lvnOt+oUcNkyu8gstw3DmGIyYVKY8oawzdYIpr/r3AyzAemnNreHsjB2102ZsPObO51CQ== +react-test-renderer@19.0.0-beta-94eed63c49-20240425: + version "19.0.0-beta-94eed63c49-20240425" + resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-19.0.0-beta-94eed63c49-20240425.tgz#458653f26e807c1b3b3c5fa3870ef5939d64afa5" + integrity sha512-lLAOO6Duvq6EHt3dGfn3pK8fBkJgHU2gqceje903/TDTlqlCrm+CXxCOsc6fjqWpD0RYkd1v8FpDEnusaQXijw== dependencies: - react-is "19.0.0-canary-cb151849e1-20240424" - scheduler "0.25.0-canary-cb151849e1-20240424" + react-is "19.0.0-beta-94eed63c49-20240425" + scheduler "0.25.0-beta-94eed63c49-20240425" react-use-measure@^2.1.1: version "2.1.1" @@ -9064,10 +9064,10 @@ react-use-refs@^1.0.1: resolved "https://registry.yarnpkg.com/react-use-refs/-/react-use-refs-1.0.1.tgz#44cab5f4764b3fa4a112189c0058fc8752d1eb2c" integrity sha512-zVmPRY5DJhzjGgmlIWw9pkdCNlIdrfsEXgdzcSau3MSpKPVuwRQU6DoviwH5f9n5Hc+M2HWW7mkRWbX+4eyC8w== -react@19.0.0-canary-cb151849e1-20240424: - version "19.0.0-canary-cb151849e1-20240424" - resolved "https://registry.yarnpkg.com/react/-/react-19.0.0-canary-cb151849e1-20240424.tgz#8a6f29956a67e9841ab65348e458ce08e41159e6" - integrity sha512-sX0ec4kqR1z2PAMdCo0cztaYaoGbpy2EoS5hAzUsBekB9FFnGWP4jbYK7GFURTIh5EK9ny1Mmgkb1hiyVYkj4Q== +react@19.0.0-beta-94eed63c49-20240425: + version "19.0.0-beta-94eed63c49-20240425" + resolved "https://registry.yarnpkg.com/react/-/react-19.0.0-beta-94eed63c49-20240425.tgz#7b30b64c9b3517240d47ac00184ae2d59554bb9b" + integrity sha512-BPPKh5bZwcpw/Dgfh3A0MoU1GSl2edR2JggCq3QPdghQsrFg1aBuMkul5YB4rpII400RYq9VC5eF5Nm3spx0gA== react@19.0.0-canary-db913d8e17-20240422: version "19.0.0-canary-db913d8e17-20240422" @@ -9458,10 +9458,10 @@ saxes@^5.0.1: dependencies: xmlchars "^2.2.0" -scheduler@0.25.0-canary-cb151849e1-20240424: - version "0.25.0-canary-cb151849e1-20240424" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-canary-cb151849e1-20240424.tgz#18247a94a47f15f9a82fa214a750a431234bac89" - integrity sha512-Cn5wjkCw+Md7mnE1xWmvmVRsvMvnxRhCQGOvoOUR0u78d2aZfyXxXK05BsKztsHiYg4w0nSOFX7822/XcxnRxg== +scheduler@0.25.0-beta-94eed63c49-20240425: + version "0.25.0-beta-94eed63c49-20240425" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0-beta-94eed63c49-20240425.tgz#db261000b28fa56d65fff2e9c17eb7bd094a669a" + integrity sha512-U8hoOV7uut5E8cMvRSMikEBBqLXfv2BpdxUsG45euaOfnqEgFrCdLLh6ydM+YBJ36+28olXMNmK2PFFzeg4UdQ== scheduler@0.25.0-canary-db913d8e17-20240422: version "0.25.0-canary-db913d8e17-20240422"