fastman
Version:
快速api测试及文档生成
172 lines • 8.11 kB
JavaScript
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
///<reference path="../../node_modules/@types/node/index.d.ts"/>
var base_1 = require("./base");
var library_utils_1 = require("../../lib/openapi-parser/library.utils");
var document_factory_1 = require("../../lib/openapi-parser/factories/document.factory");
var yaml = require("js-yaml");
var OpenApi3Spec = /** @class */ (function (_super) {
__extends(OpenApi3Spec, _super);
function OpenApi3Spec() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.oasUtils = new library_utils_1.OasLibraryUtils();
return _this;
}
OpenApi3Spec.prototype.tag = function (tag) {
var tagNode = this.openapiDoc.createTag();
tagNode.name = tag.name;
tagNode.description = tag.description;
var tags = this.openapiDoc.tags || [];
tags.push(tagNode);
this.openapiDoc.tags = tags;
};
OpenApi3Spec.prototype.info = function (info) {
if (!this.openapiDoc) {
this.openapiDoc = new document_factory_1.OasDocumentFactory().createEmpty("3.0");
}
var oasInfo = this.openapiDoc.createInfo();
this.oasUtils.readNode(info, oasInfo);
this.openapiDoc.info = oasInfo;
};
OpenApi3Spec.prototype.load = function (spec) {
var factory = new document_factory_1.OasDocumentFactory();
if (typeof spec === "string") {
this.openapiDoc = factory.createFromJson(spec);
}
else {
this.openapiDoc = factory.createFromObject(spec);
}
return this;
};
OpenApi3Spec.prototype.write = function (format) {
if (format === void 0) { format = "yaml"; }
var json = this.oasUtils.writeNode(this.openapiDoc);
return format === "yaml" ? yaml.safeDump(json) : JSON.stringify(json, null, 2);
};
OpenApi3Spec.prototype.server = function (server) {
var _this = this;
if (server) {
this.openapiDoc.addServer(server.url, server.description);
}
return this.openapiDoc.servers.map(function (s) {
return _this.oasUtils.writeNode(s);
});
};
/**
* 添加或查找一个资源
* @param {string} path
* @returns {OasPathItem}
*/
OpenApi3Spec.prototype.path = function (path) {
var paths = this.openapiDoc.paths || this.openapiDoc.createPaths();
var pathItem = paths.getItem(path) || paths.createPathItem(path);
paths.addItem(path, pathItem);
this.openapiDoc.paths = paths;
return this.oasUtils.writeNode(pathItem);
};
OpenApi3Spec.prototype.operation = function (path, method, operation) {
var paths = this.openapiDoc.paths;
var pathNode = paths.getItem(path);
var operationNode = pathNode[method] || pathNode.createOperation(method);
if (operation) {
this.oasUtils.readNode(operation, operationNode);
}
pathNode[method] = operationNode;
return this.oasUtils.writeNode(operationNode);
};
OpenApi3Spec.prototype.response = function (status, path, method, response) {
var paths = this.openapiDoc.paths;
var pathNode = paths.getItem(path);
var operationNode = pathNode[method] || pathNode.createOperation(method);
var responsesNode = operationNode.responses || operationNode.createResponses();
var responseNode = (responsesNode.getItem(status) || responsesNode.createResponse(status));
if (response) {
this.oasUtils.readNode(response, responseNode);
}
responsesNode.addItem(status, responseNode);
operationNode.responses = responsesNode;
pathNode[method] = operationNode;
return this.oasUtils.writeNode(responseNode);
};
OpenApi3Spec.prototype.component = function (name, value, type) {
var componentType = type || "schemas";
var components = this.openapiDoc.components || this.openapiDoc.createComponents();
var component;
// TODO component的类型需要补充完整
switch (componentType) {
case "schemas": {
component = components.getSchemaDefinition(name) ||
components.createSchemaDefinition(name);
this.oasUtils.readNode(value, component);
components.addSchemaDefinition(name, component);
break;
}
case "parameters": {
component = components.getParameterDefinition(name) ||
components.createParameterDefinition(name);
this.oasUtils.readNode(value, component);
components.addParameterDefinition(name, component);
break;
}
case "responses": {
component = components.getResponseDefinition(name) ||
components.createResponseDefinition(name);
this.oasUtils.readNode(value, component);
components.addResponseDefinition(name, component);
break;
}
}
this.openapiDoc.components = components;
return value;
};
// TODO set version
OpenApi3Spec.prototype.version = function (version) {
return 3;
};
OpenApi3Spec.prototype.example = function (name, example, path, method, status, mediaType) {
if (mediaType === void 0) { mediaType = "application/json"; }
var paths = this.openapiDoc.paths;
var pathNode = paths.getItem(path);
var operationNode = pathNode[method] || pathNode.createOperation(method);
var responsesNode = operationNode.responses || operationNode.createResponses();
var responseNode = (responsesNode.getItem(status) || responsesNode.createResponse(status));
var mediaTypeNode = responseNode.getMediaType(mediaType) || responseNode.createMediaType(mediaType);
var exampleNode = mediaTypeNode.getExample(name) || mediaTypeNode.createExample(name);
this.oasUtils.readNode(example, exampleNode);
mediaTypeNode.addExample(exampleNode);
responseNode.addMediaType(mediaType, mediaTypeNode);
responsesNode.addResponse(status, responseNode);
operationNode.responses = responsesNode;
pathNode[method] = operationNode;
return this.oasUtils.writeNode(exampleNode);
};
OpenApi3Spec.prototype.requestExample = function (name, example, path, method, mediaType) {
if (mediaType === void 0) { mediaType = "application/json"; }
var paths = this.openapiDoc.paths;
var pathNode = paths.getItem(path);
var operationNode = (pathNode[method] || pathNode.createOperation(method));
pathNode[method] = operationNode;
if (operationNode.requestBody) {
var mediaTypeNode = operationNode.requestBody.getMediaType(mediaType)
|| operationNode.requestBody.createMediaType(mediaType);
var exampleNode = mediaTypeNode.createExample(name);
this.oasUtils.readNode(example, exampleNode);
mediaTypeNode.addExample(exampleNode);
operationNode.requestBody.addMediaType(mediaType, mediaTypeNode);
return this.oasUtils.writeNode(exampleNode);
}
};
return OpenApi3Spec;
}(base_1.default));
exports.default = OpenApi3Spec;
//# sourceMappingURL=openapi-3.js.map