typedoc
Version:
Create api documentation for TypeScript projects.
112 lines (111 loc) • 3.36 kB
JavaScript
// src/lib/cli.ts
import * as td from "typedoc";
var ExitCodes = {
Ok: 0,
OptionError: 1,
CompileError: 3,
ValidationError: 4,
OutputError: 5,
ExceptionThrown: 6,
Watching: 7
};
void main();
async function main() {
let app;
try {
const start = Date.now();
app = await td.Application.bootstrapWithPlugins({}, [
new td.ArgumentsReader(0),
new td.TypeDocReader(),
new td.PackageJsonReader(),
new td.TSConfigReader(),
new td.ArgumentsReader(300).ignoreErrors()
]);
const exitCode = await run(app);
if (exitCode !== ExitCodes.Watching) {
app.logger.verbose(`Full run took ${Date.now() - start}ms`);
logRunSummary(app.logger);
}
process.exit(exitCode);
} catch (error) {
console.error("TypeDoc exiting with unexpected error:");
console.error(error);
if (app?.options.getValue("skipErrorChecking")) {
console.error(
"Try turning off --skipErrorChecking. If TypeDoc still crashes, please report a bug."
);
}
process.exit(ExitCodes.ExceptionThrown);
}
}
async function run(app) {
if (app.options.getValue("version")) {
console.log(app.toString());
return ExitCodes.Ok;
}
if (app.options.getValue("help")) {
console.log(app.options.getHelp());
return ExitCodes.Ok;
}
if (app.options.getValue("showConfig")) {
console.log(app.options.getRawValues());
return ExitCodes.Ok;
}
if (app.logger.hasErrors()) {
return ExitCodes.OptionError;
}
if (app.options.getValue("treatWarningsAsErrors") && app.logger.hasWarnings()) {
return ExitCodes.OptionError;
}
if (app.options.getValue("watch") || process.env["TYPEDOC_FORCE_WATCH"]) {
const continueWatching = await app.convertAndWatch(async (project2) => {
app.validate(project2);
await app.generateOutputs(project2);
});
return continueWatching ? ExitCodes.Watching : ExitCodes.OptionError;
}
const project = await app.convert();
if (!project) {
return ExitCodes.CompileError;
}
if (app.options.getValue("treatWarningsAsErrors") && app.logger.hasWarnings()) {
return ExitCodes.CompileError;
}
const preValidationWarnCount = app.logger.warningCount;
app.validate(project);
const hadValidationWarnings = app.logger.warningCount !== preValidationWarnCount || app.logger.validationWarningCount != 0;
if (app.logger.hasErrors()) {
return ExitCodes.ValidationError;
}
if (hadValidationWarnings && (app.options.getValue("treatWarningsAsErrors") || app.options.getValue("treatValidationWarningsAsErrors"))) {
return ExitCodes.ValidationError;
}
if (app.options.getValue("emit") !== "none") {
await app.generateOutputs(project);
if (app.logger.hasErrors()) {
return ExitCodes.OutputError;
}
if (app.options.getValue("treatWarningsAsErrors") && app.logger.hasWarnings()) {
return ExitCodes.OutputError;
}
}
return ExitCodes.Ok;
}
function logRunSummary(logger) {
const { errorCount, warningCount } = logger;
if (errorCount) {
logger.error(
td.i18n.found_0_errors_and_1_warnings(
errorCount.toString(),
warningCount.toString()
)
);
} else if (warningCount) {
logger.warn(
td.i18n.found_0_errors_and_1_warnings(
errorCount.toString(),
warningCount.toString()
)
);
}
}