{"ast":null,"code":"import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport { Platform } from 'expo-modules-core';\nimport PixelRatio from \"react-native-web/dist/exports/PixelRatio\";\nfunction getScaledAssetPath(asset) {\n  var scale = AssetSourceResolver.pickScale(asset.scales, PixelRatio.get());\n  var scaleSuffix = scale === 1 ? '' : '@' + scale + 'x';\n  var type = !asset.type ? '' : `.${asset.type}`;\n  if (__DEV__) {\n    return asset.httpServerLocation + '/' + asset.name + scaleSuffix + type;\n  } else {\n    return asset.httpServerLocation.replace(/\\.\\.\\//g, '_') + '/' + asset.name + scaleSuffix + type;\n  }\n}\nvar AssetSourceResolver = function () {\n  function AssetSourceResolver(serverUrl, jsbundleUrl, asset) {\n    _classCallCheck(this, AssetSourceResolver);\n    this.serverUrl = serverUrl || 'https://expo.dev';\n    this.jsbundleUrl = null;\n    this.asset = asset;\n  }\n  _createClass(AssetSourceResolver, [{\n    key: \"isLoadedFromServer\",\n    value: function isLoadedFromServer() {\n      return true;\n    }\n  }, {\n    key: \"isLoadedFromFileSystem\",\n    value: function isLoadedFromFileSystem() {\n      return false;\n    }\n  }, {\n    key: \"defaultAsset\",\n    value: function defaultAsset() {\n      return this.assetServerURL();\n    }\n  }, {\n    key: \"assetServerURL\",\n    value: function assetServerURL() {\n      var fromUrl = new URL(getScaledAssetPath(this.asset), this.serverUrl);\n      fromUrl.searchParams.set('platform', Platform.OS);\n      fromUrl.searchParams.set('hash', this.asset.hash);\n      return this.fromSource(fromUrl.toString().replace(fromUrl.origin, ''));\n    }\n  }, {\n    key: \"fromSource\",\n    value: function fromSource(source) {\n      var _this$asset$width, _this$asset$height;\n      return {\n        __packager_asset: true,\n        width: (_this$asset$width = this.asset.width) != null ? _this$asset$width : undefined,\n        height: (_this$asset$height = this.asset.height) != null ? _this$asset$height : undefined,\n        uri: source,\n        scale: AssetSourceResolver.pickScale(this.asset.scales, PixelRatio.get())\n      };\n    }\n  }], [{\n    key: \"pickScale\",\n    value: function pickScale(scales, deviceScale) {\n      for (var i = 0; i < scales.length; i++) {\n        if (scales[i] >= deviceScale) {\n          return scales[i];\n        }\n      }\n      return scales[scales.length - 1] || 1;\n    }\n  }]);\n  return AssetSourceResolver;\n}();\nexport { AssetSourceResolver as default };","map":{"version":3,"sources":["../src/AssetSourceResolver.web.ts"],"names":[],"mappings":";;AAAA,SAAS,QAAQ,QAAQ,mBAAmB;AAAC,OAAA,UAAA;AAa7C,SAAS,kBAAkB,CAAC,KAAK,EAAA;EAC/B,IAAM,KAAK,GAAG,mBAAmB,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAA,CAAE,CAAC;EAC3E,IAAM,WAAW,GAAG,KAAK,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG;EACxD,IAAM,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE;EAChD,IAAI,OAAO,EAAE;IACX,OAAO,KAAK,CAAC,kBAAkB,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,WAAW,GAAG,IAAI;GACxE,MAAM;IACL,OAAO,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,GAAG,WAAW,GAAG,IAAI;EAChG;AACH;AAAC,IAEoB,mBAAmB;EAQtC,SAAA,oBACE,SAAoC,EACpC,WAAsC,EACtC,KAAoB,EAAA;IAAA,eAAA,OAAA,mBAAA;IAEpB,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,kBAAkB;IAChD,IAAI,CAAC,WAAW,GAAG,IAAI;IACvB,IAAI,CAAC,KAAK,GAAG,KAAK;EACpB;EAAC,YAAA,CAAA,mBAAA;IAAA,GAAA;IAAA,KAAA,EAGD,SAAA,mBAAA,EAAkB;MAChB,OAAO,IAAI;IACb;EAAC;IAAA,GAAA;IAAA,KAAA,EAGD,SAAA,uBAAA,EAAsB;MACpB,OAAO,KAAK;IACd;EAAC;IAAA,GAAA;IAAA,KAAA,EAED,SAAA,aAAA,EAAY;MACV,OAAO,IAAI,CAAC,cAAc,CAAA,CAAE;IAC9B;EAAC;IAAA,GAAA;IAAA,KAAA,EAKD,SAAA,eAAA,EAAc;MACZ,IAAM,OAAO,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;MACvE,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;MACjD,OAAO,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;MACjD,OAAO,IAAI,CAAC,UAAU,CAEpB,OAAO,CAAC,QAAQ,CAAA,CAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAC/C;IACH;EAAC;IAAA,GAAA;IAAA,KAAA,EAED,SAAA,WAAW,MAAc,EAAA;MAAA,IAAA,iBAAA,EAAA,kBAAA;MACvB,OAAO;QACL,gBAAgB,EAAE,IAAI;QACtB,KAAK,GAAA,iBAAA,GAAE,IAAI,CAAC,KAAK,CAAC,KAAK,YAAA,iBAAA,GAAI,SAAS;QACpC,MAAM,GAAA,kBAAA,GAAE,IAAI,CAAC,KAAK,CAAC,MAAM,YAAA,kBAAA,GAAI,SAAS;QACtC,GAAG,EAAE,MAAM;QACX,KAAK,EAAE,mBAAmB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,CAAA,CAAE;OACzE;IACH;EAAC;IAAA,GAAA;IAAA,KAAA,EAED,SAAA,UAAiB,MAAgB,EAAE,WAAmB,EAAA;MACpD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACtC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,WAAW,EAAE;UAC5B,OAAO,MAAM,CAAC,CAAC,CAAC;QACjB;MACF;MACD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC;IACvC;EAAC;EAAA,OAAA,mBAAA;AAAA;AAAA,SA9DkB,mBAAmB,IAAA,OAAA","sourcesContent":["import { Platform } from 'expo-modules-core';\nimport { PixelRatio } from 'react-native';\nimport { PackagerAsset } from 'react-native/Libraries/Image/AssetRegistry';\n\nexport type ResolvedAssetSource = {\n  __packager_asset: boolean;\n  width?: number;\n  height?: number;\n  uri: string;\n  scale: number;\n};\n\n// Returns the Metro dev server-specific asset location.\nfunction getScaledAssetPath(asset): string {\n  const scale = AssetSourceResolver.pickScale(asset.scales, PixelRatio.get());\n  const scaleSuffix = scale === 1 ? '' : '@' + scale + 'x';\n  const type = !asset.type ? '' : `.${asset.type}`;\n  if (__DEV__) {\n    return asset.httpServerLocation + '/' + asset.name + scaleSuffix + type;\n  } else {\n    return asset.httpServerLocation.replace(/\\.\\.\\//g, '_') + '/' + asset.name + scaleSuffix + type;\n  }\n}\n\nexport default class AssetSourceResolver {\n  serverUrl: string;\n  // where the jsbundle is being run from\n  // NOTE(EvanBacon): Never defined on web.\n  jsbundleUrl?: string | null;\n  // the asset to resolve\n  asset: PackagerAsset;\n\n  constructor(\n    serverUrl: string | undefined | null,\n    jsbundleUrl: string | undefined | null,\n    asset: PackagerAsset\n  ) {\n    this.serverUrl = serverUrl || 'https://expo.dev';\n    this.jsbundleUrl = null;\n    this.asset = asset;\n  }\n\n  // Always true for web runtimes\n  isLoadedFromServer(): boolean {\n    return true;\n  }\n\n  // Always false for web runtimes\n  isLoadedFromFileSystem(): boolean {\n    return false;\n  }\n\n  defaultAsset(): ResolvedAssetSource {\n    return this.assetServerURL();\n  }\n\n  /**\n   * @returns absolute remote URL for the hosted asset.\n   */\n  assetServerURL(): ResolvedAssetSource {\n    const fromUrl = new URL(getScaledAssetPath(this.asset), this.serverUrl);\n    fromUrl.searchParams.set('platform', Platform.OS);\n    fromUrl.searchParams.set('hash', this.asset.hash);\n    return this.fromSource(\n      // Relative on web\n      fromUrl.toString().replace(fromUrl.origin, '')\n    );\n  }\n\n  fromSource(source: string): ResolvedAssetSource {\n    return {\n      __packager_asset: true,\n      width: this.asset.width ?? undefined,\n      height: this.asset.height ?? undefined,\n      uri: source,\n      scale: AssetSourceResolver.pickScale(this.asset.scales, PixelRatio.get()),\n    };\n  }\n\n  static pickScale(scales: number[], deviceScale: number): number {\n    for (let i = 0; i < scales.length; i++) {\n      if (scales[i] >= deviceScale) {\n        return scales[i];\n      }\n    }\n    return scales[scales.length - 1] || 1;\n  }\n}\n"],"sourceRoot":""},"metadata":{},"sourceType":"module"}