@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/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.ts
CHANGED
|
@@ -12,7 +12,7 @@ import ViewerContext from '../../ViewerContext';
|
|
|
12
12
|
import AlwaysAllowPrivacyPolicyRule from '../../rules/AlwaysAllowPrivacyPolicyRule';
|
|
13
13
|
import AlwaysDenyPrivacyPolicyRule from '../../rules/AlwaysDenyPrivacyPolicyRule';
|
|
14
14
|
import { canViewerDeleteAsync } from '../EntityPrivacyUtils';
|
|
15
|
-
import { createUnitTestEntityCompanionProvider } from '../
|
|
15
|
+
import { createUnitTestEntityCompanionProvider } from '../__testfixtures__/createUnitTestEntityCompanionProvider';
|
|
16
16
|
|
|
17
17
|
describe(canViewerDeleteAsync, () => {
|
|
18
18
|
describe('edgeDeletionPermissionInferenceBehavior', () => {
|
|
@@ -21,20 +21,18 @@ describe(canViewerDeleteAsync, () => {
|
|
|
21
21
|
const viewerContext = new ViewerContext(companionProvider);
|
|
22
22
|
|
|
23
23
|
// create root
|
|
24
|
-
const testEntity = await TestEntity.creator(viewerContext).
|
|
24
|
+
const testEntity = await TestEntity.creator(viewerContext).createAsync();
|
|
25
25
|
|
|
26
26
|
// create a bunch of leaves referencing root with
|
|
27
27
|
// edgeDeletionPermissionInferenceBehavior = EntityEdgeDeletionPermissionInferenceBehavior.ONE_IMPLIES_ALL
|
|
28
28
|
for (let i = 0; i < 10; i++) {
|
|
29
29
|
await TestLeafEntity.creator(viewerContext)
|
|
30
|
-
.enforcing()
|
|
31
30
|
.setField('test_entity_id', testEntity.getID())
|
|
32
31
|
.createAsync();
|
|
33
32
|
}
|
|
34
33
|
|
|
35
34
|
for (let i = 0; i < 10; i++) {
|
|
36
35
|
await TestLeafLookupByFieldEntity.creator(viewerContext)
|
|
37
|
-
.enforcing()
|
|
38
36
|
.setField('test_entity_id', testEntity.getID())
|
|
39
37
|
.createAsync();
|
|
40
38
|
}
|
|
@@ -65,12 +63,11 @@ describe(canViewerDeleteAsync, () => {
|
|
|
65
63
|
const viewerContext = new ViewerContext(companionProvider);
|
|
66
64
|
|
|
67
65
|
// create root
|
|
68
|
-
const testEntity = await TestEntity.creator(viewerContext).
|
|
66
|
+
const testEntity = await TestEntity.creator(viewerContext).createAsync();
|
|
69
67
|
|
|
70
68
|
// create a bunch of leaves with no edgeDeletionPermissionInferenceBehavior
|
|
71
69
|
for (let i = 0; i < 10; i++) {
|
|
72
70
|
await TestLeafNoInferenceEntity.creator(viewerContext)
|
|
73
|
-
.enforcing()
|
|
74
71
|
.setField('test_entity_id', testEntity.getID())
|
|
75
72
|
.createAsync();
|
|
76
73
|
}
|
|
@@ -100,43 +97,44 @@ type TestLeafEntityFields = {
|
|
|
100
97
|
};
|
|
101
98
|
|
|
102
99
|
class AlwaysAllowEntityPrivacyPolicy<
|
|
103
|
-
TFields extends
|
|
104
|
-
|
|
100
|
+
TFields extends Record<string, any>,
|
|
101
|
+
TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
|
|
105
102
|
TViewerContext extends ViewerContext,
|
|
106
|
-
TEntity extends ReadonlyEntity<TFields,
|
|
103
|
+
TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
|
|
107
104
|
TSelectedFields extends keyof TFields = keyof TFields,
|
|
108
|
-
> extends EntityPrivacyPolicy<TFields,
|
|
105
|
+
> extends EntityPrivacyPolicy<TFields, TIDField, TViewerContext, TEntity, TSelectedFields> {
|
|
109
106
|
protected override readonly readRules = [
|
|
110
|
-
new AlwaysAllowPrivacyPolicyRule<TFields,
|
|
107
|
+
new AlwaysAllowPrivacyPolicyRule<TFields, TIDField, TViewerContext, TEntity, TSelectedFields>(),
|
|
111
108
|
];
|
|
112
109
|
protected override readonly createRules = [
|
|
113
|
-
new AlwaysAllowPrivacyPolicyRule<TFields,
|
|
110
|
+
new AlwaysAllowPrivacyPolicyRule<TFields, TIDField, TViewerContext, TEntity, TSelectedFields>(),
|
|
114
111
|
];
|
|
115
112
|
protected override readonly updateRules = [
|
|
116
|
-
new AlwaysDenyPrivacyPolicyRule<TFields,
|
|
113
|
+
new AlwaysDenyPrivacyPolicyRule<TFields, TIDField, TViewerContext, TEntity, TSelectedFields>(),
|
|
117
114
|
];
|
|
118
115
|
protected override readonly deleteRules = [
|
|
119
|
-
new AlwaysAllowPrivacyPolicyRule<TFields,
|
|
116
|
+
new AlwaysAllowPrivacyPolicyRule<TFields, TIDField, TViewerContext, TEntity, TSelectedFields>(),
|
|
120
117
|
];
|
|
121
118
|
}
|
|
122
119
|
|
|
123
|
-
class TestEntity extends Entity<TestEntityFields,
|
|
120
|
+
class TestEntity extends Entity<TestEntityFields, 'id', ViewerContext> {
|
|
124
121
|
static defineCompanionDefinition(): EntityCompanionDefinition<
|
|
125
122
|
TestEntityFields,
|
|
126
|
-
|
|
123
|
+
'id',
|
|
127
124
|
ViewerContext,
|
|
128
125
|
TestEntity,
|
|
129
|
-
AlwaysAllowEntityPrivacyPolicy<TestEntityFields,
|
|
126
|
+
AlwaysAllowEntityPrivacyPolicy<TestEntityFields, 'id', ViewerContext, TestEntity>
|
|
130
127
|
> {
|
|
131
128
|
return {
|
|
132
129
|
entityClass: TestEntity,
|
|
133
|
-
entityConfiguration: new EntityConfiguration<TestEntityFields>({
|
|
130
|
+
entityConfiguration: new EntityConfiguration<TestEntityFields, 'id'>({
|
|
134
131
|
idField: 'id',
|
|
135
132
|
tableName: 'blah',
|
|
136
133
|
inboundEdges: [TestLeafEntity, TestLeafLookupByFieldEntity, TestLeafNoInferenceEntity],
|
|
137
134
|
schema: {
|
|
138
135
|
id: new UUIDField({
|
|
139
136
|
columnName: 'custom_id',
|
|
137
|
+
cache: false,
|
|
140
138
|
}),
|
|
141
139
|
},
|
|
142
140
|
databaseAdapterFlavor: 'postgres',
|
|
@@ -147,22 +145,23 @@ class TestEntity extends Entity<TestEntityFields, string, ViewerContext> {
|
|
|
147
145
|
}
|
|
148
146
|
}
|
|
149
147
|
|
|
150
|
-
class TestLeafEntity extends Entity<TestLeafEntityFields,
|
|
148
|
+
class TestLeafEntity extends Entity<TestLeafEntityFields, 'id', ViewerContext> {
|
|
151
149
|
static defineCompanionDefinition(): EntityCompanionDefinition<
|
|
152
150
|
TestLeafEntityFields,
|
|
153
|
-
|
|
151
|
+
'id',
|
|
154
152
|
ViewerContext,
|
|
155
153
|
TestLeafEntity,
|
|
156
|
-
AlwaysAllowEntityPrivacyPolicy<TestLeafEntityFields,
|
|
154
|
+
AlwaysAllowEntityPrivacyPolicy<TestLeafEntityFields, 'id', ViewerContext, TestLeafEntity>
|
|
157
155
|
> {
|
|
158
156
|
return {
|
|
159
157
|
entityClass: TestLeafEntity,
|
|
160
|
-
entityConfiguration: new EntityConfiguration<TestLeafEntityFields>({
|
|
158
|
+
entityConfiguration: new EntityConfiguration<TestLeafEntityFields, 'id'>({
|
|
161
159
|
idField: 'id',
|
|
162
160
|
tableName: 'blah_2',
|
|
163
161
|
schema: {
|
|
164
162
|
id: new UUIDField({
|
|
165
163
|
columnName: 'custom_id',
|
|
164
|
+
cache: false,
|
|
166
165
|
}),
|
|
167
166
|
test_entity_id: new UUIDField({
|
|
168
167
|
columnName: 'test_entity_id',
|
|
@@ -182,22 +181,23 @@ class TestLeafEntity extends Entity<TestLeafEntityFields, string, ViewerContext>
|
|
|
182
181
|
}
|
|
183
182
|
}
|
|
184
183
|
|
|
185
|
-
class TestLeafLookupByFieldEntity extends Entity<TestLeafEntityFields,
|
|
184
|
+
class TestLeafLookupByFieldEntity extends Entity<TestLeafEntityFields, 'id', ViewerContext> {
|
|
186
185
|
static defineCompanionDefinition(): EntityCompanionDefinition<
|
|
187
186
|
TestLeafEntityFields,
|
|
188
|
-
|
|
187
|
+
'id',
|
|
189
188
|
ViewerContext,
|
|
190
189
|
TestLeafEntity,
|
|
191
|
-
AlwaysAllowEntityPrivacyPolicy<TestLeafEntityFields,
|
|
190
|
+
AlwaysAllowEntityPrivacyPolicy<TestLeafEntityFields, 'id', ViewerContext, TestLeafEntity>
|
|
192
191
|
> {
|
|
193
192
|
return {
|
|
194
193
|
entityClass: TestLeafEntity,
|
|
195
|
-
entityConfiguration: new EntityConfiguration<TestLeafEntityFields>({
|
|
194
|
+
entityConfiguration: new EntityConfiguration<TestLeafEntityFields, 'id'>({
|
|
196
195
|
idField: 'id',
|
|
197
196
|
tableName: 'blah_4',
|
|
198
197
|
schema: {
|
|
199
198
|
id: new UUIDField({
|
|
200
199
|
columnName: 'custom_id',
|
|
200
|
+
cache: false,
|
|
201
201
|
}),
|
|
202
202
|
test_entity_id: new UUIDField({
|
|
203
203
|
columnName: 'test_entity_id',
|
|
@@ -218,27 +218,28 @@ class TestLeafLookupByFieldEntity extends Entity<TestLeafEntityFields, string, V
|
|
|
218
218
|
}
|
|
219
219
|
}
|
|
220
220
|
|
|
221
|
-
class TestLeafNoInferenceEntity extends Entity<TestLeafEntityFields,
|
|
221
|
+
class TestLeafNoInferenceEntity extends Entity<TestLeafEntityFields, 'id', ViewerContext> {
|
|
222
222
|
static defineCompanionDefinition(): EntityCompanionDefinition<
|
|
223
223
|
TestLeafEntityFields,
|
|
224
|
-
|
|
224
|
+
'id',
|
|
225
225
|
ViewerContext,
|
|
226
226
|
TestLeafNoInferenceEntity,
|
|
227
227
|
AlwaysAllowEntityPrivacyPolicy<
|
|
228
228
|
TestLeafEntityFields,
|
|
229
|
-
|
|
229
|
+
'id',
|
|
230
230
|
ViewerContext,
|
|
231
231
|
TestLeafNoInferenceEntity
|
|
232
232
|
>
|
|
233
233
|
> {
|
|
234
234
|
return {
|
|
235
235
|
entityClass: TestLeafNoInferenceEntity,
|
|
236
|
-
entityConfiguration: new EntityConfiguration<TestLeafEntityFields>({
|
|
236
|
+
entityConfiguration: new EntityConfiguration<TestLeafEntityFields, 'id'>({
|
|
237
237
|
idField: 'id',
|
|
238
238
|
tableName: 'blah_3',
|
|
239
239
|
schema: {
|
|
240
240
|
id: new UUIDField({
|
|
241
241
|
columnName: 'custom_id',
|
|
242
|
+
cache: false,
|
|
242
243
|
}),
|
|
243
244
|
test_entity_id: new UUIDField({
|
|
244
245
|
columnName: 'test_entity_id',
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TestMutationTrigger } from '
|
|
1
|
+
import { TestMutationTrigger } from '../__testfixtures__/TestEntityWithMutationTriggers';
|
|
2
2
|
import { mergeEntityMutationTriggerConfigurations } from '../mergeEntityMutationTriggerConfigurations';
|
|
3
3
|
|
|
4
4
|
describe(mergeEntityMutationTriggerConfigurations, () => {
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A serializable object. The serialized value is used to determine equality.
|
|
3
|
+
*/
|
|
4
|
+
export interface ISerializable<TSerialized> {
|
|
5
|
+
serialize(): TSerialized;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* A map with keys that are serializable. Serialized keys are considered equal if their serialized values are equal.
|
|
10
|
+
* Otherwise, the map behaves like a regular Map.
|
|
11
|
+
*/
|
|
12
|
+
export abstract class SerializableKeyMap<TSerialized, K extends ISerializable<TSerialized>, V>
|
|
13
|
+
implements ReadonlyMap<K, V>, Map<K, V>
|
|
14
|
+
{
|
|
15
|
+
protected readonly underlyingMap: Map<TSerialized, V>;
|
|
16
|
+
|
|
17
|
+
constructor(iterable?: Iterable<readonly [K, V]> | null) {
|
|
18
|
+
this.underlyingMap = new Map(
|
|
19
|
+
Array.from(iterable ?? []).map(([key, value]) => [key.serialize(), value]),
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
protected abstract deserializeKey(serializedKey: TSerialized): K;
|
|
24
|
+
|
|
25
|
+
forEach(
|
|
26
|
+
callbackfn: (value: V, key: K, map: SerializableKeyMap<TSerialized, K, V>) => void,
|
|
27
|
+
thisArg?: any,
|
|
28
|
+
): void {
|
|
29
|
+
this.underlyingMap.forEach((value, key) => {
|
|
30
|
+
callbackfn.call(thisArg, value, this.deserializeKey(key), this);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
get(key: K): V | undefined {
|
|
35
|
+
return this.underlyingMap.get(key.serialize());
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
has(key: K): boolean {
|
|
39
|
+
return this.underlyingMap.has(key.serialize());
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
clear(): void {
|
|
43
|
+
this.underlyingMap.clear();
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
delete(key: K): boolean {
|
|
47
|
+
return this.underlyingMap.delete(key.serialize());
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
set(key: K, value: V): this {
|
|
51
|
+
this.underlyingMap.set(key.serialize(), value);
|
|
52
|
+
return this;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
get size(): number {
|
|
56
|
+
return this.underlyingMap.size;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
*entries(): MapIterator<[K, V]> {
|
|
60
|
+
for (const [key, value] of this.underlyingMap.entries()) {
|
|
61
|
+
yield [this.deserializeKey(key), value];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
*keys(): MapIterator<K> {
|
|
66
|
+
for (const key of this.underlyingMap.keys()) {
|
|
67
|
+
yield this.deserializeKey(key);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
*values(): MapIterator<V> {
|
|
72
|
+
for (const value of this.underlyingMap.values()) {
|
|
73
|
+
yield value;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
[Symbol.iterator](): MapIterator<[K, V]> {
|
|
78
|
+
return this.entries();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
get [Symbol.toStringTag](): string {
|
|
82
|
+
return 'SerializableKeyMap';
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { ISerializable, SerializableKeyMap } from '../SerializableKeyMap';
|
|
2
|
+
|
|
3
|
+
describe(SerializableKeyMap, () => {
|
|
4
|
+
it('behaves as a Map/ReadonlyMap', () => {
|
|
5
|
+
const map = new TestSerializableKeyMap();
|
|
6
|
+
expect(map.size).toBe(0);
|
|
7
|
+
expect(map.has(new TestSerializableKey('key'))).toBe(false);
|
|
8
|
+
expect(map.get(new TestSerializableKey('key'))).toBe(undefined);
|
|
9
|
+
|
|
10
|
+
map.set(new TestSerializableKey('key'), 'value');
|
|
11
|
+
expect(map.size).toBe(1);
|
|
12
|
+
expect(map.has(new TestSerializableKey('key'))).toBe(true);
|
|
13
|
+
expect(map.get(new TestSerializableKey('key'))).toBe('value');
|
|
14
|
+
|
|
15
|
+
map.delete(new TestSerializableKey('key'));
|
|
16
|
+
expect(map.size).toBe(0);
|
|
17
|
+
expect(map.has(new TestSerializableKey('key'))).toBe(false);
|
|
18
|
+
expect(map.get(new TestSerializableKey('key'))).toBe(undefined);
|
|
19
|
+
|
|
20
|
+
map.set(new TestSerializableKey('key'), 'value');
|
|
21
|
+
expect(map.size).toBe(1);
|
|
22
|
+
map.clear();
|
|
23
|
+
expect(map.size).toBe(0);
|
|
24
|
+
expect(map.get(new TestSerializableKey('key'))).toBe(undefined);
|
|
25
|
+
|
|
26
|
+
map.set(new TestSerializableKey('key'), 'value');
|
|
27
|
+
map.set(new TestSerializableKey('key'), 'value');
|
|
28
|
+
expect(map.size).toBe(1);
|
|
29
|
+
|
|
30
|
+
map.set(new TestSerializableKey('key2'), 'value2');
|
|
31
|
+
expect(map.size).toBe(2);
|
|
32
|
+
|
|
33
|
+
// check keys ordering based on insertion order
|
|
34
|
+
const keys = Array.from(map.keys());
|
|
35
|
+
expect(keys.length).toBe(2);
|
|
36
|
+
expect(keys[0]!.value).toBe('key');
|
|
37
|
+
expect(keys[1]!.value).toBe('key2');
|
|
38
|
+
|
|
39
|
+
// check values ordering based on insertion order
|
|
40
|
+
const values = Array.from(map.values());
|
|
41
|
+
expect(values.length).toBe(2);
|
|
42
|
+
expect(values[0]).toBe('value');
|
|
43
|
+
expect(values[1]).toBe('value2');
|
|
44
|
+
|
|
45
|
+
// check entries ordering based on insertion order
|
|
46
|
+
const entries = Array.from(map.entries());
|
|
47
|
+
expect(entries.length).toBe(2);
|
|
48
|
+
expect(entries[0]![0].value).toBe('key');
|
|
49
|
+
expect(entries[0]![1]).toBe('value');
|
|
50
|
+
expect(entries[1]![0].value).toBe('key2');
|
|
51
|
+
expect(entries[1]![1]).toBe('value2');
|
|
52
|
+
|
|
53
|
+
// check forEach ordering based on insertion order
|
|
54
|
+
const forEachEntries: [TestSerializableKey, string][] = [];
|
|
55
|
+
map.forEach((value, key) => {
|
|
56
|
+
forEachEntries.push([key, value]);
|
|
57
|
+
});
|
|
58
|
+
expect(forEachEntries.length).toBe(2);
|
|
59
|
+
expect(forEachEntries[0]![0].value).toBe('key');
|
|
60
|
+
expect(forEachEntries[0]![1]).toBe('value');
|
|
61
|
+
expect(forEachEntries[1]![0].value).toBe('key2');
|
|
62
|
+
expect(forEachEntries[1]![1]).toBe('value2');
|
|
63
|
+
|
|
64
|
+
// check iterator ordering based on insertion order
|
|
65
|
+
const iteratorEntries = Array.from(map);
|
|
66
|
+
expect(iteratorEntries.length).toBe(2);
|
|
67
|
+
expect(iteratorEntries[0]![0].value).toBe('key');
|
|
68
|
+
expect(iteratorEntries[0]![1]).toBe('value');
|
|
69
|
+
expect(iteratorEntries[1]![0].value).toBe('key2');
|
|
70
|
+
expect(iteratorEntries[1]![1]).toBe('value2');
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
it('constructs with values', () => {
|
|
74
|
+
const map = new TestSerializableKeyMap([
|
|
75
|
+
[new TestSerializableKey('key'), 'value'],
|
|
76
|
+
[new TestSerializableKey('key2'), 'value2'],
|
|
77
|
+
]);
|
|
78
|
+
expect(map.size).toBe(2);
|
|
79
|
+
expect(map.get(new TestSerializableKey('key'))).toBe('value');
|
|
80
|
+
expect(map.get(new TestSerializableKey('key2'))).toBe('value2');
|
|
81
|
+
|
|
82
|
+
const keys = Array.from(map.keys());
|
|
83
|
+
expect(keys.length).toBe(2);
|
|
84
|
+
expect(keys[0]!.value).toBe('key');
|
|
85
|
+
expect(keys[1]!.value).toBe('key2');
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
it('has correct toStringTag', () => {
|
|
89
|
+
const map = new TestSerializableKeyMap();
|
|
90
|
+
expect(Object.prototype.toString.call(map)).toBe('[object SerializableKeyMap]');
|
|
91
|
+
});
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
declare const TestSerializableKeySerializedBrand: unique symbol;
|
|
95
|
+
export type SerializedTestSerializableKey = string & {
|
|
96
|
+
readonly [TestSerializableKeySerializedBrand]: true;
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
class TestSerializableKey implements ISerializable<SerializedTestSerializableKey> {
|
|
100
|
+
constructor(public readonly value: string) {}
|
|
101
|
+
|
|
102
|
+
serialize(): SerializedTestSerializableKey {
|
|
103
|
+
return JSON.stringify(this.value) as SerializedTestSerializableKey;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
static deserialize(serialized: SerializedTestSerializableKey): TestSerializableKey {
|
|
107
|
+
return new TestSerializableKey(JSON.parse(serialized));
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
class TestSerializableKeyMap extends SerializableKeyMap<
|
|
112
|
+
SerializedTestSerializableKey,
|
|
113
|
+
TestSerializableKey,
|
|
114
|
+
string
|
|
115
|
+
> {
|
|
116
|
+
protected deserializeKey(serializedKey: SerializedTestSerializableKey): TestSerializableKey {
|
|
117
|
+
return TestSerializableKey.deserialize(serializedKey);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { areSetsEqual } from '../sets';
|
|
2
|
+
|
|
3
|
+
describe(areSetsEqual, () => {
|
|
4
|
+
it.each([
|
|
5
|
+
[new Set([1, 2]), new Set([1, 2])],
|
|
6
|
+
[new Set([1, 2]), new Set([2, 1])],
|
|
7
|
+
])('equal cases: %p', (a, b) => {
|
|
8
|
+
expect(areSetsEqual(a, b)).toBe(true);
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
it.each([
|
|
12
|
+
[new Set([1, 2, 3]), new Set([1, 2])],
|
|
13
|
+
[new Set([1, 2]), new Set([1, 2, 3])],
|
|
14
|
+
])('non-equal cases: %p', (a, b) => {
|
|
15
|
+
expect(areSetsEqual(a, b)).toBe(false);
|
|
16
|
+
});
|
|
17
|
+
});
|
|
@@ -30,7 +30,7 @@ export const mapMap = <K, V, M>(
|
|
|
30
30
|
map: ReadonlyMap<K, V>,
|
|
31
31
|
mapper: (value: V, key: K) => M,
|
|
32
32
|
): Map<K, M> => {
|
|
33
|
-
const resultingMap = new Map();
|
|
33
|
+
const resultingMap = new Map<K, M>();
|
|
34
34
|
for (const [k, v] of map) {
|
|
35
35
|
resultingMap.set(k, mapper(v, k));
|
|
36
36
|
}
|
|
@@ -47,7 +47,7 @@ export const mapMapAsync = async function <K, V, M>(
|
|
|
47
47
|
map: ReadonlyMap<K, V>,
|
|
48
48
|
mapper: (value: V, key: K) => Promise<M>,
|
|
49
49
|
): Promise<Map<K, M>> {
|
|
50
|
-
const resultingMap
|
|
50
|
+
const resultingMap = new Map<K, M>();
|
|
51
51
|
await Promise.all(
|
|
52
52
|
Array.from(map.keys()).map(async (k) => {
|
|
53
53
|
const initialValue = map.get(k) as V;
|
|
@@ -71,7 +71,7 @@ export const mapKeys = <K, V, K2>(
|
|
|
71
71
|
map: ReadonlyMap<K, V>,
|
|
72
72
|
mapper: (key: K, value: V) => K2,
|
|
73
73
|
): Map<K2, V> => {
|
|
74
|
-
const resultingMap = new Map();
|
|
74
|
+
const resultingMap = new Map<K2, V>();
|
|
75
75
|
for (const [k, v] of map) {
|
|
76
76
|
resultingMap.set(mapper(k, v), v);
|
|
77
77
|
}
|
|
@@ -94,10 +94,9 @@ export const zipToMap = <K, V>(keys: readonly K[], values: readonly V[]): Map<K,
|
|
|
94
94
|
keys.length === values.length,
|
|
95
95
|
`zipToMap input length mismatch: keys[${keys.length}], values[${values.length}]`,
|
|
96
96
|
);
|
|
97
|
-
const resultingMap = new Map();
|
|
97
|
+
const resultingMap = new Map<K, V>();
|
|
98
98
|
for (let i = 0; i < keys.length; i++) {
|
|
99
|
-
|
|
100
|
-
resultingMap.set(key, values[i]);
|
|
99
|
+
resultingMap.set(keys[i]!, values[i]!);
|
|
101
100
|
}
|
|
102
101
|
return resultingMap;
|
|
103
102
|
};
|
|
@@ -108,7 +107,7 @@ export const zipToMap = <K, V>(keys: readonly K[], values: readonly V[]): Map<K,
|
|
|
108
107
|
* @param map - map to invert
|
|
109
108
|
*/
|
|
110
109
|
export const invertMap = <K, V>(map: ReadonlyMap<K, V>): Map<V, K> => {
|
|
111
|
-
const resultingMap = new Map();
|
|
110
|
+
const resultingMap = new Map<V, K>();
|
|
112
111
|
for (const [k, v] of map) {
|
|
113
112
|
resultingMap.set(v, k);
|
|
114
113
|
}
|
|
@@ -185,7 +184,7 @@ export function filterMap<K, V>(
|
|
|
185
184
|
map: ReadonlyMap<K, V>,
|
|
186
185
|
predicate: (value: V, key: K) => unknown,
|
|
187
186
|
): Map<K, V> {
|
|
188
|
-
const resultingMap = new Map();
|
|
187
|
+
const resultingMap = new Map<K, V>();
|
|
189
188
|
map.forEach((v, k) => {
|
|
190
189
|
if (predicate(v, k)) {
|
|
191
190
|
resultingMap.set(k, v);
|
|
@@ -7,20 +7,20 @@ function nonNullish<TValue>(value: TValue | null | undefined): value is NonNulla
|
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
export function mergeEntityMutationTriggerConfigurations<
|
|
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,
|
|
15
15
|
>(
|
|
16
16
|
...mutationTriggerConfigurations: EntityMutationTriggerConfiguration<
|
|
17
17
|
TFields,
|
|
18
|
-
|
|
18
|
+
TIDField,
|
|
19
19
|
TViewerContext,
|
|
20
20
|
TEntity,
|
|
21
21
|
TSelectedFields
|
|
22
22
|
>[]
|
|
23
|
-
): EntityMutationTriggerConfiguration<TFields,
|
|
23
|
+
): EntityMutationTriggerConfiguration<TFields, TIDField, TViewerContext, TEntity, TSelectedFields> {
|
|
24
24
|
const merged = {
|
|
25
25
|
beforeCreate: mutationTriggerConfigurations.flatMap((c) => c.beforeCreate).filter(nonNullish),
|
|
26
26
|
afterCreate: mutationTriggerConfigurations.flatMap((c) => c.afterCreate).filter(nonNullish),
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|