UNPKG

@pagopa/dx-cli

Version:

A CLI useful to manage DX tools.

53 lines (52 loc) 2.72 kB
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)); };