UNPKG

@pnpm/fs.find-packages

Version:
66 lines 2.86 kB
"use strict"; 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