You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1 line
9.1 KiB
1 line
9.1 KiB
{"ast":null,"code":"import _classCallCheck from \"@babel/runtime/helpers/classCallCheck\";\nimport _createClass from \"@babel/runtime/helpers/createClass\";\nimport { Platform, UnavailabilityError } from 'expo-modules-core';\nimport invariant from 'invariant';\nimport Dimensions from \"react-native-web/dist/exports/Dimensions\";\nfunction getBasePath(_ref) {\n var httpServerLocation = _ref.httpServerLocation;\n if (httpServerLocation[0] === '/') {\n return httpServerLocation.substr(1);\n }\n return httpServerLocation;\n}\nfunction getScale() {\n return Dimensions.get('window').scale;\n}\nfunction getScaledAssetPath(asset) {\n var scale = AssetSourceResolver.pickScale(asset.scales, getScale());\n var scaleSuffix = scale === 1 ? '' : '@' + scale + 'x';\n var assetDir = getBasePath(asset);\n return assetDir + '/' + asset.name + scaleSuffix + (asset.type ? \".\" + asset.type : '');\n}\nvar AssetSourceResolver = function () {\n function AssetSourceResolver(serverUrl, jsbundleUrl, asset) {\n _classCallCheck(this, AssetSourceResolver);\n this.serverUrl = serverUrl;\n this.jsbundleUrl = jsbundleUrl;\n this.asset = asset;\n }\n _createClass(AssetSourceResolver, [{\n key: \"isLoadedFromServer\",\n value: function isLoadedFromServer() {\n return !!this.serverUrl;\n }\n }, {\n key: \"isLoadedFromFileSystem\",\n value: function isLoadedFromFileSystem() {\n return !!(this.jsbundleUrl && this.jsbundleUrl.startsWith('file://'));\n }\n }, {\n key: \"defaultAsset\",\n value: function defaultAsset() {\n if (this.isLoadedFromServer()) {\n return this.assetServerURL();\n }\n return this.scaledAssetURLNearBundle();\n }\n }, {\n key: \"assetServerURL\",\n value: function assetServerURL() {\n invariant(!!this.serverUrl, 'need server to load from');\n return this.fromSource(this.serverUrl + getScaledAssetPath(this.asset) + '?platform=' + Platform.OS + '&hash=' + this.asset.hash);\n }\n }, {\n key: \"scaledAssetPath\",\n value: function scaledAssetPath() {\n return this.fromSource(getScaledAssetPath(this.asset));\n }\n }, {\n key: \"scaledAssetURLNearBundle\",\n value: function scaledAssetURLNearBundle() {\n var path = this.jsbundleUrl || '';\n return this.fromSource(path + getScaledAssetPath(this.asset));\n }\n }, {\n key: \"resourceIdentifierWithoutScale\",\n value: function resourceIdentifierWithoutScale() {\n throw new UnavailabilityError('react-native', 'resourceIdentifierWithoutScale()');\n }\n }, {\n key: \"drawableFolderInBundle\",\n value: function drawableFolderInBundle() {\n throw new UnavailabilityError('react-native', 'drawableFolderInBundle()');\n }\n }, {\n key: \"fromSource\",\n value: function fromSource(source) {\n return {\n __packager_asset: true,\n width: this.asset.width,\n height: this.asset.height,\n uri: source,\n scale: AssetSourceResolver.pickScale(this.asset.scales, getScale())\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":"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","sourcesContent":["import { Platform, UnavailabilityError } from 'expo-modules-core';\nimport invariant from 'invariant';\nimport { Dimensions } from 'react-native';\n\ntype PackagerAsset = {\n __packager_asset: boolean;\n fileSystemLocation: string;\n httpServerLocation: string;\n width?: number;\n height?: number;\n scales: number[];\n hash: string;\n name: string;\n type: string;\n};\n\nfunction getBasePath({ httpServerLocation }: PackagerAsset): string {\n if (httpServerLocation[0] === '/') {\n return httpServerLocation.substr(1);\n }\n return httpServerLocation;\n}\n\nexport type ResolvedAssetSource = {\n __packager_asset: boolean;\n width?: number;\n height?: number;\n uri: string;\n scale: number;\n};\n\nfunction getScale(): number {\n return Dimensions.get('window').scale;\n}\n\nfunction getScaledAssetPath(asset): string {\n const scale = AssetSourceResolver.pickScale(asset.scales, getScale());\n const scaleSuffix = scale === 1 ? '' : '@' + scale + 'x';\n const assetDir = getBasePath(asset);\n return assetDir + '/' + asset.name + scaleSuffix + (asset.type ? `.${asset.type}` : '');\n}\n\nexport default class AssetSourceResolver {\n serverUrl?: string | null;\n // where the jsbundle is being run from\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;\n this.jsbundleUrl = jsbundleUrl;\n this.asset = asset;\n }\n isLoadedFromServer(): boolean {\n return !!this.serverUrl;\n }\n isLoadedFromFileSystem(): boolean {\n return !!(this.jsbundleUrl && this.jsbundleUrl.startsWith('file://'));\n }\n defaultAsset(): ResolvedAssetSource {\n if (this.isLoadedFromServer()) {\n return this.assetServerURL();\n }\n\n return this.scaledAssetURLNearBundle();\n }\n assetServerURL(): ResolvedAssetSource {\n invariant(!!this.serverUrl, 'need server to load from');\n return this.fromSource(\n this.serverUrl +\n getScaledAssetPath(this.asset) +\n '?platform=' +\n Platform.OS +\n '&hash=' +\n this.asset.hash\n );\n }\n scaledAssetPath(): ResolvedAssetSource {\n return this.fromSource(getScaledAssetPath(this.asset));\n }\n scaledAssetURLNearBundle(): ResolvedAssetSource {\n const path = this.jsbundleUrl || '';\n return this.fromSource(path + getScaledAssetPath(this.asset));\n }\n resourceIdentifierWithoutScale(): ResolvedAssetSource {\n throw new UnavailabilityError('react-native', 'resourceIdentifierWithoutScale()');\n }\n drawableFolderInBundle(): ResolvedAssetSource {\n throw new UnavailabilityError('react-native', 'drawableFolderInBundle()');\n }\n fromSource(source: string): ResolvedAssetSource {\n return {\n __packager_asset: true,\n width: this.asset.width,\n height: this.asset.height,\n uri: source,\n scale: AssetSourceResolver.pickScale(this.asset.scales, getScale()),\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"} |