@expo/entity 0.45.0 → 0.47.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 (425) hide show
  1. package/build/{AuthorizationResultBasedEntityAssociationLoader.d.ts → src/AuthorizationResultBasedEntityAssociationLoader.d.ts} +4 -4
  2. package/build/{AuthorizationResultBasedEntityAssociationLoader.js → src/AuthorizationResultBasedEntityAssociationLoader.js} +2 -1
  3. package/build/src/AuthorizationResultBasedEntityAssociationLoader.js.map +1 -0
  4. package/build/{AuthorizationResultBasedEntityLoader.d.ts → src/AuthorizationResultBasedEntityLoader.d.ts} +8 -8
  5. package/build/{AuthorizationResultBasedEntityLoader.js → src/AuthorizationResultBasedEntityLoader.js} +6 -5
  6. package/build/src/AuthorizationResultBasedEntityLoader.js.map +1 -0
  7. package/build/{AuthorizationResultBasedEntityMutator.d.ts → src/AuthorizationResultBasedEntityMutator.d.ts} +15 -13
  8. package/build/{AuthorizationResultBasedEntityMutator.js → src/AuthorizationResultBasedEntityMutator.js} +77 -39
  9. package/build/src/AuthorizationResultBasedEntityMutator.js.map +1 -0
  10. package/build/{ComposedEntityCacheAdapter.d.ts → src/ComposedEntityCacheAdapter.d.ts} +2 -2
  11. package/build/{ComposedEntityCacheAdapter.js → src/ComposedEntityCacheAdapter.js} +2 -1
  12. package/build/src/ComposedEntityCacheAdapter.js.map +1 -0
  13. package/build/{ComposedSecondaryEntityCache.d.ts → src/ComposedSecondaryEntityCache.d.ts} +1 -1
  14. package/build/{ComposedSecondaryEntityCache.js → src/ComposedSecondaryEntityCache.js} +2 -1
  15. package/build/src/ComposedSecondaryEntityCache.js.map +1 -0
  16. package/build/{EnforcingEntityAssociationLoader.d.ts → src/EnforcingEntityAssociationLoader.d.ts} +5 -5
  17. package/build/{EnforcingEntityAssociationLoader.js → src/EnforcingEntityAssociationLoader.js} +2 -1
  18. package/build/src/EnforcingEntityAssociationLoader.js.map +1 -0
  19. package/build/{EnforcingEntityCreator.d.ts → src/EnforcingEntityCreator.d.ts} +4 -4
  20. package/build/{EnforcingEntityCreator.js → src/EnforcingEntityCreator.js} +2 -1
  21. package/build/src/EnforcingEntityCreator.js.map +1 -0
  22. package/build/{EnforcingEntityDeleter.d.ts → src/EnforcingEntityDeleter.d.ts} +4 -4
  23. package/build/{EnforcingEntityDeleter.js → src/EnforcingEntityDeleter.js} +2 -1
  24. package/build/src/EnforcingEntityDeleter.js.map +1 -0
  25. package/build/{EnforcingEntityLoader.d.ts → src/EnforcingEntityLoader.d.ts} +5 -5
  26. package/build/{EnforcingEntityLoader.js → src/EnforcingEntityLoader.js} +2 -1
  27. package/build/src/EnforcingEntityLoader.js.map +1 -0
  28. package/build/{EnforcingEntityUpdater.d.ts → src/EnforcingEntityUpdater.d.ts} +4 -4
  29. package/build/{EnforcingEntityUpdater.js → src/EnforcingEntityUpdater.js} +2 -1
  30. package/build/src/EnforcingEntityUpdater.js.map +1 -0
  31. package/build/{Entity.d.ts → src/Entity.d.ts} +7 -7
  32. package/build/{Entity.js → src/Entity.js} +13 -15
  33. package/build/src/Entity.js.map +1 -0
  34. package/build/{EntityAssociationLoader.d.ts → src/EntityAssociationLoader.d.ts} +5 -5
  35. package/build/{EntityAssociationLoader.js → src/EntityAssociationLoader.js} +6 -8
  36. package/build/src/EntityAssociationLoader.js.map +1 -0
  37. package/build/{EntityCompanion.d.ts → src/EntityCompanion.d.ts} +10 -10
  38. package/build/{EntityCompanion.js → src/EntityCompanion.js} +6 -8
  39. package/build/src/EntityCompanion.js.map +1 -0
  40. package/build/{EntityCompanionProvider.d.ts → src/EntityCompanionProvider.d.ts} +12 -12
  41. package/build/{EntityCompanionProvider.js → src/EntityCompanionProvider.js} +6 -5
  42. package/build/src/EntityCompanionProvider.js.map +1 -0
  43. package/build/{EntityConfiguration.d.ts → src/EntityConfiguration.d.ts} +2 -2
  44. package/build/{EntityConfiguration.js → src/EntityConfiguration.js} +2 -2
  45. package/build/src/EntityConfiguration.js.map +1 -0
  46. package/build/{EntityCreator.d.ts → src/EntityCreator.d.ts} +5 -5
  47. package/build/{EntityCreator.js → src/EntityCreator.js} +4 -6
  48. package/build/{EntityCreator.js.map → src/EntityCreator.js.map} +1 -1
  49. package/build/{EntityDatabaseAdapter.d.ts → src/EntityDatabaseAdapter.d.ts} +2 -2
  50. package/build/{EntityDatabaseAdapter.js → src/EntityDatabaseAdapter.js} +2 -2
  51. package/build/src/EntityDatabaseAdapter.js.map +1 -0
  52. package/build/{EntityDeleter.d.ts → src/EntityDeleter.d.ts} +5 -5
  53. package/build/{EntityDeleter.js → src/EntityDeleter.js} +5 -7
  54. package/build/{EntityDeleter.js.map → src/EntityDeleter.js.map} +1 -1
  55. package/build/{EntityFieldDefinition.d.ts → src/EntityFieldDefinition.d.ts} +3 -3
  56. package/build/src/EntityFieldDefinition.js.map +1 -0
  57. package/build/{EntityFields.d.ts → src/EntityFields.d.ts} +7 -0
  58. package/build/{EntityFields.js → src/EntityFields.js} +11 -1
  59. package/build/src/EntityFields.js.map +1 -0
  60. package/build/{EntityLoader.d.ts → src/EntityLoader.d.ts} +7 -7
  61. package/build/{EntityLoader.js → src/EntityLoader.js} +4 -6
  62. package/build/{EntityLoader.js.map → src/EntityLoader.js.map} +1 -1
  63. package/build/{EntityLoaderFactory.d.ts → src/EntityLoaderFactory.d.ts} +8 -8
  64. package/build/src/EntityLoaderFactory.js +29 -0
  65. package/build/src/EntityLoaderFactory.js.map +1 -0
  66. package/build/{EntityLoaderUtils.d.ts → src/EntityLoaderUtils.d.ts} +7 -7
  67. package/build/{EntityLoaderUtils.js → src/EntityLoaderUtils.js} +2 -1
  68. package/build/src/EntityLoaderUtils.js.map +1 -0
  69. package/build/{EntityMutationInfo.d.ts → src/EntityMutationInfo.d.ts} +2 -2
  70. package/build/src/EntityMutationInfo.js.map +1 -0
  71. package/build/{EntityMutationTriggerConfiguration.d.ts → src/EntityMutationTriggerConfiguration.d.ts} +3 -3
  72. package/build/src/EntityMutationTriggerConfiguration.js.map +1 -0
  73. package/build/{EntityMutationValidator.d.ts → src/EntityMutationValidator.d.ts} +3 -3
  74. package/build/{EntityMutationValidator.js → src/EntityMutationValidator.js} +2 -1
  75. package/build/src/EntityMutationValidator.js.map +1 -0
  76. package/build/{EntityMutatorFactory.d.ts → src/EntityMutatorFactory.d.ts} +15 -14
  77. package/build/{EntityMutatorFactory.js → src/EntityMutatorFactory.js} +6 -5
  78. package/build/src/EntityMutatorFactory.js.map +1 -0
  79. package/build/{EntityPrivacyPolicy.d.ts → src/EntityPrivacyPolicy.d.ts} +6 -6
  80. package/build/{EntityPrivacyPolicy.js → src/EntityPrivacyPolicy.js} +8 -11
  81. package/build/{EntityPrivacyPolicy.js.map → src/EntityPrivacyPolicy.js.map} +1 -1
  82. package/build/{EntityQueryContext.d.ts → src/EntityQueryContext.d.ts} +1 -1
  83. package/build/src/EntityQueryContext.js.map +1 -0
  84. package/build/{EntityQueryContextProvider.d.ts → src/EntityQueryContextProvider.d.ts} +2 -2
  85. package/build/{EntityQueryContextProvider.js → src/EntityQueryContextProvider.js} +2 -1
  86. package/build/src/EntityQueryContextProvider.js.map +1 -0
  87. package/build/{EntitySecondaryCacheLoader.d.ts → src/EntitySecondaryCacheLoader.d.ts} +5 -5
  88. package/build/{EntitySecondaryCacheLoader.js → src/EntitySecondaryCacheLoader.js} +2 -1
  89. package/build/src/EntitySecondaryCacheLoader.js.map +1 -0
  90. package/build/{EntityUpdater.d.ts → src/EntityUpdater.d.ts} +5 -5
  91. package/build/{EntityUpdater.js → src/EntityUpdater.js} +5 -7
  92. package/build/{EntityUpdater.js.map → src/EntityUpdater.js.map} +1 -1
  93. package/build/{GenericEntityCacheAdapter.d.ts → src/GenericEntityCacheAdapter.d.ts} +3 -3
  94. package/build/{GenericEntityCacheAdapter.js → src/GenericEntityCacheAdapter.js} +2 -1
  95. package/build/src/GenericEntityCacheAdapter.js.map +1 -0
  96. package/build/{GenericSecondaryEntityCache.d.ts → src/GenericSecondaryEntityCache.d.ts} +2 -2
  97. package/build/{GenericSecondaryEntityCache.js → src/GenericSecondaryEntityCache.js} +2 -1
  98. package/build/src/GenericSecondaryEntityCache.js.map +1 -0
  99. package/build/{IEntityCacheAdapter.d.ts → src/IEntityCacheAdapter.d.ts} +1 -1
  100. package/build/src/IEntityCacheAdapter.js.map +1 -0
  101. package/build/{IEntityCacheAdapterProvider.d.ts → src/IEntityCacheAdapterProvider.d.ts} +3 -3
  102. package/build/src/IEntityCacheAdapterProvider.js.map +1 -0
  103. package/build/{IEntityDatabaseAdapterProvider.d.ts → src/IEntityDatabaseAdapterProvider.d.ts} +3 -3
  104. package/build/src/IEntityDatabaseAdapterProvider.js.map +1 -0
  105. package/build/{IEntityGenericCacher.d.ts → src/IEntityGenericCacher.d.ts} +1 -1
  106. package/build/src/IEntityGenericCacher.js.map +1 -0
  107. package/build/{ReadonlyEntity.d.ts → src/ReadonlyEntity.d.ts} +8 -8
  108. package/build/{ReadonlyEntity.js → src/ReadonlyEntity.js} +9 -8
  109. package/build/src/ReadonlyEntity.js.map +1 -0
  110. package/build/{ViewerContext.d.ts → src/ViewerContext.d.ts} +5 -5
  111. package/build/{ViewerContext.js → src/ViewerContext.js} +4 -6
  112. package/build/{ViewerContext.js.map → src/ViewerContext.js.map} +1 -1
  113. package/build/{ViewerScopedEntityCompanion.d.ts → src/ViewerScopedEntityCompanion.d.ts} +9 -9
  114. package/build/{ViewerScopedEntityCompanion.js → src/ViewerScopedEntityCompanion.js} +6 -8
  115. package/build/{ViewerScopedEntityCompanion.js.map → src/ViewerScopedEntityCompanion.js.map} +1 -1
  116. package/build/{ViewerScopedEntityCompanionProvider.d.ts → src/ViewerScopedEntityCompanionProvider.d.ts} +6 -6
  117. package/build/{ViewerScopedEntityCompanionProvider.js → src/ViewerScopedEntityCompanionProvider.js} +4 -6
  118. package/build/src/ViewerScopedEntityCompanionProvider.js.map +1 -0
  119. package/build/{ViewerScopedEntityLoaderFactory.d.ts → src/ViewerScopedEntityLoaderFactory.d.ts} +6 -6
  120. package/build/{ViewerScopedEntityLoaderFactory.js → src/ViewerScopedEntityLoaderFactory.js} +2 -1
  121. package/build/src/ViewerScopedEntityLoaderFactory.js.map +1 -0
  122. package/build/{ViewerScopedEntityMutatorFactory.d.ts → src/ViewerScopedEntityMutatorFactory.d.ts} +9 -8
  123. package/build/{ViewerScopedEntityMutatorFactory.js → src/ViewerScopedEntityMutatorFactory.js} +6 -5
  124. package/build/src/ViewerScopedEntityMutatorFactory.js.map +1 -0
  125. package/build/src/entityUtils.js.map +1 -0
  126. package/build/{errors → src/errors}/EntityCacheAdapterError.d.ts +2 -2
  127. package/build/src/errors/EntityCacheAdapterError.js +13 -0
  128. package/build/src/errors/EntityCacheAdapterError.js.map +1 -0
  129. package/build/{errors → src/errors}/EntityDatabaseAdapterError.d.ts +2 -2
  130. package/build/{errors → src/errors}/EntityDatabaseAdapterError.js +4 -37
  131. package/build/src/errors/EntityDatabaseAdapterError.js.map +1 -0
  132. package/build/{errors → src/errors}/EntityError.d.ts +1 -1
  133. package/build/{errors → src/errors}/EntityError.js +2 -2
  134. package/build/src/errors/EntityError.js.map +1 -0
  135. package/build/{errors → src/errors}/EntityInvalidFieldValueError.d.ts +5 -5
  136. package/build/src/errors/EntityInvalidFieldValueError.js +13 -0
  137. package/build/src/errors/EntityInvalidFieldValueError.js.map +1 -0
  138. package/build/{errors → src/errors}/EntityNotAuthorizedError.d.ts +4 -4
  139. package/build/src/errors/EntityNotAuthorizedError.js +16 -0
  140. package/build/src/errors/EntityNotAuthorizedError.js.map +1 -0
  141. package/build/{errors → src/errors}/EntityNotFoundError.d.ts +5 -5
  142. package/build/src/errors/EntityNotFoundError.js +18 -0
  143. package/build/src/errors/EntityNotFoundError.js.map +1 -0
  144. package/build/src/index.d.ts +76 -0
  145. package/build/src/index.js +94 -0
  146. package/build/src/index.js.map +1 -0
  147. package/build/{internal → src/internal}/CompositeFieldHolder.d.ts +1 -1
  148. package/build/src/internal/CompositeFieldHolder.js.map +1 -0
  149. package/build/src/internal/CompositeFieldValueMap.js.map +1 -0
  150. package/build/{internal → src/internal}/EntityDataManager.d.ts +5 -5
  151. package/build/{internal → src/internal}/EntityDataManager.js +2 -1
  152. package/build/src/internal/EntityDataManager.js.map +1 -0
  153. package/build/{internal → src/internal}/EntityFieldTransformationUtils.d.ts +1 -1
  154. package/build/src/internal/EntityFieldTransformationUtils.js.map +1 -0
  155. package/build/{internal → src/internal}/EntityLoadInterfaces.d.ts +1 -1
  156. package/build/src/internal/EntityLoadInterfaces.js.map +1 -0
  157. package/build/{internal → src/internal}/EntityTableDataCoordinator.d.ts +9 -9
  158. package/build/{internal → src/internal}/EntityTableDataCoordinator.js +5 -7
  159. package/build/{internal → src/internal}/EntityTableDataCoordinator.js.map +1 -1
  160. package/build/{internal → src/internal}/ReadThroughEntityCache.d.ts +3 -3
  161. package/build/{internal → src/internal}/ReadThroughEntityCache.js +2 -2
  162. package/build/src/internal/ReadThroughEntityCache.js.map +1 -0
  163. package/build/{internal → src/internal}/SingleFieldHolder.d.ts +1 -1
  164. package/build/src/internal/SingleFieldHolder.js.map +1 -0
  165. package/build/{metrics → src/metrics}/EntityMetricsUtils.d.ts +1 -1
  166. package/build/src/metrics/EntityMetricsUtils.js.map +1 -0
  167. package/build/{metrics → src/metrics}/IEntityMetricsAdapter.d.ts +1 -1
  168. package/build/src/metrics/IEntityMetricsAdapter.js.map +1 -0
  169. package/build/{metrics → src/metrics}/NoOpEntityMetricsAdapter.d.ts +2 -2
  170. package/build/{metrics → src/metrics}/NoOpEntityMetricsAdapter.js +2 -1
  171. package/build/src/metrics/NoOpEntityMetricsAdapter.js.map +1 -0
  172. package/build/{rules → src/rules}/AlwaysAllowPrivacyPolicyRule.d.ts +4 -4
  173. package/build/src/rules/AlwaysAllowPrivacyPolicyRule.js +14 -0
  174. package/build/src/rules/AlwaysAllowPrivacyPolicyRule.js.map +1 -0
  175. package/build/{rules → src/rules}/AlwaysDenyPrivacyPolicyRule.d.ts +4 -4
  176. package/build/src/rules/AlwaysDenyPrivacyPolicyRule.js +14 -0
  177. package/build/src/rules/AlwaysDenyPrivacyPolicyRule.js.map +1 -0
  178. package/build/{rules → src/rules}/AlwaysSkipPrivacyPolicyRule.d.ts +4 -4
  179. package/build/src/rules/AlwaysSkipPrivacyPolicyRule.js +14 -0
  180. package/build/src/rules/AlwaysSkipPrivacyPolicyRule.js.map +1 -0
  181. package/build/{rules → src/rules}/PrivacyPolicyRule.d.ts +3 -3
  182. package/build/{rules → src/rules}/PrivacyPolicyRule.js +2 -2
  183. package/build/src/rules/PrivacyPolicyRule.js.map +1 -0
  184. package/build/{utils → src/utils}/EntityCreationUtils.d.ts +3 -3
  185. package/build/{utils → src/utils}/EntityCreationUtils.js +2 -5
  186. package/build/{utils → src/utils}/EntityCreationUtils.js.map +1 -1
  187. package/build/{utils → src/utils}/EntityPrivacyUtils.d.ts +4 -4
  188. package/build/{utils → src/utils}/EntityPrivacyUtils.js +4 -7
  189. package/build/{utils → src/utils}/EntityPrivacyUtils.js.map +1 -1
  190. package/build/src/utils/collections/SerializableKeyMap.js.map +1 -0
  191. package/build/src/utils/collections/maps.js.map +1 -0
  192. package/build/src/utils/collections/sets.js.map +1 -0
  193. package/build/{utils → src/utils}/mergeEntityMutationTriggerConfigurations.d.ts +3 -3
  194. package/build/src/utils/mergeEntityMutationTriggerConfigurations.js.map +1 -0
  195. package/package.json +14 -24
  196. package/src/AuthorizationResultBasedEntityAssociationLoader.ts +4 -4
  197. package/src/AuthorizationResultBasedEntityLoader.ts +13 -12
  198. package/src/AuthorizationResultBasedEntityMutator.ts +78 -63
  199. package/src/ComposedEntityCacheAdapter.ts +3 -3
  200. package/src/ComposedSecondaryEntityCache.ts +1 -1
  201. package/src/EnforcingEntityAssociationLoader.ts +6 -5
  202. package/src/EnforcingEntityCreator.ts +4 -4
  203. package/src/EnforcingEntityDeleter.ts +4 -4
  204. package/src/EnforcingEntityLoader.ts +5 -5
  205. package/src/EnforcingEntityUpdater.ts +4 -4
  206. package/src/Entity.ts +10 -10
  207. package/src/EntityAssociationLoader.ts +5 -5
  208. package/src/EntityCompanion.ts +10 -10
  209. package/src/EntityCompanionProvider.ts +13 -13
  210. package/src/EntityConfiguration.ts +3 -3
  211. package/src/EntityCreator.ts +5 -5
  212. package/src/EntityDatabaseAdapter.ts +3 -3
  213. package/src/EntityDeleter.ts +6 -6
  214. package/src/EntityFieldDefinition.ts +3 -3
  215. package/src/EntityFields.ts +13 -0
  216. package/src/EntityLoader.ts +7 -7
  217. package/src/EntityLoaderFactory.ts +9 -9
  218. package/src/EntityLoaderUtils.ts +7 -7
  219. package/src/EntityMutationInfo.ts +2 -2
  220. package/src/EntityMutationTriggerConfiguration.ts +3 -3
  221. package/src/EntityMutationValidator.ts +3 -3
  222. package/src/EntityMutatorFactory.ts +17 -12
  223. package/src/EntityPrivacyPolicy.ts +7 -6
  224. package/src/EntityQueryContext.ts +1 -1
  225. package/src/EntityQueryContextProvider.ts +3 -3
  226. package/src/EntitySecondaryCacheLoader.ts +5 -5
  227. package/src/EntityUpdater.ts +6 -6
  228. package/src/GenericEntityCacheAdapter.ts +3 -3
  229. package/src/GenericSecondaryEntityCache.ts +2 -2
  230. package/src/IEntityCacheAdapter.ts +1 -1
  231. package/src/IEntityCacheAdapterProvider.ts +3 -3
  232. package/src/IEntityDatabaseAdapterProvider.ts +3 -3
  233. package/src/IEntityGenericCacher.ts +1 -1
  234. package/src/ReadonlyEntity.ts +10 -10
  235. package/src/ViewerContext.ts +6 -6
  236. package/src/ViewerScopedEntityCompanion.ts +9 -9
  237. package/src/ViewerScopedEntityCompanionProvider.ts +6 -6
  238. package/src/ViewerScopedEntityLoaderFactory.ts +6 -6
  239. package/src/ViewerScopedEntityMutatorFactory.ts +11 -8
  240. package/src/__tests__/AuthorizationResultBasedEntityAssociationLoader-test.ts +5 -4
  241. package/src/__tests__/AuthorizationResultBasedEntityLoader-constructor-test.ts +14 -18
  242. package/src/__tests__/AuthorizationResultBasedEntityLoader-test.ts +18 -16
  243. package/src/__tests__/ComposedCacheAdapter-test.ts +5 -3
  244. package/src/__tests__/ComposedSecondaryEntityCache-test.ts +2 -1
  245. package/src/__tests__/EnforcingEntityAssociationLoader-test.ts +4 -3
  246. package/src/__tests__/EnforcingEntityLoader-test.ts +4 -3
  247. package/src/__tests__/Entity-test.ts +8 -6
  248. package/src/__tests__/EntityAssociationLoader-test.ts +7 -5
  249. package/src/__tests__/EntityCommonUseCases-test.ts +10 -9
  250. package/src/__tests__/EntityCompanion-test.ts +13 -11
  251. package/src/__tests__/EntityCompanionProvider-test.ts +7 -5
  252. package/src/__tests__/EntityConfiguration-test.ts +3 -1
  253. package/src/__tests__/EntityDatabaseAdapter-test.ts +9 -7
  254. package/src/__tests__/EntityEdges-test.ts +10 -8
  255. package/src/__tests__/EntityFields-test.ts +15 -7
  256. package/src/__tests__/EntityLoader-test.ts +8 -6
  257. package/src/__tests__/EntityMutator-MutationCacheConsistency-test.ts +8 -6
  258. package/src/__tests__/EntityMutator-SingleCompositeFieldCacheConsistency-test.ts +5 -3
  259. package/src/__tests__/EntityMutator-test.ts +250 -45
  260. package/src/__tests__/EntityPrivacyPolicy-test.ts +19 -16
  261. package/src/__tests__/EntityQueryContext-test.ts +7 -6
  262. package/src/__tests__/EntitySecondaryCacheLoader-test.ts +5 -3
  263. package/src/__tests__/EntitySelfReferentialEdges-test.ts +7 -5
  264. package/src/__tests__/GenericEntityCacheAdapter-test.ts +4 -3
  265. package/src/__tests__/ReadonlyEntity-test.ts +10 -9
  266. package/src/__tests__/ViewerContext-test.ts +3 -1
  267. package/src/__tests__/ViewerScopedEntityCompanion-test.ts +10 -8
  268. package/src/__tests__/ViewerScopedEntityCompanionProvider-test.ts +7 -6
  269. package/src/__tests__/ViewerScopedEntityLoaderFactory-test.ts +5 -4
  270. package/src/__tests__/ViewerScopedEntityMutatorFactory-test.ts +8 -6
  271. package/src/__tests__/cases/TwoEntitySameTableDisjointRows-test.ts +15 -13
  272. package/src/__tests__/cases/TwoEntitySameTableOverlappingRows-test.ts +7 -5
  273. package/src/__tests__/entityUtils-test.ts +3 -2
  274. package/src/errors/EntityCacheAdapterError.ts +2 -2
  275. package/src/errors/EntityDatabaseAdapterError.ts +2 -2
  276. package/src/errors/EntityError.ts +1 -1
  277. package/src/errors/EntityInvalidFieldValueError.ts +5 -5
  278. package/src/errors/EntityNotAuthorizedError.ts +4 -4
  279. package/src/errors/EntityNotFoundError.ts +5 -5
  280. package/src/errors/__tests__/EntityDatabaseAdapterError-test.ts +6 -3
  281. package/src/index.ts +39 -54
  282. package/src/internal/CompositeFieldHolder.ts +2 -1
  283. package/src/internal/EntityDataManager.ts +7 -5
  284. package/src/internal/EntityFieldTransformationUtils.ts +1 -1
  285. package/src/internal/EntityLoadInterfaces.ts +1 -1
  286. package/src/internal/EntityTableDataCoordinator.ts +10 -10
  287. package/src/internal/ReadThroughEntityCache.ts +3 -3
  288. package/src/internal/SingleFieldHolder.ts +1 -1
  289. package/src/internal/__tests__/CompositeFieldHolder-test.ts +2 -0
  290. package/src/internal/__tests__/CompositeFieldValueMap-test.ts +2 -0
  291. package/src/internal/__tests__/EntityDataManager-test.ts +34 -31
  292. package/src/internal/__tests__/EntityFieldTransformationUtils-test.ts +5 -3
  293. package/src/internal/__tests__/ReadThroughEntityCache-test.ts +5 -4
  294. package/src/metrics/EntityMetricsUtils.ts +3 -2
  295. package/src/metrics/IEntityMetricsAdapter.ts +1 -1
  296. package/src/metrics/NoOpEntityMetricsAdapter.ts +3 -2
  297. package/src/rules/AlwaysAllowPrivacyPolicyRule.ts +4 -4
  298. package/src/rules/AlwaysDenyPrivacyPolicyRule.ts +4 -4
  299. package/src/rules/AlwaysSkipPrivacyPolicyRule.ts +4 -4
  300. package/src/rules/PrivacyPolicyRule.ts +3 -3
  301. package/src/rules/__tests__/AlwaysAllowPrivacyPolicyRule-test.ts +3 -3
  302. package/src/rules/__tests__/AlwaysDenyPrivacyPolicyRule-test.ts +3 -3
  303. package/src/rules/__tests__/AlwaysSkipPrivacyPolicyRule-test.ts +3 -3
  304. package/src/utils/EntityCreationUtils.ts +4 -4
  305. package/src/utils/EntityPrivacyUtils.ts +5 -5
  306. package/src/utils/__testfixtures__/PrivacyPolicyRuleTestUtils.ts +5 -3
  307. package/src/utils/__testfixtures__/SimpleTestEntity.ts +6 -6
  308. package/src/utils/__testfixtures__/StubCacheAdapter.ts +4 -4
  309. package/src/utils/__testfixtures__/StubDatabaseAdapter.ts +8 -7
  310. package/src/utils/__testfixtures__/StubDatabaseAdapterProvider.ts +5 -5
  311. package/src/utils/__testfixtures__/StubQueryContextProvider.ts +2 -2
  312. package/src/utils/__testfixtures__/TestEntity.ts +7 -7
  313. package/src/utils/__testfixtures__/TestEntity2.ts +6 -6
  314. package/src/utils/__testfixtures__/TestEntityWithMutationTriggers.ts +6 -10
  315. package/src/utils/__testfixtures__/TestViewerContext.ts +2 -2
  316. package/src/utils/__testfixtures__/createUnitTestEntityCompanionProvider.ts +5 -5
  317. package/src/utils/__testfixtures__/describeFieldTestCase.ts +3 -1
  318. package/src/utils/__tests__/EntityCreationUtils-test.ts +5 -3
  319. package/src/utils/__tests__/EntityPrivacyUtils-test.ts +15 -13
  320. package/src/utils/__tests__/canViewerDeleteAsync-edgeDeletionPermissionInferenceBehavior-test.ts +10 -8
  321. package/src/utils/__tests__/mergeEntityMutationTriggerConfigurations-test.ts +2 -0
  322. package/src/utils/collections/__tests__/SerializableKeyMap-test.ts +2 -0
  323. package/src/utils/collections/__tests__/maps-test.ts +3 -1
  324. package/src/utils/collections/__tests__/sets-test.ts +2 -0
  325. package/src/utils/mergeEntityMutationTriggerConfigurations.ts +3 -3
  326. package/LICENSE +0 -21
  327. package/build/AuthorizationResultBasedEntityAssociationLoader.js.map +0 -1
  328. package/build/AuthorizationResultBasedEntityLoader.js.map +0 -1
  329. package/build/AuthorizationResultBasedEntityMutator.js.map +0 -1
  330. package/build/ComposedEntityCacheAdapter.js.map +0 -1
  331. package/build/ComposedSecondaryEntityCache.js.map +0 -1
  332. package/build/EnforcingEntityAssociationLoader.js.map +0 -1
  333. package/build/EnforcingEntityCreator.js.map +0 -1
  334. package/build/EnforcingEntityDeleter.js.map +0 -1
  335. package/build/EnforcingEntityLoader.js.map +0 -1
  336. package/build/EnforcingEntityUpdater.js.map +0 -1
  337. package/build/Entity.js.map +0 -1
  338. package/build/EntityAssociationLoader.js.map +0 -1
  339. package/build/EntityCompanion.js.map +0 -1
  340. package/build/EntityCompanionProvider.js.map +0 -1
  341. package/build/EntityConfiguration.js.map +0 -1
  342. package/build/EntityDatabaseAdapter.js.map +0 -1
  343. package/build/EntityFieldDefinition.js.map +0 -1
  344. package/build/EntityFields.js.map +0 -1
  345. package/build/EntityLoaderFactory.js +0 -31
  346. package/build/EntityLoaderFactory.js.map +0 -1
  347. package/build/EntityLoaderUtils.js.map +0 -1
  348. package/build/EntityMutationInfo.js.map +0 -1
  349. package/build/EntityMutationTriggerConfiguration.js.map +0 -1
  350. package/build/EntityMutationValidator.js.map +0 -1
  351. package/build/EntityMutatorFactory.js.map +0 -1
  352. package/build/EntityQueryContext.js.map +0 -1
  353. package/build/EntityQueryContextProvider.js.map +0 -1
  354. package/build/EntitySecondaryCacheLoader.js.map +0 -1
  355. package/build/GenericEntityCacheAdapter.js.map +0 -1
  356. package/build/GenericSecondaryEntityCache.js.map +0 -1
  357. package/build/IEntityCacheAdapter.js.map +0 -1
  358. package/build/IEntityCacheAdapterProvider.js.map +0 -1
  359. package/build/IEntityDatabaseAdapterProvider.js.map +0 -1
  360. package/build/IEntityGenericCacher.js.map +0 -1
  361. package/build/ReadonlyEntity.js.map +0 -1
  362. package/build/ViewerScopedEntityCompanionProvider.js.map +0 -1
  363. package/build/ViewerScopedEntityLoaderFactory.js.map +0 -1
  364. package/build/ViewerScopedEntityMutatorFactory.js.map +0 -1
  365. package/build/entityUtils.js.map +0 -1
  366. package/build/errors/EntityCacheAdapterError.js +0 -46
  367. package/build/errors/EntityCacheAdapterError.js.map +0 -1
  368. package/build/errors/EntityDatabaseAdapterError.js.map +0 -1
  369. package/build/errors/EntityError.js.map +0 -1
  370. package/build/errors/EntityInvalidFieldValueError.js +0 -45
  371. package/build/errors/EntityInvalidFieldValueError.js.map +0 -1
  372. package/build/errors/EntityNotAuthorizedError.js +0 -48
  373. package/build/errors/EntityNotAuthorizedError.js.map +0 -1
  374. package/build/errors/EntityNotFoundError.js +0 -50
  375. package/build/errors/EntityNotFoundError.js.map +0 -1
  376. package/build/index.d.ts +0 -91
  377. package/build/index.js +0 -155
  378. package/build/index.js.map +0 -1
  379. package/build/internal/CompositeFieldHolder.js.map +0 -1
  380. package/build/internal/CompositeFieldValueMap.js.map +0 -1
  381. package/build/internal/EntityDataManager.js.map +0 -1
  382. package/build/internal/EntityFieldTransformationUtils.js.map +0 -1
  383. package/build/internal/EntityLoadInterfaces.js.map +0 -1
  384. package/build/internal/ReadThroughEntityCache.js.map +0 -1
  385. package/build/internal/SingleFieldHolder.js.map +0 -1
  386. package/build/metrics/EntityMetricsUtils.js.map +0 -1
  387. package/build/metrics/IEntityMetricsAdapter.js.map +0 -1
  388. package/build/metrics/NoOpEntityMetricsAdapter.js.map +0 -1
  389. package/build/rules/AlwaysAllowPrivacyPolicyRule.js +0 -46
  390. package/build/rules/AlwaysAllowPrivacyPolicyRule.js.map +0 -1
  391. package/build/rules/AlwaysDenyPrivacyPolicyRule.js +0 -46
  392. package/build/rules/AlwaysDenyPrivacyPolicyRule.js.map +0 -1
  393. package/build/rules/AlwaysSkipPrivacyPolicyRule.js +0 -46
  394. package/build/rules/AlwaysSkipPrivacyPolicyRule.js.map +0 -1
  395. package/build/rules/PrivacyPolicyRule.js.map +0 -1
  396. package/build/tsconfig.build.tsbuildinfo +0 -1
  397. package/build/utils/collections/SerializableKeyMap.js.map +0 -1
  398. package/build/utils/collections/maps.js.map +0 -1
  399. package/build/utils/collections/sets.js.map +0 -1
  400. package/build/utils/mergeEntityMutationTriggerConfigurations.js.map +0 -1
  401. /package/build/{EntityFieldDefinition.js → src/EntityFieldDefinition.js} +0 -0
  402. /package/build/{EntityMutationInfo.js → src/EntityMutationInfo.js} +0 -0
  403. /package/build/{EntityMutationTriggerConfiguration.js → src/EntityMutationTriggerConfiguration.js} +0 -0
  404. /package/build/{EntityQueryContext.js → src/EntityQueryContext.js} +0 -0
  405. /package/build/{IEntityCacheAdapter.js → src/IEntityCacheAdapter.js} +0 -0
  406. /package/build/{IEntityCacheAdapterProvider.js → src/IEntityCacheAdapterProvider.js} +0 -0
  407. /package/build/{IEntityDatabaseAdapterProvider.js → src/IEntityDatabaseAdapterProvider.js} +0 -0
  408. /package/build/{IEntityGenericCacher.js → src/IEntityGenericCacher.js} +0 -0
  409. /package/build/{entityUtils.d.ts → src/entityUtils.d.ts} +0 -0
  410. /package/build/{entityUtils.js → src/entityUtils.js} +0 -0
  411. /package/build/{internal → src/internal}/CompositeFieldHolder.js +0 -0
  412. /package/build/{internal → src/internal}/CompositeFieldValueMap.d.ts +0 -0
  413. /package/build/{internal → src/internal}/CompositeFieldValueMap.js +0 -0
  414. /package/build/{internal → src/internal}/EntityFieldTransformationUtils.js +0 -0
  415. /package/build/{internal → src/internal}/EntityLoadInterfaces.js +0 -0
  416. /package/build/{internal → src/internal}/SingleFieldHolder.js +0 -0
  417. /package/build/{metrics → src/metrics}/EntityMetricsUtils.js +0 -0
  418. /package/build/{metrics → src/metrics}/IEntityMetricsAdapter.js +0 -0
  419. /package/build/{utils → src/utils}/collections/SerializableKeyMap.d.ts +0 -0
  420. /package/build/{utils → src/utils}/collections/SerializableKeyMap.js +0 -0
  421. /package/build/{utils → src/utils}/collections/maps.d.ts +0 -0
  422. /package/build/{utils → src/utils}/collections/maps.js +0 -0
  423. /package/build/{utils → src/utils}/collections/sets.d.ts +0 -0
  424. /package/build/{utils → src/utils}/collections/sets.js +0 -0
  425. /package/build/{utils → src/utils}/mergeEntityMutationTriggerConfigurations.js +0 -0
