@expo/entity 0.41.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 (430) hide show
  1. package/build/AuthorizationResultBasedEntityAssociationLoader.d.ts +16 -16
  2. package/build/AuthorizationResultBasedEntityAssociationLoader.js.map +1 -1
  3. package/build/AuthorizationResultBasedEntityLoader.d.ts +39 -67
  4. package/build/AuthorizationResultBasedEntityLoader.js +85 -62
  5. package/build/AuthorizationResultBasedEntityLoader.js.map +1 -1
  6. package/build/AuthorizationResultBasedEntityMutator.d.ts +16 -16
  7. package/build/AuthorizationResultBasedEntityMutator.js.map +1 -1
  8. package/build/ComposedEntityCacheAdapter.d.ts +7 -6
  9. package/build/ComposedEntityCacheAdapter.js +28 -28
  10. package/build/ComposedEntityCacheAdapter.js.map +1 -1
  11. package/build/ComposedSecondaryEntityCache.d.ts +1 -1
  12. package/build/ComposedSecondaryEntityCache.js.map +1 -1
  13. package/build/EnforcingEntityAssociationLoader.d.ts +15 -15
  14. package/build/EnforcingEntityAssociationLoader.js.map +1 -1
  15. package/build/EnforcingEntityCreator.d.ts +2 -2
  16. package/build/EnforcingEntityDeleter.d.ts +2 -2
  17. package/build/EnforcingEntityLoader.d.ts +104 -18
  18. package/build/EnforcingEntityLoader.js +113 -12
  19. package/build/EnforcingEntityLoader.js.map +1 -1
  20. package/build/EnforcingEntityUpdater.d.ts +2 -2
  21. package/build/Entity.d.ts +10 -10
  22. package/build/Entity.js.map +1 -1
  23. package/build/EntityAssociationLoader.d.ts +3 -3
  24. package/build/EntityCompanion.d.ts +5 -5
  25. package/build/EntityCompanion.js.map +1 -1
  26. package/build/EntityCompanionProvider.d.ts +6 -6
  27. package/build/EntityCompanionProvider.js.map +1 -1
  28. package/build/EntityConfiguration.d.ts +46 -5
  29. package/build/EntityConfiguration.js +39 -1
  30. package/build/EntityConfiguration.js.map +1 -1
  31. package/build/EntityCreator.d.ts +4 -4
  32. package/build/EntityDatabaseAdapter.d.ts +15 -14
  33. package/build/EntityDatabaseAdapter.js +20 -12
  34. package/build/EntityDatabaseAdapter.js.map +1 -1
  35. package/build/EntityDeleter.d.ts +4 -4
  36. package/build/EntityFieldDefinition.d.ts +20 -10
  37. package/build/EntityFieldDefinition.js +3 -1
  38. package/build/EntityFieldDefinition.js.map +1 -1
  39. package/build/EntityFields.d.ts +14 -12
  40. package/build/EntityFields.js.map +1 -1
  41. package/build/EntityLoader.d.ts +5 -5
  42. package/build/EntityLoaderFactory.d.ts +3 -3
  43. package/build/EntityLoaderFactory.js.map +1 -1
  44. package/build/EntityLoaderUtils.d.ts +2 -2
  45. package/build/EntityLoaderUtils.js +27 -1
  46. package/build/EntityLoaderUtils.js.map +1 -1
  47. package/build/EntityMutationInfo.d.ts +2 -2
  48. package/build/EntityMutationTriggerConfiguration.d.ts +14 -14
  49. package/build/EntityMutationTriggerConfiguration.js.map +1 -1
  50. package/build/EntityMutationValidator.d.ts +2 -2
  51. package/build/EntityMutatorFactory.d.ts +5 -5
  52. package/build/EntityMutatorFactory.js.map +1 -1
  53. package/build/EntityPrivacyPolicy.d.ts +14 -14
  54. package/build/EntityPrivacyPolicy.js.map +1 -1
  55. package/build/EntitySecondaryCacheLoader.d.ts +4 -4
  56. package/build/EntityUpdater.d.ts +4 -4
  57. package/build/GenericEntityCacheAdapter.d.ts +7 -6
  58. package/build/GenericEntityCacheAdapter.js +13 -14
  59. package/build/GenericEntityCacheAdapter.js.map +1 -1
  60. package/build/GenericSecondaryEntityCache.d.ts +3 -3
  61. package/build/GenericSecondaryEntityCache.js.map +1 -1
  62. package/build/IEntityCacheAdapter.d.ts +17 -16
  63. package/build/IEntityCacheAdapterProvider.d.ts +1 -1
  64. package/build/IEntityDatabaseAdapterProvider.d.ts +1 -1
  65. package/build/IEntityGenericCacher.d.ts +15 -5
  66. package/build/ReadonlyEntity.d.ts +8 -8
  67. package/build/ReadonlyEntity.js.map +1 -1
  68. package/build/ViewerContext.d.ts +1 -1
  69. package/build/ViewerScopedEntityCompanion.d.ts +5 -5
  70. package/build/ViewerScopedEntityCompanionProvider.d.ts +1 -1
  71. package/build/ViewerScopedEntityLoaderFactory.d.ts +3 -3
  72. package/build/ViewerScopedEntityMutatorFactory.d.ts +5 -5
  73. package/build/entityUtils.d.ts +1 -1
  74. package/build/entityUtils.js.map +1 -1
  75. package/build/errors/EntityInvalidFieldValueError.d.ts +2 -2
  76. package/build/errors/EntityNotAuthorizedError.d.ts +1 -1
  77. package/build/errors/EntityNotFoundError.d.ts +2 -2
  78. package/build/index.d.ts +7 -7
  79. package/build/index.js +8 -13
  80. package/build/index.js.map +1 -1
  81. package/build/internal/CompositeFieldHolder.d.ts +48 -0
  82. package/build/internal/CompositeFieldHolder.js +116 -0
  83. package/build/internal/CompositeFieldHolder.js.map +1 -0
  84. package/build/internal/CompositeFieldValueMap.d.ts +15 -0
  85. package/build/internal/CompositeFieldValueMap.js +51 -0
  86. package/build/internal/CompositeFieldValueMap.js.map +1 -0
  87. package/build/internal/EntityDataManager.d.ts +16 -16
  88. package/build/internal/EntityDataManager.js +42 -45
  89. package/build/internal/EntityDataManager.js.map +1 -1
  90. package/build/internal/EntityFieldTransformationUtils.d.ts +5 -5
  91. package/build/internal/EntityFieldTransformationUtils.js.map +1 -1
  92. package/build/internal/EntityLoadInterfaces.d.ts +104 -0
  93. package/build/internal/EntityLoadInterfaces.js +25 -0
  94. package/build/internal/EntityLoadInterfaces.js.map +1 -0
  95. package/build/internal/EntityTableDataCoordinator.d.ts +6 -6
  96. package/build/internal/EntityTableDataCoordinator.js.map +1 -1
  97. package/build/internal/ReadThroughEntityCache.d.ts +17 -16
  98. package/build/internal/ReadThroughEntityCache.js +36 -36
  99. package/build/internal/ReadThroughEntityCache.js.map +1 -1
  100. package/build/internal/SingleFieldHolder.d.ts +34 -0
  101. package/build/internal/SingleFieldHolder.js +90 -0
  102. package/build/internal/SingleFieldHolder.js.map +1 -0
  103. package/build/metrics/EntityMetricsUtils.d.ts +2 -1
  104. package/build/metrics/EntityMetricsUtils.js.map +1 -1
  105. package/build/metrics/IEntityMetricsAdapter.d.ts +5 -0
  106. package/build/metrics/IEntityMetricsAdapter.js.map +1 -1
  107. package/build/rules/AlwaysAllowPrivacyPolicyRule.d.ts +2 -2
  108. package/build/rules/AlwaysAllowPrivacyPolicyRule.js.map +1 -1
  109. package/build/rules/AlwaysDenyPrivacyPolicyRule.d.ts +2 -2
  110. package/build/rules/AlwaysDenyPrivacyPolicyRule.js.map +1 -1
  111. package/build/rules/AlwaysSkipPrivacyPolicyRule.d.ts +2 -2
  112. package/build/rules/AlwaysSkipPrivacyPolicyRule.js.map +1 -1
  113. package/build/rules/PrivacyPolicyRule.d.ts +2 -2
  114. package/build/tsconfig.build.tsbuildinfo +1 -0
  115. package/build/utils/EntityPrivacyUtils.d.ts +4 -4
  116. package/build/utils/EntityPrivacyUtils.js.map +1 -1
  117. package/build/utils/collections/SerializableKeyMap.d.ts +27 -0
  118. package/build/utils/collections/SerializableKeyMap.js +60 -0
  119. package/build/utils/collections/SerializableKeyMap.js.map +1 -0
  120. package/build/utils/collections/maps.js +1 -2
  121. package/build/utils/collections/maps.js.map +1 -1
  122. package/build/utils/collections/sets.d.ts +1 -0
  123. package/build/utils/collections/sets.js +7 -0
  124. package/build/utils/collections/sets.js.map +1 -0
  125. package/build/utils/mergeEntityMutationTriggerConfigurations.d.ts +1 -1
  126. package/package.json +8 -5
  127. package/src/AuthorizationResultBasedEntityAssociationLoader.ts +56 -49
  128. package/src/AuthorizationResultBasedEntityLoader.ts +194 -81
  129. package/src/AuthorizationResultBasedEntityMutator.ts +71 -45
  130. package/src/ComposedEntityCacheAdapter.ts +55 -46
  131. package/src/ComposedSecondaryEntityCache.ts +5 -2
  132. package/src/EnforcingEntityAssociationLoader.ts +52 -44
  133. package/src/EnforcingEntityCreator.ts +5 -5
  134. package/src/EnforcingEntityDeleter.ts +5 -5
  135. package/src/EnforcingEntityLoader.ts +158 -21
  136. package/src/EnforcingEntityUpdater.ts +5 -5
  137. package/src/Entity.ts +39 -39
  138. package/src/EntityAssociationLoader.ts +6 -6
  139. package/src/EntityCompanion.ts +11 -11
  140. package/src/EntityCompanionProvider.ts +21 -18
  141. package/src/EntityConfiguration.ts +123 -9
  142. package/src/EntityCreator.ts +7 -7
  143. package/src/EntityDatabaseAdapter.ts +51 -28
  144. package/src/EntityDeleter.ts +7 -7
  145. package/src/EntityFieldDefinition.ts +32 -12
  146. package/src/EntityFields.ts +49 -12
  147. package/src/EntityLoader.ts +8 -8
  148. package/src/EntityLoaderFactory.ts +8 -8
  149. package/src/EntityLoaderUtils.ts +39 -10
  150. package/src/EntityMutationInfo.ts +6 -6
  151. package/src/EntityMutationTriggerConfiguration.ts +68 -20
  152. package/src/EntityMutationValidator.ts +4 -4
  153. package/src/EntityMutatorFactory.ts +13 -13
  154. package/src/EntityPrivacyPolicy.ts +50 -26
  155. package/src/EntitySecondaryCacheLoader.ts +6 -6
  156. package/src/EntityUpdater.ts +7 -7
  157. package/src/GenericEntityCacheAdapter.ts +39 -28
  158. package/src/GenericSecondaryEntityCache.ts +6 -3
  159. package/src/IEntityCacheAdapter.ts +45 -25
  160. package/src/IEntityCacheAdapterProvider.ts +3 -3
  161. package/src/IEntityDatabaseAdapterProvider.ts +3 -3
  162. package/src/IEntityGenericCacher.ts +33 -5
  163. package/src/ReadonlyEntity.ts +24 -24
  164. package/src/ViewerContext.ts +5 -5
  165. package/src/ViewerScopedEntityCompanion.ts +7 -7
  166. package/src/ViewerScopedEntityCompanionProvider.ts +6 -6
  167. package/src/ViewerScopedEntityLoaderFactory.ts +7 -7
  168. package/src/ViewerScopedEntityMutatorFactory.ts +8 -8
  169. package/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.ts +4 -4
  170. package/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.ts +14 -13
  171. package/src/__tests__/AuthorizationResultBasedEntityLoader-test.ts +367 -69
  172. package/src/__tests__/ComposedCacheAdapter-test.ts +235 -117
  173. package/src/__tests__/EnforcingEntityLoader-test.ts +135 -1
  174. package/src/__tests__/Entity-test.ts +2 -2
  175. package/src/__tests__/EntityAssociationLoader-test.ts +2 -2
  176. package/src/__tests__/EntityCommonUseCases-test.ts +11 -11
  177. package/src/__tests__/EntityCompanion-test.ts +4 -4
  178. package/src/__tests__/EntityCompanionProvider-test.ts +9 -8
  179. package/src/__tests__/EntityConfiguration-test.ts +85 -6
  180. package/src/__tests__/EntityDatabaseAdapter-test.ts +113 -17
  181. package/src/__tests__/EntityEdges-test.ts +97 -72
  182. package/src/__tests__/EntityFields-test.ts +2 -2
  183. package/src/__tests__/EntityLoader-test.ts +2 -2
  184. package/src/__tests__/EntityMutator-MutationCacheConsistency-test.ts +11 -11
  185. package/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.ts +73 -0
  186. package/src/__tests__/EntityMutator-test.ts +74 -46
  187. package/src/__tests__/EntityPrivacyPolicy-test.ts +51 -74
  188. package/src/__tests__/EntityQueryContext-test.ts +1 -1
  189. package/src/__tests__/EntitySecondaryCacheLoader-test.ts +3 -3
  190. package/src/__tests__/EntitySelfReferentialEdges-test.ts +64 -39
  191. package/src/__tests__/GenericEntityCacheAdapter-test.ts +83 -28
  192. package/src/__tests__/ReadonlyEntity-test.ts +3 -3
  193. package/src/__tests__/ViewerContext-test.ts +1 -1
  194. package/src/__tests__/ViewerScopedEntityCompanion-test.ts +5 -2
  195. package/src/__tests__/ViewerScopedEntityCompanionProvider-test.ts +1 -1
  196. package/src/__tests__/ViewerScopedEntityMutatorFactory-test.ts +12 -3
  197. package/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.ts +12 -12
  198. package/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.ts +12 -12
  199. package/src/entityUtils.ts +4 -1
  200. package/src/errors/EntityInvalidFieldValueError.ts +5 -5
  201. package/src/errors/EntityNotAuthorizedError.ts +3 -3
  202. package/src/errors/EntityNotFoundError.ts +5 -5
  203. package/src/index.ts +7 -7
  204. package/src/internal/CompositeFieldHolder.ts +218 -0
  205. package/src/internal/CompositeFieldValueMap.ts +78 -0
  206. package/src/internal/EntityDataManager.ts +107 -96
  207. package/src/internal/EntityFieldTransformationUtils.ts +33 -14
  208. package/src/internal/EntityLoadInterfaces.ts +143 -0
  209. package/src/internal/EntityTableDataCoordinator.ts +8 -5
  210. package/src/internal/ReadThroughEntityCache.ts +63 -50
  211. package/src/internal/SingleFieldHolder.ts +131 -0
  212. package/src/internal/__tests__/CompositeFieldHolder-test.ts +25 -0
  213. package/src/internal/__tests__/CompositeFieldValueMap-test.ts +43 -0
  214. package/src/internal/__tests__/EntityDataManager-test.ts +308 -91
  215. package/src/internal/__tests__/EntityFieldTransformationUtils-test.ts +3 -2
  216. package/src/internal/__tests__/ReadThroughEntityCache-test.ts +315 -107
  217. package/src/metrics/EntityMetricsUtils.ts +7 -2
  218. package/src/metrics/IEntityMetricsAdapter.ts +6 -0
  219. package/src/rules/AlwaysAllowPrivacyPolicyRule.ts +5 -5
  220. package/src/rules/AlwaysDenyPrivacyPolicyRule.ts +5 -5
  221. package/src/rules/AlwaysSkipPrivacyPolicyRule.ts +5 -5
  222. package/src/rules/PrivacyPolicyRule.ts +4 -4
  223. package/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.ts +1 -1
  224. package/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.ts +1 -1
  225. package/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.ts +1 -1
  226. package/src/utils/EntityPrivacyUtils.ts +72 -30
  227. package/src/utils/{testing → __testfixtures__}/PrivacyPolicyRuleTestUtils.ts +26 -26
  228. package/src/{testfixtures → utils/__testfixtures__}/SimpleTestEntity.ts +16 -15
  229. package/src/utils/__testfixtures__/StubCacheAdapter.ts +164 -0
  230. package/src/utils/{testing → __testfixtures__}/StubDatabaseAdapter.ts +19 -12
  231. package/src/utils/{testing → __testfixtures__}/StubDatabaseAdapterProvider.ts +4 -4
  232. package/src/utils/__testfixtures__/TSMockitoExtensions.ts +69 -0
  233. package/src/{testfixtures → utils/__testfixtures__}/TestEntity.ts +21 -15
  234. package/src/{testfixtures → utils/__testfixtures__}/TestEntity2.ts +16 -15
  235. package/src/{testfixtures → utils/__testfixtures__}/TestEntityWithMutationTriggers.ts +23 -22
  236. package/src/{testfixtures → utils/__testfixtures__}/TestViewerContext.ts +1 -1
  237. package/src/utils/{testing → __testfixtures__}/describeFieldTestCase.ts +1 -1
  238. package/src/utils/__tests__/EntityPrivacyUtils-test.ts +62 -66
  239. package/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.ts +29 -25
  240. package/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.ts +1 -1
  241. package/src/utils/collections/SerializableKeyMap.ts +84 -0
  242. package/src/utils/collections/__tests__/SerializableKeyMap-test.ts +119 -0
  243. package/src/utils/collections/__tests__/sets-test.ts +17 -0
  244. package/src/utils/collections/maps.ts +7 -8
  245. package/src/utils/collections/sets.ts +3 -0
  246. package/src/utils/mergeEntityMutationTriggerConfigurations.ts +5 -5
  247. package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.d.ts +0 -1
  248. package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js +0 -242
  249. package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js.map +0 -1
  250. package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.d.ts +0 -26
  251. package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js +0 -110
  252. package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js.map +0 -1
  253. package/build/__tests__/AuthorizationResultBasedEntityLoader-test.d.ts +0 -1
  254. package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js +0 -401
  255. package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js.map +0 -1
  256. package/build/__tests__/ComposedCacheAdapter-test.d.ts +0 -1
  257. package/build/__tests__/ComposedCacheAdapter-test.js +0 -229
  258. package/build/__tests__/ComposedCacheAdapter-test.js.map +0 -1
  259. package/build/__tests__/ComposedSecondaryEntityCache-test.d.ts +0 -1
  260. package/build/__tests__/ComposedSecondaryEntityCache-test.js +0 -66
  261. package/build/__tests__/ComposedSecondaryEntityCache-test.js.map +0 -1
  262. package/build/__tests__/EnforcingEntityAssociationLoader-test.d.ts +0 -1
  263. package/build/__tests__/EnforcingEntityAssociationLoader-test.js +0 -115
  264. package/build/__tests__/EnforcingEntityAssociationLoader-test.js.map +0 -1
  265. package/build/__tests__/EnforcingEntityLoader-test.d.ts +0 -1
  266. package/build/__tests__/EnforcingEntityLoader-test.js +0 -253
  267. package/build/__tests__/EnforcingEntityLoader-test.js.map +0 -1
  268. package/build/__tests__/Entity-test.d.ts +0 -1
  269. package/build/__tests__/Entity-test.js +0 -94
  270. package/build/__tests__/Entity-test.js.map +0 -1
  271. package/build/__tests__/EntityAssociationLoader-test.d.ts +0 -1
  272. package/build/__tests__/EntityAssociationLoader-test.js +0 -30
  273. package/build/__tests__/EntityAssociationLoader-test.js.map +0 -1
  274. package/build/__tests__/EntityCommonUseCases-test.d.ts +0 -1
  275. package/build/__tests__/EntityCommonUseCases-test.js +0 -146
  276. package/build/__tests__/EntityCommonUseCases-test.js.map +0 -1
  277. package/build/__tests__/EntityCompanion-test.d.ts +0 -1
  278. package/build/__tests__/EntityCompanion-test.js +0 -77
  279. package/build/__tests__/EntityCompanion-test.js.map +0 -1
  280. package/build/__tests__/EntityCompanionProvider-test.d.ts +0 -1
  281. package/build/__tests__/EntityCompanionProvider-test.js +0 -54
  282. package/build/__tests__/EntityCompanionProvider-test.js.map +0 -1
  283. package/build/__tests__/EntityConfiguration-test.d.ts +0 -1
  284. package/build/__tests__/EntityConfiguration-test.js +0 -103
  285. package/build/__tests__/EntityConfiguration-test.js.map +0 -1
  286. package/build/__tests__/EntityDatabaseAdapter-test.d.ts +0 -1
  287. package/build/__tests__/EntityDatabaseAdapter-test.js +0 -146
  288. package/build/__tests__/EntityDatabaseAdapter-test.js.map +0 -1
  289. package/build/__tests__/EntityEdges-test.d.ts +0 -1
  290. package/build/__tests__/EntityEdges-test.js +0 -723
  291. package/build/__tests__/EntityEdges-test.js.map +0 -1
  292. package/build/__tests__/EntityFields-test.d.ts +0 -1
  293. package/build/__tests__/EntityFields-test.js +0 -63
  294. package/build/__tests__/EntityFields-test.js.map +0 -1
  295. package/build/__tests__/EntityLoader-test.d.ts +0 -1
  296. package/build/__tests__/EntityLoader-test.js +0 -36
  297. package/build/__tests__/EntityLoader-test.js.map +0 -1
  298. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.d.ts +0 -1
  299. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js +0 -73
  300. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js.map +0 -1
  301. package/build/__tests__/EntityMutator-test.d.ts +0 -1
  302. package/build/__tests__/EntityMutator-test.js +0 -741
  303. package/build/__tests__/EntityMutator-test.js.map +0 -1
  304. package/build/__tests__/EntityPrivacyPolicy-test.d.ts +0 -1
  305. package/build/__tests__/EntityPrivacyPolicy-test.js +0 -463
  306. package/build/__tests__/EntityPrivacyPolicy-test.js.map +0 -1
  307. package/build/__tests__/EntityQueryContext-test.d.ts +0 -1
  308. package/build/__tests__/EntityQueryContext-test.js +0 -116
  309. package/build/__tests__/EntityQueryContext-test.js.map +0 -1
  310. package/build/__tests__/EntitySecondaryCacheLoader-test.d.ts +0 -1
  311. package/build/__tests__/EntitySecondaryCacheLoader-test.js +0 -60
  312. package/build/__tests__/EntitySecondaryCacheLoader-test.js.map +0 -1
  313. package/build/__tests__/EntitySelfReferentialEdges-test.d.ts +0 -1
  314. package/build/__tests__/EntitySelfReferentialEdges-test.js +0 -201
  315. package/build/__tests__/EntitySelfReferentialEdges-test.js.map +0 -1
  316. package/build/__tests__/GenericEntityCacheAdapter-test.d.ts +0 -1
  317. package/build/__tests__/GenericEntityCacheAdapter-test.js +0 -80
  318. package/build/__tests__/GenericEntityCacheAdapter-test.js.map +0 -1
  319. package/build/__tests__/ReadonlyEntity-test.d.ts +0 -1
  320. package/build/__tests__/ReadonlyEntity-test.js +0 -211
  321. package/build/__tests__/ReadonlyEntity-test.js.map +0 -1
  322. package/build/__tests__/ViewerContext-test.d.ts +0 -1
  323. package/build/__tests__/ViewerContext-test.js +0 -30
  324. package/build/__tests__/ViewerContext-test.js.map +0 -1
  325. package/build/__tests__/ViewerScopedEntityCompanion-test.d.ts +0 -1
  326. package/build/__tests__/ViewerScopedEntityCompanion-test.js +0 -20
  327. package/build/__tests__/ViewerScopedEntityCompanion-test.js.map +0 -1
  328. package/build/__tests__/ViewerScopedEntityCompanionProvider-test.d.ts +0 -1
  329. package/build/__tests__/ViewerScopedEntityCompanionProvider-test.js +0 -20
  330. package/build/__tests__/ViewerScopedEntityCompanionProvider-test.js.map +0 -1
  331. package/build/__tests__/ViewerScopedEntityLoaderFactory-test.d.ts +0 -1
  332. package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js +0 -23
  333. package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js.map +0 -1
  334. package/build/__tests__/ViewerScopedEntityMutatorFactory-test.d.ts +0 -1
  335. package/build/__tests__/ViewerScopedEntityMutatorFactory-test.js +0 -22
  336. package/build/__tests__/ViewerScopedEntityMutatorFactory-test.js.map +0 -1
  337. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.d.ts +0 -1
  338. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +0 -123
  339. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +0 -1
  340. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.d.ts +0 -1
  341. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +0 -121
  342. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js.map +0 -1
  343. package/build/__tests__/entityUtils-test.d.ts +0 -1
  344. package/build/__tests__/entityUtils-test.js +0 -87
  345. package/build/__tests__/entityUtils-test.js.map +0 -1
  346. package/build/internal/__tests__/EntityDataManager-test.d.ts +0 -1
  347. package/build/internal/__tests__/EntityDataManager-test.js +0 -373
  348. package/build/internal/__tests__/EntityDataManager-test.js.map +0 -1
  349. package/build/internal/__tests__/EntityFieldTransformationUtils-test.d.ts +0 -1
  350. package/build/internal/__tests__/EntityFieldTransformationUtils-test.js +0 -136
  351. package/build/internal/__tests__/EntityFieldTransformationUtils-test.js.map +0 -1
  352. package/build/internal/__tests__/ReadThroughEntityCache-test.d.ts +0 -1
  353. package/build/internal/__tests__/ReadThroughEntityCache-test.js +0 -206
  354. package/build/internal/__tests__/ReadThroughEntityCache-test.js.map +0 -1
  355. package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.d.ts +0 -1
  356. package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js +0 -21
  357. package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js.map +0 -1
  358. package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.d.ts +0 -1
  359. package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js +0 -21
  360. package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js.map +0 -1
  361. package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.d.ts +0 -1
  362. package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js +0 -21
  363. package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js.map +0 -1
  364. package/build/testfixtures/DateIDTestEntity.d.ts +0 -19
  365. package/build/testfixtures/DateIDTestEntity.js +0 -48
  366. package/build/testfixtures/DateIDTestEntity.js.map +0 -1
  367. package/build/testfixtures/SimpleTestEntity.d.ts +0 -20
  368. package/build/testfixtures/SimpleTestEntity.js +0 -48
  369. package/build/testfixtures/SimpleTestEntity.js.map +0 -1
  370. package/build/testfixtures/TestEntity.d.ts +0 -30
  371. package/build/testfixtures/TestEntity.js +0 -93
  372. package/build/testfixtures/TestEntity.js.map +0 -1
  373. package/build/testfixtures/TestEntity2.d.ts +0 -20
  374. package/build/testfixtures/TestEntity2.js +0 -51
  375. package/build/testfixtures/TestEntity2.js.map +0 -1
  376. package/build/testfixtures/TestEntityNumberKey.d.ts +0 -19
  377. package/build/testfixtures/TestEntityNumberKey.js +0 -48
  378. package/build/testfixtures/TestEntityNumberKey.js.map +0 -1
  379. package/build/testfixtures/TestEntityWithMutationTriggers.d.ts +0 -36
  380. package/build/testfixtures/TestEntityWithMutationTriggers.js +0 -82
  381. package/build/testfixtures/TestEntityWithMutationTriggers.js.map +0 -1
  382. package/build/testfixtures/TestViewerContext.d.ts +0 -3
  383. package/build/testfixtures/TestViewerContext.js +0 -10
  384. package/build/testfixtures/TestViewerContext.js.map +0 -1
  385. package/build/utils/__tests__/EntityPrivacyUtils-test.d.ts +0 -1
  386. package/build/utils/__tests__/EntityPrivacyUtils-test.js +0 -486
  387. package/build/utils/__tests__/EntityPrivacyUtils-test.js.map +0 -1
  388. package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.d.ts +0 -1
  389. package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js +0 -178
  390. package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js.map +0 -1
  391. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.d.ts +0 -1
  392. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js +0 -26
  393. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js.map +0 -1
  394. package/build/utils/collections/__tests__/maps-test.d.ts +0 -1
  395. package/build/utils/collections/__tests__/maps-test.js +0 -120
  396. package/build/utils/collections/__tests__/maps-test.js.map +0 -1
  397. package/build/utils/testing/PrivacyPolicyRuleTestUtils.d.ts +0 -28
  398. package/build/utils/testing/PrivacyPolicyRuleTestUtils.js +0 -52
  399. package/build/utils/testing/PrivacyPolicyRuleTestUtils.js.map +0 -1
  400. package/build/utils/testing/StubCacheAdapter.d.ts +0 -27
  401. package/build/utils/testing/StubCacheAdapter.js +0 -86
  402. package/build/utils/testing/StubCacheAdapter.js.map +0 -1
  403. package/build/utils/testing/StubDatabaseAdapter.d.ts +0 -25
  404. package/build/utils/testing/StubDatabaseAdapter.js +0 -191
  405. package/build/utils/testing/StubDatabaseAdapter.js.map +0 -1
  406. package/build/utils/testing/StubDatabaseAdapterProvider.d.ts +0 -7
  407. package/build/utils/testing/StubDatabaseAdapterProvider.js +0 -14
  408. package/build/utils/testing/StubDatabaseAdapterProvider.js.map +0 -1
  409. package/build/utils/testing/StubQueryContextProvider.d.ts +0 -7
  410. package/build/utils/testing/StubQueryContextProvider.js +0 -19
  411. package/build/utils/testing/StubQueryContextProvider.js.map +0 -1
  412. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.d.ts +0 -1
  413. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js +0 -42
  414. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js.map +0 -1
  415. package/build/utils/testing/__tests__/StubDatabaseAdapter-test.d.ts +0 -1
  416. package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js +0 -402
  417. package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js.map +0 -1
  418. package/build/utils/testing/createUnitTestEntityCompanionProvider.d.ts +0 -7
  419. package/build/utils/testing/createUnitTestEntityCompanionProvider.js +0 -36
  420. package/build/utils/testing/createUnitTestEntityCompanionProvider.js.map +0 -1
  421. package/build/utils/testing/describeFieldTestCase.d.ts +0 -2
  422. package/build/utils/testing/describeFieldTestCase.js +0 -18
  423. package/build/utils/testing/describeFieldTestCase.js.map +0 -1
  424. package/src/testfixtures/DateIDTestEntity.ts +0 -59
  425. package/src/testfixtures/TestEntityNumberKey.ts +0 -59
  426. package/src/utils/testing/StubCacheAdapter.ts +0 -122
  427. package/src/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.ts +0 -42
  428. package/src/utils/testing/__tests__/StubDatabaseAdapter-test.ts +0 -548
  429. /package/src/utils/{testing → __testfixtures__}/StubQueryContextProvider.ts +0 -0
  430. /package/src/utils/{testing → __testfixtures__}/createUnitTestEntityCompanionProvider.ts +0 -0
