@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.
Files changed (59) hide show
  1. package/README.md +15 -0
  2. package/package.json +16 -0
  3. package/src/index.d.ts +2 -0
  4. package/src/index.js +6 -0
  5. package/src/index.js.map +1 -0
  6. package/src/lib/firestore/accessor.batch.d.ts +23 -0
  7. package/src/lib/firestore/accessor.batch.js +46 -0
  8. package/src/lib/firestore/accessor.batch.js.map +1 -0
  9. package/src/lib/firestore/accessor.d.ts +62 -0
  10. package/src/lib/firestore/accessor.default.d.ts +22 -0
  11. package/src/lib/firestore/accessor.default.js +42 -0
  12. package/src/lib/firestore/accessor.default.js.map +1 -0
  13. package/src/lib/firestore/accessor.js +29 -0
  14. package/src/lib/firestore/accessor.js.map +1 -0
  15. package/src/lib/firestore/accessor.transaction.d.ts +23 -0
  16. package/src/lib/firestore/accessor.transaction.js +45 -0
  17. package/src/lib/firestore/accessor.transaction.js.map +1 -0
  18. package/src/lib/firestore/context.batch.d.ts +9 -0
  19. package/src/lib/firestore/context.batch.js +19 -0
  20. package/src/lib/firestore/context.batch.js.map +1 -0
  21. package/src/lib/firestore/context.d.ts +24 -0
  22. package/src/lib/firestore/context.default.d.ts +2 -0
  23. package/src/lib/firestore/context.default.js +13 -0
  24. package/src/lib/firestore/context.default.js.map +1 -0
  25. package/src/lib/firestore/context.js +15 -0
  26. package/src/lib/firestore/context.js.map +1 -0
  27. package/src/lib/firestore/context.transaction.d.ts +9 -0
  28. package/src/lib/firestore/context.transaction.js +19 -0
  29. package/src/lib/firestore/context.transaction.js.map +1 -0
  30. package/src/lib/firestore/document.d.ts +69 -0
  31. package/src/lib/firestore/document.js +49 -0
  32. package/src/lib/firestore/document.js.map +1 -0
  33. package/src/lib/firestore/firestore.d.ts +29 -0
  34. package/src/lib/firestore/firestore.js +37 -0
  35. package/src/lib/firestore/firestore.js.map +1 -0
  36. package/src/lib/firestore/index.d.ts +12 -0
  37. package/src/lib/firestore/index.js +16 -0
  38. package/src/lib/firestore/index.js.map +1 -0
  39. package/src/lib/firestore/iterator.d.ts +49 -0
  40. package/src/lib/firestore/iterator.js +91 -0
  41. package/src/lib/firestore/iterator.js.map +1 -0
  42. package/src/lib/firestore/reference.d.ts +13 -0
  43. package/src/lib/firestore/reference.js +3 -0
  44. package/src/lib/firestore/reference.js.map +1 -0
  45. package/src/lib/index.d.ts +1 -0
  46. package/src/lib/index.js +5 -0
  47. package/src/lib/index.js.map +1 -0
  48. package/src/test/firebase.context.d.ts +5 -0
  49. package/src/test/firebase.context.item.d.ts +41 -0
  50. package/src/test/firebase.context.item.js +75 -0
  51. package/src/test/firebase.context.item.js.map +1 -0
  52. package/src/test/firebase.context.js +23 -0
  53. package/src/test/firebase.context.js.map +1 -0
  54. package/src/test/firebase.d.ts +29 -0
  55. package/src/test/firebase.js +67 -0
  56. package/src/test/firebase.js.map +1 -0
  57. package/src/test/index.d.ts +3 -0
  58. package/src/test/index.js +7 -0
  59. package/src/test/index.js.map +1 -0
