73 lines
2.5 KiB
JavaScript
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
|