Files
testapi/node_modules/@tsoa/cli/dist/swagger/specGenerator31.js
2026-03-03 15:23:00 +00:00

73 lines
2.5 KiB
JavaScript

"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