@dereekb/firebase 5.3.0 → 6.0.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.
Files changed (104) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/package.json +5 -5
  3. package/src/lib/client/firestore/driver.accessor.js +1 -0
  4. package/src/lib/client/firestore/driver.accessor.js.map +1 -1
  5. package/src/lib/client/firestore/driver.query.js +5 -1
  6. package/src/lib/client/firestore/driver.query.js.map +1 -1
  7. package/src/lib/client/function/function.callable.d.ts +13 -0
  8. package/src/lib/client/function/function.callable.js +22 -0
  9. package/src/lib/client/function/function.callable.js.map +1 -0
  10. package/src/lib/client/function/index.d.ts +2 -0
  11. package/src/lib/client/function/index.js +2 -0
  12. package/src/lib/client/function/index.js.map +1 -1
  13. package/src/lib/client/function/model.function.factory.d.ts +36 -0
  14. package/src/lib/client/function/model.function.factory.js +37 -0
  15. package/src/lib/client/function/model.function.factory.js.map +1 -0
  16. package/src/lib/common/auth/auth.context.d.ts +33 -0
  17. package/src/lib/common/auth/auth.context.js +3 -0
  18. package/src/lib/common/auth/auth.context.js.map +1 -0
  19. package/src/lib/common/auth/auth.d.ts +9 -0
  20. package/src/lib/common/auth/index.d.ts +1 -0
  21. package/src/lib/common/auth/index.js +1 -0
  22. package/src/lib/common/auth/index.js.map +1 -1
  23. package/src/lib/common/firestore/accessor/document.d.ts +24 -8
  24. package/src/lib/common/firestore/accessor/document.js +17 -9
  25. package/src/lib/common/firestore/accessor/document.js.map +1 -1
  26. package/src/lib/common/firestore/collection/collection.d.ts +60 -0
  27. package/src/lib/common/firestore/collection/collection.js +14 -1
  28. package/src/lib/common/firestore/collection/collection.js.map +1 -1
  29. package/src/lib/common/firestore/driver/accessor.d.ts +2 -0
  30. package/src/lib/common/firestore/driver/query.d.ts +4 -2
  31. package/src/lib/common/firestore/driver/query.handler.d.ts +1 -1
  32. package/src/lib/common/firestore/driver/query.handler.js +3 -2
  33. package/src/lib/common/firestore/driver/query.handler.js.map +1 -1
  34. package/src/lib/common/firestore/query/constraint.d.ts +21 -3
  35. package/src/lib/common/firestore/query/constraint.js +20 -2
  36. package/src/lib/common/firestore/query/constraint.js.map +1 -1
  37. package/src/lib/common/firestore/query/constraint.template.d.ts +16 -0
  38. package/src/lib/common/firestore/query/constraint.template.js +27 -0
  39. package/src/lib/common/firestore/query/constraint.template.js.map +1 -0
  40. package/src/lib/common/firestore/query/index.d.ts +1 -0
  41. package/src/lib/common/firestore/query/index.js +1 -0
  42. package/src/lib/common/firestore/query/index.js.map +1 -1
  43. package/src/lib/common/firestore/reference.d.ts +7 -1
  44. package/src/lib/common/firestore/types.d.ts +8 -5
  45. package/src/lib/common/firestore/types.js.map +1 -1
  46. package/src/lib/common/index.d.ts +1 -0
  47. package/src/lib/common/index.js +1 -0
  48. package/src/lib/common/index.js.map +1 -1
  49. package/src/lib/common/model/context.d.ts +16 -0
  50. package/src/lib/common/model/context.js +3 -0
  51. package/src/lib/common/model/context.js.map +1 -0
  52. package/src/lib/common/model/function.d.ts +15 -0
  53. package/src/lib/common/model/function.js +12 -0
  54. package/src/lib/common/model/function.js.map +1 -0
  55. package/src/lib/common/model/index.d.ts +5 -0
  56. package/src/lib/common/model/index.js +9 -0
  57. package/src/lib/common/model/index.js.map +1 -0
  58. package/src/lib/common/model/model/index.d.ts +1 -0
  59. package/src/lib/common/model/model/index.js +5 -0
  60. package/src/lib/common/model/model/index.js.map +1 -0
  61. package/src/lib/common/model/model/model.loader.d.ts +30 -0
  62. package/src/lib/common/model/model/model.loader.js +21 -0
  63. package/src/lib/common/model/model/model.loader.js.map +1 -0
  64. package/src/lib/common/model/model.service.d.ts +56 -0
  65. package/src/lib/common/model/model.service.js +111 -0
  66. package/src/lib/common/model/model.service.js.map +1 -0
  67. package/src/lib/common/model/permission/index.d.ts +4 -0
  68. package/src/lib/common/model/permission/index.js +8 -0
  69. package/src/lib/common/model/permission/index.js.map +1 -0
  70. package/src/lib/common/model/permission/permission.context.d.ts +9 -0
  71. package/src/lib/common/model/permission/permission.context.js +3 -0
  72. package/src/lib/common/model/permission/permission.context.js.map +1 -0
  73. package/src/lib/common/model/permission/permission.d.ts +11 -0
  74. package/src/lib/common/model/permission/permission.js +3 -0
  75. package/src/lib/common/model/permission/permission.js.map +1 -0
  76. package/src/lib/common/model/permission/permission.service.d.ts +24 -0
  77. package/src/lib/common/model/permission/permission.service.js +48 -0
  78. package/src/lib/common/model/permission/permission.service.js.map +1 -0
  79. package/src/lib/common/model/permission/permission.service.role.d.ts +40 -0
  80. package/src/lib/common/model/permission/permission.service.role.js +70 -0
  81. package/src/lib/common/model/permission/permission.service.role.js.map +1 -0
  82. package/test/CHANGELOG.md +19 -0
  83. package/test/package.json +7 -7
  84. package/test/src/lib/common/firestore.d.ts +3 -3
  85. package/test/src/lib/common/firestore.js +2 -2
  86. package/test/src/lib/common/firestore.mock.item.d.ts +43 -16
  87. package/test/src/lib/common/firestore.mock.item.fixture.d.ts +3 -1
  88. package/test/src/lib/common/firestore.mock.item.fixture.js +12 -6
  89. package/test/src/lib/common/firestore.mock.item.fixture.js.map +1 -1
  90. package/test/src/lib/common/firestore.mock.item.js +85 -27
  91. package/test/src/lib/common/firestore.mock.item.js.map +1 -1
  92. package/test/src/lib/common/firestore.mock.item.query.d.ts +20 -1
  93. package/test/src/lib/common/firestore.mock.item.query.js +22 -1
  94. package/test/src/lib/common/firestore.mock.item.query.js.map +1 -1
  95. package/test/src/lib/common/firestore.mock.item.service.d.ts +40 -0
  96. package/test/src/lib/common/firestore.mock.item.service.js +62 -0
  97. package/test/src/lib/common/firestore.mock.item.service.js.map +1 -0
  98. package/test/src/lib/common/index.d.ts +1 -0
  99. package/test/src/lib/common/index.js +1 -0
  100. package/test/src/lib/common/index.js.map +1 -1
  101. package/test/src/lib/common/test.driver.accessor.js +77 -24
  102. package/test/src/lib/common/test.driver.accessor.js.map +1 -1
  103. package/test/src/lib/common/test.driver.query.js +138 -75
  104. package/test/src/lib/common/test.driver.query.js.map +1 -1
