diff --git a/packages/metro-bundler/src/Config.js b/packages/metro-bundler/src/Config.js index 34a2b431..ca98aeaa 100644 --- a/packages/metro-bundler/src/Config.js +++ b/packages/metro-bundler/src/Config.js @@ -34,7 +34,8 @@ export type ConfigT = { * from here and use `require('./fonts/example.ttf')` inside your app. */ getAssetExts: () => Array, - + // TODO: Remove this option below (T23793920) + assetTransforms?: boolean, /** * Returns a regular expression for modules that should be ignored by the * packager on a given platform. @@ -140,6 +141,7 @@ export type ConfigT = { const DEFAULT = ({ extraNodeModules: {}, + assetTransforms: false, getAssetExts: () => [], getBlacklistRE: () => blacklist(), getEnableBabelRCLookup: () => false, diff --git a/packages/metro-bundler/src/Server/index.js b/packages/metro-bundler/src/Server/index.js index c7d886b5..76b2796d 100644 --- a/packages/metro-bundler/src/Server/index.js +++ b/packages/metro-bundler/src/Server/index.js @@ -113,8 +113,11 @@ class Server { const reporter = options.reporter || require('../lib/reporting').nullReporter; const maxWorkers = getMaxWorkers(options.maxWorkers); + const assetExts = options.assetExts || defaults.assetExts; + const sourceExts = options.sourceExts || defaults.sourceExts; + this._opts = { - assetExts: options.assetExts || defaults.assetExts, + assetExts: options.assetTransforms ? [] : assetExts, assetRegistryPath: options.assetRegistryPath, blacklistRE: options.blacklistRE, cacheVersion: options.cacheVersion || '1.0', @@ -141,7 +144,9 @@ class Server { reporter, resetCache: options.resetCache || false, silent: options.silent || false, - sourceExts: options.sourceExts || defaults.sourceExts, + sourceExts: options.assetTransforms + ? sourceExts.concat(assetExts) + : sourceExts, transformCache: options.transformCache, transformModulePath: options.transformModulePath || defaults.transformModulePath, diff --git a/packages/metro-bundler/src/legacy.js b/packages/metro-bundler/src/legacy.js index 7d8b6df3..0d88234c 100644 --- a/packages/metro-bundler/src/legacy.js +++ b/packages/metro-bundler/src/legacy.js @@ -174,6 +174,7 @@ function createNonPersistentServer(options: Options): Server { function toServerOptions(options: Options): ServerOptions { return { + assetTransforms: options.assetTransforms, assetExts: options.assetExts, assetRegistryPath: options.assetRegistryPath, blacklistRE: options.blacklistRE, diff --git a/packages/metro-bundler/src/node-haste/DependencyGraph/DependencyGraphHelpers.js b/packages/metro-bundler/src/node-haste/DependencyGraph/DependencyGraphHelpers.js index 6f399af3..51c15cd1 100644 --- a/packages/metro-bundler/src/node-haste/DependencyGraph/DependencyGraphHelpers.js +++ b/packages/metro-bundler/src/node-haste/DependencyGraph/DependencyGraphHelpers.js @@ -18,7 +18,7 @@ const NODE_MODULES = path.sep + 'node_modules' + path.sep; class DependencyGraphHelpers { _providesModuleNodeModules: Array; - _assetExts: Array; + _assetExts: Set; constructor({ providesModuleNodeModules, @@ -28,7 +28,7 @@ class DependencyGraphHelpers { +assetExts: Array, }) { this._providesModuleNodeModules = providesModuleNodeModules; - this._assetExts = assetExts; + this._assetExts = new Set(assetExts); } isNodeModulesDir(file: string) { @@ -49,7 +49,7 @@ class DependencyGraphHelpers { } isAssetFile(file: string) { - return this._assetExts.indexOf(this.extname(file)) !== -1; + return this._assetExts.has(this.extname(file)); } extname(name: string) { diff --git a/packages/metro-bundler/src/shared/types.flow.js b/packages/metro-bundler/src/shared/types.flow.js index 9719c76a..dab4e529 100644 --- a/packages/metro-bundler/src/shared/types.flow.js +++ b/packages/metro-bundler/src/shared/types.flow.js @@ -61,6 +61,8 @@ export type ModuleTransportLike = { }; export type Options = {| + // TODO: Remove this option below (T23793920) + assetTransforms?: boolean, assetExts?: Array, +assetRegistryPath: string, blacklistRE?: RegExp,