@expo/entity 0.40.0 → 0.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (433) hide show
  1. package/build/AuthorizationResultBasedEntityAssociationLoader.d.ts +16 -16
  2. package/build/AuthorizationResultBasedEntityAssociationLoader.js +2 -4
  3. package/build/AuthorizationResultBasedEntityAssociationLoader.js.map +1 -1
  4. package/build/AuthorizationResultBasedEntityLoader.d.ts +39 -67
  5. package/build/AuthorizationResultBasedEntityLoader.js +85 -62
  6. package/build/AuthorizationResultBasedEntityLoader.js.map +1 -1
  7. package/build/AuthorizationResultBasedEntityMutator.d.ts +16 -16
  8. package/build/AuthorizationResultBasedEntityMutator.js.map +1 -1
  9. package/build/ComposedEntityCacheAdapter.d.ts +7 -6
  10. package/build/ComposedEntityCacheAdapter.js +28 -28
  11. package/build/ComposedEntityCacheAdapter.js.map +1 -1
  12. package/build/ComposedSecondaryEntityCache.d.ts +1 -1
  13. package/build/ComposedSecondaryEntityCache.js.map +1 -1
  14. package/build/EnforcingEntityAssociationLoader.d.ts +15 -15
  15. package/build/EnforcingEntityAssociationLoader.js.map +1 -1
  16. package/build/EnforcingEntityCreator.d.ts +2 -2
  17. package/build/EnforcingEntityDeleter.d.ts +2 -2
  18. package/build/EnforcingEntityLoader.d.ts +104 -18
  19. package/build/EnforcingEntityLoader.js +113 -12
  20. package/build/EnforcingEntityLoader.js.map +1 -1
  21. package/build/EnforcingEntityUpdater.d.ts +2 -2
  22. package/build/Entity.d.ts +32 -10
  23. package/build/Entity.js +41 -3
  24. package/build/Entity.js.map +1 -1
  25. package/build/EntityAssociationLoader.d.ts +3 -3
  26. package/build/EntityCompanion.d.ts +5 -5
  27. package/build/EntityCompanion.js.map +1 -1
  28. package/build/EntityCompanionProvider.d.ts +6 -6
  29. package/build/EntityCompanionProvider.js.map +1 -1
  30. package/build/EntityConfiguration.d.ts +46 -5
  31. package/build/EntityConfiguration.js +39 -1
  32. package/build/EntityConfiguration.js.map +1 -1
  33. package/build/EntityCreator.d.ts +4 -4
  34. package/build/EntityDatabaseAdapter.d.ts +15 -14
  35. package/build/EntityDatabaseAdapter.js +20 -12
  36. package/build/EntityDatabaseAdapter.js.map +1 -1
  37. package/build/EntityDeleter.d.ts +4 -4
  38. package/build/EntityFieldDefinition.d.ts +20 -10
  39. package/build/EntityFieldDefinition.js +3 -1
  40. package/build/EntityFieldDefinition.js.map +1 -1
  41. package/build/EntityFields.d.ts +14 -12
  42. package/build/EntityFields.js.map +1 -1
  43. package/build/EntityLoader.d.ts +5 -5
  44. package/build/EntityLoaderFactory.d.ts +3 -3
  45. package/build/EntityLoaderFactory.js.map +1 -1
  46. package/build/EntityLoaderUtils.d.ts +2 -2
  47. package/build/EntityLoaderUtils.js +27 -1
  48. package/build/EntityLoaderUtils.js.map +1 -1
  49. package/build/EntityMutationInfo.d.ts +2 -2
  50. package/build/EntityMutationTriggerConfiguration.d.ts +14 -14
  51. package/build/EntityMutationTriggerConfiguration.js.map +1 -1
  52. package/build/EntityMutationValidator.d.ts +2 -2
  53. package/build/EntityMutatorFactory.d.ts +5 -5
  54. package/build/EntityMutatorFactory.js.map +1 -1
  55. package/build/EntityPrivacyPolicy.d.ts +14 -14
  56. package/build/EntityPrivacyPolicy.js.map +1 -1
  57. package/build/EntitySecondaryCacheLoader.d.ts +4 -4
  58. package/build/EntityUpdater.d.ts +4 -4
  59. package/build/GenericEntityCacheAdapter.d.ts +7 -6
  60. package/build/GenericEntityCacheAdapter.js +13 -14
  61. package/build/GenericEntityCacheAdapter.js.map +1 -1
  62. package/build/GenericSecondaryEntityCache.d.ts +3 -3
  63. package/build/GenericSecondaryEntityCache.js.map +1 -1
  64. package/build/IEntityCacheAdapter.d.ts +17 -16
  65. package/build/IEntityCacheAdapterProvider.d.ts +1 -1
  66. package/build/IEntityDatabaseAdapterProvider.d.ts +1 -1
  67. package/build/IEntityGenericCacher.d.ts +15 -5
  68. package/build/ReadonlyEntity.d.ts +27 -8
  69. package/build/ReadonlyEntity.js +31 -3
  70. package/build/ReadonlyEntity.js.map +1 -1
  71. package/build/ViewerContext.d.ts +1 -1
  72. package/build/ViewerScopedEntityCompanion.d.ts +5 -5
  73. package/build/ViewerScopedEntityCompanionProvider.d.ts +1 -1
  74. package/build/ViewerScopedEntityLoaderFactory.d.ts +3 -3
  75. package/build/ViewerScopedEntityMutatorFactory.d.ts +5 -5
  76. package/build/entityUtils.d.ts +1 -1
  77. package/build/entityUtils.js.map +1 -1
  78. package/build/errors/EntityInvalidFieldValueError.d.ts +2 -2
  79. package/build/errors/EntityNotAuthorizedError.d.ts +1 -1
  80. package/build/errors/EntityNotFoundError.d.ts +2 -2
  81. package/build/index.d.ts +7 -7
  82. package/build/index.js +8 -13
  83. package/build/index.js.map +1 -1
  84. package/build/internal/CompositeFieldHolder.d.ts +48 -0
  85. package/build/internal/CompositeFieldHolder.js +116 -0
  86. package/build/internal/CompositeFieldHolder.js.map +1 -0
  87. package/build/internal/CompositeFieldValueMap.d.ts +15 -0
  88. package/build/internal/CompositeFieldValueMap.js +51 -0
  89. package/build/internal/CompositeFieldValueMap.js.map +1 -0
  90. package/build/internal/EntityDataManager.d.ts +16 -16
  91. package/build/internal/EntityDataManager.js +42 -45
  92. package/build/internal/EntityDataManager.js.map +1 -1
  93. package/build/internal/EntityFieldTransformationUtils.d.ts +5 -5
  94. package/build/internal/EntityFieldTransformationUtils.js.map +1 -1
  95. package/build/internal/EntityLoadInterfaces.d.ts +104 -0
  96. package/build/internal/EntityLoadInterfaces.js +25 -0
  97. package/build/internal/EntityLoadInterfaces.js.map +1 -0
  98. package/build/internal/EntityTableDataCoordinator.d.ts +6 -6
  99. package/build/internal/EntityTableDataCoordinator.js.map +1 -1
  100. package/build/internal/ReadThroughEntityCache.d.ts +17 -16
  101. package/build/internal/ReadThroughEntityCache.js +36 -36
  102. package/build/internal/ReadThroughEntityCache.js.map +1 -1
  103. package/build/internal/SingleFieldHolder.d.ts +34 -0
  104. package/build/internal/SingleFieldHolder.js +90 -0
  105. package/build/internal/SingleFieldHolder.js.map +1 -0
  106. package/build/metrics/EntityMetricsUtils.d.ts +2 -1
  107. package/build/metrics/EntityMetricsUtils.js.map +1 -1
  108. package/build/metrics/IEntityMetricsAdapter.d.ts +5 -0
  109. package/build/metrics/IEntityMetricsAdapter.js.map +1 -1
  110. package/build/rules/AlwaysAllowPrivacyPolicyRule.d.ts +2 -2
  111. package/build/rules/AlwaysAllowPrivacyPolicyRule.js.map +1 -1
  112. package/build/rules/AlwaysDenyPrivacyPolicyRule.d.ts +2 -2
  113. package/build/rules/AlwaysDenyPrivacyPolicyRule.js.map +1 -1
  114. package/build/rules/AlwaysSkipPrivacyPolicyRule.d.ts +2 -2
  115. package/build/rules/AlwaysSkipPrivacyPolicyRule.js.map +1 -1
  116. package/build/rules/PrivacyPolicyRule.d.ts +2 -2
  117. package/build/tsconfig.build.tsbuildinfo +1 -0
  118. package/build/utils/EntityPrivacyUtils.d.ts +4 -4
  119. package/build/utils/EntityPrivacyUtils.js.map +1 -1
  120. package/build/utils/collections/SerializableKeyMap.d.ts +27 -0
  121. package/build/utils/collections/SerializableKeyMap.js +60 -0
  122. package/build/utils/collections/SerializableKeyMap.js.map +1 -0
  123. package/build/utils/collections/maps.js +1 -2
  124. package/build/utils/collections/maps.js.map +1 -1
  125. package/build/utils/collections/sets.d.ts +1 -0
  126. package/build/utils/collections/sets.js +7 -0
  127. package/build/utils/collections/sets.js.map +1 -0
  128. package/build/utils/mergeEntityMutationTriggerConfigurations.d.ts +1 -1
  129. package/package.json +8 -5
  130. package/src/AuthorizationResultBasedEntityAssociationLoader.ts +58 -53
  131. package/src/AuthorizationResultBasedEntityLoader.ts +194 -81
  132. package/src/AuthorizationResultBasedEntityMutator.ts +71 -45
  133. package/src/ComposedEntityCacheAdapter.ts +55 -46
  134. package/src/ComposedSecondaryEntityCache.ts +5 -2
  135. package/src/EnforcingEntityAssociationLoader.ts +52 -44
  136. package/src/EnforcingEntityCreator.ts +5 -5
  137. package/src/EnforcingEntityDeleter.ts +5 -5
  138. package/src/EnforcingEntityLoader.ts +158 -21
  139. package/src/EnforcingEntityUpdater.ts +5 -5
  140. package/src/Entity.ts +185 -29
  141. package/src/EntityAssociationLoader.ts +6 -6
  142. package/src/EntityCompanion.ts +11 -11
  143. package/src/EntityCompanionProvider.ts +21 -18
  144. package/src/EntityConfiguration.ts +123 -9
  145. package/src/EntityCreator.ts +7 -7
  146. package/src/EntityDatabaseAdapter.ts +51 -28
  147. package/src/EntityDeleter.ts +7 -7
  148. package/src/EntityFieldDefinition.ts +32 -12
  149. package/src/EntityFields.ts +49 -12
  150. package/src/EntityLoader.ts +8 -8
  151. package/src/EntityLoaderFactory.ts +8 -8
  152. package/src/EntityLoaderUtils.ts +39 -10
  153. package/src/EntityMutationInfo.ts +6 -6
  154. package/src/EntityMutationTriggerConfiguration.ts +68 -20
  155. package/src/EntityMutationValidator.ts +4 -4
  156. package/src/EntityMutatorFactory.ts +13 -13
  157. package/src/EntityPrivacyPolicy.ts +50 -26
  158. package/src/EntitySecondaryCacheLoader.ts +6 -6
  159. package/src/EntityUpdater.ts +7 -7
  160. package/src/GenericEntityCacheAdapter.ts +39 -28
  161. package/src/GenericSecondaryEntityCache.ts +6 -3
  162. package/src/IEntityCacheAdapter.ts +45 -25
  163. package/src/IEntityCacheAdapterProvider.ts +3 -3
  164. package/src/IEntityDatabaseAdapterProvider.ts +3 -3
  165. package/src/IEntityGenericCacher.ts +33 -5
  166. package/src/ReadonlyEntity.ts +129 -16
  167. package/src/ViewerContext.ts +5 -5
  168. package/src/ViewerScopedEntityCompanion.ts +7 -7
  169. package/src/ViewerScopedEntityCompanionProvider.ts +6 -6
  170. package/src/ViewerScopedEntityLoaderFactory.ts +7 -7
  171. package/src/ViewerScopedEntityMutatorFactory.ts +8 -8
  172. package/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.ts +41 -72
  173. package/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.ts +14 -13
  174. package/src/__tests__/AuthorizationResultBasedEntityLoader-test.ts +367 -69
  175. package/src/__tests__/ComposedCacheAdapter-test.ts +235 -117
  176. package/src/__tests__/EnforcingEntityLoader-test.ts +135 -1
  177. package/src/__tests__/Entity-test.ts +64 -11
  178. package/src/__tests__/EntityAssociationLoader-test.ts +6 -8
  179. package/src/__tests__/EntityCommonUseCases-test.ts +25 -28
  180. package/src/__tests__/EntityCompanion-test.ts +4 -4
  181. package/src/__tests__/EntityCompanionProvider-test.ts +9 -8
  182. package/src/__tests__/EntityConfiguration-test.ts +85 -6
  183. package/src/__tests__/EntityDatabaseAdapter-test.ts +113 -17
  184. package/src/__tests__/EntityEdges-test.ts +135 -138
  185. package/src/__tests__/EntityFields-test.ts +2 -2
  186. package/src/__tests__/EntityLoader-test.ts +5 -7
  187. package/src/__tests__/EntityMutator-MutationCacheConsistency-test.ts +17 -19
  188. package/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.ts +73 -0
  189. package/src/__tests__/EntityMutator-test.ts +74 -46
  190. package/src/__tests__/EntityPrivacyPolicy-test.ts +51 -74
  191. package/src/__tests__/EntityQueryContext-test.ts +1 -1
  192. package/src/__tests__/EntitySecondaryCacheLoader-test.ts +9 -9
  193. package/src/__tests__/EntitySelfReferentialEdges-test.ts +119 -122
  194. package/src/__tests__/GenericEntityCacheAdapter-test.ts +83 -28
  195. package/src/__tests__/ReadonlyEntity-test.ts +49 -9
  196. package/src/__tests__/ViewerContext-test.ts +1 -1
  197. package/src/__tests__/ViewerScopedEntityCompanion-test.ts +5 -2
  198. package/src/__tests__/ViewerScopedEntityCompanionProvider-test.ts +1 -1
  199. package/src/__tests__/ViewerScopedEntityMutatorFactory-test.ts +12 -3
  200. package/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.ts +25 -27
  201. package/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.ts +28 -34
  202. package/src/entityUtils.ts +4 -1
  203. package/src/errors/EntityInvalidFieldValueError.ts +5 -5
  204. package/src/errors/EntityNotAuthorizedError.ts +3 -3
  205. package/src/errors/EntityNotFoundError.ts +5 -5
  206. package/src/index.ts +7 -7
  207. package/src/internal/CompositeFieldHolder.ts +218 -0
  208. package/src/internal/CompositeFieldValueMap.ts +78 -0
  209. package/src/internal/EntityDataManager.ts +107 -96
  210. package/src/internal/EntityFieldTransformationUtils.ts +33 -14
  211. package/src/internal/EntityLoadInterfaces.ts +143 -0
  212. package/src/internal/EntityTableDataCoordinator.ts +8 -5
  213. package/src/internal/ReadThroughEntityCache.ts +63 -50
  214. package/src/internal/SingleFieldHolder.ts +131 -0
  215. package/src/internal/__tests__/CompositeFieldHolder-test.ts +25 -0
  216. package/src/internal/__tests__/CompositeFieldValueMap-test.ts +43 -0
  217. package/src/internal/__tests__/EntityDataManager-test.ts +308 -91
  218. package/src/internal/__tests__/EntityFieldTransformationUtils-test.ts +3 -2
  219. package/src/internal/__tests__/ReadThroughEntityCache-test.ts +315 -107
  220. package/src/metrics/EntityMetricsUtils.ts +7 -2
  221. package/src/metrics/IEntityMetricsAdapter.ts +6 -0
  222. package/src/rules/AlwaysAllowPrivacyPolicyRule.ts +5 -5
  223. package/src/rules/AlwaysDenyPrivacyPolicyRule.ts +5 -5
  224. package/src/rules/AlwaysSkipPrivacyPolicyRule.ts +5 -5
  225. package/src/rules/PrivacyPolicyRule.ts +4 -4
  226. package/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.ts +1 -1
  227. package/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.ts +1 -1
  228. package/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.ts +1 -1
  229. package/src/utils/EntityPrivacyUtils.ts +72 -30
  230. package/src/utils/{testing → __testfixtures__}/PrivacyPolicyRuleTestUtils.ts +26 -26
  231. package/src/{testfixtures → utils/__testfixtures__}/SimpleTestEntity.ts +16 -15
  232. package/src/utils/__testfixtures__/StubCacheAdapter.ts +164 -0
  233. package/src/utils/{testing → __testfixtures__}/StubDatabaseAdapter.ts +19 -12
  234. package/src/utils/{testing → __testfixtures__}/StubDatabaseAdapterProvider.ts +4 -4
  235. package/src/utils/__testfixtures__/TSMockitoExtensions.ts +69 -0
  236. package/src/{testfixtures → utils/__testfixtures__}/TestEntity.ts +21 -15
  237. package/src/{testfixtures → utils/__testfixtures__}/TestEntity2.ts +16 -15
  238. package/src/{testfixtures → utils/__testfixtures__}/TestEntityWithMutationTriggers.ts +23 -22
  239. package/src/{testfixtures → utils/__testfixtures__}/TestViewerContext.ts +1 -1
  240. package/src/utils/{testing → __testfixtures__}/describeFieldTestCase.ts +1 -1
  241. package/src/utils/__tests__/EntityPrivacyUtils-test.ts +81 -113
  242. package/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.ts +31 -30
  243. package/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.ts +1 -1
  244. package/src/utils/collections/SerializableKeyMap.ts +84 -0
  245. package/src/utils/collections/__tests__/SerializableKeyMap-test.ts +119 -0
  246. package/src/utils/collections/__tests__/sets-test.ts +17 -0
  247. package/src/utils/collections/maps.ts +7 -8
  248. package/src/utils/collections/sets.ts +3 -0
  249. package/src/utils/mergeEntityMutationTriggerConfigurations.ts +5 -5
  250. package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.d.ts +0 -1
  251. package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js +0 -273
  252. package/build/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.js.map +0 -1
  253. package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.d.ts +0 -26
  254. package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js +0 -110
  255. package/build/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.js.map +0 -1
  256. package/build/__tests__/AuthorizationResultBasedEntityLoader-test.d.ts +0 -1
  257. package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js +0 -401
  258. package/build/__tests__/AuthorizationResultBasedEntityLoader-test.js.map +0 -1
  259. package/build/__tests__/ComposedCacheAdapter-test.d.ts +0 -1
  260. package/build/__tests__/ComposedCacheAdapter-test.js +0 -229
  261. package/build/__tests__/ComposedCacheAdapter-test.js.map +0 -1
  262. package/build/__tests__/ComposedSecondaryEntityCache-test.d.ts +0 -1
  263. package/build/__tests__/ComposedSecondaryEntityCache-test.js +0 -66
  264. package/build/__tests__/ComposedSecondaryEntityCache-test.js.map +0 -1
  265. package/build/__tests__/EnforcingEntityAssociationLoader-test.d.ts +0 -1
  266. package/build/__tests__/EnforcingEntityAssociationLoader-test.js +0 -115
  267. package/build/__tests__/EnforcingEntityAssociationLoader-test.js.map +0 -1
  268. package/build/__tests__/EnforcingEntityLoader-test.d.ts +0 -1
  269. package/build/__tests__/EnforcingEntityLoader-test.js +0 -253
  270. package/build/__tests__/EnforcingEntityLoader-test.js.map +0 -1
  271. package/build/__tests__/Entity-test.d.ts +0 -1
  272. package/build/__tests__/Entity-test.js +0 -54
  273. package/build/__tests__/Entity-test.js.map +0 -1
  274. package/build/__tests__/EntityAssociationLoader-test.d.ts +0 -1
  275. package/build/__tests__/EntityAssociationLoader-test.js +0 -30
  276. package/build/__tests__/EntityAssociationLoader-test.js.map +0 -1
  277. package/build/__tests__/EntityCommonUseCases-test.d.ts +0 -1
  278. package/build/__tests__/EntityCommonUseCases-test.js +0 -154
  279. package/build/__tests__/EntityCommonUseCases-test.js.map +0 -1
  280. package/build/__tests__/EntityCompanion-test.d.ts +0 -1
  281. package/build/__tests__/EntityCompanion-test.js +0 -77
  282. package/build/__tests__/EntityCompanion-test.js.map +0 -1
  283. package/build/__tests__/EntityCompanionProvider-test.d.ts +0 -1
  284. package/build/__tests__/EntityCompanionProvider-test.js +0 -54
  285. package/build/__tests__/EntityCompanionProvider-test.js.map +0 -1
  286. package/build/__tests__/EntityConfiguration-test.d.ts +0 -1
  287. package/build/__tests__/EntityConfiguration-test.js +0 -103
  288. package/build/__tests__/EntityConfiguration-test.js.map +0 -1
  289. package/build/__tests__/EntityDatabaseAdapter-test.d.ts +0 -1
  290. package/build/__tests__/EntityDatabaseAdapter-test.js +0 -146
  291. package/build/__tests__/EntityDatabaseAdapter-test.js.map +0 -1
  292. package/build/__tests__/EntityEdges-test.d.ts +0 -1
  293. package/build/__tests__/EntityEdges-test.js +0 -755
  294. package/build/__tests__/EntityEdges-test.js.map +0 -1
  295. package/build/__tests__/EntityFields-test.d.ts +0 -1
  296. package/build/__tests__/EntityFields-test.js +0 -63
  297. package/build/__tests__/EntityFields-test.js.map +0 -1
  298. package/build/__tests__/EntityLoader-test.d.ts +0 -1
  299. package/build/__tests__/EntityLoader-test.js +0 -36
  300. package/build/__tests__/EntityLoader-test.js.map +0 -1
  301. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.d.ts +0 -1
  302. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js +0 -77
  303. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js.map +0 -1
  304. package/build/__tests__/EntityMutator-test.d.ts +0 -1
  305. package/build/__tests__/EntityMutator-test.js +0 -741
  306. package/build/__tests__/EntityMutator-test.js.map +0 -1
  307. package/build/__tests__/EntityPrivacyPolicy-test.d.ts +0 -1
  308. package/build/__tests__/EntityPrivacyPolicy-test.js +0 -463
  309. package/build/__tests__/EntityPrivacyPolicy-test.js.map +0 -1
  310. package/build/__tests__/EntityQueryContext-test.d.ts +0 -1
  311. package/build/__tests__/EntityQueryContext-test.js +0 -116
  312. package/build/__tests__/EntityQueryContext-test.js.map +0 -1
  313. package/build/__tests__/EntitySecondaryCacheLoader-test.d.ts +0 -1
  314. package/build/__tests__/EntitySecondaryCacheLoader-test.js +0 -60
  315. package/build/__tests__/EntitySecondaryCacheLoader-test.js.map +0 -1
  316. package/build/__tests__/EntitySelfReferentialEdges-test.d.ts +0 -1
  317. package/build/__tests__/EntitySelfReferentialEdges-test.js +0 -247
  318. package/build/__tests__/EntitySelfReferentialEdges-test.js.map +0 -1
  319. package/build/__tests__/GenericEntityCacheAdapter-test.d.ts +0 -1
  320. package/build/__tests__/GenericEntityCacheAdapter-test.js +0 -80
  321. package/build/__tests__/GenericEntityCacheAdapter-test.js.map +0 -1
  322. package/build/__tests__/ReadonlyEntity-test.d.ts +0 -1
  323. package/build/__tests__/ReadonlyEntity-test.js +0 -178
  324. package/build/__tests__/ReadonlyEntity-test.js.map +0 -1
  325. package/build/__tests__/ViewerContext-test.d.ts +0 -1
  326. package/build/__tests__/ViewerContext-test.js +0 -30
  327. package/build/__tests__/ViewerContext-test.js.map +0 -1
  328. package/build/__tests__/ViewerScopedEntityCompanion-test.d.ts +0 -1
  329. package/build/__tests__/ViewerScopedEntityCompanion-test.js +0 -20
  330. package/build/__tests__/ViewerScopedEntityCompanion-test.js.map +0 -1
  331. package/build/__tests__/ViewerScopedEntityCompanionProvider-test.d.ts +0 -1
  332. package/build/__tests__/ViewerScopedEntityCompanionProvider-test.js +0 -20
  333. package/build/__tests__/ViewerScopedEntityCompanionProvider-test.js.map +0 -1
  334. package/build/__tests__/ViewerScopedEntityLoaderFactory-test.d.ts +0 -1
  335. package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js +0 -23
  336. package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js.map +0 -1
  337. package/build/__tests__/ViewerScopedEntityMutatorFactory-test.d.ts +0 -1
  338. package/build/__tests__/ViewerScopedEntityMutatorFactory-test.js +0 -22
  339. package/build/__tests__/ViewerScopedEntityMutatorFactory-test.js.map +0 -1
  340. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.d.ts +0 -1
  341. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +0 -129
  342. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +0 -1
  343. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.d.ts +0 -1
  344. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +0 -136
  345. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js.map +0 -1
  346. package/build/__tests__/entityUtils-test.d.ts +0 -1
  347. package/build/__tests__/entityUtils-test.js +0 -87
  348. package/build/__tests__/entityUtils-test.js.map +0 -1
  349. package/build/internal/__tests__/EntityDataManager-test.d.ts +0 -1
  350. package/build/internal/__tests__/EntityDataManager-test.js +0 -373
  351. package/build/internal/__tests__/EntityDataManager-test.js.map +0 -1
  352. package/build/internal/__tests__/EntityFieldTransformationUtils-test.d.ts +0 -1
  353. package/build/internal/__tests__/EntityFieldTransformationUtils-test.js +0 -136
  354. package/build/internal/__tests__/EntityFieldTransformationUtils-test.js.map +0 -1
  355. package/build/internal/__tests__/ReadThroughEntityCache-test.d.ts +0 -1
  356. package/build/internal/__tests__/ReadThroughEntityCache-test.js +0 -206
  357. package/build/internal/__tests__/ReadThroughEntityCache-test.js.map +0 -1
  358. package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.d.ts +0 -1
  359. package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js +0 -21
  360. package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js.map +0 -1
  361. package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.d.ts +0 -1
  362. package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js +0 -21
  363. package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js.map +0 -1
  364. package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.d.ts +0 -1
  365. package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js +0 -21
  366. package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js.map +0 -1
  367. package/build/testfixtures/DateIDTestEntity.d.ts +0 -19
  368. package/build/testfixtures/DateIDTestEntity.js +0 -48
  369. package/build/testfixtures/DateIDTestEntity.js.map +0 -1
  370. package/build/testfixtures/SimpleTestEntity.d.ts +0 -20
  371. package/build/testfixtures/SimpleTestEntity.js +0 -48
  372. package/build/testfixtures/SimpleTestEntity.js.map +0 -1
  373. package/build/testfixtures/TestEntity.d.ts +0 -30
  374. package/build/testfixtures/TestEntity.js +0 -93
  375. package/build/testfixtures/TestEntity.js.map +0 -1
  376. package/build/testfixtures/TestEntity2.d.ts +0 -20
  377. package/build/testfixtures/TestEntity2.js +0 -51
  378. package/build/testfixtures/TestEntity2.js.map +0 -1
  379. package/build/testfixtures/TestEntityNumberKey.d.ts +0 -19
  380. package/build/testfixtures/TestEntityNumberKey.js +0 -48
  381. package/build/testfixtures/TestEntityNumberKey.js.map +0 -1
  382. package/build/testfixtures/TestEntityWithMutationTriggers.d.ts +0 -36
  383. package/build/testfixtures/TestEntityWithMutationTriggers.js +0 -82
  384. package/build/testfixtures/TestEntityWithMutationTriggers.js.map +0 -1
  385. package/build/testfixtures/TestViewerContext.d.ts +0 -3
  386. package/build/testfixtures/TestViewerContext.js +0 -10
  387. package/build/testfixtures/TestViewerContext.js.map +0 -1
  388. package/build/utils/__tests__/EntityPrivacyUtils-test.d.ts +0 -1
  389. package/build/utils/__tests__/EntityPrivacyUtils-test.js +0 -520
  390. package/build/utils/__tests__/EntityPrivacyUtils-test.js.map +0 -1
  391. package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.d.ts +0 -1
  392. package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js +0 -181
  393. package/build/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.js.map +0 -1
  394. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.d.ts +0 -1
  395. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js +0 -26
  396. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js.map +0 -1
  397. package/build/utils/collections/__tests__/maps-test.d.ts +0 -1
  398. package/build/utils/collections/__tests__/maps-test.js +0 -120
  399. package/build/utils/collections/__tests__/maps-test.js.map +0 -1
  400. package/build/utils/testing/PrivacyPolicyRuleTestUtils.d.ts +0 -28
  401. package/build/utils/testing/PrivacyPolicyRuleTestUtils.js +0 -52
  402. package/build/utils/testing/PrivacyPolicyRuleTestUtils.js.map +0 -1
  403. package/build/utils/testing/StubCacheAdapter.d.ts +0 -27
  404. package/build/utils/testing/StubCacheAdapter.js +0 -86
  405. package/build/utils/testing/StubCacheAdapter.js.map +0 -1
  406. package/build/utils/testing/StubDatabaseAdapter.d.ts +0 -25
  407. package/build/utils/testing/StubDatabaseAdapter.js +0 -191
  408. package/build/utils/testing/StubDatabaseAdapter.js.map +0 -1
  409. package/build/utils/testing/StubDatabaseAdapterProvider.d.ts +0 -7
  410. package/build/utils/testing/StubDatabaseAdapterProvider.js +0 -14
  411. package/build/utils/testing/StubDatabaseAdapterProvider.js.map +0 -1
  412. package/build/utils/testing/StubQueryContextProvider.d.ts +0 -7
  413. package/build/utils/testing/StubQueryContextProvider.js +0 -19
  414. package/build/utils/testing/StubQueryContextProvider.js.map +0 -1
  415. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.d.ts +0 -1
  416. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js +0 -42
  417. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js.map +0 -1
  418. package/build/utils/testing/__tests__/StubDatabaseAdapter-test.d.ts +0 -1
  419. package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js +0 -402
  420. package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js.map +0 -1
  421. package/build/utils/testing/createUnitTestEntityCompanionProvider.d.ts +0 -7
  422. package/build/utils/testing/createUnitTestEntityCompanionProvider.js +0 -36
  423. package/build/utils/testing/createUnitTestEntityCompanionProvider.js.map +0 -1
  424. package/build/utils/testing/describeFieldTestCase.d.ts +0 -2
  425. package/build/utils/testing/describeFieldTestCase.js +0 -18
  426. package/build/utils/testing/describeFieldTestCase.js.map +0 -1
  427. package/src/testfixtures/DateIDTestEntity.ts +0 -59
  428. package/src/testfixtures/TestEntityNumberKey.ts +0 -59
  429. package/src/utils/testing/StubCacheAdapter.ts +0 -122
  430. package/src/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.ts +0 -42
  431. package/src/utils/testing/__tests__/StubDatabaseAdapter-test.ts +0 -548
  432. /package/src/utils/{testing → __testfixtures__}/StubQueryContextProvider.ts +0 -0
  433. /package/src/utils/{testing → __testfixtures__}/createUnitTestEntityCompanionProvider.ts +0 -0
