Skip to content

Commit 4743499

Browse files
authored
Merge b431c39 into 1791a9b
2 parents 1791a9b + b431c39 commit 4743499

File tree

8 files changed

+163
-67
lines changed

8 files changed

+163
-67
lines changed

packages/firestore/lite/src/api/reference.ts

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -462,7 +462,12 @@ export function setDoc<T>(
462462
'setDoc'
463463
);
464464
const dataReader = newUserDataReader(ref.firestore);
465-
const parsed = dataReader.parseSetData('setDoc', convertedValue, options);
465+
const parsed = dataReader.parseSetData(
466+
'setDoc',
467+
ref._key,
468+
convertedValue,
469+
options
470+
);
466471

467472
return ref.firestore
468473
._getDatastore()
@@ -500,12 +505,17 @@ export function updateDoc(
500505
) {
501506
parsed = dataReader.parseUpdateVarargs(
502507
'updateDoc',
508+
ref._key,
503509
fieldOrUpdateData,
504510
value,
505511
moreFieldsAndValues
506512
);
507513
} else {
508-
parsed = dataReader.parseUpdateData('updateDoc', fieldOrUpdateData);
514+
parsed = dataReader.parseUpdateData(
515+
'updateDoc',
516+
ref._key,
517+
fieldOrUpdateData
518+
);
509519
}
510520

511521
return ref.firestore
@@ -545,7 +555,7 @@ export function addDoc<T>(
545555
);
546556

547557
const dataReader = newUserDataReader(collRef.firestore);
548-
const parsed = dataReader.parseSetData('addDoc', convertedValue);
558+
const parsed = dataReader.parseSetData('addDoc', docRef._key, convertedValue);
549559

550560
return collRef.firestore
551561
._getDatastore()

packages/firestore/lite/src/api/transaction.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ export class Transaction implements firestore.Transaction {
102102
);
103103
const parsed = this._dataReader.parseSetData(
104104
'Transaction.set',
105+
ref._key,
105106
convertedValue,
106107
options
107108
);
@@ -134,13 +135,15 @@ export class Transaction implements firestore.Transaction {
134135
) {
135136
parsed = this._dataReader.parseUpdateVarargs(
136137
'Transaction.update',
138+
ref._key,
137139
fieldOrUpdateData,
138140
value,
139141
moreFieldsAndValues
140142
);
141143
} else {
142144
parsed = this._dataReader.parseUpdateData(
143145
'Transaction.update',
146+
ref._key,
144147
fieldOrUpdateData
145148
);
146149
}