@@ -1,121 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const Entity_1 = __importDefault(require("../../Entity"));
7
- const EntityConfiguration_1 = __importDefault(require("../../EntityConfiguration"));
8
- const EntityFields_1 = require("../../EntityFields");
9
- const EntityPrivacyPolicy_1 = __importDefault(require("../../EntityPrivacyPolicy"));
10
- const ViewerContext_1 = __importDefault(require("../../ViewerContext"));
11
- const AlwaysAllowPrivacyPolicyRule_1 = __importDefault(require("../../rules/AlwaysAllowPrivacyPolicyRule"));
12
- const createUnitTestEntityCompanionProvider_1 = require("../../utils/testing/createUnitTestEntityCompanionProvider");
13
- describe('Two entities backed by the same table', () => {
14
- test('mutate through different types and keep consistent cache and dataloader', async () => {
15
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
16
- const viewerContext = new ViewerContext_1.default(companionProvider);
17
- const entity1 = await OneTestEntity.creator(viewerContext)
18
- .setField('fake_field', 'hello')
19
- .createAsync();
20
- expect(entity1).toBeInstanceOf(OneTestEntity);
21
- const entity2 = await TwoTestEntity.loader(viewerContext).loadByIDAsync(entity1.getID());
22
- expect(entity2).toBeInstanceOf(TwoTestEntity);
23
- const updated2 = await TwoTestEntity.updater(entity2)
24
- .setField('fake_field', 'world')
25
- .setField('other_field', 'wat')
26
- .updateAsync();
27
- expect(updated2.getAllFields()).toMatchObject({
28
- id: updated2.getID(),
29
- other_field: 'wat',
30
- fake_field: 'world',
31
- });
32
- const loaded1 = await OneTestEntity.loader(viewerContext).loadByIDAsync(entity1.getID());
33
- expect(loaded1.getAllFields()).toMatchObject({
34
- id: updated2.getID(),
35
- fake_field: 'world',
36
- });
37
- });
38
- test('cached field that differs between the two to test invalidation', async () => {
39
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
40
- const viewerContext = new ViewerContext_1.default(companionProvider);
41
- const entity = await TwoTestEntity.creator(viewerContext)
42
- .setField('fake_field', 'hello')
43
- .setField('other_field', 'huh')
44
- .createAsync();
45
- const loadedEntity = await TwoTestEntity.loader(viewerContext).loadByFieldEqualingAsync('other_field', 'huh');
46
- expect(loadedEntity?.getAllFields()).toMatchObject({
47
- id: entity.getID(),
48
- fake_field: 'hello',
49
- other_field: 'huh',
50
- });
51
- const loaded1 = await OneTestEntity.loader(viewerContext).loadByIDAsync(entity.getID());
52
- await OneTestEntity.updater(loaded1).setField('fake_field', 'world').updateAsync();
53
- const loaded2 = await TwoTestEntity.loader(viewerContext).loadByFieldEqualingAsync('other_field', 'huh');
54
- expect(loaded2?.getAllFields()).toMatchObject({
55
- id: entity.getID(),
56
- fake_field: 'world',
57
- other_field: 'huh',
58
- });
59
- const loaded22 = await TwoTestEntity.loader(viewerContext).loadByFieldEqualingAsync('fake_field', 'world');
60
- expect(loaded22?.getAllFields()).toMatchObject({
61
- id: entity.getID(),
62
- fake_field: 'world',
63
- other_field: 'huh',
64
- });
65
- });
66
- });
67
- const testEntityConfiguration = new EntityConfiguration_1.default({
68
- idField: 'id',
69
- tableName: 'entities',
70
- schema: {
71
- id: new EntityFields_1.UUIDField({
72
- columnName: 'custom_id',
73
- cache: true,
74
- }),
75
- other_field: new EntityFields_1.StringField({
76
- columnName: 'other_field',
77
- cache: true,
78
- }),
79
- fake_field: new EntityFields_1.StringField({
80
- columnName: 'fake_field',
81
- cache: true,
82
- }),
83
- },
84
- databaseAdapterFlavor: 'postgres',
85
- cacheAdapterFlavor: 'redis',
86
- });
87
- class TestEntityPrivacyPolicy extends EntityPrivacyPolicy_1.default {
88
- readRules = [
89
- new AlwaysAllowPrivacyPolicyRule_1.default(),
90
- ];
91
- createRules = [
92
- new AlwaysAllowPrivacyPolicyRule_1.default(),
93
- ];
94
- updateRules = [
95
- new AlwaysAllowPrivacyPolicyRule_1.default(),
96
- ];
97
- deleteRules = [
98
- new AlwaysAllowPrivacyPolicyRule_1.default(),
99
- ];
100
- }
101
- class OneTestEntity extends Entity_1.default {
102
- static defineCompanionDefinition() {
103
- return {
104
- entityClass: OneTestEntity,
105
- entityConfiguration: testEntityConfiguration,
106
- privacyPolicyClass: TestEntityPrivacyPolicy,
107
- entitySelectedFields: ['id', 'fake_field'],
108
- };
109
- }
110
- }
111
- class TwoTestEntity extends Entity_1.default {
112
- static defineCompanionDefinition() {
113
- return {
114
- entityClass: TwoTestEntity,
115
- entityConfiguration: testEntityConfiguration,
116
- privacyPolicyClass: TestEntityPrivacyPolicy,
117
- entitySelectedFields: ['id', 'other_field', 'fake_field'],
118
- };
119
- }
120
- }
121
- //# sourceMappingURL=TwoEntitySameTableOverlappingRows-test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TwoEntitySameTableOverlappingRows-test.js","sourceRoot":"","sources":["../../../src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,87 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const results_1 = require("@expo/results");
4
- const entityUtils_1 = require("../entityUtils");
5
- describe(entityUtils_1.enforceResultsAsync, () => {
6
- it('throws when any result is an error', async () => {
7
- const error = new Error('hi');
8
- const results = Promise.resolve([(0, results_1.result)(error), (0, results_1.result)(3)]);
9
- await expect((0, entityUtils_1.enforceResultsAsync)(results)).rejects.toEqual(error);
10
- });
11
- it('returns values when results are all value', async () => {
12
- const results = Promise.resolve([(0, results_1.result)(2), (0, results_1.result)(3)]);
13
- await expect((0, entityUtils_1.enforceResultsAsync)(results)).resolves.toEqual([2, 3]);
14
- });
15
- });
16
- describe(entityUtils_1.successfulResults, () => {
17
- it('filters out failed results', () => {
18
- const result1 = (0, results_1.result)(1);
19
- const result2 = (0, results_1.result)(new Error('hello'));
20
- const result3 = (0, results_1.result)(1);
21
- const allResults = [result1, result2, result3];
22
- expect((0, entityUtils_1.successfulResults)(allResults)).toEqual([result1, result3]);
23
- });
24
- });
25
- describe(entityUtils_1.failedResults, () => {
26
- it('filters out successful results', () => {
27
- const result1 = (0, results_1.result)(1);
28
- const result2 = (0, results_1.result)(new Error('hello'));
29
- const result3 = (0, results_1.result)(1);
30
- const allResults = [result1, result2, result3];
31
- expect((0, entityUtils_1.failedResults)(allResults)).toEqual([result2]);
32
- });
33
- });
34
- describe(entityUtils_1.successfulResultsFilterMap, () => {
35
- it('filters out failed results', () => {
36
- const result1 = (0, results_1.result)(1);
37
- const result2 = (0, results_1.result)(new Error('hello'));
38
- const result3 = (0, results_1.result)(1);
39
- const allResults = new Map(Object.entries({
40
- a: result1,
41
- b: result2,
42
- c: result3,
43
- }));
44
- const resultingMap = (0, entityUtils_1.successfulResultsFilterMap)(allResults);
45
- expect(resultingMap.get('a')).toEqual(result1);
46
- expect(resultingMap.get('b')).toBeUndefined();
47
- expect(resultingMap.get('c')).toEqual(result3);
48
- });
49
- });
50
- describe(entityUtils_1.failedResultsFilterMap, () => {
51
- it('filters out successful results', () => {
52
- const result1 = (0, results_1.result)(1);
53
- const result2 = (0, results_1.result)(new Error('hello'));
54
- const result3 = (0, results_1.result)(1);
55
- const allResults = new Map(Object.entries({
56
- a: result1,
57
- b: result2,
58
- c: result3,
59
- }));
60
- const resultingMap = (0, entityUtils_1.failedResultsFilterMap)(allResults);
61
- expect(resultingMap.get('a')).toBeUndefined();
62
- expect(resultingMap.get('b')).toEqual(result2);
63
- expect(resultingMap.get('c')).toBeUndefined();
64
- });
65
- });
66
- describe(entityUtils_1.pick, () => {
67
- it('picks specified keys', () => {
68
- const object = {
69
- a: 1,
70
- b: 2,
71
- c: 3,
72
- };
73
- expect((0, entityUtils_1.pick)(object, ['a', 'b'])).toEqual({
74
- a: 1,
75
- b: 2,
76
- });
77
- });
78
- });
79
- describe(entityUtils_1.partitionArray, () => {
80
- it('partitions array', () => {
81
- const arr = [true, false, true, true, false];
82
- const [as, bs] = (0, entityUtils_1.partitionArray)(arr, (val) => val === true);
83
- expect(as).toMatchObject([true, true, true]);
84
- expect(bs).toMatchObject([false, false]);
85
- });
86
- });
87
- //# sourceMappingURL=entityUtils-test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"entityUtils-test.js","sourceRoot":"","sources":["../../src/__tests__/entityUtils-test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,373 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- const ts_mockito_1 = require("ts-mockito");
40
- const IEntityMetricsAdapter_1 = require("../../metrics/IEntityMetricsAdapter");
41
- const NoOpEntityMetricsAdapter_1 = __importDefault(require("../../metrics/NoOpEntityMetricsAdapter"));
42
- const TestEntity_1 = __importStar(require("../../testfixtures/TestEntity"));
43
- const StubCacheAdapter_1 = require("../../utils/testing/StubCacheAdapter");
44
- const StubDatabaseAdapter_1 = __importDefault(require("../../utils/testing/StubDatabaseAdapter"));
45
- const StubQueryContextProvider_1 = __importDefault(require("../../utils/testing/StubQueryContextProvider"));
46
- const EntityDataManager_1 = __importDefault(require("../EntityDataManager"));
47
- const ReadThroughEntityCache_1 = __importDefault(require("../ReadThroughEntityCache"));
48
- const getObjects = () => new Map([
49
- [
50
- TestEntity_1.testEntityConfiguration.tableName,
51
- [
52
- {
53
- customIdField: '1',
54
- testIndexedField: 'unique1',
55
- stringField: 'hello',
56
- intField: 1,
57
- dateField: new Date(),
58
- nullableField: null,
59
- },
60
- {
61
- customIdField: '2',
62
- testIndexedField: 'unique2',
63
- stringField: 'hello',
64
- intField: 1,
65
- dateField: new Date(),
66
- nullableField: null,
67
- },
68
- {
69
- customIdField: '3',
70
- testIndexedField: 'unique3',
71
- stringField: 'world',
72
- intField: 1,
73
- dateField: new Date(),
74
- nullableField: null,
75
- },
76
- ],
77
- ],
78
- ]);
79
- describe(EntityDataManager_1.default, () => {
80
- it('loads from db with a no-cache adapter', async () => {
81
- const objects = getObjects();
82
- const dataStore = StubDatabaseAdapter_1.default.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
83
- const databaseAdapter = new StubDatabaseAdapter_1.default(TestEntity_1.testEntityConfiguration, dataStore);
84
- const cacheAdapterProvider = new StubCacheAdapter_1.NoCacheStubCacheAdapterProvider();
85
- const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
86
- const entityCache = new ReadThroughEntityCache_1.default(TestEntity_1.testEntityConfiguration, cacheAdapter);
87
- const entityDataManager = new EntityDataManager_1.default(databaseAdapter, entityCache, new StubQueryContextProvider_1.default(), new NoOpEntityMetricsAdapter_1.default(), TestEntity_1.default.name);
88
- const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
89
- const dbSpy = jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
90
- const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
91
- const entityDatas = await entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'customIdField', ['2']);
92
- expect(entityDatas.get('2')).toHaveLength(1);
93
- expect(dbSpy).toHaveBeenCalled();
94
- expect(cacheSpy).toHaveBeenCalled();
95
- dbSpy.mockClear();
96
- cacheSpy.mockClear();
97
- const entityDatas2 = await entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'testIndexedField', ['unique2', 'unique3']);
98
- expect(entityDatas2.get('unique2')).toHaveLength(1);
99
- expect(entityDatas2.get('unique3')).toHaveLength(1);
100
- expect(dbSpy).toHaveBeenCalled();
101
- expect(cacheSpy).toHaveBeenCalled();
102
- dbSpy.mockClear();
103
- cacheSpy.mockClear();
104
- });
105
- it('loads from a caching adaptor', async () => {
106
- const objects = getObjects();
107
- const dataStore = StubDatabaseAdapter_1.default.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
108
- const databaseAdapter = new StubDatabaseAdapter_1.default(TestEntity_1.testEntityConfiguration, dataStore);
109
- const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
110
- const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
111
- const entityCache = new ReadThroughEntityCache_1.default(TestEntity_1.testEntityConfiguration, cacheAdapter);
112
- const entityDataManager = new EntityDataManager_1.default(databaseAdapter, entityCache, new StubQueryContextProvider_1.default(), new NoOpEntityMetricsAdapter_1.default(), TestEntity_1.default.name);
113
- const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
114
- const dbSpy = jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
115
- const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
116
- const entityDatas = await entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'customIdField', ['1']);
117
- expect(entityDatas.get('1')).toHaveLength(1);
118
- expect(dbSpy).toHaveBeenCalled();
119
- expect(cacheSpy).toHaveBeenCalled();
120
- dbSpy.mockClear();
121
- cacheSpy.mockClear();
122
- const entityDatas2 = await entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'testIndexedField', ['unique2', 'unique3']);
123
- expect(entityDatas2.get('unique2')).toHaveLength(1);
124
- expect(entityDatas2.get('unique3')).toHaveLength(1);
125
- expect(dbSpy).toHaveBeenCalled();
126
- expect(cacheSpy).toHaveBeenCalled();
127
- dbSpy.mockClear();
128
- cacheSpy.mockClear();
129
- });
130
- it('loads from a caching adapter with a cache hit', async () => {
131
- const objects = getObjects();
132
- const dataStore = StubDatabaseAdapter_1.default.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
133
- const databaseAdapter = new StubDatabaseAdapter_1.default(TestEntity_1.testEntityConfiguration, dataStore);
134
- const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
135
- const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
136
- const entityCache = new ReadThroughEntityCache_1.default(TestEntity_1.testEntityConfiguration, cacheAdapter);
137
- const entityDataManager = new EntityDataManager_1.default(databaseAdapter, entityCache, new StubQueryContextProvider_1.default(), new NoOpEntityMetricsAdapter_1.default(), TestEntity_1.default.name);
138
- const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
139
- // use second data manager to ensure that cache is hit instead of data loader
140
- const entityDataManager2 = new EntityDataManager_1.default(databaseAdapter, entityCache, new StubQueryContextProvider_1.default(), new NoOpEntityMetricsAdapter_1.default(), TestEntity_1.default.name);
141
- const dbSpy = jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
142
- const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
143
- await entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'testIndexedField', [
144
- 'unique2',
145
- ]);
146
- await entityDataManager2.loadManyByFieldEqualingAsync(queryContext, 'testIndexedField', [
147
- 'unique2',
148
- ]);
149
- expect(dbSpy).toHaveBeenCalledTimes(1);
150
- expect(cacheSpy).toHaveBeenCalledTimes(2);
151
- dbSpy.mockReset();
152
- cacheSpy.mockReset();
153
- });
154
- it('loads from data loader for same query', async () => {
155
- const objects = getObjects();
156
- const dataStore = StubDatabaseAdapter_1.default.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
157
- const databaseAdapter = new StubDatabaseAdapter_1.default(TestEntity_1.testEntityConfiguration, dataStore);
158
- const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
159
- const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
160
- const entityCache = new ReadThroughEntityCache_1.default(TestEntity_1.testEntityConfiguration, cacheAdapter);
161
- const entityDataManager = new EntityDataManager_1.default(databaseAdapter, entityCache, new StubQueryContextProvider_1.default(), new NoOpEntityMetricsAdapter_1.default(), TestEntity_1.default.name);
162
- const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
163
- const dbSpy = jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
164
- const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
165
- await entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'testIndexedField', [
166
- 'unique2',
167
- ]);
168
- await entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'testIndexedField', [
169
- 'unique2',
170
- ]);
171
- expect(dbSpy).toHaveBeenCalledTimes(1);
172
- expect(cacheSpy).toHaveBeenCalledTimes(1);
173
- dbSpy.mockReset();
174
- cacheSpy.mockReset();
175
- });
176
- it('loads and in-memory caches (dataloader) non-unique, non-cacheable loads', async () => {
177
- const objects = getObjects();
178
- const dataStore = StubDatabaseAdapter_1.default.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
179
- const databaseAdapter = new StubDatabaseAdapter_1.default(TestEntity_1.testEntityConfiguration, dataStore);
180
- const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
181
- const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
182
- const entityCache = new ReadThroughEntityCache_1.default(TestEntity_1.testEntityConfiguration, cacheAdapter);
183
- const entityDataManager = new EntityDataManager_1.default(databaseAdapter, entityCache, new StubQueryContextProvider_1.default(), new NoOpEntityMetricsAdapter_1.default(), TestEntity_1.default.name);
184
- const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
185
- const dbSpy = jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
186
- const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
187
- const entityData = await entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'stringField', ['hello', 'world']);
188
- const entityData2 = await entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'stringField', ['hello', 'world']);
189
- expect(dbSpy).toHaveBeenCalledTimes(1);
190
- expect(cacheSpy).toHaveBeenCalledTimes(1);
191
- expect(entityData).toMatchObject(entityData2);
192
- expect(entityData.get('hello')).toHaveLength(2);
193
- expect(entityData.get('world')).toHaveLength(1);
194
- dbSpy.mockReset();
195
- cacheSpy.mockReset();
196
- });
197
- it('invalidates objects', async () => {
198
- const objects = getObjects();
199
- const dataStore = StubDatabaseAdapter_1.default.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
200
- const databaseAdapter = new StubDatabaseAdapter_1.default(TestEntity_1.testEntityConfiguration, dataStore);
201
- const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
202
- const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
203
- const entityCache = new ReadThroughEntityCache_1.default(TestEntity_1.testEntityConfiguration, cacheAdapter);
204
- const entityDataManager = new EntityDataManager_1.default(databaseAdapter, entityCache, new StubQueryContextProvider_1.default(), new NoOpEntityMetricsAdapter_1.default(), TestEntity_1.default.name);
205
- const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
206
- const objectInQuestion = objects.get(TestEntity_1.testEntityConfiguration.tableName)[1];
207
- const dbSpy = jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
208
- const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
209
- await entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'testIndexedField', [
210
- objectInQuestion['testIndexedField'],
211
- ]);
212
- await entityDataManager.invalidateObjectFieldsAsync(objectInQuestion);
213
- await entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'testIndexedField', [
214
- objectInQuestion['testIndexedField'],
215
- ]);
216
- expect(dbSpy).toHaveBeenCalledTimes(2);
217
- expect(cacheSpy).toHaveBeenCalledTimes(2);
218
- dbSpy.mockReset();
219
- cacheSpy.mockReset();
220
- });
221
- it('invalidates all fields for an object', async () => {
222
- const objects = getObjects();
223
- const dataStore = StubDatabaseAdapter_1.default.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
224
- const databaseAdapter = new StubDatabaseAdapter_1.default(TestEntity_1.testEntityConfiguration, dataStore);
225
- const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
226
- const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
227
- const entityCache = new ReadThroughEntityCache_1.default(TestEntity_1.testEntityConfiguration, cacheAdapter);
228
- const entityDataManager = new EntityDataManager_1.default(databaseAdapter, entityCache, new StubQueryContextProvider_1.default(), new NoOpEntityMetricsAdapter_1.default(), TestEntity_1.default.name);
229
- const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
230
- const objectInQuestion = objects.get(TestEntity_1.testEntityConfiguration.tableName)[1];
231
- const dbSpy = jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
232
- const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
233
- await entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'testIndexedField', [
234
- objectInQuestion['testIndexedField'],
235
- ]);
236
- await entityDataManager.invalidateObjectFieldsAsync(objectInQuestion);
237
- await entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'customIdField', [
238
- objectInQuestion['customIdField'],
239
- ]);
240
- expect(dbSpy).toHaveBeenCalledTimes(2);
241
- expect(cacheSpy).toHaveBeenCalledTimes(2);
242
- dbSpy.mockReset();
243
- cacheSpy.mockReset();
244
- });
245
- it('loads only from DB when in transaction', async () => {
246
- const objects = getObjects();
247
- const dataStore = StubDatabaseAdapter_1.default.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
248
- const databaseAdapter = new StubDatabaseAdapter_1.default(TestEntity_1.testEntityConfiguration, dataStore);
249
- const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
250
- const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
251
- const entityCache = new ReadThroughEntityCache_1.default(TestEntity_1.testEntityConfiguration, cacheAdapter);
252
- const entityDataManager = new EntityDataManager_1.default(databaseAdapter, entityCache, new StubQueryContextProvider_1.default(), new NoOpEntityMetricsAdapter_1.default(), TestEntity_1.default.name);
253
- const dbSpy = jest.spyOn(databaseAdapter, 'fetchManyWhereAsync');
254
- const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
255
- const entityDatas = await new StubQueryContextProvider_1.default().runInTransactionAsync(async (queryContext) => {
256
- return await entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'customIdField', [
257
- '1',
258
- ]);
259
- }, {});
260
- expect(entityDatas.get('1')).toHaveLength(1);
261
- expect(dbSpy).toHaveBeenCalled();
262
- expect(cacheSpy).not.toHaveBeenCalled();
263
- dbSpy.mockReset();
264
- cacheSpy.mockReset();
265
- });
266
- it('loads by field equality conjunction and does not cache', async () => {
267
- const objects = getObjects();
268
- const dataStore = StubDatabaseAdapter_1.default.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
269
- const databaseAdapter = new StubDatabaseAdapter_1.default(TestEntity_1.testEntityConfiguration, dataStore);
270
- const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
271
- const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
272
- const entityCache = new ReadThroughEntityCache_1.default(TestEntity_1.testEntityConfiguration, cacheAdapter);
273
- const entityDataManager = new EntityDataManager_1.default(databaseAdapter, entityCache, new StubQueryContextProvider_1.default(), new NoOpEntityMetricsAdapter_1.default(), TestEntity_1.default.name);
274
- const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
275
- const dbSpy = jest.spyOn(databaseAdapter, 'fetchManyByFieldEqualityConjunctionAsync');
276
- const cacheSpy = jest.spyOn(entityCache, 'readManyThroughAsync');
277
- const entityDatas = await entityDataManager.loadManyByFieldEqualityConjunctionAsync(queryContext, [
278
- {
279
- fieldName: 'stringField',
280
- fieldValue: 'hello',
281
- },
282
- {
283
- fieldName: 'intField',
284
- fieldValue: 1,
285
- },
286
- ], {});
287
- expect(entityDatas).toHaveLength(2);
288
- expect(dbSpy).toHaveBeenCalled();
289
- expect(cacheSpy).not.toHaveBeenCalled();
290
- dbSpy.mockReset();
291
- cacheSpy.mockReset();
292
- });
293
- it('handles DB errors as expected', async () => {
294
- const databaseAdapterMock = (0, ts_mockito_1.mock)();
295
- (0, ts_mockito_1.when)(databaseAdapterMock.fetchManyWhereAsync((0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)())).thenReject(new Error('DB query failed'));
296
- const databaseAdapter = (0, ts_mockito_1.instance)(databaseAdapterMock);
297
- const cacheAdapterProvider = new StubCacheAdapter_1.NoCacheStubCacheAdapterProvider();
298
- const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
299
- const entityCache = new ReadThroughEntityCache_1.default(TestEntity_1.testEntityConfiguration, cacheAdapter);
300
- const entityDataManager = new EntityDataManager_1.default(databaseAdapter, entityCache, new StubQueryContextProvider_1.default(), new NoOpEntityMetricsAdapter_1.default(), TestEntity_1.default.name);
301
- const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
302
- await expect(entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'customIdField', ['2'])).rejects.toThrow();
303
- });
304
- it('records metrics appropriately', async () => {
305
- const metricsAdapterMock = (0, ts_mockito_1.mock)();
306
- const metricsAdapter = (0, ts_mockito_1.instance)(metricsAdapterMock);
307
- const objects = getObjects();
308
- const dataStore = StubDatabaseAdapter_1.default.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
309
- const databaseAdapter = new StubDatabaseAdapter_1.default(TestEntity_1.testEntityConfiguration, dataStore);
310
- const cacheAdapterProvider = new StubCacheAdapter_1.InMemoryFullCacheStubCacheAdapterProvider();
311
- const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
312
- const entityCache = new ReadThroughEntityCache_1.default(TestEntity_1.testEntityConfiguration, cacheAdapter);
313
- const entityDataManager = new EntityDataManager_1.default(databaseAdapter, entityCache, new StubQueryContextProvider_1.default(), metricsAdapter, TestEntity_1.default.name);
314
- const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
315
- await entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'customIdField', ['1']);
316
- (0, ts_mockito_1.verify)(metricsAdapterMock.logDataManagerLoadEvent((0, ts_mockito_1.objectContaining)({
317
- type: IEntityMetricsAdapter_1.EntityMetricsLoadType.LOAD_MANY,
318
- entityClassName: TestEntity_1.default.name,
319
- count: 1,
320
- }))).once();
321
- await entityDataManager.loadManyByFieldEqualityConjunctionAsync(queryContext, [
322
- {
323
- fieldName: 'customIdField',
324
- fieldValue: '1',
325
- },
326
- ], {});
327
- (0, ts_mockito_1.verify)(metricsAdapterMock.logDataManagerLoadEvent((0, ts_mockito_1.objectContaining)({
328
- type: IEntityMetricsAdapter_1.EntityMetricsLoadType.LOAD_MANY_EQUALITY_CONJUNCTION,
329
- entityClassName: TestEntity_1.default.name,
330
- count: 1,
331
- }))).once();
332
- (0, ts_mockito_1.verify)(metricsAdapterMock.incrementDataManagerLoadCount((0, ts_mockito_1.deepEqual)({
333
- type: IEntityMetricsAdapter_1.IncrementLoadCountEventType.DATALOADER,
334
- fieldValueCount: 1,
335
- entityClassName: TestEntity_1.default.name,
336
- }))).once();
337
- (0, ts_mockito_1.verify)(metricsAdapterMock.incrementDataManagerLoadCount((0, ts_mockito_1.deepEqual)({
338
- type: IEntityMetricsAdapter_1.IncrementLoadCountEventType.CACHE,
339
- fieldValueCount: 1,
340
- entityClassName: TestEntity_1.default.name,
341
- }))).once();
342
- (0, ts_mockito_1.verify)(metricsAdapterMock.incrementDataManagerLoadCount((0, ts_mockito_1.deepEqual)({
343
- type: IEntityMetricsAdapter_1.IncrementLoadCountEventType.DATABASE,
344
- fieldValueCount: 1,
345
- entityClassName: TestEntity_1.default.name,
346
- }))).once();
347
- (0, ts_mockito_1.resetCalls)(metricsAdapterMock);
348
- const databaseAdapterSpy = (0, ts_mockito_1.spy)(databaseAdapter);
349
- (0, ts_mockito_1.when)(databaseAdapterSpy.fetchManyByRawWhereClauseAsync((0, ts_mockito_1.anything)(), (0, ts_mockito_1.anyString)(), (0, ts_mockito_1.anything)(), (0, ts_mockito_1.anything)())).thenResolve([]);
350
- await entityDataManager.loadManyByRawWhereClauseAsync(queryContext, '', [], {});
351
- (0, ts_mockito_1.verify)(metricsAdapterMock.logDataManagerLoadEvent((0, ts_mockito_1.objectContaining)({
352
- type: IEntityMetricsAdapter_1.EntityMetricsLoadType.LOAD_MANY_RAW,
353
- entityClassName: TestEntity_1.default.name,
354
- count: 0,
355
- }))).once();
356
- (0, ts_mockito_1.verify)(metricsAdapterMock.incrementDataManagerLoadCount((0, ts_mockito_1.anything)())).never();
357
- });
358
- it('throws when a load-by value is null or undefined', async () => {
359
- const objects = getObjects();
360
- const dataStore = StubDatabaseAdapter_1.default.convertFieldObjectsToDataStore(TestEntity_1.testEntityConfiguration, objects);
361
- const databaseAdapter = new StubDatabaseAdapter_1.default(TestEntity_1.testEntityConfiguration, dataStore);
362
- const cacheAdapterProvider = new StubCacheAdapter_1.NoCacheStubCacheAdapterProvider();
363
- const cacheAdapter = cacheAdapterProvider.getCacheAdapter(TestEntity_1.testEntityConfiguration);
364
- const entityCache = new ReadThroughEntityCache_1.default(TestEntity_1.testEntityConfiguration, cacheAdapter);
365
- const entityDataManager = new EntityDataManager_1.default(databaseAdapter, entityCache, new StubQueryContextProvider_1.default(), new NoOpEntityMetricsAdapter_1.default(), TestEntity_1.default.name);
366
- const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
367
- await expect(entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'nullableField', [null])).rejects.toThrowError('Invalid load: TestEntity (nullableField = null)');
368
- await expect(entityDataManager.loadManyByFieldEqualingAsync(queryContext, 'nullableField', [
369
- undefined,
370
- ])).rejects.toThrowError('Invalid load: TestEntity (nullableField = undefined)');
371
- });
372
- });
373
- //# sourceMappingURL=EntityDataManager-test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EntityDataManager-test.js","sourceRoot":"","sources":["../../../src/internal/__tests__/EntityDataManager-test.ts"],"names":[],"mappings":"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"}