@@ -1,17 +1,17 @@
1
1
  import { Result, result } from '@expo/results';
2
2
 
3
3
  import { IEntityClass } from './Entity';
4
- import EntityPrivacyPolicy from './EntityPrivacyPolicy';
4
+ import { EntityPrivacyPolicy } from './EntityPrivacyPolicy';
5
5
  import { EntityQueryContext } from './EntityQueryContext';
6
- import ReadonlyEntity from './ReadonlyEntity';
7
- import ViewerContext from './ViewerContext';
6
+ import { ReadonlyEntity } from './ReadonlyEntity';
7
+ import { ViewerContext } from './ViewerContext';
8
8
 
9
9
  /**
10
10
  * An association loader is a set of convenience methods for loading entities
11
11
  * associated with an entity. In relational databases, these entities are often referenced
12
12
  * by foreign keys.
13
13
  */
14
- export default class AuthorizationResultBasedEntityAssociationLoader<
14
+ export class AuthorizationResultBasedEntityAssociationLoader<
15
15
  TFields extends Record<string, any>,
16
16
  TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
17
17
  TViewerContext extends ViewerContext,
@@ -3,28 +3,29 @@ import invariant from 'invariant';
3
3
  import nullthrows from 'nullthrows';
4
4
 
5
5
  import { IEntityClass } from './Entity';
