UNPKG

@codesandbox/sandpack-client

Version:

<img style="width:100%" src="https://user-images.githubusercontent.com/4838076/143581035-ebee5ba2-9cb1-4fe8-a05b-2f44bd69bb4b.gif" alt="Component toolkit for live running code editing experiences" />

110 lines (109 loc) 3.91 kB
import { FileSystem, BaseFileSystem, BFSOneArgCallback, BFSCallback, FileSystemOptions } from '../core/file_system'; import { ApiError } from '../core/api_error'; /** * Configuration options for the MountableFileSystem backend. */ export interface MountableFileSystemOptions { [mountPoint: string]: FileSystem; } /** * The MountableFileSystem allows you to mount multiple backend types or * multiple instantiations of the same backend into a single file system tree. * The file systems do not need to know about each other; all interactions are * automatically facilitated through this interface. * * For example, if a file system is mounted at /mnt/blah, and a request came in * for /mnt/blah/foo.txt, the file system would see a request for /foo.txt. * * You can mount file systems when you configure the file system: * ```javascript * BrowserFS.configure({ * fs: "MountableFileSystem", * options: { * '/data': { fs: 'HTTPRequest', options: { index: "http://mysite.com/files/index.json" } }, * '/home': { fs: 'LocalStorage' } * } * }, function(e) { * * }); * ``` * * For advanced users, you can also mount file systems *after* MFS is constructed: * ```javascript * BrowserFS.FileSystem.HTTPRequest.Create({ * index: "http://mysite.com/files/index.json" * }, function(e, xhrfs) { * BrowserFS.FileSystem.MountableFileSystem.Create({ * '/data': xhrfs * }, function(e, mfs) { * BrowserFS.initialize(mfs); * * // Added after-the-fact... * BrowserFS.FileSystem.LocalStorage.Create(function(e, lsfs) { * mfs.mount('/home', lsfs); * }); * }); * }); * ``` * * Since MountableFileSystem simply proxies requests to mounted file systems, it supports all of the operations that the mounted file systems support. * * With no mounted file systems, `MountableFileSystem` acts as a simple `InMemory` filesystem. */ export default class MountableFileSystem extends BaseFileSystem implements FileSystem { static readonly Name = "MountableFileSystem"; static readonly Options: FileSystemOptions; /** * Creates a MountableFileSystem instance with the given options. */ static Create(opts: MountableFileSystemOptions, cb: BFSCallback<MountableFileSystem>): void; static isAvailable(): boolean; private mntMap; private mountList; private rootFs; /** * Creates a new, empty MountableFileSystem. */ private constructor(); /** * Mounts the file system at the given mount point. */ mount(mountPoint: string, fs: FileSystem): void; umount(mountPoint: string): void; /** * Returns the file system that the path points to. */ _getFs(path: string): { fs: FileSystem; path: string; mountPoint: string; }; getName(): string; diskSpace(path: string, cb: (total: number, free: number) => void): void; isReadOnly(): boolean; supportsLinks(): boolean; supportsProps(): boolean; supportsSynch(): boolean; /** * Fixes up error messages so they mention the mounted file location relative * to the MFS root, not to the particular FS's root. * Mutates the input error, and returns it. */ standardizeError(err: ApiError, path: string, realPath: string): ApiError; rename(oldPath: string, newPath: string, cb: BFSOneArgCallback): void; renameSync(oldPath: string, newPath: string): void; readdirSync(p: string): string[]; readdir(p: string, cb: BFSCallback<string[]>): void; realpathSync(p: string, cache: { [path: string]: string; }): string; realpath(p: string, cache: { [path: string]: string; }, cb: BFSCallback<string>): void; rmdirSync(p: string): void; rmdir(p: string, cb: BFSOneArgCallback): void; /** * Returns true if the given path contains a mount point. */ private _containsMountPt; }