@expo/entity 0.38.0 → 0.40.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/build/AuthorizationResultBasedEntityAssociationLoader.d.ts +99 -0
- package/build/AuthorizationResultBasedEntityAssociationLoader.js +124 -0
- package/build/AuthorizationResultBasedEntityAssociationLoader.js.map +1 -0
- package/build/AuthorizationResultBasedEntityLoader.d.ts +1 -1
- package/build/AuthorizationResultBasedEntityLoader.js.map +1 -1
- package/build/{EntityMutator.d.ts → AuthorizationResultBasedEntityMutator.d.ts} +5 -17
- package/build/{EntityMutator.js → AuthorizationResultBasedEntityMutator.js} +22 -48
- package/build/AuthorizationResultBasedEntityMutator.js.map +1 -0
- package/build/EnforcingEntityAssociationLoader.d.ts +79 -0
- package/build/EnforcingEntityAssociationLoader.js +62 -0
- package/build/EnforcingEntityAssociationLoader.js.map +1 -0
- package/build/EnforcingEntityCreator.d.ts +24 -0
- package/build/EnforcingEntityCreator.js +32 -0
- package/build/EnforcingEntityCreator.js.map +1 -0
- package/build/EnforcingEntityDeleter.d.ts +17 -0
- package/build/EnforcingEntityDeleter.js +22 -0
- package/build/EnforcingEntityDeleter.js.map +1 -0
- package/build/EnforcingEntityUpdater.d.ts +24 -0
- package/build/EnforcingEntityUpdater.js +32 -0
- package/build/EnforcingEntityUpdater.js.map +1 -0
- package/build/Entity.d.ts +8 -12
- package/build/Entity.js +9 -34
- package/build/Entity.js.map +1 -1
- package/build/EntityAssociationLoader.d.ts +12 -91
- package/build/EntityAssociationLoader.js +20 -126
- package/build/EntityAssociationLoader.js.map +1 -1
- package/build/EntityCompanionProvider.d.ts +2 -2
- package/build/EntityCompanionProvider.js.map +1 -1
- package/build/EntityCreator.d.ts +27 -0
- package/build/EntityCreator.js +39 -0
- package/build/EntityCreator.js.map +1 -0
- package/build/EntityDatabaseAdapter.js +2 -2
- package/build/EntityDatabaseAdapter.js.map +1 -1
- package/build/EntityDeleter.d.ts +27 -0
- package/build/EntityDeleter.js +40 -0
- package/build/EntityDeleter.js.map +1 -0
- package/build/EntityLoader.d.ts +4 -14
- package/build/EntityLoader.js +7 -20
- package/build/EntityLoader.js.map +1 -1
- package/build/EntityLoaderFactory.d.ts +2 -2
- package/build/EntityLoaderFactory.js +4 -2
- package/build/EntityLoaderFactory.js.map +1 -1
- package/build/EntityMutatorFactory.d.ts +4 -4
- package/build/EntityMutatorFactory.js +4 -4
- package/build/EntityMutatorFactory.js.map +1 -1
- package/build/EntitySecondaryCacheLoader.d.ts +3 -3
- package/build/EntitySecondaryCacheLoader.js +1 -3
- package/build/EntitySecondaryCacheLoader.js.map +1 -1
- package/build/EntityUpdater.d.ts +27 -0
- package/build/EntityUpdater.js +40 -0
- package/build/EntityUpdater.js.map +1 -0
- package/build/ReadonlyEntity.d.ts +2 -2
- package/build/ReadonlyEntity.js +4 -6
- package/build/ReadonlyEntity.js.map +1 -1
- package/build/ViewerScopedEntityLoaderFactory.d.ts +2 -2
- package/build/ViewerScopedEntityLoaderFactory.js.map +1 -1
- package/build/ViewerScopedEntityMutatorFactory.d.ts +4 -4
- package/build/ViewerScopedEntityMutatorFactory.js.map +1 -1
- package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.d.ts +1 -0
- package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js +273 -0
- package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js.map +1 -0
- package/build/__tests__/{EntityLoader-constructor-test.js → AuthorizationResultBasedEntityLoader-constructor-test.js} +11 -11
- package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js.map +1 -0
- package/build/__tests__/AuthorizationResultBasedEntityLoader-test.d.ts +1 -0
- package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js +401 -0
- package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js.map +1 -0
- package/build/__tests__/EnforcingEntityAssociationLoader-test.d.ts +1 -0
- package/build/__tests__/EnforcingEntityAssociationLoader-test.js +115 -0
- package/build/__tests__/EnforcingEntityAssociationLoader-test.js.map +1 -0
- package/build/__tests__/Entity-test.js +23 -5
- package/build/__tests__/Entity-test.js.map +1 -1
- package/build/__tests__/EntityAssociationLoader-test.js +14 -184
- package/build/__tests__/EntityAssociationLoader-test.js.map +1 -1
- package/build/__tests__/EntityCommonUseCases-test.js +34 -12
- package/build/__tests__/EntityCommonUseCases-test.js.map +1 -1
- package/build/__tests__/EntityCompanion-test.js +17 -7
- package/build/__tests__/EntityCompanion-test.js.map +1 -1
- package/build/__tests__/EntityDatabaseAdapter-test.js.map +1 -1
- package/build/__tests__/EntityEdges-test.js +41 -23
- package/build/__tests__/EntityEdges-test.js.map +1 -1
- package/build/__tests__/EntityLoader-test.js +22 -386
- package/build/__tests__/EntityLoader-test.js.map +1 -1
- package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js +4 -3
- package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js.map +1 -1
- package/build/__tests__/EntityMutator-test.js +67 -70
- package/build/__tests__/EntityMutator-test.js.map +1 -1
- package/build/__tests__/EntityPrivacyPolicy-test.js +17 -7
- package/build/__tests__/EntityPrivacyPolicy-test.js.map +1 -1
- package/build/__tests__/EntitySecondaryCacheLoader-test.js +7 -7
- package/build/__tests__/EntitySecondaryCacheLoader-test.js.map +1 -1
- package/build/__tests__/EntitySelfReferentialEdges-test.js +36 -24
- package/build/__tests__/EntitySelfReferentialEdges-test.js.map +1 -1
- package/build/__tests__/ReadonlyEntity-test.js +1 -1
- package/build/__tests__/ReadonlyEntity-test.js.map +1 -1
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +4 -2
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +1 -1
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +7 -4
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js.map +1 -1
- package/build/__tests__/entityUtils-test.js +8 -0
- package/build/__tests__/entityUtils-test.js.map +1 -1
- package/build/entityUtils.d.ts +7 -0
- package/build/entityUtils.js +20 -10
- package/build/entityUtils.js.map +1 -1
- package/build/errors/EntityCacheAdapterError.js +17 -7
- package/build/errors/EntityCacheAdapterError.js.map +1 -1
- package/build/errors/EntityDatabaseAdapterError.js +17 -7
- package/build/errors/EntityDatabaseAdapterError.js.map +1 -1
- package/build/errors/EntityInvalidFieldValueError.js +17 -7
- package/build/errors/EntityInvalidFieldValueError.js.map +1 -1
- package/build/errors/EntityNotAuthorizedError.js +17 -7
- package/build/errors/EntityNotAuthorizedError.js.map +1 -1
- package/build/errors/EntityNotFoundError.js +17 -7
- package/build/errors/EntityNotFoundError.js.map +1 -1
- package/build/index.d.ts +19 -11
- package/build/index.js +24 -7
- package/build/index.js.map +1 -1
- package/build/internal/EntityFieldTransformationUtils.js.map +1 -1
- package/build/internal/__tests__/EntityDataManager-test.js +42 -32
- package/build/internal/__tests__/EntityDataManager-test.js.map +1 -1
- package/build/internal/__tests__/ReadThroughEntityCache-test.js +17 -7
- package/build/internal/__tests__/ReadThroughEntityCache-test.js.map +1 -1
- package/build/rules/AlwaysAllowPrivacyPolicyRule.js +17 -7
- package/build/rules/AlwaysAllowPrivacyPolicyRule.js.map +1 -1
- package/build/rules/AlwaysDenyPrivacyPolicyRule.js +17 -7
- package/build/rules/AlwaysDenyPrivacyPolicyRule.js.map +1 -1
- package/build/rules/AlwaysSkipPrivacyPolicyRule.js +17 -7
- package/build/rules/AlwaysSkipPrivacyPolicyRule.js.map +1 -1
- package/build/utils/EntityPrivacyUtils.d.ts +32 -4
- package/build/utils/EntityPrivacyUtils.js +68 -24
- package/build/utils/EntityPrivacyUtils.js.map +1 -1
- package/build/utils/__tests__/EntityPrivacyUtils-test.js +148 -23
- package/build/utils/__tests__/EntityPrivacyUtils-test.js.map +1 -1
- package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js +8 -5
- package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js.map +1 -1
- package/build/utils/collections/__tests__/maps-test.js +1 -1
- package/build/utils/collections/__tests__/maps-test.js.map +1 -1
- package/build/utils/collections/maps.js +2 -2
- package/build/utils/collections/maps.js.map +1 -1
- package/build/utils/mergeEntityMutationTriggerConfigurations.js +1 -2
- package/build/utils/mergeEntityMutationTriggerConfigurations.js.map +1 -1
- package/build/utils/testing/PrivacyPolicyRuleTestUtils.js +1 -1
- package/build/utils/testing/PrivacyPolicyRuleTestUtils.js.map +1 -1
- package/build/utils/testing/StubDatabaseAdapter.js +17 -7
- package/build/utils/testing/StubDatabaseAdapter.js.map +1 -1
- package/build/utils/testing/StubQueryContextProvider.d.ts +1 -3
- package/build/utils/testing/StubQueryContextProvider.js +1 -3
- package/build/utils/testing/StubQueryContextProvider.js.map +1 -1
- package/build/utils/testing/createUnitTestEntityCompanionProvider.js +2 -1
- package/build/utils/testing/createUnitTestEntityCompanionProvider.js.map +1 -1
- package/build/utils/testing/describeFieldTestCase.js +1 -1
- package/build/utils/testing/describeFieldTestCase.js.map +1 -1
- package/package.json +19 -3
- package/src/AuthorizationResultBasedEntityAssociationLoader.ts +492 -0
- package/src/AuthorizationResultBasedEntityLoader.ts +2 -2
- package/src/{EntityMutator.ts → AuthorizationResultBasedEntityMutator.ts} +62 -58
- package/src/EnforcingEntityAssociationLoader.ts +390 -0
- package/src/EnforcingEntityCreator.ts +55 -0
- package/src/EnforcingEntityDeleter.ts +44 -0
- package/src/EnforcingEntityUpdater.ts +55 -0
- package/src/Entity.ts +20 -65
- package/src/EntityAssociationLoader.ts +38 -495
- package/src/EntityCompanionProvider.ts +5 -2
- package/src/EntityCreator.ts +73 -0
- package/src/EntityDeleter.ts +73 -0
- package/src/EntityLoader.ts +10 -49
- package/src/EntityLoaderFactory.ts +20 -3
- package/src/EntityMutatorFactory.ts +32 -7
- package/src/EntitySecondaryCacheLoader.ts +5 -7
- package/src/EntityUpdater.ts +73 -0
- package/src/ReadonlyEntity.ts +14 -13
- package/src/ViewerScopedEntityLoaderFactory.ts +9 -2
- package/src/ViewerScopedEntityMutatorFactory.ts +29 -4
- package/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.ts +354 -0
- package/src/__tests__/{EntityLoader-constructor-test.ts → AuthorizationResultBasedEntityLoader-constructor-test.ts} +17 -10
- package/src/__tests__/AuthorizationResultBasedEntityLoader-test.ts +730 -0
- package/src/__tests__/EnforcingEntityAssociationLoader-test.ts +253 -0
- package/src/__tests__/Entity-test.ts +24 -5
- package/src/__tests__/EntityAssociationLoader-test.ts +16 -259
- package/src/__tests__/EntityCommonUseCases-test.ts +20 -8
- package/src/__tests__/EntityCompanion-test.ts +1 -1
- package/src/__tests__/EntityDatabaseAdapter-test.ts +6 -6
- package/src/__tests__/EntityEdges-test.ts +24 -16
- package/src/__tests__/EntityLoader-test.ts +25 -675
- package/src/__tests__/EntityMutator-MutationCacheConsistency-test.ts +4 -3
- package/src/__tests__/EntityMutator-test.ts +116 -103
- package/src/__tests__/EntitySecondaryCacheLoader-test.ts +7 -7
- package/src/__tests__/EntitySelfReferentialEdges-test.ts +36 -24
- package/src/__tests__/ReadonlyEntity-test.ts +1 -1
- package/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.ts +4 -2
- package/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.ts +7 -4
- package/src/__tests__/entityUtils-test.ts +12 -0
- package/src/entityUtils.ts +24 -9
- package/src/index.ts +19 -11
- package/src/internal/EntityFieldTransformationUtils.ts +2 -2
- package/src/internal/__tests__/EntityDataManager-test.ts +29 -29
- package/src/utils/EntityPrivacyUtils.ts +188 -107
- package/src/utils/__tests__/EntityPrivacyUtils-test.ts +169 -29
- package/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.ts +8 -5
- package/src/utils/collections/__tests__/maps-test.ts +1 -1
- package/src/utils/testing/PrivacyPolicyRuleTestUtils.ts +1 -1
- package/src/utils/testing/StubDatabaseAdapter.ts +1 -1
- package/src/utils/testing/StubQueryContextProvider.ts +1 -3
- package/src/utils/testing/createUnitTestEntityCompanionProvider.ts +3 -1
- package/build/EntityMutator.js.map +0 -1
- package/build/__tests__/EntityLoader-constructor-test.js.map +0 -1
- /package/build/__tests__/{EntityLoader-constructor-test.d.ts → AuthorizationResultBasedEntityLoader-constructor-test.d.ts} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const
|
|
3
|
+
const AuthorizationResultBasedEntityMutator_1 = require("./AuthorizationResultBasedEntityMutator");
|
|
4
4
|
/**
|
|
5
5
|
* The primary interface for creating, mutating, and deleting entities.
|
|
6
6
|
*/
|
|
@@ -32,7 +32,7 @@ class EntityMutatorFactory {
|
|
|
32
32
|
* @returns mutator for creating an entity
|
|
33
33
|
*/
|
|
34
34
|
forCreate(viewerContext, queryContext) {
|
|
35
|
-
return new
|
|
35
|
+
return new AuthorizationResultBasedEntityMutator_1.AuthorizationResultBasedCreateMutator(this.entityCompanionProvider, viewerContext, queryContext, this.entityConfiguration, this.entityClass, this.privacyPolicy, this.mutationValidators, this.mutationTriggers, this.entityLoaderFactory, this.databaseAdapter, this.metricsAdapter);
|
|
36
36
|
}
|
|
37
37
|
/**
|
|
38
38
|
* Vend mutator for updating an existing entity in given query context.
|
|
@@ -41,7 +41,7 @@ class EntityMutatorFactory {
|
|
|
41
41
|
* @returns mutator for updating existingEntity
|
|
42
42
|
*/
|
|
43
43
|
forUpdate(existingEntity, queryContext) {
|
|
44
|
-
return new
|
|
44
|
+
return new AuthorizationResultBasedEntityMutator_1.AuthorizationResultBasedUpdateMutator(this.entityCompanionProvider, existingEntity.getViewerContext(), queryContext, this.entityConfiguration, this.entityClass, this.privacyPolicy, this.mutationValidators, this.mutationTriggers, this.entityLoaderFactory, this.databaseAdapter, this.metricsAdapter, existingEntity);
|
|
45
45
|
}
|
|
46
46
|
/**
|
|
47
47
|
* Delete an existing entity in given query context.
|
|
@@ -49,7 +49,7 @@ class EntityMutatorFactory {
|
|
|
49
49
|
* @param queryContext - query context in which to perform the delete
|
|
50
50
|
*/
|
|
51
51
|
forDelete(existingEntity, queryContext) {
|
|
52
|
-
return new
|
|
52
|
+
return new AuthorizationResultBasedEntityMutator_1.AuthorizationResultBasedDeleteMutator(this.entityCompanionProvider, existingEntity.getViewerContext(), queryContext, this.entityConfiguration, this.entityClass, this.privacyPolicy, this.mutationValidators, this.mutationTriggers, this.entityLoaderFactory, this.databaseAdapter, this.metricsAdapter, existingEntity);
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
exports.default = EntityMutatorFactory;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityMutatorFactory.js","sourceRoot":"","sources":["../src/EntityMutatorFactory.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"EntityMutatorFactory.js","sourceRoot":"","sources":["../src/EntityMutatorFactory.ts"],"names":[],"mappings":";;AAAA,mGAIiD;AAajD;;GAEG;AACH,MAAqB,oBAAoB;IAepB;IACA;IACA;IAQA;IACA;IAOA;IAOA;IAQA;IACA;IAnCnB,YACmB,uBAAgD,EAChD,mBAAiD,EACjD,WAOhB,EACgB,aAA6B,EAC7B,kBAMd,EACc,gBAMhB,EACgB,mBAOhB,EACgB,eAA+C,EAC/C,cAAqC;QAlCrC,4BAAuB,GAAvB,uBAAuB,CAAyB;QAChD,wBAAmB,GAAnB,mBAAmB,CAA8B;QACjD,gBAAW,GAAX,WAAW,CAO3B;QACgB,kBAAa,GAAb,aAAa,CAAgB;QAC7B,uBAAkB,GAAlB,kBAAkB,CAMhC;QACc,qBAAgB,GAAhB,gBAAgB,CAMhC;QACgB,wBAAmB,GAAnB,mBAAmB,CAOnC;QACgB,oBAAe,GAAf,eAAe,CAAgC;QAC/C,mBAAc,GAAd,cAAc,CAAuB;IACrD,CAAC;IAEJ;;;;;OAKG;IACH,SAAS,CACP,aAA6B,EAC7B,YAAgC;QAShC,OAAO,IAAI,6EAAqC,CAC9C,IAAI,CAAC,uBAAuB,EAC5B,aAAa,EACb,YAAY,EACZ,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,cAAc,CACpB,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACH,SAAS,CACP,cAAuB,EACvB,YAAgC;QAShC,OAAO,IAAI,6EAAqC,CAC9C,IAAI,CAAC,uBAAuB,EAC5B,cAAc,CAAC,gBAAgB,EAAE,EACjC,YAAY,EACZ,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,cAAc,EACnB,cAAc,CACf,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,SAAS,CACP,cAAuB,EACvB,YAAgC;QAShC,OAAO,IAAI,6EAAqC,CAC9C,IAAI,CAAC,uBAAuB,EAC5B,cAAc,CAAC,gBAAgB,EAAE,EACjC,YAAY,EACZ,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,WAAW,EAChB,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,kBAAkB,EACvB,IAAI,CAAC,gBAAgB,EACrB,IAAI,CAAC,mBAAmB,EACxB,IAAI,CAAC,eAAe,EACpB,IAAI,CAAC,cAAc,EACnB,cAAc,CACf,CAAC;IACJ,CAAC;CACF;AApJD,uCAoJC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Result } from '@expo/results';
|
|
2
|
-
import
|
|
2
|
+
import AuthorizationResultBasedEntityLoader from './AuthorizationResultBasedEntityLoader';
|
|
3
3
|
import EntityPrivacyPolicy from './EntityPrivacyPolicy';
|
|
4
4
|
import ReadonlyEntity from './ReadonlyEntity';
|
|
5
5
|
import ViewerContext from './ViewerContext';
|
|
@@ -35,8 +35,8 @@ export interface ISecondaryEntityCache<TFields, TLoadParams> {
|
|
|
35
35
|
*/
|
|
36
36
|
export default abstract class EntitySecondaryCacheLoader<TLoadParams, TFields extends object, TID extends NonNullable<TFields[TSelectedFields]>, TViewerContext extends ViewerContext, TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>, TPrivacyPolicy extends EntityPrivacyPolicy<TFields, TID, TViewerContext, TEntity, TSelectedFields>, TSelectedFields extends keyof TFields = keyof TFields> {
|
|
37
37
|
private readonly secondaryEntityCache;
|
|
38
|
-
protected readonly entityLoader:
|
|
39
|
-
constructor(secondaryEntityCache: ISecondaryEntityCache<TFields, TLoadParams>, entityLoader:
|
|
38
|
+
protected readonly entityLoader: AuthorizationResultBasedEntityLoader<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>;
|
|
39
|
+
constructor(secondaryEntityCache: ISecondaryEntityCache<TFields, TLoadParams>, entityLoader: AuthorizationResultBasedEntityLoader<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>);
|
|
40
40
|
/**
|
|
41
41
|
* Load many by load params objects
|
|
42
42
|
*
|
|
@@ -27,9 +27,7 @@ class EntitySecondaryCacheLoader {
|
|
|
27
27
|
async loadManyAsync(loadParamsArray) {
|
|
28
28
|
const loadParamsToFieldObjects = await this.secondaryEntityCache.loadManyThroughAsync(loadParamsArray, this.fetchObjectsFromDatabaseAsync.bind(this));
|
|
29
29
|
// convert value to and from array to reuse complex code
|
|
30
|
-
const entitiesMap = await this.entityLoader
|
|
31
|
-
.utils()
|
|
32
|
-
.constructAndAuthorizeEntitiesAsync((0, maps_1.mapMap)(loadParamsToFieldObjects, (fieldObject) => (fieldObject ? [fieldObject] : [])));
|
|
30
|
+
const entitiesMap = await this.entityLoader.utils.constructAndAuthorizeEntitiesAsync((0, maps_1.mapMap)(loadParamsToFieldObjects, (fieldObject) => (fieldObject ? [fieldObject] : [])));
|
|
33
31
|
return (0, maps_1.mapMap)(entitiesMap, (fieldObjects) => fieldObjects[0] ?? null);
|
|
34
32
|
}
|
|
35
33
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntitySecondaryCacheLoader.js","sourceRoot":"","sources":["../src/EntitySecondaryCacheLoader.ts"],"names":[],"mappings":";;AAMA,mDAAkD;AA4BlD;;;;;;;;;;GAUG;AACH,MAA8B,0BAA0B;IAgBnC;IACE;IAFrB,YACmB,oBAAiE,EAC/D,YAOlB;QARgB,yBAAoB,GAApB,oBAAoB,CAA6C;QAC/D,iBAAY,GAAZ,YAAY,CAO9B;IACA,CAAC;IAEJ;;;;OAIG;IACI,KAAK,CAAC,aAAa,CACxB,eAAiD;QAEjD,MAAM,wBAAwB,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CACnF,eAAe,EACf,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,CAC9C,CAAC;QAEF,wDAAwD;QACxD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY
|
|
1
|
+
{"version":3,"file":"EntitySecondaryCacheLoader.js","sourceRoot":"","sources":["../src/EntitySecondaryCacheLoader.ts"],"names":[],"mappings":";;AAMA,mDAAkD;AA4BlD;;;;;;;;;;GAUG;AACH,MAA8B,0BAA0B;IAgBnC;IACE;IAFrB,YACmB,oBAAiE,EAC/D,YAOlB;QARgB,yBAAoB,GAApB,oBAAoB,CAA6C;QAC/D,iBAAY,GAAZ,YAAY,CAO9B;IACA,CAAC;IAEJ;;;;OAIG;IACI,KAAK,CAAC,aAAa,CACxB,eAAiD;QAEjD,MAAM,wBAAwB,GAAG,MAAM,IAAI,CAAC,oBAAoB,CAAC,oBAAoB,CACnF,eAAe,EACf,IAAI,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,CAAC,CAC9C,CAAC;QAEF,wDAAwD;QACxD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,kCAAkC,CAClF,IAAA,aAAM,EAAC,wBAAwB,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CACtF,CAAC;QACF,OAAO,IAAA,aAAM,EAAC,WAAW,EAAE,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;IACxE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,mBAAmB,CAC9B,eAAiD;QAEjD,MAAM,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,CAAC,eAAe,CAAC,CAAC;IACvE,CAAC;CAUF;AAlED,6CAkEC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { AuthorizationResultBasedUpdateMutator } from './AuthorizationResultBasedEntityMutator';
|
|
2
|
+
import EnforcingEntityUpdater from './EnforcingEntityUpdater';
|
|
3
|
+
import { IEntityClass } from './Entity';
|
|
4
|
+
import EntityPrivacyPolicy from './EntityPrivacyPolicy';
|
|
5
|
+
import { EntityQueryContext } from './EntityQueryContext';
|
|
6
|
+
import ReadonlyEntity from './ReadonlyEntity';
|
|
7
|
+
import ViewerContext from './ViewerContext';
|
|
8
|
+
/**
|
|
9
|
+
* The primary interface for updating entities.
|
|
10
|
+
*/
|
|
11
|
+
export default class EntityUpdater<TFields extends object, TID extends NonNullable<TFields[TSelectedFields]>, TViewerContext extends ViewerContext, TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>, TPrivacyPolicy extends EntityPrivacyPolicy<TFields, TID, TViewerContext, TEntity, TSelectedFields>, TSelectedFields extends keyof TFields> {
|
|
12
|
+
private readonly existingEntity;
|
|
13
|
+
private readonly queryContext;
|
|
14
|
+
private readonly entityClass;
|
|
15
|
+
constructor(existingEntity: TEntity, queryContext: EntityQueryContext, entityClass: IEntityClass<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>);
|
|
16
|
+
/**
|
|
17
|
+
* Enforcing entity updater. All updates through this updater are
|
|
18
|
+
* guaranteed to be successful and will throw otherwise.
|
|
19
|
+
*/
|
|
20
|
+
enforcing(): EnforcingEntityUpdater<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>;
|
|
21
|
+
/**
|
|
22
|
+
* Authorization-result-based entity updater. All updates through this
|
|
23
|
+
* updater are results, where an unsuccessful result means an authorization
|
|
24
|
+
* error or entity construction error occurred. Other errors are thrown.
|
|
25
|
+
*/
|
|
26
|
+
withAuthorizationResults(): AuthorizationResultBasedUpdateMutator<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>;
|
|
27
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const EnforcingEntityUpdater_1 = __importDefault(require("./EnforcingEntityUpdater"));
|
|
7
|
+
/**
|
|
8
|
+
* The primary interface for updating entities.
|
|
9
|
+
*/
|
|
10
|
+
class EntityUpdater {
|
|
11
|
+
existingEntity;
|
|
12
|
+
queryContext;
|
|
13
|
+
entityClass;
|
|
14
|
+
constructor(existingEntity, queryContext, entityClass) {
|
|
15
|
+
this.existingEntity = existingEntity;
|
|
16
|
+
this.queryContext = queryContext;
|
|
17
|
+
this.entityClass = entityClass;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Enforcing entity updater. All updates through this updater are
|
|
21
|
+
* guaranteed to be successful and will throw otherwise.
|
|
22
|
+
*/
|
|
23
|
+
enforcing() {
|
|
24
|
+
return new EnforcingEntityUpdater_1.default(this.withAuthorizationResults());
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Authorization-result-based entity updater. All updates through this
|
|
28
|
+
* updater are results, where an unsuccessful result means an authorization
|
|
29
|
+
* error or entity construction error occurred. Other errors are thrown.
|
|
30
|
+
*/
|
|
31
|
+
withAuthorizationResults() {
|
|
32
|
+
return this.existingEntity
|
|
33
|
+
.getViewerContext()
|
|
34
|
+
.getViewerScopedEntityCompanionForClass(this.entityClass)
|
|
35
|
+
.getMutatorFactory()
|
|
36
|
+
.forUpdate(this.existingEntity, this.queryContext);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.default = EntityUpdater;
|
|
40
|
+
//# sourceMappingURL=EntityUpdater.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityUpdater.js","sourceRoot":"","sources":["../src/EntityUpdater.ts"],"names":[],"mappings":";;;;;AACA,sFAA8D;AAO9D;;GAEG;AACH,MAAqB,aAAa;IAeb;IACA;IACA;IAHnB,YACmB,cAAuB,EACvB,YAAgC,EAChC,WAOhB;QATgB,mBAAc,GAAd,cAAc,CAAS;QACvB,iBAAY,GAAZ,YAAY,CAAoB;QAChC,gBAAW,GAAX,WAAW,CAO3B;IACA,CAAC;IAEJ;;;OAGG;IACH,SAAS;QAQP,OAAO,IAAI,gCAAsB,CAAC,IAAI,CAAC,wBAAwB,EAAE,CAAC,CAAC;IACrE,CAAC;IAED;;;;OAIG;IACH,wBAAwB;QAQtB,OAAO,IAAI,CAAC,cAAc;aACvB,gBAAgB,EAAE;aAClB,sCAAsC,CAAC,IAAI,CAAC,WAAW,CAAC;aACxD,iBAAiB,EAAE;aACnB,SAAS,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;IACvD,CAAC;CACF;AA7DD,gCA6DC"}
|
|
@@ -50,7 +50,7 @@ export default abstract class ReadonlyEntity<TFields extends object, TID extends
|
|
|
50
50
|
/**
|
|
51
51
|
* @returns EntityAssociationLoader for this entity
|
|
52
52
|
*/
|
|
53
|
-
associationLoader(): EntityAssociationLoader<TFields, TID, TViewerContext, this, TSelectedFields>;
|
|
53
|
+
associationLoader(queryContext?: EntityQueryContext): EntityAssociationLoader<TFields, TID, TViewerContext, this, TSelectedFields>;
|
|
54
54
|
/**
|
|
55
55
|
* Get a underlying field from this entity's data
|
|
56
56
|
* @param fieldName - the field to get
|
|
@@ -70,5 +70,5 @@ export default abstract class ReadonlyEntity<TFields extends object, TID extends
|
|
|
70
70
|
* @param viewerContext - viewer context of loading user
|
|
71
71
|
* @param queryContext - query context in which to perform the load
|
|
72
72
|
*/
|
|
73
|
-
static loader<TMFields extends object, TMID extends NonNullable<TMFields[TMSelectedFields]>, TMViewerContext extends ViewerContext, TMViewerContext2 extends TMViewerContext, TMEntity extends ReadonlyEntity<TMFields, TMID, TMViewerContext, TMSelectedFields>, TMPrivacyPolicy extends EntityPrivacyPolicy<TMFields, TMID, TMViewerContext, TMEntity, TMSelectedFields>, TMSelectedFields extends keyof TMFields = keyof TMFields>(this: IEntityClass<TMFields, TMID, TMViewerContext, TMEntity, TMPrivacyPolicy, TMSelectedFields>, viewerContext: TMViewerContext2, queryContext?: EntityQueryContext): EntityLoader<TMFields, TMID, TMViewerContext, TMEntity, TMPrivacyPolicy, TMSelectedFields>;
|
|
73
|
+
static loader<TMFields extends object, TMID extends NonNullable<TMFields[TMSelectedFields]>, TMViewerContext extends ViewerContext, TMViewerContext2 extends TMViewerContext, TMEntity extends ReadonlyEntity<TMFields, TMID, TMViewerContext, TMSelectedFields>, TMPrivacyPolicy extends EntityPrivacyPolicy<TMFields, TMID, TMViewerContext, TMEntity, TMSelectedFields>, TMSelectedFields extends keyof TMFields = keyof TMFields>(this: IEntityClass<TMFields, TMID, TMViewerContext, TMEntity, TMPrivacyPolicy, TMSelectedFields>, viewerContext: TMViewerContext2, queryContext?: EntityQueryContext): EntityLoader<TMFields, TMID, TMViewerContext, TMViewerContext2, TMEntity, TMPrivacyPolicy, TMSelectedFields>;
|
|
74
74
|
}
|
package/build/ReadonlyEntity.js
CHANGED
|
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const invariant_1 = __importDefault(require("invariant"));
|
|
7
7
|
const EntityAssociationLoader_1 = __importDefault(require("./EntityAssociationLoader"));
|
|
8
|
+
const EntityLoader_1 = __importDefault(require("./EntityLoader"));
|
|
8
9
|
/**
|
|
9
10
|
* A readonly entity exposes only the read functionality of an Entity. Used as the base
|
|
10
11
|
* type for most entity operations excluding mutations.
|
|
@@ -60,8 +61,8 @@ class ReadonlyEntity {
|
|
|
60
61
|
/**
|
|
61
62
|
* @returns EntityAssociationLoader for this entity
|
|
62
63
|
*/
|
|
63
|
-
associationLoader() {
|
|
64
|
-
return new EntityAssociationLoader_1.default(this);
|
|
64
|
+
associationLoader(queryContext) {
|
|
65
|
+
return new EntityAssociationLoader_1.default(this, queryContext);
|
|
65
66
|
}
|
|
66
67
|
/**
|
|
67
68
|
* Get a underlying field from this entity's data
|
|
@@ -92,10 +93,7 @@ class ReadonlyEntity {
|
|
|
92
93
|
.getViewerScopedEntityCompanionForClass(this)
|
|
93
94
|
.getQueryContextProvider()
|
|
94
95
|
.getQueryContext()) {
|
|
95
|
-
return viewerContext
|
|
96
|
-
.getViewerScopedEntityCompanionForClass(this)
|
|
97
|
-
.getLoaderFactory()
|
|
98
|
-
.forLoad(queryContext, { previousValue: null, cascadingDeleteCause: null });
|
|
96
|
+
return new EntityLoader_1.default(viewerContext, queryContext, this);
|
|
99
97
|
}
|
|
100
98
|
}
|
|
101
99
|
exports.default = ReadonlyEntity;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReadonlyEntity.js","sourceRoot":"","sources":["../src/ReadonlyEntity.ts"],"names":[],"mappings":";;;;;AAAA,0DAAkC;AAGlC,wFAAgE;
|
|
1
|
+
{"version":3,"file":"ReadonlyEntity.js","sourceRoot":"","sources":["../src/ReadonlyEntity.ts"],"names":[],"mappings":";;;;;AAAA,0DAAkC;AAGlC,wFAAgE;AAChE,kEAA0C;AAK1C;;;;;;;GAOG;AACH,MAA8B,cAAc;IAMzB,aAAa,CAAiB;IAC9B,EAAE,CAAM;IACR,cAAc,CAAoB;IAClC,cAAc,CAA2C;IAE1E;;;;;;;;;;;;;OAaG;IACH,YAAY,EACV,aAAa,EACb,EAAE,EACF,cAAc,EACd,cAAc,GAMf;QACC,IAAA,mBAAS,EAAC,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,SAAS,EAAE,qBAAqB,CAAC,CAAC;QAElE,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;IACvC,CAAC;IAED,QAAQ;QACN,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC;IACrD,CAAC;IAED,mBAAmB;QACjB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED;;OAEG;IACH,KAAK;QACH,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,iBAAiB,CACf,YAAiC;QAEjC,OAAO,IAAI,iCAAuB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACzD,CAAC;IAED;;;;OAIG;IACH,QAAQ,CACN,SAAY;QAEZ,OAAO,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IACpC,CAAC;IAED;;OAEG;IACH,oBAAoB;QAClB,OAAO,EAAE,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;IACpC,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,MAAM,CAuBX,aAA+B,EAC/B,eAAmC,aAAa;SAC7C,sCAAsC,CAAC,IAAI,CAAC;SAC5C,uBAAuB,EAAE;SACzB,eAAe,EAAE;QAUpB,OAAO,IAAI,sBAAY,CAAC,aAAa,EAAE,YAAY,EAAE,IAAI,CAAC,CAAC;IAC7D,CAAC;CACF;AAhJD,iCAgJC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import AuthorizationResultBasedEntityLoader from './AuthorizationResultBasedEntityLoader';
|
|
2
2
|
import EntityLoaderFactory from './EntityLoaderFactory';
|
|
3
3
|
import EntityPrivacyPolicy, { EntityPrivacyPolicyEvaluationContext } from './EntityPrivacyPolicy';
|
|
4
4
|
import { EntityQueryContext } from './EntityQueryContext';
|
|
@@ -11,5 +11,5 @@ export default class ViewerScopedEntityLoaderFactory<TFields extends object, TID
|
|
|
11
11
|
private readonly entityLoaderFactory;
|
|
12
12
|
private readonly viewerContext;
|
|
13
13
|
constructor(entityLoaderFactory: EntityLoaderFactory<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>, viewerContext: TViewerContext);
|
|
14
|
-
forLoad(queryContext: EntityQueryContext, privacyPolicyEvaluationContext: EntityPrivacyPolicyEvaluationContext<TFields, TID, TViewerContext, TEntity, TSelectedFields>):
|
|
14
|
+
forLoad(queryContext: EntityQueryContext, privacyPolicyEvaluationContext: EntityPrivacyPolicyEvaluationContext<TFields, TID, TViewerContext, TEntity, TSelectedFields>): AuthorizationResultBasedEntityLoader<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>;
|
|
15
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewerScopedEntityLoaderFactory.js","sourceRoot":"","sources":["../src/ViewerScopedEntityLoaderFactory.ts"],"names":[],"mappings":";;AAOA;;GAEG;AACH,MAAqB,+BAA+B;IAe/B;IAQA;IATnB,YACmB,mBAOhB,EACgB,aAA6B;QAR7B,wBAAmB,GAAnB,mBAAmB,CAOnC;QACgB,kBAAa,GAAb,aAAa,CAAgB;IAC7C,CAAC;IAEJ,OAAO,CACL,YAAgC,EAChC,8BAMC;
|
|
1
|
+
{"version":3,"file":"ViewerScopedEntityLoaderFactory.js","sourceRoot":"","sources":["../src/ViewerScopedEntityLoaderFactory.ts"],"names":[],"mappings":";;AAOA;;GAEG;AACH,MAAqB,+BAA+B;IAe/B;IAQA;IATnB,YACmB,mBAOhB,EACgB,aAA6B;QAR7B,wBAAmB,GAAnB,mBAAmB,CAOnC;QACgB,kBAAa,GAAb,aAAa,CAAgB;IAC7C,CAAC;IAEJ,OAAO,CACL,YAAgC,EAChC,8BAMC;QASD,OAAO,IAAI,CAAC,mBAAmB,CAAC,OAAO,CACrC,IAAI,CAAC,aAAa,EAClB,YAAY,EACZ,8BAA8B,CAC/B,CAAC;IACJ,CAAC;CACF;AAjDD,kDAiDC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { AuthorizationResultBasedCreateMutator, AuthorizationResultBasedUpdateMutator, AuthorizationResultBasedDeleteMutator } from './AuthorizationResultBasedEntityMutator';
|
|
2
2
|
import EntityMutatorFactory from './EntityMutatorFactory';
|
|
3
3
|
import EntityPrivacyPolicy from './EntityPrivacyPolicy';
|
|
4
4
|
import { EntityQueryContext } from './EntityQueryContext';
|
|
@@ -11,7 +11,7 @@ export default class ViewerScopedEntityMutatorFactory<TFields extends object, TI
|
|
|
11
11
|
private readonly entityMutatorFactory;
|
|
12
12
|
private readonly viewerContext;
|
|
13
13
|
constructor(entityMutatorFactory: EntityMutatorFactory<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>, viewerContext: TViewerContext);
|
|
14
|
-
forCreate(queryContext: EntityQueryContext):
|
|
15
|
-
forUpdate(existingEntity: TEntity, queryContext: EntityQueryContext):
|
|
16
|
-
forDelete(existingEntity: TEntity, queryContext: EntityQueryContext):
|
|
14
|
+
forCreate(queryContext: EntityQueryContext): AuthorizationResultBasedCreateMutator<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>;
|
|
15
|
+
forUpdate(existingEntity: TEntity, queryContext: EntityQueryContext): AuthorizationResultBasedUpdateMutator<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>;
|
|
16
|
+
forDelete(existingEntity: TEntity, queryContext: EntityQueryContext): AuthorizationResultBasedDeleteMutator<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>;
|
|
17
17
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ViewerScopedEntityMutatorFactory.js","sourceRoot":"","sources":["../src/ViewerScopedEntityMutatorFactory.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"ViewerScopedEntityMutatorFactory.js","sourceRoot":"","sources":["../src/ViewerScopedEntityMutatorFactory.ts"],"names":[],"mappings":";;AAWA;;GAEG;AACH,MAAqB,gCAAgC;IAehC;IAQA;IATnB,YACmB,oBAOhB,EACgB,aAA6B;QAR7B,yBAAoB,GAApB,oBAAoB,CAOpC;QACgB,kBAAa,GAAb,aAAa,CAAgB;IAC7C,CAAC;IAEJ,SAAS,CACP,YAAgC;QAShC,OAAO,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAC/E,CAAC;IAED,SAAS,CACP,cAAuB,EACvB,YAAgC;QAShC,OAAO,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IAC3E,CAAC;IAED,SAAS,CACP,cAAuB,EACvB,YAAgC;QAShC,OAAO,IAAI,CAAC,oBAAoB,CAAC,SAAS,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;IAC3E,CAAC;CACF;AAlED,mDAkEC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const results_1 = require("@expo/results");
|
|
7
|
+
const uuid_1 = require("uuid");
|
|
8
|
+
const AuthorizationResultBasedEntityAssociationLoader_1 = __importDefault(require("../AuthorizationResultBasedEntityAssociationLoader"));
|
|
9
|
+
const entityUtils_1 = require("../entityUtils");
|
|
10
|
+
const TestEntity_1 = __importDefault(require("../testfixtures/TestEntity"));
|
|
11
|
+
const TestEntity2_1 = __importDefault(require("../testfixtures/TestEntity2"));
|
|
12
|
+
const TestViewerContext_1 = __importDefault(require("../testfixtures/TestViewerContext"));
|
|
13
|
+
const createUnitTestEntityCompanionProvider_1 = require("../utils/testing/createUnitTestEntityCompanionProvider");
|
|
14
|
+
describe(AuthorizationResultBasedEntityAssociationLoader_1.default, () => {
|
|
15
|
+
describe('loadAssociatedEntityAsync', () => {
|
|
16
|
+
it('loads associated entities by ID and correctly handles a null value', async () => {
|
|
17
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
18
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
19
|
+
const testOtherEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext).withAuthorizationResults().createAsync());
|
|
20
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext)
|
|
21
|
+
.withAuthorizationResults()
|
|
22
|
+
.setField('stringField', testOtherEntity.getID())
|
|
23
|
+
.createAsync());
|
|
24
|
+
const loadedOther = await (0, results_1.enforceAsyncResult)(testEntity
|
|
25
|
+
.associationLoader()
|
|
26
|
+
.withAuthorizationResults()
|
|
27
|
+
.loadAssociatedEntityAsync('stringField', TestEntity_1.default));
|
|
28
|
+
expect(loadedOther.getID()).toEqual(testOtherEntity.getID());
|
|
29
|
+
const loadedOther2 = await (0, results_1.enforceAsyncResult)(testEntity
|
|
30
|
+
.associationLoader()
|
|
31
|
+
.withAuthorizationResults()
|
|
32
|
+
.loadAssociatedEntityAsync('nullableField', TestEntity_1.default));
|
|
33
|
+
expect(loadedOther2).toBeNull();
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
describe('loadManyAssociatedEntitiesAsync', () => {
|
|
37
|
+
it('loads many associated entities referencing this entity', async () => {
|
|
38
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
39
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
40
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext).withAuthorizationResults().createAsync());
|
|
41
|
+
const testOtherEntity1 = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext)
|
|
42
|
+
.withAuthorizationResults()
|
|
43
|
+
.setField('stringField', testEntity.getID())
|
|
44
|
+
.createAsync());
|
|
45
|
+
const testOtherEntity2 = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext)
|
|
46
|
+
.withAuthorizationResults()
|
|
47
|
+
.setField('stringField', testEntity.getID())
|
|
48
|
+
.createAsync());
|
|
49
|
+
const loaded = await (0, entityUtils_1.enforceResultsAsync)(testEntity
|
|
50
|
+
.associationLoader()
|
|
51
|
+
.withAuthorizationResults()
|
|
52
|
+
.loadManyAssociatedEntitiesAsync(TestEntity_1.default, 'stringField'));
|
|
53
|
+
expect(loaded).toHaveLength(2);
|
|
54
|
+
expect(loaded.find((e) => e.getID() === testOtherEntity1.getID())).not.toBeUndefined();
|
|
55
|
+
expect(loaded.find((e) => e.getID() === testOtherEntity2.getID())).not.toBeUndefined();
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
describe('loadAssociatedEntityByFieldEqualingAsync', () => {
|
|
59
|
+
it('loads associated entity by field equaling', async () => {
|
|
60
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
61
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
62
|
+
const testOtherEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext).withAuthorizationResults().createAsync());
|
|
63
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext)
|
|
64
|
+
.withAuthorizationResults()
|
|
65
|
+
.setField('stringField', testOtherEntity.getID())
|
|
66
|
+
.createAsync());
|
|
67
|
+
const loadedOtherResult = await testEntity
|
|
68
|
+
.associationLoader()
|
|
69
|
+
.withAuthorizationResults()
|
|
70
|
+
.loadAssociatedEntityByFieldEqualingAsync('stringField', TestEntity_1.default, 'customIdField');
|
|
71
|
+
expect(loadedOtherResult?.enforceValue().getID()).toEqual(testOtherEntity.getID());
|
|
72
|
+
});
|
|
73
|
+
it('returns null when loading associated entities by field equaling a non existent association', async () => {
|
|
74
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
75
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
76
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext)
|
|
77
|
+
.withAuthorizationResults()
|
|
78
|
+
.setField('stringField', (0, uuid_1.v4)())
|
|
79
|
+
.createAsync());
|
|
80
|
+
const loadedOtherResult = await testEntity
|
|
81
|
+
.associationLoader()
|
|
82
|
+
.withAuthorizationResults()
|
|
83
|
+
.loadAssociatedEntityByFieldEqualingAsync('stringField', TestEntity_1.default, 'customIdField');
|
|
84
|
+
expect(loadedOtherResult).toBeNull();
|
|
85
|
+
});
|
|
86
|
+
it('returns null when load-by field is null', async () => {
|
|
87
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
88
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
89
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext)
|
|
90
|
+
.withAuthorizationResults()
|
|
91
|
+
.setField('stringField', 'blah')
|
|
92
|
+
.createAsync());
|
|
93
|
+
const loadedOtherResult = await testEntity
|
|
94
|
+
.associationLoader()
|
|
95
|
+
.withAuthorizationResults()
|
|
96
|
+
.loadAssociatedEntityByFieldEqualingAsync('nullableField', TestEntity_1.default, 'customIdField');
|
|
97
|
+
expect(loadedOtherResult).toBeNull();
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
describe('loadManyAssociatedEntitiesByFieldEqualingAsync', () => {
|
|
101
|
+
it('loads many associated entities by field equaling', async () => {
|
|
102
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
103
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
104
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext).withAuthorizationResults().createAsync());
|
|
105
|
+
const testOtherEntity1 = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext)
|
|
106
|
+
.withAuthorizationResults()
|
|
107
|
+
.setField('stringField', testEntity.getID())
|
|
108
|
+
.createAsync());
|
|
109
|
+
const testOtherEntity2 = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext)
|
|
110
|
+
.withAuthorizationResults()
|
|
111
|
+
.setField('stringField', testEntity.getID())
|
|
112
|
+
.createAsync());
|
|
113
|
+
const loaded = await (0, entityUtils_1.enforceResultsAsync)(testEntity
|
|
114
|
+
.associationLoader()
|
|
115
|
+
.withAuthorizationResults()
|
|
116
|
+
.loadManyAssociatedEntitiesByFieldEqualingAsync('customIdField', TestEntity_1.default, 'stringField'));
|
|
117
|
+
expect(loaded).toHaveLength(2);
|
|
118
|
+
expect(loaded.find((e) => e.getID() === testOtherEntity1.getID())).not.toBeUndefined();
|
|
119
|
+
expect(loaded.find((e) => e.getID() === testOtherEntity2.getID())).not.toBeUndefined();
|
|
120
|
+
});
|
|
121
|
+
it('returns empty results when field being queried by is null', async () => {
|
|
122
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
123
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
124
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext).withAuthorizationResults().createAsync());
|
|
125
|
+
const loaded = await (0, entityUtils_1.enforceResultsAsync)(testEntity
|
|
126
|
+
.associationLoader()
|
|
127
|
+
.withAuthorizationResults()
|
|
128
|
+
.loadManyAssociatedEntitiesByFieldEqualingAsync('nullableField', TestEntity_1.default, 'stringField'));
|
|
129
|
+
expect(loaded).toHaveLength(0);
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
describe('loadAssociatedEntityThroughAsync', () => {
|
|
133
|
+
it('chain loads associated entities', async () => {
|
|
134
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
135
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
136
|
+
const testEntity4 = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext).withAuthorizationResults().createAsync());
|
|
137
|
+
const testEntity3 = await (0, results_1.enforceAsyncResult)(TestEntity2_1.default.creator(viewerContext)
|
|
138
|
+
.withAuthorizationResults()
|
|
139
|
+
.setField('foreignKey', testEntity4.getID())
|
|
140
|
+
.createAsync());
|
|
141
|
+
const testEntity2 = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext)
|
|
142
|
+
.withAuthorizationResults()
|
|
143
|
+
.setField('testIndexedField', testEntity3.getID())
|
|
144
|
+
.createAsync());
|
|
145
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity2_1.default.creator(viewerContext)
|
|
146
|
+
.withAuthorizationResults()
|
|
147
|
+
.setField('foreignKey', testEntity2.getID())
|
|
148
|
+
.createAsync());
|
|
149
|
+
const loaded2Result = await testEntity
|
|
150
|
+
.associationLoader()
|
|
151
|
+
.withAuthorizationResults()
|
|
152
|
+
.loadAssociatedEntityThroughAsync([
|
|
153
|
+
{
|
|
154
|
+
associatedEntityClass: TestEntity_1.default,
|
|
155
|
+
fieldIdentifyingAssociatedEntity: 'foreignKey',
|
|
156
|
+
},
|
|
157
|
+
]);
|
|
158
|
+
expect(loaded2Result?.enforceValue().getID()).toEqual(testEntity2.getID());
|
|
159
|
+
const loaded3Result = await testEntity
|
|
160
|
+
.associationLoader()
|
|
161
|
+
.withAuthorizationResults()
|
|
162
|
+
.loadAssociatedEntityThroughAsync([
|
|
163
|
+
{
|
|
164
|
+
associatedEntityClass: TestEntity_1.default,
|
|
165
|
+
fieldIdentifyingAssociatedEntity: 'foreignKey',
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
associatedEntityClass: TestEntity2_1.default,
|
|
169
|
+
fieldIdentifyingAssociatedEntity: 'testIndexedField',
|
|
170
|
+
},
|
|
171
|
+
]);
|
|
172
|
+
expect(loaded3Result?.enforceValue().getID()).toEqual(testEntity3.getID());
|
|
173
|
+
const loaded4Result = await testEntity
|
|
174
|
+
.associationLoader()
|
|
175
|
+
.withAuthorizationResults()
|
|
176
|
+
.loadAssociatedEntityThroughAsync([
|
|
177
|
+
{
|
|
178
|
+
associatedEntityClass: TestEntity_1.default,
|
|
179
|
+
fieldIdentifyingAssociatedEntity: 'foreignKey',
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
associatedEntityClass: TestEntity2_1.default,
|
|
183
|
+
fieldIdentifyingAssociatedEntity: 'testIndexedField',
|
|
184
|
+
},
|
|
185
|
+
{
|
|
186
|
+
associatedEntityClass: TestEntity_1.default,
|
|
187
|
+
fieldIdentifyingAssociatedEntity: 'foreignKey',
|
|
188
|
+
},
|
|
189
|
+
]);
|
|
190
|
+
expect(loaded4Result?.enforceValue().getID()).toEqual(testEntity4.getID());
|
|
191
|
+
});
|
|
192
|
+
it('fails when chain loading associated entity fails', async () => {
|
|
193
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
194
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
195
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity2_1.default.creator(viewerContext)
|
|
196
|
+
.withAuthorizationResults()
|
|
197
|
+
.setField('foreignKey', (0, uuid_1.v4)())
|
|
198
|
+
.createAsync());
|
|
199
|
+
const loadResult = await testEntity
|
|
200
|
+
.associationLoader()
|
|
201
|
+
.withAuthorizationResults()
|
|
202
|
+
.loadAssociatedEntityThroughAsync([
|
|
203
|
+
{
|
|
204
|
+
associatedEntityClass: TestEntity_1.default,
|
|
205
|
+
fieldIdentifyingAssociatedEntity: 'foreignKey',
|
|
206
|
+
},
|
|
207
|
+
]);
|
|
208
|
+
expect(loadResult?.ok).toBe(false);
|
|
209
|
+
});
|
|
210
|
+
it('supports chain loading by field equality', async () => {
|
|
211
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
212
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
213
|
+
const fieldValue = (0, uuid_1.v4)();
|
|
214
|
+
const testEntity2 = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext)
|
|
215
|
+
.withAuthorizationResults()
|
|
216
|
+
.setField('stringField', fieldValue)
|
|
217
|
+
.createAsync());
|
|
218
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity2_1.default.creator(viewerContext)
|
|
219
|
+
.withAuthorizationResults()
|
|
220
|
+
.setField('foreignKey', fieldValue)
|
|
221
|
+
.createAsync());
|
|
222
|
+
const loaded2Result = await testEntity
|
|
223
|
+
.associationLoader()
|
|
224
|
+
.withAuthorizationResults()
|
|
225
|
+
.loadAssociatedEntityThroughAsync([
|
|
226
|
+
{
|
|
227
|
+
associatedEntityClass: TestEntity_1.default,
|
|
228
|
+
fieldIdentifyingAssociatedEntity: 'foreignKey',
|
|
229
|
+
associatedEntityLookupByField: 'stringField',
|
|
230
|
+
},
|
|
231
|
+
]);
|
|
232
|
+
expect(loaded2Result?.enforceValue().getID()).toEqual(testEntity2.getID());
|
|
233
|
+
});
|
|
234
|
+
it('returns null when chain loading by field equality returns null', async () => {
|
|
235
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
236
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
237
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity2_1.default.creator(viewerContext)
|
|
238
|
+
.withAuthorizationResults()
|
|
239
|
+
.setField('foreignKey', (0, uuid_1.v4)())
|
|
240
|
+
.createAsync());
|
|
241
|
+
const loaded2Result = await testEntity
|
|
242
|
+
.associationLoader()
|
|
243
|
+
.withAuthorizationResults()
|
|
244
|
+
.loadAssociatedEntityThroughAsync([
|
|
245
|
+
{
|
|
246
|
+
associatedEntityClass: TestEntity_1.default,
|
|
247
|
+
fieldIdentifyingAssociatedEntity: 'foreignKey',
|
|
248
|
+
associatedEntityLookupByField: 'stringField',
|
|
249
|
+
},
|
|
250
|
+
]);
|
|
251
|
+
expect(loaded2Result).toBeNull();
|
|
252
|
+
});
|
|
253
|
+
it('returns null when chain loading by field is null', async () => {
|
|
254
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
255
|
+
const viewerContext = new TestViewerContext_1.default(companionProvider);
|
|
256
|
+
const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creator(viewerContext)
|
|
257
|
+
.withAuthorizationResults()
|
|
258
|
+
.setField('nullableField', null)
|
|
259
|
+
.createAsync());
|
|
260
|
+
const loadedResult = await testEntity
|
|
261
|
+
.associationLoader()
|
|
262
|
+
.withAuthorizationResults()
|
|
263
|
+
.loadAssociatedEntityThroughAsync([
|
|
264
|
+
{
|
|
265
|
+
associatedEntityClass: TestEntity_1.default,
|
|
266
|
+
fieldIdentifyingAssociatedEntity: 'nullableField',
|
|
267
|
+
},
|
|
268
|
+
]);
|
|
269
|
+
expect(loadedResult).toBeNull();
|
|
270
|
+
});
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
//# sourceMappingURL=AuthorizationResultBasedEntityAssociationLoader-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthorizationResultBasedEntityAssociationLoader-test.js","sourceRoot":"","sources":["../../src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.ts"],"names":[],"mappings":"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"}
|