@@ -0,0 +1,104 @@
1
+ import EntityConfiguration from '../EntityConfiguration';
2
+ import { ISerializable, SerializableKeyMap } from '../utils/collections/SerializableKeyMap';
3
+ /**
4
+ * Load method type identifier of a load key. Used for keying data loaders and identification in metrics.
5
+ */
6
+ export declare enum EntityLoadMethodType {
7
+ /**
8
+ * Load method type for loading entities by single fieldName and fieldValue(s).
9
+ */
10
+ SINGLE = "single",
11
+ /**
12
+ * Load method type for loading entities by composite field.
13
+ */
14
+ COMPOSITE = "composite"
15
+ }
16
+ /**
17
+ * Interface responsible for defining how the key and corresponding load values behave in the data manager, cache adapter,
18
+ * and database adapter during entity field loading.
19
+ */
20
+ export interface IEntityLoadKey<TFields extends Record<string, any>, TIDField extends keyof TFields, TSerializedLoadValue, TLoadValue extends IEntityLoadValue<TSerializedLoadValue>> {
21
+ toString(): string;
22
+ /**
23
+ * Vends a new empty load value map with a key type corresponding to the load value type of this load key.
24
+ *
25
+ * @returns A new empty load value map.
26
+ */
27
+ vendNewLoadValueMap<V>(): LoadValueMap<TSerializedLoadValue, TLoadValue, V>;
28
+ /**
29
+ * Determines if this key is cacheable in cache adapters according to the entity configuration.
30
+ *
31
+ * @param entityConfiguration - The entity configuration to check.
32
+ * @returns Boolean indicating whether this key is cacheable.
33
+ */
34
+ isCacheable(entityConfiguration: EntityConfiguration<TFields, TIDField>): boolean;
35
+ /**
36
+ * Creates cache key parts for this key and a load value given an entity configuration.
37
+ * These parts will be included as part of the cache key.
38
+ *
39
+ * @param entityConfiguration - The entity configuration used to derive cache key parts.
40
+ * @param value - The load value for which to create cache key parts for.
41
+ * @returns An object containing the cache key type and parts.
42
+ */
43
+ createCacheKeyPartsForLoadValue(entityConfiguration: EntityConfiguration<TFields, TIDField>, value: TLoadValue): readonly string[];
44
+ /**
45
+ * Gets the load method type of this key. Used as part of cache keys and data loader keys.
46
+ */
47
+ getLoadMethodType(): EntityLoadMethodType;
48
+ /**
49
+ * Gets the data loader key for this key. For single field keys, this is the field name. For composite keys, this is a
50
+ * unique identifier for the composite key.
51
+ */
52
+ getDataManagerDataLoaderKey(): string;
53
+ /**
54
+ * Serialize a load value for use in the data manager data loader as the dataloader value key.
55
+ */
56
+ serializeLoadValue(value: TLoadValue): TSerializedLoadValue;
57
+ /**
58
+ * Deserialize a load value for use in the data manager data loader as the dataloader value key.
59
+ */
60
+ deserializeLoadValue(value: TSerializedLoadValue): TLoadValue;
61
+ /**
62
+ * Validate that that the load values adhere to the typescript types at runtime in order to
63
+ * prevent inadvertently passing invalid values to the data loader, cache adapter, or database adapter.
64
+ * @param values - The load values to validate.
65
+ * @param entityClassName - The name of the entity class to which the load values belong (for error message only).
66
+ */
67
+ validateRuntimeLoadValuesForDataManagerDataLoader(values: readonly TLoadValue[], entityClassName: string): void;
68
+ /**
69
+ * Get the database columns for this key given an entity configuration.
70
+ *
71
+ * @param entityConfiguration - The entity configuration.
72
+ * @returns An array of database column names.
73
+ */
74
+ getDatabaseColumns(entityConfiguration: EntityConfiguration<TFields, TIDField>): readonly string[];
75
+ /**
76
+ * Get the database values corresponding to the database columns for this key for a load value.
77
+ *
78
+ * @param value - The load value.
79
+ * @returns An array of database values.
80
+ */
81
+ getDatabaseValues(value: TLoadValue): readonly any[];
82
+ /**
83
+ * Get the load value for an entity fields object from the database.
84
+ *
85
+ * @param object - The entity fields object.
86
+ * @returns The load value for the object or null if the load value would be invalid for the object (for example, if the value is null).
87
+ */
88
+ getLoadValueForObject(object: Readonly<TFields>): TLoadValue | null;
89
+ }
90
+ /**
91
+ * Interface for a load value corresponding to a load key.
92
+ */
93
+ export interface IEntityLoadValue<TSerialized> extends ISerializable<TSerialized> {
94
+ toString(): string;
95
+ }
96
+ /**
97
+ * Map from load value interface to value.
98
+ */
99
+ export declare abstract class LoadValueMap<TSerialized, TLoadValue extends IEntityLoadValue<TSerialized>, V> extends SerializableKeyMap<TSerialized, TLoadValue, V> {
100
+ }
101
+ /**
102
+ * Load pair type for a load key and load value.
103
+ */
104
+ export type LoadPair<TFields extends Record<string, any>, TIDField extends keyof TFields, TLoadKey extends IEntityLoadKey<TFields, TIDField, TSerializedLoadValue, TLoadValue>, TSerializedLoadValue, TLoadValue extends IEntityLoadValue<TSerializedLoadValue>> = readonly [TLoadKey, TLoadValue];
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LoadValueMap = exports.EntityLoadMethodType = void 0;
4
+ const SerializableKeyMap_1 = require("../utils/collections/SerializableKeyMap");
5
+ /**
6
+ * Load method type identifier of a load key. Used for keying data loaders and identification in metrics.
7
+ */
8
+ var EntityLoadMethodType;
9
+ (function (EntityLoadMethodType) {
10
+ /**
11
+ * Load method type for loading entities by single fieldName and fieldValue(s).
12
+ */
13
+ EntityLoadMethodType["SINGLE"] = "single";
14
+ /**
15
+ * Load method type for loading entities by composite field.
16
+ */
17
+ EntityLoadMethodType["COMPOSITE"] = "composite";
18
+ })(EntityLoadMethodType || (exports.EntityLoadMethodType = EntityLoadMethodType = {}));
19
+ /**
20
+ * Map from load value interface to value.
21
+ */
22
+ class LoadValueMap extends SerializableKeyMap_1.SerializableKeyMap {
23
+ }
24
+ exports.LoadValueMap = LoadValueMap;
25
+ //# sourceMappingURL=EntityLoadInterfaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EntityLoadInterfaces.js","sourceRoot":"","sources":["../../src/internal/EntityLoadInterfaces.ts"],"names":[],"mappings":";;;AACA,gFAA4F;AAE5F;;GAEG;AACH,IAAY,oBAUX;AAVD,WAAY,oBAAoB;IAC9B;;OAEG;IACH,yCAAiB,CAAA;IAEjB;;OAEG;IACH,+CAAuB,CAAA;AACzB,CAAC,EAVW,oBAAoB,oCAApB,oBAAoB,QAU/B;AA4GD;;GAEG;AACH,MAAsB,YAIpB,SAAQ,uCAA8C;CAAG;AAJ3D,oCAI2D"}
@@ -11,12 +11,12 @@ import IEntityMetricsAdapter from '../metrics/IEntityMetricsAdapter';
11
11
  * table. Note that one instance is shared amongst all entities that read from
