import computeMd5 from 'blueimp-md5';
import Constants from 'expo-constants';
import * as FileSystem from 'expo-file-system';
import { getManifestBaseUrl } from './AssetUris';
export const IS_MANAGED_ENV = !!Constants.appOwnership;
export function getManifest() {
return Constants.manifest || {};
}
// Compute manifest base URL if available
export const manifestBaseUrl = Constants.experienceUrl
? getManifestBaseUrl(Constants.experienceUrl)
: null;
export async function downloadAsync(uri, hash, type, name) {
if (IS_MANAGED_ENV) {
return _downloadAsyncManagedEnv(uri, hash, type, name);
}
return _downloadAsyncUnmanagedEnv(uri, hash, type);
}
async function _downloadAsyncManagedEnv(uri, hash, type, name) {
const cacheFileId = hash || computeMd5(uri);
const localUri = `${FileSystem.cacheDirectory}ExponentAsset-${cacheFileId}.${type}`;
let { exists, md5 } = await FileSystem.getInfoAsync(localUri, {
md5: true,
});
if (!exists || (hash !== null && md5 !== hash)) {
({ md5 } = await FileSystem.downloadAsync(uri, localUri, {
md5: true,
}));
if (hash !== null && md5 !== hash) {
throw new Error(`Downloaded file for asset '${name}.${type}' ` +
`Located at ${uri} ` +
`failed MD5 integrity check`);
}
}
return localUri;
}
async function _downloadAsyncUnmanagedEnv(uri, hash, type) {
// Bail out if it's already at a file URL because it's already available locally
if (uri.startsWith('file://')) {
return uri;
}
const cacheFileId = hash || computeMd5(uri);
const localUri = `${FileSystem.cacheDirectory}ExponentAsset-${cacheFileId}.${type}`;
// We don't check the FileSystem for an existing version of the asset and we
// also don't perform an integrity check!
await FileSystem.downloadAsync(uri, localUri);
return localUri;
}
//# sourceMappingURL=PlatformUtils.js.map