@dereekb/firebase 0.0.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/README.md +15 -0
- package/package.json +16 -0
- package/src/index.d.ts +2 -0
- package/src/index.js +6 -0
- package/src/index.js.map +1 -0
- package/src/lib/firestore/accessor.batch.d.ts +23 -0
- package/src/lib/firestore/accessor.batch.js +46 -0
- package/src/lib/firestore/accessor.batch.js.map +1 -0
- package/src/lib/firestore/accessor.d.ts +62 -0
- package/src/lib/firestore/accessor.default.d.ts +22 -0
- package/src/lib/firestore/accessor.default.js +42 -0
- package/src/lib/firestore/accessor.default.js.map +1 -0
- package/src/lib/firestore/accessor.js +29 -0
- package/src/lib/firestore/accessor.js.map +1 -0
- package/src/lib/firestore/accessor.transaction.d.ts +23 -0
- package/src/lib/firestore/accessor.transaction.js +45 -0
- package/src/lib/firestore/accessor.transaction.js.map +1 -0
- package/src/lib/firestore/context.batch.d.ts +9 -0
- package/src/lib/firestore/context.batch.js +19 -0
- package/src/lib/firestore/context.batch.js.map +1 -0
- package/src/lib/firestore/context.d.ts +24 -0
- package/src/lib/firestore/context.default.d.ts +2 -0
- package/src/lib/firestore/context.default.js +13 -0
- package/src/lib/firestore/context.default.js.map +1 -0
- package/src/lib/firestore/context.js +15 -0
- package/src/lib/firestore/context.js.map +1 -0
- package/src/lib/firestore/context.transaction.d.ts +9 -0
- package/src/lib/firestore/context.transaction.js +19 -0
- package/src/lib/firestore/context.transaction.js.map +1 -0
- package/src/lib/firestore/document.d.ts +69 -0
- package/src/lib/firestore/document.js +49 -0
- package/src/lib/firestore/document.js.map +1 -0
- package/src/lib/firestore/firestore.d.ts +29 -0
- package/src/lib/firestore/firestore.js +37 -0
- package/src/lib/firestore/firestore.js.map +1 -0
- package/src/lib/firestore/index.d.ts +12 -0
- package/src/lib/firestore/index.js +16 -0
- package/src/lib/firestore/index.js.map +1 -0
- package/src/lib/firestore/iterator.d.ts +49 -0
- package/src/lib/firestore/iterator.js +91 -0
- package/src/lib/firestore/iterator.js.map +1 -0
- package/src/lib/firestore/reference.d.ts +13 -0
- package/src/lib/firestore/reference.js +3 -0
- package/src/lib/firestore/reference.js.map +1 -0
- package/src/lib/index.d.ts +1 -0
- package/src/lib/index.js +5 -0
- package/src/lib/index.js.map +1 -0
- package/src/test/firebase.context.d.ts +5 -0
- package/src/test/firebase.context.item.d.ts +41 -0
- package/src/test/firebase.context.item.js +75 -0
- package/src/test/firebase.context.item.js.map +1 -0
- package/src/test/firebase.context.js +23 -0
- package/src/test/firebase.context.js.map +1 -0
- package/src/test/firebase.d.ts +29 -0
- package/src/test/firebase.js +67 -0
- package/src/test/firebase.js.map +1 -0
- package/src/test/index.d.ts +3 -0
- package/src/test/index.js +7 -0
- package/src/test/index.js.map +1 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { CollectionReference } from "@firebase/firestore";
|
|
2
|
+
import { FirestoreDocument, FirestoreDocumentAccessor, FirestoreDocumentAccessorFactory, FirestoreDocumentAccessorFactoryFunction, FirestoreDocumentAccessorInstanceConfig } from "./document";
|
|
3
|
+
import { FirestoreItemPageIterationBaseConfig, FirestoreItemPageIterationFactory, FirestoreItemPageIterationFactoryFunction, FirestoreItemPageIterationInstance, FirestoreItemPageIteratorFilter } from "./iterator";
|
|
4
|
+
import { FirestoreDocumentContext } from "./context";
|
|
5
|
+
import { FirestoreCollectionReference } from "./reference";
|
|
6
|
+
/**
|
|
7
|
+
* FirestoreCollection configuration
|
|
8
|
+
*/
|
|
9
|
+
export interface FirestoreCollectionConfig<T, D extends FirestoreDocument<T> = FirestoreDocument<T>> extends FirestoreItemPageIterationBaseConfig<T>, FirestoreDocumentAccessorInstanceConfig<T, D> {
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Instance that provides several accessors for accessing documents of a collection.
|
|
13
|
+
*/
|
|
14
|
+
export declare class FirestoreCollection<T, D extends FirestoreDocument<T> = FirestoreDocument<T>> implements FirestoreCollectionReference<T>, FirestoreItemPageIterationFactory<T>, FirestoreDocumentAccessorFactory<T, D> {
|
|
15
|
+
readonly config: FirestoreCollectionConfig<T, D>;
|
|
16
|
+
protected readonly _iterationFactory: FirestoreItemPageIterationFactoryFunction<T>;
|
|
17
|
+
protected readonly _documentAccessorFactory: FirestoreDocumentAccessorFactoryFunction<T, D>;
|
|
18
|
+
constructor(config: FirestoreCollectionConfig<T, D>);
|
|
19
|
+
get collection(): CollectionReference<T>;
|
|
20
|
+
firestoreIteration(filter?: FirestoreItemPageIteratorFilter): FirestoreItemPageIterationInstance<T>;
|
|
21
|
+
documentAccessor(context?: FirestoreDocumentContext<T>): FirestoreDocumentAccessor<T, D>;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Creates a new FirestoreCollection instance from the input config.
|
|
25
|
+
*
|
|
26
|
+
* @param config
|
|
27
|
+
* @returns
|
|
28
|
+
*/
|
|
29
|
+
export declare function makeFirestoreCollection<T, D extends FirestoreDocument<T>>(config: FirestoreCollectionConfig<T, D>): FirestoreCollection<T, D>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeFirestoreCollection = exports.FirestoreCollection = void 0;
|
|
4
|
+
const document_1 = require("./document");
|
|
5
|
+
const iterator_1 = require("./iterator");
|
|
6
|
+
/**
|
|
7
|
+
* Instance that provides several accessors for accessing documents of a collection.
|
|
8
|
+
*/
|
|
9
|
+
class FirestoreCollection {
|
|
10
|
+
constructor(config) {
|
|
11
|
+
this.config = config;
|
|
12
|
+
this._iterationFactory = (0, iterator_1.firestoreItemPageIterationFactory)(this.config);
|
|
13
|
+
this._documentAccessorFactory = (0, document_1.firestoreDocumentAccessorFactory)(this.config);
|
|
14
|
+
}
|
|
15
|
+
get collection() {
|
|
16
|
+
return this.config.collection;
|
|
17
|
+
}
|
|
18
|
+
// MARK: FirestoreItemPageIterationFactory<T>
|
|
19
|
+
firestoreIteration(filter) {
|
|
20
|
+
return this._iterationFactory(filter);
|
|
21
|
+
}
|
|
22
|
+
documentAccessor(context) {
|
|
23
|
+
return this._documentAccessorFactory(context);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.FirestoreCollection = FirestoreCollection;
|
|
27
|
+
/**
|
|
28
|
+
* Creates a new FirestoreCollection instance from the input config.
|
|
29
|
+
*
|
|
30
|
+
* @param config
|
|
31
|
+
* @returns
|
|
32
|
+
*/
|
|
33
|
+
function makeFirestoreCollection(config) {
|
|
34
|
+
return new FirestoreCollection(config);
|
|
35
|
+
}
|
|
36
|
+
exports.makeFirestoreCollection = makeFirestoreCollection;
|
|
37
|
+
//# sourceMappingURL=firestore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firestore.js","sourceRoot":"","sources":["../../../../../../packages/firebase/src/lib/firestore/firestore.ts"],"names":[],"mappings":";;;AACA,yCAAiO;AACjO,yCAAwP;AAUxP;;GAEG;AACH,MAAa,mBAAmB;IAM9B,YAAqB,MAAuC;QAAvC,WAAM,GAAN,MAAM,CAAiC;QAHzC,sBAAiB,GAAiD,IAAA,4CAAiC,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjH,6BAAwB,GAAmD,IAAA,2CAAgC,EAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAE5E,CAAC;IAEjE,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;IAChC,CAAC;IAED,6CAA6C;IAC7C,kBAAkB,CAAC,MAAwC;QACzD,OAAO,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,gBAAgB,CAAC,OAAqC;QACpD,OAAO,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAChD,CAAC;CAEF;AArBD,kDAqBC;AAED;;;;;GAKG;AACH,SAAgB,uBAAuB,CAAoC,MAAuC;IAChH,OAAO,IAAI,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACzC,CAAC;AAFD,0DAEC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export * from './accessor';
|
|
2
|
+
export * from './accessor.batch';
|
|
3
|
+
export * from './accessor.default';
|
|
4
|
+
export * from './accessor.transaction';
|
|
5
|
+
export * from './document';
|
|
6
|
+
export * from './reference';
|
|
7
|
+
export * from './context.batch';
|
|
8
|
+
export * from './context.default';
|
|
9
|
+
export * from './context.transaction';
|
|
10
|
+
export * from './context';
|
|
11
|
+
export * from './firestore';
|
|
12
|
+
export * from './iterator';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
(0, tslib_1.__exportStar)(require("./accessor"), exports);
|
|
5
|
+
(0, tslib_1.__exportStar)(require("./accessor.batch"), exports);
|
|
6
|
+
(0, tslib_1.__exportStar)(require("./accessor.default"), exports);
|
|
7
|
+
(0, tslib_1.__exportStar)(require("./accessor.transaction"), exports);
|
|
8
|
+
(0, tslib_1.__exportStar)(require("./document"), exports);
|
|
9
|
+
(0, tslib_1.__exportStar)(require("./reference"), exports);
|
|
10
|
+
(0, tslib_1.__exportStar)(require("./context.batch"), exports);
|
|
11
|
+
(0, tslib_1.__exportStar)(require("./context.default"), exports);
|
|
12
|
+
(0, tslib_1.__exportStar)(require("./context.transaction"), exports);
|
|
13
|
+
(0, tslib_1.__exportStar)(require("./context"), exports);
|
|
14
|
+
(0, tslib_1.__exportStar)(require("./firestore"), exports);
|
|
15
|
+
(0, tslib_1.__exportStar)(require("./iterator"), exports);
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/firebase/src/lib/firestore/index.ts"],"names":[],"mappings":";;;AAAA,0DAA2B;AAC3B,gEAAiC;AACjC,kEAAmC;AACnC,sEAAuC;AACvC,0DAA2B;AAC3B,2DAA4B;AAC5B,+DAAgC;AAChC,iEAAkC;AAClC,qEAAsC;AACtC,yDAA0B;AAC1B,2DAA4B;AAC5B,0DAA2B"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { PageLoadingState, ItemPageIterator, ItemPageIterationInstance, ItemPageIterationConfig, ItemPageIteratorDelegate, MappedPageItemIterationInstance } from '@dereekb/rxjs';
|
|
2
|
+
import { QueryDocumentSnapshot, QueryConstraint, QuerySnapshot } from "@firebase/firestore";
|
|
3
|
+
import { Maybe } from '@dereekb/util';
|
|
4
|
+
import { FirestoreCollectionReference } from './reference';
|
|
5
|
+
export interface FirestoreItemPageIteratorFilter {
|
|
6
|
+
queryConstraints?: Maybe<QueryConstraint[]>;
|
|
7
|
+
}
|
|
8
|
+
export interface FirestoreItemPageIterationBaseConfig<T> extends FirestoreCollectionReference<T> {
|
|
9
|
+
itemsPerPage: number;
|
|
10
|
+
}
|
|
11
|
+
export interface FirestoreItemPageIterationConfig<T> extends FirestoreItemPageIterationBaseConfig<T>, ItemPageIterationConfig<FirestoreItemPageIteratorFilter> {
|
|
12
|
+
}
|
|
13
|
+
export interface FirestoreItemPageQueryResult<T> {
|
|
14
|
+
/**
|
|
15
|
+
* The relevant docs for this page result. This value will omit the cursor.
|
|
16
|
+
*/
|
|
17
|
+
docs: QueryDocumentSnapshot<T>[];
|
|
18
|
+
/**
|
|
19
|
+
* The raw snapshot returned from the query.
|
|
20
|
+
*/
|
|
21
|
+
snapshot: QuerySnapshot<T>;
|
|
22
|
+
}
|
|
23
|
+
export declare type FirestoreItemPageIteratorDelegate<T> = ItemPageIteratorDelegate<FirestoreItemPageQueryResult<T>, FirestoreItemPageIteratorFilter, FirestoreItemPageIterationConfig<T>>;
|
|
24
|
+
export declare type InternalFirestoreItemPageIterationInstance<T> = ItemPageIterationInstance<FirestoreItemPageQueryResult<T>, FirestoreItemPageIteratorFilter, FirestoreItemPageIterationConfig<T>>;
|
|
25
|
+
export declare function makeFirestoreItemPageIteratorDelegate<T>(): FirestoreItemPageIteratorDelegate<T>;
|
|
26
|
+
export declare class FirestoreItemPageIterationInstance<T> extends MappedPageItemIterationInstance<QueryDocumentSnapshot<T>[], FirestoreItemPageQueryResult<T>, PageLoadingState<QueryDocumentSnapshot<T>[]>, PageLoadingState<FirestoreItemPageQueryResult<T>>, InternalFirestoreItemPageIterationInstance<T>> {
|
|
27
|
+
constructor(snapshotIteration: InternalFirestoreItemPageIterationInstance<T>);
|
|
28
|
+
get snapshotIteration(): InternalFirestoreItemPageIterationInstance<T>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* FirestoreItemPageIteration factory.
|
|
32
|
+
*/
|
|
33
|
+
export interface FirestoreItemPageIterationFactory<T> {
|
|
34
|
+
firestoreIteration(filter?: FirestoreItemPageIteratorFilter): FirestoreItemPageIterationInstance<T>;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Function that creates a FirestoreItemPageIterationInstance from the input filter.
|
|
38
|
+
*/
|
|
39
|
+
export declare type FirestoreItemPageIterationFactoryFunction<T> = (filter?: FirestoreItemPageIteratorFilter) => FirestoreItemPageIterationInstance<T>;
|
|
40
|
+
/**
|
|
41
|
+
* Creates a new factory function that can build FirestoreItemPageIterationInstance values from just the input filter.
|
|
42
|
+
*
|
|
43
|
+
* @param baseConfig
|
|
44
|
+
* @returns FirestoreItemPageIterationInstance
|
|
45
|
+
*/
|
|
46
|
+
export declare function firestoreItemPageIterationFactory<T>(baseConfig: FirestoreItemPageIterationBaseConfig<T>): FirestoreItemPageIterationFactoryFunction<T>;
|
|
47
|
+
export declare const FIRESTORE_ITEM_PAGE_ITERATOR_DELEGATE: FirestoreItemPageIteratorDelegate<any>;
|
|
48
|
+
export declare const FIRESTORE_ITEM_PAGE_ITERATOR: ItemPageIterator<FirestoreItemPageQueryResult<any>, FirestoreItemPageIteratorFilter, FirestoreItemPageIterationConfig<any>>;
|
|
49
|
+
export declare function firestoreItemPageIteration<T>(config: FirestoreItemPageIterationConfig<T>): FirestoreItemPageIterationInstance<T>;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.firestoreItemPageIteration = exports.FIRESTORE_ITEM_PAGE_ITERATOR = exports.FIRESTORE_ITEM_PAGE_ITERATOR_DELEGATE = exports.firestoreItemPageIterationFactory = exports.FirestoreItemPageIterationInstance = exports.makeFirestoreItemPageIteratorDelegate = void 0;
|
|
4
|
+
const rxjs_1 = require("@dereekb/rxjs");
|
|
5
|
+
const firestore_1 = require("@firebase/firestore");
|
|
6
|
+
const util_1 = require("@dereekb/util");
|
|
7
|
+
const rxjs_2 = require("rxjs");
|
|
8
|
+
function makeFirestoreItemPageIteratorDelegate() {
|
|
9
|
+
return {
|
|
10
|
+
loadItemsForPage: (request) => {
|
|
11
|
+
const { page, iteratorConfig } = request;
|
|
12
|
+
const lastQueryResult$ = (page > 0) ? request.lastItem$ : (0, rxjs_2.of)(undefined);
|
|
13
|
+
const { collection, itemsPerPage, filter } = iteratorConfig;
|
|
14
|
+
return lastQueryResult$.pipe((0, rxjs_2.exhaustMap)((lastResult) => {
|
|
15
|
+
if ((lastResult === null || lastResult === void 0 ? void 0 : lastResult.snapshot.empty) === true) { // TODO: Shouldn't happen. Remove this later.
|
|
16
|
+
return (0, rxjs_2.of)({ end: true });
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
const constraints = [];
|
|
20
|
+
// Add filter constraints
|
|
21
|
+
if (filter === null || filter === void 0 ? void 0 : filter.queryConstraints) {
|
|
22
|
+
(0, util_1.mergeIntoArray)(constraints, filter.queryConstraints);
|
|
23
|
+
}
|
|
24
|
+
// Add cursor
|
|
25
|
+
const cursorDocument = (lastResult) ? (0, util_1.lastValue)(lastResult.docs) : undefined;
|
|
26
|
+
const startsAtFilter = (cursorDocument) ? (0, firestore_1.startAt)(cursorDocument) : undefined;
|
|
27
|
+
if (startsAtFilter) {
|
|
28
|
+
constraints.push(startsAtFilter);
|
|
29
|
+
}
|
|
30
|
+
// Add Limit
|
|
31
|
+
constraints.push((0, firestore_1.limit)(itemsPerPage + ((startsAtFilter) ? 1 : 0))); // Add 1 for cursor, since results will start at our cursor.
|
|
32
|
+
const batchQuery = (0, firestore_1.query)(collection, ...constraints);
|
|
33
|
+
const resultPromise = (0, firestore_1.getDocs)(batchQuery).then((snapshot) => {
|
|
34
|
+
let docs = snapshot.docs;
|
|
35
|
+
// Remove the cursor document from the results.
|
|
36
|
+
if (cursorDocument && docs[0].id === cursorDocument.id) {
|
|
37
|
+
docs = docs.slice(1);
|
|
38
|
+
}
|
|
39
|
+
const result = {
|
|
40
|
+
value: {
|
|
41
|
+
docs,
|
|
42
|
+
snapshot
|
|
43
|
+
},
|
|
44
|
+
end: snapshot.empty
|
|
45
|
+
};
|
|
46
|
+
return result;
|
|
47
|
+
});
|
|
48
|
+
return (0, rxjs_2.from)(resultPromise);
|
|
49
|
+
}
|
|
50
|
+
}));
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
exports.makeFirestoreItemPageIteratorDelegate = makeFirestoreItemPageIteratorDelegate;
|
|
55
|
+
class FirestoreItemPageIterationInstance extends rxjs_1.MappedPageItemIterationInstance {
|
|
56
|
+
constructor(snapshotIteration) {
|
|
57
|
+
super(snapshotIteration, {
|
|
58
|
+
forwardDestroy: true,
|
|
59
|
+
mapValue: (x) => x.docs
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
get snapshotIteration() {
|
|
63
|
+
return this.itemIterator;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
exports.FirestoreItemPageIterationInstance = FirestoreItemPageIterationInstance;
|
|
67
|
+
/**
|
|
68
|
+
* Creates a new factory function that can build FirestoreItemPageIterationInstance values from just the input filter.
|
|
69
|
+
*
|
|
70
|
+
* @param baseConfig
|
|
71
|
+
* @returns FirestoreItemPageIterationInstance
|
|
72
|
+
*/
|
|
73
|
+
function firestoreItemPageIterationFactory(baseConfig) {
|
|
74
|
+
return (filter) => {
|
|
75
|
+
const result = firestoreItemPageIteration({
|
|
76
|
+
collection: baseConfig.collection,
|
|
77
|
+
itemsPerPage: baseConfig.itemsPerPage,
|
|
78
|
+
filter
|
|
79
|
+
});
|
|
80
|
+
return result;
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
exports.firestoreItemPageIterationFactory = firestoreItemPageIterationFactory;
|
|
84
|
+
exports.FIRESTORE_ITEM_PAGE_ITERATOR_DELEGATE = makeFirestoreItemPageIteratorDelegate();
|
|
85
|
+
exports.FIRESTORE_ITEM_PAGE_ITERATOR = new rxjs_1.ItemPageIterator(exports.FIRESTORE_ITEM_PAGE_ITERATOR_DELEGATE);
|
|
86
|
+
function firestoreItemPageIteration(config) {
|
|
87
|
+
const iterator = exports.FIRESTORE_ITEM_PAGE_ITERATOR.instance(config);
|
|
88
|
+
return new FirestoreItemPageIterationInstance(iterator);
|
|
89
|
+
}
|
|
90
|
+
exports.firestoreItemPageIteration = firestoreItemPageIteration;
|
|
91
|
+
//# sourceMappingURL=iterator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iterator.js","sourceRoot":"","sources":["../../../../../../packages/firebase/src/lib/firestore/iterator.ts"],"names":[],"mappings":";;;AAAA,wCAAmO;AACnO,mDAA4H;AAC5H,wCAAiE;AACjE,+BAAwD;AA2BxD,SAAgB,qCAAqC;IACnD,OAAO;QACL,gBAAgB,EAAE,CAAC,OAAuI,EAAuE,EAAE;YACjO,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC;YACzC,MAAM,gBAAgB,GAAuD,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAA,SAAE,EAAC,SAAS,CAAC,CAAC;YAE5H,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC;YAE5D,OAAO,gBAAgB,CAAC,IAAI,CAC1B,IAAA,iBAAU,EAAC,CAAC,UAAU,EAAE,EAAE;gBACxB,IAAI,CAAA,UAAU,aAAV,UAAU,uBAAV,UAAU,CAAE,QAAQ,CAAC,KAAK,MAAK,IAAI,EAAE,EAAG,6CAA6C;oBACvF,OAAO,IAAA,SAAE,EAA0D,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;iBACnF;qBAAM;oBACL,MAAM,WAAW,GAAsB,EAAE,CAAC;oBAE1C,yBAAyB;oBACzB,IAAI,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,gBAAgB,EAAE;wBAC5B,IAAA,qBAAc,EAAC,WAAW,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;qBACtD;oBAED,aAAa;oBACb,MAAM,cAAc,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAA,gBAAS,EAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBAC7E,MAAM,cAAc,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,IAAA,mBAAO,EAAC,cAAc,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;oBAE9E,IAAI,cAAc,EAAE;wBAClB,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;qBAClC;oBAED,YAAY;oBACZ,WAAW,CAAC,IAAI,CAAC,IAAA,iBAAK,EAAC,YAAY,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAG,4DAA4D;oBAElI,MAAM,UAAU,GAAG,IAAA,iBAAK,EAAI,UAAU,EAAE,GAAG,WAAW,CAAC,CAAC;oBACxD,MAAM,aAAa,GAAqE,IAAA,mBAAO,EAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE;wBAC5H,IAAI,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;wBAEzB,+CAA+C;wBAC/C,IAAI,cAAc,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,cAAc,CAAC,EAAE,EAAE;4BACtD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;yBACtB;wBAED,MAAM,MAAM,GAA4D;4BACtE,KAAK,EAAE;gCACL,IAAI;gCACJ,QAAQ;6BACT;4BACD,GAAG,EAAE,QAAQ,CAAC,KAAK;yBACpB,CAAC;wBAEF,OAAO,MAAM,CAAC;oBAChB,CAAC,CAAC,CAAC;oBACH,OAAO,IAAA,WAAI,EAAC,aAAa,CAAC,CAAC;iBAC5B;YACH,CAAC,CAAC,CACH,CAAC;QACJ,CAAC;KACF,CAAA;AACH,CAAC;AAxDD,sFAwDC;AAED,MAAa,kCAAsC,SAAQ,sCAM1D;IAEC,YAAY,iBAAgE;QAC1E,KAAK,CAAC,iBAAiB,EAAE;YACvB,cAAc,EAAE,IAAI;YACpB,QAAQ,EAAE,CAAC,CAAkC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI;SACzD,CAAC,CAAC;IACL,CAAC;IAED,IAAI,iBAAiB;QACnB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;CAEF;AAnBD,gFAmBC;AAeD;;;;;GAKG;AACH,SAAgB,iCAAiC,CAAI,UAAmD;IACtG,OAAO,CAAC,MAAwC,EAAE,EAAE;QAClD,MAAM,MAAM,GAA0C,0BAA0B,CAAI;YAClF,UAAU,EAAE,UAAU,CAAC,UAAU;YACjC,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,MAAM;SACP,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAVD,8EAUC;AAEY,QAAA,qCAAqC,GAA2C,qCAAqC,EAAS,CAAC;AAC/H,QAAA,4BAA4B,GAAG,IAAI,uBAAgB,CAA4G,6CAAqC,CAAC,CAAC;AAEnN,SAAgB,0BAA0B,CAAI,MAA2C;IACvF,MAAM,QAAQ,GAAkD,oCAA4B,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC9G,OAAO,IAAI,kCAAkC,CAAI,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAHD,gEAGC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { CollectionReference, DocumentReference } from "@firebase/firestore";
|
|
2
|
+
/**
|
|
3
|
+
* Contains a reference to a CollectionReference.
|
|
4
|
+
*/
|
|
5
|
+
export interface FirestoreCollectionReference<T> {
|
|
6
|
+
readonly collection: CollectionReference<T>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Contains a reference to a DocumentReference.
|
|
10
|
+
*/
|
|
11
|
+
export interface FirestoreDocumentReference<T> {
|
|
12
|
+
readonly documentRef: DocumentReference<T>;
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reference.js","sourceRoot":"","sources":["../../../../../../packages/firebase/src/lib/firestore/reference.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './firestore';
|
package/src/lib/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/firebase/src/lib/index.ts"],"names":[],"mappings":";;;AAAA,2DAA4B"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { JestTestContextFactory } from '@dereekb/util';
|
|
2
|
+
import { FirebaseTestingContextFixture } from './firebase';
|
|
3
|
+
export declare const TESTING_AUTHORIZED_FIREBASE_USER_ID = "0";
|
|
4
|
+
export declare type FirebaseTestContextFactory = JestTestContextFactory<FirebaseTestingContextFixture>;
|
|
5
|
+
export declare const authorizedFirebase: FirebaseTestContextFactory;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { AbstractWrappedFixtureWithInstance, JestTestWrappedContextFactoryBuilder, Maybe } from '@dereekb/util';
|
|
2
|
+
import { Firestore, CollectionReference } from 'firebase/firestore';
|
|
3
|
+
import { FirebaseTestingContextFixture } from './firebase';
|
|
4
|
+
import { AbstractFirestoreDocument } from '../lib/firestore/document';
|
|
5
|
+
import { FirestoreCollection } from '../lib/firestore/firestore';
|
|
6
|
+
/**
|
|
7
|
+
* Data for a test item in our firestore collection.
|
|
8
|
+
*/
|
|
9
|
+
export interface TestItem {
|
|
10
|
+
test?: boolean;
|
|
11
|
+
value?: Maybe<string>;
|
|
12
|
+
}
|
|
13
|
+
export declare class TestItemDocument extends AbstractFirestoreDocument<TestItem> {
|
|
14
|
+
}
|
|
15
|
+
export declare const testItemCollectionPath = "test";
|
|
16
|
+
/**
|
|
17
|
+
* A way to build a testItemCollection from a firestore instance.
|
|
18
|
+
*
|
|
19
|
+
* @param firestore
|
|
20
|
+
* @returns
|
|
21
|
+
*/
|
|
22
|
+
export declare function testItemCollection(firestore: Firestore): CollectionReference<TestItem>;
|
|
23
|
+
export declare type TestItemFirestoreCollection = FirestoreCollection<TestItem, TestItemDocument>;
|
|
24
|
+
export declare function testItemFirestoreCollection(firestore: Firestore): TestItemFirestoreCollection;
|
|
25
|
+
export declare class TestItemCollectionFixtureInstance {
|
|
26
|
+
readonly fixture: TestItemCollectionFixture;
|
|
27
|
+
readonly testItemCollection: CollectionReference<TestItem>;
|
|
28
|
+
constructor(fixture: TestItemCollectionFixture);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Used to expose a CollectionReference to TestItem for simple tests.
|
|
32
|
+
*/
|
|
33
|
+
export declare class TestItemCollectionFixture extends AbstractWrappedFixtureWithInstance<TestItemCollectionFixtureInstance, FirebaseTestingContextFixture> {
|
|
34
|
+
}
|
|
35
|
+
export interface TestItemCollectionFirebaseContextConfig {
|
|
36
|
+
}
|
|
37
|
+
export declare function testWithTestItemFixture(config?: TestItemCollectionFirebaseContextConfig): JestTestWrappedContextFactoryBuilder<TestItemCollectionFixture, FirebaseTestingContextFixture>;
|
|
38
|
+
/**
|
|
39
|
+
* Tests within an authorized context.
|
|
40
|
+
*/
|
|
41
|
+
export declare const authorizedTestWithTestItemCollection: import("@dereekb/util").JestTestContextFactory<TestItemCollectionFixture>;
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.authorizedTestWithTestItemCollection = exports.testWithTestItemFixture = exports.TestItemCollectionFixture = exports.TestItemCollectionFixtureInstance = exports.testItemFirestoreCollection = exports.testItemCollection = exports.testItemCollectionPath = exports.TestItemDocument = void 0;
|
|
4
|
+
const util_1 = require("@dereekb/util");
|
|
5
|
+
const firestore_1 = require("firebase/firestore");
|
|
6
|
+
const firebase_context_1 = require("./firebase.context");
|
|
7
|
+
const document_1 = require("../lib/firestore/document");
|
|
8
|
+
const firestore_2 = require("../lib/firestore/firestore");
|
|
9
|
+
class TestItemDocument extends document_1.AbstractFirestoreDocument {
|
|
10
|
+
}
|
|
11
|
+
exports.TestItemDocument = TestItemDocument;
|
|
12
|
+
exports.testItemCollectionPath = 'test';
|
|
13
|
+
/**
|
|
14
|
+
* A way to build a testItemCollection from a firestore instance.
|
|
15
|
+
*
|
|
16
|
+
* @param firestore
|
|
17
|
+
* @returns
|
|
18
|
+
*/
|
|
19
|
+
function testItemCollection(firestore) {
|
|
20
|
+
return (0, firestore_1.collection)(firestore, exports.testItemCollectionPath).withConverter({
|
|
21
|
+
toFirestore(modelObject) {
|
|
22
|
+
return {
|
|
23
|
+
test: modelObject.test || false,
|
|
24
|
+
value: modelObject.value || null
|
|
25
|
+
};
|
|
26
|
+
},
|
|
27
|
+
fromFirestore(snapshot, options) {
|
|
28
|
+
const data = snapshot.data();
|
|
29
|
+
const result = {
|
|
30
|
+
test: data['test'] || false,
|
|
31
|
+
value: data['value'] || null
|
|
32
|
+
};
|
|
33
|
+
return result;
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
exports.testItemCollection = testItemCollection;
|
|
38
|
+
function testItemFirestoreCollection(firestore) {
|
|
39
|
+
return (0, firestore_2.makeFirestoreCollection)({
|
|
40
|
+
itemsPerPage: 50,
|
|
41
|
+
collection: testItemCollection(firestore),
|
|
42
|
+
makeDocument: (x) => new TestItemDocument(x)
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
exports.testItemFirestoreCollection = testItemFirestoreCollection;
|
|
46
|
+
// MARK: Test Item Testing Fixture
|
|
47
|
+
class TestItemCollectionFixtureInstance {
|
|
48
|
+
constructor(fixture) {
|
|
49
|
+
this.fixture = fixture;
|
|
50
|
+
this.testItemCollection = testItemCollection(this.fixture.parent.firestore);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
exports.TestItemCollectionFixtureInstance = TestItemCollectionFixtureInstance;
|
|
54
|
+
/**
|
|
55
|
+
* Used to expose a CollectionReference to TestItem for simple tests.
|
|
56
|
+
*/
|
|
57
|
+
class TestItemCollectionFixture extends util_1.AbstractWrappedFixtureWithInstance {
|
|
58
|
+
}
|
|
59
|
+
exports.TestItemCollectionFixture = TestItemCollectionFixture;
|
|
60
|
+
function testWithTestItemFixture(config) {
|
|
61
|
+
return (0, util_1.instanceWrapJestTestContextFactory)({
|
|
62
|
+
wrapFixture: (fixture) => new TestItemCollectionFixture(fixture),
|
|
63
|
+
makeInstance: (wrap) => new TestItemCollectionFixtureInstance(wrap),
|
|
64
|
+
teardownInstance: (instance) => {
|
|
65
|
+
// instance.fixture.parent.instance.clearFirestore();
|
|
66
|
+
}
|
|
67
|
+
// TODO: Utilize config here using the setup/teardown later if needed.
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
exports.testWithTestItemFixture = testWithTestItemFixture;
|
|
71
|
+
/**
|
|
72
|
+
* Tests within an authorized context.
|
|
73
|
+
*/
|
|
74
|
+
exports.authorizedTestWithTestItemCollection = testWithTestItemFixture()(firebase_context_1.authorizedFirebase);
|
|
75
|
+
//# sourceMappingURL=firebase.context.item.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firebase.context.item.js","sourceRoot":"","sources":["../../../../../packages/firebase/src/test/firebase.context.item.ts"],"names":[],"mappings":";;;AAAA,wCAAoJ;AACpJ,kDAAsJ;AAEtJ,yDAAwD;AACxD,wDAAsE;AACtE,0DAA0F;AAY1F,MAAa,gBAAiB,SAAQ,oCAAmC;CAAI;AAA7E,4CAA6E;AAEhE,QAAA,sBAAsB,GAAG,MAAM,CAAC;AAE7C;;;;;GAKG;AACH,SAAgB,kBAAkB,CAAC,SAAoB;IACrD,OAAO,IAAA,sBAAU,EAAC,SAAS,EAAE,8BAAsB,CAAC,CAAC,aAAa,CAAW;QAC3E,WAAW,CAAC,WAAqC;YAC/C,OAAO;gBACL,IAAI,EAAE,WAAW,CAAC,IAAI,IAAI,KAAK;gBAC/B,KAAK,EAAE,WAAW,CAAC,KAAK,IAAI,IAAI;aACjC,CAAC;QACJ,CAAC;QACD,aAAa,CAAC,QAA6C,EAAE,OAAyB;YACpF,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAa;gBACvB,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK;gBAC3B,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI;aAC7B,CAAC;YACF,OAAO,MAAM,CAAC;QAChB,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAjBD,gDAiBC;AAID,SAAgB,2BAA2B,CAAC,SAAoB;IAC9D,OAAO,IAAA,mCAAuB,EAAC;QAC7B,YAAY,EAAE,EAAE;QAChB,UAAU,EAAE,kBAAkB,CAAC,SAAS,CAAC;QACzC,YAAY,EAAE,CAAC,CAA0C,EAAE,EAAE,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC;KACtF,CAAC,CAAC;AACL,CAAC;AAND,kEAMC;AAED,kCAAkC;AAClC,MAAa,iCAAiC;IAI5C,YAAqB,OAAkC;QAAlC,YAAO,GAAP,OAAO,CAA2B;QAF9C,uBAAkB,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAErB,CAAC;CAE7D;AAND,8EAMC;AAED;;GAEG;AACH,MAAa,yBAA0B,SAAQ,yCAAoG;CAAI;AAAvJ,8DAAuJ;AAIvJ,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;AAED;;GAEG;AACU,QAAA,oCAAoC,GAAG,uBAAuB,EAAE,CAAC,qCAAkB,CAAC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.authorizedFirebase = exports.TESTING_AUTHORIZED_FIREBASE_USER_ID = void 0;
|
|
4
|
+
const firebase_1 = require("./firebase");
|
|
5
|
+
exports.TESTING_AUTHORIZED_FIREBASE_USER_ID = '0';
|
|
6
|
+
exports.authorizedFirebase = (0, firebase_1.firebaseTestBuilder)({
|
|
7
|
+
testEnvironment: {
|
|
8
|
+
firestore: {
|
|
9
|
+
rules: `
|
|
10
|
+
rules_version = '2';
|
|
11
|
+
service cloud.firestore {
|
|
12
|
+
match /databases/{database}/documents {
|
|
13
|
+
match /{document=**} {
|
|
14
|
+
allow read, write: if true;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
`
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
rulesContext: { userId: exports.TESTING_AUTHORIZED_FIREBASE_USER_ID }
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=firebase.context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firebase.context.js","sourceRoot":"","sources":["../../../../../packages/firebase/src/test/firebase.context.ts"],"names":[],"mappings":";;;AACA,yCAAgF;AAEnE,QAAA,mCAAmC,GAAG,GAAG,CAAC;AAI1C,QAAA,kBAAkB,GAA+B,IAAA,8BAAmB,EAAC;IAChF,eAAe,EAAE;QACf,SAAS,EAAE;YACT,KAAK,EAAE;;;;;;;;;OASN;SACF;KACF;IACD,YAAY,EAAE,EAAE,MAAM,EAAE,2CAAmC,EAAE;CAC9D,CAAC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Firestore } from '@firebase/firestore';
|
|
2
|
+
import { TestEnvironmentConfig, RulesTestEnvironment, RulesTestContext, TokenOptions } from "@firebase/rules-unit-testing";
|
|
3
|
+
import { AbstractJestTestContextFixture, Maybe } from "@dereekb/util";
|
|
4
|
+
export interface FirebaseTestingRulesContextConfig {
|
|
5
|
+
userId: string;
|
|
6
|
+
tokenOptions?: Maybe<TokenOptions>;
|
|
7
|
+
}
|
|
8
|
+
export interface FirebaseTestingConfig {
|
|
9
|
+
testEnvironment: TestEnvironmentConfig;
|
|
10
|
+
rulesContext?: Maybe<FirebaseTestingRulesContextConfig>;
|
|
11
|
+
retainFirestoreBetweenTests?: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare class FirebaseTestInstance {
|
|
14
|
+
readonly rulesTestEnvironment: RulesTestEnvironment;
|
|
15
|
+
readonly rulesTestContext: RulesTestContext;
|
|
16
|
+
private readonly _firestore;
|
|
17
|
+
constructor(rulesTestEnvironment: RulesTestEnvironment, rulesTestContext: RulesTestContext);
|
|
18
|
+
get firestore(): Firestore;
|
|
19
|
+
clearFirestore(): Promise<void>;
|
|
20
|
+
}
|
|
21
|
+
export declare class FirebaseTestingContextFixture extends AbstractJestTestContextFixture<FirebaseTestInstance> {
|
|
22
|
+
get firestore(): Firestore;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A JestTestContextBuilderFunction for building firebase test context factories.
|
|
26
|
+
*
|
|
27
|
+
* This can be used to easily build a testing context that sets up RulesTestEnvironment for tests that sets itself up and tears itself down.
|
|
28
|
+
*/
|
|
29
|
+
export declare const firebaseTestBuilder: import("@dereekb/util").JestTestContextBuilderFunction<FirebaseTestInstance, FirebaseTestingContextFixture, FirebaseTestingConfig>;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.firebaseTestBuilder = exports.FirebaseTestingContextFixture = exports.FirebaseTestInstance = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const rules_unit_testing_1 = require("@firebase/rules-unit-testing");
|
|
6
|
+
const util_1 = require("@dereekb/util");
|
|
7
|
+
class FirebaseTestInstance {
|
|
8
|
+
constructor(rulesTestEnvironment, rulesTestContext) {
|
|
9
|
+
this.rulesTestEnvironment = rulesTestEnvironment;
|
|
10
|
+
this.rulesTestContext = rulesTestContext;
|
|
11
|
+
this._firestore = this.rulesTestContext.firestore();
|
|
12
|
+
}
|
|
13
|
+
get firestore() {
|
|
14
|
+
return this._firestore;
|
|
15
|
+
}
|
|
16
|
+
clearFirestore() {
|
|
17
|
+
return this.rulesTestEnvironment.clearFirestore();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.FirebaseTestInstance = FirebaseTestInstance;
|
|
21
|
+
class FirebaseTestingContextFixture extends util_1.AbstractJestTestContextFixture {
|
|
22
|
+
// MARK: From Instance
|
|
23
|
+
get firestore() {
|
|
24
|
+
return this.instance.firestore;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.FirebaseTestingContextFixture = FirebaseTestingContextFixture;
|
|
28
|
+
/**
|
|
29
|
+
* A JestTestContextBuilderFunction for building firebase test context factories.
|
|
30
|
+
*
|
|
31
|
+
* This can be used to easily build a testing context that sets up RulesTestEnvironment for tests that sets itself up and tears itself down.
|
|
32
|
+
*/
|
|
33
|
+
exports.firebaseTestBuilder = (0, util_1.jestTestContextBuilder)({
|
|
34
|
+
buildConfig: (input) => {
|
|
35
|
+
var _a;
|
|
36
|
+
const config = {
|
|
37
|
+
testEnvironment: (_a = input === null || input === void 0 ? void 0 : input.testEnvironment) !== null && _a !== void 0 ? _a : {},
|
|
38
|
+
rulesContext: input === null || input === void 0 ? void 0 : input.rulesContext
|
|
39
|
+
};
|
|
40
|
+
return config;
|
|
41
|
+
},
|
|
42
|
+
buildFixture: () => new FirebaseTestingContextFixture(),
|
|
43
|
+
setupInstance: (config) => (0, tslib_1.__awaiter)(void 0, void 0, void 0, function* () {
|
|
44
|
+
const rulesTestEnv = yield (0, rules_unit_testing_1.initializeTestEnvironment)(config.testEnvironment);
|
|
45
|
+
const rulesTestContext = rulesTestContextForConfig(rulesTestEnv, config.rulesContext);
|
|
46
|
+
return new FirebaseTestInstance(rulesTestEnv, rulesTestContext);
|
|
47
|
+
}),
|
|
48
|
+
teardownInstance: (instance, config) => (0, tslib_1.__awaiter)(void 0, void 0, void 0, function* () {
|
|
49
|
+
if (config.retainFirestoreBetweenTests !== true) {
|
|
50
|
+
yield instance.clearFirestore(); // Clear the firestore
|
|
51
|
+
}
|
|
52
|
+
yield instance.rulesTestEnvironment.cleanup(); // Cleanup
|
|
53
|
+
})
|
|
54
|
+
});
|
|
55
|
+
// MARK: Internal
|
|
56
|
+
function rulesTestContextForConfig(rulesTestEnv, testingRulesConfig) {
|
|
57
|
+
var _a;
|
|
58
|
+
let rulesTestContext;
|
|
59
|
+
if (testingRulesConfig != null) {
|
|
60
|
+
rulesTestContext = rulesTestEnv.authenticatedContext(testingRulesConfig.userId, (_a = testingRulesConfig.tokenOptions) !== null && _a !== void 0 ? _a : undefined);
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
rulesTestContext = rulesTestEnv.unauthenticatedContext();
|
|
64
|
+
}
|
|
65
|
+
return rulesTestContext;
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=firebase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"firebase.js","sourceRoot":"","sources":["../../../../../packages/firebase/src/test/firebase.ts"],"names":[],"mappings":";;;;AACA,qEAMsC;AAEtC,wCAAsH;AAetH,MAAa,oBAAoB;IAI/B,YAAqB,oBAA0C,EAAW,gBAAkC;QAAvF,yBAAoB,GAApB,oBAAoB,CAAsB;QAAW,qBAAgB,GAAhB,gBAAgB,CAAkB;QAF3F,eAAU,GAAc,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAS,CAAC;IAE8B,CAAC;IAEjH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,oBAAoB,CAAC,cAAc,EAAE,CAAC;IACpD,CAAC;CAIF;AAhBD,oDAgBC;AAED,MAAa,6BAA8B,SAAQ,qCAAoD;IAErG,sBAAsB;IACtB,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;IACjC,CAAC;CAEF;AAPD,sEAOC;AAED;;;;GAIG;AACU,QAAA,mBAAmB,GAAG,IAAA,6BAAsB,EAA6E;IACpI,WAAW,EAAE,CAAC,KAAsC,EAAE,EAAE;;QACtD,MAAM,MAAM,GAA0B;YACpC,eAAe,EAAE,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,eAAe,mCAAI,EAAE;YAC7C,YAAY,EAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,YAAY;SAClC,CAAC;QAEF,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,YAAY,EAAE,GAAG,EAAE,CAAC,IAAI,6BAA6B,EAAE;IACvD,aAAa,EAAE,CAAO,MAAM,EAAE,EAAE;QAC9B,MAAM,YAAY,GAAG,MAAM,IAAA,8CAAyB,EAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAC7E,MAAM,gBAAgB,GAAG,yBAAyB,CAAC,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;QACtF,OAAO,IAAI,oBAAoB,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;IAClE,CAAC,CAAA;IACD,gBAAgB,EAAE,CAAO,QAAQ,EAAE,MAAM,EAAE,EAAE;QAC3C,IAAI,MAAM,CAAC,2BAA2B,KAAK,IAAI,EAAE;YAC/C,MAAM,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAE,sBAAsB;SACzD;QAED,MAAM,QAAQ,CAAC,oBAAoB,CAAC,OAAO,EAAE,CAAC,CAAE,UAAU;IAC5D,CAAC,CAAA;CACF,CAAC,CAAC;AAEH,iBAAiB;AACjB,SAAS,yBAAyB,CAAC,YAAkC,EAAE,kBAA6D;;IAClI,IAAI,gBAAkC,CAAC;IAEvC,IAAI,kBAAkB,IAAI,IAAI,EAAE;QAC9B,gBAAgB,GAAG,YAAY,CAAC,oBAAoB,CAAC,kBAAkB,CAAC,MAAM,EAAE,MAAA,kBAAkB,CAAC,YAAY,mCAAI,SAAS,CAAC,CAAC;KAC/H;SAAM;QACL,gBAAgB,GAAG,YAAY,CAAC,sBAAsB,EAAE,CAAC;KAC1D;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const tslib_1 = require("tslib");
|
|
4
|
+
(0, tslib_1.__exportStar)(require("./firebase"), exports);
|
|
5
|
+
(0, tslib_1.__exportStar)(require("./firebase.context"), exports);
|
|
6
|
+
(0, tslib_1.__exportStar)(require("./firebase.context.item"), exports);
|
|
7
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/firebase/src/test/index.ts"],"names":[],"mappings":";;;AAAA,0DAA2B;AAC3B,kEAAmC;AACnC,uEAAwC"}
|