12
12
  * the table to ensure cross-entity data consistency.
13
13
  */
14
- export default class EntityTableDataCoordinator<TFields extends Record<string, any>> {
15
- readonly entityConfiguration: EntityConfiguration<TFields>;
14
+ export default class EntityTableDataCoordinator<TFields extends Record<string, any>, TIDField extends keyof TFields> {
15
+ readonly entityConfiguration: EntityConfiguration<TFields, TIDField>;
16
16
  private readonly queryContextProvider;
17
- readonly databaseAdapter: EntityDatabaseAdapter<TFields>;
18
- readonly cacheAdapter: IEntityCacheAdapter<TFields>;
19
- readonly dataManager: EntityDataManager<TFields>;
20
- constructor(entityConfiguration: EntityConfiguration<TFields>, databaseAdapterProvider: IEntityDatabaseAdapterProvider, cacheAdapterProvider: IEntityCacheAdapterProvider, queryContextProvider: EntityQueryContextProvider, metricsAdapter: IEntityMetricsAdapter, entityClassName: string);
17
+ readonly databaseAdapter: EntityDatabaseAdapter<TFields, TIDField>;
18
+ readonly cacheAdapter: IEntityCacheAdapter<TFields, TIDField>;
19
+ readonly dataManager: EntityDataManager<TFields, TIDField>;
20
+ constructor(entityConfiguration: EntityConfiguration<TFields, TIDField>, databaseAdapterProvider: IEntityDatabaseAdapterProvider, cacheAdapterProvider: IEntityCacheAdapterProvider, queryContextProvider: EntityQueryContextProvider, metricsAdapter: IEntityMetricsAdapter, entityClassName: string);
21
21
  getQueryContextProvider(): EntityQueryContextProvider;
22
22
  }
@@ -1 +1 @@
1
- {"version":3,"file":"EntityTableDataCoordinator.js","sourceRoot":"","sources":["../../src/internal/EntityTableDataCoordinator.ts"],"names":[],"mappings":";;;;;AAAA,4EAAoD;AACpD,sFAA8D;AAS9D;;;;GAIG;AACH,MAAqB,0BAA0B;IAMlC;IAGQ;IARV,eAAe,CAAiC;IAChD,YAAY,CAA+B;IAC3C,WAAW,CAA6B;IAEjD,YACW,mBAAiD,EAC1D,uBAAuD,EACvD,oBAAiD,EAChC,oBAAgD,EACjE,cAAqC,EACrC,eAAuB;QALd,wBAAmB,GAAnB,mBAAmB,CAA8B;QAGzC,yBAAoB,GAApB,oBAAoB,CAA4B;QAIjE,IAAI,CAAC,eAAe,GAAG,uBAAuB,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;QACvF,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;QAC9E,IAAI,CAAC,WAAW,GAAG,IAAI,2BAAiB,CACtC,IAAI,CAAC,eAAe,EACpB,IAAI,gCAAsB,CAAC,mBAAmB,EAAE,IAAI,CAAC,YAAY,CAAC,EAClE,oBAAoB,EACpB,cAAc,EACd,eAAe,CAChB,CAAC;IACJ,CAAC;IAED,uBAAuB;QACrB,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;CACF;AA3BD,6CA2BC"}
1
+ {"version":3,"file":"EntityTableDataCoordinator.js","sourceRoot":"","sources":["../../src/internal/EntityTableDataCoordinator.ts"],"names":[],"mappings":";;;;;AAAA,4EAAoD;AACpD,sFAA8D;AAS9D;;;;GAIG;AACH,MAAqB,0BAA0B;IASlC;IAGQ;IARV,eAAe,CAA2C;IAC1D,YAAY,CAAyC;IACrD,WAAW,CAAuC;IAE3D,YACW,mBAA2D,EACpE,uBAAuD,EACvD,oBAAiD,EAChC,oBAAgD,EACjE,cAAqC,EACrC,eAAuB;QALd,wBAAmB,GAAnB,mBAAmB,CAAwC;QAGnD,yBAAoB,GAApB,oBAAoB,CAA4B;QAIjE,IAAI,CAAC,eAAe,GAAG,uBAAuB,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;QACvF,IAAI,CAAC,YAAY,GAAG,oBAAoB,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;QAC9E,IAAI,CAAC,WAAW,GAAG,IAAI,2BAAiB,CACtC,IAAI,CAAC,eAAe,EACpB,IAAI,gCAAsB,CAAC,mBAAmB,EAAE,IAAI,CAAC,YAAY,CAAC,EAClE,oBAAoB,EACpB,cAAc,EACd,eAAe,CAChB,CAAC;IACJ,CAAC;IAED,uBAAuB;QACrB,OAAO,IAAI,CAAC,oBAAoB,CAAC;IACnC,CAAC;CACF;AA9BD,6CA8BC"}
@@ -1,11 +1,12 @@
1
1
  import EntityConfiguration from '../EntityConfiguration';
2
2
  import IEntityCacheAdapter from '../IEntityCacheAdapter';
3
+ import { IEntityLoadKey, IEntityLoadValue } from './EntityLoadInterfaces';
3
4
  export declare enum CacheStatus {
4
5
  HIT = 0,
5
6
  MISS = 1,
6
7
  NEGATIVE = 2
7
8
  }
8
- export type CacheLoadResult<TFields> = {
9
+ export type CacheLoadResult<TFields extends Record<string, any>> = {
9
10
  status: CacheStatus.HIT;
10
11
  item: Readonly<TFields>;
11
12
  } | {
@@ -17,33 +18,33 @@ export type CacheLoadResult<TFields> = {
17
18
  * A read-through entity cache is responsible for coordinating EntityDatabaseAdapter and
18
19
  * EntityCacheAdapter within the EntityDataManager.
19
20
  */
20
- export default class ReadThroughEntityCache<TFields extends Record<string, any>> {
21
+ export default class ReadThroughEntityCache<TFields extends Record<string, any>, TIDField extends keyof TFields> {
21
22
  private readonly entityConfiguration;
22
23
  private readonly entityCacheAdapter;
23
- constructor(entityConfiguration: EntityConfiguration<TFields>, entityCacheAdapter: IEntityCacheAdapter<TFields>);
24
- private isFieldCacheable;
24
+ constructor(entityConfiguration: EntityConfiguration<TFields, TIDField>, entityCacheAdapter: IEntityCacheAdapter<TFields, TIDField>);
25
+ private isLoadKeyCacheable;
25
26
  /**
26
27
  * Read-through cache function. Steps:
27
28
  *
28
- * 1. Check for cached (fieldName, fieldValue) objects
29
- * 2. Query the fetcher for fieldValues not in the cache
29
+ * 1. Check for cached (key, value) objects
30
+ * 2. Query the fetcher for values not in the cache
30
31
  * 3. Cache the results from the fetcher
31
32
  * 4. Negatively cache anything missing from the fetcher
32
33
  * 5. Return the full set of data for the query.
33
34
  *
34
- * If cache is not applicable for fieldName, return results from fetcher.
35
+ * If cache is not applicable for key, return results from fetcher.
35
36
  *
36
- * @param fieldName - object field being queried
37
- * @param fieldValues - fieldName field values being queried
38
- * @param fetcher - closure used to provide underlying data source objects for fieldName and fetcherFieldValues
39
- * @returns map from fieldValue to objects that match the query for that fieldValue
37
+ * @param key - load key being queried
38
+ * @param values - load values being queried
39
+ * @param fetcher - closure used to provide underlying data source objects for key and fetcherValues
40
+ * @returns map from value to objects that match the query for that value
40
41
  */
41
- readManyThroughAsync<N extends keyof TFields>(fieldName: N, fieldValues: readonly NonNullable<TFields[N]>[], fetcher: (fetcherFieldValues: readonly NonNullable<TFields[N]>[]) => Promise<ReadonlyMap<NonNullable<TFields[N]>, readonly Readonly<TFields>[]>>): Promise<ReadonlyMap<NonNullable<TFields[N]>, readonly Readonly<TFields>[]>>;
42
+ readManyThroughAsync<TLoadKey extends IEntityLoadKey<TFields, TIDField, TSerializedLoadValue, TLoadValue>, TSerializedLoadValue, TLoadValue extends IEntityLoadValue<TSerializedLoadValue>>(key: TLoadKey, values: readonly TLoadValue[], fetcher: (fetcherValues: readonly TLoadValue[]) => Promise<ReadonlyMap<TLoadValue, readonly Readonly<TFields>[]>>): Promise<ReadonlyMap<TLoadValue, readonly Readonly<TFields>[]>>;
42
43
  /**
43
- * Invalidate the cache for objects cached by (fieldName, fieldValue).
44
+ * Invalidate the cache for objects cached by (key, value).
44
45
  *
45
- * @param fieldName - object field being queried
46
- * @param fieldValues - fieldName field values to be invalidated
46
+ * @param key - load key to be invalidated
47
+ * @param values - load values to be invalidated for key
47
48
  */
48
- invalidateManyAsync<N extends keyof TFields>(fieldName: N, fieldValues: readonly NonNullable<TFields[N]>[]): Promise<void>;
49
+ invalidateManyAsync<TLoadKey extends IEntityLoadKey<TFields, TIDField, TSerializedLoadValue, TLoadValue>, TSerializedLoadValue, TLoadValue extends IEntityLoadValue<TSerializedLoadValue>>(key: TLoadKey, values: readonly TLoadValue[]): Promise<void>;
49
50
  }
@@ -23,81 +23,81 @@ class ReadThroughEntityCache {
23
23
  this.entityConfiguration = entityConfiguration;
24
24
  this.entityCacheAdapter = entityCacheAdapter;
25
25
  }
26
- isFieldCacheable(fieldName) {
27
- return this.entityConfiguration.cacheableKeys.has(fieldName);
26
+ isLoadKeyCacheable(key) {
27
+ return key.isCacheable(this.entityConfiguration);
28
28
  }
29
29
  /**
30
30
  * Read-through cache function. Steps:
31
31
  *
32
- * 1. Check for cached (fieldName, fieldValue) objects
33
- * 2. Query the fetcher for fieldValues not in the cache
32
+ * 1. Check for cached (key, value) objects
33
+ * 2. Query the fetcher for values not in the cache
34
34
  * 3. Cache the results from the fetcher
35
35
  * 4. Negatively cache anything missing from the fetcher
36
36
  * 5. Return the full set of data for the query.
37
37
  *
38
- * If cache is not applicable for fieldName, return results from fetcher.
38
+ * If cache is not applicable for key, return results from fetcher.
39
39
  *
40
- * @param fieldName - object field being queried
41
- * @param fieldValues - fieldName field values being queried
42
- * @param fetcher - closure used to provide underlying data source objects for fieldName and fetcherFieldValues
43
- * @returns map from fieldValue to objects that match the query for that fieldValue
40
+ * @param key - load key being queried
41
+ * @param values - load values being queried
42
+ * @param fetcher - closure used to provide underlying data source objects for key and fetcherValues
43
+ * @returns map from value to objects that match the query for that value
44
44
  */
45
- async readManyThroughAsync(fieldName, fieldValues, fetcher) {
46
- // return normal fetch when cache by fieldName not supported
47
- if (!this.isFieldCacheable(fieldName)) {
48
- return await fetcher(fieldValues);
45
+ async readManyThroughAsync(key, values, fetcher) {
46
+ // return normal fetch when cache by key not supported
47
+ if (!this.isLoadKeyCacheable(key)) {
48
+ return await fetcher(values);
49
49
  }
50
- const cacheLoadResults = await this.entityCacheAdapter.loadManyAsync(fieldName, fieldValues);
51
- (0, invariant_1.default)(cacheLoadResults.size === fieldValues.length, `${this.constructor.name} loadMany should return a result for each fieldValue`);
52
- const fieldValuesToFetchFromDB = Array.from((0, maps_1.filterMap)(cacheLoadResults, (cacheLoadResult) => cacheLoadResult.status === CacheStatus.MISS).keys());
50
+ const cacheLoadResults = await this.entityCacheAdapter.loadManyAsync(key, values);
51
+ (0, invariant_1.default)(cacheLoadResults.size === values.length, `${this.constructor.name} loadMany should return a result for each value`);
52
+ const valuesToFetchFromDB = Array.from((0, maps_1.filterMap)(cacheLoadResults, (cacheLoadResult) => cacheLoadResult.status === CacheStatus.MISS).keys());
53
53
  // put transformed cache hits in result map
54
- const results = new Map();
55
- cacheLoadResults.forEach((cacheLoadResult, fieldValue) => {
54
+ const results = key.vendNewLoadValueMap();
55
+ cacheLoadResults.forEach((cacheLoadResult, value) => {
56
56
  if (cacheLoadResult.status === CacheStatus.HIT) {
57
- results.set(fieldValue, [cacheLoadResult.item]);
57
+ results.set(value, [cacheLoadResult.item]);
58
58
  }
59
59
  });
60
60
  // fetch any misses from DB, add DB objects to results, cache DB results, inform cache of any missing DB results
61
- if (fieldValuesToFetchFromDB.length > 0) {
62
- const dbFetchResults = await fetcher(fieldValuesToFetchFromDB);
63
- const fieldValueDBMisses = fieldValuesToFetchFromDB.filter((fv) => {
61
+ if (valuesToFetchFromDB.length > 0) {
62
+ const dbFetchResults = await fetcher(valuesToFetchFromDB);
63
+ const valueDBMisses = valuesToFetchFromDB.filter((fv) => {
64
64
  const objectsFromFulfillerForFv = dbFetchResults.get(fv);
65
65
  return !objectsFromFulfillerForFv || objectsFromFulfillerForFv.length === 0;
66
66
  });
67
- const objectsToCache = new Map();
68
- for (const [fieldValue, objects] of dbFetchResults.entries()) {
67
+ const objectsToCache = key.vendNewLoadValueMap();
68
+ for (const [value, objects] of dbFetchResults.entries()) {
69
69
  if (objects.length > 1) {
70
70
  // multiple objects received for what was supposed to be a unique query, don't add to return map nor cache
71
71
  // TODO(wschurman): emit or throw here since console may not be available
72
72
  // eslint-disable-next-line no-console
73
- console.warn(`unique key ${String(fieldName)} in ${this.entityConfiguration.tableName} returned multiple rows for ${fieldValue}`);
73
+ console.warn(`unique key ${key} in table ${this.entityConfiguration.tableName} returned multiple rows for ${value}`);
74
74
  continue;
75
75
  }
76
76
  const uniqueObject = objects[0];
77
77
  if (uniqueObject) {
78
- objectsToCache.set(fieldValue, uniqueObject);
79
- results.set(fieldValue, [uniqueObject]);
78
+ objectsToCache.set(value, uniqueObject);
79
+ results.set(value, [uniqueObject]);
80
80
  }
81
81
  }
82
82
  await Promise.all([
83
- this.entityCacheAdapter.cacheManyAsync(fieldName, objectsToCache),
84
- this.entityCacheAdapter.cacheDBMissesAsync(fieldName, fieldValueDBMisses),
83
+ this.entityCacheAdapter.cacheManyAsync(key, objectsToCache),
84
+ this.entityCacheAdapter.cacheDBMissesAsync(key, valueDBMisses),
85
85
  ]);
86
86
  }
87
87
  return results;
88
88
  }
89
89
  /**
90
- * Invalidate the cache for objects cached by (fieldName, fieldValue).
90
+ * Invalidate the cache for objects cached by (key, value).
91
91
  *
92
- * @param fieldName - object field being queried
93
- * @param fieldValues - fieldName field values to be invalidated
92
+ * @param key - load key to be invalidated
93
+ * @param values - load values to be invalidated for key
94
94
  */
95
- async invalidateManyAsync(fieldName, fieldValues) {
96
- // no-op when cache by fieldName not supported
97
- if (!this.isFieldCacheable(fieldName)) {
95
+ async invalidateManyAsync(key, values) {
96
+ // no-op when cache by key not supported
97
+ if (!this.isLoadKeyCacheable(key)) {
98
98
  return;
99
99
  }
100
- await this.entityCacheAdapter.invalidateManyAsync(fieldName, fieldValues);
100
+ await this.entityCacheAdapter.invalidateManyAsync(key, values);
101
101
  }
102
102
  }
103
103
  exports.default = ReadThroughEntityCache;
@@ -1 +1 @@
1
- {"version":3,"file":"ReadThroughEntityCache.js","sourceRoot":"","sources":["../../src/internal/ReadThroughEntityCache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ReadThroughEntityCache.js","sourceRoot":"","sources":["../../src/internal/ReadThroughEntityCache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ import EntityConfiguration from '../EntityConfiguration';
2
+ import { EntityLoadMethodType, IEntityLoadKey, IEntityLoadValue, LoadValueMap } from './EntityLoadInterfaces';
3
+ /**
4
+ * A load key that represents a single field (fieldName) on an entity.
5
+ */
6
+ export declare class SingleFieldHolder<TFields extends Record<string, any>, TIDField extends keyof TFields, N extends keyof TFields> implements IEntityLoadKey<TFields, TIDField, NonNullable<TFields[N]>, SingleFieldValueHolder<TFields, N>> {
7
+ readonly fieldName: N;
8
+ constructor(fieldName: N);
9
+ toString(): string;
10
+ isCacheable(entityConfiguration: EntityConfiguration<TFields, TIDField>): boolean;
11
+ getDatabaseColumns(entityConfiguration: EntityConfiguration<TFields, TIDField>): string[];
12
+ getDatabaseValues(value: SingleFieldValueHolder<TFields, N>): readonly any[];
13
+ getLoadValueForObject(object: Readonly<TFields>): SingleFieldValueHolder<TFields, N> | null;
14
+ createCacheKeyPartsForLoadValue(entityConfiguration: EntityConfiguration<TFields, TIDField>, value: SingleFieldValueHolder<TFields, N>): readonly string[];
15
+ getLoadMethodType(): EntityLoadMethodType;
16
+ getDataManagerDataLoaderKey(): string;
17
+ serializeLoadValue(value: SingleFieldValueHolder<TFields, N>): NonNullable<TFields[N]>;
18
+ deserializeLoadValue(value: NonNullable<TFields[N]>): SingleFieldValueHolder<TFields, N>;
19
+ validateRuntimeLoadValuesForDataManagerDataLoader(values: readonly SingleFieldValueHolder<TFields, N>[], entityClassName: string): void;
20
+ vendNewLoadValueMap<V>(): LoadValueMap<NonNullable<TFields[N]>, SingleFieldValueHolder<TFields, N>, V>;
21
+ }
22
+ /**
23
+ * A load value for a SingleFieldHolder.
24
+ */
25
+ export declare class SingleFieldValueHolder<TFields extends Record<string, any>, N extends keyof TFields> implements IEntityLoadValue<NonNullable<TFields[N]>> {
26
+ readonly fieldValue: NonNullable<TFields[N]>;
27
+ constructor(fieldValue: NonNullable<TFields[N]>);
28
+ toString(): string;
29
+ serialize(): NonNullable<TFields[N]>;
30
+ static deserialize<TFields extends Record<string, any>, N extends keyof TFields>(fieldValue: NonNullable<TFields[N]>): SingleFieldValueHolder<TFields, N>;
31
+ }
32
+ export declare class SingleFieldValueHolderMap<TFields extends Record<string, any>, N extends keyof TFields, V> extends LoadValueMap<NonNullable<TFields[N]>, SingleFieldValueHolder<TFields, N>, V> {
33
+ protected deserializeKey(serializedKey: NonNullable<TFields[N]>): SingleFieldValueHolder<TFields, N>;
34
+ }
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.SingleFieldValueHolderMap = exports.SingleFieldValueHolder = exports.SingleFieldHolder = void 0;
7
+ const invariant_1 = __importDefault(require("invariant"));
8
+ const EntityFieldTransformationUtils_1 = require("./EntityFieldTransformationUtils");
9
+ const EntityLoadInterfaces_1 = require("./EntityLoadInterfaces");
10
+ /**
11
+ * A load key that represents a single field (fieldName) on an entity.
12
+ */
13
+ class SingleFieldHolder {
14
+ fieldName;
15
+ constructor(fieldName) {
16
+ this.fieldName = fieldName;
17
+ }
18
+ toString() {
19
+ return `SingleField(${String(this.fieldName)})`;
20
+ }
21
+ isCacheable(entityConfiguration) {
22
+ return entityConfiguration.cacheableKeys.has(this.fieldName);
23
+ }
24
+ getDatabaseColumns(entityConfiguration) {
25
+ return [(0, EntityFieldTransformationUtils_1.getDatabaseFieldForEntityField)(entityConfiguration, this.fieldName)];
26
+ }
27
+ getDatabaseValues(value) {
28
+ return [value.fieldValue];
29
+ }
30
+ getLoadValueForObject(object) {
31
+ const value = object[this.fieldName];
32
+ if (value === null || value === undefined) {
33
+ return null;
34
+ }
35
+ return new SingleFieldValueHolder(value);
36
+ }
37
+ createCacheKeyPartsForLoadValue(entityConfiguration, value) {
38
+ const columnName = entityConfiguration.entityToDBFieldsKeyMapping.get(this.fieldName);
39
+ (0, invariant_1.default)(columnName, `database field mapping missing for ${String(this.fieldName)}`);
40
+ return [columnName, String(value.fieldValue)];
41
+ }
42
+ getLoadMethodType() {
43
+ return EntityLoadInterfaces_1.EntityLoadMethodType.SINGLE;
44
+ }
45
+ getDataManagerDataLoaderKey() {
46
+ return this.fieldName;
47
+ }
48
+ serializeLoadValue(value) {
49
+ return value.serialize();
50
+ }
51
+ deserializeLoadValue(value) {
52
+ return SingleFieldValueHolder.deserialize(value);
53
+ }
54
+ validateRuntimeLoadValuesForDataManagerDataLoader(values, entityClassName) {
55
+ const nullOrUndefinedValueIndex = values.findIndex((value) => value.fieldValue === null || value.fieldValue === undefined);
56
+ if (nullOrUndefinedValueIndex >= 0) {
57
+ throw new Error(`Invalid load: ${entityClassName} (${String(this.fieldName)} = ${values[nullOrUndefinedValueIndex]?.fieldValue})`);
58
+ }
59
+ }
60
+ vendNewLoadValueMap() {
61
+ return new SingleFieldValueHolderMap();
62
+ }
63
+ }
64
+ exports.SingleFieldHolder = SingleFieldHolder;
65
+ /**
66
+ * A load value for a SingleFieldHolder.
67
+ */
68
+ class SingleFieldValueHolder {
69
+ fieldValue;
70
+ constructor(fieldValue) {
71
+ this.fieldValue = fieldValue;
72
+ }
73
+ toString() {
74
+ return `SingleFieldValue(${String(this.fieldValue)})`;
75
+ }
76
+ serialize() {
77
+ return this.fieldValue;
78
+ }
79
+ static deserialize(fieldValue) {
80
+ return new SingleFieldValueHolder(fieldValue);
81
+ }
82
+ }
83
+ exports.SingleFieldValueHolder = SingleFieldValueHolder;
84
+ class SingleFieldValueHolderMap extends EntityLoadInterfaces_1.LoadValueMap {
85
+ deserializeKey(serializedKey) {
86
+ return SingleFieldValueHolder.deserialize(serializedKey);
87
+ }
88
+ }
89
+ exports.SingleFieldValueHolderMap = SingleFieldValueHolderMap;
90
+ //# sourceMappingURL=SingleFieldHolder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SingleFieldHolder.js","sourceRoot":"","sources":["../../src/internal/SingleFieldHolder.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import IEntityMetricsAdapter, { EntityMetricsLoadType, EntityMetricsMutationType } from './IEntityMetricsAdapter';
2
+ import { IEntityLoadValue } from '../internal/EntityLoadInterfaces';
2
3
  export declare const timeAndLogLoadEventAsync: (metricsAdapter: IEntityMetricsAdapter, loadType: EntityMetricsLoadType, entityClassName: string) => <TFields>(promise: Promise<readonly Readonly<TFields>[]>) => Promise<readonly Readonly<TFields>[]>;
3
- export declare const timeAndLogLoadMapEventAsync: (metricsAdapter: IEntityMetricsAdapter, loadType: EntityMetricsLoadType, entityClassName: string) => <TFields, N extends keyof TFields>(promise: Promise<ReadonlyMap<NonNullable<TFields[N]>, readonly Readonly<TFields>[]>>) => Promise<ReadonlyMap<NonNullable<TFields[N]>, readonly Readonly<TFields>[]>>;
4
+ export declare const timeAndLogLoadMapEventAsync: (metricsAdapter: IEntityMetricsAdapter, loadType: EntityMetricsLoadType, entityClassName: string) => <TFields extends Record<string, any>, TSerializedLoadValue, TLoadValue extends IEntityLoadValue<TSerializedLoadValue>>(promise: Promise<ReadonlyMap<TLoadValue, readonly Readonly<TFields>[]>>) => Promise<ReadonlyMap<TLoadValue, readonly Readonly<TFields>[]>>;
4
5
  export declare const timeAndLogMutationEventAsync: (metricsAdapter: IEntityMetricsAdapter, mutationType: EntityMetricsMutationType, entityClassName: string) => <T>(promise: Promise<T>) => Promise<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"EntityMetricsUtils.js","sourceRoot":"","sources":["../../src/metrics/EntityMetricsUtils.ts"],"names":[],"mappings":";;;AAIA,oDAAsD;AAE/C,MAAM,wBAAwB,GACnC,CACE,cAAqC,EACrC,QAA+B,EAC/B,eAAuB,EACvB,EAAE,CACJ,KAAK,EAAW,OAA8C,EAAE,EAAE;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE3B,cAAc,CAAC,uBAAuB,CAAC;QACrC,IAAI,EAAE,QAAQ;QACd,eAAe;QACf,QAAQ,EAAE,OAAO,GAAG,SAAS;QAC7B,KAAK,EAAE,MAAM,CAAC,MAAM;KACrB,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAnBS,QAAA,wBAAwB,4BAmBjC;AAEG,MAAM,2BAA2B,GACtC,CACE,cAAqC,EACrC,QAA+B,EAC/B,eAAuB,EACvB,EAAE,CACJ,KAAK,EACH,OAAoF,EACpF,EAAE;IACF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE3B,MAAM,KAAK,GAAG,IAAA,gBAAS,EAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAE/D,cAAc,CAAC,uBAAuB,CAAC;QACrC,IAAI,EAAE,QAAQ;QACd,eAAe;QACf,QAAQ,EAAE,OAAO,GAAG,SAAS;QAC7B,KAAK;KACN,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAvBS,QAAA,2BAA2B,+BAuBpC;AAEG,MAAM,4BAA4B,GACvC,CACE,cAAqC,EACrC,YAAuC,EACvC,eAAuB,EACvB,EAAE,CACJ,KAAK,EAAK,OAAmB,EAAE,EAAE;IAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE3B,cAAc,CAAC,uBAAuB,CAAC;QACrC,IAAI,EAAE,YAAY;QAClB,eAAe;QACf,QAAQ,EAAE,OAAO,GAAG,SAAS;KAC9B,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAlBS,QAAA,4BAA4B,gCAkBrC"}
1
+ {"version":3,"file":"EntityMetricsUtils.js","sourceRoot":"","sources":["../../src/metrics/EntityMetricsUtils.ts"],"names":[],"mappings":";;;AAKA,oDAAsD;AAE/C,MAAM,wBAAwB,GACnC,CACE,cAAqC,EACrC,QAA+B,EAC/B,eAAuB,EACvB,EAAE,CACJ,KAAK,EAAW,OAA8C,EAAE,EAAE;IAChE,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE3B,cAAc,CAAC,uBAAuB,CAAC;QACrC,IAAI,EAAE,QAAQ;QACd,eAAe;QACf,QAAQ,EAAE,OAAO,GAAG,SAAS;QAC7B,KAAK,EAAE,MAAM,CAAC,MAAM;KACrB,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAnBS,QAAA,wBAAwB,4BAmBjC;AAEG,MAAM,2BAA2B,GACtC,CACE,cAAqC,EACrC,QAA+B,EAC/B,eAAuB,EACvB,EAAE,CACJ,KAAK,EAKH,OAAuE,EACvE,EAAE;IACF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE3B,MAAM,KAAK,GAAG,IAAA,gBAAS,EAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAE/D,cAAc,CAAC,uBAAuB,CAAC;QACrC,IAAI,EAAE,QAAQ;QACd,eAAe;QACf,QAAQ,EAAE,OAAO,GAAG,SAAS;QAC7B,KAAK;KACN,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AA3BS,QAAA,2BAA2B,+BA2BpC;AAEG,MAAM,4BAA4B,GACvC,CACE,cAAqC,EACrC,YAAuC,EACvC,eAAuB,EACvB,EAAE,CACJ,KAAK,EAAK,OAAmB,EAAE,EAAE;IAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;IAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE3B,cAAc,CAAC,uBAAuB,CAAC;QACrC,IAAI,EAAE,YAAY;QAClB,eAAe;QACf,QAAQ,EAAE,OAAO,GAAG,SAAS;KAC9B,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAlBS,QAAA,4BAA4B,gCAkBrC"}
@@ -1,4 +1,5 @@
1
1
  import { EntityAuthorizationAction, EntityPrivacyPolicyEvaluationMode } from '../EntityPrivacyPolicy';
2
+ import { EntityLoadMethodType } from '../internal/EntityLoadInterfaces';
2
3
  export declare enum EntityMetricsLoadType {
3
4
  LOAD_MANY = 0,
4
5
  LOAD_MANY_EQUALITY_CONJUNCTION = 1,
@@ -67,6 +68,10 @@ export interface IncrementLoadCountEvent {
67
68
  * Type of this event.
68
69
  */
69
70
  type: IncrementLoadCountEventType;
71
+ /**
72
+ * Load method type for this event.
73
+ */
74
+ loadType: EntityLoadMethodType;
70
75
  /**
71
76
  * Number of field values being loaded for this call.
72
77
  */
@@ -1 +1 @@
1
- {"version":3,"file":"IEntityMetricsAdapter.js","sourceRoot":"","sources":["../../src/metrics/IEntityMetricsAdapter.ts"],"names":[],"mappings":";;;AAKA,IAAY,qBAIX;AAJD,WAAY,qBAAqB;IAC/B,2EAAS,CAAA;IACT,qHAA8B,CAAA;IAC9B,mFAAa,CAAA;AACf,CAAC,EAJW,qBAAqB,qCAArB,qBAAqB,QAIhC;AA2BD,IAAY,yBAIX;AAJD,WAAY,yBAAyB;IACnC,6EAAM,CAAA;IACN,6EAAM,CAAA;IACN,6EAAM,CAAA;AACR,CAAC,EAJW,yBAAyB,yCAAzB,yBAAyB,QAIpC;AAmBD,IAAY,2BAgBX;AAhBD,WAAY,2BAA2B;IACrC;;;OAGG;IACH,yFAAU,CAAA;IAEV;;OAEG;IACH,+EAAK,CAAA;IAEL;;OAEG;IACH,qFAAQ,CAAA;AACV,CAAC,EAhBW,2BAA2B,2CAA3B,2BAA2B,QAgBtC;AAsBD,IAAY,gCAGX;AAHD,WAAY,gCAAgC;IAC1C,uFAAI,CAAA;IACJ,yFAAK,CAAA;AACP,CAAC,EAHW,gCAAgC,gDAAhC,gCAAgC,QAG3C"}
1
+ {"version":3,"file":"IEntityMetricsAdapter.js","sourceRoot":"","sources":["../../src/metrics/IEntityMetricsAdapter.ts"],"names":[],"mappings":";;;AAMA,IAAY,qBAIX;AAJD,WAAY,qBAAqB;IAC/B,2EAAS,CAAA;IACT,qHAA8B,CAAA;IAC9B,mFAAa,CAAA;AACf,CAAC,EAJW,qBAAqB,qCAArB,qBAAqB,QAIhC;AA2BD,IAAY,yBAIX;AAJD,WAAY,yBAAyB;IACnC,6EAAM,CAAA;IACN,6EAAM,CAAA;IACN,6EAAM,CAAA;AACR,CAAC,EAJW,yBAAyB,yCAAzB,yBAAyB,QAIpC;AAmBD,IAAY,2BAgBX;AAhBD,WAAY,2BAA2B;IACrC;;;OAGG;IACH,yFAAU,CAAA;IAEV;;OAEG;IACH,+EAAK,CAAA;IAEL;;OAEG;IACH,qFAAQ,CAAA;AACV,CAAC,EAhBW,2BAA2B,2CAA3B,2BAA2B,QAgBtC;AA2BD,IAAY,gCAGX;AAHD,WAAY,gCAAgC;IAC1C,uFAAI,CAAA;IACJ,yFAAK,CAAA;AACP,CAAC,EAHW,gCAAgC,gDAAhC,gCAAgC,QAG3C"}
@@ -6,6 +6,6 @@ import ViewerContext from '../ViewerContext';
6
6
  /**
7
7
  * Privacy policy rule that always allows.
8
8
  */
9
- export default class AlwaysAllowPrivacyPolicyRule<TFields extends object, TID extends NonNullable<TFields[TSelectedFields]>, TViewerContext extends ViewerContext, TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>, TSelectedFields extends keyof TFields = keyof TFields> extends PrivacyPolicyRule<TFields, TID, TViewerContext, TEntity, TSelectedFields> {
10
- evaluateAsync(_viewerContext: TViewerContext, _queryContext: EntityQueryContext, _evaluationContext: EntityPrivacyPolicyEvaluationContext<TFields, TID, TViewerContext, TEntity, TSelectedFields>, _entity: TEntity): Promise<RuleEvaluationResult>;
9
+ export default class AlwaysAllowPrivacyPolicyRule<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 = keyof TFields> extends PrivacyPolicyRule<TFields, TIDField, TViewerContext, TEntity, TSelectedFields> {
10
+ evaluateAsync(_viewerContext: TViewerContext, _queryContext: EntityQueryContext, _evaluationContext: EntityPrivacyPolicyEvaluationContext<TFields, TIDField, TViewerContext, TEntity, TSelectedFields>, _entity: TEntity): Promise<RuleEvaluationResult>;
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AlwaysAllowPrivacyPolicyRule.js","sourceRoot":"","sources":["../../src/rules/AlwaysAllowPrivacyPolicyRule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yEAA8E;AAM9E;;GAEG;AACH,MAAqB,4BAMnB,SAAQ,2BAAyE;IACjF,KAAK,CAAC,aAAa,CACjB,cAA8B,EAC9B,aAAiC,EACjC,kBAMC,EACD,OAAgB;QAEhB,OAAO,wCAAoB,CAAC,KAAK,CAAC;IACpC,CAAC;CACF;AArBD,+CAqBC"}
1
+ {"version":3,"file":"AlwaysAllowPrivacyPolicyRule.js","sourceRoot":"","sources":["../../src/rules/AlwaysAllowPrivacyPolicyRule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yEAA8E;AAM9E;;GAEG;AACH,MAAqB,4BAMnB,SAAQ,2BAA8E;IACtF,KAAK,CAAC,aAAa,CACjB,cAA8B,EAC9B,aAAiC,EACjC,kBAMC,EACD,OAAgB;QAEhB,OAAO,wCAAoB,CAAC,KAAK,CAAC;IACpC,CAAC;CACF;AArBD,+CAqBC"}
@@ -6,6 +6,6 @@ import ViewerContext from '../ViewerContext';
6
6
  /**
7
7
  * Privacy policy rule that always denies.
8
8
  */
9
- export default class AlwaysDenyPrivacyPolicyRule<TFields extends object, TID extends NonNullable<TFields[TSelectedFields]>, TViewerContext extends ViewerContext, TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>, TSelectedFields extends keyof TFields = keyof TFields> extends PrivacyPolicyRule<TFields, TID, TViewerContext, TEntity, TSelectedFields> {
10
- evaluateAsync(_viewerContext: TViewerContext, _queryContext: EntityQueryContext, _evaluationContext: EntityPrivacyPolicyEvaluationContext<TFields, TID, TViewerContext, TEntity, TSelectedFields>, _entity: TEntity): Promise<RuleEvaluationResult>;
9
+ export default class AlwaysDenyPrivacyPolicyRule<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 = keyof TFields> extends PrivacyPolicyRule<TFields, TIDField, TViewerContext, TEntity, TSelectedFields> {
10
+ evaluateAsync(_viewerContext: TViewerContext, _queryContext: EntityQueryContext, _evaluationContext: EntityPrivacyPolicyEvaluationContext<TFields, TIDField, TViewerContext, TEntity, TSelectedFields>, _entity: TEntity): Promise<RuleEvaluationResult>;
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AlwaysDenyPrivacyPolicyRule.js","sourceRoot":"","sources":["../../src/rules/AlwaysDenyPrivacyPolicyRule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yEAA8E;AAM9E;;GAEG;AACH,MAAqB,2BAMnB,SAAQ,2BAAyE;IACjF,KAAK,CAAC,aAAa,CACjB,cAA8B,EAC9B,aAAiC,EACjC,kBAMC,EACD,OAAgB;QAEhB,OAAO,wCAAoB,CAAC,IAAI,CAAC;IACnC,CAAC;CACF;AArBD,8CAqBC"}
1
+ {"version":3,"file":"AlwaysDenyPrivacyPolicyRule.js","sourceRoot":"","sources":["../../src/rules/AlwaysDenyPrivacyPolicyRule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yEAA8E;AAM9E;;GAEG;AACH,MAAqB,2BAMnB,SAAQ,2BAA8E;IACtF,KAAK,CAAC,aAAa,CACjB,cAA8B,EAC9B,aAAiC,EACjC,kBAMC,EACD,OAAgB;QAEhB,OAAO,wCAAoB,CAAC,IAAI,CAAC;IACnC,CAAC;CACF;AArBD,8CAqBC"}
@@ -6,6 +6,6 @@ import ViewerContext from '../ViewerContext';
6
6
  /**
7
7
  * A no-op policy rule that always skips.
8
8
  */
9
- export default class AlwaysSkipPrivacyPolicyRule<TFields extends object, TID extends NonNullable<TFields[TSelectedFields]>, TViewerContext extends ViewerContext, TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>, TSelectedFields extends keyof TFields = keyof TFields> extends PrivacyPolicyRule<TFields, TID, TViewerContext, TEntity, TSelectedFields> {
10
- evaluateAsync(_viewerContext: TViewerContext, _queryContext: EntityQueryContext, _evaluationContext: EntityPrivacyPolicyEvaluationContext<TFields, TID, TViewerContext, TEntity, TSelectedFields>, _entity: TEntity): Promise<RuleEvaluationResult>;
9
+ export default class AlwaysSkipPrivacyPolicyRule<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 = keyof TFields> extends PrivacyPolicyRule<TFields, TIDField, TViewerContext, TEntity, TSelectedFields> {
10
+ evaluateAsync(_viewerContext: TViewerContext, _queryContext: EntityQueryContext, _evaluationContext: EntityPrivacyPolicyEvaluationContext<TFields, TIDField, TViewerContext, TEntity, TSelectedFields>, _entity: TEntity): Promise<RuleEvaluationResult>;
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AlwaysSkipPrivacyPolicyRule.js","sourceRoot":"","sources":["../../src/rules/AlwaysSkipPrivacyPolicyRule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yEAA8E;AAM9E;;GAEG;AACH,MAAqB,2BAMnB,SAAQ,2BAAyE;IACjF,KAAK,CAAC,aAAa,CACjB,cAA8B,EAC9B,aAAiC,EACjC,kBAMC,EACD,OAAgB;QAEhB,OAAO,wCAAoB,CAAC,IAAI,CAAC;IACnC,CAAC;CACF;AArBD,8CAqBC"}
1
+ {"version":3,"file":"AlwaysSkipPrivacyPolicyRule.js","sourceRoot":"","sources":["../../src/rules/AlwaysSkipPrivacyPolicyRule.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yEAA8E;AAM9E;;GAEG;AACH,MAAqB,2BAMnB,SAAQ,2BAA8E;IACtF,KAAK,CAAC,aAAa,CACjB,cAA8B,EAC9B,aAAiC,EACjC,kBAMC,EACD,OAAgB;QAEhB,OAAO,wCAAoB,CAAC,IAAI,CAAC;IACnC,CAAC;CACF;AArBD,8CAqBC"}
@@ -32,6 +32,6 @@ export declare enum RuleEvaluationResult {
32
32
  * - Blocking. For example, a user blocks another user from seeing their posts, and the rule
33
33
  * would be named something like `DenyIfViewerHasBeenBlockedPrivacyPolicyRule`.
34
34
  */
35
- export default abstract class PrivacyPolicyRule<TFields extends object, TID extends NonNullable<TFields[TSelectedFields]>, TViewerContext extends ViewerContext, TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>, TSelectedFields extends keyof TFields = keyof TFields> {
36
- abstract evaluateAsync(viewerContext: TViewerContext, queryContext: EntityQueryContext, evaluationContext: EntityPrivacyPolicyEvaluationContext<TFields, TID, TViewerContext, TEntity, TSelectedFields>, entity: TEntity): Promise<RuleEvaluationResult>;
35
+ export default abstract class PrivacyPolicyRule<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 = keyof TFields> {
36
+ abstract evaluateAsync(viewerContext: TViewerContext, queryContext: EntityQueryContext, evaluationContext: EntityPrivacyPolicyEvaluationContext<TFields, TIDField, TViewerContext, TEntity, TSelectedFields>, entity: TEntity): Promise<RuleEvaluationResult>;
37
37
  }