@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
|
@@ -28,13 +28,13 @@ import IEntityMetricsAdapter, { EntityMetricsMutationType } from './metrics/IEnt
|
|
|
28
28
|
import { mapMapAsync } from './utils/collections/maps';
|
|
29
29
|
|
|
30
30
|
abstract class AuthorizationResultBasedBaseMutator<
|
|
31
|
-
TFields extends
|
|
32
|
-
|
|
31
|
+
TFields extends Record<string, any>,
|
|
32
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
33
33
|
TViewerContext extends ViewerContext,
|
|
34
|
-
TEntity extends Entity<TFields,
|
|
34
|
+
TEntity extends Entity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
35
35
|
TPrivacyPolicy extends EntityPrivacyPolicy<
|
|
36
36
|
TFields,
|
|
37
|
-
|
|
37
|
+
TIDField,
|
|
38
38
|
TViewerContext,
|
|
39
39
|
TEntity,
|
|
40
40
|
TSelectedFields
|
|
@@ -45,10 +45,10 @@ abstract class AuthorizationResultBasedBaseMutator<
|
|
|
45
45
|
protected readonly companionProvider: EntityCompanionProvider,
|
|
46
46
|
protected readonly viewerContext: TViewerContext,
|
|
47
47
|
protected readonly queryContext: EntityQueryContext,
|
|
48
|
-
protected readonly entityConfiguration: EntityConfiguration<TFields>,
|
|
48
|
+
protected readonly entityConfiguration: EntityConfiguration<TFields, TIDField>,
|
|
49
49
|
protected readonly entityClass: IEntityClass<
|
|
50
50
|
TFields,
|
|
51
|
-
|
|
51
|
+
TIDField,
|
|
52
52
|
TViewerContext,
|
|
53
53
|
TEntity,
|
|
54
54
|
TPrivacyPolicy,
|
|
@@ -57,27 +57,27 @@ abstract class AuthorizationResultBasedBaseMutator<
|
|
|
57
57
|
protected readonly privacyPolicy: TPrivacyPolicy,
|
|
58
58
|
protected readonly mutationValidators: EntityMutationValidator<
|
|
59
59
|
TFields,
|
|
60
|
-
|
|
60
|
+
TIDField,
|
|
61
61
|
TViewerContext,
|
|
62
62
|
TEntity,
|
|
63
63
|
TSelectedFields
|
|
64
64
|
>[],
|
|
65
65
|
protected readonly mutationTriggers: EntityMutationTriggerConfiguration<
|
|
66
66
|
TFields,
|
|
67
|
-
|
|
67
|
+
TIDField,
|
|
68
68
|
TViewerContext,
|
|
69
69
|
TEntity,
|
|
70
70
|
TSelectedFields
|
|
71
71
|
>,
|
|
72
72
|
protected readonly entityLoaderFactory: EntityLoaderFactory<
|
|
73
73
|
TFields,
|
|
74
|
-
|
|
74
|
+
TIDField,
|
|
75
75
|
TViewerContext,
|
|
76
76
|
TEntity,
|
|
77
77
|
TPrivacyPolicy,
|
|
78
78
|
TSelectedFields
|
|
79
79
|
>,
|
|
80
|
-
protected readonly databaseAdapter: EntityDatabaseAdapter<TFields>,
|
|
80
|
+
protected readonly databaseAdapter: EntityDatabaseAdapter<TFields, TIDField>,
|
|
81
81
|
protected readonly metricsAdapter: IEntityMetricsAdapter,
|
|
82
82
|
) {}
|
|
83
83
|
|
|
@@ -88,18 +88,32 @@ abstract class AuthorizationResultBasedBaseMutator<
|
|
|
88
88
|
invariant(fieldDefinition, `must have field definition for field = ${fieldName}`);
|
|
89
89
|
const isInputValid = fieldDefinition.validateInputValue(fieldValue);
|
|
90
90
|
if (!isInputValid) {
|
|
91
|
-
throw new EntityInvalidFieldValueError
|
|
91
|
+
throw new EntityInvalidFieldValueError<
|
|
92
|
+
TFields,
|
|
93
|
+
TIDField,
|
|
94
|
+
TViewerContext,
|
|
95
|
+
TEntity,
|
|
96
|
+
TPrivacyPolicy,
|
|
97
|
+
keyof TFields,
|
|
98
|
+
TSelectedFields
|
|
99
|
+
>(this.entityClass, fieldName, fieldValue);
|
|
92
100
|
}
|
|
93
101
|
}
|
|
94
102
|
}
|
|
95
103
|
|
|
96
104
|
protected async executeMutationValidatorsAsync(
|
|
97
|
-
validators: EntityMutationValidator<
|
|
105
|
+
validators: EntityMutationValidator<
|
|
106
|
+
TFields,
|
|
107
|
+
TIDField,
|
|
108
|
+
TViewerContext,
|
|
109
|
+
TEntity,
|
|
110
|
+
TSelectedFields
|
|
111
|
+
>[],
|
|
98
112
|
queryContext: EntityTransactionalQueryContext,
|
|
99
113
|
entity: TEntity,
|
|
100
114
|
mutationInfo: EntityValidatorMutationInfo<
|
|
101
115
|
TFields,
|
|
102
|
-
|
|
116
|
+
TIDField,
|
|
103
117
|
TViewerContext,
|
|
104
118
|
TEntity,
|
|
105
119
|
TSelectedFields
|
|
@@ -114,11 +128,17 @@ abstract class AuthorizationResultBasedBaseMutator<
|
|
|
114
128
|
|
|
115
129
|
protected async executeMutationTriggersAsync(
|
|
116
130
|
triggers:
|
|
117
|
-
| EntityMutationTrigger<TFields,
|
|
131
|
+
| EntityMutationTrigger<TFields, TIDField, TViewerContext, TEntity, TSelectedFields>[]
|
|
118
132
|
| undefined,
|
|
119
133
|
queryContext: EntityTransactionalQueryContext,
|
|
120
134
|
entity: TEntity,
|
|
121
|
-
mutationInfo: EntityTriggerMutationInfo<
|
|
135
|
+
mutationInfo: EntityTriggerMutationInfo<
|
|
136
|
+
TFields,
|
|
137
|
+
TIDField,
|
|
138
|
+
TViewerContext,
|
|
139
|
+
TEntity,
|
|
140
|
+
TSelectedFields
|
|
141
|
+
>,
|
|
122
142
|
): Promise<void> {
|
|
123
143
|
if (!triggers) {
|
|
124
144
|
return;
|
|
@@ -134,14 +154,20 @@ abstract class AuthorizationResultBasedBaseMutator<
|
|
|
134
154
|
triggers:
|
|
135
155
|
| EntityNonTransactionalMutationTrigger<
|
|
136
156
|
TFields,
|
|
137
|
-
|
|
157
|
+
TIDField,
|
|
138
158
|
TViewerContext,
|
|
139
159
|
TEntity,
|
|
140
160
|
TSelectedFields
|
|
141
161
|
>[]
|
|
142
162
|
| undefined,
|
|
143
163
|
entity: TEntity,
|
|
144
|
-
mutationInfo: EntityTriggerMutationInfo<
|
|
164
|
+
mutationInfo: EntityTriggerMutationInfo<
|
|
165
|
+
TFields,
|
|
166
|
+
TIDField,
|
|
167
|
+
TViewerContext,
|
|
168
|
+
TEntity,
|
|
169
|
+
TSelectedFields
|
|
170
|
+
>,
|
|
145
171
|
): Promise<void> {
|
|
146
172
|
if (!triggers) {
|
|
147
173
|
return;
|
|
@@ -156,13 +182,13 @@ abstract class AuthorizationResultBasedBaseMutator<
|
|
|
156
182
|
* Mutator for creating a new entity.
|
|
157
183
|
*/
|
|
158
184
|
export class AuthorizationResultBasedCreateMutator<
|
|
159
|
-
TFields extends
|
|
160
|
-
|
|
185
|
+
TFields extends Record<string, any>,
|
|
186
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
161
187
|
TViewerContext extends ViewerContext,
|
|
162
|
-
TEntity extends Entity<TFields,
|
|
188
|
+
TEntity extends Entity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
163
189
|
TPrivacyPolicy extends EntityPrivacyPolicy<
|
|
164
190
|
TFields,
|
|
165
|
-
|
|
191
|
+
TIDField,
|
|
166
192
|
TViewerContext,
|
|
167
193
|
TEntity,
|
|
168
194
|
TSelectedFields
|
|
@@ -170,7 +196,7 @@ export class AuthorizationResultBasedCreateMutator<
|
|
|
170
196
|
TSelectedFields extends keyof TFields,
|
|
171
197
|
> extends AuthorizationResultBasedBaseMutator<
|
|
172
198
|
TFields,
|
|
173
|
-
|
|
199
|
+
TIDField,
|
|
174
200
|
TViewerContext,
|
|
175
201
|
TEntity,
|
|
176
202
|
TPrivacyPolicy,
|
|
@@ -295,13 +321,13 @@ export class AuthorizationResultBasedCreateMutator<
|
|
|
295
321
|
* Mutator for updating an existing entity.
|
|
296
322
|
*/
|
|
297
323
|
export class AuthorizationResultBasedUpdateMutator<
|
|
298
|
-
TFields extends
|
|
299
|
-
|
|
324
|
+
TFields extends Record<string, any>,
|
|
325
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
300
326
|
TViewerContext extends ViewerContext,
|
|
301
|
-
TEntity extends Entity<TFields,
|
|
327
|
+
TEntity extends Entity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
302
328
|
TPrivacyPolicy extends EntityPrivacyPolicy<
|
|
303
329
|
TFields,
|
|
304
|
-
|
|
330
|
+
TIDField,
|
|
305
331
|
TViewerContext,
|
|
306
332
|
TEntity,
|
|
307
333
|
TSelectedFields
|
|
@@ -309,7 +335,7 @@ export class AuthorizationResultBasedUpdateMutator<
|
|
|
309
335
|
TSelectedFields extends keyof TFields,
|
|
310
336
|
> extends AuthorizationResultBasedBaseMutator<
|
|
311
337
|
TFields,
|
|
312
|
-
|
|
338
|
+
TIDField,
|
|
313
339
|
TViewerContext,
|
|
314
340
|
TEntity,
|
|
315
341
|
TPrivacyPolicy,
|
|
@@ -323,10 +349,10 @@ export class AuthorizationResultBasedUpdateMutator<
|
|
|
323
349
|
companionProvider: EntityCompanionProvider,
|
|
324
350
|
viewerContext: TViewerContext,
|
|
325
351
|
queryContext: EntityQueryContext,
|
|
326
|
-
entityConfiguration: EntityConfiguration<TFields>,
|
|
352
|
+
entityConfiguration: EntityConfiguration<TFields, TIDField>,
|
|
327
353
|
entityClass: IEntityClass<
|
|
328
354
|
TFields,
|
|
329
|
-
|
|
355
|
+
TIDField,
|
|
330
356
|
TViewerContext,
|
|
331
357
|
TEntity,
|
|
332
358
|
TPrivacyPolicy,
|
|
@@ -335,27 +361,27 @@ export class AuthorizationResultBasedUpdateMutator<
|
|
|
335
361
|
privacyPolicy: TPrivacyPolicy,
|
|
336
362
|
mutationValidators: EntityMutationValidator<
|
|
337
363
|
TFields,
|
|
338
|
-
|
|
364
|
+
TIDField,
|
|
339
365
|
TViewerContext,
|
|
340
366
|
TEntity,
|
|
341
367
|
TSelectedFields
|
|
342
368
|
>[],
|
|
343
369
|
mutationTriggers: EntityMutationTriggerConfiguration<
|
|
344
370
|
TFields,
|
|
345
|
-
|
|
371
|
+
TIDField,
|
|
346
372
|
TViewerContext,
|
|
347
373
|
TEntity,
|
|
348
374
|
TSelectedFields
|
|
349
375
|
>,
|
|
350
376
|
entityLoaderFactory: EntityLoaderFactory<
|
|
351
377
|
TFields,
|
|
352
|
-
|
|
378
|
+
TIDField,
|
|
353
379
|
TViewerContext,
|
|
354
380
|
TEntity,
|
|
355
381
|
TPrivacyPolicy,
|
|
356
382
|
TSelectedFields
|
|
357
383
|
>,
|
|
358
|
-
databaseAdapter: EntityDatabaseAdapter<TFields>,
|
|
384
|
+
databaseAdapter: EntityDatabaseAdapter<TFields, TIDField>,
|
|
359
385
|
metricsAdapter: IEntityMetricsAdapter,
|
|
360
386
|
originalEntity: TEntity,
|
|
361
387
|
) {
|
|
@@ -529,13 +555,13 @@ export class AuthorizationResultBasedUpdateMutator<
|
|
|
529
555
|
* Mutator for deleting an existing entity.
|
|
530
556
|
*/
|
|
531
557
|
export class AuthorizationResultBasedDeleteMutator<
|
|
532
|
-
TFields extends
|
|
533
|
-
|
|
558
|
+
TFields extends Record<string, any>,
|
|
559
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
534
560
|
TViewerContext extends ViewerContext,
|
|
535
|
-
TEntity extends Entity<TFields,
|
|
561
|
+
TEntity extends Entity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
536
562
|
TPrivacyPolicy extends EntityPrivacyPolicy<
|
|
537
563
|
TFields,
|
|
538
|
-
|
|
564
|
+
TIDField,
|
|
539
565
|
TViewerContext,
|
|
540
566
|
TEntity,
|
|
541
567
|
TSelectedFields
|
|
@@ -543,7 +569,7 @@ export class AuthorizationResultBasedDeleteMutator<
|
|
|
543
569
|
TSelectedFields extends keyof TFields,
|
|
544
570
|
> extends AuthorizationResultBasedBaseMutator<
|
|
545
571
|
TFields,
|
|
546
|
-
|
|
572
|
+
TIDField,
|
|
547
573
|
TViewerContext,
|
|
548
574
|
TEntity,
|
|
549
575
|
TPrivacyPolicy,
|
|
@@ -553,10 +579,10 @@ export class AuthorizationResultBasedDeleteMutator<
|
|
|
553
579
|
companionProvider: EntityCompanionProvider,
|
|
554
580
|
viewerContext: TViewerContext,
|
|
555
581
|
queryContext: EntityQueryContext,
|
|
556
|
-
entityConfiguration: EntityConfiguration<TFields>,
|
|
582
|
+
entityConfiguration: EntityConfiguration<TFields, TIDField>,
|
|
557
583
|
entityClass: IEntityClass<
|
|
558
584
|
TFields,
|
|
559
|
-
|
|
585
|
+
TIDField,
|
|
560
586
|
TViewerContext,
|
|
561
587
|
TEntity,
|
|
562
588
|
TPrivacyPolicy,
|
|
@@ -565,27 +591,27 @@ export class AuthorizationResultBasedDeleteMutator<
|
|
|
565
591
|
privacyPolicy: TPrivacyPolicy,
|
|
566
592
|
mutationValidators: EntityMutationValidator<
|
|
567
593
|
TFields,
|
|
568
|
-
|
|
594
|
+
TIDField,
|
|
569
595
|
TViewerContext,
|
|
570
596
|
TEntity,
|
|
571
597
|
TSelectedFields
|
|
572
598
|
>[],
|
|
573
599
|
mutationTriggers: EntityMutationTriggerConfiguration<
|
|
574
600
|
TFields,
|
|
575
|
-
|
|
601
|
+
TIDField,
|
|
576
602
|
TViewerContext,
|
|
577
603
|
TEntity,
|
|
578
604
|
TSelectedFields
|
|
579
605
|
>,
|
|
580
606
|
entityLoaderFactory: EntityLoaderFactory<
|
|
581
607
|
TFields,
|
|
582
|
-
|
|
608
|
+
TIDField,
|
|
583
609
|
TViewerContext,
|
|
584
610
|
TEntity,
|
|
585
611
|
TPrivacyPolicy,
|
|
586
612
|
TSelectedFields
|
|
587
613
|
>,
|
|
588
|
-
databaseAdapter: EntityDatabaseAdapter<TFields>,
|
|
614
|
+
databaseAdapter: EntityDatabaseAdapter<TFields, TIDField>,
|
|
589
615
|
metricsAdapter: IEntityMetricsAdapter,
|
|
590
616
|
private readonly entity: TEntity,
|
|
591
617
|
) {
|
|
@@ -743,7 +769,7 @@ export class AuthorizationResultBasedDeleteMutator<
|
|
|
743
769
|
const companionDefinition = this.companionProvider.getCompanionForEntity(
|
|
744
770
|
entity.constructor as IEntityClass<
|
|
745
771
|
TFields,
|
|
746
|
-
|
|
772
|
+
TIDField,
|
|
747
773
|
TViewerContext,
|
|
748
774
|
TEntity,
|
|
749
775
|
TPrivacyPolicy,
|
|
@@ -1,49 +1,55 @@
|
|
|
1
1
|
import nullthrows from 'nullthrows';
|
|
2
2
|
|
|
3
3
|
import IEntityCacheAdapter from './IEntityCacheAdapter';
|
|
4
|
+
import { IEntityLoadKey, IEntityLoadValue } from './internal/EntityLoadInterfaces';
|
|
4
5
|
import { CacheStatus, CacheLoadResult } from './internal/ReadThroughEntityCache';
|
|
5
6
|
|
|
6
7
|
/**
|
|
7
8
|
* A IEntityCacheAdapter that composes other IEntityCacheAdapter instances.
|
|
8
9
|
*/
|
|
9
|
-
export default class ComposedEntityCacheAdapter<
|
|
10
|
+
export default class ComposedEntityCacheAdapter<
|
|
11
|
+
TFields extends Record<string, any>,
|
|
12
|
+
TIDField extends keyof TFields,
|
|
13
|
+
> implements IEntityCacheAdapter<TFields, TIDField>
|
|
14
|
+
{
|
|
10
15
|
/**
|
|
11
16
|
* @param cacheAdapters - list of cache adapters to compose in order of precedence.
|
|
12
17
|
* Earlier cache adapters are read from first and written to (including invalidations) last.
|
|
13
18
|
* Typically, caches closer to the application should be ordered before caches closer to the database.
|
|
14
19
|
* A lower layer cache is closer to the database, while a higher layer cache is closer to the application.
|
|
15
20
|
*/
|
|
16
|
-
constructor(private readonly cacheAdapters: IEntityCacheAdapter<TFields>[]) {}
|
|
21
|
+
constructor(private readonly cacheAdapters: IEntityCacheAdapter<TFields, TIDField>[]) {}
|
|
17
22
|
|
|
18
|
-
public async loadManyAsync<
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
public async loadManyAsync<
|
|
24
|
+
TLoadKey extends IEntityLoadKey<TFields, TIDField, TSerializedLoadValue, TLoadValue>,
|
|
25
|
+
TSerializedLoadValue,
|
|
26
|
+
TLoadValue extends IEntityLoadValue<TSerializedLoadValue>,
|
|
27
|
+
>(
|
|
28
|
+
key: TLoadKey,
|
|
29
|
+
values: readonly TLoadValue[],
|
|
30
|
+
): Promise<ReadonlyMap<TLoadValue, CacheLoadResult<TFields>>> {
|
|
31
|
+
const retMap = key.vendNewLoadValueMap<CacheLoadResult<TFields>>();
|
|
32
|
+
const fulfilledValuesByCacheIndex: TLoadValue[][] = Array.from(
|
|
24
33
|
{ length: this.cacheAdapters.length },
|
|
25
34
|
() => [],
|
|
26
35
|
);
|
|
27
36
|
|
|
28
|
-
let
|
|
37
|
+
let unfulfilledValues = values;
|
|
29
38
|
for (let i = 0; i < this.cacheAdapters.length; i++) {
|
|
30
39
|
const cacheAdapter = nullthrows(this.cacheAdapters[i]);
|
|
31
|
-
const cacheResultsFromAdapter = await cacheAdapter.loadManyAsync(
|
|
32
|
-
fieldName,
|
|
33
|
-
unfulfilledFieldValues,
|
|
34
|
-
);
|
|
40
|
+
const cacheResultsFromAdapter = await cacheAdapter.loadManyAsync(key, unfulfilledValues);
|
|
35
41
|
|
|
36
|
-
const
|
|
37
|
-
for (const [
|
|
42
|
+
const newUnfulfilledValues = [];
|
|
43
|
+
for (const [value, cacheResult] of cacheResultsFromAdapter) {
|
|
38
44
|
if (cacheResult.status === CacheStatus.MISS) {
|
|
39
|
-
|
|
45
|
+
newUnfulfilledValues.push(value);
|
|
40
46
|
} else {
|
|
41
|
-
retMap.set(
|
|
42
|
-
nullthrows(
|
|
47
|
+
retMap.set(value, cacheResult);
|
|
48
|
+
nullthrows(fulfilledValuesByCacheIndex[i]).push(value);
|
|
43
49
|
}
|
|
44
50
|
}
|
|
45
|
-
|
|
46
|
-
if (
|
|
51
|
+
unfulfilledValues = newUnfulfilledValues;
|
|
52
|
+
if (unfulfilledValues.length === 0) {
|
|
47
53
|
break;
|
|
48
54
|
}
|
|
49
55
|
}
|
|
@@ -52,69 +58,72 @@ export default class ComposedEntityCacheAdapter<TFields> implements IEntityCache
|
|
|
52
58
|
// Write to lower layers first
|
|
53
59
|
for (let i = this.cacheAdapters.length - 1; i >= 0; i--) {
|
|
54
60
|
const cacheAdapter = nullthrows(this.cacheAdapters[i]);
|
|
55
|
-
const hitsToCache =
|
|
56
|
-
const negativesToCache:
|
|
61
|
+
const hitsToCache = key.vendNewLoadValueMap<Readonly<TFields>>();
|
|
62
|
+
const negativesToCache: TLoadValue[] = [];
|
|
57
63
|
|
|
58
64
|
// Loop over all lower layer caches to collect hits and misses
|
|
59
65
|
for (let j = i + 1; j < this.cacheAdapters.length; j++) {
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
const cacheResult = nullthrows(retMap.get(
|
|
66
|
+
const fulfilledValues = nullthrows(fulfilledValuesByCacheIndex[j]);
|
|
67
|
+
fulfilledValues.forEach((value) => {
|
|
68
|
+
const cacheResult = nullthrows(retMap.get(value));
|
|
63
69
|
if (cacheResult.status === CacheStatus.HIT) {
|
|
64
|
-
hitsToCache.set(
|
|
70
|
+
hitsToCache.set(value, cacheResult.item);
|
|
65
71
|
} else if (cacheResult.status === CacheStatus.NEGATIVE) {
|
|
66
|
-
negativesToCache.push(
|
|
72
|
+
negativesToCache.push(value);
|
|
67
73
|
}
|
|
68
74
|
});
|
|
69
75
|
}
|
|
70
76
|
|
|
71
77
|
const promises = [];
|
|
72
78
|
if (hitsToCache.size > 0) {
|
|
73
|
-
promises.push(cacheAdapter.cacheManyAsync(
|
|
79
|
+
promises.push(cacheAdapter.cacheManyAsync(key, hitsToCache));
|
|
74
80
|
}
|
|
75
81
|
if (negativesToCache.length > 0) {
|
|
76
|
-
promises.push(cacheAdapter.cacheDBMissesAsync(
|
|
82
|
+
promises.push(cacheAdapter.cacheDBMissesAsync(key, negativesToCache));
|
|
77
83
|
}
|
|
78
84
|
await Promise.all(promises);
|
|
79
85
|
}
|
|
80
86
|
|
|
81
|
-
for (const
|
|
82
|
-
retMap.set(
|
|
87
|
+
for (const value of unfulfilledValues) {
|
|
88
|
+
retMap.set(value, { status: CacheStatus.MISS });
|
|
83
89
|
}
|
|
84
90
|
|
|
85
91
|
return retMap;
|
|
86
92
|
}
|
|
87
93
|
|
|
88
|
-
public async cacheManyAsync<
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
94
|
+
public async cacheManyAsync<
|
|
95
|
+
TLoadKey extends IEntityLoadKey<TFields, TIDField, TSerializedLoadValue, TLoadValue>,
|
|
96
|
+
TSerializedLoadValue,
|
|
97
|
+
TLoadValue extends IEntityLoadValue<TSerializedLoadValue>,
|
|
98
|
+
>(key: TLoadKey, objectMap: ReadonlyMap<TLoadValue, Readonly<TFields>>): Promise<void> {
|
|
92
99
|
// write to lower layers first
|
|
93
100
|
for (let i = this.cacheAdapters.length - 1; i >= 0; i--) {
|
|
94
101
|
const cacheAdapter = nullthrows(this.cacheAdapters[i]);
|
|
95
|
-
await cacheAdapter.cacheManyAsync(
|
|
102
|
+
await cacheAdapter.cacheManyAsync(key, objectMap);
|
|
96
103
|
}
|
|
97
104
|
}
|
|
98
105
|
|
|
99
|
-
public async cacheDBMissesAsync<
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
106
|
+
public async cacheDBMissesAsync<
|
|
107
|
+
TLoadKey extends IEntityLoadKey<TFields, TIDField, TSerializedLoadValue, TLoadValue>,
|
|
108
|
+
TSerializedLoadValue,
|
|
109
|
+
TLoadValue extends IEntityLoadValue<TSerializedLoadValue>,
|
|
110
|
+
>(key: TLoadKey, values: readonly TLoadValue[]): Promise<void> {
|
|
103
111
|
// write to lower layers first
|
|
104
112
|
for (let i = this.cacheAdapters.length - 1; i >= 0; i--) {
|
|
105
113
|
const cacheAdapter = nullthrows(this.cacheAdapters[i]);
|
|
106
|
-
await cacheAdapter.cacheDBMissesAsync(
|
|
114
|
+
await cacheAdapter.cacheDBMissesAsync(key, values);
|
|
107
115
|
}
|
|
108
116
|
}
|
|
109
117
|
|
|
110
|
-
public async invalidateManyAsync<
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
118
|
+
public async invalidateManyAsync<
|
|
119
|
+
TLoadKey extends IEntityLoadKey<TFields, TIDField, TSerializedLoadValue, TLoadValue>,
|
|
120
|
+
TSerializedLoadValue,
|
|
121
|
+
TLoadValue extends IEntityLoadValue<TSerializedLoadValue>,
|
|
122
|
+
>(key: TLoadKey, values: readonly TLoadValue[]): Promise<void> {
|
|
114
123
|
// delete from lower layers first
|
|
115
124
|
for (let i = this.cacheAdapters.length - 1; i >= 0; i--) {
|
|
116
125
|
const cacheAdapter = nullthrows(this.cacheAdapters[i]);
|
|
117
|
-
await cacheAdapter.invalidateManyAsync(
|
|
126
|
+
await cacheAdapter.invalidateManyAsync(key, values);
|
|
118
127
|
}
|
|
119
128
|
}
|
|
120
129
|
}
|
|
@@ -5,7 +5,7 @@ import { ISecondaryEntityCache } from './EntitySecondaryCacheLoader';
|
|
|
5
5
|
/**
|
|
6
6
|
* A ISecondaryEntityCache that composes other ISecondaryEntityCache instances.
|
|
7
7
|
*/
|
|
8
|
-
export default class ComposedSecondaryEntityCache<TLoadParams, TFields
|
|
8
|
+
export default class ComposedSecondaryEntityCache<TLoadParams, TFields extends Record<string, any>>
|
|
9
9
|
implements ISecondaryEntityCache<TFields, TLoadParams>
|
|
10
10
|
{
|
|
11
11
|
/**
|
|
@@ -30,7 +30,10 @@ export default class ComposedSecondaryEntityCache<TLoadParams, TFields>
|
|
|
30
30
|
);
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
private static async loadManyThroughRecursivelyAsync<
|
|
33
|
+
private static async loadManyThroughRecursivelyAsync<
|
|
34
|
+
TLoadParams,
|
|
35
|
+
TFields extends Record<string, any>,
|
|
36
|
+
>(
|
|
34
37
|
secondaryEntityCaches: ISecondaryEntityCache<TFields, TLoadParams>[],
|
|
35
38
|
loadParamsArray: readonly Readonly<TLoadParams>[],
|
|
36
39
|
fetcher: (
|