@expo/entity 0.34.0 → 0.36.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 (333) hide show
  1. package/build/AuthorizationResultBasedEntityLoader.d.ts +128 -0
  2. package/build/AuthorizationResultBasedEntityLoader.js +196 -0
  3. package/build/AuthorizationResultBasedEntityLoader.js.map +1 -0
  4. package/build/ComposedEntityCacheAdapter.js +1 -0
  5. package/build/ComposedEntityCacheAdapter.js.map +1 -1
  6. package/build/ComposedSecondaryEntityCache.js +1 -0
  7. package/build/ComposedSecondaryEntityCache.js.map +1 -1
  8. package/build/EnforcingEntityLoader.d.ts +5 -4
  9. package/build/EnforcingEntityLoader.js +4 -2
  10. package/build/EnforcingEntityLoader.js.map +1 -1
  11. package/build/Entity.d.ts +4 -31
  12. package/build/Entity.js +19 -46
  13. package/build/Entity.js.map +1 -1
  14. package/build/EntityAssociationLoader.d.ts +9 -9
  15. package/build/EntityAssociationLoader.js +37 -12
  16. package/build/EntityAssociationLoader.js.map +1 -1
  17. package/build/EntityCompanion.js +9 -1
  18. package/build/EntityCompanion.js.map +1 -1
  19. package/build/EntityCompanionProvider.d.ts +3 -1
  20. package/build/EntityCompanionProvider.js +10 -4
  21. package/build/EntityCompanionProvider.js.map +1 -1
  22. package/build/EntityConfiguration.d.ts +2 -1
  23. package/build/EntityConfiguration.js +19 -1
  24. package/build/EntityConfiguration.js.map +1 -1
  25. package/build/EntityDatabaseAdapter.d.ts +2 -2
  26. package/build/EntityDatabaseAdapter.js +5 -3
  27. package/build/EntityDatabaseAdapter.js.map +1 -1
  28. package/build/EntityFieldDefinition.d.ts +21 -10
  29. package/build/EntityFieldDefinition.js +8 -9
  30. package/build/EntityFieldDefinition.js.map +1 -1
  31. package/build/EntityFields.d.ts +10 -0
  32. package/build/EntityFields.js +15 -1
  33. package/build/EntityFields.js.map +1 -1
  34. package/build/EntityLoader.d.ts +12 -125
  35. package/build/EntityLoader.js +24 -239
  36. package/build/EntityLoader.js.map +1 -1
  37. package/build/EntityLoaderFactory.d.ts +1 -1
  38. package/build/EntityLoaderFactory.js +3 -0
  39. package/build/EntityLoaderFactory.js.map +1 -1
  40. package/build/EntityLoaderUtils.d.ts +58 -0
  41. package/build/EntityLoaderUtils.js +109 -0
  42. package/build/EntityLoaderUtils.js.map +1 -0
  43. package/build/EntityMutator.d.ts +1 -0
  44. package/build/EntityMutator.js +71 -56
  45. package/build/EntityMutator.js.map +1 -1
  46. package/build/EntityMutatorFactory.js +9 -0
  47. package/build/EntityMutatorFactory.js.map +1 -1
  48. package/build/EntityPrivacyPolicy.d.ts +11 -5
  49. package/build/EntityPrivacyPolicy.js +5 -7
  50. package/build/EntityPrivacyPolicy.js.map +1 -1
  51. package/build/EntityQueryContext.d.ts +2 -1
  52. package/build/EntityQueryContext.js +11 -6
  53. package/build/EntityQueryContext.js.map +1 -1
  54. package/build/EntityQueryContextProvider.d.ts +1 -1
  55. package/build/EntityQueryContextProvider.js +1 -1
  56. package/build/EntityQueryContextProvider.js.map +1 -1
  57. package/build/EntitySecondaryCacheLoader.js +5 -1
  58. package/build/EntitySecondaryCacheLoader.js.map +1 -1
  59. package/build/GenericEntityCacheAdapter.js +1 -0
  60. package/build/GenericEntityCacheAdapter.js.map +1 -1
  61. package/build/GenericSecondaryEntityCache.js +2 -0
  62. package/build/GenericSecondaryEntityCache.js.map +1 -1
  63. package/build/IEntityCacheAdapterProvider.d.ts +1 -1
  64. package/build/IEntityDatabaseAdapterProvider.d.ts +1 -1
  65. package/build/ReadonlyEntity.d.ts +1 -1
  66. package/build/ReadonlyEntity.js +9 -2
  67. package/build/ReadonlyEntity.js.map +1 -1
  68. package/build/ViewerContext.d.ts +2 -2
  69. package/build/ViewerContext.js +5 -3
  70. package/build/ViewerContext.js.map +1 -1
  71. package/build/ViewerScopedEntityCompanion.js +2 -0
  72. package/build/ViewerScopedEntityCompanion.js.map +1 -1
  73. package/build/ViewerScopedEntityCompanionProvider.d.ts +0 -1
  74. package/build/ViewerScopedEntityCompanionProvider.js +2 -1
  75. package/build/ViewerScopedEntityCompanionProvider.js.map +1 -1
  76. package/build/ViewerScopedEntityLoaderFactory.d.ts +1 -1
  77. package/build/ViewerScopedEntityLoaderFactory.js +2 -0
  78. package/build/ViewerScopedEntityLoaderFactory.js.map +1 -1
  79. package/build/ViewerScopedEntityMutatorFactory.js +2 -0
  80. package/build/ViewerScopedEntityMutatorFactory.js.map +1 -1
  81. package/build/__tests__/ComposedCacheAdapter-test.js +2 -0
  82. package/build/__tests__/ComposedCacheAdapter-test.js.map +1 -1
  83. package/build/__tests__/ComposedSecondaryEntityCache-test.js +1 -0
  84. package/build/__tests__/ComposedSecondaryEntityCache-test.js.map +1 -1
  85. package/build/__tests__/EnforcingEntityLoader-test.js +101 -113
  86. package/build/__tests__/EnforcingEntityLoader-test.js.map +1 -1
  87. package/build/__tests__/Entity-test.js +5 -137
  88. package/build/__tests__/Entity-test.js.map +1 -1
  89. package/build/__tests__/EntityAssociationLoader-test.js +37 -65
  90. package/build/__tests__/EntityAssociationLoader-test.js.map +1 -1
  91. package/build/__tests__/EntityCommonUseCases-test.js +31 -37
  92. package/build/__tests__/EntityCommonUseCases-test.js.map +1 -1
  93. package/build/__tests__/EntityCompanion-test.js +26 -3
  94. package/build/__tests__/EntityCompanion-test.js.map +1 -1
  95. package/build/__tests__/EntityConfiguration-test.js +103 -0
  96. package/build/__tests__/EntityConfiguration-test.js.map +1 -0
  97. package/build/__tests__/EntityDatabaseAdapter-test.js +6 -0
  98. package/build/__tests__/EntityDatabaseAdapter-test.js.map +1 -1
  99. package/build/__tests__/EntityEdges-test.js +89 -80
  100. package/build/__tests__/EntityEdges-test.js.map +1 -1
  101. package/build/__tests__/EntityFields-test.js +6 -0
  102. package/build/__tests__/EntityFields-test.js.map +1 -1
  103. package/build/__tests__/EntityLoader-constructor-test.js +17 -18
  104. package/build/__tests__/EntityLoader-constructor-test.js.map +1 -1
  105. package/build/__tests__/EntityLoader-test.js +93 -41
  106. package/build/__tests__/EntityLoader-test.js.map +1 -1
  107. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js +18 -21
  108. package/build/__tests__/EntityMutator-MutationCacheConsistency-test.js.map +1 -1
  109. package/build/__tests__/EntityMutator-test.js +74 -29
  110. package/build/__tests__/EntityMutator-test.js.map +1 -1
  111. package/build/__tests__/EntityPrivacyPolicy-test.js +77 -59
  112. package/build/__tests__/EntityPrivacyPolicy-test.js.map +1 -1
  113. package/build/__tests__/EntityQueryContext-test.js +9 -0
  114. package/build/__tests__/EntityQueryContext-test.js.map +1 -1
  115. package/build/__tests__/EntitySecondaryCacheLoader-test.js +10 -10
  116. package/build/__tests__/EntitySecondaryCacheLoader-test.js.map +1 -1
  117. package/build/__tests__/EntitySelfReferentialEdges-test.js +59 -74
  118. package/build/__tests__/EntitySelfReferentialEdges-test.js.map +1 -1
  119. package/build/__tests__/ReadonlyEntity-test.js +13 -13
  120. package/build/__tests__/ReadonlyEntity-test.js.map +1 -1
  121. package/build/__tests__/ViewerContext-test.js +2 -2
  122. package/build/__tests__/ViewerContext-test.js.map +1 -1
  123. package/build/__tests__/ViewerScopedEntityLoaderFactory-test.js.map +1 -1
  124. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js +26 -28
  125. package/build/__tests__/cases/TwoEntitySameTableDisjointRows-test.js.map +1 -1
  126. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js +25 -30
  127. package/build/__tests__/cases/TwoEntitySameTableOverlappingRows-test.js.map +1 -1
  128. package/build/entityUtils.d.ts +1 -1
  129. package/build/entityUtils.js.map +1 -1
  130. package/build/errors/EntityCacheAdapterError.js +2 -5
  131. package/build/errors/EntityCacheAdapterError.js.map +1 -1
  132. package/build/errors/EntityDatabaseAdapterError.js +14 -35
  133. package/build/errors/EntityDatabaseAdapterError.js.map +1 -1
  134. package/build/errors/EntityError.js +1 -0
  135. package/build/errors/EntityError.js.map +1 -1
  136. package/build/errors/EntityInvalidFieldValueError.js +2 -2
  137. package/build/errors/EntityInvalidFieldValueError.js.map +1 -1
  138. package/build/errors/EntityNotAuthorizedError.js +3 -2
  139. package/build/errors/EntityNotAuthorizedError.js.map +1 -1
  140. package/build/errors/EntityNotFoundError.js +2 -2
  141. package/build/errors/EntityNotFoundError.js.map +1 -1
  142. package/build/index.d.ts +1 -0
  143. package/build/index.js +1 -0
  144. package/build/index.js.map +1 -1
  145. package/build/internal/EntityDataManager.d.ts +1 -1
  146. package/build/internal/EntityDataManager.js +7 -2
  147. package/build/internal/EntityDataManager.js.map +1 -1
  148. package/build/internal/EntityFieldTransformationUtils.d.ts +5 -5
  149. package/build/internal/EntityFieldTransformationUtils.js +5 -8
  150. package/build/internal/EntityFieldTransformationUtils.js.map +1 -1
  151. package/build/internal/EntityTableDataCoordinator.d.ts +1 -1
  152. package/build/internal/EntityTableDataCoordinator.js +5 -0
  153. package/build/internal/EntityTableDataCoordinator.js.map +1 -1
  154. package/build/internal/ReadThroughEntityCache.d.ts +1 -1
  155. package/build/internal/ReadThroughEntityCache.js +2 -0
  156. package/build/internal/ReadThroughEntityCache.js.map +1 -1
  157. package/build/internal/__tests__/EntityDataManager-test.js +11 -11
  158. package/build/internal/__tests__/EntityDataManager-test.js.map +1 -1
  159. package/build/internal/__tests__/EntityFieldTransformationUtils-test.js +6 -2
  160. package/build/internal/__tests__/EntityFieldTransformationUtils-test.js.map +1 -1
  161. package/build/internal/__tests__/ReadThroughEntityCache-test.js +33 -0
  162. package/build/internal/__tests__/ReadThroughEntityCache-test.js.map +1 -1
  163. package/build/metrics/IEntityMetricsAdapter.d.ts +1 -1
  164. package/build/rules/AlwaysAllowPrivacyPolicyRule.d.ts +1 -1
  165. package/build/rules/AlwaysAllowPrivacyPolicyRule.js.map +1 -1
  166. package/build/rules/AlwaysDenyPrivacyPolicyRule.d.ts +1 -1
  167. package/build/rules/AlwaysDenyPrivacyPolicyRule.js.map +1 -1
  168. package/build/rules/AlwaysSkipPrivacyPolicyRule.d.ts +1 -1
  169. package/build/rules/AlwaysSkipPrivacyPolicyRule.js.map +1 -1
  170. package/build/rules/PrivacyPolicyRule.d.ts +1 -1
  171. package/build/rules/PrivacyPolicyRule.js.map +1 -1
  172. package/build/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.js.map +1 -1
  173. package/build/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.js.map +1 -1
  174. package/build/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.js.map +1 -1
  175. package/build/testfixtures/DateIDTestEntity.js +12 -15
  176. package/build/testfixtures/DateIDTestEntity.js.map +1 -1
  177. package/build/testfixtures/SimpleTestEntity.d.ts +8 -8
  178. package/build/testfixtures/SimpleTestEntity.js +12 -15
  179. package/build/testfixtures/SimpleTestEntity.js.map +1 -1
  180. package/build/testfixtures/TestEntity.d.ts +12 -12
  181. package/build/testfixtures/TestEntity.js +12 -15
  182. package/build/testfixtures/TestEntity.js.map +1 -1
  183. package/build/testfixtures/TestEntity2.d.ts +8 -8
  184. package/build/testfixtures/TestEntity2.js +12 -15
  185. package/build/testfixtures/TestEntity2.js.map +1 -1
  186. package/build/testfixtures/TestEntityNumberKey.js +12 -15
  187. package/build/testfixtures/TestEntityNumberKey.js.map +1 -1
  188. package/build/testfixtures/TestEntityWithMutationTriggers.d.ts +36 -0
  189. package/build/testfixtures/TestEntityWithMutationTriggers.js +82 -0
  190. package/build/testfixtures/TestEntityWithMutationTriggers.js.map +1 -0
  191. package/build/testfixtures/TestViewerContext.d.ts +0 -3
  192. package/build/testfixtures/TestViewerContext.js +0 -6
  193. package/build/testfixtures/TestViewerContext.js.map +1 -1
  194. package/build/utils/EntityPrivacyUtils.d.ts +34 -0
  195. package/build/utils/EntityPrivacyUtils.js +160 -0
  196. package/build/utils/EntityPrivacyUtils.js.map +1 -0
  197. package/build/utils/__tests__/EntityPrivacyUtils-test.d.ts +1 -0
  198. package/build/utils/__tests__/EntityPrivacyUtils-test.js +395 -0
  199. package/build/utils/__tests__/EntityPrivacyUtils-test.js.map +1 -0
  200. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.d.ts +1 -0
  201. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js +26 -0
  202. package/build/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.js.map +1 -0
  203. package/build/utils/collections/maps.js.map +1 -1
  204. package/build/utils/mergeEntityMutationTriggerConfigurations.d.ts +4 -0
  205. package/build/utils/mergeEntityMutationTriggerConfigurations.js +28 -0
  206. package/build/utils/mergeEntityMutationTriggerConfigurations.js.map +1 -0
  207. package/build/utils/testing/PrivacyPolicyRuleTestUtils.d.ts +1 -1
  208. package/build/utils/testing/PrivacyPolicyRuleTestUtils.js.map +1 -1
  209. package/build/utils/testing/StubCacheAdapter.d.ts +3 -3
  210. package/build/utils/testing/StubCacheAdapter.js +3 -3
  211. package/build/utils/testing/StubCacheAdapter.js.map +1 -1
  212. package/build/utils/testing/StubDatabaseAdapter.d.ts +2 -2
  213. package/build/utils/testing/StubDatabaseAdapter.js +4 -2
  214. package/build/utils/testing/StubDatabaseAdapter.js.map +1 -1
  215. package/build/utils/testing/StubDatabaseAdapterProvider.d.ts +1 -1
  216. package/build/utils/testing/StubDatabaseAdapterProvider.js +1 -3
  217. package/build/utils/testing/StubDatabaseAdapterProvider.js.map +1 -1
  218. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.d.ts +1 -0
  219. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js +42 -0
  220. package/build/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.js.map +1 -0
  221. package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js +53 -0
  222. package/build/utils/testing/__tests__/StubDatabaseAdapter-test.js.map +1 -1
  223. package/build/utils/testing/describeFieldTestCase.js.map +1 -1
  224. package/package.json +4 -3
  225. package/src/AuthorizationResultBasedEntityLoader.ts +297 -0
  226. package/src/ComposedEntityCacheAdapter.ts +6 -6
  227. package/src/ComposedSecondaryEntityCache.ts +8 -8
  228. package/src/EnforcingEntityLoader.ts +20 -19
  229. package/src/Entity.ts +26 -118
  230. package/src/EntityAssociationLoader.ts +56 -41
  231. package/src/EntityCompanion.ts +8 -4
  232. package/src/EntityCompanionProvider.ts +24 -16
  233. package/src/EntityConfiguration.ts +18 -7
  234. package/src/EntityDatabaseAdapter.ts +41 -41
  235. package/src/EntityFieldDefinition.ts +28 -18
  236. package/src/EntityFields.ts +15 -0
  237. package/src/EntityLoader.ts +63 -357
  238. package/src/EntityLoaderFactory.ts +10 -4
  239. package/src/EntityLoaderUtils.ts +149 -0
  240. package/src/EntityMutationInfo.ts +2 -2
  241. package/src/EntityMutationTriggerConfiguration.ts +5 -5
  242. package/src/EntityMutationValidator.ts +2 -2
  243. package/src/EntityMutator.ts +146 -144
  244. package/src/EntityMutatorFactory.ts +8 -8
  245. package/src/EntityPrivacyPolicy.ts +78 -28
  246. package/src/EntityQueryContext.ts +14 -13
  247. package/src/EntityQueryContextProvider.ts +6 -6
  248. package/src/EntitySecondaryCacheLoader.ts +13 -11
  249. package/src/GenericEntityCacheAdapter.ts +10 -10
  250. package/src/GenericSecondaryEntityCache.ts +6 -6
  251. package/src/IEntityCacheAdapter.ts +4 -4
  252. package/src/IEntityCacheAdapterProvider.ts +2 -2
  253. package/src/IEntityDatabaseAdapterProvider.ts +2 -2
  254. package/src/ReadonlyEntity.ts +8 -5
  255. package/src/ViewerContext.ts +10 -10
  256. package/src/ViewerScopedEntityCompanion.ts +4 -4
  257. package/src/ViewerScopedEntityCompanionProvider.ts +4 -5
  258. package/src/ViewerScopedEntityLoaderFactory.ts +10 -4
  259. package/src/ViewerScopedEntityMutatorFactory.ts +5 -5
  260. package/src/__tests__/ComposedCacheAdapter-test.ts +12 -10
  261. package/src/__tests__/ComposedSecondaryEntityCache-test.ts +8 -8
  262. package/src/__tests__/EnforcingEntityLoader-test.ts +236 -159
  263. package/src/__tests__/Entity-test.ts +5 -223
  264. package/src/__tests__/EntityAssociationLoader-test.ts +91 -169
  265. package/src/__tests__/EntityCommonUseCases-test.ts +36 -38
  266. package/src/__tests__/EntityCompanion-test.ts +57 -5
  267. package/src/__tests__/EntityConfiguration-test.ts +118 -0
  268. package/src/__tests__/EntityDatabaseAdapter-test.ts +11 -11
  269. package/src/__tests__/EntityEdges-test.ts +128 -118
  270. package/src/__tests__/EntityFields-test.ts +14 -2
  271. package/src/__tests__/EntityLoader-constructor-test.ts +21 -8
  272. package/src/__tests__/EntityLoader-test.ts +233 -105
  273. package/src/__tests__/EntityMutator-MutationCacheConsistency-test.ts +17 -20
  274. package/src/__tests__/EntityMutator-test.ts +342 -163
  275. package/src/__tests__/EntityPrivacyPolicy-test.ts +166 -53
  276. package/src/__tests__/EntityQueryContext-test.ts +30 -12
  277. package/src/__tests__/EntitySecondaryCacheLoader-test.ts +17 -26
  278. package/src/__tests__/EntitySelfReferentialEdges-test.ts +67 -115
  279. package/src/__tests__/GenericEntityCacheAdapter-test.ts +2 -2
  280. package/src/__tests__/ReadonlyEntity-test.ts +13 -15
  281. package/src/__tests__/ViewerContext-test.ts +3 -4
  282. package/src/__tests__/ViewerScopedEntityCompanion-test.ts +2 -2
  283. package/src/__tests__/ViewerScopedEntityCompanionProvider-test.ts +2 -2
  284. package/src/__tests__/ViewerScopedEntityLoaderFactory-test.ts +2 -1
  285. package/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.ts +34 -45
  286. package/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.ts +22 -30
  287. package/src/__tests__/entityUtils-test.ts +2 -2
  288. package/src/entityUtils.ts +4 -4
  289. package/src/errors/EntityError.ts +4 -1
  290. package/src/errors/EntityInvalidFieldValueError.ts +2 -2
  291. package/src/errors/EntityNotAuthorizedError.ts +3 -3
  292. package/src/errors/EntityNotFoundError.ts +2 -2
  293. package/src/index.ts +1 -0
  294. package/src/internal/EntityDataManager.ts +25 -25
  295. package/src/internal/EntityFieldTransformationUtils.ts +39 -32
  296. package/src/internal/EntityTableDataCoordinator.ts +3 -3
  297. package/src/internal/ReadThroughEntityCache.ts +9 -9
  298. package/src/internal/__tests__/EntityDataManager-test.ts +62 -62
  299. package/src/internal/__tests__/EntityFieldTransformationUtils-test.ts +14 -10
  300. package/src/internal/__tests__/ReadThroughEntityCache-test.ts +74 -18
  301. package/src/metrics/EntityMetricsUtils.ts +4 -4
  302. package/src/metrics/IEntityMetricsAdapter.ts +1 -1
  303. package/src/rules/AlwaysAllowPrivacyPolicyRule.ts +9 -3
  304. package/src/rules/AlwaysDenyPrivacyPolicyRule.ts +9 -3
  305. package/src/rules/AlwaysSkipPrivacyPolicyRule.ts +9 -3
  306. package/src/rules/PrivacyPolicyRule.ts +9 -3
  307. package/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.ts +2 -1
  308. package/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.ts +2 -1
  309. package/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.ts +2 -1
  310. package/src/testfixtures/SimpleTestEntity.ts +8 -8
  311. package/src/testfixtures/TestEntity.ts +13 -16
  312. package/src/testfixtures/TestEntity2.ts +8 -8
  313. package/src/testfixtures/TestEntityWithMutationTriggers.ts +156 -0
  314. package/src/testfixtures/TestViewerContext.ts +1 -12
  315. package/src/utils/EntityPrivacyUtils.ts +325 -0
  316. package/src/utils/__tests__/EntityPrivacyUtils-test.ts +570 -0
  317. package/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.ts +29 -0
  318. package/src/utils/collections/__tests__/maps-test.ts +2 -2
  319. package/src/utils/collections/maps.ts +11 -11
  320. package/src/utils/mergeEntityMutationTriggerConfigurations.ts +44 -0
  321. package/src/utils/testing/PrivacyPolicyRuleTestUtils.ts +25 -22
  322. package/src/utils/testing/StubCacheAdapter.ts +17 -15
  323. package/src/utils/testing/StubDatabaseAdapter.ts +35 -30
  324. package/src/utils/testing/StubDatabaseAdapterProvider.ts +2 -2
  325. package/src/utils/testing/StubQueryContextProvider.ts +2 -2
  326. package/src/utils/testing/__tests__/PrivacyPolicyRuleTestUtils-test.ts +42 -0
  327. package/src/utils/testing/__tests__/StubDatabaseAdapter-test.ts +111 -29
  328. package/src/utils/testing/createUnitTestEntityCompanionProvider.ts +2 -2
  329. package/src/utils/testing/describeFieldTestCase.ts +1 -1
  330. package/build/__tests__/EntityDataConfiguration-test.js +0 -68
  331. package/build/__tests__/EntityDataConfiguration-test.js.map +0 -1
  332. package/src/__tests__/EntityDataConfiguration-test.ts +0 -77
  333. /package/build/__tests__/{EntityDataConfiguration-test.d.ts → EntityConfiguration-test.d.ts} +0 -0
