UNPKG

milady

Version:

Generate the front-end code by parsing the interface document

146 lines (111 loc) 3.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = _default; var _nodeFetch = _interopRequireDefault(require("node-fetch")); var _path = require("path"); var _fsExtra = require("fs-extra"); var _signale = _interopRequireDefault(require("signale")); var _common = require("./utils/common"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const loadPlugins = []; // eslint-disable-next-line space-before-function-paren async function _default({ dataSource, plugins = [], defaultPlugins = { mock: { enabled: true }, serviceJs: { enabled: false }, serviceTs: { enabled: true }, serviceT: { enabled: false } } }) { _signale.default.time('milady'); if (!dataSource) { _signale.default.log('必须携带URL地址,如milady https://xx.x.x/abc/v2/api-docs#/'); return; } /* 获取数据 */ let data; if ((0, _common.isUrl)(dataSource)) { data = await getData(dataSource); } else { const str = (0, _path.join)(process.cwd(), dataSource); // eslint-disable-next-line global-require,import/no-dynamic-require data = require(str); } /* 处理数据 */ const files = handleData(data, defaultPlugins, plugins); /* 生成代码 */ codeGen(files); _signale.default.timeEnd('milady'); } async function getData(dataSource) { const res = await (0, _nodeFetch.default)(dataSource); const data = await res.json(); const error = await data.catch; if (error) { _signale.default.error(error); } return data; } function handleData(SwaggerData, defaultPlugins, plugins) { const directory = []; /* 加载默认插件 */ const defaultPluginsName = (0, _fsExtra.readdirSync)((0, _path.join)(__dirname, '/plugins')); defaultPluginsName.forEach(item => { const defaultPlugin = defaultPlugins[item]; const str = (0, _path.join)(__dirname, '/plugins', item); // eslint-disable-next-line global-require,import/no-dynamic-require const defaultPluginFile = require(str).default; if (defaultPlugin.enabled) { directory.push({ outPath: defaultPluginFile.outPath, file: defaultPluginFile.handelData(SwaggerData) }); loadPlugins.push(item); } }); /* 加载配置插件 */ if (Object.prototype.toString.call(plugins) === '[object Array]') { if (plugins.length !== 0) { plugins.forEach(element => { if (element.hasOwnProperty('url')) { const str = (0, _path.join)(process.cwd(), element.url); // eslint-disable-next-line global-require,import/no-dynamic-require const pluginsFile = require(str).default; directory.push({ outPath: pluginsFile.outPath, file: pluginsFile.handelData(SwaggerData) }); loadPlugins.push(element.url.split('/').pop()); } else { _signale.default.error('插件字段类型有误!'); } }); } } else { _signale.default.error('请检查插件格式是否为数组!'); } // 检查插件类型 return directory; } function generate(outPath, fileArr) { fileArr.forEach(element => { let paths = outPath || 'out/'; paths = (0, _path.join)(paths, element.fileName); (0, _fsExtra.outputFileSync)(paths, element.fileStr, 'utf-8'); }); } function codeGen(files) { files.forEach(element => { generate(element.outPath, element.file); }); _signale.default.complete('文件创建完成'); _signale.default.complete(`加载插件列表:${loadPlugins.join('、')}`); }