@expo/entity 0.35.0 → 0.37.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 +26 -20
- package/build/index.js +38 -28
- 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 +5 -4
- 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 +26 -20
- 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
|
@@ -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":";;;;;;AAAA,2CAA4C;AAG5C,oEAAsE;AAKtE,gDAA+C;AAC/C,kGAA0E;AAE1E;;;;;;;;;;;;;;;;GAgBG;AACI,KAAK,UAAU,oBAAoB,CAcxC,WAOC,EACD,YAAsB,EACtB,eAAmC,YAAY;KAC5C,gBAAgB,EAAE;KAClB,sCAAsC,CAAC,WAAW,CAAC;KACnD,uBAAuB,EAAE;KACzB,eAAe,EAAE;IAEpB,OAAO,MAAM,4BAA4B,CACvC,WAAW,EACX,YAAY;IACZ,0BAA0B,CAAC,IAAI,EAC/B,YAAY,CACb,CAAC;AACJ,CAAC;AAnCD,oDAmCC;AAED,KAAK,UAAU,4BAA4B,CAczC,WAOC,EACD,YAAsB,EACtB,oBAAwD,EACxD,YAAgC;IAEhC,MAAM,SAAS,GAAG,YAAY;SAC3B,gBAAgB,EAAE;SAClB,sCAAsC,CAAC,WAAW,CAAC,CAAC;IACvD,MAAM,aAAa,GAAG,SAAS,CAAC,eAAe,CAAC,aAAa,CAAC;IAC9D,MAAM,gBAAgB,GAAG,MAAM,IAAA,qBAAW,EACxC,aAAa,CAAC,oBAAoB,CAChC,YAAY,CAAC,gBAAgB,EAAE,EAC/B,YAAY,EACZ,EAAE,aAAa,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAC7C,YAAY,EACZ,SAAS,CAAC,iBAAiB,EAAE,CAC9B,CACF,CAAC;IACF,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC;QACzB,IAAI,gBAAgB,CAAC,MAAM,YAAY,kCAAwB,EAAE,CAAC;YAChE,OAAO,KAAK,CAAC;QACf,CAAC;aAAM,CAAC;YACN,MAAM,gBAAgB,CAAC,MAAM,CAAC;QAChC,CAAC;IACH,CAAC;IACD,OAAO,gBAAgB,CAAC,EAAE,CAAC;AAC7B,CAAC;AAED;;;;;;;;;;GAUG;AACI,KAAK,UAAU,oBAAoB,CAcxC,WAOC,EACD,YAAqB,EACrB,eAAmC,YAAY;KAC5C,gBAAgB,EAAE;KAClB,sCAAsC,CAAC,WAAW,CAAC;KACnD,uBAAuB,EAAE;KACzB,eAAe,EAAE;IAEpB,OAAO,MAAM,4BAA4B,CACvC,WAAW,EACX,YAAY;IACZ,0BAA0B,CAAC,IAAI,EAC/B,YAAY,CACb,CAAC;AACJ,CAAC;AAnCD,oDAmCC;AAED,KAAK,UAAU,4BAA4B,CAczC,WAOC,EACD,YAAqB,EACrB,oBAAwD,EACxD,YAAgC;IAEhC,MAAM,aAAa,GAAG,YAAY,CAAC,gBAAgB,EAAE,CAAC;IACtD,MAAM,uBAAuB,GAAG,aAAa,CAAC,uBAAuB,CAAC;IACtE,MAAM,qBAAqB,GAAG,YAAY;SACvC,gBAAgB,EAAE;SAClB,sCAAsC,CAAC,WAAW,CAAC,CAAC;IAEvD,MAAM,aAAa,GAAG,qBAAqB,CAAC,eAAe,CAAC,aAAa,CAAC;IAC1E,MAAM,gBAAgB,GAAG,MAAM,IAAA,qBAAW,EACxC,aAAa,CAAC,oBAAoB,CAChC,YAAY,CAAC,gBAAgB,EAAE,EAC/B,YAAY,EACZ,EAAE,aAAa,EAAE,IAAI,EAAE,oBAAoB,EAAE,EAC7C,YAAY,EACZ,qBAAqB,CAAC,iBAAiB,EAAE,CAC1C,CACF,CAAC;IACF,IAAI,CAAC,gBAAgB,CAAC,EAAE,EAAE,CAAC;QACzB,IAAI,gBAAgB,CAAC,MAAM,YAAY,kCAAwB,EAAE,CAAC;YAChE,OAAO,KAAK,CAAC;QACf,CAAC;aAAM,CAAC;YACN,MAAM,gBAAgB,CAAC,MAAM,CAAC;QAChC,CAAC;IACH,CAAC;IAED,MAAM,uBAAuB,GAAG;QAC9B,MAAM,EAAE,YAAY;QACpB,oBAAoB;KACrB,CAAC;IAEF,oGAAoG;IACpG,6FAA6F;IAC7F,mFAAmF;IACnF,wFAAwF;IACxF,kDAAkD;IAClD,kFAAkF;IAClF,+FAA+F;IAC/F,mFAAmF;IAEnF,MAAM,mBAAmB,GACvB,qBAAqB,CAAC,eAAe,CAAC,yBAAyB,CAAC,mBAAmB,CAAC;IACtF,MAAM,YAAY,GAAG,mBAAmB,CAAC,YAAY,CAAC;IAEtD,KAAK,MAAM,WAAW,IAAI,YAAY,EAAE,CAAC;QACvC,MAAM,2BAA2B,GAC/B,uBAAuB,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,yBAAyB;aACjF,mBAAmB,CAAC;QAEzB,MAAM,MAAM,GAAG,aAAa;aACzB,sCAAsC,CAAC,WAAW,CAAC;aACnD,gBAAgB,EAAE;aAClB,OAAO,CAAC,YAAY,EAAE;YACrB,aAAa,EAAE,IAAI;YACnB,oBAAoB,EAAE,uBAAuB;SAC9C,CAAC,CAAC;QAEL,KAAK,MAAM,CAAC,SAAS,EAAE,eAAe,CAAC,IAAI,2BAA2B,CAAC,MAAM,EAAE,CAAC;YAC9E,MAAM,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC;YAChD,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,SAAS;YACX,CAAC;YAED,MAAM,uBAAuB,GAAG,uBAAuB,CAAC,qBAAqB,CAC3E,WAAW,CAAC,qBAAqB,CAClC,CAAC,yBAAyB,CAAC,mBAAmB,CAAC;YAChD,IAAI,uBAAuB,KAAK,mBAAmB,EAAE,CAAC;gBACpD,SAAS;YACX,CAAC;YAED,MAAM,2BAA2B,GAAG,MAAM,MAAM;iBAC7C,wBAAwB,EAAE;iBAC1B,4BAA4B,CAC3B,SAAS,EACT,WAAW,CAAC,6BAA6B;gBACvC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,WAAW,CAAC,6BAAoC,CAAC;gBACzE,CAAC,CAAC,YAAY,CAAC,KAAK,EAAE,CACzB,CAAC;YAEJ,MAAM,uBAAuB,GAAG,IAAA,2BAAa,EAAC,2BAA2B,CAAC,CAAC;YAC3E,KAAK,MAAM,YAAY,IAAI,uBAAuB,EAAE,CAAC;gBACnD,IAAI,YAAY,CAAC,MAAM,YAAY,kCAAwB,EAAE,CAAC;oBAC5D,OAAO,KAAK,CAAC;gBACf,CAAC;qBAAM,CAAC;oBACN,MAAM,YAAY,CAAC,MAAM,CAAC;gBAC5B,CAAC;YACH,CAAC;YAED,iEAAiE;YACjE,MAAM,sBAAsB,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC;YAExF,QAAQ,WAAW,CAAC,oBAAoB,EAAE,CAAC;gBACzC,KAAK,kDAA0B,CAAC,cAAc,CAAC;gBAC/C,KAAK,kDAA0B,CAAC,oCAAoC,CAAC,CAAC,CAAC;oBACrE,MAAM,YAAY,GAAG,CACnB,MAAM,OAAO,CAAC,GAAG,CACf,sBAAsB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACpC,4BAA4B,CAC1B,WAAW,EACX,MAAM,EACN,uBAAuB,EACvB,YAAY,CACb,CACF,CACF,CACF,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;oBAElB,IAAI,CAAC,YAAY,EAAE,CAAC;wBAClB,OAAO,KAAK,CAAC;oBACf,CAAC;oBACD,MAAM;gBACR,CAAC;gBAED,KAAK,kDAA0B,CAAC,QAAQ,CAAC;gBACzC,KAAK,kDAA0B,CAAC,8BAA8B,CAAC,CAAC,CAAC;oBAC/D,MAAM,YAAY,GAAG,CACnB,MAAM,OAAO,CAAC,GAAG,CACf,sBAAsB,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CACpC,4BAA4B,CAC1B,WAAW,EACX,MAAM,EACN,uBAAuB,EACvB,YAAY,CACb,CACF,CACF,CACF,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;oBAElB,IAAI,CAAC,YAAY,EAAE,CAAC;wBAClB,OAAO,KAAK,CAAC;oBACf,CAAC;oBACD,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,395 @@
|
|
|
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
|
+
const Entity_1 = __importDefault(require("../../Entity"));
|
|
7
|
+
const EntityConfiguration_1 = __importDefault(require("../../EntityConfiguration"));
|
|
8
|
+
const EntityFieldDefinition_1 = require("../../EntityFieldDefinition");
|
|
9
|
+
const EntityFields_1 = require("../../EntityFields");
|
|
10
|
+
const EntityPrivacyPolicy_1 = __importDefault(require("../../EntityPrivacyPolicy"));
|
|
11
|
+
const ViewerContext_1 = __importDefault(require("../../ViewerContext"));
|
|
12
|
+
const AlwaysAllowPrivacyPolicyRule_1 = __importDefault(require("../../rules/AlwaysAllowPrivacyPolicyRule"));
|
|
13
|
+
const AlwaysDenyPrivacyPolicyRule_1 = __importDefault(require("../../rules/AlwaysDenyPrivacyPolicyRule"));
|
|
14
|
+
const PrivacyPolicyRule_1 = require("../../rules/PrivacyPolicyRule");
|
|
15
|
+
const EntityPrivacyUtils_1 = require("../EntityPrivacyUtils");
|
|
16
|
+
const createUnitTestEntityCompanionProvider_1 = require("../testing/createUnitTestEntityCompanionProvider");
|
|
17
|
+
describe(EntityPrivacyUtils_1.canViewerUpdateAsync, () => {
|
|
18
|
+
it('appropriately executes update privacy policy', async () => {
|
|
19
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
20
|
+
const viewerContext = new ViewerContext_1.default(companionProvider);
|
|
21
|
+
const testEntity = await SimpleTestDenyDeleteEntity.creator(viewerContext).enforceCreateAsync();
|
|
22
|
+
const canViewerUpdate = await (0, EntityPrivacyUtils_1.canViewerUpdateAsync)(SimpleTestDenyDeleteEntity, testEntity);
|
|
23
|
+
expect(canViewerUpdate).toBe(true);
|
|
24
|
+
});
|
|
25
|
+
it('denies when policy denies', async () => {
|
|
26
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
27
|
+
const viewerContext = new ViewerContext_1.default(companionProvider);
|
|
28
|
+
const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext).enforceCreateAsync();
|
|
29
|
+
const canViewerUpdate = await (0, EntityPrivacyUtils_1.canViewerUpdateAsync)(SimpleTestDenyUpdateEntity, testEntity);
|
|
30
|
+
expect(canViewerUpdate).toBe(false);
|
|
31
|
+
});
|
|
32
|
+
it('rethrows non-authorization errors', async () => {
|
|
33
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
34
|
+
const viewerContext = new ViewerContext_1.default(companionProvider);
|
|
35
|
+
const testEntity = await SimpleTestThrowOtherErrorEntity.creator(viewerContext).enforceCreateAsync();
|
|
36
|
+
await expect((0, EntityPrivacyUtils_1.canViewerUpdateAsync)(SimpleTestThrowOtherErrorEntity, testEntity)).rejects.toThrow('update error');
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
describe(EntityPrivacyUtils_1.canViewerDeleteAsync, () => {
|
|
40
|
+
it('appropriately executes update privacy policy', async () => {
|
|
41
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
42
|
+
const viewerContext = new ViewerContext_1.default(companionProvider);
|
|
43
|
+
const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext).enforceCreateAsync();
|
|
44
|
+
const canViewerDelete = await (0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyUpdateEntity, testEntity);
|
|
45
|
+
expect(canViewerDelete).toBe(true);
|
|
46
|
+
});
|
|
47
|
+
it('denies when policy denies', async () => {
|
|
48
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
49
|
+
const viewerContext = new ViewerContext_1.default(companionProvider);
|
|
50
|
+
const testEntity = await SimpleTestDenyDeleteEntity.creator(viewerContext).enforceCreateAsync();
|
|
51
|
+
const canViewerDelete = await (0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyDeleteEntity, testEntity);
|
|
52
|
+
expect(canViewerDelete).toBe(false);
|
|
53
|
+
});
|
|
54
|
+
it('denies when recursive policy denies for CASCADE_DELETE', async () => {
|
|
55
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
56
|
+
const viewerContext = new ViewerContext_1.default(companionProvider);
|
|
57
|
+
const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext).enforceCreateAsync();
|
|
58
|
+
// add another entity referencing testEntity that would cascade deletion to itself when testEntity is deleted
|
|
59
|
+
await LeafDenyDeleteEntity.creator(viewerContext)
|
|
60
|
+
.setField('simple_test_deny_update_cascade_delete_id', testEntity.getID())
|
|
61
|
+
.enforceCreateAsync();
|
|
62
|
+
const canViewerDelete = await (0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyUpdateEntity, testEntity);
|
|
63
|
+
expect(canViewerDelete).toBe(false);
|
|
64
|
+
});
|
|
65
|
+
it('denies when recursive policy denies for SET_NULL', async () => {
|
|
66
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
67
|
+
const viewerContext = new ViewerContext_1.default(companionProvider);
|
|
68
|
+
const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext).enforceCreateAsync();
|
|
69
|
+
// add another entity referencing testEntity that would set null to its column when testEntity is deleted
|
|
70
|
+
await LeafDenyUpdateEntity.creator(viewerContext)
|
|
71
|
+
.setField('simple_test_deny_update_set_null_id', testEntity.getID())
|
|
72
|
+
.enforceCreateAsync();
|
|
73
|
+
const canViewerDelete = await (0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyUpdateEntity, testEntity);
|
|
74
|
+
expect(canViewerDelete).toBe(false);
|
|
75
|
+
});
|
|
76
|
+
it('allows when recursive policy allows for CASCADE_DELETE and SET_NULL', async () => {
|
|
77
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
78
|
+
const viewerContext = new ViewerContext_1.default(companionProvider);
|
|
79
|
+
const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext).enforceCreateAsync();
|
|
80
|
+
// add another entity referencing testEntity that would cascade deletion to itself when testEntity is deleted
|
|
81
|
+
await LeafDenyUpdateEntity.creator(viewerContext)
|
|
82
|
+
.setField('simple_test_deny_update_cascade_delete_id', testEntity.getID())
|
|
83
|
+
.enforceCreateAsync();
|
|
84
|
+
// add another entity referencing testEntity that would set null to its column when testEntity is deleted
|
|
85
|
+
await LeafDenyDeleteEntity.creator(viewerContext)
|
|
86
|
+
.setField('simple_test_deny_update_set_null_id', testEntity.getID())
|
|
87
|
+
.enforceCreateAsync();
|
|
88
|
+
const canViewerDelete = await (0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyUpdateEntity, testEntity);
|
|
89
|
+
expect(canViewerDelete).toBe(true);
|
|
90
|
+
});
|
|
91
|
+
it('rethrows non-authorization errors', async () => {
|
|
92
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
93
|
+
const viewerContext = new ViewerContext_1.default(companionProvider);
|
|
94
|
+
const testEntity = await SimpleTestThrowOtherErrorEntity.creator(viewerContext).enforceCreateAsync();
|
|
95
|
+
await expect((0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestThrowOtherErrorEntity, testEntity)).rejects.toThrowError('delete error');
|
|
96
|
+
});
|
|
97
|
+
it('returns false when edge cannot be read', async () => {
|
|
98
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
99
|
+
const viewerContext = new ViewerContext_1.default(companionProvider);
|
|
100
|
+
const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext).enforceCreateAsync();
|
|
101
|
+
await LeafDenyReadEntity.creator(viewerContext)
|
|
102
|
+
.setField('simple_test_id', testEntity.getID())
|
|
103
|
+
.enforceCreateAsync();
|
|
104
|
+
const canViewerDelete = await (0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyUpdateEntity, testEntity);
|
|
105
|
+
expect(canViewerDelete).toBe(false);
|
|
106
|
+
});
|
|
107
|
+
it('rethrows non-authorization edge read errors', async () => {
|
|
108
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
109
|
+
const viewerContext = new ViewerContext_1.default(companionProvider);
|
|
110
|
+
const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext).enforceCreateAsync();
|
|
111
|
+
await SimpleTestThrowOtherErrorEntity.creator(viewerContext)
|
|
112
|
+
.setField('simple_test_id', testEntity.getID())
|
|
113
|
+
.enforceCreateAsync();
|
|
114
|
+
await expect((0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyUpdateEntity, testEntity)).rejects.toThrowError('read in cascading delete error');
|
|
115
|
+
});
|
|
116
|
+
it('supports running within a transaction', async () => {
|
|
117
|
+
const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
|
|
118
|
+
const viewerContext = new ViewerContext_1.default(companionProvider);
|
|
119
|
+
const canViewerDelete = await viewerContext.runInTransactionForDatabaseAdaptorFlavorAsync('postgres', async (queryContext) => {
|
|
120
|
+
const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext, queryContext).enforceCreateAsync();
|
|
121
|
+
await LeafDenyReadEntity.creator(viewerContext, queryContext)
|
|
122
|
+
.setField('simple_test_id', testEntity.getID())
|
|
123
|
+
.enforceCreateAsync();
|
|
124
|
+
// this would fail if transactions weren't supported or correctly passed through
|
|
125
|
+
return await (0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyUpdateEntity, testEntity, queryContext);
|
|
126
|
+
});
|
|
127
|
+
expect(canViewerDelete).toBe(true);
|
|
128
|
+
});
|
|
129
|
+
});
|
|
130
|
+
class DenyUpdateEntityPrivacyPolicy extends EntityPrivacyPolicy_1.default {
|
|
131
|
+
readRules = [
|
|
132
|
+
new AlwaysAllowPrivacyPolicyRule_1.default(),
|
|
133
|
+
];
|
|
134
|
+
createRules = [
|
|
135
|
+
new AlwaysAllowPrivacyPolicyRule_1.default(),
|
|
136
|
+
];
|
|
137
|
+
updateRules = [
|
|
138
|
+
new AlwaysDenyPrivacyPolicyRule_1.default(),
|
|
139
|
+
];
|
|
140
|
+
deleteRules = [
|
|
141
|
+
new AlwaysAllowPrivacyPolicyRule_1.default(),
|
|
142
|
+
];
|
|
143
|
+
}
|
|
144
|
+
class DenyDeleteEntityPrivacyPolicy extends EntityPrivacyPolicy_1.default {
|
|
145
|
+
readRules = [
|
|
146
|
+
new AlwaysAllowPrivacyPolicyRule_1.default(),
|
|
147
|
+
];
|
|
148
|
+
createRules = [
|
|
149
|
+
new AlwaysAllowPrivacyPolicyRule_1.default(),
|
|
150
|
+
];
|
|
151
|
+
updateRules = [
|
|
152
|
+
new AlwaysAllowPrivacyPolicyRule_1.default(),
|
|
153
|
+
];
|
|
154
|
+
deleteRules = [
|
|
155
|
+
new AlwaysDenyPrivacyPolicyRule_1.default(),
|
|
156
|
+
];
|
|
157
|
+
}
|
|
158
|
+
class ThrowOtherErrorEntityPrivacyPolicy extends EntityPrivacyPolicy_1.default {
|
|
159
|
+
readRules = [
|
|
160
|
+
{
|
|
161
|
+
async evaluateAsync(_viewerContext, _queryContext, evaluationContext, _entity) {
|
|
162
|
+
if (evaluationContext.cascadingDeleteCause) {
|
|
163
|
+
throw new Error('read in cascading delete error');
|
|
164
|
+
}
|
|
165
|
+
return PrivacyPolicyRule_1.RuleEvaluationResult.SKIP;
|
|
166
|
+
},
|
|
167
|
+
},
|
|
168
|
+
new AlwaysAllowPrivacyPolicyRule_1.default(),
|
|
169
|
+
];
|
|
170
|
+
createRules = [
|
|
171
|
+
new AlwaysAllowPrivacyPolicyRule_1.default(),
|
|
172
|
+
];
|
|
173
|
+
updateRules = [
|
|
174
|
+
{
|
|
175
|
+
async evaluateAsync() {
|
|
176
|
+
throw new Error('update error');
|
|
177
|
+
},
|
|
178
|
+
},
|
|
179
|
+
];
|
|
180
|
+
deleteRules = [
|
|
181
|
+
{
|
|
182
|
+
async evaluateAsync() {
|
|
183
|
+
throw new Error('delete error');
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
];
|
|
187
|
+
}
|
|
188
|
+
class DenyReadEntityPrivacyPolicy extends EntityPrivacyPolicy_1.default {
|
|
189
|
+
readRules = [
|
|
190
|
+
{
|
|
191
|
+
async evaluateAsync(_viewerContext, queryContext, evaluationContext, _entity) {
|
|
192
|
+
if (queryContext.isInTransaction()) {
|
|
193
|
+
return PrivacyPolicyRule_1.RuleEvaluationResult.ALLOW;
|
|
194
|
+
}
|
|
195
|
+
return evaluationContext.cascadingDeleteCause
|
|
196
|
+
? PrivacyPolicyRule_1.RuleEvaluationResult.SKIP
|
|
197
|
+
: PrivacyPolicyRule_1.RuleEvaluationResult.ALLOW;
|
|
198
|
+
},
|
|
199
|
+
},
|
|
200
|
+
];
|
|
201
|
+
createRules = [
|
|
202
|
+
new AlwaysAllowPrivacyPolicyRule_1.default(),
|
|
203
|
+
];
|
|
204
|
+
updateRules = [
|
|
205
|
+
new AlwaysAllowPrivacyPolicyRule_1.default(),
|
|
206
|
+
];
|
|
207
|
+
deleteRules = [
|
|
208
|
+
new AlwaysAllowPrivacyPolicyRule_1.default(),
|
|
209
|
+
];
|
|
210
|
+
}
|
|
211
|
+
class LeafDenyUpdateEntity extends Entity_1.default {
|
|
212
|
+
static defineCompanionDefinition() {
|
|
213
|
+
return {
|
|
214
|
+
entityClass: LeafDenyUpdateEntity,
|
|
215
|
+
entityConfiguration: new EntityConfiguration_1.default({
|
|
216
|
+
idField: 'id',
|
|
217
|
+
tableName: 'leaf_1',
|
|
218
|
+
schema: {
|
|
219
|
+
id: new EntityFields_1.UUIDField({
|
|
220
|
+
columnName: 'custom_id',
|
|
221
|
+
}),
|
|
222
|
+
// to ensure edge traversal doesn't process other edges
|
|
223
|
+
unused_other_association: new EntityFields_1.UUIDField({
|
|
224
|
+
columnName: 'unused_other_association',
|
|
225
|
+
association: {
|
|
226
|
+
associatedEntityClass: LeafDenyDeleteEntity,
|
|
227
|
+
edgeDeletionBehavior: EntityFieldDefinition_1.EntityEdgeDeletionBehavior.SET_NULL,
|
|
228
|
+
},
|
|
229
|
+
}),
|
|
230
|
+
// deletion behavior should fail since this entity can't be updated and a SET NULL does an update
|
|
231
|
+
simple_test_deny_update_set_null_id: new EntityFields_1.UUIDField({
|
|
232
|
+
columnName: 'simple_test_deny_update_set_null_id',
|
|
233
|
+
association: {
|
|
234
|
+
associatedEntityClass: SimpleTestDenyUpdateEntity,
|
|
235
|
+
edgeDeletionBehavior: EntityFieldDefinition_1.EntityEdgeDeletionBehavior.SET_NULL,
|
|
236
|
+
},
|
|
237
|
+
}),
|
|
238
|
+
// deletion behavior should succeed since this entity can be deleted
|
|
239
|
+
simple_test_deny_update_cascade_delete_id: new EntityFields_1.UUIDField({
|
|
240
|
+
columnName: 'simple_test_deny_update_cascade_delete_id',
|
|
241
|
+
association: {
|
|
242
|
+
associatedEntityClass: SimpleTestDenyUpdateEntity,
|
|
243
|
+
edgeDeletionBehavior: EntityFieldDefinition_1.EntityEdgeDeletionBehavior.CASCADE_DELETE,
|
|
244
|
+
},
|
|
245
|
+
}),
|
|
246
|
+
},
|
|
247
|
+
databaseAdapterFlavor: 'postgres',
|
|
248
|
+
cacheAdapterFlavor: 'redis',
|
|
249
|
+
}),
|
|
250
|
+
privacyPolicyClass: DenyUpdateEntityPrivacyPolicy,
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
class LeafDenyDeleteEntity extends Entity_1.default {
|
|
255
|
+
static defineCompanionDefinition() {
|
|
256
|
+
return {
|
|
257
|
+
entityClass: LeafDenyDeleteEntity,
|
|
258
|
+
entityConfiguration: new EntityConfiguration_1.default({
|
|
259
|
+
idField: 'id',
|
|
260
|
+
tableName: 'leaf_2',
|
|
261
|
+
schema: {
|
|
262
|
+
id: new EntityFields_1.UUIDField({
|
|
263
|
+
columnName: 'custom_id',
|
|
264
|
+
}),
|
|
265
|
+
// deletion behavior should fail since this entity can't be deleted
|
|
266
|
+
simple_test_deny_update_cascade_delete_id: new EntityFields_1.UUIDField({
|
|
267
|
+
columnName: 'simple_test_deny_update_cascade_delete_id',
|
|
268
|
+
association: {
|
|
269
|
+
associatedEntityClass: SimpleTestDenyUpdateEntity,
|
|
270
|
+
edgeDeletionBehavior: EntityFieldDefinition_1.EntityEdgeDeletionBehavior.CASCADE_DELETE,
|
|
271
|
+
},
|
|
272
|
+
}),
|
|
273
|
+
// deletion behavior should succeed since this entity can be updated and a SET NULL does an update
|
|
274
|
+
simple_test_deny_update_set_null_id: new EntityFields_1.UUIDField({
|
|
275
|
+
columnName: 'simple_test_deny_update_set_null_id',
|
|
276
|
+
association: {
|
|
277
|
+
associatedEntityClass: SimpleTestDenyUpdateEntity,
|
|
278
|
+
edgeDeletionBehavior: EntityFieldDefinition_1.EntityEdgeDeletionBehavior.SET_NULL,
|
|
279
|
+
},
|
|
280
|
+
}),
|
|
281
|
+
},
|
|
282
|
+
databaseAdapterFlavor: 'postgres',
|
|
283
|
+
cacheAdapterFlavor: 'redis',
|
|
284
|
+
}),
|
|
285
|
+
privacyPolicyClass: DenyDeleteEntityPrivacyPolicy,
|
|
286
|
+
};
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
class LeafDenyReadEntity extends Entity_1.default {
|
|
290
|
+
static defineCompanionDefinition() {
|
|
291
|
+
return {
|
|
292
|
+
entityClass: LeafDenyReadEntity,
|
|
293
|
+
entityConfiguration: new EntityConfiguration_1.default({
|
|
294
|
+
idField: 'id',
|
|
295
|
+
tableName: 'leaf_4',
|
|
296
|
+
inboundEdges: [],
|
|
297
|
+
schema: {
|
|
298
|
+
id: new EntityFields_1.UUIDField({
|
|
299
|
+
columnName: 'custom_id',
|
|
300
|
+
}),
|
|
301
|
+
simple_test_id: new EntityFields_1.UUIDField({
|
|
302
|
+
columnName: 'simple_test_id',
|
|
303
|
+
association: {
|
|
304
|
+
associatedEntityClass: SimpleTestDenyUpdateEntity,
|
|
305
|
+
associatedEntityLookupByField: 'id',
|
|
306
|
+
edgeDeletionBehavior: EntityFieldDefinition_1.EntityEdgeDeletionBehavior.SET_NULL,
|
|
307
|
+
},
|
|
308
|
+
}),
|
|
309
|
+
},
|
|
310
|
+
databaseAdapterFlavor: 'postgres',
|
|
311
|
+
cacheAdapterFlavor: 'redis',
|
|
312
|
+
}),
|
|
313
|
+
privacyPolicyClass: DenyReadEntityPrivacyPolicy,
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
class SimpleTestDenyUpdateEntity extends Entity_1.default {
|
|
318
|
+
static defineCompanionDefinition() {
|
|
319
|
+
return {
|
|
320
|
+
entityClass: SimpleTestDenyUpdateEntity,
|
|
321
|
+
entityConfiguration: new EntityConfiguration_1.default({
|
|
322
|
+
idField: 'id',
|
|
323
|
+
tableName: 'blah',
|
|
324
|
+
inboundEdges: [
|
|
325
|
+
LeafDenyUpdateEntity,
|
|
326
|
+
LeafDenyDeleteEntity,
|
|
327
|
+
LeafDenyReadEntity,
|
|
328
|
+
SimpleTestThrowOtherErrorEntity,
|
|
329
|
+
],
|
|
330
|
+
schema: {
|
|
331
|
+
id: new EntityFields_1.UUIDField({
|
|
332
|
+
columnName: 'custom_id',
|
|
333
|
+
}),
|
|
334
|
+
},
|
|
335
|
+
databaseAdapterFlavor: 'postgres',
|
|
336
|
+
cacheAdapterFlavor: 'redis',
|
|
337
|
+
}),
|
|
338
|
+
privacyPolicyClass: DenyUpdateEntityPrivacyPolicy,
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
class SimpleTestDenyDeleteEntity extends Entity_1.default {
|
|
343
|
+
static defineCompanionDefinition() {
|
|
344
|
+
return {
|
|
345
|
+
entityClass: SimpleTestDenyDeleteEntity,
|
|
346
|
+
entityConfiguration: new EntityConfiguration_1.default({
|
|
347
|
+
idField: 'id',
|
|
348
|
+
tableName: 'blah_2',
|
|
349
|
+
inboundEdges: [
|
|
350
|
+
LeafDenyUpdateEntity,
|
|
351
|
+
LeafDenyDeleteEntity,
|
|
352
|
+
LeafDenyReadEntity,
|
|
353
|
+
SimpleTestThrowOtherErrorEntity,
|
|
354
|
+
],
|
|
355
|
+
schema: {
|
|
356
|
+
id: new EntityFields_1.UUIDField({
|
|
357
|
+
columnName: 'custom_id',
|
|
358
|
+
}),
|
|
359
|
+
},
|
|
360
|
+
databaseAdapterFlavor: 'postgres',
|
|
361
|
+
cacheAdapterFlavor: 'redis',
|
|
362
|
+
}),
|
|
363
|
+
privacyPolicyClass: DenyDeleteEntityPrivacyPolicy,
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
class SimpleTestThrowOtherErrorEntity extends Entity_1.default {
|
|
368
|
+
static defineCompanionDefinition() {
|
|
369
|
+
return {
|
|
370
|
+
entityClass: SimpleTestThrowOtherErrorEntity,
|
|
371
|
+
entityConfiguration: new EntityConfiguration_1.default({
|
|
372
|
+
idField: 'id',
|
|
373
|
+
tableName: 'blah_3',
|
|
374
|
+
inboundEdges: [],
|
|
375
|
+
schema: {
|
|
376
|
+
id: new EntityFields_1.UUIDField({
|
|
377
|
+
columnName: 'custom_id',
|
|
378
|
+
}),
|
|
379
|
+
simple_test_id: new EntityFields_1.UUIDField({
|
|
380
|
+
columnName: 'simple_test_id',
|
|
381
|
+
association: {
|
|
382
|
+
associatedEntityClass: SimpleTestDenyUpdateEntity,
|
|
383
|
+
associatedEntityLookupByField: 'id',
|
|
384
|
+
edgeDeletionBehavior: EntityFieldDefinition_1.EntityEdgeDeletionBehavior.SET_NULL,
|
|
385
|
+
},
|
|
386
|
+
}),
|
|
387
|
+
},
|
|
388
|
+
databaseAdapterFlavor: 'postgres',
|
|
389
|
+
cacheAdapterFlavor: 'redis',
|
|
390
|
+
}),
|
|
391
|
+
privacyPolicyClass: ThrowOtherErrorEntityPrivacyPolicy,
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
//# sourceMappingURL=EntityPrivacyUtils-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityPrivacyUtils-test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/EntityPrivacyUtils-test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const TestEntityWithMutationTriggers_1 = require("../../testfixtures/TestEntityWithMutationTriggers");
|
|
4
|
+
const mergeEntityMutationTriggerConfigurations_1 = require("../mergeEntityMutationTriggerConfigurations");
|
|
5
|
+
describe(mergeEntityMutationTriggerConfigurations_1.mergeEntityMutationTriggerConfigurations, () => {
|
|
6
|
+
it('successfully merges triggers', async () => {
|
|
7
|
+
const firstAfter = new TestEntityWithMutationTriggers_1.TestMutationTrigger('2');
|
|
8
|
+
const secondAfter = new TestEntityWithMutationTriggers_1.TestMutationTrigger('3');
|
|
9
|
+
const merged = (0, mergeEntityMutationTriggerConfigurations_1.mergeEntityMutationTriggerConfigurations)({
|
|
10
|
+
beforeAll: [new TestEntityWithMutationTriggers_1.TestMutationTrigger('1')],
|
|
11
|
+
afterAll: [firstAfter],
|
|
12
|
+
}, {
|
|
13
|
+
afterAll: [secondAfter],
|
|
14
|
+
});
|
|
15
|
+
expect(merged.beforeAll?.length).toBe(1);
|
|
16
|
+
expect(merged.afterAll).toEqual([firstAfter, secondAfter]);
|
|
17
|
+
expect(merged.beforeCreate?.length).toBeFalsy();
|
|
18
|
+
expect(merged.afterCreate?.length).toBeFalsy();
|
|
19
|
+
expect(merged.beforeUpdate?.length).toBeFalsy();
|
|
20
|
+
expect(merged.afterUpdate?.length).toBeFalsy();
|
|
21
|
+
expect(merged.beforeDelete?.length).toBeFalsy();
|
|
22
|
+
expect(merged.afterDelete?.length).toBeFalsy();
|
|
23
|
+
expect(merged.afterCommit?.length).toBeFalsy();
|
|
24
|
+
});
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=mergeEntityMutationTriggerConfigurations-test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mergeEntityMutationTriggerConfigurations-test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.ts"],"names":[],"mappings":";;AAAA,sGAAwF;AACxF,0GAAuG;AAEvG,QAAQ,CAAC,mFAAwC,EAAE,GAAG,EAAE;IACtD,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,UAAU,GAAG,IAAI,oDAAmB,CAAC,GAAG,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,IAAI,oDAAmB,CAAC,GAAG,CAAC,CAAC;QAEjD,MAAM,MAAM,GAAG,IAAA,mFAAwC,EACrD;YACE,SAAS,EAAE,CAAC,IAAI,oDAAmB,CAAC,GAAG,CAAC,CAAC;YACzC,QAAQ,EAAE,CAAC,UAAU,CAAC;SACvB,EACD;YACE,QAAQ,EAAE,CAAC,WAAW,CAAC;SACxB,CACF,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;QAC3D,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;QAChD,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"maps.js","sourceRoot":"","sources":["../../../src/utils/collections/maps.ts"],"names":[],"mappings":";;;;;;AAAA,0DAAkC;AAElC;;;;;;;GAOG;AACI,MAAM,eAAe,GAAG,CAC7B,GAAc,EACd,GAAM,EACN,eAA8B,EAC3B,EAAE;IACL,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"maps.js","sourceRoot":"","sources":["../../../src/utils/collections/maps.ts"],"names":[],"mappings":"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"}
|