packager: never allow platform-specific asset resolution

Summary: I stumbled on this while refactoring that function, and i realised that, I believe it doesn't make sense to take into account the platform extension of the "potiential" file path. The reason is, if you try to require "foo.ios.png", the returned asset name would be "foo", and thus we'd try to find "foo.${ext}.png" where `ext` could actually be `android` or anything else! So it's confusing. There's no reason we should allow callsites to specify platform anyway I think. With this changeset we're not losing any functionality, but it might require people to fix some incorrect callsites.

Reviewed By: cpojer

Differential Revision: D5051791

fbshipit-source-id: 2a1ec7a8bfa6791b6016213305a72bc0b81f23b9
This commit is contained in:
Jean Lauliac 2017-05-12 07:31:26 -07:00 committed by Facebook Github Bot
parent aadd914f0d
commit 633432ceca
3 changed files with 3 additions and 7 deletions

View File

@ -119,7 +119,6 @@ exports.createResolveFn = function(options: ResolveOptions): ResolveFn {
moduleCache,
moduleMap: getFakeModuleMap(hasteMap),
platform,
platforms,
preferNativePlatform: true,
sourceExts,
});

View File

@ -233,7 +233,6 @@ class DependencyGraph extends EventEmitter {
moduleCache: this._moduleCache,
moduleMap: this._moduleMap,
platform,
platforms: this._opts.platforms,
preferNativePlatform: this._opts.preferNativePlatform,
sourceExts: this._opts.sourceExts,
});

View File

@ -88,7 +88,6 @@ type Options<TModule, TPackage> = {|
+moduleCache: ModuleishCache<TModule, TPackage>,
+moduleMap: ModuleMap,
+platform: ?string,
+platforms: Set<string>,
+preferNativePlatform: boolean,
+sourceExts: Array<string>,
|};
@ -109,6 +108,8 @@ function tryResolveSync<T>(action: () => T, secondaryAction: () => T): T {
}
}
const EMPTY_SET = new Set();
class ResolutionRequest<TModule: Moduleish, TPackage: Packageish> {
_doesFileExist = filePath => this._options.hasteFS.exists(filePath);
_immediateResolutionCache: {[key: string]: TModule};
@ -613,10 +614,7 @@ class ResolutionRequest<TModule: Moduleish, TPackage: Packageish> {
fromModule: TModule,
toModule: string,
): TModule {
const {name, type} = getAssetDataFromName(
potentialModulePath,
this._options.platforms,
);
const {name, type} = getAssetDataFromName(potentialModulePath, EMPTY_SET);
let pattern = '^' + name + '(@[\\d\\.]+x)?';
if (this._options.platform != null) {