18285c032STomasz Sapetaimport { EventEmitter, UnavailabilityError } from 'expo-modules-core';
21da2f189STomasz Sapetaimport { Platform } from 'react-native';
37f896a5fSGiau. Tran Minhimport { v4 as uuidv4 } from 'uuid';
479a5fc63SJames Ideimport ExponentFileSystem from './ExponentFileSystem';
537630a92SŁukasz Kosmatyimport { EncodingType, FileSystemSessionType, FileSystemUploadType, } from './FileSystem.types';
67e929553SEvan Baconif (!ExponentFileSystem) {
72307aaceSEvan Bacon    console.warn("No native ExponentFileSystem module found, are you sure the expo-file-system's module is linked properly?");
82307aaceSEvan Bacon}
98f6e1365SEvan Bacon// Prevent webpack from pruning this.
1079a5fc63SJames Ideconst _unused = new EventEmitter(ExponentFileSystem); // eslint-disable-line
1137630a92SŁukasz Kosmatyexport { EncodingType, FileSystemSessionType, FileSystemUploadType, };
122307aaceSEvan Baconfunction normalizeEndingSlash(p) {
132307aaceSEvan Bacon    if (p != null) {
142307aaceSEvan Bacon        return p.replace(/\/*$/, '') + '/';
152307aaceSEvan Bacon    }
162307aaceSEvan Bacon    return null;
172307aaceSEvan Bacon}
187e929553SEvan Baconexport const documentDirectory = normalizeEndingSlash(ExponentFileSystem.documentDirectory);
197e929553SEvan Baconexport const cacheDirectory = normalizeEndingSlash(ExponentFileSystem.cacheDirectory);
207e929553SEvan Baconexport const { bundledAssets, bundleDirectory } = ExponentFileSystem;
212307aaceSEvan Baconexport async function getInfoAsync(fileUri, options = {}) {
227e929553SEvan Bacon    if (!ExponentFileSystem.getInfoAsync) {
232307aaceSEvan Bacon        throw new UnavailabilityError('expo-file-system', 'getInfoAsync');
242307aaceSEvan Bacon    }
257e929553SEvan Bacon    return await ExponentFileSystem.getInfoAsync(fileUri, options);
262307aaceSEvan Bacon}
272307aaceSEvan Baconexport async function readAsStringAsync(fileUri, options) {
287e929553SEvan Bacon    if (!ExponentFileSystem.readAsStringAsync) {
292307aaceSEvan Bacon        throw new UnavailabilityError('expo-file-system', 'readAsStringAsync');
302307aaceSEvan Bacon    }
317e929553SEvan Bacon    return await ExponentFileSystem.readAsStringAsync(fileUri, options || {});
322307aaceSEvan Bacon}
33e4897761STongyu Zhuexport async function getContentUriAsync(fileUri) {
341da2f189STomasz Sapeta    if (Platform.OS === 'android') {
35e4897761STongyu Zhu        if (!ExponentFileSystem.getContentUriAsync) {
36e4897761STongyu Zhu            throw new UnavailabilityError('expo-file-system', 'getContentUriAsync');
37e4897761STongyu Zhu        }
38e4897761STongyu Zhu        return await ExponentFileSystem.getContentUriAsync(fileUri);
39e4897761STongyu Zhu    }
401da2f189STomasz Sapeta    else {
411da2f189STomasz Sapeta        return new Promise(function (resolve, reject) {
421da2f189STomasz Sapeta            resolve(fileUri);
431da2f189STomasz Sapeta        });
441da2f189STomasz Sapeta    }
451da2f189STomasz Sapeta}
462307aaceSEvan Baconexport async function writeAsStringAsync(fileUri, contents, options = {}) {
477e929553SEvan Bacon    if (!ExponentFileSystem.writeAsStringAsync) {
482307aaceSEvan Bacon        throw new UnavailabilityError('expo-file-system', 'writeAsStringAsync');
492307aaceSEvan Bacon    }
507e929553SEvan Bacon    return await ExponentFileSystem.writeAsStringAsync(fileUri, contents, options);
512307aaceSEvan Bacon}
522307aaceSEvan Baconexport async function deleteAsync(fileUri, options = {}) {
537e929553SEvan Bacon    if (!ExponentFileSystem.deleteAsync) {
542307aaceSEvan Bacon        throw new UnavailabilityError('expo-file-system', 'deleteAsync');
552307aaceSEvan Bacon    }
567e929553SEvan Bacon    return await ExponentFileSystem.deleteAsync(fileUri, options);
572307aaceSEvan Bacon}
580d6db115SEric Samelsonexport async function deleteLegacyDocumentDirectoryAndroid() {
590d6db115SEric Samelson    if (Platform.OS !== 'android' || documentDirectory == null) {
600d6db115SEric Samelson        return;
610d6db115SEric Samelson    }
620d6db115SEric Samelson    const legacyDocumentDirectory = `${documentDirectory}ExperienceData/`;
630d6db115SEric Samelson    return await deleteAsync(legacyDocumentDirectory, { idempotent: true });
640d6db115SEric Samelson}
652307aaceSEvan Baconexport async function moveAsync(options) {
667e929553SEvan Bacon    if (!ExponentFileSystem.moveAsync) {
672307aaceSEvan Bacon        throw new UnavailabilityError('expo-file-system', 'moveAsync');
682307aaceSEvan Bacon    }
697e929553SEvan Bacon    return await ExponentFileSystem.moveAsync(options);
702307aaceSEvan Bacon}
712307aaceSEvan Baconexport async function copyAsync(options) {
727e929553SEvan Bacon    if (!ExponentFileSystem.copyAsync) {
732307aaceSEvan Bacon        throw new UnavailabilityError('expo-file-system', 'copyAsync');
742307aaceSEvan Bacon    }
757e929553SEvan Bacon    return await ExponentFileSystem.copyAsync(options);
762307aaceSEvan Bacon}
772307aaceSEvan Baconexport async function makeDirectoryAsync(fileUri, options = {}) {
787e929553SEvan Bacon    if (!ExponentFileSystem.makeDirectoryAsync) {
792307aaceSEvan Bacon        throw new UnavailabilityError('expo-file-system', 'makeDirectoryAsync');
802307aaceSEvan Bacon    }
817e929553SEvan Bacon    return await ExponentFileSystem.makeDirectoryAsync(fileUri, options);
822307aaceSEvan Bacon}
832307aaceSEvan Baconexport async function readDirectoryAsync(fileUri) {
847e929553SEvan Bacon    if (!ExponentFileSystem.readDirectoryAsync) {
852307aaceSEvan Bacon        throw new UnavailabilityError('expo-file-system', 'readDirectoryAsync');
862307aaceSEvan Bacon    }
877e929553SEvan Bacon    return await ExponentFileSystem.readDirectoryAsync(fileUri, {});
882307aaceSEvan Bacon}
89ae9a5f1aSTongyu Zhuexport async function getFreeDiskStorageAsync() {
90ae9a5f1aSTongyu Zhu    if (!ExponentFileSystem.getFreeDiskStorageAsync) {
91ae9a5f1aSTongyu Zhu        throw new UnavailabilityError('expo-file-system', 'getFreeDiskStorageAsync');
92ae9a5f1aSTongyu Zhu    }
93ae9a5f1aSTongyu Zhu    return await ExponentFileSystem.getFreeDiskStorageAsync();
94ae9a5f1aSTongyu Zhu}
95ae9a5f1aSTongyu Zhuexport async function getTotalDiskCapacityAsync() {
96ae9a5f1aSTongyu Zhu    if (!ExponentFileSystem.getTotalDiskCapacityAsync) {
97ae9a5f1aSTongyu Zhu        throw new UnavailabilityError('expo-file-system', 'getTotalDiskCapacityAsync');
98ae9a5f1aSTongyu Zhu    }
99ae9a5f1aSTongyu Zhu    return await ExponentFileSystem.getTotalDiskCapacityAsync();
100ae9a5f1aSTongyu Zhu}
1012307aaceSEvan Baconexport async function downloadAsync(uri, fileUri, options = {}) {
1027e929553SEvan Bacon    if (!ExponentFileSystem.downloadAsync) {
1032307aaceSEvan Bacon        throw new UnavailabilityError('expo-file-system', 'downloadAsync');
1042307aaceSEvan Bacon    }
105da65a760SŁukasz Kosmaty    return await ExponentFileSystem.downloadAsync(uri, fileUri, {
106da65a760SŁukasz Kosmaty        sessionType: FileSystemSessionType.BACKGROUND,
107da65a760SŁukasz Kosmaty        ...options,
108da65a760SŁukasz Kosmaty    });
109da65a760SŁukasz Kosmaty}
110da65a760SŁukasz Kosmatyexport async function uploadAsync(url, fileUri, options = {}) {
111da65a760SŁukasz Kosmaty    if (!ExponentFileSystem.uploadAsync) {
112da65a760SŁukasz Kosmaty        throw new UnavailabilityError('expo-file-system', 'uploadAsync');
113da65a760SŁukasz Kosmaty    }
114da65a760SŁukasz Kosmaty    return await ExponentFileSystem.uploadAsync(url, fileUri, {
115da65a760SŁukasz Kosmaty        sessionType: FileSystemSessionType.BACKGROUND,
11637630a92SŁukasz Kosmaty        uploadType: FileSystemUploadType.BINARY_CONTENT,
117da65a760SŁukasz Kosmaty        ...options,
118da65a760SŁukasz Kosmaty        httpMethod: (options.httpMethod || 'POST').toUpperCase(),
119da65a760SŁukasz Kosmaty    });
1202307aaceSEvan Bacon}
1212307aaceSEvan Baconexport function createDownloadResumable(uri, fileUri, options, callback, resumeData) {
1222307aaceSEvan Bacon    return new DownloadResumable(uri, fileUri, options, callback, resumeData);
1232307aaceSEvan Bacon}
124*52eeb172SŁukasz Kosmatyexport function createUploadTask(url, fileUri, options, callback) {
125*52eeb172SŁukasz Kosmaty    return new UploadTask(url, fileUri, options, callback);
126*52eeb172SŁukasz Kosmaty}
127*52eeb172SŁukasz Kosmatyexport class FileSystemCancellableNetworkTask {
128*52eeb172SŁukasz Kosmaty    _uuid = uuidv4();
129*52eeb172SŁukasz Kosmaty    taskWasCanceled = false;
130*52eeb172SŁukasz Kosmaty    emitter = new EventEmitter(ExponentFileSystem);
131*52eeb172SŁukasz Kosmaty    subscription;
132*52eeb172SŁukasz Kosmaty    async cancelAsync() {
133*52eeb172SŁukasz Kosmaty        if (!ExponentFileSystem.networkTaskCancelAsync) {
134*52eeb172SŁukasz Kosmaty            throw new UnavailabilityError('expo-file-system', 'networkTaskCancelAsync');
135*52eeb172SŁukasz Kosmaty        }
136*52eeb172SŁukasz Kosmaty        this.removeSubscription();
137*52eeb172SŁukasz Kosmaty        this.taskWasCanceled = true;
138*52eeb172SŁukasz Kosmaty        return await ExponentFileSystem.networkTaskCancelAsync(this.uuid);
139*52eeb172SŁukasz Kosmaty    }
140*52eeb172SŁukasz Kosmaty    isTaskCancelled() {
141*52eeb172SŁukasz Kosmaty        if (this.taskWasCanceled) {
142*52eeb172SŁukasz Kosmaty            console.warn('This task was already canceled.');
143*52eeb172SŁukasz Kosmaty            return true;
144*52eeb172SŁukasz Kosmaty        }
145*52eeb172SŁukasz Kosmaty        return false;
146*52eeb172SŁukasz Kosmaty    }
147*52eeb172SŁukasz Kosmaty    get uuid() {
148*52eeb172SŁukasz Kosmaty        return this._uuid;
149*52eeb172SŁukasz Kosmaty    }
150*52eeb172SŁukasz Kosmaty    addSubscription() {
151*52eeb172SŁukasz Kosmaty        if (this.subscription) {
152*52eeb172SŁukasz Kosmaty            return;
153*52eeb172SŁukasz Kosmaty        }
154*52eeb172SŁukasz Kosmaty        this.subscription = this.emitter.addListener(this.getEventName(), (event) => {
155*52eeb172SŁukasz Kosmaty            if (event.uuid === this.uuid) {
156*52eeb172SŁukasz Kosmaty                const callback = this.getCallback();
157*52eeb172SŁukasz Kosmaty                if (callback) {
158*52eeb172SŁukasz Kosmaty                    callback(event.data);
159*52eeb172SŁukasz Kosmaty                }
160*52eeb172SŁukasz Kosmaty            }
161*52eeb172SŁukasz Kosmaty        });
162*52eeb172SŁukasz Kosmaty    }
163*52eeb172SŁukasz Kosmaty    removeSubscription() {
164*52eeb172SŁukasz Kosmaty        if (!this.subscription) {
165*52eeb172SŁukasz Kosmaty            return;
166*52eeb172SŁukasz Kosmaty        }
167*52eeb172SŁukasz Kosmaty        this.emitter.removeSubscription(this.subscription);
168*52eeb172SŁukasz Kosmaty        this.subscription = null;
169*52eeb172SŁukasz Kosmaty    }
170*52eeb172SŁukasz Kosmaty}
171*52eeb172SŁukasz Kosmatyexport class UploadTask extends FileSystemCancellableNetworkTask {
172*52eeb172SŁukasz Kosmaty    url;
173*52eeb172SŁukasz Kosmaty    fileUri;
174*52eeb172SŁukasz Kosmaty    callback;
175*52eeb172SŁukasz Kosmaty    options;
176*52eeb172SŁukasz Kosmaty    constructor(url, fileUri, options, callback) {
177*52eeb172SŁukasz Kosmaty        super();
178*52eeb172SŁukasz Kosmaty        this.url = url;
179*52eeb172SŁukasz Kosmaty        this.fileUri = fileUri;
180*52eeb172SŁukasz Kosmaty        this.callback = callback;
181*52eeb172SŁukasz Kosmaty        const httpMethod = (options?.httpMethod?.toUpperCase ||
182*52eeb172SŁukasz Kosmaty            'POST');
183*52eeb172SŁukasz Kosmaty        this.options = {
184*52eeb172SŁukasz Kosmaty            sessionType: FileSystemSessionType.BACKGROUND,
185*52eeb172SŁukasz Kosmaty            uploadType: FileSystemUploadType.BINARY_CONTENT,
186*52eeb172SŁukasz Kosmaty            ...options,
187*52eeb172SŁukasz Kosmaty            httpMethod,
188*52eeb172SŁukasz Kosmaty        };
189*52eeb172SŁukasz Kosmaty    }
190*52eeb172SŁukasz Kosmaty    getEventName() {
191*52eeb172SŁukasz Kosmaty        return 'expo-file-system.uploadProgress';
192*52eeb172SŁukasz Kosmaty    }
193*52eeb172SŁukasz Kosmaty    getCallback() {
194*52eeb172SŁukasz Kosmaty        return this.callback;
195*52eeb172SŁukasz Kosmaty    }
196*52eeb172SŁukasz Kosmaty    async uploadAsync() {
197*52eeb172SŁukasz Kosmaty        if (!ExponentFileSystem.uploadTaskStartAsync) {
198*52eeb172SŁukasz Kosmaty            throw new UnavailabilityError('expo-file-system', 'uploadTaskStartAsync');
199*52eeb172SŁukasz Kosmaty        }
200*52eeb172SŁukasz Kosmaty        if (this.isTaskCancelled()) {
201*52eeb172SŁukasz Kosmaty            return;
202*52eeb172SŁukasz Kosmaty        }
203*52eeb172SŁukasz Kosmaty        this.addSubscription();
204*52eeb172SŁukasz Kosmaty        const result = await ExponentFileSystem.uploadTaskStartAsync(this.url, this.fileUri, this.uuid, this.options);
205*52eeb172SŁukasz Kosmaty        this.removeSubscription();
206*52eeb172SŁukasz Kosmaty        return result;
207*52eeb172SŁukasz Kosmaty    }
208*52eeb172SŁukasz Kosmaty}
209*52eeb172SŁukasz Kosmatyexport class DownloadResumable extends FileSystemCancellableNetworkTask {
210*52eeb172SŁukasz Kosmaty    url;
211896103abSandy    _fileUri;
212*52eeb172SŁukasz Kosmaty    options;
213*52eeb172SŁukasz Kosmaty    callback;
214*52eeb172SŁukasz Kosmaty    resumeData;
215*52eeb172SŁukasz Kosmaty    constructor(url, _fileUri, options = {}, callback, resumeData) {
216*52eeb172SŁukasz Kosmaty        super();
217*52eeb172SŁukasz Kosmaty        this.url = url;
218*52eeb172SŁukasz Kosmaty        this._fileUri = _fileUri;
219*52eeb172SŁukasz Kosmaty        this.options = options;
220*52eeb172SŁukasz Kosmaty        this.callback = callback;
221*52eeb172SŁukasz Kosmaty        this.resumeData = resumeData;
222*52eeb172SŁukasz Kosmaty    }
223*52eeb172SŁukasz Kosmaty    get fileUri() {
224*52eeb172SŁukasz Kosmaty        return this._fileUri;
225*52eeb172SŁukasz Kosmaty    }
226*52eeb172SŁukasz Kosmaty    getEventName() {
227*52eeb172SŁukasz Kosmaty        return 'expo-file-system.downloadProgress';
228*52eeb172SŁukasz Kosmaty    }
229*52eeb172SŁukasz Kosmaty    getCallback() {
230*52eeb172SŁukasz Kosmaty        return this.callback;
2312307aaceSEvan Bacon    }
2322307aaceSEvan Bacon    async downloadAsync() {
2337e929553SEvan Bacon        if (!ExponentFileSystem.downloadResumableStartAsync) {
2342307aaceSEvan Bacon            throw new UnavailabilityError('expo-file-system', 'downloadResumableStartAsync');
2352307aaceSEvan Bacon        }
236*52eeb172SŁukasz Kosmaty        if (this.isTaskCancelled()) {
237*52eeb172SŁukasz Kosmaty            return;
238*52eeb172SŁukasz Kosmaty        }
239*52eeb172SŁukasz Kosmaty        this.addSubscription();
240*52eeb172SŁukasz Kosmaty        return await ExponentFileSystem.downloadResumableStartAsync(this.url, this._fileUri, this.uuid, this.options, this.resumeData);
2412307aaceSEvan Bacon    }
2422307aaceSEvan Bacon    async pauseAsync() {
2437e929553SEvan Bacon        if (!ExponentFileSystem.downloadResumablePauseAsync) {
2442307aaceSEvan Bacon            throw new UnavailabilityError('expo-file-system', 'downloadResumablePauseAsync');
2452307aaceSEvan Bacon        }
246*52eeb172SŁukasz Kosmaty        if (this.isTaskCancelled()) {
247*52eeb172SŁukasz Kosmaty            return {
248*52eeb172SŁukasz Kosmaty                fileUri: this._fileUri,
249*52eeb172SŁukasz Kosmaty                options: this.options,
250*52eeb172SŁukasz Kosmaty                url: this.url,
251*52eeb172SŁukasz Kosmaty            };
252*52eeb172SŁukasz Kosmaty        }
253*52eeb172SŁukasz Kosmaty        const pauseResult = await ExponentFileSystem.downloadResumablePauseAsync(this.uuid);
254*52eeb172SŁukasz Kosmaty        this.removeSubscription();
2552307aaceSEvan Bacon        if (pauseResult) {
256*52eeb172SŁukasz Kosmaty            this.resumeData = pauseResult.resumeData;
2572307aaceSEvan Bacon            return this.savable();
2582307aaceSEvan Bacon        }
2592307aaceSEvan Bacon        else {
2602307aaceSEvan Bacon            throw new Error('Unable to generate a savable pause state');
2612307aaceSEvan Bacon        }
2622307aaceSEvan Bacon    }
2632307aaceSEvan Bacon    async resumeAsync() {
2647e929553SEvan Bacon        if (!ExponentFileSystem.downloadResumableStartAsync) {
2652307aaceSEvan Bacon            throw new UnavailabilityError('expo-file-system', 'downloadResumableStartAsync');
2662307aaceSEvan Bacon        }
267*52eeb172SŁukasz Kosmaty        if (this.isTaskCancelled()) {
268*52eeb172SŁukasz Kosmaty            return;
269*52eeb172SŁukasz Kosmaty        }
270*52eeb172SŁukasz Kosmaty        this.addSubscription();
271*52eeb172SŁukasz Kosmaty        return await ExponentFileSystem.downloadResumableStartAsync(this.url, this.fileUri, this.uuid, this.options, this.resumeData);
2722307aaceSEvan Bacon    }
2732307aaceSEvan Bacon    savable() {
2742307aaceSEvan Bacon        return {
275*52eeb172SŁukasz Kosmaty            url: this.url,
276*52eeb172SŁukasz Kosmaty            fileUri: this.fileUri,
277*52eeb172SŁukasz Kosmaty            options: this.options,
278*52eeb172SŁukasz Kosmaty            resumeData: this.resumeData,
2792307aaceSEvan Bacon        };
2802307aaceSEvan Bacon    }
2812307aaceSEvan Bacon}
282400de723SŁukasz Kosmatyconst baseReadAsStringAsync = readAsStringAsync;
283400de723SŁukasz Kosmatyconst baseWriteAsStringAsync = writeAsStringAsync;
284400de723SŁukasz Kosmatyconst baseDeleteAsync = deleteAsync;
285400de723SŁukasz Kosmatyconst baseMoveAsync = moveAsync;
286400de723SŁukasz Kosmatyconst baseCopyAsync = copyAsync;
287400de723SŁukasz Kosmaty/**
288400de723SŁukasz Kosmaty * Android only
289400de723SŁukasz Kosmaty */
290400de723SŁukasz Kosmatyexport var StorageAccessFramework;
291400de723SŁukasz Kosmaty(function (StorageAccessFramework) {
292400de723SŁukasz Kosmaty    function getUriForDirectoryInRoot(folderName) {
293400de723SŁukasz Kosmaty        return `content://com.android.externalstorage.documents/tree/primary:${folderName}/document/primary:${folderName}`;
294400de723SŁukasz Kosmaty    }
295400de723SŁukasz Kosmaty    StorageAccessFramework.getUriForDirectoryInRoot = getUriForDirectoryInRoot;
296400de723SŁukasz Kosmaty    async function requestDirectoryPermissionsAsync(initialFileUrl = null) {
297400de723SŁukasz Kosmaty        if (!ExponentFileSystem.requestDirectoryPermissionsAsync) {
298400de723SŁukasz Kosmaty            throw new UnavailabilityError('expo-file-system', 'StorageAccessFramework.requestDirectoryPermissionsAsync');
299400de723SŁukasz Kosmaty        }
300400de723SŁukasz Kosmaty        return await ExponentFileSystem.requestDirectoryPermissionsAsync(initialFileUrl);
301400de723SŁukasz Kosmaty    }
302400de723SŁukasz Kosmaty    StorageAccessFramework.requestDirectoryPermissionsAsync = requestDirectoryPermissionsAsync;
303400de723SŁukasz Kosmaty    async function readDirectoryAsync(dirUri) {
304400de723SŁukasz Kosmaty        if (!ExponentFileSystem.readSAFDirectoryAsync) {
305400de723SŁukasz Kosmaty            throw new UnavailabilityError('expo-file-system', 'StorageAccessFramework.readDirectoryAsync');
306400de723SŁukasz Kosmaty        }
307400de723SŁukasz Kosmaty        return await ExponentFileSystem.readSAFDirectoryAsync(dirUri, {});
308400de723SŁukasz Kosmaty    }
309400de723SŁukasz Kosmaty    StorageAccessFramework.readDirectoryAsync = readDirectoryAsync;
310400de723SŁukasz Kosmaty    async function makeDirectoryAsync(parentUri, dirName) {
311400de723SŁukasz Kosmaty        if (!ExponentFileSystem.makeSAFDirectoryAsync) {
312400de723SŁukasz Kosmaty            throw new UnavailabilityError('expo-file-system', 'StorageAccessFramework.makeDirectoryAsync');
313400de723SŁukasz Kosmaty        }
314400de723SŁukasz Kosmaty        return await ExponentFileSystem.makeSAFDirectoryAsync(parentUri, dirName);
315400de723SŁukasz Kosmaty    }
316400de723SŁukasz Kosmaty    StorageAccessFramework.makeDirectoryAsync = makeDirectoryAsync;
317400de723SŁukasz Kosmaty    async function createFileAsync(parentUri, fileName, mimeType) {
318400de723SŁukasz Kosmaty        if (!ExponentFileSystem.createSAFFileAsync) {
319400de723SŁukasz Kosmaty            throw new UnavailabilityError('expo-file-system', 'StorageAccessFramework.createFileAsync');
320400de723SŁukasz Kosmaty        }
321400de723SŁukasz Kosmaty        return await ExponentFileSystem.createSAFFileAsync(parentUri, fileName, mimeType);
322400de723SŁukasz Kosmaty    }
323400de723SŁukasz Kosmaty    StorageAccessFramework.createFileAsync = createFileAsync;
324400de723SŁukasz Kosmaty    StorageAccessFramework.writeAsStringAsync = baseWriteAsStringAsync;
325400de723SŁukasz Kosmaty    StorageAccessFramework.readAsStringAsync = baseReadAsStringAsync;
326400de723SŁukasz Kosmaty    StorageAccessFramework.deleteAsync = baseDeleteAsync;
327400de723SŁukasz Kosmaty    StorageAccessFramework.moveAsync = baseMoveAsync;
328400de723SŁukasz Kosmaty    StorageAccessFramework.copyAsync = baseCopyAsync;
329400de723SŁukasz Kosmaty})(StorageAccessFramework || (StorageAccessFramework = {}));
3302307aaceSEvan Bacon//# sourceMappingURL=FileSystem.js.map