diff --git a/packages/metro-bundler/src/Server/index.js b/packages/metro-bundler/src/Server/index.js index 55314e77..92bd4ca4 100644 --- a/packages/metro-bundler/src/Server/index.js +++ b/packages/metro-bundler/src/Server/index.js @@ -66,7 +66,7 @@ function debounceAndBatch(fn, delay) { }; } -type Options = { +export type Options = {| assetExts?: Array, +assetRegistryPath: string, blacklistRE?: RegExp, @@ -86,7 +86,7 @@ type Options = { postProcessBundleSourcemap: PostProcessBundleSourcemap, projectRoots: $ReadOnlyArray, providesModuleNodeModules?: Array, - reporter: Reporter, + reporter?: Reporter, resetCache?: boolean, silent?: boolean, +sourceExts: ?Array, @@ -95,7 +95,7 @@ type Options = { transformTimeoutInterval?: number, watch?: boolean, workerPath: ?string, -}; +|}; export type BundleOptions = { +assetPlugins: Array, @@ -174,6 +174,8 @@ class Server { _nextBundleBuildID: number; constructor(options: Options) { + const reporter = + options.reporter || require('../lib/reporting').nullReporter; const maxWorkers = getMaxWorkers(options.maxWorkers); this._opts = { assetExts: options.assetExts || defaults.assetExts, @@ -199,7 +201,7 @@ class Server { postProcessBundleSourcemap: options.postProcessBundleSourcemap, projectRoots: options.projectRoots, providesModuleNodeModules: options.providesModuleNodeModules, - reporter: options.reporter, + reporter, resetCache: options.resetCache || false, silent: options.silent || false, sourceExts: options.sourceExts || defaults.sourceExts, @@ -213,7 +215,7 @@ class Server { const processFileChange = ({type, filePath}) => this.onFileChange(type, filePath); - this._reporter = options.reporter; + this._reporter = reporter; this._projectRoots = this._opts.projectRoots; this._bundles = Object.create(null); this._changeWatchers = []; @@ -230,7 +232,7 @@ class Server { bundlerOpts.allowBundleUpdates = this._opts.watch; bundlerOpts.globalTransformCache = options.globalTransformCache; bundlerOpts.watch = this._opts.watch; - bundlerOpts.reporter = options.reporter; + bundlerOpts.reporter = reporter; this._bundler = new Bundler(bundlerOpts); // changes to the haste map can affect resolution of files in the bundle diff --git a/packages/metro-bundler/src/index.js b/packages/metro-bundler/src/index.js index 01f726a1..cec816fc 100644 --- a/packages/metro-bundler/src/index.js +++ b/packages/metro-bundler/src/index.js @@ -21,7 +21,7 @@ const invariant = require('fbjs/lib/invariant'); const {fromRawMappings, compactMapping} = require('./Bundler/source-map'); import type {PostProcessModules, PostMinifyProcess, PostProcessBundleSourcemap} from './Bundler'; -import type Server from './Server'; +import type Server, {Options as ServerOptions} from './Server'; import type {GlobalTransformCache} from './lib/GlobalTransformCache'; import type {TransformCache} from './lib/TransformCaching'; import type {Reporter} from './lib/reporting'; @@ -33,27 +33,13 @@ exports.createServer = createServer; exports.Logger = Logger; type Options = {| - +assetRegistryPath: string, - +sourceExts: ?Array, - +transformCache: TransformCache, - +transformModulePath: string, - enableBabelRCLookup?: boolean, - getPolyfills: ({platform: ?string}) => $ReadOnlyArray, - globalTransformCache: ?GlobalTransformCache, - hasteImpl?: HasteImpl, - +maxWorkers?: number, - nonPersistent?: boolean, - postMinifyProcess?: PostMinifyProcess, - postProcessBundleSourcemap?: PostProcessBundleSourcemap, - postProcessModules?: PostProcessModules, - projectRoots: $ReadOnlyArray, - reporter?: Reporter, - watch?: boolean, - workerPath: ?string, + ...ServerOptions, + // optional types to force flow errors in `toServerOptions` + nonPersistent?: ?boolean, + transformCache?: ?TransformCache, + verbose?: ?boolean, |}; -type StrictOptions = {...Options, reporter: Reporter}; - type PublicBundleOptions = { +dev?: boolean, +entryFile: string, @@ -127,7 +113,7 @@ function enableDebug() { debug.enable(debugPattern); } -function createServer(options: StrictOptions): Server { +function createServer(options: Options): Server { // the debug module is configured globally, we need to enable debugging // *before* requiring any packages that use `debug` for logging if (options.verbose) { @@ -135,25 +121,45 @@ function createServer(options: StrictOptions): Server { } // Some callsites may not be Flowified yet. - invariant(options.reporter != null, 'createServer() requires reporter'); - if (options.transformCache == null) { - options.transformCache = TransformCaching.useTempDir(); - } - const serverOptions = Object.assign({}, options); - delete serverOptions.verbose; + invariant(options.assetRegistryPath != null, 'createServer() requires assetRegistryPath'); + const ServerClass = require('./Server'); - return new ServerClass(serverOptions); + return new ServerClass(toServerOptions(options)); } function createNonPersistentServer(options: Options): Server { - const serverOptions = { - // It's unsound to set-up the reporter here, - // but this allows backward compatibility. - reporter: options.reporter == null - ? require('./lib/reporting').nullReporter - : options.reporter, - ...options, - watch: !options.nonPersistent, - }; - return createServer(serverOptions); + return createServer(options); +} + +function toServerOptions(options: Options): ServerOptions { + return { + assetExts: options.assetExts, + assetRegistryPath: options.assetRegistryPath, + blacklistRE: options.blacklistRE, + cacheVersion: options.cacheVersion, + enableBabelRCLookup: options.enableBabelRCLookup, + extraNodeModules: options.extraNodeModules, + getPolyfills: options.getPolyfills, + getTransformOptions: options.getTransformOptions, + globalTransformCache: options.globalTransformCache, + hasteImpl: options.hasteImpl, + maxWorkers: options.maxWorkers, + moduleFormat: options.moduleFormat, + platforms: options.platforms, + polyfillModuleNames: options.polyfillModuleNames, + postProcessModules: options.postProcessModules, + postMinifyProcess: options.postMinifyProcess, + postProcessBundleSourcemap: options.postProcessBundleSourcemap, + projectRoots: options.projectRoots, + providesModuleNodeModules: options.providesModuleNodeModules, + reporter: options.reporter, + resetCache: options.resetCache, + silent: options.silent, + sourceExts: options.sourceExts, + transformCache: options.transformCache || TransformCaching.useTempDir(), + transformModulePath: options.transformModulePath, + transformTimeoutInterval: options.transformTimeoutInterval, + watch: typeof options.watch === 'boolean' ? options.watch : !!options.nonPersistent, + workerPath: options.workerPath, + }; }