workspace-tools
Version:
A collection of utilities that are useful in a git-controlled monorepo managed by one of these tools:
76 lines • 3.05 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getWorkspacePackageInfoAsync = exports.getWorkspacePackageInfo = void 0;
const path_1 = __importDefault(require("path"));
const promises_1 = __importDefault(require("fs/promises"));
const logging_1 = require("../logging");
const infoFromPackageJson_1 = require("../infoFromPackageJson");
const getPackageInfo_1 = require("../getPackageInfo");
/**
* Get an array with names, paths, and package.json contents for each of the given package paths
* ("workspace" paths in npm/yarn/pnpm terms) within a monorepo.
*
* This is an internal helper used by `getWorkspaces` implementations for different managers.
*
* @param packagePaths Paths to packages within a monorepo
* @returns Array of workspace package infos
* @internal
*/
function getWorkspacePackageInfo(packagePaths) {
if (!packagePaths) {
return [];
}
return packagePaths
.map((workspacePath) => {
const packageJson = (0, getPackageInfo_1.getPackageInfo)(workspacePath);
if (!packageJson) {
return null; // getPackageInfo already logged a warning
}
return {
name: packageJson.name,
path: workspacePath,
packageJson,
};
})
.filter(Boolean);
}
exports.getWorkspacePackageInfo = getWorkspacePackageInfo;
/**
* Get an array with names, paths, and package.json contents for each of the given package paths
* ("workspace" paths in npm/yarn/pnpm terms) within a monorepo.
*
* NOTE: As of writing, this will start promises to read all package.json files in parallel,
* without direct concurrency control.
*
* This is an internal helper used by `getWorkspaces` implementations for different managers.
*
* @param packagePaths Paths to packages within a monorepo
* @returns Array of workspace package infos
* @internal
*/
async function getWorkspacePackageInfoAsync(packagePaths) {
if (!packagePaths) {
return [];
}
const workspacePkgPromises = packagePaths.map(async (workspacePath) => {
const packageJsonPath = path_1.default.join(workspacePath, "package.json");
try {
const packageJson = JSON.parse(await promises_1.default.readFile(packageJsonPath, "utf-8"));
return {
name: packageJson.name,
path: workspacePath,
packageJson: (0, infoFromPackageJson_1.infoFromPackageJson)(packageJson, packageJsonPath),
};
}
catch (err) {
(0, logging_1.logVerboseWarning)(`Error reading or parsing ${packageJsonPath} while getting workspace package info`, err);
return null;
}
});
return (await Promise.all(workspacePkgPromises)).filter(Boolean);
}
exports.getWorkspacePackageInfoAsync = getWorkspacePackageInfoAsync;
//# sourceMappingURL=getWorkspacePackageInfo.js.map