6
- import EntityConfiguration, {
6
+ import {
7
7
  EntityCompositeField,
8
8
  EntityCompositeFieldValue,
9
+ EntityConfiguration,
9
10
  } from './EntityConfiguration';
10
11
  import {
11
12
  FieldEqualityCondition,
12
- QuerySelectionModifiers,
13
13
  isSingleValueFieldEqualityCondition,
14
+ QuerySelectionModifiers,
14
15
  QuerySelectionModifiersWithOrderByRaw,
15
16
  } from './EntityDatabaseAdapter';
16
- import EntityLoaderUtils from './EntityLoaderUtils';
17
- import EntityPrivacyPolicy from './EntityPrivacyPolicy';
17
+ import { EntityLoaderUtils } from './EntityLoaderUtils';
18
+ import { EntityPrivacyPolicy } from './EntityPrivacyPolicy';
18
19
  import { EntityQueryContext } from './EntityQueryContext';
19
- import ReadonlyEntity from './ReadonlyEntity';
20
- import ViewerContext from './ViewerContext';
21
- import EntityInvalidFieldValueError from './errors/EntityInvalidFieldValueError';
22
- import EntityNotFoundError from './errors/EntityNotFoundError';
23
- import { CompositeFieldValueHolder, CompositeFieldHolder } from './internal/CompositeFieldHolder';
20
+ import { ReadonlyEntity } from './ReadonlyEntity';
21
+ import { ViewerContext } from './ViewerContext';
22
+ import { EntityInvalidFieldValueError } from './errors/EntityInvalidFieldValueError';
23
+ import { EntityNotFoundError } from './errors/EntityNotFoundError';
24
+ import { CompositeFieldHolder, CompositeFieldValueHolder } from './internal/CompositeFieldHolder';
24
25
  import { CompositeFieldValueMap } from './internal/CompositeFieldValueMap';
25
- import EntityDataManager from './internal/EntityDataManager';
26
+ import { EntityDataManager } from './internal/EntityDataManager';
26
27
  import { SingleFieldHolder, SingleFieldValueHolder } from './internal/SingleFieldHolder';
27
- import IEntityMetricsAdapter from './metrics/IEntityMetricsAdapter';
28
+ import { IEntityMetricsAdapter } from './metrics/IEntityMetricsAdapter';
28
29
  import { mapKeys, mapMap } from './utils/collections/maps';
29
30
  import { areSetsEqual } from './utils/collections/sets';
30
31
 
@@ -34,7 +35,7 @@ import { areSetsEqual } from './utils/collections/sets';
34
35
  * loader are are results (or null for some loader methods), where an unsuccessful result
35
36
  * means an authorization error or entity construction error occurred. Other errors are thrown.
36
37
  */
37
- export default class AuthorizationResultBasedEntityLoader<
38
+ export class AuthorizationResultBasedEntityLoader<
38
39
  TFields extends Record<string, any>,
39
40
  TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
40
41
  TViewerContext extends ViewerContext,
@@ -1,30 +1,31 @@
1
- import { Result, asyncResult, result, enforceAsyncResult } from '@expo/results';
1
+ import { Result, asyncResult, enforceAsyncResult, result } from '@expo/results';
2
2
  import invariant from 'invariant';
3
3
 
4
- import Entity, { IEntityClass } from './Entity';
5
- import EntityCompanionProvider from './EntityCompanionProvider';
6
- import EntityConfiguration from './EntityConfiguration';
7
- import EntityDatabaseAdapter from './EntityDatabaseAdapter';
4
+ import { Entity, IEntityClass } from './Entity';
5
+ import { EntityCompanionProvider } from './EntityCompanionProvider';
6
+ import { EntityConfiguration } from './EntityConfiguration';
7
+ import { EntityDatabaseAdapter } from './EntityDatabaseAdapter';
8
8
  import { EntityEdgeDeletionBehavior } from './EntityFieldDefinition';
9
- import EntityLoaderFactory from './EntityLoaderFactory';
9
+ import { EntityLoaderFactory } from './EntityLoaderFactory';
10
10
  import {
11
- EntityValidatorMutationInfo,
11
+ EntityCascadingDeletionInfo,
12
12
  EntityMutationType,
13
13
  EntityTriggerMutationInfo,
14
- EntityCascadingDeletionInfo,
14
+ EntityValidatorMutationInfo,
15
15
  } from './EntityMutationInfo';
16
- import EntityMutationTriggerConfiguration, {
16
+ import {
17
17
  EntityMutationTrigger,
18
+ EntityMutationTriggerConfiguration,
18
19
  EntityNonTransactionalMutationTrigger,
19
20
  } from './EntityMutationTriggerConfiguration';
20
- import EntityMutationValidator from './EntityMutationValidator';
21
- import EntityPrivacyPolicy from './EntityPrivacyPolicy';
21
+ import { EntityMutationValidator } from './EntityMutationValidator';
22
+ import { EntityPrivacyPolicy } from './EntityPrivacyPolicy';
22
23
  import { EntityQueryContext, EntityTransactionalQueryContext } from './EntityQueryContext';
23
- import ViewerContext from './ViewerContext';
24
+ import { ViewerContext } from './ViewerContext';
24
25
  import { enforceResultsAsync } from './entityUtils';
25
- import EntityInvalidFieldValueError from './errors/EntityInvalidFieldValueError';
26
+ import { EntityInvalidFieldValueError } from './errors/EntityInvalidFieldValueError';
26
27
  import { timeAndLogMutationEventAsync } from './metrics/EntityMetricsUtils';
27
- import IEntityMetricsAdapter, { EntityMetricsMutationType } from './metrics/IEntityMetricsAdapter';
28
+ import { EntityMetricsMutationType, IEntityMetricsAdapter } from './metrics/IEntityMetricsAdapter';
28
29
  import { mapMapAsync } from './utils/collections/maps';
29
30
 
30
31
  /**
@@ -476,6 +477,7 @@ export class AuthorizationResultBasedUpdateMutator<
476
477
  databaseAdapter: EntityDatabaseAdapter<TFields, TIDField>,
477
478
  metricsAdapter: IEntityMetricsAdapter,
478
479
  originalEntity: TEntity,
480
+ private readonly cascadingDeleteCause: EntityCascadingDeletionInfo | null,
479
481
  ) {
480
482
  super(
481
483
  companionProvider,
@@ -516,37 +518,25 @@ export class AuthorizationResultBasedUpdateMutator<
516
518
  EntityMetricsMutationType.UPDATE,
517
519
  this.entityClass.name,
518
520
  this.queryContext,
519
- )(this.updateInTransactionAsync(false, null));
521
+ )(this.updateInTransactionAsync(false));
520
522
  }
521
523
 
522
- private async updateInTransactionAsync(
523
- skipDatabaseUpdate: true,
524
- cascadingDeleteCause: EntityCascadingDeletionInfo,
525
- ): Promise<Result<TEntity>>;
526
- private async updateInTransactionAsync(
527
- skipDatabaseUpdate: false,
528
- cascadingDeleteCause: EntityCascadingDeletionInfo | null,
529
- ): Promise<Result<TEntity>>;
530
- private async updateInTransactionAsync(
531
- skipDatabaseUpdate: boolean,
532
- cascadingDeleteCause: EntityCascadingDeletionInfo | null,
533
- ): Promise<Result<TEntity>> {
524
+ private async updateInTransactionAsync(skipDatabaseUpdate: boolean): Promise<Result<TEntity>> {
534
525
  return await this.queryContext.runInTransactionIfNotInTransactionAsync((innerQueryContext) =>
535
- this.updateInternalAsync(innerQueryContext, skipDatabaseUpdate, cascadingDeleteCause),
526
+ this.updateInternalAsync(innerQueryContext, skipDatabaseUpdate),
536
527
  );
537
528
  }
538
529
 
539
530
  private async updateInternalAsync(
540
531
  queryContext: EntityTransactionalQueryContext,
541
532
  skipDatabaseUpdate: boolean,
542
- cascadingDeleteCause: EntityCascadingDeletionInfo | null,
543
533
  ): Promise<Result<TEntity>> {
544
534
  this.validateFields(this.updatedFields);
545
535
  this.ensureStableIDField(this.updatedFields);
546
536
 
547
537
  const entityLoader = this.entityLoaderFactory.forLoad(this.viewerContext, queryContext, {
548
538
  previousValue: this.originalEntity,
549
- cascadingDeleteCause,
539
+ cascadingDeleteCause: this.cascadingDeleteCause,
550
540
  });
551
541
 
552
542
  const entityAboutToBeUpdated = entityLoader.utils.constructEntity(this.fieldsForEntity);
@@ -554,7 +544,7 @@ export class AuthorizationResultBasedUpdateMutator<
554
544
  this.privacyPolicy.authorizeUpdateAsync(
555
545
  this.viewerContext,
556
546
  queryContext,
557
- { previousValue: this.originalEntity, cascadingDeleteCause },
547
+ { previousValue: this.originalEntity, cascadingDeleteCause: this.cascadingDeleteCause },
558
548
  entityAboutToBeUpdated,
559
549
  this.metricsAdapter,
560
550
  ),
@@ -567,19 +557,31 @@ export class AuthorizationResultBasedUpdateMutator<
567
557
  this.mutationValidators,
568
558
  queryContext,
569
559
  entityAboutToBeUpdated,
570
- { type: EntityMutationType.UPDATE, previousValue: this.originalEntity, cascadingDeleteCause },
560
+ {
561
+ type: EntityMutationType.UPDATE,
562
+ previousValue: this.originalEntity,
563
+ cascadingDeleteCause: this.cascadingDeleteCause,
564
+ },
571
565
  );
572
566
  await this.executeMutationTriggersAsync(
573
567
  this.mutationTriggers.beforeAll,
574
568
  queryContext,
575
569
  entityAboutToBeUpdated,
576
- { type: EntityMutationType.UPDATE, previousValue: this.originalEntity, cascadingDeleteCause },
570
+ {
571
+ type: EntityMutationType.UPDATE,
572
+ previousValue: this.originalEntity,
573
+ cascadingDeleteCause: this.cascadingDeleteCause,
574
+ },
577
575
  );
578
576
  await this.executeMutationTriggersAsync(
579
577
  this.mutationTriggers.beforeUpdate,
580
578
  queryContext,
581
579
  entityAboutToBeUpdated,
582
- { type: EntityMutationType.UPDATE, previousValue: this.originalEntity, cascadingDeleteCause },
580
+ {
581
+ type: EntityMutationType.UPDATE,
582
+ previousValue: this.originalEntity,
583
+ cascadingDeleteCause: this.cascadingDeleteCause,
584
+ },
583
585
  );
584
586
 
585
587
  // skip the database update when specified
@@ -626,13 +628,21 @@ export class AuthorizationResultBasedUpdateMutator<
626
628
  this.mutationTriggers.afterUpdate,
627
629
  queryContext,
628
630
  updatedEntity,
629
- { type: EntityMutationType.UPDATE, previousValue: this.originalEntity, cascadingDeleteCause },
631
+ {
632
+ type: EntityMutationType.UPDATE,
633
+ previousValue: this.originalEntity,
634
+ cascadingDeleteCause: this.cascadingDeleteCause,
635
+ },
630
636
  );
631
637
  await this.executeMutationTriggersAsync(
632
638
  this.mutationTriggers.afterAll,
633
639
  queryContext,
634
640
  updatedEntity,
635
- { type: EntityMutationType.UPDATE, previousValue: this.originalEntity, cascadingDeleteCause },
641
+ {
642
+ type: EntityMutationType.UPDATE,
643
+ previousValue: this.originalEntity,
644
+ cascadingDeleteCause: this.cascadingDeleteCause,
645
+ },
636
646
  );
637
647
 
638
648
  queryContext.appendPostCommitCallback(
@@ -643,7 +653,7 @@ export class AuthorizationResultBasedUpdateMutator<
643
653
  {
644
654
  type: EntityMutationType.UPDATE,
645
655
  previousValue: this.originalEntity,
646
- cascadingDeleteCause,
656
+ cascadingDeleteCause: this.cascadingDeleteCause,
647
657
  },
648
658
  ),
649
659
  );
@@ -723,6 +733,7 @@ export class AuthorizationResultBasedDeleteMutator<
723
733
  databaseAdapter: EntityDatabaseAdapter<TFields, TIDField>,
724
734
  metricsAdapter: IEntityMetricsAdapter,
725
735
  private readonly entity: TEntity,
736
+ private readonly cascadingDeleteCause: EntityCascadingDeletionInfo | null,
726
737
  ) {
727
738
  super(
728
739
  companionProvider,
@@ -749,20 +760,18 @@ export class AuthorizationResultBasedDeleteMutator<
749
760
  EntityMetricsMutationType.DELETE,
750
761
  this.entityClass.name,
751
762
  this.queryContext,
752
- )(this.deleteInTransactionAsync(new Set(), false, null));
763
+ )(this.deleteInTransactionAsync(new Set(), false));
753
764
  }
754
765
 
755
766
  private async deleteInTransactionAsync(
756
767
  processedEntityIdentifiersFromTransitiveDeletions: Set<string>,
757
768
  skipDatabaseDeletion: boolean,
758
- cascadingDeleteCause: EntityCascadingDeletionInfo | null,
759
769
  ): Promise<Result<void>> {
760
770
  return await this.queryContext.runInTransactionIfNotInTransactionAsync((innerQueryContext) =>
761
771
  this.deleteInternalAsync(
762
772
  innerQueryContext,
763
773
  processedEntityIdentifiersFromTransitiveDeletions,
764
774
  skipDatabaseDeletion,
765
- cascadingDeleteCause,
766
775
  ),
767
776
  );
768
777
  }
@@ -771,13 +780,12 @@ export class AuthorizationResultBasedDeleteMutator<
771
780
  queryContext: EntityTransactionalQueryContext,
772
781
  processedEntityIdentifiersFromTransitiveDeletions: Set<string>,
773
782
  skipDatabaseDeletion: boolean,
774
- cascadingDeleteCause: EntityCascadingDeletionInfo | null,
775
783
  ): Promise<Result<void>> {
776
784
  const authorizeDeleteResult = await asyncResult(
777
785
  this.privacyPolicy.authorizeDeleteAsync(
778
786
  this.viewerContext,
779
787
  queryContext,
780
- { previousValue: null, cascadingDeleteCause },
788
+ { previousValue: null, cascadingDeleteCause: this.cascadingDeleteCause },
781
789
  this.entity,
782
790
  this.metricsAdapter,
783
791
  ),
@@ -790,20 +798,25 @@ export class AuthorizationResultBasedDeleteMutator<
790
798
  this.entity,
791
799
  queryContext,
792
800
  processedEntityIdentifiersFromTransitiveDeletions,
793
- cascadingDeleteCause,
794
801
  );
795
802
 
796
803
  await this.executeMutationTriggersAsync(
797
804
  this.mutationTriggers.beforeAll,
798
805
  queryContext,
799
806
  this.entity,
800
- { type: EntityMutationType.DELETE, cascadingDeleteCause },
807
+ {
808
+ type: EntityMutationType.DELETE,
809
+ cascadingDeleteCause: this.cascadingDeleteCause,
810
+ },
801
811
  );
802
812
  await this.executeMutationTriggersAsync(
803
813
  this.mutationTriggers.beforeDelete,
804
814
  queryContext,
805
815
  this.entity,
806
- { type: EntityMutationType.DELETE, cascadingDeleteCause },
816
+ {
817
+ type: EntityMutationType.DELETE,
818
+ cascadingDeleteCause: this.cascadingDeleteCause,
819
+ },
807
820
  );
808
821
 
809
822
  if (!skipDatabaseDeletion) {
@@ -816,7 +829,7 @@ export class AuthorizationResultBasedDeleteMutator<
816
829
 
817
830
  const entityLoader = this.entityLoaderFactory.forLoad(this.viewerContext, queryContext, {
818
831
  previousValue: null,
819
- cascadingDeleteCause,
832
+ cascadingDeleteCause: this.cascadingDeleteCause,
820
833
  });
821
834
 
822
835
  // Invalidate all caches for the entity so that any previously-cached loads
@@ -837,13 +850,19 @@ export class AuthorizationResultBasedDeleteMutator<
837
850
  this.mutationTriggers.afterDelete,
838
851
  queryContext,
839
852
  this.entity,
840
- { type: EntityMutationType.DELETE, cascadingDeleteCause },
853
+ {
854
+ type: EntityMutationType.DELETE,
855
+ cascadingDeleteCause: this.cascadingDeleteCause,
856
+ },
841
857
  );
842
858
  await this.executeMutationTriggersAsync(
843
859
  this.mutationTriggers.afterAll,
844
860
  queryContext,
845
861
  this.entity,
846
- { type: EntityMutationType.DELETE, cascadingDeleteCause },
862
+ {
863
+ type: EntityMutationType.DELETE,
864
+ cascadingDeleteCause: this.cascadingDeleteCause,
865
+ },
847
866
  );
848
867
 
849
868
  queryContext.appendPostCommitCallback(
@@ -851,7 +870,10 @@ export class AuthorizationResultBasedDeleteMutator<
851
870
  this,
852
871
  this.mutationTriggers.afterCommit,
853
872
  this.entity,
854
- { type: EntityMutationType.DELETE, cascadingDeleteCause },
873
+ {
874
+ type: EntityMutationType.DELETE,
875
+ cascadingDeleteCause: this.cascadingDeleteCause,
876
+ },
855
877
  ),
856
878
  );
857
879
 
@@ -876,7 +898,6 @@ export class AuthorizationResultBasedDeleteMutator<
876
898
  entity: TEntity,
877
899
  queryContext: EntityTransactionalQueryContext,
878
900
  processedEntityIdentifiers: Set<string>,
879
- cascadingDeleteCause: EntityCascadingDeletionInfo | null,
880
901
  ): Promise<void> {
881
902
  // prevent infinite reference cycles by keeping track of entities already processed
882
903
  if (processedEntityIdentifiers.has(entity.getUniqueIdentifier())) {
@@ -899,7 +920,7 @@ export class AuthorizationResultBasedDeleteMutator<
899
920
 
900
921
  const newCascadingDeleteCause = {
901
922
  entity,
902
- cascadingDeleteCause,
923
+ cascadingDeleteCause: this.cascadingDeleteCause,
903
924
  };
904
925
 
905
926
  await Promise.all(
@@ -949,11 +970,10 @@ export class AuthorizationResultBasedDeleteMutator<
949
970
  inboundReferenceEntities.map((inboundReferenceEntity) =>
950
971
  enforceAsyncResult(
951
972
  mutatorFactory
952
- .forDelete(inboundReferenceEntity, queryContext)
973
+ .forDelete(inboundReferenceEntity, queryContext, newCascadingDeleteCause)
953
974
  .deleteInTransactionAsync(
954
975
  processedEntityIdentifiers,
955
976
  /* skipDatabaseDeletion */ true, // deletion is handled by DB
956
- newCascadingDeleteCause,
957
977
  ),
958
978
  ),
