@pagopa/dx-cli
Version:
A CLI useful to manage DX tools.
53 lines (52 loc) • 2.72 kB
JavaScript
import { getLogger } from "@logtape/logtape";
import { join } from "node:path";
const detectFromLockFile = async (dependencies, repositoryRoot) => {
const { repositoryReader } = dependencies;
const pnpmResult = await repositoryReader.fileExists(join(repositoryRoot, "pnpm-lock.yaml"));
if (pnpmResult.isOk() && pnpmResult.value)
return "pnpm";
const yarnResult = await repositoryReader.fileExists(join(repositoryRoot, "yarn.lock"));
if (yarnResult.isOk() && yarnResult.value)
return "yarn";
const npmResult = await repositoryReader.fileExists(join(repositoryRoot, "package-lock.json"));
if (npmResult.isOk() && npmResult.value)
return "npm";
return undefined;
};
const detectPackageManager = async (dependencies, repositoryRoot) => {
// Try to read package.json to get packageManager field
const packageJsonResult = await dependencies.packageJsonReader.readPackageJson(repositoryRoot);
const packageManager = packageJsonResult.map((pkg) => pkg.packageManager).unwrapOr(undefined) ??
(await detectFromLockFile(dependencies, repositoryRoot));
return packageManager ?? "npm";
};
const detectNodeVersion = async ({ repositoryReader }, nodeVersionFilePath) => await repositoryReader
.readFile(nodeVersionFilePath)
.map((nodeVersion) => nodeVersion.trim())
.unwrapOr(undefined);
const detectTerraformVersion = async ({ repositoryReader }, terraformVersionFilePath) => await repositoryReader
.readFile(terraformVersionFilePath)
.map((tfVersion) => tfVersion.trim())
.unwrapOr(undefined);
const detectTurboVersion = async (dependencies, repositoryRoot) => {
const packageJsonResult = await dependencies.packageJsonReader.readPackageJson(repositoryRoot);
return packageJsonResult
.map((pkg) => pkg.devDependencies.get("turbo")?.trim())
.unwrapOr(undefined);
};
export const getInfo = (dependencies) => async () => {
// Get repository root, fallback to current working directory if not in a repository
const repositoryRoot = await dependencies.repositoryReader
.findRepositoryRoot()
.unwrapOr(process.cwd());
return {
node: await detectNodeVersion({ repositoryReader: dependencies.repositoryReader }, `${repositoryRoot}/.node-version`),
packageManager: await detectPackageManager(dependencies, repositoryRoot),
terraform: await detectTerraformVersion({ repositoryReader: dependencies.repositoryReader }, `${repositoryRoot}/.terraform-version`),
turbo: await detectTurboVersion(dependencies, repositoryRoot),
};
};
export const printInfo = (result) => {
const logger = getLogger("json");
logger.info(JSON.stringify(result));
};