@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
package/src/EntityCompanion.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import
|
|
2
|
-
import EntityLoaderFactory from './EntityLoaderFactory';
|
|
3
|
-
import EntityMutatorFactory from './EntityMutatorFactory';
|
|
4
|
-
import EntityPrivacyPolicy from './EntityPrivacyPolicy';
|
|
5
|
-
import EntityQueryContextProvider from './EntityQueryContextProvider';
|
|
6
|
-
import ReadonlyEntity from './ReadonlyEntity';
|
|
7
|
-
import ViewerContext from './ViewerContext';
|
|
8
|
-
import EntityTableDataCoordinator from './internal/EntityTableDataCoordinator';
|
|
9
|
-
import IEntityMetricsAdapter from './metrics/IEntityMetricsAdapter';
|
|
1
|
+
import { EntityCompanionDefinition, EntityCompanionProvider } from './EntityCompanionProvider';
|
|
2
|
+
import { EntityLoaderFactory } from './EntityLoaderFactory';
|
|
3
|
+
import { EntityMutatorFactory } from './EntityMutatorFactory';
|
|
4
|
+
import { EntityPrivacyPolicy } from './EntityPrivacyPolicy';
|
|
5
|
+
import { EntityQueryContextProvider } from './EntityQueryContextProvider';
|
|
6
|
+
import { ReadonlyEntity } from './ReadonlyEntity';
|
|
7
|
+
import { ViewerContext } from './ViewerContext';
|
|
8
|
+
import { EntityTableDataCoordinator } from './internal/EntityTableDataCoordinator';
|
|
9
|
+
import { IEntityMetricsAdapter } from './metrics/IEntityMetricsAdapter';
|
|
10
10
|
import { mergeEntityMutationTriggerConfigurations } from './utils/mergeEntityMutationTriggerConfigurations';
|
|
11
11
|
|
|
12
12
|
export interface IPrivacyPolicyClass<TPrivacyPolicy> {
|
|
@@ -16,7 +16,7 @@ export interface IPrivacyPolicyClass<TPrivacyPolicy> {
|
|
|
16
16
|
/**
|
|
17
17
|
* Composition root responsible for orchestrating setup of Entity mutators and loaders.
|
|
18
18
|
*/
|
|
19
|
-
export
|
|
19
|
+
export class EntityCompanion<
|
|
20
20
|
TFields extends Record<string, any>,
|
|
21
21
|
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
22
22
|
TViewerContext extends ViewerContext,
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import invariant from 'invariant';
|
|
2
2
|
|
|
3
3
|
import { IEntityClass } from './Entity';
|
|
4
|
-
import EntityCompanion,
|
|
5
|
-
import EntityConfiguration from './EntityConfiguration';
|
|
6
|
-
import EntityMutationTriggerConfiguration from './EntityMutationTriggerConfiguration';
|
|
7
|
-
import EntityMutationValidator from './EntityMutationValidator';
|
|
8
|
-
import EntityPrivacyPolicy from './EntityPrivacyPolicy';
|
|
9
|
-
import EntityQueryContextProvider from './EntityQueryContextProvider';
|
|
10
|
-
import IEntityCacheAdapterProvider from './IEntityCacheAdapterProvider';
|
|
11
|
-
import IEntityDatabaseAdapterProvider from './IEntityDatabaseAdapterProvider';
|
|
12
|
-
import ReadonlyEntity from './ReadonlyEntity';
|
|
13
|
-
import ViewerContext from './ViewerContext';
|
|
14
|
-
import EntityTableDataCoordinator from './internal/EntityTableDataCoordinator';
|
|
15
|
-
import IEntityMetricsAdapter from './metrics/IEntityMetricsAdapter';
|
|
4
|
+
import { EntityCompanion, IPrivacyPolicyClass } from './EntityCompanion';
|
|
5
|
+
import { EntityConfiguration } from './EntityConfiguration';
|
|
6
|
+
import { EntityMutationTriggerConfiguration } from './EntityMutationTriggerConfiguration';
|
|
7
|
+
import { EntityMutationValidator } from './EntityMutationValidator';
|
|
8
|
+
import { EntityPrivacyPolicy } from './EntityPrivacyPolicy';
|
|
9
|
+
import { EntityQueryContextProvider } from './EntityQueryContextProvider';
|
|
10
|
+
import { IEntityCacheAdapterProvider } from './IEntityCacheAdapterProvider';
|
|
11
|
+
import { IEntityDatabaseAdapterProvider } from './IEntityDatabaseAdapterProvider';
|
|
12
|
+
import { ReadonlyEntity } from './ReadonlyEntity';
|
|
13
|
+
import { ViewerContext } from './ViewerContext';
|
|
14
|
+
import { EntityTableDataCoordinator } from './internal/EntityTableDataCoordinator';
|
|
15
|
+
import { IEntityMetricsAdapter } from './metrics/IEntityMetricsAdapter';
|
|
16
16
|
import { computeIfAbsent } from './utils/collections/maps';
|
|
17
17
|
|
|
18
18
|
/**
|
|
@@ -124,7 +124,7 @@ export interface EntityCompanionDefinition<
|
|
|
124
124
|
* Internally, this is a lazy entity companion factory that instantiates and caches one
|
|
125
125
|
* EntityCompanion for each type of Entity.
|
|
126
126
|
*/
|
|
127
|
-
export
|
|
127
|
+
export class EntityCompanionProvider {
|
|
128
128
|
private readonly companionDefinitionMap: Map<
|
|
129
129
|
string,
|
|
130
130
|
EntityCompanionDefinition<any, any, any, any, any, any>
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import invariant from 'invariant';
|
|
2
2
|
|
|
3
3
|
import { IEntityClass } from './Entity';
|
|
4
|
-
import {
|
|
4
|
+
import { CacheAdapterFlavor, DatabaseAdapterFlavor } from './EntityCompanionProvider';
|
|
5
5
|
import { EntityFieldDefinition } from './EntityFieldDefinition';
|
|
6
6
|
import {
|
|
7
7
|
CompositeFieldHolder,
|
|
8
8
|
SerializedCompositeFieldHolder,
|
|
9
9
|
} from './internal/CompositeFieldHolder';
|
|
10
|
-
import {
|
|
10
|
+
import { invertMap, mapMap, reduceMap } from './utils/collections/maps';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
13
|
* A composite field is an unordered set of fields by which entities can be loaded in a batched
|
|
@@ -103,7 +103,7 @@ export class CompositeFieldInfo<
|
|
|
103
103
|
* The data storage configuration for a type of Entity. Contains information relating to IDs,
|
|
104
104
|
* cachable fields, field mappings, and types of cache and database adapter.
|
|
105
105
|
*/
|
|
106
|
-
export
|
|
106
|
+
export class EntityConfiguration<
|
|
107
107
|
TFields extends Record<string, any>,
|
|
108
108
|
TIDField extends keyof TFields,
|
|
109
109
|
> {
|
package/src/EntityCreator.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { AuthorizationResultBasedCreateMutator } from './AuthorizationResultBasedEntityMutator';
|
|
2
|
-
import EnforcingEntityCreator from './EnforcingEntityCreator';
|
|
2
|
+
import { EnforcingEntityCreator } from './EnforcingEntityCreator';
|
|
3
3
|
import { IEntityClass } from './Entity';
|
|
4
|
-
import EntityPrivacyPolicy from './EntityPrivacyPolicy';
|
|
4
|
+
import { EntityPrivacyPolicy } from './EntityPrivacyPolicy';
|
|
5
5
|
import { EntityQueryContext } from './EntityQueryContext';
|
|
6
|
-
import ReadonlyEntity from './ReadonlyEntity';
|
|
7
|
-
import ViewerContext from './ViewerContext';
|
|
6
|
+
import { ReadonlyEntity } from './ReadonlyEntity';
|
|
7
|
+
import { ViewerContext } from './ViewerContext';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* The primary interface for creating entities.
|
|
11
11
|
*/
|
|
12
|
-
export
|
|
12
|
+
export class EntityCreator<
|
|
13
13
|
TFields extends Record<string, any>,
|
|
14
14
|
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
15
15
|
TViewerContext extends ViewerContext,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import invariant from 'invariant';
|
|
2
2
|
|
|
3
|
-
import EntityConfiguration from './EntityConfiguration';
|
|
3
|
+
import { EntityConfiguration } from './EntityConfiguration';
|
|
4
4
|
import { EntityQueryContext } from './EntityQueryContext';
|
|
5
5
|
import {
|
|
6
|
+
FieldTransformerMap,
|
|
6
7
|
getDatabaseFieldForEntityField,
|
|
7
8
|
transformDatabaseObjectToFields,
|
|
8
9
|
transformFieldsToDatabaseObject,
|
|
9
|
-
FieldTransformerMap,
|
|
10
10
|
} from './internal/EntityFieldTransformationUtils';
|
|
11
11
|
import { IEntityLoadKey, IEntityLoadValue } from './internal/EntityLoadInterfaces';
|
|
12
12
|
|
|
@@ -117,7 +117,7 @@ export interface TableQuerySelectionModifiersWithOrderByRaw extends TableQuerySe
|
|
|
117
117
|
* handles all entity field transformation. Subclasses are responsible for
|
|
118
118
|
* implementing database-specific logic for a type of database.
|
|
119
119
|
*/
|
|
120
|
-
export
|
|
120
|
+
export abstract class EntityDatabaseAdapter<
|
|
121
121
|
TFields extends Record<string, any>,
|
|
122
122
|
TIDField extends keyof TFields,
|
|
123
123
|
> {
|
package/src/EntityDeleter.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { AuthorizationResultBasedDeleteMutator } from './AuthorizationResultBasedEntityMutator';
|
|
2
|
-
import EnforcingEntityDeleter from './EnforcingEntityDeleter';
|
|
2
|
+
import { EnforcingEntityDeleter } from './EnforcingEntityDeleter';
|
|
3
3
|
import { IEntityClass } from './Entity';
|
|
4
|
-
import EntityPrivacyPolicy from './EntityPrivacyPolicy';
|
|
4
|
+
import { EntityPrivacyPolicy } from './EntityPrivacyPolicy';
|
|
5
5
|
import { EntityQueryContext } from './EntityQueryContext';
|
|
6
|
-
import ReadonlyEntity from './ReadonlyEntity';
|
|
7
|
-
import ViewerContext from './ViewerContext';
|
|
6
|
+
import { ReadonlyEntity } from './ReadonlyEntity';
|
|
7
|
+
import { ViewerContext } from './ViewerContext';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* The primary interface for deleting entities.
|
|
11
11
|
*/
|
|
12
|
-
export
|
|
12
|
+
export class EntityDeleter<
|
|
13
13
|
TFields extends Record<string, any>,
|
|
14
14
|
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
15
15
|
TViewerContext extends ViewerContext,
|
|
@@ -68,6 +68,6 @@ export default class EntityDeleter<
|
|
|
68
68
|
.getViewerContext()
|
|
69
69
|
.getViewerScopedEntityCompanionForClass(this.entityClass)
|
|
70
70
|
.getMutatorFactory()
|
|
71
|
-
.forDelete(this.existingEntity, this.queryContext);
|
|
71
|
+
.forDelete(this.existingEntity, this.queryContext, /* cascadingDeleteCause */ null);
|
|
72
72
|
}
|
|
73
73
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { IEntityClass } from './Entity';
|
|
2
|
-
import EntityPrivacyPolicy from './EntityPrivacyPolicy';
|
|
3
|
-
import ReadonlyEntity from './ReadonlyEntity';
|
|
4
|
-
import ViewerContext from './ViewerContext';
|
|
2
|
+
import { EntityPrivacyPolicy } from './EntityPrivacyPolicy';
|
|
3
|
+
import { ReadonlyEntity } from './ReadonlyEntity';
|
|
4
|
+
import { ViewerContext } from './ViewerContext';
|
|
5
5
|
|
|
6
6
|
export enum EntityEdgeDeletionBehavior {
|
|
7
7
|
/**
|
package/src/EntityFields.ts
CHANGED
|
@@ -121,6 +121,7 @@ export class EnumField<TRequireExplicitCache extends boolean> extends EntityFiel
|
|
|
121
121
|
|
|
122
122
|
/**
|
|
123
123
|
* EntityFieldDefinition for a enum column with a strict typescript enum type.
|
|
124
|
+
* The strict version checks that the value of the field adheres to a particular typescript enum
|
|
124
125
|
*/
|
|
125
126
|
export class StrictEnumField<
|
|
126
127
|
T extends object,
|
|
@@ -140,3 +141,15 @@ export class StrictEnumField<
|
|
|
140
141
|
return super.validateInputValueInternal(value) && Object.values(this.enum).includes(value);
|
|
141
142
|
}
|
|
142
143
|
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* EntityFieldDefinition for a column with a JS Buffer type.
|
|
147
|
+
*/
|
|
148
|
+
export class BufferField<TRequireExplicitCache extends boolean> extends EntityFieldDefinition<
|
|
149
|
+
Buffer,
|
|
150
|
+
TRequireExplicitCache
|
|
151
|
+
> {
|
|
152
|
+
protected validateInputValueInternal(value: Buffer): boolean {
|
|
153
|
+
return Buffer.isBuffer(value);
|
|
154
|
+
}
|
|
155
|
+
}
|
package/src/EntityLoader.ts
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import AuthorizationResultBasedEntityLoader from './AuthorizationResultBasedEntityLoader';
|
|
2
|
-
import EnforcingEntityLoader from './EnforcingEntityLoader';
|
|
1
|
+
import { AuthorizationResultBasedEntityLoader } from './AuthorizationResultBasedEntityLoader';
|
|
2
|
+
import { EnforcingEntityLoader } from './EnforcingEntityLoader';
|
|
3
3
|
import { IEntityClass } from './Entity';
|
|
4
|
-
import EntityLoaderUtils from './EntityLoaderUtils';
|
|
5
|
-
import EntityPrivacyPolicy from './EntityPrivacyPolicy';
|
|
4
|
+
import { EntityLoaderUtils } from './EntityLoaderUtils';
|
|
5
|
+
import { EntityPrivacyPolicy } from './EntityPrivacyPolicy';
|
|
6
6
|
import { EntityQueryContext } from './EntityQueryContext';
|
|
7
|
-
import ReadonlyEntity from './ReadonlyEntity';
|
|
8
|
-
import ViewerContext from './ViewerContext';
|
|
7
|
+
import { ReadonlyEntity } from './ReadonlyEntity';
|
|
8
|
+
import { ViewerContext } from './ViewerContext';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* The primary interface for loading entities. All normal loads are batched,
|
|
12
12
|
* cached, and authorized against the entity's EntityPrivacyPolicy.
|
|
13
13
|
*/
|
|
14
|
-
export
|
|
14
|
+
export class EntityLoader<
|
|
15
15
|
TFields extends Record<string, any>,
|
|
16
16
|
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
17
17
|
TViewerContext extends ViewerContext,
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import AuthorizationResultBasedEntityLoader from './AuthorizationResultBasedEntityLoader';
|
|
2
|
-
import EntityCompanion from './EntityCompanion';
|
|
3
|
-
import EntityLoaderUtils from './EntityLoaderUtils';
|
|
4
|
-
import EntityPrivacyPolicy,
|
|
1
|
+
import { AuthorizationResultBasedEntityLoader } from './AuthorizationResultBasedEntityLoader';
|
|
2
|
+
import { EntityCompanion } from './EntityCompanion';
|
|
3
|
+
import { EntityLoaderUtils } from './EntityLoaderUtils';
|
|
4
|
+
import { EntityPrivacyPolicy, EntityPrivacyPolicyEvaluationContext } from './EntityPrivacyPolicy';
|
|
5
5
|
import { EntityQueryContext } from './EntityQueryContext';
|
|
6
|
-
import ReadonlyEntity from './ReadonlyEntity';
|
|
7
|
-
import ViewerContext from './ViewerContext';
|
|
8
|
-
import EntityDataManager from './internal/EntityDataManager';
|
|
9
|
-
import IEntityMetricsAdapter from './metrics/IEntityMetricsAdapter';
|
|
6
|
+
import { ReadonlyEntity } from './ReadonlyEntity';
|
|
7
|
+
import { ViewerContext } from './ViewerContext';
|
|
8
|
+
import { EntityDataManager } from './internal/EntityDataManager';
|
|
9
|
+
import { IEntityMetricsAdapter } from './metrics/IEntityMetricsAdapter';
|
|
10
10
|
|
|
11
11
|
/**
|
|
12
12
|
* The primary entry point for loading entities.
|
|
13
13
|
*/
|
|
14
|
-
export
|
|
14
|
+
export class EntityLoaderFactory<
|
|
15
15
|
TFields extends Record<string, any>,
|
|
16
16
|
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
17
17
|
TViewerContext extends ViewerContext,
|
package/src/EntityLoaderUtils.ts
CHANGED
|
@@ -2,23 +2,23 @@ import { Result, asyncResult, result } from '@expo/results';
|
|
|
2
2
|
import nullthrows from 'nullthrows';
|
|
3
3
|
|
|
4
4
|
import { IEntityClass } from './Entity';
|
|
5
|
-
import EntityConfiguration from './EntityConfiguration';
|
|
6
|
-
import EntityPrivacyPolicy,
|
|
5
|
+
import { EntityConfiguration } from './EntityConfiguration';
|
|
6
|
+
import { EntityPrivacyPolicy, EntityPrivacyPolicyEvaluationContext } from './EntityPrivacyPolicy';
|
|
7
7
|
import { EntityQueryContext, EntityTransactionalQueryContext } from './EntityQueryContext';
|
|
8
|
-
import ReadonlyEntity from './ReadonlyEntity';
|
|
9
|
-
import ViewerContext from './ViewerContext';
|
|
8
|
+
import { ReadonlyEntity } from './ReadonlyEntity';
|
|
9
|
+
import { ViewerContext } from './ViewerContext';
|
|
10
10
|
import { pick } from './entityUtils';
|
|
11
|
-
import EntityDataManager from './internal/EntityDataManager';
|
|
11
|
+
import { EntityDataManager } from './internal/EntityDataManager';
|
|
12
12
|
import { LoadPair } from './internal/EntityLoadInterfaces';
|
|
13
13
|
import { SingleFieldHolder, SingleFieldValueHolder } from './internal/SingleFieldHolder';
|
|
14
|
-
import IEntityMetricsAdapter from './metrics/IEntityMetricsAdapter';
|
|
14
|
+
import { IEntityMetricsAdapter } from './metrics/IEntityMetricsAdapter';
|
|
15
15
|
import { mapMapAsync } from './utils/collections/maps';
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Entity loader utilities for things like invalidation, entity construction, and authorization.
|
|
19
19
|
* Methods are exposed publicly since in rare cases they may need to be called manually.
|
|
20
20
|
*/
|
|
21
|
-
export
|
|
21
|
+
export class EntityLoaderUtils<
|
|
22
22
|
TFields extends Record<string, any>,
|
|
23
23
|
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
24
24
|
TViewerContext extends ViewerContext,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { EntityTriggerMutationInfo } from './EntityMutationInfo';
|
|
2
2
|
import { EntityTransactionalQueryContext } 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
|
/**
|
|
7
7
|
* Interface to define trigger behavior for entities.
|
|
8
8
|
*/
|
|
9
|
-
export
|
|
9
|
+
export interface EntityMutationTriggerConfiguration<
|
|
10
10
|
TFields extends Record<string, any>,
|
|
11
11
|
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
12
12
|
TViewerContext extends ViewerContext,
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { EntityValidatorMutationInfo } from './EntityMutationInfo';
|
|
2
2
|
import { EntityTransactionalQueryContext } 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
|
/**
|
|
7
7
|
* A validator is a way to specify entity mutation validation that runs within the
|
|
8
8
|
* same transaction as the mutation itself before creating or updating an entity.
|
|
9
9
|
*/
|
|
10
|
-
export
|
|
10
|
+
export abstract class EntityMutationValidator<
|
|
11
11
|
TFields extends Record<string, any>,
|
|
12
12
|
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
13
13
|
TViewerContext extends ViewerContext,
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
import {
|
|
2
2
|
AuthorizationResultBasedCreateMutator,
|
|
3
|
-
AuthorizationResultBasedUpdateMutator,
|
|
4
3
|
AuthorizationResultBasedDeleteMutator,
|
|
4
|
+
AuthorizationResultBasedUpdateMutator,
|
|
5
5
|
} from './AuthorizationResultBasedEntityMutator';
|
|
6
|
-
import Entity,
|
|
7
|
-
import EntityCompanionProvider from './EntityCompanionProvider';
|
|
8
|
-
import EntityConfiguration from './EntityConfiguration';
|
|
9
|
-
import EntityDatabaseAdapter from './EntityDatabaseAdapter';
|
|
10
|
-
import EntityLoaderFactory from './EntityLoaderFactory';
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
6
|
+
import { Entity, IEntityClass } from './Entity';
|
|
7
|
+
import { EntityCompanionProvider } from './EntityCompanionProvider';
|
|
8
|
+
import { EntityConfiguration } from './EntityConfiguration';
|
|
9
|
+
import { EntityDatabaseAdapter } from './EntityDatabaseAdapter';
|
|
10
|
+
import { EntityLoaderFactory } from './EntityLoaderFactory';
|
|
11
|
+
import { EntityCascadingDeletionInfo } from './EntityMutationInfo';
|
|
12
|
+
import { EntityMutationTriggerConfiguration } from './EntityMutationTriggerConfiguration';
|
|
13
|
+
import { EntityMutationValidator } from './EntityMutationValidator';
|
|
14
|
+
import { EntityPrivacyPolicy } from './EntityPrivacyPolicy';
|
|
14
15
|
import { EntityQueryContext } from './EntityQueryContext';
|
|
15
|
-
import ViewerContext from './ViewerContext';
|
|
16
|
-
import IEntityMetricsAdapter from './metrics/IEntityMetricsAdapter';
|
|
16
|
+
import { ViewerContext } from './ViewerContext';
|
|
17
|
+
import { IEntityMetricsAdapter } from './metrics/IEntityMetricsAdapter';
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
20
|
* The primary interface for creating, mutating, and deleting entities.
|
|
20
21
|
*/
|
|
21
|
-
export
|
|
22
|
+
export class EntityMutatorFactory<
|
|
22
23
|
TFields extends Record<string, any>,
|
|
23
24
|
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
24
25
|
TViewerContext extends ViewerContext,
|
|
@@ -111,6 +112,7 @@ export default class EntityMutatorFactory<
|
|
|
111
112
|
forUpdate(
|
|
112
113
|
existingEntity: TEntity,
|
|
113
114
|
queryContext: EntityQueryContext,
|
|
115
|
+
cascadingDeleteCause: EntityCascadingDeletionInfo | null,
|
|
114
116
|
): AuthorizationResultBasedUpdateMutator<
|
|
115
117
|
TFields,
|
|
116
118
|
TIDField,
|
|
@@ -132,6 +134,7 @@ export default class EntityMutatorFactory<
|
|
|
132
134
|
this.databaseAdapter,
|
|
133
135
|
this.metricsAdapter,
|
|
134
136
|
existingEntity,
|
|
137
|
+
cascadingDeleteCause,
|
|
135
138
|
);
|
|
136
139
|
}
|
|
137
140
|
|
|
@@ -143,6 +146,7 @@ export default class EntityMutatorFactory<
|
|
|
143
146
|
forDelete(
|
|
144
147
|
existingEntity: TEntity,
|
|
145
148
|
queryContext: EntityQueryContext,
|
|
149
|
+
cascadingDeleteCause: EntityCascadingDeletionInfo | null,
|
|
146
150
|
): AuthorizationResultBasedDeleteMutator<
|
|
147
151
|
TFields,
|
|
148
152
|
TIDField,
|
|
@@ -164,6 +168,7 @@ export default class EntityMutatorFactory<
|
|
|
164
168
|
this.databaseAdapter,
|
|
165
169
|
this.metricsAdapter,
|
|
166
170
|
existingEntity,
|
|
171
|
+
cascadingDeleteCause,
|
|
167
172
|
);
|
|
168
173
|
}
|
|
169
174
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { EntityCascadingDeletionInfo } from './EntityMutationInfo';
|
|
2
2
|
import { EntityQueryContext } from './EntityQueryContext';
|
|
3
|
-
import ReadonlyEntity from './ReadonlyEntity';
|
|
4
|
-
import ViewerContext from './ViewerContext';
|
|
5
|
-
import EntityNotAuthorizedError from './errors/EntityNotAuthorizedError';
|
|
6
|
-
import
|
|
3
|
+
import { ReadonlyEntity } from './ReadonlyEntity';
|
|
4
|
+
import { ViewerContext } from './ViewerContext';
|
|
5
|
+
import { EntityNotAuthorizedError } from './errors/EntityNotAuthorizedError';
|
|
6
|
+
import {
|
|
7
7
|
EntityMetricsAuthorizationResult,
|
|
8
|
+
IEntityMetricsAdapter,
|
|
8
9
|
} from './metrics/IEntityMetricsAdapter';
|
|
9
|
-
import PrivacyPolicyRule,
|
|
10
|
+
import { PrivacyPolicyRule, RuleEvaluationResult } from './rules/PrivacyPolicyRule';
|
|
10
11
|
|
|
11
12
|
/**
|
|
12
13
|
* Information about the reason this privacy policy is being evaluated.
|
|
@@ -115,7 +116,7 @@ export enum EntityAuthorizationAction {
|
|
|
115
116
|
* return not authorized if all rules skip
|
|
116
117
|
* ```
|
|
117
118
|
*/
|
|
118
|
-
export
|
|
119
|
+
export abstract class EntityPrivacyPolicy<
|
|
119
120
|
TFields extends Record<string, any>,
|
|
120
121
|
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
121
122
|
TViewerContext extends ViewerContext,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import assert from 'assert';
|
|
2
2
|
|
|
3
|
-
import EntityQueryContextProvider from './EntityQueryContextProvider';
|
|
3
|
+
import { EntityQueryContextProvider } from './EntityQueryContextProvider';
|
|
4
4
|
|
|
5
5
|
export type PostCommitCallback = (...args: any) => Promise<any>;
|
|
6
6
|
export type PreCommitCallback = (
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
2
|
|
|
3
3
|
import {
|
|
4
|
-
EntityTransactionalQueryContext,
|
|
5
|
-
EntityNonTransactionalQueryContext,
|
|
6
4
|
EntityNestedTransactionalQueryContext,
|
|
5
|
+
EntityNonTransactionalQueryContext,
|
|
6
|
+
EntityTransactionalQueryContext,
|
|
7
7
|
TransactionConfig,
|
|
8
8
|
TransactionalDataLoaderMode,
|
|
9
9
|
} from './EntityQueryContext';
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
/**
|
|
12
12
|
* A query context provider vends transactional and non-transactional query contexts.
|
|
13
13
|
*/
|
|
14
|
-
export
|
|
14
|
+
export abstract class EntityQueryContextProvider {
|
|
15
15
|
/**
|
|
16
16
|
* Vend a regular (non-transactional) entity query context.
|
|
17
17
|
*/
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { Result } from '@expo/results';
|
|
2
2
|
|
|
3
|
-
import AuthorizationResultBasedEntityLoader from './AuthorizationResultBasedEntityLoader';
|
|
4
|
-
import EntityPrivacyPolicy from './EntityPrivacyPolicy';
|
|
5
|
-
import ReadonlyEntity from './ReadonlyEntity';
|
|
6
|
-
import ViewerContext from './ViewerContext';
|
|
3
|
+
import { AuthorizationResultBasedEntityLoader } from './AuthorizationResultBasedEntityLoader';
|
|
4
|
+
import { EntityPrivacyPolicy } from './EntityPrivacyPolicy';
|
|
5
|
+
import { ReadonlyEntity } from './ReadonlyEntity';
|
|
6
|
+
import { ViewerContext } from './ViewerContext';
|
|
7
7
|
import { mapMap } from './utils/collections/maps';
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -43,7 +43,7 @@ export interface ISecondaryEntityCache<TFields extends Record<string, any>, TLoa
|
|
|
43
43
|
* due to use of a non-unique-field-based EntityLoader method like `loadManyByFieldEqualityConjunctionAsync` or
|
|
44
44
|
* `loadManyByRawWhereClauseAsync`.
|
|
45
45
|
*/
|
|
46
|
-
export
|
|
46
|
+
export abstract class EntitySecondaryCacheLoader<
|
|
47
47
|
TLoadParams,
|
|
48
48
|
TFields extends Record<string, any>,
|
|
49
49
|
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
package/src/EntityUpdater.ts
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { AuthorizationResultBasedUpdateMutator } from './AuthorizationResultBasedEntityMutator';
|
|
2
|
-
import EnforcingEntityUpdater from './EnforcingEntityUpdater';
|
|
2
|
+
import { EnforcingEntityUpdater } from './EnforcingEntityUpdater';
|
|
3
3
|
import { IEntityClass } from './Entity';
|
|
4
|
-
import EntityPrivacyPolicy from './EntityPrivacyPolicy';
|
|
4
|
+
import { EntityPrivacyPolicy } from './EntityPrivacyPolicy';
|
|
5
5
|
import { EntityQueryContext } from './EntityQueryContext';
|
|
6
|
-
import ReadonlyEntity from './ReadonlyEntity';
|
|
7
|
-
import ViewerContext from './ViewerContext';
|
|
6
|
+
import { ReadonlyEntity } from './ReadonlyEntity';
|
|
7
|
+
import { ViewerContext } from './ViewerContext';
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* The primary interface for updating entities.
|
|
11
11
|
*/
|
|
12
|
-
export
|
|
12
|
+
export class EntityUpdater<
|
|
13
13
|
TFields extends Record<string, any>,
|
|
14
14
|
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
15
15
|
TViewerContext extends ViewerContext,
|
|
@@ -68,6 +68,6 @@ export default class EntityUpdater<
|
|
|
68
68
|
.getViewerContext()
|
|
69
69
|
.getViewerScopedEntityCompanionForClass(this.entityClass)
|
|
70
70
|
.getMutatorFactory()
|
|
71
|
-
.forUpdate(this.existingEntity, this.queryContext);
|
|
71
|
+
.forUpdate(this.existingEntity, this.queryContext, /* cascadingDeleteCause */ null);
|
|
72
72
|
}
|
|
73
73
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import invariant from 'invariant';
|
|
2
2
|
|
|
3
|
-
import IEntityCacheAdapter from './IEntityCacheAdapter';
|
|
4
|
-
import IEntityGenericCacher from './IEntityGenericCacher';
|
|
3
|
+
import { IEntityCacheAdapter } from './IEntityCacheAdapter';
|
|
4
|
+
import { IEntityGenericCacher } from './IEntityGenericCacher';
|
|
5
5
|
import { IEntityLoadKey, IEntityLoadValue } from './internal/EntityLoadInterfaces';
|
|
6
6
|
import { CacheLoadResult } from './internal/ReadThroughEntityCache';
|
|
7
7
|
import { mapKeys } from './utils/collections/maps';
|
|
@@ -9,7 +9,7 @@ import { mapKeys } from './utils/collections/maps';
|
|
|
9
9
|
/**
|
|
10
10
|
* A standard IEntityCacheAdapter that coordinates caching through an IEntityGenericCacher.
|
|
11
11
|
*/
|
|
12
|
-
export
|
|
12
|
+
export class GenericEntityCacheAdapter<
|
|
13
13
|
TFields extends Record<string, any>,
|
|
14
14
|
TIDField extends keyof TFields,
|
|
15
15
|
> implements IEntityCacheAdapter<TFields, TIDField>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import invariant from 'invariant';
|
|
2
2
|
|
|
3
3
|
import { ISecondaryEntityCache } from './EntitySecondaryCacheLoader';
|
|
4
|
-
import IEntityGenericCacher from './IEntityGenericCacher';
|
|
4
|
+
import { IEntityGenericCacher } from './IEntityGenericCacher';
|
|
5
5
|
import { CacheStatus } from './internal/ReadThroughEntityCache';
|
|
6
6
|
import { filterMap, zipToMap } from './utils/collections/maps';
|
|
7
7
|
|
|
@@ -10,7 +10,7 @@ import { filterMap, zipToMap } from './utils/collections/maps';
|
|
|
10
10
|
* single entity load. One common way this may be used is to add a second layer of caching in a hot path that makes
|
|
11
11
|
* a call to EntityLoader.loadManyByFieldEqualityConjunctionAsync is guaranteed to return at most one entity.
|
|
12
12
|
*/
|
|
13
|
-
export
|
|
13
|
+
export abstract class GenericSecondaryEntityCache<
|
|
14
14
|
TFields extends Record<string, any>,
|
|
15
15
|
TIDField extends keyof TFields,
|
|
16
16
|
TLoadParams,
|
|
@@ -5,7 +5,7 @@ import { CacheLoadResult } from './internal/ReadThroughEntityCache';
|
|
|
5
5
|
* A cache adapter is an interface by which objects can be
|
|
6
6
|
* cached, fetched from cache, and removed from cache (invalidated).
|
|
7
7
|
*/
|
|
8
|
-
export
|
|
8
|
+
export interface IEntityCacheAdapter<
|
|
9
9
|
TFields extends Record<string, any>,
|
|
10
10
|
TIDField extends keyof TFields,
|
|
11
11
|
> {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import EntityConfiguration from './EntityConfiguration';
|
|
2
|
-
import IEntityCacheAdapter from './IEntityCacheAdapter';
|
|
1
|
+
import { EntityConfiguration } from './EntityConfiguration';
|
|
2
|
+
import { IEntityCacheAdapter } from './IEntityCacheAdapter';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* A cache adapter provider vends cache adapters for a particular cache adapter type.
|
|
6
6
|
* Allows for passing global configuration to cache adapters.
|
|
7
7
|
*/
|
|
8
|
-
export
|
|
8
|
+
export interface IEntityCacheAdapterProvider {
|
|
9
9
|
/**
|
|
10
10
|
* Vend a cache adapter for an entity configuration.
|
|
11
11
|
*/
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import EntityConfiguration from './EntityConfiguration';
|
|
2
|
-
import EntityDatabaseAdapter from './EntityDatabaseAdapter';
|
|
1
|
+
import { EntityConfiguration } from './EntityConfiguration';
|
|
2
|
+
import { EntityDatabaseAdapter } from './EntityDatabaseAdapter';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* A database adapter provider vends database adapters for a particular database adapter type.
|
|
6
6
|
* Allows for passing global configuration to databse adapters, making testing easier.
|
|
7
7
|
*/
|
|
8
|
-
export
|
|
8
|
+
export interface IEntityDatabaseAdapterProvider {
|
|
9
9
|
/**
|
|
10
10
|
* Vend a database adapter.
|
|
11
11
|
*/
|
|
@@ -5,7 +5,7 @@ import { CacheLoadResult } from './internal/ReadThroughEntityCache';
|
|
|
5
5
|
* A generic cacher stores and loads key-value pairs. It also supports negative caching - it stores the absence
|
|
6
6
|
* of keys that don't exist in the backing datastore. It is also responsible for cache key creation.
|
|
7
7
|
*/
|
|
8
|
-
export
|
|
8
|
+
export interface IEntityGenericCacher<
|
|
9
9
|
TFields extends Record<string, any>,
|
|
10
10
|
TIDField extends keyof TFields,
|
|
11
11
|
> {
|