r = (query, props, ...children) => {
  if (typeof GLOBALS.CUSTOM_TAGS[query] !== 'undefined') {
    return GLOBALS.CUSTOM_TAGS[query].onmount(
      props || {},
      (children && flatten([children]).map(filterNode)) || [],
      filterNode,
      v => (GLOBALS.CUSTOM_TAGS[query].saved = v)
    ) || null;
  }

  if (query === 'await') {
    var output = null;

    if (props.src && props.src instanceof Promise) {
      props.src.then(v => {
        var nomalizedData = filterNode(
          typeof props.transform === 'function'
            ? props.transform(v)
            : v
        );

        if (output) {
          output = patch(output, nomalizedData, output.html[0].parentNode);
        } else {
          output = nomalizedData;
        }
      }).catch(error => {
        var placerror = filterNode(
          typeof props.error === 'function'
            ? props.error(error)
            : props.error
        );

        if (output) {
          output = patch(output, placerror, output.html[0].parentNode);
        } else {
          output = placerror;
        }
      });
    }

    if (!output) {
      output = filterNode(props.placeholder);
    }

    return output;
  }

  if (query === 'template') {
    // return flatten([children]).map(filterNode);
    return new Structure('section', props, flatten([children]).map(filterNode));
  }

  return new Structure(query, props, flatten([children]).map(filterNode));
}
@param {*} query
@param {object} props
@param {...*} children
@returns {object}