{"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 { manifestBaseUrl, getManifest, getManifest2 } 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 URL from 'url-parse';\n\nimport AssetSourceResolver from './AssetSourceResolver';\nimport { manifestBaseUrl, getManifest, getManifest2 } from './PlatformUtils';\n\n// @docsMissing\nexport type AssetMetadata = {\n hash: string;\n name: string;\n type: string;\n width?: number;\n height?: number;\n scales: number[];\n httpServerLocation: string;\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"}