2026-03-15 19:40:09 +08:00
|
|
|
import type { Package } from '@manypkg/get-packages';
|
|
|
|
|
|
2024-05-19 21:20:42 +08:00
|
|
|
import { dirname } from 'node:path';
|
|
|
|
|
|
2026-03-15 19:40:09 +08:00
|
|
|
import * as manypkg from '@manypkg/get-packages';
|
|
|
|
|
import * as findUp from 'find-up';
|
|
|
|
|
|
|
|
|
|
const { getPackages: getPackagesFunc, getPackagesSync: getPackagesSyncFunc } =
|
|
|
|
|
manypkg;
|
|
|
|
|
const { findUpSync } = findUp;
|
2024-05-19 21:20:42 +08:00
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 查找大仓的根目录
|
|
|
|
|
* @param cwd
|
|
|
|
|
*/
|
|
|
|
|
function findMonorepoRoot(cwd: string = process.cwd()) {
|
2024-10-20 22:30:20 +08:00
|
|
|
const lockFile = findUpSync('pnpm-lock.yaml', {
|
|
|
|
|
cwd,
|
|
|
|
|
type: 'file',
|
|
|
|
|
});
|
2024-05-19 21:20:42 +08:00
|
|
|
return dirname(lockFile || '');
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取大仓的所有包
|
|
|
|
|
*/
|
|
|
|
|
function getPackagesSync() {
|
|
|
|
|
const root = findMonorepoRoot();
|
|
|
|
|
return getPackagesSyncFunc(root);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取大仓的所有包
|
|
|
|
|
*/
|
|
|
|
|
async function getPackages() {
|
|
|
|
|
const root = findMonorepoRoot();
|
|
|
|
|
|
|
|
|
|
return await getPackagesFunc(root);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 获取大仓指定的包
|
|
|
|
|
*/
|
|
|
|
|
async function getPackage(pkgName: string) {
|
|
|
|
|
const { packages } = await getPackages();
|
2026-03-15 19:40:09 +08:00
|
|
|
return packages.find((pkg: Package) => pkg.packageJson.name === pkgName);
|
2024-05-19 21:20:42 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export { findMonorepoRoot, getPackage, getPackages, getPackagesSync };
|