/* eslint-disable no-restricted-syntax 
@param {*} query
@param {object} props
@param {...*} children
@param {number} depth
function Structure(query, props, children, depth) {
  if ( props === void 0 ) props = {};
  if ( depth === void 0 ) depth = 0;

  this.query = query;
  this.props = Boolean !== props ? props : {};
  if (isComponent(query) || query instanceof Component) {
    this.$compChildren = flatten(children || []).map(filterNode);
    this.children = [];
  } else {
    this.children = flatten(children || []).map(filterNode);
    this.$compChildren = [];
  }
  this.html = null;
  this.$attrListeners = [];
  this.$styleListeners = [];
  this.$pointer = null;
  this.$component = null;
  this.$listener = null;
  this.$redirect = null;
  this.$destroyed = false;
  this.$isSvg = query === 'svg';
  this.$depth = depth;
}