public async toJson()

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);
  }