@expo/entity 0.41.0 → 0.43.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 +16 -16
- package/build/AuthorizationResultBasedEntityAssociationLoader.js.map +1 -1
- package/build/AuthorizationResultBasedEntityLoader.d.ts +39 -67
- package/build/AuthorizationResultBasedEntityLoader.js +85 -62
- package/build/AuthorizationResultBasedEntityLoader.js.map +1 -1
- package/build/AuthorizationResultBasedEntityMutator.d.ts +16 -16
- package/build/AuthorizationResultBasedEntityMutator.js.map +1 -1
- package/build/ComposedEntityCacheAdapter.d.ts +7 -6
- package/build/ComposedEntityCacheAdapter.js +28 -28
- package/build/ComposedEntityCacheAdapter.js.map +1 -1
- package/build/ComposedSecondaryEntityCache.d.ts +1 -1
- package/build/ComposedSecondaryEntityCache.js.map +1 -1
- package/build/EnforcingEntityAssociationLoader.d.ts +15 -15
- package/build/EnforcingEntityAssociationLoader.js.map +1 -1
- package/build/EnforcingEntityCreator.d.ts +2 -2
- package/build/EnforcingEntityDeleter.d.ts +2 -2
- package/build/EnforcingEntityLoader.d.ts +104 -18
- package/build/EnforcingEntityLoader.js +113 -12
- package/build/EnforcingEntityLoader.js.map +1 -1
- package/build/EnforcingEntityUpdater.d.ts +2 -2
- package/build/Entity.d.ts +10 -10
- package/build/Entity.js.map +1 -1
- package/build/EntityAssociationLoader.d.ts +3 -3
- package/build/EntityCompanion.d.ts +5 -5
- package/build/EntityCompanion.js.map +1 -1
- package/build/EntityCompanionProvider.d.ts +6 -6
- package/build/EntityCompanionProvider.js.map +1 -1
- package/build/EntityConfiguration.d.ts +46 -5
- package/build/EntityConfiguration.js +39 -1
- package/build/EntityConfiguration.js.map +1 -1
- package/build/EntityCreator.d.ts +4 -4
- package/build/EntityDatabaseAdapter.d.ts +15 -14
- package/build/EntityDatabaseAdapter.js +20 -12
- package/build/EntityDatabaseAdapter.js.map +1 -1
- package/build/EntityDeleter.d.ts +4 -4
- package/build/EntityFieldDefinition.d.ts +20 -10
- package/build/EntityFieldDefinition.js +3 -1
- package/build/EntityFieldDefinition.js.map +1 -1
- package/build/EntityFields.d.ts +14 -12
- package/build/EntityFields.js.map +1 -1
- package/build/EntityLoader.d.ts +5 -5
- package/build/EntityLoaderFactory.d.ts +3 -3
- package/build/EntityLoaderFactory.js.map +1 -1
- package/build/EntityLoaderUtils.d.ts +2 -2
- package/build/EntityLoaderUtils.js +27 -1
- package/build/EntityLoaderUtils.js.map +1 -1
- package/build/EntityMutationInfo.d.ts +2 -2
- package/build/EntityMutationTriggerConfiguration.d.ts +14 -14
- package/build/EntityMutationTriggerConfiguration.js.map +1 -1
- package/build/EntityMutationValidator.d.ts +2 -2
- package/build/EntityMutatorFactory.d.ts +5 -5
- package/build/EntityMutatorFactory.js.map +1 -1
- package/build/EntityPrivacyPolicy.d.ts +14 -14
- package/build/EntityPrivacyPolicy.js.map +1 -1
- package/build/EntitySecondaryCacheLoader.d.ts +4 -4
- package/build/EntityUpdater.d.ts +4 -4
- package/build/GenericEntityCacheAdapter.d.ts +7 -6
- package/build/GenericEntityCacheAdapter.js +13 -14
- package/build/GenericEntityCacheAdapter.js.map +1 -1
- package/build/GenericSecondaryEntityCache.d.ts +3 -3
- package/build/GenericSecondaryEntityCache.js.map +1 -1
- package/build/IEntityCacheAdapter.d.ts +17 -16
- package/build/IEntityCacheAdapterProvider.d.ts +1 -1
- package/build/IEntityDatabaseAdapterProvider.d.ts +1 -1
- package/build/IEntityGenericCacher.d.ts +15 -5
- package/build/ReadonlyEntity.d.ts +8 -8
- package/build/ReadonlyEntity.js.map +1 -1
- package/build/ViewerContext.d.ts +1 -1
- package/build/ViewerScopedEntityCompanion.d.ts +5 -5
- package/build/ViewerScopedEntityCompanionProvider.d.ts +1 -1
- package/build/ViewerScopedEntityLoaderFactory.d.ts +3 -3
- package/build/ViewerScopedEntityMutatorFactory.d.ts +5 -5
- package/build/entityUtils.d.ts +1 -1
- package/build/entityUtils.js.map +1 -1
- package/build/errors/EntityInvalidFieldValueError.d.ts +2 -2
- package/build/errors/EntityNotAuthorizedError.d.ts +1 -1
- package/build/errors/EntityNotFoundError.d.ts +2 -2
- package/build/index.d.ts +7 -7
- package/build/index.js +8 -13
- package/build/index.js.map +1 -1
- package/build/internal/CompositeFieldHolder.d.ts +48 -0
- package/build/internal/CompositeFieldHolder.js +116 -0
- package/build/internal/CompositeFieldHolder.js.map +1 -0
- package/build/internal/CompositeFieldValueMap.d.ts +15 -0
- package/build/internal/CompositeFieldValueMap.js +51 -0
- package/build/internal/CompositeFieldValueMap.js.map +1 -0
- package/build/internal/EntityDataManager.d.ts +16 -16
- package/build/internal/EntityDataManager.js +42 -45
- package/build/internal/EntityDataManager.js.map +1 -1
- package/build/internal/EntityFieldTransformationUtils.d.ts +5 -5
- package/build/internal/EntityFieldTransformationUtils.js.map +1 -1
- package/build/internal/EntityLoadInterfaces.d.ts +104 -0
- package/build/internal/EntityLoadInterfaces.js +25 -0
- package/build/internal/EntityLoadInterfaces.js.map +1 -0
- package/build/internal/EntityTableDataCoordinator.d.ts +6 -6
- package/build/internal/EntityTableDataCoordinator.js.map +1 -1
- package/build/internal/ReadThroughEntityCache.d.ts +17 -16
- package/build/internal/ReadThroughEntityCache.js +36 -36
- package/build/internal/ReadThroughEntityCache.js.map +1 -1
- package/build/internal/SingleFieldHolder.d.ts +34 -0
- package/build/internal/SingleFieldHolder.js +90 -0
- package/build/internal/SingleFieldHolder.js.map +1 -0
- package/build/metrics/EntityMetricsUtils.d.ts +2 -1
- package/build/metrics/EntityMetricsUtils.js.map +1 -1
- package/build/metrics/IEntityMetricsAdapter.d.ts +5 -0
- package/build/metrics/IEntityMetricsAdapter.js.map +1 -1
- package/build/rules/AlwaysAllowPrivacyPolicyRule.d.ts +2 -2
- package/build/rules/AlwaysAllowPrivacyPolicyRule.js.map +1 -1
- package/build/rules/AlwaysDenyPrivacyPolicyRule.d.ts +2 -2
- package/build/rules/AlwaysDenyPrivacyPolicyRule.js.map +1 -1
- package/build/rules/AlwaysSkipPrivacyPolicyRule.d.ts +2 -2
- package/build/rules/AlwaysSkipPrivacyPolicyRule.js.map +1 -1
- package/build/rules/PrivacyPolicyRule.d.ts +2 -2
- package/build/tsconfig.build.tsbuildinfo +1 -0
- package/build/utils/EntityPrivacyUtils.d.ts +4 -4
- package/build/utils/EntityPrivacyUtils.js.map +1 -1
- package/build/utils/collections/SerializableKeyMap.d.ts +27 -0
- package/build/utils/collections/SerializableKeyMap.js +60 -0
- package/build/utils/collections/SerializableKeyMap.js.map +1 -0
- package/build/utils/collections/maps.js +1 -2
- package/build/utils/collections/maps.js.map +1 -1
- package/build/utils/collections/sets.d.ts +1 -0
- package/build/utils/collections/sets.js +7 -0
- package/build/utils/collections/sets.js.map +1 -0
- package/build/utils/mergeEntityMutationTriggerConfigurations.d.ts +1 -1
- package/package.json +8 -5
- package/src/AuthorizationResultBasedEntityAssociationLoader.ts +56 -49
- package/src/AuthorizationResultBasedEntityLoader.ts +194 -81
- package/src/AuthorizationResultBasedEntityMutator.ts +71 -45
- package/src/ComposedEntityCacheAdapter.ts +55 -46
- package/src/ComposedSecondaryEntityCache.ts +5 -2
- package/src/EnforcingEntityAssociationLoader.ts +52 -44
- package/src/EnforcingEntityCreator.ts +5 -5
- package/src/EnforcingEntityDeleter.ts +5 -5
- package/src/EnforcingEntityLoader.ts +158 -21
- package/src/EnforcingEntityUpdater.ts +5 -5
- package/src/Entity.ts +39 -39
- package/src/EntityAssociationLoader.ts +6 -6
- package/src/EntityCompanion.ts +11 -11
- package/src/EntityCompanionProvider.ts +21 -18
- package/src/EntityConfiguration.ts +123 -9
- package/src/EntityCreator.ts +7 -7
- package/src/EntityDatabaseAdapter.ts +51 -28
- package/src/EntityDeleter.ts +7 -7
- package/src/EntityFieldDefinition.ts +32 -12
- package/src/EntityFields.ts +49 -12
- package/src/EntityLoader.ts +8 -8
- package/src/EntityLoaderFactory.ts +8 -8
- package/src/EntityLoaderUtils.ts +39 -10
- package/src/EntityMutationInfo.ts +6 -6
- package/src/EntityMutationTriggerConfiguration.ts +68 -20
- package/src/EntityMutationValidator.ts +4 -4
- package/src/EntityMutatorFactory.ts +13 -13
- package/src/EntityPrivacyPolicy.ts +50 -26
- package/src/EntitySecondaryCacheLoader.ts +6 -6
- package/src/EntityUpdater.ts +7 -7
- package/src/GenericEntityCacheAdapter.ts +39 -28
- package/src/GenericSecondaryEntityCache.ts +6 -3
- package/src/IEntityCacheAdapter.ts +45 -25
- package/src/IEntityCacheAdapterProvider.ts +3 -3
- package/src/IEntityDatabaseAdapterProvider.ts +3 -3
- package/src/IEntityGenericCacher.ts +33 -5
- package/src/ReadonlyEntity.ts +24 -24
- package/src/ViewerContext.ts +5 -5
- package/src/ViewerScopedEntityCompanion.ts +7 -7
- package/src/ViewerScopedEntityCompanionProvider.ts +6 -6
- package/src/ViewerScopedEntityLoaderFactory.ts +7 -7
- package/src/ViewerScopedEntityMutatorFactory.ts +8 -8
- package/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.ts +4 -4
- package/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.ts +14 -13
- package/src/__tests__/AuthorizationResultBasedEntityLoader-test.ts +367 -69
- package/src/__tests__/ComposedCacheAdapter-test.ts +235 -117
- package/src/__tests__/EnforcingEntityLoader-test.ts +135 -1
- package/src/__tests__/Entity-test.ts +2 -2
- package/src/__tests__/EntityAssociationLoader-test.ts +2 -2
- package/src/__tests__/EntityCommonUseCases-test.ts +11 -11
- package/src/__tests__/EntityCompanion-test.ts +4 -4
- package/src/__tests__/EntityCompanionProvider-test.ts +9 -8
- package/src/__tests__/EntityConfiguration-test.ts +85 -6
- package/src/__tests__/EntityDatabaseAdapter-test.ts +113 -17
- package/src/__tests__/EntityEdges-test.ts +97 -72
- package/src/__tests__/EntityFields-test.ts +2 -2
- package/src/__tests__/EntityLoader-test.ts +2 -2
- package/src/__tests__/EntityMutator-MutationCacheConsistency-test.ts +11 -11
- package/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.ts +73 -0
- package/src/__tests__/EntityMutator-test.ts +74 -46
- package/src/__tests__/EntityPrivacyPolicy-test.ts +51 -74
- package/src/__tests__/EntityQueryContext-test.ts +1 -1
- package/src/__tests__/EntitySecondaryCacheLoader-test.ts +3 -3
- package/src/__tests__/EntitySelfReferentialEdges-test.ts +64 -39
- package/src/__tests__/GenericEntityCacheAdapter-test.ts +83 -28
- package/src/__tests__/ReadonlyEntity-test.ts +3 -3
- package/src/__tests__/ViewerContext-test.ts +1 -1
- package/src/__tests__/ViewerScopedEntityCompanion-test.ts +5 -2
- package/src/__tests__/ViewerScopedEntityCompanionProvider-test.ts +1 -1
- package/src/__tests__/ViewerScopedEntityMutatorFactory-test.ts +12 -3
- package/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.ts +12 -12
- package/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.ts +12 -12
- package/src/entityUtils.ts +4 -1
- package/src/errors/EntityInvalidFieldValueError.ts +5 -5
- package/src/errors/EntityNotAuthorizedError.ts +3 -3
- package/src/errors/EntityNotFoundError.ts +5 -5
- package/src/index.ts +7 -7
- package/src/internal/CompositeFieldHolder.ts +218 -0
- package/src/internal/CompositeFieldValueMap.ts +78 -0
- package/src/internal/EntityDataManager.ts +107 -96
- package/src/internal/EntityFieldTransformationUtils.ts +33 -14
- package/src/internal/EntityLoadInterfaces.ts +143 -0
- package/src/internal/EntityTableDataCoordinator.ts +8 -5
- package/src/internal/ReadThroughEntityCache.ts +63 -50
- package/src/internal/SingleFieldHolder.ts +131 -0
- package/src/internal/__tests__/CompositeFieldHolder-test.ts +25 -0
- package/src/internal/__tests__/CompositeFieldValueMap-test.ts +43 -0
- package/src/internal/__tests__/EntityDataManager-test.ts +308 -91
- package/src/internal/__tests__/EntityFieldTransformationUtils-test.ts +3 -2
- package/src/internal/__tests__/ReadThroughEntityCache-test.ts +315 -107
- package/src/metrics/EntityMetricsUtils.ts +7 -2
- package/src/metrics/IEntityMetricsAdapter.ts +6 -0
- package/src/rules/AlwaysAllowPrivacyPolicyRule.ts +5 -5
- package/src/rules/AlwaysDenyPrivacyPolicyRule.ts +5 -5
- package/src/rules/AlwaysSkipPrivacyPolicyRule.ts +5 -5
- package/src/rules/PrivacyPolicyRule.ts +4 -4
- package/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.ts +1 -1
- package/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.ts +1 -1
- package/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.ts +1 -1
- package/src/utils/EntityPrivacyUtils.ts +72 -30
- package/src/utils/{testing → __testfixtures__}/PrivacyPolicyRuleTestUtils.ts +26 -26
- package/src/{testfixtures → utils/__testfixtures__}/SimpleTestEntity.ts +16 -15
- package/src/utils/__testfixtures__/StubCacheAdapter.ts +164 -0
- package/src/utils/{testing → __testfixtures__}/StubDatabaseAdapter.ts +19 -12
- package/src/utils/{testing → __testfixtures__}/StubDatabaseAdapterProvider.ts +4 -4
- package/src/utils/__testfixtures__/TSMockitoExtensions.ts +69 -0
- package/src/{testfixtures → utils/__testfixtures__}/TestEntity.ts +21 -15
- package/src/{testfixtures → utils/__testfixtures__}/TestEntity2.ts +16 -15
- package/src/{testfixtures → utils/__testfixtures__}/TestEntityWithMutationTriggers.ts +23 -22
- package/src/{testfixtures → utils/__testfixtures__}/TestViewerContext.ts +1 -1
- package/src/utils/{testing → __testfixtures__}/describeFieldTestCase.ts +1 -1
- package/src/utils/__tests__/EntityPrivacyUtils-test.ts +62 -66
- package/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.ts +29 -25
- package/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.ts +1 -1
- package/src/utils/collections/SerializableKeyMap.ts +84 -0
- package/src/utils/collections/__tests__/SerializableKeyMap-test.ts +119 -0
- package/src/utils/collections/__tests__/sets-test.ts +17 -0
- package/src/utils/collections/maps.ts +7 -8
- package/src/utils/collections/sets.ts +3 -0
- package/src/utils/mergeEntityMutationTriggerConfigurations.ts +5 -5
- package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.d.ts +0 -1
- package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js +0 -242
- package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js.map +0 -1
- package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.d.ts +0 -26
- package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js +0 -110
- package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js.map +0 -1
- package/build/__tests__/AuthorizationResultBasedEntityLoader-test.d.ts +0 -1
- package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js +0 -401
- package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js.map +0 -1
- package/build/__tests__/ComposedCacheAdapter-test.d.ts +0 -1
- package/build/__tests__/ComposedCacheAdapter-test.js +0 -229
- package/build/__tests__/ComposedCacheAdapter-test.js.map +0 -1
- package/build/__tests__/ComposedSecondaryEntityCache-test.d.ts +0 -1
- package/build/__tests__/ComposedSecondaryEntityCache-test.js +0 -66
- package/build/__tests__/ComposedSecondaryEntityCache-test.js.map +0 -1
- package/build/__tests__/EnforcingEntityAssociationLoader-test.d.ts +0 -1
- package/build/__tests__/EnforcingEntityAssociationLoader-test.js +0 -115
- package/build/__tests__/EnforcingEntityAssociationLoader-test.js.map +0 -1
- package/build/__tests__/EnforcingEntityLoader-test.d.ts +0 -1
- package/build/__tests__/EnforcingEntityLoader-test.js +0 -253
- package/build/__tests__/EnforcingEntityLoader-test.js.map +0 -1
- package/build/__tests__/Entity-test.d.ts +0 -1
- package/build/__tests__/Entity-test.js +0 -94
- package/build/__tests__/Entity-test.js.map +0 -1
- package/build/__tests__/EntityAssociationLoader-test.d.ts +0 -1
- package/build/__tests__/EntityAssociationLoader-test.js +0 -30
- package/build/__tests__/EntityAssociationLoader-test.js.map +0 -1
- package/build/__tests__/EntityCommonUseCases-test.d.ts +0 -1
- package/build/__tests__/EntityCommonUseCases-test.js +0 -146
- package/build/__tests__/EntityCommonUseCases-test.js.map +0 -1
- package/build/__tests__/EntityCompanion-test.d.ts +0 -1
- package/build/__tests__/EntityCompanion-test.js +0 -77
- package/build/__tests__/EntityCompanion-test.js.map +0 -1
- package/build/__tests__/EntityCompanionProvider-test.d.ts +0 -1
- package/build/__tests__/EntityCompanionProvider-test.js +0 -54
- package/build/__tests__/EntityCompanionProvider-test.js.map +0 -1
- package/build/__tests__/EntityConfiguration-test.d.ts +0 -1
- package/build/__tests__/EntityConfiguration-test.js +0 -103
- package/build/__tests__/EntityConfiguration-test.js.map +0 -1
- package/build/__tests__/EntityDatabaseAdapter-test.d.ts +0 -1
- package/build/__tests__/EntityDatabaseAdapter-test.js +0 -146
- package/build/__tests__/EntityDatabaseAdapter-test.js.map +0 -1
- package/build/__tests__/EntityEdges-test.d.ts +0 -1
- package/build/__tests__/EntityEdges-test.js +0 -723
- package/build/__tests__/EntityEdges-test.js.map +0 -1
- package/build/__tests__/EntityFields-test.d.ts +0 -1
- package/build/__tests__/EntityFields-test.js +0 -63
- package/build/__tests__/EntityFields-test.js.map +0 -1
- package/build/__tests__/EntityLoader-test.d.ts +0 -1
- package/build/__tests__/EntityLoader-test.js +0 -36
- package/build/__tests__/EntityLoader-test.js.map +0 -1
- package/build/__tests__/EntityMutator-MutationCacheConsistency-test.d.ts +0 -1
- package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js +0 -73
- package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js.map +0 -1
- package/build/__tests__/EntityMutator-test.d.ts +0 -1
- package/build/__tests__/EntityMutator-test.js +0 -741
- package/build/__tests__/EntityMutator-test.js.map +0 -1
- package/build/__tests__/EntityPrivacyPolicy-test.d.ts +0 -1
- package/build/__tests__/EntityPrivacyPolicy-test.js +0 -463
- package/build/__tests__/EntityPrivacyPolicy-test.js.map +0 -1
- package/build/__tests__/EntityQueryContext-test.d.ts +0 -1
- package/build/__tests__/EntityQueryContext-test.js +0 -116
- package/build/__tests__/EntityQueryContext-test.js.map +0 -1
- package/build/__tests__/EntitySecondaryCacheLoader-test.d.ts +0 -1
- package/build/__tests__/EntitySecondaryCacheLoader-test.js +0 -60
- package/build/__tests__/EntitySecondaryCacheLoader-test.js.map +0 -1
- package/build/__tests__/EntitySelfReferentialEdges-test.d.ts +0 -1
- package/build/__tests__/EntitySelfReferentialEdges-test.js +0 -201
- package/build/__tests__/EntitySelfReferentialEdges-test.js.map +0 -1
- package/build/__tests__/GenericEntityCacheAdapter-test.d.ts +0 -1
- package/build/__tests__/GenericEntityCacheAdapter-test.js +0 -80
- package/build/__tests__/GenericEntityCacheAdapter-test.js.map +0 -1
- package/build/__tests__/ReadonlyEntity-test.d.ts +0 -1
- package/build/__tests__/ReadonlyEntity-test.js +0 -211
- package/build/__tests__/ReadonlyEntity-test.js.map +0 -1
- package/build/__tests__/ViewerContext-test.d.ts +0 -1
- package/build/__tests__/ViewerContext-test.js +0 -30
- package/build/__tests__/ViewerContext-test.js.map +0 -1
- package/build/__tests__/ViewerScopedEntityCompanion-test.d.ts +0 -1
- package/build/__tests__/ViewerScopedEntityCompanion-test.js +0 -20
- package/build/__tests__/ViewerScopedEntityCompanion-test.js.map +0 -1
- package/build/__tests__/ViewerScopedEntityCompanionProvider-test.d.ts +0 -1
- package/build/__tests__/ViewerScopedEntityCompanionProvider-test.js +0 -20
- package/build/__tests__/ViewerScopedEntityCompanionProvider-test.js.map +0 -1
- package/build/__tests__/ViewerScopedEntityLoaderFactory-test.d.ts +0 -1
- package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js +0 -23
- package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js.map +0 -1
- package/build/__tests__/ViewerScopedEntityMutatorFactory-test.d.ts +0 -1
- package/build/__tests__/ViewerScopedEntityMutatorFactory-test.js +0 -22
- package/build/__tests__/ViewerScopedEntityMutatorFactory-test.js.map +0 -1
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.d.ts +0 -1
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +0 -123
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +0 -1
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.d.ts +0 -1
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +0 -121
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js.map +0 -1
- package/build/__tests__/entityUtils-test.d.ts +0 -1
- package/build/__tests__/entityUtils-test.js +0 -87
- package/build/__tests__/entityUtils-test.js.map +0 -1
- package/build/internal/__tests__/EntityDataManager-test.d.ts +0 -1
- package/build/internal/__tests__/EntityDataManager-test.js +0 -373
- package/build/internal/__tests__/EntityDataManager-test.js.map +0 -1
- package/build/internal/__tests__/EntityFieldTransformationUtils-test.d.ts +0 -1
- package/build/internal/__tests__/EntityFieldTransformationUtils-test.js +0 -136
- package/build/internal/__tests__/EntityFieldTransformationUtils-test.js.map +0 -1
- package/build/internal/__tests__/ReadThroughEntityCache-test.d.ts +0 -1
- package/build/internal/__tests__/ReadThroughEntityCache-test.js +0 -206
- package/build/internal/__tests__/ReadThroughEntityCache-test.js.map +0 -1
- package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.d.ts +0 -1
- package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js +0 -21
- package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js.map +0 -1
- package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.d.ts +0 -1
- package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js +0 -21
- package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js.map +0 -1
- package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.d.ts +0 -1
- package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js +0 -21
- package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js.map +0 -1
- package/build/testfixtures/DateIDTestEntity.d.ts +0 -19
- package/build/testfixtures/DateIDTestEntity.js +0 -48
- package/build/testfixtures/DateIDTestEntity.js.map +0 -1
- package/build/testfixtures/SimpleTestEntity.d.ts +0 -20
- package/build/testfixtures/SimpleTestEntity.js +0 -48
- package/build/testfixtures/SimpleTestEntity.js.map +0 -1
- package/build/testfixtures/TestEntity.d.ts +0 -30
- package/build/testfixtures/TestEntity.js +0 -93
- package/build/testfixtures/TestEntity.js.map +0 -1
- package/build/testfixtures/TestEntity2.d.ts +0 -20
- package/build/testfixtures/TestEntity2.js +0 -51
- package/build/testfixtures/TestEntity2.js.map +0 -1
- package/build/testfixtures/TestEntityNumberKey.d.ts +0 -19
- package/build/testfixtures/TestEntityNumberKey.js +0 -48
- package/build/testfixtures/TestEntityNumberKey.js.map +0 -1
- package/build/testfixtures/TestEntityWithMutationTriggers.d.ts +0 -36
- package/build/testfixtures/TestEntityWithMutationTriggers.js +0 -82
- package/build/testfixtures/TestEntityWithMutationTriggers.js.map +0 -1
- package/build/testfixtures/TestViewerContext.d.ts +0 -3
- package/build/testfixtures/TestViewerContext.js +0 -10
- package/build/testfixtures/TestViewerContext.js.map +0 -1
- package/build/utils/__tests__/EntityPrivacyUtils-test.d.ts +0 -1
- package/build/utils/__tests__/EntityPrivacyUtils-test.js +0 -486
- package/build/utils/__tests__/EntityPrivacyUtils-test.js.map +0 -1
- package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.d.ts +0 -1
- package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js +0 -178
- package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js.map +0 -1
- package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.d.ts +0 -1
- package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js +0 -26
- package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js.map +0 -1
- package/build/utils/collections/__tests__/maps-test.d.ts +0 -1
- package/build/utils/collections/__tests__/maps-test.js +0 -120
- package/build/utils/collections/__tests__/maps-test.js.map +0 -1
- package/build/utils/testing/PrivacyPolicyRuleTestUtils.d.ts +0 -28
- package/build/utils/testing/PrivacyPolicyRuleTestUtils.js +0 -52
- package/build/utils/testing/PrivacyPolicyRuleTestUtils.js.map +0 -1
- package/build/utils/testing/StubCacheAdapter.d.ts +0 -27
- package/build/utils/testing/StubCacheAdapter.js +0 -86
- package/build/utils/testing/StubCacheAdapter.js.map +0 -1
- package/build/utils/testing/StubDatabaseAdapter.d.ts +0 -25
- package/build/utils/testing/StubDatabaseAdapter.js +0 -191
- package/build/utils/testing/StubDatabaseAdapter.js.map +0 -1
- package/build/utils/testing/StubDatabaseAdapterProvider.d.ts +0 -7
- package/build/utils/testing/StubDatabaseAdapterProvider.js +0 -14
- package/build/utils/testing/StubDatabaseAdapterProvider.js.map +0 -1
- package/build/utils/testing/StubQueryContextProvider.d.ts +0 -7
- package/build/utils/testing/StubQueryContextProvider.js +0 -19
- package/build/utils/testing/StubQueryContextProvider.js.map +0 -1
- package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.d.ts +0 -1
- package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js +0 -42
- package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js.map +0 -1
- package/build/utils/testing/__tests__/StubDatabaseAdapter-test.d.ts +0 -1
- package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js +0 -402
- package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js.map +0 -1
- package/build/utils/testing/createUnitTestEntityCompanionProvider.d.ts +0 -7
- package/build/utils/testing/createUnitTestEntityCompanionProvider.js +0 -36
- package/build/utils/testing/createUnitTestEntityCompanionProvider.js.map +0 -1
- package/build/utils/testing/describeFieldTestCase.d.ts +0 -2
- package/build/utils/testing/describeFieldTestCase.js +0 -18
- package/build/utils/testing/describeFieldTestCase.js.map +0 -1
- package/src/testfixtures/DateIDTestEntity.ts +0 -59
- package/src/testfixtures/TestEntityNumberKey.ts +0 -59
- package/src/utils/testing/StubCacheAdapter.ts +0 -122
- package/src/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.ts +0 -42
- package/src/utils/testing/__tests__/StubDatabaseAdapter-test.ts +0 -548
- /package/src/utils/{testing → __testfixtures__}/StubQueryContextProvider.ts +0 -0
- /package/src/utils/{testing → __testfixtures__}/createUnitTestEntityCompanionProvider.ts +0 -0
package/src/EntityLoaderUtils.ts
CHANGED
|
@@ -9,6 +9,7 @@ import ReadonlyEntity from './ReadonlyEntity';
|
|
|
9
9
|
import ViewerContext from './ViewerContext';
|
|
10
10
|
import { pick } from './entityUtils';
|
|
11
11
|
import EntityDataManager from './internal/EntityDataManager';
|
|
12
|
+
import { SingleFieldHolder, SingleFieldValueHolder } from './internal/SingleFieldHolder';
|
|
12
13
|
import IEntityMetricsAdapter from './metrics/IEntityMetricsAdapter';
|
|
13
14
|
import { mapMapAsync } from './utils/collections/maps';
|
|
14
15
|
|
|
@@ -17,13 +18,13 @@ import { mapMapAsync } from './utils/collections/maps';
|
|
|
17
18
|
* Methods are exposed publicly since in rare cases they may need to be called manually.
|
|
18
19
|
*/
|
|
19
20
|
export default class EntityLoaderUtils<
|
|
20
|
-
TFields extends
|
|
21
|
-
|
|
21
|
+
TFields extends Record<string, any>,
|
|
22
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
22
23
|
TViewerContext extends ViewerContext,
|
|
23
|
-
TEntity extends ReadonlyEntity<TFields,
|
|
24
|
+
TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
24
25
|
TPrivacyPolicy extends EntityPrivacyPolicy<
|
|
25
26
|
TFields,
|
|
26
|
-
|
|
27
|
+
TIDField,
|
|
27
28
|
TViewerContext,
|
|
28
29
|
TEntity,
|
|
29
30
|
TSelectedFields
|
|
@@ -35,15 +36,15 @@ export default class EntityLoaderUtils<
|
|
|
35
36
|
private readonly queryContext: EntityQueryContext,
|
|
36
37
|
private readonly privacyPolicyEvaluationContext: EntityPrivacyPolicyEvaluationContext<
|
|
37
38
|
TFields,
|
|
38
|
-
|
|
39
|
+
TIDField,
|
|
39
40
|
TViewerContext,
|
|
40
41
|
TEntity,
|
|
41
42
|
TSelectedFields
|
|
42
43
|
>,
|
|
43
|
-
private readonly entityConfiguration: EntityConfiguration<TFields>,
|
|
44
|
+
private readonly entityConfiguration: EntityConfiguration<TFields, TIDField>,
|
|
44
45
|
private readonly entityClass: IEntityClass<
|
|
45
46
|
TFields,
|
|
46
|
-
|
|
47
|
+
TIDField,
|
|
47
48
|
TViewerContext,
|
|
48
49
|
TEntity,
|
|
49
50
|
TPrivacyPolicy,
|
|
@@ -51,7 +52,7 @@ export default class EntityLoaderUtils<
|
|
|
51
52
|
>,
|
|
52
53
|
private readonly entitySelectedFields: TSelectedFields[] | undefined,
|
|
53
54
|
private readonly privacyPolicy: TPrivacyPolicy,
|
|
54
|
-
private readonly dataManager: EntityDataManager<TFields>,
|
|
55
|
+
private readonly dataManager: EntityDataManager<TFields, TIDField>,
|
|
55
56
|
protected readonly metricsAdapter: IEntityMetricsAdapter,
|
|
56
57
|
) {}
|
|
57
58
|
|
|
@@ -60,7 +61,35 @@ export default class EntityLoaderUtils<
|
|
|
60
61
|
* @param objectFields - entity data object to be invalidated
|
|
61
62
|
*/
|
|
62
63
|
async invalidateFieldsAsync(objectFields: Readonly<TFields>): Promise<void> {
|
|
63
|
-
|
|
64
|
+
const keys = Object.keys(objectFields) as (keyof TFields)[];
|
|
65
|
+
const singleFieldKeyValues = keys
|
|
66
|
+
.map((fieldName: keyof TFields) => {
|
|
67
|
+
const value = objectFields[fieldName];
|
|
68
|
+
if (value === undefined || value === null) {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
return [
|
|
72
|
+
new SingleFieldHolder<TFields, TIDField, typeof fieldName>(fieldName),
|
|
73
|
+
new SingleFieldValueHolder(value),
|
|
74
|
+
] as const;
|
|
75
|
+
})
|
|
76
|
+
.filter((kv) => kv !== null);
|
|
77
|
+
|
|
78
|
+
const compositeFieldKeyValues = this.entityConfiguration.compositeFieldInfo
|
|
79
|
+
.getAllCompositeFieldHolders()
|
|
80
|
+
.map((compositeFieldHolder) => {
|
|
81
|
+
const compositeFieldValueHolder =
|
|
82
|
+
compositeFieldHolder.extractCompositeFieldValueHolderFromObjectFields(objectFields);
|
|
83
|
+
return compositeFieldValueHolder
|
|
84
|
+
? ([compositeFieldHolder, compositeFieldValueHolder] as const)
|
|
85
|
+
: null;
|
|
86
|
+
})
|
|
87
|
+
.filter((kv) => kv !== null);
|
|
88
|
+
|
|
89
|
+
await this.dataManager.invalidateKeyValuePairsAsync([
|
|
90
|
+
...singleFieldKeyValues,
|
|
91
|
+
...compositeFieldKeyValues,
|
|
92
|
+
]);
|
|
64
93
|
}
|
|
65
94
|
|
|
66
95
|
/**
|
|
@@ -86,7 +115,7 @@ export default class EntityLoaderUtils<
|
|
|
86
115
|
const selectedFields = pick(fieldsObject, entitySelectedFields);
|
|
87
116
|
return new this.entityClass({
|
|
88
117
|
viewerContext: this.viewerContext,
|
|
89
|
-
id: id as
|
|
118
|
+
id: id as TFields[TIDField],
|
|
90
119
|
databaseFields: fieldsObject,
|
|
91
120
|
selectedFields,
|
|
92
121
|
});
|
|
@@ -8,10 +8,10 @@ export enum EntityMutationType {
|
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
export type EntityValidatorMutationInfo<
|
|
11
|
-
TFields extends
|
|
12
|
-
|
|
11
|
+
TFields extends Record<string, any>,
|
|
12
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
13
13
|
TViewerContext extends ViewerContext,
|
|
14
|
-
TEntity extends Entity<TFields,
|
|
14
|
+
TEntity extends Entity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
15
15
|
TSelectedFields extends keyof TFields = keyof TFields,
|
|
16
16
|
> =
|
|
17
17
|
| {
|
|
@@ -39,10 +39,10 @@ export type EntityCascadingDeletionInfo = {
|
|
|
39
39
|
};
|
|
40
40
|
|
|
41
41
|
export type EntityTriggerMutationInfo<
|
|
42
|
-
TFields extends
|
|
43
|
-
|
|
42
|
+
TFields extends Record<string, any>,
|
|
43
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
44
44
|
TViewerContext extends ViewerContext,
|
|
45
|
-
TEntity extends Entity<TFields,
|
|
45
|
+
TEntity extends Entity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
46
46
|
TSelectedFields extends keyof TFields = keyof TFields,
|
|
47
47
|
> =
|
|
48
48
|
| {
|
|
@@ -7,48 +7,84 @@ import ViewerContext from './ViewerContext';
|
|
|
7
7
|
* Interface to define trigger behavior for entities.
|
|
8
8
|
*/
|
|
9
9
|
export default interface EntityMutationTriggerConfiguration<
|
|
10
|
-
TFields extends
|
|
11
|
-
|
|
10
|
+
TFields extends Record<string, any>,
|
|
11
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
12
12
|
TViewerContext extends ViewerContext,
|
|
13
|
-
TEntity extends ReadonlyEntity<TFields,
|
|
13
|
+
TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
14
14
|
TSelectedFields extends keyof TFields = keyof TFields,
|
|
15
15
|
> {
|
|
16
16
|
/**
|
|
17
17
|
* Trigger set that runs within the transaction but before the entity is created in the database.
|
|
18
18
|
*/
|
|
19
|
-
beforeCreate?: EntityMutationTrigger<
|
|
19
|
+
beforeCreate?: EntityMutationTrigger<
|
|
20
|
+
TFields,
|
|
21
|
+
TIDField,
|
|
22
|
+
TViewerContext,
|
|
23
|
+
TEntity,
|
|
24
|
+
TSelectedFields
|
|
25
|
+
>[];
|
|
20
26
|
/**
|
|
21
27
|
* Trigger set that runs within the transaction but after the entity is created in the database and cache is invalidated.
|
|
22
28
|
*/
|
|
23
|
-
afterCreate?: EntityMutationTrigger<
|
|
29
|
+
afterCreate?: EntityMutationTrigger<
|
|
30
|
+
TFields,
|
|
31
|
+
TIDField,
|
|
32
|
+
TViewerContext,
|
|
33
|
+
TEntity,
|
|
34
|
+
TSelectedFields
|
|
35
|
+
>[];
|
|
24
36
|
|
|
25
37
|
/**
|
|
26
38
|
* Trigger set that runs within the transaction but before the entity is updated in the database.
|
|
27
39
|
*/
|
|
28
|
-
beforeUpdate?: EntityMutationTrigger<
|
|
40
|
+
beforeUpdate?: EntityMutationTrigger<
|
|
41
|
+
TFields,
|
|
42
|
+
TIDField,
|
|
43
|
+
TViewerContext,
|
|
44
|
+
TEntity,
|
|
45
|
+
TSelectedFields
|
|
46
|
+
>[];
|
|
29
47
|
/**
|
|
30
48
|
* Trigger set that runs within the transaction but after the entity is updated in the database and cache is invalidated.
|
|
31
49
|
*/
|
|
32
|
-
afterUpdate?: EntityMutationTrigger<
|
|
50
|
+
afterUpdate?: EntityMutationTrigger<
|
|
51
|
+
TFields,
|
|
52
|
+
TIDField,
|
|
53
|
+
TViewerContext,
|
|
54
|
+
TEntity,
|
|
55
|
+
TSelectedFields
|
|
56
|
+
>[];
|
|
33
57
|
|
|
34
58
|
/**
|
|
35
59
|
* Trigger set that runs within the transaction but before the entity is deleted from the database.
|
|
36
60
|
*/
|
|
37
|
-
beforeDelete?: EntityMutationTrigger<
|
|
61
|
+
beforeDelete?: EntityMutationTrigger<
|
|
62
|
+
TFields,
|
|
63
|
+
TIDField,
|
|
64
|
+
TViewerContext,
|
|
65
|
+
TEntity,
|
|
66
|
+
TSelectedFields
|
|
67
|
+
>[];
|
|
38
68
|
/**
|
|
39
69
|
* Trigger set that runs within the transaction but after the entity is deleted from the database and cache is invalidated.
|
|
40
70
|
*/
|
|
41
|
-
afterDelete?: EntityMutationTrigger<
|
|
71
|
+
afterDelete?: EntityMutationTrigger<
|
|
72
|
+
TFields,
|
|
73
|
+
TIDField,
|
|
74
|
+
TViewerContext,
|
|
75
|
+
TEntity,
|
|
76
|
+
TSelectedFields
|
|
77
|
+
>[];
|
|
42
78
|
|
|
43
79
|
/**
|
|
44
80
|
* Trigger set that runs within the transaction but before the entity is created, updated, or deleted.
|
|
45
81
|
*/
|
|
46
|
-
beforeAll?: EntityMutationTrigger<TFields,
|
|
82
|
+
beforeAll?: EntityMutationTrigger<TFields, TIDField, TViewerContext, TEntity, TSelectedFields>[];
|
|
47
83
|
/**
|
|
48
84
|
* Trigger set that runs within the transaction but after the entity is created in, updated in, or deleted from
|
|
49
85
|
* the database and the cache is invalidated.
|
|
50
86
|
*/
|
|
51
|
-
afterAll?: EntityMutationTrigger<TFields,
|
|
87
|
+
afterAll?: EntityMutationTrigger<TFields, TIDField, TViewerContext, TEntity, TSelectedFields>[];
|
|
52
88
|
|
|
53
89
|
/**
|
|
54
90
|
* Trigger set that runs after committing the mutation transaction. If the call to the mutation is wrapped in a transaction, these
|
|
@@ -56,7 +92,7 @@ export default interface EntityMutationTriggerConfiguration<
|
|
|
56
92
|
*/
|
|
57
93
|
afterCommit?: EntityNonTransactionalMutationTrigger<
|
|
58
94
|
TFields,
|
|
59
|
-
|
|
95
|
+
TIDField,
|
|
60
96
|
TViewerContext,
|
|
61
97
|
TEntity,
|
|
62
98
|
TSelectedFields
|
|
@@ -68,17 +104,23 @@ export default interface EntityMutationTriggerConfiguration<
|
|
|
68
104
|
* same transaction as the mutation itself.
|
|
69
105
|
*/
|
|
70
106
|
export abstract class EntityMutationTrigger<
|
|
71
|
-
TFields extends
|
|
72
|
-
|
|
107
|
+
TFields extends Record<string, any>,
|
|
108
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
73
109
|
TViewerContext extends ViewerContext,
|
|
74
|
-
TEntity extends ReadonlyEntity<TFields,
|
|
110
|
+
TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
75
111
|
TSelectedFields extends keyof TFields = keyof TFields,
|
|
76
112
|
> {
|
|
77
113
|
abstract executeAsync(
|
|
78
114
|
viewerContext: TViewerContext,
|
|
79
115
|
queryContext: EntityTransactionalQueryContext,
|
|
80
116
|
entity: TEntity,
|
|
81
|
-
mutationInfo: EntityTriggerMutationInfo<
|
|
117
|
+
mutationInfo: EntityTriggerMutationInfo<
|
|
118
|
+
TFields,
|
|
119
|
+
TIDField,
|
|
120
|
+
TViewerContext,
|
|
121
|
+
TEntity,
|
|
122
|
+
TSelectedFields
|
|
123
|
+
>,
|
|
82
124
|
): Promise<void>;
|
|
83
125
|
}
|
|
84
126
|
|
|
@@ -87,15 +129,21 @@ export abstract class EntityMutationTrigger<
|
|
|
87
129
|
* since they run after the transaction is committed.
|
|
88
130
|
*/
|
|
89
131
|
export abstract class EntityNonTransactionalMutationTrigger<
|
|
90
|
-
TFields extends
|
|
91
|
-
|
|
132
|
+
TFields extends Record<string, any>,
|
|
133
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
92
134
|
TViewerContext extends ViewerContext,
|
|
93
|
-
TEntity extends ReadonlyEntity<TFields,
|
|
135
|
+
TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
94
136
|
TSelectedFields extends keyof TFields = keyof TFields,
|
|
95
137
|
> {
|
|
96
138
|
abstract executeAsync(
|
|
97
139
|
viewerContext: TViewerContext,
|
|
98
140
|
entity: TEntity,
|
|
99
|
-
mutationInfo: EntityTriggerMutationInfo<
|
|
141
|
+
mutationInfo: EntityTriggerMutationInfo<
|
|
142
|
+
TFields,
|
|
143
|
+
TIDField,
|
|
144
|
+
TViewerContext,
|
|
145
|
+
TEntity,
|
|
146
|
+
TSelectedFields
|
|
147
|
+
>,
|
|
100
148
|
): Promise<void>;
|
|
101
149
|
}
|
|
@@ -8,10 +8,10 @@ import ViewerContext from './ViewerContext';
|
|
|
8
8
|
* same transaction as the mutation itself before creating or updating an entity.
|
|
9
9
|
*/
|
|
10
10
|
export default abstract class EntityMutationValidator<
|
|
11
|
-
TFields extends
|
|
12
|
-
|
|
11
|
+
TFields extends Record<string, any>,
|
|
12
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
13
13
|
TViewerContext extends ViewerContext,
|
|
14
|
-
TEntity extends ReadonlyEntity<TFields,
|
|
14
|
+
TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
15
15
|
TSelectedFields extends keyof TFields = keyof TFields,
|
|
16
16
|
> {
|
|
17
17
|
abstract executeAsync(
|
|
@@ -20,7 +20,7 @@ export default abstract class EntityMutationValidator<
|
|
|
20
20
|
entity: TEntity,
|
|
21
21
|
mutationInfo: EntityValidatorMutationInfo<
|
|
22
22
|
TFields,
|
|
23
|
-
|
|
23
|
+
TIDField,
|
|
24
24
|
TViewerContext,
|
|
25
25
|
TEntity,
|
|
26
26
|
TSelectedFields
|
|
@@ -19,13 +19,13 @@ import IEntityMetricsAdapter from './metrics/IEntityMetricsAdapter';
|
|
|
19
19
|
* The primary interface for creating, mutating, and deleting entities.
|
|
20
20
|
*/
|
|
21
21
|
export default class EntityMutatorFactory<
|
|
22
|
-
TFields extends
|
|
23
|
-
|
|
22
|
+
TFields extends Record<string, any>,
|
|
23
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
24
24
|
TViewerContext extends ViewerContext,
|
|
25
|
-
TEntity extends Entity<TFields,
|
|
25
|
+
TEntity extends Entity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
26
26
|
TPrivacyPolicy extends EntityPrivacyPolicy<
|
|
27
27
|
TFields,
|
|
28
|
-
|
|
28
|
+
TIDField,
|
|
29
29
|
TViewerContext,
|
|
30
30
|
TEntity,
|
|
31
31
|
TSelectedFields
|
|
@@ -34,10 +34,10 @@ export default class EntityMutatorFactory<
|
|
|
34
34
|
> {
|
|
35
35
|
constructor(
|
|
36
36
|
private readonly entityCompanionProvider: EntityCompanionProvider,
|
|
37
|
-
private readonly entityConfiguration: EntityConfiguration<TFields>,
|
|
37
|
+
private readonly entityConfiguration: EntityConfiguration<TFields, TIDField>,
|
|
38
38
|
private readonly entityClass: IEntityClass<
|
|
39
39
|
TFields,
|
|
40
|
-
|
|
40
|
+
TIDField,
|
|
41
41
|
TViewerContext,
|
|
42
42
|
TEntity,
|
|
43
43
|
TPrivacyPolicy,
|
|
@@ -46,27 +46,27 @@ export default class EntityMutatorFactory<
|
|
|
46
46
|
private readonly privacyPolicy: TPrivacyPolicy,
|
|
47
47
|
private readonly mutationValidators: EntityMutationValidator<
|
|
48
48
|
TFields,
|
|
49
|
-
|
|
49
|
+
TIDField,
|
|
50
50
|
TViewerContext,
|
|
51
51
|
TEntity,
|
|
52
52
|
TSelectedFields
|
|
53
53
|
>[],
|
|
54
54
|
private readonly mutationTriggers: EntityMutationTriggerConfiguration<
|
|
55
55
|
TFields,
|
|
56
|
-
|
|
56
|
+
TIDField,
|
|
57
57
|
TViewerContext,
|
|
58
58
|
TEntity,
|
|
59
59
|
TSelectedFields
|
|
60
60
|
>,
|
|
61
61
|
private readonly entityLoaderFactory: EntityLoaderFactory<
|
|
62
62
|
TFields,
|
|
63
|
-
|
|
63
|
+
TIDField,
|
|
64
64
|
TViewerContext,
|
|
65
65
|
TEntity,
|
|
66
66
|
TPrivacyPolicy,
|
|
67
67
|
TSelectedFields
|
|
68
68
|
>,
|
|
69
|
-
private readonly databaseAdapter: EntityDatabaseAdapter<TFields>,
|
|
69
|
+
private readonly databaseAdapter: EntityDatabaseAdapter<TFields, TIDField>,
|
|
70
70
|
private readonly metricsAdapter: IEntityMetricsAdapter,
|
|
71
71
|
) {}
|
|
72
72
|
|
|
@@ -81,7 +81,7 @@ export default class EntityMutatorFactory<
|
|
|
81
81
|
queryContext: EntityQueryContext,
|
|
82
82
|
): AuthorizationResultBasedCreateMutator<
|
|
83
83
|
TFields,
|
|
84
|
-
|
|
84
|
+
TIDField,
|
|
85
85
|
TViewerContext,
|
|
86
86
|
TEntity,
|
|
87
87
|
TPrivacyPolicy,
|
|
@@ -113,7 +113,7 @@ export default class EntityMutatorFactory<
|
|
|
113
113
|
queryContext: EntityQueryContext,
|
|
114
114
|
): AuthorizationResultBasedUpdateMutator<
|
|
115
115
|
TFields,
|
|
116
|
-
|
|
116
|
+
TIDField,
|
|
117
117
|
TViewerContext,
|
|
118
118
|
TEntity,
|
|
119
119
|
TPrivacyPolicy,
|
|
@@ -145,7 +145,7 @@ export default class EntityMutatorFactory<
|
|
|
145
145
|
queryContext: EntityQueryContext,
|
|
146
146
|
): AuthorizationResultBasedDeleteMutator<
|
|
147
147
|
TFields,
|
|
148
|
-
|
|
148
|
+
TIDField,
|
|
149
149
|
TViewerContext,
|
|
150
150
|
TEntity,
|
|
151
151
|
TPrivacyPolicy,
|
|
@@ -12,10 +12,10 @@ import PrivacyPolicyRule, { RuleEvaluationResult } from './rules/PrivacyPolicyRu
|
|
|
12
12
|
* Information about the reason this privacy policy is being evaluated.
|
|
13
13
|
*/
|
|
14
14
|
export type EntityPrivacyPolicyEvaluationContext<
|
|
15
|
-
TFields extends
|
|
16
|
-
|
|
15
|
+
TFields extends Record<string, any>,
|
|
16
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
17
17
|
TViewerContext extends ViewerContext,
|
|
18
|
-
TEntity extends ReadonlyEntity<TFields,
|
|
18
|
+
TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
19
19
|
TSelectedFields extends keyof TFields = keyof TFields,
|
|
20
20
|
> = {
|
|
21
21
|
/**
|
|
@@ -53,10 +53,10 @@ export enum EntityPrivacyPolicyEvaluationMode {
|
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
export type EntityPrivacyPolicyEvaluator<
|
|
56
|
-
TFields extends
|
|
57
|
-
|
|
56
|
+
TFields extends Record<string, any>,
|
|
57
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
58
58
|
TViewerContext extends ViewerContext,
|
|
59
|
-
TEntity extends ReadonlyEntity<TFields,
|
|
59
|
+
TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
60
60
|
TSelectedFields extends keyof TFields = keyof TFields,
|
|
61
61
|
> =
|
|
62
62
|
| {
|
|
@@ -65,13 +65,25 @@ export type EntityPrivacyPolicyEvaluator<
|
|
|
65
65
|
| {
|
|
66
66
|
mode: EntityPrivacyPolicyEvaluationMode.DRY_RUN;
|
|
67
67
|
denyHandler: (
|
|
68
|
-
error: EntityNotAuthorizedError<
|
|
68
|
+
error: EntityNotAuthorizedError<
|
|
69
|
+
TFields,
|
|
70
|
+
TIDField,
|
|
71
|
+
TViewerContext,
|
|
72
|
+
TEntity,
|
|
73
|
+
TSelectedFields
|
|
74
|
+
>,
|
|
69
75
|
) => void;
|
|
70
76
|
}
|
|
71
77
|
| {
|
|
72
78
|
mode: EntityPrivacyPolicyEvaluationMode.ENFORCE_AND_LOG;
|
|
73
79
|
denyHandler: (
|
|
74
|
-
error: EntityNotAuthorizedError<
|
|
80
|
+
error: EntityNotAuthorizedError<
|
|
81
|
+
TFields,
|
|
82
|
+
TIDField,
|
|
83
|
+
TViewerContext,
|
|
84
|
+
TEntity,
|
|
85
|
+
TSelectedFields
|
|
86
|
+
>,
|
|
75
87
|
) => void;
|
|
76
88
|
};
|
|
77
89
|
|
|
@@ -104,36 +116,36 @@ export enum EntityAuthorizationAction {
|
|
|
104
116
|
* ```
|
|
105
117
|
*/
|
|
106
118
|
export default abstract class EntityPrivacyPolicy<
|
|
107
|
-
TFields extends
|
|
108
|
-
|
|
119
|
+
TFields extends Record<string, any>,
|
|
120
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
109
121
|
TViewerContext extends ViewerContext,
|
|
110
|
-
TEntity extends ReadonlyEntity<TFields,
|
|
122
|
+
TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
111
123
|
TSelectedFields extends keyof TFields = keyof TFields,
|
|
112
124
|
> {
|
|
113
125
|
protected readonly createRules: readonly PrivacyPolicyRule<
|
|
114
126
|
TFields,
|
|
115
|
-
|
|
127
|
+
TIDField,
|
|
116
128
|
TViewerContext,
|
|
117
129
|
TEntity,
|
|
118
130
|
TSelectedFields
|
|
119
131
|
>[] = [];
|
|
120
132
|
protected readonly readRules: readonly PrivacyPolicyRule<
|
|
121
133
|
TFields,
|
|
122
|
-
|
|
134
|
+
TIDField,
|
|
123
135
|
TViewerContext,
|
|
124
136
|
TEntity,
|
|
125
137
|
TSelectedFields
|
|
126
138
|
>[] = [];
|
|
127
139
|
protected readonly updateRules: readonly PrivacyPolicyRule<
|
|
128
140
|
TFields,
|
|
129
|
-
|
|
141
|
+
TIDField,
|
|
130
142
|
TViewerContext,
|
|
131
143
|
TEntity,
|
|
132
144
|
TSelectedFields
|
|
133
145
|
>[] = [];
|
|
134
146
|
protected readonly deleteRules: readonly PrivacyPolicyRule<
|
|
135
147
|
TFields,
|
|
136
|
-
|
|
148
|
+
TIDField,
|
|
137
149
|
TViewerContext,
|
|
138
150
|
TEntity,
|
|
139
151
|
TSelectedFields
|
|
@@ -149,7 +161,7 @@ export default abstract class EntityPrivacyPolicy<
|
|
|
149
161
|
*/
|
|
150
162
|
protected getPrivacyPolicyEvaluator(
|
|
151
163
|
_viewerContext: TViewerContext,
|
|
152
|
-
): EntityPrivacyPolicyEvaluator<TFields,
|
|
164
|
+
): EntityPrivacyPolicyEvaluator<TFields, TIDField, TViewerContext, TEntity, TSelectedFields> {
|
|
153
165
|
return {
|
|
154
166
|
mode: EntityPrivacyPolicyEvaluationMode.ENFORCE,
|
|
155
167
|
};
|
|
@@ -168,7 +180,7 @@ export default abstract class EntityPrivacyPolicy<
|
|
|
168
180
|
queryContext: EntityQueryContext,
|
|
169
181
|
evaluationContext: EntityPrivacyPolicyEvaluationContext<
|
|
170
182
|
TFields,
|
|
171
|
-
|
|
183
|
+
TIDField,
|
|
172
184
|
TViewerContext,
|
|
173
185
|
TEntity,
|
|
174
186
|
TSelectedFields
|
|
@@ -200,7 +212,7 @@ export default abstract class EntityPrivacyPolicy<
|
|
|
200
212
|
queryContext: EntityQueryContext,
|
|
201
213
|
evaluationContext: EntityPrivacyPolicyEvaluationContext<
|
|
202
214
|
TFields,
|
|
203
|
-
|
|
215
|
+
TIDField,
|
|
204
216
|
TViewerContext,
|
|
205
217
|
TEntity,
|
|
206
218
|
TSelectedFields
|
|
@@ -232,7 +244,7 @@ export default abstract class EntityPrivacyPolicy<
|
|
|
232
244
|
queryContext: EntityQueryContext,
|
|
233
245
|
evaluationContext: EntityPrivacyPolicyEvaluationContext<
|
|
234
246
|
TFields,
|
|
235
|
-
|
|
247
|
+
TIDField,
|
|
236
248
|
TViewerContext,
|
|
237
249
|
TEntity,
|
|
238
250
|
TSelectedFields
|
|
@@ -264,7 +276,7 @@ export default abstract class EntityPrivacyPolicy<
|
|
|
264
276
|
queryContext: EntityQueryContext,
|
|
265
277
|
evaluationContext: EntityPrivacyPolicyEvaluationContext<
|
|
266
278
|
TFields,
|
|
267
|
-
|
|
279
|
+
TIDField,
|
|
268
280
|
TViewerContext,
|
|
269
281
|
TEntity,
|
|
270
282
|
TSelectedFields
|
|
@@ -284,12 +296,18 @@ export default abstract class EntityPrivacyPolicy<
|
|
|
284
296
|
}
|
|
285
297
|
|
|
286
298
|
private async authorizeForRulesetAsync(
|
|
287
|
-
ruleset: readonly PrivacyPolicyRule<
|
|
299
|
+
ruleset: readonly PrivacyPolicyRule<
|
|
300
|
+
TFields,
|
|
301
|
+
TIDField,
|
|
302
|
+
TViewerContext,
|
|
303
|
+
TEntity,
|
|
304
|
+
TSelectedFields
|
|
305
|
+
>[],
|
|
288
306
|
viewerContext: TViewerContext,
|
|
289
307
|
queryContext: EntityQueryContext,
|
|
290
308
|
evaluationContext: EntityPrivacyPolicyEvaluationContext<
|
|
291
309
|
TFields,
|
|
292
|
-
|
|
310
|
+
TIDField,
|
|
293
311
|
TViewerContext,
|
|
294
312
|
TEntity,
|
|
295
313
|
TSelectedFields
|
|
@@ -393,12 +411,18 @@ export default abstract class EntityPrivacyPolicy<
|
|
|
393
411
|
}
|
|
394
412
|
|
|
395
413
|
private async authorizeForRulesetInnerAsync(
|
|
396
|
-
ruleset: readonly PrivacyPolicyRule<
|
|
414
|
+
ruleset: readonly PrivacyPolicyRule<
|
|
415
|
+
TFields,
|
|
416
|
+
TIDField,
|
|
417
|
+
TViewerContext,
|
|
418
|
+
TEntity,
|
|
419
|
+
TSelectedFields
|
|
420
|
+
>[],
|
|
397
421
|
viewerContext: TViewerContext,
|
|
398
422
|
queryContext: EntityQueryContext,
|
|
399
423
|
evaluationContext: EntityPrivacyPolicyEvaluationContext<
|
|
400
424
|
TFields,
|
|
401
|
-
|
|
425
|
+
TIDField,
|
|
402
426
|
TViewerContext,
|
|
403
427
|
TEntity,
|
|
404
428
|
TSelectedFields
|
|
@@ -418,7 +442,7 @@ export default abstract class EntityPrivacyPolicy<
|
|
|
418
442
|
case RuleEvaluationResult.DENY:
|
|
419
443
|
throw new EntityNotAuthorizedError<
|
|
420
444
|
TFields,
|
|
421
|
-
|
|
445
|
+
TIDField,
|
|
422
446
|
TViewerContext,
|
|
423
447
|
TEntity,
|
|
424
448
|
TSelectedFields
|
|
@@ -434,7 +458,7 @@ export default abstract class EntityPrivacyPolicy<
|
|
|
434
458
|
}
|
|
435
459
|
}
|
|
436
460
|
|
|
437
|
-
throw new EntityNotAuthorizedError<TFields,
|
|
461
|
+
throw new EntityNotAuthorizedError<TFields, TIDField, TViewerContext, TEntity, TSelectedFields>(
|
|
438
462
|
entity,
|
|
439
463
|
viewerContext,
|
|
440
464
|
action,
|
|
@@ -10,7 +10,7 @@ import { mapMap } from './utils/collections/maps';
|
|
|
10
10
|
* An interface that knows how to load many objects from a cache by load params and invalidate
|
|
11
11
|
* those same load params.
|
|
12
12
|
*/
|
|
13
|
-
export interface ISecondaryEntityCache<TFields, TLoadParams> {
|
|
13
|
+
export interface ISecondaryEntityCache<TFields extends Record<string, any>, TLoadParams> {
|
|
14
14
|
/**
|
|
15
15
|
* Read-through cache function.
|
|
16
16
|
* @param loadParamsArray - array of loadParams to load from the cache
|
|
@@ -45,13 +45,13 @@ export interface ISecondaryEntityCache<TFields, TLoadParams> {
|
|
|
45
45
|
*/
|
|
46
46
|
export default abstract class EntitySecondaryCacheLoader<
|
|
47
47
|
TLoadParams,
|
|
48
|
-
TFields extends
|
|
49
|
-
|
|
48
|
+
TFields extends Record<string, any>,
|
|
49
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
50
50
|
TViewerContext extends ViewerContext,
|
|
51
|
-
TEntity extends ReadonlyEntity<TFields,
|
|
51
|
+
TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
52
52
|
TPrivacyPolicy extends EntityPrivacyPolicy<
|
|
53
53
|
TFields,
|
|
54
|
-
|
|
54
|
+
TIDField,
|
|
55
55
|
TViewerContext,
|
|
56
56
|
TEntity,
|
|
57
57
|
TSelectedFields
|
|
@@ -62,7 +62,7 @@ export default abstract class EntitySecondaryCacheLoader<
|
|
|
62
62
|
private readonly secondaryEntityCache: ISecondaryEntityCache<TFields, TLoadParams>,
|
|
63
63
|
protected readonly entityLoader: AuthorizationResultBasedEntityLoader<
|
|
64
64
|
TFields,
|
|
65
|
-
|
|
65
|
+
TIDField,
|
|
66
66
|
TViewerContext,
|
|
67
67
|
TEntity,
|
|
68
68
|
TPrivacyPolicy,
|
package/src/EntityUpdater.ts
CHANGED
|
@@ -10,13 +10,13 @@ import ViewerContext from './ViewerContext';
|
|
|
10
10
|
* The primary interface for updating entities.
|
|
11
11
|
*/
|
|
12
12
|
export default class EntityUpdater<
|
|
13
|
-
TFields extends
|
|
14
|
-
|
|
13
|
+
TFields extends Record<string, any>,
|
|
14
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
15
15
|
TViewerContext extends ViewerContext,
|
|
16
|
-
TEntity extends ReadonlyEntity<TFields,
|
|
16
|
+
TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
17
17
|
TPrivacyPolicy extends EntityPrivacyPolicy<
|
|
18
18
|
TFields,
|
|
19
|
-
|
|
19
|
+
TIDField,
|
|
20
20
|
TViewerContext,
|
|
21
21
|
TEntity,
|
|
22
22
|
TSelectedFields
|
|
@@ -28,7 +28,7 @@ export default class EntityUpdater<
|
|
|
28
28
|
private readonly queryContext: EntityQueryContext,
|
|
29
29
|
private readonly entityClass: IEntityClass<
|
|
30
30
|
TFields,
|
|
31
|
-
|
|
31
|
+
TIDField,
|
|
32
32
|
TViewerContext,
|
|
33
33
|
TEntity,
|
|
34
34
|
TPrivacyPolicy,
|
|
@@ -42,7 +42,7 @@ export default class EntityUpdater<
|
|
|
42
42
|
*/
|
|
43
43
|
enforcing(): EnforcingEntityUpdater<
|
|
44
44
|
TFields,
|
|
45
|
-
|
|
45
|
+
TIDField,
|
|
46
46
|
TViewerContext,
|
|
47
47
|
TEntity,
|
|
48
48
|
TPrivacyPolicy,
|
|
@@ -58,7 +58,7 @@ export default class EntityUpdater<
|
|
|
58
58
|
*/
|
|
59
59
|
withAuthorizationResults(): AuthorizationResultBasedUpdateMutator<
|
|
60
60
|
TFields,
|
|
61
|
-
|
|
61
|
+
TIDField,
|
|
62
62
|
TViewerContext,
|
|
63
63
|
TEntity,
|
|
64
64
|
TPrivacyPolicy,
|