UNPKG

fastman

Version:

快速api测试及文档生成

172 lines 8.11 kB
"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