@dereekb/firebase 5.1.0 → 5.2.0
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/CHANGELOG.md +10 -0
- package/package.json +5 -5
- package/src/lib/client/firestore/driver.accessor.js +1 -0
- package/src/lib/client/firestore/driver.accessor.js.map +1 -1
- package/src/lib/client/firestore/driver.query.js.map +1 -1
- package/src/lib/common/firestore/accessor/document.d.ts +56 -27
- package/src/lib/common/firestore/accessor/document.js +39 -21
- package/src/lib/common/firestore/accessor/document.js.map +1 -1
- package/src/lib/common/firestore/accessor/document.utility.d.ts +5 -5
- package/src/lib/common/firestore/accessor/document.utility.js.map +1 -1
- package/src/lib/common/firestore/collection/collection.d.ts +12 -5
- package/src/lib/common/firestore/collection/collection.group.d.ts +20 -0
- package/src/lib/common/firestore/collection/collection.group.js +31 -0
- package/src/lib/common/firestore/collection/collection.group.js.map +1 -0
- package/src/lib/common/firestore/collection/collection.js +4 -3
- package/src/lib/common/firestore/collection/collection.js.map +1 -1
- package/src/lib/common/firestore/collection/collection.query.d.ts +2 -2
- package/src/lib/common/firestore/collection/collection.query.js.map +1 -1
- package/src/lib/common/firestore/collection/index.d.ts +1 -0
- package/src/lib/common/firestore/collection/index.js +1 -0
- package/src/lib/common/firestore/collection/index.js.map +1 -1
- package/src/lib/common/firestore/collection/subcollection.js +1 -0
- package/src/lib/common/firestore/collection/subcollection.js.map +1 -1
- package/src/lib/common/firestore/context.d.ts +7 -3
- package/src/lib/common/firestore/context.js +7 -1
- package/src/lib/common/firestore/context.js.map +1 -1
- package/src/lib/common/firestore/driver/accessor.d.ts +3 -1
- package/src/lib/common/firestore/query/iterator.d.ts +2 -2
- package/src/lib/common/firestore/query/iterator.js +3 -3
- package/src/lib/common/firestore/query/iterator.js.map +1 -1
- package/src/lib/common/firestore/query/query.d.ts +2 -2
- package/src/lib/common/firestore/query/query.js +2 -2
- package/src/lib/common/firestore/query/query.js.map +1 -1
- package/src/lib/common/firestore/reference.d.ts +7 -1
- package/src/lib/common/firestore/types.d.ts +5 -0
- package/test/CHANGELOG.md +10 -0
- package/test/package.json +7 -7
- package/test/src/lib/common/firestore.d.ts +3 -0
- package/test/src/lib/common/firestore.js +14 -5
- package/test/src/lib/common/firestore.js.map +1 -1
- package/test/src/lib/common/firestore.mock.item.d.ts +5 -1
- package/test/src/lib/common/firestore.mock.item.fixture.d.ts +1 -0
- package/test/src/lib/common/firestore.mock.item.fixture.js +3 -0
- package/test/src/lib/common/firestore.mock.item.fixture.js.map +1 -1
- package/test/src/lib/common/firestore.mock.item.js +16 -2
- package/test/src/lib/common/firestore.mock.item.js.map +1 -1
- package/test/src/lib/common/test.driver.query.js +112 -9
- package/test/src/lib/common/test.driver.query.js.map +1 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { FirestoreDocument } from './accessor/document';
|
|
2
|
-
import { FirestoreCollection, FirestoreCollectionConfig, FirestoreCollectionWithParent, SingleItemFirestoreCollection } from './collection';
|
|
2
|
+
import { FirestoreCollection, FirestoreCollectionConfig, FirestoreCollectionWithParent, SingleItemFirestoreCollection, FirestoreCollectionGroup } from './collection';
|
|
3
3
|
import { FirestoreDrivers } from './driver/driver';
|
|
4
4
|
import { WriteBatchFactoryReference, RunTransactionFactoryReference } from './driver';
|
|
5
|
-
import { DocumentReference, CollectionReference, DocumentData, Firestore } from './types';
|
|
5
|
+
import { DocumentReference, CollectionReference, DocumentData, Firestore, CollectionGroup } from './types';
|
|
6
|
+
import { QueryLikeReferenceRef } from './reference';
|
|
6
7
|
/**
|
|
7
8
|
* A @dereekb/firestore FirestoreContext. Wraps the main Firestore context and the drivers, as well as utility/convenience functions.
|
|
8
9
|
*/
|
|
@@ -10,13 +11,16 @@ export interface FirestoreContext<F extends Firestore = Firestore> extends RunTr
|
|
|
10
11
|
readonly firestore: F;
|
|
11
12
|
readonly drivers: FirestoreDrivers;
|
|
12
13
|
collection<T = DocumentData>(path: string, ...pathSegments: string[]): CollectionReference<T>;
|
|
14
|
+
collectionGroup<T = DocumentData>(collectionId: string): CollectionGroup<T>;
|
|
13
15
|
subcollection<T = DocumentData>(parent: DocumentReference, path: string, ...pathSegments: string[]): CollectionReference<T>;
|
|
14
16
|
firestoreCollection<T, D extends FirestoreDocument<T>>(config: FirestoreContextFirestoreCollectionConfig<T, D>): FirestoreCollection<T, D>;
|
|
17
|
+
firestoreCollectionGroup<T, D extends FirestoreDocument<T>>(config: FirestoreContextFirestoreCollectionGroupConfig<T, D>): FirestoreCollectionGroup<T, D>;
|
|
15
18
|
firestoreCollectionWithParent<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>>(config: FirestoreContextFirestoreCollectionWithParentConfig<T, PT, D, PD>): FirestoreCollectionWithParent<T, PT, D, PD>;
|
|
16
19
|
singleItemFirestoreCollection<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>>(config: FirestoreContextSingleItemFirestoreCollectionConfig<T, PT, D, PD>): SingleItemFirestoreCollection<T, PT, D, PD>;
|
|
17
20
|
}
|
|
18
21
|
export declare type FirestoreContextFirestoreCollectionConfig<T, D extends FirestoreDocument<T>> = Omit<FirestoreCollectionConfig<T, D>, 'driverIdentifier' | 'driverType' | 'firestoreQueryDriver' | 'firestoreAccessorDriver'>;
|
|
19
|
-
export
|
|
22
|
+
export declare type FirestoreContextFirestoreCollectionGroupConfig<T, D extends FirestoreDocument<T>> = Omit<FirestoreContextFirestoreCollectionConfig<T, D>, 'collection'> & QueryLikeReferenceRef<T>;
|
|
23
|
+
export interface FirestoreContextFirestoreCollectionWithParentConfig<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>> extends Omit<FirestoreContextFirestoreCollectionConfig<T, D>, 'queryLike'> {
|
|
20
24
|
readonly parent: PD;
|
|
21
25
|
}
|
|
22
26
|
export interface FirestoreContextSingleItemFirestoreCollectionConfig<T, PT, D extends FirestoreDocument<T> = FirestoreDocument<T>, PD extends FirestoreDocument<PT> = FirestoreDocument<PT>> extends FirestoreContextFirestoreCollectionWithParentConfig<T, PT, D, PD> {
|
|
@@ -10,16 +10,22 @@ const collection_1 = require("./collection");
|
|
|
10
10
|
*/
|
|
11
11
|
function firestoreContextFactory(drivers) {
|
|
12
12
|
return (firestore) => {
|
|
13
|
-
const makeFirestoreCollectionConfig = (config) =>
|
|
13
|
+
const makeFirestoreCollectionConfig = (config) => {
|
|
14
|
+
var _a;
|
|
15
|
+
return (Object.assign(Object.assign({}, config), { queryLike: (_a = config.collection) !== null && _a !== void 0 ? _a : config.queryLike, firestoreContext: context, driverIdentifier: drivers.driverIdentifier, driverType: drivers.driverType, firestoreQueryDriver: drivers.firestoreQueryDriver, firestoreAccessorDriver: drivers.firestoreAccessorDriver }));
|
|
16
|
+
};
|
|
14
17
|
const firestoreCollection = (config) => (0, collection_1.makeFirestoreCollection)(makeFirestoreCollectionConfig(config));
|
|
18
|
+
const firestoreCollectionGroup = (config) => (0, collection_1.makeFirestoreCollectionGroup)(makeFirestoreCollectionConfig(config));
|
|
15
19
|
const context = {
|
|
16
20
|
firestore,
|
|
17
21
|
drivers,
|
|
22
|
+
collectionGroup: (collectionId) => drivers.firestoreAccessorDriver.collectionGroup(firestore, collectionId),
|
|
18
23
|
collection: (path, ...pathSegments) => drivers.firestoreAccessorDriver.collection(firestore, path, ...pathSegments),
|
|
19
24
|
subcollection: drivers.firestoreAccessorDriver.subcollection,
|
|
20
25
|
runTransaction: drivers.firestoreAccessorDriver.transactionFactoryForFirestore(firestore),
|
|
21
26
|
batch: drivers.firestoreAccessorDriver.writeBatchFactoryForFirestore(firestore),
|
|
22
27
|
firestoreCollection,
|
|
28
|
+
firestoreCollectionGroup,
|
|
23
29
|
firestoreCollectionWithParent(inputConfig) {
|
|
24
30
|
const config = makeFirestoreCollectionConfig(inputConfig);
|
|
25
31
|
return (0, collection_1.makeFirestoreCollectionWithParent)(config);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../../../../packages/firebase/src/lib/common/firestore/context.ts"],"names":[],"mappings":";;;AACA,
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../../../../packages/firebase/src/lib/common/firestore/context.ts"],"names":[],"mappings":";;;AACA,6CAA6W;AAqC7W;;;;;GAKG;AACH,SAAgB,uBAAuB,CAAkC,OAAyB;IAChG,OAAO,CAAC,SAAY,EAAE,EAAE;QACtB,MAAM,6BAA6B,GAAG,CAAyH,MAAsP,EAAE,EAAE;;YAAC,OAAA,iCACrZ,MAAM,KACT,SAAS,EAAE,MAAC,MAA0D,CAAC,UAAU,mCAAK,MAA+D,CAAC,SAAS,EAC/J,gBAAgB,EAAE,OAAO,EACzB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAC1C,UAAU,EAAE,OAAO,CAAC,UAAU,EAC9B,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,EAClD,uBAAuB,EAAE,OAAO,CAAC,uBAAuB,IACxD,CAAA;SAAA,CAAC;QAEH,MAAM,mBAAmB,GAAG,CAAoC,MAAuD,EAAE,EAAE,CAAC,IAAA,oCAAuB,EAAC,6BAA6B,CAAC,MAAM,CAAoC,CAAC,CAAC;QAC9N,MAAM,wBAAwB,GAAG,CAAoC,MAA4D,EAAE,EAAE,CAAC,IAAA,yCAA4B,EAAC,6BAA6B,CAAC,MAAM,CAAC,CAAC,CAAC;QAE1M,MAAM,OAAO,GAAwB;YACnC,SAAS;YACT,OAAO;YACP,eAAe,EAAE,CAAC,YAAoB,EAAE,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC,eAAe,CAAC,SAAS,EAAE,YAAY,CAAC;YACnH,UAAU,EAAE,CAAC,IAAY,EAAE,GAAG,YAAsB,EAAE,EAAE,CAAC,OAAO,CAAC,uBAAuB,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,YAAY,CAAC;YACrI,aAAa,EAAE,OAAO,CAAC,uBAAuB,CAAC,aAAa;YAC5D,cAAc,EAAE,OAAO,CAAC,uBAAuB,CAAC,8BAA8B,CAAC,SAAS,CAAC;YACzF,KAAK,EAAE,OAAO,CAAC,uBAAuB,CAAC,6BAA6B,CAAC,SAAS,CAAC;YAC/E,mBAAmB;YACnB,wBAAwB;YACxB,6BAA6B,CAAyH,WAA8D;gBAClN,MAAM,MAAM,GAAsD,6BAA6B,CAAC,WAAW,CAAsD,CAAC;gBAClK,OAAO,IAAA,8CAAiC,EAAC,MAAM,CAAC,CAAC;YACnD,CAAC;YACD,6BAA6B,CAAyH,WAA8E;gBAClO,MAAM,MAAM,GAAsD,6BAA6B,CAAC,WAAW,CAAsD,CAAC;gBAClK,OAAO,IAAA,8CAAiC,EAAC,MAAM,CAAC,CAAC;YACnD,CAAC;SACF,CAAC;QAEF,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC;AACJ,CAAC;AArCD,0DAqCC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { DocumentData, CollectionReference, DocumentReference, Firestore } from '../types';
|
|
1
|
+
import { DocumentData, CollectionReference, CollectionGroup, DocumentReference, Firestore } from '../types';
|
|
2
2
|
import { DefaultFirestoreDocumentContextFactory } from '../accessor/context.default';
|
|
3
3
|
import { WriteBatchFirestoreDocumentContextFactory } from '../accessor/context.batch';
|
|
4
4
|
import { TransactionFirestoreDocumentContextFactory } from '../accessor/context.transaction';
|
|
5
5
|
import { FirestoreWriteBatchFactoryDriver } from './batch';
|
|
6
6
|
import { FirestoreTransactionFactoryDriver } from './transaction';
|
|
7
|
+
export declare type FirestoreAccessorDriverCollectionGroupFunction = <T = DocumentData>(firestore: Firestore, collectionId: string) => CollectionGroup<T>;
|
|
7
8
|
export declare type FirestoreAccessorDriverCollectionRefFunction = <T = DocumentData>(firestore: Firestore, path: string, ...pathSegments: string[]) => CollectionReference<T>;
|
|
8
9
|
export declare type FirestoreAccessorDriverSubcollectionRefFunction = <T = DocumentData>(document: DocumentReference, path: string, ...pathSegments: string[]) => CollectionReference<T>;
|
|
9
10
|
export declare type FirestoreAccessorDriverDocumentRefFunction = <T = DocumentData>(collection: CollectionReference<T>, path?: string, ...pathSegments: string[]) => DocumentReference<T>;
|
|
@@ -12,6 +13,7 @@ export declare type FirestoreAccessorDriverDocumentRefFunction = <T = DocumentDa
|
|
|
12
13
|
*/
|
|
13
14
|
export interface FirestoreAccessorDriver extends FirestoreTransactionFactoryDriver, FirestoreWriteBatchFactoryDriver {
|
|
14
15
|
readonly doc: FirestoreAccessorDriverDocumentRefFunction;
|
|
16
|
+
readonly collectionGroup: FirestoreAccessorDriverCollectionGroupFunction;
|
|
15
17
|
readonly collection: FirestoreAccessorDriverCollectionRefFunction;
|
|
16
18
|
readonly subcollection: FirestoreAccessorDriverSubcollectionRefFunction;
|
|
17
19
|
readonly defaultContextFactory: DefaultFirestoreDocumentContextFactory;
|
|
@@ -2,9 +2,9 @@ import { PageLoadingState, ItemPageIterator, ItemPageIterationInstance, ItemPage
|
|
|
2
2
|
import { QueryDocumentSnapshotArray, QuerySnapshot, SnapshotListenOptions } from '../types';
|
|
3
3
|
import { Maybe, ArrayOrValue } from '@dereekb/util';
|
|
4
4
|
import { Observable } from 'rxjs';
|
|
5
|
-
import { CollectionReferenceRef } from '../reference';
|
|
6
5
|
import { FirestoreQueryDriverRef } from '../driver/query';
|
|
7
6
|
import { FirestoreQueryConstraint } from './constraint';
|
|
7
|
+
import { QueryLikeReferenceRef } from '../reference';
|
|
8
8
|
export interface FirestoreItemPageIteratorFilter extends ItemPageLimit {
|
|
9
9
|
/**
|
|
10
10
|
* Overrides the default limit, if applicable.
|
|
@@ -15,7 +15,7 @@ export interface FirestoreItemPageIteratorFilter extends ItemPageLimit {
|
|
|
15
15
|
*/
|
|
16
16
|
constraints?: Maybe<ArrayOrValue<FirestoreQueryConstraint>>;
|
|
17
17
|
}
|
|
18
|
-
export interface FirestoreItemPageIterationBaseConfig<T> extends
|
|
18
|
+
export interface FirestoreItemPageIterationBaseConfig<T> extends QueryLikeReferenceRef<T>, FirestoreQueryDriverRef, ItemPageLimit {
|
|
19
19
|
itemsPerPage: number;
|
|
20
20
|
}
|
|
21
21
|
export interface FirestoreItemPageIterationConfig<T> extends FirestoreItemPageIterationBaseConfig<T>, ItemPageIterationConfig<FirestoreItemPageIteratorFilter> {
|
|
@@ -15,7 +15,7 @@ function makeFirestoreItemPageIteratorDelegate() {
|
|
|
15
15
|
loadItemsForPage: (request) => {
|
|
16
16
|
const { page, iteratorConfig } = request;
|
|
17
17
|
const prevQueryResult$ = page > 0 ? request.lastItem$ : (0, rxjs_2.of)(undefined);
|
|
18
|
-
const {
|
|
18
|
+
const { queryLike, itemsPerPage, filter, firestoreQueryDriver: driver } = iteratorConfig;
|
|
19
19
|
const { limit: filterLimit, constraints: filterConstraints } = filter !== null && filter !== void 0 ? filter : {};
|
|
20
20
|
return prevQueryResult$.pipe((0, rxjs_2.exhaustMap)((prevResult) => {
|
|
21
21
|
if ((prevResult === null || prevResult === void 0 ? void 0 : prevResult.snapshot.empty) === true) {
|
|
@@ -39,7 +39,7 @@ function makeFirestoreItemPageIteratorDelegate() {
|
|
|
39
39
|
const limitConstraint = (0, constraint_1.limit)(limitCount);
|
|
40
40
|
const constraintsWithLimit = [...constraints, limitConstraint];
|
|
41
41
|
// make query
|
|
42
|
-
const batchQuery = driver.query(
|
|
42
|
+
const batchQuery = driver.query(queryLike, ...constraintsWithLimit);
|
|
43
43
|
const resultPromise = driver.getDocs(batchQuery).then((snapshot) => {
|
|
44
44
|
const time = new Date();
|
|
45
45
|
const docs = snapshot.docs;
|
|
@@ -89,7 +89,7 @@ function firestoreItemPageIterationFactory(baseConfig) {
|
|
|
89
89
|
return (filter) => {
|
|
90
90
|
var _a;
|
|
91
91
|
const result = firestoreItemPageIteration({
|
|
92
|
-
|
|
92
|
+
queryLike: baseConfig.queryLike,
|
|
93
93
|
itemsPerPage: baseConfig.itemsPerPage,
|
|
94
94
|
firestoreQueryDriver: baseConfig.firestoreQueryDriver,
|
|
95
95
|
maxPageLoadLimit: (_a = filter === null || filter === void 0 ? void 0 : filter.maxPageLoadLimit) !== null && _a !== void 0 ? _a : baseConfig.maxPageLoadLimit,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iterator.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase/src/lib/common/firestore/query/iterator.ts"],"names":[],"mappings":";;;AAAA,wCAAkP;AAElP,wCAAwF;AACxF,+BAAwD;
|
|
1
|
+
{"version":3,"file":"iterator.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase/src/lib/common/firestore/query/iterator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Observable } from 'rxjs';
|
|
2
2
|
import { ArrayOrValue, Maybe } from '@dereekb/util';
|
|
3
|
-
import {
|
|
3
|
+
import { QueryLikeReferenceRef } from '../reference';
|
|
4
4
|
import { Query, QueryDocumentSnapshot, QuerySnapshot, Transaction } from '../types';
|
|
5
5
|
import { FirestoreQueryConstraint } from './constraint';
|
|
6
6
|
import { FirestoreQueryDriverRef } from '../driver/query';
|
|
@@ -38,7 +38,7 @@ export interface FirestoreQueryFactory<T> {
|
|
|
38
38
|
*/
|
|
39
39
|
readonly query: FirestoreQueryFactoryFunction<T>;
|
|
40
40
|
}
|
|
41
|
-
export interface FirestoreQueryConfig<T> extends FirestoreQueryDriverRef,
|
|
41
|
+
export interface FirestoreQueryConfig<T> extends FirestoreQueryDriverRef, QueryLikeReferenceRef<T> {
|
|
42
42
|
}
|
|
43
43
|
/**
|
|
44
44
|
* Creates a FirestoreCollectionQuery.
|
|
@@ -11,7 +11,7 @@ const constraint_1 = require("./constraint");
|
|
|
11
11
|
* @returns
|
|
12
12
|
*/
|
|
13
13
|
function firestoreQueryFactory(config) {
|
|
14
|
-
const {
|
|
14
|
+
const { queryLike, firestoreQueryDriver: driver } = config;
|
|
15
15
|
const { getDocs, streamDocs, query: makeQuery } = driver;
|
|
16
16
|
const extendQuery = (inputQuery, queryConstraints) => {
|
|
17
17
|
const allConstraints = (0, util_1.flattenArrayOrValueArray)(queryConstraints);
|
|
@@ -30,7 +30,7 @@ function firestoreQueryFactory(config) {
|
|
|
30
30
|
};
|
|
31
31
|
};
|
|
32
32
|
return {
|
|
33
|
-
query: (...queryConstraints) => extendQuery(
|
|
33
|
+
query: (...queryConstraints) => extendQuery(queryLike, queryConstraints)
|
|
34
34
|
};
|
|
35
35
|
}
|
|
36
36
|
exports.firestoreQueryFactory = firestoreQueryFactory;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase/src/lib/common/firestore/query/query.ts"],"names":[],"mappings":";;;;AACA,wCAA8E;AAG9E,6CAAwF;AA2CxF;;;;;GAKG;AACH,SAAgB,qBAAqB,CAAI,MAA+B;IACtE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase/src/lib/common/firestore/query/query.ts"],"names":[],"mappings":";;;;AACA,wCAA8E;AAG9E,6CAAwF;AA2CxF;;;;;GAKG;AACH,SAAgB,qBAAqB,CAAI,MAA+B;IACtE,MAAM,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC3D,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;IAEzD,MAAM,WAAW,GAAG,CAAC,UAAoB,EAAE,gBAA0D,EAAE,EAAE;QACvG,MAAM,cAAc,GAAG,IAAA,+BAAwB,EAAC,gBAAgB,CAAC,CAAC;QAClE,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,EAAE,GAAG,cAAc,CAAC,CAAC;QAEvD,OAAO;YACL,KAAK;YACL,WAAW,EAAE,CAAO,WAAyB,EAAE,EAAE;gBAC/C,MAAM,mBAAmB,GAAG,IAAA,2CAA8B,EAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;gBAC9E,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,EAAE,GAAG,mBAAmB,CAAC,CAAC;gBAC5D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;gBACjD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC,CAAA;YACD,OAAO,EAAE,CAAC,WAAyB,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC;YACnE,UAAU,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;YACnC,MAAM,EAAE,CAAC,GAAG,gBAA0D,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,gBAAgB,CAAC;SAChH,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,CAAC,GAAG,gBAA0D,EAAE,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,gBAAgB,CAAC;KACnH,CAAC;AACJ,CAAC;AAzBD,sDAyBC"}
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { FirestoreContext } from './context';
|
|
2
|
-
import { CollectionReference, DocumentReference, Firestore } from './types';
|
|
2
|
+
import { CollectionReference, DocumentReference, Firestore, Query } from './types';
|
|
3
|
+
/**
|
|
4
|
+
* Contains a reference to a Query.
|
|
5
|
+
*/
|
|
6
|
+
export interface QueryLikeReferenceRef<T> {
|
|
7
|
+
readonly queryLike: Query<T>;
|
|
8
|
+
}
|
|
3
9
|
/**
|
|
4
10
|
* Contains a reference to a CollectionReference.
|
|
5
11
|
*/
|
|
@@ -96,6 +96,11 @@ export interface CollectionReference<T = DocumentData> extends Query<T> {
|
|
|
96
96
|
withConverter<U>(converter: FirestoreDataConverter<U>): CollectionReference<U>;
|
|
97
97
|
withConverter(converter: null): CollectionReference<DocumentData>;
|
|
98
98
|
}
|
|
99
|
+
export interface CollectionGroup<T = DocumentData> extends Query<T> {
|
|
100
|
+
readonly type?: 'query';
|
|
101
|
+
withConverter<U>(converter: FirestoreDataConverter<U>): CollectionGroup<U>;
|
|
102
|
+
withConverter(converter: null): CollectionGroup<DocumentData>;
|
|
103
|
+
}
|
|
99
104
|
export interface WriteBatch {
|
|
100
105
|
/**
|
|
101
106
|
* Commits the changes.
|
package/test/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
# [5.2.0](https://github.com/dereekb/dbx-components/compare/v5.1.0-dev...v5.2.0) (2022-05-29)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* added collection group support to dbx-firebase components ([9f746c1](https://github.com/dereekb/dbx-components/commit/9f746c12a0e219970dcde12d920f1ef540514ce9))
|
|
11
|
+
* added firestore collection group support ([3b4c4cf](https://github.com/dereekb/dbx-components/commit/3b4c4cfa1dd860604c347ade69acdc2fea1063f8))
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
|
|
5
15
|
# [5.1.0](https://github.com/dereekb/dbx-components/compare/v5.0.1-dev...v5.1.0) (2022-05-27)
|
|
6
16
|
|
|
7
17
|
|
package/test/package.json
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/firebase/test",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.2.0",
|
|
4
4
|
"main": "./src/index.js",
|
|
5
5
|
"typings": "./src/index.d.ts",
|
|
6
6
|
"dependencies": {},
|
|
7
7
|
"peerDependencies": {
|
|
8
|
-
"@dereekb/util/test": "5.
|
|
9
|
-
"@dereekb/util": "5.
|
|
8
|
+
"@dereekb/util/test": "5.2.0",
|
|
9
|
+
"@dereekb/util": "5.2.0",
|
|
10
10
|
"make-error": "^1.3.0",
|
|
11
11
|
"extra-set": "^2.2.11",
|
|
12
|
-
"@dereekb/firebase": "5.
|
|
12
|
+
"@dereekb/firebase": "5.2.0",
|
|
13
13
|
"rxjs": "^7.0.0",
|
|
14
14
|
"rxfire": "^6.0.3",
|
|
15
15
|
"firebase": "^9.8.0",
|
|
16
|
-
"@dereekb/rxjs": "5.
|
|
16
|
+
"@dereekb/rxjs": "5.2.0",
|
|
17
17
|
"ms": "^3.0.0-canary.1",
|
|
18
|
-
"@dereekb/date": "5.
|
|
18
|
+
"@dereekb/date": "5.2.0",
|
|
19
19
|
"class-transformer": "^0.5.1",
|
|
20
20
|
"date-fns": "^2.28.0",
|
|
21
21
|
"class-validator": "^0.13.2",
|
|
22
22
|
"date-fns-tz": "^1.3.0",
|
|
23
23
|
"rrule": "git+https://git@github.com/dereekb/rrule.git#17adf5708d6567b4d01a3a8afd106261421ea492",
|
|
24
|
-
"@dereekb/model": "5.
|
|
24
|
+
"@dereekb/model": "5.2.0",
|
|
25
25
|
"tslib": "^2.0.0"
|
|
26
26
|
}
|
|
27
27
|
}
|
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
import { FirestoreAccessorDriver, FirestoreContext, FirestoreDrivers } from '@dereekb/firebase';
|
|
2
|
+
/**
|
|
3
|
+
* Used to override/extend a FirestoreAccessorDriver to provide better isolation between tests.
|
|
4
|
+
*/
|
|
2
5
|
export interface TestingFirestoreAccessorDriver extends FirestoreAccessorDriver {
|
|
3
6
|
/**
|
|
4
7
|
* Gets the fuzzed path names map.
|
|
@@ -7,8 +7,8 @@ function makeTestingFirestoreAccesorDriver(driver) {
|
|
|
7
7
|
let fuzzerKey = 0;
|
|
8
8
|
const time = new Date().getTime();
|
|
9
9
|
const fuzzedMap = new Map();
|
|
10
|
-
const collection = driver
|
|
11
|
-
const
|
|
10
|
+
const { collection, subcollection, collectionGroup } = driver;
|
|
11
|
+
const fuzzedPathForPath = (path) => {
|
|
12
12
|
let fuzzedPath = fuzzedMap.get(path);
|
|
13
13
|
if (!fuzzedPath) {
|
|
14
14
|
const random = Math.ceil(Math.random() * 9999) % 9999;
|
|
@@ -18,14 +18,23 @@ function makeTestingFirestoreAccesorDriver(driver) {
|
|
|
18
18
|
return fuzzedPath;
|
|
19
19
|
};
|
|
20
20
|
const fuzzedCollection = (f, path) => {
|
|
21
|
-
const fuzzedPath =
|
|
21
|
+
const fuzzedPath = fuzzedPathForPath(path);
|
|
22
22
|
return collection(f, fuzzedPath);
|
|
23
23
|
};
|
|
24
|
+
const fuzzedSubcollection = (document, path, ...pathSegments) => {
|
|
25
|
+
const fuzzedPath = fuzzedPathForPath(path);
|
|
26
|
+
const fuzzedPathSegments = pathSegments.map((x) => fuzzedPathForPath(x));
|
|
27
|
+
return subcollection(document, fuzzedPath, ...fuzzedPathSegments);
|
|
28
|
+
};
|
|
29
|
+
const fuzzedCollectionGroup = (f, collectionId) => {
|
|
30
|
+
const fuzzedPath = fuzzedPathForPath(collectionId);
|
|
31
|
+
return collectionGroup(f, fuzzedPath);
|
|
32
|
+
};
|
|
24
33
|
const initWithCollectionNames = (collectionPaths) => {
|
|
25
|
-
collectionPaths.forEach((x) =>
|
|
34
|
+
collectionPaths.forEach((x) => fuzzedPathForPath(x));
|
|
26
35
|
return fuzzedMap;
|
|
27
36
|
};
|
|
28
|
-
const injectedDriver = Object.assign(Object.assign({}, driver), { collection: fuzzedCollection, getFuzzedCollectionsNameMap: () => fuzzedMap, initWithCollectionNames });
|
|
37
|
+
const injectedDriver = Object.assign(Object.assign({}, driver), { collection: fuzzedCollection, collectionGroup: fuzzedCollectionGroup, subcollection: fuzzedSubcollection, getFuzzedCollectionsNameMap: () => fuzzedMap, initWithCollectionNames });
|
|
29
38
|
return injectedDriver;
|
|
30
39
|
}
|
|
31
40
|
exports.makeTestingFirestoreAccesorDriver = makeTestingFirestoreAccesorDriver;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firestore.js","sourceRoot":"","sources":["../../../../../../../packages/firebase/test/src/lib/common/firestore.ts"],"names":[],"mappings":";;;;AAAA,
|
|
1
|
+
{"version":3,"file":"firestore.js","sourceRoot":"","sources":["../../../../../../../packages/firebase/test/src/lib/common/firestore.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Maybe } from '@dereekb/util';
|
|
2
|
-
import { CollectionReference, FirestoreCollection, FirestoreContext, AbstractFirestoreDocument, SingleItemFirestoreCollection, FirestoreCollectionWithParent, AbstractFirestoreDocumentWithParent, ExpectedFirestoreModelData, FirestoreModelData } from '@dereekb/firebase';
|
|
2
|
+
import { CollectionReference, FirestoreCollection, FirestoreContext, AbstractFirestoreDocument, SingleItemFirestoreCollection, FirestoreCollectionWithParent, AbstractFirestoreDocumentWithParent, ExpectedFirestoreModelData, FirestoreModelData, CollectionGroup, FirestoreCollectionGroup } from '@dereekb/firebase';
|
|
3
3
|
/**
|
|
4
4
|
* Converted data for a test item in our firestore collection.
|
|
5
5
|
*/
|
|
@@ -111,9 +111,13 @@ export declare function mockItemSubItemCollectionReferenceFactory(context: Fires
|
|
|
111
111
|
export declare type MockItemSubItemFirestoreCollection = FirestoreCollectionWithParent<MockItemSubItem, MockItem, MockItemSubItemDocument, MockItemDocument>;
|
|
112
112
|
export declare type MockItemSubItemFirestoreCollectionFactory = (parent: MockItemDocument) => MockItemSubItemFirestoreCollection;
|
|
113
113
|
export declare function mockItemSubItemFirestoreCollection(firestoreContext: FirestoreContext): MockItemSubItemFirestoreCollectionFactory;
|
|
114
|
+
export declare function mockItemSubItemCollectionReference(context: FirestoreContext): CollectionGroup<MockItemSubItem>;
|
|
115
|
+
export declare type MockItemSubItemFirestoreCollectionGroup = FirestoreCollectionGroup<MockItemSubItem, MockItemSubItemDocument>;
|
|
116
|
+
export declare function mockItemSubItemFirestoreCollectionGroup(firestoreContext: FirestoreContext): MockItemSubItemFirestoreCollectionGroup;
|
|
114
117
|
export declare abstract class MockItemCollections {
|
|
115
118
|
abstract readonly mockItem: MockItemFirestoreCollection;
|
|
116
119
|
abstract readonly mockItemPrivate: MockItemPrivateFirestoreCollectionFactory;
|
|
117
120
|
abstract readonly mockItemSubItem: MockItemSubItemFirestoreCollectionFactory;
|
|
121
|
+
abstract readonly mockItemSubItemGroup: MockItemSubItemFirestoreCollectionGroup;
|
|
118
122
|
}
|
|
119
123
|
export declare function makeMockItemCollections(firestoreContext: FirestoreContext): MockItemCollections;
|
|
@@ -9,6 +9,7 @@ export declare class MockItemCollectionFixtureInstance {
|
|
|
9
9
|
get firestoreCollection(): MockItemFirestoreCollection;
|
|
10
10
|
get mockItemPrivateCollection(): import("./firestore.mock.item").MockItemPrivateFirestoreCollectionFactory;
|
|
11
11
|
get mockItemSubItemCollection(): import("./firestore.mock.item").MockItemSubItemFirestoreCollectionFactory;
|
|
12
|
+
get mockItemSubItemCollectionGroup(): import("./firestore.mock.item").MockItemSubItemFirestoreCollectionGroup;
|
|
12
13
|
constructor(fixture: MockItemCollectionFixture);
|
|
13
14
|
}
|
|
14
15
|
/**
|
|
@@ -21,6 +21,9 @@ class MockItemCollectionFixtureInstance {
|
|
|
21
21
|
get mockItemSubItemCollection() {
|
|
22
22
|
return this.collections.mockItemSubItem;
|
|
23
23
|
}
|
|
24
|
+
get mockItemSubItemCollectionGroup() {
|
|
25
|
+
return this.collections.mockItemSubItemGroup;
|
|
26
|
+
}
|
|
24
27
|
}
|
|
25
28
|
exports.MockItemCollectionFixtureInstance = MockItemCollectionFixtureInstance;
|
|
26
29
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firestore.mock.item.fixture.js","sourceRoot":"","sources":["../../../../../../../packages/firebase/test/src/lib/common/firestore.mock.item.fixture.ts"],"names":[],"mappings":";;;AACA,6CAAkJ;AAClJ,+DAAuG;AAGvG,kCAAkC;AAClC,MAAa,iCAAiC;
|
|
1
|
+
{"version":3,"file":"firestore.mock.item.fixture.js","sourceRoot":"","sources":["../../../../../../../packages/firebase/test/src/lib/common/firestore.mock.item.fixture.ts"],"names":[],"mappings":";;;AACA,6CAAkJ;AAClJ,+DAAuG;AAGvG,kCAAkC;AAClC,MAAa,iCAAiC;IAsB5C,YAAqB,OAAkC;QAAlC,YAAO,GAAP,OAAO,CAA2B;QArB9C,gBAAW,GAAG,IAAA,6CAAuB,EAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAqBlB,CAAC;IAnB3D,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;IAC7C,CAAC;IACD,IAAI,mBAAmB;QACrB,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;IACnC,CAAC;IAED,IAAI,yBAAyB;QAC3B,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;IAC1C,CAAC;IAED,IAAI,yBAAyB;QAC3B,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC;IAC1C,CAAC;IAED,IAAI,8BAA8B;QAChC,OAAO,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC;IAC/C,CAAC;CAGF;AAvBD,8EAuBC;AAED;;GAEG;AACH,MAAa,yBAA0B,SAAQ,yCAAkG;CAAG;AAApJ,8DAAoJ;AAIpJ,SAAgB,uBAAuB,CAAC,MAAgD;IACtF,OAAO,IAAA,yCAAkC,EAAC;QACxC,WAAW,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,yBAAyB,CAAC,OAAO,CAAC;QAChE,YAAY,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,iCAAiC,CAAC,IAAI,CAAC;QACnE,gBAAgB,EAAE,CAAC,QAA2C,EAAE,EAAE;YAChE,qDAAqD;QACvD,CAAC;QACD,sEAAsE;KACvE,CAAC,CAAC;AACL,CAAC;AATD,0DASC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.makeMockItemCollections = exports.MockItemCollections = exports.mockItemSubItemFirestoreCollection = exports.mockItemSubItemCollectionReferenceFactory = exports.mockItemSubItemConverter = exports.mockItemSubItemCollectionPath = exports.MockItemSubItemDocument = exports.mockItemPrivateFirestoreCollection = exports.mockItemPrivateCollectionReferenceFactory = exports.mockItemPrivateConverter = exports.mockItemPrivateIdentifier = exports.mockItemPrivateCollectionPath = exports.MockItemPrivateDocument = exports.mockItemFirestoreCollection = exports.mockItemCollectionReference = exports.mockItemConverter = exports.mockItemCollectionPath = exports.MockItemDocument = void 0;
|
|
3
|
+
exports.makeMockItemCollections = exports.MockItemCollections = exports.mockItemSubItemFirestoreCollectionGroup = exports.mockItemSubItemCollectionReference = exports.mockItemSubItemFirestoreCollection = exports.mockItemSubItemCollectionReferenceFactory = exports.mockItemSubItemConverter = exports.mockItemSubItemCollectionPath = exports.MockItemSubItemDocument = exports.mockItemPrivateFirestoreCollection = exports.mockItemPrivateCollectionReferenceFactory = exports.mockItemPrivateConverter = exports.mockItemPrivateIdentifier = exports.mockItemPrivateCollectionPath = exports.MockItemPrivateDocument = exports.mockItemFirestoreCollection = exports.mockItemCollectionReference = exports.mockItemConverter = exports.mockItemCollectionPath = exports.MockItemDocument = void 0;
|
|
4
4
|
const util_1 = require("@dereekb/util");
|
|
5
5
|
const firebase_1 = require("@dereekb/firebase");
|
|
6
6
|
class MockItemDocument extends firebase_1.AbstractFirestoreDocument {
|
|
@@ -121,6 +121,19 @@ function mockItemSubItemFirestoreCollection(firestoreContext) {
|
|
|
121
121
|
};
|
|
122
122
|
}
|
|
123
123
|
exports.mockItemSubItemFirestoreCollection = mockItemSubItemFirestoreCollection;
|
|
124
|
+
function mockItemSubItemCollectionReference(context) {
|
|
125
|
+
return context.collectionGroup(exports.mockItemSubItemCollectionPath).withConverter(exports.mockItemSubItemConverter);
|
|
126
|
+
}
|
|
127
|
+
exports.mockItemSubItemCollectionReference = mockItemSubItemCollectionReference;
|
|
128
|
+
function mockItemSubItemFirestoreCollectionGroup(firestoreContext) {
|
|
129
|
+
return firestoreContext.firestoreCollectionGroup({
|
|
130
|
+
itemsPerPage: 50,
|
|
131
|
+
queryLike: mockItemSubItemCollectionReference(firestoreContext),
|
|
132
|
+
makeDocument: (accessor, documentAccessor) => new MockItemSubItemDocument(undefined, accessor, documentAccessor),
|
|
133
|
+
firestoreContext
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
exports.mockItemSubItemFirestoreCollectionGroup = mockItemSubItemFirestoreCollectionGroup;
|
|
124
137
|
// MARK: Collection
|
|
125
138
|
class MockItemCollections {
|
|
126
139
|
}
|
|
@@ -129,7 +142,8 @@ function makeMockItemCollections(firestoreContext) {
|
|
|
129
142
|
return {
|
|
130
143
|
mockItem: mockItemFirestoreCollection(firestoreContext),
|
|
131
144
|
mockItemPrivate: mockItemPrivateFirestoreCollection(firestoreContext),
|
|
132
|
-
mockItemSubItem: mockItemSubItemFirestoreCollection(firestoreContext)
|
|
145
|
+
mockItemSubItem: mockItemSubItemFirestoreCollection(firestoreContext),
|
|
146
|
+
mockItemSubItemGroup: mockItemSubItemFirestoreCollectionGroup(firestoreContext)
|
|
133
147
|
};
|
|
134
148
|
}
|
|
135
149
|
exports.makeMockItemCollections = makeMockItemCollections;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"firestore.mock.item.js","sourceRoot":"","sources":["../../../../../../../packages/firebase/test/src/lib/common/firestore.mock.item.ts"],"names":[],"mappings":";;;AAAA,wCAA6D;AAC7D,
|
|
1
|
+
{"version":3,"file":"firestore.mock.item.js","sourceRoot":"","sources":["../../../../../../../packages/firebase/test/src/lib/common/firestore.mock.item.ts"],"names":[],"mappings":";;;AAAA,wCAA6D;AAC7D,gDAAwb;AAexb,MAAa,gBAAiB,SAAQ,oCAAqD;CAAG;AAA9F,4CAA8F;AAiB9F;;GAEG;AACU,QAAA,sBAAsB,GAAG,MAAM,CAAC;AAE7C;;GAEG;AACU,QAAA,iBAAiB,GAAG,IAAA,qCAA0B,EAAyB;IAClF,MAAM,EAAE;QACN,KAAK,EAAE,IAAA,kCAAuB,GAAE;QAChC,IAAI,EAAE,IAAA,2BAAgB,EAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;KAC1C;CACF,CAAC,CAAC;AAEH;;;;;GAKG;AACH,SAAgB,2BAA2B,CAAC,OAAyB;IACnE,OAAO,OAAO,CAAC,UAAU,CAAC,8BAAsB,CAAC,CAAC,aAAa,CAAW,yBAAiB,CAAC,CAAC;AAC/F,CAAC;AAFD,kEAEC;AAID,SAAgB,2BAA2B,CAAC,gBAAkC;IAC5E,OAAO,gBAAgB,CAAC,mBAAmB,CAAC;QAC1C,YAAY,EAAE,EAAE;QAChB,UAAU,EAAE,2BAA2B,CAAC,gBAAgB,CAAC;QACzD,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC;QAClD,gBAAgB;KACjB,CAAC,CAAC;AACL,CAAC;AAPD,kEAOC;AAaD;;GAEG;AACH,MAAa,uBAAwB,SAAQ,oCAAmE;CAAG;AAAnH,0DAAmH;AAInH;;GAEG;AACU,QAAA,6BAA6B,GAAG,SAAS,CAAC;AAC1C,QAAA,yBAAyB,GAAG,GAAG,CAAC;AAE7C;;GAEG;AACU,QAAA,wBAAwB,GAAG,IAAA,qCAA0B,EAAC;IACjE,gBAAgB,EAAE,IAAA,4BAAqB,EAAuC;QAC5E,QAAQ,EAAE,IAAA,kCAAuB,GAAE;QACnC,SAAS,EAAE,IAAA,wBAAa,EAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC;KACrD,CAAC;CACH,CAAC,CAAC;AAEH;;;;;GAKG;AACH,SAAgB,yCAAyC,CAAC,OAAyB;IACjF,OAAO,CAAC,MAAwB,EAAE,EAAE;QAClC,OAAO,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,qCAA6B,CAAC,CAAC,aAAa,CAAkB,gCAAwB,CAAC,CAAC;IAC3I,CAAC,CAAC;AACJ,CAAC;AAJD,8FAIC;AAKD,SAAgB,kCAAkC,CAAC,gBAAkC;IACnF,MAAM,OAAO,GAAG,yCAAyC,CAAC,gBAAgB,CAAC,CAAC;IAE5E,OAAO,CAAC,MAAwB,EAAE,EAAE;QAClC,OAAO,gBAAgB,CAAC,6BAA6B,CAAC;YACpD,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC;YAC3B,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC;YACzD,gBAAgB;YAChB,MAAM;YACN,oBAAoB,EAAE,iCAAyB;SAChD,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAbD,gFAaC;AAYD;;GAEG;AACH,MAAa,uBAAwB,SAAQ,8CAAuF;CAAG;AAAvI,0DAAuI;AAIvI;;GAEG;AACU,QAAA,6BAA6B,GAAG,KAAK,CAAC;AAEnD;;GAEG;AACU,QAAA,wBAAwB,GAAG,IAAA,qCAA0B,EAAuC;IACvG,MAAM,EAAE;QACN,KAAK,EAAE,IAAA,kCAAuB,GAAE;KACjC;CACF,CAAC,CAAC;AAEH,SAAgB,yCAAyC,CAAC,OAAyB;IACjF,OAAO,CAAC,MAAwB,EAAE,EAAE;QAClC,OAAO,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,qCAA6B,CAAC,CAAC,aAAa,CAAkB,gCAAwB,CAAC,CAAC;IAC3I,CAAC,CAAC;AACJ,CAAC;AAJD,8FAIC;AAKD,SAAgB,kCAAkC,CAAC,gBAAkC;IACnF,MAAM,OAAO,GAAG,yCAAyC,CAAC,gBAAgB,CAAC,CAAC;IAE5E,OAAO,CAAC,MAAwB,EAAE,EAAE;QAClC,OAAO,gBAAgB,CAAC,6BAA6B,CAAC;YACpD,YAAY,EAAE,EAAE;YAChB,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC;YAC3B,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,uBAAuB,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7E,gBAAgB;YAChB,MAAM;SACP,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAZD,gFAYC;AAED,SAAgB,kCAAkC,CAAC,OAAyB;IAC1E,OAAO,OAAO,CAAC,eAAe,CAAC,qCAA6B,CAAC,CAAC,aAAa,CAAkB,gCAAwB,CAAC,CAAC;AACzH,CAAC;AAFD,gFAEC;AAID,SAAgB,uCAAuC,CAAC,gBAAkC;IACxF,OAAO,gBAAgB,CAAC,wBAAwB,CAAC;QAC/C,YAAY,EAAE,EAAE;QAChB,SAAS,EAAE,kCAAkC,CAAC,gBAAgB,CAAC;QAC/D,YAAY,EAAE,CAAC,QAAQ,EAAE,gBAAgB,EAAE,EAAE,CAAC,IAAI,uBAAuB,CAAC,SAAS,EAAE,QAAQ,EAAE,gBAAgB,CAAC;QAChH,gBAAgB;KACjB,CAAC,CAAC;AACL,CAAC;AAPD,0FAOC;AAED,mBAAmB;AACnB,MAAsB,mBAAmB;CAKxC;AALD,kDAKC;AAED,SAAgB,uBAAuB,CAAC,gBAAkC;IACxE,OAAO;QACL,QAAQ,EAAE,2BAA2B,CAAC,gBAAgB,CAAC;QACvD,eAAe,EAAE,kCAAkC,CAAC,gBAAgB,CAAC;QACrE,eAAe,EAAE,kCAAkC,CAAC,gBAAgB,CAAC;QACrE,oBAAoB,EAAE,uCAAuC,CAAC,gBAAgB,CAAC;KAChF,CAAC;AACJ,CAAC;AAPD,0DAOC"}
|
|
@@ -12,21 +12,124 @@ const firebase_1 = require("@dereekb/firebase");
|
|
|
12
12
|
*/
|
|
13
13
|
function describeQueryDriverTests(f) {
|
|
14
14
|
describe('FirestoreQueryDriver', () => {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
const testDocumentCount = 5;
|
|
16
|
+
let items;
|
|
17
|
+
beforeEach(() => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
18
|
+
items = yield (0, firebase_1.makeDocuments)(f.instance.firestoreCollection.documentAccessor(), {
|
|
19
|
+
count: testDocumentCount,
|
|
20
|
+
init: (i) => {
|
|
21
|
+
return {
|
|
22
|
+
value: `${i}`,
|
|
23
|
+
test: true
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
}));
|
|
28
|
+
describe('collection group', () => {
|
|
29
|
+
const subItemCountPerItem = 2;
|
|
30
|
+
const totalSubItemsCount = subItemCountPerItem * testDocumentCount;
|
|
31
|
+
let parentA;
|
|
32
|
+
let querySubItems;
|
|
33
|
+
let allSubItems;
|
|
19
34
|
beforeEach(() => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
35
|
+
querySubItems = f.instance.mockItemSubItemCollectionGroup.query;
|
|
36
|
+
parentA = items[0];
|
|
37
|
+
const results = yield Promise.all(items.map((parent) => (0, firebase_1.makeDocuments)(f.instance.mockItemSubItemCollection(parent).documentAccessor(), {
|
|
38
|
+
count: subItemCountPerItem,
|
|
23
39
|
init: (i) => {
|
|
24
40
|
return {
|
|
25
|
-
value:
|
|
26
|
-
test: true
|
|
41
|
+
value: i
|
|
27
42
|
};
|
|
28
43
|
}
|
|
44
|
+
})));
|
|
45
|
+
allSubItems = results.flat();
|
|
46
|
+
}));
|
|
47
|
+
describe('query', () => {
|
|
48
|
+
it('should return sub items', () => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
49
|
+
const result = yield querySubItems().getDocs();
|
|
50
|
+
expect(result.docs.length).toBe(totalSubItemsCount);
|
|
51
|
+
}));
|
|
52
|
+
describe('constraints', () => {
|
|
53
|
+
describe('where', () => {
|
|
54
|
+
it('should return the documents matching the query.', () => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
55
|
+
const value = 0;
|
|
56
|
+
const result = yield querySubItems((0, firebase_1.where)('value', '==', value)).getDocs();
|
|
57
|
+
expect(result.docs.length).toBe(testDocumentCount);
|
|
58
|
+
expect(result.docs[0].data().value).toBe(value);
|
|
59
|
+
}));
|
|
60
|
+
});
|
|
61
|
+
});
|
|
62
|
+
describe('streamDocs()', () => {
|
|
63
|
+
let sub;
|
|
64
|
+
beforeEach(() => {
|
|
65
|
+
sub = new rxjs_1.SubscriptionObject();
|
|
66
|
+
});
|
|
67
|
+
afterEach(() => {
|
|
68
|
+
sub.destroy();
|
|
69
|
+
});
|
|
70
|
+
it('should emit when the query results update (an item is added).', (done) => {
|
|
71
|
+
const itemsToAdd = 1;
|
|
72
|
+
let addCompleted = false;
|
|
73
|
+
let addSeen = false;
|
|
74
|
+
function tryComplete() {
|
|
75
|
+
if (addSeen && addCompleted) {
|
|
76
|
+
done();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
sub.subscription = querySubItems()
|
|
80
|
+
.streamDocs()
|
|
81
|
+
.pipe((0, rxjs_2.filter)((x) => x.docs.length > allSubItems.length))
|
|
82
|
+
.subscribe((results) => {
|
|
83
|
+
addSeen = true;
|
|
84
|
+
expect(results.docs.length).toBe(allSubItems.length + itemsToAdd);
|
|
85
|
+
tryComplete();
|
|
86
|
+
});
|
|
87
|
+
// add one item
|
|
88
|
+
(0, firebase_1.makeDocuments)(f.instance.mockItemSubItemCollection(parentA).documentAccessor(), {
|
|
89
|
+
count: itemsToAdd,
|
|
90
|
+
init: (i) => {
|
|
91
|
+
return {
|
|
92
|
+
value: i
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
}).then(() => {
|
|
96
|
+
addCompleted = true;
|
|
97
|
+
tryComplete();
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
it('should emit when the query results update (an item is removed).', (done) => {
|
|
101
|
+
const itemsToRemove = 1;
|
|
102
|
+
let deleteCompleted = false;
|
|
103
|
+
let deleteSeen = false;
|
|
104
|
+
function tryComplete() {
|
|
105
|
+
if (deleteSeen && deleteCompleted) {
|
|
106
|
+
done();
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
sub.subscription = querySubItems()
|
|
110
|
+
.streamDocs()
|
|
111
|
+
.pipe((0, rxjs_2.filter)((x) => x.docs.length < allSubItems.length))
|
|
112
|
+
.subscribe((results) => {
|
|
113
|
+
deleteSeen = true;
|
|
114
|
+
expect(results.docs.length).toBe(allSubItems.length - itemsToRemove);
|
|
115
|
+
tryComplete();
|
|
116
|
+
});
|
|
117
|
+
allSubItems[0].accessor.exists().then((exists) => {
|
|
118
|
+
expect(exists).toBe(true);
|
|
119
|
+
// remove one item
|
|
120
|
+
return allSubItems[0].accessor.delete().then(() => {
|
|
121
|
+
deleteCompleted = true;
|
|
122
|
+
tryComplete();
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
});
|
|
29
126
|
});
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
describe('query', () => {
|
|
130
|
+
let query;
|
|
131
|
+
beforeEach(() => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
132
|
+
query = f.instance.firestoreCollection.query;
|
|
30
133
|
}));
|
|
31
134
|
describe('streamDocs()', () => {
|
|
32
135
|
let sub;
|