@visulima/jsdoc-open-api 1.2.2 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/README.md +17 -0
- package/bin/index.js +5 -211
- package/cli/commander/package.json +17 -0
- package/cli/package.json +17 -0
- package/dist/chunk-5JAJAHLD.js +39 -0
- package/dist/chunk-5JAJAHLD.js.map +1 -0
- package/dist/chunk-7NWDLEC5.js +9 -0
- package/dist/chunk-7NWDLEC5.js.map +1 -0
- package/dist/chunk-PLANANJA.mjs +9 -0
- package/dist/chunk-PLANANJA.mjs.map +1 -0
- package/dist/chunk-SQZONOYX.mjs +39 -0
- package/dist/chunk-SQZONOYX.mjs.map +1 -0
- package/dist/cli/commander/index.d.ts +7 -0
- package/dist/cli/commander/index.js +2 -0
- package/dist/cli/commander/index.js.map +1 -0
- package/dist/cli/commander/index.mjs +2 -0
- package/dist/cli/commander/index.mjs.map +1 -0
- package/dist/cli/index.d.ts +10 -0
- package/dist/cli/index.js +2 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/index.mjs +2 -0
- package/dist/cli/index.mjs.map +1 -0
- package/dist/index.js +1 -686
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -686
- package/dist/index.mjs.map +1 -1
- package/package.json +27 -9
package/dist/index.js
CHANGED
|
@@ -1,687 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
2
|
-
function objectMerge(a, b) {
|
|
3
|
-
Object.keys(b).forEach((key) => {
|
|
4
|
-
if (a[key] === void 0) {
|
|
5
|
-
a[key] = {
|
|
6
|
-
...b[key]
|
|
7
|
-
};
|
|
8
|
-
} else {
|
|
9
|
-
Object.keys(b[key]).forEach((subKey) => {
|
|
10
|
-
a[key][subKey] = {
|
|
11
|
-
...a[key][subKey],
|
|
12
|
-
...b[key][subKey]
|
|
13
|
-
};
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
var object_merge_default = objectMerge;
|
|
19
|
-
|
|
20
|
-
// src/spec-builder.ts
|
|
21
|
-
var SpecBuilder = class {
|
|
22
|
-
constructor(baseDefinition) {
|
|
23
|
-
this.openapi = baseDefinition.openapi;
|
|
24
|
-
this.info = baseDefinition.info;
|
|
25
|
-
this.servers = baseDefinition.servers;
|
|
26
|
-
this.paths = baseDefinition.paths || {};
|
|
27
|
-
this.components = baseDefinition.components;
|
|
28
|
-
this.security = baseDefinition.security;
|
|
29
|
-
this.tags = baseDefinition.tags;
|
|
30
|
-
this.externalDocs = baseDefinition.externalDocs;
|
|
31
|
-
}
|
|
32
|
-
addData(parsedFile) {
|
|
33
|
-
parsedFile.forEach((file) => {
|
|
34
|
-
const { paths, components, ...rest } = file;
|
|
35
|
-
object_merge_default(this, {
|
|
36
|
-
paths: paths || {},
|
|
37
|
-
components: components || {}
|
|
38
|
-
});
|
|
39
|
-
Object.entries(rest).forEach(([key, value]) => {
|
|
40
|
-
this[key] = value;
|
|
41
|
-
});
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
};
|
|
45
|
-
var spec_builder_default = SpecBuilder;
|
|
46
|
-
|
|
47
|
-
// src/parse-file.ts
|
|
48
|
-
var _fs = require('fs'); var _fs2 = _interopRequireDefault(_fs);
|
|
49
|
-
var _path = require('path'); var _path2 = _interopRequireDefault(_path);
|
|
50
|
-
var _yaml = require('yaml'); var _yaml2 = _interopRequireDefault(_yaml);
|
|
51
|
-
|
|
52
|
-
// src/util/yaml-loc.ts
|
|
53
|
-
function yamlLoc(string) {
|
|
54
|
-
const split = string.split(/\r\n|\r|\n/);
|
|
55
|
-
const filtered = split.filter((line) => {
|
|
56
|
-
if (/^\s*(#\s*.*)?$/.test(line)) {
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
return line.trim().length > 0;
|
|
60
|
-
});
|
|
61
|
-
return filtered.length;
|
|
62
|
-
}
|
|
63
|
-
var yaml_loc_default = yamlLoc;
|
|
64
|
-
|
|
65
|
-
// src/parse-file.ts
|
|
66
|
-
var ALLOWED_KEYS = /* @__PURE__ */ new Set(["openapi", "info", "servers", "security", "tags", "externalDocs", "components", "paths"]);
|
|
67
|
-
var ParseError = class extends Error {
|
|
68
|
-
};
|
|
69
|
-
var parseFile = (file, commentsToOpenApi3, verbose) => {
|
|
70
|
-
const fileContent = _fs2.default.readFileSync(file, { encoding: "utf8" });
|
|
71
|
-
const extension = _path2.default.extname(file);
|
|
72
|
-
if (extension === ".yaml" || extension === ".yml") {
|
|
73
|
-
const spec = _yaml2.default.parse(fileContent);
|
|
74
|
-
const invalidKeys = Object.keys(spec).filter((key) => !ALLOWED_KEYS.has(key));
|
|
75
|
-
if (invalidKeys.length > 0) {
|
|
76
|
-
const error = new ParseError(`Unexpected keys: ${invalidKeys.join(", ")}`);
|
|
77
|
-
error.filePath = file;
|
|
78
|
-
throw error;
|
|
79
|
-
}
|
|
80
|
-
if (Object.keys(spec).some((key) => ALLOWED_KEYS.has(key))) {
|
|
81
|
-
const loc = yaml_loc_default(fileContent);
|
|
82
|
-
return [{ spec, loc }];
|
|
83
|
-
}
|
|
84
|
-
return [];
|
|
85
|
-
}
|
|
86
|
-
try {
|
|
87
|
-
return commentsToOpenApi3(fileContent, verbose);
|
|
88
|
-
} catch (error) {
|
|
89
|
-
error.filePath = file;
|
|
90
|
-
throw error;
|
|
91
|
-
}
|
|
92
|
-
};
|
|
93
|
-
var parse_file_default = parseFile;
|
|
94
|
-
|
|
95
|
-
// src/webpack/swagger-compiler-plugin.ts
|
|
96
|
-
var _swaggerparser = require('@apidevtools/swagger-parser'); var _swaggerparser2 = _interopRequireDefault(_swaggerparser);
|
|
97
|
-
var _readdir = require('@visulima/readdir');
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
var _process = require('process');
|
|
101
|
-
|
|
102
|
-
// src/jsdoc/comments-to-open-api.ts
|
|
103
|
-
var _commentparser = require('comment-parser');
|
|
104
|
-
var _lodashmergewith = require('lodash.mergewith'); var _lodashmergewith2 = _interopRequireDefault(_lodashmergewith);
|
|
105
|
-
|
|
106
|
-
// src/util/customizer.ts
|
|
107
|
-
var customizer = (objectValue, sourceValue) => {
|
|
108
|
-
if (Array.isArray(objectValue)) {
|
|
109
|
-
return [...objectValue, ...sourceValue];
|
|
110
|
-
}
|
|
111
|
-
return void 0;
|
|
112
|
-
};
|
|
113
|
-
var customizer_default = customizer;
|
|
114
|
-
|
|
115
|
-
// src/jsdoc/comments-to-open-api.ts
|
|
116
|
-
function fixSecurityObject(thing) {
|
|
117
|
-
if (thing.security) {
|
|
118
|
-
thing.security = Object.keys(thing.security).map((s) => {
|
|
119
|
-
return {
|
|
120
|
-
[s]: thing.security[s]
|
|
121
|
-
};
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
var primitiveTypes = /* @__PURE__ */ new Set(["integer", "number", "string", "boolean", "object", "array"]);
|
|
126
|
-
var formatMap = {
|
|
127
|
-
int32: "integer",
|
|
128
|
-
int64: "integer",
|
|
129
|
-
float: "number",
|
|
130
|
-
double: "number",
|
|
131
|
-
date: "string",
|
|
132
|
-
"date-time": "string",
|
|
133
|
-
password: "string",
|
|
134
|
-
byte: "string",
|
|
135
|
-
binary: "string"
|
|
136
|
-
};
|
|
137
|
-
function parseDescription(tag) {
|
|
138
|
-
const rawType = tag.type;
|
|
139
|
-
const isArray = rawType && rawType.endsWith("[]");
|
|
140
|
-
let parsedType;
|
|
141
|
-
if (rawType) {
|
|
142
|
-
parsedType = rawType.replace(/\[]$/, "");
|
|
143
|
-
}
|
|
144
|
-
const isPrimitive = primitiveTypes.has(parsedType);
|
|
145
|
-
const isFormat = Object.keys(formatMap).includes(parsedType);
|
|
146
|
-
let defaultValue;
|
|
147
|
-
if (tag.default) {
|
|
148
|
-
switch (parsedType) {
|
|
149
|
-
case "integer":
|
|
150
|
-
case "int32":
|
|
151
|
-
case "int64": {
|
|
152
|
-
defaultValue = Number.parseInt(tag.default, 10);
|
|
153
|
-
break;
|
|
154
|
-
}
|
|
155
|
-
case "number":
|
|
156
|
-
case "double":
|
|
157
|
-
case "float": {
|
|
158
|
-
defaultValue = Number.parseFloat(tag.default);
|
|
159
|
-
break;
|
|
160
|
-
}
|
|
161
|
-
default: {
|
|
162
|
-
defaultValue = tag.default;
|
|
163
|
-
break;
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
let rootType;
|
|
168
|
-
if (isPrimitive) {
|
|
169
|
-
rootType = { type: parsedType, default: defaultValue };
|
|
170
|
-
} else if (isFormat) {
|
|
171
|
-
rootType = {
|
|
172
|
-
type: formatMap[parsedType],
|
|
173
|
-
format: parsedType,
|
|
174
|
-
default: defaultValue
|
|
175
|
-
};
|
|
176
|
-
} else {
|
|
177
|
-
rootType = { $ref: `#/components/schemas/${parsedType}` };
|
|
178
|
-
}
|
|
179
|
-
let schema = isArray ? {
|
|
180
|
-
type: "array",
|
|
181
|
-
items: {
|
|
182
|
-
...rootType
|
|
183
|
-
}
|
|
184
|
-
} : {
|
|
185
|
-
...rootType
|
|
186
|
-
};
|
|
187
|
-
if (parsedType === void 0) {
|
|
188
|
-
schema = void 0;
|
|
189
|
-
}
|
|
190
|
-
let description = tag.description.trim().replace(/^- /, "");
|
|
191
|
-
if (description === "") {
|
|
192
|
-
description = void 0;
|
|
193
|
-
}
|
|
194
|
-
return {
|
|
195
|
-
name: tag.name,
|
|
196
|
-
description,
|
|
197
|
-
required: !tag.optional,
|
|
198
|
-
schema,
|
|
199
|
-
rawType
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
function tagsToObjects(tags, verbose) {
|
|
203
|
-
return tags.map((tag) => {
|
|
204
|
-
const parsedResponse = parseDescription(tag);
|
|
205
|
-
let nameAndDescription = "";
|
|
206
|
-
if (parsedResponse.name) {
|
|
207
|
-
nameAndDescription += parsedResponse.name;
|
|
208
|
-
}
|
|
209
|
-
if (parsedResponse.description) {
|
|
210
|
-
nameAndDescription += ` ${parsedResponse.description.trim()}`;
|
|
211
|
-
}
|
|
212
|
-
switch (tag.tag) {
|
|
213
|
-
case "operationId":
|
|
214
|
-
case "summary":
|
|
215
|
-
case "description": {
|
|
216
|
-
return { [tag.tag]: nameAndDescription };
|
|
217
|
-
}
|
|
218
|
-
case "deprecated": {
|
|
219
|
-
return { deprecated: true };
|
|
220
|
-
}
|
|
221
|
-
case "externalDocs": {
|
|
222
|
-
return {
|
|
223
|
-
externalDocs: {
|
|
224
|
-
url: parsedResponse.name,
|
|
225
|
-
description: parsedResponse.description
|
|
226
|
-
}
|
|
227
|
-
};
|
|
228
|
-
}
|
|
229
|
-
case "server": {
|
|
230
|
-
return {
|
|
231
|
-
servers: [
|
|
232
|
-
{
|
|
233
|
-
url: parsedResponse.name,
|
|
234
|
-
description: parsedResponse.description
|
|
235
|
-
}
|
|
236
|
-
]
|
|
237
|
-
};
|
|
238
|
-
}
|
|
239
|
-
case "tag": {
|
|
240
|
-
return { tags: [nameAndDescription] };
|
|
241
|
-
}
|
|
242
|
-
case "cookieParam":
|
|
243
|
-
case "headerParam":
|
|
244
|
-
case "queryParam":
|
|
245
|
-
case "pathParam": {
|
|
246
|
-
return {
|
|
247
|
-
parameters: [
|
|
248
|
-
{
|
|
249
|
-
name: parsedResponse.name,
|
|
250
|
-
in: tag.tag.replace(/Param$/, ""),
|
|
251
|
-
description: parsedResponse.description,
|
|
252
|
-
required: parsedResponse.required,
|
|
253
|
-
schema: parsedResponse.schema
|
|
254
|
-
}
|
|
255
|
-
]
|
|
256
|
-
};
|
|
257
|
-
}
|
|
258
|
-
case "bodyContent": {
|
|
259
|
-
return {
|
|
260
|
-
requestBody: {
|
|
261
|
-
content: {
|
|
262
|
-
[parsedResponse.name.replace("*\\/*", "*/*")]: {
|
|
263
|
-
schema: parsedResponse.schema
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
};
|
|
268
|
-
}
|
|
269
|
-
case "bodyExample": {
|
|
270
|
-
const [contentType, example] = parsedResponse.name.split(".");
|
|
271
|
-
return {
|
|
272
|
-
requestBody: {
|
|
273
|
-
content: {
|
|
274
|
-
[contentType]: {
|
|
275
|
-
examples: {
|
|
276
|
-
[example]: {
|
|
277
|
-
$ref: `#/components/examples/${parsedResponse.rawType}`
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
};
|
|
284
|
-
}
|
|
285
|
-
case "bodyDescription": {
|
|
286
|
-
return { requestBody: { description: nameAndDescription } };
|
|
287
|
-
}
|
|
288
|
-
case "bodyRequired": {
|
|
289
|
-
return { requestBody: { required: true } };
|
|
290
|
-
}
|
|
291
|
-
case "response": {
|
|
292
|
-
return {
|
|
293
|
-
responses: {
|
|
294
|
-
[parsedResponse.name]: {
|
|
295
|
-
description: parsedResponse.description
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
};
|
|
299
|
-
}
|
|
300
|
-
case "callback": {
|
|
301
|
-
return {
|
|
302
|
-
callbacks: {
|
|
303
|
-
[parsedResponse.name]: {
|
|
304
|
-
$ref: `#/components/callbacks/${parsedResponse.rawType}`
|
|
305
|
-
}
|
|
306
|
-
}
|
|
307
|
-
};
|
|
308
|
-
}
|
|
309
|
-
case "responseContent": {
|
|
310
|
-
const [status, contentType] = parsedResponse.name.split(".");
|
|
311
|
-
return {
|
|
312
|
-
responses: {
|
|
313
|
-
[status]: {
|
|
314
|
-
content: {
|
|
315
|
-
[contentType]: {
|
|
316
|
-
schema: parsedResponse.schema
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
};
|
|
322
|
-
}
|
|
323
|
-
case "responseHeaderComponent": {
|
|
324
|
-
const [status, header] = parsedResponse.name.split(".");
|
|
325
|
-
return {
|
|
326
|
-
responses: {
|
|
327
|
-
[status]: {
|
|
328
|
-
headers: {
|
|
329
|
-
[header]: {
|
|
330
|
-
$ref: `#/components/headers/${parsedResponse.rawType}`
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
};
|
|
336
|
-
}
|
|
337
|
-
case "responseHeader": {
|
|
338
|
-
const [status, header] = parsedResponse.name.split(".");
|
|
339
|
-
return {
|
|
340
|
-
responses: {
|
|
341
|
-
[status]: {
|
|
342
|
-
headers: {
|
|
343
|
-
[header]: {
|
|
344
|
-
description: parsedResponse.description,
|
|
345
|
-
schema: parsedResponse.schema
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
}
|
|
350
|
-
};
|
|
351
|
-
}
|
|
352
|
-
case "responseExample": {
|
|
353
|
-
const [status, contentType, example] = parsedResponse.name.split(".");
|
|
354
|
-
return {
|
|
355
|
-
responses: {
|
|
356
|
-
[status]: {
|
|
357
|
-
content: {
|
|
358
|
-
[contentType]: {
|
|
359
|
-
examples: {
|
|
360
|
-
[example]: {
|
|
361
|
-
$ref: `#/components/examples/${parsedResponse.rawType}`
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
};
|
|
369
|
-
}
|
|
370
|
-
case "responseLink": {
|
|
371
|
-
const [status, link] = parsedResponse.name.split(".");
|
|
372
|
-
return {
|
|
373
|
-
responses: {
|
|
374
|
-
[status]: {
|
|
375
|
-
links: {
|
|
376
|
-
[link]: {
|
|
377
|
-
$ref: `#/components/links/${parsedResponse.rawType}`
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
}
|
|
381
|
-
}
|
|
382
|
-
};
|
|
383
|
-
}
|
|
384
|
-
case "bodyComponent": {
|
|
385
|
-
return {
|
|
386
|
-
requestBody: {
|
|
387
|
-
$ref: `#/components/requestBodies/${parsedResponse.rawType}`
|
|
388
|
-
}
|
|
389
|
-
};
|
|
390
|
-
}
|
|
391
|
-
case "responseComponent": {
|
|
392
|
-
return {
|
|
393
|
-
responses: {
|
|
394
|
-
[parsedResponse.name]: {
|
|
395
|
-
$ref: `#/components/responses/${parsedResponse.rawType}`
|
|
396
|
-
}
|
|
397
|
-
}
|
|
398
|
-
};
|
|
399
|
-
}
|
|
400
|
-
case "paramComponent": {
|
|
401
|
-
return {
|
|
402
|
-
parameters: [{ $ref: `#/components/parameters/${parsedResponse.rawType}` }]
|
|
403
|
-
};
|
|
404
|
-
}
|
|
405
|
-
case "security": {
|
|
406
|
-
const [security, scopeItem] = parsedResponse.name.split(".");
|
|
407
|
-
let scope = [];
|
|
408
|
-
if (scopeItem) {
|
|
409
|
-
scope = [scopeItem];
|
|
410
|
-
}
|
|
411
|
-
return {
|
|
412
|
-
security: { [security]: scope }
|
|
413
|
-
};
|
|
414
|
-
}
|
|
415
|
-
default: {
|
|
416
|
-
return {};
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
});
|
|
420
|
-
}
|
|
421
|
-
var commentsToOpenApi = (fileContents, verbose) => {
|
|
422
|
-
const openAPIRegex = /^(GET|PUT|POST|DELETE|OPTIONS|HEAD|PATCH|TRACE) \/.*$/;
|
|
423
|
-
const jsDocumentComments = _commentparser.parse.call(void 0, fileContents, { spacing: "preserve" });
|
|
424
|
-
return jsDocumentComments.filter((comment) => openAPIRegex.test(comment.description.trim())).map((comment) => {
|
|
425
|
-
const loc = comment.tags.length + 1;
|
|
426
|
-
const result = _lodashmergewith2.default.call(void 0, {}, ...tagsToObjects(comment.tags, verbose), customizer_default);
|
|
427
|
-
fixSecurityObject(result);
|
|
428
|
-
const [method, path2] = comment.description.split(" ");
|
|
429
|
-
const pathsObject = {
|
|
430
|
-
[path2.trim()]: {
|
|
431
|
-
[method.toLowerCase().trim()]: {
|
|
432
|
-
...result
|
|
433
|
-
}
|
|
434
|
-
}
|
|
435
|
-
};
|
|
436
|
-
const spec = JSON.parse(JSON.stringify({ paths: pathsObject }));
|
|
437
|
-
return {
|
|
438
|
-
spec,
|
|
439
|
-
loc
|
|
440
|
-
};
|
|
441
|
-
});
|
|
442
|
-
};
|
|
443
|
-
var comments_to_open_api_default = commentsToOpenApi;
|
|
444
|
-
|
|
445
|
-
// src/swagger-jsdoc/comments-to-open-api.ts
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
// src/swagger-jsdoc/utils.ts
|
|
451
|
-
|
|
452
|
-
var mergeDeep = (first, second) => _lodashmergewith2.default.call(void 0, {}, first, second, (a, b) => b === null ? a : void 0);
|
|
453
|
-
var hasEmptyProperty = (object) => Object.keys(object).map((key) => object[key]).every((keyObject) => typeof keyObject === "object" && Object.keys(keyObject).every((key) => !(key in keyObject)));
|
|
454
|
-
var isTagPresentInTags = (tag, tags) => tags.some((targetTag) => tag.name === targetTag.name);
|
|
455
|
-
var getSwaggerVersionFromSpec = (tag) => {
|
|
456
|
-
switch (tag.tag) {
|
|
457
|
-
case "openapi": {
|
|
458
|
-
return "v3";
|
|
459
|
-
}
|
|
460
|
-
case "asyncapi": {
|
|
461
|
-
return "v4";
|
|
462
|
-
}
|
|
463
|
-
case "swagger": {
|
|
464
|
-
return "v2";
|
|
465
|
-
}
|
|
466
|
-
default: {
|
|
467
|
-
return "v2";
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
};
|
|
471
|
-
|
|
472
|
-
// src/swagger-jsdoc/organize-swagger-object.ts
|
|
473
|
-
var organizeSwaggerObject = (swaggerObject, annotation, property) => {
|
|
474
|
-
if (property === "x-webhooks") {
|
|
475
|
-
swaggerObject[property] = annotation[property];
|
|
476
|
-
}
|
|
477
|
-
if (property.startsWith("x-")) {
|
|
478
|
-
return;
|
|
479
|
-
}
|
|
480
|
-
const commonProperties = [
|
|
481
|
-
"components",
|
|
482
|
-
"consumes",
|
|
483
|
-
"produces",
|
|
484
|
-
"paths",
|
|
485
|
-
"schemas",
|
|
486
|
-
"securityDefinitions",
|
|
487
|
-
"responses",
|
|
488
|
-
"parameters",
|
|
489
|
-
"definitions",
|
|
490
|
-
"channels"
|
|
491
|
-
];
|
|
492
|
-
if (commonProperties.includes(property)) {
|
|
493
|
-
Object.keys(annotation[property]).forEach((definition) => {
|
|
494
|
-
swaggerObject[property][definition] = mergeDeep(swaggerObject[property][definition], annotation[property][definition]);
|
|
495
|
-
});
|
|
496
|
-
} else if (property === "tags") {
|
|
497
|
-
const { tags } = annotation;
|
|
498
|
-
if (Array.isArray(tags)) {
|
|
499
|
-
tags.forEach((tag) => {
|
|
500
|
-
if (!isTagPresentInTags(tag, swaggerObject.tags)) {
|
|
501
|
-
swaggerObject.tags.push(tag);
|
|
502
|
-
}
|
|
503
|
-
});
|
|
504
|
-
} else if (!isTagPresentInTags(tags, swaggerObject.tags)) {
|
|
505
|
-
swaggerObject.tags.push(tags);
|
|
506
|
-
}
|
|
507
|
-
} else if (property === "security") {
|
|
508
|
-
const { security } = annotation;
|
|
509
|
-
swaggerObject.security = security;
|
|
510
|
-
} else if (property.startsWith("/")) {
|
|
511
|
-
swaggerObject.paths[property] = mergeDeep(swaggerObject.paths[property], annotation[property]);
|
|
512
|
-
}
|
|
513
|
-
};
|
|
514
|
-
var organize_swagger_object_default = organizeSwaggerObject;
|
|
515
|
-
|
|
516
|
-
// src/swagger-jsdoc/comments-to-open-api.ts
|
|
517
|
-
var specificationTemplate = {
|
|
518
|
-
v2: ["paths", "definitions", "responses", "parameters", "securityDefinitions"],
|
|
519
|
-
v3: ["paths", "definitions", "responses", "parameters", "securityDefinitions", "components"],
|
|
520
|
-
v4: ["components", "channels"]
|
|
521
|
-
};
|
|
522
|
-
var tagsToObjects2 = (specs, verbose) => specs.map((spec) => {
|
|
523
|
-
if ((spec.tag === "openapi" || spec.tag === "swagger" || spec.tag === "asyncapi") && spec.description !== "") {
|
|
524
|
-
const parsed = _yaml2.default.parseDocument(spec.description);
|
|
525
|
-
if (parsed.errors && parsed.errors.length > 0) {
|
|
526
|
-
parsed.errors.map((error) => {
|
|
527
|
-
const newError = error;
|
|
528
|
-
newError.annotation = spec.description;
|
|
529
|
-
return newError;
|
|
530
|
-
});
|
|
531
|
-
let errorString = "Error parsing YAML in @openapi spec:";
|
|
532
|
-
errorString += verbose ? parsed.errors.map((error) => {
|
|
533
|
-
var _a;
|
|
534
|
-
return `${error.toString()}
|
|
535
|
-
Imbedded within:
|
|
536
|
-
\`\`\`
|
|
537
|
-
${(_a = error == null ? void 0 : error.annotation) == null ? void 0 : _a.replace(/\n/g, "\n ")}
|
|
538
|
-
\`\`\``;
|
|
539
|
-
}).join("\n") : parsed.errors.map((error) => error.toString()).join("\n");
|
|
540
|
-
throw new Error(errorString);
|
|
541
|
-
}
|
|
542
|
-
const parsedDocument = parsed.toJSON();
|
|
543
|
-
const specification = {
|
|
544
|
-
tags: []
|
|
545
|
-
};
|
|
546
|
-
specificationTemplate[getSwaggerVersionFromSpec(spec)].forEach((property) => {
|
|
547
|
-
specification[property] = specification[property] || {};
|
|
548
|
-
});
|
|
549
|
-
Object.keys(parsedDocument).forEach((property) => {
|
|
550
|
-
organize_swagger_object_default(specification, parsedDocument, property);
|
|
551
|
-
});
|
|
552
|
-
return specification;
|
|
553
|
-
}
|
|
554
|
-
return {};
|
|
555
|
-
});
|
|
556
|
-
var commentsToOpenApi2 = (fileContents, verbose) => {
|
|
557
|
-
const jsDocumentComments = _commentparser.parse.call(void 0, fileContents, { spacing: "preserve" });
|
|
558
|
-
return jsDocumentComments.map((comment) => {
|
|
559
|
-
const loc = comment.tags.length + 1;
|
|
560
|
-
const result = _lodashmergewith2.default.call(void 0, {}, ...tagsToObjects2(comment.tags, verbose), customizer_default);
|
|
561
|
-
["definitions", "responses", "parameters", "securityDefinitions", "components", "tags"].forEach((property) => {
|
|
562
|
-
if (result[property] !== void 0 && hasEmptyProperty(result[property])) {
|
|
563
|
-
delete result[property];
|
|
564
|
-
}
|
|
565
|
-
});
|
|
566
|
-
const spec = JSON.parse(JSON.stringify(result));
|
|
567
|
-
return {
|
|
568
|
-
spec,
|
|
569
|
-
loc
|
|
570
|
-
};
|
|
571
|
-
});
|
|
572
|
-
};
|
|
573
|
-
var comments_to_open_api_default2 = commentsToOpenApi2;
|
|
574
|
-
|
|
575
|
-
// src/webpack/swagger-compiler-plugin.ts
|
|
576
|
-
var exclude = [
|
|
577
|
-
"coverage/**",
|
|
578
|
-
".github/**",
|
|
579
|
-
"packages/*/test{,s}/**",
|
|
580
|
-
"**/*.d.ts",
|
|
581
|
-
"test{,s}/**",
|
|
582
|
-
"test{,-*}.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}",
|
|
583
|
-
"**/*{.,-}test.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}",
|
|
584
|
-
"**/__tests__/**",
|
|
585
|
-
"**/{ava,babel,nyc}.config.{js,cjs,mjs}",
|
|
586
|
-
"**/jest.config.{js,cjs,mjs,ts}",
|
|
587
|
-
"**/{karma,rollup,webpack}.config.js",
|
|
588
|
-
"**/.{eslint,mocha}rc.{js,cjs}",
|
|
589
|
-
"**/.{travis,yarnrc}.yml",
|
|
590
|
-
"**/{docker-compose,docker}.yml",
|
|
591
|
-
"**/.yamllint.{yaml,yml}",
|
|
592
|
-
"**/node_modules/**",
|
|
593
|
-
"**/pnpm-lock.yaml",
|
|
594
|
-
"**/pnpm-workspace.yaml",
|
|
595
|
-
"**/{package,package-lock}.json",
|
|
596
|
-
"**/yarn.lock",
|
|
597
|
-
"**/package.json5",
|
|
598
|
-
"**/.next/**"
|
|
599
|
-
];
|
|
600
|
-
var errorHandler = (error) => {
|
|
601
|
-
if (error) {
|
|
602
|
-
console.error(error);
|
|
603
|
-
_process.exit.call(void 0, 1);
|
|
604
|
-
}
|
|
605
|
-
};
|
|
606
|
-
var SwaggerCompilerPlugin = class {
|
|
607
|
-
constructor(assetsPath, sources, swaggerDefinition, options) {
|
|
608
|
-
this.assetsPath = assetsPath;
|
|
609
|
-
this.swaggerDefinition = swaggerDefinition;
|
|
610
|
-
this.sources = sources;
|
|
611
|
-
this.verbose = options.verbose || false;
|
|
612
|
-
this.ignore = options.ignore || [];
|
|
613
|
-
}
|
|
614
|
-
apply(compiler) {
|
|
615
|
-
compiler.hooks.make.tapAsync("SwaggerCompilerPlugin", async (_, callback) => {
|
|
616
|
-
console.log("Build paused, switching to swagger build");
|
|
617
|
-
const spec = new spec_builder_default(this.swaggerDefinition);
|
|
618
|
-
for await (const dir of this.sources) {
|
|
619
|
-
const files = await _readdir.collect.call(void 0, dir, {
|
|
620
|
-
skip: [...this.ignore, ...exclude],
|
|
621
|
-
extensions: [".js", ".cjs", ".mjs", ".ts", ".tsx", ".jsx", ".yaml", ".yml"],
|
|
622
|
-
includeDirs: false,
|
|
623
|
-
minimatchOptions: {
|
|
624
|
-
match: {
|
|
625
|
-
debug: this.verbose,
|
|
626
|
-
matchBase: true
|
|
627
|
-
},
|
|
628
|
-
skip: {
|
|
629
|
-
debug: this.verbose,
|
|
630
|
-
matchBase: true
|
|
631
|
-
}
|
|
632
|
-
}
|
|
633
|
-
});
|
|
634
|
-
if (this.verbose) {
|
|
635
|
-
console.log(`Found ${files.length} files in ${dir}`);
|
|
636
|
-
console.log(files);
|
|
637
|
-
}
|
|
638
|
-
files.forEach((file) => {
|
|
639
|
-
if (this.verbose) {
|
|
640
|
-
console.log(`Parsing file ${file}`);
|
|
641
|
-
}
|
|
642
|
-
try {
|
|
643
|
-
const parsedJsDocumentFile = parse_file_default(file, comments_to_open_api_default, this.verbose);
|
|
644
|
-
spec.addData(parsedJsDocumentFile.map((item) => item.spec));
|
|
645
|
-
const parsedSwaggerJsDocumentFile = parse_file_default(file, comments_to_open_api_default2, this.verbose);
|
|
646
|
-
spec.addData(parsedSwaggerJsDocumentFile.map((item) => item.spec));
|
|
647
|
-
} catch (error) {
|
|
648
|
-
console.error(error);
|
|
649
|
-
_process.exit.call(void 0, 1);
|
|
650
|
-
}
|
|
651
|
-
});
|
|
652
|
-
}
|
|
653
|
-
try {
|
|
654
|
-
if (this.verbose) {
|
|
655
|
-
console.log("Validating swagger spec");
|
|
656
|
-
console.log(JSON.stringify(spec, null, 2));
|
|
657
|
-
}
|
|
658
|
-
await _swaggerparser2.default.validate(JSON.parse(JSON.stringify(spec)));
|
|
659
|
-
} catch (error) {
|
|
660
|
-
console.error(error.toJSON());
|
|
661
|
-
_process.exit.call(void 0, 1);
|
|
662
|
-
}
|
|
663
|
-
const { assetsPath } = this;
|
|
664
|
-
_fs2.default.mkdir(_path.dirname.call(void 0, assetsPath), { recursive: true }, (error) => {
|
|
665
|
-
if (error) {
|
|
666
|
-
errorHandler(error);
|
|
667
|
-
}
|
|
668
|
-
_fs2.default.writeFile(assetsPath, JSON.stringify(spec, null, 2), errorHandler);
|
|
669
|
-
});
|
|
670
|
-
if (this.verbose) {
|
|
671
|
-
console.log(`Written swagger spec to "${this.assetsPath}" file`);
|
|
672
|
-
}
|
|
673
|
-
console.log("switching back to normal build");
|
|
674
|
-
callback();
|
|
675
|
-
});
|
|
676
|
-
}
|
|
677
|
-
};
|
|
678
|
-
var swagger_compiler_plugin_default = SwaggerCompilerPlugin;
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
exports.SpecBuilder = spec_builder_default; exports.SwaggerCompilerPlugin = swagger_compiler_plugin_default; exports.jsDocumentCommentsToOpenApi = comments_to_open_api_default; exports.parseFile = parse_file_default; exports.swaggerJsDocumentCommentsToOpenApi = comments_to_open_api_default2; exports.yamlLoc = yaml_loc_default;
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _chunk7NWDLEC5js = require('./chunk-7NWDLEC5.js');var _swaggerparser = require('@apidevtools/swagger-parser'); var _swaggerparser2 = _interopRequireDefault(_swaggerparser);var _readdir = require('@visulima/readdir');var _fs = require('fs');var _path = require('path');var _process = require('process');var O=["coverage/**",".github/**","packages/*/test{,s}/**","**/*.d.ts","test{,s}/**","test{,-*}.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}","**/*{.,-}test.{js,cjs,mjs,ts,tsx,jsx,yaml,yml}","**/__tests__/**","**/{ava,babel,nyc}.config.{js,cjs,mjs}","**/jest.config.{js,cjs,mjs,ts}","**/{karma,rollup,webpack}.config.js","**/.{eslint,mocha}rc.{js,cjs}","**/.{travis,yarnrc}.yml","**/{docker-compose,docker}.yml","**/.yamllint.{yaml,yml}","**/node_modules/**","**/pnpm-lock.yaml","**/pnpm-workspace.yaml","**/{package,package-lock}.json","**/yarn.lock","**/package.json5","**/.next/**"],h=t=>{t&&(console.error(t),_process.exit.call(void 0, 1))},d=class{constructor(r,u,i,e){this.assetsPath=r,this.swaggerDefinition=i,this.sources=u,this.verbose=e.verbose||!1,this.ignore=e.ignore||[]}apply(r){r.hooks.make.tapAsync("SwaggerCompilerPlugin",async(u,i)=>{console.log("Build paused, switching to swagger build");let e=new (0, _chunk7NWDLEC5js.a)(this.swaggerDefinition);for await(let s of this.sources){let a=await _readdir.collect.call(void 0, s,{skip:[...this.ignore,...O],extensions:[".js",".cjs",".mjs",".ts",".tsx",".jsx",".yaml",".yml"],includeDirs:!1,minimatchOptions:{match:{debug:this.verbose,matchBase:!0},skip:{debug:this.verbose,matchBase:!0}}});this.verbose&&(console.log(`Found ${a.length} files in ${s}`),console.log(a)),a.forEach(n=>{this.verbose&&console.log(`Parsing file ${n}`);try{let l=_chunk7NWDLEC5js.c.call(void 0, n,_chunk7NWDLEC5js.d,this.verbose);e.addData(l.map(c=>c.spec));let j=_chunk7NWDLEC5js.c.call(void 0, n,_chunk7NWDLEC5js.e,this.verbose);e.addData(j.map(c=>c.spec))}catch(l){console.error(l),_process.exit.call(void 0, 1)}})}try{this.verbose&&(console.log("Validating swagger spec"),console.log(JSON.stringify(e,null,2))),await _swaggerparser2.default.validate(JSON.parse(JSON.stringify(e)))}catch(s){console.error(s.toJSON()),_process.exit.call(void 0, 1)}let{assetsPath:y}=this;_fs.mkdir.call(void 0, _path.dirname.call(void 0, y),{recursive:!0},s=>{s&&h(s),_fs.writeFile.call(void 0, y,JSON.stringify(e,null,2),h)}),this.verbose&&console.log(`Written swagger spec to "${this.assetsPath}" file`),console.log("switching back to normal build"),i()})}},S= exports.SwaggerCompilerPlugin =d;exports.SpecBuilder = _chunk7NWDLEC5js.a; exports.SwaggerCompilerPlugin = S; exports.jsDocumentCommentsToOpenApi = _chunk7NWDLEC5js.d; exports.parseFile = _chunk7NWDLEC5js.c; exports.swaggerJsDocumentCommentsToOpenApi = _chunk7NWDLEC5js.e; exports.yamlLoc = _chunk7NWDLEC5js.b;
|
|
687
2
|
//# sourceMappingURL=index.js.map
|