first commit

This commit is contained in:
2026-03-10 16:18:05 +00:00
commit 11f9c069b5
31635 changed files with 3187747 additions and 0 deletions

View File

@@ -0,0 +1,3 @@
declare const _default: any;
export default _default;
//# sourceMappingURL=ExponentFileSystem.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"ExponentFileSystem.d.ts","sourceRoot":"","sources":["../../src/legacy/ExponentFileSystem.ts"],"names":[],"mappings":";AAIA,wBAA2F"}

View File

@@ -0,0 +1,3 @@
import ExponentFileSystemShim from './ExponentFileSystemShim';
export default ExponentFileSystemShim;
//# sourceMappingURL=ExponentFileSystem.web.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"ExponentFileSystem.web.d.ts","sourceRoot":"","sources":["../../src/legacy/ExponentFileSystem.web.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,MAAM,0BAA0B,CAAC;AAC9D,eAAe,sBAAsB,CAAC"}

View File

@@ -0,0 +1,8 @@
import { NativeModule } from 'expo-modules-core';
import type { ExponentFileSystemModule, FileSystemEvents } from './types';
export default class FileSystemShim extends NativeModule<FileSystemEvents> implements ExponentFileSystemModule {
documentDirectory: null;
cacheDirectory: null;
bundleDirectory: null;
}
//# sourceMappingURL=ExponentFileSystemShim.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"ExponentFileSystemShim.d.ts","sourceRoot":"","sources":["../../src/legacy/ExponentFileSystemShim.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,KAAK,EAAE,wBAAwB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAC;AAE1E,MAAM,CAAC,OAAO,OAAO,cACnB,SAAQ,YAAY,CAAC,gBAAgB,CACrC,YAAW,wBAAwB;IAEnC,iBAAiB,OAAQ;IACzB,cAAc,OAAQ;IACtB,eAAe,OAAQ;CACxB"}

View File

