Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
walker.on('data', ({path: itemPath}) => {
itemPath = NodeFS.toPortablePath(itemPath);
const relativePath = ppath.relative(source, itemPath);
if (!filter || miscUtils.filePatternMatch(relativePath, filter)) {
paths.push(relative ? relativePath : itemPath);
}
// This item has been accepted only because it's a directory; it doesn't match the filter
return;
});
function callNativeResolution(request: PortablePath, issuer: PortablePath): NativePath | false {
if (issuer.endsWith(`/`))
issuer = ppath.join(issuer, toFilename(`internal.js`));
// Since we would need to create a fake module anyway (to call _resolveLookupPath that
// would give us the paths to give to _resolveFilename), we can as well not use
// the {paths} option at all, since it internally makes _resolveFilename create another
// fake module anyway.
return Module._resolveFilename(request, makeFakeModule(npath.fromPortablePath(issuer)), false, {plugnplay: false});
}
}
}
}
}
// Add new locations
for (const [locator, {locations}] of locatorMap.entries()) {
for (const location of locations) {
const {locationRoot, segments} = parseLocation(location);
let prevTreeNode = prevLocationTree.get(locationRoot);
let node = locationTree.get(locationRoot);
let curLocation = locationRoot;
const info = locatorMap.get(locator)!;
const srcDir = info.target;
const dstDir = ppath.join(rootPath, location);
const linkType = info.linkType;
for (const segment of segments)
node = node!.children.get(segment);
if (!prevTreeNode) {
addList.push({srcDir, dstDir, linkType, keepNodeModules: node!.children.size > 0});
} else {
for (const segment of segments) {
curLocation = ppath.join(curLocation, segment);
prevTreeNode = prevTreeNode.children.get(segment);
if (!prevTreeNode) {
addList.push({srcDir, dstDir, linkType, keepNodeModules: node!.children.size > 0});
break;
}
}
async function fetchRoot(initialCwd: PortablePath) {
// Note: We can't just use `git rev-parse --show-toplevel`, because on Windows
// it may return long paths even when the cwd uses short paths, and we have no
// way to detect it from Node (not even realpath).
let match: PortablePath | null = null;
let cwd: PortablePath;
let nextCwd = initialCwd;
do {
cwd = nextCwd;
if (await xfs.existsPromise(ppath.join(cwd, `.git` as Filename)))
match = cwd;
nextCwd = ppath.dirname(cwd);
} while (match === null && nextCwd !== cwd);
if (match === null)
throw new UsageError(`This command can only be run from within a Git repository`);
return match;
}
for (const pattern of NEVER_IGNORE)
globalList.accept.push(pattern);
globalList.reject.push(configuration.get(`rcFilename`));
const maybeRejectPath = (path: PortablePath | null) => {
if (path === null || !path.startsWith(`${workspace.cwd}/`))
return;
const workspaceRelativePath = ppath.relative(workspace.cwd, path);
const workspaceAbsolutePath = ppath.resolve(PortablePath.root, workspaceRelativePath);
globalList.reject.push(workspaceAbsolutePath);
};
maybeRejectPath(ppath.resolve(project.cwd, configuration.get(`lockfileFilename`)));
maybeRejectPath(configuration.get(`bstatePath`));
maybeRejectPath(configuration.get(`cacheFolder`));
maybeRejectPath(configuration.get(`globalFolder`));
maybeRejectPath(configuration.get(`virtualFolder`));
maybeRejectPath(configuration.get(`yarnPath`));
await configuration.triggerHook((hooks: StageHooks) => {
return hooks.populateYarnPaths;
}, project, (path: PortablePath | null) => {
maybeRejectPath(path);
});
// All child workspaces are ignored
for (const otherWorkspace of project.workspaces) {
const rel = ppath.relative(workspace.cwd, otherWorkspace.cwd);
const parentFetch = ppath.isAbsolute(path)
? {packageFs: new NodeFS(), prefixPath: PortablePath.root, localPath: PortablePath.root}
: await opts.fetcher.fetch(parentLocator, opts);
// If the package fs publicized its "original location" (for example like
// in the case of "file:" packages), we use it to derive the real location.
const effectiveParentFetch = parentFetch.localPath
? {packageFs: new NodeFS(), prefixPath: parentFetch.localPath}
: parentFetch;
// Discard the parent fs unless we really need it to access the files
if (parentFetch !== effectiveParentFetch && parentFetch.releaseFs)
parentFetch.releaseFs();
const generatorFs = effectiveParentFetch.packageFs;
const generatorPath = ppath.resolve(ppath.resolve(generatorFs.getRealPath(), effectiveParentFetch.prefixPath), path);
// Execute the specified script in the temporary directory
const cwd = await this.generatePackage(locator, generatorPath, opts);
// Make sure the script generated the package
if (!xfs.existsSync(ppath.join(cwd, toFilename(`build`))))
throw new Error(`The script should have generated a build directory`);
return await tgzUtils.makeArchiveFromDirectory(ppath.join(cwd, toFilename(`build`)), {
prefixPath: structUtils.getIdentVendorPath(locator),
});
}
? {name: dependencyReference[0], reference: dependencyReference[1]}
: {name: dependencyName, reference: dependencyReference};
const dependencyInformation = getPackageInformationSafe(dependencyLocator);
if (!dependencyInformation.packageLocation) {
throw makeError(
ErrorCode.MISSING_DEPENDENCY,
`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod.\n\nRequired package: ${dependencyLocator.name}@${dependencyLocator.reference} (via "${request}")\nRequired by: ${issuerLocator.name}@${issuerLocator.reference} (via ${issuer})\n`,
{request, issuer, dependencyLocator: Object.assign({}, dependencyLocator)},
);
}
// Now that we know which package we should resolve to, we only have to find out the file location
const dependencyLocation = ppath.resolve(runtimeState.basePath, dependencyInformation.packageLocation);
if (subPath) {
unqualifiedPath = ppath.resolve(dependencyLocation, subPath);
} else {
unqualifiedPath = dependencyLocation;
}
}
return ppath.normalize(unqualifiedPath);
};
const parentFetch = ppath.isAbsolute(path)
? {packageFs: new NodeFS(), prefixPath: PortablePath.root, localPath: PortablePath.root}
: await opts.fetcher.fetch(parentLocator, opts);
// If the package fs publicized its "original location" (for example like
// in the case of "file:" packages), we use it to derive the real location.
const effectiveParentFetch = parentFetch.localPath
? {packageFs: new NodeFS(), prefixPath: parentFetch.localPath}
: parentFetch;
// Discard the parent fs unless we really need it to access the files
if (parentFetch !== effectiveParentFetch && parentFetch.releaseFs)
parentFetch.releaseFs();
const sourceFs = effectiveParentFetch.packageFs;
const sourcePath = ppath.resolve(effectiveParentFetch.prefixPath, path);
const sourceBuffer = await sourceFs.readFilePromise(sourcePath);
return await miscUtils.releaseAfterUseAsync(async () => {
return await tgzUtils.convertToZip(sourceBuffer, {
stripComponents: 1,
prefixPath: structUtils.getIdentVendorPath(locator),
});
}, effectiveParentFetch.releaseFs);
}
}
const parentFetch = ppath.isAbsolute(path)
? {packageFs: new NodeFS(), prefixPath: PortablePath.root, localPath: PortablePath.root}
: await opts.fetcher.fetch(parentLocator, opts);
// If the package fs publicized its "original location" (for example like
// in the case of "file:" packages), we use it to derive the real location.
const effectiveParentFetch = parentFetch.localPath
? {packageFs: new NodeFS(), prefixPath: parentFetch.localPath}
: parentFetch;
// Discard the parent fs unless we really need it to access the files
if (parentFetch !== effectiveParentFetch && parentFetch.releaseFs)
parentFetch.releaseFs();
const sourceFs = effectiveParentFetch.packageFs;
const sourcePath = ppath.resolve(effectiveParentFetch.prefixPath, path);
return await miscUtils.releaseAfterUseAsync(async () => {
return await tgzUtils.makeArchiveFromDirectory(sourcePath, {
baseFs: sourceFs,
prefixPath: structUtils.getIdentVendorPath(locator),
});
}, effectiveParentFetch.releaseFs);
}
}
const locator = locators[packageId];
const info = pnp.getPackageInformation(locator)!;
let linkType;
let target;
if (options.pnpifyFs) {
// In case of pnpifyFs we represent modules as symlinks to archives in NodeModulesFS
// `/home/user/project/foo` is a symlink to `/home/user/project/.yarn/.cache/foo.zip/node_modules/foo`
// To make this fs layout work with legacy tools we make
// `/home/user/project/.yarn/.cache/foo.zip/node_modules/foo/node_modules` (which normally does not exist inside archive) a symlink to:
// `/home/user/project/node_modules/foo/node_modules`, so that the tools were able to access it
target = npath.toPortablePath(info.packageLocation);
linkType = LinkType.SOFT;
} else {
const truePath = pnp.resolveVirtual && locator.reference && locator.reference.startsWith('virtual:') ? pnp.resolveVirtual(info.packageLocation) : info.packageLocation;
target = npath.toPortablePath(truePath || info.packageLocation);
linkType = info.linkType;
}
return {
locator: serializeLocator(locator),
size: packages[packageId].weight,
target,
linkType,
};
};