From 600e32d4adcdb76af7f8cfd36344ecca75b80413 Mon Sep 17 00:00:00 2001 From: Dustan Kasten Date: Tue, 30 May 2017 13:41:31 -0400 Subject: [PATCH 1/8] bump flow to 0.47 --- .flowconfig | 2 +- package.json | 2 +- yarn.lock | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.flowconfig b/.flowconfig index e19555fb71cf..79aef07b774a 100644 --- a/.flowconfig +++ b/.flowconfig @@ -38,4 +38,4 @@ suppress_comment=\\(.\\|\n\\)*\\$FlowFixedInNextDeploy suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError [version] -^0.45.0 +^0.47.0 diff --git a/package.json b/package.json index 98bfddac87a1..79de79cb4238 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "fbjs": "^0.8.9", "fbjs-scripts": "^0.6.0", "filesize": "^3.5.6", - "flow-bin": "^0.45.0", + "flow-bin": "^0.47.0", "git-branch": "^0.3.0", "glob": "^6.0.4", "glob-stream": "^6.1.0", diff --git a/yarn.lock b/yarn.lock index eeaca8f61bf9..8a138cd2c560 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2287,9 +2287,9 @@ flat-cache@^1.2.1: graceful-fs "^4.1.2" write "^0.2.1" -flow-bin@^0.45.0: - version "0.45.0" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.45.0.tgz#009dd0f577a3f665c74ca8be827ae8c2dd8fd6b5" +flow-bin@^0.47.0: + version "0.47.0" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.47.0.tgz#a2a08ab3e0d1f1cb57d17e27b30b118b62fda367" flow-parser@0.43.0: version "0.43.0" From 71cb97d8d7a1b9ffe475651c6155784795fcef16 Mon Sep 17 00:00:00 2001 From: Dustan Kasten Date: Tue, 30 May 2017 15:17:55 -0400 Subject: [PATCH 2/8] Fix variadic function flow issues in fiber --- src/renderers/shared/fiber/ReactFiberCompleteWork.js | 2 -- src/renderers/shared/fiber/ReactFiberHostContext.js | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/renderers/shared/fiber/ReactFiberCompleteWork.js b/src/renderers/shared/fiber/ReactFiberCompleteWork.js index 092c825e8804..925ee9bea4ec 100644 --- a/src/renderers/shared/fiber/ReactFiberCompleteWork.js +++ b/src/renderers/shared/fiber/ReactFiberCompleteWork.js @@ -280,7 +280,6 @@ module.exports = function( if (wasHydrated) { instance = hydrateHostInstance( workInProgress, - rootContainerInstance, ); } else { instance = createInstance( @@ -342,7 +341,6 @@ module.exports = function( if (wasHydrated) { textInstance = hydrateHostTextInstance( workInProgress, - rootContainerInstance, ); } else { textInstance = createTextInstance( diff --git a/src/renderers/shared/fiber/ReactFiberHostContext.js b/src/renderers/shared/fiber/ReactFiberHostContext.js index 448bd8c72ea4..10128f360a90 100644 --- a/src/renderers/shared/fiber/ReactFiberHostContext.js +++ b/src/renderers/shared/fiber/ReactFiberHostContext.js @@ -89,7 +89,7 @@ module.exports = function( function pushHostContext(fiber: Fiber): void { const rootInstance = requiredContext(rootInstanceStackCursor.current); const context = requiredContext(contextStackCursor.current); - const nextContext = getChildHostContext(context, fiber.type, rootInstance); + const nextContext = getChildHostContext(context, fiber.type); // Don't push this Fiber's context unless it's unique. if (context === nextContext) { From c98e5f18ebc6e4faa3e56687b06133525e38f7fc Mon Sep 17 00:00:00 2001 From: Dustan Kasten Date: Tue, 30 May 2017 15:50:28 -0400 Subject: [PATCH 3/8] Fix variadic function flow issues in ReactFiberNative --- flow/react-native-host-hooks.js | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/flow/react-native-host-hooks.js b/flow/react-native-host-hooks.js index bda205a2b607..c31006931f6a 100644 --- a/flow/react-native-host-hooks.js +++ b/flow/react-native-host-hooks.js @@ -20,7 +20,7 @@ declare module 'deepFreezeAndThrowOnMutationInDev' { declare module 'flattenStyle' { } declare module 'InitializeCore' { } declare module 'RCTEventEmitter' { - declare function register() : void; + declare function register(any) : void; } declare module 'TextInputState' { declare function blurTextInput(object : any) : void; @@ -49,11 +49,19 @@ declare module 'UIManager' { addAtIndices : Array, removeAtIndices : Array ) : void; - declare function measure() : void; - declare function measureInWindow() : void; - declare function measureLayout() : void; - declare function removeRootView() : void; - declare function removeSubviewsFromContainerWithID() : void; + declare function measure(hostComponent: any, callback: Function) : void; + declare function measureInWindow( + nativeTag : ?number, + callback : Function + ) : void; + declare function measureLayout( + nativeTag : any, + nativeNode : number, + onFail : Function, + onSuccess : Function + ) : void; + declare function removeRootView(containerTag : number) : void; + declare function removeSubviewsFromContainerWithID(containerId : number) : void; declare function replaceExistingNonRootView() : void; declare function setChildren( containerTag : number, From 98914bfe11fe19db43b1c0c95501492079c989c0 Mon Sep 17 00:00:00 2001 From: Dustan Kasten Date: Tue, 30 May 2017 15:57:59 -0400 Subject: [PATCH 4/8] fix ReactDOM type issues with flow 0.47 --- src/renderers/dom/fiber/ReactDOMFiberComponent.js | 3 ++- src/renderers/dom/fiber/wrappers/ReactDOMFiberInput.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/renderers/dom/fiber/ReactDOMFiberComponent.js b/src/renderers/dom/fiber/ReactDOMFiberComponent.js index 948711f5b2a5..5c29bd810f8d 100644 --- a/src/renderers/dom/fiber/ReactDOMFiberComponent.js +++ b/src/renderers/dom/fiber/ReactDOMFiberComponent.js @@ -303,7 +303,7 @@ var ReactDOMFiberComponent = { }, createElement( - type: string, + type: *, props: Object, rootContainerElement: Element | Document, parentNamespace: string, @@ -341,6 +341,7 @@ var ReactDOMFiberComponent = { var firstChild = ((div.firstChild: any): HTMLScriptElement); domElement = div.removeChild(firstChild); } else if (props.is) { + // $FlowIssue `createElement` should be updated for Web Components domElement = ownerDocument.createElement(type, {is: props.is}); } else { // Separate else branch instead of using `props.is || undefined` above because of a Firefox bug. diff --git a/src/renderers/dom/fiber/wrappers/ReactDOMFiberInput.js b/src/renderers/dom/fiber/wrappers/ReactDOMFiberInput.js index 6d5387e25660..17b0f3df0250 100644 --- a/src/renderers/dom/fiber/wrappers/ReactDOMFiberInput.js +++ b/src/renderers/dom/fiber/wrappers/ReactDOMFiberInput.js @@ -201,7 +201,7 @@ var ReactDOMInput = { // Note: IE9 reports a number inputs as 'text', so check props instead. } else if (props.type === 'number') { // Simulate `input.valueAsNumber`. IE9 does not support it - var valueAsNumber = parseFloat(node.value, 10) || 0; + var valueAsNumber = parseFloat(node.value) || 0; // eslint-disable-next-line if (value != valueAsNumber) { From 9fbce50719e56565bdecc25fb64c59b06414c1af Mon Sep 17 00:00:00 2001 From: Dustan Kasten Date: Thu, 1 Jun 2017 14:08:08 -0400 Subject: [PATCH 5/8] getChildHostContext *does* take an `instance` argument --- src/renderers/shared/fiber/ReactFiberHostContext.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/renderers/shared/fiber/ReactFiberHostContext.js b/src/renderers/shared/fiber/ReactFiberHostContext.js index 10128f360a90..448bd8c72ea4 100644 --- a/src/renderers/shared/fiber/ReactFiberHostContext.js +++ b/src/renderers/shared/fiber/ReactFiberHostContext.js @@ -89,7 +89,7 @@ module.exports = function( function pushHostContext(fiber: Fiber): void { const rootInstance = requiredContext(rootInstanceStackCursor.current); const context = requiredContext(contextStackCursor.current); - const nextContext = getChildHostContext(context, fiber.type); + const nextContext = getChildHostContext(context, fiber.type, rootInstance); // Don't push this Fiber's context unless it's unique. if (context === nextContext) { From 7e1d656e61ac9576bab9c50594fdfeba1621592d Mon Sep 17 00:00:00 2001 From: Dustan Kasten Date: Thu, 1 Jun 2017 14:13:48 -0400 Subject: [PATCH 6/8] change recently added anys to mixedies --- flow/react-native-host-hooks.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flow/react-native-host-hooks.js b/flow/react-native-host-hooks.js index c31006931f6a..d1c332fc9cf2 100644 --- a/flow/react-native-host-hooks.js +++ b/flow/react-native-host-hooks.js @@ -20,7 +20,7 @@ declare module 'deepFreezeAndThrowOnMutationInDev' { declare module 'flattenStyle' { } declare module 'InitializeCore' { } declare module 'RCTEventEmitter' { - declare function register(any) : void; + declare function register(mixed) : void; } declare module 'TextInputState' { declare function blurTextInput(object : any) : void; @@ -49,13 +49,13 @@ declare module 'UIManager' { addAtIndices : Array, removeAtIndices : Array ) : void; - declare function measure(hostComponent: any, callback: Function) : void; + declare function measure(hostComponent: mixed, callback: Function) : void; declare function measureInWindow( nativeTag : ?number, callback : Function ) : void; declare function measureLayout( - nativeTag : any, + nativeTag : mixed, nativeNode : number, onFail : Function, onSuccess : Function From 97ec4cae738e384edc3e883530a9324a20065e52 Mon Sep 17 00:00:00 2001 From: Dustan Kasten Date: Thu, 1 Jun 2017 14:56:35 -0400 Subject: [PATCH 7/8] HydrationContext needs a handle on the rootContainerInstance --- src/renderers/shared/fiber/ReactFiberBeginWork.js | 2 +- src/renderers/shared/fiber/ReactFiberCompleteWork.js | 3 ++- src/renderers/shared/fiber/ReactFiberHydrationContext.js | 8 ++++---- src/renderers/shared/fiber/ReactFiberScheduler.js | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/renderers/shared/fiber/ReactFiberBeginWork.js b/src/renderers/shared/fiber/ReactFiberBeginWork.js index 8d9a8b4abb9a..f19f4adab4cd 100644 --- a/src/renderers/shared/fiber/ReactFiberBeginWork.js +++ b/src/renderers/shared/fiber/ReactFiberBeginWork.js @@ -66,7 +66,7 @@ if (__DEV__) { module.exports = function( config: HostConfig, hostContext: HostContext, - hydrationContext: HydrationContext, + hydrationContext: HydrationContext, scheduleUpdate: (fiber: Fiber, priorityLevel: PriorityLevel) => void, getPriorityContext: (fiber: Fiber, forceAsync: boolean) => PriorityLevel, ) { diff --git a/src/renderers/shared/fiber/ReactFiberCompleteWork.js b/src/renderers/shared/fiber/ReactFiberCompleteWork.js index 925ee9bea4ec..f076d7925094 100644 --- a/src/renderers/shared/fiber/ReactFiberCompleteWork.js +++ b/src/renderers/shared/fiber/ReactFiberCompleteWork.js @@ -47,7 +47,7 @@ var invariant = require('fbjs/lib/invariant'); module.exports = function( config: HostConfig, hostContext: HostContext, - hydrationContext: HydrationContext, + hydrationContext: HydrationContext, ) { const { createInstance, @@ -280,6 +280,7 @@ module.exports = function( if (wasHydrated) { instance = hydrateHostInstance( workInProgress, + rootContainerInstance, ); } else { instance = createInstance( diff --git a/src/renderers/shared/fiber/ReactFiberHydrationContext.js b/src/renderers/shared/fiber/ReactFiberHydrationContext.js index 2237e368a06f..bb0e3e55c3ea 100644 --- a/src/renderers/shared/fiber/ReactFiberHydrationContext.js +++ b/src/renderers/shared/fiber/ReactFiberHydrationContext.js @@ -22,18 +22,18 @@ const {Deletion, Placement} = require('ReactTypeOfSideEffect'); const {createFiberFromHostInstanceForDeletion} = require('ReactFiber'); -export type HydrationContext = { +export type HydrationContext = { enterHydrationState(fiber: Fiber): boolean, resetHydrationState(): void, tryToClaimNextHydratableInstance(fiber: Fiber): void, - hydrateHostInstance(fiber: Fiber): I, + hydrateHostInstance(fiber: Fiber, rootContainerInstance: C): I, hydrateHostTextInstance(fiber: Fiber): TI, popHydrationState(fiber: Fiber): boolean, }; module.exports = function( config: HostConfig, -): HydrationContext { +): HydrationContext { const { shouldSetTextContent, canHydrateInstance, @@ -147,7 +147,7 @@ module.exports = function( nextHydratableInstance = getFirstHydratableChild(nextInstance); } - function hydrateHostInstance(fiber: Fiber, rootContainerInstance: any): I { + function hydrateHostInstance(fiber: Fiber, rootContainerInstance: C): I { const instance: I = fiber.stateNode; hydrateInstance( instance, diff --git a/src/renderers/shared/fiber/ReactFiberScheduler.js b/src/renderers/shared/fiber/ReactFiberScheduler.js index 998f4484bfbf..267f208cb24d 100644 --- a/src/renderers/shared/fiber/ReactFiberScheduler.js +++ b/src/renderers/shared/fiber/ReactFiberScheduler.js @@ -146,7 +146,7 @@ module.exports = function( config: HostConfig, ) { const hostContext = ReactFiberHostContext(config); - const hydrationContext: HydrationContext = ReactFiberHydrationContext( + const hydrationContext: HydrationContext = ReactFiberHydrationContext( config, ); const {popHostContainer, popHostContext, resetHostContainer} = hostContext; From 0e8c3d50b95110710d201c118527bfec417d4363 Mon Sep 17 00:00:00 2001 From: Dustan Kasten Date: Thu, 1 Jun 2017 14:32:57 -0400 Subject: [PATCH 8/8] prettier --- src/renderers/shared/fiber/ReactFiberCompleteWork.js | 4 +--- src/renderers/shared/fiber/ReactFiberScheduler.js | 8 +++++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/renderers/shared/fiber/ReactFiberCompleteWork.js b/src/renderers/shared/fiber/ReactFiberCompleteWork.js index f076d7925094..9e95547b48f0 100644 --- a/src/renderers/shared/fiber/ReactFiberCompleteWork.js +++ b/src/renderers/shared/fiber/ReactFiberCompleteWork.js @@ -340,9 +340,7 @@ module.exports = function( let textInstance; let wasHydrated = popHydrationState(workInProgress); if (wasHydrated) { - textInstance = hydrateHostTextInstance( - workInProgress, - ); + textInstance = hydrateHostTextInstance(workInProgress); } else { textInstance = createTextInstance( newText, diff --git a/src/renderers/shared/fiber/ReactFiberScheduler.js b/src/renderers/shared/fiber/ReactFiberScheduler.js index 267f208cb24d..e010390bc8dd 100644 --- a/src/renderers/shared/fiber/ReactFiberScheduler.js +++ b/src/renderers/shared/fiber/ReactFiberScheduler.js @@ -146,9 +146,11 @@ module.exports = function( config: HostConfig, ) { const hostContext = ReactFiberHostContext(config); - const hydrationContext: HydrationContext = ReactFiberHydrationContext( - config, - ); + const hydrationContext: HydrationContext< + I, + TI, + C + > = ReactFiberHydrationContext(config); const {popHostContainer, popHostContext, resetHostContainer} = hostContext; const {beginWork, beginFailedWork} = ReactFiberBeginWork( config,