@expo/entity 0.45.0 → 0.46.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 → src/AuthorizationResultBasedEntityAssociationLoader.d.ts} +4 -4
- package/build/{AuthorizationResultBasedEntityAssociationLoader.js → src/AuthorizationResultBasedEntityAssociationLoader.js} +2 -1
- package/build/src/AuthorizationResultBasedEntityAssociationLoader.js.map +1 -0
- package/build/{AuthorizationResultBasedEntityLoader.d.ts → src/AuthorizationResultBasedEntityLoader.d.ts} +8 -8
- package/build/{AuthorizationResultBasedEntityLoader.js → src/AuthorizationResultBasedEntityLoader.js} +6 -5
- package/build/src/AuthorizationResultBasedEntityLoader.js.map +1 -0
- package/build/{AuthorizationResultBasedEntityMutator.d.ts → src/AuthorizationResultBasedEntityMutator.d.ts} +11 -11
- package/build/{AuthorizationResultBasedEntityMutator.js → src/AuthorizationResultBasedEntityMutator.js} +2 -2
- package/build/src/AuthorizationResultBasedEntityMutator.js.map +1 -0
- package/build/{ComposedEntityCacheAdapter.d.ts → src/ComposedEntityCacheAdapter.d.ts} +2 -2
- package/build/{ComposedEntityCacheAdapter.js → src/ComposedEntityCacheAdapter.js} +2 -1
- package/build/src/ComposedEntityCacheAdapter.js.map +1 -0
- package/build/{ComposedSecondaryEntityCache.d.ts → src/ComposedSecondaryEntityCache.d.ts} +1 -1
- package/build/{ComposedSecondaryEntityCache.js → src/ComposedSecondaryEntityCache.js} +2 -1
- package/build/src/ComposedSecondaryEntityCache.js.map +1 -0
- package/build/{EnforcingEntityAssociationLoader.d.ts → src/EnforcingEntityAssociationLoader.d.ts} +5 -5
- package/build/{EnforcingEntityAssociationLoader.js → src/EnforcingEntityAssociationLoader.js} +2 -1
- package/build/src/EnforcingEntityAssociationLoader.js.map +1 -0
- package/build/{EnforcingEntityCreator.d.ts → src/EnforcingEntityCreator.d.ts} +4 -4
- package/build/{EnforcingEntityCreator.js → src/EnforcingEntityCreator.js} +2 -1
- package/build/src/EnforcingEntityCreator.js.map +1 -0
- package/build/{EnforcingEntityDeleter.d.ts → src/EnforcingEntityDeleter.d.ts} +4 -4
- package/build/{EnforcingEntityDeleter.js → src/EnforcingEntityDeleter.js} +2 -1
- package/build/src/EnforcingEntityDeleter.js.map +1 -0
- package/build/{EnforcingEntityLoader.d.ts → src/EnforcingEntityLoader.d.ts} +5 -5
- package/build/{EnforcingEntityLoader.js → src/EnforcingEntityLoader.js} +2 -1
- package/build/src/EnforcingEntityLoader.js.map +1 -0
- package/build/{EnforcingEntityUpdater.d.ts → src/EnforcingEntityUpdater.d.ts} +4 -4
- package/build/{EnforcingEntityUpdater.js → src/EnforcingEntityUpdater.js} +2 -1
- package/build/src/EnforcingEntityUpdater.js.map +1 -0
- package/build/{Entity.d.ts → src/Entity.d.ts} +7 -7
- package/build/{Entity.js → src/Entity.js} +13 -15
- package/build/src/Entity.js.map +1 -0
- package/build/{EntityAssociationLoader.d.ts → src/EntityAssociationLoader.d.ts} +5 -5
- package/build/{EntityAssociationLoader.js → src/EntityAssociationLoader.js} +6 -8
- package/build/src/EntityAssociationLoader.js.map +1 -0
- package/build/{EntityCompanion.d.ts → src/EntityCompanion.d.ts} +10 -10
- package/build/{EntityCompanion.js → src/EntityCompanion.js} +6 -8
- package/build/src/EntityCompanion.js.map +1 -0
- package/build/{EntityCompanionProvider.d.ts → src/EntityCompanionProvider.d.ts} +12 -12
- package/build/{EntityCompanionProvider.js → src/EntityCompanionProvider.js} +6 -5
- package/build/src/EntityCompanionProvider.js.map +1 -0
- package/build/{EntityConfiguration.d.ts → src/EntityConfiguration.d.ts} +2 -2
- package/build/{EntityConfiguration.js → src/EntityConfiguration.js} +2 -2
- package/build/src/EntityConfiguration.js.map +1 -0
- package/build/{EntityCreator.d.ts → src/EntityCreator.d.ts} +5 -5
- package/build/{EntityCreator.js → src/EntityCreator.js} +4 -6
- package/build/{EntityCreator.js.map → src/EntityCreator.js.map} +1 -1
- package/build/{EntityDatabaseAdapter.d.ts → src/EntityDatabaseAdapter.d.ts} +2 -2
- package/build/{EntityDatabaseAdapter.js → src/EntityDatabaseAdapter.js} +2 -2
- package/build/src/EntityDatabaseAdapter.js.map +1 -0
- package/build/{EntityDeleter.d.ts → src/EntityDeleter.d.ts} +5 -5
- package/build/{EntityDeleter.js → src/EntityDeleter.js} +4 -6
- package/build/{EntityDeleter.js.map → src/EntityDeleter.js.map} +1 -1
- package/build/{EntityFieldDefinition.d.ts → src/EntityFieldDefinition.d.ts} +3 -3
- package/build/src/EntityFieldDefinition.js.map +1 -0
- package/build/src/EntityFields.js.map +1 -0
- package/build/{EntityLoader.d.ts → src/EntityLoader.d.ts} +7 -7
- package/build/{EntityLoader.js → src/EntityLoader.js} +4 -6
- package/build/{EntityLoader.js.map → src/EntityLoader.js.map} +1 -1
- package/build/{EntityLoaderFactory.d.ts → src/EntityLoaderFactory.d.ts} +8 -8
- package/build/src/EntityLoaderFactory.js +29 -0
- package/build/src/EntityLoaderFactory.js.map +1 -0
- package/build/{EntityLoaderUtils.d.ts → src/EntityLoaderUtils.d.ts} +7 -7
- package/build/{EntityLoaderUtils.js → src/EntityLoaderUtils.js} +2 -1
- package/build/src/EntityLoaderUtils.js.map +1 -0
- package/build/{EntityMutationInfo.d.ts → src/EntityMutationInfo.d.ts} +2 -2
- package/build/src/EntityMutationInfo.js.map +1 -0
- package/build/{EntityMutationTriggerConfiguration.d.ts → src/EntityMutationTriggerConfiguration.d.ts} +3 -3
- package/build/src/EntityMutationTriggerConfiguration.js.map +1 -0
- package/build/{EntityMutationValidator.d.ts → src/EntityMutationValidator.d.ts} +3 -3
- package/build/{EntityMutationValidator.js → src/EntityMutationValidator.js} +2 -1
- package/build/src/EntityMutationValidator.js.map +1 -0
- package/build/{EntityMutatorFactory.d.ts → src/EntityMutatorFactory.d.ts} +12 -12
- package/build/{EntityMutatorFactory.js → src/EntityMutatorFactory.js} +2 -1
- package/build/src/EntityMutatorFactory.js.map +1 -0
- package/build/{EntityPrivacyPolicy.d.ts → src/EntityPrivacyPolicy.d.ts} +6 -6
- package/build/{EntityPrivacyPolicy.js → src/EntityPrivacyPolicy.js} +8 -11
- package/build/{EntityPrivacyPolicy.js.map → src/EntityPrivacyPolicy.js.map} +1 -1
- package/build/{EntityQueryContext.d.ts → src/EntityQueryContext.d.ts} +1 -1
- package/build/src/EntityQueryContext.js.map +1 -0
- package/build/{EntityQueryContextProvider.d.ts → src/EntityQueryContextProvider.d.ts} +2 -2
- package/build/{EntityQueryContextProvider.js → src/EntityQueryContextProvider.js} +2 -1
- package/build/src/EntityQueryContextProvider.js.map +1 -0
- package/build/{EntitySecondaryCacheLoader.d.ts → src/EntitySecondaryCacheLoader.d.ts} +5 -5
- package/build/{EntitySecondaryCacheLoader.js → src/EntitySecondaryCacheLoader.js} +2 -1
- package/build/src/EntitySecondaryCacheLoader.js.map +1 -0
- package/build/{EntityUpdater.d.ts → src/EntityUpdater.d.ts} +5 -5
- package/build/{EntityUpdater.js → src/EntityUpdater.js} +4 -6
- package/build/{EntityUpdater.js.map → src/EntityUpdater.js.map} +1 -1
- package/build/{GenericEntityCacheAdapter.d.ts → src/GenericEntityCacheAdapter.d.ts} +3 -3
- package/build/{GenericEntityCacheAdapter.js → src/GenericEntityCacheAdapter.js} +2 -1
- package/build/src/GenericEntityCacheAdapter.js.map +1 -0
- package/build/{GenericSecondaryEntityCache.d.ts → src/GenericSecondaryEntityCache.d.ts} +2 -2
- package/build/{GenericSecondaryEntityCache.js → src/GenericSecondaryEntityCache.js} +2 -1
- package/build/src/GenericSecondaryEntityCache.js.map +1 -0
- package/build/{IEntityCacheAdapter.d.ts → src/IEntityCacheAdapter.d.ts} +1 -1
- package/build/src/IEntityCacheAdapter.js.map +1 -0
- package/build/{IEntityCacheAdapterProvider.d.ts → src/IEntityCacheAdapterProvider.d.ts} +3 -3
- package/build/src/IEntityCacheAdapterProvider.js.map +1 -0
- package/build/{IEntityDatabaseAdapterProvider.d.ts → src/IEntityDatabaseAdapterProvider.d.ts} +3 -3
- package/build/src/IEntityDatabaseAdapterProvider.js.map +1 -0
- package/build/{IEntityGenericCacher.d.ts → src/IEntityGenericCacher.d.ts} +1 -1
- package/build/src/IEntityGenericCacher.js.map +1 -0
- package/build/{ReadonlyEntity.d.ts → src/ReadonlyEntity.d.ts} +8 -8
- package/build/{ReadonlyEntity.js → src/ReadonlyEntity.js} +9 -8
- package/build/src/ReadonlyEntity.js.map +1 -0
- package/build/{ViewerContext.d.ts → src/ViewerContext.d.ts} +5 -5
- package/build/{ViewerContext.js → src/ViewerContext.js} +4 -6
- package/build/{ViewerContext.js.map → src/ViewerContext.js.map} +1 -1
- package/build/{ViewerScopedEntityCompanion.d.ts → src/ViewerScopedEntityCompanion.d.ts} +9 -9
- package/build/{ViewerScopedEntityCompanion.js → src/ViewerScopedEntityCompanion.js} +6 -8
- package/build/{ViewerScopedEntityCompanion.js.map → src/ViewerScopedEntityCompanion.js.map} +1 -1
- package/build/{ViewerScopedEntityCompanionProvider.d.ts → src/ViewerScopedEntityCompanionProvider.d.ts} +6 -6
- package/build/{ViewerScopedEntityCompanionProvider.js → src/ViewerScopedEntityCompanionProvider.js} +4 -6
- package/build/src/ViewerScopedEntityCompanionProvider.js.map +1 -0
- package/build/{ViewerScopedEntityLoaderFactory.d.ts → src/ViewerScopedEntityLoaderFactory.d.ts} +6 -6
- package/build/{ViewerScopedEntityLoaderFactory.js → src/ViewerScopedEntityLoaderFactory.js} +2 -1
- package/build/src/ViewerScopedEntityLoaderFactory.js.map +1 -0
- package/build/{ViewerScopedEntityMutatorFactory.d.ts → src/ViewerScopedEntityMutatorFactory.d.ts} +6 -6
- package/build/{ViewerScopedEntityMutatorFactory.js → src/ViewerScopedEntityMutatorFactory.js} +2 -1
- package/build/src/ViewerScopedEntityMutatorFactory.js.map +1 -0
- package/build/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.d.ts +1 -0
- package/build/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js +240 -0
- package/build/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js.map +1 -0
- package/build/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.d.ts +26 -0
- package/build/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js +109 -0
- package/build/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js.map +1 -0
- package/build/src/__tests__/AuthorizationResultBasedEntityLoader-test.d.ts +1 -0
- package/build/src/__tests__/AuthorizationResultBasedEntityLoader-test.js +590 -0
- package/build/src/__tests__/AuthorizationResultBasedEntityLoader-test.js.map +1 -0
- package/build/src/__tests__/ComposedCacheAdapter-test.d.ts +1 -0
- package/build/src/__tests__/ComposedCacheAdapter-test.js +259 -0
- package/build/src/__tests__/ComposedCacheAdapter-test.js.map +1 -0
- package/build/src/__tests__/ComposedSecondaryEntityCache-test.d.ts +1 -0
- package/build/src/__tests__/ComposedSecondaryEntityCache-test.js +67 -0
- package/build/src/__tests__/ComposedSecondaryEntityCache-test.js.map +1 -0
- package/build/src/__tests__/EnforcingEntityAssociationLoader-test.d.ts +1 -0
- package/build/src/__tests__/EnforcingEntityAssociationLoader-test.js +113 -0
- package/build/src/__tests__/EnforcingEntityAssociationLoader-test.js.map +1 -0
- package/build/src/__tests__/EnforcingEntityLoader-test.d.ts +1 -0
- package/build/src/__tests__/EnforcingEntityLoader-test.js +316 -0
- package/build/src/__tests__/EnforcingEntityLoader-test.js.map +1 -0
- package/build/src/__tests__/Entity-test.d.ts +1 -0
- package/build/src/__tests__/Entity-test.js +92 -0
- package/build/src/__tests__/Entity-test.js.map +1 -0
- package/build/src/__tests__/EntityAssociationLoader-test.d.ts +1 -0
- package/build/src/__tests__/EntityAssociationLoader-test.js +28 -0
- package/build/src/__tests__/EntityAssociationLoader-test.js.map +1 -0
- package/build/src/__tests__/EntityCommonUseCases-test.d.ts +1 -0
- package/build/src/__tests__/EntityCommonUseCases-test.js +111 -0
- package/build/src/__tests__/EntityCommonUseCases-test.js.map +1 -0
- package/build/src/__tests__/EntityCompanion-test.d.ts +1 -0
- package/build/src/__tests__/EntityCompanion-test.js +42 -0
- package/build/src/__tests__/EntityCompanion-test.js.map +1 -0
- package/build/src/__tests__/EntityCompanionProvider-test.d.ts +1 -0
- package/build/src/__tests__/EntityCompanionProvider-test.js +53 -0
- package/build/src/__tests__/EntityCompanionProvider-test.js.map +1 -0
- package/build/src/__tests__/EntityConfiguration-test.d.ts +1 -0
- package/build/src/__tests__/EntityConfiguration-test.js +164 -0
- package/build/src/__tests__/EntityConfiguration-test.js.map +1 -0
- package/build/src/__tests__/EntityDatabaseAdapter-test.d.ts +1 -0
- package/build/src/__tests__/EntityDatabaseAdapter-test.js +189 -0
- package/build/src/__tests__/EntityDatabaseAdapter-test.js.map +1 -0
- package/build/src/__tests__/EntityEdges-test.d.ts +1 -0
- package/build/src/__tests__/EntityEdges-test.js +680 -0
- package/build/src/__tests__/EntityEdges-test.js.map +1 -0
- package/build/src/__tests__/EntityFields-test.d.ts +1 -0
- package/build/src/__tests__/EntityFields-test.js +61 -0
- package/build/src/__tests__/EntityFields-test.js.map +1 -0
- package/build/src/__tests__/EntityLoader-test.d.ts +1 -0
- package/build/src/__tests__/EntityLoader-test.js +34 -0
- package/build/src/__tests__/EntityLoader-test.js.map +1 -0
- package/build/src/__tests__/EntityMutator-MutationCacheConsistency-test.d.ts +1 -0
- package/build/src/__tests__/EntityMutator-MutationCacheConsistency-test.js +71 -0
- package/build/src/__tests__/EntityMutator-MutationCacheConsistency-test.js.map +1 -0
- package/build/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.d.ts +1 -0
- package/build/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.js +54 -0
- package/build/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.js.map +1 -0
- package/build/src/__tests__/EntityMutator-test.d.ts +1 -0
- package/build/src/__tests__/EntityMutator-test.js +721 -0
- package/build/src/__tests__/EntityMutator-test.js.map +1 -0
- package/build/src/__tests__/EntityPrivacyPolicy-test.d.ts +1 -0
- package/build/src/__tests__/EntityPrivacyPolicy-test.js +429 -0
- package/build/src/__tests__/EntityPrivacyPolicy-test.js.map +1 -0
- package/build/src/__tests__/EntityQueryContext-test.d.ts +1 -0
- package/build/src/__tests__/EntityQueryContext-test.js +181 -0
- package/build/src/__tests__/EntityQueryContext-test.js.map +1 -0
- package/build/src/__tests__/EntitySecondaryCacheLoader-test.d.ts +1 -0
- package/build/src/__tests__/EntitySecondaryCacheLoader-test.js +58 -0
- package/build/src/__tests__/EntitySecondaryCacheLoader-test.js.map +1 -0
- package/build/src/__tests__/EntitySelfReferentialEdges-test.d.ts +1 -0
- package/build/src/__tests__/EntitySelfReferentialEdges-test.js +196 -0
- package/build/src/__tests__/EntitySelfReferentialEdges-test.js.map +1 -0
- package/build/src/__tests__/GenericEntityCacheAdapter-test.d.ts +1 -0
- package/build/src/__tests__/GenericEntityCacheAdapter-test.js +95 -0
- package/build/src/__tests__/GenericEntityCacheAdapter-test.js.map +1 -0
- package/build/src/__tests__/ReadonlyEntity-test.d.ts +1 -0
- package/build/src/__tests__/ReadonlyEntity-test.js +209 -0
- package/build/src/__tests__/ReadonlyEntity-test.js.map +1 -0
- package/build/src/__tests__/ViewerContext-test.d.ts +1 -0
- package/build/src/__tests__/ViewerContext-test.js +28 -0
- package/build/src/__tests__/ViewerContext-test.js.map +1 -0
- package/build/src/__tests__/ViewerScopedEntityCompanion-test.d.ts +1 -0
- package/build/src/__tests__/ViewerScopedEntityCompanion-test.js +18 -0
- package/build/src/__tests__/ViewerScopedEntityCompanion-test.js.map +1 -0
- package/build/src/__tests__/ViewerScopedEntityCompanionProvider-test.d.ts +1 -0
- package/build/src/__tests__/ViewerScopedEntityCompanionProvider-test.js +18 -0
- package/build/src/__tests__/ViewerScopedEntityCompanionProvider-test.js.map +1 -0
- package/build/src/__tests__/ViewerScopedEntityLoaderFactory-test.d.ts +1 -0
- package/build/src/__tests__/ViewerScopedEntityLoaderFactory-test.js +21 -0
- package/build/src/__tests__/ViewerScopedEntityLoaderFactory-test.js.map +1 -0
- package/build/src/__tests__/ViewerScopedEntityMutatorFactory-test.d.ts +1 -0
- package/build/src/__tests__/ViewerScopedEntityMutatorFactory-test.js +20 -0
- package/build/src/__tests__/ViewerScopedEntityMutatorFactory-test.js.map +1 -0
- package/build/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.d.ts +1 -0
- package/build/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +121 -0
- package/build/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +1 -0
- package/build/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.d.ts +1 -0
- package/build/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +119 -0
- package/build/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js.map +1 -0
- package/build/src/__tests__/entityUtils-test.d.ts +1 -0
- package/build/src/__tests__/entityUtils-test.js +88 -0
- package/build/src/__tests__/entityUtils-test.js.map +1 -0
- package/build/src/entityUtils.js.map +1 -0
- package/build/{errors → src/errors}/EntityCacheAdapterError.d.ts +2 -2
- package/build/src/errors/EntityCacheAdapterError.js +13 -0
- package/build/src/errors/EntityCacheAdapterError.js.map +1 -0
- package/build/{errors → src/errors}/EntityDatabaseAdapterError.d.ts +2 -2
- package/build/{errors → src/errors}/EntityDatabaseAdapterError.js +4 -37
- package/build/src/errors/EntityDatabaseAdapterError.js.map +1 -0
- package/build/{errors → src/errors}/EntityError.d.ts +1 -1
- package/build/{errors → src/errors}/EntityError.js +2 -2
- package/build/src/errors/EntityError.js.map +1 -0
- package/build/{errors → src/errors}/EntityInvalidFieldValueError.d.ts +5 -5
- package/build/src/errors/EntityInvalidFieldValueError.js +13 -0
- package/build/src/errors/EntityInvalidFieldValueError.js.map +1 -0
- package/build/{errors → src/errors}/EntityNotAuthorizedError.d.ts +4 -4
- package/build/src/errors/EntityNotAuthorizedError.js +16 -0
- package/build/src/errors/EntityNotAuthorizedError.js.map +1 -0
- package/build/{errors → src/errors}/EntityNotFoundError.d.ts +5 -5
- package/build/src/errors/EntityNotFoundError.js +18 -0
- package/build/src/errors/EntityNotFoundError.js.map +1 -0
- package/build/src/errors/__tests__/EntityDatabaseAdapterError-test.d.ts +1 -0
- package/build/src/errors/__tests__/EntityDatabaseAdapterError-test.js +21 -0
- package/build/src/errors/__tests__/EntityDatabaseAdapterError-test.js.map +1 -0
- package/build/src/index.d.ts +76 -0
- package/build/src/index.js +94 -0
- package/build/src/index.js.map +1 -0
- package/build/{internal → src/internal}/CompositeFieldHolder.d.ts +1 -1
- package/build/src/internal/CompositeFieldHolder.js.map +1 -0
- package/build/src/internal/CompositeFieldValueMap.js.map +1 -0
- package/build/{internal → src/internal}/EntityDataManager.d.ts +5 -5
- package/build/{internal → src/internal}/EntityDataManager.js +2 -1
- package/build/src/internal/EntityDataManager.js.map +1 -0
- package/build/{internal → src/internal}/EntityFieldTransformationUtils.d.ts +1 -1
- package/build/src/internal/EntityFieldTransformationUtils.js.map +1 -0
- package/build/{internal → src/internal}/EntityLoadInterfaces.d.ts +1 -1
- package/build/src/internal/EntityLoadInterfaces.js.map +1 -0
- package/build/{internal → src/internal}/EntityTableDataCoordinator.d.ts +9 -9
- package/build/{internal → src/internal}/EntityTableDataCoordinator.js +5 -7
- package/build/{internal → src/internal}/EntityTableDataCoordinator.js.map +1 -1
- package/build/{internal → src/internal}/ReadThroughEntityCache.d.ts +3 -3
- package/build/{internal → src/internal}/ReadThroughEntityCache.js +2 -2
- package/build/src/internal/ReadThroughEntityCache.js.map +1 -0
- package/build/{internal → src/internal}/SingleFieldHolder.d.ts +1 -1
- package/build/src/internal/SingleFieldHolder.js.map +1 -0
- package/build/src/internal/__tests__/CompositeFieldHolder-test.d.ts +1 -0
- package/build/src/internal/__tests__/CompositeFieldHolder-test.js +25 -0
- package/build/src/internal/__tests__/CompositeFieldHolder-test.js.map +1 -0
- package/build/src/internal/__tests__/CompositeFieldValueMap-test.d.ts +1 -0
- package/build/src/internal/__tests__/CompositeFieldValueMap-test.js +40 -0
- package/build/src/internal/__tests__/CompositeFieldValueMap-test.js.map +1 -0
- package/build/src/internal/__tests__/EntityDataManager-test.d.ts +1 -0
- package/build/src/internal/__tests__/EntityDataManager-test.js +666 -0
- package/build/src/internal/__tests__/EntityDataManager-test.js.map +1 -0
- package/build/src/internal/__tests__/EntityFieldTransformationUtils-test.d.ts +1 -0
- package/build/src/internal/__tests__/EntityFieldTransformationUtils-test.js +135 -0
- package/build/src/internal/__tests__/EntityFieldTransformationUtils-test.js.map +1 -0
- package/build/src/internal/__tests__/ReadThroughEntityCache-test.d.ts +1 -0
- package/build/src/internal/__tests__/ReadThroughEntityCache-test.js +217 -0
- package/build/src/internal/__tests__/ReadThroughEntityCache-test.js.map +1 -0
- package/build/{metrics → src/metrics}/EntityMetricsUtils.d.ts +1 -1
- package/build/src/metrics/EntityMetricsUtils.js.map +1 -0
- package/build/{metrics → src/metrics}/IEntityMetricsAdapter.d.ts +1 -1
- package/build/src/metrics/IEntityMetricsAdapter.js.map +1 -0
- package/build/{metrics → src/metrics}/NoOpEntityMetricsAdapter.d.ts +2 -2
- package/build/{metrics → src/metrics}/NoOpEntityMetricsAdapter.js +2 -1
- package/build/src/metrics/NoOpEntityMetricsAdapter.js.map +1 -0
- package/build/{rules → src/rules}/AlwaysAllowPrivacyPolicyRule.d.ts +4 -4
- package/build/src/rules/AlwaysAllowPrivacyPolicyRule.js +14 -0
- package/build/src/rules/AlwaysAllowPrivacyPolicyRule.js.map +1 -0
- package/build/{rules → src/rules}/AlwaysDenyPrivacyPolicyRule.d.ts +4 -4
- package/build/src/rules/AlwaysDenyPrivacyPolicyRule.js +14 -0
- package/build/src/rules/AlwaysDenyPrivacyPolicyRule.js.map +1 -0
- package/build/{rules → src/rules}/AlwaysSkipPrivacyPolicyRule.d.ts +4 -4
- package/build/src/rules/AlwaysSkipPrivacyPolicyRule.js +14 -0
- package/build/src/rules/AlwaysSkipPrivacyPolicyRule.js.map +1 -0
- package/build/{rules → src/rules}/PrivacyPolicyRule.d.ts +3 -3
- package/build/{rules → src/rules}/PrivacyPolicyRule.js +2 -2
- package/build/src/rules/PrivacyPolicyRule.js.map +1 -0
- package/build/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.d.ts +1 -0
- package/build/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js +18 -0
- package/build/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js.map +1 -0
- package/build/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.d.ts +1 -0
- package/build/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js +18 -0
- package/build/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js.map +1 -0
- package/build/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.d.ts +1 -0
- package/build/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js +18 -0
- package/build/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js.map +1 -0
- package/build/{utils → src/utils}/EntityCreationUtils.d.ts +3 -3
- package/build/{utils → src/utils}/EntityCreationUtils.js +2 -5
- package/build/{utils → src/utils}/EntityCreationUtils.js.map +1 -1
- package/build/{utils → src/utils}/EntityPrivacyUtils.d.ts +4 -4
- package/build/{utils → src/utils}/EntityPrivacyUtils.js +4 -7
- package/build/{utils → src/utils}/EntityPrivacyUtils.js.map +1 -1
- package/build/src/utils/__testfixtures__/PrivacyPolicyRuleTestUtils.d.ts +28 -0
- package/build/src/utils/__testfixtures__/PrivacyPolicyRuleTestUtils.js +53 -0
- package/build/src/utils/__testfixtures__/PrivacyPolicyRuleTestUtils.js.map +1 -0
- package/build/src/utils/__testfixtures__/SimpleTestEntity.d.ts +20 -0
- package/build/src/utils/__testfixtures__/SimpleTestEntity.js +46 -0
- package/build/src/utils/__testfixtures__/SimpleTestEntity.js.map +1 -0
- package/build/src/utils/__testfixtures__/StubCacheAdapter.d.ts +29 -0
- package/build/src/utils/__testfixtures__/StubCacheAdapter.js +103 -0
- package/build/src/utils/__testfixtures__/StubCacheAdapter.js.map +1 -0
- package/build/src/utils/__testfixtures__/StubDatabaseAdapter.d.ts +26 -0
- package/build/src/utils/__testfixtures__/StubDatabaseAdapter.js +173 -0
- package/build/src/utils/__testfixtures__/StubDatabaseAdapter.js.map +1 -0
- package/build/src/utils/__testfixtures__/StubDatabaseAdapterProvider.d.ts +7 -0
- package/build/src/utils/__testfixtures__/StubDatabaseAdapterProvider.js +12 -0
- package/build/src/utils/__testfixtures__/StubDatabaseAdapterProvider.js.map +1 -0
- package/build/src/utils/__testfixtures__/StubQueryContextProvider.d.ts +7 -0
- package/build/src/utils/__testfixtures__/StubQueryContextProvider.js +17 -0
- package/build/src/utils/__testfixtures__/StubQueryContextProvider.js.map +1 -0
- package/build/src/utils/__testfixtures__/TSMockitoExtensions.d.ts +9 -0
- package/build/src/utils/__testfixtures__/TSMockitoExtensions.js +65 -0
- package/build/src/utils/__testfixtures__/TSMockitoExtensions.js.map +1 -0
- package/build/src/utils/__testfixtures__/TestEntity.d.ts +30 -0
- package/build/src/utils/__testfixtures__/TestEntity.js +96 -0
- package/build/src/utils/__testfixtures__/TestEntity.js.map +1 -0
- package/build/src/utils/__testfixtures__/TestEntity2.d.ts +20 -0
- package/build/src/utils/__testfixtures__/TestEntity2.js +49 -0
- package/build/src/utils/__testfixtures__/TestEntity2.js.map +1 -0
- package/build/src/utils/__testfixtures__/TestEntityWithMutationTriggers.d.ts +36 -0
- package/build/src/utils/__testfixtures__/TestEntityWithMutationTriggers.js +80 -0
- package/build/src/utils/__testfixtures__/TestEntityWithMutationTriggers.js.map +1 -0
- package/build/src/utils/__testfixtures__/TestViewerContext.d.ts +3 -0
- package/build/src/utils/__testfixtures__/TestViewerContext.js +8 -0
- package/build/src/utils/__testfixtures__/TestViewerContext.js.map +1 -0
- package/build/src/utils/__testfixtures__/createUnitTestEntityCompanionProvider.d.ts +7 -0
- package/build/src/utils/__testfixtures__/createUnitTestEntityCompanionProvider.js +33 -0
- package/build/src/utils/__testfixtures__/createUnitTestEntityCompanionProvider.js.map +1 -0
- package/build/src/utils/__testfixtures__/describeFieldTestCase.d.ts +2 -0
- package/build/src/utils/__testfixtures__/describeFieldTestCase.js +19 -0
- package/build/src/utils/__testfixtures__/describeFieldTestCase.js.map +1 -0
- package/build/src/utils/__tests__/EntityCreationUtils-test.d.ts +1 -0
- package/build/src/utils/__tests__/EntityCreationUtils-test.js +144 -0
- package/build/src/utils/__tests__/EntityCreationUtils-test.js.map +1 -0
- package/build/src/utils/__tests__/EntityPrivacyUtils-test.d.ts +1 -0
- package/build/src/utils/__tests__/EntityPrivacyUtils-test.js +460 -0
- package/build/src/utils/__tests__/EntityPrivacyUtils-test.js.map +1 -0
- package/build/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.d.ts +1 -0
- package/build/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js +180 -0
- package/build/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js.map +1 -0
- package/build/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.d.ts +1 -0
- package/build/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js +27 -0
- package/build/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js.map +1 -0
- package/build/src/utils/collections/SerializableKeyMap.js.map +1 -0
- package/build/src/utils/collections/__tests__/SerializableKeyMap-test.d.ts +5 -0
- package/build/src/utils/collections/__tests__/SerializableKeyMap-test.js +99 -0
- package/build/src/utils/collections/__tests__/SerializableKeyMap-test.js.map +1 -0
- package/build/src/utils/collections/__tests__/maps-test.d.ts +1 -0
- package/build/src/utils/collections/__tests__/maps-test.js +121 -0
- package/build/src/utils/collections/__tests__/maps-test.js.map +1 -0
- package/build/src/utils/collections/__tests__/sets-test.d.ts +1 -0
- package/build/src/utils/collections/__tests__/sets-test.js +19 -0
- package/build/src/utils/collections/__tests__/sets-test.js.map +1 -0
- package/build/src/utils/collections/maps.js.map +1 -0
- package/build/src/utils/collections/sets.js.map +1 -0
- package/build/{utils → src/utils}/mergeEntityMutationTriggerConfigurations.d.ts +3 -3
- package/build/src/utils/mergeEntityMutationTriggerConfigurations.js.map +1 -0
- package/build/tsconfig.tsbuildinfo +1 -0
- package/package.json +11 -23
- package/src/AuthorizationResultBasedEntityAssociationLoader.ts +4 -4
- package/src/AuthorizationResultBasedEntityLoader.ts +13 -12
- package/src/AuthorizationResultBasedEntityMutator.ts +15 -14
- package/src/ComposedEntityCacheAdapter.ts +3 -3
- package/src/ComposedSecondaryEntityCache.ts +1 -1
- package/src/EnforcingEntityAssociationLoader.ts +6 -5
- package/src/EnforcingEntityCreator.ts +4 -4
- package/src/EnforcingEntityDeleter.ts +4 -4
- package/src/EnforcingEntityLoader.ts +5 -5
- package/src/EnforcingEntityUpdater.ts +4 -4
- package/src/Entity.ts +10 -10
- package/src/EntityAssociationLoader.ts +5 -5
- package/src/EntityCompanion.ts +10 -10
- package/src/EntityCompanionProvider.ts +13 -13
- package/src/EntityConfiguration.ts +3 -3
- package/src/EntityCreator.ts +5 -5
- package/src/EntityDatabaseAdapter.ts +3 -3
- package/src/EntityDeleter.ts +5 -5
- package/src/EntityFieldDefinition.ts +3 -3
- package/src/EntityLoader.ts +7 -7
- package/src/EntityLoaderFactory.ts +9 -9
- package/src/EntityLoaderUtils.ts +7 -7
- package/src/EntityMutationInfo.ts +2 -2
- package/src/EntityMutationTriggerConfiguration.ts +3 -3
- package/src/EntityMutationValidator.ts +3 -3
- package/src/EntityMutatorFactory.ts +12 -12
- package/src/EntityPrivacyPolicy.ts +7 -6
- package/src/EntityQueryContext.ts +1 -1
- package/src/EntityQueryContextProvider.ts +3 -3
- package/src/EntitySecondaryCacheLoader.ts +5 -5
- package/src/EntityUpdater.ts +5 -5
- package/src/GenericEntityCacheAdapter.ts +3 -3
- package/src/GenericSecondaryEntityCache.ts +2 -2
- package/src/IEntityCacheAdapter.ts +1 -1
- package/src/IEntityCacheAdapterProvider.ts +3 -3
- package/src/IEntityDatabaseAdapterProvider.ts +3 -3
- package/src/IEntityGenericCacher.ts +1 -1
- package/src/ReadonlyEntity.ts +10 -10
- package/src/ViewerContext.ts +6 -6
- package/src/ViewerScopedEntityCompanion.ts +9 -9
- package/src/ViewerScopedEntityCompanionProvider.ts +6 -6
- package/src/ViewerScopedEntityLoaderFactory.ts +6 -6
- package/src/ViewerScopedEntityMutatorFactory.ts +6 -6
- package/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.ts +5 -4
- package/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.ts +14 -18
- package/src/__tests__/AuthorizationResultBasedEntityLoader-test.ts +18 -16
- package/src/__tests__/ComposedCacheAdapter-test.ts +5 -3
- package/src/__tests__/ComposedSecondaryEntityCache-test.ts +2 -1
- package/src/__tests__/EnforcingEntityAssociationLoader-test.ts +4 -3
- package/src/__tests__/EnforcingEntityLoader-test.ts +4 -3
- package/src/__tests__/Entity-test.ts +8 -6
- package/src/__tests__/EntityAssociationLoader-test.ts +7 -5
- package/src/__tests__/EntityCommonUseCases-test.ts +10 -9
- package/src/__tests__/EntityCompanion-test.ts +13 -11
- package/src/__tests__/EntityCompanionProvider-test.ts +7 -5
- package/src/__tests__/EntityConfiguration-test.ts +3 -1
- package/src/__tests__/EntityDatabaseAdapter-test.ts +9 -7
- package/src/__tests__/EntityEdges-test.ts +10 -8
- package/src/__tests__/EntityFields-test.ts +8 -7
- package/src/__tests__/EntityLoader-test.ts +8 -6
- package/src/__tests__/EntityMutator-MutationCacheConsistency-test.ts +8 -6
- package/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.ts +5 -3
- package/src/__tests__/EntityMutator-test.ts +33 -29
- package/src/__tests__/EntityPrivacyPolicy-test.ts +19 -16
- package/src/__tests__/EntityQueryContext-test.ts +7 -6
- package/src/__tests__/EntitySecondaryCacheLoader-test.ts +5 -3
- package/src/__tests__/EntitySelfReferentialEdges-test.ts +7 -5
- package/src/__tests__/GenericEntityCacheAdapter-test.ts +4 -3
- package/src/__tests__/ReadonlyEntity-test.ts +10 -9
- package/src/__tests__/ViewerContext-test.ts +3 -1
- package/src/__tests__/ViewerScopedEntityCompanion-test.ts +10 -8
- package/src/__tests__/ViewerScopedEntityCompanionProvider-test.ts +7 -6
- package/src/__tests__/ViewerScopedEntityLoaderFactory-test.ts +5 -4
- package/src/__tests__/ViewerScopedEntityMutatorFactory-test.ts +8 -6
- package/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.ts +15 -13
- package/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.ts +7 -5
- package/src/__tests__/entityUtils-test.ts +3 -2
- package/src/errors/EntityCacheAdapterError.ts +2 -2
- package/src/errors/EntityDatabaseAdapterError.ts +2 -2
- package/src/errors/EntityError.ts +1 -1
- package/src/errors/EntityInvalidFieldValueError.ts +5 -5
- package/src/errors/EntityNotAuthorizedError.ts +4 -4
- package/src/errors/EntityNotFoundError.ts +5 -5
- package/src/errors/__tests__/EntityDatabaseAdapterError-test.ts +6 -3
- package/src/index.ts +39 -54
- package/src/internal/CompositeFieldHolder.ts +2 -1
- package/src/internal/EntityDataManager.ts +7 -5
- package/src/internal/EntityFieldTransformationUtils.ts +1 -1
- package/src/internal/EntityLoadInterfaces.ts +1 -1
- package/src/internal/EntityTableDataCoordinator.ts +10 -10
- package/src/internal/ReadThroughEntityCache.ts +3 -3
- package/src/internal/SingleFieldHolder.ts +1 -1
- package/src/internal/__tests__/CompositeFieldHolder-test.ts +2 -0
- package/src/internal/__tests__/CompositeFieldValueMap-test.ts +2 -0
- package/src/internal/__tests__/EntityDataManager-test.ts +34 -31
- package/src/internal/__tests__/EntityFieldTransformationUtils-test.ts +5 -3
- package/src/internal/__tests__/ReadThroughEntityCache-test.ts +5 -4
- package/src/metrics/EntityMetricsUtils.ts +3 -2
- package/src/metrics/IEntityMetricsAdapter.ts +1 -1
- package/src/metrics/NoOpEntityMetricsAdapter.ts +3 -2
- package/src/rules/AlwaysAllowPrivacyPolicyRule.ts +4 -4
- package/src/rules/AlwaysDenyPrivacyPolicyRule.ts +4 -4
- package/src/rules/AlwaysSkipPrivacyPolicyRule.ts +4 -4
- package/src/rules/PrivacyPolicyRule.ts +3 -3
- package/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.ts +3 -3
- package/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.ts +3 -3
- package/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.ts +3 -3
- package/src/utils/EntityCreationUtils.ts +4 -4
- package/src/utils/EntityPrivacyUtils.ts +5 -5
- package/src/utils/__testfixtures__/PrivacyPolicyRuleTestUtils.ts +5 -3
- package/src/utils/__testfixtures__/SimpleTestEntity.ts +6 -6
- package/src/utils/__testfixtures__/StubCacheAdapter.ts +4 -4
- package/src/utils/__testfixtures__/StubDatabaseAdapter.ts +8 -7
- package/src/utils/__testfixtures__/StubDatabaseAdapterProvider.ts +5 -5
- package/src/utils/__testfixtures__/StubQueryContextProvider.ts +2 -2
- package/src/utils/__testfixtures__/TestEntity.ts +7 -7
- package/src/utils/__testfixtures__/TestEntity2.ts +6 -6
- package/src/utils/__testfixtures__/TestEntityWithMutationTriggers.ts +6 -10
- package/src/utils/__testfixtures__/TestViewerContext.ts +2 -2
- package/src/utils/__testfixtures__/createUnitTestEntityCompanionProvider.ts +5 -5
- package/src/utils/__testfixtures__/describeFieldTestCase.ts +3 -1
- package/src/utils/__tests__/EntityCreationUtils-test.ts +5 -3
- package/src/utils/__tests__/EntityPrivacyUtils-test.ts +15 -13
- package/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.ts +10 -8
- package/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.ts +2 -0
- package/src/utils/collections/__tests__/SerializableKeyMap-test.ts +2 -0
- package/src/utils/collections/__tests__/maps-test.ts +3 -1
- package/src/utils/collections/__tests__/sets-test.ts +2 -0
- package/src/utils/mergeEntityMutationTriggerConfigurations.ts +3 -3
- package/build/AuthorizationResultBasedEntityAssociationLoader.js.map +0 -1
- package/build/AuthorizationResultBasedEntityLoader.js.map +0 -1
- package/build/AuthorizationResultBasedEntityMutator.js.map +0 -1
- package/build/ComposedEntityCacheAdapter.js.map +0 -1
- package/build/ComposedSecondaryEntityCache.js.map +0 -1
- package/build/EnforcingEntityAssociationLoader.js.map +0 -1
- package/build/EnforcingEntityCreator.js.map +0 -1
- package/build/EnforcingEntityDeleter.js.map +0 -1
- package/build/EnforcingEntityLoader.js.map +0 -1
- package/build/EnforcingEntityUpdater.js.map +0 -1
- package/build/Entity.js.map +0 -1
- package/build/EntityAssociationLoader.js.map +0 -1
- package/build/EntityCompanion.js.map +0 -1
- package/build/EntityCompanionProvider.js.map +0 -1
- package/build/EntityConfiguration.js.map +0 -1
- package/build/EntityDatabaseAdapter.js.map +0 -1
- package/build/EntityFieldDefinition.js.map +0 -1
- package/build/EntityFields.js.map +0 -1
- package/build/EntityLoaderFactory.js +0 -31
- package/build/EntityLoaderFactory.js.map +0 -1
- package/build/EntityLoaderUtils.js.map +0 -1
- package/build/EntityMutationInfo.js.map +0 -1
- package/build/EntityMutationTriggerConfiguration.js.map +0 -1
- package/build/EntityMutationValidator.js.map +0 -1
- package/build/EntityMutatorFactory.js.map +0 -1
- package/build/EntityQueryContext.js.map +0 -1
- package/build/EntityQueryContextProvider.js.map +0 -1
- package/build/EntitySecondaryCacheLoader.js.map +0 -1
- package/build/GenericEntityCacheAdapter.js.map +0 -1
- package/build/GenericSecondaryEntityCache.js.map +0 -1
- package/build/IEntityCacheAdapter.js.map +0 -1
- package/build/IEntityCacheAdapterProvider.js.map +0 -1
- package/build/IEntityDatabaseAdapterProvider.js.map +0 -1
- package/build/IEntityGenericCacher.js.map +0 -1
- package/build/ReadonlyEntity.js.map +0 -1
- package/build/ViewerScopedEntityCompanionProvider.js.map +0 -1
- package/build/ViewerScopedEntityLoaderFactory.js.map +0 -1
- package/build/ViewerScopedEntityMutatorFactory.js.map +0 -1
- package/build/entityUtils.js.map +0 -1
- package/build/errors/EntityCacheAdapterError.js +0 -46
- package/build/errors/EntityCacheAdapterError.js.map +0 -1
- package/build/errors/EntityDatabaseAdapterError.js.map +0 -1
- package/build/errors/EntityError.js.map +0 -1
- package/build/errors/EntityInvalidFieldValueError.js +0 -45
- package/build/errors/EntityInvalidFieldValueError.js.map +0 -1
- package/build/errors/EntityNotAuthorizedError.js +0 -48
- package/build/errors/EntityNotAuthorizedError.js.map +0 -1
- package/build/errors/EntityNotFoundError.js +0 -50
- package/build/errors/EntityNotFoundError.js.map +0 -1
- package/build/index.d.ts +0 -91
- package/build/index.js +0 -155
- package/build/index.js.map +0 -1
- package/build/internal/CompositeFieldHolder.js.map +0 -1
- package/build/internal/CompositeFieldValueMap.js.map +0 -1
- package/build/internal/EntityDataManager.js.map +0 -1
- package/build/internal/EntityFieldTransformationUtils.js.map +0 -1
- package/build/internal/EntityLoadInterfaces.js.map +0 -1
- package/build/internal/ReadThroughEntityCache.js.map +0 -1
- package/build/internal/SingleFieldHolder.js.map +0 -1
- package/build/metrics/EntityMetricsUtils.js.map +0 -1
- package/build/metrics/IEntityMetricsAdapter.js.map +0 -1
- package/build/metrics/NoOpEntityMetricsAdapter.js.map +0 -1
- package/build/rules/AlwaysAllowPrivacyPolicyRule.js +0 -46
- package/build/rules/AlwaysAllowPrivacyPolicyRule.js.map +0 -1
- package/build/rules/AlwaysDenyPrivacyPolicyRule.js +0 -46
- package/build/rules/AlwaysDenyPrivacyPolicyRule.js.map +0 -1
- package/build/rules/AlwaysSkipPrivacyPolicyRule.js +0 -46
- package/build/rules/AlwaysSkipPrivacyPolicyRule.js.map +0 -1
- package/build/rules/PrivacyPolicyRule.js.map +0 -1
- package/build/tsconfig.build.tsbuildinfo +0 -1
- package/build/utils/collections/SerializableKeyMap.js.map +0 -1
- package/build/utils/collections/maps.js.map +0 -1
- package/build/utils/collections/sets.js.map +0 -1
- package/build/utils/mergeEntityMutationTriggerConfigurations.js.map +0 -1
- /package/build/{EntityFieldDefinition.js → src/EntityFieldDefinition.js} +0 -0
- /package/build/{EntityFields.d.ts → src/EntityFields.d.ts} +0 -0
- /package/build/{EntityFields.js → src/EntityFields.js} +0 -0
- /package/build/{EntityMutationInfo.js → src/EntityMutationInfo.js} +0 -0
- /package/build/{EntityMutationTriggerConfiguration.js → src/EntityMutationTriggerConfiguration.js} +0 -0
- /package/build/{EntityQueryContext.js → src/EntityQueryContext.js} +0 -0
- /package/build/{IEntityCacheAdapter.js → src/IEntityCacheAdapter.js} +0 -0
- /package/build/{IEntityCacheAdapterProvider.js → src/IEntityCacheAdapterProvider.js} +0 -0
- /package/build/{IEntityDatabaseAdapterProvider.js → src/IEntityDatabaseAdapterProvider.js} +0 -0
- /package/build/{IEntityGenericCacher.js → src/IEntityGenericCacher.js} +0 -0
- /package/build/{entityUtils.d.ts → src/entityUtils.d.ts} +0 -0
- /package/build/{entityUtils.js → src/entityUtils.js} +0 -0
- /package/build/{internal → src/internal}/CompositeFieldHolder.js +0 -0
- /package/build/{internal → src/internal}/CompositeFieldValueMap.d.ts +0 -0
- /package/build/{internal → src/internal}/CompositeFieldValueMap.js +0 -0
- /package/build/{internal → src/internal}/EntityFieldTransformationUtils.js +0 -0
- /package/build/{internal → src/internal}/EntityLoadInterfaces.js +0 -0
- /package/build/{internal → src/internal}/SingleFieldHolder.js +0 -0
- /package/build/{metrics → src/metrics}/EntityMetricsUtils.js +0 -0
- /package/build/{metrics → src/metrics}/IEntityMetricsAdapter.js +0 -0
- /package/build/{utils → src/utils}/collections/SerializableKeyMap.d.ts +0 -0
- /package/build/{utils → src/utils}/collections/SerializableKeyMap.js +0 -0
- /package/build/{utils → src/utils}/collections/maps.d.ts +0 -0
- /package/build/{utils → src/utils}/collections/maps.js +0 -0
- /package/build/{utils → src/utils}/collections/sets.d.ts +0 -0
- /package/build/{utils → src/utils}/collections/sets.js +0 -0
- /package/build/{utils → src/utils}/mergeEntityMutationTriggerConfigurations.js +0 -0
|
@@ -0,0 +1,666 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const globals_1 = require("@jest/globals");
|
|
4
|
+
const ts_mockito_1 = require("ts-mockito");
|
|
5
|
+
const EntityQueryContext_1 = require("../../EntityQueryContext");
|
|
6
|
+
const IEntityMetricsAdapter_1 = require("../../metrics/IEntityMetricsAdapter");
|
|
7
|
+
const NoOpEntityMetricsAdapter_1 = require("../../metrics/NoOpEntityMetricsAdapter");
|
|
8
|
+
const StubCacheAdapter_1 = require("../../utils/__testfixtures__/StubCacheAdapter");
|
|
9
|
+
const StubDatabaseAdapter_1 = require("../../utils/__testfixtures__/StubDatabaseAdapter");
|
|
10
|
+
const StubQueryContextProvider_1 = require("../../utils/__testfixtures__/StubQueryContextProvider");
|
|
11
|
+
const TestEntity_1 = require("../../utils/__testfixtures__/TestEntity");
|
|
12
|
+
const CompositeFieldHolder_1 = require("../CompositeFieldHolder");
|
|
13
|
+
const EntityDataManager_1 = require("../EntityDataManager");
|
|
14
|
+
const EntityLoadInterfaces_1 = require("../EntityLoadInterfaces");
|
|
15
|
+
const ReadThroughEntityCache_1 = require("../ReadThroughEntityCache");
|
|
16
|
+
const SingleFieldHolder_1 = require("../SingleFieldHolder");
|
|
17
|
+
const getObjects = () => new Map([
|
|
18
|
+
[
|
|
19
|
+
TestEntity_1.testEntityConfiguration.tableName,
|
|
20
|
+
[
|
|
21
|
+
{
|
|
22
|
+
customIdField: '1',
|
|
23
|
+
testIndexedField: 'unique1',
|
|
24
|
+
stringField: 'hello',
|
|
25
|
+
intField: 1,
|
|
26
|
+
dateField: new Date(),
|
|
27
|
+
nullableField: null,
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
customIdField: '2',
|
|
31
|
+
testIndexedField: 'unique2',
|
|
32
|
+
stringField: 'hello',
|
|
33
|
+
intField: 1,
|
|
34
|
+
dateField: new Date(),
|
|
35
|
+
nullableField: null,
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
customIdField: '3',
|
|
39
|
+
testIndexedField: 'unique3',
|
|
40
|
+
stringField: 'world',
|
|
41
|
+
intField: 1,
|
|
42
|
+
dateField: new Date(),
|
|
43
|
+
nullableField: null,
|
|
44
|
+
},
|
|
45
|
+
],
|
|
46
|
+
],
|
|
47
|
+
]);
|
|
48
|
+
(0, globals_1.describe)(EntityDataManager_1.EntityDataManager, () => {
|
|
49
|
+
(0, globals_1.it)('loads from db with a no-cache adapter', async () => {
|
|
50
|
+
const objects = getObjects();
|
|
51
|
+
const dataStore = StubDatabaseAdapter_1.StubDatabaseAdapter.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
|
|
52
|
+
const databaseAdapter = new StubDatabaseAdapter_1.StubDatabaseAdapter(TestEntity_1.testEntityConfiguration, dataStore);
|
|
53
|
+
const cacheAdapterProvider = new StubCacheAdapter_1.NoCacheStubCacheAdapterProvider();
|
|
54
|
+
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
|
|
55
|
+
const entityCache = new ReadThroughEntityCache_1.ReadThroughEntityCache(TestEntity_1.testEntityConfiguration, cacheAdapter);
|
|
56
|
+
const entityDataManager = new EntityDataManager_1.EntityDataManager(databaseAdapter, entityCache, new StubQueryContextProvider_1.StubQueryContextProvider(), new NoOpEntityMetricsAdapter_1.NoOpEntityMetricsAdapter(), TestEntity_1.TestEntity.name);
|
|
57
|
+
const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
|
|
58
|
+
const dbSpy = globals_1.jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
59
|
+
const cacheSpy = globals_1.jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
60
|
+
const entityDatas = await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('customIdField'), [new SingleFieldHolder_1.SingleFieldValueHolder('2')]);
|
|
61
|
+
(0, globals_1.expect)(entityDatas.get(new SingleFieldHolder_1.SingleFieldValueHolder('2'))).toHaveLength(1);
|
|
62
|
+
(0, globals_1.expect)(dbSpy).toHaveBeenCalled();
|
|
63
|
+
(0, globals_1.expect)(cacheSpy).toHaveBeenCalled();
|
|
64
|
+
dbSpy.mockClear();
|
|
65
|
+
cacheSpy.mockClear();
|
|
66
|
+
const entityDatas2 = await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'), [new SingleFieldHolder_1.SingleFieldValueHolder('unique2'), new SingleFieldHolder_1.SingleFieldValueHolder('unique3')]);
|
|
67
|
+
(0, globals_1.expect)(entityDatas2.get(new SingleFieldHolder_1.SingleFieldValueHolder('unique2'))).toHaveLength(1);
|
|
68
|
+
(0, globals_1.expect)(entityDatas2.get(new SingleFieldHolder_1.SingleFieldValueHolder('unique3'))).toHaveLength(1);
|
|
69
|
+
(0, globals_1.expect)(dbSpy).toHaveBeenCalled();
|
|
70
|
+
(0, globals_1.expect)(cacheSpy).toHaveBeenCalled();
|
|
71
|
+
dbSpy.mockClear();
|
|
72
|
+
cacheSpy.mockClear();
|
|
73
|
+
});
|
|
74
|
+
(0, globals_1.it)('loads from a caching adaptor', async () => {
|
|
75
|
+
const objects = getObjects();
|
|
76
|
+
const dataStore = StubDatabaseAdapter_1.StubDatabaseAdapter.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
|
|
77
|
+
const databaseAdapter = new StubDatabaseAdapter_1.StubDatabaseAdapter(TestEntity_1.testEntityConfiguration, dataStore);
|
|
78
|
+
const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
|
|
79
|
+
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
|
|
80
|
+
const entityCache = new ReadThroughEntityCache_1.ReadThroughEntityCache(TestEntity_1.testEntityConfiguration, cacheAdapter);
|
|
81
|
+
const entityDataManager = new EntityDataManager_1.EntityDataManager(databaseAdapter, entityCache, new StubQueryContextProvider_1.StubQueryContextProvider(), new NoOpEntityMetricsAdapter_1.NoOpEntityMetricsAdapter(), TestEntity_1.TestEntity.name);
|
|
82
|
+
const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
|
|
83
|
+
const dbSpy = globals_1.jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
84
|
+
const cacheSpy = globals_1.jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
85
|
+
const entityDatas = await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('customIdField'), [new SingleFieldHolder_1.SingleFieldValueHolder('1')]);
|
|
86
|
+
(0, globals_1.expect)(entityDatas.get(new SingleFieldHolder_1.SingleFieldValueHolder('1'))).toHaveLength(1);
|
|
87
|
+
(0, globals_1.expect)(dbSpy).toHaveBeenCalled();
|
|
88
|
+
(0, globals_1.expect)(cacheSpy).toHaveBeenCalled();
|
|
89
|
+
dbSpy.mockClear();
|
|
90
|
+
cacheSpy.mockClear();
|
|
91
|
+
const entityDatas2 = await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'), [new SingleFieldHolder_1.SingleFieldValueHolder('unique2'), new SingleFieldHolder_1.SingleFieldValueHolder('unique3')]);
|
|
92
|
+
(0, globals_1.expect)(entityDatas2.get(new SingleFieldHolder_1.SingleFieldValueHolder('unique2'))).toHaveLength(1);
|
|
93
|
+
(0, globals_1.expect)(entityDatas2.get(new SingleFieldHolder_1.SingleFieldValueHolder('unique3'))).toHaveLength(1);
|
|
94
|
+
(0, globals_1.expect)(dbSpy).toHaveBeenCalled();
|
|
95
|
+
(0, globals_1.expect)(cacheSpy).toHaveBeenCalled();
|
|
96
|
+
dbSpy.mockClear();
|
|
97
|
+
cacheSpy.mockClear();
|
|
98
|
+
});
|
|
99
|
+
(0, globals_1.it)('loads from a caching adapter with a cache hit', async () => {
|
|
100
|
+
const objects = getObjects();
|
|
101
|
+
const dataStore = StubDatabaseAdapter_1.StubDatabaseAdapter.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
|
|
102
|
+
const databaseAdapter = new StubDatabaseAdapter_1.StubDatabaseAdapter(TestEntity_1.testEntityConfiguration, dataStore);
|
|
103
|
+
const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
|
|
104
|
+
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
|
|
105
|
+
const entityCache = new ReadThroughEntityCache_1.ReadThroughEntityCache(TestEntity_1.testEntityConfiguration, cacheAdapter);
|
|
106
|
+
const entityDataManager = new EntityDataManager_1.EntityDataManager(databaseAdapter, entityCache, new StubQueryContextProvider_1.StubQueryContextProvider(), new NoOpEntityMetricsAdapter_1.NoOpEntityMetricsAdapter(), TestEntity_1.TestEntity.name);
|
|
107
|
+
const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
|
|
108
|
+
// use second data manager to ensure that cache is hit instead of data loader
|
|
109
|
+
const entityDataManager2 = new EntityDataManager_1.EntityDataManager(databaseAdapter, entityCache, new StubQueryContextProvider_1.StubQueryContextProvider(), new NoOpEntityMetricsAdapter_1.NoOpEntityMetricsAdapter(), TestEntity_1.TestEntity.name);
|
|
110
|
+
const dbSpy = globals_1.jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
111
|
+
const cacheSpy = globals_1.jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
112
|
+
await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'), [new SingleFieldHolder_1.SingleFieldValueHolder('unique2')]);
|
|
113
|
+
await entityDataManager2.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'), [new SingleFieldHolder_1.SingleFieldValueHolder('unique2')]);
|
|
114
|
+
(0, globals_1.expect)(dbSpy).toHaveBeenCalledTimes(1);
|
|
115
|
+
(0, globals_1.expect)(cacheSpy).toHaveBeenCalledTimes(2);
|
|
116
|
+
dbSpy.mockReset();
|
|
117
|
+
cacheSpy.mockReset();
|
|
118
|
+
});
|
|
119
|
+
(0, globals_1.it)('loads from data loader for same query', async () => {
|
|
120
|
+
const objects = getObjects();
|
|
121
|
+
const dataStore = StubDatabaseAdapter_1.StubDatabaseAdapter.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
|
|
122
|
+
const databaseAdapter = new StubDatabaseAdapter_1.StubDatabaseAdapter(TestEntity_1.testEntityConfiguration, dataStore);
|
|
123
|
+
const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
|
|
124
|
+
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
|
|
125
|
+
const entityCache = new ReadThroughEntityCache_1.ReadThroughEntityCache(TestEntity_1.testEntityConfiguration, cacheAdapter);
|
|
126
|
+
const entityDataManager = new EntityDataManager_1.EntityDataManager(databaseAdapter, entityCache, new StubQueryContextProvider_1.StubQueryContextProvider(), new NoOpEntityMetricsAdapter_1.NoOpEntityMetricsAdapter(), TestEntity_1.TestEntity.name);
|
|
127
|
+
const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
|
|
128
|
+
const dbSpy = globals_1.jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
129
|
+
const cacheSpy = globals_1.jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
130
|
+
await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'), [new SingleFieldHolder_1.SingleFieldValueHolder('unique2')]);
|
|
131
|
+
await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'), [new SingleFieldHolder_1.SingleFieldValueHolder('unique2')]);
|
|
132
|
+
(0, globals_1.expect)(dbSpy).toHaveBeenCalledTimes(1);
|
|
133
|
+
(0, globals_1.expect)(cacheSpy).toHaveBeenCalledTimes(1);
|
|
134
|
+
dbSpy.mockReset();
|
|
135
|
+
cacheSpy.mockReset();
|
|
136
|
+
});
|
|
137
|
+
(0, globals_1.it)('loads and in-memory caches (dataloader) non-unique, non-cacheable loads', async () => {
|
|
138
|
+
const objects = getObjects();
|
|
139
|
+
const dataStore = StubDatabaseAdapter_1.StubDatabaseAdapter.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
|
|
140
|
+
const databaseAdapter = new StubDatabaseAdapter_1.StubDatabaseAdapter(TestEntity_1.testEntityConfiguration, dataStore);
|
|
141
|
+
const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
|
|
142
|
+
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
|
|
143
|
+
const entityCache = new ReadThroughEntityCache_1.ReadThroughEntityCache(TestEntity_1.testEntityConfiguration, cacheAdapter);
|
|
144
|
+
const entityDataManager = new EntityDataManager_1.EntityDataManager(databaseAdapter, entityCache, new StubQueryContextProvider_1.StubQueryContextProvider(), new NoOpEntityMetricsAdapter_1.NoOpEntityMetricsAdapter(), TestEntity_1.TestEntity.name);
|
|
145
|
+
const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
|
|
146
|
+
const dbSpy = globals_1.jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
147
|
+
const cacheSpy = globals_1.jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
148
|
+
const entityData = await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('stringField'), [new SingleFieldHolder_1.SingleFieldValueHolder('hello'), new SingleFieldHolder_1.SingleFieldValueHolder('world')]);
|
|
149
|
+
const entityData2 = await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('stringField'), [new SingleFieldHolder_1.SingleFieldValueHolder('hello'), new SingleFieldHolder_1.SingleFieldValueHolder('world')]);
|
|
150
|
+
(0, globals_1.expect)(dbSpy).toHaveBeenCalledTimes(1);
|
|
151
|
+
(0, globals_1.expect)(cacheSpy).toHaveBeenCalledTimes(1);
|
|
152
|
+
(0, globals_1.expect)(entityData).toEqual(entityData2);
|
|
153
|
+
(0, globals_1.expect)(entityData.get(new SingleFieldHolder_1.SingleFieldValueHolder('hello'))).toHaveLength(2);
|
|
154
|
+
(0, globals_1.expect)(entityData.get(new SingleFieldHolder_1.SingleFieldValueHolder('world'))).toHaveLength(1);
|
|
155
|
+
dbSpy.mockReset();
|
|
156
|
+
cacheSpy.mockReset();
|
|
157
|
+
});
|
|
158
|
+
(0, globals_1.it)('loads and in-memory batches (dataloader) loads in transaction when enabled with TransactionalDataLoaderMode.ENABLED_BATCH_ONLY and does not read from cache for transactions and nested transactions', async () => {
|
|
159
|
+
const objects = getObjects();
|
|
160
|
+
const dataStore = StubDatabaseAdapter_1.StubDatabaseAdapter.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
|
|
161
|
+
const databaseAdapter = new StubDatabaseAdapter_1.StubDatabaseAdapter(TestEntity_1.testEntityConfiguration, dataStore);
|
|
162
|
+
const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
|
|
163
|
+
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
|
|
164
|
+
const entityCache = new ReadThroughEntityCache_1.ReadThroughEntityCache(TestEntity_1.testEntityConfiguration, cacheAdapter);
|
|
165
|
+
const entityDataManager = new EntityDataManager_1.EntityDataManager(databaseAdapter, entityCache, new StubQueryContextProvider_1.StubQueryContextProvider(), new NoOpEntityMetricsAdapter_1.NoOpEntityMetricsAdapter(), TestEntity_1.TestEntity.name);
|
|
166
|
+
const dbSpy = globals_1.jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
167
|
+
const cacheSpy = globals_1.jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
168
|
+
const [entityData, entityData2, entityData3, entityData4] = await new StubQueryContextProvider_1.StubQueryContextProvider().runInTransactionAsync(async (queryContext) => {
|
|
169
|
+
const [entityData, entityData2] = await Promise.all([
|
|
170
|
+
entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('stringField'), [new SingleFieldHolder_1.SingleFieldValueHolder('hello'), new SingleFieldHolder_1.SingleFieldValueHolder('world')]),
|
|
171
|
+
entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('stringField'), [new SingleFieldHolder_1.SingleFieldValueHolder('hello'), new SingleFieldHolder_1.SingleFieldValueHolder('world')]),
|
|
172
|
+
]);
|
|
173
|
+
const [entityData3, entityData4] = await queryContext.runInNestedTransactionAsync(async (innerQueryContext) => {
|
|
174
|
+
const entityData3 = await entityDataManager.loadManyEqualingAsync(innerQueryContext, new SingleFieldHolder_1.SingleFieldHolder('stringField'), [new SingleFieldHolder_1.SingleFieldValueHolder('hello'), new SingleFieldHolder_1.SingleFieldValueHolder('world')]);
|
|
175
|
+
const entityData4 = await queryContext.runInNestedTransactionAsync(async (innerInnerQueryContext) => {
|
|
176
|
+
return await entityDataManager.loadManyEqualingAsync(innerInnerQueryContext, new SingleFieldHolder_1.SingleFieldHolder('stringField'), [new SingleFieldHolder_1.SingleFieldValueHolder('hello'), new SingleFieldHolder_1.SingleFieldValueHolder('world')]);
|
|
177
|
+
});
|
|
178
|
+
return [entityData3, entityData4];
|
|
179
|
+
});
|
|
180
|
+
return [entityData, entityData2, entityData3, entityData4];
|
|
181
|
+
});
|
|
182
|
+
// entityData, entityData3 (new nested transaction), and entityData4 (new nested transaction) loads should all need to call the database
|
|
183
|
+
// entityData and entityData2 should be batched to one db load call
|
|
184
|
+
(0, globals_1.expect)(dbSpy).toHaveBeenCalledTimes(3);
|
|
185
|
+
(0, globals_1.expect)(cacheSpy).toHaveBeenCalledTimes(0);
|
|
186
|
+
(0, globals_1.expect)(entityData).toEqual(entityData2);
|
|
187
|
+
(0, globals_1.expect)(entityData2).toEqual(entityData3);
|
|
188
|
+
(0, globals_1.expect)(entityData3).toEqual(entityData4);
|
|
189
|
+
(0, globals_1.expect)(entityData.get(new SingleFieldHolder_1.SingleFieldValueHolder('hello'))).toHaveLength(2);
|
|
190
|
+
(0, globals_1.expect)(entityData.get(new SingleFieldHolder_1.SingleFieldValueHolder('world'))).toHaveLength(1);
|
|
191
|
+
dbSpy.mockReset();
|
|
192
|
+
cacheSpy.mockReset();
|
|
193
|
+
});
|
|
194
|
+
(0, globals_1.it)('loads and in-memory caches (dataloader) loads in transaction when enabled with TransactionalDataLoaderMode.ENABLED and does not read from cache for transactions and nested transactions', async () => {
|
|
195
|
+
const objects = getObjects();
|
|
196
|
+
const dataStore = StubDatabaseAdapter_1.StubDatabaseAdapter.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
|
|
197
|
+
const databaseAdapter = new StubDatabaseAdapter_1.StubDatabaseAdapter(TestEntity_1.testEntityConfiguration, dataStore);
|
|
198
|
+
const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
|
|
199
|
+
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
|
|
200
|
+
const entityCache = new ReadThroughEntityCache_1.ReadThroughEntityCache(TestEntity_1.testEntityConfiguration, cacheAdapter);
|
|
201
|
+
const entityDataManager = new EntityDataManager_1.EntityDataManager(databaseAdapter, entityCache, new StubQueryContextProvider_1.StubQueryContextProvider(), new NoOpEntityMetricsAdapter_1.NoOpEntityMetricsAdapter(), TestEntity_1.TestEntity.name);
|
|
202
|
+
const dbSpy = globals_1.jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
203
|
+
const cacheSpy = globals_1.jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
204
|
+
const [entityData, entityData2, entityData3, entityData4] = await new StubQueryContextProvider_1.StubQueryContextProvider().runInTransactionAsync(async (queryContext) => {
|
|
205
|
+
const entityData = await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('stringField'), [new SingleFieldHolder_1.SingleFieldValueHolder('hello'), new SingleFieldHolder_1.SingleFieldValueHolder('world')]);
|
|
206
|
+
const entityData2 = await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('stringField'), [new SingleFieldHolder_1.SingleFieldValueHolder('hello'), new SingleFieldHolder_1.SingleFieldValueHolder('world')]);
|
|
207
|
+
const [entityData3, entityData4] = await queryContext.runInNestedTransactionAsync(async (innerQueryContext) => {
|
|
208
|
+
const entityData3 = await entityDataManager.loadManyEqualingAsync(innerQueryContext, new SingleFieldHolder_1.SingleFieldHolder('stringField'), [new SingleFieldHolder_1.SingleFieldValueHolder('hello'), new SingleFieldHolder_1.SingleFieldValueHolder('world')]);
|
|
209
|
+
const entityData4 = await queryContext.runInNestedTransactionAsync(async (innerInnerQueryContext) => {
|
|
210
|
+
return await entityDataManager.loadManyEqualingAsync(innerInnerQueryContext, new SingleFieldHolder_1.SingleFieldHolder('stringField'), [new SingleFieldHolder_1.SingleFieldValueHolder('hello'), new SingleFieldHolder_1.SingleFieldValueHolder('world')]);
|
|
211
|
+
});
|
|
212
|
+
return [entityData3, entityData4];
|
|
213
|
+
});
|
|
214
|
+
return [entityData, entityData2, entityData3, entityData4];
|
|
215
|
+
});
|
|
216
|
+
// entityData, entityData3 (new nested transaction), and entityData4 (new nested transaction) loads should all need to call the database
|
|
217
|
+
// entityData2 load should be cached in the dataloader
|
|
218
|
+
(0, globals_1.expect)(dbSpy).toHaveBeenCalledTimes(3);
|
|
219
|
+
(0, globals_1.expect)(cacheSpy).toHaveBeenCalledTimes(0);
|
|
220
|
+
(0, globals_1.expect)(entityData).toEqual(entityData2);
|
|
221
|
+
(0, globals_1.expect)(entityData2).toEqual(entityData3);
|
|
222
|
+
(0, globals_1.expect)(entityData3).toEqual(entityData4);
|
|
223
|
+
(0, globals_1.expect)(entityData.get(new SingleFieldHolder_1.SingleFieldValueHolder('hello'))).toHaveLength(2);
|
|
224
|
+
(0, globals_1.expect)(entityData.get(new SingleFieldHolder_1.SingleFieldValueHolder('world'))).toHaveLength(1);
|
|
225
|
+
dbSpy.mockReset();
|
|
226
|
+
cacheSpy.mockReset();
|
|
227
|
+
});
|
|
228
|
+
(0, globals_1.it)('loads and does not in-memory cache (dataloader) loads in transaction when disabled', async () => {
|
|
229
|
+
const objects = getObjects();
|
|
230
|
+
const dataStore = StubDatabaseAdapter_1.StubDatabaseAdapter.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
|
|
231
|
+
const databaseAdapter = new StubDatabaseAdapter_1.StubDatabaseAdapter(TestEntity_1.testEntityConfiguration, dataStore);
|
|
232
|
+
const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
|
|
233
|
+
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
|
|
234
|
+
const entityCache = new ReadThroughEntityCache_1.ReadThroughEntityCache(TestEntity_1.testEntityConfiguration, cacheAdapter);
|
|
235
|
+
const entityDataManager = new EntityDataManager_1.EntityDataManager(databaseAdapter, entityCache, new StubQueryContextProvider_1.StubQueryContextProvider(), new NoOpEntityMetricsAdapter_1.NoOpEntityMetricsAdapter(), TestEntity_1.TestEntity.name);
|
|
236
|
+
const dbSpy = globals_1.jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
237
|
+
const cacheSpy = globals_1.jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
238
|
+
const [entityData, entityData2, entityData3, entityData4] = await new StubQueryContextProvider_1.StubQueryContextProvider().runInTransactionAsync(async (queryContext) => {
|
|
239
|
+
const entityData = await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('stringField'), [new SingleFieldHolder_1.SingleFieldValueHolder('hello'), new SingleFieldHolder_1.SingleFieldValueHolder('world')]);
|
|
240
|
+
const entityData2 = await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('stringField'), [new SingleFieldHolder_1.SingleFieldValueHolder('hello'), new SingleFieldHolder_1.SingleFieldValueHolder('world')]);
|
|
241
|
+
const [entityData3, entityData4] = await queryContext.runInNestedTransactionAsync(async (innerQueryContext) => {
|
|
242
|
+
const entityData3 = await entityDataManager.loadManyEqualingAsync(innerQueryContext, new SingleFieldHolder_1.SingleFieldHolder('stringField'), [new SingleFieldHolder_1.SingleFieldValueHolder('hello'), new SingleFieldHolder_1.SingleFieldValueHolder('world')]);
|
|
243
|
+
const entityData4 = await queryContext.runInNestedTransactionAsync(async (innerInnerQueryContext) => {
|
|
244
|
+
return await entityDataManager.loadManyEqualingAsync(innerInnerQueryContext, new SingleFieldHolder_1.SingleFieldHolder('stringField'), [new SingleFieldHolder_1.SingleFieldValueHolder('hello'), new SingleFieldHolder_1.SingleFieldValueHolder('world')]);
|
|
245
|
+
});
|
|
246
|
+
return [entityData3, entityData4];
|
|
247
|
+
});
|
|
248
|
+
return [entityData, entityData2, entityData3, entityData4];
|
|
249
|
+
}, {
|
|
250
|
+
transactionalDataLoaderMode: EntityQueryContext_1.TransactionalDataLoaderMode.DISABLED,
|
|
251
|
+
});
|
|
252
|
+
// entityData, entityData2, entityData3 (new nested transaction), and entityData4 (new nested transaction) loads should all need to call the database
|
|
253
|
+
(0, globals_1.expect)(dbSpy).toHaveBeenCalledTimes(4);
|
|
254
|
+
(0, globals_1.expect)(cacheSpy).toHaveBeenCalledTimes(0);
|
|
255
|
+
(0, globals_1.expect)(entityData).toEqual(entityData2);
|
|
256
|
+
(0, globals_1.expect)(entityData2).toEqual(entityData3);
|
|
257
|
+
(0, globals_1.expect)(entityData3).toEqual(entityData4);
|
|
258
|
+
(0, globals_1.expect)(entityData.get(new SingleFieldHolder_1.SingleFieldValueHolder('hello'))).toHaveLength(2);
|
|
259
|
+
(0, globals_1.expect)(entityData.get(new SingleFieldHolder_1.SingleFieldValueHolder('world'))).toHaveLength(1);
|
|
260
|
+
dbSpy.mockReset();
|
|
261
|
+
cacheSpy.mockReset();
|
|
262
|
+
});
|
|
263
|
+
(0, globals_1.it)('invalidates objects', async () => {
|
|
264
|
+
const objects = getObjects();
|
|
265
|
+
const dataStore = StubDatabaseAdapter_1.StubDatabaseAdapter.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
|
|
266
|
+
const databaseAdapter = new StubDatabaseAdapter_1.StubDatabaseAdapter(TestEntity_1.testEntityConfiguration, dataStore);
|
|
267
|
+
const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
|
|
268
|
+
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
|
|
269
|
+
const entityCache = new ReadThroughEntityCache_1.ReadThroughEntityCache(TestEntity_1.testEntityConfiguration, cacheAdapter);
|
|
270
|
+
const entityDataManager = new EntityDataManager_1.EntityDataManager(databaseAdapter, entityCache, new StubQueryContextProvider_1.StubQueryContextProvider(), new NoOpEntityMetricsAdapter_1.NoOpEntityMetricsAdapter(), TestEntity_1.TestEntity.name);
|
|
271
|
+
const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
|
|
272
|
+
const objectInQuestion = objects.get(TestEntity_1.testEntityConfiguration.tableName)[1];
|
|
273
|
+
const dbSpy = globals_1.jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
274
|
+
const cacheSpy = globals_1.jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
275
|
+
await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'), [new SingleFieldHolder_1.SingleFieldValueHolder(objectInQuestion['testIndexedField'])]);
|
|
276
|
+
await entityDataManager.invalidateKeyValuePairsAsync([
|
|
277
|
+
[
|
|
278
|
+
new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'),
|
|
279
|
+
new SingleFieldHolder_1.SingleFieldValueHolder(objectInQuestion['testIndexedField']),
|
|
280
|
+
],
|
|
281
|
+
]);
|
|
282
|
+
await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'), [new SingleFieldHolder_1.SingleFieldValueHolder(objectInQuestion['testIndexedField'])]);
|
|
283
|
+
(0, globals_1.expect)(dbSpy).toHaveBeenCalledTimes(2);
|
|
284
|
+
(0, globals_1.expect)(cacheSpy).toHaveBeenCalledTimes(2);
|
|
285
|
+
dbSpy.mockReset();
|
|
286
|
+
cacheSpy.mockReset();
|
|
287
|
+
});
|
|
288
|
+
(0, globals_1.it)('invalidates all fields for an object', async () => {
|
|
289
|
+
const objects = getObjects();
|
|
290
|
+
const dataStore = StubDatabaseAdapter_1.StubDatabaseAdapter.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
|
|
291
|
+
const databaseAdapter = new StubDatabaseAdapter_1.StubDatabaseAdapter(TestEntity_1.testEntityConfiguration, dataStore);
|
|
292
|
+
const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
|
|
293
|
+
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
|
|
294
|
+
const entityCache = new ReadThroughEntityCache_1.ReadThroughEntityCache(TestEntity_1.testEntityConfiguration, cacheAdapter);
|
|
295
|
+
const entityDataManager = new EntityDataManager_1.EntityDataManager(databaseAdapter, entityCache, new StubQueryContextProvider_1.StubQueryContextProvider(), new NoOpEntityMetricsAdapter_1.NoOpEntityMetricsAdapter(), TestEntity_1.TestEntity.name);
|
|
296
|
+
const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
|
|
297
|
+
const objectInQuestion = objects.get(TestEntity_1.testEntityConfiguration.tableName)[1];
|
|
298
|
+
const dbSpy = globals_1.jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
299
|
+
const cacheSpy = globals_1.jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
300
|
+
await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'), [new SingleFieldHolder_1.SingleFieldValueHolder(objectInQuestion['testIndexedField'])]);
|
|
301
|
+
await entityDataManager.invalidateKeyValuePairsAsync([
|
|
302
|
+
[
|
|
303
|
+
new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'),
|
|
304
|
+
new SingleFieldHolder_1.SingleFieldValueHolder(objectInQuestion['testIndexedField']),
|
|
305
|
+
],
|
|
306
|
+
]);
|
|
307
|
+
await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('customIdField'), [new SingleFieldHolder_1.SingleFieldValueHolder(objectInQuestion['customIdField'])]);
|
|
308
|
+
(0, globals_1.expect)(dbSpy).toHaveBeenCalledTimes(2);
|
|
309
|
+
(0, globals_1.expect)(cacheSpy).toHaveBeenCalledTimes(2);
|
|
310
|
+
dbSpy.mockReset();
|
|
311
|
+
cacheSpy.mockReset();
|
|
312
|
+
});
|
|
313
|
+
(0, globals_1.it)('invalidates transactions and nested transactions correctly', async () => {
|
|
314
|
+
const objects = getObjects();
|
|
315
|
+
const dataStore = StubDatabaseAdapter_1.StubDatabaseAdapter.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
|
|
316
|
+
const databaseAdapter = new StubDatabaseAdapter_1.StubDatabaseAdapter(TestEntity_1.testEntityConfiguration, dataStore);
|
|
317
|
+
const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
|
|
318
|
+
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
|
|
319
|
+
const entityCache = new ReadThroughEntityCache_1.ReadThroughEntityCache(TestEntity_1.testEntityConfiguration, cacheAdapter);
|
|
320
|
+
const entityDataManager = new EntityDataManager_1.EntityDataManager(databaseAdapter, entityCache, new StubQueryContextProvider_1.StubQueryContextProvider(), new NoOpEntityMetricsAdapter_1.NoOpEntityMetricsAdapter(), TestEntity_1.TestEntity.name);
|
|
321
|
+
await new StubQueryContextProvider_1.StubQueryContextProvider().runInTransactionAsync(async (queryContext) => {
|
|
322
|
+
const objectInQuestion = objects.get(TestEntity_1.testEntityConfiguration.tableName)[1];
|
|
323
|
+
const dbSpy = globals_1.jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
324
|
+
const cacheSpy = globals_1.jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
325
|
+
await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'), [new SingleFieldHolder_1.SingleFieldValueHolder(objectInQuestion['testIndexedField'])]);
|
|
326
|
+
entityDataManager.invalidateKeyValuePairsForTransaction(queryContext, [
|
|
327
|
+
[
|
|
328
|
+
new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'),
|
|
329
|
+
new SingleFieldHolder_1.SingleFieldValueHolder(objectInQuestion['testIndexedField']),
|
|
330
|
+
],
|
|
331
|
+
]);
|
|
332
|
+
await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'), [new SingleFieldHolder_1.SingleFieldValueHolder(objectInQuestion['testIndexedField'])]);
|
|
333
|
+
(0, globals_1.expect)(dbSpy).toHaveBeenCalledTimes(2);
|
|
334
|
+
(0, globals_1.expect)(cacheSpy).toHaveBeenCalledTimes(0);
|
|
335
|
+
dbSpy.mockClear();
|
|
336
|
+
cacheSpy.mockClear();
|
|
337
|
+
await queryContext.runInNestedTransactionAsync(async (innerQueryContext) => {
|
|
338
|
+
await entityDataManager.loadManyEqualingAsync(innerQueryContext, new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'), [new SingleFieldHolder_1.SingleFieldValueHolder(objectInQuestion['testIndexedField'])]);
|
|
339
|
+
entityDataManager.invalidateKeyValuePairsForTransaction(innerQueryContext, [
|
|
340
|
+
[
|
|
341
|
+
new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'),
|
|
342
|
+
new SingleFieldHolder_1.SingleFieldValueHolder(objectInQuestion['testIndexedField']),
|
|
343
|
+
],
|
|
344
|
+
]);
|
|
345
|
+
await entityDataManager.loadManyEqualingAsync(innerQueryContext, new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'), [new SingleFieldHolder_1.SingleFieldValueHolder(objectInQuestion['testIndexedField'])]);
|
|
346
|
+
(0, globals_1.expect)(dbSpy).toHaveBeenCalledTimes(2);
|
|
347
|
+
(0, globals_1.expect)(cacheSpy).toHaveBeenCalledTimes(0);
|
|
348
|
+
dbSpy.mockClear();
|
|
349
|
+
cacheSpy.mockClear();
|
|
350
|
+
});
|
|
351
|
+
});
|
|
352
|
+
});
|
|
353
|
+
(0, globals_1.it)('does not use transactional dataloader when disabled', async () => {
|
|
354
|
+
const objects = getObjects();
|
|
355
|
+
const dataStore = StubDatabaseAdapter_1.StubDatabaseAdapter.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
|
|
356
|
+
const databaseAdapter = new StubDatabaseAdapter_1.StubDatabaseAdapter(TestEntity_1.testEntityConfiguration, dataStore);
|
|
357
|
+
const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
|
|
358
|
+
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
|
|
359
|
+
const entityCache = new ReadThroughEntityCache_1.ReadThroughEntityCache(TestEntity_1.testEntityConfiguration, cacheAdapter);
|
|
360
|
+
const entityDataManager = new EntityDataManager_1.EntityDataManager(databaseAdapter, entityCache, new StubQueryContextProvider_1.StubQueryContextProvider(), new NoOpEntityMetricsAdapter_1.NoOpEntityMetricsAdapter(), TestEntity_1.TestEntity.name);
|
|
361
|
+
await new StubQueryContextProvider_1.StubQueryContextProvider().runInTransactionAsync(async (queryContext) => {
|
|
362
|
+
const objectInQuestion = objects.get(TestEntity_1.testEntityConfiguration.tableName)[1];
|
|
363
|
+
const dbSpy = globals_1.jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
364
|
+
const cacheSpy = globals_1.jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
365
|
+
await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'), [new SingleFieldHolder_1.SingleFieldValueHolder(objectInQuestion['testIndexedField'])]);
|
|
366
|
+
entityDataManager.invalidateKeyValuePairsForTransaction(queryContext, [
|
|
367
|
+
[
|
|
368
|
+
new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'),
|
|
369
|
+
new SingleFieldHolder_1.SingleFieldValueHolder(objectInQuestion['testIndexedField']),
|
|
370
|
+
],
|
|
371
|
+
]);
|
|
372
|
+
await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'), [new SingleFieldHolder_1.SingleFieldValueHolder(objectInQuestion['testIndexedField'])]);
|
|
373
|
+
(0, globals_1.expect)(dbSpy).toHaveBeenCalledTimes(2);
|
|
374
|
+
(0, globals_1.expect)(cacheSpy).toHaveBeenCalledTimes(0);
|
|
375
|
+
dbSpy.mockClear();
|
|
376
|
+
cacheSpy.mockClear();
|
|
377
|
+
}, { transactionalDataLoaderMode: EntityQueryContext_1.TransactionalDataLoaderMode.DISABLED });
|
|
378
|
+
(0, globals_1.expect)(entityDataManager['transactionalDataLoaders'].size).toBe(0);
|
|
379
|
+
});
|
|
380
|
+
(0, globals_1.it)('does not load from cache when in transaction', async () => {
|
|
381
|
+
const objects = getObjects();
|
|
382
|
+
const dataStore = StubDatabaseAdapter_1.StubDatabaseAdapter.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
|
|
383
|
+
const databaseAdapter = new StubDatabaseAdapter_1.StubDatabaseAdapter(TestEntity_1.testEntityConfiguration, dataStore);
|
|
384
|
+
const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
|
|
385
|
+
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
|
|
386
|
+
const entityCache = new ReadThroughEntityCache_1.ReadThroughEntityCache(TestEntity_1.testEntityConfiguration, cacheAdapter);
|
|
387
|
+
const entityDataManager = new EntityDataManager_1.EntityDataManager(databaseAdapter, entityCache, new StubQueryContextProvider_1.StubQueryContextProvider(), new NoOpEntityMetricsAdapter_1.NoOpEntityMetricsAdapter(), TestEntity_1.TestEntity.name);
|
|
388
|
+
const dbSpy = globals_1.jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
|
|
389
|
+
const cacheSpy = globals_1.jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
390
|
+
const entityDatas = await new StubQueryContextProvider_1.StubQueryContextProvider().runInTransactionAsync(async (queryContext) => {
|
|
391
|
+
return await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('customIdField'), [new SingleFieldHolder_1.SingleFieldValueHolder('1')]);
|
|
392
|
+
}, {});
|
|
393
|
+
(0, globals_1.expect)(entityDatas.get(new SingleFieldHolder_1.SingleFieldValueHolder('1'))).toHaveLength(1);
|
|
394
|
+
(0, globals_1.expect)(dbSpy).toHaveBeenCalled();
|
|
395
|
+
(0, globals_1.expect)(cacheSpy).not.toHaveBeenCalled();
|
|
396
|
+
dbSpy.mockReset();
|
|
397
|
+
cacheSpy.mockReset();
|
|
398
|
+
});
|
|
399
|
+
(0, globals_1.it)('loads by field equality conjunction and does not cache', async () => {
|
|
400
|
+
const objects = getObjects();
|
|
401
|
+
const dataStore = StubDatabaseAdapter_1.StubDatabaseAdapter.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
|
|
402
|
+
const databaseAdapter = new StubDatabaseAdapter_1.StubDatabaseAdapter(TestEntity_1.testEntityConfiguration, dataStore);
|
|
403
|
+
const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
|
|
404
|
+
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
|
|
405
|
+
const entityCache = new ReadThroughEntityCache_1.ReadThroughEntityCache(TestEntity_1.testEntityConfiguration, cacheAdapter);
|
|
406
|
+
const entityDataManager = new EntityDataManager_1.EntityDataManager(databaseAdapter, entityCache, new StubQueryContextProvider_1.StubQueryContextProvider(), new NoOpEntityMetricsAdapter_1.NoOpEntityMetricsAdapter(), TestEntity_1.TestEntity.name);
|
|
407
|
+
const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
|
|
408
|
+
const dbSpy = globals_1.jest.spyOn(databaseAdapter, 'fetchManyByFieldEqualityConjunctionAsync');
|
|
409
|
+
const cacheSpy = globals_1.jest.spyOn(entityCache, 'readManyThroughAsync');
|
|
410
|
+
const entityDatas = await entityDataManager.loadManyByFieldEqualityConjunctionAsync(queryContext, [
|
|
411
|
+
{
|
|
412
|
+
fieldName: 'stringField',
|
|
413
|
+
fieldValue: 'hello',
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
fieldName: 'intField',
|
|
417
|
+
fieldValue: 1,
|
|
418
|
+
},
|
|
419
|
+
], {});
|
|
420
|
+
(0, globals_1.expect)(entityDatas).toHaveLength(2);
|
|
421
|
+
(0, globals_1.expect)(dbSpy).toHaveBeenCalled();
|
|
422
|
+
(0, globals_1.expect)(cacheSpy).not.toHaveBeenCalled();
|
|
423
|
+
dbSpy.mockReset();
|
|
424
|
+
cacheSpy.mockReset();
|
|
425
|
+
});
|
|
426
|
+
(0, globals_1.it)('handles DB errors as expected', async () => {
|
|
427
|
+
const databaseAdapterMock = (0, ts_mockito_1.mock)();
|
|
428
|
+
(0, ts_mockito_1.when)(databaseAdapterMock.fetchManyWhereAsync((0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)())).thenReject(new Error('DB query failed'));
|
|
429
|
+
const databaseAdapter = (0, ts_mockito_1.instance)(databaseAdapterMock);
|
|
430
|
+
const cacheAdapterProvider = new StubCacheAdapter_1.NoCacheStubCacheAdapterProvider();
|
|
431
|
+
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
|
|
432
|
+
const entityCache = new ReadThroughEntityCache_1.ReadThroughEntityCache(TestEntity_1.testEntityConfiguration, cacheAdapter);
|
|
433
|
+
const entityDataManager = new EntityDataManager_1.EntityDataManager(databaseAdapter, entityCache, new StubQueryContextProvider_1.StubQueryContextProvider(), new NoOpEntityMetricsAdapter_1.NoOpEntityMetricsAdapter(), TestEntity_1.TestEntity.name);
|
|
434
|
+
const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
|
|
435
|
+
await (0, globals_1.expect)(entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('customIdField'), [new SingleFieldHolder_1.SingleFieldValueHolder('2')])).rejects.toThrow();
|
|
436
|
+
});
|
|
437
|
+
(0, globals_1.describe)('metrics', () => {
|
|
438
|
+
(0, globals_1.it)('records metrics appropriately outside of transactions', async () => {
|
|
439
|
+
const metricsAdapterMock = (0, ts_mockito_1.mock)();
|
|
440
|
+
const metricsAdapter = (0, ts_mockito_1.instance)(metricsAdapterMock);
|
|
441
|
+
const objects = getObjects();
|
|
442
|
+
const dataStore = StubDatabaseAdapter_1.StubDatabaseAdapter.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
|
|
443
|
+
const databaseAdapter = new StubDatabaseAdapter_1.StubDatabaseAdapter(TestEntity_1.testEntityConfiguration, dataStore);
|
|
444
|
+
const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
|
|
445
|
+
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
|
|
446
|
+
const entityCache = new ReadThroughEntityCache_1.ReadThroughEntityCache(TestEntity_1.testEntityConfiguration, cacheAdapter);
|
|
447
|
+
const entityDataManager = new EntityDataManager_1.EntityDataManager(databaseAdapter, entityCache, new StubQueryContextProvider_1.StubQueryContextProvider(), metricsAdapter, TestEntity_1.TestEntity.name);
|
|
448
|
+
const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
|
|
449
|
+
// make call to loadManyByFieldEqualingAsync to populate cache and dataloader, ensure metrics are recorded
|
|
450
|
+
// for dataloader, cache, and database
|
|
451
|
+
await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'), [new SingleFieldHolder_1.SingleFieldValueHolder('unique1')]);
|
|
452
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.logDataManagerLoadEvent((0, ts_mockito_1.deepEqual)({
|
|
453
|
+
type: IEntityMetricsAdapter_1.EntityMetricsLoadType.LOAD_MANY,
|
|
454
|
+
isInTransaction: false,
|
|
455
|
+
entityClassName: TestEntity_1.TestEntity.name,
|
|
456
|
+
duration: (0, ts_mockito_1.anyNumber)(),
|
|
457
|
+
count: 1,
|
|
458
|
+
}))).once();
|
|
459
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.incrementDataManagerLoadCount((0, ts_mockito_1.anything)())).thrice();
|
|
460
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.incrementDataManagerLoadCount((0, ts_mockito_1.deepEqual)({
|
|
461
|
+
type: IEntityMetricsAdapter_1.IncrementLoadCountEventType.DATALOADER,
|
|
462
|
+
isInTransaction: false,
|
|
463
|
+
fieldValueCount: 1,
|
|
464
|
+
entityClassName: TestEntity_1.TestEntity.name,
|
|
465
|
+
loadType: EntityLoadInterfaces_1.EntityLoadMethodType.SINGLE,
|
|
466
|
+
}))).once();
|
|
467
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.incrementDataManagerLoadCount((0, ts_mockito_1.deepEqual)({
|
|
468
|
+
type: IEntityMetricsAdapter_1.IncrementLoadCountEventType.CACHE,
|
|
469
|
+
isInTransaction: false,
|
|
470
|
+
fieldValueCount: 1,
|
|
471
|
+
entityClassName: TestEntity_1.TestEntity.name,
|
|
472
|
+
loadType: EntityLoadInterfaces_1.EntityLoadMethodType.SINGLE,
|
|
473
|
+
}))).once();
|
|
474
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.incrementDataManagerLoadCount((0, ts_mockito_1.deepEqual)({
|
|
475
|
+
type: IEntityMetricsAdapter_1.IncrementLoadCountEventType.DATABASE,
|
|
476
|
+
isInTransaction: false,
|
|
477
|
+
fieldValueCount: 1,
|
|
478
|
+
entityClassName: TestEntity_1.TestEntity.name,
|
|
479
|
+
loadType: EntityLoadInterfaces_1.EntityLoadMethodType.SINGLE,
|
|
480
|
+
}))).once();
|
|
481
|
+
(0, ts_mockito_1.resetCalls)(metricsAdapterMock);
|
|
482
|
+
// make second call to loadManyByFieldEqualingAsync, ensure metrics are only recorded for dataloader since
|
|
483
|
+
// entity is in local dataloader
|
|
484
|
+
await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'), [new SingleFieldHolder_1.SingleFieldValueHolder('unique1')]);
|
|
485
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.incrementDataManagerLoadCount((0, ts_mockito_1.anything)())).once();
|
|
486
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.incrementDataManagerLoadCount((0, ts_mockito_1.deepEqual)({
|
|
487
|
+
type: IEntityMetricsAdapter_1.IncrementLoadCountEventType.DATALOADER,
|
|
488
|
+
isInTransaction: false,
|
|
489
|
+
fieldValueCount: 1,
|
|
490
|
+
entityClassName: TestEntity_1.TestEntity.name,
|
|
491
|
+
loadType: EntityLoadInterfaces_1.EntityLoadMethodType.SINGLE,
|
|
492
|
+
}))).once();
|
|
493
|
+
(0, ts_mockito_1.resetCalls)(metricsAdapterMock);
|
|
494
|
+
// make third call in new data manager but query two keys, ensure only one of the keys is fetched
|
|
495
|
+
// from the database and the other is fetched from the cache
|
|
496
|
+
const entityCache2 = new ReadThroughEntityCache_1.ReadThroughEntityCache(TestEntity_1.testEntityConfiguration, cacheAdapter);
|
|
497
|
+
const entityDataManager2 = new EntityDataManager_1.EntityDataManager(databaseAdapter, entityCache2, new StubQueryContextProvider_1.StubQueryContextProvider(), metricsAdapter, TestEntity_1.TestEntity.name);
|
|
498
|
+
await entityDataManager2.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'), [new SingleFieldHolder_1.SingleFieldValueHolder('unique1'), new SingleFieldHolder_1.SingleFieldValueHolder('unique2')]);
|
|
499
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.incrementDataManagerLoadCount((0, ts_mockito_1.anything)())).thrice();
|
|
500
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.incrementDataManagerLoadCount((0, ts_mockito_1.deepEqual)({
|
|
501
|
+
type: IEntityMetricsAdapter_1.IncrementLoadCountEventType.DATALOADER,
|
|
502
|
+
isInTransaction: false,
|
|
503
|
+
fieldValueCount: 2,
|
|
504
|
+
entityClassName: TestEntity_1.TestEntity.name,
|
|
505
|
+
loadType: EntityLoadInterfaces_1.EntityLoadMethodType.SINGLE,
|
|
506
|
+
}))).once();
|
|
507
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.incrementDataManagerLoadCount((0, ts_mockito_1.deepEqual)({
|
|
508
|
+
type: IEntityMetricsAdapter_1.IncrementLoadCountEventType.CACHE,
|
|
509
|
+
isInTransaction: false,
|
|
510
|
+
fieldValueCount: 2,
|
|
511
|
+
entityClassName: TestEntity_1.TestEntity.name,
|
|
512
|
+
loadType: EntityLoadInterfaces_1.EntityLoadMethodType.SINGLE,
|
|
513
|
+
}))).once();
|
|
514
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.incrementDataManagerLoadCount((0, ts_mockito_1.deepEqual)({
|
|
515
|
+
type: IEntityMetricsAdapter_1.IncrementLoadCountEventType.DATABASE,
|
|
516
|
+
isInTransaction: false,
|
|
517
|
+
fieldValueCount: 1,
|
|
518
|
+
entityClassName: TestEntity_1.TestEntity.name,
|
|
519
|
+
loadType: EntityLoadInterfaces_1.EntityLoadMethodType.SINGLE,
|
|
520
|
+
}))).once();
|
|
521
|
+
(0, ts_mockito_1.resetCalls)(metricsAdapterMock);
|
|
522
|
+
await entityDataManager.loadManyByFieldEqualityConjunctionAsync(queryContext, [
|
|
523
|
+
{
|
|
524
|
+
fieldName: 'testIndexedField',
|
|
525
|
+
fieldValue: 'unique1',
|
|
526
|
+
},
|
|
527
|
+
], {});
|
|
528
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.logDataManagerLoadEvent((0, ts_mockito_1.deepEqual)({
|
|
529
|
+
type: IEntityMetricsAdapter_1.EntityMetricsLoadType.LOAD_MANY_EQUALITY_CONJUNCTION,
|
|
530
|
+
isInTransaction: false,
|
|
531
|
+
entityClassName: TestEntity_1.TestEntity.name,
|
|
532
|
+
duration: (0, ts_mockito_1.anyNumber)(),
|
|
533
|
+
count: 1,
|
|
534
|
+
}))).once();
|
|
535
|
+
(0, ts_mockito_1.resetCalls)(metricsAdapterMock);
|
|
536
|
+
const databaseAdapterSpy = (0, ts_mockito_1.spy)(databaseAdapter);
|
|
537
|
+
(0, ts_mockito_1.when)(databaseAdapterSpy.fetchManyByRawWhereClauseAsync((0, ts_mockito_1.anything)(), (0, ts_mockito_1.anyString)(), (0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)())).thenResolve([]);
|
|
538
|
+
await entityDataManager.loadManyByRawWhereClauseAsync(queryContext, '', [], {});
|
|
539
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.logDataManagerLoadEvent((0, ts_mockito_1.deepEqual)({
|
|
540
|
+
type: IEntityMetricsAdapter_1.EntityMetricsLoadType.LOAD_MANY_RAW,
|
|
541
|
+
isInTransaction: false,
|
|
542
|
+
entityClassName: TestEntity_1.TestEntity.name,
|
|
543
|
+
duration: (0, ts_mockito_1.anyNumber)(),
|
|
544
|
+
count: 0,
|
|
545
|
+
}))).once();
|
|
546
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.incrementDataManagerLoadCount((0, ts_mockito_1.anything)())).never();
|
|
547
|
+
});
|
|
548
|
+
(0, globals_1.it)('records metrics appropriately inside of transactions', async () => {
|
|
549
|
+
const metricsAdapterMock = (0, ts_mockito_1.mock)();
|
|
550
|
+
const metricsAdapter = (0, ts_mockito_1.instance)(metricsAdapterMock);
|
|
551
|
+
const objects = getObjects();
|
|
552
|
+
const dataStore = StubDatabaseAdapter_1.StubDatabaseAdapter.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
|
|
553
|
+
const databaseAdapter = new StubDatabaseAdapter_1.StubDatabaseAdapter(TestEntity_1.testEntityConfiguration, dataStore);
|
|
554
|
+
const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
|
|
555
|
+
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
|
|
556
|
+
const entityCache = new ReadThroughEntityCache_1.ReadThroughEntityCache(TestEntity_1.testEntityConfiguration, cacheAdapter);
|
|
557
|
+
const entityDataManager = new EntityDataManager_1.EntityDataManager(databaseAdapter, entityCache, new StubQueryContextProvider_1.StubQueryContextProvider(), metricsAdapter, TestEntity_1.TestEntity.name);
|
|
558
|
+
await new StubQueryContextProvider_1.StubQueryContextProvider().runInTransactionAsync(async (queryContext) => {
|
|
559
|
+
// make call to loadManyByFieldEqualingAsync to populate cache and dataloader, ensure metrics are recorded
|
|
560
|
+
// for dataloader, cache, and database
|
|
561
|
+
await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'), [new SingleFieldHolder_1.SingleFieldValueHolder('unique1')]);
|
|
562
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.logDataManagerLoadEvent((0, ts_mockito_1.deepEqual)({
|
|
563
|
+
type: IEntityMetricsAdapter_1.EntityMetricsLoadType.LOAD_MANY,
|
|
564
|
+
isInTransaction: true,
|
|
565
|
+
entityClassName: TestEntity_1.TestEntity.name,
|
|
566
|
+
duration: (0, ts_mockito_1.anyNumber)(),
|
|
567
|
+
count: 1,
|
|
568
|
+
}))).once();
|
|
569
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.incrementDataManagerLoadCount((0, ts_mockito_1.anything)())).twice();
|
|
570
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.incrementDataManagerLoadCount((0, ts_mockito_1.deepEqual)({
|
|
571
|
+
type: IEntityMetricsAdapter_1.IncrementLoadCountEventType.DATALOADER,
|
|
572
|
+
isInTransaction: true,
|
|
573
|
+
fieldValueCount: 1,
|
|
574
|
+
entityClassName: TestEntity_1.TestEntity.name,
|
|
575
|
+
loadType: EntityLoadInterfaces_1.EntityLoadMethodType.SINGLE,
|
|
576
|
+
}))).once();
|
|
577
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.incrementDataManagerLoadCount((0, ts_mockito_1.deepEqual)({
|
|
578
|
+
type: IEntityMetricsAdapter_1.IncrementLoadCountEventType.DATABASE,
|
|
579
|
+
isInTransaction: true,
|
|
580
|
+
fieldValueCount: 1,
|
|
581
|
+
entityClassName: TestEntity_1.TestEntity.name,
|
|
582
|
+
loadType: EntityLoadInterfaces_1.EntityLoadMethodType.SINGLE,
|
|
583
|
+
}))).once();
|
|
584
|
+
(0, ts_mockito_1.resetCalls)(metricsAdapterMock);
|
|
585
|
+
// make second call to loadManyByFieldEqualingAsync, ensure metrics are only recorded for dataloader since
|
|
586
|
+
// entity is in local dataloader
|
|
587
|
+
await entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('testIndexedField'), [new SingleFieldHolder_1.SingleFieldValueHolder('unique1')]);
|
|
588
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.incrementDataManagerLoadCount((0, ts_mockito_1.anything)())).once();
|
|
589
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.incrementDataManagerLoadCount((0, ts_mockito_1.deepEqual)({
|
|
590
|
+
type: IEntityMetricsAdapter_1.IncrementLoadCountEventType.DATALOADER,
|
|
591
|
+
isInTransaction: true,
|
|
592
|
+
fieldValueCount: 1,
|
|
593
|
+
entityClassName: TestEntity_1.TestEntity.name,
|
|
594
|
+
loadType: EntityLoadInterfaces_1.EntityLoadMethodType.SINGLE,
|
|
595
|
+
}))).once();
|
|
596
|
+
(0, ts_mockito_1.resetCalls)(metricsAdapterMock);
|
|
597
|
+
await entityDataManager.loadManyByFieldEqualityConjunctionAsync(queryContext, [
|
|
598
|
+
{
|
|
599
|
+
fieldName: 'testIndexedField',
|
|
600
|
+
fieldValue: 'unique1',
|
|
601
|
+
},
|
|
602
|
+
], {});
|
|
603
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.logDataManagerLoadEvent((0, ts_mockito_1.deepEqual)({
|
|
604
|
+
type: IEntityMetricsAdapter_1.EntityMetricsLoadType.LOAD_MANY_EQUALITY_CONJUNCTION,
|
|
605
|
+
isInTransaction: true,
|
|
606
|
+
entityClassName: TestEntity_1.TestEntity.name,
|
|
607
|
+
duration: (0, ts_mockito_1.anyNumber)(),
|
|
608
|
+
count: 1,
|
|
609
|
+
}))).once();
|
|
610
|
+
(0, ts_mockito_1.resetCalls)(metricsAdapterMock);
|
|
611
|
+
const databaseAdapterSpy = (0, ts_mockito_1.spy)(databaseAdapter);
|
|
612
|
+
(0, ts_mockito_1.when)(databaseAdapterSpy.fetchManyByRawWhereClauseAsync((0, ts_mockito_1.anything)(), (0, ts_mockito_1.anyString)(), (0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)())).thenResolve([]);
|
|
613
|
+
await entityDataManager.loadManyByRawWhereClauseAsync(queryContext, '', [], {});
|
|
614
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.logDataManagerLoadEvent((0, ts_mockito_1.deepEqual)({
|
|
615
|
+
type: IEntityMetricsAdapter_1.EntityMetricsLoadType.LOAD_MANY_RAW,
|
|
616
|
+
isInTransaction: true,
|
|
617
|
+
entityClassName: TestEntity_1.TestEntity.name,
|
|
618
|
+
duration: (0, ts_mockito_1.anyNumber)(),
|
|
619
|
+
count: 0,
|
|
620
|
+
}))).once();
|
|
621
|
+
(0, ts_mockito_1.verify)(metricsAdapterMock.incrementDataManagerLoadCount((0, ts_mockito_1.anything)())).never();
|
|
622
|
+
});
|
|
623
|
+
});
|
|
624
|
+
});
|
|
625
|
+
(0, globals_1.it)('throws when a single value load-by value is null or undefined', async () => {
|
|
626
|
+
const objects = getObjects();
|
|
627
|
+
const dataStore = StubDatabaseAdapter_1.StubDatabaseAdapter.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
|
|
628
|
+
const databaseAdapter = new StubDatabaseAdapter_1.StubDatabaseAdapter(TestEntity_1.testEntityConfiguration, dataStore);
|
|
629
|
+
const cacheAdapterProvider = new StubCacheAdapter_1.NoCacheStubCacheAdapterProvider();
|
|
630
|
+
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
|
|
631
|
+
const entityCache = new ReadThroughEntityCache_1.ReadThroughEntityCache(TestEntity_1.testEntityConfiguration, cacheAdapter);
|
|
632
|
+
const entityDataManager = new EntityDataManager_1.EntityDataManager(databaseAdapter, entityCache, new StubQueryContextProvider_1.StubQueryContextProvider(), new NoOpEntityMetricsAdapter_1.NoOpEntityMetricsAdapter(), TestEntity_1.TestEntity.name);
|
|
633
|
+
const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
|
|
634
|
+
await (0, globals_1.expect)(entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('nullableField'), [new SingleFieldHolder_1.SingleFieldValueHolder(null)])).rejects.toThrow('Invalid load: TestEntity (nullableField = null)');
|
|
635
|
+
await (0, globals_1.expect)(entityDataManager.loadManyEqualingAsync(queryContext, new SingleFieldHolder_1.SingleFieldHolder('nullableField'), [new SingleFieldHolder_1.SingleFieldValueHolder(undefined)])).rejects.toThrow('Invalid load: TestEntity (nullableField = undefined)');
|
|
636
|
+
});
|
|
637
|
+
(0, globals_1.it)('throws when a composite value load-by value is null or undefined', async () => {
|
|
638
|
+
const objects = getObjects();
|
|
639
|
+
const dataStore = StubDatabaseAdapter_1.StubDatabaseAdapter.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
|
|
640
|
+
const databaseAdapter = new StubDatabaseAdapter_1.StubDatabaseAdapter(TestEntity_1.testEntityConfiguration, dataStore);
|
|
641
|
+
const cacheAdapterProvider = new StubCacheAdapter_1.NoCacheStubCacheAdapterProvider();
|
|
642
|
+
const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
|
|
643
|
+
const entityCache = new ReadThroughEntityCache_1.ReadThroughEntityCache(TestEntity_1.testEntityConfiguration, cacheAdapter);
|
|
644
|
+
const entityDataManager = new EntityDataManager_1.EntityDataManager(databaseAdapter, entityCache, new StubQueryContextProvider_1.StubQueryContextProvider(), new NoOpEntityMetricsAdapter_1.NoOpEntityMetricsAdapter(), TestEntity_1.TestEntity.name);
|
|
645
|
+
const queryContext = new StubQueryContextProvider_1.StubQueryContextProvider().getQueryContext();
|
|
646
|
+
await (0, globals_1.expect)(entityDataManager.loadManyEqualingAsync(queryContext, new CompositeFieldHolder_1.CompositeFieldHolder([
|
|
647
|
+
'nullableField',
|
|
648
|
+
'testIndexedField',
|
|
649
|
+
]), [
|
|
650
|
+
new CompositeFieldHolder_1.CompositeFieldValueHolder({
|
|
651
|
+
nullableField: null,
|
|
652
|
+
testIndexedField: 'unique1',
|
|
653
|
+
}),
|
|
654
|
+
])).rejects.toThrow('Invalid load: TestEntity (nullableField,testIndexedField = CompositeFieldValue(nullableField=null,testIndexedField=unique1))');
|
|
655
|
+
await (0, globals_1.expect)(entityDataManager.loadManyEqualingAsync(queryContext, new CompositeFieldHolder_1.CompositeFieldHolder([
|
|
656
|
+
'nullableField',
|
|
657
|
+
'testIndexedField',
|
|
658
|
+
]), [
|
|
659
|
+
new CompositeFieldHolder_1.CompositeFieldValueHolder({
|
|
660
|
+
nullableField: undefined,
|
|
661
|
+
testIndexedField: 'unique1',
|
|
662
|
+
}),
|
|
663
|
+
])).rejects.toThrow('Invalid load: TestEntity (nullableField,testIndexedField = CompositeFieldValue(nullableField=undefined,testIndexedField=unique1))');
|
|
664
|
+
});
|
|
665
|
+
});
|
|
666
|
+
//# sourceMappingURL=EntityDataManager-test.js.map
|