libmount
Version:
Standalone FAT12, FAT16, FAT32, VFAT implementation in JavaScript
296 lines (260 loc) • 8.48 kB
text/typescript
/**
* Declaration file for the npm module "libmount".
*
* This module provides TypeScript declarations for interacting with the "libmount" library,
*
* @remarks
* The "libmount" library typically includes functionality for mounting and unmounting filesystems,
* managing mount points, and querying mounted filesystems.
*
* @see {@link https://www.npmjs.com/package/libmount}
*/
declare module "libmount" {
/**
* Mount a raw image.
*
* @param img A Raw image.
* @param options Mount options.
* @returns A mounted disk.
*/
export function mount(img: Uint8Array, options?: MountOptions): Disk;
/**
* Represents the mount options.
*/
export type MountOptions = {
/**
* The codepage used to decode and encode FAT short names. Default codepage is cp1252.
*/
codepage?: Codepage;
/**
* Disk partition to mount.
*/
partition?: Partition;
};
/**
* Represents a codepage.
*/
export interface Codepage {
/**
* Decodes an array of single-byte characters into a string.
*/
decode(array: Uint8Array): string;
/**
* Encodes a string into an array of single-byte characters.
*/
encode(text: string, defaultCharCode?: number): Uint8Array;
/**
* Convert a wide character code to a single-byte character code if possible.
*/
encodeChar(wcCode: number): number | null;
}
/**
* Represents a disk.
*/
export interface Disk {
/**
* Retrieves the file system associated with the disk if detected.
* Returning null may indicate the disk is either empty, partitioned, or lacks a known file system.
* @returns The file system object if available.
*/
getFileSystem(): FileSystem | null;
/**
* Retrieves an array of MBR partitions on the disk.
* The array may be empty if the disk has no partitions (e.g., like a floppy disk, or empty disk).
* @returns An array of MBR partitions.
*/
getPartitions(): Partition[];
}
/**
* Represents a file system.
*/
export interface FileSystem {
/**
* Retrieves the name of the file system.
* @returns The name of the file system (e.g. FAT12, FAT16, FAT32).
*/
getName(): string;
/**
* Retrieves volume information associated with the file system.
* @returns Volume.
*/
getVolume(): Volume;
/**
* Retrieves the root directory of the file system.
* @returns The root directory file object.
*/
getRoot(): File;
}
/**
* Represents a file or directory in a file system.
*/
export interface File {
/**
* Retrieves the name of the file.
* @returns The name of the file.
*/
getName(): string;
/**
* Retrieves the short name (8.3 format) of the file.
* @returns The short name of the file.
*/
getShortName(): string;
/**
* Retrieves the absolute path of the file.
* @returns The absolute path of the file.
*/
getAbsolutePath(): string;
/**
* Checks if the file is a regular file.
* @returns True if the file is a regular file (not a directory), otherwise false.
*/
isRegularFile(): boolean;
/**
* Checks if the file is a directory.
* @returns True if the file is a directory (or the root directory), otherwise false.
*/
isDirectory(): boolean;
/**
* Retrieves the size of the file or the total size of all files in a directory.
* @returns The file or directory size in bytes.
*/
length(): number;
/**
* Retrieves the size on disk of the current file object.
* @returns The file object size in bytes.
*/
getSizeOnDisk(): number;
/**
* Retrieves the last modified timestamp of the file.
* @returns The last modified timestamp of the file.
*/
lastModified(): Date | null;
/**
* Retrieves the creation timestamp of the file.
* @returns The creation timestamp of the file.
*/
creationTime(): Date | null;
/**
* Retrieves the last access timestamp of the file.
* @returns The last access timestamp of the file.
*/
lastAccessTime(): Date | null;
/**
* Finds the first file matching the given predicate.
* @param predicate The predicate function.
* @returns The first file matching the predicate, or null if not a directory or nothing found.
*/
findFirst(predicate: (file: File) => boolean): File | null;
/**
* Finds all files matching the given predicate.
* @param predicate The predicate function.
* @returns An array of files matching the predicate or null if not a directory.
*/
findAll(predicate: (file: File) => boolean): File[] | null;
/**
* Lists all files in the directory.
* @returns An array of files in the directory, or null if not a directory.
*/
listFiles(): File[] | null;
/**
* Retrieves the data content of the file.
* @returns The data content of the file, or null if not a regular file.
*/
getData(): Uint8Array | null;
/**
* Set the content to the current file.
* @param data File content.
* @returns This file if success, null otherwise.
*/
setData(data: Uint8Array): File | null;
/**
* Deletes the file or directory recursive. After deletion, this file becomes unusable.
* Deleting the root directory deletes all files recursive.
*/
delete(): void;
/**
* Retrieves a file object given its path relative to the current file.
* @param path The path to the file.
* @returns The File located at the specified path, otherwise null.
*/
getFile(relativePath: string): File | null;
/**
* Creates a file at the specified path, including any necessary parent directories.
* If the file already exists, returns the existing file.
*
* @param relativePath Relative path where the file should be created.
* @returns The file located at the specified path if successfully created or already exists, otherwise null.
*/
makeFile(relativePath: string): File | null;
/**
* Creates a directory at the specified path, including any necessary parent directories.
* If the directory already exists, returns the existing directory.
*
* @param relativePath Relative path where the directory should be created.
* @returns The file located at the specified path if successfully created or already exists, otherwise null.
*/
makeDir(relativePath: string): File | null;
/**
* Moves the current file to the destination path, creating any necessary parent directories.
* - If `dest` points to an existing directory, the current file is moved into that directory.
* - If `dest` does not exist, the current file is renamed to `dest`.
* Root directory cannot be moved or renamed.
* @param dest Absolute or relative to the current file path where the current file should be moved or renamed to.
* @returns The new file object at the destination path if successfully moved or renamed, otherwise null.
*/
moveTo(dest: string): File | null;
}
/**
* Represents a file system volume
*/
export interface Volume {
/**
* The volume label.
*/
getLabel(): string | null;
setLabel(label: string | null): void;
/**
* OEM Name Identifier. Typically this is some indication of what system formatted the volume.
*/
getOEMName(): string | null;
setOEMName(oemName: string | null): void;
/**
* The volume serial number.
*/
getId(): number;
setId(id: number): void;
/**
* The size of a cluster on the volume in bytes.
*/
getSizeOfCluster(): number;
/**
* Total count of clusters on the volume.
*/
getCountOfClusters(): number;
/**
* Number of free clusters available for allocation.
*/
getFreeClusters(): number;
}
/**
* Represents the disk partition information.
*/
export type Partition = {
/**
* Flag indicating whether the partition is active.
*/
active: boolean;
/**
* Partition Type (e.g. 0xE for FAT).
*/
type: number;
/**
* Offset (in bytes) from the beginning of the disk to the start of the partition.
*/
begin: number;
/**
* Offset (in bytes) from the beginning of the disk to the end of the partition.
*/
end: number;
};
}