@expo/entity 0.35.0 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. package/build/AuthorizationResultBasedEntityLoader.d.ts +128 -0
  2. package/build/AuthorizationResultBasedEntityLoader.js +196 -0
  3. package/build/AuthorizationResultBasedEntityLoader.js.map +1 -0
  4. package/build/ComposedEntityCacheAdapter.js +1 -0
  5. package/build/ComposedEntityCacheAdapter.js.map +1 -1
  6. package/build/ComposedSecondaryEntityCache.js +1 -0
  7. package/build/ComposedSecondaryEntityCache.js.map +1 -1
  8. package/build/EnforcingEntityLoader.d.ts +5 -4
  9. package/build/EnforcingEntityLoader.js +4 -2
  10. package/build/EnforcingEntityLoader.js.map +1 -1
  11. package/build/Entity.d.ts +0 -27
  12. package/build/Entity.js +0 -50
  13. package/build/Entity.js.map +1 -1
  14. package/build/EntityAssociationLoader.d.ts +1 -1
  15. package/build/EntityAssociationLoader.js +17 -8
  16. package/build/EntityAssociationLoader.js.map +1 -1
  17. package/build/EntityCompanion.js +9 -1
  18. package/build/EntityCompanion.js.map +1 -1
  19. package/build/EntityCompanionProvider.d.ts +3 -1
  20. package/build/EntityCompanionProvider.js +10 -4
  21. package/build/EntityCompanionProvider.js.map +1 -1
  22. package/build/EntityConfiguration.d.ts +2 -1
  23. package/build/EntityConfiguration.js +19 -1
  24. package/build/EntityConfiguration.js.map +1 -1
  25. package/build/EntityDatabaseAdapter.d.ts +2 -2
  26. package/build/EntityDatabaseAdapter.js +5 -3
  27. package/build/EntityDatabaseAdapter.js.map +1 -1
  28. package/build/EntityFieldDefinition.d.ts +21 -10
  29. package/build/EntityFieldDefinition.js +8 -9
  30. package/build/EntityFieldDefinition.js.map +1 -1
  31. package/build/EntityFields.d.ts +10 -0
  32. package/build/EntityFields.js +15 -1
  33. package/build/EntityFields.js.map +1 -1
  34. package/build/EntityLoader.d.ts +12 -125
  35. package/build/EntityLoader.js +24 -239
  36. package/build/EntityLoader.js.map +1 -1
  37. package/build/EntityLoaderFactory.d.ts +1 -1
  38. package/build/EntityLoaderFactory.js +3 -0
  39. package/build/EntityLoaderFactory.js.map +1 -1
  40. package/build/EntityLoaderUtils.d.ts +58 -0
  41. package/build/EntityLoaderUtils.js +109 -0
  42. package/build/EntityLoaderUtils.js.map +1 -0
  43. package/build/EntityMutator.d.ts +1 -0
  44. package/build/EntityMutator.js +71 -56
  45. package/build/EntityMutator.js.map +1 -1
  46. package/build/EntityMutatorFactory.js +9 -0
  47. package/build/EntityMutatorFactory.js.map +1 -1
  48. package/build/EntityPrivacyPolicy.d.ts +11 -5
  49. package/build/EntityPrivacyPolicy.js +5 -7
  50. package/build/EntityPrivacyPolicy.js.map +1 -1
  51. package/build/EntityQueryContext.d.ts +2 -1
  52. package/build/EntityQueryContext.js +11 -6
  53. package/build/EntityQueryContext.js.map +1 -1
  54. package/build/EntitySecondaryCacheLoader.js +5 -1
  55. package/build/EntitySecondaryCacheLoader.js.map +1 -1
  56. package/build/GenericEntityCacheAdapter.js +1 -0
  57. package/build/GenericEntityCacheAdapter.js.map +1 -1
  58. package/build/GenericSecondaryEntityCache.js +2 -0
  59. package/build/GenericSecondaryEntityCache.js.map +1 -1
  60. package/build/IEntityCacheAdapterProvider.d.ts +1 -1
  61. package/build/IEntityDatabaseAdapterProvider.d.ts +1 -1
  62. package/build/ReadonlyEntity.js +5 -1
  63. package/build/ReadonlyEntity.js.map +1 -1
  64. package/build/ViewerContext.js +2 -0
  65. package/build/ViewerContext.js.map +1 -1
  66. package/build/ViewerScopedEntityCompanion.js +2 -0
  67. package/build/ViewerScopedEntityCompanion.js.map +1 -1
  68. package/build/ViewerScopedEntityCompanionProvider.d.ts +0 -1
  69. package/build/ViewerScopedEntityCompanionProvider.js +2 -1
  70. package/build/ViewerScopedEntityCompanionProvider.js.map +1 -1
  71. package/build/ViewerScopedEntityLoaderFactory.d.ts +1 -1
  72. package/build/ViewerScopedEntityLoaderFactory.js +2 -0
  73. package/build/ViewerScopedEntityLoaderFactory.js.map +1 -1
  74. package/build/ViewerScopedEntityMutatorFactory.js +2 -0
  75. package/build/ViewerScopedEntityMutatorFactory.js.map +1 -1
  76. package/build/__tests__/ComposedCacheAdapter-test.js +2 -0
  77. package/build/__tests__/ComposedCacheAdapter-test.js.map +1 -1
  78. package/build/__tests__/ComposedSecondaryEntityCache-test.js +1 -0
  79. package/build/__tests__/ComposedSecondaryEntityCache-test.js.map +1 -1
  80. package/build/__tests__/EnforcingEntityLoader-test.js +101 -113
  81. package/build/__tests__/EnforcingEntityLoader-test.js.map +1 -1
  82. package/build/__tests__/Entity-test.js +0 -132
  83. package/build/__tests__/Entity-test.js.map +1 -1
  84. package/build/__tests__/EntityAssociationLoader-test.js +6 -2
  85. package/build/__tests__/EntityAssociationLoader-test.js.map +1 -1
  86. package/build/__tests__/EntityCommonUseCases-test.js +24 -22
  87. package/build/__tests__/EntityCommonUseCases-test.js.map +1 -1
  88. package/build/__tests__/EntityCompanion-test.js +26 -3
  89. package/build/__tests__/EntityCompanion-test.js.map +1 -1
  90. package/build/__tests__/EntityConfiguration-test.js +103 -0
  91. package/build/__tests__/EntityConfiguration-test.js.map +1 -0
  92. package/build/__tests__/EntityDatabaseAdapter-test.js +6 -0
  93. package/build/__tests__/EntityDatabaseAdapter-test.js.map +1 -1
  94. package/build/__tests__/EntityEdges-test.js +61 -20
  95. package/build/__tests__/EntityEdges-test.js.map +1 -1
  96. package/build/__tests__/EntityFields-test.js +6 -0
  97. package/build/__tests__/EntityFields-test.js.map +1 -1
  98. package/build/__tests__/EntityLoader-constructor-test.js +16 -17
  99. package/build/__tests__/EntityLoader-constructor-test.js.map +1 -1
  100. package/build/__tests__/EntityLoader-test.js +74 -22
  101. package/build/__tests__/EntityLoader-test.js.map +1 -1
  102. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js +12 -15
  103. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js.map +1 -1
  104. package/build/__tests__/EntityMutator-test.js +54 -9
  105. package/build/__tests__/EntityMutator-test.js.map +1 -1
  106. package/build/__tests__/EntityPrivacyPolicy-test.js +77 -59
  107. package/build/__tests__/EntityPrivacyPolicy-test.js.map +1 -1
  108. package/build/__tests__/EntityQueryContext-test.js +9 -0
  109. package/build/__tests__/EntityQueryContext-test.js.map +1 -1
  110. package/build/__tests__/EntitySelfReferentialEdges-test.js +42 -25
  111. package/build/__tests__/EntitySelfReferentialEdges-test.js.map +1 -1
  112. package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js.map +1 -1
  113. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +20 -18
  114. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +1 -1
  115. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +12 -15
  116. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js.map +1 -1
  117. package/build/entityUtils.d.ts +1 -1
  118. package/build/entityUtils.js.map +1 -1
  119. package/build/errors/EntityCacheAdapterError.js +2 -5
  120. package/build/errors/EntityCacheAdapterError.js.map +1 -1
  121. package/build/errors/EntityDatabaseAdapterError.js +14 -35
  122. package/build/errors/EntityDatabaseAdapterError.js.map +1 -1
  123. package/build/errors/EntityError.js +1 -0
  124. package/build/errors/EntityError.js.map +1 -1
  125. package/build/errors/EntityInvalidFieldValueError.js +2 -2
  126. package/build/errors/EntityInvalidFieldValueError.js.map +1 -1
  127. package/build/errors/EntityNotAuthorizedError.js +3 -2
  128. package/build/errors/EntityNotAuthorizedError.js.map +1 -1
  129. package/build/errors/EntityNotFoundError.js +2 -2
  130. package/build/errors/EntityNotFoundError.js.map +1 -1
  131. package/build/index.d.ts +26 -20
  132. package/build/index.js +38 -28
  133. package/build/index.js.map +1 -1
  134. package/build/internal/EntityDataManager.d.ts +1 -1
  135. package/build/internal/EntityDataManager.js +6 -1
  136. package/build/internal/EntityDataManager.js.map +1 -1
  137. package/build/internal/EntityFieldTransformationUtils.d.ts +5 -5
  138. package/build/internal/EntityFieldTransformationUtils.js +5 -8
  139. package/build/internal/EntityFieldTransformationUtils.js.map +1 -1
  140. package/build/internal/EntityTableDataCoordinator.d.ts +1 -1
  141. package/build/internal/EntityTableDataCoordinator.js +5 -0
  142. package/build/internal/EntityTableDataCoordinator.js.map +1 -1
  143. package/build/internal/ReadThroughEntityCache.d.ts +1 -1
  144. package/build/internal/ReadThroughEntityCache.js +2 -0
  145. package/build/internal/ReadThroughEntityCache.js.map +1 -1
  146. package/build/internal/__tests__/EntityFieldTransformationUtils-test.js +6 -2
  147. package/build/internal/__tests__/EntityFieldTransformationUtils-test.js.map +1 -1
  148. package/build/internal/__tests__/ReadThroughEntityCache-test.js +33 -0
  149. package/build/internal/__tests__/ReadThroughEntityCache-test.js.map +1 -1
  150. package/build/metrics/IEntityMetricsAdapter.d.ts +1 -1
  151. package/build/rules/AlwaysAllowPrivacyPolicyRule.d.ts +1 -1
  152. package/build/rules/AlwaysAllowPrivacyPolicyRule.js.map +1 -1
  153. package/build/rules/AlwaysDenyPrivacyPolicyRule.d.ts +1 -1
  154. package/build/rules/AlwaysDenyPrivacyPolicyRule.js.map +1 -1
  155. package/build/rules/AlwaysSkipPrivacyPolicyRule.d.ts +1 -1
  156. package/build/rules/AlwaysSkipPrivacyPolicyRule.js.map +1 -1
  157. package/build/rules/PrivacyPolicyRule.d.ts +1 -1
  158. package/build/rules/PrivacyPolicyRule.js.map +1 -1
  159. package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js.map +1 -1
  160. package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js.map +1 -1
  161. package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js.map +1 -1
  162. package/build/testfixtures/DateIDTestEntity.js +12 -15
  163. package/build/testfixtures/DateIDTestEntity.js.map +1 -1
  164. package/build/testfixtures/SimpleTestEntity.js +12 -15
  165. package/build/testfixtures/SimpleTestEntity.js.map +1 -1
  166. package/build/testfixtures/TestEntity.js +12 -15
  167. package/build/testfixtures/TestEntity.js.map +1 -1
  168. package/build/testfixtures/TestEntity2.js +12 -15
  169. package/build/testfixtures/TestEntity2.js.map +1 -1
  170. package/build/testfixtures/TestEntityNumberKey.js +12 -15
  171. package/build/testfixtures/TestEntityNumberKey.js.map +1 -1
  172. package/build/testfixtures/TestEntityWithMutationTriggers.d.ts +36 -0
  173. package/build/testfixtures/TestEntityWithMutationTriggers.js +82 -0
  174. package/build/testfixtures/TestEntityWithMutationTriggers.js.map +1 -0
  175. package/build/utils/EntityPrivacyUtils.d.ts +34 -0
  176. package/build/utils/EntityPrivacyUtils.js +160 -0
  177. package/build/utils/EntityPrivacyUtils.js.map +1 -0
  178. package/build/utils/__tests__/EntityPrivacyUtils-test.d.ts +1 -0
  179. package/build/utils/__tests__/EntityPrivacyUtils-test.js +395 -0
  180. package/build/utils/__tests__/EntityPrivacyUtils-test.js.map +1 -0
  181. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.d.ts +1 -0
  182. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js +26 -0
  183. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js.map +1 -0
  184. package/build/utils/collections/maps.js.map +1 -1
  185. package/build/utils/mergeEntityMutationTriggerConfigurations.d.ts +4 -0
  186. package/build/utils/mergeEntityMutationTriggerConfigurations.js +28 -0
  187. package/build/utils/mergeEntityMutationTriggerConfigurations.js.map +1 -0
  188. package/build/utils/testing/PrivacyPolicyRuleTestUtils.d.ts +1 -1
  189. package/build/utils/testing/PrivacyPolicyRuleTestUtils.js.map +1 -1
  190. package/build/utils/testing/StubCacheAdapter.d.ts +3 -3
  191. package/build/utils/testing/StubCacheAdapter.js +3 -3
  192. package/build/utils/testing/StubCacheAdapter.js.map +1 -1
  193. package/build/utils/testing/StubDatabaseAdapter.d.ts +2 -2
  194. package/build/utils/testing/StubDatabaseAdapter.js +4 -2
  195. package/build/utils/testing/StubDatabaseAdapter.js.map +1 -1
  196. package/build/utils/testing/StubDatabaseAdapterProvider.d.ts +1 -1
  197. package/build/utils/testing/StubDatabaseAdapterProvider.js +1 -3
  198. package/build/utils/testing/StubDatabaseAdapterProvider.js.map +1 -1
  199. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.d.ts +1 -0
  200. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js +42 -0
  201. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js.map +1 -0
  202. package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js +53 -0
  203. package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js.map +1 -1
  204. package/build/utils/testing/describeFieldTestCase.js.map +1 -1
  205. package/package.json +5 -4
  206. package/src/AuthorizationResultBasedEntityLoader.ts +297 -0
  207. package/src/ComposedEntityCacheAdapter.ts +6 -6
  208. package/src/ComposedSecondaryEntityCache.ts +8 -8
  209. package/src/EnforcingEntityLoader.ts +20 -19
  210. package/src/Entity.ts +11 -126
  211. package/src/EntityAssociationLoader.ts +40 -41
  212. package/src/EntityCompanion.ts +8 -4
  213. package/src/EntityCompanionProvider.ts +24 -16
  214. package/src/EntityConfiguration.ts +18 -7
  215. package/src/EntityDatabaseAdapter.ts +41 -41
  216. package/src/EntityFieldDefinition.ts +28 -18
  217. package/src/EntityFields.ts +15 -0
  218. package/src/EntityLoader.ts +63 -357
  219. package/src/EntityLoaderFactory.ts +10 -4
  220. package/src/EntityLoaderUtils.ts +149 -0
  221. package/src/EntityMutationInfo.ts +2 -2
  222. package/src/EntityMutationTriggerConfiguration.ts +5 -5
  223. package/src/EntityMutationValidator.ts +2 -2
  224. package/src/EntityMutator.ts +146 -144
  225. package/src/EntityMutatorFactory.ts +8 -8
  226. package/src/EntityPrivacyPolicy.ts +78 -28
  227. package/src/EntityQueryContext.ts +14 -13
  228. package/src/EntityQueryContextProvider.ts +5 -5
  229. package/src/EntitySecondaryCacheLoader.ts +13 -11
  230. package/src/GenericEntityCacheAdapter.ts +10 -10
  231. package/src/GenericSecondaryEntityCache.ts +6 -6
  232. package/src/IEntityCacheAdapter.ts +4 -4
  233. package/src/IEntityCacheAdapterProvider.ts +2 -2
  234. package/src/IEntityDatabaseAdapterProvider.ts +2 -2
  235. package/src/ReadonlyEntity.ts +5 -5
  236. package/src/ViewerContext.ts +5 -5
  237. package/src/ViewerScopedEntityCompanion.ts +4 -4
  238. package/src/ViewerScopedEntityCompanionProvider.ts +4 -5
  239. package/src/ViewerScopedEntityLoaderFactory.ts +10 -4
  240. package/src/ViewerScopedEntityMutatorFactory.ts +5 -5
  241. package/src/__tests__/ComposedCacheAdapter-test.ts +12 -10
  242. package/src/__tests__/ComposedSecondaryEntityCache-test.ts +8 -8
  243. package/src/__tests__/EnforcingEntityLoader-test.ts +236 -159
  244. package/src/__tests__/Entity-test.ts +0 -202
  245. package/src/__tests__/EntityAssociationLoader-test.ts +29 -25
  246. package/src/__tests__/EntityCommonUseCases-test.ts +29 -13
  247. package/src/__tests__/EntityCompanion-test.ts +57 -5
  248. package/src/__tests__/EntityConfiguration-test.ts +118 -0
  249. package/src/__tests__/EntityDatabaseAdapter-test.ts +11 -11
  250. package/src/__tests__/EntityEdges-test.ts +108 -36
  251. package/src/__tests__/EntityFields-test.ts +14 -2
  252. package/src/__tests__/EntityLoader-constructor-test.ts +20 -7
  253. package/src/__tests__/EntityLoader-test.ts +214 -86
  254. package/src/__tests__/EntityMutator-MutationCacheConsistency-test.ts +2 -2
  255. package/src/__tests__/EntityMutator-test.ts +281 -96
  256. package/src/__tests__/EntityPrivacyPolicy-test.ts +166 -53
  257. package/src/__tests__/EntityQueryContext-test.ts +30 -12
  258. package/src/__tests__/EntitySecondaryCacheLoader-test.ts +7 -7
  259. package/src/__tests__/EntitySelfReferentialEdges-test.ts +46 -26
  260. package/src/__tests__/GenericEntityCacheAdapter-test.ts +2 -2
  261. package/src/__tests__/ViewerContext-test.ts +1 -1
  262. package/src/__tests__/ViewerScopedEntityCompanion-test.ts +2 -2
  263. package/src/__tests__/ViewerScopedEntityCompanionProvider-test.ts +2 -2
  264. package/src/__tests__/ViewerScopedEntityLoaderFactory-test.ts +2 -1
  265. package/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.ts +19 -19
  266. package/src/__tests__/entityUtils-test.ts +2 -2
  267. package/src/entityUtils.ts +4 -4
  268. package/src/errors/EntityError.ts +4 -1
  269. package/src/errors/EntityInvalidFieldValueError.ts +2 -2
  270. package/src/errors/EntityNotAuthorizedError.ts +3 -3
  271. package/src/errors/EntityNotFoundError.ts +2 -2
  272. package/src/index.ts +26 -20
  273. package/src/internal/EntityDataManager.ts +24 -24
  274. package/src/internal/EntityFieldTransformationUtils.ts +39 -32
  275. package/src/internal/EntityTableDataCoordinator.ts +3 -3
  276. package/src/internal/ReadThroughEntityCache.ts +9 -9
  277. package/src/internal/__tests__/EntityDataManager-test.ts +51 -51
  278. package/src/internal/__tests__/EntityFieldTransformationUtils-test.ts +14 -10
  279. package/src/internal/__tests__/ReadThroughEntityCache-test.ts +74 -18
  280. package/src/metrics/EntityMetricsUtils.ts +4 -4
  281. package/src/metrics/IEntityMetricsAdapter.ts +1 -1
  282. package/src/rules/AlwaysAllowPrivacyPolicyRule.ts +9 -3
  283. package/src/rules/AlwaysDenyPrivacyPolicyRule.ts +9 -3
  284. package/src/rules/AlwaysSkipPrivacyPolicyRule.ts +9 -3
  285. package/src/rules/PrivacyPolicyRule.ts +9 -3
  286. package/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.ts +2 -1
  287. package/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.ts +2 -1
  288. package/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.ts +2 -1
  289. package/src/testfixtures/TestEntity.ts +1 -1
  290. package/src/testfixtures/TestEntityWithMutationTriggers.ts +156 -0
  291. package/src/utils/EntityPrivacyUtils.ts +325 -0
  292. package/src/utils/__tests__/EntityPrivacyUtils-test.ts +570 -0
  293. package/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.ts +29 -0
  294. package/src/utils/collections/__tests__/maps-test.ts +2 -2
  295. package/src/utils/collections/maps.ts +11 -11
  296. package/src/utils/mergeEntityMutationTriggerConfigurations.ts +44 -0
  297. package/src/utils/testing/PrivacyPolicyRuleTestUtils.ts +25 -22
  298. package/src/utils/testing/StubCacheAdapter.ts +17 -15
  299. package/src/utils/testing/StubDatabaseAdapter.ts +35 -30
  300. package/src/utils/testing/StubDatabaseAdapterProvider.ts +2 -2
  301. package/src/utils/testing/StubQueryContextProvider.ts +2 -2
  302. package/src/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.ts +42 -0
  303. package/src/utils/testing/__tests__/StubDatabaseAdapter-test.ts +111 -29
  304. package/src/utils/testing/createUnitTestEntityCompanionProvider.ts +2 -2
  305. package/src/utils/testing/describeFieldTestCase.ts +1 -1
  306. package/build/__tests__/EntityDataConfiguration-test.js +0 -68
  307. package/build/__tests__/EntityDataConfiguration-test.js.map +0 -1
  308. package/src/__tests__/EntityDataConfiguration-test.ts +0 -77
  309. /package/build/__tests__/{EntityDataConfiguration-test.d.ts → EntityConfiguration-test.d.ts} +0 -0
