firetender-admin 0.14.2 → 0.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{cjs/FiretenderCollection.d.ts → FiretenderCollection.d.ts} +3 -3
- package/dist/{esm/FiretenderCollection.d.ts.map → FiretenderCollection.d.ts.map} +1 -1
- package/dist/{esm/FiretenderCollection.js → FiretenderCollection.js} +3 -13
- package/dist/FiretenderCollection.js.map +1 -0
- package/dist/{cjs/FiretenderDoc.d.ts → FiretenderDoc.d.ts} +2 -2
- package/dist/FiretenderDoc.d.ts.map +1 -0
- package/dist/{esm/FiretenderDoc.js → FiretenderDoc.js} +11 -32
- package/dist/FiretenderDoc.js.map +1 -0
- package/dist/__tests__/FiretenderCollection.spec.d.ts +2 -0
- package/dist/__tests__/FiretenderCollection.spec.d.ts.map +1 -0
- package/dist/__tests__/FiretenderCollection.spec.js +451 -0
- package/dist/__tests__/FiretenderCollection.spec.js.map +1 -0
- package/dist/__tests__/FiretenderDoc.spec.d.ts +7 -0
- package/dist/__tests__/FiretenderDoc.spec.d.ts.map +1 -0
- package/dist/__tests__/FiretenderDoc.spec.js +1428 -0
- package/dist/__tests__/FiretenderDoc.spec.js.map +1 -0
- package/dist/__tests__/firestore-emulator.d.ts +16 -0
- package/dist/__tests__/firestore-emulator.d.ts.map +1 -0
- package/dist/__tests__/firestore-emulator.js +76 -0
- package/dist/__tests__/firestore-emulator.js.map +1 -0
- package/dist/{cjs/errors.d.ts → errors.d.ts} +1 -1
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js.map +1 -0
- package/dist/firestore-deps-admin.d.ts.map +1 -0
- package/dist/firestore-deps-admin.js.map +1 -0
- package/dist/firestore-deps-web.d.ts.map +1 -0
- package/dist/firestore-deps-web.js.map +1 -0
- package/dist/firestore-deps.d.ts.map +1 -0
- package/dist/firestore-deps.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/{esm/proxy.js → proxy.js} +1 -1
- package/dist/proxy.js.map +1 -0
- package/dist/{esm/timestamps.d.ts → timestamps.d.ts} +1 -1
- package/dist/timestamps.d.ts.map +1 -0
- package/dist/{esm/timestamps.js → timestamps.js} +2 -2
- package/dist/timestamps.js.map +1 -0
- package/dist/ts-helpers.d.ts.map +1 -0
- package/dist/{esm/ts-helpers.js.map → ts-helpers.js.map} +1 -1
- package/package.json +9 -15
- package/src/FiretenderCollection.ts +8 -4
- package/src/FiretenderDoc.ts +4 -4
- package/src/errors.ts +1 -1
- package/src/index.ts +5 -5
- package/src/proxy.ts +1 -1
- package/src/timestamps.ts +2 -2
- package/dist/cjs/FiretenderCollection.d.ts.map +0 -1
- package/dist/cjs/FiretenderCollection.js +0 -314
- package/dist/cjs/FiretenderCollection.js.map +0 -1
- package/dist/cjs/FiretenderDoc.d.ts.map +0 -1
- package/dist/cjs/FiretenderDoc.js +0 -517
- package/dist/cjs/FiretenderDoc.js.map +0 -1
- package/dist/cjs/errors.d.ts.map +0 -1
- package/dist/cjs/errors.js +0 -59
- package/dist/cjs/errors.js.map +0 -1
- package/dist/cjs/firestore-deps-admin.d.ts.map +0 -1
- package/dist/cjs/firestore-deps-admin.js +0 -71
- package/dist/cjs/firestore-deps-admin.js.map +0 -1
- package/dist/cjs/firestore-deps-web.d.ts.map +0 -1
- package/dist/cjs/firestore-deps-web.js +0 -40
- package/dist/cjs/firestore-deps-web.js.map +0 -1
- package/dist/cjs/firestore-deps.d.ts.map +0 -1
- package/dist/cjs/firestore-deps.js +0 -71
- package/dist/cjs/firestore-deps.js.map +0 -1
- package/dist/cjs/index.d.ts +0 -6
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/index.js +0 -21
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/package.json +0 -3
- package/dist/cjs/proxy.d.ts.map +0 -1
- package/dist/cjs/proxy.js +0 -233
- package/dist/cjs/proxy.js.map +0 -1
- package/dist/cjs/timestamps.d.ts +0 -47
- package/dist/cjs/timestamps.d.ts.map +0 -1
- package/dist/cjs/timestamps.js +0 -81
- package/dist/cjs/timestamps.js.map +0 -1
- package/dist/cjs/ts-helpers.d.ts.map +0 -1
- package/dist/cjs/ts-helpers.js +0 -6
- package/dist/cjs/ts-helpers.js.map +0 -1
- package/dist/esm/FiretenderCollection.d.ts +0 -141
- package/dist/esm/FiretenderCollection.js.map +0 -1
- package/dist/esm/FiretenderDoc.d.ts +0 -253
- package/dist/esm/FiretenderDoc.d.ts.map +0 -1
- package/dist/esm/FiretenderDoc.js.map +0 -1
- package/dist/esm/errors.d.ts +0 -40
- package/dist/esm/errors.d.ts.map +0 -1
- package/dist/esm/errors.js.map +0 -1
- package/dist/esm/firestore-deps-admin.d.ts +0 -30
- package/dist/esm/firestore-deps-admin.d.ts.map +0 -1
- package/dist/esm/firestore-deps-admin.js.map +0 -1
- package/dist/esm/firestore-deps-web.d.ts +0 -12
- package/dist/esm/firestore-deps-web.d.ts.map +0 -1
- package/dist/esm/firestore-deps-web.js.map +0 -1
- package/dist/esm/firestore-deps.d.ts +0 -30
- package/dist/esm/firestore-deps.d.ts.map +0 -1
- package/dist/esm/firestore-deps.js.map +0 -1
- package/dist/esm/index.d.ts +0 -6
- package/dist/esm/index.d.ts.map +0 -1
- package/dist/esm/index.js +0 -6
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/package.json +0 -3
- package/dist/esm/proxy.d.ts +0 -32
- package/dist/esm/proxy.d.ts.map +0 -1
- package/dist/esm/proxy.js.map +0 -1
- package/dist/esm/timestamps.d.ts.map +0 -1
- package/dist/esm/timestamps.js.map +0 -1
- package/dist/esm/ts-helpers.d.ts +0 -10
- package/dist/esm/ts-helpers.d.ts.map +0 -1
- /package/dist/{esm/errors.js → errors.js} +0 -0
- /package/dist/{cjs/firestore-deps-admin.d.ts → firestore-deps-admin.d.ts} +0 -0
- /package/dist/{esm/firestore-deps-admin.js → firestore-deps-admin.js} +0 -0
- /package/dist/{cjs/firestore-deps-web.d.ts → firestore-deps-web.d.ts} +0 -0
- /package/dist/{esm/firestore-deps-web.js → firestore-deps-web.js} +0 -0
- /package/dist/{cjs/firestore-deps.d.ts → firestore-deps.d.ts} +0 -0
- /package/dist/{esm/firestore-deps.js → firestore-deps.js} +0 -0
- /package/dist/{cjs/proxy.d.ts → proxy.d.ts} +0 -0
- /package/dist/{cjs/ts-helpers.d.ts → ts-helpers.d.ts} +0 -0
- /package/dist/{esm/ts-helpers.js → ts-helpers.js} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { CollectionReference, DocumentReference, Firestore, QueryConstraint } from "./firestore-deps";
|
|
3
|
-
import { FiretenderDoc, FiretenderDocOptions, Patcher } from "./FiretenderDoc";
|
|
4
|
-
import { DeepPartial, DeepReadonly } from "./ts-helpers";
|
|
2
|
+
import { CollectionReference, DocumentReference, Firestore, QueryConstraint } from "./firestore-deps.js";
|
|
3
|
+
import { FiretenderDoc, FiretenderDocOptions, Patcher } from "./FiretenderDoc.js";
|
|
4
|
+
import { DeepPartial, DeepReadonly } from "./ts-helpers.js";
|
|
5
5
|
/**
|
|
6
6
|
* A representation of a Firestore collection or subcollection.
|
|
7
7
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FiretenderCollection.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"FiretenderCollection.d.ts","sourceRoot":"","sources":["../src/FiretenderCollection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { addContextToError, FiretenderUsageError } from "./errors";
|
|
2
|
-
import { collection, collectionGroup, CollectionReference, deleteDoc, doc, getDocs, query, writeBatch, } from "./firestore-deps";
|
|
3
|
-
import { FiretenderDoc } from "./FiretenderDoc";
|
|
1
|
+
import { addContextToError, FiretenderUsageError } from "./errors.js";
|
|
2
|
+
import { collection, collectionGroup, CollectionReference, deleteDoc, doc, getDocs, query, writeBatch, } from "./firestore-deps.js";
|
|
3
|
+
import { FiretenderDoc, } from "./FiretenderDoc.js";
|
|
4
4
|
/**
|
|
5
5
|
* A representation of a Firestore collection or subcollection.
|
|
6
6
|
*
|
|
@@ -9,16 +9,6 @@ import { FiretenderDoc } from "./FiretenderDoc";
|
|
|
9
9
|
* are covered by a FiretenderCollection for the path ["foo", "bar"].
|
|
10
10
|
*/
|
|
11
11
|
export class FiretenderCollection {
|
|
12
|
-
/** Zod schema used to parse and validate the document's data. */
|
|
13
|
-
schema;
|
|
14
|
-
/** Firestore object: the thing you get from getFirestore(). */
|
|
15
|
-
firestore;
|
|
16
|
-
/** The collection path of this object: a series of collection names. */
|
|
17
|
-
collectionPath;
|
|
18
|
-
/** Function to return the initial values when creating a new document. */
|
|
19
|
-
baseInitialDataFactory;
|
|
20
|
-
/** Default options to send to docs in this collection. */
|
|
21
|
-
defaultDocOptions;
|
|
22
12
|
/**
|
|
23
13
|
* @param schema the Zod object schema describing the documents in this
|
|
24
14
|
* collection.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FiretenderCollection.js","sourceRoot":"","sources":["../src/FiretenderCollection.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import { CollectionReference, DocumentReference, DocumentSnapshot } from "./firestore-deps";
|
|
3
|
-
import { DeepReadonly } from "./ts-helpers";
|
|
2
|
+
import { CollectionReference, DocumentReference, DocumentSnapshot } from "./firestore-deps.js";
|
|
3
|
+
import { DeepReadonly } from "./ts-helpers.js";
|
|
4
4
|
export type Patcher = (data: Record<string, any>) => boolean | void;
|
|
5
5
|
/**
|
|
6
6
|
* Public options for initializing a FiretenderDoc object.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FiretenderDoc.d.ts","sourceRoot":"","sources":["../src/FiretenderDoc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,OAAO,EAGL,mBAAmB,EAEnB,iBAAiB,EACjB,gBAAgB,EAOjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAK/C,MAAM,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,GAAG,IAAI,CAAC;AAEpE;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB;;;;;;;;;OASG;IACH,QAAQ,CAAC,EAAE,OAAO,EAAE,GAAG,SAAS,CAAC;IAEjC;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;CACtC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,uBAAuB,GAAG,oBAAoB,GAAG;IAC3D;;OAEG;IACH,SAAS,CAAC,EAAE,IAAI,CAAC;IAEjB;;;OAGG;IACH,WAAW,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAEpD;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,iBAAiB,IAAI;IAC3C;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAEhB;;;;;;;;;;;;;OAaG;IACH,MAAM,CAAC,EACH,OAAO,GACP,CAAC,CAAC,GAAG,EAAE,iBAAiB,EAAE,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAC,CAAC;CACpE,CAAC;AAEF;;GAEG;AACH,qBAAa,aAAa,CAAC,UAAU,SAAS,CAAC,CAAC,aAAa;IAC3D,gEAAgE;IAChE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAE5B,2EAA2E;IAC3E,OAAO,CAAC,GAAG,CAA0C;IAErD,yEAAyE;IACzE,OAAO,CAAC,KAAK,CAAiC;IAE9C,iEAAiE;IACjE,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAE7B,gEAAgE;IAChE,OAAO,CAAC,QAAQ,CAAU;IAE1B,0EAA0E;IAC1E,OAAO,CAAC,oBAAoB,CAAU;IAEtC,4EAA4E;IAC5E,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IAEjD,iEAAiE;IACjE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAiB;IAErD,gEAAgE;IAChE,OAAO,CAAC,IAAI,CAA8C;IAE1D,6EAA6E;IAC7E,OAAO,CAAC,SAAS,CAA4D;IAE7E,2EAA2E;IAC3E,OAAO,CAAC,OAAO,CAA0B;IAEzC,2EAA2E;IAC3E,OAAO,CAAC,cAAc,CAA0B;IAEhD;;;OAGG;IACH,OAAO,CAAC,sBAAsB,CAEhB;IAEd;;;;;;;OAOG;gBAED,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,iBAAiB,GAAG,mBAAmB,EAC5C,OAAO,GAAE,uBAA4B;IAiCvC;;;;;;;;;;;;;;OAcG;IACH,MAAM,CAAC,YAAY,CAAC,WAAW,SAAS,CAAC,CAAC,aAAa,EACrD,MAAM,EAAE,WAAW,EACnB,GAAG,EAAE,iBAAiB,GAAG,mBAAmB,EAC5C,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,EACjC,OAAO,GAAE,oBAAyB,GACjC,aAAa,CAAC,WAAW,CAAC;IAS7B;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,IAAI,CACF,IAAI,GACA,iBAAiB,GACjB,mBAAmB,GACnB,MAAM,GACN,MAAM,EAAE,GACR,SAAqB,EACzB,OAAO,GAAE,uBAA4B,GACpC,aAAa,CAAC,UAAU,CAAC;IAkD5B;;;;OAIG;IACH,IAAI,EAAE,IAAI,MAAM,CAOf;IAED;;;;OAIG;IACH,IAAI,MAAM,IAAI,iBAAiB,CAO9B;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,OAAO,CAEnB;IAED;;;OAGG;IACH,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED;;OAEG;IACH,IAAI,cAAc,IAAI,OAAO,CAE5B;IAED;;OAEG;IACH,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED;;;;;OAKG;IACG,IAAI,CACR,OAAO,GAAE,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,CAAM,GACnD,OAAO,CAAC,IAAI,CAAC;IA6FhB;;OAEG;IACH,aAAa,IAAI,IAAI;IAOrB;;OAEG;IACH,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAOzC;IAED;;;;;OAKG;IACH,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAqB3B;IAED;;OAEG;IACH,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,EAKjC;IAED;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmD5B;;;;;;;;;OASG;IACG,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAazE,OAAO,CAAC,eAAe;IAQvB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAgCxB;;;OAGG;IACH,OAAO,CAAC,SAAS;IAgBjB;;;;OAIG;IACH,OAAO,CAAC,eAAe;CA8BxB"}
|
|
@@ -1,39 +1,10 @@
|
|
|
1
|
-
import { addContextToError, FiretenderInternalError, FiretenderIOError, FiretenderUsageError, NullTimestampError, } from "./errors";
|
|
2
|
-
import { addDoc, collection, CollectionReference, doc, DocumentReference, getDoc, onSnapshot, setDoc, snapshotExists, updateDoc, } from "./firestore-deps";
|
|
3
|
-
import { watchForChanges } from "./proxy";
|
|
1
|
+
import { addContextToError, FiretenderInternalError, FiretenderIOError, FiretenderUsageError, NullTimestampError, } from "./errors.js";
|
|
2
|
+
import { addDoc, collection, CollectionReference, doc, DocumentReference, getDoc, onSnapshot, setDoc, snapshotExists, updateDoc, } from "./firestore-deps.js";
|
|
3
|
+
import { watchForChanges } from "./proxy.js";
|
|
4
4
|
/**
|
|
5
5
|
* A local representation of a Firestore document.
|
|
6
6
|
*/
|
|
7
7
|
export class FiretenderDoc {
|
|
8
|
-
/** Zod schema used to parse and validate the document's data */
|
|
9
|
-
schema;
|
|
10
|
-
/** Firestore reference to this doc, or collection in which to create it */
|
|
11
|
-
ref;
|
|
12
|
-
/** Firestore document ID; undefined for new docs not yet on Firestore */
|
|
13
|
-
docID = undefined;
|
|
14
|
-
/** If set, writes will throw and patches will not be written. */
|
|
15
|
-
isReadonly;
|
|
16
|
-
/** Is this a doc we presume does not yet exist in Firestore? */
|
|
17
|
-
isNewDoc;
|
|
18
|
-
/** Use addDoc or setDoc to write all the data? If not, use updateDoc. */
|
|
19
|
-
isSettingNewContents;
|
|
20
|
-
/** Patcher functions given in options; applied to the raw data in order. */
|
|
21
|
-
patchers;
|
|
22
|
-
/** Don't save patches if false; delay in milliseconds if set. */
|
|
23
|
-
savePatchAfterDelay;
|
|
24
|
-
/** Local copy of the document data, parsed into the Zod type */
|
|
25
|
-
data = undefined;
|
|
26
|
-
/** Proxy to intercept write (.w) access to the data and track the changes */
|
|
27
|
-
dataProxy = undefined;
|
|
28
|
-
/** Map from the dot-delimited field path (per updateDoc()) to new value */
|
|
29
|
-
updates = new Map();
|
|
30
|
-
/** Function to unsubscribe from changes to the doc, if we're listening. */
|
|
31
|
-
detachListener;
|
|
32
|
-
/**
|
|
33
|
-
* If a load() call is already in progress, this is a list of promise
|
|
34
|
-
* resolutions to be called once the load is complete. Otherwise undefined.
|
|
35
|
-
*/
|
|
36
|
-
resolvesWaitingForLoad;
|
|
37
8
|
/**
|
|
38
9
|
* @param schema the Zod object schema describing this document's data.
|
|
39
10
|
* @param ref either a document reference specifying the full path of the
|
|
@@ -43,6 +14,14 @@ export class FiretenderDoc {
|
|
|
43
14
|
* FiretenderDocOptions for detail.
|
|
44
15
|
*/
|
|
45
16
|
constructor(schema, ref, options = {}) {
|
|
17
|
+
/** Firestore document ID; undefined for new docs not yet on Firestore */
|
|
18
|
+
this.docID = undefined;
|
|
19
|
+
/** Local copy of the document data, parsed into the Zod type */
|
|
20
|
+
this.data = undefined;
|
|
21
|
+
/** Proxy to intercept write (.w) access to the data and track the changes */
|
|
22
|
+
this.dataProxy = undefined;
|
|
23
|
+
/** Map from the dot-delimited field path (per updateDoc()) to new value */
|
|
24
|
+
this.updates = new Map();
|
|
46
25
|
this.schema = schema;
|
|
47
26
|
this.ref = ref;
|
|
48
27
|
this.isReadonly = options.readonly ?? false;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FiretenderDoc.js","sourceRoot":"","sources":["../src/FiretenderDoc.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FiretenderCollection.spec.d.ts","sourceRoot":"","sources":["../../src/__tests__/FiretenderCollection.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { addDoc, collection, doc, FIRESTORE_DEPS_TYPE, getDoc, serverTimestamp, setDoc, where, } from "../firestore-deps.js";
|
|
3
|
+
import { FiretenderCollection } from "../FiretenderCollection.js";
|
|
4
|
+
import { timestampSchema } from "../timestamps.js";
|
|
5
|
+
import { cleanupFirestoreEmulator, getFirestoreEmulator, } from "./firestore-emulator.js";
|
|
6
|
+
const testSchema = z.object({
|
|
7
|
+
foo: z.string(),
|
|
8
|
+
bar: z.number().min(0).optional(),
|
|
9
|
+
ttl: timestampSchema.optional(),
|
|
10
|
+
});
|
|
11
|
+
const collectionName = "coltests";
|
|
12
|
+
let firestore;
|
|
13
|
+
beforeAll(async () => {
|
|
14
|
+
firestore = await getFirestoreEmulator();
|
|
15
|
+
});
|
|
16
|
+
afterAll(cleanupFirestoreEmulator);
|
|
17
|
+
describe("newDoc", () => {
|
|
18
|
+
it("creates a doc with the given ID.", () => {
|
|
19
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, collectionName, { foo: "hello" });
|
|
20
|
+
const testDoc = testCollection.newDoc("111");
|
|
21
|
+
expect(testDoc.id).toBe("111");
|
|
22
|
+
expect(testDoc.r).toEqual({ foo: "hello" });
|
|
23
|
+
});
|
|
24
|
+
it("creates a doc without an ID.", () => {
|
|
25
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, collectionName, { foo: "hello" });
|
|
26
|
+
const testDoc = testCollection.newDoc();
|
|
27
|
+
expect(() => testDoc.id).toThrow();
|
|
28
|
+
expect(testDoc.r).toEqual({ foo: "hello" });
|
|
29
|
+
});
|
|
30
|
+
it("creates a doc in a subcollection.", () => {
|
|
31
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, [collectionName, "subcollection"], { foo: "hello" });
|
|
32
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
33
|
+
const testDoc = testCollection.newDoc(["abc", "xyz"]);
|
|
34
|
+
expect(testDoc.id).toBe("xyz");
|
|
35
|
+
expect(testDoc.docRef.path).toBe(`${collectionName}/abc/subcollection/xyz`);
|
|
36
|
+
});
|
|
37
|
+
it("fails if an ID for a parent collection is missing.", () => {
|
|
38
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, [collectionName, "subcollection"], { foo: "hello" });
|
|
39
|
+
expect(() => testCollection.newDoc()).toThrow("requires an ID");
|
|
40
|
+
});
|
|
41
|
+
it("merges given initial field values into the defaults.", () => {
|
|
42
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, collectionName, { foo: "hello" });
|
|
43
|
+
const testDoc = testCollection.newDoc(undefined, { bar: 123 });
|
|
44
|
+
expect(testDoc.r).toEqual({ foo: "hello", bar: 123 });
|
|
45
|
+
});
|
|
46
|
+
it("takes a factory method for the initial data.", () => {
|
|
47
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, collectionName, () => ({ foo: "hello" }));
|
|
48
|
+
const testDoc = testCollection.newDoc(undefined, { bar: 123 });
|
|
49
|
+
expect(testDoc.r).toEqual({ foo: "hello", bar: 123 });
|
|
50
|
+
});
|
|
51
|
+
it("fails in readonly mode.", () => {
|
|
52
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, collectionName, { foo: "hello" }, { readonly: true });
|
|
53
|
+
expect(() => testCollection.newDoc()).toThrow("Cannot create new docs in readonly mode.");
|
|
54
|
+
});
|
|
55
|
+
});
|
|
56
|
+
describe("existingDoc", () => {
|
|
57
|
+
it("wraps a doc in a collection.", () => {
|
|
58
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, collectionName, { foo: "hello" });
|
|
59
|
+
const testDoc = testCollection.existingDoc("xyz");
|
|
60
|
+
expect(testDoc.id).toBe("xyz");
|
|
61
|
+
});
|
|
62
|
+
it("wraps a doc in a subcollection.", () => {
|
|
63
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, [collectionName, "subcollection"], { foo: "hello" });
|
|
64
|
+
const testDoc = testCollection.existingDoc(["abc", "xyz"]);
|
|
65
|
+
expect(testDoc.id).toBe("xyz");
|
|
66
|
+
expect(testDoc.docRef.path).toBe(`${collectionName}/abc/subcollection/xyz`);
|
|
67
|
+
});
|
|
68
|
+
it("fails if an ID for a parent collection is missing.", () => {
|
|
69
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, [collectionName, "subcollection"], { foo: "hello" });
|
|
70
|
+
expect(() => testCollection.existingDoc("abc")).toThrow("requires a full ID path");
|
|
71
|
+
});
|
|
72
|
+
});
|
|
73
|
+
describe("query functions", () => {
|
|
74
|
+
// Borrowing an example from the Firestore how-to guide ...
|
|
75
|
+
// https://cloud.google.com/firestore/docs/how-to
|
|
76
|
+
const citySchema = z.object({
|
|
77
|
+
name: z.string(),
|
|
78
|
+
state: z.string().nullable(),
|
|
79
|
+
country: z.string(),
|
|
80
|
+
capital: z.boolean(),
|
|
81
|
+
population: z.number(),
|
|
82
|
+
regions: z.array(z.string()),
|
|
83
|
+
});
|
|
84
|
+
const cityLandmarkSchema = z.object({
|
|
85
|
+
name: z.string(),
|
|
86
|
+
type: z.string(),
|
|
87
|
+
});
|
|
88
|
+
let cityCollection;
|
|
89
|
+
let cityLandmarkCollection;
|
|
90
|
+
beforeAll(async () => {
|
|
91
|
+
const citiesRef = collection(firestore, "cities");
|
|
92
|
+
await Promise.all([
|
|
93
|
+
setDoc(doc(citiesRef, "SF"), {
|
|
94
|
+
name: "San Francisco",
|
|
95
|
+
state: "CA",
|
|
96
|
+
country: "USA",
|
|
97
|
+
capital: false,
|
|
98
|
+
population: 860000,
|
|
99
|
+
regions: ["west_coast", "norcal"],
|
|
100
|
+
}),
|
|
101
|
+
setDoc(doc(citiesRef, "LA"), {
|
|
102
|
+
name: "Los Angeles",
|
|
103
|
+
state: "CA",
|
|
104
|
+
country: "USA",
|
|
105
|
+
capital: false,
|
|
106
|
+
population: 3900000,
|
|
107
|
+
regions: ["west_coast", "socal"],
|
|
108
|
+
}),
|
|
109
|
+
setDoc(doc(citiesRef, "DC"), {
|
|
110
|
+
name: "Washington, D.C.",
|
|
111
|
+
state: null,
|
|
112
|
+
country: "USA",
|
|
113
|
+
capital: true,
|
|
114
|
+
population: 680000,
|
|
115
|
+
regions: ["east_coast"],
|
|
116
|
+
}),
|
|
117
|
+
setDoc(doc(citiesRef, "TOK"), {
|
|
118
|
+
name: "Tokyo",
|
|
119
|
+
state: null,
|
|
120
|
+
country: "Japan",
|
|
121
|
+
capital: true,
|
|
122
|
+
population: 9000000,
|
|
123
|
+
regions: ["kanto", "honshu"],
|
|
124
|
+
}),
|
|
125
|
+
setDoc(doc(citiesRef, "BJ"), {
|
|
126
|
+
name: "Beijing",
|
|
127
|
+
state: null,
|
|
128
|
+
country: "China",
|
|
129
|
+
capital: true,
|
|
130
|
+
population: 21500000,
|
|
131
|
+
regions: ["jingjinji", "hebei"],
|
|
132
|
+
}),
|
|
133
|
+
]);
|
|
134
|
+
await Promise.all([
|
|
135
|
+
addDoc(collection(citiesRef, "SF", "landmarks"), {
|
|
136
|
+
name: "Golden Gate Bridge",
|
|
137
|
+
type: "bridge",
|
|
138
|
+
}),
|
|
139
|
+
addDoc(collection(citiesRef, "SF", "landmarks"), {
|
|
140
|
+
name: "Legion of Honor",
|
|
141
|
+
type: "museum",
|
|
142
|
+
}),
|
|
143
|
+
addDoc(collection(citiesRef, "LA", "landmarks"), {
|
|
144
|
+
name: "Griffith Park",
|
|
145
|
+
type: "park",
|
|
146
|
+
}),
|
|
147
|
+
addDoc(collection(citiesRef, "LA", "landmarks"), {
|
|
148
|
+
name: "The Getty",
|
|
149
|
+
type: "museum",
|
|
150
|
+
}),
|
|
151
|
+
addDoc(collection(citiesRef, "DC", "landmarks"), {
|
|
152
|
+
name: "Lincoln Memorial",
|
|
153
|
+
type: "memorial",
|
|
154
|
+
}),
|
|
155
|
+
addDoc(collection(citiesRef, "DC", "landmarks"), {
|
|
156
|
+
name: "National Air and Space Museum",
|
|
157
|
+
type: "museum",
|
|
158
|
+
}),
|
|
159
|
+
addDoc(collection(citiesRef, "TOK", "landmarks"), {
|
|
160
|
+
name: "Ueno Park",
|
|
161
|
+
type: "park",
|
|
162
|
+
}),
|
|
163
|
+
addDoc(collection(citiesRef, "TOK", "landmarks"), {
|
|
164
|
+
name: "National Museum of Nature and Science",
|
|
165
|
+
type: "museum",
|
|
166
|
+
}),
|
|
167
|
+
addDoc(collection(citiesRef, "BJ", "landmarks"), {
|
|
168
|
+
name: "Jingshan Park",
|
|
169
|
+
type: "park",
|
|
170
|
+
}),
|
|
171
|
+
addDoc(collection(citiesRef, "BJ", "landmarks"), {
|
|
172
|
+
name: "Beijing Ancient Observatory",
|
|
173
|
+
type: "museum",
|
|
174
|
+
}),
|
|
175
|
+
]);
|
|
176
|
+
cityCollection = new FiretenderCollection(citySchema, firestore, "cities", {});
|
|
177
|
+
cityLandmarkCollection = new FiretenderCollection(cityLandmarkSchema, firestore, ["cities", "landmarks"], {});
|
|
178
|
+
});
|
|
179
|
+
describe("getAllDocs", () => {
|
|
180
|
+
it("returns all docs in a collection.", async () => {
|
|
181
|
+
const docs = await cityCollection.getAllDocs();
|
|
182
|
+
expect(docs.length).toBe(5);
|
|
183
|
+
expect(docs[0].r).toEqual({
|
|
184
|
+
name: "Beijing",
|
|
185
|
+
state: null,
|
|
186
|
+
country: "China",
|
|
187
|
+
capital: true,
|
|
188
|
+
population: 21500000,
|
|
189
|
+
regions: ["jingjinji", "hebei"],
|
|
190
|
+
});
|
|
191
|
+
expect(docs[4].r).toEqual({
|
|
192
|
+
name: "Tokyo",
|
|
193
|
+
state: null,
|
|
194
|
+
country: "Japan",
|
|
195
|
+
capital: true,
|
|
196
|
+
population: 9000000,
|
|
197
|
+
regions: ["kanto", "honshu"],
|
|
198
|
+
});
|
|
199
|
+
});
|
|
200
|
+
it("fails when called on a subcollection without parent ID.", async () => {
|
|
201
|
+
await expect(cityLandmarkCollection.getAllDocs()).rejects.toThrow("requires the IDs of all parent collections");
|
|
202
|
+
});
|
|
203
|
+
it("provides context on errors.", async () => {
|
|
204
|
+
const nonexistentCollection = new FiretenderCollection(testSchema, firestore, "no-collection-here");
|
|
205
|
+
// Admin can read anywhere, so this test does not throw an error.
|
|
206
|
+
if (FIRESTORE_DEPS_TYPE === "admin")
|
|
207
|
+
return;
|
|
208
|
+
await expect(nonexistentCollection.getAllDocs()).rejects.toThrow();
|
|
209
|
+
try {
|
|
210
|
+
await nonexistentCollection.getAllDocs();
|
|
211
|
+
}
|
|
212
|
+
catch (error) {
|
|
213
|
+
expect(error.firetenderContext).toEqual({
|
|
214
|
+
call: "getDocs",
|
|
215
|
+
ref: "no-collection-here",
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
it("applies patches to the data.", async () => {
|
|
220
|
+
cityCollection.patch((data) => {
|
|
221
|
+
if (data.name === "Los Angeles") {
|
|
222
|
+
data.regions?.push("home");
|
|
223
|
+
}
|
|
224
|
+
});
|
|
225
|
+
cityCollection.patch((data) => {
|
|
226
|
+
// Second patcher should run after the first.
|
|
227
|
+
if (data.name === "Los Angeles") {
|
|
228
|
+
data.regions?.sort();
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
const docs = await cityCollection.getAllDocs();
|
|
232
|
+
const iLA = docs.findIndex((d) => d.id === "LA");
|
|
233
|
+
expect(iLA).toBeGreaterThan(-1);
|
|
234
|
+
expect(docs[iLA].r.regions).toEqual(["home", "socal", "west_coast"]);
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
describe("query", () => {
|
|
238
|
+
it("performs a simple query on a collection.", async () => {
|
|
239
|
+
const docs = await cityCollection.query(where("population", ">=", 1e6));
|
|
240
|
+
expect(docs.map((d) => d.r.name).sort()).toEqual([
|
|
241
|
+
"Beijing",
|
|
242
|
+
"Los Angeles",
|
|
243
|
+
"Tokyo",
|
|
244
|
+
]);
|
|
245
|
+
});
|
|
246
|
+
it("performs a compound query on a collection.", async () => {
|
|
247
|
+
const docs = await cityCollection.query(where("population", ">=", 1e6), where("regions", "array-contains", "west_coast"));
|
|
248
|
+
expect(docs.map((d) => d.r.name).sort()).toEqual(["Los Angeles"]);
|
|
249
|
+
});
|
|
250
|
+
it("performs a simple query on a subcollection.", async () => {
|
|
251
|
+
const docs = await cityLandmarkCollection.query("LA", where("type", "==", "park"));
|
|
252
|
+
expect(docs.map((d) => d.r.name).sort()).toEqual(["Griffith Park"]);
|
|
253
|
+
});
|
|
254
|
+
it("takes an array for the ID path.", async () => {
|
|
255
|
+
const docs = await cityLandmarkCollection.query(["BJ"], where("type", "==", "museum"));
|
|
256
|
+
expect(docs.map((d) => d.r.name).sort()).toEqual([
|
|
257
|
+
"Beijing Ancient Observatory",
|
|
258
|
+
]);
|
|
259
|
+
});
|
|
260
|
+
it("performs a simple query across a subcollection group.", async () => {
|
|
261
|
+
const docs = await cityLandmarkCollection.query(where("type", "==", "museum"));
|
|
262
|
+
expect(docs.map((d) => d.r.name).sort()).toEqual([
|
|
263
|
+
"Beijing Ancient Observatory",
|
|
264
|
+
"Legion of Honor",
|
|
265
|
+
"National Air and Space Museum",
|
|
266
|
+
"National Museum of Nature and Science",
|
|
267
|
+
"The Getty",
|
|
268
|
+
]);
|
|
269
|
+
});
|
|
270
|
+
it("provides context on errors.", async () => {
|
|
271
|
+
// Admin can read anywhere, so this test does not throw an error.
|
|
272
|
+
if (FIRESTORE_DEPS_TYPE === "admin")
|
|
273
|
+
return;
|
|
274
|
+
const nonexistentCollection = new FiretenderCollection(testSchema, firestore, "no-collection-here");
|
|
275
|
+
const whereClause = where("not-an-actual-field", "==", "foo");
|
|
276
|
+
await expect(nonexistentCollection.query(whereClause)).rejects.toThrow();
|
|
277
|
+
try {
|
|
278
|
+
await nonexistentCollection.query(whereClause);
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
expect(error.firetenderContext).toEqual({
|
|
282
|
+
call: "getDocs",
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
it("applies patches to the data.", async () => {
|
|
287
|
+
cityLandmarkCollection.patch((data) => {
|
|
288
|
+
if (data.name === "The Getty") {
|
|
289
|
+
data.name = "The Getty Center";
|
|
290
|
+
}
|
|
291
|
+
return false;
|
|
292
|
+
});
|
|
293
|
+
const docs = await cityLandmarkCollection.query("LA", where("type", "==", "museum"));
|
|
294
|
+
expect(docs.map((d) => d.r.name).sort()).toEqual(["The Getty Center"]);
|
|
295
|
+
});
|
|
296
|
+
it("works with timestamps.", async () => {
|
|
297
|
+
// Write doc with a server timestamp. Confirm timestamp is set.
|
|
298
|
+
const uniqueFoo = `foo-${Date.now()}`;
|
|
299
|
+
const docRef = (await new FiretenderCollection(testSchema, firestore, collectionName)
|
|
300
|
+
.newDoc(undefined, { foo: uniqueFoo, bar: 1, ttl: serverTimestamp() })
|
|
301
|
+
.write()).docRef;
|
|
302
|
+
const doc = await getDoc(docRef);
|
|
303
|
+
const serverTimestampMillis = doc.data()?.ttl.toMillis();
|
|
304
|
+
const millisDiff = Math.abs(serverTimestampMillis - Date.now());
|
|
305
|
+
expect(millisDiff).toBeLessThan(10000); // Less than 10 seconds apart.
|
|
306
|
+
// Load doc via a collection with a patcher. Confirm the patcher works and
|
|
307
|
+
// the timestamp remains.
|
|
308
|
+
const collection = new FiretenderCollection(testSchema, firestore, collectionName, undefined, {
|
|
309
|
+
patchers: [
|
|
310
|
+
(data) => {
|
|
311
|
+
data.bar = 2;
|
|
312
|
+
},
|
|
313
|
+
],
|
|
314
|
+
});
|
|
315
|
+
const results = await collection.query(where("foo", "==", uniqueFoo));
|
|
316
|
+
expect(results.length).toBe(1);
|
|
317
|
+
const testDoc = results[0];
|
|
318
|
+
expect(testDoc.r.foo).toBe(uniqueFoo);
|
|
319
|
+
expect(testDoc.r.bar).toBe(2);
|
|
320
|
+
expect(testDoc.r.ttl?.toMillis()).toBe(serverTimestampMillis);
|
|
321
|
+
});
|
|
322
|
+
});
|
|
323
|
+
});
|
|
324
|
+
describe("delete", () => {
|
|
325
|
+
it("deletes a document in a collection.", async () => {
|
|
326
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, collectionName, { foo: "delete-doc-in-collection" });
|
|
327
|
+
const testDoc = await testCollection.newDoc().write();
|
|
328
|
+
const docsBeforeDelete = await testCollection.query(where("foo", "==", "delete-doc-in-collection"));
|
|
329
|
+
expect(docsBeforeDelete.map((d) => d.r.foo).sort()).toEqual([
|
|
330
|
+
"delete-doc-in-collection",
|
|
331
|
+
]);
|
|
332
|
+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
333
|
+
await testCollection.delete(testDoc.id);
|
|
334
|
+
const docsAfterDelete = await testCollection.query(where("foo", "==", "delete-doc-in-collection"));
|
|
335
|
+
expect(docsAfterDelete.map((d) => d.r.foo).sort()).toEqual([]);
|
|
336
|
+
});
|
|
337
|
+
it("throws for an incomplete doc ID", async () => {
|
|
338
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, collectionName);
|
|
339
|
+
await expect(testCollection.delete([])).rejects.toThrow("requires the full ID path");
|
|
340
|
+
});
|
|
341
|
+
it("throws for failed delete", async () => {
|
|
342
|
+
if (FIRESTORE_DEPS_TYPE === "admin")
|
|
343
|
+
return; // Admin can delete anywhere.
|
|
344
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, "bad-collection-name");
|
|
345
|
+
await expect(testCollection.delete("some-id")).rejects.toThrow("PERMISSION_DENIED");
|
|
346
|
+
});
|
|
347
|
+
});
|
|
348
|
+
describe("makeCollectionRef", () => {
|
|
349
|
+
it("throws for the wrong number of IDs", async () => {
|
|
350
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, [
|
|
351
|
+
collectionName,
|
|
352
|
+
"subcol-A",
|
|
353
|
+
"subcol-B",
|
|
354
|
+
]);
|
|
355
|
+
expect(() => testCollection.makeCollectionRef(["123"])).toThrow();
|
|
356
|
+
expect(() => testCollection.makeCollectionRef(["123", "456", "789"])).toThrow();
|
|
357
|
+
});
|
|
358
|
+
it("returns a correct subcollection ref", async () => {
|
|
359
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, [
|
|
360
|
+
collectionName,
|
|
361
|
+
"subcol-A",
|
|
362
|
+
"subcol-B",
|
|
363
|
+
]);
|
|
364
|
+
const ref = testCollection.makeCollectionRef(["123", "456"]);
|
|
365
|
+
expect(ref.path).toBe("coltests/123/subcol-A/456/subcol-B");
|
|
366
|
+
});
|
|
367
|
+
it("returns a correct top-level collection ref", async () => {
|
|
368
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, [
|
|
369
|
+
collectionName,
|
|
370
|
+
]);
|
|
371
|
+
const ref = testCollection.makeCollectionRef();
|
|
372
|
+
expect(ref.path).toBe("coltests");
|
|
373
|
+
});
|
|
374
|
+
});
|
|
375
|
+
describe("makeDocRef", () => {
|
|
376
|
+
it("throws for the wrong number of IDs", async () => {
|
|
377
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, [
|
|
378
|
+
collectionName,
|
|
379
|
+
"subcol-A",
|
|
380
|
+
"subcol-B",
|
|
381
|
+
]);
|
|
382
|
+
expect(() => testCollection.makeDocRef(["123", "456"])).toThrow();
|
|
383
|
+
expect(() => testCollection.makeDocRef(["123", "456", "789", "abc"])).toThrow();
|
|
384
|
+
});
|
|
385
|
+
it("returns an appropriate doc ref", async () => {
|
|
386
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, [
|
|
387
|
+
collectionName,
|
|
388
|
+
"subcol-A",
|
|
389
|
+
"subcol-B",
|
|
390
|
+
]);
|
|
391
|
+
const ref = testCollection.makeDocRef(["123", "456", "789"]);
|
|
392
|
+
expect(ref.path).toBe("coltests/123/subcol-A/456/subcol-B/789");
|
|
393
|
+
});
|
|
394
|
+
});
|
|
395
|
+
describe("createBatch", () => {
|
|
396
|
+
it("creates a batch of docs", async () => {
|
|
397
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, collectionName);
|
|
398
|
+
const docs = await testCollection.createBatch([
|
|
399
|
+
["create-batch-doc0", { foo: "hello" }],
|
|
400
|
+
["create-batch-doc1", { foo: "world" }],
|
|
401
|
+
]);
|
|
402
|
+
expect(docs[0].id).toBe("create-batch-doc0");
|
|
403
|
+
expect(docs[0].r).toEqual({ foo: "hello" });
|
|
404
|
+
expect(docs[1].id).toBe("create-batch-doc1");
|
|
405
|
+
expect(docs[1].r).toEqual({ foo: "world" });
|
|
406
|
+
expect((await getDoc(docs[0].docRef)).data()).toEqual({ foo: "hello" });
|
|
407
|
+
expect((await getDoc(docs[1].docRef)).data()).toEqual({ foo: "world" });
|
|
408
|
+
});
|
|
409
|
+
it("throws for incomplete doc IDs", async () => {
|
|
410
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, collectionName);
|
|
411
|
+
await expect(testCollection.createBatch([[[], { foo: "hello" }]])).rejects.toThrow("incomplete ID");
|
|
412
|
+
});
|
|
413
|
+
it("throws for parsing errors", async () => {
|
|
414
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, collectionName);
|
|
415
|
+
await expect(testCollection.createBatch([["bad-data", { foo: "xyz", bar: -1 }]])).rejects.toThrow();
|
|
416
|
+
});
|
|
417
|
+
it("throws for failed commits", async () => {
|
|
418
|
+
if (FIRESTORE_DEPS_TYPE === "admin")
|
|
419
|
+
return; // Admin can create anywhere.
|
|
420
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, "bad-collection-name");
|
|
421
|
+
await expect(testCollection.createBatch([["some-id", { foo: "xyz" }]])).rejects.toThrow("PERMISSION_DENIED");
|
|
422
|
+
});
|
|
423
|
+
});
|
|
424
|
+
describe("deleteBatch", () => {
|
|
425
|
+
it("deletes a batch of docs", async () => {
|
|
426
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, collectionName);
|
|
427
|
+
await testCollection.createBatch([
|
|
428
|
+
["delete-batch-doc0", { foo: "delete-batch-test" }],
|
|
429
|
+
["delete-batch-doc1", { foo: "delete-batch-test" }],
|
|
430
|
+
]);
|
|
431
|
+
expect((await testCollection.query(where("foo", "==", "delete-batch-test")))
|
|
432
|
+
.length).toBe(2);
|
|
433
|
+
await testCollection.deleteBatch([
|
|
434
|
+
"delete-batch-doc0",
|
|
435
|
+
"delete-batch-doc1",
|
|
436
|
+
]);
|
|
437
|
+
expect((await testCollection.query(where("foo", "==", "delete-batch-test")))
|
|
438
|
+
.length).toBe(0);
|
|
439
|
+
});
|
|
440
|
+
it("throws for incomplete doc IDs", async () => {
|
|
441
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, collectionName);
|
|
442
|
+
await expect(testCollection.deleteBatch([[]])).rejects.toThrow("incomplete ID");
|
|
443
|
+
});
|
|
444
|
+
it("throws for failed commits", async () => {
|
|
445
|
+
if (FIRESTORE_DEPS_TYPE === "admin")
|
|
446
|
+
return; // Admin can delete anywhere.
|
|
447
|
+
const testCollection = new FiretenderCollection(testSchema, firestore, "bad-collection-name");
|
|
448
|
+
await expect(testCollection.deleteBatch(["some-id"])).rejects.toThrow("PERMISSION_DENIED");
|
|
449
|
+
});
|
|
450
|
+
});
|
|
451
|
+
//# sourceMappingURL=FiretenderCollection.spec.js.map
|