@zenfs/core
Version:
A filesystem, anywhere
85 lines (84 loc) • 2.51 kB
TypeScript
import type { Bound } from 'utilium';
import type * as fs from '../node/index.js';
import type * as path from '../path.js';
import type { Handle } from '../vfs/file.js';
import type * as xattr from '../vfs/xattr.js';
import type { Credentials, CredentialsInit } from './credentials.js';
/**
* Symbol used for context branding
* @internal @hidden
*/
declare const kIsContext: unique symbol;
/**
* A context used for FS operations
* @category Contexts
*/
export interface FSContext {
/** The unique ID of the context */
readonly [kIsContext]: boolean;
/** The unique ID of the context */
readonly id: number;
/**
* The absolute root path of the context
*
* Note the parent's root is not considered
*/
root: string;
/** The current working directory of the context */
pwd: string;
/** The credentials of the context, used for access checks */
readonly credentials: Credentials;
/** A map of open file descriptors to their handles */
readonly descriptors: Map<number, Handle>;
/** The parent context, if any. */
readonly parent: FSContext | null;
/** The child contexts */
readonly children: FSContext[];
}
/**
* maybe an FS context
*/
export type V_Context = unknown;
/**
* Allows you to restrict operations to a specific root path and set of credentials.
* @category Contexts
*/
export interface BoundContext extends FSContext {
fs: Bound<typeof fs, FSContext> & {
promises: Bound<typeof fs.promises, FSContext>;
xattr: Bound<typeof xattr, FSContext>;
};
/** Path functions, bound to the context */
path: Bound<typeof path, FSContext>;
/** Creates a new child context with this context as the parent */
bind(init: ContextInit): BoundContext;
/** The parent context, if any. */
parent: FSContext;
}
/**
* @category Contexts
*/
export interface ContextInit {
root?: string;
pwd?: string;
credentials?: CredentialsInit;
}
/**
* The default/global context.
* @internal @hidden
* @category Contexts
*/
export declare const defaultContext: FSContext;
export declare function contextOf($: unknown): FSContext;
/**
* Create a blank FS Context
* @internal
* @category Contexts
* @todo Make sure parent root can't be escaped
*
* This exists so that `kIsContext` is not exported and to make sure the context is "secure".
*/
export declare function createChildContext(parent: FSContext, init?: ContextInit): FSContext & {
parent: FSContext;
};
export {};