rapplus
Version:
rapper, use http api as a function
77 lines (76 loc) • 3.12 kB
JavaScript
;
exports.__esModule = true;
exports.generateUploadRapJson = exports.tsTypeParse = void 0;
var TJS = require("typescript-json-schema");
var settings = {
required: true,
comments: true,
validationKeywords: ['value', 'rule']
};
var compilerOptions = {
strictNullChecks: true
};
// console.log('开始工作....');
// const program = TJS.getProgramFromFiles([path.join(__dirname, typeFile)], compilerOptions, './');
// const schema = TJS.generateSchema(program, '*', settings);
function tsTypeParse(file) {
var program = TJS.getProgramFromFiles([file], compilerOptions, './');
return TJS.generateSchema(program, '*', settings);
}
exports.tsTypeParse = tsTypeParse;
var IDX = 1;
// const ifs = []
function generateRapJson(definitions, currentDefinitions, scope, parentId, interfaceId, name) {
if (!currentDefinitions) {
throw new Error(name + " \u51FA\u73B0\u4E86\u4E00\u4E2A\u9519\u8BEF\uFF0C\u7C7B\u578B\u672A\u627E\u5230");
}
var ifs = [];
// in 什么都能循环
var obj = currentDefinitions;
var isObject = (obj === null || obj === void 0 ? void 0 : obj.type) === 'object';
var properties = isObject ? obj.properties : obj.items.properties;
var required = (isObject ? obj.required : obj.items.required) || [];
for (var key in properties) {
var element = properties[key];
if (element['$ref']) {
// 有泛型
var genericName = element['$ref'];
element = genericName.replace(/^#\//, '').split('/');
element.shift();
element = element.reduce(function (c, n) {
return c[n];
}, definitions);
}
// 第一层肯定是一个obk
var id = "$memory-" + IDX;
var type = element["enum"] ? typeof element["enum"][0] : element.type;
var ifItem = {
scope: scope,
name: key,
type: type.charAt(0).toUpperCase() + type.slice(1),
value: typeof element.value === 'string'
? element.value.replace(/^(#|\\@|\/@)/, '@')
: JSON.stringify(element.value) || '',
description: element.description || '',
parentId: parentId,
interfaceId: interfaceId,
id: id,
pos: 2,
required: required.includes(key),
rule: element.rule || '',
memory: true
};
ifs.push(ifItem);
IDX++;
if (element.type === 'object' || element.type === 'array') {
ifs.push.apply(ifs, generateRapJson(definitions, element, scope, id, interfaceId, key));
}
}
return ifs;
}
function generateUploadRapJson(schema, interfaceId, responseTypeName, requestTypeName) {
var parentId = -1;
IDX = 1;
return generateRapJson(schema.definitions, schema.definitions[responseTypeName], 'response', parentId, interfaceId, responseTypeName).concat(generateRapJson(schema.definitions, schema.definitions[requestTypeName], 'request', parentId, interfaceId, requestTypeName));
}
exports.generateUploadRapJson = generateUploadRapJson;