@expo/entity 0.41.0 → 0.43.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
@@ -0,0 +1,119 @@
1
+ import { ISerializable, SerializableKeyMap } from '../SerializableKeyMap';
2
+
3
+ describe(SerializableKeyMap, () => {
4
+ it('behaves as a Map/ReadonlyMap', () => {
5
+ const map = new TestSerializableKeyMap();
6
+ expect(map.size).toBe(0);
7
+ expect(map.has(new TestSerializableKey('key'))).toBe(false);
8
+ expect(map.get(new TestSerializableKey('key'))).toBe(undefined);
9
+
10
+ map.set(new TestSerializableKey('key'), 'value');
11
+ expect(map.size).toBe(1);
12
+ expect(map.has(new TestSerializableKey('key'))).toBe(true);
13
+ expect(map.get(new TestSerializableKey('key'))).toBe('value');
14
+
15
+ map.delete(new TestSerializableKey('key'));
16
+ expect(map.size).toBe(0);
17
+ expect(map.has(new TestSerializableKey('key'))).toBe(false);
18
+ expect(map.get(new TestSerializableKey('key'))).toBe(undefined);
19
+
20
+ map.set(new TestSerializableKey('key'), 'value');
21
+ expect(map.size).toBe(1);
22
+ map.clear();
23
+ expect(map.size).toBe(0);
24
+ expect(map.get(new TestSerializableKey('key'))).toBe(undefined);
25
+
26
+ map.set(new TestSerializableKey('key'), 'value');
27
+ map.set(new TestSerializableKey('key'), 'value');
28
+ expect(map.size).toBe(1);
29
+
30
+ map.set(new TestSerializableKey('key2'), 'value2');
31
+ expect(map.size).toBe(2);
32
+
33
+ // check keys ordering based on insertion order
34
+ const keys = Array.from(map.keys());
35
+ expect(keys.length).toBe(2);
36
+ expect(keys[0]!.value).toBe('key');
37
+ expect(keys[1]!.value).toBe('key2');
38
+
39
+ // check values ordering based on insertion order
40
+ const values = Array.from(map.values());
41
+ expect(values.length).toBe(2);
42
+ expect(values[0]).toBe('value');
43
+ expect(values[1]).toBe('value2');
44
+
45
+ // check entries ordering based on insertion order
46
+ const entries = Array.from(map.entries());
47
+ expect(entries.length).toBe(2);
48
+ expect(entries[0]![0].value).toBe('key');
49
+ expect(entries[0]![1]).toBe('value');
50
+ expect(entries[1]![0].value).toBe('key2');
51
+ expect(entries[1]![1]).toBe('value2');
52
+
53
+ // check forEach ordering based on insertion order
54
+ const forEachEntries: [TestSerializableKey, string][] = [];
55
+ map.forEach((value, key) => {
56
+ forEachEntries.push([key, value]);
57
+ });
58
+ expect(forEachEntries.length).toBe(2);
59
+ expect(forEachEntries[0]![0].value).toBe('key');
60
+ expect(forEachEntries[0]![1]).toBe('value');
61
+ expect(forEachEntries[1]![0].value).toBe('key2');
62
+ expect(forEachEntries[1]![1]).toBe('value2');
63
+
64
+ // check iterator ordering based on insertion order
65
+ const iteratorEntries = Array.from(map);
66
+ expect(iteratorEntries.length).toBe(2);
67
+ expect(iteratorEntries[0]![0].value).toBe('key');
68
+ expect(iteratorEntries[0]![1]).toBe('value');
69
+ expect(iteratorEntries[1]![0].value).toBe('key2');
70
+ expect(iteratorEntries[1]![1]).toBe('value2');
71
+ });
72
+
73
+ it('constructs with values', () => {
74
+ const map = new TestSerializableKeyMap([
75
+ [new TestSerializableKey('key'), 'value'],
76
+ [new TestSerializableKey('key2'), 'value2'],
77
+ ]);
78
+ expect(map.size).toBe(2);
79
+ expect(map.get(new TestSerializableKey('key'))).toBe('value');
80
+ expect(map.get(new TestSerializableKey('key2'))).toBe('value2');
81
+
82
+ const keys = Array.from(map.keys());
83
+ expect(keys.length).toBe(2);
84
+ expect(keys[0]!.value).toBe('key');
85
+ expect(keys[1]!.value).toBe('key2');
86
+ });
87
+
88
+ it('has correct toStringTag', () => {
89
+ const map = new TestSerializableKeyMap();
90
+ expect(Object.prototype.toString.call(map)).toBe('[object SerializableKeyMap]');
91
+ });
92
+ });
93
+
94
+ declare const TestSerializableKeySerializedBrand: unique symbol;
95
+ export type SerializedTestSerializableKey = string & {
96
+ readonly [TestSerializableKeySerializedBrand]: true;
97
+ };
98
+
99
+ class TestSerializableKey implements ISerializable<SerializedTestSerializableKey> {
100
+ constructor(public readonly value: string) {}
101
+
102
+ serialize(): SerializedTestSerializableKey {
103
+ return JSON.stringify(this.value) as SerializedTestSerializableKey;
104
+ }
105
+
106
+ static deserialize(serialized: SerializedTestSerializableKey): TestSerializableKey {
107
+ return new TestSerializableKey(JSON.parse(serialized));
108
+ }
109
+ }
110
+
111
+ class TestSerializableKeyMap extends SerializableKeyMap<
112
+ SerializedTestSerializableKey,
113
+ TestSerializableKey,
114
+ string
115
+ > {
116
+ protected deserializeKey(serializedKey: SerializedTestSerializableKey): TestSerializableKey {
117
+ return TestSerializableKey.deserialize(serializedKey);
118
+ }
119
+ }
@@ -0,0 +1,17 @@
1
+ import { areSetsEqual } from '../sets';
2
+
3
+ describe(areSetsEqual, () => {
4
+ it.each([
5
+ [new Set([1, 2]), new Set([1, 2])],
6
+ [new Set([1, 2]), new Set([2, 1])],
7
+ ])('equal cases: %p', (a, b) => {
8
+ expect(areSetsEqual(a, b)).toBe(true);
9
+ });
10
+
11
+ it.each([
12
+ [new Set([1, 2, 3]), new Set([1, 2])],
13
+ [new Set([1, 2]), new Set([1, 2, 3])],
14
+ ])('non-equal cases: %p', (a, b) => {
15
+ expect(areSetsEqual(a, b)).toBe(false);
16
+ });
17
+ });
@@ -30,7 +30,7 @@ export const mapMap = <K, V, M>(
30
30
  map: ReadonlyMap<K, V>,
31
31
  mapper: (value: V, key: K) => M,
32
32
  ): Map<K, M> => {
33
- const resultingMap = new Map();
33
+ const resultingMap = new Map<K, M>();
34
34
  for (const [k, v] of map) {
35
35
  resultingMap.set(k, mapper(v, k));
36
36
  }
@@ -47,7 +47,7 @@ export const mapMapAsync = async function <K, V, M>(
47
47
  map: ReadonlyMap<K, V>,
48
48
  mapper: (value: V, key: K) => Promise<M>,
49
49
  ): Promise<Map<K, M>> {
50
- const resultingMap: Map<K, M> = new Map();
50
+ const resultingMap = new Map<K, M>();
51
51
  await Promise.all(
52
52
  Array.from(map.keys()).map(async (k) => {
53
53
  const initialValue = map.get(k) as V;
@@ -71,7 +71,7 @@ export const mapKeys = <K, V, K2>(
71
71
  map: ReadonlyMap<K, V>,
72
72
  mapper: (key: K, value: V) => K2,
73
73
  ): Map<K2, V> => {
74
- const resultingMap = new Map();
74
+ const resultingMap = new Map<K2, V>();
75
75
  for (const [k, v] of map) {
76
76
  resultingMap.set(mapper(k, v), v);
77
77
  }
@@ -94,10 +94,9 @@ export const zipToMap = <K, V>(keys: readonly K[], values: readonly V[]): Map<K,
94
94
  keys.length === values.length,
95
95
  `zipToMap input length mismatch: keys[${keys.length}], values[${values.length}]`,
96
96
  );
97
- const resultingMap = new Map();
97
+ const resultingMap = new Map<K, V>();
98
98
  for (let i = 0; i < keys.length; i++) {
99
- const key = keys[i];
100
- resultingMap.set(key, values[i]);
99
+ resultingMap.set(keys[i]!, values[i]!);
101
100
  }
102
101
  return resultingMap;
103
102
  };
@@ -108,7 +107,7 @@ export const zipToMap = <K, V>(keys: readonly K[], values: readonly V[]): Map<K,
108
107
  * @param map - map to invert
109
108
  */
110
109
  export const invertMap = <K, V>(map: ReadonlyMap<K, V>): Map<V, K> => {
111
- const resultingMap = new Map();
110
+ const resultingMap = new Map<V, K>();
112
111
  for (const [k, v] of map) {
113
112
  resultingMap.set(v, k);
114
113
  }
@@ -185,7 +184,7 @@ export function filterMap<K, V>(
185
184
  map: ReadonlyMap<K, V>,
186
185
  predicate: (value: V, key: K) => unknown,
187
186
  ): Map<K, V> {
188
- const resultingMap = new Map();
187
+ const resultingMap = new Map<K, V>();
189
188
  map.forEach((v, k) => {
190
189
  if (predicate(v, k)) {
191
190
  resultingMap.set(k, v);
@@ -0,0 +1,3 @@
1
+ export function areSetsEqual<T>(a: ReadonlySet<T>, b: ReadonlySet<T>): boolean {
2
+ return a.size === b.size && [...a].every((value) => b.has(value));
3
+ }
@@ -7,20 +7,20 @@ function nonNullish<TValue>(value: TValue | null | undefined): value is NonNulla
7
7
  }
8
8
 
9
9
  export function mergeEntityMutationTriggerConfigurations<
10
- TFields extends object,
11
- TID extends NonNullable<TFields[TSelectedFields]>,
10
+ TFields extends Record<string, any>,
11
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
12
12
  TViewerContext extends ViewerContext,
13
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
13
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
14
14
  TSelectedFields extends keyof TFields,
15
15
  >(
16
16
  ...mutationTriggerConfigurations: EntityMutationTriggerConfiguration<
17
17
  TFields,
18
- TID,
18
+ TIDField,
19
19
  TViewerContext,
20
20
  TEntity,
21
21
  TSelectedFields
22
22
  >[]
23
- ): EntityMutationTriggerConfiguration<TFields, TID, TViewerContext, TEntity, TSelectedFields> {
23
+ ): EntityMutationTriggerConfiguration<TFields, TIDField, TViewerContext, TEntity, TSelectedFields> {
24
24
  const merged = {
25
25
  beforeCreate: mutationTriggerConfigurations.flatMap((c) => c.beforeCreate).filter(nonNullish),
26
26
  afterCreate: mutationTriggerConfigurations.flatMap((c) => c.afterCreate).filter(nonNullish),
@@ -1,242 +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 results_1 = require("@expo/results");
7
- const uuid_1 = require("uuid");
8
- const AuthorizationResultBasedEntityAssociationLoader_1 = __importDefault(require("../AuthorizationResultBasedEntityAssociationLoader"));
9
- const entityUtils_1 = require("../entityUtils");
10
- const TestEntity_1 = __importDefault(require("../testfixtures/TestEntity"));
11
- const TestEntity2_1 = __importDefault(require("../testfixtures/TestEntity2"));
12
- const TestViewerContext_1 = __importDefault(require("../testfixtures/TestViewerContext"));
13
- const createUnitTestEntityCompanionProvider_1 = require("../utils/testing/createUnitTestEntityCompanionProvider");
14
- describe(AuthorizationResultBasedEntityAssociationLoader_1.default, () => {
15
- describe('loadAssociatedEntityAsync', () => {
16
- it('loads associated entities by ID and correctly handles a null value', async () => {
17
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
18
- const viewerContext = new TestViewerContext_1.default(companionProvider);
19
- const testOtherEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creatorWithAuthorizationResults(viewerContext).createAsync());
20
- const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creatorWithAuthorizationResults(viewerContext)
21
- .setField('stringField', testOtherEntity.getID())
22
- .createAsync());
23
- const loadedOther = await (0, results_1.enforceAsyncResult)(testEntity
24
- .associationLoaderWithAuthorizationResults()
25
- .loadAssociatedEntityAsync('stringField', TestEntity_1.default));
26
- expect(loadedOther.getID()).toEqual(testOtherEntity.getID());
27
- const loadedOther2 = await (0, results_1.enforceAsyncResult)(testEntity
28
- .associationLoaderWithAuthorizationResults()
29
- .loadAssociatedEntityAsync('nullableField', TestEntity_1.default));
30
- expect(loadedOther2).toBeNull();
31
- });
32
- });
33
- describe('loadManyAssociatedEntitiesAsync', () => {
34
- it('loads many associated entities referencing this entity', async () => {
35
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
36
- const viewerContext = new TestViewerContext_1.default(companionProvider);
37
- const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creatorWithAuthorizationResults(viewerContext).createAsync());
38
- const testOtherEntity1 = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creatorWithAuthorizationResults(viewerContext)
39
- .setField('stringField', testEntity.getID())
40
- .createAsync());
41
- const testOtherEntity2 = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creatorWithAuthorizationResults(viewerContext)
42
- .setField('stringField', testEntity.getID())
43
- .createAsync());
44
- const loaded = await (0, entityUtils_1.enforceResultsAsync)(testEntity
45
- .associationLoaderWithAuthorizationResults()
46
- .loadManyAssociatedEntitiesAsync(TestEntity_1.default, 'stringField'));
47
- expect(loaded).toHaveLength(2);
48
- expect(loaded.find((e) => e.getID() === testOtherEntity1.getID())).not.toBeUndefined();
49
- expect(loaded.find((e) => e.getID() === testOtherEntity2.getID())).not.toBeUndefined();
50
- });
51
- });
52
- describe('loadAssociatedEntityByFieldEqualingAsync', () => {
53
- it('loads associated entity by field equaling', async () => {
54
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
55
- const viewerContext = new TestViewerContext_1.default(companionProvider);
56
- const testOtherEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creatorWithAuthorizationResults(viewerContext).createAsync());
57
- const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creatorWithAuthorizationResults(viewerContext)
58
- .setField('stringField', testOtherEntity.getID())
59
- .createAsync());
60
- const loadedOtherResult = await testEntity
61
- .associationLoaderWithAuthorizationResults()
62
- .loadAssociatedEntityByFieldEqualingAsync('stringField', TestEntity_1.default, 'customIdField');
63
- expect(loadedOtherResult?.enforceValue().getID()).toEqual(testOtherEntity.getID());
64
- });
65
- it('returns null when loading associated entities by field equaling a non existent association', async () => {
66
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
67
- const viewerContext = new TestViewerContext_1.default(companionProvider);
68
- const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creatorWithAuthorizationResults(viewerContext)
69
- .setField('stringField', (0, uuid_1.v4)())
70
- .createAsync());
71
- const loadedOtherResult = await testEntity
72
- .associationLoaderWithAuthorizationResults()
73
- .loadAssociatedEntityByFieldEqualingAsync('stringField', TestEntity_1.default, 'customIdField');
74
- expect(loadedOtherResult).toBeNull();
75
- });
76
- it('returns null when load-by field is null', async () => {
77
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
78
- const viewerContext = new TestViewerContext_1.default(companionProvider);
79
- const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creatorWithAuthorizationResults(viewerContext)
80
- .setField('stringField', 'blah')
81
- .createAsync());
82
- const loadedOtherResult = await testEntity
83
- .associationLoaderWithAuthorizationResults()
84
- .loadAssociatedEntityByFieldEqualingAsync('nullableField', TestEntity_1.default, 'customIdField');
85
- expect(loadedOtherResult).toBeNull();
86
- });
87
- });
88
- describe('loadManyAssociatedEntitiesByFieldEqualingAsync', () => {
89
- it('loads many associated entities by field equaling', async () => {
90
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
91
- const viewerContext = new TestViewerContext_1.default(companionProvider);
92
- const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creatorWithAuthorizationResults(viewerContext).createAsync());
93
- const testOtherEntity1 = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creatorWithAuthorizationResults(viewerContext)
94
- .setField('stringField', testEntity.getID())
95
- .createAsync());
96
- const testOtherEntity2 = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creatorWithAuthorizationResults(viewerContext)
97
- .setField('stringField', testEntity.getID())
98
- .createAsync());
99
- const loaded = await (0, entityUtils_1.enforceResultsAsync)(testEntity
100
- .associationLoaderWithAuthorizationResults()
101
- .loadManyAssociatedEntitiesByFieldEqualingAsync('customIdField', TestEntity_1.default, 'stringField'));
102
- expect(loaded).toHaveLength(2);
103
- expect(loaded.find((e) => e.getID() === testOtherEntity1.getID())).not.toBeUndefined();
104
- expect(loaded.find((e) => e.getID() === testOtherEntity2.getID())).not.toBeUndefined();
105
- });
106
- it('returns empty results when field being queried by is null', async () => {
107
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
108
- const viewerContext = new TestViewerContext_1.default(companionProvider);
109
- const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creatorWithAuthorizationResults(viewerContext).createAsync());
110
- const loaded = await (0, entityUtils_1.enforceResultsAsync)(testEntity
111
- .associationLoaderWithAuthorizationResults()
112
- .loadManyAssociatedEntitiesByFieldEqualingAsync('nullableField', TestEntity_1.default, 'stringField'));
113
- expect(loaded).toHaveLength(0);
114
- });
115
- });
116
- describe('loadAssociatedEntityThroughAsync', () => {
117
- it('chain loads associated entities', async () => {
118
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
119
- const viewerContext = new TestViewerContext_1.default(companionProvider);
120
- const testEntity4 = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creatorWithAuthorizationResults(viewerContext).createAsync());
121
- const testEntity3 = await (0, results_1.enforceAsyncResult)(TestEntity2_1.default.creatorWithAuthorizationResults(viewerContext)
122
- .setField('foreignKey', testEntity4.getID())
123
- .createAsync());
124
- const testEntity2 = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creatorWithAuthorizationResults(viewerContext)
125
- .setField('testIndexedField', testEntity3.getID())
126
- .createAsync());
127
- const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity2_1.default.creatorWithAuthorizationResults(viewerContext)
128
- .setField('foreignKey', testEntity2.getID())
129
- .createAsync());
130
- const loaded2Result = await testEntity
131
- .associationLoaderWithAuthorizationResults()
132
- .loadAssociatedEntityThroughAsync([
133
- {
134
- associatedEntityClass: TestEntity_1.default,
135
- fieldIdentifyingAssociatedEntity: 'foreignKey',
136
- },
137
- ]);
138
- expect(loaded2Result?.enforceValue().getID()).toEqual(testEntity2.getID());
139
- const loaded3Result = await testEntity
140
- .associationLoaderWithAuthorizationResults()
141
- .loadAssociatedEntityThroughAsync([
142
- {
143
- associatedEntityClass: TestEntity_1.default,
144
- fieldIdentifyingAssociatedEntity: 'foreignKey',
145
- },
146
- {
147
- associatedEntityClass: TestEntity2_1.default,
148
- fieldIdentifyingAssociatedEntity: 'testIndexedField',
149
- },
150
- ]);
151
- expect(loaded3Result?.enforceValue().getID()).toEqual(testEntity3.getID());
152
- const loaded4Result = await testEntity
153
- .associationLoaderWithAuthorizationResults()
154
- .loadAssociatedEntityThroughAsync([
155
- {
156
- associatedEntityClass: TestEntity_1.default,
157
- fieldIdentifyingAssociatedEntity: 'foreignKey',
158
- },
159
- {
160
- associatedEntityClass: TestEntity2_1.default,
161
- fieldIdentifyingAssociatedEntity: 'testIndexedField',
162
- },
163
- {
164
- associatedEntityClass: TestEntity_1.default,
165
- fieldIdentifyingAssociatedEntity: 'foreignKey',
166
- },
167
- ]);
168
- expect(loaded4Result?.enforceValue().getID()).toEqual(testEntity4.getID());
169
- });
170
- it('fails when chain loading associated entity fails', async () => {
171
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
172
- const viewerContext = new TestViewerContext_1.default(companionProvider);
173
- const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity2_1.default.creatorWithAuthorizationResults(viewerContext)
174
- .setField('foreignKey', (0, uuid_1.v4)())
175
- .createAsync());
176
- const loadResult = await testEntity
177
- .associationLoaderWithAuthorizationResults()
178
- .loadAssociatedEntityThroughAsync([
179
- {
180
- associatedEntityClass: TestEntity_1.default,
181
- fieldIdentifyingAssociatedEntity: 'foreignKey',
182
- },
183
- ]);
184
- expect(loadResult?.ok).toBe(false);
185
- });
186
- it('supports chain loading by field equality', async () => {
187
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
188
- const viewerContext = new TestViewerContext_1.default(companionProvider);
189
- const fieldValue = (0, uuid_1.v4)();
190
- const testEntity2 = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creatorWithAuthorizationResults(viewerContext)
191
- .setField('stringField', fieldValue)
192
- .createAsync());
193
- const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity2_1.default.creatorWithAuthorizationResults(viewerContext)
194
- .setField('foreignKey', fieldValue)
195
- .createAsync());
196
- const loaded2Result = await testEntity
197
- .associationLoaderWithAuthorizationResults()
198
- .loadAssociatedEntityThroughAsync([
199
- {
200
- associatedEntityClass: TestEntity_1.default,
201
- fieldIdentifyingAssociatedEntity: 'foreignKey',
202
- associatedEntityLookupByField: 'stringField',
203
- },
204
- ]);
205
- expect(loaded2Result?.enforceValue().getID()).toEqual(testEntity2.getID());
206
- });
207
- it('returns null when chain loading by field equality returns null', async () => {
208
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
209
- const viewerContext = new TestViewerContext_1.default(companionProvider);
210
- const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity2_1.default.creatorWithAuthorizationResults(viewerContext)
211
- .setField('foreignKey', (0, uuid_1.v4)())
212
- .createAsync());
213
- const loaded2Result = await testEntity
214
- .associationLoaderWithAuthorizationResults()
215
- .loadAssociatedEntityThroughAsync([
216
- {
217
- associatedEntityClass: TestEntity_1.default,
218
- fieldIdentifyingAssociatedEntity: 'foreignKey',
219
- associatedEntityLookupByField: 'stringField',
220
- },
221
- ]);
222
- expect(loaded2Result).toBeNull();
223
- });
224
- it('returns null when chain loading by field is null', async () => {
225
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
226
- const viewerContext = new TestViewerContext_1.default(companionProvider);
227
- const testEntity = await (0, results_1.enforceAsyncResult)(TestEntity_1.default.creatorWithAuthorizationResults(viewerContext)
228
- .setField('nullableField', null)
229
- .createAsync());
230
- const loadedResult = await testEntity
231
- .associationLoaderWithAuthorizationResults()
232
- .loadAssociatedEntityThroughAsync([
233
- {
234
- associatedEntityClass: TestEntity_1.default,
235
- fieldIdentifyingAssociatedEntity: 'nullableField',
236
- },
237
- ]);
238
- expect(loadedResult).toBeNull();
239
- });
240
- });
241
- });
242
- //# sourceMappingURL=AuthorizationResultBasedEntityAssociationLoader-test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthorizationResultBasedEntityAssociationLoader-test.js","sourceRoot":"","sources":["../../src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- import Entity from '../Entity';
2
- import { EntityCompanionDefinition } from '../EntityCompanionProvider';
3
- import EntityConfiguration from '../EntityConfiguration';
4
- import EntityPrivacyPolicy from '../EntityPrivacyPolicy';
5
- import ViewerContext from '../ViewerContext';
6
- import AlwaysAllowPrivacyPolicyRule from '../rules/AlwaysAllowPrivacyPolicyRule';
7
- export type TestFields = {
8
- id: string;
9
- };
10
- export type TestFieldSelection = keyof TestFields;
11
- export declare const testEntityConfiguration: EntityConfiguration<TestFields>;
12
- export declare class TestEntityPrivacyPolicy extends EntityPrivacyPolicy<TestFields, string, ViewerContext, TestEntity, TestFieldSelection> {
13
- protected readonly readRules: AlwaysAllowPrivacyPolicyRule<TestFields, string, ViewerContext, TestEntity, "id">[];
14
- protected readonly createRules: AlwaysAllowPrivacyPolicyRule<TestFields, string, ViewerContext, TestEntity, "id">[];
15
- protected readonly updateRules: AlwaysAllowPrivacyPolicyRule<TestFields, string, ViewerContext, TestEntity, "id">[];
16
- protected readonly deleteRules: AlwaysAllowPrivacyPolicyRule<TestFields, string, ViewerContext, TestEntity, "id">[];
17
- }
18
- export default class TestEntity extends Entity<TestFields, string, ViewerContext, TestFieldSelection> {
19
- constructor(constructorParams: {
20
- viewerContext: ViewerContext;
21
- id: string;
22
- databaseFields: Readonly<TestFields>;
23
- selectedFields: Readonly<TestFields>;
24
- });
25
- static defineCompanionDefinition(): EntityCompanionDefinition<TestFields, string, ViewerContext, TestEntity, TestEntityPrivacyPolicy, TestFieldSelection>;
26
- }
@@ -1,110 +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
- exports.TestEntityPrivacyPolicy = exports.testEntityConfiguration = void 0;
7
- const ts_mockito_1 = require("ts-mockito");
8
- const AuthorizationResultBasedEntityLoader_1 = __importDefault(require("../AuthorizationResultBasedEntityLoader"));
9
- const Entity_1 = __importDefault(require("../Entity"));
10
- const EntityConfiguration_1 = __importDefault(require("../EntityConfiguration"));
11
- const EntityFields_1 = require("../EntityFields");
12
- const EntityLoaderUtils_1 = __importDefault(require("../EntityLoaderUtils"));
13
- const EntityPrivacyPolicy_1 = __importDefault(require("../EntityPrivacyPolicy"));
14
- const ViewerContext_1 = __importDefault(require("../ViewerContext"));
15
- const EntityDataManager_1 = __importDefault(require("../internal/EntityDataManager"));
16
- const ReadThroughEntityCache_1 = __importDefault(require("../internal/ReadThroughEntityCache"));
17
- const AlwaysAllowPrivacyPolicyRule_1 = __importDefault(require("../rules/AlwaysAllowPrivacyPolicyRule"));
18
- const StubCacheAdapter_1 = require("../utils/testing/StubCacheAdapter");
19
- const StubDatabaseAdapter_1 = __importDefault(require("../utils/testing/StubDatabaseAdapter"));
20
- const StubQueryContextProvider_1 = __importDefault(require("../utils/testing/StubQueryContextProvider"));
21
- exports.testEntityConfiguration = new EntityConfiguration_1.default({
22
- idField: 'id',
23
- tableName: 'test_entity_should_not_write_to_db',
24
- schema: {
25
- id: new EntityFields_1.StringField({
26
- columnName: 'id',
27
- }),
28
- },
29
- databaseAdapterFlavor: 'postgres',
30
- cacheAdapterFlavor: 'redis',
31
- });
32
- class TestEntityPrivacyPolicy extends EntityPrivacyPolicy_1.default {
33
- readRules = [
34
- new AlwaysAllowPrivacyPolicyRule_1.default(),
35
- ];
36
- createRules = [
37
- new AlwaysAllowPrivacyPolicyRule_1.default(),
38
- ];
39
- updateRules = [
40
- new AlwaysAllowPrivacyPolicyRule_1.default(),
41
- ];
42
- deleteRules = [
43
- new AlwaysAllowPrivacyPolicyRule_1.default(),
44
- ];
45
- }
46
- exports.TestEntityPrivacyPolicy = TestEntityPrivacyPolicy;
47
- const ID_SENTINEL_THROW_LITERAL = 'throw_literal';
48
- const ID_SENTINEL_THROW_ERROR = 'throw_error';
49
- class TestEntity extends Entity_1.default {
50
- constructor(constructorParams) {
51
- if (constructorParams.selectedFields.id === ID_SENTINEL_THROW_LITERAL) {
52
- // eslint-disable-next-line no-throw-literal,@typescript-eslint/only-throw-error
53
- throw 'hello';
54
- }
55
- else if (constructorParams.selectedFields.id === ID_SENTINEL_THROW_ERROR) {
56
- throw new Error('world');
57
- }
58
- super(constructorParams);
59
- }
60
- static defineCompanionDefinition() {
61
- return {
62
- entityClass: TestEntity,
63
- entityConfiguration: exports.testEntityConfiguration,
64
- privacyPolicyClass: TestEntityPrivacyPolicy,
65
- };
66
- }
67
- }
68
- exports.default = TestEntity;
69
- describe(AuthorizationResultBasedEntityLoader_1.default, () => {
70
- it('handles thrown errors and literals from constructor', async () => {
71
- const viewerContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)(ViewerContext_1.default));
72
- const privacyPolicyEvaluationContext = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
73
- const metricsAdapter = (0, ts_mockito_1.instance)((0, ts_mockito_1.mock)());
74
- const queryContext = new StubQueryContextProvider_1.default().getQueryContext();
75
- const databaseAdapter = new StubDatabaseAdapter_1.default(exports.testEntityConfiguration, StubDatabaseAdapter_1.default.convertFieldObjectsToDataStore(exports.testEntityConfiguration, new Map([
76
- [
77
- exports.testEntityConfiguration.tableName,
78
- [
79
- {
80
- id: ID_SENTINEL_THROW_LITERAL,
81
- },
82
- {
83
- id: ID_SENTINEL_THROW_ERROR,
84
- },
85
- ],
86
- ],
87
- ])));
88
- const privacyPolicy = new TestEntityPrivacyPolicy();
89
- const cacheAdapterProvider = new StubCacheAdapter_1.NoCacheStubCacheAdapterProvider();
90
- const cacheAdapter = cacheAdapterProvider.getCacheAdapter(exports.testEntityConfiguration);
91
- const entityCache = new ReadThroughEntityCache_1.default(exports.testEntityConfiguration, cacheAdapter);
92
- const dataManager = new EntityDataManager_1.default(databaseAdapter, entityCache, new StubQueryContextProvider_1.default(), metricsAdapter, TestEntity.name);
93
- const utils = new EntityLoaderUtils_1.default(viewerContext, queryContext, privacyPolicyEvaluationContext, exports.testEntityConfiguration, TestEntity,
94
- /* entitySelectedFields */ undefined, privacyPolicy, dataManager, metricsAdapter);
95
- const entityLoader = new AuthorizationResultBasedEntityLoader_1.default(queryContext, exports.testEntityConfiguration, TestEntity, dataManager, metricsAdapter, utils);
96
- let capturedThrownThing1;
97
- try {
98
- await entityLoader.loadByIDAsync(ID_SENTINEL_THROW_LITERAL);
99
- }
100
- catch (e) {
101
- capturedThrownThing1 = e;
102
- }
103
- expect(capturedThrownThing1).not.toBeInstanceOf(Error);
104
- expect(capturedThrownThing1).toEqual('hello');
105
- const result = await entityLoader.loadByIDAsync(ID_SENTINEL_THROW_ERROR);
106
- expect(result.ok).toBe(false);
107
- expect(result.enforceError().message).toEqual('world');
108
- });
109
- });
110
- //# sourceMappingURL=AuthorizationResultBasedEntityLoader-constructor-test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"AuthorizationResultBasedEntityLoader-constructor-test.js","sourceRoot":"","sources":["../../src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.ts"],"names":[],"mappings":"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"}