@@ -0,0 +1,365 @@
import { DownloadOptions, DownloadPauseState, FileSystemNetworkTaskProgressCallback, DownloadProgressData, UploadProgressData, FileInfo, FileSystemDownloadResult, FileSystemRequestDirectoryPermissionsResult, FileSystemUploadOptions, FileSystemUploadResult, ReadingOptions, WritingOptions, DeletingOptions, InfoOptions, RelocatingOptions, MakeDirectoryOptions } from './FileSystem.types';
/**
* `file://` URI pointing to the directory where user documents for this app will be stored.
* Files stored here will remain until explicitly deleted by the app. Ends with a trailing `/`.
* Example uses are for files the user saves that they expect to see again.
*/
export declare const documentDirectory: string | null;
/**
* `file://` URI pointing to the directory where temporary files used by this app will be stored.
* Files stored here may be automatically deleted by the system when low on storage.
* Example uses are for downloaded or generated files that the app just needs for one-time usage.
*/
export declare const cacheDirectory: string | null;
/**
* URI to the directory where assets bundled with the application are stored.
*/
export declare const bundleDirectory: string | null;
/**
* Get metadata information about a file, directory or external content/asset.
* @param fileUri URI to the file or directory. See [supported URI schemes](#supported-uri-schemes).
* @param options A map of options represented by [`InfoOptions`](#infooptions) type.
* @return A Promise that resolves to a `FileInfo` object. If no item exists at this URI,
* the returned Promise resolves to `FileInfo` object in form of `{ exists: false, isDirectory: false }`.
*/
export declare function getInfoAsync(fileUri: string, options?: InfoOptions): Promise<FileInfo>;
/**
* Read the entire contents of a file as a string. Binary will be returned in raw format, you will need to append `data:image/png;base64,` to use it as Base64.
* @param fileUri `file://` or [SAF](#saf-uri) URI to the file or directory.
* @param options A map of read options represented by [`ReadingOptions`](#readingoptions) type.
* @return A Promise that resolves to a string containing the entire contents of the file.
*/
export declare function readAsStringAsync(fileUri: string, options?: ReadingOptions): Promise<string>;
/**
* Takes a `file://` URI and converts it into content URI (`content://`) so that it can be accessed by other applications outside of Expo.
* @param fileUri The local URI of the file. If there is no file at this URI, an exception will be thrown.
* @example
* ```js
* FileSystem.getContentUriAsync(uri).then(cUri => {
* console.log(cUri);
* IntentLauncher.startActivityAsync('android.intent.action.VIEW', {
* data: cUri,
* flags: 1,
* });
* });
* ```
* @return Returns a Promise that resolves to a `string` containing a `content://` URI pointing to the file.
* The URI is the same as the `fileUri` input parameter but in a different format.
* @platform android
*/
export declare function getContentUriAsync(fileUri: string): Promise<string>;
/**
* Write the entire contents of a file as a string.
* @param fileUri `file://` or [SAF](#saf-uri) URI to the file or directory.
* > Note: when you're using SAF URI the file needs to exist. You can't create a new file.
* @param contents The string to replace the contents of the file with.
* @param options A map of write options represented by [`WritingOptions`](#writingoptions) type.
*/
export declare function writeAsStringAsync(fileUri: string, contents: string, options?: WritingOptions): Promise<void>;
/**
* Delete a file or directory. If the URI points to a directory, the directory and all its contents are recursively deleted.
* @param fileUri `file://` or [SAF](#saf-uri) URI to the file or directory.
* @param options A map of write options represented by [`DeletingOptions`](#deletingoptions) type.
*/
export declare function deleteAsync(fileUri: string, options?: DeletingOptions): Promise<void>;
export declare function deleteLegacyDocumentDirectoryAndroid(): Promise<void>;
/**
* Move a file or directory to a new location.
* @param options A map of move options represented by [`RelocatingOptions`](#relocatingoptions) type.
*/
export declare function moveAsync(options: RelocatingOptions): Promise<void>;
/**
* Create a copy of a file or directory. Directories are recursively copied with all of their contents.
* It can be also used to copy content shared by other apps to local filesystem.
* @param options A map of move options represented by [`RelocatingOptions`](#relocatingoptions) type.
*/
export declare function copyAsync(options: RelocatingOptions): Promise<void>;
/**
* Create a new empty directory.
* @param fileUri `file://` URI to the new directory to create.
* @param options A map of create directory options represented by [`MakeDirectoryOptions`](#makedirectoryoptions) type.
*/
export declare function makeDirectoryAsync(fileUri: string, options?: MakeDirectoryOptions): Promise<void>;
/**
* Enumerate the contents of a directory.
* @param fileUri `file://` URI to the directory.
* @return A Promise that resolves to an array of strings, each containing the name of a file or directory contained in the directory at `fileUri`.
*/
export declare function readDirectoryAsync(fileUri: string): Promise<string[]>;
/**
* Gets the available internal disk storage size, in bytes. This returns the free space on the data partition that hosts all of the internal storage for all apps on the device.
* @return Returns a Promise that resolves to the number of bytes available on the internal disk.
*/
export declare function getFreeDiskStorageAsync(): Promise<number>;
/**
* Gets total internal disk storage size, in bytes. This is the total capacity of the data partition that hosts all the internal storage for all apps on the device.
* @return Returns a Promise that resolves to a number that specifies the total internal disk storage capacity in bytes.
*/
export declare function getTotalDiskCapacityAsync(): Promise<number>;
/**
* Download the contents at a remote URI to a file in the app's file system. The directory for a local file uri must exist prior to calling this function.
* @param uri The remote URI to download from.
* @param fileUri The local URI of the file to download to. If there is no file at this URI, a new one is created.
* If there is a file at this URI, its contents are replaced. The directory for the file must exist.
* @param options A map of download options represented by [`DownloadOptions`](#downloadoptions) type.
* @example
* ```js
* FileSystem.downloadAsync(
* 'http://techslides.com/demos/sample-videos/small.mp4',
* FileSystem.documentDirectory + 'small.mp4'
* )
* .then(({ uri }) => {
* console.log('Finished downloading to ', uri);
* })
* .catch(error => {
* console.error(error);
* });
* ```
* @return Returns a Promise that resolves to a `FileSystemDownloadResult` object.
*/
export declare function downloadAsync(uri: string, fileUri: string, options?: DownloadOptions): Promise<FileSystemDownloadResult>;
/**
* Upload the contents of the file pointed by `fileUri` to the remote url.
* @param url The remote URL, where the file will be sent.
* @param fileUri The local URI of the file to send. The file must exist.
* @param options A map of download options represented by [`FileSystemUploadOptions`](#filesystemuploadoptions) type.
* @example
* **Client**
*
* ```js
* import * as FileSystem from 'expo-file-system/legacy';
*
* try {
* const response = await FileSystem.uploadAsync(`http://192.168.0.1:1234/binary-upload`, fileUri, {
* fieldName: 'file',
* httpMethod: 'PATCH',
* uploadType: FileSystem.FileSystemUploadType.BINARY_CONTENT,
* });
* console.log(JSON.stringify(response, null, 4));
* } catch (error) {
* console.log(error);
* }
* ```
*
* **Server**
*
* Refer to the "[Server: Handling multipart requests](#server-handling-multipart-requests)" example - there is code for a simple Node.js server.
* @return Returns a Promise that resolves to `FileSystemUploadResult` object.
*/
export declare function uploadAsync(url: string, fileUri: string, options?: FileSystemUploadOptions): Promise<FileSystemUploadResult>;
/**
* Create a `DownloadResumable` object which can start, pause, and resume a download of contents at a remote URI to a file in the app's file system.
* > Note: You need to call `downloadAsync()`, on a `DownloadResumable` instance to initiate the download.
* The `DownloadResumable` object has a callback that provides download progress updates.
* Downloads can be resumed across app restarts by using `AsyncStorage` to store the `DownloadResumable.savable()` object for later retrieval.
* The `savable` object contains the arguments required to initialize a new `DownloadResumable` object to resume the download after an app restart.
* The directory for a local file uri must exist prior to calling this function.
* @param uri The remote URI to download from.
* @param fileUri The local URI of the file to download to. If there is no file at this URI, a new one is created.
* If there is a file at this URI, its contents are replaced. The directory for the file must exist.
* @param options A map of download options represented by [`DownloadOptions`](#downloadoptions) type.
* @param callback This function is called on each data write to update the download progress.
* > **Note**: When the app has been moved to the background, this callback won't be fired until it's moved to the foreground.
* @param resumeData The string which allows the api to resume a paused download. This is set on the `DownloadResumable` object automatically when a download is paused.
* When initializing a new `DownloadResumable` this should be `null`.
*/
export declare function createDownloadResumable(uri: string, fileUri: string, options?: DownloadOptions, callback?: FileSystemNetworkTaskProgressCallback<DownloadProgressData>, resumeData?: string): DownloadResumable;
export declare function createUploadTask(url: string, fileUri: string, options?: FileSystemUploadOptions, callback?: FileSystemNetworkTaskProgressCallback<UploadProgressData>): UploadTask;
export declare abstract class FileSystemCancellableNetworkTask<T extends DownloadProgressData | UploadProgressData> {
private _uuid;
protected taskWasCanceled: boolean;
private subscription?;
cancelAsync(): Promise<void>;
protected isTaskCancelled(): boolean;
protected get uuid(): string;
protected abstract getEventName(): string;
protected abstract getCallback(): FileSystemNetworkTaskProgressCallback<T> | undefined;
protected addSubscription(): void;
protected removeSubscription(): void;
}
export declare class UploadTask extends FileSystemCancellableNetworkTask<UploadProgressData> {
private url;
private fileUri;
private callback?;
private options;
constructor(url: string, fileUri: string, options?: FileSystemUploadOptions, callback?: FileSystemNetworkTaskProgressCallback<UploadProgressData> | undefined);
protected getEventName(): string;
protected getCallback(): FileSystemNetworkTaskProgressCallback<UploadProgressData> | undefined;
uploadAsync(): Promise<FileSystemUploadResult | undefined | null>;
}
export declare class DownloadResumable extends FileSystemCancellableNetworkTask<DownloadProgressData> {
private url;
private _fileUri;
private options;
private callback?;
private resumeData?;
constructor(url: string, _fileUri: string, options?: DownloadOptions, callback?: FileSystemNetworkTaskProgressCallback<DownloadProgressData> | undefined, resumeData?: string | undefined);
get fileUri(): string;
protected getEventName(): string;
protected getCallback(): FileSystemNetworkTaskProgressCallback<DownloadProgressData> | undefined;
/**
* Download the contents at a remote URI to a file in the app's file system.
* @return Returns a Promise that resolves to `FileSystemDownloadResult` object, or to `undefined` when task was cancelled.
*/
downloadAsync(): Promise<FileSystemDownloadResult | undefined>;
/**
* Pause the current download operation. `resumeData` is added to the `DownloadResumable` object after a successful pause operation.
* Returns an object that can be saved with `AsyncStorage` for future retrieval (the same object that is returned from calling `FileSystem.DownloadResumable.savable()`).
* @return Returns a Promise that resolves to `DownloadPauseState` object.
*/
pauseAsync(): Promise<DownloadPauseState>;
/**
* Resume a paused download operation.
* @return Returns a Promise that resolves to `FileSystemDownloadResult` object, or to `undefined` when task was cancelled.
*/
resumeAsync(): Promise<FileSystemDownloadResult | undefined>;
/**
* Method to get the object which can be saved with `AsyncStorage` for future retrieval.
* @returns Returns object in shape of `DownloadPauseState` type.
*/
savable(): DownloadPauseState;
}
/**
* The `StorageAccessFramework` is a namespace inside of the `expo-file-system` module, which encapsulates all functions which can be used with [SAF URIs](#saf-uri).
* You can read more about SAF in the [Android documentation](https://developer.android.com/guide/topics/providers/document-provider).
*
* @example
* # Basic Usage
*
* ```ts
* import { StorageAccessFramework } from 'expo-file-system';
*
* // Requests permissions for external directory
* const permissions = await StorageAccessFramework.requestDirectoryPermissionsAsync();
*
* if (permissions.granted) {
* // Gets SAF URI from response
* const uri = permissions.directoryUri;
*
* // Gets all files inside of selected directory
* const files = await StorageAccessFramework.readDirectoryAsync(uri);
* alert(`Files inside ${uri}:\n\n${JSON.stringify(files)}`);
* }
* ```
*
* # Migrating an album
*
* ```ts
* import * as MediaLibrary from 'expo-media-library';
* import * as FileSystem from 'expo-file-system/legacy';
* const { StorageAccessFramework } = FileSystem;
*
* async function migrateAlbum(albumName: string) {
* // Gets SAF URI to the album
* const albumUri = StorageAccessFramework.getUriForDirectoryInRoot(albumName);
*
* // Requests permissions
* const permissions = await StorageAccessFramework.requestDirectoryPermissionsAsync(albumUri);
* if (!permissions.granted) {
* return;
* }
*
* const permittedUri = permissions.directoryUri;
* // Checks if users selected the correct folder
* if (!permittedUri.includes(albumName)) {
* return;
* }
*
* const mediaLibraryPermissions = await MediaLibrary.requestPermissionsAsync();
* if (!mediaLibraryPermissions.granted) {
* return;
* }
*
* // Moves files from external storage to internal storage
* await StorageAccessFramework.moveAsync({
* from: permittedUri,
* to: FileSystem.documentDirectory!,
* });
*
* const outputDir = FileSystem.documentDirectory! + albumName;
* const migratedFiles = await FileSystem.readDirectoryAsync(outputDir);
*
* // Creates assets from local files
* const [newAlbumCreator, ...assets] = await Promise.all(
* migratedFiles.map<Promise<MediaLibrary.Asset>>(
* async fileName => await MediaLibrary.createAssetAsync(outputDir + '/' + fileName)
* )
* );
*
* // Album was empty
* if (!newAlbumCreator) {
* return;
* }
*
* // Creates a new album in the scoped directory
* const newAlbum = await MediaLibrary.createAlbumAsync(albumName, newAlbumCreator, false);
* if (assets.length) {
* await MediaLibrary.addAssetsToAlbumAsync(assets, newAlbum, false);
* }
* }
* ```
* @platform Android
*/
export declare namespace StorageAccessFramework {
/**
* Gets a [SAF URI](#saf-uri) pointing to a folder in the Android root directory. You can use this function to get URI for
* `StorageAccessFramework.requestDirectoryPermissionsAsync()` when you trying to migrate an album. In that case, the name of the album is the folder name.
* @param folderName The name of the folder which is located in the Android root directory.
* @return Returns a [SAF URI](#saf-uri) to a folder.
* @platform Android
*/
function getUriForDirectoryInRoot(folderName: string): string;
/**
* Allows users to select a specific directory, granting your app access to all of the files and sub-directories within that directory.
* @param initialFileUrl The [SAF URI](#saf-uri) of the directory that the file picker should display when it first loads.
* If URI is incorrect or points to a non-existing folder, it's ignored.
* @platform android 11+
* @return Returns a Promise that resolves to `FileSystemRequestDirectoryPermissionsResult` object.
*/
function requestDirectoryPermissionsAsync(initialFileUrl?: string | null): Promise<FileSystemRequestDirectoryPermissionsResult>;
/**
* Enumerate the contents of a directory.
* @param dirUri [SAF](#saf-uri) URI to the directory.
* @return A Promise that resolves to an array of strings, each containing the full [SAF URI](#saf-uri) of a file or directory contained in the directory at `fileUri`.
* @platform Android
*/
function readDirectoryAsync(dirUri: string): Promise<string[]>;
/**
* Creates a new empty directory.
* @param parentUri The [SAF](#saf-uri) URI to the parent directory.
* @param dirName The name of new directory.
* @return A Promise that resolves to a [SAF URI](#saf-uri) to the created directory.
* @platform Android
*/
function makeDirectoryAsync(parentUri: string, dirName: string): Promise<string>;
/**
* Creates a new empty file.
* @param parentUri The [SAF](#saf-uri) URI to the parent directory.
* @param fileName The name of new file **without the extension**.
* @param mimeType The MIME type of new file.
* @return A Promise that resolves to a [SAF URI](#saf-uri) to the created file.
* @platform Android
*/
function createFileAsync(parentUri: string, fileName: string, mimeType: string): Promise<string>;
/**
* Alias for [`writeAsStringAsync`](#filesystemwriteasstringasyncfileuri-contents-options) method.
*/
const writeAsStringAsync: typeof import("./FileSystem").writeAsStringAsync;
/**
* Alias for [`readAsStringAsync`](#filesystemreadasstringasyncfileuri-options) method.
*/
const readAsStringAsync: typeof import("./FileSystem").readAsStringAsync;
/**
* Alias for [`deleteAsync`](#filesystemdeleteasyncfileuri-options) method.
*/
const deleteAsync: typeof import("./FileSystem").deleteAsync;
/**
* Alias for [`moveAsync`](#filesystemmoveasyncoptions) method.
*/
const moveAsync: typeof import("./FileSystem").moveAsync;
/**
* Alias for [`copyAsync`](#filesystemcopyasyncoptions) method.
*/
const copyAsync: typeof import("./FileSystem").copyAsync;
}
//# sourceMappingURL=FileSystem.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"FileSystem.d.ts","sourceRoot":"","sources":["../../src/legacy/FileSystem.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,305 @@
/**
* These values can be used to define how sessions work on iOS.
* @platform ios
*/
export declare enum FileSystemSessionType {
/**
* Using this mode means that the downloading/uploading session on the native side will work even if the application is moved to background.
* If the task completes while the application is in background, the Promise will be either resolved immediately or (if the application execution has already been stopped) once the app is moved to foreground again.
* > Note: The background session doesn't fail if the server or your connection is down. Rather, it continues retrying until the task succeeds or is canceled manually.
*/
BACKGROUND = 0,
/**
* Using this mode means that downloading/uploading session on the native side will be terminated once the application becomes inactive (e.g. when it goes to background).
* Bringing the application to foreground again would trigger Promise rejection.
*/
FOREGROUND = 1
}
export declare enum FileSystemUploadType {
/**
* The file will be sent as a request's body. The request can't contain additional data.
*/
BINARY_CONTENT = 0,
/**
* An [RFC 2387-compliant](https://www.ietf.org/rfc/rfc2387.txt) request body. The provided file will be encoded into HTTP request.
* This request can contain additional data represented by [`UploadOptionsMultipart`](#uploadoptionsmultipart) type.
*/
MULTIPART = 1
}
export type DownloadOptions = {
/**
* If `true`, include the MD5 hash of the file in the returned object. Provided for convenience since it is common to check the integrity of a file immediately after downloading.
* @default false
*/
md5?: boolean;
cache?: boolean;
/**
* An object containing all the HTTP header fields and their values for the download network request. The keys and values of the object are the header names and values respectively.
*/
headers?: Record<string, string>;
/**
* A session type. Determines if tasks can be handled in the background. On Android, sessions always work in the background and you can't change it.
* @default FileSystemSessionType.BACKGROUND
* @platform ios
*/
sessionType?: FileSystemSessionType;
};
export type FileSystemHttpResult = {
/**
* An object containing all the HTTP response header fields and their values for the download network request.
* The keys and values of the object are the header names and values respectively.
*/
headers: Record<string, string>;
/**
* The HTTP response status code for the download network request.
*/
status: number;
mimeType: string | null;
};
export type FileSystemDownloadResult = FileSystemHttpResult & {
/**
* A `file://` URI pointing to the file. This is the same as the `fileUri` input parameter.
*/
uri: string;
/**
* Present if the `md5` option was truthy. Contains the MD5 hash of the file.
*/
md5?: string;
};
/**
* @deprecated Use `FileSystemDownloadResult` instead.
*/
export type DownloadResult = FileSystemDownloadResult;
export type FileSystemUploadOptions = (UploadOptionsBinary | UploadOptionsMultipart) & {
/**
* An object containing all the HTTP header fields and their values for the upload network request.
* The keys and values of the object are the header names and values respectively.
*/
headers?: Record<string, string>;
/**
* The request method.
* @default FileSystemAcceptedUploadHttpMethod.POST
*/
httpMethod?: FileSystemAcceptedUploadHttpMethod;
/**
* A session type. Determines if tasks can be handled in the background. On Android, sessions always work in the background and you can't change it.
* @default FileSystemSessionType.BACKGROUND
* @platform ios
*/
sessionType?: FileSystemSessionType;
};
/**
* Upload options when upload type is set to binary.
*/
export type UploadOptionsBinary = {
/**
* Upload type determines how the file will be sent to the server.
* Value will be `FileSystemUploadType.BINARY_CONTENT`.
*/
uploadType?: FileSystemUploadType;
};
/**
* Upload options when upload type is set to multipart.
*/
export type UploadOptionsMultipart = {
/**
* Upload type determines how the file will be sent to the server.
* Value will be `FileSystemUploadType.MULTIPART`.
*/
uploadType: FileSystemUploadType;
/**
* The name of the field which will hold uploaded file. Defaults to the file name without an extension.
*/
fieldName?: string;
/**
* The MIME type of the provided file. If not provided, the module will try to guess it based on the extension.
*/
mimeType?: string;
/**
* Additional form properties. They will be located in the request body.
*/
parameters?: Record<string, string>;
};
export type FileSystemUploadResult = FileSystemHttpResult & {
/**
* The body of the server response.
*/
body: string;
};
export type FileSystemNetworkTaskProgressCallback<T extends DownloadProgressData | UploadProgressData> = (data: T) => void;
/**
* @deprecated use `FileSystemNetworkTaskProgressCallback<DownloadProgressData>` instead.
*/
export type DownloadProgressCallback = FileSystemNetworkTaskProgressCallback<DownloadProgressData>;
export type DownloadProgressData = {
/**
* The total bytes written by the download operation.
*/
totalBytesWritten: number;
/**
* The total bytes expected to be written by the download operation. A value of `-1` means that the server did not return the `Content-Length` header
* and the total size is unknown. Without this header, you won't be able to track the download progress.
*/
totalBytesExpectedToWrite: number;
};
export type UploadProgressData = {
/**
* The total bytes sent by the upload operation.
*/
totalBytesSent: number;
/**
* The total bytes expected to be sent by the upload operation.
*/
totalBytesExpectedToSend: number;
};
export type DownloadPauseState = {
/**
* The remote URI to download from.
*/
url: string;
/**
* The local URI of the file to download to. If there is no file at this URI, a new one is created. If there is a file at this URI, its contents are replaced.
*/
fileUri: string;
/**
* Object representing the file download options.
*/
options: DownloadOptions;
/**
* The string which allows the API to resume a paused download.
*/
resumeData?: string;
};
export type FileInfo =
/**
* Object returned when file exist.
*/
{
/**
* Signifies that the requested file exist.
*/
exists: true;
/**
* A URI pointing to the file. This is the same as the `fileUri` input parameter
* and preserves its scheme (for example, `file://` or `content://`).
*/
uri: string;
/**
* The size of the file in bytes.
*/
size: number;
/**
* Boolean set to `true` if this is a directory and `false` if it is a file.
*/
isDirectory: boolean;
/**
* The last modification time of the file expressed in seconds since epoch.
*/
modificationTime: number;
/**
* Present if the `md5` option was truthy. Contains the MD5 hash of the file.
*/
md5?: string;
}
/**
* Object returned when file do not exist.
*/
| {
exists: false;
uri: string;
isDirectory: false;
};
/**
* These values can be used to define how file system data is read / written.
*/
export declare enum EncodingType {
/**
* Standard encoding format.
*/
UTF8 = "utf8",
/**
* Binary, radix-64 representation.
*/
Base64 = "base64"
}
export type FileSystemAcceptedUploadHttpMethod = 'POST' | 'PUT' | 'PATCH';
export type ReadingOptions = {
/**
* The encoding format to use when reading the file.
* @default EncodingType.UTF8
*/
encoding?: EncodingType | 'utf8' | 'base64';
/**
* Optional number of bytes to skip. This option is only used when `encoding: FileSystem.EncodingType.Base64` and `length` is defined.
* */
position?: number;
/**
* Optional number of bytes to read. This option is only used when `encoding: FileSystem.EncodingType.Base64` and `position` is defined.
*/
length?: number;
};
export type WritingOptions = {
/**
* The encoding format to use when writing the file.
* @default FileSystem.EncodingType.UTF8
*/
encoding?: EncodingType | 'utf8' | 'base64';
/**
* Whether to append the contents to the end of the file or overwrite the existing file.
* @default false
*/
append?: boolean;
};
export type DeletingOptions = {
/**
* If `true`, don't throw an error if there is no file or directory at this URI.
* @default false
*/
idempotent?: boolean;
};
export type InfoOptions = {
/**
* Whether to return the MD5 hash of the file.
* @default false
*/
md5?: boolean;
};
export type RelocatingOptions = {
/**
* URI or [SAF](#saf-uri) URI to the asset, file, or directory. See [supported URI schemes](#supported-uri-schemes).
*/
from: string;
/**
* `file://` URI to the file or directory which should be its new location.
*/
to: string;
};
export type MakeDirectoryOptions = {
/**
* If `true`, don't throw an error if there is no file or directory at this URI.
* @default false
*/
intermediates?: boolean;
};
export type ProgressEvent<T> = {
uuid: string;
data: T;
};
export type FileSystemRequestDirectoryPermissionsResult =
/**
* If the permissions were not granted.
*/
{
granted: false;
}
/**
* If the permissions were granted.
*/
| {
granted: true;
/**
* The [SAF URI](#saf-uri) to the user's selected directory. Available only if permissions were granted.
*/
directoryUri: string;
};
//# sourceMappingURL=FileSystem.types.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"FileSystem.types.d.ts","sourceRoot":"","sources":["../../src/legacy/FileSystem.types.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,3 @@
export * from './FileSystem';
export * from './FileSystem.types';
//# sourceMappingURL=index.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/legacy/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC"}