packages/firestore/lite/src/api/write_batch.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ export class WriteBatch implements firestore.WriteBatch {
6767

6868
const parsed = this._dataReader.parseSetData(
6969
'WriteBatch.set',
70+
ref._key,
7071
convertedValue,
7172
options
7273
);
@@ -103,13 +104,15 @@ export class WriteBatch implements firestore.WriteBatch {
103104
) {
104105
parsed = this._dataReader.parseUpdateVarargs(
105106
'WriteBatch.update',
107+
ref._key,
106108
fieldOrUpdateData,
107109
value,
108110
moreFieldsAndValues
109111
);
110112
} else {
111113
parsed = this._dataReader.parseUpdateData(
112114
'WriteBatch.update',
115+
ref._key,
113116
fieldOrUpdateData
114117
);
115118
}

packages/firestore/src/api/database.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -745,6 +745,7 @@ export class Transaction implements firestore.Transaction {
745745
);
746746
const parsed = this._firestore._dataReader.parseSetData(
747747
functionName,
748+
ref._key,
748749
convertedValue,
749750
options
750751
);
@@ -783,6 +784,7 @@ export class Transaction implements firestore.Transaction {
783784
);
784785
parsed = this._firestore._dataReader.parseUpdateVarargs(
785786
'Transaction.update',
787+
ref._key,
786788
fieldOrUpdateData,
787789
value,
788790
moreFieldsAndValues
@@ -796,6 +798,7 @@ export class Transaction implements firestore.Transaction {
796798
);
797799
parsed = this._firestore._dataReader.parseUpdateData(
798800
'Transaction.update',
801+
ref._key,
799802
fieldOrUpdateData
800803
);
801804
}
@@ -842,6 +845,7 @@ export class WriteBatch implements firestore.WriteBatch {
842845
);
843846
const parsed = this._firestore._dataReader.parseSetData(
844847
functionName,
848+
ref._key,
845849
convertedValue,
846850
options
847851
);
@@ -884,6 +888,7 @@ export class WriteBatch implements firestore.WriteBatch {
884888
);
885889
parsed = this._firestore._dataReader.parseUpdateVarargs(
886890
'WriteBatch.update',
891+
ref._key,
887892
fieldOrUpdateData,
888893
value,
889894
moreFieldsAndValues
@@ -897,6 +902,7 @@ export class WriteBatch implements firestore.WriteBatch {
897902
);
898903
parsed = this._firestore._dataReader.parseUpdateData(
899904
'WriteBatch.update',
905+
ref._key,
900906
fieldOrUpdateData
901907
);
902908
}
@@ -1040,6 +1046,7 @@ export class DocumentReference<T = firestore.DocumentData>
10401046
);
10411047
const parsed = this.firestore._dataReader.parseSetData(
10421048
functionName,
1049+
this._key,
10431050
convertedValue,
10441051
options
10451052
);
@@ -1068,6 +1075,7 @@ export class DocumentReference<T = firestore.DocumentData>
10681075
validateAtLeastNumberOfArgs('DocumentReference.update', arguments, 2);
10691076
parsed = this.firestore._dataReader.parseUpdateVarargs(
10701077
'DocumentReference.update',
1078+
this._key,
10711079
fieldOrUpdateData,
10721080
value,
10731081
moreFieldsAndValues
@@ -1076,6 +1084,7 @@ export class DocumentReference<T = firestore.DocumentData>
10761084
validateExactNumberOfArgs('DocumentReference.update', arguments, 1);
10771085
parsed = this.firestore._dataReader.parseUpdateData(
10781086
'DocumentReference.update',
1087+
this._key,
10791088
fieldOrUpdateData
10801089
);
10811090
}
@@ -1382,7 +1391,9 @@ export class DocumentSnapshot<T = firestore.DocumentData>
13821391
if (this._document) {
13831392
const value = this._document
13841393
.data()
1385-
.field(fieldPathFromArgument('DocumentSnapshot.get', fieldPath));
1394+
.field(
1395+
fieldPathFromArgument('DocumentSnapshot.get', fieldPath, this._key)
1396+
);
13861397
if (value !== null) {
13871398
const userDataWriter = new UserDataWriter(
13881399
this._firestore._databaseId,

packages/firestore/src/api/field_value.ts

Lines changed: 46 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,40 @@ export class DeleteFieldValueImpl extends SerializableFieldValue {
8383
}
8484
}
8585

86+
/**
87+
* Creates a child context for parsing SerializableFieldValues.
88+
*
89+
* This is different than calling `ParseContext.contextWith` because it keeps
90+
* the fieldTransforms and fieldMask separate.
91+
*
92+
* The created context has its `dataSource` set to `UserDataSource.Argument`.
93+
* Although these values are used with writes, any elements in these FieldValues
94+
* are not considered writes since they cannot contain any FieldValue sentinels,
95+
* etc.
96+
*
97+
* @param fieldValue The sentinel FieldValue for which to create a child
98+
* context.
99+
* @param context The parent context.
100+
* @param arrayElement Whether or not the FieldValue has an array.
101+
*/
102+
function createSentinelChildContext(
103+
fieldValue: SerializableFieldValue,
104+
context: ParseContext,
105+
arrayElement: boolean
106+
): ParseContext {
107+
return new ParseContext(
108+
{
109+
dataSource: UserDataSource.Argument,
110+
targetDoc: context.settings.targetDoc,
111+
methodName: fieldValue._methodName,
112+
arrayElement
113+
},
114+
context.databaseId,
115+
context.serializer,
116+
context.ignoreUndefinedProperties
117+
);
118+
}
119+
86120
export class ServerTimestampFieldValueImpl extends SerializableFieldValue {
87121
constructor(readonly _methodName: string) {
88122
super();
@@ -106,18 +140,10 @@ export class ArrayUnionFieldValueImpl extends SerializableFieldValue {
106140
}
107141

108142
_toFieldTransform(context: ParseContext): FieldTransform {
109-
// Although array transforms are used with writes, the actual elements
110-
// being uniomed or removed are not considered writes since they cannot
111-
// contain any FieldValue sentinels, etc.
112-
const parseContext = new ParseContext(
113-
{
114-
dataSource: UserDataSource.Argument,
115-
methodName: this._methodName,
116-
arrayElement: true
117-
},
118-
context.databaseId,
119-
context.serializer,
120-
context.ignoreUndefinedProperties
143+
const parseContext = createSentinelChildContext(
144+
this,
145+
context,
146+
/*array=*/ true
121147
);
122148
const parsedElements = this._elements.map(
123149
element => parseData(element, parseContext)!
@@ -138,18 +164,10 @@ export class ArrayRemoveFieldValueImpl extends SerializableFieldValue {
138164
}
139165

140166
_toFieldTransform(context: ParseContext): FieldTransform {
141-
// Although array transforms are used with writes, the actual elements
142-
// being unioned or removed are not considered writes since they cannot
143-
// contain any FieldValue sentinels, etc.
144-
const parseContext = new ParseContext(
145-
{
146-
dataSource: UserDataSource.Argument,
147-
methodName: this._methodName,
148-
arrayElement: true
149-
},
150-
context.databaseId,
151-
context.serializer,
152-
context.ignoreUndefinedProperties
167+
const parseContext = createSentinelChildContext(
168+
this,
169+
context,
170+
/*array=*/ true
153171
);
154172
const parsedElements = this._elements.map(
155173
element => parseData(element, parseContext)!
@@ -170,14 +188,10 @@ export class NumericIncrementFieldValueImpl extends SerializableFieldValue {
170188
}
171189

172190
_toFieldTransform(context: ParseContext): FieldTransform {
173-
const parseContext = new ParseContext(
174-
{
175-
dataSource: UserDataSource.Argument,
176-
methodName: this._methodName
177-
},
178-
context.databaseId,
179-
context.serializer,
180-
context.ignoreUndefinedProperties
191+
const parseContext = createSentinelChildContext(
192+
this,
193+
context,
194+
/*array=*/ false
181195
);
182196
const operand = parseData(this._operand, parseContext)!;
183197
const numericIncrement = new NumericIncrementTransformOperation(

0 commit comments

Comments
 (0)