/
getPackageInfos.ts
53 lines (46 loc) · 1.57 KB
/
getPackageInfos.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import fs from "fs";
import path from "path";
import { PackageInfo, PackageInfos } from "./types/PackageInfo";
import { infoFromPackageJson } from "./infoFromPackageJson";
import { getWorkspaces, getWorkspacesAsync } from "./workspaces/getWorkspaces";
export function getPackageInfos(cwd: string) {
const packageInfos: PackageInfos = {};
const workspacePackages = getWorkspaces(cwd);
if (workspacePackages.length) {
for (const pkg of workspacePackages) {
packageInfos[pkg.name] = pkg.packageJson;
}
} else {
const rootInfo = tryReadRootPackageJson(cwd);
if (rootInfo) {
packageInfos[rootInfo.name] = rootInfo;
}
}
return packageInfos;
}
export async function getPackageInfosAsync(cwd: string) {
const packageInfos: PackageInfos = {};
const workspacePackages = await getWorkspacesAsync(cwd);
if (workspacePackages.length) {
for (const pkg of workspacePackages) {
packageInfos[pkg.name] = pkg.packageJson;
}
} else {
const rootInfo = tryReadRootPackageJson(cwd);
if (rootInfo) {
packageInfos[rootInfo.name] = rootInfo;
}
}
return packageInfos;
}
function tryReadRootPackageJson(cwd: string): PackageInfo | undefined {
const packageJsonPath = path.join(cwd, "package.json");
if (fs.existsSync(packageJsonPath)) {
try {
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
return infoFromPackageJson(packageJson, packageJsonPath);
} catch (e) {
throw new Error(`Invalid package.json file detected ${packageJsonPath}: ${(e as Error)?.message || e}`);
}
}
}