@expo/entity 0.39.0 → 0.41.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 +122 -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 +26 -8
- package/build/Entity.js +38 -25
- 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/EntityCreator.d.ts +27 -0
- package/build/EntityCreator.js +39 -0
- package/build/EntityCreator.js.map +1 -0
- 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 +24 -5
- package/build/ReadonlyEntity.js +33 -7
- 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 +242 -0
- package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js.map +1 -0
- package/build/__tests__/{EntityLoader-constructor-test.js → AuthorizationResultBasedEntityLoader-constructor-test.js} +10 -10
- 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 +63 -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 -20
- 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__/EntityEdges-test.js +57 -71
- 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 +6 -9
- 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 +47 -81
- package/build/__tests__/EntitySelfReferentialEdges-test.js.map +1 -1
- package/build/__tests__/ReadonlyEntity-test.js +40 -7
- package/build/__tests__/ReadonlyEntity-test.js.map +1 -1
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +6 -10
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +1 -1
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +10 -22
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.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/__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.js +4 -8
- package/build/utils/EntityPrivacyUtils.js.map +1 -1
- package/build/utils/__tests__/EntityPrivacyUtils-test.js +38 -28
- package/build/utils/__tests__/EntityPrivacyUtils-test.js.map +1 -1
- package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js +5 -5
- package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.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/package.json +19 -3
- package/src/AuthorizationResultBasedEntityAssociationLoader.ts +490 -0
- package/src/AuthorizationResultBasedEntityLoader.ts +1 -1
- 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 +140 -29
- package/src/EntityAssociationLoader.ts +38 -495
- 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 +121 -7
- package/src/ViewerScopedEntityLoaderFactory.ts +9 -2
- package/src/ViewerScopedEntityMutatorFactory.ts +29 -4
- package/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.ts +323 -0
- package/src/__tests__/{EntityLoader-constructor-test.ts → AuthorizationResultBasedEntityLoader-constructor-test.ts} +16 -9
- package/src/__tests__/AuthorizationResultBasedEntityLoader-test.ts +730 -0
- package/src/__tests__/EnforcingEntityAssociationLoader-test.ts +253 -0
- package/src/__tests__/Entity-test.ts +77 -5
- package/src/__tests__/EntityAssociationLoader-test.ts +15 -260
- package/src/__tests__/EntityCommonUseCases-test.ts +24 -15
- package/src/__tests__/EntityEdges-test.ts +44 -64
- package/src/__tests__/EntityLoader-test.ts +29 -681
- package/src/__tests__/EntityMutator-MutationCacheConsistency-test.ts +8 -9
- package/src/__tests__/EntityMutator-test.ts +116 -103
- package/src/__tests__/EntitySecondaryCacheLoader-test.ts +7 -7
- package/src/__tests__/EntitySelfReferentialEdges-test.ts +65 -81
- package/src/__tests__/ReadonlyEntity-test.ts +47 -7
- package/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.ts +15 -15
- package/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.ts +19 -22
- package/src/index.ts +19 -11
- package/src/internal/__tests__/EntityDataManager-test.ts +25 -25
- package/src/utils/EntityPrivacyUtils.ts +10 -13
- package/src/utils/__tests__/EntityPrivacyUtils-test.ts +21 -23
- package/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.ts +5 -5
- 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
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Result } from '@expo/results';
|
|
2
|
+
import { IEntityClass } from './Entity';
|
|
3
|
+
import EntityPrivacyPolicy from './EntityPrivacyPolicy';
|
|
4
|
+
import { EntityQueryContext } from './EntityQueryContext';
|
|
5
|
+
import ReadonlyEntity from './ReadonlyEntity';
|
|
6
|
+
import ViewerContext from './ViewerContext';
|
|
7
|
+
/**
|
|
8
|
+
* An association loader is a set of convenience methods for loading entities
|
|
9
|
+
* associated with an entity. In relational databases, these entities are often referenced
|
|
10
|
+
* by foreign keys.
|
|
11
|
+
*/
|
|
12
|
+
export default class AuthorizationResultBasedEntityAssociationLoader<TFields extends object, TID extends NonNullable<TFields[TSelectedFields]>, TViewerContext extends ViewerContext, TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>, TSelectedFields extends keyof TFields> {
|
|
13
|
+
private readonly entity;
|
|
14
|
+
private readonly queryContext;
|
|
15
|
+
constructor(entity: TEntity, queryContext: EntityQueryContext);
|
|
16
|
+
/**
|
|
17
|
+
* Load an associated entity identified by a field value of this entity. In a relational database,
|
|
18
|
+
* the field in this entity is a foreign key to the ID of the associated entity.
|
|
19
|
+
* @param fieldIdentifyingAssociatedEntity - field of this entity containing the ID of the associated entity
|
|
20
|
+
* @param associatedEntityClass - class of the associated entity
|
|
21
|
+
*/
|
|
22
|
+
loadAssociatedEntityAsync<TIdentifyingField extends keyof Pick<TFields, TSelectedFields>, TAssociatedFields extends object, TAssociatedID extends NonNullable<TAssociatedFields[TAssociatedSelectedFields]>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields>(fieldIdentifyingAssociatedEntity: TIdentifyingField, associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>): Promise<Result<null extends TFields[TIdentifyingField] ? TAssociatedEntity | null : TAssociatedEntity>>;
|
|
23
|
+
/**
|
|
24
|
+
* Load many entities associated with this entity, often referred to as entites belonging
|
|
25
|
+
* to this entity. In a relational database, the field in the foreign entity is a
|
|
26
|
+
* foreign key to the ID of this entity. Also commonly referred to as a has many relationship,
|
|
27
|
+
* where this entity has many associated entities.
|
|
28
|
+
* @param associatedEntityClass - class of the associated entities
|
|
29
|
+
* @param associatedEntityFieldContainingThisID - field of associated entity which contains the ID of this entity
|
|
30
|
+
*/
|
|
31
|
+
loadManyAssociatedEntitiesAsync<TAssociatedFields extends object, TAssociatedID extends NonNullable<TAssociatedFields[TAssociatedSelectedFields]>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields>(associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>, associatedEntityFieldContainingThisID: keyof Pick<TAssociatedFields, TAssociatedSelectedFields>): Promise<readonly Result<TAssociatedEntity>[]>;
|
|
32
|
+
/**
|
|
33
|
+
* Load an associated entity identified by a field value of this entity. In a relational database,
|
|
34
|
+
* the field in this entity is a foreign key to a unique field of the associated entity.
|
|
35
|
+
* @param fieldIdentifyingAssociatedEntity - field of this entity containing the value with which to look up associated entity
|
|
36
|
+
* @param associatedEntityClass - class of the associated entity
|
|
37
|
+
* @param associatedEntityLookupByField - field of associated entity with which to look up the associated entity
|
|
38
|
+
*/
|
|
39
|
+
loadAssociatedEntityByFieldEqualingAsync<TAssociatedFields extends object, TAssociatedID extends NonNullable<TAssociatedFields[TAssociatedSelectedFields]>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields>(fieldIdentifyingAssociatedEntity: keyof Pick<TFields, TSelectedFields>, associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>, associatedEntityLookupByField: keyof Pick<TAssociatedFields, TAssociatedSelectedFields>): Promise<Result<TAssociatedEntity> | null>;
|
|
40
|
+
/**
|
|
41
|
+
* Load many associated entities identified by a field value of this entity. In a relational database,
|
|
42
|
+
* the field in this entity refers to a field of the associated entity.
|
|
43
|
+
* @param fieldIdentifyingAssociatedEntity - field of this entity containing the value with which to look up associated entities
|
|
44
|
+
* @param associatedEntityClass - class of the associated entities
|
|
45
|
+
* @param associatedEntityLookupByField - field of associated entities with which to look up the associated entities
|
|
46
|
+
*/
|
|
47
|
+
loadManyAssociatedEntitiesByFieldEqualingAsync<TAssociatedFields extends object, TAssociatedID extends NonNullable<TAssociatedFields[TAssociatedSelectedFields]>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields>(fieldIdentifyingAssociatedEntity: keyof Pick<TFields, TSelectedFields>, associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>, associatedEntityLookupByField: keyof Pick<TAssociatedFields, TAssociatedSelectedFields>): Promise<readonly Result<TAssociatedEntity>[]>;
|
|
48
|
+
/**
|
|
49
|
+
* Load an associated entity by folding a sequence of EntityLoadThroughDirective. At each
|
|
50
|
+
* fold step, load an associated entity identified by a field value of the current fold value.
|
|
51
|
+
* @param loadDirectives - associated entity load directives instructing each step of the folds
|
|
52
|
+
*/
|
|
53
|
+
loadAssociatedEntityThroughAsync<TFields2 extends object, TID2 extends NonNullable<TFields2[TSelectedFields2]>, TEntity2 extends ReadonlyEntity<TFields2, TID2, TViewerContext, TSelectedFields2>, TPrivacyPolicy2 extends EntityPrivacyPolicy<TFields2, TID2, TViewerContext, TEntity2, TSelectedFields2>, TSelectedFields2 extends keyof TFields2 = keyof TFields2>(loadDirectives: [
|
|
54
|
+
EntityLoadThroughDirective<TViewerContext, TFields, TFields2, TID2, TEntity2, TPrivacyPolicy2, TSelectedFields, TSelectedFields2>
|
|
55
|
+
]): Promise<Result<TEntity2> | null>;
|
|
56
|
+
/**
|
|
57
|
+
* Load an associated entity by folding a sequence of EntityLoadThroughDirective. At each
|
|
58
|
+
* fold step, load an associated entity identified by a field value of the current fold value.
|
|
59
|
+
* @param loadDirectives - associated entity load directives instructing each step of the folds
|
|
60
|
+
*/
|
|
61
|
+
loadAssociatedEntityThroughAsync<TFields2 extends object, TID2 extends NonNullable<TFields2[TSelectedFields2]>, TEntity2 extends ReadonlyEntity<TFields2, TID2, TViewerContext, TSelectedFields2>, TPrivacyPolicy2 extends EntityPrivacyPolicy<TFields2, TID2, TViewerContext, TEntity2, TSelectedFields2>, TFields3 extends object, TID3 extends NonNullable<TFields3[TSelectedFields3]>, TEntity3 extends ReadonlyEntity<TFields3, TID3, TViewerContext, TSelectedFields3>, TPrivacyPolicy3 extends EntityPrivacyPolicy<TFields3, TID3, TViewerContext, TEntity3, TSelectedFields3>, TSelectedFields2 extends keyof TFields2 = keyof TFields2, TSelectedFields3 extends keyof TFields3 = keyof TFields3>(loadDirectives: [
|
|
62
|
+
EntityLoadThroughDirective<TViewerContext, TFields, TFields2, TID2, TEntity2, TPrivacyPolicy2, TSelectedFields, TSelectedFields2>,
|
|
63
|
+
EntityLoadThroughDirective<TViewerContext, TFields2, TFields3, TID3, TEntity3, TPrivacyPolicy3, TSelectedFields2, TSelectedFields3>
|
|
64
|
+
]): Promise<Result<TEntity3> | null>;
|
|
65
|
+
/**
|
|
66
|
+
* Load an associated entity by folding a sequence of EntityLoadThroughDirective. At each
|
|
67
|
+
* fold step, load an associated entity identified by a field value of the current fold value.
|
|
68
|
+
* @param loadDirectives - associated entity load directives instructing each step of the folds
|
|
69
|
+
*/
|
|
70
|
+
loadAssociatedEntityThroughAsync<TFields2 extends object, TID2 extends NonNullable<TFields2[TSelectedFields2]>, TEntity2 extends ReadonlyEntity<TFields2, TID2, TViewerContext, TSelectedFields2>, TPrivacyPolicy2 extends EntityPrivacyPolicy<TFields2, TID2, TViewerContext, TEntity2, TSelectedFields2>, TFields3 extends object, TID3 extends NonNullable<TFields3[TSelectedFields3]>, TEntity3 extends ReadonlyEntity<TFields3, TID3, TViewerContext, TSelectedFields3>, TPrivacyPolicy3 extends EntityPrivacyPolicy<TFields3, TID3, TViewerContext, TEntity3, TSelectedFields3>, TFields4 extends object, TID4 extends NonNullable<TFields4[TSelectedFields4]>, TEntity4 extends ReadonlyEntity<TFields4, TID4, TViewerContext, TSelectedFields4>, TPrivacyPolicy4 extends EntityPrivacyPolicy<TFields4, TID4, TViewerContext, TEntity4, TSelectedFields4>, TSelectedFields2 extends keyof TFields2 = keyof TFields2, TSelectedFields3 extends keyof TFields3 = keyof TFields3, TSelectedFields4 extends keyof TFields4 = keyof TFields4>(loadDirectives: [
|
|
71
|
+
EntityLoadThroughDirective<TViewerContext, TFields, TFields2, TID2, TEntity2, TPrivacyPolicy2, TSelectedFields, TSelectedFields2>,
|
|
72
|
+
EntityLoadThroughDirective<TViewerContext, TFields2, TFields3, TID3, TEntity3, TPrivacyPolicy3, TSelectedFields2, TSelectedFields3>,
|
|
73
|
+
EntityLoadThroughDirective<TViewerContext, TFields3, TFields4, TID4, TEntity4, TPrivacyPolicy4, TSelectedFields3, TSelectedFields4>
|
|
74
|
+
]): Promise<Result<TEntity4> | null>;
|
|
75
|
+
/**
|
|
76
|
+
* Load an associated entity by folding a sequence of EntityLoadThroughDirective. At each
|
|
77
|
+
* fold step, load an associated entity identified by a field value of the current fold value.
|
|
78
|
+
* @param loadDirectives - associated entity load directives instructing each step of the folds
|
|
79
|
+
*/
|
|
80
|
+
loadAssociatedEntityThroughAsync(loadDirectives: EntityLoadThroughDirective<TViewerContext, any, any, any, any, any, any, any>[]): Promise<Result<ReadonlyEntity<any, any, any, any>> | null>;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Instruction for each step of a load-associated-through method.
|
|
84
|
+
*/
|
|
85
|
+
export interface EntityLoadThroughDirective<TViewerContext extends ViewerContext, TFields, TAssociatedFields extends object, TAssociatedID extends NonNullable<TAssociatedFields[TAssociatedSelectedFields]>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TSelectedFields extends keyof TFields = keyof TFields, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields> {
|
|
86
|
+
/**
|
|
87
|
+
* Class of entity to load at this step.
|
|
88
|
+
*/
|
|
89
|
+
associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>;
|
|
90
|
+
/**
|
|
91
|
+
* Field of the current entity with which to load an instance of associatedEntityClass.
|
|
92
|
+
*/
|
|
93
|
+
fieldIdentifyingAssociatedEntity: keyof Pick<TFields, TSelectedFields>;
|
|
94
|
+
/**
|
|
95
|
+
* Field by which to load the instance of associatedEntityClass. If not provided, the
|
|
96
|
+
* associatedEntityClass instance is fetched by its ID.
|
|
97
|
+
*/
|
|
98
|
+
associatedEntityLookupByField?: keyof Pick<TAssociatedFields, TAssociatedSelectedFields>;
|
|
99
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const results_1 = require("@expo/results");
|
|
4
|
+
/**
|
|
5
|
+
* An association loader is a set of convenience methods for loading entities
|
|
6
|
+
* associated with an entity. In relational databases, these entities are often referenced
|
|
7
|
+
* by foreign keys.
|
|
8
|
+
*/
|
|
9
|
+
class AuthorizationResultBasedEntityAssociationLoader {
|
|
10
|
+
entity;
|
|
11
|
+
queryContext;
|
|
12
|
+
constructor(entity, queryContext) {
|
|
13
|
+
this.entity = entity;
|
|
14
|
+
this.queryContext = queryContext;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Load an associated entity identified by a field value of this entity. In a relational database,
|
|
18
|
+
* the field in this entity is a foreign key to the ID of the associated entity.
|
|
19
|
+
* @param fieldIdentifyingAssociatedEntity - field of this entity containing the ID of the associated entity
|
|
20
|
+
* @param associatedEntityClass - class of the associated entity
|
|
21
|
+
*/
|
|
22
|
+
async loadAssociatedEntityAsync(fieldIdentifyingAssociatedEntity, associatedEntityClass) {
|
|
23
|
+
const associatedEntityID = this.entity.getField(fieldIdentifyingAssociatedEntity);
|
|
24
|
+
if (!associatedEntityID) {
|
|
25
|
+
return (0, results_1.result)(null);
|
|
26
|
+
}
|
|
27
|
+
const loader = this.entity
|
|
28
|
+
.getViewerContext()
|
|
29
|
+
.getViewerScopedEntityCompanionForClass(associatedEntityClass)
|
|
30
|
+
.getLoaderFactory()
|
|
31
|
+
.forLoad(this.queryContext, { previousValue: null, cascadingDeleteCause: null });
|
|
32
|
+
return (await loader.loadByIDAsync(associatedEntityID));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Load many entities associated with this entity, often referred to as entites belonging
|
|
36
|
+
* to this entity. In a relational database, the field in the foreign entity is a
|
|
37
|
+
* foreign key to the ID of this entity. Also commonly referred to as a has many relationship,
|
|
38
|
+
* where this entity has many associated entities.
|
|
39
|
+
* @param associatedEntityClass - class of the associated entities
|
|
40
|
+
* @param associatedEntityFieldContainingThisID - field of associated entity which contains the ID of this entity
|
|
41
|
+
*/
|
|
42
|
+
async loadManyAssociatedEntitiesAsync(associatedEntityClass, associatedEntityFieldContainingThisID) {
|
|
43
|
+
const thisID = this.entity.getID();
|
|
44
|
+
const loader = this.entity
|
|
45
|
+
.getViewerContext()
|
|
46
|
+
.getViewerScopedEntityCompanionForClass(associatedEntityClass)
|
|
47
|
+
.getLoaderFactory()
|
|
48
|
+
.forLoad(this.queryContext, { previousValue: null, cascadingDeleteCause: null });
|
|
49
|
+
return await loader.loadManyByFieldEqualingAsync(associatedEntityFieldContainingThisID, thisID);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Load an associated entity identified by a field value of this entity. In a relational database,
|
|
53
|
+
* the field in this entity is a foreign key to a unique field of the associated entity.
|
|
54
|
+
* @param fieldIdentifyingAssociatedEntity - field of this entity containing the value with which to look up associated entity
|
|
55
|
+
* @param associatedEntityClass - class of the associated entity
|
|
56
|
+
* @param associatedEntityLookupByField - field of associated entity with which to look up the associated entity
|
|
57
|
+
*/
|
|
58
|
+
async loadAssociatedEntityByFieldEqualingAsync(fieldIdentifyingAssociatedEntity, associatedEntityClass, associatedEntityLookupByField) {
|
|
59
|
+
const associatedFieldValue = this.entity.getField(fieldIdentifyingAssociatedEntity);
|
|
60
|
+
if (!associatedFieldValue) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
const loader = this.entity
|
|
64
|
+
.getViewerContext()
|
|
65
|
+
.getViewerScopedEntityCompanionForClass(associatedEntityClass)
|
|
66
|
+
.getLoaderFactory()
|
|
67
|
+
.forLoad(this.queryContext, { previousValue: null, cascadingDeleteCause: null });
|
|
68
|
+
return await loader.loadByFieldEqualingAsync(associatedEntityLookupByField, associatedFieldValue);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Load many associated entities identified by a field value of this entity. In a relational database,
|
|
72
|
+
* the field in this entity refers to a field of the associated entity.
|
|
73
|
+
* @param fieldIdentifyingAssociatedEntity - field of this entity containing the value with which to look up associated entities
|
|
74
|
+
* @param associatedEntityClass - class of the associated entities
|
|
75
|
+
* @param associatedEntityLookupByField - field of associated entities with which to look up the associated entities
|
|
76
|
+
*/
|
|
77
|
+
async loadManyAssociatedEntitiesByFieldEqualingAsync(fieldIdentifyingAssociatedEntity, associatedEntityClass, associatedEntityLookupByField) {
|
|
78
|
+
const associatedFieldValue = this.entity.getField(fieldIdentifyingAssociatedEntity);
|
|
79
|
+
if (!associatedFieldValue) {
|
|
80
|
+
return [];
|
|
81
|
+
}
|
|
82
|
+
const loader = this.entity
|
|
83
|
+
.getViewerContext()
|
|
84
|
+
.getViewerScopedEntityCompanionForClass(associatedEntityClass)
|
|
85
|
+
.getLoaderFactory()
|
|
86
|
+
.forLoad(this.queryContext, { previousValue: null, cascadingDeleteCause: null });
|
|
87
|
+
return await loader.loadManyByFieldEqualingAsync(associatedEntityLookupByField, associatedFieldValue);
|
|
88
|
+
}
|
|
89
|
+
async loadAssociatedEntityThroughAsync(loadDirectives) {
|
|
90
|
+
let currentEntity = this.entity;
|
|
91
|
+
for (const loadDirective of loadDirectives) {
|
|
92
|
+
const { associatedEntityClass, fieldIdentifyingAssociatedEntity, associatedEntityLookupByField, } = loadDirective;
|
|
93
|
+
let associatedEntityResult;
|
|
94
|
+
if (associatedEntityLookupByField) {
|
|
95
|
+
associatedEntityResult = await currentEntity
|
|
96
|
+
.associationLoaderWithAuthorizationResults(this.queryContext)
|
|
97
|
+
.loadAssociatedEntityByFieldEqualingAsync(fieldIdentifyingAssociatedEntity, associatedEntityClass, associatedEntityLookupByField);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
const associatedEntityResultLocal = await currentEntity
|
|
101
|
+
.associationLoaderWithAuthorizationResults(this.queryContext)
|
|
102
|
+
.loadAssociatedEntityAsync(fieldIdentifyingAssociatedEntity, associatedEntityClass);
|
|
103
|
+
if (associatedEntityResultLocal.ok && associatedEntityResultLocal.value === null) {
|
|
104
|
+
associatedEntityResult = null;
|
|
105
|
+
}
|
|
106
|
+
else {
|
|
107
|
+
associatedEntityResult = associatedEntityResultLocal;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (!associatedEntityResult) {
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
if (!associatedEntityResult.ok) {
|
|
114
|
+
return (0, results_1.result)(associatedEntityResult.reason);
|
|
115
|
+
}
|
|
116
|
+
currentEntity = associatedEntityResult.value;
|
|
117
|
+
}
|
|
118
|
+
return (0, results_1.result)(currentEntity);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
exports.default = AuthorizationResultBasedEntityAssociationLoader;
|
|
122
|
+
//# sourceMappingURL=AuthorizationResultBasedEntityAssociationLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthorizationResultBasedEntityAssociationLoader.js","sourceRoot":"","sources":["../src/AuthorizationResultBasedEntityAssociationLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ export default class AuthorizationResultBasedEntityLoader<TFields extends object
|
|
|
21
21
|
private readonly entityClass;
|
|
22
22
|
private readonly dataManager;
|
|
23
23
|
protected readonly metricsAdapter: IEntityMetricsAdapter;
|
|
24
|
-
|
|
24
|
+
readonly utils: EntityLoaderUtils<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>;
|
|
25
25
|
constructor(queryContext: EntityQueryContext, entityConfiguration: EntityConfiguration<TFields>, entityClass: IEntityClass<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>, dataManager: EntityDataManager<TFields>, metricsAdapter: IEntityMetricsAdapter, utils: EntityLoaderUtils<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>);
|
|
26
26
|
/**
|
|
27
27
|
* Load many entities where fieldName is one of fieldValues.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AuthorizationResultBasedEntityLoader.js","sourceRoot":"","sources":["../src/AuthorizationResultBasedEntityLoader.ts"],"names":[],"mappings":";;;;;AAAA,2CAA+C;AAC/C,0DAAkC;AAClC,4DAAoC;AAIpC,mEAKiC;AAMjC,yGAAiF;AACjF,uFAA+D;AAG/D,mDAAkD;AAElD;;;;;GAKG;AACH,MAAqB,oCAAoC;IAepC;IACA;IACA;IAQA;IACE;
|
|
1
|
+
{"version":3,"file":"AuthorizationResultBasedEntityLoader.js","sourceRoot":"","sources":["../src/AuthorizationResultBasedEntityLoader.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ import EntityPrivacyPolicy from './EntityPrivacyPolicy';
|
|
|
11
11
|
import { EntityQueryContext, EntityTransactionalQueryContext } from './EntityQueryContext';
|
|
12
12
|
import ViewerContext from './ViewerContext';
|
|
13
13
|
import IEntityMetricsAdapter from './metrics/IEntityMetricsAdapter';
|
|
14
|
-
declare abstract class
|
|
14
|
+
declare abstract class AuthorizationResultBasedBaseMutator<TFields extends object, TID extends NonNullable<TFields[TSelectedFields]>, TViewerContext extends ViewerContext, TEntity extends Entity<TFields, TID, TViewerContext, TSelectedFields>, TPrivacyPolicy extends EntityPrivacyPolicy<TFields, TID, TViewerContext, TEntity, TSelectedFields>, TSelectedFields extends keyof TFields> {
|
|
15
15
|
protected readonly companionProvider: EntityCompanionProvider;
|
|
16
16
|
protected readonly viewerContext: TViewerContext;
|
|
17
17
|
protected readonly queryContext: EntityQueryContext;
|
|
@@ -32,11 +32,11 @@ declare abstract class BaseMutator<TFields extends object, TID extends NonNullab
|
|
|
32
32
|
/**
|
|
33
33
|
* Mutator for creating a new entity.
|
|
34
34
|
*/
|
|
35
|
-
export declare class
|
|
35
|
+
export declare class AuthorizationResultBasedCreateMutator<TFields extends object, TID extends NonNullable<TFields[TSelectedFields]>, TViewerContext extends ViewerContext, TEntity extends Entity<TFields, TID, TViewerContext, TSelectedFields>, TPrivacyPolicy extends EntityPrivacyPolicy<TFields, TID, TViewerContext, TEntity, TSelectedFields>, TSelectedFields extends keyof TFields> extends AuthorizationResultBasedBaseMutator<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields> {
|
|
36
36
|
private readonly fieldsForEntity;
|
|
37
37
|
/**
|
|
38
38
|
* Set the value for entity field.
|
|
39
|
-
* @param fieldName - entity field being
|
|
39
|
+
* @param fieldName - entity field being set
|
|
40
40
|
* @param value - value for entity field
|
|
41
41
|
*/
|
|
42
42
|
setField<K extends keyof Pick<TFields, TSelectedFields>>(fieldName: K, value: TFields[K]): this;
|
|
@@ -46,17 +46,13 @@ export declare class CreateMutator<TFields extends object, TID extends NonNullab
|
|
|
46
46
|
* @returns authorized, cached, newly-created entity result, where result error can be UnauthorizedError
|
|
47
47
|
*/
|
|
48
48
|
createAsync(): Promise<Result<TEntity>>;
|
|
49
|
-
/**
|
|
50
|
-
* Convenience method that returns the new entity or throws upon create failure.
|
|
51
|
-
*/
|
|
52
|
-
enforceCreateAsync(): Promise<TEntity>;
|
|
53
49
|
private createInTransactionAsync;
|
|
54
50
|
private createInternalAsync;
|
|
55
51
|
}
|
|
56
52
|
/**
|
|
57
53
|
* Mutator for updating an existing entity.
|
|
58
54
|
*/
|
|
59
|
-
export declare class
|
|
55
|
+
export declare class AuthorizationResultBasedUpdateMutator<TFields extends object, TID extends NonNullable<TFields[TSelectedFields]>, TViewerContext extends ViewerContext, TEntity extends Entity<TFields, TID, TViewerContext, TSelectedFields>, TPrivacyPolicy extends EntityPrivacyPolicy<TFields, TID, TViewerContext, TEntity, TSelectedFields>, TSelectedFields extends keyof TFields> extends AuthorizationResultBasedBaseMutator<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields> {
|
|
60
56
|
private readonly originalEntity;
|
|
61
57
|
private readonly fieldsForEntity;
|
|
62
58
|
private readonly updatedFields;
|
|
@@ -73,10 +69,6 @@ export declare class UpdateMutator<TFields extends object, TID extends NonNullab
|
|
|
73
69
|
* @returns authorized updated entity result, where result error can be UnauthorizedError
|
|
74
70
|
*/
|
|
75
71
|
updateAsync(): Promise<Result<TEntity>>;
|
|
76
|
-
/**
|
|
77
|
-
* Convenience method that returns the updated entity or throws upon update failure.
|
|
78
|
-
*/
|
|
79
|
-
enforceUpdateAsync(): Promise<TEntity>;
|
|
80
72
|
private updateInTransactionAsync;
|
|
81
73
|
private updateInternalAsync;
|
|
82
74
|
private ensureStableIDField;
|
|
@@ -84,7 +76,7 @@ export declare class UpdateMutator<TFields extends object, TID extends NonNullab
|
|
|
84
76
|
/**
|
|
85
77
|
* Mutator for deleting an existing entity.
|
|
86
78
|
*/
|
|
87
|
-
export declare class
|
|
79
|
+
export declare class AuthorizationResultBasedDeleteMutator<TFields extends object, TID extends NonNullable<TFields[TSelectedFields]>, TViewerContext extends ViewerContext, TEntity extends Entity<TFields, TID, TViewerContext, TSelectedFields>, TPrivacyPolicy extends EntityPrivacyPolicy<TFields, TID, TViewerContext, TEntity, TSelectedFields>, TSelectedFields extends keyof TFields> extends AuthorizationResultBasedBaseMutator<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields> {
|
|
88
80
|
private readonly entity;
|
|
89
81
|
constructor(companionProvider: EntityCompanionProvider, viewerContext: TViewerContext, queryContext: EntityQueryContext, entityConfiguration: EntityConfiguration<TFields>, entityClass: IEntityClass<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>, privacyPolicy: TPrivacyPolicy, mutationValidators: EntityMutationValidator<TFields, TID, TViewerContext, TEntity, TSelectedFields>[], mutationTriggers: EntityMutationTriggerConfiguration<TFields, TID, TViewerContext, TEntity, TSelectedFields>, entityLoaderFactory: EntityLoaderFactory<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>, databaseAdapter: EntityDatabaseAdapter<TFields>, metricsAdapter: IEntityMetricsAdapter, entity: TEntity);
|
|
90
82
|
/**
|
|
@@ -92,10 +84,6 @@ export declare class DeleteMutator<TFields extends object, TID extends NonNullab
|
|
|
92
84
|
* @returns void result, where result error can be UnauthorizedError
|
|
93
85
|
*/
|
|
94
86
|
deleteAsync(): Promise<Result<void>>;
|
|
95
|
-
/**
|
|
96
|
-
* Convenience method that throws upon delete failure.
|
|
97
|
-
*/
|
|
98
|
-
enforceDeleteAsync(): Promise<void>;
|
|
99
87
|
private deleteInTransactionAsync;
|
|
100
88
|
private deleteInternalAsync;
|
|
101
89
|
/**
|
|
@@ -3,16 +3,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
6
|
+
exports.AuthorizationResultBasedDeleteMutator = exports.AuthorizationResultBasedUpdateMutator = exports.AuthorizationResultBasedCreateMutator = void 0;
|
|
7
7
|
const results_1 = require("@expo/results");
|
|
8
8
|
const invariant_1 = __importDefault(require("invariant"));
|
|
9
9
|
const EntityFieldDefinition_1 = require("./EntityFieldDefinition");
|
|
10
10
|
const EntityMutationInfo_1 = require("./EntityMutationInfo");
|
|
11
|
+
const entityUtils_1 = require("./entityUtils");
|
|
11
12
|
const EntityInvalidFieldValueError_1 = __importDefault(require("./errors/EntityInvalidFieldValueError"));
|
|
12
13
|
const EntityMetricsUtils_1 = require("./metrics/EntityMetricsUtils");
|
|
13
14
|
const IEntityMetricsAdapter_1 = require("./metrics/IEntityMetricsAdapter");
|
|
14
15
|
const maps_1 = require("./utils/collections/maps");
|
|
15
|
-
class
|
|
16
|
+
class AuthorizationResultBasedBaseMutator {
|
|
16
17
|
companionProvider;
|
|
17
18
|
viewerContext;
|
|
18
19
|
queryContext;
|
|
@@ -67,11 +68,11 @@ class BaseMutator {
|
|
|
67
68
|
/**
|
|
68
69
|
* Mutator for creating a new entity.
|
|
69
70
|
*/
|
|
70
|
-
class
|
|
71
|
+
class AuthorizationResultBasedCreateMutator extends AuthorizationResultBasedBaseMutator {
|
|
71
72
|
fieldsForEntity = {};
|
|
72
73
|
/**
|
|
73
74
|
* Set the value for entity field.
|
|
74
|
-
* @param fieldName - entity field being
|
|
75
|
+
* @param fieldName - entity field being set
|
|
75
76
|
* @param value - value for entity field
|
|
76
77
|
*/
|
|
77
78
|
setField(fieldName, value) {
|
|
@@ -86,12 +87,6 @@ class CreateMutator extends BaseMutator {
|
|
|
86
87
|
async createAsync() {
|
|
87
88
|
return await (0, EntityMetricsUtils_1.timeAndLogMutationEventAsync)(this.metricsAdapter, IEntityMetricsAdapter_1.EntityMetricsMutationType.CREATE, this.entityClass.name)(this.createInTransactionAsync());
|
|
88
89
|
}
|
|
89
|
-
/**
|
|
90
|
-
* Convenience method that returns the new entity or throws upon create failure.
|
|
91
|
-
*/
|
|
92
|
-
async enforceCreateAsync() {
|
|
93
|
-
return await (0, results_1.enforceAsyncResult)(this.createAsync());
|
|
94
|
-
}
|
|
95
90
|
async createInTransactionAsync() {
|
|
96
91
|
return await this.queryContext.runInTransactionIfNotInTransactionAsync((innerQueryContext) => this.createInternalAsync(innerQueryContext));
|
|
97
92
|
}
|
|
@@ -101,7 +96,7 @@ class CreateMutator extends BaseMutator {
|
|
|
101
96
|
previousValue: null,
|
|
102
97
|
cascadingDeleteCause: null,
|
|
103
98
|
});
|
|
104
|
-
const temporaryEntityForPrivacyCheck = entityLoader.utils
|
|
99
|
+
const temporaryEntityForPrivacyCheck = entityLoader.utils.constructEntity({
|
|
105
100
|
[this.entityConfiguration.idField]: '00000000-0000-0000-0000-000000000000', // zero UUID
|
|
106
101
|
...this.fieldsForEntity,
|
|
107
102
|
});
|
|
@@ -113,22 +108,20 @@ class CreateMutator extends BaseMutator {
|
|
|
113
108
|
await this.executeMutationTriggersAsync(this.mutationTriggers.beforeAll, queryContext, temporaryEntityForPrivacyCheck, { type: EntityMutationInfo_1.EntityMutationType.CREATE });
|
|
114
109
|
await this.executeMutationTriggersAsync(this.mutationTriggers.beforeCreate, queryContext, temporaryEntityForPrivacyCheck, { type: EntityMutationInfo_1.EntityMutationType.CREATE });
|
|
115
110
|
const insertResult = await this.databaseAdapter.insertAsync(queryContext, this.fieldsForEntity);
|
|
116
|
-
queryContext.appendPostCommitInvalidationCallback(entityLoader.utils
|
|
117
|
-
const unauthorizedEntityAfterInsert = entityLoader.utils
|
|
118
|
-
const newEntity = await entityLoader
|
|
119
|
-
.enforcing()
|
|
120
|
-
.loadByIDAsync(unauthorizedEntityAfterInsert.getID());
|
|
111
|
+
queryContext.appendPostCommitInvalidationCallback(entityLoader.utils.invalidateFieldsAsync.bind(entityLoader, insertResult));
|
|
112
|
+
const unauthorizedEntityAfterInsert = entityLoader.utils.constructEntity(insertResult);
|
|
113
|
+
const newEntity = await (0, results_1.enforceAsyncResult)(entityLoader.loadByIDAsync(unauthorizedEntityAfterInsert.getID()));
|
|
121
114
|
await this.executeMutationTriggersAsync(this.mutationTriggers.afterCreate, queryContext, newEntity, { type: EntityMutationInfo_1.EntityMutationType.CREATE });
|
|
122
115
|
await this.executeMutationTriggersAsync(this.mutationTriggers.afterAll, queryContext, newEntity, { type: EntityMutationInfo_1.EntityMutationType.CREATE });
|
|
123
116
|
queryContext.appendPostCommitCallback(this.executeNonTransactionalMutationTriggersAsync.bind(this, this.mutationTriggers.afterCommit, newEntity, { type: EntityMutationInfo_1.EntityMutationType.CREATE }));
|
|
124
117
|
return (0, results_1.result)(newEntity);
|
|
125
118
|
}
|
|
126
119
|
}
|
|
127
|
-
exports.
|
|
120
|
+
exports.AuthorizationResultBasedCreateMutator = AuthorizationResultBasedCreateMutator;
|
|
128
121
|
/**
|
|
129
122
|
* Mutator for updating an existing entity.
|
|
130
123
|
*/
|
|
131
|
-
class
|
|
124
|
+
class AuthorizationResultBasedUpdateMutator extends AuthorizationResultBasedBaseMutator {
|
|
132
125
|
originalEntity;
|
|
133
126
|
fieldsForEntity;
|
|
134
127
|
updatedFields = {};
|
|
@@ -155,12 +148,6 @@ class UpdateMutator extends BaseMutator {
|
|
|
155
148
|
async updateAsync() {
|
|
156
149
|
return await (0, EntityMetricsUtils_1.timeAndLogMutationEventAsync)(this.metricsAdapter, IEntityMetricsAdapter_1.EntityMetricsMutationType.UPDATE, this.entityClass.name)(this.updateInTransactionAsync(false, null));
|
|
157
150
|
}
|
|
158
|
-
/**
|
|
159
|
-
* Convenience method that returns the updated entity or throws upon update failure.
|
|
160
|
-
*/
|
|
161
|
-
async enforceUpdateAsync() {
|
|
162
|
-
return await (0, results_1.enforceAsyncResult)(this.updateAsync());
|
|
163
|
-
}
|
|
164
151
|
async updateInTransactionAsync(skipDatabaseUpdate, cascadingDeleteCause) {
|
|
165
152
|
return await this.queryContext.runInTransactionIfNotInTransactionAsync((innerQueryContext) => this.updateInternalAsync(innerQueryContext, skipDatabaseUpdate, cascadingDeleteCause));
|
|
166
153
|
}
|
|
@@ -171,7 +158,7 @@ class UpdateMutator extends BaseMutator {
|
|
|
171
158
|
previousValue: this.originalEntity,
|
|
172
159
|
cascadingDeleteCause,
|
|
173
160
|
});
|
|
174
|
-
const entityAboutToBeUpdated = entityLoader.utils
|
|
161
|
+
const entityAboutToBeUpdated = entityLoader.utils.constructEntity(this.fieldsForEntity);
|
|
175
162
|
const authorizeUpdateResult = await (0, results_1.asyncResult)(this.privacyPolicy.authorizeUpdateAsync(this.viewerContext, queryContext, { previousValue: this.originalEntity, cascadingDeleteCause }, entityAboutToBeUpdated, this.metricsAdapter));
|
|
176
163
|
if (!authorizeUpdateResult.ok) {
|
|
177
164
|
return authorizeUpdateResult;
|
|
@@ -183,13 +170,9 @@ class UpdateMutator extends BaseMutator {
|
|
|
183
170
|
if (!skipDatabaseUpdate) {
|
|
184
171
|
await this.databaseAdapter.updateAsync(queryContext, this.entityConfiguration.idField, entityAboutToBeUpdated.getID(), this.updatedFields);
|
|
185
172
|
}
|
|
186
|
-
queryContext.appendPostCommitInvalidationCallback(entityLoader
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
queryContext.appendPostCommitInvalidationCallback(entityLoader.utils().invalidateFieldsAsync.bind(entityLoader, this.fieldsForEntity));
|
|
190
|
-
const updatedEntity = await entityLoader
|
|
191
|
-
.enforcing()
|
|
192
|
-
.loadByIDAsync(entityAboutToBeUpdated.getID()); // ID is guaranteed to be stable by ensureStableIDField
|
|
173
|
+
queryContext.appendPostCommitInvalidationCallback(entityLoader.utils.invalidateFieldsAsync.bind(entityLoader, this.originalEntity.getAllDatabaseFields()));
|
|
174
|
+
queryContext.appendPostCommitInvalidationCallback(entityLoader.utils.invalidateFieldsAsync.bind(entityLoader, this.fieldsForEntity));
|
|
175
|
+
const updatedEntity = await (0, results_1.enforceAsyncResult)(entityLoader.loadByIDAsync(entityAboutToBeUpdated.getID())); // ID is guaranteed to be stable by ensureStableIDField
|
|
193
176
|
await this.executeMutationTriggersAsync(this.mutationTriggers.afterUpdate, queryContext, updatedEntity, { type: EntityMutationInfo_1.EntityMutationType.UPDATE, previousValue: this.originalEntity, cascadingDeleteCause });
|
|
194
177
|
await this.executeMutationTriggersAsync(this.mutationTriggers.afterAll, queryContext, updatedEntity, { type: EntityMutationInfo_1.EntityMutationType.UPDATE, previousValue: this.originalEntity, cascadingDeleteCause });
|
|
195
178
|
queryContext.appendPostCommitCallback(this.executeNonTransactionalMutationTriggersAsync.bind(this, this.mutationTriggers.afterCommit, updatedEntity, {
|
|
@@ -207,11 +190,11 @@ class UpdateMutator extends BaseMutator {
|
|
|
207
190
|
}
|
|
208
191
|
}
|
|
209
192
|
}
|
|
210
|
-
exports.
|
|
193
|
+
exports.AuthorizationResultBasedUpdateMutator = AuthorizationResultBasedUpdateMutator;
|
|
211
194
|
/**
|
|
212
195
|
* Mutator for deleting an existing entity.
|
|
213
196
|
*/
|
|
214
|
-
class
|
|
197
|
+
class AuthorizationResultBasedDeleteMutator extends AuthorizationResultBasedBaseMutator {
|
|
215
198
|
entity;
|
|
216
199
|
constructor(companionProvider, viewerContext, queryContext, entityConfiguration, entityClass, privacyPolicy, mutationValidators, mutationTriggers, entityLoaderFactory, databaseAdapter, metricsAdapter, entity) {
|
|
217
200
|
super(companionProvider, viewerContext, queryContext, entityConfiguration, entityClass, privacyPolicy, mutationValidators, mutationTriggers, entityLoaderFactory, databaseAdapter, metricsAdapter);
|
|
@@ -224,12 +207,6 @@ class DeleteMutator extends BaseMutator {
|
|
|
224
207
|
async deleteAsync() {
|
|
225
208
|
return await (0, EntityMetricsUtils_1.timeAndLogMutationEventAsync)(this.metricsAdapter, IEntityMetricsAdapter_1.EntityMetricsMutationType.DELETE, this.entityClass.name)(this.deleteInTransactionAsync(new Set(), false, null));
|
|
226
209
|
}
|
|
227
|
-
/**
|
|
228
|
-
* Convenience method that throws upon delete failure.
|
|
229
|
-
*/
|
|
230
|
-
async enforceDeleteAsync() {
|
|
231
|
-
await (0, results_1.enforceAsyncResult)(this.deleteAsync());
|
|
232
|
-
}
|
|
233
210
|
async deleteInTransactionAsync(processedEntityIdentifiersFromTransitiveDeletions, skipDatabaseDeletion, cascadingDeleteCause) {
|
|
234
211
|
return await this.queryContext.runInTransactionIfNotInTransactionAsync((innerQueryContext) => this.deleteInternalAsync(innerQueryContext, processedEntityIdentifiersFromTransitiveDeletions, skipDatabaseDeletion, cascadingDeleteCause));
|
|
235
212
|
}
|
|
@@ -248,9 +225,7 @@ class DeleteMutator extends BaseMutator {
|
|
|
248
225
|
previousValue: null,
|
|
249
226
|
cascadingDeleteCause,
|
|
250
227
|
});
|
|
251
|
-
queryContext.appendPostCommitInvalidationCallback(entityLoader
|
|
252
|
-
.utils()
|
|
253
|
-
.invalidateFieldsAsync.bind(entityLoader, this.entity.getAllDatabaseFields()));
|
|
228
|
+
queryContext.appendPostCommitInvalidationCallback(entityLoader.utils.invalidateFieldsAsync.bind(entityLoader, this.entity.getAllDatabaseFields()));
|
|
254
229
|
await this.executeMutationTriggersAsync(this.mutationTriggers.afterDelete, queryContext, this.entity, { type: EntityMutationInfo_1.EntityMutationType.DELETE, cascadingDeleteCause });
|
|
255
230
|
await this.executeMutationTriggersAsync(this.mutationTriggers.afterAll, queryContext, this.entity, { type: EntityMutationInfo_1.EntityMutationType.DELETE, cascadingDeleteCause });
|
|
256
231
|
queryContext.appendPostCommitCallback(this.executeNonTransactionalMutationTriggersAsync.bind(this, this.mutationTriggers.afterCommit, this.entity, { type: EntityMutationInfo_1.EntityMutationType.DELETE, cascadingDeleteCause }));
|
|
@@ -302,15 +277,14 @@ class DeleteMutator extends BaseMutator {
|
|
|
302
277
|
if (associatedConfiguration !== entityConfiguration) {
|
|
303
278
|
return;
|
|
304
279
|
}
|
|
305
|
-
const inboundReferenceEntities = await loaderFactory
|
|
280
|
+
const inboundReferenceEntities = await (0, entityUtils_1.enforceResultsAsync)(loaderFactory
|
|
306
281
|
.forLoad(queryContext, {
|
|
307
282
|
previousValue: null,
|
|
308
283
|
cascadingDeleteCause: newCascadingDeleteCause,
|
|
309
284
|
})
|
|
310
|
-
.enforcing()
|
|
311
285
|
.loadManyByFieldEqualingAsync(fieldName, association.associatedEntityLookupByField
|
|
312
286
|
? entity.getField(association.associatedEntityLookupByField)
|
|
313
|
-
: entity.getID());
|
|
287
|
+
: entity.getID()));
|
|
314
288
|
switch (association.edgeDeletionBehavior) {
|
|
315
289
|
case EntityFieldDefinition_1.EntityEdgeDeletionBehavior.CASCADE_DELETE_INVALIDATE_CACHE_ONLY: {
|
|
316
290
|
await Promise.all(inboundReferenceEntities.map((inboundReferenceEntity) => (0, results_1.enforceAsyncResult)(mutatorFactory
|
|
@@ -343,5 +317,5 @@ class DeleteMutator extends BaseMutator {
|
|
|
343
317
|
}));
|
|
344
318
|
}
|
|
345
319
|
}
|
|
346
|
-
exports.
|
|
347
|
-
//# sourceMappingURL=
|
|
320
|
+
exports.AuthorizationResultBasedDeleteMutator = AuthorizationResultBasedDeleteMutator;
|
|
321
|
+
//# sourceMappingURL=AuthorizationResultBasedEntityMutator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AuthorizationResultBasedEntityMutator.js","sourceRoot":"","sources":["../src/AuthorizationResultBasedEntityMutator.ts"],"names":[],"mappings":"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"}
|