Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

@nfjs/back-openapi

Package Overview
Dependencies
Maintainers
3
Versions
1
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@nfjs/back-openapi

Openapi gathering from sources and serving

latest
Source
npmnpm
Version
1.0.0
Version published
Maintainers
3
Created
Source

@nfjs/back-openapi

ОГЛАВЛЕНИЕ

  • Используемые понятия
  • Принцип работы
  • Конфигурация

Используемые понятия

Документ - сформированное описание доступных роутов бэкенда в формате openapi Swagger - визуальное представление документа в браузере, размещенной с помощью библиотеки swagger-ui-dist jsdoc - формат описания комментариев для javascript

Назначение

Модуль позволяет при старте приложения собрать openapi документ по yaml файлам и jsdoc комментариям в подключенных приложением модулях и запустить swagger на основе этого документа по указанному в конфигурации пути.

Принцип работы

Сначала происходит поиск всех файлов предположительно содержащих нужное описание. Это

  • yaml файлы, в которых могут быть куски общего документа. Содержание их должно начинать от корневых понятий спецификации, чаще всего paths,components

  • файлы, в которых присутствуют jsdoc комментарии с тегами @typedef и @openapi. Примеры приведены ниже.

  • файлы с моделями, отнаследованными от @nfjs/back-dbfw/model Для каждого типа можно задать паттерн для поиска относительно корня приложения и только в подключенных модулях приложения в конфигурации инструмента. Структуры yaml из файлов и извлечённые из комментариев @openapi приводятся к объектам javascript-а и объединяются слиянием в результирующий документ. Проводится поиск всех $ref ссылок вида '#/components/schemas/ИмяСхемы' и отсутствующие еще в документе ищутся среди приведенных к формату json-schema типов из комментариев @typedef и моделей бэкенда. Готовый документ, swagger по этому документу и ошибки возникшие в процессе сбора в зависимости от конфигурации назначается на роуты бэкенда.

  • Пример @openapi комментария

/**
 * @openapi
 * paths:
 *   /r2:
 *     post:
 *       summary: post r2
 *       description: post r2
 *       requestBody:
 *         $ref: '#/components/requestBodies/r2'
 *       responses:
 *         default:
 *           $ref: '#/components/responses/r2'
 * components:
 *   responses:
 *     r2:
 *       description: response r2
 *       content:
 *         application/json:
 *           schema:
 *             type: object
 *             properties:
 *               uid:
 *                 type: string
 *                 format: uuid
 *   requestBodies:
 *     r1:
 *       description: body r1
 *       content:
 *         application/json:
 *           schema:
 *             $ref: '#/components/schemas/Dto2'
 */

Пример @typedef комментария с поддерживаемыми вариантами описания

/**
 * Тип
 * @typedef {Object} Typ
 * @property {string} prim Примитив
 * @property {Array<string>} arrPrim1 Массив примитивов вариант 1
 * @property {string[]} arrPrim2 Массив примитивов вариант2
 * @property {Object} obj Объект с отдельными свойствами
 * @property {string} obj.prim Свойство объекта
 * @property {{str: string, num: number}} inlineObj Объект сразу с описанием
 * @property {string} [optional] Необязательное для наличия в типе свойство
 * @property {string|Object} multi Вариативный тип
 * @property {1|2|3} numEnum Числовое перечисление
 * @property {'a'|'b'|'ab'} strEnum Строковое перечисление
 * @property {AnotherTyp} atype Тип описанный в отдельном @typedef 
 * @property {Array<AnotherTyp>} arrAtype Массив типа описанного в отдельном @typedef, возможен также AnotherTyp[]
 */

Дополнительные json-schema атрибуты свойств объектов задаются в формате: {ИмяСвойства} ИмяАтрибута ЗначениеАтрибута

/**
 * @typedef {Object} DataObj
 * @property {string} dat
 * @propertyOpenapi {dat} format date
 * @propertyOpenapi {dat} example 01.01.1990
 */

Если необходимо внести изменения в подговленный документ, то в nf-module.js модуля примерно следующее:

import { container } from "@nfjs/core";
const meta = { require: { after: ['@nfjs/back-openapi'] } };
async function init() {
    const doc = container['openapi-doc'];
    doc.info.title = 'Новый заголовок';
}

Конфигурация

СвойствоТипНазначениеЗначение по умолчанию
denySwaggerbooleanОтключить автоматический сбор openapi документаfalse
denyRouteErrorsbooleanОтключить доступ к ошибкам при автоматическом сборе openapi документаfalse
routeStringОтносительный адрес, на котором будут доступны swagger, сам документ и ошибки сбора/@nfjs/back-openapi
gatherObjectНастройки для сборщика подходящих файлов
.yamlPathPatternStringПаттерн для поиска yaml файлов**/*.yaml
.jsdocPathPatternStringфайлов с jsdoc комментариями**/*.js
.modelPathPatternStringмоделей бэкенда @nfjs/back-dbfw/modelmodels/index.js

FAQs

Package last updated on 25 Feb 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts