in packages/build-plugin-lowcode/src/utils/parse-props.js [164:261]
module.exports = function (metadata) {
const { configure = {} } = metadata;
// TODO types后续补充
let extendsProps = null;
if (configure.props) {
if (Array.isArray(configure.props)) {
return metadata;
}
const { isExtends, override = [] } = configure.props;
// 不开启继承时,直接返回configure配置
if (!isExtends) {
return {
...metadata,
configure: {
...configure,
props: [...override],
},
};
}
extendsProps = {};
// 开启继承后,缓存重写内容的配置
override.forEach((prop) => {
extendsProps[prop.name] = prop;
});
}
if (!metadata.props) {
return {
...metadata,
configure: {
...configure,
props: [],
},
};
}
const { component = {}, supports = {} } = configure;
const supportedEvents = supports.events ? null : [];
const props = [];
metadata.props.forEach((prop) => {
const { name, propType, description } = prop;
if (
name === 'children' &&
(component.isContainer || propType === 'node' || propType === 'element' || propType === 'any')
) {
if (component.isContainer !== false) {
component.isContainer = true;
props.push(propConfigToFieldConfig(prop));
return;
}
}
if (EVENT_RE.test(name) && (propType === 'func' || propType === 'any')) {
if (supportedEvents) {
supportedEvents.push({
name,
description,
});
supports.events = supportedEvents;
}
return;
}
if (name === 'className' && (propType === 'string' || propType === 'any')) {
if (supports.className == null) {
supports.className = true;
}
return;
}
if (name === 'style' && (propType === 'object' || propType === 'any')) {
if (supports.style == null) {
supports.style = true;
}
return;
}
// 存在覆盖配置时
if (extendsProps) {
if (name in extendsProps) {
prop = extendsProps[name];
}
}
props.push(propConfigToFieldConfig(prop));
});
return {
...metadata,
configure: {
...configure,
props,
supports,
component,
},
};
};