@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
|
@@ -17,15 +17,21 @@ import IEntityMetricsAdapter, {
|
|
|
17
17
|
IncrementLoadCountEventType,
|
|
18
18
|
} from '../../metrics/IEntityMetricsAdapter';
|
|
19
19
|
import NoOpEntityMetricsAdapter from '../../metrics/NoOpEntityMetricsAdapter';
|
|
20
|
-
import TestEntity, { testEntityConfiguration, TestFields } from '../../testfixtures/TestEntity';
|
|
21
20
|
import {
|
|
22
21
|
NoCacheStubCacheAdapterProvider,
|
|
23
22
|
InMemoryFullCacheStubCacheAdapterProvider,
|
|
24
|
-
} from '../../utils/
|
|
25
|
-
import StubDatabaseAdapter from '../../utils/
|
|
26
|
-
import StubQueryContextProvider from '../../utils/
|
|
23
|
+
} from '../../utils/__testfixtures__/StubCacheAdapter';
|
|
24
|
+
import StubDatabaseAdapter from '../../utils/__testfixtures__/StubDatabaseAdapter';
|
|
25
|
+
import StubQueryContextProvider from '../../utils/__testfixtures__/StubQueryContextProvider';
|
|
26
|
+
import TestEntity, {
|
|
27
|
+
testEntityConfiguration,
|
|
28
|
+
TestFields,
|
|
29
|
+
} from '../../utils/__testfixtures__/TestEntity';
|
|
30
|
+
import { CompositeFieldHolder, CompositeFieldValueHolder } from '../CompositeFieldHolder';
|
|
27
31
|
import EntityDataManager from '../EntityDataManager';
|
|
32
|
+
import { EntityLoadMethodType } from '../EntityLoadInterfaces';
|
|
28
33
|
import ReadThroughEntityCache from '../ReadThroughEntityCache';
|
|
34
|
+
import { SingleFieldHolder, SingleFieldValueHolder } from '../SingleFieldHolder';
|
|
29
35
|
|
|
30
36
|
const getObjects = (): Map<string, TestFields[]> =>
|
|
31
37
|
new Map([
|
|
@@ -67,7 +73,10 @@ describe(EntityDataManager, () => {
|
|
|
67
73
|
testEntityConfiguration,
|
|
68
74
|
objects,
|
|
69
75
|
);
|
|
70
|
-
const databaseAdapter = new StubDatabaseAdapter<TestFields>(
|
|
76
|
+
const databaseAdapter = new StubDatabaseAdapter<TestFields, 'customIdField'>(
|
|
77
|
+
testEntityConfiguration,
|
|
78
|
+
dataStore,
|
|
79
|
+
);
|
|
71
80
|
const cacheAdapterProvider = new NoCacheStubCacheAdapterProvider();
|
|
72
81
|
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(testEntityConfiguration);
|
|
73
82
|
const entityCache = new ReadThroughEntityCache(testEntityConfiguration, cacheAdapter);
|
|
@@ -83,25 +92,25 @@ describe(EntityDataManager, () => {
|
|
|
83
92
|
const dbSpy = jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
84
93
|
const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
85
94
|
|
|
86
|
-
const entityDatas = await entityDataManager.
|
|
95
|
+
const entityDatas = await entityDataManager.loadManyEqualingAsync(
|
|
87
96
|
queryContext,
|
|
88
|
-
'customIdField',
|
|
89
|
-
['2'],
|
|
97
|
+
new SingleFieldHolder('customIdField'),
|
|
98
|
+
[new SingleFieldValueHolder('2')],
|
|
90
99
|
);
|
|
91
|
-
expect(entityDatas.get('2')).toHaveLength(1);
|
|
100
|
+
expect(entityDatas.get(new SingleFieldValueHolder('2'))).toHaveLength(1);
|
|
92
101
|
|
|
93
102
|
expect(dbSpy).toHaveBeenCalled();
|
|
94
103
|
expect(cacheSpy).toHaveBeenCalled();
|
|
95
104
|
dbSpy.mockClear();
|
|
96
105
|
cacheSpy.mockClear();
|
|
97
106
|
|
|
98
|
-
const entityDatas2 = await entityDataManager.
|
|
107
|
+
const entityDatas2 = await entityDataManager.loadManyEqualingAsync(
|
|
99
108
|
queryContext,
|
|
100
|
-
'testIndexedField',
|
|
101
|
-
['unique2', 'unique3'],
|
|
109
|
+
new SingleFieldHolder('testIndexedField'),
|
|
110
|
+
[new SingleFieldValueHolder('unique2'), new SingleFieldValueHolder('unique3')],
|
|
102
111
|
);
|
|
103
|
-
expect(entityDatas2.get('unique2')).toHaveLength(1);
|
|
104
|
-
expect(entityDatas2.get('unique3')).toHaveLength(1);
|
|
112
|
+
expect(entityDatas2.get(new SingleFieldValueHolder('unique2'))).toHaveLength(1);
|
|
113
|
+
expect(entityDatas2.get(new SingleFieldValueHolder('unique3'))).toHaveLength(1);
|
|
105
114
|
|
|
106
115
|
expect(dbSpy).toHaveBeenCalled();
|
|
107
116
|
expect(cacheSpy).toHaveBeenCalled();
|
|
@@ -115,7 +124,10 @@ describe(EntityDataManager, () => {
|
|
|
115
124
|
testEntityConfiguration,
|
|
116
125
|
objects,
|
|
117
126
|
);
|
|
118
|
-
const databaseAdapter = new StubDatabaseAdapter<TestFields>(
|
|
127
|
+
const databaseAdapter = new StubDatabaseAdapter<TestFields, 'customIdField'>(
|
|
128
|
+
testEntityConfiguration,
|
|
129
|
+
dataStore,
|
|
130
|
+
);
|
|
119
131
|
const cacheAdapterProvider = new InMemoryFullCacheStubCacheAdapterProvider();
|
|
120
132
|
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(testEntityConfiguration);
|
|
121
133
|
const entityCache = new ReadThroughEntityCache(testEntityConfiguration, cacheAdapter);
|
|
@@ -131,25 +143,25 @@ describe(EntityDataManager, () => {
|
|
|
131
143
|
const dbSpy = jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
132
144
|
const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
133
145
|
|
|
134
|
-
const entityDatas = await entityDataManager.
|
|
146
|
+
const entityDatas = await entityDataManager.loadManyEqualingAsync(
|
|
135
147
|
queryContext,
|
|
136
|
-
'customIdField',
|
|
137
|
-
['1'],
|
|
148
|
+
new SingleFieldHolder('customIdField'),
|
|
149
|
+
[new SingleFieldValueHolder('1')],
|
|
138
150
|
);
|
|
139
|
-
expect(entityDatas.get('1')).toHaveLength(1);
|
|
151
|
+
expect(entityDatas.get(new SingleFieldValueHolder('1'))).toHaveLength(1);
|
|
140
152
|
|
|
141
153
|
expect(dbSpy).toHaveBeenCalled();
|
|
142
154
|
expect(cacheSpy).toHaveBeenCalled();
|
|
143
155
|
dbSpy.mockClear();
|
|
144
156
|
cacheSpy.mockClear();
|
|
145
157
|
|
|
146
|
-
const entityDatas2 = await entityDataManager.
|
|
158
|
+
const entityDatas2 = await entityDataManager.loadManyEqualingAsync(
|
|
147
159
|
queryContext,
|
|
148
|
-
'testIndexedField',
|
|
149
|
-
['unique2', 'unique3'],
|
|
160
|
+
new SingleFieldHolder('testIndexedField'),
|
|
161
|
+
[new SingleFieldValueHolder('unique2'), new SingleFieldValueHolder('unique3')],
|
|
150
162
|
);
|
|
151
|
-
expect(entityDatas2.get('unique2')).toHaveLength(1);
|
|
152
|
-
expect(entityDatas2.get('unique3')).toHaveLength(1);
|
|
163
|
+
expect(entityDatas2.get(new SingleFieldValueHolder('unique2'))).toHaveLength(1);
|
|
164
|
+
expect(entityDatas2.get(new SingleFieldValueHolder('unique3'))).toHaveLength(1);
|
|
153
165
|
|
|
154
166
|
expect(dbSpy).toHaveBeenCalled();
|
|
155
167
|
expect(cacheSpy).toHaveBeenCalled();
|
|
@@ -163,7 +175,10 @@ describe(EntityDataManager, () => {
|
|
|
163
175
|
testEntityConfiguration,
|
|
164
176
|
objects,
|
|
165
177
|
);
|
|
166
|
-
const databaseAdapter = new StubDatabaseAdapter<TestFields>(
|
|
178
|
+
const databaseAdapter = new StubDatabaseAdapter<TestFields, 'customIdField'>(
|
|
179
|
+
testEntityConfiguration,
|
|
180
|
+
dataStore,
|
|
181
|
+
);
|
|
167
182
|
const cacheAdapterProvider = new InMemoryFullCacheStubCacheAdapterProvider();
|
|
168
183
|
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(testEntityConfiguration);
|
|
169
184
|
const entityCache = new ReadThroughEntityCache(testEntityConfiguration, cacheAdapter);
|
|
@@ -187,12 +202,16 @@ describe(EntityDataManager, () => {
|
|
|
187
202
|
const dbSpy = jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
188
203
|
const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
189
204
|
|
|
190
|
-
await entityDataManager.
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
205
|
+
await entityDataManager.loadManyEqualingAsync(
|
|
206
|
+
queryContext,
|
|
207
|
+
new SingleFieldHolder('testIndexedField'),
|
|
208
|
+
[new SingleFieldValueHolder('unique2')],
|
|
209
|
+
);
|
|
210
|
+
await entityDataManager2.loadManyEqualingAsync(
|
|
211
|
+
queryContext,
|
|
212
|
+
new SingleFieldHolder('testIndexedField'),
|
|
213
|
+
[new SingleFieldValueHolder('unique2')],
|
|
214
|
+
);
|
|
196
215
|
|
|
197
216
|
expect(dbSpy).toHaveBeenCalledTimes(1);
|
|
198
217
|
expect(cacheSpy).toHaveBeenCalledTimes(2);
|
|
@@ -207,7 +226,10 @@ describe(EntityDataManager, () => {
|
|
|
207
226
|
testEntityConfiguration,
|
|
208
227
|
objects,
|
|
209
228
|
);
|
|
210
|
-
const databaseAdapter = new StubDatabaseAdapter<TestFields>(
|
|
229
|
+
const databaseAdapter = new StubDatabaseAdapter<TestFields, 'customIdField'>(
|
|
230
|
+
testEntityConfiguration,
|
|
231
|
+
dataStore,
|
|
232
|
+
);
|
|
211
233
|
const cacheAdapterProvider = new InMemoryFullCacheStubCacheAdapterProvider();
|
|
212
234
|
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(testEntityConfiguration);
|
|
213
235
|
const entityCache = new ReadThroughEntityCache(testEntityConfiguration, cacheAdapter);
|
|
@@ -223,12 +245,16 @@ describe(EntityDataManager, () => {
|
|
|
223
245
|
const dbSpy = jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
224
246
|
const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
225
247
|
|
|
226
|
-
await entityDataManager.
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
248
|
+
await entityDataManager.loadManyEqualingAsync(
|
|
249
|
+
queryContext,
|
|
250
|
+
new SingleFieldHolder('testIndexedField'),
|
|
251
|
+
[new SingleFieldValueHolder('unique2')],
|
|
252
|
+
);
|
|
253
|
+
await entityDataManager.loadManyEqualingAsync(
|
|
254
|
+
queryContext,
|
|
255
|
+
new SingleFieldHolder('testIndexedField'),
|
|
256
|
+
[new SingleFieldValueHolder('unique2')],
|
|
257
|
+
);
|
|
232
258
|
|
|
233
259
|
expect(dbSpy).toHaveBeenCalledTimes(1);
|
|
234
260
|
expect(cacheSpy).toHaveBeenCalledTimes(1);
|
|
@@ -243,7 +269,10 @@ describe(EntityDataManager, () => {
|
|
|
243
269
|
testEntityConfiguration,
|
|
244
270
|
objects,
|
|
245
271
|
);
|
|
246
|
-
const databaseAdapter = new StubDatabaseAdapter<TestFields>(
|
|
272
|
+
const databaseAdapter = new StubDatabaseAdapter<TestFields, 'customIdField'>(
|
|
273
|
+
testEntityConfiguration,
|
|
274
|
+
dataStore,
|
|
275
|
+
);
|
|
247
276
|
const cacheAdapterProvider = new InMemoryFullCacheStubCacheAdapterProvider();
|
|
248
277
|
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(testEntityConfiguration);
|
|
249
278
|
const entityCache = new ReadThroughEntityCache(testEntityConfiguration, cacheAdapter);
|
|
@@ -259,23 +288,23 @@ describe(EntityDataManager, () => {
|
|
|
259
288
|
const dbSpy = jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
260
289
|
const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
261
290
|
|
|
262
|
-
const entityData = await entityDataManager.
|
|
291
|
+
const entityData = await entityDataManager.loadManyEqualingAsync(
|
|
263
292
|
queryContext,
|
|
264
|
-
'stringField',
|
|
265
|
-
['hello', 'world'],
|
|
293
|
+
new SingleFieldHolder('stringField'),
|
|
294
|
+
[new SingleFieldValueHolder('hello'), new SingleFieldValueHolder('world')],
|
|
266
295
|
);
|
|
267
|
-
const entityData2 = await entityDataManager.
|
|
296
|
+
const entityData2 = await entityDataManager.loadManyEqualingAsync(
|
|
268
297
|
queryContext,
|
|
269
|
-
'stringField',
|
|
270
|
-
['hello', 'world'],
|
|
298
|
+
new SingleFieldHolder('stringField'),
|
|
299
|
+
[new SingleFieldValueHolder('hello'), new SingleFieldValueHolder('world')],
|
|
271
300
|
);
|
|
272
301
|
|
|
273
302
|
expect(dbSpy).toHaveBeenCalledTimes(1);
|
|
274
303
|
expect(cacheSpy).toHaveBeenCalledTimes(1);
|
|
275
304
|
|
|
276
305
|
expect(entityData).toMatchObject(entityData2);
|
|
277
|
-
expect(entityData.get('hello')).toHaveLength(2);
|
|
278
|
-
expect(entityData.get('world')).toHaveLength(1);
|
|
306
|
+
expect(entityData.get(new SingleFieldValueHolder('hello'))).toHaveLength(2);
|
|
307
|
+
expect(entityData.get(new SingleFieldValueHolder('world'))).toHaveLength(1);
|
|
279
308
|
|
|
280
309
|
dbSpy.mockReset();
|
|
281
310
|
cacheSpy.mockReset();
|
|
@@ -287,7 +316,10 @@ describe(EntityDataManager, () => {
|
|
|
287
316
|
testEntityConfiguration,
|
|
288
317
|
objects,
|
|
289
318
|
);
|
|
290
|
-
const databaseAdapter = new StubDatabaseAdapter<TestFields>(
|
|
319
|
+
const databaseAdapter = new StubDatabaseAdapter<TestFields, 'customIdField'>(
|
|
320
|
+
testEntityConfiguration,
|
|
321
|
+
dataStore,
|
|
322
|
+
);
|
|
291
323
|
const cacheAdapterProvider = new InMemoryFullCacheStubCacheAdapterProvider();
|
|
292
324
|
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(testEntityConfiguration);
|
|
293
325
|
const entityCache = new ReadThroughEntityCache(testEntityConfiguration, cacheAdapter);
|
|
@@ -305,13 +337,22 @@ describe(EntityDataManager, () => {
|
|
|
305
337
|
const dbSpy = jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
306
338
|
const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
307
339
|
|
|
308
|
-
await entityDataManager.
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
340
|
+
await entityDataManager.loadManyEqualingAsync(
|
|
341
|
+
queryContext,
|
|
342
|
+
new SingleFieldHolder('testIndexedField'),
|
|
343
|
+
[new SingleFieldValueHolder(objectInQuestion['testIndexedField'])],
|
|
344
|
+
);
|
|
345
|
+
await entityDataManager.invalidateKeyValuePairsAsync([
|
|
346
|
+
[
|
|
347
|
+
new SingleFieldHolder('testIndexedField'),
|
|
348
|
+
new SingleFieldValueHolder(objectInQuestion['testIndexedField']),
|
|
349
|
+
],
|
|
314
350
|
]);
|
|
351
|
+
await entityDataManager.loadManyEqualingAsync(
|
|
352
|
+
queryContext,
|
|
353
|
+
new SingleFieldHolder('testIndexedField'),
|
|
354
|
+
[new SingleFieldValueHolder(objectInQuestion['testIndexedField'])],
|
|
355
|
+
);
|
|
315
356
|
|
|
316
357
|
expect(dbSpy).toHaveBeenCalledTimes(2);
|
|
317
358
|
expect(cacheSpy).toHaveBeenCalledTimes(2);
|
|
@@ -326,7 +367,10 @@ describe(EntityDataManager, () => {
|
|
|
326
367
|
testEntityConfiguration,
|
|
327
368
|
objects,
|
|
328
369
|
);
|
|
329
|
-
const databaseAdapter = new StubDatabaseAdapter<TestFields>(
|
|
370
|
+
const databaseAdapter = new StubDatabaseAdapter<TestFields, 'customIdField'>(
|
|
371
|
+
testEntityConfiguration,
|
|
372
|
+
dataStore,
|
|
373
|
+
);
|
|
330
374
|
const cacheAdapterProvider = new InMemoryFullCacheStubCacheAdapterProvider();
|
|
331
375
|
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(testEntityConfiguration);
|
|
332
376
|
const entityCache = new ReadThroughEntityCache(testEntityConfiguration, cacheAdapter);
|
|
@@ -344,13 +388,22 @@ describe(EntityDataManager, () => {
|
|
|
344
388
|
const dbSpy = jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
345
389
|
const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
346
390
|
|
|
347
|
-
await entityDataManager.
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
391
|
+
await entityDataManager.loadManyEqualingAsync(
|
|
392
|
+
queryContext,
|
|
393
|
+
new SingleFieldHolder('testIndexedField'),
|
|
394
|
+
[new SingleFieldValueHolder(objectInQuestion['testIndexedField'])],
|
|
395
|
+
);
|
|
396
|
+
await entityDataManager.invalidateKeyValuePairsAsync([
|
|
397
|
+
[
|
|
398
|
+
new SingleFieldHolder('testIndexedField'),
|
|
399
|
+
new SingleFieldValueHolder(objectInQuestion['testIndexedField']),
|
|
400
|
+
],
|
|
353
401
|
]);
|
|
402
|
+
await entityDataManager.loadManyEqualingAsync(
|
|
403
|
+
queryContext,
|
|
404
|
+
new SingleFieldHolder('customIdField'),
|
|
405
|
+
[new SingleFieldValueHolder(objectInQuestion['customIdField'])],
|
|
406
|
+
);
|
|
354
407
|
|
|
355
408
|
expect(dbSpy).toHaveBeenCalledTimes(2);
|
|
356
409
|
expect(cacheSpy).toHaveBeenCalledTimes(2);
|
|
@@ -365,7 +418,10 @@ describe(EntityDataManager, () => {
|
|
|
365
418
|
testEntityConfiguration,
|
|
366
419
|
objects,
|
|
367
420
|
);
|
|
368
|
-
const databaseAdapter = new StubDatabaseAdapter<TestFields>(
|
|
421
|
+
const databaseAdapter = new StubDatabaseAdapter<TestFields, 'customIdField'>(
|
|
422
|
+
testEntityConfiguration,
|
|
423
|
+
dataStore,
|
|
424
|
+
);
|
|
369
425
|
const cacheAdapterProvider = new InMemoryFullCacheStubCacheAdapterProvider();
|
|
370
426
|
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(testEntityConfiguration);
|
|
371
427
|
const entityCache = new ReadThroughEntityCache(testEntityConfiguration, cacheAdapter);
|
|
@@ -382,14 +438,16 @@ describe(EntityDataManager, () => {
|
|
|
382
438
|
|
|
383
439
|
const entityDatas = await new StubQueryContextProvider().runInTransactionAsync(
|
|
384
440
|
async (queryContext) => {
|
|
385
|
-
return await entityDataManager.
|
|
386
|
-
|
|
387
|
-
|
|
441
|
+
return await entityDataManager.loadManyEqualingAsync(
|
|
442
|
+
queryContext,
|
|
443
|
+
new SingleFieldHolder('customIdField'),
|
|
444
|
+
[new SingleFieldValueHolder('1')],
|
|
445
|
+
);
|
|
388
446
|
},
|
|
389
447
|
{},
|
|
390
448
|
);
|
|
391
449
|
|
|
392
|
-
expect(entityDatas.get('1')).toHaveLength(1);
|
|
450
|
+
expect(entityDatas.get(new SingleFieldValueHolder('1'))).toHaveLength(1);
|
|
393
451
|
|
|
394
452
|
expect(dbSpy).toHaveBeenCalled();
|
|
395
453
|
expect(cacheSpy).not.toHaveBeenCalled();
|
|
@@ -404,7 +462,10 @@ describe(EntityDataManager, () => {
|
|
|
404
462
|
testEntityConfiguration,
|
|
405
463
|
objects,
|
|
406
464
|
);
|
|
407
|
-
const databaseAdapter = new StubDatabaseAdapter<TestFields>(
|
|
465
|
+
const databaseAdapter = new StubDatabaseAdapter<TestFields, 'customIdField'>(
|
|
466
|
+
testEntityConfiguration,
|
|
467
|
+
dataStore,
|
|
468
|
+
);
|
|
408
469
|
const cacheAdapterProvider = new InMemoryFullCacheStubCacheAdapterProvider();
|
|
409
470
|
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(testEntityConfiguration);
|
|
410
471
|
const entityCache = new ReadThroughEntityCache(testEntityConfiguration, cacheAdapter);
|
|
@@ -445,7 +506,7 @@ describe(EntityDataManager, () => {
|
|
|
445
506
|
});
|
|
446
507
|
|
|
447
508
|
it('handles DB errors as expected', async () => {
|
|
448
|
-
const databaseAdapterMock = mock<EntityDatabaseAdapter<TestFields>>();
|
|
509
|
+
const databaseAdapterMock = mock<EntityDatabaseAdapter<TestFields, 'customIdField'>>();
|
|
449
510
|
when(databaseAdapterMock.fetchManyWhereAsync(anything(), anything(), anything())).thenReject(
|
|
450
511
|
new Error('DB query failed'),
|
|
451
512
|
);
|
|
@@ -464,7 +525,11 @@ describe(EntityDataManager, () => {
|
|
|
464
525
|
const queryContext = new StubQueryContextProvider().getQueryContext();
|
|
465
526
|
|
|
466
527
|
await expect(
|
|
467
|
-
entityDataManager.
|
|
528
|
+
entityDataManager.loadManyEqualingAsync(
|
|
529
|
+
queryContext,
|
|
530
|
+
new SingleFieldHolder('customIdField'),
|
|
531
|
+
[new SingleFieldValueHolder('2')],
|
|
532
|
+
),
|
|
468
533
|
).rejects.toThrow();
|
|
469
534
|
});
|
|
470
535
|
|
|
@@ -477,7 +542,10 @@ describe(EntityDataManager, () => {
|
|
|
477
542
|
testEntityConfiguration,
|
|
478
543
|
objects,
|
|
479
544
|
);
|
|
480
|
-
const databaseAdapter = new StubDatabaseAdapter<TestFields>(
|
|
545
|
+
const databaseAdapter = new StubDatabaseAdapter<TestFields, 'customIdField'>(
|
|
546
|
+
testEntityConfiguration,
|
|
547
|
+
dataStore,
|
|
548
|
+
);
|
|
481
549
|
const cacheAdapterProvider = new InMemoryFullCacheStubCacheAdapterProvider();
|
|
482
550
|
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(testEntityConfiguration);
|
|
483
551
|
const entityCache = new ReadThroughEntityCache(testEntityConfiguration, cacheAdapter);
|
|
@@ -490,7 +558,13 @@ describe(EntityDataManager, () => {
|
|
|
490
558
|
);
|
|
491
559
|
const queryContext = new StubQueryContextProvider().getQueryContext();
|
|
492
560
|
|
|
493
|
-
|
|
561
|
+
// make call to loadManyByFieldEqualingAsync to populate cache and dataloader, ensure metrics are recorded
|
|
562
|
+
// for dataloader, cache, and database
|
|
563
|
+
await entityDataManager.loadManyEqualingAsync(
|
|
564
|
+
queryContext,
|
|
565
|
+
new SingleFieldHolder('testIndexedField'),
|
|
566
|
+
[new SingleFieldValueHolder('unique1')],
|
|
567
|
+
);
|
|
494
568
|
verify(
|
|
495
569
|
metricsAdapterMock.logDataManagerLoadEvent(
|
|
496
570
|
objectContaining({
|
|
@@ -500,33 +574,84 @@ describe(EntityDataManager, () => {
|
|
|
500
574
|
}),
|
|
501
575
|
),
|
|
502
576
|
).once();
|
|
577
|
+
verify(metricsAdapterMock.incrementDataManagerLoadCount(anything())).thrice();
|
|
578
|
+
verify(
|
|
579
|
+
metricsAdapterMock.incrementDataManagerLoadCount(
|
|
580
|
+
deepEqual({
|
|
581
|
+
type: IncrementLoadCountEventType.DATALOADER,
|
|
582
|
+
fieldValueCount: 1,
|
|
583
|
+
entityClassName: TestEntity.name,
|
|
584
|
+
loadType: EntityLoadMethodType.SINGLE,
|
|
585
|
+
}),
|
|
586
|
+
),
|
|
587
|
+
).once();
|
|
588
|
+
verify(
|
|
589
|
+
metricsAdapterMock.incrementDataManagerLoadCount(
|
|
590
|
+
deepEqual({
|
|
591
|
+
type: IncrementLoadCountEventType.CACHE,
|
|
592
|
+
fieldValueCount: 1,
|
|
593
|
+
entityClassName: TestEntity.name,
|
|
594
|
+
loadType: EntityLoadMethodType.SINGLE,
|
|
595
|
+
}),
|
|
596
|
+
),
|
|
597
|
+
).once();
|
|
598
|
+
verify(
|
|
599
|
+
metricsAdapterMock.incrementDataManagerLoadCount(
|
|
600
|
+
deepEqual({
|
|
601
|
+
type: IncrementLoadCountEventType.DATABASE,
|
|
602
|
+
fieldValueCount: 1,
|
|
603
|
+
entityClassName: TestEntity.name,
|
|
604
|
+
loadType: EntityLoadMethodType.SINGLE,
|
|
605
|
+
}),
|
|
606
|
+
),
|
|
607
|
+
).once();
|
|
503
608
|
|
|
504
|
-
|
|
609
|
+
resetCalls(metricsAdapterMock);
|
|
610
|
+
|
|
611
|
+
// make second call to loadManyByFieldEqualingAsync, ensure metrics are only recorded for dataloader since
|
|
612
|
+
// entity is in local dataloader
|
|
613
|
+
await entityDataManager.loadManyEqualingAsync(
|
|
505
614
|
queryContext,
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
fieldName: 'customIdField',
|
|
509
|
-
fieldValue: '1',
|
|
510
|
-
},
|
|
511
|
-
],
|
|
512
|
-
{},
|
|
615
|
+
new SingleFieldHolder('testIndexedField'),
|
|
616
|
+
[new SingleFieldValueHolder('unique1')],
|
|
513
617
|
);
|
|
618
|
+
verify(metricsAdapterMock.incrementDataManagerLoadCount(anything())).once();
|
|
514
619
|
verify(
|
|
515
|
-
metricsAdapterMock.
|
|
516
|
-
|
|
517
|
-
type:
|
|
620
|
+
metricsAdapterMock.incrementDataManagerLoadCount(
|
|
621
|
+
deepEqual({
|
|
622
|
+
type: IncrementLoadCountEventType.DATALOADER,
|
|
623
|
+
fieldValueCount: 1,
|
|
518
624
|
entityClassName: TestEntity.name,
|
|
519
|
-
|
|
625
|
+
loadType: EntityLoadMethodType.SINGLE,
|
|
520
626
|
}),
|
|
521
627
|
),
|
|
522
628
|
).once();
|
|
523
629
|
|
|
630
|
+
resetCalls(metricsAdapterMock);
|
|
631
|
+
|
|
632
|
+
// make third call in new data manager but query two keys, ensure only one of the keys is fetched
|
|
633
|
+
// from the database and the other is fetched from the cache
|
|
634
|
+
const entityCache2 = new ReadThroughEntityCache(testEntityConfiguration, cacheAdapter);
|
|
635
|
+
const entityDataManager2 = new EntityDataManager(
|
|
636
|
+
databaseAdapter,
|
|
637
|
+
entityCache2,
|
|
638
|
+
new StubQueryContextProvider(),
|
|
639
|
+
metricsAdapter,
|
|
640
|
+
TestEntity.name,
|
|
641
|
+
);
|
|
642
|
+
await entityDataManager2.loadManyEqualingAsync(
|
|
643
|
+
queryContext,
|
|
644
|
+
new SingleFieldHolder('testIndexedField'),
|
|
645
|
+
[new SingleFieldValueHolder('unique1'), new SingleFieldValueHolder('unique2')],
|
|
646
|
+
);
|
|
647
|
+
verify(metricsAdapterMock.incrementDataManagerLoadCount(anything())).thrice();
|
|
524
648
|
verify(
|
|
525
649
|
metricsAdapterMock.incrementDataManagerLoadCount(
|
|
526
650
|
deepEqual({
|
|
527
651
|
type: IncrementLoadCountEventType.DATALOADER,
|
|
528
|
-
fieldValueCount:
|
|
652
|
+
fieldValueCount: 2,
|
|
529
653
|
entityClassName: TestEntity.name,
|
|
654
|
+
loadType: EntityLoadMethodType.SINGLE,
|
|
530
655
|
}),
|
|
531
656
|
),
|
|
532
657
|
).once();
|
|
@@ -534,8 +659,9 @@ describe(EntityDataManager, () => {
|
|
|
534
659
|
metricsAdapterMock.incrementDataManagerLoadCount(
|
|
535
660
|
deepEqual({
|
|
536
661
|
type: IncrementLoadCountEventType.CACHE,
|
|
537
|
-
fieldValueCount:
|
|
662
|
+
fieldValueCount: 2,
|
|
538
663
|
entityClassName: TestEntity.name,
|
|
664
|
+
loadType: EntityLoadMethodType.SINGLE,
|
|
539
665
|
}),
|
|
540
666
|
),
|
|
541
667
|
).once();
|
|
@@ -545,6 +671,29 @@ describe(EntityDataManager, () => {
|
|
|
545
671
|
type: IncrementLoadCountEventType.DATABASE,
|
|
546
672
|
fieldValueCount: 1,
|
|
547
673
|
entityClassName: TestEntity.name,
|
|
674
|
+
loadType: EntityLoadMethodType.SINGLE,
|
|
675
|
+
}),
|
|
676
|
+
),
|
|
677
|
+
).once();
|
|
678
|
+
|
|
679
|
+
resetCalls(metricsAdapterMock);
|
|
680
|
+
|
|
681
|
+
await entityDataManager.loadManyByFieldEqualityConjunctionAsync(
|
|
682
|
+
queryContext,
|
|
683
|
+
[
|
|
684
|
+
{
|
|
685
|
+
fieldName: 'testIndexedField',
|
|
686
|
+
fieldValue: 'unique1',
|
|
687
|
+
},
|
|
688
|
+
],
|
|
689
|
+
{},
|
|
690
|
+
);
|
|
691
|
+
verify(
|
|
692
|
+
metricsAdapterMock.logDataManagerLoadEvent(
|
|
693
|
+
objectContaining({
|
|
694
|
+
type: EntityMetricsLoadType.LOAD_MANY_EQUALITY_CONJUNCTION,
|
|
695
|
+
entityClassName: TestEntity.name,
|
|
696
|
+
count: 1,
|
|
548
697
|
}),
|
|
549
698
|
),
|
|
550
699
|
).once();
|
|
@@ -574,13 +723,16 @@ describe(EntityDataManager, () => {
|
|
|
574
723
|
verify(metricsAdapterMock.incrementDataManagerLoadCount(anything())).never();
|
|
575
724
|
});
|
|
576
725
|
|
|
577
|
-
it('throws when a load-by value is null or undefined', async () => {
|
|
726
|
+
it('throws when a single value load-by value is null or undefined', async () => {
|
|
578
727
|
const objects = getObjects();
|
|
579
728
|
const dataStore = StubDatabaseAdapter.convertFieldObjectsToDataStore(
|
|
580
729
|
testEntityConfiguration,
|
|
581
730
|
objects,
|
|
582
731
|
);
|
|
583
|
-
const databaseAdapter = new StubDatabaseAdapter<TestFields>(
|
|
732
|
+
const databaseAdapter = new StubDatabaseAdapter<TestFields, 'customIdField'>(
|
|
733
|
+
testEntityConfiguration,
|
|
734
|
+
dataStore,
|
|
735
|
+
);
|
|
584
736
|
const cacheAdapterProvider = new NoCacheStubCacheAdapterProvider();
|
|
585
737
|
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(testEntityConfiguration);
|
|
586
738
|
const entityCache = new ReadThroughEntityCache(testEntityConfiguration, cacheAdapter);
|
|
@@ -594,13 +746,78 @@ describe(EntityDataManager, () => {
|
|
|
594
746
|
const queryContext = new StubQueryContextProvider().getQueryContext();
|
|
595
747
|
|
|
596
748
|
await expect(
|
|
597
|
-
entityDataManager.
|
|
749
|
+
entityDataManager.loadManyEqualingAsync(
|
|
750
|
+
queryContext,
|
|
751
|
+
new SingleFieldHolder('nullableField'),
|
|
752
|
+
[new SingleFieldValueHolder(null as any)],
|
|
753
|
+
),
|
|
598
754
|
).rejects.toThrowError('Invalid load: TestEntity (nullableField = null)');
|
|
599
755
|
|
|
600
756
|
await expect(
|
|
601
|
-
entityDataManager.
|
|
602
|
-
|
|
603
|
-
|
|
757
|
+
entityDataManager.loadManyEqualingAsync(
|
|
758
|
+
queryContext,
|
|
759
|
+
new SingleFieldHolder('nullableField'),
|
|
760
|
+
[new SingleFieldValueHolder(undefined as any)],
|
|
761
|
+
),
|
|
604
762
|
).rejects.toThrowError('Invalid load: TestEntity (nullableField = undefined)');
|
|
605
763
|
});
|
|
764
|
+
|
|
765
|
+
it('throws when a composite value load-by value is null or undefined', async () => {
|
|
766
|
+
const objects = getObjects();
|
|
767
|
+
const dataStore = StubDatabaseAdapter.convertFieldObjectsToDataStore(
|
|
768
|
+
testEntityConfiguration,
|
|
769
|
+
objects,
|
|
770
|
+
);
|
|
771
|
+
const databaseAdapter = new StubDatabaseAdapter<TestFields, 'customIdField'>(
|
|
772
|
+
testEntityConfiguration,
|
|
773
|
+
dataStore,
|
|
774
|
+
);
|
|
775
|
+
const cacheAdapterProvider = new NoCacheStubCacheAdapterProvider();
|
|
776
|
+
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(testEntityConfiguration);
|
|
777
|
+
const entityCache = new ReadThroughEntityCache(testEntityConfiguration, cacheAdapter);
|
|
778
|
+
const entityDataManager = new EntityDataManager(
|
|
779
|
+
databaseAdapter,
|
|
780
|
+
entityCache,
|
|
781
|
+
new StubQueryContextProvider(),
|
|
782
|
+
new NoOpEntityMetricsAdapter(),
|
|
783
|
+
TestEntity.name,
|
|
784
|
+
);
|
|
785
|
+
const queryContext = new StubQueryContextProvider().getQueryContext();
|
|
786
|
+
|
|
787
|
+
await expect(
|
|
788
|
+
entityDataManager.loadManyEqualingAsync(
|
|
789
|
+
queryContext,
|
|
790
|
+
new CompositeFieldHolder<TestFields, 'customIdField'>([
|
|
791
|
+
'nullableField',
|
|
792
|
+
'testIndexedField',
|
|
793
|
+
]),
|
|
794
|
+
[
|
|
795
|
+
new CompositeFieldValueHolder({
|
|
796
|
+
nullableField: null as any,
|
|
797
|
+
testIndexedField: 'unique1',
|
|
798
|
+
}),
|
|
799
|
+
],
|
|
800
|
+
),
|
|
801
|
+
).rejects.toThrowError(
|
|
802
|
+
'Invalid load: TestEntity (nullableField,testIndexedField = CompositeFieldValue(nullableField=null,testIndexedField=unique1))',
|
|
803
|
+
);
|
|
804
|
+
|
|
805
|
+
await expect(
|
|
806
|
+
entityDataManager.loadManyEqualingAsync(
|
|
807
|
+
queryContext,
|
|
808
|
+
new CompositeFieldHolder<TestFields, 'customIdField'>([
|
|
809
|
+
'nullableField',
|
|
810
|
+
'testIndexedField',
|
|
811
|
+
]),
|
|
812
|
+
[
|
|
813
|
+
new CompositeFieldValueHolder({
|
|
814
|
+
nullableField: undefined as any,
|
|
815
|
+
testIndexedField: 'unique1',
|
|
816
|
+
}),
|
|
817
|
+
],
|
|
818
|
+
),
|
|
819
|
+
).rejects.toThrowError(
|
|
820
|
+
'Invalid load: TestEntity (nullableField,testIndexedField = CompositeFieldValue(nullableField=undefined,testIndexedField=unique1))',
|
|
821
|
+
);
|
|
822
|
+
});
|
|
606
823
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import EntityConfiguration from '../../EntityConfiguration';
|
|
2
|
-
import {
|
|
2
|
+
import { StringField, UUIDField } from '../../EntityFields';
|
|
3
3
|
import {
|
|
4
4
|
getDatabaseFieldForEntityField,
|
|
5
5
|
transformDatabaseObjectToFields,
|
|
@@ -16,12 +16,13 @@ type BlahT = {
|
|
|
16
16
|
transformWrite: string;
|
|
17
17
|
};
|
|
18
18
|
|
|
19
|
-
const blahEntityConfiguration = new EntityConfiguration<BlahT>({
|
|
19
|
+
const blahEntityConfiguration = new EntityConfiguration<BlahT, 'id'>({
|
|
20
20
|
idField: 'id',
|
|
21
21
|
tableName: 'blah_table',
|
|
22
22
|
schema: {
|
|
23
23
|
id: new UUIDField({
|
|
24
24
|
columnName: 'id',
|
|
25
|
+
cache: false,
|
|
25
26
|
}),
|
|
26
27
|
cacheable: new StringField({
|
|
27
28
|
columnName: 'cacheable',
|