@rushstack/node-core-library
Version:
Core libraries that every NodeJS toolchain project should use
53 lines • 2.21 kB
TypeScript
/// <reference types="node" />
/// <reference types="node" />
import * as nodeFs from 'fs';
import * as nodePath from 'path';
/**
* Arguments used to create a function that resolves symlinked node_modules in a path
* @public
*/
export interface IRealNodeModulePathResolverOptions {
fs?: Partial<Pick<typeof nodeFs, 'lstatSync' | 'readlinkSync'>>;
path?: Partial<Pick<typeof nodePath, 'isAbsolute' | 'join' | 'resolve' | 'sep'>>;
}
/**
* This class encapsulates a caching resolver for symlinks in node_modules directories.
* It assumes that the only symlinks that exist in input paths are those that correspond to
* npm packages.
*
* @remarks
* In a repository with a symlinked node_modules installation, some symbolic links need to be mapped for
* node module resolution to produce correct results. However, calling `fs.realpathSync.native` on every path,
* as is commonly done by most resolvers, involves an enormous number of file system operations (for reference,
* each invocation of `fs.realpathSync.native` involves a series of `fs.readlinkSync` calls, up to one for each
* path segment in the input).
*
* @public
*/
export declare class RealNodeModulePathResolver {
/**
* Similar in function to `fs.realpathSync.native`, but assumes the only symlinks present are npm packages.
*
* @param input - A path to a file or directory, where the path separator is `${require('node:path').sep}`
* @returns The real path to the input, resolving the node_modules symlinks in the path
* @public
*/
readonly realNodeModulePath: (input: string) => string;
private readonly _cache;
private readonly _fs;
private readonly _path;
constructor(options?: IRealNodeModulePathResolverOptions);
/**
* Clears the cache of resolved symlinks.
* @public
*/
clearCache(): void;
/**
* Tries to read a symbolic link at the specified path.
* If the input is not a symbolic link, returns undefined.
* @param link - The link to try to read
* @returns The target of the symbolic link, or undefined if the input is not a symbolic link
*/
private _tryReadLink;
}
//# sourceMappingURL=RealNodeModulePath.d.ts.map