tsoa
This commit is contained in:
73
node_modules/@tsoa/cli/dist/swagger/specGenerator31.js
generated
vendored
Normal file
73
node_modules/@tsoa/cli/dist/swagger/specGenerator31.js
generated
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.SpecGenerator31 = void 0;
|
||||
const merge_anything_1 = require("merge-anything");
|
||||
const ts_deepmerge_1 = require("ts-deepmerge");
|
||||
const specGenerator3_1 = require("./specGenerator3");
|
||||
/**
|
||||
* OpenAPI 3.1 Spec Generator
|
||||
*
|
||||
* Extends SpecGenerator3 with OpenAPI 3.1 specific features:
|
||||
* - Tuple support via prefixItems
|
||||
* - OpenAPI version 3.1.0
|
||||
*
|
||||
* Uses inheritance to reuse all building logic from SpecGenerator3,
|
||||
* only overriding the version and adding tuple type support.
|
||||
*/
|
||||
class SpecGenerator31 extends specGenerator3_1.SpecGenerator3 {
|
||||
constructor(metadata, config) {
|
||||
super(metadata, config);
|
||||
this.metadata = metadata;
|
||||
this.config = config;
|
||||
}
|
||||
// Override with OpenAPI 3.1 specific return type
|
||||
// The base class returns Swagger.Spec30, but this generator produces Swagger.Spec31
|
||||
GetSpec() {
|
||||
let spec = {
|
||||
openapi: '3.1.0',
|
||||
components: this.buildComponents(),
|
||||
info: this.buildInfo(),
|
||||
paths: this.buildPaths(),
|
||||
servers: this.buildServers(),
|
||||
tags: this.config.tags,
|
||||
};
|
||||
if (this.config.spec) {
|
||||
this.config.specMerging = this.config.specMerging || 'immediate';
|
||||
const mergeFuncs = {
|
||||
immediate: Object.assign,
|
||||
recursive: merge_anything_1.merge,
|
||||
deepmerge: (spec, merge) => (0, ts_deepmerge_1.merge)(spec, merge),
|
||||
};
|
||||
spec = mergeFuncs[this.config.specMerging](spec, this.config.spec);
|
||||
}
|
||||
return spec;
|
||||
}
|
||||
/**
|
||||
* Override to add tuple type support (OpenAPI 3.1 feature via prefixItems)
|
||||
*/
|
||||
getSwaggerType(type, title) {
|
||||
if (this.isTupleType(type)) {
|
||||
const prefixItems = type.types.map((t) => this.getSwaggerType(t));
|
||||
const schema = {
|
||||
type: 'array',
|
||||
prefixItems,
|
||||
minItems: prefixItems.length,
|
||||
...(type.restType
|
||||
? {
|
||||
items: this.getSwaggerType(type.restType),
|
||||
}
|
||||
: {
|
||||
maxItems: prefixItems.length,
|
||||
items: false,
|
||||
}),
|
||||
};
|
||||
return schema;
|
||||
}
|
||||
return super.getSwaggerType(type, title);
|
||||
}
|
||||
isTupleType(type) {
|
||||
return type.dataType === 'tuple';
|
||||
}
|
||||
}
|
||||
exports.SpecGenerator31 = SpecGenerator31;
|
||||
//# sourceMappingURL=specGenerator31.js.map
|
||||
Reference in New Issue
Block a user