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" />

151 lines (150 loc) 5.34 kB
import { default as Stats } from '../core/node_fs_stats'; import { UNPKGMeta } from '../backend/UNPKGRequest'; import { JSDelivrMeta } from '../backend/JSDelivrRequest'; /** * A simple class for storing a filesystem index. Assumes that all paths passed * to it are *absolute* paths. * * Can be used as a partial or a full index, although care must be taken if used * for the former purpose, especially when directories are concerned. */ export declare class FileIndex<T> { /** * Static method for constructing indices from a JSON listing. * @param listing Directory listing generated by tools/XHRIndexer.coffee * @return A new FileIndex object. */ static fromListing<T>(listing: any): FileIndex<T>; static fromUnpkg<T>(listing: UNPKGMeta): FileIndex<T>; static fromJSDelivr<T>(listing: JSDelivrMeta): FileIndex<T>; private _index; /** * Constructs a new FileIndex. */ constructor(); /** * Runs the given function over all files in the index. */ fileIterator<T>(cb: (file: T | null, path?: string) => void): void; /** * Adds the given absolute path to the index if it is not already in the index. * Creates any needed parent directories. * @param path The path to add to the index. * @param inode The inode for the * path to add. * @return 'True' if it was added or already exists, 'false' if there * was an issue adding it (e.g. item in path is a file, item exists but is * different). * @todo If adding fails and implicitly creates directories, we do not clean up * the new empty directories. */ addPath(path: string, inode: Inode): boolean; /** * Adds the given absolute path to the index if it is not already in the index. * The path is added without special treatment (no joining of adjacent separators, etc). * Creates any needed parent directories. * @param path The path to add to the index. * @param inode The inode for the * path to add. * @return 'True' if it was added or already exists, 'false' if there * was an issue adding it (e.g. item in path is a file, item exists but is * different). * @todo If adding fails and implicitly creates directories, we do not clean up * the new empty directories. */ addPathFast(path: string, inode: Inode): boolean; /** * Removes the given path. Can be a file or a directory. * @return The removed item, * or null if it did not exist. */ removePath(path: string): Inode | null; /** * Retrieves the directory listing of the given path. * @return An array of files in the given path, or 'null' if it does not exist. */ ls(path: string): string[] | null; /** * Returns the inode of the given item. * @return Returns null if the item does not exist. */ getInode(path: string): Inode | null; /** * Split into a (directory path, item name) pair */ private _split_path; } /** * Generic interface for file/directory inodes. * Note that Stats objects are what we use for file inodes. */ export interface Inode { isFile(): boolean; isDir(): boolean; } /** * Inode for a file. Stores an arbitrary (filesystem-specific) data payload. */ export declare class FileInode<T> implements Inode { private data; constructor(data: T); isFile(): boolean; isDir(): boolean; getData(): T; setData(data: T): void; } /** * Inode for a directory. Currently only contains the directory listing. */ export declare class DirInode<T> implements Inode { private data; private _ls; /** * Constructs an inode for a directory. */ constructor(data?: T | null); isFile(): boolean; isDir(): boolean; getData(): T | null; /** * Return a Stats object for this inode. * @todo Should probably remove this at some point. This isn't the * responsibility of the FileIndex. */ getStats(): Stats; /** * Returns the directory listing for this directory. Paths in the directory are * relative to the directory's path. * @return The directory listing for this directory. */ getListing(): string[]; /** * Returns the inode for the indicated item, or null if it does not exist. * @param p Name of item in this directory. */ getItem(p: string): Inode | null; /** * Add the given item to the directory listing. Note that the given inode is * not copied, and will be mutated by the DirInode if it is a DirInode. * @param p Item name to add to the directory listing. * @param inode The inode for the * item to add to the directory inode. * @return True if it was added, false if it already existed. */ addItem(p: string, inode: Inode): boolean; /** * Removes the given item from the directory listing. * @param p Name of item to remove from the directory listing. * @return Returns the item * removed, or null if the item did not exist. */ remItem(p: string): Inode | null; } /** * @hidden */ export declare function isFileInode<T>(inode: Inode | null): inode is FileInode<T>; /** * @hidden */ export declare function isDirInode<T>(inode: Inode | null): inode is DirInode<T>;