@expo/entity 0.35.0 → 0.36.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/AuthorizationResultBasedEntityLoader.d.ts +128 -0
- package/build/AuthorizationResultBasedEntityLoader.js +196 -0
- package/build/AuthorizationResultBasedEntityLoader.js.map +1 -0
- package/build/ComposedEntityCacheAdapter.js +1 -0
- package/build/ComposedEntityCacheAdapter.js.map +1 -1
- package/build/ComposedSecondaryEntityCache.js +1 -0
- package/build/ComposedSecondaryEntityCache.js.map +1 -1
- package/build/EnforcingEntityLoader.d.ts +5 -4
- package/build/EnforcingEntityLoader.js +4 -2
- package/build/EnforcingEntityLoader.js.map +1 -1
- package/build/Entity.d.ts +0 -27
- package/build/Entity.js +0 -50
- package/build/Entity.js.map +1 -1
- package/build/EntityAssociationLoader.d.ts +1 -1
- package/build/EntityAssociationLoader.js +17 -8
- package/build/EntityAssociationLoader.js.map +1 -1
- package/build/EntityCompanion.js +9 -1
- package/build/EntityCompanion.js.map +1 -1
- package/build/EntityCompanionProvider.d.ts +3 -1
- package/build/EntityCompanionProvider.js +10 -4
- package/build/EntityCompanionProvider.js.map +1 -1
- package/build/EntityConfiguration.d.ts +2 -1
- package/build/EntityConfiguration.js +19 -1
- package/build/EntityConfiguration.js.map +1 -1
- package/build/EntityDatabaseAdapter.d.ts +2 -2
- package/build/EntityDatabaseAdapter.js +5 -3
- package/build/EntityDatabaseAdapter.js.map +1 -1
- package/build/EntityFieldDefinition.d.ts +21 -10
- package/build/EntityFieldDefinition.js +8 -9
- package/build/EntityFieldDefinition.js.map +1 -1
- package/build/EntityFields.d.ts +10 -0
- package/build/EntityFields.js +15 -1
- package/build/EntityFields.js.map +1 -1
- package/build/EntityLoader.d.ts +12 -125
- package/build/EntityLoader.js +24 -239
- package/build/EntityLoader.js.map +1 -1
- package/build/EntityLoaderFactory.d.ts +1 -1
- package/build/EntityLoaderFactory.js +3 -0
- package/build/EntityLoaderFactory.js.map +1 -1
- package/build/EntityLoaderUtils.d.ts +58 -0
- package/build/EntityLoaderUtils.js +109 -0
- package/build/EntityLoaderUtils.js.map +1 -0
- package/build/EntityMutator.d.ts +1 -0
- package/build/EntityMutator.js +71 -56
- package/build/EntityMutator.js.map +1 -1
- package/build/EntityMutatorFactory.js +9 -0
- package/build/EntityMutatorFactory.js.map +1 -1
- package/build/EntityPrivacyPolicy.d.ts +11 -5
- package/build/EntityPrivacyPolicy.js +5 -7
- package/build/EntityPrivacyPolicy.js.map +1 -1
- package/build/EntityQueryContext.d.ts +2 -1
- package/build/EntityQueryContext.js +11 -6
- package/build/EntityQueryContext.js.map +1 -1
- package/build/EntitySecondaryCacheLoader.js +5 -1
- package/build/EntitySecondaryCacheLoader.js.map +1 -1
- package/build/GenericEntityCacheAdapter.js +1 -0
- package/build/GenericEntityCacheAdapter.js.map +1 -1
- package/build/GenericSecondaryEntityCache.js +2 -0
- package/build/GenericSecondaryEntityCache.js.map +1 -1
- package/build/IEntityCacheAdapterProvider.d.ts +1 -1
- package/build/IEntityDatabaseAdapterProvider.d.ts +1 -1
- package/build/ReadonlyEntity.js +5 -1
- package/build/ReadonlyEntity.js.map +1 -1
- package/build/ViewerContext.js +2 -0
- package/build/ViewerContext.js.map +1 -1
- package/build/ViewerScopedEntityCompanion.js +2 -0
- package/build/ViewerScopedEntityCompanion.js.map +1 -1
- package/build/ViewerScopedEntityCompanionProvider.d.ts +0 -1
- package/build/ViewerScopedEntityCompanionProvider.js +2 -1
- package/build/ViewerScopedEntityCompanionProvider.js.map +1 -1
- package/build/ViewerScopedEntityLoaderFactory.d.ts +1 -1
- package/build/ViewerScopedEntityLoaderFactory.js +2 -0
- package/build/ViewerScopedEntityLoaderFactory.js.map +1 -1
- package/build/ViewerScopedEntityMutatorFactory.js +2 -0
- package/build/ViewerScopedEntityMutatorFactory.js.map +1 -1
- package/build/__tests__/ComposedCacheAdapter-test.js +2 -0
- package/build/__tests__/ComposedCacheAdapter-test.js.map +1 -1
- package/build/__tests__/ComposedSecondaryEntityCache-test.js +1 -0
- package/build/__tests__/ComposedSecondaryEntityCache-test.js.map +1 -1
- package/build/__tests__/EnforcingEntityLoader-test.js +101 -113
- package/build/__tests__/EnforcingEntityLoader-test.js.map +1 -1
- package/build/__tests__/Entity-test.js +0 -132
- package/build/__tests__/Entity-test.js.map +1 -1
- package/build/__tests__/EntityAssociationLoader-test.js +6 -2
- package/build/__tests__/EntityAssociationLoader-test.js.map +1 -1
- package/build/__tests__/EntityCommonUseCases-test.js +24 -22
- package/build/__tests__/EntityCommonUseCases-test.js.map +1 -1
- package/build/__tests__/EntityCompanion-test.js +26 -3
- package/build/__tests__/EntityCompanion-test.js.map +1 -1
- package/build/__tests__/EntityConfiguration-test.js +103 -0
- package/build/__tests__/EntityConfiguration-test.js.map +1 -0
- package/build/__tests__/EntityDatabaseAdapter-test.js +6 -0
- package/build/__tests__/EntityDatabaseAdapter-test.js.map +1 -1
- package/build/__tests__/EntityEdges-test.js +61 -20
- package/build/__tests__/EntityEdges-test.js.map +1 -1
- package/build/__tests__/EntityFields-test.js +6 -0
- package/build/__tests__/EntityFields-test.js.map +1 -1
- package/build/__tests__/EntityLoader-constructor-test.js +16 -17
- package/build/__tests__/EntityLoader-constructor-test.js.map +1 -1
- package/build/__tests__/EntityLoader-test.js +74 -22
- package/build/__tests__/EntityLoader-test.js.map +1 -1
- package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js +12 -15
- package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js.map +1 -1
- package/build/__tests__/EntityMutator-test.js +54 -9
- package/build/__tests__/EntityMutator-test.js.map +1 -1
- package/build/__tests__/EntityPrivacyPolicy-test.js +77 -59
- package/build/__tests__/EntityPrivacyPolicy-test.js.map +1 -1
- package/build/__tests__/EntityQueryContext-test.js +9 -0
- package/build/__tests__/EntityQueryContext-test.js.map +1 -1
- package/build/__tests__/EntitySelfReferentialEdges-test.js +42 -25
- package/build/__tests__/EntitySelfReferentialEdges-test.js.map +1 -1
- package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js.map +1 -1
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +20 -18
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +1 -1
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +12 -15
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js.map +1 -1
- package/build/entityUtils.d.ts +1 -1
- package/build/entityUtils.js.map +1 -1
- package/build/errors/EntityCacheAdapterError.js +2 -5
- package/build/errors/EntityCacheAdapterError.js.map +1 -1
- package/build/errors/EntityDatabaseAdapterError.js +14 -35
- package/build/errors/EntityDatabaseAdapterError.js.map +1 -1
- package/build/errors/EntityError.js +1 -0
- package/build/errors/EntityError.js.map +1 -1
- package/build/errors/EntityInvalidFieldValueError.js +2 -2
- package/build/errors/EntityInvalidFieldValueError.js.map +1 -1
- package/build/errors/EntityNotAuthorizedError.js +3 -2
- package/build/errors/EntityNotAuthorizedError.js.map +1 -1
- package/build/errors/EntityNotFoundError.js +2 -2
- package/build/errors/EntityNotFoundError.js.map +1 -1
- package/build/index.d.ts +1 -0
- package/build/index.js +1 -0
- package/build/index.js.map +1 -1
- package/build/internal/EntityDataManager.d.ts +1 -1
- package/build/internal/EntityDataManager.js +6 -1
- package/build/internal/EntityDataManager.js.map +1 -1
- package/build/internal/EntityFieldTransformationUtils.d.ts +5 -5
- package/build/internal/EntityFieldTransformationUtils.js +5 -8
- package/build/internal/EntityFieldTransformationUtils.js.map +1 -1
- package/build/internal/EntityTableDataCoordinator.d.ts +1 -1
- package/build/internal/EntityTableDataCoordinator.js +5 -0
- package/build/internal/EntityTableDataCoordinator.js.map +1 -1
- package/build/internal/ReadThroughEntityCache.d.ts +1 -1
- package/build/internal/ReadThroughEntityCache.js +2 -0
- package/build/internal/ReadThroughEntityCache.js.map +1 -1
- package/build/internal/__tests__/EntityFieldTransformationUtils-test.js +6 -2
- package/build/internal/__tests__/EntityFieldTransformationUtils-test.js.map +1 -1
- package/build/internal/__tests__/ReadThroughEntityCache-test.js +33 -0
- package/build/internal/__tests__/ReadThroughEntityCache-test.js.map +1 -1
- package/build/metrics/IEntityMetricsAdapter.d.ts +1 -1
- package/build/rules/AlwaysAllowPrivacyPolicyRule.d.ts +1 -1
- package/build/rules/AlwaysAllowPrivacyPolicyRule.js.map +1 -1
- package/build/rules/AlwaysDenyPrivacyPolicyRule.d.ts +1 -1
- package/build/rules/AlwaysDenyPrivacyPolicyRule.js.map +1 -1
- package/build/rules/AlwaysSkipPrivacyPolicyRule.d.ts +1 -1
- package/build/rules/AlwaysSkipPrivacyPolicyRule.js.map +1 -1
- package/build/rules/PrivacyPolicyRule.d.ts +1 -1
- package/build/rules/PrivacyPolicyRule.js.map +1 -1
- package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js.map +1 -1
- package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js.map +1 -1
- package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js.map +1 -1
- package/build/testfixtures/DateIDTestEntity.js +12 -15
- package/build/testfixtures/DateIDTestEntity.js.map +1 -1
- package/build/testfixtures/SimpleTestEntity.js +12 -15
- package/build/testfixtures/SimpleTestEntity.js.map +1 -1
- package/build/testfixtures/TestEntity.js +12 -15
- package/build/testfixtures/TestEntity.js.map +1 -1
- package/build/testfixtures/TestEntity2.js +12 -15
- package/build/testfixtures/TestEntity2.js.map +1 -1
- package/build/testfixtures/TestEntityNumberKey.js +12 -15
- package/build/testfixtures/TestEntityNumberKey.js.map +1 -1
- package/build/testfixtures/TestEntityWithMutationTriggers.d.ts +36 -0
- package/build/testfixtures/TestEntityWithMutationTriggers.js +82 -0
- package/build/testfixtures/TestEntityWithMutationTriggers.js.map +1 -0
- package/build/utils/EntityPrivacyUtils.d.ts +34 -0
- package/build/utils/EntityPrivacyUtils.js +160 -0
- package/build/utils/EntityPrivacyUtils.js.map +1 -0
- package/build/utils/__tests__/EntityPrivacyUtils-test.d.ts +1 -0
- package/build/utils/__tests__/EntityPrivacyUtils-test.js +395 -0
- package/build/utils/__tests__/EntityPrivacyUtils-test.js.map +1 -0
- package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.d.ts +1 -0
- package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js +26 -0
- package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js.map +1 -0
- package/build/utils/collections/maps.js.map +1 -1
- package/build/utils/mergeEntityMutationTriggerConfigurations.d.ts +4 -0
- package/build/utils/mergeEntityMutationTriggerConfigurations.js +28 -0
- package/build/utils/mergeEntityMutationTriggerConfigurations.js.map +1 -0
- package/build/utils/testing/PrivacyPolicyRuleTestUtils.d.ts +1 -1
- package/build/utils/testing/PrivacyPolicyRuleTestUtils.js.map +1 -1
- package/build/utils/testing/StubCacheAdapter.d.ts +3 -3
- package/build/utils/testing/StubCacheAdapter.js +3 -3
- package/build/utils/testing/StubCacheAdapter.js.map +1 -1
- package/build/utils/testing/StubDatabaseAdapter.d.ts +2 -2
- package/build/utils/testing/StubDatabaseAdapter.js +4 -2
- package/build/utils/testing/StubDatabaseAdapter.js.map +1 -1
- package/build/utils/testing/StubDatabaseAdapterProvider.d.ts +1 -1
- package/build/utils/testing/StubDatabaseAdapterProvider.js +1 -3
- package/build/utils/testing/StubDatabaseAdapterProvider.js.map +1 -1
- package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.d.ts +1 -0
- package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js +42 -0
- package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js.map +1 -0
- package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js +53 -0
- package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js.map +1 -1
- package/build/utils/testing/describeFieldTestCase.js.map +1 -1
- package/package.json +4 -3
- package/src/AuthorizationResultBasedEntityLoader.ts +297 -0
- package/src/ComposedEntityCacheAdapter.ts +6 -6
- package/src/ComposedSecondaryEntityCache.ts +8 -8
- package/src/EnforcingEntityLoader.ts +20 -19
- package/src/Entity.ts +11 -126
- package/src/EntityAssociationLoader.ts +40 -41
- package/src/EntityCompanion.ts +8 -4
- package/src/EntityCompanionProvider.ts +24 -16
- package/src/EntityConfiguration.ts +18 -7
- package/src/EntityDatabaseAdapter.ts +41 -41
- package/src/EntityFieldDefinition.ts +28 -18
- package/src/EntityFields.ts +15 -0
- package/src/EntityLoader.ts +63 -357
- package/src/EntityLoaderFactory.ts +10 -4
- package/src/EntityLoaderUtils.ts +149 -0
- package/src/EntityMutationInfo.ts +2 -2
- package/src/EntityMutationTriggerConfiguration.ts +5 -5
- package/src/EntityMutationValidator.ts +2 -2
- package/src/EntityMutator.ts +146 -144
- package/src/EntityMutatorFactory.ts +8 -8
- package/src/EntityPrivacyPolicy.ts +78 -28
- package/src/EntityQueryContext.ts +14 -13
- package/src/EntityQueryContextProvider.ts +5 -5
- package/src/EntitySecondaryCacheLoader.ts +13 -11
- package/src/GenericEntityCacheAdapter.ts +10 -10
- package/src/GenericSecondaryEntityCache.ts +6 -6
- package/src/IEntityCacheAdapter.ts +4 -4
- package/src/IEntityCacheAdapterProvider.ts +2 -2
- package/src/IEntityDatabaseAdapterProvider.ts +2 -2
- package/src/ReadonlyEntity.ts +5 -5
- package/src/ViewerContext.ts +5 -5
- package/src/ViewerScopedEntityCompanion.ts +4 -4
- package/src/ViewerScopedEntityCompanionProvider.ts +4 -5
- package/src/ViewerScopedEntityLoaderFactory.ts +10 -4
- package/src/ViewerScopedEntityMutatorFactory.ts +5 -5
- package/src/__tests__/ComposedCacheAdapter-test.ts +12 -10
- package/src/__tests__/ComposedSecondaryEntityCache-test.ts +8 -8
- package/src/__tests__/EnforcingEntityLoader-test.ts +236 -159
- package/src/__tests__/Entity-test.ts +0 -202
- package/src/__tests__/EntityAssociationLoader-test.ts +29 -25
- package/src/__tests__/EntityCommonUseCases-test.ts +29 -13
- package/src/__tests__/EntityCompanion-test.ts +57 -5
- package/src/__tests__/EntityConfiguration-test.ts +118 -0
- package/src/__tests__/EntityDatabaseAdapter-test.ts +11 -11
- package/src/__tests__/EntityEdges-test.ts +108 -36
- package/src/__tests__/EntityFields-test.ts +14 -2
- package/src/__tests__/EntityLoader-constructor-test.ts +20 -7
- package/src/__tests__/EntityLoader-test.ts +214 -86
- package/src/__tests__/EntityMutator-MutationCacheConsistency-test.ts +2 -2
- package/src/__tests__/EntityMutator-test.ts +281 -96
- package/src/__tests__/EntityPrivacyPolicy-test.ts +166 -53
- package/src/__tests__/EntityQueryContext-test.ts +30 -12
- package/src/__tests__/EntitySecondaryCacheLoader-test.ts +7 -7
- package/src/__tests__/EntitySelfReferentialEdges-test.ts +46 -26
- package/src/__tests__/GenericEntityCacheAdapter-test.ts +2 -2
- package/src/__tests__/ViewerContext-test.ts +1 -1
- package/src/__tests__/ViewerScopedEntityCompanion-test.ts +2 -2
- package/src/__tests__/ViewerScopedEntityCompanionProvider-test.ts +2 -2
- package/src/__tests__/ViewerScopedEntityLoaderFactory-test.ts +2 -1
- package/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.ts +19 -19
- package/src/__tests__/entityUtils-test.ts +2 -2
- package/src/entityUtils.ts +4 -4
- package/src/errors/EntityError.ts +4 -1
- package/src/errors/EntityInvalidFieldValueError.ts +2 -2
- package/src/errors/EntityNotAuthorizedError.ts +3 -3
- package/src/errors/EntityNotFoundError.ts +2 -2
- package/src/index.ts +1 -0
- package/src/internal/EntityDataManager.ts +24 -24
- package/src/internal/EntityFieldTransformationUtils.ts +39 -32
- package/src/internal/EntityTableDataCoordinator.ts +3 -3
- package/src/internal/ReadThroughEntityCache.ts +9 -9
- package/src/internal/__tests__/EntityDataManager-test.ts +51 -51
- package/src/internal/__tests__/EntityFieldTransformationUtils-test.ts +14 -10
- package/src/internal/__tests__/ReadThroughEntityCache-test.ts +74 -18
- package/src/metrics/EntityMetricsUtils.ts +4 -4
- package/src/metrics/IEntityMetricsAdapter.ts +1 -1
- package/src/rules/AlwaysAllowPrivacyPolicyRule.ts +9 -3
- package/src/rules/AlwaysDenyPrivacyPolicyRule.ts +9 -3
- package/src/rules/AlwaysSkipPrivacyPolicyRule.ts +9 -3
- package/src/rules/PrivacyPolicyRule.ts +9 -3
- package/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.ts +2 -1
- package/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.ts +2 -1
- package/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.ts +2 -1
- package/src/testfixtures/TestEntity.ts +1 -1
- package/src/testfixtures/TestEntityWithMutationTriggers.ts +156 -0
- package/src/utils/EntityPrivacyUtils.ts +325 -0
- package/src/utils/__tests__/EntityPrivacyUtils-test.ts +570 -0
- package/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.ts +29 -0
- package/src/utils/collections/__tests__/maps-test.ts +2 -2
- package/src/utils/collections/maps.ts +11 -11
- package/src/utils/mergeEntityMutationTriggerConfigurations.ts +44 -0
- package/src/utils/testing/PrivacyPolicyRuleTestUtils.ts +25 -22
- package/src/utils/testing/StubCacheAdapter.ts +17 -15
- package/src/utils/testing/StubDatabaseAdapter.ts +35 -30
- package/src/utils/testing/StubDatabaseAdapterProvider.ts +2 -2
- package/src/utils/testing/StubQueryContextProvider.ts +2 -2
- package/src/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.ts +42 -0
- package/src/utils/testing/__tests__/StubDatabaseAdapter-test.ts +111 -29
- package/src/utils/testing/createUnitTestEntityCompanionProvider.ts +2 -2
- package/src/utils/testing/describeFieldTestCase.ts +1 -1
- package/build/__tests__/EntityDataConfiguration-test.js +0 -68
- package/build/__tests__/EntityDataConfiguration-test.js.map +0 -1
- package/src/__tests__/EntityDataConfiguration-test.ts +0 -77
- /package/build/__tests__/{EntityDataConfiguration-test.d.ts → EntityConfiguration-test.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TestEntityNumberKey.js","sourceRoot":"","sources":["../../src/testfixtures/TestEntityNumberKey.ts"],"names":[],"mappings":";;;;;;AAAA,uDAA+B;AAE/B,iFAAyD;AACzD,kDAA2C;AAC3C,iFAAyD;AAEzD,yGAAiF;AAMpE,QAAA,4BAA4B,GAAG,IAAI,6BAAmB,CAAkB;IACnF,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,2CAA2C;IACtD,MAAM,EAAE;QACN,EAAE,EAAE,IAAI,uBAAQ,CAAC;YACf,UAAU,EAAE,WAAW;SACxB,CAAC;KACH;IACD,qBAAqB,EAAE,UAAU;IACjC,kBAAkB,EAAE,OAAO;CAC5B,CAAC,CAAC;AAEH,MAAa,sBAAuB,SAAQ,6BAK3C;
|
|
1
|
+
{"version":3,"file":"TestEntityNumberKey.js","sourceRoot":"","sources":["../../src/testfixtures/TestEntityNumberKey.ts"],"names":[],"mappings":";;;;;;AAAA,uDAA+B;AAE/B,iFAAyD;AACzD,kDAA2C;AAC3C,iFAAyD;AAEzD,yGAAiF;AAMpE,QAAA,4BAA4B,GAAG,IAAI,6BAAmB,CAAkB;IACnF,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,2CAA2C;IACtD,MAAM,EAAE;QACN,EAAE,EAAE,IAAI,uBAAQ,CAAC;YACf,UAAU,EAAE,WAAW;SACxB,CAAC;KACH;IACD,qBAAqB,EAAE,UAAU;IACjC,kBAAkB,EAAE,OAAO;CAC5B,CAAC,CAAC;AAEH,MAAa,sBAAuB,SAAQ,6BAK3C;IAC6B,SAAS,GAAG;QACtC,IAAI,sCAA4B,EAA2D;KAC5F,CAAC;IAC0B,WAAW,GAAG;QACxC,IAAI,sCAA4B,EAA2D;KAC5F,CAAC;IAC0B,WAAW,GAAG;QACxC,IAAI,sCAA4B,EAA2D;KAC5F,CAAC;IAC0B,WAAW,GAAG;QACxC,IAAI,sCAA4B,EAA2D;KAC5F,CAAC;CACH;AAlBD,wDAkBC;AAED,MAAqB,eAAgB,SAAQ,gBAA8C;IACzF,MAAM,CAAC,yBAAyB;QAO9B,OAAO;YACL,WAAW,EAAE,eAAe;YAC5B,mBAAmB,EAAE,oCAA4B;YACjD,kBAAkB,EAAE,sBAAsB;SAC3C,CAAC;IACJ,CAAC;CACF;AAdD,kCAcC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import Entity from '../Entity';
|
|
2
|
+
import { EntityCompanionDefinition } from '../EntityCompanionProvider';
|
|
3
|
+
import EntityConfiguration from '../EntityConfiguration';
|
|
4
|
+
import { EntityTriggerMutationInfo } from '../EntityMutationInfo';
|
|
5
|
+
import { EntityMutationTrigger, EntityNonTransactionalMutationTrigger } from '../EntityMutationTriggerConfiguration';
|
|
6
|
+
import EntityPrivacyPolicy from '../EntityPrivacyPolicy';
|
|
7
|
+
import { EntityQueryContext } from '../EntityQueryContext';
|
|
8
|
+
import ViewerContext from '../ViewerContext';
|
|
9
|
+
import AlwaysAllowPrivacyPolicyRule from '../rules/AlwaysAllowPrivacyPolicyRule';
|
|
10
|
+
export type TestMTFields = {
|
|
11
|
+
id: string;
|
|
12
|
+
stringField: string;
|
|
13
|
+
};
|
|
14
|
+
export declare const testEntityMTConfiguration: EntityConfiguration<TestMTFields>;
|
|
15
|
+
export declare class TestEntityMTPrivacyPolicy extends EntityPrivacyPolicy<TestMTFields, string, ViewerContext, TestEntityWithMutationTriggers> {
|
|
16
|
+
protected readonly readRules: AlwaysAllowPrivacyPolicyRule<TestMTFields, string, ViewerContext, TestEntityWithMutationTriggers, keyof TestMTFields>[];
|
|
17
|
+
protected readonly createRules: AlwaysAllowPrivacyPolicyRule<TestMTFields, string, ViewerContext, TestEntityWithMutationTriggers, keyof TestMTFields>[];
|
|
18
|
+
protected readonly updateRules: AlwaysAllowPrivacyPolicyRule<TestMTFields, string, ViewerContext, TestEntityWithMutationTriggers, keyof TestMTFields>[];
|
|
19
|
+
protected readonly deleteRules: AlwaysAllowPrivacyPolicyRule<TestMTFields, string, ViewerContext, TestEntityWithMutationTriggers, keyof TestMTFields>[];
|
|
20
|
+
}
|
|
21
|
+
export declare class TestMutationTrigger extends EntityMutationTrigger<TestMTFields, string, ViewerContext, TestEntityWithMutationTriggers, keyof TestMTFields> {
|
|
22
|
+
private readonly key;
|
|
23
|
+
constructor(key: string);
|
|
24
|
+
executeAsync(_viewerContext: ViewerContext, _queryContext: EntityQueryContext, _entity: TestEntityWithMutationTriggers, _mutationInfo: EntityTriggerMutationInfo<TestMTFields, string, ViewerContext, TestEntityWithMutationTriggers, keyof TestMTFields>): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
export declare class NonTransactionalTestMutationTrigger extends EntityNonTransactionalMutationTrigger<TestMTFields, string, ViewerContext, TestEntityWithMutationTriggers, keyof TestMTFields> {
|
|
27
|
+
private readonly key;
|
|
28
|
+
constructor(key: string);
|
|
29
|
+
executeAsync(_viewerContext: ViewerContext, _entity: TestEntityWithMutationTriggers, _mutationInfo: EntityTriggerMutationInfo<TestMTFields, string, ViewerContext, TestEntityWithMutationTriggers, keyof TestMTFields>): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* A test Entity that has one afterCreate and one afterAll trigger
|
|
33
|
+
*/
|
|
34
|
+
export default class TestEntityWithMutationTriggers extends Entity<TestMTFields, string, ViewerContext> {
|
|
35
|
+
static defineCompanionDefinition(): EntityCompanionDefinition<TestMTFields, string, ViewerContext, TestEntityWithMutationTriggers, TestEntityMTPrivacyPolicy>;
|
|
36
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.NonTransactionalTestMutationTrigger = exports.TestMutationTrigger = exports.TestEntityMTPrivacyPolicy = exports.testEntityMTConfiguration = void 0;
|
|
7
|
+
const Entity_1 = __importDefault(require("../Entity"));
|
|
8
|
+
const EntityConfiguration_1 = __importDefault(require("../EntityConfiguration"));
|
|
9
|
+
const EntityFields_1 = require("../EntityFields");
|
|
10
|
+
const EntityMutationTriggerConfiguration_1 = require("../EntityMutationTriggerConfiguration");
|
|
11
|
+
const EntityPrivacyPolicy_1 = __importDefault(require("../EntityPrivacyPolicy"));
|
|
12
|
+
const AlwaysAllowPrivacyPolicyRule_1 = __importDefault(require("../rules/AlwaysAllowPrivacyPolicyRule"));
|
|
13
|
+
exports.testEntityMTConfiguration = new EntityConfiguration_1.default({
|
|
14
|
+
idField: 'id',
|
|
15
|
+
tableName: 'test_entity_should_not_write_to_db_3',
|
|
16
|
+
schema: {
|
|
17
|
+
id: new EntityFields_1.UUIDField({
|
|
18
|
+
columnName: 'id',
|
|
19
|
+
}),
|
|
20
|
+
stringField: new EntityFields_1.StringField({
|
|
21
|
+
columnName: 'string_field',
|
|
22
|
+
}),
|
|
23
|
+
},
|
|
24
|
+
databaseAdapterFlavor: 'postgres',
|
|
25
|
+
cacheAdapterFlavor: 'redis',
|
|
26
|
+
});
|
|
27
|
+
class TestEntityMTPrivacyPolicy extends EntityPrivacyPolicy_1.default {
|
|
28
|
+
readRules = [
|
|
29
|
+
new AlwaysAllowPrivacyPolicyRule_1.default(),
|
|
30
|
+
];
|
|
31
|
+
createRules = [
|
|
32
|
+
new AlwaysAllowPrivacyPolicyRule_1.default(),
|
|
33
|
+
];
|
|
34
|
+
updateRules = [
|
|
35
|
+
new AlwaysAllowPrivacyPolicyRule_1.default(),
|
|
36
|
+
];
|
|
37
|
+
deleteRules = [
|
|
38
|
+
new AlwaysAllowPrivacyPolicyRule_1.default(),
|
|
39
|
+
];
|
|
40
|
+
}
|
|
41
|
+
exports.TestEntityMTPrivacyPolicy = TestEntityMTPrivacyPolicy;
|
|
42
|
+
class TestMutationTrigger extends EntityMutationTriggerConfiguration_1.EntityMutationTrigger {
|
|
43
|
+
key;
|
|
44
|
+
constructor(
|
|
45
|
+
// @ts-expect-error key is never used but is helpful for debugging
|
|
46
|
+
key) {
|
|
47
|
+
super();
|
|
48
|
+
this.key = key;
|
|
49
|
+
}
|
|
50
|
+
async executeAsync(_viewerContext, _queryContext, _entity, _mutationInfo) { }
|
|
51
|
+
}
|
|
52
|
+
exports.TestMutationTrigger = TestMutationTrigger;
|
|
53
|
+
class NonTransactionalTestMutationTrigger extends EntityMutationTriggerConfiguration_1.EntityNonTransactionalMutationTrigger {
|
|
54
|
+
key;
|
|
55
|
+
constructor(
|
|
56
|
+
// @ts-expect-error key is never used but is helpful for debugging
|
|
57
|
+
key) {
|
|
58
|
+
super();
|
|
59
|
+
this.key = key;
|
|
60
|
+
}
|
|
61
|
+
async executeAsync(_viewerContext, _entity, _mutationInfo) { }
|
|
62
|
+
}
|
|
63
|
+
exports.NonTransactionalTestMutationTrigger = NonTransactionalTestMutationTrigger;
|
|
64
|
+
/**
|
|
65
|
+
* A test Entity that has one afterCreate and one afterAll trigger
|
|
66
|
+
*/
|
|
67
|
+
class TestEntityWithMutationTriggers extends Entity_1.default {
|
|
68
|
+
static defineCompanionDefinition() {
|
|
69
|
+
return {
|
|
70
|
+
entityClass: TestEntityWithMutationTriggers,
|
|
71
|
+
entityConfiguration: exports.testEntityMTConfiguration,
|
|
72
|
+
privacyPolicyClass: TestEntityMTPrivacyPolicy,
|
|
73
|
+
mutationTriggers: {
|
|
74
|
+
afterCreate: [new TestMutationTrigger('localAfterCreate')],
|
|
75
|
+
afterAll: [new TestMutationTrigger('localAfterAll')],
|
|
76
|
+
afterCommit: [new NonTransactionalTestMutationTrigger('localAfterCommit')],
|
|
77
|
+
},
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
exports.default = TestEntityWithMutationTriggers;
|
|
82
|
+
//# sourceMappingURL=TestEntityWithMutationTriggers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TestEntityWithMutationTriggers.js","sourceRoot":"","sources":["../../src/testfixtures/TestEntityWithMutationTriggers.ts"],"names":[],"mappings":";;;;;;AAAA,uDAA+B;AAE/B,iFAAyD;AACzD,kDAAyD;AAEzD,8FAG+C;AAC/C,iFAAyD;AAGzD,yGAAiF;AAOpE,QAAA,yBAAyB,GAAG,IAAI,6BAAmB,CAAe;IAC7E,OAAO,EAAE,IAAI;IACb,SAAS,EAAE,sCAAsC;IACjD,MAAM,EAAE;QACN,EAAE,EAAE,IAAI,wBAAS,CAAC;YAChB,UAAU,EAAE,IAAI;SACjB,CAAC;QACF,WAAW,EAAE,IAAI,0BAAW,CAAC;YAC3B,UAAU,EAAE,cAAc;SAC3B,CAAC;KACH;IACD,qBAAqB,EAAE,UAAU;IACjC,kBAAkB,EAAE,OAAO;CAC5B,CAAC,CAAC;AAEH,MAAa,yBAA0B,SAAQ,6BAK9C;IAC6B,SAAS,GAAG;QACtC,IAAI,sCAA4B,EAK7B;KACJ,CAAC;IAC0B,WAAW,GAAG;QACxC,IAAI,sCAA4B,EAK7B;KACJ,CAAC;IAC0B,WAAW,GAAG;QACxC,IAAI,sCAA4B,EAK7B;KACJ,CAAC;IAC0B,WAAW,GAAG;QACxC,IAAI,sCAA4B,EAK7B;KACJ,CAAC;CACH;AAtCD,8DAsCC;AAED,MAAa,mBAAoB,SAAQ,0DAMxC;IAGoB;IAFnB;IACE,kEAAkE;IACjD,GAAW;QAE5B,KAAK,EAAE,CAAC;QAFS,QAAG,GAAH,GAAG,CAAQ;IAG9B,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,cAA6B,EAC7B,aAAiC,EACjC,OAAuC,EACvC,aAMC,IACe,CAAC;CACpB;AA1BD,kDA0BC;AAED,MAAa,mCAAoC,SAAQ,0EAMxD;IAGoB;IAFnB;IACE,kEAAkE;IACjD,GAAW;QAE5B,KAAK,EAAE,CAAC;QAFS,QAAG,GAAH,GAAG,CAAQ;IAG9B,CAAC;IAED,KAAK,CAAC,YAAY,CAChB,cAA6B,EAC7B,OAAuC,EACvC,aAMC,IACe,CAAC;CACpB;AAzBD,kFAyBC;AAED;;GAEG;AACH,MAAqB,8BAA+B,SAAQ,gBAI3D;IACC,MAAM,CAAC,yBAAyB;QAO9B,OAAO;YACL,WAAW,EAAE,8BAA8B;YAC3C,mBAAmB,EAAE,iCAAyB;YAC9C,kBAAkB,EAAE,yBAAyB;YAC7C,gBAAgB,EAAE;gBAChB,WAAW,EAAE,CAAC,IAAI,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;gBAC1D,QAAQ,EAAE,CAAC,IAAI,mBAAmB,CAAC,eAAe,CAAC,CAAC;gBACpD,WAAW,EAAE,CAAC,IAAI,mCAAmC,CAAC,kBAAkB,CAAC,CAAC;aAC3E;SACF,CAAC;IACJ,CAAC;CACF;AAvBD,iDAuBC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import Entity, { IEntityClass } from '../Entity';
|
|
2
|
+
import EntityPrivacyPolicy from '../EntityPrivacyPolicy';
|
|
3
|
+
import { EntityQueryContext } from '../EntityQueryContext';
|
|
4
|
+
import ViewerContext from '../ViewerContext';
|
|
5
|
+
/**
|
|
6
|
+
* Check whether an entity loaded by a viewer can be updated by that same viewer.
|
|
7
|
+
*
|
|
8
|
+
* @remarks
|
|
9
|
+
*
|
|
10
|
+
* This may be useful in situations relying upon the thrown privacy policy thrown authorization error
|
|
11
|
+
* is insufficient for the task at hand. When dealing with purely a sequence of mutations it is easy
|
|
12
|
+
* to roll back all mutations given a single authorization error by wrapping them in a single transaction.
|
|
13
|
+
* When certain portions of a mutation cannot be rolled back transactionally (third pary calls,
|
|
14
|
+
* legacy code, etc), using this method can help decide whether the sequence of mutations will fail before
|
|
15
|
+
* attempting them. Note that if any privacy policy rules use a piece of data being updated in the mutations
|
|
16
|
+
* the result of this method and the update mutation itself may differ.
|
|
17
|
+
*
|
|
18
|
+
* @param entityClass - class of entity
|
|
19
|
+
* @param sourceEntity - entity loaded by viewer
|
|
20
|
+
* @param queryContext - query context in which to perform the check
|
|
21
|
+
*/
|
|
22
|
+
export declare function canViewerUpdateAsync<TMFields extends object, TMID extends NonNullable<TMFields[TMSelectedFields]>, TMViewerContext extends ViewerContext, TMEntity extends Entity<TMFields, TMID, TMViewerContext, TMSelectedFields>, TMPrivacyPolicy extends EntityPrivacyPolicy<TMFields, TMID, TMViewerContext, TMEntity, TMSelectedFields>, TMSelectedFields extends keyof TMFields = keyof TMFields>(entityClass: IEntityClass<TMFields, TMID, TMViewerContext, TMEntity, TMPrivacyPolicy, TMSelectedFields>, sourceEntity: TMEntity, queryContext?: EntityQueryContext): Promise<boolean>;
|
|
23
|
+
/**
|
|
24
|
+
* Check whether a single entity loaded by a viewer can be deleted by that same viewer.
|
|
25
|
+
* This recursively checks edge cascade permissions (EntityEdgeDeletionBehavior) as well.
|
|
26
|
+
*
|
|
27
|
+
* @remarks
|
|
28
|
+
* See remarks for canViewerUpdate.
|
|
29
|
+
*
|
|
30
|
+
* @param entityClass - class of entity
|
|
31
|
+
* @param sourceEntity - entity loaded by viewer
|
|
32
|
+
* @param queryContext - query context in which to perform the check
|
|
33
|
+
*/
|
|
34
|
+
export declare function canViewerDeleteAsync<TFields extends object, TID extends NonNullable<TFields[TSelectedFields]>, TMViewerContext extends ViewerContext, TEntity extends Entity<TFields, TID, TMViewerContext, TSelectedFields>, TPrivacyPolicy extends EntityPrivacyPolicy<TFields, TID, TMViewerContext, TEntity, TSelectedFields>, TSelectedFields extends keyof TFields = keyof TFields>(entityClass: IEntityClass<TFields, TID, TMViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>, sourceEntity: TEntity, queryContext?: EntityQueryContext): Promise<boolean>;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.canViewerDeleteAsync = exports.canViewerUpdateAsync = void 0;
|
|
7
|
+
const results_1 = require("@expo/results");
|
|
8
|
+
const EntityFieldDefinition_1 = require("../EntityFieldDefinition");
|
|
9
|
+
const entityUtils_1 = require("../entityUtils");
|
|
10
|
+
const EntityNotAuthorizedError_1 = __importDefault(require("../errors/EntityNotAuthorizedError"));
|
|
11
|
+
/**
|
|
12
|
+
* Check whether an entity loaded by a viewer can be updated by that same viewer.
|
|
13
|
+
*
|
|
14
|
+
* @remarks
|
|
15
|
+
*
|
|
16
|
+
* This may be useful in situations relying upon the thrown privacy policy thrown authorization error
|
|
17
|
+
* is insufficient for the task at hand. When dealing with purely a sequence of mutations it is easy
|
|
18
|
+
* to roll back all mutations given a single authorization error by wrapping them in a single transaction.
|
|
19
|
+
* When certain portions of a mutation cannot be rolled back transactionally (third pary calls,
|
|
20
|
+
* legacy code, etc), using this method can help decide whether the sequence of mutations will fail before
|
|
21
|
+
* attempting them. Note that if any privacy policy rules use a piece of data being updated in the mutations
|
|
22
|
+
* the result of this method and the update mutation itself may differ.
|
|
23
|
+
*
|
|
24
|
+
* @param entityClass - class of entity
|
|
25
|
+
* @param sourceEntity - entity loaded by viewer
|
|
26
|
+
* @param queryContext - query context in which to perform the check
|
|
27
|
+
*/
|
|
28
|
+
async function canViewerUpdateAsync(entityClass, sourceEntity, queryContext = sourceEntity
|
|
29
|
+
.getViewerContext()
|
|
30
|
+
.getViewerScopedEntityCompanionForClass(entityClass)
|
|
31
|
+
.getQueryContextProvider()
|
|
32
|
+
.getQueryContext()) {
|
|
33
|
+
return await canViewerUpdateInternalAsync(entityClass, sourceEntity,
|
|
34
|
+
/* cascadingDeleteCause */ null, queryContext);
|
|
35
|
+
}
|
|
36
|
+
exports.canViewerUpdateAsync = canViewerUpdateAsync;
|
|
37
|
+
async function canViewerUpdateInternalAsync(entityClass, sourceEntity, cascadingDeleteCause, queryContext) {
|
|
38
|
+
const companion = sourceEntity
|
|
39
|
+
.getViewerContext()
|
|
40
|
+
.getViewerScopedEntityCompanionForClass(entityClass);
|
|
41
|
+
const privacyPolicy = companion.entityCompanion.privacyPolicy;
|
|
42
|
+
const evaluationResult = await (0, results_1.asyncResult)(privacyPolicy.authorizeUpdateAsync(sourceEntity.getViewerContext(), queryContext, { previousValue: null, cascadingDeleteCause }, sourceEntity, companion.getMetricsAdapter()));
|
|
43
|
+
if (!evaluationResult.ok) {
|
|
44
|
+
if (evaluationResult.reason instanceof EntityNotAuthorizedError_1.default) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
throw evaluationResult.reason;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return evaluationResult.ok;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Check whether a single entity loaded by a viewer can be deleted by that same viewer.
|
|
55
|
+
* This recursively checks edge cascade permissions (EntityEdgeDeletionBehavior) as well.
|
|
56
|
+
*
|
|
57
|
+
* @remarks
|
|
58
|
+
* See remarks for canViewerUpdate.
|
|
59
|
+
*
|
|
60
|
+
* @param entityClass - class of entity
|
|
61
|
+
* @param sourceEntity - entity loaded by viewer
|
|
62
|
+
* @param queryContext - query context in which to perform the check
|
|
63
|
+
*/
|
|
64
|
+
async function canViewerDeleteAsync(entityClass, sourceEntity, queryContext = sourceEntity
|
|
65
|
+
.getViewerContext()
|
|
66
|
+
.getViewerScopedEntityCompanionForClass(entityClass)
|
|
67
|
+
.getQueryContextProvider()
|
|
68
|
+
.getQueryContext()) {
|
|
69
|
+
return await canViewerDeleteInternalAsync(entityClass, sourceEntity,
|
|
70
|
+
/* cascadingDeleteCause */ null, queryContext);
|
|
71
|
+
}
|
|
72
|
+
exports.canViewerDeleteAsync = canViewerDeleteAsync;
|
|
73
|
+
async function canViewerDeleteInternalAsync(entityClass, sourceEntity, cascadingDeleteCause, queryContext) {
|
|
74
|
+
const viewerContext = sourceEntity.getViewerContext();
|
|
75
|
+
const entityCompanionProvider = viewerContext.entityCompanionProvider;
|
|
76
|
+
const viewerScopedCompanion = sourceEntity
|
|
77
|
+
.getViewerContext()
|
|
78
|
+
.getViewerScopedEntityCompanionForClass(entityClass);
|
|
79
|
+
const privacyPolicy = viewerScopedCompanion.entityCompanion.privacyPolicy;
|
|
80
|
+
const evaluationResult = await (0, results_1.asyncResult)(privacyPolicy.authorizeDeleteAsync(sourceEntity.getViewerContext(), queryContext, { previousValue: null, cascadingDeleteCause }, sourceEntity, viewerScopedCompanion.getMetricsAdapter()));
|
|
81
|
+
if (!evaluationResult.ok) {
|
|
82
|
+
if (evaluationResult.reason instanceof EntityNotAuthorizedError_1.default) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
throw evaluationResult.reason;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
const newCascadingDeleteCause = {
|
|
90
|
+
entity: sourceEntity,
|
|
91
|
+
cascadingDeleteCause,
|
|
92
|
+
};
|
|
93
|
+
// Take entity X which is proposed to be deleted, look at inbound edges (entities that reference X).
|
|
94
|
+
// These inbound edges are the entities that will either get deleted or have their references
|
|
95
|
+
// to X nullified based on the EntityEdgeDeletionBehavior when entity X is deleted.
|
|
96
|
+
// For each of these inboundEdge entities Y, look at the field(s) on Y that reference X.
|
|
97
|
+
// For each of the field(s) on Y that reference X,
|
|
98
|
+
// - if EntityEdgeDeletionBehavior is cascade set null, check if user can update Y
|
|
99
|
+
// - if EntityEdgeDeletionBehavior is cascade delete, recursively run canViewerDeleteAsync on Y
|
|
100
|
+
// Return the conjunction (returning eagerly when false) of all checks recursively.
|
|
101
|
+
const entityConfiguration = viewerScopedCompanion.entityCompanion.entityCompanionDefinition.entityConfiguration;
|
|
102
|
+
const inboundEdges = entityConfiguration.inboundEdges;
|
|
103
|
+
for (const inboundEdge of inboundEdges) {
|
|
104
|
+
const configurationForInboundEdge = entityCompanionProvider.getCompanionForEntity(inboundEdge).entityCompanionDefinition
|
|
105
|
+
.entityConfiguration;
|
|
106
|
+
const loader = viewerContext
|
|
107
|
+
.getViewerScopedEntityCompanionForClass(inboundEdge)
|
|
108
|
+
.getLoaderFactory()
|
|
109
|
+
.forLoad(queryContext, {
|
|
110
|
+
previousValue: null,
|
|
111
|
+
cascadingDeleteCause: newCascadingDeleteCause,
|
|
112
|
+
});
|
|
113
|
+
for (const [fieldName, fieldDefinition] of configurationForInboundEdge.schema) {
|
|
114
|
+
const association = fieldDefinition.association;
|
|
115
|
+
if (!association) {
|
|
116
|
+
continue;
|
|
117
|
+
}
|
|
118
|
+
const associatedConfiguration = entityCompanionProvider.getCompanionForEntity(association.associatedEntityClass).entityCompanionDefinition.entityConfiguration;
|
|
119
|
+
if (associatedConfiguration !== entityConfiguration) {
|
|
120
|
+
continue;
|
|
121
|
+
}
|
|
122
|
+
const entityResultsForInboundEdge = await loader
|
|
123
|
+
.withAuthorizationResults()
|
|
124
|
+
.loadManyByFieldEqualingAsync(fieldName, association.associatedEntityLookupByField
|
|
125
|
+
? sourceEntity.getField(association.associatedEntityLookupByField)
|
|
126
|
+
: sourceEntity.getID());
|
|
127
|
+
const failedEntityLoadResults = (0, entityUtils_1.failedResults)(entityResultsForInboundEdge);
|
|
128
|
+
for (const failedResult of failedEntityLoadResults) {
|
|
129
|
+
if (failedResult.reason instanceof EntityNotAuthorizedError_1.default) {
|
|
130
|
+
return false;
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
throw failedResult.reason;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// all results should be success at this point due to check above
|
|
137
|
+
const entitiesForInboundEdge = entityResultsForInboundEdge.map((r) => r.enforceValue());
|
|
138
|
+
switch (association.edgeDeletionBehavior) {
|
|
139
|
+
case EntityFieldDefinition_1.EntityEdgeDeletionBehavior.CASCADE_DELETE:
|
|
140
|
+
case EntityFieldDefinition_1.EntityEdgeDeletionBehavior.CASCADE_DELETE_INVALIDATE_CACHE_ONLY: {
|
|
141
|
+
const canDeleteAll = (await Promise.all(entitiesForInboundEdge.map((entity) => canViewerDeleteInternalAsync(inboundEdge, entity, newCascadingDeleteCause, queryContext)))).every((b) => b);
|
|
142
|
+
if (!canDeleteAll) {
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
case EntityFieldDefinition_1.EntityEdgeDeletionBehavior.SET_NULL:
|
|
148
|
+
case EntityFieldDefinition_1.EntityEdgeDeletionBehavior.SET_NULL_INVALIDATE_CACHE_ONLY: {
|
|
149
|
+
const canUpdateAll = (await Promise.all(entitiesForInboundEdge.map((entity) => canViewerUpdateInternalAsync(inboundEdge, entity, newCascadingDeleteCause, queryContext)))).every((b) => b);
|
|
150
|
+
if (!canUpdateAll) {
|
|
151
|
+
return false;
|
|
152
|
+
}
|
|
153
|
+
break;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=EntityPrivacyUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityPrivacyUtils.js","sourceRoot":"","sources":["../../src/utils/EntityPrivacyUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|