import { z } from "incur";
import { projectManagedApplicationGraphEvidence } from "../application/managed/ManagedApplicationGraphService.js";
import { CLI_COMMANDS } from "../cliCommandNames.js";
import { parseCliJsonInput } from "../cliJsonInput.js";
import { logCliCommand } from "../cliLogging.js";
import { projectCliAnalysisResult } from "./projectCliAnalysisResult.js";
import { withCommandCancellation } from "./commandCancellation.js";
import {
evidenceBundleOption,
runEvidenceInputCommand,
} from "./evidenceInputCommand.js";
import type { Logger } from "pino";
import type { CliInstance } from "./types.js";
export const registerProjectManagedApplicationGraph = (
cli: CliInstance,
logger: Logger,
): void => {
cli.command(CLI_COMMANDS.projectManagedApplicationGraph, {
description:
"Project authenticated managed static Evidence into an application graph",
args: z.object({
inputJson: z
.string()
.describe("Inline managed application graph JSON or JSON file path"),
}),
options: z.object({ evidenceBundle: evidenceBundleOption }),
run: ({ args, options }) =>
withCommandCancellation((signal) =>
logCliCommand(logger, "project-managed-application-graph", async () => {
const input = await parseCliJsonInput(
args.inputJson,
"project-managed-application-graph",
signal,
);
if (!input.ok) return input.error;
return runEvidenceInputCommand(
"project_managed_application_graph",
options.evidenceBundle,
signal,
(lookup) =>
Promise.resolve(
projectManagedApplicationGraphEvidence(input.value, lookup, {
signal,
}),
),
).then(projectCliAnalysisResult);
}),
),
});
};