validateComponent(data = null, row = null, flags = {}) {
    data = data || this.rootValue;
    row = row || this.data;
    const { async = false } = flags;
    if (this.shouldSkipValidation(data, row, flags)) {
      return async ? Promise.resolve([]) : [];
    }
    const processContext = {
      component: this.component,
      data,
      row,
      local: !!flags.local,
      value: this.validationValue,
      parent: this.parent?.component,
      paths: this.paths,
      path: this.path || this.component.key,
      instance: this,
      form: this.root ? this.root._form : {},
      scope: { errors: [] },
      processors: [
        validateProcessInfo
      ]
    };

    if (async) {
      return processOne(processContext).then(() => {
        this._errors = this.interpolateErrors(processContext.scope.errors);
        return this._errors;
      });
    }
    processOneSync(processContext);
    this._errors = this.interpolateErrors(processContext.scope.errors);
    return this._errors;
  }
Perform a component validation.
@param {*} data - The root data you wish to use for this component.
@param {*} row - The contextual row data you wish to use for this component.
@param {*} flags - The flags to control the behavior of the validation.
@returns {Array<any>} - An array of errors if the component is invalid.