Skip to content

Commit ba13820

Browse files
Validation
1 parent 71bdf7e commit ba13820

File tree

2 files changed

+24
-26
lines changed

2 files changed

+24
-26
lines changed

packages/firestore/src/api/database.ts

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ import {
6969
validateStringEnum,
7070
valueDescription
7171
} from '../util/input_validation';
72-
import { logError, setLogLevel, LogLevel, getLogLevel } from '../util/log';
72+
import { getLogLevel, logError, LogLevel, setLogLevel } from '../util/log';
7373
import { AutoId } from '../util/misc';
7474
import { Deferred, Rejecter, Resolver } from '../util/promise';
7575
import { FieldPath as ExternalFieldPath } from './field_path';
@@ -1447,32 +1447,31 @@ export class Query<T = firestore.DocumentData> implements firestore.Query<T> {
14471447

14481448
// Enumerated from the WhereFilterOp type in index.d.ts.
14491449
const whereFilterOpEnums = [
1450-
'<',
1451-
'<=',
1452-
'==',
1453-
'>=',
1454-
'>',
1455-
'array-contains',
1456-
'in',
1457-
'array-contains-any'
1450+
Operator.LESS_THAN,
1451+
Operator.LESS_THAN_OR_EQUAL,
1452+
Operator.EQUAL,
1453+
Operator.GREATER_THAN_OR_EQUAL,
1454+
Operator.GREATER_THAN,
1455+
Operator.ARRAY_CONTAINS,
1456+
Operator.IN,
1457+
Operator.ARRAY_CONTAINS_ANY
14581458
];
1459-
validateStringEnum('Query.where', whereFilterOpEnums, 2, opStr);
1459+
const op = validateStringEnum('Query.where', whereFilterOpEnums, 2, opStr);
14601460

14611461
let fieldValue: api.Value;
14621462
const fieldPath = fieldPathFromArgument('Query.where', field);
1463-
const operator = opStr as Operator;
14641463
if (fieldPath.isKeyField()) {
14651464
if (
1466-
operator === Operator.ARRAY_CONTAINS ||
1467-
operator === Operator.ARRAY_CONTAINS_ANY
1465+
opStr === Operator.ARRAY_CONTAINS ||
1466+
opStr === Operator.ARRAY_CONTAINS_ANY
14681467
) {
14691468
throw new FirestoreError(
14701469
Code.INVALID_ARGUMENT,
1471-
`Invalid Query. You can't perform '${operator.toString()}' ` +
1470+
`Invalid Query. You can't perform '${op}' ` +
14721471
'queries on FieldPath.documentId().'
14731472
);
1474-
} else if (operator === Operator.IN) {
1475-
this.validateDisjunctiveFilterElements(value, operator);
1473+
} else if (opStr === Operator.IN) {
1474+
this.validateDisjunctiveFilterElements(value, op);
14761475
const referenceList: api.Value[] = [];
14771476
for (const arrayValue of value as api.Value[]) {
14781477
referenceList.push(this.parseDocumentIdValue(arrayValue));
@@ -1482,20 +1481,17 @@ export class Query<T = firestore.DocumentData> implements firestore.Query<T> {
14821481
fieldValue = this.parseDocumentIdValue(value);
14831482
}
14841483
} else {
1485-
if (
1486-
operator === Operator.IN ||
1487-
operator === Operator.ARRAY_CONTAINS_ANY
1488-
) {
1489-
this.validateDisjunctiveFilterElements(value, operator);
1484+
if (opStr === Operator.IN || opStr === Operator.ARRAY_CONTAINS_ANY) {
1485+
this.validateDisjunctiveFilterElements(value, op);
14901486
}
14911487
fieldValue = this.firestore._dataReader.parseQueryValue(
14921488
'Query.where',
14931489
value,
14941490
// We only allow nested arrays for IN queries.
1495-
/** allowArrays = */ operator === Operator.IN
1491+
/** allowArrays = */ op === Operator.IN
14961492
);
14971493
}
1498-
const filter = FieldFilter.create(fieldPath, operator, fieldValue);
1494+
const filter = FieldFilter.create(fieldPath, op, fieldValue);
14991495
this.validateNewFilter(filter);
15001496
return new Query(
15011497
this._query.addFilter(filter),

packages/firestore/src/util/input_validation.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -297,14 +297,15 @@ export function validateNamedOptionalPropertyEquals<T>(
297297
* @param functionName Function making the validation call.
298298
* @param enums Array containing all possible values for the enum.
299299
* @param position Position of the argument in `functionName`.
300-
* @param argument Arugment to validate.
300+
* @param argument Argument to validate.
301+
* @return The value as T if the argument can be converted.
301302
*/
302303
export function validateStringEnum<T>(
303304
functionName: string,
304-
enums: string[],
305+
enums: T[],
305306
position: number,
306307
argument: unknown
307-
): void {
308+
): T {
308309
if (!enums.some(element => element === argument)) {
309310
throw new FirestoreError(
310311
Code.INVALID_ARGUMENT,
@@ -313,6 +314,7 @@ export function validateStringEnum<T>(
313314
`values: ${enums.join(', ')}`
314315
);
315316
}
317+
return argument as T;
316318
}
317319

318320
/** Helper to validate the type of a provided input. */

0 commit comments

Comments
 (0)