static fromBabelNode()

in packages/babel-plugin-fbt/src/fbt-nodes/FbtElementNode.js [255:295]


  static fromBabelNode({
    moduleName,
    node,
  }: {|
    moduleName: JSModuleNameType,
    node: BabelNode,
  |}): ?FbtElementNode {
    if (!isCallExpression(node)) {
      return null;
    }
    const fbtElement = new FbtElementNode({
      moduleName,
      node,
    });
    const {
      arguments: [fbtContentsNode],
    } = node;

    if (!isArrayExpression(fbtContentsNode)) {
      throw errorAt(
        node,
        `${moduleName}: expected callsite's first argument to be an array`,
      );
    }

    for (const elementChild of fbtContentsNode.elements || []) {
      if (elementChild == null) {
        throw errorAt(node, `${moduleName}: elementChild must not be nullish`);
      }
      if (isSpreadElement(elementChild)) {
        throw errorAt(elementChild, `Array spread syntax is not supported`);
      }
      fbtElement.appendChild(
        this.createChildNode({
          moduleName,
          node: elementChild,
        }),
      );
    }
    return fbtElement;
  }