38 lines
1.2 KiB
TypeScript
38 lines
1.2 KiB
TypeScript
import fs from "node:fs";
|
|
import path from "node:path";
|
|
|
|
import { note } from "../terminal/note.js";
|
|
|
|
export function noteSourceInstallIssues(root: string | null) {
|
|
if (!root) return;
|
|
|
|
const workspaceMarker = path.join(root, "pnpm-workspace.yaml");
|
|
if (!fs.existsSync(workspaceMarker)) return;
|
|
|
|
const warnings: string[] = [];
|
|
const nodeModules = path.join(root, "node_modules");
|
|
const pnpmStore = path.join(nodeModules, ".pnpm");
|
|
const tsxBin = path.join(nodeModules, ".bin", "tsx");
|
|
const srcEntry = path.join(root, "src", "entry.ts");
|
|
|
|
if (fs.existsSync(nodeModules) && !fs.existsSync(pnpmStore)) {
|
|
warnings.push(
|
|
"- node_modules was not installed by pnpm (missing node_modules/.pnpm). Run: pnpm install",
|
|
);
|
|
}
|
|
|
|
if (fs.existsSync(path.join(root, "package-lock.json"))) {
|
|
warnings.push(
|
|
"- package-lock.json present in a pnpm workspace. If you ran npm install, remove it and reinstall with pnpm.",
|
|
);
|
|
}
|
|
|
|
if (fs.existsSync(srcEntry) && !fs.existsSync(tsxBin)) {
|
|
warnings.push("- tsx binary is missing for source runs. Run: pnpm install");
|
|
}
|
|
|
|
if (warnings.length > 0) {
|
|
note(warnings.join("\n"), "Install");
|
|
}
|
|
}
|