959
979
  ),
@@ -965,11 +985,9 @@ export class AuthorizationResultBasedDeleteMutator<
965
985
  inboundReferenceEntities.map((inboundReferenceEntity) =>
966
986
  enforceAsyncResult(
967
987
  mutatorFactory
968
- .forUpdate(inboundReferenceEntity, queryContext)
988
+ .forUpdate(inboundReferenceEntity, queryContext, newCascadingDeleteCause)
969
989
  .setField(fieldName, null)
970
- [
971
- 'updateInTransactionAsync'
972
- ](/* skipDatabaseUpdate */ true, newCascadingDeleteCause),
990
+ ['updateInTransactionAsync'](/* skipDatabaseUpdate */ true),
973
991
  ),
974
992
  ),
975
993
  );
@@ -980,11 +998,9 @@ export class AuthorizationResultBasedDeleteMutator<
980
998
  inboundReferenceEntities.map((inboundReferenceEntity) =>
981
999
  enforceAsyncResult(
982
1000
  mutatorFactory
983
- .forUpdate(inboundReferenceEntity, queryContext)
1001
+ .forUpdate(inboundReferenceEntity, queryContext, newCascadingDeleteCause)
984
1002
  .setField(fieldName, null)
985
- [
986
- 'updateInTransactionAsync'
987
- ](/* skipDatabaseUpdate */ false, newCascadingDeleteCause),
1003
+ ['updateInTransactionAsync'](/* skipDatabaseUpdate */ false),
988
1004
  ),
989
1005
  ),
