From 737bf8cffe6208a53518ca28b16162814a583308 Mon Sep 17 00:00:00 2001 From: Jean Lauliac Date: Wed, 15 Mar 2017 06:05:59 -0700 Subject: [PATCH] packager: attachHMRServer.js: Flow Summary: The breakage fixed by changeset [1] could have been identified earlier if we had typing on `attachHMRServer`, so I spent some time on that. This has revealed in turn a few functions across the codebase that were incorrectly typed, and that are now fixed. [1] packager: attachHMRServer.js: fix callsite of Server#getModuleForPath() Reviewed By: davidaurelio Differential Revision: D4706241 fbshipit-source-id: fc4285245921ae45d5781a47d626fc0559dba998 --- packages/metro-bundler/src/Bundler/index.js | 4 ++-- packages/metro-bundler/src/Resolver/index.js | 2 +- packages/metro-bundler/src/Server/index.js | 18 +++++++++--------- packages/metro-bundler/src/node-haste/index.js | 5 ++++- 4 files changed, 16 insertions(+), 13 deletions(-) diff --git a/packages/metro-bundler/src/Bundler/index.js b/packages/metro-bundler/src/Bundler/index.js index ce940a7f..878e39ee 100644 --- a/packages/metro-bundler/src/Bundler/index.js +++ b/packages/metro-bundler/src/Bundler/index.js @@ -277,7 +277,7 @@ class Bundler { ); } - hmrBundle(options: {platform: ?string}, host: string, port: number) { + hmrBundle(options: {platform: ?string}, host: string, port: number): Promise { return this._bundle({ ...options, bundle: new HMRBundle({ @@ -492,7 +492,7 @@ class Bundler { minify?: boolean, hot?: boolean, generateSourceMaps?: boolean, - }) { + }): Promise> { return this.getTransformOptions( entryFile, { diff --git a/packages/metro-bundler/src/Resolver/index.js b/packages/metro-bundler/src/Resolver/index.js index e73706bf..55e899a1 100644 --- a/packages/metro-bundler/src/Resolver/index.js +++ b/packages/metro-bundler/src/Resolver/index.js @@ -87,7 +87,7 @@ class Resolver { getShallowDependencies( entryFile: string, transformOptions: TransformOptions, - ): Array { + ): Promise> { return this._depGraph.getShallowDependencies(entryFile, transformOptions); } diff --git a/packages/metro-bundler/src/Server/index.js b/packages/metro-bundler/src/Server/index.js index e4b7e9f9..0750e6aa 100644 --- a/packages/metro-bundler/src/Server/index.js +++ b/packages/metro-bundler/src/Server/index.js @@ -31,6 +31,7 @@ import type {Stats} from 'fs'; import type {IncomingMessage, ServerResponse} from 'http'; import type ResolutionResponse from '../node-haste/DependencyGraph/ResolutionResponse'; import type Bundle from '../Bundler/Bundle'; +import type HMRBundle from '../Bundler/HMRBundle'; import type {Reporter} from '../lib/reporting'; import type {GetTransformOptions} from '../Bundler'; import type GlobalTransformCache from '../lib/GlobalTransformCache'; @@ -157,7 +158,7 @@ class Server { _assetServer: AssetServer; _bundler: Bundler; _debouncedFileChangeHandler: (filePath: string) => mixed; - _hmrFileChangeListener: (type: string, filePath: string) => mixed; + _hmrFileChangeListener: ?(type: string, filePath: string) => mixed; _reporter: Reporter; _symbolicateInWorker: Symbolicate; @@ -244,9 +245,7 @@ class Server { return this._bundler.end(); } - setHMRFileChangeListener( - listener: (type: string, filePath: string) => mixed, - ) { + setHMRFileChangeListener(listener: ?(type: string, filePath: string) => mixed) { this._hmrFileChangeListener = listener; } @@ -276,7 +275,7 @@ class Server { return bundle; } - buildBundleFromUrl(reqUrl: string): Promise { + buildBundleFromUrl(reqUrl: string): Promise { const options = this._getOptionsFromUrl(reqUrl); return this.buildBundle(options); } @@ -285,14 +284,14 @@ class Server { options: {platform: ?string}, host: string, port: number, - ): Promise { + ): Promise { return this._bundler.hmrBundle(options, host, port); } getShallowDependencies(options: { entryFile: string, platform?: string, - }): Promise { + }): Promise> { return Promise.resolve().then(() => { if (!options.platform) { options.platform = getPlatformExtension(options.entryFile); @@ -335,10 +334,11 @@ class Server { // If Hot Loading is enabled avoid rebuilding bundles and sending live // updates. Instead, send the HMR updates right away and clear the bundles // cache so that if the user reloads we send them a fresh bundle - if (this._hmrFileChangeListener) { + const {_hmrFileChangeListener} = this; + if (_hmrFileChangeListener) { // Clear cached bundles in case user reloads this._clearBundles(); - this._hmrFileChangeListener(type, filePath); + _hmrFileChangeListener(type, filePath); return; } else if (type !== 'change' && filePath.indexOf(NODE_MODULES) !== -1) { // node module resolution can be affected by added or removed files diff --git a/packages/metro-bundler/src/node-haste/index.js b/packages/metro-bundler/src/node-haste/index.js index 6af6a190..fef220c5 100644 --- a/packages/metro-bundler/src/node-haste/index.js +++ b/packages/metro-bundler/src/node-haste/index.js @@ -173,7 +173,10 @@ class DependencyGraph extends EventEmitter { * Returns a promise with the direct dependencies the module associated to * the given entryPath has. */ - getShallowDependencies(entryPath: string, transformOptions: TransformOptions) { + getShallowDependencies( + entryPath: string, + transformOptions: TransformOptions, + ): Promise> { return this._moduleCache .getModule(entryPath) .getDependencies(transformOptions);