38
node_modules/expo-file-system/build/legacy/types.d.ts generated vendored Normal file
View File

@@ -0,0 +1,38 @@
import { NativeModule } from 'expo-modules-core';
import { DownloadProgressData, ProgressEvent, UploadProgressData } from './FileSystem.types';
type PlatformMethod = (...args: any[]) => Promise<any>;
/**
* @hidden
*/
export type FileSystemEvents = {
'expo-file-system.downloadProgress'(event: ProgressEvent<DownloadProgressData>): void;
'expo-file-system.uploadProgress'(event: ProgressEvent<UploadProgressData>): void;
};
export declare class ExponentFileSystemModule extends NativeModule<FileSystemEvents> {
readonly documentDirectory: string | null;
readonly cacheDirectory: string | null;
readonly bundleDirectory: string | null;
readonly getInfoAsync?: PlatformMethod;
readonly readAsStringAsync?: PlatformMethod;
readonly writeAsStringAsync?: PlatformMethod;
readonly deleteAsync?: PlatformMethod;
readonly moveAsync?: PlatformMethod;
readonly copyAsync?: PlatformMethod;
readonly makeDirectoryAsync?: PlatformMethod;
readonly readDirectoryAsync?: PlatformMethod;
readonly downloadAsync?: PlatformMethod;
readonly uploadAsync?: PlatformMethod;
readonly downloadResumableStartAsync?: PlatformMethod;
readonly downloadResumablePauseAsync?: PlatformMethod;
readonly getContentUriAsync?: PlatformMethod;
readonly getFreeDiskStorageAsync?: PlatformMethod;
readonly getTotalDiskCapacityAsync?: PlatformMethod;
readonly requestDirectoryPermissionsAsync?: PlatformMethod;
readonly readSAFDirectoryAsync?: PlatformMethod;
readonly makeSAFDirectoryAsync?: PlatformMethod;
readonly createSAFFileAsync?: PlatformMethod;
readonly networkTaskCancelAsync?: PlatformMethod;
readonly uploadTaskStartAsync?: PlatformMethod;
}
export {};
//# sourceMappingURL=types.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/legacy/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAE7F,KAAK,cAAc,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAEvD;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,mCAAmC,CAAC,KAAK,EAAE,aAAa,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC;IACtF,iCAAiC,CAAC,KAAK,EAAE,aAAa,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC;CACnF,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,wBAAyB,SAAQ,YAAY,CAAC,gBAAgB,CAAC;IAClF,QAAQ,CAAC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1C,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,YAAY,CAAC,EAAE,cAAc,CAAC;IACvC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,cAAc,CAAC;IAC5C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,cAAc,CAAC;IAC7C,QAAQ,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC;IACtC,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC;IACpC,QAAQ,CAAC,SAAS,CAAC,EAAE,cAAc,CAAC;IACpC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,cAAc,CAAC;IAC7C,QAAQ,CAAC,kBAAkB,CAAC,EAAE,cAAc,CAAC;IAC7C,QAAQ,CAAC,aAAa,CAAC,EAAE,cAAc,CAAC;IACxC,QAAQ,CAAC,WAAW,CAAC,EAAE,cAAc,CAAC;IACtC,QAAQ,CAAC,2BAA2B,CAAC,EAAE,cAAc,CAAC;IACtD,QAAQ,CAAC,2BAA2B,CAAC,EAAE,cAAc,CAAC;IACtD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,cAAc,CAAC;IAC7C,QAAQ,CAAC,uBAAuB,CAAC,EAAE,cAAc,CAAC;IAClD,QAAQ,CAAC,yBAAyB,CAAC,EAAE,cAAc,CAAC;IACpD,QAAQ,CAAC,gCAAgC,CAAC,EAAE,cAAc,CAAC;IAC3D,QAAQ,CAAC,qBAAqB,CAAC,EAAE,cAAc,CAAC;IAChD,QAAQ,CAAC,qBAAqB,CAAC,EAAE,cAAc,CAAC;IAChD,QAAQ,CAAC,kBAAkB,CAAC,EAAE,cAAc,CAAC;IAC7C,QAAQ,CAAC,sBAAsB,CAAC,EAAE,cAAc,CAAC;IACjD,QAAQ,CAAC,oBAAoB,CAAC,EAAE,cAAc,CAAC;CAChD"}