function validateQueryEndpoints()

in packages/database/src/api/Reference_impl.ts [171:231]


function validateQueryEndpoints(params: QueryParams) {
  let startNode = null;
  let endNode = null;
  if (params.hasStart()) {
    startNode = params.getIndexStartValue();
  }
  if (params.hasEnd()) {
    endNode = params.getIndexEndValue();
  }

  if (params.getIndex() === KEY_INDEX) {
    const tooManyArgsError =
      'Query: When ordering by key, you may only pass one argument to ' +
      'startAt(), endAt(), or equalTo().';
    const wrongArgTypeError =
      'Query: When ordering by key, the argument passed to startAt(), startAfter(), ' +
      'endAt(), endBefore(), or equalTo() must be a string.';
    if (params.hasStart()) {
      const startName = params.getIndexStartName();
      if (startName !== MIN_NAME) {
        throw new Error(tooManyArgsError);
      } else if (typeof startNode !== 'string') {
        throw new Error(wrongArgTypeError);
      }
    }
    if (params.hasEnd()) {
      const endName = params.getIndexEndName();
      if (endName !== MAX_NAME) {
        throw new Error(tooManyArgsError);
      } else if (typeof endNode !== 'string') {
        throw new Error(wrongArgTypeError);
      }
    }
  } else if (params.getIndex() === PRIORITY_INDEX) {
    if (
      (startNode != null && !isValidPriority(startNode)) ||
      (endNode != null && !isValidPriority(endNode))
    ) {
      throw new Error(
        'Query: When ordering by priority, the first argument passed to startAt(), ' +
          'startAfter() endAt(), endBefore(), or equalTo() must be a valid priority value ' +
          '(null, a number, or a string).'
      );
    }
  } else {
    assert(
      params.getIndex() instanceof PathIndex ||
        params.getIndex() === VALUE_INDEX,
      'unknown index type.'
    );
    if (
      (startNode != null && typeof startNode === 'object') ||
      (endNode != null && typeof endNode === 'object')
    ) {
      throw new Error(
        'Query: First argument passed to startAt(), startAfter(), endAt(), endBefore(), or ' +
          'equalTo() cannot be an object.'
      );
    }
  }
}