runtime/entrypoints/document.entrypoint.ts
runtime/entrypoints/document.entrypoint.ts is a file in GovLab Docs. 97 lines of code and 11 definitions.
import { FAILURE_EXIT, FLAG_NAMES } from "#configuration/constants/invocation.constants";
import { MARKDOWN_SUFFIX, PACKAGE_FILE } from "#configuration/constants/document.constants";
import {
deadScriptPath,
deadScriptsFailure,
scriptSummary,
strictFailure,
} from "#configuration/strings/finding.strings";
import { flagValue, hasFlag, resolveArgv } from "@govlab/argv";
import { print, printErr } from "#core/reporters/base.reporter";
import { DOCUMENT_ARGV } from "#configuration/configs/invocation.config";
import { DOCUMENT_USAGE } from "#configuration/strings/invocation.strings";
import { DocValidator } from "#core/coordinators/validation.coordinator";
import type { DocsHost } from "#types/environment.types";
import type { ParsedArgv } from "@govlab/argv";
import { ROOT } from "@ssot/paths";
import { deadScriptRefs } from "#core/validators/package.validator";
import { docsHostFor } from "#core/factories/environment.factory";
import { indexDirectory } from "#core/persistence/catalog.persistence";
import process from "node:process";
import { runCatalog } from "#core/coordinators/catalog.coordinator";
import { runFix } from "#core/coordinators/markdown.coordinator";
import { runNew } from "#core/coordinators/template.coordinator";
const flagText = function flagText(argv: ParsedArgv, name: string): string {
return flagValue(argv, name) ?? "";
};
const checkScripts = function checkScripts(host: DocsHost): number {
const manifests = host.walk(host.root, PACKAGE_FILE);
const dead = manifests.flatMap((pkgPath) =>
deadScriptRefs(pkgPath).map((ref) => deadScriptPath(host.relative(pkgPath), ref.script, ref.path)),
);
for (const line of dead) {
printErr(line);
}
print(scriptSummary(dead.length, manifests.length));
return dead.length;
};
const runValidate = async function runValidate(host: DocsHost, strict: boolean): Promise<boolean> {
const docFindings = await new DocValidator(host.ctx).run(host.walk(host.root, MARKDOWN_SUFFIX));
const deadScripts = checkScripts(host);
if (deadScripts > 0) {
printErr(deadScriptsFailure(deadScripts));
}
if (strict && docFindings > 0) {
printErr(strictFailure(docFindings));
}
return deadScripts === 0 && !(strict && docFindings > 0);
};
const newDocument = function newDocument(host: DocsHost, argv: ParsedArgv): void {
const type = flagText(argv, FLAG_NAMES.type);
runNew(
{ locationOptions: host.locationOptions, registries: host.registries, root: host.root, userReg: host.userReg },
{
concern: flagText(argv, FLAG_NAMES.concern),
form: type.length > 0 ? type : flagText(argv, FLAG_NAMES.form),
member: flagText(argv, FLAG_NAMES.member),
name: flagText(argv, FLAG_NAMES.name),
status: flagText(argv, FLAG_NAMES.status),
subject: flagText(argv, FLAG_NAMES.subject),
summary: flagText(argv, FLAG_NAMES.docSummary),
},
);
};
const run = async function run(argv: ParsedArgv): Promise<boolean> {
const host = await docsHostFor(ROOT);
if (hasFlag(argv, FLAG_NAMES.fix)) {
runFix(host);
return true;
}
if (hasFlag(argv, FLAG_NAMES.validate)) {
return runValidate(host, hasFlag(argv, FLAG_NAMES.strict));
}
if (hasFlag(argv, FLAG_NAMES.catalog)) {
await runCatalog(
{
docs: host.walk(host.root, MARKDOWN_SUFFIX),
relative: host.relative,
root: host.root,
rootPrefix: host.rootPrefix,
},
indexDirectory(),
);
return true;
}
if (hasFlag(argv, FLAG_NAMES.new)) {
newDocument(host, argv);
return true;
}
printErr(DOCUMENT_USAGE);
return false;
};
try {
process.exitCode = (await run(resolveArgv(DOCUMENT_ARGV))) ? 0 : FAILURE_EXIT;
} catch (error) {
printErr(error instanceof Error ? error.message : String(error));
process.exitCode = FAILURE_EXIT;
}