Данный скрипт является надстройкой над библиотекой https://www.npmjs.com/package/openapi-typescript-codegen.
При генерации через исходную библиотеку напрямую без скрипта, возможны ошибки из-за некоторых неучтенных моментов (например пропуск генерации по схемам, содержащим определенные последовательности в названиях, или остутствие атрибута required в схемах, приводящее к поломке кода при замене моделей). Поэтому для прикладных задач был разработан этот скрипт, который решает эти моменты, выполняя замены по заданному набору правил (getModifiedData), и проставляя атрибут required на компонентах схемы (addRequiredKeys).
Скрипт позволяет через ту же команду производить повторную загрузку моделей в случае изменений на бэкенде (оригинальная библиотека не дает билдить в имеющуюся папку).
Для установки зависимостей выполните команду:
yarn
Либо:
npm i
Конфигурация расположена в файле getTestApi.js В конфигурации замените url на путь к JSON-у от Swagger-а, замените folderPath на путь к папке, по которой будут лежать ваши модели.
const url = "https://petstore.swagger.io/v2/swagger.json";
const folderPath = "src/models/TestApi/";
const swaggerFilePath = folderPath + "testApi.json";
Также замените пути до скрипта и до папки в package.json/, и измените само название файла запуска скрипта.
"scripts": {
"typegen": "node ./getTestApi.js && npx openapi --input ./src/models/TestApi/testApi.json --output ./src/models/TestApi/ "
},
Далее, запускайте скрипт командой:
yarn typegen
При запуске удалится папка со старыми моделями (при её наличии), далее библиотека создает папку src/models , в которой, в зависимости от вашей конфигурации, будут сами модели, API для них, и core файлы. Ознакомьтесь с конфигурацией здесь https://github.com/ferdikoomen/openapi-typescript-codegen.
Если в вашем проекте уже написаны запросы к API, и вам нужна только генерация типов, то добавьте к команде
--exportServices false --exportCore false
Итоговый билд удобно декомпозирован по папкам для моделей/сервисов/ядра.
Папки скрипта и команду для запуска можно сразу переносить себе в проект и пользоваться.
