@expo/entity 0.46.0 → 0.47.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/src/AuthorizationResultBasedEntityMutator.d.ts +5 -3
- package/build/src/AuthorizationResultBasedEntityMutator.js +75 -37
- package/build/src/AuthorizationResultBasedEntityMutator.js.map +1 -1
- package/build/src/EntityDeleter.js +1 -1
- package/build/src/EntityDeleter.js.map +1 -1
- package/build/src/EntityFields.d.ts +7 -0
- package/build/src/EntityFields.js +11 -1
- package/build/src/EntityFields.js.map +1 -1
- package/build/src/EntityMutatorFactory.d.ts +3 -2
- package/build/src/EntityMutatorFactory.js +4 -4
- package/build/src/EntityMutatorFactory.js.map +1 -1
- package/build/src/EntityUpdater.js +1 -1
- package/build/src/EntityUpdater.js.map +1 -1
- package/build/src/ViewerScopedEntityMutatorFactory.d.ts +3 -2
- package/build/src/ViewerScopedEntityMutatorFactory.js +4 -4
- package/build/src/ViewerScopedEntityMutatorFactory.js.map +1 -1
- package/package.json +5 -3
- package/src/AuthorizationResultBasedEntityMutator.ts +63 -49
- package/src/EntityDeleter.ts +1 -1
- package/src/EntityFields.ts +13 -0
- package/src/EntityMutatorFactory.ts +5 -0
- package/src/EntityUpdater.ts +1 -1
- package/src/ViewerScopedEntityMutatorFactory.ts +5 -2
- package/src/__tests__/EntityFields-test.ts +7 -0
- package/src/__tests__/EntityMutator-test.ts +217 -16
- package/LICENSE +0 -21
- package/build/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.d.ts +0 -1
- package/build/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js +0 -240
- package/build/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js.map +0 -1
- package/build/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.d.ts +0 -26
- package/build/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js +0 -109
- package/build/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js.map +0 -1
- package/build/src/__tests__/AuthorizationResultBasedEntityLoader-test.d.ts +0 -1
- package/build/src/__tests__/AuthorizationResultBasedEntityLoader-test.js +0 -590
- package/build/src/__tests__/AuthorizationResultBasedEntityLoader-test.js.map +0 -1
- package/build/src/__tests__/ComposedCacheAdapter-test.d.ts +0 -1
- package/build/src/__tests__/ComposedCacheAdapter-test.js +0 -259
- package/build/src/__tests__/ComposedCacheAdapter-test.js.map +0 -1
- package/build/src/__tests__/ComposedSecondaryEntityCache-test.d.ts +0 -1
- package/build/src/__tests__/ComposedSecondaryEntityCache-test.js +0 -67
- package/build/src/__tests__/ComposedSecondaryEntityCache-test.js.map +0 -1
- package/build/src/__tests__/EnforcingEntityAssociationLoader-test.d.ts +0 -1
- package/build/src/__tests__/EnforcingEntityAssociationLoader-test.js +0 -113
- package/build/src/__tests__/EnforcingEntityAssociationLoader-test.js.map +0 -1
- package/build/src/__tests__/EnforcingEntityLoader-test.d.ts +0 -1
- package/build/src/__tests__/EnforcingEntityLoader-test.js +0 -316
- package/build/src/__tests__/EnforcingEntityLoader-test.js.map +0 -1
- package/build/src/__tests__/Entity-test.d.ts +0 -1
- package/build/src/__tests__/Entity-test.js +0 -92
- package/build/src/__tests__/Entity-test.js.map +0 -1
- package/build/src/__tests__/EntityAssociationLoader-test.d.ts +0 -1
- package/build/src/__tests__/EntityAssociationLoader-test.js +0 -28
- package/build/src/__tests__/EntityAssociationLoader-test.js.map +0 -1
- package/build/src/__tests__/EntityCommonUseCases-test.d.ts +0 -1
- package/build/src/__tests__/EntityCommonUseCases-test.js +0 -111
- package/build/src/__tests__/EntityCommonUseCases-test.js.map +0 -1
- package/build/src/__tests__/EntityCompanion-test.d.ts +0 -1
- package/build/src/__tests__/EntityCompanion-test.js +0 -42
- package/build/src/__tests__/EntityCompanion-test.js.map +0 -1
- package/build/src/__tests__/EntityCompanionProvider-test.d.ts +0 -1
- package/build/src/__tests__/EntityCompanionProvider-test.js +0 -53
- package/build/src/__tests__/EntityCompanionProvider-test.js.map +0 -1
- package/build/src/__tests__/EntityConfiguration-test.d.ts +0 -1
- package/build/src/__tests__/EntityConfiguration-test.js +0 -164
- package/build/src/__tests__/EntityConfiguration-test.js.map +0 -1
- package/build/src/__tests__/EntityDatabaseAdapter-test.d.ts +0 -1
- package/build/src/__tests__/EntityDatabaseAdapter-test.js +0 -189
- package/build/src/__tests__/EntityDatabaseAdapter-test.js.map +0 -1
- package/build/src/__tests__/EntityEdges-test.d.ts +0 -1
- package/build/src/__tests__/EntityEdges-test.js +0 -680
- package/build/src/__tests__/EntityEdges-test.js.map +0 -1
- package/build/src/__tests__/EntityFields-test.d.ts +0 -1
- package/build/src/__tests__/EntityFields-test.js +0 -61
- package/build/src/__tests__/EntityFields-test.js.map +0 -1
- package/build/src/__tests__/EntityLoader-test.d.ts +0 -1
- package/build/src/__tests__/EntityLoader-test.js +0 -34
- package/build/src/__tests__/EntityLoader-test.js.map +0 -1
- package/build/src/__tests__/EntityMutator-MutationCacheConsistency-test.d.ts +0 -1
- package/build/src/__tests__/EntityMutator-MutationCacheConsistency-test.js +0 -71
- package/build/src/__tests__/EntityMutator-MutationCacheConsistency-test.js.map +0 -1
- package/build/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.d.ts +0 -1
- package/build/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.js +0 -54
- package/build/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.js.map +0 -1
- package/build/src/__tests__/EntityMutator-test.d.ts +0 -1
- package/build/src/__tests__/EntityMutator-test.js +0 -721
- package/build/src/__tests__/EntityMutator-test.js.map +0 -1
- package/build/src/__tests__/EntityPrivacyPolicy-test.d.ts +0 -1
- package/build/src/__tests__/EntityPrivacyPolicy-test.js +0 -429
- package/build/src/__tests__/EntityPrivacyPolicy-test.js.map +0 -1
- package/build/src/__tests__/EntityQueryContext-test.d.ts +0 -1
- package/build/src/__tests__/EntityQueryContext-test.js +0 -181
- package/build/src/__tests__/EntityQueryContext-test.js.map +0 -1
- package/build/src/__tests__/EntitySecondaryCacheLoader-test.d.ts +0 -1
- package/build/src/__tests__/EntitySecondaryCacheLoader-test.js +0 -58
- package/build/src/__tests__/EntitySecondaryCacheLoader-test.js.map +0 -1
- package/build/src/__tests__/EntitySelfReferentialEdges-test.d.ts +0 -1
- package/build/src/__tests__/EntitySelfReferentialEdges-test.js +0 -196
- package/build/src/__tests__/EntitySelfReferentialEdges-test.js.map +0 -1
- package/build/src/__tests__/GenericEntityCacheAdapter-test.d.ts +0 -1
- package/build/src/__tests__/GenericEntityCacheAdapter-test.js +0 -95
- package/build/src/__tests__/GenericEntityCacheAdapter-test.js.map +0 -1
- package/build/src/__tests__/ReadonlyEntity-test.d.ts +0 -1
- package/build/src/__tests__/ReadonlyEntity-test.js +0 -209
- package/build/src/__tests__/ReadonlyEntity-test.js.map +0 -1
- package/build/src/__tests__/ViewerContext-test.d.ts +0 -1
- package/build/src/__tests__/ViewerContext-test.js +0 -28
- package/build/src/__tests__/ViewerContext-test.js.map +0 -1
- package/build/src/__tests__/ViewerScopedEntityCompanion-test.d.ts +0 -1
- package/build/src/__tests__/ViewerScopedEntityCompanion-test.js +0 -18
- package/build/src/__tests__/ViewerScopedEntityCompanion-test.js.map +0 -1
- package/build/src/__tests__/ViewerScopedEntityCompanionProvider-test.d.ts +0 -1
- package/build/src/__tests__/ViewerScopedEntityCompanionProvider-test.js +0 -18
- package/build/src/__tests__/ViewerScopedEntityCompanionProvider-test.js.map +0 -1
- package/build/src/__tests__/ViewerScopedEntityLoaderFactory-test.d.ts +0 -1
- package/build/src/__tests__/ViewerScopedEntityLoaderFactory-test.js +0 -21
- package/build/src/__tests__/ViewerScopedEntityLoaderFactory-test.js.map +0 -1
- package/build/src/__tests__/ViewerScopedEntityMutatorFactory-test.d.ts +0 -1
- package/build/src/__tests__/ViewerScopedEntityMutatorFactory-test.js +0 -20
- package/build/src/__tests__/ViewerScopedEntityMutatorFactory-test.js.map +0 -1
- package/build/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.d.ts +0 -1
- package/build/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +0 -121
- package/build/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +0 -1
- package/build/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.d.ts +0 -1
- package/build/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +0 -119
- package/build/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js.map +0 -1
- package/build/src/__tests__/entityUtils-test.d.ts +0 -1
- package/build/src/__tests__/entityUtils-test.js +0 -88
- package/build/src/__tests__/entityUtils-test.js.map +0 -1
- package/build/src/errors/__tests__/EntityDatabaseAdapterError-test.d.ts +0 -1
- package/build/src/errors/__tests__/EntityDatabaseAdapterError-test.js +0 -21
- package/build/src/errors/__tests__/EntityDatabaseAdapterError-test.js.map +0 -1
- package/build/src/internal/__tests__/CompositeFieldHolder-test.d.ts +0 -1
- package/build/src/internal/__tests__/CompositeFieldHolder-test.js +0 -25
- package/build/src/internal/__tests__/CompositeFieldHolder-test.js.map +0 -1
- package/build/src/internal/__tests__/CompositeFieldValueMap-test.d.ts +0 -1
- package/build/src/internal/__tests__/CompositeFieldValueMap-test.js +0 -40
- package/build/src/internal/__tests__/CompositeFieldValueMap-test.js.map +0 -1
- package/build/src/internal/__tests__/EntityDataManager-test.d.ts +0 -1
- package/build/src/internal/__tests__/EntityDataManager-test.js +0 -666
- package/build/src/internal/__tests__/EntityDataManager-test.js.map +0 -1
- package/build/src/internal/__tests__/EntityFieldTransformationUtils-test.d.ts +0 -1
- package/build/src/internal/__tests__/EntityFieldTransformationUtils-test.js +0 -135
- package/build/src/internal/__tests__/EntityFieldTransformationUtils-test.js.map +0 -1
- package/build/src/internal/__tests__/ReadThroughEntityCache-test.d.ts +0 -1
- package/build/src/internal/__tests__/ReadThroughEntityCache-test.js +0 -217
- package/build/src/internal/__tests__/ReadThroughEntityCache-test.js.map +0 -1
- package/build/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.d.ts +0 -1
- package/build/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js +0 -18
- package/build/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js.map +0 -1
- package/build/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.d.ts +0 -1
- package/build/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js +0 -18
- package/build/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js.map +0 -1
- package/build/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.d.ts +0 -1
- package/build/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js +0 -18
- package/build/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js.map +0 -1
- package/build/src/utils/__testfixtures__/PrivacyPolicyRuleTestUtils.d.ts +0 -28
- package/build/src/utils/__testfixtures__/PrivacyPolicyRuleTestUtils.js +0 -53
- package/build/src/utils/__testfixtures__/PrivacyPolicyRuleTestUtils.js.map +0 -1
- package/build/src/utils/__testfixtures__/SimpleTestEntity.d.ts +0 -20
- package/build/src/utils/__testfixtures__/SimpleTestEntity.js +0 -46
- package/build/src/utils/__testfixtures__/SimpleTestEntity.js.map +0 -1
- package/build/src/utils/__testfixtures__/StubCacheAdapter.d.ts +0 -29
- package/build/src/utils/__testfixtures__/StubCacheAdapter.js +0 -103
- package/build/src/utils/__testfixtures__/StubCacheAdapter.js.map +0 -1
- package/build/src/utils/__testfixtures__/StubDatabaseAdapter.d.ts +0 -26
- package/build/src/utils/__testfixtures__/StubDatabaseAdapter.js +0 -173
- package/build/src/utils/__testfixtures__/StubDatabaseAdapter.js.map +0 -1
- package/build/src/utils/__testfixtures__/StubDatabaseAdapterProvider.d.ts +0 -7
- package/build/src/utils/__testfixtures__/StubDatabaseAdapterProvider.js +0 -12
- package/build/src/utils/__testfixtures__/StubDatabaseAdapterProvider.js.map +0 -1
- package/build/src/utils/__testfixtures__/StubQueryContextProvider.d.ts +0 -7
- package/build/src/utils/__testfixtures__/StubQueryContextProvider.js +0 -17
- package/build/src/utils/__testfixtures__/StubQueryContextProvider.js.map +0 -1
- package/build/src/utils/__testfixtures__/TSMockitoExtensions.d.ts +0 -9
- package/build/src/utils/__testfixtures__/TSMockitoExtensions.js +0 -65
- package/build/src/utils/__testfixtures__/TSMockitoExtensions.js.map +0 -1
- package/build/src/utils/__testfixtures__/TestEntity.d.ts +0 -30
- package/build/src/utils/__testfixtures__/TestEntity.js +0 -96
- package/build/src/utils/__testfixtures__/TestEntity.js.map +0 -1
- package/build/src/utils/__testfixtures__/TestEntity2.d.ts +0 -20
- package/build/src/utils/__testfixtures__/TestEntity2.js +0 -49
- package/build/src/utils/__testfixtures__/TestEntity2.js.map +0 -1
- package/build/src/utils/__testfixtures__/TestEntityWithMutationTriggers.d.ts +0 -36
- package/build/src/utils/__testfixtures__/TestEntityWithMutationTriggers.js +0 -80
- package/build/src/utils/__testfixtures__/TestEntityWithMutationTriggers.js.map +0 -1
- package/build/src/utils/__testfixtures__/TestViewerContext.d.ts +0 -3
- package/build/src/utils/__testfixtures__/TestViewerContext.js +0 -8
- package/build/src/utils/__testfixtures__/TestViewerContext.js.map +0 -1
- package/build/src/utils/__testfixtures__/createUnitTestEntityCompanionProvider.d.ts +0 -7
- package/build/src/utils/__testfixtures__/createUnitTestEntityCompanionProvider.js +0 -33
- package/build/src/utils/__testfixtures__/createUnitTestEntityCompanionProvider.js.map +0 -1
- package/build/src/utils/__testfixtures__/describeFieldTestCase.d.ts +0 -2
- package/build/src/utils/__testfixtures__/describeFieldTestCase.js +0 -19
- package/build/src/utils/__testfixtures__/describeFieldTestCase.js.map +0 -1
- package/build/src/utils/__tests__/EntityCreationUtils-test.d.ts +0 -1
- package/build/src/utils/__tests__/EntityCreationUtils-test.js +0 -144
- package/build/src/utils/__tests__/EntityCreationUtils-test.js.map +0 -1
- package/build/src/utils/__tests__/EntityPrivacyUtils-test.d.ts +0 -1
- package/build/src/utils/__tests__/EntityPrivacyUtils-test.js +0 -460
- package/build/src/utils/__tests__/EntityPrivacyUtils-test.js.map +0 -1
- package/build/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.d.ts +0 -1
- package/build/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js +0 -180
- package/build/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js.map +0 -1
- package/build/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.d.ts +0 -1
- package/build/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js +0 -27
- package/build/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js.map +0 -1
- package/build/src/utils/collections/__tests__/SerializableKeyMap-test.d.ts +0 -5
- package/build/src/utils/collections/__tests__/SerializableKeyMap-test.js +0 -99
- package/build/src/utils/collections/__tests__/SerializableKeyMap-test.js.map +0 -1
- package/build/src/utils/collections/__tests__/maps-test.d.ts +0 -1
- package/build/src/utils/collections/__tests__/maps-test.js +0 -121
- package/build/src/utils/collections/__tests__/maps-test.js.map +0 -1
- package/build/src/utils/collections/__tests__/sets-test.d.ts +0 -1
- package/build/src/utils/collections/__tests__/sets-test.js +0 -19
- package/build/src/utils/collections/__tests__/sets-test.js.map +0 -1
- package/build/tsconfig.tsbuildinfo +0 -1
|
@@ -477,6 +477,7 @@ export class AuthorizationResultBasedUpdateMutator<
|
|
|
477
477
|
databaseAdapter: EntityDatabaseAdapter<TFields, TIDField>,
|
|
478
478
|
metricsAdapter: IEntityMetricsAdapter,
|
|
479
479
|
originalEntity: TEntity,
|
|
480
|
+
private readonly cascadingDeleteCause: EntityCascadingDeletionInfo | null,
|
|
480
481
|
) {
|
|
481
482
|
super(
|
|
482
483
|
companionProvider,
|
|
@@ -517,37 +518,25 @@ export class AuthorizationResultBasedUpdateMutator<
|
|
|
517
518
|
EntityMetricsMutationType.UPDATE,
|
|
518
519
|
this.entityClass.name,
|
|
519
520
|
this.queryContext,
|
|
520
|
-
)(this.updateInTransactionAsync(false
|
|
521
|
+
)(this.updateInTransactionAsync(false));
|
|
521
522
|
}
|
|
522
523
|
|
|
523
|
-
private async updateInTransactionAsync(
|
|
524
|
-
skipDatabaseUpdate: true,
|
|
525
|
-
cascadingDeleteCause: EntityCascadingDeletionInfo,
|
|
526
|
-
): Promise<Result<TEntity>>;
|
|
527
|
-
private async updateInTransactionAsync(
|
|
528
|
-
skipDatabaseUpdate: false,
|
|
529
|
-
cascadingDeleteCause: EntityCascadingDeletionInfo | null,
|
|
530
|
-
): Promise<Result<TEntity>>;
|
|
531
|
-
private async updateInTransactionAsync(
|
|
532
|
-
skipDatabaseUpdate: boolean,
|
|
533
|
-
cascadingDeleteCause: EntityCascadingDeletionInfo | null,
|
|
534
|
-
): Promise<Result<TEntity>> {
|
|
524
|
+
private async updateInTransactionAsync(skipDatabaseUpdate: boolean): Promise<Result<TEntity>> {
|
|
535
525
|
return await this.queryContext.runInTransactionIfNotInTransactionAsync((innerQueryContext) =>
|
|
536
|
-
this.updateInternalAsync(innerQueryContext, skipDatabaseUpdate
|
|
526
|
+
this.updateInternalAsync(innerQueryContext, skipDatabaseUpdate),
|
|
537
527
|
);
|
|
538
528
|
}
|
|
539
529
|
|
|
540
530
|
private async updateInternalAsync(
|
|
541
531
|
queryContext: EntityTransactionalQueryContext,
|
|
542
532
|
skipDatabaseUpdate: boolean,
|
|
543
|
-
cascadingDeleteCause: EntityCascadingDeletionInfo | null,
|
|
544
533
|
): Promise<Result<TEntity>> {
|
|
545
534
|
this.validateFields(this.updatedFields);
|
|
546
535
|
this.ensureStableIDField(this.updatedFields);
|
|
547
536
|
|
|
548
537
|
const entityLoader = this.entityLoaderFactory.forLoad(this.viewerContext, queryContext, {
|
|
549
538
|
previousValue: this.originalEntity,
|
|
550
|
-
cascadingDeleteCause,
|
|
539
|
+
cascadingDeleteCause: this.cascadingDeleteCause,
|
|
551
540
|
});
|
|
552
541
|
|
|
553
542
|
const entityAboutToBeUpdated = entityLoader.utils.constructEntity(this.fieldsForEntity);
|
|
@@ -555,7 +544,7 @@ export class AuthorizationResultBasedUpdateMutator<
|
|
|
555
544
|
this.privacyPolicy.authorizeUpdateAsync(
|
|
556
545
|
this.viewerContext,
|
|
557
546
|
queryContext,
|
|
558
|
-
{ previousValue: this.originalEntity, cascadingDeleteCause },
|
|
547
|
+
{ previousValue: this.originalEntity, cascadingDeleteCause: this.cascadingDeleteCause },
|
|
559
548
|
entityAboutToBeUpdated,
|
|
560
549
|
this.metricsAdapter,
|
|
561
550
|
),
|
|
@@ -568,19 +557,31 @@ export class AuthorizationResultBasedUpdateMutator<
|
|
|
568
557
|
this.mutationValidators,
|
|
569
558
|
queryContext,
|
|
570
559
|
entityAboutToBeUpdated,
|
|
571
|
-
{
|
|
560
|
+
{
|
|
561
|
+
type: EntityMutationType.UPDATE,
|
|
562
|
+
previousValue: this.originalEntity,
|
|
563
|
+
cascadingDeleteCause: this.cascadingDeleteCause,
|
|
564
|
+
},
|
|
572
565
|
);
|
|
573
566
|
await this.executeMutationTriggersAsync(
|
|
574
567
|
this.mutationTriggers.beforeAll,
|
|
575
568
|
queryContext,
|
|
576
569
|
entityAboutToBeUpdated,
|
|
577
|
-
{
|
|
570
|
+
{
|
|
571
|
+
type: EntityMutationType.UPDATE,
|
|
572
|
+
previousValue: this.originalEntity,
|
|
573
|
+
cascadingDeleteCause: this.cascadingDeleteCause,
|
|
574
|
+
},
|
|
578
575
|
);
|
|
579
576
|
await this.executeMutationTriggersAsync(
|
|
580
577
|
this.mutationTriggers.beforeUpdate,
|
|
581
578
|
queryContext,
|
|
582
579
|
entityAboutToBeUpdated,
|
|
583
|
-
{
|
|
580
|
+
{
|
|
581
|
+
type: EntityMutationType.UPDATE,
|
|
582
|
+
previousValue: this.originalEntity,
|
|
583
|
+
cascadingDeleteCause: this.cascadingDeleteCause,
|
|
584
|
+
},
|
|
584
585
|
);
|
|
585
586
|
|
|
586
587
|
// skip the database update when specified
|
|
@@ -627,13 +628,21 @@ export class AuthorizationResultBasedUpdateMutator<
|
|
|
627
628
|
this.mutationTriggers.afterUpdate,
|
|
628
629
|
queryContext,
|
|
629
630
|
updatedEntity,
|
|
630
|
-
{
|
|
631
|
+
{
|
|
632
|
+
type: EntityMutationType.UPDATE,
|
|
633
|
+
previousValue: this.originalEntity,
|
|
634
|
+
cascadingDeleteCause: this.cascadingDeleteCause,
|
|
635
|
+
},
|
|
631
636
|
);
|
|
632
637
|
await this.executeMutationTriggersAsync(
|
|
633
638
|
this.mutationTriggers.afterAll,
|
|
634
639
|
queryContext,
|
|
635
640
|
updatedEntity,
|
|
636
|
-
{
|
|
641
|
+
{
|
|
642
|
+
type: EntityMutationType.UPDATE,
|
|
643
|
+
previousValue: this.originalEntity,
|
|
644
|
+
cascadingDeleteCause: this.cascadingDeleteCause,
|
|
645
|
+
},
|
|
637
646
|
);
|
|
638
647
|
|
|
639
648
|
queryContext.appendPostCommitCallback(
|
|
@@ -644,7 +653,7 @@ export class AuthorizationResultBasedUpdateMutator<
|
|
|
644
653
|
{
|
|
645
654
|
type: EntityMutationType.UPDATE,
|
|
646
655
|
previousValue: this.originalEntity,
|
|
647
|
-
cascadingDeleteCause,
|
|
656
|
+
cascadingDeleteCause: this.cascadingDeleteCause,
|
|
648
657
|
},
|
|
649
658
|
),
|
|
650
659
|
);
|
|
@@ -724,6 +733,7 @@ export class AuthorizationResultBasedDeleteMutator<
|
|
|
724
733
|
databaseAdapter: EntityDatabaseAdapter<TFields, TIDField>,
|
|
725
734
|
metricsAdapter: IEntityMetricsAdapter,
|
|
726
735
|
private readonly entity: TEntity,
|
|
736
|
+
private readonly cascadingDeleteCause: EntityCascadingDeletionInfo | null,
|
|
727
737
|
) {
|
|
728
738
|
super(
|
|
729
739
|
companionProvider,
|
|
@@ -750,20 +760,18 @@ export class AuthorizationResultBasedDeleteMutator<
|
|
|
750
760
|
EntityMetricsMutationType.DELETE,
|
|
751
761
|
this.entityClass.name,
|
|
752
762
|
this.queryContext,
|
|
753
|
-
)(this.deleteInTransactionAsync(new Set(), false
|
|
763
|
+
)(this.deleteInTransactionAsync(new Set(), false));
|
|
754
764
|
}
|
|
755
765
|
|
|
756
766
|
private async deleteInTransactionAsync(
|
|
757
767
|
processedEntityIdentifiersFromTransitiveDeletions: Set<string>,
|
|
758
768
|
skipDatabaseDeletion: boolean,
|
|
759
|
-
cascadingDeleteCause: EntityCascadingDeletionInfo | null,
|
|
760
769
|
): Promise<Result<void>> {
|
|
761
770
|
return await this.queryContext.runInTransactionIfNotInTransactionAsync((innerQueryContext) =>
|
|
762
771
|
this.deleteInternalAsync(
|
|
763
772
|
innerQueryContext,
|
|
764
773
|
processedEntityIdentifiersFromTransitiveDeletions,
|
|
765
774
|
skipDatabaseDeletion,
|
|
766
|
-
cascadingDeleteCause,
|
|
767
775
|
),
|
|
768
776
|
);
|
|
769
777
|
}
|
|
@@ -772,13 +780,12 @@ export class AuthorizationResultBasedDeleteMutator<
|
|
|
772
780
|
queryContext: EntityTransactionalQueryContext,
|
|
773
781
|
processedEntityIdentifiersFromTransitiveDeletions: Set<string>,
|
|
774
782
|
skipDatabaseDeletion: boolean,
|
|
775
|
-
cascadingDeleteCause: EntityCascadingDeletionInfo | null,
|
|
776
783
|
): Promise<Result<void>> {
|
|
777
784
|
const authorizeDeleteResult = await asyncResult(
|
|
778
785
|
this.privacyPolicy.authorizeDeleteAsync(
|
|
779
786
|
this.viewerContext,
|
|
780
787
|
queryContext,
|
|
781
|
-
{ previousValue: null, cascadingDeleteCause },
|
|
788
|
+
{ previousValue: null, cascadingDeleteCause: this.cascadingDeleteCause },
|
|
782
789
|
this.entity,
|
|
783
790
|
this.metricsAdapter,
|
|
784
791
|
),
|
|
@@ -791,20 +798,25 @@ export class AuthorizationResultBasedDeleteMutator<
|
|
|
791
798
|
this.entity,
|
|
792
799
|
queryContext,
|
|
793
800
|
processedEntityIdentifiersFromTransitiveDeletions,
|
|
794
|
-
cascadingDeleteCause,
|
|
795
801
|
);
|
|
796
802
|
|
|
797
803
|
await this.executeMutationTriggersAsync(
|
|
798
804
|
this.mutationTriggers.beforeAll,
|
|
799
805
|
queryContext,
|
|
800
806
|
this.entity,
|
|
801
|
-
{
|
|
807
|
+
{
|
|
808
|
+
type: EntityMutationType.DELETE,
|
|
809
|
+
cascadingDeleteCause: this.cascadingDeleteCause,
|
|
810
|
+
},
|
|
802
811
|
);
|
|
803
812
|
await this.executeMutationTriggersAsync(
|
|
804
813
|
this.mutationTriggers.beforeDelete,
|
|
805
814
|
queryContext,
|
|
806
815
|
this.entity,
|
|
807
|
-
{
|
|
816
|
+
{
|
|
817
|
+
type: EntityMutationType.DELETE,
|
|
818
|
+
cascadingDeleteCause: this.cascadingDeleteCause,
|
|
819
|
+
},
|
|
808
820
|
);
|
|
809
821
|
|
|
810
822
|
if (!skipDatabaseDeletion) {
|
|
@@ -817,7 +829,7 @@ export class AuthorizationResultBasedDeleteMutator<
|
|
|
817
829
|
|
|
818
830
|
const entityLoader = this.entityLoaderFactory.forLoad(this.viewerContext, queryContext, {
|
|
819
831
|
previousValue: null,
|
|
820
|
-
cascadingDeleteCause,
|
|
832
|
+
cascadingDeleteCause: this.cascadingDeleteCause,
|
|
821
833
|
});
|
|
822
834
|
|
|
823
835
|
// Invalidate all caches for the entity so that any previously-cached loads
|
|
@@ -838,13 +850,19 @@ export class AuthorizationResultBasedDeleteMutator<
|
|
|
838
850
|
this.mutationTriggers.afterDelete,
|
|
839
851
|
queryContext,
|
|
840
852
|
this.entity,
|
|
841
|
-
{
|
|
853
|
+
{
|
|
854
|
+
type: EntityMutationType.DELETE,
|
|
855
|
+
cascadingDeleteCause: this.cascadingDeleteCause,
|
|
856
|
+
},
|
|
842
857
|
);
|
|
843
858
|
await this.executeMutationTriggersAsync(
|
|
844
859
|
this.mutationTriggers.afterAll,
|
|
845
860
|
queryContext,
|
|
846
861
|
this.entity,
|
|
847
|
-
{
|
|
862
|
+
{
|
|
863
|
+
type: EntityMutationType.DELETE,
|
|
864
|
+
cascadingDeleteCause: this.cascadingDeleteCause,
|
|
865
|
+
},
|
|
848
866
|
);
|
|
849
867
|
|
|
850
868
|
queryContext.appendPostCommitCallback(
|
|
@@ -852,7 +870,10 @@ export class AuthorizationResultBasedDeleteMutator<
|
|
|
852
870
|
this,
|
|
853
871
|
this.mutationTriggers.afterCommit,
|
|
854
872
|
this.entity,
|
|
855
|
-
{
|
|
873
|
+
{
|
|
874
|
+
type: EntityMutationType.DELETE,
|
|
875
|
+
cascadingDeleteCause: this.cascadingDeleteCause,
|
|
876
|
+
},
|
|
856
877
|
),
|
|
857
878
|
);
|
|
858
879
|
|
|
@@ -877,7 +898,6 @@ export class AuthorizationResultBasedDeleteMutator<
|
|
|
877
898
|
entity: TEntity,
|
|
878
899
|
queryContext: EntityTransactionalQueryContext,
|
|
879
900
|
processedEntityIdentifiers: Set<string>,
|
|
880
|
-
cascadingDeleteCause: EntityCascadingDeletionInfo | null,
|
|
881
901
|
): Promise<void> {
|
|
882
902
|
// prevent infinite reference cycles by keeping track of entities already processed
|
|
883
903
|
if (processedEntityIdentifiers.has(entity.getUniqueIdentifier())) {
|
|
@@ -900,7 +920,7 @@ export class AuthorizationResultBasedDeleteMutator<
|
|
|
900
920
|
|
|
901
921
|
const newCascadingDeleteCause = {
|
|
902
922
|
entity,
|
|
903
|
-
cascadingDeleteCause,
|
|
923
|
+
cascadingDeleteCause: this.cascadingDeleteCause,
|
|
904
924
|
};
|
|
905
925
|
|
|
906
926
|
await Promise.all(
|
|
@@ -950,11 +970,10 @@ export class AuthorizationResultBasedDeleteMutator<
|
|
|
950
970
|
inboundReferenceEntities.map((inboundReferenceEntity) =>
|
|
951
971
|
enforceAsyncResult(
|
|
952
972
|
mutatorFactory
|
|
953
|
-
.forDelete(inboundReferenceEntity, queryContext)
|
|
973
|
+
.forDelete(inboundReferenceEntity, queryContext, newCascadingDeleteCause)
|
|
954
974
|
.deleteInTransactionAsync(
|
|
955
975
|
processedEntityIdentifiers,
|
|
956
976
|
/* skipDatabaseDeletion */ true, // deletion is handled by DB
|
|
957
|
-
newCascadingDeleteCause,
|
|
958
977
|
),
|
|
959
978
|
),
|
|
960
979
|
),
|
|
@@ -966,11 +985,9 @@ export class AuthorizationResultBasedDeleteMutator<
|
|
|
966
985
|
inboundReferenceEntities.map((inboundReferenceEntity) =>
|
|
967
986
|
enforceAsyncResult(
|
|
968
987
|
mutatorFactory
|
|
969
|
-
.forUpdate(inboundReferenceEntity, queryContext)
|
|
988
|
+
.forUpdate(inboundReferenceEntity, queryContext, newCascadingDeleteCause)
|
|
970
989
|
.setField(fieldName, null)
|
|
971
|
-
[
|
|
972
|
-
'updateInTransactionAsync'
|
|
973
|
-
](/* skipDatabaseUpdate */ true, newCascadingDeleteCause),
|
|
990
|
+
['updateInTransactionAsync'](/* skipDatabaseUpdate */ true),
|
|
974
991
|
),
|
|
975
992
|
),
|
|
976
993
|
);
|
|
@@ -981,11 +998,9 @@ export class AuthorizationResultBasedDeleteMutator<
|
|
|
981
998
|
inboundReferenceEntities.map((inboundReferenceEntity) =>
|
|
982
999
|
enforceAsyncResult(
|
|
983
1000
|
mutatorFactory
|
|
984
|
-
.forUpdate(inboundReferenceEntity, queryContext)
|
|
1001
|
+
.forUpdate(inboundReferenceEntity, queryContext, newCascadingDeleteCause)
|
|
985
1002
|
.setField(fieldName, null)
|
|
986
|
-
[
|
|
987
|
-
'updateInTransactionAsync'
|
|
988
|
-
](/* skipDatabaseUpdate */ false, newCascadingDeleteCause),
|
|
1003
|
+
['updateInTransactionAsync'](/* skipDatabaseUpdate */ false),
|
|
989
1004
|
),
|
|
990
1005
|
),
|
|
991
1006
|
);
|
|
@@ -996,11 +1011,10 @@ export class AuthorizationResultBasedDeleteMutator<
|
|
|
996
1011
|
inboundReferenceEntities.map((inboundReferenceEntity) =>
|
|
997
1012
|
enforceAsyncResult(
|
|
998
1013
|
mutatorFactory
|
|
999
|
-
.forDelete(inboundReferenceEntity, queryContext)
|
|
1014
|
+
.forDelete(inboundReferenceEntity, queryContext, newCascadingDeleteCause)
|
|
1000
1015
|
.deleteInTransactionAsync(
|
|
1001
1016
|
processedEntityIdentifiers,
|
|
1002
1017
|
/* skipDatabaseDeletion */ false,
|
|
1003
|
-
newCascadingDeleteCause,
|
|
1004
1018
|
),
|
|
1005
1019
|
),
|
|
1006
1020
|
),
|
package/src/EntityDeleter.ts
CHANGED
|
@@ -68,6 +68,6 @@ export class EntityDeleter<
|
|
|
68
68
|
.getViewerContext()
|
|
69
69
|
.getViewerScopedEntityCompanionForClass(this.entityClass)
|
|
70
70
|
.getMutatorFactory()
|
|
71
|
-
.forDelete(this.existingEntity, this.queryContext);
|
|
71
|
+
.forDelete(this.existingEntity, this.queryContext, /* cascadingDeleteCause */ null);
|
|
72
72
|
}
|
|
73
73
|
}
|
package/src/EntityFields.ts
CHANGED
|
@@ -121,6 +121,7 @@ export class EnumField<TRequireExplicitCache extends boolean> extends EntityFiel
|
|
|
121
121
|
|
|
122
122
|
/**
|
|
123
123
|
* EntityFieldDefinition for a enum column with a strict typescript enum type.
|
|
124
|
+
* The strict version checks that the value of the field adheres to a particular typescript enum
|
|
124
125
|
*/
|
|
125
126
|
export class StrictEnumField<
|
|
126
127
|
T extends object,
|
|
@@ -140,3 +141,15 @@ export class StrictEnumField<
|
|
|
140
141
|
return super.validateInputValueInternal(value) && Object.values(this.enum).includes(value);
|
|
141
142
|
}
|
|
142
143
|
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* EntityFieldDefinition for a column with a JS Buffer type.
|
|
147
|
+
*/
|
|
148
|
+
export class BufferField<TRequireExplicitCache extends boolean> extends EntityFieldDefinition<
|
|
149
|
+
Buffer,
|
|
150
|
+
TRequireExplicitCache
|
|
151
|
+
> {
|
|
152
|
+
protected validateInputValueInternal(value: Buffer): boolean {
|
|
153
|
+
return Buffer.isBuffer(value);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
@@ -8,6 +8,7 @@ import { EntityCompanionProvider } from './EntityCompanionProvider';
|
|
|
8
8
|
import { EntityConfiguration } from './EntityConfiguration';
|
|
9
9
|
import { EntityDatabaseAdapter } from './EntityDatabaseAdapter';
|
|
10
10
|
import { EntityLoaderFactory } from './EntityLoaderFactory';
|
|
11
|
+
import { EntityCascadingDeletionInfo } from './EntityMutationInfo';
|
|
11
12
|
import { EntityMutationTriggerConfiguration } from './EntityMutationTriggerConfiguration';
|
|
12
13
|
import { EntityMutationValidator } from './EntityMutationValidator';
|
|
13
14
|
import { EntityPrivacyPolicy } from './EntityPrivacyPolicy';
|
|
@@ -111,6 +112,7 @@ export class EntityMutatorFactory<
|
|
|
111
112
|
forUpdate(
|
|
112
113
|
existingEntity: TEntity,
|
|
113
114
|
queryContext: EntityQueryContext,
|
|
115
|
+
cascadingDeleteCause: EntityCascadingDeletionInfo | null,
|
|
114
116
|
): AuthorizationResultBasedUpdateMutator<
|
|
115
117
|
TFields,
|
|
116
118
|
TIDField,
|
|
@@ -132,6 +134,7 @@ export class EntityMutatorFactory<
|
|
|
132
134
|
this.databaseAdapter,
|
|
133
135
|
this.metricsAdapter,
|
|
134
136
|
existingEntity,
|
|
137
|
+
cascadingDeleteCause,
|
|
135
138
|
);
|
|
136
139
|
}
|
|
137
140
|
|
|
@@ -143,6 +146,7 @@ export class EntityMutatorFactory<
|
|
|
143
146
|
forDelete(
|
|
144
147
|
existingEntity: TEntity,
|
|
145
148
|
queryContext: EntityQueryContext,
|
|
149
|
+
cascadingDeleteCause: EntityCascadingDeletionInfo | null,
|
|
146
150
|
): AuthorizationResultBasedDeleteMutator<
|
|
147
151
|
TFields,
|
|
148
152
|
TIDField,
|
|
@@ -164,6 +168,7 @@ export class EntityMutatorFactory<
|
|
|
164
168
|
this.databaseAdapter,
|
|
165
169
|
this.metricsAdapter,
|
|
166
170
|
existingEntity,
|
|
171
|
+
cascadingDeleteCause,
|
|
167
172
|
);
|
|
168
173
|
}
|
|
169
174
|
}
|
package/src/EntityUpdater.ts
CHANGED
|
@@ -68,6 +68,6 @@ export class EntityUpdater<
|
|
|
68
68
|
.getViewerContext()
|
|
69
69
|
.getViewerScopedEntityCompanionForClass(this.entityClass)
|
|
70
70
|
.getMutatorFactory()
|
|
71
|
-
.forUpdate(this.existingEntity, this.queryContext);
|
|
71
|
+
.forUpdate(this.existingEntity, this.queryContext, /* cascadingDeleteCause */ null);
|
|
72
72
|
}
|
|
73
73
|
}
|
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
AuthorizationResultBasedDeleteMutator,
|
|
4
4
|
AuthorizationResultBasedUpdateMutator,
|
|
5
5
|
} from './AuthorizationResultBasedEntityMutator';
|
|
6
|
+
import { EntityCascadingDeletionInfo } from './EntityMutationInfo';
|
|
6
7
|
import { EntityMutatorFactory } from './EntityMutatorFactory';
|
|
7
8
|
import { EntityPrivacyPolicy } from './EntityPrivacyPolicy';
|
|
8
9
|
import { EntityQueryContext } from './EntityQueryContext';
|
|
@@ -54,6 +55,7 @@ export class ViewerScopedEntityMutatorFactory<
|
|
|
54
55
|
forUpdate(
|
|
55
56
|
existingEntity: TEntity,
|
|
56
57
|
queryContext: EntityQueryContext,
|
|
58
|
+
cascadingDeleteCause: EntityCascadingDeletionInfo | null,
|
|
57
59
|
): AuthorizationResultBasedUpdateMutator<
|
|
58
60
|
TFields,
|
|
59
61
|
TIDField,
|
|
@@ -62,12 +64,13 @@ export class ViewerScopedEntityMutatorFactory<
|
|
|
62
64
|
TPrivacyPolicy,
|
|
63
65
|
TSelectedFields
|
|
64
66
|
> {
|
|
65
|
-
return this.entityMutatorFactory.forUpdate(existingEntity, queryContext);
|
|
67
|
+
return this.entityMutatorFactory.forUpdate(existingEntity, queryContext, cascadingDeleteCause);
|
|
66
68
|
}
|
|
67
69
|
|
|
68
70
|
forDelete(
|
|
69
71
|
existingEntity: TEntity,
|
|
70
72
|
queryContext: EntityQueryContext,
|
|
73
|
+
cascadingDeleteCause: EntityCascadingDeletionInfo | null,
|
|
71
74
|
): AuthorizationResultBasedDeleteMutator<
|
|
72
75
|
TFields,
|
|
73
76
|
TIDField,
|
|
@@ -76,6 +79,6 @@ export class ViewerScopedEntityMutatorFactory<
|
|
|
76
79
|
TPrivacyPolicy,
|
|
77
80
|
TSelectedFields
|
|
78
81
|
> {
|
|
79
|
-
return this.entityMutatorFactory.forDelete(existingEntity, queryContext);
|
|
82
|
+
return this.entityMutatorFactory.forDelete(existingEntity, queryContext, cascadingDeleteCause);
|
|
80
83
|
}
|
|
81
84
|
}
|
|
@@ -4,6 +4,7 @@ import { v1 as uuidv1, v3 as uuidv3, v4 as uuidv4, v5 as uuidv5 } from 'uuid';
|
|
|
4
4
|
import { EntityFieldDefinition } from '../EntityFieldDefinition';
|
|
5
5
|
import {
|
|
6
6
|
BooleanField,
|
|
7
|
+
BufferField,
|
|
7
8
|
DateField,
|
|
8
9
|
EnumField,
|
|
9
10
|
FloatField,
|
|
@@ -88,3 +89,9 @@ describeFieldTestCase(
|
|
|
88
89
|
[TestEnum.HELLO, TestEnum.WHO, 'world'],
|
|
89
90
|
['what', 1, true],
|
|
90
91
|
);
|
|
92
|
+
|
|
93
|
+
describeFieldTestCase(
|
|
94
|
+
new BufferField({ columnName: 'wat' }),
|
|
95
|
+
[Buffer.from('hello')],
|
|
96
|
+
['hello', 1, true],
|
|
97
|
+
);
|