Socket
Socket
Sign inDemoInstall

@pnpm/directory-fetcher

Package Overview
Dependencies
Maintainers
2
Versions
69
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@pnpm/directory-fetcher - npm Package Compare versions

Comparing version 5.0.0 to 5.1.0

1

lib/index.d.ts
import type { DirectoryFetcher, DirectoryFetcherOptions } from '@pnpm/fetcher-base';
export interface CreateDirectoryFetcherOptions {
includeOnlyPackageFiles?: boolean;
resolveSymlinks?: boolean;
}

@@ -5,0 +6,0 @@ export declare function createDirectoryFetcher(opts?: CreateDirectoryFetcherOptions): {

65

lib/index.js

@@ -15,3 +15,4 @@ "use strict";

function createDirectoryFetcher(opts) {
const fetchFromDir = opts?.includeOnlyPackageFiles ? fetchPackageFilesFromDir : fetchAllFilesFromDir;
const readFileStat = opts?.resolveSymlinks === true ? realFileStat : fileStat;
const fetchFromDir = opts?.includeOnlyPackageFiles ? fetchPackageFilesFromDir : fetchAllFilesFromDir.bind(null, readFileStat);
const directoryFetcher = (cafs, resolution, opts) => {

@@ -30,7 +31,8 @@ const dir = path_1.default.join(opts.lockfileDir, resolution.directory);

}
return fetchAllFilesFromDir(dir, opts);
const readFileStat = opts?.resolveSymlinks === true ? realFileStat : fileStat;
return fetchAllFilesFromDir(readFileStat, dir, opts);
}
exports.fetchFromDir = fetchFromDir;
async function fetchAllFilesFromDir(dir, opts) {
const filesIndex = await _fetchAllFilesFromDir(dir);
async function fetchAllFilesFromDir(readFileStat, dir, opts) {
const filesIndex = await _fetchAllFilesFromDir(readFileStat, dir);
if (opts.manifest) {

@@ -49,3 +51,3 @@ // In a regular pnpm workspace it will probably never happen that a dependency has no package.json file.

}
async function _fetchAllFilesFromDir(dir, relativeDir = '') {
async function _fetchAllFilesFromDir(readFileStat, dir, relativeDir = '') {
const filesIndex = {};

@@ -56,18 +58,8 @@ const files = await fs_1.promises.readdir(dir);

.map(async (file) => {
const filePath = path_1.default.join(dir, file);
let stat;
try {
stat = await fs_1.promises.stat(filePath);
}
catch (err) { // eslint-disable-line @typescript-eslint/no-explicit-any
// Broken symlinks are skipped
if (err.code === 'ENOENT') {
directoryFetcherLogger.debug({ brokenSymlink: filePath });
return;
}
throw err;
}
const { filePath, stat } = await readFileStat(path_1.default.join(dir, file));
if (!filePath)
return;
const relativeSubdir = `${relativeDir}${relativeDir ? '/' : ''}${file}`;
if (stat.isDirectory()) {
const subFilesIndex = await _fetchAllFilesFromDir(filePath, relativeSubdir);
const subFilesIndex = await _fetchAllFilesFromDir(readFileStat, filePath, relativeSubdir);
Object.assign(filesIndex, subFilesIndex);

@@ -81,2 +73,37 @@ }

}
async function realFileStat(filePath) {
let stat = await fs_1.promises.lstat(filePath);
if (!stat.isSymbolicLink()) {
return { filePath, stat };
}
try {
filePath = await fs_1.promises.realpath(filePath);
stat = await fs_1.promises.stat(filePath);
return { filePath, stat };
}
catch (err) { // eslint-disable-line @typescript-eslint/no-explicit-any
// Broken symlinks are skipped
if (err.code === 'ENOENT') {
directoryFetcherLogger.debug({ brokenSymlink: filePath });
return { filePath: null, stat: null };
}
throw err;
}
}
async function fileStat(filePath) {
try {
return {
filePath,
stat: await fs_1.promises.stat(filePath),
};
}
catch (err) { // eslint-disable-line @typescript-eslint/no-explicit-any
// Broken symlinks are skipped
if (err.code === 'ENOENT') {
directoryFetcherLogger.debug({ brokenSymlink: filePath });
return { filePath: null, stat: null };
}
throw err;
}
}
async function fetchPackageFilesFromDir(dir, opts) {

@@ -83,0 +110,0 @@ const files = await (0, npm_packlist_1.default)({ path: dir });

{
"name": "@pnpm/directory-fetcher",
"version": "5.0.0",
"version": "5.1.0",
"description": "A fetcher for local directory packages",

@@ -37,6 +37,7 @@ "funding": "https://opencollective.com/pnpm",

"devDependencies": {
"@pnpm/directory-fetcher": "5.0.0",
"@pnpm/directory-fetcher": "5.1.0",
"@pnpm/test-fixtures": "0.0.26",
"@types/npm-packlist": "^3.0.0",
"@types/ramda": "0.28.15"
"@types/ramda": "0.28.15",
"@zkochan/rimraf": "^2.1.2"
},

@@ -43,0 +44,0 @@ "exports": {

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc