code: function call(key) {
    var node = this.node;
    if (!node) return;
  
    var opts = this.opts;
  
    var _arr = [opts[key], opts[node.type] && opts[node.type][key]];
    for (var _i = 0; _i < _arr.length; _i++) {
      var fns = _arr[_i];
      if (!fns) continue;
  
      var _arr2 = fns;
      for (var _i2 = 0; _i2 < _arr2.length; _i2++) {
        var fn = _arr2[_i2];
        if (!fn) continue;
  
        var _node = this.node;
        if (!_node) return;
  
        var previousType = this.type;
  
        // call the function with the params (node, parent, scope, state)
        var replacement = fn.call(this, _node, this.parent, this.scope, this.state);
  
        if (replacement) {
          this.replaceWith(replacement, true);
        }
  
        if (this.shouldStop || this.shouldSkip || this.removed) return;
  
        if (previousType !== this.type) {
          this.queueNode(this);
          return;
        }
      }
    }
  }
docs: [Please add a description.]