dillon1000/react

Commit

Split cross-package types from implementation

Some of our internal reconciler types have leaked into other packages.
Usually, these types are treated as opaque; we don't read and write
to its fields. This is good.

However, the type is often passed back to a reconciler method. For
example, React DOM creates a FiberRoot with `createContainer`, then
passes that root to `updateContainer`. It doesn't do anything with the
root except pass it through, but because `updateContainer` expects a
full FiberRoot, React DOM is still coupled to all its fields.

I don't know if there's an idiomatic way to handle this in Flow. Opaque
types are simlar, but those only work within a single file. AFAIK,
there's no way to use a package as the boundary for opaqueness.

The immediate problem this presents is that the reconciler refactor will
involve changes to our internal data structures. I don't want to have to
fork every single package that happens to pass through a Fiber or
FiberRoot, or access any one of its fields. So my current plan is to
share the same Flow type across both forks. The shared type will be a
superset of each implementation's type, e.g. Fiber will have both an
`expirationTime` field and a `lanes` field. The implementations will
diverge, but not the types.

To do this, I lifted the type definitions into a separate module.
Browse files
Changed paths69 files
First-parent comparison
M packages/legacy-events/PluginModuleType.js ModifiedM packages/legacy-events/ReactSyntheticEventType.js ModifiedM packages/react-debug-tools/src/ReactDebugHooks.js ModifiedM packages/react-devtools-shared/src/backend/console.js ModifiedM packages/react-devtools-shared/src/backend/renderer.js ModifiedM packages/react-devtools-shared/src/backend/types.js ModifiedM packages/react-dom/src/client/ReactDOMComponentTree.js ModifiedM packages/react-dom/src/client/ReactDOMRoot.js ModifiedM packages/react-dom/src/events/DOMLegacyEventPluginSystem.js ModifiedM packages/react-dom/src/events/DOMModernPluginEventSystem.js ModifiedM packages/react-dom/src/events/DeprecatedDOMEventResponderSystem.js ModifiedM packages/react-dom/src/events/ReactDOMEventListener.js ModifiedM packages/react-dom/src/events/ReactDOMEventReplaying.js ModifiedM packages/react-dom/src/events/SimpleEventPlugin.js ModifiedM packages/react-dom/src/events/accumulateEnterLeaveListeners.js ModifiedM packages/react-dom/src/events/accumulateEventTargetListeners.js ModifiedM packages/react-dom/src/events/accumulateTwoPhaseListeners.js ModifiedM packages/react-dom/src/events/getListener.js ModifiedM packages/react-dom/src/server/ReactPartialRendererHooks.js ModifiedM packages/react-native-renderer/src/ReactFabricEventEmitter.js ModifiedM packages/react-native-renderer/src/ReactNativeEventEmitter.js ModifiedM packages/react-native-renderer/src/ReactNativeFiberInspector.js ModifiedM packages/react-native-renderer/src/ReactNativeGetListener.js ModifiedM packages/react-noop-renderer/src/createReactNoop.js ModifiedM packages/react-reconciler/src/ReactCapturedValue.js ModifiedM packages/react-reconciler/src/ReactChildFiber.old.js ModifiedM packages/react-reconciler/src/ReactCurrentFiber.js ModifiedM packages/react-reconciler/src/ReactFiber.old.js ModifiedM packages/react-reconciler/src/ReactFiberBeginWork.old.js ModifiedM packages/react-reconciler/src/ReactFiberClassComponent.old.js ModifiedM packages/react-reconciler/src/ReactFiberCommitWork.old.js ModifiedM packages/react-reconciler/src/ReactFiberCompleteWork.old.js ModifiedM packages/react-reconciler/src/ReactFiberComponentStack.js ModifiedM packages/react-reconciler/src/ReactFiberContext.old.js ModifiedM packages/react-reconciler/src/ReactFiberDeprecatedEvents.old.js ModifiedM packages/react-reconciler/src/ReactFiberDevToolsHook.old.js ModifiedM packages/react-reconciler/src/ReactFiberErrorDialog.js ModifiedM packages/react-reconciler/src/ReactFiberErrorLogger.js ModifiedR packages/react-reconciler/src/ReactFiberExpirationTime.old.js →packages/react-reconciler/src/ReactFiberExpirationTime.js RenamedM packages/react-reconciler/src/ReactFiberFundamental.old.js ModifiedM packages/react-reconciler/src/ReactFiberHooks.old.js ModifiedM packages/react-reconciler/src/ReactFiberHostContext.old.js ModifiedM packages/react-reconciler/src/ReactFiberHotReloading.old.js ModifiedM packages/react-reconciler/src/ReactFiberHydrationContext.old.js ModifiedM packages/react-reconciler/src/ReactFiberNewContext.old.js ModifiedM packages/react-reconciler/src/ReactFiberReconciler.old.js ModifiedM packages/react-reconciler/src/ReactFiberRoot.old.js ModifiedM packages/react-reconciler/src/ReactFiberScope.old.js ModifiedM packages/react-reconciler/src/ReactFiberStack.old.js ModifiedM packages/react-reconciler/src/ReactFiberSuspenseComponent.old.js ModifiedR packages/react-reconciler/src/ReactFiberSuspenseConfig.old.js →packages/react-reconciler/src/ReactFiberSuspenseConfig.js RenamedM packages/react-reconciler/src/ReactFiberSuspenseContext.old.js ModifiedM packages/react-reconciler/src/ReactFiberThrow.old.js ModifiedM packages/react-reconciler/src/ReactFiberTreeReflection.js ModifiedM packages/react-reconciler/src/ReactFiberUnwindWork.old.js ModifiedM packages/react-reconciler/src/ReactFiberWorkLoop.old.js ModifiedA packages/react-reconciler/src/ReactInternalTypes.js AddedM packages/react-reconciler/src/ReactMutableSource.old.js ModifiedM packages/react-reconciler/src/ReactProfilerTimer.old.js ModifiedM packages/react-reconciler/src/ReactStrictModeWarnings.old.js ModifiedM packages/react-reconciler/src/ReactUpdateQueue.old.js ModifiedM packages/react-reconciler/src/SchedulerWithReactIntegration.old.js ModifiedM packages/react-refresh/src/ReactFreshRuntime.js ModifiedM packages/react-test-renderer/src/ReactTestRenderer.js ModifiedM packages/react/src/ReactBatchConfig.js ModifiedM packages/react/src/ReactCurrentBatchConfig.js ModifiedM packages/react/src/ReactCurrentDispatcher.js ModifiedM packages/react/src/ReactCurrentOwner.js ModifiedM scripts/flow/react-native-host-hooks.js Modified
Patch

Files changed

Rendering syntax-highlighted changes…