diff --git a/scripts/flow/config/flowconfig b/scripts/flow/config/flowconfig index a7f536c23b24..4790c78cf38e 100644 --- a/scripts/flow/config/flowconfig +++ b/scripts/flow/config/flowconfig @@ -14,6 +14,9 @@ .*/__mocks__/.* .*/__tests__/.* +# TODO: noop should get its own inlinedHostConfig entry +.*/packages/react-noop-renderer/.* + %REACT_RENDERER_FLOW_IGNORES% [include] diff --git a/scripts/flow/createFlowConfigs.js b/scripts/flow/createFlowConfigs.js index a0a5e7a32303..0c5e8f4dce98 100644 --- a/scripts/flow/createFlowConfigs.js +++ b/scripts/flow/createFlowConfigs.js @@ -18,37 +18,43 @@ const configTemplate = fs .readFileSync(__dirname + '/config/flowconfig') .toString(); -function writeConfig(renderer, isServerSupported) { +function writeConfig(renderer, rendererInfo, isServerSupported) { const folder = __dirname + '/' + renderer; mkdirp.sync(folder); const serverRenderer = isServerSupported ? renderer : 'custom'; + + let ignoredPaths = []; + + inlinedHostConfigs.forEach(otherRenderer => { + if (otherRenderer === rendererInfo) { + return; + } + otherRenderer.paths.forEach(otherPath => { + if (rendererInfo.paths.indexOf(otherPath) !== -1) { + return; + } + ignoredPaths.push(`.*/packages/${otherPath}`); + }); + + if (otherRenderer.shortName !== serverRenderer) { + ignoredPaths.push( + `.*/packages/.*/forks/.*.${otherRenderer.shortName}.js`, + ); + } + }); + const config = configTemplate .replace( '%REACT_RENDERER_FLOW_OPTIONS%', ` -module.name_mapper='react-reconciler/inline.${renderer}$$' -> 'react-reconciler/inline-typed' module.name_mapper='ReactFiberHostConfig$$' -> 'forks/ReactFiberHostConfig.${renderer}' -module.name_mapper='react-server/inline.${renderer}$$' -> 'react-server/inline-typed' -module.name_mapper='react-server/flight.inline.${renderer}$$' -> 'react-server/flight.inline-typed' module.name_mapper='ReactServerHostConfig$$' -> 'forks/ReactServerHostConfig.${serverRenderer}' module.name_mapper='ReactServerFormatConfig$$' -> 'forks/ReactServerFormatConfig.${serverRenderer}' -module.name_mapper='react-flight/inline.${renderer}$$' -> 'react-flight/inline-typed' module.name_mapper='ReactFlightClientHostConfig$$' -> 'forks/ReactFlightClientHostConfig.${serverRenderer}' `.trim(), ) - .replace( - '%REACT_RENDERER_FLOW_IGNORES%', - renderer === 'dom' || renderer === 'dom-browser' - ? '' - : // If we're not checking DOM, ignore the DOM package since it - // won't be consistent. - ` - .*/packages/react-dom/.* - .*/packages/.*/forks/.*.dom.js - .*/packages/.*/forks/.*.dom-browser.js - `.trim(), - ); + .replace('%REACT_RENDERER_FLOW_IGNORES%', ignoredPaths.join('\n')); const disclaimer = ` # ---------------------------------------------------------------# @@ -81,6 +87,10 @@ ${disclaimer} // so that we can run those checks in parallel if we want. inlinedHostConfigs.forEach(rendererInfo => { if (rendererInfo.isFlowTyped) { - writeConfig(rendererInfo.shortName, rendererInfo.isServerSupported); + writeConfig( + rendererInfo.shortName, + rendererInfo, + rendererInfo.isServerSupported, + ); } }); diff --git a/scripts/shared/inlinedHostConfigs.js b/scripts/shared/inlinedHostConfigs.js index 5f2a4d542885..0bef020e278c 100644 --- a/scripts/shared/inlinedHostConfigs.js +++ b/scripts/shared/inlinedHostConfigs.js @@ -16,40 +16,65 @@ module.exports = [ 'react-flight-dom-webpack/server.node', 'react-flight-dom-webpack', ], + paths: [ + 'react-dom', + 'react-dom/unstable-fizz', + 'react-dom/unstable-fizz.node', + 'react-dom/src/server/ReactDOMFizzServerNode.js', // react-dom/unstable-fizz.node + 'react-flight-dom-webpack', + 'react-flight-dom-webpack/server', + 'react-flight-dom-webpack/server.node', + 'react-flight-dom-webpack/src/ReactFlightDOMServerNode.js', // react-flight-dom-webpack/server.browser + ], isFlowTyped: true, isServerSupported: true, }, { shortName: 'dom-browser', entryPoints: [ + 'react-dom', + 'react-dom/testing', 'react-dom/unstable-fizz.browser', 'react-flight-dom-webpack/server.browser', 'react-flight-dom-webpack', ], + paths: [ + 'react-dom', + 'react-dom/testing', + 'react-dom/unstable-fizz.browser', + 'react-dom/src/server/ReactDOMFizzServerBrowser.js', // react-dom/unstable-fizz.browser + 'react-flight-dom-webpack', + 'react-flight-dom-webpack/server.browser', + 'react-flight-dom-webpack/src/ReactFlightDOMServerBrowser.js', // react-flight-dom-webpack/server.browser + ], isFlowTyped: true, isServerSupported: true, }, { shortName: 'art', entryPoints: ['react-art'], + paths: ['react-art'], isFlowTyped: false, // TODO: type it. isServerSupported: false, }, { shortName: 'native', entryPoints: ['react-native-renderer'], + paths: ['react-native-renderer'], isFlowTyped: true, isServerSupported: false, }, { shortName: 'fabric', entryPoints: ['react-native-renderer/fabric'], + paths: ['react-native-renderer'], isFlowTyped: true, isServerSupported: false, }, { shortName: 'test', entryPoints: ['react-test-renderer'], + paths: ['react-test-renderer'], isFlowTyped: true, isServerSupported: false, }, @@ -61,6 +86,7 @@ module.exports = [ 'react-server', 'react-server/flight', ], + paths: [], isFlowTyped: true, isServerSupported: true, },