@expo/entity 0.40.0 → 0.42.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 (433) hide show
  1. package/build/AuthorizationResultBasedEntityAssociationLoader.d.ts +16 -16
  2. package/build/AuthorizationResultBasedEntityAssociationLoader.js +2 -4
  3. package/build/AuthorizationResultBasedEntityAssociationLoader.js.map +1 -1
  4. package/build/AuthorizationResultBasedEntityLoader.d.ts +39 -67
  5. package/build/AuthorizationResultBasedEntityLoader.js +85 -62
  6. package/build/AuthorizationResultBasedEntityLoader.js.map +1 -1
  7. package/build/AuthorizationResultBasedEntityMutator.d.ts +16 -16
  8. package/build/AuthorizationResultBasedEntityMutator.js.map +1 -1
  9. package/build/ComposedEntityCacheAdapter.d.ts +7 -6
  10. package/build/ComposedEntityCacheAdapter.js +28 -28
  11. package/build/ComposedEntityCacheAdapter.js.map +1 -1
  12. package/build/ComposedSecondaryEntityCache.d.ts +1 -1
  13. package/build/ComposedSecondaryEntityCache.js.map +1 -1
  14. package/build/EnforcingEntityAssociationLoader.d.ts +15 -15
  15. package/build/EnforcingEntityAssociationLoader.js.map +1 -1
  16. package/build/EnforcingEntityCreator.d.ts +2 -2
  17. package/build/EnforcingEntityDeleter.d.ts +2 -2
  18. package/build/EnforcingEntityLoader.d.ts +104 -18
  19. package/build/EnforcingEntityLoader.js +113 -12
  20. package/build/EnforcingEntityLoader.js.map +1 -1
  21. package/build/EnforcingEntityUpdater.d.ts +2 -2
  22. package/build/Entity.d.ts +32 -10
  23. package/build/Entity.js +41 -3
  24. package/build/Entity.js.map +1 -1
  25. package/build/EntityAssociationLoader.d.ts +3 -3
  26. package/build/EntityCompanion.d.ts +5 -5
  27. package/build/EntityCompanion.js.map +1 -1
  28. package/build/EntityCompanionProvider.d.ts +6 -6
  29. package/build/EntityCompanionProvider.js.map +1 -1
  30. package/build/EntityConfiguration.d.ts +46 -5
  31. package/build/EntityConfiguration.js +39 -1
  32. package/build/EntityConfiguration.js.map +1 -1
  33. package/build/EntityCreator.d.ts +4 -4
  34. package/build/EntityDatabaseAdapter.d.ts +15 -14
  35. package/build/EntityDatabaseAdapter.js +20 -12
  36. package/build/EntityDatabaseAdapter.js.map +1 -1
  37. package/build/EntityDeleter.d.ts +4 -4
  38. package/build/EntityFieldDefinition.d.ts +20 -10
  39. package/build/EntityFieldDefinition.js +3 -1
  40. package/build/EntityFieldDefinition.js.map +1 -1
  41. package/build/EntityFields.d.ts +14 -12
  42. package/build/EntityFields.js.map +1 -1
  43. package/build/EntityLoader.d.ts +5 -5
  44. package/build/EntityLoaderFactory.d.ts +3 -3
  45. package/build/EntityLoaderFactory.js.map +1 -1
  46. package/build/EntityLoaderUtils.d.ts +2 -2
  47. package/build/EntityLoaderUtils.js +27 -1
  48. package/build/EntityLoaderUtils.js.map +1 -1
  49. package/build/EntityMutationInfo.d.ts +2 -2
  50. package/build/EntityMutationTriggerConfiguration.d.ts +14 -14
  51. package/build/EntityMutationTriggerConfiguration.js.map +1 -1
  52. package/build/EntityMutationValidator.d.ts +2 -2
  53. package/build/EntityMutatorFactory.d.ts +5 -5
  54. package/build/EntityMutatorFactory.js.map +1 -1
  55. package/build/EntityPrivacyPolicy.d.ts +14 -14
  56. package/build/EntityPrivacyPolicy.js.map +1 -1
  57. package/build/EntitySecondaryCacheLoader.d.ts +4 -4
  58. package/build/EntityUpdater.d.ts +4 -4
  59. package/build/GenericEntityCacheAdapter.d.ts +7 -6
  60. package/build/GenericEntityCacheAdapter.js +13 -14
  61. package/build/GenericEntityCacheAdapter.js.map +1 -1
  62. package/build/GenericSecondaryEntityCache.d.ts +3 -3
  63. package/build/GenericSecondaryEntityCache.js.map +1 -1
  64. package/build/IEntityCacheAdapter.d.ts +17 -16
  65. package/build/IEntityCacheAdapterProvider.d.ts +1 -1
  66. package/build/IEntityDatabaseAdapterProvider.d.ts +1 -1
  67. package/build/IEntityGenericCacher.d.ts +15 -5
  68. package/build/ReadonlyEntity.d.ts +27 -8
  69. package/build/ReadonlyEntity.js +31 -3
  70. package/build/ReadonlyEntity.js.map +1 -1
  71. package/build/ViewerContext.d.ts +1 -1
  72. package/build/ViewerScopedEntityCompanion.d.ts +5 -5
  73. package/build/ViewerScopedEntityCompanionProvider.d.ts +1 -1
  74. package/build/ViewerScopedEntityLoaderFactory.d.ts +3 -3
  75. package/build/ViewerScopedEntityMutatorFactory.d.ts +5 -5
  76. package/build/entityUtils.d.ts +1 -1
  77. package/build/entityUtils.js.map +1 -1
  78. package/build/errors/EntityInvalidFieldValueError.d.ts +2 -2
  79. package/build/errors/EntityNotAuthorizedError.d.ts +1 -1
  80. package/build/errors/EntityNotFoundError.d.ts +2 -2
  81. package/build/index.d.ts +7 -7
  82. package/build/index.js +8 -13
  83. package/build/index.js.map +1 -1
  84. package/build/internal/CompositeFieldHolder.d.ts +48 -0
  85. package/build/internal/CompositeFieldHolder.js +116 -0
  86. package/build/internal/CompositeFieldHolder.js.map +1 -0
  87. package/build/internal/CompositeFieldValueMap.d.ts +15 -0
  88. package/build/internal/CompositeFieldValueMap.js +51 -0
  89. package/build/internal/CompositeFieldValueMap.js.map +1 -0
  90. package/build/internal/EntityDataManager.d.ts +16 -16
  91. package/build/internal/EntityDataManager.js +42 -45
  92. package/build/internal/EntityDataManager.js.map +1 -1
  93. package/build/internal/EntityFieldTransformationUtils.d.ts +5 -5
  94. package/build/internal/EntityFieldTransformationUtils.js.map +1 -1
  95. package/build/internal/EntityLoadInterfaces.d.ts +104 -0
  96. package/build/internal/EntityLoadInterfaces.js +25 -0
  97. package/build/internal/EntityLoadInterfaces.js.map +1 -0
  98. package/build/internal/EntityTableDataCoordinator.d.ts +6 -6
  99. package/build/internal/EntityTableDataCoordinator.js.map +1 -1
  100. package/build/internal/ReadThroughEntityCache.d.ts +17 -16
  101. package/build/internal/ReadThroughEntityCache.js +36 -36
  102. package/build/internal/ReadThroughEntityCache.js.map +1 -1
  103. package/build/internal/SingleFieldHolder.d.ts +34 -0
  104. package/build/internal/SingleFieldHolder.js +90 -0
  105. package/build/internal/SingleFieldHolder.js.map +1 -0
  106. package/build/metrics/EntityMetricsUtils.d.ts +2 -1
  107. package/build/metrics/EntityMetricsUtils.js.map +1 -1
  108. package/build/metrics/IEntityMetricsAdapter.d.ts +5 -0
  109. package/build/metrics/IEntityMetricsAdapter.js.map +1 -1
  110. package/build/rules/AlwaysAllowPrivacyPolicyRule.d.ts +2 -2
  111. package/build/rules/AlwaysAllowPrivacyPolicyRule.js.map +1 -1
  112. package/build/rules/AlwaysDenyPrivacyPolicyRule.d.ts +2 -2
  113. package/build/rules/AlwaysDenyPrivacyPolicyRule.js.map +1 -1
  114. package/build/rules/AlwaysSkipPrivacyPolicyRule.d.ts +2 -2
  115. package/build/rules/AlwaysSkipPrivacyPolicyRule.js.map +1 -1
  116. package/build/rules/PrivacyPolicyRule.d.ts +2 -2
  117. package/build/tsconfig.build.tsbuildinfo +1 -0
  118. package/build/utils/EntityPrivacyUtils.d.ts +4 -4
  119. package/build/utils/EntityPrivacyUtils.js.map +1 -1
  120. package/build/utils/collections/SerializableKeyMap.d.ts +27 -0
  121. package/build/utils/collections/SerializableKeyMap.js +60 -0
  122. package/build/utils/collections/SerializableKeyMap.js.map +1 -0
  123. package/build/utils/collections/maps.js +1 -2
  124. package/build/utils/collections/maps.js.map +1 -1
  125. package/build/utils/collections/sets.d.ts +1 -0
  126. package/build/utils/collections/sets.js +7 -0
  127. package/build/utils/collections/sets.js.map +1 -0
  128. package/build/utils/mergeEntityMutationTriggerConfigurations.d.ts +1 -1
  129. package/package.json +8 -5
  130. package/src/AuthorizationResultBasedEntityAssociationLoader.ts +58 -53
  131. package/src/AuthorizationResultBasedEntityLoader.ts +194 -81
  132. package/src/AuthorizationResultBasedEntityMutator.ts +71 -45
  133. package/src/ComposedEntityCacheAdapter.ts +55 -46
  134. package/src/ComposedSecondaryEntityCache.ts +5 -2
  135. package/src/EnforcingEntityAssociationLoader.ts +52 -44
  136. package/src/EnforcingEntityCreator.ts +5 -5
  137. package/src/EnforcingEntityDeleter.ts +5 -5
  138. package/src/EnforcingEntityLoader.ts +158 -21
  139. package/src/EnforcingEntityUpdater.ts +5 -5
  140. package/src/Entity.ts +185 -29
  141. package/src/EntityAssociationLoader.ts +6 -6
  142. package/src/EntityCompanion.ts +11 -11
  143. package/src/EntityCompanionProvider.ts +21 -18
  144. package/src/EntityConfiguration.ts +123 -9
  145. package/src/EntityCreator.ts +7 -7
  146. package/src/EntityDatabaseAdapter.ts +51 -28
  147. package/src/EntityDeleter.ts +7 -7
  148. package/src/EntityFieldDefinition.ts +32 -12
  149. package/src/EntityFields.ts +49 -12
  150. package/src/EntityLoader.ts +8 -8
  151. package/src/EntityLoaderFactory.ts +8 -8
  152. package/src/EntityLoaderUtils.ts +39 -10
  153. package/src/EntityMutationInfo.ts +6 -6
  154. package/src/EntityMutationTriggerConfiguration.ts +68 -20
  155. package/src/EntityMutationValidator.ts +4 -4
  156. package/src/EntityMutatorFactory.ts +13 -13
  157. package/src/EntityPrivacyPolicy.ts +50 -26
  158. package/src/EntitySecondaryCacheLoader.ts +6 -6
  159. package/src/EntityUpdater.ts +7 -7
  160. package/src/GenericEntityCacheAdapter.ts +39 -28
  161. package/src/GenericSecondaryEntityCache.ts +6 -3
  162. package/src/IEntityCacheAdapter.ts +45 -25
  163. package/src/IEntityCacheAdapterProvider.ts +3 -3
  164. package/src/IEntityDatabaseAdapterProvider.ts +3 -3
  165. package/src/IEntityGenericCacher.ts +33 -5
  166. package/src/ReadonlyEntity.ts +129 -16
  167. package/src/ViewerContext.ts +5 -5
  168. package/src/ViewerScopedEntityCompanion.ts +7 -7
  169. package/src/ViewerScopedEntityCompanionProvider.ts +6 -6
  170. package/src/ViewerScopedEntityLoaderFactory.ts +7 -7
  171. package/src/ViewerScopedEntityMutatorFactory.ts +8 -8
  172. package/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.ts +41 -72
  173. package/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.ts +14 -13
  174. package/src/__tests__/AuthorizationResultBasedEntityLoader-test.ts +367 -69
  175. package/src/__tests__/ComposedCacheAdapter-test.ts +235 -117
  176. package/src/__tests__/EnforcingEntityLoader-test.ts +135 -1
  177. package/src/__tests__/Entity-test.ts +64 -11
  178. package/src/__tests__/EntityAssociationLoader-test.ts +6 -8
  179. package/src/__tests__/EntityCommonUseCases-test.ts +25 -28
  180. package/src/__tests__/EntityCompanion-test.ts +4 -4
  181. package/src/__tests__/EntityCompanionProvider-test.ts +9 -8
  182. package/src/__tests__/EntityConfiguration-test.ts +85 -6
  183. package/src/__tests__/EntityDatabaseAdapter-test.ts +113 -17
  184. package/src/__tests__/EntityEdges-test.ts +135 -138
  185. package/src/__tests__/EntityFields-test.ts +2 -2
  186. package/src/__tests__/EntityLoader-test.ts +5 -7
  187. package/src/__tests__/EntityMutator-MutationCacheConsistency-test.ts +17 -19
  188. package/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.ts +73 -0
  189. package/src/__tests__/EntityMutator-test.ts +74 -46
  190. package/src/__tests__/EntityPrivacyPolicy-test.ts +51 -74
  191. package/src/__tests__/EntityQueryContext-test.ts +1 -1
  192. package/src/__tests__/EntitySecondaryCacheLoader-test.ts +9 -9
  193. package/src/__tests__/EntitySelfReferentialEdges-test.ts +119 -122
  194. package/src/__tests__/GenericEntityCacheAdapter-test.ts +83 -28
  195. package/src/__tests__/ReadonlyEntity-test.ts +49 -9
  196. package/src/__tests__/ViewerContext-test.ts +1 -1
  197. package/src/__tests__/ViewerScopedEntityCompanion-test.ts +5 -2
  198. package/src/__tests__/ViewerScopedEntityCompanionProvider-test.ts +1 -1
  199. package/src/__tests__/ViewerScopedEntityMutatorFactory-test.ts +12 -3
  200. package/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.ts +25 -27
  201. package/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.ts +28 -34
  202. package/src/entityUtils.ts +4 -1
  203. package/src/errors/EntityInvalidFieldValueError.ts +5 -5
  204. package/src/errors/EntityNotAuthorizedError.ts +3 -3
  205. package/src/errors/EntityNotFoundError.ts +5 -5
  206. package/src/index.ts +7 -7
  207. package/src/internal/CompositeFieldHolder.ts +218 -0
  208. package/src/internal/CompositeFieldValueMap.ts +78 -0
  209. package/src/internal/EntityDataManager.ts +107 -96
  210. package/src/internal/EntityFieldTransformationUtils.ts +33 -14
  211. package/src/internal/EntityLoadInterfaces.ts +143 -0
  212. package/src/internal/EntityTableDataCoordinator.ts +8 -5
  213. package/src/internal/ReadThroughEntityCache.ts +63 -50
  214. package/src/internal/SingleFieldHolder.ts +131 -0
  215. package/src/internal/__tests__/CompositeFieldHolder-test.ts +25 -0
  216. package/src/internal/__tests__/CompositeFieldValueMap-test.ts +43 -0
  217. package/src/internal/__tests__/EntityDataManager-test.ts +308 -91
  218. package/src/internal/__tests__/EntityFieldTransformationUtils-test.ts +3 -2
  219. package/src/internal/__tests__/ReadThroughEntityCache-test.ts +315 -107
  220. package/src/metrics/EntityMetricsUtils.ts +7 -2
  221. package/src/metrics/IEntityMetricsAdapter.ts +6 -0
  222. package/src/rules/AlwaysAllowPrivacyPolicyRule.ts +5 -5
  223. package/src/rules/AlwaysDenyPrivacyPolicyRule.ts +5 -5
  224. package/src/rules/AlwaysSkipPrivacyPolicyRule.ts +5 -5
  225. package/src/rules/PrivacyPolicyRule.ts +4 -4
  226. package/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.ts +1 -1
  227. package/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.ts +1 -1
  228. package/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.ts +1 -1
  229. package/src/utils/EntityPrivacyUtils.ts +72 -30
  230. package/src/utils/{testing → __testfixtures__}/PrivacyPolicyRuleTestUtils.ts +26 -26
  231. package/src/{testfixtures → utils/__testfixtures__}/SimpleTestEntity.ts +16 -15
  232. package/src/utils/__testfixtures__/StubCacheAdapter.ts +164 -0
  233. package/src/utils/{testing → __testfixtures__}/StubDatabaseAdapter.ts +19 -12
  234. package/src/utils/{testing → __testfixtures__}/StubDatabaseAdapterProvider.ts +4 -4
  235. package/src/utils/__testfixtures__/TSMockitoExtensions.ts +69 -0
  236. package/src/{testfixtures → utils/__testfixtures__}/TestEntity.ts +21 -15
  237. package/src/{testfixtures → utils/__testfixtures__}/TestEntity2.ts +16 -15
  238. package/src/{testfixtures → utils/__testfixtures__}/TestEntityWithMutationTriggers.ts +23 -22
  239. package/src/{testfixtures → utils/__testfixtures__}/TestViewerContext.ts +1 -1
  240. package/src/utils/{testing → __testfixtures__}/describeFieldTestCase.ts +1 -1
  241. package/src/utils/__tests__/EntityPrivacyUtils-test.ts +81 -113
  242. package/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.ts +31 -30
  243. package/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.ts +1 -1
  244. package/src/utils/collections/SerializableKeyMap.ts +84 -0
  245. package/src/utils/collections/__tests__/SerializableKeyMap-test.ts +119 -0
  246. package/src/utils/collections/__tests__/sets-test.ts +17 -0
  247. package/src/utils/collections/maps.ts +7 -8
  248. package/src/utils/collections/sets.ts +3 -0
  249. package/src/utils/mergeEntityMutationTriggerConfigurations.ts +5 -5
  250. package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.d.ts +0 -1
  251. package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js +0 -273
  252. package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js.map +0 -1
  253. package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.d.ts +0 -26
  254. package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js +0 -110
  255. package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js.map +0 -1
  256. package/build/__tests__/AuthorizationResultBasedEntityLoader-test.d.ts +0 -1
  257. package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js +0 -401
  258. package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js.map +0 -1
  259. package/build/__tests__/ComposedCacheAdapter-test.d.ts +0 -1
  260. package/build/__tests__/ComposedCacheAdapter-test.js +0 -229
  261. package/build/__tests__/ComposedCacheAdapter-test.js.map +0 -1
  262. package/build/__tests__/ComposedSecondaryEntityCache-test.d.ts +0 -1
  263. package/build/__tests__/ComposedSecondaryEntityCache-test.js +0 -66
  264. package/build/__tests__/ComposedSecondaryEntityCache-test.js.map +0 -1
  265. package/build/__tests__/EnforcingEntityAssociationLoader-test.d.ts +0 -1
  266. package/build/__tests__/EnforcingEntityAssociationLoader-test.js +0 -115
  267. package/build/__tests__/EnforcingEntityAssociationLoader-test.js.map +0 -1
  268. package/build/__tests__/EnforcingEntityLoader-test.d.ts +0 -1
  269. package/build/__tests__/EnforcingEntityLoader-test.js +0 -253
  270. package/build/__tests__/EnforcingEntityLoader-test.js.map +0 -1
  271. package/build/__tests__/Entity-test.d.ts +0 -1
  272. package/build/__tests__/Entity-test.js +0 -54
  273. package/build/__tests__/Entity-test.js.map +0 -1
  274. package/build/__tests__/EntityAssociationLoader-test.d.ts +0 -1
  275. package/build/__tests__/EntityAssociationLoader-test.js +0 -30
  276. package/build/__tests__/EntityAssociationLoader-test.js.map +0 -1
  277. package/build/__tests__/EntityCommonUseCases-test.d.ts +0 -1
  278. package/build/__tests__/EntityCommonUseCases-test.js +0 -154
  279. package/build/__tests__/EntityCommonUseCases-test.js.map +0 -1
  280. package/build/__tests__/EntityCompanion-test.d.ts +0 -1
  281. package/build/__tests__/EntityCompanion-test.js +0 -77
  282. package/build/__tests__/EntityCompanion-test.js.map +0 -1
  283. package/build/__tests__/EntityCompanionProvider-test.d.ts +0 -1
  284. package/build/__tests__/EntityCompanionProvider-test.js +0 -54
  285. package/build/__tests__/EntityCompanionProvider-test.js.map +0 -1
  286. package/build/__tests__/EntityConfiguration-test.d.ts +0 -1
  287. package/build/__tests__/EntityConfiguration-test.js +0 -103
  288. package/build/__tests__/EntityConfiguration-test.js.map +0 -1
  289. package/build/__tests__/EntityDatabaseAdapter-test.d.ts +0 -1
  290. package/build/__tests__/EntityDatabaseAdapter-test.js +0 -146
  291. package/build/__tests__/EntityDatabaseAdapter-test.js.map +0 -1
  292. package/build/__tests__/EntityEdges-test.d.ts +0 -1
  293. package/build/__tests__/EntityEdges-test.js +0 -755
  294. package/build/__tests__/EntityEdges-test.js.map +0 -1
  295. package/build/__tests__/EntityFields-test.d.ts +0 -1
  296. package/build/__tests__/EntityFields-test.js +0 -63
  297. package/build/__tests__/EntityFields-test.js.map +0 -1
  298. package/build/__tests__/EntityLoader-test.d.ts +0 -1
  299. package/build/__tests__/EntityLoader-test.js +0 -36
  300. package/build/__tests__/EntityLoader-test.js.map +0 -1
  301. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.d.ts +0 -1
  302. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js +0 -77
  303. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js.map +0 -1
  304. package/build/__tests__/EntityMutator-test.d.ts +0 -1
  305. package/build/__tests__/EntityMutator-test.js +0 -741
  306. package/build/__tests__/EntityMutator-test.js.map +0 -1
  307. package/build/__tests__/EntityPrivacyPolicy-test.d.ts +0 -1
  308. package/build/__tests__/EntityPrivacyPolicy-test.js +0 -463
  309. package/build/__tests__/EntityPrivacyPolicy-test.js.map +0 -1
  310. package/build/__tests__/EntityQueryContext-test.d.ts +0 -1
  311. package/build/__tests__/EntityQueryContext-test.js +0 -116
  312. package/build/__tests__/EntityQueryContext-test.js.map +0 -1
  313. package/build/__tests__/EntitySecondaryCacheLoader-test.d.ts +0 -1
  314. package/build/__tests__/EntitySecondaryCacheLoader-test.js +0 -60
  315. package/build/__tests__/EntitySecondaryCacheLoader-test.js.map +0 -1
  316. package/build/__tests__/EntitySelfReferentialEdges-test.d.ts +0 -1
  317. package/build/__tests__/EntitySelfReferentialEdges-test.js +0 -247
  318. package/build/__tests__/EntitySelfReferentialEdges-test.js.map +0 -1
  319. package/build/__tests__/GenericEntityCacheAdapter-test.d.ts +0 -1
  320. package/build/__tests__/GenericEntityCacheAdapter-test.js +0 -80
  321. package/build/__tests__/GenericEntityCacheAdapter-test.js.map +0 -1
  322. package/build/__tests__/ReadonlyEntity-test.d.ts +0 -1
  323. package/build/__tests__/ReadonlyEntity-test.js +0 -178
  324. package/build/__tests__/ReadonlyEntity-test.js.map +0 -1
  325. package/build/__tests__/ViewerContext-test.d.ts +0 -1
  326. package/build/__tests__/ViewerContext-test.js +0 -30
  327. package/build/__tests__/ViewerContext-test.js.map +0 -1
  328. package/build/__tests__/ViewerScopedEntityCompanion-test.d.ts +0 -1
  329. package/build/__tests__/ViewerScopedEntityCompanion-test.js +0 -20
  330. package/build/__tests__/ViewerScopedEntityCompanion-test.js.map +0 -1
  331. package/build/__tests__/ViewerScopedEntityCompanionProvider-test.d.ts +0 -1
  332. package/build/__tests__/ViewerScopedEntityCompanionProvider-test.js +0 -20
  333. package/build/__tests__/ViewerScopedEntityCompanionProvider-test.js.map +0 -1
  334. package/build/__tests__/ViewerScopedEntityLoaderFactory-test.d.ts +0 -1
  335. package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js +0 -23
  336. package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js.map +0 -1
  337. package/build/__tests__/ViewerScopedEntityMutatorFactory-test.d.ts +0 -1
  338. package/build/__tests__/ViewerScopedEntityMutatorFactory-test.js +0 -22
  339. package/build/__tests__/ViewerScopedEntityMutatorFactory-test.js.map +0 -1
  340. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.d.ts +0 -1
  341. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +0 -129
  342. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +0 -1
  343. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.d.ts +0 -1
  344. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +0 -136
  345. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js.map +0 -1
  346. package/build/__tests__/entityUtils-test.d.ts +0 -1
  347. package/build/__tests__/entityUtils-test.js +0 -87
  348. package/build/__tests__/entityUtils-test.js.map +0 -1
  349. package/build/internal/__tests__/EntityDataManager-test.d.ts +0 -1
  350. package/build/internal/__tests__/EntityDataManager-test.js +0 -373
  351. package/build/internal/__tests__/EntityDataManager-test.js.map +0 -1
  352. package/build/internal/__tests__/EntityFieldTransformationUtils-test.d.ts +0 -1
  353. package/build/internal/__tests__/EntityFieldTransformationUtils-test.js +0 -136
  354. package/build/internal/__tests__/EntityFieldTransformationUtils-test.js.map +0 -1
  355. package/build/internal/__tests__/ReadThroughEntityCache-test.d.ts +0 -1
  356. package/build/internal/__tests__/ReadThroughEntityCache-test.js +0 -206
  357. package/build/internal/__tests__/ReadThroughEntityCache-test.js.map +0 -1
  358. package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.d.ts +0 -1
  359. package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js +0 -21
  360. package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js.map +0 -1
  361. package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.d.ts +0 -1
  362. package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js +0 -21
  363. package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js.map +0 -1
  364. package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.d.ts +0 -1
  365. package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js +0 -21
  366. package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js.map +0 -1
  367. package/build/testfixtures/DateIDTestEntity.d.ts +0 -19
  368. package/build/testfixtures/DateIDTestEntity.js +0 -48
  369. package/build/testfixtures/DateIDTestEntity.js.map +0 -1
  370. package/build/testfixtures/SimpleTestEntity.d.ts +0 -20
  371. package/build/testfixtures/SimpleTestEntity.js +0 -48
  372. package/build/testfixtures/SimpleTestEntity.js.map +0 -1
  373. package/build/testfixtures/TestEntity.d.ts +0 -30
  374. package/build/testfixtures/TestEntity.js +0 -93
  375. package/build/testfixtures/TestEntity.js.map +0 -1
  376. package/build/testfixtures/TestEntity2.d.ts +0 -20
  377. package/build/testfixtures/TestEntity2.js +0 -51
  378. package/build/testfixtures/TestEntity2.js.map +0 -1
  379. package/build/testfixtures/TestEntityNumberKey.d.ts +0 -19
  380. package/build/testfixtures/TestEntityNumberKey.js +0 -48
  381. package/build/testfixtures/TestEntityNumberKey.js.map +0 -1
  382. package/build/testfixtures/TestEntityWithMutationTriggers.d.ts +0 -36
  383. package/build/testfixtures/TestEntityWithMutationTriggers.js +0 -82
  384. package/build/testfixtures/TestEntityWithMutationTriggers.js.map +0 -1
  385. package/build/testfixtures/TestViewerContext.d.ts +0 -3
  386. package/build/testfixtures/TestViewerContext.js +0 -10
  387. package/build/testfixtures/TestViewerContext.js.map +0 -1
  388. package/build/utils/__tests__/EntityPrivacyUtils-test.d.ts +0 -1
  389. package/build/utils/__tests__/EntityPrivacyUtils-test.js +0 -520
  390. package/build/utils/__tests__/EntityPrivacyUtils-test.js.map +0 -1
  391. package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.d.ts +0 -1
  392. package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js +0 -181
  393. package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js.map +0 -1
  394. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.d.ts +0 -1
  395. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js +0 -26
  396. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js.map +0 -1
  397. package/build/utils/collections/__tests__/maps-test.d.ts +0 -1
  398. package/build/utils/collections/__tests__/maps-test.js +0 -120
  399. package/build/utils/collections/__tests__/maps-test.js.map +0 -1
  400. package/build/utils/testing/PrivacyPolicyRuleTestUtils.d.ts +0 -28
  401. package/build/utils/testing/PrivacyPolicyRuleTestUtils.js +0 -52
  402. package/build/utils/testing/PrivacyPolicyRuleTestUtils.js.map +0 -1
  403. package/build/utils/testing/StubCacheAdapter.d.ts +0 -27
  404. package/build/utils/testing/StubCacheAdapter.js +0 -86
  405. package/build/utils/testing/StubCacheAdapter.js.map +0 -1
  406. package/build/utils/testing/StubDatabaseAdapter.d.ts +0 -25
  407. package/build/utils/testing/StubDatabaseAdapter.js +0 -191
  408. package/build/utils/testing/StubDatabaseAdapter.js.map +0 -1
  409. package/build/utils/testing/StubDatabaseAdapterProvider.d.ts +0 -7
  410. package/build/utils/testing/StubDatabaseAdapterProvider.js +0 -14
  411. package/build/utils/testing/StubDatabaseAdapterProvider.js.map +0 -1
  412. package/build/utils/testing/StubQueryContextProvider.d.ts +0 -7
  413. package/build/utils/testing/StubQueryContextProvider.js +0 -19
  414. package/build/utils/testing/StubQueryContextProvider.js.map +0 -1
  415. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.d.ts +0 -1
  416. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js +0 -42
  417. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js.map +0 -1
  418. package/build/utils/testing/__tests__/StubDatabaseAdapter-test.d.ts +0 -1
  419. package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js +0 -402
  420. package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js.map +0 -1
  421. package/build/utils/testing/createUnitTestEntityCompanionProvider.d.ts +0 -7
  422. package/build/utils/testing/createUnitTestEntityCompanionProvider.js +0 -36
  423. package/build/utils/testing/createUnitTestEntityCompanionProvider.js.map +0 -1
  424. package/build/utils/testing/describeFieldTestCase.d.ts +0 -2
  425. package/build/utils/testing/describeFieldTestCase.js +0 -18
  426. package/build/utils/testing/describeFieldTestCase.js.map +0 -1
  427. package/src/testfixtures/DateIDTestEntity.ts +0 -59
  428. package/src/testfixtures/TestEntityNumberKey.ts +0 -59
  429. package/src/utils/testing/StubCacheAdapter.ts +0 -122
  430. package/src/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.ts +0 -42
  431. package/src/utils/testing/__tests__/StubDatabaseAdapter-test.ts +0 -548
  432. /package/src/utils/{testing → __testfixtures__}/StubQueryContextProvider.ts +0 -0
  433. /package/src/utils/{testing → __testfixtures__}/createUnitTestEntityCompanionProvider.ts +0 -0
