Skip to content

Latest commit

 

History

History
114 lines (89 loc) · 2.85 KB

README.md

File metadata and controls

114 lines (89 loc) · 2.85 KB

swag README

一、安装

1、打开 vscode。扩展中搜索 swag。安装并点击重新加载。

2、项目中要包含 swag-config.json 。配置如下:

{
  // 配置代码模板
  "templatePath": "./swagTemplate",
  "outDir": "../src/services",
  "originUrl": "http://your-service-hostname/v2/api-docs",
  // 配置代码风格
  "prettierConfig": {
    "printWidth": 120,
    "singleQuote": true,
    "trailingComma": "none",
    "jsxBracketSameLine": true
  }
}

代码模板:swagTemplate.ts

import { Template } from "swag-engine";

module.exports = {
  // 类型代码
  header(inter) {
    return `
    export ${inter.paramsType.replace("lock: number", "lock?: number")}
    
    export type Response = ${inter.responseType}

    export const init: Response;

    export function request(params${inter.bodyParams ? "" : "?"}: Params${
      inter.bodyParams ? `, bodyParams: ${inter.bodyParams}` : ""
    }): Promise<Response>;

    export function createFetchAction<Key>(types: FetchTypes<Key>): (params${
      inter.bodyParams ? "" : "?"
    }: Params${
      inter.bodyParams ? `, bodyParams: ${inter.bodyParams}` : ""
    }, meta?)
      => { type: Key; payload?: Response; params?: Params; url: string; types: string[] } & Promise<Response>
      `;
  },

  // 公共代码
  commonHeader() {
    return `
    interface FetchTypes<key> {
			error: 'error',
			success: key,
			loading: 'loading',
		};

		interface FetchAction<BO, key> {
			type: key,
			payload: BO,
    }
    `;
  },

  // 实现代码
  implement(inter) {
    return `
    /**
     * @description ${inter.description}
     */
    
    import { getUrl } from 'src/utils/reduxUtils';
    import * as defs from '../definitions/index';

    export ${inter.paramsType}

    export const init = ${inter.initialValue};

    export function createFetchAction(types) {
      return (params = {}${
        inter.bodyParams ? `, bodyParams` : ""
      }, meta?: any) => {
        return {
          types,
          meta,
          method: "${inter.method}",
          url: getUrl("${inter.path}", params, "${inter.method}"),
          ${inter.bodyParams ? "params: bodyParams," : "params,"}
          init: ${inter.initialValue},
        };
      };
    }
    `;
  }
} as Template;

二、使用

1、swag

1)如图。状态栏中的图标。如果是白色 swag(same),说明本地 swagger 文档与远程一致。

点击 swag 后,提示是否全量更新接口,点击确定可以全量更新接口。

2)当后端接口有更新,状态栏出现黄色 mod(n) 或者 基类(m)。这说明有 n 个模块或者 m 个基类与远程不同需要。可以点击查看详情并更新,基类更新会写基类影响的模块。目前没有这个 case 所以截不了图

3)点击同步按钮,主动同步远程数据。

4)vscode 打开后,swag 每隔 10 分钟同步一次远程数据。