runtime/entrypoints/comment.entrypoint.ts

runtime/entrypoints/comment.entrypoint.ts is a file in GovLab Quality. 41 lines of code and 10 definitions.

import {
    COMMENT_MODES,
    DEFAULT_COMMENT_MODE,
    EXTRACT_MODE,
    FAILURE_EXIT,
    FLAGS,
    KEEP_MODE,
    LIST_SEPARATOR,
} from "#configuration/constants/invocation.constants";
import { commentFailure, keepModeLine, modeLine } from "#configuration/strings/comment.strings";
import { flagValue, resolveArgv } from "@govlab/argv";
import { runExtract, runStrip } from "#core/coordinators/comment.coordinator";
import { COMMENT_ARGV } from "#configuration/configs/invocation.config";
import { loadGovlabConfig } from "#core/loaders/config.loader";
import { masterExcludeMarkers } from "#core/selectors/exclusions.selector";
import path from "node:path";
import { pathExclusion } from "#core/matchers/exclusions.matcher";
import process from "node:process";

const argv = resolveArgv(COMMENT_ARGV);
const workspace = process.cwd();
const requested = flagValue(argv, FLAGS.mode) ?? DEFAULT_COMMENT_MODE;
const mode = COMMENT_MODES.has(requested) ? requested : DEFAULT_COMMENT_MODE;
const [rootArg] = argv.positionals;
const root = rootArg === undefined ? workspace : path.resolve(rootArg);

const run = async function run(): Promise<void> {
    if (mode === KEEP_MODE) {
        process.stdout.write(keepModeLine);
        return;
    }
    process.stdout.write(modeLine(mode, root));
    const ignore = (flagValue(argv, FLAGS.ignore) ?? "").split(LIST_SEPARATOR).filter((entry) => entry.length > 0);
    const markers = masterExcludeMarkers(await loadGovlabConfig(workspace), "comments");
    const excluded = pathExclusion(workspace, [...markers, ...ignore]);
    await (mode === EXTRACT_MODE
        ? runExtract(root, flagValue(argv, FLAGS.out) ?? null, excluded)
        : runStrip(root, excluded));
};

await run().catch((error: unknown) => {
    process.stderr.write(commentFailure(error instanceof Error ? error.message : String(error)));
    process.exitCode = FAILURE_EXIT;
});