@@ -8,11 +8,13 @@ export declare type FirestoreAccessorDriverCollectionGroupFunction = <T = Docume
8
8
  export declare type FirestoreAccessorDriverCollectionRefFunction = <T = DocumentData>(firestore: Firestore, path: string, ...pathSegments: string[]) => CollectionReference<T>;
9
9
  export declare type FirestoreAccessorDriverSubcollectionRefFunction = <T = DocumentData>(document: DocumentReference, path: string, ...pathSegments: string[]) => CollectionReference<T>;
10
10
  export declare type FirestoreAccessorDriverDocumentRefFunction = <T = DocumentData>(collection: CollectionReference<T>, path?: string, ...pathSegments: string[]) => DocumentReference<T>;
11
+ export declare type FirestoreAccessorDriverFullPathDocumentRefFunction = <T = DocumentData>(firestore: Firestore, fullPath: string) => DocumentReference<T>;
11
12
  /**
12
13
  * A driver to use for query functionality.
13
14
  */
14
15
  export interface FirestoreAccessorDriver extends FirestoreTransactionFactoryDriver, FirestoreWriteBatchFactoryDriver {
15
16
  readonly doc: FirestoreAccessorDriverDocumentRefFunction;
17
+ readonly docAtPath: FirestoreAccessorDriverFullPathDocumentRefFunction;
16
18
  readonly collectionGroup: FirestoreAccessorDriverCollectionGroupFunction;
17
19
  readonly collection: FirestoreAccessorDriverCollectionRefFunction;
18
20
  readonly subcollection: FirestoreAccessorDriverSubcollectionRefFunction;
@@ -1,12 +1,14 @@
1
- import { SnapshotListenOptions, Transaction } from './../types';
1
+ import { FieldPath, SnapshotListenOptions, Transaction } from './../types';
2
2
  import { Observable } from 'rxjs';
3
3
  import { Query, QuerySnapshot } from '../types';
4
4
  import { FirestoreQueryConstraint } from '../query/constraint';
5
5
  import { Maybe } from '@dereekb/util';
6
6
  export declare type FirestoreQueryDriverQueryFunction = <T>(query: Query<T>, ...queryConstraints: FirestoreQueryConstraint[]) => Query<T>;
7
+ export declare type FirestoreDocumentIdFieldPathAccessor = () => FieldPath;
7
8
  export interface FirestoreQueryConstraintFunctionsDriver {
8
9
  readonly availableConstraintTypes: Set<string>;
9
- query: FirestoreQueryDriverQueryFunction;
10
+ readonly query: FirestoreQueryDriverQueryFunction;
11
+ readonly documentIdFieldPath: FirestoreDocumentIdFieldPathAccessor;
10
12
  }
11
13
  /**
12
14
  * A driver to use for query functionality.
@@ -1,7 +1,7 @@
1
1
  import { Query } from '../types';
2
2
  import { FirestoreQueryConstraintHandlerMap } from '../query/constraint';
3
3
  import { FirestoreQueryConstraintFunctionsDriver } from './query';
4
- export interface MakeFirestoreQueryConstraintFunctionsDriver<B> {
4
+ export interface MakeFirestoreQueryConstraintFunctionsDriver<B> extends Omit<FirestoreQueryConstraintFunctionsDriver, 'query' | 'availableConstraintTypes'> {
5
5
  mapping: FirestoreQueryConstraintHandlerMap<B>;
6
6
  init: <T>(query: Query<T>) => B;
7
7
  build: <T>(builder: B) => Query<T>;
@@ -3,7 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.makeFirestoreQueryConstraintFunctionsDriver = void 0;
4
4
  const util_1 = require("@dereekb/util");
5
5
  function makeFirestoreQueryConstraintFunctionsDriver(config) {
6
- const { mapping, init, build } = config;
6
+ const { mapping, init, build, documentIdFieldPath } = config;
7
7
  const constraintsMap = (0, util_1.objectToMap)(mapping);
8
8
  const availableConstraintTypes = new Set(constraintsMap.keys());
9
9
  const query = (query, ...queryConstraints) => {
@@ -19,7 +19,8 @@ function makeFirestoreQueryConstraintFunctionsDriver(config) {
19
19
  };
20
20
  return {
21
21
  availableConstraintTypes,
22
- query
22
+ query,
23
+ documentIdFieldPath
23
24
  };
24
25
  }
25
26
  exports.makeFirestoreQueryConstraintFunctionsDriver = makeFirestoreQueryConstraintFunctionsDriver;
@@ -1 +1 @@
1
- {"version":3,"file":"query.handler.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase/src/lib/common/firestore/driver/query.handler.ts"],"names":[],"mappings":";;;AAAA,wCAA4C;AAW5C,SAAgB,2CAA2C,CAAI,MAAsD;IACnH,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;IACxC,MAAM,cAAc,GAAG,IAAA,kBAAW,EAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,wBAAwB,GAAgB,IAAI,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAsC,CAAI,KAAe,EAAE,GAAG,gBAA4C,EAAE,EAAE;QACvH,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAE1B,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAA2B,EAAE,EAAE;YACvD,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAE3C,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;aACpG;YAED,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC,CAAC;IAEF,OAAO;QACL,wBAAwB;QACxB,KAAK;KACN,CAAC;AACJ,CAAC;AAxBD,kGAwBC"}
1
+ {"version":3,"file":"query.handler.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase/src/lib/common/firestore/driver/query.handler.ts"],"names":[],"mappings":";;;AAAA,wCAA4C;AAW5C,SAAgB,2CAA2C,CAAI,MAAsD;IACnH,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,mBAAmB,EAAE,GAAG,MAAM,CAAC;IAC7D,MAAM,cAAc,GAAG,IAAA,kBAAW,EAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,wBAAwB,GAAgB,IAAI,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAsC,CAAI,KAAe,EAAE,GAAG,gBAA4C,EAAE,EAAE;QACvH,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QAE1B,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAA2B,EAAE,EAAE;YACvD,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAE3C,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;aACpG;YAED,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC,CAAC;IAEF,OAAO;QACL,wBAAwB;QACxB,KAAK;QACL,mBAAmB;KACpB,CAAC;AACJ,CAAC;AAzBD,kGAyBC"}
@@ -1,4 +1,5 @@
1
- import { ArrayOrValue, SeparateResult, SortingOrder, Maybe } from '@dereekb/util';
1
+ import { FieldPathOrStringPath } from './../types';
2
+ import { ArrayOrValue, SeparateResult, SortingOrder, Maybe, StringKeyPropertyKeys } from '@dereekb/util';
2
3
  import { DocumentSnapshot, DocumentData, FieldPath } from '../types';
3
4
  export declare type FirestoreQueryConstraintType = string;
4
5
  /**
@@ -48,15 +49,24 @@ export declare function where(fieldPath: string | FieldPath, opStr: WhereFilterO
48
49
  export declare const FIRESTORE_ORDER_BY_QUERY_CONSTRAINT_TYPE = "order_by";
49
50
  export declare type OrderByDirection = SortingOrder;
50
51
  export interface OrderByQueryConstraintData {
51
- fieldPath: string | FieldPath;
52
+ fieldPath: FieldPathOrStringPath;
52
53
  directionStr?: OrderByDirection;
53
54
  }
54
- export declare function orderBy(fieldPath: string | FieldPath, directionStr?: OrderByDirection): FirestoreQueryConstraint<OrderByQueryConstraintData>;
55
+ export declare function orderBy<T>(fieldPath: StringKeyPropertyKeys<T>, directionStr?: OrderByDirection): FirestoreQueryConstraint<OrderByQueryConstraintData>;
56
+ export declare function orderBy(fieldPath: FieldPathOrStringPath, directionStr?: OrderByDirection): FirestoreQueryConstraint<OrderByQueryConstraintData>;
57
+ export declare const FIRESTORE_ORDER_BY_DOCUMENT_ID_QUERY_CONSTRAINT_TYPE = "order_by_doc_id";
58
+ export declare type OrderByDocumentIdQueryConstraintData = Pick<OrderByQueryConstraintData, 'directionStr'>;
59
+ export declare function orderByDocumentId(directionStr?: OrderByDirection): FirestoreQueryConstraint<OrderByDocumentIdQueryConstraintData>;
55
60
  export declare const FIRESTORE_START_AT_QUERY_CONSTRAINT_TYPE = "start_at";
56
61
  export interface StartAtQueryConstraintData<T = DocumentData> {
57
62
  snapshot: DocumentSnapshot<T>;
58
63
  }
59
64
  export declare function startAt<T = DocumentData>(snapshot: DocumentSnapshot<T>): FirestoreQueryConstraint<StartAtQueryConstraintData<T>>;
65
+ export declare const FIRESTORE_START_AT_VALUE_QUERY_CONSTRAINT_TYPE = "start_at_path";
66
+ export interface StartAtValueQueryConstraintData {
67
+ fieldValues: unknown[];
68
+ }
69
+ export declare function startAtValue(...fieldValues: unknown[]): FirestoreQueryConstraint<StartAtValueQueryConstraintData>;
60
70
  export declare const FIRESTORE_START_AFTER_QUERY_CONSTRAINT_TYPE = "start_after";
61
71
  export interface StartAfterQueryConstraintData<T = DocumentData> {
62
72
  snapshot: DocumentSnapshot<T>;
@@ -66,6 +76,11 @@ export declare const FIRESTORE_END_AT_QUERY_CONSTRAINT_TYPE = "end_at";
66
76
  export interface EndAtQueryConstraintData<T = DocumentData> {
67
77
  snapshot: DocumentSnapshot<T>;
68
78
  }
79
+ export declare const FIRESTORE_END_AT_VALUE_QUERY_CONSTRAINT_TYPE = "end_at_path";
80
+ export interface EndAtValueQueryConstraintData {
81
+ fieldValues: unknown[];
82
+ }
83
+ export declare function endAtValue(...fieldValues: unknown[]): FirestoreQueryConstraint<EndAtValueQueryConstraintData>;
69
84
  /**
70
85
  *
71
86
  * @param snapshot
@@ -98,9 +113,12 @@ export declare type FullFirestoreQueryConstraintDataMapping = {
98
113
  [FIRESTORE_WHERE_QUERY_CONSTRAINT_TYPE]: WhereQueryConstraintData;
99
114
  [FIRESTORE_OFFSET_QUERY_CONSTRAINT_TYPE]: OffsetQueryConstraintData;
100
115
  [FIRESTORE_ORDER_BY_QUERY_CONSTRAINT_TYPE]: OrderByQueryConstraintData;
116
+ [FIRESTORE_ORDER_BY_DOCUMENT_ID_QUERY_CONSTRAINT_TYPE]: OrderByDocumentIdQueryConstraintData;
101
117
  [FIRESTORE_START_AT_QUERY_CONSTRAINT_TYPE]: StartAtQueryConstraintData;
118
+ [FIRESTORE_START_AT_VALUE_QUERY_CONSTRAINT_TYPE]: StartAtValueQueryConstraintData;
102
119
  [FIRESTORE_START_AFTER_QUERY_CONSTRAINT_TYPE]: StartAfterQueryConstraintData;
103
120
  [FIRESTORE_END_AT_QUERY_CONSTRAINT_TYPE]: EndAtQueryConstraintData;
121
+ [FIRESTORE_END_AT_VALUE_QUERY_CONSTRAINT_TYPE]: EndAtValueQueryConstraintData;
104
122
  [FIRESTORE_END_BEFORE_QUERY_CONSTRAINT_TYPE]: EndBeforeQueryConstraintData;
105
123
  };
106
124
  export declare type FullFirestoreQueryConstraintMapping = {
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.separateConstraints = exports.replaceConstraints = exports.filterConstraintsOfType = exports.addOrReplaceLimitInConstraints = exports.endBefore = exports.FIRESTORE_END_BEFORE_QUERY_CONSTRAINT_TYPE = exports.endAt = exports.FIRESTORE_END_AT_QUERY_CONSTRAINT_TYPE = exports.startAfter = exports.FIRESTORE_START_AFTER_QUERY_CONSTRAINT_TYPE = exports.startAt = exports.FIRESTORE_START_AT_QUERY_CONSTRAINT_TYPE = exports.orderBy = exports.FIRESTORE_ORDER_BY_QUERY_CONSTRAINT_TYPE = exports.where = exports.FIRESTORE_WHERE_QUERY_CONSTRAINT_TYPE = exports.offset = exports.FIRESTORE_OFFSET_QUERY_CONSTRAINT_TYPE = exports.limitToLast = exports.FIRESTORE_LIMIT_TO_LAST_QUERY_CONSTRAINT_TYPE = exports.limit = exports.FIRESTORE_LIMIT_QUERY_CONSTRAINT_TYPE = exports.firestoreQueryConstraintFactory = exports.firestoreQueryConstraint = void 0;
3
+ exports.separateConstraints = exports.replaceConstraints = exports.filterConstraintsOfType = exports.addOrReplaceLimitInConstraints = exports.endBefore = exports.FIRESTORE_END_BEFORE_QUERY_CONSTRAINT_TYPE = exports.endAt = exports.endAtValue = exports.FIRESTORE_END_AT_VALUE_QUERY_CONSTRAINT_TYPE = exports.FIRESTORE_END_AT_QUERY_CONSTRAINT_TYPE = exports.startAfter = exports.FIRESTORE_START_AFTER_QUERY_CONSTRAINT_TYPE = exports.startAtValue = exports.FIRESTORE_START_AT_VALUE_QUERY_CONSTRAINT_TYPE = exports.startAt = exports.FIRESTORE_START_AT_QUERY_CONSTRAINT_TYPE = exports.orderByDocumentId = exports.FIRESTORE_ORDER_BY_DOCUMENT_ID_QUERY_CONSTRAINT_TYPE = exports.orderBy = exports.FIRESTORE_ORDER_BY_QUERY_CONSTRAINT_TYPE = exports.where = exports.FIRESTORE_WHERE_QUERY_CONSTRAINT_TYPE = exports.offset = exports.FIRESTORE_OFFSET_QUERY_CONSTRAINT_TYPE = exports.limitToLast = exports.FIRESTORE_LIMIT_TO_LAST_QUERY_CONSTRAINT_TYPE = exports.limit = exports.FIRESTORE_LIMIT_QUERY_CONSTRAINT_TYPE = exports.firestoreQueryConstraintFactory = exports.firestoreQueryConstraint = void 0;
4
4
  const util_1 = require("@dereekb/util");
5
5
  function firestoreQueryConstraint(type, data) {
6
6
  return {
@@ -51,15 +51,27 @@ exports.where = where;
51
51
  // MARK: OrderBy
52
52
  exports.FIRESTORE_ORDER_BY_QUERY_CONSTRAINT_TYPE = 'order_by';
53
53
  function orderBy(fieldPath, directionStr) {
54
- return firestoreQueryConstraint(exports.FIRESTORE_ORDER_BY_QUERY_CONSTRAINT_TYPE, { fieldPath, directionStr });
54
+ return firestoreQueryConstraint(exports.FIRESTORE_ORDER_BY_QUERY_CONSTRAINT_TYPE, { fieldPath: fieldPath, directionStr });
55
55
  }
56
56
  exports.orderBy = orderBy;
57
+ // MARK: OrderBy
58
+ exports.FIRESTORE_ORDER_BY_DOCUMENT_ID_QUERY_CONSTRAINT_TYPE = 'order_by_doc_id';
59
+ function orderByDocumentId(directionStr) {
60
+ return firestoreQueryConstraint(exports.FIRESTORE_ORDER_BY_DOCUMENT_ID_QUERY_CONSTRAINT_TYPE, { directionStr });
61
+ }
62
+ exports.orderByDocumentId = orderByDocumentId;
57
63
  // MARK: Start At
58
64
  exports.FIRESTORE_START_AT_QUERY_CONSTRAINT_TYPE = 'start_at';
59
65
  function startAt(snapshot) {
60
66
  return firestoreQueryConstraint(exports.FIRESTORE_START_AT_QUERY_CONSTRAINT_TYPE, { snapshot });
61
67
  }
62
68
  exports.startAt = startAt;
69
+ // MARK: Start At Value
70
+ exports.FIRESTORE_START_AT_VALUE_QUERY_CONSTRAINT_TYPE = 'start_at_path';
71
+ function startAtValue(...fieldValues) {
72
+ return firestoreQueryConstraint(exports.FIRESTORE_START_AT_VALUE_QUERY_CONSTRAINT_TYPE, { fieldValues });
73
+ }
74
+ exports.startAtValue = startAtValue;
63
75
  // MARK: Start After
64
76
  exports.FIRESTORE_START_AFTER_QUERY_CONSTRAINT_TYPE = 'start_after';
65
77
  function startAfter(snapshot) {
@@ -68,6 +80,12 @@ function startAfter(snapshot) {
68
80
  exports.startAfter = startAfter;
69
81
  // MARK: End At
70
82
  exports.FIRESTORE_END_AT_QUERY_CONSTRAINT_TYPE = 'end_at';
83
+ // MARK: End At Value
84
+ exports.FIRESTORE_END_AT_VALUE_QUERY_CONSTRAINT_TYPE = 'end_at_path';
85
+ function endAtValue(...fieldValues) {
86
+ return firestoreQueryConstraint(exports.FIRESTORE_END_AT_VALUE_QUERY_CONSTRAINT_TYPE, { fieldValues });
87
+ }
88
+ exports.endAtValue = endAtValue;
71
89
  /**
72
90
  *
73
91
  * @param snapshot
@@ -1 +1 @@
1
- {"version":3,"file":"constraint.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase/src/lib/common/firestore/query/constraint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constraint.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase/src/lib/common/firestore/query/constraint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { DocumentReference } from '../types';
2
+ import { FirestoreQueryConstraint } from './constraint';
3
+ /**
4
+ * Use with a CollectionGroup query to return all child documents that are under a given parent.
5
+ *
6
+ * @param parentRef U
7
+ * @returns
8
+ */
9
+ export declare function allChildDocumentsUnderParent<P>(parentRef: DocumentReference<P>): FirestoreQueryConstraint[];
10
+ /**
11
+ * Use with a CollectionGroup query to return all child documents that are under a given path.
12
+ *
13
+ * @param parentPath
14
+ * @returns
15
+ */
16
+ export declare function allChildDocumentsUnderParentPath(parentPath: string): FirestoreQueryConstraint[];
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.allChildDocumentsUnderParentPath = exports.allChildDocumentsUnderParent = void 0;
4
+ const constraint_1 = require("./constraint");
5
+ /**
6
+ * Use with a CollectionGroup query to return all child documents that are under a given parent.
7
+ *
8
+ * @param parentRef U
9
+ * @returns
10
+ */
11
+ function allChildDocumentsUnderParent(parentRef) {
12
+ return allChildDocumentsUnderParentPath(parentRef.path);
13
+ }
14
+ exports.allChildDocumentsUnderParent = allChildDocumentsUnderParent;
15
+ /**
16
+ * Use with a CollectionGroup query to return all child documents that are under a given path.
17
+ *
18
+ * @param parentPath
19
+ * @returns
20
+ */
21
+ function allChildDocumentsUnderParentPath(parentPath) {
22
+ // https://medium.com/firebase-developers/how-to-query-collections-in-firestore-under-a-certain-path-6a0d686cebd2
23
+ // https://medium.com/firelayer/save-money-on-the-list-query-in-firestore-26ef9bee5474 for restricting
24
+ return [(0, constraint_1.orderByDocumentId)(), (0, constraint_1.startAtValue)(parentPath), (0, constraint_1.endAtValue)(parentPath + '\u0000')];
25
+ }
26
+ exports.allChildDocumentsUnderParentPath = allChildDocumentsUnderParentPath;
27
+ //# sourceMappingURL=constraint.template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constraint.template.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase/src/lib/common/firestore/query/constraint.template.ts"],"names":[],"mappings":";;;AACA,6CAAqG;AAErG;;;;;GAKG;AACH,SAAgB,4BAA4B,CAAI,SAA+B;IAC7E,OAAO,gCAAgC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;AAC1D,CAAC;AAFD,oEAEC;AAED;;;;;GAKG;AACH,SAAgB,gCAAgC,CAAC,UAAkB;IACjE,iHAAiH;IACjH,sGAAsG;IACtG,OAAO,CAAC,IAAA,8BAAiB,GAAE,EAAE,IAAA,yBAAY,EAAC,UAAU,CAAC,EAAE,IAAA,uBAAU,EAAC,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC;AAC5F,CAAC;AAJD,4EAIC"}
@@ -1,5 +1,6 @@
1
1
  export * from './accumulator';
2
2
  export * from './constraint';
3
+ export * from './constraint.template';
3
4
  export * from './iterator';
4
5
  export * from './query';
5
6
  export * from './query.util';
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const tslib_1 = require("tslib");
4
4
  tslib_1.__exportStar(require("./accumulator"), exports);
5
5
  tslib_1.__exportStar(require("./constraint"), exports);
6
+ tslib_1.__exportStar(require("./constraint.template"), exports);
6
7
  tslib_1.__exportStar(require("./iterator"), exports);
7
8
  tslib_1.__exportStar(require("./query"), exports);
8
9
  tslib_1.__exportStar(require("./query.util"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase/src/lib/common/firestore/query/index.ts"],"names":[],"mappings":";;;AAAA,wDAA8B;AAC9B,uDAA6B;AAC7B,qDAA2B;AAC3B,kDAAwB;AACxB,uDAA6B;AAC7B,oDAA0B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase/src/lib/common/firestore/query/index.ts"],"names":[],"mappings":";;;AAAA,wDAA8B;AAC9B,uDAA6B;AAC7B,gEAAsC;AACtC,qDAA2B;AAC3B,kDAAwB;AACxB,uDAA6B;AAC7B,oDAA0B"}
@@ -1,5 +1,5 @@
1
1
  import { FirestoreContext } from './context';
2
- import { CollectionReference, DocumentReference, Firestore, Query } from './types';
2
+ import { CollectionReference, DocumentReference, Firestore, Query, Transaction } from './types';
3
3
  /**
4
4
  * Contains a reference to a Query.
5
5
  */
@@ -24,3 +24,9 @@ export interface DocumentReferenceRef<T> {
24
24
  export interface FirestoreContextReference<F extends Firestore = Firestore> {
25
25
  readonly firestoreContext: FirestoreContext<F>;
26
26
  }
27
+ /**
28
+ * Contains contextual information about the current Transaction, if available.
29
+ */
30
+ export interface FirebaseTransactionContext {
31
+ readonly transaction?: Transaction;
32
+ }
@@ -1,3 +1,5 @@
1
+ import { StringKeyPropertyKeys } from '@dereekb/util';
2
+ import { UnionToIntersection } from 'ts-essentials';
1
3
  export declare type FirebaseFirestoreLikeFirestore = {
2
4
  type: string;
3
5
  };
@@ -18,7 +20,6 @@ export declare type PartialWithFieldValue<T> = Partial<T> | (T extends Primitive
18
20
  export declare type WithFieldValue<T> = T | (T extends Primitive ? T : T extends {} ? {
19
21
  [K in keyof T]: WithFieldValue<T[K]> | FieldValue;
20
22
  } : never);
21
- export declare type UnionToIntersection<U> = (U extends unknown ? (k: U) => void : never) extends (k: infer I) => void ? I : never;
22
23
  export declare type AddPrefixToKeys<Prefix extends string, T extends Record<string, unknown>> = {
23
24
  [K in keyof T & string as `${Prefix}.${K}`]+?: T[K];
24
25
  };
@@ -32,6 +33,8 @@ export declare type UpdateData<T> = T extends Primitive ? T : T extends {} ? {
32
33
  export interface FieldPath {
33
34
  isEqual(other: FieldPath): boolean;
34
35
  }
36
+ export declare type FieldPathOrStringPath = string | FieldPath;
37
+ export declare type FieldPathOrStringPathOf<T = object> = StringKeyPropertyKeys<T> | FieldPath;
35
38
  export declare function asTopLevelFieldPaths(input: (string | FieldPath)[]): string[];
36
39
  export declare function asTopLevelFieldPath(input: string | FieldPath): string;
37
40
  export interface Timestamp {
@@ -88,13 +91,13 @@ export interface DocumentReference<T = DocumentData> {
88
91
  withConverter<U>(converter: FirestoreDataConverter<U>): DocumentReference<U>;
89
92
  withConverter(converter: null): DocumentReference<DocumentData>;
90
93
  }
91
- export interface CollectionReference<T = DocumentData> extends Query<T> {
94
+ export interface CollectionReference<T = DocumentData, P = DocumentData> extends Query<T> {
92
95
  readonly type?: 'collection';
93
96
  readonly id: string;
94
97
  readonly path: string;
95
- readonly parent: DocumentReference<DocumentData> | null;
96
- withConverter<U>(converter: FirestoreDataConverter<U>): CollectionReference<U>;
97
- withConverter(converter: null): CollectionReference<DocumentData>;
98
+ readonly parent: DocumentReference<P> | null;
99
+ withConverter<U, P = DocumentData>(converter: FirestoreDataConverter<U>): CollectionReference<U, P>;
100
+ withConverter<P = DocumentData>(converter: null): CollectionReference<DocumentData, P>;
98
101
  }
99
102
  export interface CollectionGroup<T = DocumentData> extends Query<T> {
100
103
  readonly type?: 'query';
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../packages/firebase/src/lib/common/firestore/types.ts"],"names":[],"mappings":";AAAA,0GAA0G;AAC1G,oBAAoB;;;AAiCpB,SAAgB,oBAAoB,CAAC,KAA6B;IAChE,OAAO,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AACxC,CAAC;AAFD,oDAEC;AAED,SAAgB,mBAAmB,CAAC,KAAyB;IAC3D,IAAI,IAAY,CAAC;IAEjB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,IAAI,GAAG,KAAK,CAAC;KACd;SAAM;QACL,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KAC/B;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAXD,kDAWC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../packages/firebase/src/lib/common/firestore/types.ts"],"names":[],"mappings":";AAAA,0GAA0G;AAC1G,oBAAoB;;;AAsCpB,SAAgB,oBAAoB,CAAC,KAA6B;IAChE,OAAO,KAAK,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;AACxC,CAAC;AAFD,oDAEC;AAED,SAAgB,mBAAmB,CAAC,KAAyB;IAC3D,IAAI,IAAY,CAAC;IAEjB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QAC7B,IAAI,GAAG,KAAK,CAAC;KACd;SAAM;QACL,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;KAC/B;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAXD,kDAWC"}
@@ -1,3 +1,4 @@
1
1
  export * from './auth';
2
2
  export * from './firestore';
3
3
  export * from './function';
4
+ export * from './model';
@@ -4,4 +4,5 @@ const tslib_1 = require("tslib");
4
4
  tslib_1.__exportStar(require("./auth"), exports);
5
5
  tslib_1.__exportStar(require("./firestore"), exports);
6
6
  tslib_1.__exportStar(require("./function"), exports);
7
+ tslib_1.__exportStar(require("./model"), exports);
7
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/firebase/src/lib/common/index.ts"],"names":[],"mappings":";;;AAAA,iDAAuB;AACvB,sDAA4B;AAC5B,qDAA2B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/firebase/src/lib/common/index.ts"],"names":[],"mappings":";;;AAAA,iDAAuB;AACvB,sDAA4B;AAC5B,qDAA2B;AAC3B,kDAAwB"}
@@ -0,0 +1,16 @@
1
+ import { FirebaseAuthContext } from '../auth/auth.context';
2
+ import { FirebasePermissionContext, FirebasePermissionErrorContext } from './permission';
3
+ /**
4
+ * A base model context that contains info about what is current occuring.
5
+ */
6
+ export interface FirebaseModelContext extends FirebasePermissionContext, FirebasePermissionErrorContext, FirebaseAuthContext {
7
+ /**
8
+ * Whether or not to return all role checks for models as true if the auth context shows the current user as an admin.
9
+ *
10
+ * Is false by default.
11
+ */
12
+ readonly adminGetsAllowAllRoles?: boolean;
13
+ }
14
+ export interface FirebaseAppModelContext<C> extends FirebaseModelContext {
15
+ readonly app: C;
16
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../../../../packages/firebase/src/lib/common/model/context.ts"],"names":[],"mappings":""}
@@ -0,0 +1,15 @@
1
+ import { FirestoreModelNameRef } from '../firestore/collection/collection';
2
+ /**
3
+ * Key used on the front-end and backend that refers to a specific function for updating models.
4
+ */
5
+ export declare const UPDATE_MODEL_APP_FUNCTION_KEY = "updateModel";
6
+ export interface OnCallUpdateModelParams<T = unknown> extends FirestoreModelNameRef {
7
+ data: T;
8
+ }
9
+ /**
10
+ * Key used on the front-end and backend that refers to aspecific function for deleting models.
11
+ */
12
+ export declare const DELETE_MODEL_APP_FUNCTION_KEY = "deleteModel";
13
+ export interface OnCallDeleteModelParams<T = unknown> extends FirestoreModelNameRef {
14
+ data: T;
15
+ }
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DELETE_MODEL_APP_FUNCTION_KEY = exports.UPDATE_MODEL_APP_FUNCTION_KEY = void 0;
4
+ /**
5
+ * Key used on the front-end and backend that refers to a specific function for updating models.
6
+ */
7
+ exports.UPDATE_MODEL_APP_FUNCTION_KEY = 'updateModel';
8
+ /**
9
+ * Key used on the front-end and backend that refers to aspecific function for deleting models.
10
+ */
11
+ exports.DELETE_MODEL_APP_FUNCTION_KEY = 'deleteModel';
12
+ //# sourceMappingURL=function.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"function.js","sourceRoot":"","sources":["../../../../../../../packages/firebase/src/lib/common/model/function.ts"],"names":[],"mappings":";;;AAEA;;GAEG;AACU,QAAA,6BAA6B,GAAG,aAAa,CAAC;AAM3D;;GAEG;AACU,QAAA,6BAA6B,GAAG,aAAa,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './model';
2
+ export * from './permission';
3
+ export * from './context';
4
+ export * from './function';
5
+ export * from './model.service';
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./model"), exports);
5
+ tslib_1.__exportStar(require("./permission"), exports);
6
+ tslib_1.__exportStar(require("./context"), exports);
7
+ tslib_1.__exportStar(require("./function"), exports);
8
+ tslib_1.__exportStar(require("./model.service"), exports);
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../packages/firebase/src/lib/common/model/index.ts"],"names":[],"mappings":";;;AAAA,kDAAwB;AACxB,uDAA6B;AAC7B,oDAA0B;AAC1B,qDAA2B;AAC3B,0DAAgC"}
@@ -0,0 +1 @@
1
+ export * from './model.loader';
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./model.loader"), exports);
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase/src/lib/common/model/model/index.ts"],"names":[],"mappings":";;;AAAA,yDAA+B"}
@@ -0,0 +1,30 @@
1
+ import { FirebaseTransactionContext, FirestoreCollectionLike, FirestoreDocument } from '../../firestore';
2
+ import { InContextModelLoader, ModelLoader } from '@dereekb/model';
3
+ import { ModelKey } from '@dereekb/util';
4
+ export declare type FirebaseModelLoaderContext = FirebaseTransactionContext;
5
+ export declare type FirebaseModelGetFirestoreCollectionFunction<C extends FirebaseModelLoaderContext, T, D extends FirestoreDocument<T>> = (context: C) => FirestoreCollectionLike<T, D>;
6
+ export interface FirebaseModelCollectionLoader<C extends FirebaseModelLoaderContext, T, D extends FirestoreDocument<T>> {
7
+ getFirestoreCollection: FirebaseModelGetFirestoreCollectionFunction<C, T, D>;
8
+ }
9
+ export interface FirebaseModelLoader<C extends FirebaseModelLoaderContext, T, D extends FirestoreDocument<T>> extends ModelLoader<C, D> {
10
+ /**
11
+ * Loads a FirestoreDocument for the input key.
12
+ *
13
+ * Does not check existence of data on the model.
14
+ *
15
+ * @param key
16
+ * @param context
17
+ */
18
+ loadModelForKey(key: ModelKey, context: C): D;
19
+ }
20
+ export declare function firebaseModelLoader<C extends FirebaseModelLoaderContext, T, D extends FirestoreDocument<T>>(getFirestoreCollection: FirebaseModelGetFirestoreCollectionFunction<C, T, D>): FirebaseModelLoader<C, T, D>;
21
+ export interface InContextFirebaseModelLoader<T, D extends FirestoreDocument<T>> extends InContextModelLoader<D> {
22
+ loadModelForKey(key: ModelKey): D;
23
+ }
24
+ /**
25
+ * Type used to convert a FirebaseModelLoader into an InContextFirebaseModelLoader
26
+ */
27
+ export declare type AsInContextFirebaseModelLoader<X> = X extends FirebaseModelLoader<infer C, infer T, infer D> ? InContextFirebaseModelLoader<T, D> : never;
28
+ export interface InModelContextFirebaseModelLoader<T, D extends FirestoreDocument<T>> {
29
+ readonly model: D;
30
+ }
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.firebaseModelLoader = void 0;
4
+ function firebaseModelLoader(getFirestoreCollection) {
5
+ return {
6
+ loadModelForKey(key, context) {
7
+ const firestoreCollection = getFirestoreCollection(context);
8
+ let documentAccessor;
9
+ if (context.transaction) {
10
+ documentAccessor = firestoreCollection.documentAccessorForTransaction(context.transaction);
11
+ }
12
+ else {
13
+ documentAccessor = firestoreCollection.documentAccessor();
14
+ }
15
+ const document = documentAccessor.loadDocumentForKey(key);
16
+ return document;
17
+ }
18
+ };
19
+ }
20
+ exports.firebaseModelLoader = firebaseModelLoader;
21
+ //# sourceMappingURL=model.loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.loader.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase/src/lib/common/model/model/model.loader.ts"],"names":[],"mappings":";;;AAwBA,SAAgB,mBAAmB,CAA0E,sBAA4E;IACvL,OAAO;QACL,eAAe,CAAC,GAAa,EAAE,OAAU;YACvC,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;YAC5D,IAAI,gBAAwD,CAAC;YAE7D,IAAI,OAAO,CAAC,WAAW,EAAE;gBACvB,gBAAgB,GAAG,mBAAmB,CAAC,8BAA8B,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;aAC5F;iBAAM;gBACL,gBAAgB,GAAG,mBAAmB,CAAC,gBAAgB,EAAE,CAAC;aAC3D;YAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAC1D,OAAO,QAAQ,CAAC;QAClB,CAAC;KACF,CAAC;AACJ,CAAC;AAhBD,kDAgBC"}
@@ -0,0 +1,56 @@
1
+ import { GrantedRole } from '@dereekb/model';
2
+ import { Getter } from '@dereekb/util';
3
+ import { FirestoreDocument } from '../firestore/accessor/document';
4
+ import { FirestoreModelIdentity, FirestoreModelNames } from '../firestore/collection/collection';
5
+ import { FirebaseModelCollectionLoader, FirebaseModelLoader, InContextFirebaseModelLoader } from './model/model.loader';
6
+ import { InContextFirebaseModelPermissionService, FirebasePermissionContext, FirebaseModelPermissionService, FirebasePermissionServiceInstanceDelegate, InModelContextFirebaseModelPermissionService, FirebasePermissionErrorContext } from './permission';
7
+ import { ContextGrantedModelRolesReader } from './permission/permission.service.role';
8
+ export declare type FirebaseModelServiceContext = FirebasePermissionContext & FirebasePermissionErrorContext;
9
+ export interface FirebaseModelService<C extends FirebaseModelServiceContext, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends GrantedRole = GrantedRole> extends FirebaseModelPermissionService<C, T, D, R>, FirebaseModelLoader<C, T, D> {
10
+ }
11
+ export declare type FirebaseModelServiceGetter<C extends FirebaseModelServiceContext, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends GrantedRole = GrantedRole> = Getter<FirebaseModelService<C, T, D, R>>;
12
+ export interface FirebaseModelServiceConfig<C extends FirebaseModelServiceContext, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends GrantedRole = GrantedRole> extends Omit<FirebasePermissionServiceInstanceDelegate<C, T, D, R>, 'loadModelForKey'>, FirebaseModelCollectionLoader<C, T, D> {
13
+ }
14
+ export declare function firebaseModelService<C extends FirebaseModelServiceContext, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends GrantedRole = GrantedRole>(config: FirebaseModelServiceConfig<C, T, D, R>): FirebaseModelService<C, T, D, R>;
15
+ export declare type FirebaseModelServiceFactory<C extends FirebaseModelServiceContext, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends GrantedRole = GrantedRole> = Getter<FirebaseModelService<C, T, D, R>>;
16
+ export declare function firebaseModelServiceFactory<C extends FirebaseModelServiceContext, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends GrantedRole = GrantedRole>(config: FirebaseModelServiceConfig<C, T, D, R>): FirebaseModelServiceFactory<C, T, D, R>;
17
+ export declare type LimitedInContextFirebaseModelService<C, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends GrantedRole = GrantedRole> = InContextFirebaseModelPermissionService<C, T, D, R> & InContextFirebaseModelLoader<T, D>;
18
+ export declare type InModelContextFirebaseModelServiceFactory<C, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends GrantedRole = GrantedRole> = (model: D) => InModelContextFirebaseModelService<C, T, D, R>;
19
+ export declare type InModelContextFirebaseModelService<C, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends GrantedRole = GrantedRole> = InModelContextFirebaseModelPermissionService<C, T, D, R> & {
20
+ roleReader: () => Promise<ContextGrantedModelRolesReader<C, T, D, R>>;
21
+ };
22
+ export declare type InContextFirebaseModelService<C, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends GrantedRole = GrantedRole> = InModelContextFirebaseModelServiceFactory<C, T, D, R> & LimitedInContextFirebaseModelService<C, T, D, R>;
23
+ export declare type InContextFirebaseModelServiceFactory<C, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends GrantedRole = GrantedRole> = (context: C) => InContextFirebaseModelService<C, T, D, R>;
24
+ export declare function inContextFirebaseModelServiceFactory<C, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends GrantedRole = GrantedRole>(factory: FirebaseModelServiceGetter<C, T, D, R>): InContextFirebaseModelServiceFactory<C, T, D, R>;
25
+ export declare type FirebaseModelsServiceFactory<C extends FirebaseModelServiceContext, K extends FirestoreModelIdentity = FirestoreModelIdentity> = {
26
+ [J in FirestoreModelNames<K>]: FirebaseModelServiceGetter<C, any>;
27
+ };
28
+ /**
29
+ * Function that returns a configured service corresponding with the requested function, and for that context.
30
+ */
31
+ export declare type FirebaseModelsService<X extends FirebaseModelsServiceFactory<C>, C extends FirebaseModelServiceContext> = <K extends keyof X>(type: K, context: C) => X[K] extends FirebaseModelServiceGetter<C, infer T, infer D, infer R> ? InContextFirebaseModelService<C, T, D, R> : never;
32
+ /**
33
+ * Creates a new FirebaseModelsService.
34
+ *
35
+ * When a context is passed, it is extended and the services are available in the context too as a services function.
36
+ *
37
+ * This allows the services function to reference itself in usage. You do this by creating another type that extends the context. Example:
38
+ *
39
+ * export type DemoFirebaseBaseContext = FirebaseAppModelContext<DemoFirestoreCollections>;
40
+ * ...
41
+ * export const demoFirebaseModelServices = firebaseModelsService<typeof DEMO_FIREBASE_MODEL_SERVICE_FACTORIES, DemoFirebaseBaseContext, DemoFirebaseModelTypes>(DEMO_FIREBASE_MODEL_SERVICE_FACTORIES);
42
+ * export type DemoFirebaseContext = DemoFirebaseBaseContext & { service: typeof demoFirebaseModelServices };
43
+ *
44
+ * @param services
45
+ * @returns
46
+ */
47
+ export declare function firebaseModelsService<X extends FirebaseModelsServiceFactory<C, K>, C extends FirebaseModelServiceContext, K extends FirestoreModelIdentity = FirestoreModelIdentity>(services: X): FirebaseModelsService<X, C>;
48
+ export declare type InContextFirebaseModelsService<Y> = Y extends FirebaseModelsService<infer X, infer C> ? <K extends keyof X>(type: K) => X[K] extends FirebaseModelServiceGetter<C, infer T, infer D, infer R> ? InContextFirebaseModelService<C, T, D, R> : never : never;
49
+ export declare type InContextFirebaseModelsServiceFactory<Y> = Y extends FirebaseModelsService<infer X, infer C> ? (context: C) => InContextFirebaseModelsService<Y> : never;
50
+ /**
51
+ * Creates a InContextFirebaseModelsServiceFactory for a particular service.
52
+ *
53
+ * @param service
54
+ * @returns
55
+ */
56
+ export declare function inContextFirebaseModelsServiceFactory<X extends FirebaseModelsServiceFactory<C, K>, C extends FirebaseModelServiceContext, K extends FirestoreModelIdentity = FirestoreModelIdentity>(service: FirebaseModelsService<X, C>): InContextFirebaseModelsServiceFactory<FirebaseModelsService<X, C>>;