1*2307aaceSEvan Baconimport { UnavailabilityError } from 'expo-errors'; 2*2307aaceSEvan Baconimport { EventEmitter } from 'expo-core'; 3*2307aaceSEvan Baconimport UUID from 'uuid-js'; 4*2307aaceSEvan Baconimport FS from './ExponentFileSystem'; 5*2307aaceSEvan Baconimport { EncodingType, } from './FileSystem.types'; 6*2307aaceSEvan Baconif (!FS) { 7*2307aaceSEvan Bacon console.warn("No native ExponentFileSystem module found, are you sure the expo-file-system's module is linked properly?"); 8*2307aaceSEvan Bacon} 9*2307aaceSEvan Baconexport { EncodingType, }; 10*2307aaceSEvan Baconfunction normalizeEndingSlash(p) { 11*2307aaceSEvan Bacon if (p != null) { 12*2307aaceSEvan Bacon return p.replace(/\/*$/, '') + '/'; 13*2307aaceSEvan Bacon } 14*2307aaceSEvan Bacon return null; 15*2307aaceSEvan Bacon} 16*2307aaceSEvan BaconFS.documentDirectory = normalizeEndingSlash(FS.documentDirectory); 17*2307aaceSEvan BaconFS.cacheDirectory = normalizeEndingSlash(FS.cacheDirectory); 18*2307aaceSEvan Baconexport const { documentDirectory, cacheDirectory, bundledAssets, bundleDirectory } = FS; 19*2307aaceSEvan Baconexport async function getInfoAsync(fileUri, options = {}) { 20*2307aaceSEvan Bacon if (!FS.getInfoAsync) { 21*2307aaceSEvan Bacon throw new UnavailabilityError('expo-file-system', 'getInfoAsync'); 22*2307aaceSEvan Bacon } 23*2307aaceSEvan Bacon return await FS.getInfoAsync(fileUri, options); 24*2307aaceSEvan Bacon} 25*2307aaceSEvan Baconexport async function readAsStringAsync(fileUri, options) { 26*2307aaceSEvan Bacon if (!FS.readAsStringAsync) { 27*2307aaceSEvan Bacon throw new UnavailabilityError('expo-file-system', 'readAsStringAsync'); 28*2307aaceSEvan Bacon } 29*2307aaceSEvan Bacon return await FS.readAsStringAsync(fileUri, options || {}); 30*2307aaceSEvan Bacon} 31*2307aaceSEvan Baconexport async function writeAsStringAsync(fileUri, contents, options = {}) { 32*2307aaceSEvan Bacon if (!FS.writeAsStringAsync) { 33*2307aaceSEvan Bacon throw new UnavailabilityError('expo-file-system', 'writeAsStringAsync'); 34*2307aaceSEvan Bacon } 35*2307aaceSEvan Bacon return await FS.writeAsStringAsync(fileUri, contents, options); 36*2307aaceSEvan Bacon} 37*2307aaceSEvan Baconexport async function deleteAsync(fileUri, options = {}) { 38*2307aaceSEvan Bacon if (!FS.deleteAsync) { 39*2307aaceSEvan Bacon throw new UnavailabilityError('expo-file-system', 'deleteAsync'); 40*2307aaceSEvan Bacon } 41*2307aaceSEvan Bacon return await FS.deleteAsync(fileUri, options); 42*2307aaceSEvan Bacon} 43*2307aaceSEvan Baconexport async function moveAsync(options) { 44*2307aaceSEvan Bacon if (!FS.moveAsync) { 45*2307aaceSEvan Bacon throw new UnavailabilityError('expo-file-system', 'moveAsync'); 46*2307aaceSEvan Bacon } 47*2307aaceSEvan Bacon return await FS.moveAsync(options); 48*2307aaceSEvan Bacon} 49*2307aaceSEvan Baconexport async function copyAsync(options) { 50*2307aaceSEvan Bacon if (!FS.copyAsync) { 51*2307aaceSEvan Bacon throw new UnavailabilityError('expo-file-system', 'copyAsync'); 52*2307aaceSEvan Bacon } 53*2307aaceSEvan Bacon return await FS.copyAsync(options); 54*2307aaceSEvan Bacon} 55*2307aaceSEvan Baconexport async function makeDirectoryAsync(fileUri, options = {}) { 56*2307aaceSEvan Bacon if (!FS.makeDirectoryAsync) { 57*2307aaceSEvan Bacon throw new UnavailabilityError('expo-file-system', 'makeDirectoryAsync'); 58*2307aaceSEvan Bacon } 59*2307aaceSEvan Bacon return await FS.makeDirectoryAsync(fileUri, options); 60*2307aaceSEvan Bacon} 61*2307aaceSEvan Baconexport async function readDirectoryAsync(fileUri) { 62*2307aaceSEvan Bacon if (!FS.readDirectoryAsync) { 63*2307aaceSEvan Bacon throw new UnavailabilityError('expo-file-system', 'readDirectoryAsync'); 64*2307aaceSEvan Bacon } 65*2307aaceSEvan Bacon return await FS.readDirectoryAsync(fileUri, {}); 66*2307aaceSEvan Bacon} 67*2307aaceSEvan Baconexport async function downloadAsync(uri, fileUri, options = {}) { 68*2307aaceSEvan Bacon if (!FS.downloadAsync) { 69*2307aaceSEvan Bacon throw new UnavailabilityError('expo-file-system', 'downloadAsync'); 70*2307aaceSEvan Bacon } 71*2307aaceSEvan Bacon return await FS.downloadAsync(uri, fileUri, options); 72*2307aaceSEvan Bacon} 73*2307aaceSEvan Baconexport function createDownloadResumable(uri, fileUri, options, callback, resumeData) { 74*2307aaceSEvan Bacon return new DownloadResumable(uri, fileUri, options, callback, resumeData); 75*2307aaceSEvan Bacon} 76*2307aaceSEvan Baconexport class DownloadResumable { 77*2307aaceSEvan Bacon constructor(url, fileUri, options = {}, callback, resumeData) { 78*2307aaceSEvan Bacon this._uuid = UUID.create(4).toString(); 79*2307aaceSEvan Bacon this._url = url; 80*2307aaceSEvan Bacon this._fileUri = fileUri; 81*2307aaceSEvan Bacon this._options = options; 82*2307aaceSEvan Bacon this._resumeData = resumeData; 83*2307aaceSEvan Bacon this._callback = callback; 84*2307aaceSEvan Bacon this._subscription = null; 85*2307aaceSEvan Bacon this._emitter = new EventEmitter(FS); 86*2307aaceSEvan Bacon } 87*2307aaceSEvan Bacon async downloadAsync() { 88*2307aaceSEvan Bacon if (!FS.downloadResumableStartAsync) { 89*2307aaceSEvan Bacon throw new UnavailabilityError('expo-file-system', 'downloadResumableStartAsync'); 90*2307aaceSEvan Bacon } 91*2307aaceSEvan Bacon this._addSubscription(); 92*2307aaceSEvan Bacon return await FS.downloadResumableStartAsync(this._url, this._fileUri, this._uuid, this._options, this._resumeData); 93*2307aaceSEvan Bacon } 94*2307aaceSEvan Bacon async pauseAsync() { 95*2307aaceSEvan Bacon if (!FS.downloadResumablePauseAsync) { 96*2307aaceSEvan Bacon throw new UnavailabilityError('expo-file-system', 'downloadResumablePauseAsync'); 97*2307aaceSEvan Bacon } 98*2307aaceSEvan Bacon const pauseResult = await FS.downloadResumablePauseAsync(this._uuid); 99*2307aaceSEvan Bacon this._removeSubscription(); 100*2307aaceSEvan Bacon if (pauseResult) { 101*2307aaceSEvan Bacon this._resumeData = pauseResult.resumeData; 102*2307aaceSEvan Bacon return this.savable(); 103*2307aaceSEvan Bacon } 104*2307aaceSEvan Bacon else { 105*2307aaceSEvan Bacon throw new Error('Unable to generate a savable pause state'); 106*2307aaceSEvan Bacon } 107*2307aaceSEvan Bacon } 108*2307aaceSEvan Bacon async resumeAsync() { 109*2307aaceSEvan Bacon if (!FS.downloadResumableStartAsync) { 110*2307aaceSEvan Bacon throw new UnavailabilityError('expo-file-system', 'downloadResumableStartAsync'); 111*2307aaceSEvan Bacon } 112*2307aaceSEvan Bacon this._addSubscription(); 113*2307aaceSEvan Bacon return await FS.downloadResumableStartAsync(this._url, this._fileUri, this._uuid, this._options, this._resumeData); 114*2307aaceSEvan Bacon } 115*2307aaceSEvan Bacon savable() { 116*2307aaceSEvan Bacon return { 117*2307aaceSEvan Bacon url: this._url, 118*2307aaceSEvan Bacon fileUri: this._fileUri, 119*2307aaceSEvan Bacon options: this._options, 120*2307aaceSEvan Bacon resumeData: this._resumeData, 121*2307aaceSEvan Bacon }; 122*2307aaceSEvan Bacon } 123*2307aaceSEvan Bacon _addSubscription() { 124*2307aaceSEvan Bacon if (this._subscription) { 125*2307aaceSEvan Bacon return; 126*2307aaceSEvan Bacon } 127*2307aaceSEvan Bacon this._subscription = this._emitter.addListener('Exponent.downloadProgress', (event) => { 128*2307aaceSEvan Bacon if (event.uuid === this._uuid) { 129*2307aaceSEvan Bacon const callback = this._callback; 130*2307aaceSEvan Bacon if (callback) { 131*2307aaceSEvan Bacon callback(event.data); 132*2307aaceSEvan Bacon } 133*2307aaceSEvan Bacon } 134*2307aaceSEvan Bacon }); 135*2307aaceSEvan Bacon } 136*2307aaceSEvan Bacon _removeSubscription() { 137*2307aaceSEvan Bacon if (!this._subscription) { 138*2307aaceSEvan Bacon return; 139*2307aaceSEvan Bacon } 140*2307aaceSEvan Bacon this._emitter.removeSubscription(this._subscription); 141*2307aaceSEvan Bacon this._subscription = null; 142*2307aaceSEvan Bacon } 143*2307aaceSEvan Bacon} 144*2307aaceSEvan Bacon//# sourceMappingURL=FileSystem.js.map