function parseComponents(source) {
  try {
    const { components } = parse(source)
    return components.map(compStr => {
      try {
        return eval(`(${compStr})`)
      } catch (error) {
        throw new Error(`Failed to parse component: ${error.message}`)
      }
    })
  } catch (error) {
    throw new Error(`Failed to parse source: ${error.message}`)
  }
}
Parses component source and returns an array of component objects
@param {string} source - The component source code
@returns {Array<Object>} Array of parsed component objects
@throws {Error} If parsing fails