{"ast":null,"code":"import _defineProperty from \"@babel/runtime/helpers/defineProperty\";\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }\nimport { Platform } from 'expo-modules-core';\nimport path from 'path-browserify';\nimport PixelRatio from \"react-native-web/dist/exports/PixelRatio\";\nimport URL from 'url-parse';\nimport AssetSourceResolver from \"./AssetSourceResolver\";\nimport { getManifest, getManifest2, manifestBaseUrl } from \"./PlatformUtils\";\nvar assetMapOverride = getManifest().assetMapOverride;\nexport function selectAssetSource(meta) {\n  var _manifest2$extra, _manifest2$extra$expo;\n  if (assetMapOverride && assetMapOverride.hasOwnProperty(meta.hash)) {\n    meta = _objectSpread(_objectSpread({}, meta), assetMapOverride[meta.hash]);\n  }\n  var scale = AssetSourceResolver.pickScale(meta.scales, PixelRatio.get());\n  var index = meta.scales.findIndex(function (s) {\n    return s === scale;\n  });\n  var hash = meta.fileHashes ? meta.fileHashes[index] || meta.fileHashes[0] : meta.hash;\n  var uri = meta.fileUris ? meta.fileUris[index] || meta.fileUris[0] : meta.uri;\n  if (uri) {\n    return {\n      uri: resolveUri(uri),\n      hash: hash\n    };\n  }\n  var assetUrlOverride = getManifest().assetUrlOverride;\n  if (assetUrlOverride) {\n    var _uri = path.join(assetUrlOverride, hash);\n    return {\n      uri: resolveUri(_uri),\n      hash: hash\n    };\n  }\n  var fileScale = scale === 1 ? '' : \"@\" + scale + \"x\";\n  var fileExtension = meta.type ? \".\" + encodeURIComponent(meta.type) : '';\n  var suffix = \"/\" + encodeURIComponent(meta.name) + fileScale + fileExtension + \"?platform=\" + encodeURIComponent(Platform.OS) + \"&hash=\" + encodeURIComponent(meta.hash);\n  if (/^https?:\\/\\//.test(meta.httpServerLocation)) {\n    var _uri2 = meta.httpServerLocation + suffix;\n    return {\n      uri: _uri2,\n      hash: hash\n    };\n  }\n  var manifest2 = getManifest2();\n  if (manifest2 != null && (_manifest2$extra = manifest2.extra) != null && (_manifest2$extra$expo = _manifest2$extra.expoGo) != null && _manifest2$extra$expo.developer) {\n    var baseUrl = new URL(\"http://\" + manifest2.extra.expoGo.debuggerHost);\n    baseUrl.set('pathname', meta.httpServerLocation + suffix);\n    return {\n      uri: baseUrl.href,\n      hash: hash\n    };\n  }\n  if (getManifest().developer) {\n    var _baseUrl = new URL(getManifest().bundleUrl);\n    _baseUrl.set('pathname', meta.httpServerLocation + suffix);\n    return {\n      uri: _baseUrl.href,\n      hash: hash\n    };\n  }\n  return {\n    uri: \"https://classic-assets.eascdn.net/~assets/\" + encodeURIComponent(hash),\n    hash: hash\n  };\n}\nexport function resolveUri(uri) {\n  if (!manifestBaseUrl) {\n    return uri;\n  }\n  var _URL = new URL(uri),\n    protocol = _URL.protocol;\n  if (protocol !== '') {\n    return uri;\n  }\n  var baseUrl = new URL(manifestBaseUrl);\n  var resolvedPath = uri.startsWith('/') ? uri : path.join(baseUrl.pathname, uri);\n  baseUrl.set('pathname', resolvedPath);\n  return baseUrl.href;\n}","map":{"version":3,"sources":["../src/AssetSources.ts"],"names":[],"mappings":"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","sourcesContent":["import { Platform } from 'expo-modules-core';\nimport path from 'path-browserify';\nimport { PixelRatio } from 'react-native';\nimport { PackagerAsset } from 'react-native/Libraries/Image/AssetRegistry';\nimport URL from 'url-parse';\n\nimport AssetSourceResolver from './AssetSourceResolver';\nimport { getManifest, getManifest2, manifestBaseUrl } from './PlatformUtils';\n\n// @docsMissing\nexport type AssetMetadata = Pick<\n  PackagerAsset,\n  'httpServerLocation' | 'name' | 'hash' | 'type' | 'scales' | 'width' | 'height'\n> & {\n  uri?: string;\n  fileHashes?: string[];\n  fileUris?: string[];\n};\n\nexport type AssetSource = {\n  uri: string;\n  hash: string;\n};\n\n// Fast lookup check if asset map has any overrides in the manifest\nconst assetMapOverride = getManifest().assetMapOverride;\n\n/**\n * Selects the best file for the given asset (ex: choosing the best scale for images) and returns\n * a { uri, hash } pair for the specific asset file.\n *\n * If the asset isn't an image with multiple scales, the first file is selected.\n */\nexport function selectAssetSource(meta: AssetMetadata): AssetSource {\n  // Override with the asset map in manifest if available\n  if (assetMapOverride && assetMapOverride.hasOwnProperty(meta.hash)) {\n    meta = { ...meta, ...assetMapOverride[meta.hash] };\n  }\n\n  // This logic is based on that of AssetSourceResolver, with additional support for file hashes and\n  // explicitly provided URIs\n  const scale = AssetSourceResolver.pickScale(meta.scales, PixelRatio.get());\n  const index = meta.scales.findIndex((s) => s === scale);\n  const hash = meta.fileHashes ? meta.fileHashes[index] || meta.fileHashes[0] : meta.hash;\n\n  // Allow asset processors to directly provide the URL to load\n  const uri = meta.fileUris ? meta.fileUris[index] || meta.fileUris[0] : meta.uri;\n  if (uri) {\n    return { uri: resolveUri(uri), hash };\n  }\n\n  // Check if the assetUrl was overridden in the manifest\n  const assetUrlOverride = getManifest().assetUrlOverride;\n  if (assetUrlOverride) {\n    const uri = path.join(assetUrlOverride, hash);\n    return { uri: resolveUri(uri), hash };\n  }\n\n  const fileScale = scale === 1 ? '' : `@${scale}x`;\n  const fileExtension = meta.type ? `.${encodeURIComponent(meta.type)}` : '';\n  const suffix = `/${encodeURIComponent(\n    meta.name\n  )}${fileScale}${fileExtension}?platform=${encodeURIComponent(\n    Platform.OS\n  )}&hash=${encodeURIComponent(meta.hash)}`;\n\n  // For assets with a specified absolute URL, we use the existing origin instead of prepending the\n  // development server or production CDN URL origin\n  if (/^https?:\\/\\//.test(meta.httpServerLocation)) {\n    const uri = meta.httpServerLocation + suffix;\n    return { uri, hash };\n  }\n\n  // For assets during development using manifest2, we use the development server's URL origin\n  const manifest2 = getManifest2();\n\n  if (manifest2?.extra?.expoGo?.developer) {\n    const baseUrl = new URL(`http://${manifest2.extra.expoGo.debuggerHost}`);\n    baseUrl.set('pathname', meta.httpServerLocation + suffix);\n\n    return {\n      uri: baseUrl.href,\n      hash,\n    };\n  }\n\n  // For assets during development, we use the development server's URL origin\n  if (getManifest().developer) {\n    const baseUrl = new URL(getManifest().bundleUrl);\n    baseUrl.set('pathname', meta.httpServerLocation + suffix);\n    return { uri: baseUrl.href, hash };\n  }\n\n  // Production CDN URIs are based on each asset file hash\n  return {\n    uri: `https://classic-assets.eascdn.net/~assets/${encodeURIComponent(hash)}`,\n    hash,\n  };\n}\n\n/**\n * Resolves the given URI to an absolute URI. If the given URI is already an absolute URI, it is\n * simply returned. Otherwise, if it is a relative URI, it is resolved relative to the manifest's\n * base URI.\n */\nexport function resolveUri(uri: string): string {\n  if (!manifestBaseUrl) {\n    return uri;\n  }\n\n  const { protocol } = new URL(uri);\n  if (protocol !== '') {\n    return uri;\n  }\n\n  const baseUrl = new URL(manifestBaseUrl);\n  const resolvedPath = uri.startsWith('/') ? uri : path.join(baseUrl.pathname, uri);\n  baseUrl.set('pathname', resolvedPath);\n  return baseUrl.href;\n}\n"],"sourceRoot":""},"metadata":{},"sourceType":"module"}