use-fs
Version:
A React hook for integrating with the File System Access API. Enables web applications to seamlessly work with files on a user's local system.
70 lines (67 loc) • 3.5 kB
TypeScript
import * as react from 'react';
type FileWriteOptions = {
/** Whether to create the file if it doesn't exist */
create?: boolean;
/** Whether to truncate the file if it exists */
truncate?: boolean;
};
type FileOperations = {
/** Write data to a file at the specified path */
writeFile: (path: string, data: string | ArrayBuffer | Blob, options?: FileWriteOptions) => Promise<void>;
/** Create a new file at the specified path */
createFile: (path: string, initialData?: string | ArrayBuffer | Blob) => Promise<FileSystemFileHandle>;
/** Delete a file at the specified path */
deleteFile: (path: string) => Promise<void>;
};
type Filter = {
shouldIncludeFile: (filepath: string, handle: FileSystemHandle) => Promise<boolean>;
shouldProcessDirectory: (filepath: string, handle: FileSystemHandle) => Promise<boolean>;
};
type FilterFn = () => Promise<Filter>;
declare const gitFilter: FilterFn;
declare const distFilter: FilterFn;
declare const miscFilter: FilterFn;
declare const commonFilters: FilterFn[];
declare const processDirectory: (directoryHandle: FileSystemDirectoryHandle, directoryPath: string, filters: Filter[], includeFiles: Map<string, FileSystemFileHandle>, ignoreFilePaths: Set<string>) => Promise<Map<string, FileSystemFileHandle>>;
interface UseFileHandlingHookProps {
filters?: FilterFn[];
onFilesAdded?: (newFiles: Map<string, string>, previousFiles: Map<string, string>) => void;
onFilesChanged?: (changedFiles: Map<string, string>, previousFiles: Map<string, string>) => void;
onFilesDeleted?: (deletedFiles: Map<string, string>, previousFiles: Map<string, string>) => void;
pollInterval?: number;
batchSize?: number;
debounceInterval?: number;
/** Time in milliseconds to cache file contents before re-reading from disk. Defaults to 5000ms (5 seconds) */
fileCacheTtl?: number;
}
declare const useFileSystem: (props: UseFileHandlingHookProps) => {
handles: Map<string, FileSystemFileHandle>;
onDirectorySelection: () => Promise<void>;
onClear: () => void;
files: Map<string, string>;
setFiles: react.Dispatch<react.SetStateAction<Map<string, string>>>;
isProcessing: boolean;
isBrowserSupported: boolean;
writeFile: (path: string, data: string | ArrayBuffer | Blob, options?: FileWriteOptions) => Promise<void>;
createFile: (path: string, initialData?: string | ArrayBuffer | Blob) => Promise<FileSystemFileHandle>;
deleteFile: (path: string) => Promise<void>;
stopPolling: () => void;
startPolling: () => void;
isPolling: boolean;
};
declare const useFs: (props: UseFileHandlingHookProps) => {
handles: Map<string, FileSystemFileHandle>;
onDirectorySelection: () => Promise<void>;
onClear: () => void;
files: Map<string, string>;
setFiles: react.Dispatch<react.SetStateAction<Map<string, string>>>;
isProcessing: boolean;
isBrowserSupported: boolean;
writeFile: (path: string, data: string | ArrayBuffer | Blob, options?: FileWriteOptions) => Promise<void>;
createFile: (path: string, initialData?: string | ArrayBuffer | Blob) => Promise<FileSystemFileHandle>;
deleteFile: (path: string) => Promise<void>;
stopPolling: () => void;
startPolling: () => void;
isPolling: boolean;
};
export { type FileOperations, type FileWriteOptions, type Filter, type FilterFn, type UseFileHandlingHookProps, commonFilters, distFilter, gitFilter, miscFilter, processDirectory, useFileSystem, useFs };