171919cfcaee51f7a94b702848ae4cc4.json 15.5 KB
{"ast":null,"code":"var _interopRequireWildcard=require(\"@babel/runtime/helpers/interopRequireWildcard\");var _interopRequireDefault=require(\"@babel/runtime/helpers/interopRequireDefault\");Object.defineProperty(exports,\"__esModule\",{value:true});exports.Asset=void 0;var _regenerator=_interopRequireDefault(require(\"@babel/runtime/regenerator\"));var _classCallCheck2=_interopRequireDefault(require(\"@babel/runtime/helpers/classCallCheck\"));var _createClass2=_interopRequireDefault(require(\"@babel/runtime/helpers/createClass\"));var _core=require(\"@unimodules/core\");var _AssetRegistry=require(\"./AssetRegistry\");var AssetSources=_interopRequireWildcard(require(\"./AssetSources\"));var AssetUris=_interopRequireWildcard(require(\"./AssetUris\"));var _EmbeddedAssets=require(\"./EmbeddedAssets\");var ImageAssets=_interopRequireWildcard(require(\"./ImageAssets\"));var _PlatformUtils=require(\"./PlatformUtils\");var _resolveAssetSource2=_interopRequireDefault(require(\"./resolveAssetSource\"));var Asset=function(){function Asset(_ref){var name=_ref.name,type=_ref.type,_ref$hash=_ref.hash,hash=_ref$hash===void 0?null:_ref$hash,uri=_ref.uri,width=_ref.width,height=_ref.height;(0,_classCallCheck2.default)(this,Asset);this.hash=null;this.localUri=null;this.width=null;this.height=null;this.downloading=false;this.downloaded=false;this._downloadCallbacks=[];this.name=name;this.type=type;this.hash=hash;this.uri=uri;if(typeof width==='number'){this.width=width;}if(typeof height==='number'){this.height=height;}if(_PlatformUtils.IS_MANAGED_ENV&&hash){this.localUri=(0,_EmbeddedAssets.getEmbeddedAssetUri)(hash,type);if(this.localUri){this.downloaded=true;}}if(_core.Platform.OS==='web'){if(!name){this.name=AssetUris.getFilename(uri);}if(!type){this.type=AssetUris.getFileExtension(uri);}}}(0,_createClass2.default)(Asset,[{key:\"downloadAsync\",value:function downloadAsync(){var _this=this;var _ref2,width,height,name;return _regenerator.default.async(function downloadAsync$(_context){while(1){switch(_context.prev=_context.next){case 0:if(!this.downloaded){_context.next=2;break;}return _context.abrupt(\"return\");case 2:if(!this.downloading){_context.next=6;break;}_context.next=5;return _regenerator.default.awrap(new Promise(function(resolve,reject){_this._downloadCallbacks.push({resolve:resolve,reject:reject});}));case 5:return _context.abrupt(\"return\");case 6:this.downloading=true;_context.prev=7;if(!(_core.Platform.OS==='web')){_context.next=22;break;}if(!ImageAssets.isImageType(this.type)){_context.next=21;break;}_context.next=12;return _regenerator.default.awrap(ImageAssets.getImageInfoAsync(this.uri));case 12:_ref2=_context.sent;width=_ref2.width;height=_ref2.height;name=_ref2.name;this.width=width;this.height=height;this.name=name;_context.next=22;break;case 21:this.name=AssetUris.getFilename(this.uri);case 22:_context.next=24;return _regenerator.default.awrap((0,_PlatformUtils.downloadAsync)(this.uri,this.hash,this.type,this.name));case 24:this.localUri=_context.sent;this.downloaded=true;this._downloadCallbacks.forEach(function(_ref3){var resolve=_ref3.resolve;return resolve();});_context.next=33;break;case 29:_context.prev=29;_context.t0=_context[\"catch\"](7);this._downloadCallbacks.forEach(function(_ref4){var reject=_ref4.reject;return reject(_context.t0);});throw _context.t0;case 33:_context.prev=33;this.downloading=false;this._downloadCallbacks=[];return _context.finish(33);case 37:case\"end\":return _context.stop();}}},null,this,[[7,29,33,37]]);}}],[{key:\"loadAsync\",value:function loadAsync(moduleId){var moduleIds=Array.isArray(moduleId)?moduleId:[moduleId];return Promise.all(moduleIds.map(function(moduleId){return Asset.fromModule(moduleId).downloadAsync();}));}},{key:\"fromModule\",value:function fromModule(virtualAssetModule){if(typeof virtualAssetModule==='string'){return Asset.fromURI(virtualAssetModule);}var meta=(0,_AssetRegistry.getAssetByID)(virtualAssetModule);if(!meta){throw new Error(\"Module \\\"\"+virtualAssetModule+\"\\\" is missing from the asset registry\");}if(!_PlatformUtils.IS_MANAGED_ENV){var _resolveAssetSource=(0,_resolveAssetSource2.default)(virtualAssetModule),uri=_resolveAssetSource.uri;var asset=new Asset({name:meta.name,type:meta.type,hash:meta.hash,uri:uri,width:meta.width,height:meta.height});if(_core.Platform.OS==='android'&&!uri.includes(':')&&(meta.width||meta.height)){asset.localUri=asset.uri;asset.downloaded=true;}Asset.byHash[meta.hash]=asset;return asset;}return Asset.fromMetadata(meta);}},{key:\"fromMetadata\",value:function fromMetadata(meta){var metaHash=meta.hash;if(Asset.byHash[metaHash]){return Asset.byHash[metaHash];}else if(!_PlatformUtils.IS_MANAGED_ENV&&!Asset.byHash[metaHash]){throw new Error('Assets must be initialized with Asset.fromModule');}var _AssetSources$selectA=AssetSources.selectAssetSource(meta),uri=_AssetSources$selectA.uri,hash=_AssetSources$selectA.hash;var asset=new Asset({name:meta.name,type:meta.type,hash:hash,uri:uri,width:meta.width,height:meta.height});Asset.byHash[metaHash]=asset;return asset;}},{key:\"fromURI\",value:function fromURI(uri){if(Asset.byUri[uri]){return Asset.byUri[uri];}var type='';if(uri.indexOf(';base64')>-1){type=uri.split(';')[0].split('/')[1];}else{var extension=AssetUris.getFileExtension(uri);type=extension.startsWith('.')?extension.substring(1):extension;}var asset=new Asset({name:'',type:type,hash:null,uri:uri});Asset.byUri[uri]=asset;return asset;}}]);return Asset;}();exports.Asset=Asset;Asset.byHash={};Asset.byUri={};","map":{"version":3,"sources":["../src/Asset.ts"],"names":[],"mappings":"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","sourcesContent":["import { Platform } from '@unimodules/core';\n\nimport { getAssetByID } from './AssetRegistry';\nimport * as AssetSources from './AssetSources';\nimport * as AssetUris from './AssetUris';\nimport { getEmbeddedAssetUri } from './EmbeddedAssets';\nimport * as ImageAssets from './ImageAssets';\nimport { downloadAsync, IS_MANAGED_ENV } from './PlatformUtils';\nimport resolveAssetSource from './resolveAssetSource';\n\ntype AssetDescriptor = {\n  name: string;\n  type: string;\n  hash?: string | null;\n  uri: string;\n  width?: number | null;\n  height?: number | null;\n};\n\ntype DownloadPromiseCallbacks = {\n  resolve: () => void;\n  reject: (error: Error) => void;\n};\n\nexport type AssetMetadata = AssetSources.AssetMetadata;\n\nexport class Asset {\n  static byHash = {};\n  static byUri = {};\n\n  name: string;\n  type: string;\n  hash: string | null = null;\n  uri: string;\n  localUri: string | null = null;\n  width: number | null = null;\n  height: number | null = null;\n  downloading: boolean = false;\n  downloaded: boolean = false;\n  _downloadCallbacks: DownloadPromiseCallbacks[] = [];\n\n  constructor({ name, type, hash = null, uri, width, height }: AssetDescriptor) {\n    this.name = name;\n    this.type = type;\n    this.hash = hash;\n    this.uri = uri;\n\n    if (typeof width === 'number') {\n      this.width = width;\n    }\n    if (typeof height === 'number') {\n      this.height = height;\n    }\n\n    // This only applies to assets that are bundled in Expo standalone apps\n    if (IS_MANAGED_ENV && hash) {\n      this.localUri = getEmbeddedAssetUri(hash, type);\n      if (this.localUri) {\n        this.downloaded = true;\n      }\n    }\n    if (Platform.OS === 'web') {\n      if (!name) {\n        this.name = AssetUris.getFilename(uri);\n      }\n      if (!type) {\n        this.type = AssetUris.getFileExtension(uri);\n      }\n    }\n  }\n\n  static loadAsync(moduleId: number | number[]): Promise<void[]> {\n    const moduleIds = Array.isArray(moduleId) ? moduleId : [moduleId];\n    return Promise.all(moduleIds.map(moduleId => Asset.fromModule(moduleId).downloadAsync()));\n  }\n\n  static fromModule(virtualAssetModule: number | string): Asset {\n    if (typeof virtualAssetModule === 'string') {\n      return Asset.fromURI(virtualAssetModule);\n    }\n\n    const meta = getAssetByID(virtualAssetModule);\n    if (!meta) {\n      throw new Error(`Module \"${virtualAssetModule}\" is missing from the asset registry`);\n    }\n\n    // Outside of the managed env we need the moduleId to initialize the asset\n    // because resolveAssetSource depends on it\n    if (!IS_MANAGED_ENV) {\n      const { uri } = resolveAssetSource(virtualAssetModule);\n      const asset = new Asset({\n        name: meta.name,\n        type: meta.type,\n        hash: meta.hash,\n        uri,\n        width: meta.width,\n        height: meta.height,\n      });\n\n      // TODO: FileSystem should probably support 'downloading' from drawable\n      // resources But for now it doesn't (it only supports raw resources) and\n      // React Native's Image works fine with drawable resource names for\n      // images.\n      if (Platform.OS === 'android' && !uri.includes(':') && (meta.width || meta.height)) {\n        asset.localUri = asset.uri;\n        asset.downloaded = true;\n      }\n\n      Asset.byHash[meta.hash] = asset;\n      return asset;\n    }\n\n    return Asset.fromMetadata(meta);\n  }\n\n  static fromMetadata(meta: AssetMetadata): Asset {\n    // The hash of the whole asset, not to be confused with the hash of a specific file returned\n    // from `selectAssetSource`\n    const metaHash = meta.hash;\n    if (Asset.byHash[metaHash]) {\n      return Asset.byHash[metaHash];\n    } else if (!IS_MANAGED_ENV && !Asset.byHash[metaHash]) {\n      throw new Error('Assets must be initialized with Asset.fromModule');\n    }\n\n    const { uri, hash } = AssetSources.selectAssetSource(meta);\n    const asset = new Asset({\n      name: meta.name,\n      type: meta.type,\n      hash,\n      uri,\n      width: meta.width,\n      height: meta.height,\n    });\n    Asset.byHash[metaHash] = asset;\n    return asset;\n  }\n\n  static fromURI(uri: string): Asset {\n    if (Asset.byUri[uri]) {\n      return Asset.byUri[uri];\n    }\n\n    // Possibly a Base64-encoded URI\n    let type = '';\n    if (uri.indexOf(';base64') > -1) {\n      type = uri.split(';')[0].split('/')[1];\n    } else {\n      const extension = AssetUris.getFileExtension(uri);\n      type = extension.startsWith('.') ? extension.substring(1) : extension;\n    }\n\n    const asset = new Asset({\n      name: '',\n      type,\n      hash: null,\n      uri,\n    });\n\n    Asset.byUri[uri] = asset;\n\n    return asset;\n  }\n\n  async downloadAsync(): Promise<void> {\n    if (this.downloaded) {\n      return;\n    }\n    if (this.downloading) {\n      await new Promise((resolve, reject) => {\n        this._downloadCallbacks.push({ resolve, reject });\n      });\n      return;\n    }\n    this.downloading = true;\n\n    try {\n      if (Platform.OS === 'web') {\n        if (ImageAssets.isImageType(this.type)) {\n          const { width, height, name } = await ImageAssets.getImageInfoAsync(this.uri);\n          this.width = width;\n          this.height = height;\n          this.name = name;\n        } else {\n          this.name = AssetUris.getFilename(this.uri);\n        }\n      }\n      this.localUri = await downloadAsync(this.uri, this.hash, this.type, this.name);\n\n      this.downloaded = true;\n      this._downloadCallbacks.forEach(({ resolve }) => resolve());\n    } catch (e) {\n      this._downloadCallbacks.forEach(({ reject }) => reject(e));\n      throw e;\n    } finally {\n      this.downloading = false;\n      this._downloadCallbacks = [];\n    }\n  }\n}\n"],"sourceRoot":""},"metadata":{},"sourceType":"script"}