@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
@@ -9,7 +9,7 @@ import ViewerContext from './ViewerContext';
9
9
  * associated with an entity. In relational databases, these entities are often referenced
10
10
  * by foreign keys.
11
11
  */
12
- export default class AuthorizationResultBasedEntityAssociationLoader<TFields extends object, TID extends NonNullable<TFields[TSelectedFields]>, TViewerContext extends ViewerContext, TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>, TSelectedFields extends keyof TFields> {
12
+ export default class AuthorizationResultBasedEntityAssociationLoader<TFields extends Record<string, any>, TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>, TViewerContext extends ViewerContext, TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>, TSelectedFields extends keyof TFields> {
13
13
  private readonly entity;
14
14
  private readonly queryContext;
15
15
  constructor(entity: TEntity, queryContext: EntityQueryContext);
@@ -19,7 +19,7 @@ export default class AuthorizationResultBasedEntityAssociationLoader<TFields ext
19
19
  * @param fieldIdentifyingAssociatedEntity - field of this entity containing the ID of the associated entity
20
20
  * @param associatedEntityClass - class of the associated entity
21
21
  */
22
- loadAssociatedEntityAsync<TIdentifyingField extends keyof Pick<TFields, TSelectedFields>, TAssociatedFields extends object, TAssociatedID extends NonNullable<TAssociatedFields[TAssociatedSelectedFields]>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields>(fieldIdentifyingAssociatedEntity: TIdentifyingField, associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>): Promise<Result<null extends TFields[TIdentifyingField] ? TAssociatedEntity | null : TAssociatedEntity>>;
22
+ loadAssociatedEntityAsync<TIdentifyingField extends keyof Pick<TFields, TSelectedFields>, TAssociatedFields extends object, TAssociatedIDField extends keyof NonNullable<Pick<TAssociatedFields, TAssociatedSelectedFields>>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedIDField, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedIDField, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields>(fieldIdentifyingAssociatedEntity: TIdentifyingField, associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedIDField, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>): Promise<Result<null extends TFields[TIdentifyingField] ? TAssociatedEntity | null : TAssociatedEntity>>;
23
23
  /**
24
24
  * Load many entities associated with this entity, often referred to as entites belonging
25
25
  * to this entity. In a relational database, the field in the foreign entity is a
@@ -28,7 +28,7 @@ export default class AuthorizationResultBasedEntityAssociationLoader<TFields ext
28
28
  * @param associatedEntityClass - class of the associated entities
29
29
  * @param associatedEntityFieldContainingThisID - field of associated entity which contains the ID of this entity
30
30
  */
31
- loadManyAssociatedEntitiesAsync<TAssociatedFields extends object, TAssociatedID extends NonNullable<TAssociatedFields[TAssociatedSelectedFields]>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields>(associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>, associatedEntityFieldContainingThisID: keyof Pick<TAssociatedFields, TAssociatedSelectedFields>): Promise<readonly Result<TAssociatedEntity>[]>;
31
+ loadManyAssociatedEntitiesAsync<TAssociatedFields extends object, TAssociatedIDField extends keyof NonNullable<Pick<TAssociatedFields, TAssociatedSelectedFields>>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedIDField, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedIDField, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields>(associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedIDField, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>, associatedEntityFieldContainingThisID: keyof Pick<TAssociatedFields, TAssociatedSelectedFields>): Promise<readonly Result<TAssociatedEntity>[]>;
32
32
  /**
33
33
  * Load an associated entity identified by a field value of this entity. In a relational database,
34
34
  * the field in this entity is a foreign key to a unique field of the associated entity.
@@ -36,7 +36,7 @@ export default class AuthorizationResultBasedEntityAssociationLoader<TFields ext
36
36
  * @param associatedEntityClass - class of the associated entity
37
37
  * @param associatedEntityLookupByField - field of associated entity with which to look up the associated entity
38
38
  */
39
- loadAssociatedEntityByFieldEqualingAsync<TAssociatedFields extends object, TAssociatedID extends NonNullable<TAssociatedFields[TAssociatedSelectedFields]>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields>(fieldIdentifyingAssociatedEntity: keyof Pick<TFields, TSelectedFields>, associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>, associatedEntityLookupByField: keyof Pick<TAssociatedFields, TAssociatedSelectedFields>): Promise<Result<TAssociatedEntity> | null>;
39
+ loadAssociatedEntityByFieldEqualingAsync<TAssociatedFields extends object, TAssociatedIDField extends keyof NonNullable<Pick<TAssociatedFields, TAssociatedSelectedFields>>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedIDField, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedIDField, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields>(fieldIdentifyingAssociatedEntity: keyof Pick<TFields, TSelectedFields>, associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedIDField, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>, associatedEntityLookupByField: keyof Pick<TAssociatedFields, TAssociatedSelectedFields>): Promise<Result<TAssociatedEntity> | null>;
40
40
  /**
41
41
  * Load many associated entities identified by a field value of this entity. In a relational database,
42
42
  * the field in this entity refers to a field of the associated entity.
@@ -44,33 +44,33 @@ export default class AuthorizationResultBasedEntityAssociationLoader<TFields ext
44
44
  * @param associatedEntityClass - class of the associated entities
45
45
  * @param associatedEntityLookupByField - field of associated entities with which to look up the associated entities
46
46
  */
47
- loadManyAssociatedEntitiesByFieldEqualingAsync<TAssociatedFields extends object, TAssociatedID extends NonNullable<TAssociatedFields[TAssociatedSelectedFields]>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields>(fieldIdentifyingAssociatedEntity: keyof Pick<TFields, TSelectedFields>, associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>, associatedEntityLookupByField: keyof Pick<TAssociatedFields, TAssociatedSelectedFields>): Promise<readonly Result<TAssociatedEntity>[]>;
47
+ loadManyAssociatedEntitiesByFieldEqualingAsync<TAssociatedFields extends object, TAssociatedIDField extends keyof NonNullable<Pick<TAssociatedFields, TAssociatedSelectedFields>>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedIDField, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedIDField, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields>(fieldIdentifyingAssociatedEntity: keyof Pick<TFields, TSelectedFields>, associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedIDField, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>, associatedEntityLookupByField: keyof Pick<TAssociatedFields, TAssociatedSelectedFields>): Promise<readonly Result<TAssociatedEntity>[]>;
48
48
  /**
49
49
  * Load an associated entity by folding a sequence of EntityLoadThroughDirective. At each
50
50
  * fold step, load an associated entity identified by a field value of the current fold value.
51
51
  * @param loadDirectives - associated entity load directives instructing each step of the folds
52
52
  */
53
- loadAssociatedEntityThroughAsync<TFields2 extends object, TID2 extends NonNullable<TFields2[TSelectedFields2]>, TEntity2 extends ReadonlyEntity<TFields2, TID2, TViewerContext, TSelectedFields2>, TPrivacyPolicy2 extends EntityPrivacyPolicy<TFields2, TID2, TViewerContext, TEntity2, TSelectedFields2>, TSelectedFields2 extends keyof TFields2 = keyof TFields2>(loadDirectives: [
54
- EntityLoadThroughDirective<TViewerContext, TFields, TFields2, TID2, TEntity2, TPrivacyPolicy2, TSelectedFields, TSelectedFields2>
53
+ loadAssociatedEntityThroughAsync<TFields2 extends object, TIDField2 extends keyof NonNullable<Pick<TFields2, TSelectedFields2>>, TEntity2 extends ReadonlyEntity<TFields2, TIDField2, TViewerContext, TSelectedFields2>, TPrivacyPolicy2 extends EntityPrivacyPolicy<TFields2, TIDField2, TViewerContext, TEntity2, TSelectedFields2>, TSelectedFields2 extends keyof TFields2 = keyof TFields2>(loadDirectives: [
54
+ EntityLoadThroughDirective<TViewerContext, TFields, TFields2, TIDField2, TEntity2, TPrivacyPolicy2, TSelectedFields, TSelectedFields2>
55
55
  ]): Promise<Result<TEntity2> | null>;
56
56
  /**
57
57
  * Load an associated entity by folding a sequence of EntityLoadThroughDirective. At each
58
58
  * fold step, load an associated entity identified by a field value of the current fold value.
59
59
  * @param loadDirectives - associated entity load directives instructing each step of the folds
60
60
  */
61
- loadAssociatedEntityThroughAsync<TFields2 extends object, TID2 extends NonNullable<TFields2[TSelectedFields2]>, TEntity2 extends ReadonlyEntity<TFields2, TID2, TViewerContext, TSelectedFields2>, TPrivacyPolicy2 extends EntityPrivacyPolicy<TFields2, TID2, TViewerContext, TEntity2, TSelectedFields2>, TFields3 extends object, TID3 extends NonNullable<TFields3[TSelectedFields3]>, TEntity3 extends ReadonlyEntity<TFields3, TID3, TViewerContext, TSelectedFields3>, TPrivacyPolicy3 extends EntityPrivacyPolicy<TFields3, TID3, TViewerContext, TEntity3, TSelectedFields3>, TSelectedFields2 extends keyof TFields2 = keyof TFields2, TSelectedFields3 extends keyof TFields3 = keyof TFields3>(loadDirectives: [
62
- EntityLoadThroughDirective<TViewerContext, TFields, TFields2, TID2, TEntity2, TPrivacyPolicy2, TSelectedFields, TSelectedFields2>,
63
- EntityLoadThroughDirective<TViewerContext, TFields2, TFields3, TID3, TEntity3, TPrivacyPolicy3, TSelectedFields2, TSelectedFields3>
61
+ loadAssociatedEntityThroughAsync<TFields2 extends object, TIDField2 extends keyof NonNullable<Pick<TFields2, TSelectedFields2>>, TEntity2 extends ReadonlyEntity<TFields2, TIDField2, TViewerContext, TSelectedFields2>, TPrivacyPolicy2 extends EntityPrivacyPolicy<TFields2, TIDField2, TViewerContext, TEntity2, TSelectedFields2>, TFields3 extends object, TIDField3 extends keyof NonNullable<Pick<TFields3, TSelectedFields3>>, TEntity3 extends ReadonlyEntity<TFields3, TIDField3, TViewerContext, TSelectedFields3>, TPrivacyPolicy3 extends EntityPrivacyPolicy<TFields3, TIDField3, TViewerContext, TEntity3, TSelectedFields3>, TSelectedFields2 extends keyof TFields2 = keyof TFields2, TSelectedFields3 extends keyof TFields3 = keyof TFields3>(loadDirectives: [
62
+ EntityLoadThroughDirective<TViewerContext, TFields, TFields2, TIDField2, TEntity2, TPrivacyPolicy2, TSelectedFields, TSelectedFields2>,
63
+ EntityLoadThroughDirective<TViewerContext, TFields2, TFields3, TIDField3, TEntity3, TPrivacyPolicy3, TSelectedFields2, TSelectedFields3>
64
64
  ]): Promise<Result<TEntity3> | null>;
65
65
  /**
66
66
  * Load an associated entity by folding a sequence of EntityLoadThroughDirective. At each
67
67
  * fold step, load an associated entity identified by a field value of the current fold value.
68
68
  * @param loadDirectives - associated entity load directives instructing each step of the folds
69
69
  */
70
- loadAssociatedEntityThroughAsync<TFields2 extends object, TID2 extends NonNullable<TFields2[TSelectedFields2]>, TEntity2 extends ReadonlyEntity<TFields2, TID2, TViewerContext, TSelectedFields2>, TPrivacyPolicy2 extends EntityPrivacyPolicy<TFields2, TID2, TViewerContext, TEntity2, TSelectedFields2>, TFields3 extends object, TID3 extends NonNullable<TFields3[TSelectedFields3]>, TEntity3 extends ReadonlyEntity<TFields3, TID3, TViewerContext, TSelectedFields3>, TPrivacyPolicy3 extends EntityPrivacyPolicy<TFields3, TID3, TViewerContext, TEntity3, TSelectedFields3>, TFields4 extends object, TID4 extends NonNullable<TFields4[TSelectedFields4]>, TEntity4 extends ReadonlyEntity<TFields4, TID4, TViewerContext, TSelectedFields4>, TPrivacyPolicy4 extends EntityPrivacyPolicy<TFields4, TID4, TViewerContext, TEntity4, TSelectedFields4>, TSelectedFields2 extends keyof TFields2 = keyof TFields2, TSelectedFields3 extends keyof TFields3 = keyof TFields3, TSelectedFields4 extends keyof TFields4 = keyof TFields4>(loadDirectives: [
71
- EntityLoadThroughDirective<TViewerContext, TFields, TFields2, TID2, TEntity2, TPrivacyPolicy2, TSelectedFields, TSelectedFields2>,
72
- EntityLoadThroughDirective<TViewerContext, TFields2, TFields3, TID3, TEntity3, TPrivacyPolicy3, TSelectedFields2, TSelectedFields3>,
73
- EntityLoadThroughDirective<TViewerContext, TFields3, TFields4, TID4, TEntity4, TPrivacyPolicy4, TSelectedFields3, TSelectedFields4>
70
+ loadAssociatedEntityThroughAsync<TFields2 extends object, TIDField2 extends keyof NonNullable<Pick<TFields2, TSelectedFields2>>, TEntity2 extends ReadonlyEntity<TFields2, TIDField2, TViewerContext, TSelectedFields2>, TPrivacyPolicy2 extends EntityPrivacyPolicy<TFields2, TIDField2, TViewerContext, TEntity2, TSelectedFields2>, TFields3 extends object, TIDField3 extends keyof NonNullable<Pick<TFields3, TSelectedFields3>>, TEntity3 extends ReadonlyEntity<TFields3, TIDField3, TViewerContext, TSelectedFields3>, TPrivacyPolicy3 extends EntityPrivacyPolicy<TFields3, TIDField3, TViewerContext, TEntity3, TSelectedFields3>, TFields4 extends object, TIDField4 extends keyof NonNullable<Pick<TFields4, TSelectedFields4>>, TEntity4 extends ReadonlyEntity<TFields4, TIDField4, TViewerContext, TSelectedFields4>, TPrivacyPolicy4 extends EntityPrivacyPolicy<TFields4, TIDField4, TViewerContext, TEntity4, TSelectedFields4>, TSelectedFields2 extends keyof TFields2 = keyof TFields2, TSelectedFields3 extends keyof TFields3 = keyof TFields3, TSelectedFields4 extends keyof TFields4 = keyof TFields4>(loadDirectives: [
71
+ EntityLoadThroughDirective<TViewerContext, TFields, TFields2, TIDField2, TEntity2, TPrivacyPolicy2, TSelectedFields, TSelectedFields2>,
72
+ EntityLoadThroughDirective<TViewerContext, TFields2, TFields3, TIDField3, TEntity3, TPrivacyPolicy3, TSelectedFields2, TSelectedFields3>,
73
+ EntityLoadThroughDirective<TViewerContext, TFields3, TFields4, TIDField4, TEntity4, TPrivacyPolicy4, TSelectedFields3, TSelectedFields4>
74
74
  ]): Promise<Result<TEntity4> | null>;
75
75
  /**
76
76
  * Load an associated entity by folding a sequence of EntityLoadThroughDirective. At each
@@ -82,11 +82,11 @@ export default class AuthorizationResultBasedEntityAssociationLoader<TFields ext
82
82
  /**
83
83
  * Instruction for each step of a load-associated-through method.
84
84
  */
85
- export interface EntityLoadThroughDirective<TViewerContext extends ViewerContext, TFields, TAssociatedFields extends object, TAssociatedID extends NonNullable<TAssociatedFields[TAssociatedSelectedFields]>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TSelectedFields extends keyof TFields = keyof TFields, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields> {
85
+ export interface EntityLoadThroughDirective<TViewerContext extends ViewerContext, TFields, TAssociatedFields extends object, TAssociatedIDField extends keyof NonNullable<Pick<TAssociatedFields, TAssociatedSelectedFields>>, TAssociatedEntity extends ReadonlyEntity<TAssociatedFields, TAssociatedIDField, TViewerContext, TAssociatedSelectedFields>, TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<TAssociatedFields, TAssociatedIDField, TViewerContext, TAssociatedEntity, TAssociatedSelectedFields>, TSelectedFields extends keyof TFields = keyof TFields, TAssociatedSelectedFields extends keyof TAssociatedFields = keyof TAssociatedFields> {
86
86
  /**
87
87
  * Class of entity to load at this step.
88
88
  */
89
- associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedID, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>;
89
+ associatedEntityClass: IEntityClass<TAssociatedFields, TAssociatedIDField, TViewerContext, TAssociatedEntity, TAssociatedPrivacyPolicy, TAssociatedSelectedFields>;
90
90
  /**
91
91
  * Field of the current entity with which to load an instance of associatedEntityClass.
92
92
  */
@@ -1 +1 @@
1
- {"version":3,"file":"AuthorizationResultBasedEntityAssociationLoader.js","sourceRoot":"","sources":["../src/AuthorizationResultBasedEntityAssociationLoader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AuthorizationResultBasedEntityAssociationLoader.js","sourceRoot":"","sources":["../src/AuthorizationResultBasedEntityAssociationLoader.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Result } from '@expo/results';
2
2
  import { IEntityClass } from './Entity';
3
- import EntityConfiguration from './EntityConfiguration';
3
+ import EntityConfiguration, { EntityCompositeField, EntityCompositeFieldValue } from './EntityConfiguration';
4
4
  import { FieldEqualityCondition, QuerySelectionModifiers, QuerySelectionModifiersWithOrderByRaw } from './EntityDatabaseAdapter';
5
5
  import EntityLoaderUtils from './EntityLoaderUtils';
6
6
  import EntityPrivacyPolicy from './EntityPrivacyPolicy';
@@ -15,114 +15,86 @@ import IEntityMetricsAdapter from './metrics/IEntityMetricsAdapter';
15
15
  * loader are are results (or null for some loader methods), where an unsuccessful result
16
16
  * means an authorization error or entity construction error occurred. Other errors are thrown.
17
17
  */
18
- export default class AuthorizationResultBasedEntityLoader<TFields extends object, TID extends NonNullable<TFields[TSelectedFields]>, TViewerContext extends ViewerContext, TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>, TPrivacyPolicy extends EntityPrivacyPolicy<TFields, TID, TViewerContext, TEntity, TSelectedFields>, TSelectedFields extends keyof TFields> {
18
+ export default class AuthorizationResultBasedEntityLoader<TFields extends Record<string, any>, TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>, TViewerContext extends ViewerContext, TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>, TPrivacyPolicy extends EntityPrivacyPolicy<TFields, TIDField, TViewerContext, TEntity, TSelectedFields>, TSelectedFields extends keyof TFields> {
19
19
  private readonly queryContext;
20
20
  private readonly entityConfiguration;
21
21
  private readonly entityClass;
22
22
  private readonly dataManager;
23
23
  protected readonly metricsAdapter: IEntityMetricsAdapter;
24
- readonly utils: EntityLoaderUtils<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>;
25
- constructor(queryContext: EntityQueryContext, entityConfiguration: EntityConfiguration<TFields>, entityClass: IEntityClass<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>, dataManager: EntityDataManager<TFields>, metricsAdapter: IEntityMetricsAdapter, utils: EntityLoaderUtils<TFields, TID, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>);
24
+ readonly utils: EntityLoaderUtils<TFields, TIDField, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>;
25
+ constructor(queryContext: EntityQueryContext, entityConfiguration: EntityConfiguration<TFields, TIDField>, entityClass: IEntityClass<TFields, TIDField, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>, dataManager: EntityDataManager<TFields, TIDField>, metricsAdapter: IEntityMetricsAdapter, utils: EntityLoaderUtils<TFields, TIDField, TViewerContext, TEntity, TPrivacyPolicy, TSelectedFields>);
26
26
  /**
27
- * Load many entities where fieldName is one of fieldValues.
28
- * @param fieldName - entity field being queried
29
- * @param fieldValues - fieldName field values being queried
27
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
30
28
  * @returns map from fieldValue to entity results that match the query for that fieldValue,
31
29
  * where result errors can be UnauthorizedError
32
30
  */
33
31
  loadManyByFieldEqualingManyAsync<N extends keyof Pick<TFields, TSelectedFields>>(fieldName: N, fieldValues: readonly NonNullable<TFields[N]>[]): Promise<ReadonlyMap<NonNullable<TFields[N]>, readonly Result<TEntity>[]>>;
34
32
  /**
35
- * Load many entities where fieldName equals fieldValue.
36
- * @param fieldName - entity field being queried
37
- * @param fieldValue - fieldName field value being queried
33
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
34
+ * @returns map from compositeField to entity results that match the query for that compositeField,
35
+ * where result errors can be UnauthorizedError
36
+ */
37
+ loadManyByCompositeFieldEqualingManyAsync<N extends EntityCompositeField<Pick<TFields, TSelectedFields>>>(compositeField: N, compositeFieldValues: readonly EntityCompositeFieldValue<Pick<TFields, TSelectedFields>, N>[]): Promise<ReadonlyMap<EntityCompositeFieldValue<TFields, N>, readonly Result<TEntity>[]>>;
38
+ /**
39
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
38
40
  * @returns array of entity results that match the query for fieldValue, where result error can be UnauthorizedError
39
41
  */
40
42
  loadManyByFieldEqualingAsync<N extends keyof Pick<TFields, TSelectedFields>>(fieldName: N, fieldValue: NonNullable<TFields[N]>): Promise<readonly Result<TEntity>[]>;
41
43
  /**
42
- * Load an entity where fieldName equals fieldValue, or null if no entity exists.
43
- * @param uniqueFieldName - entity field being queried
44
- * @param fieldValue - uniqueFieldName field value being queried
44
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
45
+ * @returns array of entity results that match the query for compositeFieldValue, where result error can be UnauthorizedError
46
+ */
47
+ loadManyByCompositeFieldEqualingAsync<N extends EntityCompositeField<Pick<TFields, TSelectedFields>>>(compositeField: N, compositeFieldValue: EntityCompositeFieldValue<Pick<TFields, TSelectedFields>, N>): Promise<readonly Result<TEntity>[]>;
48
+ /**
49
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
45
50
  * @returns entity result where uniqueFieldName equals fieldValue, or null if no entity matches the condition.
46
51
  * @throws when multiple entities match the condition
47
52
  */
48
53
  loadByFieldEqualingAsync<N extends keyof Pick<TFields, TSelectedFields>>(uniqueFieldName: N, fieldValue: NonNullable<TFields[N]>): Promise<Result<TEntity> | null>;
49
54
  /**
50
- * Loads an entity by a specified ID.
51
- * @param id - ID of the entity
55
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
56
+ * @returns entity result where uniqueFieldName equals fieldValue, where result error can be UnauthorizedError.
57
+ */
58
+ loadByCompositeFieldEqualingAsync<N extends EntityCompositeField<Pick<TFields, TSelectedFields>>>(compositeField: N, compositeFieldValue: EntityCompositeFieldValue<Pick<TFields, TSelectedFields>, N>): Promise<Result<TEntity> | null>;
59
+ /**
60
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
52
61
  * @returns entity result for matching ID, where result error can be UnauthorizedError or EntityNotFoundError.
53
62
  */
54
- loadByIDAsync(id: TID): Promise<Result<TEntity>>;
63
+ loadByIDAsync(id: TFields[TIDField]): Promise<Result<TEntity>>;
55
64
  /**
56
- * Load an entity by a specified ID, or return null if non-existent.
57
- * @param id - ID of the entity
65
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
58
66
  * @returns entity result for matching ID, or null if no entity exists for ID.
59
67
  */
60
- loadByIDNullableAsync(id: TID): Promise<Result<TEntity> | null>;
68
+ loadByIDNullableAsync(id: TFields[TIDField]): Promise<Result<TEntity> | null>;
61
69
  /**
62
- * Loads many entities for a list of IDs.
63
- * @param ids - IDs of the entities to load
70
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
64
71
  * @returns map from ID to corresponding entity result, where result error can be UnauthorizedError or EntityNotFoundError.
65
72
  */
66
- loadManyByIDsAsync(ids: readonly TID[]): Promise<ReadonlyMap<TID, Result<TEntity>>>;
73
+ loadManyByIDsAsync(ids: readonly TFields[TIDField][]): Promise<ReadonlyMap<TFields[TIDField], Result<TEntity>>>;
67
74
  /**
68
- * Loads many entities for a list of IDs, returning null for any IDs that are non-existent.
69
- * @param ids - IDs of the entities to load
70
- * @returns map from ID to nullable corresponding entity result, where result error can be UnauthorizedError or EntityNotFoundError.
75
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
76
+ * @returns map from ID to nullable corresponding entity result, where result error can be UnauthorizedError.
71
77
  */
72
- loadManyByIDsNullableAsync(ids: readonly TID[]): Promise<ReadonlyMap<TID, Result<TEntity> | null>>;
78
+ loadManyByIDsNullableAsync(ids: readonly TFields[TIDField][]): Promise<ReadonlyMap<TFields[TIDField], Result<TEntity> | null>>;
73
79
  /**
74
- * Loads the first entity matching the selection constructed from the conjunction of specified
75
- * operands, or null if no matching entity exists. Entities loaded using this method are not
76
- * batched or cached.
77
- *
78
- * This is a convenience method for {@link loadManyByFieldEqualityConjunctionAsync}. However, the
79
- * `orderBy` option must be specified to define what "first" means. If ordering doesn't matter,
80
- * explicitly pass in an empty array.
81
- *
82
- * @param fieldEqualityOperands - list of field equality selection operand specifications
83
- * @param querySelectionModifiers - orderBy and optional offset for the query
80
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
84
81
  * @returns the first entity results that matches the query, where result error can be
85
82
  * UnauthorizedError
86
83
  */
87
84
  loadFirstByFieldEqualityConjunctionAsync<N extends keyof Pick<TFields, TSelectedFields>>(fieldEqualityOperands: FieldEqualityCondition<TFields, N>[], querySelectionModifiers: Omit<QuerySelectionModifiers<TFields>, 'limit'> & Required<Pick<QuerySelectionModifiers<TFields>, 'orderBy'>>): Promise<Result<TEntity> | null>;
88
85
  /**
89
- * Loads many entities matching the selection constructed from the conjunction of specified operands.
90
- * Entities loaded using this method are not batched or cached.
91
- *
92
- * @example
93
- * fieldEqualityOperands:
94
- * `[{fieldName: 'hello', fieldValue: 1}, {fieldName: 'world', fieldValues: [2, 3]}]`
95
- * Entities returned with a SQL EntityDatabaseAdapter:
96
- * `WHERE hello = 1 AND world = ANY({2, 3})`
97
- *
98
- * @param fieldEqualityOperands - list of field equality selection operand specifications
99
- * @param querySelectionModifiers - limit, offset, and orderBy for the query
86
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
100
87
  * @returns array of entity results that match the query, where result error can be UnauthorizedError
101
88
  */
102
89
  loadManyByFieldEqualityConjunctionAsync<N extends keyof Pick<TFields, TSelectedFields>>(fieldEqualityOperands: FieldEqualityCondition<TFields, N>[], querySelectionModifiers?: QuerySelectionModifiers<TFields>): Promise<readonly Result<TEntity>[]>;
103
90
  /**
104
- * Loads many entities matching the raw WHERE clause. Corresponds to the knex `whereRaw` argument format.
105
- *
106
- * @remarks
107
- * Important notes:
108
- * - Fields in clause are database column names instead of transformed entity field names.
109
- * - Entities loaded using this method are not batched or cached.
110
- * - Not all database adapters implement the ability to execute this method of fetching entities.
111
- *
112
- * @example
113
- * rawWhereClause: `id = ?`
114
- * bindings: `[1]`
115
- * Entites returned `WHERE id = 1`
116
- *
117
- * http://knexjs.org/#Builder-whereRaw
118
- * http://knexjs.org/#Raw-Bindings
119
- *
120
- * @param rawWhereClause - parameterized SQL WHERE clause with positional binding placeholders or named binding placeholders
121
- * @param bindings - array of positional bindings or object of named bindings
122
- * @param querySelectionModifiers - limit, offset, orderBy, and orderByRaw for the query
91
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
123
92
  * @returns array of entity results that match the query, where result error can be UnauthorizedError
124
93
  * @throws Error when rawWhereClause or bindings are invalid
125
94
  */
126
95
  loadManyByRawWhereClauseAsync(rawWhereClause: string, bindings: any[] | object, querySelectionModifiers?: QuerySelectionModifiersWithOrderByRaw<TFields>): Promise<readonly Result<TEntity>[]>;
127
- private validateFieldValues;
96
+ private validateFieldAndValues;
97
+ private validateFieldAndValuesAndConvertToHolders;
98
+ private validateCompositeFieldAndValuesAndConvertToHolders;
99
+ private constructAndAuthorizeEntitiesFromCompositeFieldValueHolderMapAsync;
128
100
  }
@@ -9,7 +9,11 @@ const nullthrows_1 = __importDefault(require("nullthrows"));
9
9
  const EntityDatabaseAdapter_1 = require("./EntityDatabaseAdapter");
10
10
  const EntityInvalidFieldValueError_1 = __importDefault(require("./errors/EntityInvalidFieldValueError"));
11
11
  const EntityNotFoundError_1 = __importDefault(require("./errors/EntityNotFoundError"));
12
+ const CompositeFieldHolder_1 = require("./internal/CompositeFieldHolder");
13
+ const CompositeFieldValueMap_1 = require("./internal/CompositeFieldValueMap");
14
+ const SingleFieldHolder_1 = require("./internal/SingleFieldHolder");
12
15
  const maps_1 = require("./utils/collections/maps");
16
+ const sets_1 = require("./utils/collections/sets");
13
17
  /**
14
18
  * Authorization-result-based entity loader. All normal loads are batched,
15
19
  * cached, and authorized against the entity's EntityPrivacyPolicy. All loads through this
@@ -32,21 +36,28 @@ class AuthorizationResultBasedEntityLoader {
32
36
  this.utils = utils;
33
37
  }
34
38
  /**
35
- * Load many entities where fieldName is one of fieldValues.
36
- * @param fieldName - entity field being queried
37
- * @param fieldValues - fieldName field values being queried
39
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
38
40
  * @returns map from fieldValue to entity results that match the query for that fieldValue,
39
41
  * where result errors can be UnauthorizedError
40
42
  */
41
43
  async loadManyByFieldEqualingManyAsync(fieldName, fieldValues) {
42
- this.validateFieldValues(fieldName, fieldValues);
43
- const fieldValuesToFieldObjects = await this.dataManager.loadManyByFieldEqualingAsync(this.queryContext, fieldName, fieldValues);
44
+ const { loadKey, loadValues } = this.validateFieldAndValuesAndConvertToHolders(fieldName, fieldValues);
45
+ const loadValuesToFieldObjects = await this.dataManager.loadManyEqualingAsync(this.queryContext, loadKey, loadValues);
46
+ const fieldValuesToFieldObjects = (0, maps_1.mapKeys)(loadValuesToFieldObjects, (loadValue) => loadValue.fieldValue);
44
47
  return await this.utils.constructAndAuthorizeEntitiesAsync(fieldValuesToFieldObjects);
45
48
  }
46
49
  /**
47
- * Load many entities where fieldName equals fieldValue.
48
- * @param fieldName - entity field being queried
49
- * @param fieldValue - fieldName field value being queried
50
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
51
+ * @returns map from compositeField to entity results that match the query for that compositeField,
52
+ * where result errors can be UnauthorizedError
53
+ */
54
+ async loadManyByCompositeFieldEqualingManyAsync(compositeField, compositeFieldValues) {
55
+ const { compositeFieldHolder, compositeFieldValueHolders } = this.validateCompositeFieldAndValuesAndConvertToHolders(compositeField, compositeFieldValues);
56
+ const compositeFieldValuesToFieldObjects = await this.dataManager.loadManyEqualingAsync(this.queryContext, compositeFieldHolder, compositeFieldValueHolders);
57
+ return await this.constructAndAuthorizeEntitiesFromCompositeFieldValueHolderMapAsync(compositeFieldValuesToFieldObjects);
58
+ }
59
+ /**
60
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
50
61
  * @returns array of entity results that match the query for fieldValue, where result error can be UnauthorizedError
51
62
  */
52
63
  async loadManyByFieldEqualingAsync(fieldName, fieldValue) {
@@ -56,9 +67,19 @@ class AuthorizationResultBasedEntityLoader {
56
67
  return entityResultsForFieldValue;
57
68
  }
58
69
  /**
59
- * Load an entity where fieldName equals fieldValue, or null if no entity exists.
60
- * @param uniqueFieldName - entity field being queried
61
- * @param fieldValue - uniqueFieldName field value being queried
70
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
71
+ * @returns array of entity results that match the query for compositeFieldValue, where result error can be UnauthorizedError
72
+ */
73
+ async loadManyByCompositeFieldEqualingAsync(compositeField, compositeFieldValue) {
74
+ const entityResults = await this.loadManyByCompositeFieldEqualingManyAsync(compositeField, [
75
+ compositeFieldValue,
76
+ ]);
77
+ const entityResultForCompositeFieldValue = entityResults.get(compositeFieldValue);
78
+ (0, invariant_1.default)(entityResultForCompositeFieldValue !== undefined, `${compositeFieldValue} should be guaranteed to be present in returned map of entities`);
79
+ return entityResultForCompositeFieldValue;
80
+ }
81
+ /**
82
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
62
83
  * @returns entity result where uniqueFieldName equals fieldValue, or null if no entity matches the condition.
63
84
  * @throws when multiple entities match the condition
64
85
  */
@@ -68,8 +89,16 @@ class AuthorizationResultBasedEntityLoader {
68
89
  return entityResults[0] ?? null;
69
90
  }
70
91
  /**
71
- * Loads an entity by a specified ID.
72
- * @param id - ID of the entity
92
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
93
+ * @returns entity result where uniqueFieldName equals fieldValue, where result error can be UnauthorizedError.
94
+ */
95
+ async loadByCompositeFieldEqualingAsync(compositeField, compositeFieldValue) {
96
+ const entityResults = await this.loadManyByCompositeFieldEqualingAsync(compositeField, compositeFieldValue);
97
+ (0, invariant_1.default)(entityResults.length <= 1, `loadByCompositeFieldEqualing: Multiple entities of type ${this.entityClass.name} found for composite field (${compositeField.join(',')})=${JSON.stringify(compositeFieldValue)}`);
98
+ return entityResults[0] ?? null;
99
+ }
100
+ /**
101
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
73
102
  * @returns entity result for matching ID, where result error can be UnauthorizedError or EntityNotFoundError.
74
103
  */
75
104
  async loadByIDAsync(id) {
@@ -78,16 +107,14 @@ class AuthorizationResultBasedEntityLoader {
78
107
  return (0, nullthrows_1.default)(entityResults.get(id));
79
108
  }
80
109
  /**
81
- * Load an entity by a specified ID, or return null if non-existent.
82
- * @param id - ID of the entity
110
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
83
111
  * @returns entity result for matching ID, or null if no entity exists for ID.
84
112
  */
85
113
  async loadByIDNullableAsync(id) {
86
114
  return await this.loadByFieldEqualingAsync(this.entityConfiguration.idField, id);
87
115
  }
88
116
  /**
89
- * Loads many entities for a list of IDs.
90
- * @param ids - IDs of the entities to load
117
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
91
118
  * @returns map from ID to corresponding entity result, where result error can be UnauthorizedError or EntityNotFoundError.
92
119
  */
93
120
  async loadManyByIDsAsync(ids) {
@@ -99,9 +126,8 @@ class AuthorizationResultBasedEntityLoader {
99
126
  });
100
127
  }
101
128
  /**
102
- * Loads many entities for a list of IDs, returning null for any IDs that are non-existent.
103
- * @param ids - IDs of the entities to load
104
- * @returns map from ID to nullable corresponding entity result, where result error can be UnauthorizedError or EntityNotFoundError.
129
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
130
+ * @returns map from ID to nullable corresponding entity result, where result error can be UnauthorizedError.
105
131
  */
106
132
  async loadManyByIDsNullableAsync(ids) {
107
133
  const entityResults = (await this.loadManyByFieldEqualingManyAsync(this.entityConfiguration.idField, ids));
@@ -110,16 +136,7 @@ class AuthorizationResultBasedEntityLoader {
110
136
  });
111
137
  }
112
138
  /**
113
- * Loads the first entity matching the selection constructed from the conjunction of specified
114
- * operands, or null if no matching entity exists. Entities loaded using this method are not
115
- * batched or cached.
116
- *
117
- * This is a convenience method for {@link loadManyByFieldEqualityConjunctionAsync}. However, the
118
- * `orderBy` option must be specified to define what "first" means. If ordering doesn't matter,
119
- * explicitly pass in an empty array.
120
- *
121
- * @param fieldEqualityOperands - list of field equality selection operand specifications
122
- * @param querySelectionModifiers - orderBy and optional offset for the query
139
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
123
140
  * @returns the first entity results that matches the query, where result error can be
124
141
  * UnauthorizedError
125
142
  */
@@ -131,17 +148,7 @@ class AuthorizationResultBasedEntityLoader {
131
148
  return results[0] ?? null;
132
149
  }
133
150
  /**
134
- * Loads many entities matching the selection constructed from the conjunction of specified operands.
135
- * Entities loaded using this method are not batched or cached.
136
- *
137
- * @example
138
- * fieldEqualityOperands:
139
- * `[{fieldName: 'hello', fieldValue: 1}, {fieldName: 'world', fieldValues: [2, 3]}]`
140
- * Entities returned with a SQL EntityDatabaseAdapter:
141
- * `WHERE hello = 1 AND world = ANY({2, 3})`
142
- *
143
- * @param fieldEqualityOperands - list of field equality selection operand specifications
144
- * @param querySelectionModifiers - limit, offset, and orderBy for the query
151
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
145
152
  * @returns array of entity results that match the query, where result error can be UnauthorizedError
146
153
  */
147
154
  async loadManyByFieldEqualityConjunctionAsync(fieldEqualityOperands, querySelectionModifiers = {}) {
@@ -149,31 +156,13 @@ class AuthorizationResultBasedEntityLoader {
149
156
  const fieldValues = (0, EntityDatabaseAdapter_1.isSingleValueFieldEqualityCondition)(fieldEqualityOperand)
150
157
  ? [fieldEqualityOperand.fieldValue]
151
158
  : fieldEqualityOperand.fieldValues;
152
- this.validateFieldValues(fieldEqualityOperand.fieldName, fieldValues);
159
+ this.validateFieldAndValues(fieldEqualityOperand.fieldName, fieldValues);
153
160
  }
154
161
  const fieldObjects = await this.dataManager.loadManyByFieldEqualityConjunctionAsync(this.queryContext, fieldEqualityOperands, querySelectionModifiers);
155
162
  return await this.utils.constructAndAuthorizeEntitiesArrayAsync(fieldObjects);
156
163
  }
157
164
  /**
158
- * Loads many entities matching the raw WHERE clause. Corresponds to the knex `whereRaw` argument format.
159
- *
160
- * @remarks
161
- * Important notes:
162
- * - Fields in clause are database column names instead of transformed entity field names.
163
- * - Entities loaded using this method are not batched or cached.
164
- * - Not all database adapters implement the ability to execute this method of fetching entities.
165
- *
166
- * @example
167
- * rawWhereClause: `id = ?`
168
- * bindings: `[1]`
169
- * Entites returned `WHERE id = 1`
170
- *
171
- * http://knexjs.org/#Builder-whereRaw
172
- * http://knexjs.org/#Raw-Bindings
173
- *
174
- * @param rawWhereClause - parameterized SQL WHERE clause with positional binding placeholders or named binding placeholders
175
- * @param bindings - array of positional bindings or object of named bindings
176
- * @param querySelectionModifiers - limit, offset, orderBy, and orderByRaw for the query
165
+ * Authorization-result-based version of the EnforcingEntityLoader method by the same name.
177
166
  * @returns array of entity results that match the query, where result error can be UnauthorizedError
178
167
  * @throws Error when rawWhereClause or bindings are invalid
179
168
  */
@@ -181,7 +170,7 @@ class AuthorizationResultBasedEntityLoader {
181
170
  const fieldObjects = await this.dataManager.loadManyByRawWhereClauseAsync(this.queryContext, rawWhereClause, bindings, querySelectionModifiers);
182
171
  return await this.utils.constructAndAuthorizeEntitiesArrayAsync(fieldObjects);
183
172
  }
184
- validateFieldValues(fieldName, fieldValues) {
173
+ validateFieldAndValues(fieldName, fieldValues) {
185
174
  const fieldDefinition = this.entityConfiguration.schema.get(fieldName);
186
175
  (0, invariant_1.default)(fieldDefinition, `must have field definition for field = ${String(fieldName)}`);
187
176
  for (const fieldValue of fieldValues) {
@@ -191,6 +180,40 @@ class AuthorizationResultBasedEntityLoader {
191
180
  }
192
181
  }
193
182
  }
183
+ validateFieldAndValuesAndConvertToHolders(fieldName, fieldValues) {
184
+ this.validateFieldAndValues(fieldName, fieldValues);
185
+ return {
186
+ loadKey: new SingleFieldHolder_1.SingleFieldHolder(fieldName),
187
+ loadValues: fieldValues.map((fieldValue) => new SingleFieldHolder_1.SingleFieldValueHolder(fieldValue)),
188
+ };
189
+ }
190
+ validateCompositeFieldAndValuesAndConvertToHolders(compositeField, compositeFieldValues) {
191
+ // validate that the composite field input is defined in the entity configuration
192
+ const compositeFieldHolder = this.entityConfiguration.compositeFieldInfo.getCompositeFieldHolderForCompositeField(compositeField);
193
+ (0, invariant_1.default)(compositeFieldHolder, `must have composite field definition for composite field = ${String(compositeField)}`);
194
+ const cacheableCompositeFieldFieldsSet = compositeFieldHolder.getFieldSet();
195
+ const compositeFieldValueHolders = compositeFieldValues.map((compositeFieldValue) => new CompositeFieldHolder_1.CompositeFieldValueHolder(compositeFieldValue));
196
+ // validate that the composite field values are valid
197
+ for (const compositeFieldValueHolder of compositeFieldValueHolders) {
198
+ (0, invariant_1.default)((0, sets_1.areSetsEqual)(cacheableCompositeFieldFieldsSet, compositeFieldValueHolder.getFieldSet()), `composite field values must contain exactly the fields defined in the composite field definition: ${compositeField}`);
199
+ for (const field of compositeField) {
200
+ const fieldValue = compositeFieldValueHolder.compositeFieldValue[field];
201
+ this.validateFieldAndValues(field, [fieldValue]);
202
+ }
203
+ }
204
+ return {
205
+ compositeFieldHolder,
206
+ compositeFieldValueHolders,
207
+ };
208
+ }
209
+ async constructAndAuthorizeEntitiesFromCompositeFieldValueHolderMapAsync(map) {
210
+ return new CompositeFieldValueMap_1.CompositeFieldValueMap(await Promise.all(Array.from(map.entries()).map(async ([compositeFieldValueHolder, fieldObjects]) => {
211
+ return [
212
+ compositeFieldValueHolder,
213
+ await this.utils.constructAndAuthorizeEntitiesArrayAsync(fieldObjects),
214
+ ];
215
+ })));
216
+ }
194
217
  }
195
218
  exports.default = AuthorizationResultBasedEntityLoader;
196
219
  //# sourceMappingURL=AuthorizationResultBasedEntityLoader.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"AuthorizationResultBasedEntityLoader.js","sourceRoot":"","sources":["../src/AuthorizationResultBasedEntityLoader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AuthorizationResultBasedEntityLoader.js","sourceRoot":"","sources":["../src/AuthorizationResultBasedEntityLoader.ts"],"names":[],"mappings":"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"}