@dereekb/firebase 6.0.0 → 7.1.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 +28 -0
- package/package.json +6 -5
- package/src/lib/client/firestore/driver.query.js +1 -0
- package/src/lib/client/firestore/driver.query.js.map +1 -1
- package/src/lib/client/function/model.function.factory.d.ts +17 -8
- package/src/lib/client/function/model.function.factory.js +4 -0
- package/src/lib/client/function/model.function.factory.js.map +1 -1
- package/src/lib/common/firestore/accessor/accessor.d.ts +1 -0
- package/src/lib/common/firestore/accessor/accessor.js.map +1 -1
- package/src/lib/common/firestore/accessor/accessor.wrap.d.ts +23 -0
- package/src/lib/common/firestore/accessor/accessor.wrap.js +43 -0
- package/src/lib/common/firestore/accessor/accessor.wrap.js.map +1 -0
- package/src/lib/common/firestore/accessor/accessor.wrap.modify.d.ts +56 -0
- package/src/lib/common/firestore/accessor/accessor.wrap.modify.js +95 -0
- package/src/lib/common/firestore/accessor/accessor.wrap.modify.js.map +1 -0
- package/src/lib/common/firestore/accessor/document.d.ts +41 -15
- package/src/lib/common/firestore/accessor/document.js +25 -11
- package/src/lib/common/firestore/accessor/document.js.map +1 -1
- package/src/lib/common/firestore/accessor/document.utility.d.ts +4 -0
- package/src/lib/common/firestore/accessor/document.utility.js +3 -1
- package/src/lib/common/firestore/accessor/document.utility.js.map +1 -1
- package/src/lib/common/firestore/accessor/index.d.ts +2 -0
- package/src/lib/common/firestore/accessor/index.js +2 -0
- package/src/lib/common/firestore/accessor/index.js.map +1 -1
- package/src/lib/common/firestore/collection/collection.d.ts +37 -1
- package/src/lib/common/firestore/collection/collection.js.map +1 -1
- package/src/lib/common/firestore/query/constraint.d.ts +5 -0
- package/src/lib/common/firestore/query/constraint.js +8 -2
- package/src/lib/common/firestore/query/constraint.js.map +1 -1
- package/src/lib/common/firestore/snapshot/snapshot.d.ts +7 -4
- package/src/lib/common/firestore/snapshot/snapshot.field.d.ts +45 -5
- package/src/lib/common/firestore/snapshot/snapshot.field.js +67 -2
- package/src/lib/common/firestore/snapshot/snapshot.field.js.map +1 -1
- package/src/lib/common/firestore/snapshot/snapshot.js +2 -1
- package/src/lib/common/firestore/snapshot/snapshot.js.map +1 -1
- package/src/lib/common/firestore/types.d.ts +2 -2
- package/src/lib/common/function/action.d.ts +4 -0
- package/src/lib/common/model/function.d.ts +21 -7
- package/src/lib/common/model/function.js +17 -2
- package/src/lib/common/model/function.js.map +1 -1
- package/src/lib/common/model/model/model.loader.d.ts +3 -4
- package/src/lib/common/model/model/model.loader.js.map +1 -1
- package/src/lib/common/model/model.service.d.ts +27 -6
- package/src/lib/common/model/model.service.js +36 -31
- package/src/lib/common/model/model.service.js.map +1 -1
- package/src/lib/common/model/permission/permission.service.role.d.ts +13 -8
- package/src/lib/common/model/permission/permission.service.role.js +18 -0
- package/src/lib/common/model/permission/permission.service.role.js.map +1 -1
- package/test/CHANGELOG.md +19 -0
- package/test/package.json +8 -7
- package/test/src/lib/common/firestore.mock.item.d.ts +46 -2
- package/test/src/lib/common/firestore.mock.item.fixture.d.ts +2 -0
- package/test/src/lib/common/firestore.mock.item.fixture.js +6 -0
- package/test/src/lib/common/firestore.mock.item.fixture.js.map +1 -1
- package/test/src/lib/common/firestore.mock.item.js +67 -1
- package/test/src/lib/common/firestore.mock.item.js.map +1 -1
- package/test/src/lib/common/firestore.mock.item.service.d.ts +6 -1
- package/test/src/lib/common/firestore.mock.item.service.js +13 -1
- package/test/src/lib/common/firestore.mock.item.service.js.map +1 -1
- package/test/src/lib/common/test.driver.accessor.js +32 -7
- package/test/src/lib/common/test.driver.accessor.js.map +1 -1
- package/test/src/lib/common/test.driver.query.js +69 -0
- package/test/src/lib/common/test.driver.query.js.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,34 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
# [7.1.0](https://github.com/dereekb/dbx-components/compare/v7.0.1-dev...v7.1.0) (2022-06-06)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* added firestoreArray ([e852230](https://github.com/dereekb/dbx-components/commit/e85223077246c1755cdb1028deea7019a6c71206))
|
|
11
|
+
* added firestoreEncodedArray, firestoreUniqueArray ([4f7fc7c](https://github.com/dereekb/dbx-components/commit/4f7fc7ca274656ecdf13d69aa7d225f66a7f76da))
|
|
12
|
+
* added interceptAccessorFactory() ([9833539](https://github.com/dereekb/dbx-components/commit/98335398eaa6a3ee363bdf64a440d5438bbefb24))
|
|
13
|
+
* added loadDocumentForId() to FirestoreDocumentAccessor ([3728145](https://github.com/dereekb/dbx-components/commit/372814540064ff4b40be032d57ddda12a8698d53))
|
|
14
|
+
* added whereDocumentId() ([7f5f5b8](https://github.com/dereekb/dbx-components/commit/7f5f5b8a56b2e0ad2e43308cfd87b4f8b8503c59))
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
## [7.0.1](https://github.com/dereekb/dbx-components/compare/v7.0.0-dev...v7.0.1) (2022-06-05)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
# [7.0.0](https://github.com/dereekb/dbx-components/compare/v6.0.0-dev...v7.0.0) (2022-06-05)
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
### Features
|
|
26
|
+
|
|
27
|
+
* added FirestoreDocumentStore crud functions ([7786a40](https://github.com/dereekb/dbx-components/commit/7786a40f6033c2a1d5161805cde283dca7323db5))
|
|
28
|
+
* added onCallCreateModel ([84f7e72](https://github.com/dereekb/dbx-components/commit/84f7e72af20c1d0071feec3e46bae406d7fd5a26))
|
|
29
|
+
* added useModel to AbstractFirebaseNestContext ([29c1940](https://github.com/dereekb/dbx-components/commit/29c19402bff78d743d28ef88093757844f8ee5f7))
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
5
33
|
# [6.0.0](https://github.com/dereekb/dbx-components/compare/v5.3.0-dev...v6.0.0) (2022-06-03)
|
|
6
34
|
|
|
7
35
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dereekb/firebase",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.1.0",
|
|
4
4
|
"devDependencies": {
|
|
5
5
|
"@firebase/rules-unit-testing": "^2.0.0"
|
|
6
6
|
},
|
|
@@ -22,18 +22,19 @@
|
|
|
22
22
|
"rxjs": "^7.0.0",
|
|
23
23
|
"rxfire": "^6.0.3",
|
|
24
24
|
"firebase": "^9.8.0",
|
|
25
|
-
"@dereekb/util": "
|
|
25
|
+
"@dereekb/util": "7.1.0",
|
|
26
26
|
"make-error": "^1.3.0",
|
|
27
|
+
"ts-essentials": "^9.1.2",
|
|
27
28
|
"extra-set": "^2.2.11",
|
|
28
|
-
"@dereekb/rxjs": "
|
|
29
|
+
"@dereekb/rxjs": "7.1.0",
|
|
29
30
|
"ms": "^3.0.0-canary.1",
|
|
30
|
-
"@dereekb/date": "
|
|
31
|
+
"@dereekb/date": "7.1.0",
|
|
31
32
|
"class-transformer": "^0.5.1",
|
|
32
33
|
"date-fns": "^2.28.0",
|
|
33
34
|
"class-validator": "^0.13.2",
|
|
34
35
|
"date-fns-tz": "^1.3.0",
|
|
35
36
|
"rrule": "git+https://git@github.com/dereekb/rrule.git#17adf5708d6567b4d01a3a8afd106261421ea492",
|
|
36
|
-
"@dereekb/model": "
|
|
37
|
+
"@dereekb/model": "7.1.0",
|
|
37
38
|
"tslib": "^2.0.0"
|
|
38
39
|
}
|
|
39
40
|
}
|
|
@@ -18,6 +18,7 @@ exports.FIRESTORE_CLIENT_QUERY_CONSTRAINT_HANDLER_MAPPING = {
|
|
|
18
18
|
[constraint_1.FIRESTORE_ORDER_BY_QUERY_CONSTRAINT_TYPE]: (builder, data) => addConstraintToBuilder(builder, (0, firestore_1.orderBy)(data.fieldPath, data.directionStr)),
|
|
19
19
|
[constraint_1.FIRESTORE_ORDER_BY_DOCUMENT_ID_QUERY_CONSTRAINT_TYPE]: (builder, data) => addConstraintToBuilder(builder, (0, firestore_1.orderBy)((0, firestore_1.documentId)(), data.directionStr)),
|
|
20
20
|
[constraint_1.FIRESTORE_WHERE_QUERY_CONSTRAINT_TYPE]: (builder, data) => addConstraintToBuilder(builder, (0, firestore_1.where)(data.fieldPath, data.opStr, data.value)),
|
|
21
|
+
[constraint_1.FIRESTORE_WHERE_DOCUMENT_ID_QUERY_CONSTRAINT_TYPE]: (builder, data) => addConstraintToBuilder(builder, (0, firestore_1.where)((0, firestore_1.documentId)(), data.opStr, data.value)),
|
|
21
22
|
[constraint_1.FIRESTORE_OFFSET_QUERY_CONSTRAINT_TYPE]: undefined,
|
|
22
23
|
[constraint_1.FIRESTORE_START_AT_QUERY_CONSTRAINT_TYPE]: (builder, data) => addConstraintToBuilder(builder, (0, firestore_1.startAt)(data.snapshot)),
|
|
23
24
|
[constraint_1.FIRESTORE_START_AT_VALUE_QUERY_CONSTRAINT_TYPE]: (builder, data) => addConstraintToBuilder(builder, (0, firestore_1.startAt)(...data.fieldValues)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"driver.query.js","sourceRoot":"","sources":["../../../../../../../packages/firebase/src/lib/client/firestore/driver.query.ts"],"names":[],"mappings":";;;AAEA,kDAA2N;AAC3N,
|
|
1
|
+
{"version":3,"file":"driver.query.js","sourceRoot":"","sources":["../../../../../../../packages/firebase/src/lib/client/firestore/driver.query.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,36 +1,45 @@
|
|
|
1
1
|
import { MaybeNot } from '@dereekb/util';
|
|
2
2
|
import { Functions } from 'firebase/functions';
|
|
3
3
|
import { NonNever } from 'ts-essentials';
|
|
4
|
-
import { FirestoreModelIdentity, FirestoreModelNames } from '../../common';
|
|
4
|
+
import { FirestoreModelIdentity, FirestoreModelNames, OnCallCreateModelResult } from '../../common';
|
|
5
5
|
import { FirebaseFunctionTypeMap, FirebaseFunctionMap, FirebaseFunction } from './function';
|
|
6
6
|
import { FirebaseFunctionTypeConfigMap } from './function.factory';
|
|
7
7
|
export declare type ModelFirebaseCrudFunction<I> = FirebaseFunction<I, void>;
|
|
8
|
+
export declare type ModelFirebaseCreateFunction<I, O extends OnCallCreateModelResult = OnCallCreateModelResult> = FirebaseFunction<I, O>;
|
|
9
|
+
export declare type ModelFirebaseUpdateFunction<I> = ModelFirebaseCrudFunction<I>;
|
|
10
|
+
export declare type ModelFirebaseDeleteFunction<I> = ModelFirebaseCrudFunction<I>;
|
|
8
11
|
export declare type ModelFirebaseCrudFunctionTypeMap<T extends FirestoreModelIdentity = FirestoreModelIdentity> = {
|
|
9
12
|
[K in FirestoreModelNames<T>]: ModelFirebaseCrudFunctionTypeMapEntry;
|
|
10
13
|
};
|
|
11
|
-
export declare type ModelFirebaseCrudFunctionTypeMapEntry = MaybeNot | Partial<ModelFirebaseCrudFunctionUpdateTypeConfig & ModelFirebaseCrudFunctionDeleteTypeConfig>;
|
|
14
|
+
export declare type ModelFirebaseCrudFunctionTypeMapEntry = MaybeNot | Partial<ModelFirebaseCrudFunctionCreateTypeConfig & ModelFirebaseCrudFunctionUpdateTypeConfig & ModelFirebaseCrudFunctionDeleteTypeConfig>;
|
|
15
|
+
export declare type ModelFirebaseCrudFunctionCreateTypeConfig<I = unknown> = {
|
|
16
|
+
create: I;
|
|
17
|
+
};
|
|
12
18
|
export declare type ModelFirebaseCrudFunctionUpdateTypeConfig<I = unknown> = {
|
|
13
19
|
update: I;
|
|
14
20
|
};
|
|
15
21
|
export declare type ModelFirebaseCrudFunctionDeleteTypeConfig<I = unknown> = {
|
|
16
22
|
delete: I;
|
|
17
23
|
};
|
|
18
|
-
|
|
19
|
-
|
|
24
|
+
/**
|
|
25
|
+
* The configuration for a types map.
|
|
26
|
+
*
|
|
27
|
+
* The FirestoreModelIdentities that are allowed are passed too which add type checking to make sure we're passing the expected identities.
|
|
28
|
+
*/
|
|
29
|
+
export declare type ModelFirebaseCrudFunctionConfigMap<C extends ModelFirebaseCrudFunctionTypeMap<T>, T extends FirestoreModelIdentity> = NonNever<{
|
|
30
|
+
[K in FirestoreModelNames<T>]: C[K] extends null ? never : (keyof C[K])[];
|
|
20
31
|
}>;
|
|
21
|
-
export declare type ModelFirebaseFunctionTypeUpdateKey<T extends string> = `update${Capitalize<T>}`;
|
|
22
|
-
export declare type ModelFirebaseFunctionTypeFunctionKey<T extends string> = ModelFirebaseFunctionTypeUpdateKey<T>;
|
|
23
32
|
export declare type ModelFirebaseCrudFunctionMap<C extends ModelFirebaseCrudFunctionTypeMap> = ModelFirebaseCrudFunctionRawMap<C>;
|
|
24
33
|
export declare type ModelFirebaseCrudFunctionRawMap<C extends ModelFirebaseCrudFunctionTypeMap> = NonNever<{
|
|
25
34
|
[K in keyof C]: K extends string ? ModelFirebaseCrudFunctionMapEntry<K, C[K]> : never;
|
|
26
35
|
}>;
|
|
27
36
|
export declare type ModelFirebaseCrudFunctionName<T extends string, K extends string> = `${K}${Capitalize<T>}`;
|
|
28
37
|
export declare type ModelFirebaseCrudFunctionMapEntry<T extends string, E extends ModelFirebaseCrudFunctionTypeMapEntry> = E extends null ? never : {
|
|
29
|
-
[K in keyof E as K extends string ? ModelFirebaseCrudFunctionName<T, K> : never]: ModelFirebaseCrudFunction<E[K]>;
|
|
38
|
+
[K in keyof E as K extends string ? ModelFirebaseCrudFunctionName<T, K> : never]: K extends 'create' ? ModelFirebaseCreateFunction<E[K]> : ModelFirebaseCrudFunction<E[K]>;
|
|
30
39
|
};
|
|
31
40
|
export declare type ModelFirebaseFunctionMap<M extends FirebaseFunctionTypeMap, C extends ModelFirebaseCrudFunctionTypeMap> = FirebaseFunctionMap<M> & ModelFirebaseCrudFunctionMap<C>;
|
|
32
41
|
/**
|
|
33
42
|
* Used for building a FirebaseFunctionMap<M> for a specific Functions instance.
|
|
34
43
|
*/
|
|
35
44
|
export declare type ModelFirebaseFunctionMapFactory<M extends FirebaseFunctionTypeMap, U extends ModelFirebaseCrudFunctionTypeMap> = (functionsInstance: Functions) => ModelFirebaseFunctionMap<M, U>;
|
|
36
|
-
export declare function modelFirebaseFunctionMapFactory<M extends FirebaseFunctionTypeMap, U extends ModelFirebaseCrudFunctionTypeMap>(configMap: FirebaseFunctionTypeConfigMap<M>, crudConfigMap: ModelFirebaseCrudFunctionConfigMap<U>): ModelFirebaseFunctionMapFactory<M, U>;
|
|
45
|
+
export declare function modelFirebaseFunctionMapFactory<M extends FirebaseFunctionTypeMap, U extends ModelFirebaseCrudFunctionTypeMap>(configMap: FirebaseFunctionTypeConfigMap<M>, crudConfigMap: ModelFirebaseCrudFunctionConfigMap<U, FirestoreModelIdentity>): ModelFirebaseFunctionMapFactory<M, U>;
|
|
@@ -10,6 +10,7 @@ function modelFirebaseFunctionMapFactory(configMap, crudConfigMap) {
|
|
|
10
10
|
const functionFactory = (0, firebase_1.firebaseFunctionMapFactory)(configMap);
|
|
11
11
|
return (functionsInstance) => {
|
|
12
12
|
const functionMap = functionFactory(functionsInstance);
|
|
13
|
+
const _createFn = (0, util_1.cachedGetter)(() => (0, functions_1.httpsCallable)(functionsInstance, common_1.CREATE_MODEL_APP_FUNCTION_KEY));
|
|
13
14
|
const _updateFn = (0, util_1.cachedGetter)(() => (0, functions_1.httpsCallable)(functionsInstance, common_1.UPDATE_MODEL_APP_FUNCTION_KEY));
|
|
14
15
|
const _deleteFn = (0, util_1.cachedGetter)(() => (0, functions_1.httpsCallable)(functionsInstance, common_1.DELETE_MODEL_APP_FUNCTION_KEY));
|
|
15
16
|
const result = (0, util_1.build)({
|
|
@@ -19,6 +20,9 @@ function modelFirebaseFunctionMapFactory(configMap, crudConfigMap) {
|
|
|
19
20
|
const modelTypeSuffix = (0, util_1.capitalizeFirstLetter)(modelType);
|
|
20
21
|
const crudFunctions = new Set(config);
|
|
21
22
|
const modelTypeCruds = {};
|
|
23
|
+
if (crudFunctions.has('create')) {
|
|
24
|
+
modelTypeCruds[`create${modelTypeSuffix}`] = (0, function_callable_1.mapHttpsCallable)(_createFn(), { mapInput: (data) => ({ modelType, data }) });
|
|
25
|
+
}
|
|
22
26
|
if (crudFunctions.has('update')) {
|
|
23
27
|
modelTypeCruds[`update${modelTypeSuffix}`] = (0, function_callable_1.mapHttpsCallable)(_updateFn(), { mapInput: (data) => ({ modelType, data }) });
|
|
24
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.function.factory.js","sourceRoot":"","sources":["../../../../../../../packages/firebase/src/lib/client/function/model.function.factory.ts"],"names":[],"mappings":";;;AAAA,gDAA+D;AAC/D,wCAAqF;AACrF,kDAA8D;AAE9D,
|
|
1
|
+
{"version":3,"file":"model.function.factory.js","sourceRoot":"","sources":["../../../../../../../packages/firebase/src/lib/client/function/model.function.factory.ts"],"names":[],"mappings":";;;AAAA,gDAA+D;AAC/D,wCAAqF;AACrF,kDAA8D;AAE9D,yCAAmP;AAEnP,2DAAuD;AAwDvD,SAAgB,+BAA+B,CAAgF,SAA2C,EAAE,aAA4E;IACtP,MAAM,eAAe,GAAG,IAAA,qCAA0B,EAAC,SAAS,CAAC,CAAC;IAE9D,OAAO,CAAC,iBAA4B,EAAE,EAAE;QACtC,MAAM,WAAW,GAA2B,eAAe,CAAC,iBAAiB,CAAC,CAAC;QAE/E,MAAM,SAAS,GAAG,IAAA,mBAAY,EAAC,GAAG,EAAE,CAAC,IAAA,yBAAa,EAAC,iBAAiB,EAAE,sCAA6B,CAAC,CAAC,CAAC;QACtG,MAAM,SAAS,GAAG,IAAA,mBAAY,EAAC,GAAG,EAAE,CAAC,IAAA,yBAAa,EAAC,iBAAiB,EAAE,sCAA6B,CAAC,CAAC,CAAC;QACtG,MAAM,SAAS,GAAG,IAAA,mBAAY,EAAC,GAAG,EAAE,CAAC,IAAA,yBAAa,EAAC,iBAAiB,EAAE,sCAA6B,CAAC,CAAC,CAAC;QAEtG,MAAM,MAAM,GAAG,IAAA,YAAK,EAAiC;YACnD,IAAI,EAAE,WAAwD;YAC9D,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE;gBACX,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE;oBAC5D,MAAM,eAAe,GAAG,IAAA,4BAAqB,EAAC,SAAS,CAAC,CAAC;oBACzD,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,MAAkB,CAAC,CAAC;oBAClD,MAAM,cAAc,GAAG,EAAE,CAAC;oBAE1B,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;wBAC9B,cAAsB,CAAC,SAAS,eAAe,EAAE,CAAC,GAAG,IAAA,oCAAgB,EAAC,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAA8B,CAAA,EAAE,CAAC,CAAC;qBAC/J;oBAED,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;wBAC9B,cAAsB,CAAC,SAAS,eAAe,EAAE,CAAC,GAAG,IAAA,oCAAgB,EAAC,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAA8B,CAAA,EAAE,CAAC,CAAC;qBAC/J;oBAED,IAAI,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;wBAC9B,cAAsB,CAAC,SAAS,eAAe,EAAE,CAAC,GAAG,IAAA,oCAAgB,EAAC,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAA8B,CAAA,EAAE,CAAC,CAAC;qBAC/J;oBAED,2BAA2B;oBAC1B,CAAS,CAAC,SAAS,CAAC,GAAG,cAAc,CAAC;gBACzC,CAAC,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAtCD,0EAsCC"}
|
|
@@ -46,6 +46,7 @@ export interface FirestoreDocumentDataAccessor<T, D = DocumentData> extends Docu
|
|
|
46
46
|
*/
|
|
47
47
|
update(data: UpdateData<D>, params?: FirestoreDocumentUpdateParams): Promise<WriteResult | void>;
|
|
48
48
|
}
|
|
49
|
+
export declare type FirestoreDocumentDataAccessorSetFunction<T> = (data: PartialWithFieldValue<T> | WithFieldValue<T>, options?: SetOptions) => Promise<void | WriteResult>;
|
|
49
50
|
/**
|
|
50
51
|
* Contextual interface used for making a FirestoreDocumentModifier for a specific document.
|
|
51
52
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accessor.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase/src/lib/common/firestore/accessor/accessor.ts"],"names":[],"mappings":";;;AAAA,wCAA4C;AAC5C,wCAA6D;AAE7D,+BAAyD;
|
|
1
|
+
{"version":3,"file":"accessor.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase/src/lib/common/firestore/accessor/accessor.ts"],"names":[],"mappings":";;;AAAA,wCAA4C;AAC5C,wCAA6D;AAE7D,+BAAyD;AAgEzD,gBAAgB;AAChB;;;;;;;;GAQG;AACH,SAAgB,sBAAsB,CAAI,MAAuC,EAAE,OAAyB;IAC1G,OAAO,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,OAAO,CAAC,EAAE,IAAA,kBAAW,GAAE,CAAC,CAAC;AAClE,CAAC;AAFD,wDAEC;AAED;;;;;GAKG;AACH,SAAgB,mBAAmB,CAAI,OAAyB;IAC9D,OAAO,IAAA,UAAG,EAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;AACrC,CAAC;AAFD,kDAEC;AAcD,SAAgB,6BAA6B,CAAI,QAA0C;IACzF,OAAO,CAAC,IAAgB,EAAE,EAAE;QAC1B,OAAO,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACvC,IAAI,MAAM,EAAE;gBACV,MAAM,MAAM,GAAG,IAAA,4BAAqB,EAAC,IAAI,CAAC,CAAC;gBAC3C,OAAO,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;aAC9C;iBAAM;gBACL,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAyB,CAAC,CAAC;aAChD;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAXD,sEAWC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import { DocumentData, DocumentReference, DocumentSnapshot, PartialWithFieldValue, SetOptions, UpdateData, WithFieldValue, WriteResult } from '../types';
|
|
3
|
+
import { FirestoreDocumentDataAccessor, FirestoreDocumentDataAccessorFactory, FirestoreDocumentDeleteParams, FirestoreDocumentUpdateParams } from './accessor';
|
|
4
|
+
/**
|
|
5
|
+
* Abstract wrapper for a FirestoreDocumentDataAccessor.
|
|
6
|
+
*
|
|
7
|
+
* Forwards all non-overridden accessor functions to the wrapped accessor by default.
|
|
8
|
+
*/
|
|
9
|
+
export declare abstract class AbstractFirestoreDocumentDataAccessorWrapper<T, D = DocumentData> implements FirestoreDocumentDataAccessor<T, D> {
|
|
10
|
+
readonly accessor: FirestoreDocumentDataAccessor<T, D>;
|
|
11
|
+
constructor(accessor: FirestoreDocumentDataAccessor<T, D>);
|
|
12
|
+
get documentRef(): DocumentReference<T>;
|
|
13
|
+
stream(): Observable<DocumentSnapshot<T>>;
|
|
14
|
+
get(): Promise<DocumentSnapshot<T>>;
|
|
15
|
+
exists(): Promise<boolean>;
|
|
16
|
+
delete(params?: FirestoreDocumentDeleteParams): Promise<void | WriteResult>;
|
|
17
|
+
set(data: PartialWithFieldValue<T>, options: SetOptions): Promise<WriteResult | void>;
|
|
18
|
+
set(data: WithFieldValue<T>): Promise<WriteResult | void>;
|
|
19
|
+
update(data: UpdateData<D>, params?: FirestoreDocumentUpdateParams): Promise<void | WriteResult>;
|
|
20
|
+
}
|
|
21
|
+
export declare type WrapFirestoreDocumentDataAccessorFunction<T, D = DocumentData> = (input: FirestoreDocumentDataAccessor<T, D>) => FirestoreDocumentDataAccessor<T, D>;
|
|
22
|
+
export declare type InterceptAccessorFactoryFunction<T, D = DocumentData> = (input: FirestoreDocumentDataAccessorFactory<T, D>) => FirestoreDocumentDataAccessorFactory<T, D>;
|
|
23
|
+
export declare function interceptAccessorFactoryFunction<T, D = DocumentData>(wrap: WrapFirestoreDocumentDataAccessorFunction<T, D>): InterceptAccessorFactoryFunction<T, D>;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.interceptAccessorFactoryFunction = exports.AbstractFirestoreDocumentDataAccessorWrapper = void 0;
|
|
4
|
+
// MARK: Abstract Wrapper
|
|
5
|
+
/**
|
|
6
|
+
* Abstract wrapper for a FirestoreDocumentDataAccessor.
|
|
7
|
+
*
|
|
8
|
+
* Forwards all non-overridden accessor functions to the wrapped accessor by default.
|
|
9
|
+
*/
|
|
10
|
+
class AbstractFirestoreDocumentDataAccessorWrapper {
|
|
11
|
+
constructor(accessor) {
|
|
12
|
+
this.accessor = accessor;
|
|
13
|
+
}
|
|
14
|
+
get documentRef() {
|
|
15
|
+
return this.accessor.documentRef;
|
|
16
|
+
}
|
|
17
|
+
stream() {
|
|
18
|
+
return this.accessor.stream();
|
|
19
|
+
}
|
|
20
|
+
get() {
|
|
21
|
+
return this.accessor.get();
|
|
22
|
+
}
|
|
23
|
+
exists() {
|
|
24
|
+
return this.accessor.exists();
|
|
25
|
+
}
|
|
26
|
+
delete(params) {
|
|
27
|
+
return this.accessor.delete(params);
|
|
28
|
+
}
|
|
29
|
+
set(data, options) {
|
|
30
|
+
return this.accessor.set(data, options);
|
|
31
|
+
}
|
|
32
|
+
update(data, params) {
|
|
33
|
+
return this.update(data, params);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.AbstractFirestoreDocumentDataAccessorWrapper = AbstractFirestoreDocumentDataAccessorWrapper;
|
|
37
|
+
function interceptAccessorFactoryFunction(wrap) {
|
|
38
|
+
return (input) => ({
|
|
39
|
+
accessorFor: (ref) => wrap(input.accessorFor(ref))
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
exports.interceptAccessorFactoryFunction = interceptAccessorFactoryFunction;
|
|
43
|
+
//# sourceMappingURL=accessor.wrap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessor.wrap.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase/src/lib/common/firestore/accessor/accessor.wrap.ts"],"names":[],"mappings":";;;AAIA,yBAAyB;AACzB;;;;GAIG;AACH,MAAsB,4CAA4C;IAChE,YAAqB,QAA6C;QAA7C,aAAQ,GAAR,QAAQ,CAAqC;IAAG,CAAC;IAEtE,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;IACnC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IAChC,CAAC;IAED,GAAG;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,MAAsC;QAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;IAID,GAAG,CAAC,IAAkD,EAAE,OAAoB;QAC1E,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,OAAqB,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,CAAC,IAAmB,EAAE,MAAsC;QAChE,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;CACF;AAhCD,oGAgCC;AAMD,SAAgB,gCAAgC,CAAsB,IAAqD;IACzH,OAAO,CAAC,KAAiD,EAAE,EAAE,CAAC,CAAC;QAC7D,WAAW,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;KACnD,CAAC,CAAC;AACL,CAAC;AAJD,4EAIC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { ArrayOrValue, ModifierFunction } from '@dereekb/util';
|
|
2
|
+
import { UserRelated } from '../../../model/user';
|
|
3
|
+
import { DocumentReferenceRef } from '../reference';
|
|
4
|
+
import { DocumentData, SetOptions } from '../types';
|
|
5
|
+
import { FirestoreDocumentDataAccessor, FirestoreDocumentDataAccessorSetFunction } from './accessor';
|
|
6
|
+
import { AbstractFirestoreDocumentDataAccessorWrapper, InterceptAccessorFactoryFunction } from './accessor.wrap';
|
|
7
|
+
export declare type ModifyBeforeSetFistoreDataAccessorMode = 'always' | 'update' | 'set';
|
|
8
|
+
/**
|
|
9
|
+
* Input fora ModifyBeforeSetFirestoreDocumentDataAccessorWrapper
|
|
10
|
+
*/
|
|
11
|
+
export interface ModifyBeforeSetFistoreDataAccessorInput<T> extends DocumentReferenceRef<T> {
|
|
12
|
+
/**
|
|
13
|
+
* Data to pass to the modifyAndSet function.
|
|
14
|
+
*/
|
|
15
|
+
readonly data: Partial<T>;
|
|
16
|
+
/**
|
|
17
|
+
* Set options passed to the set function, if available.
|
|
18
|
+
*/
|
|
19
|
+
readonly options?: SetOptions;
|
|
20
|
+
}
|
|
21
|
+
export declare type ModifyBeforeSetModifierFunction<T> = ModifierFunction<ModifyBeforeSetFistoreDataAccessorInput<T>>;
|
|
22
|
+
export interface ModifyBeforeSetConfig<T extends object> {
|
|
23
|
+
/**
|
|
24
|
+
* When to modify the input data.
|
|
25
|
+
*/
|
|
26
|
+
readonly when: ModifyBeforeSetFistoreDataAccessorMode;
|
|
27
|
+
/**
|
|
28
|
+
* Modifier or array of modifier functions to apply to input data.
|
|
29
|
+
*/
|
|
30
|
+
readonly modifier: ArrayOrValue<ModifyBeforeSetModifierFunction<T>>;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* FirestoreDocumentDataAccessorWrapper that applies a modifier function to data being set. When the modifier functions are applied can be changed by the mode.
|
|
34
|
+
*/
|
|
35
|
+
export declare class ModifyBeforeSetFirestoreDocumentDataAccessorWrapper<T extends object, D = DocumentData> extends AbstractFirestoreDocumentDataAccessorWrapper<T, D> {
|
|
36
|
+
readonly config: ModifyBeforeSetConfig<T>;
|
|
37
|
+
readonly modifier: ModifierFunction<ModifyBeforeSetFistoreDataAccessorInput<T>>;
|
|
38
|
+
readonly set: FirestoreDocumentDataAccessorSetFunction<T>;
|
|
39
|
+
constructor(accessor: FirestoreDocumentDataAccessor<T, D>, config: ModifyBeforeSetConfig<T>);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Creates a ModifyBeforeSetModifierFunction<T> to copy the documentRef's id to the target field on the data.
|
|
43
|
+
*
|
|
44
|
+
* @param fieldName
|
|
45
|
+
* @returns
|
|
46
|
+
*/
|
|
47
|
+
export declare function copyDocumentIdToFieldModifierFunction<T extends object>(fieldName: keyof T): ModifyBeforeSetModifierFunction<T>;
|
|
48
|
+
export declare function modifyBeforeSetInterceptAccessorFactoryFunction<T extends object, D = DocumentData>(config: ModifyBeforeSetConfig<T>): InterceptAccessorFactoryFunction<T, D>;
|
|
49
|
+
export declare function copyDocumentIdForUserRelatedModifierFunction<T extends UserRelated>(): ModifyBeforeSetModifierFunction<T>;
|
|
50
|
+
/**
|
|
51
|
+
* Returns a pre-configured ModifyBeforeSetConfig<T> for UserRelated models
|
|
52
|
+
* @returns
|
|
53
|
+
*/
|
|
54
|
+
export declare function copyUserRelatedDataModifierConfig<T extends UserRelated>(): ModifyBeforeSetConfig<T>;
|
|
55
|
+
export declare const COPY_USER_RELATED_DATA_ACCESSOR_FACTORY_FUNCTION: import("@dereekb/util").CachedFactoryWithInput<InterceptAccessorFactoryFunction<UserRelated, DocumentData>, unknown>;
|
|
56
|
+
export declare function copyUserRelatedDataAccessorFactoryFunction<T extends UserRelated, D = DocumentData>(): InterceptAccessorFactoryFunction<T, D>;
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.copyUserRelatedDataAccessorFactoryFunction = exports.COPY_USER_RELATED_DATA_ACCESSOR_FACTORY_FUNCTION = exports.copyUserRelatedDataModifierConfig = exports.copyDocumentIdForUserRelatedModifierFunction = exports.modifyBeforeSetInterceptAccessorFactoryFunction = exports.copyDocumentIdToFieldModifierFunction = exports.ModifyBeforeSetFirestoreDocumentDataAccessorWrapper = void 0;
|
|
4
|
+
const util_1 = require("@dereekb/util");
|
|
5
|
+
const accessor_wrap_1 = require("./accessor.wrap");
|
|
6
|
+
/**
|
|
7
|
+
* FirestoreDocumentDataAccessorWrapper that applies a modifier function to data being set. When the modifier functions are applied can be changed by the mode.
|
|
8
|
+
*/
|
|
9
|
+
class ModifyBeforeSetFirestoreDocumentDataAccessorWrapper extends accessor_wrap_1.AbstractFirestoreDocumentDataAccessorWrapper {
|
|
10
|
+
constructor(accessor, config) {
|
|
11
|
+
super(accessor);
|
|
12
|
+
this.config = config;
|
|
13
|
+
const when = config.when;
|
|
14
|
+
this.modifier = (0, util_1.mergeModifiers)((0, util_1.asArray)(config.modifier));
|
|
15
|
+
let setFn;
|
|
16
|
+
const modifyAndSet = (data, options) => {
|
|
17
|
+
const copy = Object.assign({}, data);
|
|
18
|
+
const input = {
|
|
19
|
+
data: copy,
|
|
20
|
+
documentRef: this.documentRef,
|
|
21
|
+
options
|
|
22
|
+
};
|
|
23
|
+
this.modifier(input);
|
|
24
|
+
return super.set(input.data, options);
|
|
25
|
+
};
|
|
26
|
+
switch (when) {
|
|
27
|
+
case 'always':
|
|
28
|
+
setFn = modifyAndSet;
|
|
29
|
+
break;
|
|
30
|
+
case 'set':
|
|
31
|
+
setFn = (data, options) => {
|
|
32
|
+
const isSetForNewModel = Boolean(!options);
|
|
33
|
+
if (isSetForNewModel) {
|
|
34
|
+
return modifyAndSet(data);
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
return super.set(data, options);
|
|
38
|
+
}
|
|
39
|
+
};
|
|
40
|
+
break;
|
|
41
|
+
case 'update':
|
|
42
|
+
setFn = (data, options) => {
|
|
43
|
+
const isUpdateForExistingModel = options && (Boolean(options.mergeFields) || Boolean(options.merge));
|
|
44
|
+
if (isUpdateForExistingModel) {
|
|
45
|
+
return modifyAndSet(data);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
return super.set(data, options);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
break;
|
|
52
|
+
}
|
|
53
|
+
this.set = setFn;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.ModifyBeforeSetFirestoreDocumentDataAccessorWrapper = ModifyBeforeSetFirestoreDocumentDataAccessorWrapper;
|
|
57
|
+
// MARK: Modifier Functions
|
|
58
|
+
/**
|
|
59
|
+
* Creates a ModifyBeforeSetModifierFunction<T> to copy the documentRef's id to the target field on the data.
|
|
60
|
+
*
|
|
61
|
+
* @param fieldName
|
|
62
|
+
* @returns
|
|
63
|
+
*/
|
|
64
|
+
function copyDocumentIdToFieldModifierFunction(fieldName) {
|
|
65
|
+
return ({ data, documentRef }) => {
|
|
66
|
+
data[fieldName] = documentRef.id; // copy the id to the target field
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
exports.copyDocumentIdToFieldModifierFunction = copyDocumentIdToFieldModifierFunction;
|
|
70
|
+
function modifyBeforeSetInterceptAccessorFactoryFunction(config) {
|
|
71
|
+
return (0, accessor_wrap_1.interceptAccessorFactoryFunction)((accessor) => new ModifyBeforeSetFirestoreDocumentDataAccessorWrapper(accessor, config));
|
|
72
|
+
}
|
|
73
|
+
exports.modifyBeforeSetInterceptAccessorFactoryFunction = modifyBeforeSetInterceptAccessorFactoryFunction;
|
|
74
|
+
// MARK: Templates
|
|
75
|
+
function copyDocumentIdForUserRelatedModifierFunction() {
|
|
76
|
+
return copyDocumentIdToFieldModifierFunction('uid');
|
|
77
|
+
}
|
|
78
|
+
exports.copyDocumentIdForUserRelatedModifierFunction = copyDocumentIdForUserRelatedModifierFunction;
|
|
79
|
+
/**
|
|
80
|
+
* Returns a pre-configured ModifyBeforeSetConfig<T> for UserRelated models
|
|
81
|
+
* @returns
|
|
82
|
+
*/
|
|
83
|
+
function copyUserRelatedDataModifierConfig() {
|
|
84
|
+
return {
|
|
85
|
+
when: 'set',
|
|
86
|
+
modifier: copyDocumentIdForUserRelatedModifierFunction()
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
exports.copyUserRelatedDataModifierConfig = copyUserRelatedDataModifierConfig;
|
|
90
|
+
exports.COPY_USER_RELATED_DATA_ACCESSOR_FACTORY_FUNCTION = (0, util_1.cachedGetter)(() => modifyBeforeSetInterceptAccessorFactoryFunction(copyUserRelatedDataModifierConfig()));
|
|
91
|
+
function copyUserRelatedDataAccessorFactoryFunction() {
|
|
92
|
+
return (0, exports.COPY_USER_RELATED_DATA_ACCESSOR_FACTORY_FUNCTION)();
|
|
93
|
+
}
|
|
94
|
+
exports.copyUserRelatedDataAccessorFactoryFunction = copyUserRelatedDataAccessorFactoryFunction;
|
|
95
|
+
//# sourceMappingURL=accessor.wrap.modify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessor.wrap.modify.js","sourceRoot":"","sources":["../../../../../../../../packages/firebase/src/lib/common/firestore/accessor/accessor.wrap.modify.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,32 +1,39 @@
|
|
|
1
|
-
import { FirestoreModelName } from './../collection/collection';
|
|
2
1
|
import { Observable } from 'rxjs';
|
|
3
2
|
import { FirestoreAccessorDriverRef } from '../driver/accessor';
|
|
3
|
+
import { FirestoreModelId, FirestoreModelIdRef, FirestoreModelKey, FirestoreModelKeyRef, FirestoreModelName } from './../collection/collection';
|
|
4
4
|
import { DocumentReference, CollectionReference, Transaction, WriteBatch, DocumentSnapshot, SnapshotOptions, WriteResult } from '../types';
|
|
5
5
|
import { FirestoreDocumentDataAccessor } from './accessor';
|
|
6
6
|
import { CollectionReferenceRef, DocumentReferenceRef, FirestoreContextReference } from '../reference';
|
|
7
7
|
import { FirestoreDocumentContext } from './context';
|
|
8
|
-
import { ModelKey } from '@dereekb/util';
|
|
9
8
|
import { FirestoreModelNameRef, FirestoreModelIdentity, FirestoreModelIdentityRef } from '../collection/collection';
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
import { InterceptAccessorFactoryFunction } from './accessor.wrap';
|
|
10
|
+
export interface FirestoreDocument<T, M extends FirestoreModelName = FirestoreModelName> extends DocumentReferenceRef<T>, CollectionReferenceRef<T>, FirestoreModelIdentityRef<M>, FirestoreModelNameRef<M>, FirestoreModelKeyRef, FirestoreModelIdRef {
|
|
11
|
+
readonly accessor: FirestoreDocumentDataAccessor<T>;
|
|
12
12
|
readonly id: string;
|
|
13
13
|
}
|
|
14
14
|
/**
|
|
15
15
|
* Abstract FirestoreDocument implementation that extends a FirestoreDocumentDataAccessor.
|
|
16
16
|
*/
|
|
17
|
-
export declare abstract class AbstractFirestoreDocument<T, D extends AbstractFirestoreDocument<T, any,
|
|
18
|
-
readonly accessor:
|
|
17
|
+
export declare abstract class AbstractFirestoreDocument<T, D extends AbstractFirestoreDocument<T, any, M>, M extends FirestoreModelName = FirestoreModelName> implements FirestoreDocument<T>, LimitedFirestoreDocumentAccessorRef<T, D>, CollectionReferenceRef<T> {
|
|
18
|
+
readonly accessor: FirestoreDocumentDataAccessor<T>;
|
|
19
19
|
readonly documentAccessor: LimitedFirestoreDocumentAccessor<T, D>;
|
|
20
20
|
readonly stream$: Observable<DocumentSnapshot<T>>;
|
|
21
21
|
readonly data$: Observable<T>;
|
|
22
|
-
constructor(accessor:
|
|
22
|
+
constructor(accessor: FirestoreDocumentDataAccessor<T>, documentAccessor: LimitedFirestoreDocumentAccessor<T, D>);
|
|
23
23
|
abstract get modelIdentity(): FirestoreModelIdentity<M>;
|
|
24
24
|
get modelType(): M;
|
|
25
|
-
get id():
|
|
25
|
+
get id(): FirestoreModelId;
|
|
26
|
+
get key(): FirestoreModelKey;
|
|
26
27
|
get documentRef(): DocumentReference<T>;
|
|
27
28
|
get collection(): CollectionReference<T>;
|
|
28
29
|
snapshot(): Promise<DocumentSnapshot<T>>;
|
|
29
30
|
snapshotData(options?: SnapshotOptions): Promise<T | undefined>;
|
|
31
|
+
/**
|
|
32
|
+
* Creates or updates the existing model using the accessor's set functionality.
|
|
33
|
+
*
|
|
34
|
+
* @param data
|
|
35
|
+
* @returns
|
|
36
|
+
*/
|
|
30
37
|
createOrUpdate(data: Partial<T>): Promise<WriteResult | void>;
|
|
31
38
|
}
|
|
32
39
|
export interface LimitedFirestoreDocumentAccessorRef<T, D extends FirestoreDocument<T> = FirestoreDocument<T>, A extends LimitedFirestoreDocumentAccessor<T, D> = LimitedFirestoreDocumentAccessor<T, D>> {
|
|
@@ -52,13 +59,13 @@ export interface LimitedFirestoreDocumentAccessor<T, D extends FirestoreDocument
|
|
|
52
59
|
*
|
|
53
60
|
* @param ref
|
|
54
61
|
*/
|
|
55
|
-
loadDocumentForKey(fullPath:
|
|
62
|
+
loadDocumentForKey(fullPath: FirestoreModelKey): D;
|
|
56
63
|
/**
|
|
57
64
|
* Creates a document ref with a key/full path.
|
|
58
65
|
*
|
|
59
66
|
* @param ref
|
|
60
67
|
*/
|
|
61
|
-
documentRefForKey(fullPath:
|
|
68
|
+
documentRefForKey(fullPath: FirestoreModelKey): DocumentReference<T>;
|
|
62
69
|
}
|
|
63
70
|
export interface FirestoreDocumentAccessor<T, D extends FirestoreDocument<T> = FirestoreDocument<T>> extends LimitedFirestoreDocumentAccessor<T, D>, CollectionReferenceRef<T>, FirestoreAccessorDriverRef {
|
|
64
71
|
readonly databaseContext: FirestoreDocumentContext<T>;
|
|
@@ -71,14 +78,29 @@ export interface FirestoreDocumentAccessor<T, D extends FirestoreDocument<T> = F
|
|
|
71
78
|
*
|
|
72
79
|
* @param ref
|
|
73
80
|
*/
|
|
74
|
-
|
|
81
|
+
loadDocumentForId(id: FirestoreModelId): D;
|
|
82
|
+
/**
|
|
83
|
+
* Creates a document ref relative to the current context and given the input path.
|
|
84
|
+
*
|
|
85
|
+
* @param path
|
|
86
|
+
* @param pathSegments
|
|
87
|
+
*/
|
|
88
|
+
documentRefForId(id: FirestoreModelId): DocumentReference<T>;
|
|
89
|
+
/**
|
|
90
|
+
* Loads a document from the datastore with the given id/path.
|
|
91
|
+
*
|
|
92
|
+
* @deprecated use loadDocumentForId instead. Will be removed in the future.
|
|
93
|
+
* @param ref
|
|
94
|
+
*/
|
|
95
|
+
loadDocumentForPath(id: FirestoreModelId): D;
|
|
75
96
|
/**
|
|
76
97
|
* Creates a document ref relative to the current context and given the input path.
|
|
77
98
|
*
|
|
99
|
+
* @deprecated use documentRefForId instead. Will be removed in the future.
|
|
78
100
|
* @param path
|
|
79
101
|
* @param pathSegments
|
|
80
102
|
*/
|
|
81
|
-
documentRefForPath(
|
|
103
|
+
documentRefForPath(id: FirestoreModelId): DocumentReference<T>;
|
|
82
104
|
}
|
|
83
105
|
/**
|
|
84
106
|
* Used to generate a FirestoreDocument from an input FirestoreDocumentDataAccessor instance.
|
|
@@ -103,6 +125,10 @@ export interface LimitedFirestoreDocumentAccessorFactory<T, D extends FirestoreD
|
|
|
103
125
|
* FirestoreDocumentAccessor configuration.
|
|
104
126
|
*/
|
|
105
127
|
export interface LimitedFirestoreDocumentAccessorFactoryConfig<T, D extends FirestoreDocument<T> = FirestoreDocument<T>> extends FirestoreContextReference, FirestoreAccessorDriverRef {
|
|
128
|
+
/**
|
|
129
|
+
* Optional InterceptAccessorFactoryFunction to intercept/return a modified accessor factory.
|
|
130
|
+
*/
|
|
131
|
+
readonly accessorFactory?: InterceptAccessorFactoryFunction<T>;
|
|
106
132
|
readonly makeDocument: FirestoreDocumentFactoryFunction<T, D>;
|
|
107
133
|
}
|
|
108
134
|
export declare function limitedFirestoreDocumentAccessorFactory<T, D extends FirestoreDocument<T> = FirestoreDocument<T>>(config: LimitedFirestoreDocumentAccessorFactoryConfig<T, D>): LimitedFirestoreDocumentAccessorFactoryFunction<T, D>;
|
|
@@ -147,12 +173,12 @@ export interface FirestoreDocumentAccessorContextExtension<T, D extends Firestor
|
|
|
147
173
|
}
|
|
148
174
|
export declare function firestoreDocumentAccessorContextExtension<T, D extends FirestoreDocument<T> = FirestoreDocument<T>>({ documentAccessor, firestoreAccessorDriver }: FirestoreDocumentAccessorContextExtensionConfig<T, D>): FirestoreDocumentAccessorContextExtension<T, D>;
|
|
149
175
|
export declare function firestoreDocumentAccessorContextExtension<T, D extends FirestoreDocument<T> = FirestoreDocument<T>>({ documentAccessor, firestoreAccessorDriver }: LimitedFirestoreDocumentAccessorContextExtensionConfig<T, D>): LimitedFirestoreDocumentAccessorContextExtension<T, D>;
|
|
150
|
-
export interface FirestoreDocumentWithParent<P, T
|
|
176
|
+
export interface FirestoreDocumentWithParent<P, T> extends FirestoreDocument<T> {
|
|
151
177
|
readonly parent: DocumentReference<P>;
|
|
152
178
|
}
|
|
153
|
-
export declare abstract class AbstractFirestoreDocumentWithParent<P, T, D extends AbstractFirestoreDocument<T, any
|
|
179
|
+
export declare abstract class AbstractFirestoreDocumentWithParent<P, T, D extends AbstractFirestoreDocument<T, any>> extends AbstractFirestoreDocument<T, D> implements FirestoreDocumentWithParent<P, T> {
|
|
154
180
|
get parent(): DocumentReference<P>;
|
|
155
|
-
constructor(accessor:
|
|
181
|
+
constructor(accessor: FirestoreDocumentDataAccessor<T>, documentAccessor: LimitedFirestoreDocumentAccessor<T, D>);
|
|
156
182
|
}
|
|
157
183
|
export interface FirestoreSingleDocumentAccessor<T, D extends FirestoreDocument<T> = FirestoreDocument<T>> {
|
|
158
184
|
loadDocument(): D;
|