From f0bdf1c0a61c8dbd2a7b3758b12f005ebc85619f Mon Sep 17 00:00:00 2001 From: york yao Date: Mon, 26 Nov 2018 07:47:49 +0800 Subject: [PATCH] feat: generate paths --- README.md | 5 +++ demo/cases.swagger.json | 5 +-- src/swagger-doc-generator.ts | 61 +++++++++++++++++++++++------------- 3 files changed, 47 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index baaa628..04ee2bc 100644 --- a/README.md +++ b/README.md @@ -130,6 +130,11 @@ boolean[]: + `@param {string} name`: set argument `name: String!` + `@param {string} [name]`: set argument `name: String` +## swagger doc only + ++ `@method get`: set api method ++ `@path /pet/{id}`: set api url + ## number type alias ```ts diff --git a/demo/cases.swagger.json b/demo/cases.swagger.json index 09fc0f8..ca24fbc 100644 --- a/demo/cases.swagger.json +++ b/demo/cases.swagger.json @@ -6,9 +6,10 @@ "operationId": "getPetById", "parameters": [ { - "name": "petId", + "name": "id", "required": true, - "type": "integer" + "in": "query", + "type": "number" } ], "responses": { diff --git a/src/swagger-doc-generator.ts b/src/swagger-doc-generator.ts index 21aff83..2175713 100644 --- a/src/swagger-doc-generator.ts +++ b/src/swagger-doc-generator.ts @@ -1,29 +1,33 @@ -import { TypeDeclaration } from './utils' +import { TypeDeclaration, Type } from './utils' -export function generateSwaggerDoc(_typeDeclarations: TypeDeclaration[]) { - const result = { - swagger: '2.0', - paths: { - '/pet/{id}': { - get: { - operationId: 'getPetById', - parameters: [ - { - name: 'petId', - required: true, - type: 'integer' - } - ], - responses: { - 200: { - schema: { - $ref: '#/definitions/Pet' - } - } +export function generateSwaggerDoc(typeDeclarations: TypeDeclaration[]) { + const paths: { [path: string]: { [method: string]: any } } = {} + for (const typeDeclaration of typeDeclarations) { + if (typeDeclaration.kind === 'function' + && typeDeclaration.path + && typeDeclaration.method) { + if (!paths[typeDeclaration.path]) { + paths[typeDeclaration.path] = {} + } + paths[typeDeclaration.path][typeDeclaration.method] = { + operationId: typeDeclaration.name, + parameters: typeDeclaration.parameters.map((parameter) => ({ + name: parameter.name, + required: !parameter.optional, + in: 'query', + ...getType(parameter.type) + })), + responses: { + 200: { + ...getType(typeDeclaration.type) } } } - }, + } + } + const result = { + swagger: '2.0', + paths, definitions: { Pet: { type: 'object', @@ -60,3 +64,16 @@ export function generateSwaggerDoc(_typeDeclarations: TypeDeclaration[]) { } return JSON.stringify(result, null, 2) } + +function getType(type: Type) { + if (type.kind === 'reference') { + return { + schema: { + $ref: `#/definitions/${type.name}` + } + } + } + return { + type: type.kind + } +}