#I4GCYB 文档解析增加$ref类型

This commit is contained in:
暮光:城中城
2021-11-01 22:45:27 +08:00
parent d3ed4e8334
commit 95f0e26f82

View File

@@ -25,11 +25,13 @@ export default {
if (type === 'array') {
// 解析parameter.items.$ref 或 parameter.items.originalRef {$ref: "#/definitions/Model", originalRef: "Model"}
// 解析parameter.items.type {type: 'file'}
if (parameter.items && parameter.items.originalRef) {
children = this.getParamDefinitions(parameter.items.originalRef, definitionsDataMap, indexKey, {}, 0);
if (this.isSchemaRef(parameter.items)) {
subType = this.getSchemaRef(parameter.schema);
children = this.getParamDefinitions(subType, definitionsDataMap, indexKey, {}, 0);
} else if (parameter.schema) {
if (parameter.schema.items && parameter.schema.items.originalRef) {
children = this.getParamDefinitions(parameter.schema.items.originalRef, definitionsDataMap, indexKey, {}, 0);
if (this.isSchemaRef(parameter.schema.items)) {
subType = this.getSchemaRef(parameter.schema.items);
children = this.getParamDefinitions(subType, definitionsDataMap, indexKey, {}, 0);
} else if (parameter.schema.type) {
subType = parameter.schema.type;
}
@@ -40,9 +42,9 @@ export default {
}
} else if (!type) {
if (parameter.schema) {
if (parameter.schema.originalRef) {
if (this.isSchemaRef(parameter.schema)) {
// 解析parameter.schema {originalRef: "Model", $ref: "#/definitions/Model"}
type = parameter.schema.originalRef;
type = this.getSchemaRef(parameter.schema);
children = this.getParamDefinitions(type, definitionsDataMap, indexKey, {}, 0);
} else if (parameter.schema.type) {
type = parameter.schema.type;
@@ -51,8 +53,9 @@ export default {
children = this.getAdditionalProperties(parameter.schema.additionalProperties, additional, definitionsDataMap, indexKey, {}, 0);
format = additional.type;
} else if (parameter.schema.items) {
if (parameter.schema.items.originalRef) {
children = this.getParamDefinitions(parameter.schema.items.originalRef, definitionsDataMap, indexKey, {}, 0);
if (this.isSchemaRef(parameter.schema.items)) {
subType = this.getSchemaRef(parameter.schema.items);
children = this.getParamDefinitions(subType, definitionsDataMap, indexKey, {}, 0);
} else if (parameter.schema.items.type) {
subType = parameter.schema.items.type;
} else {
@@ -118,9 +121,9 @@ export default {
let codeResponses = responses[code];
let type = undefined;
let children = undefined;
if (codeResponses.schema && codeResponses.schema.originalRef) {
type = codeResponses.schema.originalRef;
children = this.getParamDefinitions(codeResponses.schema.originalRef, definitionsDataMap, indexKey, {}, 0);
if (this.isSchemaRef(codeResponses.schema)) {
type = this.getSchemaRef(codeResponses.schema);
children = this.getParamDefinitions(type, definitionsDataMap, indexKey, {}, 0);
}
responsesList.push({
code: code,
@@ -133,6 +136,15 @@ export default {
});
return responsesList;
},
isSchemaRef(schema) {
return !!(schema && (schema.originalRef || schema['$ref']));
},
getSchemaRef(schema) {
if (schema.originalRef) return schema.originalRef;
if (schema['$ref'] && schema['$ref'].indexOf('#/definitions/') === 0) return schema['$ref'].replace('#/definitions/', '');
this.logMessage('9467', '', schema);
return '';
},
getParamDefinitions(ref, definitionsDataMap, indexKey, parentRef, deep) {
let definition = definitionsDataMap[ref];
// 层级大于5层 或者 没有类型定义
@@ -167,9 +179,9 @@ export default {
});
if (type === 'array') {
// 解析parameter.items {originalRef: "Model", $ref: "#/definitions/Model"}
if (parameter.items && parameter.items.originalRef) {
subType = parameter.items.originalRef;
children = this.getParamDefinitions(parameter.items.originalRef, definitionsDataMap, keySub, parentRef, deep + 1);
if (this.isSchemaRef(parameter.items)) {
subType = this.getSchemaRef(parameter.items);
children = this.getParamDefinitions(subType, definitionsDataMap, keySub, parentRef, deep + 1);
} else if (parameter.items && parameter.items.type) {
subType = parameter.items.type;
} else {
@@ -184,9 +196,9 @@ export default {
this.log('0041', type, parameter);
}
} else if (!type) {
if (parameter.originalRef) {
type = parameter.originalRef;
children = this.getParamDefinitions(parameter.originalRef, definitionsDataMap, keySub, parentRef, deep + 1);
if (this.isSchemaRef(parameter)) {
type = this.getSchemaRef(parameter);
children = this.getParamDefinitions(type, definitionsDataMap, keySub, parentRef, deep + 1);
} else {
this.logMessage('005', type, parameter);
}
@@ -225,9 +237,9 @@ export default {
return paramList.length > 0 ? paramList : undefined;
},
getAdditionalProperties(additionalProperties, additional, definitionsDataMap, keySub, parentRef, deep) {
if (additionalProperties.originalRef) {
additional.type = additionalProperties.originalRef;
additional.children = this.getParamDefinitions(additionalProperties.originalRef, definitionsDataMap, keySub, parentRef, deep + 1);
if (this.isSchemaRef(additionalProperties)) {
additional.type = this.getSchemaRef(additionalProperties);
additional.children = this.getParamDefinitions(additional.type, definitionsDataMap, keySub, parentRef, deep + 1);
return additional.additional;
} else if (additionalProperties.additionalProperties) {
additional.type = additionalProperties.type;
@@ -235,10 +247,11 @@ export default {
return this.getAdditionalProperties(additionalProperties.additionalProperties, additional.additional, definitionsDataMap, keySub, parentRef, deep + 1);
} else if (additionalProperties.type === 'array') {
additional.type = additionalProperties.type;
if (additionalProperties.items && additionalProperties.items.originalRef) {
let children = this.getParamDefinitions(additionalProperties.items.originalRef, definitionsDataMap, keySub, parentRef, deep + 1);
if (this.isSchemaRef(additionalProperties.items)) {
let subType = this.getSchemaRef(additionalProperties.items);
let children = this.getParamDefinitions(subType, definitionsDataMap, keySub, parentRef, deep + 1);
additional.additional = {
type: additionalProperties.items.originalRef,
type: subType,
children: children
};
return children;