@@ -5,10 +5,11 @@ import { EntityEdgeDeletionBehavior } from '../EntityFieldDefinition';
5
5
  import { UUIDField } from '../EntityFields';
6
6
  import EntityPrivacyPolicy from '../EntityPrivacyPolicy';
7
7
  import { CacheStatus } from '../internal/ReadThroughEntityCache';
8
+ import { SingleFieldHolder, SingleFieldValueHolder } from '../internal/SingleFieldHolder';
8
9
  import AlwaysAllowPrivacyPolicyRule from '../rules/AlwaysAllowPrivacyPolicyRule';
9
- import TestViewerContext from '../testfixtures/TestViewerContext';
10
- import { InMemoryFullCacheStubCacheAdapter } from '../utils/testing/StubCacheAdapter';
11
- import { createUnitTestEntityCompanionProvider } from '../utils/testing/createUnitTestEntityCompanionProvider';
10
+ import { InMemoryFullCacheStubCacheAdapter } from '../utils/__testfixtures__/StubCacheAdapter';
11
+ import TestViewerContext from '../utils/__testfixtures__/TestViewerContext';
12
+ import { createUnitTestEntityCompanionProvider } from '../utils/__testfixtures__/createUnitTestEntityCompanionProvider';
12
13
 
13
14
  interface CategoryFields {
14
15
  id: string;
@@ -17,31 +18,31 @@ interface CategoryFields {
17
18
 
18
19
  class CategoryPrivacyPolicy extends EntityPrivacyPolicy<
19
20
  CategoryFields,
20
- string,
21
+ 'id',
21
22
  TestViewerContext,
22
23
  any,
23
24
  any
24
25
  > {
25
26
  protected override readonly readRules = [
26
- new AlwaysAllowPrivacyPolicyRule<CategoryFields, string, TestViewerContext, any, any>(),
27
+ new AlwaysAllowPrivacyPolicyRule<CategoryFields, 'id', TestViewerContext, any, any>(),
27
28
  ];
28
29
  protected override readonly createRules = [
29
- new AlwaysAllowPrivacyPolicyRule<CategoryFields, string, TestViewerContext, any, any>(),
30
+ new AlwaysAllowPrivacyPolicyRule<CategoryFields, 'id', TestViewerContext, any, any>(),
30
31
  ];
31
32
  protected override readonly updateRules = [
32
- new AlwaysAllowPrivacyPolicyRule<CategoryFields, string, TestViewerContext, any, any>(),
33
+ new AlwaysAllowPrivacyPolicyRule<CategoryFields, 'id', TestViewerContext, any, any>(),
33
34
  ];
34
35
  protected override readonly deleteRules = [
35
- new AlwaysAllowPrivacyPolicyRule<CategoryFields, string, TestViewerContext, any, any>(),
36
+ new AlwaysAllowPrivacyPolicyRule<CategoryFields, 'id', TestViewerContext, any, any>(),
36
37
  ];
37
38
  }
38
39
 
39
40
  // eslint-disable-next-line @typescript-eslint/explicit-function-return-type
40
41
  const makeEntityClass = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) => {
41
- class CategoryEntity extends Entity<CategoryFields, string, TestViewerContext> {
42
+ class CategoryEntity extends Entity<CategoryFields, 'id', TestViewerContext> {
42
43
  static defineCompanionDefinition(): EntityCompanionDefinition<
43
44
  CategoryFields,
44
- string,
45
+ 'id',
45
46
  TestViewerContext,
46
47
  CategoryEntity,
47
48
  CategoryPrivacyPolicy
@@ -54,7 +55,7 @@ const makeEntityClass = (edgeDeletionBehavior: EntityEdgeDeletionBehavior) => {
54
55
  }
55
56
  }
56
57
 
57
- const categoryEntityConfiguration = new EntityConfiguration<CategoryFields>({
58
+ const categoryEntityConfiguration = new EntityConfiguration<CategoryFields, 'id'>({
58
59
  idField: 'id',
59
60
  tableName: 'categories',
60
61
  inboundEdges: [CategoryEntity],
@@ -87,44 +88,34 @@ describe('EntityEdgeDeletionBehavior.CASCADE_DELETE', () => {
87
88
  const companionProvider = createUnitTestEntityCompanionProvider();
88
89
  const viewerContext = new TestViewerContext(companionProvider);
89
90
 
90
- const parentCategory = await CategoryEntity.creator(viewerContext).enforcing().createAsync();
91
+ const parentCategory = await CategoryEntity.creator(viewerContext).createAsync();
91
92
  const subCategory = await CategoryEntity.creator(viewerContext)
92
- .enforcing()
93
93
  .setField('parent_category_id', parentCategory.getID())
94
94
  .createAsync();
95
95
  const subSubCategory = await CategoryEntity.creator(viewerContext)
96
- .enforcing()
97
96
  .setField('parent_category_id', subCategory.getID())
98
97
  .createAsync();
99
98
 
100
99
  await expect(
101
- CategoryEntity.loader(viewerContext)
102
- .enforcing()
103
- .loadByIDNullableAsync(parentCategory.getID()),
100
+ CategoryEntity.loader(viewerContext).loadByIDNullableAsync(parentCategory.getID()),
104
101
  ).resolves.not.toBeNull();
105
102
  await expect(
106
- CategoryEntity.loader(viewerContext).enforcing().loadByIDNullableAsync(subCategory.getID()),
103
+ CategoryEntity.loader(viewerContext).loadByIDNullableAsync(subCategory.getID()),
107
104
  ).resolves.not.toBeNull();
108
105
  await expect(
109
- CategoryEntity.loader(viewerContext)
110
- .enforcing()
111
- .loadByIDNullableAsync(subSubCategory.getID()),
106
+ CategoryEntity.loader(viewerContext).loadByIDNullableAsync(subSubCategory.getID()),
112
107
  ).resolves.not.toBeNull();
113
108
 
114
- await CategoryEntity.deleter(parentCategory).enforcing().deleteAsync();
109
+ await CategoryEntity.deleter(parentCategory).deleteAsync();
115
110
 
116
111
  await expect(
117
- CategoryEntity.loader(viewerContext)
118
- .enforcing()
119
- .loadByIDNullableAsync(parentCategory.getID()),
112
+ CategoryEntity.loader(viewerContext).loadByIDNullableAsync(parentCategory.getID()),
120
113
  ).resolves.toBeNull();
121
114
  await expect(
122
- CategoryEntity.loader(viewerContext).enforcing().loadByIDNullableAsync(subCategory.getID()),
115
+ CategoryEntity.loader(viewerContext).loadByIDNullableAsync(subCategory.getID()),
123
116
  ).resolves.toBeNull();
124
117
  await expect(
125
- CategoryEntity.loader(viewerContext)
126
- .enforcing()
127
- .loadByIDNullableAsync(subSubCategory.getID()),
118
+ CategoryEntity.loader(viewerContext).loadByIDNullableAsync(subSubCategory.getID()),
128
119
  ).resolves.toBeNull();
129
120
  });
130
121
 
@@ -134,23 +125,21 @@ describe('EntityEdgeDeletionBehavior.CASCADE_DELETE', () => {
134
125
  const companionProvider = createUnitTestEntityCompanionProvider();
135
126
  const viewerContext = new TestViewerContext(companionProvider);
136
127
 
137
- const categoryA = await CategoryEntity.creator(viewerContext).enforcing().createAsync();
128
+ const categoryA = await CategoryEntity.creator(viewerContext).createAsync();
138
129
  const categoryB = await CategoryEntity.creator(viewerContext)
139
- .enforcing()
140
130
  .setField('parent_category_id', categoryA.getID())
141
131
  .createAsync();
142
132
  await CategoryEntity.updater(categoryA)
143
- .enforcing()
144
133
  .setField('parent_category_id', categoryB.getID())
145
134
  .updateAsync();
146
135
 
147
- await CategoryEntity.deleter(categoryA).enforcing().deleteAsync();
136
+ await CategoryEntity.deleter(categoryA).deleteAsync();
148
137
 
149
138
  await expect(
150
- CategoryEntity.loader(viewerContext).enforcing().loadByIDNullableAsync(categoryA.getID()),
139
+ CategoryEntity.loader(viewerContext).loadByIDNullableAsync(categoryA.getID()),
151
140
  ).resolves.toBeNull();
152
141
  await expect(
153
- CategoryEntity.loader(viewerContext).enforcing().loadByIDNullableAsync(categoryB.getID()),
142
+ CategoryEntity.loader(viewerContext).loadByIDNullableAsync(categoryB.getID()),
154
143
  ).resolves.toBeNull();
155
144
  });
156
145
  });
@@ -162,46 +151,38 @@ describe('EntityEdgeDeletionBehavior.SET_NULL', () => {
162
151
  const companionProvider = createUnitTestEntityCompanionProvider();
163
152
  const viewerContext = new TestViewerContext(companionProvider);
164
153
 
165
- const parentCategory = await CategoryEntity.creator(viewerContext).enforcing().createAsync();
154
+ const parentCategory = await CategoryEntity.creator(viewerContext).createAsync();
166
155
  const subCategory = await CategoryEntity.creator(viewerContext)
167
- .enforcing()
168
156
  .setField('parent_category_id', parentCategory.getID())
169
157
  .createAsync();
170
158
  const subSubCategory = await CategoryEntity.creator(viewerContext)
171
- .enforcing()
172
159
  .setField('parent_category_id', subCategory.getID())
173
160
  .createAsync();
174
161
 
175
162
  await expect(
176
- CategoryEntity.loader(viewerContext)
177
- .enforcing()
178
- .loadByIDNullableAsync(parentCategory.getID()),
163
+ CategoryEntity.loader(viewerContext).loadByIDNullableAsync(parentCategory.getID()),
179
164
  ).resolves.not.toBeNull();
180
165
  await expect(
181
- CategoryEntity.loader(viewerContext).enforcing().loadByIDNullableAsync(subCategory.getID()),
166
+ CategoryEntity.loader(viewerContext).loadByIDNullableAsync(subCategory.getID()),
182
167
  ).resolves.not.toBeNull();
183
168
  await expect(
184
- CategoryEntity.loader(viewerContext)
185
- .enforcing()
186
- .loadByIDNullableAsync(subSubCategory.getID()),
169
+ CategoryEntity.loader(viewerContext).loadByIDNullableAsync(subSubCategory.getID()),
187
170
  ).resolves.not.toBeNull();
188
171
 
189
- await CategoryEntity.deleter(parentCategory).enforcing().deleteAsync();
172
+ await CategoryEntity.deleter(parentCategory).deleteAsync();
190
173
 
191
174
  await expect(
192
- CategoryEntity.loader(viewerContext)
193
- .enforcing()
194
- .loadByIDNullableAsync(parentCategory.getID()),
175
+ CategoryEntity.loader(viewerContext).loadByIDNullableAsync(parentCategory.getID()),
195
176
  ).resolves.toBeNull();
196
177
 
197
- const loadedSubCategory = await CategoryEntity.loader(viewerContext)
198
- .enforcing()
199
- .loadByIDAsync(subCategory.getID());
178
+ const loadedSubCategory = await CategoryEntity.loader(viewerContext).loadByIDAsync(
179
+ subCategory.getID(),
180
+ );
200
181
  expect(loadedSubCategory.getField('parent_category_id')).toBeNull();
201
182
 
202
- const loadedSubSubCategory = await CategoryEntity.loader(viewerContext)
203
- .enforcing()
204
- .loadByIDAsync(subSubCategory.getID());
183
+ const loadedSubSubCategory = await CategoryEntity.loader(viewerContext).loadByIDAsync(
184
+ subSubCategory.getID(),
185
+ );
205
186
  expect(loadedSubSubCategory.getField('parent_category_id')).not.toBeNull();
206
187
  });
207
188
 
@@ -211,21 +192,19 @@ describe('EntityEdgeDeletionBehavior.SET_NULL', () => {
211
192
  const companionProvider = createUnitTestEntityCompanionProvider();
212
193
  const viewerContext = new TestViewerContext(companionProvider);
213
194
 
214
- const categoryA = await CategoryEntity.creator(viewerContext).enforcing().createAsync();
195
+ const categoryA = await CategoryEntity.creator(viewerContext).createAsync();
215
196
  const categoryB = await CategoryEntity.creator(viewerContext)
216
- .enforcing()
217
197
  .setField('parent_category_id', categoryA.getID())
218
198
  .createAsync();
219
199
  await CategoryEntity.updater(categoryA)
220
- .enforcing()
221
200
  .setField('parent_category_id', categoryB.getID())
222
201
  .updateAsync();
223
202
 
224
- await CategoryEntity.deleter(categoryA).enforcing().deleteAsync();
203
+ await CategoryEntity.deleter(categoryA).deleteAsync();
225
204
 
226
- const loadedCategoryB = await CategoryEntity.loader(viewerContext)
227
- .enforcing()
228
- .loadByIDAsync(categoryB.getID());
205
+ const loadedCategoryB = await CategoryEntity.loader(viewerContext).loadByIDAsync(
206
+ categoryB.getID(),
207
+ );
229
208
  expect(loadedCategoryB.getField('parent_category_id')).toBeNull();
230
209
  });
231
210
  });
@@ -239,73 +218,77 @@ describe('EntityEdgeDeletionBehavior.CASCADE_DELETE_INVALIDATE_CACHE', () => {
239
218
  const companionProvider = createUnitTestEntityCompanionProvider();
240
219
  const viewerContext = new TestViewerContext(companionProvider);
241
220
 
242
- const parentCategory = await CategoryEntity.creator(viewerContext).enforcing().createAsync();
221
+ const parentCategory = await CategoryEntity.creator(viewerContext).createAsync();
243
222
  const subCategory = await CategoryEntity.creator(viewerContext)
244
- .enforcing()
245
223
  .setField('parent_category_id', parentCategory.getID())
246
224
  .createAsync();
247
225
  const subSubCategory = await CategoryEntity.creator(viewerContext)
248
- .enforcing()
249
226
  .setField('parent_category_id', subCategory.getID())
250
227
  .createAsync();
251
228
 
252
229
  await expect(
253
- CategoryEntity.loader(viewerContext)
254
- .enforcing()
255
- .loadByIDNullableAsync(parentCategory.getID()),
230
+ CategoryEntity.loader(viewerContext).loadByIDNullableAsync(parentCategory.getID()),
256
231
  ).resolves.not.toBeNull();
257
232
  await expect(
258
- CategoryEntity.loader(viewerContext)
259
- .enforcing()
260
- .loadByFieldEqualingAsync('parent_category_id', parentCategory.getID()),
233
+ CategoryEntity.loader(viewerContext).loadByFieldEqualingAsync(
234
+ 'parent_category_id',
235
+ parentCategory.getID(),
236
+ ),
261
237
  ).resolves.not.toBeNull();
262
238
  await expect(
263
- CategoryEntity.loader(viewerContext)
264
- .enforcing()
265
- .loadByFieldEqualingAsync('parent_category_id', subCategory.getID()),
239
+ CategoryEntity.loader(viewerContext).loadByFieldEqualingAsync(
240
+ 'parent_category_id',
241
+ subCategory.getID(),
242
+ ),
266
243
  ).resolves.not.toBeNull();
267
244
 
268
245
  const categoryCacheAdapter = viewerContext.getViewerScopedEntityCompanionForClass(
269
246
  CategoryEntity,
270
247
  )['entityCompanion']['tableDataCoordinator'][
271
248
  'cacheAdapter'
272
- ] as InMemoryFullCacheStubCacheAdapter<CategoryFields>;
273
- const subCategoryCachedBefore = await categoryCacheAdapter.loadManyAsync('parent_category_id', [
274
- parentCategory.getID(),
275
- ]);
276
- expect(subCategoryCachedBefore.get(parentCategory.getID())?.status).toEqual(CacheStatus.HIT);
249
+ ] as InMemoryFullCacheStubCacheAdapter<CategoryFields, 'id'>;
250
+ const subCategoryCachedBefore = await categoryCacheAdapter.loadManyAsync(
251
+ new SingleFieldHolder('parent_category_id'),
252
+ [new SingleFieldValueHolder(parentCategory.getID())],
253
+ );
254
+ expect(
255
+ subCategoryCachedBefore.get(new SingleFieldValueHolder(parentCategory.getID()))?.status,
256
+ ).toEqual(CacheStatus.HIT);
277
257
 
278
258
  const subSubCategoryCachedBefore = await categoryCacheAdapter.loadManyAsync(
279
- 'parent_category_id',
280
- [subCategory.getID()],
259
+ new SingleFieldHolder('parent_category_id'),
260
+ [new SingleFieldValueHolder(subCategory.getID())],
281
261
  );
282
- expect(subSubCategoryCachedBefore.get(subCategory.getID())?.status).toEqual(CacheStatus.HIT);
262
+ expect(
263
+ subSubCategoryCachedBefore.get(new SingleFieldValueHolder(subCategory.getID()))?.status,
264
+ ).toEqual(CacheStatus.HIT);
283
265
 
284
- await CategoryEntity.deleter(parentCategory).enforcing().deleteAsync();
266
+ await CategoryEntity.deleter(parentCategory).deleteAsync();
285
267
 
286
- const subCategoryCachedAfter = await categoryCacheAdapter.loadManyAsync('parent_category_id', [
287
- parentCategory.getID(),
288
- ]);
289
- expect(subCategoryCachedAfter.get(parentCategory.getID())?.status).toEqual(CacheStatus.MISS);
268
+ const subCategoryCachedAfter = await categoryCacheAdapter.loadManyAsync(
269
+ new SingleFieldHolder('parent_category_id'),
270
+ [new SingleFieldValueHolder(parentCategory.getID())],
271
+ );
272
+ expect(
273
+ subCategoryCachedAfter.get(new SingleFieldValueHolder(parentCategory.getID()))?.status,
274
+ ).toEqual(CacheStatus.MISS);
290
275
 
291
276
  const subSubCategoryCachedAfter = await categoryCacheAdapter.loadManyAsync(
292
- 'parent_category_id',
293
- [subCategory.getID()],
277
+ new SingleFieldHolder('parent_category_id'),
278
+ [new SingleFieldValueHolder(subCategory.getID())],
294
279
  );
295
- expect(subSubCategoryCachedAfter.get(subCategory.getID())?.status).toEqual(CacheStatus.MISS);
280
+ expect(
281
+ subSubCategoryCachedAfter.get(new SingleFieldValueHolder(subCategory.getID()))?.status,
282
+ ).toEqual(CacheStatus.MISS);
296
283
 
297
284
  await expect(
298
- CategoryEntity.loader(viewerContext)
299
- .enforcing()
300
- .loadByIDNullableAsync(parentCategory.getID()),
285
+ CategoryEntity.loader(viewerContext).loadByIDNullableAsync(parentCategory.getID()),
301
286
  ).resolves.toBeNull();
302
287
  await expect(
303
- CategoryEntity.loader(viewerContext).enforcing().loadByIDNullableAsync(subCategory.getID()),
288
+ CategoryEntity.loader(viewerContext).loadByIDNullableAsync(subCategory.getID()),
304
289
  ).resolves.not.toBeNull();
305
290
  await expect(
306
- CategoryEntity.loader(viewerContext)
307
- .enforcing()
308
- .loadByIDNullableAsync(subSubCategory.getID()),
291
+ CategoryEntity.loader(viewerContext).loadByIDNullableAsync(subSubCategory.getID()),
309
292
  ).resolves.not.toBeNull();
310
293
  });
311
294
 
@@ -317,46 +300,60 @@ describe('EntityEdgeDeletionBehavior.CASCADE_DELETE_INVALIDATE_CACHE', () => {
317
300
  const companionProvider = createUnitTestEntityCompanionProvider();
318
301
  const viewerContext = new TestViewerContext(companionProvider);
319
302
 
320
- const categoryA = await CategoryEntity.creator(viewerContext).enforcing().createAsync();
303
+ const categoryA = await CategoryEntity.creator(viewerContext).createAsync();
321
304
  const categoryB = await CategoryEntity.creator(viewerContext)
322
- .enforcing()
323
305
  .setField('parent_category_id', categoryA.getID())
324
306
  .createAsync();
325
307
  await CategoryEntity.updater(categoryA)
326
- .enforcing()
327
308
  .setField('parent_category_id', categoryB.getID())
328
309
  .updateAsync();
329
310
 
330
311
  await expect(
331
- CategoryEntity.loader(viewerContext)
332
- .enforcing()
333
- .loadByFieldEqualingAsync('parent_category_id', categoryA.getID()),
312
+ CategoryEntity.loader(viewerContext).loadByFieldEqualingAsync(
313
+ 'parent_category_id',
314
+ categoryA.getID(),
315
+ ),
334
316
  ).resolves.not.toBeNull();
335
317
  await expect(
336
- CategoryEntity.loader(viewerContext)
337
- .enforcing()
338
- .loadByFieldEqualingAsync('parent_category_id', categoryB.getID()),
318
+ CategoryEntity.loader(viewerContext).loadByFieldEqualingAsync(
319
+ 'parent_category_id',
320
+ categoryB.getID(),
321
+ ),
339
322
  ).resolves.not.toBeNull();
340
323
 
341
324
  const categoryCacheAdapter = viewerContext.getViewerScopedEntityCompanionForClass(
342
325
  CategoryEntity,
343
326
  )['entityCompanion']['tableDataCoordinator'][
344
327
  'cacheAdapter'
345
- ] as InMemoryFullCacheStubCacheAdapter<CategoryFields>;
346
- const categoriesCachedBefore = await categoryCacheAdapter.loadManyAsync('parent_category_id', [
347
- categoryA.getID(),
348
- categoryB.getID(),
349
- ]);
350
- expect(categoriesCachedBefore.get(categoryA.getID())?.status).toEqual(CacheStatus.HIT);
351
- expect(categoriesCachedBefore.get(categoryB.getID())?.status).toEqual(CacheStatus.HIT);
352
-
353
- await CategoryEntity.deleter(categoryA).enforcing().deleteAsync();
354
-
355
- const categoriesCachedAfter = await categoryCacheAdapter.loadManyAsync('parent_category_id', [
356
- categoryA.getID(),
357
- categoryB.getID(),
358
- ]);
359
- expect(categoriesCachedAfter.get(categoryA.getID())?.status).toEqual(CacheStatus.MISS);
360
- expect(categoriesCachedAfter.get(categoryB.getID())?.status).toEqual(CacheStatus.MISS);
328
+ ] as InMemoryFullCacheStubCacheAdapter<CategoryFields, 'id'>;
329
+ const categoriesCachedBefore = await categoryCacheAdapter.loadManyAsync(
330
+ new SingleFieldHolder('parent_category_id'),
331
+ [
332
+ new SingleFieldValueHolder(categoryA.getID()),
333
+ new SingleFieldValueHolder(categoryB.getID()),
334
+ ],
335
+ );
336
+ expect(
337
+ categoriesCachedBefore.get(new SingleFieldValueHolder(categoryA.getID()))?.status,
338
+ ).toEqual(CacheStatus.HIT);
339
+ expect(
340
+ categoriesCachedBefore.get(new SingleFieldValueHolder(categoryB.getID()))?.status,
341
+ ).toEqual(CacheStatus.HIT);
342
+
343
+ await CategoryEntity.deleter(categoryA).deleteAsync();
344
+
345
+ const categoriesCachedAfter = await categoryCacheAdapter.loadManyAsync(
346
+ new SingleFieldHolder('parent_category_id'),
347
+ [
348
+ new SingleFieldValueHolder(categoryA.getID()),
349
+ new SingleFieldValueHolder(categoryB.getID()),
350
+ ],
351
+ );
352
+ expect(
353
+ categoriesCachedAfter.get(new SingleFieldValueHolder(categoryA.getID()))?.status,
354
+ ).toEqual(CacheStatus.MISS);
355
+ expect(
356
+ categoriesCachedAfter.get(new SingleFieldValueHolder(categoryB.getID()))?.status,
357
+ ).toEqual(CacheStatus.MISS);
361
358
  });
362
359
  });
