@expo/entity 0.40.0 → 0.42.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/AuthorizationResultBasedEntityAssociationLoader.d.ts +16 -16
- package/build/AuthorizationResultBasedEntityAssociationLoader.js +2 -4
- package/build/AuthorizationResultBasedEntityAssociationLoader.js.map +1 -1
- package/build/AuthorizationResultBasedEntityLoader.d.ts +39 -67
- package/build/AuthorizationResultBasedEntityLoader.js +85 -62
- package/build/AuthorizationResultBasedEntityLoader.js.map +1 -1
- package/build/AuthorizationResultBasedEntityMutator.d.ts +16 -16
- package/build/AuthorizationResultBasedEntityMutator.js.map +1 -1
- package/build/ComposedEntityCacheAdapter.d.ts +7 -6
- package/build/ComposedEntityCacheAdapter.js +28 -28
- package/build/ComposedEntityCacheAdapter.js.map +1 -1
- package/build/ComposedSecondaryEntityCache.d.ts +1 -1
- package/build/ComposedSecondaryEntityCache.js.map +1 -1
- package/build/EnforcingEntityAssociationLoader.d.ts +15 -15
- package/build/EnforcingEntityAssociationLoader.js.map +1 -1
- package/build/EnforcingEntityCreator.d.ts +2 -2
- package/build/EnforcingEntityDeleter.d.ts +2 -2
- package/build/EnforcingEntityLoader.d.ts +104 -18
- package/build/EnforcingEntityLoader.js +113 -12
- package/build/EnforcingEntityLoader.js.map +1 -1
- package/build/EnforcingEntityUpdater.d.ts +2 -2
- package/build/Entity.d.ts +32 -10
- package/build/Entity.js +41 -3
- package/build/Entity.js.map +1 -1
- package/build/EntityAssociationLoader.d.ts +3 -3
- package/build/EntityCompanion.d.ts +5 -5
- package/build/EntityCompanion.js.map +1 -1
- package/build/EntityCompanionProvider.d.ts +6 -6
- package/build/EntityCompanionProvider.js.map +1 -1
- package/build/EntityConfiguration.d.ts +46 -5
- package/build/EntityConfiguration.js +39 -1
- package/build/EntityConfiguration.js.map +1 -1
- package/build/EntityCreator.d.ts +4 -4
- package/build/EntityDatabaseAdapter.d.ts +15 -14
- package/build/EntityDatabaseAdapter.js +20 -12
- package/build/EntityDatabaseAdapter.js.map +1 -1
- package/build/EntityDeleter.d.ts +4 -4
- package/build/EntityFieldDefinition.d.ts +20 -10
- package/build/EntityFieldDefinition.js +3 -1
- package/build/EntityFieldDefinition.js.map +1 -1
- package/build/EntityFields.d.ts +14 -12
- package/build/EntityFields.js.map +1 -1
- package/build/EntityLoader.d.ts +5 -5
- package/build/EntityLoaderFactory.d.ts +3 -3
- package/build/EntityLoaderFactory.js.map +1 -1
- package/build/EntityLoaderUtils.d.ts +2 -2
- package/build/EntityLoaderUtils.js +27 -1
- package/build/EntityLoaderUtils.js.map +1 -1
- package/build/EntityMutationInfo.d.ts +2 -2
- package/build/EntityMutationTriggerConfiguration.d.ts +14 -14
- package/build/EntityMutationTriggerConfiguration.js.map +1 -1
- package/build/EntityMutationValidator.d.ts +2 -2
- package/build/EntityMutatorFactory.d.ts +5 -5
- package/build/EntityMutatorFactory.js.map +1 -1
- package/build/EntityPrivacyPolicy.d.ts +14 -14
- package/build/EntityPrivacyPolicy.js.map +1 -1
- package/build/EntitySecondaryCacheLoader.d.ts +4 -4
- package/build/EntityUpdater.d.ts +4 -4
- package/build/GenericEntityCacheAdapter.d.ts +7 -6
- package/build/GenericEntityCacheAdapter.js +13 -14
- package/build/GenericEntityCacheAdapter.js.map +1 -1
- package/build/GenericSecondaryEntityCache.d.ts +3 -3
- package/build/GenericSecondaryEntityCache.js.map +1 -1
- package/build/IEntityCacheAdapter.d.ts +17 -16
- package/build/IEntityCacheAdapterProvider.d.ts +1 -1
- package/build/IEntityDatabaseAdapterProvider.d.ts +1 -1
- package/build/IEntityGenericCacher.d.ts +15 -5
- package/build/ReadonlyEntity.d.ts +27 -8
- package/build/ReadonlyEntity.js +31 -3
- package/build/ReadonlyEntity.js.map +1 -1
- package/build/ViewerContext.d.ts +1 -1
- package/build/ViewerScopedEntityCompanion.d.ts +5 -5
- package/build/ViewerScopedEntityCompanionProvider.d.ts +1 -1
- package/build/ViewerScopedEntityLoaderFactory.d.ts +3 -3
- package/build/ViewerScopedEntityMutatorFactory.d.ts +5 -5
- package/build/entityUtils.d.ts +1 -1
- package/build/entityUtils.js.map +1 -1
- package/build/errors/EntityInvalidFieldValueError.d.ts +2 -2
- package/build/errors/EntityNotAuthorizedError.d.ts +1 -1
- package/build/errors/EntityNotFoundError.d.ts +2 -2
- package/build/index.d.ts +7 -7
- package/build/index.js +8 -13
- package/build/index.js.map +1 -1
- package/build/internal/CompositeFieldHolder.d.ts +48 -0
- package/build/internal/CompositeFieldHolder.js +116 -0
- package/build/internal/CompositeFieldHolder.js.map +1 -0
- package/build/internal/CompositeFieldValueMap.d.ts +15 -0
- package/build/internal/CompositeFieldValueMap.js +51 -0
- package/build/internal/CompositeFieldValueMap.js.map +1 -0
- package/build/internal/EntityDataManager.d.ts +16 -16
- package/build/internal/EntityDataManager.js +42 -45
- package/build/internal/EntityDataManager.js.map +1 -1
- package/build/internal/EntityFieldTransformationUtils.d.ts +5 -5
- package/build/internal/EntityFieldTransformationUtils.js.map +1 -1
- package/build/internal/EntityLoadInterfaces.d.ts +104 -0
- package/build/internal/EntityLoadInterfaces.js +25 -0
- package/build/internal/EntityLoadInterfaces.js.map +1 -0
- package/build/internal/EntityTableDataCoordinator.d.ts +6 -6
- package/build/internal/EntityTableDataCoordinator.js.map +1 -1
- package/build/internal/ReadThroughEntityCache.d.ts +17 -16
- package/build/internal/ReadThroughEntityCache.js +36 -36
- package/build/internal/ReadThroughEntityCache.js.map +1 -1
- package/build/internal/SingleFieldHolder.d.ts +34 -0
- package/build/internal/SingleFieldHolder.js +90 -0
- package/build/internal/SingleFieldHolder.js.map +1 -0
- package/build/metrics/EntityMetricsUtils.d.ts +2 -1
- package/build/metrics/EntityMetricsUtils.js.map +1 -1
- package/build/metrics/IEntityMetricsAdapter.d.ts +5 -0
- package/build/metrics/IEntityMetricsAdapter.js.map +1 -1
- package/build/rules/AlwaysAllowPrivacyPolicyRule.d.ts +2 -2
- package/build/rules/AlwaysAllowPrivacyPolicyRule.js.map +1 -1
- package/build/rules/AlwaysDenyPrivacyPolicyRule.d.ts +2 -2
- package/build/rules/AlwaysDenyPrivacyPolicyRule.js.map +1 -1
- package/build/rules/AlwaysSkipPrivacyPolicyRule.d.ts +2 -2
- package/build/rules/AlwaysSkipPrivacyPolicyRule.js.map +1 -1
- package/build/rules/PrivacyPolicyRule.d.ts +2 -2
- package/build/tsconfig.build.tsbuildinfo +1 -0
- package/build/utils/EntityPrivacyUtils.d.ts +4 -4
- package/build/utils/EntityPrivacyUtils.js.map +1 -1
- package/build/utils/collections/SerializableKeyMap.d.ts +27 -0
- package/build/utils/collections/SerializableKeyMap.js +60 -0
- package/build/utils/collections/SerializableKeyMap.js.map +1 -0
- package/build/utils/collections/maps.js +1 -2
- package/build/utils/collections/maps.js.map +1 -1
- package/build/utils/collections/sets.d.ts +1 -0
- package/build/utils/collections/sets.js +7 -0
- package/build/utils/collections/sets.js.map +1 -0
- package/build/utils/mergeEntityMutationTriggerConfigurations.d.ts +1 -1
- package/package.json +8 -5
- package/src/AuthorizationResultBasedEntityAssociationLoader.ts +58 -53
- package/src/AuthorizationResultBasedEntityLoader.ts +194 -81
- package/src/AuthorizationResultBasedEntityMutator.ts +71 -45
- package/src/ComposedEntityCacheAdapter.ts +55 -46
- package/src/ComposedSecondaryEntityCache.ts +5 -2
- package/src/EnforcingEntityAssociationLoader.ts +52 -44
- package/src/EnforcingEntityCreator.ts +5 -5
- package/src/EnforcingEntityDeleter.ts +5 -5
- package/src/EnforcingEntityLoader.ts +158 -21
- package/src/EnforcingEntityUpdater.ts +5 -5
- package/src/Entity.ts +185 -29
- package/src/EntityAssociationLoader.ts +6 -6
- package/src/EntityCompanion.ts +11 -11
- package/src/EntityCompanionProvider.ts +21 -18
- package/src/EntityConfiguration.ts +123 -9
- package/src/EntityCreator.ts +7 -7
- package/src/EntityDatabaseAdapter.ts +51 -28
- package/src/EntityDeleter.ts +7 -7
- package/src/EntityFieldDefinition.ts +32 -12
- package/src/EntityFields.ts +49 -12
- package/src/EntityLoader.ts +8 -8
- package/src/EntityLoaderFactory.ts +8 -8
- package/src/EntityLoaderUtils.ts +39 -10
- package/src/EntityMutationInfo.ts +6 -6
- package/src/EntityMutationTriggerConfiguration.ts +68 -20
- package/src/EntityMutationValidator.ts +4 -4
- package/src/EntityMutatorFactory.ts +13 -13
- package/src/EntityPrivacyPolicy.ts +50 -26
- package/src/EntitySecondaryCacheLoader.ts +6 -6
- package/src/EntityUpdater.ts +7 -7
- package/src/GenericEntityCacheAdapter.ts +39 -28
- package/src/GenericSecondaryEntityCache.ts +6 -3
- package/src/IEntityCacheAdapter.ts +45 -25
- package/src/IEntityCacheAdapterProvider.ts +3 -3
- package/src/IEntityDatabaseAdapterProvider.ts +3 -3
- package/src/IEntityGenericCacher.ts +33 -5
- package/src/ReadonlyEntity.ts +129 -16
- package/src/ViewerContext.ts +5 -5
- package/src/ViewerScopedEntityCompanion.ts +7 -7
- package/src/ViewerScopedEntityCompanionProvider.ts +6 -6
- package/src/ViewerScopedEntityLoaderFactory.ts +7 -7
- package/src/ViewerScopedEntityMutatorFactory.ts +8 -8
- package/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.ts +41 -72
- package/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.ts +14 -13
- package/src/__tests__/AuthorizationResultBasedEntityLoader-test.ts +367 -69
- package/src/__tests__/ComposedCacheAdapter-test.ts +235 -117
- package/src/__tests__/EnforcingEntityLoader-test.ts +135 -1
- package/src/__tests__/Entity-test.ts +64 -11
- package/src/__tests__/EntityAssociationLoader-test.ts +6 -8
- package/src/__tests__/EntityCommonUseCases-test.ts +25 -28
- package/src/__tests__/EntityCompanion-test.ts +4 -4
- package/src/__tests__/EntityCompanionProvider-test.ts +9 -8
- package/src/__tests__/EntityConfiguration-test.ts +85 -6
- package/src/__tests__/EntityDatabaseAdapter-test.ts +113 -17
- package/src/__tests__/EntityEdges-test.ts +135 -138
- package/src/__tests__/EntityFields-test.ts +2 -2
- package/src/__tests__/EntityLoader-test.ts +5 -7
- package/src/__tests__/EntityMutator-MutationCacheConsistency-test.ts +17 -19
- package/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.ts +73 -0
- package/src/__tests__/EntityMutator-test.ts +74 -46
- package/src/__tests__/EntityPrivacyPolicy-test.ts +51 -74
- package/src/__tests__/EntityQueryContext-test.ts +1 -1
- package/src/__tests__/EntitySecondaryCacheLoader-test.ts +9 -9
- package/src/__tests__/EntitySelfReferentialEdges-test.ts +119 -122
- package/src/__tests__/GenericEntityCacheAdapter-test.ts +83 -28
- package/src/__tests__/ReadonlyEntity-test.ts +49 -9
- package/src/__tests__/ViewerContext-test.ts +1 -1
- package/src/__tests__/ViewerScopedEntityCompanion-test.ts +5 -2
- package/src/__tests__/ViewerScopedEntityCompanionProvider-test.ts +1 -1
- package/src/__tests__/ViewerScopedEntityMutatorFactory-test.ts +12 -3
- package/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.ts +25 -27
- package/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.ts +28 -34
- package/src/entityUtils.ts +4 -1
- package/src/errors/EntityInvalidFieldValueError.ts +5 -5
- package/src/errors/EntityNotAuthorizedError.ts +3 -3
- package/src/errors/EntityNotFoundError.ts +5 -5
- package/src/index.ts +7 -7
- package/src/internal/CompositeFieldHolder.ts +218 -0
- package/src/internal/CompositeFieldValueMap.ts +78 -0
- package/src/internal/EntityDataManager.ts +107 -96
- package/src/internal/EntityFieldTransformationUtils.ts +33 -14
- package/src/internal/EntityLoadInterfaces.ts +143 -0
- package/src/internal/EntityTableDataCoordinator.ts +8 -5
- package/src/internal/ReadThroughEntityCache.ts +63 -50
- package/src/internal/SingleFieldHolder.ts +131 -0
- package/src/internal/__tests__/CompositeFieldHolder-test.ts +25 -0
- package/src/internal/__tests__/CompositeFieldValueMap-test.ts +43 -0
- package/src/internal/__tests__/EntityDataManager-test.ts +308 -91
- package/src/internal/__tests__/EntityFieldTransformationUtils-test.ts +3 -2
- package/src/internal/__tests__/ReadThroughEntityCache-test.ts +315 -107
- package/src/metrics/EntityMetricsUtils.ts +7 -2
- package/src/metrics/IEntityMetricsAdapter.ts +6 -0
- package/src/rules/AlwaysAllowPrivacyPolicyRule.ts +5 -5
- package/src/rules/AlwaysDenyPrivacyPolicyRule.ts +5 -5
- package/src/rules/AlwaysSkipPrivacyPolicyRule.ts +5 -5
- package/src/rules/PrivacyPolicyRule.ts +4 -4
- package/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.ts +1 -1
- package/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.ts +1 -1
- package/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.ts +1 -1
- package/src/utils/EntityPrivacyUtils.ts +72 -30
- package/src/utils/{testing → __testfixtures__}/PrivacyPolicyRuleTestUtils.ts +26 -26
- package/src/{testfixtures → utils/__testfixtures__}/SimpleTestEntity.ts +16 -15
- package/src/utils/__testfixtures__/StubCacheAdapter.ts +164 -0
- package/src/utils/{testing → __testfixtures__}/StubDatabaseAdapter.ts +19 -12
- package/src/utils/{testing → __testfixtures__}/StubDatabaseAdapterProvider.ts +4 -4
- package/src/utils/__testfixtures__/TSMockitoExtensions.ts +69 -0
- package/src/{testfixtures → utils/__testfixtures__}/TestEntity.ts +21 -15
- package/src/{testfixtures → utils/__testfixtures__}/TestEntity2.ts +16 -15
- package/src/{testfixtures → utils/__testfixtures__}/TestEntityWithMutationTriggers.ts +23 -22
- package/src/{testfixtures → utils/__testfixtures__}/TestViewerContext.ts +1 -1
- package/src/utils/{testing → __testfixtures__}/describeFieldTestCase.ts +1 -1
- package/src/utils/__tests__/EntityPrivacyUtils-test.ts +81 -113
- package/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.ts +31 -30
- package/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.ts +1 -1
- package/src/utils/collections/SerializableKeyMap.ts +84 -0
- package/src/utils/collections/__tests__/SerializableKeyMap-test.ts +119 -0
- package/src/utils/collections/__tests__/sets-test.ts +17 -0
- package/src/utils/collections/maps.ts +7 -8
- package/src/utils/collections/sets.ts +3 -0
- package/src/utils/mergeEntityMutationTriggerConfigurations.ts +5 -5
- package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.d.ts +0 -1
- package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js +0 -273
- package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js.map +0 -1
- package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.d.ts +0 -26
- package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js +0 -110
- package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js.map +0 -1
- package/build/__tests__/AuthorizationResultBasedEntityLoader-test.d.ts +0 -1
- package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js +0 -401
- package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js.map +0 -1
- package/build/__tests__/ComposedCacheAdapter-test.d.ts +0 -1
- package/build/__tests__/ComposedCacheAdapter-test.js +0 -229
- package/build/__tests__/ComposedCacheAdapter-test.js.map +0 -1
- package/build/__tests__/ComposedSecondaryEntityCache-test.d.ts +0 -1
- package/build/__tests__/ComposedSecondaryEntityCache-test.js +0 -66
- package/build/__tests__/ComposedSecondaryEntityCache-test.js.map +0 -1
- package/build/__tests__/EnforcingEntityAssociationLoader-test.d.ts +0 -1
- package/build/__tests__/EnforcingEntityAssociationLoader-test.js +0 -115
- package/build/__tests__/EnforcingEntityAssociationLoader-test.js.map +0 -1
- package/build/__tests__/EnforcingEntityLoader-test.d.ts +0 -1
- package/build/__tests__/EnforcingEntityLoader-test.js +0 -253
- package/build/__tests__/EnforcingEntityLoader-test.js.map +0 -1
- package/build/__tests__/Entity-test.d.ts +0 -1
- package/build/__tests__/Entity-test.js +0 -54
- package/build/__tests__/Entity-test.js.map +0 -1
- package/build/__tests__/EntityAssociationLoader-test.d.ts +0 -1
- package/build/__tests__/EntityAssociationLoader-test.js +0 -30
- package/build/__tests__/EntityAssociationLoader-test.js.map +0 -1
- package/build/__tests__/EntityCommonUseCases-test.d.ts +0 -1
- package/build/__tests__/EntityCommonUseCases-test.js +0 -154
- package/build/__tests__/EntityCommonUseCases-test.js.map +0 -1
- package/build/__tests__/EntityCompanion-test.d.ts +0 -1
- package/build/__tests__/EntityCompanion-test.js +0 -77
- package/build/__tests__/EntityCompanion-test.js.map +0 -1
- package/build/__tests__/EntityCompanionProvider-test.d.ts +0 -1
- package/build/__tests__/EntityCompanionProvider-test.js +0 -54
- package/build/__tests__/EntityCompanionProvider-test.js.map +0 -1
- package/build/__tests__/EntityConfiguration-test.d.ts +0 -1
- package/build/__tests__/EntityConfiguration-test.js +0 -103
- package/build/__tests__/EntityConfiguration-test.js.map +0 -1
- package/build/__tests__/EntityDatabaseAdapter-test.d.ts +0 -1
- package/build/__tests__/EntityDatabaseAdapter-test.js +0 -146
- package/build/__tests__/EntityDatabaseAdapter-test.js.map +0 -1
- package/build/__tests__/EntityEdges-test.d.ts +0 -1
- package/build/__tests__/EntityEdges-test.js +0 -755
- package/build/__tests__/EntityEdges-test.js.map +0 -1
- package/build/__tests__/EntityFields-test.d.ts +0 -1
- package/build/__tests__/EntityFields-test.js +0 -63
- package/build/__tests__/EntityFields-test.js.map +0 -1
- package/build/__tests__/EntityLoader-test.d.ts +0 -1
- package/build/__tests__/EntityLoader-test.js +0 -36
- package/build/__tests__/EntityLoader-test.js.map +0 -1
- package/build/__tests__/EntityMutator-MutationCacheConsistency-test.d.ts +0 -1
- package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js +0 -77
- package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js.map +0 -1
- package/build/__tests__/EntityMutator-test.d.ts +0 -1
- package/build/__tests__/EntityMutator-test.js +0 -741
- package/build/__tests__/EntityMutator-test.js.map +0 -1
- package/build/__tests__/EntityPrivacyPolicy-test.d.ts +0 -1
- package/build/__tests__/EntityPrivacyPolicy-test.js +0 -463
- package/build/__tests__/EntityPrivacyPolicy-test.js.map +0 -1
- package/build/__tests__/EntityQueryContext-test.d.ts +0 -1
- package/build/__tests__/EntityQueryContext-test.js +0 -116
- package/build/__tests__/EntityQueryContext-test.js.map +0 -1
- package/build/__tests__/EntitySecondaryCacheLoader-test.d.ts +0 -1
- package/build/__tests__/EntitySecondaryCacheLoader-test.js +0 -60
- package/build/__tests__/EntitySecondaryCacheLoader-test.js.map +0 -1
- package/build/__tests__/EntitySelfReferentialEdges-test.d.ts +0 -1
- package/build/__tests__/EntitySelfReferentialEdges-test.js +0 -247
- package/build/__tests__/EntitySelfReferentialEdges-test.js.map +0 -1
- package/build/__tests__/GenericEntityCacheAdapter-test.d.ts +0 -1
- package/build/__tests__/GenericEntityCacheAdapter-test.js +0 -80
- package/build/__tests__/GenericEntityCacheAdapter-test.js.map +0 -1
- package/build/__tests__/ReadonlyEntity-test.d.ts +0 -1
- package/build/__tests__/ReadonlyEntity-test.js +0 -178
- package/build/__tests__/ReadonlyEntity-test.js.map +0 -1
- package/build/__tests__/ViewerContext-test.d.ts +0 -1
- package/build/__tests__/ViewerContext-test.js +0 -30
- package/build/__tests__/ViewerContext-test.js.map +0 -1
- package/build/__tests__/ViewerScopedEntityCompanion-test.d.ts +0 -1
- package/build/__tests__/ViewerScopedEntityCompanion-test.js +0 -20
- package/build/__tests__/ViewerScopedEntityCompanion-test.js.map +0 -1
- package/build/__tests__/ViewerScopedEntityCompanionProvider-test.d.ts +0 -1
- package/build/__tests__/ViewerScopedEntityCompanionProvider-test.js +0 -20
- package/build/__tests__/ViewerScopedEntityCompanionProvider-test.js.map +0 -1
- package/build/__tests__/ViewerScopedEntityLoaderFactory-test.d.ts +0 -1
- package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js +0 -23
- package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js.map +0 -1
- package/build/__tests__/ViewerScopedEntityMutatorFactory-test.d.ts +0 -1
- package/build/__tests__/ViewerScopedEntityMutatorFactory-test.js +0 -22
- package/build/__tests__/ViewerScopedEntityMutatorFactory-test.js.map +0 -1
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.d.ts +0 -1
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +0 -129
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +0 -1
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.d.ts +0 -1
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +0 -136
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js.map +0 -1
- package/build/__tests__/entityUtils-test.d.ts +0 -1
- package/build/__tests__/entityUtils-test.js +0 -87
- package/build/__tests__/entityUtils-test.js.map +0 -1
- package/build/internal/__tests__/EntityDataManager-test.d.ts +0 -1
- package/build/internal/__tests__/EntityDataManager-test.js +0 -373
- package/build/internal/__tests__/EntityDataManager-test.js.map +0 -1
- package/build/internal/__tests__/EntityFieldTransformationUtils-test.d.ts +0 -1
- package/build/internal/__tests__/EntityFieldTransformationUtils-test.js +0 -136
- package/build/internal/__tests__/EntityFieldTransformationUtils-test.js.map +0 -1
- package/build/internal/__tests__/ReadThroughEntityCache-test.d.ts +0 -1
- package/build/internal/__tests__/ReadThroughEntityCache-test.js +0 -206
- package/build/internal/__tests__/ReadThroughEntityCache-test.js.map +0 -1
- package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.d.ts +0 -1
- package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js +0 -21
- package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js.map +0 -1
- package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.d.ts +0 -1
- package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js +0 -21
- package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js.map +0 -1
- package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.d.ts +0 -1
- package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js +0 -21
- package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js.map +0 -1
- package/build/testfixtures/DateIDTestEntity.d.ts +0 -19
- package/build/testfixtures/DateIDTestEntity.js +0 -48
- package/build/testfixtures/DateIDTestEntity.js.map +0 -1
- package/build/testfixtures/SimpleTestEntity.d.ts +0 -20
- package/build/testfixtures/SimpleTestEntity.js +0 -48
- package/build/testfixtures/SimpleTestEntity.js.map +0 -1
- package/build/testfixtures/TestEntity.d.ts +0 -30
- package/build/testfixtures/TestEntity.js +0 -93
- package/build/testfixtures/TestEntity.js.map +0 -1
- package/build/testfixtures/TestEntity2.d.ts +0 -20
- package/build/testfixtures/TestEntity2.js +0 -51
- package/build/testfixtures/TestEntity2.js.map +0 -1
- package/build/testfixtures/TestEntityNumberKey.d.ts +0 -19
- package/build/testfixtures/TestEntityNumberKey.js +0 -48
- package/build/testfixtures/TestEntityNumberKey.js.map +0 -1
- package/build/testfixtures/TestEntityWithMutationTriggers.d.ts +0 -36
- package/build/testfixtures/TestEntityWithMutationTriggers.js +0 -82
- package/build/testfixtures/TestEntityWithMutationTriggers.js.map +0 -1
- package/build/testfixtures/TestViewerContext.d.ts +0 -3
- package/build/testfixtures/TestViewerContext.js +0 -10
- package/build/testfixtures/TestViewerContext.js.map +0 -1
- package/build/utils/__tests__/EntityPrivacyUtils-test.d.ts +0 -1
- package/build/utils/__tests__/EntityPrivacyUtils-test.js +0 -520
- package/build/utils/__tests__/EntityPrivacyUtils-test.js.map +0 -1
- package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.d.ts +0 -1
- package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js +0 -181
- package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js.map +0 -1
- package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.d.ts +0 -1
- package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js +0 -26
- package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js.map +0 -1
- package/build/utils/collections/__tests__/maps-test.d.ts +0 -1
- package/build/utils/collections/__tests__/maps-test.js +0 -120
- package/build/utils/collections/__tests__/maps-test.js.map +0 -1
- package/build/utils/testing/PrivacyPolicyRuleTestUtils.d.ts +0 -28
- package/build/utils/testing/PrivacyPolicyRuleTestUtils.js +0 -52
- package/build/utils/testing/PrivacyPolicyRuleTestUtils.js.map +0 -1
- package/build/utils/testing/StubCacheAdapter.d.ts +0 -27
- package/build/utils/testing/StubCacheAdapter.js +0 -86
- package/build/utils/testing/StubCacheAdapter.js.map +0 -1
- package/build/utils/testing/StubDatabaseAdapter.d.ts +0 -25
- package/build/utils/testing/StubDatabaseAdapter.js +0 -191
- package/build/utils/testing/StubDatabaseAdapter.js.map +0 -1
- package/build/utils/testing/StubDatabaseAdapterProvider.d.ts +0 -7
- package/build/utils/testing/StubDatabaseAdapterProvider.js +0 -14
- package/build/utils/testing/StubDatabaseAdapterProvider.js.map +0 -1
- package/build/utils/testing/StubQueryContextProvider.d.ts +0 -7
- package/build/utils/testing/StubQueryContextProvider.js +0 -19
- package/build/utils/testing/StubQueryContextProvider.js.map +0 -1
- package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.d.ts +0 -1
- package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js +0 -42
- package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js.map +0 -1
- package/build/utils/testing/__tests__/StubDatabaseAdapter-test.d.ts +0 -1
- package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js +0 -402
- package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js.map +0 -1
- package/build/utils/testing/createUnitTestEntityCompanionProvider.d.ts +0 -7
- package/build/utils/testing/createUnitTestEntityCompanionProvider.js +0 -36
- package/build/utils/testing/createUnitTestEntityCompanionProvider.js.map +0 -1
- package/build/utils/testing/describeFieldTestCase.d.ts +0 -2
- package/build/utils/testing/describeFieldTestCase.js +0 -18
- package/build/utils/testing/describeFieldTestCase.js.map +0 -1
- package/src/testfixtures/DateIDTestEntity.ts +0 -59
- package/src/testfixtures/TestEntityNumberKey.ts +0 -59
- package/src/utils/testing/StubCacheAdapter.ts +0 -122
- package/src/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.ts +0 -42
- package/src/utils/testing/__tests__/StubDatabaseAdapter-test.ts +0 -548
- /package/src/utils/{testing → __testfixtures__}/StubQueryContextProvider.ts +0 -0
- /package/src/utils/{testing → __testfixtures__}/createUnitTestEntityCompanionProvider.ts +0 -0
package/src/EntityFields.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
EntityFieldDefinition,
|
|
3
|
+
EntityFieldDefinitionOptions,
|
|
4
|
+
EntityFieldDefinitionOptionsExplicitCache,
|
|
5
|
+
} from './EntityFieldDefinition';
|
|
2
6
|
|
|
3
7
|
// Use our own regex since the `uuid` package doesn't support validating UUIDv6/7/8 yet
|
|
4
8
|
const UUID_REGEX =
|
|
@@ -7,7 +11,10 @@ const UUID_REGEX =
|
|
|
7
11
|
/**
|
|
8
12
|
* EntityFieldDefinition for a column with a JS string type.
|
|
9
13
|
*/
|
|
10
|
-
export class StringField extends EntityFieldDefinition<
|
|
14
|
+
export class StringField<TRequireExplicitCache extends boolean> extends EntityFieldDefinition<
|
|
15
|
+
string,
|
|
16
|
+
TRequireExplicitCache
|
|
17
|
+
> {
|
|
11
18
|
protected validateInputValueInternal(value: string): boolean {
|
|
12
19
|
return typeof value === 'string';
|
|
13
20
|
}
|
|
@@ -17,7 +24,9 @@ export class StringField extends EntityFieldDefinition<string> {
|
|
|
17
24
|
* EntityFieldDefinition for a column with a JS string type.
|
|
18
25
|
* Enforces that the string is a valid UUID.
|
|
19
26
|
*/
|
|
20
|
-
export class UUIDField
|
|
27
|
+
export class UUIDField<
|
|
28
|
+
TRequireExplicitCache extends boolean,
|
|
29
|
+
> extends StringField<TRequireExplicitCache> {
|
|
21
30
|
protected override validateInputValueInternal(value: string): boolean {
|
|
22
31
|
return super.validateInputValueInternal(value) && UUID_REGEX.test(value);
|
|
23
32
|
}
|
|
@@ -26,7 +35,10 @@ export class UUIDField extends StringField {
|
|
|
26
35
|
/**
|
|
27
36
|
* EntityFieldDefinition for a column with a JS Date type.
|
|
28
37
|
*/
|
|
29
|
-
export class DateField extends EntityFieldDefinition<
|
|
38
|
+
export class DateField<TRequireExplicitCache extends boolean> extends EntityFieldDefinition<
|
|
39
|
+
Date,
|
|
40
|
+
TRequireExplicitCache
|
|
41
|
+
> {
|
|
30
42
|
protected validateInputValueInternal(value: Date): boolean {
|
|
31
43
|
return value instanceof Date;
|
|
32
44
|
}
|
|
@@ -35,7 +47,10 @@ export class DateField extends EntityFieldDefinition<Date> {
|
|
|
35
47
|
/**
|
|
36
48
|
* EntityFieldDefinition for a column with a JS boolean type.
|
|
37
49
|
*/
|
|
38
|
-
export class BooleanField extends
|
|
50
|
+
export class BooleanField<TRequireExplicitCache extends boolean> extends EntityFieldDefinition<
|
|
51
|
+
boolean,
|
|
52
|
+
TRequireExplicitCache
|
|
53
|
+
> {
|
|
39
54
|
protected validateInputValueInternal(value: boolean): boolean {
|
|
40
55
|
return typeof value === 'boolean';
|
|
41
56
|
}
|
|
@@ -45,7 +60,10 @@ export class BooleanField extends EntityFieldDefinition<boolean> {
|
|
|
45
60
|
* EntityFieldDefinition for a column with a JS number type.
|
|
46
61
|
* Enforces that the number is an integer.
|
|
47
62
|
*/
|
|
48
|
-
export class IntField extends EntityFieldDefinition<
|
|
63
|
+
export class IntField<TRequireExplicitCache extends boolean> extends EntityFieldDefinition<
|
|
64
|
+
number,
|
|
65
|
+
TRequireExplicitCache
|
|
66
|
+
> {
|
|
49
67
|
protected validateInputValueInternal(value: number): boolean {
|
|
50
68
|
return typeof value === 'number' && Number.isInteger(value);
|
|
51
69
|
}
|
|
@@ -55,7 +73,10 @@ export class IntField extends EntityFieldDefinition<number> {
|
|
|
55
73
|
* EntityFieldDefinition for a column with a JS number type.
|
|
56
74
|
* Enforces that the number is a float (which includes integers in JS).
|
|
57
75
|
*/
|
|
58
|
-
export class FloatField extends EntityFieldDefinition<
|
|
76
|
+
export class FloatField<TRequireExplicitCache extends boolean> extends EntityFieldDefinition<
|
|
77
|
+
number,
|
|
78
|
+
TRequireExplicitCache
|
|
79
|
+
> {
|
|
59
80
|
protected validateInputValueInternal(value: number): boolean {
|
|
60
81
|
return typeof value === 'number';
|
|
61
82
|
}
|
|
@@ -65,7 +86,10 @@ export class FloatField extends EntityFieldDefinition<number> {
|
|
|
65
86
|
* EntityFieldDefinition for a column with a JS string array type.
|
|
66
87
|
* Enforces that every member of the string array is a string.
|
|
67
88
|
*/
|
|
68
|
-
export class StringArrayField extends EntityFieldDefinition<
|
|
89
|
+
export class StringArrayField<TRequireExplicitCache extends boolean> extends EntityFieldDefinition<
|
|
90
|
+
string[],
|
|
91
|
+
TRequireExplicitCache
|
|
92
|
+
> {
|
|
69
93
|
protected validateInputValueInternal(value: string[]): boolean {
|
|
70
94
|
return Array.isArray(value) && value.every((subValue) => typeof subValue === 'string');
|
|
71
95
|
}
|
|
@@ -74,7 +98,10 @@ export class StringArrayField extends EntityFieldDefinition<string[]> {
|
|
|
74
98
|
/**
|
|
75
99
|
* EntityFieldDefinition for a column with a JS JSON object type.
|
|
76
100
|
*/
|
|
77
|
-
export class JSONObjectField extends EntityFieldDefinition<
|
|
101
|
+
export class JSONObjectField<TRequireExplicitCache extends boolean> extends EntityFieldDefinition<
|
|
102
|
+
object,
|
|
103
|
+
TRequireExplicitCache
|
|
104
|
+
> {
|
|
78
105
|
protected validateInputValueInternal(value: object): boolean {
|
|
79
106
|
return typeof value === 'object' && !Array.isArray(value);
|
|
80
107
|
}
|
|
@@ -83,7 +110,10 @@ export class JSONObjectField extends EntityFieldDefinition<object> {
|
|
|
83
110
|
/**
|
|
84
111
|
* EntityFieldDefinition for a enum column with a JS string or number type.
|
|
85
112
|
*/
|
|
86
|
-
export class EnumField extends EntityFieldDefinition<
|
|
113
|
+
export class EnumField<TRequireExplicitCache extends boolean> extends EntityFieldDefinition<
|
|
114
|
+
string | number,
|
|
115
|
+
TRequireExplicitCache
|
|
116
|
+
> {
|
|
87
117
|
protected validateInputValueInternal(value: string | number): boolean {
|
|
88
118
|
return typeof value === 'number' || typeof value === 'string';
|
|
89
119
|
}
|
|
@@ -92,9 +122,16 @@ export class EnumField extends EntityFieldDefinition<string | number> {
|
|
|
92
122
|
/**
|
|
93
123
|
* EntityFieldDefinition for a enum column with a strict typescript enum type.
|
|
94
124
|
*/
|
|
95
|
-
export class StrictEnumField<
|
|
125
|
+
export class StrictEnumField<
|
|
126
|
+
T extends object,
|
|
127
|
+
TRequireExplicitCache extends boolean,
|
|
128
|
+
> extends EnumField<TRequireExplicitCache> {
|
|
96
129
|
private readonly enum: T;
|
|
97
|
-
constructor(
|
|
130
|
+
constructor(
|
|
131
|
+
options: TRequireExplicitCache extends true
|
|
132
|
+
? EntityFieldDefinitionOptionsExplicitCache & { enum: T }
|
|
133
|
+
: EntityFieldDefinitionOptions & { enum: T },
|
|
134
|
+
) {
|
|
98
135
|
super(options);
|
|
99
136
|
this.enum = options.enum;
|
|
100
137
|
}
|
package/src/EntityLoader.ts
CHANGED
|
@@ -12,14 +12,14 @@ import ViewerContext from './ViewerContext';
|
|
|
12
12
|
* cached, and authorized against the entity's EntityPrivacyPolicy.
|
|
13
13
|
*/
|
|
14
14
|
export default class EntityLoader<
|
|
15
|
-
TFields extends
|
|
16
|
-
|
|
15
|
+
TFields extends Record<string, any>,
|
|
16
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
17
17
|
TViewerContext extends ViewerContext,
|
|
18
18
|
TViewerContext2 extends TViewerContext,
|
|
19
|
-
TEntity extends ReadonlyEntity<TFields,
|
|
19
|
+
TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
20
20
|
TPrivacyPolicy extends EntityPrivacyPolicy<
|
|
21
21
|
TFields,
|
|
22
|
-
|
|
22
|
+
TIDField,
|
|
23
23
|
TViewerContext,
|
|
24
24
|
TEntity,
|
|
25
25
|
TSelectedFields
|
|
@@ -31,7 +31,7 @@ export default class EntityLoader<
|
|
|
31
31
|
private readonly queryContext: EntityQueryContext,
|
|
32
32
|
private readonly entityClass: IEntityClass<
|
|
33
33
|
TFields,
|
|
34
|
-
|
|
34
|
+
TIDField,
|
|
35
35
|
TViewerContext,
|
|
36
36
|
TEntity,
|
|
37
37
|
TPrivacyPolicy,
|
|
@@ -46,7 +46,7 @@ export default class EntityLoader<
|
|
|
46
46
|
*/
|
|
47
47
|
enforcing(): EnforcingEntityLoader<
|
|
48
48
|
TFields,
|
|
49
|
-
|
|
49
|
+
TIDField,
|
|
50
50
|
TViewerContext,
|
|
51
51
|
TEntity,
|
|
52
52
|
TPrivacyPolicy,
|
|
@@ -62,7 +62,7 @@ export default class EntityLoader<
|
|
|
62
62
|
*/
|
|
63
63
|
withAuthorizationResults(): AuthorizationResultBasedEntityLoader<
|
|
64
64
|
TFields,
|
|
65
|
-
|
|
65
|
+
TIDField,
|
|
66
66
|
TViewerContext,
|
|
67
67
|
TEntity,
|
|
68
68
|
TPrivacyPolicy,
|
|
@@ -80,7 +80,7 @@ export default class EntityLoader<
|
|
|
80
80
|
*/
|
|
81
81
|
public utils(): EntityLoaderUtils<
|
|
82
82
|
TFields,
|
|
83
|
-
|
|
83
|
+
TIDField,
|
|
84
84
|
TViewerContext,
|
|
85
85
|
TEntity,
|
|
86
86
|
TPrivacyPolicy,
|
|
@@ -12,13 +12,13 @@ import IEntityMetricsAdapter from './metrics/IEntityMetricsAdapter';
|
|
|
12
12
|
* The primary entry point for loading entities.
|
|
13
13
|
*/
|
|
14
14
|
export default class EntityLoaderFactory<
|
|
15
|
-
TFields extends
|
|
16
|
-
|
|
15
|
+
TFields extends Record<string, any>,
|
|
16
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
17
17
|
TViewerContext extends ViewerContext,
|
|
18
|
-
TEntity extends ReadonlyEntity<TFields,
|
|
18
|
+
TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
19
19
|
TPrivacyPolicy extends EntityPrivacyPolicy<
|
|
20
20
|
TFields,
|
|
21
|
-
|
|
21
|
+
TIDField,
|
|
22
22
|
TViewerContext,
|
|
23
23
|
TEntity,
|
|
24
24
|
TSelectedFields
|
|
@@ -28,13 +28,13 @@ export default class EntityLoaderFactory<
|
|
|
28
28
|
constructor(
|
|
29
29
|
private readonly entityCompanion: EntityCompanion<
|
|
30
30
|
TFields,
|
|
31
|
-
|
|
31
|
+
TIDField,
|
|
32
32
|
TViewerContext,
|
|
33
33
|
TEntity,
|
|
34
34
|
TPrivacyPolicy,
|
|
35
35
|
TSelectedFields
|
|
36
36
|
>,
|
|
37
|
-
private readonly dataManager: EntityDataManager<TFields>,
|
|
37
|
+
private readonly dataManager: EntityDataManager<TFields, TIDField>,
|
|
38
38
|
protected readonly metricsAdapter: IEntityMetricsAdapter,
|
|
39
39
|
) {}
|
|
40
40
|
|
|
@@ -48,14 +48,14 @@ export default class EntityLoaderFactory<
|
|
|
48
48
|
queryContext: EntityQueryContext,
|
|
49
49
|
privacyPolicyEvaluationContext: EntityPrivacyPolicyEvaluationContext<
|
|
50
50
|
TFields,
|
|
51
|
-
|
|
51
|
+
TIDField,
|
|
52
52
|
TViewerContext,
|
|
53
53
|
TEntity,
|
|
54
54
|
TSelectedFields
|
|
55
55
|
>,
|
|
56
56
|
): AuthorizationResultBasedEntityLoader<
|
|
57
57
|
TFields,
|
|
58
|
-
|
|
58
|
+
TIDField,
|
|
59
59
|
TViewerContext,
|
|
60
60
|
TEntity,
|
|
61
61
|
TPrivacyPolicy,
|
package/src/EntityLoaderUtils.ts
CHANGED
|
@@ -9,6 +9,7 @@ import ReadonlyEntity from './ReadonlyEntity';
|
|
|
9
9
|
import ViewerContext from './ViewerContext';
|
|
10
10
|
import { pick } from './entityUtils';
|
|
11
11
|
import EntityDataManager from './internal/EntityDataManager';
|
|
12
|
+
import { SingleFieldHolder, SingleFieldValueHolder } from './internal/SingleFieldHolder';
|
|
12
13
|
import IEntityMetricsAdapter from './metrics/IEntityMetricsAdapter';
|
|
13
14
|
import { mapMapAsync } from './utils/collections/maps';
|
|
14
15
|
|
|
@@ -17,13 +18,13 @@ import { mapMapAsync } from './utils/collections/maps';
|
|
|
17
18
|
* Methods are exposed publicly since in rare cases they may need to be called manually.
|
|
18
19
|
*/
|
|
19
20
|
export default class EntityLoaderUtils<
|
|
20
|
-
TFields extends
|
|
21
|
-
|
|
21
|
+
TFields extends Record<string, any>,
|
|
22
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
22
23
|
TViewerContext extends ViewerContext,
|
|
23
|
-
TEntity extends ReadonlyEntity<TFields,
|
|
24
|
+
TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
24
25
|
TPrivacyPolicy extends EntityPrivacyPolicy<
|
|
25
26
|
TFields,
|
|
26
|
-
|
|
27
|
+
TIDField,
|
|
27
28
|
TViewerContext,
|
|
28
29
|
TEntity,
|
|
29
30
|
TSelectedFields
|
|
@@ -35,15 +36,15 @@ export default class EntityLoaderUtils<
|
|
|
35
36
|
private readonly queryContext: EntityQueryContext,
|
|
36
37
|
private readonly privacyPolicyEvaluationContext: EntityPrivacyPolicyEvaluationContext<
|
|
37
38
|
TFields,
|
|
38
|
-
|
|
39
|
+
TIDField,
|
|
39
40
|
TViewerContext,
|
|
40
41
|
TEntity,
|
|
41
42
|
TSelectedFields
|
|
42
43
|
>,
|
|
43
|
-
private readonly entityConfiguration: EntityConfiguration<TFields>,
|
|
44
|
+
private readonly entityConfiguration: EntityConfiguration<TFields, TIDField>,
|
|
44
45
|
private readonly entityClass: IEntityClass<
|
|
45
46
|
TFields,
|
|
46
|
-
|
|
47
|
+
TIDField,
|
|
47
48
|
TViewerContext,
|
|
48
49
|
TEntity,
|
|
49
50
|
TPrivacyPolicy,
|
|
@@ -51,7 +52,7 @@ export default class EntityLoaderUtils<
|
|
|
51
52
|
>,
|
|
52
53
|
private readonly entitySelectedFields: TSelectedFields[] | undefined,
|
|
53
54
|
private readonly privacyPolicy: TPrivacyPolicy,
|
|
54
|
-
private readonly dataManager: EntityDataManager<TFields>,
|
|
55
|
+
private readonly dataManager: EntityDataManager<TFields, TIDField>,
|
|
55
56
|
protected readonly metricsAdapter: IEntityMetricsAdapter,
|
|
56
57
|
) {}
|
|
57
58
|
|
|
@@ -60,7 +61,35 @@ export default class EntityLoaderUtils<
|
|
|
60
61
|
* @param objectFields - entity data object to be invalidated
|
|
61
62
|
*/
|
|
62
63
|
async invalidateFieldsAsync(objectFields: Readonly<TFields>): Promise<void> {
|
|
63
|
-
|
|
64
|
+
const keys = Object.keys(objectFields) as (keyof TFields)[];
|
|
65
|
+
const singleFieldKeyValues = keys
|
|
66
|
+
.map((fieldName: keyof TFields) => {
|
|
67
|
+
const value = objectFields[fieldName];
|
|
68
|
+
if (value === undefined || value === null) {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
return [
|
|
72
|
+
new SingleFieldHolder<TFields, TIDField, typeof fieldName>(fieldName),
|
|
73
|
+
new SingleFieldValueHolder(value),
|
|
74
|
+
] as const;
|
|
75
|
+
})
|
|
76
|
+
.filter((kv) => kv !== null);
|
|
77
|
+
|
|
78
|
+
const compositeFieldKeyValues = this.entityConfiguration.compositeFieldInfo
|
|
79
|
+
.getAllCompositeFieldHolders()
|
|
80
|
+
.map((compositeFieldHolder) => {
|
|
81
|
+
const compositeFieldValueHolder =
|
|
82
|
+
compositeFieldHolder.extractCompositeFieldValueHolderFromObjectFields(objectFields);
|
|
83
|
+
return compositeFieldValueHolder
|
|
84
|
+
? ([compositeFieldHolder, compositeFieldValueHolder] as const)
|
|
85
|
+
: null;
|
|
86
|
+
})
|
|
87
|
+
.filter((kv) => kv !== null);
|
|
88
|
+
|
|
89
|
+
await this.dataManager.invalidateKeyValuePairsAsync([
|
|
90
|
+
...singleFieldKeyValues,
|
|
91
|
+
...compositeFieldKeyValues,
|
|
92
|
+
]);
|
|
64
93
|
}
|
|
65
94
|
|
|
66
95
|
/**
|
|
@@ -86,7 +115,7 @@ export default class EntityLoaderUtils<
|
|
|
86
115
|
const selectedFields = pick(fieldsObject, entitySelectedFields);
|
|
87
116
|
return new this.entityClass({
|
|
88
117
|
viewerContext: this.viewerContext,
|
|
89
|
-
id: id as
|
|
118
|
+
id: id as TFields[TIDField],
|
|
90
119
|
databaseFields: fieldsObject,
|
|
91
120
|
selectedFields,
|
|
92
121
|
});
|
|
@@ -8,10 +8,10 @@ export enum EntityMutationType {
|
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
export type EntityValidatorMutationInfo<
|
|
11
|
-
TFields extends
|
|
12
|
-
|
|
11
|
+
TFields extends Record<string, any>,
|
|
12
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
13
13
|
TViewerContext extends ViewerContext,
|
|
14
|
-
TEntity extends Entity<TFields,
|
|
14
|
+
TEntity extends Entity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
15
15
|
TSelectedFields extends keyof TFields = keyof TFields,
|
|
16
16
|
> =
|
|
17
17
|
| {
|
|
@@ -39,10 +39,10 @@ export type EntityCascadingDeletionInfo = {
|
|
|
39
39
|
};
|
|
40
40
|
|
|
41
41
|
export type EntityTriggerMutationInfo<
|
|
42
|
-
TFields extends
|
|
43
|
-
|
|
42
|
+
TFields extends Record<string, any>,
|
|
43
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
44
44
|
TViewerContext extends ViewerContext,
|
|
45
|
-
TEntity extends Entity<TFields,
|
|
45
|
+
TEntity extends Entity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
46
46
|
TSelectedFields extends keyof TFields = keyof TFields,
|
|
47
47
|
> =
|
|
48
48
|
| {
|
|
@@ -7,48 +7,84 @@ import ViewerContext from './ViewerContext';
|
|
|
7
7
|
* Interface to define trigger behavior for entities.
|
|
8
8
|
*/
|
|
9
9
|
export default interface EntityMutationTriggerConfiguration<
|
|
10
|
-
TFields extends
|
|
11
|
-
|
|
10
|
+
TFields extends Record<string, any>,
|
|
11
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
12
12
|
TViewerContext extends ViewerContext,
|
|
13
|
-
TEntity extends ReadonlyEntity<TFields,
|
|
13
|
+
TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
14
14
|
TSelectedFields extends keyof TFields = keyof TFields,
|
|
15
15
|
> {
|
|
16
16
|
/**
|
|
17
17
|
* Trigger set that runs within the transaction but before the entity is created in the database.
|
|
18
18
|
*/
|
|
19
|
-
beforeCreate?: EntityMutationTrigger<
|
|
19
|
+
beforeCreate?: EntityMutationTrigger<
|
|
20
|
+
TFields,
|
|
21
|
+
TIDField,
|
|
22
|
+
TViewerContext,
|
|
23
|
+
TEntity,
|
|
24
|
+
TSelectedFields
|
|
25
|
+
>[];
|
|
20
26
|
/**
|
|
21
27
|
* Trigger set that runs within the transaction but after the entity is created in the database and cache is invalidated.
|
|
22
28
|
*/
|
|
23
|
-
afterCreate?: EntityMutationTrigger<
|
|
29
|
+
afterCreate?: EntityMutationTrigger<
|
|
30
|
+
TFields,
|
|
31
|
+
TIDField,
|
|
32
|
+
TViewerContext,
|
|
33
|
+
TEntity,
|
|
34
|
+
TSelectedFields
|
|
35
|
+
>[];
|
|
24
36
|
|
|
25
37
|
/**
|
|
26
38
|
* Trigger set that runs within the transaction but before the entity is updated in the database.
|
|
27
39
|
*/
|
|
28
|
-
beforeUpdate?: EntityMutationTrigger<
|
|
40
|
+
beforeUpdate?: EntityMutationTrigger<
|
|
41
|
+
TFields,
|
|
42
|
+
TIDField,
|
|
43
|
+
TViewerContext,
|
|
44
|
+
TEntity,
|
|
45
|
+
TSelectedFields
|
|
46
|
+
>[];
|
|
29
47
|
/**
|
|
30
48
|
* Trigger set that runs within the transaction but after the entity is updated in the database and cache is invalidated.
|
|
31
49
|
*/
|
|
32
|
-
afterUpdate?: EntityMutationTrigger<
|
|
50
|
+
afterUpdate?: EntityMutationTrigger<
|
|
51
|
+
TFields,
|
|
52
|
+
TIDField,
|
|
53
|
+
TViewerContext,
|
|
54
|
+
TEntity,
|
|
55
|
+
TSelectedFields
|
|
56
|
+
>[];
|
|
33
57
|
|
|
34
58
|
/**
|
|
35
59
|
* Trigger set that runs within the transaction but before the entity is deleted from the database.
|
|
36
60
|
*/
|
|
37
|
-
beforeDelete?: EntityMutationTrigger<
|
|
61
|
+
beforeDelete?: EntityMutationTrigger<
|
|
62
|
+
TFields,
|
|
63
|
+
TIDField,
|
|
64
|
+
TViewerContext,
|
|
65
|
+
TEntity,
|
|
66
|
+
TSelectedFields
|
|
67
|
+
>[];
|
|
38
68
|
/**
|
|
39
69
|
* Trigger set that runs within the transaction but after the entity is deleted from the database and cache is invalidated.
|
|
40
70
|
*/
|
|
41
|
-
afterDelete?: EntityMutationTrigger<
|
|
71
|
+
afterDelete?: EntityMutationTrigger<
|
|
72
|
+
TFields,
|
|
73
|
+
TIDField,
|
|
74
|
+
TViewerContext,
|
|
75
|
+
TEntity,
|
|
76
|
+
TSelectedFields
|
|
77
|
+
>[];
|
|
42
78
|
|
|
43
79
|
/**
|
|
44
80
|
* Trigger set that runs within the transaction but before the entity is created, updated, or deleted.
|
|
45
81
|
*/
|
|
46
|
-
beforeAll?: EntityMutationTrigger<TFields,
|
|
82
|
+
beforeAll?: EntityMutationTrigger<TFields, TIDField, TViewerContext, TEntity, TSelectedFields>[];
|
|
47
83
|
/**
|
|
48
84
|
* Trigger set that runs within the transaction but after the entity is created in, updated in, or deleted from
|
|
49
85
|
* the database and the cache is invalidated.
|
|
50
86
|
*/
|
|
51
|
-
afterAll?: EntityMutationTrigger<TFields,
|
|
87
|
+
afterAll?: EntityMutationTrigger<TFields, TIDField, TViewerContext, TEntity, TSelectedFields>[];
|
|
52
88
|
|
|
53
89
|
/**
|
|
54
90
|
* Trigger set that runs after committing the mutation transaction. If the call to the mutation is wrapped in a transaction, these
|
|
@@ -56,7 +92,7 @@ export default interface EntityMutationTriggerConfiguration<
|
|
|
56
92
|
*/
|
|
57
93
|
afterCommit?: EntityNonTransactionalMutationTrigger<
|
|
58
94
|
TFields,
|
|
59
|
-
|
|
95
|
+
TIDField,
|
|
60
96
|
TViewerContext,
|
|
61
97
|
TEntity,
|
|
62
98
|
TSelectedFields
|
|
@@ -68,17 +104,23 @@ export default interface EntityMutationTriggerConfiguration<
|
|
|
68
104
|
* same transaction as the mutation itself.
|
|
69
105
|
*/
|
|
70
106
|
export abstract class EntityMutationTrigger<
|
|
71
|
-
TFields extends
|
|
72
|
-
|
|
107
|
+
TFields extends Record<string, any>,
|
|
108
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
73
109
|
TViewerContext extends ViewerContext,
|
|
74
|
-
TEntity extends ReadonlyEntity<TFields,
|
|
110
|
+
TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
75
111
|
TSelectedFields extends keyof TFields = keyof TFields,
|
|
76
112
|
> {
|
|
77
113
|
abstract executeAsync(
|
|
78
114
|
viewerContext: TViewerContext,
|
|
79
115
|
queryContext: EntityTransactionalQueryContext,
|
|
80
116
|
entity: TEntity,
|
|
81
|
-
mutationInfo: EntityTriggerMutationInfo<
|
|
117
|
+
mutationInfo: EntityTriggerMutationInfo<
|
|
118
|
+
TFields,
|
|
119
|
+
TIDField,
|
|
120
|
+
TViewerContext,
|
|
121
|
+
TEntity,
|
|
122
|
+
TSelectedFields
|
|
123
|
+
>,
|
|
82
124
|
): Promise<void>;
|
|
83
125
|
}
|
|
84
126
|
|
|
@@ -87,15 +129,21 @@ export abstract class EntityMutationTrigger<
|
|
|
87
129
|
* since they run after the transaction is committed.
|
|
88
130
|
*/
|
|
89
131
|
export abstract class EntityNonTransactionalMutationTrigger<
|
|
90
|
-
TFields extends
|
|
91
|
-
|
|
132
|
+
TFields extends Record<string, any>,
|
|
133
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
92
134
|
TViewerContext extends ViewerContext,
|
|
93
|
-
TEntity extends ReadonlyEntity<TFields,
|
|
135
|
+
TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
94
136
|
TSelectedFields extends keyof TFields = keyof TFields,
|
|
95
137
|
> {
|
|
96
138
|
abstract executeAsync(
|
|
97
139
|
viewerContext: TViewerContext,
|
|
98
140
|
entity: TEntity,
|
|
99
|
-
mutationInfo: EntityTriggerMutationInfo<
|
|
141
|
+
mutationInfo: EntityTriggerMutationInfo<
|
|
142
|
+
TFields,
|
|
143
|
+
TIDField,
|
|
144
|
+
TViewerContext,
|
|
145
|
+
TEntity,
|
|
146
|
+
TSelectedFields
|
|
147
|
+
>,
|
|
100
148
|
): Promise<void>;
|
|
101
149
|
}
|
|
@@ -8,10 +8,10 @@ import ViewerContext from './ViewerContext';
|
|
|
8
8
|
* same transaction as the mutation itself before creating or updating an entity.
|
|
9
9
|
*/
|
|
10
10
|
export default abstract class EntityMutationValidator<
|
|
11
|
-
TFields extends
|
|
12
|
-
|
|
11
|
+
TFields extends Record<string, any>,
|
|
12
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
13
13
|
TViewerContext extends ViewerContext,
|
|
14
|
-
TEntity extends ReadonlyEntity<TFields,
|
|
14
|
+
TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
15
15
|
TSelectedFields extends keyof TFields = keyof TFields,
|
|
16
16
|
> {
|
|
17
17
|
abstract executeAsync(
|
|
@@ -20,7 +20,7 @@ export default abstract class EntityMutationValidator<
|
|
|
20
20
|
entity: TEntity,
|
|
21
21
|
mutationInfo: EntityValidatorMutationInfo<
|
|
22
22
|
TFields,
|
|
23
|
-
|
|
23
|
+
TIDField,
|
|
24
24
|
TViewerContext,
|
|
25
25
|
TEntity,
|
|
26
26
|
TSelectedFields
|
|
@@ -19,13 +19,13 @@ import IEntityMetricsAdapter from './metrics/IEntityMetricsAdapter';
|
|
|
19
19
|
* The primary interface for creating, mutating, and deleting entities.
|
|
20
20
|
*/
|
|
21
21
|
export default class EntityMutatorFactory<
|
|
22
|
-
TFields extends
|
|
23
|
-
|
|
22
|
+
TFields extends Record<string, any>,
|
|
23
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
24
24
|
TViewerContext extends ViewerContext,
|
|
25
|
-
TEntity extends Entity<TFields,
|
|
25
|
+
TEntity extends Entity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
26
26
|
TPrivacyPolicy extends EntityPrivacyPolicy<
|
|
27
27
|
TFields,
|
|
28
|
-
|
|
28
|
+
TIDField,
|
|
29
29
|
TViewerContext,
|
|
30
30
|
TEntity,
|
|
31
31
|
TSelectedFields
|
|
@@ -34,10 +34,10 @@ export default class EntityMutatorFactory<
|
|
|
34
34
|
> {
|
|
35
35
|
constructor(
|
|
36
36
|
private readonly entityCompanionProvider: EntityCompanionProvider,
|
|
37
|
-
private readonly entityConfiguration: EntityConfiguration<TFields>,
|
|
37
|
+
private readonly entityConfiguration: EntityConfiguration<TFields, TIDField>,
|
|
38
38
|
private readonly entityClass: IEntityClass<
|
|
39
39
|
TFields,
|
|
40
|
-
|
|
40
|
+
TIDField,
|
|
41
41
|
TViewerContext,
|
|
42
42
|
TEntity,
|
|
43
43
|
TPrivacyPolicy,
|
|
@@ -46,27 +46,27 @@ export default class EntityMutatorFactory<
|
|
|
46
46
|
private readonly privacyPolicy: TPrivacyPolicy,
|
|
47
47
|
private readonly mutationValidators: EntityMutationValidator<
|
|
48
48
|
TFields,
|
|
49
|
-
|
|
49
|
+
TIDField,
|
|
50
50
|
TViewerContext,
|
|
51
51
|
TEntity,
|
|
52
52
|
TSelectedFields
|
|
53
53
|
>[],
|
|
54
54
|
private readonly mutationTriggers: EntityMutationTriggerConfiguration<
|
|
55
55
|
TFields,
|
|
56
|
-
|
|
56
|
+
TIDField,
|
|
57
57
|
TViewerContext,
|
|
58
58
|
TEntity,
|
|
59
59
|
TSelectedFields
|
|
60
60
|
>,
|
|
61
61
|
private readonly entityLoaderFactory: EntityLoaderFactory<
|
|
62
62
|
TFields,
|
|
63
|
-
|
|
63
|
+
TIDField,
|
|
64
64
|
TViewerContext,
|
|
65
65
|
TEntity,
|
|
66
66
|
TPrivacyPolicy,
|
|
67
67
|
TSelectedFields
|
|
68
68
|
>,
|
|
69
|
-
private readonly databaseAdapter: EntityDatabaseAdapter<TFields>,
|
|
69
|
+
private readonly databaseAdapter: EntityDatabaseAdapter<TFields, TIDField>,
|
|
70
70
|
private readonly metricsAdapter: IEntityMetricsAdapter,
|
|
71
71
|
) {}
|
|
72
72
|
|
|
@@ -81,7 +81,7 @@ export default class EntityMutatorFactory<
|
|
|
81
81
|
queryContext: EntityQueryContext,
|
|
82
82
|
): AuthorizationResultBasedCreateMutator<
|
|
83
83
|
TFields,
|
|
84
|
-
|
|
84
|
+
TIDField,
|
|
85
85
|
TViewerContext,
|
|
86
86
|
TEntity,
|
|
87
87
|
TPrivacyPolicy,
|
|
@@ -113,7 +113,7 @@ export default class EntityMutatorFactory<
|
|
|
113
113
|
queryContext: EntityQueryContext,
|
|
114
114
|
): AuthorizationResultBasedUpdateMutator<
|
|
115
115
|
TFields,
|
|
116
|
-
|
|
116
|
+
TIDField,
|
|
117
117
|
TViewerContext,
|
|
118
118
|
TEntity,
|
|
119
119
|
TPrivacyPolicy,
|
|
@@ -145,7 +145,7 @@ export default class EntityMutatorFactory<
|
|
|
145
145
|
queryContext: EntityQueryContext,
|
|
146
146
|
): AuthorizationResultBasedDeleteMutator<
|
|
147
147
|
TFields,
|
|
148
|
-
|
|
148
|
+
TIDField,
|
|
149
149
|
TViewerContext,
|
|
150
150
|
TEntity,
|
|
151
151
|
TPrivacyPolicy,
|