whole_func_string: function getPlainObjectNodeValue(node, path, t) {
      let result;
      if (t.isObjectExpression(node)) {
          result = {};
  
          let props = node.properties || [];
          for (let i = 0, len = props.length; i < len; i++) {
              let subNode = props[i];
              let keyNode = subNode.key;
              let key;
              if (t.isLiteral(keyNode)) {
                  key = keyNode.value;
              }
              else if (t.isIdentifier(keyNode)) {
                  key = keyNode.name;
              }
  
              if (!key) {
                  continue;
              }
  
              result[key] = getPlainObjectNodeValue(subNode.value, path, t);
          }
      }
      else if (t.isArrayExpression(node)) {
          result = [];
          node.elements.forEach(item => {
              result.push(getPlainObjectNodeValue(item, path, t));
          });
      }
      else if (t.isNullLiteral(node)) {
          result = null;
      }
      else if (t.isLiteral(node)) {
          result = node.value;
      }
      else {
          throw path.buildCodeFrameError('only constant is supported');
      }
      return result;
  }
func_code_string: function getPlainObjectNodeValue(node, path, t) {
      let result;
      if (t.isObjectExpression(node)) {
          result = {};
  
          let props = node.properties || [];
          for (let i = 0, len = props.length; i < len; i++) {
              let subNode = props[i];
              let keyNode = subNode.key;
              let key;
              if (t.isLiteral(keyNode)) {
                  key = keyNode.value;
              }
              else if (t.isIdentifier(keyNode)) {
                  key = keyNode.name;
              }
  
              if (!key) {
                  continue;
              }
  
              result[key] = getPlainObjectNodeValue(subNode.value, path, t);
          }
      }
      else if (t.isArrayExpression(node)) {
          result = [];
          node.elements.forEach(item => {
              result.push(getPlainObjectNodeValue(item, path, t));
          });
      }
      else if (t.isNullLiteral(node)) {
          result = null;
      }
      else if (t.isLiteral(node)) {
          result = node.value;
      }
      else {
          throw path.buildCodeFrameError('only constant is supported');
      }
      return result;
  }
func_documentation_string: Convert the plain object node to javascript object
  
  @inner
  @param {Object} node the plain object node
  @param {Object} path the node path
  @param {Object} t the babel type definition
  @return {Object}