编辑代码

const data = {
  "methods": [
    {
      "name": "deleteProduct",
      "description": "删除当前商品",
      "params": [
        {
          "title": "param",
          "type": {
            "name": " @import('@jd/b2b-be-matchmaking-sdk/lib/vos/QuotationVo).QuotationVo "
          },
          "name": "data"
        }
      ],
      "tags": {
        "access": [
          {
            "description": "public",
            "title": "access"
          }
        ],
        "params": [
          {
            "title": "param",
            "type": {
              "name": " @import('@jd/b2b-be-matchmaking-sdk/lib/vos/QuotationVo).QuotationVo "
            },
            "name": "data"
          }
        ]
      }
    }
  ],
  "exportName": "default",
  "displayName": "addProduct",
  "description": "",
  "tags": {},
  "props": [
    {
      "name": "params",
      "tags": {},
      "description": "The size of the button allows only some values",
      "values": [
        "small",
        "medium",
        "large"
      ],
      "type": {
        "name": "QuotationVo"
      },
      "required": true
    },
    {
      "name": "size",
      "tags": {},
      "type": {
        "name": "string"
      },
      "defaultValue": {
        "func": false,
        "value": "'small'"
      }
    }
  ],
  "events": [
    {
      "name": "success",
      "description": "Success event.",
      "type": {
        "names": [
          "undefined"
        ]
      },
      "properties": [
        {
          "type": {
            "names": [
              "string"
            ]
          },
          "name": "content",
          "description": "content of the first prop passed to the event"
        },
        {
          "type": {
            "names": [
              "object"
            ]
          },
          "name": "example",
          "description": "the demo example"
        }
      ]
    }
  ],
  "slots": [
    {
      "name": "footer",
      "scoped": true,
      "description": "渲染底部footer内容",
      "bindings": [
        {
          "title": "binding",
          "type": {
            "name": "object"
          },
          "name": "data",
          "description": "data of the menu item"
        }
      ]
    }
  ]
}


function transformData (data) {
    return {
        displayName: data.displayName,
        description: data.description,
        methods: transformMethods(data),
        props: transformProps(data),
        events: transformEvents(data)
    }
}

function transformMethods(data) {
    const methods = data.methods
    if(methods) {
        return methods.map(method => {
            return {
                name: method.name,
                params: method.params.map(param => {
                    return {
                        name: param.name,
                        type: param.type.name
                    }
                }),
                description: method.description
            }
        })
    }
    return []
}


function transformProps(data) {
    const props = data.props
    if(props) {
        return props.map(prop => {
            return {
                name: prop.name,
                type: prop.type.name,
                values: prop.values,
                required: prop.required,
                defaultValue: prop.defaultValue.value,
                description: prop.description
            }
        })
    }
    return []
}


function transformEvents(data) {
    const events = data.events
    if(events) {
        return events.map(event => {
            return {
                name: event.name,
                description: event.description,
                properties: event.properties.map(propertie => {
                    return {
                        name: propertie.name,
                        description: propertie.description,
                        type: propertie.type.name,
                    }
                })
            }
        })
    }
    return []
}

function transformSlots(data) {
    const slots = data.slots
    if(slots) {
        return slots.map(slot => {
            return {
                name: slot.name,
                description: slot.description,
                bindings: event.bindings.map(binding => {
                    return {
                        name: binding.name,
                        description: binding.description,
                        type: binding.type.name,
                    }
                })
            }
        })
    }
    return []
}
transformData(data)