From ee0fc308140059388e99797df01d0f445d73037a Mon Sep 17 00:00:00 2001 From: David Aurelio Date: Fri, 28 Apr 2017 16:53:10 -0700 Subject: [PATCH] Fix support for haste packages Summary: Fixes support for haste packages in `ModuleGraph`. As `HasteMap` is no longer used for anything else, we can probably strip it down completely. Reviewed By: cpojer Differential Revision: D4967367 fbshipit-source-id: d40cbe46c1e8b05690c0a2c71955479c28607c01 --- .../src/ModuleGraph/node-haste/node-haste.js | 4 +-- .../node-haste/DependencyGraph/HasteMap.js | 26 +++++++++++++------ 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/packages/metro-bundler/src/ModuleGraph/node-haste/node-haste.js b/packages/metro-bundler/src/ModuleGraph/node-haste/node-haste.js index 966e248d..c9ba2468 100644 --- a/packages/metro-bundler/src/ModuleGraph/node-haste/node-haste.js +++ b/packages/metro-bundler/src/ModuleGraph/node-haste/node-haste.js @@ -51,8 +51,8 @@ function getFakeModuleMap(hasteMap: HasteMap) { return module && module.type === 'Module' ? module.path : null; }, getPackage(name: string, platform: ?string): ?string { - const module = hasteMap.getModule(name, platform); - return module && module.type === 'Package' ? module.path : null; + const pkg = hasteMap.getPackage(name); + return pkg && pkg.path; }, }; } diff --git a/packages/metro-bundler/src/node-haste/DependencyGraph/HasteMap.js b/packages/metro-bundler/src/node-haste/DependencyGraph/HasteMap.js index c62aaeee..52809f22 100644 --- a/packages/metro-bundler/src/node-haste/DependencyGraph/HasteMap.js +++ b/packages/metro-bundler/src/node-haste/DependencyGraph/HasteMap.js @@ -41,6 +41,7 @@ class HasteMap extends EventEmitter { build() { this._map = Object.create(null); + this._packages = Object.create(null); const promises = []; this._files.forEach(filePath => { if (!this._helpers.isNodeModulesDir(filePath)) { @@ -116,6 +117,10 @@ class HasteMap extends EventEmitter { return module; } + getPackage(name): Package { + return this._packages[name]; + } + _processHasteModule(file, previousName) { const module = this._moduleCache.getModule(file); return module.isHaste().then( @@ -151,13 +156,20 @@ class HasteMap extends EventEmitter { } _updateHasteMap(name, mod) { - if (this._map[name] == null) { - this._map[name] = Object.create(null); - } + let existingModule; - const moduleMap = this._map[name]; - const modulePlatform = getPlatformExtension(mod.path, this._platforms) || GENERIC_PLATFORM; - const existingModule = moduleMap[modulePlatform]; + if (mod.type === 'Package') { + existingModule = this._packages[name]; + this._packages[name] = mod; + } else { + if (this._map[name] == null) { + this._map[name] = Object.create(null); + } + const moduleMap = this._map[name]; + const modulePlatform = getPlatformExtension(mod.path, this._platforms) || GENERIC_PLATFORM; + existingModule = moduleMap[modulePlatform]; + moduleMap[modulePlatform] = mod; + } if (existingModule && existingModule.path !== mod.path) { throw new Error( @@ -168,8 +180,6 @@ class HasteMap extends EventEmitter { 'with the same name across two different files.' ); } - - moduleMap[modulePlatform] = mod; } }