@@ -44,10 +44,10 @@ const blahEntityConfiguration = new EntityConfiguration<BlahT>({
44
44
  describe(getDatabaseFieldForEntityField, () => {
45
45
  it('returns correct mapping', () => {
46
46
  expect(getDatabaseFieldForEntityField(blahEntityConfiguration, 'cacheable')).toEqual(
47
- 'cacheable'
47
+ 'cacheable',
48
48
  );
49
49
  expect(
50
- getDatabaseFieldForEntityField(blahEntityConfiguration, 'uniqueButNotCacheable')
50
+ getDatabaseFieldForEntityField(blahEntityConfiguration, 'uniqueButNotCacheable'),
51
51
  ).toEqual('unique_but_not_cacheable');
52
52
  });
53
53
  });
@@ -59,7 +59,7 @@ describe(transformDatabaseObjectToFields, () => {
59
59
  id: 'blah',
60
60
  unique_but_not_cacheable: 'wat',
61
61
  who: 'why',
62
- })
62
+ }),
63
63
  ).toEqual({
64
64
  id: 'blah',
65
65
  uniqueButNotCacheable: 'wat',
@@ -79,7 +79,7 @@ describe(transformDatabaseObjectToFields, () => {
79
79
  expect(
80
80
  transformDatabaseObjectToFields(blahEntityConfiguration, fieldTransformMap, {
81
81
  transform_read: 'wat',
82
- })
82
+ }),
83
83
  ).toEqual({
84
84
  transformRead: 'wat-read-transformed',
85
85
  });
@@ -93,7 +93,7 @@ describe(transformFieldsToDatabaseObject, () => {
93
93
  id: 'blah',
94
94
  cacheable: 'wat',
95
95
  uniqueButNotCacheable: 'wat',
96
- })
96
+ }),
97
97
  ).toEqual({
98
98
  id: 'blah',
99
99
  cacheable: 'wat',
@@ -114,7 +114,7 @@ describe(transformFieldsToDatabaseObject, () => {
114
114
  expect(
115
115
  transformFieldsToDatabaseObject(blahEntityConfiguration, fieldTransformMap, {
116
116
  transformWrite: 'wat',
117
- })
117
+ }),
118
118
  ).toEqual({
119
119
  transform_write: 'wat-write-transformed',
120
120
  });
@@ -122,7 +122,7 @@ describe(transformFieldsToDatabaseObject, () => {
122
122
  });
123
123
 
124
124
  describe(transformCacheObjectToFields, () => {
125
- it('does field read transformation', () => {
125
+ it('does field read transformation, keeping unknown fields for cache version inconsistencies', () => {
126
126
  const fieldTransformMap = new Map([
127
127
  [
128
128
  StringField.name,
@@ -136,16 +136,18 @@ describe(transformCacheObjectToFields, () => {
136
136
  transformCacheObjectToFields(blahEntityConfiguration, fieldTransformMap, {
137
137
  id: 'hello',
138
138
  transformRead: 'wat',
139
- })
139
+ unknownField: 'who',
140
+ }),
140
141
  ).toEqual({
141
142
  id: 'hello',
142
143
  transformRead: 'wat-read-transformed-cache',
144
+ unknownField: 'who',
143
145
  });
144
146
  });
145
147
  });
146
148
 
147
149
  describe(transformFieldsToCacheObject, () => {
148
- it('does field write transformation', () => {
150
+ it('does field write transformation, keeping unknown fields at runtime for cache version inconsistencies', () => {
149
151
  const fieldTransformMap = new Map([
150
152
  [
151
153
  StringField.name,
@@ -159,10 +161,12 @@ describe(transformFieldsToCacheObject, () => {
159
161
  transformFieldsToCacheObject(blahEntityConfiguration, fieldTransformMap, {
160
162
  id: 'hello',
161
163
  transformWrite: 'wat',
162
- })
164
+ unknownField: 'who',
165
+ } as any),
163
166
  ).toEqual({
164
167
  id: 'hello',
165
168
  transformWrite: 'wat-write-transformed-cache',
169
+ unknownField: 'who',
166
170
  });
167
171
  });
168
172
  });
@@ -23,7 +23,7 @@ const makeEntityConfiguration = (cacheIdField: boolean): EntityConfiguration<Bla
23
23
  const createIdFetcher =
24
24
  (ids: string[]) =>
25
25
  async <N extends keyof BlahFields>(
26
- fetcherFieldValues: readonly NonNullable<BlahFields[N]>[]
26
+ fetcherFieldValues: readonly NonNullable<BlahFields[N]>[],
27
27
  ): Promise<ReadonlyMap<NonNullable<BlahFields[N]>, readonly Readonly<BlahFields>[]>> => {
28
28
  const results = new Map();
29
29
  fetcherFieldValues.forEach((v) => {
@@ -36,6 +36,22 @@ const createIdFetcher =
36
36
  return results;
37
37
  };
38
38
 
39
+ const createFetcherNonUnique =
40
+ (ids: string[]) =>
41
+ async <N extends keyof BlahFields>(
42
+ fetcherFieldValues: readonly NonNullable<BlahFields[N]>[],
43
+ ): Promise<ReadonlyMap<NonNullable<BlahFields[N]>, readonly Readonly<BlahFields>[]>> => {
44
+ const results = new Map();
45
+ fetcherFieldValues.forEach((v) => {
46
+ if (ids.includes(v)) {
47
+ results.set(v, [{ id: v }, { id: v + '2' }]);
48
+ } else {
49
+ results.set(v, []);
50
+ }
51
+ });
52
+ return results;
53
+ };
54
+
39
55
  describe(ReadThroughEntityCache, () => {
40
56
  describe('readManyThroughAsync', () => {
41
57
  it('fetches from DB upon cache miss and caches the result', async () => {
@@ -48,7 +64,7 @@ describe(ReadThroughEntityCache, () => {
48
64
  new Map([
49
65
  ['wat', { status: CacheStatus.MISS }],
50
66
  ['who', { status: CacheStatus.MISS }],
51
- ])
67
+ ]),
52
68
  );
53
69
 
54
70
  const result = await entityCache.readManyThroughAsync('id', ['wat', 'who'], fetcher);
@@ -61,16 +77,16 @@ describe(ReadThroughEntityCache, () => {
61
77
  new Map([
62
78
  ['wat', { id: 'wat' }],
63
79
  ['who', { id: 'who' }],
64
- ])
65
- )
66
- )
80
+ ]),
81
+ ),
82
+ ),
67
83
  ).once();
68
84
  verify(cacheAdapterMock.cacheDBMissesAsync('id', deepEqual([]))).once();
69
85
  expect(result).toEqual(
70
86
  new Map([
71
87
  ['wat', [{ id: 'wat' }]],
72
88
  ['who', [{ id: 'who' }]],
73
- ])
89
+ ]),
74
90
  );
75
91
  });
76
92
 
@@ -84,7 +100,7 @@ describe(ReadThroughEntityCache, () => {
84
100
  new Map([
85
101
  ['wat', { status: CacheStatus.HIT, item: { id: 'wat' } }],
86
102
  ['who', { status: CacheStatus.HIT, item: { id: 'who' } }],
87
- ])
103
+ ]),
88
104
  );
89
105
 
90
106
  const result = await entityCache.readManyThroughAsync('id', ['wat', 'who'], fetcher);
@@ -97,16 +113,16 @@ describe(ReadThroughEntityCache, () => {
97
113
  new Map([
98
114
  ['wat', { id: 'wat' }],
99
115
  ['who', { id: 'who' }],
100
- ])
101
- )
102
- )
116
+ ]),
117
+ ),
118
+ ),
103
119
  ).never();
104
120
  verify(cacheAdapterMock.cacheDBMissesAsync('id', deepEqual([]))).never();
105
121
  expect(result).toEqual(
106
122
  new Map([
107
123
  ['wat', [{ id: 'wat' }]],
108
124
  ['who', [{ id: 'who' }]],
109
- ])
125
+ ]),
110
126
  );