@@ -1,8 +1,14 @@
1
- import { mock, when, instance, anything, verify, anyString, deepEqual } from 'ts-mockito';
1
+ import { mock, when, instance, anything, verify, deepEqual } from 'ts-mockito';
2
2
 
3
3
  import GenericEntityCacheAdapter from '../GenericEntityCacheAdapter';
4
4
  import IEntityGenericCacher from '../IEntityGenericCacher';
5
5
  import { CacheStatus } from '../internal/ReadThroughEntityCache';
6
+ import {
7
+ SingleFieldHolder,
8
+ SingleFieldValueHolder,
9
+ SingleFieldValueHolderMap,
10
+ } from '../internal/SingleFieldHolder';
11
+ import { deepEqualEntityAware } from '../utils/__testfixtures__/TSMockitoExtensions';
6
12
 
7
13
  type BlahFields = {
8
14
  id: string;
@@ -11,9 +17,14 @@ type BlahFields = {
11
17
  describe(GenericEntityCacheAdapter, () => {
12
18
  describe('loadManyAsync', () => {
13
19
  it('returns appropriate cache results', async () => {
14
- const mockGenericCacher = mock<IEntityGenericCacher<BlahFields>>();
15
- when(mockGenericCacher.makeCacheKey('id', anyString())).thenCall((fieldName, fieldValue) => {
16
- return `${fieldName}.${fieldValue}`;
20
+ const mockGenericCacher = mock<IEntityGenericCacher<BlahFields, 'id'>>();
21
+ when(
22
+ mockGenericCacher.makeCacheKeyForStorage(
23
+ deepEqualEntityAware(new SingleFieldHolder('id')),
24
+ anything(),
25
+ ),
26
+ ).thenCall((fieldHolder, fieldValueHolder) => {
27
+ return `${fieldHolder.fieldName}.${fieldValueHolder.fieldValue}`;
17
28
  });
18
29
  when(mockGenericCacher.loadManyAsync(deepEqual(['id.wat', 'id.who', 'id.why']))).thenResolve(
19
30
  new Map([
@@ -25,34 +36,56 @@ describe(GenericEntityCacheAdapter, () => {
25
36
 
26
37
  const cacheAdapter = new GenericEntityCacheAdapter(instance(mockGenericCacher));
27
38
 
28
- const results = await cacheAdapter.loadManyAsync('id', ['wat', 'who', 'why']);
29
- expect(results.get('wat')).toMatchObject({ status: CacheStatus.HIT, item: { id: 'wat' } });
30
- expect(results.get('who')).toMatchObject({ status: CacheStatus.NEGATIVE });
31
- expect(results.get('why')).toMatchObject({ status: CacheStatus.MISS });
39
+ const results = await cacheAdapter.loadManyAsync(new SingleFieldHolder('id'), [
40
+ new SingleFieldValueHolder('wat'),
41
+ new SingleFieldValueHolder('who'),
42
+ new SingleFieldValueHolder('why'),
43
+ ]);
44
+ expect(results.get(new SingleFieldValueHolder('wat'))).toMatchObject({
45
+ status: CacheStatus.HIT,
46
+ item: { id: 'wat' },
47
+ });
48
+ expect(results.get(new SingleFieldValueHolder('who'))).toMatchObject({
49
+ status: CacheStatus.NEGATIVE,
50
+ });
51
+ expect(results.get(new SingleFieldValueHolder('why'))).toMatchObject({
52
+ status: CacheStatus.MISS,
53
+ });
32
54
  expect(results.size).toBe(3);
33
55
 
34
56
  verify(mockGenericCacher.loadManyAsync(anything())).once();
35
57
  });
36
58
 
37
- it('returns empty map when passed empty array of fieldValues', async () => {
38
- const mockGenericCacher = mock<IEntityGenericCacher<BlahFields>>();
59
+ it('returns empty map when passed empty array of load values', async () => {
60
+ const mockGenericCacher = mock<IEntityGenericCacher<BlahFields, 'id'>>();
39
61
  when(mockGenericCacher.loadManyAsync(deepEqual([]))).thenResolve(new Map([]));
40
62
 
41
63
  const cacheAdapter = new GenericEntityCacheAdapter(instance(mockGenericCacher));
42
- const results = await cacheAdapter.loadManyAsync('id', []);
43
- expect(results).toEqual(new Map());
64
+ const results = await cacheAdapter.loadManyAsync(
65
+ new SingleFieldHolder<BlahFields, 'id', 'id'>('id'),
66
+ [] as SingleFieldValueHolder<BlahFields, 'id'>[],
67
+ );
68
+ expect(results).toEqual(new SingleFieldValueHolderMap(new Map()));
44
69
  });
45
70
  });
46
71
 
47
72
  describe('cacheManyAsync', () => {
48
73
  it('correctly caches all objects', async () => {
49
- const mockGenericCacher = mock<IEntityGenericCacher<BlahFields>>();
50
- when(mockGenericCacher.makeCacheKey('id', anyString())).thenCall((fieldName, fieldValue) => {
51
- return `${fieldName}.${fieldValue}`;
74
+ const mockGenericCacher = mock<IEntityGenericCacher<BlahFields, 'id'>>();
75
+ when(
76
+ mockGenericCacher.makeCacheKeyForStorage(
77
+ deepEqualEntityAware(new SingleFieldHolder('id')),
78
+ anything(),
79
+ ),
80
+ ).thenCall((fieldHolder, fieldValueHolder) => {
81
+ return `${fieldHolder.fieldName}.${fieldValueHolder.fieldValue}`;
52
82
  });
53
83
 
54
84
  const cacheAdapter = new GenericEntityCacheAdapter(instance(mockGenericCacher));
55
- await cacheAdapter.cacheManyAsync('id', new Map([['wat', { id: 'wat' }]]));
85
+ await cacheAdapter.cacheManyAsync(
86
+ new SingleFieldHolder('id'),
87
+ new Map([[new SingleFieldValueHolder('wat'), { id: 'wat' }]]),
88
+ );
56
89
 
57
90
  verify(
58
91
  mockGenericCacher.cacheManyAsync(deepEqual(new Map([['id.wat', { id: 'wat' }]]))),
@@ -62,13 +95,20 @@ describe(GenericEntityCacheAdapter, () => {
62
95
 
63
96
  describe('cacheDBMissesAsync', () => {
64
97
  it('correctly caches misses', async () => {
65
- const mockGenericCacher = mock<IEntityGenericCacher<BlahFields>>();
66
- when(mockGenericCacher.makeCacheKey('id', anyString())).thenCall((fieldName, fieldValue) => {
67
- return `${fieldName}.${fieldValue}`;
98
+ const mockGenericCacher = mock<IEntityGenericCacher<BlahFields, 'id'>>();
99
+ when(
100
+ mockGenericCacher.makeCacheKeyForStorage(
101
+ deepEqualEntityAware(new SingleFieldHolder('id')),
102
+ anything(),
103
+ ),
104
+ ).thenCall((fieldHolder, fieldValueHolder) => {
105
+ return `${fieldHolder.fieldName}.${fieldValueHolder.fieldValue}`;
68
106
  });
69
107
 
70
108
  const cacheAdapter = new GenericEntityCacheAdapter(instance(mockGenericCacher));
71
- await cacheAdapter.cacheDBMissesAsync('id', ['wat']);
109
+ await cacheAdapter.cacheDBMissesAsync(new SingleFieldHolder('id'), [
110
+ new SingleFieldValueHolder('wat'),
111
+ ]);
72
112
 
73
113
  verify(mockGenericCacher.cacheDBMissesAsync(deepEqual(['id.wat']))).once();
74
114
  });
@@ -76,25 +116,40 @@ describe(GenericEntityCacheAdapter, () => {
76
116
 
77
117
  describe('invalidateManyAsync', () => {
78
118
  it('invalidates correctly', async () => {
79
- const mockGenericCacher = mock<IEntityGenericCacher<BlahFields>>();
80
- when(mockGenericCacher.makeCacheKey('id', anyString())).thenCall((fieldName, fieldValue) => {
81
- return `${fieldName}.${fieldValue}`;
119
+ const mockGenericCacher = mock<IEntityGenericCacher<BlahFields, 'id'>>();
120
+ when(
121
+ mockGenericCacher.makeCacheKeysForInvalidation(
122
+ deepEqualEntityAware(new SingleFieldHolder('id')),
123
+ anything(),
124
+ ),
125
+ ).thenCall((fieldHolder, fieldValueHolder) => {
126
+ return `${fieldHolder.fieldName}.${fieldValueHolder.fieldValue}`;
82
127
  });
83
128
 
84
129
  const cacheAdapter = new GenericEntityCacheAdapter(instance(mockGenericCacher));
85
- await cacheAdapter.invalidateManyAsync('id', ['wat']);
130
+ await cacheAdapter.invalidateManyAsync(new SingleFieldHolder('id'), [
131
+ new SingleFieldValueHolder('wat'),
132
+ ]);
86
133
 
87
134
  verify(mockGenericCacher.invalidateManyAsync(deepEqual(['id.wat']))).once();
88
135
  });
89
136
 
90
137
  it('returns when passed empty array of fieldValues', async () => {
91
- const mockGenericCacher = mock<IEntityGenericCacher<BlahFields>>();
92
- when(mockGenericCacher.makeCacheKey('id', anyString())).thenCall((fieldName, fieldValue) => {
93
- return `${fieldName}.${fieldValue}`;
138
+ const mockGenericCacher = mock<IEntityGenericCacher<BlahFields, 'id'>>();
139
+ when(
140
+ mockGenericCacher.makeCacheKeysForInvalidation(
141
+ deepEqualEntityAware(new SingleFieldHolder('id')),
142
+ anything(),
143
+ ),
144
+ ).thenCall((fieldHolder, fieldValueHolder) => {
145
+ return `${fieldHolder.fieldName}.${fieldValueHolder.fieldValue}`;
94
146
  });
95
147
 
96
148
  const cacheAdapter = new GenericEntityCacheAdapter(instance(mockGenericCacher));
97
- await cacheAdapter.invalidateManyAsync('id', []);
149
+ await cacheAdapter.invalidateManyAsync(
150
+ new SingleFieldHolder<BlahFields, 'id', 'id'>('id'),
151
+ [] as SingleFieldValueHolder<BlahFields, 'id'>[],
152
+ );
98
153
 
99
154
  verify(mockGenericCacher.invalidateManyAsync(deepEqual([]))).once();
100
155
  });