@expo/entity 0.34.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 +4 -31
- package/build/Entity.js +19 -46
- package/build/Entity.js.map +1 -1
- package/build/EntityAssociationLoader.d.ts +9 -9
- package/build/EntityAssociationLoader.js +37 -12
- 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/EntityQueryContextProvider.d.ts +1 -1
- package/build/EntityQueryContextProvider.js +1 -1
- package/build/EntityQueryContextProvider.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.d.ts +1 -1
- package/build/ReadonlyEntity.js +9 -2
- package/build/ReadonlyEntity.js.map +1 -1
- package/build/ViewerContext.d.ts +2 -2
- package/build/ViewerContext.js +5 -3
- 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 +5 -137
- package/build/__tests__/Entity-test.js.map +1 -1
- package/build/__tests__/EntityAssociationLoader-test.js +37 -65
- package/build/__tests__/EntityAssociationLoader-test.js.map +1 -1
- package/build/__tests__/EntityCommonUseCases-test.js +31 -37
- 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 +89 -80
- 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 +17 -18
- package/build/__tests__/EntityLoader-constructor-test.js.map +1 -1
- package/build/__tests__/EntityLoader-test.js +93 -41
- package/build/__tests__/EntityLoader-test.js.map +1 -1
- package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js +18 -21
- package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js.map +1 -1
- package/build/__tests__/EntityMutator-test.js +74 -29
- 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__/EntitySecondaryCacheLoader-test.js +10 -10
- package/build/__tests__/EntitySecondaryCacheLoader-test.js.map +1 -1
- package/build/__tests__/EntitySelfReferentialEdges-test.js +59 -74
- package/build/__tests__/EntitySelfReferentialEdges-test.js.map +1 -1
- package/build/__tests__/ReadonlyEntity-test.js +13 -13
- package/build/__tests__/ReadonlyEntity-test.js.map +1 -1
- package/build/__tests__/ViewerContext-test.js +2 -2
- package/build/__tests__/ViewerContext-test.js.map +1 -1
- package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js.map +1 -1
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +26 -28
- package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +1 -1
- package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +25 -30
- 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 +7 -2
- 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__/EntityDataManager-test.js +11 -11
- package/build/internal/__tests__/EntityDataManager-test.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.d.ts +8 -8
- package/build/testfixtures/SimpleTestEntity.js +12 -15
- package/build/testfixtures/SimpleTestEntity.js.map +1 -1
- package/build/testfixtures/TestEntity.d.ts +12 -12
- package/build/testfixtures/TestEntity.js +12 -15
- package/build/testfixtures/TestEntity.js.map +1 -1
- package/build/testfixtures/TestEntity2.d.ts +8 -8
- 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/testfixtures/TestViewerContext.d.ts +0 -3
- package/build/testfixtures/TestViewerContext.js +0 -6
- package/build/testfixtures/TestViewerContext.js.map +1 -1
- 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 +26 -118
- package/src/EntityAssociationLoader.ts +56 -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 +6 -6
- 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 +8 -5
- package/src/ViewerContext.ts +10 -10
- 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 +5 -223
- package/src/__tests__/EntityAssociationLoader-test.ts +91 -169
- package/src/__tests__/EntityCommonUseCases-test.ts +36 -38
- 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 +128 -118
- package/src/__tests__/EntityFields-test.ts +14 -2
- package/src/__tests__/EntityLoader-constructor-test.ts +21 -8
- package/src/__tests__/EntityLoader-test.ts +233 -105
- package/src/__tests__/EntityMutator-MutationCacheConsistency-test.ts +17 -20
- package/src/__tests__/EntityMutator-test.ts +342 -163
- package/src/__tests__/EntityPrivacyPolicy-test.ts +166 -53
- package/src/__tests__/EntityQueryContext-test.ts +30 -12
- package/src/__tests__/EntitySecondaryCacheLoader-test.ts +17 -26
- package/src/__tests__/EntitySelfReferentialEdges-test.ts +67 -115
- package/src/__tests__/GenericEntityCacheAdapter-test.ts +2 -2
- package/src/__tests__/ReadonlyEntity-test.ts +13 -15
- package/src/__tests__/ViewerContext-test.ts +3 -4
- 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 +34 -45
- package/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.ts +22 -30
- 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 +25 -25
- 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 +62 -62
- 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/SimpleTestEntity.ts +8 -8
- package/src/testfixtures/TestEntity.ts +13 -16
- package/src/testfixtures/TestEntity2.ts +8 -8
- package/src/testfixtures/TestEntityWithMutationTriggers.ts +156 -0
- package/src/testfixtures/TestViewerContext.ts +1 -12
- 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
|
@@ -19,7 +19,7 @@ export default class EntityAssociationLoader<TFields extends object, TID extends
|
|
|
19
19
|
* @param associatedEntityClass - class of the associated entity
|
|
20
20
|
* @param queryContext - query context in which to perform the load
|
|
21
21
|
*/
|
|
22
|
-
loadAssociatedEntityAsync<TIdentifyingField extends keyof Pick<TFields, TSelectedFields>, TAssociatedFields extends object, TAssociatedID extends NonNullable<TAssociatedFields[TAssociatedSelectedFields]>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields>(fieldIdentifyingAssociatedEntity: TIdentifyingField, associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>, queryContext
|
|
22
|
+
loadAssociatedEntityAsync<TIdentifyingField extends keyof Pick<TFields, TSelectedFields>, TAssociatedFields extends object, TAssociatedID extends NonNullable<TAssociatedFields[TAssociatedSelectedFields]>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields>(fieldIdentifyingAssociatedEntity: TIdentifyingField, associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>, queryContext?: EntityQueryContext): Promise<Result<null extends TFields[TIdentifyingField] ? TAssociatedEntity | null : TAssociatedEntity>>;
|
|
23
23
|
/**
|
|
24
24
|
* Load many entities associated with this entity, often referred to as entites belonging
|
|
25
25
|
* to this entity. In a relational database, the field in the foreign entity is a
|
|
@@ -29,7 +29,7 @@ export default class EntityAssociationLoader<TFields extends object, TID extends
|
|
|
29
29
|
* @param associatedEntityFieldContainingThisID - field of associated entity which contains the ID of this entity
|
|
30
30
|
* @param queryContext - query context in which to perform the load
|
|
31
31
|
*/
|
|
32
|
-
loadManyAssociatedEntitiesAsync<TAssociatedFields extends object, TAssociatedID extends NonNullable<TAssociatedFields[TAssociatedSelectedFields]>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields>(associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>, associatedEntityFieldContainingThisID: keyof Pick<TAssociatedFields, TAssociatedSelectedFields>, queryContext
|
|
32
|
+
loadManyAssociatedEntitiesAsync<TAssociatedFields extends object, TAssociatedID extends NonNullable<TAssociatedFields[TAssociatedSelectedFields]>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields>(associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>, associatedEntityFieldContainingThisID: keyof Pick<TAssociatedFields, TAssociatedSelectedFields>, queryContext?: EntityQueryContext): Promise<readonly Result<TAssociatedEntity>[]>;
|
|
33
33
|
/**
|
|
34
34
|
* Load an associated entity identified by a field value of this entity. In a relational database,
|
|
35
35
|
* the field in this entity is a foreign key to a unique field of the associated entity.
|
|
@@ -38,7 +38,7 @@ export default class EntityAssociationLoader<TFields extends object, TID extends
|
|
|
38
38
|
* @param associatedEntityLookupByField - field of associated entity with which to look up the associated entity
|
|
39
39
|
* @param queryContext - query context in which to perform the load
|
|
40
40
|
*/
|
|
41
|
-
loadAssociatedEntityByFieldEqualingAsync<TAssociatedFields extends object, TAssociatedID extends NonNullable<TAssociatedFields[TAssociatedSelectedFields]>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields>(fieldIdentifyingAssociatedEntity: keyof Pick<TFields, TSelectedFields>, associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>, associatedEntityLookupByField: keyof Pick<TAssociatedFields, TAssociatedSelectedFields>, queryContext
|
|
41
|
+
loadAssociatedEntityByFieldEqualingAsync<TAssociatedFields extends object, TAssociatedID extends NonNullable<TAssociatedFields[TAssociatedSelectedFields]>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields>(fieldIdentifyingAssociatedEntity: keyof Pick<TFields, TSelectedFields>, associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>, associatedEntityLookupByField: keyof Pick<TAssociatedFields, TAssociatedSelectedFields>, queryContext?: EntityQueryContext): Promise<Result<TAssociatedEntity> | null>;
|
|
42
42
|
/**
|
|
43
43
|
* Load many associated entities identified by a field value of this entity. In a relational database,
|
|
44
44
|
* the field in this entity refers to a field of the associated entity.
|
|
@@ -47,7 +47,7 @@ export default class EntityAssociationLoader<TFields extends object, TID extends
|
|
|
47
47
|
* @param associatedEntityLookupByField - field of associated entities with which to look up the associated entities
|
|
48
48
|
* @param queryContext - query context in which to perform the load
|
|
49
49
|
*/
|
|
50
|
-
loadManyAssociatedEntitiesByFieldEqualingAsync<TAssociatedFields extends object, TAssociatedID extends NonNullable<TAssociatedFields[TAssociatedSelectedFields]>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields>(fieldIdentifyingAssociatedEntity: keyof Pick<TFields, TSelectedFields>, associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>, associatedEntityLookupByField: keyof Pick<TAssociatedFields, TAssociatedSelectedFields>, queryContext
|
|
50
|
+
loadManyAssociatedEntitiesByFieldEqualingAsync<TAssociatedFields extends object, TAssociatedID extends NonNullable<TAssociatedFields[TAssociatedSelectedFields]>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields>(fieldIdentifyingAssociatedEntity: keyof Pick<TFields, TSelectedFields>, associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>, associatedEntityLookupByField: keyof Pick<TAssociatedFields, TAssociatedSelectedFields>, queryContext?: EntityQueryContext): Promise<readonly Result<TAssociatedEntity>[]>;
|
|
51
51
|
/**
|
|
52
52
|
* Load an associated entity by folding a sequence of EntityLoadThroughDirective. At each
|
|
53
53
|
* fold step, load an associated entity identified by a field value of the current fold value.
|
|
@@ -56,7 +56,7 @@ export default class EntityAssociationLoader<TFields extends object, TID extends
|
|
|
56
56
|
*/
|
|
57
57
|
loadAssociatedEntityThroughAsync<TFields2 extends object, TID2 extends NonNullable<TFields2[TSelectedFields2]>, TEntity2 extends ReadonlyEntity<TFields2, TID2, TViewerContext, TSelectedFields2>, TPrivacyPolicy2 extends EntityPrivacyPolicy<TFields2, TID2, TViewerContext, TEntity2, TSelectedFields2>, TSelectedFields2 extends keyof TFields2 = keyof TFields2>(loadDirectives: [
|
|
58
58
|
EntityLoadThroughDirective<TViewerContext, TFields, TFields2, TID2, TEntity2, TPrivacyPolicy2, TSelectedFields, TSelectedFields2>
|
|
59
|
-
], queryContext
|
|
59
|
+
], queryContext?: EntityQueryContext): Promise<Result<TEntity2> | null>;
|
|
60
60
|
/**
|
|
61
61
|
* Load an associated entity by folding a sequence of EntityLoadThroughDirective. At each
|
|
62
62
|
* fold step, load an associated entity identified by a field value of the current fold value.
|
|
@@ -66,25 +66,25 @@ export default class EntityAssociationLoader<TFields extends object, TID extends
|
|
|
66
66
|
loadAssociatedEntityThroughAsync<TFields2 extends object, TID2 extends NonNullable<TFields2[TSelectedFields2]>, TEntity2 extends ReadonlyEntity<TFields2, TID2, TViewerContext, TSelectedFields2>, TPrivacyPolicy2 extends EntityPrivacyPolicy<TFields2, TID2, TViewerContext, TEntity2, TSelectedFields2>, TFields3 extends object, TID3 extends NonNullable<TFields3[TSelectedFields3]>, TEntity3 extends ReadonlyEntity<TFields3, TID3, TViewerContext, TSelectedFields3>, TPrivacyPolicy3 extends EntityPrivacyPolicy<TFields3, TID3, TViewerContext, TEntity3, TSelectedFields3>, TSelectedFields2 extends keyof TFields2 = keyof TFields2, TSelectedFields3 extends keyof TFields3 = keyof TFields3>(loadDirectives: [
|
|
67
67
|
EntityLoadThroughDirective<TViewerContext, TFields, TFields2, TID2, TEntity2, TPrivacyPolicy2, TSelectedFields, TSelectedFields2>,
|
|
68
68
|
EntityLoadThroughDirective<TViewerContext, TFields2, TFields3, TID3, TEntity3, TPrivacyPolicy3, TSelectedFields2, TSelectedFields3>
|
|
69
|
-
], queryContext
|
|
69
|
+
], queryContext?: EntityQueryContext): Promise<Result<TEntity3> | null>;
|
|
70
70
|
/**
|
|
71
71
|
* Load an associated entity by folding a sequence of EntityLoadThroughDirective. At each
|
|
72
72
|
* fold step, load an associated entity identified by a field value of the current fold value.
|
|
73
73
|
* @param loadDirectives - associated entity load directives instructing each step of the fold
|
|
74
74
|
* @param queryContext - query context in which to perform the loads
|
|
75
75
|
*/
|
|
76
|
-
loadAssociatedEntityThroughAsync<TFields2 extends object, TID2 extends NonNullable<TFields2[TSelectedFields2]>, TEntity2 extends ReadonlyEntity<TFields2, TID2, TViewerContext, TSelectedFields2>, TPrivacyPolicy2 extends EntityPrivacyPolicy<TFields2, TID2, TViewerContext, TEntity2, TSelectedFields2>, TFields3 extends object, TID3 extends NonNullable<TFields3[TSelectedFields3]>, TEntity3 extends ReadonlyEntity<TFields3, TID3, TViewerContext, TSelectedFields3>, TPrivacyPolicy3 extends EntityPrivacyPolicy<TFields3, TID3, TViewerContext, TEntity3, TSelectedFields3>, TFields4 extends object, TID4 extends NonNullable<TFields4[TSelectedFields4]>, TEntity4 extends ReadonlyEntity<TFields4, TID4, TViewerContext, TSelectedFields4>, TPrivacyPolicy4 extends EntityPrivacyPolicy<TFields4, TID4, TViewerContext, TEntity4, TSelectedFields4>, TSelectedFields2 extends keyof TFields2 = keyof TFields2, TSelectedFields3 extends keyof TFields3 = keyof TFields3, TSelectedFields4 extends keyof TFields4 = keyof TFields4>(
|
|
76
|
+
loadAssociatedEntityThroughAsync<TFields2 extends object, TID2 extends NonNullable<TFields2[TSelectedFields2]>, TEntity2 extends ReadonlyEntity<TFields2, TID2, TViewerContext, TSelectedFields2>, TPrivacyPolicy2 extends EntityPrivacyPolicy<TFields2, TID2, TViewerContext, TEntity2, TSelectedFields2>, TFields3 extends object, TID3 extends NonNullable<TFields3[TSelectedFields3]>, TEntity3 extends ReadonlyEntity<TFields3, TID3, TViewerContext, TSelectedFields3>, TPrivacyPolicy3 extends EntityPrivacyPolicy<TFields3, TID3, TViewerContext, TEntity3, TSelectedFields3>, TFields4 extends object, TID4 extends NonNullable<TFields4[TSelectedFields4]>, TEntity4 extends ReadonlyEntity<TFields4, TID4, TViewerContext, TSelectedFields4>, TPrivacyPolicy4 extends EntityPrivacyPolicy<TFields4, TID4, TViewerContext, TEntity4, TSelectedFields4>, TSelectedFields2 extends keyof TFields2 = keyof TFields2, TSelectedFields3 extends keyof TFields3 = keyof TFields3, TSelectedFields4 extends keyof TFields4 = keyof TFields4>(loadDirectives: [
|
|
77
77
|
EntityLoadThroughDirective<TViewerContext, TFields, TFields2, TID2, TEntity2, TPrivacyPolicy2, TSelectedFields, TSelectedFields2>,
|
|
78
78
|
EntityLoadThroughDirective<TViewerContext, TFields2, TFields3, TID3, TEntity3, TPrivacyPolicy3, TSelectedFields2, TSelectedFields3>,
|
|
79
79
|
EntityLoadThroughDirective<TViewerContext, TFields3, TFields4, TID4, TEntity4, TPrivacyPolicy4, TSelectedFields3, TSelectedFields4>
|
|
80
|
-
], queryContext
|
|
80
|
+
], queryContext?: EntityQueryContext): Promise<Result<TEntity4> | null>;
|
|
81
81
|
/**
|
|
82
82
|
* Load an associated entity by folding a sequence of EntityLoadThroughDirective. At each
|
|
83
83
|
* fold step, load an associated entity identified by a field value of the current fold value.
|
|
84
84
|
* @param loadDirectives - associated entity load directives instructing each step of the fold
|
|
85
85
|
* @param queryContext - query context in which to perform the loads
|
|
86
86
|
*/
|
|
87
|
-
loadAssociatedEntityThroughAsync(loadDirectives: EntityLoadThroughDirective<TViewerContext, any, any, any, any, any, any, any>[], queryContext
|
|
87
|
+
loadAssociatedEntityThroughAsync(loadDirectives: EntityLoadThroughDirective<TViewerContext, any, any, any, any, any, any, any>[], queryContext?: EntityQueryContext): Promise<Result<ReadonlyEntity<any, any, any, any>> | null>;
|
|
88
88
|
}
|
|
89
89
|
/**
|
|
90
90
|
* Instruction for each step of a load-associated-through method.
|
|
@@ -7,6 +7,7 @@ const results_1 = require("@expo/results");
|
|
|
7
7
|
* by foreign keys.
|
|
8
8
|
*/
|
|
9
9
|
class EntityAssociationLoader {
|
|
10
|
+
entity;
|
|
10
11
|
constructor(entity) {
|
|
11
12
|
this.entity = entity;
|
|
12
13
|
}
|
|
@@ -17,7 +18,11 @@ class EntityAssociationLoader {
|
|
|
17
18
|
* @param associatedEntityClass - class of the associated entity
|
|
18
19
|
* @param queryContext - query context in which to perform the load
|
|
19
20
|
*/
|
|
20
|
-
async loadAssociatedEntityAsync(fieldIdentifyingAssociatedEntity, associatedEntityClass, queryContext
|
|
21
|
+
async loadAssociatedEntityAsync(fieldIdentifyingAssociatedEntity, associatedEntityClass, queryContext = this.entity
|
|
22
|
+
.getViewerContext()
|
|
23
|
+
.getViewerScopedEntityCompanionForClass(associatedEntityClass)
|
|
24
|
+
.getQueryContextProvider()
|
|
25
|
+
.getQueryContext()) {
|
|
21
26
|
const associatedEntityID = this.entity.getField(fieldIdentifyingAssociatedEntity);
|
|
22
27
|
if (!associatedEntityID) {
|
|
23
28
|
return (0, results_1.result)(null);
|
|
@@ -26,8 +31,10 @@ class EntityAssociationLoader {
|
|
|
26
31
|
.getViewerContext()
|
|
27
32
|
.getViewerScopedEntityCompanionForClass(associatedEntityClass)
|
|
28
33
|
.getLoaderFactory()
|
|
29
|
-
.forLoad(queryContext, { cascadingDeleteCause: null });
|
|
30
|
-
return (await loader
|
|
34
|
+
.forLoad(queryContext, { previousValue: null, cascadingDeleteCause: null });
|
|
35
|
+
return (await loader
|
|
36
|
+
.withAuthorizationResults()
|
|
37
|
+
.loadByIDAsync(associatedEntityID));
|
|
31
38
|
}
|
|
32
39
|
/**
|
|
33
40
|
* Load many entities associated with this entity, often referred to as entites belonging
|
|
@@ -38,14 +45,20 @@ class EntityAssociationLoader {
|
|
|
38
45
|
* @param associatedEntityFieldContainingThisID - field of associated entity which contains the ID of this entity
|
|
39
46
|
* @param queryContext - query context in which to perform the load
|
|
40
47
|
*/
|
|
41
|
-
async loadManyAssociatedEntitiesAsync(associatedEntityClass, associatedEntityFieldContainingThisID, queryContext
|
|
48
|
+
async loadManyAssociatedEntitiesAsync(associatedEntityClass, associatedEntityFieldContainingThisID, queryContext = this.entity
|
|
49
|
+
.getViewerContext()
|
|
50
|
+
.getViewerScopedEntityCompanionForClass(associatedEntityClass)
|
|
51
|
+
.getQueryContextProvider()
|
|
52
|
+
.getQueryContext()) {
|
|
42
53
|
const thisID = this.entity.getID();
|
|
43
54
|
const loader = this.entity
|
|
44
55
|
.getViewerContext()
|
|
45
56
|
.getViewerScopedEntityCompanionForClass(associatedEntityClass)
|
|
46
57
|
.getLoaderFactory()
|
|
47
|
-
.forLoad(queryContext, { cascadingDeleteCause: null });
|
|
48
|
-
return await loader
|
|
58
|
+
.forLoad(queryContext, { previousValue: null, cascadingDeleteCause: null });
|
|
59
|
+
return await loader
|
|
60
|
+
.withAuthorizationResults()
|
|
61
|
+
.loadManyByFieldEqualingAsync(associatedEntityFieldContainingThisID, thisID);
|
|
49
62
|
}
|
|
50
63
|
/**
|
|
51
64
|
* Load an associated entity identified by a field value of this entity. In a relational database,
|
|
@@ -55,7 +68,11 @@ class EntityAssociationLoader {
|
|
|
55
68
|
* @param associatedEntityLookupByField - field of associated entity with which to look up the associated entity
|
|
56
69
|
* @param queryContext - query context in which to perform the load
|
|
57
70
|
*/
|
|
58
|
-
async loadAssociatedEntityByFieldEqualingAsync(fieldIdentifyingAssociatedEntity, associatedEntityClass, associatedEntityLookupByField, queryContext
|
|
71
|
+
async loadAssociatedEntityByFieldEqualingAsync(fieldIdentifyingAssociatedEntity, associatedEntityClass, associatedEntityLookupByField, queryContext = this.entity
|
|
72
|
+
.getViewerContext()
|
|
73
|
+
.getViewerScopedEntityCompanionForClass(associatedEntityClass)
|
|
74
|
+
.getQueryContextProvider()
|
|
75
|
+
.getQueryContext()) {
|
|
59
76
|
const associatedFieldValue = this.entity.getField(fieldIdentifyingAssociatedEntity);
|
|
60
77
|
if (!associatedFieldValue) {
|
|
61
78
|
return null;
|
|
@@ -64,8 +81,10 @@ class EntityAssociationLoader {
|
|
|
64
81
|
.getViewerContext()
|
|
65
82
|
.getViewerScopedEntityCompanionForClass(associatedEntityClass)
|
|
66
83
|
.getLoaderFactory()
|
|
67
|
-
.forLoad(queryContext, { cascadingDeleteCause: null });
|
|
68
|
-
return await loader
|
|
84
|
+
.forLoad(queryContext, { previousValue: null, cascadingDeleteCause: null });
|
|
85
|
+
return await loader
|
|
86
|
+
.withAuthorizationResults()
|
|
87
|
+
.loadByFieldEqualingAsync(associatedEntityLookupByField, associatedFieldValue);
|
|
69
88
|
}
|
|
70
89
|
/**
|
|
71
90
|
* Load many associated entities identified by a field value of this entity. In a relational database,
|
|
@@ -75,7 +94,11 @@ class EntityAssociationLoader {
|
|
|
75
94
|
* @param associatedEntityLookupByField - field of associated entities with which to look up the associated entities
|
|
76
95
|
* @param queryContext - query context in which to perform the load
|
|
77
96
|
*/
|
|
78
|
-
async loadManyAssociatedEntitiesByFieldEqualingAsync(fieldIdentifyingAssociatedEntity, associatedEntityClass, associatedEntityLookupByField, queryContext
|
|
97
|
+
async loadManyAssociatedEntitiesByFieldEqualingAsync(fieldIdentifyingAssociatedEntity, associatedEntityClass, associatedEntityLookupByField, queryContext = this.entity
|
|
98
|
+
.getViewerContext()
|
|
99
|
+
.getViewerScopedEntityCompanionForClass(associatedEntityClass)
|
|
100
|
+
.getQueryContextProvider()
|
|
101
|
+
.getQueryContext()) {
|
|
79
102
|
const associatedFieldValue = this.entity.getField(fieldIdentifyingAssociatedEntity);
|
|
80
103
|
if (!associatedFieldValue) {
|
|
81
104
|
return [];
|
|
@@ -84,8 +107,10 @@ class EntityAssociationLoader {
|
|
|
84
107
|
.getViewerContext()
|
|
85
108
|
.getViewerScopedEntityCompanionForClass(associatedEntityClass)
|
|
86
109
|
.getLoaderFactory()
|
|
87
|
-
.forLoad(queryContext, { cascadingDeleteCause: null });
|
|
88
|
-
return await loader
|
|
110
|
+
.forLoad(queryContext, { previousValue: null, cascadingDeleteCause: null });
|
|
111
|
+
return await loader
|
|
112
|
+
.withAuthorizationResults()
|
|
113
|
+
.loadManyByFieldEqualingAsync(associatedEntityLookupByField, associatedFieldValue);
|
|
89
114
|
}
|
|
90
115
|
async loadAssociatedEntityThroughAsync(loadDirectives, queryContext) {
|
|
91
116
|
let currentEntity = this.entity;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityAssociationLoader.js","sourceRoot":"","sources":["../src/EntityAssociationLoader.ts"],"names":[],"mappings":";;AAAA,2CAA+C;AAQ/C;;;;GAIG;AACH,MAAqB,uBAAuB;
|
|
1
|
+
{"version":3,"file":"EntityAssociationLoader.js","sourceRoot":"","sources":["../src/EntityAssociationLoader.ts"],"names":[],"mappings":";;AAAA,2CAA+C;AAQ/C;;;;GAIG;AACH,MAAqB,uBAAuB;IAOb;IAA7B,YAA6B,MAAe;QAAf,WAAM,GAAN,MAAM,CAAS;IAAG,CAAC;IAEhD;;;;;;OAMG;IACH,KAAK,CAAC,yBAAyB,CAmB7B,gCAAmD,EACnD,qBAOC,EACD,eAAmC,IAAI,CAAC,MAAM;SAC3C,gBAAgB,EAAE;SAClB,sCAAsC,CAAC,qBAAqB,CAAC;SAC7D,uBAAuB,EAAE;SACzB,eAAe,EAAE;QAIpB,MAAM,kBAAkB,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAAC;QAClF,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,OAAO,IAAA,gBAAM,EAAC,IAAI,CAEjB,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;aACvB,gBAAgB,EAAE;aAClB,sCAAsC,CAAC,qBAAqB,CAAC;aAC7D,gBAAgB,EAAE;aAClB,OAAO,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;QAE9E,OAAO,CAAC,MAAM,MAAM;aACjB,wBAAwB,EAAE;aAC1B,aAAa,CAAC,kBAA8C,CAAC,CAE/D,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,+BAA+B,CAkBnC,qBAOC,EACD,qCAA+F,EAC/F,eAAmC,IAAI,CAAC,MAAM;SAC3C,gBAAgB,EAAE;SAClB,sCAAsC,CAAC,qBAAqB,CAAC;SAC7D,uBAAuB,EAAE;SACzB,eAAe,EAAE;QAEpB,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;aACvB,gBAAgB,EAAE;aAClB,sCAAsC,CAAC,qBAAqB,CAAC;aAC7D,gBAAgB,EAAE;aAClB,OAAO,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9E,OAAO,MAAM,MAAM;aAChB,wBAAwB,EAAE;aAC1B,4BAA4B,CAAC,qCAAqC,EAAE,MAAa,CAAC,CAAC;IACxF,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,wCAAwC,CAkB5C,gCAAsE,EACtE,qBAOC,EACD,6BAAuF,EACvF,eAAmC,IAAI,CAAC,MAAM;SAC3C,gBAAgB,EAAE;SAClB,sCAAsC,CAAC,qBAAqB,CAAC;SAC7D,uBAAuB,EAAE;SACzB,eAAe,EAAE;QAEpB,MAAM,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAAC;QACpF,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;aACvB,gBAAgB,EAAE;aAClB,sCAAsC,CAAC,qBAAqB,CAAC;aAC7D,gBAAgB,EAAE;aAClB,OAAO,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9E,OAAO,MAAM,MAAM;aAChB,wBAAwB,EAAE;aAC1B,wBAAwB,CAAC,6BAA6B,EAAE,oBAA2B,CAAC,CAAC;IAC1F,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,8CAA8C,CAkBlD,gCAAsE,EACtE,qBAOC,EACD,6BAAuF,EACvF,eAAmC,IAAI,CAAC,MAAM;SAC3C,gBAAgB,EAAE;SAClB,sCAAsC,CAAC,qBAAqB,CAAC;SAC7D,uBAAuB,EAAE;SACzB,eAAe,EAAE;QAEpB,MAAM,oBAAoB,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,gCAAgC,CAAC,CAAC;QACpF,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM;aACvB,gBAAgB,EAAE;aAClB,sCAAsC,CAAC,qBAAqB,CAAC;aAC7D,gBAAgB,EAAE;aAClB,OAAO,CAAC,YAAY,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9E,OAAO,MAAM,MAAM;aAChB,wBAAwB,EAAE;aAC1B,4BAA4B,CAAC,6BAA6B,EAAE,oBAA2B,CAAC,CAAC;IAC9F,CAAC;IAkLD,KAAK,CAAC,gCAAgC,CACpC,cAA+F,EAC/F,YAAiC;QAEjC,IAAI,aAAa,GAAuC,IAAI,CAAC,MAAM,CAAC;QACpE,KAAK,MAAM,aAAa,IAAI,cAAc,EAAE,CAAC;YAC3C,MAAM,EACJ,qBAAqB,EACrB,gCAAgC,EAChC,6BAA6B,GAC9B,GAAG,aAAa,CAAC;YAClB,IAAI,sBAAyE,CAAC;YAC9E,IAAI,6BAA6B,EAAE,CAAC;gBAClC,sBAAsB,GAAG,MAAM,aAAa;qBACzC,iBAAiB,EAAE;qBACnB,wCAAwC,CACvC,gCAAgC,EAChC,qBAAqB,EACrB,6BAA6B,EAC7B,YAAY,CACb,CAAC;YACN,CAAC;iBAAM,CAAC;gBACN,MAAM,2BAA2B,GAAG,MAAM,aAAa;qBACpD,iBAAiB,EAAE;qBACnB,yBAAyB,CACxB,gCAAgC,EAChC,qBAAqB,EACrB,YAAY,CACb,CAAC;gBAEJ,IAAI,2BAA2B,CAAC,EAAE,IAAI,2BAA2B,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;oBACjF,sBAAsB,GAAG,IAAI,CAAC;gBAChC,CAAC;qBAAM,CAAC;oBACN,sBAAsB,GAAG,2BAA2B,CAAC;gBACvD,CAAC;YACH,CAAC;YAED,IAAI,CAAC,sBAAsB,EAAE,CAAC;gBAC5B,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,CAAC,sBAAsB,CAAC,EAAE,EAAE,CAAC;gBAC/B,OAAO,IAAA,gBAAM,EAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;YAC/C,CAAC;YACD,aAAa,GAAG,sBAAsB,CAAC,KAAK,CAAC;QAC/C,CAAC;QACD,OAAO,IAAA,gBAAM,EAAC,aAAa,CAAC,CAAC;IAC/B,CAAC;CACF;AA9cD,0CA8cC"}
|
package/build/EntityCompanion.js
CHANGED
|
@@ -5,10 +5,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const EntityLoaderFactory_1 = __importDefault(require("./EntityLoaderFactory"));
|
|
7
7
|
const EntityMutatorFactory_1 = __importDefault(require("./EntityMutatorFactory"));
|
|
8
|
+
const mergeEntityMutationTriggerConfigurations_1 = require("./utils/mergeEntityMutationTriggerConfigurations");
|
|
8
9
|
/**
|
|
9
10
|
* Composition root responsible for orchestrating setup of Entity mutators and loaders.
|
|
10
11
|
*/
|
|
11
12
|
class EntityCompanion {
|
|
13
|
+
entityCompanionProvider;
|
|
14
|
+
entityCompanionDefinition;
|
|
15
|
+
tableDataCoordinator;
|
|
16
|
+
metricsAdapter;
|
|
17
|
+
privacyPolicy;
|
|
18
|
+
entityLoaderFactory;
|
|
19
|
+
entityMutatorFactory;
|
|
12
20
|
constructor(entityCompanionProvider, entityCompanionDefinition, tableDataCoordinator, metricsAdapter) {
|
|
13
21
|
this.entityCompanionProvider = entityCompanionProvider;
|
|
14
22
|
this.entityCompanionDefinition = entityCompanionDefinition;
|
|
@@ -16,7 +24,7 @@ class EntityCompanion {
|
|
|
16
24
|
this.metricsAdapter = metricsAdapter;
|
|
17
25
|
this.privacyPolicy = new entityCompanionDefinition.privacyPolicyClass();
|
|
18
26
|
this.entityLoaderFactory = new EntityLoaderFactory_1.default(this, tableDataCoordinator.dataManager, metricsAdapter);
|
|
19
|
-
this.entityMutatorFactory = new EntityMutatorFactory_1.default(entityCompanionProvider, tableDataCoordinator.entityConfiguration, entityCompanionDefinition.entityClass, this.privacyPolicy, entityCompanionDefinition.mutationValidators ?? [], entityCompanionDefinition.mutationTriggers ?? {}, this.entityLoaderFactory, tableDataCoordinator.databaseAdapter, metricsAdapter);
|
|
27
|
+
this.entityMutatorFactory = new EntityMutatorFactory_1.default(entityCompanionProvider, tableDataCoordinator.entityConfiguration, entityCompanionDefinition.entityClass, this.privacyPolicy, entityCompanionDefinition.mutationValidators ?? [], (0, mergeEntityMutationTriggerConfigurations_1.mergeEntityMutationTriggerConfigurations)(entityCompanionDefinition.mutationTriggers ?? {}, entityCompanionProvider.globalMutationTriggers ?? {}), this.entityLoaderFactory, tableDataCoordinator.databaseAdapter, metricsAdapter);
|
|
20
28
|
}
|
|
21
29
|
getLoaderFactory() {
|
|
22
30
|
return this.entityLoaderFactory;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityCompanion.js","sourceRoot":"","sources":["../src/EntityCompanion.ts"],"names":[],"mappings":";;;;;AACA,gFAAwD;AACxD,kFAA0D;
|
|
1
|
+
{"version":3,"file":"EntityCompanion.js","sourceRoot":"","sources":["../src/EntityCompanion.ts"],"names":[],"mappings":";;;;;AACA,gFAAwD;AACxD,kFAA0D;AAO1D,+GAA4G;AAM5G;;GAEG;AACH,MAAqB,eAAe;IAkChB;IACA;IAQC;IACA;IA9BH,aAAa,CAAiB;IAE7B,mBAAmB,CAOlC;IACe,oBAAoB,CAOnC;IAEF,YACkB,uBAAgD,EAChD,yBAOf,EACgB,oBAAyD,EACzD,cAAqC;QAVtC,4BAAuB,GAAvB,uBAAuB,CAAyB;QAChD,8BAAyB,GAAzB,yBAAyB,CAOxC;QACgB,yBAAoB,GAApB,oBAAoB,CAAqC;QACzD,mBAAc,GAAd,cAAc,CAAuB;QAEtD,IAAI,CAAC,aAAa,GAAG,IAAI,yBAAyB,CAAC,kBAAkB,EAAE,CAAC;QACxE,IAAI,CAAC,mBAAmB,GAAG,IAAI,6BAAmB,CAOhD,IAAI,EAAE,oBAAoB,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC1D,IAAI,CAAC,oBAAoB,GAAG,IAAI,8BAAoB,CAClD,uBAAuB,EACvB,oBAAoB,CAAC,mBAAmB,EACxC,yBAAyB,CAAC,WAAW,EACrC,IAAI,CAAC,aAAa,EAClB,yBAAyB,CAAC,kBAAkB,IAAI,EAAE,EAClD,IAAA,mFAAwC,EACtC,yBAAyB,CAAC,gBAAgB,IAAI,EAAE,EAChD,uBAAuB,CAAC,sBAAsB,IAAI,EAAE,CACrD,EACD,IAAI,CAAC,mBAAmB,EACxB,oBAAoB,CAAC,eAAe,EACpC,cAAc,CACf,CAAC;IACJ,CAAC;IAED,gBAAgB;QAQd,OAAO,IAAI,CAAC,mBAAmB,CAAC;IAClC,CAAC;IAED,iBAAiB;QAQf,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;IAED;;OAEG;IACH,uBAAuB;QACrB,OAAO,IAAI,CAAC,oBAAoB,CAAC,uBAAuB,EAAE,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,IAAI,CAAC,cAAc,CAAC;IAC7B,CAAC;CACF;AA1GD,kCA0GC"}
|
|
@@ -81,6 +81,7 @@ export default class EntityCompanionProvider {
|
|
|
81
81
|
readonly metricsAdapter: IEntityMetricsAdapter;
|
|
82
82
|
private databaseAdapterFlavors;
|
|
83
83
|
private cacheAdapterFlavors;
|
|
84
|
+
readonly globalMutationTriggers: EntityMutationTriggerConfiguration<any, any, any, any, any>;
|
|
84
85
|
private readonly companionDefinitionMap;
|
|
85
86
|
private readonly companionMap;
|
|
86
87
|
private readonly tableDataCoordinatorMap;
|
|
@@ -89,8 +90,9 @@ export default class EntityCompanionProvider {
|
|
|
89
90
|
* @param metricsAdapter - An IEntityMetricsAdapter for collecting metrics on this instance
|
|
90
91
|
* @param databaseAdapterFlavors - Database adapter configurations for this instance
|
|
91
92
|
* @param cacheAdapterFlavors - Cache adapter configurations for this instance
|
|
93
|
+
* @param globalMutationTriggers - Optional set of EntityMutationTrigger to run for all entity mutations systemwide.
|
|
92
94
|
*/
|
|
93
|
-
constructor(metricsAdapter: IEntityMetricsAdapter, databaseAdapterFlavors: ReadonlyMap<DatabaseAdapterFlavor, DatabaseAdapterFlavorDefinition>, cacheAdapterFlavors: ReadonlyMap<CacheAdapterFlavor, CacheAdapterFlavorDefinition>);
|
|
95
|
+
constructor(metricsAdapter: IEntityMetricsAdapter, databaseAdapterFlavors: ReadonlyMap<DatabaseAdapterFlavor, DatabaseAdapterFlavorDefinition>, cacheAdapterFlavors: ReadonlyMap<CacheAdapterFlavor, CacheAdapterFlavorDefinition>, globalMutationTriggers?: EntityMutationTriggerConfiguration<any, any, any, any, any>);
|
|
94
96
|
/**
|
|
95
97
|
* Get the entity companion for specified entity. If not already computed and cached, the entity
|
|
96
98
|
* companion is constructed using the configuration provided by the factory.
|
|
@@ -17,19 +17,25 @@ const maps_1 = require("./utils/collections/maps");
|
|
|
17
17
|
* EntityCompanion for each type of Entity.
|
|
18
18
|
*/
|
|
19
19
|
class EntityCompanionProvider {
|
|
20
|
+
metricsAdapter;
|
|
21
|
+
databaseAdapterFlavors;
|
|
22
|
+
cacheAdapterFlavors;
|
|
23
|
+
globalMutationTriggers;
|
|
24
|
+
companionDefinitionMap = new Map();
|
|
25
|
+
companionMap = new Map();
|
|
26
|
+
tableDataCoordinatorMap = new Map();
|
|
20
27
|
/**
|
|
21
28
|
* Instantiate an Entity framework.
|
|
22
29
|
* @param metricsAdapter - An IEntityMetricsAdapter for collecting metrics on this instance
|
|
23
30
|
* @param databaseAdapterFlavors - Database adapter configurations for this instance
|
|
24
31
|
* @param cacheAdapterFlavors - Cache adapter configurations for this instance
|
|
32
|
+
* @param globalMutationTriggers - Optional set of EntityMutationTrigger to run for all entity mutations systemwide.
|
|
25
33
|
*/
|
|
26
|
-
constructor(metricsAdapter, databaseAdapterFlavors, cacheAdapterFlavors) {
|
|
34
|
+
constructor(metricsAdapter, databaseAdapterFlavors, cacheAdapterFlavors, globalMutationTriggers = {}) {
|
|
27
35
|
this.metricsAdapter = metricsAdapter;
|
|
28
36
|
this.databaseAdapterFlavors = databaseAdapterFlavors;
|
|
29
37
|
this.cacheAdapterFlavors = cacheAdapterFlavors;
|
|
30
|
-
this.
|
|
31
|
-
this.companionMap = new Map();
|
|
32
|
-
this.tableDataCoordinatorMap = new Map();
|
|
38
|
+
this.globalMutationTriggers = globalMutationTriggers;
|
|
33
39
|
}
|
|
34
40
|
/**
|
|
35
41
|
* Get the entity companion for specified entity. If not already computed and cached, the entity
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityCompanionProvider.js","sourceRoot":"","sources":["../src/EntityCompanionProvider.ts"],"names":[],"mappings":";;;;;AAAA,0DAAkC;AAGlC,wEAAyE;AAUzE,uGAA+E;AAE/E,mDAA2D;AAsG3D;;;;;;;;GAQG;AACH,MAAqB,uBAAuB;
|
|
1
|
+
{"version":3,"file":"EntityCompanionProvider.js","sourceRoot":"","sources":["../src/EntityCompanionProvider.ts"],"names":[],"mappings":";;;;;AAAA,0DAAkC;AAGlC,wEAAyE;AAUzE,uGAA+E;AAE/E,mDAA2D;AAsG3D;;;;;;;;GAQG;AACH,MAAqB,uBAAuB;IAkBxB;IACR;IAIA;IACC;IAvBM,sBAAsB,GAGnC,IAAI,GAAG,EAAE,CAAC;IACG,YAAY,GAC3B,IAAI,GAAG,EAAE,CAAC;IACK,uBAAuB,GACtC,IAAI,GAAG,EAAE,CAAC;IAEZ;;;;;;OAMG;IACH,YACkB,cAAqC,EAC7C,sBAGP,EACO,mBAAkF,EACjF,yBAML,EAAE;QAZU,mBAAc,GAAd,cAAc,CAAuB;QAC7C,2BAAsB,GAAtB,sBAAsB,CAG7B;QACO,wBAAmB,GAAnB,mBAAmB,CAA+D;QACjF,2BAAsB,GAAtB,sBAAsB,CAMzB;IACL,CAAC;IAEJ;;;;;OAKG;IACH,qBAAqB,CAcnB,WAOC;QAED,MAAM,yBAAyB,GAAG,IAAA,sBAAe,EAC/C,IAAI,CAAC,sBAAsB,EAC3B,WAAW,CAAC,IAAI,EAChB,GAAG,EAAE,CAAC,WAAW,CAAC,yBAAyB,EAAE,CAC9C,CAAC;QACF,MAAM,oBAAoB,GAAG,IAAI,CAAC,gCAAgC,CAChE,yBAAyB,CAAC,mBAAmB,EAC7C,WAAW,CAAC,IAAI,CACjB,CAAC;QACF,OAAO,IAAA,sBAAe,EAAC,IAAI,CAAC,YAAY,EAAE,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE;YAC/D,OAAO,IAAI,yBAAe,CACxB,IAAI,EACJ,yBAAyB,EACzB,oBAAoB,EACpB,IAAI,CAAC,cAAc,CACpB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,+CAA+C,CAC7C,qBAA4C;QAE5C,MAAM,2BAA2B,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAC3F,IAAA,mBAAS,EACP,2BAA2B,EAC3B,uDAAuD,qBAAqB,EAAE,CAC/E,CAAC;QAEF,OAAO,2BAA2B,CAAC,oBAAoB,CAAC;IAC1D,CAAC;IAEO,gCAAgC,CACtC,mBAAiD,EACjD,eAAuB;QAEvB,OAAO,IAAA,sBAAe,EAAC,IAAI,CAAC,uBAAuB,EAAE,mBAAmB,CAAC,SAAS,EAAE,GAAG,EAAE;YACvF,MAAM,2BAA2B,GAAG,IAAI,CAAC,sBAAsB,CAAC,GAAG,CACjE,mBAAmB,CAAC,qBAAqB,CAC1C,CAAC;YACF,IAAA,mBAAS,EACP,2BAA2B,EAC3B,uDAAuD,mBAAmB,CAAC,qBAAqB,EAAE,CACnG,CAAC;YAEF,MAAM,wBAAwB,GAAG,IAAI,CAAC,mBAAmB,CAAC,GAAG,CAC3D,mBAAmB,CAAC,kBAAkB,CACvC,CAAC;YACF,IAAA,mBAAS,EACP,wBAAwB,EACxB,oDAAoD,mBAAmB,CAAC,kBAAkB,EAAE,CAC7F,CAAC;YAEF,OAAO,IAAI,oCAA0B,CACnC,mBAAmB,EACnB,2BAA2B,CAAC,eAAe,EAC3C,wBAAwB,CAAC,oBAAoB,EAC7C,2BAA2B,CAAC,oBAAoB,EAChD,IAAI,CAAC,cAAc,EACnB,eAAe,CAChB,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AA5HD,0CA4HC"}
|
|
@@ -5,7 +5,7 @@ import { EntityFieldDefinition } from './EntityFieldDefinition';
|
|
|
5
5
|
* The data storage configuration for a type of Entity. Contains information relating to IDs,
|
|
6
6
|
* cachable fields, field mappings, and types of cache and database adapter.
|
|
7
7
|
*/
|
|
8
|
-
export default class EntityConfiguration<TFields
|
|
8
|
+
export default class EntityConfiguration<TFields extends Record<string, any>> {
|
|
9
9
|
readonly idField: keyof TFields;
|
|
10
10
|
readonly tableName: string;
|
|
11
11
|
readonly cacheableKeys: ReadonlySet<keyof TFields>;
|
|
@@ -47,6 +47,7 @@ export default class EntityConfiguration<TFields> {
|
|
|
47
47
|
*/
|
|
48
48
|
cacheAdapterFlavor: CacheAdapterFlavor;
|
|
49
49
|
});
|
|
50
|
+
private static validateSchema;
|
|
50
51
|
private static computeCacheableKeys;
|
|
51
52
|
private static computeEntityToDBFieldsKeyMapping;
|
|
52
53
|
}
|
|
@@ -6,6 +6,16 @@ const maps_1 = require("./utils/collections/maps");
|
|
|
6
6
|
* cachable fields, field mappings, and types of cache and database adapter.
|
|
7
7
|
*/
|
|
8
8
|
class EntityConfiguration {
|
|
9
|
+
idField;
|
|
10
|
+
tableName;
|
|
11
|
+
cacheableKeys;
|
|
12
|
+
cacheKeyVersion;
|
|
13
|
+
inboundEdges;
|
|
14
|
+
schema;
|
|
15
|
+
entityToDBFieldsKeyMapping;
|
|
16
|
+
dbToEntityFieldsKeyMapping;
|
|
17
|
+
databaseAdapterFlavor;
|
|
18
|
+
cacheAdapterFlavor;
|
|
9
19
|
constructor({ idField, tableName, schema, inboundEdges = [], cacheKeyVersion = 0, databaseAdapterFlavor, cacheAdapterFlavor, }) {
|
|
10
20
|
this.idField = idField;
|
|
11
21
|
this.tableName = tableName;
|
|
@@ -15,12 +25,20 @@ class EntityConfiguration {
|
|
|
15
25
|
this.inboundEdges = inboundEdges;
|
|
16
26
|
// external schema is a Record to typecheck that all fields have FieldDefinitions,
|
|
17
27
|
// but internally the most useful representation is a map for lookups
|
|
18
|
-
|
|
28
|
+
EntityConfiguration.validateSchema(schema);
|
|
19
29
|
this.schema = new Map(Object.entries(schema));
|
|
20
30
|
this.cacheableKeys = EntityConfiguration.computeCacheableKeys(this.schema);
|
|
21
31
|
this.entityToDBFieldsKeyMapping = EntityConfiguration.computeEntityToDBFieldsKeyMapping(this.schema);
|
|
22
32
|
this.dbToEntityFieldsKeyMapping = (0, maps_1.invertMap)(this.entityToDBFieldsKeyMapping);
|
|
23
33
|
}
|
|
34
|
+
static validateSchema(schema) {
|
|
35
|
+
const disallowedFieldsKeys = Object.getOwnPropertyNames(Object.prototype);
|
|
36
|
+
for (const disallowedFieldsKey of disallowedFieldsKeys) {
|
|
37
|
+
if (Object.hasOwn(schema, disallowedFieldsKey)) {
|
|
38
|
+
throw new Error(`Entity field name not allowed to prevent conflicts with standard Object prototype fields: ${disallowedFieldsKey}`);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
24
42
|
static computeCacheableKeys(schema) {
|
|
25
43
|
return (0, maps_1.reduceMap)(schema, (acc, v, k) => {
|
|
26
44
|
if (v.cache) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityConfiguration.js","sourceRoot":"","sources":["../src/EntityConfiguration.ts"],"names":[],"mappings":";;AAGA,mDAAwE;AAExE;;;GAGG;AACH,MAAqB,mBAAmB;
|
|
1
|
+
{"version":3,"file":"EntityConfiguration.js","sourceRoot":"","sources":["../src/EntityConfiguration.ts"],"names":[],"mappings":";;AAGA,mDAAwE;AAExE;;;GAGG;AACH,MAAqB,mBAAmB;IAC7B,OAAO,CAAgB;IACvB,SAAS,CAAS;IAClB,aAAa,CAA6B;IAC1C,eAAe,CAAS;IAExB,YAAY,CAA+C;IAC3D,MAAM,CAAyD;IAC/D,0BAA0B,CAAqC;IAC/D,0BAA0B,CAAqC;IAE/D,qBAAqB,CAAwB;IAC7C,kBAAkB,CAAqB;IAEhD,YAAY,EACV,OAAO,EACP,SAAS,EACT,MAAM,EACN,YAAY,GAAG,EAAE,EACjB,eAAe,GAAG,CAAC,EACnB,qBAAqB,EACrB,kBAAkB,GAqCnB;QACC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QACvC,IAAI,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;QACnD,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QAEjC,kFAAkF;QAClF,qEAAqE;QACrE,mBAAmB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAE9C,IAAI,CAAC,aAAa,GAAG,mBAAmB,CAAC,oBAAoB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3E,IAAI,CAAC,0BAA0B,GAAG,mBAAmB,CAAC,iCAAiC,CACrF,IAAI,CAAC,MAAM,CACZ,CAAC;QACF,IAAI,CAAC,0BAA0B,GAAG,IAAA,gBAAS,EAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;IAC/E,CAAC;IAEO,MAAM,CAAC,cAAc,CAAsC,MAAe;QAChF,MAAM,oBAAoB,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1E,KAAK,MAAM,mBAAmB,IAAI,oBAAoB,EAAE,CAAC;YACvD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,EAAE,CAAC;gBAC/C,MAAM,IAAI,KAAK,CACb,6FAA6F,mBAAmB,EAAE,CACnH,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,oBAAoB,CACjC,MAA8D;QAE9D,OAAO,IAAA,gBAAS,EACd,MAAM,EACN,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;YACZ,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;gBACZ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACb,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,EACD,IAAI,GAAG,EAAiB,CACzB,CAAC;IACJ,CAAC;IAEO,MAAM,CAAC,iCAAiC,CAC9C,MAA8D;QAE9D,OAAO,IAAA,aAAM,EAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAC7C,CAAC;CACF;AA7GD,sCA6GC"}
|
|
@@ -76,7 +76,7 @@ export interface TableQuerySelectionModifiersWithOrderByRaw extends TableQuerySe
|
|
|
76
76
|
* handles all entity field transformation. Subclasses are responsible for
|
|
77
77
|
* implementing database-specific logic for a type of database.
|
|
78
78
|
*/
|
|
79
|
-
export default abstract class EntityDatabaseAdapter<TFields
|
|
79
|
+
export default abstract class EntityDatabaseAdapter<TFields extends Record<string, any>> {
|
|
80
80
|
private readonly entityConfiguration;
|
|
81
81
|
private readonly fieldTransformerMap;
|
|
82
82
|
constructor(entityConfiguration: EntityConfiguration<TFields>);
|
|
@@ -94,7 +94,7 @@ export default abstract class EntityDatabaseAdapter<TFields> {
|
|
|
94
94
|
* @param fieldValues - fieldName field values being queried
|
|
95
95
|
* @returns map from fieldValue to objects that match the query for that fieldValue
|
|
96
96
|
*/
|
|
97
|
-
fetchManyWhereAsync<K extends keyof TFields>(queryContext: EntityQueryContext,
|
|
97
|
+
fetchManyWhereAsync<K extends keyof TFields>(queryContext: EntityQueryContext, fieldName: K, fieldValues: readonly NonNullable<TFields[K]>[]): Promise<ReadonlyMap<NonNullable<TFields[K]>, readonly Readonly<TFields>[]>>;
|
|
98
98
|
protected abstract fetchManyWhereInternalAsync(queryInterface: any, tableName: string, tableField: string, tableValues: readonly any[]): Promise<object[]>;
|
|
99
99
|
/**
|
|
100
100
|
* Fetch many objects matching the conjunction of where clauses constructed from
|
|
@@ -18,6 +18,8 @@ var OrderByOrdering;
|
|
|
18
18
|
* implementing database-specific logic for a type of database.
|
|
19
19
|
*/
|
|
20
20
|
class EntityDatabaseAdapter {
|
|
21
|
+
entityConfiguration;
|
|
22
|
+
fieldTransformerMap;
|
|
21
23
|
constructor(entityConfiguration) {
|
|
22
24
|
this.entityConfiguration = entityConfiguration;
|
|
23
25
|
this.fieldTransformerMap = this.getFieldTransformerMap();
|
|
@@ -30,8 +32,8 @@ class EntityDatabaseAdapter {
|
|
|
30
32
|
* @param fieldValues - fieldName field values being queried
|
|
31
33
|
* @returns map from fieldValue to objects that match the query for that fieldValue
|
|
32
34
|
*/
|
|
33
|
-
async fetchManyWhereAsync(queryContext,
|
|
34
|
-
const fieldColumn = (0, EntityFieldTransformationUtils_1.getDatabaseFieldForEntityField)(this.entityConfiguration,
|
|
35
|
+
async fetchManyWhereAsync(queryContext, fieldName, fieldValues) {
|
|
36
|
+
const fieldColumn = (0, EntityFieldTransformationUtils_1.getDatabaseFieldForEntityField)(this.entityConfiguration, fieldName);
|
|
35
37
|
const results = await this.fetchManyWhereInternalAsync(queryContext.getQueryInterface(), this.entityConfiguration.tableName, fieldColumn, fieldValues);
|
|
36
38
|
const objects = results.map((result) => (0, EntityFieldTransformationUtils_1.transformDatabaseObjectToFields)(this.entityConfiguration, this.fieldTransformerMap, result));
|
|
37
39
|
const objectMap = new Map();
|
|
@@ -39,7 +41,7 @@ class EntityDatabaseAdapter {
|
|
|
39
41
|
objectMap.set(fieldValue, []);
|
|
40
42
|
}
|
|
41
43
|
objects.forEach((object) => {
|
|
42
|
-
const objectFieldValue = object[
|
|
44
|
+
const objectFieldValue = object[fieldName];
|
|
43
45
|
objectMap.get(objectFieldValue).push(object);
|
|
44
46
|
});
|
|
45
47
|
return objectMap;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityDatabaseAdapter.js","sourceRoot":"","sources":["../src/EntityDatabaseAdapter.ts"],"names":[],"mappings":";;;AAEA,8FAKmD;AAgCnD,SAAgB,mCAAmC,CAIjD,SAA6C;IAE7C,OAAQ,SAA2D,CAAC,UAAU,KAAK,SAAS,CAAC;AAC/F,CAAC;AAPD,kFAOC;AAYD,IAAY,eAGX;AAHD,WAAY,eAAe;IACzB,oCAAiB,CAAA;IACjB,sCAAmB,CAAA;AACrB,CAAC,EAHW,eAAe,+BAAf,eAAe,QAG1B;AAgDD;;;;;GAKG;AACH,MAA8B,qBAAqB;
|
|
1
|
+
{"version":3,"file":"EntityDatabaseAdapter.js","sourceRoot":"","sources":["../src/EntityDatabaseAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -62,6 +62,25 @@ export interface EntityAssociationDefinition<TViewerContext extends ViewerContex
|
|
|
62
62
|
*/
|
|
63
63
|
edgeDeletionBehavior: EntityEdgeDeletionBehavior;
|
|
64
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Options for EntityFieldDefinition
|
|
67
|
+
*/
|
|
68
|
+
export interface EntityFieldDefinitionOptions {
|
|
69
|
+
/**
|
|
70
|
+
* Column name in the database.
|
|
71
|
+
*/
|
|
72
|
+
columnName: string;
|
|
73
|
+
/**
|
|
74
|
+
* Whether or not to cache loaded instances of the entity by this field. The column name is
|
|
75
|
+
* used to derive a cache key for the cache entry. If true, this column must be able uniquely
|
|
76
|
+
* identify the entity.
|
|
77
|
+
*/
|
|
78
|
+
cache?: boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Defines the association behavior for an entity that this column references.
|
|
81
|
+
*/
|
|
82
|
+
association?: EntityAssociationDefinition<any, any, any, any, any, any>;
|
|
83
|
+
}
|
|
65
84
|
/**
|
|
66
85
|
* Definition for a field referencing a column in the underlying database. Specifies things like
|
|
67
86
|
* cache behavior and associations, and handles input validation.
|
|
@@ -72,17 +91,9 @@ export declare abstract class EntityFieldDefinition<T> {
|
|
|
72
91
|
readonly association: EntityAssociationDefinition<any, any, any, any, any, any> | undefined;
|
|
73
92
|
/**
|
|
74
93
|
*
|
|
75
|
-
* @param
|
|
76
|
-
* @param cache - Whether or not to cache loaded instances of the entity by this field. The column name is
|
|
77
|
-
* used to derive a cache key for the cache entry. If true, this column must be able uniquely
|
|
78
|
-
* identify the entity.
|
|
79
|
-
* @param association - Defines the association behavior for an entity that this column references.
|
|
94
|
+
* @param options - options for this field definition
|
|
80
95
|
*/
|
|
81
|
-
constructor(
|
|
82
|
-
columnName: string;
|
|
83
|
-
cache?: boolean;
|
|
84
|
-
association?: EntityAssociationDefinition<any, any, any, any, any, any>;
|
|
85
|
-
});
|
|
96
|
+
constructor(options: EntityFieldDefinitionOptions);
|
|
86
97
|
/**
|
|
87
98
|
* Validates input value for a field of this type. Null and undefined are considered valid by default. This is used for things like:
|
|
88
99
|
* - EntityLoader.loadByFieldValue - to ensure the value being loaded by is a valid value
|
|
@@ -36,18 +36,17 @@ var EntityEdgeDeletionBehavior;
|
|
|
36
36
|
* cache behavior and associations, and handles input validation.
|
|
37
37
|
*/
|
|
38
38
|
class EntityFieldDefinition {
|
|
39
|
+
columnName;
|
|
40
|
+
cache;
|
|
41
|
+
association;
|
|
39
42
|
/**
|
|
40
43
|
*
|
|
41
|
-
* @param
|
|
42
|
-
* @param cache - Whether or not to cache loaded instances of the entity by this field. The column name is
|
|
43
|
-
* used to derive a cache key for the cache entry. If true, this column must be able uniquely
|
|
44
|
-
* identify the entity.
|
|
45
|
-
* @param association - Defines the association behavior for an entity that this column references.
|
|
44
|
+
* @param options - options for this field definition
|
|
46
45
|
*/
|
|
47
|
-
constructor(
|
|
48
|
-
this.columnName = columnName;
|
|
49
|
-
this.cache = cache;
|
|
50
|
-
this.association = association;
|
|
46
|
+
constructor(options) {
|
|
47
|
+
this.columnName = options.columnName;
|
|
48
|
+
this.cache = options.cache ?? false;
|
|
49
|
+
this.association = options.association;
|
|
51
50
|
}
|
|
52
51
|
/**
|
|
53
52
|
* Validates input value for a field of this type. Null and undefined are considered valid by default. This is used for things like:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityFieldDefinition.js","sourceRoot":"","sources":["../src/EntityFieldDefinition.ts"],"names":[],"mappings":";;;AAKA,IAAY,0BA+BX;AA/BD,WAAY,0BAA0B;IACpC;;;;;;OAMG;IACH,2IAAoC,CAAA;IAEpC;;;;;OAKG;IACH,+HAA8B,CAAA;IAE9B;;;;OAIG;IACH,+FAAc,CAAA;IAEd;;;;OAIG;IACH,mFAAQ,CAAA;AACV,CAAC,EA/BW,0BAA0B,0CAA1B,0BAA0B,QA+BrC;
|
|
1
|
+
{"version":3,"file":"EntityFieldDefinition.js","sourceRoot":"","sources":["../src/EntityFieldDefinition.ts"],"names":[],"mappings":";;;AAKA,IAAY,0BA+BX;AA/BD,WAAY,0BAA0B;IACpC;;;;;;OAMG;IACH,2IAAoC,CAAA;IAEpC;;;;;OAKG;IACH,+HAA8B,CAAA;IAE9B;;;;OAIG;IACH,+FAAc,CAAA;IAEd;;;;OAIG;IACH,mFAAQ,CAAA;AACV,CAAC,EA/BW,0BAA0B,0CAA1B,0BAA0B,QA+BrC;AAmFD;;;GAGG;AACH,MAAsB,qBAAqB;IAChC,UAAU,CAAS;IACnB,KAAK,CAAU;IACf,WAAW,CAAwE;IAC5F;;;OAGG;IACH,YAAY,OAAqC;QAC/C,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;QACrC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,CAAC;QACpC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACI,kBAAkB,CAAC,KAA2B;QACnD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;CAEF;AA3BD,sDA2BC"}
|
package/build/EntityFields.d.ts
CHANGED
|
@@ -57,3 +57,13 @@ export declare class JSONObjectField extends EntityFieldDefinition<object> {
|
|
|
57
57
|
export declare class EnumField extends EntityFieldDefinition<string | number> {
|
|
58
58
|
protected validateInputValueInternal(value: string | number): boolean;
|
|
59
59
|
}
|
|
60
|
+
/**
|
|
61
|
+
* EntityFieldDefinition for a enum column with a strict typescript enum type.
|
|
62
|
+
*/
|
|
63
|
+
export declare class StrictEnumField<T extends object> extends EnumField {
|
|
64
|
+
private readonly enum;
|
|
65
|
+
constructor(options: ConstructorParameters<typeof EnumField>[0] & {
|
|
66
|
+
enum: T;
|
|
67
|
+
});
|
|
68
|
+
protected validateInputValueInternal(value: string | number): boolean;
|
|
69
|
+
}
|
package/build/EntityFields.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EnumField = exports.JSONObjectField = exports.StringArrayField = exports.FloatField = exports.IntField = exports.BooleanField = exports.DateField = exports.UUIDField = exports.StringField = void 0;
|
|
3
|
+
exports.StrictEnumField = exports.EnumField = exports.JSONObjectField = exports.StringArrayField = exports.FloatField = exports.IntField = exports.BooleanField = exports.DateField = exports.UUIDField = exports.StringField = void 0;
|
|
4
4
|
const EntityFieldDefinition_1 = require("./EntityFieldDefinition");
|
|
5
5
|
// Use our own regex since the `uuid` package doesn't support validating UUIDv6/7/8 yet
|
|
6
6
|
const UUID_REGEX = /^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/i;
|
|
@@ -89,4 +89,18 @@ class EnumField extends EntityFieldDefinition_1.EntityFieldDefinition {
|
|
|
89
89
|
}
|
|
90
90
|
}
|
|
91
91
|
exports.EnumField = EnumField;
|
|
92
|
+
/**
|
|
93
|
+
* EntityFieldDefinition for a enum column with a strict typescript enum type.
|
|
94
|
+
*/
|
|
95
|
+
class StrictEnumField extends EnumField {
|
|
96
|
+
enum;
|
|
97
|
+
constructor(options) {
|
|
98
|
+
super(options);
|
|
99
|
+
this.enum = options.enum;
|
|
100
|
+
}
|
|
101
|
+
validateInputValueInternal(value) {
|
|
102
|
+
return super.validateInputValueInternal(value) && Object.values(this.enum).includes(value);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
exports.StrictEnumField = StrictEnumField;
|
|
92
106
|
//# sourceMappingURL=EntityFields.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityFields.js","sourceRoot":"","sources":["../src/EntityFields.ts"],"names":[],"mappings":";;;AAAA,mEAAgE;AAEhE,uFAAuF;AACvF,MAAM,UAAU,GACd,0JAA0J,CAAC;AAE7J;;GAEG;AACH,MAAa,WAAY,SAAQ,6CAA6B;IAClD,0BAA0B,CAAC,KAAa;QAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;IACnC,CAAC;CACF;AAJD,kCAIC;AAED;;;GAGG;AACH,MAAa,SAAU,SAAQ,WAAW;IACrB,0BAA0B,CAAC,KAAa;QACzD,OAAO,KAAK,CAAC,0BAA0B,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC;CACF;AAJD,8BAIC;AAED;;GAEG;AACH,MAAa,SAAU,SAAQ,6CAA2B;IAC9C,0BAA0B,CAAC,KAAW;QAC9C,OAAO,KAAK,YAAY,IAAI,CAAC;IAC/B,CAAC;CACF;AAJD,8BAIC;AAED;;GAEG;AACH,MAAa,YAAa,SAAQ,6CAA8B;IACpD,0BAA0B,CAAC,KAAc;QACjD,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC;IACpC,CAAC;CACF;AAJD,oCAIC;AAED;;;GAGG;AACH,MAAa,QAAS,SAAQ,6CAA6B;IAC/C,0BAA0B,CAAC,KAAa;QAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;CACF;AAJD,4BAIC;AAED;;;GAGG;AACH,MAAa,UAAW,SAAQ,6CAA6B;IACjD,0BAA0B,CAAC,KAAa;QAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;IACnC,CAAC;CACF;AAJD,gCAIC;AAED;;;GAGG;AACH,MAAa,gBAAiB,SAAQ,6CAA+B;IACzD,0BAA0B,CAAC,KAAe;QAClD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC;IACzF,CAAC;CACF;AAJD,4CAIC;AAED;;GAEG;AACH,MAAa,eAAgB,SAAQ,6CAA6B;IACtD,0BAA0B,CAAC,KAAa;QAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;CACF;AAJD,0CAIC;AAED;;GAEG;AACH,MAAa,SAAU,SAAQ,6CAAsC;IACzD,0BAA0B,CAAC,KAAsB;QACzD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;IAChE,CAAC;CACF;AAJD,8BAIC"}
|
|
1
|
+
{"version":3,"file":"EntityFields.js","sourceRoot":"","sources":["../src/EntityFields.ts"],"names":[],"mappings":";;;AAAA,mEAAgE;AAEhE,uFAAuF;AACvF,MAAM,UAAU,GACd,0JAA0J,CAAC;AAE7J;;GAEG;AACH,MAAa,WAAY,SAAQ,6CAA6B;IAClD,0BAA0B,CAAC,KAAa;QAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;IACnC,CAAC;CACF;AAJD,kCAIC;AAED;;;GAGG;AACH,MAAa,SAAU,SAAQ,WAAW;IACrB,0BAA0B,CAAC,KAAa;QACzD,OAAO,KAAK,CAAC,0BAA0B,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3E,CAAC;CACF;AAJD,8BAIC;AAED;;GAEG;AACH,MAAa,SAAU,SAAQ,6CAA2B;IAC9C,0BAA0B,CAAC,KAAW;QAC9C,OAAO,KAAK,YAAY,IAAI,CAAC;IAC/B,CAAC;CACF;AAJD,8BAIC;AAED;;GAEG;AACH,MAAa,YAAa,SAAQ,6CAA8B;IACpD,0BAA0B,CAAC,KAAc;QACjD,OAAO,OAAO,KAAK,KAAK,SAAS,CAAC;IACpC,CAAC;CACF;AAJD,oCAIC;AAED;;;GAGG;AACH,MAAa,QAAS,SAAQ,6CAA6B;IAC/C,0BAA0B,CAAC,KAAa;QAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9D,CAAC;CACF;AAJD,4BAIC;AAED;;;GAGG;AACH,MAAa,UAAW,SAAQ,6CAA6B;IACjD,0BAA0B,CAAC,KAAa;QAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;IACnC,CAAC;CACF;AAJD,gCAIC;AAED;;;GAGG;AACH,MAAa,gBAAiB,SAAQ,6CAA+B;IACzD,0BAA0B,CAAC,KAAe;QAClD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,OAAO,QAAQ,KAAK,QAAQ,CAAC,CAAC;IACzF,CAAC;CACF;AAJD,4CAIC;AAED;;GAEG;AACH,MAAa,eAAgB,SAAQ,6CAA6B;IACtD,0BAA0B,CAAC,KAAa;QAChD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;CACF;AAJD,0CAIC;AAED;;GAEG;AACH,MAAa,SAAU,SAAQ,6CAAsC;IACzD,0BAA0B,CAAC,KAAsB;QACzD,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;IAChE,CAAC;CACF;AAJD,8BAIC;AAED;;GAEG;AACH,MAAa,eAAkC,SAAQ,SAAS;IAC7C,IAAI,CAAI;IACzB,YAAY,OAAiE;QAC3E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAEkB,0BAA0B,CAAC,KAAsB;QAClE,OAAO,KAAK,CAAC,0BAA0B,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7F,CAAC;CACF;AAVD,0CAUC"}
|