mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-03 09:35:11 +08:00
Summary: Not only is this function is building a custom Regex for every single file, but it's also duplicating some of the work of the inner function, that is already splitting up the platform/extension. This changeset refactors both function to have a more strict and legible logic to extract asset information. We extract the base name first, then we extract the resolution from it, instead of rematching platform and extension. I stumbled on this while looking into refactoring the asset resolution logic of `ResolutionRequest#_loadAsAssetFile()`. The next step would be to reuse the exact same function for resolving assets instead of using a custom regex there as well. Reviewed By: davidaurelio Differential Revision: D5060589 fbshipit-source-id: b48d9a5d8e963be76cad5384c6bfb3e214a73587
76 lines
1.7 KiB
JavaScript
76 lines
1.7 KiB
JavaScript
/**
|
|
* Copyright (c) 2015-present, Facebook, Inc.
|
|
* All rights reserved.
|
|
*
|
|
* This source code is licensed under the BSD-style license found in the
|
|
* LICENSE file in the root directory of this source tree. An additional grant
|
|
* of patent rights can be found in the PATENTS file in the same directory.
|
|
*
|
|
* @flow
|
|
* @format
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
const AssetPaths = require('./lib/AssetPaths');
|
|
const Module = require('./Module');
|
|
|
|
import type {CachedReadResult, ConstructorArgs, ReadResult} from './Module';
|
|
|
|
class AssetModule extends Module {
|
|
resolution: mixed;
|
|
_name: string;
|
|
_type: string;
|
|
_dependencies: Array<string>;
|
|
|
|
constructor(
|
|
args: ConstructorArgs & {dependencies: Array<string>},
|
|
platforms: Set<string>,
|
|
) {
|
|
super(args);
|
|
const {resolution, name, type} = AssetPaths.parse(this.path, platforms);
|
|
this.resolution = resolution;
|
|
this._name = name;
|
|
this._type = type;
|
|
this._dependencies = args.dependencies || [];
|
|
}
|
|
|
|
isHaste() {
|
|
return false;
|
|
}
|
|
|
|
readCached(): CachedReadResult {
|
|
return {
|
|
/** $FlowFixMe: improper OOP design. AssetModule, being different from a
|
|
* normal Module, shouldn't inherit it in the first place. */
|
|
result: {dependencies: this._dependencies},
|
|
outdatedDependencies: [],
|
|
};
|
|
}
|
|
|
|
/** $FlowFixMe: improper OOP design. */
|
|
readFresh(): Promise<ReadResult> {
|
|
return Promise.resolve({dependencies: this._dependencies});
|
|
}
|
|
|
|
getName() {
|
|
return super
|
|
.getName()
|
|
.then(id => id.replace(/\/[^\/]+$/, `/${this._name}.${this._type}`));
|
|
}
|
|
|
|
hash() {
|
|
return `AssetModule : ${this.path}`;
|
|
}
|
|
|
|
isJSON() {
|
|
return false;
|
|
}
|
|
|
|
isAsset() {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
module.exports = AssetModule;
|