@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
@@ -1,520 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __importDefault = (this && this.__importDefault) || function (mod) {
36
- return (mod && mod.__esModule) ? mod : { "default": mod };
37
- };
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- const nullthrows_1 = __importDefault(require("nullthrows"));
40
- const Entity_1 = __importDefault(require("../../Entity"));
41
- const EntityConfiguration_1 = __importDefault(require("../../EntityConfiguration"));
42
- const EntityFieldDefinition_1 = require("../../EntityFieldDefinition");
43
- const EntityFields_1 = require("../../EntityFields");
44
- const EntityPrivacyPolicy_1 = __importStar(require("../../EntityPrivacyPolicy"));
45
- const ViewerContext_1 = __importDefault(require("../../ViewerContext"));
46
- const AlwaysAllowPrivacyPolicyRule_1 = __importDefault(require("../../rules/AlwaysAllowPrivacyPolicyRule"));
47
- const AlwaysDenyPrivacyPolicyRule_1 = __importDefault(require("../../rules/AlwaysDenyPrivacyPolicyRule"));
48
- const PrivacyPolicyRule_1 = require("../../rules/PrivacyPolicyRule");
49
- const EntityPrivacyUtils_1 = require("../EntityPrivacyUtils");
50
- const createUnitTestEntityCompanionProvider_1 = require("../testing/createUnitTestEntityCompanionProvider");
51
- function assertEntityPrivacyEvaluationResultFailure(evaluationResult) {
52
- if (evaluationResult.allowed) {
53
- throw new Error('Evaluation result not failure');
54
- }
55
- }
56
- function expectAuthorizationError(evaluationResult, { entityId, action }) {
57
- expect(evaluationResult.allowed).toBe(false);
58
- assertEntityPrivacyEvaluationResultFailure(evaluationResult);
59
- const authorizationErrors = evaluationResult.authorizationErrors;
60
- expect(authorizationErrors).toHaveLength(1);
61
- const authorizationError = (0, nullthrows_1.default)(authorizationErrors[0]);
62
- expect(authorizationError.message).toContain(entityId);
63
- expect(authorizationError.message).toContain(EntityPrivacyPolicy_1.EntityAuthorizationAction[action]);
64
- }
65
- describe(EntityPrivacyUtils_1.canViewerUpdateAsync, () => {
66
- it('appropriately executes update privacy policy', async () => {
67
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
68
- const viewerContext = new ViewerContext_1.default(companionProvider);
69
- const testEntity = await SimpleTestDenyDeleteEntity.creator(viewerContext)
70
- .enforcing()
71
- .createAsync();
72
- const canViewerUpdate = await (0, EntityPrivacyUtils_1.canViewerUpdateAsync)(SimpleTestDenyDeleteEntity, testEntity);
73
- expect(canViewerUpdate).toBe(true);
74
- const canViewerUpdateResult = await (0, EntityPrivacyUtils_1.getCanViewerUpdateResultAsync)(SimpleTestDenyDeleteEntity, testEntity);
75
- expect(canViewerUpdateResult.allowed).toBe(true);
76
- });
77
- it('denies when policy denies', async () => {
78
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
79
- const viewerContext = new ViewerContext_1.default(companionProvider);
80
- const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext)
81
- .enforcing()
82
- .createAsync();
83
- const canViewerUpdate = await (0, EntityPrivacyUtils_1.canViewerUpdateAsync)(SimpleTestDenyUpdateEntity, testEntity);
84
- expect(canViewerUpdate).toBe(false);
85
- const canViewerUpdateResult = await (0, EntityPrivacyUtils_1.getCanViewerUpdateResultAsync)(SimpleTestDenyUpdateEntity, testEntity);
86
- expectAuthorizationError(canViewerUpdateResult, {
87
- entityId: testEntity.getID(),
88
- action: EntityPrivacyPolicy_1.EntityAuthorizationAction.UPDATE,
89
- });
90
- });
91
- it('rethrows non-authorization errors', async () => {
92
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
93
- const viewerContext = new ViewerContext_1.default(companionProvider);
94
- const testEntity = await SimpleTestThrowOtherErrorEntity.creator(viewerContext)
95
- .enforcing()
96
- .createAsync();
97
- await expect((0, EntityPrivacyUtils_1.canViewerUpdateAsync)(SimpleTestThrowOtherErrorEntity, testEntity)).rejects.toThrow('update error');
98
- await expect((0, EntityPrivacyUtils_1.getCanViewerUpdateResultAsync)(SimpleTestThrowOtherErrorEntity, testEntity)).rejects.toThrow('update error');
99
- });
100
- });
101
- describe(EntityPrivacyUtils_1.canViewerDeleteAsync, () => {
102
- it('appropriately executes update privacy policy', async () => {
103
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
104
- const viewerContext = new ViewerContext_1.default(companionProvider);
105
- const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext)
106
- .enforcing()
107
- .createAsync();
108
- const canViewerDelete = await (0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyUpdateEntity, testEntity);
109
- expect(canViewerDelete).toBe(true);
110
- const canViewerDeleteResult = await (0, EntityPrivacyUtils_1.getCanViewerDeleteResultAsync)(SimpleTestDenyUpdateEntity, testEntity);
111
- expect(canViewerDeleteResult.allowed).toBe(true);
112
- });
113
- it('denies when policy denies', async () => {
114
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
115
- const viewerContext = new ViewerContext_1.default(companionProvider);
116
- const testEntity = await SimpleTestDenyDeleteEntity.creator(viewerContext)
117
- .enforcing()
118
- .createAsync();
119
- const canViewerDelete = await (0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyDeleteEntity, testEntity);
120
- expect(canViewerDelete).toBe(false);
121
- const canViewerDeleteResult = await (0, EntityPrivacyUtils_1.getCanViewerDeleteResultAsync)(SimpleTestDenyDeleteEntity, testEntity);
122
- expectAuthorizationError(canViewerDeleteResult, {
123
- entityId: testEntity.getID(),
124
- action: EntityPrivacyPolicy_1.EntityAuthorizationAction.DELETE,
125
- });
126
- });
127
- it('denies when recursive policy denies for CASCADE_DELETE', async () => {
128
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
129
- const viewerContext = new ViewerContext_1.default(companionProvider);
130
- const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext)
131
- .enforcing()
132
- .createAsync();
133
- // add another entity referencing testEntity that would cascade deletion to itself when testEntity is deleted
134
- const leafEntity = await LeafDenyDeleteEntity.creator(viewerContext)
135
- .enforcing()
136
- .setField('simple_test_deny_update_cascade_delete_id', testEntity.getID())
137
- .createAsync();
138
- const canViewerDelete = await (0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyUpdateEntity, testEntity);
139
- expect(canViewerDelete).toBe(false);
140
- const canViewerDeleteResult = await (0, EntityPrivacyUtils_1.getCanViewerDeleteResultAsync)(SimpleTestDenyUpdateEntity, testEntity);
141
- expectAuthorizationError(canViewerDeleteResult, {
142
- entityId: leafEntity.getID(),
143
- action: EntityPrivacyPolicy_1.EntityAuthorizationAction.DELETE,
144
- });
145
- });
146
- it('denies when recursive policy denies for SET_NULL', async () => {
147
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
148
- const viewerContext = new ViewerContext_1.default(companionProvider);
149
- const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext)
150
- .enforcing()
151
- .createAsync();
152
- // add another entity referencing testEntity that would set null to its column when testEntity is deleted
153
- const leafEntity = await LeafDenyUpdateEntity.creator(viewerContext)
154
- .enforcing()
155
- .setField('simple_test_deny_update_set_null_id', testEntity.getID())
156
- .createAsync();
157
- const canViewerDelete = await (0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyUpdateEntity, testEntity);
158
- expect(canViewerDelete).toBe(false);
159
- const canViewerDeleteResult = await (0, EntityPrivacyUtils_1.getCanViewerDeleteResultAsync)(SimpleTestDenyUpdateEntity, testEntity);
160
- expectAuthorizationError(canViewerDeleteResult, {
161
- entityId: leafEntity.getID(),
162
- action: EntityPrivacyPolicy_1.EntityAuthorizationAction.UPDATE,
163
- });
164
- });
165
- it('allows when recursive policy allows for CASCADE_DELETE and SET_NULL', async () => {
166
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
167
- const viewerContext = new ViewerContext_1.default(companionProvider);
168
- const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext)
169
- .enforcing()
170
- .createAsync();
171
- // add another entity referencing testEntity that would cascade deletion to itself when testEntity is deleted
172
- await LeafDenyUpdateEntity.creator(viewerContext)
173
- .enforcing()
174
- .setField('simple_test_deny_update_cascade_delete_id', testEntity.getID())
175
- .createAsync();
176
- // add another entity referencing testEntity that would set null to its column when testEntity is deleted
177
- await LeafDenyDeleteEntity.creator(viewerContext)
178
- .enforcing()
179
- .setField('simple_test_deny_update_set_null_id', testEntity.getID())
180
- .createAsync();
181
- const canViewerDelete = await (0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyUpdateEntity, testEntity);
182
- expect(canViewerDelete).toBe(true);
183
- const canViewerDeleteResult = await (0, EntityPrivacyUtils_1.getCanViewerDeleteResultAsync)(SimpleTestDenyUpdateEntity, testEntity);
184
- expect(canViewerDeleteResult.allowed).toBe(true);
185
- });
186
- it('rethrows non-authorization errors', async () => {
187
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
188
- const viewerContext = new ViewerContext_1.default(companionProvider);
189
- const testEntity = await SimpleTestThrowOtherErrorEntity.creator(viewerContext)
190
- .enforcing()
191
- .createAsync();
192
- await expect((0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestThrowOtherErrorEntity, testEntity)).rejects.toThrowError('delete error');
193
- await expect((0, EntityPrivacyUtils_1.getCanViewerDeleteResultAsync)(SimpleTestThrowOtherErrorEntity, testEntity)).rejects.toThrowError('delete error');
194
- });
195
- it('returns false when edge cannot be read', async () => {
196
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
197
- const viewerContext = new ViewerContext_1.default(companionProvider);
198
- const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext)
199
- .enforcing()
200
- .createAsync();
201
- const leafEntity = await LeafDenyReadEntity.creator(viewerContext)
202
- .enforcing()
203
- .setField('simple_test_id', testEntity.getID())
204
- .createAsync();
205
- const canViewerDelete = await (0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyUpdateEntity, testEntity);
206
- expect(canViewerDelete).toBe(false);
207
- const canViewerDeleteResult = await (0, EntityPrivacyUtils_1.getCanViewerDeleteResultAsync)(SimpleTestDenyUpdateEntity, testEntity);
208
- expectAuthorizationError(canViewerDeleteResult, {
209
- entityId: leafEntity.getID(),
210
- action: EntityPrivacyPolicy_1.EntityAuthorizationAction.READ,
211
- });
212
- });
213
- it('rethrows non-authorization edge read errors', async () => {
214
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
215
- const viewerContext = new ViewerContext_1.default(companionProvider);
216
- const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext)
217
- .enforcing()
218
- .createAsync();
219
- await SimpleTestThrowOtherErrorEntity.creator(viewerContext)
220
- .enforcing()
221
- .setField('simple_test_id', testEntity.getID())
222
- .createAsync();
223
- await expect((0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyUpdateEntity, testEntity)).rejects.toThrowError('read in cascading delete error');
224
- await expect((0, EntityPrivacyUtils_1.getCanViewerDeleteResultAsync)(SimpleTestDenyUpdateEntity, testEntity)).rejects.toThrowError('read in cascading delete error');
225
- });
226
- it('supports running within a transaction', async () => {
227
- const companionProvider = (0, createUnitTestEntityCompanionProvider_1.createUnitTestEntityCompanionProvider)();
228
- const viewerContext = new ViewerContext_1.default(companionProvider);
229
- const canViewerDelete = await viewerContext.runInTransactionForDatabaseAdaptorFlavorAsync('postgres', async (queryContext) => {
230
- const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext, queryContext)
231
- .enforcing()
232
- .createAsync();
233
- await LeafDenyReadEntity.creator(viewerContext, queryContext)
234
- .enforcing()
235
- .setField('simple_test_id', testEntity.getID())
236
- .createAsync();
237
- // this would fail if transactions weren't supported or correctly passed through
238
- return await (0, EntityPrivacyUtils_1.canViewerDeleteAsync)(SimpleTestDenyUpdateEntity, testEntity, queryContext);
239
- });
240
- expect(canViewerDelete).toBe(true);
241
- const canViewerDeleteResult = await viewerContext.runInTransactionForDatabaseAdaptorFlavorAsync('postgres', async (queryContext) => {
242
- const testEntity = await SimpleTestDenyUpdateEntity.creator(viewerContext, queryContext)
243
- .enforcing()
244
- .createAsync();
245
- await LeafDenyReadEntity.creator(viewerContext, queryContext)
246
- .enforcing()
247
- .setField('simple_test_id', testEntity.getID())
248
- .createAsync();
249
- // this would fail if transactions weren't supported or correctly passed through
250
- return await (0, EntityPrivacyUtils_1.getCanViewerDeleteResultAsync)(SimpleTestDenyUpdateEntity, testEntity, queryContext);
251
- });
252
- expect(canViewerDeleteResult.allowed).toBe(true);
253
- });
254
- });
255
- class DenyUpdateEntityPrivacyPolicy extends EntityPrivacyPolicy_1.default {
256
- readRules = [
257
- new AlwaysAllowPrivacyPolicyRule_1.default(),
258
- ];
259
- createRules = [
260
- new AlwaysAllowPrivacyPolicyRule_1.default(),
261
- ];
262
- updateRules = [
263
- new AlwaysDenyPrivacyPolicyRule_1.default(),
264
- ];
265
- deleteRules = [
266
- new AlwaysAllowPrivacyPolicyRule_1.default(),
267
- ];
268
- }
269
- class DenyDeleteEntityPrivacyPolicy extends EntityPrivacyPolicy_1.default {
270
- readRules = [
271
- new AlwaysAllowPrivacyPolicyRule_1.default(),
272
- ];
273
- createRules = [
274
- new AlwaysAllowPrivacyPolicyRule_1.default(),
275
- ];
276
- updateRules = [
277
- new AlwaysAllowPrivacyPolicyRule_1.default(),
278
- ];
279
- deleteRules = [
280
- new AlwaysDenyPrivacyPolicyRule_1.default(),
281
- ];
282
- }
283
- class ThrowOtherErrorEntityPrivacyPolicy extends EntityPrivacyPolicy_1.default {
284
- readRules = [
285
- {
286
- async evaluateAsync(_viewerContext, _queryContext, evaluationContext, _entity) {
287
- if (evaluationContext.cascadingDeleteCause) {
288
- throw new Error('read in cascading delete error');
289
- }
290
- return PrivacyPolicyRule_1.RuleEvaluationResult.SKIP;
291
- },
292
- },
293
- new AlwaysAllowPrivacyPolicyRule_1.default(),
294
- ];
295
- createRules = [
296
- new AlwaysAllowPrivacyPolicyRule_1.default(),
297
- ];
298
- updateRules = [
299
- {
300
- async evaluateAsync() {
301
- throw new Error('update error');
302
- },
303
- },
304
- ];
305
- deleteRules = [
306
- {
307
- async evaluateAsync() {
308
- throw new Error('delete error');
309
- },
310
- },
311
- ];
312
- }
313
- class DenyReadEntityPrivacyPolicy extends EntityPrivacyPolicy_1.default {
314
- readRules = [
315
- {
316
- async evaluateAsync(_viewerContext, queryContext, evaluationContext, _entity) {
317
- if (queryContext.isInTransaction()) {
318
- return PrivacyPolicyRule_1.RuleEvaluationResult.ALLOW;
319
- }
320
- return evaluationContext.cascadingDeleteCause
321
- ? PrivacyPolicyRule_1.RuleEvaluationResult.SKIP
322
- : PrivacyPolicyRule_1.RuleEvaluationResult.ALLOW;
323
- },
324
- },
325
- ];
326
- createRules = [
327
- new AlwaysAllowPrivacyPolicyRule_1.default(),
328
- ];
329
- updateRules = [
330
- new AlwaysAllowPrivacyPolicyRule_1.default(),
331
- ];
332
- deleteRules = [
333
- new AlwaysAllowPrivacyPolicyRule_1.default(),
334
- ];
335
- }
336
- class LeafDenyUpdateEntity extends Entity_1.default {
337
- static defineCompanionDefinition() {
338
- return {
339
- entityClass: LeafDenyUpdateEntity,
340
- entityConfiguration: new EntityConfiguration_1.default({
341
- idField: 'id',
342
- tableName: 'leaf_1',
343
- schema: {
344
- id: new EntityFields_1.UUIDField({
345
- columnName: 'custom_id',
346
- }),
347
- // to ensure edge traversal doesn't process other edges
348
- unused_other_association: new EntityFields_1.UUIDField({
349
- columnName: 'unused_other_association',
350
- association: {
351
- associatedEntityClass: LeafDenyDeleteEntity,
352
- edgeDeletionBehavior: EntityFieldDefinition_1.EntityEdgeDeletionBehavior.SET_NULL,
353
- },
354
- }),
355
- // deletion behavior should fail since this entity can't be updated and a SET NULL does an update
356
- simple_test_deny_update_set_null_id: new EntityFields_1.UUIDField({
357
- columnName: 'simple_test_deny_update_set_null_id',
358
- association: {
359
- associatedEntityClass: SimpleTestDenyUpdateEntity,
360
- edgeDeletionBehavior: EntityFieldDefinition_1.EntityEdgeDeletionBehavior.SET_NULL,
361
- },
362
- }),
363
- // deletion behavior should succeed since this entity can be deleted
364
- simple_test_deny_update_cascade_delete_id: new EntityFields_1.UUIDField({
365
- columnName: 'simple_test_deny_update_cascade_delete_id',
366
- association: {
367
- associatedEntityClass: SimpleTestDenyUpdateEntity,
368
- edgeDeletionBehavior: EntityFieldDefinition_1.EntityEdgeDeletionBehavior.CASCADE_DELETE,
369
- },
370
- }),
371
- },
372
- databaseAdapterFlavor: 'postgres',
373
- cacheAdapterFlavor: 'redis',
374
- }),
375
- privacyPolicyClass: DenyUpdateEntityPrivacyPolicy,
376
- };
377
- }
378
- }
379
- class LeafDenyDeleteEntity extends Entity_1.default {
380
- static defineCompanionDefinition() {
381
- return {
382
- entityClass: LeafDenyDeleteEntity,
383
- entityConfiguration: new EntityConfiguration_1.default({
384
- idField: 'id',
385
- tableName: 'leaf_2',
386
- schema: {
387
- id: new EntityFields_1.UUIDField({
388
- columnName: 'custom_id',
389
- }),
390
- // deletion behavior should fail since this entity can't be deleted
391
- simple_test_deny_update_cascade_delete_id: new EntityFields_1.UUIDField({
392
- columnName: 'simple_test_deny_update_cascade_delete_id',
393
- association: {
394
- associatedEntityClass: SimpleTestDenyUpdateEntity,
395
- edgeDeletionBehavior: EntityFieldDefinition_1.EntityEdgeDeletionBehavior.CASCADE_DELETE,
396
- },
397
- }),
398
- // deletion behavior should succeed since this entity can be updated and a SET NULL does an update
399
- simple_test_deny_update_set_null_id: new EntityFields_1.UUIDField({
400
- columnName: 'simple_test_deny_update_set_null_id',
401
- association: {
402
- associatedEntityClass: SimpleTestDenyUpdateEntity,
403
- edgeDeletionBehavior: EntityFieldDefinition_1.EntityEdgeDeletionBehavior.SET_NULL,
404
- },
405
- }),
406
- },
407
- databaseAdapterFlavor: 'postgres',
408
- cacheAdapterFlavor: 'redis',
409
- }),
410
- privacyPolicyClass: DenyDeleteEntityPrivacyPolicy,
411
- };
412
- }
413
- }
414
- class LeafDenyReadEntity extends Entity_1.default {
415
- static defineCompanionDefinition() {
416
- return {
417
- entityClass: LeafDenyReadEntity,
418
- entityConfiguration: new EntityConfiguration_1.default({
419
- idField: 'id',
420
- tableName: 'leaf_4',
421
- inboundEdges: [],
422
- schema: {
423
- id: new EntityFields_1.UUIDField({
424
- columnName: 'custom_id',
425
- }),
426
- simple_test_id: new EntityFields_1.UUIDField({
427
- columnName: 'simple_test_id',
428
- association: {
429
- associatedEntityClass: SimpleTestDenyUpdateEntity,
430
- associatedEntityLookupByField: 'id',
431
- edgeDeletionBehavior: EntityFieldDefinition_1.EntityEdgeDeletionBehavior.SET_NULL,
432
- },
433
- }),
434
- },
435
- databaseAdapterFlavor: 'postgres',
436
- cacheAdapterFlavor: 'redis',
437
- }),
438
- privacyPolicyClass: DenyReadEntityPrivacyPolicy,
439
- };
440
- }
441
- }
442
- class SimpleTestDenyUpdateEntity extends Entity_1.default {
443
- static defineCompanionDefinition() {
444
- return {
445
- entityClass: SimpleTestDenyUpdateEntity,
446
- entityConfiguration: new EntityConfiguration_1.default({
447
- idField: 'id',
448
- tableName: 'blah',
449
- inboundEdges: [
450
- LeafDenyUpdateEntity,
451
- LeafDenyDeleteEntity,
452
- LeafDenyReadEntity,
453
- SimpleTestThrowOtherErrorEntity,
454
- ],
455
- schema: {
456
- id: new EntityFields_1.UUIDField({
457
- columnName: 'custom_id',
458
- }),
459
- },
460
- databaseAdapterFlavor: 'postgres',
461
- cacheAdapterFlavor: 'redis',
462
- }),
463
- privacyPolicyClass: DenyUpdateEntityPrivacyPolicy,
464
- };
465
- }
466
- }
467
- class SimpleTestDenyDeleteEntity extends Entity_1.default {
468
- static defineCompanionDefinition() {
469
- return {
470
- entityClass: SimpleTestDenyDeleteEntity,
471
- entityConfiguration: new EntityConfiguration_1.default({
472
- idField: 'id',
473
- tableName: 'blah_2',
474
- inboundEdges: [
475
- LeafDenyUpdateEntity,
476
- LeafDenyDeleteEntity,
477
- LeafDenyReadEntity,
478
- SimpleTestThrowOtherErrorEntity,
479
- ],
480
- schema: {
481
- id: new EntityFields_1.UUIDField({
482
- columnName: 'custom_id',
483
- }),
484
- },
485
- databaseAdapterFlavor: 'postgres',
486
- cacheAdapterFlavor: 'redis',
487
- }),
488
- privacyPolicyClass: DenyDeleteEntityPrivacyPolicy,
489
- };
490
- }
491
- }
492
- class SimpleTestThrowOtherErrorEntity extends Entity_1.default {
493
- static defineCompanionDefinition() {
494
- return {
495
- entityClass: SimpleTestThrowOtherErrorEntity,
496
- entityConfiguration: new EntityConfiguration_1.default({
497
- idField: 'id',
498
- tableName: 'blah_3',
499
- inboundEdges: [],
500
- schema: {
501
- id: new EntityFields_1.UUIDField({
502
- columnName: 'custom_id',
503
- }),
504
- simple_test_id: new EntityFields_1.UUIDField({
505
- columnName: 'simple_test_id',
506
- association: {
507
- associatedEntityClass: SimpleTestDenyUpdateEntity,
508
- associatedEntityLookupByField: 'id',
509
- edgeDeletionBehavior: EntityFieldDefinition_1.EntityEdgeDeletionBehavior.SET_NULL,
510
- },
511
- }),
512
- },
513
- databaseAdapterFlavor: 'postgres',
514
- cacheAdapterFlavor: 'redis',
515
- }),
516
- privacyPolicyClass: ThrowOtherErrorEntityPrivacyPolicy,
517
- };
518
- }
519
- }
520
- //# sourceMappingURL=EntityPrivacyUtils-test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EntityPrivacyUtils-test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/EntityPrivacyUtils-test.ts"],"names":[],"mappings":"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"}