@@ -9,7 +9,7 @@ export default interface IEntityCacheAdapterProvider {
9
9
  /**
10
10
  * Vend a cache adapter for an entity configuration.
11
11
  */
12
- getCacheAdapter<TFields>(
13
- entityConfiguration: EntityConfiguration<TFields>
12
+ getCacheAdapter<TFields extends Record<string, any>>(
13
+ entityConfiguration: EntityConfiguration<TFields>,
14
14
  ): IEntityCacheAdapter<TFields>;
15
15
  }
@@ -9,7 +9,7 @@ export default interface IEntityDatabaseAdapterProvider {
9
9
  /**
10
10
  * Vend a database adapter.
11
11
  */
12
- getDatabaseAdapter<TFields>(
13
- entityConfiguration: EntityConfiguration<TFields>
12
+ getDatabaseAdapter<TFields extends Record<string, any>>(
13
+ entityConfiguration: EntityConfiguration<TFields>,
14
14
  ): EntityDatabaseAdapter<TFields>;
15
15
  }
@@ -19,7 +19,7 @@ export default abstract class ReadonlyEntity<
19
19
  TFields extends object,
20
20
  TID extends NonNullable<TFields[TSelectedFields]>,
21
21
  TViewerContext extends ViewerContext,
22
- TSelectedFields extends keyof TFields = keyof TFields
22
+ TSelectedFields extends keyof TFields = keyof TFields,
23
23
  > {
24
24
  private readonly viewerContext: TViewerContext;
25
25
  private readonly id: TID;
@@ -100,7 +100,7 @@ export default abstract class ReadonlyEntity<
100
100
  * @returns the value of the field or undefined if not loaded with that field
101
101
  */
102
102
  getField<K extends keyof Pick<TFields, TSelectedFields>>(
103
- fieldName: K
103
+ fieldName: K,
104
104
  ): Pick<TFields, TSelectedFields>[K] {
105
105
  return this.selectedFields[fieldName];
106
106
  }
@@ -137,7 +137,7 @@ export default abstract class ReadonlyEntity<
137
137
  TMEntity,
138
138
  TMSelectedFields
139
139
  >,
140
- TMSelectedFields extends keyof TMFields = keyof TMFields
140
+ TMSelectedFields extends keyof TMFields = keyof TMFields,
141
141
  >(
142
142
  this: IEntityClass<
143
143
  TMFields,
@@ -151,11 +151,11 @@ export default abstract class ReadonlyEntity<
151
151
  queryContext: EntityQueryContext = viewerContext
152
152
  .getViewerScopedEntityCompanionForClass(this)
153
153
  .getQueryContextProvider()
154
- .getQueryContext()
154
+ .getQueryContext(),
155
155
  ): EntityLoader<TMFields, TMID, TMViewerContext, TMEntity, TMPrivacyPolicy, TMSelectedFields> {
156
156
  return viewerContext
157
157
  .getViewerScopedEntityCompanionForClass(this)
158
158
  .getLoaderFactory()
159
- .forLoad(queryContext, { cascadingDeleteCause: null });
159
+ .forLoad(queryContext, { previousValue: null, cascadingDeleteCause: null });
160
160
  }
161
161
  }
@@ -22,7 +22,7 @@ export default class ViewerContext {
22
22
  constructor(public readonly entityCompanionProvider: EntityCompanionProvider) {
23
23
  this.viewerScopedEntityCompanionProvider = new ViewerScopedEntityCompanionProvider(
24
24
  entityCompanionProvider,
25
- this
25
+ this,
26
26
  );
27
27
  }
28
28
 
@@ -42,7 +42,7 @@ export default class ViewerContext {
42
42
  TMEntity,
43
43
  TMSelectedFields
44
44
  >,
45
- TMSelectedFields extends keyof TMFields
45
+ TMSelectedFields extends keyof TMFields,
46
46
  >(
47
47
  entityClass: IEntityClass<
48
48
  TMFields,
@@ -51,7 +51,7 @@ export default class ViewerContext {
51
51
  TMEntity,
52
52
  TMPrivacyPolicy,
53
53
  TMSelectedFields
54
- >
54
+ >,
55
55
  ): ViewerScopedEntityCompanion<
56
56
  TMFields,
57
57
  TMID,
@@ -68,7 +68,7 @@ export default class ViewerContext {
68
68
  * @param databaseAdaptorFlavor - database adaptor flavor
69
69
  */
70
70
  getQueryContextForDatabaseAdaptorFlavor(
71
- databaseAdaptorFlavor: DatabaseAdapterFlavor
71
+ databaseAdaptorFlavor: DatabaseAdapterFlavor,
72
72
  ): EntityQueryContext {
73
73
  return this.entityCompanionProvider
74
74
  .getQueryContextProviderForDatabaseAdaptorFlavor(databaseAdaptorFlavor)
@@ -84,7 +84,7 @@ export default class ViewerContext {
84
84
  async runInTransactionForDatabaseAdaptorFlavorAsync<TResult>(
85
85
  databaseAdaptorFlavor: DatabaseAdapterFlavor,
86
86
  transactionScope: (queryContext: EntityTransactionalQueryContext) => Promise<TResult>,
87
- transactionConfig?: TransactionConfig
87
+ transactionConfig?: TransactionConfig,
88
88
  ): Promise<TResult> {
89
89
  return await this.entityCompanionProvider
90
90
  .getQueryContextProviderForDatabaseAdaptorFlavor(databaseAdaptorFlavor)
@@ -23,7 +23,7 @@ export default class ViewerScopedEntityCompanion<
23
23
  TEntity,
24
24
  TSelectedFields
25
25
  >,
26
- TSelectedFields extends keyof TFields
26
+ TSelectedFields extends keyof TFields,
27
27
  > {
28
28
  constructor(
29
29
  public readonly entityCompanion: EntityCompanion<
@@ -34,7 +34,7 @@ export default class ViewerScopedEntityCompanion<
34
34
  TPrivacyPolicy,
35
35
  TSelectedFields
36
36
  >,
37
- private readonly viewerContext: TViewerContext
37
+ private readonly viewerContext: TViewerContext,
38
38
  ) {}
39
39
 
40
40
  /**
@@ -50,7 +50,7 @@ export default class ViewerScopedEntityCompanion<
50
50
  > {
51
51
  return new ViewerScopedEntityLoaderFactory(
52
52
  this.entityCompanion.getLoaderFactory(),
53
- this.viewerContext
53
+ this.viewerContext,
54
54
  );
55
55
  }
56
56
 
@@ -67,7 +67,7 @@ export default class ViewerScopedEntityCompanion<
67
67
  > {
68
68
  return new ViewerScopedEntityMutatorFactory(
69
69
  this.entityCompanion.getMutatorFactory(),
70
- this.viewerContext
70
+ this.viewerContext,
71
71
  );
72
72
  }
73
73
 
@@ -11,7 +11,7 @@ import ViewerScopedEntityCompanion from './ViewerScopedEntityCompanion';
11
11
  export default class ViewerScopedEntityCompanionProvider {
12
12
  constructor(
13
13
  private readonly entityCompanionProvider: EntityCompanionProvider,
14
- private readonly viewerContext: ViewerContext
14
+ private readonly viewerContext: ViewerContext,
15
15
  ) {}
16
16
 
17
17
  /**
@@ -19,7 +19,6 @@ export default class ViewerScopedEntityCompanionProvider {
19
19
  * companion is constructed using the configuration provided by the factory.
20
20
  *
21
21
  * @param entityClass - entity class to load
22
- * @param entityCompanionDefinitionFn - function defining entity companion definition
23
22
  */
24
23
  getViewerScopedCompanionForEntity<
25
24
  TFields extends object,
@@ -33,7 +32,7 @@ export default class ViewerScopedEntityCompanionProvider {
33
32
  TEntity,
34
33
  TSelectedFields
35
34
  >,
36
- TSelectedFields extends keyof TFields
35
+ TSelectedFields extends keyof TFields,
37
36
  >(
38
37
  entityClass: IEntityClass<
39
38
  TFields,
@@ -42,7 +41,7 @@ export default class ViewerScopedEntityCompanionProvider {
42
41
  TEntity,
43
42
  TPrivacyPolicy,
44
43
  TSelectedFields
45
- >
44
+ >,
46
45
  ): ViewerScopedEntityCompanion<
47
46
  TFields,
48
47
  TID,
@@ -53,7 +52,7 @@ export default class ViewerScopedEntityCompanionProvider {
53
52
  > {
54
53
  return new ViewerScopedEntityCompanion(
55
54
  this.entityCompanionProvider.getCompanionForEntity(entityClass),
56
- this.viewerContext as TViewerContext
55
+ this.viewerContext as TViewerContext,
57
56
  );
58
57
  }
59
58
  }
@@ -20,7 +20,7 @@ export default class ViewerScopedEntityLoaderFactory<
20
20
  TEntity,
21
21
  TSelectedFields
22
22
  >,
23
- TSelectedFields extends keyof TFields
23
+ TSelectedFields extends keyof TFields,
24
24
  > {
25
25
  constructor(
26
26
  private readonly entityLoaderFactory: EntityLoaderFactory<
@@ -31,17 +31,23 @@ export default class ViewerScopedEntityLoaderFactory<
31
31
  TPrivacyPolicy,
32
32
  TSelectedFields
33
33
  >,
34
- private readonly viewerContext: TViewerContext
34
+ private readonly viewerContext: TViewerContext,
35
35
  ) {}
36
36
 
37
37
  forLoad(
38
38
  queryContext: EntityQueryContext,
39
- privacyPolicyEvaluationContext: EntityPrivacyPolicyEvaluationContext
39
+ privacyPolicyEvaluationContext: EntityPrivacyPolicyEvaluationContext<
40
+ TFields,
41
+ TID,
42
+ TViewerContext,
43
+ TEntity,
44
+ TSelectedFields
45
+ >,
40
46
  ): EntityLoader<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields> {
41
47
  return this.entityLoaderFactory.forLoad(
42
48
  this.viewerContext,
43
49
  queryContext,
44
- privacyPolicyEvaluationContext
50
+ privacyPolicyEvaluationContext,
45
51
  );
46
52
  }
47
53
  }
@@ -20,7 +20,7 @@ export default class ViewerScopedEntityMutatorFactory<
20
20
  TEntity,
21
21
  TSelectedFields
22
22
  >,
23
- TSelectedFields extends keyof TFields
23
+ TSelectedFields extends keyof TFields,
24
24
  > {
25
25
  constructor(
26
26
  private readonly entityMutatorFactory: EntityMutatorFactory<
@@ -31,25 +31,25 @@ export default class ViewerScopedEntityMutatorFactory<
31
31
  TPrivacyPolicy,
32
32
  TSelectedFields
33
33
  >,
34
- private readonly viewerContext: TViewerContext
34
+ private readonly viewerContext: TViewerContext,
35
35
  ) {}
36
36
 
37
37
  forCreate(
38
- queryContext: EntityQueryContext
38
+ queryContext: EntityQueryContext,
39
39
  ): CreateMutator<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields> {
40
40
  return this.entityMutatorFactory.forCreate(this.viewerContext, queryContext);
41
41
  }
42
42
 
43
43
  forUpdate(
44
44
  existingEntity: TEntity,
45
- queryContext: EntityQueryContext
45
+ queryContext: EntityQueryContext,
46
46
  ): UpdateMutator<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields> {
47
47
  return this.entityMutatorFactory.forUpdate(existingEntity, queryContext);
48
48
  }
49
49
 
50
50
  forDelete(
51
51
  existingEntity: TEntity,
52
- queryContext: EntityQueryContext
52
+ queryContext: EntityQueryContext,
53
53
  ): DeleteMutator<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields> {
54
54
  return this.entityMutatorFactory.forDelete(existingEntity, queryContext);
55
55
  }
@@ -23,18 +23,20 @@ const entityConfiguration = new EntityConfiguration<BlahFields>({
23
23
  export const DOES_NOT_EXIST_LOCAL_MEMORY_CACHE = Symbol('doesNotExist');
24
24
  type LocalMemoryCacheValue<TFields> = Readonly<TFields> | typeof DOES_NOT_EXIST_LOCAL_MEMORY_CACHE;
25
25
 
26
- class TestLocalCacheAdapter<TFields> implements IEntityCacheAdapter<TFields> {
26
+ class TestLocalCacheAdapter<TFields extends Record<string, any>>
27
+ implements IEntityCacheAdapter<TFields>
28
+ {
27
29
  constructor(
28
30
  private readonly entityConfiguration: EntityConfiguration<TFields>,
29
- private readonly cache: Map<string, LocalMemoryCacheValue<TFields>>
31
+ private readonly cache: Map<string, LocalMemoryCacheValue<TFields>>,
30
32
  ) {}
31
33
 
32
34
  public async loadManyAsync<N extends keyof TFields>(
33
35
  fieldName: N,
34
- fieldValues: readonly NonNullable<TFields[N]>[]
36
+ fieldValues: readonly NonNullable<TFields[N]>[],
35
37
  ): Promise<ReadonlyMap<NonNullable<TFields[N]>, CacheLoadResult<TFields>>> {
36
38
  const localMemoryCacheKeyToFieldValueMapping = new Map(
37
- fieldValues.map((fieldValue) => [this.makeCacheKey(fieldName, fieldValue), fieldValue])
39
+ fieldValues.map((fieldValue) => [this.makeCacheKey(fieldName, fieldValue), fieldValue]),
38
40
  );
39
41
  const cacheResults = new Map<NonNullable<TFields[N]>, CacheLoadResult<TFields>>();
40
42
  for (const [cacheKey, fieldValue] of localMemoryCacheKeyToFieldValueMapping) {
@@ -60,7 +62,7 @@ class TestLocalCacheAdapter<TFields> implements IEntityCacheAdapter<TFields> {
60
62
 
61
63
  public async cacheManyAsync<N extends keyof TFields>(
62
64
  fieldName: N,
63
- objectMap: ReadonlyMap<NonNullable<TFields[N]>, Readonly<TFields>>
65
+ objectMap: ReadonlyMap<NonNullable<TFields[N]>, Readonly<TFields>>,
64
66
  ): Promise<void> {
65
67
  for (const [fieldValue, item] of objectMap) {
66
68
  const cacheKey = this.makeCacheKey(fieldName, fieldValue);
@@ -70,7 +72,7 @@ class TestLocalCacheAdapter<TFields> implements IEntityCacheAdapter<TFields> {
70
72
 
71
73
  public async cacheDBMissesAsync<N extends keyof TFields>(
72
74
  fieldName: N,
73
- fieldValues: readonly NonNullable<TFields[N]>[]
75
+ fieldValues: readonly NonNullable<TFields[N]>[],
74
76
  ): Promise<void> {
75
77
  for (const fieldValue of fieldValues) {
76
78
  const cacheKey = this.makeCacheKey(fieldName, fieldValue);
@@ -80,7 +82,7 @@ class TestLocalCacheAdapter<TFields> implements IEntityCacheAdapter<TFields> {
80
82
 
81
83
  public async invalidateManyAsync<N extends keyof TFields>(
82
84
  fieldName: N,
83
- fieldValues: readonly NonNullable<TFields[N]>[]
85
+ fieldValues: readonly NonNullable<TFields[N]>[],
84
86
  ): Promise<void> {
85
87
  for (const fieldValue of fieldValues) {
86
88
  const cacheKey = this.makeCacheKey(fieldName, fieldValue);
@@ -90,7 +92,7 @@ class TestLocalCacheAdapter<TFields> implements IEntityCacheAdapter<TFields> {
90
92
 
91
93
  private makeCacheKey<N extends keyof TFields>(
92
94
  fieldName: N,
93
- fieldValue: NonNullable<TFields[N]>
95
+ fieldValue: NonNullable<TFields[N]>,
94
96
  ): string {
95
97
  const columnName = this.entityConfiguration.entityToDBFieldsKeyMapping.get(fieldName);
96
98
  invariant(columnName, `database field mapping missing for ${String(fieldName)}`);
@@ -102,7 +104,7 @@ class TestLocalCacheAdapter<TFields> implements IEntityCacheAdapter<TFields> {
102
104
  ];
103
105
  const delimiter = ':';
104
106
  const escapedParts = parts.map((part) =>
105
- part.replace('\\', '\\\\').replace(delimiter, `\\${delimiter}`)
107
+ part.replace('\\', '\\\\').replace(delimiter, `\\${delimiter}`),
106
108
  );
107
109
  return escapedParts.join(delimiter);
108
110
  }
@@ -271,7 +273,7 @@ describe(ComposedEntityCacheAdapter, () => {
271
273
 
272
274
  const fallbackLocalMemoryCacheKey = fallbackCacheAdapter['makeCacheKey']('id', 'test-id-1');
273
275
  expect(fallbackCache.get(fallbackLocalMemoryCacheKey)).toBe(
274
- DOES_NOT_EXIST_LOCAL_MEMORY_CACHE
276
+ DOES_NOT_EXIST_LOCAL_MEMORY_CACHE,
275
277
  );
276
278
  });
277
279
  });
@@ -9,14 +9,14 @@ type TestLoadParams = { lp: string };
9
9
 
10
10
  class TestEntitySecondaryCache implements ISecondaryEntityCache<TestFields, TestLoadParams> {
11
11
  constructor(
12
- private readonly prefilledResults: Map<Readonly<TestLoadParams>, Readonly<TestFields>>
12
+ private readonly prefilledResults: Map<Readonly<TestLoadParams>, Readonly<TestFields>>,
13
13
  ) {}
14
14
 
15
15
  async loadManyThroughAsync(
16
16
  loadParamsArray: readonly Readonly<TestLoadParams>[],
17
17
  fetcher: (
18
- fetcherLoadParamsArray: readonly Readonly<TestLoadParams>[]
19
- ) => Promise<ReadonlyMap<Readonly<TestLoadParams>, Readonly<TestFields> | null>>
18
+ fetcherLoadParamsArray: readonly Readonly<TestLoadParams>[],
19
+ ) => Promise<ReadonlyMap<Readonly<TestLoadParams>, Readonly<TestFields> | null>>,
20
20
  ): Promise<ReadonlyMap<Readonly<TestLoadParams>, Readonly<TestFields> | null>> {
21
21
  // this does an unusual method of calling fetcher, but there's no constraint that says fetcher can only be called once
22
22
  // so this tests that
@@ -50,10 +50,10 @@ describe(ComposedSecondaryEntityCache, () => {
50
50
  const lp3 = { lp: '3' };
51
51
 
52
52
  const primarySecondaryEntityCache = new TestEntitySecondaryCache(
53
- new Map([[lp1, { id: 'primary-1' }]])
53
+ new Map([[lp1, { id: 'primary-1' }]]),
54
54
  );
55
55
  const fallbackSecondaryEntityCache = new TestEntitySecondaryCache(
56
- new Map([[lp2, { id: 'fallback-2' }]])
56
+ new Map([[lp2, { id: 'fallback-2' }]]),
57
57
  );
58
58
 
59
59
  const composedSecondaryEntityCache = new ComposedSecondaryEntityCache([
@@ -64,7 +64,7 @@ describe(ComposedSecondaryEntityCache, () => {
64
64
  const results = await composedSecondaryEntityCache.loadManyThroughAsync(
65
65
  [lp1, lp2, lp3],
66
66
  async (fetcherLoadParamsArray) =>
67
- new Map(fetcherLoadParamsArray.map((flp) => [flp, { id: `db-fetched-${flp.lp}` }]))
67
+ new Map(fetcherLoadParamsArray.map((flp) => [flp, { id: `db-fetched-${flp.lp}` }])),
68
68
  );
69
69
 
70
70
  expect(results.get(lp1)).toEqual({ id: 'primary-1' });
@@ -76,7 +76,7 @@ describe(ComposedSecondaryEntityCache, () => {
76
76
  const resultsAfterInvalidate = await composedSecondaryEntityCache.loadManyThroughAsync(
77
77
  [lp1, lp2, lp3],
78
78
  async (fetcherLoadParamsArray) =>
79
- new Map(fetcherLoadParamsArray.map((flp) => [flp, { id: `db-fetched-${flp.lp}` }]))
79
+ new Map(fetcherLoadParamsArray.map((flp) => [flp, { id: `db-fetched-${flp.lp}` }])),
80
80
  );
81
81
 
82
82
  expect(resultsAfterInvalidate.get(lp1)).toEqual({ id: 'db-fetched-1' });
@@ -93,7 +93,7 @@ describe(ComposedSecondaryEntityCache, () => {
93
93
  const results = await composedSecondaryEntityCache.loadManyThroughAsync(
94
94
  [lp1],
95
95
  async (fetcherLoadParamsArray) =>
96
- new Map(fetcherLoadParamsArray.map((flp) => [flp, { id: `db-fetched-${flp.lp}` }]))
96
+ new Map(fetcherLoadParamsArray.map((flp) => [flp, { id: `db-fetched-${flp.lp}` }])),
97
97
  );
98
98
 
99
99
  expect(results.get(lp1)).toEqual({ id: 'db-fetched-1' });