UNPKG

@ywfe/cli

Version:

遥望前端开发命令行工具

271 lines (270 loc) 9.9 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.getApiIdsList = exports.reduceApis = exports.getApiIdsFromProjectId = exports.fetchData = exports.reduceQuery = exports.reduceRequestParams = exports.transformToPath = exports.transformToName = exports.insertStr = exports.reduceArray = exports.checkRequired = exports.reduceProperties = exports.upperCaseParam = exports.reduceType = exports.reduceRequestBodyForm = exports.reduceRequestBodyOther = exports.transformType = exports.logger = exports.classify = exports.capitalize = exports.camelize = exports.dasherize = void 0; const sync_request_1 = __importDefault(require("sync-request")); const chalk_1 = __importDefault(require("chalk")); const R = __importStar(require("ramda")); const STRING_DASHERIZE_REGEXP = /[ _]/g; const STRING_DECAMELIZE_REGEXP = /([a-z\d])([A-Z])/g; const STRING_CAMELIZE_REGEXP = /(-|_|\.|\s)+(.)?/g; const STRING_UNDERSCORE_REGEXP_1 = /([a-z\d])([A-Z]+)/g; const STRING_UNDERSCORE_REGEXP_2 = /-|\s+/g; function decamelize(str) { return str.replace(STRING_DECAMELIZE_REGEXP, '$1_$2').toLowerCase(); } exports.decamelize = decamelize; const dasherize = (str) => { return decamelize(str).replace(STRING_DASHERIZE_REGEXP, '-'); }; exports.dasherize = dasherize; exports.dasherize = exports.dasherize; const camelize = (str) => { return str .replace(STRING_CAMELIZE_REGEXP, (_match, _separator, chr) => { return chr ? chr.toUpperCase() : ''; }) .replace(/^([A-Z])/, (match) => match.toLowerCase()); }; exports.camelize = camelize; const capitalize = (str) => { return str.charAt(0).toUpperCase() + str.slice(1); }; exports.capitalize = capitalize; const classify = (str) => { return str .split('.') .map((part) => (0, exports.capitalize)((0, exports.camelize)(part))) .join(''); }; exports.classify = classify; exports.logger = console.log; const transformType = (data, typeMap) => { const type = typeMap[data.type] || 'any'; if (type === 'enum') { return 'string'; } else { return type; } }; exports.transformType = transformType; const reduceRequestBodyOther = (list) => { const reduceItem = (item) => { return ` /** ${item.description || ''} */ ${item.name}${item.required ? '' : '?'}: ${item.type};`; }; return list && list.length ? R.map(item => reduceItem(item))(list) : []; }; exports.reduceRequestBodyOther = reduceRequestBodyOther; const reduceRequestBodyForm = (forms = [], typeMap) => { if (!forms.length) { return forms; } const reduceItem = (item) => { return ` /** ${item.desc || ''} */ ${item.name}${item.required && item.required === '1' ? '' : '?'}: ${(0, exports.reduceType)(item, typeMap)};`; }; return forms && forms.length ? R.map(item => reduceItem(item))(forms) : []; }; exports.reduceRequestBodyForm = reduceRequestBodyForm; const reduceType = (data, typeMap) => { if (!data.type) { return 'any'; } else { return (0, exports.transformType)(data, typeMap) || 'any'; } }; exports.reduceType = reduceType; const upperCaseParam = (name) => { return name.slice(0, 1).toUpperCase() + name.slice(1); }; exports.upperCaseParam = upperCaseParam; const reduceProperties = (data) => { const { type } = data; if (type === 'object') { return { properties: data.properties, required: data.required }; } if (type === 'array') { return (0, exports.reduceProperties)(data.items); } else { return {}; } }; exports.reduceProperties = reduceProperties; const checkRequired = (required, key) => { if (!required) { return false; } if (R.type(required) === 'Object') { return required[key] ? true : false; } else { return required.indexOf(key) >= 0 ? true : false; } }; exports.checkRequired = checkRequired; const reduceArray = (data, name, typeMap) => { const { type } = data.items; if (type === 'object') { return `${name}[]`; } else if (type === 'array') { return `${(0, exports.reduceArray)(data.items, name, typeMap)}[]`; } else { return `${(typeMap[type]) || 'any'}[]`; } }; exports.reduceArray = reduceArray; const insertStr = (str, start, newStr) => { return str.slice(0, start) + newStr + str.slice(start); }; exports.insertStr = insertStr; const transformToName = (str, isOld) => { if (isOld) { let result = str; result = result.replace('.html', ''); result = result.replace('-', ''); return result ? R.pipe(R.split('/'), R.map((item) => { item = item ? item.split('{').join('') : item; item = item ? item.split('}').join('') : item; return R.toUpper(item.charAt(0)) + R.toLower(item.substring(1)); }), R.join(''))(result.replace('-', '')) : result.replace('-', ''); } else { return `API${str}`; } }; exports.transformToName = transformToName; const transformToPath = (str) => { return str ? R.pipe(R.split('/'), R.filter((item) => item.indexOf('{') < 0 && item.indexOf('}') < 0), R.join('/'))(str) : str; }; exports.transformToPath = transformToPath; const reduceRequestParams = (list) => { return R.map((item) => ` ${item.name}: string; `)(list); }; exports.reduceRequestParams = reduceRequestParams; const reduceQuery = (list, typeMap) => { const res = list && list.length ? R.pipe(R.flatten, R.map((item) => ` /** ${item.desc || ''} */ ${item.name}${item.required === '1' ? '' : '?'}: ${typeMap[item.example] ? typeMap[item.example] : 'string'}; `))(list) : []; return res; }; exports.reduceQuery = reduceQuery; const fetchData = (url, cookie) => { const res = (0, sync_request_1.default)('GET', url, { headers: { Cookie: cookie, }, }); if (res) { const result = JSON.parse(res.getBody('utf8')); return result; } else { return res; } }; exports.fetchData = fetchData; const getApiIdsFromProjectId = (config, id) => { const apiResult = []; const { yapiCookie, yapiDomain } = config; const url = `${yapiDomain}api/plugin/export?type=json&pid=${id.id}&status=all&isWiki=false`; const result = (0, exports.fetchData)(url, yapiCookie); if (result) { const list = R.flatten(R.pluck('list', result)); if (list.length) { list.map(data => { apiResult.push({ id: data._id, isFunction: false, isMethod: false, }); }); } else { (0, exports.logger)(`${chalk_1.default.red(`✖️ API获取失败!`)}。错误信息:\r\n`, result); } } return apiResult; }; exports.getApiIdsFromProjectId = getApiIdsFromProjectId; const reduceApis = (apis, { isFunction = false, isMethod = false }) => { const keys = R.keys(apis) || []; const apiIdsList = keys.length ? R.pipe(R.keys, R.map(key => R.map((value) => ({ id: value, projectId: key, isV2: (key.indexOf('_V2') !== -1) ? true : false, isFunction, isMethod, }))(apis[key])), R.flatten)(apis) : []; return apiIdsList; }; exports.reduceApis = reduceApis; const getApiIdsList = (config, inputProjectId = '') => { const { yapi_projectId = {}, yapi_apiId = {}, yapi_apiId_mock = [], } = config; let apiResult = []; if (inputProjectId) { if (yapi_apiId[inputProjectId]) { const apiIdsList = (0, exports.reduceApis)({ [inputProjectId]: yapi_apiId[inputProjectId] }, {}); apiResult = apiResult.concat(apiIdsList); } else { (0, exports.logger)(`${chalk_1.default.red(`✖️ 项目ID错误!yw.config.josn文件中 yapi_apiId[${inputProjectId}] 不存在`)}`); } } else { if (yapi_projectId) { const projectIdsList = (0, exports.reduceApis)(yapi_projectId, {}); if (projectIdsList.length) { projectIdsList.map((item) => { apiResult = apiResult.concat((0, exports.getApiIdsFromProjectId)(config, item)); }); } } if (yapi_apiId) { const apiIdsList = (0, exports.reduceApis)(yapi_apiId, {}); apiResult = apiResult.concat(apiIdsList); } } if (yapi_apiId_mock) { apiResult = apiResult.map((item) => (Object.assign(Object.assign({}, item), { isMock: (yapi_apiId_mock && yapi_apiId_mock.includes(item.id)) }))); } return apiResult; }; exports.getApiIdsList = getApiIdsList;