diff --git a/packages/firestore/CHANGELOG.md b/packages/firestore/CHANGELOG.md index 6c210345e54..7281ff0d962 100644 --- a/packages/firestore/CHANGELOG.md +++ b/packages/firestore/CHANGELOG.md @@ -1,4 +1,8 @@ # Unreleased +- [fixed] Fixed an issue where `CollectionReference.add()` would reject + custom types when using `withConverter()`. (#2606) + +# 1.9.3 - [fixed] Fixed an issue where auth credentials were not respected in some Firefox or Chrome extensions. (#1491) - [changed] Firestore previously required that every document read in a diff --git a/packages/firestore/src/api/database.ts b/packages/firestore/src/api/database.ts index 99575a675ad..6fc11907499 100644 --- a/packages/firestore/src/api/database.ts +++ b/packages/firestore/src/api/database.ts @@ -2461,7 +2461,10 @@ export class CollectionReference extends Query add(value: T): Promise> { validateExactNumberOfArgs('CollectionReference.add', arguments, 1); - validateArgType('CollectionReference.add', 'object', 1, value); + const convertedValue = this._converter + ? this._converter.toFirestore(value) + : value; + validateArgType('CollectionReference.add', 'object', 1, convertedValue); const docRef = this.doc(); return docRef.set(value).then(() => docRef); } diff --git a/packages/firestore/test/integration/api/database.test.ts b/packages/firestore/test/integration/api/database.test.ts index 763201959ee..7213a3dd766 100644 --- a/packages/firestore/test/integration/api/database.test.ts +++ b/packages/firestore/test/integration/api/database.test.ts @@ -1214,12 +1214,9 @@ apiDescribe('Database', (persistence: boolean) => { it('for CollectionReference.withConverter()', () => { return withTestDb(persistence, async db => { - const docRef = db - .collection('posts') - .withConverter(postConverter) - .doc(); + const coll = db.collection('posts').withConverter(postConverter); - await docRef.set(new Post('post', 'author')); + const docRef = await coll.add(new Post('post', 'author')); const postData = await docRef.get(); const post = postData.data(); expect(post).to.not.equal(undefined);