@dereekb/firebase 5.2.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 (106) hide show
  1. package/CHANGELOG.md +32 -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 +27 -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
  105. package/test/src/lib/common/test.iterator.js +1 -0
  106. package/test/src/lib/common/test.iterator.js.map +1 -1
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.inContextFirebaseModelsServiceFactory = exports.firebaseModelsService = exports.inContextFirebaseModelServiceFactory = exports.firebaseModelServiceFactory = exports.firebaseModelService = void 0;
4
+ const util_1 = require("@dereekb/util");
5
+ const model_loader_1 = require("./model/model.loader");
6
+ const permission_1 = require("./permission");
7
+ const permission_service_role_1 = require("./permission/permission.service.role");
8
+ function firebaseModelService(config) {
9
+ const permissionServiceDelegate = (0, util_1.build)({
10
+ base: (0, model_loader_1.firebaseModelLoader)(config.getFirestoreCollection),
11
+ build: (x) => {
12
+ x.roleMapForModel = config.roleMapForModel;
13
+ }
14
+ });
15
+ const permissionService = (0, permission_1.firebaseModelPermissionService)(permissionServiceDelegate);
16
+ const service = {
17
+ roleMapForModelContext: (model, context) => permissionService.roleMapForModelContext(model, context),
18
+ roleMapForKeyContext: (key, context) => permissionService.roleMapForKeyContext(key, context),
19
+ loadModelForKey: permissionServiceDelegate.loadModelForKey
20
+ };
21
+ return service;
22
+ }
23
+ exports.firebaseModelService = firebaseModelService;
24
+ function firebaseModelServiceFactory(config) {
25
+ return (0, util_1.cachedGetter)(() => firebaseModelService(config));
26
+ }
27
+ exports.firebaseModelServiceFactory = firebaseModelServiceFactory;
28
+ function inContextFirebaseModelServiceFactory(factory) {
29
+ return (context) => {
30
+ const firebaseModelService = factory();
31
+ const base = (model) => {
32
+ const inModelContextService = {
33
+ model,
34
+ roleMap: () => service.roleMapForModel(model),
35
+ roleReader: () => (0, permission_service_role_1.contextGrantedModelRolesReader)(inModelContextService)
36
+ };
37
+ return inModelContextService;
38
+ };
39
+ const service = (0, util_1.build)({
40
+ base: base,
41
+ build: (x) => {
42
+ x.roleMapForModel = (model) => firebaseModelService.roleMapForModelContext(model, context);
43
+ x.roleMapForKey = (key) => firebaseModelService.roleMapForKeyContext(key, context);
44
+ x.loadModelForKey = (key) => firebaseModelService.loadModelForKey(key, context);
45
+ }
46
+ });
47
+ return service;
48
+ };
49
+ }
50
+ exports.inContextFirebaseModelServiceFactory = inContextFirebaseModelServiceFactory;
51
+ /**
52
+ * Creates a new FirebaseModelsService.
53
+ *
54
+ * When a context is passed, it is extended and the services are available in the context too as a services function.
55
+ *
56
+ * This allows the services function to reference itself in usage. You do this by creating another type that extends the context. Example:
57
+ *
58
+ * export type DemoFirebaseBaseContext = FirebaseAppModelContext<DemoFirestoreCollections>;
59
+ * ...
60
+ * export const demoFirebaseModelServices = firebaseModelsService<typeof DEMO_FIREBASE_MODEL_SERVICE_FACTORIES, DemoFirebaseBaseContext, DemoFirebaseModelTypes>(DEMO_FIREBASE_MODEL_SERVICE_FACTORIES);
61
+ * export type DemoFirebaseContext = DemoFirebaseBaseContext & { service: typeof demoFirebaseModelServices };
62
+ *
63
+ * @param services
64
+ * @returns
65
+ */
66
+ function firebaseModelsService(services) {
67
+ const firebaseModelsService = (type, context) => {
68
+ const firebaseModelService = services[type];
69
+ const contextWithService = Object.assign(Object.assign({}, context), { service: firebaseModelsService });
70
+ const service = inContextFirebaseModelServiceFactory(firebaseModelService)(contextWithService);
71
+ return service;
72
+ };
73
+ return firebaseModelsService;
74
+ }
75
+ exports.firebaseModelsService = firebaseModelsService;
76
+ /**
77
+ * Creates a InContextFirebaseModelsServiceFactory for a particular service.
78
+ *
79
+ * @param service
80
+ * @returns
81
+ */
82
+ function inContextFirebaseModelsServiceFactory(service) {
83
+ const inContextFirebaseModelsServiceFactory = (context) => {
84
+ return (type) => service(type, context);
85
+ };
86
+ return inContextFirebaseModelsServiceFactory;
87
+ }
88
+ exports.inContextFirebaseModelsServiceFactory = inContextFirebaseModelsServiceFactory;
89
+ /*
90
+ // TODO: there may be a way to set this up, and it would be ideal (to just pass in the model and get the model's collection name and return a properly typed object) but the collection name isn't available in typing so
91
+ export interface InModelContextFirebaseModelsService<C, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends GrantedRole = GrantedRole> extends InModelContextFirebaseModelPermissionService<C, T, D, R> {}
92
+ export type InModelContextFirebaseModelsServiceFactory<Z, K extends FirestoreModelIdentity = FirestoreModelIdentity> = Z extends InContextFirebaseModelsService<infer 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> ? (model: D) => InModelContextFirebaseModelsService<C, T, D, R> : never : never) : never) : never;
93
+
94
+ export function inModelContextFirebaseModelsServiceFactory<Z extends InContextFirebaseModelsService<FirebaseModelsService<X, C>>, X extends FirebaseModelsServiceFactory<C, K>, C extends FirebaseModelServiceContext, K extends FirestoreModelIdentity = FirestoreModelIdentity>(firebaseModelsService: Z): InModelContextFirebaseModelsServiceFactory<FirebaseModelsService<X, C>, K> {
95
+ // the typings break down here when getting the intended FirestoreDocument type, but the InModelContextFirebaseModelServiceFactory will infer the correct typings in use.
96
+ const inModelContextFirebaseModelsServiceFactory: InModelContextFirebaseModelsServiceFactory<Z, K> = (<K extends keyof X, T, D extends FirestoreDocument<T>, R extends GrantedRole = GrantedRole>(model: D) => {
97
+
98
+ firebaseModelsService(model.modelType as K)
99
+
100
+ const inModelContextService: InModelContextFirebaseModelService<C, T, D, R> = {
101
+ roleMap: () => typeService.roleMapForModel(model)
102
+ };
103
+
104
+ return inModelContextService;
105
+ };
106
+ }) as unknown as InModelContextFirebaseModelServiceFactory<Z, K>;
107
+
108
+ return inModelContextFirebaseModelsServiceFactory;
109
+ }
110
+ */
111
+ //# sourceMappingURL=model.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.service.js","sourceRoot":"","sources":["../../../../../../../packages/firebase/src/lib/common/model/model.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './permission';
2
+ export * from './permission.context';
3
+ export * from './permission.service';
4
+ export * from './permission.service.role';
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ tslib_1.__exportStar(require("./permission"), exports);
5
+ tslib_1.__exportStar(require("./permission.context"), exports);
6
+ tslib_1.__exportStar(require("./permission.service"), exports);
7
+ tslib_1.__exportStar(require("./permission.service.role"), exports);
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase/src/lib/common/model/permission/index.ts"],"names":[],"mappings":";;;AAAA,uDAA6B;AAC7B,+DAAqC;AACrC,+DAAqC;AACrC,oEAA0C"}
@@ -0,0 +1,9 @@
1
+ import { GrantedRole } from '@dereekb/model';
2
+ import { ArrayOrValue } from '@dereekb/util';
3
+ import { FirebaseTransactionContext } from '../../firestore/reference';
4
+ import { FirebaseContextGrantedModelRoles } from './permission';
5
+ export declare type FirebasePermissionContext = FirebaseTransactionContext;
6
+ export declare type FirebasePermissionErrorContextErrorFunction = (firebaseContextGrantedModelRoles: FirebaseContextGrantedModelRoles<FirebasePermissionErrorContext, unknown>, role?: ArrayOrValue<GrantedRole>) => Error;
7
+ export interface FirebasePermissionErrorContext {
8
+ makePermissionError?: FirebasePermissionErrorContextErrorFunction;
9
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=permission.context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission.context.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase/src/lib/common/model/permission/permission.context.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ import { Maybe } from '@dereekb/util';
2
+ import { GrantedRole, ContextGrantedModelRoles } from '@dereekb/model';
3
+ import { DocumentSnapshot, FirestoreDocument } from '../../firestore';
4
+ import { FirebasePermissionErrorContext } from './permission.context';
5
+ export interface FirebasePermissionServiceModel<T, D extends FirestoreDocument<T> = FirestoreDocument<T>> {
6
+ readonly document: D;
7
+ readonly snapshot: DocumentSnapshot<T>;
8
+ readonly exists: boolean;
9
+ readonly data: Maybe<T>;
10
+ }
11
+ export declare type FirebaseContextGrantedModelRoles<C extends FirebasePermissionErrorContext, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends GrantedRole = GrantedRole> = ContextGrantedModelRoles<FirebasePermissionServiceModel<T, D>, C, R>;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=permission.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase/src/lib/common/model/permission/permission.ts"],"names":[],"mappings":""}
@@ -0,0 +1,24 @@
1
+ import { FirestoreDocument } from './../../firestore';
2
+ import { AbstractModelPermissionService, GrantedRoleMap, InContextModelPermissionService, InModelContextModelPermissionService, ModelPermissionService } from '@dereekb/model';
3
+ import { Maybe, PromiseOrValue } from '@dereekb/util';
4
+ import { FirebaseModelLoader, InModelContextFirebaseModelLoader } from '../model/model.loader';
5
+ import { FirebaseModelContext } from '../context';
6
+ import { FirebasePermissionServiceModel } from './permission';
7
+ export declare type FirebaseModelPermissionService<C extends FirebaseModelContext, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends string = string> = ModelPermissionService<C, D, R, FirebasePermissionServiceModel<T, D>>;
8
+ export interface FirebasePermissionServiceInstanceDelegate<C extends FirebaseModelContext, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends string = string> extends FirebaseModelLoader<C, T, D> {
9
+ roleMapForModel(output: FirebasePermissionServiceModel<T, D>, context: C, model: D): PromiseOrValue<GrantedRoleMap<R>>;
10
+ }
11
+ /**
12
+ * Abstract AbstractModelPermissionService implementation for FirebaseModelsPermissionService.
13
+ */
14
+ export declare class FirebaseModelPermissionServiceInstance<C extends FirebaseModelContext, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends string = string> extends AbstractModelPermissionService<C, D, R, FirebasePermissionServiceModel<T, D>> implements FirebaseModelPermissionService<C, T, D, R> {
15
+ readonly delegate: FirebasePermissionServiceInstanceDelegate<C, T, D, R>;
16
+ constructor(delegate: FirebasePermissionServiceInstanceDelegate<C, T, D, R>);
17
+ roleMapForModel(output: FirebasePermissionServiceModel<T, D>, context: C, model: D): PromiseOrValue<GrantedRoleMap<R>>;
18
+ protected outputForModel(document: D): Promise<Maybe<FirebasePermissionServiceModel<T, D>>>;
19
+ protected getRoleMapForOutput(output: FirebasePermissionServiceModel<T, D>, context: C, model: D): Promise<import("@dereekb/model").ContextGrantedModelRoles<FirebasePermissionServiceModel<T, D>, C, R>>;
20
+ protected isUsableOutputForRoles(output: FirebasePermissionServiceModel<T, D>): boolean;
21
+ }
22
+ export declare function firebaseModelPermissionService<C extends FirebaseModelContext, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends string = string>(delegate: FirebasePermissionServiceInstanceDelegate<C, T, D, R>): FirebaseModelPermissionServiceInstance<C, T, D, R>;
23
+ export declare type InContextFirebaseModelPermissionService<C, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends string = string> = InContextModelPermissionService<C, D, R, FirebasePermissionServiceModel<T, D>>;
24
+ export declare type InModelContextFirebaseModelPermissionService<C, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends string = string> = InModelContextModelPermissionService<C, D, R, FirebasePermissionServiceModel<T, D>> & InModelContextFirebaseModelLoader<T, D>;
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.firebaseModelPermissionService = exports.FirebaseModelPermissionServiceInstance = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const model_1 = require("@dereekb/model");
6
+ /**
7
+ * Abstract AbstractModelPermissionService implementation for FirebaseModelsPermissionService.
8
+ */
9
+ class FirebaseModelPermissionServiceInstance extends model_1.AbstractModelPermissionService {
10
+ constructor(delegate) {
11
+ super(delegate);
12
+ this.delegate = delegate;
13
+ }
14
+ roleMapForModel(output, context, model) {
15
+ return this.delegate.roleMapForModel(output, context, model);
16
+ }
17
+ outputForModel(document) {
18
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
19
+ const snapshot = yield document.accessor.get();
20
+ const data = snapshot.data();
21
+ const model = { document, snapshot, data, exists: data != null };
22
+ return model;
23
+ });
24
+ }
25
+ getRoleMapForOutput(output, context, model) {
26
+ const _super = Object.create(null, {
27
+ getRoleMapForOutput: { get: () => super.getRoleMapForOutput }
28
+ });
29
+ var _a, _b;
30
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
31
+ if (context.adminGetsAllowAllRoles && ((_b = (_a = context.auth) === null || _a === void 0 ? void 0 : _a.isAdmin) === null || _b === void 0 ? void 0 : _b.call(_a))) {
32
+ return (0, model_1.fullAccessGrantedModelRoles)(context, output);
33
+ }
34
+ else {
35
+ return _super.getRoleMapForOutput.call(this, output, context, model);
36
+ }
37
+ });
38
+ }
39
+ isUsableOutputForRoles(output) {
40
+ return output.exists;
41
+ }
42
+ }
43
+ exports.FirebaseModelPermissionServiceInstance = FirebaseModelPermissionServiceInstance;
44
+ function firebaseModelPermissionService(delegate) {
45
+ return new FirebaseModelPermissionServiceInstance(delegate);
46
+ }
47
+ exports.firebaseModelPermissionService = firebaseModelPermissionService;
48
+ //# sourceMappingURL=permission.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission.service.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase/src/lib/common/model/permission/permission.service.ts"],"names":[],"mappings":";;;;AACA,0CAA4M;AAY5M;;GAEG;AACH,MAAa,sCAA4J,SAAQ,sCAA6E;IAC5P,YAAqB,QAA+D;QAClF,KAAK,CAAC,QAAQ,CAAC,CAAC;QADG,aAAQ,GAAR,QAAQ,CAAuD;IAEpF,CAAC;IAED,eAAe,CAAC,MAA4C,EAAE,OAAU,EAAE,KAAQ;QAChF,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;IAC/D,CAAC;IAEe,cAAc,CAAC,QAAW;;YACxC,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;YAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;YAE7B,MAAM,KAAK,GAAgD,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;YAC9G,OAAO,KAAK,CAAC;QACf,CAAC;KAAA;IAEwB,mBAAmB,CAAC,MAA4C,EAAE,OAAU,EAAE,KAAQ;;;;;;YAC7G,IAAI,OAAO,CAAC,sBAAsB,KAAI,MAAA,MAAA,OAAO,CAAC,IAAI,0CAAE,OAAO,kDAAI,CAAA,EAAE;gBAC/D,OAAO,IAAA,mCAA2B,EAAC,OAAO,EAAE,MAAM,CAAC,CAAC;aACrD;iBAAM;gBACL,OAAO,OAAM,mBAAmB,YAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE;aAC1D;;KACF;IAEkB,sBAAsB,CAAC,MAA4C;QACpF,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;CACF;AA5BD,wFA4BC;AAED,SAAgB,8BAA8B,CAAsH,QAA+D;IACjO,OAAO,IAAI,sCAAsC,CAAC,QAAQ,CAAC,CAAC;AAC9D,CAAC;AAFD,wEAEC"}
@@ -0,0 +1,40 @@
1
+ import { FirestoreDocument } from '../../firestore/accessor/document';
2
+ import { GrantedRole, GrantedRoleMap, GrantedRoleMapReader } from '@dereekb/model';
3
+ import { InModelContextFirebaseModelPermissionService } from './permission.service';
4
+ import { SetIncludesMode, ArrayOrValue } from '@dereekb/util';
5
+ import { FirebasePermissionErrorContext } from './permission.context';
6
+ import { FirebaseContextGrantedModelRoles } from './permission';
7
+ export interface ContextGrantedModelRolesReader<C extends FirebasePermissionErrorContext, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends GrantedRole = GrantedRole> extends GrantedRoleMapReader<R> {
8
+ readonly roleMap: GrantedRoleMap<R>;
9
+ readonly contextGrantedModelRoles: FirebaseContextGrantedModelRoles<C, T, D, R>;
10
+ assertHasRole(role: R): void;
11
+ assertHasRoles(setIncludes: SetIncludesMode, roles: ArrayOrValue<R>): void;
12
+ assertContainsRoles(setIncludes: SetIncludesMode, roles: ArrayOrValue<R>): void;
13
+ throwPermissionError(role?: R): never;
14
+ }
15
+ export declare class ContextGrantedModelRolesReaderInstance<C extends FirebasePermissionErrorContext, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends GrantedRole = GrantedRole> implements ContextGrantedModelRolesReader<C, T, D, R> {
16
+ readonly contextGrantedModelRoles: FirebaseContextGrantedModelRoles<C, T, D, R>;
17
+ private _roleReader;
18
+ constructor(contextGrantedModelRoles: FirebaseContextGrantedModelRoles<C, T, D, R>);
19
+ get roleMap(): GrantedRoleMap<R>;
20
+ hasNoAccess(): boolean;
21
+ hasRole(role: R): boolean;
22
+ hasRoles(setIncludes: SetIncludesMode, roles: ArrayOrValue<R>): boolean;
23
+ containsRoles(setIncludes: SetIncludesMode, roles: ArrayOrValue<R>): boolean;
24
+ assertHasRole(role: R): void;
25
+ assertHasRoles(setIncludes: SetIncludesMode, roles: ArrayOrValue<R>): void;
26
+ assertContainsRoles(setIncludes: SetIncludesMode, roles: ArrayOrValue<R>): void;
27
+ throwPermissionError(role?: ArrayOrValue<R>): never;
28
+ }
29
+ /**
30
+ * Creates a new ContextGrantedModelRolesReader for the input model.
31
+ */
32
+ export declare function contextGrantedModelRolesReader<C extends FirebasePermissionErrorContext, T, D extends FirestoreDocument<T> = FirestoreDocument<T>, R extends GrantedRole = GrantedRole>(service: InModelContextFirebaseModelPermissionService<C, T, D, R>): Promise<ContextGrantedModelRolesReader<C, T, D, R>>;
33
+ /**
34
+ * Creates the default permission error message.
35
+ *
36
+ * @param contextGrantedModelRoles
37
+ * @param role
38
+ * @returns
39
+ */
40
+ export declare function contextGrantedModelRolesReaderPermissionErrorMessage(contextGrantedModelRoles: FirebaseContextGrantedModelRoles<FirebasePermissionErrorContext, unknown>, roles?: ArrayOrValue<GrantedRole>): string;
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.contextGrantedModelRolesReaderPermissionErrorMessage = exports.contextGrantedModelRolesReader = exports.ContextGrantedModelRolesReaderInstance = void 0;
4
+ const model_1 = require("@dereekb/model");
5
+ class ContextGrantedModelRolesReaderInstance {
6
+ constructor(contextGrantedModelRoles) {
7
+ this.contextGrantedModelRoles = contextGrantedModelRoles;
8
+ this._roleReader = (0, model_1.grantedRoleMapReader)(contextGrantedModelRoles.roleMap);
9
+ }
10
+ get roleMap() {
11
+ return this.contextGrantedModelRoles.roleMap;
12
+ }
13
+ hasNoAccess() {
14
+ return this._roleReader.hasNoAccess();
15
+ }
16
+ hasRole(role) {
17
+ return this._roleReader.hasRole(role);
18
+ }
19
+ hasRoles(setIncludes, roles) {
20
+ return this._roleReader.hasRoles(setIncludes, roles);
21
+ }
22
+ containsRoles(setIncludes, roles) {
23
+ return this._roleReader.containsRoles(setIncludes, roles);
24
+ }
25
+ assertHasRole(role) {
26
+ if (!this.hasRole(role)) {
27
+ this.throwPermissionError(role);
28
+ }
29
+ }
30
+ assertHasRoles(setIncludes, roles) {
31
+ if (!this.hasRoles(setIncludes, roles)) {
32
+ this.throwPermissionError(roles);
33
+ }
34
+ }
35
+ assertContainsRoles(setIncludes, roles) {
36
+ if (!this.containsRoles(setIncludes, roles)) {
37
+ this.throwPermissionError(roles);
38
+ }
39
+ }
40
+ throwPermissionError(role) {
41
+ var _a, _b, _c;
42
+ const error = (_c = (_b = (_a = this.contextGrantedModelRoles.context).makePermissionError) === null || _b === void 0 ? void 0 : _b.call(_a, this.contextGrantedModelRoles, role)) !== null && _c !== void 0 ? _c : new Error(contextGrantedModelRolesReaderPermissionErrorMessage(this.contextGrantedModelRoles, role));
43
+ throw error;
44
+ }
45
+ }
46
+ exports.ContextGrantedModelRolesReaderInstance = ContextGrantedModelRolesReaderInstance;
47
+ /**
48
+ * Creates a new ContextGrantedModelRolesReader for the input model.
49
+ */
50
+ function contextGrantedModelRolesReader(service) {
51
+ return service.roleMap().then((x) => new ContextGrantedModelRolesReaderInstance(x));
52
+ }
53
+ exports.contextGrantedModelRolesReader = contextGrantedModelRolesReader;
54
+ /**
55
+ * Creates the default permission error message.
56
+ *
57
+ * @param contextGrantedModelRoles
58
+ * @param role
59
+ * @returns
60
+ */
61
+ function contextGrantedModelRolesReaderPermissionErrorMessage(contextGrantedModelRoles, roles) {
62
+ var _a, _b;
63
+ let message = `Permissions Error ("${(_a = contextGrantedModelRoles.data) === null || _a === void 0 ? void 0 : _a.document.modelType}":"${(_b = contextGrantedModelRoles.data) === null || _b === void 0 ? void 0 : _b.document.id}")`;
64
+ if (roles && (roles === null || roles === void 0 ? void 0 : roles.length)) {
65
+ message = `${message}: required role(s) "${roles}"`;
66
+ }
67
+ return message;
68
+ }
69
+ exports.contextGrantedModelRolesReaderPermissionErrorMessage = contextGrantedModelRolesReaderPermissionErrorMessage;
70
+ //# sourceMappingURL=permission.service.role.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission.service.role.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase/src/lib/common/model/permission/permission.service.role.ts"],"names":[],"mappings":";;;AACA,0CAAyG;AAezG,MAAa,sCAAsC;IAGjD,YAAqB,wBAAsE;QAAtE,6BAAwB,GAAxB,wBAAwB,CAA8C;QACzF,IAAI,CAAC,WAAW,GAAG,IAAA,4BAAoB,EAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAC5E,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,wBAAwB,CAAC,OAAO,CAAC;IAC/C,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC;IACxC,CAAC;IAED,OAAO,CAAC,IAAO;QACb,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,QAAQ,CAAC,WAA4B,EAAE,KAAsB;QAC3D,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IACvD,CAAC;IAED,aAAa,CAAC,WAA4B,EAAE,KAAsB;QAChE,OAAO,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC;IAED,aAAa,CAAC,IAAO;QACnB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;SACjC;IACH,CAAC;IAED,cAAc,CAAC,WAA4B,EAAE,KAAsB;QACjE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE;YACtC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;SAClC;IACH,CAAC;IAED,mBAAmB,CAAC,WAA4B,EAAE,KAAsB;QACtE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE;YAC3C,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;SAClC;IACH,CAAC;IAED,oBAAoB,CAAC,IAAsB;;QACzC,MAAM,KAAK,GAAG,MAAA,MAAA,MAAA,IAAI,CAAC,wBAAwB,CAAC,OAAO,EAAC,mBAAmB,mDAAG,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,mCAAI,IAAI,KAAK,CAAC,oDAAoD,CAAC,IAAI,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC,CAAC;QACvN,MAAM,KAAK,CAAC;IACd,CAAC;CACF;AAjDD,wFAiDC;AAED;;GAEG;AACH,SAAgB,8BAA8B,CAA0I,OAAiE;IACvP,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,sCAAsC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtF,CAAC;AAFD,wEAEC;AAED;;;;;;GAMG;AACH,SAAgB,oDAAoD,CAAC,wBAAmG,EAAE,KAAiC;;IACzM,IAAI,OAAO,GAAG,uBAAuB,MAAA,wBAAwB,CAAC,IAAI,0CAAE,QAAQ,CAAC,SAAS,MAAM,MAAA,wBAAwB,CAAC,IAAI,0CAAE,QAAQ,CAAC,EAAE,IAAI,CAAC;IAE3I,IAAI,KAAK,KAAI,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,MAAM,CAAA,EAAE;QAC1B,OAAO,GAAG,GAAG,OAAO,uBAAuB,KAAK,GAAG,CAAC;KACrD;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AARD,oHAQC"}
package/test/CHANGELOG.md CHANGED
@@ -2,6 +2,33 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ # [6.0.0](https://github.com/dereekb/dbx-components/compare/v5.3.0-dev...v6.0.0) (2022-06-03)
6
+
7
+
8
+ ### Features
9
+
10
+ * added ContextGrantedModelRolesReader ([6fba1cc](https://github.com/dereekb/dbx-components/commit/6fba1cc637beeff55523df599eb88391352f9f58))
11
+ * added firebaseModelsService ([7432e55](https://github.com/dereekb/dbx-components/commit/7432e55111cec66a239856ecb2db6adfc9e9780d))
12
+ * added loadDocumentForKey to LimitedFirestoreDocumentAccessor ([96958b8](https://github.com/dereekb/dbx-components/commit/96958b89df62dc38136ac2dfcd2ce7c139b6099e))
13
+ * added modelType to FirestoreDocument ([deecb5d](https://github.com/dereekb/dbx-components/commit/deecb5df415ed9d99412c336ba65f4da572bbe44))
14
+ * added OnCallDeleteModel ([358189d](https://github.com/dereekb/dbx-components/commit/358189d6db6ef7d8db93d6dd881d29cc724dd083))
15
+ * added orderByDocumentId, startAtValue, endAtValue constraints ([c846fee](https://github.com/dereekb/dbx-components/commit/c846feef6c26a3818bb006a807b6e931b7b14eaf))
16
+
17
+
18
+ ### BREAKING CHANGES
19
+
20
+ * model type is now required on FirestoreDocument models
21
+
22
+
23
+
24
+ # [5.3.0](https://github.com/dereekb/dbx-components/compare/v5.2.1-dev...v5.3.0) (2022-05-30)
25
+
26
+
27
+
28
+ ## [5.2.1](https://github.com/dereekb/dbx-components/compare/v5.2.0-dev...v5.2.1) (2022-05-29)
29
+
30
+
31
+
5
32
  # [5.2.0](https://github.com/dereekb/dbx-components/compare/v5.1.0-dev...v5.2.0) (2022-05-29)
6
33
 
7
34
 
package/test/package.json CHANGED
@@ -1,27 +1,27 @@
1
1
  {
2
2
  "name": "@dereekb/firebase/test",
3
- "version": "5.2.0",
3
+ "version": "6.0.0",
4
4
  "main": "./src/index.js",
5
5
  "typings": "./src/index.d.ts",
6
6
  "dependencies": {},
7
7
  "peerDependencies": {
8
- "@dereekb/util/test": "5.2.0",
9
- "@dereekb/util": "5.2.0",
8
+ "@dereekb/util/test": "6.0.0",
9
+ "@dereekb/util": "6.0.0",
10
10
  "make-error": "^1.3.0",
11
11
  "extra-set": "^2.2.11",
12
- "@dereekb/firebase": "5.2.0",
12
+ "@dereekb/firebase": "6.0.0",
13
13
  "rxjs": "^7.0.0",
14
14
  "rxfire": "^6.0.3",
15
15
  "firebase": "^9.8.0",
16
- "@dereekb/rxjs": "5.2.0",
16
+ "@dereekb/rxjs": "6.0.0",
17
17
  "ms": "^3.0.0-canary.1",
18
- "@dereekb/date": "5.2.0",
18
+ "@dereekb/date": "6.0.0",
19
19
  "class-transformer": "^0.5.1",
20
20
  "date-fns": "^2.28.0",
21
21
  "class-validator": "^0.13.2",
22
22
  "date-fns-tz": "^1.3.0",
23
23
  "rrule": "git+https://git@github.com/dereekb/rrule.git#17adf5708d6567b4d01a3a8afd106261421ea492",
24
- "@dereekb/model": "5.2.0",
24
+ "@dereekb/model": "6.0.0",
25
25
  "tslib": "^2.0.0"
26
26
  }
27
27
  }
@@ -11,9 +11,9 @@ export interface TestingFirestoreAccessorDriver extends FirestoreAccessorDriver
11
11
  * Initializes fuzzed path names for the input collections. Returns the result of getFuzzedCollectionsNameMap().
12
12
  *
13
13
  * This initialization step is useful for the client, where the rules file needs to be updated to reflect the collection names properly in order to ensure rules are correct.
14
- * @param collectionPaths
14
+ * @param collectionNames
15
15
  */
16
- initWithCollectionNames(collectionPaths: string[]): Map<string, string>;
16
+ initWithCollectionNames(collectionNames: string[]): Map<string, string>;
17
17
  }
18
18
  export declare function makeTestingFirestoreAccesorDriver(driver: FirestoreAccessorDriver): TestingFirestoreAccessorDriver;
19
19
  /**
@@ -34,5 +34,5 @@ export interface TestingFirestoreContextExtension {
34
34
  drivers: TestingFirestoreDrivers;
35
35
  }
36
36
  export declare type TestFirestoreContext<C = FirestoreContext> = C & TestingFirestoreContextExtension;
37
- export declare type ClearTestFirestoreCollectionFunction = (collectionName: string, realCollectionPath: string) => Promise<void>;
37
+ export declare type ClearTestFirestoreCollectionFunction = (collectionName: string, realCollectionName: string) => Promise<void>;
38
38
  export declare function clearTestFirestoreContextCollections(context: TestFirestoreContext, clearCollection: ClearTestFirestoreCollectionFunction): Promise<void>;
@@ -30,8 +30,8 @@ function makeTestingFirestoreAccesorDriver(driver) {
30
30
  const fuzzedPath = fuzzedPathForPath(collectionId);
31
31
  return collectionGroup(f, fuzzedPath);
32
32
  };
33
- const initWithCollectionNames = (collectionPaths) => {
34
- collectionPaths.forEach((x) => fuzzedPathForPath(x));
33
+ const initWithCollectionNames = (collectionNames) => {
34
+ collectionNames.forEach((x) => fuzzedPathForPath(x));
35
35
  return fuzzedMap;
36
36
  };
37
37
  const injectedDriver = Object.assign(Object.assign({}, driver), { collection: fuzzedCollection, collectionGroup: fuzzedCollectionGroup, subcollection: fuzzedSubcollection, getFuzzedCollectionsNameMap: () => fuzzedMap, initWithCollectionNames });
@@ -1,5 +1,8 @@
1
1
  import { Maybe } from '@dereekb/util';
2
- import { CollectionReference, FirestoreCollection, FirestoreContext, AbstractFirestoreDocument, SingleItemFirestoreCollection, FirestoreCollectionWithParent, AbstractFirestoreDocumentWithParent, ExpectedFirestoreModelData, FirestoreModelData, CollectionGroup, FirestoreCollectionGroup } from '@dereekb/firebase';
2
+ import { CollectionReference, FirestoreCollection, FirestoreContext, AbstractFirestoreDocument, SingleItemFirestoreCollection, FirestoreCollectionWithParent, AbstractFirestoreDocumentWithParent, ExpectedFirestoreModelData, FirestoreModelData, CollectionGroup, FirestoreCollectionGroup, FirestoreModelIdentity } from '@dereekb/firebase';
3
+ import { GrantedReadRole } from '@dereekb/model';
4
+ export declare type MockItemTypes = typeof mockItemIdentity | typeof mockItemPrivateIdentity | typeof mockItemSubItemIdentity | typeof mockItemDeepSubItemIdentity;
5
+ export declare const mockItemIdentity: FirestoreModelIdentity<"mockItem">;
3
6
  /**
4
7
  * Converted data for a test item in our firestore collection.
5
8
  */
@@ -10,7 +13,9 @@ export interface MockItem {
10
13
  */
11
14
  test: boolean;
12
15
  }
16
+ export declare type MockItemRoles = GrantedReadRole | 'admin';
13
17
  export declare class MockItemDocument extends AbstractFirestoreDocument<MockItem, MockItemDocument> {
18
+ get modelIdentity(): FirestoreModelIdentity<"mockItem">;
14
19
  }
15
20
  /**
16
21
  * MockItem as it is stored into the database.
@@ -23,10 +28,6 @@ export declare type MockItemData = FirestoreModelData<MockItem, {
23
28
  */
24
29
  test?: Maybe<boolean>;
25
30
  }>;
26
- /**
27
- * Firestore collection path name.
28
- */
29
- export declare const mockItemCollectionPath = "test";
30
31
  /**
31
32
  * Used to build a FirestoreDataConverter. Fields are configured via configuration. See the SnapshotConverterFunctions for more info.
32
33
  */
@@ -45,6 +46,7 @@ export declare const mockItemConverter: import("@dereekb/firebase").SnapshotConv
45
46
  export declare function mockItemCollectionReference(context: FirestoreContext): CollectionReference<MockItem>;
46
47
  export declare type MockItemFirestoreCollection = FirestoreCollection<MockItem, MockItemDocument>;
47
48
  export declare function mockItemFirestoreCollection(firestoreContext: FirestoreContext): MockItemFirestoreCollection;
49
+ export declare const mockItemPrivateIdentity: FirestoreModelIdentity<"mockItemPrivate">;
48
50
  /**
49
51
  * Private data for each MockItem.
50
52
  *
@@ -54,16 +56,18 @@ export interface MockItemPrivate {
54
56
  comments?: Maybe<string>;
55
57
  createdAt: Date;
56
58
  }
59
+ export declare type MockItemPrivateRoles = GrantedReadRole | 'admin';
57
60
  /**
58
61
  * FirestoreDocument for MockItem
59
62
  */
60
63
  export declare class MockItemPrivateDocument extends AbstractFirestoreDocument<MockItemPrivate, MockItemPrivateDocument> {
64
+ get modelIdentity(): FirestoreModelIdentity<"mockItemPrivate">;
61
65
  }
62
66
  export declare type MockItemPrivateData = FirestoreModelData<MockItemPrivate, {}>;
63
67
  /**
64
68
  * Firestore collection path name.
65
69
  */
66
- export declare const mockItemPrivateCollectionPath = "private";
70
+ export declare const mockItemPrivateCollectionName = "mockitemprivate";
67
71
  export declare const mockItemPrivateIdentifier = "0";
68
72
  /**
69
73
  * Used to build a FirestoreDataConverter. Fields are configured via configuration. See the SnapshotConverterFunctions for more info.
@@ -85,6 +89,10 @@ export declare function mockItemPrivateCollectionReferenceFactory(context: Fires
85
89
  export declare type MockItemPrivateFirestoreCollection = SingleItemFirestoreCollection<MockItemPrivate, MockItem, MockItemPrivateDocument>;
86
90
  export declare type MockItemPrivateFirestoreCollectionFactory = (parent: MockItemDocument) => MockItemPrivateFirestoreCollection;
87
91
  export declare function mockItemPrivateFirestoreCollection(firestoreContext: FirestoreContext): MockItemPrivateFirestoreCollectionFactory;
92
+ export declare function mockItemPrivateCollectionReference(context: FirestoreContext): CollectionGroup<MockItemPrivate>;
93
+ export declare type MockItemPrivateFirestoreCollectionGroup = FirestoreCollectionGroup<MockItemPrivate, MockItemPrivateDocument>;
94
+ export declare function mockItemPrivateFirestoreCollectionGroup(firestoreContext: FirestoreContext): MockItemPrivateFirestoreCollectionGroup;
95
+ export declare const mockItemSubItemIdentity: FirestoreModelIdentity<"mockItemSub">;
88
96
  /**
89
97
  * Data for a sub item in our firestore collection.
90
98
  *
@@ -93,16 +101,14 @@ export declare function mockItemPrivateFirestoreCollection(firestoreContext: Fir
93
101
  export interface MockItemSubItem {
94
102
  value?: Maybe<number>;
95
103
  }
104
+ export declare type MockItemSubItemRoles = GrantedReadRole | 'admin';
96
105
  /**
97
106
  * FirestoreDocument for MockItem
98
107
  */
99
108
  export declare class MockItemSubItemDocument extends AbstractFirestoreDocumentWithParent<MockItem, MockItemSubItem, MockItemSubItemDocument> {
109
+ get modelIdentity(): FirestoreModelIdentity;
100
110
  }
101
111
  export declare type MockItemSubItemData = ExpectedFirestoreModelData<MockItemSubItem>;
102
- /**
103
- * Firestore collection path name.
104
- */
105
- export declare const mockItemSubItemCollectionPath = "sub";
106
112
  /**
107
113
  * Used to build a FirestoreDataConverter. Fields are configured via configuration. See the SnapshotConverterFunctions for more info.
108
114
  */
@@ -114,10 +120,31 @@ export declare function mockItemSubItemFirestoreCollection(firestoreContext: Fir
114
120
  export declare function mockItemSubItemCollectionReference(context: FirestoreContext): CollectionGroup<MockItemSubItem>;
115
121
  export declare type MockItemSubItemFirestoreCollectionGroup = FirestoreCollectionGroup<MockItemSubItem, MockItemSubItemDocument>;
116
122
  export declare function mockItemSubItemFirestoreCollectionGroup(firestoreContext: FirestoreContext): MockItemSubItemFirestoreCollectionGroup;
117
- export declare abstract class MockItemCollections {
118
- abstract readonly mockItem: MockItemFirestoreCollection;
119
- abstract readonly mockItemPrivate: MockItemPrivateFirestoreCollectionFactory;
120
- abstract readonly mockItemSubItem: MockItemSubItemFirestoreCollectionFactory;
121
- abstract readonly mockItemSubItemGroup: MockItemSubItemFirestoreCollectionGroup;
123
+ export declare const mockItemDeepSubItemIdentity: FirestoreModelIdentity<"mockItemDeepSub">;
124
+ /**
125
+ * Data for a sub item in our firestore collection.
126
+ *
127
+ * There may be an unlimited number of MockItemDeepSubItems for a MockSubItem.
128
+ */
129
+ export interface MockItemDeepSubItem {
130
+ value?: Maybe<number>;
131
+ }
132
+ export declare type MockItemDeepSubItemRoles = GrantedReadRole | 'admin';
133
+ /**
134
+ * FirestoreDocument for MockSubItem
135
+ */
136
+ export declare class MockItemDeepSubItemDocument extends AbstractFirestoreDocumentWithParent<MockItemSubItem, MockItemDeepSubItem, MockItemDeepSubItemDocument> {
137
+ get modelIdentity(): FirestoreModelIdentity<"mockItemDeepSub">;
122
138
  }
123
- export declare function makeMockItemCollections(firestoreContext: FirestoreContext): MockItemCollections;
139
+ export declare type MockItemDeepSubItemData = ExpectedFirestoreModelData<MockItemDeepSubItem>;
140
+ /**
141
+ * Used to build a FirestoreDataConverter. Fields are configured via configuration. See the SnapshotConverterFunctions for more info.
142
+ */
143
+ export declare const mockItemDeepSubItemConverter: import("@dereekb/firebase").SnapshotConverterFunctions<MockItemDeepSubItem, import("@dereekb/util").ReplaceType<MockItemDeepSubItem, object, any>>;
144
+ export declare function mockItemDeepSubItemCollectionReferenceFactory(context: FirestoreContext): (parent: MockItemSubItemDocument) => CollectionReference<MockItemDeepSubItem>;
145
+ export declare type MockItemDeepSubItemFirestoreCollection = FirestoreCollectionWithParent<MockItemDeepSubItem, MockItemSubItem, MockItemDeepSubItemDocument, MockItemSubItemDocument>;
146
+ export declare type MockItemDeepSubItemFirestoreCollectionFactory = (parent: MockItemSubItemDocument) => MockItemDeepSubItemFirestoreCollection;
147
+ export declare function mockItemDeepSubItemFirestoreCollection(firestoreContext: FirestoreContext): MockItemDeepSubItemFirestoreCollectionFactory;
148
+ export declare function mockItemDeepSubItemCollectionReference(context: FirestoreContext): CollectionGroup<MockItemDeepSubItem>;
149
+ export declare type MockItemDeepSubItemFirestoreCollectionGroup = FirestoreCollectionGroup<MockItemDeepSubItem, MockItemDeepSubItemDocument>;
150
+ export declare function mockItemDeepSubItemFirestoreCollectionGroup(firestoreContext: FirestoreContext): MockItemDeepSubItemFirestoreCollectionGroup;
@@ -4,12 +4,14 @@ import { MockItemFirestoreCollection, MockItem } from './firestore.mock.item';
4
4
  import { TestFirestoreContextFixture } from './firestore.mock';
5
5
  export declare class MockItemCollectionFixtureInstance {
6
6
  readonly fixture: MockItemCollectionFixture;
7
- readonly collections: import("./firestore.mock.item").MockItemCollections;
7
+ readonly collections: import("./firestore.mock.item.service").MockItemCollections;
8
8
  get collection(): CollectionReference<MockItem>;
9
9
  get firestoreCollection(): MockItemFirestoreCollection;
10
10
  get mockItemPrivateCollection(): import("./firestore.mock.item").MockItemPrivateFirestoreCollectionFactory;
11
11
  get mockItemSubItemCollection(): import("./firestore.mock.item").MockItemSubItemFirestoreCollectionFactory;
12
12
  get mockItemSubItemCollectionGroup(): import("./firestore.mock.item").MockItemSubItemFirestoreCollectionGroup;
13
+ get mockItemDeepSubItemCollection(): import("./firestore.mock.item").MockItemDeepSubItemFirestoreCollectionFactory;
14
+ get mockItemDeepSubItemCollectionGroup(): import("./firestore.mock.item").MockItemDeepSubItemFirestoreCollectionGroup;
13
15
  constructor(fixture: MockItemCollectionFixture);
14
16
  }
15
17
  /**