990
1006
  );
@@ -995,11 +1011,10 @@ export class AuthorizationResultBasedDeleteMutator<
995
1011
  inboundReferenceEntities.map((inboundReferenceEntity) =>
996
1012
  enforceAsyncResult(
997
1013
  mutatorFactory
998
- .forDelete(inboundReferenceEntity, queryContext)
1014
+ .forDelete(inboundReferenceEntity, queryContext, newCascadingDeleteCause)
999
1015
  .deleteInTransactionAsync(
1000
1016
  processedEntityIdentifiers,
1001
1017
  /* skipDatabaseDeletion */ false,
1002
- newCascadingDeleteCause,
1003
1018
  ),
1004
1019
  ),
1005
1020
  ),
@@ -1,13 +1,13 @@
1
1
  import nullthrows from 'nullthrows';
2
2
 
3
- import IEntityCacheAdapter from './IEntityCacheAdapter';
3
+ import { IEntityCacheAdapter } from './IEntityCacheAdapter';
4
4
  import { IEntityLoadKey, IEntityLoadValue } from './internal/EntityLoadInterfaces';
5
- import { CacheStatus, CacheLoadResult } from './internal/ReadThroughEntityCache';
5
+ import { CacheLoadResult, CacheStatus } from './internal/ReadThroughEntityCache';
6
6
 
