Skip to content

Commit b13ef65

Browse files
committed
Update OpenAPI generation to use Set for tags
1 parent dc3c94c commit b13ef65

File tree

6 files changed

+23
-11
lines changed

6 files changed

+23
-11
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ npm i openapi-jsonrpc-jsdoc --save-dev
1313
```js
1414
// api/api-v1.js
1515
/**
16+
* @json-rpc
1617
* @description Название API
1718
* @param {object} parameters - params
1819
* @param {string} parameters.id - id

index.js

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ async function openapiJsonrpcJsdoc({ files, securitySchemes = {}, packageUrl, se
1313
dictionaries: ['jsdoc'],
1414
hierarchy: true,
1515
});
16-
const tags = [];
16+
const tags = new Set();
1717
const temporaryDocument = {
1818
'x-send-defaults': true,
1919
'openapi': '3.0.0',
@@ -59,25 +59,33 @@ async function openapiJsonrpcJsdoc({ files, securitySchemes = {}, packageUrl, se
5959
BasicAuth: [],
6060
},
6161
],
62-
'tags': tags,
62+
'tags': [],
6363
};
6464
const requiredSchema = ['method', 'id', 'jsonrpc'];
65-
for (const module of documents) {
66-
const apiName = module.meta.filename.replace(/.js$/, '');
65+
prepare: for (const module of documents) {
66+
let isJsonRpc = false;
6767

6868
if (module.tags && Array.isArray(module.tags)) {
69-
for (const tag of module.tags) {
70-
tags.push(...new Set(tag.value.split(',').map(t => t.trim())));
69+
for (const {title, value} of module.tags) {
70+
if (title === 'json-rpc') {
71+
isJsonRpc = true;
72+
} else if (title === 'tags' && value) {
73+
value.split(',').map(t => t.trim()).forEach(t => tags.add(t));
74+
}
7175
}
7276
}
77+
if (!isJsonRpc) {
78+
continue prepare;
79+
}
80+
const apiName = module.meta.filename.replace(/.js$/, '');
7381

7482
const schema = {
7583
post: {
7684
operationId: `${module.meta.filename}`,
7785
deprecated: module.deprecated || false,
7886
summary: `/${apiName}`,
7987
description: module.description,
80-
tags: tags,
88+
tags: Array.from(tags),
8189
parameters: [],
8290
responses: {
8391
'200': {

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "openapi-jsonrpc-jsdoc",
3-
"version": "1.2.0",
3+
"version": "1.2.1",
44
"description": "Transform JSDoc-annotated JSON-RPC 2.0 methods into OpenAPI 3.0 specifications. Auto-generates REST API documentation with complete schemas, parameters, and endpoint definitions.",
55
"main": "index.js",
66
"scripts": {

test/api/v1.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
/**
2+
* @json-rpc
23
* @description Название API
34
* @param {object} parameters - params
45
* @param {string} parameters.id - id

test/api/v2.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
/**
2+
* @json-rpc
23
* @deprecated
34
* @description Название API 2
45
* @return {null}
56
*/
67
module.exports = () => {
78
return null;
8-
};
9+
};

test/index.test.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
const test = require('ava');
22
const express = require('express');
3-
const http = require('http');
4-
const path = require('path');
3+
const http = require('node:http');
4+
const path = require('node:path');
55
const OpenApiValidator = require('express-openapi-validator');
66
const openapiJSONRpcJSDoc = require('../index');
77

@@ -60,6 +60,7 @@ test('t1', t => {
6060
t.false(v1Test.post.deprecated);
6161
t.is(typeof v1Test.post.description, 'string');
6262
t.true(Array.isArray(v1Test.post.tags));
63+
t.deepEqual(v1Test.post.tags, Array.from(new Set(v1Test.post.tags)));
6364
t.true(Array.isArray(v1Test.post.parameters));
6465
const v1RequestBodySchema = v1Test.post.requestBody.content['application/json'].schema;
6566
t.is(v1RequestBodySchema.type, 'object');

0 commit comments

Comments
 (0)