@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.
- package/CHANGELOG.md +32 -0
- package/package.json +5 -5
- package/src/lib/client/firestore/driver.accessor.js +1 -0
- package/src/lib/client/firestore/driver.accessor.js.map +1 -1
- package/src/lib/client/firestore/driver.query.js +5 -1
- package/src/lib/client/firestore/driver.query.js.map +1 -1
- package/src/lib/client/function/function.callable.d.ts +13 -0
- package/src/lib/client/function/function.callable.js +22 -0
- package/src/lib/client/function/function.callable.js.map +1 -0
- package/src/lib/client/function/index.d.ts +2 -0
- package/src/lib/client/function/index.js +2 -0
- package/src/lib/client/function/index.js.map +1 -1
- package/src/lib/client/function/model.function.factory.d.ts +36 -0
- package/src/lib/client/function/model.function.factory.js +37 -0
- package/src/lib/client/function/model.function.factory.js.map +1 -0
- package/src/lib/common/auth/auth.context.d.ts +33 -0
- package/src/lib/common/auth/auth.context.js +3 -0
- package/src/lib/common/auth/auth.context.js.map +1 -0
- package/src/lib/common/auth/auth.d.ts +9 -0
- package/src/lib/common/auth/index.d.ts +1 -0
- package/src/lib/common/auth/index.js +1 -0
- package/src/lib/common/auth/index.js.map +1 -1
- package/src/lib/common/firestore/accessor/document.d.ts +24 -8
- package/src/lib/common/firestore/accessor/document.js +17 -9
- package/src/lib/common/firestore/accessor/document.js.map +1 -1
- package/src/lib/common/firestore/collection/collection.d.ts +60 -0
- package/src/lib/common/firestore/collection/collection.js +14 -1
- package/src/lib/common/firestore/collection/collection.js.map +1 -1
- package/src/lib/common/firestore/driver/accessor.d.ts +2 -0
- package/src/lib/common/firestore/driver/query.d.ts +4 -2
- package/src/lib/common/firestore/driver/query.handler.d.ts +1 -1
- package/src/lib/common/firestore/driver/query.handler.js +3 -2
- package/src/lib/common/firestore/driver/query.handler.js.map +1 -1
- package/src/lib/common/firestore/query/constraint.d.ts +21 -3
- package/src/lib/common/firestore/query/constraint.js +20 -2
- package/src/lib/common/firestore/query/constraint.js.map +1 -1
- package/src/lib/common/firestore/query/constraint.template.d.ts +16 -0
- package/src/lib/common/firestore/query/constraint.template.js +27 -0
- package/src/lib/common/firestore/query/constraint.template.js.map +1 -0
- package/src/lib/common/firestore/query/index.d.ts +1 -0
- package/src/lib/common/firestore/query/index.js +1 -0
- package/src/lib/common/firestore/query/index.js.map +1 -1
- package/src/lib/common/firestore/reference.d.ts +7 -1
- package/src/lib/common/firestore/types.d.ts +8 -5
- package/src/lib/common/firestore/types.js.map +1 -1
- package/src/lib/common/index.d.ts +1 -0
- package/src/lib/common/index.js +1 -0
- package/src/lib/common/index.js.map +1 -1
- package/src/lib/common/model/context.d.ts +16 -0
- package/src/lib/common/model/context.js +3 -0
- package/src/lib/common/model/context.js.map +1 -0
- package/src/lib/common/model/function.d.ts +15 -0
- package/src/lib/common/model/function.js +12 -0
- package/src/lib/common/model/function.js.map +1 -0
- package/src/lib/common/model/index.d.ts +5 -0
- package/src/lib/common/model/index.js +9 -0
- package/src/lib/common/model/index.js.map +1 -0
- package/src/lib/common/model/model/index.d.ts +1 -0
- package/src/lib/common/model/model/index.js +5 -0
- package/src/lib/common/model/model/index.js.map +1 -0
- package/src/lib/common/model/model/model.loader.d.ts +30 -0
- package/src/lib/common/model/model/model.loader.js +21 -0
- package/src/lib/common/model/model/model.loader.js.map +1 -0
- package/src/lib/common/model/model.service.d.ts +56 -0
- package/src/lib/common/model/model.service.js +111 -0
- package/src/lib/common/model/model.service.js.map +1 -0
- package/src/lib/common/model/permission/index.d.ts +4 -0
- package/src/lib/common/model/permission/index.js +8 -0
- package/src/lib/common/model/permission/index.js.map +1 -0
- package/src/lib/common/model/permission/permission.context.d.ts +9 -0
- package/src/lib/common/model/permission/permission.context.js +3 -0
- package/src/lib/common/model/permission/permission.context.js.map +1 -0
- package/src/lib/common/model/permission/permission.d.ts +11 -0
- package/src/lib/common/model/permission/permission.js +3 -0
- package/src/lib/common/model/permission/permission.js.map +1 -0
- package/src/lib/common/model/permission/permission.service.d.ts +24 -0
- package/src/lib/common/model/permission/permission.service.js +48 -0
- package/src/lib/common/model/permission/permission.service.js.map +1 -0
- package/src/lib/common/model/permission/permission.service.role.d.ts +40 -0
- package/src/lib/common/model/permission/permission.service.role.js +70 -0
- package/src/lib/common/model/permission/permission.service.role.js.map +1 -0
- package/test/CHANGELOG.md +27 -0
- package/test/package.json +7 -7
- package/test/src/lib/common/firestore.d.ts +3 -3
- package/test/src/lib/common/firestore.js +2 -2
- package/test/src/lib/common/firestore.mock.item.d.ts +43 -16
- package/test/src/lib/common/firestore.mock.item.fixture.d.ts +3 -1
- package/test/src/lib/common/firestore.mock.item.fixture.js +12 -6
- package/test/src/lib/common/firestore.mock.item.fixture.js.map +1 -1
- package/test/src/lib/common/firestore.mock.item.js +85 -27
- package/test/src/lib/common/firestore.mock.item.js.map +1 -1
- package/test/src/lib/common/firestore.mock.item.query.d.ts +20 -1
- package/test/src/lib/common/firestore.mock.item.query.js +22 -1
- package/test/src/lib/common/firestore.mock.item.query.js.map +1 -1
- package/test/src/lib/common/firestore.mock.item.service.d.ts +40 -0
- package/test/src/lib/common/firestore.mock.item.service.js +62 -0
- package/test/src/lib/common/firestore.mock.item.service.js.map +1 -0
- package/test/src/lib/common/index.d.ts +1 -0
- package/test/src/lib/common/index.js +1 -0
- package/test/src/lib/common/index.js.map +1 -1
- package/test/src/lib/common/test.driver.accessor.js +77 -24
- package/test/src/lib/common/test.driver.accessor.js.map +1 -1
- package/test/src/lib/common/test.driver.query.js +138 -75
- package/test/src/lib/common/test.driver.query.js.map +1 -1
- package/test/src/lib/common/test.iterator.js +1 -0
- 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,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 @@
|
|
|
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 @@
|
|
|
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": "
|
|
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": "
|
|
9
|
-
"@dereekb/util": "
|
|
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": "
|
|
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": "
|
|
16
|
+
"@dereekb/rxjs": "6.0.0",
|
|
17
17
|
"ms": "^3.0.0-canary.1",
|
|
18
|
-
"@dereekb/date": "
|
|
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": "
|
|
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
|
|
14
|
+
* @param collectionNames
|
|
15
15
|
*/
|
|
16
|
-
initWithCollectionNames(
|
|
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,
|
|
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 = (
|
|
34
|
-
|
|
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
|
|
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
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
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
|
|
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
|
/**
|