Options
All
  • Public
  • Public/Protected
  • All
Menu

Package yarnpkg-fslib

@yarnpkg/fslib

A TypeScript library abstracting the Node filesystem APIs. We use it for three main reasons:

Type-safe paths

Our library has two path types, NativePath and PortablePath. Most interfaces only accept the later, and instances of the former need to be transformed back and forth using our type-safe utilities before being usable.

Custom filesystems

The FSLib implements various transparent filesystem layers for a variety of purposes. For instance we use it in Yarn in order to abstract away the zip archive manipulation logic, which is implemented in ZipFS and exposed through a Node-like interface (called FakeFS).

All FakeFS implementations can be transparently layered on top of the builtin Node fs module, and that's for instance how we can add support for in-zip package loading without you having to care about the exact package format.

Promisified API

All methods from the FakeFS interface are promisified by default (and suffixed for greater clarity, for instance we offer both readFileSync and readFilePromise).

Enumerations

Classes

Interfaces

Type aliases

Variables

Functions

Object literals

Type aliases

AliasFSOptions

AliasFSOptions<P>: object

Type parameters

Type declaration

BigIntStats

BigIntStats: NodeBigIntStats & object

BufferEncodingOrBuffer

BufferEncodingOrBuffer: BufferEncoding | "buffer"

ChangeFileOptions

ChangeFileOptions: Partial<object>

CopyOptions

CopyOptions<P>: object

Type parameters

  • P

Type declaration

  • linkStrategy: LinkStrategy<P> | null
  • overwrite: boolean
  • stableSort: boolean
  • stableTime: boolean

CreateReadStreamOptions

CreateReadStreamOptions: Partial<object>

CreateWriteStreamOptions

CreateWriteStreamOptions: Partial<object>

CustomDirOptions

CustomDirOptions: object

Type declaration

  • Optional onClose?: undefined | function

CustomStatWatcherOptions

CustomStatWatcherOptions: object

Type declaration

  • Optional bigint?: undefined | false | true

CwdFSOptions

CwdFSOptions: object

Type declaration

Dir

Dir<P>: object

Type parameters

Type declaration

Dirent

Dirent: Exclude<NodeDirent, "name"> & object

ExtractHintOptions

ExtractHintOptions: object

Type declaration

  • relevantExtensions: Set<string>

FSPath

FSPath<T>: T | number

Type parameters

Filename

Filename: string & object

GetMountPointFn

GetMountPointFn: function

Type declaration

HardlinkFromIndexStrategy

HardlinkFromIndexStrategy<P>: object

Type parameters

  • P

Type declaration

  • Optional autoRepair?: undefined | false | true
  • indexPath: P
  • Optional readOnly?: undefined | false | true
  • type: "HardlinkFromIndex"

InternalCopyOptions

InternalCopyOptions<P>: CopyOptions<P> & object

Type parameters

  • P

JailFSOptions

JailFSOptions: object

Type declaration

LUTimes

LUTimes<P>: Array<[]>

Type parameters

LazyFSFactory

LazyFSFactory<P>: function

Type parameters

Type declaration

LinkStrategy

LinkStrategy<P>: HardlinkFromIndexStrategy<P>

Type parameters

  • P

ListenerOptions

ListenerOptions: Omit<Required<WatchFileOptions>, "bigint">

MkdirOptions

MkdirOptions: Partial<object>

Mode

Mode: number | string

MountFSOptions

MountFSOptions<MountedFS>: object

Type parameters

Type declaration

  • Optional baseFs?: FakeFS<PortablePath>
  • factoryPromise: function
  • factorySync: function

    Functions used to create the sub-filesystem to use when accessing specific paths.

  • Optional filter?: RegExp | null
  • getMountPoint: GetMountPointFn

    A function that will be called to figure out the segment of a path that represents a mount point.

    It must return a strict prefix of the original path, or null if the path isn't part of a mount archive.

    It must return a strict prefix of the original path, or null if the path isn't part of a mount archive.

  • Optional magicByte?: undefined | number
  • Optional maxAge?: undefined | number

    Maximum age of the child filesystem, after which they will be discarded. Each new access resets this time.

    Only used if useCache is set to true.

    Only used if useCache is set to true.

  • Optional maxOpenFiles?: undefined | number
  • Optional typeCheck?: number | null
  • Optional useCache?: undefined | false | true

NativePath

NativePath: string & object

NoInfer

NoInfer<T>: [][T extends any ? 0 : never]

Type parameters

  • T

OpenMode

OpenMode: number | string

OpendirOptions

OpendirOptions: Partial<object>

Operations

Operations: Array<function>

Path

PortablePath

PortablePath: string & object

ReadArguments

ReadArguments: []

ReadArgumentsCallback

ReadArgumentsCallback: []

ReadArgumentsOptions

ReadArgumentsOptions: []

ReadCallback

ReadCallback: function

Type declaration

    • (err: ErrnoException | null, bytesRead: number, buffer: Buffer): void
    • Parameters

      • err: ErrnoException | null
      • bytesRead: number
      • buffer: Buffer

      Returns void

ReadOptions

ReadOptions: ReadSyncOptions & object

ReadSyncArguments

ReadSyncArguments: []

ReadSyncArgumentsOptions

ReadSyncArgumentsOptions: []

RmdirOptions

RmdirOptions: Partial<object>

StatWatcher

StatWatcher: EventEmitter & object

Stats

Stats: NodeStats & object

SymlinkType

SymlinkType: "file" | "dir" | "junction"

TolerateLiterals

TolerateLiterals<T>: object

Type parameters

  • T

Type declaration

ValidateLiteral

ValidateLiteral<T>: T extends `${X}` ? T : never

Type parameters

  • T

VirtualFSOptions

VirtualFSOptions: object

Type declaration

WatchCallback

WatchCallback: function

Type declaration

    • (eventType: string, filename: string): void
    • Parameters

      • eventType: string
      • filename: string

      Returns void

WatchFileCallback

WatchFileCallback: function

Type declaration

WatchFileOptions

WatchFileOptions: Partial<object>

WatchOptions

WatchOptions: Partial<object> | BufferEncodingOrBuffer

Watcher

Watcher: object

Type declaration

  • close: function
      • (): void
      • Returns void

  • on: any

WriteArgsBuffer

WriteArgsBuffer<TBuffer>: []

Type parameters

  • TBuffer: Uint8Array

WriteArgsString

WriteArgsString: []

WriteFileOptions

WriteFileOptions: Partial<object> | BufferEncoding

XFS

XFS: NodeFS & object

Variables

Const ASYNC_IMPLEMENTATIONS

ASYNC_IMPLEMENTATIONS: Set<string> = new Set([`accessPromise`,`appendFilePromise`,`fchmodPromise`,`chmodPromise`,`fchownPromise`,`chownPromise`,`closePromise`,`copyFilePromise`,`linkPromise`,`fstatPromise`,`lstatPromise`,`lutimesPromise`,`mkdirPromise`,`openPromise`,`opendirPromise`,`readdirPromise`,`realpathPromise`,`readFilePromise`,`readdirPromise`,`readlinkPromise`,`renamePromise`,`rmdirPromise`,`statPromise`,`symlinkPromise`,`truncatePromise`,`ftruncatePromise`,`unlinkPromise`,`utimesPromise`,`writeFilePromise`,`writeSync`,])

Const DEFAULT_MODE

DEFAULT_MODE: number = S_IFREG | 0o644

Const JAIL_ROOT

JAIL_ROOT: string & object = PortablePath.root

Const MOUNT_MASK

MOUNT_MASK: 4278190080 = 4278190080

Const NUMBER_REGEXP

NUMBER_REGEXP: RegExp = /^[0-9]+$/

Const PORTABLE_PATH_REGEXP

PORTABLE_PATH_REGEXP: RegExp = /^\/([a-zA-Z]:.*)$/

Const SAFE_TIME

SAFE_TIME: 456789000 = 456789000

Unix timestamp for 1984-06-22T21:50:00.000Z

It needs to be after 1980-01-01 because that's what Zip supports, and it needs to have a slight offset to account for different timezones (because zip assumes that all times are local to whoever writes the file, which is really silly).

It needs to be after 1980-01-01 because that's what Zip supports, and it needs to have a slight offset to account for different timezones (because zip assumes that all times are local to whoever writes the file, which is really silly).

Const SYNC_IMPLEMENTATIONS

SYNC_IMPLEMENTATIONS: Set<string> = new Set([`accessSync`,`appendFileSync`,`createReadStream`,`createWriteStream`,`chmodSync`,`fchmodSync`,`chownSync`,`fchownSync`,`closeSync`,`copyFileSync`,`linkSync`,`lstatSync`,`fstatSync`,`lutimesSync`,`mkdirSync`,`openSync`,`opendirSync`,`readlinkSync`,`readFileSync`,`readdirSync`,`readlinkSync`,`realpathSync`,`renameSync`,`rmdirSync`,`statSync`,`symlinkSync`,`truncateSync`,`ftruncateSync`,`unlinkSync`,`unwatchFile`,`utimesSync`,`watch`,`watchFile`,`writeFileSync`,`writeSync`,])

