expo-file-system
Version:
Provides access to the local file system on the device.
310 lines • 12.7 kB
TypeScript
import type { SharedObject } from 'expo-modules-core';
import type { Directory as PublicDirectory } from '../Directory';
import type { DirectoryCreateOptions, DirectoryInfo } from '../Directory.types';
import type { File as PublicFile } from '../File';
import type { FileCreateOptions, FileHandle, FileInfo, FileMode, FileWriteOptions, InfoOptions, PickMultipleFilesOptions, PickMultipleFilesResult, PickSingleFileOptions, PickSingleFileResult, RelocationOptions } from '../File.types';
import type { WatchEvent, WatchEventType, WatchOptions, WatchSubscription } from '../FileSystemWatcher.types';
import type { DownloadTask, UploadTask } from '../NetworkTasks';
import type { DownloadOptions, DownloadProgress, DownloadTaskOptions, UploadOptions, UploadProgress, UploadResult } from '../NetworkTasks.types';
export declare class NativeFileSystemDirectory {
/**
* Creates an instance of a directory.
* @param uris An array of: `file:///` string URIs, `File` instances, `Directory` instances representing an arbitrary location on the file system. The location does not need to exist, or it may already contain a file.
* @example
* ```ts
* const directory = new Directory("file:///path/to/directory");
* ```
*/
constructor(...uris: (string | PublicFile | PublicDirectory)[]);
/**
* Represents the directory URI. The field is read-only, but it may change as a result of calling some methods such as `move`.
*/
readonly uri: string;
/**
* Validates a directory path.
* @hidden This method is not meant to be used directly. It is called by the JS constructor.
*/
validatePath(): void;
/**
* Deletes a directory. Also deletes all files and directories inside the directory.
*
* @throws Error if the directory does not exist or cannot be deleted.
*/
delete(): void;
/**
* A boolean representing if a directory exists and can be accessed.
*/
exists: boolean;
/**
* Creates a directory that the current uri points to.
*
* @throws Error if the containing folder doesn't exist, the application has no read access to it or the directory (or a file with the same path) already exists (unless `idempotent` is `true`).
*/
create(options?: DirectoryCreateOptions): void;
createFile(name: string, mimeType: string | null): PublicFile;
createDirectory(name: string): PublicDirectory;
/**
* Watches this directory for changes to its contents.
*/
watch(callback: (event: WatchEvent<PublicFile | PublicDirectory>) => void, options?: WatchOptions): WatchSubscription;
/**
* Copies a directory.
*/
copy(destination: PublicDirectory | PublicFile, options?: RelocationOptions): Promise<void>;
/**
* Copies a directory synchronously.
*/
copySync(destination: PublicDirectory | PublicFile, options?: RelocationOptions): void;
/**
* Moves a directory. Updates the `uri` property that now points to the new location.
*/
move(destination: PublicDirectory | PublicFile, options?: RelocationOptions): Promise<void>;
/**
* Moves a directory synchronously. Updates the `uri` property that now points to the new location.
*/
moveSync(destination: PublicDirectory | PublicFile, options?: RelocationOptions): void;
/**
* Renames a directory.
*/
rename(newName: string): void;
/**
* @hidden
* Lists the contents of a directory. Should not be used directly, as it returns a list of paths.
* This function is internal and will be removed in the future (when returning arrays of shared objects is supported).
*/
listAsRecords(): {
isDirectory: boolean;
uri: string;
}[];
/**
* Lists the contents of a directory.
*/
list(): (PublicDirectory | PublicFile)[];
/**
* Retrieves an object containing properties of a directory.
*
* @throws Error If the application does not have read access to the directory, or if the path does not point to a directory (e.g., it points to a file).
*
* @returns An object with directory metadata (for example, size, creation date, and so on).
*/
info(): DirectoryInfo;
/**
* A size of the directory in bytes. Null if the directory does not exist, or it cannot be read.
*/
size: number | null;
/**
* A static method that opens a file picker to select a directory.
*
* On iOS, the selected directory grants temporary read and write access for the current app session only. After the app restarts, you must prompt the user again to regain access.
*
* @param initialUri An optional uri pointing to an initial folder on which the directory picker is opened.
* @returns a `Directory` instance. On Android, the underlying uri will be a content URI.
*/
static pickDirectoryAsync(initialUri?: string): Promise<PublicDirectory>;
}
export declare class NativeFileSystemFile {
/**
* Creates an instance of File.
*
* @param uris A `file:///` URI representing an arbitrary location on the file system. The location does not need to exist, or it may already contain a directory.
*/
constructor(...uris: (string | PublicFile | PublicDirectory)[]);
/**
* Represents the file URI. The field is read-only, but it may change as a result of calling some methods such as `move`.
*/
get uri(): string;
/**
* @hidden This method is not meant to be used directly. It is called by the JS constructor.
* Validates a directory path.
*/
validatePath(): void;
/**
* Retrieves text from the file.
* @returns A promise that resolves to the contents of the file as string.
*/
text(): Promise<string>;
/**
* Retrieves text from the file.
* @returns The contents of the file as string.
*/
textSync(): string;
/**
* Retrieves content of the file as base64.
* @returns A promise that resolves to the contents of the file as a base64 string.
*/
base64(): Promise<string>;
/**
* Retrieves content of the file as base64.
* @returns The contents of the file as a base64 string.
*/
base64Sync(): string;
/**
* Retrieves byte content of the entire file.
* @returns A promise that resolves to the contents of the file as a `Uint8Array`.
*/
bytes(): Promise<Uint8Array<ArrayBuffer>>;
/**
* Retrieves byte content of the entire file.
* @returns The contents of the file as a `Uint8Array`.
*/
bytesSync(): Uint8Array;
/**
* Writes content to the file.
* @param content The content to write into the file.
*/
write(content: string | Uint8Array, options?: FileWriteOptions): void;
/**
* Deletes a file.
*
* @throws Error if the directory does not exist or cannot be deleted.
*/
delete(): void;
/**
* Retrieves an object containing properties of a file
* @throws Error If the application does not have read access to the file, or if the path does not point to a file (for example, it points to a directory).
* @returns An object with file metadata (for example, size, creation date, and so on).
*/
info(options?: InfoOptions): FileInfo;
/**
* A boolean representing if a file exists. `true` if the file exists, `false` otherwise.
* Also, `false` if the application does not have read access to the file.
*/
exists: boolean;
/**
* Creates a file.
*
* @throws Error if the containing folder doesn't exist, the application has no read access to it or the file (or directory with the same path) already exists.
*/
create(options?: FileCreateOptions): void;
/**
* Copies a file.
*/
copy(destination: PublicDirectory | PublicFile, options?: RelocationOptions): Promise<void>;
/**
* Copies a file synchronously.
*/
copySync(destination: PublicDirectory | PublicFile, options?: RelocationOptions): void;
/**
* Moves a directory. Updates the `uri` property that now points to the new location.
*/
move(destination: PublicDirectory | PublicFile, options?: RelocationOptions): Promise<void>;
/**
* Moves a file synchronously. Updates the `uri` property that now points to the new location.
*/
moveSync(destination: PublicDirectory | PublicFile, options?: RelocationOptions): void;
/**
* Renames a file.
*/
rename(newName: string): void;
/**
* Returns A `FileHandle` object that can be used to read and write data to the file.
*
* @param mode - The {@link FileMode} to use.
* - On **Android**, SAF `content://` URIs do not support `ReadWrite` mode.
* - **Defaults**:
* - For SAF `content://` URIs, the default is `FileMode.ReadOnly`.
* - For standard `file://` URIs, the default is `FileMode.ReadWrite`.
*
* @throws Error if the file does not exist or cannot be opened.
*/
open(mode?: FileMode): FileHandle;
upload(url: string, options?: UploadOptions): Promise<UploadResult>;
createUploadTask(url: string, options?: UploadOptions): UploadTask;
watch(callback: (event: WatchEvent<PublicFile>) => void, options?: WatchOptions): WatchSubscription;
static downloadFileAsync(url: string, destination: PublicDirectory | PublicFile, options?: DownloadOptions): Promise<PublicFile>;
static pickFileAsync(options?: PickSingleFileOptions): Promise<PickSingleFileResult>;
static pickFileAsync(options?: PickMultipleFilesOptions): Promise<PickMultipleFilesResult>;
static pickFileAsync(initialUri?: string, mimeType?: string): Promise<PublicFile | PublicFile[]>;
static createDownloadTask(url: string, destination: PublicDirectory | PublicFile, options?: DownloadTaskOptions): DownloadTask;
/**
* A size of the file in bytes. 0 if the file does not exist, or it cannot be read.
*/
size: number;
/**
* A md5 hash of the file. Null if the file does not exist, or it cannot be read.
*/
md5: string | null;
/**
* A last modification time of the file expressed in milliseconds since the epoch. Returns a `null` if the file does not exist, or if it cannot be read.
* @deprecated In favor of `lastModified` to be more in line with web [`File`](https://developer.mozilla.org/en-US/docs/Web/API/File)
*/
modificationTime: number | null;
/**
* A last modification time of the file expressed in milliseconds since the epoch. Returns a `null` if the file does not exist, or if it cannot be read.
*/
lastModified: number | null;
/**
* A creation time of the file expressed in milliseconds since the epoch. Returns a `null` if the file does not exist, cannot be read or the Android version is earlier than API 26.
*/
creationTime: number | null;
/**
* A mime type of the file. An empty string if the file does not exist, or it cannot be read.
*/
type: string;
/**
* A content URI to the file that can be shared to external applications.
* @platform android
*/
contentUri: string;
}
type UploadTaskEvents = {
progress: (data: UploadProgress) => void;
};
type DownloadTaskEvents = {
progress: (data: DownloadProgress) => void;
};
/**
* @hidden
*/
export declare class FileSystemUploadTask extends SharedObject<UploadTaskEvents> {
/**
* @hidden
*/
start(url: string, file: PublicFile, options: Record<string, any>): Promise<UploadResult>;
/**
* @hidden
*/
cancel(): void;
}
/**
* @hidden
*/
export declare class FileSystemDownloadTask extends SharedObject<DownloadTaskEvents> {
/**
* @hidden
*/
start(url: string, to: PublicFile | PublicDirectory, options?: Record<string, any>): Promise<string | null>;
/**
* @hidden
*/
pause(): any;
/**
* @hidden
*/
resume(url: string, to: PublicFile | PublicDirectory, resumeData: string, options?: Record<string, any>): Promise<string | null>;
/**
* @hidden
*/
cancel(): void;
}
export type NativeFileSystemWatcherEvent = {
type: WatchEventType;
path: string;
isDirectory: boolean;
nativeEventFlags?: number;
newPath?: string;
newPathIsDirectory?: boolean;
};
type FileSystemWatcherEvents = {
change: (event: NativeFileSystemWatcherEvent) => void;
};
/**
* @hidden
*/
export declare class NativeFileSystemWatcher extends SharedObject<FileSystemWatcherEvents> {
constructor(path: string, options?: WatchOptions);
start(): void;
stop(): void;
}
export {};
//# sourceMappingURL=NativeFileSystem.types.d.ts.map