
Product
Announcing Precomputed Reachability Analysis in Socket
Socket’s precomputed reachability slashes false positives by flagging up to 80% of vulnerabilities as irrelevant, with no setup and instant results.
openapi-modifier
Advanced tools
OpenAPI описывающий бекендное API далеко не всегда идеальное: содержит ошибки, неточности или какие-то особенности ломают другие инструменты, например, кодогенерацию или генерацию типов.
OpenAPI описывающий бекендное API далеко не всегда идеальное: содержит ошибки, неточности или какие-то особенности ломают другие инструменты, например, кодогенерацию или генерацию типов.
Данный инструмент предназначен для облегчения работы с OpenAPI - для легкой модификации OpenAPI спецификации и удобного описания/документации изменений для истории/пояснений.
Частые кейсы применения:
При помощи правила можно убрать из сущности поле, и сгенерировать типизацию без нее, и если запустить проверку типизации в проекте TS поможет найти все места использования.
{
"rule": "patch-schemas"
}
[!IMPORTANT]
Поддерживает OpenAPI 3.1, 3.0. Мы не проверяли поддержку OpenAPI 2, так как формат является устаревшим и рекомендуем мигрировать вашу документацию на OpenAPI 3.0.
Например имеем входной файл спецификации/документации api от бекенд разработчиков. Например, скачен через curl cli из github.
Пишем файл конфигурации, описывающий все что нужно поменять в исходной спецификации/документации с пояснительными комментариями:
const config: ConfigT = {
pipeline: [
// JIRA-10207 - new feature API for epic JIRA-232
{
rule: 'merge-openapi-spec',
config: {
path: 'input/feature-openapi-JIRA-232.yaml',
},
},
// ...
// JIRA-10212 - wrong docs, waiting JIRABACKEND-8752
{
rule: 'patch-schemas',
config: [
{
descriptor: {
type: 'component-schema',
componentName: 'Pet',
},
patchMethod: 'merge',
schemaDiff: {
properties: {
id: {
type: 'string',
format: 'uuid',
},
},
},
},
],
},
// ...
// JIRA-11236 - removed deprecated endpoint, waiting JIRABACKEND-3641
{
rule: 'filter-endpoints',
config: {
disabled: [
{
path: '/v1/pets/{petId}',
method: 'delete',
},
],
},
},
// ...
}
Далее при помощи этого файла конфигурации и cli openapi-modifier, изменяем исходный файл спецификации/документации и получается модифицированная спецификация/документация.
Далее при помощи, к примеру cli dtsgenerator, генерируем из модифицированной спецификации/документаци файл типизации для api, которую уже используем в коде проекта.
При помощи npx
npx openapi-modifier --input=input/openapi.yml --output=output/openapi.yml --config=openapi-modifier.config.js
или при помощи npm
npm i --save-dev openapi-modifier
openapi-modifier --input=input/openapi.yml --output=output/openapi.yml --config=openapi-modifier.config.js
Параметры:
Опция | Описание | Пример | Дефолтное |
---|---|---|---|
input | [обязательный] входной файл, специфиакция/документация в формате openapi | input/openapi.yml | |
output | [обязательный] выходной файл, специфиакция/документация в формате opeanpi | output/openapi.yml | |
config | путь до файла конфигурации. Детальное описание конфигурации см. ниже | openapi-modifier.config.js | openapi-modifier.config.(js\ts\json\yaml\yml) |
Демонстрация на примере использования
Можно использовать конфиги в след. расширениях: .ts
, .js
, .yaml
, .yml
, .json
.
Если путь до конфигурации не указан, конфигурации по-умолчанию берется из файла openapi-modifier.config.js
относительно директории запуска.
Пример конфигурации в .ts
. Наример, назовем файл openapi-modifier.config.ts
.
import type { ConfigT } from 'openapi-modifier';
const config: ConfigT = {
input: './input/openapi.yaml',
output: './output/openapi.yaml',
rules: [
// ... more rules
{
name: 'remove-operation-id',
disabled: true,
},
// ... more rules
],
};
export default config;
Пример конфигурации в .js
module.exports = {
input: './input/openapi.yaml',
output: './output/openapi.yaml',
rules: [
{
name: 'remove-operation-id',
disabled: true,
},
// ...
],
};
Параметры:
Опция | Описание | Дефолтное |
---|---|---|
logger.minLevel | [обязательный] входной файл, специфиакция/документация в формате openapi | |
input | [обязательный] выходной файл, специфиакция/документация в формате opeanpi | |
output | [обязательный] выходной файл, специфиакция/документация в формате opeanpi | |
pipeline | последовательность применяемых правил модификации к входному файлу. Детальное описание конфигурации см. ниже | ./openapi-modifier.config.js или ./openapi-modifier.config.ts |
Простой пример конфигурации, например файл openapi-modifier.config.json
:
{
"pipeline": [
{
"rule": "remove-operation-id"
}
]
}
import { openapiModifier } from 'openapi-modifier';
// ...
await openapiModifier({
input: 'input/openapi.yml',
output: 'output/openapi.yml',
pipeline: [
// ... more rules
{
rule: 'remove-operation-id',
config: {
ignore: [],
},
},
// ... more rules
],
});
Демонстрация на примере использования
или используя отдельный файл конфигурации
import { openapiModifier } from 'openapi-modifier';
// ...
await openapiModifier({
input: 'input/openapi.yml',
output: 'output/openapi.yml',
config: 'openapi-modifier.config.ts',
});
Необходимо в папку src/rules
добавить папку с именем вновь созданного правила с 6 файлами:
index.ts
- основной файл с логикой правила - должны быть экспортированы: processor
(дефолтный экспорт) и configSchema
(именованный экспорт)index.test.ts
- тесты на правило покрывающие все поля конфигурации и примеры их использования/docs/_description.md
- файл с описанием правила/docs/_motivation.md
- файл с описанием мотивации создания правила с примерами (в каких случаях на практике может быть полезно)/docs/_config.md
- файл с описанием конфигурации для правилаДля вывода подробных логов необходимых для отладки см. пункт "Отладка".
Все названия правил должны начинаться с обозначения действия.
Внутри используется для детального логирования npm-пакет - debug
Для вывода всех debug логов:
DEBUG=openapi-modifier:* openapi-modifier
Для вывода debug логов по правилу, например по правилу remove-operation-id
:
DEBUG=openapi-modifier:rule:remove-operation-id openapi-modifier
TODO описание параметра verbose
Наиболее приближенный к реальному использованию пример в нем отражено:
Его конфиг:
Другие примеры:
Больше примеров как можно использовать openapi:
Подробная документация по cli simple-text-file-modifier
FAQs
This package allows you to automate the process of modifying OpenAPI specifications by applying a set of predefined rules
The npm package openapi-modifier receives a total of 97 weekly downloads. As such, openapi-modifier popularity was classified as not popular.
We found that openapi-modifier demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
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.
Product
Socket’s precomputed reachability slashes false positives by flagging up to 80% of vulnerabilities as irrelevant, with no setup and instant results.
Product
Socket is launching experimental protection for Chrome extensions, scanning for malware and risky permissions to prevent silent supply chain attacks.
Product
Add secure dependency scanning to Claude Desktop with Socket MCP, a one-click extension that keeps your coding conversations safe from malicious packages.