Const S_IFDIR

S_IFDIR: 16384 = 16384

Const S_IFLNK

S_IFLNK: 40960 = 40960

Const S_IFMT

S_IFMT: 61440 = 61440

Const S_IFREG

S_IFREG: 32768 = 32768

Const UNC_PORTABLE_PATH_REGEXP

UNC_PORTABLE_PATH_REGEXP: RegExp = /^\/unc\/(\.dot\/)?(.*)$/

Const UNC_WINDOWS_PATH_REGEXP

UNC_WINDOWS_PATH_REGEXP: RegExp = /^\/\/(\.\/)?(.*)$/

Const VALID_COMPONENT

VALID_COMPONENT: RegExp = /^([^/]+-)?[a-f0-9]+$/

Const VIRTUAL_REGEXP

VIRTUAL_REGEXP: RegExp = /^(\/(?:[^/]+\/)*?(?:\$\$virtual|__virtual__))((?:\/((?:[^/]+-)?[a-f0-9]+)(?:\/([^/]+))?)?((?:\/.*)?))$/

Const WINDOWS_PATH_REGEXP

WINDOWS_PATH_REGEXP: RegExp = /^([a-zA-Z]:.*)$/

Const defaultTime

defaultTime: Date = new Date(constants.SAFE_TIME * 1000)

Const defaultTimeMs

defaultTimeMs: number = defaultTime.getTime()

Const ifNotWin32It

ifNotWin32It: any = process.platform !== `win32` ? it : it.skip

Const ifNotWin32It

ifNotWin32It: any = process.platform !== `win32` ? it : it.skip

Const kBaseFs

kBaseFs: unique symbol = Symbol(`kBaseFs`)

Const kClosePromise

kClosePromise: unique symbol = Symbol(`kClosePromise`)

Const kCloseReject

kCloseReject: unique symbol = Symbol(`kCloseReject`)

Const kCloseResolve

kCloseResolve: unique symbol = Symbol(`kCloseResolve`)

Const kFd

kFd: unique symbol = Symbol(`kFd`)

Const kRef

kRef: unique symbol = Symbol(`kRef`)

Const kRefs

kRefs: unique symbol = Symbol(`kRefs`)

Const kUnref

kUnref: unique symbol = Symbol(`kUnref`)

Const nodeFs

nodeFs: NodeFS = new NodeFS()

Const npath

npath: PathUtils<NativePath> & ConvertUtils = Object.create(path) as any

Const ppath

ppath: PathUtils<PortablePath> & PortablePathGenerics = Object.create(path.posix) as any

Const statWatchersByFakeFS

statWatchersByFakeFS: WeakMap<FakeFS<string & object | string & object>, Map<string & object | string & object, CustomStatWatcher<string & object | string & object>>> = new WeakMap<FakeFS<Path>, Map<Path, CustomStatWatcher<Path>>>()

Let tmpEnv

tmpEnv: object | null = null

Const tmpdirs

tmpdirs: Set<string & object> = new Set<PortablePath>()

Const xfs