package/README.md ADDED
@@ -0,0 +1,15 @@
1
+ # firebase
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Running unit tests
6
+
7
+ Unit tests are run through the Docker container. This lets our tests access the emulator. Since all tests are run within the container, and the container is not configured to use service ports, it can be run at the same time as the demo.
8
+
9
+ Run `nx watch firebase` to execute the unit tests and watch for changes.
10
+
11
+ Run `nx test firebase` to execute the unit tests.
12
+
13
+ ### Firebase Related Unit Test Notes
14
+
15
+ https://firebase.google.com/docs/rules/unit-tests#rut-v2-common-methods
package/package.json ADDED
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "@dereekb/firebase",
3
+ "version": "0.0.1",
4
+ "main": "./src/index.js",
5
+ "typings": "./src/index.d.ts",
6
+ "dependencies": {
7
+ "rxjs": "^7.5.2",
8
+ "rxfire": "^6.0.3",
9
+ "@dereekb/rxjs": "0.0.1",
10
+ "@dereekb/util": "0.0.1",
11
+ "extra-set": "^2.2.11",
12
+ "ms": "^3.0.0-canary.1",
13
+ "firebase": "^9.6.4"
14
+ },
15
+ "peerDependencies": {}
16
+ }
package/src/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './lib';
2
+ export * from './test';
package/src/index.js ADDED
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ (0, tslib_1.__exportStar)(require("./lib"), exports);
5
+ (0, tslib_1.__exportStar)(require("./test"), exports);
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/firebase/src/index.ts"],"names":[],"mappings":";;;AAAA,qDAAsB;AACtB,sDAAuB"}
@@ -0,0 +1,23 @@
1
+ import { DocumentReference, DocumentSnapshot, UpdateData, WithFieldValue, WriteBatch } from "@firebase/firestore";
2
+ import { Observable } from "rxjs";
3
+ import { FirestoreDocumentDataAccessor, FirestoreDocumentDataAccessorFactory } from "./accessor";
4
+ /**
5
+ * FirestoreDocumentDataAccessor implementation for a batch.
6
+ */
7
+ export declare class WriteBatchFirestoreDocumentDataAccessor<T> implements FirestoreDocumentDataAccessor<T> {
8
+ readonly batch: WriteBatch;
9
+ readonly documentRef: DocumentReference<T>;
10
+ constructor(batch: WriteBatch, documentRef: DocumentReference<T>);
11
+ stream(): Observable<DocumentSnapshot<T>>;
12
+ get(): Promise<DocumentSnapshot<T>>;
13
+ delete(): Promise<void>;
14
+ set(data: WithFieldValue<T>): Promise<void>;
15
+ update(data: UpdateData<T>): Promise<void>;
16
+ }
17
+ /**
18
+ * Creates a new FirestoreDocumentDataAccessorFactory for a Batch.
19
+ *
20
+ * @param batch
21
+ * @returns
22
+ */
23
+ export declare function writeBatchAccessorFactory<T>(writeBatch: WriteBatch): FirestoreDocumentDataAccessorFactory<T>;
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.writeBatchAccessorFactory = exports.WriteBatchFirestoreDocumentDataAccessor = void 0;
4
+ const firestore_1 = require("@firebase/firestore");
5
+ const rxjs_1 = require("rxjs");
6
+ /**
7
+ * FirestoreDocumentDataAccessor implementation for a batch.
8
+ */
9
+ class WriteBatchFirestoreDocumentDataAccessor {
10
+ constructor(batch, documentRef) {
11
+ this.batch = batch;
12
+ this.documentRef = documentRef;
13
+ }
14
+ stream() {
15
+ return (0, rxjs_1.from)(this.get());
16
+ }
17
+ get() {
18
+ return (0, firestore_1.getDoc)(this.documentRef);
19
+ }
20
+ delete() {
21
+ this.batch.delete(this.documentRef);
22
+ return Promise.resolve();
23
+ }
24
+ set(data) {
25
+ this.batch.set(this.documentRef, data);
26
+ return Promise.resolve();
27
+ }
28
+ update(data) {
29
+ this.batch.update(this.documentRef, data);
30
+ return Promise.resolve();
31
+ }
32
+ }
33
+ exports.WriteBatchFirestoreDocumentDataAccessor = WriteBatchFirestoreDocumentDataAccessor;
34
+ /**
35
+ * Creates a new FirestoreDocumentDataAccessorFactory for a Batch.
36
+ *
37
+ * @param batch
38
+ * @returns
39
+ */
40
+ function writeBatchAccessorFactory(writeBatch) {
41
+ return {
42
+ accessorFor: (ref) => new WriteBatchFirestoreDocumentDataAccessor(writeBatch, ref)
43
+ };
44
+ }
45
+ exports.writeBatchAccessorFactory = writeBatchAccessorFactory;
46
+ //# sourceMappingURL=accessor.batch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accessor.batch.js","sourceRoot":"","sources":["../../../../../../packages/firebase/src/lib/firestore/accessor.batch.ts"],"names":[],"mappings":";;;AAAA,mDAA0H;AAC1H,+BAAwC;AAGxC;;GAEG;AACH,MAAa,uCAAuC;IAElD,YAAqB,KAAiB,EAAW,WAAiC;QAA7D,UAAK,GAAL,KAAK,CAAY;QAAW,gBAAW,GAAX,WAAW,CAAsB;IAAI,CAAC;IAEvF,MAAM;QACJ,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,GAAG;QACD,OAAO,IAAA,kBAAM,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,IAAuB;QACzB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACvC,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,IAAmB;QACxB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CAEF;AA3BD,0FA2BC;AAED;;;;;GAKG;AACH,SAAgB,yBAAyB,CAAI,UAAsB;IACjE,OAAO;QACL,WAAW,EAAE,CAAC,GAAyB,EAAE,EAAE,CAAC,IAAI,uCAAuC,CAAC,UAAU,EAAE,GAAG,CAAC;KACzG,CAAC;AACJ,CAAC;AAJD,8DAIC"}
@@ -0,0 +1,62 @@
1
+ import { Maybe } from "@dereekb/util";
2
+ import { DocumentReference, DocumentSnapshot, UpdateData, WithFieldValue } from "@firebase/firestore";
3
+ import { SnapshotOptions } from "firebase/firestore";
4
+ import { Observable, OperatorFunction } from 'rxjs';
5
+ import { FirestoreDocumentReference } from './reference';
6
+ /**
7
+ * Firestore database accessor instance used to retrieve and make changes to items in the database.
8
+ */
9
+ export interface FirestoreDocumentDataAccessor<T> extends FirestoreDocumentReference<T> {
10
+ /**
11
+ * Returns a database stream of DocumentSnapshots.
12
+ */
13
+ stream(): Observable<DocumentSnapshot<T>>;
14
+ /**
15
+ * Returns the current snapshot.
16
+ */
17
+ get(): Promise<DocumentSnapshot<T>>;
18
+ /**
19
+ * Deletes the document
20
+ */
21
+ delete(): Promise<void>;
22
+ /**
23
+ * Sets the data in the database.
24
+ *
25
+ * @param data
26
+ */
27
+ set(data: WithFieldValue<T>): Promise<void>;
28
+ /**
29
+ * Updates the data in the database.
30
+ *
31
+ * @param data
32
+ */
33
+ update(data: UpdateData<T>): Promise<void>;
34
+ }
35
+ /**
36
+ * Contextual interface used for making a FirestoreDocumentModifier for a specific document.
37
+ */
38
+ export interface FirestoreDocumentDataAccessorFactory<T> {
39
+ /**
40
+ * Creates a new FirestoreDocumentDataAccessor for the input ref.
41
+ *
42
+ * @param ref
43
+ */
44
+ accessorFor(ref: DocumentReference<T>): FirestoreDocumentDataAccessor<T>;
45
+ }
46
+ /**
47
+ * Maps data from the given snapshot stream.
48
+ *
49
+ * Maybe values are filtered from the stream until data is provided.
50
+ *
51
+ * @param stream
52
+ * @param options
53
+ * @returns
54
+ */
55
+ export declare function dataFromSnapshotStream<T>(stream: Observable<DocumentSnapshot<T>>, options?: SnapshotOptions): Observable<T>;
56
+ /**
57
+ * OperatorFunction to map data from the snapshot.
58
+ *
59
+ * @param options
60
+ * @returns
61
+ */
62
+ export declare function mapDataFromSnapshot<T>(options?: SnapshotOptions): OperatorFunction<DocumentSnapshot<T>, Maybe<T>>;
@@ -0,0 +1,22 @@
1
+ import { DocumentReference, DocumentSnapshot, UpdateData, WithFieldValue } from "@firebase/firestore";
2
+ import { Observable } from "rxjs";
3
+ import { FirestoreDocumentDataAccessor, FirestoreDocumentDataAccessorFactory } from "./accessor";
4
+ /**
5
+ * FirestoreDocumentDataAccessor implementation for a batch.
6
+ */
7
+ export declare class DefaultFirestoreDocumentDataAccessor<T> implements FirestoreDocumentDataAccessor<T> {
8
+ readonly documentRef: DocumentReference<T>;
9
+ constructor(documentRef: DocumentReference<T>);
10
+ stream(): Observable<DocumentSnapshot<T>>;
11
+ get(): Promise<DocumentSnapshot<T>>;
12
+ delete(): Promise<void>;
13
+ set(data: WithFieldValue<T>): Promise<void>;
14
+ update(data: UpdateData<T>): Promise<void>;
15
+ }
16
+ /**
17
+ * Creates a new FirestoreDocumentDataAccessorFactory for a Batch.
18
+ *
19
+ * @param batch
20
+ * @returns
21
+ */
22
+ export declare function defaultFirestoreAccessorFactory<T>(): FirestoreDocumentDataAccessorFactory<T>;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultFirestoreAccessorFactory = exports.DefaultFirestoreDocumentDataAccessor = void 0;
4
+ const firestore_1 = require("@firebase/firestore");
5
+ const firestore_2 = require("rxfire/firestore");
6
+ /**
7
+ * FirestoreDocumentDataAccessor implementation for a batch.
8
+ */
9
+ class DefaultFirestoreDocumentDataAccessor {
10
+ constructor(documentRef) {
11
+ this.documentRef = documentRef;
12
+ }
13
+ stream() {
14
+ return (0, firestore_2.fromRef)(this.documentRef);
15
+ }
16
+ get() {
17
+ return (0, firestore_1.getDoc)(this.documentRef);
18
+ }
19
+ delete() {
20
+ return (0, firestore_1.deleteDoc)(this.documentRef);
21
+ }
22
+ set(data) {
23
+ return (0, firestore_1.setDoc)(this.documentRef, data);
24
+ }
25
+ update(data) {
26
+ return (0, firestore_1.updateDoc)(this.documentRef, data);
27
+ }
28
+ }
29
+ exports.DefaultFirestoreDocumentDataAccessor = DefaultFirestoreDocumentDataAccessor;
30
+ /**
31
+ * Creates a new FirestoreDocumentDataAccessorFactory for a Batch.
32
+ *
33
+ * @param batch
34
+ * @returns
35
+ */
36
+ function defaultFirestoreAccessorFactory() {
37
+ return {
38
+ accessorFor: (ref) => new DefaultFirestoreDocumentDataAccessor(ref)
39
+ };
40
+ }
41
+ exports.defaultFirestoreAccessorFactory = defaultFirestoreAccessorFactory;
42
+ //# sourceMappingURL=accessor.default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accessor.default.js","sourceRoot":"","sources":["../../../../../../packages/firebase/src/lib/firestore/accessor.default.ts"],"names":[],"mappings":";;;AAAA,mDAA4I;AAC5I,gDAA2C;AAI3C;;GAEG;AACH,MAAa,oCAAoC;IAE/C,YAAqB,WAAiC;QAAjC,gBAAW,GAAX,WAAW,CAAsB;IAAI,CAAC;IAE3D,MAAM;QACJ,OAAO,IAAA,mBAAO,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACnC,CAAC;IAED,GAAG;QACD,OAAO,IAAA,kBAAM,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAClC,CAAC;IAED,MAAM;QACJ,OAAO,IAAA,qBAAS,EAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACrC,CAAC;IAED,GAAG,CAAC,IAAuB;QACzB,OAAO,IAAA,kBAAM,EAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,CAAC,IAAmB;QACxB,OAAO,IAAA,qBAAS,EAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAC3C,CAAC;CAEF;AAxBD,oFAwBC;AAED;;;;;GAKG;AACH,SAAgB,+BAA+B;IAC7C,OAAO;QACL,WAAW,EAAE,CAAC,GAAyB,EAAE,EAAE,CAAC,IAAI,oCAAoC,CAAC,GAAG,CAAC;KAC1F,CAAC;AACJ,CAAC;AAJD,0EAIC"}
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mapDataFromSnapshot = exports.dataFromSnapshotStream = void 0;
4
+ const rxjs_1 = require("@dereekb/rxjs");
5
+ const rxjs_2 = require("rxjs");
6
+ /**
7
+ * Maps data from the given snapshot stream.
8
+ *
9
+ * Maybe values are filtered from the stream until data is provided.
10
+ *
11
+ * @param stream
12
+ * @param options
13
+ * @returns
14
+ */
15
+ function dataFromSnapshotStream(stream, options) {
16
+ return stream.pipe(mapDataFromSnapshot(options), (0, rxjs_1.filterMaybe)());
17
+ }
18
+ exports.dataFromSnapshotStream = dataFromSnapshotStream;
19
+ /**
20
+ * OperatorFunction to map data from the snapshot.
21
+ *
22
+ * @param options
23
+ * @returns
24
+ */
25
+ function mapDataFromSnapshot(options) {
26
+ return (0, rxjs_2.map)((x) => x.data(options));
27
+ }
28
+ exports.mapDataFromSnapshot = mapDataFromSnapshot;
29
+ //# sourceMappingURL=accessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accessor.js","sourceRoot":"","sources":["../../../../../../packages/firebase/src/lib/firestore/accessor.ts"],"names":[],"mappings":";;;AAAA,wCAA4C;AAI5C,+BAAyD;AA+CzD;;;;;;;;GAQG;AACH,SAAgB,sBAAsB,CAAI,MAAuC,EAAE,OAAyB;IAC1G,OAAO,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,IAAA,kBAAW,GAAE,CAAC,CAAC;AAClE,CAAC;AAFD,wDAEC;AAED;;;;;GAKG;AACH,SAAgB,mBAAmB,CAAI,OAAyB;IAC9D,OAAO,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACrC,CAAC;AAFD,kDAEC"}
@@ -0,0 +1,23 @@
1
+ import { DocumentReference, DocumentSnapshot, Transaction, UpdateData, WithFieldValue } from "@firebase/firestore";
2
+ import { Observable } from "rxjs";
3
+ import { FirestoreDocumentDataAccessor, FirestoreDocumentDataAccessorFactory } from "./accessor";
4
+ /**
5
+ * FirestoreDocumentDataAccessor implementation for a transaction.
6
+ */
7
+ export declare class TransactionFirestoreDocumentDataAccessor<T> implements FirestoreDocumentDataAccessor<T> {
8
+ readonly transaction: Transaction;
9
+ readonly documentRef: DocumentReference<T>;
10
+ constructor(transaction: Transaction, documentRef: DocumentReference<T>);
11
+ stream(): Observable<DocumentSnapshot<T>>;
12
+ get(): Promise<DocumentSnapshot<T>>;
13
+ delete(): Promise<void>;
14
+ set(data: WithFieldValue<T>): Promise<void>;
15
+ update(data: UpdateData<T>): Promise<void>;
16
+ }
17
+ /**
18
+ * Creates a new FirestoreDocumentDataAccessorFactory for a Transaction.
19
+ *
20
+ * @param transaction
21
+ * @returns
22
+ */
23
+ export declare function transactionAccessorFactory<T>(transaction: Transaction): FirestoreDocumentDataAccessorFactory<T>;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transactionAccessorFactory = exports.TransactionFirestoreDocumentDataAccessor = void 0;
4
+ const rxjs_1 = require("rxjs");
5
+ /**
6
+ * FirestoreDocumentDataAccessor implementation for a transaction.
7
+ */
8
+ class TransactionFirestoreDocumentDataAccessor {
9
+ constructor(transaction, documentRef) {
10
+ this.transaction = transaction;
11
+ this.documentRef = documentRef;
12
+ }
13
+ stream() {
14
+ return (0, rxjs_1.from)(this.get());
15
+ }
16
+ get() {
17
+ return this.transaction.get(this.documentRef);
18
+ }
19
+ delete() {
20
+ this.transaction.delete(this.documentRef);
21
+ return Promise.resolve();
22
+ }
23
+ set(data) {
24
+ this.transaction.set(this.documentRef, data);
25
+ return Promise.resolve();
26
+ }
27
+ update(data) {
28
+ this.transaction.update(this.documentRef, data);
29
+ return Promise.resolve();
30
+ }
31
+ }
32
+ exports.TransactionFirestoreDocumentDataAccessor = TransactionFirestoreDocumentDataAccessor;
33
+ /**
34
+ * Creates a new FirestoreDocumentDataAccessorFactory for a Transaction.
35
+ *
36
+ * @param transaction
37
+ * @returns
38
+ */
39
+ function transactionAccessorFactory(transaction) {
40
+ return {
41
+ accessorFor: (ref) => new TransactionFirestoreDocumentDataAccessor(transaction, ref)
42
+ };
43
+ }
44
+ exports.transactionAccessorFactory = transactionAccessorFactory;
45
+ //# sourceMappingURL=accessor.transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accessor.transaction.js","sourceRoot":"","sources":["../../../../../../packages/firebase/src/lib/firestore/accessor.transaction.ts"],"names":[],"mappings":";;;AACA,+BAAwC;AAGxC;;GAEG;AACH,MAAa,wCAAwC;IAEnD,YAAqB,WAAwB,EAAW,WAAiC;QAApE,gBAAW,GAAX,WAAW,CAAa;QAAW,gBAAW,GAAX,WAAW,CAAsB;IAAI,CAAC;IAE9F,MAAM;QACJ,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;IAC1B,CAAC;IAED,GAAG;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAChD,CAAC;IAED,MAAM;QACJ,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,IAAuB;QACzB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAC7C,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,CAAC,IAAmB;QACxB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CAEF;AA3BD,4FA2BC;AAED;;;;;GAKG;AACH,SAAgB,0BAA0B,CAAI,WAAwB;IACpE,OAAO;QACL,WAAW,EAAE,CAAC,GAAyB,EAAE,EAAE,CAAC,IAAI,wCAAwC,CAAC,WAAW,EAAE,GAAG,CAAC;KAC3G,CAAC;AACJ,CAAC;AAJD,gEAIC"}
@@ -0,0 +1,9 @@
1
+ import { WriteBatch } from "@firebase/firestore";
2
+ import { FirestoreDocumentContext, FirestoreDocumentContextType } from "./context";
3
+ export declare class WriteBatchFirestoreDocumentContext<T> implements FirestoreDocumentContext<T> {
4
+ readonly batch: WriteBatch;
5
+ readonly contextType = FirestoreDocumentContextType.TRANSACTION;
6
+ readonly accessorFactory: import("./accessor").FirestoreDocumentDataAccessorFactory<T>;
7
+ constructor(batch: WriteBatch);
8
+ }
9
+ export declare function writeBatchDocumentContext<T>(batch: WriteBatch): WriteBatchFirestoreDocumentContext<T>;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.writeBatchDocumentContext = exports.WriteBatchFirestoreDocumentContext = void 0;
4
+ const accessor_batch_1 = require("./accessor.batch");
5
+ const context_1 = require("./context");
6
+ // MARK: Batch
7
+ class WriteBatchFirestoreDocumentContext {
8
+ constructor(batch) {
9
+ this.batch = batch;
10
+ this.contextType = context_1.FirestoreDocumentContextType.TRANSACTION;
11
+ this.accessorFactory = (0, accessor_batch_1.writeBatchAccessorFactory)(this.batch);
12
+ }
13
+ }
14
+ exports.WriteBatchFirestoreDocumentContext = WriteBatchFirestoreDocumentContext;
15
+ function writeBatchDocumentContext(batch) {
16
+ return new WriteBatchFirestoreDocumentContext(batch);
17
+ }
18
+ exports.writeBatchDocumentContext = writeBatchDocumentContext;
19
+ //# sourceMappingURL=context.batch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.batch.js","sourceRoot":"","sources":["../../../../../../packages/firebase/src/lib/firestore/context.batch.ts"],"names":[],"mappings":";;;AACA,qDAA6D;AAC7D,uCAAmF;AAEnF,cAAc;AACd,MAAa,kCAAkC;IAK7C,YAAqB,KAAiB;QAAjB,UAAK,GAAL,KAAK,CAAY;QAH7B,gBAAW,GAAG,sCAA4B,CAAC,WAAW,CAAC;QACvD,oBAAe,GAAG,IAAA,0CAAyB,EAAI,IAAI,CAAC,KAAK,CAAC,CAAC;IAE1B,CAAC;CAE5C;AAPD,gFAOC;AAED,SAAgB,yBAAyB,CAAI,KAAiB;IAC5D,OAAO,IAAI,kCAAkC,CAAI,KAAK,CAAC,CAAC;AAC1D,CAAC;AAFD,8DAEC"}
@@ -0,0 +1,24 @@
1
+ import { FirestoreDocumentDataAccessorFactory } from "./accessor";
2
+ /**
3
+ * A specific document context type.
4
+ *
5
+ * Used by a FirestoreDocumentContext to communicate which kind of context it was created in.
6
+ */
7
+ export declare enum FirestoreDocumentContextType {
8
+ NONE = "none",
9
+ TRANSACTION = "transaction",
10
+ BATCH = "batch"
11
+ }
12
+ /**
13
+ * Firebase database context used for accessing and modifying documents in a specific context, such as a transaction.
14
+ */
15
+ export interface FirestoreDocumentContext<T> {
16
+ /**
17
+ * Context type
18
+ */
19
+ readonly contextType: FirestoreDocumentContextType;
20
+ /**
21
+ * Database accessor
22
+ */
23
+ readonly accessorFactory: FirestoreDocumentDataAccessorFactory<T>;
24
+ }
@@ -0,0 +1,2 @@
1
+ import { FirestoreDocumentContext } from "./context";
2
+ export declare function defaultFirestoreDocumentContext<T>(): FirestoreDocumentContext<T>;
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultFirestoreDocumentContext = void 0;
4
+ const accessor_default_1 = require("./accessor.default");
5
+ const context_1 = require("./context");
6
+ function defaultFirestoreDocumentContext() {
7
+ return {
8
+ contextType: context_1.FirestoreDocumentContextType.NONE,
9
+ accessorFactory: (0, accessor_default_1.defaultFirestoreAccessorFactory)()
10
+ };
11
+ }
12
+ exports.defaultFirestoreDocumentContext = defaultFirestoreDocumentContext;
13
+ //# sourceMappingURL=context.default.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.default.js","sourceRoot":"","sources":["../../../../../../packages/firebase/src/lib/firestore/context.default.ts"],"names":[],"mappings":";;;AAAA,yDAAqE;AACrE,uCAAmF;AAEnF,SAAgB,+BAA+B;IAC7C,OAAO;QACL,WAAW,EAAE,sCAA4B,CAAC,IAAI;QAC9C,eAAe,EAAE,IAAA,kDAA+B,GAAK;KACtD,CAAA;AACH,CAAC;AALD,0EAKC"}
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FirestoreDocumentContextType = void 0;
4
+ /**
5
+ * A specific document context type.
6
+ *
7
+ * Used by a FirestoreDocumentContext to communicate which kind of context it was created in.
8
+ */
9
+ var FirestoreDocumentContextType;
10
+ (function (FirestoreDocumentContextType) {
11
+ FirestoreDocumentContextType["NONE"] = "none";
12
+ FirestoreDocumentContextType["TRANSACTION"] = "transaction";
13
+ FirestoreDocumentContextType["BATCH"] = "batch";
14
+ })(FirestoreDocumentContextType = exports.FirestoreDocumentContextType || (exports.FirestoreDocumentContextType = {}));
15
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../../../packages/firebase/src/lib/firestore/context.ts"],"names":[],"mappings":";;;AAEA;;;;GAIG;AACH,IAAY,4BAIX;AAJD,WAAY,4BAA4B;IACtC,6CAAa,CAAA;IACb,2DAA2B,CAAA;IAC3B,+CAAe,CAAA;AACjB,CAAC,EAJW,4BAA4B,GAA5B,oCAA4B,KAA5B,oCAA4B,QAIvC"}
@@ -0,0 +1,9 @@
1
+ import { Transaction } from "@firebase/firestore";
2
+ import { FirestoreDocumentContext, FirestoreDocumentContextType } from "./context";
3
+ export declare class TransactionFirestoreDocumentContext<T> implements FirestoreDocumentContext<T> {
4
+ readonly transaction: Transaction;
5
+ readonly contextType = FirestoreDocumentContextType.TRANSACTION;
6
+ readonly accessorFactory: import("./accessor").FirestoreDocumentDataAccessorFactory<T>;
7
+ constructor(transaction: Transaction);
8
+ }
9
+ export declare function transactionDocumentContext<T>(transaction: Transaction): TransactionFirestoreDocumentContext<T>;
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transactionDocumentContext = exports.TransactionFirestoreDocumentContext = void 0;
4
+ const accessor_transaction_1 = require("./accessor.transaction");
5
+ const context_1 = require("./context");
6
+ // MARK: Transaction
7
+ class TransactionFirestoreDocumentContext {
8
+ constructor(transaction) {
9
+ this.transaction = transaction;
10
+ this.contextType = context_1.FirestoreDocumentContextType.TRANSACTION;
11
+ this.accessorFactory = (0, accessor_transaction_1.transactionAccessorFactory)(this.transaction);
12
+ }
13
+ }
14
+ exports.TransactionFirestoreDocumentContext = TransactionFirestoreDocumentContext;
15
+ function transactionDocumentContext(transaction) {
16
+ return new TransactionFirestoreDocumentContext(transaction);
17
+ }
18
+ exports.transactionDocumentContext = transactionDocumentContext;
19
+ //# sourceMappingURL=context.transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.transaction.js","sourceRoot":"","sources":["../../../../../../packages/firebase/src/lib/firestore/context.transaction.ts"],"names":[],"mappings":";;;AACA,iEAAoE;AACpE,uCAAmF;AAEnF,oBAAoB;AACpB,MAAa,mCAAmC;IAK9C,YAAqB,WAAwB;QAAxB,gBAAW,GAAX,WAAW,CAAa;QAHpC,gBAAW,GAAG,sCAA4B,CAAC,WAAW,CAAC;QACvD,oBAAe,GAAG,IAAA,iDAA0B,EAAI,IAAI,CAAC,WAAW,CAAC,CAAC;IAE1B,CAAC;CAEnD;AAPD,kFAOC;AAED,SAAgB,0BAA0B,CAAI,WAAwB;IACpE,OAAO,IAAI,mCAAmC,CAAI,WAAW,CAAC,CAAC;AACjE,CAAC;AAFD,gEAEC"}
@@ -0,0 +1,69 @@
1
+ import { Observable } from 'rxjs';
2
+ import { DocumentReference, CollectionReference } from '@firebase/firestore';
3
+ import { FirestoreDocumentDataAccessor, FirestoreDocumentDataAccessorFactory } from './accessor';
4
+ import { FirestoreCollectionReference, FirestoreDocumentReference } from './reference';
5
+ import { FirestoreDocumentContext } from './context';
6
+ export interface FirestoreDocument<T> extends FirestoreDocumentReference<T> {
7
+ }
8
+ /**
9
+ * Abstract FirestoreDocument implementation that extends a FirestoreDocumentDataAccessor.
10
+ */
11
+ export declare abstract class AbstractFirestoreDocument<T, A extends FirestoreDocumentDataAccessor<T> = FirestoreDocumentDataAccessor<T>> {
12
+ readonly accessor: A;
13
+ readonly stream$: Observable<import("@firebase/firestore").DocumentSnapshot<T>>;
14
+ readonly data$: Observable<T>;
15
+ constructor(accessor: A);
16
+ get documentRef(): DocumentReference<T>;
17
+ }
18
+ export interface FirestoreDocumentAccessor<T, D extends FirestoreDocument<T>> {
19
+ readonly databaseContext: FirestoreDocumentContext<T>;
20
+ /**
21
+ * Creates a new document.
22
+ */
23
+ newDocument(): D;
24
+ /**
25
+ * Loads a document from the datastore.
26
+ *
27
+ * @param ref
28
+ */
29
+ loadDocument(ref: DocumentReference<T>): D;
30
+ /**
31
+ * Loads a document from an existing FirestoreDocument
32
+ *
33
+ * @param document
34
+ */
35
+ loadDocumentFrom(document: FirestoreDocument<T>): D;
36
+ }
37
+ /**
38
+ * Factory type used for creating a FirestoreDocumentAccessor.
39
+ */
40
+ export interface FirestoreDocumentAccessorFactory<T, D extends FirestoreDocument<T>> {
41
+ /**
42
+ * Creates a new FirestoreDocumentFactory using the given context.
43
+ *
44
+ * @param context Optional context to retrieve items from.
45
+ */
46
+ documentAccessor(context?: FirestoreDocumentContext<T>): FirestoreDocumentAccessor<T, D>;
47
+ }
48
+ /**
49
+ * Used to generate a FirestoreDocument from an input FirestoreDocumentDataAccessor instance.
50
+ */
51
+ export declare type FirestoreDocumentFactoryFunction<T, D extends FirestoreDocument<T>> = (accessor: FirestoreDocumentDataAccessor<T>) => D;
52
+ /**
53
+ * FirestoreDocumentAccessorInstance configuration.
54
+ */
55
+ export interface FirestoreDocumentAccessorInstanceConfig<T, D extends FirestoreDocument<T>> extends FirestoreCollectionReference<T> {
56
+ readonly makeDocument: FirestoreDocumentFactoryFunction<T, D>;
57
+ }
58
+ export declare class FirestoreDocumentAccessorInstance<T, D extends FirestoreDocument<T>> implements FirestoreDocumentAccessor<T, D> {
59
+ readonly config: FirestoreDocumentAccessorInstanceConfig<T, D>;
60
+ readonly databaseContext: FirestoreDocumentContext<T>;
61
+ constructor(config: FirestoreDocumentAccessorInstanceConfig<T, D>, databaseContext?: FirestoreDocumentContext<T>);
62
+ get collection(): CollectionReference<T>;
63
+ get accessorFactory(): FirestoreDocumentDataAccessorFactory<T>;
64
+ newDocument(): D;
65
+ loadDocument(ref: DocumentReference<T>): D;
66
+ loadDocumentFrom(document: FirestoreDocument<T>): D;
67
+ }
68
+ export declare type FirestoreDocumentAccessorFactoryFunction<T, D extends FirestoreDocument<T>> = (context?: FirestoreDocumentContext<T>) => FirestoreDocumentAccessor<T, D>;
69
+ export declare function firestoreDocumentAccessorFactory<T, D extends FirestoreDocument<T>>(config: FirestoreDocumentAccessorInstanceConfig<T, D>): FirestoreDocumentAccessorFactoryFunction<T, D>;
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.firestoreDocumentAccessorFactory = exports.FirestoreDocumentAccessorInstance = exports.AbstractFirestoreDocument = void 0;
4
+ const firestore_1 = require("@firebase/firestore");
5
+ const accessor_1 = require("./accessor");
6
+ const context_default_1 = require("./context.default");
7
+ /**
8
+ * Abstract FirestoreDocument implementation that extends a FirestoreDocumentDataAccessor.
9
+ */
10
+ class AbstractFirestoreDocument {
11
+ constructor(accessor) {
12
+ this.accessor = accessor;
13
+ this.stream$ = this.accessor.stream();
14
+ this.data$ = (0, accessor_1.dataFromSnapshotStream)(this.stream$);
15
+ }
16
+ get documentRef() {
17
+ return this.accessor.documentRef;
18
+ }
19
+ }
20
+ exports.AbstractFirestoreDocument = AbstractFirestoreDocument;
21
+ class FirestoreDocumentAccessorInstance {
22
+ constructor(config, databaseContext = (0, context_default_1.defaultFirestoreDocumentContext)()) {
23
+ this.config = config;
24
+ this.databaseContext = databaseContext;
25
+ }
26
+ get collection() {
27
+ return this.config.collection;
28
+ }
29
+ get accessorFactory() {
30
+ return this.databaseContext.accessorFactory;
31
+ }
32
+ newDocument() {
33
+ const newDocRef = (0, firestore_1.doc)(this.collection);
34
+ return this.loadDocument(newDocRef);
35
+ }
36
+ loadDocument(ref) {
37
+ const accessor = this.accessorFactory.accessorFor(ref);
38
+ return this.config.makeDocument(accessor);
39
+ }
40
+ loadDocumentFrom(document) {
41
+ return this.loadDocument(document.documentRef);
42
+ }
43
+ }
44
+ exports.FirestoreDocumentAccessorInstance = FirestoreDocumentAccessorInstance;
45
+ function firestoreDocumentAccessorFactory(config) {
46
+ return (context) => new FirestoreDocumentAccessorInstance(config, context);
47
+ }
48
+ exports.firestoreDocumentAccessorFactory = firestoreDocumentAccessorFactory;
49
+ //# sourceMappingURL=document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.js","sourceRoot":"","sources":["../../../../../../packages/firebase/src/lib/firestore/document.ts"],"names":[],"mappings":";;;AACA,mDAAkF;AAClF,yCAAyH;AAGzH,uDAAoE;AAIpE;;GAEG;AACH,MAAsB,yBAAyB;IAK7C,YAAqB,QAAW;QAAX,aAAQ,GAAR,QAAQ,CAAG;QAHvB,YAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACjC,UAAK,GAAkB,IAAA,iCAAsB,EAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAEjC,CAAC;IAErC,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IACnC,CAAC;CAEF;AAXD,8DAWC;AAsDD,MAAa,iCAAiC;IAE5C,YACW,MAAqD,EACrD,kBAA+C,IAAA,iDAA+B,GAAE;QADhF,WAAM,GAAN,MAAM,CAA+C;QACrD,oBAAe,GAAf,eAAe,CAAiE;IACvF,CAAC;IAEL,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;IAChC,CAAC;IAED,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC;IAC9C,CAAC;IAED,WAAW;QACT,MAAM,SAAS,GAAG,IAAA,eAAG,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvC,OAAO,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,YAAY,CAAC,GAAyB;QACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACvD,OAAO,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC5C,CAAC;IAED,gBAAgB,CAAC,QAA8B;QAC7C,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACjD,CAAC;CAEF;AA7BD,8EA6BC;AAID,SAAgB,gCAAgC,CAAoC,MAAqD;IACvI,OAAO,CAAC,OAAqC,EAAE,EAAE,CAAC,IAAI,iCAAiC,CAAO,MAAM,EAAE,OAAO,CAAC,CAAC;AACjH,CAAC;AAFD,4EAEC"}