111
127
  });
112
128
 
@@ -119,7 +135,7 @@ describe(ReadThroughEntityCache, () => {
119
135
  const fetcher = createIdFetcher(['wat', 'who']);
120
136
 
121
137
  when(cacheAdapterMock.loadManyAsync('id', deepEqual(['why']))).thenResolve(
122
- new Map([['why', { status: CacheStatus.MISS }]])
138
+ new Map([['why', { status: CacheStatus.MISS }]]),
123
139
  );
124
140
 
125
141
  const result = await entityCache.readManyThroughAsync('id', ['why'], fetcher);
@@ -137,7 +153,7 @@ describe(ReadThroughEntityCache, () => {
137
153
  const fetcher = createIdFetcher([]);
138
154
 
139
155
  when(cacheAdapterMock.loadManyAsync('id', deepEqual(['why']))).thenResolve(
140
- new Map([['why', { status: CacheStatus.NEGATIVE }]])
156
+ new Map([['why', { status: CacheStatus.NEGATIVE }]]),
141
157
  );
142
158
 
143
159
  const result = await entityCache.readManyThroughAsync('id', ['why'], fetcher);
@@ -154,31 +170,31 @@ describe(ReadThroughEntityCache, () => {
154
170
  const fetcher = createIdFetcher(['wat', 'who', 'why']);
155
171
 
156
172
  when(
157
- cacheAdapterMock.loadManyAsync('id', deepEqual(['wat', 'who', 'why', 'how']))
173
+ cacheAdapterMock.loadManyAsync('id', deepEqual(['wat', 'who', 'why', 'how'])),
158
174
  ).thenResolve(
159
175
  new Map([
160
176
  ['wat', { status: CacheStatus.MISS }],
161
177
  ['who', { status: CacheStatus.NEGATIVE }],
162
178
  ['why', { status: CacheStatus.HIT, item: { id: 'why' } }],
163
179
  ['how', { status: CacheStatus.MISS }],
164
- ])
180
+ ]),
165
181
  );
166
182
 
167
183
  const result = await entityCache.readManyThroughAsync(
168
184
  'id',
169
185
  ['wat', 'who', 'why', 'how'],
170
- fetcher
186
+ fetcher,
171
187
  );
172
188
  verify(cacheAdapterMock.loadManyAsync('id', deepEqual(['wat', 'who', 'why', 'how']))).once();
173
189
  verify(
174
- cacheAdapterMock.cacheManyAsync('id', deepEqual(new Map([['wat', { id: 'wat' }]])))
190
+ cacheAdapterMock.cacheManyAsync('id', deepEqual(new Map([['wat', { id: 'wat' }]]))),
175
191
  ).once();
176
192
  verify(cacheAdapterMock.cacheDBMissesAsync('id', deepEqual(['how']))).once();
177
193
  expect(result).toEqual(
178
194
  new Map([
179
195
  ['wat', [{ id: 'wat' }]],
180
196
  ['why', [{ id: 'why' }]],
181
- ])
197
+ ]),
182
198
  );
183
199
  });
