From 64f6e74a6d2276da425f5c7a6f602607a80322b2 Mon Sep 17 00:00:00 2001 From: Pieter Vanderwerff Date: Thu, 7 Jan 2021 11:31:16 -0800 Subject: [PATCH] Land suppressions for 0.142.0 release to xplat Summary: This change contains the suppressions for the up coming v0.142.0 Flow release. The new suppressions are a result the following changes: * Disallow flowing functions or inexact objects to indexed objects to improve object soundness. This can cause errors if you are passing a function or inexact objects when an indexed object is expected. * Flow now processes imports before checking the body of a file. In some rare cases this can expose previously skipped errors due to the processing order. Reviewed By: mroch Differential Revision: D25820434 fbshipit-source-id: 59cc1d852ffc8cc39f0d5112ce485fb33f05c092 --- packages/metro-resolver/src/resolve.js | 1 + packages/metro-transform-worker/src/index.js | 2 ++ .../Serializers/helpers/__tests__/bytecode-test.js | 1 + .../src/DeltaBundler/Serializers/helpers/__tests__/js-test.js | 2 ++ packages/metro/src/DeltaBundler/traverseDependencies.js | 1 + packages/metro/src/HmrServer.js | 1 + packages/metro/src/Server.js | 3 +++ packages/metro/src/lib/transformHelpers.js | 1 + 8 files changed, 12 insertions(+) diff --git a/packages/metro-resolver/src/resolve.js b/packages/metro-resolver/src/resolve.js index 7687446a0d..41fa1df8db 100644 --- a/packages/metro-resolver/src/resolve.js +++ b/packages/metro-resolver/src/resolve.js @@ -127,6 +127,7 @@ function resolve( .concat(extraPaths); for (let i = 0; i < allDirPaths.length; ++i) { const candidate = context.redirectModulePath(allDirPaths[i]); + // $FlowFixMe[incompatible-call] const result = resolveFileOrDir(context, candidate, platform); if (result.type === 'resolved') { return result.resolution; diff --git a/packages/metro-transform-worker/src/index.js b/packages/metro-transform-worker/src/index.js index 6d86cb6d91..177801be71 100644 --- a/packages/metro-transform-worker/src/index.js +++ b/packages/metro-transform-worker/src/index.js @@ -333,8 +333,10 @@ module.exports = { if ( ast.program.sourceType === 'module' && + // $FlowFixMe[incompatible-use] directives.findIndex(d => d.value.value === 'use strict') === -1 ) { + // $FlowFixMe[incompatible-use] directives.push(types.directive(types.directiveLiteral('use strict'))); } diff --git a/packages/metro/src/DeltaBundler/Serializers/helpers/__tests__/bytecode-test.js b/packages/metro/src/DeltaBundler/Serializers/helpers/__tests__/bytecode-test.js index cf114f3a13..aa6173df29 100644 --- a/packages/metro/src/DeltaBundler/Serializers/helpers/__tests__/bytecode-test.js +++ b/packages/metro/src/DeltaBundler/Serializers/helpers/__tests__/bytecode-test.js @@ -78,6 +78,7 @@ it('produces a bytecode header buffer for each module', () => { }); it('does not produce a bytecode header buffer for a script', () => { + // $FlowFixMe[cannot-write] myModule.output[1].type = 'bytecode/script'; const buffers = wrapModule(myModule, { diff --git a/packages/metro/src/DeltaBundler/Serializers/helpers/__tests__/js-test.js b/packages/metro/src/DeltaBundler/Serializers/helpers/__tests__/js-test.js index efed3678b3..61d79fbc52 100644 --- a/packages/metro/src/DeltaBundler/Serializers/helpers/__tests__/js-test.js +++ b/packages/metro/src/DeltaBundler/Serializers/helpers/__tests__/js-test.js @@ -74,6 +74,7 @@ describe('wrapModule()', () => { }); it('should not wrap a script', () => { + // $FlowFixMe[cannot-write] myModule.output[0].type = 'js/script'; expect( @@ -82,6 +83,7 @@ describe('wrapModule()', () => { dev: true, projectRoot: '/root', }), + // $FlowFixMe[incompatible-use] ).toEqual(myModule.output[0].data.code); }); diff --git a/packages/metro/src/DeltaBundler/traverseDependencies.js b/packages/metro/src/DeltaBundler/traverseDependencies.js index 69ab4bffd1..5594bfbd30 100644 --- a/packages/metro/src/DeltaBundler/traverseDependencies.js +++ b/packages/metro/src/DeltaBundler/traverseDependencies.js @@ -272,6 +272,7 @@ async function processModule( } catch (err) { // If there is an error, restore the previous dependency list. // This ensures we don't skip over them during the next traversal attempt. + // $FlowFixMe[cannot-write] module.dependencies = previousDependencies; throw err; } diff --git a/packages/metro/src/HmrServer.js b/packages/metro/src/HmrServer.js index b00bb9c550..77e371b755 100644 --- a/packages/metro/src/HmrServer.js +++ b/packages/metro/src/HmrServer.js @@ -149,6 +149,7 @@ class HmrServer { clientUrl.protocol = 'http'; const {dev, minify, runModule, bundleEntry: _bundleEntry, ...query} = clientUrl.query || {}; + // $FlowFixMe[incompatible-type] clientUrl.query = { ...query, dev: dev || 'true', diff --git a/packages/metro/src/Server.js b/packages/metro/src/Server.js index 55abdffba6..66423a996f 100644 --- a/packages/metro/src/Server.js +++ b/packages/metro/src/Server.js @@ -331,6 +331,7 @@ class Server { transformOptions.platform || parsePlatformFilePath(entryFile, this._platforms).platform; + // $FlowFixMe[incompatible-return] return await getAllFiles(prepend, graph, { platform, processModuleFilter: this._config.serializer.processModuleFilter, @@ -988,6 +989,7 @@ class Server { const getCodeFrame = (urls, symbolicatedStack) => { for (let i = 0; i < symbolicatedStack.length; i++) { const {collapse, column, file, lineNumber} = symbolicatedStack[i]; + // $FlowFixMe[incompatible-call] const entryPoint = path.resolve(this._config.projectRoot, file); if (collapse || lineNumber == null || urls.has(entryPoint)) { continue; @@ -999,6 +1001,7 @@ class Server { fs.readFileSync(entryPoint, 'utf8'), { // Metro returns 0 based columns but codeFrameColumns expects 1-based columns + // $FlowFixMe[unsafe-addition] start: {column: column + 1, line: lineNumber}, }, {forceColor: true}, diff --git a/packages/metro/src/lib/transformHelpers.js b/packages/metro/src/lib/transformHelpers.js index ecc4c00053..e44e3e2d5b 100644 --- a/packages/metro/src/lib/transformHelpers.js +++ b/packages/metro/src/lib/transformHelpers.js @@ -160,6 +160,7 @@ async function getResolveDependencyFn( const dependencyGraph = await await bundler.getDependencyGraph(); return (from: string, to: string) => + // $FlowFixMe[incompatible-call] dependencyGraph.resolveDependency(from, to, platform); }