@pnpm/fs.find-packages
Version:
Find all packages inside a directory
66 lines • 2.86 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.findPackages = findPackages;
const fs_1 = require("fs");
const path_1 = __importDefault(require("path"));
const util_1 = __importDefault(require("util"));
const read_project_manifest_1 = require("@pnpm/read-project-manifest");
const util_lex_comparator_1 = require("@pnpm/util.lex-comparator");
const tinyglobby_1 = require("tinyglobby");
const p_filter_1 = __importDefault(require("p-filter"));
const DEFAULT_IGNORE = [
'**/node_modules/**',
'**/bower_components/**',
'**/test/**',
'**/tests/**',
];
async function findPackages(root, opts) {
opts = opts ?? {};
const globOpts = { ...opts, cwd: root, expandDirectories: false };
globOpts.ignore = opts.ignore ?? DEFAULT_IGNORE;
const patterns = normalizePatterns(opts.patterns ?? ['.', '**']);
delete globOpts.patterns;
const paths = await (0, tinyglobby_1.glob)(patterns, globOpts);
if (opts.includeRoot) {
// Always include the workspace root (https://github.com/pnpm/pnpm/issues/1986)
Array.prototype.push.apply(paths, await (0, tinyglobby_1.glob)(normalizePatterns(['.']), globOpts));
}
return (0, p_filter_1.default)(
// `Array.from()` doesn't create an intermediate instance,
// unlike `array.map()`
Array.from(
// Remove duplicate paths using `Set`
new Set(paths
.map(manifestPath => path_1.default.join(root, manifestPath))
.sort((path1, path2) => (0, util_lex_comparator_1.lexCompare)(path_1.default.dirname(path1), path_1.default.dirname(path2)))), async (manifestPath) => {
try {
const rootDir = path_1.default.dirname(manifestPath);
return {
rootDir,
rootDirRealPath: await fs_1.promises.realpath(rootDir),
...await (0, read_project_manifest_1.readExactProjectManifest)(manifestPath),
};
}
catch (err) {
if (util_1.default.types.isNativeError(err) && 'code' in err && err.code === 'ENOENT') {
return null;
}
throw err;
}
}), Boolean);
}
function normalizePatterns(patterns) {
const normalizedPatterns = [];
for (const pattern of patterns) {
// We should add separate pattern for each extension
// for some reason, fast-glob is buggy with /package.{json,yaml,json5} pattern
normalizedPatterns.push(pattern.replace(/\/?$/, '/package.json'));
normalizedPatterns.push(pattern.replace(/\/?$/, '/package.json5'));
normalizedPatterns.push(pattern.replace(/\/?$/, '/package.yaml'));
}
return normalizedPatterns;
}
//# sourceMappingURL=index.js.map
;