184
200
 
@@ -191,6 +207,46 @@ describe(ReadThroughEntityCache, () => {
191
207
  verify(cacheAdapterMock.loadManyAsync('id', anything())).never();
192
208
  expect(result).toEqual(new Map([['wat', [{ id: 'wat' }]]]));
193
209
  });
210
+
211
+ it('does not cache when DB returns multiple objects for what is supposed to be unique and returns empty', async () => {
212
+ const consoleSpy = jest.spyOn(console, 'warn');
213
+
214
+ const cacheAdapterMock = mock<IEntityCacheAdapter<BlahFields>>();
215
+ const cacheAdapter = instance(cacheAdapterMock);
216
+ const entityCache = new ReadThroughEntityCache(makeEntityConfiguration(true), cacheAdapter);
217
+ const fetcher = createFetcherNonUnique(['wat', 'who']);
218
+
219
+ when(cacheAdapterMock.loadManyAsync('id', deepEqual(['wat', 'who']))).thenResolve(
220
+ new Map([
221
+ ['wat', { status: CacheStatus.MISS }],
222
+ ['who', { status: CacheStatus.MISS }],
223
+ ]),
224
+ );
225
+
226
+ const result = await entityCache.readManyThroughAsync('id', ['wat', 'who'], fetcher);
227
+
228
+ verify(cacheAdapterMock.loadManyAsync('id', deepEqual(['wat', 'who']))).once();
229
+ verify(
230
+ cacheAdapterMock.cacheManyAsync(
231
+ 'id',
232
+ deepEqual(
233
+ new Map([
234
+ ['wat', { id: 'wat' }],
235
+ ['who', { id: 'who' }],
236
+ ]),
237
+ ),
238
+ ),
239
+ ).never();
240
+ verify(cacheAdapterMock.cacheDBMissesAsync('id', deepEqual([]))).once();
241
+ expect(result).toEqual(new Map());
242
+
243
+ expect(consoleSpy).toHaveBeenCalledWith(
244
+ 'unique key id in blah returned multiple rows for wat',
245
+ );
246
+ expect(consoleSpy).toHaveBeenCalledWith(
247
+ 'unique key id in blah returned multiple rows for who',
248
+ );
249
+ });
194
250
  });
195
251
 
196
252
  describe('invalidateManyAsync', () => {
@@ -8,7 +8,7 @@ export const timeAndLogLoadEventAsync =
8
8
  (
9
9
  metricsAdapter: IEntityMetricsAdapter,
10
10
  loadType: EntityMetricsLoadType,
11
- entityClassName: string
11
+ entityClassName: string,
12
12
  ) =>
13
13
  async <TFields>(promise: Promise<readonly Readonly<TFields>[]>) => {
14
14
  const startTime = Date.now();
@@ -29,10 +29,10 @@ export const timeAndLogLoadMapEventAsync =
29
29
  (
30
30
  metricsAdapter: IEntityMetricsAdapter,
31
31
  loadType: EntityMetricsLoadType,
32
- entityClassName: string
32
+ entityClassName: string,
33
33
  ) =>
34
34
  async <TFields, N extends keyof TFields>(
35
- promise: Promise<ReadonlyMap<NonNullable<TFields[N]>, readonly Readonly<TFields>[]>>
35
+ promise: Promise<ReadonlyMap<NonNullable<TFields[N]>, readonly Readonly<TFields>[]>>,
36
36
  ) => {
37
37
  const startTime = Date.now();
38
38
  const result = await promise;
@@ -54,7 +54,7 @@ export const timeAndLogMutationEventAsync =
54
54
  (
55
55
  metricsAdapter: IEntityMetricsAdapter,
56
56
  mutationType: EntityMetricsMutationType,
57
- entityClassName: string
57
+ entityClassName: string,
58
58
  ) =>
59
59
  async <T>(promise: Promise<T>) => {
60
60
  const startTime = Date.now();
@@ -140,7 +140,7 @@ export default interface IEntityMetricsAdapter {
140
140
  * Called when a dataloader, cache, or database load is initiated via the standard
141
141
  * load methods (not equality conjunction or raw). Most commonly used for logging
142
142
  * a waterfall to determine dataloader and cache hit rates and ratios.
143
- * @param fieldValueCount - count of field values being loaded for a field
143
+ * @param incrementLoadCountEvent - count of field values being loaded for a field
144
144
  */
145
145
  incrementDataManagerLoadCount(incrementLoadCountEvent: IncrementLoadCountEvent): void;
146
146
  }
@@ -12,13 +12,19 @@ export default class AlwaysAllowPrivacyPolicyRule<
12
12
  TID extends NonNullable<TFields[TSelectedFields]>,
13
13
  TViewerContext extends ViewerContext,
14
14
  TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
15
- TSelectedFields extends keyof TFields = keyof TFields
15
+ TSelectedFields extends keyof TFields = keyof TFields,
16
16
  > extends PrivacyPolicyRule<TFields, TID, TViewerContext, TEntity, TSelectedFields> {
17
17
  async evaluateAsync(
18
18
  _viewerContext: TViewerContext,
19
19
  _queryContext: EntityQueryContext,
20
- _evaluationContext: EntityPrivacyPolicyEvaluationContext,
21
- _entity: TEntity
20
+ _evaluationContext: EntityPrivacyPolicyEvaluationContext<
21
+ TFields,
22
+ TID,
23
+ TViewerContext,
24
+ TEntity,
25
+ TSelectedFields
26
+ >,
27
+ _entity: TEntity,
22
28
  ): Promise<RuleEvaluationResult> {
23
29
  return RuleEvaluationResult.ALLOW;
24
30
  }
@@ -12,13 +12,19 @@ export default class AlwaysDenyPrivacyPolicyRule<
12
12
  TID extends NonNullable<TFields[TSelectedFields]>,
13
13
  TViewerContext extends ViewerContext,
14
14
  TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
15
- TSelectedFields extends keyof TFields = keyof TFields
15
+ TSelectedFields extends keyof TFields = keyof TFields,
16
16
  > extends PrivacyPolicyRule<TFields, TID, TViewerContext, TEntity, TSelectedFields> {
17
17
  async evaluateAsync(
18
18
  _viewerContext: TViewerContext,
19
19
  _queryContext: EntityQueryContext,
20
- _evaluationContext: EntityPrivacyPolicyEvaluationContext,
21
- _entity: TEntity
20
+ _evaluationContext: EntityPrivacyPolicyEvaluationContext<
21
+ TFields,
22
+ TID,
23
+ TViewerContext,
24
+ TEntity,
25
+ TSelectedFields
26
+ >,
27
+ _entity: TEntity,
22
28
  ): Promise<RuleEvaluationResult> {
23
29
  return RuleEvaluationResult.DENY;
24
30
  }
@@ -12,13 +12,19 @@ export default class AlwaysSkipPrivacyPolicyRule<
12
12
  TID extends NonNullable<TFields[TSelectedFields]>,
13
13
  TViewerContext extends ViewerContext,
14
14
  TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
15
- TSelectedFields extends keyof TFields = keyof TFields
15
+ TSelectedFields extends keyof TFields = keyof TFields,
16
16
  > extends PrivacyPolicyRule<TFields, TID, TViewerContext, TEntity, TSelectedFields> {
17
17
  async evaluateAsync(
18
18
  _viewerContext: TViewerContext,
19
19
  _queryContext: EntityQueryContext,
20
- _evaluationContext: EntityPrivacyPolicyEvaluationContext,
21
- _entity: TEntity
20
+ _evaluationContext: EntityPrivacyPolicyEvaluationContext<
21
+ TFields,
22
+ TID,
23
+ TViewerContext,
24
+ TEntity,
25
+ TSelectedFields
26
+ >,
27
+ _entity: TEntity,
22
28
  ): Promise<RuleEvaluationResult> {
23
29
  return RuleEvaluationResult.SKIP;
24
30
  }
@@ -41,12 +41,18 @@ export default abstract class PrivacyPolicyRule<
41
41
  TID extends NonNullable<TFields[TSelectedFields]>,
42
42
  TViewerContext extends ViewerContext,
43
43
  TEntity extends ReadonlyEntity<TFields, TID, TViewerContext, TSelectedFields>,
44
- TSelectedFields extends keyof TFields = keyof TFields
44
+ TSelectedFields extends keyof TFields = keyof TFields,
45
45
  > {
46
46
  abstract evaluateAsync(
47
47
  viewerContext: TViewerContext,
48
48
  queryContext: EntityQueryContext,
49
- evaluationContext: EntityPrivacyPolicyEvaluationContext,
50
- entity: TEntity
49
+ evaluationContext: EntityPrivacyPolicyEvaluationContext<
50
+ TFields,
51
+ TID,
52
+ TViewerContext,
53
+ TEntity,
54
+ TSelectedFields
55
+ >,
56
+ entity: TEntity,
51
57
  ): Promise<RuleEvaluationResult>;
52
58
  }
@@ -11,7 +11,8 @@ describePrivacyPolicyRule(new AlwaysAllowPrivacyPolicyRule(), {
11
11
  {
12
12
  viewerContext: instance(mock(ViewerContext)),
13
13
  queryContext: instance(mock(EntityQueryContext)),
14
- evaluationContext: instance(mock<EntityPrivacyPolicyEvaluationContext>()),
14
+ evaluationContext:
15
+ instance(mock<EntityPrivacyPolicyEvaluationContext<any, any, any, any, any>>()),
15
16
  entity: anything(),
16
17
  },
17
18
  ],
@@ -11,7 +11,8 @@ describePrivacyPolicyRule(new AlwaysDenyPrivacyPolicyRule(), {
11
11
  {
12
12
  viewerContext: instance(mock(ViewerContext)),
13
13
  queryContext: instance(mock(EntityQueryContext)),
14
- evaluationContext: instance(mock<EntityPrivacyPolicyEvaluationContext>()),
14
+ evaluationContext:
15
+ instance(mock<EntityPrivacyPolicyEvaluationContext<any, any, any, any, any>>()),
15
16
  entity: anything(),
16
17
  },
17
18
  ],
@@ -11,7 +11,8 @@ describePrivacyPolicyRule(new AlwaysSkipPrivacyPolicyRule(), {
11
11
  {
12
12
  viewerContext: instance(mock(ViewerContext)),
13
13
  queryContext: instance(mock(EntityQueryContext)),
14
- evaluationContext: instance(mock<EntityPrivacyPolicyEvaluationContext>()),
14
+ evaluationContext:
15
+ instance(mock<EntityPrivacyPolicyEvaluationContext<any, any, any, any, any>>()),
15
16
  entity: anything(),
16
17
  },
17
18
  ],
@@ -1,9 +1,9 @@
1
- import TestViewerContext from './TestViewerContext';
2
1
  import Entity from '../Entity';
3
2
  import { EntityCompanionDefinition } from '../EntityCompanionProvider';
4
3
  import EntityConfiguration from '../EntityConfiguration';
5
4
  import { UUIDField } from '../EntityFields';
6
5
  import EntityPrivacyPolicy from '../EntityPrivacyPolicy';
6
+ import ViewerContext from '../ViewerContext';
7
7
  import AlwaysAllowPrivacyPolicyRule from '../rules/AlwaysAllowPrivacyPolicyRule';
8
8
 
9
9
  export type SimpleTestFields = {
@@ -27,7 +27,7 @@ export const simpleTestEntityConfiguration = new EntityConfiguration<SimpleTestF
27
27
  export class SimpleTestEntityPrivacyPolicy extends EntityPrivacyPolicy<
28
28
  SimpleTestFields,
29
29
  string,
30
- TestViewerContext,
30
+ ViewerContext,
31
31
  SimpleTestEntity,
32
32
  SimpleTestFieldSelection
33
33
  > {
@@ -35,7 +35,7 @@ export class SimpleTestEntityPrivacyPolicy extends EntityPrivacyPolicy<
35
35
  new AlwaysAllowPrivacyPolicyRule<
36
36
  SimpleTestFields,
37
37
  string,
38
- TestViewerContext,
38
+ ViewerContext,
39
39
  SimpleTestEntity,
40
40
  SimpleTestFieldSelection
41
41
  >(),
@@ -44,7 +44,7 @@ export class SimpleTestEntityPrivacyPolicy extends EntityPrivacyPolicy<
44
44
  new AlwaysAllowPrivacyPolicyRule<
45
45
  SimpleTestFields,
46
46
  string,
47
- TestViewerContext,
47
+ ViewerContext,
48
48
  SimpleTestEntity,
49
49
  SimpleTestFieldSelection
50
50
  >(),
@@ -53,7 +53,7 @@ export class SimpleTestEntityPrivacyPolicy extends EntityPrivacyPolicy<
53
53
  new AlwaysAllowPrivacyPolicyRule<
54
54
  SimpleTestFields,
55
55
  string,
56
- TestViewerContext,
56
+ ViewerContext,
57
57
  SimpleTestEntity,
58
58
  SimpleTestFieldSelection
59
59
  >(),
@@ -62,7 +62,7 @@ export class SimpleTestEntityPrivacyPolicy extends EntityPrivacyPolicy<
62
62
  new AlwaysAllowPrivacyPolicyRule<
63
63
  SimpleTestFields,
64
64
  string,
65
- TestViewerContext,
65
+ ViewerContext,
66
66
  SimpleTestEntity,
67
67
  SimpleTestFieldSelection
68
68
  >(),
@@ -72,13 +72,13 @@ export class SimpleTestEntityPrivacyPolicy extends EntityPrivacyPolicy<
72
72
  export default class SimpleTestEntity extends Entity<
73
73
  SimpleTestFields,
74
74
  string,
75
- TestViewerContext,
75
+ ViewerContext,
76
76
  SimpleTestFieldSelection
77
77
  > {
78
78
  static defineCompanionDefinition(): EntityCompanionDefinition<
79
79
  SimpleTestFields,
80
80
  string,
81
- TestViewerContext,
81
+ ViewerContext,
82
82
  SimpleTestEntity,
83
83
  SimpleTestEntityPrivacyPolicy,
84
84
  SimpleTestFieldSelection
@@ -1,11 +1,11 @@
1
1
  import { result, Result } from '@expo/results';
2
2
 
3
- import TestViewerContext from './TestViewerContext';
4
3
  import Entity from '../Entity';
5
4
  import { EntityCompanionDefinition } from '../EntityCompanionProvider';
6
5
  import EntityConfiguration from '../EntityConfiguration';
7
6
  import { UUIDField, StringField, DateField, IntField } from '../EntityFields';
8
7
  import EntityPrivacyPolicy from '../EntityPrivacyPolicy';
8
+ import ViewerContext from '../ViewerContext';
9
9
  import AlwaysAllowPrivacyPolicyRule from '../rules/AlwaysAllowPrivacyPolicyRule';
10
10
 
11
11
  export type TestFields = {
@@ -48,28 +48,28 @@ export const testEntityConfiguration = new EntityConfiguration<TestFields>({
48
48
  export class TestEntityPrivacyPolicy extends EntityPrivacyPolicy<
49
49
  TestFields,
50
50
  string,
51
- TestViewerContext,
51
+ ViewerContext,
52
52
  TestEntity
53
53
  > {
54
54
  protected override readonly readRules = [
55
- new AlwaysAllowPrivacyPolicyRule<TestFields, string, TestViewerContext, TestEntity>(),
55
+ new AlwaysAllowPrivacyPolicyRule<TestFields, string, ViewerContext, TestEntity>(),
56
56
  ];
57
57
  protected override readonly createRules = [
58
- new AlwaysAllowPrivacyPolicyRule<TestFields, string, TestViewerContext, TestEntity>(),
58
+ new AlwaysAllowPrivacyPolicyRule<TestFields, string, ViewerContext, TestEntity>(),
59
59
  ];
60
60
  protected override readonly updateRules = [
61
- new AlwaysAllowPrivacyPolicyRule<TestFields, string, TestViewerContext, TestEntity>(),
61
+ new AlwaysAllowPrivacyPolicyRule<TestFields, string, ViewerContext, TestEntity>(),
62
62
  ];
63
63
  protected override readonly deleteRules = [
64
- new AlwaysAllowPrivacyPolicyRule<TestFields, string, TestViewerContext, TestEntity>(),
64
+ new AlwaysAllowPrivacyPolicyRule<TestFields, string, ViewerContext, TestEntity>(),
65
65
  ];
66
66
  }
67
67
 
68
- export default class TestEntity extends Entity<TestFields, string, TestViewerContext> {
68
+ export default class TestEntity extends Entity<TestFields, string, ViewerContext> {
69
69
  static defineCompanionDefinition(): EntityCompanionDefinition<
70
70
  TestFields,
71
71
  string,
72
- TestViewerContext,
72
+ ViewerContext,
73
73
  TestEntity,
74
74
  TestEntityPrivacyPolicy
75
75
  > {
@@ -84,10 +84,7 @@ export default class TestEntity extends Entity<TestFields, string, TestViewerCon
84
84
  return 'Hello World!';
85
85
  }
86
86
 
87
- static async hello(
88
- viewerContext: TestViewerContext,
89
- testValue: string
90
- ): Promise<Result<TestEntity>> {
87
+ static async hello(viewerContext: ViewerContext, testValue: string): Promise<Result<TestEntity>> {
91
88
  const fields = {
92
89
  customIdField: testValue,
93
90
  testIndexedField: 'hello',
@@ -102,19 +99,19 @@ export default class TestEntity extends Entity<TestFields, string, TestViewerCon
102
99
  id: testValue,
103
100
  databaseFields: fields,
104
101
  selectedFields: fields,
105
- })
102
+ }),
106
103
  );
107
104
  }
108
105
 
109
- static async returnError(_viewerContext: TestViewerContext): Promise<Result<TestEntity>> {
106
+ static async returnError(_viewerContext: ViewerContext): Promise<Result<TestEntity>> {
110
107
  return result(new Error('return entity'));
111
108
  }
112
109
 
113
- static async throwError(_viewerContext: TestViewerContext): Promise<Result<TestEntity>> {
110
+ static async throwError(_viewerContext: ViewerContext): Promise<Result<TestEntity>> {
114
111
  throw new Error('threw entity');
115
112
  }
116
113
 
117
- static async nonResult(_viewerContext: TestViewerContext, testValue: string): Promise<string> {
114
+ static async nonResult(_viewerContext: ViewerContext, testValue: string): Promise<string> {
118
115
  return testValue;
119
116
  }
120
117
  }
@@ -1,9 +1,9 @@
1
- import TestViewerContext from './TestViewerContext';
2
1
  import Entity from '../Entity';
3
2
  import { EntityCompanionDefinition } from '../EntityCompanionProvider';
4
3
  import EntityConfiguration from '../EntityConfiguration';
5
4
  import { UUIDField } from '../EntityFields';
6
5
  import EntityPrivacyPolicy from '../EntityPrivacyPolicy';
6
+ import ViewerContext from '../ViewerContext';
7
7
  import AlwaysAllowPrivacyPolicyRule from '../rules/AlwaysAllowPrivacyPolicyRule';
8
8
 
9
9
  export type Test2Fields = {
@@ -29,28 +29,28 @@ export const testEntity2Configuration = new EntityConfiguration<Test2Fields>({
29
29
  export class TestEntity2PrivacyPolicy extends EntityPrivacyPolicy<
30
30
  Test2Fields,
31
31
  string,
32
- TestViewerContext,
32
+ ViewerContext,
33
33
  TestEntity2
34
34
  > {
35
35
  protected override readonly readRules = [
36
- new AlwaysAllowPrivacyPolicyRule<Test2Fields, string, TestViewerContext, TestEntity2>(),
36
+ new AlwaysAllowPrivacyPolicyRule<Test2Fields, string, ViewerContext, TestEntity2>(),
37
37
  ];
38
38
  protected override readonly createRules = [
39
- new AlwaysAllowPrivacyPolicyRule<Test2Fields, string, TestViewerContext, TestEntity2>(),
39
+ new AlwaysAllowPrivacyPolicyRule<Test2Fields, string, ViewerContext, TestEntity2>(),
40
40
  ];
41
41
  protected override readonly updateRules = [
42
- new AlwaysAllowPrivacyPolicyRule<Test2Fields, string, TestViewerContext, TestEntity2>(),
42
+ new AlwaysAllowPrivacyPolicyRule<Test2Fields, string, ViewerContext, TestEntity2>(),
43
43
  ];
44
44
  protected override readonly deleteRules = [
45
- new AlwaysAllowPrivacyPolicyRule<Test2Fields, string, TestViewerContext, TestEntity2>(),
45
+ new AlwaysAllowPrivacyPolicyRule<Test2Fields, string, ViewerContext, TestEntity2>(),
46
46
  ];
47
47
  }
48
48
 
49
- export default class TestEntity2 extends Entity<Test2Fields, string, TestViewerContext> {
49
+ export default class TestEntity2 extends Entity<Test2Fields, string, ViewerContext> {
50
50
  static defineCompanionDefinition(): EntityCompanionDefinition<
51
51
  Test2Fields,
52
52
  string,
53
- TestViewerContext,
53
+ ViewerContext,
54
54
  TestEntity2,
55
55
  TestEntity2PrivacyPolicy
56
56
  > {