@expo/entity 0.45.0 → 0.47.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} +15 -13
- package/build/{AuthorizationResultBasedEntityMutator.js → src/AuthorizationResultBasedEntityMutator.js} +77 -39
- 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} +5 -7
- 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/{EntityFields.d.ts → src/EntityFields.d.ts} +7 -0
- package/build/{EntityFields.js → src/EntityFields.js} +11 -1
- 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} +15 -14
- package/build/{EntityMutatorFactory.js → src/EntityMutatorFactory.js} +6 -5
- 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} +5 -7
- 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} +9 -8
- package/build/{ViewerScopedEntityMutatorFactory.js → src/ViewerScopedEntityMutatorFactory.js} +6 -5
- package/build/src/ViewerScopedEntityMutatorFactory.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/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/{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/{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/collections/SerializableKeyMap.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/package.json +14 -24
- package/src/AuthorizationResultBasedEntityAssociationLoader.ts +4 -4
- package/src/AuthorizationResultBasedEntityLoader.ts +13 -12
- package/src/AuthorizationResultBasedEntityMutator.ts +78 -63
- 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 +6 -6
- package/src/EntityFieldDefinition.ts +3 -3
- package/src/EntityFields.ts +13 -0
- 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 +17 -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 +6 -6
- 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 +11 -8
- 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 +15 -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 +250 -45
- 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/LICENSE +0 -21
- 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/{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
|
@@ -1,37 +1,40 @@
|
|
|
1
|
+
import { describe, expect, it, jest } from '@jest/globals';
|
|
1
2
|
import {
|
|
2
|
-
|
|
3
|
-
instance,
|
|
4
|
-
when,
|
|
5
|
-
anything,
|
|
6
|
-
verify,
|
|
7
|
-
spy,
|
|
3
|
+
anyNumber,
|
|
8
4
|
anyString,
|
|
9
|
-
|
|
5
|
+
anything,
|
|
10
6
|
deepEqual,
|
|
11
|
-
|
|
7
|
+
instance,
|
|
8
|
+
mock,
|
|
9
|
+
resetCalls,
|
|
10
|
+
spy,
|
|
11
|
+
verify,
|
|
12
|
+
when,
|
|
12
13
|
} from 'ts-mockito';
|
|
13
14
|
|
|
14
|
-
import EntityDatabaseAdapter from '../../EntityDatabaseAdapter';
|
|
15
|
+
import { EntityDatabaseAdapter } from '../../EntityDatabaseAdapter';
|
|
15
16
|
import { TransactionalDataLoaderMode } from '../../EntityQueryContext';
|
|
16
|
-
import
|
|
17
|
+
import {
|
|
17
18
|
EntityMetricsLoadType,
|
|
19
|
+
IEntityMetricsAdapter,
|
|
18
20
|
IncrementLoadCountEventType,
|
|
19
21
|
} from '../../metrics/IEntityMetricsAdapter';
|
|
20
|
-
import NoOpEntityMetricsAdapter from '../../metrics/NoOpEntityMetricsAdapter';
|
|
22
|
+
import { NoOpEntityMetricsAdapter } from '../../metrics/NoOpEntityMetricsAdapter';
|
|
21
23
|
import {
|
|
22
|
-
NoCacheStubCacheAdapterProvider,
|
|
23
24
|
InMemoryFullCacheStubCacheAdapterProvider,
|
|
25
|
+
NoCacheStubCacheAdapterProvider,
|
|
24
26
|
} from '../../utils/__testfixtures__/StubCacheAdapter';
|
|
25
|
-
import StubDatabaseAdapter from '../../utils/__testfixtures__/StubDatabaseAdapter';
|
|
26
|
-
import StubQueryContextProvider from '../../utils/__testfixtures__/StubQueryContextProvider';
|
|
27
|
-
import
|
|
27
|
+
import { StubDatabaseAdapter } from '../../utils/__testfixtures__/StubDatabaseAdapter';
|
|
28
|
+
import { StubQueryContextProvider } from '../../utils/__testfixtures__/StubQueryContextProvider';
|
|
29
|
+
import {
|
|
30
|
+
TestEntity,
|
|
28
31
|
testEntityConfiguration,
|
|
29
32
|
TestFields,
|
|
30
33
|
} from '../../utils/__testfixtures__/TestEntity';
|
|
31
34
|
import { CompositeFieldHolder, CompositeFieldValueHolder } from '../CompositeFieldHolder';
|
|
32
|
-
import EntityDataManager from '../EntityDataManager';
|
|
35
|
+
import { EntityDataManager } from '../EntityDataManager';
|
|
33
36
|
import { EntityLoadMethodType } from '../EntityLoadInterfaces';
|
|
34
|
-
import ReadThroughEntityCache from '../ReadThroughEntityCache';
|
|
37
|
+
import { ReadThroughEntityCache } from '../ReadThroughEntityCache';
|
|
35
38
|
import { SingleFieldHolder, SingleFieldValueHolder } from '../SingleFieldHolder';
|
|
36
39
|
|
|
37
40
|
const getObjects = (): Map<string, TestFields[]> =>
|
|
@@ -303,7 +306,7 @@ describe(EntityDataManager, () => {
|
|
|
303
306
|
expect(dbSpy).toHaveBeenCalledTimes(1);
|
|
304
307
|
expect(cacheSpy).toHaveBeenCalledTimes(1);
|
|
305
308
|
|
|
306
|
-
expect(entityData).
|
|
309
|
+
expect(entityData).toEqual(entityData2);
|
|
307
310
|
expect(entityData.get(new SingleFieldValueHolder('hello'))).toHaveLength(2);
|
|
308
311
|
expect(entityData.get(new SingleFieldValueHolder('world'))).toHaveLength(1);
|
|
309
312
|
|
|
@@ -378,9 +381,9 @@ describe(EntityDataManager, () => {
|
|
|
378
381
|
expect(dbSpy).toHaveBeenCalledTimes(3);
|
|
379
382
|
expect(cacheSpy).toHaveBeenCalledTimes(0);
|
|
380
383
|
|
|
381
|
-
expect(entityData).
|
|
382
|
-
expect(entityData2).
|
|
383
|
-
expect(entityData3).
|
|
384
|
+
expect(entityData).toEqual(entityData2);
|
|
385
|
+
expect(entityData2).toEqual(entityData3);
|
|
386
|
+
expect(entityData3).toEqual(entityData4);
|
|
384
387
|
expect(entityData.get(new SingleFieldValueHolder('hello'))).toHaveLength(2);
|
|
385
388
|
expect(entityData.get(new SingleFieldValueHolder('world'))).toHaveLength(1);
|
|
386
389
|
|
|
@@ -453,9 +456,9 @@ describe(EntityDataManager, () => {
|
|
|
453
456
|
expect(dbSpy).toHaveBeenCalledTimes(3);
|
|
454
457
|
expect(cacheSpy).toHaveBeenCalledTimes(0);
|
|
455
458
|
|
|
456
|
-
expect(entityData).
|
|
457
|
-
expect(entityData2).
|
|
458
|
-
expect(entityData3).
|
|
459
|
+
expect(entityData).toEqual(entityData2);
|
|
460
|
+
expect(entityData2).toEqual(entityData3);
|
|
461
|
+
expect(entityData3).toEqual(entityData4);
|
|
459
462
|
expect(entityData.get(new SingleFieldValueHolder('hello'))).toHaveLength(2);
|
|
460
463
|
expect(entityData.get(new SingleFieldValueHolder('world'))).toHaveLength(1);
|
|
461
464
|
|
|
@@ -532,9 +535,9 @@ describe(EntityDataManager, () => {
|
|
|
532
535
|
expect(dbSpy).toHaveBeenCalledTimes(4);
|
|
533
536
|
expect(cacheSpy).toHaveBeenCalledTimes(0);
|
|
534
537
|
|
|
535
|
-
expect(entityData).
|
|
536
|
-
expect(entityData2).
|
|
537
|
-
expect(entityData3).
|
|
538
|
+
expect(entityData).toEqual(entityData2);
|
|
539
|
+
expect(entityData2).toEqual(entityData3);
|
|
540
|
+
expect(entityData3).toEqual(entityData4);
|
|
538
541
|
expect(entityData.get(new SingleFieldValueHolder('hello'))).toHaveLength(2);
|
|
539
542
|
expect(entityData.get(new SingleFieldValueHolder('world'))).toHaveLength(1);
|
|
540
543
|
|
|
@@ -1273,7 +1276,7 @@ describe(EntityDataManager, () => {
|
|
|
1273
1276
|
new SingleFieldHolder('nullableField'),
|
|
1274
1277
|
[new SingleFieldValueHolder(null as any)],
|
|
1275
1278
|
),
|
|
1276
|
-
).rejects.
|
|
1279
|
+
).rejects.toThrow('Invalid load: TestEntity (nullableField = null)');
|
|
1277
1280
|
|
|
1278
1281
|
await expect(
|
|
1279
1282
|
entityDataManager.loadManyEqualingAsync(
|
|
@@ -1281,7 +1284,7 @@ describe(EntityDataManager, () => {
|
|
|
1281
1284
|
new SingleFieldHolder('nullableField'),
|
|
1282
1285
|
[new SingleFieldValueHolder(undefined as any)],
|
|
1283
1286
|
),
|
|
1284
|
-
).rejects.
|
|
1287
|
+
).rejects.toThrow('Invalid load: TestEntity (nullableField = undefined)');
|
|
1285
1288
|
});
|
|
1286
1289
|
|
|
1287
1290
|
it('throws when a composite value load-by value is null or undefined', async () => {
|
|
@@ -1320,7 +1323,7 @@ describe(EntityDataManager, () => {
|
|
|
1320
1323
|
}),
|
|
1321
1324
|
],
|
|
1322
1325
|
),
|
|
1323
|
-
).rejects.
|
|
1326
|
+
).rejects.toThrow(
|
|
1324
1327
|
'Invalid load: TestEntity (nullableField,testIndexedField = CompositeFieldValue(nullableField=null,testIndexedField=unique1))',
|
|
1325
1328
|
);
|
|
1326
1329
|
|
|
@@ -1338,7 +1341,7 @@ describe(EntityDataManager, () => {
|
|
|
1338
1341
|
}),
|
|
1339
1342
|
],
|
|
1340
1343
|
),
|
|
1341
|
-
).rejects.
|
|
1344
|
+
).rejects.toThrow(
|
|
1342
1345
|
'Invalid load: TestEntity (nullableField,testIndexedField = CompositeFieldValue(nullableField=undefined,testIndexedField=unique1))',
|
|
1343
1346
|
);
|
|
1344
1347
|
});
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { describe, expect, it } from '@jest/globals';
|
|
2
|
+
|
|
3
|
+
import { EntityConfiguration } from '../../EntityConfiguration';
|
|
2
4
|
import { StringField, UUIDField } from '../../EntityFields';
|
|
3
5
|
import {
|
|
4
6
|
getDatabaseFieldForEntityField,
|
|
5
|
-
transformDatabaseObjectToFields,
|
|
6
|
-
transformFieldsToDatabaseObject,
|
|
7
7
|
transformCacheObjectToFields,
|
|
8
|
+
transformDatabaseObjectToFields,
|
|
8
9
|
transformFieldsToCacheObject,
|
|
10
|
+
transformFieldsToDatabaseObject,
|
|
9
11
|
} from '../EntityFieldTransformationUtils';
|
|
10
12
|
|
|
11
13
|
type BlahT = {
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { describe, expect, it, jest } from '@jest/globals';
|
|
2
|
+
import { anything, instance, mock, verify, when } from 'ts-mockito';
|
|
2
3
|
|
|
3
|
-
import EntityConfiguration from '../../EntityConfiguration';
|
|
4
|
+
import { EntityConfiguration } from '../../EntityConfiguration';
|
|
4
5
|
import { UUIDField } from '../../EntityFields';
|
|
5
|
-
import IEntityCacheAdapter from '../../IEntityCacheAdapter';
|
|
6
|
+
import { IEntityCacheAdapter } from '../../IEntityCacheAdapter';
|
|
6
7
|
import {
|
|
7
8
|
deepEqualEntityAware,
|
|
8
9
|
isEqualWithEntityAware,
|
|
9
10
|
} from '../../utils/__testfixtures__/TSMockitoExtensions';
|
|
10
|
-
import
|
|
11
|
+
import { CacheStatus, ReadThroughEntityCache } from '../ReadThroughEntityCache';
|
|
11
12
|
import {
|
|
12
13
|
SingleFieldHolder,
|
|
13
14
|
SingleFieldValueHolder,
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { EntityQueryContext } from '../EntityQueryContext';
|
|
2
|
+
import {
|
|
2
3
|
EntityMetricsLoadType,
|
|
3
4
|
EntityMetricsMutationType,
|
|
5
|
+
IEntityMetricsAdapter,
|
|
4
6
|
} from './IEntityMetricsAdapter';
|
|
5
|
-
import { EntityQueryContext } from '../EntityQueryContext';
|
|
6
7
|
import { IEntityLoadValue } from '../internal/EntityLoadInterfaces';
|
|
7
8
|
import { reduceMap } from '../utils/collections/maps';
|
|
8
9
|
|
|
@@ -150,7 +150,7 @@ export interface EntityMetricsAuthorizationEvent {
|
|
|
150
150
|
* An interface for gathering metrics about the Entity framework. Information about
|
|
151
151
|
* entity load and mutation operations is piped to an instance of this adapter.
|
|
152
152
|
*/
|
|
153
|
-
export
|
|
153
|
+
export interface IEntityMetricsAdapter {
|
|
154
154
|
/**
|
|
155
155
|
* Called when a EntityPrivacyPolicy authorization succeeds or fails.
|
|
156
156
|
* @param authorizationEvent - info about the authorization event
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import
|
|
1
|
+
import {
|
|
2
2
|
EntityMetricsAuthorizationEvent,
|
|
3
3
|
EntityMetricsLoadEvent,
|
|
4
4
|
EntityMetricsMutationEvent,
|
|
5
|
+
IEntityMetricsAdapter,
|
|
5
6
|
IncrementLoadCountEvent,
|
|
6
7
|
} from './IEntityMetricsAdapter';
|
|
7
8
|
|
|
8
|
-
export
|
|
9
|
+
export class NoOpEntityMetricsAdapter implements IEntityMetricsAdapter {
|
|
9
10
|
logAuthorizationEvent(_authorizationEvent: EntityMetricsAuthorizationEvent): void {}
|
|
10
11
|
logDataManagerLoadEvent(_loadEvent: EntityMetricsLoadEvent): void {}
|
|
11
12
|
logMutatorMutationEvent(_mutationEvent: EntityMetricsMutationEvent): void {}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import PrivacyPolicyRule, { RuleEvaluationResult } from './PrivacyPolicyRule';
|
|
2
1
|
import { EntityPrivacyPolicyEvaluationContext } from '../EntityPrivacyPolicy';
|
|
3
2
|
import { EntityQueryContext } from '../EntityQueryContext';
|
|
4
|
-
import ReadonlyEntity from '../ReadonlyEntity';
|
|
5
|
-
import ViewerContext from '../ViewerContext';
|
|
3
|
+
import { ReadonlyEntity } from '../ReadonlyEntity';
|
|
4
|
+
import { ViewerContext } from '../ViewerContext';
|
|
5
|
+
import { PrivacyPolicyRule, RuleEvaluationResult } from './PrivacyPolicyRule';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Privacy policy rule that always allows.
|
|
9
9
|
*/
|
|
10
|
-
export
|
|
10
|
+
export class AlwaysAllowPrivacyPolicyRule<
|
|
11
11
|
TFields extends Record<string, any>,
|
|
12
12
|
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
13
13
|
TViewerContext extends ViewerContext,
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import PrivacyPolicyRule, { RuleEvaluationResult } from './PrivacyPolicyRule';
|
|
2
1
|
import { EntityPrivacyPolicyEvaluationContext } from '../EntityPrivacyPolicy';
|
|
3
2
|
import { EntityQueryContext } from '../EntityQueryContext';
|
|
4
|
-
import ReadonlyEntity from '../ReadonlyEntity';
|
|
5
|
-
import ViewerContext from '../ViewerContext';
|
|
3
|
+
import { ReadonlyEntity } from '../ReadonlyEntity';
|
|
4
|
+
import { ViewerContext } from '../ViewerContext';
|
|
5
|
+
import { PrivacyPolicyRule, RuleEvaluationResult } from './PrivacyPolicyRule';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Privacy policy rule that always denies.
|
|
9
9
|
*/
|
|
10
|
-
export
|
|
10
|
+
export class AlwaysDenyPrivacyPolicyRule<
|
|
11
11
|
TFields extends Record<string, any>,
|
|
12
12
|
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
13
13
|
TViewerContext extends ViewerContext,
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import PrivacyPolicyRule, { RuleEvaluationResult } from './PrivacyPolicyRule';
|
|
2
1
|
import { EntityPrivacyPolicyEvaluationContext } from '../EntityPrivacyPolicy';
|
|
3
2
|
import { EntityQueryContext } from '../EntityQueryContext';
|
|
4
|
-
import ReadonlyEntity from '../ReadonlyEntity';
|
|
5
|
-
import ViewerContext from '../ViewerContext';
|
|
3
|
+
import { ReadonlyEntity } from '../ReadonlyEntity';
|
|
4
|
+
import { ViewerContext } from '../ViewerContext';
|
|
5
|
+
import { PrivacyPolicyRule, RuleEvaluationResult } from './PrivacyPolicyRule';
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* A no-op policy rule that always skips.
|
|
9
9
|
*/
|
|
10
|
-
export
|
|
10
|
+
export class AlwaysSkipPrivacyPolicyRule<
|
|
11
11
|
TFields extends Record<string, any>,
|
|
12
12
|
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
13
13
|
TViewerContext extends ViewerContext,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EntityPrivacyPolicyEvaluationContext } from '../EntityPrivacyPolicy';
|
|
2
2
|
import { EntityQueryContext } from '../EntityQueryContext';
|
|
3
|
-
import ReadonlyEntity from '../ReadonlyEntity';
|
|
4
|
-
import ViewerContext from '../ViewerContext';
|
|
3
|
+
import { ReadonlyEntity } from '../ReadonlyEntity';
|
|
4
|
+
import { ViewerContext } from '../ViewerContext';
|
|
5
5
|
|
|
6
6
|
export enum RuleEvaluationResult {
|
|
7
7
|
/**
|
|
@@ -36,7 +36,7 @@ export enum RuleEvaluationResult {
|
|
|
36
36
|
* - Blocking. For example, a user blocks another user from seeing their posts, and the rule
|
|
37
37
|
* would be named something like `DenyIfViewerHasBeenBlockedPrivacyPolicyRule`.
|
|
38
38
|
*/
|
|
39
|
-
export
|
|
39
|
+
export abstract class PrivacyPolicyRule<
|
|
40
40
|
TFields extends Record<string, any>,
|
|
41
41
|
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
42
42
|
TViewerContext extends ViewerContext,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { anything, instance, mock } from 'ts-mockito';
|
|
2
2
|
|
|
3
3
|
import { EntityPrivacyPolicyEvaluationContext } from '../../EntityPrivacyPolicy';
|
|
4
4
|
import { EntityQueryContext } from '../../EntityQueryContext';
|
|
5
|
-
import ViewerContext from '../../ViewerContext';
|
|
5
|
+
import { ViewerContext } from '../../ViewerContext';
|
|
6
6
|
import { describePrivacyPolicyRule } from '../../utils/__testfixtures__/PrivacyPolicyRuleTestUtils';
|
|
7
|
-
import AlwaysAllowPrivacyPolicyRule from '../AlwaysAllowPrivacyPolicyRule';
|
|
7
|
+
import { AlwaysAllowPrivacyPolicyRule } from '../AlwaysAllowPrivacyPolicyRule';
|
|
8
8
|
|
|
9
9
|
describePrivacyPolicyRule(new AlwaysAllowPrivacyPolicyRule(), {
|
|
10
10
|
allowCases: [
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { anything, instance, mock } from 'ts-mockito';
|
|
2
2
|
|
|
3
3
|
import { EntityPrivacyPolicyEvaluationContext } from '../../EntityPrivacyPolicy';
|
|
4
4
|
import { EntityQueryContext } from '../../EntityQueryContext';
|
|
5
|
-
import ViewerContext from '../../ViewerContext';
|
|
5
|
+
import { ViewerContext } from '../../ViewerContext';
|
|
6
6
|
import { describePrivacyPolicyRule } from '../../utils/__testfixtures__/PrivacyPolicyRuleTestUtils';
|
|
7
|
-
import AlwaysDenyPrivacyPolicyRule from '../AlwaysDenyPrivacyPolicyRule';
|
|
7
|
+
import { AlwaysDenyPrivacyPolicyRule } from '../AlwaysDenyPrivacyPolicyRule';
|
|
8
8
|
|
|
9
9
|
describePrivacyPolicyRule(new AlwaysDenyPrivacyPolicyRule(), {
|
|
10
10
|
denyCases: [
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { anything, instance, mock } from 'ts-mockito';
|
|
2
2
|
|
|
3
3
|
import { EntityPrivacyPolicyEvaluationContext } from '../../EntityPrivacyPolicy';
|
|
4
4
|
import { EntityQueryContext } from '../../EntityQueryContext';
|
|
5
|
-
import ViewerContext from '../../ViewerContext';
|
|
5
|
+
import { ViewerContext } from '../../ViewerContext';
|
|
6
6
|
import { describePrivacyPolicyRule } from '../../utils/__testfixtures__/PrivacyPolicyRuleTestUtils';
|
|
7
|
-
import AlwaysSkipPrivacyPolicyRule from '../AlwaysSkipPrivacyPolicyRule';
|
|
7
|
+
import { AlwaysSkipPrivacyPolicyRule } from '../AlwaysSkipPrivacyPolicyRule';
|
|
8
8
|
|
|
9
9
|
describePrivacyPolicyRule(new AlwaysSkipPrivacyPolicyRule(), {
|
|
10
10
|
skipCases: [
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { IEntityClass } from '../Entity';
|
|
2
|
-
import EntityPrivacyPolicy from '../EntityPrivacyPolicy';
|
|
2
|
+
import { EntityPrivacyPolicy } from '../EntityPrivacyPolicy';
|
|
3
3
|
import { EntityTransactionalQueryContext } from '../EntityQueryContext';
|
|
4
|
-
import ReadonlyEntity from '../ReadonlyEntity';
|
|
5
|
-
import ViewerContext from '../ViewerContext';
|
|
4
|
+
import { ReadonlyEntity } from '../ReadonlyEntity';
|
|
5
|
+
import { ViewerContext } from '../ViewerContext';
|
|
6
6
|
import { EntityDatabaseAdapterUniqueConstraintError } from '../errors/EntityDatabaseAdapterError';
|
|
7
|
-
import EntityNotFoundError from '../errors/EntityNotFoundError';
|
|
7
|
+
import { EntityNotFoundError } from '../errors/EntityNotFoundError';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Create an entity if it doesn't exist, or get the existing entity if it does.
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import { Result, asyncResult } from '@expo/results';
|
|
2
2
|
|
|
3
|
-
import Entity,
|
|
3
|
+
import { Entity, IEntityClass } from '../Entity';
|
|
4
4
|
import {
|
|
5
|
-
EntityEdgeDeletionBehavior,
|
|
6
5
|
EntityEdgeDeletionAuthorizationInferenceBehavior,
|
|
6
|
+
EntityEdgeDeletionBehavior,
|
|
7
7
|
} from '../EntityFieldDefinition';
|
|
8
8
|
import { EntityCascadingDeletionInfo } from '../EntityMutationInfo';
|
|
9
|
-
import EntityPrivacyPolicy from '../EntityPrivacyPolicy';
|
|
9
|
+
import { EntityPrivacyPolicy } from '../EntityPrivacyPolicy';
|
|
10
10
|
import { EntityQueryContext } from '../EntityQueryContext';
|
|
11
|
-
import ViewerContext from '../ViewerContext';
|
|
11
|
+
import { ViewerContext } from '../ViewerContext';
|
|
12
12
|
import { failedResults, partitionArray } from '../entityUtils';
|
|
13
|
-
import EntityNotAuthorizedError from '../errors/EntityNotAuthorizedError';
|
|
13
|
+
import { EntityNotAuthorizedError } from '../errors/EntityNotAuthorizedError';
|
|
14
14
|
|
|
15
15
|
export type EntityPrivacyEvaluationResultSuccess = {
|
|
16
16
|
allowed: true;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
+
import { describe, expect, test } from '@jest/globals';
|
|
2
|
+
|
|
1
3
|
import { EntityPrivacyPolicyEvaluationContext } from '../../EntityPrivacyPolicy';
|
|
2
4
|
import { EntityQueryContext } from '../../EntityQueryContext';
|
|
3
|
-
import ReadonlyEntity from '../../ReadonlyEntity';
|
|
4
|
-
import ViewerContext from '../../ViewerContext';
|
|
5
|
-
import PrivacyPolicyRule,
|
|
5
|
+
import { ReadonlyEntity } from '../../ReadonlyEntity';
|
|
6
|
+
import { ViewerContext } from '../../ViewerContext';
|
|
7
|
+
import { PrivacyPolicyRule, RuleEvaluationResult } from '../../rules/PrivacyPolicyRule';
|
|
6
8
|
|
|
7
9
|
export interface Case<
|
|
8
10
|
TFields extends Record<string, any>,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import Entity from '../../Entity';
|
|
1
|
+
import { Entity } from '../../Entity';
|
|
2
2
|
import { EntityCompanionDefinition } from '../../EntityCompanionProvider';
|
|
3
|
-
import EntityConfiguration from '../../EntityConfiguration';
|
|
3
|
+
import { EntityConfiguration } from '../../EntityConfiguration';
|
|
4
4
|
import { UUIDField } from '../../EntityFields';
|
|
5
|
-
import EntityPrivacyPolicy from '../../EntityPrivacyPolicy';
|
|
6
|
-
import ViewerContext from '../../ViewerContext';
|
|
7
|
-
import AlwaysAllowPrivacyPolicyRule from '../../rules/AlwaysAllowPrivacyPolicyRule';
|
|
5
|
+
import { EntityPrivacyPolicy } from '../../EntityPrivacyPolicy';
|
|
6
|
+
import { ViewerContext } from '../../ViewerContext';
|
|
7
|
+
import { AlwaysAllowPrivacyPolicyRule } from '../../rules/AlwaysAllowPrivacyPolicyRule';
|
|
8
8
|
|
|
9
9
|
export type SimpleTestFields = {
|
|
10
10
|
id: string;
|
|
@@ -70,7 +70,7 @@ export class SimpleTestEntityPrivacyPolicy extends EntityPrivacyPolicy<
|
|
|
70
70
|
];
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
export
|
|
73
|
+
export class SimpleTestEntity extends Entity<
|
|
74
74
|
SimpleTestFields,
|
|
75
75
|
'id',
|
|
76
76
|
ViewerContext,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import invariant from 'invariant';
|
|
2
2
|
|
|
3
|
-
import EntityConfiguration from '../../EntityConfiguration';
|
|
4
|
-
import IEntityCacheAdapter from '../../IEntityCacheAdapter';
|
|
5
|
-
import IEntityCacheAdapterProvider from '../../IEntityCacheAdapterProvider';
|
|
3
|
+
import { EntityConfiguration } from '../../EntityConfiguration';
|
|
4
|
+
import { IEntityCacheAdapter } from '../../IEntityCacheAdapter';
|
|
5
|
+
import { IEntityCacheAdapterProvider } from '../../IEntityCacheAdapterProvider';
|
|
6
6
|
import { IEntityLoadKey, IEntityLoadValue } from '../../internal/EntityLoadInterfaces';
|
|
7
|
-
import {
|
|
7
|
+
import { CacheLoadResult, CacheStatus } from '../../internal/ReadThroughEntityCache';
|
|
8
8
|
|
|
9
9
|
export class NoCacheStubCacheAdapterProvider implements IEntityCacheAdapterProvider {
|
|
10
10
|
getCacheAdapter<TFields extends Record<string, any>, TIDField extends keyof TFields>(
|
|
@@ -1,22 +1,23 @@
|
|
|
1
1
|
import invariant from 'invariant';
|
|
2
2
|
import { uuidv7 } from 'uuidv7';
|
|
3
3
|
|
|
4
|
-
import EntityConfiguration from '../../EntityConfiguration';
|
|
5
|
-
import
|
|
6
|
-
|
|
4
|
+
import { EntityConfiguration } from '../../EntityConfiguration';
|
|
5
|
+
import {
|
|
6
|
+
EntityDatabaseAdapter,
|
|
7
|
+
OrderByOrdering,
|
|
7
8
|
TableFieldMultiValueEqualityCondition,
|
|
9
|
+
TableFieldSingleValueEqualityCondition,
|
|
8
10
|
TableQuerySelectionModifiers,
|
|
9
|
-
OrderByOrdering,
|
|
10
11
|
} from '../../EntityDatabaseAdapter';
|
|
11
|
-
import {
|
|
12
|
+
import { IntField, StringField } from '../../EntityFields';
|
|
12
13
|
import {
|
|
13
|
-
getDatabaseFieldForEntityField,
|
|
14
14
|
FieldTransformerMap,
|
|
15
|
+
getDatabaseFieldForEntityField,
|
|
15
16
|
transformFieldsToDatabaseObject,
|
|
16
17
|
} from '../../internal/EntityFieldTransformationUtils';
|
|
17
18
|
import { computeIfAbsent, mapMap } from '../collections/maps';
|
|
18
19
|
|
|
19
|
-
export
|
|
20
|
+
export class StubDatabaseAdapter<
|
|
20
21
|
TFields extends Record<string, any>,
|
|
21
22
|
TIDField extends keyof TFields,
|
|
22
23
|
> extends EntityDatabaseAdapter<TFields, TIDField> {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import EntityConfiguration from '../../EntityConfiguration';
|
|
2
|
-
import EntityDatabaseAdapter from '../../EntityDatabaseAdapter';
|
|
3
|
-
import IEntityDatabaseAdapterProvider from '../../IEntityDatabaseAdapterProvider';
|
|
4
|
-
import StubDatabaseAdapter from '../__testfixtures__/StubDatabaseAdapter';
|
|
1
|
+
import { EntityConfiguration } from '../../EntityConfiguration';
|
|
2
|
+
import { EntityDatabaseAdapter } from '../../EntityDatabaseAdapter';
|
|
3
|
+
import { IEntityDatabaseAdapterProvider } from '../../IEntityDatabaseAdapterProvider';
|
|
4
|
+
import { StubDatabaseAdapter } from '../__testfixtures__/StubDatabaseAdapter';
|
|
5
5
|
|
|
6
|
-
export
|
|
6
|
+
export class StubDatabaseAdapterProvider implements IEntityDatabaseAdapterProvider {
|
|
7
7
|
private readonly objectCollection = new Map();
|
|
8
8
|
|
|
9
9
|
getDatabaseAdapter<TFields extends Record<string, any>, TIDField extends keyof TFields>(
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { TransactionConfig } from '../../EntityQueryContext';
|
|
2
|
-
import EntityQueryContextProvider from '../../EntityQueryContextProvider';
|
|
2
|
+
import { EntityQueryContextProvider } from '../../EntityQueryContextProvider';
|
|
3
3
|
|
|
4
|
-
export
|
|
4
|
+
export class StubQueryContextProvider extends EntityQueryContextProvider {
|
|
5
5
|
protected getQueryInterface(): any {
|
|
6
6
|
return {};
|
|
7
7
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { result, Result } from '@expo/results';
|
|
2
2
|
|
|
3
|
-
import Entity from '../../Entity';
|
|
3
|
+
import { Entity } from '../../Entity';
|
|
4
4
|
import { EntityCompanionDefinition } from '../../EntityCompanionProvider';
|
|
5
|
-
import EntityConfiguration from '../../EntityConfiguration';
|
|
6
|
-
import {
|
|
7
|
-
import EntityPrivacyPolicy from '../../EntityPrivacyPolicy';
|
|
8
|
-
import ViewerContext from '../../ViewerContext';
|
|
9
|
-
import AlwaysAllowPrivacyPolicyRule from '../../rules/AlwaysAllowPrivacyPolicyRule';
|
|
5
|
+
import { EntityConfiguration } from '../../EntityConfiguration';
|
|
6
|
+
import { DateField, IntField, StringField, UUIDField } from '../../EntityFields';
|
|
7
|
+
import { EntityPrivacyPolicy } from '../../EntityPrivacyPolicy';
|
|
8
|
+
import { ViewerContext } from '../../ViewerContext';
|
|
9
|
+
import { AlwaysAllowPrivacyPolicyRule } from '../../rules/AlwaysAllowPrivacyPolicyRule';
|
|
10
10
|
|
|
11
11
|
export type TestFields = {
|
|
12
12
|
customIdField: string;
|
|
@@ -71,7 +71,7 @@ export class TestEntityPrivacyPolicy extends EntityPrivacyPolicy<
|
|
|
71
71
|
];
|
|
72
72
|
}
|
|
73
73
|
|
|
74
|
-
export
|
|
74
|
+
export class TestEntity extends Entity<TestFields, 'customIdField', ViewerContext> {
|
|
75
75
|
static defineCompanionDefinition(): EntityCompanionDefinition<
|
|
76
76
|
TestFields,
|
|
77
77
|
'customIdField',
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import Entity from '../../Entity';
|
|
1
|
+
import { Entity } from '../../Entity';
|
|
2
2
|
import { EntityCompanionDefinition } from '../../EntityCompanionProvider';
|
|
3
|
-
import EntityConfiguration from '../../EntityConfiguration';
|
|
3
|
+
import { EntityConfiguration } from '../../EntityConfiguration';
|
|
4
4
|
import { UUIDField } from '../../EntityFields';
|
|
5
|
-
import EntityPrivacyPolicy from '../../EntityPrivacyPolicy';
|
|
6
|
-
import ViewerContext from '../../ViewerContext';
|
|
7
|
-
import AlwaysAllowPrivacyPolicyRule from '../../rules/AlwaysAllowPrivacyPolicyRule';
|
|
5
|
+
import { EntityPrivacyPolicy } from '../../EntityPrivacyPolicy';
|
|
6
|
+
import { ViewerContext } from '../../ViewerContext';
|
|
7
|
+
import { AlwaysAllowPrivacyPolicyRule } from '../../rules/AlwaysAllowPrivacyPolicyRule';
|
|
8
8
|
|
|
9
9
|
export type Test2Fields = {
|
|
10
10
|
id: string;
|
|
@@ -47,7 +47,7 @@ export class TestEntity2PrivacyPolicy extends EntityPrivacyPolicy<
|
|
|
47
47
|
];
|
|
48
48
|
}
|
|
49
49
|
|
|
50
|
-
export
|
|
50
|
+
export class TestEntity2 extends Entity<Test2Fields, 'id', ViewerContext> {
|
|
51
51
|
static defineCompanionDefinition(): EntityCompanionDefinition<
|
|
52
52
|
Test2Fields,
|
|
53
53
|
'id',
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import Entity from '../../Entity';
|
|
1
|
+
import { Entity } from '../../Entity';
|
|
2
2
|
import { EntityCompanionDefinition } from '../../EntityCompanionProvider';
|
|
3
|
-
import EntityConfiguration from '../../EntityConfiguration';
|
|
3
|
+
import { EntityConfiguration } from '../../EntityConfiguration';
|
|
4
4
|
import { StringField, UUIDField } from '../../EntityFields';
|
|
5
5
|
import { EntityTriggerMutationInfo } from '../../EntityMutationInfo';
|
|
6
6
|
import {
|
|
7
7
|
EntityMutationTrigger,
|
|
8
8
|
EntityNonTransactionalMutationTrigger,
|
|
9
9
|
} from '../../EntityMutationTriggerConfiguration';
|
|
10
|
-
import EntityPrivacyPolicy from '../../EntityPrivacyPolicy';
|
|
10
|
+
import { EntityPrivacyPolicy } from '../../EntityPrivacyPolicy';
|
|
11
11
|
import { EntityQueryContext } from '../../EntityQueryContext';
|
|
12
|
-
import ViewerContext from '../../ViewerContext';
|
|
13
|
-
import AlwaysAllowPrivacyPolicyRule from '../../rules/AlwaysAllowPrivacyPolicyRule';
|
|
12
|
+
import { ViewerContext } from '../../ViewerContext';
|
|
13
|
+
import { AlwaysAllowPrivacyPolicyRule } from '../../rules/AlwaysAllowPrivacyPolicyRule';
|
|
14
14
|
|
|
15
15
|
export type TestMTFields = {
|
|
16
16
|
id: string;
|
|
@@ -131,11 +131,7 @@ export class NonTransactionalTestMutationTrigger extends EntityNonTransactionalM
|
|
|
131
131
|
/**
|
|
132
132
|
* A test Entity that has one afterCreate and one afterAll trigger
|
|
133
133
|
*/
|
|
134
|
-
export
|
|
135
|
-
TestMTFields,
|
|
136
|
-
'id',
|
|
137
|
-
ViewerContext
|
|
138
|
-
> {
|
|
134
|
+
export class TestEntityWithMutationTriggers extends Entity<TestMTFields, 'id', ViewerContext> {
|
|
139
135
|
static defineCompanionDefinition(): EntityCompanionDefinition<
|
|
140
136
|
TestMTFields,
|
|
141
137
|
'id',
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import ViewerContext from '../../ViewerContext';
|
|
1
|
+
import { ViewerContext } from '../../ViewerContext';
|
|
2
2
|
|
|
3
|
-
export
|
|
3
|
+
export class TestViewerContext extends ViewerContext {}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { InMemoryFullCacheStubCacheAdapterProvider } from './StubCacheAdapter';
|
|
2
|
-
import StubDatabaseAdapterProvider from './StubDatabaseAdapterProvider';
|
|
3
|
-
import StubQueryContextProvider from './StubQueryContextProvider';
|
|
4
|
-
import EntityCompanionProvider from '../../EntityCompanionProvider';
|
|
5
|
-
import IEntityMetricsAdapter from '../../metrics/IEntityMetricsAdapter';
|
|
6
|
-
import NoOpEntityMetricsAdapter from '../../metrics/NoOpEntityMetricsAdapter';
|
|
2
|
+
import { StubDatabaseAdapterProvider } from './StubDatabaseAdapterProvider';
|
|
3
|
+
import { StubQueryContextProvider } from './StubQueryContextProvider';
|
|
4
|
+
import { EntityCompanionProvider } from '../../EntityCompanionProvider';
|
|
5
|
+
import { IEntityMetricsAdapter } from '../../metrics/IEntityMetricsAdapter';
|
|
6
|
+
import { NoOpEntityMetricsAdapter } from '../../metrics/NoOpEntityMetricsAdapter';
|
|
7
7
|
|
|
8
8
|
const queryContextProvider = new StubQueryContextProvider();
|
|
9
9
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { describe, expect, test } from '@jest/globals';
|
|
2
|
+
|
|
1
3
|
import { EntityFieldDefinition } from '../../EntityFieldDefinition';
|
|
2
4
|
|
|
3
|
-
export
|
|
5
|
+
export function describeFieldTestCase<T>(
|
|
4
6
|
fieldDefinition: EntityFieldDefinition<T, any>,
|
|
5
7
|
validValues: T[],
|
|
6
8
|
invalidValues: any[],
|