📚
TypeScriptのenumをOpen API形式に変換する
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