7
7
  /**
8
8
  * A IEntityCacheAdapter that composes other IEntityCacheAdapter instances.
9
9
  */
10
- export default class ComposedEntityCacheAdapter<
10
+ export class ComposedEntityCacheAdapter<
11
11
  TFields extends Record<string, any>,
12
12
  TIDField extends keyof TFields,
13
13
  > implements IEntityCacheAdapter<TFields, TIDField>
@@ -5,7 +5,7 @@ import { ISecondaryEntityCache } from './EntitySecondaryCacheLoader';
5
5
  /**
6
6
  * A ISecondaryEntityCache that composes other ISecondaryEntityCache instances.
7
7
  */
8
- export default class ComposedSecondaryEntityCache<TLoadParams, TFields extends Record<string, any>>
8
+ export class ComposedSecondaryEntityCache<TLoadParams, TFields extends Record<string, any>>
9
9
  implements ISecondaryEntityCache<TFields, TLoadParams>
10
10
  {
11
11
  /**
@@ -1,12 +1,13 @@
1
1
  import { enforceAsyncResult } from '@expo/results';
2
2
 
3
- import AuthorizationResultBasedEntityAssociationLoader, {
3
+ import {
4
+ AuthorizationResultBasedEntityAssociationLoader,
4
5
  EntityLoadThroughDirective,
5
6
  } from './AuthorizationResultBasedEntityAssociationLoader';
6
7
  import { IEntityClass } from './Entity';
7
- import EntityPrivacyPolicy from './EntityPrivacyPolicy';
8
- import ReadonlyEntity from './ReadonlyEntity';
9
- import ViewerContext from './ViewerContext';
8
+ import { EntityPrivacyPolicy } from './EntityPrivacyPolicy';
9
+ import { ReadonlyEntity } from './ReadonlyEntity';
10
+ import { ViewerContext } from './ViewerContext';
10
11
  import { enforceResultsAsync } from './entityUtils';
11
12
 
12
13
  /**
@@ -14,7 +15,7 @@ import { enforceResultsAsync } from './entityUtils';
14
15
  * associated with an entity. In relational databases, these entities are often referenced
15
16
  * by foreign keys.
16
17
  */
17
- export default class EnforcingEntityAssociationLoader<
18
+ export class EnforcingEntityAssociationLoader<
18
19
  TFields extends Record<string, any>,
19
20
  TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
20
21
  TViewerContext extends ViewerContext,
@@ -1,15 +1,15 @@
1
1
  import { enforceAsyncResult } from '@expo/results';
2
2
 
3
3
  import { AuthorizationResultBasedCreateMutator } from './AuthorizationResultBasedEntityMutator';
4
- import EntityPrivacyPolicy from './EntityPrivacyPolicy';
5
- import ReadonlyEntity from './ReadonlyEntity';
6
- import ViewerContext from './ViewerContext';
4
+ import { EntityPrivacyPolicy } from './EntityPrivacyPolicy';
5
+ import { ReadonlyEntity } from './ReadonlyEntity';
6
+ import { ViewerContext } from './ViewerContext';
7
7
 
8
8
  /**
9
9
  * Enforcing entity creator. All updates
10
10
  * through this creator will throw if authorization is not successful.
11
11
  */
12
- export default class EnforcingEntityCreator<
12
+ export class EnforcingEntityCreator<
13
13
  TFields extends Record<string, any>,
14
14
  TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
15
15
  TViewerContext extends ViewerContext,
@@ -1,15 +1,15 @@
1
1
  import { enforceAsyncResult } from '@expo/results';
2
2
 
3
3
  import { AuthorizationResultBasedDeleteMutator } from './AuthorizationResultBasedEntityMutator';
4
- import EntityPrivacyPolicy from './EntityPrivacyPolicy';
5
- import ReadonlyEntity from './ReadonlyEntity';
6
- import ViewerContext from './ViewerContext';
4
+ import { EntityPrivacyPolicy } from './EntityPrivacyPolicy';
5
+ import { ReadonlyEntity } from './ReadonlyEntity';
6
+ import { ViewerContext } from './ViewerContext';
7
7
 
8
8
  /**
9
9
  * Enforcing entity deleter. All deletes
10
10
  * through this deleter will throw if authorization is not successful.
11
11
  */
12
- export default class EnforcingEntityDeleter<
12
+ export class EnforcingEntityDeleter<
13
13
  TFields extends Record<string, any>,
14
14
  TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
15
15
  TViewerContext extends ViewerContext,
@@ -1,13 +1,13 @@
1
- import AuthorizationResultBasedEntityLoader from './AuthorizationResultBasedEntityLoader';
1
+ import { AuthorizationResultBasedEntityLoader } from './AuthorizationResultBasedEntityLoader';
2
2
  import { EntityCompositeField, EntityCompositeFieldValue } from './EntityConfiguration';
3
3
  import {
4
4
  FieldEqualityCondition,
5
5
  QuerySelectionModifiers,
6
6
  QuerySelectionModifiersWithOrderByRaw,
7
7
  } from './EntityDatabaseAdapter';
8
- import EntityPrivacyPolicy from './EntityPrivacyPolicy';
9
- import ReadonlyEntity from './ReadonlyEntity';
10
- import ViewerContext from './ViewerContext';
8
+ import { EntityPrivacyPolicy } from './EntityPrivacyPolicy';
9
+ import { ReadonlyEntity } from './ReadonlyEntity';
10
+ import { ViewerContext } from './ViewerContext';
11
11
  import { CompositeFieldValueHolder } from './internal/CompositeFieldHolder';
12
12
  import { CompositeFieldValueMap } from './internal/CompositeFieldValueMap';
13
13
  import { mapMap } from './utils/collections/maps';
@@ -17,7 +17,7 @@ import { mapMap } from './utils/collections/maps';
17
17
  * cached, and authorized against the entity's EntityPrivacyPolicy. All loads
18
18
  * through this loader will throw if the load is not successful.
19
19
  */
20
- export default class EnforcingEntityLoader<
20
+ export class EnforcingEntityLoader<
21
21
  TFields extends Record<string, any>,
22
22
  TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
23
23
  TViewerContext extends ViewerContext,
@@ -1,15 +1,15 @@
1
1
  import { enforceAsyncResult } from '@expo/results';
2
2
 
3
3
  import { AuthorizationResultBasedUpdateMutator } from './AuthorizationResultBasedEntityMutator';
4
- import EntityPrivacyPolicy from './EntityPrivacyPolicy';
5
- import ReadonlyEntity from './ReadonlyEntity';
6
- import ViewerContext from './ViewerContext';
4
+ import { EntityPrivacyPolicy } from './EntityPrivacyPolicy';
5
+ import { ReadonlyEntity } from './ReadonlyEntity';
6
+ import { ViewerContext } from './ViewerContext';
7
7
 
8
8
  /**
9
9
  * Enforcing entity updater. All updates
10
10
  * through this updater will throw if authorization is not successful.
11
11
  */
12
- export default class EnforcingEntityUpdater<
12
+ export class EnforcingEntityUpdater<
13
13
  TFields extends Record<string, any>,
14
14
  TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
15
15
  TViewerContext extends ViewerContext,
package/src/Entity.ts CHANGED
@@ -3,17 +3,17 @@ import {
3
3
  AuthorizationResultBasedDeleteMutator,
4
4
  AuthorizationResultBasedUpdateMutator,
5
5
  } from './AuthorizationResultBasedEntityMutator';
6
- import EnforcingEntityCreator from './EnforcingEntityCreator';
7
- import EnforcingEntityDeleter from './EnforcingEntityDeleter';
8
- import EnforcingEntityUpdater from './EnforcingEntityUpdater';
6
+ import { EnforcingEntityCreator } from './EnforcingEntityCreator';
7
+ import { EnforcingEntityDeleter } from './EnforcingEntityDeleter';
8
+ import { EnforcingEntityUpdater } from './EnforcingEntityUpdater';
9
9
  import { EntityCompanionDefinition } from './EntityCompanionProvider';
10
- import EntityCreator from './EntityCreator';
11
- import EntityDeleter from './EntityDeleter';
12
- import EntityPrivacyPolicy from './EntityPrivacyPolicy';
10
+ import { EntityCreator } from './EntityCreator';
11
+ import { EntityDeleter } from './EntityDeleter';
12
+ import { EntityPrivacyPolicy } from './EntityPrivacyPolicy';
13
13
  import { EntityQueryContext } from './EntityQueryContext';
14
- import EntityUpdater from './EntityUpdater';
15
- import ReadonlyEntity from './ReadonlyEntity';
16
- import ViewerContext from './ViewerContext';
14
+ import { EntityUpdater } from './EntityUpdater';
15
+ import { ReadonlyEntity } from './ReadonlyEntity';
16
+ import { ViewerContext } from './ViewerContext';
17
17
 
18
18
  /**
19
19
  * Entity is a privacy-first data model.
@@ -33,7 +33,7 @@ import ViewerContext from './ViewerContext';
33
33
  * All concrete entity implementations should extend this class and provide their
34
34
  * own EntityCompanionDefinition.
35
35
  */
36
- export default abstract class Entity<
36
+ export abstract class Entity<
37
37
  TFields extends Record<string, any>,
38
38
  TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
39
39
  TViewerContext extends ViewerContext,
@@ -1,16 +1,16 @@
1
- import AuthorizationResultBasedEntityAssociationLoader from './AuthorizationResultBasedEntityAssociationLoader';
2
- import EnforcingEntityAssociationLoader from './EnforcingEntityAssociationLoader';
1
+ import { AuthorizationResultBasedEntityAssociationLoader } from './AuthorizationResultBasedEntityAssociationLoader';
2
+ import { EnforcingEntityAssociationLoader } from './EnforcingEntityAssociationLoader';
3
3
  import { IEntityClass } from './Entity';
4
4
  import { EntityQueryContext } from './EntityQueryContext';
5
- import ReadonlyEntity from './ReadonlyEntity';
6
- import ViewerContext from './ViewerContext';
5
+ import { ReadonlyEntity } from './ReadonlyEntity';
6
+ import { ViewerContext } from './ViewerContext';
7
7
 
8
8
  /**
9
9
  * An association loader is a set of convenience methods for loading entities
10
10
  * associated with an entity. In relational databases, these entities are often referenced
11
11
  * by foreign keys.
12
12
  */
13
- export default class EntityAssociationLoader<
13
+ export class EntityAssociationLoader<
14
14
  TFields extends Record<string, any>,
15
15
  TIDField extends keyof NonNullable<Pick<TFields, TSelectedFields>>,
16
16
  TViewerContext extends ViewerContext,