@ywfe/cli
Version:
遥望前端开发命令行工具
271 lines (270 loc) • 9.9 kB
JavaScript
;
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;