UNPKG

fastman

Version:

快速api测试及文档生成

1,521 lines (1,326 loc) 44.4 kB
/** * @license * Copyright 2017 Red Hat * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import {IOas20NodeVisitor, IOas30NodeVisitor, IOasNodeVisitor} from "./visitor.iface"; import {Oas20Document} from "../models/2.0/document.model"; import {OasExtension} from "../models/extension.model"; import {Oas20PathItem} from "../models/2.0/path-item.model"; import {Oas20Operation} from "../models/2.0/operation.model"; import {Oas20Parameter, Oas20ParameterBase, Oas20ParameterDefinition} from "../models/2.0/parameter.model"; import {Oas20Response, Oas20ResponseBase, Oas20ResponseDefinition} from "../models/2.0/response.model"; import { Oas20AdditionalPropertiesSchema, Oas20AllOfSchema, Oas20ItemsSchema, Oas20PropertySchema, Oas20Schema, Oas20SchemaDefinition } from "../models/2.0/schema.model"; import {Oas20Header} from "../models/2.0/header.model"; import {Oas20Example} from "../models/2.0/example.model"; import {Oas20Items} from "../models/2.0/items.model"; import {OasNode, OasValidationProblem} from "../models/node.model"; import {OasExtensibleNode} from "../models/enode.model"; import {Oas20Scopes} from "../models/2.0/scopes.model"; import {Oas20SecurityDefinitions} from "../models/2.0/security-definitions.model"; import {Oas20SecurityScheme} from "../models/2.0/security-scheme.model"; import {Oas20Definitions} from "../models/2.0/definitions.model"; import {Oas20ParametersDefinitions} from "../models/2.0/parameters-definitions.model"; import {Oas20ResponsesDefinitions} from "../models/2.0/responses-definitions.model"; import {OasDocument} from "../models/document.model"; import {OasInfo} from "../models/common/info.model"; import {OasContact} from "../models/common/contact.model"; import {OasLicense} from "../models/common/license.model"; import {Oas30Document} from "../models/3.0/document.model"; import {Oas30ServerVariable} from "../models/3.0/server-variable.model"; import {Oas30LinkServer, Oas30Server} from "../models/3.0/server.model"; import {OasSecurityRequirement} from "../models/common/security-requirement.model"; import {OasExternalDocumentation} from "../models/common/external-documentation.model"; import {OasTag} from "../models/common/tag.model"; import {OasPaths} from "../models/common/paths.model"; import {OasPathItem} from "../models/common/path-item.model"; import {OasResponses} from "../models/common/responses.model"; import {OasHeader} from "../models/common/header.model"; import {OasOperation} from "../models/common/operation.model"; import {OasXML} from "../models/common/xml.model"; import {OasSchema} from "../models/common/schema.model"; import {Oas30Parameter, Oas30ParameterBase, Oas30ParameterDefinition} from "../models/3.0/parameter.model"; import {Oas30Response, Oas30ResponseBase, Oas30ResponseDefinition} from "../models/3.0/response.model"; import {Oas30RequestBody, Oas30RequestBodyDefinition} from "../models/3.0/request-body.model"; import { Oas30AdditionalPropertiesSchema, Oas30AllOfSchema, Oas30AnyOfSchema, Oas30ItemsSchema, Oas30NotSchema, Oas30OneOfSchema, Oas30PropertySchema, Oas30Schema, Oas30SchemaDefinition } from "../models/3.0/schema.model"; import {Oas30CallbackPathItem, Oas30PathItem} from "../models/3.0/path-item.model"; import {Oas30Operation} from "../models/3.0/operation.model"; import {Oas30Header, Oas30HeaderDefinition} from "../models/3.0/header.model"; import {Oas30MediaType} from "../models/3.0/media-type.model"; import {Oas30Encoding} from "../models/3.0/encoding.model"; import {IOasIndexedNode} from "../models/inode.model"; import {Oas30Example, Oas30ExampleDefinition} from "../models/3.0/example.model"; import {Oas30Link, Oas30LinkDefinition} from "../models/3.0/link.model"; import {Oas30LinkParameterExpression} from "../models/3.0/link-parameter-expression.model"; import {Oas30Callback, Oas30CallbackDefinition} from "../models/3.0/callback.model"; import {Oas30Components} from "../models/3.0/components.model"; import {Oas30OAuthFlows} from "../models/3.0/oauth-flows.model"; import { Oas30AuthorizationCodeOAuthFlow, Oas30ClientCredentialsOAuthFlow, Oas30ImplicitOAuthFlow, Oas30OAuthFlow, Oas30PasswordOAuthFlow } from "../models/3.0/oauth-flow.model"; import {OasSecurityScheme} from "../models/common/security-scheme.model"; import {Oas30SecurityScheme} from "../models/3.0/security-scheme.model"; import {Oas20Headers} from "../models/2.0/headers.model"; import {Oas30LinkRequestBodyExpression} from "../models/3.0/link-request-body-expression.model"; import {Oas30Discriminator} from "../models/3.0/discriminator.model"; /** * Interface implemented by all traversers. */ export interface IOasTraverser { traverse(node: OasNode): void; } /** * Used to traverse an OAS tree and call an included visitor for each node. */ export abstract class OasTraverser implements IOasNodeVisitor, IOasTraverser { /** * Constructor. * @param visitor */ constructor(protected visitor: IOasNodeVisitor) {} /** * Called to traverse an OAS 2.0 tree starting at the given node and traversing * down until this node and all child nodes have been visited. * @param node */ public traverse(node: OasNode): void { node.accept(this); } /** * Traverse into the given node, unless it's null. * @param node */ protected traverseIfNotNull(node: OasNode): void { if (node) { node.accept(this); } } /** * Traverse the items of the given array. * @param items */ protected traverseArray(items: OasNode[]): void { if (Array.isArray(items)) { for (let item of items) { this.traverseIfNotNull(item); } } } /** * Traverse the children of an indexed node. * @param indexedNode */ protected traverseIndexedNode(indexedNode: IOasIndexedNode<OasNode>): void { let itemNames: string[] = indexedNode.getItemNames(); if (itemNames && itemNames.length > 0) { for (let itemName of itemNames) { let item: OasNode = indexedNode.getItem(itemName); this.traverseIfNotNull(item); } } } /** * Traverse the extension nodes, if any are found. * @param node */ protected traverseExtensions(node: OasExtensibleNode): void { this.traverseArray(node.extensions()); } /** * Traverse the validation problems, if any exist. Validation problems would * only exist if validation has been performed on the data model. * @param {OasNode} node */ protected traverseValidationProblems(node: OasNode): void { this.traverseArray(node.validationProblems()); } /** * Visit the document. * @param node */ public abstract visitDocument(node: OasDocument): void; /** * Visit the info object. * @param node */ public visitInfo(node: OasInfo): void { node.accept(this.visitor); this.traverseIfNotNull(node.contact); this.traverseIfNotNull(node.license); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the contact object. * @param node */ public visitContact(node: OasContact): void { node.accept(this.visitor); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the license object. * @param node */ public visitLicense(node: OasLicense): void { node.accept(this.visitor); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the paths. * @param node */ public visitPaths(node: OasPaths): void { node.accept(this.visitor); this.traverseIndexedNode(node); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the path item. * @param node */ public abstract visitPathItem(node: OasPathItem): void; /** * Visit the operation. * @param node */ public abstract visitOperation(node: OasOperation): void; /** * Visit the header. * @param node */ public abstract visitHeader(node: OasHeader): void; /** * Visit the header. * @param node */ public abstract visitSchema(node: OasSchema): void; /** * Visit the responses. * @param node */ public visitResponses(node: OasResponses): void { node.accept(this.visitor); this.traverseIndexedNode(node); this.traverseIfNotNull(node.default); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the scopes. * @param node */ public visitXML(node: OasXML): void { node.accept(this.visitor); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the security requirement. * @param node */ public visitSecurityRequirement(node: OasSecurityRequirement): void { node.accept(this.visitor); this.traverseValidationProblems(node); } /** * Visit the security scheme. * @param node */ public abstract visitSecurityScheme(node: OasSecurityScheme): void; /** * Visit the tag. * @param node */ public visitTag(node: OasTag): void { node.accept(this.visitor); this.traverseIfNotNull(node.externalDocs); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the external doc. * @param node */ public visitExternalDocumentation(node: OasExternalDocumentation): void { node.accept(this.visitor); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the extension. * @param node */ public visitExtension(node: OasExtension): void { node.accept(this.visitor); this.traverseValidationProblems(node); } /** * Visit the validation problem. * @param {OasValidationProblem} node */ public visitValidationProblem(node: OasValidationProblem): void { node.accept(this); // Don't traverse the validation problem's validation problems. :) } } /** * Used to traverse an OAS 2.0 tree and call an included visitor for each node. */ export class Oas20Traverser extends OasTraverser implements IOas20NodeVisitor { /** * Constructor. * @param visitor */ constructor(visitor: IOas20NodeVisitor) { super(visitor); } /** * Visit the document. * @param node */ public visitDocument(node: Oas20Document): void { node.accept(this.visitor); this.traverseIfNotNull(node.info); this.traverseIfNotNull(node.paths); this.traverseIfNotNull(node.definitions); this.traverseIfNotNull(node.parameters); this.traverseIfNotNull(node.responses); this.traverseIfNotNull(node.securityDefinitions); this.traverseArray(node.security); this.traverseArray(node.tags); this.traverseIfNotNull(node.externalDocs); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the path item. * @param node */ public visitPathItem(node: Oas20PathItem): void { node.accept(this.visitor); this.traverseIfNotNull(node.get); this.traverseIfNotNull(node.put); this.traverseIfNotNull(node.post); this.traverseIfNotNull(node.delete); this.traverseIfNotNull(node.options); this.traverseIfNotNull(node.head); this.traverseIfNotNull(node.patch); this.traverseArray(node.parameters); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the operation. * @param node */ public visitOperation(node: Oas20Operation): void { node.accept(this.visitor); this.traverseIfNotNull(node.externalDocs); this.traverseArray(node.parameters); this.traverseIfNotNull(node.responses); this.traverseArray(node.security); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit a parameter. * @param node */ private visitParameterBase(node: Oas20ParameterBase): void { node.accept(this.visitor); this.traverseIfNotNull(node.schema); this.traverseIfNotNull(node.items); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the parameter. * @param node */ public visitParameter(node: Oas20Parameter): void { this.visitParameterBase(node); } /** * Visit the parameter definition. * @param node */ public visitParameterDefinition(node: Oas20ParameterDefinition): void { this.visitParameterBase(node); } private visitResponseBase(node: Oas20ResponseBase): void { node.accept(this.visitor); this.traverseIfNotNull(node.schema); this.traverseIfNotNull(node.headers); this.traverseIfNotNull(node.examples); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the response. * @param node */ public visitResponse(node: Oas20Response): void { this.visitResponseBase(node); } /** * Visit the headers. * @param node */ public visitHeaders(node: Oas20Headers): void { node.accept(this.visitor); this.traverseIndexedNode(node); this.traverseValidationProblems(node); } /** * Visit the response definition. * @param node */ public visitResponseDefinition(node: Oas20ResponseDefinition): void { this.visitResponseBase(node); } /** * Visit the schema. * @param node */ public visitSchema(node: Oas20Schema): void { node.accept(this.visitor); if (node.items !== null && Array.isArray(node.items)) { this.traverseArray(<Oas20ItemsSchema[]>node.items); } else { this.traverseIfNotNull(<Oas20ItemsSchema>node.items); } this.traverseArray(node.allOf); let propNames: string[] = node.propertyNames(); if (propNames && propNames.length > 0) { for (let propName of propNames) { let prop: Oas20Schema = node.property(propName) as Oas20Schema; this.traverseIfNotNull(prop); } } if (typeof node.additionalProperties !== "boolean") { this.traverseIfNotNull(<Oas20AdditionalPropertiesSchema>node.additionalProperties); } this.traverseIfNotNull(node.xml); this.traverseIfNotNull(node.externalDocs); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the schema. * @param node */ public visitPropertySchema(node: Oas20PropertySchema): void { this.visitSchema(node); } /** * Visit the schema. * @param node */ public visitSchemaDefinition(node: Oas20SchemaDefinition): void { this.visitSchema(node); } /** * Visit the schema. * @param node */ public visitAdditionalPropertiesSchema(node: Oas20AdditionalPropertiesSchema): void { this.visitSchema(node); } /** * Visit the schema. * @param node */ public visitAllOfSchema(node: Oas20AllOfSchema): void { this.visitSchema(node); } /** * Visit the schema. * @param node */ public visitItemsSchema(node: Oas20ItemsSchema): void { this.visitSchema(node); } /** * Visit the header. * @param node */ public visitHeader(node: Oas20Header): void { node.accept(this.visitor); this.traverseIfNotNull(node.items); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the example. * @param node */ public visitExample(node: Oas20Example): void { node.accept(this.visitor); this.traverseValidationProblems(node); } /** * Visit the items. * @param node */ public visitItems(node: Oas20Items): void { node.accept(this.visitor); this.traverseIfNotNull(node.items); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the security definitions. * @param node */ public visitSecurityDefinitions(node: Oas20SecurityDefinitions): void { node.accept(this.visitor); this.traverseIndexedNode(node); this.traverseValidationProblems(node); } /** * Visit the security scheme. * @param node */ public visitSecurityScheme(node: Oas20SecurityScheme): void { node.accept(this.visitor); this.traverseIfNotNull(node.scopes); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the scopes. * @param node */ public visitScopes(node: Oas20Scopes): void { node.accept(this.visitor); this.traverseValidationProblems(node); } /** * Visit the definitions. * @param node */ public visitDefinitions(node: Oas20Definitions): void { node.accept(this.visitor); this.traverseIndexedNode(node); this.traverseValidationProblems(node); } /** * Visit the definitions. * @param node */ public visitParametersDefinitions(node: Oas20ParametersDefinitions): void { node.accept(this.visitor); this.traverseIndexedNode(node); this.traverseValidationProblems(node); } /** * Visit the responses. * @param node */ public visitResponsesDefinitions(node: Oas20ResponsesDefinitions): void { node.accept(this.visitor); this.traverseIndexedNode(node); this.traverseValidationProblems(node); } } /** * Used to traverse an OAS 3.0 tree and call an included visitor for each node. */ export class Oas30Traverser extends OasTraverser implements IOas30NodeVisitor { /** * Constructor. * @param visitor */ constructor(visitor: IOas30NodeVisitor) { super(visitor); } /** * Visit the document. * @param node */ public visitDocument(node: Oas30Document): void { node.accept(this.visitor); this.traverseIfNotNull(node.info); this.traverseArray(node.servers); this.traverseIfNotNull(node.paths); this.traverseIfNotNull(node.components); this.traverseArray(node.security); this.traverseArray(node.tags); this.traverseIfNotNull(node.externalDocs); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the node. * @param node */ public visitPathItem(node: Oas30PathItem): void { node.accept(this.visitor); this.traverseIfNotNull(node.get); this.traverseIfNotNull(node.put); this.traverseIfNotNull(node.post); this.traverseIfNotNull(node.delete); this.traverseIfNotNull(node.options); this.traverseIfNotNull(node.head); this.traverseIfNotNull(node.patch); this.traverseIfNotNull(node.trace); this.traverseArray(node.parameters); this.traverseArray(node.servers); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the node. * @param node */ public visitOperation(node: Oas30Operation): void { node.accept(this.visitor); this.traverseIfNotNull(node.externalDocs); this.traverseArray(node.parameters); this.traverseIfNotNull(node.responses); this.traverseIfNotNull(node.requestBody); this.traverseArray(node.getCallbacks()); this.traverseArray(node.security); this.traverseArray(node.servers); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the node. * @param node */ public visitHeader(node: Oas30Header): void { node.accept(this.visitor); this.traverseIfNotNull(node.schema); this.traverseArray(node.getExamples()); this.traverseArray(node.getMediaTypes()); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the node. * @param node */ public visitSchema(node: Oas30Schema): void { node.accept(this.visitor); if (Array.isArray(node.items)) { this.traverseArray(<Oas20ItemsSchema[]>node.items); } else { this.traverseIfNotNull(<Oas20ItemsSchema>node.items); } this.traverseArray(node.allOf); let propNames: string[] = node.propertyNames(); if (propNames && propNames.length > 0) { for (let propName of propNames) { let prop: Oas20Schema = node.property(propName) as Oas20Schema; this.traverseIfNotNull(prop); } } if (typeof node.additionalProperties !== "boolean") { this.traverseIfNotNull(<Oas20AdditionalPropertiesSchema>node.additionalProperties); } this.traverseArray(node.oneOf); this.traverseArray(node.anyOf); this.traverseIfNotNull(node.not); this.traverseIfNotNull(node.discriminator); this.traverseIfNotNull(node.xml); this.traverseIfNotNull(node.externalDocs); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the node. * @param node */ public visitDiscriminator(node: Oas30Discriminator): void { node.accept(this.visitor); this.traverseValidationProblems(node); } /** * Visit the node. * @param node */ public visitParameter(node: Oas30Parameter): void { this.visitParameterBase(node); } /** * Visit the node. * @param node */ public visitParameterDefinition(node: Oas30ParameterDefinition): void { this.visitParameterBase(node); } /** * Visit a parameter. * @param node */ private visitParameterBase(node: Oas30ParameterBase): void { node.accept(this.visitor); this.traverseIfNotNull(node.schema); this.traverseArray(node.getExamples()); this.traverseArray(node.getMediaTypes()); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the node. * @param node */ public visitResponse(node: Oas30Response): void { this.visitResponseBase(node); } /** * Visit the node. * @param node */ public visitResponseDefinition(node: Oas30ResponseDefinition): void { this.visitResponseBase(node); } /** * Visit a response. * @param node */ private visitResponseBase(node: Oas30ResponseBase): void { node.accept(this.visitor); this.traverseArray(node.getMediaTypes()); this.traverseArray(node.getLinks()); this.traverseArray(node.getHeaders()); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the node. * @param node */ public visitLink(node: Oas30Link): void { node.accept(this.visitor); this.traverseArray(node.getLinkParameterExpressions()); this.traverseIfNotNull(node.requestBody); this.traverseIfNotNull(node.server); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the node. * @param node */ public visitLinkParameterExpression(node: Oas30LinkParameterExpression): void { node.accept(this.visitor); this.traverseValidationProblems(node); } /** * Visit the node. * @param node */ public visitLinkRequestBodyExpression(node: Oas30LinkRequestBodyExpression): void { node.accept(this.visitor); this.traverseValidationProblems(node); } /** * Visit the node. * @param node */ public visitLinkServer(node: Oas30LinkServer): void { this.visitServer(node); } /** * Visit the node. * @param node */ public visitRequestBody(node: Oas30RequestBody): void { node.accept(this.visitor); this.traverseArray(node.getMediaTypes()); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the node. * @param node */ public visitMediaType(node: Oas30MediaType): void { node.accept(this.visitor); this.traverseIfNotNull(node.schema); this.traverseArray(node.getExamples()); this.traverseArray(node.getEncodings()); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the node. * @param node */ public visitEncoding(node: Oas30Encoding): void { node.accept(this.visitor); this.traverseArray(node.getHeaders()); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the node. * @param node */ public visitExample(node: Oas30Example): void { node.accept(this.visitor); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the node. * @param node */ public visitCallback(node: Oas30Callback): void { node.accept(this.visitor); this.traverseIndexedNode(node); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the node. * @param node */ public visitCallbackPathItem(node: Oas30CallbackPathItem): void { this.visitPathItem(node); } /** * Visit the node. * @param node */ public visitAllOfSchema(node: Oas30AllOfSchema): void { this.visitSchema(node); } /** * Visit the node. * @param node */ public visitAnyOfSchema(node: Oas30AnyOfSchema): void { this.visitSchema(node); } /** * Visit the node. * @param node */ public visitOneOfSchema(node: Oas30OneOfSchema): void { this.visitSchema(node); } /** * Visit the node. * @param node */ public visitNotSchema(node: Oas30NotSchema): void { this.visitSchema(node); } /** * Visit the node. * @param node */ public visitPropertySchema(node: Oas30PropertySchema): void { this.visitSchema(node); } /** * Visit the node. * @param node */ public visitItemsSchema(node: Oas30ItemsSchema): void { this.visitSchema(node); } /** * Visit the node. * @param node */ public visitAdditionalPropertiesSchema(node: Oas30AdditionalPropertiesSchema): void { this.visitSchema(node); } /** * Visit the node. * @param node */ public visitComponents(node: Oas30Components): void { node.accept(this.visitor); this.traverseArray(node.getSchemaDefinitions()); this.traverseArray(node.getResponseDefinitions()); this.traverseArray(node.getParameterDefinitions()); this.traverseArray(node.getExampleDefinitions()); this.traverseArray(node.getRequestBodyDefinitions()); this.traverseArray(node.getHeaderDefinitions()); this.traverseArray(node.getSecuritySchemes()); this.traverseArray(node.getLinkDefinitions()); this.traverseArray(node.getCallbackDefinitions()); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the node. * @param node */ public visitExampleDefinition(node: Oas30ExampleDefinition): void { this.visitExample(node); } /** * Visit the node. * @param node */ public visitRequestBodyDefinition(node: Oas30RequestBodyDefinition): void { this.visitRequestBody(node); } /** * Visit the node. * @param node */ public visitHeaderDefinition(node: Oas30HeaderDefinition): void { this.visitHeader(node); } /** * Visit the node. * @param node */ public visitSecurityScheme(node: Oas30SecurityScheme): void { node.accept(this.visitor); this.traverseIfNotNull(node.flows); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the node. * @param node */ public visitOAuthFlows(node: Oas30OAuthFlows): void { node.accept(this.visitor); this.traverseIfNotNull(node.implicit); this.traverseIfNotNull(node.password); this.traverseIfNotNull(node.clientCredentials); this.traverseIfNotNull(node.authorizationCode); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the node. * @param node */ public visitImplicitOAuthFlow(node: Oas30ImplicitOAuthFlow): void { this.visitOAuthFlow(node); } /** * Visit the node. * @param node */ public visitPasswordOAuthFlow(node: Oas30PasswordOAuthFlow): void { this.visitOAuthFlow(node); } /** * Visit the node. * @param node */ public visitClientCredentialsOAuthFlow(node: Oas30ClientCredentialsOAuthFlow): void { this.visitOAuthFlow(node); } /** * Visit the node. * @param node */ public visitAuthorizationCodeOAuthFlow(node: Oas30AuthorizationCodeOAuthFlow): void { this.visitOAuthFlow(node); } /** * Visit the node. * @param node */ private visitOAuthFlow(node: Oas30OAuthFlow): void { node.accept(this.visitor); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the node. * @param node */ public visitLinkDefinition(node: Oas30LinkDefinition): void { this.visitLink(node); } /** * Visit the node. * @param node */ public visitCallbackDefinition(node: Oas30CallbackDefinition): void { this.visitCallback(node); } /** * Visit the node. * @param node */ public visitSchemaDefinition(node: Oas30SchemaDefinition): void { this.visitSchema(node); } /** * Visit the node. * @param node */ public visitServer(node: Oas30Server): void { node.accept(this.visitor); this.traverseArray(node.getServerVariables()); this.traverseExtensions(node); this.traverseValidationProblems(node); } /** * Visit the node. * @param node */ public visitServerVariable(node: Oas30ServerVariable): void { node.accept(this.visitor); this.traverseExtensions(node); this.traverseValidationProblems(node); } } /** * Used to traverse up an OAS tree and call an included visitor for each node. */ export abstract class OasReverseTraverser implements IOasNodeVisitor, IOasTraverser { /** * Constructor. * @param visitor */ constructor(protected visitor: IOasNodeVisitor) {} /** * Traverse the given node. * @param node */ public traverse(node: OasNode): void { node.accept(this); } public visitDocument(node: OasDocument): void { node.accept(this.visitor); } public visitInfo(node: OasInfo): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitContact(node: OasContact): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitLicense(node: OasLicense): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitPaths(node: OasPaths): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitPathItem(node: OasPathItem): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitOperation(node: OasOperation): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitResponses(node: OasResponses): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitSchema(node: OasSchema): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitHeader(node: OasHeader): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitXML(node: OasXML): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitSecurityScheme(node: OasSecurityScheme): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitSecurityRequirement(node: OasSecurityRequirement): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitTag(node: OasTag): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitExternalDocumentation(node: OasExternalDocumentation): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitExtension(node: OasExtension): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitValidationProblem(node: OasValidationProblem): void { node.accept(this.visitor); this.traverse(node.parent()); } } /** * Used to traverse up an OAS 2.0 tree and call an included visitor for each node. */ export class Oas20ReverseTraverser extends OasReverseTraverser implements IOas20NodeVisitor, IOasTraverser { /** * Constructor. * @param visitor */ constructor(visitor: IOas20NodeVisitor) { super(visitor); } public visitParameter(node: Oas20Parameter): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitParameterDefinition(node: Oas20ParameterDefinition): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitResponse(node: Oas20Response): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitHeaders(node: Oas20Headers): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitResponseDefinition(node: Oas20ResponseDefinition): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitExample(node: Oas20Example): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitItems(node: Oas20Items): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitSecurityDefinitions(node: Oas20SecurityDefinitions): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitScopes(node: Oas20Scopes): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitSchemaDefinition(node: Oas20SchemaDefinition): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitPropertySchema(node: Oas20PropertySchema): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitAdditionalPropertiesSchema(node: Oas20AdditionalPropertiesSchema): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitAllOfSchema(node: Oas20AllOfSchema): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitItemsSchema(node: Oas20ItemsSchema): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitDefinitions(node: Oas20Definitions): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitParametersDefinitions(node: Oas20ParametersDefinitions): void { node.accept(this.visitor); this.traverse(node.parent()); } public visitResponsesDefinitions(node: Oas20ResponsesDefinitions): void { node.accept(this.visitor); this.traverse(node.parent()); } } /** * Used to traverse up an OAS 3.0 tree and call an included visitor for each node. */ export class Oas30ReverseTraverser extends OasReverseTraverser implements IOas30NodeVisitor, IOasTraverser { /** * Constructor. * @param visitor */ constructor(visitor: IOas30NodeVisitor) { super(visitor); } visitParameter(node: Oas30Parameter): void { node.accept(this.visitor); this.traverse(node.parent()); } visitParameterDefinition(node: Oas30ParameterDefinition): void { node.accept(this.visitor); this.traverse(node.parent()); } visitResponse(node: Oas30Response): void { node.accept(this.visitor); this.traverse(node.parent()); } visitLink(node: Oas30Link): void { node.accept(this.visitor); this.traverse(node.parent()); } visitLinkParameterExpression(node: Oas30LinkParameterExpression): void { node.accept(this.visitor); this.traverse(node.parent()); } visitLinkRequestBodyExpression(node: Oas30LinkRequestBodyExpression): void { node.accept(this.visitor); this.traverse(node.parent()); } visitLinkServer(node: Oas30LinkServer): void { node.accept(this.visitor); this.traverse(node.parent()); } visitResponseDefinition(node: Oas30ResponseDefinition): void { node.accept(this.visitor); this.traverse(node.parent()); } visitRequestBody(node: Oas30RequestBody): void { node.accept(this.visitor); this.traverse(node.parent()); } visitMediaType(node: Oas30MediaType): void { node.accept(this.visitor); this.traverse(node.parent()); } visitEncoding(node: Oas30Encoding): void { node.accept(this.visitor); this.traverse(node.parent()); } visitExample(node: Oas30Example): void { node.accept(this.visitor); this.traverse(node.parent()); } visitCallback(node: Oas30Callback): void { node.accept(this.visitor); this.traverse(node.parent()); } visitCallbackPathItem(node: Oas30CallbackPathItem): void { node.accept(this.visitor); this.traverse(node.parent()); } visitAllOfSchema(node: Oas30AllOfSchema): void { node.accept(this.visitor); this.traverse(node.parent()); } visitAnyOfSchema(node: Oas30AnyOfSchema): void { node.accept(this.visitor); this.traverse(node.parent()); } visitOneOfSchema(node: Oas30OneOfSchema): void { node.accept(this.visitor); this.traverse(node.parent()); } visitNotSchema(node: Oas30NotSchema): void { node.accept(this.visitor); this.traverse(node.parent()); } visitPropertySchema(node: Oas30PropertySchema): void { node.accept(this.visitor); this.traverse(node.parent()); } visitItemsSchema(node: Oas30ItemsSchema): void { node.accept(this.visitor); this.traverse(node.parent()); } visitAdditionalPropertiesSchema(node: Oas30AdditionalPropertiesSchema): void { node.accept(this.visitor); this.traverse(node.parent()); } visitDiscriminator(node: Oas30Discriminator): void { node.accept(this.visitor); this.traverse(node.parent()); } visitComponents(node: Oas30Components): void { node.accept(this.visitor); this.traverse(node.parent()); } visitExampleDefinition(node: Oas30ExampleDefinition): void { node.accept(this.visitor); this.traverse(node.parent()); } visitRequestBodyDefinition(node: Oas30RequestBodyDefinition): void { node.accept(this.visitor); this.traverse(node.parent()); } visitHeaderDefinition(node: Oas30HeaderDefinition): void { node.accept(this.visitor); this.traverse(node.parent()); } visitOAuthFlows(node: Oas30OAuthFlows): void { node.accept(this.visitor); this.traverse(node.parent()); } visitImplicitOAuthFlow(node: Oas30ImplicitOAuthFlow): void { node.accept(this.visitor); this.traverse(node.parent()); } visitPasswordOAuthFlow(node: Oas30PasswordOAuthFlow): void { node.accept(this.visitor); this.traverse(node.parent()); } visitClientCredentialsOAuthFlow(node: Oas30ClientCredentialsOAuthFlow): void { node.accept(this.visitor); this.traverse(node.parent()); } visitAuthorizationCodeOAuthFlow(node: Oas30AuthorizationCodeOAuthFlow): void { node.accept(this.visitor); this.traverse(node.parent()); } visitLinkDefinition(node: Oas30LinkDefinition): void { node.accept(this.visitor); this.traverse(node.parent()); } visitCallbackDefinition(node: Oas30CallbackDefinition): void { node.accept(this.visitor); this.traverse(node.parent()); } visitSchemaDefinition(node: Oas30SchemaDefinition): void { node.accept(this.visitor); this.traverse(node.parent()); } visitServer(node: Oas30Server): void { node.accept(this.visitor); this.traverse(node.parent()); } visitServerVariable(node: Oas30ServerVariable): void { node.accept(this.visitor); this.traverse(node.parent()); } }