UNPKG

auto-request

Version:

通过Yapi JSON Schema生成接口Axios或Taro接口

79 lines (67 loc) 3.22 kB
/** * Account API 构建测试(使用 CommonJS) * 测试从编译后的 dist/bundle.js 使用 auto-request */ const { autoRequest, renderMethodArgs, wrapperMethodPreInterface } = require('../../dist/bundle.js'); const path = require('path'); const accountApi = require('../../example/account/swagger.json'); const { accountConfig } = require('../base/configs'); const outputDir = path.join(__dirname, './../../example/account/api/'); const snapshotsFile = path.join(__dirname, './../../example/account/snapshots.md'); const logDir = path.join(__dirname, './../../example/account/api/'); const swaggerBackupPath = path.join(__dirname, './../../example/account/swagger.json'); // Account 配置(包含自定义 renderMethodCall) const getAccountConfig = () => ({ ...accountConfig.baseConfig, snapshotsPath: snapshotsFile, loggerPath: path.join(logDir, 'errors.json'), // 使用完整路径 swaggerBackupPath: swaggerBackupPath, skipPrompt: true, // 测试时跳过交互提示 renderHeaderTemplate: () => `import axios, { AxiosRequestConfig, AxiosResponse } from 'axios'\n\n`, renderMethodCall: function () { // 清理函数名中的特殊字符 let methodName = this.getMethodsName(); // 移除所有花括号及其内容 methodName = methodName.replace(/\{[^}]*\}/g, ''); // 移除所有特殊字符,只保留字母数字和下划线 methodName = methodName.replace(/[^a-zA-Z0-9_]/g, ''); // 使用标准的泛型参数生成器 const preInterface = renderMethodArgs(wrapperMethodPreInterface(this)); // 获取函数参数(带类型) const pathArgs = this.getMethodPrePath(); const paramsArgs = this.getMethodPreParams(); const dataArgs = this.renderGetMethodData(); const optionArgs = this.getMethodOption(); const args = renderMethodArgs([pathArgs, paramsArgs, dataArgs, optionArgs]); const requestArgs = renderMethodArgs([ `url: \`${this.getUrl()}\``, `method: '${this.method}'`, `${this.renderOptionsStr.data}`, `${this.renderOptionsStr.params}`, `...options`, ]); // 生成summary(如果与description不同) const summary = this.description === this.summary ? '' : `\n * @summary ${this.summary}`; return ` /*** * @description ${this.description || ''}${summary} **/ export const ${methodName} = <${preInterface}>(${args}): Promise<S> => { return axios.request({${requestArgs}}) }\n`; }, }); (async () => { console.log('\n╔════════════════════════════════════════════╗'); console.log('║ Account API 构建测试 (使用 bundle.js) ║'); console.log('╚════════════════════════════════════════════╝\n'); console.log('--- 从本地 swagger.json 生成 ---'); try { const result = await autoRequest(JSON.stringify(accountApi), outputDir, getAccountConfig()); await result.write(); console.log('✅ Account API 生成成功\n'); } catch (error) { console.error('❌ Account API 生成失败:', error); process.exit(1); } })();