📚

TypeScriptのenumをOpen API形式に変換する

2023/03/30に公開

typeconv という便利ツールによりtsをOpen API形式に変換することができるが、enum はサポートされていない。
enum は撲滅していきたいが、事情で変更できないときのために変換する。

ts-morph を使うとASTをts上で操作できるので enum を取ってきてOpenAPI形式で出力する。

import {Project} from 'ts-morph';

function genEnums(dirNames: string[]) {
  const project = new Project();
  project.addSourceFilesAtPaths(dirNames.map(dirName => `${dirName}/**/*{.d.ts,.ts}`));

  const result = project.getSourceFiles().reduce<string>((ret, srcFile) => {
    const enums = srcFile.getEnums();
    for (const e of enums) {
      const name = e.getName();
      const members = e.getMembers();
      const membersStr = members.map(m => `    - ${m.getValue()}`).join('\n');
      const oapi = `
${name}:
  type: string
  enums:
${membersStr}
`;
      ret += oapi;
    }
    return ret;
  }, '');

  console.log(result);
}

Discussion