mirror of
https://github.com/zhigang1992/react-native.git
synced 2026-04-29 04:35:36 +08:00
Move getPlatformExtension and getAssetDataFromName into DependencyResolver
Reviewed By: martinbigio Differential Revision: D2619690 fb-gh-sync-id: 04ca68a1fa2dc7b77a49c38ea1515d7afbdee603
This commit is contained in:
committed by
facebook-github-bot-7
parent
145a72df80
commit
34f8a6e56f
@@ -2,7 +2,7 @@
|
||||
|
||||
const Module = require('./Module');
|
||||
const Promise = require('promise');
|
||||
const getAssetDataFromName = require('../lib/getAssetDataFromName');
|
||||
const getAssetDataFromName = require('./lib/getAssetDataFromName');
|
||||
|
||||
class AssetModule extends Module {
|
||||
constructor(...args) {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
const Module = require('./Module');
|
||||
const Promise = require('promise');
|
||||
const getAssetDataFromName = require('../lib/getAssetDataFromName');
|
||||
const getAssetDataFromName = require('./lib/getAssetDataFromName');
|
||||
|
||||
class AssetModule_DEPRECATED extends Module {
|
||||
constructor(...args) {
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
'use strict';
|
||||
|
||||
const path = require('path');
|
||||
const getPlatformExtension = require('../../lib/getPlatformExtension');
|
||||
const getPlatformExtension = require('../lib/getPlatformExtension');
|
||||
const Promise = require('promise');
|
||||
|
||||
const GENERIC_PLATFORM = 'generic';
|
||||
|
||||
@@ -12,7 +12,7 @@ const debug = require('debug')('ReactNativePackager:DependencyGraph');
|
||||
const util = require('util');
|
||||
const path = require('path');
|
||||
const isAbsolutePath = require('absolute-path');
|
||||
const getAssetDataFromName = require('../../lib/getAssetDataFromName');
|
||||
const getAssetDataFromName = require('../lib/getAssetDataFromName');
|
||||
const Promise = require('promise');
|
||||
|
||||
class ResolutionRequest {
|
||||
|
||||
@@ -13,7 +13,7 @@ const ModuleCache = require('../ModuleCache');
|
||||
const Promise = require('promise');
|
||||
const crawl = require('../crawlers');
|
||||
const declareOpts = require('../../lib/declareOpts');
|
||||
const getPontentialPlatformExt = require('../../lib/getPlatformExtension');
|
||||
const getPlatformExtension = require('../lib/getPlatformExtension');
|
||||
const isAbsolutePath = require('absolute-path');
|
||||
const path = require('path');
|
||||
const util = require('util');
|
||||
@@ -173,7 +173,7 @@ class DependencyGraph {
|
||||
|
||||
_getRequestPlatform(entryPath, platform) {
|
||||
if (platform == null) {
|
||||
platform = getPontentialPlatformExt(entryPath);
|
||||
platform = getPlatformExtension(entryPath);
|
||||
if (platform == null || this._opts.platforms.indexOf(platform) === -1) {
|
||||
platform = null;
|
||||
}
|
||||
|
||||
119
packager/react-packager/src/DependencyResolver/lib/__tests__/getAssetDataFromName-test.js
vendored
Normal file
119
packager/react-packager/src/DependencyResolver/lib/__tests__/getAssetDataFromName-test.js
vendored
Normal file
@@ -0,0 +1,119 @@
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
jest.dontMock('../getPlatformExtension')
|
||||
.dontMock('../getAssetDataFromName');
|
||||
|
||||
var getAssetDataFromName = require('../getAssetDataFromName');
|
||||
|
||||
describe('getAssetDataFromName', () => {
|
||||
it('should get data from name', () => {
|
||||
expect(getAssetDataFromName('a/b/c.png')).toEqual({
|
||||
resolution: 1,
|
||||
assetName: 'a/b/c.png',
|
||||
type: 'png',
|
||||
name: 'c',
|
||||
platform: null,
|
||||
});
|
||||
|
||||
expect(getAssetDataFromName('a/b/c@1x.png')).toEqual({
|
||||
resolution: 1,
|
||||
assetName: 'a/b/c.png',
|
||||
type: 'png',
|
||||
name: 'c',
|
||||
platform: null,
|
||||
});
|
||||
|
||||
expect(getAssetDataFromName('a/b/c@2.5x.png')).toEqual({
|
||||
resolution: 2.5,
|
||||
assetName: 'a/b/c.png',
|
||||
type: 'png',
|
||||
name: 'c',
|
||||
platform: null,
|
||||
});
|
||||
|
||||
expect(getAssetDataFromName('a/b/c.ios.png')).toEqual({
|
||||
resolution: 1,
|
||||
assetName: 'a/b/c.png',
|
||||
type: 'png',
|
||||
name: 'c',
|
||||
platform: 'ios',
|
||||
});
|
||||
|
||||
expect(getAssetDataFromName('a/b/c@1x.ios.png')).toEqual({
|
||||
resolution: 1,
|
||||
assetName: 'a/b/c.png',
|
||||
type: 'png',
|
||||
name: 'c',
|
||||
platform: 'ios',
|
||||
});
|
||||
|
||||
expect(getAssetDataFromName('a/b/c@2.5x.ios.png')).toEqual({
|
||||
resolution: 2.5,
|
||||
assetName: 'a/b/c.png',
|
||||
type: 'png',
|
||||
name: 'c',
|
||||
platform: 'ios',
|
||||
});
|
||||
});
|
||||
|
||||
describe('resolution extraction', () => {
|
||||
it('should extract resolution simple case', () => {
|
||||
var data = getAssetDataFromName('test@2x.png');
|
||||
expect(data).toEqual({
|
||||
assetName: 'test.png',
|
||||
resolution: 2,
|
||||
type: 'png',
|
||||
name: 'test',
|
||||
platform: null,
|
||||
});
|
||||
});
|
||||
|
||||
it('should default resolution to 1', () => {
|
||||
var data = getAssetDataFromName('test.png');
|
||||
expect(data).toEqual({
|
||||
assetName: 'test.png',
|
||||
resolution: 1,
|
||||
type: 'png',
|
||||
name: 'test',
|
||||
platform: null,
|
||||
});
|
||||
});
|
||||
|
||||
it('should support float', () => {
|
||||
var data = getAssetDataFromName('test@1.1x.png');
|
||||
expect(data).toEqual({
|
||||
assetName: 'test.png',
|
||||
resolution: 1.1,
|
||||
type: 'png',
|
||||
name: 'test',
|
||||
platform: null,
|
||||
});
|
||||
|
||||
data = getAssetDataFromName('test@.1x.png');
|
||||
expect(data).toEqual({
|
||||
assetName: 'test.png',
|
||||
resolution: 0.1,
|
||||
type: 'png',
|
||||
name: 'test',
|
||||
platform: null,
|
||||
});
|
||||
|
||||
data = getAssetDataFromName('test@0.2x.png');
|
||||
expect(data).toEqual({
|
||||
assetName: 'test.png',
|
||||
resolution: 0.2,
|
||||
type: 'png',
|
||||
name: 'test',
|
||||
platform: null,
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
25
packager/react-packager/src/DependencyResolver/lib/__tests__/getPlatformExtension-test.js
vendored
Normal file
25
packager/react-packager/src/DependencyResolver/lib/__tests__/getPlatformExtension-test.js
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
jest.dontMock('../getPlatformExtension');
|
||||
|
||||
var getPlatformExtension = require('../getPlatformExtension');
|
||||
|
||||
describe('getPlatformExtension', function() {
|
||||
it('should get platform ext', function() {
|
||||
expect(getPlatformExtension('a.ios.js')).toBe('ios');
|
||||
expect(getPlatformExtension('a.android.js')).toBe('android');
|
||||
expect(getPlatformExtension('/b/c/a.ios.js')).toBe('ios');
|
||||
expect(getPlatformExtension('/b/c.android/a.ios.js')).toBe('ios');
|
||||
expect(getPlatformExtension('/b/c/a@1.5x.ios.png')).toBe('ios');
|
||||
expect(getPlatformExtension('/b/c/a@1.5x.lol.png')).toBe(null);
|
||||
expect(getPlatformExtension('/b/c/a.lol.png')).toBe(null);
|
||||
});
|
||||
});
|
||||
55
packager/react-packager/src/DependencyResolver/lib/getAssetDataFromName.js
vendored
Normal file
55
packager/react-packager/src/DependencyResolver/lib/getAssetDataFromName.js
vendored
Normal file
@@ -0,0 +1,55 @@
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
const path = require('path');
|
||||
const getPlatformExtension = require('./getPlatformExtension');
|
||||
|
||||
function getAssetDataFromName(filename) {
|
||||
const ext = path.extname(filename);
|
||||
const platformExt = getPlatformExtension(filename);
|
||||
|
||||
let pattern = '@([\\d\\.]+)x';
|
||||
if (platformExt != null) {
|
||||
pattern += '(\\.' + platformExt + ')?';
|
||||
}
|
||||
pattern += '\\' + ext + '$';
|
||||
const re = new RegExp(pattern);
|
||||
|
||||
const match = filename.match(re);
|
||||
let resolution;
|
||||
|
||||
if (!(match && match[1])) {
|
||||
resolution = 1;
|
||||
} else {
|
||||
resolution = parseFloat(match[1], 10);
|
||||
if (isNaN(resolution)) {
|
||||
resolution = 1;
|
||||
}
|
||||
}
|
||||
|
||||
let assetName;
|
||||
if (match) {
|
||||
assetName = filename.replace(re, ext);
|
||||
} else if (platformExt != null) {
|
||||
assetName = filename.replace(new RegExp(`\\.${platformExt}\\${ext}`), ext);
|
||||
} else {
|
||||
assetName = filename;
|
||||
}
|
||||
|
||||
return {
|
||||
resolution: resolution,
|
||||
assetName: assetName,
|
||||
type: ext.slice(1),
|
||||
name: path.basename(assetName, ext),
|
||||
platform: platformExt,
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = getAssetDataFromName;
|
||||
28
packager/react-packager/src/DependencyResolver/lib/getPlatformExtension.js
vendored
Normal file
28
packager/react-packager/src/DependencyResolver/lib/getPlatformExtension.js
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
const path = require('path');
|
||||
|
||||
const SUPPORTED_PLATFORM_EXTS = ['android', 'ios', 'web'];
|
||||
|
||||
const re = new RegExp(
|
||||
'[^\\.]+\\.(' + SUPPORTED_PLATFORM_EXTS.join('|') + ')\\.\\w+$'
|
||||
);
|
||||
|
||||
// Extract platform extension: index.ios.js -> ios
|
||||
function getPlatformExtension(file) {
|
||||
const match = file.match(re);
|
||||
if (match && match[1]) {
|
||||
return match[1];
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
module.exports = getPlatformExtension;
|
||||
Reference in New Issue
Block a user