export = Resolver; declare class Resolver { /** * @param {ResolveStepHook} hook hook * @param {ResolveRequest} request request * @param {StackEntry=} parent previous tip of the stack * @param {Set=} preSeeded entries pre-seeded via the legacy `Set` API * @returns {StackEntry} stack entry */ static createStackEntry( hook: ResolveStepHook, request: ResolveRequest, parent?: StackEntry | undefined, preSeeded?: Set | undefined, ): StackEntry; /** * @param {FileSystem} fileSystem a filesystem * @param {ResolveOptions} options options */ constructor(fileSystem: FileSystem, options: ResolveOptions); /** @type {FileSystem} */ fileSystem: FileSystem; /** @type {ResolveOptions} */ options: ResolveOptions; /** @type {PathCacheFunctions} */ pathCache: PathCacheFunctions; /** @type {KnownHooks} */ hooks: KnownHooks; /** * @param {string | ResolveStepHook} name hook name or hook itself * @returns {ResolveStepHook} the hook */ ensureHook(name: string | ResolveStepHook): ResolveStepHook; /** * @param {string | ResolveStepHook} name hook name or hook itself * @returns {ResolveStepHook} the hook */ getHook(name: string | ResolveStepHook): ResolveStepHook; /** * @overload * @param {string | URL} parent context path or a `file:` URL * @param {string | URL} specifier request string or a `file:` URL * @param {ResolveContext=} resolveContext resolve context * @returns {string | false} result */ resolveSync( parent: string | URL, specifier: string | URL, resolveContext?: ResolveContext | undefined, ): string | false; /** * @overload * @param {Context} context context information object * @param {string | URL} parent context path or a `file:` URL * @param {string | URL} specifier request string or a `file:` URL * @param {ResolveContext=} resolveContext resolve context * @returns {string | false} result */ resolveSync( context: Context, parent: string | URL, specifier: string | URL, resolveContext?: ResolveContext | undefined, ): string | false; /** * @overload * @param {string | URL} parent context path or a `file:` URL * @param {string | URL} specifier request string or a `file:` URL * @param {ResolveContext=} resolveContext resolve context * @returns {Promise} result */ resolvePromise( parent: string | URL, specifier: string | URL, resolveContext?: ResolveContext | undefined, ): Promise; /** * @overload * @param {Context} context context information object * @param {string | URL} parent context path or a `file:` URL * @param {string | URL} specifier request string or a `file:` URL * @param {ResolveContext=} resolveContext resolve context * @returns {Promise} result */ resolvePromise( context: Context, parent: string | URL, specifier: string | URL, resolveContext?: ResolveContext | undefined, ): Promise; /** * @overload * @param {string | URL} parent context path or a `file:` URL * @param {string | URL} specifier request string or a `file:` URL * @param {ResolveCallback} callback callback function * @returns {void} */ resolve( parent: string | URL, specifier: string | URL, callback: ResolveCallback, ): void; /** * @overload * @param {string | URL} parent context path or a `file:` URL * @param {string | URL} specifier request string or a `file:` URL * @param {ResolveContext} resolveContext resolve context * @param {ResolveCallback} callback callback function * @returns {void} */ resolve( parent: string | URL, specifier: string | URL, resolveContext: ResolveContext, callback: ResolveCallback, ): void; /** * @overload * @param {Context} context context information object * @param {string | URL} parent context path or a `file:` URL * @param {string | URL} specifier request string or a `file:` URL * @param {ResolveCallback} callback callback function * @returns {void} */ resolve( context: Context, parent: string | URL, specifier: string | URL, callback: ResolveCallback, ): void; /** * @overload * @param {Context} context context information object * @param {string | URL} parent context path or a `file:` URL * @param {string | URL} specifier request string or a `file:` URL * @param {ResolveContext} resolveContext resolve context * @param {ResolveCallback} callback callback function * @returns {void} */ resolve( context: Context, parent: string | URL, specifier: string | URL, resolveContext: ResolveContext, callback: ResolveCallback, ): void; /** * @param {ResolveStepHook} hook hook * @param {ResolveRequest} request request * @param {null | string} message string * @param {ResolveContext} resolveContext resolver context * @param {(err?: null | Error, result?: ResolveRequest) => void} callback callback * @returns {void} */ doResolve( hook: ResolveStepHook, request: ResolveRequest, message: null | string, resolveContext: ResolveContext, callback: (err?: null | Error, result?: ResolveRequest) => void, ): void; /** * @param {string} identifier identifier * @returns {ParsedIdentifier} parsed identifier */ parse(identifier: string): ParsedIdentifier; /** * @param {string} path path * @returns {boolean} true, if the path is a module */ isModule(path: string): boolean; /** * @param {string} path path * @returns {boolean} true, if the path is private */ isPrivate(path: string): boolean; /** * @param {string} path a path * @returns {boolean} true, if the path is a directory path */ isDirectory(path: string): boolean; /** * @param {string} path path * @returns {string} normalized path */ normalize(path: string): string; /** * @param {string} path path * @param {string} request request * @returns {string} joined path */ join(path: string, request: string): string; /** * @param {string} path path * @returns {string} parent directory */ dirname(path: string): string; /** * @param {string} path the path to evaluate * @param {string=} suffix an extension to remove from the result * @returns {string} the last portion of a path */ basename(path: string, suffix?: string | undefined): string; } declare namespace Resolver { export { ResolveContext, ResolveStepHook, KnownHooks, EnsuredHooks, AliasOption, CachedJoin, CachedDirname, CachedBasename, JoinCacheEntry, DirnameCacheEntry, BasenameCacheEntry, PathCacheFunctions, ResolveOptions, KnownContext, Context, ErrorWithDetail, ResolveCallback, PossibleFileSystemError, FileSystemCallback, PathLike, PathOrFileDescriptor, ObjectEncodingOptions, EncodingOption, StringCallback, BufferCallback, StringOrBufferCallback, StatsCallback, BigIntStatsCallback, StatsOrBigIntStatsCallback, ReadJsonCallback, IStatsBase, IStats, IBigIntStats, Dirent, StatOptions, StatSyncOptions, ReadFile, BufferEncodingOption, ReadFileSync, Readdir, ReaddirSync, ReadJson, ReadJsonSync, Readlink, ReadlinkSync, LStat, LStatSync, Stat, StatSync, RealPath, RealPathSync, FileSystem, SyncFileSystem, ParsedIdentifier, JsonPrimitive, JsonArray, JsonValue, JsonObject, TsconfigPathsMap, TsconfigPathsData, BaseResolveRequest, ResolveRequest, WriteOnlySet, ResolveContextYield, }; } /** @typedef {import("./ResolverFactory").ResolveOptions} ResolveOptions */ /** * @typedef {object} KnownContext * @property {string[]=} environments environments * @property {string=} packageId package id of the importing file in the package map, propagated from a previous result to disambiguate package entries that share a location (`@experimental`, see the `packageMap` option) */ /** @typedef {KnownContext & Record} Context */ /** @typedef {Error & { details?: string }} ErrorWithDetail */ /** @typedef {(err: ErrorWithDetail | null, res?: string | false, req?: ResolveRequest) => void} ResolveCallback */ /** * @typedef {object} PossibleFileSystemError * @property {string=} code code * @property {number=} errno number * @property {string=} path path * @property {string=} syscall syscall */ /** * @template T * @callback FileSystemCallback * @param {PossibleFileSystemError & Error | null} err * @param {T=} result */ /** * @typedef {string | Buffer | URL} PathLike */ /** * @typedef {PathLike | number} PathOrFileDescriptor */ /** * @typedef {object} ObjectEncodingOptions * @property {BufferEncoding | null | undefined=} encoding encoding */ /** * @typedef {ObjectEncodingOptions | BufferEncoding | undefined | null} EncodingOption */ /** @typedef {(err: NodeJS.ErrnoException | null, result?: string) => void} StringCallback */ /** @typedef {(err: NodeJS.ErrnoException | null, result?: Buffer) => void} BufferCallback */ /** @typedef {(err: NodeJS.ErrnoException | null, result?: (string | Buffer)) => void} StringOrBufferCallback */ /** @typedef {(err: NodeJS.ErrnoException | null, result?: IStats) => void} StatsCallback */ /** @typedef {(err: NodeJS.ErrnoException | null, result?: IBigIntStats) => void} BigIntStatsCallback */ /** @typedef {(err: NodeJS.ErrnoException | null, result?: (IStats | IBigIntStats)) => void} StatsOrBigIntStatsCallback */ /** @typedef {(err: NodeJS.ErrnoException | Error | null, result?: JsonObject) => void} ReadJsonCallback */ /** * @template T * @typedef {object} IStatsBase * @property {() => boolean} isFile is file * @property {() => boolean} isDirectory is directory * @property {() => boolean} isBlockDevice is block device * @property {() => boolean} isCharacterDevice is character device * @property {() => boolean} isSymbolicLink is symbolic link * @property {() => boolean} isFIFO is FIFO * @property {() => boolean} isSocket is socket * @property {T} dev dev * @property {T} ino ino * @property {T} mode mode * @property {T} nlink nlink * @property {T} uid uid * @property {T} gid gid * @property {T} rdev rdev * @property {T} size size * @property {T} blksize blksize * @property {T} blocks blocks * @property {T} atimeMs atime ms * @property {T} mtimeMs mtime ms * @property {T} ctimeMs ctime ms * @property {T} birthtimeMs birthtime ms * @property {Date} atime atime * @property {Date} mtime mtime * @property {Date} ctime ctime * @property {Date} birthtime birthtime */ /** * @typedef {IStatsBase} IStats */ /** * @typedef {IStatsBase & { atimeNs: bigint, mtimeNs: bigint, ctimeNs: bigint, birthtimeNs: bigint }} IBigIntStats */ /** * @template {string | Buffer} [T=string] * @typedef {object} Dirent * @property {() => boolean} isFile true when is file, otherwise false * @property {() => boolean} isDirectory true when is directory, otherwise false * @property {() => boolean} isBlockDevice true when is block device, otherwise false * @property {() => boolean} isCharacterDevice true when is character device, otherwise false * @property {() => boolean} isSymbolicLink true when is symbolic link, otherwise false * @property {() => boolean} isFIFO true when is FIFO, otherwise false * @property {() => boolean} isSocket true when is socket, otherwise false * @property {T} name name * @property {string} parentPath path * @property {string=} path path */ /** * @typedef {object} StatOptions * @property {(boolean | undefined)=} bigint need bigint values */ /** * @typedef {object} StatSyncOptions * @property {(boolean | undefined)=} bigint need bigint values * @property {(boolean | undefined)=} throwIfNoEntry throw if no entry */ /** * @typedef {{ * (path: PathOrFileDescriptor, options: ({ encoding?: null | undefined, flag?: string | undefined } & import("events").Abortable) | undefined | null, callback: BufferCallback): void, * (path: PathOrFileDescriptor, options: ({ encoding: BufferEncoding, flag?: string | undefined } & import("events").Abortable) | BufferEncoding, callback: StringCallback): void, * (path: PathOrFileDescriptor, options: (ObjectEncodingOptions & { flag?: string | undefined } & import("events").Abortable) | BufferEncoding | undefined | null, callback: StringOrBufferCallback): void, * (path: PathOrFileDescriptor, callback: BufferCallback): void, * }} ReadFile */ /** * @typedef {"buffer" | { encoding: "buffer" }} BufferEncodingOption */ /** * @typedef {{ * (path: PathOrFileDescriptor, options?: { encoding?: null | undefined, flag?: string | undefined } | null): Buffer, * (path: PathOrFileDescriptor, options: { encoding: BufferEncoding, flag?: string | undefined } | BufferEncoding): string, * (path: PathOrFileDescriptor, options?: (ObjectEncodingOptions & { flag?: string | undefined }) | BufferEncoding | null): string | Buffer, * }} ReadFileSync */ /** * @typedef {{ * (path: PathLike, options: { encoding: BufferEncoding | null, withFileTypes?: false | undefined, recursive?: boolean | undefined } | BufferEncoding | undefined | null, callback: (err: NodeJS.ErrnoException | null, files?: string[]) => void): void, * (path: PathLike, options: { encoding: "buffer", withFileTypes?: false | undefined, recursive?: boolean | undefined } | "buffer", callback: (err: NodeJS.ErrnoException | null, files?: Buffer[]) => void): void, * (path: PathLike, options: (ObjectEncodingOptions & { withFileTypes?: false | undefined, recursive?: boolean | undefined }) | BufferEncoding | undefined | null, callback: (err: NodeJS.ErrnoException | null, files?: string[] | Buffer[]) => void): void, * (path: PathLike, callback: (err: NodeJS.ErrnoException | null, files?: string[]) => void): void, * (path: PathLike, options: ObjectEncodingOptions & { withFileTypes: true, recursive?: boolean | undefined }, callback: (err: NodeJS.ErrnoException | null, files?: Dirent[]) => void): void, * (path: PathLike, options: { encoding: "buffer", withFileTypes: true, recursive?: boolean | undefined }, callback: (err: NodeJS.ErrnoException | null, files: Dirent[]) => void): void, * }} Readdir */ /** * @typedef {{ * (path: PathLike, options?: { encoding: BufferEncoding | null, withFileTypes?: false | undefined, recursive?: boolean | undefined } | BufferEncoding | null): string[], * (path: PathLike, options: { encoding: "buffer", withFileTypes?: false | undefined, recursive?: boolean | undefined } | "buffer"): Buffer[], * (path: PathLike, options?: (ObjectEncodingOptions & { withFileTypes?: false | undefined, recursive?: boolean | undefined }) | BufferEncoding | null): string[] | Buffer[], * (path: PathLike, options: ObjectEncodingOptions & { withFileTypes: true, recursive?: boolean | undefined }): Dirent[], * (path: PathLike, options: { encoding: "buffer", withFileTypes: true, recursive?: boolean | undefined }): Dirent[], * }} ReaddirSync */ /** * @typedef {(pathOrFileDescription: PathOrFileDescriptor, callback: ReadJsonCallback) => void} ReadJson */ /** * @typedef {(pathOrFileDescription: PathOrFileDescriptor) => JsonObject} ReadJsonSync */ /** * @typedef {{ * (path: PathLike, options: EncodingOption, callback: StringCallback): void, * (path: PathLike, options: BufferEncodingOption, callback: BufferCallback): void, * (path: PathLike, options: EncodingOption, callback: StringOrBufferCallback): void, * (path: PathLike, callback: StringCallback): void, * }} Readlink */ /** * @typedef {{ * (path: PathLike, options?: EncodingOption): string, * (path: PathLike, options: BufferEncodingOption): Buffer, * (path: PathLike, options?: EncodingOption): string | Buffer, * }} ReadlinkSync */ /** * @typedef {{ * (path: PathLike, callback: StatsCallback): void, * (path: PathLike, options: (StatOptions & { bigint?: false | undefined }) | undefined, callback: StatsCallback): void, * (path: PathLike, options: StatOptions & { bigint: true }, callback: BigIntStatsCallback): void, * (path: PathLike, options: StatOptions | undefined, callback: StatsOrBigIntStatsCallback): void, * }} LStat */ /** * @typedef {{ * (path: PathLike, options?: undefined): IStats, * (path: PathLike, options?: StatSyncOptions & { bigint?: false | undefined, throwIfNoEntry: false }): IStats | undefined, * (path: PathLike, options: StatSyncOptions & { bigint: true, throwIfNoEntry: false }): IBigIntStats | undefined, * (path: PathLike, options?: StatSyncOptions & { bigint?: false | undefined }): IStats, * (path: PathLike, options: StatSyncOptions & { bigint: true }): IBigIntStats, * (path: PathLike, options: StatSyncOptions & { bigint: boolean, throwIfNoEntry?: false | undefined }): IStats | IBigIntStats, * (path: PathLike, options?: StatSyncOptions): IStats | IBigIntStats | undefined, * }} LStatSync */ /** * @typedef {{ * (path: PathLike, callback: StatsCallback): void, * (path: PathLike, options: (StatOptions & { bigint?: false | undefined }) | undefined, callback: StatsCallback): void, * (path: PathLike, options: StatOptions & { bigint: true }, callback: BigIntStatsCallback): void, * (path: PathLike, options: StatOptions | undefined, callback: StatsOrBigIntStatsCallback): void, * }} Stat */ /** * @typedef {{ * (path: PathLike, options?: undefined): IStats, * (path: PathLike, options?: StatSyncOptions & { bigint?: false | undefined, throwIfNoEntry: false }): IStats | undefined, * (path: PathLike, options: StatSyncOptions & { bigint: true, throwIfNoEntry: false }): IBigIntStats | undefined, * (path: PathLike, options?: StatSyncOptions & { bigint?: false | undefined }): IStats, * (path: PathLike, options: StatSyncOptions & { bigint: true }): IBigIntStats, * (path: PathLike, options: StatSyncOptions & { bigint: boolean, throwIfNoEntry?: false | undefined }): IStats | IBigIntStats, * (path: PathLike, options?: StatSyncOptions): IStats | IBigIntStats | undefined, * }} StatSync */ /** * @typedef {{ * (path: PathLike, options: EncodingOption, callback: StringCallback): void, * (path: PathLike, options: BufferEncodingOption, callback: BufferCallback): void, * (path: PathLike, options: EncodingOption, callback: StringOrBufferCallback): void, * (path: PathLike, callback: StringCallback): void, * }} RealPath */ /** * @typedef {{ * (path: PathLike, options?: EncodingOption): string, * (path: PathLike, options: BufferEncodingOption): Buffer, * (path: PathLike, options?: EncodingOption): string | Buffer, * }} RealPathSync */ /** * @typedef {object} FileSystem * @property {ReadFile} readFile read file method * @property {Readdir} readdir readdir method * @property {ReadJson=} readJson read json method * @property {Readlink} readlink read link method * @property {LStat=} lstat lstat method * @property {Stat} stat stat method * @property {RealPath=} realpath realpath method */ /** * @typedef {object} SyncFileSystem * @property {ReadFileSync} readFileSync read file sync method * @property {ReaddirSync} readdirSync read dir sync method * @property {ReadJsonSync=} readJsonSync read json sync method * @property {ReadlinkSync} readlinkSync read link sync method * @property {LStatSync=} lstatSync lstat sync method * @property {StatSync} statSync stat sync method * @property {RealPathSync=} realpathSync real path sync method */ /** * @typedef {object} ParsedIdentifier * @property {string} request request * @property {string} query query * @property {string} fragment fragment * @property {boolean} directory is directory * @property {boolean} module is module * @property {boolean} file is file * @property {boolean} internal is internal */ /** @typedef {string | number | boolean | null} JsonPrimitive */ /** @typedef {JsonValue[]} JsonArray */ /** @typedef {JsonPrimitive | JsonObject | JsonArray} JsonValue */ /** @typedef {{ [Key in string]?: JsonValue | undefined }} JsonObject */ /** * @typedef {object} TsconfigPathsMap * @property {TsconfigPathsData} main main tsconfig paths data * @property {string} mainContext main tsconfig base URL (absolute path) * @property {{ [baseUrl: string]: TsconfigPathsData }} refs referenced tsconfig paths data mapped by baseUrl * @property {{ [context: string]: TsconfigPathsData }} allContexts all contexts (main + refs) for quick lookup * @property {string[]} contextList precomputed `Object.keys(allContexts)` — read-only; used on the `_selectPathsDataForContext` hot path * @property {Set} fileDependencies file dependencies */ /** * @typedef {object} TsconfigPathsData * @property {import("./AliasUtils").CompiledAliasOptions} alias tsconfig file data * @property {string[]} modules tsconfig file data */ /** * @typedef {object} BaseResolveRequest * @property {string | false} path path * @property {Context=} context content * @property {string=} descriptionFilePath description file path * @property {string=} descriptionFileRoot description file root * @property {JsonObject=} descriptionFileData description file data * @property {TsconfigPathsMap | null | undefined=} tsconfigPathsMap tsconfig paths map * @property {string=} relativePath relative path * @property {boolean=} ignoreSymlinks true when need to ignore symlinks, otherwise false * @property {boolean=} fullySpecified true when full specified, otherwise false * @property {string=} packageId package id the request was resolved to in the package map, to be propagated to resolutions made from the resulting file (`@experimental`, see the `packageMap` option) * @property {string=} __innerRequest inner request for internal usage * @property {string=} __innerRequest_request inner request for internal usage * @property {string=} __innerRequest_relativePath inner relative path for internal usage * @property {{ blocked: boolean }=} __restrictionsMarker internal: shared marker `RestrictionsPlugin` flips when it filters out an existing target, letting `ExportsFieldPlugin` fall back instead of erroring */ /** @typedef {BaseResolveRequest & Partial} ResolveRequest */ /** * @template T * @typedef {{ add: (item: T) => void }} WriteOnlySet */ /** @typedef {(request: ResolveRequest) => void} ResolveContextYield */ /** * Singly-linked stack entry that also exposes a Set-like API * (`has`, `size`, iteration). Each `doResolve` call prepends a new * `StackEntry` that points at the previous tip via `.parent`, so pushing * is O(1) in time and memory. Recursion detection walks the linked list * (O(n)) but the stack is typically shallow, so this is cheaper overall * than cloning a `Set` per call. */ declare class StackEntry { /** * @param {ResolveStepHook} hook hook * @param {ResolveRequest} request request * @param {StackEntry=} parent previous tip * @param {Set=} preSeeded entries pre-seeded via the legacy `Set` API */ constructor( hook: ResolveStepHook, request: ResolveRequest, parent?: StackEntry | undefined, preSeeded?: Set | undefined, ); name: string | undefined; path: string | false; request: string; query: string; fragment: string; directory: boolean; module: boolean; /** @type {StackEntry | undefined} */ parent: StackEntry | undefined; /** * Strings seeded by callers that still pass `stack: new Set([...])`. * Propagated through the chain so deeper `doResolve` calls still see * them during recursion checks. `undefined` in the common case so * there is no extra work on the hot path. * @type {Set | undefined} */ preSeeded: Set | undefined; /** * Walk the linked list looking for an entry with the same request shape. * Set-compatible: callers that used `stack.has(entry)` keep working. * * NOTE: kept monomorphic on purpose. An earlier draft accepted a string * query too (so pre-5.21 plugins keeping their own `Set` of * seen entries could probe the live stack with the formatted form), * but adding the second shape regressed `doResolve`'s heap profile by * ~1 MiB / 200 resolves on stack-churn — V8 keeps a polymorphic * call-site state for `parent.has(stackEntry)` once `has` has two * argument shapes. Plugins that need string membership can reach for * `[...stack].find(e => e.includes(formattedString))` via the * `String`-method proxies on `StackEntry` instead. * @param {StackEntry} query entry to look for * @returns {boolean} whether the stack already contains an equivalent entry */ has(query: StackEntry): boolean; /** * Number of entries on the stack (oldest-to-newest length). * @returns {number} size */ get size(): number; /** * Human-readable form used in recursion error messages, logs, and the * iterator above. Not memoized: caching would require an extra slot on * every `StackEntry`, which costs heap even on resolves that never look * at the formatted form. * @returns {string} formatted entry */ toString(): string; /** * Iterate entries from oldest (root) to newest (tip), matching how a * `Set` that was populated in insertion order would iterate. Pre-seeded * legacy `Set` entries come first so error-message output stays * ordered oldest-to-newest. * * Yields each entry as its formatted `toString()` form. Plugins written * against the pre-5.21 `Set` shape — e.g. * `[...resolveContext.stack].find(a => a.includes("module:"))` — keep * working unchanged because each yielded value is a plain string with * all of `String.prototype` available natively. Resolves that never * iterate the stack pay nothing; iteration costs one `toString()` * allocation per stack frame. * @returns {IterableIterator} iterator */ [Symbol.iterator](): IterableIterator; } /** * Resolve context */ type ResolveContext = { /** * directories that was found on file system */ contextDependencies?: WriteOnlySet | undefined; /** * files that was found on file system */ fileDependencies?: WriteOnlySet | undefined; /** * dependencies that was not found on file system */ missingDependencies?: WriteOnlySet | undefined; /** * tip of the resolver call stack (a singly-linked list with Set-like API). For instance, `resolve → parsedResolve → describedResolve`. Accepts a legacy `Set` for back-compat with older callers; it is normalized internally without a hot-path branch. */ stack?: (StackEntry | Set) | undefined; /** * log function */ log?: ((str: string) => void) | undefined; /** * yield result, if provided plugins can return several results */ yield?: ResolveContextYield | undefined; }; type ResolveStepHook = AsyncSeriesBailHook< [ResolveRequest, ResolveContext], ResolveRequest | null >; type KnownHooks = { /** * resolve step hook */ resolveStep: SyncHook<[ResolveStepHook, ResolveRequest], void>; /** * no resolve hook */ noResolve: SyncHook<[ResolveRequest, Error]>; /** * resolve hook */ resolve: ResolveStepHook; /** * result hook */ result: AsyncSeriesHook<[ResolveRequest, ResolveContext]>; }; type EnsuredHooks = { [key: string]: ResolveStepHook; }; type AliasOption = import("./AliasUtils").AliasOption; type CachedJoin = import("./util/path").CachedJoin; type CachedDirname = import("./util/path").CachedDirname; type CachedBasename = import("./util/path").CachedBasename; type JoinCacheEntry = { /** * cached join function */ fn: CachedJoin["fn"]; /** * the underlying cache map */ cache: CachedJoin["cache"]; }; type DirnameCacheEntry = { /** * cached dirname function */ fn: CachedDirname["fn"]; /** * the underlying cache map */ cache: CachedDirname["cache"]; }; type BasenameCacheEntry = { /** * cached dirname function */ fn: CachedBasename["fn"]; /** * the underlying cache map */ cache: CachedBasename["cache"]; }; type PathCacheFunctions = { /** * cached join */ join: JoinCacheEntry; /** * cached dirname */ dirname: DirnameCacheEntry; /** * cached basename */ basename: BasenameCacheEntry; }; type ResolveOptions = import("./ResolverFactory").ResolveOptions; type KnownContext = { /** * environments */ environments?: string[] | undefined; /** * package id of the importing file in the package map, propagated from a previous result to disambiguate package entries that share a location (`@experimental`, see the `packageMap` option) */ packageId?: string | undefined; }; type Context = KnownContext & Record; type ErrorWithDetail = Error & { details?: string; }; type ResolveCallback = ( err: ErrorWithDetail | null, res?: string | false, req?: ResolveRequest, ) => void; type PossibleFileSystemError = { /** * code */ code?: string | undefined; /** * number */ errno?: number | undefined; /** * path */ path?: string | undefined; /** * syscall */ syscall?: string | undefined; }; type FileSystemCallback = ( err: (PossibleFileSystemError & Error) | null, result?: T | undefined, ) => any; type PathLike = string | Buffer | URL; type PathOrFileDescriptor = PathLike | number; type ObjectEncodingOptions = { /** * encoding */ encoding?: (BufferEncoding | null | undefined) | undefined; }; type EncodingOption = ObjectEncodingOptions | BufferEncoding | undefined | null; type StringCallback = ( err: NodeJS.ErrnoException | null, result?: string, ) => void; type BufferCallback = ( err: NodeJS.ErrnoException | null, result?: Buffer, ) => void; type StringOrBufferCallback = ( err: NodeJS.ErrnoException | null, result?: string | Buffer, ) => void; type StatsCallback = ( err: NodeJS.ErrnoException | null, result?: IStats, ) => void; type BigIntStatsCallback = ( err: NodeJS.ErrnoException | null, result?: IBigIntStats, ) => void; type StatsOrBigIntStatsCallback = ( err: NodeJS.ErrnoException | null, result?: IStats | IBigIntStats, ) => void; type ReadJsonCallback = ( err: NodeJS.ErrnoException | Error | null, result?: JsonObject, ) => void; type IStatsBase = { /** * is file */ isFile: () => boolean; /** * is directory */ isDirectory: () => boolean; /** * is block device */ isBlockDevice: () => boolean; /** * is character device */ isCharacterDevice: () => boolean; /** * is symbolic link */ isSymbolicLink: () => boolean; /** * is FIFO */ isFIFO: () => boolean; /** * is socket */ isSocket: () => boolean; /** * dev */ dev: T; /** * ino */ ino: T; /** * mode */ mode: T; /** * nlink */ nlink: T; /** * uid */ uid: T; /** * gid */ gid: T; /** * rdev */ rdev: T; /** * size */ size: T; /** * blksize */ blksize: T; /** * blocks */ blocks: T; /** * atime ms */ atimeMs: T; /** * mtime ms */ mtimeMs: T; /** * ctime ms */ ctimeMs: T; /** * birthtime ms */ birthtimeMs: T; /** * atime */ atime: Date; /** * mtime */ mtime: Date; /** * ctime */ ctime: Date; /** * birthtime */ birthtime: Date; }; type IStats = IStatsBase; type IBigIntStats = IStatsBase & { atimeNs: bigint; mtimeNs: bigint; ctimeNs: bigint; birthtimeNs: bigint; }; type Dirent = { /** * true when is file, otherwise false */ isFile: () => boolean; /** * true when is directory, otherwise false */ isDirectory: () => boolean; /** * true when is block device, otherwise false */ isBlockDevice: () => boolean; /** * true when is character device, otherwise false */ isCharacterDevice: () => boolean; /** * true when is symbolic link, otherwise false */ isSymbolicLink: () => boolean; /** * true when is FIFO, otherwise false */ isFIFO: () => boolean; /** * true when is socket, otherwise false */ isSocket: () => boolean; /** * name */ name: T; /** * path */ parentPath: string; /** * path */ path?: string | undefined; }; type StatOptions = { /** * need bigint values */ bigint?: (boolean | undefined) | undefined; }; type StatSyncOptions = { /** * need bigint values */ bigint?: (boolean | undefined) | undefined; /** * throw if no entry */ throwIfNoEntry?: (boolean | undefined) | undefined; }; type ReadFile = { ( path: PathOrFileDescriptor, options: | ({ encoding?: null | undefined; flag?: string | undefined; } & import("events").Abortable) | undefined | null, callback: BufferCallback, ): void; ( path: PathOrFileDescriptor, options: | ({ encoding: BufferEncoding; flag?: string | undefined; } & import("events").Abortable) | BufferEncoding, callback: StringCallback, ): void; ( path: PathOrFileDescriptor, options: | (ObjectEncodingOptions & { flag?: string | undefined; } & import("events").Abortable) | BufferEncoding | undefined | null, callback: StringOrBufferCallback, ): void; (path: PathOrFileDescriptor, callback: BufferCallback): void; }; type BufferEncodingOption = | "buffer" | { encoding: "buffer"; }; type ReadFileSync = { ( path: PathOrFileDescriptor, options?: { encoding?: null | undefined; flag?: string | undefined; } | null, ): Buffer; ( path: PathOrFileDescriptor, options: | { encoding: BufferEncoding; flag?: string | undefined; } | BufferEncoding, ): string; ( path: PathOrFileDescriptor, options?: | (ObjectEncodingOptions & { flag?: string | undefined; }) | BufferEncoding | null, ): string | Buffer; }; type Readdir = { ( path: PathLike, options: | { encoding: BufferEncoding | null; withFileTypes?: false | undefined; recursive?: boolean | undefined; } | BufferEncoding | undefined | null, callback: (err: NodeJS.ErrnoException | null, files?: string[]) => void, ): void; ( path: PathLike, options: | { encoding: "buffer"; withFileTypes?: false | undefined; recursive?: boolean | undefined; } | "buffer", callback: (err: NodeJS.ErrnoException | null, files?: Buffer[]) => void, ): void; ( path: PathLike, options: | (ObjectEncodingOptions & { withFileTypes?: false | undefined; recursive?: boolean | undefined; }) | BufferEncoding | undefined | null, callback: ( err: NodeJS.ErrnoException | null, files?: string[] | Buffer[], ) => void, ): void; ( path: PathLike, callback: (err: NodeJS.ErrnoException | null, files?: string[]) => void, ): void; ( path: PathLike, options: ObjectEncodingOptions & { withFileTypes: true; recursive?: boolean | undefined; }, callback: ( err: NodeJS.ErrnoException | null, files?: Dirent[], ) => void, ): void; ( path: PathLike, options: { encoding: "buffer"; withFileTypes: true; recursive?: boolean | undefined; }, callback: ( err: NodeJS.ErrnoException | null, files: Dirent[], ) => void, ): void; }; type ReaddirSync = { ( path: PathLike, options?: | { encoding: BufferEncoding | null; withFileTypes?: false | undefined; recursive?: boolean | undefined; } | BufferEncoding | null, ): string[]; ( path: PathLike, options: | { encoding: "buffer"; withFileTypes?: false | undefined; recursive?: boolean | undefined; } | "buffer", ): Buffer[]; ( path: PathLike, options?: | (ObjectEncodingOptions & { withFileTypes?: false | undefined; recursive?: boolean | undefined; }) | BufferEncoding | null, ): string[] | Buffer[]; ( path: PathLike, options: ObjectEncodingOptions & { withFileTypes: true; recursive?: boolean | undefined; }, ): Dirent[]; ( path: PathLike, options: { encoding: "buffer"; withFileTypes: true; recursive?: boolean | undefined; }, ): Dirent[]; }; type ReadJson = ( pathOrFileDescription: PathOrFileDescriptor, callback: ReadJsonCallback, ) => void; type ReadJsonSync = (pathOrFileDescription: PathOrFileDescriptor) => JsonObject; type Readlink = { (path: PathLike, options: EncodingOption, callback: StringCallback): void; ( path: PathLike, options: BufferEncodingOption, callback: BufferCallback, ): void; ( path: PathLike, options: EncodingOption, callback: StringOrBufferCallback, ): void; (path: PathLike, callback: StringCallback): void; }; type ReadlinkSync = { (path: PathLike, options?: EncodingOption): string; (path: PathLike, options: BufferEncodingOption): Buffer; (path: PathLike, options?: EncodingOption): string | Buffer; }; type LStat = { (path: PathLike, callback: StatsCallback): void; ( path: PathLike, options: | (StatOptions & { bigint?: false | undefined; }) | undefined, callback: StatsCallback, ): void; ( path: PathLike, options: StatOptions & { bigint: true; }, callback: BigIntStatsCallback, ): void; ( path: PathLike, options: StatOptions | undefined, callback: StatsOrBigIntStatsCallback, ): void; }; type LStatSync = { (path: PathLike, options?: undefined): IStats; ( path: PathLike, options?: StatSyncOptions & { bigint?: false | undefined; throwIfNoEntry: false; }, ): IStats | undefined; ( path: PathLike, options: StatSyncOptions & { bigint: true; throwIfNoEntry: false; }, ): IBigIntStats | undefined; ( path: PathLike, options?: StatSyncOptions & { bigint?: false | undefined; }, ): IStats; ( path: PathLike, options: StatSyncOptions & { bigint: true; }, ): IBigIntStats; ( path: PathLike, options: StatSyncOptions & { bigint: boolean; throwIfNoEntry?: false | undefined; }, ): IStats | IBigIntStats; ( path: PathLike, options?: StatSyncOptions, ): IStats | IBigIntStats | undefined; }; type Stat = { (path: PathLike, callback: StatsCallback): void; ( path: PathLike, options: | (StatOptions & { bigint?: false | undefined; }) | undefined, callback: StatsCallback, ): void; ( path: PathLike, options: StatOptions & { bigint: true; }, callback: BigIntStatsCallback, ): void; ( path: PathLike, options: StatOptions | undefined, callback: StatsOrBigIntStatsCallback, ): void; }; type StatSync = { (path: PathLike, options?: undefined): IStats; ( path: PathLike, options?: StatSyncOptions & { bigint?: false | undefined; throwIfNoEntry: false; }, ): IStats | undefined; ( path: PathLike, options: StatSyncOptions & { bigint: true; throwIfNoEntry: false; }, ): IBigIntStats | undefined; ( path: PathLike, options?: StatSyncOptions & { bigint?: false | undefined; }, ): IStats; ( path: PathLike, options: StatSyncOptions & { bigint: true; }, ): IBigIntStats; ( path: PathLike, options: StatSyncOptions & { bigint: boolean; throwIfNoEntry?: false | undefined; }, ): IStats | IBigIntStats; ( path: PathLike, options?: StatSyncOptions, ): IStats | IBigIntStats | undefined; }; type RealPath = { (path: PathLike, options: EncodingOption, callback: StringCallback): void; ( path: PathLike, options: BufferEncodingOption, callback: BufferCallback, ): void; ( path: PathLike, options: EncodingOption, callback: StringOrBufferCallback, ): void; (path: PathLike, callback: StringCallback): void; }; type RealPathSync = { (path: PathLike, options?: EncodingOption): string; (path: PathLike, options: BufferEncodingOption): Buffer; (path: PathLike, options?: EncodingOption): string | Buffer; }; type FileSystem = { /** * read file method */ readFile: ReadFile; /** * readdir method */ readdir: Readdir; /** * read json method */ readJson?: ReadJson | undefined; /** * read link method */ readlink: Readlink; /** * lstat method */ lstat?: LStat | undefined; /** * stat method */ stat: Stat; /** * realpath method */ realpath?: RealPath | undefined; }; type SyncFileSystem = { /** * read file sync method */ readFileSync: ReadFileSync; /** * read dir sync method */ readdirSync: ReaddirSync; /** * read json sync method */ readJsonSync?: ReadJsonSync | undefined; /** * read link sync method */ readlinkSync: ReadlinkSync; /** * lstat sync method */ lstatSync?: LStatSync | undefined; /** * stat sync method */ statSync: StatSync; /** * real path sync method */ realpathSync?: RealPathSync | undefined; }; type ParsedIdentifier = { /** * request */ request: string; /** * query */ query: string; /** * fragment */ fragment: string; /** * is directory */ directory: boolean; /** * is module */ module: boolean; /** * is file */ file: boolean; /** * is internal */ internal: boolean; }; type JsonPrimitive = string | number | boolean | null; type JsonArray = JsonValue[]; type JsonValue = JsonPrimitive | JsonObject | JsonArray; type JsonObject = { [Key in string]?: JsonValue | undefined }; type TsconfigPathsMap = { /** * main tsconfig paths data */ main: TsconfigPathsData; /** * main tsconfig base URL (absolute path) */ mainContext: string; /** * referenced tsconfig paths data mapped by baseUrl */ refs: { [baseUrl: string]: TsconfigPathsData; }; /** * all contexts (main + refs) for quick lookup */ allContexts: { [context: string]: TsconfigPathsData; }; /** * precomputed `Object.keys(allContexts)` — read-only; used on the `_selectPathsDataForContext` hot path */ contextList: string[]; /** * file dependencies */ fileDependencies: Set; }; type TsconfigPathsData = { /** * tsconfig file data */ alias: import("./AliasUtils").CompiledAliasOptions; /** * tsconfig file data */ modules: string[]; }; type BaseResolveRequest = { /** * path */ path: string | false; /** * content */ context?: Context | undefined; /** * description file path */ descriptionFilePath?: string | undefined; /** * description file root */ descriptionFileRoot?: string | undefined; /** * description file data */ descriptionFileData?: JsonObject | undefined; /** * tsconfig paths map */ tsconfigPathsMap?: (TsconfigPathsMap | null | undefined) | undefined; /** * relative path */ relativePath?: string | undefined; /** * true when need to ignore symlinks, otherwise false */ ignoreSymlinks?: boolean | undefined; /** * true when full specified, otherwise false */ fullySpecified?: boolean | undefined; /** * package id the request was resolved to in the package map, to be propagated to resolutions made from the resulting file (`@experimental`, see the `packageMap` option) */ packageId?: string | undefined; /** * inner request for internal usage */ __innerRequest?: string | undefined; /** * inner request for internal usage */ __innerRequest_request?: string | undefined; /** * inner relative path for internal usage */ __innerRequest_relativePath?: string | undefined; /** * internal: shared marker `RestrictionsPlugin` flips when it filters out an existing target, letting `ExportsFieldPlugin` fall back instead of erroring */ __restrictionsMarker?: | { blocked: boolean; } | undefined; }; type ResolveRequest = BaseResolveRequest & Partial; type WriteOnlySet = { add: (item: T) => void; }; type ResolveContextYield = (request: ResolveRequest) => void; import { AsyncSeriesBailHook } from "tapable"; import { SyncHook } from "tapable"; import { AsyncSeriesHook } from "tapable";