code: function AndOrPredicate(op, preds) {
        this.op = this._resolveOp(op);
        if (preds.length == 1 && Array.isArray(preds[0])) {
          preds = preds[0];
        }
        this.preds = preds.filter(function (pred) {
          return pred != null;
        }).map(function (pred) {
          return Predicate(pred);
        });
        if (this.preds.length == 0) {
          // marker for an empty predicate
          this.op = null;
        }
        if (this.preds.length == 1) {
          return this.preds[0];
        }
      }
docs: two public props: op, preds