in src/docgen/view/documentation.ts [182:236]
public async toJson(options: RenderOptions): Promise<Json<Schema>> {
const language = options.language ?? Language.TYPESCRIPT;
const loose = options.loose ?? true;
const validate = options.validate ?? false;
const { assembly, transpile } = await this.languageSpecific(language, { loose, validate });
const assemblyFqn = `${assembly.name}@${assembly.version}`;
const targets = assembly.targets;
if (!targets) {
throw new Error(`Assembly ${assemblyFqn} does not have any targets defined`);
}
const isSupported = language === Language.TYPESCRIPT || assembly.targets[language.targetName];
if (!isSupported) {
throw new LanguageNotSupportedError(`Laguage ${language} is not supported for package ${assemblyFqn}`);
}
const submodule = options?.submodule ? this.findSubmodule(assembly, options.submodule) : undefined;
let readme: MarkdownDocument | undefined;
if (options?.readme ?? true) {
readme = new Readme(transpile, assembly, submodule).render();
}
let apiReference: ApiReference | undefined;
if (options?.apiReference ?? true) {
try {
apiReference = new ApiReference(transpile, assembly, submodule);
} catch (error) {
if (!(error instanceof Error)) {
throw error;
}
throw maybeCorruptedAssemblyError(error) ?? error;
}
}
const contents: Schema = {
version: CURRENT_SCHEMA_VERSION,
language: language.toString(),
metadata: {
packageName: assembly.name,
packageVersion: assembly.version,
submodule: submodulePath(submodule),
},
readme: readme?.render(),
apiReference: apiReference?.toJson(),
};
return new Json(contents);
}