@yarnpkg/pnpify
Version:
47 lines (46 loc) • 1.92 kB
TypeScript
import { PortablePath, Filename } from '@yarnpkg/fslib';
import { NodeModulesTree } from '@yarnpkg/nm';
/**
* Resolved `/node_modules` path inside PnP project info.
*
* Dirs ending with '/node_modules/foo/node_modules' or '.../node_modules/foo/node_modules/@scope'
* do not physically exist, but we must pretend they do exist if package `foo` has dependencies
* and there is some package `@scope/bar` inside these dependencies. We need two things to emulate
* these dirs existence:
*
* 1. List of entries in these dirs. We retrieve them by calling PnP API and getting dependencies
* for the issuer `.../foo/` and store into `dirList` field
* 2. And we need either fake stats or we can forward underlying fs to stat the issuer dir.
* The issuer dir exists on fs. We store issuer dir into `statPath` field
*/
export interface ResolvedPath {
/**
* Fully resolved path `/node_modules/...` path within PnP project
*/
resolvedPath: PortablePath;
/**
* This field is returned for pathes ending with `/node_modules[/@scope]`.
*
* These pathes are special in the sense they do not exists as physical dirs in PnP projects.
*
* We emulate these pathes by forwarding to real physical path on underlying fs.
*/
forwardedDirPath?: PortablePath;
/**
* Directory entries list, returned for pathes ending with `/node_modules[/@scope]`
*/
dirList?: Set<Filename>;
/**
* If true, the entry is meant to be a symbolic link to the location pointed by resolvedPath.
*/
isSymlink?: boolean;
}
/**
* Resolves paths containing `/node_modules` inside PnP projects. If path is outside PnP
* project it is not changed.
*
* @param inputPath full path containing `node_modules`
*
* @returns resolved path
*/
export declare const resolveNodeModulesPath: (inputPath: PortablePath, nodeModulesTree: NodeModulesTree) => ResolvedPath;