@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
@@ -15,16 +15,16 @@ import { enforceResultsAsync } from './entityUtils';
15
15
  * by foreign keys.
16
16
  */
17
17
  export default class EnforcingEntityAssociationLoader<
18
- TFields extends object,
19
- TID extends NonNullable<TFields[TSelectedFields]>,
18
+ TFields extends Record<string, any>,
19
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
20
20
  TViewerContext extends ViewerContext,
21
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
21
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
22
22
  TSelectedFields extends keyof TFields,
23
23
  > {
24
24
  constructor(
25
25
  private readonly authorizationResultBasedEntityAssociationLoader: AuthorizationResultBasedEntityAssociationLoader<
26
26
  TFields,
27
- TID,
27
+ TIDField,
28
28
  TViewerContext,
29
29
  TEntity,
30
30
  TSelectedFields
@@ -40,16 +40,18 @@ export default class EnforcingEntityAssociationLoader<
40
40
  async loadAssociatedEntityAsync<
41
41
  TIdentifyingField extends keyof Pick<TFields, TSelectedFields>,
42
42
  TAssociatedFields extends object,
43
- TAssociatedID extends NonNullable<TAssociatedFields[TAssociatedSelectedFields]>,
43
+ TAssociatedIDField extends keyof NonNullable<
44
+ Pick<TAssociatedFields, TAssociatedSelectedFields>
45
+ >,
44
46
  TAssociatedEntity extends ReadonlyEntity<
45
47
  TAssociatedFields,
46
- TAssociatedID,
48
+ TAssociatedIDField,
47
49
  TViewerContext,
48
50
  TAssociatedSelectedFields
49
51
  >,
50
52
  TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<
51
53
  TAssociatedFields,
52
- TAssociatedID,
54
+ TAssociatedIDField,
53
55
  TViewerContext,
54
56
  TAssociatedEntity,
55
57
  TAssociatedSelectedFields
@@ -59,7 +61,7 @@ export default class EnforcingEntityAssociationLoader<
59
61
  fieldIdentifyingAssociatedEntity: TIdentifyingField,
60
62
  associatedEntityClass: IEntityClass<
61
63
  TAssociatedFields,
62
- TAssociatedID,
64
+ TAssociatedIDField,
63
65
  TViewerContext,
64
66
  TAssociatedEntity,
65
67
  TAssociatedPrivacyPolicy,
@@ -86,16 +88,18 @@ export default class EnforcingEntityAssociationLoader<
86
88
  */
87
89
  async loadManyAssociatedEntitiesAsync<
88
90
  TAssociatedFields extends object,
89
- TAssociatedID extends NonNullable<TAssociatedFields[TAssociatedSelectedFields]>,
91
+ TAssociatedIDField extends keyof NonNullable<
92
+ Pick<TAssociatedFields, TAssociatedSelectedFields>
93
+ >,
90
94
  TAssociatedEntity extends ReadonlyEntity<
91
95
  TAssociatedFields,
92
- TAssociatedID,
96
+ TAssociatedIDField,
93
97
  TViewerContext,
94
98
  TAssociatedSelectedFields
95
99
  >,
96
100
  TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<
97
101
  TAssociatedFields,
98
- TAssociatedID,
102
+ TAssociatedIDField,
99
103
  TViewerContext,
100
104
  TAssociatedEntity,
101
105
  TAssociatedSelectedFields
@@ -104,7 +108,7 @@ export default class EnforcingEntityAssociationLoader<
104
108
  >(
105
109
  associatedEntityClass: IEntityClass<
106
110
  TAssociatedFields,
107
- TAssociatedID,
111
+ TAssociatedIDField,
108
112
  TViewerContext,
109
113
  TAssociatedEntity,
110
114
  TAssociatedPrivacyPolicy,
@@ -129,16 +133,18 @@ export default class EnforcingEntityAssociationLoader<
129
133
  */
130
134
  async loadAssociatedEntityByFieldEqualingAsync<
131
135
  TAssociatedFields extends object,
132
- TAssociatedID extends NonNullable<TAssociatedFields[TAssociatedSelectedFields]>,
136
+ TAssociatedIDField extends keyof NonNullable<
137
+ Pick<TAssociatedFields, TAssociatedSelectedFields>
138
+ >,
133
139
  TAssociatedEntity extends ReadonlyEntity<
134
140
  TAssociatedFields,
135
- TAssociatedID,
141
+ TAssociatedIDField,
136
142
  TViewerContext,
137
143
  TAssociatedSelectedFields
138
144
  >,
139
145
  TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<
140
146
  TAssociatedFields,
141
- TAssociatedID,
147
+ TAssociatedIDField,
142
148
  TViewerContext,
143
149
  TAssociatedEntity,
144
150
  TAssociatedSelectedFields
@@ -148,7 +154,7 @@ export default class EnforcingEntityAssociationLoader<
148
154
  fieldIdentifyingAssociatedEntity: keyof Pick<TFields, TSelectedFields>,
149
155
  associatedEntityClass: IEntityClass<
150
156
  TAssociatedFields,
151
- TAssociatedID,
157
+ TAssociatedIDField,
152
158
  TViewerContext,
153
159
  TAssociatedEntity,
154
160
  TAssociatedPrivacyPolicy,
@@ -174,16 +180,18 @@ export default class EnforcingEntityAssociationLoader<
174
180
  */
175
181
  async loadManyAssociatedEntitiesByFieldEqualingAsync<
176
182
  TAssociatedFields extends object,
177
- TAssociatedID extends NonNullable<TAssociatedFields[TAssociatedSelectedFields]>,
183
+ TAssociatedIDField extends keyof NonNullable<
184
+ Pick<TAssociatedFields, TAssociatedSelectedFields>
185
+ >,
178
186
  TAssociatedEntity extends ReadonlyEntity<
179
187
  TAssociatedFields,
180
- TAssociatedID,
188
+ TAssociatedIDField,
181
189
  TViewerContext,
182
190
  TAssociatedSelectedFields
183
191
  >,
184
192
  TAssociatedPrivacyPolicy extends EntityPrivacyPolicy<
185
193
  TAssociatedFields,
186
- TAssociatedID,
194
+ TAssociatedIDField,
187
195
  TViewerContext,
188
196
  TAssociatedEntity,
189
197
  TAssociatedSelectedFields
@@ -193,7 +201,7 @@ export default class EnforcingEntityAssociationLoader<
193
201
  fieldIdentifyingAssociatedEntity: keyof Pick<TFields, TSelectedFields>,
194
202
  associatedEntityClass: IEntityClass<
195
203
  TAssociatedFields,
196
- TAssociatedID,
204
+ TAssociatedIDField,
197
205
  TViewerContext,
198
206
  TAssociatedEntity,
199
207
  TAssociatedPrivacyPolicy,
@@ -217,11 +225,11 @@ export default class EnforcingEntityAssociationLoader<
217
225
  */
218
226
  async loadAssociatedEntityThroughAsync<
219
227
  TFields2 extends object,
220
- TID2 extends NonNullable<TFields2[TSelectedFields2]>,
221
- TEntity2 extends ReadonlyEntity<TFields2, TID2, TViewerContext, TSelectedFields2>,
228
+ TIDField2 extends keyof NonNullable<Pick<TFields2, TSelectedFields2>>,
229
+ TEntity2 extends ReadonlyEntity<TFields2, TIDField2, TViewerContext, TSelectedFields2>,
222
230
  TPrivacyPolicy2 extends EntityPrivacyPolicy<
223
231
  TFields2,
224
- TID2,
232
+ TIDField2,
225
233
  TViewerContext,
226
234
  TEntity2,
227
235
  TSelectedFields2
@@ -233,7 +241,7 @@ export default class EnforcingEntityAssociationLoader<
233
241
  TViewerContext,
234
242
  TFields,
235
243
  TFields2,
236
- TID2,
244
+ TIDField2,
237
245
  TEntity2,
238
246
  TPrivacyPolicy2,
239
247
  TSelectedFields,
@@ -249,21 +257,21 @@ export default class EnforcingEntityAssociationLoader<
249
257
  */
250
258
  async loadAssociatedEntityThroughAsync<
251
259
  TFields2 extends object,
252
- TID2 extends NonNullable<TFields2[TSelectedFields2]>,
253
- TEntity2 extends ReadonlyEntity<TFields2, TID2, TViewerContext, TSelectedFields2>,
260
+ TIDField2 extends keyof NonNullable<Pick<TFields2, TSelectedFields2>>,
261
+ TEntity2 extends ReadonlyEntity<TFields2, TIDField2, TViewerContext, TSelectedFields2>,
254
262
  TPrivacyPolicy2 extends EntityPrivacyPolicy<
255
263
  TFields2,
256
- TID2,
264
+ TIDField2,
257
265
  TViewerContext,
258
266
  TEntity2,
259
267
  TSelectedFields2
260
268
  >,
261
269
  TFields3 extends object,
262
- TID3 extends NonNullable<TFields3[TSelectedFields3]>,
263
- TEntity3 extends ReadonlyEntity<TFields3, TID3, TViewerContext, TSelectedFields3>,
270
+ TIDField3 extends keyof NonNullable<Pick<TFields3, TSelectedFields3>>,
271
+ TEntity3 extends ReadonlyEntity<TFields3, TIDField3, TViewerContext, TSelectedFields3>,
264
272
  TPrivacyPolicy3 extends EntityPrivacyPolicy<
265
273
  TFields3,
266
- TID3,
274
+ TIDField3,
267
275
  TViewerContext,
268
276
  TEntity3,
269
277
  TSelectedFields3
@@ -276,7 +284,7 @@ export default class EnforcingEntityAssociationLoader<
276
284
  TViewerContext,
277
285
  TFields,
278
286
  TFields2,
279
- TID2,
287
+ TIDField2,
280
288
  TEntity2,
281
289
  TPrivacyPolicy2,
282
290
  TSelectedFields,
@@ -286,7 +294,7 @@ export default class EnforcingEntityAssociationLoader<
286
294
  TViewerContext,
287
295
  TFields2,
288
296
  TFields3,
289
- TID3,
297
+ TIDField3,
290
298
  TEntity3,
291
299
  TPrivacyPolicy3,
292
300
  TSelectedFields2,
@@ -302,31 +310,31 @@ export default class EnforcingEntityAssociationLoader<
302
310
  */
303
311
  async loadAssociatedEntityThroughAsync<
304
312
  TFields2 extends object,
305
- TID2 extends NonNullable<TFields2[TSelectedFields2]>,
306
- TEntity2 extends ReadonlyEntity<TFields2, TID2, TViewerContext, TSelectedFields2>,
313
+ TIDField2 extends keyof NonNullable<Pick<TFields2, TSelectedFields2>>,
314
+ TEntity2 extends ReadonlyEntity<TFields2, TIDField2, TViewerContext, TSelectedFields2>,
307
315
  TPrivacyPolicy2 extends EntityPrivacyPolicy<
308
316
  TFields2,
309
- TID2,
317
+ TIDField2,
310
318
  TViewerContext,
311
319
  TEntity2,
312
320
  TSelectedFields2
313
321
  >,
314
322
  TFields3 extends object,
315
- TID3 extends NonNullable<TFields3[TSelectedFields3]>,
316
- TEntity3 extends ReadonlyEntity<TFields3, TID3, TViewerContext, TSelectedFields3>,
323
+ TIDField3 extends keyof NonNullable<Pick<TFields3, TSelectedFields3>>,
324
+ TEntity3 extends ReadonlyEntity<TFields3, TIDField3, TViewerContext, TSelectedFields3>,
317
325
  TPrivacyPolicy3 extends EntityPrivacyPolicy<
318
326
  TFields3,
319
- TID3,
327
+ TIDField3,
320
328
  TViewerContext,
321
329
  TEntity3,
322
330
  TSelectedFields3
323
331
  >,
324
332
  TFields4 extends object,
325
- TID4 extends NonNullable<TFields4[TSelectedFields4]>,
326
- TEntity4 extends ReadonlyEntity<TFields4, TID4, TViewerContext, TSelectedFields4>,
333
+ TIDField4 extends keyof NonNullable<Pick<TFields4, TSelectedFields4>>,
334
+ TEntity4 extends ReadonlyEntity<TFields4, TIDField4, TViewerContext, TSelectedFields4>,
327
335
  TPrivacyPolicy4 extends EntityPrivacyPolicy<
328
336
  TFields4,
329
- TID4,
337
+ TIDField4,
330
338
  TViewerContext,
331
339
  TEntity4,
332
340
  TSelectedFields4
@@ -340,7 +348,7 @@ export default class EnforcingEntityAssociationLoader<
340
348
  TViewerContext,
341
349
  TFields,
342
350
  TFields2,
343
- TID2,
351
+ TIDField2,
344
352
  TEntity2,
345
353
  TPrivacyPolicy2,
346
354
  TSelectedFields,
@@ -350,7 +358,7 @@ export default class EnforcingEntityAssociationLoader<
350
358
  TViewerContext,
351
359
  TFields2,
352
360
  TFields3,
353
- TID3,
361
+ TIDField3,
354
362
  TEntity3,
355
363
  TPrivacyPolicy3,
356
364
  TSelectedFields2,
@@ -360,7 +368,7 @@ export default class EnforcingEntityAssociationLoader<
360
368
  TViewerContext,
361
369
  TFields3,
362
370
  TFields4,
363
- TID4,
371
+ TIDField4,
364
372
  TEntity4,
365
373
  TPrivacyPolicy4,
366
374
  TSelectedFields3,
@@ -10,13 +10,13 @@ import ViewerContext from './ViewerContext';
10
10
  * through this creator will throw if authorization is not successful.
11
11
  */
12
12
  export default class EnforcingEntityCreator<
13
- TFields extends object,
14
- TID extends NonNullable<TFields[TSelectedFields]>,
13
+ TFields extends Record<string, any>,
14
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
15
15
  TViewerContext extends ViewerContext,
16
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
16
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
17
17
  TPrivacyPolicy extends EntityPrivacyPolicy<
18
18
  TFields,
19
- TID,
19
+ TIDField,
20
20
  TViewerContext,
21
21
  TEntity,
22
22
  TSelectedFields
@@ -26,7 +26,7 @@ export default class EnforcingEntityCreator<
26
26
  constructor(
27
27
  private readonly entityCreator: AuthorizationResultBasedCreateMutator<
28
28
  TFields,
29
- TID,
29
+ TIDField,
30
30
  TViewerContext,
31
31
  TEntity,
32
32
  TPrivacyPolicy,
@@ -10,13 +10,13 @@ import ViewerContext from './ViewerContext';
10
10
  * through this deleter will throw if authorization is not successful.
11
11
  */
12
12
  export default class EnforcingEntityDeleter<
13
- TFields extends object,
14
- TID extends NonNullable<TFields[TSelectedFields]>,
13
+ TFields extends Record<string, any>,
14
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
15
15
  TViewerContext extends ViewerContext,
16
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
16
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
17
17
  TPrivacyPolicy extends EntityPrivacyPolicy<
18
18
  TFields,
19
- TID,
19
+ TIDField,
20
20
  TViewerContext,
21
21
  TEntity,
22
22
  TSelectedFields
@@ -26,7 +26,7 @@ export default class EnforcingEntityDeleter<
26
26
  constructor(
27
27
  private readonly entityDeleter: AuthorizationResultBasedDeleteMutator<
28
28
  TFields,
29
- TID,
29
+ TIDField,
30
30
  TViewerContext,
31
31
  TEntity,
32
32
  TPrivacyPolicy,
@@ -1,4 +1,5 @@
1
1
  import AuthorizationResultBasedEntityLoader from './AuthorizationResultBasedEntityLoader';
2
+ import { EntityCompositeField, EntityCompositeFieldValue } from './EntityConfiguration';
2
3
  import {
3
4
  FieldEqualityCondition,
4
5
  QuerySelectionModifiers,
@@ -7,6 +8,8 @@ import {
7
8
  import EntityPrivacyPolicy from './EntityPrivacyPolicy';
8
9
  import ReadonlyEntity from './ReadonlyEntity';
9
10
  import ViewerContext from './ViewerContext';
11
+ import { CompositeFieldValueHolder } from './internal/CompositeFieldHolder';
12
+ import { CompositeFieldValueMap } from './internal/CompositeFieldValueMap';
10
13
  import { mapMap } from './utils/collections/maps';
11
14
 
12
15
  /**
@@ -15,13 +18,13 @@ import { mapMap } from './utils/collections/maps';
15
18
  * through this loader will throw if the load is not successful.
16
19
  */
17
20
  export default class EnforcingEntityLoader<
18
- TFields extends object,
19
- TID extends NonNullable<TFields[TSelectedFields]>,
21
+ TFields extends Record<string, any>,
22
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
20
23
  TViewerContext extends ViewerContext,
21
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
24
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
22
25
  TPrivacyPolicy extends EntityPrivacyPolicy<
23
26
  TFields,
24
- TID,
27
+ TIDField,
25
28
  TViewerContext,
26
29
  TEntity,
27
30
  TSelectedFields
@@ -31,7 +34,7 @@ export default class EnforcingEntityLoader<
31
34
  constructor(
32
35
  private readonly entityLoader: AuthorizationResultBasedEntityLoader<
33
36
  TFields,
34
- TID,
37
+ TIDField,
35
38
  TViewerContext,
36
39
  TEntity,
37
40
  TPrivacyPolicy,
@@ -40,7 +43,10 @@ export default class EnforcingEntityLoader<
40
43
  ) {}
41
44
 
42
45
  /**
43
- * Enforcing version of entity loader method by the same name.
46
+ * Load many entities where fieldName is one of fieldValues.
47
+ * @param fieldName - entity field being queried
48
+ * @param fieldValues - fieldName field values being queried
49
+ * @returns map from fieldValue to entities that match the query for that fieldValue
44
50
  * @throws EntityNotAuthorizedError when viewer is not authorized to view one or more of the returned entities
45
51
  */
46
52
  async loadManyByFieldEqualingManyAsync<N extends keyof Pick<TFields, TSelectedFields>>(
@@ -57,7 +63,39 @@ export default class EnforcingEntityLoader<
57
63
  }
58
64
 
59
65
  /**
60
- * Enforcing version of entity loader method by the same name.
66
+ * Load many entities where compositeField is one of compositeFieldValues.
67
+ * @param compositeField - composite field being queried
68
+ * @param compositeFieldValues - compositeField values being queried
69
+ * @returns map from compositeFieldValue to entities that match the query for that compositeFieldValue
70
+ * @throws EntityNotAuthorizedError when viewer is not authorized to view one or more of the returned entities
71
+ */
72
+ async loadManyByCompositeFieldEqualingManyAsync<
73
+ N extends EntityCompositeField<Pick<TFields, TSelectedFields>>,
74
+ >(
75
+ compositeField: N,
76
+ compositeFieldValues: readonly EntityCompositeFieldValue<Pick<TFields, TSelectedFields>, N>[],
77
+ ): Promise<ReadonlyMap<EntityCompositeFieldValue<TFields, N>, readonly TEntity[]>> {
78
+ const compositeFieldValuesToResults =
79
+ await this.entityLoader.loadManyByCompositeFieldEqualingManyAsync(
80
+ compositeField,
81
+ compositeFieldValues,
82
+ );
83
+
84
+ return new CompositeFieldValueMap(
85
+ Array.from(compositeFieldValuesToResults.entries()).map(([compositeFieldValue, results]) => {
86
+ return [
87
+ new CompositeFieldValueHolder(compositeFieldValue),
88
+ results.map((result) => result.enforceValue()),
89
+ ];
90
+ }),
91
+ );
92
+ }
93
+
94
+ /**
95
+ * Load many entities where fieldName equals fieldValue.
96
+ * @param fieldName - entity field being queried
97
+ * @param fieldValue - fieldName field value being queried
98
+ * @returns array of entities that match the query for fieldValue
61
99
  * @throws EntityNotAuthorizedError when viewer is not authorized to view one or more of the returned entities
62
100
  */
63
101
  async loadManyByFieldEqualingAsync<N extends keyof Pick<TFields, TSelectedFields>>(
@@ -72,9 +110,32 @@ export default class EnforcingEntityLoader<
72
110
  }
73
111
 
74
112
  /**
75
- * Enforcing version of entity loader method by the same name.
113
+ * Load many entities where compositeField equals compositeFieldValue.
114
+ * @param compositeField - composite field being queried
115
+ * @param compositeFieldValue - compositeField value being queried
116
+ * @returns array of entities that match the query for compositeFieldValue
117
+ * @throws EntityNotAuthorizedError when viewer is not authorized to view one or more of the returned entities
118
+ */
119
+ async loadManyByCompositeFieldEqualingAsync<
120
+ N extends EntityCompositeField<Pick<TFields, TSelectedFields>>,
121
+ >(
122
+ compositeField: N,
123
+ compositeFieldValue: EntityCompositeFieldValue<Pick<TFields, TSelectedFields>, N>,
124
+ ): Promise<readonly TEntity[]> {
125
+ const entityResults = await this.entityLoader.loadManyByCompositeFieldEqualingAsync(
126
+ compositeField,
127
+ compositeFieldValue,
128
+ );
129
+ return entityResults.map((result) => result.enforceValue());
130
+ }
131
+
132
+ /**
133
+ * Load an entity where fieldName equals fieldValue, or null if no entity exists.
134
+ * @param uniqueFieldName - entity field being queried
135
+ * @param fieldValue - uniqueFieldName field value being queried
136
+ * @returns entity where uniqueFieldName equals fieldValue, or null if no entity matches the condition.
137
+ * @throws when multiple entities match the condition
76
138
  * @throws EntityNotAuthorizedError when viewer is not authorized to view the returned entity
77
- * @throws when multiple entities are found matching the condition
78
139
  */
79
140
  async loadByFieldEqualingAsync<N extends keyof Pick<TFields, TSelectedFields>>(
80
141
  uniqueFieldName: N,
@@ -88,45 +149,90 @@ export default class EnforcingEntityLoader<
88
149
  }
89
150
 
90
151
  /**
91
- * Enforcing version of entity loader method by the same name.
152
+ * Load an entity where compositeField equals compositeFieldValue, or null if no entity exists.
153
+ * @param compositeField - composite field being queried
154
+ * @param compositeFieldValue - compositeField value being queried
155
+ * @returns entity where compositeField equals compositeFieldValue, or null if no entity matches the condition.
156
+ * @throws when multiple entities match the condition
92
157
  * @throws EntityNotAuthorizedError when viewer is not authorized to view the returned entity
93
158
  */
94
- async loadByIDAsync(id: TID): Promise<TEntity> {
159
+ async loadByCompositeFieldEqualingAsync<
160
+ N extends EntityCompositeField<Pick<TFields, TSelectedFields>>,
161
+ >(
162
+ compositeField: N,
163
+ compositeFieldValue: EntityCompositeFieldValue<Pick<TFields, TSelectedFields>, N>,
164
+ ): Promise<TEntity | null> {
165
+ const entityResult = await this.entityLoader.loadByCompositeFieldEqualingAsync(
166
+ compositeField,
167
+ compositeFieldValue,
168
+ );
169
+ return entityResult ? entityResult.enforceValue() : null;
170
+ }
171
+
172
+ /**
173
+ * Loads an entity by a specified ID.
174
+ * @param id - ID of the entity
175
+ * @returns entity matching ID
176
+ * @throws EntityNotAuthorizedError when viewer is not authorized to view the returned entity
177
+ * @throws EntityNotFoundError when no entity exists for ID
178
+ */
179
+ async loadByIDAsync(id: TFields[TIDField]): Promise<TEntity> {
95
180
  const entityResult = await this.entityLoader.loadByIDAsync(id);
96
181
  return entityResult.enforceValue();
97
182
  }
98
183
 
99
184
  /**
100
- * Enforcing version of entity loader method by the same name.
185
+ * Load an entity by a specified ID, or return null if non-existent.
186
+ * @param id - ID of the entity
187
+ * @returns entity for matching ID, or null if no entity exists for ID.
101
188
  * @throws EntityNotAuthorizedError when viewer is not authorized to view the returned entity
102
189
  * @throws when multiple entities are found matching the condition
103
190
  */
104
- async loadByIDNullableAsync(id: TID): Promise<TEntity | null> {
191
+ async loadByIDNullableAsync(id: TFields[TIDField]): Promise<TEntity | null> {
105
192
  const entityResult = await this.entityLoader.loadByIDNullableAsync(id);
106
193
  return entityResult ? entityResult.enforceValue() : null;
107
194
  }
108
195
 
109
196
  /**
110
- * Enforcing version of entity loader method by the same name.
197
+ * Loads many entities for a list of IDs.
198
+ * @param ids - IDs of the entities to load
199
+ * @returns map from ID to corresponding entity result, where result error can be UnauthorizedError or EntityNotFoundError.
111
200
  * @throws EntityNotAuthorizedError when viewer is not authorized to view one or more of the returned entities
201
+ * @throws EntityNotFoundError when no entity exists for one or more of the IDs
112
202
  */
113
- async loadManyByIDsAsync(ids: readonly TID[]): Promise<ReadonlyMap<TID, TEntity>> {
203
+ async loadManyByIDsAsync(
204
+ ids: readonly TFields[TIDField][],
205
+ ): Promise<ReadonlyMap<TFields[TIDField], TEntity>> {
114
206
  const entityResults = await this.entityLoader.loadManyByIDsAsync(ids);
115
207
  return mapMap(entityResults, (result) => result.enforceValue());
116
208
  }
117
209
 
118
210
  /**
119
- * Enforcing version of entity loader method by the same name.
211
+ * Loads many entities for a list of IDs, returning null for any IDs that are non-existent.
212
+ * @param ids - IDs of the entities to load
213
+ * @returns map from ID to nullable corresponding entity
120
214
  * @throws EntityNotAuthorizedError when viewer is not authorized to view one or more of the returned entities
121
215
  */
122
- async loadManyByIDsNullableAsync(ids: readonly TID[]): Promise<ReadonlyMap<TID, TEntity | null>> {
216
+ async loadManyByIDsNullableAsync(
217
+ ids: readonly TFields[TIDField][],
218
+ ): Promise<ReadonlyMap<TFields[TIDField], TEntity | null>> {
123
219
  const entityResults = await this.entityLoader.loadManyByIDsNullableAsync(ids);
124
220
  return mapMap(entityResults, (result) => result?.enforceValue() ?? null);
125
221
  }
126
222
 
127
223
  /**
128
- * Enforcing version of entity loader method by the same name.
129
- * @throws EntityNotAuthorizedError when viewer is not authorized to view one or more of the returned entities
224
+ * Loads the first entity matching the selection constructed from the conjunction of specified
225
+ * operands, or null if no matching entity exists. Entities loaded using this method are not
226
+ * batched or cached.
227
+ *
228
+ * This is a convenience method for {@link loadManyByFieldEqualityConjunctionAsync}. However, the
229
+ * `orderBy` option must be specified to define what "first" means. If ordering doesn't matter,
230
+ * explicitly pass in an empty array.
231
+ *
232
+ * @param fieldEqualityOperands - list of field equality selection operand specifications
233
+ * @param querySelectionModifiers - orderBy and optional offset for the query
234
+ * @returns the first entity that matches the query or null if no entity matches the query
235
+ * @throws EntityNotAuthorizedError when viewer is not authorized to view the returned entity
130
236
  */
131
237
  async loadFirstByFieldEqualityConjunctionAsync<N extends keyof Pick<TFields, TSelectedFields>>(
132
238
  fieldEqualityOperands: FieldEqualityCondition<TFields, N>[],
@@ -141,7 +247,18 @@ export default class EnforcingEntityLoader<
141
247
  }
142
248
 
143
249
  /**
144
- * Enforcing version of entity loader method by the same name.
250
+ * Loads many entities matching the selection constructed from the conjunction of specified operands.
251
+ * Entities loaded using this method are not batched or cached.
252
+ *
253
+ * @example
254
+ * fieldEqualityOperands:
255
+ * `[{fieldName: 'hello', fieldValue: 1}, {fieldName: 'world', fieldValues: [2, 3]}]`
256
+ * Entities returned with a SQL EntityDatabaseAdapter:
257
+ * `WHERE hello = 1 AND world = ANY({2, 3})`
258
+ *
259
+ * @param fieldEqualityOperands - list of field equality selection operand specifications
260
+ * @param querySelectionModifiers - limit, offset, and orderBy for the query
261
+ * @returns array of entities that match the query
145
262
  * @throws EntityNotAuthorizedError when viewer is not authorized to view one or more of the returned entities
146
263
  */
147
264
  async loadManyByFieldEqualityConjunctionAsync<N extends keyof Pick<TFields, TSelectedFields>>(
@@ -156,8 +273,28 @@ export default class EnforcingEntityLoader<
156
273
  }
157
274
 
158
275
  /**
159
- * Enforcing version of entity loader method by the same name.
276
+ * Loads many entities matching the raw WHERE clause. Corresponds to the knex `whereRaw` argument format.
277
+ *
278
+ * @remarks
279
+ * Important notes:
280
+ * - Fields in clause are database column names instead of transformed entity field names.
281
+ * - Entities loaded using this method are not batched or cached.
282
+ * - Not all database adapters implement the ability to execute this method of fetching entities.
283
+ *
284
+ * @example
285
+ * rawWhereClause: `id = ?`
286
+ * bindings: `[1]`
287
+ * Entites returned `WHERE id = 1`
288
+ *
289
+ * http://knexjs.org/#Builder-whereRaw
290
+ * http://knexjs.org/#Raw-Bindings
291
+ *
292
+ * @param rawWhereClause - parameterized SQL WHERE clause with positional binding placeholders or named binding placeholders
293
+ * @param bindings - array of positional bindings or object of named bindings
294
+ * @param querySelectionModifiers - limit, offset, orderBy, and orderByRaw for the query
295
+ * @returns array of entities that match the query
160
296
  * @throws EntityNotAuthorizedError when viewer is not authorized to view one or more of the returned entities
297
+ * @throws Error when rawWhereClause or bindings are invalid
161
298
  */
162
299
  async loadManyByRawWhereClauseAsync(
163
300
  rawWhereClause: string,
@@ -10,13 +10,13 @@ import ViewerContext from './ViewerContext';
10
10
  * through this updater will throw if authorization is not successful.
11
11
  */
12
12
  export default class EnforcingEntityUpdater<
13
- TFields extends object,
14
- TID extends NonNullable<TFields[TSelectedFields]>,
13
+ TFields extends Record<string, any>,
14
+ TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
15
15
  TViewerContext extends ViewerContext,
16
- TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
16
+ TEntity extends ReadonlyEntity<TFields, TIDField, TViewerContext, TSelectedFields>,
17
17
  TPrivacyPolicy extends EntityPrivacyPolicy<
18
18
  TFields,
19
- TID,
19
+ TIDField,
20
20
  TViewerContext,
21
21
  TEntity,
22
22
  TSelectedFields
@@ -26,7 +26,7 @@ export default class EnforcingEntityUpdater<
26
26
  constructor(
27
27
  private readonly entityUpdater: AuthorizationResultBasedUpdateMutator<
28
28
  TFields,
29
- TID,
29
+ TIDField,
30
30
  TViewerContext,
31
31
  TEntity,
32
32
  TPrivacyPolicy,