This repository has been archived on 2022-03-12. You can view files and clone it, but cannot push or open issues or pull requests.
reValuate/node_modules/expo-asset/build/AssetSourceResolver.web.js
2021-04-02 02:24:13 +03:00

77 lines
2.5 KiB
JavaScript

import { Platform, UnavailabilityError } from '@unimodules/core';
import invariant from 'invariant';
import { Dimensions } from 'react-native';
function getBasePath({ httpServerLocation }) {
if (httpServerLocation[0] === '/') {
return httpServerLocation.substr(1);
}
return httpServerLocation;
}
function getScale() {
return Dimensions.get('window').scale;
}
function getScaledAssetPath(asset) {
const scale = AssetSourceResolver.pickScale(asset.scales, getScale());
const scaleSuffix = scale === 1 ? '' : '@' + scale + 'x';
const assetDir = getBasePath(asset);
return assetDir + '/' + asset.name + scaleSuffix + '.' + asset.type;
}
export default class AssetSourceResolver {
constructor(serverUrl, jsbundleUrl, asset) {
this.serverUrl = serverUrl;
this.jsbundleUrl = jsbundleUrl;
this.asset = asset;
}
isLoadedFromServer() {
return !!this.serverUrl;
}
isLoadedFromFileSystem() {
return !!(this.jsbundleUrl && this.jsbundleUrl.startsWith('file://'));
}
defaultAsset() {
if (this.isLoadedFromServer()) {
return this.assetServerURL();
}
return this.scaledAssetURLNearBundle();
}
assetServerURL() {
invariant(!!this.serverUrl, 'need server to load from');
return this.fromSource(this.serverUrl +
getScaledAssetPath(this.asset) +
'?platform=' +
Platform.OS +
'&hash=' +
this.asset.hash);
}
scaledAssetPath() {
return this.fromSource(getScaledAssetPath(this.asset));
}
scaledAssetURLNearBundle() {
const path = this.jsbundleUrl || 'file://';
return this.fromSource(path + getScaledAssetPath(this.asset));
}
resourceIdentifierWithoutScale() {
throw new UnavailabilityError('react-native', 'resourceIdentifierWithoutScale()');
}
drawableFolderInBundle() {
throw new UnavailabilityError('react-native', 'drawableFolderInBundle()');
}
fromSource(source) {
return {
__packager_asset: true,
width: this.asset.width,
height: this.asset.height,
uri: source,
scale: AssetSourceResolver.pickScale(this.asset.scales, getScale()),
};
}
static pickScale(scales, deviceScale) {
for (let i = 0; i < scales.length; i++) {
if (scales[i] >= deviceScale) {
return scales[i];
}
}
return scales[scales.length - 1] || 1;
}
}
//# sourceMappingURL=AssetSourceResolver.web.js.map