From 46a28ea45a597d48d7951dca007724cc8cccfc0d Mon Sep 17 00:00:00 2001 From: Peter van der Zee Date: Fri, 1 Mar 2019 07:48:00 -0800 Subject: [PATCH] Improve flow coverage in Metro Reviewed By: mjesun Differential Revision: D14258819 fbshipit-source-id: 72cd19789d1c651238334a016581217ad7278999 --- packages/metro/src/Bundler/util.js | 7 ++-- .../metro/src/DeltaBundler/Transformer.js | 2 +- packages/metro/src/DeltaBundler/WorkerFarm.js | 4 +-- packages/metro/src/lib/getPreludeCode.js | 4 +-- .../DependencyGraph/ResolutionRequest.js | 2 +- .../output/RamBundle/as-indexed-file.js | 35 ++++++++++++++----- .../metro/src/shared/output/RamBundle/util.js | 4 +-- packages/metro/src/shared/output/meta.js | 10 ++++-- 8 files changed, 48 insertions(+), 20 deletions(-) diff --git a/packages/metro/src/Bundler/util.js b/packages/metro/src/Bundler/util.js index 440e703df3..d64f8fe438 100644 --- a/packages/metro/src/Bundler/util.js +++ b/packages/metro/src/Bundler/util.js @@ -146,7 +146,7 @@ function isAssetTypeAnImage(type: string): boolean { ); } -function filterObject(object, blacklist) { +function filterObject(object: AssetDataWithoutFiles, blacklist: Set) { const copied = Object.assign({}, object); for (const key of blacklist) { delete copied[key]; @@ -209,7 +209,10 @@ function createRamBundleGroups( return result; } -function* filter(iterator, predicate) { +function* filter( + iterator: ArrayMap, + predicate: ([number, Array]) => boolean, +) { for (const value of iterator) { if (predicate(value)) { yield value; diff --git a/packages/metro/src/DeltaBundler/Transformer.js b/packages/metro/src/DeltaBundler/Transformer.js index deeb1bf089..53922ec717 100644 --- a/packages/metro/src/DeltaBundler/Transformer.js +++ b/packages/metro/src/DeltaBundler/Transformer.js @@ -143,7 +143,7 @@ class Transformer { } } -function verifyRootExists(root) { +function verifyRootExists(root: string) { // Verify that the root exists. assert(fs.statSync(root).isDirectory(), 'Root has to be a valid directory'); } diff --git a/packages/metro/src/DeltaBundler/WorkerFarm.js b/packages/metro/src/DeltaBundler/WorkerFarm.js index 8b397ca21e..d457e11f41 100644 --- a/packages/metro/src/DeltaBundler/WorkerFarm.js +++ b/packages/metro/src/DeltaBundler/WorkerFarm.js @@ -143,7 +143,7 @@ class WorkerFarm { return null; } - _formatGenericError(err, filename) { + _formatGenericError(err, filename: string) { const error = new TransformError(`${filename}: ${err.message}`); return Object.assign(error, { @@ -155,7 +155,7 @@ class WorkerFarm { }); } - _formatBabelError(err, filename) { + _formatBabelError(err, filename: string) { const error = new TransformError( `${err.type || 'Error'}${ err.message.includes(filename) ? '' : ' in ' + filename diff --git a/packages/metro/src/lib/getPreludeCode.js b/packages/metro/src/lib/getPreludeCode.js index d4c09eb2cf..135ad6d3be 100644 --- a/packages/metro/src/lib/getPreludeCode.js +++ b/packages/metro/src/lib/getPreludeCode.js @@ -30,7 +30,7 @@ function getPreludeCode({ const excluded = new Set(['__BUNDLE_START_TIME__', '__DEV__', 'process']); -function formatExtraVars(extraVars) { +function formatExtraVars(extraVars: ?{[string]: mixed}) { const assignments = []; for (const key in extraVars) { @@ -42,7 +42,7 @@ function formatExtraVars(extraVars) { return assignments; } -function processEnv(nodeEnv) { +function processEnv(nodeEnv: string) { return `process.env=process.env||{};process.env.NODE_ENV=process.env.NODE_ENV||${JSON.stringify( nodeEnv, )};`; diff --git a/packages/metro/src/node-haste/DependencyGraph/ResolutionRequest.js b/packages/metro/src/node-haste/DependencyGraph/ResolutionRequest.js index bcff03f39a..f2faa490af 100644 --- a/packages/metro/src/node-haste/DependencyGraph/ResolutionRequest.js +++ b/packages/metro/src/node-haste/DependencyGraph/ResolutionRequest.js @@ -111,7 +111,7 @@ class ResolutionRequest { } } -function getResolutionCacheKey(modulePath, depName) { +function getResolutionCacheKey(modulePath: string, depName: string) { return `${path.resolve(modulePath)}:${depName}`; } diff --git a/packages/metro/src/shared/output/RamBundle/as-indexed-file.js b/packages/metro/src/shared/output/RamBundle/as-indexed-file.js index ad23780d47..1ec11736ae 100644 --- a/packages/metro/src/shared/output/RamBundle/as-indexed-file.js +++ b/packages/metro/src/shared/output/RamBundle/as-indexed-file.js @@ -97,24 +97,35 @@ function writeBuffers(stream, buffers: Array) { }); } -function nullTerminatedBuffer(contents, encoding) { +function nullTerminatedBuffer( + contents: string, + encoding: void | 'ascii' | 'utf16le' | 'utf8', +) { return Buffer.concat([Buffer.from(contents, encoding), nullByteBuffer]); } -function moduleToBuffer(id, code, encoding) { +function moduleToBuffer( + id: number, + code: string, + encoding: void | 'ascii' | 'utf16le' | 'utf8', +) { return { id, buffer: nullTerminatedBuffer(code, encoding), }; } -function entryOffset(n) { +function entryOffset(n: number) { // 2: num_entries + startup_code_len // n * 2: each entry consists of two uint32s return (2 + n * 2) * SIZEOF_UINT32; } -function buildModuleTable(startupCode, moduleBuffers, moduleGroups) { +function buildModuleTable( + startupCode: Buffer, + moduleBuffers: Array<{buffer: Buffer, id: number}>, + moduleGroups: ModuleGroups, +) { // table format: // - num_entries: uint_32 number of entries // - startup_code_len: uint_32 length of the startup section @@ -124,7 +135,7 @@ function buildModuleTable(startupCode, moduleBuffers, moduleGroups) { // - module_offset: uint_32 offset into the modules blob // - module_length: uint_32 length of the module code in bytes - const moduleIds = Array.from(moduleGroups.modulesById.keys()); + const moduleIds = [...moduleGroups.modulesById.keys()]; const maxId = moduleIds.reduce((max, id) => Math.max(max, id)); const numEntries = maxId + 1; const table: Buffer = Buffer.alloc(entryOffset(numEntries)).fill(0); @@ -154,7 +165,11 @@ function buildModuleTable(startupCode, moduleBuffers, moduleGroups) { return table; } -function groupCode(rootCode, moduleGroup, modulesById) { +function groupCode( + rootCode: string, + moduleGroup: void | Set, + modulesById: Map, +) { if (!moduleGroup || !moduleGroup.size) { return rootCode; } @@ -166,7 +181,11 @@ function groupCode(rootCode, moduleGroup, modulesById) { return code.join('\n'); } -function buildModuleBuffers(modules, moduleGroups, encoding) { +function buildModuleBuffers( + modules: $ReadOnlyArray, + moduleGroups: ModuleGroups, + encoding: void | 'ascii' | 'utf16le' | 'utf8', +): Array<{buffer: Buffer, id: number}> { return modules .filter(m => !moduleGroups.modulesInGroups.has(m.id)) .map(({id, code}) => @@ -214,7 +233,7 @@ function createModuleGroups( }; } -function* concat(iterators) { +function* concat(iterators: Iterator>) { for (const it of iterators) { yield* it; } diff --git a/packages/metro/src/shared/output/RamBundle/util.js b/packages/metro/src/shared/output/RamBundle/util.js index b56c8ef8f8..a3c27ca35f 100644 --- a/packages/metro/src/shared/output/RamBundle/util.js +++ b/packages/metro/src/shared/output/RamBundle/util.js @@ -76,8 +76,8 @@ function combineSourceMapsAddingOffsets( function combineMaps( modules: $ReadOnlyArray, offsets: ?Array, - moduleGroups, - options, + moduleGroups: ?ModuleGroups, + options: ?CombineOptions, ) { const sections = []; diff --git a/packages/metro/src/shared/output/meta.js b/packages/metro/src/shared/output/meta.js index e741239424..b6dd2c4b71 100644 --- a/packages/metro/src/shared/output/meta.js +++ b/packages/metro/src/shared/output/meta.js @@ -41,7 +41,10 @@ module.exports = function( return signature; }; -function tryAsciiPromotion(buffer, encoding) { +function tryAsciiPromotion( + buffer: Buffer, + encoding: 'ascii' | 'utf16le' | 'utf8', +) { if (!isUTF8(encoding)) { return encoding; } @@ -53,7 +56,10 @@ function tryAsciiPromotion(buffer, encoding) { return 'ascii'; } -function asBuffer(x, encoding): Buffer { +function asBuffer( + x: Buffer | string, + encoding: 'ascii' | 'utf16le' | 'utf8', +): Buffer { if (typeof x !== 'string') { return x; }