workspace-tools
Version:
A collection of utilities that are useful in a git-controlled monorepo managed by one of these tools:
93 lines • 4.41 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getCatalogs = exports.getWorkspacesAsync = exports.getWorkspaces = exports.getYarnCatalogs = exports.getYarnWorkspacesAsync = exports.getYarnWorkspaces = exports.getWorkspacePackagePathsAsync = exports.getWorkspacePackagePaths = exports.getYarnWorkspaceRoot = void 0;
const fs_1 = __importDefault(require("fs"));
const path_1 = __importDefault(require("path"));
const index_1 = require("./index");
const packageJsonWorkspaces_1 = require("./packageJsonWorkspaces");
const getPackageInfo_1 = require("../../getPackageInfo");
const logging_1 = require("../../logging");
const readYaml_1 = require("../../lockfile/readYaml");
/** @deprecated Use `getWorkspaceManagerRoot` */
function getYarnWorkspaceRoot(cwd) {
const root = (0, index_1.getWorkspaceManagerAndRoot)(cwd, undefined, "yarn")?.root;
if (!root) {
throw new Error("Could not find yarn workspace root from " + cwd);
}
return root;
}
exports.getYarnWorkspaceRoot = getYarnWorkspaceRoot;
/** Get paths for each package ("workspace") in a yarn monorepo. */
function getWorkspacePackagePaths(cwd) {
const yarnWorkspacesRoot = getYarnWorkspaceRoot(cwd);
return (0, packageJsonWorkspaces_1.getPackagePathsFromWorkspaceRoot)(yarnWorkspacesRoot);
}
exports.getWorkspacePackagePaths = getWorkspacePackagePaths;
/** Get paths for each package ("workspace") in a yarn monorepo. */
function getWorkspacePackagePathsAsync(cwd) {
const yarnWorkspacesRoot = getYarnWorkspaceRoot(cwd);
return (0, packageJsonWorkspaces_1.getPackagePathsFromWorkspaceRootAsync)(yarnWorkspacesRoot);
}
exports.getWorkspacePackagePathsAsync = getWorkspacePackagePathsAsync;
/**
* Get an array with names, paths, and package.json contents for each package ("workspace")
* in a yarn monorepo.
*/
function getYarnWorkspaces(cwd) {
const yarnWorkspacesRoot = getYarnWorkspaceRoot(cwd);
return (0, packageJsonWorkspaces_1.getWorkspaceInfoFromWorkspaceRoot)(yarnWorkspacesRoot);
}
exports.getYarnWorkspaces = getYarnWorkspaces;
exports.getWorkspaces = getYarnWorkspaces;
/**
* Get an array with names, paths, and package.json contents for each package ("workspace")
* in a yarn monorepo.
*/
function getYarnWorkspacesAsync(cwd) {
const yarnWorkspacesRoot = getYarnWorkspaceRoot(cwd);
return (0, packageJsonWorkspaces_1.getWorkspaceInfoFromWorkspaceRootAsync)(yarnWorkspacesRoot);
}
exports.getYarnWorkspacesAsync = getYarnWorkspacesAsync;
exports.getWorkspacesAsync = getYarnWorkspacesAsync;
/**
* Get version catalogs if present.
* Returns undefined if there's no catalog, or any issue reading or parsing.
* @see https://yarnpkg.com/features/catalogs
*/
function getYarnCatalogs(cwd) {
try {
const root = getYarnWorkspaceRoot(cwd);
const yarnrcYmlPath = path_1.default.join(root, ".yarnrc.yml");
if (fs_1.default.existsSync(yarnrcYmlPath)) {
const yarnrcYml = (0, readYaml_1.readYaml)(yarnrcYmlPath);
if (yarnrcYml?.catalog || yarnrcYml?.catalogs) {
// Yarn v4+ format
return { default: yarnrcYml.catalog, named: yarnrcYml.catalogs };
}
}
else {
// Check for midgard-yarn-strict definition of catalogs in package.json
const workspaceSettings = (0, getPackageInfo_1.getPackageInfo)(root)?.workspaces;
if (workspaceSettings &&
!Array.isArray(workspaceSettings) &&
(workspaceSettings?.catalog || workspaceSettings?.catalogs)) {
// This probably handles a catalog named "default" as the default catalog
const { default: namedDefaultCatalog, ...namedCatalogs } = workspaceSettings.catalogs || {};
return {
default: workspaceSettings.catalog || namedDefaultCatalog,
named: Object.keys(namedCatalogs).length ? namedCatalogs : undefined,
};
}
}
}
catch (err) {
(0, logging_1.logVerboseWarning)(`Error getting yarn catalogs for ${cwd}`, err);
return undefined;
}
}
exports.getYarnCatalogs = getYarnCatalogs;
exports.getCatalogs = getYarnCatalogs;
//# sourceMappingURL=yarn.js.map