@ebarahona/loopback-openapi-v3 1.0.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.
@@ -0,0 +1,500 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transformOpenApiSpec = exports.parseVersion = void 0;
4
+ const types_1 = require("./types");
5
+ const SUPPORTED_MINORS = [0, 1, 2];
6
+ function isSupportedMinor(minor) {
7
+ return SUPPORTED_MINORS.includes(minor);
8
+ }
9
+ function warnOnce(warnings, seen, field, message) {
10
+ const key = `${field}:${message}`;
11
+ if (seen.has(key))
12
+ return;
13
+ seen.add(key);
14
+ warnings.push({ field, message });
15
+ }
16
+ function parseVersion(version) {
17
+ const match = /^(\d+)\.(\d+)\.(\d+)$/.exec(version);
18
+ if (!match) {
19
+ throw new Error(`Invalid OpenAPI version: "${version}". Expected format: "3.x.x"`);
20
+ }
21
+ const major = Number(match[1]);
22
+ const minor = Number(match[2]);
23
+ const patch = Number(match[3]);
24
+ if (major !== 3) {
25
+ throw new Error(`Unsupported OpenAPI major version: ${major}. Only version 3.x is supported.`);
26
+ }
27
+ if (!isSupportedMinor(minor)) {
28
+ throw new Error(`Unsupported OpenAPI minor version: 3.${minor}. Supported: 3.0.x, 3.1.x, 3.2.x`);
29
+ }
30
+ return { major, minor, patch };
31
+ }
32
+ exports.parseVersion = parseVersion;
33
+ function transformOpenApiSpec(spec, config = types_1.DEFAULT_CONFIG) {
34
+ if (typeof spec.openapi !== 'string') {
35
+ throw new Error('Invalid OpenAPI spec: missing required string field "openapi".');
36
+ }
37
+ const sourceVersion = parseVersion(spec.openapi);
38
+ const targetVersion = parseVersion(config.version);
39
+ const out = structuredClone(spec);
40
+ out.openapi = config.version;
41
+ const sourceMinor = sourceVersion.minor;
42
+ const targetMinor = targetVersion.minor;
43
+ const warnings = [];
44
+ const warnedKeys = new Set();
45
+ if (sourceMinor === targetMinor) {
46
+ return { spec: out, warnings };
47
+ }
48
+ if (config.transformNullable !== false && targetMinor >= 1 && sourceMinor < 1) {
49
+ upgradeNullable(out);
50
+ }
51
+ if (targetMinor < 2 && sourceMinor >= 2) {
52
+ strip32Features(out, targetMinor, warnings, warnedKeys);
53
+ }
54
+ if (targetMinor < 1 && sourceMinor >= 1) {
55
+ downgradeNullable(out, warnings, warnedKeys);
56
+ strip31Features(out, warnings, warnedKeys);
57
+ }
58
+ return { spec: out, warnings };
59
+ }
60
+ exports.transformOpenApiSpec = transformOpenApiSpec;
61
+ function upgradeNullable(spec) {
62
+ walkAllSchemas(spec, (s) => {
63
+ if (s.nullable !== true)
64
+ return;
65
+ delete s.nullable;
66
+ if (typeof s.type === 'string') {
67
+ s.type = [s.type, 'null'];
68
+ }
69
+ else if (Array.isArray(s.oneOf)) {
70
+ s.oneOf.push({ type: 'null' });
71
+ }
72
+ else if (Array.isArray(s.anyOf)) {
73
+ s.anyOf.push({ type: 'null' });
74
+ }
75
+ else if (Array.isArray(s.allOf)) {
76
+ const allOf = s.allOf;
77
+ delete s.allOf;
78
+ s.anyOf = [{ allOf }, { type: 'null' }];
79
+ }
80
+ else {
81
+ s.type = 'null';
82
+ }
83
+ });
84
+ }
85
+ function downgradeNullable(spec, warnings, seen) {
86
+ let converted = false;
87
+ walkAllSchemas(spec, (s) => {
88
+ if (Array.isArray(s.type)) {
89
+ const types = s.type;
90
+ if (types.includes('null')) {
91
+ const nonNull = types.filter(t => t !== 'null');
92
+ s.type = nonNull.length === 1 ? nonNull[0] : nonNull;
93
+ s.nullable = true;
94
+ converted = true;
95
+ }
96
+ }
97
+ for (const key of ['oneOf', 'anyOf']) {
98
+ if (!Array.isArray(s[key]))
99
+ continue;
100
+ const arr = s[key];
101
+ const nullIdx = arr.findIndex(item => typeof item === 'object' && item !== null &&
102
+ Object.keys(item).length === 1 && item.type === 'null');
103
+ if (nullIdx !== -1) {
104
+ arr.splice(nullIdx, 1);
105
+ s.nullable = true;
106
+ converted = true;
107
+ }
108
+ }
109
+ });
110
+ if (converted) {
111
+ warnOnce(warnings, seen, 'nullable', 'Converted type arrays to nullable: true for 3.0 compatibility (lossy)');
112
+ }
113
+ }
114
+ function strip31Features(spec, warnings, seen) {
115
+ if (spec.jsonSchemaDialect !== undefined) {
116
+ delete spec.jsonSchemaDialect;
117
+ warnOnce(warnings, seen, 'jsonSchemaDialect', 'Removed jsonSchemaDialect because target version is 3.0.x');
118
+ }
119
+ if (spec.webhooks !== undefined) {
120
+ delete spec.webhooks;
121
+ warnOnce(warnings, seen, 'webhooks', 'Removed webhooks because target version is 3.0.x (webhooks require 3.1+)');
122
+ }
123
+ const components = spec.components;
124
+ if (components?.pathItems !== undefined) {
125
+ delete components.pathItems;
126
+ warnOnce(warnings, seen, 'components.pathItems', 'Removed components.pathItems because target version is 3.0.x');
127
+ }
128
+ const info = spec.info;
129
+ if (info) {
130
+ const license = info.license;
131
+ if (license?.identifier !== undefined) {
132
+ delete license.identifier;
133
+ warnOnce(warnings, seen, 'info.license.identifier', 'Removed license identifier because target version is 3.0.x (use url instead)');
134
+ }
135
+ }
136
+ }
137
+ function strip32Features(spec, targetMinor, warnings, seen) {
138
+ if (spec.$self !== undefined) {
139
+ delete spec.$self;
140
+ warnOnce(warnings, seen, '$self', `Removed $self because target version is 3.${targetMinor}.x`);
141
+ }
142
+ if (Array.isArray(spec.servers)) {
143
+ for (const server of spec.servers) {
144
+ if (server && typeof server === 'object') {
145
+ const s = server;
146
+ if (s.name !== undefined) {
147
+ delete s.name;
148
+ warnOnce(warnings, seen, 'servers', `Removed server name because target version is 3.${targetMinor}.x`);
149
+ }
150
+ }
151
+ }
152
+ }
153
+ const paths = spec.paths;
154
+ if (paths) {
155
+ for (const path in paths) {
156
+ const item = paths[path];
157
+ if (!item || typeof item !== 'object')
158
+ continue;
159
+ const pi = item;
160
+ if (pi.query !== undefined) {
161
+ delete pi.query;
162
+ warnOnce(warnings, seen, `paths.${path}.query`, `Removed QUERY method because target version is 3.${targetMinor}.x`);
163
+ }
164
+ if (pi.additionalOperations !== undefined) {
165
+ delete pi.additionalOperations;
166
+ warnOnce(warnings, seen, `paths.${path}.additionalOperations`, `Removed additionalOperations because target version is 3.${targetMinor}.x`);
167
+ }
168
+ }
169
+ }
170
+ const webhooks = spec.webhooks;
171
+ if (webhooks) {
172
+ for (const name in webhooks) {
173
+ const item = webhooks[name];
174
+ if (!item || typeof item !== 'object')
175
+ continue;
176
+ const pi = item;
177
+ if (pi.query !== undefined) {
178
+ delete pi.query;
179
+ warnOnce(warnings, seen, `webhooks.${name}.query`, `Removed QUERY method because target version is 3.${targetMinor}.x`);
180
+ }
181
+ if (pi.additionalOperations !== undefined) {
182
+ delete pi.additionalOperations;
183
+ warnOnce(warnings, seen, `webhooks.${name}.additionalOperations`, `Removed additionalOperations because target version is 3.${targetMinor}.x`);
184
+ }
185
+ }
186
+ }
187
+ if (Array.isArray(spec.tags)) {
188
+ let tagWarned = false;
189
+ for (const tag of spec.tags) {
190
+ if (tag && typeof tag === 'object') {
191
+ const t = tag;
192
+ if (t.summary !== undefined || t.parent !== undefined || t.kind !== undefined) {
193
+ delete t.summary;
194
+ delete t.parent;
195
+ delete t.kind;
196
+ if (!tagWarned) {
197
+ warnOnce(warnings, seen, 'tags', `Removed tag fields (summary, parent, kind) because target version is 3.${targetMinor}.x`);
198
+ tagWarned = true;
199
+ }
200
+ }
201
+ }
202
+ }
203
+ }
204
+ const components = spec.components;
205
+ if (components) {
206
+ const schemes = components.securitySchemes;
207
+ if (schemes) {
208
+ for (const name in schemes) {
209
+ const scheme = schemes[name];
210
+ if (!scheme || typeof scheme !== 'object' || '$ref' in scheme)
211
+ continue;
212
+ const flows = scheme.flows;
213
+ if (flows?.device !== undefined) {
214
+ delete flows.device;
215
+ warnOnce(warnings, seen, `components.securitySchemes.${name}.flows.device`, `Removed OAuth2 device flow because target version is 3.${targetMinor}.x`);
216
+ }
217
+ }
218
+ }
219
+ const examples = components.examples;
220
+ if (examples) {
221
+ for (const name in examples) {
222
+ const ex = examples[name];
223
+ if (!ex || typeof ex !== 'object' || '$ref' in ex)
224
+ continue;
225
+ const e = ex;
226
+ if (e.dataValue !== undefined || e.serializedValue !== undefined) {
227
+ delete e.dataValue;
228
+ delete e.serializedValue;
229
+ warnOnce(warnings, seen, `components.examples.${name}`, `Removed dataValue/serializedValue because target version is 3.${targetMinor}.x`);
230
+ }
231
+ }
232
+ }
233
+ if (components.mediaTypes !== undefined) {
234
+ delete components.mediaTypes;
235
+ warnOnce(warnings, seen, 'components.mediaTypes', `Removed components.mediaTypes because target version is 3.${targetMinor}.x`);
236
+ }
237
+ }
238
+ walkAllSchemas(spec, (schema) => {
239
+ if (schema.xml && typeof schema.xml === 'object') {
240
+ const xml = schema.xml;
241
+ if (xml.text !== undefined) {
242
+ delete xml.text;
243
+ warnOnce(warnings, seen, 'xml.text', `Removed XML text field because target version is 3.${targetMinor}.x`);
244
+ }
245
+ }
246
+ });
247
+ forEachOperation(spec, (op, opPath) => {
248
+ if (Array.isArray(op.parameters)) {
249
+ for (const p of op.parameters) {
250
+ if (p && typeof p === 'object' && !('$ref' in p)) {
251
+ if (p.in === 'querystring') {
252
+ p.in = 'query';
253
+ warnOnce(warnings, seen, `${opPath}.parameters`, `Converted querystring parameter location to query because target version is 3.${targetMinor}.x`);
254
+ }
255
+ }
256
+ }
257
+ }
258
+ stripMediaFields(op, opPath, warnings, seen, targetMinor);
259
+ });
260
+ }
261
+ function stripMediaFields(op, opPath, warnings, seen, targetMinor) {
262
+ const fieldsToStrip = ['itemSchema', 'itemEncoding', 'prefixEncoding'];
263
+ function stripFromContent(content, location) {
264
+ for (const mt in content) {
265
+ const media = content[mt];
266
+ if (!media || typeof media !== 'object')
267
+ continue;
268
+ const m = media;
269
+ for (const field of fieldsToStrip) {
270
+ if (m[field] !== undefined) {
271
+ delete m[field];
272
+ warnOnce(warnings, seen, `${location}.${mt}.${field}`, `Removed ${field} because target version is 3.${targetMinor}.x`);
273
+ }
274
+ }
275
+ }
276
+ }
277
+ const reqBody = op.requestBody;
278
+ if (reqBody && typeof reqBody === 'object' && !('$ref' in reqBody)) {
279
+ const content = reqBody.content;
280
+ if (content)
281
+ stripFromContent(content, `${opPath}.requestBody.content`);
282
+ }
283
+ const responses = op.responses;
284
+ if (responses) {
285
+ for (const code in responses) {
286
+ const resp = responses[code];
287
+ if (!resp || typeof resp !== 'object' || '$ref' in resp)
288
+ continue;
289
+ const content = resp.content;
290
+ if (content)
291
+ stripFromContent(content, `${opPath}.responses.${code}.content`);
292
+ }
293
+ }
294
+ }
295
+ function walkAllSchemas(spec, visitor) {
296
+ const visited = new WeakSet();
297
+ function visit(schema) {
298
+ if (visited.has(schema))
299
+ return;
300
+ visited.add(schema);
301
+ visitor(schema);
302
+ if (schema.properties && typeof schema.properties === 'object') {
303
+ const props = schema.properties;
304
+ for (const key in props) {
305
+ const p = props[key];
306
+ if (p && typeof p === 'object' && !('$ref' in p))
307
+ visit(p);
308
+ }
309
+ }
310
+ if (schema.items && typeof schema.items === 'object' && !('$ref' in schema.items)) {
311
+ visit(schema.items);
312
+ }
313
+ for (const key of ['allOf', 'oneOf', 'anyOf', 'prefixItems']) {
314
+ if (Array.isArray(schema[key])) {
315
+ for (const item of schema[key]) {
316
+ if (item && typeof item === 'object' && !('$ref' in item))
317
+ visit(item);
318
+ }
319
+ }
320
+ }
321
+ if (schema.not && typeof schema.not === 'object' && !('$ref' in schema.not)) {
322
+ visit(schema.not);
323
+ }
324
+ if (schema.additionalProperties &&
325
+ typeof schema.additionalProperties === 'object' &&
326
+ !('$ref' in schema.additionalProperties)) {
327
+ visit(schema.additionalProperties);
328
+ }
329
+ }
330
+ function visitMediaContent(content) {
331
+ for (const mt in content) {
332
+ const media = content[mt];
333
+ if (!media || typeof media !== 'object')
334
+ continue;
335
+ if (media.schema && typeof media.schema === 'object' && !('$ref' in media.schema)) {
336
+ visit(media.schema);
337
+ }
338
+ if (media.itemSchema && typeof media.itemSchema === 'object' && !('$ref' in media.itemSchema)) {
339
+ visit(media.itemSchema);
340
+ }
341
+ }
342
+ }
343
+ function visitParams(params) {
344
+ for (const p of params) {
345
+ if (!p || typeof p !== 'object' || '$ref' in p)
346
+ continue;
347
+ const param = p;
348
+ if (param.schema && typeof param.schema === 'object' && !('$ref' in param.schema)) {
349
+ visit(param.schema);
350
+ }
351
+ if (param.content && typeof param.content === 'object') {
352
+ visitMediaContent(param.content);
353
+ }
354
+ }
355
+ }
356
+ const components = spec.components;
357
+ if (components) {
358
+ const schemas = components.schemas;
359
+ if (schemas) {
360
+ for (const name in schemas) {
361
+ const s = schemas[name];
362
+ if (s && typeof s === 'object' && !('$ref' in s))
363
+ visit(s);
364
+ }
365
+ }
366
+ const params = components.parameters;
367
+ if (params) {
368
+ for (const name in params) {
369
+ const p = params[name];
370
+ if (p && typeof p === 'object' && !('$ref' in p)) {
371
+ const param = p;
372
+ if (param.schema && typeof param.schema === 'object' && !('$ref' in param.schema)) {
373
+ visit(param.schema);
374
+ }
375
+ }
376
+ }
377
+ }
378
+ const reqBodies = components.requestBodies;
379
+ if (reqBodies) {
380
+ for (const name in reqBodies) {
381
+ const rb = reqBodies[name];
382
+ if (!rb || typeof rb !== 'object' || '$ref' in rb)
383
+ continue;
384
+ const content = rb.content;
385
+ if (content)
386
+ visitMediaContent(content);
387
+ }
388
+ }
389
+ const responses = components.responses;
390
+ if (responses) {
391
+ for (const name in responses) {
392
+ const resp = responses[name];
393
+ if (!resp || typeof resp !== 'object' || '$ref' in resp)
394
+ continue;
395
+ const content = resp.content;
396
+ if (content)
397
+ visitMediaContent(content);
398
+ }
399
+ }
400
+ const headers = components.headers;
401
+ if (headers) {
402
+ for (const name in headers) {
403
+ const h = headers[name];
404
+ if (!h || typeof h !== 'object' || '$ref' in h)
405
+ continue;
406
+ const header = h;
407
+ if (header.schema && typeof header.schema === 'object' && !('$ref' in header.schema)) {
408
+ visit(header.schema);
409
+ }
410
+ }
411
+ }
412
+ }
413
+ function visitPaths(pathsObj) {
414
+ for (const path in pathsObj) {
415
+ const item = pathsObj[path];
416
+ if (!item || typeof item !== 'object')
417
+ continue;
418
+ const pi = item;
419
+ if (Array.isArray(pi.parameters)) {
420
+ visitParams(pi.parameters);
421
+ }
422
+ const verbs = ['get', 'post', 'put', 'patch', 'delete', 'options', 'head', 'trace', 'query'];
423
+ for (const verb of verbs) {
424
+ const op = pi[verb];
425
+ if (!op || typeof op !== 'object')
426
+ continue;
427
+ const operation = op;
428
+ if (Array.isArray(operation.parameters)) {
429
+ visitParams(operation.parameters);
430
+ }
431
+ const reqBody = operation.requestBody;
432
+ if (reqBody && typeof reqBody === 'object' && !('$ref' in reqBody)) {
433
+ const content = reqBody.content;
434
+ if (content)
435
+ visitMediaContent(content);
436
+ }
437
+ const responses = operation.responses;
438
+ if (responses) {
439
+ for (const code in responses) {
440
+ const resp = responses[code];
441
+ if (!resp || typeof resp !== 'object' || '$ref' in resp)
442
+ continue;
443
+ const content = resp.content;
444
+ if (content)
445
+ visitMediaContent(content);
446
+ }
447
+ }
448
+ const callbacks = operation.callbacks;
449
+ if (callbacks) {
450
+ for (const cbName in callbacks) {
451
+ const cb = callbacks[cbName];
452
+ if (cb && typeof cb === 'object' && !('$ref' in cb)) {
453
+ visitPaths(cb);
454
+ }
455
+ }
456
+ }
457
+ }
458
+ }
459
+ }
460
+ if (spec.paths && typeof spec.paths === 'object') {
461
+ visitPaths(spec.paths);
462
+ }
463
+ if (spec.webhooks && typeof spec.webhooks === 'object') {
464
+ visitPaths(spec.webhooks);
465
+ }
466
+ }
467
+ function forEachOperation(spec, visitor) {
468
+ const verbs = ['get', 'post', 'put', 'patch', 'delete', 'options', 'head', 'trace', 'query'];
469
+ function visitPathItems(pathsObj, prefix) {
470
+ for (const path in pathsObj) {
471
+ const item = pathsObj[path];
472
+ if (!item || typeof item !== 'object')
473
+ continue;
474
+ const pi = item;
475
+ for (const verb of verbs) {
476
+ const op = pi[verb];
477
+ if (!op || typeof op !== 'object')
478
+ continue;
479
+ const opPath = `${prefix}.${path}.${verb}`;
480
+ visitor(op, opPath);
481
+ const callbacks = op.callbacks;
482
+ if (callbacks) {
483
+ for (const cbName in callbacks) {
484
+ const cb = callbacks[cbName];
485
+ if (cb && typeof cb === 'object' && !('$ref' in cb)) {
486
+ visitPathItems(cb, `${opPath}.callbacks.${cbName}`);
487
+ }
488
+ }
489
+ }
490
+ }
491
+ }
492
+ }
493
+ if (spec.paths && typeof spec.paths === 'object') {
494
+ visitPathItems(spec.paths, 'paths');
495
+ }
496
+ if (spec.webhooks && typeof spec.webhooks === 'object') {
497
+ visitPathItems(spec.webhooks, 'webhooks');
498
+ }
499
+ }
500
+ //# sourceMappingURL=transform.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform.js","sourceRoot":"","sources":["../src/transform.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type OpenApiVersion = '3.0.0' | '3.1.0' | '3.2.0';
2
+ export interface OpenApiVersionConfig {
3
+ version: OpenApiVersion;
4
+ transformNullable?: boolean;
5
+ }
6
+ export declare const DEFAULT_CONFIG: OpenApiVersionConfig;
package/dist/types.js ADDED
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_CONFIG = void 0;
4
+ exports.DEFAULT_CONFIG = {
5
+ version: '3.0.0',
6
+ transformNullable: true,
7
+ };
8
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAgBa,QAAA,cAAc,GAAyB;IAClD,OAAO,EAAE,OAAO;IAChB,iBAAiB,EAAE,IAAI;CACxB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,72 @@
1
+ {
2
+ "name": "@ebarahona/loopback-openapi-v3",
3
+ "version": "1.0.0",
4
+ "description": "LoopBack 4 component for OpenAPI 3.1 and 3.2 spec generation",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "engines": {
8
+ "node": ">=18"
9
+ },
10
+ "scripts": {
11
+ "build": "tsc -p tsconfig.build.json",
12
+ "clean": "rimraf dist",
13
+ "format": "prettier --write \"src/**/*.ts\"",
14
+ "lint": "eslint \"src/**/*.ts\"",
15
+ "test": "vitest run",
16
+ "test:dev": "vitest",
17
+ "prepublishOnly": "npm run clean && npm run build && npm test"
18
+ },
19
+ "keywords": [
20
+ "loopback",
21
+ "loopback4",
22
+ "openapi",
23
+ "openapi3",
24
+ "openapi31",
25
+ "openapi32",
26
+ "swagger",
27
+ "spec",
28
+ "component"
29
+ ],
30
+ "author": "Ed Barahona (https://github.com/ebarahona)",
31
+ "license": "MIT",
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "https://github.com/ebarahona/loopback-openapi-v3.git"
35
+ },
36
+ "dependencies": {
37
+ "@types/debug": "^4.1.13",
38
+ "debug": "^4.4.3",
39
+ "openapi3-ts": "github:ebarahona/openapi3-ts#feature/oas32"
40
+ },
41
+ "peerDependencies": {
42
+ "@loopback/core": ">=7.0.0",
43
+ "@loopback/openapi-v3": ">=11.0.0",
44
+ "@loopback/rest": ">=15.0.0"
45
+ },
46
+ "devDependencies": {
47
+ "@loopback/core": "^7.0.12",
48
+ "@loopback/openapi-v3": "^11.0.13",
49
+ "@loopback/rest": "^15.0.13",
50
+ "@loopback/testlab": "^8.0.12",
51
+ "@typescript-eslint/eslint-plugin": "^7.0.0",
52
+ "@typescript-eslint/parser": "^7.0.0",
53
+ "eslint": "^8.57.0",
54
+ "prettier": "^3.2.0",
55
+ "rimraf": "^5.0.0",
56
+ "typescript": "~5.2.2",
57
+ "vitest": "^2.0.0"
58
+ },
59
+ "files": [
60
+ "dist",
61
+ "src",
62
+ "README.md",
63
+ "LICENSE"
64
+ ],
65
+ "publishConfig": {
66
+ "access": "public"
67
+ },
68
+ "bugs": {
69
+ "url": "https://github.com/ebarahona/loopback-openapi-v3/issues"
70
+ },
71
+ "homepage": "https://github.com/ebarahona/loopback-openapi-v3#readme"
72
+ }