xfs: XFS = Object.assign(new NodeFS(), {detachTemp(p: PortablePath) {tmpdirs.delete(p);},mktempSync<T>(this: XFS, cb?: (p: PortablePath) => T) {const {tmpdir, realTmpdir} = initTmpEnv();while (true) {const name = getTempName(`xfs-`);try {this.mkdirSync(ppath.join(tmpdir, name));} catch (error) {if (error.code === `EEXIST`) {continue;} else {throw error;}}const realP = ppath.join(realTmpdir, name);tmpdirs.add(realP);if (typeof cb === `undefined`)return realP;try {return cb(realP);} finally {if (tmpdirs.has(realP)) {tmpdirs.delete(realP);try {this.removeSync(realP);} catch {// Too bad if there's an error}}}}},async mktempPromise<T>(this: XFS, cb?: (p: PortablePath) => Promise<T>) {const {tmpdir, realTmpdir} = initTmpEnv();while (true) {const name = getTempName(`xfs-`);try {await this.mkdirPromise(ppath.join(tmpdir, name));} catch (error) {if (error.code === `EEXIST`) {continue;} else {throw error;}}const realP = ppath.join(realTmpdir, name);tmpdirs.add(realP);if (typeof cb === `undefined`)return realP;try {return await cb(realP);} finally {if (tmpdirs.has(realP)) {tmpdirs.delete(realP);try {await this.removePromise(realP);} catch {// Too bad if there's an error}}}}},async rmtempPromise() {await Promise.all(Array.from(tmpdirs.values()).map(async p => {try {await xfs.removePromise(p, {maxRetries: 0});tmpdirs.delete(p);} catch {// Too bad if there's an error}}));},rmtempSync() {for (const p of tmpdirs) {try {xfs.removeSync(p);tmpdirs.delete(p);} catch {// Too bad if there's an error}}},})

Functions

EBADF

  • EBADF(reason: string): Error & object

EBUSY

  • EBUSY(message: string): Error & object

EEXIST

  • EEXIST(reason: string): Error & object

EINVAL

  • EINVAL(reason: string): Error & object

EISDIR

  • EISDIR(reason: string): Error & object

ENOENT

  • ENOENT(reason: string): Error & object

ENOSYS

  • ENOSYS(message: string, reason: string): Error & object

ENOTDIR

  • ENOTDIR(reason: string): Error & object

ENOTEMPTY

  • ENOTEMPTY(reason: string): Error & object

EOPNOTSUPP

  • EOPNOTSUPP(reason: string): Error & object

EROFS

  • EROFS(reason: string): Error & object

ERR_DIR_CLOSED

  • ERR_DIR_CLOSED(): Error & object

areStatsEqual

assertStatus

  • assertStatus<T>(current: Status, expected: T): current

clearStats

  • clearStats(stats: Stats | BigIntStats): Stats | BigIntStats

Const contains

  • contains<T>(pathUtils: PathUtils<T>, from: T, to: T): null | T

convertPath

  • convertPath<P>(targetPathUtils: PathUtils<P>, sourcePath: Path): P

convertToBigIntStats

  • convertToBigIntStats(stats: Stats): BigIntStats

copyFile

  • copyFile<P1, P2>(prelayout: Operations, postlayout: Operations, destinationFs: FakeFS<P1>, destination: P1, destinationStat: Stats | null, sourceFs: FakeFS<P2>, source: P2, sourceStat: Stats, opts: CopyOptions<P1>): Promise<boolean>

copyFileDirect

  • copyFileDirect<P1, P2>(prelayout: Operations, postlayout: Operations, destinationFs: FakeFS<P1>, destination: P1, destinationStat: Stats | null, sourceFs: FakeFS<P2>, source: P2, sourceStat: Stats, opts: CopyOptions<P1>): Promise<boolean>

copyFileViaIndex

copyFolder

copyImpl

copyPromise

  • copyPromise<P1, P2>(destinationFs: FakeFS<P1>, destination: P1, sourceFs: FakeFS<P2>, source: P2, opts: CopyOptions<P1>): Promise<void>

copySymlink

  • copySymlink<P1, P2>(prelayout: Operations, postlayout: Operations, destinationFs: FakeFS<P1>, destination: P1, destinationStat: Stats | null, sourceFs: FakeFS<P2>, source: P2, sourceStat: Stats, opts: CopyOptions<P1>): Promise<boolean>

extendFs

fromPortablePath

getEndOfLine

  • getEndOfLine(content: string): string

getTempName

  • getTempName(prefix: string): string & object

initTmpEnv

  • initTmpEnv(): object

makeDefaultStats

makeEmptyStats

  • makeEmptyStats(): Stats | BigIntStats

makeError

  • makeError(code: string, message: string): Error & object

Const makeError

  • makeError(): Error & object

maybeLStat

  • maybeLStat<P>(baseFs: FakeFS<P>, p: P): Promise<null | Stats & object>

normalizeLineEndings

  • normalizeLineEndings(originalContent: string, newContent: string): string

opendir

patchFs

setupCopyIndex

toFilename

  • toFilename(filename: string): Filename

toPortablePath

unwatchAllFiles

unwatchFile

watchFile

Object literals

Const Filename

Filename: object

home

home: string & object = `~` as Filename

lockfile

lockfile: string & object = `yarn.lock` as Filename

manifest

manifest: string & object = `package.json` as Filename

nodeModules

nodeModules: string & object = `node_modules` as Filename

pnpCjs

pnpCjs: string & object = `.pnp.cjs` as Filename

pnpData

pnpData: string & object = `.pnp.data.json` as Filename

pnpEsmLoader

pnpEsmLoader: string & object = `.pnp.loader.mjs` as Filename

pnpJs

pnpJs: string & object = `.pnp.js` as Filename
deprecated

rc

rc: string & object = `.yarnrc.yml` as Filename

virtual

virtual: string & object = `__virtual__` as Filename

Const PortablePath

PortablePath: object

dot

dot: string & object = `.` as PortablePath

parent

parent: string & object = `..` as PortablePath

root

root: string & object = `/` as PortablePath

Generated using TypeDoc