UNPKG

rapplus

Version:
77 lines (76 loc) 3.12 kB
"use strict"; 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;