@alexaegis/workspace-tools
Version:
Tools for working with javascript workspaces
58 lines (57 loc) • 2.88 kB
JavaScript
import { a as PACKAGE_JSON_NAME, r as NODE_MODULES_DIRECTORY_NAME } from "./get-workspace-root.function-DnORClbN.js";
import { r as normalizeGetRootPackageJsonOptions, t as getRootPackageJson } from "./get-root-package-json.function-CFklF0V2.js";
import { asyncFilterMap, normalizeRegExpLikeToRegExp } from "@alexaegis/common";
import { join, relative } from "node:path";
import { readJson } from "@alexaegis/fs";
import { match } from "@alexaegis/match";
import { globby } from "globby";
//#region src/monorepo/collect-workspace-packages.function.options.ts
var normalizeCollectWorkspacePackagesOptions = (options) => {
return {
...normalizeGetRootPackageJsonOptions(options),
onlyWorkspaceRoot: options?.onlyWorkspaceRoot ?? false,
skipWorkspaceRoot: options?.skipWorkspaceRoot ?? false,
dependencyCriteria: options?.dependencyCriteria?.map(normalizeRegExpLikeToRegExp) ?? [],
packageJsonMatcher: options?.packageJsonMatcher
};
};
//#endregion
//#region src/monorepo/collect-workspace-packages.function.ts
var collectWorkspacePackages = async (rawOptions) => {
const options = normalizeCollectWorkspacePackagesOptions(rawOptions);
const rootPackage = await getRootPackageJson(options);
if (!rootPackage) {
options.logger.error("No package json was found! Cannot collect workspace packages!");
return [];
}
let result = [];
if (rootPackage.workspacePackagePatterns.length > 0) {
const subPackages = await asyncFilterMap(await globby(rootPackage.workspacePackagePatterns, {
gitignore: true,
onlyDirectories: true,
ignore: [NODE_MODULES_DIRECTORY_NAME],
absolute: true,
cwd: rootPackage.packagePath
}), (path) => {
const packageJsonPath = join(path, PACKAGE_JSON_NAME);
return readJson(packageJsonPath).catch(() => void 0).then((packageJson) => packageJson ? {
packageKind: "regular",
packageJson,
packagePath: path,
packagePathFromRootPackage: relative(rootPackage.packagePath, path),
packageJsonPath
} : void 0);
});
if (!options.onlyWorkspaceRoot) result.push(...subPackages);
}
if (!options.skipWorkspaceRoot || rootPackage.workspacePackagePatterns.length === 0) result.unshift(rootPackage);
if (options.packageJsonMatcher) result = result.filter((relativePackage) => match(relativePackage.packageJson, options.packageJsonMatcher));
if (options.dependencyCriteria.length > 0) result = result.filter((relativePackage) => {
const packageDependencies = [...Object.keys(relativePackage.packageJson.dependencies ?? {}), ...Object.keys(relativePackage.packageJson.devDependencies ?? {})];
return options.dependencyCriteria.every((dependencyCriteria) => packageDependencies.some((dependency) => dependencyCriteria.test(dependency)));
});
return result;
};
//#endregion
export { normalizeCollectWorkspacePackagesOptions as n, collectWorkspacePackages as t };
//# sourceMappingURL=monorepo-oshQmH-3.js.map